@messenger-box/platform-server 10.0.3-alpha.2 → 10.0.3-alpha.201

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 (303) hide show
  1. package/lib/channels/ack-reactions.d.ts +46 -0
  2. package/lib/channels/ack-reactions.js +48 -0
  3. package/lib/channels/ack-reactions.js.map +1 -0
  4. package/lib/channels/allowlist-match.d.ts +38 -0
  5. package/lib/channels/allowlist-match.js +67 -0
  6. package/lib/channels/allowlist-match.js.map +1 -0
  7. package/lib/channels/channel-config.d.ts +46 -0
  8. package/lib/channels/channel-config.js +63 -0
  9. package/lib/channels/channel-config.js.map +1 -0
  10. package/lib/channels/command-gating.d.ts +47 -0
  11. package/lib/channels/command-gating.js +52 -0
  12. package/lib/channels/command-gating.js.map +1 -0
  13. package/lib/channels/conversation-label.d.ts +23 -0
  14. package/lib/channels/conversation-label.js +43 -0
  15. package/lib/channels/conversation-label.js.map +1 -0
  16. package/lib/channels/index.d.ts +18 -0
  17. package/lib/channels/mention-gating.d.ts +50 -0
  18. package/lib/channels/mention-gating.js +72 -0
  19. package/lib/channels/mention-gating.js.map +1 -0
  20. package/lib/channels/registry.d.ts +23 -0
  21. package/lib/channels/registry.js +282 -0
  22. package/lib/channels/registry.js.map +1 -0
  23. package/lib/channels/sender-identity.d.ts +11 -0
  24. package/lib/channels/sender-identity.js +48 -0
  25. package/lib/channels/sender-identity.js.map +1 -0
  26. package/lib/channels/session.d.ts +63 -0
  27. package/lib/channels/session.js +29 -0
  28. package/lib/channels/session.js.map +1 -0
  29. package/lib/channels/types.d.ts +147 -0
  30. package/lib/channels/types.js +28 -0
  31. package/lib/channels/types.js.map +1 -0
  32. package/lib/channels/typing.d.ts +62 -0
  33. package/lib/channels/typing.js +37 -0
  34. package/lib/channels/typing.js.map +1 -0
  35. package/lib/channels/typing.test.d.ts +1 -0
  36. package/lib/config/env-config.d.ts +7 -0
  37. package/lib/config/env-config.js +21 -1
  38. package/lib/config/env-config.js.map +1 -1
  39. package/lib/constants/default-channel-props.d.ts +11 -0
  40. package/lib/constants/default-channel-props.js +32 -0
  41. package/lib/constants/default-channel-props.js.map +1 -0
  42. package/lib/constants/default-notify-props.js.map +1 -1
  43. package/lib/constants/index.d.ts +1 -0
  44. package/lib/constants/query.constants.js.map +1 -1
  45. package/lib/containers/containers.js +13 -7
  46. package/lib/containers/containers.js.map +1 -1
  47. package/lib/containers/context-services-from-container.d.ts +2 -2
  48. package/lib/containers/context-services-from-container.js +7 -7
  49. package/lib/containers/context-services-from-container.js.map +1 -1
  50. package/lib/gateway/channel-registry.d.ts +10 -0
  51. package/lib/gateway/gateway-service.d.ts +23 -0
  52. package/lib/gateway/index.d.ts +4 -0
  53. package/lib/gateway/message-router.d.ts +20 -0
  54. package/lib/gateway/types.d.ts +270 -0
  55. package/lib/graphql/resolvers/channel-capabilities.d.ts +13 -0
  56. package/lib/graphql/resolvers/channel-capabilities.js +179 -0
  57. package/lib/graphql/resolvers/channel-capabilities.js.map +1 -0
  58. package/lib/graphql/resolvers/channel-member.d.ts +3 -3
  59. package/lib/graphql/resolvers/channel-member.js +30 -5
  60. package/lib/graphql/resolvers/channel-member.js.map +1 -1
  61. package/lib/graphql/resolvers/channel.d.ts +3 -3
  62. package/lib/graphql/resolvers/channel.js +348 -55
  63. package/lib/graphql/resolvers/channel.js.map +1 -1
  64. package/lib/graphql/resolvers/chat-configuration.d.ts +59 -0
  65. package/lib/graphql/resolvers/chat-configuration.js +89 -0
  66. package/lib/graphql/resolvers/chat-configuration.js.map +1 -0
  67. package/lib/graphql/resolvers/extended-token-account.d.ts +3 -32
  68. package/lib/graphql/resolvers/extended-token-account.js +90 -23
  69. package/lib/graphql/resolvers/extended-token-account.js.map +1 -1
  70. package/lib/graphql/resolvers/gateway.d.ts +18 -0
  71. package/lib/graphql/resolvers/index.d.ts +47 -26
  72. package/lib/graphql/resolvers/index.js +1 -1
  73. package/lib/graphql/resolvers/index.js.map +1 -1
  74. package/lib/graphql/resolvers/post-thread.d.ts +2 -3
  75. package/lib/graphql/resolvers/post-thread.js +294 -132
  76. package/lib/graphql/resolvers/post-thread.js.map +1 -1
  77. package/lib/graphql/resolvers/post.d.ts +2 -3
  78. package/lib/graphql/resolvers/post.js +764 -237
  79. package/lib/graphql/resolvers/post.js.map +1 -1
  80. package/lib/graphql/resolvers/reaction.d.ts +3 -3
  81. package/lib/graphql/resolvers/reaction.js +96 -14
  82. package/lib/graphql/resolvers/reaction.js.map +1 -1
  83. package/lib/graphql/resolvers/streaming.d.ts +20 -0
  84. package/lib/graphql/resolvers/streaming.js +147 -0
  85. package/lib/graphql/resolvers/streaming.js.map +1 -0
  86. package/lib/graphql/schema/channel-capabilities.graphql +492 -0
  87. package/lib/graphql/schema/channel-capabilities.graphql.js +1 -0
  88. package/lib/graphql/schema/channel-capabilities.graphql.js.map +1 -0
  89. package/lib/graphql/schema/channel-member.graphql +110 -21
  90. package/lib/graphql/schema/channel-member.graphql.js +1 -1
  91. package/lib/graphql/schema/channel.graphql +465 -24
  92. package/lib/graphql/schema/channel.graphql.js +1 -1
  93. package/lib/graphql/schema/chat-configuration.graphql +77 -0
  94. package/lib/graphql/schema/chat-configuration.graphql.js +1 -0
  95. package/lib/graphql/schema/chat-configuration.graphql.js.map +1 -0
  96. package/lib/graphql/schema/gateway.graphql +363 -0
  97. package/lib/graphql/schema/index.js +2 -2
  98. package/lib/graphql/schema/index.js.map +1 -1
  99. package/lib/graphql/schema/post-thread.graphql +167 -21
  100. package/lib/graphql/schema/post-thread.graphql.js +1 -1
  101. package/lib/graphql/schema/post.graphql +433 -36
  102. package/lib/graphql/schema/post.graphql.js +1 -1
  103. package/lib/graphql/schema/preferences.graphql +190 -3
  104. package/lib/graphql/schema/preferences.graphql.js +1 -1
  105. package/lib/graphql/schema/reaction.graphql +71 -13
  106. package/lib/graphql/schema/reaction.graphql.js +1 -1
  107. package/lib/graphql/schema/services.graphql +18 -0
  108. package/lib/graphql/schema/streaming.graphql +224 -0
  109. package/lib/graphql/schema/streaming.graphql.js +1 -0
  110. package/lib/graphql/schema/streaming.graphql.js.map +1 -0
  111. package/lib/graphql/schema/users.graphql +76 -13
  112. package/lib/graphql/schema/users.graphql.js +1 -1
  113. package/lib/graphql/schema/workflow-service.graphql +82 -0
  114. package/lib/index.d.ts +3 -1
  115. package/lib/index.js +1 -1
  116. package/lib/index.js.map +1 -1
  117. package/lib/interfaces/index.d.ts +0 -2
  118. package/lib/interfaces/services.d.ts +1 -3
  119. package/lib/migrations/dbMigrations/AddChannelConfigurationsMigration.d.ts +42 -0
  120. package/lib/migrations/dbMigrations/AddChannelConfigurationsMigration.js +60 -0
  121. package/lib/migrations/dbMigrations/AddChannelConfigurationsMigration.js.map +1 -0
  122. package/lib/migrations/dbMigrations/AddChatConfigurationsMigration.d.ts +21 -0
  123. package/lib/migrations/dbMigrations/AddChatConfigurationsMigration.js +30 -0
  124. package/lib/migrations/dbMigrations/AddChatConfigurationsMigration.js.map +1 -0
  125. package/lib/migrations/dbMigrations/AddPostsConfigurationsMigration.d.ts +17 -0
  126. package/lib/migrations/dbMigrations/AddPostsConfigurationsMigration.js +44 -0
  127. package/lib/migrations/dbMigrations/AddPostsConfigurationsMigration.js.map +1 -0
  128. package/lib/migrations/dbMigrations/index.d.ts +3 -0
  129. package/lib/migrations/index.d.ts +1 -0
  130. package/lib/migrations/mail-template-migration.d.ts +3 -6
  131. package/lib/migrations/mail-template-migration.js +8 -21
  132. package/lib/migrations/mail-template-migration.js.map +1 -1
  133. package/lib/migrations/message-notification-template-migration.d.ts +4 -7
  134. package/lib/migrations/message-notification-template-migration.js +8 -25
  135. package/lib/migrations/message-notification-template-migration.js.map +1 -1
  136. package/lib/module.d.ts +1 -1
  137. package/lib/module.js +3 -10
  138. package/lib/module.js.map +1 -1
  139. package/lib/plugins/ChannelMoleculerService.d.ts +39 -0
  140. package/lib/plugins/ChannelMoleculerService.js +58 -0
  141. package/lib/plugins/ChannelMoleculerService.js.map +1 -0
  142. package/lib/plugins/ExtendedTokenAccountMoleculerService.d.ts +65 -0
  143. package/lib/plugins/ExtendedTokenAccountMoleculerService.js +88 -0
  144. package/lib/plugins/ExtendedTokenAccountMoleculerService.js.map +1 -0
  145. package/lib/plugins/MessengerNotificationMoleculerService.d.ts +52 -0
  146. package/lib/plugins/MessengerNotificationMoleculerService.js +84 -0
  147. package/lib/plugins/MessengerNotificationMoleculerService.js.map +1 -0
  148. package/lib/plugins/PostMoleculerService.d.ts +65 -0
  149. package/lib/plugins/PostMoleculerService.js +87 -0
  150. package/lib/plugins/PostMoleculerService.js.map +1 -0
  151. package/lib/plugins/PostThreadMoleculerService.d.ts +40 -0
  152. package/lib/plugins/PostThreadMoleculerService.js +59 -0
  153. package/lib/plugins/PostThreadMoleculerService.js.map +1 -0
  154. package/lib/plugins/ReactionMoleculerService.d.ts +37 -0
  155. package/lib/plugins/ReactionMoleculerService.js +56 -0
  156. package/lib/plugins/ReactionMoleculerService.js.map +1 -0
  157. package/lib/plugins/index.d.ts +18 -6
  158. package/lib/preferences/permissions/inbox-permission-contribution.js +58 -97
  159. package/lib/preferences/permissions/inbox-permission-contribution.js.map +1 -1
  160. package/lib/preferences/permissions/inbox-roles-permission-overwrite.js +144 -144
  161. package/lib/preferences/permissions/inbox-roles-permission-overwrite.js.map +1 -1
  162. package/lib/preferences/settings/channel-settings.d.ts +39 -0
  163. package/lib/preferences/settings/channel-settings.js +180 -0
  164. package/lib/preferences/settings/channel-settings.js.map +1 -0
  165. package/lib/preferences/settings/chat-settings.d.ts +248 -0
  166. package/lib/preferences/settings/chat-settings.js +1152 -0
  167. package/lib/preferences/settings/chat-settings.js.map +1 -0
  168. package/lib/preferences/settings/index.d.ts +3 -0
  169. package/lib/preferences/settings/messenger-channels-contribution.d.ts +39 -0
  170. package/lib/preferences/settings/messenger-channels-contribution.js +355 -0
  171. package/lib/preferences/settings/messenger-channels-contribution.js.map +1 -0
  172. package/lib/preferences/settings/post-settings.d.ts +16 -0
  173. package/lib/preferences/settings/post-settings.js +75 -3
  174. package/lib/preferences/settings/post-settings.js.map +1 -1
  175. package/lib/services/channel-service.d.ts +215 -34
  176. package/lib/services/channel-service.js +1058 -273
  177. package/lib/services/channel-service.js.map +1 -1
  178. package/lib/services/extended-token-account-service.d.ts +175 -20
  179. package/lib/services/extended-token-account-service.js +636 -56
  180. package/lib/services/extended-token-account-service.js.map +1 -1
  181. package/lib/services/messenger-notification-service.d.ts +177 -17
  182. package/lib/services/messenger-notification-service.js +975 -421
  183. package/lib/services/messenger-notification-service.js.map +1 -1
  184. package/lib/services/post-service.d.ts +245 -18
  185. package/lib/services/post-service.js +1027 -113
  186. package/lib/services/post-service.js.map +1 -1
  187. package/lib/services/post-thread-service.d.ts +153 -6
  188. package/lib/services/post-thread-service.js +475 -9
  189. package/lib/services/post-thread-service.js.map +1 -1
  190. package/lib/services/proxy-services/ChannelProxyService.d.ts +27 -0
  191. package/lib/services/proxy-services/ChannelProxyService.js +31 -0
  192. package/lib/services/proxy-services/ChannelProxyService.js.map +1 -0
  193. package/lib/services/proxy-services/ExtendedTokenAccountProxyService.d.ts +42 -0
  194. package/lib/services/proxy-services/ExtendedTokenAccountProxyService.js +46 -0
  195. package/lib/services/proxy-services/ExtendedTokenAccountProxyService.js.map +1 -0
  196. package/lib/services/proxy-services/MessengerNotificationProxyService.d.ts +44 -0
  197. package/lib/services/proxy-services/MessengerNotificationProxyService.js +54 -0
  198. package/lib/services/proxy-services/MessengerNotificationProxyService.js.map +1 -0
  199. package/lib/services/proxy-services/PostProxyService.d.ts +42 -0
  200. package/lib/services/proxy-services/PostProxyService.js +46 -0
  201. package/lib/services/proxy-services/PostProxyService.js.map +1 -0
  202. package/lib/services/proxy-services/PostThreadProxyService.d.ts +32 -0
  203. package/lib/services/proxy-services/PostThreadProxyService.js +36 -0
  204. package/lib/services/proxy-services/PostThreadProxyService.js.map +1 -0
  205. package/lib/services/proxy-services/ReactionProxyService.d.ts +41 -0
  206. package/lib/services/proxy-services/ReactionProxyService.js +45 -0
  207. package/lib/services/proxy-services/ReactionProxyService.js.map +1 -0
  208. package/lib/services/proxy-services/index.d.ts +17 -5
  209. package/lib/services/reaction-service.d.ts +124 -4
  210. package/lib/services/reaction-service.js +413 -3
  211. package/lib/services/reaction-service.js.map +1 -1
  212. package/lib/store/models/account-token-store.d.ts +1 -1
  213. package/lib/store/models/account-token-store.js.map +1 -1
  214. package/lib/store/models/channel.d.ts +2 -3
  215. package/lib/store/models/channel.js +216 -70
  216. package/lib/store/models/channel.js.map +1 -1
  217. package/lib/store/models/post-thread.d.ts +3 -3
  218. package/lib/store/models/post-thread.js +96 -14
  219. package/lib/store/models/post-thread.js.map +1 -1
  220. package/lib/store/models/post.d.ts +2 -3
  221. package/lib/store/models/post.js +143 -23
  222. package/lib/store/models/post.js.map +1 -1
  223. package/lib/store/models/reaction.d.ts +2 -3
  224. package/lib/store/models/reaction.js +67 -8
  225. package/lib/store/models/reaction.js.map +1 -1
  226. package/lib/store/repositories/__tests__/__fixtures__/team-repository.d.ts +3 -3
  227. package/lib/store/repositories/channel-repository.d.ts +6 -6
  228. package/lib/store/repositories/channel-repository.js +5 -2
  229. package/lib/store/repositories/channel-repository.js.map +1 -1
  230. package/lib/store/repositories/post-repository.d.ts +6 -6
  231. package/lib/store/repositories/post-repository.js +5 -2
  232. package/lib/store/repositories/post-repository.js.map +1 -1
  233. package/lib/store/repositories/post-thread-repository.d.ts +6 -6
  234. package/lib/store/repositories/post-thread-repository.js +5 -2
  235. package/lib/store/repositories/post-thread-repository.js.map +1 -1
  236. package/lib/store/repositories/reaction-repository.d.ts +6 -6
  237. package/lib/store/repositories/reaction-repository.js +5 -2
  238. package/lib/store/repositories/reaction-repository.js.map +1 -1
  239. package/lib/streaming/block-chunker.d.ts +40 -0
  240. package/lib/streaming/block-chunker.js +103 -0
  241. package/lib/streaming/block-chunker.js.map +1 -0
  242. package/lib/streaming/block-chunker.test.d.ts +1 -0
  243. package/lib/streaming/index.d.ts +4 -0
  244. package/lib/streaming/stream-service.d.ts +71 -0
  245. package/lib/streaming/stream-service.js +325 -0
  246. package/lib/streaming/stream-service.js.map +1 -0
  247. package/lib/streaming/stream-service.test.d.ts +16 -0
  248. package/lib/streaming/streaming-post.integration.test.d.ts +10 -0
  249. package/lib/streaming/types.d.ts +33 -0
  250. package/lib/streaming/types.js +37 -0
  251. package/lib/streaming/types.js.map +1 -0
  252. package/lib/templates/constants/CONTRIBUTION_POINTS.ts.template +78 -0
  253. package/lib/templates/constants/SERVER_TYPES.ts.template +1 -4
  254. package/lib/templates/constants/WorkflowNamespace.ts.template +10 -0
  255. package/lib/templates/repositories/ChannelRepository.ts.template +3 -3
  256. package/lib/templates/repositories/PostRepository.ts.template +3 -3
  257. package/lib/templates/repositories/PostThreadRepository.ts.template +3 -3
  258. package/lib/templates/repositories/ReactionRepository.ts.template +3 -4
  259. package/lib/templates/services/ChannelService.ts.template +290 -39
  260. package/lib/templates/services/ExtendedTokenAccountService.ts.template +107 -3
  261. package/lib/templates/services/MessengerNotificationService.ts.template +94 -19
  262. package/lib/templates/services/MessengerStreamService.ts.template +131 -0
  263. package/lib/templates/services/PostService.ts.template +228 -20
  264. package/lib/templates/services/PostThreadService.ts.template +151 -6
  265. package/lib/templates/services/ReactionService.ts.template +129 -3
  266. package/lib/templates/services/RedisCacheManager.ts.template +22 -0
  267. package/package.json +10 -6
  268. package/lib/interfaces/context.d.ts +0 -14
  269. package/lib/plugins/channel-moleculer-service.d.ts +0 -8
  270. package/lib/plugins/channel-moleculer-service.js +0 -129
  271. package/lib/plugins/channel-moleculer-service.js.map +0 -1
  272. package/lib/plugins/extended-token-account-moleculer-service.d.ts +0 -8
  273. package/lib/plugins/extended-token-account-moleculer-service.js +0 -47
  274. package/lib/plugins/extended-token-account-moleculer-service.js.map +0 -1
  275. package/lib/plugins/messenger-notification-moleculer-service.d.ts +0 -9
  276. package/lib/plugins/messenger-notification-moleculer-service.js +0 -116
  277. package/lib/plugins/messenger-notification-moleculer-service.js.map +0 -1
  278. package/lib/plugins/post-moleculer-service.d.ts +0 -35
  279. package/lib/plugins/post-moleculer-service.js +0 -393
  280. package/lib/plugins/post-moleculer-service.js.map +0 -1
  281. package/lib/plugins/post-thread-moleculer-service.d.ts +0 -8
  282. package/lib/plugins/post-thread-moleculer-service.js +0 -33
  283. package/lib/plugins/post-thread-moleculer-service.js.map +0 -1
  284. package/lib/plugins/reaction-moleculer-service.d.ts +0 -8
  285. package/lib/plugins/reaction-moleculer-service.js +0 -20
  286. package/lib/plugins/reaction-moleculer-service.js.map +0 -1
  287. package/lib/services/proxy-services/channel-microservice.d.ts +0 -44
  288. package/lib/services/proxy-services/channel-microservice.js +0 -199
  289. package/lib/services/proxy-services/channel-microservice.js.map +0 -1
  290. package/lib/services/proxy-services/messenger-notification-microservice.d.ts +0 -16
  291. package/lib/services/proxy-services/messenger-notification-microservice.js +0 -54
  292. package/lib/services/proxy-services/messenger-notification-microservice.js.map +0 -1
  293. package/lib/services/proxy-services/post-microservice.d.ts +0 -22
  294. package/lib/services/proxy-services/post-microservice.js +0 -64
  295. package/lib/services/proxy-services/post-microservice.js.map +0 -1
  296. package/lib/services/proxy-services/post-thread-microservice.d.ts +0 -10
  297. package/lib/services/proxy-services/post-thread-microservice.js +0 -15
  298. package/lib/services/proxy-services/post-thread-microservice.js.map +0 -1
  299. package/lib/services/proxy-services/reaction-microservice.d.ts +0 -9
  300. package/lib/services/proxy-services/reaction-microservice.js +0 -10
  301. package/lib/services/proxy-services/reaction-microservice.js.map +0 -1
  302. package/lib/store/models/common-options.js +0 -20
  303. package/lib/store/models/common-options.js.map +0 -1
@@ -1,38 +1,58 @@
1
- import {Schema}from'mongoose';import {RoomType}from'common';import {commonModeSchemaOptions,addIdVirtualFields}from'./common-options.js';const channelModelSchema = new Schema({
1
+ import {Schema,Types}from'mongoose';import {DB_COLL_NAMES,RoomType}from'common/server';const ChannelSchema = new Schema({
2
2
  type: {
3
3
  type: Schema.Types.String,
4
- enum: [RoomType.Channel, RoomType.Direct, RoomType.Group, RoomType.Private, RoomType.Public, RoomType.Visitor, RoomType.Service],
5
- required: true
4
+ enum: Object.values(RoomType),
5
+ required: true,
6
+ index: true
6
7
  },
7
8
  orgName: {
8
9
  type: Schema.Types.String,
9
10
  required: function () {
10
- return ![RoomType.Direct, RoomType.Public, RoomType.Service].includes(this.type);
11
- }
11
+ return ![RoomType.Direct, RoomType.Public, RoomType.Service, RoomType.Aiassistant].includes(this.type);
12
+ },
13
+ index: true
14
+ },
15
+ tenantId: {
16
+ type: Schema.Types.String,
17
+ required: true,
18
+ index: true
19
+ },
20
+ organization: {
21
+ type: Schema.Types.ObjectId,
22
+ ref: DB_COLL_NAMES.Organizations,
23
+ index: true
12
24
  },
13
25
  members: {
14
- type: [new Schema({
26
+ type: [{
15
27
  user: {
16
28
  type: Schema.Types.ObjectId,
17
- ref: 'accounts'
29
+ ref: DB_COLL_NAMES.Accounts,
30
+ required: true,
31
+ index: true
18
32
  },
19
33
  roles: {
20
- type: Schema.Types.String
34
+ type: Schema.Types.String,
35
+ default: 'member'
21
36
  },
22
37
  msgCount: {
23
- type: Schema.Types.Number
38
+ type: Schema.Types.Number,
39
+ default: 0
24
40
  },
25
41
  mentionCount: {
26
- type: Schema.Types.Number
42
+ type: Schema.Types.Number,
43
+ default: 0
27
44
  },
28
45
  mentionCountRoot: {
29
- type: Schema.Types.Number
46
+ type: Schema.Types.Number,
47
+ default: 0
30
48
  },
31
49
  msgCountRoot: {
32
- type: Schema.Types.Number
50
+ type: Schema.Types.Number,
51
+ default: 0
33
52
  },
34
53
  notifyProps: {
35
- type: Schema.Types.Mixed
54
+ type: Schema.Types.Mixed,
55
+ default: {}
36
56
  },
37
57
  explicitRoles: {
38
58
  type: Schema.Types.String
@@ -41,16 +61,25 @@ import {Schema}from'mongoose';import {RoomType}from'common';import {commonModeSc
41
61
  type: Schema.Types.String
42
62
  },
43
63
  lastViewedAt: {
44
- type: Schema.Types.Date
64
+ type: Schema.Types.Date,
65
+ default: Date.now
66
+ },
67
+ createdAt: {
68
+ type: Schema.Types.Date,
69
+ default: Date.now
70
+ },
71
+ updatedAt: {
72
+ type: Schema.Types.Date,
73
+ default: Date.now
45
74
  },
46
75
  deletedAt: {
47
76
  type: Schema.Types.Date
48
77
  }
49
- }, commonModeSchemaOptions)],
78
+ }],
50
79
  required: true,
51
80
  validate: {
52
- message: 'Channel already exists',
53
- validator: async function (members, type) {
81
+ message: 'Channel validation failed',
82
+ validator: async function (members) {
54
83
  // Extract the IDs of the users in the members array
55
84
  const userIds = members.map(member => member.user.toString());
56
85
  // Check if there are any duplicate user IDs
@@ -58,76 +87,193 @@ import {Schema}from'mongoose';import {RoomType}from'common';import {commonModeSc
58
87
  if (uniqueUserIds.length !== userIds.length) {
59
88
  return false;
60
89
  }
61
- if (this.type !== RoomType.Direct || members?.length > 2) {
90
+ // For non-direct channels, allow any number of members
91
+ if (this.type !== RoomType.Direct) {
62
92
  return true;
63
93
  }
64
- // Check if any of the user IDs already exist in other direct channels
65
- const orgName = this.orgName;
66
- if (this.type === RoomType.Direct && members?.length < 2) {
67
- const filter = {
68
- type: RoomType.Direct,
69
- orgName: orgName,
70
- 'members.user': {
71
- $all: members.map(m => m.user)
72
- },
73
- members: {
74
- $size: 1
75
- }
76
- };
77
- const directChannels = await this.constructor.findOne(filter);
78
- if (directChannels && Object.keys(directChannels).length > 0) return false;
79
- } else {
80
- const filter = {
81
- type: RoomType.Direct,
82
- orgName: orgName,
83
- 'members.user': {
84
- $all: members.map(m => m.user)
85
- },
86
- members: {
87
- $size: 2
88
- }
89
- };
90
- const directChannels = await this.constructor.findOne(filter);
91
- return !directChannels;
94
+ // Direct channel validation
95
+ if (members?.length > 2) {
96
+ return false; // Direct channels can't have more than 2 members
92
97
  }
98
+ const orgName = this.orgName;
99
+ const expectedSize = members.length;
100
+ // Check if a direct channel with the same members already exists
101
+ const filter = {
102
+ type: RoomType.Direct,
103
+ orgName: orgName,
104
+ 'members.user': {
105
+ $all: members.map(m => m.user)
106
+ },
107
+ members: {
108
+ $size: expectedSize
109
+ }
110
+ };
111
+ const ChannelModel = this.constructor;
112
+ const existingChannel = await ChannelModel.findOne(filter);
113
+ return !existingChannel;
93
114
  }
94
115
  }
95
116
  },
96
- deletedAt: {
97
- type: Schema.Types.Date
117
+ team: {
118
+ type: Schema.Types.ObjectId,
119
+ ref: DB_COLL_NAMES.Teams,
120
+ index: true
121
+ },
122
+ creator: {
123
+ type: Schema.Types.ObjectId,
124
+ ref: DB_COLL_NAMES.Accounts,
125
+ required: true,
126
+ index: true
127
+ },
128
+ title: {
129
+ type: Schema.Types.String,
130
+ trim: true,
131
+ index: true
132
+ },
133
+ displayName: {
134
+ type: Schema.Types.String,
135
+ trim: true,
136
+ index: true
137
+ },
138
+ description: {
139
+ type: Schema.Types.String,
140
+ trim: true
141
+ },
142
+ purpose: {
143
+ type: Schema.Types.String,
144
+ trim: true
145
+ },
146
+ topic: {
147
+ type: Schema.Types.String,
148
+ trim: true
98
149
  },
99
150
  lastPostAt: {
100
- type: Schema.Types.Date
151
+ type: Schema.Types.Date,
152
+ index: true
101
153
  },
102
154
  totalMsgCount: {
103
- type: Schema.Types.Number
155
+ type: Schema.Types.Number,
156
+ default: 0,
157
+ min: 0
104
158
  },
105
159
  totalMsgCountRoot: {
106
- type: Schema.Types.Number
160
+ type: Schema.Types.Number,
161
+ default: 0,
162
+ min: 0
107
163
  },
108
- team: {
164
+ projectId: {
109
165
  type: Schema.Types.ObjectId,
110
- ref: 'team'
111
- },
112
- title: {
113
- type: Schema.Types.String
166
+ trim: true,
167
+ index: true
114
168
  },
115
- displayName: {
116
- type: Schema.Types.String
169
+ /**
170
+ * Channel settings — schema-driven via ChannelSettings preferences.
171
+ * All openclaw-inspired feature configs (capabilities, typing, ackReaction,
172
+ * commandGating, allowlist, mentionGating, threading, session, channelConfig,
173
+ * presence, meta) live inside this single Mixed field.
174
+ */
175
+ settings: {
176
+ type: Schema.Types.Mixed,
177
+ default: {}
117
178
  },
118
- description: {
119
- type: Schema.Types.String
179
+ createdAt: {
180
+ type: Schema.Types.Date,
181
+ default: Date.now,
182
+ index: true
120
183
  },
121
- props: {
122
- type: Schema.Types.Mixed
184
+ updatedAt: {
185
+ type: Schema.Types.Date,
186
+ default: Date.now
123
187
  },
124
- purpose: {
125
- type: Schema.Types.String
188
+ deletedAt: {
189
+ type: Schema.Types.Date,
190
+ index: true
191
+ }
192
+ }, {
193
+ timestamps: true,
194
+ collection: 'channels',
195
+ toJSON: {
196
+ virtuals: true
126
197
  },
127
- creator: {
128
- type: Schema.Types.ObjectId,
129
- ref: 'accounts'
198
+ toObject: {
199
+ virtuals: true
200
+ }
201
+ });
202
+ // Virtual fields
203
+ ChannelSchema.virtual('id').get(function () {
204
+ return this._id.toHexString();
205
+ });
206
+ // Add virtual id getter for each member
207
+ const memberSchema = ChannelSchema.path('members').schema;
208
+ memberSchema.virtual('id').get(function () {
209
+ return this._id.toHexString();
210
+ });
211
+ // ChannelSchema.virtual('members', {
212
+ // ref: 'users',
213
+ // localField: 'members',
214
+ // foreignField: 'id',
215
+ // justOne: false,
216
+ // });
217
+ // Add compound indexes for better query performance
218
+ ChannelSchema.index({
219
+ tenantId: 1,
220
+ orgName: 1,
221
+ type: 1
222
+ });
223
+ ChannelSchema.index({
224
+ tenantId: 1,
225
+ orgName: 1,
226
+ 'members.user': 1
227
+ });
228
+ ChannelSchema.index({
229
+ type: 1,
230
+ deletedAt: 1
231
+ });
232
+ ChannelSchema.index({
233
+ team: 1,
234
+ type: 1
235
+ });
236
+ ChannelSchema.index({
237
+ creator: 1,
238
+ createdAt: -1
239
+ });
240
+ ChannelSchema.index({
241
+ lastPostAt: -1
242
+ });
243
+ // For direct channels, ensure uniqueness
244
+ ChannelSchema.index({
245
+ type: 1,
246
+ tenantId: 1,
247
+ orgName: 1,
248
+ 'members.user': 1
249
+ }, {
250
+ unique: true,
251
+ partialFilterExpression: {
252
+ type: RoomType.Direct,
253
+ deletedAt: {
254
+ $exists: false
255
+ }
256
+ }
257
+ });
258
+ // Pre-save middleware to update timestamps
259
+ ChannelSchema.pre('save', function (next) {
260
+ this.updatedAt = new Date();
261
+ // Convert organization to ObjectId if it's a string
262
+ const organization = this.organization;
263
+ if (organization && typeof organization === 'string') {
264
+ try {
265
+ this.organization = new Types.ObjectId(organization);
266
+ } catch (error) {
267
+ console.error('Error converting organization to ObjectId:', error);
268
+ }
130
269
  }
131
- }, commonModeSchemaOptions);
132
- addIdVirtualFields(channelModelSchema);
133
- const ChannelModelFunc = db => db.model('channel', channelModelSchema);export{ChannelModelFunc};//# sourceMappingURL=channel.js.map
270
+ next();
271
+ });
272
+ // Pre-update middleware
273
+ ChannelSchema.pre(['updateOne', 'findOneAndUpdate'], function (next) {
274
+ this.set({
275
+ updatedAt: new Date()
276
+ });
277
+ next();
278
+ });
279
+ const ChannelModelFunc = db => db.model('channels', ChannelSchema);export{ChannelModelFunc};//# sourceMappingURL=channel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"channel.js","sources":["../../../src/store/models/channel.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"channel.js","sources":["../../../src/store/models/channel.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { Document, Model, Connection } from 'mongoose';
2
- import { IPostThread } from 'common';
3
- export type IThreadsModel = Document<IPostThread>;
1
+ import { Model, Connection } from 'mongoose';
2
+ import { IPostThreadModel } from 'common/server';
3
+ export type IThreadsModel = IPostThreadModel;
4
4
  export type PostThreadModelType = Model<IThreadsModel>;
5
5
  export declare const PostThreadModelFunc: (db: Connection) => PostThreadModelType;
@@ -1,37 +1,119 @@
1
- import {Schema}from'mongoose';import {commonModeSchemaOptions,addIdVirtualFields}from'./common-options.js';const postThreadModelSchema = new Schema({
1
+ import {Schema}from'mongoose';import {DB_COLL_NAMES}from'common/server';const postThreadModelSchema = new Schema({
2
2
  post: {
3
3
  type: Schema.Types.ObjectId,
4
- ref: 'posts'
4
+ ref: 'posts',
5
+ required: true,
6
+ index: true
5
7
  },
6
8
  channel: {
7
9
  type: Schema.Types.ObjectId,
8
- ref: 'channels'
10
+ ref: 'channels',
11
+ required: true,
12
+ index: true
9
13
  },
10
14
  replyCount: {
11
- type: Schema.Types.Number
15
+ type: Schema.Types.Number,
16
+ default: 0,
17
+ min: 0
12
18
  },
13
19
  lastReplyAt: {
14
- type: Schema.Types.Date
20
+ type: Schema.Types.Date,
21
+ index: true
15
22
  },
16
23
  participants: {
17
- type: [new Schema({
24
+ type: [{
18
25
  user: {
19
26
  type: Schema.Types.ObjectId,
20
- ref: 'accounts'
27
+ ref: DB_COLL_NAMES.Accounts,
28
+ required: true,
29
+ index: true
21
30
  },
22
31
  roles: {
23
- type: Schema.Types.String
32
+ type: Schema.Types.String,
33
+ default: 'participant'
24
34
  },
25
35
  orgName: {
26
- type: Schema.Types.String
36
+ type: Schema.Types.String,
37
+ trim: true
38
+ },
39
+ createdAt: {
40
+ type: Schema.Types.Date,
41
+ default: Date.now
42
+ },
43
+ updatedAt: {
44
+ type: Schema.Types.Date,
45
+ default: Date.now
27
46
  },
28
47
  deletedAt: {
29
48
  type: Schema.Types.Date
30
49
  }
31
- }, commonModeSchemaOptions)]
50
+ }],
51
+ validate: {
52
+ message: 'Participants validation failed',
53
+ validator: function (participants) {
54
+ // Extract the IDs of the users in the participants array
55
+ const userIds = participants.map(participant => participant.user.toString());
56
+ // Check if there are any duplicate user IDs
57
+ const uniqueUserIds = [...new Set(userIds)];
58
+ return uniqueUserIds.length === userIds.length;
59
+ }
60
+ }
61
+ },
62
+ createdAt: {
63
+ type: Schema.Types.Date,
64
+ default: Date.now,
65
+ index: true
66
+ },
67
+ updatedAt: {
68
+ type: Schema.Types.Date,
69
+ default: Date.now
70
+ },
71
+ deletedAt: {
72
+ type: Schema.Types.Date,
73
+ index: true
74
+ }
75
+ }, {
76
+ timestamps: true,
77
+ collection: 'post-threads',
78
+ toJSON: {
79
+ virtuals: true
80
+ },
81
+ toObject: {
82
+ virtuals: true
32
83
  }
33
- // participants: [{ type: Schema.Types.ObjectId, ref: 'accounts' }],
34
- // orgName: { type: Schema.Types.String },
35
- }, commonModeSchemaOptions);
36
- addIdVirtualFields(postThreadModelSchema);
84
+ });
85
+ // Virtual fields
86
+ postThreadModelSchema.virtual('id').get(function () {
87
+ return this._id.toHexString();
88
+ });
89
+ // Add compound indexes for better query performance
90
+ postThreadModelSchema.index({
91
+ post: 1,
92
+ channel: 1
93
+ });
94
+ postThreadModelSchema.index({
95
+ channel: 1,
96
+ lastReplyAt: -1
97
+ });
98
+ postThreadModelSchema.index({
99
+ 'participants.user': 1
100
+ });
101
+ postThreadModelSchema.index({
102
+ createdAt: -1
103
+ });
104
+ postThreadModelSchema.index({
105
+ deletedAt: 1
106
+ });
107
+ // Pre-save middleware to update timestamps
108
+ postThreadModelSchema.pre('save', function (next) {
109
+ this.updatedAt = new Date();
110
+ next();
111
+ });
112
+ // Pre-update middleware
113
+ postThreadModelSchema.pre(['updateOne', 'findOneAndUpdate'], function (next) {
114
+ this.set({
115
+ updatedAt: new Date()
116
+ });
117
+ next();
118
+ });
37
119
  const PostThreadModelFunc = db => db.model('post-threads', postThreadModelSchema);export{PostThreadModelFunc};//# sourceMappingURL=post-thread.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"post-thread.js","sources":["../../../src/store/models/post-thread.ts"],"sourcesContent":[null],"names":[],"mappings":"2GAMA,MAAM,qBAAqB,GAAG,IAAI,MAAM,CACpC;AACI,EAAA,IAAA,EAAI;AACJ,IAAA,IAAA,EAAA,MAAe,CAAA,KAAQ,CAAA,QAAM;IAC7B,GAAU,EAAA;;AAEV,EAAA,OAAA,EAAA;AACI,IAAA,IAAA,EAAA,MAAM,CAAA,KAAA,CAAA,QAAA;AACF,IAAA,GAAA,EAAA;AAEQ,GAAA;;gBAEA,CAAO,KAAA,CAAA;;AAEV,EAAA,WAAA,EACD;AAEP,IAAA,IAAA,EAAA,MAAA,CAAA,KAAA,CAAA;AACJ,GAAA;cACmE,EAAA;IACpE,IAA0C,EAAA,CAAA,IAAA,MAAA,CAAA;MAE9C,IAAA,EAAA;AAGJ,QAAkB,IAAA,EAAA,MAAsB,CAAA,KAAA,CAAA,QAAA;AAGxC,QAAa,GAAA,EAAA;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"post-thread.js","sources":["../../../src/store/models/post-thread.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -1,5 +1,4 @@
1
- import { Document, Model, Connection } from 'mongoose';
2
- import { IPost } from 'common';
3
- export type IPostModel = Document<IPost>;
1
+ import { Connection, Model } from 'mongoose';
2
+ import { IPostModel } from 'common/server';
4
3
  export type PostModelType = Model<IPostModel>;
5
4
  export declare const PostModelFunc: (db: Connection) => PostModelType;