@brightchain/brightchain-lib 0.29.26 → 0.29.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. package/package.json +10 -4
  2. package/src/index.d.ts +1 -1
  3. package/src/index.d.ts.map +1 -1
  4. package/src/index.js +2 -1
  5. package/src/index.js.map +1 -1
  6. package/src/lib/enumeration-translations/index.d.ts +2 -0
  7. package/src/lib/enumeration-translations/index.d.ts.map +1 -1
  8. package/src/lib/enumeration-translations/index.js +1 -0
  9. package/src/lib/enumeration-translations/index.js.map +1 -1
  10. package/src/lib/enumeration-translations/memberStatusType.d.ts +5 -0
  11. package/src/lib/enumeration-translations/memberStatusType.d.ts.map +1 -0
  12. package/src/lib/enumeration-translations/memberStatusType.js +58 -0
  13. package/src/lib/enumeration-translations/memberStatusType.js.map +1 -0
  14. package/src/lib/enumerations/brightChainStrings.d.ts +43 -0
  15. package/src/lib/enumerations/brightChainStrings.d.ts.map +1 -1
  16. package/src/lib/enumerations/brightChainStrings.js +44 -0
  17. package/src/lib/enumerations/brightChainStrings.js.map +1 -1
  18. package/src/lib/enumerations/brightchainFeatures.d.ts +1 -0
  19. package/src/lib/enumerations/brightchainFeatures.d.ts.map +1 -1
  20. package/src/lib/enumerations/brightchainFeatures.js +1 -0
  21. package/src/lib/enumerations/brightchainFeatures.js.map +1 -1
  22. package/src/lib/enumerations/communication.d.ts +7 -1
  23. package/src/lib/enumerations/communication.d.ts.map +1 -1
  24. package/src/lib/enumerations/communication.js +6 -0
  25. package/src/lib/enumerations/communication.js.map +1 -1
  26. package/src/lib/enumerations/messaging/emailErrorType.d.ts +15 -2
  27. package/src/lib/enumerations/messaging/emailErrorType.d.ts.map +1 -1
  28. package/src/lib/enumerations/messaging/emailErrorType.js +17 -1
  29. package/src/lib/enumerations/messaging/emailErrorType.js.map +1 -1
  30. package/src/lib/enumerations/messaging/messageEncryptionScheme.d.ts +4 -2
  31. package/src/lib/enumerations/messaging/messageEncryptionScheme.d.ts.map +1 -1
  32. package/src/lib/enumerations/messaging/messageEncryptionScheme.js +3 -1
  33. package/src/lib/enumerations/messaging/messageEncryptionScheme.js.map +1 -1
  34. package/src/lib/errors/encryptionErrors.d.ts +71 -0
  35. package/src/lib/errors/encryptionErrors.d.ts.map +1 -0
  36. package/src/lib/errors/encryptionErrors.js +112 -0
  37. package/src/lib/errors/encryptionErrors.js.map +1 -0
  38. package/src/lib/errors/index.d.ts +10 -0
  39. package/src/lib/errors/index.d.ts.map +1 -1
  40. package/src/lib/errors/index.js +13 -0
  41. package/src/lib/errors/index.js.map +1 -1
  42. package/src/lib/i18n/i18n-setup.d.ts +2 -2
  43. package/src/lib/i18n/i18n-setup.d.ts.map +1 -1
  44. package/src/lib/i18n/strings/englishUK.d.ts +2 -2
  45. package/src/lib/i18n/strings/englishUK.d.ts.map +1 -1
  46. package/src/lib/i18n/strings/englishUK.js.map +1 -1
  47. package/src/lib/i18n/strings/englishUs.d.ts +2 -2
  48. package/src/lib/i18n/strings/englishUs.d.ts.map +1 -1
  49. package/src/lib/i18n/strings/englishUs.js +45 -1
  50. package/src/lib/i18n/strings/englishUs.js.map +1 -1
  51. package/src/lib/i18n/strings/french.d.ts +2 -2
  52. package/src/lib/i18n/strings/french.d.ts.map +1 -1
  53. package/src/lib/i18n/strings/french.js +58 -13
  54. package/src/lib/i18n/strings/french.js.map +1 -1
  55. package/src/lib/i18n/strings/german.d.ts +2 -2
  56. package/src/lib/i18n/strings/german.d.ts.map +1 -1
  57. package/src/lib/i18n/strings/german.js +57 -12
  58. package/src/lib/i18n/strings/german.js.map +1 -1
  59. package/src/lib/i18n/strings/japanese.d.ts +2 -2
  60. package/src/lib/i18n/strings/japanese.d.ts.map +1 -1
  61. package/src/lib/i18n/strings/japanese.js +57 -12
  62. package/src/lib/i18n/strings/japanese.js.map +1 -1
  63. package/src/lib/i18n/strings/mandarin.d.ts +2 -2
  64. package/src/lib/i18n/strings/mandarin.d.ts.map +1 -1
  65. package/src/lib/i18n/strings/mandarin.js +57 -12
  66. package/src/lib/i18n/strings/mandarin.js.map +1 -1
  67. package/src/lib/i18n/strings/spanish.d.ts +2 -2
  68. package/src/lib/i18n/strings/spanish.d.ts.map +1 -1
  69. package/src/lib/i18n/strings/spanish.js +57 -12
  70. package/src/lib/i18n/strings/spanish.js.map +1 -1
  71. package/src/lib/i18n/strings/ukrainian.d.ts +2 -2
  72. package/src/lib/i18n/strings/ukrainian.d.ts.map +1 -1
  73. package/src/lib/i18n/strings/ukrainian.js +57 -12
  74. package/src/lib/i18n/strings/ukrainian.js.map +1 -1
  75. package/src/lib/index.d.ts +31 -0
  76. package/src/lib/index.d.ts.map +1 -1
  77. package/src/lib/index.js +29 -1
  78. package/src/lib/index.js.map +1 -1
  79. package/src/lib/interfaces/auth/writeProof.d.ts +2 -0
  80. package/src/lib/interfaces/auth/writeProof.d.ts.map +1 -1
  81. package/src/lib/interfaces/auth/writeProofUtils.d.ts +1 -1
  82. package/src/lib/interfaces/auth/writeProofUtils.d.ts.map +1 -1
  83. package/src/lib/interfaces/auth/writeProofUtils.js +2 -2
  84. package/src/lib/interfaces/auth/writeProofUtils.js.map +1 -1
  85. package/src/lib/interfaces/availability/gossipService.d.ts +99 -1
  86. package/src/lib/interfaces/availability/gossipService.d.ts.map +1 -1
  87. package/src/lib/interfaces/availability/gossipService.js +4 -0
  88. package/src/lib/interfaces/availability/gossipService.js.map +1 -1
  89. package/src/lib/interfaces/communication/blockContentStore.d.ts +57 -0
  90. package/src/lib/interfaces/communication/blockContentStore.d.ts.map +1 -0
  91. package/src/lib/interfaces/communication/blockContentStore.js +21 -0
  92. package/src/lib/interfaces/communication/blockContentStore.js.map +1 -0
  93. package/src/lib/interfaces/communication/chatStorageProvider.d.ts +77 -0
  94. package/src/lib/interfaces/communication/chatStorageProvider.d.ts.map +1 -0
  95. package/src/lib/interfaces/communication/chatStorageProvider.js +25 -0
  96. package/src/lib/interfaces/communication/chatStorageProvider.js.map +1 -0
  97. package/src/lib/interfaces/communication/index.d.ts +4 -0
  98. package/src/lib/interfaces/communication/index.d.ts.map +1 -0
  99. package/src/lib/interfaces/communication/index.js +3 -0
  100. package/src/lib/interfaces/communication/index.js.map +1 -0
  101. package/src/lib/interfaces/communication/server.d.ts +57 -0
  102. package/src/lib/interfaces/communication/server.d.ts.map +1 -0
  103. package/src/lib/interfaces/communication/server.js +14 -0
  104. package/src/lib/interfaces/communication/server.js.map +1 -0
  105. package/src/lib/interfaces/communication.d.ts +60 -5
  106. package/src/lib/interfaces/communication.d.ts.map +1 -1
  107. package/src/lib/interfaces/communication.js +8 -0
  108. package/src/lib/interfaces/communication.js.map +1 -1
  109. package/src/lib/interfaces/communicationEvents.d.ts +59 -1
  110. package/src/lib/interfaces/communicationEvents.d.ts.map +1 -1
  111. package/src/lib/interfaces/events/communicationEventEmitter.d.ts +9 -0
  112. package/src/lib/interfaces/events/communicationEventEmitter.d.ts.map +1 -1
  113. package/src/lib/interfaces/events/communicationEventEmitter.js +9 -0
  114. package/src/lib/interfaces/events/communicationEventEmitter.js.map +1 -1
  115. package/src/lib/interfaces/index.d.ts +4 -1
  116. package/src/lib/interfaces/index.d.ts.map +1 -1
  117. package/src/lib/interfaces/index.js +3 -0
  118. package/src/lib/interfaces/index.js.map +1 -1
  119. package/src/lib/interfaces/messaging/gpgKey.d.ts +93 -0
  120. package/src/lib/interfaces/messaging/gpgKey.d.ts.map +1 -0
  121. package/src/lib/interfaces/messaging/gpgKey.js +12 -0
  122. package/src/lib/interfaces/messaging/gpgKey.js.map +1 -0
  123. package/src/lib/interfaces/messaging/index.d.ts +4 -0
  124. package/src/lib/interfaces/messaging/index.d.ts.map +1 -1
  125. package/src/lib/interfaces/messaging/index.js +4 -0
  126. package/src/lib/interfaces/messaging/index.js.map +1 -1
  127. package/src/lib/interfaces/messaging/keyStore.d.ts +100 -0
  128. package/src/lib/interfaces/messaging/keyStore.d.ts.map +1 -0
  129. package/src/lib/interfaces/messaging/keyStore.js +13 -0
  130. package/src/lib/interfaces/messaging/keyStore.js.map +1 -0
  131. package/src/lib/interfaces/messaging/recipientKeyResolver.d.ts +92 -0
  132. package/src/lib/interfaces/messaging/recipientKeyResolver.d.ts.map +1 -0
  133. package/src/lib/interfaces/messaging/recipientKeyResolver.js +13 -0
  134. package/src/lib/interfaces/messaging/recipientKeyResolver.js.map +1 -0
  135. package/src/lib/interfaces/messaging/smimeCertificate.d.ts +99 -0
  136. package/src/lib/interfaces/messaging/smimeCertificate.d.ts.map +1 -0
  137. package/src/lib/interfaces/messaging/smimeCertificate.js +12 -0
  138. package/src/lib/interfaces/messaging/smimeCertificate.js.map +1 -0
  139. package/src/lib/interfaces/responses/adminDashboardResponse.d.ts +8 -0
  140. package/src/lib/interfaces/responses/adminDashboardResponse.d.ts.map +1 -1
  141. package/src/lib/interfaces/responses/communicationResponses.d.ts +25 -0
  142. package/src/lib/interfaces/responses/communicationResponses.d.ts.map +1 -1
  143. package/src/lib/services/blockService.d.ts +11 -3
  144. package/src/lib/services/blockService.d.ts.map +1 -1
  145. package/src/lib/services/blockService.js +22 -2
  146. package/src/lib/services/blockService.js.map +1 -1
  147. package/src/lib/services/communication/__tests__/mockChatStorageProvider.d.ts +108 -0
  148. package/src/lib/services/communication/__tests__/mockChatStorageProvider.d.ts.map +1 -0
  149. package/src/lib/services/communication/__tests__/mockChatStorageProvider.js +284 -0
  150. package/src/lib/services/communication/__tests__/mockChatStorageProvider.js.map +1 -0
  151. package/src/lib/services/communication/attachmentUtils.d.ts +20 -0
  152. package/src/lib/services/communication/attachmentUtils.d.ts.map +1 -0
  153. package/src/lib/services/communication/attachmentUtils.js +43 -0
  154. package/src/lib/services/communication/attachmentUtils.js.map +1 -0
  155. package/src/lib/services/communication/channelService.d.ts +127 -12
  156. package/src/lib/services/communication/channelService.d.ts.map +1 -1
  157. package/src/lib/services/communication/channelService.js +486 -30
  158. package/src/lib/services/communication/channelService.js.map +1 -1
  159. package/src/lib/services/communication/conversationService.d.ts +91 -4
  160. package/src/lib/services/communication/conversationService.d.ts.map +1 -1
  161. package/src/lib/services/communication/conversationService.js +237 -5
  162. package/src/lib/services/communication/conversationService.js.map +1 -1
  163. package/src/lib/services/communication/eciesKeyEncryptionHandler.d.ts +36 -0
  164. package/src/lib/services/communication/eciesKeyEncryptionHandler.d.ts.map +1 -0
  165. package/src/lib/services/communication/eciesKeyEncryptionHandler.js +30 -0
  166. package/src/lib/services/communication/eciesKeyEncryptionHandler.js.map +1 -0
  167. package/src/lib/services/communication/groupService.d.ts +99 -21
  168. package/src/lib/services/communication/groupService.d.ts.map +1 -1
  169. package/src/lib/services/communication/groupService.js +359 -39
  170. package/src/lib/services/communication/groupService.js.map +1 -1
  171. package/src/lib/services/communication/index.d.ts +6 -1
  172. package/src/lib/services/communication/index.d.ts.map +1 -1
  173. package/src/lib/services/communication/index.js +20 -1
  174. package/src/lib/services/communication/index.js.map +1 -1
  175. package/src/lib/services/communication/keyEpochManager.d.ts +41 -0
  176. package/src/lib/services/communication/keyEpochManager.d.ts.map +1 -0
  177. package/src/lib/services/communication/keyEpochManager.js +59 -0
  178. package/src/lib/services/communication/keyEpochManager.js.map +1 -0
  179. package/src/lib/services/communication/rehydrationHelpers.d.ts +32 -0
  180. package/src/lib/services/communication/rehydrationHelpers.d.ts.map +1 -0
  181. package/src/lib/services/communication/rehydrationHelpers.js +58 -0
  182. package/src/lib/services/communication/rehydrationHelpers.js.map +1 -0
  183. package/src/lib/services/communication/serverService.d.ts +193 -0
  184. package/src/lib/services/communication/serverService.d.ts.map +1 -0
  185. package/src/lib/services/communication/serverService.js +497 -0
  186. package/src/lib/services/communication/serverService.js.map +1 -0
  187. package/src/lib/services/memberStore.d.ts +10 -0
  188. package/src/lib/services/memberStore.d.ts.map +1 -1
  189. package/src/lib/services/memberStore.js +41 -16
  190. package/src/lib/services/memberStore.js.map +1 -1
  191. package/src/lib/services/messaging/emailEncryptionService.d.ts +162 -0
  192. package/src/lib/services/messaging/emailEncryptionService.d.ts.map +1 -1
  193. package/src/lib/services/messaging/emailEncryptionService.js +293 -0
  194. package/src/lib/services/messaging/emailEncryptionService.js.map +1 -1
  195. package/src/lib/services/messaging/emailMessageService.d.ts +64 -0
  196. package/src/lib/services/messaging/emailMessageService.d.ts.map +1 -1
  197. package/src/lib/services/messaging/emailMessageService.js +142 -13
  198. package/src/lib/services/messaging/emailMessageService.js.map +1 -1
  199. package/src/lib/services/messaging/gpgKeyManager.d.ts +130 -0
  200. package/src/lib/services/messaging/gpgKeyManager.d.ts.map +1 -0
  201. package/src/lib/services/messaging/gpgKeyManager.js +381 -0
  202. package/src/lib/services/messaging/gpgKeyManager.js.map +1 -0
  203. package/src/lib/services/messaging/index.d.ts +3 -0
  204. package/src/lib/services/messaging/index.d.ts.map +1 -1
  205. package/src/lib/services/messaging/index.js +3 -0
  206. package/src/lib/services/messaging/index.js.map +1 -1
  207. package/src/lib/services/messaging/recipientKeyResolver.d.ts +47 -0
  208. package/src/lib/services/messaging/recipientKeyResolver.d.ts.map +1 -0
  209. package/src/lib/services/messaging/recipientKeyResolver.js +132 -0
  210. package/src/lib/services/messaging/recipientKeyResolver.js.map +1 -0
  211. package/src/lib/services/messaging/smimeCertificateManager.d.ts +207 -0
  212. package/src/lib/services/messaging/smimeCertificateManager.d.ts.map +1 -0
  213. package/src/lib/services/messaging/smimeCertificateManager.js +696 -0
  214. package/src/lib/services/messaging/smimeCertificateManager.js.map +1 -0
@@ -0,0 +1,497 @@
1
+ "use strict";
2
+ /**
3
+ * ServerService — manages server lifecycle, membership, and channel organization.
4
+ *
5
+ * Maintains in-memory stores for servers. When an IChatStorageProvider is
6
+ * injected, servers are also persisted to the provider's collections (write-through).
7
+ * Without a provider (e.g. in unit tests), services fall back to in-memory Maps.
8
+ *
9
+ * Requirements: 1.1, 1.3, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ServerService = exports.ServerInviteExpiredError = exports.ServerInviteNotFoundError = exports.MemberAlreadyInServerError = exports.ServerNameValidationError = exports.NotServerMemberError = exports.ServerPermissionError = exports.ServerNotFoundError = void 0;
13
+ const uuid_1 = require("uuid");
14
+ const communication_1 = require("../../enumerations/communication");
15
+ const events_1 = require("../../interfaces/events");
16
+ const pagination_1 = require("../../utils/pagination");
17
+ // ─── Error classes ──────────────────────────────────────────────────────────
18
+ class ServerNotFoundError extends Error {
19
+ constructor(serverId) {
20
+ super(`Server ${serverId} not found`);
21
+ this.name = 'ServerNotFoundError';
22
+ }
23
+ }
24
+ exports.ServerNotFoundError = ServerNotFoundError;
25
+ class ServerPermissionError extends Error {
26
+ constructor(message = 'You do not have permission to perform this action') {
27
+ super(message);
28
+ this.name = 'ServerPermissionError';
29
+ }
30
+ }
31
+ exports.ServerPermissionError = ServerPermissionError;
32
+ class NotServerMemberError extends Error {
33
+ constructor() {
34
+ super('You are not a member of this server');
35
+ this.name = 'NotServerMemberError';
36
+ }
37
+ }
38
+ exports.NotServerMemberError = NotServerMemberError;
39
+ class ServerNameValidationError extends Error {
40
+ constructor(message = 'Server name must be between 1 and 100 characters') {
41
+ super(message);
42
+ this.name = 'ServerNameValidationError';
43
+ }
44
+ }
45
+ exports.ServerNameValidationError = ServerNameValidationError;
46
+ class MemberAlreadyInServerError extends Error {
47
+ constructor(memberId) {
48
+ super(`Member ${memberId} is already in this server`);
49
+ this.name = 'MemberAlreadyInServerError';
50
+ }
51
+ }
52
+ exports.MemberAlreadyInServerError = MemberAlreadyInServerError;
53
+ class ServerInviteNotFoundError extends Error {
54
+ constructor(token) {
55
+ super(`Server invite token ${token} not found`);
56
+ this.name = 'ServerInviteNotFoundError';
57
+ }
58
+ }
59
+ exports.ServerInviteNotFoundError = ServerInviteNotFoundError;
60
+ class ServerInviteExpiredError extends Error {
61
+ constructor() {
62
+ super('Server invite token has expired or exceeded max uses');
63
+ this.name = 'ServerInviteExpiredError';
64
+ }
65
+ }
66
+ exports.ServerInviteExpiredError = ServerInviteExpiredError;
67
+ // ─── Service ────────────────────────────────────────────────────────────────
68
+ class ServerService {
69
+ /** serverId → IServer */
70
+ servers = new Map();
71
+ /** token → IServerInviteToken */
72
+ serverInviteTokens = new Map();
73
+ channelService;
74
+ eventEmitter;
75
+ /** Optional persistent collection for servers (write-through). */
76
+ serverCollection;
77
+ /** Optional persistent collection for server invite tokens (write-through). */
78
+ serverInviteCollection;
79
+ /** Whether init() has already been called. */
80
+ initialized = false;
81
+ constructor(options) {
82
+ this.channelService = options.channelService;
83
+ this.eventEmitter = options.eventEmitter ?? new events_1.NullEventEmitter();
84
+ if (options.storageProvider) {
85
+ this.serverCollection = options.storageProvider.servers;
86
+ this.serverInviteCollection = options.storageProvider.serverInvites;
87
+ }
88
+ }
89
+ // ─── Rehydration ──────────────────────────────────────────────────────
90
+ /**
91
+ * Load persisted servers and server invite tokens back into in-memory Maps.
92
+ *
93
+ * Idempotent: only the first call performs rehydration. No-op when no
94
+ * storage provider was supplied at construction time.
95
+ *
96
+ * Requirements: 1.4, 1.5, 1.6, 5.1, 5.2, 8.1, 8.2, 9.1
97
+ */
98
+ async init() {
99
+ if (this.initialized)
100
+ return;
101
+ if (!this.serverCollection)
102
+ return;
103
+ this.initialized = true;
104
+ // ── Load servers ──────────────────────────────────────────────────
105
+ let loadedServers;
106
+ try {
107
+ loadedServers = await this.serverCollection.findMany();
108
+ }
109
+ catch (error) {
110
+ console.error('[ServerService] Failed to load from servers collection:', error);
111
+ throw error;
112
+ }
113
+ for (const server of loadedServers) {
114
+ this.servers.set(server.id, server);
115
+ }
116
+ // ── Load server invite tokens ───────────────────────────────────
117
+ let loadedInvites;
118
+ try {
119
+ loadedInvites = await this.serverInviteCollection.findMany();
120
+ }
121
+ catch (error) {
122
+ console.error('[ServerService] Failed to load from serverInvites collection:', error);
123
+ throw error;
124
+ }
125
+ for (const invite of loadedInvites) {
126
+ this.serverInviteTokens.set(invite.token, invite);
127
+ }
128
+ }
129
+ // ─── Helpers ──────────────────────────────────────────────────────────
130
+ validateServerName(name) {
131
+ if (!name || name.length === 0 || name.length > 100) {
132
+ throw new ServerNameValidationError();
133
+ }
134
+ }
135
+ assertServerExists(serverId) {
136
+ const server = this.servers.get(serverId);
137
+ if (!server)
138
+ throw new ServerNotFoundError(serverId);
139
+ return server;
140
+ }
141
+ /**
142
+ * Returns the role of a member within a server.
143
+ * The server owner always has OWNER role; all other members have MEMBER role.
144
+ * Returns null if the user is not a member.
145
+ */
146
+ getMemberRole(serverId, memberId) {
147
+ const server = this.servers.get(serverId);
148
+ if (!server)
149
+ return null;
150
+ if (!server.memberIds.includes(memberId))
151
+ return null;
152
+ if (server.ownerId === memberId)
153
+ return communication_1.DefaultRole.OWNER;
154
+ return communication_1.DefaultRole.MEMBER;
155
+ }
156
+ assertCanUpdate(server, userId) {
157
+ const role = this.getMemberRole(server.id, userId);
158
+ if (role !== communication_1.DefaultRole.OWNER && role !== communication_1.DefaultRole.ADMIN) {
159
+ throw new ServerPermissionError('Only the server owner or admin can update this server');
160
+ }
161
+ }
162
+ assertCanDelete(server, userId) {
163
+ if (server.ownerId !== userId) {
164
+ throw new ServerPermissionError('Only the server owner can delete this server');
165
+ }
166
+ }
167
+ // ─── CRUD ─────────────────────────────────────────────────────────────
168
+ /**
169
+ * Create a new server with a default "General" category and "general" channel.
170
+ * The owner is added as the first member.
171
+ *
172
+ * Requirements: 1.1, 1.3, 2.1
173
+ */
174
+ async createServer(ownerId, params) {
175
+ this.validateServerName(params.name);
176
+ const now = new Date();
177
+ const serverId = (0, uuid_1.v4)();
178
+ const categoryId = (0, uuid_1.v4)();
179
+ // Create the default "general" channel via ChannelService
180
+ const generalChannel = await this.channelService.createChannel('general', ownerId, communication_1.ChannelVisibility.PUBLIC, '');
181
+ // Link the channel to this server
182
+ generalChannel.serverId = serverId;
183
+ // Build the default "General" category
184
+ const defaultCategory = {
185
+ id: categoryId,
186
+ name: 'General',
187
+ position: 0,
188
+ channelIds: [generalChannel.id],
189
+ };
190
+ const server = {
191
+ id: serverId,
192
+ name: params.name,
193
+ iconUrl: params.iconUrl,
194
+ ownerId,
195
+ memberIds: [ownerId],
196
+ channelIds: [generalChannel.id],
197
+ categories: [defaultCategory],
198
+ createdAt: now,
199
+ updatedAt: now,
200
+ };
201
+ this.servers.set(serverId, server);
202
+ // Persist to storage provider if available
203
+ if (this.serverCollection) {
204
+ await this.serverCollection.create(server);
205
+ }
206
+ return server;
207
+ }
208
+ /**
209
+ * Get a server by ID.
210
+ * Throws ServerNotFoundError if the server does not exist.
211
+ *
212
+ * Requirement: 2.3
213
+ */
214
+ async getServer(serverId) {
215
+ return this.assertServerExists(serverId);
216
+ }
217
+ /**
218
+ * Update server settings (name, iconUrl, categories).
219
+ * Only the owner or admin can update.
220
+ *
221
+ * Requirements: 2.4, 2.5
222
+ */
223
+ async updateServer(serverId, userId, update) {
224
+ const server = this.assertServerExists(serverId);
225
+ this.assertCanUpdate(server, userId);
226
+ if (update.name !== undefined) {
227
+ this.validateServerName(update.name);
228
+ server.name = update.name;
229
+ }
230
+ if (update.iconUrl !== undefined) {
231
+ server.iconUrl = update.iconUrl;
232
+ }
233
+ if (update.categories !== undefined) {
234
+ server.categories = update.categories;
235
+ }
236
+ server.updatedAt = new Date();
237
+ // Persist to storage provider if available
238
+ if (this.serverCollection) {
239
+ await this.serverCollection.update(serverId, server);
240
+ }
241
+ return server;
242
+ }
243
+ /**
244
+ * Delete a server and cascade-delete all its channels.
245
+ * Only the owner can delete.
246
+ *
247
+ * Requirements: 2.5, 2.6
248
+ */
249
+ async deleteServer(serverId, userId) {
250
+ const server = this.assertServerExists(serverId);
251
+ this.assertCanDelete(server, userId);
252
+ // Cascade delete all channels belonging to this server
253
+ for (const channelId of server.channelIds) {
254
+ try {
255
+ await this.channelService.deleteChannel(channelId, server.ownerId);
256
+ }
257
+ catch {
258
+ // Channel may already be deleted; continue cleanup
259
+ }
260
+ }
261
+ this.servers.delete(serverId);
262
+ // Persist deletion to storage provider if available
263
+ if (this.serverCollection) {
264
+ await this.serverCollection.delete(serverId);
265
+ }
266
+ }
267
+ /**
268
+ * List all servers where the given member is a member.
269
+ * Supports cursor-based pagination.
270
+ *
271
+ * Requirement: 2.2
272
+ */
273
+ async listServersForMember(memberId, pagination) {
274
+ const memberServers = Array.from(this.servers.values()).filter((s) => s.memberIds.includes(memberId));
275
+ // Sort by creation date descending (newest first)
276
+ memberServers.sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());
277
+ return (0, pagination_1.paginateItems)(memberServers, pagination?.cursor, pagination?.limit ?? 50);
278
+ }
279
+ // ─── Membership ────────────────────────────────────────────────────────
280
+ /**
281
+ * Add members to a server. Only owner or admin can add members.
282
+ * Skips members who are already in the server. Returns the list of
283
+ * actually added member IDs.
284
+ *
285
+ * After adding, distributes channel keys for all server channels
286
+ * to each new member via ChannelService.addMemberToChannel().
287
+ *
288
+ * Requirements: 2.7, 6.1, 6.2, 6.3
289
+ */
290
+ async addMembers(serverId, userId, memberIds) {
291
+ const server = this.assertServerExists(serverId);
292
+ this.assertCanUpdate(server, userId);
293
+ const added = [];
294
+ for (const memberId of memberIds) {
295
+ if (!server.memberIds.includes(memberId)) {
296
+ server.memberIds.push(memberId);
297
+ added.push(memberId);
298
+ }
299
+ }
300
+ if (added.length > 0) {
301
+ // Distribute channel keys for all server channels to each new member
302
+ for (const memberId of added) {
303
+ for (const channelId of server.channelIds) {
304
+ await this.channelService.addMemberToChannel(channelId, memberId);
305
+ }
306
+ }
307
+ server.updatedAt = new Date();
308
+ // Persist to storage provider if available
309
+ if (this.serverCollection) {
310
+ await this.serverCollection.update(serverId, server);
311
+ }
312
+ }
313
+ return added;
314
+ }
315
+ /**
316
+ * Remove a member from a server and all of its channels.
317
+ * Only owner or admin can remove members. Emits SERVER_MEMBER_REMOVED event.
318
+ *
319
+ * Delegates to ChannelService.removeMemberFromChannel() for each channel,
320
+ * which performs epoch-aware key rotation and removes the member's wrapped
321
+ * key entries from all epochs.
322
+ *
323
+ * Requirements: 2.8, 7.1, 7.2, 7.3
324
+ */
325
+ async removeMember(serverId, userId, memberId) {
326
+ const server = this.assertServerExists(serverId);
327
+ this.assertCanUpdate(server, userId);
328
+ // Remove from server memberIds
329
+ server.memberIds = server.memberIds.filter((id) => id !== memberId);
330
+ // Remove from all server channels via ChannelService (triggers key rotation)
331
+ for (const channelId of server.channelIds) {
332
+ await this.channelService.removeMemberFromChannel(channelId, memberId);
333
+ }
334
+ server.updatedAt = new Date();
335
+ // Persist to storage provider if available
336
+ if (this.serverCollection) {
337
+ await this.serverCollection.update(serverId, server);
338
+ }
339
+ this.eventEmitter.emitServerMemberRemoved(serverId, memberId);
340
+ }
341
+ // ─── Invites ──────────────────────────────────────────────────────────
342
+ /**
343
+ * Create an invite token for a server.
344
+ * Only members of the server can create invites.
345
+ * Generates a unique token with optional expiration and max-use limits.
346
+ *
347
+ * Requirements: 3.1
348
+ */
349
+ async createInvite(serverId, userId, params) {
350
+ const server = this.assertServerExists(serverId);
351
+ // Caller must be a member of the server
352
+ if (!server.memberIds.includes(userId)) {
353
+ throw new NotServerMemberError();
354
+ }
355
+ const now = new Date();
356
+ const invite = {
357
+ token: (0, uuid_1.v4)(),
358
+ serverId,
359
+ createdBy: userId,
360
+ createdAt: now,
361
+ expiresAt: params.expiresInMs
362
+ ? new Date(now.getTime() + params.expiresInMs)
363
+ : undefined,
364
+ maxUses: params.maxUses,
365
+ currentUses: 0,
366
+ };
367
+ this.serverInviteTokens.set(invite.token, invite);
368
+ // Persist to storage provider if available
369
+ if (this.serverInviteCollection) {
370
+ await this.serverInviteCollection.create(invite);
371
+ }
372
+ return invite;
373
+ }
374
+ /**
375
+ * Redeem an invite token to join a server.
376
+ * Validates the token belongs to the specified server, checks expiration
377
+ * and max-use limits, increments currentUses, and adds the user to the server.
378
+ *
379
+ * After joining, distributes channel keys for all server channels
380
+ * to the new member via ChannelService.addMemberToChannel().
381
+ *
382
+ * Requirements: 3.2, 3.3, 3.4, 6.1, 6.2, 6.3
383
+ */
384
+ async redeemInvite(serverId, token, userId) {
385
+ const invite = this.serverInviteTokens.get(token);
386
+ if (!invite) {
387
+ throw new ServerInviteNotFoundError(token);
388
+ }
389
+ // Validate the token belongs to the specified server
390
+ if (invite.serverId !== serverId) {
391
+ throw new ServerInviteNotFoundError(token);
392
+ }
393
+ // Check expiration
394
+ if (invite.expiresAt && new Date() >= invite.expiresAt) {
395
+ throw new ServerInviteExpiredError();
396
+ }
397
+ // Check max uses
398
+ if (invite.maxUses !== undefined && invite.currentUses >= invite.maxUses) {
399
+ throw new ServerInviteExpiredError();
400
+ }
401
+ const server = this.assertServerExists(serverId);
402
+ // Skip if already a member
403
+ if (server.memberIds.includes(userId)) {
404
+ throw new MemberAlreadyInServerError(userId);
405
+ }
406
+ // Add user to server
407
+ server.memberIds.push(userId);
408
+ server.updatedAt = new Date();
409
+ // Distribute channel keys for all server channels to the new member
410
+ for (const channelId of server.channelIds) {
411
+ await this.channelService.addMemberToChannel(channelId, userId);
412
+ }
413
+ // Increment usage
414
+ invite.currentUses++;
415
+ // Persist changes to storage provider if available
416
+ if (this.serverCollection) {
417
+ await this.serverCollection.update(serverId, server);
418
+ }
419
+ if (this.serverInviteCollection) {
420
+ await this.serverInviteCollection.update(invite.token, invite);
421
+ }
422
+ }
423
+ // ─── Channel management within server ────────────────────────────────
424
+ /**
425
+ * Create a channel within a server.
426
+ * Validates caller has owner/admin role, creates the channel via ChannelService,
427
+ * sets serverId on the channel, adds channelId to server.channelIds,
428
+ * adds to specified category (or first category if not specified),
429
+ * and emits SERVER_CHANNEL_CREATED event.
430
+ *
431
+ * Requirements: 1.3, 1.4, 7.2
432
+ */
433
+ async createChannelInServer(serverId, userId, params, categoryId) {
434
+ const server = this.assertServerExists(serverId);
435
+ this.assertCanUpdate(server, userId);
436
+ // Create the channel via ChannelService
437
+ const channel = await this.channelService.createChannel(params.name, userId, params.visibility, params.topic ?? '');
438
+ // Link the channel to this server
439
+ channel.serverId = serverId;
440
+ // Add channelId to server's channelIds
441
+ server.channelIds.push(channel.id);
442
+ // Determine target category
443
+ let targetCategory;
444
+ if (categoryId) {
445
+ targetCategory = server.categories.find((c) => c.id === categoryId);
446
+ }
447
+ if (!targetCategory && server.categories.length > 0) {
448
+ targetCategory = server.categories[0];
449
+ }
450
+ const resolvedCategoryId = targetCategory?.id ?? '';
451
+ if (targetCategory) {
452
+ targetCategory.channelIds.push(channel.id);
453
+ }
454
+ server.updatedAt = new Date();
455
+ // Persist to storage provider if available
456
+ if (this.serverCollection) {
457
+ await this.serverCollection.update(serverId, server);
458
+ }
459
+ this.eventEmitter.emitServerChannelCreated(serverId, channel.id, channel.name, resolvedCategoryId);
460
+ return channel;
461
+ }
462
+ /**
463
+ * Remove a channel from a server.
464
+ * Validates caller has owner/admin role, deletes the channel via ChannelService,
465
+ * removes channelId from server.channelIds and from category.channelIds,
466
+ * and emits SERVER_CHANNEL_DELETED event.
467
+ *
468
+ * Requirements: 1.3, 1.4, 7.2
469
+ */
470
+ async removeChannelFromServer(serverId, channelId, userId) {
471
+ const server = this.assertServerExists(serverId);
472
+ this.assertCanUpdate(server, userId);
473
+ // Delete the channel via ChannelService
474
+ await this.channelService.deleteChannel(channelId, userId);
475
+ // Remove channelId from server's channelIds
476
+ server.channelIds = server.channelIds.filter((id) => id !== channelId);
477
+ // Remove from any category that contains it
478
+ for (const category of server.categories) {
479
+ category.channelIds = category.channelIds.filter((id) => id !== channelId);
480
+ }
481
+ server.updatedAt = new Date();
482
+ // Persist to storage provider if available
483
+ if (this.serverCollection) {
484
+ await this.serverCollection.update(serverId, server);
485
+ }
486
+ this.eventEmitter.emitServerChannelDeleted(serverId, channelId);
487
+ }
488
+ // ─── Accessors (for testing / internal use) ───────────────────────────
489
+ getServerById(serverId) {
490
+ return this.servers.get(serverId);
491
+ }
492
+ getInviteToken(token) {
493
+ return this.serverInviteTokens.get(token);
494
+ }
495
+ }
496
+ exports.ServerService = ServerService;
497
+ //# sourceMappingURL=serverService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serverService.js","sourceRoot":"","sources":["../../../../../../brightchain-lib/src/lib/services/communication/serverService.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,16 @@ export declare class MemberStore<TID extends PlatformID = Uint8Array> implements
25
25
  */
26
26
  private idToBytes;
27
27
  constructor(blockStore: IBlockStore, db?: IMemberStoreDb);
28
+ /**
29
+ * Pick the smallest supported block size that can hold `dataLength` bytes.
30
+ *
31
+ * Delegates to `BlockService.getBlockSizeForData` with the block store's
32
+ * supported sizes so that only sizes the store actually accepts are
33
+ * considered.
34
+ *
35
+ * @throws MemberError if no supported block size is large enough.
36
+ */
37
+ private blockSizeForData;
28
38
  /**
29
39
  * Attach (or replace) the DB reference after construction.
30
40
  * Called by the plugin after connect() so MemberStore can query
@@ -1 +1 @@
1
- {"version":3,"file":"memberStore.d.ts","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/services/memberStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,MAAM,EACN,UAAU,EACV,YAAY,EAEb,MAAM,4BAA4B,CAAC;AAmBpC,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACf,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,iCAAiC,EAEjC,gCAAgC,EAEjC,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAKrE;;GAEG;AACH,qBAAa,WAAW,CAAC,GAAG,SAAS,UAAU,GAAG,UAAU,CAC1D,YAAW,YAAY,CAAC,GAAG,CAAC;IAE5B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAc;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsC;IAClE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA2B;IACvD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;IAChD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,wEAAwE;IACxE,OAAO,CAAC,GAAG,CAAwB;IAEnC;;;;;;;;OAQG;IACH,OAAO,CAAC,SAAS;gBAoBL,UAAU,EAAE,WAAW,EAAE,EAAE,CAAC,EAAE,cAAc;IASxD;;;;OAIG;IACI,KAAK,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI;IAItC;;;;;;;;OAQG;YACW,yBAAyB;IA6DvC;;OAEG;IACU,YAAY,CACvB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC;QAAE,SAAS,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAAC,QAAQ,EAAE,YAAY,CAAA;KAAE,CAAC;IA0UxE;;;;;;;;OAQG;IACU,SAAS,CAAC,EAAE,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAwErD;;;;;;;;;OASG;IACU,qBAAqB,CAAC,EAAE,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA4CnE;;;;;;;;OAQG;IACU,gBAAgB,CAAC,EAAE,EAAE,GAAG,GAAG,OAAO,CAAC;QAC9C,aAAa,EAAE,gCAAgC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QAC5D,cAAc,EAAE,iCAAiC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;KAC/D,CAAC;IAoLF;;;;;;;;;;OAUG;IACU,YAAY,CACvB,EAAE,EAAE,GAAG,EACP,OAAO,EAAE,cAAc,CAAC,GAAG,CAAC,GAC3B,OAAO,CAAC,IAAI,CAAC;IAiLhB;;OAEG;IACU,YAAY,CAAC,EAAE,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAqCjD;;OAEG;IACU,WAAW,CAAC,KAAK,EAAE,iBAAiB,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA2CtE;;;;;;;OAOG;IACU,UAAU,CACrB,QAAQ,EAAE,oBAAoB,CAAC,GAAG,CAAC,GAClC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;IAmFnC;;;;;;OAMG;YACW,iBAAiB;IAsF/B;;OAEG;IAEU,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtD;;OAEG;IACU,gBAAgB,CAC3B,QAAQ,EAAE,cAAc,CAAC,GAAG,CAAC,EAAE,GAC9B,OAAO,CAAC,IAAI,CAAC;CAIjB"}
1
+ {"version":3,"file":"memberStore.d.ts","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/services/memberStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,MAAM,EACN,UAAU,EACV,YAAY,EAEb,MAAM,4BAA4B,CAAC;AAmBpC,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACf,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,iCAAiC,EAEjC,gCAAgC,EAEjC,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAKrE;;GAEG;AACH,qBAAa,WAAW,CAAC,GAAG,SAAS,UAAU,GAAG,UAAU,CAC1D,YAAW,YAAY,CAAC,GAAG,CAAC;IAE5B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAc;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsC;IAClE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA2B;IACvD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;IAChD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,wEAAwE;IACxE,OAAO,CAAC,GAAG,CAAwB;IAEnC;;;;;;;;OAQG;IACH,OAAO,CAAC,SAAS;gBAoBL,UAAU,EAAE,WAAW,EAAE,EAAE,CAAC,EAAE,cAAc;IASxD;;;;;;;;OAQG;IACH,OAAO,CAAC,gBAAgB;IAYxB;;;;OAIG;IACI,KAAK,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI;IAItC;;;;;;;;OAQG;YACW,yBAAyB;IA6DvC;;OAEG;IACU,YAAY,CACvB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC;QAAE,SAAS,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAAC,QAAQ,EAAE,YAAY,CAAA;KAAE,CAAC;IAyVxE;;;;;;;;OAQG;IACU,SAAS,CAAC,EAAE,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAwErD;;;;;;;;;OASG;IACU,qBAAqB,CAAC,EAAE,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA4CnE;;;;;;;;OAQG;IACU,gBAAgB,CAAC,EAAE,EAAE,GAAG,GAAG,OAAO,CAAC;QAC9C,aAAa,EAAE,gCAAgC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QAC5D,cAAc,EAAE,iCAAiC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;KAC/D,CAAC;IAoLF;;;;;;;;;;OAUG;IACU,YAAY,CACvB,EAAE,EAAE,GAAG,EACP,OAAO,EAAE,cAAc,CAAC,GAAG,CAAC,GAC3B,OAAO,CAAC,IAAI,CAAC;IAiLhB;;OAEG;IACU,YAAY,CAAC,EAAE,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAqCjD;;OAEG;IACU,WAAW,CAAC,KAAK,EAAE,iBAAiB,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA2CtE;;;;;;;OAOG;IACU,UAAU,CACrB,QAAQ,EAAE,oBAAoB,CAAC,GAAG,CAAC,GAClC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;IAmFnC;;;;;;OAMG;YACW,iBAAiB;IAsF/B;;OAEG;IAEU,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtD;;OAEG;IACU,gBAAgB,CAC3B,QAAQ,EAAE,cAAc,CAAC,GAAG,CAAC,EAAE,GAC9B,OAAO,CAAC,IAAI,CAAC;CAIjB"}