@messenger-box/platform-server 10.0.3-alpha.7 → 10.0.3-alpha.72
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.
- package/lib/containers/containers.js +4 -1
- package/lib/containers/containers.js.map +1 -1
- package/lib/containers/context-services-from-container.d.ts +1 -1
- package/lib/containers/context-services-from-container.js +1 -1
- package/lib/containers/context-services-from-container.js.map +1 -1
- package/lib/graphql/resolvers/channel-member.d.ts +3 -2
- package/lib/graphql/resolvers/channel-member.js +30 -5
- package/lib/graphql/resolvers/channel-member.js.map +1 -1
- package/lib/graphql/resolvers/channel.d.ts +3 -2
- package/lib/graphql/resolvers/channel.js +279 -53
- package/lib/graphql/resolvers/channel.js.map +1 -1
- package/lib/graphql/resolvers/extended-token-account.d.ts +3 -2
- package/lib/graphql/resolvers/extended-token-account.js +90 -23
- package/lib/graphql/resolvers/extended-token-account.js.map +1 -1
- package/lib/graphql/resolvers/index.d.ts +1 -1
- package/lib/graphql/resolvers/post-thread.d.ts +1 -1
- package/lib/graphql/resolvers/post-thread.js +294 -132
- package/lib/graphql/resolvers/post-thread.js.map +1 -1
- package/lib/graphql/resolvers/post.d.ts +2 -3
- package/lib/graphql/resolvers/post.js +696 -234
- package/lib/graphql/resolvers/post.js.map +1 -1
- package/lib/graphql/resolvers/reaction.d.ts +3 -2
- package/lib/graphql/resolvers/reaction.js +96 -14
- package/lib/graphql/resolvers/reaction.js.map +1 -1
- package/lib/graphql/schema/channel-member.graphql +110 -21
- package/lib/graphql/schema/channel-member.graphql.js +1 -1
- package/lib/graphql/schema/channel.graphql +337 -38
- package/lib/graphql/schema/channel.graphql.js +1 -1
- package/lib/graphql/schema/post-thread.graphql +167 -21
- package/lib/graphql/schema/post-thread.graphql.js +1 -1
- package/lib/graphql/schema/post.graphql +284 -40
- package/lib/graphql/schema/post.graphql.js +1 -1
- package/lib/graphql/schema/reaction.graphql +71 -13
- package/lib/graphql/schema/reaction.graphql.js +1 -1
- package/lib/graphql/schema/services.graphql +2 -0
- package/lib/graphql/schema/users.graphql +76 -13
- package/lib/graphql/schema/users.graphql.js +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/interfaces/index.d.ts +0 -1
- package/lib/interfaces/services.d.ts +1 -1
- package/lib/migrations/dbMigrations/AddPostsConfigurationsMigration.d.ts +17 -0
- package/lib/migrations/dbMigrations/AddPostsConfigurationsMigration.js +44 -0
- package/lib/migrations/dbMigrations/AddPostsConfigurationsMigration.js.map +1 -0
- package/lib/migrations/dbMigrations/index.d.ts +1 -0
- package/lib/migrations/index.d.ts +1 -0
- package/lib/migrations/mail-template-migration.js +1 -1
- package/lib/migrations/message-notification-template-migration.d.ts +1 -1
- package/lib/migrations/message-notification-template-migration.js +1 -1
- package/lib/plugins/channel-moleculer-service.d.ts +21 -1
- package/lib/plugins/channel-moleculer-service.js +417 -115
- package/lib/plugins/channel-moleculer-service.js.map +1 -1
- package/lib/plugins/extended-token-account-moleculer-service.d.ts +25 -1
- package/lib/plugins/extended-token-account-moleculer-service.js +348 -22
- package/lib/plugins/extended-token-account-moleculer-service.js.map +1 -1
- package/lib/plugins/messenger-notification-moleculer-service.d.ts +27 -3
- package/lib/plugins/messenger-notification-moleculer-service.js +404 -58
- package/lib/plugins/messenger-notification-moleculer-service.js.map +1 -1
- package/lib/plugins/post-moleculer-service.d.ts +85 -21
- package/lib/plugins/post-moleculer-service.js +986 -256
- package/lib/plugins/post-moleculer-service.js.map +1 -1
- package/lib/plugins/post-thread-moleculer-service.d.ts +33 -1
- package/lib/plugins/post-thread-moleculer-service.js +326 -8
- package/lib/plugins/post-thread-moleculer-service.js.map +1 -1
- package/lib/plugins/reaction-moleculer-service.js +1 -1
- package/lib/plugins/reaction-moleculer-service.js.map +1 -1
- package/lib/preferences/settings/post-settings.d.ts +2 -0
- package/lib/preferences/settings/post-settings.js +47 -9
- package/lib/preferences/settings/post-settings.js.map +1 -1
- package/lib/services/channel-service.d.ts +179 -33
- package/lib/services/channel-service.js +821 -274
- package/lib/services/channel-service.js.map +1 -1
- package/lib/services/extended-token-account-service.d.ts +130 -14
- package/lib/services/extended-token-account-service.js +462 -52
- package/lib/services/extended-token-account-service.js.map +1 -1
- package/lib/services/index.d.ts +1 -0
- package/lib/services/messenger-notification-service.d.ts +106 -13
- package/lib/services/messenger-notification-service.js +824 -442
- package/lib/services/messenger-notification-service.js.map +1 -1
- package/lib/services/post-service.d.ts +182 -16
- package/lib/services/post-service.js +731 -115
- package/lib/services/post-service.js.map +1 -1
- package/lib/services/post-thread-service.d.ts +114 -5
- package/lib/services/post-thread-service.js +400 -13
- package/lib/services/post-thread-service.js.map +1 -1
- package/lib/services/proxy-services/channel-microservice.d.ts +5 -3
- package/lib/services/proxy-services/channel-microservice.js +19 -10
- package/lib/services/proxy-services/channel-microservice.js.map +1 -1
- package/lib/services/proxy-services/messenger-notification-microservice.d.ts +128 -8
- package/lib/services/proxy-services/messenger-notification-microservice.js +324 -29
- package/lib/services/proxy-services/messenger-notification-microservice.js.map +1 -1
- package/lib/services/proxy-services/post-microservice.d.ts +186 -12
- package/lib/services/proxy-services/post-microservice.js +543 -54
- package/lib/services/proxy-services/post-microservice.js.map +1 -1
- package/lib/services/proxy-services/post-thread-microservice.d.ts +134 -3
- package/lib/services/proxy-services/post-thread-microservice.js +388 -6
- package/lib/services/proxy-services/post-thread-microservice.js.map +1 -1
- package/lib/services/proxy-services/reaction-microservice.d.ts +161 -3
- package/lib/services/proxy-services/reaction-microservice.js +474 -2
- package/lib/services/proxy-services/reaction-microservice.js.map +1 -1
- package/lib/services/reaction-service.d.ts +124 -4
- package/lib/services/reaction-service.js +415 -3
- package/lib/services/reaction-service.js.map +1 -1
- package/lib/services/redis-cache-manager.d.ts +18 -0
- package/lib/services/redis-cache-manager.js +83 -0
- package/lib/services/redis-cache-manager.js.map +1 -0
- package/lib/store/models/account-token-store.d.ts +1 -1
- package/lib/store/models/account-token-store.js.map +1 -1
- package/lib/store/models/channel.d.ts +2 -3
- package/lib/store/models/channel.js +181 -72
- package/lib/store/models/channel.js.map +1 -1
- package/lib/store/models/post-thread.d.ts +3 -3
- package/lib/store/models/post-thread.js +96 -14
- package/lib/store/models/post-thread.js.map +1 -1
- package/lib/store/models/post.d.ts +2 -3
- package/lib/store/models/post.js +143 -23
- package/lib/store/models/post.js.map +1 -1
- package/lib/store/models/reaction.d.ts +2 -3
- package/lib/store/models/reaction.js +67 -8
- package/lib/store/models/reaction.js.map +1 -1
- package/lib/store/repositories/__tests__/__fixtures__/team-repository.d.ts +3 -3
- package/lib/store/repositories/channel-repository.d.ts +6 -6
- package/lib/store/repositories/channel-repository.js +5 -2
- package/lib/store/repositories/channel-repository.js.map +1 -1
- package/lib/store/repositories/post-repository.d.ts +6 -6
- package/lib/store/repositories/post-repository.js +5 -2
- package/lib/store/repositories/post-repository.js.map +1 -1
- package/lib/store/repositories/post-thread-repository.d.ts +6 -6
- package/lib/store/repositories/post-thread-repository.js +5 -2
- package/lib/store/repositories/post-thread-repository.js.map +1 -1
- package/lib/store/repositories/reaction-repository.d.ts +6 -6
- package/lib/store/repositories/reaction-repository.js +5 -2
- package/lib/store/repositories/reaction-repository.js.map +1 -1
- package/lib/templates/constants/SERVER_TYPES.ts.template +0 -3
- package/lib/templates/repositories/ChannelRepository.ts.template +3 -3
- package/lib/templates/repositories/PostRepository.ts.template +3 -3
- package/lib/templates/repositories/PostThreadRepository.ts.template +3 -3
- package/lib/templates/repositories/ReactionRepository.ts.template +3 -4
- package/lib/templates/services/ChannelService.ts.template +280 -39
- package/lib/templates/services/ExtendedTokenAccountService.ts.template +104 -9
- package/lib/templates/services/MessengerNotificationService.ts.template +94 -19
- package/lib/templates/services/PostService.ts.template +184 -20
- package/lib/templates/services/PostThreadService.ts.template +151 -6
- package/lib/templates/services/ReactionService.ts.template +129 -3
- package/lib/templates/services/RedisCacheManager.ts.template +22 -0
- package/package.json +6 -5
- package/lib/interfaces/context.d.ts +0 -14
- package/lib/store/models/common-options.js +0 -20
- package/lib/store/models/common-options.js.map +0 -1
|
@@ -1,43 +1,369 @@
|
|
|
1
|
-
import {Service}from'moleculer';import {MoleculerTopics,SERVER_TYPES,UserBroadcasterAction}from'common';
|
|
1
|
+
import {Service}from'moleculer';import {MoleculerTopics,SERVER_TYPES,MoleculerServiceName,UserBroadcasterAction}from'common/server';import {ApolloClientMixin}from'@adminide-stack/platform-server';import {config}from'../config/env-config.js';import {logger}from'@common-stack/server-core';/**
|
|
2
|
+
* Extended Token Account Moleculer Service
|
|
3
|
+
*
|
|
4
|
+
* This Moleculer service provides a comprehensive microservice interface for device token
|
|
5
|
+
* management and account operations within the messenger platform. It orchestrates
|
|
6
|
+
* token lifecycle events, user session management, and device registration workflows
|
|
7
|
+
* through event-driven architecture.
|
|
8
|
+
*
|
|
9
|
+
* Key capabilities:
|
|
10
|
+
* - User session lifecycle management (login, logout, initialization)
|
|
11
|
+
* - Device token registration and cleanup
|
|
12
|
+
* - Expo notification token management
|
|
13
|
+
* - Auth0 integration and user lookup
|
|
14
|
+
* - Cross-service communication and event handling
|
|
15
|
+
* - Bulk token operations and cleanup
|
|
16
|
+
* - Error handling and recovery mechanisms
|
|
17
|
+
* - Performance monitoring and logging
|
|
18
|
+
*
|
|
19
|
+
* The service integrates with the account microservice through Moleculer broker
|
|
20
|
+
* and provides robust token management for mobile and web applications,
|
|
21
|
+
* ensuring reliable push notification delivery and user authentication flows.
|
|
22
|
+
*/
|
|
23
|
+
class ExtendedTokenAccountMoleculerService extends Service {
|
|
2
24
|
extendedTokenAccountService;
|
|
25
|
+
container;
|
|
3
26
|
constructor(broker, {
|
|
4
|
-
container
|
|
27
|
+
container,
|
|
28
|
+
settings
|
|
5
29
|
}) {
|
|
6
30
|
super(broker);
|
|
7
31
|
this.container = container;
|
|
8
32
|
const topic = MoleculerTopics.ExtendedTokenAccountService;
|
|
33
|
+
// Initialize the extended token account service
|
|
9
34
|
this.extendedTokenAccountService = container.get(SERVER_TYPES.ExtendedTokenAccountService);
|
|
10
35
|
this.parseServiceSchema({
|
|
11
36
|
name: topic,
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
37
|
+
dependencies: [MoleculerServiceName.AccountUser],
|
|
38
|
+
settings: {
|
|
39
|
+
apolloClient: {
|
|
40
|
+
serverUri: config.GRAPHQL_URL
|
|
41
|
+
},
|
|
42
|
+
...settings
|
|
43
|
+
},
|
|
44
|
+
mixins: [ApolloClientMixin],
|
|
19
45
|
events: {
|
|
46
|
+
/**
|
|
47
|
+
* Handles user session revocation events
|
|
48
|
+
*
|
|
49
|
+
* @description Cleans up all device tokens when a user logs out
|
|
50
|
+
* or their session is revoked to prevent unauthorized notifications
|
|
51
|
+
*/
|
|
20
52
|
[UserBroadcasterAction.OnUserSessionRevoked]: {
|
|
21
|
-
// handler: async (ctx: Context<{ event: IUserProfile }>) => {
|
|
22
53
|
handler: async ctx => {
|
|
23
54
|
const {
|
|
24
55
|
event
|
|
25
|
-
} = ctx?.params;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
56
|
+
} = ctx?.params || {};
|
|
57
|
+
try {
|
|
58
|
+
logger.debug('Processing user session revocation', {
|
|
59
|
+
auth0Id: event?.auth0Id,
|
|
60
|
+
sessionId: event?.sessionId,
|
|
61
|
+
platform: event?.platform
|
|
62
|
+
});
|
|
63
|
+
if (!event?.auth0Id) {
|
|
64
|
+
logger.warn('Missing auth0Id in session revocation event');
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
// Remove all Expo tokens for the user
|
|
68
|
+
const result = await this.extendedTokenAccountService.removeUserExpoTokenByAuth0Id(event.auth0Id);
|
|
69
|
+
if (result instanceof Error) {
|
|
70
|
+
logger.error('Failed to remove user Expo tokens: %o', result);
|
|
71
|
+
throw result;
|
|
72
|
+
}
|
|
73
|
+
logger.debug('User session revocation processed successfully', {
|
|
74
|
+
auth0Id: event.auth0Id,
|
|
75
|
+
sessionId: event.sessionId,
|
|
76
|
+
success: result
|
|
77
|
+
});
|
|
78
|
+
// Emit cleanup completion event for other services
|
|
79
|
+
this.broker.emit('user.tokens.cleanup.completed', {
|
|
80
|
+
auth0Id: event.auth0Id,
|
|
81
|
+
sessionId: event.sessionId,
|
|
82
|
+
platform: event.platform,
|
|
83
|
+
timestamp: new Date()
|
|
84
|
+
});
|
|
85
|
+
} catch (error) {
|
|
86
|
+
logger.error('Error processing user session revocation: %o', error);
|
|
87
|
+
// Emit error event for monitoring
|
|
88
|
+
this.broker.emit('user.tokens.cleanup.failed', {
|
|
89
|
+
auth0Id: event?.auth0Id,
|
|
90
|
+
sessionId: event?.sessionId,
|
|
91
|
+
error: error.message,
|
|
92
|
+
timestamp: new Date()
|
|
93
|
+
});
|
|
94
|
+
throw error;
|
|
95
|
+
}
|
|
34
96
|
}
|
|
35
97
|
},
|
|
98
|
+
/**
|
|
99
|
+
* Handles user session initialization events
|
|
100
|
+
*
|
|
101
|
+
* @description Processes new user sessions and prepares token management
|
|
102
|
+
*/
|
|
36
103
|
[UserBroadcasterAction.OnUserSessionInitialized]: {
|
|
37
104
|
handler: async ctx => {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
105
|
+
const {
|
|
106
|
+
event
|
|
107
|
+
} = ctx?.params || {};
|
|
108
|
+
try {
|
|
109
|
+
logger.debug('Processing user session initialization', {
|
|
110
|
+
auth0Id: event?.auth0Id,
|
|
111
|
+
sessionId: event?.sessionId,
|
|
112
|
+
platform: event?.platform
|
|
113
|
+
});
|
|
114
|
+
if (!event?.auth0Id) {
|
|
115
|
+
logger.warn('Missing auth0Id in session initialization event');
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
// Validate user account exists
|
|
119
|
+
const accountResult = await this.extendedTokenAccountService.getAccountByAuth0Id(event.auth0Id);
|
|
120
|
+
if (accountResult instanceof Error) {
|
|
121
|
+
logger.error('Failed to find account during session initialization: %o', accountResult);
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
logger.debug('User session initialization processed successfully', {
|
|
125
|
+
auth0Id: event.auth0Id,
|
|
126
|
+
accountId: accountResult.id,
|
|
127
|
+
sessionId: event.sessionId
|
|
128
|
+
});
|
|
129
|
+
// Emit session ready event
|
|
130
|
+
this.broker.emit('user.session.ready', {
|
|
131
|
+
auth0Id: event.auth0Id,
|
|
132
|
+
accountId: accountResult.id,
|
|
133
|
+
sessionId: event.sessionId,
|
|
134
|
+
platform: event.platform,
|
|
135
|
+
timestamp: new Date()
|
|
136
|
+
});
|
|
137
|
+
} catch (error) {
|
|
138
|
+
logger.error('Error processing user session initialization: %o', error);
|
|
139
|
+
// Emit error event for monitoring
|
|
140
|
+
this.broker.emit('user.session.initialization.failed', {
|
|
141
|
+
auth0Id: event?.auth0Id,
|
|
142
|
+
sessionId: event?.sessionId,
|
|
143
|
+
error: error.message,
|
|
144
|
+
timestamp: new Date()
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
},
|
|
149
|
+
/**
|
|
150
|
+
* Handles device token registration events
|
|
151
|
+
*
|
|
152
|
+
* @description Processes device token registration from mobile apps
|
|
153
|
+
*/
|
|
154
|
+
'device.token.register': {
|
|
155
|
+
handler: async ctx => {
|
|
156
|
+
const {
|
|
157
|
+
event
|
|
158
|
+
} = ctx?.params || {};
|
|
159
|
+
try {
|
|
160
|
+
logger.debug('Processing device token registration', {
|
|
161
|
+
accountId: event?.accountId,
|
|
162
|
+
platform: event?.platform
|
|
163
|
+
});
|
|
164
|
+
if (!event?.accountId || !event?.deviceToken) {
|
|
165
|
+
logger.warn('Missing required fields in device token registration');
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
const result = await this.extendedTokenAccountService.setDeviceToken(event.deviceToken, event.accountId);
|
|
169
|
+
if (result instanceof Error) {
|
|
170
|
+
logger.error('Failed to register device token: %o', result);
|
|
171
|
+
throw result;
|
|
172
|
+
}
|
|
173
|
+
logger.debug('Device token registered successfully', {
|
|
174
|
+
accountId: event.accountId,
|
|
175
|
+
platform: event.platform
|
|
176
|
+
});
|
|
177
|
+
// Emit registration success event
|
|
178
|
+
this.broker.emit('device.token.registered', {
|
|
179
|
+
accountId: event.accountId,
|
|
180
|
+
platform: event.platform,
|
|
181
|
+
timestamp: new Date()
|
|
182
|
+
});
|
|
183
|
+
} catch (error) {
|
|
184
|
+
logger.error('Error processing device token registration: %o', error);
|
|
185
|
+
this.broker.emit('device.token.registration.failed', {
|
|
186
|
+
accountId: event?.accountId,
|
|
187
|
+
platform: event?.platform,
|
|
188
|
+
error: error.message,
|
|
189
|
+
timestamp: new Date()
|
|
190
|
+
});
|
|
191
|
+
throw error;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
},
|
|
195
|
+
/**
|
|
196
|
+
* Handles bulk token cleanup events
|
|
197
|
+
*
|
|
198
|
+
* @description Processes bulk token cleanup operations
|
|
199
|
+
*/
|
|
200
|
+
'tokens.bulk.cleanup': {
|
|
201
|
+
handler: async ctx => {
|
|
202
|
+
const {
|
|
203
|
+
event
|
|
204
|
+
} = ctx?.params || {};
|
|
205
|
+
try {
|
|
206
|
+
logger.debug('Processing bulk token cleanup', {
|
|
207
|
+
accountCount: event?.accountIds?.length,
|
|
208
|
+
reason: event?.reason
|
|
209
|
+
});
|
|
210
|
+
if (!event?.accountIds || event.accountIds.length === 0) {
|
|
211
|
+
logger.warn('No account IDs provided for bulk cleanup');
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
const results = await Promise.allSettled(event.accountIds.map(async accountId => {
|
|
215
|
+
// First get account to find auth0Id
|
|
216
|
+
const account = await this.extendedTokenAccountService.getDeviceToken(accountId);
|
|
217
|
+
if (account instanceof Error) {
|
|
218
|
+
throw account;
|
|
219
|
+
}
|
|
220
|
+
// Remove tokens using auth0Id if available
|
|
221
|
+
if (account?.auth0Id) {
|
|
222
|
+
return await this.extendedTokenAccountService.removeUserExpoTokenByAuth0Id(account.auth0Id);
|
|
223
|
+
}
|
|
224
|
+
return false;
|
|
225
|
+
}));
|
|
226
|
+
const successCount = results.filter(result => result.status === 'fulfilled' && result.value !== false && !(result.value instanceof Error)).length;
|
|
227
|
+
logger.debug('Bulk token cleanup completed', {
|
|
228
|
+
totalAccounts: event.accountIds.length,
|
|
229
|
+
successfulCleanups: successCount,
|
|
230
|
+
reason: event.reason
|
|
231
|
+
});
|
|
232
|
+
// Emit completion event
|
|
233
|
+
this.broker.emit('tokens.bulk.cleanup.completed', {
|
|
234
|
+
totalAccounts: event.accountIds.length,
|
|
235
|
+
successfulCleanups: successCount,
|
|
236
|
+
reason: event.reason,
|
|
237
|
+
timestamp: new Date()
|
|
238
|
+
});
|
|
239
|
+
} catch (error) {
|
|
240
|
+
logger.error('Error processing bulk token cleanup: %o', error);
|
|
241
|
+
throw error;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
},
|
|
246
|
+
actions: {
|
|
247
|
+
/**
|
|
248
|
+
* Action: Get device token for an account
|
|
249
|
+
*/
|
|
250
|
+
getDeviceToken: {
|
|
251
|
+
handler: async ctx => {
|
|
252
|
+
try {
|
|
253
|
+
const {
|
|
254
|
+
accountId
|
|
255
|
+
} = ctx.params;
|
|
256
|
+
if (!accountId) {
|
|
257
|
+
throw new Error('Account ID is required');
|
|
258
|
+
}
|
|
259
|
+
return await this.extendedTokenAccountService.getDeviceToken(accountId);
|
|
260
|
+
} catch (error) {
|
|
261
|
+
logger.error('Error in getDeviceToken action: %o', error);
|
|
262
|
+
throw error;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
},
|
|
266
|
+
/**
|
|
267
|
+
* Action: Set device token for an account
|
|
268
|
+
*/
|
|
269
|
+
setDeviceToken: {
|
|
270
|
+
handler: async ctx => {
|
|
271
|
+
try {
|
|
272
|
+
const {
|
|
273
|
+
deviceToken,
|
|
274
|
+
accountId
|
|
275
|
+
} = ctx.params;
|
|
276
|
+
if (!deviceToken || !accountId) {
|
|
277
|
+
throw new Error('Device token and account ID are required');
|
|
278
|
+
}
|
|
279
|
+
return await this.extendedTokenAccountService.setDeviceToken(deviceToken, accountId);
|
|
280
|
+
} catch (error) {
|
|
281
|
+
logger.error('Error in setDeviceToken action: %o', error);
|
|
282
|
+
throw error;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
},
|
|
286
|
+
/**
|
|
287
|
+
* Action: Remove device token from an account
|
|
288
|
+
*/
|
|
289
|
+
removeDeviceToken: {
|
|
290
|
+
handler: async ctx => {
|
|
291
|
+
try {
|
|
292
|
+
const {
|
|
293
|
+
deviceToken,
|
|
294
|
+
accountId
|
|
295
|
+
} = ctx.params;
|
|
296
|
+
if (!deviceToken || !accountId) {
|
|
297
|
+
throw new Error('Device token and account ID are required');
|
|
298
|
+
}
|
|
299
|
+
return await this.extendedTokenAccountService.removeDeviceToken(deviceToken, accountId);
|
|
300
|
+
} catch (error) {
|
|
301
|
+
logger.error('Error in removeDeviceToken action: %o', error);
|
|
302
|
+
throw error;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
},
|
|
306
|
+
/**
|
|
307
|
+
* Action: Get account by Auth0 ID
|
|
308
|
+
*/
|
|
309
|
+
getAccountByAuth0Id: {
|
|
310
|
+
handler: async ctx => {
|
|
311
|
+
try {
|
|
312
|
+
const {
|
|
313
|
+
auth0Id,
|
|
314
|
+
context
|
|
315
|
+
} = ctx.params;
|
|
316
|
+
if (!auth0Id) {
|
|
317
|
+
throw new Error('Auth0 ID is required');
|
|
318
|
+
}
|
|
319
|
+
return await this.extendedTokenAccountService.getAccountByAuth0Id(auth0Id, context);
|
|
320
|
+
} catch (error) {
|
|
321
|
+
logger.error('Error in getAccountByAuth0Id action: %o', error);
|
|
322
|
+
throw error;
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
},
|
|
326
|
+
/**
|
|
327
|
+
* Action: Remove user Expo tokens by Auth0 ID
|
|
328
|
+
*/
|
|
329
|
+
removeUserExpoTokenByAuth0Id: {
|
|
330
|
+
handler: async ctx => {
|
|
331
|
+
try {
|
|
332
|
+
const {
|
|
333
|
+
auth0Id,
|
|
334
|
+
context
|
|
335
|
+
} = ctx.params;
|
|
336
|
+
if (!auth0Id) {
|
|
337
|
+
throw new Error('Auth0 ID is required');
|
|
338
|
+
}
|
|
339
|
+
return await this.extendedTokenAccountService.removeUserExpoTokenByAuth0Id(auth0Id, context);
|
|
340
|
+
} catch (error) {
|
|
341
|
+
logger.error('Error in removeUserExpoTokenByAuth0Id action: %o', error);
|
|
342
|
+
throw error;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
},
|
|
346
|
+
/**
|
|
347
|
+
* Action: Health check for the service
|
|
348
|
+
*/
|
|
349
|
+
health: {
|
|
350
|
+
handler: async () => {
|
|
351
|
+
try {
|
|
352
|
+
return {
|
|
353
|
+
status: 'healthy',
|
|
354
|
+
timestamp: new Date(),
|
|
355
|
+
service: 'ExtendedTokenAccountMoleculerService',
|
|
356
|
+
version: '1.0.0'
|
|
357
|
+
};
|
|
358
|
+
} catch (error) {
|
|
359
|
+
logger.error('Health check failed: %o', error);
|
|
360
|
+
return {
|
|
361
|
+
status: 'unhealthy',
|
|
362
|
+
timestamp: new Date(),
|
|
363
|
+
service: 'ExtendedTokenAccountMoleculerService',
|
|
364
|
+
error: error.message
|
|
365
|
+
};
|
|
366
|
+
}
|
|
41
367
|
}
|
|
42
368
|
}
|
|
43
369
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extended-token-account-moleculer-service.js","sources":["../../src/plugins/extended-token-account-moleculer-service.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"extended-token-account-moleculer-service.js","sources":["../../src/plugins/extended-token-account-moleculer-service.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,33 @@
|
|
|
1
1
|
import { Service, ServiceBroker } from 'moleculer';
|
|
2
2
|
import { Container } from 'inversify';
|
|
3
|
+
/**
|
|
4
|
+
* Messenger Notification Moleculer Service
|
|
5
|
+
*
|
|
6
|
+
* This Moleculer service provides a comprehensive microservice interface for notification
|
|
7
|
+
* management within the messenger platform. It orchestrates various notification workflows
|
|
8
|
+
* including email, SMS, push notifications, and Expo notifications through event-driven
|
|
9
|
+
* architecture.
|
|
10
|
+
*
|
|
11
|
+
* Key capabilities:
|
|
12
|
+
* - Multi-channel notification delivery (email, SMS, push, Expo)
|
|
13
|
+
* - Unread message notification scheduling and management
|
|
14
|
+
* - Post-based notification triggering and routing
|
|
15
|
+
* - Alert message notification broadcasting
|
|
16
|
+
* - Support service notification handling
|
|
17
|
+
* - Cross-service communication and event handling
|
|
18
|
+
* - Cron job integration for scheduled notifications
|
|
19
|
+
* - Template-based notification customization
|
|
20
|
+
* - User preference-based notification filtering
|
|
21
|
+
* - Comprehensive error handling and monitoring
|
|
22
|
+
*
|
|
23
|
+
* The service integrates with multiple external services through Moleculer broker
|
|
24
|
+
* and provides robust notification management for real-time messaging workflows.
|
|
25
|
+
*/
|
|
3
26
|
export declare class MessengerNotificationMoleculerService extends Service {
|
|
4
|
-
|
|
27
|
+
private readonly messengerNotificationService;
|
|
28
|
+
private readonly container;
|
|
29
|
+
constructor(broker: ServiceBroker, { container, settings }: {
|
|
5
30
|
container: Container;
|
|
6
|
-
|
|
7
|
-
settings: any;
|
|
31
|
+
settings?: any;
|
|
8
32
|
});
|
|
9
33
|
}
|