@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.
- package/lib/config/env-config.d.ts +7 -0
- package/lib/config/env-config.js +20 -0
- package/lib/config/env-config.js.map +1 -1
- package/lib/containers/containers.js +9 -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 +4 -2
- package/lib/containers/context-services-from-container.js.map +1 -1
- package/lib/graphql/resolvers/ai-fragment.d.ts +3 -0
- package/lib/graphql/resolvers/ai-fragment.js +276 -0
- package/lib/graphql/resolvers/ai-fragment.js.map +1 -0
- 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 +308 -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/index.js +1 -1
- package/lib/graphql/resolvers/index.js.map +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 +874 -239
- 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/ai-fragment.graphql +311 -0
- package/lib/graphql/schema/ai-fragment.graphql.js +1 -0
- package/lib/graphql/schema/ai-fragment.graphql.js.map +1 -0
- 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 +356 -38
- package/lib/graphql/schema/channel.graphql.js +1 -1
- package/lib/graphql/schema/index.js +2 -2
- package/lib/graphql/schema/index.js.map +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 +360 -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 +21 -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/inngest/factory.d.ts +20 -0
- package/lib/inngest/factory.js +4 -0
- package/lib/inngest/factory.js.map +1 -0
- package/lib/inngest/functions.d.ts +235 -0
- package/lib/inngest/functions.js +1385 -0
- package/lib/inngest/functions.js.map +1 -0
- package/lib/inngest/index.d.ts +3 -0
- package/lib/inngest/prompt.d.ts +6 -0
- package/lib/inngest/prompt.js +871 -0
- package/lib/inngest/prompt.js.map +1 -0
- package/lib/inngest/utils.d.ts +5 -0
- package/lib/inngest/utils.js +32 -0
- package/lib/inngest/utils.js.map +1 -0
- 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/module.js +10 -3
- package/lib/module.js.map +1 -1
- package/lib/plugins/ai-fragment-moleculer-service.d.ts +29 -0
- package/lib/plugins/ai-fragment-moleculer-service.js +516 -0
- package/lib/plugins/ai-fragment-moleculer-service.js.map +1 -0
- package/lib/plugins/channel-moleculer-service.d.ts +21 -1
- package/lib/plugins/channel-moleculer-service.js +426 -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/index.d.ts +1 -0
- 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 +1102 -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/ai-fragment-service.d.ts +195 -0
- package/lib/services/ai-fragment-service.js +631 -0
- package/lib/services/ai-fragment-service.js.map +1 -0
- package/lib/services/channel-service.d.ts +181 -33
- package/lib/services/channel-service.js +842 -273
- 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 +3 -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 +189 -16
- package/lib/services/post-service.js +949 -113
- 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/ai-fragment-microservice.d.ts +23 -0
- package/lib/services/proxy-services/ai-fragment-microservice.js +78 -0
- package/lib/services/proxy-services/ai-fragment-microservice.js.map +1 -0
- package/lib/services/proxy-services/channel-microservice.d.ts +6 -3
- package/lib/services/proxy-services/channel-microservice.js +25 -10
- package/lib/services/proxy-services/channel-microservice.js.map +1 -1
- package/lib/services/proxy-services/index.d.ts +1 -0
- 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 +207 -12
- package/lib/services/proxy-services/post-microservice.js +623 -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/services/sandbox-error-service.d.ts +23 -0
- package/lib/services/sandbox-error-service.js +422 -0
- package/lib/services/sandbox-error-service.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/ai-fragment.d.ts +4 -0
- package/lib/store/models/ai-fragment.js +125 -0
- package/lib/store/models/ai-fragment.js.map +1 -0
- package/lib/store/models/channel.d.ts +2 -3
- package/lib/store/models/channel.js +185 -71
- package/lib/store/models/channel.js.map +1 -1
- package/lib/store/models/index.d.ts +1 -0
- 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/ai-fragment-repository.d.ts +15 -0
- package/lib/store/repositories/ai-fragment-repository.js +69 -0
- package/lib/store/repositories/ai-fragment-repository.js.map +1 -0
- 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/index.d.ts +1 -0
- 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 +4 -4
- package/lib/templates/repositories/AiFragmentRepository.ts.template +4 -0
- 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/AiFragmentService.ts.template +123 -0
- package/lib/templates/services/ChannelService.ts.template +290 -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 +265 -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/lib/templates/services/SandboxErrorService.ts.template +125 -0
- package/package.json +14 -7
- 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,9 +1,24 @@
|
|
|
1
|
-
import {RoomType}from'common';const channelResolvers =
|
|
1
|
+
import {RoomType}from'common/server';const channelResolvers = options => ({
|
|
2
2
|
Channel: {
|
|
3
3
|
creator(src, args, {
|
|
4
4
|
accountService
|
|
5
5
|
}) {
|
|
6
|
+
options.logger.trace('(Channel.creator) src.creator [%s]', src.creator);
|
|
7
|
+
// Check if creator exists and is not null/undefined before calling service
|
|
8
|
+
if (!src.creator || src.creator === null || src.creator === undefined) {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
6
11
|
return accountService.findAccountById(src.creator.toString());
|
|
12
|
+
},
|
|
13
|
+
lastMessage(src, args, {
|
|
14
|
+
postService
|
|
15
|
+
}) {
|
|
16
|
+
options.logger.trace('(Channel.lastMessage) src.id [%s]', src.id);
|
|
17
|
+
// Check if src.id exists before calling service
|
|
18
|
+
if (!src.id || src.id === null || src.id === undefined) {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
return postService.getLastMessage(src.id);
|
|
7
22
|
}
|
|
8
23
|
},
|
|
9
24
|
Query: {
|
|
@@ -13,27 +28,47 @@ import {RoomType}from'common';const channelResolvers = () => ({
|
|
|
13
28
|
channelService,
|
|
14
29
|
userContext
|
|
15
30
|
}) {
|
|
31
|
+
options.logger.trace('(Query.channelByName) name [%s]', name);
|
|
32
|
+
if (!name) {
|
|
33
|
+
options.logger.warn('Missing channel name');
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
16
36
|
return channelService.getByName(name);
|
|
17
|
-
// return channelService.getByName(userContext.teamId, name) as Promise<IChannel>;
|
|
37
|
+
// return channelService.getByName(userContext.teamId, name) as unknown as Promise<IChannel>;
|
|
18
38
|
},
|
|
19
39
|
channels(src, _, {
|
|
20
40
|
channelService,
|
|
21
41
|
userContext
|
|
22
42
|
}) {
|
|
43
|
+
options.logger.trace('(Query.channels) userContext [%j]', {
|
|
44
|
+
accountId: userContext.accountId,
|
|
45
|
+
teamId: userContext.teamId,
|
|
46
|
+
orgId: userContext.orgId
|
|
47
|
+
});
|
|
23
48
|
const {
|
|
24
49
|
accountId,
|
|
25
50
|
teamId,
|
|
26
51
|
orgId
|
|
27
52
|
} = userContext;
|
|
53
|
+
if (!accountId || !teamId) {
|
|
54
|
+
options.logger.warn('Missing required user context');
|
|
55
|
+
return [];
|
|
56
|
+
}
|
|
28
57
|
return channelService.getChannels(teamId, accountId, false, new Date().getTime(), orgId);
|
|
29
58
|
},
|
|
30
|
-
channelsByUser(src, args, {
|
|
59
|
+
async channelsByUser(src, args, {
|
|
31
60
|
channelService,
|
|
32
61
|
userContext
|
|
33
62
|
}) {
|
|
63
|
+
options.logger.trace('(Query.channelsByUser) args [%j]', args);
|
|
34
64
|
const {
|
|
35
65
|
accountId
|
|
36
66
|
} = userContext;
|
|
67
|
+
console.log('accountId__channelsByUser', accountId);
|
|
68
|
+
if (!accountId) {
|
|
69
|
+
options.logger.warn('Missing accountId in user context');
|
|
70
|
+
return [];
|
|
71
|
+
}
|
|
37
72
|
const {
|
|
38
73
|
criteria,
|
|
39
74
|
role,
|
|
@@ -41,25 +76,113 @@ import {RoomType}from'common';const channelResolvers = () => ({
|
|
|
41
76
|
} = args || {
|
|
42
77
|
criteria: {}
|
|
43
78
|
};
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
79
|
+
console.log('criteria', criteria);
|
|
80
|
+
console.log('role', role);
|
|
81
|
+
try {
|
|
82
|
+
// Check if Service type is included in the query
|
|
83
|
+
const includesService = criteria?.type === RoomType.Service || Array.isArray(criteria?.type) && criteria.type.includes(RoomType.Service) || criteria?.type?.$in && criteria.type.$in.includes(RoomType.Service);
|
|
84
|
+
if (includesService) {
|
|
85
|
+
// If Service type is included, fetch SERVICE and non-SERVICE channels separately
|
|
86
|
+
const {
|
|
87
|
+
type,
|
|
88
|
+
...restCriteria
|
|
89
|
+
} = criteria;
|
|
90
|
+
// Build non-service types from original query
|
|
91
|
+
let nonServiceTypes;
|
|
92
|
+
if (Array.isArray(type)) {
|
|
93
|
+
nonServiceTypes = type.filter(t => t !== RoomType.Service);
|
|
94
|
+
} else if (type?.$in) {
|
|
95
|
+
nonServiceTypes = type.$in.filter(t => t !== RoomType.Service);
|
|
96
|
+
} else {
|
|
97
|
+
// Single type that's not Service (shouldn't happen in this branch but for safety)
|
|
98
|
+
nonServiceTypes = type !== RoomType.Service ? [type] : [];
|
|
99
|
+
}
|
|
100
|
+
// Fetch SERVICE channels separately (no orgName restriction)
|
|
101
|
+
const serviceChannels = await channelService.getAll({
|
|
102
|
+
...rest,
|
|
103
|
+
criteria: {
|
|
104
|
+
type: RoomType.Service
|
|
54
105
|
}
|
|
106
|
+
});
|
|
107
|
+
// Fetch non-SERVICE channels separately (with orgName and member restrictions)
|
|
108
|
+
let otherChannels = [];
|
|
109
|
+
if (nonServiceTypes.length > 0) {
|
|
110
|
+
otherChannels = await channelService.getAll({
|
|
111
|
+
...rest,
|
|
112
|
+
criteria: {
|
|
113
|
+
...restCriteria,
|
|
114
|
+
type: nonServiceTypes.length === 1 ? nonServiceTypes[0] : {
|
|
115
|
+
$in: nonServiceTypes
|
|
116
|
+
},
|
|
117
|
+
members: criteria?.members ?? {
|
|
118
|
+
$elemMatch: {
|
|
119
|
+
user: accountId,
|
|
120
|
+
...(role ? {
|
|
121
|
+
roles: role
|
|
122
|
+
} : {})
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
// Sort each group separately
|
|
129
|
+
const sortedServiceChannels = serviceChannels.sort((a, b) => (a.title || '').localeCompare(b.title || ''));
|
|
130
|
+
const sortedOtherChannels = otherChannels.sort((a, b) => {
|
|
131
|
+
const aTime = a.updatedAt ? new Date(a.updatedAt).getTime() : 0;
|
|
132
|
+
const bTime = b.updatedAt ? new Date(b.updatedAt).getTime() : 0;
|
|
133
|
+
return bTime - aTime;
|
|
134
|
+
});
|
|
135
|
+
options.logger.trace('SERVICE channels count: %d', sortedServiceChannels.length);
|
|
136
|
+
options.logger.trace('Other channels count: %d', sortedOtherChannels.length);
|
|
137
|
+
if (sortedServiceChannels.length > 0) {
|
|
138
|
+
options.logger.trace('First SERVICE channel: %s', sortedServiceChannels[0].title);
|
|
55
139
|
}
|
|
140
|
+
// GUARANTEE: SERVICE channels first, then others
|
|
141
|
+
const finalResult = [...sortedServiceChannels, ...sortedOtherChannels];
|
|
142
|
+
options.logger.trace('Final result order: %j', finalResult.map(ch => `${ch.type}: ${ch.title}`));
|
|
143
|
+
return finalResult;
|
|
144
|
+
} else {
|
|
145
|
+
// No Service type - apply member filter to all channels
|
|
146
|
+
const querycriteria = {
|
|
147
|
+
...criteria,
|
|
148
|
+
members: criteria?.members ?? {
|
|
149
|
+
$elemMatch: {
|
|
150
|
+
user: accountId,
|
|
151
|
+
...(role ? {
|
|
152
|
+
roles: role
|
|
153
|
+
} : {})
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
const results = await channelService.getAll({
|
|
158
|
+
...rest,
|
|
159
|
+
criteria: querycriteria
|
|
160
|
+
});
|
|
161
|
+
// Sort results to put SERVICE channels first
|
|
162
|
+
return results.sort((a, b) => {
|
|
163
|
+
// SERVICE channels always come first
|
|
164
|
+
if (a.type === RoomType.Service && b.type !== RoomType.Service) return -1;
|
|
165
|
+
if (a.type !== RoomType.Service && b.type === RoomType.Service) return 1;
|
|
166
|
+
// If both are SERVICE channels, sort by title/name
|
|
167
|
+
if (a.type === RoomType.Service && b.type === RoomType.Service) {
|
|
168
|
+
return (a.title || '').localeCompare(b.title || '');
|
|
169
|
+
}
|
|
170
|
+
// For non-SERVICE channels, sort by updatedAt (most recent first)
|
|
171
|
+
const aTime = a.updatedAt ? new Date(a.updatedAt).getTime() : 0;
|
|
172
|
+
const bTime = b.updatedAt ? new Date(b.updatedAt).getTime() : 0;
|
|
173
|
+
return bTime - aTime;
|
|
174
|
+
});
|
|
56
175
|
}
|
|
57
|
-
})
|
|
176
|
+
} catch (error) {
|
|
177
|
+
options.logger.error('Error in channelsByUser: %o', error);
|
|
178
|
+
return [];
|
|
179
|
+
}
|
|
58
180
|
},
|
|
59
181
|
supportServiceChannels(src, args, {
|
|
60
182
|
channelService,
|
|
61
183
|
userContext
|
|
62
184
|
}) {
|
|
185
|
+
options.logger.trace('(Query.supportServiceChannels) args [%j]', args);
|
|
63
186
|
const {
|
|
64
187
|
accountId
|
|
65
188
|
} = userContext;
|
|
@@ -70,12 +193,17 @@ import {RoomType}from'common';const channelResolvers = () => ({
|
|
|
70
193
|
} = args || {
|
|
71
194
|
criteria: {}
|
|
72
195
|
};
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
196
|
+
try {
|
|
197
|
+
return channelService.getAll({
|
|
198
|
+
...rest,
|
|
199
|
+
criteria: {
|
|
200
|
+
...criteria
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
} catch (error) {
|
|
204
|
+
options.logger.error('Error in supportServiceChannels: %o', error);
|
|
205
|
+
return [];
|
|
206
|
+
}
|
|
79
207
|
},
|
|
80
208
|
directChannel(src, {
|
|
81
209
|
id
|
|
@@ -83,6 +211,15 @@ import {RoomType}from'common';const channelResolvers = () => ({
|
|
|
83
211
|
channelService,
|
|
84
212
|
userContext
|
|
85
213
|
}) {
|
|
214
|
+
options.logger.trace('(Query.directChannel) id [%s]', id);
|
|
215
|
+
if (!id) {
|
|
216
|
+
options.logger.warn('Missing channel id');
|
|
217
|
+
return null;
|
|
218
|
+
}
|
|
219
|
+
if (!userContext.accountId) {
|
|
220
|
+
options.logger.warn('Missing accountId in user context');
|
|
221
|
+
return null;
|
|
222
|
+
}
|
|
86
223
|
return channelService.get({
|
|
87
224
|
criteria: {
|
|
88
225
|
id,
|
|
@@ -97,6 +234,11 @@ import {RoomType}from'common';const channelResolvers = () => ({
|
|
|
97
234
|
channelService,
|
|
98
235
|
userContext
|
|
99
236
|
}) {
|
|
237
|
+
options.logger.trace('(Query.viewChannelDetail) id [%s]', id);
|
|
238
|
+
if (!id) {
|
|
239
|
+
options.logger.warn('Missing channel id');
|
|
240
|
+
return null;
|
|
241
|
+
}
|
|
100
242
|
return channelService.get(id);
|
|
101
243
|
}
|
|
102
244
|
},
|
|
@@ -110,27 +252,52 @@ import {RoomType}from'common';const channelResolvers = () => ({
|
|
|
110
252
|
channelService,
|
|
111
253
|
userContext
|
|
112
254
|
}) {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
const formatedName = name[0].toUpperCase() + name.slice(1).toLowerCase();
|
|
119
|
-
const title = formatedName?.replace(/-/g, ' ') ?? '';
|
|
120
|
-
// const channelDetail = await channelService.getByName(userContext.teamId, title);
|
|
121
|
-
const channelDetail = await channelService.getByName(title);
|
|
122
|
-
if (channelDetail) return;
|
|
123
|
-
const channel = channelService.saveChannel({
|
|
124
|
-
type: type || RoomType.Channel,
|
|
125
|
-
orgName: orgId,
|
|
126
|
-
creator: accountId,
|
|
127
|
-
title: title,
|
|
128
|
-
displayName: name?.toLowerCase(),
|
|
129
|
-
topic: name?.toLowerCase(),
|
|
130
|
-
team: team || teamId,
|
|
131
|
-
description
|
|
255
|
+
options.logger.trace('(Mutation.createChannel) args [%j]', {
|
|
256
|
+
name,
|
|
257
|
+
description,
|
|
258
|
+
type,
|
|
259
|
+
team
|
|
132
260
|
});
|
|
133
|
-
|
|
261
|
+
try {
|
|
262
|
+
if (!name) {
|
|
263
|
+
options.logger.warn('Missing channel name');
|
|
264
|
+
throw new Error('Channel name is required');
|
|
265
|
+
}
|
|
266
|
+
if (!userContext.accountId) {
|
|
267
|
+
options.logger.warn('Missing accountId in user context');
|
|
268
|
+
throw new Error('User not authenticated');
|
|
269
|
+
}
|
|
270
|
+
const {
|
|
271
|
+
accountId,
|
|
272
|
+
teamId,
|
|
273
|
+
orgId
|
|
274
|
+
} = userContext;
|
|
275
|
+
const formatedName = name[0].toUpperCase() + name.slice(1).toLowerCase();
|
|
276
|
+
const title = formatedName?.replace(/-/g, ' ') ?? '';
|
|
277
|
+
// const channelDetail = await channelService.getByName(userContext.teamId, title);
|
|
278
|
+
const channelDetail = await channelService.getByName(title);
|
|
279
|
+
if (channelDetail) {
|
|
280
|
+
options.logger.warn('Channel already exists with name: %s', title);
|
|
281
|
+
return null;
|
|
282
|
+
}
|
|
283
|
+
const orgName = orgId || '';
|
|
284
|
+
const organization = orgId || '';
|
|
285
|
+
const channel = channelService.saveChannel({
|
|
286
|
+
type: type || RoomType.Channel,
|
|
287
|
+
orgName,
|
|
288
|
+
organization,
|
|
289
|
+
creator: accountId,
|
|
290
|
+
title: title,
|
|
291
|
+
displayName: name?.toLowerCase(),
|
|
292
|
+
topic: name?.toLowerCase(),
|
|
293
|
+
team: team || teamId,
|
|
294
|
+
description
|
|
295
|
+
});
|
|
296
|
+
return channel;
|
|
297
|
+
} catch (error) {
|
|
298
|
+
options.logger.error('Error creating channel: %o', error);
|
|
299
|
+
throw error;
|
|
300
|
+
}
|
|
134
301
|
},
|
|
135
302
|
addMemberToChannel(src, {
|
|
136
303
|
channelId,
|
|
@@ -139,6 +306,11 @@ import {RoomType}from'common';const channelResolvers = () => ({
|
|
|
139
306
|
channelService,
|
|
140
307
|
userContext
|
|
141
308
|
}) {
|
|
309
|
+
options.logger.trace('(Mutation.addMemberToChannel) channelId [%s], memberId [%s]', channelId, memberId);
|
|
310
|
+
if (!channelId || !memberId) {
|
|
311
|
+
options.logger.warn('Missing channelId or memberId');
|
|
312
|
+
throw new Error('Channel ID and Member ID are required');
|
|
313
|
+
}
|
|
142
314
|
return channelService.addMemberToChannel(channelId, memberId);
|
|
143
315
|
},
|
|
144
316
|
saveMembersToChannel(src, {
|
|
@@ -148,6 +320,11 @@ import {RoomType}from'common';const channelResolvers = () => ({
|
|
|
148
320
|
channelService,
|
|
149
321
|
userContext
|
|
150
322
|
}) {
|
|
323
|
+
options.logger.trace('(Mutation.saveMembersToChannel) channelId [%s], membersIds [%j]', channelId, membersIds);
|
|
324
|
+
if (!channelId || !membersIds) {
|
|
325
|
+
options.logger.warn('Missing channelId or membersIds');
|
|
326
|
+
throw new Error('Channel ID and Members IDs are required');
|
|
327
|
+
}
|
|
151
328
|
return channelService.saveMembersToChannel({
|
|
152
329
|
membersIds,
|
|
153
330
|
channelId
|
|
@@ -161,23 +338,43 @@ import {RoomType}from'common';const channelResolvers = () => ({
|
|
|
161
338
|
channelService,
|
|
162
339
|
userContext
|
|
163
340
|
}) {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
341
|
+
options.logger.trace('(Mutation.createDirectChannel) receiver [%s], displayName [%s]', receiver, displayName);
|
|
342
|
+
try {
|
|
343
|
+
if (!receiver || !displayName) {
|
|
344
|
+
options.logger.warn('Missing receiver or displayName');
|
|
345
|
+
throw new Error('Receiver and display name are required');
|
|
346
|
+
}
|
|
347
|
+
if (!userContext.accountId || !userContext.orgId) {
|
|
348
|
+
options.logger.warn('Missing user context');
|
|
349
|
+
throw new Error('User context required');
|
|
350
|
+
}
|
|
351
|
+
const {
|
|
352
|
+
accountId,
|
|
353
|
+
orgId
|
|
354
|
+
} = userContext;
|
|
355
|
+
return channelService.createDirectChannel({
|
|
356
|
+
sender: accountId,
|
|
357
|
+
receiver: receiver,
|
|
358
|
+
displayName,
|
|
359
|
+
orgName: orgId,
|
|
360
|
+
organization: orgId,
|
|
361
|
+
channelOptions
|
|
362
|
+
});
|
|
363
|
+
} catch (error) {
|
|
364
|
+
options.logger.error('Error creating direct channel: %o', error);
|
|
365
|
+
throw error;
|
|
366
|
+
}
|
|
175
367
|
},
|
|
176
368
|
hideChannel(src, {
|
|
177
369
|
id
|
|
178
370
|
}, {
|
|
179
371
|
channelService
|
|
180
372
|
}) {
|
|
373
|
+
options.logger.trace('(Mutation.hideChannel) id [%s]', id);
|
|
374
|
+
if (!id) {
|
|
375
|
+
options.logger.warn('Missing channel id');
|
|
376
|
+
throw new Error('Channel ID is required');
|
|
377
|
+
}
|
|
181
378
|
return channelService.hideChannel(id);
|
|
182
379
|
},
|
|
183
380
|
leaveChannel(src, {
|
|
@@ -185,6 +382,11 @@ import {RoomType}from'common';const channelResolvers = () => ({
|
|
|
185
382
|
}, {
|
|
186
383
|
channelService
|
|
187
384
|
}) {
|
|
385
|
+
options.logger.trace('(Mutation.leaveChannel) id [%s]', id);
|
|
386
|
+
if (!id) {
|
|
387
|
+
options.logger.warn('Missing channel id');
|
|
388
|
+
throw new Error('Channel ID is required');
|
|
389
|
+
}
|
|
188
390
|
return channelService.leaveChannel(id);
|
|
189
391
|
},
|
|
190
392
|
deleteChannel(src, {
|
|
@@ -192,6 +394,11 @@ import {RoomType}from'common';const channelResolvers = () => ({
|
|
|
192
394
|
}, {
|
|
193
395
|
channelService
|
|
194
396
|
}) {
|
|
397
|
+
options.logger.trace('(Mutation.deleteChannel) id [%s]', id);
|
|
398
|
+
if (!id) {
|
|
399
|
+
options.logger.warn('Missing channel id');
|
|
400
|
+
throw new Error('Channel ID is required');
|
|
401
|
+
}
|
|
195
402
|
return channelService.deleteChannel(id);
|
|
196
403
|
},
|
|
197
404
|
viewChannel(src, {
|
|
@@ -200,6 +407,15 @@ import {RoomType}from'common';const channelResolvers = () => ({
|
|
|
200
407
|
userContext,
|
|
201
408
|
channelService
|
|
202
409
|
}) {
|
|
410
|
+
options.logger.trace('(Mutation.viewChannel) id [%s], accountId [%s]', id, userContext.accountId);
|
|
411
|
+
if (!id) {
|
|
412
|
+
options.logger.warn('Missing channel id');
|
|
413
|
+
throw new Error('Channel ID is required');
|
|
414
|
+
}
|
|
415
|
+
if (!userContext.accountId) {
|
|
416
|
+
options.logger.warn('Missing accountId in user context');
|
|
417
|
+
throw new Error('User context required');
|
|
418
|
+
}
|
|
203
419
|
return channelService.viewChannel(id, userContext.accountId);
|
|
204
420
|
},
|
|
205
421
|
async sendNotificationOfUnreadMessages(src, {
|
|
@@ -208,8 +424,47 @@ import {RoomType}from'common';const channelResolvers = () => ({
|
|
|
208
424
|
}, {
|
|
209
425
|
messengerNotificationService
|
|
210
426
|
}) {
|
|
211
|
-
|
|
212
|
-
|
|
427
|
+
options.logger.trace('(Mutation.sendNotificationOfUnreadMessages) unit [%s], value [%s]', unit, value);
|
|
428
|
+
try {
|
|
429
|
+
if (!unit || value === undefined || value === null) {
|
|
430
|
+
options.logger.warn('Missing unit or value');
|
|
431
|
+
throw new Error('Unit and value are required');
|
|
432
|
+
}
|
|
433
|
+
await messengerNotificationService.sendNotificationOfUnreadMessages(unit, value);
|
|
434
|
+
return true;
|
|
435
|
+
} catch (error) {
|
|
436
|
+
options.logger.error('Error sending notification: %o', error);
|
|
437
|
+
return false;
|
|
438
|
+
}
|
|
439
|
+
},
|
|
440
|
+
async createChannelWithProjectId(src, {
|
|
441
|
+
projectId,
|
|
442
|
+
channelInput
|
|
443
|
+
}, {
|
|
444
|
+
channelService,
|
|
445
|
+
userContext
|
|
446
|
+
}) {
|
|
447
|
+
options.logger.trace('(Mutation.createChannelWithProjectId) projectId [%s], channelInput [%j]', projectId, channelInput);
|
|
448
|
+
const {
|
|
449
|
+
accountId,
|
|
450
|
+
teamId,
|
|
451
|
+
orgId
|
|
452
|
+
} = userContext;
|
|
453
|
+
// channelInput.createdBy = channelInput.createdBy || accountId;
|
|
454
|
+
// channelInput.orgName = orgId;
|
|
455
|
+
// channelInput.organization = orgId;
|
|
456
|
+
// channelInput.team = teamId;
|
|
457
|
+
const channelInputData = {
|
|
458
|
+
...channelInput,
|
|
459
|
+
createdBy: accountId,
|
|
460
|
+
orgName: orgId,
|
|
461
|
+
organization: orgId,
|
|
462
|
+
team: teamId,
|
|
463
|
+
accountId: accountId,
|
|
464
|
+
teamId: teamId,
|
|
465
|
+
orgId: orgId
|
|
466
|
+
};
|
|
467
|
+
return await channelService.createChannelWithProjectId(projectId, channelInputData);
|
|
213
468
|
}
|
|
214
469
|
}
|
|
215
470
|
});export{channelResolvers};//# sourceMappingURL=channel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel.js","sources":["../../../src/graphql/resolvers/channel.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"channel.js","sources":["../../../src/graphql/resolvers/channel.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { IResolverOptions } from '@common-stack/server-core';
|
|
2
|
+
import { IResolvers } from 'common/server';
|
|
3
|
+
export declare const resolver: (options: IResolverOptions) => IResolvers;
|
|
@@ -1,7 +1,14 @@
|
|
|
1
|
-
const resolver =
|
|
1
|
+
const resolver = options => ({
|
|
2
2
|
// UserAccount: {
|
|
3
|
-
// async deviceToken(src:IUserAccount, args,{extendedTokenAccountService,userContext}){
|
|
4
|
-
//
|
|
3
|
+
// async deviceToken(src: IUserAccount, args, { extendedTokenAccountService, userContext }) {
|
|
4
|
+
// options.logger.trace('(UserAccount.deviceToken) src.id [%s]', src.id);
|
|
5
|
+
//
|
|
6
|
+
// // Check if src exists before calling service
|
|
7
|
+
// if (!src || !src.id) {
|
|
8
|
+
// return null;
|
|
9
|
+
// }
|
|
10
|
+
//
|
|
11
|
+
// return extendedTokenAccountService.getDeviceToken(src.id) as any;
|
|
5
12
|
// },
|
|
6
13
|
// },
|
|
7
14
|
Query: {
|
|
@@ -10,9 +17,20 @@ const resolver = () => ({
|
|
|
10
17
|
userContext,
|
|
11
18
|
accountService
|
|
12
19
|
}) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
20
|
+
options.logger.trace('(Query.getDeviceToken) userContext.accountId [%s]', userContext?.accountId);
|
|
21
|
+
try {
|
|
22
|
+
if (!userContext?.accountId) {
|
|
23
|
+
options.logger.warn('Missing accountId in user context');
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
// const user = await accountService.findAccountById(userContext.accountId);
|
|
27
|
+
// return extendedTokenAccountService.getDeviceToken(user);
|
|
28
|
+
const result = await extendedTokenAccountService.getDeviceToken(userContext.accountId);
|
|
29
|
+
return result;
|
|
30
|
+
} catch (error) {
|
|
31
|
+
options.logger.error('Error getting device token: %o', error);
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
16
34
|
},
|
|
17
35
|
async getAccountByAuth0Id(_, {
|
|
18
36
|
auth0Id
|
|
@@ -21,9 +39,20 @@ const resolver = () => ({
|
|
|
21
39
|
userContext,
|
|
22
40
|
accountService
|
|
23
41
|
}) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
42
|
+
options.logger.trace('(Query.getAccountByAuth0Id) auth0Id [%s]', auth0Id);
|
|
43
|
+
try {
|
|
44
|
+
if (!auth0Id) {
|
|
45
|
+
options.logger.warn('Missing auth0Id parameter');
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
// const user = await accountService.findAccountById(userContext.accountId);
|
|
49
|
+
// return extendedTokenAccountService.getDeviceToken(user);
|
|
50
|
+
const result = await extendedTokenAccountService.getAccountByAuth0Id(auth0Id);
|
|
51
|
+
return result;
|
|
52
|
+
} catch (error) {
|
|
53
|
+
options.logger.error('Error getting account by Auth0 ID: %o', error);
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
27
56
|
}
|
|
28
57
|
},
|
|
29
58
|
Mutation: {
|
|
@@ -34,27 +63,65 @@ const resolver = () => ({
|
|
|
34
63
|
userContext,
|
|
35
64
|
accountService
|
|
36
65
|
}) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
await extendedTokenAccountService.
|
|
48
|
-
|
|
66
|
+
options.logger.trace('(Mutation.setDeviceToken) deviceToken [%s], accountId [%s]', deviceToken ? '***' : 'null', userContext?.accountId);
|
|
67
|
+
try {
|
|
68
|
+
if (!deviceToken) {
|
|
69
|
+
options.logger.warn('Missing deviceToken parameter');
|
|
70
|
+
throw new Error('Device token is required');
|
|
71
|
+
}
|
|
72
|
+
if (!userContext?.accountId) {
|
|
73
|
+
options.logger.warn('Missing accountId in user context');
|
|
74
|
+
throw new Error('User not authenticated');
|
|
75
|
+
}
|
|
76
|
+
const user = await extendedTokenAccountService.getDeviceToken(userContext.accountId);
|
|
77
|
+
// Filter out existing EXPO_NOTIFICATION_TOKEN that are different from the new one
|
|
78
|
+
const expoTokens = user?.tokens?.filter(t => t?.type === 'EXPO_NOTIFICATION_TOKEN' && t?.token != deviceToken);
|
|
79
|
+
// Remove existing different expo tokens
|
|
80
|
+
if (expoTokens && expoTokens?.length > 0) {
|
|
81
|
+
options.logger.debug('Removing %d existing expo tokens', expoTokens.length);
|
|
82
|
+
for (const t of expoTokens) {
|
|
83
|
+
await extendedTokenAccountService.removeDeviceToken(t?.token, userContext.accountId);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// Check if the token already exists
|
|
87
|
+
const checkUserToken = await extendedTokenAccountService.getDeviceToken(userContext.accountId);
|
|
88
|
+
let expoNotificationToken = checkUserToken?.tokens?.filter(t => t?.type === 'EXPO_NOTIFICATION_TOKEN' && t?.token == deviceToken);
|
|
89
|
+
if (expoNotificationToken && expoNotificationToken?.length > 0) {
|
|
90
|
+
options.logger.debug('Device token already exists for user');
|
|
91
|
+
return checkUserToken;
|
|
92
|
+
} else {
|
|
93
|
+
options.logger.debug('Adding new device token for user');
|
|
94
|
+
await extendedTokenAccountService.setDeviceToken(deviceToken, userContext.accountId);
|
|
95
|
+
const result = await extendedTokenAccountService.getDeviceToken(userContext.accountId);
|
|
96
|
+
return result;
|
|
97
|
+
}
|
|
98
|
+
} catch (error) {
|
|
99
|
+
options.logger.error('Error setting device token: %o', error);
|
|
100
|
+
throw error;
|
|
49
101
|
}
|
|
50
102
|
},
|
|
51
|
-
removeDeviceToken(_, {
|
|
103
|
+
async removeDeviceToken(_, {
|
|
52
104
|
deviceToken
|
|
53
105
|
}, {
|
|
54
106
|
extendedTokenAccountService,
|
|
55
107
|
userContext
|
|
56
108
|
}) {
|
|
57
|
-
|
|
109
|
+
options.logger.trace('(Mutation.removeDeviceToken) deviceToken [%s], accountId [%s]', deviceToken ? '***' : 'null', userContext?.accountId);
|
|
110
|
+
try {
|
|
111
|
+
if (!deviceToken) {
|
|
112
|
+
options.logger.warn('Missing deviceToken parameter');
|
|
113
|
+
throw new Error('Device token is required');
|
|
114
|
+
}
|
|
115
|
+
if (!userContext?.accountId) {
|
|
116
|
+
options.logger.warn('Missing accountId in user context');
|
|
117
|
+
throw new Error('User not authenticated');
|
|
118
|
+
}
|
|
119
|
+
const result = await extendedTokenAccountService.removeDeviceToken(deviceToken, userContext.accountId);
|
|
120
|
+
return result;
|
|
121
|
+
} catch (error) {
|
|
122
|
+
options.logger.error('Error removing device token: %o', error);
|
|
123
|
+
throw error;
|
|
124
|
+
}
|
|
58
125
|
}
|
|
59
126
|
}
|
|
60
127
|
});export{resolver};//# sourceMappingURL=extended-token-account.js.map
|