@brightchain/brightchain-api-lib 0.2.1 → 0.6.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 (294) 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 +82 -4
  228. package/src/lib/stores/diskBlockAsyncStore.d.ts.map +1 -1
  229. package/src/lib/stores/diskBlockAsyncStore.js +403 -64
  230. package/src/lib/stores/diskBlockAsyncStore.js.map +1 -1
  231. package/src/lib/stores/diskBlockMetadataStore.d.ts +1 -1
  232. package/src/lib/stores/diskBlockMetadataStore.d.ts.map +1 -1
  233. package/src/lib/stores/diskBlockMetadataStore.js +1 -1
  234. package/src/lib/stores/diskBlockMetadataStore.js.map +1 -1
  235. package/src/lib/stores/diskBlockStore.d.ts +5 -4
  236. package/src/lib/stores/diskBlockStore.d.ts.map +1 -1
  237. package/src/lib/stores/diskBlockStore.js +9 -8
  238. package/src/lib/stores/diskBlockStore.js.map +1 -1
  239. package/src/lib/stores/diskBlockSyncStore.d.ts.map +1 -1
  240. package/src/lib/stores/diskBlockSyncStore.js +23 -23
  241. package/src/lib/stores/diskBlockSyncStore.js.map +1 -1
  242. package/src/lib/transforms/index.d.ts +4 -0
  243. package/src/lib/transforms/index.d.ts.map +1 -0
  244. package/src/lib/transforms/index.js +7 -0
  245. package/src/lib/transforms/index.js.map +1 -0
  246. package/src/lib/utils/errorResponse.d.ts +180 -0
  247. package/src/lib/utils/errorResponse.d.ts.map +1 -0
  248. package/src/lib/utils/errorResponse.js +313 -0
  249. package/src/lib/utils/errorResponse.js.map +1 -0
  250. package/src/lib/controllers/user.d.ts +0 -9
  251. package/src/lib/controllers/user.d.ts.map +0 -1
  252. package/src/lib/controllers/user.js +0 -21
  253. package/src/lib/controllers/user.js.map +0 -1
  254. package/src/lib/interfaces/api-express-validation-error-response.d.ts +0 -7
  255. package/src/lib/interfaces/api-express-validation-error-response.d.ts.map +0 -1
  256. package/src/lib/interfaces/api-express-validation-error-response.js +0 -3
  257. package/src/lib/interfaces/api-express-validation-error-response.js.map +0 -1
  258. package/src/lib/interfaces/api-mongo-validation-error-response.d.ts +0 -6
  259. package/src/lib/interfaces/api-mongo-validation-error-response.d.ts.map +0 -1
  260. package/src/lib/interfaces/api-mongo-validation-error-response.js +0 -3
  261. package/src/lib/interfaces/api-mongo-validation-error-response.js.map +0 -1
  262. package/src/lib/interfaces/authenticated-cipher.d.ts +0 -10
  263. package/src/lib/interfaces/authenticated-cipher.d.ts.map +0 -1
  264. package/src/lib/interfaces/authenticated-cipher.js +0 -3
  265. package/src/lib/interfaces/authenticated-cipher.js.map +0 -1
  266. package/src/lib/interfaces/authenticated-decipher.d.ts +0 -9
  267. package/src/lib/interfaces/authenticated-decipher.d.ts.map +0 -1
  268. package/src/lib/interfaces/authenticated-decipher.js +0 -3
  269. package/src/lib/interfaces/authenticated-decipher.js.map +0 -1
  270. package/src/lib/interfaces/ecies-consts.d.ts +0 -88
  271. package/src/lib/interfaces/ecies-consts.d.ts.map +0 -1
  272. package/src/lib/interfaces/ecies-consts.js.map +0 -1
  273. package/src/lib/interfaces/mongo-errors.d.ts +0 -9
  274. package/src/lib/interfaces/mongo-errors.d.ts.map +0 -1
  275. package/src/lib/interfaces/mongo-errors.js.map +0 -1
  276. package/src/lib/interfaces/pbkdf2-result.d.ts +0 -6
  277. package/src/lib/interfaces/pbkdf2-result.d.ts.map +0 -1
  278. package/src/lib/interfaces/pbkdf2-result.js.map +0 -1
  279. package/src/lib/interfaces/server-init-result.d.ts +0 -34
  280. package/src/lib/interfaces/server-init-result.d.ts.map +0 -1
  281. package/src/lib/interfaces/server-init-result.js.map +0 -1
  282. package/src/lib/services/keyWrapping.d.ts +0 -61
  283. package/src/lib/services/keyWrapping.d.ts.map +0 -1
  284. package/src/lib/services/keyWrapping.js +0 -297
  285. package/src/lib/services/keyWrapping.js.map +0 -1
  286. package/src/lib/services/pbkdf2.d.ts +0 -6
  287. package/src/lib/services/pbkdf2.d.ts.map +0 -1
  288. package/src/lib/services/pbkdf2.js +0 -31
  289. package/src/lib/services/pbkdf2.js.map +0 -1
  290. package/src/lib/services/user.d.ts +0 -10
  291. package/src/lib/services/user.d.ts.map +0 -1
  292. package/src/lib/services/user.js +0 -11
  293. package/src/lib/services/user.js.map +0 -1
  294. /package/{README.md → brightchain-api-lib/README.md} +0 -0
@@ -0,0 +1,88 @@
1
+ import { CBLStorageResult } from '@brightchain/brightchain-lib';
2
+ import { CoreLanguageCode } from '@digitaldefiance/i18n-lib';
3
+ import { PlatformID } from '@digitaldefiance/node-ecies-lib';
4
+ import { Request } from 'express';
5
+ import { IBrightChainApplication } from '../../interfaces';
6
+ import { DefaultBackendIdType } from '../../shared-types';
7
+ import { BaseController } from '../base';
8
+ /**
9
+ * Response for storing a CBL with whitening
10
+ */
11
+ interface StoreCBLResponse {
12
+ success: boolean;
13
+ message: string;
14
+ data: CBLStorageResult;
15
+ }
16
+ /**
17
+ * Response for retrieving a CBL
18
+ */
19
+ interface RetrieveCBLResponse {
20
+ success: boolean;
21
+ message: string;
22
+ data: {
23
+ cblData: string;
24
+ isEncrypted: boolean;
25
+ };
26
+ }
27
+ /**
28
+ * Handler keys for the CBL controller
29
+ */
30
+ interface CBLHandlers {
31
+ storeCBL: string;
32
+ retrieveCBL: string;
33
+ }
34
+ /**
35
+ * Controller for CBL (Constituent Block List) whitening operations.
36
+ *
37
+ * Implements the OFFS (Owner-Free File System) model for storing and retrieving
38
+ * CBLs with XOR whitening. CBLs are stored by splitting them into two blocks,
39
+ * XORing each with random whitener blocks, and generating a magnet URL for retrieval.
40
+ *
41
+ * ## Endpoints
42
+ *
43
+ * ### POST /api/cbl/store
44
+ * Store a CBL with XOR whitening.
45
+ *
46
+ * **Request Body:**
47
+ * - `cblData` (string, required): Base64 encoded CBL data
48
+ * - `durabilityLevel` (string, optional): 'ephemeral', 'standard', 'enhanced', 'maximum'
49
+ * - `isEncrypted` (boolean, optional): Flag indicating CBL is already encrypted
50
+ *
51
+ * **Response:** Block IDs, magnet URL, and storage metadata
52
+ *
53
+ * ### GET /api/cbl/retrieve
54
+ * Retrieve and reconstruct a CBL from its whitened blocks.
55
+ *
56
+ * **Query Parameters:**
57
+ * - `magnetUrl` (string, optional): Full magnet URL from store response
58
+ * - `b1`, `b2` (string, optional): Block IDs (alternative to magnetUrl)
59
+ * - `p1`, `p2` (string, optional): Parity block IDs for recovery
60
+ *
61
+ * **Response:** Reconstructed CBL data (base64 encoded)
62
+ */
63
+ export declare class CBLController<TID extends PlatformID = DefaultBackendIdType> extends BaseController<TID, any, CBLHandlers, CoreLanguageCode> {
64
+ private readonly blockStore;
65
+ constructor(application: IBrightChainApplication<TID>);
66
+ /**
67
+ * Initialize route definitions
68
+ */
69
+ protected initRouteDefinitions(): void;
70
+ /**
71
+ * Store a CBL with XOR whitening
72
+ * POST /api/cbl/store
73
+ */
74
+ storeCBL(_req: Request): Promise<{
75
+ statusCode: number;
76
+ response: StoreCBLResponse;
77
+ }>;
78
+ /**
79
+ * Retrieve and reconstruct a CBL
80
+ * GET /api/cbl/retrieve
81
+ */
82
+ retrieveCBL(req: Request): Promise<{
83
+ statusCode: number;
84
+ response: RetrieveCBLResponse;
85
+ }>;
86
+ }
87
+ export {};
88
+ //# sourceMappingURL=cbl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cbl.d.ts","sourceRoot":"","sources":["../../../../../../brightchain-api-lib/src/lib/controllers/api/cbl.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,gBAAgB,EAIjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAmB,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AA0BzC;;GAEG;AACH,UAAU,gBAAgB;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,gBAAgB,CAAC;CACxB;AAED;;GAEG;AACH,UAAU,mBAAmB;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,OAAO,CAAC;KACtB,CAAC;CACH;AAED;;GAEG;AACH,UAAU,WAAW;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qBAAa,aAAa,CACxB,GAAG,SAAS,UAAU,GAAG,oBAAoB,CAC7C,SAAQ,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,gBAAgB,CAAC;IAC/D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;gBAErC,WAAW,EAAE,uBAAuB,CAAC,GAAG,CAAC;IAerD;;OAEG;IACH,SAAS,CAAC,oBAAoB,IAAI,IAAI;IAiDtC;;;OAGG;IACU,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;QAC5C,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,gBAAgB,CAAC;KAC5B,CAAC;IAkEF;;;OAGG;IACU,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC;QAC9C,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,mBAAmB,CAAC;KAC/B,CAAC;CAyEH"}
@@ -0,0 +1,222 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CBLController = void 0;
4
+ /* eslint-disable @typescript-eslint/no-explicit-any */
5
+ const brightchain_lib_1 = require("@brightchain/brightchain-lib");
6
+ const i18n_lib_1 = require("@digitaldefiance/i18n-lib");
7
+ const express_validator_1 = require("express-validator");
8
+ const stores_1 = require("../../stores");
9
+ const base_1 = require("../base");
10
+ /**
11
+ * Type guard for StoreCBLRequest
12
+ */
13
+ function isStoreCBLRequest(body) {
14
+ return (typeof body['cblData'] === 'string' &&
15
+ (body['durabilityLevel'] === undefined ||
16
+ typeof body['durabilityLevel'] === 'string') &&
17
+ (body['isEncrypted'] === undefined ||
18
+ typeof body['isEncrypted'] === 'boolean'));
19
+ }
20
+ /**
21
+ * Controller for CBL (Constituent Block List) whitening operations.
22
+ *
23
+ * Implements the OFFS (Owner-Free File System) model for storing and retrieving
24
+ * CBLs with XOR whitening. CBLs are stored by splitting them into two blocks,
25
+ * XORing each with random whitener blocks, and generating a magnet URL for retrieval.
26
+ *
27
+ * ## Endpoints
28
+ *
29
+ * ### POST /api/cbl/store
30
+ * Store a CBL with XOR whitening.
31
+ *
32
+ * **Request Body:**
33
+ * - `cblData` (string, required): Base64 encoded CBL data
34
+ * - `durabilityLevel` (string, optional): 'ephemeral', 'standard', 'enhanced', 'maximum'
35
+ * - `isEncrypted` (boolean, optional): Flag indicating CBL is already encrypted
36
+ *
37
+ * **Response:** Block IDs, magnet URL, and storage metadata
38
+ *
39
+ * ### GET /api/cbl/retrieve
40
+ * Retrieve and reconstruct a CBL from its whitened blocks.
41
+ *
42
+ * **Query Parameters:**
43
+ * - `magnetUrl` (string, optional): Full magnet URL from store response
44
+ * - `b1`, `b2` (string, optional): Block IDs (alternative to magnetUrl)
45
+ * - `p1`, `p2` (string, optional): Parity block IDs for recovery
46
+ *
47
+ * **Response:** Reconstructed CBL data (base64 encoded)
48
+ */
49
+ class CBLController extends base_1.BaseController {
50
+ constructor(application) {
51
+ super(application);
52
+ // Initialize block store from application environment
53
+ const storePath = this.application.environment.blockStorePath ?? 'tmp/blockstore';
54
+ const blockSize = (this.application.environment.blockStoreBlockSize
55
+ ? this.application.environment.blockStoreBlockSize
56
+ : brightchain_lib_1.BlockSize.Medium);
57
+ this.blockStore = new stores_1.DiskBlockAsyncStore({ storePath, blockSize });
58
+ }
59
+ /**
60
+ * Initialize route definitions
61
+ */
62
+ initRouteDefinitions() {
63
+ // Bind handler methods to this instance
64
+ this.handlers = {
65
+ storeCBL: this.storeCBL.bind(this),
66
+ retrieveCBL: this.retrieveCBL.bind(this),
67
+ };
68
+ this.routeDefinitions = [
69
+ {
70
+ method: 'post',
71
+ path: '/store',
72
+ handlerKey: 'storeCBL',
73
+ useAuthentication: false,
74
+ validation: [
75
+ (0, express_validator_1.body)('cblData')
76
+ .isString()
77
+ .notEmpty()
78
+ .withMessage('cblData is required and must be a non-empty string'),
79
+ (0, express_validator_1.body)('durabilityLevel')
80
+ .optional()
81
+ .isIn(['ephemeral', 'standard', 'enhanced', 'maximum'])
82
+ .withMessage('durabilityLevel must be one of: ephemeral, standard, enhanced, maximum'),
83
+ (0, express_validator_1.body)('isEncrypted')
84
+ .optional()
85
+ .isBoolean()
86
+ .withMessage('isEncrypted must be a boolean'),
87
+ ],
88
+ },
89
+ {
90
+ method: 'get',
91
+ path: '/retrieve',
92
+ handlerKey: 'retrieveCBL',
93
+ useAuthentication: false,
94
+ validation: [
95
+ (0, express_validator_1.query)('magnetUrl')
96
+ .optional()
97
+ .isString()
98
+ .withMessage('magnetUrl must be a string'),
99
+ (0, express_validator_1.query)('b1').optional().isString().withMessage('b1 must be a string'),
100
+ (0, express_validator_1.query)('b2').optional().isString().withMessage('b2 must be a string'),
101
+ (0, express_validator_1.query)('p1').optional().isString().withMessage('p1 must be a string'),
102
+ (0, express_validator_1.query)('p2').optional().isString().withMessage('p2 must be a string'),
103
+ ],
104
+ },
105
+ ];
106
+ }
107
+ /**
108
+ * Store a CBL with XOR whitening
109
+ * POST /api/cbl/store
110
+ */
111
+ async storeCBL(_req) {
112
+ const body = this.validatedBody;
113
+ if (!isStoreCBLRequest(body)) {
114
+ throw new i18n_lib_1.HandleableError(new Error('Invalid request body format'), {
115
+ statusCode: 400,
116
+ });
117
+ }
118
+ try {
119
+ // Decode CBL data from base64
120
+ const cblBytes = Buffer.from(body.cblData, 'base64');
121
+ // Validate CBL format (must be valid JSON, unless encrypted)
122
+ if (!body.isEncrypted) {
123
+ try {
124
+ JSON.parse(new TextDecoder().decode(cblBytes));
125
+ }
126
+ catch {
127
+ throw new i18n_lib_1.HandleableError(new Error('Invalid CBL format: must be valid JSON (or set isEncrypted=true)'), { statusCode: 400 });
128
+ }
129
+ }
130
+ // Build storage options
131
+ const options = {
132
+ isEncrypted: body.isEncrypted,
133
+ };
134
+ if (body.durabilityLevel) {
135
+ const durabilityMap = {
136
+ ephemeral: brightchain_lib_1.DurabilityLevel.Ephemeral,
137
+ standard: brightchain_lib_1.DurabilityLevel.Standard,
138
+ enhanced: brightchain_lib_1.DurabilityLevel.HighDurability,
139
+ maximum: brightchain_lib_1.DurabilityLevel.HighDurability,
140
+ };
141
+ options.durabilityLevel = durabilityMap[body.durabilityLevel];
142
+ }
143
+ // Store with whitening
144
+ const result = await this.blockStore.storeCBLWithWhitening(new Uint8Array(cblBytes), options);
145
+ return {
146
+ statusCode: 200,
147
+ response: {
148
+ success: true,
149
+ message: 'CBL stored successfully with whitening',
150
+ data: result,
151
+ },
152
+ };
153
+ }
154
+ catch (error) {
155
+ if (error instanceof brightchain_lib_1.StoreError) {
156
+ throw new i18n_lib_1.HandleableError(error, {
157
+ statusCode: error.message.includes('too large') ? 413 : 500,
158
+ });
159
+ }
160
+ throw error;
161
+ }
162
+ }
163
+ /**
164
+ * Retrieve and reconstruct a CBL
165
+ * GET /api/cbl/retrieve
166
+ */
167
+ async retrieveCBL(req) {
168
+ const { magnetUrl, b1, b2, p1, p2 } = req.query;
169
+ let blockId1;
170
+ let blockId2;
171
+ let block1ParityIds;
172
+ let block2ParityIds;
173
+ let isEncrypted = false;
174
+ try {
175
+ if (magnetUrl) {
176
+ // Parse magnet URL (includes block size, parity IDs and encryption flag)
177
+ const components = this.blockStore.parseCBLMagnetUrl(magnetUrl);
178
+ blockId1 = components.blockId1;
179
+ blockId2 = components.blockId2;
180
+ block1ParityIds = components.block1ParityIds;
181
+ block2ParityIds = components.block2ParityIds;
182
+ isEncrypted = components.isEncrypted;
183
+ }
184
+ else if (b1 && b2) {
185
+ blockId1 = b1;
186
+ blockId2 = b2;
187
+ block1ParityIds = p1?.split(',').filter((id) => id);
188
+ block2ParityIds = p2?.split(',').filter((id) => id);
189
+ }
190
+ else {
191
+ throw new i18n_lib_1.HandleableError(new Error('Either magnetUrl or both b1 and b2 parameters are required'), { statusCode: 400 });
192
+ }
193
+ // Retrieve and reconstruct CBL (with parity recovery support)
194
+ const cblData = await this.blockStore.retrieveCBL(blockId1, blockId2, block1ParityIds, block2ParityIds);
195
+ return {
196
+ statusCode: 200,
197
+ response: {
198
+ success: true,
199
+ message: 'CBL retrieved successfully',
200
+ data: {
201
+ cblData: Buffer.from(cblData).toString('base64'),
202
+ isEncrypted,
203
+ },
204
+ },
205
+ };
206
+ }
207
+ catch (error) {
208
+ if (error instanceof brightchain_lib_1.StoreError) {
209
+ throw new i18n_lib_1.HandleableError(error, {
210
+ statusCode: error.message.includes('not found') ? 404 : 500,
211
+ });
212
+ }
213
+ if (error instanceof Error &&
214
+ error.message.includes('Invalid magnet URL')) {
215
+ throw new i18n_lib_1.HandleableError(error, { statusCode: 400 });
216
+ }
217
+ throw error;
218
+ }
219
+ }
220
+ }
221
+ exports.CBLController = CBLController;
222
+ //# sourceMappingURL=cbl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cbl.js","sourceRoot":"","sources":["../../../../../../brightchain-api-lib/src/lib/controllers/api/cbl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { CoreLanguageCode } from '@digitaldefiance/i18n-lib';
2
+ import { PlatformID } from '@digitaldefiance/node-ecies-lib';
3
+ import { ApiErrorResponse, ApiRequestHandler, IApiMessageResponse, TypedHandlers } from '@digitaldefiance/node-express-suite';
4
+ import { IBrightChainApplication } from '../../interfaces/application';
5
+ import { DefaultBackendIdType } from '../../shared-types';
6
+ import { BaseController } from '../base';
7
+ interface IEnergyHandlers extends TypedHandlers {
8
+ getBalance: ApiRequestHandler<IApiMessageResponse | ApiErrorResponse>;
9
+ getTransactions: ApiRequestHandler<IApiMessageResponse | ApiErrorResponse>;
10
+ }
11
+ export declare class EnergyController<TID extends PlatformID = DefaultBackendIdType> extends BaseController<TID, IApiMessageResponse | ApiErrorResponse, IEnergyHandlers, CoreLanguageCode> {
12
+ constructor(application: IBrightChainApplication<TID>);
13
+ protected initRouteDefinitions(): void;
14
+ private handleGetBalance;
15
+ private handleGetTransactions;
16
+ }
17
+ export {};
18
+ //# sourceMappingURL=energy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"energy.d.ts","sourceRoot":"","sources":["../../../../../../brightchain-api-lib/src/lib/controllers/api/energy.ts"],"names":[],"mappings":"AACA,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,EAEd,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,eAAgB,SAAQ,aAAa;IAC7C,UAAU,EAAE,iBAAiB,CAAC,mBAAmB,GAAG,gBAAgB,CAAC,CAAC;IACtE,eAAe,EAAE,iBAAiB,CAAC,mBAAmB,GAAG,gBAAgB,CAAC,CAAC;CAC5E;AAED,qBAAa,gBAAgB,CAC3B,GAAG,SAAS,UAAU,GAAG,oBAAoB,CAC7C,SAAQ,cAAc,CACtB,GAAG,EACH,mBAAmB,GAAG,gBAAgB,EACtC,eAAe,EACf,gBAAgB,CACjB;gBACa,WAAW,EAAE,uBAAuB,CAAC,GAAG,CAAC;IAIrD,SAAS,CAAC,oBAAoB,IAAI,IAAI;IAoBtC,OAAO,CAAC,gBAAgB,CAqDtB;IAEF,OAAO,CAAC,qBAAqB,CAwB3B;CACH"}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EnergyController = void 0;
4
+ const brightchain_lib_1 = require("@brightchain/brightchain-lib");
5
+ const node_express_suite_1 = require("@digitaldefiance/node-express-suite");
6
+ const base_1 = require("../base");
7
+ class EnergyController extends base_1.BaseController {
8
+ constructor(application) {
9
+ super(application);
10
+ this.handleGetBalance = async (req) => {
11
+ const user = req.user;
12
+ if (!user) {
13
+ return {
14
+ statusCode: 401,
15
+ response: {
16
+ message: 'Not authenticated',
17
+ error: 'Not authenticated',
18
+ },
19
+ };
20
+ }
21
+ try {
22
+ const energyStore = this.application.services.get('energyStore');
23
+ const memberChecksum = brightchain_lib_1.Checksum.fromHex(user.memberId);
24
+ const account = energyStore.get(memberChecksum);
25
+ if (!account) {
26
+ return {
27
+ statusCode: 404,
28
+ response: {
29
+ message: 'Energy account not found',
30
+ error: 'Energy account not found',
31
+ },
32
+ };
33
+ }
34
+ return {
35
+ statusCode: 200,
36
+ response: {
37
+ message: 'Balance retrieved',
38
+ balance: account.balance,
39
+ earned: account.earned,
40
+ spent: account.spent,
41
+ reserved: account.reserved,
42
+ reputation: account.reputation,
43
+ },
44
+ };
45
+ }
46
+ catch {
47
+ return {
48
+ statusCode: 500,
49
+ response: {
50
+ message: 'Failed to retrieve balance',
51
+ error: 'Failed to retrieve balance',
52
+ },
53
+ };
54
+ }
55
+ };
56
+ this.handleGetTransactions = async (req) => {
57
+ const user = req.user;
58
+ if (!user) {
59
+ return {
60
+ statusCode: 401,
61
+ response: {
62
+ message: 'Not authenticated',
63
+ error: 'Not authenticated',
64
+ },
65
+ };
66
+ }
67
+ return {
68
+ statusCode: 200,
69
+ response: {
70
+ message: 'Transactions retrieved',
71
+ transactions: [],
72
+ },
73
+ };
74
+ };
75
+ }
76
+ initRouteDefinitions() {
77
+ this.routeDefinitions = [
78
+ (0, node_express_suite_1.routeConfig)('get', '/balance', {
79
+ handlerKey: 'getBalance',
80
+ useAuthentication: true,
81
+ useCryptoAuthentication: false,
82
+ }),
83
+ (0, node_express_suite_1.routeConfig)('get', '/transactions', {
84
+ handlerKey: 'getTransactions',
85
+ useAuthentication: true,
86
+ useCryptoAuthentication: false,
87
+ }),
88
+ ];
89
+ this.handlers = {
90
+ getBalance: this.handleGetBalance.bind(this),
91
+ getTransactions: this.handleGetTransactions.bind(this),
92
+ };
93
+ }
94
+ }
95
+ exports.EnergyController = EnergyController;
96
+ //# sourceMappingURL=energy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"energy.js","sourceRoot":"","sources":["../../../../../../brightchain-api-lib/src/lib/controllers/api/energy.ts"],"names":[],"mappings":";;;AAAA,kEAA4E;AAG5E,4EAO6C;AAG7C,kCAAyC;AAOzC,MAAa,gBAEX,SAAQ,qBAKT;IACC,YAAY,WAAyC;QACnD,KAAK,CAAC,WAAW,CAAC,CAAC;QAuBb,qBAAgB,GAEpB,KAAK,EACP,GAAG,EACmE,EAAE;YACxE,MAAM,IAAI,GAAI,GAAuC,CAAC,IAAI,CAAC;YAE3D,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO;oBACL,UAAU,EAAE,GAAG;oBACf,QAAQ,EAAE;wBACR,OAAO,EAAE,mBAAmB;wBAC5B,KAAK,EAAE,mBAAmB;qBAC3B;iBACF,CAAC;YACJ,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,WAAW,GACf,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAqB,aAAa,CAAC,CAAC;gBACnE,MAAM,cAAc,GAAG,0BAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACvD,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;gBAEhD,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,OAAO;wBACL,UAAU,EAAE,GAAG;wBACf,QAAQ,EAAE;4BACR,OAAO,EAAE,0BAA0B;4BACnC,KAAK,EAAE,0BAA0B;yBAClC;qBACF,CAAC;gBACJ,CAAC;gBAED,OAAO;oBACL,UAAU,EAAE,GAAG;oBACf,QAAQ,EAAE;wBACR,OAAO,EAAE,mBAAmB;wBAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;wBACxB,MAAM,EAAE,OAAO,CAAC,MAAM;wBACtB,KAAK,EAAE,OAAO,CAAC,KAAK;wBACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ;wBAC1B,UAAU,EAAE,OAAO,CAAC,UAAU;qBACR;iBACzB,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO;oBACL,UAAU,EAAE,GAAG;oBACf,QAAQ,EAAE;wBACR,OAAO,EAAE,4BAA4B;wBACrC,KAAK,EAAE,4BAA4B;qBACpC;iBACF,CAAC;YACJ,CAAC;QACH,CAAC,CAAC;QAEM,0BAAqB,GAEzB,KAAK,EACP,GAAG,EACmE,EAAE;YACxE,MAAM,IAAI,GAAI,GAAuC,CAAC,IAAI,CAAC;YAE3D,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO;oBACL,UAAU,EAAE,GAAG;oBACf,QAAQ,EAAE;wBACR,OAAO,EAAE,mBAAmB;wBAC5B,KAAK,EAAE,mBAAmB;qBAC3B;iBACF,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,UAAU,EAAE,GAAG;gBACf,QAAQ,EAAE;oBACR,OAAO,EAAE,wBAAwB;oBACjC,YAAY,EAAE,EAAE;iBACM;aACzB,CAAC;QACJ,CAAC,CAAC;IArGF,CAAC;IAES,oBAAoB;QAC5B,IAAI,CAAC,gBAAgB,GAAG;YACtB,IAAA,gCAAW,EAAC,KAAK,EAAE,UAAU,EAAE;gBAC7B,UAAU,EAAE,YAAY;gBACxB,iBAAiB,EAAE,IAAI;gBACvB,uBAAuB,EAAE,KAAK;aAC/B,CAAC;YACF,IAAA,gCAAW,EAAC,KAAK,EAAE,eAAe,EAAE;gBAClC,UAAU,EAAE,iBAAiB;gBAC7B,iBAAiB,EAAE,IAAI;gBACvB,uBAAuB,EAAE,KAAK;aAC/B,CAAC;SACH,CAAC;QAEF,IAAI,CAAC,QAAQ,GAAG;YACd,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;YAC5C,eAAe,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;SACvD,CAAC;IACJ,CAAC;CAkFF;AAhHD,4CAgHC"}
@@ -0,0 +1,19 @@
1
+ import { CoreLanguageCode } from '@digitaldefiance/i18n-lib';
2
+ import { PlatformID } from '@digitaldefiance/node-ecies-lib';
3
+ import { ApiErrorResponse, ApiRequestHandler, IApiMessageResponse, TypedHandlers } from '@digitaldefiance/node-express-suite';
4
+ import { IBrightChainApplication } from '../../interfaces/application';
5
+ import { DefaultBackendIdType } from '../../shared-types';
6
+ import { BaseController } from '../base';
7
+ interface II18nHandlers extends TypedHandlers {
8
+ getStrings: ApiRequestHandler<IApiMessageResponse | ApiErrorResponse>;
9
+ }
10
+ /**
11
+ * Controller for i18n operations
12
+ */
13
+ export declare class I18nController<TID extends PlatformID = DefaultBackendIdType> extends BaseController<TID, IApiMessageResponse | ApiErrorResponse, II18nHandlers, CoreLanguageCode> {
14
+ constructor(application: IBrightChainApplication<TID>);
15
+ protected initRouteDefinitions(): void;
16
+ private handleGetStrings;
17
+ }
18
+ export {};
19
+ //# sourceMappingURL=i18n.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../../../../../brightchain-api-lib/src/lib/controllers/api/i18n.ts"],"names":[],"mappings":"AACA,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,aAAc,SAAQ,aAAa;IAC3C,UAAU,EAAE,iBAAiB,CAAC,mBAAmB,GAAG,gBAAgB,CAAC,CAAC;CACvE;AAED;;GAEG;AACH,qBAAa,cAAc,CACzB,GAAG,SAAS,UAAU,GAAG,oBAAoB,CAC7C,SAAQ,cAAc,CACtB,GAAG,EACH,mBAAmB,GAAG,gBAAgB,EACtC,aAAa,EACb,gBAAgB,CACjB;gBACa,WAAW,EAAE,uBAAuB,CAAC,GAAG,CAAC;IAIrD,SAAS,CAAC,oBAAoB,IAAI,IAAI;IAMtC,OAAO,CAAC,gBAAgB,CAWtB;CACH"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.I18nController = void 0;
4
+ const base_1 = require("../base");
5
+ /**
6
+ * Controller for i18n operations
7
+ */
8
+ class I18nController extends base_1.BaseController {
9
+ constructor(application) {
10
+ super(application);
11
+ this.handleGetStrings = async (req) => {
12
+ return {
13
+ statusCode: 200,
14
+ response: {
15
+ message: 'I18n strings not implemented yet',
16
+ },
17
+ };
18
+ };
19
+ }
20
+ initRouteDefinitions() {
21
+ this.handlers = {
22
+ getStrings: this.handleGetStrings.bind(this),
23
+ };
24
+ }
25
+ }
26
+ exports.I18nController = I18nController;
27
+ //# sourceMappingURL=i18n.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../../../../../brightchain-api-lib/src/lib/controllers/api/i18n.ts"],"names":[],"mappings":";;;AAYA,kCAAyC;AAMzC;;GAEG;AACH,MAAa,cAEX,SAAQ,qBAKT;IACC,YAAY,WAAyC;QACnD,KAAK,CAAC,WAAW,CAAC,CAAC;QASb,qBAAgB,GAEpB,KAAK,EACP,GAAG,EACmE,EAAE;YACxE,OAAO;gBACL,UAAU,EAAE,GAAG;gBACf,QAAQ,EAAE;oBACR,OAAO,EAAE,kCAAkC;iBAC5C;aACF,CAAC;QACJ,CAAC,CAAC;IAnBF,CAAC;IAES,oBAAoB;QAC5B,IAAI,CAAC,QAAQ,GAAG;YACd,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;SAC7C,CAAC;IACJ,CAAC;CAcF;AA9BD,wCA8BC"}
@@ -0,0 +1,9 @@
1
+ export * from './blocks';
2
+ export * from './cbl';
3
+ export * from './energy';
4
+ export * from './i18n';
5
+ export * from './members';
6
+ export * from './quorum';
7
+ export * from './sessions';
8
+ export * from './user';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../brightchain-api-lib/src/lib/controllers/api/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./blocks"), exports);
5
+ tslib_1.__exportStar(require("./cbl"), exports);
6
+ tslib_1.__exportStar(require("./energy"), exports);
7
+ tslib_1.__exportStar(require("./i18n"), exports);
8
+ tslib_1.__exportStar(require("./members"), exports);
9
+ tslib_1.__exportStar(require("./quorum"), exports);
10
+ tslib_1.__exportStar(require("./sessions"), exports);
11
+ tslib_1.__exportStar(require("./user"), exports);
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../brightchain-api-lib/src/lib/controllers/api/index.ts"],"names":[],"mappings":";;;AAAA,mDAAyB;AACzB,gDAAsB;AACtB,mDAAyB;AACzB,iDAAuB;AACvB,oDAA0B;AAC1B,mDAAyB;AACzB,qDAA2B;AAC3B,iDAAuB"}
@@ -0,0 +1,19 @@
1
+ import { CoreLanguageCode } from '@digitaldefiance/i18n-lib';
2
+ import { PlatformID } from '@digitaldefiance/node-ecies-lib';
3
+ import { ApiErrorResponse, ApiRequestHandler, IApiMessageResponse, TypedHandlers } from '@digitaldefiance/node-express-suite';
4
+ import { IBrightChainApplication } from '../../interfaces/application';
5
+ import { DefaultBackendIdType } from '../../shared-types';
6
+ import { BaseController } from '../base';
7
+ interface IMembersHandlers extends TypedHandlers {
8
+ getMembers: ApiRequestHandler<IApiMessageResponse | ApiErrorResponse>;
9
+ }
10
+ /**
11
+ * Controller for member operations
12
+ */
13
+ export declare class MembersController<TID extends PlatformID = DefaultBackendIdType> extends BaseController<TID, IApiMessageResponse | ApiErrorResponse, IMembersHandlers, CoreLanguageCode> {
14
+ constructor(application: IBrightChainApplication<TID>);
15
+ protected initRouteDefinitions(): void;
16
+ private handleGetMembers;
17
+ }
18
+ export {};
19
+ //# sourceMappingURL=members.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"members.d.ts","sourceRoot":"","sources":["../../../../../../brightchain-api-lib/src/lib/controllers/api/members.ts"],"names":[],"mappings":"AAAA,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,gBAAiB,SAAQ,aAAa;IAC9C,UAAU,EAAE,iBAAiB,CAAC,mBAAmB,GAAG,gBAAgB,CAAC,CAAC;CACvE;AAED;;GAEG;AACH,qBAAa,iBAAiB,CAC5B,GAAG,SAAS,UAAU,GAAG,oBAAoB,CAC7C,SAAQ,cAAc,CACtB,GAAG,EACH,mBAAmB,GAAG,gBAAgB,EACtC,gBAAgB,EAChB,gBAAgB,CACjB;gBACa,WAAW,EAAE,uBAAuB,CAAC,GAAG,CAAC;IAIrD,SAAS,CAAC,oBAAoB,IAAI,IAAI;IAMtC,OAAO,CAAC,gBAAgB,CAWtB;CACH"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MembersController = void 0;
4
+ const base_1 = require("../base");
5
+ /**
6
+ * Controller for member operations
7
+ */
8
+ class MembersController extends base_1.BaseController {
9
+ constructor(application) {
10
+ super(application);
11
+ this.handleGetMembers = async (_req) => {
12
+ return {
13
+ statusCode: 200,
14
+ response: {
15
+ message: 'Members not implemented yet',
16
+ },
17
+ };
18
+ };
19
+ }
20
+ initRouteDefinitions() {
21
+ this.handlers = {
22
+ getMembers: this.handleGetMembers.bind(this),
23
+ };
24
+ }
25
+ }
26
+ exports.MembersController = MembersController;
27
+ //# sourceMappingURL=members.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"members.js","sourceRoot":"","sources":["../../../../../../brightchain-api-lib/src/lib/controllers/api/members.ts"],"names":[],"mappings":";;;AAWA,kCAAyC;AAMzC;;GAEG;AACH,MAAa,iBAEX,SAAQ,qBAKT;IACC,YAAY,WAAyC;QACnD,KAAK,CAAC,WAAW,CAAC,CAAC;QASb,qBAAgB,GAEpB,KAAK,EACP,IAAI,EACkE,EAAE;YACxE,OAAO;gBACL,UAAU,EAAE,GAAG;gBACf,QAAQ,EAAE;oBACR,OAAO,EAAE,6BAA6B;iBACvC;aACF,CAAC;QACJ,CAAC,CAAC;IAnBF,CAAC;IAES,oBAAoB;QAC5B,IAAI,CAAC,QAAQ,GAAG;YACd,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;SAC7C,CAAC;IACJ,CAAC;CAcF;AA9BD,8CA8BC"}