@messenger-box/platform-server 10.0.3-alpha.7 → 10.0.3-alpha.74

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 (202) hide show
  1. package/lib/config/env-config.d.ts +7 -0
  2. package/lib/config/env-config.js +20 -0
  3. package/lib/config/env-config.js.map +1 -1
  4. package/lib/containers/containers.js +9 -1
  5. package/lib/containers/containers.js.map +1 -1
  6. package/lib/containers/context-services-from-container.d.ts +1 -1
  7. package/lib/containers/context-services-from-container.js +4 -2
  8. package/lib/containers/context-services-from-container.js.map +1 -1
  9. package/lib/graphql/resolvers/ai-fragment.d.ts +3 -0
  10. package/lib/graphql/resolvers/ai-fragment.js +276 -0
  11. package/lib/graphql/resolvers/ai-fragment.js.map +1 -0
  12. package/lib/graphql/resolvers/channel-member.d.ts +3 -2
  13. package/lib/graphql/resolvers/channel-member.js +30 -5
  14. package/lib/graphql/resolvers/channel-member.js.map +1 -1
  15. package/lib/graphql/resolvers/channel.d.ts +3 -2
  16. package/lib/graphql/resolvers/channel.js +308 -53
  17. package/lib/graphql/resolvers/channel.js.map +1 -1
  18. package/lib/graphql/resolvers/extended-token-account.d.ts +3 -2
  19. package/lib/graphql/resolvers/extended-token-account.js +90 -23
  20. package/lib/graphql/resolvers/extended-token-account.js.map +1 -1
  21. package/lib/graphql/resolvers/index.d.ts +1 -1
  22. package/lib/graphql/resolvers/index.js +1 -1
  23. package/lib/graphql/resolvers/index.js.map +1 -1
  24. package/lib/graphql/resolvers/post-thread.d.ts +1 -1
  25. package/lib/graphql/resolvers/post-thread.js +294 -132
  26. package/lib/graphql/resolvers/post-thread.js.map +1 -1
  27. package/lib/graphql/resolvers/post.d.ts +2 -3
  28. package/lib/graphql/resolvers/post.js +874 -239
  29. package/lib/graphql/resolvers/post.js.map +1 -1
  30. package/lib/graphql/resolvers/reaction.d.ts +3 -2
  31. package/lib/graphql/resolvers/reaction.js +96 -14
  32. package/lib/graphql/resolvers/reaction.js.map +1 -1
  33. package/lib/graphql/schema/ai-fragment.graphql +311 -0
  34. package/lib/graphql/schema/ai-fragment.graphql.js +1 -0
  35. package/lib/graphql/schema/ai-fragment.graphql.js.map +1 -0
  36. package/lib/graphql/schema/channel-member.graphql +110 -21
  37. package/lib/graphql/schema/channel-member.graphql.js +1 -1
  38. package/lib/graphql/schema/channel.graphql +356 -38
  39. package/lib/graphql/schema/channel.graphql.js +1 -1
  40. package/lib/graphql/schema/index.js +2 -2
  41. package/lib/graphql/schema/index.js.map +1 -1
  42. package/lib/graphql/schema/post-thread.graphql +167 -21
  43. package/lib/graphql/schema/post-thread.graphql.js +1 -1
  44. package/lib/graphql/schema/post.graphql +360 -40
  45. package/lib/graphql/schema/post.graphql.js +1 -1
  46. package/lib/graphql/schema/reaction.graphql +71 -13
  47. package/lib/graphql/schema/reaction.graphql.js +1 -1
  48. package/lib/graphql/schema/services.graphql +21 -0
  49. package/lib/graphql/schema/users.graphql +76 -13
  50. package/lib/graphql/schema/users.graphql.js +1 -1
  51. package/lib/index.js +1 -1
  52. package/lib/index.js.map +1 -1
  53. package/lib/inngest/factory.d.ts +20 -0
  54. package/lib/inngest/factory.js +4 -0
  55. package/lib/inngest/factory.js.map +1 -0
  56. package/lib/inngest/functions.d.ts +235 -0
  57. package/lib/inngest/functions.js +1385 -0
  58. package/lib/inngest/functions.js.map +1 -0
  59. package/lib/inngest/index.d.ts +3 -0
  60. package/lib/inngest/prompt.d.ts +6 -0
  61. package/lib/inngest/prompt.js +871 -0
  62. package/lib/inngest/prompt.js.map +1 -0
  63. package/lib/inngest/utils.d.ts +5 -0
  64. package/lib/inngest/utils.js +32 -0
  65. package/lib/inngest/utils.js.map +1 -0
  66. package/lib/interfaces/index.d.ts +0 -1
  67. package/lib/interfaces/services.d.ts +1 -1
  68. package/lib/migrations/dbMigrations/AddPostsConfigurationsMigration.d.ts +17 -0
  69. package/lib/migrations/dbMigrations/AddPostsConfigurationsMigration.js +44 -0
  70. package/lib/migrations/dbMigrations/AddPostsConfigurationsMigration.js.map +1 -0
  71. package/lib/migrations/dbMigrations/index.d.ts +1 -0
  72. package/lib/migrations/index.d.ts +1 -0
  73. package/lib/migrations/mail-template-migration.js +1 -1
  74. package/lib/migrations/message-notification-template-migration.d.ts +1 -1
  75. package/lib/migrations/message-notification-template-migration.js +1 -1
  76. package/lib/module.js +10 -3
  77. package/lib/module.js.map +1 -1
  78. package/lib/plugins/ai-fragment-moleculer-service.d.ts +29 -0
  79. package/lib/plugins/ai-fragment-moleculer-service.js +516 -0
  80. package/lib/plugins/ai-fragment-moleculer-service.js.map +1 -0
  81. package/lib/plugins/channel-moleculer-service.d.ts +21 -1
  82. package/lib/plugins/channel-moleculer-service.js +426 -115
  83. package/lib/plugins/channel-moleculer-service.js.map +1 -1
  84. package/lib/plugins/extended-token-account-moleculer-service.d.ts +25 -1
  85. package/lib/plugins/extended-token-account-moleculer-service.js +348 -22
  86. package/lib/plugins/extended-token-account-moleculer-service.js.map +1 -1
  87. package/lib/plugins/index.d.ts +1 -0
  88. package/lib/plugins/messenger-notification-moleculer-service.d.ts +27 -3
  89. package/lib/plugins/messenger-notification-moleculer-service.js +404 -58
  90. package/lib/plugins/messenger-notification-moleculer-service.js.map +1 -1
  91. package/lib/plugins/post-moleculer-service.d.ts +85 -21
  92. package/lib/plugins/post-moleculer-service.js +1102 -256
  93. package/lib/plugins/post-moleculer-service.js.map +1 -1
  94. package/lib/plugins/post-thread-moleculer-service.d.ts +33 -1
  95. package/lib/plugins/post-thread-moleculer-service.js +326 -8
  96. package/lib/plugins/post-thread-moleculer-service.js.map +1 -1
  97. package/lib/plugins/reaction-moleculer-service.js +1 -1
  98. package/lib/plugins/reaction-moleculer-service.js.map +1 -1
  99. package/lib/preferences/settings/post-settings.d.ts +2 -0
  100. package/lib/preferences/settings/post-settings.js +47 -9
  101. package/lib/preferences/settings/post-settings.js.map +1 -1
  102. package/lib/services/ai-fragment-service.d.ts +195 -0
  103. package/lib/services/ai-fragment-service.js +631 -0
  104. package/lib/services/ai-fragment-service.js.map +1 -0
  105. package/lib/services/channel-service.d.ts +181 -33
  106. package/lib/services/channel-service.js +842 -273
  107. package/lib/services/channel-service.js.map +1 -1
  108. package/lib/services/extended-token-account-service.d.ts +130 -14
  109. package/lib/services/extended-token-account-service.js +462 -52
  110. package/lib/services/extended-token-account-service.js.map +1 -1
  111. package/lib/services/index.d.ts +3 -0
  112. package/lib/services/messenger-notification-service.d.ts +106 -13
  113. package/lib/services/messenger-notification-service.js +824 -442
  114. package/lib/services/messenger-notification-service.js.map +1 -1
  115. package/lib/services/post-service.d.ts +189 -16
  116. package/lib/services/post-service.js +949 -113
  117. package/lib/services/post-service.js.map +1 -1
  118. package/lib/services/post-thread-service.d.ts +114 -5
  119. package/lib/services/post-thread-service.js +400 -13
  120. package/lib/services/post-thread-service.js.map +1 -1
  121. package/lib/services/proxy-services/ai-fragment-microservice.d.ts +23 -0
  122. package/lib/services/proxy-services/ai-fragment-microservice.js +78 -0
  123. package/lib/services/proxy-services/ai-fragment-microservice.js.map +1 -0
  124. package/lib/services/proxy-services/channel-microservice.d.ts +6 -3
  125. package/lib/services/proxy-services/channel-microservice.js +25 -10
  126. package/lib/services/proxy-services/channel-microservice.js.map +1 -1
  127. package/lib/services/proxy-services/index.d.ts +1 -0
  128. package/lib/services/proxy-services/messenger-notification-microservice.d.ts +128 -8
  129. package/lib/services/proxy-services/messenger-notification-microservice.js +324 -29
  130. package/lib/services/proxy-services/messenger-notification-microservice.js.map +1 -1
  131. package/lib/services/proxy-services/post-microservice.d.ts +207 -12
  132. package/lib/services/proxy-services/post-microservice.js +623 -54
  133. package/lib/services/proxy-services/post-microservice.js.map +1 -1
  134. package/lib/services/proxy-services/post-thread-microservice.d.ts +134 -3
  135. package/lib/services/proxy-services/post-thread-microservice.js +388 -6
  136. package/lib/services/proxy-services/post-thread-microservice.js.map +1 -1
  137. package/lib/services/proxy-services/reaction-microservice.d.ts +161 -3
  138. package/lib/services/proxy-services/reaction-microservice.js +474 -2
  139. package/lib/services/proxy-services/reaction-microservice.js.map +1 -1
  140. package/lib/services/reaction-service.d.ts +124 -4
  141. package/lib/services/reaction-service.js +415 -3
  142. package/lib/services/reaction-service.js.map +1 -1
  143. package/lib/services/redis-cache-manager.d.ts +18 -0
  144. package/lib/services/redis-cache-manager.js +83 -0
  145. package/lib/services/redis-cache-manager.js.map +1 -0
  146. package/lib/services/sandbox-error-service.d.ts +23 -0
  147. package/lib/services/sandbox-error-service.js +422 -0
  148. package/lib/services/sandbox-error-service.js.map +1 -0
  149. package/lib/store/models/account-token-store.d.ts +1 -1
  150. package/lib/store/models/account-token-store.js.map +1 -1
  151. package/lib/store/models/ai-fragment.d.ts +4 -0
  152. package/lib/store/models/ai-fragment.js +125 -0
  153. package/lib/store/models/ai-fragment.js.map +1 -0
  154. package/lib/store/models/channel.d.ts +2 -3
  155. package/lib/store/models/channel.js +185 -71
  156. package/lib/store/models/channel.js.map +1 -1
  157. package/lib/store/models/index.d.ts +1 -0
  158. package/lib/store/models/post-thread.d.ts +3 -3
  159. package/lib/store/models/post-thread.js +96 -14
  160. package/lib/store/models/post-thread.js.map +1 -1
  161. package/lib/store/models/post.d.ts +2 -3
  162. package/lib/store/models/post.js +143 -23
  163. package/lib/store/models/post.js.map +1 -1
  164. package/lib/store/models/reaction.d.ts +2 -3
  165. package/lib/store/models/reaction.js +67 -8
  166. package/lib/store/models/reaction.js.map +1 -1
  167. package/lib/store/repositories/__tests__/__fixtures__/team-repository.d.ts +3 -3
  168. package/lib/store/repositories/ai-fragment-repository.d.ts +15 -0
  169. package/lib/store/repositories/ai-fragment-repository.js +69 -0
  170. package/lib/store/repositories/ai-fragment-repository.js.map +1 -0
  171. package/lib/store/repositories/channel-repository.d.ts +6 -6
  172. package/lib/store/repositories/channel-repository.js +5 -2
  173. package/lib/store/repositories/channel-repository.js.map +1 -1
  174. package/lib/store/repositories/index.d.ts +1 -0
  175. package/lib/store/repositories/post-repository.d.ts +6 -6
  176. package/lib/store/repositories/post-repository.js +5 -2
  177. package/lib/store/repositories/post-repository.js.map +1 -1
  178. package/lib/store/repositories/post-thread-repository.d.ts +6 -6
  179. package/lib/store/repositories/post-thread-repository.js +5 -2
  180. package/lib/store/repositories/post-thread-repository.js.map +1 -1
  181. package/lib/store/repositories/reaction-repository.d.ts +6 -6
  182. package/lib/store/repositories/reaction-repository.js +5 -2
  183. package/lib/store/repositories/reaction-repository.js.map +1 -1
  184. package/lib/templates/constants/SERVER_TYPES.ts.template +4 -4
  185. package/lib/templates/repositories/AiFragmentRepository.ts.template +4 -0
  186. package/lib/templates/repositories/ChannelRepository.ts.template +3 -3
  187. package/lib/templates/repositories/PostRepository.ts.template +3 -3
  188. package/lib/templates/repositories/PostThreadRepository.ts.template +3 -3
  189. package/lib/templates/repositories/ReactionRepository.ts.template +3 -4
  190. package/lib/templates/services/AiFragmentService.ts.template +123 -0
  191. package/lib/templates/services/ChannelService.ts.template +290 -39
  192. package/lib/templates/services/ExtendedTokenAccountService.ts.template +104 -9
  193. package/lib/templates/services/MessengerNotificationService.ts.template +94 -19
  194. package/lib/templates/services/PostService.ts.template +265 -20
  195. package/lib/templates/services/PostThreadService.ts.template +151 -6
  196. package/lib/templates/services/ReactionService.ts.template +129 -3
  197. package/lib/templates/services/RedisCacheManager.ts.template +22 -0
  198. package/lib/templates/services/SandboxErrorService.ts.template +125 -0
  199. package/package.json +14 -7
  200. package/lib/interfaces/context.d.ts +0 -14
  201. package/lib/store/models/common-options.js +0 -20
  202. package/lib/store/models/common-options.js.map +0 -1
@@ -1,81 +1,491 @@
1
- import {__decorate,__param,__metadata}from'tslib';import {injectable,inject}from'inversify';import {CommonType}from'@common-stack/core';import {ServiceBroker}from'moleculer';import {MoleculerServiceName,AccountServiceAction,TokenTypesEnum,AuthStrategy}from'common';let ExtendedTokenAccountService = class ExtendedTokenAccountService {
1
+ import {__decorate,__param,__metadata}from'tslib';import {injectable,inject}from'inversify';import {CommonType}from'@common-stack/core';import {ServiceBroker}from'moleculer';import'@cdm-logger/core';import {DisposableCollection}from'@adminide-stack/core';import {MoleculerServiceName,AccountServiceAction,TokenTypesEnum,AuthStrategy}from'common/server';import {BaseService2}from'@common-stack/store-mongo';/**
2
+ * Extended Token Account Service Implementation
3
+ *
4
+ * This service handles comprehensive device token management and account operations
5
+ * within the messenger platform, providing advanced token lifecycle management
6
+ * and user account integration capabilities.
7
+ *
8
+ * Key capabilities:
9
+ * - Device token management (add, remove, retrieve)
10
+ * - Expo notification token handling
11
+ * - Auth0 integration and user lookup
12
+ * - Token lifecycle tracking (refresh count, usage count)
13
+ * - Bulk token operations and cleanup
14
+ * - Account service integration through Moleculer broker
15
+ * - Cross-platform token synchronization
16
+ * - Token validation and verification
17
+ * - User context and authentication strategy handling
18
+ * - Comprehensive error handling and logging
19
+ *
20
+ * The service integrates with the account microservice through Moleculer broker
21
+ * and provides robust token management for mobile and web applications,
22
+ * ensuring reliable push notification delivery and user authentication flows.
23
+ */
24
+ let ExtendedTokenAccountService = class ExtendedTokenAccountService extends BaseService2 {
2
25
  broker;
3
- constructor(broker) {
26
+ toDispose = new DisposableCollection();
27
+ logger;
28
+ constructor(broker, logger) {
29
+ super({});
4
30
  this.broker = broker;
31
+ this.logger = logger?.child({
32
+ className: 'ExtendedTokenAccountService'
33
+ }) || console;
5
34
  }
6
35
  /**
36
+ * Disposes of resources used by the service
37
+ */
38
+ dispose() {
39
+ this.toDispose.dispose();
40
+ }
41
+ /**
42
+ * Retrieves device tokens for a specific account
7
43
  *
8
- * @param deviceToken
9
- * @param accountId
44
+ * @description Fetches the complete user account with all associated device tokens
45
+ * for notification delivery and device management purposes
10
46
  *
11
- * tokens: [{
12
- * type: 'MOBILE_DEVICE_PUSH',
13
- * token: 'deviceName:xdfjdljfdljfllk',
14
- * }]
47
+ * @param {string} accountId - The account ID to retrieve tokens for
48
+ * @returns {Promise<AsDomainType<IUserAccountModel> | Error>} - User account with tokens or error
15
49
  */
16
50
  async getDeviceToken(accountId) {
17
- return this.broker.call(`${MoleculerServiceName.AccountUser}.${AccountServiceAction.FindAccountById}`, {
18
- id: accountId
19
- });
51
+ try {
52
+ if (!accountId) {
53
+ return new Error('Account ID is required');
54
+ }
55
+ this.logger.debug('Retrieving device tokens for account', {
56
+ accountId
57
+ });
58
+ const user = await this.broker.call(`${MoleculerServiceName.AccountUser}.${AccountServiceAction.FindAccountById}`, {
59
+ id: accountId
60
+ });
61
+ if (!user) {
62
+ return new Error(`Account not found for ID: ${accountId}`);
63
+ }
64
+ this.logger.debug('Device tokens retrieved successfully', {
65
+ accountId,
66
+ tokenCount: user.tokens?.length || 0
67
+ });
68
+ // Convert IUserAccount to AsDomainType<IUserAccountModel>
69
+ return user;
70
+ } catch (error) {
71
+ this.logger.error('Error retrieving device tokens: %o', error);
72
+ return error instanceof Error ? error : new Error('Unknown error occurred while retrieving device tokens');
73
+ }
20
74
  }
75
+ /**
76
+ * Sets or updates a device token for an account
77
+ *
78
+ * @description Adds a new Expo notification token to the user's account
79
+ * for push notification delivery, with tracking metadata
80
+ *
81
+ * @param {string} deviceToken - The device token to add
82
+ * @param {string} accountId - The account ID to add the token to
83
+ * @returns {Promise<AsDomainType<IUserAccountModel> | Error>} - Updated user account or error
84
+ */
21
85
  async setDeviceToken(deviceToken, accountId) {
22
- const mobileToken = {
23
- type: TokenTypesEnum.ExpoNotificationToken,
24
- token: deviceToken,
25
- refreshedCount: 0,
26
- usedCount: 0
27
- };
28
- return this.broker.call(`${MoleculerServiceName.AccountUser}.${AccountServiceAction.AddUserToken}`, {
29
- userId: accountId,
30
- token: mobileToken
31
- });
86
+ try {
87
+ if (!deviceToken) {
88
+ return new Error('Device token is required');
89
+ }
90
+ if (!accountId) {
91
+ return new Error('Account ID is required');
92
+ }
93
+ this.logger.debug('Setting device token for account', {
94
+ accountId,
95
+ tokenLength: deviceToken.length
96
+ });
97
+ const mobileToken = {
98
+ type: TokenTypesEnum.ExpoNotificationToken,
99
+ token: deviceToken,
100
+ refreshedCount: 0,
101
+ usedCount: 0,
102
+ createdAt: new Date(),
103
+ lastUsedAt: null
104
+ };
105
+ const result = await this.broker.call(`${MoleculerServiceName.AccountUser}.${AccountServiceAction.AddUserToken}`, {
106
+ userId: accountId,
107
+ token: mobileToken
108
+ });
109
+ if (!result) {
110
+ return new Error('Failed to add device token');
111
+ }
112
+ this.logger.debug('Device token added successfully', {
113
+ accountId,
114
+ tokenType: mobileToken.type
115
+ });
116
+ // Convert IUserAccount to AsDomainType<IUserAccountModel>
117
+ return result;
118
+ } catch (error) {
119
+ this.logger.error('Error setting device token: %o', error);
120
+ return error instanceof Error ? error : new Error('Unknown error occurred while setting device token');
121
+ }
32
122
  }
123
+ /**
124
+ * Removes a device token from an account
125
+ *
126
+ * @description Removes the specified Expo notification token from the user's account
127
+ * to stop push notifications to that device
128
+ *
129
+ * @param {string} deviceToken - The device token to remove
130
+ * @param {string} accountId - The account ID to remove the token from
131
+ * @returns {Promise<AsDomainType<IUserAccountModel> | Error>} - Updated user account or error
132
+ */
33
133
  async removeDeviceToken(deviceToken, accountId) {
34
- const mobileToken = {
35
- type: TokenTypesEnum.ExpoNotificationToken,
36
- token: deviceToken,
37
- refreshedCount: 0,
38
- usedCount: 0
39
- };
40
- return this.broker.call(`${MoleculerServiceName.AccountUser}.${AccountServiceAction.RemoveUserToken}`, {
41
- userId: accountId,
42
- token: mobileToken
43
- });
44
- //this.accountService.removeUserToken(accountId, mobileToken);
45
- // return this.accountService.findAccountById(accountId);
134
+ try {
135
+ if (!deviceToken) {
136
+ return new Error('Device token is required');
137
+ }
138
+ if (!accountId) {
139
+ return new Error('Account ID is required');
140
+ }
141
+ this.logger.debug('Removing device token from account', {
142
+ accountId,
143
+ tokenLength: deviceToken.length
144
+ });
145
+ const mobileToken = {
146
+ type: TokenTypesEnum.ExpoNotificationToken,
147
+ token: deviceToken,
148
+ refreshedCount: 0,
149
+ usedCount: 0
150
+ };
151
+ const result = await this.broker.call(`${MoleculerServiceName.AccountUser}.${AccountServiceAction.RemoveUserToken}`, {
152
+ userId: accountId,
153
+ token: mobileToken
154
+ });
155
+ if (!result) {
156
+ return new Error('Failed to remove device token');
157
+ }
158
+ this.logger.debug('Device token removed successfully', {
159
+ accountId,
160
+ tokenType: mobileToken.type
161
+ });
162
+ // Convert IUserAccount to AsDomainType<IUserAccountModel>
163
+ return result;
164
+ } catch (error) {
165
+ this.logger.error('Error removing device token: %o', error);
166
+ return error instanceof Error ? error : new Error('Unknown error occurred while removing device token');
167
+ }
46
168
  }
169
+ /**
170
+ * Retrieves an account by Auth0 ID
171
+ *
172
+ * @description Finds a user account using Auth0 authentication ID
173
+ * with proper authentication strategy context
174
+ *
175
+ * @param {string} auth0Id - The Auth0 user ID
176
+ * @param {IAccountServiceContext} context - Optional account service context
177
+ * @returns {Promise<AsDomainType<IUserAccountModel> | Error>} - User account or error
178
+ */
47
179
  async getAccountByAuth0Id(auth0Id, context) {
48
- return this.broker.call(`${MoleculerServiceName.AccountUser}.${AccountServiceAction.FindAccountByUser}`, {
49
- id: auth0Id,
50
- context: context || {
51
- authStrategy: AuthStrategy.Auth0 // should be replaced with sessioin context
180
+ try {
181
+ if (!auth0Id) {
182
+ return new Error('Auth0 ID is required');
52
183
  }
53
- });
184
+ this.logger.debug('Retrieving account by Auth0 ID', {
185
+ auth0Id
186
+ });
187
+ const serviceContext = context || {
188
+ authStrategy: AuthStrategy.Auth0
189
+ };
190
+ const user = await this.broker.call(`${MoleculerServiceName.AccountUser}.${AccountServiceAction.FindAccountByUser}`, {
191
+ id: auth0Id,
192
+ context: serviceContext
193
+ });
194
+ if (!user) {
195
+ return new Error(`Account not found for Auth0 ID: ${auth0Id}`);
196
+ }
197
+ this.logger.debug('Account retrieved successfully by Auth0 ID', {
198
+ auth0Id,
199
+ accountId: user.id,
200
+ authStrategy: serviceContext.authStrategy
201
+ });
202
+ // Convert IUserAccount to AsDomainType<IUserAccountModel>
203
+ return user;
204
+ } catch (error) {
205
+ this.logger.error('Error retrieving account by Auth0 ID: %o', error);
206
+ return error instanceof Error ? error : new Error('Unknown error occurred while retrieving account by Auth0 ID');
207
+ }
54
208
  }
209
+ /**
210
+ * Removes all Expo notification tokens for a user by Auth0 ID
211
+ *
212
+ * @description Cleans up all Expo notification tokens associated with a user account
213
+ * identified by Auth0 ID, typically used during logout or account deactivation
214
+ *
215
+ * @param {string} auth0Id - The Auth0 user ID
216
+ * @param {IAccountServiceContext} context - Optional account service context
217
+ * @returns {Promise<void | Error>} - Success status or error
218
+ */
55
219
  async removeUserExpoTokenByAuth0Id(auth0Id, context) {
56
- const user = await this.broker.call(`${MoleculerServiceName.AccountUser}.${AccountServiceAction.FindAccountByUser}`, {
57
- id: auth0Id,
58
- context: context || {
59
- authStrategy: AuthStrategy.Auth0 // should be replaced with sessioin context
60
- }
61
- });
62
- if (user) {
63
- const expoTokens = user?.tokens?.filter(t => t?.type === 'EXPO_NOTIFICATION_TOKEN');
64
- if (expoTokens && expoTokens?.length > 0) {
65
- expoTokens.forEach(async t => {
220
+ try {
221
+ if (!auth0Id) {
222
+ return new Error('Auth0 ID is required');
223
+ }
224
+ this.logger.debug('Removing Expo tokens for Auth0 user', {
225
+ auth0Id
226
+ });
227
+ const serviceContext = context || {
228
+ authStrategy: AuthStrategy.Auth0
229
+ };
230
+ const user = await this.broker.call(`${MoleculerServiceName.AccountUser}.${AccountServiceAction.FindAccountByUser}`, {
231
+ id: auth0Id,
232
+ context: serviceContext
233
+ });
234
+ if (!user) {
235
+ return new Error(`Account not found for Auth0 ID: ${auth0Id}`);
236
+ }
237
+ const expoTokens = user?.tokens?.filter(t => t?.type === 'EXPO_NOTIFICATION_TOKEN') || [];
238
+ if (expoTokens.length === 0) {
239
+ this.logger.debug('No Expo tokens found to remove', {
240
+ auth0Id
241
+ });
242
+ return;
243
+ }
244
+ this.logger.debug('Found Expo tokens to remove', {
245
+ auth0Id,
246
+ tokenCount: expoTokens.length
247
+ });
248
+ // Process token removals in parallel for better performance
249
+ const removalPromises = expoTokens.map(async token => {
250
+ try {
66
251
  const mobileToken = {
67
252
  type: TokenTypesEnum.ExpoNotificationToken,
68
- token: t?.token,
253
+ token: token?.token,
69
254
  refreshedCount: 0,
70
255
  usedCount: 0
71
256
  };
72
- this.broker.call(`${MoleculerServiceName.AccountUser}.${AccountServiceAction.RemoveUserToken}`, {
73
- userId: user?.id,
257
+ await this.broker.call(`${MoleculerServiceName.AccountUser}.${AccountServiceAction.RemoveUserToken}`, {
258
+ userId: user.id,
74
259
  token: mobileToken
75
260
  });
261
+ return true;
262
+ } catch (error) {
263
+ this.logger.error('Error removing individual token: %o', error);
264
+ return false;
265
+ }
266
+ });
267
+ const results = await Promise.all(removalPromises);
268
+ const successCount = results.filter(Boolean).length;
269
+ const failureCount = results.length - successCount;
270
+ if (failureCount > 0) {
271
+ this.logger.warn('Some token removals failed', {
272
+ auth0Id,
273
+ successCount,
274
+ failureCount
76
275
  });
276
+ return new Error(`Failed to remove ${failureCount} tokens`);
277
+ }
278
+ this.logger.debug('Expo token removal completed', {
279
+ auth0Id,
280
+ totalTokens: expoTokens.length,
281
+ successfulRemovals: successCount,
282
+ failedRemovals: failureCount
283
+ });
284
+ } catch (error) {
285
+ this.logger.error('Error removing user Expo tokens by Auth0 ID: %o', error);
286
+ return error instanceof Error ? error : new Error('Unknown error occurred while removing user Expo tokens');
287
+ }
288
+ }
289
+ /**
290
+ * Retrieves device tokens for multiple users
291
+ *
292
+ * @description Fetches device tokens for a list of user accounts
293
+ * for bulk notification operations
294
+ *
295
+ * @param {string[]} userIds - Array of user IDs to get tokens for
296
+ * @returns {Promise<Record<string, AsDomainType<IUserAccountModel>> | Error>} - Map of user ID to account or error
297
+ */
298
+ async getAllDeviceToken(userIds) {
299
+ try {
300
+ if (!userIds || userIds.length === 0) {
301
+ return new Error('User IDs array is required and cannot be empty');
302
+ }
303
+ this.logger.debug('Retrieving device tokens for multiple users', {
304
+ userCount: userIds.length
305
+ });
306
+ // Process user lookups in parallel for better performance
307
+ const userPromises = userIds.map(async userId => {
308
+ try {
309
+ const user = await this.getDeviceToken(userId);
310
+ return {
311
+ userId,
312
+ user
313
+ };
314
+ } catch (error) {
315
+ this.logger.warn('Failed to get tokens for user', {
316
+ userId,
317
+ error
318
+ });
319
+ return {
320
+ userId,
321
+ user: null
322
+ };
323
+ }
324
+ });
325
+ const results = await Promise.all(userPromises);
326
+ // Filter out failed requests and build result map
327
+ const userMap = {};
328
+ let successCount = 0;
329
+ results.forEach(({
330
+ userId,
331
+ user
332
+ }) => {
333
+ if (user && !(user instanceof Error)) {
334
+ userMap[userId] = user;
335
+ successCount++;
336
+ }
337
+ });
338
+ this.logger.debug('Bulk device token retrieval completed', {
339
+ totalRequested: userIds.length,
340
+ successfulRetrievals: successCount,
341
+ failedRetrievals: userIds.length - successCount
342
+ });
343
+ return userMap;
344
+ } catch (error) {
345
+ this.logger.error('Error retrieving device tokens for multiple users: %o', error);
346
+ return error instanceof Error ? error : new Error('Unknown error occurred while retrieving device tokens for multiple users');
347
+ }
348
+ }
349
+ /**
350
+ * Retrieves device tokens for multiple users by their account IDs
351
+ *
352
+ * @description Alternative method for bulk token retrieval using account IDs
353
+ * with enhanced filtering and validation
354
+ *
355
+ * @param {string[]} accountIds - Array of account IDs to get tokens for
356
+ * @returns {Promise<Array<{ accountId: string; tokens: any[] }> | Error>} - Array of account tokens or error
357
+ */
358
+ async getAllDeviceTokenById(accountIds) {
359
+ try {
360
+ if (!accountIds || accountIds.length === 0) {
361
+ return new Error('Account IDs array is required and cannot be empty');
362
+ }
363
+ this.logger.debug('Retrieving device tokens by account IDs', {
364
+ accountCount: accountIds.length
365
+ });
366
+ const tokenResults = [];
367
+ // Process each account to extract tokens
368
+ for (const accountId of accountIds) {
369
+ try {
370
+ const userResult = await this.getDeviceToken(accountId);
371
+ if (userResult instanceof Error) {
372
+ this.logger.warn('Failed to get account data', {
373
+ accountId,
374
+ error: userResult.message
375
+ });
376
+ continue;
377
+ }
378
+ const tokens = userResult.tokens?.filter(t => t?.type === TokenTypesEnum.ExpoNotificationToken && t?.token) || [];
379
+ tokenResults.push({
380
+ accountId,
381
+ tokens: tokens.map(t => ({
382
+ token: t.token,
383
+ type: t.type,
384
+ refreshedCount: t.refreshedCount || 0,
385
+ usedCount: t.usedCount || 0,
386
+ createdAt: t.createdAt,
387
+ lastUsedAt: t.lastUsedAt
388
+ }))
389
+ });
390
+ } catch (error) {
391
+ this.logger.warn('Error processing account for token retrieval', {
392
+ accountId,
393
+ error
394
+ });
395
+ }
396
+ }
397
+ this.logger.debug('Bulk token retrieval by ID completed', {
398
+ totalRequested: accountIds.length,
399
+ successfulRetrievals: tokenResults.length,
400
+ totalTokens: tokenResults.reduce((sum, result) => sum + result.tokens.length, 0)
401
+ });
402
+ return tokenResults;
403
+ } catch (error) {
404
+ this.logger.error('Error retrieving device tokens by account IDs: %o', error);
405
+ return error instanceof Error ? error : new Error('Unknown error occurred while retrieving device tokens by account IDs');
406
+ }
407
+ }
408
+ /**
409
+ * Validates if a device token is active and valid
410
+ *
411
+ * @description Checks if a device token exists and is active for an account
412
+ *
413
+ * @param {string} deviceToken - The device token to validate
414
+ * @param {string} accountId - The account ID to check against
415
+ * @returns {Promise<boolean | Error>} - Validation result or error
416
+ */
417
+ async validateDeviceToken(deviceToken, accountId) {
418
+ try {
419
+ if (!deviceToken || !accountId) {
420
+ return new Error('Device token and account ID are required');
421
+ }
422
+ this.logger.debug('Validating device token', {
423
+ accountId,
424
+ tokenLength: deviceToken.length
425
+ });
426
+ const userResult = await this.getDeviceToken(accountId);
427
+ if (userResult instanceof Error) {
428
+ return userResult;
429
+ }
430
+ const hasValidToken = userResult.tokens?.some(t => t?.type === TokenTypesEnum.ExpoNotificationToken && t?.token === deviceToken) || false;
431
+ this.logger.debug('Device token validation completed', {
432
+ accountId,
433
+ isValid: hasValidToken
434
+ });
435
+ return hasValidToken;
436
+ } catch (error) {
437
+ this.logger.error('Error validating device token: %o', error);
438
+ return error instanceof Error ? error : new Error('Unknown error occurred while validating device token');
439
+ }
440
+ }
441
+ /**
442
+ * Updates token usage statistics
443
+ *
444
+ * @description Increments usage count for a device token
445
+ *
446
+ * @param {string} deviceToken - The device token to update
447
+ * @param {string} accountId - The account ID the token belongs to
448
+ * @returns {Promise<boolean | Error>} - Update result or error
449
+ */
450
+ async updateTokenUsage(deviceToken, accountId) {
451
+ try {
452
+ if (!deviceToken || !accountId) {
453
+ return new Error('Device token and account ID are required');
454
+ }
455
+ this.logger.debug('Updating token usage statistics', {
456
+ accountId
457
+ });
458
+ // First remove the old token
459
+ const removeResult = await this.removeDeviceToken(deviceToken, accountId);
460
+ if (removeResult instanceof Error) {
461
+ return removeResult;
462
+ }
463
+ // Then add it back with updated usage count
464
+ // Note: This is a simplified approach. In a real implementation,
465
+ // you might want to have a dedicated endpoint for updating token metadata
466
+ const updatedToken = {
467
+ type: TokenTypesEnum.ExpoNotificationToken,
468
+ token: deviceToken,
469
+ refreshedCount: 0,
470
+ usedCount: 1,
471
+ // Increment usage
472
+ lastUsedAt: new Date()
473
+ };
474
+ const addResult = await this.broker.call(`${MoleculerServiceName.AccountUser}.${AccountServiceAction.AddUserToken}`, {
475
+ userId: accountId,
476
+ token: updatedToken
477
+ });
478
+ if (!addResult) {
479
+ return new Error('Failed to update token usage');
77
480
  }
481
+ this.logger.debug('Token usage updated successfully', {
482
+ accountId
483
+ });
484
+ return true;
485
+ } catch (error) {
486
+ this.logger.error('Error updating token usage: %o', error);
487
+ return error instanceof Error ? error : new Error('Unknown error occurred while updating token usage');
78
488
  }
79
489
  }
80
490
  };
81
- ExtendedTokenAccountService = __decorate([injectable(), __param(0, inject(CommonType.MOLECULER_BROKER)), __metadata("design:paramtypes", [ServiceBroker])], ExtendedTokenAccountService);export{ExtendedTokenAccountService};//# sourceMappingURL=extended-token-account-service.js.map
491
+ ExtendedTokenAccountService = __decorate([injectable(), __param(0, inject(CommonType.MOLECULER_BROKER)), __param(1, inject('Logger')), __metadata("design:paramtypes", [ServiceBroker, Object])], ExtendedTokenAccountService);export{ExtendedTokenAccountService};//# sourceMappingURL=extended-token-account-service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"extended-token-account-service.js","sources":["../../src/services/extended-token-account-service.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extended-token-account-service.js","sources":["../../src/services/extended-token-account-service.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -4,3 +4,6 @@ export * from './post-thread-service';
4
4
  export * from './reaction-service';
5
5
  export * from './messenger-notification-service';
6
6
  export * from './extended-token-account-service';
7
+ export * from './redis-cache-manager';
8
+ export * from './sandbox-error-service';
9
+ export * from './ai-fragment-service';