@ledgerhq/device-trusted-app-kit-ledger-keyring-protocol 0.0.0-rn-ble-pairing-removed-while-reconnecting-20250807094338 → 0.0.0-web-ble-29-08---20250829104351

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 (276) hide show
  1. package/lib/cjs/api/LedgerKeyringProtocol.js +1 -1
  2. package/lib/cjs/api/LedgerKeyringProtocol.js.map +1 -1
  3. package/lib/cjs/api/LedgerKeyringProtocolBuilder.js +1 -1
  4. package/lib/cjs/api/LedgerKeyringProtocolBuilder.js.map +3 -3
  5. package/lib/cjs/api/app-binder/AddToTrustchainDeviceActionTypes.js +1 -1
  6. package/lib/cjs/api/app-binder/AddToTrustchainDeviceActionTypes.js.map +3 -3
  7. package/lib/cjs/api/app-binder/AuthenticateDeviceActionTypes.js +1 -1
  8. package/lib/cjs/api/app-binder/AuthenticateDeviceActionTypes.js.map +3 -3
  9. package/lib/cjs/api/app-binder/Errors.js +1 -1
  10. package/lib/cjs/api/app-binder/Errors.js.map +3 -3
  11. package/lib/cjs/api/app-binder/LKRPTypes.js +1 -1
  12. package/lib/cjs/api/app-binder/LKRPTypes.js.map +3 -3
  13. package/lib/cjs/api/app-binder/SignBlockHeaderCommandTypes.js +1 -1
  14. package/lib/cjs/api/app-binder/SignBlockHeaderCommandTypes.js.map +1 -1
  15. package/lib/cjs/internal/DefaultLedgerKeyringProtocol.js +1 -1
  16. package/lib/cjs/internal/DefaultLedgerKeyringProtocol.js.map +3 -3
  17. package/lib/cjs/internal/app-binder/LedgerKeyringProtocolBinder.js +1 -1
  18. package/lib/cjs/internal/app-binder/LedgerKeyringProtocolBinder.js.map +3 -3
  19. package/lib/cjs/internal/app-binder/command/SetTrustedMemberCommand.js +1 -1
  20. package/lib/cjs/internal/app-binder/command/SetTrustedMemberCommand.js.map +3 -3
  21. package/lib/cjs/internal/app-binder/command/SignBlockHeader.js +1 -1
  22. package/lib/cjs/internal/app-binder/command/SignBlockHeader.js.map +3 -3
  23. package/lib/cjs/internal/app-binder/command/SignBlockHeader.test.js +1 -1
  24. package/lib/cjs/internal/app-binder/command/SignBlockHeader.test.js.map +3 -3
  25. package/lib/cjs/internal/app-binder/device-action/AddToTrustchainDeviceAction.js +1 -1
  26. package/lib/cjs/internal/app-binder/device-action/AddToTrustchainDeviceAction.js.map +3 -3
  27. package/lib/cjs/internal/app-binder/device-action/AuthenticateWithDeviceDeviceAction.js +2 -0
  28. package/lib/cjs/internal/app-binder/device-action/AuthenticateWithDeviceDeviceAction.js.map +7 -0
  29. package/lib/cjs/internal/app-binder/device-action/AuthenticateWithKeypairDeviceAction.js +2 -0
  30. package/lib/cjs/internal/app-binder/device-action/AuthenticateWithKeypairDeviceAction.js.map +7 -0
  31. package/lib/cjs/internal/app-binder/device-action/models/AuthenticateWithDeviceDeviceActionTypes.js +2 -0
  32. package/lib/cjs/internal/app-binder/device-action/models/AuthenticateWithDeviceDeviceActionTypes.js.map +7 -0
  33. package/lib/cjs/internal/app-binder/device-action/models/AuthenticateWithKeypairDeviceActionTypes.js +2 -0
  34. package/lib/cjs/internal/app-binder/device-action/models/AuthenticateWithKeypairDeviceActionTypes.js.map +7 -0
  35. package/lib/cjs/internal/app-binder/task/AuthenticateTask.js +2 -0
  36. package/lib/cjs/internal/app-binder/task/AuthenticateTask.js.map +7 -0
  37. package/lib/cjs/internal/app-binder/task/ExtractEncryptionKeyTask.js +2 -0
  38. package/lib/cjs/internal/app-binder/task/ExtractEncryptionKeyTask.js.map +7 -0
  39. package/lib/cjs/internal/app-binder/task/ParseStreamToDeviceTask.js +1 -1
  40. package/lib/cjs/internal/app-binder/task/ParseStreamToDeviceTask.js.map +3 -3
  41. package/lib/cjs/internal/app-binder/task/SignBlockTask.js +1 -1
  42. package/lib/cjs/internal/app-binder/task/SignBlockTask.js.map +3 -3
  43. package/lib/cjs/internal/app-binder/task/SignChallengeWithKeypairTask.js +1 -1
  44. package/lib/cjs/internal/app-binder/task/SignChallengeWithKeypairTask.js.map +2 -2
  45. package/lib/cjs/internal/app-binder/task/utils/TrustedProperties.js +1 -1
  46. package/lib/cjs/internal/app-binder/task/utils/TrustedProperties.js.map +3 -3
  47. package/lib/cjs/internal/di.js +1 -1
  48. package/lib/cjs/internal/di.js.map +3 -3
  49. package/lib/cjs/internal/externalTypes.js +1 -1
  50. package/lib/cjs/internal/externalTypes.js.map +2 -2
  51. package/lib/cjs/internal/lkrp-datasource/data/HttpLKRPDataSource.js +1 -1
  52. package/lib/cjs/internal/lkrp-datasource/data/HttpLKRPDataSource.js.map +3 -3
  53. package/lib/cjs/internal/lkrp-datasource/data/HttpLKRPDataSource.test.js +1 -1
  54. package/lib/cjs/internal/lkrp-datasource/data/HttpLKRPDataSource.test.js.map +3 -3
  55. package/lib/cjs/internal/lkrp-datasource/data/LKRPDataSource.js +1 -1
  56. package/lib/cjs/internal/lkrp-datasource/data/LKRPDataSource.js.map +1 -1
  57. package/lib/cjs/internal/models/LKRPBlockTypes.js +2 -0
  58. package/lib/cjs/internal/models/LKRPBlockTypes.js.map +7 -0
  59. package/lib/cjs/internal/models/LKRPCommandTypes.js +2 -0
  60. package/lib/cjs/internal/models/LKRPCommandTypes.js.map +7 -0
  61. package/lib/cjs/internal/{utils/TLVTags.js → models/Tags.js} +1 -1
  62. package/lib/cjs/internal/{utils/TLVTags.js.map → models/Tags.js.map} +2 -2
  63. package/lib/cjs/internal/models/Types.js +2 -0
  64. package/lib/cjs/internal/models/Types.js.map +7 -0
  65. package/lib/cjs/internal/use-cases/authentication/AuthenticateUseCase.js +1 -1
  66. package/lib/cjs/internal/use-cases/authentication/AuthenticateUseCase.js.map +3 -3
  67. package/lib/cjs/internal/use-cases/authentication/DecryptDataUseCase.js +2 -0
  68. package/lib/cjs/internal/use-cases/authentication/DecryptDataUseCase.js.map +7 -0
  69. package/lib/cjs/internal/use-cases/authentication/EncryptDataUseCase.js +2 -0
  70. package/lib/cjs/internal/use-cases/authentication/EncryptDataUseCase.js.map +7 -0
  71. package/lib/cjs/internal/use-cases/di/useCasesModule.js +1 -1
  72. package/lib/cjs/internal/use-cases/di/useCasesModule.js.map +3 -3
  73. package/lib/cjs/internal/use-cases/di/useCasesTypes.js +1 -1
  74. package/lib/cjs/internal/use-cases/di/useCasesTypes.js.map +2 -2
  75. package/lib/cjs/internal/utils/LKRPBlock.js.map +2 -2
  76. package/lib/cjs/internal/utils/LKRPBlock.test.js +1 -1
  77. package/lib/cjs/internal/utils/LKRPBlock.test.js.map +3 -3
  78. package/lib/cjs/internal/utils/LKRPBlockStream.js +2 -2
  79. package/lib/cjs/internal/utils/LKRPBlockStream.js.map +3 -3
  80. package/lib/cjs/internal/utils/LKRPBlockStream.test.js +3 -3
  81. package/lib/cjs/internal/utils/LKRPBlockStream.test.js.map +3 -3
  82. package/lib/cjs/internal/utils/LKRPCommand.js +2 -2
  83. package/lib/cjs/internal/utils/LKRPCommand.js.map +3 -3
  84. package/lib/cjs/internal/utils/LKRPCommand.test.js +1 -1
  85. package/lib/cjs/internal/utils/LKRPCommand.test.js.map +3 -3
  86. package/lib/cjs/internal/utils/TLVBuilder.js +1 -1
  87. package/lib/cjs/internal/utils/TLVBuilder.js.map +3 -3
  88. package/lib/cjs/internal/utils/TLVParser.js +1 -1
  89. package/lib/cjs/internal/utils/TLVParser.js.map +3 -3
  90. package/lib/cjs/internal/utils/TLVParser.test.js +1 -1
  91. package/lib/cjs/internal/utils/TLVParser.test.js.map +3 -3
  92. package/lib/cjs/internal/utils/Trustchain.js +2 -0
  93. package/lib/cjs/internal/utils/Trustchain.js.map +7 -0
  94. package/lib/cjs/internal/utils/hex.js +1 -1
  95. package/lib/cjs/internal/utils/hex.js.map +3 -3
  96. package/lib/cjs/package.json +1 -0
  97. package/lib/esm/api/LedgerKeyringProtocolBuilder.js +1 -1
  98. package/lib/esm/api/LedgerKeyringProtocolBuilder.js.map +3 -3
  99. package/lib/esm/api/app-binder/AddToTrustchainDeviceActionTypes.js +1 -0
  100. package/lib/esm/api/app-binder/AddToTrustchainDeviceActionTypes.js.map +4 -4
  101. package/lib/esm/api/app-binder/AuthenticateDeviceActionTypes.js +1 -0
  102. package/lib/esm/api/app-binder/AuthenticateDeviceActionTypes.js.map +4 -4
  103. package/lib/esm/api/app-binder/Errors.js +1 -1
  104. package/lib/esm/api/app-binder/Errors.js.map +3 -3
  105. package/lib/esm/api/app-binder/LKRPTypes.js +1 -1
  106. package/lib/esm/api/app-binder/LKRPTypes.js.map +3 -3
  107. package/lib/esm/internal/DefaultLedgerKeyringProtocol.js +1 -1
  108. package/lib/esm/internal/DefaultLedgerKeyringProtocol.js.map +3 -3
  109. package/lib/esm/internal/app-binder/LedgerKeyringProtocolBinder.js +1 -1
  110. package/lib/esm/internal/app-binder/LedgerKeyringProtocolBinder.js.map +3 -3
  111. package/lib/esm/internal/app-binder/command/SetTrustedMemberCommand.js +1 -1
  112. package/lib/esm/internal/app-binder/command/SetTrustedMemberCommand.js.map +2 -2
  113. package/lib/esm/internal/app-binder/command/SignBlockHeader.js +1 -1
  114. package/lib/esm/internal/app-binder/command/SignBlockHeader.js.map +3 -3
  115. package/lib/esm/internal/app-binder/command/SignBlockHeader.test.js +1 -1
  116. package/lib/esm/internal/app-binder/command/SignBlockHeader.test.js.map +3 -3
  117. package/lib/esm/internal/app-binder/device-action/AddToTrustchainDeviceAction.js +1 -1
  118. package/lib/esm/internal/app-binder/device-action/AddToTrustchainDeviceAction.js.map +3 -3
  119. package/lib/esm/internal/app-binder/device-action/AuthenticateWithDeviceDeviceAction.js +2 -0
  120. package/lib/esm/internal/app-binder/device-action/AuthenticateWithDeviceDeviceAction.js.map +7 -0
  121. package/lib/esm/internal/app-binder/device-action/AuthenticateWithKeypairDeviceAction.js +2 -0
  122. package/lib/esm/internal/app-binder/device-action/AuthenticateWithKeypairDeviceAction.js.map +7 -0
  123. package/lib/esm/internal/app-binder/device-action/models/AuthenticateWithDeviceDeviceActionTypes.js +1 -0
  124. package/lib/esm/internal/app-binder/device-action/models/AuthenticateWithKeypairDeviceActionTypes.js +1 -0
  125. package/lib/esm/internal/app-binder/device-action/models/AuthenticateWithKeypairDeviceActionTypes.js.map +7 -0
  126. package/lib/esm/internal/app-binder/task/AuthenticateTask.js +2 -0
  127. package/lib/esm/internal/app-binder/task/AuthenticateTask.js.map +7 -0
  128. package/lib/esm/internal/app-binder/task/ExtractEncryptionKeyTask.js +2 -0
  129. package/lib/esm/internal/app-binder/task/ExtractEncryptionKeyTask.js.map +7 -0
  130. package/lib/esm/internal/app-binder/task/ParseStreamToDeviceTask.js +1 -1
  131. package/lib/esm/internal/app-binder/task/ParseStreamToDeviceTask.js.map +3 -3
  132. package/lib/esm/internal/app-binder/task/SignBlockTask.js +1 -1
  133. package/lib/esm/internal/app-binder/task/SignBlockTask.js.map +3 -3
  134. package/lib/esm/internal/app-binder/task/SignChallengeWithKeypairTask.js +1 -1
  135. package/lib/esm/internal/app-binder/task/SignChallengeWithKeypairTask.js.map +3 -3
  136. package/lib/esm/internal/app-binder/task/utils/TrustedProperties.js +1 -1
  137. package/lib/esm/internal/app-binder/task/utils/TrustedProperties.js.map +3 -3
  138. package/lib/esm/internal/di.js +1 -1
  139. package/lib/esm/internal/di.js.map +3 -3
  140. package/lib/esm/internal/externalTypes.js +1 -1
  141. package/lib/esm/internal/externalTypes.js.map +2 -2
  142. package/lib/esm/internal/lkrp-datasource/data/HttpLKRPDataSource.js +1 -1
  143. package/lib/esm/internal/lkrp-datasource/data/HttpLKRPDataSource.js.map +3 -3
  144. package/lib/esm/internal/lkrp-datasource/data/HttpLKRPDataSource.test.js +1 -1
  145. package/lib/esm/internal/lkrp-datasource/data/HttpLKRPDataSource.test.js.map +3 -3
  146. package/lib/esm/internal/models/LKRPBlockTypes.js +1 -0
  147. package/lib/esm/internal/models/LKRPBlockTypes.js.map +7 -0
  148. package/lib/esm/internal/models/LKRPCommandTypes.js +1 -0
  149. package/lib/esm/internal/models/LKRPCommandTypes.js.map +7 -0
  150. package/lib/esm/internal/{utils/TLVTags.js → models/Tags.js} +1 -1
  151. package/lib/esm/internal/{utils/TLVTags.js.map → models/Tags.js.map} +1 -1
  152. package/lib/esm/internal/models/Types.js +1 -0
  153. package/lib/esm/internal/models/Types.js.map +7 -0
  154. package/lib/esm/internal/use-cases/authentication/AuthenticateUseCase.js +1 -1
  155. package/lib/esm/internal/use-cases/authentication/AuthenticateUseCase.js.map +3 -3
  156. package/lib/esm/internal/use-cases/authentication/DecryptDataUseCase.js +2 -0
  157. package/lib/esm/internal/use-cases/authentication/DecryptDataUseCase.js.map +7 -0
  158. package/lib/esm/internal/use-cases/authentication/EncryptDataUseCase.js +2 -0
  159. package/lib/esm/internal/use-cases/authentication/EncryptDataUseCase.js.map +7 -0
  160. package/lib/esm/internal/use-cases/di/useCasesModule.js +1 -1
  161. package/lib/esm/internal/use-cases/di/useCasesModule.js.map +3 -3
  162. package/lib/esm/internal/use-cases/di/useCasesTypes.js +1 -1
  163. package/lib/esm/internal/use-cases/di/useCasesTypes.js.map +2 -2
  164. package/lib/esm/internal/utils/LKRPBlock.js.map +2 -2
  165. package/lib/esm/internal/utils/LKRPBlock.test.js +1 -1
  166. package/lib/esm/internal/utils/LKRPBlock.test.js.map +3 -3
  167. package/lib/esm/internal/utils/LKRPBlockStream.js +2 -2
  168. package/lib/esm/internal/utils/LKRPBlockStream.js.map +3 -3
  169. package/lib/esm/internal/utils/LKRPBlockStream.test.js +3 -3
  170. package/lib/esm/internal/utils/LKRPBlockStream.test.js.map +3 -3
  171. package/lib/esm/internal/utils/LKRPCommand.js +2 -2
  172. package/lib/esm/internal/utils/LKRPCommand.js.map +3 -3
  173. package/lib/esm/internal/utils/LKRPCommand.test.js +1 -1
  174. package/lib/esm/internal/utils/LKRPCommand.test.js.map +3 -3
  175. package/lib/esm/internal/utils/TLVBuilder.js +1 -1
  176. package/lib/esm/internal/utils/TLVBuilder.js.map +2 -2
  177. package/lib/esm/internal/utils/TLVParser.js +1 -1
  178. package/lib/esm/internal/utils/TLVParser.js.map +3 -3
  179. package/lib/esm/internal/utils/TLVParser.test.js +1 -1
  180. package/lib/esm/internal/utils/TLVParser.test.js.map +3 -3
  181. package/lib/esm/internal/utils/Trustchain.js +2 -0
  182. package/lib/esm/internal/utils/Trustchain.js.map +7 -0
  183. package/lib/esm/internal/utils/hex.js +1 -1
  184. package/lib/esm/internal/utils/hex.js.map +3 -3
  185. package/lib/esm/package.json +1 -0
  186. package/lib/types/api/LedgerKeyringProtocol.d.ts +3 -4
  187. package/lib/types/api/LedgerKeyringProtocol.d.ts.map +1 -1
  188. package/lib/types/api/LedgerKeyringProtocolBuilder.d.ts +9 -6
  189. package/lib/types/api/LedgerKeyringProtocolBuilder.d.ts.map +1 -1
  190. package/lib/types/api/app-binder/AddToTrustchainDeviceActionTypes.d.ts +18 -8
  191. package/lib/types/api/app-binder/AddToTrustchainDeviceActionTypes.d.ts.map +1 -1
  192. package/lib/types/api/app-binder/AuthenticateDeviceActionTypes.d.ts +27 -31
  193. package/lib/types/api/app-binder/AuthenticateDeviceActionTypes.d.ts.map +1 -1
  194. package/lib/types/api/app-binder/Errors.d.ts +38 -12
  195. package/lib/types/api/app-binder/Errors.d.ts.map +1 -1
  196. package/lib/types/api/app-binder/LKRPTypes.d.ts +4 -0
  197. package/lib/types/api/app-binder/LKRPTypes.d.ts.map +1 -1
  198. package/lib/types/api/app-binder/SignBlockHeaderCommandTypes.d.ts +2 -1
  199. package/lib/types/api/app-binder/SignBlockHeaderCommandTypes.d.ts.map +1 -1
  200. package/lib/types/internal/DefaultLedgerKeyringProtocol.d.ts +9 -8
  201. package/lib/types/internal/DefaultLedgerKeyringProtocol.d.ts.map +1 -1
  202. package/lib/types/internal/app-binder/LedgerKeyringProtocolBinder.d.ts +10 -7
  203. package/lib/types/internal/app-binder/LedgerKeyringProtocolBinder.d.ts.map +1 -1
  204. package/lib/types/internal/app-binder/command/SignBlockHeader.d.ts +1 -0
  205. package/lib/types/internal/app-binder/command/SignBlockHeader.d.ts.map +1 -1
  206. package/lib/types/internal/app-binder/device-action/AddToTrustchainDeviceAction.d.ts +2 -2
  207. package/lib/types/internal/app-binder/device-action/AddToTrustchainDeviceAction.d.ts.map +1 -1
  208. package/lib/types/internal/app-binder/device-action/AuthenticateWithDeviceDeviceAction.d.ts +29 -0
  209. package/lib/types/internal/app-binder/device-action/AuthenticateWithDeviceDeviceAction.d.ts.map +1 -0
  210. package/lib/types/internal/app-binder/device-action/AuthenticateWithKeypairDeviceAction.d.ts +30 -0
  211. package/lib/types/internal/app-binder/device-action/AuthenticateWithKeypairDeviceAction.d.ts.map +1 -0
  212. package/lib/types/internal/app-binder/device-action/models/AuthenticateWithDeviceDeviceActionTypes.d.ts +19 -0
  213. package/lib/types/internal/app-binder/device-action/models/AuthenticateWithDeviceDeviceActionTypes.d.ts.map +1 -0
  214. package/lib/types/internal/app-binder/device-action/models/AuthenticateWithKeypairDeviceActionTypes.d.ts +16 -0
  215. package/lib/types/internal/app-binder/device-action/models/AuthenticateWithKeypairDeviceActionTypes.d.ts.map +1 -0
  216. package/lib/types/internal/app-binder/task/AuthenticateTask.d.ts +9 -0
  217. package/lib/types/internal/app-binder/task/AuthenticateTask.d.ts.map +1 -0
  218. package/lib/types/internal/app-binder/task/ExtractEncryptionKeyTask.d.ts +11 -0
  219. package/lib/types/internal/app-binder/task/ExtractEncryptionKeyTask.d.ts.map +1 -0
  220. package/lib/types/internal/app-binder/task/ParseStreamToDeviceTask.d.ts +3 -3
  221. package/lib/types/internal/app-binder/task/ParseStreamToDeviceTask.d.ts.map +1 -1
  222. package/lib/types/internal/app-binder/task/SignBlockTask.d.ts +6 -7
  223. package/lib/types/internal/app-binder/task/SignBlockTask.d.ts.map +1 -1
  224. package/lib/types/internal/app-binder/task/SignChallengeWithKeypairTask.d.ts +2 -3
  225. package/lib/types/internal/app-binder/task/SignChallengeWithKeypairTask.d.ts.map +1 -1
  226. package/lib/types/internal/app-binder/task/utils/TrustedProperties.d.ts +1 -1
  227. package/lib/types/internal/app-binder/task/utils/TrustedProperties.d.ts.map +1 -1
  228. package/lib/types/internal/di.d.ts +5 -3
  229. package/lib/types/internal/di.d.ts.map +1 -1
  230. package/lib/types/internal/externalTypes.d.ts +1 -1
  231. package/lib/types/internal/lkrp-datasource/data/HttpLKRPDataSource.d.ts +7 -9
  232. package/lib/types/internal/lkrp-datasource/data/HttpLKRPDataSource.d.ts.map +1 -1
  233. package/lib/types/internal/lkrp-datasource/data/LKRPDataSource.d.ts +7 -7
  234. package/lib/types/internal/lkrp-datasource/data/LKRPDataSource.d.ts.map +1 -1
  235. package/lib/types/internal/models/LKRPBlockTypes.d.ts +11 -0
  236. package/lib/types/internal/models/LKRPBlockTypes.d.ts.map +1 -0
  237. package/lib/types/internal/{utils/types.d.ts → models/LKRPCommandTypes.d.ts} +6 -29
  238. package/lib/types/internal/models/LKRPCommandTypes.d.ts.map +1 -0
  239. package/lib/types/internal/{utils/TLVTags.d.ts → models/Tags.d.ts} +1 -1
  240. package/lib/types/internal/models/Tags.d.ts.map +1 -0
  241. package/lib/types/internal/models/Types.d.ts +10 -0
  242. package/lib/types/internal/models/Types.d.ts.map +1 -0
  243. package/lib/types/internal/use-cases/authentication/AuthenticateUseCase.d.ts +14 -2
  244. package/lib/types/internal/use-cases/authentication/AuthenticateUseCase.d.ts.map +1 -1
  245. package/lib/types/internal/use-cases/authentication/DecryptDataUseCase.d.ts +4 -0
  246. package/lib/types/internal/use-cases/authentication/DecryptDataUseCase.d.ts.map +1 -0
  247. package/lib/types/internal/use-cases/authentication/EncryptDataUseCase.d.ts +4 -0
  248. package/lib/types/internal/use-cases/authentication/EncryptDataUseCase.d.ts.map +1 -0
  249. package/lib/types/internal/use-cases/di/useCasesModule.d.ts.map +1 -1
  250. package/lib/types/internal/use-cases/di/useCasesTypes.d.ts +2 -0
  251. package/lib/types/internal/use-cases/di/useCasesTypes.d.ts.map +1 -1
  252. package/lib/types/internal/utils/LKRPBlock.d.ts +1 -1
  253. package/lib/types/internal/utils/LKRPBlock.d.ts.map +1 -1
  254. package/lib/types/internal/utils/LKRPBlockStream.d.ts +4 -5
  255. package/lib/types/internal/utils/LKRPBlockStream.d.ts.map +1 -1
  256. package/lib/types/internal/utils/LKRPCommand.d.ts +3 -2
  257. package/lib/types/internal/utils/LKRPCommand.d.ts.map +1 -1
  258. package/lib/types/internal/utils/TLVParser.d.ts +3 -2
  259. package/lib/types/internal/utils/TLVParser.d.ts.map +1 -1
  260. package/lib/types/internal/utils/Trustchain.d.ts +14 -0
  261. package/lib/types/internal/utils/Trustchain.d.ts.map +1 -0
  262. package/lib/types/internal/utils/hex.d.ts.map +1 -1
  263. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  264. package/package.json +4 -3
  265. package/lib/cjs/internal/app-binder/device-action/AuthenticateDeviceAction.js +0 -2
  266. package/lib/cjs/internal/app-binder/device-action/AuthenticateDeviceAction.js.map +0 -7
  267. package/lib/cjs/internal/utils/types.js +0 -2
  268. package/lib/cjs/internal/utils/types.js.map +0 -7
  269. package/lib/esm/internal/app-binder/device-action/AuthenticateDeviceAction.js +0 -2
  270. package/lib/esm/internal/app-binder/device-action/AuthenticateDeviceAction.js.map +0 -7
  271. package/lib/esm/internal/utils/types.js +0 -1
  272. package/lib/types/internal/app-binder/device-action/AuthenticateDeviceAction.d.ts +0 -42
  273. package/lib/types/internal/app-binder/device-action/AuthenticateDeviceAction.d.ts.map +0 -1
  274. package/lib/types/internal/utils/TLVTags.d.ts.map +0 -1
  275. package/lib/types/internal/utils/types.d.ts.map +0 -1
  276. /package/lib/esm/internal/{utils/types.js.map → app-binder/device-action/models/AuthenticateWithDeviceDeviceActionTypes.js.map} +0 -0
@@ -0,0 +1,2 @@
1
+ import{ByteArrayBuilder as u}from"@ledgerhq/device-management-kit";import{KeypairFromBytes as f}from"../../../api/index";import{AES_BLOCK_SIZE as o,CryptoUtils as r}from"../../utils/crypto";class K{execute(n,y){const s=new f(n),a=r.randomKeypair(),c=s.ecdh(a.pubKeyToU8a()).slice(1),i=r.hmac(new Uint8Array,c),t=r.randomBytes(16),e=r.encrypt(i,t,y),d=e.subarray(0,-o),p=e.subarray(-o);return new u().add8BitUIntToData(0).addBufferToData(a.pubKeyToU8a()).addBufferToData(t).addBufferToData(p).addBufferToData(d).build()}}export{K as EncryptDataUseCase};
2
+ //# sourceMappingURL=EncryptDataUseCase.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/internal/use-cases/authentication/EncryptDataUseCase.ts"],
4
+ "sourcesContent": ["import { ByteArrayBuilder } from \"@ledgerhq/device-management-kit\";\n\nimport { KeypairFromBytes } from \"@api/index\";\nimport { AES_BLOCK_SIZE, CryptoUtils } from \"@internal/utils/crypto\";\n\nexport class EncryptDataUseCase {\n execute(encryptionKey: Uint8Array, data: Uint8Array): Uint8Array {\n // Derive the shared secret using ECDH with an ephemeral keypair\n const privateKey = new KeypairFromBytes(encryptionKey);\n const ephemeralKeypair = CryptoUtils.randomKeypair();\n const sharedSecret = privateKey\n .ecdh(ephemeralKeypair.pubKeyToU8a())\n .slice(1);\n\n // Key derivation using HMAC-SHA256\n const key = CryptoUtils.hmac(new Uint8Array(), sharedSecret);\n\n // Generate a random IV (nonce)\n const iv = CryptoUtils.randomBytes(16);\n\n // Encrypt data\n const ciphertext = CryptoUtils.encrypt(key, iv, data);\n const encryptedData = ciphertext.subarray(0, -AES_BLOCK_SIZE);\n const tag = ciphertext.subarray(-AES_BLOCK_SIZE);\n\n // Serialize the result\n return new ByteArrayBuilder()\n .add8BitUIntToData(0) // Version of the format\n .addBufferToData(ephemeralKeypair.pubKeyToU8a())\n .addBufferToData(iv)\n .addBufferToData(tag)\n .addBufferToData(encryptedData)\n .build();\n }\n}\n"],
5
+ "mappings": "AAAA,OAAS,oBAAAA,MAAwB,kCAEjC,OAAS,oBAAAC,MAAwB,aACjC,OAAS,kBAAAC,EAAgB,eAAAC,MAAmB,yBAErC,MAAMC,CAAmB,CAC9B,QAAQC,EAA2BC,EAA8B,CAE/D,MAAMC,EAAa,IAAIN,EAAiBI,CAAa,EAC/CG,EAAmBL,EAAY,cAAc,EAC7CM,EAAeF,EAClB,KAAKC,EAAiB,YAAY,CAAC,EACnC,MAAM,CAAC,EAGJE,EAAMP,EAAY,KAAK,IAAI,WAAcM,CAAY,EAGrDE,EAAKR,EAAY,YAAY,EAAE,EAG/BS,EAAaT,EAAY,QAAQO,EAAKC,EAAIL,CAAI,EAC9CO,EAAgBD,EAAW,SAAS,EAAG,CAACV,CAAc,EACtDY,EAAMF,EAAW,SAAS,CAACV,CAAc,EAG/C,OAAO,IAAIF,EAAiB,EACzB,kBAAkB,CAAC,EACnB,gBAAgBQ,EAAiB,YAAY,CAAC,EAC9C,gBAAgBG,CAAE,EAClB,gBAAgBG,CAAG,EACnB,gBAAgBD,CAAa,EAC7B,MAAM,CACX,CACF",
6
+ "names": ["ByteArrayBuilder", "KeypairFromBytes", "AES_BLOCK_SIZE", "CryptoUtils", "EncryptDataUseCase", "encryptionKey", "data", "privateKey", "ephemeralKeypair", "sharedSecret", "key", "iv", "ciphertext", "encryptedData", "tag"]
7
+ }
@@ -1,2 +1,2 @@
1
- import{ContainerModule as t}from"inversify";import{AuthenticateUseCase as o}from"../../use-cases/authentication/AuthenticateUseCase";import{useCasesTypes as s}from"./useCasesTypes";const m=()=>new t(({bind:e})=>{e(s.AuthenticateUseCase).to(o)});export{m as useCasesModuleFactory};
1
+ import{ContainerModule as a}from"inversify";import{AuthenticateUseCase as s}from"../../use-cases/authentication/AuthenticateUseCase";import{DecryptDataUseCase as o}from"../../use-cases/authentication/DecryptDataUseCase";import{EncryptDataUseCase as r}from"../../use-cases/authentication/EncryptDataUseCase";import{useCasesTypes as t}from"./useCasesTypes";const n=()=>new a(({bind:e})=>{e(t.AuthenticateUseCase).to(s),e(t.EncryptDataUseCase).to(r),e(t.DecryptDataUseCase).to(o)});export{n as useCasesModuleFactory};
2
2
  //# sourceMappingURL=useCasesModule.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/use-cases/di/useCasesModule.ts"],
4
- "sourcesContent": ["import { ContainerModule } from \"inversify\";\n\nimport { AuthenticateUseCase } from \"@internal/use-cases/authentication/AuthenticateUseCase\";\n\nimport { useCasesTypes } from \"./useCasesTypes\";\n\nexport const useCasesModuleFactory = () =>\n new ContainerModule(({ bind }) => {\n bind(useCasesTypes.AuthenticateUseCase).to(AuthenticateUseCase);\n });\n"],
5
- "mappings": "AAAA,OAAS,mBAAAA,MAAuB,YAEhC,OAAS,uBAAAC,MAA2B,yDAEpC,OAAS,iBAAAC,MAAqB,kBAEvB,MAAMC,EAAwB,IACnC,IAAIH,EAAgB,CAAC,CAAE,KAAAI,CAAK,IAAM,CAChCA,EAAKF,EAAc,mBAAmB,EAAE,GAAGD,CAAmB,CAChE,CAAC",
6
- "names": ["ContainerModule", "AuthenticateUseCase", "useCasesTypes", "useCasesModuleFactory", "bind"]
4
+ "sourcesContent": ["import { ContainerModule } from \"inversify\";\n\nimport { AuthenticateUseCase } from \"@internal/use-cases/authentication/AuthenticateUseCase\";\nimport { DecryptDataUseCase } from \"@internal/use-cases/authentication/DecryptDataUseCase\";\nimport { EncryptDataUseCase } from \"@internal/use-cases/authentication/EncryptDataUseCase\";\n\nimport { useCasesTypes } from \"./useCasesTypes\";\n\nexport const useCasesModuleFactory = () =>\n new ContainerModule(({ bind }) => {\n bind(useCasesTypes.AuthenticateUseCase).to(AuthenticateUseCase);\n bind(useCasesTypes.EncryptDataUseCase).to(EncryptDataUseCase);\n bind(useCasesTypes.DecryptDataUseCase).to(DecryptDataUseCase);\n });\n"],
5
+ "mappings": "AAAA,OAAS,mBAAAA,MAAuB,YAEhC,OAAS,uBAAAC,MAA2B,yDACpC,OAAS,sBAAAC,MAA0B,wDACnC,OAAS,sBAAAC,MAA0B,wDAEnC,OAAS,iBAAAC,MAAqB,kBAEvB,MAAMC,EAAwB,IACnC,IAAIL,EAAgB,CAAC,CAAE,KAAAM,CAAK,IAAM,CAChCA,EAAKF,EAAc,mBAAmB,EAAE,GAAGH,CAAmB,EAC9DK,EAAKF,EAAc,kBAAkB,EAAE,GAAGD,CAAkB,EAC5DG,EAAKF,EAAc,kBAAkB,EAAE,GAAGF,CAAkB,CAC9D,CAAC",
6
+ "names": ["ContainerModule", "AuthenticateUseCase", "DecryptDataUseCase", "EncryptDataUseCase", "useCasesTypes", "useCasesModuleFactory", "bind"]
7
7
  }
@@ -1,2 +1,2 @@
1
- const e={AuthenticateUseCase:Symbol.for("AuthenticateUseCase")};export{e as useCasesTypes};
1
+ const e={AuthenticateUseCase:Symbol.for("AuthenticateUseCase"),EncryptDataUseCase:Symbol.for("EncryptDataUseCase"),DecryptDataUseCase:Symbol.for("DecryptDataUseCase")};export{e as useCasesTypes};
2
2
  //# sourceMappingURL=useCasesTypes.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/use-cases/di/useCasesTypes.ts"],
4
- "sourcesContent": ["export const useCasesTypes = {\n AuthenticateUseCase: Symbol.for(\"AuthenticateUseCase\"),\n};\n"],
5
- "mappings": "AAAO,MAAMA,EAAgB,CAC3B,oBAAqB,OAAO,IAAI,qBAAqB,CACvD",
4
+ "sourcesContent": ["export const useCasesTypes = {\n AuthenticateUseCase: Symbol.for(\"AuthenticateUseCase\"),\n EncryptDataUseCase: Symbol.for(\"EncryptDataUseCase\"),\n DecryptDataUseCase: Symbol.for(\"DecryptDataUseCase\"),\n};\n"],
5
+ "mappings": "AAAO,MAAMA,EAAgB,CAC3B,oBAAqB,OAAO,IAAI,qBAAqB,EACrD,mBAAoB,OAAO,IAAI,oBAAoB,EACnD,mBAAoB,OAAO,IAAI,oBAAoB,CACrD",
6
6
  "names": ["useCasesTypes"]
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/internal/utils/LKRPBlock.ts"],
4
- "sourcesContent": ["import {\n bufferToHexaString,\n hexaStringToBuffer,\n} from \"@ledgerhq/device-management-kit\";\nimport { Either, Just, type Maybe, Nothing, Right } from \"purify-ts\";\n\nimport { type LKRPParsingError } from \"@api/app-binder/Errors\";\n\nimport { CryptoUtils } from \"./crypto\";\nimport { TLVBuilder } from \"./TLVBuilder\";\nimport { TLVParser } from \"./TLVParser\";\nimport { type LKRPBlockData, type LKRPBlockParsedData } from \"./types\";\n\nexport class LKRPBlock {\n private hashValue: Maybe<string> = Nothing; // Cache hash value for performance\n private data: Maybe<Either<LKRPParsingError, LKRPBlockParsedData>>;\n\n public constructor(\n private readonly bytes: Uint8Array,\n data?: LKRPBlockParsedData,\n ) {\n this.data = data ? Just(Right(data)) : Nothing;\n }\n\n static fromHex(hex: string): LKRPBlock {\n return new LKRPBlock(hexaStringToBuffer(hex) ?? new Uint8Array());\n }\n\n static fromData(data: LKRPBlockData): LKRPBlock {\n const builder = new TLVBuilder()\n .addInt(1, 1) // Version 1\n .addHash(hexaStringToBuffer(data.parent) ?? new Uint8Array())\n .addPublicKey(data.issuer)\n .addInt(data.commands.length, 1);\n\n const header = builder.build();\n\n data.commands.forEach((cmd) => builder.push(cmd.toU8A()));\n\n const sigStart = builder.build().length;\n const bytes = builder.addSignature(data.signature).build();\n const signature = bytes.slice(sigStart, bytes.length);\n\n return new LKRPBlock(bytes, { ...data, header, signature });\n }\n\n toString(): string {\n return bufferToHexaString(this.bytes).slice(2);\n }\n\n toU8A(): Uint8Array {\n return this.bytes;\n }\n\n parse(): Either<LKRPParsingError, LKRPBlockParsedData> {\n return this.data.orDefaultLazy(() => {\n const data = new TLVParser(this.bytes).parseBlockData();\n this.data = Just(data);\n return data;\n });\n }\n\n toHuman(): Either<LKRPParsingError, string> {\n return this.parse()\n .chain((data) =>\n Either.sequence(data.commands.map((cmd) => cmd.toHuman())).map(\n (commands) => ({ ...data, commands }),\n ),\n )\n .map((data) =>\n [\n `Parent: ${data.parent}`,\n `Issuer: ${bufferToHexaString(data.issuer).slice(2)}`,\n `Commands:${data.commands\n .flatMap((cmd) => cmd.split(\"\\n\").map((l) => `\\n ${l}`))\n .join(\"\")}`,\n `Signature: ${bufferToHexaString(data.signature.slice(2)).slice(2)}`,\n ].join(\"\\n\"),\n );\n }\n\n hash(): string {\n return this.hashValue.orDefaultLazy(() => {\n const hashValue = CryptoUtils.hash(this.bytes);\n return bufferToHexaString(hashValue).slice(2);\n });\n }\n}\n"],
5
- "mappings": "AAAA,OACE,sBAAAA,EACA,sBAAAC,MACK,kCACP,OAAS,UAAAC,EAAQ,QAAAC,EAAkB,WAAAC,EAAS,SAAAC,MAAa,YAIzD,OAAS,eAAAC,MAAmB,WAC5B,OAAS,cAAAC,MAAkB,eAC3B,OAAS,aAAAC,MAAiB,cAGnB,MAAMC,CAAU,CAId,YACYC,EACjBC,EACA,CAFiB,WAAAD,EAGjB,KAAK,KAAOC,EAAOR,EAAKE,EAAMM,CAAI,CAAC,EAAIP,CACzC,CARQ,UAA2BA,EAC3B,KASR,OAAO,QAAQQ,EAAwB,CACrC,OAAO,IAAIH,EAAUR,EAAmBW,CAAG,GAAK,IAAI,UAAY,CAClE,CAEA,OAAO,SAASD,EAAgC,CAC9C,MAAME,EAAU,IAAIN,EAAW,EAC5B,OAAO,EAAG,CAAC,EACX,QAAQN,EAAmBU,EAAK,MAAM,GAAK,IAAI,UAAY,EAC3D,aAAaA,EAAK,MAAM,EACxB,OAAOA,EAAK,SAAS,OAAQ,CAAC,EAE3BG,EAASD,EAAQ,MAAM,EAE7BF,EAAK,SAAS,QAASI,GAAQF,EAAQ,KAAKE,EAAI,MAAM,CAAC,CAAC,EAExD,MAAMC,EAAWH,EAAQ,MAAM,EAAE,OAC3BH,EAAQG,EAAQ,aAAaF,EAAK,SAAS,EAAE,MAAM,EACnDM,EAAYP,EAAM,MAAMM,EAAUN,EAAM,MAAM,EAEpD,OAAO,IAAID,EAAUC,EAAO,CAAE,GAAGC,EAAM,OAAAG,EAAQ,UAAAG,CAAU,CAAC,CAC5D,CAEA,UAAmB,CACjB,OAAOjB,EAAmB,KAAK,KAAK,EAAE,MAAM,CAAC,CAC/C,CAEA,OAAoB,CAClB,OAAO,KAAK,KACd,CAEA,OAAuD,CACrD,OAAO,KAAK,KAAK,cAAc,IAAM,CACnC,MAAMW,EAAO,IAAIH,EAAU,KAAK,KAAK,EAAE,eAAe,EACtD,YAAK,KAAOL,EAAKQ,CAAI,EACdA,CACT,CAAC,CACH,CAEA,SAA4C,CAC1C,OAAO,KAAK,MAAM,EACf,MAAOA,GACNT,EAAO,SAASS,EAAK,SAAS,IAAKI,GAAQA,EAAI,QAAQ,CAAC,CAAC,EAAE,IACxDG,IAAc,CAAE,GAAGP,EAAM,SAAAO,CAAS,EACrC,CACF,EACC,IAAKP,GACJ,CACE,WAAWA,EAAK,MAAM,GACtB,WAAWX,EAAmBW,EAAK,MAAM,EAAE,MAAM,CAAC,CAAC,GACnD,YAAYA,EAAK,SACd,QAASI,GAAQA,EAAI,MAAM;AAAA,CAAI,EAAE,IAAKI,GAAM;AAAA,IAAOA,CAAC,EAAE,CAAC,EACvD,KAAK,EAAE,CAAC,GACX,cAAcnB,EAAmBW,EAAK,UAAU,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EACpE,EAAE,KAAK;AAAA,CAAI,CACb,CACJ,CAEA,MAAe,CACb,OAAO,KAAK,UAAU,cAAc,IAAM,CACxC,MAAMS,EAAYd,EAAY,KAAK,KAAK,KAAK,EAC7C,OAAON,EAAmBoB,CAAS,EAAE,MAAM,CAAC,CAC9C,CAAC,CACH,CACF",
4
+ "sourcesContent": ["import {\n bufferToHexaString,\n hexaStringToBuffer,\n} from \"@ledgerhq/device-management-kit\";\nimport { Either, Just, type Maybe, Nothing, Right } from \"purify-ts\";\n\nimport { type LKRPParsingError } from \"@api/app-binder/Errors\";\nimport {\n type LKRPBlockData,\n type LKRPBlockParsedData,\n} from \"@internal/models/LKRPBlockTypes\";\n\nimport { CryptoUtils } from \"./crypto\";\nimport { TLVBuilder } from \"./TLVBuilder\";\nimport { TLVParser } from \"./TLVParser\";\n\nexport class LKRPBlock {\n private hashValue: Maybe<string> = Nothing; // Cache hash value for performance\n private data: Maybe<Either<LKRPParsingError, LKRPBlockParsedData>>;\n\n public constructor(\n private readonly bytes: Uint8Array,\n data?: LKRPBlockParsedData,\n ) {\n this.data = data ? Just(Right(data)) : Nothing;\n }\n\n static fromHex(hex: string): LKRPBlock {\n return new LKRPBlock(hexaStringToBuffer(hex) ?? new Uint8Array());\n }\n\n static fromData(data: LKRPBlockData): LKRPBlock {\n const builder = new TLVBuilder()\n .addInt(1, 1) // Version 1\n .addHash(hexaStringToBuffer(data.parent) ?? new Uint8Array())\n .addPublicKey(data.issuer)\n .addInt(data.commands.length, 1);\n\n const header = builder.build();\n\n data.commands.forEach((cmd) => builder.push(cmd.toU8A()));\n\n const sigStart = builder.build().length;\n const bytes = builder.addSignature(data.signature).build();\n const signature = bytes.slice(sigStart, bytes.length);\n\n return new LKRPBlock(bytes, { ...data, header, signature });\n }\n\n toString(): string {\n return bufferToHexaString(this.bytes).slice(2);\n }\n\n toU8A(): Uint8Array {\n return this.bytes;\n }\n\n parse(): Either<LKRPParsingError, LKRPBlockParsedData> {\n return this.data.orDefaultLazy(() => {\n const data = new TLVParser(this.bytes).parseBlockData();\n this.data = Just(data);\n return data;\n });\n }\n\n toHuman(): Either<LKRPParsingError, string> {\n return this.parse()\n .chain((data) =>\n Either.sequence(data.commands.map((cmd) => cmd.toHuman())).map(\n (commands) => ({ ...data, commands }),\n ),\n )\n .map((data) =>\n [\n `Parent: ${data.parent}`,\n `Issuer: ${bufferToHexaString(data.issuer).slice(2)}`,\n `Commands:${data.commands\n .flatMap((cmd) => cmd.split(\"\\n\").map((l) => `\\n ${l}`))\n .join(\"\")}`,\n `Signature: ${bufferToHexaString(data.signature.slice(2)).slice(2)}`,\n ].join(\"\\n\"),\n );\n }\n\n hash(): string {\n return this.hashValue.orDefaultLazy(() => {\n const hashValue = CryptoUtils.hash(this.bytes);\n return bufferToHexaString(hashValue).slice(2);\n });\n }\n}\n"],
5
+ "mappings": "AAAA,OACE,sBAAAA,EACA,sBAAAC,MACK,kCACP,OAAS,UAAAC,EAAQ,QAAAC,EAAkB,WAAAC,EAAS,SAAAC,MAAa,YAQzD,OAAS,eAAAC,MAAmB,WAC5B,OAAS,cAAAC,MAAkB,eAC3B,OAAS,aAAAC,MAAiB,cAEnB,MAAMC,CAAU,CAId,YACYC,EACjBC,EACA,CAFiB,WAAAD,EAGjB,KAAK,KAAOC,EAAOR,EAAKE,EAAMM,CAAI,CAAC,EAAIP,CACzC,CARQ,UAA2BA,EAC3B,KASR,OAAO,QAAQQ,EAAwB,CACrC,OAAO,IAAIH,EAAUR,EAAmBW,CAAG,GAAK,IAAI,UAAY,CAClE,CAEA,OAAO,SAASD,EAAgC,CAC9C,MAAME,EAAU,IAAIN,EAAW,EAC5B,OAAO,EAAG,CAAC,EACX,QAAQN,EAAmBU,EAAK,MAAM,GAAK,IAAI,UAAY,EAC3D,aAAaA,EAAK,MAAM,EACxB,OAAOA,EAAK,SAAS,OAAQ,CAAC,EAE3BG,EAASD,EAAQ,MAAM,EAE7BF,EAAK,SAAS,QAASI,GAAQF,EAAQ,KAAKE,EAAI,MAAM,CAAC,CAAC,EAExD,MAAMC,EAAWH,EAAQ,MAAM,EAAE,OAC3BH,EAAQG,EAAQ,aAAaF,EAAK,SAAS,EAAE,MAAM,EACnDM,EAAYP,EAAM,MAAMM,EAAUN,EAAM,MAAM,EAEpD,OAAO,IAAID,EAAUC,EAAO,CAAE,GAAGC,EAAM,OAAAG,EAAQ,UAAAG,CAAU,CAAC,CAC5D,CAEA,UAAmB,CACjB,OAAOjB,EAAmB,KAAK,KAAK,EAAE,MAAM,CAAC,CAC/C,CAEA,OAAoB,CAClB,OAAO,KAAK,KACd,CAEA,OAAuD,CACrD,OAAO,KAAK,KAAK,cAAc,IAAM,CACnC,MAAMW,EAAO,IAAIH,EAAU,KAAK,KAAK,EAAE,eAAe,EACtD,YAAK,KAAOL,EAAKQ,CAAI,EACdA,CACT,CAAC,CACH,CAEA,SAA4C,CAC1C,OAAO,KAAK,MAAM,EACf,MAAOA,GACNT,EAAO,SAASS,EAAK,SAAS,IAAKI,GAAQA,EAAI,QAAQ,CAAC,CAAC,EAAE,IACxDG,IAAc,CAAE,GAAGP,EAAM,SAAAO,CAAS,EACrC,CACF,EACC,IAAKP,GACJ,CACE,WAAWA,EAAK,MAAM,GACtB,WAAWX,EAAmBW,EAAK,MAAM,EAAE,MAAM,CAAC,CAAC,GACnD,YAAYA,EAAK,SACd,QAASI,GAAQA,EAAI,MAAM;AAAA,CAAI,EAAE,IAAKI,GAAM;AAAA,IAAOA,CAAC,EAAE,CAAC,EACvD,KAAK,EAAE,CAAC,GACX,cAAcnB,EAAmBW,EAAK,UAAU,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EACpE,EAAE,KAAK;AAAA,CAAI,CACb,CACJ,CAEA,MAAe,CACb,OAAO,KAAK,UAAU,cAAc,IAAM,CACxC,MAAMS,EAAYd,EAAY,KAAK,KAAK,KAAK,EAC7C,OAAON,EAAmBoB,CAAS,EAAE,MAAM,CAAC,CAC9C,CAAC,CACH,CACF",
6
6
  "names": ["bufferToHexaString", "hexaStringToBuffer", "Either", "Just", "Nothing", "Right", "CryptoUtils", "TLVBuilder", "TLVParser", "LKRPBlock", "bytes", "data", "hex", "builder", "header", "cmd", "sigStart", "signature", "commands", "l", "hashValue"]
7
7
  }
@@ -1,4 +1,4 @@
1
- import{Left as n,Right as b}from"purify-ts";import{LKRPParsingError as s}from"../../api/app-binder/Errors";import{hexToBytes as l}from"./hex";import{LKRPBlock as d}from"./LKRPBlock";import{LKRPCommand as t}from"./LKRPCommand";import{GeneralTags as m}from"./TLVTags";const f={parent:"0000",issuer:new Uint8Array([1,2,3]),commands:[t.fromHex("10020102"),t.fromHex("11020304")],signature:new Uint8Array([4,5,6])},r=["010101","02020000","0603010203","010102"].join(""),a=[...r,"10020102","11020304","0303040506"].join(""),o={...f,header:l(r),signature:Uint8Array.from([m.Signature,3,...f.signature])};describe("LKRPBlock",()=>{describe("fromData",()=>{it("should create a Block from data",()=>{const e=d.fromData(f);expect(e.parse()).toStrictEqual(b(o)),expect(e.toString()).toBe(a)})}),describe("toString",()=>{it("should return the hex representation of the block",()=>{const e=d.fromHex(a);expect(e.toString()).toBe(a)})}),describe("toU8A",()=>{it("should return the bytes of the block",()=>{const e=new Uint8Array([1,2,3,4,5,6,7,8]),c=new d(e);expect(c.toU8A()).toBe(e)})}),describe("parse",()=>{it("should parse the block data correctly",()=>{const c=d.fromHex(a).parse();expect(c).toStrictEqual(b(o))}),it("should fail if the block data is invalid",()=>{const e=d.fromHex("invalid");expect(e.parse()).toStrictEqual(n(new s("Unexpected end of TLV")))})}),describe("toHuman",()=>{it("should return a human-readable representation of the block",()=>{const e=`
1
+ import{Left as n,Right as b}from"purify-ts";import{LKRPParsingError as s}from"../../api/app-binder/Errors";import{GeneralTags as l}from"../models/Tags";import{hexToBytes as m}from"./hex";import{LKRPBlock as d}from"./LKRPBlock";import{LKRPCommand as t}from"./LKRPCommand";const f={parent:"0000",issuer:new Uint8Array([1,2,3]),commands:[t.fromHex("10020102"),t.fromHex("11020304")],signature:new Uint8Array([4,5,6])},r=["010101","02020000","0603010203","010102"].join(""),a=[...r,"10020102","11020304","0303040506"].join(""),o={...f,header:m(r),signature:Uint8Array.from([l.Signature,3,...f.signature])};describe("LKRPBlock",()=>{describe("fromData",()=>{it("should create a Block from data",()=>{const e=d.fromData(f);expect(e.parse()).toStrictEqual(b(o)),expect(e.toString()).toBe(a)})}),describe("toString",()=>{it("should return the hex representation of the block",()=>{const e=d.fromHex(a);expect(e.toString()).toBe(a)})}),describe("toU8A",()=>{it("should return the bytes of the block",()=>{const e=new Uint8Array([1,2,3,4,5,6,7,8]),c=new d(e);expect(c.toU8A()).toBe(e)})}),describe("parse",()=>{it("should parse the block data correctly",()=>{const c=d.fromHex(a).parse();expect(c).toStrictEqual(b(o))}),it("should fail if the block data is invalid",()=>{const e=d.fromHex("invalid");expect(e.parse()).toStrictEqual(n(new s("Unexpected end of TLV")))})}),describe("toHuman",()=>{it("should return a human-readable representation of the block",()=>{const e=`
2
2
  01 01 01
3
3
  02 20 1d bf 17 52 c5 4b 9f b5 4f b7 c3 63 c1 e6 15 f7 2f d9 61 b7 97 e6 f0 9e 6c 1d 1b 6e db 28 5a 6d
4
4
  06 21 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/internal/utils/LKRPBlock.test.ts"],
4
- "sourcesContent": ["import { Left, Right } from \"purify-ts\";\n\nimport { LKRPParsingError } from \"@api/app-binder/Errors\";\n\nimport { hexToBytes } from \"./hex\";\nimport { LKRPBlock } from \"./LKRPBlock\";\nimport { LKRPCommand } from \"./LKRPCommand\";\nimport { GeneralTags } from \"./TLVTags\";\n\n// Mocked data for testing\nconst mockedBlockData = {\n parent: \"0000\",\n issuer: new Uint8Array([1, 2, 3]),\n commands: [LKRPCommand.fromHex(\"10020102\"), LKRPCommand.fromHex(\"11020304\")],\n signature: new Uint8Array([4, 5, 6]),\n};\nconst mockedHeaderHex = [\n \"010101\", // Version: 1\n \"02020000\", // Parent hash: 00 00 00\n \"0603010203\", // Issuer: 01 02 03\n \"010102\", // Command Count: 2\n].join(\"\");\nconst mockedBlockHex = [\n ...mockedHeaderHex, // Header\n \"10020102\", // Command 1\n \"11020304\", // Command 2\n \"0303040506\", // Signature: 04 05 06\n].join(\"\");\nconst parsedMockedBlockData = {\n ...mockedBlockData,\n header: hexToBytes(mockedHeaderHex),\n signature: Uint8Array.from([\n GeneralTags.Signature,\n 3,\n ...mockedBlockData.signature,\n ]),\n};\n\ndescribe(\"LKRPBlock\", () => {\n describe(\"fromData\", () => {\n it(\"should create a Block from data\", () => {\n // WHEN\n const block = LKRPBlock.fromData(mockedBlockData);\n // THEN\n expect(block.parse()).toStrictEqual(Right(parsedMockedBlockData));\n expect(block.toString()).toBe(mockedBlockHex);\n });\n });\n\n describe(\"toString\", () => {\n it(\"should return the hex representation of the block\", () => {\n // WHEN\n const block = LKRPBlock.fromHex(mockedBlockHex);\n // THEN\n expect(block.toString()).toBe(mockedBlockHex);\n });\n });\n\n describe(\"toU8A\", () => {\n it(\"should return the bytes of the block\", () => {\n // GIVEN\n const bytes = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]);\n // WHEN\n const block = new LKRPBlock(bytes);\n // THEN\n expect(block.toU8A()).toBe(bytes);\n });\n });\n\n describe(\"parse\", () => {\n it(\"should parse the block data correctly\", () => {\n // GIVEN\n const block = LKRPBlock.fromHex(mockedBlockHex);\n // WHEN\n const parsedData = block.parse();\n // THEN\n expect(parsedData).toStrictEqual(Right(parsedMockedBlockData));\n });\n\n it(\"should fail if the block data is invalid\", () => {\n // WHEN\n const invalidBlock = LKRPBlock.fromHex(\"invalid\");\n // THEN\n expect(invalidBlock.parse()).toStrictEqual(\n Left(new LKRPParsingError(\"Unexpected end of TLV\")),\n );\n });\n });\n\n describe(\"toHuman\", () => {\n it(\"should return a human-readable representation of the block\", () => {\n // GIVEN\n const hex = `\n 01 01 01\n 02 20 1d bf 17 52 c5 4b 9f b5 4f b7 c3 63 c1 e6 15 f7 2f d9 61 b7 97 e6 f0 9e 6c 1d 1b 6e db 28 5a 6d\n 06 21 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21\n 01 01 03\n 15 b8\n 05 0c 80 00 00 00 80 00 00 10 80 00 00 01\n 06 21 03 4f 37 31 2d 9b ab d8 c0 32 e1 dd 2d e3 3d a3 69 fa 1c e3 0f 00 5b bb a6 00 d1 73 30 ba 39 2c b2\n 05 10 b6 da 2c 97 a3 ec 8b 07 4f 38 f1 50 8a ed 33 35\n 05 50 d2 1f 8f 30 77 02 33 3f 7a 59 3b eb d7 98 a6 b0 6e b5 90 42 77 26 8a 91 35 0a 3c 1b 1e e6 7c 24 b5 a4 7d 22 8c 60 d0 fb c1 52 4e ac 1b cf 12 3e 6e 26 b5 d7 17 08 29 1c c0 8d cf 49 de 0b b3 4b ac f2 00 93 52 4c a6 56 5d 87 c6 36 b2 44 75 b2\n 06 21 02 93 fe b6 64 12 53 6d 3d 71 d5 c7 af ac 96 a3 6e a8 c6 85 88 9e eb cf 6f 6f 82 68 57 12 fe f1 50\n 11 37\n 04 0c 64 65 62 75 67 2d 64 34 63 36 31 64\n 06 21 03 d4 c6 1d da 2a af 76 29 54 fc e9 73 96 d9 be 03 99 e1 dc 75 c3 b7 90 c7 a3 4d de 85 96 a1 18 12\n 01 04 ff ff ff ff\n 12 aa\n 05 10 e7 b7 36 c4 0b 14 a8 30 fb 23 aa de d8 ea e5 44\n 05 50 df 7e 80 8c 79 46 75 d0 a2 d4 66 d4 ef c8 ec d0 7d 52 36 80 16 10 0d 34 d6 fd b8 e6 da 86 e9 2f bb b7 11 0c b5 64 29 b8 3b 1c b9 74 ed 4b 70 51 43 f6 91 b5 b8 14 68 ab d2 c5 26 26 6a 6d ee 6d f4 fd f1 a9 d8 1f e7 4c da 4f 61 c9 89 60 b4 db\n 06 21 03 d4 c6 1d da 2a af 76 29 54 fc e9 73 96 d9 be 03 99 e1 dc 75 c3 b7 90 c7 a3 4d de 85 96 a1 18 12\n 06 21 02 45 f1 1d 7d 78 bd 22 76 45 11 8a bb 20 b4 07 ff 97 8d f8 7a 6b b3 c4 46 1d 63 37 66 85 8f 98 f5\n 03 47 30 45 02 21 00 a0 ea 9d ee 12 f3 83 13 2f 90 72 ad 47 85 a4 15 14 75 d5 70 4a a9 ff 7f 95 52 e9 03 47 b4 ce be 02 20 71 a3 e4 4c 1f 4f a6 4b c6 e2 f4 06 fa 00 fc b4 6f 70 1c 99 49 29 12 bf 33 c7 3e df b2 d5 d1 71\n `.replace(/\\s/g, \"\");\n\n // WHEN\n const block = LKRPBlock.fromHex(hex);\n const humanReadable = block.toHuman();\n\n // THEN\n expect(humanReadable).toStrictEqual(\n Right(\n [\n `Parent: 1dbf1752c54b9fb54fb7c363c1e615f72fd961b797e6f09e6c1d1b6edb285a6d`,\n `Issuer: 0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021`,\n `Commands:`,\n ` Derive(0x15):`,\n ` path: m/0'/16'/1'`,\n ` groupKey: 034f37312d9babd8c032e1dd2de33da369fa1ce30f005bbba600d17330ba392cb2`,\n ` initializationVector: b6da2c97a3ec8b074f38f1508aed3335`,\n ` encryptedXpriv: d21f8f307702333f7a593bebd798a6b06eb5904277268a91350a3c1b1ee67c24b5a47d228c60d0fbc1524eac1bcf123e6e26b5d71708291cc08dcf49de0bb34bacf20093524ca6565d87c636b24475b2`,\n ` ephemeralPublicKey: 0293feb66412536d3d71d5c7afac96a36ea8c685889eebcf6f6f82685712fef150`,\n ` AddMember(0x11):`,\n ` name: debug-d4c61d`,\n ` publicKey: 03d4c61dda2aaf762954fce97396d9be0399e1dc75c3b790c7a34dde8596a11812`,\n ` permissions: 4294967295`,\n ` PublishKey(0x12):`,\n ` initializationVector: e7b736c40b14a830fb23aaded8eae544`,\n ` encryptedXpriv: df7e808c794675d0a2d466d4efc8ecd07d52368016100d34d6fdb8e6da86e92fbbb7110cb56429b83b1cb974ed4b705143f691b5b81468abd2c526266a6dee6df4fdf1a9d81fe74cda4f61c98960b4db`,\n ` recipient: 03d4c61dda2aaf762954fce97396d9be0399e1dc75c3b790c7a34dde8596a11812`,\n ` ephemeralPublicKey: 0245f11d7d78bd227645118abb20b407ff978df87a6bb3c4461d633766858f98f5`,\n `Signature: 3045022100a0ea9dee12f383132f9072ad4785a4151475d5704aa9ff7f9552e90347b4cebe022071a3e44c1f4fa64bc6e2f406fa00fcb46f701c99492912bf33c73edfb2d5d171`,\n ].join(\"\\n\"),\n ),\n );\n });\n });\n\n describe(\"hash\", () => {\n it(\"should return the hash of the block\", () => {\n // GIVEN\n const block = LKRPBlock.fromHex(mockedBlockHex);\n // WHEN\n const hash = block.hash();\n // THEN\n expect(hash).toBe(\n \"7cf783bc15c062242ab92796237da3b192361da7645c488d5023698d4f9cc952\",\n );\n });\n });\n});\n"],
5
- "mappings": "AAAA,OAAS,QAAAA,EAAM,SAAAC,MAAa,YAE5B,OAAS,oBAAAC,MAAwB,yBAEjC,OAAS,cAAAC,MAAkB,QAC3B,OAAS,aAAAC,MAAiB,cAC1B,OAAS,eAAAC,MAAmB,gBAC5B,OAAS,eAAAC,MAAmB,YAG5B,MAAMC,EAAkB,CACtB,OAAQ,OACR,OAAQ,IAAI,WAAW,CAAC,EAAG,EAAG,CAAC,CAAC,EAChC,SAAU,CAACF,EAAY,QAAQ,UAAU,EAAGA,EAAY,QAAQ,UAAU,CAAC,EAC3E,UAAW,IAAI,WAAW,CAAC,EAAG,EAAG,CAAC,CAAC,CACrC,EACMG,EAAkB,CACtB,SACA,WACA,aACA,QACF,EAAE,KAAK,EAAE,EACHC,EAAiB,CACrB,GAAGD,EACH,WACA,WACA,YACF,EAAE,KAAK,EAAE,EACHE,EAAwB,CAC5B,GAAGH,EACH,OAAQJ,EAAWK,CAAe,EAClC,UAAW,WAAW,KAAK,CACzBF,EAAY,UACZ,EACA,GAAGC,EAAgB,SACrB,CAAC,CACH,EAEA,SAAS,YAAa,IAAM,CAC1B,SAAS,WAAY,IAAM,CACzB,GAAG,kCAAmC,IAAM,CAE1C,MAAMI,EAAQP,EAAU,SAASG,CAAe,EAEhD,OAAOI,EAAM,MAAM,CAAC,EAAE,cAAcV,EAAMS,CAAqB,CAAC,EAChE,OAAOC,EAAM,SAAS,CAAC,EAAE,KAAKF,CAAc,CAC9C,CAAC,CACH,CAAC,EAED,SAAS,WAAY,IAAM,CACzB,GAAG,oDAAqD,IAAM,CAE5D,MAAME,EAAQP,EAAU,QAAQK,CAAc,EAE9C,OAAOE,EAAM,SAAS,CAAC,EAAE,KAAKF,CAAc,CAC9C,CAAC,CACH,CAAC,EAED,SAAS,QAAS,IAAM,CACtB,GAAG,uCAAwC,IAAM,CAE/C,MAAMG,EAAQ,IAAI,WAAW,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,CAAC,EAE/CD,EAAQ,IAAIP,EAAUQ,CAAK,EAEjC,OAAOD,EAAM,MAAM,CAAC,EAAE,KAAKC,CAAK,CAClC,CAAC,CACH,CAAC,EAED,SAAS,QAAS,IAAM,CACtB,GAAG,wCAAyC,IAAM,CAIhD,MAAMC,EAFQT,EAAU,QAAQK,CAAc,EAErB,MAAM,EAE/B,OAAOI,CAAU,EAAE,cAAcZ,EAAMS,CAAqB,CAAC,CAC/D,CAAC,EAED,GAAG,2CAA4C,IAAM,CAEnD,MAAMI,EAAeV,EAAU,QAAQ,SAAS,EAEhD,OAAOU,EAAa,MAAM,CAAC,EAAE,cAC3Bd,EAAK,IAAIE,EAAiB,uBAAuB,CAAC,CACpD,CACF,CAAC,CACH,CAAC,EAED,SAAS,UAAW,IAAM,CACxB,GAAG,6DAA8D,IAAM,CAErE,MAAMa,EAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAqBV,QAAQ,MAAO,EAAE,EAIbC,EADQZ,EAAU,QAAQW,CAAG,EACP,QAAQ,EAGpC,OAAOC,CAAa,EAAE,cACpBf,EACE,CACE,2EACA,6EACA,YACA,kBACA,wBACA,mFACA,6DACA,uLACA,6FACA,qBACA,yBACA,oFACA,8BACA,sBACA,6DACA,uLACA,oFACA,6FACA,2JACF,EAAE,KAAK;AAAA,CAAI,CACb,CACF,CACF,CAAC,CACH,CAAC,EAED,SAAS,OAAQ,IAAM,CACrB,GAAG,sCAAuC,IAAM,CAI9C,MAAMgB,EAFQb,EAAU,QAAQK,CAAc,EAE3B,KAAK,EAExB,OAAOQ,CAAI,EAAE,KACX,kEACF,CACF,CAAC,CACH,CAAC,CACH,CAAC",
6
- "names": ["Left", "Right", "LKRPParsingError", "hexToBytes", "LKRPBlock", "LKRPCommand", "GeneralTags", "mockedBlockData", "mockedHeaderHex", "mockedBlockHex", "parsedMockedBlockData", "block", "bytes", "parsedData", "invalidBlock", "hex", "humanReadable", "hash"]
4
+ "sourcesContent": ["import { Left, Right } from \"purify-ts\";\n\nimport { LKRPParsingError } from \"@api/app-binder/Errors\";\nimport { GeneralTags } from \"@internal/models/Tags\";\n\nimport { hexToBytes } from \"./hex\";\nimport { LKRPBlock } from \"./LKRPBlock\";\nimport { LKRPCommand } from \"./LKRPCommand\";\n\n// Mocked data for testing\nconst mockedBlockData = {\n parent: \"0000\",\n issuer: new Uint8Array([1, 2, 3]),\n commands: [LKRPCommand.fromHex(\"10020102\"), LKRPCommand.fromHex(\"11020304\")],\n signature: new Uint8Array([4, 5, 6]),\n};\nconst mockedHeaderHex = [\n \"010101\", // Version: 1\n \"02020000\", // Parent hash: 00 00 00\n \"0603010203\", // Issuer: 01 02 03\n \"010102\", // Command Count: 2\n].join(\"\");\nconst mockedBlockHex = [\n ...mockedHeaderHex, // Header\n \"10020102\", // Command 1\n \"11020304\", // Command 2\n \"0303040506\", // Signature: 04 05 06\n].join(\"\");\nconst parsedMockedBlockData = {\n ...mockedBlockData,\n header: hexToBytes(mockedHeaderHex),\n signature: Uint8Array.from([\n GeneralTags.Signature,\n 3,\n ...mockedBlockData.signature,\n ]),\n};\n\ndescribe(\"LKRPBlock\", () => {\n describe(\"fromData\", () => {\n it(\"should create a Block from data\", () => {\n // WHEN\n const block = LKRPBlock.fromData(mockedBlockData);\n // THEN\n expect(block.parse()).toStrictEqual(Right(parsedMockedBlockData));\n expect(block.toString()).toBe(mockedBlockHex);\n });\n });\n\n describe(\"toString\", () => {\n it(\"should return the hex representation of the block\", () => {\n // WHEN\n const block = LKRPBlock.fromHex(mockedBlockHex);\n // THEN\n expect(block.toString()).toBe(mockedBlockHex);\n });\n });\n\n describe(\"toU8A\", () => {\n it(\"should return the bytes of the block\", () => {\n // GIVEN\n const bytes = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]);\n // WHEN\n const block = new LKRPBlock(bytes);\n // THEN\n expect(block.toU8A()).toBe(bytes);\n });\n });\n\n describe(\"parse\", () => {\n it(\"should parse the block data correctly\", () => {\n // GIVEN\n const block = LKRPBlock.fromHex(mockedBlockHex);\n // WHEN\n const parsedData = block.parse();\n // THEN\n expect(parsedData).toStrictEqual(Right(parsedMockedBlockData));\n });\n\n it(\"should fail if the block data is invalid\", () => {\n // WHEN\n const invalidBlock = LKRPBlock.fromHex(\"invalid\");\n // THEN\n expect(invalidBlock.parse()).toStrictEqual(\n Left(new LKRPParsingError(\"Unexpected end of TLV\")),\n );\n });\n });\n\n describe(\"toHuman\", () => {\n it(\"should return a human-readable representation of the block\", () => {\n // GIVEN\n const hex = `\n 01 01 01\n 02 20 1d bf 17 52 c5 4b 9f b5 4f b7 c3 63 c1 e6 15 f7 2f d9 61 b7 97 e6 f0 9e 6c 1d 1b 6e db 28 5a 6d\n 06 21 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21\n 01 01 03\n 15 b8\n 05 0c 80 00 00 00 80 00 00 10 80 00 00 01\n 06 21 03 4f 37 31 2d 9b ab d8 c0 32 e1 dd 2d e3 3d a3 69 fa 1c e3 0f 00 5b bb a6 00 d1 73 30 ba 39 2c b2\n 05 10 b6 da 2c 97 a3 ec 8b 07 4f 38 f1 50 8a ed 33 35\n 05 50 d2 1f 8f 30 77 02 33 3f 7a 59 3b eb d7 98 a6 b0 6e b5 90 42 77 26 8a 91 35 0a 3c 1b 1e e6 7c 24 b5 a4 7d 22 8c 60 d0 fb c1 52 4e ac 1b cf 12 3e 6e 26 b5 d7 17 08 29 1c c0 8d cf 49 de 0b b3 4b ac f2 00 93 52 4c a6 56 5d 87 c6 36 b2 44 75 b2\n 06 21 02 93 fe b6 64 12 53 6d 3d 71 d5 c7 af ac 96 a3 6e a8 c6 85 88 9e eb cf 6f 6f 82 68 57 12 fe f1 50\n 11 37\n 04 0c 64 65 62 75 67 2d 64 34 63 36 31 64\n 06 21 03 d4 c6 1d da 2a af 76 29 54 fc e9 73 96 d9 be 03 99 e1 dc 75 c3 b7 90 c7 a3 4d de 85 96 a1 18 12\n 01 04 ff ff ff ff\n 12 aa\n 05 10 e7 b7 36 c4 0b 14 a8 30 fb 23 aa de d8 ea e5 44\n 05 50 df 7e 80 8c 79 46 75 d0 a2 d4 66 d4 ef c8 ec d0 7d 52 36 80 16 10 0d 34 d6 fd b8 e6 da 86 e9 2f bb b7 11 0c b5 64 29 b8 3b 1c b9 74 ed 4b 70 51 43 f6 91 b5 b8 14 68 ab d2 c5 26 26 6a 6d ee 6d f4 fd f1 a9 d8 1f e7 4c da 4f 61 c9 89 60 b4 db\n 06 21 03 d4 c6 1d da 2a af 76 29 54 fc e9 73 96 d9 be 03 99 e1 dc 75 c3 b7 90 c7 a3 4d de 85 96 a1 18 12\n 06 21 02 45 f1 1d 7d 78 bd 22 76 45 11 8a bb 20 b4 07 ff 97 8d f8 7a 6b b3 c4 46 1d 63 37 66 85 8f 98 f5\n 03 47 30 45 02 21 00 a0 ea 9d ee 12 f3 83 13 2f 90 72 ad 47 85 a4 15 14 75 d5 70 4a a9 ff 7f 95 52 e9 03 47 b4 ce be 02 20 71 a3 e4 4c 1f 4f a6 4b c6 e2 f4 06 fa 00 fc b4 6f 70 1c 99 49 29 12 bf 33 c7 3e df b2 d5 d1 71\n `.replace(/\\s/g, \"\");\n\n // WHEN\n const block = LKRPBlock.fromHex(hex);\n const humanReadable = block.toHuman();\n\n // THEN\n expect(humanReadable).toStrictEqual(\n Right(\n [\n `Parent: 1dbf1752c54b9fb54fb7c363c1e615f72fd961b797e6f09e6c1d1b6edb285a6d`,\n `Issuer: 0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021`,\n `Commands:`,\n ` Derive(0x15):`,\n ` path: m/0'/16'/1'`,\n ` groupKey: 034f37312d9babd8c032e1dd2de33da369fa1ce30f005bbba600d17330ba392cb2`,\n ` initializationVector: b6da2c97a3ec8b074f38f1508aed3335`,\n ` encryptedXpriv: d21f8f307702333f7a593bebd798a6b06eb5904277268a91350a3c1b1ee67c24b5a47d228c60d0fbc1524eac1bcf123e6e26b5d71708291cc08dcf49de0bb34bacf20093524ca6565d87c636b24475b2`,\n ` ephemeralPublicKey: 0293feb66412536d3d71d5c7afac96a36ea8c685889eebcf6f6f82685712fef150`,\n ` AddMember(0x11):`,\n ` name: debug-d4c61d`,\n ` publicKey: 03d4c61dda2aaf762954fce97396d9be0399e1dc75c3b790c7a34dde8596a11812`,\n ` permissions: 4294967295`,\n ` PublishKey(0x12):`,\n ` initializationVector: e7b736c40b14a830fb23aaded8eae544`,\n ` encryptedXpriv: df7e808c794675d0a2d466d4efc8ecd07d52368016100d34d6fdb8e6da86e92fbbb7110cb56429b83b1cb974ed4b705143f691b5b81468abd2c526266a6dee6df4fdf1a9d81fe74cda4f61c98960b4db`,\n ` recipient: 03d4c61dda2aaf762954fce97396d9be0399e1dc75c3b790c7a34dde8596a11812`,\n ` ephemeralPublicKey: 0245f11d7d78bd227645118abb20b407ff978df87a6bb3c4461d633766858f98f5`,\n `Signature: 3045022100a0ea9dee12f383132f9072ad4785a4151475d5704aa9ff7f9552e90347b4cebe022071a3e44c1f4fa64bc6e2f406fa00fcb46f701c99492912bf33c73edfb2d5d171`,\n ].join(\"\\n\"),\n ),\n );\n });\n });\n\n describe(\"hash\", () => {\n it(\"should return the hash of the block\", () => {\n // GIVEN\n const block = LKRPBlock.fromHex(mockedBlockHex);\n // WHEN\n const hash = block.hash();\n // THEN\n expect(hash).toBe(\n \"7cf783bc15c062242ab92796237da3b192361da7645c488d5023698d4f9cc952\",\n );\n });\n });\n});\n"],
5
+ "mappings": "AAAA,OAAS,QAAAA,EAAM,SAAAC,MAAa,YAE5B,OAAS,oBAAAC,MAAwB,yBACjC,OAAS,eAAAC,MAAmB,wBAE5B,OAAS,cAAAC,MAAkB,QAC3B,OAAS,aAAAC,MAAiB,cAC1B,OAAS,eAAAC,MAAmB,gBAG5B,MAAMC,EAAkB,CACtB,OAAQ,OACR,OAAQ,IAAI,WAAW,CAAC,EAAG,EAAG,CAAC,CAAC,EAChC,SAAU,CAACD,EAAY,QAAQ,UAAU,EAAGA,EAAY,QAAQ,UAAU,CAAC,EAC3E,UAAW,IAAI,WAAW,CAAC,EAAG,EAAG,CAAC,CAAC,CACrC,EACME,EAAkB,CACtB,SACA,WACA,aACA,QACF,EAAE,KAAK,EAAE,EACHC,EAAiB,CACrB,GAAGD,EACH,WACA,WACA,YACF,EAAE,KAAK,EAAE,EACHE,EAAwB,CAC5B,GAAGH,EACH,OAAQH,EAAWI,CAAe,EAClC,UAAW,WAAW,KAAK,CACzBL,EAAY,UACZ,EACA,GAAGI,EAAgB,SACrB,CAAC,CACH,EAEA,SAAS,YAAa,IAAM,CAC1B,SAAS,WAAY,IAAM,CACzB,GAAG,kCAAmC,IAAM,CAE1C,MAAMI,EAAQN,EAAU,SAASE,CAAe,EAEhD,OAAOI,EAAM,MAAM,CAAC,EAAE,cAAcV,EAAMS,CAAqB,CAAC,EAChE,OAAOC,EAAM,SAAS,CAAC,EAAE,KAAKF,CAAc,CAC9C,CAAC,CACH,CAAC,EAED,SAAS,WAAY,IAAM,CACzB,GAAG,oDAAqD,IAAM,CAE5D,MAAME,EAAQN,EAAU,QAAQI,CAAc,EAE9C,OAAOE,EAAM,SAAS,CAAC,EAAE,KAAKF,CAAc,CAC9C,CAAC,CACH,CAAC,EAED,SAAS,QAAS,IAAM,CACtB,GAAG,uCAAwC,IAAM,CAE/C,MAAMG,EAAQ,IAAI,WAAW,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,CAAC,EAE/CD,EAAQ,IAAIN,EAAUO,CAAK,EAEjC,OAAOD,EAAM,MAAM,CAAC,EAAE,KAAKC,CAAK,CAClC,CAAC,CACH,CAAC,EAED,SAAS,QAAS,IAAM,CACtB,GAAG,wCAAyC,IAAM,CAIhD,MAAMC,EAFQR,EAAU,QAAQI,CAAc,EAErB,MAAM,EAE/B,OAAOI,CAAU,EAAE,cAAcZ,EAAMS,CAAqB,CAAC,CAC/D,CAAC,EAED,GAAG,2CAA4C,IAAM,CAEnD,MAAMI,EAAeT,EAAU,QAAQ,SAAS,EAEhD,OAAOS,EAAa,MAAM,CAAC,EAAE,cAC3Bd,EAAK,IAAIE,EAAiB,uBAAuB,CAAC,CACpD,CACF,CAAC,CACH,CAAC,EAED,SAAS,UAAW,IAAM,CACxB,GAAG,6DAA8D,IAAM,CAErE,MAAMa,EAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAqBV,QAAQ,MAAO,EAAE,EAIbC,EADQX,EAAU,QAAQU,CAAG,EACP,QAAQ,EAGpC,OAAOC,CAAa,EAAE,cACpBf,EACE,CACE,2EACA,6EACA,YACA,kBACA,wBACA,mFACA,6DACA,uLACA,6FACA,qBACA,yBACA,oFACA,8BACA,sBACA,6DACA,uLACA,oFACA,6FACA,2JACF,EAAE,KAAK;AAAA,CAAI,CACb,CACF,CACF,CAAC,CACH,CAAC,EAED,SAAS,OAAQ,IAAM,CACrB,GAAG,sCAAuC,IAAM,CAI9C,MAAMgB,EAFQZ,EAAU,QAAQI,CAAc,EAE3B,KAAK,EAExB,OAAOQ,CAAI,EAAE,KACX,kEACF,CACF,CAAC,CACH,CAAC,CACH,CAAC",
6
+ "names": ["Left", "Right", "LKRPParsingError", "GeneralTags", "hexToBytes", "LKRPBlock", "LKRPCommand", "mockedBlockData", "mockedHeaderHex", "mockedBlockHex", "parsedMockedBlockData", "block", "bytes", "parsedData", "invalidBlock", "hex", "humanReadable", "hash"]
7
7
  }
@@ -1,4 +1,4 @@
1
- import{Either as l,Just as c,Maybe as p,Nothing as i,Right as f}from"purify-ts";import{CryptoUtils as b}from"../utils/crypto";import{bytesToHex as m,hexToBytes as P}from"./hex";import{LKRPBlock as y}from"./LKRPBlock";import{TLVParser as g}from"./TLVParser";import{CommandTags as u}from"./TLVTags";class h{constructor(t,r,e){this.bytes=t;this.blocks=r?c(f(r)):i,this.path=p.fromNullable(e)}validation=i;blocks=i;path=i;static fromHex(t){return new h(P(t))}static fromPath(t){return new h(new Uint8Array,[],t)}static async fromData(t,r){const e=[];let a=r??m(crypto.getRandomValues(new Uint8Array(32)));for(const s of t){const n=y.fromData({...s,parent:a});a=n.hash(),e.push(n)}const o=e.reduce((s,n)=>new Uint8Array([...s,...n.toU8A()]),new Uint8Array);return new h(o,e)}toU8A(){return this.bytes}toString(){return m(this.bytes)}parse(){return this.blocks.orDefaultLazy(()=>{const t=new g(this.bytes),r=[];for(;!t.state.isDone;){const a=t.state.offset,o=t.parseBlockData().map(s=>{const n=t.state.offset;return new y(this.bytes.slice(a,n),s)});if(r.push(o),o.isLeft())break}const e=l.sequence(r);return this.blocks=c(e),e})}toHuman(){return this.parse().map(t=>t.map(r=>r.toHuman())).chain(l.sequence).map(t=>t.join(`
1
+ import{Either as p,Just as c,Maybe as u,Nothing as i,Right as b}from"purify-ts";import{CommandTags as l}from"../models/Tags";import{CryptoUtils as f}from"../utils/crypto";import{bytesToHex as y,hexToBytes as P}from"./hex";import{LKRPBlock as m}from"./LKRPBlock";import{TLVParser as d}from"./TLVParser";class h{constructor(t,r){this.bytes=t;this.blocks=r?c(b(r)):i}validation=i;blocks=i;path=i;static fromHex(t){return new h(P(t))}static fromData(t,r){const e=[];let a=r??y(crypto.getRandomValues(new Uint8Array(32)));for(const s of t){const n=m.fromData({...s,parent:a});a=n.hash(),e.push(n)}const o=e.reduce((s,n)=>new Uint8Array([...s,...n.toU8A()]),new Uint8Array);return new h(o,e)}toU8A(){return this.bytes}toString(){return y(this.bytes)}parse(){return this.blocks.orDefaultLazy(()=>{const t=new d(this.bytes),r=[];for(;!t.state.isDone;){const a=t.state.offset,o=t.parseBlockData().map(s=>{const n=t.state.offset;return new m(this.bytes.slice(a,n),s)});if(r.push(o),o.isLeft())break}const e=p.sequence(r);return this.blocks=c(e),e})}toHuman(){return this.parse().map(t=>t.map(r=>r.toHuman())).chain(p.sequence).map(t=>t.join(`
2
2
 
3
- `))}async validate(t){return this.validation.orDefaultLazy(async()=>this.parse().map(e=>e.map(a=>a.parse().map(({parent:o})=>({parent:o,hash:()=>a.hash()})))).chain(l.sequence).toMaybe().map(async e=>{if(t&&e[0]&&t!==e[0].parent)return!1;for await(const[a,o]of e.entries()){const s=e[a+1];if(s&&o.hash()!==s.parent)return!1}return!0}).orDefault(Promise.resolve(!1)))}getPath(){return this.path.ifNothing(()=>{this.path=this.parse().toMaybe().chain(t=>p.fromNullable(t[0])).chain(t=>t.parse().toMaybe()).chain(({commands:t})=>p.fromNullable(t[0])).chain(t=>t.parse().toMaybe()).chain(t=>{switch(t.type){case u.Derive:return c(t.path);case u.Seed:return c("m/0'");default:return i}})}),this.path}getMemberBlock(t){return this.parse().toMaybe().chain(r=>{for(const e of r){const a=e.parse();if(a.isRight()){const o=a.extract();for(const s of o.commands){const n=s.getPublicKey();if(n.isJust()&&n.extract()===t)return p.of(o)}}}return i})}hasMember(t){return this.getMemberBlock(t).isJust()}getPublishedKey(t){return this.getMemberBlock(t.pubKeyToHex()).chain(r=>{for(const e of r.commands){const a=e.getEncryptedPublichedKey();if(a.isJust())return a}return i}).map(r=>{const e=t.ecdh(r.ephemeralPublicKey).slice(1),a=b.decrypt(e,r.initializationVector,r.encryptedXpriv);return{privateKey:a.slice(0,32),chainCode:a.slice(32)}})}}export{h as LKRPBlockStream};
3
+ `))}async validate(t){return this.validation.orDefaultLazy(async()=>this.parse().map(e=>e.map(a=>a.parse().map(({parent:o})=>({parent:o,hash:()=>a.hash()})))).chain(p.sequence).toMaybe().map(async e=>{if(t&&e[0]&&t!==e[0].parent)return!1;for await(const[a,o]of e.entries()){const s=e[a+1];if(s&&o.hash()!==s.parent)return!1}return!0}).orDefault(Promise.resolve(!1)))}getPath(){return this.path.ifNothing(()=>{this.path=this.parse().toMaybe().chainNullable(t=>t[0]).chain(t=>t.parse().toMaybe()).chainNullable(({commands:t})=>t[0]).chain(t=>t.parse().toMaybe()).chain(t=>{switch(t.type){case l.Derive:return c(t.path);case l.Seed:return c("m/0'");default:return i}})}),this.path}getMemberBlock(t){return this.parse().toMaybe().chain(r=>{for(const e of r){const a=e.parse();if(a.isRight()){const o=a.extract();for(const s of o.commands){const n=s.getPublicKey();if(n.isJust()&&n.extract()===t)return u.of(o)}}}return i})}hasMember(t){return this.getMemberBlock(t).isJust()}getPublishedKey(t){return this.getMemberBlock(t.pubKeyToHex()).chain(r=>{for(const e of r.commands){const a=e.getEncryptedPublishedKey();if(a.isJust())return a}return i}).map(r=>{const e=t.ecdh(r.ephemeralPublicKey).slice(1),a=f.decrypt(e,r.initializationVector,r.encryptedXpriv);return{privateKey:a.slice(0,32),chainCode:a.slice(32)}})}}export{h as LKRPBlockStream};
4
4
  //# sourceMappingURL=LKRPBlockStream.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/internal/utils/LKRPBlockStream.ts"],
4
- "sourcesContent": ["import { Either, Just, Maybe, Nothing, Right } from \"purify-ts\";\n\nimport { type LKRPParsingError } from \"@api/app-binder/Errors\";\nimport { type Keypair } from \"@api/app-binder/LKRPTypes\";\nimport { CryptoUtils } from \"@internal/utils/crypto\";\n\nimport { bytesToHex, hexToBytes } from \"./hex\";\nimport { LKRPBlock } from \"./LKRPBlock\";\nimport { TLVParser } from \"./TLVParser\";\nimport { CommandTags } from \"./TLVTags\";\nimport { type LKRPBlockData } from \"./types\";\nimport { type EncryptedPublishedKey, type PublishedKey } from \"./types\";\n\nexport class LKRPBlockStream {\n private validation: Maybe<Promise<boolean>> = Nothing;\n private blocks: Maybe<Either<LKRPParsingError, LKRPBlock[]>> = Nothing;\n private path: Maybe<string> = Nothing;\n\n constructor(\n private readonly bytes: Uint8Array,\n blocks?: LKRPBlock[],\n path?: string,\n ) {\n this.blocks = blocks ? Just(Right(blocks)) : Nothing;\n this.path = Maybe.fromNullable(path);\n }\n\n static fromHex(hex: string): LKRPBlockStream {\n return new LKRPBlockStream(hexToBytes(hex));\n }\n\n static fromPath(path: string): LKRPBlockStream {\n return new LKRPBlockStream(new Uint8Array(), [], path);\n }\n\n static async fromData(\n blocksData: Omit<LKRPBlockData, \"parent\">[],\n parentHash?: string,\n ): Promise<LKRPBlockStream> {\n const blocks: LKRPBlock[] = [];\n let hash =\n parentHash ?? bytesToHex(crypto.getRandomValues(new Uint8Array(32)));\n\n for (const blockData of blocksData) {\n const block = LKRPBlock.fromData({\n ...blockData,\n parent: hash,\n });\n hash = block.hash();\n blocks.push(block);\n }\n const bytes = blocks.reduce(\n (acc, block) => new Uint8Array([...acc, ...block.toU8A()]),\n new Uint8Array(),\n );\n return new LKRPBlockStream(bytes, blocks);\n }\n\n toU8A(): Uint8Array {\n return this.bytes;\n }\n\n toString(): string {\n return bytesToHex(this.bytes);\n }\n\n parse(): Either<LKRPParsingError, LKRPBlock[]> {\n return this.blocks.orDefaultLazy(() => {\n const parser = new TLVParser(this.bytes);\n const parsed: Either<LKRPParsingError, LKRPBlock>[] = [];\n while (!parser.state.isDone) {\n const start = parser.state.offset;\n const block = parser.parseBlockData().map((data) => {\n const end = parser.state.offset;\n return new LKRPBlock(this.bytes.slice(start, end), data);\n });\n parsed.push(block);\n if (block.isLeft()) break;\n }\n const blocks = Either.sequence(parsed);\n this.blocks = Just(blocks);\n return blocks;\n });\n }\n\n toHuman(): Either<LKRPParsingError, string> {\n return this.parse()\n .map((blocks) => blocks.map((block) => block.toHuman()))\n .chain(Either.sequence)\n .map((blocks) => blocks.join(\"\\n\\n\"));\n }\n\n async validate(streamParentHash?: string): Promise<boolean> {\n return this.validation.orDefaultLazy(async () => {\n const validation = this.parse()\n .map((blocks) =>\n blocks.map((block) =>\n block\n .parse()\n .map(({ parent }) => ({ parent, hash: () => block.hash() })),\n ),\n )\n .chain(Either.sequence)\n .toMaybe()\n .map(async (blocks) => {\n if (\n streamParentHash &&\n blocks[0] &&\n streamParentHash !== blocks[0].parent\n ) {\n return false;\n }\n\n for await (const [index, block] of blocks.entries()) {\n const nextBlock = blocks[index + 1];\n if (nextBlock && block.hash() !== nextBlock.parent) {\n return false;\n }\n }\n return true;\n })\n .orDefault(Promise.resolve(false));\n\n return validation;\n });\n }\n\n getPath(): Maybe<string> {\n this.path.ifNothing(() => {\n this.path = this.parse()\n .toMaybe()\n .chain((blocks) => Maybe.fromNullable(blocks[0]))\n .chain((block) => block.parse().toMaybe())\n .chain(({ commands }) => Maybe.fromNullable(commands[0]))\n .chain((command) => command.parse().toMaybe())\n .chain((data) => {\n switch (data.type) {\n case CommandTags.Derive:\n return Just(data.path);\n case CommandTags.Seed:\n return Just(\"m/0'\");\n default:\n return Nothing;\n }\n });\n });\n return this.path;\n }\n\n getMemberBlock(member: string): Maybe<LKRPBlockData> {\n return this.parse()\n .toMaybe()\n .chain((blocks) => {\n for (const block of blocks) {\n const parsedBlock = block.parse();\n if (parsedBlock.isRight()) {\n const blockData = parsedBlock.extract();\n for (const command of blockData.commands) {\n const pubkey = command.getPublicKey();\n if (pubkey.isJust() && pubkey.extract() === member) {\n return Maybe.of(blockData);\n }\n }\n }\n }\n return Nothing;\n });\n }\n\n hasMember(member: string): boolean {\n return this.getMemberBlock(member).isJust();\n }\n\n getPublishedKey(keypair: Keypair): Maybe<PublishedKey> {\n return this.getMemberBlock(keypair.pubKeyToHex())\n .chain((block): Maybe<EncryptedPublishedKey> => {\n for (const command of block.commands) {\n const key = command.getEncryptedPublichedKey();\n if (key.isJust()) {\n return key;\n }\n }\n return Nothing;\n })\n .map((published) => {\n const secret = keypair.ecdh(published.ephemeralPublicKey).slice(1);\n const xpriv = CryptoUtils.decrypt(\n secret,\n published.initializationVector,\n published.encryptedXpriv,\n );\n return { privateKey: xpriv.slice(0, 32), chainCode: xpriv.slice(32) };\n });\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["Either", "Just", "Maybe", "Nothing", "Right", "CryptoUtils", "bytesToHex", "hexToBytes", "LKRPBlock", "TLVParser", "CommandTags", "LKRPBlockStream", "bytes", "blocks", "path", "hex", "blocksData", "parentHash", "hash", "blockData", "block", "acc", "parser", "parsed", "start", "data", "end", "streamParentHash", "parent", "index", "nextBlock", "commands", "command", "member", "parsedBlock", "pubkey", "keypair", "key", "published", "secret", "xpriv"]
4
+ "sourcesContent": ["import { Either, Just, Maybe, Nothing, Right } from \"purify-ts\";\n\nimport { type LKRPParsingError } from \"@api/app-binder/Errors\";\nimport { type Keypair } from \"@api/app-binder/LKRPTypes\";\nimport { type LKRPBlockData } from \"@internal/models/LKRPBlockTypes\";\nimport { CommandTags } from \"@internal/models/Tags\";\nimport {\n type EncryptedPublishedKey,\n type PublishedKey,\n} from \"@internal/models/Types\";\nimport { CryptoUtils } from \"@internal/utils/crypto\";\n\nimport { bytesToHex, hexToBytes } from \"./hex\";\nimport { LKRPBlock } from \"./LKRPBlock\";\nimport { TLVParser } from \"./TLVParser\";\n\nexport class LKRPBlockStream {\n private validation: Maybe<Promise<boolean>> = Nothing;\n private blocks: Maybe<Either<LKRPParsingError, LKRPBlock[]>> = Nothing;\n private path: Maybe<string> = Nothing;\n\n constructor(\n private readonly bytes: Uint8Array,\n blocks?: LKRPBlock[],\n ) {\n this.blocks = blocks ? Just(Right(blocks)) : Nothing;\n }\n\n static fromHex(hex: string): LKRPBlockStream {\n return new LKRPBlockStream(hexToBytes(hex));\n }\n\n static fromData(\n blocksData: Omit<LKRPBlockData, \"parent\">[],\n parentHash?: string,\n ): LKRPBlockStream {\n const blocks: LKRPBlock[] = [];\n let hash =\n parentHash ?? bytesToHex(crypto.getRandomValues(new Uint8Array(32)));\n\n for (const blockData of blocksData) {\n const block = LKRPBlock.fromData({\n ...blockData,\n parent: hash,\n });\n hash = block.hash();\n blocks.push(block);\n }\n const bytes = blocks.reduce(\n (acc, block) => new Uint8Array([...acc, ...block.toU8A()]),\n new Uint8Array(),\n );\n return new LKRPBlockStream(bytes, blocks);\n }\n\n toU8A(): Uint8Array {\n return this.bytes;\n }\n\n toString(): string {\n return bytesToHex(this.bytes);\n }\n\n parse(): Either<LKRPParsingError, LKRPBlock[]> {\n return this.blocks.orDefaultLazy(() => {\n const parser = new TLVParser(this.bytes);\n const parsed: Either<LKRPParsingError, LKRPBlock>[] = [];\n while (!parser.state.isDone) {\n const start = parser.state.offset;\n const block = parser.parseBlockData().map((data) => {\n const end = parser.state.offset;\n return new LKRPBlock(this.bytes.slice(start, end), data);\n });\n parsed.push(block);\n if (block.isLeft()) break;\n }\n const blocks = Either.sequence(parsed);\n this.blocks = Just(blocks);\n return blocks;\n });\n }\n\n toHuman(): Either<LKRPParsingError, string> {\n return this.parse()\n .map((blocks) => blocks.map((block) => block.toHuman()))\n .chain(Either.sequence)\n .map((blocks) => blocks.join(\"\\n\\n\"));\n }\n\n async validate(streamParentHash?: string): Promise<boolean> {\n return this.validation.orDefaultLazy(async () => {\n const validation = this.parse()\n .map((blocks) =>\n blocks.map((block) =>\n block\n .parse()\n .map(({ parent }) => ({ parent, hash: () => block.hash() })),\n ),\n )\n .chain(Either.sequence)\n .toMaybe()\n .map(async (blocks) => {\n if (\n streamParentHash &&\n blocks[0] &&\n streamParentHash !== blocks[0].parent\n ) {\n return false;\n }\n\n for await (const [index, block] of blocks.entries()) {\n const nextBlock = blocks[index + 1];\n if (nextBlock && block.hash() !== nextBlock.parent) {\n return false;\n }\n }\n return true;\n })\n .orDefault(Promise.resolve(false));\n\n return validation;\n });\n }\n\n getPath(): Maybe<string> {\n this.path.ifNothing(() => {\n this.path = this.parse()\n .toMaybe()\n .chainNullable((blocks) => blocks[0])\n .chain((block) => block.parse().toMaybe())\n .chainNullable(({ commands }) => commands[0])\n .chain((command) => command.parse().toMaybe())\n .chain((data) => {\n switch (data.type) {\n case CommandTags.Derive:\n return Just(data.path);\n case CommandTags.Seed:\n return Just(\"m/0'\");\n default:\n return Nothing;\n }\n });\n });\n return this.path;\n }\n\n getMemberBlock(member: string): Maybe<LKRPBlockData> {\n return this.parse()\n .toMaybe()\n .chain((blocks) => {\n for (const block of blocks) {\n const parsedBlock = block.parse();\n if (parsedBlock.isRight()) {\n const blockData = parsedBlock.extract();\n for (const command of blockData.commands) {\n const pubkey = command.getPublicKey();\n if (pubkey.isJust() && pubkey.extract() === member) {\n return Maybe.of(blockData);\n }\n }\n }\n }\n return Nothing;\n });\n }\n\n hasMember(member: string): boolean {\n return this.getMemberBlock(member).isJust();\n }\n\n getPublishedKey(keypair: Keypair): Maybe<PublishedKey> {\n return this.getMemberBlock(keypair.pubKeyToHex())\n .chain((block): Maybe<EncryptedPublishedKey> => {\n for (const command of block.commands) {\n const key = command.getEncryptedPublishedKey();\n if (key.isJust()) {\n return key;\n }\n }\n return Nothing;\n })\n .map((published) => {\n const secret = keypair.ecdh(published.ephemeralPublicKey).slice(1);\n const xpriv = CryptoUtils.decrypt(\n secret,\n published.initializationVector,\n published.encryptedXpriv,\n );\n return { privateKey: xpriv.slice(0, 32), chainCode: xpriv.slice(32) };\n });\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["Either", "Just", "Maybe", "Nothing", "Right", "CommandTags", "CryptoUtils", "bytesToHex", "hexToBytes", "LKRPBlock", "TLVParser", "LKRPBlockStream", "bytes", "blocks", "hex", "blocksData", "parentHash", "hash", "blockData", "block", "acc", "parser", "parsed", "start", "data", "end", "streamParentHash", "parent", "index", "nextBlock", "commands", "command", "member", "parsedBlock", "pubkey", "keypair", "key", "published", "secret", "xpriv"]
7
7
  }
@@ -1,5 +1,5 @@
1
- import{Just as p,Left as l,Right as s}from"purify-ts";import{LKRPParsingError as u}from"../../api/app-binder/Errors";import{hexToBytes as c}from"./hex";import{LKRPBlock as m}from"./LKRPBlock";import{LKRPBlockStream as d}from"./LKRPBlockStream";import{LKRPCommand as r}from"./LKRPCommand";import{CommandTags as o}from"./TLVTags";describe("LKRPBlockStream",()=>{describe("toString",()=>{it("should return the hex representation of the block stream",()=>{const e="0102030405060708",a=d.fromHex(e);expect(a.toString()).toBe(e)})}),describe("toU8A",()=>{it("should return the bytes of the block stream",()=>{const e=new Uint8Array([1,2,3,4,5,6,7,8]),a=new d(e);expect(a.toU8A()).toBe(e)})}),describe("toHuman",()=>{it("should return a human-readable representation of the block stream",()=>{const a=d.fromHex(t).toHuman();expect(a).toStrictEqual(s(["Parent: 7ba5eefac6605547fc50188ba7880311d3d1240a7ae32e6eaac7499434091c45","Issuer: 0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021","Commands:"," Derive(0x15):"," path: m/0'/16'/0'"," groupKey: 02839a288f6a76090b64312281d2e7d6b02c4ddf64ed5e7693471b1b445f819508"," initializationVector: a66c5a4486e870287caa53bbd609af00"," encryptedXpriv: 0f43341d6f9099a5180fb304a2889b3b0468f05fb0b931d22211753b3411567abb21981b64261e95bcd44a3512af7c87bbb5a4b6b680c03b5f09e8d9c56a9cb1c0788993a3d9d5c140a2462cb1930d19"," ephemeralPublicKey: 02fbe26c32ab991c1b107156e22fc158c335e0aeedc171381c9d77743c66f41171"," AddMember(0x11):"," name: debug-d4c61d"," publicKey: 03d4c61dda2aaf762954fce97396d9be0399e1dc75c3b790c7a34dde8596a11812"," permissions: 4294967295"," PublishKey(0x12):"," initializationVector: 4d305eae5b70b69cf657f3b9f7db5863"," encryptedXpriv: 898de535f87f7ac775b09c80827d14efddeeaa9a2b106bfd7fcc91942dc36d6a1751793ba7ec0792ba936f5f1d858bc1fc54ca1a70e8d28a5b0bf33b5e926f3add372c802b3b9da64bc06e26b9349db5"," recipient: 03d4c61dda2aaf762954fce97396d9be0399e1dc75c3b790c7a34dde8596a11812"," ephemeralPublicKey: 023db66b974b871c6caafdf486c6895518303b140d389e787d2c3b5527c2df50f4","Signature: 3044022056ab426bd75696cbe9538cb42271e8796ba1576dfe3e2634f0a6f1a636821e5002205e41ae68ebd8fbff404340a4f0124af25e948aa52500de192d15ff4f8ee92c02","","Parent: 154d99eb867cfeef249d573fc2e1f3d307c1e49ec1f66e9af1c9dbd219143211","Issuer: 0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021","Commands:"," AddMember(0x11):"," name: debug-80a289"," publicKey: 0280a28918369e12c86feb321cd100fe6d958e55a0bb570576ef718e7a379204db"," permissions: 4294967295"," PublishKey(0x12):"," initializationVector: 27bdb34fb6028128bfc919f4db7d1378"," encryptedXpriv: e792b83f26fac0de46ee8f1a07e53b0e508d9373aa2e8047f0a764204ab0f06a2fffa9c29599f5d3fe42fefabd9827867157bd14ec7e2bd8ef83c6f9371d7b48d28d9a4499f8ed626ce75fcec0a0b33f"," recipient: 0280a28918369e12c86feb321cd100fe6d958e55a0bb570576ef718e7a379204db"," ephemeralPublicKey: 027d40157737671bb04eaca2756b8ec58020ff5c893b10cbfb25b48014c5252dc4","Signature: 30440220718d20c9996893639da807b8a9675d944abdc8fded97f73159beba5004fa17f102203338b74a9e6a2e696ea3658d3af4fce95ffa0f74c11b2c3d37b0ca1b577657e8"].join(`
2
- `)))})}),describe("parse",()=>{it("should parse the block stream correctly",()=>{const e=d.fromHex(t),a=e.parse();e.toHuman(),expect(a).toStrictEqual(s([m.fromData(f),m.fromData(i)]))}),it("should fail if the block stream data is invalid",()=>{const a=d.fromHex("00").parse();expect(a).toStrictEqual(l(new u("Invalid end of TLV, expected length")))})}),describe("fromData",()=>{it("should create a BlockStream from data",async()=>{const e=[{...f,parent:void 0},{...i,parent:void 0}],a=await d.fromData(e,f.parent);expect(a.toString()).toBe(t)}),it("should assign a random parent hash if not provided",async()=>{const e=[{...f,parent:void 0},{...i,parent:void 0}],b=await(await d.fromData(e)).parse().map(n=>n[0]?.hash()).caseOf({Left:()=>{},Right:n=>n});expect(typeof b).toBe("string"),expect(b?.length).toBe(64),expect(b).not.toBe(f.parent)})}),describe("validate",()=>{it("should validate the block stream",async()=>{const e=d.fromHex(t),a=await e.validate(f.parent),b=await e.validate(f.parent);expect(a).toBe(!0),expect(b).toBe(!0)}),it("should fail validation if the parent hash does not match",async()=>{const e=d.fromHex(t.replace(i.parent,f.parent)),a=await e.validate("0123455678"),b=await e.validate();expect(a).toBe(!1),expect(b).toBe(!1)})}),describe("getPath",()=>{it("should return the path of the block stream",()=>{const a=d.fromHex(t).getPath();expect(a).toEqual(p("m/0'/16'/0'"))})})});const t=`
1
+ import{Just as p,Left as l,Right as s}from"purify-ts";import{LKRPParsingError as u}from"../../api/app-binder/Errors";import{CommandTags as r}from"../models/Tags";import{hexToBytes as c}from"./hex";import{LKRPBlock as m}from"./LKRPBlock";import{LKRPBlockStream as d}from"./LKRPBlockStream";import{LKRPCommand as o}from"./LKRPCommand";describe("LKRPBlockStream",()=>{describe("toString",()=>{it("should return the hex representation of the block stream",()=>{const e="0102030405060708",a=d.fromHex(e);expect(a.toString()).toBe(e)})}),describe("toU8A",()=>{it("should return the bytes of the block stream",()=>{const e=new Uint8Array([1,2,3,4,5,6,7,8]),a=new d(e);expect(a.toU8A()).toBe(e)})}),describe("toHuman",()=>{it("should return a human-readable representation of the block stream",()=>{const a=d.fromHex(t).toHuman();expect(a).toStrictEqual(s(["Parent: 7ba5eefac6605547fc50188ba7880311d3d1240a7ae32e6eaac7499434091c45","Issuer: 0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021","Commands:"," Derive(0x15):"," path: m/0'/16'/0'"," groupKey: 02839a288f6a76090b64312281d2e7d6b02c4ddf64ed5e7693471b1b445f819508"," initializationVector: a66c5a4486e870287caa53bbd609af00"," encryptedXpriv: 0f43341d6f9099a5180fb304a2889b3b0468f05fb0b931d22211753b3411567abb21981b64261e95bcd44a3512af7c87bbb5a4b6b680c03b5f09e8d9c56a9cb1c0788993a3d9d5c140a2462cb1930d19"," ephemeralPublicKey: 02fbe26c32ab991c1b107156e22fc158c335e0aeedc171381c9d77743c66f41171"," AddMember(0x11):"," name: debug-d4c61d"," publicKey: 03d4c61dda2aaf762954fce97396d9be0399e1dc75c3b790c7a34dde8596a11812"," permissions: 4294967295"," PublishKey(0x12):"," initializationVector: 4d305eae5b70b69cf657f3b9f7db5863"," encryptedXpriv: 898de535f87f7ac775b09c80827d14efddeeaa9a2b106bfd7fcc91942dc36d6a1751793ba7ec0792ba936f5f1d858bc1fc54ca1a70e8d28a5b0bf33b5e926f3add372c802b3b9da64bc06e26b9349db5"," recipient: 03d4c61dda2aaf762954fce97396d9be0399e1dc75c3b790c7a34dde8596a11812"," ephemeralPublicKey: 023db66b974b871c6caafdf486c6895518303b140d389e787d2c3b5527c2df50f4","Signature: 3044022056ab426bd75696cbe9538cb42271e8796ba1576dfe3e2634f0a6f1a636821e5002205e41ae68ebd8fbff404340a4f0124af25e948aa52500de192d15ff4f8ee92c02","","Parent: 154d99eb867cfeef249d573fc2e1f3d307c1e49ec1f66e9af1c9dbd219143211","Issuer: 0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021","Commands:"," AddMember(0x11):"," name: debug-80a289"," publicKey: 0280a28918369e12c86feb321cd100fe6d958e55a0bb570576ef718e7a379204db"," permissions: 4294967295"," PublishKey(0x12):"," initializationVector: 27bdb34fb6028128bfc919f4db7d1378"," encryptedXpriv: e792b83f26fac0de46ee8f1a07e53b0e508d9373aa2e8047f0a764204ab0f06a2fffa9c29599f5d3fe42fefabd9827867157bd14ec7e2bd8ef83c6f9371d7b48d28d9a4499f8ed626ce75fcec0a0b33f"," recipient: 0280a28918369e12c86feb321cd100fe6d958e55a0bb570576ef718e7a379204db"," ephemeralPublicKey: 027d40157737671bb04eaca2756b8ec58020ff5c893b10cbfb25b48014c5252dc4","Signature: 30440220718d20c9996893639da807b8a9675d944abdc8fded97f73159beba5004fa17f102203338b74a9e6a2e696ea3658d3af4fce95ffa0f74c11b2c3d37b0ca1b577657e8"].join(`
2
+ `)))})}),describe("parse",()=>{it("should parse the block stream correctly",()=>{const e=d.fromHex(t),a=e.parse();e.toHuman(),expect(a).toStrictEqual(s([m.fromData(f),m.fromData(i)]))}),it("should fail if the block stream data is invalid",()=>{const a=d.fromHex("00").parse();expect(a).toStrictEqual(l(new u("Invalid end of TLV, expected length")))})}),describe("fromData",()=>{it("should create a BlockStream from data",()=>{const e=[{...f,parent:void 0},{...i,parent:void 0}],a=d.fromData(e,f.parent);expect(a.toString()).toBe(t)}),it("should assign a random parent hash if not provided",()=>{const e=[{...f,parent:void 0},{...i,parent:void 0}],b=d.fromData(e).parse().map(n=>n[0]?.hash()).caseOf({Left:()=>{},Right:n=>n});expect(typeof b).toBe("string"),expect(b?.length).toBe(64),expect(b).not.toBe(f.parent)})}),describe("validate",()=>{it("should validate the block stream",async()=>{const e=d.fromHex(t),a=await e.validate(f.parent),b=await e.validate(f.parent);expect(a).toBe(!0),expect(b).toBe(!0)}),it("should fail validation if the parent hash does not match",async()=>{const e=d.fromHex(t.replace(i.parent,f.parent)),a=await e.validate("0123455678"),b=await e.validate();expect(a).toBe(!1),expect(b).toBe(!1)})}),describe("getPath",()=>{it("should return the path of the block stream",()=>{const a=d.fromHex(t).getPath();expect(a).toEqual(p("m/0'/16'/0'"))})})});const t=`
3
3
  01 01 01
4
4
  02 20 7b a5 ee fa c6 60 55 47 fc 50 18 8b a7 88 03 11 d3 d1 24 0a 7a e3 2e 6e aa c7 49 94 34 09 1c 45
5
5
  06 21 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21
@@ -35,5 +35,5 @@ import{Just as p,Left as l,Right as s}from"purify-ts";import{LKRPParsingError as
35
35
  06 21 02 80 a2 89 18 36 9e 12 c8 6f eb 32 1c d1 00 fe 6d 95 8e 55 a0 bb 57 05 76 ef 71 8e 7a 37 92 04 db
36
36
  06 21 02 7d 40 15 77 37 67 1b b0 4e ac a2 75 6b 8e c5 80 20 ff 5c 89 3b 10 cb fb 25 b4 80 14 c5 25 2d c4
37
37
  03 46 30 44 02 20 71 8d 20 c9 99 68 93 63 9d a8 07 b8 a9 67 5d 94 4a bd c8 fd ed 97 f7 31 59 be ba 50 04 fa 17 f1 02 20 33 38 b7 4a 9e 6a 2e 69 6e a3 65 8d 3a f4 fc e9 5f fa 0f 74 c1 1b 2c 3d 37 b0 ca 1b 57 76 57 e8
38
- `.replace(/\s/g,""),f={parent:"7ba5eefac6605547fc50188ba7880311d3d1240a7ae32e6eaac7499434091c45",issuer:c("0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021"),commands:[r.fromData({type:o.Derive,path:"m/0'/16'/0'",groupKey:c("02839a288f6a76090b64312281d2e7d6b02c4ddf64ed5e7693471b1b445f819508"),initializationVector:c("a66c5a4486e870287caa53bbd609af00"),encryptedXpriv:c("0f43341d6f9099a5180fb304a2889b3b0468f05fb0b931d22211753b3411567abb21981b64261e95bcd44a3512af7c87bbb5a4b6b680c03b5f09e8d9c56a9cb1c0788993a3d9d5c140a2462cb1930d19"),ephemeralPublicKey:c("02fbe26c32ab991c1b107156e22fc158c335e0aeedc171381c9d77743c66f41171")}),r.fromData({type:o.AddMember,name:"debug-d4c61d",publicKey:c("03d4c61dda2aaf762954fce97396d9be0399e1dc75c3b790c7a34dde8596a11812"),permissions:4294967295}),r.fromData({type:o.PublishKey,initializationVector:c("4d305eae5b70b69cf657f3b9f7db5863"),encryptedXpriv:c("898de535f87f7ac775b09c80827d14efddeeaa9a2b106bfd7fcc91942dc36d6a1751793ba7ec0792ba936f5f1d858bc1fc54ca1a70e8d28a5b0bf33b5e926f3add372c802b3b9da64bc06e26b9349db5"),recipient:c("03d4c61dda2aaf762954fce97396d9be0399e1dc75c3b790c7a34dde8596a11812"),ephemeralPublicKey:c("023db66b974b871c6caafdf486c6895518303b140d389e787d2c3b5527c2df50f4")})],signature:c("3044022056ab426bd75696cbe9538cb42271e8796ba1576dfe3e2634f0a6f1a636821e5002205e41ae68ebd8fbff404340a4f0124af25e948aa52500de192d15ff4f8ee92c02")},i={parent:"154d99eb867cfeef249d573fc2e1f3d307c1e49ec1f66e9af1c9dbd219143211",issuer:c("0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021"),commands:[r.fromData({type:o.AddMember,name:"debug-80a289",publicKey:c("0280a28918369e12c86feb321cd100fe6d958e55a0bb570576ef718e7a379204db"),permissions:4294967295}),r.fromData({type:o.PublishKey,initializationVector:c("27bdb34fb6028128bfc919f4db7d1378"),encryptedXpriv:c("e792b83f26fac0de46ee8f1a07e53b0e508d9373aa2e8047f0a764204ab0f06a2fffa9c29599f5d3fe42fefabd9827867157bd14ec7e2bd8ef83c6f9371d7b48d28d9a4499f8ed626ce75fcec0a0b33f"),recipient:c("0280a28918369e12c86feb321cd100fe6d958e55a0bb570576ef718e7a379204db"),ephemeralPublicKey:c("027d40157737671bb04eaca2756b8ec58020ff5c893b10cbfb25b48014c5252dc4")})],signature:c("30440220718d20c9996893639da807b8a9675d944abdc8fded97f73159beba5004fa17f102203338b74a9e6a2e696ea3658d3af4fce95ffa0f74c11b2c3d37b0ca1b577657e8")};
38
+ `.replace(/\s/g,""),f={parent:"7ba5eefac6605547fc50188ba7880311d3d1240a7ae32e6eaac7499434091c45",issuer:c("0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021"),commands:[o.fromData({type:r.Derive,path:"m/0'/16'/0'",groupKey:c("02839a288f6a76090b64312281d2e7d6b02c4ddf64ed5e7693471b1b445f819508"),initializationVector:c("a66c5a4486e870287caa53bbd609af00"),encryptedXpriv:c("0f43341d6f9099a5180fb304a2889b3b0468f05fb0b931d22211753b3411567abb21981b64261e95bcd44a3512af7c87bbb5a4b6b680c03b5f09e8d9c56a9cb1c0788993a3d9d5c140a2462cb1930d19"),ephemeralPublicKey:c("02fbe26c32ab991c1b107156e22fc158c335e0aeedc171381c9d77743c66f41171")}),o.fromData({type:r.AddMember,name:"debug-d4c61d",publicKey:c("03d4c61dda2aaf762954fce97396d9be0399e1dc75c3b790c7a34dde8596a11812"),permissions:4294967295}),o.fromData({type:r.PublishKey,initializationVector:c("4d305eae5b70b69cf657f3b9f7db5863"),encryptedXpriv:c("898de535f87f7ac775b09c80827d14efddeeaa9a2b106bfd7fcc91942dc36d6a1751793ba7ec0792ba936f5f1d858bc1fc54ca1a70e8d28a5b0bf33b5e926f3add372c802b3b9da64bc06e26b9349db5"),recipient:c("03d4c61dda2aaf762954fce97396d9be0399e1dc75c3b790c7a34dde8596a11812"),ephemeralPublicKey:c("023db66b974b871c6caafdf486c6895518303b140d389e787d2c3b5527c2df50f4")})],signature:c("3044022056ab426bd75696cbe9538cb42271e8796ba1576dfe3e2634f0a6f1a636821e5002205e41ae68ebd8fbff404340a4f0124af25e948aa52500de192d15ff4f8ee92c02")},i={parent:"154d99eb867cfeef249d573fc2e1f3d307c1e49ec1f66e9af1c9dbd219143211",issuer:c("0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021"),commands:[o.fromData({type:r.AddMember,name:"debug-80a289",publicKey:c("0280a28918369e12c86feb321cd100fe6d958e55a0bb570576ef718e7a379204db"),permissions:4294967295}),o.fromData({type:r.PublishKey,initializationVector:c("27bdb34fb6028128bfc919f4db7d1378"),encryptedXpriv:c("e792b83f26fac0de46ee8f1a07e53b0e508d9373aa2e8047f0a764204ab0f06a2fffa9c29599f5d3fe42fefabd9827867157bd14ec7e2bd8ef83c6f9371d7b48d28d9a4499f8ed626ce75fcec0a0b33f"),recipient:c("0280a28918369e12c86feb321cd100fe6d958e55a0bb570576ef718e7a379204db"),ephemeralPublicKey:c("027d40157737671bb04eaca2756b8ec58020ff5c893b10cbfb25b48014c5252dc4")})],signature:c("30440220718d20c9996893639da807b8a9675d944abdc8fded97f73159beba5004fa17f102203338b74a9e6a2e696ea3658d3af4fce95ffa0f74c11b2c3d37b0ca1b577657e8")};
39
39
  //# sourceMappingURL=LKRPBlockStream.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/internal/utils/LKRPBlockStream.test.ts"],
4
- "sourcesContent": ["import { Just, Left, Right } from \"purify-ts\";\n\nimport { LKRPParsingError } from \"@api/app-binder/Errors\";\n\nimport { hexToBytes } from \"./hex\";\nimport { LKRPBlock } from \"./LKRPBlock\";\nimport { LKRPBlockStream } from \"./LKRPBlockStream\";\nimport { LKRPCommand } from \"./LKRPCommand\";\nimport { CommandTags } from \"./TLVTags\";\n\ndescribe(\"LKRPBlockStream\", () => {\n describe(\"toString\", () => {\n it(\"should return the hex representation of the block stream\", () => {\n // WHEN\n const hex = \"0102030405060708\";\n const stream = LKRPBlockStream.fromHex(hex);\n // THEN\n expect(stream.toString()).toBe(hex);\n });\n });\n\n describe(\"toU8A\", () => {\n it(\"should return the bytes of the block stream\", () => {\n // WHEN\n const bytes = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]);\n const stream = new LKRPBlockStream(bytes);\n // THEN\n expect(stream.toU8A()).toBe(bytes);\n });\n });\n\n describe(\"toHuman\", () => {\n it(\"should return a human-readable representation of the block stream\", () => {\n // GIVEN\n const stream = LKRPBlockStream.fromHex(mockedHex);\n\n // WHEN\n const humanReadable = stream.toHuman();\n\n // THEN\n expect(humanReadable).toStrictEqual(\n Right(\n [\n \"Parent: 7ba5eefac6605547fc50188ba7880311d3d1240a7ae32e6eaac7499434091c45\",\n \"Issuer: 0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021\",\n \"Commands:\",\n \" Derive(0x15):\",\n \" path: m/0'/16'/0'\",\n \" groupKey: 02839a288f6a76090b64312281d2e7d6b02c4ddf64ed5e7693471b1b445f819508\",\n \" initializationVector: a66c5a4486e870287caa53bbd609af00\",\n \" encryptedXpriv: 0f43341d6f9099a5180fb304a2889b3b0468f05fb0b931d22211753b3411567abb21981b64261e95bcd44a3512af7c87bbb5a4b6b680c03b5f09e8d9c56a9cb1c0788993a3d9d5c140a2462cb1930d19\",\n \" ephemeralPublicKey: 02fbe26c32ab991c1b107156e22fc158c335e0aeedc171381c9d77743c66f41171\",\n \" AddMember(0x11):\",\n \" name: debug-d4c61d\",\n \" publicKey: 03d4c61dda2aaf762954fce97396d9be0399e1dc75c3b790c7a34dde8596a11812\",\n \" permissions: 4294967295\",\n \" PublishKey(0x12):\",\n \" initializationVector: 4d305eae5b70b69cf657f3b9f7db5863\",\n \" encryptedXpriv: 898de535f87f7ac775b09c80827d14efddeeaa9a2b106bfd7fcc91942dc36d6a1751793ba7ec0792ba936f5f1d858bc1fc54ca1a70e8d28a5b0bf33b5e926f3add372c802b3b9da64bc06e26b9349db5\",\n \" recipient: 03d4c61dda2aaf762954fce97396d9be0399e1dc75c3b790c7a34dde8596a11812\",\n \" ephemeralPublicKey: 023db66b974b871c6caafdf486c6895518303b140d389e787d2c3b5527c2df50f4\",\n \"Signature: 3044022056ab426bd75696cbe9538cb42271e8796ba1576dfe3e2634f0a6f1a636821e5002205e41ae68ebd8fbff404340a4f0124af25e948aa52500de192d15ff4f8ee92c02\",\n \"\",\n \"Parent: 154d99eb867cfeef249d573fc2e1f3d307c1e49ec1f66e9af1c9dbd219143211\",\n \"Issuer: 0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021\",\n \"Commands:\",\n \" AddMember(0x11):\",\n \" name: debug-80a289\",\n \" publicKey: 0280a28918369e12c86feb321cd100fe6d958e55a0bb570576ef718e7a379204db\",\n \" permissions: 4294967295\",\n \" PublishKey(0x12):\",\n \" initializationVector: 27bdb34fb6028128bfc919f4db7d1378\",\n \" encryptedXpriv: e792b83f26fac0de46ee8f1a07e53b0e508d9373aa2e8047f0a764204ab0f06a2fffa9c29599f5d3fe42fefabd9827867157bd14ec7e2bd8ef83c6f9371d7b48d28d9a4499f8ed626ce75fcec0a0b33f\",\n \" recipient: 0280a28918369e12c86feb321cd100fe6d958e55a0bb570576ef718e7a379204db\",\n \" ephemeralPublicKey: 027d40157737671bb04eaca2756b8ec58020ff5c893b10cbfb25b48014c5252dc4\",\n \"Signature: 30440220718d20c9996893639da807b8a9675d944abdc8fded97f73159beba5004fa17f102203338b74a9e6a2e696ea3658d3af4fce95ffa0f74c11b2c3d37b0ca1b577657e8\",\n ].join(\"\\n\"),\n ),\n );\n });\n });\n\n describe(\"parse\", () => {\n it(\"should parse the block stream correctly\", () => {\n // GIVEN\n const stream = LKRPBlockStream.fromHex(mockedHex);\n\n // WHEN\n const parsedData = stream.parse();\n stream.toHuman(); // Run toHuman to force the parsing of the commands\n\n // THEN\n expect(parsedData).toStrictEqual(\n Right([\n LKRPBlock.fromData(mockedBlockData1),\n LKRPBlock.fromData(mockedBlockData2),\n ]),\n );\n });\n\n it(\"should fail if the block stream data is invalid\", () => {\n // GIVEN\n const invalidStream = LKRPBlockStream.fromHex(\"00\");\n // WHEN\n const parsedData = invalidStream.parse();\n\n // THEN\n expect(parsedData).toStrictEqual(\n Left(new LKRPParsingError(\"Invalid end of TLV, expected length\")),\n );\n });\n });\n\n describe(\"fromData\", () => {\n it(\"should create a BlockStream from data\", async () => {\n // GIVEN\n const mockedBlockData = [\n { ...mockedBlockData1, parent: undefined },\n { ...mockedBlockData2, parent: undefined },\n ];\n\n // WHEN\n const stream = await LKRPBlockStream.fromData(\n mockedBlockData,\n mockedBlockData1.parent,\n );\n\n // THEN\n expect(stream.toString()).toBe(mockedHex);\n });\n\n it(\"should assign a random parent hash if not provided\", async () => {\n // GIVEN\n const mockedBlockData = [\n { ...mockedBlockData1, parent: undefined },\n { ...mockedBlockData2, parent: undefined },\n ];\n // WHEN\n const stream = await LKRPBlockStream.fromData(mockedBlockData);\n const hash = await stream\n .parse()\n .map((blocks) => blocks[0]?.hash())\n .caseOf({ Left: () => undefined, Right: (h) => h });\n\n // THEN\n expect(typeof hash).toBe(\"string\");\n expect(hash?.length).toBe(64); // 32 bytes in hex\n expect(hash).not.toBe(mockedBlockData1.parent);\n });\n });\n\n describe(\"validate\", () => {\n it(\"should validate the block stream\", async () => {\n // GIVEN\n const stream = LKRPBlockStream.fromHex(mockedHex);\n\n // WHEN\n const withParentHash = await stream.validate(mockedBlockData1.parent);\n const withoutParentHash = await stream.validate(mockedBlockData1.parent);\n\n // THEN\n expect(withParentHash).toBe(true);\n expect(withoutParentHash).toBe(true);\n });\n\n it(\"should fail validation if the parent hash does not match\", async () => {\n // GIVEN\n const invalidStream = LKRPBlockStream.fromHex(\n mockedHex.replace(mockedBlockData2.parent, mockedBlockData1.parent),\n );\n\n // WHEN\n const wrongBlock1 = await invalidStream.validate(\"0123455678\");\n const wrongBlock2 = await invalidStream.validate();\n\n // THEN\n expect(wrongBlock1).toBe(false);\n expect(wrongBlock2).toBe(false);\n });\n });\n\n describe(\"getPath\", () => {\n it(\"should return the path of the block stream\", () => {\n // GIVEN\n const stream = LKRPBlockStream.fromHex(mockedHex);\n\n // WHEN\n const path = stream.getPath();\n\n // THEN\n expect(path).toEqual(Just(\"m/0'/16'/0'\"));\n });\n });\n});\n\nconst mockedHex = `\n 01 01 01\n 02 20 7b a5 ee fa c6 60 55 47 fc 50 18 8b a7 88 03 11 d3 d1 24 0a 7a e3 2e 6e aa c7 49 94 34 09 1c 45\n 06 21 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21\n 01 01 03\n 15 b8\n 05 0c 80 00 00 00 80 00 00 10 80 00 00 00\n 06 21 02 83 9a 28 8f 6a 76 09 0b 64 31 22 81 d2 e7 d6 b0 2c 4d df 64 ed 5e 76 93 47 1b 1b 44 5f 81 95 08\n 05 10 a6 6c 5a 44 86 e8 70 28 7c aa 53 bb d6 09 af 00\n 05 50 0f 43 34 1d 6f 90 99 a5 18 0f b3 04 a2 88 9b 3b 04 68 f0 5f b0 b9 31 d2 22 11 75 3b 34 11 56 7a bb 21 98 1b 64 26 1e 95 bc d4 4a 35 12 af 7c 87 bb b5 a4 b6 b6 80 c0 3b 5f 09 e8 d9 c5 6a 9c b1 c0 78 89 93 a3 d9 d5 c1 40 a2 46 2c b1 93 0d 19\n 06 21 02 fb e2 6c 32 ab 99 1c 1b 10 71 56 e2 2f c1 58 c3 35 e0 ae ed c1 71 38 1c 9d 77 74 3c 66 f4 11 71\n 11 37\n 04 0c 64 65 62 75 67 2d 64 34 63 36 31 64\n 06 21 03 d4 c6 1d da 2a af 76 29 54 fc e9 73 96 d9 be 03 99 e1 dc 75 c3 b7 90 c7 a3 4d de 85 96 a1 18 12\n 01 04 ff ff ff ff\n 12 aa\n 05 10 4d 30 5e ae 5b 70 b6 9c f6 57 f3 b9 f7 db 58 63\n 05 50 89 8d e5 35 f8 7f 7a c7 75 b0 9c 80 82 7d 14 ef dd ee aa 9a 2b 10 6b fd 7f cc 91 94 2d c3 6d 6a 17 51 79 3b a7 ec 07 92 ba 93 6f 5f 1d 85 8b c1 fc 54 ca 1a 70 e8 d2 8a 5b 0b f3 3b 5e 92 6f 3a dd 37 2c 80 2b 3b 9d a6 4b c0 6e 26 b9 34 9d b5\n 06 21 03 d4 c6 1d da 2a af 76 29 54 fc e9 73 96 d9 be 03 99 e1 dc 75 c3 b7 90 c7 a3 4d de 85 96 a1 18 12\n 06 21 02 3d b6 6b 97 4b 87 1c 6c aa fd f4 86 c6 89 55 18 30 3b 14 0d 38 9e 78 7d 2c 3b 55 27 c2 df 50 f4\n 03 46 30 44 02 20 56 ab 42 6b d7 56 96 cb e9 53 8c b4 22 71 e8 79 6b a1 57 6d fe 3e 26 34 f0 a6 f1 a6 36 82 1e 50 02 20 5e 41 ae 68 eb d8 fb ff 40 43 40 a4 f0 12 4a f2 5e 94 8a a5 25 00 de 19 2d 15 ff 4f 8e e9 2c 02\n\n 01 01 01\n 02 20 15 4d 99 eb 86 7c fe ef 24 9d 57 3f c2 e1 f3 d3 07 c1 e4 9e c1 f6 6e 9a f1 c9 db d2 19 14 32 11 \n 06 21 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21\n 01 01 02\n 11 37\n 04 0c 64 65 62 75 67 2d 38 30 61 32 38 39\n 06 21 02 80 a2 89 18 36 9e 12 c8 6f eb 32 1c d1 00 fe 6d 95 8e 55 a0 bb 57 05 76 ef 71 8e 7a 37 92 04 db\n 01 04 ff ff ff ff\n 12 aa\n 05 10 27 bd b3 4f b6 02 81 28 bf c9 19 f4 db 7d 13 78\n 05 50 e7 92 b8 3f 26 fa c0 de 46 ee 8f 1a 07 e5 3b 0e 50 8d 93 73 aa 2e 80 47 f0 a7 64 20 4a b0 f0 6a 2f ff a9 c2 95 99 f5 d3 fe 42 fe fa bd 98 27 86 71 57 bd 14 ec 7e 2b d8 ef 83 c6 f9 37 1d 7b 48 d2 8d 9a 44 99 f8 ed 62 6c e7 5f ce c0 a0 b3 3f\n 06 21 02 80 a2 89 18 36 9e 12 c8 6f eb 32 1c d1 00 fe 6d 95 8e 55 a0 bb 57 05 76 ef 71 8e 7a 37 92 04 db\n 06 21 02 7d 40 15 77 37 67 1b b0 4e ac a2 75 6b 8e c5 80 20 ff 5c 89 3b 10 cb fb 25 b4 80 14 c5 25 2d c4\n 03 46 30 44 02 20 71 8d 20 c9 99 68 93 63 9d a8 07 b8 a9 67 5d 94 4a bd c8 fd ed 97 f7 31 59 be ba 50 04 fa 17 f1 02 20 33 38 b7 4a 9e 6a 2e 69 6e a3 65 8d 3a f4 fc e9 5f fa 0f 74 c1 1b 2c 3d 37 b0 ca 1b 57 76 57 e8 \n`.replace(/\\s/g, \"\");\n\nconst mockedBlockData1 = {\n parent: \"7ba5eefac6605547fc50188ba7880311d3d1240a7ae32e6eaac7499434091c45\",\n issuer: hexToBytes(\n \"0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021\",\n ),\n commands: [\n LKRPCommand.fromData({\n type: CommandTags.Derive,\n path: \"m/0'/16'/0'\",\n groupKey: hexToBytes(\n \"02839a288f6a76090b64312281d2e7d6b02c4ddf64ed5e7693471b1b445f819508\",\n ),\n initializationVector: hexToBytes(\"a66c5a4486e870287caa53bbd609af00\"),\n encryptedXpriv: hexToBytes(\n \"0f43341d6f9099a5180fb304a2889b3b0468f05fb0b931d22211753b3411567abb21981b64261e95bcd44a3512af7c87bbb5a4b6b680c03b5f09e8d9c56a9cb1c0788993a3d9d5c140a2462cb1930d19\",\n ),\n ephemeralPublicKey: hexToBytes(\n \"02fbe26c32ab991c1b107156e22fc158c335e0aeedc171381c9d77743c66f41171\",\n ),\n }),\n LKRPCommand.fromData({\n type: CommandTags.AddMember,\n name: \"debug-d4c61d\",\n publicKey: hexToBytes(\n \"03d4c61dda2aaf762954fce97396d9be0399e1dc75c3b790c7a34dde8596a11812\",\n ),\n permissions: 0xffffffff,\n }),\n LKRPCommand.fromData({\n type: CommandTags.PublishKey,\n initializationVector: hexToBytes(\"4d305eae5b70b69cf657f3b9f7db5863\"),\n encryptedXpriv: hexToBytes(\n \"898de535f87f7ac775b09c80827d14efddeeaa9a2b106bfd7fcc91942dc36d6a1751793ba7ec0792ba936f5f1d858bc1fc54ca1a70e8d28a5b0bf33b5e926f3add372c802b3b9da64bc06e26b9349db5\",\n ),\n recipient: hexToBytes(\n \"03d4c61dda2aaf762954fce97396d9be0399e1dc75c3b790c7a34dde8596a11812\",\n ),\n ephemeralPublicKey: hexToBytes(\n \"023db66b974b871c6caafdf486c6895518303b140d389e787d2c3b5527c2df50f4\",\n ),\n }),\n ],\n signature: hexToBytes(\n \"3044022056ab426bd75696cbe9538cb42271e8796ba1576dfe3e2634f0a6f1a636821e5002205e41ae68ebd8fbff404340a4f0124af25e948aa52500de192d15ff4f8ee92c02\",\n ),\n};\nconst mockedBlockData2 = {\n parent: \"154d99eb867cfeef249d573fc2e1f3d307c1e49ec1f66e9af1c9dbd219143211\",\n issuer: hexToBytes(\n \"0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021\",\n ),\n commands: [\n LKRPCommand.fromData({\n type: CommandTags.AddMember,\n name: \"debug-80a289\",\n publicKey: hexToBytes(\n \"0280a28918369e12c86feb321cd100fe6d958e55a0bb570576ef718e7a379204db\",\n ),\n permissions: 0xffffffff,\n }),\n LKRPCommand.fromData({\n type: CommandTags.PublishKey,\n initializationVector: hexToBytes(\"27bdb34fb6028128bfc919f4db7d1378\"),\n encryptedXpriv: hexToBytes(\n \"e792b83f26fac0de46ee8f1a07e53b0e508d9373aa2e8047f0a764204ab0f06a2fffa9c29599f5d3fe42fefabd9827867157bd14ec7e2bd8ef83c6f9371d7b48d28d9a4499f8ed626ce75fcec0a0b33f\",\n ),\n recipient: hexToBytes(\n \"0280a28918369e12c86feb321cd100fe6d958e55a0bb570576ef718e7a379204db\",\n ),\n ephemeralPublicKey: hexToBytes(\n \"027d40157737671bb04eaca2756b8ec58020ff5c893b10cbfb25b48014c5252dc4\",\n ),\n }),\n ],\n signature: hexToBytes(\n \"30440220718d20c9996893639da807b8a9675d944abdc8fded97f73159beba5004fa17f102203338b74a9e6a2e696ea3658d3af4fce95ffa0f74c11b2c3d37b0ca1b577657e8\",\n ),\n};\n"],
5
- "mappings": "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",
6
- "names": ["Just", "Left", "Right", "LKRPParsingError", "hexToBytes", "LKRPBlock", "LKRPBlockStream", "LKRPCommand", "CommandTags", "hex", "stream", "bytes", "humanReadable", "mockedHex", "parsedData", "mockedBlockData1", "mockedBlockData2", "mockedBlockData", "hash", "blocks", "h", "withParentHash", "withoutParentHash", "invalidStream", "wrongBlock1", "wrongBlock2", "path"]
4
+ "sourcesContent": ["import { Just, Left, Right } from \"purify-ts\";\n\nimport { LKRPParsingError } from \"@api/app-binder/Errors\";\nimport { CommandTags } from \"@internal/models/Tags\";\n\nimport { hexToBytes } from \"./hex\";\nimport { LKRPBlock } from \"./LKRPBlock\";\nimport { LKRPBlockStream } from \"./LKRPBlockStream\";\nimport { LKRPCommand } from \"./LKRPCommand\";\n\ndescribe(\"LKRPBlockStream\", () => {\n describe(\"toString\", () => {\n it(\"should return the hex representation of the block stream\", () => {\n // WHEN\n const hex = \"0102030405060708\";\n const stream = LKRPBlockStream.fromHex(hex);\n // THEN\n expect(stream.toString()).toBe(hex);\n });\n });\n\n describe(\"toU8A\", () => {\n it(\"should return the bytes of the block stream\", () => {\n // WHEN\n const bytes = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]);\n const stream = new LKRPBlockStream(bytes);\n // THEN\n expect(stream.toU8A()).toBe(bytes);\n });\n });\n\n describe(\"toHuman\", () => {\n it(\"should return a human-readable representation of the block stream\", () => {\n // GIVEN\n const stream = LKRPBlockStream.fromHex(mockedHex);\n\n // WHEN\n const humanReadable = stream.toHuman();\n\n // THEN\n expect(humanReadable).toStrictEqual(\n Right(\n [\n \"Parent: 7ba5eefac6605547fc50188ba7880311d3d1240a7ae32e6eaac7499434091c45\",\n \"Issuer: 0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021\",\n \"Commands:\",\n \" Derive(0x15):\",\n \" path: m/0'/16'/0'\",\n \" groupKey: 02839a288f6a76090b64312281d2e7d6b02c4ddf64ed5e7693471b1b445f819508\",\n \" initializationVector: a66c5a4486e870287caa53bbd609af00\",\n \" encryptedXpriv: 0f43341d6f9099a5180fb304a2889b3b0468f05fb0b931d22211753b3411567abb21981b64261e95bcd44a3512af7c87bbb5a4b6b680c03b5f09e8d9c56a9cb1c0788993a3d9d5c140a2462cb1930d19\",\n \" ephemeralPublicKey: 02fbe26c32ab991c1b107156e22fc158c335e0aeedc171381c9d77743c66f41171\",\n \" AddMember(0x11):\",\n \" name: debug-d4c61d\",\n \" publicKey: 03d4c61dda2aaf762954fce97396d9be0399e1dc75c3b790c7a34dde8596a11812\",\n \" permissions: 4294967295\",\n \" PublishKey(0x12):\",\n \" initializationVector: 4d305eae5b70b69cf657f3b9f7db5863\",\n \" encryptedXpriv: 898de535f87f7ac775b09c80827d14efddeeaa9a2b106bfd7fcc91942dc36d6a1751793ba7ec0792ba936f5f1d858bc1fc54ca1a70e8d28a5b0bf33b5e926f3add372c802b3b9da64bc06e26b9349db5\",\n \" recipient: 03d4c61dda2aaf762954fce97396d9be0399e1dc75c3b790c7a34dde8596a11812\",\n \" ephemeralPublicKey: 023db66b974b871c6caafdf486c6895518303b140d389e787d2c3b5527c2df50f4\",\n \"Signature: 3044022056ab426bd75696cbe9538cb42271e8796ba1576dfe3e2634f0a6f1a636821e5002205e41ae68ebd8fbff404340a4f0124af25e948aa52500de192d15ff4f8ee92c02\",\n \"\",\n \"Parent: 154d99eb867cfeef249d573fc2e1f3d307c1e49ec1f66e9af1c9dbd219143211\",\n \"Issuer: 0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021\",\n \"Commands:\",\n \" AddMember(0x11):\",\n \" name: debug-80a289\",\n \" publicKey: 0280a28918369e12c86feb321cd100fe6d958e55a0bb570576ef718e7a379204db\",\n \" permissions: 4294967295\",\n \" PublishKey(0x12):\",\n \" initializationVector: 27bdb34fb6028128bfc919f4db7d1378\",\n \" encryptedXpriv: e792b83f26fac0de46ee8f1a07e53b0e508d9373aa2e8047f0a764204ab0f06a2fffa9c29599f5d3fe42fefabd9827867157bd14ec7e2bd8ef83c6f9371d7b48d28d9a4499f8ed626ce75fcec0a0b33f\",\n \" recipient: 0280a28918369e12c86feb321cd100fe6d958e55a0bb570576ef718e7a379204db\",\n \" ephemeralPublicKey: 027d40157737671bb04eaca2756b8ec58020ff5c893b10cbfb25b48014c5252dc4\",\n \"Signature: 30440220718d20c9996893639da807b8a9675d944abdc8fded97f73159beba5004fa17f102203338b74a9e6a2e696ea3658d3af4fce95ffa0f74c11b2c3d37b0ca1b577657e8\",\n ].join(\"\\n\"),\n ),\n );\n });\n });\n\n describe(\"parse\", () => {\n it(\"should parse the block stream correctly\", () => {\n // GIVEN\n const stream = LKRPBlockStream.fromHex(mockedHex);\n\n // WHEN\n const parsedData = stream.parse();\n stream.toHuman(); // Run toHuman to force the parsing of the commands\n\n // THEN\n expect(parsedData).toStrictEqual(\n Right([\n LKRPBlock.fromData(mockedBlockData1),\n LKRPBlock.fromData(mockedBlockData2),\n ]),\n );\n });\n\n it(\"should fail if the block stream data is invalid\", () => {\n // GIVEN\n const invalidStream = LKRPBlockStream.fromHex(\"00\");\n // WHEN\n const parsedData = invalidStream.parse();\n\n // THEN\n expect(parsedData).toStrictEqual(\n Left(new LKRPParsingError(\"Invalid end of TLV, expected length\")),\n );\n });\n });\n\n describe(\"fromData\", () => {\n it(\"should create a BlockStream from data\", () => {\n // GIVEN\n const mockedBlockData = [\n { ...mockedBlockData1, parent: undefined },\n { ...mockedBlockData2, parent: undefined },\n ];\n\n // WHEN\n const stream = LKRPBlockStream.fromData(\n mockedBlockData,\n mockedBlockData1.parent,\n );\n\n // THEN\n expect(stream.toString()).toBe(mockedHex);\n });\n\n it(\"should assign a random parent hash if not provided\", () => {\n // GIVEN\n const mockedBlockData = [\n { ...mockedBlockData1, parent: undefined },\n { ...mockedBlockData2, parent: undefined },\n ];\n // WHEN\n const stream = LKRPBlockStream.fromData(mockedBlockData);\n const hash = stream\n .parse()\n .map((blocks) => blocks[0]?.hash())\n .caseOf({ Left: () => undefined, Right: (h) => h });\n\n // THEN\n expect(typeof hash).toBe(\"string\");\n expect(hash?.length).toBe(64); // 32 bytes in hex\n expect(hash).not.toBe(mockedBlockData1.parent);\n });\n });\n\n describe(\"validate\", () => {\n it(\"should validate the block stream\", async () => {\n // GIVEN\n const stream = LKRPBlockStream.fromHex(mockedHex);\n\n // WHEN\n const withParentHash = await stream.validate(mockedBlockData1.parent);\n const withoutParentHash = await stream.validate(mockedBlockData1.parent);\n\n // THEN\n expect(withParentHash).toBe(true);\n expect(withoutParentHash).toBe(true);\n });\n\n it(\"should fail validation if the parent hash does not match\", async () => {\n // GIVEN\n const invalidStream = LKRPBlockStream.fromHex(\n mockedHex.replace(mockedBlockData2.parent, mockedBlockData1.parent),\n );\n\n // WHEN\n const wrongBlock1 = await invalidStream.validate(\"0123455678\");\n const wrongBlock2 = await invalidStream.validate();\n\n // THEN\n expect(wrongBlock1).toBe(false);\n expect(wrongBlock2).toBe(false);\n });\n });\n\n describe(\"getPath\", () => {\n it(\"should return the path of the block stream\", () => {\n // GIVEN\n const stream = LKRPBlockStream.fromHex(mockedHex);\n\n // WHEN\n const path = stream.getPath();\n\n // THEN\n expect(path).toEqual(Just(\"m/0'/16'/0'\"));\n });\n });\n});\n\nconst mockedHex = `\n 01 01 01\n 02 20 7b a5 ee fa c6 60 55 47 fc 50 18 8b a7 88 03 11 d3 d1 24 0a 7a e3 2e 6e aa c7 49 94 34 09 1c 45\n 06 21 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21\n 01 01 03\n 15 b8\n 05 0c 80 00 00 00 80 00 00 10 80 00 00 00\n 06 21 02 83 9a 28 8f 6a 76 09 0b 64 31 22 81 d2 e7 d6 b0 2c 4d df 64 ed 5e 76 93 47 1b 1b 44 5f 81 95 08\n 05 10 a6 6c 5a 44 86 e8 70 28 7c aa 53 bb d6 09 af 00\n 05 50 0f 43 34 1d 6f 90 99 a5 18 0f b3 04 a2 88 9b 3b 04 68 f0 5f b0 b9 31 d2 22 11 75 3b 34 11 56 7a bb 21 98 1b 64 26 1e 95 bc d4 4a 35 12 af 7c 87 bb b5 a4 b6 b6 80 c0 3b 5f 09 e8 d9 c5 6a 9c b1 c0 78 89 93 a3 d9 d5 c1 40 a2 46 2c b1 93 0d 19\n 06 21 02 fb e2 6c 32 ab 99 1c 1b 10 71 56 e2 2f c1 58 c3 35 e0 ae ed c1 71 38 1c 9d 77 74 3c 66 f4 11 71\n 11 37\n 04 0c 64 65 62 75 67 2d 64 34 63 36 31 64\n 06 21 03 d4 c6 1d da 2a af 76 29 54 fc e9 73 96 d9 be 03 99 e1 dc 75 c3 b7 90 c7 a3 4d de 85 96 a1 18 12\n 01 04 ff ff ff ff\n 12 aa\n 05 10 4d 30 5e ae 5b 70 b6 9c f6 57 f3 b9 f7 db 58 63\n 05 50 89 8d e5 35 f8 7f 7a c7 75 b0 9c 80 82 7d 14 ef dd ee aa 9a 2b 10 6b fd 7f cc 91 94 2d c3 6d 6a 17 51 79 3b a7 ec 07 92 ba 93 6f 5f 1d 85 8b c1 fc 54 ca 1a 70 e8 d2 8a 5b 0b f3 3b 5e 92 6f 3a dd 37 2c 80 2b 3b 9d a6 4b c0 6e 26 b9 34 9d b5\n 06 21 03 d4 c6 1d da 2a af 76 29 54 fc e9 73 96 d9 be 03 99 e1 dc 75 c3 b7 90 c7 a3 4d de 85 96 a1 18 12\n 06 21 02 3d b6 6b 97 4b 87 1c 6c aa fd f4 86 c6 89 55 18 30 3b 14 0d 38 9e 78 7d 2c 3b 55 27 c2 df 50 f4\n 03 46 30 44 02 20 56 ab 42 6b d7 56 96 cb e9 53 8c b4 22 71 e8 79 6b a1 57 6d fe 3e 26 34 f0 a6 f1 a6 36 82 1e 50 02 20 5e 41 ae 68 eb d8 fb ff 40 43 40 a4 f0 12 4a f2 5e 94 8a a5 25 00 de 19 2d 15 ff 4f 8e e9 2c 02\n\n 01 01 01\n 02 20 15 4d 99 eb 86 7c fe ef 24 9d 57 3f c2 e1 f3 d3 07 c1 e4 9e c1 f6 6e 9a f1 c9 db d2 19 14 32 11 \n 06 21 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21\n 01 01 02\n 11 37\n 04 0c 64 65 62 75 67 2d 38 30 61 32 38 39\n 06 21 02 80 a2 89 18 36 9e 12 c8 6f eb 32 1c d1 00 fe 6d 95 8e 55 a0 bb 57 05 76 ef 71 8e 7a 37 92 04 db\n 01 04 ff ff ff ff\n 12 aa\n 05 10 27 bd b3 4f b6 02 81 28 bf c9 19 f4 db 7d 13 78\n 05 50 e7 92 b8 3f 26 fa c0 de 46 ee 8f 1a 07 e5 3b 0e 50 8d 93 73 aa 2e 80 47 f0 a7 64 20 4a b0 f0 6a 2f ff a9 c2 95 99 f5 d3 fe 42 fe fa bd 98 27 86 71 57 bd 14 ec 7e 2b d8 ef 83 c6 f9 37 1d 7b 48 d2 8d 9a 44 99 f8 ed 62 6c e7 5f ce c0 a0 b3 3f\n 06 21 02 80 a2 89 18 36 9e 12 c8 6f eb 32 1c d1 00 fe 6d 95 8e 55 a0 bb 57 05 76 ef 71 8e 7a 37 92 04 db\n 06 21 02 7d 40 15 77 37 67 1b b0 4e ac a2 75 6b 8e c5 80 20 ff 5c 89 3b 10 cb fb 25 b4 80 14 c5 25 2d c4\n 03 46 30 44 02 20 71 8d 20 c9 99 68 93 63 9d a8 07 b8 a9 67 5d 94 4a bd c8 fd ed 97 f7 31 59 be ba 50 04 fa 17 f1 02 20 33 38 b7 4a 9e 6a 2e 69 6e a3 65 8d 3a f4 fc e9 5f fa 0f 74 c1 1b 2c 3d 37 b0 ca 1b 57 76 57 e8 \n`.replace(/\\s/g, \"\");\n\nconst mockedBlockData1 = {\n parent: \"7ba5eefac6605547fc50188ba7880311d3d1240a7ae32e6eaac7499434091c45\",\n issuer: hexToBytes(\n \"0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021\",\n ),\n commands: [\n LKRPCommand.fromData({\n type: CommandTags.Derive,\n path: \"m/0'/16'/0'\",\n groupKey: hexToBytes(\n \"02839a288f6a76090b64312281d2e7d6b02c4ddf64ed5e7693471b1b445f819508\",\n ),\n initializationVector: hexToBytes(\"a66c5a4486e870287caa53bbd609af00\"),\n encryptedXpriv: hexToBytes(\n \"0f43341d6f9099a5180fb304a2889b3b0468f05fb0b931d22211753b3411567abb21981b64261e95bcd44a3512af7c87bbb5a4b6b680c03b5f09e8d9c56a9cb1c0788993a3d9d5c140a2462cb1930d19\",\n ),\n ephemeralPublicKey: hexToBytes(\n \"02fbe26c32ab991c1b107156e22fc158c335e0aeedc171381c9d77743c66f41171\",\n ),\n }),\n LKRPCommand.fromData({\n type: CommandTags.AddMember,\n name: \"debug-d4c61d\",\n publicKey: hexToBytes(\n \"03d4c61dda2aaf762954fce97396d9be0399e1dc75c3b790c7a34dde8596a11812\",\n ),\n permissions: 0xffffffff,\n }),\n LKRPCommand.fromData({\n type: CommandTags.PublishKey,\n initializationVector: hexToBytes(\"4d305eae5b70b69cf657f3b9f7db5863\"),\n encryptedXpriv: hexToBytes(\n \"898de535f87f7ac775b09c80827d14efddeeaa9a2b106bfd7fcc91942dc36d6a1751793ba7ec0792ba936f5f1d858bc1fc54ca1a70e8d28a5b0bf33b5e926f3add372c802b3b9da64bc06e26b9349db5\",\n ),\n recipient: hexToBytes(\n \"03d4c61dda2aaf762954fce97396d9be0399e1dc75c3b790c7a34dde8596a11812\",\n ),\n ephemeralPublicKey: hexToBytes(\n \"023db66b974b871c6caafdf486c6895518303b140d389e787d2c3b5527c2df50f4\",\n ),\n }),\n ],\n signature: hexToBytes(\n \"3044022056ab426bd75696cbe9538cb42271e8796ba1576dfe3e2634f0a6f1a636821e5002205e41ae68ebd8fbff404340a4f0124af25e948aa52500de192d15ff4f8ee92c02\",\n ),\n};\nconst mockedBlockData2 = {\n parent: \"154d99eb867cfeef249d573fc2e1f3d307c1e49ec1f66e9af1c9dbd219143211\",\n issuer: hexToBytes(\n \"0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021\",\n ),\n commands: [\n LKRPCommand.fromData({\n type: CommandTags.AddMember,\n name: \"debug-80a289\",\n publicKey: hexToBytes(\n \"0280a28918369e12c86feb321cd100fe6d958e55a0bb570576ef718e7a379204db\",\n ),\n permissions: 0xffffffff,\n }),\n LKRPCommand.fromData({\n type: CommandTags.PublishKey,\n initializationVector: hexToBytes(\"27bdb34fb6028128bfc919f4db7d1378\"),\n encryptedXpriv: hexToBytes(\n \"e792b83f26fac0de46ee8f1a07e53b0e508d9373aa2e8047f0a764204ab0f06a2fffa9c29599f5d3fe42fefabd9827867157bd14ec7e2bd8ef83c6f9371d7b48d28d9a4499f8ed626ce75fcec0a0b33f\",\n ),\n recipient: hexToBytes(\n \"0280a28918369e12c86feb321cd100fe6d958e55a0bb570576ef718e7a379204db\",\n ),\n ephemeralPublicKey: hexToBytes(\n \"027d40157737671bb04eaca2756b8ec58020ff5c893b10cbfb25b48014c5252dc4\",\n ),\n }),\n ],\n signature: hexToBytes(\n \"30440220718d20c9996893639da807b8a9675d944abdc8fded97f73159beba5004fa17f102203338b74a9e6a2e696ea3658d3af4fce95ffa0f74c11b2c3d37b0ca1b577657e8\",\n ),\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["Just", "Left", "Right", "LKRPParsingError", "CommandTags", "hexToBytes", "LKRPBlock", "LKRPBlockStream", "LKRPCommand", "hex", "stream", "bytes", "humanReadable", "mockedHex", "parsedData", "mockedBlockData1", "mockedBlockData2", "mockedBlockData", "hash", "blocks", "h", "withParentHash", "withoutParentHash", "invalidStream", "wrongBlock1", "wrongBlock2", "path"]
7
7
  }
@@ -1,3 +1,3 @@
1
- import{Just as s,Maybe as d,Nothing as n,Right as p}from"purify-ts";import{derivationPathAsBytes as o}from"./derivationPath";import{bytesToHex as a,hexToBytes as b}from"./hex";import{TLVBuilder as c}from"./TLVBuilder";import{TLVParser as m}from"./TLVParser";import{CommandTags as t}from"./TLVTags";class y{constructor(e,r){this.bytes=e;this.data=r?s(p(r)):n}data;static fromHex(e){return new y(b(e))}static fromData(e){const r=new c;switch(e.type){case t.Seed:r.addBytes(e.topic).addInt(e.protocolVersion,2).addPublicKey(e.groupKey).addBytes(e.initializationVector).addBytes(e.encryptedXpriv).addPublicKey(e.ephemeralPublicKey);break;case t.AddMember:r.addString(e.name).addPublicKey(e.publicKey).addInt(e.permissions,4);break;case t.PublishKey:r.addBytes(e.initializationVector).addBytes(e.encryptedXpriv).addPublicKey(e.recipient).addPublicKey(e.ephemeralPublicKey);break;case t.Derive:r.addBytes(o(e.path)).addPublicKey(e.groupKey).addBytes(e.initializationVector).addBytes(e.encryptedXpriv).addPublicKey(e.ephemeralPublicKey);break}const i=r.build();return new y(new Uint8Array([e.type,i.length,...i]),e)}static bytesFromUnsignedData(e){const r=new c;switch(e.type){case t.AddMember:r.addString(e.name).addPublicKey(e.publicKey).addInt(e.permissions,4);break;case t.PublishKey:r.addBytes(new Uint8Array),r.addBytes(new Uint8Array),r.addPublicKey(e.recipient),r.addPublicKey(new Uint8Array);break;case t.Derive:r.addBytes(o(e.path));break}const i=r.build();return new Uint8Array([e.type,i.length,...i])}toString(){return a(this.bytes)}toU8A(){return this.bytes}parse(){return this.data.orDefaultLazy(()=>{const e=new m(this.bytes).parseCommandData();return this.data=s(e),e})}toHuman(){return this.parse().map(e=>Object.entries(e).map(([r,i])=>r==="type"?`${t[i]}(0x${i?.toString(16).padStart(2,"0")}):`:` ${r}: ${i instanceof Uint8Array?a(i):i}`).join(`
2
- `))}getPublicKey(){switch(this.bytes[0]){case t.AddMember:case t.PublishKey:return this.parse().toMaybe().chain(e=>{switch(e.type){case t.AddMember:return s(e.publicKey);case t.PublishKey:return s(e.recipient);default:return n}}).map(a);default:return n}}getEncryptedPublichedKey(){switch(this.bytes[0]){case t.Seed:case t.Derive:case t.PublishKey:return this.parse().toMaybe().chain(e=>{switch(e.type){case t.Seed:case t.Derive:case t.PublishKey:return d.of({...e});default:return n}});default:return n}}}export{y as LKRPCommand};
1
+ import{Just as s,Maybe as c,Nothing as n,Right as p}from"purify-ts";import{CommandTags as t}from"../models/Tags";import{derivationPathAsBytes as o}from"./derivationPath";import{bytesToHex as a,hexToBytes as m}from"./hex";import{TLVBuilder as d}from"./TLVBuilder";import{TLVParser as b}from"./TLVParser";class y{constructor(e,r){this.bytes=e;this.data=r?s(p(r)):n}data;static fromHex(e){return new y(m(e))}static fromData(e){const r=new d;switch(e.type){case t.Seed:r.addBytes(e.topic).addInt(e.protocolVersion,2).addPublicKey(e.groupKey).addBytes(e.initializationVector).addBytes(e.encryptedXpriv).addPublicKey(e.ephemeralPublicKey);break;case t.AddMember:r.addString(e.name).addPublicKey(e.publicKey).addInt(e.permissions,4);break;case t.PublishKey:r.addBytes(e.initializationVector).addBytes(e.encryptedXpriv).addPublicKey(e.recipient).addPublicKey(e.ephemeralPublicKey);break;case t.Derive:r.addBytes(o(e.path)).addPublicKey(e.groupKey).addBytes(e.initializationVector).addBytes(e.encryptedXpriv).addPublicKey(e.ephemeralPublicKey);break}const i=r.build();return new y(new Uint8Array([e.type,i.length,...i]),e)}static bytesFromUnsignedData(e){const r=new d;switch(e.type){case t.AddMember:r.addString(e.name).addPublicKey(e.publicKey).addInt(e.permissions,4);break;case t.PublishKey:r.addBytes(new Uint8Array),r.addBytes(new Uint8Array),r.addPublicKey(e.recipient),r.addPublicKey(new Uint8Array);break;case t.Derive:r.addBytes(o(e.path));break}const i=r.build();return new Uint8Array([e.type,i.length,...i])}toString(){return a(this.bytes)}toU8A(){return this.bytes}parse(){return this.data.orDefaultLazy(()=>{const e=new b(this.bytes).parseCommandData();return this.data=s(e),e})}toHuman(){return this.parse().map(e=>Object.entries(e).map(([r,i])=>r==="type"?`${t[i]}(0x${i?.toString(16).padStart(2,"0")}):`:` ${r}: ${i instanceof Uint8Array?a(i):i}`).join(`
2
+ `))}getPublicKey(){switch(this.bytes[0]){case t.AddMember:case t.PublishKey:return this.parse().toMaybe().chain(e=>{switch(e.type){case t.AddMember:return s(e.publicKey);case t.PublishKey:return s(e.recipient);default:return n}}).map(a);default:return n}}getEncryptedPublishedKey(){switch(this.bytes[0]){case t.Seed:case t.Derive:case t.PublishKey:return this.parse().toMaybe().chain(e=>{switch(e.type){case t.Seed:case t.Derive:case t.PublishKey:return c.of({...e});default:return n}});default:return n}}}export{y as LKRPCommand};
3
3
  //# sourceMappingURL=LKRPCommand.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/internal/utils/LKRPCommand.ts"],
4
- "sourcesContent": ["import { type Either, Just, Maybe, Nothing, Right } from \"purify-ts\";\n\nimport { type LKRPParsingError } from \"@api/app-binder/Errors\";\n\nimport { derivationPathAsBytes } from \"./derivationPath\";\nimport { bytesToHex, hexToBytes } from \"./hex\";\nimport { TLVBuilder } from \"./TLVBuilder\";\nimport { TLVParser } from \"./TLVParser\";\nimport { CommandTags } from \"./TLVTags\";\nimport {\n type EncryptedPublishedKey,\n type LKRPCommandData,\n type UnsignedCommandData,\n} from \"./types\";\n\nexport class LKRPCommand {\n private data: Maybe<Either<LKRPParsingError, LKRPCommandData>>;\n\n constructor(\n private bytes: Uint8Array,\n data?: LKRPCommandData,\n ) {\n this.data = data ? Just(Right(data)) : Nothing;\n }\n\n static fromHex(hex: string): LKRPCommand {\n return new LKRPCommand(hexToBytes(hex));\n }\n\n static fromData(data: LKRPCommandData): LKRPCommand {\n const tlv = new TLVBuilder();\n switch (data.type) {\n case CommandTags.Seed:\n tlv\n .addBytes(data.topic)\n .addInt(data.protocolVersion, 2)\n .addPublicKey(data.groupKey)\n .addBytes(data.initializationVector)\n .addBytes(data.encryptedXpriv)\n .addPublicKey(data.ephemeralPublicKey);\n break;\n\n case CommandTags.AddMember:\n tlv\n .addString(data.name)\n .addPublicKey(data.publicKey)\n .addInt(data.permissions, 4);\n break;\n\n case CommandTags.PublishKey:\n tlv\n .addBytes(data.initializationVector)\n .addBytes(data.encryptedXpriv)\n .addPublicKey(data.recipient)\n .addPublicKey(data.ephemeralPublicKey);\n break;\n\n case CommandTags.Derive:\n tlv\n .addBytes(derivationPathAsBytes(data.path))\n .addPublicKey(data.groupKey)\n .addBytes(data.initializationVector)\n .addBytes(data.encryptedXpriv)\n .addPublicKey(data.ephemeralPublicKey);\n break;\n }\n\n const bytes = tlv.build();\n return new LKRPCommand(\n new Uint8Array([data.type, bytes.length, ...bytes]),\n data,\n );\n }\n\n static bytesFromUnsignedData(data: UnsignedCommandData): Uint8Array {\n const tlv = new TLVBuilder();\n switch (data.type) {\n case CommandTags.AddMember:\n tlv\n .addString(data.name)\n .addPublicKey(data.publicKey)\n .addInt(data.permissions, 4);\n break;\n\n case CommandTags.PublishKey:\n tlv.addBytes(new Uint8Array()); // Empty IV\n tlv.addBytes(new Uint8Array()); // Empty encryptedXpriv\n tlv.addPublicKey(data.recipient);\n tlv.addPublicKey(new Uint8Array()); // Empty ephemeralPublicKey\n break;\n\n case CommandTags.Derive:\n tlv.addBytes(derivationPathAsBytes(data.path));\n break;\n }\n\n const bytes = tlv.build();\n return new Uint8Array([data.type, bytes.length, ...bytes]);\n }\n\n toString(): string {\n return bytesToHex(this.bytes);\n }\n\n toU8A(): Uint8Array {\n return this.bytes;\n }\n\n parse(): Either<LKRPParsingError, LKRPCommandData> {\n return this.data.orDefaultLazy(() => {\n const data = new TLVParser(this.bytes).parseCommandData();\n this.data = Just(data);\n return data;\n });\n }\n\n toHuman(): Either<LKRPParsingError, string> {\n return this.parse().map((data) =>\n Object.entries(data)\n .map(([key, value]) => {\n if (key === \"type\") {\n return `${CommandTags[value as CommandTags]}(0x${value?.toString(16).padStart(2, \"0\")}):`;\n }\n return ` ${key}: ${value instanceof Uint8Array ? bytesToHex(value) : value}`;\n })\n .join(\"\\n\"),\n );\n }\n\n getPublicKey(): Maybe<string> {\n switch (this.bytes[0]) {\n case CommandTags.AddMember:\n case CommandTags.PublishKey:\n return this.parse()\n .toMaybe()\n .chain((data) => {\n switch (data.type) {\n case CommandTags.AddMember:\n return Just(data.publicKey);\n case CommandTags.PublishKey:\n return Just(data.recipient);\n default:\n return Nothing;\n }\n })\n .map(bytesToHex);\n\n default:\n return Nothing;\n }\n }\n\n getEncryptedPublichedKey(): Maybe<EncryptedPublishedKey> {\n switch (this.bytes[0]) {\n case CommandTags.Seed:\n case CommandTags.Derive:\n case CommandTags.PublishKey:\n return this.parse()\n .toMaybe()\n .chain((data) => {\n switch (data.type) {\n case CommandTags.Seed:\n case CommandTags.Derive:\n case CommandTags.PublishKey:\n return Maybe.of({ ...data });\n default:\n return Nothing;\n }\n });\n default:\n return Nothing;\n }\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["Just", "Maybe", "Nothing", "Right", "derivationPathAsBytes", "bytesToHex", "hexToBytes", "TLVBuilder", "TLVParser", "CommandTags", "LKRPCommand", "bytes", "data", "hex", "tlv", "key", "value"]
4
+ "sourcesContent": ["import { type Either, Just, Maybe, Nothing, Right } from \"purify-ts\";\n\nimport { type LKRPParsingError } from \"@api/app-binder/Errors\";\nimport {\n type LKRPCommandData,\n type UnsignedCommandData,\n} from \"@internal/models/LKRPCommandTypes\";\nimport { CommandTags } from \"@internal/models/Tags\";\nimport { type EncryptedPublishedKey } from \"@internal/models/Types\";\n\nimport { derivationPathAsBytes } from \"./derivationPath\";\nimport { bytesToHex, hexToBytes } from \"./hex\";\nimport { TLVBuilder } from \"./TLVBuilder\";\nimport { TLVParser } from \"./TLVParser\";\n\nexport class LKRPCommand {\n private data: Maybe<Either<LKRPParsingError, LKRPCommandData>>;\n\n constructor(\n private bytes: Uint8Array,\n data?: LKRPCommandData,\n ) {\n this.data = data ? Just(Right(data)) : Nothing;\n }\n\n static fromHex(hex: string): LKRPCommand {\n return new LKRPCommand(hexToBytes(hex));\n }\n\n static fromData(data: LKRPCommandData): LKRPCommand {\n const tlv = new TLVBuilder();\n switch (data.type) {\n case CommandTags.Seed:\n tlv\n .addBytes(data.topic)\n .addInt(data.protocolVersion, 2)\n .addPublicKey(data.groupKey)\n .addBytes(data.initializationVector)\n .addBytes(data.encryptedXpriv)\n .addPublicKey(data.ephemeralPublicKey);\n break;\n\n case CommandTags.AddMember:\n tlv\n .addString(data.name)\n .addPublicKey(data.publicKey)\n .addInt(data.permissions, 4);\n break;\n\n case CommandTags.PublishKey:\n tlv\n .addBytes(data.initializationVector)\n .addBytes(data.encryptedXpriv)\n .addPublicKey(data.recipient)\n .addPublicKey(data.ephemeralPublicKey);\n break;\n\n case CommandTags.Derive:\n tlv\n .addBytes(derivationPathAsBytes(data.path))\n .addPublicKey(data.groupKey)\n .addBytes(data.initializationVector)\n .addBytes(data.encryptedXpriv)\n .addPublicKey(data.ephemeralPublicKey);\n break;\n }\n\n const bytes = tlv.build();\n return new LKRPCommand(\n new Uint8Array([data.type, bytes.length, ...bytes]),\n data,\n );\n }\n\n static bytesFromUnsignedData(data: UnsignedCommandData): Uint8Array {\n const tlv = new TLVBuilder();\n switch (data.type) {\n case CommandTags.AddMember:\n tlv\n .addString(data.name)\n .addPublicKey(data.publicKey)\n .addInt(data.permissions, 4);\n break;\n\n case CommandTags.PublishKey:\n tlv.addBytes(new Uint8Array()); // Empty IV\n tlv.addBytes(new Uint8Array()); // Empty encryptedXpriv\n tlv.addPublicKey(data.recipient);\n tlv.addPublicKey(new Uint8Array()); // Empty ephemeralPublicKey\n break;\n\n case CommandTags.Derive:\n tlv.addBytes(derivationPathAsBytes(data.path));\n break;\n }\n\n const bytes = tlv.build();\n return new Uint8Array([data.type, bytes.length, ...bytes]);\n }\n\n toString(): string {\n return bytesToHex(this.bytes);\n }\n\n toU8A(): Uint8Array {\n return this.bytes;\n }\n\n parse(): Either<LKRPParsingError, LKRPCommandData> {\n return this.data.orDefaultLazy(() => {\n const data = new TLVParser(this.bytes).parseCommandData();\n this.data = Just(data);\n return data;\n });\n }\n\n toHuman(): Either<LKRPParsingError, string> {\n return this.parse().map((data) =>\n Object.entries(data)\n .map(([key, value]) => {\n if (key === \"type\") {\n return `${CommandTags[value as CommandTags]}(0x${value?.toString(16).padStart(2, \"0\")}):`;\n }\n return ` ${key}: ${value instanceof Uint8Array ? bytesToHex(value) : value}`;\n })\n .join(\"\\n\"),\n );\n }\n\n getPublicKey(): Maybe<string> {\n switch (this.bytes[0]) {\n case CommandTags.AddMember:\n case CommandTags.PublishKey:\n return this.parse()\n .toMaybe()\n .chain((data) => {\n switch (data.type) {\n case CommandTags.AddMember:\n return Just(data.publicKey);\n case CommandTags.PublishKey:\n return Just(data.recipient);\n default:\n return Nothing;\n }\n })\n .map(bytesToHex);\n\n default:\n return Nothing;\n }\n }\n\n getEncryptedPublishedKey(): Maybe<EncryptedPublishedKey> {\n switch (this.bytes[0]) {\n case CommandTags.Seed:\n case CommandTags.Derive:\n case CommandTags.PublishKey:\n return this.parse()\n .toMaybe()\n .chain((data) => {\n switch (data.type) {\n case CommandTags.Seed:\n case CommandTags.Derive:\n case CommandTags.PublishKey:\n return Maybe.of({ ...data });\n default:\n return Nothing;\n }\n });\n default:\n return Nothing;\n }\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["Just", "Maybe", "Nothing", "Right", "CommandTags", "derivationPathAsBytes", "bytesToHex", "hexToBytes", "TLVBuilder", "TLVParser", "LKRPCommand", "bytes", "data", "hex", "tlv", "key", "value"]
7
7
  }
@@ -1,3 +1,3 @@
1
- import{Just as o,Left as a,Nothing as d,Right as c}from"purify-ts";import{LKRPParsingError as x}from"../../api/app-binder/Errors";import{LKRPCommand as r}from"./LKRPCommand";import{CommandTags as i,GeneralTags as t}from"./TLVTags";describe("LKRPCommand",()=>{describe("toString",()=>{it("should return the hex of the bytes of the command",()=>{const e="0102030405060708",n=r.fromHex(e);expect(n.toString()).toBe(e)})}),describe("toU8A",()=>{it("should return the bytes of the command",()=>{const e=new Uint8Array([1,2,3,4,5,6,7,8]),n=new r(e);expect(n.toU8A()).toBe(e)})}),describe("parse",()=>{it("should parse the command data correctly",()=>{const e=new Uint8Array([t.Bytes,3,1,2,3,t.Int,2,1,2,t.PublicKey,3,2,4,6,t.Bytes,3,3,5,7,t.Bytes,3,4,8,16,t.PublicKey,3,10,11,12]),n=new r(new Uint8Array([i.Seed,e.length,...e]));expect(n.parse()).toStrictEqual(c({type:i.Seed,topic:new Uint8Array([1,2,3]),protocolVersion:258,groupKey:new Uint8Array([2,4,6]),initializationVector:new Uint8Array([3,5,7]),encryptedXpriv:new Uint8Array([4,8,16]),ephemeralPublicKey:new Uint8Array([10,11,12])}))}),it("should fail with invalid command bytes",()=>{const e=new r(new Uint8Array([i.Seed,1,1]));expect(e.parse()).toStrictEqual(a(new x("Invalid end of TLV, expected length")))})}),describe("getPublicKey",()=>{it("should return the public key for AddMember command",()=>{const e=new Uint8Array([t.String,3,65,66,67,t.PublicKey,3,4,5,6,t.Int,1,1]),n=new r(new Uint8Array([i.AddMember,e.length,...e]));expect(n.getPublicKey()).toStrictEqual(o("040506"))}),it("should return the public key for PublishKey commands",()=>{const e=new Uint8Array([t.Bytes,3,1,2,3,t.Bytes,3,4,5,6,t.PublicKey,3,7,8,9,t.PublicKey,3,10,11,12]),n=new r(new Uint8Array([i.PublishKey,e.length,...e]));expect(n.getPublicKey()).toEqual(o("070809"))}),it("should return undefined for other command types",()=>{const e=new r(new Uint8Array([i.Seed]));expect(e.getPublicKey()).toEqual(d)})}),describe("toHuman",()=>{it("should return a string representation of the command",()=>{const e=new Uint8Array([t.Bytes,3,1,2,3,t.Bytes,3,4,5,6,t.PublicKey,3,7,8,9,t.PublicKey,3,10,11,12]),n=new r(new Uint8Array([i.PublishKey,e.length,...e]));expect(n.toHuman()).toStrictEqual(c(["PublishKey(0x12):"," initializationVector: 010203"," encryptedXpriv: 040506"," recipient: 070809"," ephemeralPublicKey: 0a0b0c"].join(`
1
+ import{Just as o,Left as a,Nothing as d,Right as c}from"purify-ts";import{LKRPParsingError as x}from"../../api/app-binder/Errors";import{CommandTags as i,GeneralTags as t}from"../models/Tags";import{LKRPCommand as r}from"./LKRPCommand";describe("LKRPCommand",()=>{describe("toString",()=>{it("should return the hex of the bytes of the command",()=>{const e="0102030405060708",n=r.fromHex(e);expect(n.toString()).toBe(e)})}),describe("toU8A",()=>{it("should return the bytes of the command",()=>{const e=new Uint8Array([1,2,3,4,5,6,7,8]),n=new r(e);expect(n.toU8A()).toBe(e)})}),describe("parse",()=>{it("should parse the command data correctly",()=>{const e=new Uint8Array([t.Bytes,3,1,2,3,t.Int,2,1,2,t.PublicKey,3,2,4,6,t.Bytes,3,3,5,7,t.Bytes,3,4,8,16,t.PublicKey,3,10,11,12]),n=new r(new Uint8Array([i.Seed,e.length,...e]));expect(n.parse()).toStrictEqual(c({type:i.Seed,topic:new Uint8Array([1,2,3]),protocolVersion:258,groupKey:new Uint8Array([2,4,6]),initializationVector:new Uint8Array([3,5,7]),encryptedXpriv:new Uint8Array([4,8,16]),ephemeralPublicKey:new Uint8Array([10,11,12])}))}),it("should fail with invalid command bytes",()=>{const e=new r(new Uint8Array([i.Seed,1,1]));expect(e.parse()).toStrictEqual(a(new x("Invalid end of TLV, expected length")))})}),describe("getPublicKey",()=>{it("should return the public key for AddMember command",()=>{const e=new Uint8Array([t.String,3,65,66,67,t.PublicKey,3,4,5,6,t.Int,1,1]),n=new r(new Uint8Array([i.AddMember,e.length,...e]));expect(n.getPublicKey()).toStrictEqual(o("040506"))}),it("should return the public key for PublishKey commands",()=>{const e=new Uint8Array([t.Bytes,3,1,2,3,t.Bytes,3,4,5,6,t.PublicKey,3,7,8,9,t.PublicKey,3,10,11,12]),n=new r(new Uint8Array([i.PublishKey,e.length,...e]));expect(n.getPublicKey()).toEqual(o("070809"))}),it("should return undefined for other command types",()=>{const e=new r(new Uint8Array([i.Seed]));expect(e.getPublicKey()).toEqual(d)})}),describe("toHuman",()=>{it("should return a string representation of the command",()=>{const e=new Uint8Array([t.Bytes,3,1,2,3,t.Bytes,3,4,5,6,t.PublicKey,3,7,8,9,t.PublicKey,3,10,11,12]),n=new r(new Uint8Array([i.PublishKey,e.length,...e]));expect(n.toHuman()).toStrictEqual(c(["PublishKey(0x12):"," initializationVector: 010203"," encryptedXpriv: 040506"," recipient: 070809"," ephemeralPublicKey: 0a0b0c"].join(`
2
2
  `)))}),it("should fail for invalid command bytes format",()=>{const e=new r(new Uint8Array([i.Seed,1,1]));expect(e.toHuman()).toStrictEqual(a(new x("Invalid end of TLV, expected length")))})})});
3
3
  //# sourceMappingURL=LKRPCommand.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/internal/utils/LKRPCommand.test.ts"],
4
- "sourcesContent": ["import { Just, Left, Nothing, Right } from \"purify-ts\";\n\nimport { LKRPParsingError } from \"@api/app-binder/Errors\";\n\nimport { LKRPCommand } from \"./LKRPCommand\";\nimport { CommandTags, GeneralTags } from \"./TLVTags\";\n\ndescribe(\"LKRPCommand\", () => {\n describe(\"toString\", () => {\n it(\"should return the hex of the bytes of the command\", () => {\n // WHEN\n const hex = \"0102030405060708\";\n const command = LKRPCommand.fromHex(hex);\n // THEN\n expect(command.toString()).toBe(hex);\n });\n });\n\n describe(\"toU8A\", () => {\n it(\"should return the bytes of the command\", () => {\n // WHEN\n const bytes = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]);\n const command = new LKRPCommand(bytes);\n // THEN\n expect(command.toU8A()).toBe(bytes);\n });\n });\n\n describe(\"parse\", () => {\n it(\"should parse the command data correctly\", () => {\n // GIVEN\n const value = new Uint8Array([\n ...[GeneralTags.Bytes, 3, 0x01, 0x02, 0x03], // Topic\n ...[GeneralTags.Int, 2, 0x01, 0x02], // Protocol Version\n ...[GeneralTags.PublicKey, 3, 0x02, 0x04, 0x06], // Group Key\n ...[GeneralTags.Bytes, 3, 0x03, 0x05, 0x07], // Initialization Vector\n ...[GeneralTags.Bytes, 3, 0x04, 0x08, 0x10], // Encrypted xpriv\n ...[GeneralTags.PublicKey, 3, 0x0a, 0x0b, 0x0c], // Ephemeral Public Key\n ]);\n // WHEN\n const command = new LKRPCommand(\n new Uint8Array([CommandTags.Seed, value.length, ...value]),\n );\n // THEN\n expect(command.parse()).toStrictEqual(\n Right({\n type: CommandTags.Seed,\n topic: new Uint8Array([0x01, 0x02, 0x03]),\n protocolVersion: 258,\n groupKey: new Uint8Array([0x02, 0x04, 0x06]),\n initializationVector: new Uint8Array([0x03, 0x05, 0x07]),\n encryptedXpriv: new Uint8Array([0x04, 0x08, 0x10]),\n ephemeralPublicKey: new Uint8Array([0x0a, 0x0b, 0x0c]),\n }),\n );\n });\n\n it(\"should fail with invalid command bytes\", () => {\n // WHEN\n const command = new LKRPCommand(\n new Uint8Array([CommandTags.Seed, 1, ...[0x01]]),\n );\n // THEN\n expect(command.parse()).toStrictEqual(\n Left(new LKRPParsingError(\"Invalid end of TLV, expected length\")),\n );\n });\n });\n\n describe(\"getPublicKey\", () => {\n it(\"should return the public key for AddMember command\", () => {\n // GIVEN\n const addMemberValue = new Uint8Array([\n ...[GeneralTags.String, 3, 0x41, 0x42, 0x43], // Name \"ABC\"\n ...[GeneralTags.PublicKey, 3, 0x04, 0x05, 0x06], // Public Key\n ...[GeneralTags.Int, 1, 0x01], // Permissions\n ]);\n\n // WHEN\n const addMemberCmd = new LKRPCommand(\n new Uint8Array([\n CommandTags.AddMember,\n addMemberValue.length,\n ...addMemberValue,\n ]),\n );\n\n // THEN\n expect(addMemberCmd.getPublicKey()).toStrictEqual(Just(\"040506\"));\n });\n\n it(\"should return the public key for PublishKey commands\", () => {\n // GIVEN\n const publishKeyValue = new Uint8Array([\n ...[GeneralTags.Bytes, 3, 0x01, 0x02, 0x03], // Initialization Vector\n ...[GeneralTags.Bytes, 3, 0x04, 0x05, 0x06], // Encrypted xpriv\n ...[GeneralTags.PublicKey, 3, 0x07, 0x08, 0x09], // Recipient\n ...[GeneralTags.PublicKey, 3, 0x0a, 0x0b, 0x0c], // Ephemeral Public Key\n ]);\n // WHEN\n const publishKeyCmd = new LKRPCommand(\n new Uint8Array([\n CommandTags.PublishKey,\n publishKeyValue.length,\n ...publishKeyValue,\n ]),\n );\n // THEN\n expect(publishKeyCmd.getPublicKey()).toEqual(Just(\"070809\"));\n });\n\n it(\"should return undefined for other command types\", () => {\n // WHEN\n const command = new LKRPCommand(new Uint8Array([CommandTags.Seed]));\n // THEN\n expect(command.getPublicKey()).toEqual(Nothing);\n });\n });\n\n describe(\"toHuman\", () => {\n it(\"should return a string representation of the command\", () => {\n // GIVEN\n const value = new Uint8Array([\n ...[GeneralTags.Bytes, 3, 0x01, 0x02, 0x03], // Initialization Vector\n ...[GeneralTags.Bytes, 3, 0x04, 0x05, 0x06], // Encrypted xpriv\n ...[GeneralTags.PublicKey, 3, 0x07, 0x08, 0x09], // Recipient\n ...[GeneralTags.PublicKey, 3, 0x0a, 0x0b, 0x0c], // Ephemeral Public Key\n ]);\n // WHEN\n const command = new LKRPCommand(\n new Uint8Array([CommandTags.PublishKey, value.length, ...value]),\n );\n // THEN\n expect(command.toHuman()).toStrictEqual(\n Right(\n [\n `PublishKey(0x12):`,\n ` initializationVector: 010203`,\n ` encryptedXpriv: 040506`,\n ` recipient: 070809`,\n ` ephemeralPublicKey: 0a0b0c`,\n ].join(\"\\n\"),\n ),\n );\n });\n\n it(\"should fail for invalid command bytes format\", () => {\n // WHEN\n const command = new LKRPCommand(\n new Uint8Array([CommandTags.Seed, 1, ...[0x01]]),\n );\n // THEN\n expect(command.toHuman()).toStrictEqual(\n Left(new LKRPParsingError(\"Invalid end of TLV, expected length\")),\n );\n });\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["Just", "Left", "Nothing", "Right", "LKRPParsingError", "LKRPCommand", "CommandTags", "GeneralTags", "hex", "command", "bytes", "value", "addMemberValue", "addMemberCmd", "publishKeyValue", "publishKeyCmd"]
4
+ "sourcesContent": ["import { Just, Left, Nothing, Right } from \"purify-ts\";\n\nimport { LKRPParsingError } from \"@api/app-binder/Errors\";\nimport { CommandTags, GeneralTags } from \"@internal/models/Tags\";\n\nimport { LKRPCommand } from \"./LKRPCommand\";\n\ndescribe(\"LKRPCommand\", () => {\n describe(\"toString\", () => {\n it(\"should return the hex of the bytes of the command\", () => {\n // WHEN\n const hex = \"0102030405060708\";\n const command = LKRPCommand.fromHex(hex);\n // THEN\n expect(command.toString()).toBe(hex);\n });\n });\n\n describe(\"toU8A\", () => {\n it(\"should return the bytes of the command\", () => {\n // WHEN\n const bytes = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]);\n const command = new LKRPCommand(bytes);\n // THEN\n expect(command.toU8A()).toBe(bytes);\n });\n });\n\n describe(\"parse\", () => {\n it(\"should parse the command data correctly\", () => {\n // GIVEN\n const value = new Uint8Array([\n ...[GeneralTags.Bytes, 3, 0x01, 0x02, 0x03], // Topic\n ...[GeneralTags.Int, 2, 0x01, 0x02], // Protocol Version\n ...[GeneralTags.PublicKey, 3, 0x02, 0x04, 0x06], // Group Key\n ...[GeneralTags.Bytes, 3, 0x03, 0x05, 0x07], // Initialization Vector\n ...[GeneralTags.Bytes, 3, 0x04, 0x08, 0x10], // Encrypted xpriv\n ...[GeneralTags.PublicKey, 3, 0x0a, 0x0b, 0x0c], // Ephemeral Public Key\n ]);\n // WHEN\n const command = new LKRPCommand(\n new Uint8Array([CommandTags.Seed, value.length, ...value]),\n );\n // THEN\n expect(command.parse()).toStrictEqual(\n Right({\n type: CommandTags.Seed,\n topic: new Uint8Array([0x01, 0x02, 0x03]),\n protocolVersion: 258,\n groupKey: new Uint8Array([0x02, 0x04, 0x06]),\n initializationVector: new Uint8Array([0x03, 0x05, 0x07]),\n encryptedXpriv: new Uint8Array([0x04, 0x08, 0x10]),\n ephemeralPublicKey: new Uint8Array([0x0a, 0x0b, 0x0c]),\n }),\n );\n });\n\n it(\"should fail with invalid command bytes\", () => {\n // WHEN\n const command = new LKRPCommand(\n new Uint8Array([CommandTags.Seed, 1, ...[0x01]]),\n );\n // THEN\n expect(command.parse()).toStrictEqual(\n Left(new LKRPParsingError(\"Invalid end of TLV, expected length\")),\n );\n });\n });\n\n describe(\"getPublicKey\", () => {\n it(\"should return the public key for AddMember command\", () => {\n // GIVEN\n const addMemberValue = new Uint8Array([\n ...[GeneralTags.String, 3, 0x41, 0x42, 0x43], // Name \"ABC\"\n ...[GeneralTags.PublicKey, 3, 0x04, 0x05, 0x06], // Public Key\n ...[GeneralTags.Int, 1, 0x01], // Permissions\n ]);\n\n // WHEN\n const addMemberCmd = new LKRPCommand(\n new Uint8Array([\n CommandTags.AddMember,\n addMemberValue.length,\n ...addMemberValue,\n ]),\n );\n\n // THEN\n expect(addMemberCmd.getPublicKey()).toStrictEqual(Just(\"040506\"));\n });\n\n it(\"should return the public key for PublishKey commands\", () => {\n // GIVEN\n const publishKeyValue = new Uint8Array([\n ...[GeneralTags.Bytes, 3, 0x01, 0x02, 0x03], // Initialization Vector\n ...[GeneralTags.Bytes, 3, 0x04, 0x05, 0x06], // Encrypted xpriv\n ...[GeneralTags.PublicKey, 3, 0x07, 0x08, 0x09], // Recipient\n ...[GeneralTags.PublicKey, 3, 0x0a, 0x0b, 0x0c], // Ephemeral Public Key\n ]);\n // WHEN\n const publishKeyCmd = new LKRPCommand(\n new Uint8Array([\n CommandTags.PublishKey,\n publishKeyValue.length,\n ...publishKeyValue,\n ]),\n );\n // THEN\n expect(publishKeyCmd.getPublicKey()).toEqual(Just(\"070809\"));\n });\n\n it(\"should return undefined for other command types\", () => {\n // WHEN\n const command = new LKRPCommand(new Uint8Array([CommandTags.Seed]));\n // THEN\n expect(command.getPublicKey()).toEqual(Nothing);\n });\n });\n\n describe(\"toHuman\", () => {\n it(\"should return a string representation of the command\", () => {\n // GIVEN\n const value = new Uint8Array([\n ...[GeneralTags.Bytes, 3, 0x01, 0x02, 0x03], // Initialization Vector\n ...[GeneralTags.Bytes, 3, 0x04, 0x05, 0x06], // Encrypted xpriv\n ...[GeneralTags.PublicKey, 3, 0x07, 0x08, 0x09], // Recipient\n ...[GeneralTags.PublicKey, 3, 0x0a, 0x0b, 0x0c], // Ephemeral Public Key\n ]);\n // WHEN\n const command = new LKRPCommand(\n new Uint8Array([CommandTags.PublishKey, value.length, ...value]),\n );\n // THEN\n expect(command.toHuman()).toStrictEqual(\n Right(\n [\n `PublishKey(0x12):`,\n ` initializationVector: 010203`,\n ` encryptedXpriv: 040506`,\n ` recipient: 070809`,\n ` ephemeralPublicKey: 0a0b0c`,\n ].join(\"\\n\"),\n ),\n );\n });\n\n it(\"should fail for invalid command bytes format\", () => {\n // WHEN\n const command = new LKRPCommand(\n new Uint8Array([CommandTags.Seed, 1, ...[0x01]]),\n );\n // THEN\n expect(command.toHuman()).toStrictEqual(\n Left(new LKRPParsingError(\"Invalid end of TLV, expected length\")),\n );\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["Just", "Left", "Nothing", "Right", "LKRPParsingError", "CommandTags", "GeneralTags", "LKRPCommand", "hex", "command", "bytes", "value", "addMemberValue", "addMemberCmd", "publishKeyValue", "publishKeyCmd"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{GeneralTags as t}from"../utils/TLVTags";class d{items=[];addNull(){return this.add(t.Null,[])}addInt(r,e){const i=new DataView(new ArrayBuffer(e));switch(e){case 1:i.setUint8(0,r);break;case 2:i.setUint16(0,r);break;case 4:i.setUint32(0,r);break}return this.add(t.Int,new Uint8Array(i.buffer))}addHash(r){return this.add(t.Hash,r)}addSignature(r){return this.add(t.Signature,r)}addString(r){return this.add(t.String,new TextEncoder().encode(r))}addBytes(r){return this.add(t.Bytes,r)}addPublicKey(r){return this.add(t.PublicKey,r)}build(){return new Uint8Array(this.items.flatMap(r=>[...r]))}with(r){return r(this),this}push(r){return this.items.push(r),this}add(r,e){return this.items.push(new Uint8Array([r,e.length,...e])),this}}export{d as TLVBuilder};
1
+ import{GeneralTags as t}from"../models/Tags";class d{items=[];addNull(){return this.add(t.Null,[])}addInt(r,e){const i=new DataView(new ArrayBuffer(e));switch(e){case 1:i.setUint8(0,r);break;case 2:i.setUint16(0,r);break;case 4:i.setUint32(0,r);break}return this.add(t.Int,new Uint8Array(i.buffer))}addHash(r){return this.add(t.Hash,r)}addSignature(r){return this.add(t.Signature,r)}addString(r){return this.add(t.String,new TextEncoder().encode(r))}addBytes(r){return this.add(t.Bytes,r)}addPublicKey(r){return this.add(t.PublicKey,r)}build(){return new Uint8Array(this.items.flatMap(r=>[...r]))}with(r){return r(this),this}push(r){return this.items.push(r),this}add(r,e){return this.items.push(new Uint8Array([r,e.length,...e])),this}}export{d as TLVBuilder};
2
2
  //# sourceMappingURL=TLVBuilder.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/internal/utils/TLVBuilder.ts"],
4
- "sourcesContent": ["import { GeneralTags } from \"@internal/utils/TLVTags\";\n\nexport class TLVBuilder {\n private items: Uint8Array[] = [];\n\n addNull() {\n return this.add(GeneralTags.Null, []);\n }\n\n addInt(value: number, length: 1 | 2 | 4) {\n const view = new DataView(new ArrayBuffer(length));\n switch (length) {\n case 1:\n view.setUint8(0, value);\n break;\n case 2:\n view.setUint16(0, value);\n break;\n case 4:\n view.setUint32(0, value);\n break;\n }\n return this.add(GeneralTags.Int, new Uint8Array(view.buffer));\n }\n\n addHash(value: Uint8Array) {\n return this.add(GeneralTags.Hash, value);\n }\n\n addSignature(value: Uint8Array) {\n return this.add(GeneralTags.Signature, value);\n }\n\n addString(value: string) {\n return this.add(GeneralTags.String, new TextEncoder().encode(value));\n }\n\n addBytes(value: Uint8Array | number[]) {\n return this.add(GeneralTags.Bytes, value);\n }\n\n addPublicKey(value: Uint8Array) {\n return this.add(GeneralTags.PublicKey, value);\n }\n\n build(): Uint8Array {\n return new Uint8Array(this.items.flatMap((item) => [...item]));\n }\n\n with(fn: (builder: TLVBuilder) => void): TLVBuilder {\n fn(this);\n return this;\n }\n\n push(item: Uint8Array) {\n this.items.push(item);\n return this;\n }\n\n private add(type: number, value: Uint8Array | number[]) {\n this.items.push(new Uint8Array([type, value.length, ...value]));\n return this;\n }\n}\n"],
5
- "mappings": "AAAA,OAAS,eAAAA,MAAmB,0BAErB,MAAMC,CAAW,CACd,MAAsB,CAAC,EAE/B,SAAU,CACR,OAAO,KAAK,IAAID,EAAY,KAAM,CAAC,CAAC,CACtC,CAEA,OAAOE,EAAeC,EAAmB,CACvC,MAAMC,EAAO,IAAI,SAAS,IAAI,YAAYD,CAAM,CAAC,EACjD,OAAQA,EAAQ,CACd,IAAK,GACHC,EAAK,SAAS,EAAGF,CAAK,EACtB,MACF,IAAK,GACHE,EAAK,UAAU,EAAGF,CAAK,EACvB,MACF,IAAK,GACHE,EAAK,UAAU,EAAGF,CAAK,EACvB,KACJ,CACA,OAAO,KAAK,IAAIF,EAAY,IAAK,IAAI,WAAWI,EAAK,MAAM,CAAC,CAC9D,CAEA,QAAQF,EAAmB,CACzB,OAAO,KAAK,IAAIF,EAAY,KAAME,CAAK,CACzC,CAEA,aAAaA,EAAmB,CAC9B,OAAO,KAAK,IAAIF,EAAY,UAAWE,CAAK,CAC9C,CAEA,UAAUA,EAAe,CACvB,OAAO,KAAK,IAAIF,EAAY,OAAQ,IAAI,YAAY,EAAE,OAAOE,CAAK,CAAC,CACrE,CAEA,SAASA,EAA8B,CACrC,OAAO,KAAK,IAAIF,EAAY,MAAOE,CAAK,CAC1C,CAEA,aAAaA,EAAmB,CAC9B,OAAO,KAAK,IAAIF,EAAY,UAAWE,CAAK,CAC9C,CAEA,OAAoB,CAClB,OAAO,IAAI,WAAW,KAAK,MAAM,QAASG,GAAS,CAAC,GAAGA,CAAI,CAAC,CAAC,CAC/D,CAEA,KAAKC,EAA+C,CAClD,OAAAA,EAAG,IAAI,EACA,IACT,CAEA,KAAKD,EAAkB,CACrB,YAAK,MAAM,KAAKA,CAAI,EACb,IACT,CAEQ,IAAIE,EAAcL,EAA8B,CACtD,YAAK,MAAM,KAAK,IAAI,WAAW,CAACK,EAAML,EAAM,OAAQ,GAAGA,CAAK,CAAC,CAAC,EACvD,IACT,CACF",
4
+ "sourcesContent": ["import { GeneralTags } from \"@internal/models/Tags\";\n\nexport class TLVBuilder {\n private items: Uint8Array[] = [];\n\n addNull() {\n return this.add(GeneralTags.Null, []);\n }\n\n addInt(value: number, length: 1 | 2 | 4) {\n const view = new DataView(new ArrayBuffer(length));\n switch (length) {\n case 1:\n view.setUint8(0, value);\n break;\n case 2:\n view.setUint16(0, value);\n break;\n case 4:\n view.setUint32(0, value);\n break;\n }\n return this.add(GeneralTags.Int, new Uint8Array(view.buffer));\n }\n\n addHash(value: Uint8Array) {\n return this.add(GeneralTags.Hash, value);\n }\n\n addSignature(value: Uint8Array) {\n return this.add(GeneralTags.Signature, value);\n }\n\n addString(value: string) {\n return this.add(GeneralTags.String, new TextEncoder().encode(value));\n }\n\n addBytes(value: Uint8Array | number[]) {\n return this.add(GeneralTags.Bytes, value);\n }\n\n addPublicKey(value: Uint8Array) {\n return this.add(GeneralTags.PublicKey, value);\n }\n\n build(): Uint8Array {\n return new Uint8Array(this.items.flatMap((item) => [...item]));\n }\n\n with(fn: (builder: TLVBuilder) => void): TLVBuilder {\n fn(this);\n return this;\n }\n\n push(item: Uint8Array) {\n this.items.push(item);\n return this;\n }\n\n private add(type: number, value: Uint8Array | number[]) {\n this.items.push(new Uint8Array([type, value.length, ...value]));\n return this;\n }\n}\n"],
5
+ "mappings": "AAAA,OAAS,eAAAA,MAAmB,wBAErB,MAAMC,CAAW,CACd,MAAsB,CAAC,EAE/B,SAAU,CACR,OAAO,KAAK,IAAID,EAAY,KAAM,CAAC,CAAC,CACtC,CAEA,OAAOE,EAAeC,EAAmB,CACvC,MAAMC,EAAO,IAAI,SAAS,IAAI,YAAYD,CAAM,CAAC,EACjD,OAAQA,EAAQ,CACd,IAAK,GACHC,EAAK,SAAS,EAAGF,CAAK,EACtB,MACF,IAAK,GACHE,EAAK,UAAU,EAAGF,CAAK,EACvB,MACF,IAAK,GACHE,EAAK,UAAU,EAAGF,CAAK,EACvB,KACJ,CACA,OAAO,KAAK,IAAIF,EAAY,IAAK,IAAI,WAAWI,EAAK,MAAM,CAAC,CAC9D,CAEA,QAAQF,EAAmB,CACzB,OAAO,KAAK,IAAIF,EAAY,KAAME,CAAK,CACzC,CAEA,aAAaA,EAAmB,CAC9B,OAAO,KAAK,IAAIF,EAAY,UAAWE,CAAK,CAC9C,CAEA,UAAUA,EAAe,CACvB,OAAO,KAAK,IAAIF,EAAY,OAAQ,IAAI,YAAY,EAAE,OAAOE,CAAK,CAAC,CACrE,CAEA,SAASA,EAA8B,CACrC,OAAO,KAAK,IAAIF,EAAY,MAAOE,CAAK,CAC1C,CAEA,aAAaA,EAAmB,CAC9B,OAAO,KAAK,IAAIF,EAAY,UAAWE,CAAK,CAC9C,CAEA,OAAoB,CAClB,OAAO,IAAI,WAAW,KAAK,MAAM,QAASG,GAAS,CAAC,GAAGA,CAAI,CAAC,CAAC,CAC/D,CAEA,KAAKC,EAA+C,CAClD,OAAAA,EAAG,IAAI,EACA,IACT,CAEA,KAAKD,EAAkB,CACrB,YAAK,MAAM,KAAKA,CAAI,EACb,IACT,CAEQ,IAAIE,EAAcL,EAA8B,CACtD,YAAK,MAAM,KAAK,IAAI,WAAW,CAACK,EAAML,EAAM,OAAQ,GAAGA,CAAK,CAAC,CAAC,EACvD,IACT,CACF",
6
6
  "names": ["GeneralTags", "TLVBuilder", "value", "length", "view", "item", "fn", "type"]
7
7
  }