@ledgerhq/device-trusted-app-kit-ledger-keyring-protocol 0.0.0-multisig-20250822145545 → 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 (467) 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.map +2 -2
  6. package/lib/cjs/api/app-binder/AuthenticateDeviceActionTypes.js.map +1 -1
  7. package/lib/cjs/api/{model → app-binder}/Errors.js.map +1 -1
  8. package/lib/cjs/api/app-binder/GetAppNameCommandTypes.js +2 -0
  9. package/lib/cjs/api/app-binder/GetAppNameCommandTypes.js.map +7 -0
  10. package/lib/cjs/api/app-binder/GetSeedIdCommandTypes.js +2 -0
  11. package/lib/cjs/api/app-binder/GetSeedIdCommandTypes.js.map +7 -0
  12. package/lib/cjs/api/app-binder/GetVersionCommandTypes.js +1 -1
  13. package/lib/cjs/api/app-binder/GetVersionCommandTypes.js.map +1 -1
  14. package/lib/cjs/api/app-binder/InitCommandTypes.js +2 -0
  15. package/lib/cjs/api/app-binder/InitCommandTypes.js.map +7 -0
  16. package/lib/cjs/api/app-binder/KeypairFromBytes.js +2 -0
  17. package/lib/cjs/api/app-binder/KeypairFromBytes.js.map +7 -0
  18. package/lib/cjs/api/app-binder/LKRPTypes.js +2 -0
  19. package/lib/cjs/api/app-binder/LKRPTypes.js.map +7 -0
  20. package/lib/cjs/api/app-binder/ParseStreamBlockCommandCommandTypes.js +2 -0
  21. package/lib/cjs/api/app-binder/ParseStreamBlockCommandCommandTypes.js.map +7 -0
  22. package/lib/cjs/api/app-binder/ParseStreamBlockHeaderCommandTypes.js +2 -0
  23. package/lib/cjs/api/app-binder/ParseStreamBlockHeaderCommandTypes.js.map +7 -0
  24. package/lib/cjs/api/app-binder/ParseStreamBlockSignatureTypes.js +2 -0
  25. package/lib/cjs/api/app-binder/ParseStreamBlockSignatureTypes.js.map +7 -0
  26. package/lib/cjs/api/app-binder/SetTrustedMemberTypes.js +2 -0
  27. package/lib/cjs/api/app-binder/SetTrustedMemberTypes.js.map +7 -0
  28. package/lib/cjs/api/app-binder/SignBlockCommandTypes.js +2 -0
  29. package/lib/cjs/api/app-binder/SignBlockCommandTypes.js.map +7 -0
  30. package/lib/cjs/api/app-binder/SignBlockHeaderCommandTypes.js +2 -0
  31. package/lib/cjs/api/app-binder/SignBlockHeaderCommandTypes.js.map +7 -0
  32. package/lib/cjs/api/app-binder/SignBlockSignatureCommandTypes.js +2 -0
  33. package/lib/cjs/api/app-binder/SignBlockSignatureCommandTypes.js.map +7 -0
  34. package/lib/cjs/api/app-binder/SignBlockSingleCommandTypes.js +2 -0
  35. package/lib/cjs/api/app-binder/SignBlockSingleCommandTypes.js.map +7 -0
  36. package/lib/cjs/api/index.js +1 -1
  37. package/lib/cjs/api/index.js.map +2 -2
  38. package/lib/cjs/internal/DefaultLedgerKeyringProtocol.js +1 -1
  39. package/lib/cjs/internal/DefaultLedgerKeyringProtocol.js.map +3 -3
  40. package/lib/cjs/internal/app-binder/LedgerKeyringProtocolBinder.js +1 -1
  41. package/lib/cjs/internal/app-binder/LedgerKeyringProtocolBinder.js.map +3 -3
  42. package/lib/cjs/internal/app-binder/command/GetAppNameCommand.js +1 -1
  43. package/lib/cjs/internal/app-binder/command/GetAppNameCommand.js.map +2 -2
  44. package/lib/cjs/internal/app-binder/command/GetSeedIdCommand.js +1 -1
  45. package/lib/cjs/internal/app-binder/command/GetSeedIdCommand.js.map +3 -3
  46. package/lib/cjs/internal/app-binder/command/GetSeedIdCommand.test.js +2 -2
  47. package/lib/cjs/internal/app-binder/command/GetSeedIdCommand.test.js.map +3 -3
  48. package/lib/cjs/internal/app-binder/command/GetVersionCommand.js.map +2 -2
  49. package/lib/cjs/internal/app-binder/command/InitCommand.js +1 -1
  50. package/lib/cjs/internal/app-binder/command/InitCommand.js.map +2 -2
  51. package/lib/cjs/internal/app-binder/command/InitCommand.test.js +1 -1
  52. package/lib/cjs/internal/app-binder/command/InitCommand.test.js.map +2 -2
  53. package/lib/cjs/internal/app-binder/command/ParseBlockSignatureCommand.js +1 -1
  54. package/lib/cjs/internal/app-binder/command/ParseBlockSignatureCommand.js.map +2 -2
  55. package/lib/cjs/internal/app-binder/command/ParseBlockSignatureCommand.test.js +1 -1
  56. package/lib/cjs/internal/app-binder/command/ParseBlockSignatureCommand.test.js.map +2 -2
  57. package/lib/cjs/internal/app-binder/command/ParseStreamBlockCommand.js.map +2 -2
  58. package/lib/cjs/internal/app-binder/command/ParseStreamBlockCommand.test.js +1 -1
  59. package/lib/cjs/internal/app-binder/command/ParseStreamBlockCommand.test.js.map +2 -2
  60. package/lib/cjs/internal/app-binder/command/ParseStreamBlockHeader.js +1 -1
  61. package/lib/cjs/internal/app-binder/command/ParseStreamBlockHeader.js.map +2 -2
  62. package/lib/cjs/internal/app-binder/command/ParseStreamBlockHeader.test.js.map +2 -2
  63. package/lib/cjs/internal/app-binder/command/SetTrustedMemberCommand.js +1 -1
  64. package/lib/cjs/internal/app-binder/command/SetTrustedMemberCommand.js.map +2 -2
  65. package/lib/cjs/internal/app-binder/command/SetTrustedMemberCommand.test.js.map +2 -2
  66. package/lib/cjs/internal/app-binder/command/SignBlockHeader.js +1 -1
  67. package/lib/cjs/internal/app-binder/command/SignBlockHeader.js.map +2 -2
  68. package/lib/cjs/internal/app-binder/command/SignBlockHeader.test.js +1 -1
  69. package/lib/cjs/internal/app-binder/command/SignBlockHeader.test.js.map +2 -2
  70. package/lib/cjs/internal/app-binder/command/SignBlockSignatureCommand.js +1 -1
  71. package/lib/cjs/internal/app-binder/command/SignBlockSignatureCommand.js.map +2 -2
  72. package/lib/cjs/internal/app-binder/command/SignBlockSignatureCommand.test.js +1 -1
  73. package/lib/cjs/internal/app-binder/command/SignBlockSignatureCommand.test.js.map +2 -2
  74. package/lib/cjs/internal/app-binder/command/SignBlockSingleCommand.js +1 -1
  75. package/lib/cjs/internal/app-binder/command/SignBlockSingleCommand.js.map +2 -2
  76. package/lib/cjs/internal/app-binder/command/SignBlockSingleCommand.test.js +1 -1
  77. package/lib/cjs/internal/app-binder/command/SignBlockSingleCommand.test.js.map +2 -2
  78. package/lib/cjs/internal/app-binder/device-action/AddToTrustchainDeviceAction.js +1 -1
  79. package/lib/cjs/internal/app-binder/device-action/AddToTrustchainDeviceAction.js.map +3 -3
  80. package/lib/cjs/internal/app-binder/device-action/AuthenticateWithDeviceDeviceAction.js +1 -1
  81. package/lib/cjs/internal/app-binder/device-action/AuthenticateWithDeviceDeviceAction.js.map +2 -2
  82. package/lib/cjs/internal/app-binder/device-action/AuthenticateWithKeypairDeviceAction.js +1 -1
  83. package/lib/cjs/internal/app-binder/device-action/AuthenticateWithKeypairDeviceAction.js.map +2 -2
  84. package/lib/cjs/internal/app-binder/device-action/models/AuthenticateWithDeviceDeviceActionTypes.js +1 -1
  85. package/lib/cjs/internal/app-binder/device-action/models/AuthenticateWithDeviceDeviceActionTypes.js.map +1 -1
  86. package/lib/cjs/internal/app-binder/device-action/models/AuthenticateWithKeypairDeviceActionTypes.js +1 -1
  87. package/lib/cjs/internal/app-binder/device-action/models/AuthenticateWithKeypairDeviceActionTypes.js.map +1 -1
  88. package/lib/cjs/internal/app-binder/task/ExtractEncryptionKeyTask.js +1 -1
  89. package/lib/cjs/internal/app-binder/task/ExtractEncryptionKeyTask.js.map +3 -3
  90. package/lib/cjs/internal/app-binder/task/InitTask.js +1 -1
  91. package/lib/cjs/internal/app-binder/task/InitTask.js.map +3 -3
  92. package/lib/cjs/internal/app-binder/task/ParseStreamToDeviceTask.js +1 -1
  93. package/lib/cjs/internal/app-binder/task/ParseStreamToDeviceTask.js.map +3 -3
  94. package/lib/cjs/internal/app-binder/task/SignBlockTask.js +1 -1
  95. package/lib/cjs/internal/app-binder/task/SignBlockTask.js.map +3 -3
  96. package/lib/cjs/internal/app-binder/task/SignChallengeWithKeypairTask.js +1 -1
  97. package/lib/cjs/internal/app-binder/task/SignChallengeWithKeypairTask.js.map +3 -3
  98. package/lib/cjs/internal/app-binder/task/SignChallengeWithKeypairTask.test.js +1 -1
  99. package/lib/cjs/internal/app-binder/task/SignChallengeWithKeypairTask.test.js.map +3 -3
  100. package/lib/cjs/internal/app-binder/task/utils/TrustedProperties.js +1 -1
  101. package/lib/cjs/internal/app-binder/task/utils/TrustedProperties.js.map +2 -2
  102. package/lib/cjs/internal/di.js +1 -1
  103. package/lib/cjs/internal/di.js.map +3 -3
  104. package/lib/cjs/internal/externalTypes.js +1 -1
  105. package/lib/cjs/internal/externalTypes.js.map +2 -2
  106. package/lib/cjs/internal/lkrp-datasource/data/HttpLKRPDataSource.js +1 -1
  107. package/lib/cjs/internal/lkrp-datasource/data/HttpLKRPDataSource.js.map +2 -2
  108. package/lib/cjs/internal/lkrp-datasource/data/HttpLKRPDataSource.test.js +1 -1
  109. package/lib/cjs/internal/lkrp-datasource/data/HttpLKRPDataSource.test.js.map +2 -2
  110. package/lib/cjs/internal/lkrp-datasource/data/LKRPDataSource.js.map +1 -1
  111. package/lib/cjs/internal/use-cases/authentication/AuthenticateUseCase.js +1 -1
  112. package/lib/cjs/internal/use-cases/authentication/AuthenticateUseCase.js.map +2 -2
  113. package/lib/cjs/internal/use-cases/authentication/DecryptDataUseCase.js +1 -1
  114. package/lib/cjs/internal/use-cases/authentication/DecryptDataUseCase.js.map +3 -3
  115. package/lib/cjs/internal/use-cases/authentication/EncryptDataUseCase.js +1 -1
  116. package/lib/cjs/internal/use-cases/authentication/EncryptDataUseCase.js.map +3 -3
  117. package/lib/cjs/internal/utils/LKRPBlock.js +4 -4
  118. package/lib/cjs/internal/utils/LKRPBlock.js.map +3 -3
  119. package/lib/cjs/internal/utils/LKRPBlock.test.js +3 -3
  120. package/lib/cjs/internal/utils/LKRPBlock.test.js.map +3 -3
  121. package/lib/cjs/internal/utils/LKRPBlockStream.js +2 -2
  122. package/lib/cjs/internal/utils/LKRPBlockStream.js.map +3 -3
  123. package/lib/cjs/internal/utils/LKRPBlockStream.test.js +2 -2
  124. package/lib/cjs/internal/utils/LKRPBlockStream.test.js.map +3 -3
  125. package/lib/cjs/internal/utils/LKRPCommand.js +2 -2
  126. package/lib/cjs/internal/utils/LKRPCommand.js.map +3 -3
  127. package/lib/cjs/internal/utils/LKRPCommand.test.js +1 -1
  128. package/lib/cjs/internal/utils/LKRPCommand.test.js.map +2 -2
  129. package/lib/cjs/internal/utils/TLVBuilder.js +2 -0
  130. package/lib/cjs/internal/utils/TLVBuilder.js.map +7 -0
  131. package/lib/cjs/internal/utils/TLVParser.js +1 -1
  132. package/lib/cjs/internal/utils/TLVParser.js.map +3 -3
  133. package/lib/cjs/internal/utils/TLVParser.test.js +1 -1
  134. package/lib/cjs/internal/utils/TLVParser.test.js.map +2 -2
  135. package/lib/cjs/internal/utils/crypto.js +2 -0
  136. package/lib/cjs/internal/utils/crypto.js.map +7 -0
  137. package/lib/cjs/internal/utils/hex.js +2 -0
  138. package/lib/cjs/internal/utils/hex.js.map +7 -0
  139. package/lib/cjs/internal/utils/required.js +1 -1
  140. package/lib/cjs/internal/utils/required.js.map +2 -2
  141. package/lib/cjs/package.json +2 -2
  142. package/lib/esm/api/LedgerKeyringProtocolBuilder.js +1 -1
  143. package/lib/esm/api/LedgerKeyringProtocolBuilder.js.map +3 -3
  144. package/lib/esm/api/app-binder/AddToTrustchainDeviceActionTypes.js.map +2 -2
  145. package/lib/esm/api/app-binder/AuthenticateDeviceActionTypes.js.map +1 -1
  146. package/lib/esm/api/{model → app-binder}/Errors.js.map +1 -1
  147. package/lib/esm/api/app-binder/GetAppNameCommandTypes.js +1 -0
  148. package/lib/esm/api/app-binder/GetSeedIdCommandTypes.js +1 -0
  149. package/lib/esm/api/app-binder/GetSeedIdCommandTypes.js.map +7 -0
  150. package/lib/esm/api/app-binder/InitCommandTypes.js +1 -0
  151. package/lib/esm/api/app-binder/InitCommandTypes.js.map +7 -0
  152. package/lib/esm/api/app-binder/KeypairFromBytes.js +2 -0
  153. package/lib/esm/api/app-binder/KeypairFromBytes.js.map +7 -0
  154. package/lib/esm/api/app-binder/LKRPTypes.js +2 -0
  155. package/lib/esm/api/app-binder/LKRPTypes.js.map +7 -0
  156. package/lib/esm/api/app-binder/ParseStreamBlockCommandCommandTypes.js +1 -0
  157. package/lib/esm/api/app-binder/ParseStreamBlockCommandCommandTypes.js.map +7 -0
  158. package/lib/esm/api/app-binder/ParseStreamBlockHeaderCommandTypes.js +1 -0
  159. package/lib/esm/api/app-binder/ParseStreamBlockHeaderCommandTypes.js.map +7 -0
  160. package/lib/esm/api/app-binder/ParseStreamBlockSignatureTypes.js +1 -0
  161. package/lib/esm/api/app-binder/ParseStreamBlockSignatureTypes.js.map +7 -0
  162. package/lib/esm/api/app-binder/SetTrustedMemberTypes.js +1 -0
  163. package/lib/esm/api/app-binder/SetTrustedMemberTypes.js.map +7 -0
  164. package/lib/esm/api/app-binder/SignBlockCommandTypes.js +1 -0
  165. package/lib/esm/api/app-binder/SignBlockCommandTypes.js.map +7 -0
  166. package/lib/esm/api/app-binder/SignBlockHeaderCommandTypes.js +1 -0
  167. package/lib/esm/api/app-binder/SignBlockHeaderCommandTypes.js.map +7 -0
  168. package/lib/esm/api/app-binder/SignBlockSignatureCommandTypes.js +1 -0
  169. package/lib/esm/api/app-binder/SignBlockSignatureCommandTypes.js.map +7 -0
  170. package/lib/esm/api/app-binder/SignBlockSingleCommandTypes.js +1 -0
  171. package/lib/esm/api/app-binder/SignBlockSingleCommandTypes.js.map +7 -0
  172. package/lib/esm/api/index.js +1 -1
  173. package/lib/esm/api/index.js.map +2 -2
  174. package/lib/esm/internal/DefaultLedgerKeyringProtocol.js +1 -1
  175. package/lib/esm/internal/DefaultLedgerKeyringProtocol.js.map +3 -3
  176. package/lib/esm/internal/app-binder/LedgerKeyringProtocolBinder.js +1 -1
  177. package/lib/esm/internal/app-binder/LedgerKeyringProtocolBinder.js.map +3 -3
  178. package/lib/esm/internal/app-binder/command/GetAppNameCommand.js +1 -1
  179. package/lib/esm/internal/app-binder/command/GetAppNameCommand.js.map +2 -2
  180. package/lib/esm/internal/app-binder/command/GetSeedIdCommand.js +1 -1
  181. package/lib/esm/internal/app-binder/command/GetSeedIdCommand.js.map +3 -3
  182. package/lib/esm/internal/app-binder/command/GetSeedIdCommand.test.js +1 -1
  183. package/lib/esm/internal/app-binder/command/GetSeedIdCommand.test.js.map +3 -3
  184. package/lib/esm/internal/app-binder/command/GetVersionCommand.js.map +2 -2
  185. package/lib/esm/internal/app-binder/command/InitCommand.js +1 -1
  186. package/lib/esm/internal/app-binder/command/InitCommand.js.map +2 -2
  187. package/lib/esm/internal/app-binder/command/InitCommand.test.js +1 -1
  188. package/lib/esm/internal/app-binder/command/InitCommand.test.js.map +2 -2
  189. package/lib/esm/internal/app-binder/command/ParseBlockSignatureCommand.js +1 -1
  190. package/lib/esm/internal/app-binder/command/ParseBlockSignatureCommand.js.map +2 -2
  191. package/lib/esm/internal/app-binder/command/ParseBlockSignatureCommand.test.js +1 -1
  192. package/lib/esm/internal/app-binder/command/ParseBlockSignatureCommand.test.js.map +2 -2
  193. package/lib/esm/internal/app-binder/command/ParseStreamBlockCommand.js.map +2 -2
  194. package/lib/esm/internal/app-binder/command/ParseStreamBlockCommand.test.js +1 -1
  195. package/lib/esm/internal/app-binder/command/ParseStreamBlockCommand.test.js.map +2 -2
  196. package/lib/esm/internal/app-binder/command/ParseStreamBlockHeader.js +1 -1
  197. package/lib/esm/internal/app-binder/command/ParseStreamBlockHeader.js.map +2 -2
  198. package/lib/esm/internal/app-binder/command/ParseStreamBlockHeader.test.js.map +2 -2
  199. package/lib/esm/internal/app-binder/command/SetTrustedMemberCommand.js +1 -1
  200. package/lib/esm/internal/app-binder/command/SetTrustedMemberCommand.js.map +2 -2
  201. package/lib/esm/internal/app-binder/command/SetTrustedMemberCommand.test.js +1 -1
  202. package/lib/esm/internal/app-binder/command/SetTrustedMemberCommand.test.js.map +2 -2
  203. package/lib/esm/internal/app-binder/command/SignBlockHeader.js +1 -1
  204. package/lib/esm/internal/app-binder/command/SignBlockHeader.js.map +2 -2
  205. package/lib/esm/internal/app-binder/command/SignBlockHeader.test.js +1 -1
  206. package/lib/esm/internal/app-binder/command/SignBlockHeader.test.js.map +2 -2
  207. package/lib/esm/internal/app-binder/command/SignBlockSignatureCommand.js +1 -1
  208. package/lib/esm/internal/app-binder/command/SignBlockSignatureCommand.js.map +2 -2
  209. package/lib/esm/internal/app-binder/command/SignBlockSignatureCommand.test.js +1 -1
  210. package/lib/esm/internal/app-binder/command/SignBlockSignatureCommand.test.js.map +2 -2
  211. package/lib/esm/internal/app-binder/command/SignBlockSingleCommand.js +1 -1
  212. package/lib/esm/internal/app-binder/command/SignBlockSingleCommand.js.map +2 -2
  213. package/lib/esm/internal/app-binder/command/SignBlockSingleCommand.test.js +1 -1
  214. package/lib/esm/internal/app-binder/command/SignBlockSingleCommand.test.js.map +2 -2
  215. package/lib/esm/internal/app-binder/device-action/AddToTrustchainDeviceAction.js +1 -1
  216. package/lib/esm/internal/app-binder/device-action/AddToTrustchainDeviceAction.js.map +3 -3
  217. package/lib/esm/internal/app-binder/device-action/AuthenticateWithDeviceDeviceAction.js +1 -1
  218. package/lib/esm/internal/app-binder/device-action/AuthenticateWithDeviceDeviceAction.js.map +2 -2
  219. package/lib/esm/internal/app-binder/device-action/AuthenticateWithKeypairDeviceAction.js +1 -1
  220. package/lib/esm/internal/app-binder/device-action/AuthenticateWithKeypairDeviceAction.js.map +2 -2
  221. package/lib/esm/internal/app-binder/task/ExtractEncryptionKeyTask.js +1 -1
  222. package/lib/esm/internal/app-binder/task/ExtractEncryptionKeyTask.js.map +3 -3
  223. package/lib/esm/internal/app-binder/task/InitTask.js +1 -1
  224. package/lib/esm/internal/app-binder/task/InitTask.js.map +3 -3
  225. package/lib/esm/internal/app-binder/task/ParseStreamToDeviceTask.js +1 -1
  226. package/lib/esm/internal/app-binder/task/ParseStreamToDeviceTask.js.map +3 -3
  227. package/lib/esm/internal/app-binder/task/SignBlockTask.js +1 -1
  228. package/lib/esm/internal/app-binder/task/SignBlockTask.js.map +3 -3
  229. package/lib/esm/internal/app-binder/task/SignChallengeWithKeypairTask.js +1 -1
  230. package/lib/esm/internal/app-binder/task/SignChallengeWithKeypairTask.js.map +3 -3
  231. package/lib/esm/internal/app-binder/task/SignChallengeWithKeypairTask.test.js +1 -1
  232. package/lib/esm/internal/app-binder/task/SignChallengeWithKeypairTask.test.js.map +3 -3
  233. package/lib/esm/internal/app-binder/task/utils/TrustedProperties.js +1 -1
  234. package/lib/esm/internal/app-binder/task/utils/TrustedProperties.js.map +2 -2
  235. package/lib/esm/internal/di.js +1 -1
  236. package/lib/esm/internal/di.js.map +3 -3
  237. package/lib/esm/internal/externalTypes.js +1 -1
  238. package/lib/esm/internal/externalTypes.js.map +2 -2
  239. package/lib/esm/internal/lkrp-datasource/data/HttpLKRPDataSource.js +1 -1
  240. package/lib/esm/internal/lkrp-datasource/data/HttpLKRPDataSource.js.map +2 -2
  241. package/lib/esm/internal/lkrp-datasource/data/HttpLKRPDataSource.test.js +1 -1
  242. package/lib/esm/internal/lkrp-datasource/data/HttpLKRPDataSource.test.js.map +2 -2
  243. package/lib/esm/internal/use-cases/authentication/AuthenticateUseCase.js +1 -1
  244. package/lib/esm/internal/use-cases/authentication/AuthenticateUseCase.js.map +2 -2
  245. package/lib/esm/internal/use-cases/authentication/DecryptDataUseCase.js +1 -1
  246. package/lib/esm/internal/use-cases/authentication/DecryptDataUseCase.js.map +3 -3
  247. package/lib/esm/internal/use-cases/authentication/EncryptDataUseCase.js +1 -1
  248. package/lib/esm/internal/use-cases/authentication/EncryptDataUseCase.js.map +3 -3
  249. package/lib/esm/internal/utils/LKRPBlock.js +3 -3
  250. package/lib/esm/internal/utils/LKRPBlock.js.map +3 -3
  251. package/lib/esm/internal/utils/LKRPBlock.test.js +2 -2
  252. package/lib/esm/internal/utils/LKRPBlock.test.js.map +3 -3
  253. package/lib/esm/internal/utils/LKRPBlockStream.js +2 -2
  254. package/lib/esm/internal/utils/LKRPBlockStream.js.map +3 -3
  255. package/lib/esm/internal/utils/LKRPBlockStream.test.js +1 -1
  256. package/lib/esm/internal/utils/LKRPBlockStream.test.js.map +3 -3
  257. package/lib/esm/internal/utils/LKRPCommand.js +2 -2
  258. package/lib/esm/internal/utils/LKRPCommand.js.map +3 -3
  259. package/lib/esm/internal/utils/LKRPCommand.test.js +1 -1
  260. package/lib/esm/internal/utils/LKRPCommand.test.js.map +2 -2
  261. package/lib/esm/internal/utils/TLVBuilder.js +2 -0
  262. package/lib/esm/internal/utils/TLVBuilder.js.map +7 -0
  263. package/lib/esm/internal/utils/TLVParser.js +1 -1
  264. package/lib/esm/internal/utils/TLVParser.js.map +3 -3
  265. package/lib/esm/internal/utils/TLVParser.test.js +1 -1
  266. package/lib/esm/internal/utils/TLVParser.test.js.map +2 -2
  267. package/lib/esm/internal/utils/crypto.js +2 -0
  268. package/lib/esm/internal/utils/crypto.js.map +7 -0
  269. package/lib/esm/internal/utils/hex.js +2 -0
  270. package/lib/esm/internal/utils/hex.js.map +7 -0
  271. package/lib/esm/internal/utils/required.js +1 -1
  272. package/lib/esm/internal/utils/required.js.map +2 -2
  273. package/lib/esm/package.json +2 -2
  274. package/lib/types/api/LedgerKeyringProtocol.d.ts +2 -2
  275. package/lib/types/api/LedgerKeyringProtocol.d.ts.map +1 -1
  276. package/lib/types/api/LedgerKeyringProtocolBuilder.d.ts +1 -4
  277. package/lib/types/api/LedgerKeyringProtocolBuilder.d.ts.map +1 -1
  278. package/lib/types/api/app-binder/AddToTrustchainDeviceActionTypes.d.ts +4 -8
  279. package/lib/types/api/app-binder/AddToTrustchainDeviceActionTypes.d.ts.map +1 -1
  280. package/lib/types/api/app-binder/AuthenticateDeviceActionTypes.d.ts +2 -2
  281. package/lib/types/api/app-binder/AuthenticateDeviceActionTypes.d.ts.map +1 -1
  282. package/lib/types/api/app-binder/Errors.d.ts.map +1 -0
  283. package/lib/types/api/app-binder/GetAppNameCommandTypes.d.ts +5 -0
  284. package/lib/types/api/app-binder/GetAppNameCommandTypes.d.ts.map +1 -0
  285. package/lib/types/api/app-binder/GetSeedIdCommandTypes.d.ts +14 -0
  286. package/lib/types/api/app-binder/GetSeedIdCommandTypes.d.ts.map +1 -0
  287. package/lib/types/api/app-binder/GetVersionCommandTypes.d.ts +1 -0
  288. package/lib/types/api/app-binder/GetVersionCommandTypes.d.ts.map +1 -1
  289. package/lib/types/api/app-binder/InitCommandTypes.d.ts +5 -0
  290. package/lib/types/api/app-binder/InitCommandTypes.d.ts.map +1 -0
  291. package/lib/types/api/app-binder/KeypairFromBytes.d.ts +11 -0
  292. package/lib/types/api/app-binder/KeypairFromBytes.d.ts.map +1 -0
  293. package/lib/types/api/{model/Permissions.d.ts → app-binder/LKRPTypes.d.ts} +19 -1
  294. package/lib/types/api/app-binder/LKRPTypes.d.ts.map +1 -0
  295. package/lib/types/api/app-binder/ParseStreamBlockCommandCommandTypes.d.ts +6 -0
  296. package/lib/types/api/app-binder/ParseStreamBlockCommandCommandTypes.d.ts.map +1 -0
  297. package/lib/types/api/app-binder/ParseStreamBlockHeaderCommandTypes.d.ts +5 -0
  298. package/lib/types/api/app-binder/ParseStreamBlockHeaderCommandTypes.d.ts.map +1 -0
  299. package/lib/types/api/app-binder/ParseStreamBlockSignatureTypes.d.ts +5 -0
  300. package/lib/types/api/app-binder/ParseStreamBlockSignatureTypes.d.ts.map +1 -0
  301. package/lib/types/api/app-binder/SetTrustedMemberTypes.d.ts +6 -0
  302. package/lib/types/api/app-binder/SetTrustedMemberTypes.d.ts.map +1 -0
  303. package/lib/types/api/app-binder/SignBlockCommandTypes.d.ts +9 -0
  304. package/lib/types/api/app-binder/SignBlockCommandTypes.d.ts.map +1 -0
  305. package/lib/types/api/app-binder/SignBlockHeaderCommandTypes.d.ts +6 -0
  306. package/lib/types/api/app-binder/SignBlockHeaderCommandTypes.d.ts.map +1 -0
  307. package/lib/types/api/app-binder/SignBlockSignatureCommandTypes.d.ts +6 -0
  308. package/lib/types/api/app-binder/SignBlockSignatureCommandTypes.d.ts.map +1 -0
  309. package/lib/types/api/app-binder/SignBlockSingleCommandTypes.d.ts +5 -0
  310. package/lib/types/api/app-binder/SignBlockSingleCommandTypes.d.ts.map +1 -0
  311. package/lib/types/api/index.d.ts +2 -10
  312. package/lib/types/api/index.d.ts.map +1 -1
  313. package/lib/types/internal/DefaultLedgerKeyringProtocol.d.ts +4 -6
  314. package/lib/types/internal/DefaultLedgerKeyringProtocol.d.ts.map +1 -1
  315. package/lib/types/internal/app-binder/LedgerKeyringProtocolBinder.d.ts +4 -7
  316. package/lib/types/internal/app-binder/LedgerKeyringProtocolBinder.d.ts.map +1 -1
  317. package/lib/types/internal/app-binder/command/GetAppNameCommand.d.ts +1 -4
  318. package/lib/types/internal/app-binder/command/GetAppNameCommand.d.ts.map +1 -1
  319. package/lib/types/internal/app-binder/command/GetSeedIdCommand.d.ts +1 -13
  320. package/lib/types/internal/app-binder/command/GetSeedIdCommand.d.ts.map +1 -1
  321. package/lib/types/internal/app-binder/command/GetVersionCommand.d.ts +1 -2
  322. package/lib/types/internal/app-binder/command/GetVersionCommand.d.ts.map +1 -1
  323. package/lib/types/internal/app-binder/command/InitCommand.d.ts +1 -4
  324. package/lib/types/internal/app-binder/command/InitCommand.d.ts.map +1 -1
  325. package/lib/types/internal/app-binder/command/ParseBlockSignatureCommand.d.ts +1 -4
  326. package/lib/types/internal/app-binder/command/ParseBlockSignatureCommand.d.ts.map +1 -1
  327. package/lib/types/internal/app-binder/command/ParseStreamBlockCommand.d.ts +1 -5
  328. package/lib/types/internal/app-binder/command/ParseStreamBlockCommand.d.ts.map +1 -1
  329. package/lib/types/internal/app-binder/command/ParseStreamBlockHeader.d.ts +1 -4
  330. package/lib/types/internal/app-binder/command/ParseStreamBlockHeader.d.ts.map +1 -1
  331. package/lib/types/internal/app-binder/command/SetTrustedMemberCommand.d.ts +1 -5
  332. package/lib/types/internal/app-binder/command/SetTrustedMemberCommand.d.ts.map +1 -1
  333. package/lib/types/internal/app-binder/command/SignBlockHeader.d.ts +1 -5
  334. package/lib/types/internal/app-binder/command/SignBlockHeader.d.ts.map +1 -1
  335. package/lib/types/internal/app-binder/command/SignBlockSignatureCommand.d.ts +1 -5
  336. package/lib/types/internal/app-binder/command/SignBlockSignatureCommand.d.ts.map +1 -1
  337. package/lib/types/internal/app-binder/command/SignBlockSingleCommand.d.ts +1 -4
  338. package/lib/types/internal/app-binder/command/SignBlockSingleCommand.d.ts.map +1 -1
  339. package/lib/types/internal/app-binder/device-action/AddToTrustchainDeviceAction.d.ts +4 -8
  340. package/lib/types/internal/app-binder/device-action/AddToTrustchainDeviceAction.d.ts.map +1 -1
  341. package/lib/types/internal/app-binder/device-action/AuthenticateWithDeviceDeviceAction.d.ts +2 -5
  342. package/lib/types/internal/app-binder/device-action/AuthenticateWithDeviceDeviceAction.d.ts.map +1 -1
  343. package/lib/types/internal/app-binder/device-action/AuthenticateWithKeypairDeviceAction.d.ts +2 -5
  344. package/lib/types/internal/app-binder/device-action/AuthenticateWithKeypairDeviceAction.d.ts.map +1 -1
  345. package/lib/types/internal/app-binder/device-action/models/AuthenticateWithDeviceDeviceActionTypes.d.ts +2 -5
  346. package/lib/types/internal/app-binder/device-action/models/AuthenticateWithDeviceDeviceActionTypes.d.ts.map +1 -1
  347. package/lib/types/internal/app-binder/device-action/models/AuthenticateWithKeypairDeviceActionTypes.d.ts +2 -5
  348. package/lib/types/internal/app-binder/device-action/models/AuthenticateWithKeypairDeviceActionTypes.d.ts.map +1 -1
  349. package/lib/types/internal/app-binder/task/ExtractEncryptionKeyTask.d.ts +7 -4
  350. package/lib/types/internal/app-binder/task/ExtractEncryptionKeyTask.d.ts.map +1 -1
  351. package/lib/types/internal/app-binder/task/InitTask.d.ts +3 -5
  352. package/lib/types/internal/app-binder/task/InitTask.d.ts.map +1 -1
  353. package/lib/types/internal/app-binder/task/ParseStreamToDeviceTask.d.ts +1 -1
  354. package/lib/types/internal/app-binder/task/ParseStreamToDeviceTask.d.ts.map +1 -1
  355. package/lib/types/internal/app-binder/task/SignBlockTask.d.ts +8 -11
  356. package/lib/types/internal/app-binder/task/SignBlockTask.d.ts.map +1 -1
  357. package/lib/types/internal/app-binder/task/SignChallengeWithKeypairTask.d.ts +3 -5
  358. package/lib/types/internal/app-binder/task/SignChallengeWithKeypairTask.d.ts.map +1 -1
  359. package/lib/types/internal/app-binder/task/utils/TrustedProperties.d.ts +1 -1
  360. package/lib/types/internal/app-binder/task/utils/TrustedProperties.d.ts.map +1 -1
  361. package/lib/types/internal/di.d.ts +1 -3
  362. package/lib/types/internal/di.d.ts.map +1 -1
  363. package/lib/types/internal/externalTypes.d.ts +0 -1
  364. package/lib/types/internal/externalTypes.d.ts.map +1 -1
  365. package/lib/types/internal/lkrp-datasource/data/HttpLKRPDataSource.d.ts +2 -2
  366. package/lib/types/internal/lkrp-datasource/data/HttpLKRPDataSource.d.ts.map +1 -1
  367. package/lib/types/internal/lkrp-datasource/data/LKRPDataSource.d.ts +2 -2
  368. package/lib/types/internal/lkrp-datasource/data/LKRPDataSource.d.ts.map +1 -1
  369. package/lib/types/internal/use-cases/authentication/AuthenticateUseCase.d.ts +2 -3
  370. package/lib/types/internal/use-cases/authentication/AuthenticateUseCase.d.ts.map +1 -1
  371. package/lib/types/internal/use-cases/authentication/DecryptDataUseCase.d.ts +1 -4
  372. package/lib/types/internal/use-cases/authentication/DecryptDataUseCase.d.ts.map +1 -1
  373. package/lib/types/internal/use-cases/authentication/EncryptDataUseCase.d.ts +1 -4
  374. package/lib/types/internal/use-cases/authentication/EncryptDataUseCase.d.ts.map +1 -1
  375. package/lib/types/internal/utils/LKRPBlock.d.ts +1 -1
  376. package/lib/types/internal/utils/LKRPBlock.d.ts.map +1 -1
  377. package/lib/types/internal/utils/LKRPBlockStream.d.ts +3 -4
  378. package/lib/types/internal/utils/LKRPBlockStream.d.ts.map +1 -1
  379. package/lib/types/internal/utils/LKRPCommand.d.ts +1 -1
  380. package/lib/types/internal/utils/LKRPCommand.d.ts.map +1 -1
  381. package/lib/types/internal/utils/TLVBuilder.d.ts +15 -0
  382. package/lib/types/internal/utils/TLVBuilder.d.ts.map +1 -0
  383. package/lib/types/internal/utils/TLVParser.d.ts +1 -1
  384. package/lib/types/internal/utils/TLVParser.d.ts.map +1 -1
  385. package/lib/types/internal/utils/crypto.d.ts +19 -0
  386. package/lib/types/internal/utils/crypto.d.ts.map +1 -0
  387. package/lib/types/internal/utils/hex.d.ts +3 -0
  388. package/lib/types/internal/utils/hex.d.ts.map +1 -0
  389. package/lib/types/internal/utils/required.d.ts +1 -1
  390. package/lib/types/internal/utils/required.d.ts.map +1 -1
  391. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  392. package/package.json +5 -5
  393. package/lib/cjs/api/crypto/CryptoService.js +0 -2
  394. package/lib/cjs/api/crypto/CryptoService.js.map +0 -7
  395. package/lib/cjs/api/crypto/Key.js +0 -2
  396. package/lib/cjs/api/crypto/Key.js.map +0 -7
  397. package/lib/cjs/api/crypto/KeyPair.js +0 -2
  398. package/lib/cjs/api/crypto/KeyPair.js.map +0 -7
  399. package/lib/cjs/api/crypto/noble/NobleCryptoService.js +0 -2
  400. package/lib/cjs/api/crypto/noble/NobleCryptoService.js.map +0 -7
  401. package/lib/cjs/api/crypto/noble/NobleCryptoService.test.js +0 -2
  402. package/lib/cjs/api/crypto/noble/NobleCryptoService.test.js.map +0 -7
  403. package/lib/cjs/api/crypto/noble/NobleKey.js +0 -2
  404. package/lib/cjs/api/crypto/noble/NobleKey.js.map +0 -7
  405. package/lib/cjs/api/crypto/noble/NobleKey.test.js +0 -2
  406. package/lib/cjs/api/crypto/noble/NobleKey.test.js.map +0 -7
  407. package/lib/cjs/api/crypto/noble/NobleKeyPair.js +0 -2
  408. package/lib/cjs/api/crypto/noble/NobleKeyPair.js.map +0 -7
  409. package/lib/cjs/api/crypto/noble/NobleKeyPair.test.js +0 -2
  410. package/lib/cjs/api/crypto/noble/NobleKeyPair.test.js.map +0 -7
  411. package/lib/cjs/api/model/Env.js +0 -2
  412. package/lib/cjs/api/model/Env.js.map +0 -7
  413. package/lib/cjs/api/model/JWT.js +0 -2
  414. package/lib/cjs/api/model/JWT.js.map +0 -7
  415. package/lib/cjs/api/model/Permissions.js +0 -2
  416. package/lib/cjs/api/model/Permissions.js.map +0 -7
  417. package/lib/esm/api/crypto/CryptoService.js +0 -2
  418. package/lib/esm/api/crypto/CryptoService.js.map +0 -7
  419. package/lib/esm/api/crypto/Key.js +0 -2
  420. package/lib/esm/api/crypto/Key.js.map +0 -7
  421. package/lib/esm/api/crypto/KeyPair.js +0 -2
  422. package/lib/esm/api/crypto/KeyPair.js.map +0 -7
  423. package/lib/esm/api/crypto/noble/NobleCryptoService.js +0 -2
  424. package/lib/esm/api/crypto/noble/NobleCryptoService.js.map +0 -7
  425. package/lib/esm/api/crypto/noble/NobleCryptoService.test.js +0 -2
  426. package/lib/esm/api/crypto/noble/NobleCryptoService.test.js.map +0 -7
  427. package/lib/esm/api/crypto/noble/NobleKey.js +0 -2
  428. package/lib/esm/api/crypto/noble/NobleKey.js.map +0 -7
  429. package/lib/esm/api/crypto/noble/NobleKey.test.js +0 -2
  430. package/lib/esm/api/crypto/noble/NobleKey.test.js.map +0 -7
  431. package/lib/esm/api/crypto/noble/NobleKeyPair.js +0 -2
  432. package/lib/esm/api/crypto/noble/NobleKeyPair.js.map +0 -7
  433. package/lib/esm/api/crypto/noble/NobleKeyPair.test.js +0 -2
  434. package/lib/esm/api/crypto/noble/NobleKeyPair.test.js.map +0 -7
  435. package/lib/esm/api/model/Env.js +0 -2
  436. package/lib/esm/api/model/Env.js.map +0 -7
  437. package/lib/esm/api/model/JWT.js +0 -1
  438. package/lib/esm/api/model/Permissions.js +0 -2
  439. package/lib/esm/api/model/Permissions.js.map +0 -7
  440. package/lib/types/api/crypto/CryptoService.d.ts +0 -22
  441. package/lib/types/api/crypto/CryptoService.d.ts.map +0 -1
  442. package/lib/types/api/crypto/Key.d.ts +0 -7
  443. package/lib/types/api/crypto/Key.d.ts.map +0 -1
  444. package/lib/types/api/crypto/KeyPair.d.ts +0 -12
  445. package/lib/types/api/crypto/KeyPair.d.ts.map +0 -1
  446. package/lib/types/api/crypto/noble/NobleCryptoService.d.ts +0 -13
  447. package/lib/types/api/crypto/noble/NobleCryptoService.d.ts.map +0 -1
  448. package/lib/types/api/crypto/noble/NobleCryptoService.test.d.ts +0 -2
  449. package/lib/types/api/crypto/noble/NobleCryptoService.test.d.ts.map +0 -1
  450. package/lib/types/api/crypto/noble/NobleKey.d.ts +0 -11
  451. package/lib/types/api/crypto/noble/NobleKey.d.ts.map +0 -1
  452. package/lib/types/api/crypto/noble/NobleKey.test.d.ts +0 -2
  453. package/lib/types/api/crypto/noble/NobleKey.test.d.ts.map +0 -1
  454. package/lib/types/api/crypto/noble/NobleKeyPair.d.ts +0 -17
  455. package/lib/types/api/crypto/noble/NobleKeyPair.d.ts.map +0 -1
  456. package/lib/types/api/crypto/noble/NobleKeyPair.test.d.ts +0 -2
  457. package/lib/types/api/crypto/noble/NobleKeyPair.test.d.ts.map +0 -1
  458. package/lib/types/api/model/Env.d.ts +0 -5
  459. package/lib/types/api/model/Env.d.ts.map +0 -1
  460. package/lib/types/api/model/Errors.d.ts.map +0 -1
  461. package/lib/types/api/model/JWT.d.ts +0 -9
  462. package/lib/types/api/model/JWT.d.ts.map +0 -1
  463. package/lib/types/api/model/Permissions.d.ts.map +0 -1
  464. /package/lib/cjs/api/{model → app-binder}/Errors.js +0 -0
  465. /package/lib/esm/api/{model → app-binder}/Errors.js +0 -0
  466. /package/lib/esm/api/{model/JWT.js.map → app-binder/GetAppNameCommandTypes.js.map} +0 -0
  467. /package/lib/types/api/{model → app-binder}/Errors.d.ts +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/lkrp-datasource/data/HttpLKRPDataSource.ts"],
4
- "sourcesContent": ["import { inject, injectable } from \"inversify\";\nimport { EitherAsync, Just, Left, Maybe, Nothing, Right } from \"purify-ts\";\n\nimport {\n LKRPDataSourceError,\n LKRPDataSourceErrorStatus,\n} from \"@api/model/Errors\";\nimport { JWT } from \"@api/model/JWT\";\nimport { lkrpDatasourceTypes } from \"@internal/lkrp-datasource/di/lkrpDatasourceTypes\";\nimport { LKRPBlock } from \"@internal/utils/LKRPBlock\";\nimport { Trustchain } from \"@internal/utils/Trustchain\";\n\nimport {\n AuthenticationPayload,\n Challenge,\n LKRPDataSource,\n} from \"./LKRPDataSource\";\n\n@injectable()\nexport class HttpLKRPDataSource implements LKRPDataSource {\n constructor(\n @inject(lkrpDatasourceTypes.BaseUrl) private readonly baseUrl: string,\n ) {}\n\n getChallenge() {\n return this.request<Challenge>(\"/challenge\", Nothing);\n }\n\n authenticate(payload: AuthenticationPayload) {\n return this.request<JWT>(\"/authenticate\", Nothing, {\n method: \"POST\",\n body: JSON.stringify(payload),\n }).map((jwt) => ({\n jwt,\n trustchainId: Maybe.fromNullable(\n Object.keys(jwt.permissions).find((id) =>\n Boolean(jwt.permissions[id]?.[\"m/\"]),\n ),\n ),\n }));\n }\n\n getTrustchainById(id: string, jwt: JWT) {\n return this.request<{ [path: string]: string }>(\n `/trustchain/${id}`,\n Just(jwt),\n ).map((serialized) => new Trustchain(id, serialized));\n }\n\n postDerivation(id: string, block: LKRPBlock, jwt: JWT) {\n return this.request<void>(`/trustchain/${id}/derivation`, Just(jwt), {\n method: \"POST\",\n body: JSON.stringify(block.toString()),\n });\n }\n\n putCommands(id: string, path: string, block: LKRPBlock, jwt: JWT) {\n return this.request<void>(`/trustchain/${id}/commands`, Just(jwt), {\n method: \"PUT\",\n body: JSON.stringify({ path, blocks: [block.toString()] }),\n });\n }\n\n private request<Res>(\n endpoint: `/${string}`,\n jwt: Maybe<{ access_token: string }>,\n init?: RequestInit,\n ): EitherAsync<LKRPDataSourceError, Res> {\n const href = this.baseUrl + endpoint;\n const headers = {\n ...init?.headers,\n \"Content-Type\": \"application/json\",\n ...jwt.mapOrDefault<{ Authorization?: string }>(\n ({ access_token }) => ({ Authorization: `Bearer ${access_token}` }),\n {},\n ),\n };\n\n return EitherAsync(() => fetch(href, { ...init, headers }))\n .mapLeft((err) => ({\n status: \"UNKNOWN\" as const,\n message: errToString(err),\n }))\n .chain(async (response) => {\n switch (response.status) {\n case 204:\n return Right(undefined as Res);\n\n default:\n return EitherAsync(() => response.json())\n .mapLeft(errToString)\n .map((data) =>\n response.ok ? Right(data as Res) : Left(errToString(data)),\n )\n .chain(EitherAsync.liftEither)\n .mapLeft((message) => ({\n status: statusMap.get(response.status) ?? \"UNKNOWN\",\n message: `[${response.status}] ${message || response.statusText}`,\n }));\n }\n })\n .mapLeft(\n ({ status, message }) =>\n new LKRPDataSourceError({\n status,\n message: `${message || \"Unknown error\"} (from: ${href})`,\n }),\n );\n }\n}\n\nconst statusMap = new Map<unknown, LKRPDataSourceErrorStatus>([\n [400, \"BAD_REQUEST\"],\n [401, \"UNAUTHORIZED\"],\n]);\n\nfunction errToString(error: unknown): string | void {\n if (!error) return undefined;\n if (typeof error !== \"object\") return String(error);\n if (error.toString !== {}.toString) return String(error);\n if (\"message\" in error) return String(error.message);\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { inject, injectable } from \"inversify\";\nimport { EitherAsync, Just, Left, Maybe, Nothing, Right } from \"purify-ts\";\n\nimport {\n LKRPDataSourceError,\n LKRPDataSourceErrorStatus,\n} from \"@api/app-binder/Errors\";\nimport { JWT } from \"@api/app-binder/LKRPTypes\";\nimport { lkrpDatasourceTypes } from \"@internal/lkrp-datasource/di/lkrpDatasourceTypes\";\nimport { LKRPBlock } from \"@internal/utils/LKRPBlock\";\nimport { Trustchain } from \"@internal/utils/Trustchain\";\n\nimport {\n AuthenticationPayload,\n Challenge,\n LKRPDataSource,\n} from \"./LKRPDataSource\";\n\n@injectable()\nexport class HttpLKRPDataSource implements LKRPDataSource {\n constructor(\n @inject(lkrpDatasourceTypes.BaseUrl) private readonly baseUrl: string,\n ) {}\n\n getChallenge() {\n return this.request<Challenge>(\"/challenge\", Nothing);\n }\n\n authenticate(payload: AuthenticationPayload) {\n return this.request<JWT>(\"/authenticate\", Nothing, {\n method: \"POST\",\n body: JSON.stringify(payload),\n }).map((jwt) => ({\n jwt,\n trustchainId: Maybe.fromNullable(\n Object.keys(jwt.permissions).find((id) =>\n Boolean(jwt.permissions[id]?.[\"m/\"]),\n ),\n ),\n }));\n }\n\n getTrustchainById(id: string, jwt: JWT) {\n return this.request<{ [path: string]: string }>(\n `/trustchain/${id}`,\n Just(jwt),\n ).map((serialized) => new Trustchain(id, serialized));\n }\n\n postDerivation(id: string, block: LKRPBlock, jwt: JWT) {\n return this.request<void>(`/trustchain/${id}/derivation`, Just(jwt), {\n method: \"POST\",\n body: JSON.stringify(block.toString()),\n });\n }\n\n putCommands(id: string, path: string, block: LKRPBlock, jwt: JWT) {\n return this.request<void>(`/trustchain/${id}/commands`, Just(jwt), {\n method: \"PUT\",\n body: JSON.stringify({ path, blocks: [block.toString()] }),\n });\n }\n\n private request<Res>(\n endpoint: `/${string}`,\n jwt: Maybe<{ access_token: string }>,\n init?: RequestInit,\n ): EitherAsync<LKRPDataSourceError, Res> {\n const href = this.baseUrl + endpoint;\n const headers = {\n ...init?.headers,\n \"Content-Type\": \"application/json\",\n ...jwt.mapOrDefault<{ Authorization?: string }>(\n ({ access_token }) => ({ Authorization: `Bearer ${access_token}` }),\n {},\n ),\n };\n\n return EitherAsync(() => fetch(href, { ...init, headers }))\n .mapLeft((err) => ({\n status: \"UNKNOWN\" as const,\n message: errToString(err),\n }))\n .chain(async (response) => {\n switch (response.status) {\n case 204:\n return Right(undefined as Res);\n\n default:\n return EitherAsync(() => response.json())\n .mapLeft(errToString)\n .map((data) =>\n response.ok ? Right(data as Res) : Left(errToString(data)),\n )\n .chain(EitherAsync.liftEither)\n .mapLeft((message) => ({\n status: statusMap.get(response.status) ?? \"UNKNOWN\",\n message: `[${response.status}] ${message || response.statusText}`,\n }));\n }\n })\n .mapLeft(\n ({ status, message }) =>\n new LKRPDataSourceError({\n status,\n message: `${message || \"Unknown error\"} (from: ${href})`,\n }),\n );\n }\n}\n\nconst statusMap = new Map<unknown, LKRPDataSourceErrorStatus>([\n [400, \"BAD_REQUEST\"],\n [401, \"UNAUTHORIZED\"],\n]);\n\nfunction errToString(error: unknown): string | void {\n if (!error) return undefined;\n if (typeof error !== \"object\") return String(error);\n if (error.toString !== {}.toString) return String(error);\n if (\"message\" in error) return String(error.message);\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["inject", "injectable", "EitherAsync", "Just", "Left", "Maybe", "Nothing", "Right", "LKRPDataSourceError", "lkrpDatasourceTypes", "Trustchain", "HttpLKRPDataSource", "baseUrl", "Nothing", "payload", "jwt", "Maybe", "id", "Just", "serialized", "Trustchain", "block", "path", "endpoint", "init", "href", "headers", "access_token", "EitherAsync", "err", "errToString", "response", "Right", "data", "Left", "message", "statusMap", "status", "LKRPDataSourceError", "__decorateClass", "injectable", "__decorateParam", "inject", "lkrpDatasourceTypes", "error"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{Just as p,Left as d,Nothing as b,Right as r}from"purify-ts";import{LKRPDataSourceError as h}from"../../../api/model/Errors";import{LKRPBlock as m}from"../../utils/LKRPBlock";import{Trustchain as S}from"../../utils/Trustchain";import{HttpLKRPDataSource as c}from"./HttpLKRPDataSource";const n={access_token:"ACCESS TOKEN",permissions:{TRUSTCHAIN_ID:{"m/":["owner"]}}},i={version:0,challenge:{data:"1010101010010101010",expiry:"2025-06-30T10:00:00Z"},host:"example.com",rp:[{credential:{version:0,curveId:33,signAlgorithm:1,publicKey:"aaaaaaaaaaaaaaaaaaaaaaaaaa"},signature:"abababababababab"}],protocolVersion:{major:1,minor:0,patch:0}},u={credential:{version:0,curveId:33,signAlgorithm:1,publicKey:"bbbbbbbbbbbbbbbbbbbbbbbbbbb"},signature:"acacacacacacacac",attestation:"0000000000000000"};describe("HttpLKRPDataSource",()=>{const a=vi.spyOn(global,"fetch"),t="https://example.com";afterEach(()=>{a.mockClear()}),describe("getChallenge",()=>{it("should fetch challenge successfully",async()=>{const e={tlv:"0f1234567890",json:i};a.mockResolvedValueOnce({ok:!0,json:()=>Promise.resolve(e)});const s=await new c(t).getChallenge();expect(a).toHaveBeenCalledWith(`${t}/challenge`,{headers:{"Content-Type":"application/json"}}),expect(s).toEqual(r(e))}),it("should handle fetch error",async()=>{const e={status:"UNKNOWN",message:"Random error"};a.mockRejectedValueOnce(e);const s=await new c(t).getChallenge();expect(s).toEqual(d(new h({status:"UNKNOWN",message:`Random error (from: ${t}/challenge)`})))})}),describe("authenticate",()=>{it("should fetch a JWT when the authentication is successful",async()=>{a.mockResolvedValueOnce({ok:!0,json:()=>Promise.resolve(n)});const o=await new c(t).authenticate({challenge:i,signature:u});expect(a).toHaveBeenCalledWith(`${t}/authenticate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({challenge:i,signature:u})}),expect(o).toEqual(r({jwt:n,trustchainId:p("TRUSTCHAIN_ID")}))}),it("should return no trustchainId the returned JWT does not contain one",async()=>{const e={access_token:"ACCESS TOKEN",permissions:{}};a.mockResolvedValueOnce({ok:!0,json:()=>Promise.resolve(e)});const s=await new c(t).authenticate({challenge:i,signature:u});expect(s).toEqual(r({jwt:e,trustchainId:b}))}),it("should handle authentication error",async()=>{a.mockResolvedValueOnce({ok:!1,status:401,statusText:"Unauthorized",json:()=>Promise.resolve({message:"Unauthorized access"})});const o=await new c(t).authenticate({challenge:i,signature:u});expect(o).toEqual(d(new h({status:"UNAUTHORIZED",message:`[401] Unauthorized access (from: ${t}/authenticate)`})))})}),describe("getTrustchainById",()=>{it("should fetch trustchain by ID successfully",async()=>{const e={"m/":"0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1e1d","m/16'":"1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b"};a.mockResolvedValueOnce({ok:!0,json:()=>Promise.resolve(e)});const s=await new c(t).getTrustchainById("TRUSTCHAIN_ID",n);expect(a).toHaveBeenCalledWith(`${t}/trustchain/TRUSTCHAIN_ID`,{headers:{"Content-Type":"application/json",Authorization:`Bearer ${n.access_token}`}}),expect(s).toEqual(r(new S("TRUSTCHAIN_ID",e)))}),it("should handle errors",async()=>{a.mockResolvedValueOnce({ok:!1,status:500,statusText:"Internal Server Error",json:()=>Promise.resolve({})});const o=await new c(t).getTrustchainById("TRUSTCHAIN_ID",n);expect(o).toEqual(d(new h({status:"UNKNOWN",message:`[500] Internal Server Error (from: ${t}/trustchain/TRUSTCHAIN_ID)`})))})}),describe("postDerivation",()=>{it("should post derivation successfully",async()=>{const e="0102030405060708090a0b0c0d0e0f",o=m.fromHex(e);a.mockResolvedValueOnce({ok:!0,status:204});const l=await new c(t).postDerivation("TRUSTCHAIN_ID",o,n);expect(a).toHaveBeenCalledWith(`${t}/trustchain/TRUSTCHAIN_ID/derivation`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n.access_token}`},body:JSON.stringify(e)}),expect(l).toEqual(r(void 0))})}),describe("putCommands",()=>{it("should put commands successfully",async()=>{const e="0102030405060708090a0b0c0d0e0f",o=m.fromHex(e);a.mockResolvedValueOnce({ok:!0,status:204});const l=await new c(t).putCommands("TRUSTCHAIN_ID","m/0'/16'/0'",o,n);expect(a).toHaveBeenCalledWith(`${t}/trustchain/TRUSTCHAIN_ID/commands`,{method:"PUT",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n.access_token}`},body:JSON.stringify({path:"m/0'/16'/0'",blocks:[e]})}),expect(l).toEqual(r(void 0))})})});
1
+ import{Just as p,Left as d,Nothing as b,Right as r}from"purify-ts";import{LKRPDataSourceError as h}from"../../../api/app-binder/Errors";import{LKRPBlock as m}from"../../utils/LKRPBlock";import{Trustchain as S}from"../../utils/Trustchain";import{HttpLKRPDataSource as c}from"./HttpLKRPDataSource";const n={access_token:"ACCESS TOKEN",permissions:{TRUSTCHAIN_ID:{"m/":["owner"]}}},i={version:0,challenge:{data:"1010101010010101010",expiry:"2025-06-30T10:00:00Z"},host:"example.com",rp:[{credential:{version:0,curveId:33,signAlgorithm:1,publicKey:"aaaaaaaaaaaaaaaaaaaaaaaaaa"},signature:"abababababababab"}],protocolVersion:{major:1,minor:0,patch:0}},u={credential:{version:0,curveId:33,signAlgorithm:1,publicKey:"bbbbbbbbbbbbbbbbbbbbbbbbbbb"},signature:"acacacacacacacac",attestation:"0000000000000000"};describe("HttpLKRPDataSource",()=>{const a=vi.spyOn(global,"fetch"),t="https://example.com";afterEach(()=>{a.mockClear()}),describe("getChallenge",()=>{it("should fetch challenge successfully",async()=>{const e={tlv:"0f1234567890",json:i};a.mockResolvedValueOnce({ok:!0,json:()=>Promise.resolve(e)});const s=await new c(t).getChallenge();expect(a).toHaveBeenCalledWith(`${t}/challenge`,{headers:{"Content-Type":"application/json"}}),expect(s).toEqual(r(e))}),it("should handle fetch error",async()=>{const e={status:"UNKNOWN",message:"Random error"};a.mockRejectedValueOnce(e);const s=await new c(t).getChallenge();expect(s).toEqual(d(new h({status:"UNKNOWN",message:`Random error (from: ${t}/challenge)`})))})}),describe("authenticate",()=>{it("should fetch a JWT when the authentication is successful",async()=>{a.mockResolvedValueOnce({ok:!0,json:()=>Promise.resolve(n)});const o=await new c(t).authenticate({challenge:i,signature:u});expect(a).toHaveBeenCalledWith(`${t}/authenticate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({challenge:i,signature:u})}),expect(o).toEqual(r({jwt:n,trustchainId:p("TRUSTCHAIN_ID")}))}),it("should return no trustchainId the returned JWT does not contain one",async()=>{const e={access_token:"ACCESS TOKEN",permissions:{}};a.mockResolvedValueOnce({ok:!0,json:()=>Promise.resolve(e)});const s=await new c(t).authenticate({challenge:i,signature:u});expect(s).toEqual(r({jwt:e,trustchainId:b}))}),it("should handle authentication error",async()=>{a.mockResolvedValueOnce({ok:!1,status:401,statusText:"Unauthorized",json:()=>Promise.resolve({message:"Unauthorized access"})});const o=await new c(t).authenticate({challenge:i,signature:u});expect(o).toEqual(d(new h({status:"UNAUTHORIZED",message:`[401] Unauthorized access (from: ${t}/authenticate)`})))})}),describe("getTrustchainById",()=>{it("should fetch trustchain by ID successfully",async()=>{const e={"m/":"0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1e1d","m/16'":"1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b"};a.mockResolvedValueOnce({ok:!0,json:()=>Promise.resolve(e)});const s=await new c(t).getTrustchainById("TRUSTCHAIN_ID",n);expect(a).toHaveBeenCalledWith(`${t}/trustchain/TRUSTCHAIN_ID`,{headers:{"Content-Type":"application/json",Authorization:`Bearer ${n.access_token}`}}),expect(s).toEqual(r(new S("TRUSTCHAIN_ID",e)))}),it("should handle errors",async()=>{a.mockResolvedValueOnce({ok:!1,status:500,statusText:"Internal Server Error",json:()=>Promise.resolve({})});const o=await new c(t).getTrustchainById("TRUSTCHAIN_ID",n);expect(o).toEqual(d(new h({status:"UNKNOWN",message:`[500] Internal Server Error (from: ${t}/trustchain/TRUSTCHAIN_ID)`})))})}),describe("postDerivation",()=>{it("should post derivation successfully",async()=>{const e="0102030405060708090a0b0c0d0e0f",o=m.fromHex(e);a.mockResolvedValueOnce({ok:!0,status:204});const l=await new c(t).postDerivation("TRUSTCHAIN_ID",o,n);expect(a).toHaveBeenCalledWith(`${t}/trustchain/TRUSTCHAIN_ID/derivation`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n.access_token}`},body:JSON.stringify(e)}),expect(l).toEqual(r(void 0))})}),describe("putCommands",()=>{it("should put commands successfully",async()=>{const e="0102030405060708090a0b0c0d0e0f",o=m.fromHex(e);a.mockResolvedValueOnce({ok:!0,status:204});const l=await new c(t).putCommands("TRUSTCHAIN_ID","m/0'/16'/0'",o,n);expect(a).toHaveBeenCalledWith(`${t}/trustchain/TRUSTCHAIN_ID/commands`,{method:"PUT",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n.access_token}`},body:JSON.stringify({path:"m/0'/16'/0'",blocks:[e]})}),expect(l).toEqual(r(void 0))})})});
2
2
  //# sourceMappingURL=HttpLKRPDataSource.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/lkrp-datasource/data/HttpLKRPDataSource.test.ts"],
4
- "sourcesContent": ["import { Just, Left, Nothing, Right } from \"purify-ts\";\n\nimport { LKRPDataSourceError } from \"@api/model/Errors\";\nimport { LKRPBlock } from \"@internal/utils/LKRPBlock\";\nimport { Trustchain } from \"@internal/utils/Trustchain\";\n\nimport { HttpLKRPDataSource } from \"./HttpLKRPDataSource\";\n\nconst mockJwt = {\n access_token: \"ACCESS TOKEN\",\n permissions: { TRUSTCHAIN_ID: { \"m/\": [\"owner\"] } },\n};\n\nconst mockChallengeJSON = {\n version: 0,\n challenge: {\n data: \"1010101010010101010\",\n expiry: \"2025-06-30T10:00:00Z\",\n },\n host: \"example.com\",\n rp: [\n {\n credential: {\n version: 0,\n curveId: 33,\n signAlgorithm: 1,\n publicKey: \"aaaaaaaaaaaaaaaaaaaaaaaaaa\",\n },\n signature: \"abababababababab\",\n },\n ],\n protocolVersion: { major: 1, minor: 0, patch: 0 },\n};\n\nconst mockSignature = {\n credential: {\n version: 0,\n curveId: 33,\n signAlgorithm: 1,\n publicKey: \"bbbbbbbbbbbbbbbbbbbbbbbbbbb\",\n },\n signature: \"acacacacacacacac\",\n attestation: \"0000000000000000\",\n};\n\ndescribe(\"HttpLKRPDataSource\", () => {\n const fetchSpy = vi.spyOn(global, \"fetch\");\n const baseUrl = \"https://example.com\";\n\n afterEach(() => {\n fetchSpy.mockClear();\n });\n\n describe(\"getChallenge\", () => {\n it(\"should fetch challenge successfully\", async () => {\n // GIVEN\n const mockChallenge = {\n tlv: \"0f1234567890\",\n json: mockChallengeJSON,\n };\n\n fetchSpy.mockResolvedValueOnce({\n ok: true,\n json: () => Promise.resolve(mockChallenge),\n } as Response);\n\n // WHEN\n const dataSource = new HttpLKRPDataSource(baseUrl);\n const result = await dataSource.getChallenge();\n expect(fetchSpy).toHaveBeenCalledWith(`${baseUrl}/challenge`, {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n });\n\n // THEN\n expect(result).toEqual(Right(mockChallenge));\n });\n\n it(\"should handle fetch error\", async () => {\n // GIVEN\n const error = { status: \"UNKNOWN\", message: \"Random error\" } as const;\n fetchSpy.mockRejectedValueOnce(error);\n\n // WHEN\n const dataSource = new HttpLKRPDataSource(baseUrl);\n const result = await dataSource.getChallenge();\n\n // THEN\n expect(result).toEqual(\n Left(\n new LKRPDataSourceError({\n status: \"UNKNOWN\",\n message: `Random error (from: ${baseUrl}/challenge)`,\n }),\n ),\n );\n });\n });\n\n describe(\"authenticate\", () => {\n it(\"should fetch a JWT when the authentication is successful\", async () => {\n // GIVEN\n fetchSpy.mockResolvedValueOnce({\n ok: true,\n json: () => Promise.resolve(mockJwt),\n } as Response);\n\n // WHEN\n const dataSource = new HttpLKRPDataSource(baseUrl);\n const result = await dataSource.authenticate({\n challenge: mockChallengeJSON,\n signature: mockSignature,\n });\n\n // THEN\n expect(fetchSpy).toHaveBeenCalledWith(`${baseUrl}/authenticate`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n challenge: mockChallengeJSON,\n signature: mockSignature,\n }),\n });\n expect(result).toEqual(\n Right({ jwt: mockJwt, trustchainId: Just(\"TRUSTCHAIN_ID\") }),\n );\n });\n\n it(\"should return no trustchainId the returned JWT does not contain one\", async () => {\n // GIVEN\n const jwtWithoutTrustchainId = {\n access_token: \"ACCESS TOKEN\",\n permissions: {},\n };\n fetchSpy.mockResolvedValueOnce({\n ok: true,\n json: () => Promise.resolve(jwtWithoutTrustchainId),\n } as Response);\n\n // WHEN\n const dataSource = new HttpLKRPDataSource(baseUrl);\n const result = await dataSource.authenticate({\n challenge: mockChallengeJSON,\n signature: mockSignature,\n });\n\n // THEN\n expect(result).toEqual(\n Right({ jwt: jwtWithoutTrustchainId, trustchainId: Nothing }),\n );\n });\n\n it(\"should handle authentication error\", async () => {\n // GIVEN\n fetchSpy.mockResolvedValueOnce({\n ok: false,\n status: 401,\n statusText: \"Unauthorized\",\n json: () => Promise.resolve({ message: \"Unauthorized access\" }),\n } as Response);\n\n // WHEN\n const dataSource = new HttpLKRPDataSource(baseUrl);\n const result = await dataSource.authenticate({\n challenge: mockChallengeJSON,\n signature: mockSignature,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new LKRPDataSourceError({\n status: \"UNAUTHORIZED\",\n message: `[401] Unauthorized access (from: ${baseUrl}/authenticate)`,\n }),\n ),\n );\n });\n });\n\n describe(\"getTrustchainById\", () => {\n it(\"should fetch trustchain by ID successfully\", async () => {\n // GIVEN\n const mockTrustchainData = {\n \"m/\": \"0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1e1d\",\n \"m/16'\": \"1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b\",\n };\n fetchSpy.mockResolvedValueOnce({\n ok: true,\n json: () => Promise.resolve(mockTrustchainData),\n } as Response);\n\n // WHEN\n const dataSource = new HttpLKRPDataSource(baseUrl);\n const result = await dataSource.getTrustchainById(\n \"TRUSTCHAIN_ID\",\n mockJwt,\n );\n\n // THEN\n expect(fetchSpy).toHaveBeenCalledWith(\n `${baseUrl}/trustchain/TRUSTCHAIN_ID`,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${mockJwt.access_token}`,\n },\n },\n );\n expect(result).toEqual(\n Right(new Trustchain(\"TRUSTCHAIN_ID\", mockTrustchainData)),\n );\n });\n\n it(\"should handle errors\", async () => {\n // GIVEN\n fetchSpy.mockResolvedValueOnce({\n ok: false,\n status: 500,\n statusText: \"Internal Server Error\",\n json: () => Promise.resolve({}),\n } as Response);\n\n // WHEN\n const dataSource = new HttpLKRPDataSource(baseUrl);\n const result = await dataSource.getTrustchainById(\n \"TRUSTCHAIN_ID\",\n mockJwt,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new LKRPDataSourceError({\n status: \"UNKNOWN\",\n message: `[500] Internal Server Error (from: ${baseUrl}/trustchain/TRUSTCHAIN_ID)`,\n }),\n ),\n );\n });\n });\n\n describe(\"postDerivation\", () => {\n it(\"should post derivation successfully\", async () => {\n // GIVEN\n const hex = \"0102030405060708090a0b0c0d0e0f\";\n const mockBlock = LKRPBlock.fromHex(hex);\n fetchSpy.mockResolvedValueOnce({\n ok: true,\n status: 204,\n } as Response);\n\n // WHEN\n const dataSource = new HttpLKRPDataSource(baseUrl);\n const result = await dataSource.postDerivation(\n \"TRUSTCHAIN_ID\",\n mockBlock,\n mockJwt,\n );\n\n // THEN\n expect(fetchSpy).toHaveBeenCalledWith(\n `${baseUrl}/trustchain/TRUSTCHAIN_ID/derivation`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${mockJwt.access_token}`,\n },\n body: JSON.stringify(hex),\n },\n );\n expect(result).toEqual(Right(undefined));\n });\n });\n\n describe(\"putCommands\", () => {\n it(\"should put commands successfully\", async () => {\n // GIVEN\n const hex = \"0102030405060708090a0b0c0d0e0f\";\n const mockBlock = LKRPBlock.fromHex(hex);\n fetchSpy.mockResolvedValueOnce({\n ok: true,\n status: 204,\n } as Response);\n\n // WHEN\n const dataSource = new HttpLKRPDataSource(baseUrl);\n const result = await dataSource.putCommands(\n \"TRUSTCHAIN_ID\",\n \"m/0'/16'/0'\",\n mockBlock,\n mockJwt,\n );\n\n // THEN\n expect(fetchSpy).toHaveBeenCalledWith(\n `${baseUrl}/trustchain/TRUSTCHAIN_ID/commands`,\n {\n method: \"PUT\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${mockJwt.access_token}`,\n },\n body: JSON.stringify({ path: \"m/0'/16'/0'\", blocks: [hex] }),\n },\n );\n expect(result).toEqual(Right(undefined));\n });\n });\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { Just, Left, Nothing, Right } from \"purify-ts\";\n\nimport { LKRPDataSourceError } from \"@api/app-binder/Errors\";\nimport { LKRPBlock } from \"@internal/utils/LKRPBlock\";\nimport { Trustchain } from \"@internal/utils/Trustchain\";\n\nimport { HttpLKRPDataSource } from \"./HttpLKRPDataSource\";\n\nconst mockJwt = {\n access_token: \"ACCESS TOKEN\",\n permissions: { TRUSTCHAIN_ID: { \"m/\": [\"owner\"] } },\n};\n\nconst mockChallengeJSON = {\n version: 0,\n challenge: {\n data: \"1010101010010101010\",\n expiry: \"2025-06-30T10:00:00Z\",\n },\n host: \"example.com\",\n rp: [\n {\n credential: {\n version: 0,\n curveId: 33,\n signAlgorithm: 1,\n publicKey: \"aaaaaaaaaaaaaaaaaaaaaaaaaa\",\n },\n signature: \"abababababababab\",\n },\n ],\n protocolVersion: { major: 1, minor: 0, patch: 0 },\n};\n\nconst mockSignature = {\n credential: {\n version: 0,\n curveId: 33,\n signAlgorithm: 1,\n publicKey: \"bbbbbbbbbbbbbbbbbbbbbbbbbbb\",\n },\n signature: \"acacacacacacacac\",\n attestation: \"0000000000000000\",\n};\n\ndescribe(\"HttpLKRPDataSource\", () => {\n const fetchSpy = vi.spyOn(global, \"fetch\");\n const baseUrl = \"https://example.com\";\n\n afterEach(() => {\n fetchSpy.mockClear();\n });\n\n describe(\"getChallenge\", () => {\n it(\"should fetch challenge successfully\", async () => {\n // GIVEN\n const mockChallenge = {\n tlv: \"0f1234567890\",\n json: mockChallengeJSON,\n };\n\n fetchSpy.mockResolvedValueOnce({\n ok: true,\n json: () => Promise.resolve(mockChallenge),\n } as Response);\n\n // WHEN\n const dataSource = new HttpLKRPDataSource(baseUrl);\n const result = await dataSource.getChallenge();\n expect(fetchSpy).toHaveBeenCalledWith(`${baseUrl}/challenge`, {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n });\n\n // THEN\n expect(result).toEqual(Right(mockChallenge));\n });\n\n it(\"should handle fetch error\", async () => {\n // GIVEN\n const error = { status: \"UNKNOWN\", message: \"Random error\" } as const;\n fetchSpy.mockRejectedValueOnce(error);\n\n // WHEN\n const dataSource = new HttpLKRPDataSource(baseUrl);\n const result = await dataSource.getChallenge();\n\n // THEN\n expect(result).toEqual(\n Left(\n new LKRPDataSourceError({\n status: \"UNKNOWN\",\n message: `Random error (from: ${baseUrl}/challenge)`,\n }),\n ),\n );\n });\n });\n\n describe(\"authenticate\", () => {\n it(\"should fetch a JWT when the authentication is successful\", async () => {\n // GIVEN\n fetchSpy.mockResolvedValueOnce({\n ok: true,\n json: () => Promise.resolve(mockJwt),\n } as Response);\n\n // WHEN\n const dataSource = new HttpLKRPDataSource(baseUrl);\n const result = await dataSource.authenticate({\n challenge: mockChallengeJSON,\n signature: mockSignature,\n });\n\n // THEN\n expect(fetchSpy).toHaveBeenCalledWith(`${baseUrl}/authenticate`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n challenge: mockChallengeJSON,\n signature: mockSignature,\n }),\n });\n expect(result).toEqual(\n Right({ jwt: mockJwt, trustchainId: Just(\"TRUSTCHAIN_ID\") }),\n );\n });\n\n it(\"should return no trustchainId the returned JWT does not contain one\", async () => {\n // GIVEN\n const jwtWithoutTrustchainId = {\n access_token: \"ACCESS TOKEN\",\n permissions: {},\n };\n fetchSpy.mockResolvedValueOnce({\n ok: true,\n json: () => Promise.resolve(jwtWithoutTrustchainId),\n } as Response);\n\n // WHEN\n const dataSource = new HttpLKRPDataSource(baseUrl);\n const result = await dataSource.authenticate({\n challenge: mockChallengeJSON,\n signature: mockSignature,\n });\n\n // THEN\n expect(result).toEqual(\n Right({ jwt: jwtWithoutTrustchainId, trustchainId: Nothing }),\n );\n });\n\n it(\"should handle authentication error\", async () => {\n // GIVEN\n fetchSpy.mockResolvedValueOnce({\n ok: false,\n status: 401,\n statusText: \"Unauthorized\",\n json: () => Promise.resolve({ message: \"Unauthorized access\" }),\n } as Response);\n\n // WHEN\n const dataSource = new HttpLKRPDataSource(baseUrl);\n const result = await dataSource.authenticate({\n challenge: mockChallengeJSON,\n signature: mockSignature,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new LKRPDataSourceError({\n status: \"UNAUTHORIZED\",\n message: `[401] Unauthorized access (from: ${baseUrl}/authenticate)`,\n }),\n ),\n );\n });\n });\n\n describe(\"getTrustchainById\", () => {\n it(\"should fetch trustchain by ID successfully\", async () => {\n // GIVEN\n const mockTrustchainData = {\n \"m/\": \"0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1e1d\",\n \"m/16'\": \"1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b\",\n };\n fetchSpy.mockResolvedValueOnce({\n ok: true,\n json: () => Promise.resolve(mockTrustchainData),\n } as Response);\n\n // WHEN\n const dataSource = new HttpLKRPDataSource(baseUrl);\n const result = await dataSource.getTrustchainById(\n \"TRUSTCHAIN_ID\",\n mockJwt,\n );\n\n // THEN\n expect(fetchSpy).toHaveBeenCalledWith(\n `${baseUrl}/trustchain/TRUSTCHAIN_ID`,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${mockJwt.access_token}`,\n },\n },\n );\n expect(result).toEqual(\n Right(new Trustchain(\"TRUSTCHAIN_ID\", mockTrustchainData)),\n );\n });\n\n it(\"should handle errors\", async () => {\n // GIVEN\n fetchSpy.mockResolvedValueOnce({\n ok: false,\n status: 500,\n statusText: \"Internal Server Error\",\n json: () => Promise.resolve({}),\n } as Response);\n\n // WHEN\n const dataSource = new HttpLKRPDataSource(baseUrl);\n const result = await dataSource.getTrustchainById(\n \"TRUSTCHAIN_ID\",\n mockJwt,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new LKRPDataSourceError({\n status: \"UNKNOWN\",\n message: `[500] Internal Server Error (from: ${baseUrl}/trustchain/TRUSTCHAIN_ID)`,\n }),\n ),\n );\n });\n });\n\n describe(\"postDerivation\", () => {\n it(\"should post derivation successfully\", async () => {\n // GIVEN\n const hex = \"0102030405060708090a0b0c0d0e0f\";\n const mockBlock = LKRPBlock.fromHex(hex);\n fetchSpy.mockResolvedValueOnce({\n ok: true,\n status: 204,\n } as Response);\n\n // WHEN\n const dataSource = new HttpLKRPDataSource(baseUrl);\n const result = await dataSource.postDerivation(\n \"TRUSTCHAIN_ID\",\n mockBlock,\n mockJwt,\n );\n\n // THEN\n expect(fetchSpy).toHaveBeenCalledWith(\n `${baseUrl}/trustchain/TRUSTCHAIN_ID/derivation`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${mockJwt.access_token}`,\n },\n body: JSON.stringify(hex),\n },\n );\n expect(result).toEqual(Right(undefined));\n });\n });\n\n describe(\"putCommands\", () => {\n it(\"should put commands successfully\", async () => {\n // GIVEN\n const hex = \"0102030405060708090a0b0c0d0e0f\";\n const mockBlock = LKRPBlock.fromHex(hex);\n fetchSpy.mockResolvedValueOnce({\n ok: true,\n status: 204,\n } as Response);\n\n // WHEN\n const dataSource = new HttpLKRPDataSource(baseUrl);\n const result = await dataSource.putCommands(\n \"TRUSTCHAIN_ID\",\n \"m/0'/16'/0'\",\n mockBlock,\n mockJwt,\n );\n\n // THEN\n expect(fetchSpy).toHaveBeenCalledWith(\n `${baseUrl}/trustchain/TRUSTCHAIN_ID/commands`,\n {\n method: \"PUT\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${mockJwt.access_token}`,\n },\n body: JSON.stringify({ path: \"m/0'/16'/0'\", blocks: [hex] }),\n },\n );\n expect(result).toEqual(Right(undefined));\n });\n });\n});\n"],
5
+ "mappings": "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",
6
6
  "names": ["Just", "Left", "Nothing", "Right", "LKRPDataSourceError", "LKRPBlock", "Trustchain", "HttpLKRPDataSource", "mockJwt", "mockChallengeJSON", "mockSignature", "fetchSpy", "baseUrl", "mockChallenge", "result", "error", "jwtWithoutTrustchainId", "mockTrustchainData", "hex", "mockBlock"]
7
7
  }
@@ -1,2 +1,2 @@
1
- var d=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var c=(n,e,r,t)=>{for(var i=t>1?void 0:t?m(e,r):e,s=n.length-1,a;s>=0;s--)(a=n[s])&&(i=(t?a(e,r,i):a(i))||i);return t&&i&&d(e,r,i),i},p=(n,e)=>(r,t)=>e(r,t,n);import{DeviceActionStatus as u}from"@ledgerhq/device-management-kit";import{inject as f,injectable as h}from"inversify";import{of as I}from"rxjs";import{LKRPMissingDataError as y}from"../../../api/model/Errors";import{appBinderTypes as g}from"../../app-binder/di/appBinderTypes";let o=class{constructor(e){this.appBinder=e}execute(e){if(e.trustchainId)return this.appBinder.authenticateWithKeypair(e);const r=e.sessionId;return r?this.appBinder.authenticateWithDevice({...e,sessionId:r}):{observable:I({status:u.Error,error:new y("Either a trustchainId or a device is required for authentication.")}),cancel:()=>{}}}};o=c([h(),p(0,f(g.AppBinding))],o);export{o as AuthenticateUseCase};
1
+ var d=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var c=(n,e,r,t)=>{for(var i=t>1?void 0:t?m(e,r):e,s=n.length-1,a;s>=0;s--)(a=n[s])&&(i=(t?a(e,r,i):a(i))||i);return t&&i&&d(e,r,i),i},p=(n,e)=>(r,t)=>e(r,t,n);import{DeviceActionStatus as u}from"@ledgerhq/device-management-kit";import{inject as f,injectable as h}from"inversify";import{of as I}from"rxjs";import{LKRPMissingDataError as y}from"../../../api/app-binder/Errors";import{appBinderTypes as g}from"../../app-binder/di/appBinderTypes";let o=class{constructor(e){this.appBinder=e}execute(e){if(e.trustchainId)return this.appBinder.authenticateWithKeypair(e);const r=e.sessionId;return r?this.appBinder.authenticateWithDevice({...e,sessionId:r}):{observable:I({status:u.Error,error:new y("Either a trustchainId or a device is required for authentication.")}),cancel:()=>{}}}};o=c([h(),p(0,f(g.AppBinding))],o);export{o as AuthenticateUseCase};
2
2
  //# sourceMappingURL=AuthenticateUseCase.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/use-cases/authentication/AuthenticateUseCase.ts"],
4
- "sourcesContent": ["import {\n DeviceActionStatus,\n DeviceSessionId,\n} from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\nimport { of } from \"rxjs\";\n\nimport { AuthenticateDAReturnType } from \"@api/app-binder/AuthenticateDeviceActionTypes\";\nimport { KeyPair } from \"@api/crypto/KeyPair\";\nimport { LKRPMissingDataError } from \"@api/model/Errors\";\nimport { Permissions } from \"@api/model/Permissions\";\nimport { appBinderTypes } from \"@internal/app-binder/di/appBinderTypes\";\nimport { LedgerKeyringProtocolBinder } from \"@internal/app-binder/LedgerKeyringProtocolBinder\";\n\nexport type AuthenticateUsecaseInput = {\n keypair: KeyPair;\n clientName: string;\n permissions: Permissions;\n} & (\n | { trustchainId: string; sessionId?: DeviceSessionId }\n | { trustchainId?: undefined; sessionId: DeviceSessionId }\n);\n\n@injectable()\nexport class AuthenticateUseCase {\n constructor(\n @inject(appBinderTypes.AppBinding)\n private appBinder: LedgerKeyringProtocolBinder,\n ) {}\n\n execute(input: AuthenticateUsecaseInput): AuthenticateDAReturnType {\n if (input.trustchainId) {\n return this.appBinder.authenticateWithKeypair(input);\n }\n\n const sessionId = input.sessionId;\n if (sessionId) {\n return this.appBinder.authenticateWithDevice({ ...input, sessionId });\n }\n\n // The AuthenticateUsecaseInput type should prevent this case\n return {\n observable: of({\n status: DeviceActionStatus.Error,\n error: new LKRPMissingDataError(\n \"Either a trustchainId or a device is required for authentication.\",\n ),\n }),\n cancel: () => undefined,\n };\n }\n}\n"],
5
- "mappings": "iOAAA,OACE,sBAAAA,MAEK,kCACP,OAAS,UAAAC,EAAQ,cAAAC,MAAkB,YACnC,OAAS,MAAAC,MAAU,OAInB,OAAS,wBAAAC,MAA4B,oBAErC,OAAS,kBAAAC,MAAsB,yCAaxB,IAAMC,EAAN,KAA0B,CAC/B,YAEUC,EACR,CADQ,eAAAA,CACP,CAEH,QAAQC,EAA2D,CACjE,GAAIA,EAAM,aACR,OAAO,KAAK,UAAU,wBAAwBA,CAAK,EAGrD,MAAMC,EAAYD,EAAM,UACxB,OAAIC,EACK,KAAK,UAAU,uBAAuB,CAAE,GAAGD,EAAO,UAAAC,CAAU,CAAC,EAI/D,CACL,WAAYC,EAAG,CACb,OAAQC,EAAmB,MAC3B,MAAO,IAAIC,EACT,mEACF,CACF,CAAC,EACD,OAAQ,IAAG,EACb,CACF,CACF,EA3BaN,EAANO,EAAA,CADNC,EAAW,EAGPC,EAAA,EAAAC,EAAOC,EAAe,UAAU,IAFxBX",
4
+ "sourcesContent": ["import {\n DeviceActionStatus,\n DeviceSessionId,\n} from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\nimport { of } from \"rxjs\";\n\nimport { AuthenticateDAReturnType } from \"@api/app-binder/AuthenticateDeviceActionTypes\";\nimport { LKRPMissingDataError } from \"@api/app-binder/Errors\";\nimport { Keypair, Permissions } from \"@api/app-binder/LKRPTypes\";\nimport { appBinderTypes } from \"@internal/app-binder/di/appBinderTypes\";\nimport { LedgerKeyringProtocolBinder } from \"@internal/app-binder/LedgerKeyringProtocolBinder\";\n\nexport type AuthenticateUsecaseInput = {\n keypair: Keypair;\n clientName: string;\n permissions: Permissions;\n} & (\n | { trustchainId: string; sessionId?: DeviceSessionId }\n | { trustchainId?: undefined; sessionId: DeviceSessionId }\n);\n\n@injectable()\nexport class AuthenticateUseCase {\n constructor(\n @inject(appBinderTypes.AppBinding)\n private appBinder: LedgerKeyringProtocolBinder,\n ) {}\n\n execute(input: AuthenticateUsecaseInput): AuthenticateDAReturnType {\n if (input.trustchainId) {\n return this.appBinder.authenticateWithKeypair(input);\n }\n\n const sessionId = input.sessionId;\n if (sessionId) {\n return this.appBinder.authenticateWithDevice({ ...input, sessionId });\n }\n\n // The AuthenticateUsecaseInput type should prevent this case\n return {\n observable: of({\n status: DeviceActionStatus.Error,\n error: new LKRPMissingDataError(\n \"Either a trustchainId or a device is required for authentication.\",\n ),\n }),\n cancel: () => undefined,\n };\n }\n}\n"],
5
+ "mappings": "iOAAA,OACE,sBAAAA,MAEK,kCACP,OAAS,UAAAC,EAAQ,cAAAC,MAAkB,YACnC,OAAS,MAAAC,MAAU,OAGnB,OAAS,wBAAAC,MAA4B,yBAErC,OAAS,kBAAAC,MAAsB,yCAaxB,IAAMC,EAAN,KAA0B,CAC/B,YAEUC,EACR,CADQ,eAAAA,CACP,CAEH,QAAQC,EAA2D,CACjE,GAAIA,EAAM,aACR,OAAO,KAAK,UAAU,wBAAwBA,CAAK,EAGrD,MAAMC,EAAYD,EAAM,UACxB,OAAIC,EACK,KAAK,UAAU,uBAAuB,CAAE,GAAGD,EAAO,UAAAC,CAAU,CAAC,EAI/D,CACL,WAAYC,EAAG,CACb,OAAQC,EAAmB,MAC3B,MAAO,IAAIC,EACT,mEACF,CACF,CAAC,EACD,OAAQ,IAAG,EACb,CACF,CACF,EA3BaN,EAANO,EAAA,CADNC,EAAW,EAGPC,EAAA,EAAAC,EAAOC,EAAe,UAAU,IAFxBX",
6
6
  "names": ["DeviceActionStatus", "inject", "injectable", "of", "LKRPMissingDataError", "appBinderTypes", "AuthenticateUseCase", "appBinder", "input", "sessionId", "of", "DeviceActionStatus", "LKRPMissingDataError", "__decorateClass", "injectable", "__decorateParam", "inject", "appBinderTypes"]
7
7
  }
@@ -1,2 +1,2 @@
1
- var S=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var y=(c,i,n,e)=>{for(var r=e>1?void 0:e?f(i,n):i,t=c.length-1,o;t>=0;t--)(o=c[t])&&(r=(e?o(i,n,r):o(r))||r);return e&&r&&S(i,n,r),r},p=(c,i)=>(n,e)=>i(n,e,c);import{ByteArrayParser as u}from"@ledgerhq/device-management-kit";import{inject as x,injectable as A}from"inversify";import{Maybe as w}from"purify-ts";import{Curve as K,EncryptionAlgo as L,HashAlgo as B}from"../../../api/crypto/CryptoService";import{LKRPParsingError as m}from"../../../api/model/Errors";import{externalTypes as P}from"../../externalTypes";import{eitherSeqRecord as U}from"../../utils/eitherSeqRecord";let a=class{constructor(i){this.cryptoService=i}async execute(i,n){const e=new u(n);if(e.extract8BitUInt()!==0)throw new m("Unsupported serialization version");const r=(t,o)=>w.fromNullable(t).toEither(new m(`Missing ${o} field`));return U({ephemeralPublicKey:()=>r(e.extractFieldByLength(33),"ephemeral public key"),iv:()=>r(e.extractFieldByLength(16),"IV"),tag:()=>r(e.extractFieldByLength(16),"tag"),encryptedData:()=>r(e.extractFieldByLength(e.getUnparsedRemainingLength()),"encrypted data")}).map(async({ephemeralPublicKey:t,iv:o,tag:s,encryptedData:l})=>{const h=await this.cryptoService.importKeyPair(i,K.K256).deriveSharedSecret(t),d=this.cryptoService.hmac(new Uint8Array,h.slice(1),B.SHA256),g=this.cryptoService.importSymmetricKey(d,L.AES256_GCM),v=new Uint8Array([...l,...s]);return await g.decrypt(o,v)}).caseOf({Left:t=>{throw t},Right:t=>t})}};a=y([A(),p(0,x(P.CryptoService))],a);export{a as DecryptDataUseCase};
1
+ import{ByteArrayParser as d}from"@ledgerhq/device-management-kit";import{Maybe as h}from"purify-ts";import{LKRPParsingError as a}from"../../../api/app-binder/Errors";import{KeypairFromBytes as g}from"../../../api/index";import{CryptoUtils as n}from"../../utils/crypto";import{eitherSeqRecord as f}from"../../utils/eitherSeqRecord";class b{execute(o,c){const r=new d(c);if(r.extract8BitUInt()!==0)throw new a("Unsupported serialization version");const t=(e,i)=>h.fromNullable(e).toEither(new a(`Missing ${i} field`));return f({ephemeralPublicKey:()=>t(r.extractFieldByLength(33),"ephemeral public key"),iv:()=>t(r.extractFieldByLength(16),"IV"),tag:()=>t(r.extractFieldByLength(16),"tag"),encryptedData:()=>t(r.extractFieldByLength(r.getUnparsedRemainingLength()),"encrypted data")}).map(({ephemeralPublicKey:e,iv:i,tag:s,encryptedData:y})=>{const p=new g(o).ecdh(e).slice(1),m=n.hmac(new Uint8Array,p),l=new Uint8Array([...y,...s]);return n.decrypt(m,i,l)}).caseOf({Left:e=>{throw e},Right:e=>e})}}export{b as DecryptDataUseCase};
2
2
  //# sourceMappingURL=DecryptDataUseCase.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/use-cases/authentication/DecryptDataUseCase.ts"],
4
- "sourcesContent": ["import { ByteArrayParser } from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\nimport { Maybe } from \"purify-ts\";\n\nimport {\n type CryptoService,\n Curve,\n EncryptionAlgo,\n HashAlgo,\n} from \"@api/crypto/CryptoService\";\nimport { LKRPParsingError } from \"@api/model/Errors\";\nimport { externalTypes } from \"@internal/externalTypes\";\nimport { eitherSeqRecord } from \"@internal/utils/eitherSeqRecord\";\n\n@injectable()\nexport class DecryptDataUseCase {\n constructor(\n @inject(externalTypes.CryptoService)\n private cryptoService: CryptoService,\n ) {}\n\n // TODO better return type instead of throw on errors\n async execute(\n encryptionKey: Uint8Array,\n data: Uint8Array,\n ): Promise<Uint8Array> {\n const parser = new ByteArrayParser(data);\n if (parser.extract8BitUInt() !== 0) {\n throw new LKRPParsingError(\"Unsupported serialization version\");\n }\n const required = (value: Uint8Array | undefined, field: string) =>\n Maybe.fromNullable(value).toEither(\n new LKRPParsingError(`Missing ${field} field`),\n );\n\n return eitherSeqRecord({\n ephemeralPublicKey: () =>\n required(parser.extractFieldByLength(33), \"ephemeral public key\"),\n iv: () => required(parser.extractFieldByLength(16), \"IV\"),\n tag: () => required(parser.extractFieldByLength(16), \"tag\"),\n encryptedData: () =>\n required(\n parser.extractFieldByLength(parser.getUnparsedRemainingLength()),\n \"encrypted data\",\n ),\n })\n .map(async ({ ephemeralPublicKey, iv, tag, encryptedData }) => {\n // Derive the shared secret using ECDH with an ephemeral keypair\n const privateKey = this.cryptoService.importKeyPair(\n encryptionKey,\n Curve.K256,\n );\n const sharedSecret =\n await privateKey.deriveSharedSecret(ephemeralPublicKey);\n\n // Key derivation using HMAC-SHA256\n const key = this.cryptoService.hmac(\n new Uint8Array(),\n sharedSecret.slice(1),\n HashAlgo.SHA256,\n );\n\n // Decrypt the data\n const symmetricKey = this.cryptoService.importSymmetricKey(\n key,\n EncryptionAlgo.AES256_GCM,\n );\n const ciphertext = new Uint8Array([...encryptedData, ...tag]);\n const cleartext = await symmetricKey.decrypt(iv, ciphertext);\n return cleartext;\n })\n .caseOf({\n Left: (error) => {\n throw error;\n },\n Right: (cleartext) => cleartext,\n });\n }\n}\n"],
5
- "mappings": "iOAAA,OAAS,mBAAAA,MAAuB,kCAChC,OAAS,UAAAC,EAAQ,cAAAC,MAAkB,YACnC,OAAS,SAAAC,MAAa,YAEtB,OAEE,SAAAC,EACA,kBAAAC,EACA,YAAAC,MACK,4BACP,OAAS,oBAAAC,MAAwB,oBACjC,OAAS,iBAAAC,MAAqB,0BAC9B,OAAS,mBAAAC,MAAuB,kCAGzB,IAAMC,EAAN,KAAyB,CAC9B,YAEUC,EACR,CADQ,mBAAAA,CACP,CAGH,MAAM,QACJC,EACAC,EACqB,CACrB,MAAMC,EAAS,IAAIC,EAAgBF,CAAI,EACvC,GAAIC,EAAO,gBAAgB,IAAM,EAC/B,MAAM,IAAIE,EAAiB,mCAAmC,EAEhE,MAAMC,EAAW,CAACC,EAA+BC,IAC/CC,EAAM,aAAaF,CAAK,EAAE,SACxB,IAAIF,EAAiB,WAAWG,CAAK,QAAQ,CAC/C,EAEF,OAAOE,EAAgB,CACrB,mBAAoB,IAClBJ,EAASH,EAAO,qBAAqB,EAAE,EAAG,sBAAsB,EAClE,GAAI,IAAMG,EAASH,EAAO,qBAAqB,EAAE,EAAG,IAAI,EACxD,IAAK,IAAMG,EAASH,EAAO,qBAAqB,EAAE,EAAG,KAAK,EAC1D,cAAe,IACbG,EACEH,EAAO,qBAAqBA,EAAO,2BAA2B,CAAC,EAC/D,gBACF,CACJ,CAAC,EACE,IAAI,MAAO,CAAE,mBAAAQ,EAAoB,GAAAC,EAAI,IAAAC,EAAK,cAAAC,CAAc,IAAM,CAM7D,MAAMC,EACJ,MALiB,KAAK,cAAc,cACpCd,EACAe,EAAM,IACR,EAEmB,mBAAmBL,CAAkB,EAGlDM,EAAM,KAAK,cAAc,KAC7B,IAAI,WACJF,EAAa,MAAM,CAAC,EACpBG,EAAS,MACX,EAGMC,EAAe,KAAK,cAAc,mBACtCF,EACAG,EAAe,UACjB,EACMC,EAAa,IAAI,WAAW,CAAC,GAAGP,EAAe,GAAGD,CAAG,CAAC,EAE5D,OADkB,MAAMM,EAAa,QAAQP,EAAIS,CAAU,CAE7D,CAAC,EACA,OAAO,CACN,KAAOC,GAAU,CACf,MAAMA,CACR,EACA,MAAQC,GAAcA,CACxB,CAAC,CACL,CACF,EA/DaxB,EAANyB,EAAA,CADNC,EAAW,EAGPC,EAAA,EAAAC,EAAOC,EAAc,aAAa,IAF1B7B",
6
- "names": ["ByteArrayParser", "inject", "injectable", "Maybe", "Curve", "EncryptionAlgo", "HashAlgo", "LKRPParsingError", "externalTypes", "eitherSeqRecord", "DecryptDataUseCase", "cryptoService", "encryptionKey", "data", "parser", "ByteArrayParser", "LKRPParsingError", "required", "value", "field", "Maybe", "eitherSeqRecord", "ephemeralPublicKey", "iv", "tag", "encryptedData", "sharedSecret", "Curve", "key", "HashAlgo", "symmetricKey", "EncryptionAlgo", "ciphertext", "error", "cleartext", "__decorateClass", "injectable", "__decorateParam", "inject", "externalTypes"]
4
+ "sourcesContent": ["import { ByteArrayParser } from \"@ledgerhq/device-management-kit\";\nimport { Maybe } from \"purify-ts\";\n\nimport { LKRPParsingError } from \"@api/app-binder/Errors\";\nimport { KeypairFromBytes } from \"@api/index\";\nimport { CryptoUtils } from \"@internal/utils/crypto\";\nimport { eitherSeqRecord } from \"@internal/utils/eitherSeqRecord\";\n\nexport class DecryptDataUseCase {\n execute(encryptionKey: Uint8Array, data: Uint8Array): Uint8Array {\n const parser = new ByteArrayParser(data);\n if (parser.extract8BitUInt() !== 0) {\n throw new LKRPParsingError(\"Unsupported serialization version\");\n }\n const required = (value: Uint8Array | undefined, field: string) =>\n Maybe.fromNullable(value).toEither(\n new LKRPParsingError(`Missing ${field} field`),\n );\n\n return eitherSeqRecord({\n ephemeralPublicKey: () =>\n required(parser.extractFieldByLength(33), \"ephemeral public key\"),\n iv: () => required(parser.extractFieldByLength(16), \"IV\"),\n tag: () => required(parser.extractFieldByLength(16), \"tag\"),\n encryptedData: () =>\n required(\n parser.extractFieldByLength(parser.getUnparsedRemainingLength()),\n \"encrypted data\",\n ),\n })\n .map(({ ephemeralPublicKey, iv, tag, encryptedData }) => {\n // Derive the shared secret using ECDH with an ephemeral keypair\n const privateKey = new KeypairFromBytes(encryptionKey);\n const sharedSecret = privateKey.ecdh(ephemeralPublicKey).slice(1);\n\n // Key derivation using HMAC-SHA256\n const key = CryptoUtils.hmac(new Uint8Array(), sharedSecret);\n\n // Decrypt the data\n const ciphertext = new Uint8Array([...encryptedData, ...tag]);\n const cleartext = CryptoUtils.decrypt(key, iv, ciphertext);\n return cleartext;\n })\n .caseOf({\n Left: (error) => {\n throw error;\n },\n Right: (cleartext) => cleartext,\n });\n }\n}\n"],
5
+ "mappings": "AAAA,OAAS,mBAAAA,MAAuB,kCAChC,OAAS,SAAAC,MAAa,YAEtB,OAAS,oBAAAC,MAAwB,yBACjC,OAAS,oBAAAC,MAAwB,aACjC,OAAS,eAAAC,MAAmB,yBAC5B,OAAS,mBAAAC,MAAuB,kCAEzB,MAAMC,CAAmB,CAC9B,QAAQC,EAA2BC,EAA8B,CAC/D,MAAMC,EAAS,IAAIT,EAAgBQ,CAAI,EACvC,GAAIC,EAAO,gBAAgB,IAAM,EAC/B,MAAM,IAAIP,EAAiB,mCAAmC,EAEhE,MAAMQ,EAAW,CAACC,EAA+BC,IAC/CX,EAAM,aAAaU,CAAK,EAAE,SACxB,IAAIT,EAAiB,WAAWU,CAAK,QAAQ,CAC/C,EAEF,OAAOP,EAAgB,CACrB,mBAAoB,IAClBK,EAASD,EAAO,qBAAqB,EAAE,EAAG,sBAAsB,EAClE,GAAI,IAAMC,EAASD,EAAO,qBAAqB,EAAE,EAAG,IAAI,EACxD,IAAK,IAAMC,EAASD,EAAO,qBAAqB,EAAE,EAAG,KAAK,EAC1D,cAAe,IACbC,EACED,EAAO,qBAAqBA,EAAO,2BAA2B,CAAC,EAC/D,gBACF,CACJ,CAAC,EACE,IAAI,CAAC,CAAE,mBAAAI,EAAoB,GAAAC,EAAI,IAAAC,EAAK,cAAAC,CAAc,IAAM,CAGvD,MAAMC,EADa,IAAId,EAAiBI,CAAa,EACrB,KAAKM,CAAkB,EAAE,MAAM,CAAC,EAG1DK,EAAMd,EAAY,KAAK,IAAI,WAAca,CAAY,EAGrDE,EAAa,IAAI,WAAW,CAAC,GAAGH,EAAe,GAAGD,CAAG,CAAC,EAE5D,OADkBX,EAAY,QAAQc,EAAKJ,EAAIK,CAAU,CAE3D,CAAC,EACA,OAAO,CACN,KAAOC,GAAU,CACf,MAAMA,CACR,EACA,MAAQC,GAAcA,CACxB,CAAC,CACL,CACF",
6
+ "names": ["ByteArrayParser", "Maybe", "LKRPParsingError", "KeypairFromBytes", "CryptoUtils", "eitherSeqRecord", "DecryptDataUseCase", "encryptionKey", "data", "parser", "required", "value", "field", "ephemeralPublicKey", "iv", "tag", "encryptedData", "sharedSecret", "key", "ciphertext", "error", "cleartext"]
7
7
  }
@@ -1,2 +1,2 @@
1
- var f=Object.defineProperty;var K=Object.getOwnPropertyDescriptor;var m=(o,e,i,t)=>{for(var r=t>1?void 0:t?K(e,i):e,c=o.length-1,a;c>=0;c--)(a=o[c])&&(r=(t?a(e,i,r):a(r))||r);return t&&r&&f(e,i,r),r},s=(o,e)=>(i,t)=>e(i,t,o);import{ByteArrayBuilder as h}from"@ledgerhq/device-management-kit";import{inject as l,injectable as A}from"inversify";import{Curve as d,EncryptionAlgo as B,HashAlgo as b}from"../../../api/crypto/CryptoService";import{AES256_BLOCK_SIZE as S}from"../../../api/crypto/Key";import{externalTypes as T}from"../../externalTypes";let y=class{constructor(e){this.cryptoService=e}async execute(e,i){const t=this.cryptoService.importKeyPair(e,d.K256),r=await this.cryptoService.createKeyPair(d.K256),c=await t.deriveSharedSecret(r.getPublicKey()),a=this.cryptoService.hmac(new Uint8Array,c.slice(1),b.SHA256),n=this.cryptoService.randomBytes(16),p=await this.cryptoService.importSymmetricKey(a,B.AES256_GCM).encrypt(n,i),u=p.subarray(0,-S),v=p.subarray(-S);return new h().add8BitUIntToData(0).addBufferToData(r.getPublicKey()).addBufferToData(n).addBufferToData(v).addBufferToData(u).build()}};y=m([A(),s(0,l(T.CryptoService))],y);export{y as EncryptDataUseCase};
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
2
  //# sourceMappingURL=EncryptDataUseCase.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/use-cases/authentication/EncryptDataUseCase.ts"],
4
- "sourcesContent": ["import { ByteArrayBuilder } from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport {\n type CryptoService,\n Curve,\n EncryptionAlgo,\n HashAlgo,\n} from \"@api/crypto/CryptoService\";\nimport { AES256_BLOCK_SIZE } from \"@api/crypto/Key\";\nimport { externalTypes } from \"@internal/externalTypes\";\n\n@injectable()\nexport class EncryptDataUseCase {\n constructor(\n @inject(externalTypes.CryptoService)\n private cryptoService: CryptoService,\n ) {}\n\n async execute(\n encryptionKey: Uint8Array,\n data: Uint8Array,\n ): Promise<Uint8Array> {\n // Derive the shared secret using ECDH with an ephemeral keypair\n const privateKey = this.cryptoService.importKeyPair(\n encryptionKey,\n Curve.K256,\n );\n const ephemeralKeypair = await this.cryptoService.createKeyPair(Curve.K256);\n const sharedSecret = await privateKey.deriveSharedSecret(\n ephemeralKeypair.getPublicKey(),\n );\n\n // Key derivation using HMAC-SHA256\n const key = this.cryptoService.hmac(\n new Uint8Array(),\n sharedSecret.slice(1),\n HashAlgo.SHA256,\n );\n\n // Generate a random IV (nonce)\n const iv = this.cryptoService.randomBytes(16);\n\n // Encrypt data\n const symmetricKey = this.cryptoService.importSymmetricKey(\n key,\n EncryptionAlgo.AES256_GCM,\n );\n const ciphertext = await symmetricKey.encrypt(iv, data);\n const encryptedData = ciphertext.subarray(0, -AES256_BLOCK_SIZE);\n const tag = ciphertext.subarray(-AES256_BLOCK_SIZE);\n\n // Serialize the result\n return new ByteArrayBuilder()\n .add8BitUIntToData(0) // Version of the format\n .addBufferToData(ephemeralKeypair.getPublicKey())\n .addBufferToData(iv)\n .addBufferToData(tag)\n .addBufferToData(encryptedData)\n .build();\n }\n}\n"],
5
- "mappings": "iOAAA,OAAS,oBAAAA,MAAwB,kCACjC,OAAS,UAAAC,EAAQ,cAAAC,MAAkB,YAEnC,OAEE,SAAAC,EACA,kBAAAC,EACA,YAAAC,MACK,4BACP,OAAS,qBAAAC,MAAyB,kBAClC,OAAS,iBAAAC,MAAqB,0BAGvB,IAAMC,EAAN,KAAyB,CAC9B,YAEUC,EACR,CADQ,mBAAAA,CACP,CAEH,MAAM,QACJC,EACAC,EACqB,CAErB,MAAMC,EAAa,KAAK,cAAc,cACpCF,EACAG,EAAM,IACR,EACMC,EAAmB,MAAM,KAAK,cAAc,cAAcD,EAAM,IAAI,EACpEE,EAAe,MAAMH,EAAW,mBACpCE,EAAiB,aAAa,CAChC,EAGME,EAAM,KAAK,cAAc,KAC7B,IAAI,WACJD,EAAa,MAAM,CAAC,EACpBE,EAAS,MACX,EAGMC,EAAK,KAAK,cAAc,YAAY,EAAE,EAOtCC,EAAa,MAJE,KAAK,cAAc,mBACtCH,EACAI,EAAe,UACjB,EACsC,QAAQF,EAAIP,CAAI,EAChDU,EAAgBF,EAAW,SAAS,EAAG,CAACG,CAAiB,EACzDC,EAAMJ,EAAW,SAAS,CAACG,CAAiB,EAGlD,OAAO,IAAIE,EAAiB,EACzB,kBAAkB,CAAC,EACnB,gBAAgBV,EAAiB,aAAa,CAAC,EAC/C,gBAAgBI,CAAE,EAClB,gBAAgBK,CAAG,EACnB,gBAAgBF,CAAa,EAC7B,MAAM,CACX,CACF,EAhDab,EAANiB,EAAA,CADNC,EAAW,EAGPC,EAAA,EAAAC,EAAOC,EAAc,aAAa,IAF1BrB",
6
- "names": ["ByteArrayBuilder", "inject", "injectable", "Curve", "EncryptionAlgo", "HashAlgo", "AES256_BLOCK_SIZE", "externalTypes", "EncryptDataUseCase", "cryptoService", "encryptionKey", "data", "privateKey", "Curve", "ephemeralKeypair", "sharedSecret", "key", "HashAlgo", "iv", "ciphertext", "EncryptionAlgo", "encryptedData", "AES256_BLOCK_SIZE", "tag", "ByteArrayBuilder", "__decorateClass", "injectable", "__decorateParam", "inject", "externalTypes"]
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
7
  }
@@ -1,5 +1,5 @@
1
- import{bufferToHexaString as n,ByteArrayBuilder as s,hexaStringToBuffer as h}from"@ledgerhq/device-management-kit";import{sha256 as d}from"@noble/hashes/sha256";import{Either as p,Just as u,Nothing as m,Right as y}from"purify-ts";import{GeneralTags as t}from"../models/Tags";import{TLVParser as P}from"./TLVParser";class o{constructor(r,e){this.bytes=r;this.data=e?u(y(e)):m}hashValue=m;data;static fromHex(r){return new o(h(r)??new Uint8Array)}static fromData(r){const e=new s().encodeInTLVFromUInt8(t.Int,1).encodeInTLVFromHexa(t.Hash,r.parent).encodeInTLVFromBuffer(t.PublicKey,r.issuer).encodeInTLVFromUInt8(t.Int,r.commands.length).build(),a=new s;r.commands.forEach(l=>a.addBufferToData(l.toU8A()));const c=a.build(),i=new s().encodeInTLVFromBuffer(t.Signature,r.signature).build(),f=new s().addBufferToData(e).addBufferToData(c).addBufferToData(i).build();return new o(f,{...r,header:e,signature:i})}toString(){return n(this.bytes,!1)}toU8A(){return this.bytes}parse(){return this.data.orDefaultLazy(()=>{const r=new P(this.bytes).parseBlockData();return this.data=u(r),r})}toHuman(){return this.parse().chain(r=>p.sequence(r.commands.map(e=>e.toHuman())).map(e=>({...r,commands:e}))).map(r=>[`Parent: ${r.parent}`,`Issuer: ${n(r.issuer,!1)}`,`Commands:${r.commands.flatMap(e=>e.split(`
1
+ import{bufferToHexaString as e,hexaStringToBuffer as n}from"@ledgerhq/device-management-kit";import{Either as m,Just as o,Nothing as u,Right as p}from"purify-ts";import{CryptoUtils as g}from"./crypto";import{TLVBuilder as y}from"./TLVBuilder";import{TLVParser as P}from"./TLVParser";class i{constructor(r,t){this.bytes=r;this.data=t?o(p(t)):u}hashValue=u;data;static fromHex(r){return new i(n(r)??new Uint8Array)}static fromData(r){const t=new y().addInt(1,1).addHash(n(r.parent)??new Uint8Array).addPublicKey(r.issuer).addInt(r.commands.length,1),a=t.build();r.commands.forEach(l=>t.push(l.toU8A()));const c=t.build().length,s=t.addSignature(r.signature).build(),h=s.slice(c,s.length);return new i(s,{...r,header:a,signature:h})}toString(){return e(this.bytes).slice(2)}toU8A(){return this.bytes}parse(){return this.data.orDefaultLazy(()=>{const r=new P(this.bytes).parseBlockData();return this.data=o(r),r})}toHuman(){return this.parse().chain(r=>m.sequence(r.commands.map(t=>t.toHuman())).map(t=>({...r,commands:t}))).map(r=>[`Parent: ${r.parent}`,`Issuer: ${e(r.issuer).slice(2)}`,`Commands:${r.commands.flatMap(t=>t.split(`
2
2
  `).map(a=>`
3
- ${a}`)).join("")}`,`Signature: ${n(r.signature.slice(2),!1)}`].join(`
4
- `))}hash(){return this.hashValue.orDefaultLazy(()=>{const r=d(this.bytes);return n(r,!1)})}}export{o as LKRPBlock};
3
+ ${a}`)).join("")}`,`Signature: ${e(r.signature.slice(2)).slice(2)}`].join(`
4
+ `))}hash(){return this.hashValue.orDefaultLazy(()=>{const r=g.hash(this.bytes);return e(r).slice(2)})}}export{i as LKRPBlock};
5
5
  //# sourceMappingURL=LKRPBlock.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/internal/utils/LKRPBlock.ts"],
4
- "sourcesContent": ["import {\n bufferToHexaString,\n ByteArrayBuilder,\n hexaStringToBuffer,\n} from \"@ledgerhq/device-management-kit\";\nimport { sha256 } from \"@noble/hashes/sha256\";\nimport { Either, Just, type Maybe, Nothing, Right } from \"purify-ts\";\n\nimport { type LKRPParsingError } from \"@api/model/Errors\";\nimport {\n type LKRPBlockData,\n type LKRPBlockParsedData,\n} from \"@internal/models/LKRPBlockTypes\";\nimport { GeneralTags } from \"@internal/models/Tags\";\n\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 header = new ByteArrayBuilder()\n .encodeInTLVFromUInt8(GeneralTags.Int, 1) // Version 1\n .encodeInTLVFromHexa(GeneralTags.Hash, data.parent)\n .encodeInTLVFromBuffer(GeneralTags.PublicKey, data.issuer)\n .encodeInTLVFromUInt8(GeneralTags.Int, data.commands.length)\n .build();\n\n const commandsBuilder = new ByteArrayBuilder();\n data.commands.forEach((cmd) =>\n commandsBuilder.addBufferToData(cmd.toU8A()),\n );\n const commands = commandsBuilder.build();\n\n const signature = new ByteArrayBuilder()\n .encodeInTLVFromBuffer(GeneralTags.Signature, data.signature)\n .build();\n\n const bytes = new ByteArrayBuilder()\n .addBufferToData(header)\n .addBufferToData(commands)\n .addBufferToData(signature)\n .build();\n\n return new LKRPBlock(bytes, { ...data, header, signature });\n }\n\n toString(): string {\n return bufferToHexaString(this.bytes, false);\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, false)}`,\n `Commands:${data.commands\n .flatMap((cmd) => cmd.split(\"\\n\").map((l) => `\\n ${l}`))\n .join(\"\")}`,\n `Signature: ${bufferToHexaString(data.signature.slice(2), false)}`,\n ].join(\"\\n\"),\n );\n }\n\n hash(): string {\n return this.hashValue.orDefaultLazy(() => {\n const hashValue = sha256(this.bytes);\n return bufferToHexaString(hashValue, false);\n });\n }\n}\n"],
5
- "mappings": "AAAA,OACE,sBAAAA,EACA,oBAAAC,EACA,sBAAAC,MACK,kCACP,OAAS,UAAAC,MAAc,uBACvB,OAAS,UAAAC,EAAQ,QAAAC,EAAkB,WAAAC,EAAS,SAAAC,MAAa,YAOzD,OAAS,eAAAC,MAAmB,wBAE5B,OAAS,aAAAC,MAAiB,cAEnB,MAAMC,CAAU,CAId,YACYC,EACjBC,EACA,CAFiB,WAAAD,EAGjB,KAAK,KAAOC,EAAOP,EAAKE,EAAMK,CAAI,CAAC,EAAIN,CACzC,CARQ,UAA2BA,EAC3B,KASR,OAAO,QAAQO,EAAwB,CACrC,OAAO,IAAIH,EAAUR,EAAmBW,CAAG,GAAK,IAAI,UAAY,CAClE,CAEA,OAAO,SAASD,EAAgC,CAC9C,MAAME,EAAS,IAAIb,EAAiB,EACjC,qBAAqBO,EAAY,IAAK,CAAC,EACvC,oBAAoBA,EAAY,KAAMI,EAAK,MAAM,EACjD,sBAAsBJ,EAAY,UAAWI,EAAK,MAAM,EACxD,qBAAqBJ,EAAY,IAAKI,EAAK,SAAS,MAAM,EAC1D,MAAM,EAEHG,EAAkB,IAAId,EAC5BW,EAAK,SAAS,QAASI,GACrBD,EAAgB,gBAAgBC,EAAI,MAAM,CAAC,CAC7C,EACA,MAAMC,EAAWF,EAAgB,MAAM,EAEjCG,EAAY,IAAIjB,EAAiB,EACpC,sBAAsBO,EAAY,UAAWI,EAAK,SAAS,EAC3D,MAAM,EAEHD,EAAQ,IAAIV,EAAiB,EAChC,gBAAgBa,CAAM,EACtB,gBAAgBG,CAAQ,EACxB,gBAAgBC,CAAS,EACzB,MAAM,EAET,OAAO,IAAIR,EAAUC,EAAO,CAAE,GAAGC,EAAM,OAAAE,EAAQ,UAAAI,CAAU,CAAC,CAC5D,CAEA,UAAmB,CACjB,OAAOlB,EAAmB,KAAK,MAAO,EAAK,CAC7C,CAEA,OAAoB,CAClB,OAAO,KAAK,KACd,CAEA,OAAuD,CACrD,OAAO,KAAK,KAAK,cAAc,IAAM,CACnC,MAAMY,EAAO,IAAIH,EAAU,KAAK,KAAK,EAAE,eAAe,EACtD,YAAK,KAAOJ,EAAKO,CAAI,EACdA,CACT,CAAC,CACH,CAEA,SAA4C,CAC1C,OAAO,KAAK,MAAM,EACf,MAAOA,GACNR,EAAO,SAASQ,EAAK,SAAS,IAAKI,GAAQA,EAAI,QAAQ,CAAC,CAAC,EAAE,IACxDC,IAAc,CAAE,GAAGL,EAAM,SAAAK,CAAS,EACrC,CACF,EACC,IAAKL,GACJ,CACE,WAAWA,EAAK,MAAM,GACtB,WAAWZ,EAAmBY,EAAK,OAAQ,EAAK,CAAC,GACjD,YAAYA,EAAK,SACd,QAASI,GAAQA,EAAI,MAAM;AAAA,CAAI,EAAE,IAAKG,GAAM;AAAA,IAAOA,CAAC,EAAE,CAAC,EACvD,KAAK,EAAE,CAAC,GACX,cAAcnB,EAAmBY,EAAK,UAAU,MAAM,CAAC,EAAG,EAAK,CAAC,EAClE,EAAE,KAAK;AAAA,CAAI,CACb,CACJ,CAEA,MAAe,CACb,OAAO,KAAK,UAAU,cAAc,IAAM,CACxC,MAAMQ,EAAYjB,EAAO,KAAK,KAAK,EACnC,OAAOH,EAAmBoB,EAAW,EAAK,CAC5C,CAAC,CACH,CACF",
6
- "names": ["bufferToHexaString", "ByteArrayBuilder", "hexaStringToBuffer", "sha256", "Either", "Just", "Nothing", "Right", "GeneralTags", "TLVParser", "LKRPBlock", "bytes", "data", "hex", "header", "commandsBuilder", "cmd", "commands", "signature", "l", "hashValue"]
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
+ "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{hexaStringToBuffer as n}from"@ledgerhq/device-management-kit";import{Left as s,Right as b}from"purify-ts";import{LKRPParsingError as l}from"../../api/model/Errors";import{GeneralTags as m}from"../models/Tags";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(""),c=[...r,"10020102","11020304","0303040506"].join(""),o={...f,header:n(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(c)})}),describe("toString",()=>{it("should return the hex representation of the block",()=>{const e=d.fromHex(c);expect(e.toString()).toBe(c)})}),describe("toU8A",()=>{it("should return the bytes of the block",()=>{const e=new Uint8Array([1,2,3,4,5,6,7,8]),a=new d(e);expect(a.toU8A()).toBe(e)})}),describe("parse",()=>{it("should parse the block data correctly",()=>{const a=d.fromHex(c).parse();expect(a).toStrictEqual(b(o))}),it("should fail if the block data is invalid",()=>{const e=d.fromHex("invalid");expect(e.parse()).toStrictEqual(s(new l("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
@@ -20,5 +20,5 @@ import{hexaStringToBuffer as n}from"@ledgerhq/device-management-kit";import{Left
20
20
  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
21
21
  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
22
22
  `.replace(/\s/g,""),i=d.fromHex(e).toHuman();expect(i).toStrictEqual(b(["Parent: 1dbf1752c54b9fb54fb7c363c1e615f72fd961b797e6f09e6c1d1b6edb285a6d","Issuer: 0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021","Commands:"," Derive(0x15):"," path: m/0'/16'/1'"," groupKey: 034f37312d9babd8c032e1dd2de33da369fa1ce30f005bbba600d17330ba392cb2"," initializationVector: b6da2c97a3ec8b074f38f1508aed3335"," encryptedXpriv: d21f8f307702333f7a593bebd798a6b06eb5904277268a91350a3c1b1ee67c24b5a47d228c60d0fbc1524eac1bcf123e6e26b5d71708291cc08dcf49de0bb34bacf20093524ca6565d87c636b24475b2"," ephemeralPublicKey: 0293feb66412536d3d71d5c7afac96a36ea8c685889eebcf6f6f82685712fef150"," AddMember(0x11):"," name: debug-d4c61d"," publicKey: 03d4c61dda2aaf762954fce97396d9be0399e1dc75c3b790c7a34dde8596a11812"," permissions: 4294967295"," PublishKey(0x12):"," initializationVector: e7b736c40b14a830fb23aaded8eae544"," encryptedXpriv: df7e808c794675d0a2d466d4efc8ecd07d52368016100d34d6fdb8e6da86e92fbbb7110cb56429b83b1cb974ed4b705143f691b5b81468abd2c526266a6dee6df4fdf1a9d81fe74cda4f61c98960b4db"," recipient: 03d4c61dda2aaf762954fce97396d9be0399e1dc75c3b790c7a34dde8596a11812"," ephemeralPublicKey: 0245f11d7d78bd227645118abb20b407ff978df87a6bb3c4461d633766858f98f5","Signature: 3045022100a0ea9dee12f383132f9072ad4785a4151475d5704aa9ff7f9552e90347b4cebe022071a3e44c1f4fa64bc6e2f406fa00fcb46f701c99492912bf33c73edfb2d5d171"].join(`
23
- `)))})}),describe("hash",()=>{it("should return the hash of the block",()=>{const a=d.fromHex(c).hash();expect(a).toBe("7cf783bc15c062242ab92796237da3b192361da7645c488d5023698d4f9cc952")})})});
23
+ `)))})}),describe("hash",()=>{it("should return the hash of the block",()=>{const c=d.fromHex(a).hash();expect(c).toBe("7cf783bc15c062242ab92796237da3b192361da7645c488d5023698d4f9cc952")})})});
24
24
  //# sourceMappingURL=LKRPBlock.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/internal/utils/LKRPBlock.test.ts"],
4
- "sourcesContent": ["import { hexaStringToBuffer } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { LKRPParsingError } from \"@api/model/Errors\";\nimport { GeneralTags } from \"@internal/models/Tags\";\n\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: hexaStringToBuffer(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": "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",
6
- "names": ["hexaStringToBuffer", "Left", "Right", "LKRPParsingError", "GeneralTags", "LKRPBlock", "LKRPCommand", "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": "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",
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{bufferToHexaString as p,hexaStringToBuffer as u}from"@ledgerhq/device-management-kit";import{Either as y,Just as c,Maybe as f,MaybeAsync as b,Nothing as n,Right as P}from"purify-ts";import{EncryptionAlgo as g}from"../../api/crypto/CryptoService";import{CommandTags as h}from"../models/Tags";import{LKRPBlock as m}from"./LKRPBlock";import{TLVParser as d}from"./TLVParser";class l{constructor(e,a){this.bytes=e;this.blocks=a?c(P(a)):n}validation=n;blocks=n;path=n;static fromHex(e){return new l(u(e)??new Uint8Array)}static fromData(e,a){const t=[];let r=a??p(crypto.getRandomValues(new Uint8Array(32)),!1);for(const s of e){const i=m.fromData({...s,parent:r});r=i.hash(),t.push(i)}const o=t.reduce((s,i)=>new Uint8Array([...s,...i.toU8A()]),new Uint8Array);return new l(o,t)}toU8A(){return this.bytes}toString(){return p(this.bytes,!1)}parse(){return this.blocks.orDefaultLazy(()=>{const e=new d(this.bytes),a=[];for(;!e.state.isDone;){const r=e.state.offset,o=e.parseBlockData().map(s=>{const i=e.state.offset;return new m(this.bytes.slice(r,i),s)});if(a.push(o),o.isLeft())break}const t=y.sequence(a);return this.blocks=c(t),t})}toHuman(){return this.parse().map(e=>e.map(a=>a.toHuman())).chain(y.sequence).map(e=>e.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(e){return this.validation.orDefaultLazy(async()=>this.parse().map(t=>t.map(r=>r.parse().map(({parent:o})=>({parent:o,hash:()=>r.hash()})))).chain(y.sequence).toMaybe().map(async t=>{if(e&&t[0]&&e!==t[0].parent)return!1;for await(const[r,o]of t.entries()){const s=t[r+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(e=>e[0]).chain(e=>e.parse().toMaybe()).chainNullable(({commands:e})=>e[0]).chain(e=>e.parse().toMaybe()).chain(e=>{switch(e.type){case h.Derive:return c(e.path);case h.Seed:return c("m/0'");default:return n}})}),this.path}getMemberBlock(e){return this.parse().toMaybe().chain(a=>{for(const t of a){const r=t.parse();if(r.isRight()){const o=r.extract();for(const s of o.commands){const i=s.getPublicKey();if(i.isJust()&&i.extract()===e)return f.of(o)}}}return n})}hasMember(e){return this.getMemberBlock(e).isJust()}async getPublishedKey(e,a){return b.liftMaybe(this.getMemberBlock(a.getPublicKeyToHex()).chain(t=>{for(const r of t.commands){const o=r.getEncryptedPublishedKey();if(o.isJust())return o}return n})).map(async t=>{const r=(await a.deriveSharedSecret(t.ephemeralPublicKey)).slice(1),s=await e.importSymmetricKey(r,g.AES256_GCM).decrypt(t.initializationVector,t.encryptedXpriv);return{privateKey:s.slice(0,32),chainCode:s.slice(32)}})}}export{l 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 {\n bufferToHexaString,\n hexaStringToBuffer,\n} from \"@ledgerhq/device-management-kit\";\nimport { Either, Just, Maybe, MaybeAsync, Nothing, Right } from \"purify-ts\";\n\nimport { type CryptoService, EncryptionAlgo } from \"@api/crypto/CryptoService\";\nimport { type KeyPair } from \"@api/crypto/KeyPair\";\nimport { type LKRPParsingError } from \"@api/model/Errors\";\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\";\n\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(hexaStringToBuffer(hex) ?? new Uint8Array());\n }\n\n static fromData(\n blocksData: Omit<LKRPBlockData, \"parent\">[],\n parentHash?: string,\n ): LKRPBlockStream {\n const blocks: LKRPBlock[] = [];\n let hash =\n parentHash ??\n bufferToHexaString(crypto.getRandomValues(new Uint8Array(32)), false);\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 bufferToHexaString(this.bytes, false);\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 async getPublishedKey(\n cryptoService: CryptoService,\n keypair: KeyPair,\n ): Promise<Maybe<PublishedKey>> {\n return MaybeAsync.liftMaybe(\n this.getMemberBlock(keypair.getPublicKeyToHex()).chain(\n (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 ),\n ).map(async (published) => {\n const secret = (\n await keypair.deriveSharedSecret(published.ephemeralPublicKey)\n ).slice(1);\n const key = cryptoService.importSymmetricKey(\n secret,\n EncryptionAlgo.AES256_GCM,\n );\n const xpriv = await key.decrypt(\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": ["bufferToHexaString", "hexaStringToBuffer", "Either", "Just", "Maybe", "MaybeAsync", "Nothing", "Right", "EncryptionAlgo", "CommandTags", "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", "cryptoService", "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,4 +1,4 @@
1
- import{hexaStringToBuffer as c}from"@ledgerhq/device-management-kit";import{Just as p,Left as l,Right as s}from"purify-ts";import{LKRPParsingError as u}from"../../api/model/Errors";import{CommandTags as r}from"../models/Tags";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(`
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
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