@brightchain/brightchain-api-lib 0.0.1

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 (586) hide show
  1. package/brightchain-api-lib/README.md +101 -0
  2. package/package.json +53 -0
  3. package/src/index.d.ts +88 -0
  4. package/src/index.d.ts.map +1 -0
  5. package/src/index.js +101 -0
  6. package/src/index.js.map +1 -0
  7. package/src/lib/__tests__/fixtures/mock-backend-brightchain-member.d.ts +71 -0
  8. package/src/lib/__tests__/fixtures/mock-backend-brightchain-member.d.ts.map +1 -0
  9. package/src/lib/__tests__/fixtures/mock-backend-brightchain-member.js +119 -0
  10. package/src/lib/__tests__/fixtures/mock-backend-brightchain-member.js.map +1 -0
  11. package/src/lib/__tests__/fixtures/mocked-model.d.ts +90 -0
  12. package/src/lib/__tests__/fixtures/mocked-model.d.ts.map +1 -0
  13. package/src/lib/__tests__/fixtures/mocked-model.js +101 -0
  14. package/src/lib/__tests__/fixtures/mocked-model.js.map +1 -0
  15. package/src/lib/__tests__/helpers/application.mock.d.ts +5 -0
  16. package/src/lib/__tests__/helpers/application.mock.d.ts.map +1 -0
  17. package/src/lib/__tests__/helpers/application.mock.js +52 -0
  18. package/src/lib/__tests__/helpers/application.mock.js.map +1 -0
  19. package/src/lib/__tests__/helpers/model-mocks.mock.d.ts +43 -0
  20. package/src/lib/__tests__/helpers/model-mocks.mock.d.ts.map +1 -0
  21. package/src/lib/__tests__/helpers/model-mocks.mock.js +67 -0
  22. package/src/lib/__tests__/helpers/model-mocks.mock.js.map +1 -0
  23. package/src/lib/appConstants.d.ts +87 -0
  24. package/src/lib/appConstants.d.ts.map +1 -0
  25. package/src/lib/appConstants.js +25 -0
  26. package/src/lib/appConstants.js.map +1 -0
  27. package/src/lib/application-base.d.ts +39 -0
  28. package/src/lib/application-base.d.ts.map +1 -0
  29. package/src/lib/application-base.js +84 -0
  30. package/src/lib/application-base.js.map +1 -0
  31. package/src/lib/application.d.ts +14 -0
  32. package/src/lib/application.d.ts.map +1 -0
  33. package/src/lib/application.js +105 -0
  34. package/src/lib/application.js.map +1 -0
  35. package/src/lib/availability/availabilityMetrics.d.ts +241 -0
  36. package/src/lib/availability/availabilityMetrics.d.ts.map +1 -0
  37. package/src/lib/availability/availabilityMetrics.js +425 -0
  38. package/src/lib/availability/availabilityMetrics.js.map +1 -0
  39. package/src/lib/availability/availabilityService.d.ts +250 -0
  40. package/src/lib/availability/availabilityService.d.ts.map +1 -0
  41. package/src/lib/availability/availabilityService.js +593 -0
  42. package/src/lib/availability/availabilityService.js.map +1 -0
  43. package/src/lib/availability/blockRegistry.d.ts +141 -0
  44. package/src/lib/availability/blockRegistry.d.ts.map +1 -0
  45. package/src/lib/availability/blockRegistry.js +257 -0
  46. package/src/lib/availability/blockRegistry.js.map +1 -0
  47. package/src/lib/availability/configValidation.d.ts +72 -0
  48. package/src/lib/availability/configValidation.d.ts.map +1 -0
  49. package/src/lib/availability/configValidation.js +261 -0
  50. package/src/lib/availability/configValidation.js.map +1 -0
  51. package/src/lib/availability/discoveryProtocol.d.ts +160 -0
  52. package/src/lib/availability/discoveryProtocol.d.ts.map +1 -0
  53. package/src/lib/availability/discoveryProtocol.js +304 -0
  54. package/src/lib/availability/discoveryProtocol.js.map +1 -0
  55. package/src/lib/availability/gossipService.d.ts +158 -0
  56. package/src/lib/availability/gossipService.d.ts.map +1 -0
  57. package/src/lib/availability/gossipService.js +271 -0
  58. package/src/lib/availability/gossipService.js.map +1 -0
  59. package/src/lib/availability/heartbeatMonitor.d.ts +204 -0
  60. package/src/lib/availability/heartbeatMonitor.d.ts.map +1 -0
  61. package/src/lib/availability/heartbeatMonitor.js +375 -0
  62. package/src/lib/availability/heartbeatMonitor.js.map +1 -0
  63. package/src/lib/availability/index.d.ts +15 -0
  64. package/src/lib/availability/index.d.ts.map +1 -0
  65. package/src/lib/availability/index.js +18 -0
  66. package/src/lib/availability/index.js.map +1 -0
  67. package/src/lib/availability/reconciliationService.d.ts +237 -0
  68. package/src/lib/availability/reconciliationService.d.ts.map +1 -0
  69. package/src/lib/availability/reconciliationService.js +513 -0
  70. package/src/lib/availability/reconciliationService.js.map +1 -0
  71. package/src/lib/blocks/handle.d.ts +45 -0
  72. package/src/lib/blocks/handle.d.ts.map +1 -0
  73. package/src/lib/blocks/handle.js +221 -0
  74. package/src/lib/blocks/handle.js.map +1 -0
  75. package/src/lib/constants.d.ts +50 -0
  76. package/src/lib/constants.d.ts.map +1 -0
  77. package/src/lib/constants.js +58 -0
  78. package/src/lib/constants.js.map +1 -0
  79. package/src/lib/controllers/base.d.ts +50 -0
  80. package/src/lib/controllers/base.d.ts.map +1 -0
  81. package/src/lib/controllers/base.js +235 -0
  82. package/src/lib/controllers/base.js.map +1 -0
  83. package/src/lib/controllers/user.d.ts +9 -0
  84. package/src/lib/controllers/user.d.ts.map +1 -0
  85. package/src/lib/controllers/user.js +21 -0
  86. package/src/lib/controllers/user.js.map +1 -0
  87. package/src/lib/datastore/block-document-store-factory.d.ts +19 -0
  88. package/src/lib/datastore/block-document-store-factory.d.ts.map +1 -0
  89. package/src/lib/datastore/block-document-store-factory.js +29 -0
  90. package/src/lib/datastore/block-document-store-factory.js.map +1 -0
  91. package/src/lib/datastore/block-document-store.d.ts +185 -0
  92. package/src/lib/datastore/block-document-store.d.ts.map +1 -0
  93. package/src/lib/datastore/block-document-store.js +590 -0
  94. package/src/lib/datastore/block-document-store.js.map +1 -0
  95. package/src/lib/datastore/document-model-adapter.d.ts +48 -0
  96. package/src/lib/datastore/document-model-adapter.d.ts.map +1 -0
  97. package/src/lib/datastore/document-model-adapter.js +178 -0
  98. package/src/lib/datastore/document-model-adapter.js.map +1 -0
  99. package/src/lib/datastore/document-store.d.ts +64 -0
  100. package/src/lib/datastore/document-store.d.ts.map +1 -0
  101. package/src/lib/datastore/document-store.js +3 -0
  102. package/src/lib/datastore/document-store.js.map +1 -0
  103. package/src/lib/datastore/memory-document-store.d.ts +6 -0
  104. package/src/lib/datastore/memory-document-store.d.ts.map +1 -0
  105. package/src/lib/datastore/memory-document-store.js +196 -0
  106. package/src/lib/datastore/memory-document-store.js.map +1 -0
  107. package/src/lib/documents/base.d.ts +5 -0
  108. package/src/lib/documents/base.d.ts.map +1 -0
  109. package/src/lib/documents/base.js +3 -0
  110. package/src/lib/documents/base.js.map +1 -0
  111. package/src/lib/documents/email-token.d.ts +8 -0
  112. package/src/lib/documents/email-token.d.ts.map +1 -0
  113. package/src/lib/documents/email-token.js +3 -0
  114. package/src/lib/documents/email-token.js.map +1 -0
  115. package/src/lib/documents/index.d.ts +7 -0
  116. package/src/lib/documents/index.d.ts.map +1 -0
  117. package/src/lib/documents/index.js +3 -0
  118. package/src/lib/documents/index.js.map +1 -0
  119. package/src/lib/documents/mnemonic.d.ts +8 -0
  120. package/src/lib/documents/mnemonic.d.ts.map +1 -0
  121. package/src/lib/documents/mnemonic.js +3 -0
  122. package/src/lib/documents/mnemonic.js.map +1 -0
  123. package/src/lib/documents/role.d.ts +8 -0
  124. package/src/lib/documents/role.d.ts.map +1 -0
  125. package/src/lib/documents/role.js +3 -0
  126. package/src/lib/documents/role.js.map +1 -0
  127. package/src/lib/documents/used-direct-login-token.d.ts +5 -0
  128. package/src/lib/documents/used-direct-login-token.d.ts.map +1 -0
  129. package/src/lib/documents/used-direct-login-token.js +3 -0
  130. package/src/lib/documents/used-direct-login-token.js.map +1 -0
  131. package/src/lib/documents/user-role.d.ts +8 -0
  132. package/src/lib/documents/user-role.d.ts.map +1 -0
  133. package/src/lib/documents/user-role.js +3 -0
  134. package/src/lib/documents/user-role.js.map +1 -0
  135. package/src/lib/documents/user.d.ts +13 -0
  136. package/src/lib/documents/user.d.ts.map +1 -0
  137. package/src/lib/documents/user.js +3 -0
  138. package/src/lib/documents/user.js.map +1 -0
  139. package/src/lib/enumerations/model-name.d.ts +30 -0
  140. package/src/lib/enumerations/model-name.d.ts.map +1 -0
  141. package/src/lib/enumerations/model-name.js +34 -0
  142. package/src/lib/enumerations/model-name.js.map +1 -0
  143. package/src/lib/enumerations/schema-collection.d.ts +30 -0
  144. package/src/lib/enumerations/schema-collection.d.ts.map +1 -0
  145. package/src/lib/enumerations/schema-collection.js +34 -0
  146. package/src/lib/enumerations/schema-collection.js.map +1 -0
  147. package/src/lib/enumerations/symmetric-error-type.d.ts +5 -0
  148. package/src/lib/enumerations/symmetric-error-type.d.ts.map +1 -0
  149. package/src/lib/enumerations/symmetric-error-type.js +9 -0
  150. package/src/lib/enumerations/symmetric-error-type.js.map +1 -0
  151. package/src/lib/environment.d.ts +23 -0
  152. package/src/lib/environment.d.ts.map +1 -0
  153. package/src/lib/environment.js +75 -0
  154. package/src/lib/environment.js.map +1 -0
  155. package/src/lib/errors/admin-role-not-found.d.ts +6 -0
  156. package/src/lib/errors/admin-role-not-found.d.ts.map +1 -0
  157. package/src/lib/errors/admin-role-not-found.js +14 -0
  158. package/src/lib/errors/admin-role-not-found.js.map +1 -0
  159. package/src/lib/errors/email-already-verified.d.ts +5 -0
  160. package/src/lib/errors/email-already-verified.d.ts.map +1 -0
  161. package/src/lib/errors/email-already-verified.js +11 -0
  162. package/src/lib/errors/email-already-verified.js.map +1 -0
  163. package/src/lib/errors/email-token-failed-to-send.d.ts +7 -0
  164. package/src/lib/errors/email-token-failed-to-send.d.ts.map +1 -0
  165. package/src/lib/errors/email-token-failed-to-send.js +14 -0
  166. package/src/lib/errors/email-token-failed-to-send.js.map +1 -0
  167. package/src/lib/errors/express-validation.d.ts +7 -0
  168. package/src/lib/errors/express-validation.d.ts.map +1 -0
  169. package/src/lib/errors/express-validation.js +14 -0
  170. package/src/lib/errors/express-validation.js.map +1 -0
  171. package/src/lib/errors/invalid-backup-code-version.d.ts +5 -0
  172. package/src/lib/errors/invalid-backup-code-version.d.ts.map +1 -0
  173. package/src/lib/errors/invalid-backup-code-version.js +12 -0
  174. package/src/lib/errors/invalid-backup-code-version.js.map +1 -0
  175. package/src/lib/errors/invalid-challenge-response.d.ts +5 -0
  176. package/src/lib/errors/invalid-challenge-response.d.ts.map +1 -0
  177. package/src/lib/errors/invalid-challenge-response.js +14 -0
  178. package/src/lib/errors/invalid-challenge-response.js.map +1 -0
  179. package/src/lib/errors/invalid-expired-token.d.ts +5 -0
  180. package/src/lib/errors/invalid-expired-token.d.ts.map +1 -0
  181. package/src/lib/errors/invalid-expired-token.js +13 -0
  182. package/src/lib/errors/invalid-expired-token.js.map +1 -0
  183. package/src/lib/errors/invalid-jwt-token.d.ts +5 -0
  184. package/src/lib/errors/invalid-jwt-token.d.ts.map +1 -0
  185. package/src/lib/errors/invalid-jwt-token.js +12 -0
  186. package/src/lib/errors/invalid-jwt-token.js.map +1 -0
  187. package/src/lib/errors/last-admin-error.d.ts +7 -0
  188. package/src/lib/errors/last-admin-error.d.ts.map +1 -0
  189. package/src/lib/errors/last-admin-error.js +16 -0
  190. package/src/lib/errors/last-admin-error.js.map +1 -0
  191. package/src/lib/errors/login-challenge-expired.d.ts +5 -0
  192. package/src/lib/errors/login-challenge-expired.d.ts.map +1 -0
  193. package/src/lib/errors/login-challenge-expired.js +14 -0
  194. package/src/lib/errors/login-challenge-expired.js.map +1 -0
  195. package/src/lib/errors/member-role-not-found.d.ts +7 -0
  196. package/src/lib/errors/member-role-not-found.d.ts.map +1 -0
  197. package/src/lib/errors/member-role-not-found.js +14 -0
  198. package/src/lib/errors/member-role-not-found.js.map +1 -0
  199. package/src/lib/errors/missing-validated-data.d.ts +8 -0
  200. package/src/lib/errors/missing-validated-data.d.ts.map +1 -0
  201. package/src/lib/errors/missing-validated-data.js +32 -0
  202. package/src/lib/errors/missing-validated-data.js.map +1 -0
  203. package/src/lib/errors/mnemonic-or-password-required.d.ts +5 -0
  204. package/src/lib/errors/mnemonic-or-password-required.d.ts.map +1 -0
  205. package/src/lib/errors/mnemonic-or-password-required.js +14 -0
  206. package/src/lib/errors/mnemonic-or-password-required.js.map +1 -0
  207. package/src/lib/errors/restricted.d.ts +5 -0
  208. package/src/lib/errors/restricted.d.ts.map +1 -0
  209. package/src/lib/errors/restricted.js +15 -0
  210. package/src/lib/errors/restricted.js.map +1 -0
  211. package/src/lib/errors/symmetric.d.ts +9 -0
  212. package/src/lib/errors/symmetric.d.ts.map +1 -0
  213. package/src/lib/errors/symmetric.js +24 -0
  214. package/src/lib/errors/symmetric.js.map +1 -0
  215. package/src/lib/errors/token-expired.d.ts +5 -0
  216. package/src/lib/errors/token-expired.d.ts.map +1 -0
  217. package/src/lib/errors/token-expired.js +12 -0
  218. package/src/lib/errors/token-expired.js.map +1 -0
  219. package/src/lib/errors/token-not-found.d.ts +8 -0
  220. package/src/lib/errors/token-not-found.d.ts.map +1 -0
  221. package/src/lib/errors/token-not-found.js +19 -0
  222. package/src/lib/errors/token-not-found.js.map +1 -0
  223. package/src/lib/errors/translatable-error-local.d.ts +7 -0
  224. package/src/lib/errors/translatable-error-local.d.ts.map +1 -0
  225. package/src/lib/errors/translatable-error-local.js +17 -0
  226. package/src/lib/errors/translatable-error-local.js.map +1 -0
  227. package/src/lib/errors/typed-error-local.d.ts +10 -0
  228. package/src/lib/errors/typed-error-local.d.ts.map +1 -0
  229. package/src/lib/errors/typed-error-local.js +24 -0
  230. package/src/lib/errors/typed-error-local.js.map +1 -0
  231. package/src/lib/factories/blockStoreFactory.d.ts +14 -0
  232. package/src/lib/factories/blockStoreFactory.d.ts.map +1 -0
  233. package/src/lib/factories/blockStoreFactory.js +18 -0
  234. package/src/lib/factories/blockStoreFactory.js.map +1 -0
  235. package/src/lib/interfaces/api-constants.d.ts +51 -0
  236. package/src/lib/interfaces/api-constants.d.ts.map +1 -0
  237. package/src/lib/interfaces/api-constants.js +13 -0
  238. package/src/lib/interfaces/api-constants.js.map +1 -0
  239. package/src/lib/interfaces/api-express-validation-error-response.d.ts +7 -0
  240. package/src/lib/interfaces/api-express-validation-error-response.d.ts.map +1 -0
  241. package/src/lib/interfaces/api-express-validation-error-response.js +3 -0
  242. package/src/lib/interfaces/api-express-validation-error-response.js.map +1 -0
  243. package/src/lib/interfaces/api-mongo-validation-error-response.d.ts +6 -0
  244. package/src/lib/interfaces/api-mongo-validation-error-response.d.ts.map +1 -0
  245. package/src/lib/interfaces/api-mongo-validation-error-response.js +3 -0
  246. package/src/lib/interfaces/api-mongo-validation-error-response.js.map +1 -0
  247. package/src/lib/interfaces/application.d.ts +10 -0
  248. package/src/lib/interfaces/application.d.ts.map +1 -0
  249. package/src/lib/interfaces/application.js +3 -0
  250. package/src/lib/interfaces/application.js.map +1 -0
  251. package/src/lib/interfaces/authenticated-cipher.d.ts +10 -0
  252. package/src/lib/interfaces/authenticated-cipher.d.ts.map +1 -0
  253. package/src/lib/interfaces/authenticated-cipher.js +3 -0
  254. package/src/lib/interfaces/authenticated-cipher.js.map +1 -0
  255. package/src/lib/interfaces/authenticated-decipher.d.ts +9 -0
  256. package/src/lib/interfaces/authenticated-decipher.d.ts.map +1 -0
  257. package/src/lib/interfaces/authenticated-decipher.js +3 -0
  258. package/src/lib/interfaces/authenticated-decipher.js.map +1 -0
  259. package/src/lib/interfaces/backend-objects/email-token.d.ts +4 -0
  260. package/src/lib/interfaces/backend-objects/email-token.d.ts.map +1 -0
  261. package/src/lib/interfaces/backend-objects/email-token.js +3 -0
  262. package/src/lib/interfaces/backend-objects/email-token.js.map +1 -0
  263. package/src/lib/interfaces/backend-objects/request-user.d.ts +5 -0
  264. package/src/lib/interfaces/backend-objects/request-user.d.ts.map +1 -0
  265. package/src/lib/interfaces/backend-objects/request-user.js +3 -0
  266. package/src/lib/interfaces/backend-objects/request-user.js.map +1 -0
  267. package/src/lib/interfaces/backend-objects/role.d.ts +4 -0
  268. package/src/lib/interfaces/backend-objects/role.d.ts.map +1 -0
  269. package/src/lib/interfaces/backend-objects/role.js +3 -0
  270. package/src/lib/interfaces/backend-objects/role.js.map +1 -0
  271. package/src/lib/interfaces/backend-objects/user.d.ts +5 -0
  272. package/src/lib/interfaces/backend-objects/user.d.ts.map +1 -0
  273. package/src/lib/interfaces/backend-objects/user.js +3 -0
  274. package/src/lib/interfaces/backend-objects/user.js.map +1 -0
  275. package/src/lib/interfaces/bases/mnemonic.d.ts +4 -0
  276. package/src/lib/interfaces/bases/mnemonic.d.ts.map +1 -0
  277. package/src/lib/interfaces/bases/mnemonic.js +3 -0
  278. package/src/lib/interfaces/bases/mnemonic.js.map +1 -0
  279. package/src/lib/interfaces/bases/role.d.ts +4 -0
  280. package/src/lib/interfaces/bases/role.d.ts.map +1 -0
  281. package/src/lib/interfaces/bases/role.js +3 -0
  282. package/src/lib/interfaces/bases/role.js.map +1 -0
  283. package/src/lib/interfaces/bases/user-role.d.ts +4 -0
  284. package/src/lib/interfaces/bases/user-role.d.ts.map +1 -0
  285. package/src/lib/interfaces/bases/user-role.js +3 -0
  286. package/src/lib/interfaces/bases/user-role.js.map +1 -0
  287. package/src/lib/interfaces/bases/user.d.ts +5 -0
  288. package/src/lib/interfaces/bases/user.d.ts.map +1 -0
  289. package/src/lib/interfaces/bases/user.js +3 -0
  290. package/src/lib/interfaces/bases/user.js.map +1 -0
  291. package/src/lib/interfaces/checksum-config.d.ts +5 -0
  292. package/src/lib/interfaces/checksum-config.d.ts.map +1 -0
  293. package/src/lib/interfaces/checksum-config.js +3 -0
  294. package/src/lib/interfaces/checksum-config.js.map +1 -0
  295. package/src/lib/interfaces/discriminator-collections.d.ts +5 -0
  296. package/src/lib/interfaces/discriminator-collections.d.ts.map +1 -0
  297. package/src/lib/interfaces/discriminator-collections.js +3 -0
  298. package/src/lib/interfaces/discriminator-collections.js.map +1 -0
  299. package/src/lib/interfaces/ecies-consts.d.ts +88 -0
  300. package/src/lib/interfaces/ecies-consts.d.ts.map +1 -0
  301. package/src/lib/interfaces/ecies-consts.js +3 -0
  302. package/src/lib/interfaces/ecies-consts.js.map +1 -0
  303. package/src/lib/interfaces/environment-aws.d.ts +7 -0
  304. package/src/lib/interfaces/environment-aws.d.ts.map +1 -0
  305. package/src/lib/interfaces/environment-aws.js +3 -0
  306. package/src/lib/interfaces/environment-aws.js.map +1 -0
  307. package/src/lib/interfaces/environment-mongo.d.ts +76 -0
  308. package/src/lib/interfaces/environment-mongo.d.ts.map +1 -0
  309. package/src/lib/interfaces/environment-mongo.js +3 -0
  310. package/src/lib/interfaces/environment-mongo.js.map +1 -0
  311. package/src/lib/interfaces/environment.d.ts +28 -0
  312. package/src/lib/interfaces/environment.d.ts.map +1 -0
  313. package/src/lib/interfaces/environment.js +3 -0
  314. package/src/lib/interfaces/environment.js.map +1 -0
  315. package/src/lib/interfaces/jwt-sign-response.d.ts +12 -0
  316. package/src/lib/interfaces/jwt-sign-response.d.ts.map +1 -0
  317. package/src/lib/interfaces/jwt-sign-response.js +3 -0
  318. package/src/lib/interfaces/jwt-sign-response.js.map +1 -0
  319. package/src/lib/interfaces/member/member-with-mnemonic.d.ts +6 -0
  320. package/src/lib/interfaces/member/member-with-mnemonic.d.ts.map +1 -0
  321. package/src/lib/interfaces/member/member-with-mnemonic.js +3 -0
  322. package/src/lib/interfaces/member/member-with-mnemonic.js.map +1 -0
  323. package/src/lib/interfaces/member/operational.d.ts +36 -0
  324. package/src/lib/interfaces/member/operational.d.ts.map +1 -0
  325. package/src/lib/interfaces/member/operational.js +3 -0
  326. package/src/lib/interfaces/member/operational.js.map +1 -0
  327. package/src/lib/interfaces/mongo-errors.d.ts +9 -0
  328. package/src/lib/interfaces/mongo-errors.d.ts.map +1 -0
  329. package/src/lib/interfaces/mongo-errors.js +3 -0
  330. package/src/lib/interfaces/mongo-errors.js.map +1 -0
  331. package/src/lib/interfaces/multi-encrypted-message.d.ts +8 -0
  332. package/src/lib/interfaces/multi-encrypted-message.d.ts.map +1 -0
  333. package/src/lib/interfaces/multi-encrypted-message.js +3 -0
  334. package/src/lib/interfaces/multi-encrypted-message.js.map +1 -0
  335. package/src/lib/interfaces/multi-encrypted-parsed-header.d.ts +24 -0
  336. package/src/lib/interfaces/multi-encrypted-parsed-header.d.ts.map +1 -0
  337. package/src/lib/interfaces/multi-encrypted-parsed-header.js +3 -0
  338. package/src/lib/interfaces/multi-encrypted-parsed-header.js.map +1 -0
  339. package/src/lib/interfaces/pbkdf2-result.d.ts +6 -0
  340. package/src/lib/interfaces/pbkdf2-result.d.ts.map +1 -0
  341. package/src/lib/interfaces/pbkdf2-result.js +3 -0
  342. package/src/lib/interfaces/pbkdf2-result.js.map +1 -0
  343. package/src/lib/interfaces/request-user.d.ts +51 -0
  344. package/src/lib/interfaces/request-user.d.ts.map +1 -0
  345. package/src/lib/interfaces/request-user.js +3 -0
  346. package/src/lib/interfaces/request-user.js.map +1 -0
  347. package/src/lib/interfaces/responses/api-backup-codes-response.d.ts +11 -0
  348. package/src/lib/interfaces/responses/api-backup-codes-response.d.ts.map +1 -0
  349. package/src/lib/interfaces/responses/api-backup-codes-response.js +3 -0
  350. package/src/lib/interfaces/responses/api-backup-codes-response.js.map +1 -0
  351. package/src/lib/interfaces/responses/api-challenge-response.d.ts +11 -0
  352. package/src/lib/interfaces/responses/api-challenge-response.d.ts.map +1 -0
  353. package/src/lib/interfaces/responses/api-challenge-response.js +3 -0
  354. package/src/lib/interfaces/responses/api-challenge-response.js.map +1 -0
  355. package/src/lib/interfaces/responses/api-code-count-response.d.ts +11 -0
  356. package/src/lib/interfaces/responses/api-code-count-response.d.ts.map +1 -0
  357. package/src/lib/interfaces/responses/api-code-count-response.js +3 -0
  358. package/src/lib/interfaces/responses/api-code-count-response.js.map +1 -0
  359. package/src/lib/interfaces/responses/api-login-response.d.ts +20 -0
  360. package/src/lib/interfaces/responses/api-login-response.d.ts.map +1 -0
  361. package/src/lib/interfaces/responses/api-login-response.js +3 -0
  362. package/src/lib/interfaces/responses/api-login-response.js.map +1 -0
  363. package/src/lib/interfaces/responses/api-mnemonic-response.d.ts +11 -0
  364. package/src/lib/interfaces/responses/api-mnemonic-response.d.ts.map +1 -0
  365. package/src/lib/interfaces/responses/api-mnemonic-response.js +3 -0
  366. package/src/lib/interfaces/responses/api-mnemonic-response.js.map +1 -0
  367. package/src/lib/interfaces/responses/api-registration-response.d.ts +16 -0
  368. package/src/lib/interfaces/responses/api-registration-response.d.ts.map +1 -0
  369. package/src/lib/interfaces/responses/api-registration-response.js +3 -0
  370. package/src/lib/interfaces/responses/api-registration-response.js.map +1 -0
  371. package/src/lib/interfaces/responses/api-request-user-response.d.ts +12 -0
  372. package/src/lib/interfaces/responses/api-request-user-response.d.ts.map +1 -0
  373. package/src/lib/interfaces/responses/api-request-user-response.js +3 -0
  374. package/src/lib/interfaces/responses/api-request-user-response.js.map +1 -0
  375. package/src/lib/interfaces/responses/index.d.ts +9 -0
  376. package/src/lib/interfaces/responses/index.d.ts.map +1 -0
  377. package/src/lib/interfaces/responses/index.js +11 -0
  378. package/src/lib/interfaces/responses/index.js.map +1 -0
  379. package/src/lib/interfaces/schema.d.ts +28 -0
  380. package/src/lib/interfaces/schema.d.ts.map +1 -0
  381. package/src/lib/interfaces/schema.js +3 -0
  382. package/src/lib/interfaces/schema.js.map +1 -0
  383. package/src/lib/interfaces/server-init-result.d.ts +34 -0
  384. package/src/lib/interfaces/server-init-result.d.ts.map +1 -0
  385. package/src/lib/interfaces/server-init-result.js +3 -0
  386. package/src/lib/interfaces/server-init-result.js.map +1 -0
  387. package/src/lib/interfaces/single-encrypted-parsed-header.d.ts +35 -0
  388. package/src/lib/interfaces/single-encrypted-parsed-header.d.ts.map +1 -0
  389. package/src/lib/interfaces/single-encrypted-parsed-header.js +3 -0
  390. package/src/lib/interfaces/single-encrypted-parsed-header.js.map +1 -0
  391. package/src/lib/interfaces/status-code-response.d.ts +7 -0
  392. package/src/lib/interfaces/status-code-response.d.ts.map +1 -0
  393. package/src/lib/interfaces/status-code-response.js +3 -0
  394. package/src/lib/interfaces/status-code-response.js.map +1 -0
  395. package/src/lib/interfaces/symmetric-encryption-results.d.ts +5 -0
  396. package/src/lib/interfaces/symmetric-encryption-results.d.ts.map +1 -0
  397. package/src/lib/interfaces/symmetric-encryption-results.js +3 -0
  398. package/src/lib/interfaces/symmetric-encryption-results.js.map +1 -0
  399. package/src/lib/interfaces/token-user.d.ts +9 -0
  400. package/src/lib/interfaces/token-user.d.ts.map +1 -0
  401. package/src/lib/interfaces/token-user.js +3 -0
  402. package/src/lib/interfaces/token-user.js.map +1 -0
  403. package/src/lib/interfaces/wallet-seed.d.ts +7 -0
  404. package/src/lib/interfaces/wallet-seed.d.ts.map +1 -0
  405. package/src/lib/interfaces/wallet-seed.js +3 -0
  406. package/src/lib/interfaces/wallet-seed.js.map +1 -0
  407. package/src/lib/middlewares/cleanup-crypto.d.ts +7 -0
  408. package/src/lib/middlewares/cleanup-crypto.d.ts.map +1 -0
  409. package/src/lib/middlewares/cleanup-crypto.js +32 -0
  410. package/src/lib/middlewares/cleanup-crypto.js.map +1 -0
  411. package/src/lib/middlewares/index.d.ts +3 -0
  412. package/src/lib/middlewares/index.d.ts.map +1 -0
  413. package/src/lib/middlewares/index.js +10 -0
  414. package/src/lib/middlewares/index.js.map +1 -0
  415. package/src/lib/middlewares.d.ts +19 -0
  416. package/src/lib/middlewares.d.ts.map +1 -0
  417. package/src/lib/middlewares.js +95 -0
  418. package/src/lib/middlewares.js.map +1 -0
  419. package/src/lib/models/email-token.d.ts +47 -0
  420. package/src/lib/models/email-token.d.ts.map +1 -0
  421. package/src/lib/models/email-token.js +11 -0
  422. package/src/lib/models/email-token.js.map +1 -0
  423. package/src/lib/models/mnemonic.d.ts +26 -0
  424. package/src/lib/models/mnemonic.d.ts.map +1 -0
  425. package/src/lib/models/mnemonic.js +11 -0
  426. package/src/lib/models/mnemonic.js.map +1 -0
  427. package/src/lib/models/role.d.ts +23 -0
  428. package/src/lib/models/role.d.ts.map +1 -0
  429. package/src/lib/models/role.js +8 -0
  430. package/src/lib/models/role.js.map +1 -0
  431. package/src/lib/models/used-direct-login-token.d.ts +29 -0
  432. package/src/lib/models/used-direct-login-token.d.ts.map +1 -0
  433. package/src/lib/models/used-direct-login-token.js +11 -0
  434. package/src/lib/models/used-direct-login-token.js.map +1 -0
  435. package/src/lib/models/user-role.d.ts +59 -0
  436. package/src/lib/models/user-role.d.ts.map +1 -0
  437. package/src/lib/models/user-role.js +11 -0
  438. package/src/lib/models/user-role.js.map +1 -0
  439. package/src/lib/models/user.d.ts +132 -0
  440. package/src/lib/models/user.d.ts.map +1 -0
  441. package/src/lib/models/user.js +8 -0
  442. package/src/lib/models/user.js.map +1 -0
  443. package/src/lib/routers/api.d.ts +21 -0
  444. package/src/lib/routers/api.d.ts.map +1 -0
  445. package/src/lib/routers/api.js +41 -0
  446. package/src/lib/routers/api.js.map +1 -0
  447. package/src/lib/routers/app.d.ts +22 -0
  448. package/src/lib/routers/app.d.ts.map +1 -0
  449. package/src/lib/routers/app.js +131 -0
  450. package/src/lib/routers/app.js.map +1 -0
  451. package/src/lib/routers/base.d.ts +8 -0
  452. package/src/lib/routers/base.d.ts.map +1 -0
  453. package/src/lib/routers/base.js +12 -0
  454. package/src/lib/routers/base.js.map +1 -0
  455. package/src/lib/routers/messageRouter.d.ts +4 -0
  456. package/src/lib/routers/messageRouter.d.ts.map +1 -0
  457. package/src/lib/routers/messageRouter.js +81 -0
  458. package/src/lib/routers/messageRouter.js.map +1 -0
  459. package/src/lib/schemas/email-token.d.ts +44 -0
  460. package/src/lib/schemas/email-token.d.ts.map +1 -0
  461. package/src/lib/schemas/email-token.js +29 -0
  462. package/src/lib/schemas/email-token.js.map +1 -0
  463. package/src/lib/schemas/mnemonic.d.ts +22 -0
  464. package/src/lib/schemas/mnemonic.d.ts.map +1 -0
  465. package/src/lib/schemas/mnemonic.js +21 -0
  466. package/src/lib/schemas/mnemonic.js.map +1 -0
  467. package/src/lib/schemas/role.d.ts +21 -0
  468. package/src/lib/schemas/role.d.ts.map +1 -0
  469. package/src/lib/schemas/role.js +36 -0
  470. package/src/lib/schemas/role.js.map +1 -0
  471. package/src/lib/schemas/schema.d.ts +3 -0
  472. package/src/lib/schemas/schema.d.ts.map +1 -0
  473. package/src/lib/schemas/schema.js +74 -0
  474. package/src/lib/schemas/schema.js.map +1 -0
  475. package/src/lib/schemas/used-direct-login-token.d.ts +25 -0
  476. package/src/lib/schemas/used-direct-login-token.d.ts.map +1 -0
  477. package/src/lib/schemas/used-direct-login-token.js +14 -0
  478. package/src/lib/schemas/used-direct-login-token.js.map +1 -0
  479. package/src/lib/schemas/user-role.d.ts +55 -0
  480. package/src/lib/schemas/user-role.d.ts.map +1 -0
  481. package/src/lib/schemas/user-role.js +22 -0
  482. package/src/lib/schemas/user-role.js.map +1 -0
  483. package/src/lib/schemas/user.d.ts +129 -0
  484. package/src/lib/schemas/user.d.ts.map +1 -0
  485. package/src/lib/schemas/user.js +84 -0
  486. package/src/lib/schemas/user.js.map +1 -0
  487. package/src/lib/services/diskQuorumService.d.ts +55 -0
  488. package/src/lib/services/diskQuorumService.d.ts.map +1 -0
  489. package/src/lib/services/diskQuorumService.js +247 -0
  490. package/src/lib/services/diskQuorumService.js.map +1 -0
  491. package/src/lib/services/email.d.ts +27 -0
  492. package/src/lib/services/email.d.ts.map +1 -0
  493. package/src/lib/services/email.js +81 -0
  494. package/src/lib/services/email.js.map +1 -0
  495. package/src/lib/services/eventNotificationSystem.d.ts +46 -0
  496. package/src/lib/services/eventNotificationSystem.d.ts.map +1 -0
  497. package/src/lib/services/eventNotificationSystem.js +83 -0
  498. package/src/lib/services/eventNotificationSystem.js.map +1 -0
  499. package/src/lib/services/fec.d.ts +87 -0
  500. package/src/lib/services/fec.d.ts.map +1 -0
  501. package/src/lib/services/fec.js +256 -0
  502. package/src/lib/services/fec.js.map +1 -0
  503. package/src/lib/services/fecServiceFactory.d.ts +89 -0
  504. package/src/lib/services/fecServiceFactory.d.ts.map +1 -0
  505. package/src/lib/services/fecServiceFactory.js +154 -0
  506. package/src/lib/services/fecServiceFactory.js.map +1 -0
  507. package/src/lib/services/fecUsageExample.d.ts +33 -0
  508. package/src/lib/services/fecUsageExample.d.ts.map +1 -0
  509. package/src/lib/services/fecUsageExample.js +79 -0
  510. package/src/lib/services/fecUsageExample.js.map +1 -0
  511. package/src/lib/services/keyWrapping.d.ts +61 -0
  512. package/src/lib/services/keyWrapping.d.ts.map +1 -0
  513. package/src/lib/services/keyWrapping.js +297 -0
  514. package/src/lib/services/keyWrapping.js.map +1 -0
  515. package/src/lib/services/messageEventsWebSocketHandler.d.ts +15 -0
  516. package/src/lib/services/messageEventsWebSocketHandler.d.ts.map +1 -0
  517. package/src/lib/services/messageEventsWebSocketHandler.js +59 -0
  518. package/src/lib/services/messageEventsWebSocketHandler.js.map +1 -0
  519. package/src/lib/services/messagePassingService.d.ts +31 -0
  520. package/src/lib/services/messagePassingService.d.ts.map +1 -0
  521. package/src/lib/services/messagePassingService.js +88 -0
  522. package/src/lib/services/messagePassingService.js.map +1 -0
  523. package/src/lib/services/nativeRsFecService.d.ts +79 -0
  524. package/src/lib/services/nativeRsFecService.d.ts.map +1 -0
  525. package/src/lib/services/nativeRsFecService.js +295 -0
  526. package/src/lib/services/nativeRsFecService.js.map +1 -0
  527. package/src/lib/services/pbkdf2.d.ts +6 -0
  528. package/src/lib/services/pbkdf2.d.ts.map +1 -0
  529. package/src/lib/services/pbkdf2.js +31 -0
  530. package/src/lib/services/pbkdf2.js.map +1 -0
  531. package/src/lib/services/user.d.ts +10 -0
  532. package/src/lib/services/user.d.ts.map +1 -0
  533. package/src/lib/services/user.js +11 -0
  534. package/src/lib/services/user.js.map +1 -0
  535. package/src/lib/services/webSocketMessageServer.d.ts +53 -0
  536. package/src/lib/services/webSocketMessageServer.d.ts.map +1 -0
  537. package/src/lib/services/webSocketMessageServer.js +159 -0
  538. package/src/lib/services/webSocketMessageServer.js.map +1 -0
  539. package/src/lib/shared-types.d.ts +82 -0
  540. package/src/lib/shared-types.d.ts.map +1 -0
  541. package/src/lib/shared-types.js +6 -0
  542. package/src/lib/shared-types.js.map +1 -0
  543. package/src/lib/stores/availabilityAwareBlockStore.d.ts +287 -0
  544. package/src/lib/stores/availabilityAwareBlockStore.d.ts.map +1 -0
  545. package/src/lib/stores/availabilityAwareBlockStore.js +458 -0
  546. package/src/lib/stores/availabilityAwareBlockStore.js.map +1 -0
  547. package/src/lib/stores/diskBlockAsyncStore.d.ts +212 -0
  548. package/src/lib/stores/diskBlockAsyncStore.d.ts.map +1 -0
  549. package/src/lib/stores/diskBlockAsyncStore.js +803 -0
  550. package/src/lib/stores/diskBlockAsyncStore.js.map +1 -0
  551. package/src/lib/stores/diskBlockMetadataStore.d.ts +125 -0
  552. package/src/lib/stores/diskBlockMetadataStore.d.ts.map +1 -0
  553. package/src/lib/stores/diskBlockMetadataStore.js +347 -0
  554. package/src/lib/stores/diskBlockMetadataStore.js.map +1 -0
  555. package/src/lib/stores/diskBlockStore.d.ts +41 -0
  556. package/src/lib/stores/diskBlockStore.d.ts.map +1 -0
  557. package/src/lib/stores/diskBlockStore.js +87 -0
  558. package/src/lib/stores/diskBlockStore.js.map +1 -0
  559. package/src/lib/stores/diskBlockSyncStore.d.ts +12 -0
  560. package/src/lib/stores/diskBlockSyncStore.d.ts.map +1 -0
  561. package/src/lib/stores/diskBlockSyncStore.js +55 -0
  562. package/src/lib/stores/diskBlockSyncStore.js.map +1 -0
  563. package/src/lib/stores/diskCblStore.d.ts +30 -0
  564. package/src/lib/stores/diskCblStore.d.ts.map +1 -0
  565. package/src/lib/stores/diskCblStore.js +139 -0
  566. package/src/lib/stores/diskCblStore.js.map +1 -0
  567. package/src/lib/stores/diskMessageMetadataStore.d.ts +17 -0
  568. package/src/lib/stores/diskMessageMetadataStore.d.ts.map +1 -0
  569. package/src/lib/stores/diskMessageMetadataStore.js +214 -0
  570. package/src/lib/stores/diskMessageMetadataStore.js.map +1 -0
  571. package/src/lib/transforms/checksumTransform.d.ts +8 -0
  572. package/src/lib/transforms/checksumTransform.d.ts.map +1 -0
  573. package/src/lib/transforms/checksumTransform.js +22 -0
  574. package/src/lib/transforms/checksumTransform.js.map +1 -0
  575. package/src/lib/transforms/memoryWritableStream.d.ts +8 -0
  576. package/src/lib/transforms/memoryWritableStream.d.ts.map +1 -0
  577. package/src/lib/transforms/memoryWritableStream.js +20 -0
  578. package/src/lib/transforms/memoryWritableStream.js.map +1 -0
  579. package/src/lib/transforms/xorMultipleTransform.d.ts +12 -0
  580. package/src/lib/transforms/xorMultipleTransform.d.ts.map +1 -0
  581. package/src/lib/transforms/xorMultipleTransform.js +52 -0
  582. package/src/lib/transforms/xorMultipleTransform.js.map +1 -0
  583. package/src/lib/utils/type-converters.d.ts +10 -0
  584. package/src/lib/utils/type-converters.d.ts.map +1 -0
  585. package/src/lib/utils/type-converters.js +42 -0
  586. package/src/lib/utils/type-converters.js.map +1 -0
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EmailService = void 0;
4
+ /* eslint-disable @typescript-eslint/no-explicit-any */
5
+ const client_ses_1 = require("@aws-sdk/client-ses");
6
+ // import { debugLog } from '../utils';
7
+ const debugLog = (debug, type, message, ...args) => {
8
+ if (debug) {
9
+ console.log(`[${type}] ${message}`, ...args);
10
+ }
11
+ };
12
+ /**
13
+ * A generic service for sending emails using Amazon SES.
14
+ */
15
+ class EmailService {
16
+ /**
17
+ * Constructs an instance of EmailService.
18
+ * @param config Configuration object containing AWS credentials, region, sender email, and debug/disable flags.
19
+ */
20
+ constructor(application) {
21
+ this.application = application;
22
+ this.emailSender = application.environment.emailSender;
23
+ this.disableEmailSend = application.environment.disableEmailSend;
24
+ this.debug = application.environment.debug;
25
+ // Initialize the SES client with provided AWS credentials and region.
26
+ this.sesClient = new client_ses_1.SESClient({
27
+ region: application.environment.aws.region,
28
+ credentials: {
29
+ accessKeyId: application.environment.aws.accessKeyId.value ?? '',
30
+ secretAccessKey: application.environment.aws.secretAccessKey.value ?? '',
31
+ },
32
+ });
33
+ }
34
+ /**
35
+ * Sends an email using Amazon SES.
36
+ * @param to The recipient's email address.
37
+ * @param subject The subject line of the email.
38
+ * @param text The plain text body of the email.
39
+ * @param html The HTML body of the email.
40
+ * @returns A Promise that resolves when the email is sent successfully, or rejects on failure.
41
+ * @throws Error if email sending is disabled or if SES encounters an error.
42
+ */
43
+ async sendEmail(to, subject, text, html) {
44
+ if (this.disableEmailSend) {
45
+ debugLog(this.debug, 'log', `Email sending disabled for: ${to} - Subject: ${subject}`);
46
+ return;
47
+ }
48
+ const sendCommand = new client_ses_1.SendEmailCommand({
49
+ Destination: {
50
+ ToAddresses: [to], // Recipient email address
51
+ },
52
+ Message: {
53
+ Body: {
54
+ Html: {
55
+ Charset: 'UTF-8',
56
+ Data: html, // HTML content of the email
57
+ },
58
+ Text: {
59
+ Charset: 'UTF-8',
60
+ Data: text, // Plain text content of the email
61
+ },
62
+ },
63
+ Subject: {
64
+ Charset: 'UTF-8',
65
+ Data: subject, // Subject of the email
66
+ },
67
+ },
68
+ Source: this.emailSender, // Sender email address (must be verified in SES)
69
+ });
70
+ try {
71
+ await this.sesClient.send(sendCommand);
72
+ debugLog(this.debug, 'log', `Email sent successfully to ${to} with subject: ${subject}`);
73
+ }
74
+ catch (error) {
75
+ console.error(`Failed to send email to ${to}:`, error);
76
+ throw new Error(`Failed to send email: ${error instanceof Error ? error.message : String(error)}`);
77
+ }
78
+ }
79
+ }
80
+ exports.EmailService = EmailService;
81
+ //# sourceMappingURL=email.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/email.ts"],"names":[],"mappings":";;;AAAA,uDAAuD;AACvD,oDAAkE;AAElE,uCAAuC;AACvC,MAAM,QAAQ,GAAG,CACf,KAAc,EACd,IAAY,EACZ,OAAe,EACf,GAAG,IAAW,EACd,EAAE;IACF,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC,CAAC;AAEF;;GAEG;AACH,MAAa,YAAY;IAOvB;;;OAGG;IACH,YAAY,WAAyB;QACnC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC;QACvD,IAAI,CAAC,gBAAgB,GAAG,WAAW,CAAC,WAAW,CAAC,gBAAgB,CAAC;QACjE,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC;QAE3C,sEAAsE;QACtE,IAAI,CAAC,SAAS,GAAG,IAAI,sBAAS,CAAC;YAC7B,MAAM,EAAE,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM;YAC1C,WAAW,EAAE;gBACX,WAAW,EAAE,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE;gBAChE,eAAe,EACb,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,IAAI,EAAE;aAC1D;SACF,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;OAQG;IACI,KAAK,CAAC,SAAS,CACpB,EAAU,EACV,OAAe,EACf,IAAY,EACZ,IAAY;QAEZ,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,QAAQ,CACN,IAAI,CAAC,KAAK,EACV,KAAK,EACL,+BAA+B,EAAE,eAAe,OAAO,EAAE,CAC1D,CAAC;YACF,OAAO;QACT,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,6BAAgB,CAAC;YACvC,WAAW,EAAE;gBACX,WAAW,EAAE,CAAC,EAAE,CAAC,EAAE,0BAA0B;aAC9C;YACD,OAAO,EAAE;gBACP,IAAI,EAAE;oBACJ,IAAI,EAAE;wBACJ,OAAO,EAAE,OAAO;wBAChB,IAAI,EAAE,IAAI,EAAE,4BAA4B;qBACzC;oBACD,IAAI,EAAE;wBACJ,OAAO,EAAE,OAAO;wBAChB,IAAI,EAAE,IAAI,EAAE,kCAAkC;qBAC/C;iBACF;gBACD,OAAO,EAAE;oBACP,OAAO,EAAE,OAAO;oBAChB,IAAI,EAAE,OAAO,EAAE,uBAAuB;iBACvC;aACF;YACD,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,iDAAiD;SAC5E,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACvC,QAAQ,CACN,IAAI,CAAC,KAAK,EACV,KAAK,EACL,8BAA8B,EAAE,kBAAkB,OAAO,EAAE,CAC5D,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;YACvD,MAAM,IAAI,KAAK,CACb,yBACE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CACvD,EAAE,CACH,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AA3FD,oCA2FC"}
@@ -0,0 +1,46 @@
1
+ import { WebSocket } from 'ws';
2
+ import { IMessageMetadata } from '@brightchain/brightchain-lib';
3
+ export declare enum MessageEventType {
4
+ MESSAGE_STORED = "message:stored",
5
+ MESSAGE_RECEIVED = "message:received",
6
+ MESSAGE_DELIVERED = "message:delivered",
7
+ MESSAGE_FAILED = "message:failed"
8
+ }
9
+ export interface IMessageEvent {
10
+ type: MessageEventType;
11
+ timestamp: Date;
12
+ metadata: IMessageMetadata;
13
+ }
14
+ export interface IEventFilter {
15
+ types?: MessageEventType[];
16
+ senderId?: string;
17
+ recipientId?: string;
18
+ }
19
+ /**
20
+ * Event Notification System for real-time message updates
21
+ */
22
+ export declare class EventNotificationSystem {
23
+ private subscriptions;
24
+ private eventHistory;
25
+ private readonly maxHistorySize;
26
+ private readonly retentionMs;
27
+ /**
28
+ * Subscribe to message events
29
+ */
30
+ subscribe(ws: WebSocket, filter?: IEventFilter): void;
31
+ /**
32
+ * Unsubscribe from events
33
+ */
34
+ unsubscribe(ws: WebSocket): void;
35
+ /**
36
+ * Emit event to subscribers
37
+ */
38
+ emit(type: MessageEventType, metadata: IMessageMetadata): void;
39
+ /**
40
+ * Get event history
41
+ */
42
+ getEventHistory(filter?: IEventFilter, limit?: number): IMessageEvent[];
43
+ private addToHistory;
44
+ private matchesFilter;
45
+ }
46
+ //# sourceMappingURL=eventNotificationSystem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventNotificationSystem.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/eventNotificationSystem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,oBAAY,gBAAgB;IAC1B,cAAc,mBAAmB;IACjC,gBAAgB,qBAAqB;IACrC,iBAAiB,sBAAsB;IACvC,cAAc,mBAAmB;CAClC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,gBAAgB,CAAC;IACvB,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,aAAa,CAAsC;IAC3D,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;IACvC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuB;IAEnD;;OAEG;IACH,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,IAAI;IAQrD;;OAEG;IACH,WAAW,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI;IAIhC;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAgB9D;;OAEG;IACH,eAAe,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,KAAK,SAAM,GAAG,aAAa,EAAE;IAQpE,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,aAAa;CAYtB"}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EventNotificationSystem = exports.MessageEventType = void 0;
4
+ const ws_1 = require("ws");
5
+ var MessageEventType;
6
+ (function (MessageEventType) {
7
+ MessageEventType["MESSAGE_STORED"] = "message:stored";
8
+ MessageEventType["MESSAGE_RECEIVED"] = "message:received";
9
+ MessageEventType["MESSAGE_DELIVERED"] = "message:delivered";
10
+ MessageEventType["MESSAGE_FAILED"] = "message:failed";
11
+ })(MessageEventType || (exports.MessageEventType = MessageEventType = {}));
12
+ /**
13
+ * Event Notification System for real-time message updates
14
+ */
15
+ class EventNotificationSystem {
16
+ constructor() {
17
+ this.subscriptions = new Map();
18
+ this.eventHistory = [];
19
+ this.maxHistorySize = 1000;
20
+ this.retentionMs = 24 * 60 * 60 * 1000; // 24 hours
21
+ }
22
+ /**
23
+ * Subscribe to message events
24
+ */
25
+ subscribe(ws, filter) {
26
+ this.subscriptions.set(ws, filter || {});
27
+ ws.on('close', () => {
28
+ this.subscriptions.delete(ws);
29
+ });
30
+ }
31
+ /**
32
+ * Unsubscribe from events
33
+ */
34
+ unsubscribe(ws) {
35
+ this.subscriptions.delete(ws);
36
+ }
37
+ /**
38
+ * Emit event to subscribers
39
+ */
40
+ emit(type, metadata) {
41
+ const event = {
42
+ type,
43
+ timestamp: new Date(),
44
+ metadata,
45
+ };
46
+ this.addToHistory(event);
47
+ for (const [ws, filter] of this.subscriptions.entries()) {
48
+ if (this.matchesFilter(event, filter) && ws.readyState === ws_1.WebSocket.OPEN) {
49
+ ws.send(JSON.stringify(event));
50
+ }
51
+ }
52
+ }
53
+ /**
54
+ * Get event history
55
+ */
56
+ getEventHistory(filter, limit = 100) {
57
+ const cutoff = Date.now() - this.retentionMs;
58
+ return this.eventHistory
59
+ .filter(e => e.timestamp.getTime() > cutoff)
60
+ .filter(e => !filter || this.matchesFilter(e, filter))
61
+ .slice(-limit);
62
+ }
63
+ addToHistory(event) {
64
+ this.eventHistory.push(event);
65
+ if (this.eventHistory.length > this.maxHistorySize) {
66
+ this.eventHistory.shift();
67
+ }
68
+ }
69
+ matchesFilter(event, filter) {
70
+ if (filter.types && !filter.types.includes(event.type)) {
71
+ return false;
72
+ }
73
+ if (filter.senderId && event.metadata.senderId !== filter.senderId) {
74
+ return false;
75
+ }
76
+ if (filter.recipientId && !event.metadata.recipients?.includes(filter.recipientId)) {
77
+ return false;
78
+ }
79
+ return true;
80
+ }
81
+ }
82
+ exports.EventNotificationSystem = EventNotificationSystem;
83
+ //# sourceMappingURL=eventNotificationSystem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventNotificationSystem.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/eventNotificationSystem.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ import { FecRecoveryResult, IFecService, ParityData as IParityData } from '@brightchain/brightchain-lib';
2
+ /**
3
+ * WasmFecService provides Forward Error Correction (FEC) functionality using WASM.
4
+ * This service is used to:
5
+ * 1. Create parity data for file recovery
6
+ * 2. Recover corrupted files using parity data
7
+ * 3. Ensure data integrity across distributed storage
8
+ *
9
+ * This implementation uses Reed-Solomon erasure coding via @subspace/reed-solomon-erasure.wasm to:
10
+ * 1. Split file data into shards
11
+ * 2. Create parity shards
12
+ * 3. Recover lost shards using parity
13
+ *
14
+ * @requirements 1.8, 4.5, 4.6
15
+ */
16
+ /**
17
+ * @deprecated Use ParityData from @brightchain/brightchain-lib instead
18
+ */
19
+ export interface ParityData {
20
+ data: Buffer;
21
+ index: number;
22
+ }
23
+ /**
24
+ * @deprecated Use FecRecoveryResult from @brightchain/brightchain-lib instead
25
+ */
26
+ export interface RecoveryResult {
27
+ data: Buffer;
28
+ recovered: boolean;
29
+ }
30
+ /**
31
+ * WASM-based FEC Service implementing IFecService.
32
+ *
33
+ * This service provides cross-platform FEC operations using WebAssembly.
34
+ * It is the default fallback when native implementations are not available.
35
+ */
36
+ export declare class WasmFecService implements IFecService {
37
+ private wasmAvailable;
38
+ /**
39
+ * Check if the WASM FEC service is available.
40
+ *
41
+ * This checks if the @subspace/reed-solomon-erasure.wasm module can be loaded.
42
+ *
43
+ * @returns Promise resolving to true if WASM FEC is available
44
+ */
45
+ isAvailable(): Promise<boolean>;
46
+ /**
47
+ * Given a data buffer, encode it using Reed-Solomon erasure coding.
48
+ * This will produce a buffer of size (shardSize * (dataShards + parityShards))
49
+ * or (shardSize * parityShards) if fecOnly is true.
50
+ */
51
+ encode(data: Buffer, shardSize: number, dataShards: number, parityShards: number, fecOnly: boolean): Promise<Buffer>;
52
+ /**
53
+ * Given a data buffer, reconstruct/repair it using Reed-Solomon erasure coding.
54
+ * This will produce a buffer of size (shardSize * dataShards).
55
+ */
56
+ decode(data: Buffer, shardSize: number, dataShards: number, parityShards: number, shardsAvailable: boolean[]): Promise<Buffer>;
57
+ /**
58
+ * Create parity data for a block using Reed-Solomon encoding.
59
+ *
60
+ * @param blockData - The original block data to create parity for
61
+ * @param parityCount - Number of parity shards to generate
62
+ * @returns Promise resolving to array of parity data objects
63
+ */
64
+ createParityData(blockData: Buffer | Uint8Array, parityCount: number): Promise<IParityData[]>;
65
+ /**
66
+ * Recover block data using parity data.
67
+ *
68
+ * @param corruptedData - The corrupted block data, or null if completely missing
69
+ * @param parityData - Array of available parity data objects
70
+ * @param originalSize - The original size of the block data in bytes
71
+ * @returns Promise resolving to recovery result with recovered data
72
+ */
73
+ recoverFileData(_corruptedData: Buffer | Uint8Array | null, parityData: IParityData[], originalSize: number): Promise<FecRecoveryResult>;
74
+ /**
75
+ * Verify block integrity against its parity data.
76
+ *
77
+ * @param blockData - The block data to verify
78
+ * @param parityData - The stored parity data to verify against
79
+ * @returns Promise resolving to true if the block is intact
80
+ */
81
+ verifyFileIntegrity(blockData: Buffer | Uint8Array, parityData: IParityData[]): Promise<boolean>;
82
+ }
83
+ /**
84
+ * @deprecated Use WasmFecService instead. FecService is kept for backward compatibility.
85
+ */
86
+ export declare const FecService: typeof WasmFecService;
87
+ //# sourceMappingURL=fec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fec.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/fec.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,iBAAiB,EACjB,WAAW,EACX,UAAU,IAAI,WAAW,EAC1B,MAAM,8BAA8B,CAAC;AAItC;;;;;;;;;;;;;GAaG;AAEH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;GAKG;AACH,qBAAa,cAAe,YAAW,WAAW;IAChD,OAAO,CAAC,aAAa,CAAwB;IAE7C;;;;;;OAMG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAgBrC;;;;OAIG;IACU,MAAM,CACjB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,MAAM,CAAC;IA2ClB;;;OAGG;IACU,MAAM,CACjB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,OAAO,EAAE,GACzB,OAAO,CAAC,MAAM,CAAC;IA6ClB;;;;;;OAMG;IACU,gBAAgB,CAC3B,SAAS,EAAE,MAAM,GAAG,UAAU,EAC9B,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,WAAW,EAAE,CAAC;IAoEzB;;;;;;;OAOG;IACU,eAAe,CAC1B,cAAc,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,EAC1C,UAAU,EAAE,WAAW,EAAE,EACzB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,iBAAiB,CAAC;IAqE7B;;;;;;OAMG;IACU,mBAAmB,CAC9B,SAAS,EAAE,MAAM,GAAG,UAAU,EAC9B,UAAU,EAAE,WAAW,EAAE,GACxB,OAAO,CAAC,OAAO,CAAC;CAoBpB;AAED;;GAEG;AACH,eAAO,MAAM,UAAU,uBAAiB,CAAC"}
@@ -0,0 +1,256 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FecService = exports.WasmFecService = void 0;
4
+ const brightchain_lib_1 = require("@brightchain/brightchain-lib");
5
+ const reed_solomon_erasure_wasm_1 = require("@subspace/reed-solomon-erasure.wasm");
6
+ const constants_1 = require("../constants");
7
+ /**
8
+ * WASM-based FEC Service implementing IFecService.
9
+ *
10
+ * This service provides cross-platform FEC operations using WebAssembly.
11
+ * It is the default fallback when native implementations are not available.
12
+ */
13
+ class WasmFecService {
14
+ constructor() {
15
+ this.wasmAvailable = null;
16
+ }
17
+ /**
18
+ * Check if the WASM FEC service is available.
19
+ *
20
+ * This checks if the @subspace/reed-solomon-erasure.wasm module can be loaded.
21
+ *
22
+ * @returns Promise resolving to true if WASM FEC is available
23
+ */
24
+ async isAvailable() {
25
+ if (this.wasmAvailable !== null) {
26
+ return this.wasmAvailable;
27
+ }
28
+ try {
29
+ // Try to load the WASM module
30
+ await reed_solomon_erasure_wasm_1.ReedSolomonErasure.fromCurrentDirectory();
31
+ this.wasmAvailable = true;
32
+ }
33
+ catch {
34
+ this.wasmAvailable = false;
35
+ }
36
+ return this.wasmAvailable;
37
+ }
38
+ /**
39
+ * Given a data buffer, encode it using Reed-Solomon erasure coding.
40
+ * This will produce a buffer of size (shardSize * (dataShards + parityShards))
41
+ * or (shardSize * parityShards) if fecOnly is true.
42
+ */
43
+ async encode(data, shardSize, dataShards, parityShards, fecOnly) {
44
+ // Validate parameters
45
+ if (!data || data.length === 0) {
46
+ throw new brightchain_lib_1.FecError(brightchain_lib_1.FecErrorType.DataRequired);
47
+ }
48
+ if (data.length !== shardSize * dataShards) {
49
+ throw new brightchain_lib_1.FecError(brightchain_lib_1.FecErrorType.InvalidDataLength, undefined, {
50
+ LENGTH: data.length.toString(),
51
+ EXPECTED: (shardSize * dataShards).toString(),
52
+ });
53
+ }
54
+ if (shardSize > constants_1.Constants.FEC.MAX_SHARD_SIZE) {
55
+ throw new brightchain_lib_1.FecError(brightchain_lib_1.FecErrorType.ShardSizeExceedsMaximum, undefined, {
56
+ SIZE: shardSize.toString(),
57
+ MAXIMUM: constants_1.Constants.FEC.MAX_SHARD_SIZE.toString(),
58
+ });
59
+ }
60
+ if (dataShards <= 0 || parityShards <= 0) {
61
+ throw new brightchain_lib_1.FecError(brightchain_lib_1.FecErrorType.InvalidShardCounts);
62
+ }
63
+ try {
64
+ const shards = new Uint8Array(shardSize * (dataShards + parityShards));
65
+ shards.set(data);
66
+ // Encoding
67
+ const reedSolomonErasure = await reed_solomon_erasure_wasm_1.ReedSolomonErasure.fromCurrentDirectory();
68
+ reedSolomonErasure.encode(shards, dataShards, parityShards);
69
+ return fecOnly
70
+ ? Buffer.from(shards.subarray(shardSize * dataShards))
71
+ : Buffer.from(shards);
72
+ }
73
+ catch (error) {
74
+ throw new brightchain_lib_1.FecError(brightchain_lib_1.FecErrorType.FecEncodingFailed, undefined, {
75
+ ERROR: error instanceof Error ? error.message : 'Unknown error',
76
+ });
77
+ }
78
+ }
79
+ /**
80
+ * Given a data buffer, reconstruct/repair it using Reed-Solomon erasure coding.
81
+ * This will produce a buffer of size (shardSize * dataShards).
82
+ */
83
+ async decode(data, shardSize, dataShards, parityShards, shardsAvailable) {
84
+ // Validate parameters
85
+ if (!data || data.length === 0) {
86
+ throw new brightchain_lib_1.FecError(brightchain_lib_1.FecErrorType.DataRequired);
87
+ }
88
+ if (data.length !== shardSize * (dataShards + parityShards)) {
89
+ throw new brightchain_lib_1.FecError(brightchain_lib_1.FecErrorType.InvalidDataLength, undefined, {
90
+ LENGTH: data.length.toString(),
91
+ EXPECTED: (shardSize * (dataShards + parityShards)).toString(),
92
+ });
93
+ }
94
+ if (!shardsAvailable ||
95
+ shardsAvailable.length !== dataShards + parityShards) {
96
+ throw new brightchain_lib_1.FecError(brightchain_lib_1.FecErrorType.InvalidShardsAvailableArray);
97
+ }
98
+ const availableCount = shardsAvailable.filter((x) => x).length;
99
+ if (availableCount < dataShards) {
100
+ throw new brightchain_lib_1.FecError(brightchain_lib_1.FecErrorType.NotEnoughShardsAvailable, undefined, {
101
+ AVAILABLE: availableCount.toString(),
102
+ REQUIRED: dataShards.toString(),
103
+ });
104
+ }
105
+ try {
106
+ const reedSolomonErasure = await reed_solomon_erasure_wasm_1.ReedSolomonErasure.fromCurrentDirectory();
107
+ reedSolomonErasure.reconstruct(data, dataShards, parityShards, shardsAvailable);
108
+ return data.subarray(0, shardSize * dataShards);
109
+ }
110
+ catch (error) {
111
+ throw new brightchain_lib_1.FecError(brightchain_lib_1.FecErrorType.FecDecodingFailed, undefined, {
112
+ ERROR: error instanceof Error ? error.message : 'Unknown error',
113
+ });
114
+ }
115
+ }
116
+ /**
117
+ * Create parity data for a block using Reed-Solomon encoding.
118
+ *
119
+ * @param blockData - The original block data to create parity for
120
+ * @param parityCount - Number of parity shards to generate
121
+ * @returns Promise resolving to array of parity data objects
122
+ */
123
+ async createParityData(blockData, parityCount) {
124
+ const fileData = Buffer.isBuffer(blockData)
125
+ ? blockData
126
+ : Buffer.from(blockData);
127
+ if (!fileData || fileData.length === 0) {
128
+ throw new brightchain_lib_1.FecError(brightchain_lib_1.FecErrorType.DataRequired);
129
+ }
130
+ if (parityCount <= 0) {
131
+ throw new brightchain_lib_1.FecError(brightchain_lib_1.FecErrorType.ParityBlockCountMustBePositive);
132
+ }
133
+ const shardSize = Math.min(fileData.length, constants_1.Constants.FEC.MAX_SHARD_SIZE);
134
+ const requiredShards = Math.ceil(fileData.length / shardSize);
135
+ try {
136
+ const resultParityData = Array(parityCount)
137
+ .fill(null)
138
+ .map(() => Buffer.alloc(0));
139
+ // Process each chunk
140
+ for (let i = 0; i < requiredShards; i++) {
141
+ const start = i * shardSize;
142
+ const end = Math.min(start + shardSize, fileData.length);
143
+ const chunk = fileData.subarray(start, end);
144
+ // Pad chunk if necessary
145
+ const paddedChunk = chunk.length < shardSize
146
+ ? Buffer.concat([chunk, Buffer.alloc(shardSize - chunk.length)])
147
+ : chunk;
148
+ const chunkParity = await this.encode(paddedChunk, shardSize, 1, parityCount, true);
149
+ // Distribute parity data
150
+ for (let j = 0; j < parityCount; j++) {
151
+ const parityChunk = chunkParity.subarray(j * shardSize, (j + 1) * shardSize);
152
+ resultParityData[j] = Buffer.concat([
153
+ resultParityData[j],
154
+ parityChunk,
155
+ ]);
156
+ }
157
+ }
158
+ return resultParityData.map((data, index) => ({
159
+ data,
160
+ index,
161
+ }));
162
+ }
163
+ catch (error) {
164
+ if (error instanceof brightchain_lib_1.FecError) {
165
+ throw error;
166
+ }
167
+ throw new brightchain_lib_1.FecError(brightchain_lib_1.FecErrorType.FecEncodingFailed, undefined, {
168
+ ERROR: error instanceof Error ? error.message : 'Unknown error',
169
+ });
170
+ }
171
+ }
172
+ /**
173
+ * Recover block data using parity data.
174
+ *
175
+ * @param corruptedData - The corrupted block data, or null if completely missing
176
+ * @param parityData - Array of available parity data objects
177
+ * @param originalSize - The original size of the block data in bytes
178
+ * @returns Promise resolving to recovery result with recovered data
179
+ */
180
+ async recoverFileData(_corruptedData, parityData, originalSize) {
181
+ if (!parityData || parityData.length === 0) {
182
+ throw new brightchain_lib_1.FecError(brightchain_lib_1.FecErrorType.DataRequired);
183
+ }
184
+ if (originalSize <= 0) {
185
+ throw new brightchain_lib_1.FecError(brightchain_lib_1.FecErrorType.InvalidDataLength);
186
+ }
187
+ try {
188
+ const shardSize = Math.min(originalSize, constants_1.Constants.FEC.MAX_SHARD_SIZE);
189
+ const requiredShards = Math.ceil(originalSize / shardSize);
190
+ // Set up shard availability array (data shard unavailable, parity shards available)
191
+ const availableShards = [false, ...Array(parityData.length).fill(true)];
192
+ let recoveredData = Buffer.alloc(0);
193
+ // Recover each shard
194
+ for (let i = 0; i < requiredShards; i++) {
195
+ const start = i * shardSize;
196
+ const end = Math.min(start + shardSize, originalSize);
197
+ const chunkSize = end - start;
198
+ // Create placeholder for corrupted data shard
199
+ const corruptedShard = Buffer.alloc(shardSize);
200
+ // Combine corrupted and parity data for this shard
201
+ const shardData = Buffer.concat([
202
+ corruptedShard,
203
+ ...parityData.map((parity) => Buffer.from(parity.data.subarray(i * shardSize, (i + 1) * shardSize))),
204
+ ]);
205
+ // Recover this shard
206
+ const recoveredShard = await this.decode(shardData, shardSize, 1, parityData.length, availableShards);
207
+ // Only take the actual data length for the last shard
208
+ const actualShard = i === requiredShards - 1
209
+ ? recoveredShard.subarray(0, chunkSize)
210
+ : recoveredShard;
211
+ recoveredData = Buffer.concat([recoveredData, actualShard]);
212
+ }
213
+ return {
214
+ data: recoveredData,
215
+ recovered: true,
216
+ };
217
+ }
218
+ catch (error) {
219
+ if (error instanceof brightchain_lib_1.FecError) {
220
+ throw error;
221
+ }
222
+ throw new brightchain_lib_1.FecError(brightchain_lib_1.FecErrorType.FecDecodingFailed, undefined, {
223
+ ERROR: error instanceof Error ? error.message : 'Unknown error',
224
+ });
225
+ }
226
+ }
227
+ /**
228
+ * Verify block integrity against its parity data.
229
+ *
230
+ * @param blockData - The block data to verify
231
+ * @param parityData - The stored parity data to verify against
232
+ * @returns Promise resolving to true if the block is intact
233
+ */
234
+ async verifyFileIntegrity(blockData, parityData) {
235
+ try {
236
+ const fileData = Buffer.isBuffer(blockData)
237
+ ? blockData
238
+ : Buffer.from(blockData);
239
+ const regeneratedParity = await this.createParityData(fileData, parityData.length);
240
+ return parityData.every((original, index) => {
241
+ const originalBuf = Buffer.from(original.data);
242
+ const regeneratedBuf = Buffer.from(regeneratedParity[index].data);
243
+ return originalBuf.equals(regeneratedBuf);
244
+ });
245
+ }
246
+ catch {
247
+ return false;
248
+ }
249
+ }
250
+ }
251
+ exports.WasmFecService = WasmFecService;
252
+ /**
253
+ * @deprecated Use WasmFecService instead. FecService is kept for backward compatibility.
254
+ */
255
+ exports.FecService = WasmFecService;
256
+ //# sourceMappingURL=fec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fec.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/fec.ts"],"names":[],"mappings":"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"}