@ledgerhq/device-signer-kit-bitcoin 0.0.0-signer-eth-20250122093657 → 0.0.0-signer-eth-plugin-fix-20250331141239

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 (181) hide show
  1. package/README.md +100 -32
  2. package/lib/cjs/api/app-binder/SignMessageDeviceActionTypes.js +1 -1
  3. package/lib/cjs/api/app-binder/SignMessageDeviceActionTypes.js.map +1 -1
  4. package/lib/cjs/index.js.map +1 -1
  5. package/lib/cjs/internal/DefaultSignerBtc.test.js +1 -1
  6. package/lib/cjs/internal/DefaultSignerBtc.test.js.map +2 -2
  7. package/lib/cjs/internal/app-binder/BtcAppBinder.js +1 -1
  8. package/lib/cjs/internal/app-binder/BtcAppBinder.js.map +3 -3
  9. package/lib/cjs/internal/app-binder/BtcAppBinder.test.js +1 -1
  10. package/lib/cjs/internal/app-binder/BtcAppBinder.test.js.map +3 -3
  11. package/lib/cjs/internal/app-binder/command/GetMasterFingerprintCommand.test.js +1 -1
  12. package/lib/cjs/internal/app-binder/command/GetMasterFingerprintCommand.test.js.map +2 -2
  13. package/lib/cjs/internal/app-binder/command/GetWalletAddressCommand.test.js +1 -1
  14. package/lib/cjs/internal/app-binder/command/GetWalletAddressCommand.test.js.map +2 -2
  15. package/lib/cjs/internal/app-binder/command/RegisterWalletAddressCommand.test.js +1 -1
  16. package/lib/cjs/internal/app-binder/command/RegisterWalletAddressCommand.test.js.map +2 -2
  17. package/lib/cjs/internal/app-binder/command/client-command-handlers/GetMerkleLeafIndexCommandHandler.test.js +1 -1
  18. package/lib/cjs/internal/app-binder/command/client-command-handlers/GetMerkleLeafIndexCommandHandler.test.js.map +2 -2
  19. package/lib/cjs/internal/app-binder/command/client-command-handlers/GetMerkleLeafProofCommandHandler.test.js +1 -1
  20. package/lib/cjs/internal/app-binder/command/client-command-handlers/GetMerkleLeafProofCommandHandler.test.js.map +3 -3
  21. package/lib/cjs/internal/app-binder/command/client-command-handlers/GetMoreElementsCommandHandler.test.js +1 -1
  22. package/lib/cjs/internal/app-binder/command/client-command-handlers/GetMoreElementsCommandHandler.test.js.map +2 -2
  23. package/lib/cjs/internal/app-binder/command/client-command-handlers/GetPreimageCommandHandler.test.js +1 -1
  24. package/lib/cjs/internal/app-binder/command/client-command-handlers/GetPreimageCommandHandler.test.js.map +2 -2
  25. package/lib/cjs/internal/app-binder/command/service/ClientCommandInterpreter.test.js +1 -1
  26. package/lib/cjs/internal/app-binder/command/service/ClientCommandInterpreter.test.js.map +2 -2
  27. package/lib/cjs/internal/app-binder/command/utils/bitcoinAppError.test.js +1 -1
  28. package/lib/cjs/internal/app-binder/command/utils/bitcoinAppError.test.js.map +2 -2
  29. package/lib/cjs/internal/app-binder/device-action/GetWalletAddress/GetWalletAddressDeviceAction.test.js +1 -1
  30. package/lib/cjs/internal/app-binder/device-action/GetWalletAddress/GetWalletAddressDeviceAction.test.js.map +3 -3
  31. package/lib/cjs/internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction.test.js +1 -1
  32. package/lib/cjs/internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction.test.js.map +3 -3
  33. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js +1 -1
  34. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js.map +3 -3
  35. package/lib/cjs/internal/app-binder/device-action/__test-utils__/makeInternalApi.js +1 -1
  36. package/lib/cjs/internal/app-binder/device-action/__test-utils__/makeInternalApi.js.map +3 -3
  37. package/lib/cjs/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.js +1 -1
  38. package/lib/cjs/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.js.map +2 -2
  39. package/lib/cjs/internal/app-binder/device-action/__test-utils__/setupSignPsbtDAMock.js +1 -1
  40. package/lib/cjs/internal/app-binder/device-action/__test-utils__/setupSignPsbtDAMock.js.map +2 -2
  41. package/lib/cjs/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.js +1 -1
  42. package/lib/cjs/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.js.map +3 -3
  43. package/lib/cjs/internal/app-binder/task/BuildPsbtTask.test.js +1 -1
  44. package/lib/cjs/internal/app-binder/task/BuildPsbtTask.test.js.map +2 -2
  45. package/lib/cjs/internal/app-binder/task/ContinueTask.test.js +1 -1
  46. package/lib/cjs/internal/app-binder/task/ContinueTask.test.js.map +2 -2
  47. package/lib/cjs/internal/app-binder/task/GetWalletAddressTask.test.js +1 -1
  48. package/lib/cjs/internal/app-binder/task/GetWalletAddressTask.test.js.map +2 -2
  49. package/lib/cjs/internal/app-binder/task/PrepareWalletPolicyTask.test.js +1 -1
  50. package/lib/cjs/internal/app-binder/task/PrepareWalletPolicyTask.test.js.map +2 -2
  51. package/lib/cjs/internal/app-binder/task/SignMessageTask.test.js +1 -1
  52. package/lib/cjs/internal/app-binder/task/SignMessageTask.test.js.map +2 -2
  53. package/lib/cjs/internal/app-binder/task/SignPsbtTask.test.js +1 -1
  54. package/lib/cjs/internal/app-binder/task/SignPsbtTask.test.js.map +2 -2
  55. package/lib/cjs/internal/app-binder/task/UpdatePsbtTask.test.js +1 -1
  56. package/lib/cjs/internal/app-binder/task/UpdatePsbtTask.test.js.map +2 -2
  57. package/lib/cjs/internal/data-store/model/DataStore.test.js +1 -1
  58. package/lib/cjs/internal/data-store/model/DataStore.test.js.map +2 -2
  59. package/lib/cjs/internal/data-store/service/DefaultDataStoreService.test.js +1 -1
  60. package/lib/cjs/internal/data-store/service/DefaultDataStoreService.test.js.map +2 -2
  61. package/lib/cjs/internal/merkle-tree/service/MerkleMapBuilder.test.js +1 -1
  62. package/lib/cjs/internal/merkle-tree/service/MerkleMapBuilder.test.js.map +2 -2
  63. package/lib/cjs/internal/merkle-tree/service/MerkleTreeBuilder.test.js +1 -1
  64. package/lib/cjs/internal/merkle-tree/service/MerkleTreeBuilder.test.js.map +2 -2
  65. package/lib/cjs/internal/psbt/service/psbt/DefaultPsbtMapper.test.js +1 -1
  66. package/lib/cjs/internal/psbt/service/psbt/DefaultPsbtMapper.test.js.map +2 -2
  67. package/lib/cjs/internal/use-cases/get-extended-public-key/GetExtendedPublicKeyUseCase.test.js +1 -1
  68. package/lib/cjs/internal/use-cases/get-extended-public-key/GetExtendedPublicKeyUseCase.test.js.map +2 -2
  69. package/lib/cjs/internal/use-cases/get-wallet-address/GetWalletAddressUseCase.test.js +1 -1
  70. package/lib/cjs/internal/use-cases/get-wallet-address/GetWalletAddressUseCase.test.js.map +2 -2
  71. package/lib/cjs/internal/use-cases/sign-message/SignMessageUseCase.test.js +1 -1
  72. package/lib/cjs/internal/use-cases/sign-message/SignMessageUseCase.test.js.map +2 -2
  73. package/lib/cjs/internal/use-cases/sign-psbt/SignPsbtUseCase.test.js +1 -1
  74. package/lib/cjs/internal/use-cases/sign-psbt/SignPsbtUseCase.test.js.map +2 -2
  75. package/lib/cjs/internal/use-cases/sign-transaction/SignTransactionUseCase.test.js +1 -1
  76. package/lib/cjs/internal/use-cases/sign-transaction/SignTransactionUseCase.test.js.map +2 -2
  77. package/lib/cjs/internal/wallet/service/DefaultWalletBuilder.test.js +1 -1
  78. package/lib/cjs/internal/wallet/service/DefaultWalletBuilder.test.js.map +2 -2
  79. package/lib/cjs/internal/wallet/service/DefaultWalletSerializer.test.js +1 -1
  80. package/lib/cjs/internal/wallet/service/DefaultWalletSerializer.test.js.map +2 -2
  81. package/lib/cjs/package.json +7 -6
  82. package/lib/esm/internal/DefaultSignerBtc.test.js +1 -1
  83. package/lib/esm/internal/DefaultSignerBtc.test.js.map +2 -2
  84. package/lib/esm/internal/app-binder/BtcAppBinder.js +1 -1
  85. package/lib/esm/internal/app-binder/BtcAppBinder.js.map +3 -3
  86. package/lib/esm/internal/app-binder/BtcAppBinder.test.js +1 -1
  87. package/lib/esm/internal/app-binder/BtcAppBinder.test.js.map +3 -3
  88. package/lib/esm/internal/app-binder/command/GetMasterFingerprintCommand.test.js +1 -1
  89. package/lib/esm/internal/app-binder/command/GetMasterFingerprintCommand.test.js.map +2 -2
  90. package/lib/esm/internal/app-binder/command/GetWalletAddressCommand.test.js +1 -1
  91. package/lib/esm/internal/app-binder/command/GetWalletAddressCommand.test.js.map +2 -2
  92. package/lib/esm/internal/app-binder/command/RegisterWalletAddressCommand.test.js +1 -1
  93. package/lib/esm/internal/app-binder/command/RegisterWalletAddressCommand.test.js.map +2 -2
  94. package/lib/esm/internal/app-binder/command/client-command-handlers/GetMerkleLeafIndexCommandHandler.test.js +1 -1
  95. package/lib/esm/internal/app-binder/command/client-command-handlers/GetMerkleLeafIndexCommandHandler.test.js.map +2 -2
  96. package/lib/esm/internal/app-binder/command/client-command-handlers/GetMerkleLeafProofCommandHandler.test.js +1 -1
  97. package/lib/esm/internal/app-binder/command/client-command-handlers/GetMerkleLeafProofCommandHandler.test.js.map +3 -3
  98. package/lib/esm/internal/app-binder/command/client-command-handlers/GetMoreElementsCommandHandler.test.js +1 -1
  99. package/lib/esm/internal/app-binder/command/client-command-handlers/GetMoreElementsCommandHandler.test.js.map +2 -2
  100. package/lib/esm/internal/app-binder/command/client-command-handlers/GetPreimageCommandHandler.test.js +1 -1
  101. package/lib/esm/internal/app-binder/command/client-command-handlers/GetPreimageCommandHandler.test.js.map +2 -2
  102. package/lib/esm/internal/app-binder/command/service/ClientCommandInterpreter.test.js +1 -1
  103. package/lib/esm/internal/app-binder/command/service/ClientCommandInterpreter.test.js.map +2 -2
  104. package/lib/esm/internal/app-binder/command/utils/bitcoinAppError.test.js +1 -1
  105. package/lib/esm/internal/app-binder/command/utils/bitcoinAppError.test.js.map +2 -2
  106. package/lib/esm/internal/app-binder/device-action/GetWalletAddress/GetWalletAddressDeviceAction.test.js +1 -1
  107. package/lib/esm/internal/app-binder/device-action/GetWalletAddress/GetWalletAddressDeviceAction.test.js.map +3 -3
  108. package/lib/esm/internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction.test.js +1 -1
  109. package/lib/esm/internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction.test.js.map +3 -3
  110. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js +1 -1
  111. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js.map +3 -3
  112. package/lib/esm/internal/app-binder/device-action/__test-utils__/makeInternalApi.js +1 -1
  113. package/lib/esm/internal/app-binder/device-action/__test-utils__/makeInternalApi.js.map +3 -3
  114. package/lib/esm/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.js +1 -1
  115. package/lib/esm/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.js.map +2 -2
  116. package/lib/esm/internal/app-binder/device-action/__test-utils__/setupSignPsbtDAMock.js +1 -1
  117. package/lib/esm/internal/app-binder/device-action/__test-utils__/setupSignPsbtDAMock.js.map +2 -2
  118. package/lib/esm/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.js +1 -1
  119. package/lib/esm/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.js.map +3 -3
  120. package/lib/esm/internal/app-binder/task/BuildPsbtTask.test.js +1 -1
  121. package/lib/esm/internal/app-binder/task/BuildPsbtTask.test.js.map +2 -2
  122. package/lib/esm/internal/app-binder/task/ContinueTask.test.js +1 -1
  123. package/lib/esm/internal/app-binder/task/ContinueTask.test.js.map +2 -2
  124. package/lib/esm/internal/app-binder/task/GetWalletAddressTask.test.js +1 -1
  125. package/lib/esm/internal/app-binder/task/GetWalletAddressTask.test.js.map +2 -2
  126. package/lib/esm/internal/app-binder/task/PrepareWalletPolicyTask.test.js +1 -1
  127. package/lib/esm/internal/app-binder/task/PrepareWalletPolicyTask.test.js.map +2 -2
  128. package/lib/esm/internal/app-binder/task/SignMessageTask.test.js +1 -1
  129. package/lib/esm/internal/app-binder/task/SignMessageTask.test.js.map +2 -2
  130. package/lib/esm/internal/app-binder/task/SignPsbtTask.test.js +1 -1
  131. package/lib/esm/internal/app-binder/task/SignPsbtTask.test.js.map +2 -2
  132. package/lib/esm/internal/app-binder/task/UpdatePsbtTask.test.js +1 -1
  133. package/lib/esm/internal/app-binder/task/UpdatePsbtTask.test.js.map +2 -2
  134. package/lib/esm/internal/data-store/model/DataStore.test.js +1 -1
  135. package/lib/esm/internal/data-store/model/DataStore.test.js.map +2 -2
  136. package/lib/esm/internal/data-store/service/DefaultDataStoreService.test.js +1 -1
  137. package/lib/esm/internal/data-store/service/DefaultDataStoreService.test.js.map +2 -2
  138. package/lib/esm/internal/merkle-tree/service/MerkleMapBuilder.test.js +1 -1
  139. package/lib/esm/internal/merkle-tree/service/MerkleMapBuilder.test.js.map +2 -2
  140. package/lib/esm/internal/merkle-tree/service/MerkleTreeBuilder.test.js +1 -1
  141. package/lib/esm/internal/merkle-tree/service/MerkleTreeBuilder.test.js.map +2 -2
  142. package/lib/esm/internal/psbt/service/psbt/DefaultPsbtMapper.test.js +1 -1
  143. package/lib/esm/internal/psbt/service/psbt/DefaultPsbtMapper.test.js.map +2 -2
  144. package/lib/esm/internal/use-cases/get-extended-public-key/GetExtendedPublicKeyUseCase.test.js +1 -1
  145. package/lib/esm/internal/use-cases/get-extended-public-key/GetExtendedPublicKeyUseCase.test.js.map +2 -2
  146. package/lib/esm/internal/use-cases/get-wallet-address/GetWalletAddressUseCase.test.js +1 -1
  147. package/lib/esm/internal/use-cases/get-wallet-address/GetWalletAddressUseCase.test.js.map +2 -2
  148. package/lib/esm/internal/use-cases/sign-message/SignMessageUseCase.test.js +1 -1
  149. package/lib/esm/internal/use-cases/sign-message/SignMessageUseCase.test.js.map +2 -2
  150. package/lib/esm/internal/use-cases/sign-psbt/SignPsbtUseCase.test.js +1 -1
  151. package/lib/esm/internal/use-cases/sign-psbt/SignPsbtUseCase.test.js.map +2 -2
  152. package/lib/esm/internal/use-cases/sign-transaction/SignTransactionUseCase.test.js +1 -1
  153. package/lib/esm/internal/use-cases/sign-transaction/SignTransactionUseCase.test.js.map +2 -2
  154. package/lib/esm/internal/wallet/service/DefaultWalletBuilder.test.js +1 -1
  155. package/lib/esm/internal/wallet/service/DefaultWalletBuilder.test.js.map +2 -2
  156. package/lib/esm/internal/wallet/service/DefaultWalletSerializer.test.js +1 -1
  157. package/lib/esm/internal/wallet/service/DefaultWalletSerializer.test.js.map +2 -2
  158. package/lib/esm/package.json +7 -6
  159. package/lib/types/api/app-binder/SignMessageDeviceActionTypes.d.ts +1 -12
  160. package/lib/types/api/app-binder/SignMessageDeviceActionTypes.d.ts.map +1 -1
  161. package/lib/types/internal/app-binder/BtcAppBinder.d.ts.map +1 -1
  162. package/lib/types/internal/app-binder/device-action/__test-utils__/makeInternalApi.d.ts +2 -1
  163. package/lib/types/internal/app-binder/device-action/__test-utils__/makeInternalApi.d.ts.map +1 -1
  164. package/lib/types/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.d.ts.map +1 -1
  165. package/lib/types/internal/app-binder/device-action/__test-utils__/setupSignPsbtDAMock.d.ts.map +1 -1
  166. package/lib/types/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.d.ts +5 -2
  167. package/lib/types/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.d.ts.map +1 -1
  168. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  169. package/package.json +11 -10
  170. package/lib/cjs/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.js +0 -2
  171. package/lib/cjs/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.js.map +0 -7
  172. package/lib/cjs/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.test.js +0 -2
  173. package/lib/cjs/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.test.js.map +0 -7
  174. package/lib/esm/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.js +0 -2
  175. package/lib/esm/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.js.map +0 -7
  176. package/lib/esm/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.test.js +0 -2
  177. package/lib/esm/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.test.js.map +0 -7
  178. package/lib/types/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.d.ts +0 -19
  179. package/lib/types/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.d.ts.map +0 -1
  180. package/lib/types/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.test.d.ts +0 -2
  181. package/lib/types/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.test.d.ts.map +0 -1
package/README.md CHANGED
@@ -9,16 +9,17 @@ This module provides the implementation of the Ledger Bitcoin signer of the Devi
9
9
 
10
10
  ## 🔹 Index
11
11
 
12
- 1. [How it works](#how-it-works)
13
- 2. [Installation](#installation)
14
- 3. [Initialisation](#initialisation)
15
- 4. [Use Cases](#use-cases)
12
+ 1. [How it works](#-how-it-works)
13
+ 2. [Installation](#-installation)
14
+ 3. [Initialisation](#-initialisation)
15
+ 4. [Use Cases](#-use-cases)
16
16
  - [Get Extended Public Key](#use-case-1-get-extended-public-key)
17
17
  - [Sign Message](#use-case-2-sign-message)
18
18
  - [Sign Partially Signed Transaction (PSBT)](#use-case-3-sign-psbt)
19
19
  - [Sign Transaction](#use-case-4-sign-transaction)
20
- 5. [Observable Behavior](#observable-behavior)
21
- 6. [Example](#example)
20
+ - [Get Wallet address](#use-case-5-get-wallet-address)
21
+ 5. [Observable Behavior](#-observable-behavior)
22
+ 6. [Example](#-example)
22
23
 
23
24
  ## 🔹 How it works
24
25
 
@@ -39,7 +40,7 @@ npm install @ledgerhq/device-signer-kit-bitcoin
39
40
  To initialise a Bitcoin signer instance, you need a Ledger Device Management Kit instance and the ID of the session of the connected device. Use the `SignerBtcBuilder` along with the [Context Module](https://github.com/LedgerHQ/device-sdk-ts/tree/develop/packages/signer/context-module) by default developed by Ledger:
40
41
 
41
42
  ```typescript
42
- // Initialize a Bitcoin signer instance
43
+ // Initialise a Bitcoin signer instance
43
44
  const signerBitcoin = new SignerBtcBuilder({ sdk, sessionId }).build();
44
45
  ```
45
46
 
@@ -49,7 +50,7 @@ The `SignerBtcBuilder.build()` method will return a `SignerBitcoin` instance tha
49
50
 
50
51
  ---
51
52
 
52
- ### Use Case 1: Get Extended Public Key
53
+ ### Use Case 1: Get extended public key
53
54
 
54
55
  This method allows users to retrieve the Bitcoin extended public key based on a given `derivationPath`.
55
56
 
@@ -65,7 +66,7 @@ const { observable, cancel } = signerBitcoin.getExtendedPublicKey(
65
66
  - `derivationPath`
66
67
 
67
68
  - **Required**
68
- - **Type:** `string` (e.g. `"84'/0'/0'"` for a Native Segwit wallet)
69
+ - **Type:** `string` (e.g. `"84'/0'/0'"` for a Native SegWit wallet)
69
70
  - The derivation path used for the Bitcoin address. See [here](https://www.ledger.com/blog/understanding-crypto-addresses-and-derivation-paths) for more information.
70
71
 
71
72
  - `options`
@@ -83,7 +84,7 @@ const { observable, cancel } = signerBitcoin.getExtendedPublicKey(
83
84
 
84
85
  #### **Returns**
85
86
 
86
- - `observable` Emits DeviceActionState updates, including the following details::
87
+ - `observable` Emits DeviceActionState updates, including the following details:
87
88
 
88
89
  ```typescript
89
90
  type GetAddressCommandResponse = {
@@ -95,7 +96,7 @@ type GetAddressCommandResponse = {
95
96
 
96
97
  ---
97
98
 
98
- ### Use Case 2: Sign Message
99
+ ### Use Case 2: Sign message
99
100
 
100
101
  This method allows users to sign a text string that is displayed on Ledger devices.
101
102
 
@@ -111,18 +112,18 @@ const { observable, cancel } = signerBitcoin.signMessage(
111
112
  - `derivationPath`
112
113
 
113
114
  - **Required**
114
- - **Type:** `string` (e.g. `"84'/0'/0'"` for a Native Segwit wallet)
115
+ - **Type:** `string` (e.g. `"84'/0'/0'"` for a Native SegWit wallet)
115
116
  - The derivation path used for the Bitcoin address. See [here](https://www.ledger.com/blog/understanding-crypto-addresses-and-derivation-paths) for more information.
116
117
 
117
118
  - `message`
118
119
 
119
120
  - **Required**
120
- - **Type:**: `string`
121
+ - **Type:** `string`
121
122
  - The message to be signed, which will be displayed on the Ledger device.
122
123
 
123
124
  #### **Returns**
124
125
 
125
- - `observable` Emits DeviceActionState updates, including the following details::
126
+ - `observable` Emits DeviceActionState updates, including the following details:
126
127
 
127
128
  ```typescript
128
129
  type Signature = {
@@ -159,7 +160,7 @@ const { observable, cancel } = signerBitcoin.signPsbt(
159
160
 
160
161
  class DefaultWallet {
161
162
  constructor(
162
- // Derivation path without master key respresentation.
163
+ // Derivation path without master key representation.
163
164
  // Format example: /44'/0'/0'
164
165
  public derivationPath: string,
165
166
  public template: DefaultDescriptorTemplate,
@@ -178,19 +179,38 @@ const { observable, cancel } = signerBitcoin.signPsbt(
178
179
 
179
180
  - `psbt`
180
181
  - **Required**
181
- - **Type:** `string`
182
- - The base64 psbt string
182
+ - **Type:** `string | Psbt`
183
+ - A base64/hex psbt string or [bitcoin-js Psbt](https://github.com/bitcoinjs/bitcoinjs-lib/blob/151173f05e26a9af7c98d8d1e3f90e97185955f1/ts_src/psbt.ts#L131)
183
184
 
184
185
  #### **Returns**
185
186
 
186
- - `observable` Emits DeviceActionState updates, including the following details::
187
+ - `observable` Emits DeviceActionState updates, including the following details:
187
188
 
188
189
  ```typescript
189
- type Signature = {
190
- r: `0x${string}`; // R component of the signature
191
- s: `0x${string}`; // S component of the signature
192
- v: number; // Recovery parameter
190
+ type PartialSignature = {
191
+ inputIndex: number;
192
+ pubkey: Uint8Array;
193
+ signature: Uint8Array;
194
+ tapleafHash?: Uint8Array;
193
195
  };
196
+
197
+ type MusigPubNonce = {
198
+ inputIndex: number;
199
+ participantPubkey: Uint8Array;
200
+ aggregatedPubkey: Uint8Array;
201
+ tapleafHash: Uint8Array;
202
+ pubnonce: Uint8Array;
203
+ };
204
+
205
+ type MusigPartialSignature = {
206
+ inputIndex: number;
207
+ participantPubkey: Uint8Array;
208
+ aggregatedPubkey: Uint8Array;
209
+ tapleafHash: Uint8Array;
210
+ partialSignature: Uint8Array;
211
+ };
212
+
213
+ type PsbtSignature = PartialSignature | MusigPartialSignature | MusigPubNonce;
194
214
  ```
195
215
 
196
216
  - `cancel` A function to cancel the action on the Ledger device.
@@ -220,7 +240,7 @@ const { observable, cancel } = signerBitcoin.signTransaction(
220
240
 
221
241
  class DefaultWallet {
222
242
  constructor(
223
- // Derivation path without master key respresentation.
243
+ // Derivation path without master key representation.
224
244
  // Format example: /44'/0'/0'
225
245
  public derivationPath: string,
226
246
  public template: DefaultDescriptorTemplate,
@@ -239,23 +259,71 @@ const { observable, cancel } = signerBitcoin.signTransaction(
239
259
 
240
260
  - `psbt`
241
261
  - **Required**
242
- - **Type:** `string`
243
- - The base64 psbt string
262
+ - **Type:** `string | Psbt`
263
+ - A base64/hex psbt string or [bitcoin-js Psbt](https://github.com/bitcoinjs/bitcoinjs-lib/blob/151173f05e26a9af7c98d8d1e3f90e97185955f1/ts_src/psbt.ts#L131)
244
264
 
245
265
  #### **Returns**
246
266
 
247
- - `observable` Emits DeviceActionState updates, including the following details::
267
+ - `observable` Emits DeviceActionState updates, including the following details:
248
268
 
249
269
  ```typescript
250
- type Signature = {
251
- r: `0x${string}`; // R component of the signature
252
- s: `0x${string}`; // S component of the signature
253
- v: number; // Recovery parameter
270
+ type TransactionHash = `0x${string}`;
271
+ ```
272
+
273
+ - `cancel` A function to cancel the action on the Ledger device.
274
+
275
+ ### Use Case 5: Get wallet address
276
+
277
+ This method allows users to get the wallet address linked to a Ledger device.
278
+
279
+ ```typescript
280
+ const { observable, cancel } = signerBitcoin.getWalletAddress(
281
+ derivationPath,
282
+ addressIndex,
283
+ options,
284
+ );
285
+ ```
286
+
287
+ #### **Parameters**
288
+
289
+ - `derivationPath`
290
+
291
+ - **Required**
292
+ - **Type:** `string` (e.g. `"84'/0'/0'"` for a Native SegWit wallet)
293
+ - The derivation path used for the Bitcoin address. See [here](https://www.ledger.com/blog/understanding-crypto-addresses-and-derivation-paths) for more information.
294
+
295
+ - `addressIndex`
296
+
297
+ - **Required**
298
+ - **Type:** `number`
299
+ - The desired address index on the Ledger device.
300
+
301
+ - `options`
302
+
303
+ - Optional
304
+ - Type: `WalletAddressOptions`
305
+
306
+ ```typescript
307
+ type WalletAddressOptions = {
308
+ checkOnDevice?: boolean;
309
+ change?: boolean;
310
+ };
311
+ ```
312
+
313
+ #### **Returns**
314
+
315
+ - `observable` Emits DeviceActionState updates, including the following details:
316
+
317
+ ```typescript
318
+ type WalletAddress = {
319
+ address: string;
254
320
  };
255
321
  ```
256
322
 
257
323
  - `cancel` A function to cancel the action on the Ledger device.
258
324
 
325
+ ---
326
+
259
327
  ## 🔹 Observable Behavior
260
328
 
261
329
  Each method returns an [Observable](https://rxjs.dev/guide/observable) emitting updates structured as [`DeviceActionState`](https://github.com/LedgerHQ/device-sdk-ts/blob/develop/packages/device-management-kit/src/api/device-action/model/DeviceActionState.ts). These updates reflect the operation’s progress and status:
@@ -299,8 +367,8 @@ observable.subscribe({
299
367
  }
300
368
  case DeviceActionStatus.Error: {
301
369
  const { error } = state;
302
- // Access the error here if occured
303
- console.log("An error occured during the action: ", error);
370
+ // Access the error here if occurred
371
+ console.log("An error occurred during the action: ", error);
304
372
  break;
305
373
  }
306
374
  }
@@ -1,2 +1,2 @@
1
- "use strict";var i=Object.defineProperty;var o=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var s=Object.prototype.hasOwnProperty;var g=(r,e,a,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of p(e))!s.call(r,t)&&t!==a&&i(r,t,{get:()=>e[t],enumerable:!(n=o(e,t))||n.enumerable});return r};var u=r=>g(i({},"__esModule",{value:!0}),r);var S={};module.exports=u(S);
1
+ "use strict";var p=Object.defineProperty;var o=Object.getOwnPropertyDescriptor;var s=Object.getOwnPropertyNames;var a=Object.prototype.hasOwnProperty;var g=(r,e,i,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of s(e))!a.call(r,t)&&t!==i&&p(r,t,{get:()=>e[t],enumerable:!(n=o(e,t))||n.enumerable});return r};var u=r=>g(p({},"__esModule",{value:!0}),r);var A={};module.exports=u(A);
2
2
  //# sourceMappingURL=SignMessageDeviceActionTypes.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/api/app-binder/SignMessageDeviceActionTypes.ts"],
4
- "sourcesContent": ["import {\n type CommandErrorResult,\n type DeviceActionState,\n type ExecuteDeviceActionReturnType,\n type OpenAppDAError,\n type OpenAppDARequiredInteraction,\n type UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type Signature } from \"@api/model/Signature\";\nimport { type BtcErrorCodes } from \"@internal/app-binder/command/utils/bitcoinAppErrors\";\nimport { type DataStoreService } from \"@internal/data-store/service/DataStoreService\";\n\nexport type SignMessageDAOutput = Signature;\n\nexport type SignMessageDAInput = {\n readonly derivationPath: string;\n readonly message: string;\n readonly dataStoreService: DataStoreService;\n};\n\nexport type SignMessageDAError =\n | OpenAppDAError\n | CommandErrorResult<BtcErrorCodes>[\"error\"];\n\ntype SignMessageDARequiredInteraction =\n | OpenAppDARequiredInteraction\n | UserInteractionRequired.SignPersonalMessage;\n\nexport type SignMessageDAIntermediateValue = {\n requiredUserInteraction: SignMessageDARequiredInteraction;\n};\n\nexport type SignMessageDAState = DeviceActionState<\n SignMessageDAOutput,\n SignMessageDAError,\n SignMessageDAIntermediateValue\n>;\n\nexport type SignMessageDAInternalState = {\n readonly error: SignMessageDAError | null;\n readonly signature: Signature | null;\n};\n\nexport type SignMessageDAReturnType = ExecuteDeviceActionReturnType<\n SignMessageDAOutput,\n SignMessageDAError,\n SignMessageDAIntermediateValue\n>;\n"],
4
+ "sourcesContent": ["import {\n type CommandErrorResult,\n type ExecuteDeviceActionReturnType,\n type OpenAppDAError,\n type OpenAppDARequiredInteraction,\n type UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type Signature } from \"@api/model/Signature\";\nimport { type BtcErrorCodes } from \"@internal/app-binder/command/utils/bitcoinAppErrors\";\n\nexport type SignMessageDAOutput = Signature;\n\nexport type SignMessageDAError =\n | OpenAppDAError\n | CommandErrorResult<BtcErrorCodes>[\"error\"];\n\ntype SignMessageDARequiredInteraction =\n | OpenAppDARequiredInteraction\n | UserInteractionRequired.SignPersonalMessage;\n\nexport type SignMessageDAIntermediateValue = {\n requiredUserInteraction: SignMessageDARequiredInteraction;\n};\n\nexport type SignMessageDAReturnType = ExecuteDeviceActionReturnType<\n SignMessageDAOutput,\n SignMessageDAError,\n SignMessageDAIntermediateValue\n>;\n"],
5
5
  "mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
6
6
  "names": ["SignMessageDeviceActionTypes_exports", "__toCommonJS"]
7
7
  }
@@ -3,5 +3,5 @@
3
3
  "sources": ["../../src/index.ts"],
4
4
  "sourcesContent": ["// inversify\nimport \"reflect-metadata\";\n\nexport * from \"@api/index\";\n"],
5
5
  "mappings": "iaAAA,IAAAA,EAAA,kBAAAC,EAAAD,GACA,IAAAE,EAAO,4BAEPC,EAAAH,EAAc,sBAHd",
6
- "names": ["src_exports", "__toCommonJS", "import_reflect_metadata", "__reExport"]
6
+ "names": ["index_exports", "__toCommonJS", "import_reflect_metadata", "__reExport"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var n=require("../api/model/Wallet"),t=require("./DefaultSignerBtc"),o=require("./use-cases/get-extended-public-key/GetExtendedPublicKeyUseCase"),a=require("./use-cases/sign-psbt/SignPsbtUseCase"),c=require("./use-cases/sign-transaction/SignTransactionUseCase"),r=require("./use-cases/sign-message/SignMessageUseCase");describe("DefaultSignerBtc",()=>{it("should be defined",()=>{const e=new t.DefaultSignerBtc({dmk:{},sessionId:"session-id"});expect(e).toBeDefined()}),it("should call getExtendedPublicKeyUseCase",()=>{jest.spyOn(o.GetExtendedPublicKeyUseCase.prototype,"execute");const e="session-id",s={executeDeviceAction:jest.fn()};new t.DefaultSignerBtc({dmk:s,sessionId:e}).getExtendedPublicKey("44'/0'/0'/0/0",{checkOnDevice:!0}),expect(o.GetExtendedPublicKeyUseCase.prototype.execute).toHaveBeenCalled()}),it("should call signMessageUseCase",()=>{jest.spyOn(r.SignMessageUseCase.prototype,"execute");const e="session-id",s={executeDeviceAction:jest.fn()};new t.DefaultSignerBtc({dmk:s,sessionId:e}).signMessage("44'/0'/0'/0/0","message"),expect(r.SignMessageUseCase.prototype.execute).toHaveBeenCalled()}),it("should call signPsbtUseCase",()=>{jest.spyOn(a.SignPsbtUseCase.prototype,"execute");const e="session-id",s={executeDeviceAction:jest.fn()};new t.DefaultSignerBtc({dmk:s,sessionId:e}).signPsbt(new n.DefaultWallet("44'/0'/0'",n.DefaultDescriptorTemplate.NATIVE_SEGWIT),""),expect(a.SignPsbtUseCase.prototype.execute).toHaveBeenCalled()}),it("should call signTransactionUseCase",()=>{jest.spyOn(c.SignTransactionUseCase.prototype,"execute");const e="session-id",s={executeDeviceAction:jest.fn()};new t.DefaultSignerBtc({dmk:s,sessionId:e}).signTransaction(new n.DefaultWallet("44'/0'/0'",n.DefaultDescriptorTemplate.NATIVE_SEGWIT),""),expect(c.SignTransactionUseCase.prototype.execute).toHaveBeenCalled()})});
1
+ "use strict";var n=require("../api/model/Wallet"),t=require("./DefaultSignerBtc"),o=require("./use-cases/get-extended-public-key/GetExtendedPublicKeyUseCase"),a=require("./use-cases/sign-psbt/SignPsbtUseCase"),c=require("./use-cases/sign-transaction/SignTransactionUseCase"),r=require("./use-cases/sign-message/SignMessageUseCase");describe("DefaultSignerBtc",()=>{it("should be defined",()=>{const e=new t.DefaultSignerBtc({dmk:{},sessionId:"session-id"});expect(e).toBeDefined()}),it("should call getExtendedPublicKeyUseCase",()=>{vi.spyOn(o.GetExtendedPublicKeyUseCase.prototype,"execute");const e="session-id",s={executeDeviceAction:vi.fn()};new t.DefaultSignerBtc({dmk:s,sessionId:e}).getExtendedPublicKey("44'/0'/0'/0/0",{checkOnDevice:!0}),expect(o.GetExtendedPublicKeyUseCase.prototype.execute).toHaveBeenCalled()}),it("should call signMessageUseCase",()=>{vi.spyOn(r.SignMessageUseCase.prototype,"execute");const e="session-id",s={executeDeviceAction:vi.fn()};new t.DefaultSignerBtc({dmk:s,sessionId:e}).signMessage("44'/0'/0'/0/0","message"),expect(r.SignMessageUseCase.prototype.execute).toHaveBeenCalled()}),it("should call signPsbtUseCase",()=>{vi.spyOn(a.SignPsbtUseCase.prototype,"execute");const e="session-id",s={executeDeviceAction:vi.fn()};new t.DefaultSignerBtc({dmk:s,sessionId:e}).signPsbt(new n.DefaultWallet("44'/0'/0'",n.DefaultDescriptorTemplate.NATIVE_SEGWIT),""),expect(a.SignPsbtUseCase.prototype.execute).toHaveBeenCalled()}),it("should call signTransactionUseCase",()=>{vi.spyOn(c.SignTransactionUseCase.prototype,"execute");const e="session-id",s={executeDeviceAction:vi.fn()};new t.DefaultSignerBtc({dmk:s,sessionId:e}).signTransaction(new n.DefaultWallet("44'/0'/0'",n.DefaultDescriptorTemplate.NATIVE_SEGWIT),""),expect(c.SignTransactionUseCase.prototype.execute).toHaveBeenCalled()})});
2
2
  //# sourceMappingURL=DefaultSignerBtc.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/internal/DefaultSignerBtc.test.ts"],
4
- "sourcesContent": ["import { type DeviceManagementKit } from \"@ledgerhq/device-management-kit\";\n\nimport { DefaultDescriptorTemplate, DefaultWallet } from \"@api/model/Wallet\";\nimport { DefaultSignerBtc } from \"@internal/DefaultSignerBtc\";\nimport { GetExtendedPublicKeyUseCase } from \"@internal/use-cases/get-extended-public-key/GetExtendedPublicKeyUseCase\";\nimport { SignPsbtUseCase } from \"@internal/use-cases/sign-psbt/SignPsbtUseCase\";\nimport { SignTransactionUseCase } from \"@internal/use-cases/sign-transaction/SignTransactionUseCase\";\n\nimport { SignMessageUseCase } from \"./use-cases/sign-message/SignMessageUseCase\";\n\ndescribe(\"DefaultSignerBtc\", () => {\n it(\"should be defined\", () => {\n const signer = new DefaultSignerBtc({\n dmk: {} as DeviceManagementKit,\n sessionId: \"session-id\",\n });\n expect(signer).toBeDefined();\n });\n\n it(\"should call getExtendedPublicKeyUseCase\", () => {\n jest.spyOn(GetExtendedPublicKeyUseCase.prototype, \"execute\");\n const sessionId = \"session-id\";\n const dmk = {\n executeDeviceAction: jest.fn(),\n } as unknown as DeviceManagementKit;\n const signer = new DefaultSignerBtc({ dmk, sessionId });\n signer.getExtendedPublicKey(\"44'/0'/0'/0/0\", {\n checkOnDevice: true,\n });\n expect(GetExtendedPublicKeyUseCase.prototype.execute).toHaveBeenCalled();\n });\n\n it(\"should call signMessageUseCase\", () => {\n jest.spyOn(SignMessageUseCase.prototype, \"execute\");\n const sessionId = \"session-id\";\n const dmk = {\n executeDeviceAction: jest.fn(),\n } as unknown as DeviceManagementKit;\n const derivationPath = \"44'/0'/0'/0/0\";\n const message = \"message\";\n const signer = new DefaultSignerBtc({ dmk, sessionId });\n signer.signMessage(derivationPath, message);\n expect(SignMessageUseCase.prototype.execute).toHaveBeenCalled();\n });\n it(\"should call signPsbtUseCase\", () => {\n jest.spyOn(SignPsbtUseCase.prototype, \"execute\");\n const sessionId = \"session-id\";\n const dmk = {\n executeDeviceAction: jest.fn(),\n } as unknown as DeviceManagementKit;\n const signer = new DefaultSignerBtc({ dmk, sessionId });\n signer.signPsbt(\n new DefaultWallet(\"44'/0'/0'\", DefaultDescriptorTemplate.NATIVE_SEGWIT),\n \"\",\n );\n expect(SignPsbtUseCase.prototype.execute).toHaveBeenCalled();\n });\n it(\"should call signTransactionUseCase\", () => {\n jest.spyOn(SignTransactionUseCase.prototype, \"execute\");\n const sessionId = \"session-id\";\n const dmk = {\n executeDeviceAction: jest.fn(),\n } as unknown as DeviceManagementKit;\n const signer = new DefaultSignerBtc({ dmk, sessionId });\n signer.signTransaction(\n new DefaultWallet(\"44'/0'/0'\", DefaultDescriptorTemplate.NATIVE_SEGWIT),\n \"\",\n );\n expect(SignTransactionUseCase.prototype.execute).toHaveBeenCalled();\n });\n});\n"],
5
- "mappings": "aAEA,IAAAA,EAAyD,6BACzDC,EAAiC,sCACjCC,EAA4C,mFAC5CC,EAAgC,yDAChCC,EAAuC,uEAEvCC,EAAmC,uDAEnC,SAAS,mBAAoB,IAAM,CACjC,GAAG,oBAAqB,IAAM,CAC5B,MAAMC,EAAS,IAAI,mBAAiB,CAClC,IAAK,CAAC,EACN,UAAW,YACb,CAAC,EACD,OAAOA,CAAM,EAAE,YAAY,CAC7B,CAAC,EAED,GAAG,0CAA2C,IAAM,CAClD,KAAK,MAAM,8BAA4B,UAAW,SAAS,EAC3D,MAAMC,EAAY,aACZC,EAAM,CACV,oBAAqB,KAAK,GAAG,CAC/B,EACe,IAAI,mBAAiB,CAAE,IAAAA,EAAK,UAAAD,CAAU,CAAC,EAC/C,qBAAqB,gBAAiB,CAC3C,cAAe,EACjB,CAAC,EACD,OAAO,8BAA4B,UAAU,OAAO,EAAE,iBAAiB,CACzE,CAAC,EAED,GAAG,iCAAkC,IAAM,CACzC,KAAK,MAAM,qBAAmB,UAAW,SAAS,EAClD,MAAMA,EAAY,aACZC,EAAM,CACV,oBAAqB,KAAK,GAAG,CAC/B,EAGe,IAAI,mBAAiB,CAAE,IAAAA,EAAK,UAAAD,CAAU,CAAC,EAC/C,YAHgB,gBACP,SAE0B,EAC1C,OAAO,qBAAmB,UAAU,OAAO,EAAE,iBAAiB,CAChE,CAAC,EACD,GAAG,8BAA+B,IAAM,CACtC,KAAK,MAAM,kBAAgB,UAAW,SAAS,EAC/C,MAAMA,EAAY,aACZC,EAAM,CACV,oBAAqB,KAAK,GAAG,CAC/B,EACe,IAAI,mBAAiB,CAAE,IAAAA,EAAK,UAAAD,CAAU,CAAC,EAC/C,SACL,IAAI,gBAAc,YAAa,4BAA0B,aAAa,EACtE,EACF,EACA,OAAO,kBAAgB,UAAU,OAAO,EAAE,iBAAiB,CAC7D,CAAC,EACD,GAAG,qCAAsC,IAAM,CAC7C,KAAK,MAAM,yBAAuB,UAAW,SAAS,EACtD,MAAMA,EAAY,aACZC,EAAM,CACV,oBAAqB,KAAK,GAAG,CAC/B,EACe,IAAI,mBAAiB,CAAE,IAAAA,EAAK,UAAAD,CAAU,CAAC,EAC/C,gBACL,IAAI,gBAAc,YAAa,4BAA0B,aAAa,EACtE,EACF,EACA,OAAO,yBAAuB,UAAU,OAAO,EAAE,iBAAiB,CACpE,CAAC,CACH,CAAC",
4
+ "sourcesContent": ["import { type DeviceManagementKit } from \"@ledgerhq/device-management-kit\";\n\nimport { DefaultDescriptorTemplate, DefaultWallet } from \"@api/model/Wallet\";\nimport { DefaultSignerBtc } from \"@internal/DefaultSignerBtc\";\nimport { GetExtendedPublicKeyUseCase } from \"@internal/use-cases/get-extended-public-key/GetExtendedPublicKeyUseCase\";\nimport { SignPsbtUseCase } from \"@internal/use-cases/sign-psbt/SignPsbtUseCase\";\nimport { SignTransactionUseCase } from \"@internal/use-cases/sign-transaction/SignTransactionUseCase\";\n\nimport { SignMessageUseCase } from \"./use-cases/sign-message/SignMessageUseCase\";\n\ndescribe(\"DefaultSignerBtc\", () => {\n it(\"should be defined\", () => {\n const signer = new DefaultSignerBtc({\n dmk: {} as DeviceManagementKit,\n sessionId: \"session-id\",\n });\n expect(signer).toBeDefined();\n });\n\n it(\"should call getExtendedPublicKeyUseCase\", () => {\n vi.spyOn(GetExtendedPublicKeyUseCase.prototype, \"execute\");\n const sessionId = \"session-id\";\n const dmk = {\n executeDeviceAction: vi.fn(),\n } as unknown as DeviceManagementKit;\n const signer = new DefaultSignerBtc({ dmk, sessionId });\n signer.getExtendedPublicKey(\"44'/0'/0'/0/0\", {\n checkOnDevice: true,\n });\n expect(GetExtendedPublicKeyUseCase.prototype.execute).toHaveBeenCalled();\n });\n\n it(\"should call signMessageUseCase\", () => {\n vi.spyOn(SignMessageUseCase.prototype, \"execute\");\n const sessionId = \"session-id\";\n const dmk = {\n executeDeviceAction: vi.fn(),\n } as unknown as DeviceManagementKit;\n const derivationPath = \"44'/0'/0'/0/0\";\n const message = \"message\";\n const signer = new DefaultSignerBtc({ dmk, sessionId });\n signer.signMessage(derivationPath, message);\n expect(SignMessageUseCase.prototype.execute).toHaveBeenCalled();\n });\n it(\"should call signPsbtUseCase\", () => {\n vi.spyOn(SignPsbtUseCase.prototype, \"execute\");\n const sessionId = \"session-id\";\n const dmk = {\n executeDeviceAction: vi.fn(),\n } as unknown as DeviceManagementKit;\n const signer = new DefaultSignerBtc({ dmk, sessionId });\n signer.signPsbt(\n new DefaultWallet(\"44'/0'/0'\", DefaultDescriptorTemplate.NATIVE_SEGWIT),\n \"\",\n );\n expect(SignPsbtUseCase.prototype.execute).toHaveBeenCalled();\n });\n it(\"should call signTransactionUseCase\", () => {\n vi.spyOn(SignTransactionUseCase.prototype, \"execute\");\n const sessionId = \"session-id\";\n const dmk = {\n executeDeviceAction: vi.fn(),\n } as unknown as DeviceManagementKit;\n const signer = new DefaultSignerBtc({ dmk, sessionId });\n signer.signTransaction(\n new DefaultWallet(\"44'/0'/0'\", DefaultDescriptorTemplate.NATIVE_SEGWIT),\n \"\",\n );\n expect(SignTransactionUseCase.prototype.execute).toHaveBeenCalled();\n });\n});\n"],
5
+ "mappings": "aAEA,IAAAA,EAAyD,6BACzDC,EAAiC,sCACjCC,EAA4C,mFAC5CC,EAAgC,yDAChCC,EAAuC,uEAEvCC,EAAmC,uDAEnC,SAAS,mBAAoB,IAAM,CACjC,GAAG,oBAAqB,IAAM,CAC5B,MAAMC,EAAS,IAAI,mBAAiB,CAClC,IAAK,CAAC,EACN,UAAW,YACb,CAAC,EACD,OAAOA,CAAM,EAAE,YAAY,CAC7B,CAAC,EAED,GAAG,0CAA2C,IAAM,CAClD,GAAG,MAAM,8BAA4B,UAAW,SAAS,EACzD,MAAMC,EAAY,aACZC,EAAM,CACV,oBAAqB,GAAG,GAAG,CAC7B,EACe,IAAI,mBAAiB,CAAE,IAAAA,EAAK,UAAAD,CAAU,CAAC,EAC/C,qBAAqB,gBAAiB,CAC3C,cAAe,EACjB,CAAC,EACD,OAAO,8BAA4B,UAAU,OAAO,EAAE,iBAAiB,CACzE,CAAC,EAED,GAAG,iCAAkC,IAAM,CACzC,GAAG,MAAM,qBAAmB,UAAW,SAAS,EAChD,MAAMA,EAAY,aACZC,EAAM,CACV,oBAAqB,GAAG,GAAG,CAC7B,EAGe,IAAI,mBAAiB,CAAE,IAAAA,EAAK,UAAAD,CAAU,CAAC,EAC/C,YAHgB,gBACP,SAE0B,EAC1C,OAAO,qBAAmB,UAAU,OAAO,EAAE,iBAAiB,CAChE,CAAC,EACD,GAAG,8BAA+B,IAAM,CACtC,GAAG,MAAM,kBAAgB,UAAW,SAAS,EAC7C,MAAMA,EAAY,aACZC,EAAM,CACV,oBAAqB,GAAG,GAAG,CAC7B,EACe,IAAI,mBAAiB,CAAE,IAAAA,EAAK,UAAAD,CAAU,CAAC,EAC/C,SACL,IAAI,gBAAc,YAAa,4BAA0B,aAAa,EACtE,EACF,EACA,OAAO,kBAAgB,UAAU,OAAO,EAAE,iBAAiB,CAC7D,CAAC,EACD,GAAG,qCAAsC,IAAM,CAC7C,GAAG,MAAM,yBAAuB,UAAW,SAAS,EACpD,MAAMA,EAAY,aACZC,EAAM,CACV,oBAAqB,GAAG,GAAG,CAC7B,EACe,IAAI,mBAAiB,CAAE,IAAAA,EAAK,UAAAD,CAAU,CAAC,EAC/C,gBACL,IAAI,gBAAc,YAAa,4BAA0B,aAAa,EACtE,EACF,EACA,OAAO,yBAAuB,UAAU,OAAO,EAAE,iBAAiB,CACpE,CAAC,CACH,CAAC",
6
6
  "names": ["import_Wallet", "import_DefaultSignerBtc", "import_GetExtendedPublicKeyUseCase", "import_SignPsbtUseCase", "import_SignTransactionUseCase", "import_SignMessageUseCase", "signer", "sessionId", "dmk"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var c=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var P=Object.getOwnPropertyNames;var f=Object.prototype.hasOwnProperty;var I=(i,e)=>{for(var r in e)c(i,r,{get:e[r],enumerable:!0})},g=(i,e,r,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of P(e))!f.call(i,t)&&t!==r&&c(i,t,{get:()=>e[t],enumerable:!(a=S(e,t))||a.enumerable});return i};var T=i=>g(c({},"__esModule",{value:!0}),i),b=(i,e,r,a)=>{for(var t=a>1?void 0:a?S(e,r):e,d=i.length-1,p;d>=0;d--)(p=i[d])&&(t=(a?p(e,r,t):p(t))||t);return a&&t&&c(e,r,t),t},l=(i,e)=>(r,a)=>e(r,a,i);var x={};I(x,{BtcAppBinder:()=>n});module.exports=T(x);var o=require("@ledgerhq/device-management-kit"),s=require("inversify"),D=require("../app-binder/command/GetExtendedPublicKeyCommand"),h=require("../app-binder/device-action/SignPsbt/SignPsbtDeviceAction"),y=require("../app-binder/device-action/SignTransaction/SignTransactionDeviceAction"),w=require("../data-store/di/dataStoreTypes"),m=require("../externalTypes"),u=require("../psbt/di/psbtTypes"),v=require("../wallet/di/walletTypes"),_=require("./device-action/GetWalletAddress/GetWalletAddressDeviceAction"),A=require("./device-action/SignMessage/SignMessageDeviceAction");let n=class{constructor(e,r,a,t,d,p,W){this._dmk=e;this._sessionId=r;this._walletBuilder=a;this._walletSerializer=t;this._dataStoreService=d;this._psbtMapper=p;this._valueParser=W}getExtendedPublicKey(e){return this._dmk.executeDeviceAction({sessionId:this._sessionId,deviceAction:new o.SendCommandInAppDeviceAction({input:{command:new D.GetExtendedPublicKeyCommand(e),appName:"Bitcoin",requiredUserInteraction:e.checkOnDevice?o.UserInteractionRequired.VerifyAddress:o.UserInteractionRequired.None}})})}signMessage(e){return this._dmk.executeDeviceAction({sessionId:this._sessionId,deviceAction:new A.SignMessageDeviceAction({input:{derivationPath:e.derivationPath,message:e.message,dataStoreService:this._dataStoreService}})})}signPsbt(e){return this._dmk.executeDeviceAction({sessionId:this._sessionId,deviceAction:new h.SignPsbtDeviceAction({input:{psbt:e.psbt,wallet:e.wallet,walletBuilder:this._walletBuilder,walletSerializer:this._walletSerializer,dataStoreService:this._dataStoreService,psbtMapper:this._psbtMapper,valueParser:this._valueParser}})})}getWalletAddress(e){return this._dmk.executeDeviceAction({sessionId:this._sessionId,deviceAction:new _.GetWalletAddressDeviceAction({input:{wallet:e.wallet,checkOnDevice:e.checkOnDevice,change:e.change,addressIndex:e.addressIndex,walletBuilder:this._walletBuilder,walletSerializer:this._walletSerializer,dataStoreService:this._dataStoreService}})})}signTransaction(e){return this._dmk.executeDeviceAction({sessionId:this._sessionId,deviceAction:new y.SignTransactionDeviceAction({input:{psbt:e.psbt,wallet:e.wallet,walletBuilder:this._walletBuilder,walletSerializer:this._walletSerializer,dataStoreService:this._dataStoreService,psbtMapper:this._psbtMapper,valueParser:this._valueParser}})})}};n=b([(0,s.injectable)(),l(0,(0,s.inject)(m.externalTypes.Dmk)),l(1,(0,s.inject)(m.externalTypes.SessionId)),l(2,(0,s.inject)(v.walletTypes.WalletBuilder)),l(3,(0,s.inject)(v.walletTypes.WalletSerializer)),l(4,(0,s.inject)(w.dataStoreTypes.DataStoreService)),l(5,(0,s.inject)(u.psbtTypes.PsbtMapper)),l(6,(0,s.inject)(u.psbtTypes.ValueParser))],n);0&&(module.exports={BtcAppBinder});
1
+ "use strict";var d=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var P=Object.getOwnPropertyNames;var f=Object.prototype.hasOwnProperty;var I=(i,e)=>{for(var r in e)d(i,r,{get:e[r],enumerable:!0})},g=(i,e,r,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of P(e))!f.call(i,t)&&t!==r&&d(i,t,{get:()=>e[t],enumerable:!(a=S(e,t))||a.enumerable});return i};var T=i=>g(d({},"__esModule",{value:!0}),i),b=(i,e,r,a)=>{for(var t=a>1?void 0:a?S(e,r):e,p=i.length-1,c;p>=0;p--)(c=i[p])&&(t=(a?c(e,r,t):c(t))||t);return a&&t&&d(e,r,t),t},l=(i,e)=>(r,a)=>e(r,a,i);var x={};I(x,{BtcAppBinder:()=>o});module.exports=T(x);var n=require("@ledgerhq/device-management-kit"),s=require("inversify"),y=require("../app-binder/command/GetExtendedPublicKeyCommand"),D=require("../app-binder/device-action/SignPsbt/SignPsbtDeviceAction"),w=require("../app-binder/device-action/SignTransaction/SignTransactionDeviceAction"),h=require("../app-binder/task/SignMessageTask"),A=require("../data-store/di/dataStoreTypes"),m=require("../externalTypes"),u=require("../psbt/di/psbtTypes"),v=require("../wallet/di/walletTypes"),_=require("./device-action/GetWalletAddress/GetWalletAddressDeviceAction");let o=class{constructor(e,r,a,t,p,c,M){this._dmk=e;this._sessionId=r;this._walletBuilder=a;this._walletSerializer=t;this._dataStoreService=p;this._psbtMapper=c;this._valueParser=M}getExtendedPublicKey(e){return this._dmk.executeDeviceAction({sessionId:this._sessionId,deviceAction:new n.SendCommandInAppDeviceAction({input:{command:new y.GetExtendedPublicKeyCommand(e),appName:"Bitcoin",requiredUserInteraction:e.checkOnDevice?n.UserInteractionRequired.VerifyAddress:n.UserInteractionRequired.None}})})}signMessage(e){return this._dmk.executeDeviceAction({sessionId:this._sessionId,deviceAction:new n.CallTaskInAppDeviceAction({input:{task:async r=>new h.SendSignMessageTask(r,e,this._dataStoreService).run(),appName:"Bitcoin",requiredUserInteraction:n.UserInteractionRequired.SignPersonalMessage}})})}signPsbt(e){return this._dmk.executeDeviceAction({sessionId:this._sessionId,deviceAction:new D.SignPsbtDeviceAction({input:{psbt:e.psbt,wallet:e.wallet,walletBuilder:this._walletBuilder,walletSerializer:this._walletSerializer,dataStoreService:this._dataStoreService,psbtMapper:this._psbtMapper,valueParser:this._valueParser}})})}getWalletAddress(e){return this._dmk.executeDeviceAction({sessionId:this._sessionId,deviceAction:new _.GetWalletAddressDeviceAction({input:{wallet:e.wallet,checkOnDevice:e.checkOnDevice,change:e.change,addressIndex:e.addressIndex,walletBuilder:this._walletBuilder,walletSerializer:this._walletSerializer,dataStoreService:this._dataStoreService}})})}signTransaction(e){return this._dmk.executeDeviceAction({sessionId:this._sessionId,deviceAction:new w.SignTransactionDeviceAction({input:{psbt:e.psbt,wallet:e.wallet,walletBuilder:this._walletBuilder,walletSerializer:this._walletSerializer,dataStoreService:this._dataStoreService,psbtMapper:this._psbtMapper,valueParser:this._valueParser}})})}};o=b([(0,s.injectable)(),l(0,(0,s.inject)(m.externalTypes.Dmk)),l(1,(0,s.inject)(m.externalTypes.SessionId)),l(2,(0,s.inject)(v.walletTypes.WalletBuilder)),l(3,(0,s.inject)(v.walletTypes.WalletSerializer)),l(4,(0,s.inject)(A.dataStoreTypes.DataStoreService)),l(5,(0,s.inject)(u.psbtTypes.PsbtMapper)),l(6,(0,s.inject)(u.psbtTypes.ValueParser))],o);0&&(module.exports={BtcAppBinder});
2
2
  //# sourceMappingURL=BtcAppBinder.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/internal/app-binder/BtcAppBinder.ts"],
4
- "sourcesContent": ["import {\n DeviceManagementKit,\n type DeviceSessionId,\n SendCommandInAppDeviceAction,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport {\n GetExtendedPublicKeyDAInput,\n GetExtendedPublicKeyDAReturnType,\n} from \"@api/app-binder/GetExtendedPublicKeyDeviceActionTypes\";\nimport { SignMessageDAReturnType } from \"@api/app-binder/SignMessageDeviceActionTypes\";\nimport { SignPsbtDAReturnType } from \"@api/app-binder/SignPsbtDeviceActionTypes\";\nimport { SignTransactionDAReturnType } from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { GetWalletAddressDAReturnType } from \"@api/index\";\nimport { Psbt } from \"@api/model/Psbt\";\nimport { Wallet } from \"@api/model/Wallet\";\nimport { GetExtendedPublicKeyCommand } from \"@internal/app-binder/command/GetExtendedPublicKeyCommand\";\nimport { SignPsbtDeviceAction } from \"@internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction\";\nimport { SignTransactionDeviceAction } from \"@internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction\";\nimport { dataStoreTypes } from \"@internal/data-store/di/dataStoreTypes\";\nimport type { DataStoreService } from \"@internal/data-store/service/DataStoreService\";\nimport { externalTypes } from \"@internal/externalTypes\";\nimport { psbtTypes } from \"@internal/psbt/di/psbtTypes\";\nimport type { PsbtMapper } from \"@internal/psbt/service/psbt/PsbtMapper\";\nimport type { ValueParser } from \"@internal/psbt/service/value/ValueParser\";\nimport { walletTypes } from \"@internal/wallet/di/walletTypes\";\nimport type { WalletBuilder } from \"@internal/wallet/service/WalletBuilder\";\nimport type { WalletSerializer } from \"@internal/wallet/service/WalletSerializer\";\n\nimport { GetWalletAddressDeviceAction } from \"./device-action/GetWalletAddress/GetWalletAddressDeviceAction\";\nimport { SignMessageDeviceAction } from \"./device-action/SignMessage/SignMessageDeviceAction\";\n\n@injectable()\nexport class BtcAppBinder {\n constructor(\n @inject(externalTypes.Dmk)\n private readonly _dmk: DeviceManagementKit,\n @inject(externalTypes.SessionId)\n private readonly _sessionId: DeviceSessionId,\n @inject(walletTypes.WalletBuilder)\n private readonly _walletBuilder: WalletBuilder,\n @inject(walletTypes.WalletSerializer)\n private readonly _walletSerializer: WalletSerializer,\n @inject(dataStoreTypes.DataStoreService)\n private readonly _dataStoreService: DataStoreService,\n @inject(psbtTypes.PsbtMapper)\n private readonly _psbtMapper: PsbtMapper,\n @inject(psbtTypes.ValueParser)\n private readonly _valueParser: ValueParser,\n ) {}\n\n getExtendedPublicKey(\n args: GetExtendedPublicKeyDAInput,\n ): GetExtendedPublicKeyDAReturnType {\n return this._dmk.executeDeviceAction({\n sessionId: this._sessionId,\n deviceAction: new SendCommandInAppDeviceAction({\n input: {\n command: new GetExtendedPublicKeyCommand(args),\n appName: \"Bitcoin\",\n requiredUserInteraction: args.checkOnDevice\n ? UserInteractionRequired.VerifyAddress\n : UserInteractionRequired.None,\n },\n }),\n });\n }\n\n signMessage(args: {\n derivationPath: string;\n message: string;\n }): SignMessageDAReturnType {\n return this._dmk.executeDeviceAction({\n sessionId: this._sessionId,\n deviceAction: new SignMessageDeviceAction({\n input: {\n derivationPath: args.derivationPath,\n message: args.message,\n dataStoreService: this._dataStoreService,\n },\n }),\n });\n }\n\n signPsbt(args: { psbt: Psbt; wallet: Wallet }): SignPsbtDAReturnType {\n return this._dmk.executeDeviceAction({\n sessionId: this._sessionId,\n deviceAction: new SignPsbtDeviceAction({\n input: {\n psbt: args.psbt,\n wallet: args.wallet,\n walletBuilder: this._walletBuilder,\n walletSerializer: this._walletSerializer,\n dataStoreService: this._dataStoreService,\n psbtMapper: this._psbtMapper,\n valueParser: this._valueParser,\n },\n }),\n });\n }\n\n getWalletAddress(args: {\n checkOnDevice: boolean;\n wallet: Wallet;\n change: boolean;\n addressIndex: number;\n }): GetWalletAddressDAReturnType {\n return this._dmk.executeDeviceAction({\n sessionId: this._sessionId,\n deviceAction: new GetWalletAddressDeviceAction({\n input: {\n wallet: args.wallet,\n checkOnDevice: args.checkOnDevice,\n change: args.change,\n addressIndex: args.addressIndex,\n walletBuilder: this._walletBuilder,\n walletSerializer: this._walletSerializer,\n dataStoreService: this._dataStoreService,\n },\n }),\n });\n }\n\n signTransaction(args: {\n psbt: Psbt;\n wallet: Wallet;\n }): SignTransactionDAReturnType {\n return this._dmk.executeDeviceAction({\n sessionId: this._sessionId,\n deviceAction: new SignTransactionDeviceAction({\n input: {\n psbt: args.psbt,\n wallet: args.wallet,\n walletBuilder: this._walletBuilder,\n walletSerializer: this._walletSerializer,\n dataStoreService: this._dataStoreService,\n psbtMapper: this._psbtMapper,\n valueParser: this._valueParser,\n },\n }),\n });\n }\n}\n"],
5
- "mappings": "okBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,kBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAKO,2CACPC,EAAmC,qBAYnCC,EAA4C,oEAC5CC,EAAqC,4EACrCC,EAA4C,0FAC5CC,EAA+B,kDAE/BC,EAA8B,mCAC9BC,EAA0B,uCAG1BC,EAA4B,2CAI5BC,EAA6C,yEAC7CC,EAAwC,+DAGjC,IAAMC,EAAN,KAAmB,CACxB,YAEmBC,EAEAC,EAEAC,EAEAC,EAEAC,EAEAC,EAEAC,EACjB,CAbiB,UAAAN,EAEA,gBAAAC,EAEA,oBAAAC,EAEA,uBAAAC,EAEA,uBAAAC,EAEA,iBAAAC,EAEA,kBAAAC,CAChB,CAEH,qBACEC,EACkC,CAClC,OAAO,KAAK,KAAK,oBAAoB,CACnC,UAAW,KAAK,WAChB,aAAc,IAAI,+BAA6B,CAC7C,MAAO,CACL,QAAS,IAAI,8BAA4BA,CAAI,EAC7C,QAAS,UACT,wBAAyBA,EAAK,cAC1B,0BAAwB,cACxB,0BAAwB,IAC9B,CACF,CAAC,CACH,CAAC,CACH,CAEA,YAAYA,EAGgB,CAC1B,OAAO,KAAK,KAAK,oBAAoB,CACnC,UAAW,KAAK,WAChB,aAAc,IAAI,0BAAwB,CACxC,MAAO,CACL,eAAgBA,EAAK,eACrB,QAASA,EAAK,QACd,iBAAkB,KAAK,iBACzB,CACF,CAAC,CACH,CAAC,CACH,CAEA,SAASA,EAA4D,CACnE,OAAO,KAAK,KAAK,oBAAoB,CACnC,UAAW,KAAK,WAChB,aAAc,IAAI,uBAAqB,CACrC,MAAO,CACL,KAAMA,EAAK,KACX,OAAQA,EAAK,OACb,cAAe,KAAK,eACpB,iBAAkB,KAAK,kBACvB,iBAAkB,KAAK,kBACvB,WAAY,KAAK,YACjB,YAAa,KAAK,YACpB,CACF,CAAC,CACH,CAAC,CACH,CAEA,iBAAiBA,EAKgB,CAC/B,OAAO,KAAK,KAAK,oBAAoB,CACnC,UAAW,KAAK,WAChB,aAAc,IAAI,+BAA6B,CAC7C,MAAO,CACL,OAAQA,EAAK,OACb,cAAeA,EAAK,cACpB,OAAQA,EAAK,OACb,aAAcA,EAAK,aACnB,cAAe,KAAK,eACpB,iBAAkB,KAAK,kBACvB,iBAAkB,KAAK,iBACzB,CACF,CAAC,CACH,CAAC,CACH,CAEA,gBAAgBA,EAGgB,CAC9B,OAAO,KAAK,KAAK,oBAAoB,CACnC,UAAW,KAAK,WAChB,aAAc,IAAI,8BAA4B,CAC5C,MAAO,CACL,KAAMA,EAAK,KACX,OAAQA,EAAK,OACb,cAAe,KAAK,eACpB,iBAAkB,KAAK,kBACvB,iBAAkB,KAAK,kBACvB,WAAY,KAAK,YACjB,YAAa,KAAK,YACpB,CACF,CAAC,CACH,CAAC,CACH,CACF,EA7GaR,EAANS,EAAA,IADN,cAAW,EAGPC,EAAA,eAAO,gBAAc,GAAG,GAExBA,EAAA,eAAO,gBAAc,SAAS,GAE9BA,EAAA,eAAO,cAAY,aAAa,GAEhCA,EAAA,eAAO,cAAY,gBAAgB,GAEnCA,EAAA,eAAO,iBAAe,gBAAgB,GAEtCA,EAAA,eAAO,YAAU,UAAU,GAE3BA,EAAA,eAAO,YAAU,WAAW,IAdpBV",
6
- "names": ["BtcAppBinder_exports", "__export", "BtcAppBinder", "__toCommonJS", "import_device_management_kit", "import_inversify", "import_GetExtendedPublicKeyCommand", "import_SignPsbtDeviceAction", "import_SignTransactionDeviceAction", "import_dataStoreTypes", "import_externalTypes", "import_psbtTypes", "import_walletTypes", "import_GetWalletAddressDeviceAction", "import_SignMessageDeviceAction", "BtcAppBinder", "_dmk", "_sessionId", "_walletBuilder", "_walletSerializer", "_dataStoreService", "_psbtMapper", "_valueParser", "args", "__decorateClass", "__decorateParam"]
4
+ "sourcesContent": ["import {\n CallTaskInAppDeviceAction,\n DeviceManagementKit,\n type DeviceSessionId,\n SendCommandInAppDeviceAction,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport {\n GetExtendedPublicKeyDAInput,\n GetExtendedPublicKeyDAReturnType,\n} from \"@api/app-binder/GetExtendedPublicKeyDeviceActionTypes\";\nimport { SignMessageDAReturnType } from \"@api/app-binder/SignMessageDeviceActionTypes\";\nimport { SignPsbtDAReturnType } from \"@api/app-binder/SignPsbtDeviceActionTypes\";\nimport { SignTransactionDAReturnType } from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { GetWalletAddressDAReturnType } from \"@api/index\";\nimport { Psbt } from \"@api/model/Psbt\";\nimport { Wallet } from \"@api/model/Wallet\";\nimport { GetExtendedPublicKeyCommand } from \"@internal/app-binder/command/GetExtendedPublicKeyCommand\";\nimport { SignPsbtDeviceAction } from \"@internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction\";\nimport { SignTransactionDeviceAction } from \"@internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction\";\nimport { SendSignMessageTask } from \"@internal/app-binder/task/SignMessageTask\";\nimport { dataStoreTypes } from \"@internal/data-store/di/dataStoreTypes\";\nimport type { DataStoreService } from \"@internal/data-store/service/DataStoreService\";\nimport { externalTypes } from \"@internal/externalTypes\";\nimport { psbtTypes } from \"@internal/psbt/di/psbtTypes\";\nimport type { PsbtMapper } from \"@internal/psbt/service/psbt/PsbtMapper\";\nimport type { ValueParser } from \"@internal/psbt/service/value/ValueParser\";\nimport { walletTypes } from \"@internal/wallet/di/walletTypes\";\nimport type { WalletBuilder } from \"@internal/wallet/service/WalletBuilder\";\nimport type { WalletSerializer } from \"@internal/wallet/service/WalletSerializer\";\n\nimport { GetWalletAddressDeviceAction } from \"./device-action/GetWalletAddress/GetWalletAddressDeviceAction\";\n\n@injectable()\nexport class BtcAppBinder {\n constructor(\n @inject(externalTypes.Dmk)\n private readonly _dmk: DeviceManagementKit,\n @inject(externalTypes.SessionId)\n private readonly _sessionId: DeviceSessionId,\n @inject(walletTypes.WalletBuilder)\n private readonly _walletBuilder: WalletBuilder,\n @inject(walletTypes.WalletSerializer)\n private readonly _walletSerializer: WalletSerializer,\n @inject(dataStoreTypes.DataStoreService)\n private readonly _dataStoreService: DataStoreService,\n @inject(psbtTypes.PsbtMapper)\n private readonly _psbtMapper: PsbtMapper,\n @inject(psbtTypes.ValueParser)\n private readonly _valueParser: ValueParser,\n ) {}\n\n getExtendedPublicKey(\n args: GetExtendedPublicKeyDAInput,\n ): GetExtendedPublicKeyDAReturnType {\n return this._dmk.executeDeviceAction({\n sessionId: this._sessionId,\n deviceAction: new SendCommandInAppDeviceAction({\n input: {\n command: new GetExtendedPublicKeyCommand(args),\n appName: \"Bitcoin\",\n requiredUserInteraction: args.checkOnDevice\n ? UserInteractionRequired.VerifyAddress\n : UserInteractionRequired.None,\n },\n }),\n });\n }\n\n signMessage(args: {\n derivationPath: string;\n message: string;\n }): SignMessageDAReturnType {\n return this._dmk.executeDeviceAction({\n sessionId: this._sessionId,\n deviceAction: new CallTaskInAppDeviceAction({\n input: {\n task: async (internalApi) =>\n new SendSignMessageTask(\n internalApi,\n args,\n this._dataStoreService,\n ).run(),\n appName: \"Bitcoin\",\n requiredUserInteraction: UserInteractionRequired.SignPersonalMessage,\n },\n }),\n });\n }\n\n signPsbt(args: { psbt: Psbt; wallet: Wallet }): SignPsbtDAReturnType {\n return this._dmk.executeDeviceAction({\n sessionId: this._sessionId,\n deviceAction: new SignPsbtDeviceAction({\n input: {\n psbt: args.psbt,\n wallet: args.wallet,\n walletBuilder: this._walletBuilder,\n walletSerializer: this._walletSerializer,\n dataStoreService: this._dataStoreService,\n psbtMapper: this._psbtMapper,\n valueParser: this._valueParser,\n },\n }),\n });\n }\n\n getWalletAddress(args: {\n checkOnDevice: boolean;\n wallet: Wallet;\n change: boolean;\n addressIndex: number;\n }): GetWalletAddressDAReturnType {\n return this._dmk.executeDeviceAction({\n sessionId: this._sessionId,\n deviceAction: new GetWalletAddressDeviceAction({\n input: {\n wallet: args.wallet,\n checkOnDevice: args.checkOnDevice,\n change: args.change,\n addressIndex: args.addressIndex,\n walletBuilder: this._walletBuilder,\n walletSerializer: this._walletSerializer,\n dataStoreService: this._dataStoreService,\n },\n }),\n });\n }\n\n signTransaction(args: {\n psbt: Psbt;\n wallet: Wallet;\n }): SignTransactionDAReturnType {\n return this._dmk.executeDeviceAction({\n sessionId: this._sessionId,\n deviceAction: new SignTransactionDeviceAction({\n input: {\n psbt: args.psbt,\n wallet: args.wallet,\n walletBuilder: this._walletBuilder,\n walletSerializer: this._walletSerializer,\n dataStoreService: this._dataStoreService,\n psbtMapper: this._psbtMapper,\n valueParser: this._valueParser,\n },\n }),\n });\n }\n}\n"],
5
+ "mappings": "okBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,kBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAMO,2CACPC,EAAmC,qBAYnCC,EAA4C,oEAC5CC,EAAqC,4EACrCC,EAA4C,0FAC5CC,EAAoC,qDACpCC,EAA+B,kDAE/BC,EAA8B,mCAC9BC,EAA0B,uCAG1BC,EAA4B,2CAI5BC,EAA6C,yEAGtC,IAAMC,EAAN,KAAmB,CACxB,YAEmBC,EAEAC,EAEAC,EAEAC,EAEAC,EAEAC,EAEAC,EACjB,CAbiB,UAAAN,EAEA,gBAAAC,EAEA,oBAAAC,EAEA,uBAAAC,EAEA,uBAAAC,EAEA,iBAAAC,EAEA,kBAAAC,CAChB,CAEH,qBACEC,EACkC,CAClC,OAAO,KAAK,KAAK,oBAAoB,CACnC,UAAW,KAAK,WAChB,aAAc,IAAI,+BAA6B,CAC7C,MAAO,CACL,QAAS,IAAI,8BAA4BA,CAAI,EAC7C,QAAS,UACT,wBAAyBA,EAAK,cAC1B,0BAAwB,cACxB,0BAAwB,IAC9B,CACF,CAAC,CACH,CAAC,CACH,CAEA,YAAYA,EAGgB,CAC1B,OAAO,KAAK,KAAK,oBAAoB,CACnC,UAAW,KAAK,WAChB,aAAc,IAAI,4BAA0B,CAC1C,MAAO,CACL,KAAM,MAAOC,GACX,IAAI,sBACFA,EACAD,EACA,KAAK,iBACP,EAAE,IAAI,EACR,QAAS,UACT,wBAAyB,0BAAwB,mBACnD,CACF,CAAC,CACH,CAAC,CACH,CAEA,SAASA,EAA4D,CACnE,OAAO,KAAK,KAAK,oBAAoB,CACnC,UAAW,KAAK,WAChB,aAAc,IAAI,uBAAqB,CACrC,MAAO,CACL,KAAMA,EAAK,KACX,OAAQA,EAAK,OACb,cAAe,KAAK,eACpB,iBAAkB,KAAK,kBACvB,iBAAkB,KAAK,kBACvB,WAAY,KAAK,YACjB,YAAa,KAAK,YACpB,CACF,CAAC,CACH,CAAC,CACH,CAEA,iBAAiBA,EAKgB,CAC/B,OAAO,KAAK,KAAK,oBAAoB,CACnC,UAAW,KAAK,WAChB,aAAc,IAAI,+BAA6B,CAC7C,MAAO,CACL,OAAQA,EAAK,OACb,cAAeA,EAAK,cACpB,OAAQA,EAAK,OACb,aAAcA,EAAK,aACnB,cAAe,KAAK,eACpB,iBAAkB,KAAK,kBACvB,iBAAkB,KAAK,iBACzB,CACF,CAAC,CACH,CAAC,CACH,CAEA,gBAAgBA,EAGgB,CAC9B,OAAO,KAAK,KAAK,oBAAoB,CACnC,UAAW,KAAK,WAChB,aAAc,IAAI,8BAA4B,CAC5C,MAAO,CACL,KAAMA,EAAK,KACX,OAAQA,EAAK,OACb,cAAe,KAAK,eACpB,iBAAkB,KAAK,kBACvB,iBAAkB,KAAK,kBACvB,WAAY,KAAK,YACjB,YAAa,KAAK,YACpB,CACF,CAAC,CACH,CAAC,CACH,CACF,EAlHaR,EAANU,EAAA,IADN,cAAW,EAGPC,EAAA,eAAO,gBAAc,GAAG,GAExBA,EAAA,eAAO,gBAAc,SAAS,GAE9BA,EAAA,eAAO,cAAY,aAAa,GAEhCA,EAAA,eAAO,cAAY,gBAAgB,GAEnCA,EAAA,eAAO,iBAAe,gBAAgB,GAEtCA,EAAA,eAAO,YAAU,UAAU,GAE3BA,EAAA,eAAO,YAAU,WAAW,IAdpBX",
6
+ "names": ["BtcAppBinder_exports", "__export", "BtcAppBinder", "__toCommonJS", "import_device_management_kit", "import_inversify", "import_GetExtendedPublicKeyCommand", "import_SignPsbtDeviceAction", "import_SignTransactionDeviceAction", "import_SignMessageTask", "import_dataStoreTypes", "import_externalTypes", "import_psbtTypes", "import_walletTypes", "import_GetWalletAddressDeviceAction", "BtcAppBinder", "_dmk", "_sessionId", "_walletBuilder", "_walletSerializer", "_dataStoreService", "_psbtMapper", "_valueParser", "args", "internalApi", "__decorateClass", "__decorateParam"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var t=require("@ledgerhq/device-management-kit"),d=require("rxjs"),c=require("../app-binder/BtcAppBinder"),l=require("../app-binder/command/GetExtendedPublicKeyCommand");describe("BtcAppBinder",()=>{const r={sendCommand:jest.fn(),executeDeviceAction:jest.fn()};beforeEach(()=>{jest.clearAllMocks()}),it("should be defined",()=>{const a=new c.BtcAppBinder({},{},{},{},{},{},{});expect(a).toBeDefined()}),describe("getExtendedPublicKey",()=>{let a;afterEach(()=>{a&&a.unsubscribe()}),it("should return the pub key",i=>{const n="D2PPQSYFe83nDzk96FqGumVU8JA7J8vj2Rhjc2oXzEi5";jest.spyOn(r,"executeDeviceAction").mockReturnValue({observable:(0,d.from)([{status:t.DeviceActionStatus.Completed,output:{extendedPublicKey:n}}]),cancel:jest.fn()});const s=new c.BtcAppBinder(r,"sessionId",{},{},{},{},{}),{observable:o}=s.getExtendedPublicKey({derivationPath:"44'/501'",checkOnDevice:!1}),u=[];a=o.subscribe({next:e=>{u.push(e)},error:e=>{i(e)},complete:()=>{try{expect(u).toEqual([{status:t.DeviceActionStatus.Completed,output:{extendedPublicKey:n}}]),i()}catch(e){i(e)}}})}),describe("calls of executeDeviceAction with the correct params",()=>{const i={derivationPath:"44'/60'/3'/2/1",returnChainCode:!1};it("when checkOnDevice is true: UserInteractionRequired.VerifyAddress",()=>{const s={...i,checkOnDevice:!0};new c.BtcAppBinder(r,"sessionId",{},{},{},{},{}).getExtendedPublicKey(s),expect(r.executeDeviceAction).toHaveBeenCalledWith({sessionId:"sessionId",deviceAction:new t.SendCommandInAppDeviceAction({input:{command:new l.GetExtendedPublicKeyCommand(s),appName:"Bitcoin",requiredUserInteraction:t.UserInteractionRequired.VerifyAddress}})})}),it("when checkOnDevice is false: UserInteractionRequired.None",()=>{const s={...i,checkOnDevice:!1};new c.BtcAppBinder(r,"sessionId",{},{},{},{},{}).getExtendedPublicKey(s),expect(r.executeDeviceAction).toHaveBeenCalledWith({sessionId:"sessionId",deviceAction:new t.SendCommandInAppDeviceAction({input:{command:new l.GetExtendedPublicKeyCommand(s),appName:"Bitcoin",requiredUserInteraction:t.UserInteractionRequired.None}})})})})}),describe("signMessage",()=>{it("should return the signature",a=>{const i={r:"0xDEF1",s:"0xAFAF",v:0},n="Hello, World!";jest.spyOn(r,"executeDeviceAction").mockReturnValue({observable:(0,d.from)([{status:t.DeviceActionStatus.Completed,output:i}]),cancel:jest.fn()});const s=new c.BtcAppBinder(r,"sessionId",{},{},{},{},{}),{observable:o}=s.signMessage({derivationPath:"44'/60'/3'/2/1",message:n}),u=[];o.subscribe({next:e=>{u.push(e)},error:e=>{a(e)},complete:()=>{try{expect(u).toEqual([{status:t.DeviceActionStatus.Completed,output:i}]),a()}catch(e){a(e)}}})})})});
1
+ "use strict";var t=require("@ledgerhq/device-management-kit"),l=require("rxjs"),c=require("../app-binder/BtcAppBinder"),p=require("../app-binder/command/GetExtendedPublicKeyCommand");describe("BtcAppBinder",()=>{const a={sendCommand:vi.fn(),executeDeviceAction:vi.fn()};beforeEach(()=>{vi.clearAllMocks()}),it("should be defined",()=>{const r=new c.BtcAppBinder({},{},{},{},{},{},{});expect(r).toBeDefined()}),describe("getExtendedPublicKey",()=>{let r;afterEach(()=>{r&&r.unsubscribe()}),it("should return the pub key",()=>new Promise((s,n)=>{const i="D2PPQSYFe83nDzk96FqGumVU8JA7J8vj2Rhjc2oXzEi5";vi.spyOn(a,"executeDeviceAction").mockReturnValue({observable:(0,l.from)([{status:t.DeviceActionStatus.Completed,output:{extendedPublicKey:i}}]),cancel:vi.fn()});const o=new c.BtcAppBinder(a,"sessionId",{},{},{},{},{}),{observable:u}=o.getExtendedPublicKey({derivationPath:"44'/501'",checkOnDevice:!1}),d=[];r=u.subscribe({next:e=>{d.push(e)},error:e=>{n(e)},complete:()=>{try{expect(d).toEqual([{status:t.DeviceActionStatus.Completed,output:{extendedPublicKey:i}}]),s()}catch(e){n(e)}}})})),describe("calls of executeDeviceAction with the correct params",()=>{const s={derivationPath:"44'/60'/3'/2/1",returnChainCode:!1};it("when checkOnDevice is true: UserInteractionRequired.VerifyAddress",()=>{const i={...s,checkOnDevice:!0};new c.BtcAppBinder(a,"sessionId",{},{},{},{},{}).getExtendedPublicKey(i),expect(a.executeDeviceAction).toHaveBeenCalledWith({sessionId:"sessionId",deviceAction:new t.SendCommandInAppDeviceAction({input:{command:new p.GetExtendedPublicKeyCommand(i),appName:"Bitcoin",requiredUserInteraction:t.UserInteractionRequired.VerifyAddress}})})}),it("when checkOnDevice is false: UserInteractionRequired.None",()=>{const i={...s,checkOnDevice:!1};new c.BtcAppBinder(a,"sessionId",{},{},{},{},{}).getExtendedPublicKey(i),expect(a.executeDeviceAction).toHaveBeenCalledWith({sessionId:"sessionId",deviceAction:new t.SendCommandInAppDeviceAction({input:{command:new p.GetExtendedPublicKeyCommand(i),appName:"Bitcoin",requiredUserInteraction:t.UserInteractionRequired.None}})})})})}),describe("signMessage",()=>{it("should return the signature",()=>new Promise((r,s)=>{const n={r:"0xDEF1",s:"0xAFAF",v:0},i="Hello, World!";vi.spyOn(a,"executeDeviceAction").mockReturnValue({observable:(0,l.from)([{status:t.DeviceActionStatus.Completed,output:n}]),cancel:vi.fn()});const o=new c.BtcAppBinder(a,"sessionId",{},{},{},{},{}),{observable:u}=o.signMessage({derivationPath:"44'/60'/3'/2/1",message:i}),d=[];u.subscribe({next:e=>{d.push(e)},error:e=>{s(e)},complete:()=>{try{expect(d).toEqual([{status:t.DeviceActionStatus.Completed,output:n}]),r()}catch(e){s(e)}}})}))})});
2
2
  //# sourceMappingURL=BtcAppBinder.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/internal/app-binder/BtcAppBinder.test.ts"],
4
- "sourcesContent": ["import {\n type DeviceActionState,\n DeviceActionStatus,\n type DeviceManagementKit,\n type DeviceSessionId,\n SendCommandInAppDeviceAction,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { from, type Subscription } from \"rxjs\";\n\nimport {\n type GetExtendedDAIntermediateValue,\n type GetExtendedPublicKeyDAError,\n type GetExtendedPublicKeyDAOutput,\n} from \"@api/app-binder/GetExtendedPublicKeyDeviceActionTypes\";\nimport {\n type SignMessageDAError,\n type SignMessageDAIntermediateValue,\n type SignMessageDAOutput,\n} from \"@api/index\";\nimport { type Signature } from \"@api/model/Signature\";\nimport { BtcAppBinder } from \"@internal/app-binder/BtcAppBinder\";\nimport { GetExtendedPublicKeyCommand } from \"@internal/app-binder/command/GetExtendedPublicKeyCommand\";\nimport { type DataStoreService } from \"@internal/data-store/service/DataStoreService\";\nimport { type PsbtMapper } from \"@internal/psbt/service/psbt/PsbtMapper\";\nimport { type ValueParser } from \"@internal/psbt/service/value/ValueParser\";\nimport { type WalletBuilder } from \"@internal/wallet/service/WalletBuilder\";\nimport { type WalletSerializer } from \"@internal/wallet/service/WalletSerializer\";\n\ndescribe(\"BtcAppBinder\", () => {\n const mockedDmk: DeviceManagementKit = {\n sendCommand: jest.fn(),\n executeDeviceAction: jest.fn(),\n } as unknown as DeviceManagementKit;\n\n beforeEach(() => {\n jest.clearAllMocks();\n });\n\n it(\"should be defined\", () => {\n const binder = new BtcAppBinder(\n {} as DeviceManagementKit,\n {} as DeviceSessionId,\n {} as WalletBuilder,\n {} as WalletSerializer,\n {} as DataStoreService,\n {} as PsbtMapper,\n {} as ValueParser,\n );\n expect(binder).toBeDefined();\n });\n\n describe(\"getExtendedPublicKey\", () => {\n let subscription: Subscription;\n afterEach(() => {\n if (subscription) {\n subscription.unsubscribe();\n }\n });\n it(\"should return the pub key\", (done) => {\n // GIVEN\n const extendedPublicKey = \"D2PPQSYFe83nDzk96FqGumVU8JA7J8vj2Rhjc2oXzEi5\";\n\n jest.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: { extendedPublicKey },\n } as DeviceActionState<\n GetExtendedPublicKeyDAOutput,\n GetExtendedPublicKeyDAError,\n GetExtendedDAIntermediateValue\n >,\n ]),\n cancel: jest.fn(),\n });\n\n // WHEN\n const appBinder = new BtcAppBinder(\n mockedDmk,\n \"sessionId\",\n {} as WalletBuilder,\n {} as WalletSerializer,\n {} as DataStoreService,\n {} as PsbtMapper,\n {} as ValueParser,\n );\n const { observable } = appBinder.getExtendedPublicKey({\n derivationPath: \"44'/501'\",\n checkOnDevice: false,\n });\n\n // THEN\n const states: DeviceActionState<\n GetExtendedPublicKeyDAOutput,\n GetExtendedPublicKeyDAError,\n GetExtendedDAIntermediateValue\n >[] = [];\n subscription = observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n done(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: { extendedPublicKey },\n },\n ]);\n done();\n } catch (err) {\n done(err);\n }\n },\n });\n });\n\n describe(\"calls of executeDeviceAction with the correct params\", () => {\n const baseParams = {\n derivationPath: \"44'/60'/3'/2/1\",\n returnChainCode: false,\n };\n\n it(\"when checkOnDevice is true: UserInteractionRequired.VerifyAddress\", () => {\n // GIVEN\n const checkOnDevice = true;\n const params = {\n ...baseParams,\n checkOnDevice,\n };\n\n // WHEN\n const appBinder = new BtcAppBinder(\n mockedDmk,\n \"sessionId\",\n {} as WalletBuilder,\n {} as WalletSerializer,\n {} as DataStoreService,\n {} as PsbtMapper,\n {} as ValueParser,\n );\n appBinder.getExtendedPublicKey(params);\n\n // THEN\n expect(mockedDmk.executeDeviceAction).toHaveBeenCalledWith({\n sessionId: \"sessionId\",\n deviceAction: new SendCommandInAppDeviceAction({\n input: {\n command: new GetExtendedPublicKeyCommand(params),\n appName: \"Bitcoin\",\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n },\n }),\n });\n });\n\n it(\"when checkOnDevice is false: UserInteractionRequired.None\", () => {\n // GIVEN\n const checkOnDevice = false;\n const params = {\n ...baseParams,\n checkOnDevice,\n };\n\n // WHEN\n const appBinder = new BtcAppBinder(\n mockedDmk,\n \"sessionId\",\n {} as WalletBuilder,\n {} as WalletSerializer,\n {} as DataStoreService,\n {} as PsbtMapper,\n {} as ValueParser,\n );\n appBinder.getExtendedPublicKey(params);\n\n // THEN\n expect(mockedDmk.executeDeviceAction).toHaveBeenCalledWith({\n sessionId: \"sessionId\",\n deviceAction: new SendCommandInAppDeviceAction({\n input: {\n command: new GetExtendedPublicKeyCommand(params),\n appName: \"Bitcoin\",\n requiredUserInteraction: UserInteractionRequired.None,\n },\n }),\n });\n });\n });\n });\n\n describe(\"signMessage\", () => {\n it(\"should return the signature\", (done) => {\n // GIVEN\n const signature: Signature = {\n r: `0xDEF1`,\n s: `0xAFAF`,\n v: 0,\n };\n const message = \"Hello, World!\";\n\n jest.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: signature,\n } as DeviceActionState<\n SignMessageDAOutput,\n SignMessageDAError,\n SignMessageDAIntermediateValue\n >,\n ]),\n cancel: jest.fn(),\n });\n\n // WHEN\n const appBinder = new BtcAppBinder(\n mockedDmk,\n \"sessionId\",\n {} as WalletBuilder,\n {} as WalletSerializer,\n {} as DataStoreService,\n {} as PsbtMapper,\n {} as ValueParser,\n );\n const { observable } = appBinder.signMessage({\n derivationPath: \"44'/60'/3'/2/1\",\n message,\n });\n\n // THEN\n const states: DeviceActionState<\n SignMessageDAOutput,\n SignMessageDAError,\n SignMessageDAIntermediateValue\n >[] = [];\n observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n done(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: signature,\n },\n ]);\n done();\n } catch (err) {\n done(err);\n }\n },\n });\n });\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["import_device_management_kit", "import_rxjs", "import_BtcAppBinder", "import_GetExtendedPublicKeyCommand", "mockedDmk", "binder", "subscription", "done", "extendedPublicKey", "appBinder", "observable", "states", "state", "err", "baseParams", "params", "signature", "message"]
4
+ "sourcesContent": ["import {\n type DeviceActionState,\n DeviceActionStatus,\n type DeviceManagementKit,\n type DeviceSessionId,\n SendCommandInAppDeviceAction,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { from, type Subscription } from \"rxjs\";\n\nimport {\n type GetExtendedDAIntermediateValue,\n type GetExtendedPublicKeyDAError,\n type GetExtendedPublicKeyDAOutput,\n} from \"@api/app-binder/GetExtendedPublicKeyDeviceActionTypes\";\nimport {\n type SignMessageDAError,\n type SignMessageDAIntermediateValue,\n type SignMessageDAOutput,\n} from \"@api/index\";\nimport { type Signature } from \"@api/model/Signature\";\nimport { BtcAppBinder } from \"@internal/app-binder/BtcAppBinder\";\nimport { GetExtendedPublicKeyCommand } from \"@internal/app-binder/command/GetExtendedPublicKeyCommand\";\nimport { type DataStoreService } from \"@internal/data-store/service/DataStoreService\";\nimport { type PsbtMapper } from \"@internal/psbt/service/psbt/PsbtMapper\";\nimport { type ValueParser } from \"@internal/psbt/service/value/ValueParser\";\nimport { type WalletBuilder } from \"@internal/wallet/service/WalletBuilder\";\nimport { type WalletSerializer } from \"@internal/wallet/service/WalletSerializer\";\n\ndescribe(\"BtcAppBinder\", () => {\n const mockedDmk: DeviceManagementKit = {\n sendCommand: vi.fn(),\n executeDeviceAction: vi.fn(),\n } as unknown as DeviceManagementKit;\n\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n it(\"should be defined\", () => {\n const binder = new BtcAppBinder(\n {} as DeviceManagementKit,\n {} as DeviceSessionId,\n {} as WalletBuilder,\n {} as WalletSerializer,\n {} as DataStoreService,\n {} as PsbtMapper,\n {} as ValueParser,\n );\n expect(binder).toBeDefined();\n });\n\n describe(\"getExtendedPublicKey\", () => {\n let subscription: Subscription;\n afterEach(() => {\n if (subscription) {\n subscription.unsubscribe();\n }\n });\n it(\"should return the pub key\", () =>\n new Promise<void>((resolve, reject) => {\n // GIVEN\n const extendedPublicKey =\n \"D2PPQSYFe83nDzk96FqGumVU8JA7J8vj2Rhjc2oXzEi5\";\n\n vi.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: { extendedPublicKey },\n } as DeviceActionState<\n GetExtendedPublicKeyDAOutput,\n GetExtendedPublicKeyDAError,\n GetExtendedDAIntermediateValue\n >,\n ]),\n cancel: vi.fn(),\n });\n\n // WHEN\n const appBinder = new BtcAppBinder(\n mockedDmk,\n \"sessionId\",\n {} as WalletBuilder,\n {} as WalletSerializer,\n {} as DataStoreService,\n {} as PsbtMapper,\n {} as ValueParser,\n );\n const { observable } = appBinder.getExtendedPublicKey({\n derivationPath: \"44'/501'\",\n checkOnDevice: false,\n });\n\n // THEN\n const states: DeviceActionState<\n GetExtendedPublicKeyDAOutput,\n GetExtendedPublicKeyDAError,\n GetExtendedDAIntermediateValue\n >[] = [];\n subscription = observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n reject(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: { extendedPublicKey },\n },\n ]);\n resolve();\n } catch (err) {\n reject(err as Error);\n }\n },\n });\n }));\n\n describe(\"calls of executeDeviceAction with the correct params\", () => {\n const baseParams = {\n derivationPath: \"44'/60'/3'/2/1\",\n returnChainCode: false,\n };\n\n it(\"when checkOnDevice is true: UserInteractionRequired.VerifyAddress\", () => {\n // GIVEN\n const checkOnDevice = true;\n const params = {\n ...baseParams,\n checkOnDevice,\n };\n\n // WHEN\n const appBinder = new BtcAppBinder(\n mockedDmk,\n \"sessionId\",\n {} as WalletBuilder,\n {} as WalletSerializer,\n {} as DataStoreService,\n {} as PsbtMapper,\n {} as ValueParser,\n );\n appBinder.getExtendedPublicKey(params);\n\n // THEN\n expect(mockedDmk.executeDeviceAction).toHaveBeenCalledWith({\n sessionId: \"sessionId\",\n deviceAction: new SendCommandInAppDeviceAction({\n input: {\n command: new GetExtendedPublicKeyCommand(params),\n appName: \"Bitcoin\",\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n },\n }),\n });\n });\n\n it(\"when checkOnDevice is false: UserInteractionRequired.None\", () => {\n // GIVEN\n const checkOnDevice = false;\n const params = {\n ...baseParams,\n checkOnDevice,\n };\n\n // WHEN\n const appBinder = new BtcAppBinder(\n mockedDmk,\n \"sessionId\",\n {} as WalletBuilder,\n {} as WalletSerializer,\n {} as DataStoreService,\n {} as PsbtMapper,\n {} as ValueParser,\n );\n appBinder.getExtendedPublicKey(params);\n\n // THEN\n expect(mockedDmk.executeDeviceAction).toHaveBeenCalledWith({\n sessionId: \"sessionId\",\n deviceAction: new SendCommandInAppDeviceAction({\n input: {\n command: new GetExtendedPublicKeyCommand(params),\n appName: \"Bitcoin\",\n requiredUserInteraction: UserInteractionRequired.None,\n },\n }),\n });\n });\n });\n });\n\n describe(\"signMessage\", () => {\n it(\"should return the signature\", () =>\n new Promise<void>((resolve, reject) => {\n // GIVEN\n const signature: Signature = {\n r: `0xDEF1`,\n s: `0xAFAF`,\n v: 0,\n };\n const message = \"Hello, World!\";\n\n vi.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: signature,\n } as DeviceActionState<\n SignMessageDAOutput,\n SignMessageDAError,\n SignMessageDAIntermediateValue\n >,\n ]),\n cancel: vi.fn(),\n });\n\n // WHEN\n const appBinder = new BtcAppBinder(\n mockedDmk,\n \"sessionId\",\n {} as WalletBuilder,\n {} as WalletSerializer,\n {} as DataStoreService,\n {} as PsbtMapper,\n {} as ValueParser,\n );\n const { observable } = appBinder.signMessage({\n derivationPath: \"44'/60'/3'/2/1\",\n message,\n });\n\n // THEN\n const states: DeviceActionState<\n SignMessageDAOutput,\n SignMessageDAError,\n SignMessageDAIntermediateValue\n >[] = [];\n observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n reject(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: signature,\n },\n ]);\n resolve();\n } catch (err) {\n reject(err as Error);\n }\n },\n });\n }));\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["import_device_management_kit", "import_rxjs", "import_BtcAppBinder", "import_GetExtendedPublicKeyCommand", "mockedDmk", "binder", "subscription", "resolve", "reject", "extendedPublicKey", "appBinder", "observable", "states", "state", "err", "baseParams", "params", "signature", "message"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var e=require("@ledgerhq/device-management-kit"),o=require("@ledgerhq/device-management-kit"),a=require("./GetMasterFingerprintCommand");const i=new Uint8Array([225,5,0,0,0]),n=new Uint8Array([130,141,194,243]);describe("GetMasterFingerprintCommand",()=>{let s;beforeEach(()=>{s=new a.GetMasterFingerprintCommand}),describe("getApdu",()=>{it("returns the correct APDU",()=>{const r=s.getApdu();expect(r.getRawApdu()).toEqual(i)})}),describe("parseResponse",()=>{it("should return the master fingerprint",()=>{const r=new e.ApduResponse({data:n,statusCode:new Uint8Array([144,0])}),t=s.parseResponse(r);expect(t).toEqual((0,e.CommandResultFactory)({data:{masterFingerprint:Uint8Array.from([130,141,194,243])}}))}),it("should return an error if the response is not successful",()=>{const r=new e.ApduResponse({statusCode:Uint8Array.from([109,0]),data:new Uint8Array(0)}),t=s.parseResponse(r);expect((0,e.isSuccessCommandResult)(t)).toBe(!1)}),it("should return an error if the response is too short",()=>{const r=new e.ApduResponse({data:n.slice(0,2),statusCode:new Uint8Array([144,0])}),t=s.parseResponse(r);(0,e.isSuccessCommandResult)(t)?fail("Expected an error, but the result was successful"):expect(t.error).toEqual(new o.InvalidStatusWordError("Master fingerprint is missing"))})})});
1
+ "use strict";var e=require("@ledgerhq/device-management-kit"),o=require("@ledgerhq/device-management-kit"),a=require("./GetMasterFingerprintCommand");const i=new Uint8Array([225,5,0,0,0]),n=new Uint8Array([130,141,194,243]);describe("GetMasterFingerprintCommand",()=>{let s;beforeEach(()=>{s=new a.GetMasterFingerprintCommand}),describe("getApdu",()=>{it("returns the correct APDU",()=>{const r=s.getApdu();expect(r.getRawApdu()).toEqual(i)})}),describe("parseResponse",()=>{it("should return the master fingerprint",()=>{const r=new e.ApduResponse({data:n,statusCode:new Uint8Array([144,0])}),t=s.parseResponse(r);expect(t).toEqual((0,e.CommandResultFactory)({data:{masterFingerprint:Uint8Array.from([130,141,194,243])}}))}),it("should return an error if the response is not successful",()=>{const r=new e.ApduResponse({statusCode:Uint8Array.from([109,0]),data:new Uint8Array(0)}),t=s.parseResponse(r);expect((0,e.isSuccessCommandResult)(t)).toBe(!1)}),it("should return an error if the response is too short",()=>{const r=new e.ApduResponse({data:n.slice(0,2),statusCode:new Uint8Array([144,0])}),t=s.parseResponse(r);(0,e.isSuccessCommandResult)(t)?assert.fail("Expected an error, but the result was successful"):expect(t.error).toEqual(new o.InvalidStatusWordError("Master fingerprint is missing"))})})});
2
2
  //# sourceMappingURL=GetMasterFingerprintCommand.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/command/GetMasterFingerprintCommand.test.ts"],
4
- "sourcesContent": ["import {\n ApduResponse,\n CommandResultFactory,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\nimport { InvalidStatusWordError } from \"@ledgerhq/device-management-kit\";\n\nimport { GetMasterFingerprintCommand } from \"./GetMasterFingerprintCommand\";\n\nconst GET_MASTER_FINGERPRINT_APDU = new Uint8Array([\n 0xe1, 0x05, 0x00, 0x00, 0x00,\n]);\n\nconst GET_MASTER_FINGERPRINT_RESPONSE = new Uint8Array([\n 0x82, 0x8d, 0xc2, 0xf3,\n]);\n\ndescribe(\"GetMasterFingerprintCommand\", () => {\n let command: GetMasterFingerprintCommand;\n\n beforeEach(() => {\n command = new GetMasterFingerprintCommand();\n });\n\n describe(\"getApdu\", () => {\n it(\"returns the correct APDU\", () => {\n // WHEN\n const apdu = command.getApdu();\n\n // THEN\n expect(apdu.getRawApdu()).toEqual(GET_MASTER_FINGERPRINT_APDU);\n });\n });\n\n describe(\"parseResponse\", () => {\n it(\"should return the master fingerprint\", () => {\n // GIVEN\n const response = new ApduResponse({\n data: GET_MASTER_FINGERPRINT_RESPONSE,\n statusCode: new Uint8Array([0x90, 0x00]),\n });\n\n // WHEN\n const result = command.parseResponse(response);\n\n // THEN\n expect(result).toEqual(\n CommandResultFactory({\n data: {\n masterFingerprint: Uint8Array.from([0x82, 0x8d, 0xc2, 0xf3]),\n },\n }),\n );\n });\n\n it(\"should return an error if the response is not successful\", () => {\n // GIVEN\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x6d, 0x00]),\n data: new Uint8Array(0),\n });\n\n // WHEN\n const result = command.parseResponse(response);\n\n // THEN\n expect(isSuccessCommandResult(result)).toBe(false);\n });\n\n it(\"should return an error if the response is too short\", () => {\n // GIVEN\n const response = new ApduResponse({\n data: GET_MASTER_FINGERPRINT_RESPONSE.slice(0, 2),\n statusCode: new Uint8Array([0x90, 0x00]),\n });\n\n // WHEN\n const result = command.parseResponse(response);\n\n // THEN\n if (!isSuccessCommandResult(result)) {\n expect(result.error).toEqual(\n new InvalidStatusWordError(\"Master fingerprint is missing\"),\n );\n } else {\n fail(\"Expected an error, but the result was successful\");\n }\n });\n });\n});\n"],
5
- "mappings": "aAAA,IAAAA,EAIO,2CACPA,EAAuC,2CAEvCC,EAA4C,yCAE5C,MAAMC,EAA8B,IAAI,WAAW,CACjD,IAAM,EAAM,EAAM,EAAM,CAC1B,CAAC,EAEKC,EAAkC,IAAI,WAAW,CACrD,IAAM,IAAM,IAAM,GACpB,CAAC,EAED,SAAS,8BAA+B,IAAM,CAC5C,IAAIC,EAEJ,WAAW,IAAM,CACfA,EAAU,IAAI,6BAChB,CAAC,EAED,SAAS,UAAW,IAAM,CACxB,GAAG,2BAA4B,IAAM,CAEnC,MAAMC,EAAOD,EAAQ,QAAQ,EAG7B,OAAOC,EAAK,WAAW,CAAC,EAAE,QAAQH,CAA2B,CAC/D,CAAC,CACH,CAAC,EAED,SAAS,gBAAiB,IAAM,CAC9B,GAAG,uCAAwC,IAAM,CAE/C,MAAMI,EAAW,IAAI,eAAa,CAChC,KAAMH,EACN,WAAY,IAAI,WAAW,CAAC,IAAM,CAAI,CAAC,CACzC,CAAC,EAGKI,EAASH,EAAQ,cAAcE,CAAQ,EAG7C,OAAOC,CAAM,EAAE,WACb,wBAAqB,CACnB,KAAM,CACJ,kBAAmB,WAAW,KAAK,CAAC,IAAM,IAAM,IAAM,GAAI,CAAC,CAC7D,CACF,CAAC,CACH,CACF,CAAC,EAED,GAAG,2DAA4D,IAAM,CAEnE,MAAMD,EAAW,IAAI,eAAa,CAChC,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAM,IAAI,WAAW,CAAC,CACxB,CAAC,EAGKC,EAASH,EAAQ,cAAcE,CAAQ,EAG7C,UAAO,0BAAuBC,CAAM,CAAC,EAAE,KAAK,EAAK,CACnD,CAAC,EAED,GAAG,sDAAuD,IAAM,CAE9D,MAAMD,EAAW,IAAI,eAAa,CAChC,KAAMH,EAAgC,MAAM,EAAG,CAAC,EAChD,WAAY,IAAI,WAAW,CAAC,IAAM,CAAI,CAAC,CACzC,CAAC,EAGKI,EAASH,EAAQ,cAAcE,CAAQ,KAGxC,0BAAuBC,CAAM,EAKhC,KAAK,kDAAkD,EAJvD,OAAOA,EAAO,KAAK,EAAE,QACnB,IAAI,yBAAuB,+BAA+B,CAC5D,CAIJ,CAAC,CACH,CAAC,CACH,CAAC",
4
+ "sourcesContent": ["import {\n ApduResponse,\n CommandResultFactory,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\nimport { InvalidStatusWordError } from \"@ledgerhq/device-management-kit\";\n\nimport { GetMasterFingerprintCommand } from \"./GetMasterFingerprintCommand\";\n\nconst GET_MASTER_FINGERPRINT_APDU = new Uint8Array([\n 0xe1, 0x05, 0x00, 0x00, 0x00,\n]);\n\nconst GET_MASTER_FINGERPRINT_RESPONSE = new Uint8Array([\n 0x82, 0x8d, 0xc2, 0xf3,\n]);\n\ndescribe(\"GetMasterFingerprintCommand\", () => {\n let command: GetMasterFingerprintCommand;\n\n beforeEach(() => {\n command = new GetMasterFingerprintCommand();\n });\n\n describe(\"getApdu\", () => {\n it(\"returns the correct APDU\", () => {\n // WHEN\n const apdu = command.getApdu();\n\n // THEN\n expect(apdu.getRawApdu()).toEqual(GET_MASTER_FINGERPRINT_APDU);\n });\n });\n\n describe(\"parseResponse\", () => {\n it(\"should return the master fingerprint\", () => {\n // GIVEN\n const response = new ApduResponse({\n data: GET_MASTER_FINGERPRINT_RESPONSE,\n statusCode: new Uint8Array([0x90, 0x00]),\n });\n\n // WHEN\n const result = command.parseResponse(response);\n\n // THEN\n expect(result).toEqual(\n CommandResultFactory({\n data: {\n masterFingerprint: Uint8Array.from([0x82, 0x8d, 0xc2, 0xf3]),\n },\n }),\n );\n });\n\n it(\"should return an error if the response is not successful\", () => {\n // GIVEN\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x6d, 0x00]),\n data: new Uint8Array(0),\n });\n\n // WHEN\n const result = command.parseResponse(response);\n\n // THEN\n expect(isSuccessCommandResult(result)).toBe(false);\n });\n\n it(\"should return an error if the response is too short\", () => {\n // GIVEN\n const response = new ApduResponse({\n data: GET_MASTER_FINGERPRINT_RESPONSE.slice(0, 2),\n statusCode: new Uint8Array([0x90, 0x00]),\n });\n\n // WHEN\n const result = command.parseResponse(response);\n\n // THEN\n if (!isSuccessCommandResult(result)) {\n expect(result.error).toEqual(\n new InvalidStatusWordError(\"Master fingerprint is missing\"),\n );\n } else {\n assert.fail(\"Expected an error, but the result was successful\");\n }\n });\n });\n});\n"],
5
+ "mappings": "aAAA,IAAAA,EAIO,2CACPA,EAAuC,2CAEvCC,EAA4C,yCAE5C,MAAMC,EAA8B,IAAI,WAAW,CACjD,IAAM,EAAM,EAAM,EAAM,CAC1B,CAAC,EAEKC,EAAkC,IAAI,WAAW,CACrD,IAAM,IAAM,IAAM,GACpB,CAAC,EAED,SAAS,8BAA+B,IAAM,CAC5C,IAAIC,EAEJ,WAAW,IAAM,CACfA,EAAU,IAAI,6BAChB,CAAC,EAED,SAAS,UAAW,IAAM,CACxB,GAAG,2BAA4B,IAAM,CAEnC,MAAMC,EAAOD,EAAQ,QAAQ,EAG7B,OAAOC,EAAK,WAAW,CAAC,EAAE,QAAQH,CAA2B,CAC/D,CAAC,CACH,CAAC,EAED,SAAS,gBAAiB,IAAM,CAC9B,GAAG,uCAAwC,IAAM,CAE/C,MAAMI,EAAW,IAAI,eAAa,CAChC,KAAMH,EACN,WAAY,IAAI,WAAW,CAAC,IAAM,CAAI,CAAC,CACzC,CAAC,EAGKI,EAASH,EAAQ,cAAcE,CAAQ,EAG7C,OAAOC,CAAM,EAAE,WACb,wBAAqB,CACnB,KAAM,CACJ,kBAAmB,WAAW,KAAK,CAAC,IAAM,IAAM,IAAM,GAAI,CAAC,CAC7D,CACF,CAAC,CACH,CACF,CAAC,EAED,GAAG,2DAA4D,IAAM,CAEnE,MAAMD,EAAW,IAAI,eAAa,CAChC,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAM,IAAI,WAAW,CAAC,CACxB,CAAC,EAGKC,EAASH,EAAQ,cAAcE,CAAQ,EAG7C,UAAO,0BAAuBC,CAAM,CAAC,EAAE,KAAK,EAAK,CACnD,CAAC,EAED,GAAG,sDAAuD,IAAM,CAE9D,MAAMD,EAAW,IAAI,eAAa,CAChC,KAAMH,EAAgC,MAAM,EAAG,CAAC,EAChD,WAAY,IAAI,WAAW,CAAC,IAAM,CAAI,CAAC,CACzC,CAAC,EAGKI,EAASH,EAAQ,cAAcE,CAAQ,KAGxC,0BAAuBC,CAAM,EAKhC,OAAO,KAAK,kDAAkD,EAJ9D,OAAOA,EAAO,KAAK,EAAE,QACnB,IAAI,yBAAuB,+BAA+B,CAC5D,CAIJ,CAAC,CACH,CAAC,CACH,CAAC",
6
6
  "names": ["import_device_management_kit", "import_GetMasterFingerprintCommand", "GET_MASTER_FINGERPRINT_APDU", "GET_MASTER_FINGERPRINT_RESPONSE", "command", "apdu", "response", "result"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var r=require("@ledgerhq/device-management-kit"),d=require("./utils/constants"),n=require("./GetWalletAddressCommand");const l=new Uint8Array([144,0]),A=new Uint8Array([105,133]);describe("GetWalletAddressCommand",()=>{let o;const c={checkOnDevice:!0,walletId:Uint8Array.from("walletIdBuffer",e=>e.charCodeAt(0)),walletHmac:Uint8Array.from("walletHmacBuffer",e=>e.charCodeAt(0)),change:!1,addressIndex:0};beforeEach(()=>{o=new n.GetWalletAddressCommand(c),jest.clearAllMocks(),jest.requireActual("@ledgerhq/device-management-kit")}),describe("getApdu",()=>{it("should return correct APDU for default arguments",()=>{const e=o.getApdu(),t=Uint8Array.from([225,3,0,1,36,1,...Uint8Array.from("walletIdBuffer",a=>a.charCodeAt(0)),...Uint8Array.from("walletHmacBuffer",a=>a.charCodeAt(0)),0,0,0,0,0]);expect(e.getRawApdu()).toEqual(t)}),it("should return correct APDU for different arguments",()=>{const e={checkOnDevice:!1,walletId:Uint8Array.from("anotherWalletId",s=>s.charCodeAt(0)),walletHmac:Uint8Array.from("anotherWalletHmac",s=>s.charCodeAt(0)),change:!0,addressIndex:5};o=new n.GetWalletAddressCommand(e);const t=o.getApdu(),a=Uint8Array.from([225,3,0,1,38,0,...Uint8Array.from("anotherWalletId",s=>s.charCodeAt(0)),...Uint8Array.from("anotherWalletHmac",s=>s.charCodeAt(0)),1,0,0,0,5]);expect(t.getRawApdu()).toEqual(a)})}),describe("parseResponse",()=>{it("should return the APDU response if it's a continue response",()=>{const e=new Uint8Array([1,2,3,4]),t=new r.ApduResponse({statusCode:d.SW_INTERRUPTED_EXECUTION,data:e}),a=o.parseResponse(t);expect(a).toStrictEqual((0,r.CommandResultFactory)({data:t}))}),it("should return an error if user denied the operation",()=>{const e=new r.ApduResponse({statusCode:A,data:new Uint8Array([])}),t=o.parseResponse(e);expect((0,r.isSuccessCommandResult)(t)).toBe(!1),(0,r.isSuccessCommandResult)(t)||expect(t.error).toBeDefined()}),it("should return correct data when response is not empty",()=>{const e=Uint8Array.from("addressData",s=>s.charCodeAt(0)),t=new r.ApduResponse({statusCode:l,data:e}),a=o.parseResponse(t);expect(a).toStrictEqual((0,r.CommandResultFactory)({data:t}))})})});
1
+ "use strict";var r=require("@ledgerhq/device-management-kit"),d=require("./utils/constants"),n=require("./GetWalletAddressCommand");const l=new Uint8Array([144,0]),A=new Uint8Array([105,133]);describe("GetWalletAddressCommand",()=>{let o;const c={checkOnDevice:!0,walletId:Uint8Array.from("walletIdBuffer",e=>e.charCodeAt(0)),walletHmac:Uint8Array.from("walletHmacBuffer",e=>e.charCodeAt(0)),change:!1,addressIndex:0};beforeEach(()=>{o=new n.GetWalletAddressCommand(c),vi.clearAllMocks(),vi.importActual("@ledgerhq/device-management-kit")}),describe("getApdu",()=>{it("should return correct APDU for default arguments",()=>{const e=o.getApdu(),t=Uint8Array.from([225,3,0,1,36,1,...Uint8Array.from("walletIdBuffer",a=>a.charCodeAt(0)),...Uint8Array.from("walletHmacBuffer",a=>a.charCodeAt(0)),0,0,0,0,0]);expect(e.getRawApdu()).toEqual(t)}),it("should return correct APDU for different arguments",()=>{const e={checkOnDevice:!1,walletId:Uint8Array.from("anotherWalletId",s=>s.charCodeAt(0)),walletHmac:Uint8Array.from("anotherWalletHmac",s=>s.charCodeAt(0)),change:!0,addressIndex:5};o=new n.GetWalletAddressCommand(e);const t=o.getApdu(),a=Uint8Array.from([225,3,0,1,38,0,...Uint8Array.from("anotherWalletId",s=>s.charCodeAt(0)),...Uint8Array.from("anotherWalletHmac",s=>s.charCodeAt(0)),1,0,0,0,5]);expect(t.getRawApdu()).toEqual(a)})}),describe("parseResponse",()=>{it("should return the APDU response if it's a continue response",()=>{const e=new Uint8Array([1,2,3,4]),t=new r.ApduResponse({statusCode:d.SW_INTERRUPTED_EXECUTION,data:e}),a=o.parseResponse(t);expect(a).toStrictEqual((0,r.CommandResultFactory)({data:t}))}),it("should return an error if user denied the operation",()=>{const e=new r.ApduResponse({statusCode:A,data:new Uint8Array([])}),t=o.parseResponse(e);expect((0,r.isSuccessCommandResult)(t)).toBe(!1),(0,r.isSuccessCommandResult)(t)||expect(t.error).toBeDefined()}),it("should return correct data when response is not empty",()=>{const e=Uint8Array.from("addressData",s=>s.charCodeAt(0)),t=new r.ApduResponse({statusCode:l,data:e}),a=o.parseResponse(t);expect(a).toStrictEqual((0,r.CommandResultFactory)({data:t}))})})});
2
2
  //# sourceMappingURL=GetWalletAddressCommand.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/command/GetWalletAddressCommand.test.ts"],
4
- "sourcesContent": ["import {\n ApduResponse,\n CommandResultFactory,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { SW_INTERRUPTED_EXECUTION } from \"./utils/constants\";\nimport {\n GetWalletAddressCommand,\n type GetWalletAddressCommandArgs,\n} from \"./GetWalletAddressCommand\";\n\nconst SUCCESS_STATUS = new Uint8Array([0x90, 0x00]);\nconst USER_DENIED_STATUS = new Uint8Array([0x69, 0x85]);\n\ndescribe(\"GetWalletAddressCommand\", () => {\n let command: GetWalletAddressCommand;\n const defaultArgs: GetWalletAddressCommandArgs = {\n checkOnDevice: true,\n walletId: Uint8Array.from(\"walletIdBuffer\", (c) => c.charCodeAt(0)),\n walletHmac: Uint8Array.from(\"walletHmacBuffer\", (c) => c.charCodeAt(0)),\n change: false,\n addressIndex: 0x00000000,\n };\n\n beforeEach(() => {\n command = new GetWalletAddressCommand(defaultArgs);\n jest.clearAllMocks();\n jest.requireActual(\"@ledgerhq/device-management-kit\");\n });\n\n describe(\"getApdu\", () => {\n it(\"should return correct APDU for default arguments\", () => {\n const apdu = command.getApdu();\n const expectedApdu = Uint8Array.from([\n 0xe1, // CLA\n 0x03, // INS\n 0x00, // P1\n 0x01, // P2\n 0x24, // Length of data: 36 bytes\n 0x01, // checkOnDevice: true\n ...Uint8Array.from(\"walletIdBuffer\", (c) => c.charCodeAt(0)),\n ...Uint8Array.from(\"walletHmacBuffer\", (c) => c.charCodeAt(0)),\n 0x00, // change: false\n 0x00,\n 0x00,\n 0x00,\n 0x00, // addressIndex: 0x00000000\n ]);\n expect(apdu.getRawApdu()).toEqual(expectedApdu);\n });\n\n it(\"should return correct APDU for different arguments\", () => {\n const args: GetWalletAddressCommandArgs = {\n checkOnDevice: false,\n walletId: Uint8Array.from(\"anotherWalletId\", (c) => c.charCodeAt(0)),\n walletHmac: Uint8Array.from(\"anotherWalletHmac\", (c) =>\n c.charCodeAt(0),\n ),\n change: true,\n addressIndex: 0x00000005,\n };\n command = new GetWalletAddressCommand(args);\n const apdu = command.getApdu();\n const expectedApdu = Uint8Array.from([\n 0xe1, // CLA\n 0x03, // INS\n 0x00, // P1\n 0x01, // P2\n 0x26, // Length of data\n 0x00, // checkOnDevice: false\n ...Uint8Array.from(\"anotherWalletId\", (c) => c.charCodeAt(0)),\n ...Uint8Array.from(\"anotherWalletHmac\", (c) => c.charCodeAt(0)),\n 0x01, // change: true\n 0x00,\n 0x00,\n 0x00,\n 0x05, // addressIndex: 0x00000005\n ]);\n expect(apdu.getRawApdu()).toEqual(expectedApdu);\n });\n });\n\n describe(\"parseResponse\", () => {\n it(\"should return the APDU response if it's a continue response\", () => {\n // given\n const continueResponseData = new Uint8Array([0x01, 0x02, 0x03, 0x04]);\n\n const apduResponse = new ApduResponse({\n statusCode: SW_INTERRUPTED_EXECUTION,\n data: continueResponseData,\n });\n\n // when\n const response = command.parseResponse(apduResponse);\n\n // then\n expect(response).toStrictEqual(\n CommandResultFactory({\n data: apduResponse,\n }),\n );\n });\n\n it(\"should return an error if user denied the operation\", () => {\n // given\n const apduResponse = new ApduResponse({\n statusCode: USER_DENIED_STATUS,\n data: new Uint8Array([]),\n });\n\n // when\n const response = command.parseResponse(apduResponse);\n\n // then\n expect(isSuccessCommandResult(response)).toBe(false);\n if (!isSuccessCommandResult(response)) {\n expect(response.error).toBeDefined();\n }\n });\n\n it(\"should return correct data when response is not empty\", () => {\n // given\n const responseData = Uint8Array.from(\"addressData\", (c) =>\n c.charCodeAt(0),\n );\n\n const apduResponse = new ApduResponse({\n statusCode: SUCCESS_STATUS,\n data: responseData,\n });\n\n // when\n const response = command.parseResponse(apduResponse);\n\n // then\n expect(response).toStrictEqual(\n CommandResultFactory({ data: apduResponse }),\n );\n });\n });\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {\n ApduResponse,\n CommandResultFactory,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { SW_INTERRUPTED_EXECUTION } from \"./utils/constants\";\nimport {\n GetWalletAddressCommand,\n type GetWalletAddressCommandArgs,\n} from \"./GetWalletAddressCommand\";\n\nconst SUCCESS_STATUS = new Uint8Array([0x90, 0x00]);\nconst USER_DENIED_STATUS = new Uint8Array([0x69, 0x85]);\n\ndescribe(\"GetWalletAddressCommand\", () => {\n let command: GetWalletAddressCommand;\n const defaultArgs: GetWalletAddressCommandArgs = {\n checkOnDevice: true,\n walletId: Uint8Array.from(\"walletIdBuffer\", (c) => c.charCodeAt(0)),\n walletHmac: Uint8Array.from(\"walletHmacBuffer\", (c) => c.charCodeAt(0)),\n change: false,\n addressIndex: 0x00000000,\n };\n\n beforeEach(() => {\n command = new GetWalletAddressCommand(defaultArgs);\n vi.clearAllMocks();\n vi.importActual(\"@ledgerhq/device-management-kit\");\n });\n\n describe(\"getApdu\", () => {\n it(\"should return correct APDU for default arguments\", () => {\n const apdu = command.getApdu();\n const expectedApdu = Uint8Array.from([\n 0xe1, // CLA\n 0x03, // INS\n 0x00, // P1\n 0x01, // P2\n 0x24, // Length of data: 36 bytes\n 0x01, // checkOnDevice: true\n ...Uint8Array.from(\"walletIdBuffer\", (c) => c.charCodeAt(0)),\n ...Uint8Array.from(\"walletHmacBuffer\", (c) => c.charCodeAt(0)),\n 0x00, // change: false\n 0x00,\n 0x00,\n 0x00,\n 0x00, // addressIndex: 0x00000000\n ]);\n expect(apdu.getRawApdu()).toEqual(expectedApdu);\n });\n\n it(\"should return correct APDU for different arguments\", () => {\n const args: GetWalletAddressCommandArgs = {\n checkOnDevice: false,\n walletId: Uint8Array.from(\"anotherWalletId\", (c) => c.charCodeAt(0)),\n walletHmac: Uint8Array.from(\"anotherWalletHmac\", (c) =>\n c.charCodeAt(0),\n ),\n change: true,\n addressIndex: 0x00000005,\n };\n command = new GetWalletAddressCommand(args);\n const apdu = command.getApdu();\n const expectedApdu = Uint8Array.from([\n 0xe1, // CLA\n 0x03, // INS\n 0x00, // P1\n 0x01, // P2\n 0x26, // Length of data\n 0x00, // checkOnDevice: false\n ...Uint8Array.from(\"anotherWalletId\", (c) => c.charCodeAt(0)),\n ...Uint8Array.from(\"anotherWalletHmac\", (c) => c.charCodeAt(0)),\n 0x01, // change: true\n 0x00,\n 0x00,\n 0x00,\n 0x05, // addressIndex: 0x00000005\n ]);\n expect(apdu.getRawApdu()).toEqual(expectedApdu);\n });\n });\n\n describe(\"parseResponse\", () => {\n it(\"should return the APDU response if it's a continue response\", () => {\n // given\n const continueResponseData = new Uint8Array([0x01, 0x02, 0x03, 0x04]);\n\n const apduResponse = new ApduResponse({\n statusCode: SW_INTERRUPTED_EXECUTION,\n data: continueResponseData,\n });\n\n // when\n const response = command.parseResponse(apduResponse);\n\n // then\n expect(response).toStrictEqual(\n CommandResultFactory({\n data: apduResponse,\n }),\n );\n });\n\n it(\"should return an error if user denied the operation\", () => {\n // given\n const apduResponse = new ApduResponse({\n statusCode: USER_DENIED_STATUS,\n data: new Uint8Array([]),\n });\n\n // when\n const response = command.parseResponse(apduResponse);\n\n // then\n expect(isSuccessCommandResult(response)).toBe(false);\n if (!isSuccessCommandResult(response)) {\n expect(response.error).toBeDefined();\n }\n });\n\n it(\"should return correct data when response is not empty\", () => {\n // given\n const responseData = Uint8Array.from(\"addressData\", (c) =>\n c.charCodeAt(0),\n );\n\n const apduResponse = new ApduResponse({\n statusCode: SUCCESS_STATUS,\n data: responseData,\n });\n\n // when\n const response = command.parseResponse(apduResponse);\n\n // then\n expect(response).toStrictEqual(\n CommandResultFactory({ data: apduResponse }),\n );\n });\n });\n});\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_device_management_kit", "import_constants", "import_GetWalletAddressCommand", "SUCCESS_STATUS", "USER_DENIED_STATUS", "command", "defaultArgs", "c", "apdu", "expectedApdu", "args", "continueResponseData", "apduResponse", "response", "responseData"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var x=require("@ledgerhq/device-management-kit"),s=require("../../app-binder/command/RegisterWalletAddressCommand");const r=Uint8Array.from([124,103,232,79,153,116,70,113,20,147,239,139,116,112,177,15,96,75,2,210,88,79,160,68,111,206,247,217,137,131,227,220]),n=2,d=Uint8Array.from([75,197,70,127,36,147,133,178,158,91,142,201,251,36,204,101,163,113,11,26,38,210,141,233,245,196,243,244,93,214,84,193]),l=Uint8Array.from([2,12,67,111,108,100,32,115,116,111,114,97,103,101,30]),i=2,o=Uint8Array.from([i].concat(...l).concat(...r).concat([n]).concat(...d)),f=Uint8Array.from([225,2,0,1,81].concat(...o)),a=Uint8Array.from([29,21,14,212,37,168,113,165,202,126,44,85,219,27,50,149,193,253,151,20,127,208,167,177,136,212,50,127,75,167,64,42,250,115,227,97,25,50,79,190,76,193,202,148,170,132,44,98,97,82,109,68,17,42,34,22,75,197,124,51,53,16,43,4]);describe("RegisterWalletAddressCommand",()=>{describe("getApdu",()=>{it("should send the correct APDU",()=>{const e=new s.RegisterWalletAddressCommand({walletPolicy:o});expect(e.getApdu().getRawApdu()).toEqual(f)})}),describe("parseResponse",()=>{it("should parse the response correctly",()=>{const e=new s.RegisterWalletAddressCommand({walletPolicy:o}),t=new x.ApduResponse({statusCode:new Uint8Array([144,0]),data:a});expect(e.parseResponse(t)).toEqual((0,x.CommandResultFactory)({data:{walletId:a.slice(0,32),walletHmac:a.slice(32)}}))}),it("should return an error if the response is not successful",()=>{const e=new s.RegisterWalletAddressCommand({walletPolicy:o}),t=new x.ApduResponse({statusCode:Uint8Array.from([109,0]),data:new Uint8Array(0)}),c=e.parseResponse(t);expect((0,x.isSuccessCommandResult)(c)).toBe(!1)}),it("should return an error if the response is too short",()=>{const e=new s.RegisterWalletAddressCommand({walletPolicy:o}),t=new x.ApduResponse({data:a.slice(0,2),statusCode:new Uint8Array([144,0])}),c=e.parseResponse(t);(0,x.isSuccessCommandResult)(c)?fail("Expected an error, but the result was successful"):expect(c.error).toEqual(new x.InvalidStatusWordError("Data mismatch"))})})});
1
+ "use strict";var x=require("@ledgerhq/device-management-kit"),s=require("../../app-binder/command/RegisterWalletAddressCommand");const r=Uint8Array.from([124,103,232,79,153,116,70,113,20,147,239,139,116,112,177,15,96,75,2,210,88,79,160,68,111,206,247,217,137,131,227,220]),n=2,d=Uint8Array.from([75,197,70,127,36,147,133,178,158,91,142,201,251,36,204,101,163,113,11,26,38,210,141,233,245,196,243,244,93,214,84,193]),l=Uint8Array.from([2,12,67,111,108,100,32,115,116,111,114,97,103,101,30]),i=2,o=Uint8Array.from([i].concat(...l).concat(...r).concat([n]).concat(...d)),f=Uint8Array.from([225,2,0,1,81].concat(...o)),c=Uint8Array.from([29,21,14,212,37,168,113,165,202,126,44,85,219,27,50,149,193,253,151,20,127,208,167,177,136,212,50,127,75,167,64,42,250,115,227,97,25,50,79,190,76,193,202,148,170,132,44,98,97,82,109,68,17,42,34,22,75,197,124,51,53,16,43,4]);describe("RegisterWalletAddressCommand",()=>{describe("getApdu",()=>{it("should send the correct APDU",()=>{const e=new s.RegisterWalletAddressCommand({walletPolicy:o});expect(e.getApdu().getRawApdu()).toEqual(f)})}),describe("parseResponse",()=>{it("should parse the response correctly",()=>{const e=new s.RegisterWalletAddressCommand({walletPolicy:o}),t=new x.ApduResponse({statusCode:new Uint8Array([144,0]),data:c});expect(e.parseResponse(t)).toEqual((0,x.CommandResultFactory)({data:{walletId:c.slice(0,32),walletHmac:c.slice(32)}}))}),it("should return an error if the response is not successful",()=>{const e=new s.RegisterWalletAddressCommand({walletPolicy:o}),t=new x.ApduResponse({statusCode:Uint8Array.from([109,0]),data:new Uint8Array(0)}),a=e.parseResponse(t);expect((0,x.isSuccessCommandResult)(a)).toBe(!1)}),it("should return an error if the response is too short",()=>{const e=new s.RegisterWalletAddressCommand({walletPolicy:o}),t=new x.ApduResponse({data:c.slice(0,2),statusCode:new Uint8Array([144,0])}),a=e.parseResponse(t);(0,x.isSuccessCommandResult)(a)?assert.fail("Expected an error, but the result was successful"):expect(a.error).toEqual(new x.InvalidStatusWordError("Data mismatch"))})})});
2
2
  //# sourceMappingURL=RegisterWalletAddressCommand.test.js.map