@brightchain/brightchain-api-lib 0.2.1 → 0.5.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 (283) hide show
  1. package/package.json +2 -2
  2. package/src/index.d.ts +10 -75
  3. package/src/index.d.ts.map +1 -1
  4. package/src/index.js +11 -78
  5. package/src/index.js.map +1 -1
  6. package/src/lib/__tests__/fixtures/mock-backend-brightchain-member.d.ts +1 -2
  7. package/src/lib/__tests__/fixtures/mock-backend-brightchain-member.d.ts.map +1 -1
  8. package/src/lib/__tests__/fixtures/mock-backend-brightchain-member.js +1 -1
  9. package/src/lib/__tests__/fixtures/mock-backend-brightchain-member.js.map +1 -1
  10. package/src/lib/application-base.d.ts +7 -6
  11. package/src/lib/application-base.d.ts.map +1 -1
  12. package/src/lib/application-base.js.map +1 -1
  13. package/src/lib/application.d.ts +7 -2
  14. package/src/lib/application.d.ts.map +1 -1
  15. package/src/lib/application.js +30 -0
  16. package/src/lib/application.js.map +1 -1
  17. package/src/lib/controllers/api/blocks.d.ts +246 -0
  18. package/src/lib/controllers/api/blocks.d.ts.map +1 -0
  19. package/src/lib/controllers/api/blocks.js +414 -0
  20. package/src/lib/controllers/api/blocks.js.map +1 -0
  21. package/src/lib/controllers/api/cbl.d.ts +88 -0
  22. package/src/lib/controllers/api/cbl.d.ts.map +1 -0
  23. package/src/lib/controllers/api/cbl.js +222 -0
  24. package/src/lib/controllers/api/cbl.js.map +1 -0
  25. package/src/lib/controllers/api/energy.d.ts +18 -0
  26. package/src/lib/controllers/api/energy.d.ts.map +1 -0
  27. package/src/lib/controllers/api/energy.js +96 -0
  28. package/src/lib/controllers/api/energy.js.map +1 -0
  29. package/src/lib/controllers/api/i18n.d.ts +19 -0
  30. package/src/lib/controllers/api/i18n.d.ts.map +1 -0
  31. package/src/lib/controllers/api/i18n.js +27 -0
  32. package/src/lib/controllers/api/i18n.js.map +1 -0
  33. package/src/lib/controllers/api/index.d.ts +9 -0
  34. package/src/lib/controllers/api/index.d.ts.map +1 -0
  35. package/src/lib/controllers/api/index.js +12 -0
  36. package/src/lib/controllers/api/index.js.map +1 -0
  37. package/src/lib/controllers/api/members.d.ts +19 -0
  38. package/src/lib/controllers/api/members.d.ts.map +1 -0
  39. package/src/lib/controllers/api/members.js +27 -0
  40. package/src/lib/controllers/api/members.js.map +1 -0
  41. package/src/lib/controllers/api/quorum.d.ts +369 -0
  42. package/src/lib/controllers/api/quorum.d.ts.map +1 -0
  43. package/src/lib/controllers/api/quorum.js +592 -0
  44. package/src/lib/controllers/api/quorum.js.map +1 -0
  45. package/src/lib/controllers/api/sessions.d.ts +21 -0
  46. package/src/lib/controllers/api/sessions.d.ts.map +1 -0
  47. package/src/lib/controllers/api/sessions.js +32 -0
  48. package/src/lib/controllers/api/sessions.js.map +1 -0
  49. package/src/lib/controllers/api/user.d.ts +20 -0
  50. package/src/lib/controllers/api/user.d.ts.map +1 -0
  51. package/src/lib/controllers/api/user.js +109 -0
  52. package/src/lib/controllers/api/user.js.map +1 -0
  53. package/src/lib/controllers/base.d.ts +6 -48
  54. package/src/lib/controllers/base.d.ts.map +1 -1
  55. package/src/lib/controllers/base.js +2 -225
  56. package/src/lib/controllers/base.js.map +1 -1
  57. package/src/lib/controllers/index.d.ts +3 -0
  58. package/src/lib/controllers/index.d.ts.map +1 -0
  59. package/src/lib/controllers/index.js +6 -0
  60. package/src/lib/controllers/index.js.map +1 -0
  61. package/src/lib/datastore/block-document-store.d.ts.map +1 -1
  62. package/src/lib/datastore/block-document-store.js +22 -18
  63. package/src/lib/datastore/block-document-store.js.map +1 -1
  64. package/src/lib/datastore/document-store.d.ts +1 -2
  65. package/src/lib/datastore/document-store.d.ts.map +1 -1
  66. package/src/lib/datastore/index.d.ts +6 -0
  67. package/src/lib/datastore/index.d.ts.map +1 -0
  68. package/src/lib/datastore/index.js +8 -0
  69. package/src/lib/datastore/index.js.map +1 -0
  70. package/src/lib/datastore/memory-document-store.d.ts.map +1 -1
  71. package/src/lib/datastore/memory-document-store.js.map +1 -1
  72. package/src/lib/documents/base.d.ts +3 -2
  73. package/src/lib/documents/base.d.ts.map +1 -1
  74. package/src/lib/enumerations/index.d.ts +5 -0
  75. package/src/lib/enumerations/index.d.ts.map +1 -0
  76. package/src/lib/enumerations/index.js +8 -0
  77. package/src/lib/enumerations/index.js.map +1 -0
  78. package/src/lib/enumerations/websocketMessageType.d.ts +44 -0
  79. package/src/lib/enumerations/websocketMessageType.d.ts.map +1 -0
  80. package/src/lib/enumerations/websocketMessageType.js +47 -0
  81. package/src/lib/enumerations/websocketMessageType.js.map +1 -0
  82. package/src/lib/environment.d.ts +4 -2
  83. package/src/lib/environment.d.ts.map +1 -1
  84. package/src/lib/environment.js.map +1 -1
  85. package/src/lib/errors/index.d.ts +20 -0
  86. package/src/lib/errors/index.d.ts.map +1 -0
  87. package/src/lib/errors/index.js +23 -0
  88. package/src/lib/errors/index.js.map +1 -0
  89. package/src/lib/interfaces/application.d.ts +19 -7
  90. package/src/lib/interfaces/application.d.ts.map +1 -1
  91. package/src/lib/interfaces/auth-credentials.d.ts +6 -0
  92. package/src/lib/interfaces/auth-credentials.d.ts.map +1 -0
  93. package/src/lib/interfaces/{server-init-result.js → auth-credentials.js} +1 -1
  94. package/src/lib/interfaces/auth-credentials.js.map +1 -0
  95. package/src/lib/interfaces/auth-token.d.ts +6 -0
  96. package/src/lib/interfaces/auth-token.d.ts.map +1 -0
  97. package/src/lib/interfaces/{ecies-consts.js → auth-token.js} +1 -1
  98. package/src/lib/interfaces/auth-token.js.map +1 -0
  99. package/src/lib/interfaces/backend-objects/index.d.ts +5 -0
  100. package/src/lib/interfaces/backend-objects/index.d.ts.map +1 -0
  101. package/src/lib/interfaces/backend-objects/index.js +8 -0
  102. package/src/lib/interfaces/backend-objects/index.js.map +1 -0
  103. package/src/lib/interfaces/bases/index.d.ts +5 -0
  104. package/src/lib/interfaces/bases/index.d.ts.map +1 -0
  105. package/src/lib/interfaces/bases/index.js +8 -0
  106. package/src/lib/interfaces/bases/index.js.map +1 -0
  107. package/src/lib/interfaces/blockRequest.d.ts +40 -0
  108. package/src/lib/interfaces/blockRequest.d.ts.map +1 -0
  109. package/src/lib/interfaces/{mongo-errors.js → blockRequest.js} +1 -1
  110. package/src/lib/interfaces/blockRequest.js.map +1 -0
  111. package/src/lib/interfaces/blockResponses.d.ts +32 -0
  112. package/src/lib/interfaces/blockResponses.d.ts.map +1 -0
  113. package/src/lib/interfaces/blockResponses.js +3 -0
  114. package/src/lib/interfaces/blockResponses.js.map +1 -0
  115. package/src/lib/interfaces/blockService.d.ts +16 -0
  116. package/src/lib/interfaces/blockService.d.ts.map +1 -0
  117. package/src/lib/interfaces/{pbkdf2-result.js → blockService.js} +1 -1
  118. package/src/lib/interfaces/blockService.js.map +1 -0
  119. package/src/lib/interfaces/blockStore.d.ts +7 -0
  120. package/src/lib/interfaces/blockStore.d.ts.map +1 -0
  121. package/src/lib/interfaces/blockStore.js +3 -0
  122. package/src/lib/interfaces/blockStore.js.map +1 -0
  123. package/src/lib/interfaces/blocksHandlers.d.ts +7 -0
  124. package/src/lib/interfaces/blocksHandlers.d.ts.map +1 -0
  125. package/src/lib/interfaces/blocksHandlers.js +3 -0
  126. package/src/lib/interfaces/blocksHandlers.js.map +1 -0
  127. package/src/lib/interfaces/cblHandlers.d.ts +7 -0
  128. package/src/lib/interfaces/cblHandlers.d.ts.map +1 -0
  129. package/src/lib/interfaces/cblHandlers.js +3 -0
  130. package/src/lib/interfaces/cblHandlers.js.map +1 -0
  131. package/src/lib/interfaces/environment.d.ts +4 -2
  132. package/src/lib/interfaces/environment.d.ts.map +1 -1
  133. package/src/lib/interfaces/index.d.ts +33 -0
  134. package/src/lib/interfaces/index.d.ts.map +1 -0
  135. package/src/lib/interfaces/index.js +36 -0
  136. package/src/lib/interfaces/index.js.map +1 -0
  137. package/src/lib/interfaces/member/index.d.ts +3 -0
  138. package/src/lib/interfaces/member/index.d.ts.map +1 -0
  139. package/src/lib/interfaces/member/index.js +6 -0
  140. package/src/lib/interfaces/member/index.js.map +1 -0
  141. package/src/lib/interfaces/member/operational.d.ts +1 -2
  142. package/src/lib/interfaces/member/operational.d.ts.map +1 -1
  143. package/src/lib/interfaces/membersResponse.d.ts +12 -0
  144. package/src/lib/interfaces/membersResponse.d.ts.map +1 -0
  145. package/src/lib/interfaces/membersResponse.js +3 -0
  146. package/src/lib/interfaces/membersResponse.js.map +1 -0
  147. package/src/lib/interfaces/responses/index.d.ts +0 -1
  148. package/src/lib/interfaces/responses/index.d.ts.map +1 -1
  149. package/src/lib/interfaces/token-payload.d.ts +9 -0
  150. package/src/lib/interfaces/token-payload.d.ts.map +1 -0
  151. package/src/lib/interfaces/token-payload.js +3 -0
  152. package/src/lib/interfaces/token-payload.js.map +1 -0
  153. package/src/lib/interfaces/websocketMessages.d.ts +222 -0
  154. package/src/lib/interfaces/websocketMessages.d.ts.map +1 -0
  155. package/src/lib/interfaces/websocketMessages.js +6 -0
  156. package/src/lib/interfaces/websocketMessages.js.map +1 -0
  157. package/src/lib/routers/api.d.ts +9 -4
  158. package/src/lib/routers/api.d.ts.map +1 -1
  159. package/src/lib/routers/api.js +18 -6
  160. package/src/lib/routers/api.js.map +1 -1
  161. package/src/lib/routers/app.d.ts +3 -2
  162. package/src/lib/routers/app.d.ts.map +1 -1
  163. package/src/lib/routers/app.js +5 -4
  164. package/src/lib/routers/app.js.map +1 -1
  165. package/src/lib/routers/base.d.ts +6 -4
  166. package/src/lib/routers/base.d.ts.map +1 -1
  167. package/src/lib/routers/base.js.map +1 -1
  168. package/src/lib/routers/index.d.ts +5 -0
  169. package/src/lib/routers/index.d.ts.map +1 -0
  170. package/src/lib/routers/index.js +8 -0
  171. package/src/lib/routers/index.js.map +1 -0
  172. package/src/lib/services/auth.d.ts +23 -0
  173. package/src/lib/services/auth.d.ts.map +1 -0
  174. package/src/lib/services/auth.js +93 -0
  175. package/src/lib/services/auth.js.map +1 -0
  176. package/src/lib/services/base.d.ts +12 -0
  177. package/src/lib/services/base.d.ts.map +1 -0
  178. package/src/lib/services/base.js +15 -0
  179. package/src/lib/services/base.js.map +1 -0
  180. package/src/lib/services/blockServiceFactory.d.ts +29 -0
  181. package/src/lib/services/blockServiceFactory.d.ts.map +1 -0
  182. package/src/lib/services/blockServiceFactory.js +42 -0
  183. package/src/lib/services/blockServiceFactory.js.map +1 -0
  184. package/src/lib/services/blockStore.d.ts +52 -0
  185. package/src/lib/services/blockStore.d.ts.map +1 -0
  186. package/src/lib/services/blockStore.js +105 -0
  187. package/src/lib/services/blockStore.js.map +1 -0
  188. package/src/lib/services/blocks.d.ts +26 -0
  189. package/src/lib/services/blocks.d.ts.map +1 -0
  190. package/src/lib/services/blocks.js +35 -0
  191. package/src/lib/services/blocks.js.map +1 -0
  192. package/src/lib/services/diskQuorumService.d.ts.map +1 -1
  193. package/src/lib/services/diskQuorumService.js.map +1 -1
  194. package/src/lib/services/email.d.ts +4 -3
  195. package/src/lib/services/email.d.ts.map +1 -1
  196. package/src/lib/services/email.js +4 -3
  197. package/src/lib/services/email.js.map +1 -1
  198. package/src/lib/services/index.d.ts +21 -0
  199. package/src/lib/services/index.d.ts.map +1 -0
  200. package/src/lib/services/index.js +26 -0
  201. package/src/lib/services/index.js.map +1 -0
  202. package/src/lib/services/messagePassingService.d.ts.map +1 -1
  203. package/src/lib/services/messagePassingService.js +1 -1
  204. package/src/lib/services/messagePassingService.js.map +1 -1
  205. package/src/lib/services/quorum.d.ts +44 -0
  206. package/src/lib/services/quorum.d.ts.map +1 -0
  207. package/src/lib/services/quorum.js +83 -0
  208. package/src/lib/services/quorum.js.map +1 -0
  209. package/src/lib/services/requestUser.d.ts +18 -0
  210. package/src/lib/services/requestUser.d.ts.map +1 -0
  211. package/src/lib/services/requestUser.js +22 -0
  212. package/src/lib/services/requestUser.js.map +1 -0
  213. package/src/lib/services/role.d.ts +19 -0
  214. package/src/lib/services/role.d.ts.map +1 -0
  215. package/src/lib/services/role.js +18 -0
  216. package/src/lib/services/role.js.map +1 -0
  217. package/src/lib/services/websocketHandler.d.ts +95 -0
  218. package/src/lib/services/websocketHandler.d.ts.map +1 -0
  219. package/src/lib/services/websocketHandler.js +269 -0
  220. package/src/lib/services/websocketHandler.js.map +1 -0
  221. package/src/lib/shared-types.d.ts +2 -1
  222. package/src/lib/shared-types.d.ts.map +1 -1
  223. package/src/lib/stores/availabilityAwareBlockStore.d.ts +45 -1
  224. package/src/lib/stores/availabilityAwareBlockStore.d.ts.map +1 -1
  225. package/src/lib/stores/availabilityAwareBlockStore.js +109 -0
  226. package/src/lib/stores/availabilityAwareBlockStore.js.map +1 -1
  227. package/src/lib/stores/diskBlockAsyncStore.d.ts +72 -1
  228. package/src/lib/stores/diskBlockAsyncStore.d.ts.map +1 -1
  229. package/src/lib/stores/diskBlockAsyncStore.js +300 -0
  230. package/src/lib/stores/diskBlockAsyncStore.js.map +1 -1
  231. package/src/lib/transforms/index.d.ts +4 -0
  232. package/src/lib/transforms/index.d.ts.map +1 -0
  233. package/src/lib/transforms/index.js +7 -0
  234. package/src/lib/transforms/index.js.map +1 -0
  235. package/src/lib/utils/errorResponse.d.ts +180 -0
  236. package/src/lib/utils/errorResponse.d.ts.map +1 -0
  237. package/src/lib/utils/errorResponse.js +313 -0
  238. package/src/lib/utils/errorResponse.js.map +1 -0
  239. package/src/lib/controllers/user.d.ts +0 -9
  240. package/src/lib/controllers/user.d.ts.map +0 -1
  241. package/src/lib/controllers/user.js +0 -21
  242. package/src/lib/controllers/user.js.map +0 -1
  243. package/src/lib/interfaces/api-express-validation-error-response.d.ts +0 -7
  244. package/src/lib/interfaces/api-express-validation-error-response.d.ts.map +0 -1
  245. package/src/lib/interfaces/api-express-validation-error-response.js +0 -3
  246. package/src/lib/interfaces/api-express-validation-error-response.js.map +0 -1
  247. package/src/lib/interfaces/api-mongo-validation-error-response.d.ts +0 -6
  248. package/src/lib/interfaces/api-mongo-validation-error-response.d.ts.map +0 -1
  249. package/src/lib/interfaces/api-mongo-validation-error-response.js +0 -3
  250. package/src/lib/interfaces/api-mongo-validation-error-response.js.map +0 -1
  251. package/src/lib/interfaces/authenticated-cipher.d.ts +0 -10
  252. package/src/lib/interfaces/authenticated-cipher.d.ts.map +0 -1
  253. package/src/lib/interfaces/authenticated-cipher.js +0 -3
  254. package/src/lib/interfaces/authenticated-cipher.js.map +0 -1
  255. package/src/lib/interfaces/authenticated-decipher.d.ts +0 -9
  256. package/src/lib/interfaces/authenticated-decipher.d.ts.map +0 -1
  257. package/src/lib/interfaces/authenticated-decipher.js +0 -3
  258. package/src/lib/interfaces/authenticated-decipher.js.map +0 -1
  259. package/src/lib/interfaces/ecies-consts.d.ts +0 -88
  260. package/src/lib/interfaces/ecies-consts.d.ts.map +0 -1
  261. package/src/lib/interfaces/ecies-consts.js.map +0 -1
  262. package/src/lib/interfaces/mongo-errors.d.ts +0 -9
  263. package/src/lib/interfaces/mongo-errors.d.ts.map +0 -1
  264. package/src/lib/interfaces/mongo-errors.js.map +0 -1
  265. package/src/lib/interfaces/pbkdf2-result.d.ts +0 -6
  266. package/src/lib/interfaces/pbkdf2-result.d.ts.map +0 -1
  267. package/src/lib/interfaces/pbkdf2-result.js.map +0 -1
  268. package/src/lib/interfaces/server-init-result.d.ts +0 -34
  269. package/src/lib/interfaces/server-init-result.d.ts.map +0 -1
  270. package/src/lib/interfaces/server-init-result.js.map +0 -1
  271. package/src/lib/services/keyWrapping.d.ts +0 -61
  272. package/src/lib/services/keyWrapping.d.ts.map +0 -1
  273. package/src/lib/services/keyWrapping.js +0 -297
  274. package/src/lib/services/keyWrapping.js.map +0 -1
  275. package/src/lib/services/pbkdf2.d.ts +0 -6
  276. package/src/lib/services/pbkdf2.d.ts.map +0 -1
  277. package/src/lib/services/pbkdf2.js +0 -31
  278. package/src/lib/services/pbkdf2.js.map +0 -1
  279. package/src/lib/services/user.d.ts +0 -10
  280. package/src/lib/services/user.d.ts.map +0 -1
  281. package/src/lib/services/user.js +0 -11
  282. package/src/lib/services/user.js.map +0 -1
  283. /package/{README.md → brightchain-api-lib/README.md} +0 -0
@@ -0,0 +1,592 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.QuorumController = exports.QuorumErrorCode = void 0;
4
+ /* eslint-disable @typescript-eslint/no-explicit-any */
5
+ const brightchain_lib_1 = require("@brightchain/brightchain-lib");
6
+ const ecies_lib_1 = require("@digitaldefiance/ecies-lib");
7
+ const node_express_suite_1 = require("@digitaldefiance/node-express-suite");
8
+ const quorum_1 = require("../../services/quorum");
9
+ const errorResponse_1 = require("../../utils/errorResponse");
10
+ const base_1 = require("../base");
11
+ /**
12
+ * Error codes for quorum API operations
13
+ * @deprecated Use ErrorCode from '../../utils/errorResponse' instead
14
+ */
15
+ var QuorumErrorCode;
16
+ (function (QuorumErrorCode) {
17
+ QuorumErrorCode["MEMBER_NOT_FOUND"] = "MEMBER_NOT_FOUND";
18
+ QuorumErrorCode["DOCUMENT_NOT_FOUND"] = "DOCUMENT_NOT_FOUND";
19
+ QuorumErrorCode["INSUFFICIENT_SHARES"] = "INSUFFICIENT_SHARES";
20
+ QuorumErrorCode["SHARE_DECRYPTION_FAILED"] = "SHARE_DECRYPTION_FAILED";
21
+ QuorumErrorCode["INVALID_MEMBER_COUNT"] = "INVALID_MEMBER_COUNT";
22
+ QuorumErrorCode["INVALID_THRESHOLD"] = "INVALID_THRESHOLD";
23
+ QuorumErrorCode["VALIDATION_ERROR"] = "VALIDATION_ERROR";
24
+ QuorumErrorCode["UNAUTHORIZED"] = "UNAUTHORIZED";
25
+ QuorumErrorCode["INTERNAL_ERROR"] = "INTERNAL_ERROR";
26
+ })(QuorumErrorCode || (exports.QuorumErrorCode = QuorumErrorCode = {}));
27
+ /**
28
+ * Serialize a quorum member for API response
29
+ */
30
+ function serializeMember(member) {
31
+ return {
32
+ id: member.id,
33
+ publicKey: Buffer.from(member.publicKey).toString('hex'),
34
+ metadata: member.metadata,
35
+ isActive: member.isActive,
36
+ createdAt: member.createdAt.toISOString(),
37
+ updatedAt: member.updatedAt.toISOString(),
38
+ };
39
+ }
40
+ /**
41
+ * Controller for quorum operations including member management
42
+ * and document sealing/unsealing.
43
+ *
44
+ * Provides REST API endpoints for managing quorum members and performing
45
+ * secure multi-party document operations using Shamir's Secret Sharing.
46
+ *
47
+ * ## Endpoints
48
+ *
49
+ * ### Member Management
50
+ *
51
+ * #### POST /api/quorum/members
52
+ * Add a new member to the quorum with generated cryptographic keys.
53
+ *
54
+ * **Request Body:**
55
+ * - `name` (string, required): Member's display name
56
+ * - `email` (string, optional): Member's email address
57
+ * - `role` (string, optional): Member's role in the quorum
58
+ *
59
+ * **Response:** Member details and mnemonic for key recovery
60
+ *
61
+ * #### GET /api/quorum/members
62
+ * List all active quorum members.
63
+ *
64
+ * **Response:** Array of member objects with public keys and metadata
65
+ *
66
+ * #### DELETE /api/quorum/members/:memberId
67
+ * Remove a member from the quorum (deactivate).
68
+ *
69
+ * **Parameters:**
70
+ * - `memberId` (string, required): Member's unique identifier
71
+ *
72
+ * **Response:** Success confirmation
73
+ *
74
+ * ### Document Operations
75
+ *
76
+ * #### POST /api/quorum/documents/seal
77
+ * Seal a document using Shamir's Secret Sharing.
78
+ *
79
+ * **Request Body:**
80
+ * - `document` (any, required): Document to seal (JSON-serializable)
81
+ * - `memberIds` (string[], required): Array of member IDs (minimum 2)
82
+ * - `sharesRequired` (number, optional): Threshold for unsealing (default: all members)
83
+ *
84
+ * **Response:** Document ID and sealing metadata
85
+ *
86
+ * #### POST /api/quorum/documents/:documentId/unseal
87
+ * Unseal a document using member shares.
88
+ *
89
+ * **Parameters:**
90
+ * - `documentId` (string, required): Document's unique identifier
91
+ *
92
+ * **Request Body:**
93
+ * - `memberIds` (string[], required): Array of member IDs providing shares
94
+ *
95
+ * **Response:** Original document content
96
+ *
97
+ * #### GET /api/quorum/documents/:documentId
98
+ * Get metadata for a sealed document.
99
+ *
100
+ * **Parameters:**
101
+ * - `documentId` (string, required): Document's unique identifier
102
+ *
103
+ * **Response:** Document metadata (member IDs, threshold, creation date)
104
+ *
105
+ * #### GET /api/quorum/documents/:documentId/can-unlock
106
+ * Check if a set of members can unlock a document.
107
+ *
108
+ * **Parameters:**
109
+ * - `documentId` (string, required): Document's unique identifier
110
+ *
111
+ * **Query Parameters:**
112
+ * - `memberIds` (string, required): Comma-separated list of member IDs
113
+ *
114
+ * **Response:** Unlock status and share count information
115
+ *
116
+ * @requirements 7.1, 7.2, 7.3, 7.4, 8.1, 8.2, 8.3, 8.4, 8.5, 8.6, 9.1, 9.2, 9.3, 9.4, 9.5, 9.6, 10.1, 10.2, 10.3, 10.4, 12.1, 12.2, 12.3, 12.4, 12.5, 12.6, 12.7
117
+ */
118
+ class QuorumController extends base_1.BaseController {
119
+ constructor(application) {
120
+ super(application);
121
+ // === Member Management Handlers ===
122
+ /**
123
+ * POST /api/quorum/members
124
+ * Add a new member to the quorum with generated cryptographic keys.
125
+ *
126
+ * Creates a new member with ECIES key pair and adds them to the quorum.
127
+ * The mnemonic phrase is returned for key recovery - it should be stored
128
+ * securely by the user as it cannot be retrieved later.
129
+ *
130
+ * @param req - Request containing member name and optional metadata
131
+ * @returns Member details and mnemonic on success
132
+ *
133
+ * @example
134
+ * ```json
135
+ * // Request
136
+ * POST /api/quorum/members
137
+ * {
138
+ * "name": "Alice",
139
+ * "email": "alice@example.com",
140
+ * "role": "admin"
141
+ * }
142
+ *
143
+ * // Response
144
+ * {
145
+ * "message": "Member added successfully",
146
+ * "member": {
147
+ * "id": "abc123...",
148
+ * "publicKey": "04...",
149
+ * "metadata": { "name": "Alice", "email": "alice@example.com", "role": "admin" },
150
+ * "isActive": true,
151
+ * "createdAt": "2025-01-16T10:00:00Z",
152
+ * "updatedAt": "2025-01-16T10:00:00Z"
153
+ * },
154
+ * "mnemonic": "word1 word2 word3..."
155
+ * }
156
+ * ```
157
+ */
158
+ this.handleAddMember = async (req) => {
159
+ try {
160
+ const { name, email, role } = req.body;
161
+ // Validate required fields
162
+ if (!name) {
163
+ return (0, errorResponse_1.validationError)('Missing required field: name');
164
+ }
165
+ // Create a new member with generated keys
166
+ const eciesService = brightchain_lib_1.ServiceProvider.getInstance().eciesService;
167
+ const emailString = email
168
+ ? new ecies_lib_1.EmailString(email)
169
+ : new ecies_lib_1.EmailString(`${name.toLowerCase().replace(/\s+/g, '.')}@placeholder.local`);
170
+ const memberWithMnemonic = ecies_lib_1.Member.newMember(eciesService, ecies_lib_1.MemberType.User, name, emailString);
171
+ const metadata = {
172
+ name,
173
+ email,
174
+ role,
175
+ };
176
+ const quorumService = this.quorumServiceWrapper.getService();
177
+ const quorumMember = await quorumService.addMember(memberWithMnemonic.member, metadata);
178
+ return {
179
+ statusCode: 201,
180
+ response: {
181
+ message: 'Member added successfully',
182
+ member: serializeMember(quorumMember),
183
+ mnemonic: memberWithMnemonic.mnemonic.value ?? '',
184
+ },
185
+ };
186
+ }
187
+ catch (_error) {
188
+ if (_error instanceof brightchain_lib_1.QuorumError) {
189
+ return (0, errorResponse_1.mapQuorumError)(_error);
190
+ }
191
+ return (0, errorResponse_1.handleError)(_error);
192
+ }
193
+ };
194
+ /**
195
+ * GET /api/quorum/members
196
+ * List all active quorum members.
197
+ *
198
+ * Returns all members that are currently active in the quorum.
199
+ * Inactive (removed) members are not included in the response.
200
+ *
201
+ * @param _req - Request (no parameters required)
202
+ * @returns Array of member objects on success
203
+ *
204
+ * @example
205
+ * ```json
206
+ * // Request
207
+ * GET /api/quorum/members
208
+ *
209
+ * // Response
210
+ * {
211
+ * "message": "Members retrieved successfully",
212
+ * "members": [
213
+ * {
214
+ * "id": "abc123...",
215
+ * "publicKey": "04...",
216
+ * "metadata": { "name": "Alice", "role": "admin" },
217
+ * "isActive": true,
218
+ * "createdAt": "2025-01-16T10:00:00Z",
219
+ * "updatedAt": "2025-01-16T10:00:00Z"
220
+ * }
221
+ * ]
222
+ * }
223
+ * ```
224
+ */
225
+ this.handleListMembers = async (_req) => {
226
+ try {
227
+ const quorumService = this.quorumServiceWrapper.getService();
228
+ const members = await quorumService.listMembers();
229
+ return {
230
+ statusCode: 200,
231
+ response: {
232
+ message: 'Members retrieved successfully',
233
+ members: members.map(serializeMember),
234
+ },
235
+ };
236
+ }
237
+ catch (_error) {
238
+ if (_error instanceof brightchain_lib_1.QuorumError) {
239
+ return (0, errorResponse_1.mapQuorumError)(_error);
240
+ }
241
+ return (0, errorResponse_1.handleError)(_error);
242
+ }
243
+ };
244
+ /**
245
+ * DELETE /api/quorum/members/:memberId
246
+ * Remove a member from the quorum (deactivate).
247
+ *
248
+ * Marks the member as inactive. The member's access to existing documents
249
+ * they are part of is preserved, but they cannot be added to new documents.
250
+ *
251
+ * @param req - Request containing the member ID parameter
252
+ * @returns Success confirmation on success, or 404 if not found
253
+ *
254
+ * @example
255
+ * ```json
256
+ * // Request
257
+ * DELETE /api/quorum/members/abc123...
258
+ *
259
+ * // Response
260
+ * {
261
+ * "message": "Member removed successfully",
262
+ * "success": true,
263
+ * "memberId": "abc123..."
264
+ * }
265
+ * ```
266
+ */
267
+ this.handleRemoveMember = async (req) => {
268
+ try {
269
+ const { memberId } = req.params;
270
+ if (!memberId) {
271
+ return (0, errorResponse_1.validationError)('Missing required parameter: memberId');
272
+ }
273
+ const quorumService = this.quorumServiceWrapper.getService();
274
+ await quorumService.removeMember(memberId);
275
+ return {
276
+ statusCode: 200,
277
+ response: {
278
+ message: 'Member removed successfully',
279
+ success: true,
280
+ memberId,
281
+ },
282
+ };
283
+ }
284
+ catch (_error) {
285
+ if (_error instanceof brightchain_lib_1.QuorumError) {
286
+ return (0, errorResponse_1.mapQuorumError)(_error);
287
+ }
288
+ return (0, errorResponse_1.handleError)(_error);
289
+ }
290
+ };
291
+ // === Document Sealing/Unsealing Handlers ===
292
+ /**
293
+ * POST /api/quorum/documents/seal
294
+ * Seal a document using Shamir's Secret Sharing.
295
+ *
296
+ * Encrypts the document with a randomly generated symmetric key, then splits
297
+ * the key into shares using Shamir's Secret Sharing. Each share is encrypted
298
+ * with the corresponding member's public key.
299
+ *
300
+ * @param req - Request containing document, member IDs, and optional threshold
301
+ * @returns Document ID and sealing metadata on success
302
+ *
303
+ * @example
304
+ * ```json
305
+ * // Request
306
+ * POST /api/quorum/documents/seal
307
+ * {
308
+ * "document": { "secret": "data", "value": 42 },
309
+ * "memberIds": ["member1...", "member2...", "member3..."],
310
+ * "sharesRequired": 2
311
+ * }
312
+ *
313
+ * // Response
314
+ * {
315
+ * "message": "Document sealed successfully",
316
+ * "documentId": "doc123...",
317
+ * "memberIds": ["member1...", "member2...", "member3..."],
318
+ * "sharesRequired": 2,
319
+ * "createdAt": "2025-01-16T10:00:00Z"
320
+ * }
321
+ * ```
322
+ */
323
+ this.handleSealDocument = async (req) => {
324
+ try {
325
+ const { document, memberIds, sharesRequired } = req.body;
326
+ // Validate required fields
327
+ if (document === undefined) {
328
+ return (0, errorResponse_1.validationError)('Missing required field: document');
329
+ }
330
+ if (!memberIds || !Array.isArray(memberIds) || memberIds.length < 2) {
331
+ return (0, errorResponse_1.createApiErrorResult)(400, errorResponse_1.ErrorCode.INVALID_MEMBER_COUNT, 'At least 2 member IDs are required for sealing');
332
+ }
333
+ // Validate threshold if provided
334
+ if (sharesRequired !== undefined) {
335
+ if (sharesRequired < 2) {
336
+ return (0, errorResponse_1.createApiErrorResult)(400, errorResponse_1.ErrorCode.INVALID_THRESHOLD, 'sharesRequired must be at least 2');
337
+ }
338
+ if (sharesRequired > memberIds.length) {
339
+ return (0, errorResponse_1.createApiErrorResult)(400, errorResponse_1.ErrorCode.INVALID_THRESHOLD, 'sharesRequired cannot exceed the number of members');
340
+ }
341
+ }
342
+ // Get the agent (authenticated member) from session
343
+ const sessionsController = this.application.getController('sessions');
344
+ let agent;
345
+ try {
346
+ const sessionMember = sessionsController.getMemberFromSession(req.headers.authorization);
347
+ // Cast to GuidV4 member type - the session controller returns a generic Member
348
+ agent = sessionMember;
349
+ }
350
+ catch {
351
+ return (0, errorResponse_1.unauthorizedError)();
352
+ }
353
+ if (!agent) {
354
+ return (0, errorResponse_1.unauthorizedError)();
355
+ }
356
+ const quorumService = this.quorumServiceWrapper.getService();
357
+ const result = await quorumService.sealDocument(agent, document, memberIds, sharesRequired);
358
+ return {
359
+ statusCode: 201,
360
+ response: {
361
+ message: 'Document sealed successfully',
362
+ documentId: result.documentId,
363
+ memberIds: result.memberIds,
364
+ sharesRequired: result.sharesRequired,
365
+ createdAt: result.createdAt.toISOString(),
366
+ },
367
+ };
368
+ }
369
+ catch (_error) {
370
+ if (_error instanceof brightchain_lib_1.QuorumError) {
371
+ return (0, errorResponse_1.mapQuorumError)(_error);
372
+ }
373
+ return (0, errorResponse_1.handleError)(_error);
374
+ }
375
+ };
376
+ /**
377
+ * POST /api/quorum/documents/:documentId/unseal
378
+ * Unseal a document using member shares.
379
+ *
380
+ * Combines the provided member shares to reconstruct the symmetric key,
381
+ * then decrypts and returns the original document.
382
+ *
383
+ * Note: This endpoint requires members to have their private keys loaded,
384
+ * which is not yet fully implemented. Currently returns 501 Not Implemented.
385
+ *
386
+ * @param req - Request containing document ID and member IDs
387
+ * @returns Original document on success
388
+ *
389
+ * @example
390
+ * ```json
391
+ * // Request
392
+ * POST /api/quorum/documents/doc123.../unseal
393
+ * {
394
+ * "memberIds": ["member1...", "member2..."]
395
+ * }
396
+ *
397
+ * // Response (when implemented)
398
+ * {
399
+ * "message": "Document unsealed successfully",
400
+ * "document": { "secret": "data", "value": 42 }
401
+ * }
402
+ * ```
403
+ */
404
+ this.handleUnsealDocument = async (req) => {
405
+ try {
406
+ const { documentId } = req.params;
407
+ const { memberIds } = req.body;
408
+ if (!documentId) {
409
+ return (0, errorResponse_1.validationError)('Missing required parameter: documentId');
410
+ }
411
+ if (!memberIds || !Array.isArray(memberIds) || memberIds.length === 0) {
412
+ return (0, errorResponse_1.validationError)('Missing required field: memberIds (array of member IDs)');
413
+ }
414
+ // Note: In a real implementation, the members would need to provide their
415
+ // private keys or pre-decrypted shares. For now, we return a 501 status
416
+ // indicating this needs proper implementation with member authentication.
417
+ void this.quorumServiceWrapper.getService();
418
+ return (0, errorResponse_1.createApiErrorResult)(501, errorResponse_1.ErrorCode.NOT_IMPLEMENTED, 'Unseal operation requires members with loaded private keys. ' +
419
+ 'This endpoint needs proper member authentication implementation.');
420
+ }
421
+ catch (_error) {
422
+ if (_error instanceof brightchain_lib_1.QuorumError) {
423
+ return (0, errorResponse_1.mapQuorumError)(_error);
424
+ }
425
+ return (0, errorResponse_1.handleError)(_error);
426
+ }
427
+ };
428
+ /**
429
+ * GET /api/quorum/documents/:documentId
430
+ * Get metadata for a sealed document.
431
+ *
432
+ * Returns information about the document including which members have access
433
+ * and how many shares are required to unseal it.
434
+ *
435
+ * @param req - Request containing the document ID parameter
436
+ * @returns Document metadata on success, or 404 if not found
437
+ *
438
+ * @example
439
+ * ```json
440
+ * // Request
441
+ * GET /api/quorum/documents/doc123...
442
+ *
443
+ * // Response
444
+ * {
445
+ * "message": "Document retrieved successfully",
446
+ * "document": {
447
+ * "id": "doc123...",
448
+ * "memberIds": ["member1...", "member2...", "member3..."],
449
+ * "sharesRequired": 2,
450
+ * "createdAt": "2025-01-16T10:00:00Z",
451
+ * "creatorId": "creator..."
452
+ * }
453
+ * }
454
+ * ```
455
+ */
456
+ this.handleGetDocument = async (req) => {
457
+ try {
458
+ const { documentId } = req.params;
459
+ if (!documentId) {
460
+ return (0, errorResponse_1.validationError)('Missing required parameter: documentId');
461
+ }
462
+ const quorumService = this.quorumServiceWrapper.getService();
463
+ const document = await quorumService.getDocument(documentId);
464
+ if (!document) {
465
+ return (0, errorResponse_1.notFoundError)('Document', documentId);
466
+ }
467
+ return {
468
+ statusCode: 200,
469
+ response: {
470
+ message: 'Document retrieved successfully',
471
+ document,
472
+ },
473
+ };
474
+ }
475
+ catch (_error) {
476
+ if (_error instanceof brightchain_lib_1.QuorumError) {
477
+ return (0, errorResponse_1.mapQuorumError)(_error);
478
+ }
479
+ return (0, errorResponse_1.handleError)(_error);
480
+ }
481
+ };
482
+ /**
483
+ * GET /api/quorum/documents/:documentId/can-unlock
484
+ * Check if a set of members can unlock a document.
485
+ *
486
+ * Determines whether the provided members have enough shares to meet
487
+ * the threshold required to unseal the document.
488
+ *
489
+ * @param req - Request containing document ID and member IDs query parameter
490
+ * @returns Unlock status and share count information
491
+ *
492
+ * @example
493
+ * ```json
494
+ * // Request
495
+ * GET /api/quorum/documents/doc123.../can-unlock?memberIds=member1,member2
496
+ *
497
+ * // Response
498
+ * {
499
+ * "message": "Can-unlock check completed",
500
+ * "canUnlock": true,
501
+ * "sharesProvided": 2,
502
+ * "sharesRequired": 2,
503
+ * "missingMembers": ["member3..."]
504
+ * }
505
+ * ```
506
+ */
507
+ this.handleCanUnlock = async (req) => {
508
+ try {
509
+ const { documentId } = req.params;
510
+ const { memberIds: memberIdsStr } = req
511
+ .query;
512
+ if (!documentId) {
513
+ return (0, errorResponse_1.validationError)('Missing required parameter: documentId');
514
+ }
515
+ if (!memberIdsStr) {
516
+ return (0, errorResponse_1.validationError)('Missing required query parameter: memberIds (comma-separated)');
517
+ }
518
+ const memberIds = memberIdsStr
519
+ .split(',')
520
+ .map((id) => id.trim());
521
+ const quorumService = this.quorumServiceWrapper.getService();
522
+ const result = await quorumService.canUnlock(documentId, memberIds);
523
+ return {
524
+ statusCode: 200,
525
+ response: {
526
+ message: 'Can-unlock check completed',
527
+ ...result,
528
+ },
529
+ };
530
+ }
531
+ catch (_error) {
532
+ if (_error instanceof brightchain_lib_1.QuorumError) {
533
+ return (0, errorResponse_1.mapQuorumError)(_error);
534
+ }
535
+ return (0, errorResponse_1.handleError)(_error);
536
+ }
537
+ };
538
+ this.quorumServiceWrapper = new quorum_1.QuorumServiceWrapper(application);
539
+ }
540
+ initRouteDefinitions() {
541
+ this.routeDefinitions = [
542
+ // Member management endpoints
543
+ (0, node_express_suite_1.routeConfig)('post', '/members', {
544
+ useAuthentication: true,
545
+ useCryptoAuthentication: false,
546
+ handlerKey: 'addMember',
547
+ }),
548
+ (0, node_express_suite_1.routeConfig)('get', '/members', {
549
+ useAuthentication: true,
550
+ useCryptoAuthentication: false,
551
+ handlerKey: 'listMembers',
552
+ }),
553
+ (0, node_express_suite_1.routeConfig)('delete', '/members/:memberId', {
554
+ useAuthentication: true,
555
+ useCryptoAuthentication: false,
556
+ handlerKey: 'removeMember',
557
+ }),
558
+ // Document sealing/unsealing endpoints
559
+ (0, node_express_suite_1.routeConfig)('post', '/documents/seal', {
560
+ useAuthentication: true,
561
+ useCryptoAuthentication: false,
562
+ handlerKey: 'sealDocument',
563
+ }),
564
+ (0, node_express_suite_1.routeConfig)('post', '/documents/:documentId/unseal', {
565
+ useAuthentication: true,
566
+ useCryptoAuthentication: false,
567
+ handlerKey: 'unsealDocument',
568
+ }),
569
+ (0, node_express_suite_1.routeConfig)('get', '/documents/:documentId', {
570
+ useAuthentication: true,
571
+ useCryptoAuthentication: false,
572
+ handlerKey: 'getDocument',
573
+ }),
574
+ (0, node_express_suite_1.routeConfig)('get', '/documents/:documentId/can-unlock', {
575
+ useAuthentication: true,
576
+ useCryptoAuthentication: false,
577
+ handlerKey: 'canUnlock',
578
+ }),
579
+ ];
580
+ this.handlers = {
581
+ addMember: this.handleAddMember.bind(this),
582
+ listMembers: this.handleListMembers.bind(this),
583
+ removeMember: this.handleRemoveMember.bind(this),
584
+ sealDocument: this.handleSealDocument.bind(this),
585
+ unsealDocument: this.handleUnsealDocument.bind(this),
586
+ getDocument: this.handleGetDocument.bind(this),
587
+ canUnlock: this.handleCanUnlock.bind(this),
588
+ };
589
+ }
590
+ }
591
+ exports.QuorumController = QuorumController;
592
+ //# sourceMappingURL=quorum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quorum.js","sourceRoot":"","sources":["../../../../../../brightchain-api-lib/src/lib/controllers/api/quorum.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { Member } from '@digitaldefiance/ecies-lib';
2
+ import { CoreLanguageCode } from '@digitaldefiance/i18n-lib';
3
+ import { PlatformID } from '@digitaldefiance/node-ecies-lib';
4
+ import { ApiErrorResponse, ApiRequestHandler, IApiMessageResponse, TypedHandlers } from '@digitaldefiance/node-express-suite';
5
+ import { IBrightChainApplication } from '../../interfaces/application';
6
+ import { DefaultBackendIdType } from '../../shared-types';
7
+ import { BaseController } from '../base';
8
+ interface ISessionsHandlers extends TypedHandlers {
9
+ getSessions: ApiRequestHandler<IApiMessageResponse | ApiErrorResponse>;
10
+ }
11
+ /**
12
+ * Controller for session operations
13
+ */
14
+ export declare class SessionsController<TID extends PlatformID = DefaultBackendIdType> extends BaseController<TID, IApiMessageResponse | ApiErrorResponse, ISessionsHandlers, CoreLanguageCode> {
15
+ constructor(application: IBrightChainApplication<TID>);
16
+ protected initRouteDefinitions(): void;
17
+ getMemberFromSession(authorization: string): Member;
18
+ private handleGetSessions;
19
+ }
20
+ export {};
21
+ //# sourceMappingURL=sessions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../../../../../brightchain-api-lib/src/lib/controllers/api/sessions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EAEnB,aAAa,EACd,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,UAAU,iBAAkB,SAAQ,aAAa;IAC/C,WAAW,EAAE,iBAAiB,CAAC,mBAAmB,GAAG,gBAAgB,CAAC,CAAC;CACxE;AAED;;GAEG;AACH,qBAAa,kBAAkB,CAC7B,GAAG,SAAS,UAAU,GAAG,oBAAoB,CAC7C,SAAQ,cAAc,CACtB,GAAG,EACH,mBAAmB,GAAG,gBAAgB,EACtC,iBAAiB,EACjB,gBAAgB,CACjB;gBACa,WAAW,EAAE,uBAAuB,CAAC,GAAG,CAAC;IAIrD,SAAS,CAAC,oBAAoB,IAAI,IAAI;IAM/B,oBAAoB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM;IAM1D,OAAO,CAAC,iBAAiB,CAWvB;CACH"}
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SessionsController = void 0;
4
+ const base_1 = require("../base");
5
+ /**
6
+ * Controller for session operations
7
+ */
8
+ class SessionsController extends base_1.BaseController {
9
+ constructor(application) {
10
+ super(application);
11
+ this.handleGetSessions = async (req) => {
12
+ return {
13
+ statusCode: 200,
14
+ response: {
15
+ message: 'Sessions not implemented yet',
16
+ },
17
+ };
18
+ };
19
+ }
20
+ initRouteDefinitions() {
21
+ this.handlers = {
22
+ getSessions: this.handleGetSessions.bind(this),
23
+ };
24
+ }
25
+ getMemberFromSession(authorization) {
26
+ // Temporary implementation
27
+ // Temporary implementation - return null for now
28
+ return null;
29
+ }
30
+ }
31
+ exports.SessionsController = SessionsController;
32
+ //# sourceMappingURL=sessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../../../../../brightchain-api-lib/src/lib/controllers/api/sessions.ts"],"names":[],"mappings":";;;AAaA,kCAAyC;AAMzC;;GAEG;AACH,MAAa,kBAEX,SAAQ,qBAKT;IACC,YAAY,WAAyC;QACnD,KAAK,CAAC,WAAW,CAAC,CAAC;QAeb,sBAAiB,GAErB,KAAK,EACP,GAAG,EACmE,EAAE;YACxE,OAAO;gBACL,UAAU,EAAE,GAAG;gBACf,QAAQ,EAAE;oBACR,OAAO,EAAE,8BAA8B;iBACxC;aACF,CAAC;QACJ,CAAC,CAAC;IAzBF,CAAC;IAES,oBAAoB;QAC5B,IAAI,CAAC,QAAQ,GAAG;YACd,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;SAC/C,CAAC;IACJ,CAAC;IAEM,oBAAoB,CAAC,aAAqB;QAC/C,2BAA2B;QAC3B,iDAAiD;QACjD,OAAO,IAAW,CAAC;IACrB,CAAC;CAcF;AApCD,gDAoCC"}