@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
@@ -5,11 +5,24 @@
5
5
  * Supports channel creation with visibility modes, join/leave, messaging,
6
6
  * search, invite token generation/redemption, mute/kick operations.
7
7
  *
8
- * Requirements: 10.3
8
+ * Uses epoch-aware key management via IKeyEpochState for forward secrecy.
9
+ * Each key rotation creates a new epoch. Messages record which epoch they
10
+ * were encrypted under. On member removal, all epoch keys are re-wrapped
11
+ * for remaining members only.
12
+ *
13
+ * When an IChatStorageProvider is injected, channels, channel messages, and
14
+ * invite tokens are also persisted to the provider's collections (write-through).
15
+ * Sync helper methods continue to read from the in-memory Maps so their
16
+ * signatures remain unchanged.
17
+ *
18
+ * Requirements: 10.3, 1.1, 1.2, 1.3, 1.4, 2.1, 2.2, 2.3, 2.4, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 9.1
9
19
  */
10
20
  import { ChannelVisibility, Permission } from '../../enumerations/communication';
11
- import { IChannel, IChannelUpdate, ICommunicationMessage, IInviteToken, IPaginatedResult } from '../../interfaces/communication';
21
+ import { IChannel, IChannelUpdate, IChatAttachmentInput, ICommunicationMessage, IInviteToken, IPaginatedResult } from '../../interfaces/communication';
22
+ import { IChatStorageProvider } from '../../interfaces/communication/chatStorageProvider';
23
+ import { IBlockContentStore } from '../../interfaces/communication/blockContentStore';
12
24
  import { ICommunicationEventEmitter } from '../../interfaces/events';
25
+ import { IKeyEpochState } from './keyEpochManager';
13
26
  import { MessageOperationsService } from './messageOperationsService';
14
27
  import { PermissionService } from './permissionService';
15
28
  export declare class ChannelNotFoundError extends Error {
@@ -64,32 +77,95 @@ export declare class ChannelService {
64
77
  private readonly channels;
65
78
  /** channelId → messages (ordered by createdAt ascending) */
66
79
  private readonly messages;
67
- /** channelId → raw symmetric key (Uint8Array) */
68
- private readonly symmetricKeys;
80
+ /** channelId → epoch-aware key state (raw keys + wrapped keys per epoch) */
81
+ private readonly keyEpochStates;
69
82
  /** token string → IInviteToken */
70
83
  private readonly inviteTokens;
71
84
  /** channel name (lowercase) → channelId for uniqueness */
72
85
  private readonly nameIndex;
86
+ /** Whether init() has already been called (idempotency guard). */
87
+ private initialized;
73
88
  private readonly permissionService;
74
89
  private readonly encryptKey;
75
90
  private readonly messageOps;
76
91
  private readonly eventEmitter;
77
92
  private readonly randomBytesProvider;
78
- constructor(permissionService: PermissionService, encryptKey?: ChannelKeyEncryptionHandler, messageOps?: MessageOperationsService, eventEmitter?: ICommunicationEventEmitter, randomBytesProvider?: (length: number) => Uint8Array);
93
+ /** Optional persistent collection for channels (write-through). */
94
+ private readonly channelCollection;
95
+ /** Optional persistent collection for channel messages (write-through). */
96
+ private readonly channelMessageCollection;
97
+ /** Optional persistent collection for invite tokens (write-through). */
98
+ private readonly inviteTokenCollection;
99
+ /** Optional block content store for storing message content as blocks. */
100
+ private readonly blockContentStore;
101
+ constructor(permissionService: PermissionService, encryptKey?: ChannelKeyEncryptionHandler, messageOps?: MessageOperationsService, eventEmitter?: ICommunicationEventEmitter, randomBytesProvider?: (length: number) => Uint8Array, storageProvider?: IChatStorageProvider, blockContentStore?: IBlockContentStore);
102
+ /**
103
+ * Load persisted channels, channel messages, and invite tokens back into
104
+ * in-memory Maps, rebuilding derived indexes, key epoch states, and
105
+ * permission registrations.
106
+ *
107
+ * Idempotent: only the first call performs rehydration. No-op when no
108
+ * storage provider was supplied at construction time.
109
+ *
110
+ * Requirements: 1.3, 1.5, 1.6, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 8.1, 8.2, 8.3, 9.1, 9.3, 9.4
111
+ */
112
+ init(): Promise<void>;
79
113
  private assertChannelExists;
80
114
  private assertIsMember;
81
115
  private assertPermission;
82
116
  private assertNotMuted;
83
117
  private generateSymmetricKey;
118
+ /**
119
+ * Encrypt a symmetric key for multiple members, returning a Map<memberId, wrappedKey>.
120
+ * Wraps key wrapping failures as KeyUnwrapError with context information.
121
+ *
122
+ * Requirements: 12.3
123
+ */
84
124
  private encryptKeyForMembers;
125
+ /**
126
+ * Create initial epoch state (epoch 0) for a new channel.
127
+ * Uses KeyEpochManager pattern: creates epoch 0 with wrapped keys for all members.
128
+ *
129
+ * Requirements: 1.3, 2.1
130
+ */
131
+ private createInitialEpochState;
132
+ /**
133
+ * Add a member to an existing epoch state: wrap ALL epoch keys for the new member.
134
+ * This gives the new member access to full message history.
135
+ *
136
+ * Requirements: 2.2, 6.1, 6.3
137
+ */
138
+ private addMemberToEpochState;
139
+ /**
140
+ * Rotate key: increment epoch, add new key, delete removed member from ALL epochs,
141
+ * re-wrap ALL epoch keys for remaining members.
142
+ *
143
+ * Requirements: 3.1, 3.2, 3.3, 3.4, 3.5, 3.6
144
+ */
145
+ private rotateEpochState;
146
+ /**
147
+ * Rotate the channel's symmetric key using epoch-aware key management.
148
+ * Generates a new key, increments epoch, re-wraps all epoch keys for remaining members,
149
+ * and removes the departed member from all epochs.
150
+ *
151
+ * Requirements: 3.1, 3.2, 3.3, 3.4, 3.5
152
+ */
85
153
  private rotateKey;
154
+ /**
155
+ * Assert that a key epoch exists in the epoch state for a given context.
156
+ * Throws KeyEpochNotFoundError if the epoch is not found.
157
+ *
158
+ * Requirements: 12.3
159
+ */
160
+ private assertEpochExists;
86
161
  private normalizeChannelName;
87
162
  /**
88
163
  * Create a new channel.
89
164
  * Generates a shared symmetric key and encrypts it for the creator.
90
165
  * The creator is assigned the OWNER role.
166
+ * Uses KeyEpochManager pattern to create initial epoch 0.
91
167
  *
92
- * Requirement 10.3: channel creation with visibility.
168
+ * Requirements: 10.3, 1.3, 2.1, 9.1
93
169
  */
94
170
  createChannel(name: string, creatorId: string, visibility: ChannelVisibility, topic?: string): Promise<IChannel>;
95
171
  /**
@@ -117,21 +193,51 @@ export declare class ChannelService {
117
193
  deleteChannel(channelId: string, requesterId: string): Promise<void>;
118
194
  /**
119
195
  * Join a public channel. Rejects invite-only channels.
196
+ * Wraps ALL epoch keys for the new member so they can read history.
120
197
  *
121
- * Requirement 10.3: add member, reject invite-only without invitation.
198
+ * Requirements: 10.3, 2.2
122
199
  */
123
200
  joinChannel(channelId: string, memberId: string): Promise<void>;
201
+ /**
202
+ * Remove a member from a channel (server-level operation).
203
+ * Bypasses permission checks — used by ServerService when a member is removed
204
+ * from a server so that key rotation is performed for each affected channel.
205
+ * Silently skips if the member is not in the channel.
206
+ *
207
+ * Requirements: 7.1, 7.2, 7.3
208
+ */
209
+ removeMemberFromChannel(channelId: string, memberId: string): Promise<void>;
210
+ /**
211
+ * Add a member to a channel (server-level operation).
212
+ * Bypasses visibility checks — used by ServerService when a member joins a server
213
+ * so that all epoch keys are wrapped for the new member across all server channels.
214
+ * Silently skips if the member is already in the channel.
215
+ *
216
+ * Requirements: 6.1, 6.2, 6.3
217
+ */
218
+ addMemberToChannel(channelId: string, memberId: string): Promise<void>;
124
219
  /**
125
220
  * Leave a channel voluntarily. Rotates the shared key.
221
+ *
222
+ * Requirements: 3.5
126
223
  */
127
224
  leaveChannel(channelId: string, memberId: string): Promise<void>;
128
225
  /**
129
226
  * Send a message to a channel.
130
- * Requirement 10.3: messaging with permission and mute checks.
227
+ * Encrypts content with the current epoch's CEK and records the keyEpoch.
228
+ * Optionally accepts attachments which are validated against platform limits.
229
+ *
230
+ * Requirements: 10.3, 1.1, 1.4, 9.1, 11.1, 11.2, 11.4, 11.5
131
231
  */
132
- sendMessage(channelId: string, senderId: string, content: string): Promise<ICommunicationMessage>;
232
+ sendMessage(channelId: string, senderId: string, content: string, attachments?: IChatAttachmentInput[]): Promise<ICommunicationMessage>;
133
233
  /**
134
234
  * Get messages in a channel with cursor-based pagination.
235
+ * Messages are returned with their keyEpoch so clients can decrypt
236
+ * using the appropriate epoch's CEK.
237
+ * Validates that each message's keyEpoch exists in the epoch state;
238
+ * throws KeyEpochNotFoundError if a message references a non-existent epoch.
239
+ *
240
+ * Requirements: 1.2, 12.3
135
241
  */
136
242
  getMessages(channelId: string, memberId: string, cursor?: string, limit?: number): Promise<IPaginatedResult<ICommunicationMessage>>;
137
243
  /**
@@ -147,8 +253,9 @@ export declare class ChannelService {
147
253
  createInvite(channelId: string, creatorId: string, maxUses?: number, expiresInMs?: number): Promise<IInviteToken>;
148
254
  /**
149
255
  * Redeem an invite token to join a channel.
256
+ * Wraps ALL epoch keys for the joining member.
150
257
  *
151
- * Requirement 10.3: validate expiry and usage limits.
258
+ * Requirements: 10.3, 2.2
152
259
  */
153
260
  redeemInvite(token: string, memberId: string): Promise<void>;
154
261
  /**
@@ -159,10 +266,10 @@ export declare class ChannelService {
159
266
  */
160
267
  muteMember(channelId: string, requesterId: string, targetId: string, durationMs: number): Promise<void>;
161
268
  /**
162
- * Kick a member from a channel. Rotates encryption keys.
269
+ * Kick a member from a channel. Rotates encryption keys using epoch-aware rotation.
163
270
  * Requires KICK_MEMBERS permission.
164
271
  *
165
- * Requirement 10.3: remove member and rotate keys.
272
+ * Requirements: 10.3, 3.1, 3.2, 3.3, 3.4
166
273
  */
167
274
  kickMember(channelId: string, requesterId: string, targetId: string): Promise<void>;
168
275
  /**
@@ -196,7 +303,15 @@ export declare class ChannelService {
196
303
  */
197
304
  removeReaction(channelId: string, messageId: string, memberId: string, reactionId: string): Promise<void>;
198
305
  getChannelById(channelId: string): IChannel | undefined;
306
+ /**
307
+ * Get the current epoch's raw symmetric key for a channel.
308
+ * Returns the key for the latest epoch (backward-compatible accessor).
309
+ */
199
310
  getSymmetricKey(channelId: string): Uint8Array | undefined;
311
+ /**
312
+ * Get the full epoch state for a channel (testing / internal use).
313
+ */
314
+ getKeyEpochState(channelId: string): IKeyEpochState<string> | undefined;
200
315
  getAllMessages(channelId: string): ICommunicationMessage[];
201
316
  getInviteToken(token: string): IInviteToken | undefined;
202
317
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"channelService.d.ts","sourceRoot":"","sources":["../../../../../../brightchain-lib/src/lib/services/communication/channelService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"channelService.d.ts","sourceRoot":"","sources":["../../../../../../brightchain-lib/src/lib/services/communication/channelService.ts"],"names":[],"mappings":"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"}