@brightchain/brightchain-api-lib 0.14.0 → 0.15.0

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 (242) hide show
  1. package/package.json +5 -5
  2. package/src/index.d.ts +3 -0
  3. package/src/index.d.ts.map +1 -1
  4. package/src/index.js +5 -0
  5. package/src/index.js.map +1 -1
  6. package/src/lib/application.d.ts +1 -0
  7. package/src/lib/application.d.ts.map +1 -1
  8. package/src/lib/application.js +23 -0
  9. package/src/lib/application.js.map +1 -1
  10. package/src/lib/auth/aclEnforcedAvailability.d.ts +57 -0
  11. package/src/lib/auth/aclEnforcedAvailability.d.ts.map +1 -0
  12. package/src/lib/auth/aclEnforcedAvailability.js +87 -0
  13. package/src/lib/auth/aclEnforcedAvailability.js.map +1 -0
  14. package/src/lib/auth/aclEnforcedBlockStore.d.ts +66 -0
  15. package/src/lib/auth/aclEnforcedBlockStore.d.ts.map +1 -0
  16. package/src/lib/auth/aclEnforcedBlockStore.js +83 -0
  17. package/src/lib/auth/aclEnforcedBlockStore.js.map +1 -0
  18. package/src/lib/auth/ecdsaNodeAuthenticator.d.ts +46 -0
  19. package/src/lib/auth/ecdsaNodeAuthenticator.d.ts.map +1 -0
  20. package/src/lib/auth/ecdsaNodeAuthenticator.js +110 -0
  21. package/src/lib/auth/ecdsaNodeAuthenticator.js.map +1 -0
  22. package/src/lib/auth/index.d.ts +7 -0
  23. package/src/lib/auth/index.d.ts.map +1 -0
  24. package/src/lib/auth/index.js +13 -0
  25. package/src/lib/auth/index.js.map +1 -0
  26. package/src/lib/auth/poolAclBootstrap.d.ts +36 -0
  27. package/src/lib/auth/poolAclBootstrap.d.ts.map +1 -0
  28. package/src/lib/auth/poolAclBootstrap.js +64 -0
  29. package/src/lib/auth/poolAclBootstrap.js.map +1 -0
  30. package/src/lib/auth/poolAclStore.d.ts +77 -0
  31. package/src/lib/auth/poolAclStore.d.ts.map +1 -0
  32. package/src/lib/auth/poolAclStore.js +189 -0
  33. package/src/lib/auth/poolAclStore.js.map +1 -0
  34. package/src/lib/auth/poolAclUpdater.d.ts +79 -0
  35. package/src/lib/auth/poolAclUpdater.d.ts.map +1 -0
  36. package/src/lib/auth/poolAclUpdater.js +144 -0
  37. package/src/lib/auth/poolAclUpdater.js.map +1 -0
  38. package/src/lib/availability/availabilityService.d.ts +2 -2
  39. package/src/lib/availability/availabilityService.d.ts.map +1 -1
  40. package/src/lib/availability/availabilityService.js +12 -5
  41. package/src/lib/availability/availabilityService.js.map +1 -1
  42. package/src/lib/availability/blockRegistry.d.ts +45 -3
  43. package/src/lib/availability/blockRegistry.d.ts.map +1 -1
  44. package/src/lib/availability/blockRegistry.js +123 -5
  45. package/src/lib/availability/blockRegistry.js.map +1 -1
  46. package/src/lib/availability/discoveryProtocol.d.ts +30 -1
  47. package/src/lib/availability/discoveryProtocol.d.ts.map +1 -1
  48. package/src/lib/availability/discoveryProtocol.js +76 -0
  49. package/src/lib/availability/discoveryProtocol.js.map +1 -1
  50. package/src/lib/availability/gossipService.d.ts +45 -6
  51. package/src/lib/availability/gossipService.d.ts.map +1 -1
  52. package/src/lib/availability/gossipService.js +177 -5
  53. package/src/lib/availability/gossipService.js.map +1 -1
  54. package/src/lib/availability/reconciliationService.d.ts +88 -1
  55. package/src/lib/availability/reconciliationService.d.ts.map +1 -1
  56. package/src/lib/availability/reconciliationService.js +246 -48
  57. package/src/lib/availability/reconciliationService.js.map +1 -1
  58. package/src/lib/blockFetch/blockFetcher.d.ts +100 -0
  59. package/src/lib/blockFetch/blockFetcher.d.ts.map +1 -0
  60. package/src/lib/blockFetch/blockFetcher.js +279 -0
  61. package/src/lib/blockFetch/blockFetcher.js.map +1 -0
  62. package/src/lib/blockFetch/fetchQueue.d.ts +88 -0
  63. package/src/lib/blockFetch/fetchQueue.d.ts.map +1 -0
  64. package/src/lib/blockFetch/fetchQueue.js +204 -0
  65. package/src/lib/blockFetch/fetchQueue.js.map +1 -0
  66. package/src/lib/blockFetch/httpBlockFetchTransport.d.ts +65 -0
  67. package/src/lib/blockFetch/httpBlockFetchTransport.d.ts.map +1 -0
  68. package/src/lib/blockFetch/httpBlockFetchTransport.js +104 -0
  69. package/src/lib/blockFetch/httpBlockFetchTransport.js.map +1 -0
  70. package/src/lib/blockFetch/index.d.ts +10 -0
  71. package/src/lib/blockFetch/index.d.ts.map +1 -0
  72. package/src/lib/blockFetch/index.js +13 -0
  73. package/src/lib/blockFetch/index.js.map +1 -0
  74. package/src/lib/controllers/api/brightpass.d.ts +72 -0
  75. package/src/lib/controllers/api/brightpass.d.ts.map +1 -0
  76. package/src/lib/controllers/api/brightpass.js +577 -0
  77. package/src/lib/controllers/api/brightpass.js.map +1 -0
  78. package/src/lib/controllers/api/channels.d.ts +122 -0
  79. package/src/lib/controllers/api/channels.d.ts.map +1 -0
  80. package/src/lib/controllers/api/channels.js +701 -0
  81. package/src/lib/controllers/api/channels.js.map +1 -0
  82. package/src/lib/controllers/api/conversations.d.ts +89 -0
  83. package/src/lib/controllers/api/conversations.d.ts.map +1 -0
  84. package/src/lib/controllers/api/conversations.js +259 -0
  85. package/src/lib/controllers/api/conversations.js.map +1 -0
  86. package/src/lib/controllers/api/emails.d.ts +122 -0
  87. package/src/lib/controllers/api/emails.d.ts.map +1 -0
  88. package/src/lib/controllers/api/emails.js +494 -0
  89. package/src/lib/controllers/api/emails.js.map +1 -0
  90. package/src/lib/controllers/api/explodingMessages.d.ts +79 -0
  91. package/src/lib/controllers/api/explodingMessages.d.ts.map +1 -0
  92. package/src/lib/controllers/api/explodingMessages.js +378 -0
  93. package/src/lib/controllers/api/explodingMessages.js.map +1 -0
  94. package/src/lib/controllers/api/groups.d.ts +94 -0
  95. package/src/lib/controllers/api/groups.d.ts.map +1 -0
  96. package/src/lib/controllers/api/groups.js +484 -0
  97. package/src/lib/controllers/api/groups.js.map +1 -0
  98. package/src/lib/controllers/api/index.d.ts +6 -0
  99. package/src/lib/controllers/api/index.d.ts.map +1 -1
  100. package/src/lib/controllers/api/index.js +6 -0
  101. package/src/lib/controllers/api/index.js.map +1 -1
  102. package/src/lib/controllers/api/messages.d.ts.map +1 -1
  103. package/src/lib/controllers/api/messages.js +2 -1
  104. package/src/lib/controllers/api/messages.js.map +1 -1
  105. package/src/lib/controllers/api/sync.d.ts +38 -2
  106. package/src/lib/controllers/api/sync.d.ts.map +1 -1
  107. package/src/lib/controllers/api/sync.js +89 -0
  108. package/src/lib/controllers/api/sync.js.map +1 -1
  109. package/src/lib/controllers/crypto/gitController.d.ts +70 -0
  110. package/src/lib/controllers/crypto/gitController.d.ts.map +1 -0
  111. package/src/lib/controllers/crypto/gitController.js +306 -0
  112. package/src/lib/controllers/crypto/gitController.js.map +1 -0
  113. package/src/lib/controllers/crypto/index.d.ts +3 -0
  114. package/src/lib/controllers/crypto/index.d.ts.map +1 -0
  115. package/src/lib/controllers/crypto/index.js +6 -0
  116. package/src/lib/controllers/crypto/index.js.map +1 -0
  117. package/src/lib/controllers/crypto/walletController.d.ts +64 -0
  118. package/src/lib/controllers/crypto/walletController.d.ts.map +1 -0
  119. package/src/lib/controllers/crypto/walletController.js +260 -0
  120. package/src/lib/controllers/crypto/walletController.js.map +1 -0
  121. package/src/lib/controllers/identity/deviceController.d.ts +96 -0
  122. package/src/lib/controllers/identity/deviceController.d.ts.map +1 -0
  123. package/src/lib/controllers/identity/deviceController.js +355 -0
  124. package/src/lib/controllers/identity/deviceController.js.map +1 -0
  125. package/src/lib/controllers/identity/directoryController.d.ts +75 -0
  126. package/src/lib/controllers/identity/directoryController.d.ts.map +1 -0
  127. package/src/lib/controllers/identity/directoryController.js +288 -0
  128. package/src/lib/controllers/identity/directoryController.js.map +1 -0
  129. package/src/lib/controllers/identity/identityProofController.d.ts +94 -0
  130. package/src/lib/controllers/identity/identityProofController.d.ts.map +1 -0
  131. package/src/lib/controllers/identity/identityProofController.js +454 -0
  132. package/src/lib/controllers/identity/identityProofController.js.map +1 -0
  133. package/src/lib/controllers/identity/index.d.ts +4 -0
  134. package/src/lib/controllers/identity/index.d.ts.map +1 -0
  135. package/src/lib/controllers/identity/index.js +7 -0
  136. package/src/lib/controllers/identity/index.js.map +1 -0
  137. package/src/lib/controllers/index.d.ts +2 -0
  138. package/src/lib/controllers/index.d.ts.map +1 -1
  139. package/src/lib/controllers/index.js +2 -0
  140. package/src/lib/controllers/index.js.map +1 -1
  141. package/src/lib/encryption/encryptedMetadataService.d.ts +87 -0
  142. package/src/lib/encryption/encryptedMetadataService.d.ts.map +1 -0
  143. package/src/lib/encryption/encryptedMetadataService.js +224 -0
  144. package/src/lib/encryption/encryptedMetadataService.js.map +1 -0
  145. package/src/lib/encryption/encryptionAwareReplication.d.ts +76 -0
  146. package/src/lib/encryption/encryptionAwareReplication.d.ts.map +1 -0
  147. package/src/lib/encryption/encryptionAwareReplication.js +116 -0
  148. package/src/lib/encryption/encryptionAwareReplication.js.map +1 -0
  149. package/src/lib/encryption/errors.d.ts +49 -0
  150. package/src/lib/encryption/errors.d.ts.map +1 -0
  151. package/src/lib/encryption/errors.js +80 -0
  152. package/src/lib/encryption/errors.js.map +1 -0
  153. package/src/lib/encryption/index.d.ts +6 -0
  154. package/src/lib/encryption/index.d.ts.map +1 -0
  155. package/src/lib/encryption/index.js +9 -0
  156. package/src/lib/encryption/index.js.map +1 -0
  157. package/src/lib/encryption/poolEncryptionService.d.ts +94 -0
  158. package/src/lib/encryption/poolEncryptionService.d.ts.map +1 -0
  159. package/src/lib/encryption/poolEncryptionService.js +252 -0
  160. package/src/lib/encryption/poolEncryptionService.js.map +1 -0
  161. package/src/lib/encryption/poolKeyManager.d.ts +82 -0
  162. package/src/lib/encryption/poolKeyManager.d.ts.map +1 -0
  163. package/src/lib/encryption/poolKeyManager.js +156 -0
  164. package/src/lib/encryption/poolKeyManager.js.map +1 -0
  165. package/src/lib/environment.d.ts +3 -0
  166. package/src/lib/environment.d.ts.map +1 -1
  167. package/src/lib/environment.js +5 -0
  168. package/src/lib/environment.js.map +1 -1
  169. package/src/lib/interfaces/environment.d.ts +7 -1
  170. package/src/lib/interfaces/environment.d.ts.map +1 -1
  171. package/src/lib/interfaces/index.d.ts +0 -1
  172. package/src/lib/interfaces/index.d.ts.map +1 -1
  173. package/src/lib/interfaces/requests/getBlockDataRequest.d.ts +12 -0
  174. package/src/lib/interfaces/requests/getBlockDataRequest.d.ts.map +1 -0
  175. package/src/lib/interfaces/{blockStore.js → requests/getBlockDataRequest.js} +1 -1
  176. package/src/lib/interfaces/requests/getBlockDataRequest.js.map +1 -0
  177. package/src/lib/interfaces/requests/index.d.ts +1 -0
  178. package/src/lib/interfaces/requests/index.d.ts.map +1 -1
  179. package/src/lib/routers/api.d.ts +54 -1
  180. package/src/lib/routers/api.d.ts.map +1 -1
  181. package/src/lib/routers/api.js +77 -0
  182. package/src/lib/routers/api.js.map +1 -1
  183. package/src/lib/services/blockStore.d.ts +5 -2
  184. package/src/lib/services/blockStore.d.ts.map +1 -1
  185. package/src/lib/services/blockStore.js +4 -0
  186. package/src/lib/services/blockStore.js.map +1 -1
  187. package/src/lib/services/brightpass/auditLogger.d.ts +77 -0
  188. package/src/lib/services/brightpass/auditLogger.d.ts.map +1 -0
  189. package/src/lib/services/brightpass/auditLogger.js +184 -0
  190. package/src/lib/services/brightpass/auditLogger.js.map +1 -0
  191. package/src/lib/services/brightpass/vaultEncryption.d.ts +82 -0
  192. package/src/lib/services/brightpass/vaultEncryption.d.ts.map +1 -0
  193. package/src/lib/services/brightpass/vaultEncryption.js +144 -0
  194. package/src/lib/services/brightpass/vaultEncryption.js.map +1 -0
  195. package/src/lib/services/brightpass.d.ts +294 -0
  196. package/src/lib/services/brightpass.d.ts.map +1 -0
  197. package/src/lib/services/brightpass.js +1260 -0
  198. package/src/lib/services/brightpass.js.map +1 -0
  199. package/src/lib/services/eventNotificationSystem.d.ts +69 -3
  200. package/src/lib/services/eventNotificationSystem.d.ts.map +1 -1
  201. package/src/lib/services/eventNotificationSystem.js +200 -0
  202. package/src/lib/services/eventNotificationSystem.js.map +1 -1
  203. package/src/lib/services/expirationScheduler.d.ts +90 -0
  204. package/src/lib/services/expirationScheduler.d.ts.map +1 -0
  205. package/src/lib/services/expirationScheduler.js +131 -0
  206. package/src/lib/services/expirationScheduler.js.map +1 -0
  207. package/src/lib/services/fecUsageExample.d.ts +2 -2
  208. package/src/lib/services/index.d.ts +2 -0
  209. package/src/lib/services/index.d.ts.map +1 -1
  210. package/src/lib/services/index.js +2 -0
  211. package/src/lib/services/index.js.map +1 -1
  212. package/src/lib/services/paginationService.d.ts +18 -0
  213. package/src/lib/services/paginationService.d.ts.map +1 -0
  214. package/src/lib/services/paginationService.js +32 -0
  215. package/src/lib/services/paginationService.js.map +1 -0
  216. package/src/lib/services/presenceService.d.ts +76 -0
  217. package/src/lib/services/presenceService.d.ts.map +1 -0
  218. package/src/lib/services/presenceService.js +143 -0
  219. package/src/lib/services/presenceService.js.map +1 -0
  220. package/src/lib/services/wireConversationPromotion.d.ts +23 -0
  221. package/src/lib/services/wireConversationPromotion.d.ts.map +1 -0
  222. package/src/lib/services/wireConversationPromotion.js +26 -0
  223. package/src/lib/services/wireConversationPromotion.js.map +1 -0
  224. package/src/lib/stores/availabilityAwareBlockStore.d.ts +115 -10
  225. package/src/lib/stores/availabilityAwareBlockStore.d.ts.map +1 -1
  226. package/src/lib/stores/availabilityAwareBlockStore.js +267 -23
  227. package/src/lib/stores/availabilityAwareBlockStore.js.map +1 -1
  228. package/src/lib/stores/diskBlockAsyncStore.d.ts +81 -2
  229. package/src/lib/stores/diskBlockAsyncStore.d.ts.map +1 -1
  230. package/src/lib/stores/diskBlockAsyncStore.js +297 -10
  231. package/src/lib/stores/diskBlockAsyncStore.js.map +1 -1
  232. package/src/lib/utils/communicationValidation.d.ts +44 -0
  233. package/src/lib/utils/communicationValidation.d.ts.map +1 -0
  234. package/src/lib/utils/communicationValidation.js +291 -0
  235. package/src/lib/utils/communicationValidation.js.map +1 -0
  236. package/src/lib/utils/emailValidation.d.ts +19 -0
  237. package/src/lib/utils/emailValidation.d.ts.map +1 -0
  238. package/src/lib/utils/emailValidation.js +232 -0
  239. package/src/lib/utils/emailValidation.js.map +1 -0
  240. package/src/lib/interfaces/blockStore.d.ts +0 -7
  241. package/src/lib/interfaces/blockStore.d.ts.map +0 -1
  242. package/src/lib/interfaces/blockStore.js.map +0 -1
@@ -0,0 +1,494 @@
1
+ "use strict";
2
+ /**
3
+ * EmailController — REST API for email operations.
4
+ *
5
+ * Routes:
6
+ * POST / — Send a new email
7
+ * GET /inbox — Query inbox (paginated, filtered)
8
+ * GET /inbox/unread-count — Get unread email count
9
+ * GET /:messageId — Get email metadata by ID
10
+ * GET /:messageId/content — Get full email content
11
+ * GET /:messageId/thread — Get email thread
12
+ * GET /:messageId/delivery-status — Get delivery status
13
+ * POST /:messageId/reply — Reply to an email
14
+ * POST /:messageId/forward — Forward an email
15
+ * POST /:messageId/read — Mark email as read
16
+ * DELETE /:messageId — Delete an email
17
+ *
18
+ * Requirements: 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 8.1, 9.1, 10.1, 11.1
19
+ */
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.EmailController = void 0;
22
+ const brightchain_lib_1 = require("@brightchain/brightchain-lib");
23
+ const emailErrorType_1 = require("@brightchain/brightchain-lib/lib/enumerations/messaging/emailErrorType");
24
+ const emailError_1 = require("@brightchain/brightchain-lib/lib/errors/messaging/emailError");
25
+ const node_express_suite_1 = require("@digitaldefiance/node-express-suite");
26
+ const emailValidation_1 = require("../../utils/emailValidation");
27
+ const errorResponse_1 = require("../../utils/errorResponse");
28
+ const base_1 = require("../base");
29
+ // ─── Map serialization helper ───────────────────────────────────────────────
30
+ function mapToRecord(map) {
31
+ const record = {};
32
+ for (const [key, value] of map) {
33
+ record[key] = value;
34
+ }
35
+ return record;
36
+ }
37
+ // ─── Controller ─────────────────────────────────────────────────────────────
38
+ class EmailController extends base_1.BaseController {
39
+ constructor(application) {
40
+ super(application);
41
+ this.messagePassingService = null;
42
+ }
43
+ /**
44
+ * Set the MessagePassingService instance for email operations.
45
+ */
46
+ setMessagePassingService(service) {
47
+ this.messagePassingService = service;
48
+ }
49
+ /**
50
+ * Get the MessagePassingService instance.
51
+ * @throws Error if the service has not been set.
52
+ */
53
+ getMessagePassingService() {
54
+ if (!this.messagePassingService) {
55
+ throw new Error('MessagePassingService not initialized');
56
+ }
57
+ return this.messagePassingService;
58
+ }
59
+ /**
60
+ * Extract memberId from request body or query params.
61
+ * Used for identifying the authenticated user (auth disabled in test mode).
62
+ */
63
+ getMemberId(req) {
64
+ const body = req.body;
65
+ if (body && typeof body === 'object') {
66
+ const bodyRecord = body;
67
+ if (typeof bodyRecord['memberId'] === 'string')
68
+ return bodyRecord['memberId'];
69
+ }
70
+ const query = req.query;
71
+ if (query && typeof query.memberId === 'string')
72
+ return query.memberId;
73
+ throw new Error('No authenticated user');
74
+ }
75
+ // ─── Route Definitions (Task 3.2) ──────────────────────────────────
76
+ initRouteDefinitions() {
77
+ const noAuth = {
78
+ useAuthentication: false,
79
+ useCryptoAuthentication: false,
80
+ };
81
+ this.routeDefinitions = [
82
+ // POST / — Send email
83
+ (0, node_express_suite_1.routeConfig)('post', '/', {
84
+ ...noAuth,
85
+ handlerKey: 'sendEmail',
86
+ validation: () => emailValidation_1.sendEmailValidation,
87
+ }),
88
+ // GET /inbox — Query inbox (BEFORE /:messageId to avoid param conflict)
89
+ (0, node_express_suite_1.routeConfig)('get', '/inbox', {
90
+ ...noAuth,
91
+ handlerKey: 'queryInbox',
92
+ validation: () => emailValidation_1.queryInboxValidation,
93
+ }),
94
+ // GET /inbox/unread-count (BEFORE /:messageId to avoid param conflict)
95
+ (0, node_express_suite_1.routeConfig)('get', '/inbox/unread-count', {
96
+ ...noAuth,
97
+ handlerKey: 'getUnreadCount',
98
+ validation: () => emailValidation_1.getUnreadCountValidation,
99
+ }),
100
+ // GET /:messageId — Get email metadata
101
+ (0, node_express_suite_1.routeConfig)('get', '/:messageId', {
102
+ ...noAuth,
103
+ handlerKey: 'getEmail',
104
+ validation: () => emailValidation_1.messageIdParamValidation,
105
+ }),
106
+ // GET /:messageId/content — Get full email content
107
+ (0, node_express_suite_1.routeConfig)('get', '/:messageId/content', {
108
+ ...noAuth,
109
+ handlerKey: 'getEmailContent',
110
+ validation: () => emailValidation_1.getEmailContentValidation,
111
+ }),
112
+ // GET /:messageId/thread — Get email thread
113
+ (0, node_express_suite_1.routeConfig)('get', '/:messageId/thread', {
114
+ ...noAuth,
115
+ handlerKey: 'getEmailThread',
116
+ validation: () => emailValidation_1.getEmailThreadValidation,
117
+ }),
118
+ // GET /:messageId/delivery-status — Get delivery status
119
+ (0, node_express_suite_1.routeConfig)('get', '/:messageId/delivery-status', {
120
+ ...noAuth,
121
+ handlerKey: 'getDeliveryStatus',
122
+ validation: () => emailValidation_1.getDeliveryStatusValidation,
123
+ }),
124
+ // POST /:messageId/reply — Reply to email
125
+ (0, node_express_suite_1.routeConfig)('post', '/:messageId/reply', {
126
+ ...noAuth,
127
+ handlerKey: 'replyToEmail',
128
+ validation: () => emailValidation_1.replyEmailValidation,
129
+ }),
130
+ // POST /:messageId/forward — Forward email
131
+ (0, node_express_suite_1.routeConfig)('post', '/:messageId/forward', {
132
+ ...noAuth,
133
+ handlerKey: 'forwardEmail',
134
+ validation: () => emailValidation_1.forwardEmailValidation,
135
+ }),
136
+ // POST /:messageId/read — Mark as read
137
+ (0, node_express_suite_1.routeConfig)('post', '/:messageId/read', {
138
+ ...noAuth,
139
+ handlerKey: 'markAsRead',
140
+ validation: () => emailValidation_1.markAsReadValidation,
141
+ }),
142
+ // DELETE /:messageId — Delete email
143
+ (0, node_express_suite_1.routeConfig)('delete', '/:messageId', {
144
+ ...noAuth,
145
+ handlerKey: 'deleteEmail',
146
+ validation: () => emailValidation_1.deleteEmailValidation,
147
+ }),
148
+ ];
149
+ this.handlers = {
150
+ sendEmail: this.handleSendEmail.bind(this),
151
+ queryInbox: this.handleQueryInbox.bind(this),
152
+ getUnreadCount: this.handleGetUnreadCount.bind(this),
153
+ getEmail: this.handleGetEmail.bind(this),
154
+ getEmailContent: this.handleGetEmailContent.bind(this),
155
+ getEmailThread: this.handleGetEmailThread.bind(this),
156
+ getDeliveryStatus: this.handleGetDeliveryStatus.bind(this),
157
+ replyToEmail: this.handleReplyToEmail.bind(this),
158
+ forwardEmail: this.handleForwardEmail.bind(this),
159
+ markAsRead: this.handleMarkAsRead.bind(this),
160
+ deleteEmail: this.handleDeleteEmail.bind(this),
161
+ };
162
+ }
163
+ // ─── Handler Methods (Task 3.3) ────────────────────────────────────
164
+ /**
165
+ * POST /api/emails
166
+ * Send a new email.
167
+ */
168
+ async handleSendEmail(req) {
169
+ try {
170
+ const { from, to, cc, bcc, subject, textBody, htmlBody } = req.body;
171
+ const service = this.getMessagePassingService();
172
+ const result = await service.sendEmail({
173
+ from: (0, brightchain_lib_1.createMailbox)(from.localPart, from.domain, from.displayName),
174
+ to: to?.map((m) => (0, brightchain_lib_1.createMailbox)(m.localPart, m.domain, m.displayName)),
175
+ cc: cc?.map((m) => (0, brightchain_lib_1.createMailbox)(m.localPart, m.domain, m.displayName)),
176
+ bcc: bcc?.map((m) => (0, brightchain_lib_1.createMailbox)(m.localPart, m.domain, m.displayName)),
177
+ subject,
178
+ textBody,
179
+ htmlBody,
180
+ });
181
+ return {
182
+ statusCode: 201,
183
+ response: {
184
+ status: 'success',
185
+ data: {
186
+ ...result,
187
+ deliveryStatus: mapToRecord(result.deliveryStatus),
188
+ },
189
+ },
190
+ };
191
+ }
192
+ catch (error) {
193
+ return this.mapServiceError(error);
194
+ }
195
+ }
196
+ /**
197
+ * GET /api/emails/inbox
198
+ * Query inbox with filters, sorting, and pagination.
199
+ */
200
+ async handleQueryInbox(req) {
201
+ try {
202
+ const memberId = this.getMemberId(req);
203
+ const queryParams = req.query;
204
+ const inboxQuery = {};
205
+ if (queryParams.readStatus) {
206
+ inboxQuery.readStatus = queryParams.readStatus;
207
+ }
208
+ if (queryParams.senderAddress) {
209
+ inboxQuery.senderAddress = queryParams.senderAddress;
210
+ }
211
+ if (queryParams.dateFrom) {
212
+ inboxQuery.dateFrom = new Date(queryParams.dateFrom);
213
+ }
214
+ if (queryParams.dateTo) {
215
+ inboxQuery.dateTo = new Date(queryParams.dateTo);
216
+ }
217
+ if (queryParams.hasAttachments !== undefined) {
218
+ inboxQuery.hasAttachments = queryParams.hasAttachments === 'true';
219
+ }
220
+ if (queryParams.subjectContains) {
221
+ inboxQuery.subjectContains = queryParams.subjectContains;
222
+ }
223
+ if (queryParams.searchText) {
224
+ inboxQuery.searchText = queryParams.searchText;
225
+ }
226
+ if (queryParams.sortBy) {
227
+ inboxQuery.sortBy = queryParams.sortBy;
228
+ }
229
+ if (queryParams.sortDirection) {
230
+ inboxQuery.sortDirection = queryParams.sortDirection;
231
+ }
232
+ if (queryParams.page) {
233
+ inboxQuery.page = parseInt(queryParams.page, 10);
234
+ }
235
+ if (queryParams.pageSize) {
236
+ inboxQuery.pageSize = parseInt(queryParams.pageSize, 10);
237
+ }
238
+ const service = this.getMessagePassingService();
239
+ const result = await service.queryInbox(memberId, inboxQuery);
240
+ return {
241
+ statusCode: 200,
242
+ response: {
243
+ status: 'success',
244
+ data: result,
245
+ },
246
+ };
247
+ }
248
+ catch (error) {
249
+ return this.mapServiceError(error);
250
+ }
251
+ }
252
+ /**
253
+ * GET /api/emails/inbox/unread-count
254
+ * Get unread email count for a user.
255
+ */
256
+ async handleGetUnreadCount(req) {
257
+ try {
258
+ const memberId = this.getMemberId(req);
259
+ const service = this.getMessagePassingService();
260
+ const unreadCount = await service.getUnreadEmailCount(memberId);
261
+ return {
262
+ statusCode: 200,
263
+ response: {
264
+ status: 'success',
265
+ data: { unreadCount },
266
+ },
267
+ };
268
+ }
269
+ catch (error) {
270
+ return this.mapServiceError(error);
271
+ }
272
+ }
273
+ /**
274
+ * GET /api/emails/:messageId
275
+ * Get email metadata by ID.
276
+ */
277
+ async handleGetEmail(req) {
278
+ try {
279
+ const { messageId } = req.params;
280
+ const service = this.getMessagePassingService();
281
+ const email = await service.getEmail(messageId);
282
+ if (!email) {
283
+ return (0, errorResponse_1.notFoundError)('Email', messageId);
284
+ }
285
+ return {
286
+ statusCode: 200,
287
+ response: {
288
+ status: 'success',
289
+ data: email,
290
+ },
291
+ };
292
+ }
293
+ catch (error) {
294
+ return this.mapServiceError(error);
295
+ }
296
+ }
297
+ /**
298
+ * GET /api/emails/:messageId/content
299
+ * Get full email content including body and attachments.
300
+ */
301
+ async handleGetEmailContent(req) {
302
+ try {
303
+ const { messageId } = req.params;
304
+ const service = this.getMessagePassingService();
305
+ const content = await service.getEmailContent(messageId);
306
+ return {
307
+ statusCode: 200,
308
+ response: {
309
+ status: 'success',
310
+ data: content,
311
+ },
312
+ };
313
+ }
314
+ catch (error) {
315
+ return this.mapServiceError(error);
316
+ }
317
+ }
318
+ /**
319
+ * GET /api/emails/:messageId/thread
320
+ * Get all emails in a thread.
321
+ */
322
+ async handleGetEmailThread(req) {
323
+ try {
324
+ const { messageId } = req.params;
325
+ const service = this.getMessagePassingService();
326
+ const thread = await service.getEmailThread(messageId);
327
+ return {
328
+ statusCode: 200,
329
+ response: {
330
+ status: 'success',
331
+ data: thread,
332
+ },
333
+ };
334
+ }
335
+ catch (error) {
336
+ return this.mapServiceError(error);
337
+ }
338
+ }
339
+ /**
340
+ * GET /api/emails/:messageId/delivery-status
341
+ * Get delivery status for all recipients.
342
+ */
343
+ async handleGetDeliveryStatus(req) {
344
+ try {
345
+ const { messageId } = req.params;
346
+ const service = this.getMessagePassingService();
347
+ const statusMap = await service.getEmailDeliveryStatus(messageId);
348
+ return {
349
+ statusCode: 200,
350
+ response: {
351
+ status: 'success',
352
+ data: mapToRecord(statusMap),
353
+ },
354
+ };
355
+ }
356
+ catch (error) {
357
+ return this.mapServiceError(error);
358
+ }
359
+ }
360
+ /**
361
+ * POST /api/emails/:messageId/reply
362
+ * Reply to an existing email.
363
+ */
364
+ async handleReplyToEmail(req) {
365
+ try {
366
+ const { messageId } = req.params;
367
+ const { from, replyAll, subject, textBody, htmlBody } = req.body;
368
+ const service = this.getMessagePassingService();
369
+ const result = await service.createEmailReply(messageId, {
370
+ from: (0, brightchain_lib_1.createMailbox)(from.localPart, from.domain, from.displayName),
371
+ replyAll,
372
+ subject,
373
+ textBody,
374
+ htmlBody,
375
+ });
376
+ return {
377
+ statusCode: 201,
378
+ response: {
379
+ status: 'success',
380
+ data: {
381
+ ...result,
382
+ deliveryStatus: mapToRecord(result.deliveryStatus),
383
+ },
384
+ },
385
+ };
386
+ }
387
+ catch (error) {
388
+ return this.mapServiceError(error);
389
+ }
390
+ }
391
+ /**
392
+ * POST /api/emails/:messageId/forward
393
+ * Forward an email to new recipients.
394
+ */
395
+ async handleForwardEmail(req) {
396
+ try {
397
+ const { messageId } = req.params;
398
+ const { forwardTo } = req.body;
399
+ const mailboxes = forwardTo.map((m) => (0, brightchain_lib_1.createMailbox)(m.localPart, m.domain, m.displayName));
400
+ const service = this.getMessagePassingService();
401
+ const result = await service.forwardEmail(messageId, mailboxes);
402
+ return {
403
+ statusCode: 201,
404
+ response: {
405
+ status: 'success',
406
+ data: {
407
+ ...result,
408
+ deliveryStatus: mapToRecord(result.deliveryStatus),
409
+ },
410
+ },
411
+ };
412
+ }
413
+ catch (error) {
414
+ return this.mapServiceError(error);
415
+ }
416
+ }
417
+ /**
418
+ * POST /api/emails/:messageId/read
419
+ * Mark an email as read.
420
+ */
421
+ async handleMarkAsRead(req) {
422
+ try {
423
+ const { messageId } = req.params;
424
+ const memberId = this.getMemberId(req);
425
+ const service = this.getMessagePassingService();
426
+ await service.markEmailAsRead(messageId, memberId);
427
+ return {
428
+ statusCode: 200,
429
+ response: {
430
+ status: 'success',
431
+ data: { markedAsRead: true },
432
+ },
433
+ };
434
+ }
435
+ catch (error) {
436
+ return this.mapServiceError(error);
437
+ }
438
+ }
439
+ /**
440
+ * DELETE /api/emails/:messageId
441
+ * Delete an email.
442
+ */
443
+ async handleDeleteEmail(req) {
444
+ try {
445
+ const { messageId } = req.params;
446
+ const service = this.getMessagePassingService();
447
+ await service.deleteEmail(messageId);
448
+ return {
449
+ statusCode: 200,
450
+ response: {
451
+ status: 'success',
452
+ data: { deleted: true },
453
+ },
454
+ };
455
+ }
456
+ catch (error) {
457
+ return this.mapServiceError(error);
458
+ }
459
+ }
460
+ // ─── Error Mapping (Task 3.4) ──────────────────────────────────────
461
+ /**
462
+ * Map service-layer errors to appropriate HTTP status codes.
463
+ * Follows the same pattern as GroupController.mapServiceError and
464
+ * ChannelController.mapServiceError.
465
+ */
466
+ mapServiceError(error) {
467
+ if ((0, emailError_1.isEmailError)(error)) {
468
+ const emailError = error;
469
+ switch (emailError.errorType) {
470
+ case emailErrorType_1.EmailErrorType.MESSAGE_NOT_FOUND:
471
+ return (0, errorResponse_1.notFoundError)('Email', 'unknown');
472
+ case emailErrorType_1.EmailErrorType.INVALID_MAILBOX:
473
+ case emailErrorType_1.EmailErrorType.INVALID_HEADER_NAME:
474
+ case emailErrorType_1.EmailErrorType.INVALID_MESSAGE_ID:
475
+ case emailErrorType_1.EmailErrorType.INVALID_DATE:
476
+ case emailErrorType_1.EmailErrorType.INVALID_CONTENT_TYPE:
477
+ case emailErrorType_1.EmailErrorType.INVALID_BOUNDARY:
478
+ case emailErrorType_1.EmailErrorType.MISSING_REQUIRED_HEADER:
479
+ case emailErrorType_1.EmailErrorType.NO_RECIPIENTS:
480
+ case emailErrorType_1.EmailErrorType.ATTACHMENT_TOO_LARGE:
481
+ case emailErrorType_1.EmailErrorType.MESSAGE_TOO_LARGE:
482
+ return (0, errorResponse_1.validationError)(emailError.message);
483
+ default:
484
+ return (0, errorResponse_1.internalError)(emailError);
485
+ }
486
+ }
487
+ if (error instanceof Error) {
488
+ return (0, errorResponse_1.internalError)(error);
489
+ }
490
+ return (0, errorResponse_1.handleError)(error);
491
+ }
492
+ }
493
+ exports.EmailController = EmailController;
494
+ //# sourceMappingURL=emails.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emails.js","sourceRoot":"","sources":["../../../../../../brightchain-api-lib/src/lib/controllers/api/emails.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * ExplodingMessagesController — REST API for self-destructing message operations.
3
+ *
4
+ * Routes:
5
+ * PUT /:id/set-expiration — Set expiration on a message
6
+ * POST /:id/mark-read — Mark a message as read by a member
7
+ * GET /expired — List expired messages
8
+ * POST /:id/explode — Force-explode a message
9
+ * GET /:id/expiration-info — Get expiration status of a message
10
+ *
11
+ * Requirements: 8.1-8.9
12
+ */
13
+ import { ICommunicationMessage } from '@brightchain/brightchain-lib/lib/interfaces/communication';
14
+ import type { IExplodeMessageResponse, IGetExpirationInfoResponse, IGetExpiredResponse, IMarkReadResponse, ISetExpirationResponse } from '@brightchain/brightchain-lib/lib/interfaces/responses/explodingMessageResponses';
15
+ import { PlatformID } from '@digitaldefiance/ecies-lib';
16
+ import { CoreLanguageCode } from '@digitaldefiance/i18n-lib';
17
+ import { ApiErrorResponse, ApiRequestHandler, TypedHandlers } from '@digitaldefiance/node-express-suite';
18
+ import { IBrightChainApplication } from '../../interfaces/application';
19
+ import { DefaultBackendIdType } from '../../shared-types';
20
+ import { BaseController } from '../base';
21
+ type ExplodingMessageApiResponse = ISetExpirationResponse | IMarkReadResponse | IGetExpiredResponse | IExplodeMessageResponse | IGetExpirationInfoResponse | ApiErrorResponse;
22
+ interface ExplodingMessageHandlers extends TypedHandlers {
23
+ setExpiration: ApiRequestHandler<ISetExpirationResponse | ApiErrorResponse>;
24
+ markRead: ApiRequestHandler<IMarkReadResponse | ApiErrorResponse>;
25
+ getExpired: ApiRequestHandler<IGetExpiredResponse | ApiErrorResponse>;
26
+ explodeMessage: ApiRequestHandler<IExplodeMessageResponse | ApiErrorResponse>;
27
+ getExpirationInfo: ApiRequestHandler<IGetExpirationInfoResponse | ApiErrorResponse>;
28
+ }
29
+ /**
30
+ * Controller for exploding (self-destructing) message operations.
31
+ *
32
+ * Delegates to {@link ExplodingMessageService} in brightchain-lib for
33
+ * core expiration logic including time-based and read-count-based
34
+ * message self-destruction.
35
+ *
36
+ * @requirements 8.1, 8.2, 8.3, 8.4, 8.5, 8.7, 8.8
37
+ */
38
+ export declare class ExplodingMessagesController<TID extends PlatformID = DefaultBackendIdType> extends BaseController<TID, ExplodingMessageApiResponse, ExplodingMessageHandlers, CoreLanguageCode> {
39
+ private messageStore;
40
+ constructor(application: IBrightChainApplication<TID>);
41
+ /**
42
+ * Inject a message into the store (for integration with message passing).
43
+ */
44
+ registerMessage(message: ICommunicationMessage): void;
45
+ protected initRouteDefinitions(): void;
46
+ /**
47
+ * PUT /:id/set-expiration — Set expiration on a message.
48
+ *
49
+ * @requirements 8.1, 8.2, 8.5
50
+ */
51
+ private handleSetExpiration;
52
+ /**
53
+ * POST /:id/mark-read — Mark a message as read.
54
+ *
55
+ * @requirements 8.2, 8.3, 8.8
56
+ */
57
+ private handleMarkRead;
58
+ /**
59
+ * GET /expired — List all expired messages.
60
+ *
61
+ * @requirements 8.4, 8.8
62
+ */
63
+ private handleGetExpired;
64
+ /**
65
+ * POST /:id/explode — Force-explode a message.
66
+ *
67
+ * @requirements 8.4, 8.7
68
+ */
69
+ private handleExplodeMessage;
70
+ /**
71
+ * GET /:id/expiration-info — Get expiration status.
72
+ *
73
+ * @requirements 8.8
74
+ */
75
+ private handleGetExpirationInfo;
76
+ private mapExplodingError;
77
+ }
78
+ export {};
79
+ //# sourceMappingURL=explodingMessages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explodingMessages.d.ts","sourceRoot":"","sources":["../../../../../../brightchain-api-lib/src/lib/controllers/api/explodingMessages.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,2DAA2D,CAAC;AAClG,OAAO,KAAK,EACV,uBAAuB,EACvB,0BAA0B,EAC1B,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,EACvB,MAAM,iFAAiF,CAAC;AAMzF,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EAEd,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAM1D,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAIzC,KAAK,2BAA2B,GAC5B,sBAAsB,GACtB,iBAAiB,GACjB,mBAAmB,GACnB,uBAAuB,GACvB,0BAA0B,GAC1B,gBAAgB,CAAC;AAIrB,UAAU,wBAAyB,SAAQ,aAAa;IACtD,aAAa,EAAE,iBAAiB,CAAC,sBAAsB,GAAG,gBAAgB,CAAC,CAAC;IAC5E,QAAQ,EAAE,iBAAiB,CAAC,iBAAiB,GAAG,gBAAgB,CAAC,CAAC;IAClE,UAAU,EAAE,iBAAiB,CAAC,mBAAmB,GAAG,gBAAgB,CAAC,CAAC;IACtE,cAAc,EAAE,iBAAiB,CAAC,uBAAuB,GAAG,gBAAgB,CAAC,CAAC;IAC9E,iBAAiB,EAAE,iBAAiB,CAClC,0BAA0B,GAAG,gBAAgB,CAC9C,CAAC;CACH;AAkDD;;;;;;;;GAQG;AACH,qBAAa,2BAA2B,CACtC,GAAG,SAAS,UAAU,GAAG,oBAAoB,CAC7C,SAAQ,cAAc,CACtB,GAAG,EACH,2BAA2B,EAC3B,wBAAwB,EACxB,gBAAgB,CACjB;IACC,OAAO,CAAC,YAAY,CAA+B;gBAEvC,WAAW,EAAE,uBAAuB,CAAC,GAAG,CAAC;IAIrD;;OAEG;IACI,eAAe,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI;IAM5D,SAAS,CAAC,oBAAoB,IAAI,IAAI;IAwHtC;;;;OAIG;YACW,mBAAmB;IAyCjC;;;;OAIG;YACW,cAAc;IA6C5B;;;;OAIG;YACW,gBAAgB;IA2B9B;;;;OAIG;YACW,oBAAoB;IAmClC;;;;OAIG;YACW,uBAAuB;IAwCrC,OAAO,CAAC,iBAAiB;CAwB1B"}