@brightchain/brightchain-api-lib 0.24.0 → 0.25.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 (146) hide show
  1. package/package.json +3 -3
  2. package/src/lib/application.d.ts.map +1 -1
  3. package/src/lib/application.js +33 -11
  4. package/src/lib/application.js.map +1 -1
  5. package/src/lib/auth/aclDocumentStore.d.ts +90 -0
  6. package/src/lib/auth/aclDocumentStore.d.ts.map +1 -0
  7. package/src/lib/auth/aclDocumentStore.js +155 -0
  8. package/src/lib/auth/aclDocumentStore.js.map +1 -0
  9. package/src/lib/auth/index.d.ts +4 -0
  10. package/src/lib/auth/index.d.ts.map +1 -1
  11. package/src/lib/auth/index.js +4 -0
  12. package/src/lib/auth/index.js.map +1 -1
  13. package/src/lib/auth/writeAclApiRouter.d.ts +32 -0
  14. package/src/lib/auth/writeAclApiRouter.d.ts.map +1 -0
  15. package/src/lib/auth/writeAclApiRouter.js +348 -0
  16. package/src/lib/auth/writeAclApiRouter.js.map +1 -0
  17. package/src/lib/auth/writeAclAuditLogger.d.ts +94 -0
  18. package/src/lib/auth/writeAclAuditLogger.d.ts.map +1 -0
  19. package/src/lib/auth/writeAclAuditLogger.js +143 -0
  20. package/src/lib/auth/writeAclAuditLogger.js.map +1 -0
  21. package/src/lib/auth/writeProofMiddleware.d.ts +39 -0
  22. package/src/lib/auth/writeProofMiddleware.d.ts.map +1 -0
  23. package/src/lib/auth/writeProofMiddleware.js +56 -0
  24. package/src/lib/auth/writeProofMiddleware.js.map +1 -0
  25. package/src/lib/availability/aclDocumentSyncHandler.d.ts +39 -0
  26. package/src/lib/availability/aclDocumentSyncHandler.d.ts.map +1 -0
  27. package/src/lib/availability/aclDocumentSyncHandler.js +81 -0
  28. package/src/lib/availability/aclDocumentSyncHandler.js.map +1 -0
  29. package/src/lib/availability/gossipService.d.ts +4 -1
  30. package/src/lib/availability/gossipService.d.ts.map +1 -1
  31. package/src/lib/availability/gossipService.js +15 -1
  32. package/src/lib/availability/gossipService.js.map +1 -1
  33. package/src/lib/availability/headUpdateSyncHandler.d.ts +32 -0
  34. package/src/lib/availability/headUpdateSyncHandler.d.ts.map +1 -0
  35. package/src/lib/availability/headUpdateSyncHandler.js +78 -0
  36. package/src/lib/availability/headUpdateSyncHandler.js.map +1 -0
  37. package/src/lib/availability/index.d.ts +2 -0
  38. package/src/lib/availability/index.d.ts.map +1 -1
  39. package/src/lib/availability/index.js +2 -0
  40. package/src/lib/availability/index.js.map +1 -1
  41. package/src/lib/constants.d.ts.map +1 -1
  42. package/src/lib/constants.js +2 -0
  43. package/src/lib/constants.js.map +1 -1
  44. package/src/lib/controllers/api/brighthub/connectionController.d.ts +6 -0
  45. package/src/lib/controllers/api/brighthub/connectionController.d.ts.map +1 -1
  46. package/src/lib/controllers/api/brighthub/connectionController.js +158 -11
  47. package/src/lib/controllers/api/brighthub/connectionController.js.map +1 -1
  48. package/src/lib/controllers/api/brighthub/messagingController.d.ts +6 -0
  49. package/src/lib/controllers/api/brighthub/messagingController.d.ts.map +1 -1
  50. package/src/lib/controllers/api/brighthub/messagingController.js +190 -58
  51. package/src/lib/controllers/api/brighthub/messagingController.js.map +1 -1
  52. package/src/lib/controllers/api/brighthub/postController.d.ts +12 -3
  53. package/src/lib/controllers/api/brighthub/postController.d.ts.map +1 -1
  54. package/src/lib/controllers/api/brighthub/postController.js +60 -0
  55. package/src/lib/controllers/api/brighthub/postController.js.map +1 -1
  56. package/src/lib/controllers/api/brighthub/timelineController.d.ts +19 -0
  57. package/src/lib/controllers/api/brighthub/timelineController.d.ts.map +1 -1
  58. package/src/lib/controllers/api/brighthub/timelineController.js +133 -0
  59. package/src/lib/controllers/api/brighthub/timelineController.js.map +1 -1
  60. package/src/lib/controllers/api/emails.d.ts +4 -1
  61. package/src/lib/controllers/api/emails.d.ts.map +1 -1
  62. package/src/lib/controllers/api/emails.js +28 -1
  63. package/src/lib/controllers/api/emails.js.map +1 -1
  64. package/src/lib/controllers/api/user.d.ts.map +1 -1
  65. package/src/lib/controllers/api/user.js +10 -0
  66. package/src/lib/controllers/api/user.js.map +1 -1
  67. package/src/lib/databaseInit.d.ts +1 -1
  68. package/src/lib/databaseInit.d.ts.map +1 -1
  69. package/src/lib/databaseInit.js +14 -4
  70. package/src/lib/databaseInit.js.map +1 -1
  71. package/src/lib/environment.d.ts +29 -3
  72. package/src/lib/environment.d.ts.map +1 -1
  73. package/src/lib/environment.js +97 -6
  74. package/src/lib/environment.js.map +1 -1
  75. package/src/lib/factories/blockStoreFactory.d.ts.map +1 -1
  76. package/src/lib/factories/blockStoreFactory.js +4 -1
  77. package/src/lib/factories/blockStoreFactory.js.map +1 -1
  78. package/src/lib/interfaces/environment.d.ts +45 -2
  79. package/src/lib/interfaces/environment.d.ts.map +1 -1
  80. package/src/lib/interfaces/responses/brighthub/api-post-response.d.ts +8 -1
  81. package/src/lib/interfaces/responses/brighthub/api-post-response.d.ts.map +1 -1
  82. package/src/lib/routers/api.d.ts +18 -1
  83. package/src/lib/routers/api.d.ts.map +1 -1
  84. package/src/lib/routers/api.js +24 -1
  85. package/src/lib/routers/api.js.map +1 -1
  86. package/src/lib/routers/app.d.ts.map +1 -1
  87. package/src/lib/routers/app.js +5 -2
  88. package/src/lib/routers/app.js.map +1 -1
  89. package/src/lib/services/auth.d.ts.map +1 -1
  90. package/src/lib/services/auth.js +37 -3
  91. package/src/lib/services/auth.js.map +1 -1
  92. package/src/lib/services/blockStore.d.ts +8 -1
  93. package/src/lib/services/blockStore.d.ts.map +1 -1
  94. package/src/lib/services/blockStore.js +19 -7
  95. package/src/lib/services/blockStore.js.map +1 -1
  96. package/src/lib/services/brightChainBackupCodeService.d.ts +42 -39
  97. package/src/lib/services/brightChainBackupCodeService.d.ts.map +1 -1
  98. package/src/lib/services/brightChainBackupCodeService.js +86 -61
  99. package/src/lib/services/brightChainBackupCodeService.js.map +1 -1
  100. package/src/lib/services/brighthub/collectionAdapter.d.ts +81 -0
  101. package/src/lib/services/brighthub/collectionAdapter.d.ts.map +1 -0
  102. package/src/lib/services/brighthub/collectionAdapter.js +127 -0
  103. package/src/lib/services/brighthub/collectionAdapter.js.map +1 -0
  104. package/src/lib/services/brighthub/connectionService.d.ts.map +1 -1
  105. package/src/lib/services/brighthub/connectionService.js +3 -0
  106. package/src/lib/services/brighthub/connectionService.js.map +1 -1
  107. package/src/lib/services/brighthub/messagingService.d.ts +4 -0
  108. package/src/lib/services/brighthub/messagingService.d.ts.map +1 -1
  109. package/src/lib/services/brighthub/messagingService.js +25 -4
  110. package/src/lib/services/brighthub/messagingService.js.map +1 -1
  111. package/src/lib/services/brighthub/notificationService.d.ts.map +1 -1
  112. package/src/lib/services/brighthub/notificationService.js +35 -20
  113. package/src/lib/services/brighthub/notificationService.js.map +1 -1
  114. package/src/lib/services/brighthub/postService.d.ts +7 -1
  115. package/src/lib/services/brighthub/postService.d.ts.map +1 -1
  116. package/src/lib/services/brighthub/postService.js +22 -1
  117. package/src/lib/services/brighthub/postService.js.map +1 -1
  118. package/src/lib/services/brighthub/userProfileService.d.ts +19 -1
  119. package/src/lib/services/brighthub/userProfileService.d.ts.map +1 -1
  120. package/src/lib/services/brighthub/userProfileService.js +74 -0
  121. package/src/lib/services/brighthub/userProfileService.js.map +1 -1
  122. package/src/lib/services/eventNotificationSystem.d.ts.map +1 -1
  123. package/src/lib/services/eventNotificationSystem.js.map +1 -1
  124. package/src/lib/services/index.d.ts +1 -1
  125. package/src/lib/services/index.d.ts.map +1 -1
  126. package/src/lib/services/index.js +1 -1
  127. package/src/lib/services/index.js.map +1 -1
  128. package/src/lib/stores/availabilityAwareBlockStore.d.ts +4 -3
  129. package/src/lib/stores/availabilityAwareBlockStore.d.ts.map +1 -1
  130. package/src/lib/stores/availabilityAwareBlockStore.js +5 -2
  131. package/src/lib/stores/availabilityAwareBlockStore.js.map +1 -1
  132. package/src/lib/stores/cloudBlockStoreBase.d.ts +2 -1
  133. package/src/lib/stores/cloudBlockStoreBase.d.ts.map +1 -1
  134. package/src/lib/stores/cloudBlockStoreBase.js +34 -13
  135. package/src/lib/stores/cloudBlockStoreBase.js.map +1 -1
  136. package/src/lib/stores/diskBlockAsyncStore.d.ts +21 -1
  137. package/src/lib/stores/diskBlockAsyncStore.d.ts.map +1 -1
  138. package/src/lib/stores/diskBlockAsyncStore.js +48 -17
  139. package/src/lib/stores/diskBlockAsyncStore.js.map +1 -1
  140. package/src/lib/stores/diskBlockStore.d.ts +10 -2
  141. package/src/lib/stores/diskBlockStore.d.ts.map +1 -1
  142. package/src/lib/stores/diskBlockStore.js +43 -19
  143. package/src/lib/stores/diskBlockStore.js.map +1 -1
  144. package/src/lib/utils/emailValidation.d.ts.map +1 -1
  145. package/src/lib/utils/emailValidation.js +2 -1
  146. package/src/lib/utils/emailValidation.js.map +1 -1
@@ -0,0 +1,348 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview WriteAclApiRouter - Express router for Write ACL management endpoints.
4
+ *
5
+ * Provides REST API endpoints for managing Write ACLs, mounted alongside
6
+ * the existing `createDbRouter`. All mutating endpoints require
7
+ * `X-Acl-Admin-Signature` (hex-encoded ECDSA signature) and
8
+ * `X-Acl-Admin-PublicKey` headers from an ACL administrator.
9
+ *
10
+ * @see BrightDB Write ACLs design, WriteAclApiRouter section
11
+ * @see Requirements 9.1, 9.2, 9.3, 9.4, 9.5, 9.6
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.createWriteAclApiRouter = createWriteAclApiRouter;
15
+ const express_1 = require("express");
16
+ /**
17
+ * Extract and validate admin credentials from request headers.
18
+ * Returns the admin signature and public key as Uint8Arrays, or
19
+ * sends HTTP 403 and returns undefined.
20
+ */
21
+ function extractAdminCredentials(req, res) {
22
+ const signatureHex = req.headers['x-acl-admin-signature'];
23
+ const publicKeyHex = req.headers['x-acl-admin-publickey'];
24
+ if (!signatureHex || !publicKeyHex) {
25
+ res.status(403).json({
26
+ error: 'Missing admin credentials',
27
+ message: 'X-Acl-Admin-Signature and X-Acl-Admin-PublicKey headers are required for this operation',
28
+ });
29
+ return undefined;
30
+ }
31
+ try {
32
+ const adminSignature = Uint8Array.from(Buffer.from(signatureHex, 'hex'));
33
+ const adminPublicKey = Uint8Array.from(Buffer.from(publicKeyHex, 'hex'));
34
+ return { adminSignature, adminPublicKey };
35
+ }
36
+ catch {
37
+ res.status(403).json({
38
+ error: 'Invalid admin credentials',
39
+ message: 'X-Acl-Admin-Signature and X-Acl-Admin-PublicKey must be valid hex-encoded values',
40
+ });
41
+ return undefined;
42
+ }
43
+ }
44
+ /**
45
+ * Factory function that creates an Express router for Write ACL management.
46
+ *
47
+ * @param aclManager - The WriteAclManager (or any IWriteAclApiManager) to delegate to
48
+ * @param auditLogger - Optional WriteAclAuditLogger for logging ACL events
49
+ * @returns An Express Router with ACL management endpoints
50
+ */
51
+ function createWriteAclApiRouter(aclManager, auditLogger) {
52
+ const router = (0, express_1.Router)();
53
+ // ─── GET endpoints: Retrieve current Write_ACL ──────────────────────
54
+ /** GET /acl/:dbName — Get database-level Write_ACL. @see Requirement 9.1 */
55
+ router.get('/acl/:dbName', (req, res) => {
56
+ try {
57
+ const dbName = req.params['dbName'];
58
+ const aclDoc = aclManager.getAclDocument(dbName);
59
+ if (!aclDoc) {
60
+ res.status(404).json({
61
+ error: 'ACL not found',
62
+ message: `No Write_ACL configured for database "${dbName}"`,
63
+ });
64
+ return;
65
+ }
66
+ res.json(serializeAclForResponse(aclDoc));
67
+ }
68
+ catch (error) {
69
+ res.status(500).json({ error: error.message });
70
+ }
71
+ });
72
+ /** GET /acl/:dbName/:collectionName — Get collection-level Write_ACL. @see Requirement 9.1 */
73
+ router.get('/acl/:dbName/:collectionName', (req, res) => {
74
+ try {
75
+ const dbName = req.params['dbName'];
76
+ const collectionName = req.params['collectionName'];
77
+ const aclDoc = aclManager.getAclDocument(dbName, collectionName);
78
+ if (!aclDoc) {
79
+ res.status(404).json({
80
+ error: 'ACL not found',
81
+ message: `No Write_ACL configured for "${dbName}/${collectionName}"`,
82
+ });
83
+ return;
84
+ }
85
+ res.json(serializeAclForResponse(aclDoc));
86
+ }
87
+ catch (error) {
88
+ res.status(500).json({ error: error.message });
89
+ }
90
+ });
91
+ // ─── PUT endpoints: Set/update Write_ACL ────────────────────────────
92
+ /** PUT /acl/:dbName — Set/update database-level Write_ACL. @see Requirements 9.2, 9.6 */
93
+ router.put('/acl/:dbName', async (req, res) => {
94
+ const credentials = extractAdminCredentials(req, res);
95
+ if (!credentials)
96
+ return;
97
+ try {
98
+ const dbName = req.params['dbName'];
99
+ const aclDoc = parseAclFromRequest(req.body, dbName);
100
+ const key = await aclManager.setAcl(aclDoc, credentials.adminSignature, credentials.adminPublicKey);
101
+ if (auditLogger) {
102
+ auditLogger.logAclModification(Buffer.from(credentials.adminPublicKey).toString('hex'), 'setAcl', 'database', dbName);
103
+ }
104
+ res.json({ success: true, key });
105
+ }
106
+ catch (error) {
107
+ handleAclError(error, res);
108
+ }
109
+ });
110
+ /** PUT /acl/:dbName/:collectionName — Set/update collection-level Write_ACL. @see Requirements 9.2, 9.6 */
111
+ router.put('/acl/:dbName/:collectionName', async (req, res) => {
112
+ const credentials = extractAdminCredentials(req, res);
113
+ if (!credentials)
114
+ return;
115
+ try {
116
+ const dbName = req.params['dbName'];
117
+ const collectionName = req.params['collectionName'];
118
+ const aclDoc = parseAclFromRequest(req.body, dbName, collectionName);
119
+ const key = await aclManager.setAcl(aclDoc, credentials.adminSignature, credentials.adminPublicKey);
120
+ if (auditLogger) {
121
+ auditLogger.logAclModification(Buffer.from(credentials.adminPublicKey).toString('hex'), 'setAcl', 'collection', dbName, collectionName);
122
+ }
123
+ res.json({ success: true, key });
124
+ }
125
+ catch (error) {
126
+ handleAclError(error, res);
127
+ }
128
+ });
129
+ // ─── POST endpoints: Add authorized writer ──────────────────────────
130
+ /** POST /acl/:dbName/writers — Add an Authorized_Writer (database). @see Requirements 9.3, 9.6 */
131
+ router.post('/acl/:dbName/writers', async (req, res) => {
132
+ const credentials = extractAdminCredentials(req, res);
133
+ if (!credentials)
134
+ return;
135
+ try {
136
+ const dbName = req.params['dbName'];
137
+ const writerPublicKeyHex = req.body?.publicKeyHex;
138
+ if (!writerPublicKeyHex) {
139
+ res
140
+ .status(400)
141
+ .json({ error: 'Missing publicKeyHex in request body' });
142
+ return;
143
+ }
144
+ const writerPublicKey = Uint8Array.from(Buffer.from(writerPublicKeyHex, 'hex'));
145
+ const key = await aclManager.addWriter(dbName, undefined, writerPublicKey, credentials.adminSignature, credentials.adminPublicKey);
146
+ if (auditLogger) {
147
+ auditLogger.logAclModification(Buffer.from(credentials.adminPublicKey).toString('hex'), 'addWriter', writerPublicKeyHex, dbName);
148
+ }
149
+ res.json({ success: true, key });
150
+ }
151
+ catch (error) {
152
+ handleAclError(error, res);
153
+ }
154
+ });
155
+ /** POST /acl/:dbName/:collectionName/writers — Add an Authorized_Writer (collection). @see Requirements 9.3, 9.6 */
156
+ router.post('/acl/:dbName/:collectionName/writers', async (req, res) => {
157
+ const credentials = extractAdminCredentials(req, res);
158
+ if (!credentials)
159
+ return;
160
+ try {
161
+ const dbName = req.params['dbName'];
162
+ const collectionName = req.params['collectionName'];
163
+ const writerPublicKeyHex = req.body?.publicKeyHex;
164
+ if (!writerPublicKeyHex) {
165
+ res
166
+ .status(400)
167
+ .json({ error: 'Missing publicKeyHex in request body' });
168
+ return;
169
+ }
170
+ const writerPublicKey = Uint8Array.from(Buffer.from(writerPublicKeyHex, 'hex'));
171
+ const key = await aclManager.addWriter(dbName, collectionName, writerPublicKey, credentials.adminSignature, credentials.adminPublicKey);
172
+ if (auditLogger) {
173
+ auditLogger.logAclModification(Buffer.from(credentials.adminPublicKey).toString('hex'), 'addWriter', writerPublicKeyHex, dbName, collectionName);
174
+ }
175
+ res.json({ success: true, key });
176
+ }
177
+ catch (error) {
178
+ handleAclError(error, res);
179
+ }
180
+ });
181
+ // ─── DELETE endpoints: Remove authorized writer ─────────────────────
182
+ /** DELETE /acl/:dbName/writers/:publicKeyHex — Remove an Authorized_Writer (database). @see Requirements 9.4, 9.6 */
183
+ router.delete('/acl/:dbName/writers/:publicKeyHex', async (req, res) => {
184
+ const credentials = extractAdminCredentials(req, res);
185
+ if (!credentials)
186
+ return;
187
+ try {
188
+ const dbName = req.params['dbName'];
189
+ const publicKeyHex = req.params['publicKeyHex'];
190
+ const writerPublicKey = Uint8Array.from(Buffer.from(publicKeyHex, 'hex'));
191
+ const key = await aclManager.removeWriter(dbName, undefined, writerPublicKey, credentials.adminSignature, credentials.adminPublicKey);
192
+ if (auditLogger) {
193
+ auditLogger.logAclModification(Buffer.from(credentials.adminPublicKey).toString('hex'), 'removeWriter', publicKeyHex, dbName);
194
+ }
195
+ res.json({ success: true, key });
196
+ }
197
+ catch (error) {
198
+ handleAclError(error, res);
199
+ }
200
+ });
201
+ /** DELETE /acl/:dbName/:collectionName/writers/:publicKeyHex — Remove an Authorized_Writer (collection). @see Requirements 9.4, 9.6 */
202
+ router.delete('/acl/:dbName/:collectionName/writers/:publicKeyHex', async (req, res) => {
203
+ const credentials = extractAdminCredentials(req, res);
204
+ if (!credentials)
205
+ return;
206
+ try {
207
+ const dbName = req.params['dbName'];
208
+ const collectionName = req.params['collectionName'];
209
+ const publicKeyHex = req.params['publicKeyHex'];
210
+ const writerPublicKey = Uint8Array.from(Buffer.from(publicKeyHex, 'hex'));
211
+ const key = await aclManager.removeWriter(dbName, collectionName, writerPublicKey, credentials.adminSignature, credentials.adminPublicKey);
212
+ if (auditLogger) {
213
+ auditLogger.logAclModification(Buffer.from(credentials.adminPublicKey).toString('hex'), 'removeWriter', publicKeyHex, dbName, collectionName);
214
+ }
215
+ res.json({ success: true, key });
216
+ }
217
+ catch (error) {
218
+ handleAclError(error, res);
219
+ }
220
+ });
221
+ // ─── POST endpoints: Issue capability token ─────────────────────────
222
+ /** POST /acl/:dbName/tokens — Issue a Capability_Token (database). @see Requirements 9.5, 9.6 */
223
+ router.post('/acl/:dbName/tokens', async (req, res) => {
224
+ const credentials = extractAdminCredentials(req, res);
225
+ if (!credentials)
226
+ return;
227
+ try {
228
+ const dbName = req.params['dbName'];
229
+ const token = parseCapabilityTokenFromRequest(req.body, dbName);
230
+ const issuedToken = await aclManager.issueCapabilityToken(token, credentials.adminSignature);
231
+ if (auditLogger) {
232
+ auditLogger.logCapabilityTokenIssued(Buffer.from(token.granteePublicKey).toString('hex'), token.scope, token.expiresAt, Buffer.from(credentials.adminPublicKey).toString('hex'));
233
+ }
234
+ res.json({
235
+ success: true,
236
+ token: serializeTokenForResponse(issuedToken),
237
+ });
238
+ }
239
+ catch (error) {
240
+ handleAclError(error, res);
241
+ }
242
+ });
243
+ /** POST /acl/:dbName/:collectionName/tokens — Issue a Capability_Token (collection). @see Requirements 9.5, 9.6 */
244
+ router.post('/acl/:dbName/:collectionName/tokens', async (req, res) => {
245
+ const credentials = extractAdminCredentials(req, res);
246
+ if (!credentials)
247
+ return;
248
+ try {
249
+ const dbName = req.params['dbName'];
250
+ const collectionName = req.params['collectionName'];
251
+ const token = parseCapabilityTokenFromRequest(req.body, dbName, collectionName);
252
+ const issuedToken = await aclManager.issueCapabilityToken(token, credentials.adminSignature);
253
+ if (auditLogger) {
254
+ auditLogger.logCapabilityTokenIssued(Buffer.from(token.granteePublicKey).toString('hex'), token.scope, token.expiresAt, Buffer.from(credentials.adminPublicKey).toString('hex'));
255
+ }
256
+ res.json({
257
+ success: true,
258
+ token: serializeTokenForResponse(issuedToken),
259
+ });
260
+ }
261
+ catch (error) {
262
+ handleAclError(error, res);
263
+ }
264
+ });
265
+ return router;
266
+ }
267
+ // ─── Helper functions ───────────────────────────────────────────────
268
+ /** Map known ACL error types to appropriate HTTP status codes. */
269
+ function handleAclError(error, res) {
270
+ const name = error.constructor.name;
271
+ if (name === 'AclAdminRequiredError' ||
272
+ name === 'CapabilityTokenInvalidError' ||
273
+ name === 'CapabilityTokenExpiredError' ||
274
+ name === 'AclSignatureVerificationError') {
275
+ res.status(403).json({ error: name, message: error.message });
276
+ return;
277
+ }
278
+ if (name === 'AclVersionConflictError') {
279
+ res.status(409).json({ error: name, message: error.message });
280
+ return;
281
+ }
282
+ if (name === 'LastAdministratorError' || name === 'WriterNotInPoolError') {
283
+ res.status(400).json({ error: name, message: error.message });
284
+ return;
285
+ }
286
+ res.status(500).json({ error: 'InternalError', message: error.message });
287
+ }
288
+ /** Parse an ACL document from a request body, injecting scope from URL params. */
289
+ function parseAclFromRequest(body, dbName, collectionName) {
290
+ return {
291
+ documentId: body['documentId'] ?? '',
292
+ writeMode: body['writeMode'],
293
+ authorizedWriters: (body['authorizedWriters'] ?? []).map((hex) => Uint8Array.from(Buffer.from(hex, 'hex'))),
294
+ aclAdministrators: (body['aclAdministrators'] ?? []).map((hex) => Uint8Array.from(Buffer.from(hex, 'hex'))),
295
+ scope: { dbName, collectionName },
296
+ version: body['version'] ?? 1,
297
+ createdAt: body['createdAt']
298
+ ? new Date(body['createdAt'])
299
+ : new Date(),
300
+ updatedAt: body['updatedAt']
301
+ ? new Date(body['updatedAt'])
302
+ : new Date(),
303
+ creatorPublicKey: body['creatorPublicKey']
304
+ ? Uint8Array.from(Buffer.from(body['creatorPublicKey'], 'hex'))
305
+ : new Uint8Array(0),
306
+ creatorSignature: body['creatorSignature']
307
+ ? Uint8Array.from(Buffer.from(body['creatorSignature'], 'hex'))
308
+ : new Uint8Array(0),
309
+ previousVersionBlockId: body['previousVersionBlockId'],
310
+ };
311
+ }
312
+ /** Parse a capability token from a request body, injecting scope from URL params. */
313
+ function parseCapabilityTokenFromRequest(body, dbName, collectionName) {
314
+ return {
315
+ granteePublicKey: Uint8Array.from(Buffer.from(body['granteePublicKey'] ?? '', 'hex')),
316
+ scope: { dbName, collectionName },
317
+ expiresAt: new Date(body['expiresAt'] ?? new Date().toISOString()),
318
+ grantorSignature: Uint8Array.from(Buffer.from(body['grantorSignature'] ?? '', 'hex')),
319
+ grantorPublicKey: Uint8Array.from(Buffer.from(body['grantorPublicKey'] ?? '', 'hex')),
320
+ };
321
+ }
322
+ /** Serialize an ACL document for JSON response (Uint8Array → hex strings). */
323
+ function serializeAclForResponse(aclDoc) {
324
+ return {
325
+ documentId: aclDoc.documentId,
326
+ writeMode: aclDoc.writeMode,
327
+ authorizedWriters: aclDoc.authorizedWriters.map((w) => Buffer.from(w).toString('hex')),
328
+ aclAdministrators: aclDoc.aclAdministrators.map((a) => Buffer.from(a).toString('hex')),
329
+ scope: aclDoc.scope,
330
+ version: aclDoc.version,
331
+ createdAt: aclDoc.createdAt.toISOString(),
332
+ updatedAt: aclDoc.updatedAt.toISOString(),
333
+ creatorPublicKey: Buffer.from(aclDoc.creatorPublicKey).toString('hex'),
334
+ creatorSignature: Buffer.from(aclDoc.creatorSignature).toString('hex'),
335
+ previousVersionBlockId: aclDoc.previousVersionBlockId,
336
+ };
337
+ }
338
+ /** Serialize a capability token for JSON response (Uint8Array → hex strings). */
339
+ function serializeTokenForResponse(token) {
340
+ return {
341
+ granteePublicKey: Buffer.from(token.granteePublicKey).toString('hex'),
342
+ scope: token.scope,
343
+ expiresAt: token.expiresAt.toISOString(),
344
+ grantorSignature: Buffer.from(token.grantorSignature).toString('hex'),
345
+ grantorPublicKey: Buffer.from(token.grantorPublicKey).toString('hex'),
346
+ };
347
+ }
348
+ //# sourceMappingURL=writeAclApiRouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writeAclApiRouter.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/auth/writeAclApiRouter.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;AAsFH,0DA8WC;AA5bD,qCAAoD;AAgCpD;;;;GAIG;AACH,SAAS,uBAAuB,CAC9B,GAAY,EACZ,GAAa;IAEb,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,uBAAuB,CAE3C,CAAC;IACd,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,uBAAuB,CAE3C,CAAC;IAEd,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,EAAE,CAAC;QACnC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,KAAK,EAAE,2BAA2B;YAClC,OAAO,EACL,yFAAyF;SAC5F,CAAC,CAAC;QACH,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;QACzE,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;QACzE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,KAAK,EAAE,2BAA2B;YAClC,OAAO,EACL,kFAAkF;SACrF,CAAC,CAAC;QACH,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,uBAAuB,CACrC,UAA+B,EAC/B,WAAkC;IAElC,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;IAExB,uEAAuE;IAEvE,4EAA4E;IAC5E,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,GAAY,EAAE,GAAa,EAAQ,EAAE;QAC/D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAW,CAAC;YAC9C,MAAM,MAAM,GAAG,UAAU,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YACjD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBACnB,KAAK,EAAE,eAAe;oBACtB,OAAO,EAAE,yCAAyC,MAAM,GAAG;iBAC5D,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,8FAA8F;IAC9F,MAAM,CAAC,GAAG,CACR,8BAA8B,EAC9B,CAAC,GAAY,EAAE,GAAa,EAAQ,EAAE;QACpC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAW,CAAC;YAC9C,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAW,CAAC;YAC9D,MAAM,MAAM,GAAG,UAAU,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;YACjE,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBACnB,KAAK,EAAE,eAAe;oBACtB,OAAO,EAAE,gCAAgC,MAAM,IAAI,cAAc,GAAG;iBACrE,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC,CACF,CAAC;IAEF,uEAAuE;IAEvE,yFAAyF;IACzF,MAAM,CAAC,GAAG,CACR,cAAc,EACd,KAAK,EAAE,GAAY,EAAE,GAAa,EAAiB,EAAE;QACnD,MAAM,WAAW,GAAG,uBAAuB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACtD,IAAI,CAAC,WAAW;YAAE,OAAO;QAEzB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAW,CAAC;YAC9C,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACrD,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,MAAM,CACjC,MAAM,EACN,WAAW,CAAC,cAAc,EAC1B,WAAW,CAAC,cAAc,CAC3B,CAAC;YAEF,IAAI,WAAW,EAAE,CAAC;gBAChB,WAAW,CAAC,kBAAkB,CAC5B,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EACvD,QAAQ,EACR,UAAU,EACV,MAAM,CACP,CAAC;YACJ,CAAC;YAED,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,cAAc,CAAC,KAAc,EAAE,GAAG,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,2GAA2G;IAC3G,MAAM,CAAC,GAAG,CACR,8BAA8B,EAC9B,KAAK,EAAE,GAAY,EAAE,GAAa,EAAiB,EAAE;QACnD,MAAM,WAAW,GAAG,uBAAuB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACtD,IAAI,CAAC,WAAW;YAAE,OAAO;QAEzB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAW,CAAC;YAC9C,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAW,CAAC;YAC9D,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;YACrE,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,MAAM,CACjC,MAAM,EACN,WAAW,CAAC,cAAc,EAC1B,WAAW,CAAC,cAAc,CAC3B,CAAC;YAEF,IAAI,WAAW,EAAE,CAAC;gBAChB,WAAW,CAAC,kBAAkB,CAC5B,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EACvD,QAAQ,EACR,YAAY,EACZ,MAAM,EACN,cAAc,CACf,CAAC;YACJ,CAAC;YAED,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,cAAc,CAAC,KAAc,EAAE,GAAG,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,uEAAuE;IAEvE,kGAAkG;IAClG,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,KAAK,EAAE,GAAY,EAAE,GAAa,EAAiB,EAAE;QACnD,MAAM,WAAW,GAAG,uBAAuB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACtD,IAAI,CAAC,WAAW;YAAE,OAAO;QAEzB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAW,CAAC;YAC9C,MAAM,kBAAkB,GAAG,GAAG,CAAC,IAAI,EAAE,YAAsB,CAAC;YAC5D,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBACxB,GAAG;qBACA,MAAM,CAAC,GAAG,CAAC;qBACX,IAAI,CAAC,EAAE,KAAK,EAAE,sCAAsC,EAAE,CAAC,CAAC;gBAC3D,OAAO;YACT,CAAC;YACD,MAAM,eAAe,GAAG,UAAU,CAAC,IAAI,CACrC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC,CACvC,CAAC;YAEF,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,SAAS,CACpC,MAAM,EACN,SAAS,EACT,eAAe,EACf,WAAW,CAAC,cAAc,EAC1B,WAAW,CAAC,cAAc,CAC3B,CAAC;YAEF,IAAI,WAAW,EAAE,CAAC;gBAChB,WAAW,CAAC,kBAAkB,CAC5B,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EACvD,WAAW,EACX,kBAAkB,EAClB,MAAM,CACP,CAAC;YACJ,CAAC;YAED,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,cAAc,CAAC,KAAc,EAAE,GAAG,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,oHAAoH;IACpH,MAAM,CAAC,IAAI,CACT,sCAAsC,EACtC,KAAK,EAAE,GAAY,EAAE,GAAa,EAAiB,EAAE;QACnD,MAAM,WAAW,GAAG,uBAAuB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACtD,IAAI,CAAC,WAAW;YAAE,OAAO;QAEzB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAW,CAAC;YAC9C,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAW,CAAC;YAC9D,MAAM,kBAAkB,GAAG,GAAG,CAAC,IAAI,EAAE,YAAsB,CAAC;YAC5D,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBACxB,GAAG;qBACA,MAAM,CAAC,GAAG,CAAC;qBACX,IAAI,CAAC,EAAE,KAAK,EAAE,sCAAsC,EAAE,CAAC,CAAC;gBAC3D,OAAO;YACT,CAAC;YACD,MAAM,eAAe,GAAG,UAAU,CAAC,IAAI,CACrC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC,CACvC,CAAC;YAEF,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,SAAS,CACpC,MAAM,EACN,cAAc,EACd,eAAe,EACf,WAAW,CAAC,cAAc,EAC1B,WAAW,CAAC,cAAc,CAC3B,CAAC;YAEF,IAAI,WAAW,EAAE,CAAC;gBAChB,WAAW,CAAC,kBAAkB,CAC5B,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EACvD,WAAW,EACX,kBAAkB,EAClB,MAAM,EACN,cAAc,CACf,CAAC;YACJ,CAAC;YAED,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,cAAc,CAAC,KAAc,EAAE,GAAG,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,uEAAuE;IAEvE,qHAAqH;IACrH,MAAM,CAAC,MAAM,CACX,oCAAoC,EACpC,KAAK,EAAE,GAAY,EAAE,GAAa,EAAiB,EAAE;QACnD,MAAM,WAAW,GAAG,uBAAuB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACtD,IAAI,CAAC,WAAW;YAAE,OAAO;QAEzB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAW,CAAC;YAC9C,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,cAAc,CAAW,CAAC;YAC1D,MAAM,eAAe,GAAG,UAAU,CAAC,IAAI,CACrC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CACjC,CAAC;YAEF,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,YAAY,CACvC,MAAM,EACN,SAAS,EACT,eAAe,EACf,WAAW,CAAC,cAAc,EAC1B,WAAW,CAAC,cAAc,CAC3B,CAAC;YAEF,IAAI,WAAW,EAAE,CAAC;gBAChB,WAAW,CAAC,kBAAkB,CAC5B,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EACvD,cAAc,EACd,YAAY,EACZ,MAAM,CACP,CAAC;YACJ,CAAC;YAED,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,cAAc,CAAC,KAAc,EAAE,GAAG,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,uIAAuI;IACvI,MAAM,CAAC,MAAM,CACX,oDAAoD,EACpD,KAAK,EAAE,GAAY,EAAE,GAAa,EAAiB,EAAE;QACnD,MAAM,WAAW,GAAG,uBAAuB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACtD,IAAI,CAAC,WAAW;YAAE,OAAO;QAEzB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAW,CAAC;YAC9C,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAW,CAAC;YAC9D,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,cAAc,CAAW,CAAC;YAC1D,MAAM,eAAe,GAAG,UAAU,CAAC,IAAI,CACrC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CACjC,CAAC;YAEF,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,YAAY,CACvC,MAAM,EACN,cAAc,EACd,eAAe,EACf,WAAW,CAAC,cAAc,EAC1B,WAAW,CAAC,cAAc,CAC3B,CAAC;YAEF,IAAI,WAAW,EAAE,CAAC;gBAChB,WAAW,CAAC,kBAAkB,CAC5B,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EACvD,cAAc,EACd,YAAY,EACZ,MAAM,EACN,cAAc,CACf,CAAC;YACJ,CAAC;YAED,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,cAAc,CAAC,KAAc,EAAE,GAAG,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,uEAAuE;IAEvE,iGAAiG;IACjG,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,KAAK,EAAE,GAAY,EAAE,GAAa,EAAiB,EAAE;QACnD,MAAM,WAAW,GAAG,uBAAuB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACtD,IAAI,CAAC,WAAW;YAAE,OAAO;QAEzB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAW,CAAC;YAC9C,MAAM,KAAK,GAAG,+BAA+B,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAEhE,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,oBAAoB,CACvD,KAAK,EACL,WAAW,CAAC,cAAc,CAC3B,CAAC;YAEF,IAAI,WAAW,EAAE,CAAC;gBAChB,WAAW,CAAC,wBAAwB,CAClC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EACnD,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,SAAS,EACf,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CACxD,CAAC;YACJ,CAAC;YAED,GAAG,CAAC,IAAI,CAAC;gBACP,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,yBAAyB,CAAC,WAAW,CAAC;aAC9C,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,cAAc,CAAC,KAAc,EAAE,GAAG,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,mHAAmH;IACnH,MAAM,CAAC,IAAI,CACT,qCAAqC,EACrC,KAAK,EAAE,GAAY,EAAE,GAAa,EAAiB,EAAE;QACnD,MAAM,WAAW,GAAG,uBAAuB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACtD,IAAI,CAAC,WAAW;YAAE,OAAO;QAEzB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAW,CAAC;YAC9C,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAW,CAAC;YAC9D,MAAM,KAAK,GAAG,+BAA+B,CAC3C,GAAG,CAAC,IAAI,EACR,MAAM,EACN,cAAc,CACf,CAAC;YAEF,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,oBAAoB,CACvD,KAAK,EACL,WAAW,CAAC,cAAc,CAC3B,CAAC;YAEF,IAAI,WAAW,EAAE,CAAC;gBAChB,WAAW,CAAC,wBAAwB,CAClC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EACnD,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,SAAS,EACf,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CACxD,CAAC;YACJ,CAAC;YAED,GAAG,CAAC,IAAI,CAAC;gBACP,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,yBAAyB,CAAC,WAAW,CAAC;aAC9C,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,cAAc,CAAC,KAAc,EAAE,GAAG,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,uEAAuE;AAEvE,kEAAkE;AAClE,SAAS,cAAc,CAAC,KAAY,EAAE,GAAa;IACjD,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC;IACpC,IACE,IAAI,KAAK,uBAAuB;QAChC,IAAI,KAAK,6BAA6B;QACtC,IAAI,KAAK,6BAA6B;QACtC,IAAI,KAAK,+BAA+B,EACxC,CAAC;QACD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9D,OAAO;IACT,CAAC;IACD,IAAI,IAAI,KAAK,yBAAyB,EAAE,CAAC;QACvC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9D,OAAO;IACT,CAAC;IACD,IAAI,IAAI,KAAK,wBAAwB,IAAI,IAAI,KAAK,sBAAsB,EAAE,CAAC;QACzE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9D,OAAO;IACT,CAAC;IACD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;AAC3E,CAAC;AAED,kFAAkF;AAClF,SAAS,mBAAmB,CAC1B,IAA6B,EAC7B,MAAc,EACd,cAAuB;IAEvB,OAAO;QACL,UAAU,EAAG,IAAI,CAAC,YAAY,CAAY,IAAI,EAAE;QAChD,SAAS,EAAE,IAAI,CAAC,WAAW,CAA8B;QACzD,iBAAiB,EAAE,CAAE,IAAI,CAAC,mBAAmB,CAAc,IAAI,EAAE,CAAC,CAAC,GAAG,CACpE,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAClD;QACD,iBAAiB,EAAE,CAAE,IAAI,CAAC,mBAAmB,CAAc,IAAI,EAAE,CAAC,CAAC,GAAG,CACpE,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAClD;QACD,KAAK,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE;QACjC,OAAO,EAAG,IAAI,CAAC,SAAS,CAAY,IAAI,CAAC;QACzC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC;YAC1B,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAW,CAAC;YACvC,CAAC,CAAC,IAAI,IAAI,EAAE;QACd,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC;YAC1B,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAW,CAAC;YACvC,CAAC,CAAC,IAAI,IAAI,EAAE;QACd,gBAAgB,EAAE,IAAI,CAAC,kBAAkB,CAAC;YACxC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAW,EAAE,KAAK,CAAC,CAAC;YACzE,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC;QACrB,gBAAgB,EAAE,IAAI,CAAC,kBAAkB,CAAC;YACxC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAW,EAAE,KAAK,CAAC,CAAC;YACzE,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC;QACrB,sBAAsB,EAAE,IAAI,CAAC,wBAAwB,CAExC;KACd,CAAC;AACJ,CAAC;AAED,qFAAqF;AACrF,SAAS,+BAA+B,CACtC,IAA6B,EAC7B,MAAc,EACd,cAAuB;IAEvB,OAAO;QACL,gBAAgB,EAAE,UAAU,CAAC,IAAI,CAC/B,MAAM,CAAC,IAAI,CAAE,IAAI,CAAC,kBAAkB,CAAY,IAAI,EAAE,EAAE,KAAK,CAAC,CAC/D;QACD,KAAK,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE;QACjC,SAAS,EAAE,IAAI,IAAI,CAChB,IAAI,CAAC,WAAW,CAAY,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAC1D;QACD,gBAAgB,EAAE,UAAU,CAAC,IAAI,CAC/B,MAAM,CAAC,IAAI,CAAE,IAAI,CAAC,kBAAkB,CAAY,IAAI,EAAE,EAAE,KAAK,CAAC,CAC/D;QACD,gBAAgB,EAAE,UAAU,CAAC,IAAI,CAC/B,MAAM,CAAC,IAAI,CAAE,IAAI,CAAC,kBAAkB,CAAY,IAAI,EAAE,EAAE,KAAK,CAAC,CAC/D;KACF,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,SAAS,uBAAuB,CAC9B,MAAoB;IAEpB,OAAO;QACL,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACpD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAC/B;QACD,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACpD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAC/B;QACD,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE;QACzC,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE;QACzC,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QACtE,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QACtE,sBAAsB,EAAE,MAAM,CAAC,sBAAsB;KACtD,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,SAAS,yBAAyB,CAChC,KAAuB;IAEvB,OAAO;QACL,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QACrE,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE;QACxC,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QACrE,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;KACtE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * @fileoverview Write ACL Audit Logger implementation for BrightDB
3
+ *
4
+ * Structured audit logging for all write ACL events: authorized writes,
5
+ * rejected writes, ACL modifications, capability token issuance,
6
+ * capability token usage, and security events.
7
+ *
8
+ * Each log entry includes the actor's public key, operation type,
9
+ * target scope, and timestamp.
10
+ *
11
+ * @see BrightDB Write ACLs design, WriteAclAuditLogger section
12
+ * @see Requirements 11.1, 11.2, 11.3, 11.4, 11.5
13
+ */
14
+ import type { IAclScope, IWriteAclAuditLogger } from '@brightchain/brightchain-lib';
15
+ /**
16
+ * Operation types for audit log entries.
17
+ */
18
+ export declare enum AuditOperationType {
19
+ AuthorizedWrite = "authorized_write",
20
+ RejectedWrite = "rejected_write",
21
+ AclModification = "acl_modification",
22
+ CapabilityTokenIssued = "capability_token_issued",
23
+ CapabilityTokenUsed = "capability_token_used",
24
+ SecurityEvent = "security_event"
25
+ }
26
+ /**
27
+ * A single audit log entry.
28
+ */
29
+ export interface IAuditLogEntry {
30
+ /** Timestamp when the event was recorded */
31
+ timestamp: Date;
32
+ /** The type of operation */
33
+ operationType: AuditOperationType;
34
+ /** The actor's public key (hex-encoded), or empty for security events */
35
+ actorPublicKey: string;
36
+ /** Target scope (database and optional collection) */
37
+ targetScope: IAclScope;
38
+ /** Additional structured details about the event */
39
+ details: Record<string, unknown>;
40
+ }
41
+ /**
42
+ * Structured audit logger for write ACL events.
43
+ *
44
+ * Implements `IWriteAclAuditLogger` from brightchain-lib.
45
+ * Stores log entries in an in-memory array for testability,
46
+ * and provides retrieval methods for inspection.
47
+ *
48
+ * @see Requirements 11.1, 11.2, 11.3, 11.4, 11.5
49
+ */
50
+ export declare class WriteAclAuditLogger implements IWriteAclAuditLogger {
51
+ private readonly entries;
52
+ /**
53
+ * Retrieve all audit log entries.
54
+ */
55
+ getEntries(): ReadonlyArray<IAuditLogEntry>;
56
+ /**
57
+ * Get the total number of audit log entries.
58
+ */
59
+ getEntryCount(): number;
60
+ /**
61
+ * Clear all audit log entries.
62
+ */
63
+ clear(): void;
64
+ /**
65
+ * Log a successful authorized write in Restricted_Mode.
66
+ * @see Requirements 11.1
67
+ */
68
+ logAuthorizedWrite(writerPublicKey: string, dbName: string, collectionName: string, blockId: string): void;
69
+ /**
70
+ * Log a rejected write due to authorization failure.
71
+ * @see Requirements 11.2
72
+ */
73
+ logRejectedWrite(requesterPublicKey: string, dbName: string, collectionName: string, reason: string): void;
74
+ /**
75
+ * Log a Write ACL modification.
76
+ * @see Requirements 11.3
77
+ */
78
+ logAclModification(adminPublicKey: string, changeType: string, affectedMember: string, dbName: string, collectionName?: string): void;
79
+ /**
80
+ * Log the issuance of a capability token.
81
+ * @see Requirements 11.4
82
+ */
83
+ logCapabilityTokenIssued(granteePublicKey: string, scope: IAclScope, expiresAt: Date, grantorPublicKey: string): void;
84
+ /**
85
+ * Log the usage of a capability token for a write operation.
86
+ * @see Requirements 11.5
87
+ */
88
+ logCapabilityTokenUsed(granteePublicKey: string, scope: IAclScope, dbName: string, collectionName: string, blockId: string): void;
89
+ /**
90
+ * Log a security-relevant event.
91
+ */
92
+ logSecurityEvent(event: string, details: Record<string, unknown>): void;
93
+ }
94
+ //# sourceMappingURL=writeAclAuditLogger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writeAclAuditLogger.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/auth/writeAclAuditLogger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,oBAAoB,EACrB,MAAM,8BAA8B,CAAC;AAEtC;;GAEG;AACH,oBAAY,kBAAkB;IAC5B,eAAe,qBAAqB;IACpC,aAAa,mBAAmB;IAChC,eAAe,qBAAqB;IACpC,qBAAqB,4BAA4B;IACjD,mBAAmB,0BAA0B;IAC7C,aAAa,mBAAmB;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,4CAA4C;IAC5C,SAAS,EAAE,IAAI,CAAC;IAChB,4BAA4B;IAC5B,aAAa,EAAE,kBAAkB,CAAC;IAClC,yEAAyE;IACzE,cAAc,EAAE,MAAM,CAAC;IACvB,sDAAsD;IACtD,WAAW,EAAE,SAAS,CAAC;IACvB,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED;;;;;;;;GAQG;AACH,qBAAa,mBAAoB,YAAW,oBAAoB;IAC9D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAEhD;;OAEG;IACH,UAAU,IAAI,aAAa,CAAC,cAAc,CAAC;IAI3C;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;;OAGG;IACH,kBAAkB,CAChB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,GACd,IAAI;IAUP;;;OAGG;IACH,gBAAgB,CACd,kBAAkB,EAAE,MAAM,EAC1B,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,GACb,IAAI;IAUP;;;OAGG;IACH,kBAAkB,CAChB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,EACd,cAAc,CAAC,EAAE,MAAM,GACtB,IAAI;IAUP;;;OAGG;IACH,wBAAwB,CACtB,gBAAgB,EAAE,MAAM,EACxB,KAAK,EAAE,SAAS,EAChB,SAAS,EAAE,IAAI,EACf,gBAAgB,EAAE,MAAM,GACvB,IAAI;IAUP;;;OAGG;IACH,sBAAsB,CACpB,gBAAgB,EAAE,MAAM,EACxB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,GACd,IAAI;IAaP;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAYxE"}
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Write ACL Audit Logger implementation for BrightDB
4
+ *
5
+ * Structured audit logging for all write ACL events: authorized writes,
6
+ * rejected writes, ACL modifications, capability token issuance,
7
+ * capability token usage, and security events.
8
+ *
9
+ * Each log entry includes the actor's public key, operation type,
10
+ * target scope, and timestamp.
11
+ *
12
+ * @see BrightDB Write ACLs design, WriteAclAuditLogger section
13
+ * @see Requirements 11.1, 11.2, 11.3, 11.4, 11.5
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.WriteAclAuditLogger = exports.AuditOperationType = void 0;
17
+ /**
18
+ * Operation types for audit log entries.
19
+ */
20
+ var AuditOperationType;
21
+ (function (AuditOperationType) {
22
+ AuditOperationType["AuthorizedWrite"] = "authorized_write";
23
+ AuditOperationType["RejectedWrite"] = "rejected_write";
24
+ AuditOperationType["AclModification"] = "acl_modification";
25
+ AuditOperationType["CapabilityTokenIssued"] = "capability_token_issued";
26
+ AuditOperationType["CapabilityTokenUsed"] = "capability_token_used";
27
+ AuditOperationType["SecurityEvent"] = "security_event";
28
+ })(AuditOperationType || (exports.AuditOperationType = AuditOperationType = {}));
29
+ /**
30
+ * Structured audit logger for write ACL events.
31
+ *
32
+ * Implements `IWriteAclAuditLogger` from brightchain-lib.
33
+ * Stores log entries in an in-memory array for testability,
34
+ * and provides retrieval methods for inspection.
35
+ *
36
+ * @see Requirements 11.1, 11.2, 11.3, 11.4, 11.5
37
+ */
38
+ class WriteAclAuditLogger {
39
+ entries = [];
40
+ /**
41
+ * Retrieve all audit log entries.
42
+ */
43
+ getEntries() {
44
+ return this.entries;
45
+ }
46
+ /**
47
+ * Get the total number of audit log entries.
48
+ */
49
+ getEntryCount() {
50
+ return this.entries.length;
51
+ }
52
+ /**
53
+ * Clear all audit log entries.
54
+ */
55
+ clear() {
56
+ this.entries.length = 0;
57
+ }
58
+ /**
59
+ * Log a successful authorized write in Restricted_Mode.
60
+ * @see Requirements 11.1
61
+ */
62
+ logAuthorizedWrite(writerPublicKey, dbName, collectionName, blockId) {
63
+ this.entries.push({
64
+ timestamp: new Date(),
65
+ operationType: AuditOperationType.AuthorizedWrite,
66
+ actorPublicKey: writerPublicKey,
67
+ targetScope: { dbName, collectionName },
68
+ details: { blockId },
69
+ });
70
+ }
71
+ /**
72
+ * Log a rejected write due to authorization failure.
73
+ * @see Requirements 11.2
74
+ */
75
+ logRejectedWrite(requesterPublicKey, dbName, collectionName, reason) {
76
+ this.entries.push({
77
+ timestamp: new Date(),
78
+ operationType: AuditOperationType.RejectedWrite,
79
+ actorPublicKey: requesterPublicKey,
80
+ targetScope: { dbName, collectionName },
81
+ details: { reason },
82
+ });
83
+ }
84
+ /**
85
+ * Log a Write ACL modification.
86
+ * @see Requirements 11.3
87
+ */
88
+ logAclModification(adminPublicKey, changeType, affectedMember, dbName, collectionName) {
89
+ this.entries.push({
90
+ timestamp: new Date(),
91
+ operationType: AuditOperationType.AclModification,
92
+ actorPublicKey: adminPublicKey,
93
+ targetScope: { dbName, collectionName },
94
+ details: { changeType, affectedMember },
95
+ });
96
+ }
97
+ /**
98
+ * Log the issuance of a capability token.
99
+ * @see Requirements 11.4
100
+ */
101
+ logCapabilityTokenIssued(granteePublicKey, scope, expiresAt, grantorPublicKey) {
102
+ this.entries.push({
103
+ timestamp: new Date(),
104
+ operationType: AuditOperationType.CapabilityTokenIssued,
105
+ actorPublicKey: grantorPublicKey,
106
+ targetScope: scope,
107
+ details: { granteePublicKey, expiresAt: expiresAt.toISOString() },
108
+ });
109
+ }
110
+ /**
111
+ * Log the usage of a capability token for a write operation.
112
+ * @see Requirements 11.5
113
+ */
114
+ logCapabilityTokenUsed(granteePublicKey, scope, dbName, collectionName, blockId) {
115
+ this.entries.push({
116
+ timestamp: new Date(),
117
+ operationType: AuditOperationType.CapabilityTokenUsed,
118
+ actorPublicKey: granteePublicKey,
119
+ targetScope: { dbName, collectionName },
120
+ details: {
121
+ tokenScope: scope,
122
+ blockId,
123
+ },
124
+ });
125
+ }
126
+ /**
127
+ * Log a security-relevant event.
128
+ */
129
+ logSecurityEvent(event, details) {
130
+ this.entries.push({
131
+ timestamp: new Date(),
132
+ operationType: AuditOperationType.SecurityEvent,
133
+ actorPublicKey: details['actorPublicKey'] ?? '',
134
+ targetScope: {
135
+ dbName: details['dbName'] ?? '',
136
+ collectionName: details['collectionName'],
137
+ },
138
+ details: { event, ...details },
139
+ });
140
+ }
141
+ }
142
+ exports.WriteAclAuditLogger = WriteAclAuditLogger;
143
+ //# sourceMappingURL=writeAclAuditLogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writeAclAuditLogger.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/auth/writeAclAuditLogger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * @fileoverview ACL middleware for extracting Write_Proof from data route requests.
3
+ *
4
+ * Extracts the `X-Write-Proof` header (JSON-serialized IWriteProof) on
5
+ * existing data routes and passes the write proof through to collection
6
+ * operations for head registry enforcement.
7
+ *
8
+ * @see BrightDB Write ACLs design, ACL Express Middleware section
9
+ * @see Requirements 5.5, 3.1
10
+ */
11
+ import type { IWriteProof } from '@brightchain/brightchain-lib';
12
+ import type { NextFunction, Request, Response } from 'express';
13
+ /**
14
+ * Key used to attach the parsed write proof to the Express request object.
15
+ */
16
+ export declare const WRITE_PROOF_KEY = "writeProof";
17
+ /**
18
+ * Augment Express Request to carry an optional write proof.
19
+ */
20
+ declare global {
21
+ namespace Express {
22
+ interface Request {
23
+ writeProof?: IWriteProof;
24
+ }
25
+ }
26
+ }
27
+ /**
28
+ * Express middleware that extracts a Write_Proof from the `X-Write-Proof`
29
+ * request header. If the header is present, it is parsed from JSON and
30
+ * attached to `req.writeProof`. If the header is absent, the request
31
+ * proceeds without a proof (Open_Mode collections don't require one).
32
+ *
33
+ * Binary fields (`signerPublicKey`, `signature`) are expected as hex strings
34
+ * in the JSON and are converted to Uint8Array.
35
+ *
36
+ * @see Requirements 5.5, 3.1
37
+ */
38
+ export declare function extractWriteProof(req: Request, res: Response, next: NextFunction): void;
39
+ //# sourceMappingURL=writeProofMiddleware.d.ts.map