@brightchain/brightchain-api-lib 0.14.0 → 0.16.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 (288) hide show
  1. package/package.json +5 -5
  2. package/src/browser.d.ts +13 -0
  3. package/src/browser.d.ts.map +1 -0
  4. package/src/browser.js +16 -0
  5. package/src/browser.js.map +1 -0
  6. package/src/index.d.ts +4 -1
  7. package/src/index.d.ts.map +1 -1
  8. package/src/index.js +6 -1
  9. package/src/index.js.map +1 -1
  10. package/src/lib/application-base.d.ts +8 -37
  11. package/src/lib/application-base.d.ts.map +1 -1
  12. package/src/lib/application-base.js +8 -80
  13. package/src/lib/application-base.js.map +1 -1
  14. package/src/lib/application.d.ts +37 -7
  15. package/src/lib/application.d.ts.map +1 -1
  16. package/src/lib/application.js +130 -118
  17. package/src/lib/application.js.map +1 -1
  18. package/src/lib/auth/aclEnforcedAvailability.d.ts +57 -0
  19. package/src/lib/auth/aclEnforcedAvailability.d.ts.map +1 -0
  20. package/src/lib/auth/aclEnforcedAvailability.js +87 -0
  21. package/src/lib/auth/aclEnforcedAvailability.js.map +1 -0
  22. package/src/lib/auth/aclEnforcedBlockStore.d.ts +66 -0
  23. package/src/lib/auth/aclEnforcedBlockStore.d.ts.map +1 -0
  24. package/src/lib/auth/aclEnforcedBlockStore.js +83 -0
  25. package/src/lib/auth/aclEnforcedBlockStore.js.map +1 -0
  26. package/src/lib/auth/ecdsaNodeAuthenticator.d.ts +46 -0
  27. package/src/lib/auth/ecdsaNodeAuthenticator.d.ts.map +1 -0
  28. package/src/lib/auth/ecdsaNodeAuthenticator.js +110 -0
  29. package/src/lib/auth/ecdsaNodeAuthenticator.js.map +1 -0
  30. package/src/lib/auth/index.d.ts +7 -0
  31. package/src/lib/auth/index.d.ts.map +1 -0
  32. package/src/lib/auth/index.js +13 -0
  33. package/src/lib/auth/index.js.map +1 -0
  34. package/src/lib/auth/poolAclBootstrap.d.ts +36 -0
  35. package/src/lib/auth/poolAclBootstrap.d.ts.map +1 -0
  36. package/src/lib/auth/poolAclBootstrap.js +64 -0
  37. package/src/lib/auth/poolAclBootstrap.js.map +1 -0
  38. package/src/lib/auth/poolAclStore.d.ts +77 -0
  39. package/src/lib/auth/poolAclStore.d.ts.map +1 -0
  40. package/src/lib/auth/poolAclStore.js +189 -0
  41. package/src/lib/auth/poolAclStore.js.map +1 -0
  42. package/src/lib/auth/poolAclUpdater.d.ts +79 -0
  43. package/src/lib/auth/poolAclUpdater.d.ts.map +1 -0
  44. package/src/lib/auth/poolAclUpdater.js +144 -0
  45. package/src/lib/auth/poolAclUpdater.js.map +1 -0
  46. package/src/lib/availability/availabilityService.d.ts +2 -2
  47. package/src/lib/availability/availabilityService.d.ts.map +1 -1
  48. package/src/lib/availability/availabilityService.js +12 -5
  49. package/src/lib/availability/availabilityService.js.map +1 -1
  50. package/src/lib/availability/blockRegistry.d.ts +45 -3
  51. package/src/lib/availability/blockRegistry.d.ts.map +1 -1
  52. package/src/lib/availability/blockRegistry.js +123 -5
  53. package/src/lib/availability/blockRegistry.js.map +1 -1
  54. package/src/lib/availability/discoveryProtocol.d.ts +30 -1
  55. package/src/lib/availability/discoveryProtocol.d.ts.map +1 -1
  56. package/src/lib/availability/discoveryProtocol.js +76 -0
  57. package/src/lib/availability/discoveryProtocol.js.map +1 -1
  58. package/src/lib/availability/gossipService.d.ts +45 -6
  59. package/src/lib/availability/gossipService.d.ts.map +1 -1
  60. package/src/lib/availability/gossipService.js +177 -5
  61. package/src/lib/availability/gossipService.js.map +1 -1
  62. package/src/lib/availability/reconciliationService.d.ts +88 -1
  63. package/src/lib/availability/reconciliationService.d.ts.map +1 -1
  64. package/src/lib/availability/reconciliationService.js +246 -48
  65. package/src/lib/availability/reconciliationService.js.map +1 -1
  66. package/src/lib/blockFetch/blockFetcher.d.ts +100 -0
  67. package/src/lib/blockFetch/blockFetcher.d.ts.map +1 -0
  68. package/src/lib/blockFetch/blockFetcher.js +279 -0
  69. package/src/lib/blockFetch/blockFetcher.js.map +1 -0
  70. package/src/lib/blockFetch/fetchQueue.d.ts +88 -0
  71. package/src/lib/blockFetch/fetchQueue.d.ts.map +1 -0
  72. package/src/lib/blockFetch/fetchQueue.js +204 -0
  73. package/src/lib/blockFetch/fetchQueue.js.map +1 -0
  74. package/src/lib/blockFetch/httpBlockFetchTransport.d.ts +65 -0
  75. package/src/lib/blockFetch/httpBlockFetchTransport.d.ts.map +1 -0
  76. package/src/lib/blockFetch/httpBlockFetchTransport.js +104 -0
  77. package/src/lib/blockFetch/httpBlockFetchTransport.js.map +1 -0
  78. package/src/lib/blockFetch/index.d.ts +10 -0
  79. package/src/lib/blockFetch/index.d.ts.map +1 -0
  80. package/src/lib/blockFetch/index.js +13 -0
  81. package/src/lib/blockFetch/index.js.map +1 -0
  82. package/src/lib/constants.js +2 -2
  83. package/src/lib/constants.js.map +1 -1
  84. package/src/lib/controllers/api/blocks.d.ts.map +1 -1
  85. package/src/lib/controllers/api/blocks.js +290 -290
  86. package/src/lib/controllers/api/blocks.js.map +1 -1
  87. package/src/lib/controllers/api/brightpass.d.ts +72 -0
  88. package/src/lib/controllers/api/brightpass.d.ts.map +1 -0
  89. package/src/lib/controllers/api/brightpass.js +577 -0
  90. package/src/lib/controllers/api/brightpass.js.map +1 -0
  91. package/src/lib/controllers/api/channels.d.ts +122 -0
  92. package/src/lib/controllers/api/channels.d.ts.map +1 -0
  93. package/src/lib/controllers/api/channels.js +701 -0
  94. package/src/lib/controllers/api/channels.js.map +1 -0
  95. package/src/lib/controllers/api/conversations.d.ts +89 -0
  96. package/src/lib/controllers/api/conversations.d.ts.map +1 -0
  97. package/src/lib/controllers/api/conversations.js +259 -0
  98. package/src/lib/controllers/api/conversations.js.map +1 -0
  99. package/src/lib/controllers/api/emails.d.ts +122 -0
  100. package/src/lib/controllers/api/emails.d.ts.map +1 -0
  101. package/src/lib/controllers/api/emails.js +494 -0
  102. package/src/lib/controllers/api/emails.js.map +1 -0
  103. package/src/lib/controllers/api/energy.d.ts.map +1 -1
  104. package/src/lib/controllers/api/energy.js +93 -93
  105. package/src/lib/controllers/api/energy.js.map +1 -1
  106. package/src/lib/controllers/api/explodingMessages.d.ts +79 -0
  107. package/src/lib/controllers/api/explodingMessages.d.ts.map +1 -0
  108. package/src/lib/controllers/api/explodingMessages.js +378 -0
  109. package/src/lib/controllers/api/explodingMessages.js.map +1 -0
  110. package/src/lib/controllers/api/groups.d.ts +94 -0
  111. package/src/lib/controllers/api/groups.d.ts.map +1 -0
  112. package/src/lib/controllers/api/groups.js +484 -0
  113. package/src/lib/controllers/api/groups.js.map +1 -0
  114. package/src/lib/controllers/api/i18n.d.ts.map +1 -1
  115. package/src/lib/controllers/api/i18n.js +8 -8
  116. package/src/lib/controllers/api/i18n.js.map +1 -1
  117. package/src/lib/controllers/api/index.d.ts +6 -0
  118. package/src/lib/controllers/api/index.d.ts.map +1 -1
  119. package/src/lib/controllers/api/index.js +6 -0
  120. package/src/lib/controllers/api/index.js.map +1 -1
  121. package/src/lib/controllers/api/messages.d.ts.map +1 -1
  122. package/src/lib/controllers/api/messages.js +2 -1
  123. package/src/lib/controllers/api/messages.js.map +1 -1
  124. package/src/lib/controllers/api/quorum.d.ts.map +1 -1
  125. package/src/lib/controllers/api/quorum.js +483 -483
  126. package/src/lib/controllers/api/quorum.js.map +1 -1
  127. package/src/lib/controllers/api/sessions.d.ts.map +1 -1
  128. package/src/lib/controllers/api/sessions.js +8 -8
  129. package/src/lib/controllers/api/sessions.js.map +1 -1
  130. package/src/lib/controllers/api/sync.d.ts +38 -2
  131. package/src/lib/controllers/api/sync.d.ts.map +1 -1
  132. package/src/lib/controllers/api/sync.js +89 -0
  133. package/src/lib/controllers/api/sync.js.map +1 -1
  134. package/src/lib/controllers/api/user.d.ts.map +1 -1
  135. package/src/lib/controllers/api/user.js +180 -180
  136. package/src/lib/controllers/api/user.js.map +1 -1
  137. package/src/lib/controllers/crypto/gitController.d.ts +70 -0
  138. package/src/lib/controllers/crypto/gitController.d.ts.map +1 -0
  139. package/src/lib/controllers/crypto/gitController.js +306 -0
  140. package/src/lib/controllers/crypto/gitController.js.map +1 -0
  141. package/src/lib/controllers/crypto/index.d.ts +3 -0
  142. package/src/lib/controllers/crypto/index.d.ts.map +1 -0
  143. package/src/lib/controllers/crypto/index.js +6 -0
  144. package/src/lib/controllers/crypto/index.js.map +1 -0
  145. package/src/lib/controllers/crypto/walletController.d.ts +64 -0
  146. package/src/lib/controllers/crypto/walletController.d.ts.map +1 -0
  147. package/src/lib/controllers/crypto/walletController.js +260 -0
  148. package/src/lib/controllers/crypto/walletController.js.map +1 -0
  149. package/src/lib/controllers/identity/deviceController.d.ts +96 -0
  150. package/src/lib/controllers/identity/deviceController.d.ts.map +1 -0
  151. package/src/lib/controllers/identity/deviceController.js +355 -0
  152. package/src/lib/controllers/identity/deviceController.js.map +1 -0
  153. package/src/lib/controllers/identity/directoryController.d.ts +75 -0
  154. package/src/lib/controllers/identity/directoryController.d.ts.map +1 -0
  155. package/src/lib/controllers/identity/directoryController.js +288 -0
  156. package/src/lib/controllers/identity/directoryController.js.map +1 -0
  157. package/src/lib/controllers/identity/identityProofController.d.ts +94 -0
  158. package/src/lib/controllers/identity/identityProofController.d.ts.map +1 -0
  159. package/src/lib/controllers/identity/identityProofController.js +454 -0
  160. package/src/lib/controllers/identity/identityProofController.js.map +1 -0
  161. package/src/lib/controllers/identity/index.d.ts +4 -0
  162. package/src/lib/controllers/identity/index.d.ts.map +1 -0
  163. package/src/lib/controllers/identity/index.js +7 -0
  164. package/src/lib/controllers/identity/index.js.map +1 -0
  165. package/src/lib/controllers/index.d.ts +2 -0
  166. package/src/lib/controllers/index.d.ts.map +1 -1
  167. package/src/lib/controllers/index.js +2 -0
  168. package/src/lib/controllers/index.js.map +1 -1
  169. package/src/lib/encryption/encryptedMetadataService.d.ts +87 -0
  170. package/src/lib/encryption/encryptedMetadataService.d.ts.map +1 -0
  171. package/src/lib/encryption/encryptedMetadataService.js +224 -0
  172. package/src/lib/encryption/encryptedMetadataService.js.map +1 -0
  173. package/src/lib/encryption/encryptionAwareReplication.d.ts +76 -0
  174. package/src/lib/encryption/encryptionAwareReplication.d.ts.map +1 -0
  175. package/src/lib/encryption/encryptionAwareReplication.js +116 -0
  176. package/src/lib/encryption/encryptionAwareReplication.js.map +1 -0
  177. package/src/lib/encryption/errors.d.ts +49 -0
  178. package/src/lib/encryption/errors.d.ts.map +1 -0
  179. package/src/lib/encryption/errors.js +80 -0
  180. package/src/lib/encryption/errors.js.map +1 -0
  181. package/src/lib/encryption/index.d.ts +6 -0
  182. package/src/lib/encryption/index.d.ts.map +1 -0
  183. package/src/lib/encryption/index.js +9 -0
  184. package/src/lib/encryption/index.js.map +1 -0
  185. package/src/lib/encryption/poolEncryptionService.d.ts +94 -0
  186. package/src/lib/encryption/poolEncryptionService.d.ts.map +1 -0
  187. package/src/lib/encryption/poolEncryptionService.js +252 -0
  188. package/src/lib/encryption/poolEncryptionService.js.map +1 -0
  189. package/src/lib/encryption/poolKeyManager.d.ts +82 -0
  190. package/src/lib/encryption/poolKeyManager.d.ts.map +1 -0
  191. package/src/lib/encryption/poolKeyManager.js +156 -0
  192. package/src/lib/encryption/poolKeyManager.js.map +1 -0
  193. package/src/lib/environment.d.ts +3 -0
  194. package/src/lib/environment.d.ts.map +1 -1
  195. package/src/lib/environment.js +5 -0
  196. package/src/lib/environment.js.map +1 -1
  197. package/src/lib/interfaces/application.d.ts +7 -1
  198. package/src/lib/interfaces/application.d.ts.map +1 -1
  199. package/src/lib/interfaces/brightchain-init-result.d.ts +17 -0
  200. package/src/lib/interfaces/brightchain-init-result.d.ts.map +1 -0
  201. package/src/lib/interfaces/brightchain-init-result.js +9 -0
  202. package/src/lib/interfaces/brightchain-init-result.js.map +1 -0
  203. package/src/lib/interfaces/environment.d.ts +7 -1
  204. package/src/lib/interfaces/environment.d.ts.map +1 -1
  205. package/src/lib/interfaces/index.d.ts +1 -1
  206. package/src/lib/interfaces/index.d.ts.map +1 -1
  207. package/src/lib/interfaces/requests/getBlockDataRequest.d.ts +12 -0
  208. package/src/lib/interfaces/requests/getBlockDataRequest.d.ts.map +1 -0
  209. package/src/lib/interfaces/{blockStore.js → requests/getBlockDataRequest.js} +1 -1
  210. package/src/lib/interfaces/requests/getBlockDataRequest.js.map +1 -0
  211. package/src/lib/interfaces/requests/index.d.ts +1 -0
  212. package/src/lib/interfaces/requests/index.d.ts.map +1 -1
  213. package/src/lib/routers/api.d.ts +54 -1
  214. package/src/lib/routers/api.d.ts.map +1 -1
  215. package/src/lib/routers/api.js +77 -0
  216. package/src/lib/routers/api.js.map +1 -1
  217. package/src/lib/routers/app.d.ts +22 -14
  218. package/src/lib/routers/app.d.ts.map +1 -1
  219. package/src/lib/routers/app.js +28 -116
  220. package/src/lib/routers/app.js.map +1 -1
  221. package/src/lib/services/blockStore.d.ts +5 -2
  222. package/src/lib/services/blockStore.d.ts.map +1 -1
  223. package/src/lib/services/blockStore.js +4 -0
  224. package/src/lib/services/blockStore.js.map +1 -1
  225. package/src/lib/services/brightpass/auditLogger.d.ts +77 -0
  226. package/src/lib/services/brightpass/auditLogger.d.ts.map +1 -0
  227. package/src/lib/services/brightpass/auditLogger.js +184 -0
  228. package/src/lib/services/brightpass/auditLogger.js.map +1 -0
  229. package/src/lib/services/brightpass/vaultEncryption.d.ts +82 -0
  230. package/src/lib/services/brightpass/vaultEncryption.d.ts.map +1 -0
  231. package/src/lib/services/brightpass/vaultEncryption.js +144 -0
  232. package/src/lib/services/brightpass/vaultEncryption.js.map +1 -0
  233. package/src/lib/services/brightpass.d.ts +294 -0
  234. package/src/lib/services/brightpass.d.ts.map +1 -0
  235. package/src/lib/services/brightpass.js +1260 -0
  236. package/src/lib/services/brightpass.js.map +1 -0
  237. package/src/lib/services/brightpass.property.helpers.d.ts +23 -0
  238. package/src/lib/services/brightpass.property.helpers.d.ts.map +1 -0
  239. package/src/lib/services/brightpass.property.helpers.js +113 -0
  240. package/src/lib/services/brightpass.property.helpers.js.map +1 -0
  241. package/src/lib/services/eventNotificationSystem.d.ts +69 -3
  242. package/src/lib/services/eventNotificationSystem.d.ts.map +1 -1
  243. package/src/lib/services/eventNotificationSystem.js +200 -0
  244. package/src/lib/services/eventNotificationSystem.js.map +1 -1
  245. package/src/lib/services/expirationScheduler.d.ts +90 -0
  246. package/src/lib/services/expirationScheduler.d.ts.map +1 -0
  247. package/src/lib/services/expirationScheduler.js +131 -0
  248. package/src/lib/services/expirationScheduler.js.map +1 -0
  249. package/src/lib/services/fecUsageExample.d.ts +2 -2
  250. package/src/lib/services/index.d.ts +2 -0
  251. package/src/lib/services/index.d.ts.map +1 -1
  252. package/src/lib/services/index.js +2 -0
  253. package/src/lib/services/index.js.map +1 -1
  254. package/src/lib/services/paginationService.d.ts +18 -0
  255. package/src/lib/services/paginationService.d.ts.map +1 -0
  256. package/src/lib/services/paginationService.js +32 -0
  257. package/src/lib/services/paginationService.js.map +1 -0
  258. package/src/lib/services/presenceService.d.ts +76 -0
  259. package/src/lib/services/presenceService.d.ts.map +1 -0
  260. package/src/lib/services/presenceService.js +143 -0
  261. package/src/lib/services/presenceService.js.map +1 -0
  262. package/src/lib/services/wireConversationPromotion.d.ts +23 -0
  263. package/src/lib/services/wireConversationPromotion.d.ts.map +1 -0
  264. package/src/lib/services/wireConversationPromotion.js +26 -0
  265. package/src/lib/services/wireConversationPromotion.js.map +1 -0
  266. package/src/lib/stores/availabilityAwareBlockStore.d.ts +115 -10
  267. package/src/lib/stores/availabilityAwareBlockStore.d.ts.map +1 -1
  268. package/src/lib/stores/availabilityAwareBlockStore.js +267 -23
  269. package/src/lib/stores/availabilityAwareBlockStore.js.map +1 -1
  270. package/src/lib/stores/diskBlockAsyncStore.d.ts +81 -2
  271. package/src/lib/stores/diskBlockAsyncStore.d.ts.map +1 -1
  272. package/src/lib/stores/diskBlockAsyncStore.js +297 -10
  273. package/src/lib/stores/diskBlockAsyncStore.js.map +1 -1
  274. package/src/lib/upstream-stubs.d.ts +36 -0
  275. package/src/lib/upstream-stubs.d.ts.map +1 -0
  276. package/src/lib/upstream-stubs.js +43 -0
  277. package/src/lib/upstream-stubs.js.map +1 -0
  278. package/src/lib/utils/communicationValidation.d.ts +44 -0
  279. package/src/lib/utils/communicationValidation.d.ts.map +1 -0
  280. package/src/lib/utils/communicationValidation.js +291 -0
  281. package/src/lib/utils/communicationValidation.js.map +1 -0
  282. package/src/lib/utils/emailValidation.d.ts +19 -0
  283. package/src/lib/utils/emailValidation.d.ts.map +1 -0
  284. package/src/lib/utils/emailValidation.js +232 -0
  285. package/src/lib/utils/emailValidation.js.map +1 -0
  286. package/src/lib/interfaces/blockStore.d.ts +0 -7
  287. package/src/lib/interfaces/blockStore.d.ts.map +0 -1
  288. package/src/lib/interfaces/blockStore.js.map +0 -1
@@ -0,0 +1,306 @@
1
+ "use strict";
2
+ /**
3
+ * GitController — REST API for Git commit/tag signing operations.
4
+ *
5
+ * Routes:
6
+ * POST /sign-commit — Sign a Git commit
7
+ * POST /sign-tag — Sign a Git tag
8
+ * POST /verify — Verify a Git signature
9
+ * POST /export-public-key — Export the signing public key in PGP format
10
+ *
11
+ * Requirements: 7.1-7.10
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.GitController = void 0;
15
+ const gitSigningService_1 = require("@brightchain/brightchain-lib/lib/services/crypto/gitSigningService");
16
+ const node_express_suite_1 = require("@digitaldefiance/node-express-suite");
17
+ const errorResponse_1 = require("../../utils/errorResponse");
18
+ const base_1 = require("../base");
19
+ // ─── Controller ─────────────────────────────────────────────────────────────
20
+ /**
21
+ * Controller for Git commit and tag signing operations.
22
+ *
23
+ * Delegates to {@link GitSigningService} in brightchain-lib for
24
+ * core signing logic including ECDSA signing over SHA-256 hashes
25
+ * wrapped in PGP-armored format.
26
+ *
27
+ * @requirements 7.1, 7.2, 7.3, 7.4, 7.5
28
+ */
29
+ class GitController extends base_1.BaseController {
30
+ constructor(application) {
31
+ super(application);
32
+ }
33
+ // ─── Route definitions ──────────────────────────────────────────────────
34
+ initRouteDefinitions() {
35
+ const noAuth = {
36
+ useAuthentication: false,
37
+ useCryptoAuthentication: false,
38
+ };
39
+ this.routeDefinitions = [
40
+ (0, node_express_suite_1.routeConfig)('post', '/sign-commit', {
41
+ ...noAuth,
42
+ handlerKey: 'signCommit',
43
+ openapi: {
44
+ summary: 'Sign a Git commit',
45
+ description: 'Signs a Git commit payload using ECDSA over SHA-256, producing a PGP-armored signature.',
46
+ tags: ['Git'],
47
+ responses: {
48
+ 200: {
49
+ schema: 'SignCommitResponse',
50
+ description: 'Commit signed successfully',
51
+ },
52
+ 400: {
53
+ schema: 'ApiErrorResponse',
54
+ description: 'Invalid paper key or missing content',
55
+ },
56
+ },
57
+ },
58
+ }),
59
+ (0, node_express_suite_1.routeConfig)('post', '/sign-tag', {
60
+ ...noAuth,
61
+ handlerKey: 'signTag',
62
+ openapi: {
63
+ summary: 'Sign a Git tag',
64
+ description: 'Signs a Git tag payload using ECDSA over SHA-256, producing a PGP-armored signature.',
65
+ tags: ['Git'],
66
+ responses: {
67
+ 200: {
68
+ schema: 'SignTagResponse',
69
+ description: 'Tag signed successfully',
70
+ },
71
+ 400: {
72
+ schema: 'ApiErrorResponse',
73
+ description: 'Invalid paper key or missing content',
74
+ },
75
+ },
76
+ },
77
+ }),
78
+ (0, node_express_suite_1.routeConfig)('post', '/verify', {
79
+ ...noAuth,
80
+ handlerKey: 'verifySignature',
81
+ openapi: {
82
+ summary: 'Verify a Git signature',
83
+ description: 'Verifies a Git commit or tag signature using the signer public key or paper key.',
84
+ tags: ['Git'],
85
+ responses: {
86
+ 200: {
87
+ schema: 'VerifyGitSignatureResponse',
88
+ description: 'Verification result',
89
+ },
90
+ 400: {
91
+ schema: 'ApiErrorResponse',
92
+ description: 'Missing required fields',
93
+ },
94
+ },
95
+ },
96
+ }),
97
+ (0, node_express_suite_1.routeConfig)('post', '/export-public-key', {
98
+ ...noAuth,
99
+ handlerKey: 'exportPublicKey',
100
+ openapi: {
101
+ summary: 'Export Git signing public key',
102
+ description: 'Exports the Git signing public key in PGP-armored format for GPG keyring import.',
103
+ tags: ['Git'],
104
+ responses: {
105
+ 200: {
106
+ schema: 'ExportGitPublicKeyResponse',
107
+ description: 'Public key exported successfully',
108
+ },
109
+ 400: {
110
+ schema: 'ApiErrorResponse',
111
+ description: 'Invalid paper key',
112
+ },
113
+ },
114
+ },
115
+ }),
116
+ ];
117
+ this.handlers = {
118
+ signCommit: this.handleSignCommit.bind(this),
119
+ signTag: this.handleSignTag.bind(this),
120
+ verifySignature: this.handleVerifySignature.bind(this),
121
+ exportPublicKey: this.handleExportPublicKey.bind(this),
122
+ };
123
+ }
124
+ // ─── Handlers ─────────────────────────────────────────────────────────
125
+ /**
126
+ * POST /sign-commit — Sign a Git commit.
127
+ *
128
+ * @requirements 7.1, 7.2
129
+ */
130
+ async handleSignCommit(req) {
131
+ try {
132
+ const { paperKey, commitContent } = req.body;
133
+ if (!paperKey || typeof paperKey !== 'string') {
134
+ return (0, errorResponse_1.validationError)('Missing required field: paperKey');
135
+ }
136
+ if (!commitContent || typeof commitContent !== 'string') {
137
+ return (0, errorResponse_1.validationError)('Missing required field: commitContent');
138
+ }
139
+ const result = gitSigningService_1.GitSigningService.signCommit(paperKey, commitContent);
140
+ return {
141
+ statusCode: 200,
142
+ response: {
143
+ status: 'success',
144
+ data: {
145
+ memberId: '',
146
+ objectType: 'commit',
147
+ contentHashHex: result.contentHashHex,
148
+ armoredSignature: result.armoredSignature,
149
+ signatureHex: result.signatureHex,
150
+ derivationPath: result.derivationPath,
151
+ signedAt: new Date(),
152
+ },
153
+ message: 'Commit signed successfully',
154
+ },
155
+ };
156
+ }
157
+ catch (error) {
158
+ return this.mapGitError(error);
159
+ }
160
+ }
161
+ /**
162
+ * POST /sign-tag — Sign a Git tag.
163
+ *
164
+ * @requirements 7.3
165
+ */
166
+ async handleSignTag(req) {
167
+ try {
168
+ const { paperKey, tagContent } = req.body;
169
+ if (!paperKey || typeof paperKey !== 'string') {
170
+ return (0, errorResponse_1.validationError)('Missing required field: paperKey');
171
+ }
172
+ if (!tagContent || typeof tagContent !== 'string') {
173
+ return (0, errorResponse_1.validationError)('Missing required field: tagContent');
174
+ }
175
+ const result = gitSigningService_1.GitSigningService.signTag(paperKey, tagContent);
176
+ return {
177
+ statusCode: 200,
178
+ response: {
179
+ status: 'success',
180
+ data: {
181
+ memberId: '',
182
+ objectType: 'tag',
183
+ contentHashHex: result.contentHashHex,
184
+ armoredSignature: result.armoredSignature,
185
+ signatureHex: result.signatureHex,
186
+ derivationPath: result.derivationPath,
187
+ signedAt: new Date(),
188
+ },
189
+ message: 'Tag signed successfully',
190
+ },
191
+ };
192
+ }
193
+ catch (error) {
194
+ return this.mapGitError(error);
195
+ }
196
+ }
197
+ /**
198
+ * POST /verify — Verify a Git signature.
199
+ *
200
+ * Supports verification by paper key or by raw public key hex.
201
+ *
202
+ * @requirements 7.4
203
+ */
204
+ async handleVerifySignature(req) {
205
+ try {
206
+ const { content, signatureHex, contentHashHex, armoredSignature, derivationPath, paperKey, publicKeyHex, } = req.body;
207
+ if (!content || typeof content !== 'string') {
208
+ return (0, errorResponse_1.validationError)('Missing required field: content');
209
+ }
210
+ if (!signatureHex || typeof signatureHex !== 'string') {
211
+ return (0, errorResponse_1.validationError)('Missing required field: signatureHex');
212
+ }
213
+ if (!paperKey && !publicKeyHex) {
214
+ return (0, errorResponse_1.validationError)('Either paperKey or publicKeyHex must be provided');
215
+ }
216
+ const sigResult = {
217
+ armoredSignature: armoredSignature ?? '',
218
+ signatureHex,
219
+ contentHashHex: contentHashHex ?? '',
220
+ derivationPath: derivationPath ?? "m/44'/60'/0'/2/0",
221
+ };
222
+ let valid;
223
+ let verifyPubKeyHex;
224
+ let fingerprint;
225
+ if (publicKeyHex) {
226
+ valid = gitSigningService_1.GitSigningService.verifyWithPublicKey(content, sigResult, publicKeyHex);
227
+ verifyPubKeyHex = publicKeyHex;
228
+ fingerprint = '';
229
+ }
230
+ else {
231
+ valid = gitSigningService_1.GitSigningService.verify(content, sigResult, paperKey);
232
+ const exported = gitSigningService_1.GitSigningService.exportPublicKey(paperKey);
233
+ verifyPubKeyHex = exported.publicKeyHex;
234
+ fingerprint = exported.fingerprint;
235
+ }
236
+ return {
237
+ statusCode: 200,
238
+ response: {
239
+ status: 'success',
240
+ data: {
241
+ valid,
242
+ publicKeyHex: verifyPubKeyHex,
243
+ fingerprint,
244
+ verifiedAt: new Date(),
245
+ },
246
+ message: valid
247
+ ? 'Signature is valid'
248
+ : 'Signature verification failed',
249
+ },
250
+ };
251
+ }
252
+ catch (error) {
253
+ return this.mapGitError(error);
254
+ }
255
+ }
256
+ /**
257
+ * POST /export-public-key — Export the Git signing public key.
258
+ *
259
+ * @requirements 7.5
260
+ */
261
+ async handleExportPublicKey(req) {
262
+ try {
263
+ const { paperKey } = req.body;
264
+ if (!paperKey || typeof paperKey !== 'string') {
265
+ return (0, errorResponse_1.validationError)('Missing required field: paperKey');
266
+ }
267
+ const result = gitSigningService_1.GitSigningService.exportPublicKey(paperKey);
268
+ return {
269
+ statusCode: 200,
270
+ response: {
271
+ status: 'success',
272
+ data: {
273
+ memberId: '',
274
+ armoredPublicKey: result.armoredPublicKey,
275
+ publicKeyHex: result.publicKeyHex,
276
+ fingerprint: result.fingerprint,
277
+ derivationPath: result.derivationPath,
278
+ exportedAt: new Date(),
279
+ },
280
+ message: 'Public key exported successfully',
281
+ },
282
+ };
283
+ }
284
+ catch (error) {
285
+ return this.mapGitError(error);
286
+ }
287
+ }
288
+ // ─── Error mapping ──────────────────────────────────────────────────
289
+ /**
290
+ * Map Git signing errors to appropriate HTTP responses.
291
+ */
292
+ mapGitError(error) {
293
+ if (error instanceof gitSigningService_1.GitSigningError) {
294
+ return {
295
+ statusCode: 400,
296
+ response: {
297
+ message: error.message,
298
+ error: 'GIT_SIGNING_ERROR',
299
+ },
300
+ };
301
+ }
302
+ return (0, errorResponse_1.handleError)(error);
303
+ }
304
+ }
305
+ exports.GitController = GitController;
306
+ //# sourceMappingURL=gitController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitController.js","sourceRoot":"","sources":["../../../../../../brightchain-api-lib/src/lib/controllers/crypto/gitController.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from './gitController';
2
+ export * from './walletController';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../brightchain-api-lib/src/lib/controllers/crypto/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./gitController"), exports);
5
+ tslib_1.__exportStar(require("./walletController"), exports);
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../brightchain-api-lib/src/lib/controllers/crypto/index.ts"],"names":[],"mappings":";;;AAAA,0DAAgC;AAChC,6DAAmC"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * WalletController — REST API for Ethereum wallet operations.
3
+ *
4
+ * Routes:
5
+ * POST /derive-address — Derive an Ethereum address from a paper key
6
+ * POST /sign-message — Sign a message with the member's key
7
+ * POST /verify-signature — Verify a signed message
8
+ * GET /address — Get the wallet address for a member
9
+ *
10
+ * Requirements: 6.1-6.10
11
+ */
12
+ import type { IDeriveAddressResponse, IGetWalletResponse, ISignMessageResponse, IVerifySignatureResponse } from '@brightchain/brightchain-lib/lib/interfaces/responses/cryptoResponses';
13
+ import { PlatformID } from '@digitaldefiance/ecies-lib';
14
+ import { CoreLanguageCode } from '@digitaldefiance/i18n-lib';
15
+ import { ApiErrorResponse, ApiRequestHandler, TypedHandlers } from '@digitaldefiance/node-express-suite';
16
+ import { IBrightChainApplication } from '../../interfaces/application';
17
+ import { DefaultBackendIdType } from '../../shared-types';
18
+ import { BaseController } from '../base';
19
+ type WalletApiResponse = IDeriveAddressResponse | ISignMessageResponse | IVerifySignatureResponse | IGetWalletResponse | ApiErrorResponse;
20
+ interface WalletHandlers extends TypedHandlers {
21
+ deriveAddress: ApiRequestHandler<IDeriveAddressResponse | ApiErrorResponse>;
22
+ signMessage: ApiRequestHandler<ISignMessageResponse | ApiErrorResponse>;
23
+ verifySignature: ApiRequestHandler<IVerifySignatureResponse | ApiErrorResponse>;
24
+ getWallet: ApiRequestHandler<IGetWalletResponse | ApiErrorResponse>;
25
+ }
26
+ /**
27
+ * Controller for Ethereum wallet operations.
28
+ *
29
+ * Delegates to {@link EthereumWalletService} in brightchain-lib for
30
+ * core wallet logic including address derivation, message signing,
31
+ * and signature verification.
32
+ *
33
+ * @requirements 6.1, 6.2, 6.3, 6.7, 6.8
34
+ */
35
+ export declare class WalletController<TID extends PlatformID = DefaultBackendIdType> extends BaseController<TID, WalletApiResponse, WalletHandlers, CoreLanguageCode> {
36
+ constructor(application: IBrightChainApplication<TID>);
37
+ protected initRouteDefinitions(): void;
38
+ /**
39
+ * POST /derive-address — Derive an Ethereum address from a paper key.
40
+ *
41
+ * @requirements 6.1, 6.4
42
+ */
43
+ private handleDeriveAddress;
44
+ /**
45
+ * POST /sign-message — Sign a message with the member's Ethereum key.
46
+ *
47
+ * @requirements 6.2, 6.3
48
+ */
49
+ private handleSignMessage;
50
+ /**
51
+ * POST /verify-signature — Verify a signed message.
52
+ *
53
+ * @requirements 6.7, 6.8
54
+ */
55
+ private handleVerifySignature;
56
+ /**
57
+ * GET /address — Get the wallet address for a paper key.
58
+ *
59
+ * @requirements 6.1
60
+ */
61
+ private handleGetWallet;
62
+ }
63
+ export {};
64
+ //# sourceMappingURL=walletController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walletController.d.ts","sourceRoot":"","sources":["../../../../../../brightchain-api-lib/src/lib/controllers/crypto/walletController.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EACV,sBAAsB,EACtB,kBAAkB,EAClB,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,uEAAuE,CAAC;AAE/E,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EAEd,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAIzC,KAAK,iBAAiB,GAClB,sBAAsB,GACtB,oBAAoB,GACpB,wBAAwB,GACxB,kBAAkB,GAClB,gBAAgB,CAAC;AAIrB,UAAU,cAAe,SAAQ,aAAa;IAC5C,aAAa,EAAE,iBAAiB,CAAC,sBAAsB,GAAG,gBAAgB,CAAC,CAAC;IAC5E,WAAW,EAAE,iBAAiB,CAAC,oBAAoB,GAAG,gBAAgB,CAAC,CAAC;IACxE,eAAe,EAAE,iBAAiB,CAChC,wBAAwB,GAAG,gBAAgB,CAC5C,CAAC;IACF,SAAS,EAAE,iBAAiB,CAAC,kBAAkB,GAAG,gBAAgB,CAAC,CAAC;CACrE;AAgCD;;;;;;;;GAQG;AACH,qBAAa,gBAAgB,CAC3B,GAAG,SAAS,UAAU,GAAG,oBAAoB,CAC7C,SAAQ,cAAc,CACtB,GAAG,EACH,iBAAiB,EACjB,cAAc,EACd,gBAAgB,CACjB;gBACa,WAAW,EAAE,uBAAuB,CAAC,GAAG,CAAC;IAMrD,SAAS,CAAC,oBAAoB,IAAI,IAAI;IAmGtC;;;;OAIG;YACW,mBAAmB;IAiCjC;;;;OAIG;YACW,iBAAiB;IAkC/B;;;;OAIG;YACW,qBAAqB;IA0CnC;;;;OAIG;YACW,eAAe;CA+B9B"}
@@ -0,0 +1,260 @@
1
+ "use strict";
2
+ /**
3
+ * WalletController — REST API for Ethereum wallet operations.
4
+ *
5
+ * Routes:
6
+ * POST /derive-address — Derive an Ethereum address from a paper key
7
+ * POST /sign-message — Sign a message with the member's key
8
+ * POST /verify-signature — Verify a signed message
9
+ * GET /address — Get the wallet address for a member
10
+ *
11
+ * Requirements: 6.1-6.10
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.WalletController = void 0;
15
+ const ethereumWalletService_1 = require("@brightchain/brightchain-lib/lib/services/crypto/ethereumWalletService");
16
+ const node_express_suite_1 = require("@digitaldefiance/node-express-suite");
17
+ const errorResponse_1 = require("../../utils/errorResponse");
18
+ const base_1 = require("../base");
19
+ // ─── Controller ─────────────────────────────────────────────────────────────
20
+ /**
21
+ * Controller for Ethereum wallet operations.
22
+ *
23
+ * Delegates to {@link EthereumWalletService} in brightchain-lib for
24
+ * core wallet logic including address derivation, message signing,
25
+ * and signature verification.
26
+ *
27
+ * @requirements 6.1, 6.2, 6.3, 6.7, 6.8
28
+ */
29
+ class WalletController extends base_1.BaseController {
30
+ constructor(application) {
31
+ super(application);
32
+ }
33
+ // ─── Route definitions ──────────────────────────────────────────────────
34
+ initRouteDefinitions() {
35
+ const noAuth = {
36
+ useAuthentication: false,
37
+ useCryptoAuthentication: false,
38
+ };
39
+ this.routeDefinitions = [
40
+ (0, node_express_suite_1.routeConfig)('post', '/derive-address', {
41
+ ...noAuth,
42
+ handlerKey: 'deriveAddress',
43
+ openapi: {
44
+ summary: 'Derive an Ethereum address',
45
+ description: 'Derives an Ethereum address from a paper key using BIP44 derivation.',
46
+ tags: ['Wallet'],
47
+ responses: {
48
+ 200: {
49
+ schema: 'DeriveAddressResponse',
50
+ description: 'Address derived successfully',
51
+ },
52
+ 400: {
53
+ schema: 'ApiErrorResponse',
54
+ description: 'Invalid paper key',
55
+ },
56
+ },
57
+ },
58
+ }),
59
+ (0, node_express_suite_1.routeConfig)('post', '/sign-message', {
60
+ ...noAuth,
61
+ handlerKey: 'signMessage',
62
+ openapi: {
63
+ summary: 'Sign a message',
64
+ description: 'Signs a message using EIP-191 personal message signing.',
65
+ tags: ['Wallet'],
66
+ responses: {
67
+ 200: {
68
+ schema: 'SignMessageResponse',
69
+ description: 'Message signed successfully',
70
+ },
71
+ 400: {
72
+ schema: 'ApiErrorResponse',
73
+ description: 'Invalid paper key or message',
74
+ },
75
+ },
76
+ },
77
+ }),
78
+ (0, node_express_suite_1.routeConfig)('post', '/verify-signature', {
79
+ ...noAuth,
80
+ handlerKey: 'verifySignature',
81
+ openapi: {
82
+ summary: 'Verify a message signature',
83
+ description: 'Verifies an EIP-191 signed message and recovers the signer address.',
84
+ tags: ['Wallet'],
85
+ responses: {
86
+ 200: {
87
+ schema: 'VerifySignatureResponse',
88
+ description: 'Signature verification result',
89
+ },
90
+ 400: {
91
+ schema: 'ApiErrorResponse',
92
+ description: 'Missing required fields',
93
+ },
94
+ },
95
+ },
96
+ }),
97
+ (0, node_express_suite_1.routeConfig)('get', '/address', {
98
+ ...noAuth,
99
+ handlerKey: 'getWallet',
100
+ openapi: {
101
+ summary: 'Get wallet address',
102
+ description: 'Returns the Ethereum wallet address for a given paper key.',
103
+ tags: ['Wallet'],
104
+ responses: {
105
+ 200: {
106
+ schema: 'GetWalletResponse',
107
+ description: 'Wallet address returned',
108
+ },
109
+ 400: {
110
+ schema: 'ApiErrorResponse',
111
+ description: 'Invalid paper key',
112
+ },
113
+ },
114
+ },
115
+ }),
116
+ ];
117
+ this.handlers = {
118
+ deriveAddress: this.handleDeriveAddress.bind(this),
119
+ signMessage: this.handleSignMessage.bind(this),
120
+ verifySignature: this.handleVerifySignature.bind(this),
121
+ getWallet: this.handleGetWallet.bind(this),
122
+ };
123
+ }
124
+ // ─── Handlers ─────────────────────────────────────────────────────────
125
+ /**
126
+ * POST /derive-address — Derive an Ethereum address from a paper key.
127
+ *
128
+ * @requirements 6.1, 6.4
129
+ */
130
+ async handleDeriveAddress(req) {
131
+ try {
132
+ const { paperKey, label } = req.body;
133
+ if (!paperKey || typeof paperKey !== 'string') {
134
+ return (0, errorResponse_1.validationError)('Missing required field: paperKey');
135
+ }
136
+ const result = ethereumWalletService_1.EthereumWalletService.deriveAddress(paperKey);
137
+ return {
138
+ statusCode: 200,
139
+ response: {
140
+ status: 'success',
141
+ data: {
142
+ memberId: '',
143
+ address: result.address,
144
+ publicKeyHex: result.publicKeyHex,
145
+ derivationPath: result.derivationPath,
146
+ createdAt: new Date(),
147
+ label,
148
+ },
149
+ message: 'Ethereum address derived successfully',
150
+ },
151
+ };
152
+ }
153
+ catch (error) {
154
+ return (0, errorResponse_1.handleError)(error);
155
+ }
156
+ }
157
+ /**
158
+ * POST /sign-message — Sign a message with the member's Ethereum key.
159
+ *
160
+ * @requirements 6.2, 6.3
161
+ */
162
+ async handleSignMessage(req) {
163
+ try {
164
+ const { paperKey, message } = req.body;
165
+ if (!paperKey || typeof paperKey !== 'string') {
166
+ return (0, errorResponse_1.validationError)('Missing required field: paperKey');
167
+ }
168
+ if (!message || typeof message !== 'string') {
169
+ return (0, errorResponse_1.validationError)('Missing required field: message');
170
+ }
171
+ const result = ethereumWalletService_1.EthereumWalletService.signMessage(paperKey, message);
172
+ return {
173
+ statusCode: 200,
174
+ response: {
175
+ status: 'success',
176
+ data: {
177
+ memberId: '',
178
+ message,
179
+ signature: result.signature,
180
+ recoveryParam: result.recoveryParam,
181
+ },
182
+ message: 'Message signed successfully',
183
+ },
184
+ };
185
+ }
186
+ catch (error) {
187
+ return (0, errorResponse_1.handleError)(error);
188
+ }
189
+ }
190
+ /**
191
+ * POST /verify-signature — Verify a signed message.
192
+ *
193
+ * @requirements 6.7, 6.8
194
+ */
195
+ async handleVerifySignature(req) {
196
+ try {
197
+ const body = req.body;
198
+ const { message, signature, address } = body;
199
+ if (!message || typeof message !== 'string') {
200
+ return (0, errorResponse_1.validationError)('Missing required field: message');
201
+ }
202
+ if (!signature || typeof signature !== 'string') {
203
+ return (0, errorResponse_1.validationError)('Missing required field: signature');
204
+ }
205
+ if (!address || typeof address !== 'string') {
206
+ return (0, errorResponse_1.validationError)('Missing required field: address');
207
+ }
208
+ const valid = ethereumWalletService_1.EthereumWalletService.verifySignature(message, signature, address);
209
+ return {
210
+ statusCode: 200,
211
+ response: {
212
+ status: 'success',
213
+ data: {
214
+ valid,
215
+ recoveredAddress: address,
216
+ },
217
+ message: valid
218
+ ? 'Signature is valid'
219
+ : 'Signature verification failed',
220
+ },
221
+ };
222
+ }
223
+ catch (error) {
224
+ return (0, errorResponse_1.handleError)(error);
225
+ }
226
+ }
227
+ /**
228
+ * GET /address — Get the wallet address for a paper key.
229
+ *
230
+ * @requirements 6.1
231
+ */
232
+ async handleGetWallet(req) {
233
+ try {
234
+ const { paperKey } = req.query;
235
+ if (!paperKey || typeof paperKey !== 'string') {
236
+ return (0, errorResponse_1.validationError)('Missing required query parameter: paperKey');
237
+ }
238
+ const result = ethereumWalletService_1.EthereumWalletService.deriveAddress(paperKey);
239
+ return {
240
+ statusCode: 200,
241
+ response: {
242
+ status: 'success',
243
+ data: {
244
+ memberId: '',
245
+ address: result.address,
246
+ publicKeyHex: result.publicKeyHex,
247
+ derivationPath: result.derivationPath,
248
+ createdAt: new Date(),
249
+ },
250
+ message: 'Wallet address retrieved',
251
+ },
252
+ };
253
+ }
254
+ catch (error) {
255
+ return (0, errorResponse_1.handleError)(error);
256
+ }
257
+ }
258
+ }
259
+ exports.WalletController = WalletController;
260
+ //# sourceMappingURL=walletController.js.map