@ledgerhq/device-signer-kit-solana 0.0.0-safe-20250917153142 → 0.0.0-sol-signer-20251203164116

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 (231) hide show
  1. package/README.md +113 -24
  2. package/lib/cjs/api/SignerSolana.js +1 -1
  3. package/lib/cjs/api/SignerSolana.js.map +1 -1
  4. package/lib/cjs/api/SolanaTools.js +1 -1
  5. package/lib/cjs/api/SolanaTools.js.map +1 -1
  6. package/lib/cjs/api/app-binder/SignMessageDeviceActionTypes.js.map +1 -1
  7. package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js +1 -1
  8. package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js.map +3 -3
  9. package/lib/cjs/api/index.js +1 -1
  10. package/lib/cjs/api/index.js.map +1 -1
  11. package/lib/cjs/api/model/SolanaTransactionOptionalConfig.js +2 -0
  12. package/lib/cjs/api/model/SolanaTransactionOptionalConfig.js.map +7 -0
  13. package/lib/cjs/api/model/TransactionResolutionContext.js +2 -0
  14. package/lib/cjs/api/model/TransactionResolutionContext.js.map +7 -0
  15. package/lib/cjs/internal/DefaultSignerSolana.js +1 -1
  16. package/lib/cjs/internal/DefaultSignerSolana.js.map +3 -3
  17. package/lib/cjs/internal/app-binder/SolanaAppBinder.js +1 -1
  18. package/lib/cjs/internal/app-binder/SolanaAppBinder.js.map +2 -2
  19. package/lib/cjs/internal/app-binder/SolanaAppBinder.test.js +1 -1
  20. package/lib/cjs/internal/app-binder/SolanaAppBinder.test.js.map +2 -2
  21. package/lib/cjs/internal/app-binder/command/GetAppConfigurationCommand.js +1 -1
  22. package/lib/cjs/internal/app-binder/command/GetAppConfigurationCommand.js.map +2 -2
  23. package/lib/cjs/internal/app-binder/command/GetAppConfigurationCommand.test.js +1 -1
  24. package/lib/cjs/internal/app-binder/command/GetAppConfigurationCommand.test.js.map +2 -2
  25. package/lib/cjs/internal/app-binder/command/GetChallengeCommand.js +1 -1
  26. package/lib/cjs/internal/app-binder/command/GetChallengeCommand.js.map +2 -2
  27. package/lib/cjs/internal/app-binder/command/GetChallengeCommand.test.js +1 -1
  28. package/lib/cjs/internal/app-binder/command/GetChallengeCommand.test.js.map +2 -2
  29. package/lib/cjs/internal/app-binder/command/GetPubKeyCommand.js +1 -1
  30. package/lib/cjs/internal/app-binder/command/GetPubKeyCommand.js.map +3 -3
  31. package/lib/cjs/internal/app-binder/command/GetPubKeyCommand.test.js +1 -1
  32. package/lib/cjs/internal/app-binder/command/GetPubKeyCommand.test.js.map +2 -2
  33. package/lib/cjs/internal/app-binder/command/ProvideTLVDescriptorCommand.js +1 -1
  34. package/lib/cjs/internal/app-binder/command/ProvideTLVDescriptorCommand.js.map +2 -2
  35. package/lib/cjs/internal/app-binder/command/ProvideTLVDescriptorCommand.test.js +1 -1
  36. package/lib/cjs/internal/app-binder/command/ProvideTLVDescriptorCommand.test.js.map +2 -2
  37. package/lib/cjs/internal/app-binder/command/ProvideTLVTransactionInstructionDescriptorCommand.js +2 -0
  38. package/lib/cjs/internal/app-binder/command/ProvideTLVTransactionInstructionDescriptorCommand.js.map +7 -0
  39. package/lib/cjs/internal/app-binder/command/ProvideTLVTransactionInstructionDescriptorCommand.test.js +2 -0
  40. package/lib/cjs/internal/app-binder/command/ProvideTLVTransactionInstructionDescriptorCommand.test.js.map +7 -0
  41. package/lib/cjs/internal/app-binder/command/SignOffChainMessageCommand.js +1 -1
  42. package/lib/cjs/internal/app-binder/command/SignOffChainMessageCommand.js.map +3 -3
  43. package/lib/cjs/internal/app-binder/command/SignOffChainMessageCommand.test.js +1 -1
  44. package/lib/cjs/internal/app-binder/command/SignOffChainMessageCommand.test.js.map +3 -3
  45. package/lib/cjs/internal/app-binder/command/SignTransactionCommand.js +1 -1
  46. package/lib/cjs/internal/app-binder/command/SignTransactionCommand.js.map +3 -3
  47. package/lib/cjs/internal/app-binder/command/SignTransactionCommand.test.js +1 -1
  48. package/lib/cjs/internal/app-binder/command/SignTransactionCommand.test.js.map +3 -3
  49. package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.js +1 -1
  50. package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.js.map +3 -3
  51. package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.test.js +1 -1
  52. package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.test.js.map +3 -3
  53. package/lib/cjs/internal/app-binder/services/GenerateSolanaTransaction.test.js.map +3 -3
  54. package/lib/cjs/internal/app-binder/services/TransactionInspector.js +1 -1
  55. package/lib/cjs/internal/app-binder/services/TransactionInspector.js.map +3 -3
  56. package/lib/cjs/internal/app-binder/services/TransactionInspector.test.js +1 -1
  57. package/lib/cjs/internal/app-binder/services/TransactionInspector.test.js.map +3 -3
  58. package/lib/cjs/internal/app-binder/services/bs58Encoder.js +2 -0
  59. package/lib/cjs/internal/app-binder/services/bs58Encoder.js.map +7 -0
  60. package/lib/cjs/internal/app-binder/services/utils/DefaultSolanaMessageNormaliser.js +2 -0
  61. package/lib/cjs/internal/app-binder/services/utils/DefaultSolanaMessageNormaliser.js.map +7 -0
  62. package/lib/cjs/internal/app-binder/services/utils/DefaultSolanaMessageNormaliser.test.js +2 -0
  63. package/lib/cjs/internal/app-binder/services/utils/DefaultSolanaMessageNormaliser.test.js.map +7 -0
  64. package/lib/cjs/internal/app-binder/services/utils/transactionDecoders.js +2 -0
  65. package/lib/cjs/internal/app-binder/services/utils/transactionDecoders.js.map +7 -0
  66. package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.js +1 -1
  67. package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.js.map +2 -2
  68. package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.test.js +1 -1
  69. package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.test.js.map +3 -3
  70. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.js +1 -1
  71. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.js.map +3 -3
  72. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.test.js +1 -1
  73. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.test.js.map +3 -3
  74. package/lib/cjs/internal/app-binder/task/SendSignMessageTask.js +1 -1
  75. package/lib/cjs/internal/app-binder/task/SendSignMessageTask.js.map +3 -3
  76. package/lib/cjs/internal/app-binder/task/SendSignMessageTask.test.js +3 -1
  77. package/lib/cjs/internal/app-binder/task/SendSignMessageTask.test.js.map +3 -3
  78. package/lib/cjs/internal/use-cases/transaction/SignTransactionUseCase.js +1 -1
  79. package/lib/cjs/internal/use-cases/transaction/SignTransactionUseCase.js.map +3 -3
  80. package/lib/cjs/internal/use-cases/transaction/SignTransactionUseCase.test.js +1 -1
  81. package/lib/cjs/internal/use-cases/transaction/SignTransactionUseCase.test.js.map +2 -2
  82. package/lib/cjs/package.json +44 -40
  83. package/lib/esm/api/app-binder/SignTransactionDeviceActionTypes.js +1 -0
  84. package/lib/esm/api/app-binder/SignTransactionDeviceActionTypes.js.map +4 -4
  85. package/lib/esm/api/index.js +1 -1
  86. package/lib/esm/api/index.js.map +1 -1
  87. package/lib/esm/api/model/SolanaTransactionOptionalConfig.js +1 -0
  88. package/lib/esm/api/model/TransactionResolutionContext.js +2 -0
  89. package/lib/esm/api/model/TransactionResolutionContext.js.map +7 -0
  90. package/lib/esm/internal/DefaultSignerSolana.js +1 -1
  91. package/lib/esm/internal/DefaultSignerSolana.js.map +3 -3
  92. package/lib/esm/internal/app-binder/SolanaAppBinder.js +1 -1
  93. package/lib/esm/internal/app-binder/SolanaAppBinder.js.map +2 -2
  94. package/lib/esm/internal/app-binder/SolanaAppBinder.test.js +1 -1
  95. package/lib/esm/internal/app-binder/SolanaAppBinder.test.js.map +2 -2
  96. package/lib/esm/internal/app-binder/command/GetAppConfigurationCommand.js +1 -1
  97. package/lib/esm/internal/app-binder/command/GetAppConfigurationCommand.js.map +2 -2
  98. package/lib/esm/internal/app-binder/command/GetAppConfigurationCommand.test.js +1 -1
  99. package/lib/esm/internal/app-binder/command/GetAppConfigurationCommand.test.js.map +2 -2
  100. package/lib/esm/internal/app-binder/command/GetChallengeCommand.js +1 -1
  101. package/lib/esm/internal/app-binder/command/GetChallengeCommand.js.map +2 -2
  102. package/lib/esm/internal/app-binder/command/GetChallengeCommand.test.js +1 -1
  103. package/lib/esm/internal/app-binder/command/GetChallengeCommand.test.js.map +2 -2
  104. package/lib/esm/internal/app-binder/command/GetPubKeyCommand.js +1 -1
  105. package/lib/esm/internal/app-binder/command/GetPubKeyCommand.js.map +3 -3
  106. package/lib/esm/internal/app-binder/command/GetPubKeyCommand.test.js +1 -1
  107. package/lib/esm/internal/app-binder/command/GetPubKeyCommand.test.js.map +2 -2
  108. package/lib/esm/internal/app-binder/command/ProvideTLVDescriptorCommand.js +1 -1
  109. package/lib/esm/internal/app-binder/command/ProvideTLVDescriptorCommand.js.map +2 -2
  110. package/lib/esm/internal/app-binder/command/ProvideTLVDescriptorCommand.test.js +1 -1
  111. package/lib/esm/internal/app-binder/command/ProvideTLVDescriptorCommand.test.js.map +2 -2
  112. package/lib/esm/internal/app-binder/command/ProvideTLVTransactionInstructionDescriptorCommand.js +2 -0
  113. package/lib/esm/internal/app-binder/command/ProvideTLVTransactionInstructionDescriptorCommand.js.map +7 -0
  114. package/lib/esm/internal/app-binder/command/ProvideTLVTransactionInstructionDescriptorCommand.test.js +2 -0
  115. package/lib/esm/internal/app-binder/command/ProvideTLVTransactionInstructionDescriptorCommand.test.js.map +7 -0
  116. package/lib/esm/internal/app-binder/command/SignOffChainMessageCommand.js +1 -1
  117. package/lib/esm/internal/app-binder/command/SignOffChainMessageCommand.js.map +3 -3
  118. package/lib/esm/internal/app-binder/command/SignOffChainMessageCommand.test.js +1 -1
  119. package/lib/esm/internal/app-binder/command/SignOffChainMessageCommand.test.js.map +3 -3
  120. package/lib/esm/internal/app-binder/command/SignTransactionCommand.js +1 -1
  121. package/lib/esm/internal/app-binder/command/SignTransactionCommand.js.map +3 -3
  122. package/lib/esm/internal/app-binder/command/SignTransactionCommand.test.js +1 -1
  123. package/lib/esm/internal/app-binder/command/SignTransactionCommand.test.js.map +3 -3
  124. package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.js +1 -1
  125. package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.js.map +3 -3
  126. package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.test.js +1 -1
  127. package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.test.js.map +3 -3
  128. package/lib/esm/internal/app-binder/services/GenerateSolanaTransaction.test.js.map +3 -3
  129. package/lib/esm/internal/app-binder/services/TransactionInspector.js +1 -1
  130. package/lib/esm/internal/app-binder/services/TransactionInspector.js.map +3 -3
  131. package/lib/esm/internal/app-binder/services/TransactionInspector.test.js +1 -1
  132. package/lib/esm/internal/app-binder/services/TransactionInspector.test.js.map +3 -3
  133. package/lib/esm/internal/app-binder/services/bs58Encoder.js +2 -0
  134. package/lib/esm/internal/app-binder/services/bs58Encoder.js.map +7 -0
  135. package/lib/esm/internal/app-binder/services/utils/DefaultSolanaMessageNormaliser.js +2 -0
  136. package/lib/esm/internal/app-binder/services/utils/DefaultSolanaMessageNormaliser.js.map +7 -0
  137. package/lib/esm/internal/app-binder/services/utils/DefaultSolanaMessageNormaliser.test.js +2 -0
  138. package/lib/esm/internal/app-binder/services/utils/DefaultSolanaMessageNormaliser.test.js.map +7 -0
  139. package/lib/esm/internal/app-binder/services/utils/transactionDecoders.js +2 -0
  140. package/lib/esm/internal/app-binder/services/utils/transactionDecoders.js.map +7 -0
  141. package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.js +1 -1
  142. package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.js.map +2 -2
  143. package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.test.js +1 -1
  144. package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.test.js.map +3 -3
  145. package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.js +1 -1
  146. package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.js.map +3 -3
  147. package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.test.js +1 -1
  148. package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.test.js.map +3 -3
  149. package/lib/esm/internal/app-binder/task/SendSignMessageTask.js +1 -1
  150. package/lib/esm/internal/app-binder/task/SendSignMessageTask.js.map +3 -3
  151. package/lib/esm/internal/app-binder/task/SendSignMessageTask.test.js +3 -1
  152. package/lib/esm/internal/app-binder/task/SendSignMessageTask.test.js.map +3 -3
  153. package/lib/esm/internal/use-cases/transaction/SignTransactionUseCase.js +1 -1
  154. package/lib/esm/internal/use-cases/transaction/SignTransactionUseCase.js.map +3 -3
  155. package/lib/esm/internal/use-cases/transaction/SignTransactionUseCase.test.js +1 -1
  156. package/lib/esm/internal/use-cases/transaction/SignTransactionUseCase.test.js.map +2 -2
  157. package/lib/esm/package.json +44 -40
  158. package/lib/types/api/SignerSolana.d.ts +2 -2
  159. package/lib/types/api/SignerSolana.d.ts.map +1 -1
  160. package/lib/types/api/SolanaTools.d.ts +1 -2
  161. package/lib/types/api/SolanaTools.d.ts.map +1 -1
  162. package/lib/types/api/app-binder/SignMessageDeviceActionTypes.d.ts +3 -2
  163. package/lib/types/api/app-binder/SignMessageDeviceActionTypes.d.ts.map +1 -1
  164. package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts +12 -1
  165. package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts.map +1 -1
  166. package/lib/types/api/index.d.ts +1 -1
  167. package/lib/types/api/index.d.ts.map +1 -1
  168. package/lib/types/api/model/SolanaTransactionOptionalConfig.d.ts +7 -0
  169. package/lib/types/api/model/SolanaTransactionOptionalConfig.d.ts.map +1 -0
  170. package/lib/types/api/model/TransactionResolutionContext.d.ts +15 -0
  171. package/lib/types/api/model/TransactionResolutionContext.d.ts.map +1 -0
  172. package/lib/types/internal/DefaultSignerSolana.d.ts +293 -1
  173. package/lib/types/internal/DefaultSignerSolana.d.ts.map +1 -1
  174. package/lib/types/internal/app-binder/SolanaAppBinder.d.ts +2 -1
  175. package/lib/types/internal/app-binder/SolanaAppBinder.d.ts.map +1 -1
  176. package/lib/types/internal/app-binder/command/GetAppConfigurationCommand.d.ts +1 -0
  177. package/lib/types/internal/app-binder/command/GetAppConfigurationCommand.d.ts.map +1 -1
  178. package/lib/types/internal/app-binder/command/GetChallengeCommand.d.ts +1 -0
  179. package/lib/types/internal/app-binder/command/GetChallengeCommand.d.ts.map +1 -1
  180. package/lib/types/internal/app-binder/command/GetPubKeyCommand.d.ts +4 -1
  181. package/lib/types/internal/app-binder/command/GetPubKeyCommand.d.ts.map +1 -1
  182. package/lib/types/internal/app-binder/command/ProvideTLVDescriptorCommand.d.ts +1 -0
  183. package/lib/types/internal/app-binder/command/ProvideTLVDescriptorCommand.d.ts.map +1 -1
  184. package/lib/types/internal/app-binder/command/ProvideTLVTransactionInstructionDescriptorCommand.d.ts +29 -0
  185. package/lib/types/internal/app-binder/command/ProvideTLVTransactionInstructionDescriptorCommand.d.ts.map +1 -0
  186. package/lib/types/internal/app-binder/command/ProvideTLVTransactionInstructionDescriptorCommand.test.d.ts +2 -0
  187. package/lib/types/internal/app-binder/command/ProvideTLVTransactionInstructionDescriptorCommand.test.d.ts.map +1 -0
  188. package/lib/types/internal/app-binder/command/SignOffChainMessageCommand.d.ts +14 -9
  189. package/lib/types/internal/app-binder/command/SignOffChainMessageCommand.d.ts.map +1 -1
  190. package/lib/types/internal/app-binder/command/SignTransactionCommand.d.ts +3 -0
  191. package/lib/types/internal/app-binder/command/SignTransactionCommand.d.ts.map +1 -1
  192. package/lib/types/internal/app-binder/device-action/SignTransactionDeviceAction.d.ts +5 -2
  193. package/lib/types/internal/app-binder/device-action/SignTransactionDeviceAction.d.ts.map +1 -1
  194. package/lib/types/internal/app-binder/services/TransactionInspector.d.ts +24 -11
  195. package/lib/types/internal/app-binder/services/TransactionInspector.d.ts.map +1 -1
  196. package/lib/types/internal/app-binder/services/bs58Encoder.d.ts +9 -0
  197. package/lib/types/internal/app-binder/services/bs58Encoder.d.ts.map +1 -0
  198. package/lib/types/internal/app-binder/services/utils/DefaultSolanaMessageNormaliser.d.ts +8 -0
  199. package/lib/types/internal/app-binder/services/utils/DefaultSolanaMessageNormaliser.d.ts.map +1 -0
  200. package/lib/types/internal/app-binder/services/utils/DefaultSolanaMessageNormaliser.test.d.ts +2 -0
  201. package/lib/types/internal/app-binder/services/utils/DefaultSolanaMessageNormaliser.test.d.ts.map +1 -0
  202. package/lib/types/internal/app-binder/services/utils/transactionDecoders.d.ts +14 -0
  203. package/lib/types/internal/app-binder/services/utils/transactionDecoders.d.ts.map +1 -0
  204. package/lib/types/internal/app-binder/task/BuildTransactionContextTask.d.ts +6 -11
  205. package/lib/types/internal/app-binder/task/BuildTransactionContextTask.d.ts.map +1 -1
  206. package/lib/types/internal/app-binder/task/ProvideTransactionContextTask.d.ts +9 -5
  207. package/lib/types/internal/app-binder/task/ProvideTransactionContextTask.d.ts.map +1 -1
  208. package/lib/types/internal/app-binder/task/SendSignMessageTask.d.ts +22 -6
  209. package/lib/types/internal/app-binder/task/SendSignMessageTask.d.ts.map +1 -1
  210. package/lib/types/internal/use-cases/transaction/SignTransactionUseCase.d.ts +2 -3
  211. package/lib/types/internal/use-cases/transaction/SignTransactionUseCase.d.ts.map +1 -1
  212. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  213. package/package.json +37 -33
  214. package/lib/cjs/api/model/TransactionOptions.js +0 -2
  215. package/lib/cjs/api/model/TransactionOptions.js.map +0 -7
  216. package/lib/cjs/internal/app-binder/command/ProvideTrustedNamePKICommand.js +0 -2
  217. package/lib/cjs/internal/app-binder/command/ProvideTrustedNamePKICommand.js.map +0 -7
  218. package/lib/cjs/internal/app-binder/command/ProvideTrustedNamePKICommand.test.js +0 -2
  219. package/lib/cjs/internal/app-binder/command/ProvideTrustedNamePKICommand.test.js.map +0 -7
  220. package/lib/esm/api/model/TransactionOptions.js +0 -1
  221. package/lib/esm/internal/app-binder/command/ProvideTrustedNamePKICommand.js +0 -2
  222. package/lib/esm/internal/app-binder/command/ProvideTrustedNamePKICommand.js.map +0 -7
  223. package/lib/esm/internal/app-binder/command/ProvideTrustedNamePKICommand.test.js +0 -2
  224. package/lib/esm/internal/app-binder/command/ProvideTrustedNamePKICommand.test.js.map +0 -7
  225. package/lib/types/api/model/TransactionOptions.d.ts +0 -8
  226. package/lib/types/api/model/TransactionOptions.d.ts.map +0 -1
  227. package/lib/types/internal/app-binder/command/ProvideTrustedNamePKICommand.d.ts +0 -13
  228. package/lib/types/internal/app-binder/command/ProvideTrustedNamePKICommand.d.ts.map +0 -1
  229. package/lib/types/internal/app-binder/command/ProvideTrustedNamePKICommand.test.d.ts +0 -2
  230. package/lib/types/internal/app-binder/command/ProvideTrustedNamePKICommand.test.d.ts.map +0 -1
  231. /package/lib/esm/api/model/{TransactionOptions.js.map → SolanaTransactionOptionalConfig.js.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/command/GetAppConfigurationCommand.ts"],
4
- "sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\nimport { Maybe } from \"purify-ts\";\n\nimport { type AppConfiguration } from \"@api/model/AppConfiguration\";\nimport { PublicKeyDisplayMode } from \"@api/model/PublicKeyDisplayMode\";\n\nimport {\n SOLANA_APP_ERRORS,\n SolanaAppCommandErrorFactory,\n type SolanaAppErrorCodes,\n} from \"./utils/SolanaApplicationErrors\";\n\ntype GetAppConfigurationCommandArgs = void;\n\nexport class GetAppConfigurationCommand\n implements\n Command<\n AppConfiguration,\n GetAppConfigurationCommandArgs,\n SolanaAppErrorCodes\n >\n{\n private readonly errorHelper = new CommandErrorHelper<\n AppConfiguration,\n SolanaAppErrorCodes\n >(SOLANA_APP_ERRORS, SolanaAppCommandErrorFactory);\n\n args: GetAppConfigurationCommandArgs;\n\n constructor(args: GetAppConfigurationCommandArgs) {\n this.args = args;\n }\n\n getApdu(): Apdu {\n return new ApduBuilder({\n cla: 0xe0,\n ins: 0x04,\n p1: 0x00,\n p2: 0x00,\n }).build();\n }\n\n parseResponse(\n response: ApduResponse,\n ): CommandResult<AppConfiguration, SolanaAppErrorCodes> {\n return Maybe.fromNullable(\n this.errorHelper.getError(response),\n ).orDefaultLazy(() => {\n const parser = new ApduParser(response);\n const buffer = parser.extractFieldByLength(5);\n if (\n !buffer ||\n buffer.length !== 5 ||\n buffer.some((element) => element === undefined)\n ) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Invalid response\"),\n });\n }\n\n const config: AppConfiguration = {\n blindSigningEnabled: Boolean(buffer[0]),\n pubKeyDisplayMode:\n buffer[1] === 0\n ? PublicKeyDisplayMode.LONG\n : PublicKeyDisplayMode.SHORT,\n version: `${buffer[2]}.${buffer[3]}.${buffer[4]}`,\n };\n\n return CommandResultFactory({\n data: config,\n });\n });\n }\n}\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,gCAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EASO,2CACPC,EAAmC,kCACnCC,EAAsB,qBAGtBC,EAAqC,2CAErCC,EAIO,2CAIA,MAAMN,CAOb,CACmB,YAAc,IAAI,qBAGjC,oBAAmB,8BAA4B,EAEjD,KAEA,YAAYO,EAAsC,CAChD,KAAK,KAAOA,CACd,CAEA,SAAgB,CACd,OAAO,IAAI,cAAY,CACrB,IAAK,IACL,IAAK,EACL,GAAI,EACJ,GAAI,CACN,CAAC,EAAE,MAAM,CACX,CAEA,cACEC,EACsD,CACtD,OAAO,QAAM,aACX,KAAK,YAAY,SAASA,CAAQ,CACpC,EAAE,cAAc,IAAM,CAEpB,MAAMC,EADS,IAAI,aAAWD,CAAQ,EAChB,qBAAqB,CAAC,EAC5C,GACE,CAACC,GACDA,EAAO,SAAW,GAClBA,EAAO,KAAMC,GAAYA,IAAY,MAAS,EAE9C,SAAO,wBAAqB,CAC1B,MAAO,IAAI,yBAAuB,kBAAkB,CACtD,CAAC,EAGH,MAAMC,EAA2B,CAC/B,oBAAqB,EAAQF,EAAO,CAAC,EACrC,kBACEA,EAAO,CAAC,IAAM,EACV,uBAAqB,KACrB,uBAAqB,MAC3B,QAAS,GAAGA,EAAO,CAAC,CAAC,IAAIA,EAAO,CAAC,CAAC,IAAIA,EAAO,CAAC,CAAC,EACjD,EAEA,SAAO,wBAAqB,CAC1B,KAAME,CACR,CAAC,CACH,CAAC,CACH,CACF",
4
+ "sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\nimport { Maybe } from \"purify-ts\";\n\nimport { type AppConfiguration } from \"@api/model/AppConfiguration\";\nimport { PublicKeyDisplayMode } from \"@api/model/PublicKeyDisplayMode\";\n\nimport {\n SOLANA_APP_ERRORS,\n SolanaAppCommandErrorFactory,\n type SolanaAppErrorCodes,\n} from \"./utils/SolanaApplicationErrors\";\n\ntype GetAppConfigurationCommandArgs = void;\n\nexport class GetAppConfigurationCommand\n implements\n Command<\n AppConfiguration,\n GetAppConfigurationCommandArgs,\n SolanaAppErrorCodes\n >\n{\n readonly name = \"getAppConfiguration\";\n private readonly errorHelper = new CommandErrorHelper<\n AppConfiguration,\n SolanaAppErrorCodes\n >(SOLANA_APP_ERRORS, SolanaAppCommandErrorFactory);\n\n args: GetAppConfigurationCommandArgs;\n\n constructor(args: GetAppConfigurationCommandArgs) {\n this.args = args;\n }\n\n getApdu(): Apdu {\n return new ApduBuilder({\n cla: 0xe0,\n ins: 0x04,\n p1: 0x00,\n p2: 0x00,\n }).build();\n }\n\n parseResponse(\n response: ApduResponse,\n ): CommandResult<AppConfiguration, SolanaAppErrorCodes> {\n return Maybe.fromNullable(\n this.errorHelper.getError(response),\n ).orDefaultLazy(() => {\n const parser = new ApduParser(response);\n const buffer = parser.extractFieldByLength(5);\n if (\n !buffer ||\n buffer.length !== 5 ||\n buffer.some((element) => element === undefined)\n ) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Invalid response\"),\n });\n }\n\n const config: AppConfiguration = {\n blindSigningEnabled: Boolean(buffer[0]),\n pubKeyDisplayMode:\n buffer[1] === 0\n ? PublicKeyDisplayMode.LONG\n : PublicKeyDisplayMode.SHORT,\n version: `${buffer[2]}.${buffer[3]}.${buffer[4]}`,\n };\n\n return CommandResultFactory({\n data: config,\n });\n });\n }\n}\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,gCAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EASO,2CACPC,EAAmC,kCACnCC,EAAsB,qBAGtBC,EAAqC,2CAErCC,EAIO,2CAIA,MAAMN,CAOb,CACW,KAAO,sBACC,YAAc,IAAI,qBAGjC,oBAAmB,8BAA4B,EAEjD,KAEA,YAAYO,EAAsC,CAChD,KAAK,KAAOA,CACd,CAEA,SAAgB,CACd,OAAO,IAAI,cAAY,CACrB,IAAK,IACL,IAAK,EACL,GAAI,EACJ,GAAI,CACN,CAAC,EAAE,MAAM,CACX,CAEA,cACEC,EACsD,CACtD,OAAO,QAAM,aACX,KAAK,YAAY,SAASA,CAAQ,CACpC,EAAE,cAAc,IAAM,CAEpB,MAAMC,EADS,IAAI,aAAWD,CAAQ,EAChB,qBAAqB,CAAC,EAC5C,GACE,CAACC,GACDA,EAAO,SAAW,GAClBA,EAAO,KAAMC,GAAYA,IAAY,MAAS,EAE9C,SAAO,wBAAqB,CAC1B,MAAO,IAAI,yBAAuB,kBAAkB,CACtD,CAAC,EAGH,MAAMC,EAA2B,CAC/B,oBAAqB,EAAQF,EAAO,CAAC,EACrC,kBACEA,EAAO,CAAC,IAAM,EACV,uBAAqB,KACrB,uBAAqB,MAC3B,QAAS,GAAGA,EAAO,CAAC,CAAC,IAAIA,EAAO,CAAC,CAAC,IAAIA,EAAO,CAAC,CAAC,EACjD,EAEA,SAAO,wBAAqB,CAC1B,KAAME,CACR,CAAC,CACH,CAAC,CACH,CACF",
6
6
  "names": ["GetAppConfigurationCommand_exports", "__export", "GetAppConfigurationCommand", "__toCommonJS", "import_device_management_kit", "import_signer_utils", "import_purify_ts", "import_PublicKeyDisplayMode", "import_SolanaApplicationErrors", "args", "response", "buffer", "element", "config"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var e=require("@ledgerhq/device-management-kit"),s=require("../../../api/model/PublicKeyDisplayMode"),a=require("./GetAppConfigurationCommand");const n=new Uint8Array([224,4,0,0,0]),i=new Uint8Array([1,0,2,5,10]),p=new e.ApduResponse({statusCode:Uint8Array.from([144,0]),data:i}),c=new Uint8Array([1,1,2,5,10]),d=new e.ApduResponse({statusCode:Uint8Array.from([144,0]),data:c});describe("GetAppConfigurationCommand",()=>{let o;beforeEach(()=>{o=new a.GetAppConfigurationCommand,vi.clearAllMocks(),vi.importActual("@ledgerhq/device-management-kit")}),describe("getApdu",()=>{it("should return the correct APDU",()=>{const r=o.getApdu();expect(r.getRawApdu()).toEqual(n)})}),describe("parseResponse",()=>{it("should parse the response correctly",()=>{const r=o.parseResponse(p);expect(r).toStrictEqual((0,e.CommandResultFactory)({data:{blindSigningEnabled:!0,pubKeyDisplayMode:s.PublicKeyDisplayMode.LONG,version:"2.5.10"}}))}),it("should parse the response correctly with short pub key display mode",()=>{const r=o.parseResponse(d);expect(r).toStrictEqual((0,e.CommandResultFactory)({data:{blindSigningEnabled:!0,pubKeyDisplayMode:s.PublicKeyDisplayMode.SHORT,version:"2.5.10"}}))}),describe("error handling",()=>{it("should return error if response is not success",()=>{const r=new e.ApduResponse({statusCode:Uint8Array.from([106,130]),data:new Uint8Array(0)}),t=o.parseResponse(r);expect((0,e.isSuccessCommandResult)(t)).toBe(!1),(0,e.isSuccessCommandResult)(t)?assert.fail("Expected error"):expect(t.error).toEqual(expect.objectContaining({_tag:"SolanaAppCommandError",errorCode:"6a82",message:"Invalid off-chain message format"}))}),it("should return error if response is not success",()=>{const r=new e.ApduResponse({statusCode:Uint8Array.from([106,130]),data:new Uint8Array(0)}),t=o.parseResponse(r);expect((0,e.isSuccessCommandResult)(t)).toBe(!1),(0,e.isSuccessCommandResult)(t)?assert.fail("Expected error"):expect(t.error).toEqual(expect.objectContaining({_tag:"SolanaAppCommandError",errorCode:"6a82",message:"Invalid off-chain message format"}))})})})});
1
+ "use strict";var e=require("@ledgerhq/device-management-kit"),s=require("../../../api/model/PublicKeyDisplayMode"),a=require("./GetAppConfigurationCommand");const n=new Uint8Array([224,4,0,0,0]),i=new Uint8Array([1,0,2,5,10]),p=new e.ApduResponse({statusCode:Uint8Array.from([144,0]),data:i}),c=new Uint8Array([1,1,2,5,10]),d=new e.ApduResponse({statusCode:Uint8Array.from([144,0]),data:c});describe("GetAppConfigurationCommand",()=>{let t;beforeEach(()=>{t=new a.GetAppConfigurationCommand,vi.clearAllMocks(),vi.importActual("@ledgerhq/device-management-kit")}),describe("name",()=>{it("should be 'getAppConfiguration'",()=>{expect(t.name).toBe("getAppConfiguration")})}),describe("getApdu",()=>{it("should return the correct APDU",()=>{const r=t.getApdu();expect(r.getRawApdu()).toEqual(n)})}),describe("parseResponse",()=>{it("should parse the response correctly",()=>{const r=t.parseResponse(p);expect(r).toStrictEqual((0,e.CommandResultFactory)({data:{blindSigningEnabled:!0,pubKeyDisplayMode:s.PublicKeyDisplayMode.LONG,version:"2.5.10"}}))}),it("should parse the response correctly with short pub key display mode",()=>{const r=t.parseResponse(d);expect(r).toStrictEqual((0,e.CommandResultFactory)({data:{blindSigningEnabled:!0,pubKeyDisplayMode:s.PublicKeyDisplayMode.SHORT,version:"2.5.10"}}))}),describe("error handling",()=>{it("should return error if response is not success",()=>{const r=new e.ApduResponse({statusCode:Uint8Array.from([106,130]),data:new Uint8Array(0)}),o=t.parseResponse(r);expect((0,e.isSuccessCommandResult)(o)).toBe(!1),(0,e.isSuccessCommandResult)(o)?assert.fail("Expected error"):expect(o.error).toEqual(expect.objectContaining({_tag:"SolanaAppCommandError",errorCode:"6a82",message:"Invalid off-chain message format"}))}),it("should return error if response is not success",()=>{const r=new e.ApduResponse({statusCode:Uint8Array.from([106,130]),data:new Uint8Array(0)}),o=t.parseResponse(r);expect((0,e.isSuccessCommandResult)(o)).toBe(!1),(0,e.isSuccessCommandResult)(o)?assert.fail("Expected error"):expect(o.error).toEqual(expect.objectContaining({_tag:"SolanaAppCommandError",errorCode:"6a82",message:"Invalid off-chain message format"}))})})})});
2
2
  //# sourceMappingURL=GetAppConfigurationCommand.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/command/GetAppConfigurationCommand.test.ts"],
4
- "sourcesContent": ["import {\n ApduResponse,\n CommandResultFactory,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { PublicKeyDisplayMode } from \"@api/model/PublicKeyDisplayMode\";\n\nimport { GetAppConfigurationCommand } from \"./GetAppConfigurationCommand\";\n\nconst GET_APP_CONFIG_APDU = new Uint8Array([0xe0, 0x04, 0x00, 0x00, 0x00]);\n\nconst GET_APP_CONFIG_RESPONSE_DATA = new Uint8Array([\n 0x01, 0x00, 0x02, 0x05, 0x0a,\n]);\n\nconst GET_APP_CONFIG_RESPONSE = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: GET_APP_CONFIG_RESPONSE_DATA,\n});\n\nconst GET_APP_CONFIG_RESPONSE_DATA_SHORT_PUB_KEY_DISPLAY_MODE = new Uint8Array([\n 0x01, 0x01, 0x02, 0x05, 0x0a,\n]);\n\nconst GET_APP_CONFIG_RESPONSE_SHORT_PUB_KEY_DISPLAY_MODE = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: GET_APP_CONFIG_RESPONSE_DATA_SHORT_PUB_KEY_DISPLAY_MODE,\n});\n\ndescribe(\"GetAppConfigurationCommand\", () => {\n let command: GetAppConfigurationCommand;\n\n beforeEach(() => {\n command = new GetAppConfigurationCommand();\n vi.clearAllMocks();\n vi.importActual(\"@ledgerhq/device-management-kit\");\n });\n\n describe(\"getApdu\", () => {\n it(\"should return the correct APDU\", () => {\n const apdu = command.getApdu();\n expect(apdu.getRawApdu()).toEqual(GET_APP_CONFIG_APDU);\n });\n });\n\n describe(\"parseResponse\", () => {\n it(\"should parse the response correctly\", () => {\n const parsed = command.parseResponse(GET_APP_CONFIG_RESPONSE);\n expect(parsed).toStrictEqual(\n CommandResultFactory({\n data: {\n blindSigningEnabled: true,\n pubKeyDisplayMode: PublicKeyDisplayMode.LONG,\n version: \"2.5.10\",\n },\n }),\n );\n });\n\n it(\"should parse the response correctly with short pub key display mode\", () => {\n const parsed = command.parseResponse(\n GET_APP_CONFIG_RESPONSE_SHORT_PUB_KEY_DISPLAY_MODE,\n );\n expect(parsed).toStrictEqual(\n CommandResultFactory({\n data: {\n blindSigningEnabled: true,\n pubKeyDisplayMode: PublicKeyDisplayMode.SHORT,\n version: \"2.5.10\",\n },\n }),\n );\n });\n\n describe(\"error handling\", () => {\n it(\"should return error if response is not success\", () => {\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x6a, 0x82]),\n data: new Uint8Array(0),\n });\n const result = command.parseResponse(response);\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n expect(result.error).toEqual(\n expect.objectContaining({\n _tag: \"SolanaAppCommandError\",\n errorCode: \"6a82\",\n message: \"Invalid off-chain message format\",\n }),\n );\n } else {\n assert.fail(\"Expected error\");\n }\n });\n\n it(\"should return error if response is not success\", () => {\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x6a, 0x82]),\n data: new Uint8Array(0),\n });\n const result = command.parseResponse(response);\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n expect(result.error).toEqual(\n expect.objectContaining({\n _tag: \"SolanaAppCommandError\",\n errorCode: \"6a82\",\n message: \"Invalid off-chain message format\",\n }),\n );\n } else {\n assert.fail(\"Expected error\");\n }\n });\n });\n });\n});\n"],
5
- "mappings": "aAAA,IAAAA,EAIO,2CAEPC,EAAqC,2CAErCC,EAA2C,wCAE3C,MAAMC,EAAsB,IAAI,WAAW,CAAC,IAAM,EAAM,EAAM,EAAM,CAAI,CAAC,EAEnEC,EAA+B,IAAI,WAAW,CAClD,EAAM,EAAM,EAAM,EAAM,EAC1B,CAAC,EAEKC,EAA0B,IAAI,eAAa,CAC/C,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAMD,CACR,CAAC,EAEKE,EAA0D,IAAI,WAAW,CAC7E,EAAM,EAAM,EAAM,EAAM,EAC1B,CAAC,EAEKC,EAAqD,IAAI,eAAa,CAC1E,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAMD,CACR,CAAC,EAED,SAAS,6BAA8B,IAAM,CAC3C,IAAIE,EAEJ,WAAW,IAAM,CACfA,EAAU,IAAI,6BACd,GAAG,cAAc,EACjB,GAAG,aAAa,iCAAiC,CACnD,CAAC,EAED,SAAS,UAAW,IAAM,CACxB,GAAG,iCAAkC,IAAM,CACzC,MAAMC,EAAOD,EAAQ,QAAQ,EAC7B,OAAOC,EAAK,WAAW,CAAC,EAAE,QAAQN,CAAmB,CACvD,CAAC,CACH,CAAC,EAED,SAAS,gBAAiB,IAAM,CAC9B,GAAG,sCAAuC,IAAM,CAC9C,MAAMO,EAASF,EAAQ,cAAcH,CAAuB,EAC5D,OAAOK,CAAM,EAAE,iBACb,wBAAqB,CACnB,KAAM,CACJ,oBAAqB,GACrB,kBAAmB,uBAAqB,KACxC,QAAS,QACX,CACF,CAAC,CACH,CACF,CAAC,EAED,GAAG,sEAAuE,IAAM,CAC9E,MAAMA,EAASF,EAAQ,cACrBD,CACF,EACA,OAAOG,CAAM,EAAE,iBACb,wBAAqB,CACnB,KAAM,CACJ,oBAAqB,GACrB,kBAAmB,uBAAqB,MACxC,QAAS,QACX,CACF,CAAC,CACH,CACF,CAAC,EAED,SAAS,iBAAkB,IAAM,CAC/B,GAAG,iDAAkD,IAAM,CACzD,MAAMC,EAAW,IAAI,eAAa,CAChC,WAAY,WAAW,KAAK,CAAC,IAAM,GAAI,CAAC,EACxC,KAAM,IAAI,WAAW,CAAC,CACxB,CAAC,EACKC,EAASJ,EAAQ,cAAcG,CAAQ,EAC7C,UAAO,0BAAuBC,CAAM,CAAC,EAAE,KAAK,EAAK,KAC5C,0BAAuBA,CAAM,EAShC,OAAO,KAAK,gBAAgB,EAR5B,OAAOA,EAAO,KAAK,EAAE,QACnB,OAAO,iBAAiB,CACtB,KAAM,wBACN,UAAW,OACX,QAAS,kCACX,CAAC,CACH,CAIJ,CAAC,EAED,GAAG,iDAAkD,IAAM,CACzD,MAAMD,EAAW,IAAI,eAAa,CAChC,WAAY,WAAW,KAAK,CAAC,IAAM,GAAI,CAAC,EACxC,KAAM,IAAI,WAAW,CAAC,CACxB,CAAC,EACKC,EAASJ,EAAQ,cAAcG,CAAQ,EAC7C,UAAO,0BAAuBC,CAAM,CAAC,EAAE,KAAK,EAAK,KAC5C,0BAAuBA,CAAM,EAShC,OAAO,KAAK,gBAAgB,EAR5B,OAAOA,EAAO,KAAK,EAAE,QACnB,OAAO,iBAAiB,CACtB,KAAM,wBACN,UAAW,OACX,QAAS,kCACX,CAAC,CACH,CAIJ,CAAC,CACH,CAAC,CACH,CAAC,CACH,CAAC",
4
+ "sourcesContent": ["import {\n ApduResponse,\n CommandResultFactory,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { PublicKeyDisplayMode } from \"@api/model/PublicKeyDisplayMode\";\n\nimport { GetAppConfigurationCommand } from \"./GetAppConfigurationCommand\";\n\nconst GET_APP_CONFIG_APDU = new Uint8Array([0xe0, 0x04, 0x00, 0x00, 0x00]);\n\nconst GET_APP_CONFIG_RESPONSE_DATA = new Uint8Array([\n 0x01, 0x00, 0x02, 0x05, 0x0a,\n]);\n\nconst GET_APP_CONFIG_RESPONSE = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: GET_APP_CONFIG_RESPONSE_DATA,\n});\n\nconst GET_APP_CONFIG_RESPONSE_DATA_SHORT_PUB_KEY_DISPLAY_MODE = new Uint8Array([\n 0x01, 0x01, 0x02, 0x05, 0x0a,\n]);\n\nconst GET_APP_CONFIG_RESPONSE_SHORT_PUB_KEY_DISPLAY_MODE = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: GET_APP_CONFIG_RESPONSE_DATA_SHORT_PUB_KEY_DISPLAY_MODE,\n});\n\ndescribe(\"GetAppConfigurationCommand\", () => {\n let command: GetAppConfigurationCommand;\n\n beforeEach(() => {\n command = new GetAppConfigurationCommand();\n vi.clearAllMocks();\n vi.importActual(\"@ledgerhq/device-management-kit\");\n });\n\n describe(\"name\", () => {\n it(\"should be 'getAppConfiguration'\", () => {\n expect(command.name).toBe(\"getAppConfiguration\");\n });\n });\n\n describe(\"getApdu\", () => {\n it(\"should return the correct APDU\", () => {\n const apdu = command.getApdu();\n expect(apdu.getRawApdu()).toEqual(GET_APP_CONFIG_APDU);\n });\n });\n\n describe(\"parseResponse\", () => {\n it(\"should parse the response correctly\", () => {\n const parsed = command.parseResponse(GET_APP_CONFIG_RESPONSE);\n expect(parsed).toStrictEqual(\n CommandResultFactory({\n data: {\n blindSigningEnabled: true,\n pubKeyDisplayMode: PublicKeyDisplayMode.LONG,\n version: \"2.5.10\",\n },\n }),\n );\n });\n\n it(\"should parse the response correctly with short pub key display mode\", () => {\n const parsed = command.parseResponse(\n GET_APP_CONFIG_RESPONSE_SHORT_PUB_KEY_DISPLAY_MODE,\n );\n expect(parsed).toStrictEqual(\n CommandResultFactory({\n data: {\n blindSigningEnabled: true,\n pubKeyDisplayMode: PublicKeyDisplayMode.SHORT,\n version: \"2.5.10\",\n },\n }),\n );\n });\n\n describe(\"error handling\", () => {\n it(\"should return error if response is not success\", () => {\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x6a, 0x82]),\n data: new Uint8Array(0),\n });\n const result = command.parseResponse(response);\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n expect(result.error).toEqual(\n expect.objectContaining({\n _tag: \"SolanaAppCommandError\",\n errorCode: \"6a82\",\n message: \"Invalid off-chain message format\",\n }),\n );\n } else {\n assert.fail(\"Expected error\");\n }\n });\n\n it(\"should return error if response is not success\", () => {\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x6a, 0x82]),\n data: new Uint8Array(0),\n });\n const result = command.parseResponse(response);\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n expect(result.error).toEqual(\n expect.objectContaining({\n _tag: \"SolanaAppCommandError\",\n errorCode: \"6a82\",\n message: \"Invalid off-chain message format\",\n }),\n );\n } else {\n assert.fail(\"Expected error\");\n }\n });\n });\n });\n});\n"],
5
+ "mappings": "aAAA,IAAAA,EAIO,2CAEPC,EAAqC,2CAErCC,EAA2C,wCAE3C,MAAMC,EAAsB,IAAI,WAAW,CAAC,IAAM,EAAM,EAAM,EAAM,CAAI,CAAC,EAEnEC,EAA+B,IAAI,WAAW,CAClD,EAAM,EAAM,EAAM,EAAM,EAC1B,CAAC,EAEKC,EAA0B,IAAI,eAAa,CAC/C,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAMD,CACR,CAAC,EAEKE,EAA0D,IAAI,WAAW,CAC7E,EAAM,EAAM,EAAM,EAAM,EAC1B,CAAC,EAEKC,EAAqD,IAAI,eAAa,CAC1E,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAMD,CACR,CAAC,EAED,SAAS,6BAA8B,IAAM,CAC3C,IAAIE,EAEJ,WAAW,IAAM,CACfA,EAAU,IAAI,6BACd,GAAG,cAAc,EACjB,GAAG,aAAa,iCAAiC,CACnD,CAAC,EAED,SAAS,OAAQ,IAAM,CACrB,GAAG,kCAAmC,IAAM,CAC1C,OAAOA,EAAQ,IAAI,EAAE,KAAK,qBAAqB,CACjD,CAAC,CACH,CAAC,EAED,SAAS,UAAW,IAAM,CACxB,GAAG,iCAAkC,IAAM,CACzC,MAAMC,EAAOD,EAAQ,QAAQ,EAC7B,OAAOC,EAAK,WAAW,CAAC,EAAE,QAAQN,CAAmB,CACvD,CAAC,CACH,CAAC,EAED,SAAS,gBAAiB,IAAM,CAC9B,GAAG,sCAAuC,IAAM,CAC9C,MAAMO,EAASF,EAAQ,cAAcH,CAAuB,EAC5D,OAAOK,CAAM,EAAE,iBACb,wBAAqB,CACnB,KAAM,CACJ,oBAAqB,GACrB,kBAAmB,uBAAqB,KACxC,QAAS,QACX,CACF,CAAC,CACH,CACF,CAAC,EAED,GAAG,sEAAuE,IAAM,CAC9E,MAAMA,EAASF,EAAQ,cACrBD,CACF,EACA,OAAOG,CAAM,EAAE,iBACb,wBAAqB,CACnB,KAAM,CACJ,oBAAqB,GACrB,kBAAmB,uBAAqB,MACxC,QAAS,QACX,CACF,CAAC,CACH,CACF,CAAC,EAED,SAAS,iBAAkB,IAAM,CAC/B,GAAG,iDAAkD,IAAM,CACzD,MAAMC,EAAW,IAAI,eAAa,CAChC,WAAY,WAAW,KAAK,CAAC,IAAM,GAAI,CAAC,EACxC,KAAM,IAAI,WAAW,CAAC,CACxB,CAAC,EACKC,EAASJ,EAAQ,cAAcG,CAAQ,EAC7C,UAAO,0BAAuBC,CAAM,CAAC,EAAE,KAAK,EAAK,KAC5C,0BAAuBA,CAAM,EAShC,OAAO,KAAK,gBAAgB,EAR5B,OAAOA,EAAO,KAAK,EAAE,QACnB,OAAO,iBAAiB,CACtB,KAAM,wBACN,UAAW,OACX,QAAS,kCACX,CAAC,CACH,CAIJ,CAAC,EAED,GAAG,iDAAkD,IAAM,CACzD,MAAMD,EAAW,IAAI,eAAa,CAChC,WAAY,WAAW,KAAK,CAAC,IAAM,GAAI,CAAC,EACxC,KAAM,IAAI,WAAW,CAAC,CACxB,CAAC,EACKC,EAASJ,EAAQ,cAAcG,CAAQ,EAC7C,UAAO,0BAAuBC,CAAM,CAAC,EAAE,KAAK,EAAK,KAC5C,0BAAuBA,CAAM,EAShC,OAAO,KAAK,gBAAgB,EAR5B,OAAOA,EAAO,KAAK,EAAE,QACnB,OAAO,iBAAiB,CACtB,KAAM,wBACN,UAAW,OACX,QAAS,kCACX,CAAC,CACH,CAIJ,CAAC,CACH,CAAC,CACH,CAAC,CACH,CAAC",
6
6
  "names": ["import_device_management_kit", "import_PublicKeyDisplayMode", "import_GetAppConfigurationCommand", "GET_APP_CONFIG_APDU", "GET_APP_CONFIG_RESPONSE_DATA", "GET_APP_CONFIG_RESPONSE", "GET_APP_CONFIG_RESPONSE_DATA_SHORT_PUB_KEY_DISPLAY_MODE", "GET_APP_CONFIG_RESPONSE_SHORT_PUB_KEY_DISPLAY_MODE", "command", "apdu", "parsed", "response", "result"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var l=Object.defineProperty;var C=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var u=Object.prototype.hasOwnProperty;var A=(o,e)=>{for(var n in e)l(o,n,{get:e[n],enumerable:!0})},c=(o,e,n,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of i(e))!u.call(o,a)&&a!==n&&l(o,a,{get:()=>e[a],enumerable:!(t=C(e,a))||t.enumerable});return o};var g=o=>c(l({},"__esModule",{value:!0}),o);var f={};A(f,{GetChallengeCommand:()=>S});module.exports=g(f);var r=require("@ledgerhq/device-management-kit"),m=require("@ledgerhq/signer-utils"),d=require("purify-ts"),p=require("./utils/SolanaApplicationErrors");const y=224,R=32,E=0,h=0,s=4;class S{errorHelper=new m.CommandErrorHelper(p.SOLANA_APP_ERRORS,p.SolanaAppCommandErrorFactory);getApdu(){return new r.ApduBuilder({cla:y,ins:R,p1:E,p2:h}).build()}parseResponse(e){return d.Maybe.fromNullable(this.errorHelper.getError(e)).orDefaultLazy(()=>{const n=new r.ApduParser(e);if(n.testMinimalLength(s)===!1)return(0,r.CommandResultFactory)({error:new r.InvalidStatusWordError("Challenge key is missing")});const t=n.encodeToHexaString(n.extractFieldByLength(s));return(0,r.CommandResultFactory)({data:{challenge:t}})})}}0&&(module.exports={GetChallengeCommand});
1
+ "use strict";var p=Object.defineProperty;var C=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var u=Object.prototype.hasOwnProperty;var g=(o,e)=>{for(var n in e)p(o,n,{get:e[n],enumerable:!0})},A=(o,e,n,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of i(e))!u.call(o,a)&&a!==n&&p(o,a,{get:()=>e[a],enumerable:!(t=C(e,a))||t.enumerable});return o};var c=o=>A(p({},"__esModule",{value:!0}),o);var f={};g(f,{GetChallengeCommand:()=>S});module.exports=c(f);var r=require("@ledgerhq/device-management-kit"),m=require("@ledgerhq/signer-utils"),d=require("purify-ts"),l=require("./utils/SolanaApplicationErrors");const y=224,R=32,h=0,E=0,s=4;class S{name="getChallenge";errorHelper=new m.CommandErrorHelper(l.SOLANA_APP_ERRORS,l.SolanaAppCommandErrorFactory);getApdu(){return new r.ApduBuilder({cla:y,ins:R,p1:h,p2:E}).build()}parseResponse(e){return d.Maybe.fromNullable(this.errorHelper.getError(e)).orDefaultLazy(()=>{const n=new r.ApduParser(e);if(n.testMinimalLength(s)===!1)return(0,r.CommandResultFactory)({error:new r.InvalidStatusWordError("Challenge key is missing")});const t=n.encodeToHexaString(n.extractFieldByLength(s));return(0,r.CommandResultFactory)({data:{challenge:t}})})}}0&&(module.exports={GetChallengeCommand});
2
2
  //# sourceMappingURL=GetChallengeCommand.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/command/GetChallengeCommand.ts"],
4
- "sourcesContent": ["// https://github.com/LedgerHQ/app-solana/blob/develop/doc/api.md#get-challenge\nimport {\n type Apdu,\n ApduBuilder,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\nimport { Maybe } from \"purify-ts\";\n\nimport {\n SOLANA_APP_ERRORS,\n SolanaAppCommandErrorFactory,\n type SolanaAppErrorCodes,\n} from \"./utils/SolanaApplicationErrors\";\n\nconst CLA = 0xe0;\nconst INS = 0x20;\nconst P1 = 0x00;\nconst P2 = 0x00;\nconst CHALLENGE_LENGTH = 4;\n\nexport type GetChallengeCommandResponse = {\n challenge: string;\n};\n\nexport class GetChallengeCommand\n implements Command<GetChallengeCommandResponse, void, SolanaAppErrorCodes>\n{\n private readonly errorHelper = new CommandErrorHelper<\n GetChallengeCommandResponse,\n SolanaAppErrorCodes\n >(SOLANA_APP_ERRORS, SolanaAppCommandErrorFactory);\n\n getApdu(): Apdu {\n return new ApduBuilder({\n cla: CLA,\n ins: INS,\n p1: P1,\n p2: P2,\n }).build();\n }\n\n parseResponse(\n response: ApduResponse,\n ): CommandResult<GetChallengeCommandResponse, SolanaAppErrorCodes> {\n return Maybe.fromNullable(\n this.errorHelper.getError(response),\n ).orDefaultLazy(() => {\n const parser = new ApduParser(response);\n\n if (parser.testMinimalLength(CHALLENGE_LENGTH) === false) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Challenge key is missing\"),\n });\n }\n\n const challenge = parser.encodeToHexaString(\n parser.extractFieldByLength(CHALLENGE_LENGTH),\n );\n\n return CommandResultFactory({\n data: {\n challenge,\n },\n });\n });\n }\n}\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,yBAAAE,IAAA,eAAAC,EAAAH,GACA,IAAAI,EASO,2CACPC,EAAmC,kCACnCC,EAAsB,qBAEtBC,EAIO,2CAEP,MAAMC,EAAM,IACNC,EAAM,GACNC,EAAK,EACLC,EAAK,EACLC,EAAmB,EAMlB,MAAMV,CAEb,CACmB,YAAc,IAAI,qBAGjC,oBAAmB,8BAA4B,EAEjD,SAAgB,CACd,OAAO,IAAI,cAAY,CACrB,IAAKM,EACL,IAAKC,EACL,GAAIC,EACJ,GAAIC,CACN,CAAC,EAAE,MAAM,CACX,CAEA,cACEE,EACiE,CACjE,OAAO,QAAM,aACX,KAAK,YAAY,SAASA,CAAQ,CACpC,EAAE,cAAc,IAAM,CACpB,MAAMC,EAAS,IAAI,aAAWD,CAAQ,EAEtC,GAAIC,EAAO,kBAAkBF,CAAgB,IAAM,GACjD,SAAO,wBAAqB,CAC1B,MAAO,IAAI,yBAAuB,0BAA0B,CAC9D,CAAC,EAGH,MAAMG,EAAYD,EAAO,mBACvBA,EAAO,qBAAqBF,CAAgB,CAC9C,EAEA,SAAO,wBAAqB,CAC1B,KAAM,CACJ,UAAAG,CACF,CACF,CAAC,CACH,CAAC,CACH,CACF",
4
+ "sourcesContent": ["// https://github.com/LedgerHQ/app-solana/blob/develop/doc/api.md#get-challenge\nimport {\n type Apdu,\n ApduBuilder,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\nimport { Maybe } from \"purify-ts\";\n\nimport {\n SOLANA_APP_ERRORS,\n SolanaAppCommandErrorFactory,\n type SolanaAppErrorCodes,\n} from \"./utils/SolanaApplicationErrors\";\n\nconst CLA = 0xe0;\nconst INS = 0x20;\nconst P1 = 0x00;\nconst P2 = 0x00;\nconst CHALLENGE_LENGTH = 4;\n\nexport type GetChallengeCommandResponse = {\n challenge: string;\n};\n\nexport class GetChallengeCommand\n implements Command<GetChallengeCommandResponse, void, SolanaAppErrorCodes>\n{\n readonly name = \"getChallenge\";\n private readonly errorHelper = new CommandErrorHelper<\n GetChallengeCommandResponse,\n SolanaAppErrorCodes\n >(SOLANA_APP_ERRORS, SolanaAppCommandErrorFactory);\n\n getApdu(): Apdu {\n return new ApduBuilder({\n cla: CLA,\n ins: INS,\n p1: P1,\n p2: P2,\n }).build();\n }\n\n parseResponse(\n response: ApduResponse,\n ): CommandResult<GetChallengeCommandResponse, SolanaAppErrorCodes> {\n return Maybe.fromNullable(\n this.errorHelper.getError(response),\n ).orDefaultLazy(() => {\n const parser = new ApduParser(response);\n\n if (parser.testMinimalLength(CHALLENGE_LENGTH) === false) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Challenge key is missing\"),\n });\n }\n\n const challenge = parser.encodeToHexaString(\n parser.extractFieldByLength(CHALLENGE_LENGTH),\n );\n\n return CommandResultFactory({\n data: {\n challenge,\n },\n });\n });\n }\n}\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,yBAAAE,IAAA,eAAAC,EAAAH,GACA,IAAAI,EASO,2CACPC,EAAmC,kCACnCC,EAAsB,qBAEtBC,EAIO,2CAEP,MAAMC,EAAM,IACNC,EAAM,GACNC,EAAK,EACLC,EAAK,EACLC,EAAmB,EAMlB,MAAMV,CAEb,CACW,KAAO,eACC,YAAc,IAAI,qBAGjC,oBAAmB,8BAA4B,EAEjD,SAAgB,CACd,OAAO,IAAI,cAAY,CACrB,IAAKM,EACL,IAAKC,EACL,GAAIC,EACJ,GAAIC,CACN,CAAC,EAAE,MAAM,CACX,CAEA,cACEE,EACiE,CACjE,OAAO,QAAM,aACX,KAAK,YAAY,SAASA,CAAQ,CACpC,EAAE,cAAc,IAAM,CACpB,MAAMC,EAAS,IAAI,aAAWD,CAAQ,EAEtC,GAAIC,EAAO,kBAAkBF,CAAgB,IAAM,GACjD,SAAO,wBAAqB,CAC1B,MAAO,IAAI,yBAAuB,0BAA0B,CAC9D,CAAC,EAGH,MAAMG,EAAYD,EAAO,mBACvBA,EAAO,qBAAqBF,CAAgB,CAC9C,EAEA,SAAO,wBAAqB,CAC1B,KAAM,CACJ,UAAAG,CACF,CACF,CAAC,CACH,CAAC,CACH,CACF",
6
6
  "names": ["GetChallengeCommand_exports", "__export", "GetChallengeCommand", "__toCommonJS", "import_device_management_kit", "import_signer_utils", "import_purify_ts", "import_SolanaApplicationErrors", "CLA", "INS", "P1", "P2", "CHALLENGE_LENGTH", "response", "parser", "challenge"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var t=require("@ledgerhq/device-management-kit"),s=require("./GetChallengeCommand");const o=Uint8Array.from([224,32,0,0,0]),a=Uint8Array.from([1,2,3,4]),n={statusCode:Uint8Array.from([144,0]),data:a},c={statusCode:Uint8Array.from([85,21]),data:new Uint8Array},d=Uint8Array.from([1,2]),p={statusCode:Uint8Array.from([144,0]),data:d};describe("GetChallengeCommand",()=>{let r;beforeEach(()=>{r=new s.GetChallengeCommand}),describe("getApdu",()=>{it("should return the challenge apdu",()=>{const e=r.getApdu();expect(e.getRawApdu()).toStrictEqual(o)})}),describe("parseResponse",()=>{it("should parse the response",()=>{const e=r.parseResponse(n);expect(e).toStrictEqual((0,t.CommandResultFactory)({data:{challenge:"01020304"}}))}),it("should return an error if the response is not successful",()=>{const e=r.parseResponse(c);expect((0,t.isSuccessCommandResult)(e)).toBe(!1)}),it("should return an error if the response is too short",()=>{const e=r.parseResponse(p);expect((0,t.isSuccessCommandResult)(e)).toBe(!1),expect(e.error).toBeInstanceOf(t.InvalidStatusWordError)})})});
1
+ "use strict";var t=require("@ledgerhq/device-management-kit"),r=require("./GetChallengeCommand");const o=Uint8Array.from([224,32,0,0,0]),a=Uint8Array.from([1,2,3,4]),n={statusCode:Uint8Array.from([144,0]),data:a},c={statusCode:Uint8Array.from([85,21]),data:new Uint8Array},d=Uint8Array.from([1,2]),l={statusCode:Uint8Array.from([144,0]),data:d};describe("GetChallengeCommand",()=>{let s;beforeEach(()=>{s=new r.GetChallengeCommand}),describe("name",()=>{it("should be 'getChallenge'",()=>{expect(s.name).toBe("getChallenge")})}),describe("getApdu",()=>{it("should return the challenge apdu",()=>{const e=s.getApdu();expect(e.getRawApdu()).toStrictEqual(o)})}),describe("parseResponse",()=>{it("should parse the response",()=>{const e=s.parseResponse(n);expect(e).toStrictEqual((0,t.CommandResultFactory)({data:{challenge:"01020304"}}))}),it("should return an error if the response is not successful",()=>{const e=s.parseResponse(c);expect((0,t.isSuccessCommandResult)(e)).toBe(!1)}),it("should return an error if the response is too short",()=>{const e=s.parseResponse(l);expect((0,t.isSuccessCommandResult)(e)).toBe(!1),expect(e.error).toBeInstanceOf(t.InvalidStatusWordError)})})});
2
2
  //# sourceMappingURL=GetChallengeCommand.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/command/GetChallengeCommand.test.ts"],
4
- "sourcesContent": ["import {\n CommandResultFactory,\n InvalidStatusWordError,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { GetChallengeCommand } from \"./GetChallengeCommand\";\n\nconst GET_CHALLENGE_APDU = Uint8Array.from([0xe0, 0x20, 0x00, 0x00, 0x00]);\n\nconst LNX_RESPONSE_DATA_GOOD = Uint8Array.from([0x01, 0x02, 0x03, 0x04]);\n\nconst LNX_RESPONSE_GOOD = {\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: LNX_RESPONSE_DATA_GOOD,\n};\n\nconst LNX_RESPONSE_LOCKED = {\n statusCode: Uint8Array.from([0x55, 0x15]),\n data: new Uint8Array(),\n};\n\nconst LNX_RESPONSE_DATA_TOO_SHORT = Uint8Array.from([0x01, 0x02]);\n\nconst LNX_RESPONSE_TOO_SHORT = {\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: LNX_RESPONSE_DATA_TOO_SHORT,\n};\n\ndescribe(\"GetChallengeCommand\", () => {\n let command: GetChallengeCommand;\n\n beforeEach(() => {\n command = new GetChallengeCommand();\n });\n\n describe(\"getApdu\", () => {\n it(\"should return the challenge apdu\", () => {\n const apdu = command.getApdu();\n expect(apdu.getRawApdu()).toStrictEqual(GET_CHALLENGE_APDU);\n });\n });\n\n describe(\"parseResponse\", () => {\n it(\"should parse the response\", () => {\n const parsedResponse = command.parseResponse(LNX_RESPONSE_GOOD);\n expect(parsedResponse).toStrictEqual(\n CommandResultFactory({\n data: {\n challenge: \"01020304\",\n },\n }),\n );\n });\n\n it(\"should return an error if the response is not successful\", () => {\n const result = command.parseResponse(LNX_RESPONSE_LOCKED);\n expect(isSuccessCommandResult(result)).toBe(false);\n });\n\n it(\"should return an error if the response is too short\", () => {\n const result = command.parseResponse(LNX_RESPONSE_TOO_SHORT);\n\n expect(isSuccessCommandResult(result)).toBe(false);\n // @ts-ignore\n expect(result.error).toBeInstanceOf(InvalidStatusWordError);\n });\n });\n});\n"],
5
- "mappings": "aAAA,IAAAA,EAIO,2CAEPC,EAAoC,iCAEpC,MAAMC,EAAqB,WAAW,KAAK,CAAC,IAAM,GAAM,EAAM,EAAM,CAAI,CAAC,EAEnEC,EAAyB,WAAW,KAAK,CAAC,EAAM,EAAM,EAAM,CAAI,CAAC,EAEjEC,EAAoB,CACxB,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAMD,CACR,EAEME,EAAsB,CAC1B,WAAY,WAAW,KAAK,CAAC,GAAM,EAAI,CAAC,EACxC,KAAM,IAAI,UACZ,EAEMC,EAA8B,WAAW,KAAK,CAAC,EAAM,CAAI,CAAC,EAE1DC,EAAyB,CAC7B,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAMD,CACR,EAEA,SAAS,sBAAuB,IAAM,CACpC,IAAIE,EAEJ,WAAW,IAAM,CACfA,EAAU,IAAI,qBAChB,CAAC,EAED,SAAS,UAAW,IAAM,CACxB,GAAG,mCAAoC,IAAM,CAC3C,MAAMC,EAAOD,EAAQ,QAAQ,EAC7B,OAAOC,EAAK,WAAW,CAAC,EAAE,cAAcP,CAAkB,CAC5D,CAAC,CACH,CAAC,EAED,SAAS,gBAAiB,IAAM,CAC9B,GAAG,4BAA6B,IAAM,CACpC,MAAMQ,EAAiBF,EAAQ,cAAcJ,CAAiB,EAC9D,OAAOM,CAAc,EAAE,iBACrB,wBAAqB,CACnB,KAAM,CACJ,UAAW,UACb,CACF,CAAC,CACH,CACF,CAAC,EAED,GAAG,2DAA4D,IAAM,CACnE,MAAMC,EAASH,EAAQ,cAAcH,CAAmB,EACxD,UAAO,0BAAuBM,CAAM,CAAC,EAAE,KAAK,EAAK,CACnD,CAAC,EAED,GAAG,sDAAuD,IAAM,CAC9D,MAAMA,EAASH,EAAQ,cAAcD,CAAsB,EAE3D,UAAO,0BAAuBI,CAAM,CAAC,EAAE,KAAK,EAAK,EAEjD,OAAOA,EAAO,KAAK,EAAE,eAAe,wBAAsB,CAC5D,CAAC,CACH,CAAC,CACH,CAAC",
4
+ "sourcesContent": ["import {\n CommandResultFactory,\n InvalidStatusWordError,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { GetChallengeCommand } from \"./GetChallengeCommand\";\n\nconst GET_CHALLENGE_APDU = Uint8Array.from([0xe0, 0x20, 0x00, 0x00, 0x00]);\n\nconst LNX_RESPONSE_DATA_GOOD = Uint8Array.from([0x01, 0x02, 0x03, 0x04]);\n\nconst LNX_RESPONSE_GOOD = {\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: LNX_RESPONSE_DATA_GOOD,\n};\n\nconst LNX_RESPONSE_LOCKED = {\n statusCode: Uint8Array.from([0x55, 0x15]),\n data: new Uint8Array(),\n};\n\nconst LNX_RESPONSE_DATA_TOO_SHORT = Uint8Array.from([0x01, 0x02]);\n\nconst LNX_RESPONSE_TOO_SHORT = {\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: LNX_RESPONSE_DATA_TOO_SHORT,\n};\n\ndescribe(\"GetChallengeCommand\", () => {\n let command: GetChallengeCommand;\n\n beforeEach(() => {\n command = new GetChallengeCommand();\n });\n\n describe(\"name\", () => {\n it(\"should be 'getChallenge'\", () => {\n expect(command.name).toBe(\"getChallenge\");\n });\n });\n\n describe(\"getApdu\", () => {\n it(\"should return the challenge apdu\", () => {\n const apdu = command.getApdu();\n expect(apdu.getRawApdu()).toStrictEqual(GET_CHALLENGE_APDU);\n });\n });\n\n describe(\"parseResponse\", () => {\n it(\"should parse the response\", () => {\n const parsedResponse = command.parseResponse(LNX_RESPONSE_GOOD);\n expect(parsedResponse).toStrictEqual(\n CommandResultFactory({\n data: {\n challenge: \"01020304\",\n },\n }),\n );\n });\n\n it(\"should return an error if the response is not successful\", () => {\n const result = command.parseResponse(LNX_RESPONSE_LOCKED);\n expect(isSuccessCommandResult(result)).toBe(false);\n });\n\n it(\"should return an error if the response is too short\", () => {\n const result = command.parseResponse(LNX_RESPONSE_TOO_SHORT);\n\n expect(isSuccessCommandResult(result)).toBe(false);\n // @ts-ignore\n expect(result.error).toBeInstanceOf(InvalidStatusWordError);\n });\n });\n});\n"],
5
+ "mappings": "aAAA,IAAAA,EAIO,2CAEPC,EAAoC,iCAEpC,MAAMC,EAAqB,WAAW,KAAK,CAAC,IAAM,GAAM,EAAM,EAAM,CAAI,CAAC,EAEnEC,EAAyB,WAAW,KAAK,CAAC,EAAM,EAAM,EAAM,CAAI,CAAC,EAEjEC,EAAoB,CACxB,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAMD,CACR,EAEME,EAAsB,CAC1B,WAAY,WAAW,KAAK,CAAC,GAAM,EAAI,CAAC,EACxC,KAAM,IAAI,UACZ,EAEMC,EAA8B,WAAW,KAAK,CAAC,EAAM,CAAI,CAAC,EAE1DC,EAAyB,CAC7B,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAMD,CACR,EAEA,SAAS,sBAAuB,IAAM,CACpC,IAAIE,EAEJ,WAAW,IAAM,CACfA,EAAU,IAAI,qBAChB,CAAC,EAED,SAAS,OAAQ,IAAM,CACrB,GAAG,2BAA4B,IAAM,CACnC,OAAOA,EAAQ,IAAI,EAAE,KAAK,cAAc,CAC1C,CAAC,CACH,CAAC,EAED,SAAS,UAAW,IAAM,CACxB,GAAG,mCAAoC,IAAM,CAC3C,MAAMC,EAAOD,EAAQ,QAAQ,EAC7B,OAAOC,EAAK,WAAW,CAAC,EAAE,cAAcP,CAAkB,CAC5D,CAAC,CACH,CAAC,EAED,SAAS,gBAAiB,IAAM,CAC9B,GAAG,4BAA6B,IAAM,CACpC,MAAMQ,EAAiBF,EAAQ,cAAcJ,CAAiB,EAC9D,OAAOM,CAAc,EAAE,iBACrB,wBAAqB,CACnB,KAAM,CACJ,UAAW,UACb,CACF,CAAC,CACH,CACF,CAAC,EAED,GAAG,2DAA4D,IAAM,CACnE,MAAMC,EAASH,EAAQ,cAAcH,CAAmB,EACxD,UAAO,0BAAuBM,CAAM,CAAC,EAAE,KAAK,EAAK,CACnD,CAAC,EAED,GAAG,sDAAuD,IAAM,CAC9D,MAAMA,EAASH,EAAQ,cAAcD,CAAsB,EAE3D,UAAO,0BAAuBI,CAAM,CAAC,EAAE,KAAK,EAAK,EAEjD,OAAOA,EAAO,KAAK,EAAE,eAAe,wBAAsB,CAC5D,CAAC,CACH,CAAC,CACH,CAAC",
6
6
  "names": ["import_device_management_kit", "import_GetChallengeCommand", "GET_CHALLENGE_APDU", "LNX_RESPONSE_DATA_GOOD", "LNX_RESPONSE_GOOD", "LNX_RESPONSE_LOCKED", "LNX_RESPONSE_DATA_TOO_SHORT", "LNX_RESPONSE_TOO_SHORT", "command", "apdu", "parsedResponse", "result"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var c=Object.create;var s=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var P=Object.getPrototypeOf,C=Object.prototype.hasOwnProperty;var g=(r,e)=>{for(var t in e)s(r,t,{get:e[t],enumerable:!0})},m=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of b(e))!C.call(r,a)&&a!==t&&s(r,a,{get:()=>e[a],enumerable:!(n=A(e,a))||n.enumerable});return r};var h=(r,e,t)=>(t=r!=null?c(P(r)):{},m(e||!r||!r.__esModule?s(t,"default",{value:r,enumerable:!0}):t,r)),f=r=>m(s({},"__esModule",{value:!0}),r);var R={};g(R,{GetPubKeyCommand:()=>K});module.exports=f(R);var o=require("@ledgerhq/device-management-kit"),p=require("@ledgerhq/signer-utils"),u=h(require("bs58")),l=require("purify-ts"),d=require("./utils/SolanaApplicationErrors");const i=32;class K{errorHelper=new p.CommandErrorHelper(d.SOLANA_APP_ERRORS,d.SolanaAppCommandErrorFactory);args;constructor(e){this.args=e}getApdu(){const e={cla:224,ins:5,p1:this.args.checkOnDevice?1:0,p2:0},t=new o.ApduBuilder(e),n=this.args.derivationPath,a=p.DerivationPathUtils.splitPath(n);return t.add8BitUIntToData(a.length),a.forEach(y=>{t.add32BitUIntToData(y)}),t.build()}parseResponse(e){return l.Maybe.fromNullable(this.errorHelper.getError(e)).orDefaultLazy(()=>{const t=new o.ApduParser(e);if(t.testMinimalLength(i)===!1)return(0,o.CommandResultFactory)({error:new o.InvalidStatusWordError("Public key is missing")});const n=t.extractFieldByLength(i);return n===void 0?(0,o.CommandResultFactory)({error:new o.InvalidStatusWordError("Unable to extract public key")}):(0,o.CommandResultFactory)({data:u.default.encode(n)})})}}0&&(module.exports={GetPubKeyCommand});
1
+ "use strict";var d=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var b=Object.prototype.hasOwnProperty;var A=(o,e)=>{for(var r in e)d(o,r,{get:e[r],enumerable:!0})},P=(o,e,r,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of c(e))!b.call(o,n)&&n!==r&&d(o,n,{get:()=>e[n],enumerable:!(a=y(e,n))||a.enumerable});return o};var g=o=>P(d({},"__esModule",{value:!0}),o);var h={};A(h,{GetPubKeyCommand:()=>C});module.exports=g(h);var t=require("@ledgerhq/device-management-kit"),s=require("@ledgerhq/signer-utils"),i=require("purify-ts"),u=require("../../app-binder/services/bs58Encoder"),p=require("./utils/SolanaApplicationErrors");const m=32;class C{constructor(e,r=u.DefaultBs58Encoder){this.bs58Encoder=r;this.args=e}name="getPubKey";errorHelper=new s.CommandErrorHelper(p.SOLANA_APP_ERRORS,p.SolanaAppCommandErrorFactory);args;getApdu(){const e={cla:224,ins:5,p1:this.args.checkOnDevice?1:0,p2:0},r=new t.ApduBuilder(e),a=this.args.derivationPath,n=s.DerivationPathUtils.splitPath(a);return r.add8BitUIntToData(n.length),n.forEach(l=>{r.add32BitUIntToData(l)}),r.build()}parseResponse(e){return i.Maybe.fromNullable(this.errorHelper.getError(e)).orDefaultLazy(()=>{const r=new t.ApduParser(e);if(r.testMinimalLength(m)===!1)return(0,t.CommandResultFactory)({error:new t.InvalidStatusWordError("Public key is missing")});const a=r.extractFieldByLength(m);return a===void 0?(0,t.CommandResultFactory)({error:new t.InvalidStatusWordError("Unable to extract public key")}):(0,t.CommandResultFactory)({data:this.bs58Encoder.encode(a)})})}}0&&(module.exports={GetPubKeyCommand});
2
2
  //# sourceMappingURL=GetPubKeyCommand.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/command/GetPubKeyCommand.ts"],
4
- "sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n type ApduBuilderArgs,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport {\n CommandErrorHelper,\n DerivationPathUtils,\n} from \"@ledgerhq/signer-utils\";\nimport bs58 from \"bs58\";\nimport { Maybe } from \"purify-ts\";\n\nimport { type PublicKey } from \"@api/model/PublicKey\";\n\nimport {\n SOLANA_APP_ERRORS,\n SolanaAppCommandErrorFactory,\n type SolanaAppErrorCodes,\n} from \"./utils/SolanaApplicationErrors\";\n\nconst PUBKEY_LENGTH = 32;\n\nexport type GetPubKeyCommandResponse = PublicKey;\n\nexport type GetPubKeyCommandArgs = {\n derivationPath: string;\n checkOnDevice: boolean;\n};\n\nexport class GetPubKeyCommand\n implements\n Command<GetPubKeyCommandResponse, GetPubKeyCommandArgs, SolanaAppErrorCodes>\n{\n private readonly errorHelper = new CommandErrorHelper<\n GetPubKeyCommandResponse,\n SolanaAppErrorCodes\n >(SOLANA_APP_ERRORS, SolanaAppCommandErrorFactory);\n\n args: GetPubKeyCommandArgs;\n\n constructor(args: GetPubKeyCommandArgs) {\n this.args = args;\n }\n\n getApdu(): Apdu {\n const getPubKeyArgs: ApduBuilderArgs = {\n cla: 0xe0,\n ins: 0x05,\n p1: this.args.checkOnDevice ? 0x01 : 0x00,\n p2: 0x00,\n };\n const builder = new ApduBuilder(getPubKeyArgs);\n const derivationPath = this.args.derivationPath;\n\n const path = DerivationPathUtils.splitPath(derivationPath);\n builder.add8BitUIntToData(path.length);\n path.forEach((element) => {\n builder.add32BitUIntToData(element);\n });\n\n return builder.build();\n }\n\n parseResponse(\n response: ApduResponse,\n ): CommandResult<GetPubKeyCommandResponse, SolanaAppErrorCodes> {\n return Maybe.fromNullable(\n this.errorHelper.getError(response),\n ).orDefaultLazy(() => {\n const parser = new ApduParser(response);\n\n if (parser.testMinimalLength(PUBKEY_LENGTH) === false) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Public key is missing\"),\n });\n }\n\n const buffer = parser.extractFieldByLength(PUBKEY_LENGTH);\n if (buffer === undefined) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Unable to extract public key\"),\n });\n }\n\n return CommandResultFactory({\n data: bs58.encode(buffer),\n });\n });\n }\n}\n"],
5
- "mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,sBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAUO,2CACPC,EAGO,kCACPC,EAAiB,mBACjBC,EAAsB,qBAItBC,EAIO,2CAEP,MAAMC,EAAgB,GASf,MAAMP,CAGb,CACmB,YAAc,IAAI,qBAGjC,oBAAmB,8BAA4B,EAEjD,KAEA,YAAYQ,EAA4B,CACtC,KAAK,KAAOA,CACd,CAEA,SAAgB,CACd,MAAMC,EAAiC,CACrC,IAAK,IACL,IAAK,EACL,GAAI,KAAK,KAAK,cAAgB,EAAO,EACrC,GAAI,CACN,EACMC,EAAU,IAAI,cAAYD,CAAa,EACvCE,EAAiB,KAAK,KAAK,eAE3BC,EAAO,sBAAoB,UAAUD,CAAc,EACzD,OAAAD,EAAQ,kBAAkBE,EAAK,MAAM,EACrCA,EAAK,QAASC,GAAY,CACxBH,EAAQ,mBAAmBG,CAAO,CACpC,CAAC,EAEMH,EAAQ,MAAM,CACvB,CAEA,cACEI,EAC8D,CAC9D,OAAO,QAAM,aACX,KAAK,YAAY,SAASA,CAAQ,CACpC,EAAE,cAAc,IAAM,CACpB,MAAMC,EAAS,IAAI,aAAWD,CAAQ,EAEtC,GAAIC,EAAO,kBAAkBR,CAAa,IAAM,GAC9C,SAAO,wBAAqB,CAC1B,MAAO,IAAI,yBAAuB,uBAAuB,CAC3D,CAAC,EAGH,MAAMS,EAASD,EAAO,qBAAqBR,CAAa,EACxD,OAAIS,IAAW,UACN,wBAAqB,CAC1B,MAAO,IAAI,yBAAuB,8BAA8B,CAClE,CAAC,KAGI,wBAAqB,CAC1B,KAAM,EAAAC,QAAK,OAAOD,CAAM,CAC1B,CAAC,CACH,CAAC,CACH,CACF",
6
- "names": ["GetPubKeyCommand_exports", "__export", "GetPubKeyCommand", "__toCommonJS", "import_device_management_kit", "import_signer_utils", "import_bs58", "import_purify_ts", "import_SolanaApplicationErrors", "PUBKEY_LENGTH", "args", "getPubKeyArgs", "builder", "derivationPath", "path", "element", "response", "parser", "buffer", "bs58"]
4
+ "sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n type ApduBuilderArgs,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport {\n CommandErrorHelper,\n DerivationPathUtils,\n} from \"@ledgerhq/signer-utils\";\nimport { Maybe } from \"purify-ts\";\n\nimport { type PublicKey } from \"@api/model/PublicKey\";\nimport {\n type Bs58Encoder,\n DefaultBs58Encoder,\n} from \"@internal/app-binder/services/bs58Encoder\";\n\nimport {\n SOLANA_APP_ERRORS,\n SolanaAppCommandErrorFactory,\n type SolanaAppErrorCodes,\n} from \"./utils/SolanaApplicationErrors\";\n\nconst PUBKEY_LENGTH = 32;\n\nexport type GetPubKeyCommandResponse = PublicKey;\n\nexport type GetPubKeyCommandArgs = {\n derivationPath: string;\n checkOnDevice: boolean;\n};\n\nexport class GetPubKeyCommand\n implements\n Command<GetPubKeyCommandResponse, GetPubKeyCommandArgs, SolanaAppErrorCodes>\n{\n readonly name = \"getPubKey\";\n private readonly errorHelper = new CommandErrorHelper<\n GetPubKeyCommandResponse,\n SolanaAppErrorCodes\n >(SOLANA_APP_ERRORS, SolanaAppCommandErrorFactory);\n\n args: GetPubKeyCommandArgs;\n\n constructor(\n args: GetPubKeyCommandArgs,\n private readonly bs58Encoder: Bs58Encoder = DefaultBs58Encoder,\n ) {\n this.args = args;\n }\n\n getApdu(): Apdu {\n const getPubKeyArgs: ApduBuilderArgs = {\n cla: 0xe0,\n ins: 0x05,\n p1: this.args.checkOnDevice ? 0x01 : 0x00,\n p2: 0x00,\n };\n const builder = new ApduBuilder(getPubKeyArgs);\n const derivationPath = this.args.derivationPath;\n\n const path = DerivationPathUtils.splitPath(derivationPath);\n builder.add8BitUIntToData(path.length);\n path.forEach((element) => {\n builder.add32BitUIntToData(element);\n });\n\n return builder.build();\n }\n\n parseResponse(\n response: ApduResponse,\n ): CommandResult<GetPubKeyCommandResponse, SolanaAppErrorCodes> {\n return Maybe.fromNullable(\n this.errorHelper.getError(response),\n ).orDefaultLazy(() => {\n const parser = new ApduParser(response);\n\n if (parser.testMinimalLength(PUBKEY_LENGTH) === false) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Public key is missing\"),\n });\n }\n\n const buffer = parser.extractFieldByLength(PUBKEY_LENGTH);\n if (buffer === undefined) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Unable to extract public key\"),\n });\n }\n\n return CommandResultFactory({\n data: this.bs58Encoder.encode(buffer),\n });\n });\n }\n}\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,sBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAUO,2CACPC,EAGO,kCACPC,EAAsB,qBAGtBC,EAGO,qDAEPC,EAIO,2CAEP,MAAMC,EAAgB,GASf,MAAMP,CAGb,CASE,YACEQ,EACiBC,EAA2B,qBAC5C,CADiB,iBAAAA,EAEjB,KAAK,KAAOD,CACd,CAbS,KAAO,YACC,YAAc,IAAI,qBAGjC,oBAAmB,8BAA4B,EAEjD,KASA,SAAgB,CACd,MAAME,EAAiC,CACrC,IAAK,IACL,IAAK,EACL,GAAI,KAAK,KAAK,cAAgB,EAAO,EACrC,GAAI,CACN,EACMC,EAAU,IAAI,cAAYD,CAAa,EACvCE,EAAiB,KAAK,KAAK,eAE3BC,EAAO,sBAAoB,UAAUD,CAAc,EACzD,OAAAD,EAAQ,kBAAkBE,EAAK,MAAM,EACrCA,EAAK,QAASC,GAAY,CACxBH,EAAQ,mBAAmBG,CAAO,CACpC,CAAC,EAEMH,EAAQ,MAAM,CACvB,CAEA,cACEI,EAC8D,CAC9D,OAAO,QAAM,aACX,KAAK,YAAY,SAASA,CAAQ,CACpC,EAAE,cAAc,IAAM,CACpB,MAAMC,EAAS,IAAI,aAAWD,CAAQ,EAEtC,GAAIC,EAAO,kBAAkBT,CAAa,IAAM,GAC9C,SAAO,wBAAqB,CAC1B,MAAO,IAAI,yBAAuB,uBAAuB,CAC3D,CAAC,EAGH,MAAMU,EAASD,EAAO,qBAAqBT,CAAa,EACxD,OAAIU,IAAW,UACN,wBAAqB,CAC1B,MAAO,IAAI,yBAAuB,8BAA8B,CAClE,CAAC,KAGI,wBAAqB,CAC1B,KAAM,KAAK,YAAY,OAAOA,CAAM,CACtC,CAAC,CACH,CAAC,CACH,CACF",
6
+ "names": ["GetPubKeyCommand_exports", "__export", "GetPubKeyCommand", "__toCommonJS", "import_device_management_kit", "import_signer_utils", "import_purify_ts", "import_bs58Encoder", "import_SolanaApplicationErrors", "PUBKEY_LENGTH", "args", "bs58Encoder", "getPubKeyArgs", "builder", "derivationPath", "path", "element", "response", "parser", "buffer"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var t=require("@ledgerhq/device-management-kit"),s=require("./GetPubKeyCommand");const a=new Uint8Array([224,5,1,0,9,2,128,0,0,44,128,0,1,245]),n=new Uint8Array([224,5,0,0,9,2,128,0,0,44,128,0,1,245]),c=new Uint8Array([224,5,1,0,9,2,128,0,0,44,128,0,1,246]),i=new Uint8Array([178,167,34,220,24,221,92,73,195,244,142,155,7,38,241,27,230,103,134,233,28,172,87,52,152,214,238,136,57,44,201,106,144,0]),d=new t.ApduResponse({statusCode:Uint8Array.from([144,0]),data:i});describe("GetPubKeyCommand",()=>{let r;const o={derivationPath:"44'/501'",checkOnDevice:!0};beforeEach(()=>{r=new s.GetPubKeyCommand(o),vi.clearAllMocks(),vi.importActual("@ledgerhq/device-management-kit")}),describe("getApdu",()=>{it("should return APDU",()=>{const e=r.getApdu();expect(e.getRawApdu()).toEqual(a)}),it("should return APDU without confirm",()=>{r=new s.GetPubKeyCommand({...o,checkOnDevice:!1});const e=r.getApdu();expect(e.getRawApdu()).toEqual(n)}),it("should return APDU with different path",()=>{r=new s.GetPubKeyCommand({...o,derivationPath:"44'/502'"});const e=r.getApdu();expect(e.getRawApdu()).toEqual(c)})}),describe("parseResponse",()=>{it("should parse the response",()=>{const e=r.parseResponse(d);expect(e).toStrictEqual((0,t.CommandResultFactory)({data:"D2PPQSYFe83nDzk96FqGumVU8JA7J8vj2Rhjc2oXzEi5"}))}),describe("error handling",()=>{it("should return error if response is not success",()=>{const e=new t.ApduResponse({statusCode:Uint8Array.from([106,130]),data:new Uint8Array(0)}),x=r.parseResponse(e);expect((0,t.isSuccessCommandResult)(x)).toBe(!1),(0,t.isSuccessCommandResult)(x)?assert.fail("Expected error"):expect(x.error).toEqual(expect.objectContaining({_tag:"SolanaAppCommandError",errorCode:"6a82",message:"Invalid off-chain message format"}))}),it("should return error if public key is missing",()=>{const e=new t.ApduResponse({statusCode:Uint8Array.from([144,0]),data:new Uint8Array(0)}),x=r.parseResponse(e);expect((0,t.isSuccessCommandResult)(x)).toBe(!1),(0,t.isSuccessCommandResult)(x)?assert.fail("Expected error"):expect(x.error.originalError).toEqual(expect.objectContaining({message:"Public key is missing"}))})})})});
1
+ "use strict";var t=require("@ledgerhq/device-management-kit"),s=require("./GetPubKeyCommand");const a=new Uint8Array([224,5,1,0,9,2,128,0,0,44,128,0,1,245]),n=new Uint8Array([224,5,0,0,9,2,128,0,0,44,128,0,1,245]),c=new Uint8Array([224,5,1,0,9,2,128,0,0,44,128,0,1,246]),i=new Uint8Array([178,167,34,220,24,221,92,73,195,244,142,155,7,38,241,27,230,103,134,233,28,172,87,52,152,214,238,136,57,44,201,106,144,0]),d=new t.ApduResponse({statusCode:Uint8Array.from([144,0]),data:i});describe("GetPubKeyCommand",()=>{let r;const o={derivationPath:"44'/501'",checkOnDevice:!0};beforeEach(()=>{r=new s.GetPubKeyCommand(o),vi.clearAllMocks(),vi.importActual("@ledgerhq/device-management-kit")}),describe("name",()=>{it("should be 'getPubKey'",()=>{expect(r.name).toBe("getPubKey")})}),describe("getApdu",()=>{it("should return APDU",()=>{const e=r.getApdu();expect(e.getRawApdu()).toEqual(a)}),it("should return APDU without confirm",()=>{r=new s.GetPubKeyCommand({...o,checkOnDevice:!1});const e=r.getApdu();expect(e.getRawApdu()).toEqual(n)}),it("should return APDU with different path",()=>{r=new s.GetPubKeyCommand({...o,derivationPath:"44'/502'"});const e=r.getApdu();expect(e.getRawApdu()).toEqual(c)})}),describe("parseResponse",()=>{it("should parse the response",()=>{const e=r.parseResponse(d);expect(e).toStrictEqual((0,t.CommandResultFactory)({data:"D2PPQSYFe83nDzk96FqGumVU8JA7J8vj2Rhjc2oXzEi5"}))}),describe("error handling",()=>{it("should return error if response is not success",()=>{const e=new t.ApduResponse({statusCode:Uint8Array.from([106,130]),data:new Uint8Array(0)}),x=r.parseResponse(e);expect((0,t.isSuccessCommandResult)(x)).toBe(!1),(0,t.isSuccessCommandResult)(x)?assert.fail("Expected error"):expect(x.error).toEqual(expect.objectContaining({_tag:"SolanaAppCommandError",errorCode:"6a82",message:"Invalid off-chain message format"}))}),it("should return error if public key is missing",()=>{const e=new t.ApduResponse({statusCode:Uint8Array.from([144,0]),data:new Uint8Array(0)}),x=r.parseResponse(e);expect((0,t.isSuccessCommandResult)(x)).toBe(!1),(0,t.isSuccessCommandResult)(x)?assert.fail("Expected error"):expect(x.error.originalError).toEqual(expect.objectContaining({message:"Public key is missing"}))})})})});
2
2
  //# sourceMappingURL=GetPubKeyCommand.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/command/GetPubKeyCommand.test.ts"],
4
- "sourcesContent": ["import {\n ApduResponse,\n CommandResultFactory,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { GetPubKeyCommand } from \"./GetPubKeyCommand\";\n\nconst GET_PUBKYEY_APDU_DEFAULT_PATH_WITH_CONFIRM = new Uint8Array([\n 0xe0, 0x05, 0x01, 0x00, 0x09, 0x02, 0x80, 0x00, 0x00, 0x2c, 0x80, 0x00, 0x01,\n 0xf5,\n]);\n\nconst GET_PUBKYEY_APDU_DEFAULT_PATH_WITHOUT_CONFIRM = new Uint8Array([\n 0xe0, 0x05, 0x00, 0x00, 0x09, 0x02, 0x80, 0x00, 0x00, 0x2c, 0x80, 0x00, 0x01,\n 0xf5,\n]);\n\nconst GET_PUBKEY_APDU_DIFFERENT_PATH = new Uint8Array([\n 0xe0, 0x05, 0x01, 0x00, 0x09, 0x02, 0x80, 0x00, 0x00, 0x2c, 0x80, 0x00, 0x01,\n 0xf6,\n]);\n\n// D2PPQSYFe83nDzk96FqGumVU8JA7J8vj2Rhjc2oXzEi5\nconst GET_PUBKEY_APDU = new Uint8Array([\n 0xb2, 0xa7, 0x22, 0xdc, 0x18, 0xdd, 0x5c, 0x49, 0xc3, 0xf4, 0x8e, 0x9b, 0x07,\n 0x26, 0xf1, 0x1b, 0xe6, 0x67, 0x86, 0xe9, 0x1c, 0xac, 0x57, 0x34, 0x98, 0xd6,\n 0xee, 0x88, 0x39, 0x2c, 0xc9, 0x6a, 0x90, 0x00,\n]);\n\nconst GET_PUBKEY_APDU_RESPONSE = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: GET_PUBKEY_APDU,\n});\n\ndescribe(\"GetPubKeyCommand\", () => {\n let command: GetPubKeyCommand;\n const defaultArgs = {\n derivationPath: \"44'/501'\",\n checkOnDevice: true,\n };\n\n beforeEach(() => {\n command = new GetPubKeyCommand(defaultArgs);\n vi.clearAllMocks();\n vi.importActual(\"@ledgerhq/device-management-kit\");\n });\n\n describe(\"getApdu\", () => {\n it(\"should return APDU\", () => {\n const apdu = command.getApdu();\n expect(apdu.getRawApdu()).toEqual(\n GET_PUBKYEY_APDU_DEFAULT_PATH_WITH_CONFIRM,\n );\n });\n\n it(\"should return APDU without confirm\", () => {\n command = new GetPubKeyCommand({\n ...defaultArgs,\n checkOnDevice: false,\n });\n const apdu = command.getApdu();\n expect(apdu.getRawApdu()).toEqual(\n GET_PUBKYEY_APDU_DEFAULT_PATH_WITHOUT_CONFIRM,\n );\n });\n\n it(\"should return APDU with different path\", () => {\n command = new GetPubKeyCommand({\n ...defaultArgs,\n derivationPath: \"44'/502'\",\n });\n const apdu = command.getApdu();\n expect(apdu.getRawApdu()).toEqual(GET_PUBKEY_APDU_DIFFERENT_PATH);\n });\n });\n\n describe(\"parseResponse\", () => {\n it(\"should parse the response\", () => {\n const parsed = command.parseResponse(GET_PUBKEY_APDU_RESPONSE);\n expect(parsed).toStrictEqual(\n CommandResultFactory({\n data: \"D2PPQSYFe83nDzk96FqGumVU8JA7J8vj2Rhjc2oXzEi5\",\n }),\n );\n });\n\n describe(\"error handling\", () => {\n it(\"should return error if response is not success\", () => {\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x6a, 0x82]),\n data: new Uint8Array(0),\n });\n const result = command.parseResponse(response);\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n expect(result.error).toEqual(\n expect.objectContaining({\n _tag: \"SolanaAppCommandError\",\n errorCode: \"6a82\",\n message: \"Invalid off-chain message format\",\n }),\n );\n } else {\n assert.fail(\"Expected error\");\n }\n });\n\n it(\"should return error if public key is missing\", () => {\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: new Uint8Array(0),\n });\n const result = command.parseResponse(response);\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n expect(result.error.originalError).toEqual(\n expect.objectContaining({\n message: \"Public key is missing\",\n }),\n );\n } else {\n assert.fail(\"Expected error\");\n }\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 { GetPubKeyCommand } from \"./GetPubKeyCommand\";\n\nconst GET_PUBKYEY_APDU_DEFAULT_PATH_WITH_CONFIRM = new Uint8Array([\n 0xe0, 0x05, 0x01, 0x00, 0x09, 0x02, 0x80, 0x00, 0x00, 0x2c, 0x80, 0x00, 0x01,\n 0xf5,\n]);\n\nconst GET_PUBKYEY_APDU_DEFAULT_PATH_WITHOUT_CONFIRM = new Uint8Array([\n 0xe0, 0x05, 0x00, 0x00, 0x09, 0x02, 0x80, 0x00, 0x00, 0x2c, 0x80, 0x00, 0x01,\n 0xf5,\n]);\n\nconst GET_PUBKEY_APDU_DIFFERENT_PATH = new Uint8Array([\n 0xe0, 0x05, 0x01, 0x00, 0x09, 0x02, 0x80, 0x00, 0x00, 0x2c, 0x80, 0x00, 0x01,\n 0xf6,\n]);\n\n// D2PPQSYFe83nDzk96FqGumVU8JA7J8vj2Rhjc2oXzEi5\nconst GET_PUBKEY_APDU = new Uint8Array([\n 0xb2, 0xa7, 0x22, 0xdc, 0x18, 0xdd, 0x5c, 0x49, 0xc3, 0xf4, 0x8e, 0x9b, 0x07,\n 0x26, 0xf1, 0x1b, 0xe6, 0x67, 0x86, 0xe9, 0x1c, 0xac, 0x57, 0x34, 0x98, 0xd6,\n 0xee, 0x88, 0x39, 0x2c, 0xc9, 0x6a, 0x90, 0x00,\n]);\n\nconst GET_PUBKEY_APDU_RESPONSE = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: GET_PUBKEY_APDU,\n});\n\ndescribe(\"GetPubKeyCommand\", () => {\n let command: GetPubKeyCommand;\n const defaultArgs = {\n derivationPath: \"44'/501'\",\n checkOnDevice: true,\n };\n\n beforeEach(() => {\n command = new GetPubKeyCommand(defaultArgs);\n vi.clearAllMocks();\n vi.importActual(\"@ledgerhq/device-management-kit\");\n });\n\n describe(\"name\", () => {\n it(\"should be 'getPubKey'\", () => {\n expect(command.name).toBe(\"getPubKey\");\n });\n });\n\n describe(\"getApdu\", () => {\n it(\"should return APDU\", () => {\n const apdu = command.getApdu();\n expect(apdu.getRawApdu()).toEqual(\n GET_PUBKYEY_APDU_DEFAULT_PATH_WITH_CONFIRM,\n );\n });\n\n it(\"should return APDU without confirm\", () => {\n command = new GetPubKeyCommand({\n ...defaultArgs,\n checkOnDevice: false,\n });\n const apdu = command.getApdu();\n expect(apdu.getRawApdu()).toEqual(\n GET_PUBKYEY_APDU_DEFAULT_PATH_WITHOUT_CONFIRM,\n );\n });\n\n it(\"should return APDU with different path\", () => {\n command = new GetPubKeyCommand({\n ...defaultArgs,\n derivationPath: \"44'/502'\",\n });\n const apdu = command.getApdu();\n expect(apdu.getRawApdu()).toEqual(GET_PUBKEY_APDU_DIFFERENT_PATH);\n });\n });\n\n describe(\"parseResponse\", () => {\n it(\"should parse the response\", () => {\n const parsed = command.parseResponse(GET_PUBKEY_APDU_RESPONSE);\n expect(parsed).toStrictEqual(\n CommandResultFactory({\n data: \"D2PPQSYFe83nDzk96FqGumVU8JA7J8vj2Rhjc2oXzEi5\",\n }),\n );\n });\n\n describe(\"error handling\", () => {\n it(\"should return error if response is not success\", () => {\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x6a, 0x82]),\n data: new Uint8Array(0),\n });\n const result = command.parseResponse(response);\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n expect(result.error).toEqual(\n expect.objectContaining({\n _tag: \"SolanaAppCommandError\",\n errorCode: \"6a82\",\n message: \"Invalid off-chain message format\",\n }),\n );\n } else {\n assert.fail(\"Expected error\");\n }\n });\n\n it(\"should return error if public key is missing\", () => {\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: new Uint8Array(0),\n });\n const result = command.parseResponse(response);\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n expect(result.error.originalError).toEqual(\n expect.objectContaining({\n message: \"Public key is missing\",\n }),\n );\n } else {\n assert.fail(\"Expected error\");\n }\n });\n });\n });\n});\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_device_management_kit", "import_GetPubKeyCommand", "GET_PUBKYEY_APDU_DEFAULT_PATH_WITH_CONFIRM", "GET_PUBKYEY_APDU_DEFAULT_PATH_WITHOUT_CONFIRM", "GET_PUBKEY_APDU_DIFFERENT_PATH", "GET_PUBKEY_APDU", "GET_PUBKEY_APDU_RESPONSE", "command", "defaultArgs", "apdu", "parsed", "response", "result"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var t=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var u=(o,r)=>{for(var e in r)t(o,e,{get:r[e],enumerable:!0})},A=(o,r,e,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let p of m(r))!l.call(o,p)&&p!==e&&t(o,p,{get:()=>r[p],enumerable:!(n=i(r,p))||n.enumerable});return o};var c=o=>A(t({},"__esModule",{value:!0}),o);var R={};u(R,{ProvideTLVDescriptorCommand:()=>E});module.exports=c(R);var d=require("@ledgerhq/device-management-kit"),s=require("@ledgerhq/signer-utils"),a=require("./utils/SolanaApplicationErrors");const C=224,y=33,g=0,v=0;class E{constructor(r){this.args=r}errorHelper=new s.CommandErrorHelper(a.SOLANA_APP_ERRORS,a.SolanaAppCommandErrorFactory);getApdu(){const r={cla:C,ins:y,p1:g,p2:v};return new d.ApduBuilder(r).addBufferToData(this.args.payload).build()}parseResponse(r){const e=this.errorHelper.getError(r);return e||(r.data.length!==0?(0,d.CommandResultFactory)({error:new d.InvalidStatusWordError("Unexpected data in response")}):(0,d.CommandResultFactory)({data:void 0}))}}0&&(module.exports={ProvideTLVDescriptorCommand});
1
+ "use strict";var t=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var u=(o,r)=>{for(var e in r)t(o,e,{get:r[e],enumerable:!0})},A=(o,r,e,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let p of m(r))!l.call(o,p)&&p!==e&&t(o,p,{get:()=>r[p],enumerable:!(n=i(r,p))||n.enumerable});return o};var c=o=>A(t({},"__esModule",{value:!0}),o);var R={};u(R,{ProvideTLVDescriptorCommand:()=>E});module.exports=c(R);var d=require("@ledgerhq/device-management-kit"),s=require("@ledgerhq/signer-utils"),a=require("./utils/SolanaApplicationErrors");const C=224,y=33,g=0,v=0;class E{constructor(r){this.args=r}name="provideTLVDescriptor";errorHelper=new s.CommandErrorHelper(a.SOLANA_APP_ERRORS,a.SolanaAppCommandErrorFactory);getApdu(){const r={cla:C,ins:y,p1:g,p2:v};return new d.ApduBuilder(r).addBufferToData(this.args.payload).build()}parseResponse(r){const e=this.errorHelper.getError(r);return e||(r.data.length!==0?(0,d.CommandResultFactory)({error:new d.InvalidStatusWordError("Unexpected data in response")}):(0,d.CommandResultFactory)({data:void 0}))}}0&&(module.exports={ProvideTLVDescriptorCommand});
2
2
  //# sourceMappingURL=ProvideTLVDescriptorCommand.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/command/ProvideTLVDescriptorCommand.ts"],
4
- "sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n type ApduBuilderArgs,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\n\nimport {\n SOLANA_APP_ERRORS,\n SolanaAppCommandErrorFactory,\n type SolanaAppErrorCodes,\n} from \"./utils/SolanaApplicationErrors\";\n\nconst CLA = 0xe0;\nconst INS = 0x21;\nconst P1 = 0x00;\nconst P2 = 0x00;\n\nexport type ProvideTLVDescriptorCommandArgs = {\n payload: Uint8Array;\n};\n\nexport class ProvideTLVDescriptorCommand\n implements Command<void, ProvideTLVDescriptorCommandArgs, SolanaAppErrorCodes>\n{\n private readonly errorHelper = new CommandErrorHelper<\n void,\n SolanaAppErrorCodes\n >(SOLANA_APP_ERRORS, SolanaAppCommandErrorFactory);\n\n constructor(readonly args: ProvideTLVDescriptorCommandArgs) {}\n\n getApdu(): Apdu {\n const apduBuilderArgs: ApduBuilderArgs = {\n cla: CLA,\n ins: INS,\n p1: P1,\n p2: P2,\n };\n return new ApduBuilder(apduBuilderArgs)\n .addBufferToData(this.args.payload)\n .build();\n }\n\n parseResponse(\n response: ApduResponse,\n ): CommandResult<void, SolanaAppErrorCodes> {\n const error = this.errorHelper.getError(response);\n if (error) {\n return error;\n }\n\n if (response.data.length !== 0) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Unexpected data in response\"),\n });\n }\n\n return CommandResultFactory({ data: undefined });\n }\n}\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,iCAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EASO,2CACPC,EAAmC,kCAEnCC,EAIO,2CAEP,MAAMC,EAAM,IACNC,EAAM,GACNC,EAAK,EACLC,EAAK,EAMJ,MAAMR,CAEb,CAME,YAAqBS,EAAuC,CAAvC,UAAAA,CAAwC,CAL5C,YAAc,IAAI,qBAGjC,oBAAmB,8BAA4B,EAIjD,SAAgB,CACd,MAAMC,EAAmC,CACvC,IAAKL,EACL,IAAKC,EACL,GAAIC,EACJ,GAAIC,CACN,EACA,OAAO,IAAI,cAAYE,CAAe,EACnC,gBAAgB,KAAK,KAAK,OAAO,EACjC,MAAM,CACX,CAEA,cACEC,EAC0C,CAC1C,MAAMC,EAAQ,KAAK,YAAY,SAASD,CAAQ,EAChD,OAAIC,IAIAD,EAAS,KAAK,SAAW,KACpB,wBAAqB,CAC1B,MAAO,IAAI,yBAAuB,6BAA6B,CACjE,CAAC,KAGI,wBAAqB,CAAE,KAAM,MAAU,CAAC,EACjD,CACF",
4
+ "sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n type ApduBuilderArgs,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\n\nimport {\n SOLANA_APP_ERRORS,\n SolanaAppCommandErrorFactory,\n type SolanaAppErrorCodes,\n} from \"./utils/SolanaApplicationErrors\";\n\nconst CLA = 0xe0;\nconst INS = 0x21;\nconst P1 = 0x00;\nconst P2 = 0x00;\n\nexport type ProvideTLVDescriptorCommandArgs = {\n payload: Uint8Array;\n};\n\nexport class ProvideTLVDescriptorCommand\n implements Command<void, ProvideTLVDescriptorCommandArgs, SolanaAppErrorCodes>\n{\n readonly name = \"provideTLVDescriptor\";\n private readonly errorHelper = new CommandErrorHelper<\n void,\n SolanaAppErrorCodes\n >(SOLANA_APP_ERRORS, SolanaAppCommandErrorFactory);\n\n constructor(readonly args: ProvideTLVDescriptorCommandArgs) {}\n\n getApdu(): Apdu {\n const apduBuilderArgs: ApduBuilderArgs = {\n cla: CLA,\n ins: INS,\n p1: P1,\n p2: P2,\n };\n return new ApduBuilder(apduBuilderArgs)\n .addBufferToData(this.args.payload)\n .build();\n }\n\n parseResponse(\n response: ApduResponse,\n ): CommandResult<void, SolanaAppErrorCodes> {\n const error = this.errorHelper.getError(response);\n if (error) {\n return error;\n }\n\n if (response.data.length !== 0) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Unexpected data in response\"),\n });\n }\n\n return CommandResultFactory({ data: undefined });\n }\n}\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,iCAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EASO,2CACPC,EAAmC,kCAEnCC,EAIO,2CAEP,MAAMC,EAAM,IACNC,EAAM,GACNC,EAAK,EACLC,EAAK,EAMJ,MAAMR,CAEb,CAOE,YAAqBS,EAAuC,CAAvC,UAAAA,CAAwC,CANpD,KAAO,uBACC,YAAc,IAAI,qBAGjC,oBAAmB,8BAA4B,EAIjD,SAAgB,CACd,MAAMC,EAAmC,CACvC,IAAKL,EACL,IAAKC,EACL,GAAIC,EACJ,GAAIC,CACN,EACA,OAAO,IAAI,cAAYE,CAAe,EACnC,gBAAgB,KAAK,KAAK,OAAO,EACjC,MAAM,CACX,CAEA,cACEC,EAC0C,CAC1C,MAAMC,EAAQ,KAAK,YAAY,SAASD,CAAQ,EAChD,OAAIC,IAIAD,EAAS,KAAK,SAAW,KACpB,wBAAqB,CAC1B,MAAO,IAAI,yBAAuB,6BAA6B,CACjE,CAAC,KAGI,wBAAqB,CAAE,KAAM,MAAU,CAAC,EACjD,CACF",
6
6
  "names": ["ProvideTLVDescriptorCommand_exports", "__export", "ProvideTLVDescriptorCommand", "__toCommonJS", "import_device_management_kit", "import_signer_utils", "import_SolanaApplicationErrors", "CLA", "INS", "P1", "P2", "args", "apduBuilderArgs", "response", "error"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var e=require("@ledgerhq/device-management-kit"),s=require("./ProvideTLVDescriptorCommand");const a=224,n=33,d=0,c=0,i=Uint8Array.from([a,n,d,c,4,222,173,190,239]);describe("ProvideTLVDescriptorCommand",()=>{let o;beforeEach(()=>{o=new s.ProvideTLVDescriptorCommand({payload:Uint8Array.from([222,173,190,239])})}),describe("getApdu",()=>{it("should construct the correct APDU",()=>{const t=o.getApdu();expect(t.getRawApdu()).toStrictEqual(i)})}),describe("parseResponse",()=>{it("should return success when status is 0x9000 and no data",()=>{const t={statusCode:Uint8Array.from([144,0]),data:new Uint8Array},r=o.parseResponse(t);expect(r).toStrictEqual((0,e.CommandResultFactory)({data:void 0})),expect((0,e.isSuccessCommandResult)(r)).toBe(!0)}),it("should return an error if the status code is not 0x9000",()=>{const t={statusCode:Uint8Array.from([106,128]),data:new Uint8Array},r=o.parseResponse(t);expect((0,e.isSuccessCommandResult)(r)).toBe(!1)}),it("should return an error if response contains unexpected data",()=>{const t={statusCode:Uint8Array.from([144,0]),data:Uint8Array.from([1])},r=o.parseResponse(t);expect((0,e.isSuccessCommandResult)(r)).toBe(!1),expect(r.error).toBeInstanceOf(e.InvalidStatusWordError)})})});
1
+ "use strict";var e=require("@ledgerhq/device-management-kit"),s=require("./ProvideTLVDescriptorCommand");const a=224,n=33,d=0,c=0,i=Uint8Array.from([a,n,d,c,4,222,173,190,239]);describe("ProvideTLVDescriptorCommand",()=>{let o;beforeEach(()=>{o=new s.ProvideTLVDescriptorCommand({payload:Uint8Array.from([222,173,190,239])})}),describe("name",()=>{it("should be 'provideTLVDescriptor'",()=>{expect(o.name).toBe("provideTLVDescriptor")})}),describe("getApdu",()=>{it("should construct the correct APDU",()=>{const t=o.getApdu();expect(t.getRawApdu()).toStrictEqual(i)})}),describe("parseResponse",()=>{it("should return success when status is 0x9000 and no data",()=>{const t={statusCode:Uint8Array.from([144,0]),data:new Uint8Array},r=o.parseResponse(t);expect(r).toStrictEqual((0,e.CommandResultFactory)({data:void 0})),expect((0,e.isSuccessCommandResult)(r)).toBe(!0)}),it("should return an error if the status code is not 0x9000",()=>{const t={statusCode:Uint8Array.from([106,128]),data:new Uint8Array},r=o.parseResponse(t);expect((0,e.isSuccessCommandResult)(r)).toBe(!1)}),it("should return an error if response contains unexpected data",()=>{const t={statusCode:Uint8Array.from([144,0]),data:Uint8Array.from([1])},r=o.parseResponse(t);expect((0,e.isSuccessCommandResult)(r)).toBe(!1),expect(r.error).toBeInstanceOf(e.InvalidStatusWordError)})})});
2
2
  //# sourceMappingURL=ProvideTLVDescriptorCommand.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/command/ProvideTLVDescriptorCommand.test.ts"],
4
- "sourcesContent": ["import {\n CommandResultFactory,\n InvalidStatusWordError,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { ProvideTLVDescriptorCommand } from \"./ProvideTLVDescriptorCommand\";\n\nconst CLA = 0xe0;\nconst INS = 0x21;\nconst P1 = 0x00;\nconst P2 = 0x00;\n\nconst EXPECTED_APDU = Uint8Array.from([\n CLA,\n INS,\n P1,\n P2,\n 0x04,\n 0xde,\n 0xad,\n 0xbe,\n 0xef,\n]);\n\ndescribe(\"ProvideTLVDescriptorCommand\", () => {\n let command: ProvideTLVDescriptorCommand;\n\n beforeEach(() => {\n command = new ProvideTLVDescriptorCommand({\n payload: Uint8Array.from([0xde, 0xad, 0xbe, 0xef]),\n });\n });\n\n describe(\"getApdu\", () => {\n it(\"should construct the correct APDU\", () => {\n const apdu = command.getApdu();\n expect(apdu.getRawApdu()).toStrictEqual(EXPECTED_APDU);\n });\n });\n\n describe(\"parseResponse\", () => {\n it(\"should return success when status is 0x9000 and no data\", () => {\n const LNX_RESPONSE_GOOD = {\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: new Uint8Array(),\n };\n\n const parsed = command.parseResponse(LNX_RESPONSE_GOOD);\n expect(parsed).toStrictEqual(CommandResultFactory({ data: undefined }));\n expect(isSuccessCommandResult(parsed)).toBe(true);\n });\n\n it(\"should return an error if the status code is not 0x9000\", () => {\n const LNX_RESPONSE_ERROR = {\n statusCode: Uint8Array.from([0x6a, 0x80]),\n data: new Uint8Array(),\n };\n\n const result = command.parseResponse(LNX_RESPONSE_ERROR);\n expect(isSuccessCommandResult(result)).toBe(false);\n });\n\n it(\"should return an error if response contains unexpected data\", () => {\n const LNX_RESPONSE_EXTRA = {\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: Uint8Array.from([0x01]),\n };\n\n const result = command.parseResponse(LNX_RESPONSE_EXTRA);\n expect(isSuccessCommandResult(result)).toBe(false);\n // @ts-expect-error response is not typed\n expect(result.error).toBeInstanceOf(InvalidStatusWordError);\n });\n });\n});\n"],
5
- "mappings": "aAAA,IAAAA,EAIO,2CAEPC,EAA4C,yCAE5C,MAAMC,EAAM,IACNC,EAAM,GACNC,EAAK,EACLC,EAAK,EAELC,EAAgB,WAAW,KAAK,CACpCJ,EACAC,EACAC,EACAC,EACA,EACA,IACA,IACA,IACA,GACF,CAAC,EAED,SAAS,8BAA+B,IAAM,CAC5C,IAAIE,EAEJ,WAAW,IAAM,CACfA,EAAU,IAAI,8BAA4B,CACxC,QAAS,WAAW,KAAK,CAAC,IAAM,IAAM,IAAM,GAAI,CAAC,CACnD,CAAC,CACH,CAAC,EAED,SAAS,UAAW,IAAM,CACxB,GAAG,oCAAqC,IAAM,CAC5C,MAAMC,EAAOD,EAAQ,QAAQ,EAC7B,OAAOC,EAAK,WAAW,CAAC,EAAE,cAAcF,CAAa,CACvD,CAAC,CACH,CAAC,EAED,SAAS,gBAAiB,IAAM,CAC9B,GAAG,0DAA2D,IAAM,CAClE,MAAMG,EAAoB,CACxB,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAM,IAAI,UACZ,EAEMC,EAASH,EAAQ,cAAcE,CAAiB,EACtD,OAAOC,CAAM,EAAE,iBAAc,wBAAqB,CAAE,KAAM,MAAU,CAAC,CAAC,EACtE,UAAO,0BAAuBA,CAAM,CAAC,EAAE,KAAK,EAAI,CAClD,CAAC,EAED,GAAG,0DAA2D,IAAM,CAClE,MAAMC,EAAqB,CACzB,WAAY,WAAW,KAAK,CAAC,IAAM,GAAI,CAAC,EACxC,KAAM,IAAI,UACZ,EAEMC,EAASL,EAAQ,cAAcI,CAAkB,EACvD,UAAO,0BAAuBC,CAAM,CAAC,EAAE,KAAK,EAAK,CACnD,CAAC,EAED,GAAG,8DAA+D,IAAM,CACtE,MAAMC,EAAqB,CACzB,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAM,WAAW,KAAK,CAAC,CAAI,CAAC,CAC9B,EAEMD,EAASL,EAAQ,cAAcM,CAAkB,EACvD,UAAO,0BAAuBD,CAAM,CAAC,EAAE,KAAK,EAAK,EAEjD,OAAOA,EAAO,KAAK,EAAE,eAAe,wBAAsB,CAC5D,CAAC,CACH,CAAC,CACH,CAAC",
4
+ "sourcesContent": ["import {\n CommandResultFactory,\n InvalidStatusWordError,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { ProvideTLVDescriptorCommand } from \"./ProvideTLVDescriptorCommand\";\n\nconst CLA = 0xe0;\nconst INS = 0x21;\nconst P1 = 0x00;\nconst P2 = 0x00;\n\nconst EXPECTED_APDU = Uint8Array.from([\n CLA,\n INS,\n P1,\n P2,\n 0x04,\n 0xde,\n 0xad,\n 0xbe,\n 0xef,\n]);\n\ndescribe(\"ProvideTLVDescriptorCommand\", () => {\n let command: ProvideTLVDescriptorCommand;\n\n beforeEach(() => {\n command = new ProvideTLVDescriptorCommand({\n payload: Uint8Array.from([0xde, 0xad, 0xbe, 0xef]),\n });\n });\n\n describe(\"name\", () => {\n it(\"should be 'provideTLVDescriptor'\", () => {\n expect(command.name).toBe(\"provideTLVDescriptor\");\n });\n });\n\n describe(\"getApdu\", () => {\n it(\"should construct the correct APDU\", () => {\n const apdu = command.getApdu();\n expect(apdu.getRawApdu()).toStrictEqual(EXPECTED_APDU);\n });\n });\n\n describe(\"parseResponse\", () => {\n it(\"should return success when status is 0x9000 and no data\", () => {\n const LNX_RESPONSE_GOOD = {\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: new Uint8Array(),\n };\n\n const parsed = command.parseResponse(LNX_RESPONSE_GOOD);\n expect(parsed).toStrictEqual(CommandResultFactory({ data: undefined }));\n expect(isSuccessCommandResult(parsed)).toBe(true);\n });\n\n it(\"should return an error if the status code is not 0x9000\", () => {\n const LNX_RESPONSE_ERROR = {\n statusCode: Uint8Array.from([0x6a, 0x80]),\n data: new Uint8Array(),\n };\n\n const result = command.parseResponse(LNX_RESPONSE_ERROR);\n expect(isSuccessCommandResult(result)).toBe(false);\n });\n\n it(\"should return an error if response contains unexpected data\", () => {\n const LNX_RESPONSE_EXTRA = {\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: Uint8Array.from([0x01]),\n };\n\n const result = command.parseResponse(LNX_RESPONSE_EXTRA);\n expect(isSuccessCommandResult(result)).toBe(false);\n // @ts-expect-error response is not typed\n expect(result.error).toBeInstanceOf(InvalidStatusWordError);\n });\n });\n});\n"],
5
+ "mappings": "aAAA,IAAAA,EAIO,2CAEPC,EAA4C,yCAE5C,MAAMC,EAAM,IACNC,EAAM,GACNC,EAAK,EACLC,EAAK,EAELC,EAAgB,WAAW,KAAK,CACpCJ,EACAC,EACAC,EACAC,EACA,EACA,IACA,IACA,IACA,GACF,CAAC,EAED,SAAS,8BAA+B,IAAM,CAC5C,IAAIE,EAEJ,WAAW,IAAM,CACfA,EAAU,IAAI,8BAA4B,CACxC,QAAS,WAAW,KAAK,CAAC,IAAM,IAAM,IAAM,GAAI,CAAC,CACnD,CAAC,CACH,CAAC,EAED,SAAS,OAAQ,IAAM,CACrB,GAAG,mCAAoC,IAAM,CAC3C,OAAOA,EAAQ,IAAI,EAAE,KAAK,sBAAsB,CAClD,CAAC,CACH,CAAC,EAED,SAAS,UAAW,IAAM,CACxB,GAAG,oCAAqC,IAAM,CAC5C,MAAMC,EAAOD,EAAQ,QAAQ,EAC7B,OAAOC,EAAK,WAAW,CAAC,EAAE,cAAcF,CAAa,CACvD,CAAC,CACH,CAAC,EAED,SAAS,gBAAiB,IAAM,CAC9B,GAAG,0DAA2D,IAAM,CAClE,MAAMG,EAAoB,CACxB,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAM,IAAI,UACZ,EAEMC,EAASH,EAAQ,cAAcE,CAAiB,EACtD,OAAOC,CAAM,EAAE,iBAAc,wBAAqB,CAAE,KAAM,MAAU,CAAC,CAAC,EACtE,UAAO,0BAAuBA,CAAM,CAAC,EAAE,KAAK,EAAI,CAClD,CAAC,EAED,GAAG,0DAA2D,IAAM,CAClE,MAAMC,EAAqB,CACzB,WAAY,WAAW,KAAK,CAAC,IAAM,GAAI,CAAC,EACxC,KAAM,IAAI,UACZ,EAEMC,EAASL,EAAQ,cAAcI,CAAkB,EACvD,UAAO,0BAAuBC,CAAM,CAAC,EAAE,KAAK,EAAK,CACnD,CAAC,EAED,GAAG,8DAA+D,IAAM,CACtE,MAAMC,EAAqB,CACzB,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAM,WAAW,KAAK,CAAC,CAAI,CAAC,CAC9B,EAEMD,EAASL,EAAQ,cAAcM,CAAkB,EACvD,UAAO,0BAAuBD,CAAM,CAAC,EAAE,KAAK,EAAK,EAEjD,OAAOA,EAAO,KAAK,EAAE,eAAe,wBAAsB,CAC5D,CAAC,CACH,CAAC,CACH,CAAC",
6
6
  "names": ["import_device_management_kit", "import_ProvideTLVDescriptorCommand", "CLA", "INS", "P1", "P2", "EXPECTED_APDU", "command", "apdu", "LNX_RESPONSE_GOOD", "parsed", "LNX_RESPONSE_ERROR", "result", "LNX_RESPONSE_EXTRA"]
7
7
  }
@@ -0,0 +1,2 @@
1
+ "use strict";var d=Object.defineProperty;var C=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var E=Object.prototype.hasOwnProperty;var I=(e,r)=>{for(var t in r)d(e,t,{get:r[t],enumerable:!0})},h=(e,r,t,s)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of y(r))!E.call(e,n)&&n!==t&&d(e,n,{get:()=>r[n],enumerable:!(s=C(r,n))||s.enumerable});return e};var R=e=>h(d({},"__esModule",{value:!0}),e);var v={};I(v,{CLA:()=>p,INS:()=>c,P1_FIRST:()=>l,P1_NEXT:()=>u,P2:()=>g,ProvideTLVTransactionInstructionDescriptorCommand:()=>P,SWAP_SIGNATURE_TAG:()=>S,TRANSACTION_SIGNATURE_TAG:()=>x});module.exports=R(v);var o=require("@ledgerhq/device-management-kit"),T=require("@ledgerhq/signer-utils"),i=require("./utils/SolanaApplicationErrors");const p=224,c=34,l=0,u=128,g=0,x=8,S=21;class P{constructor(r){this.args=r}errorHelper=new T.CommandErrorHelper(i.SOLANA_APP_ERRORS,i.SolanaAppCommandErrorFactory);name="ProvideTLVTransactionInstructionDescriptor";getApdu(){if(this.args.kind==="empty")return new o.ApduBuilder({cla:p,ins:c,p1:this.args.isFirstMessage?l:u,p2:g}).build();const{dataHex:r,signatureHex:t,isFirstMessage:s}=this.args,n={cla:p,ins:c,p1:s?l:u,p2:g},m=new o.ApduBuilder(n),a=t.length/2;if(a<70||a>72||t.length%2!==0)throw new Error(`Invalid signature length: ${a} bytes`);const A=r.length/2+1+1+a;if(A>255)throw new Error(`Descriptor payload too large for short APDU: ${A} > 255`);return m.addHexaStringToData(r).add8BitUIntToData(this.args.swapSignatureTag?S:x).add8BitUIntToData(a).addHexaStringToData(t),m.build()}parseResponse(r){const t=this.errorHelper.getError(r);return t||(r.data.length!==0?(0,o.CommandResultFactory)({error:new o.InvalidStatusWordError("Unexpected data in response")}):(0,o.CommandResultFactory)({data:void 0}))}}0&&(module.exports={CLA,INS,P1_FIRST,P1_NEXT,P2,ProvideTLVTransactionInstructionDescriptorCommand,SWAP_SIGNATURE_TAG,TRANSACTION_SIGNATURE_TAG});
2
+ //# sourceMappingURL=ProvideTLVTransactionInstructionDescriptorCommand.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/internal/app-binder/command/ProvideTLVTransactionInstructionDescriptorCommand.ts"],
4
+ "sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n type ApduBuilderArgs,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\n\nimport {\n SOLANA_APP_ERRORS,\n SolanaAppCommandErrorFactory,\n type SolanaAppErrorCodes,\n} from \"./utils/SolanaApplicationErrors\";\n\nexport const CLA = 0xe0;\nexport const INS = 0x22;\nexport const P1_FIRST = 0x00;\nexport const P1_NEXT = 0x80;\nexport const P2 = 0x00;\nexport const TRANSACTION_SIGNATURE_TAG = 0x08;\nexport const SWAP_SIGNATURE_TAG = 0x15;\n\nexport type ProvideTLVTransactionInstructionDescriptorCommandArgs =\n | {\n kind: \"descriptor\";\n dataHex: string;\n signatureHex: string;\n isFirstMessage: boolean;\n swapSignatureTag: boolean;\n }\n | {\n kind: \"empty\"; // send empty payload to keep instruction index alignment\n isFirstMessage: boolean;\n swapSignatureTag: boolean;\n };\n\nexport class ProvideTLVTransactionInstructionDescriptorCommand\n implements\n Command<\n void,\n ProvideTLVTransactionInstructionDescriptorCommandArgs,\n SolanaAppErrorCodes\n >\n{\n private readonly errorHelper = new CommandErrorHelper<\n void,\n SolanaAppErrorCodes\n >(SOLANA_APP_ERRORS, SolanaAppCommandErrorFactory);\n\n constructor(\n readonly args: ProvideTLVTransactionInstructionDescriptorCommandArgs,\n ) {}\n readonly name = \"ProvideTLVTransactionInstructionDescriptor\";\n\n getApdu(): Apdu {\n if (this.args.kind === \"empty\") {\n // just header + Lc=0\n return new ApduBuilder({\n cla: CLA,\n ins: INS,\n p1: this.args.isFirstMessage ? P1_FIRST : P1_NEXT,\n p2: P2,\n }).build();\n }\n\n const { dataHex, signatureHex, isFirstMessage } = this.args;\n\n const apduBuilderArgs: ApduBuilderArgs = {\n cla: CLA,\n ins: INS,\n p1: isFirstMessage ? P1_FIRST : P1_NEXT,\n p2: P2,\n };\n\n const builder = new ApduBuilder(apduBuilderArgs);\n\n // validate signature size (as spec 70\u201372 bytes)\n const sigLen = signatureHex.length / 2;\n if (sigLen < 70 || sigLen > 72 || signatureHex.length % 2 !== 0) {\n throw new Error(`Invalid signature length: ${sigLen} bytes`);\n }\n\n // check short APDU limit (255)\n const dataLen = dataHex.length / 2;\n const total = dataLen + 1 /*tag*/ + 1 /*len*/ + sigLen;\n if (total > 255) {\n throw new Error(\n `Descriptor payload too large for short APDU: ${total} > 255`,\n );\n }\n\n // build payload: data | SIGNATURE_TAG | <len> | <signature>\n builder\n .addHexaStringToData(dataHex)\n .add8BitUIntToData(\n this.args.swapSignatureTag\n ? SWAP_SIGNATURE_TAG\n : TRANSACTION_SIGNATURE_TAG,\n )\n .add8BitUIntToData(sigLen)\n .addHexaStringToData(signatureHex);\n\n return builder.build();\n }\n\n parseResponse(\n response: ApduResponse,\n ): CommandResult<void, SolanaAppErrorCodes> {\n const error = this.errorHelper.getError(response);\n if (error) return error;\n\n if (response.data.length !== 0) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Unexpected data in response\"),\n });\n }\n return CommandResultFactory({ data: undefined });\n }\n}\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,SAAAE,EAAA,QAAAC,EAAA,aAAAC,EAAA,YAAAC,EAAA,OAAAC,EAAA,sDAAAC,EAAA,uBAAAC,EAAA,8BAAAC,IAAA,eAAAC,EAAAV,GAAA,IAAAW,EASO,2CACPC,EAAmC,kCAEnCC,EAIO,2CAEA,MAAMX,EAAM,IACNC,EAAM,GACNC,EAAW,EACXC,EAAU,IACVC,EAAK,EACLG,EAA4B,EAC5BD,EAAqB,GAgB3B,MAAMD,CAOb,CAME,YACWO,EACT,CADS,UAAAA,CACR,CAPc,YAAc,IAAI,qBAGjC,oBAAmB,8BAA4B,EAKxC,KAAO,6CAEhB,SAAgB,CACd,GAAI,KAAK,KAAK,OAAS,QAErB,OAAO,IAAI,cAAY,CACrB,IAAKZ,EACL,IAAKC,EACL,GAAI,KAAK,KAAK,eAAiBC,EAAWC,EAC1C,GAAIC,CACN,CAAC,EAAE,MAAM,EAGX,KAAM,CAAE,QAAAS,EAAS,aAAAC,EAAc,eAAAC,CAAe,EAAI,KAAK,KAEjDC,EAAmC,CACvC,IAAKhB,EACL,IAAKC,EACL,GAAIc,EAAiBb,EAAWC,EAChC,GAAIC,CACN,EAEMa,EAAU,IAAI,cAAYD,CAAe,EAGzCE,EAASJ,EAAa,OAAS,EACrC,GAAII,EAAS,IAAMA,EAAS,IAAMJ,EAAa,OAAS,IAAM,EAC5D,MAAM,IAAI,MAAM,6BAA6BI,CAAM,QAAQ,EAK7D,MAAMC,EADUN,EAAQ,OAAS,EACT,EAAY,EAAYK,EAChD,GAAIC,EAAQ,IACV,MAAM,IAAI,MACR,gDAAgDA,CAAK,QACvD,EAIF,OAAAF,EACG,oBAAoBJ,CAAO,EAC3B,kBACC,KAAK,KAAK,iBACNP,EACAC,CACN,EACC,kBAAkBW,CAAM,EACxB,oBAAoBJ,CAAY,EAE5BG,EAAQ,MAAM,CACvB,CAEA,cACEG,EAC0C,CAC1C,MAAMC,EAAQ,KAAK,YAAY,SAASD,CAAQ,EAChD,OAAIC,IAEAD,EAAS,KAAK,SAAW,KACpB,wBAAqB,CAC1B,MAAO,IAAI,yBAAuB,6BAA6B,CACjE,CAAC,KAEI,wBAAqB,CAAE,KAAM,MAAU,CAAC,EACjD,CACF",
6
+ "names": ["ProvideTLVTransactionInstructionDescriptorCommand_exports", "__export", "CLA", "INS", "P1_FIRST", "P1_NEXT", "P2", "ProvideTLVTransactionInstructionDescriptorCommand", "SWAP_SIGNATURE_TAG", "TRANSACTION_SIGNATURE_TAG", "__toCommonJS", "import_device_management_kit", "import_signer_utils", "import_SolanaApplicationErrors", "args", "dataHex", "signatureHex", "isFirstMessage", "apduBuilderArgs", "builder", "sigLen", "total", "response", "error"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var a=require("@ledgerhq/device-management-kit"),t=require("./ProvideTLVTransactionInstructionDescriptorCommand");const n="f0cacc1a",d=Uint8Array.from([240,202,204,26]),o="01".repeat(70),u=70,p=d.length+1+1+u;describe("ProvideTLVTransactionInstructionDescriptorCommand",()=>{describe("getApdu",()=>{it('builds the correct APDU for kind: "empty" (Lc=0)',()=>{const e=new t.ProvideTLVTransactionInstructionDescriptorCommand({kind:"empty",isFirstMessage:!0,swapSignatureTag:!1}).getApdu().getRawApdu(),r=Uint8Array.from([t.CLA,t.INS,t.P1_FIRST,t.P2,0]);expect(e).toStrictEqual(r)}),it('builds the correct APDU for kind: "descriptor" on first message with transaction signature tag',()=>{const e=new t.ProvideTLVTransactionInstructionDescriptorCommand({kind:"descriptor",dataHex:n,signatureHex:o,isFirstMessage:!0,swapSignatureTag:!1}).getApdu().getRawApdu(),r=[t.CLA,t.INS,t.P1_FIRST,t.P2,p],i=[...d,t.TRANSACTION_SIGNATURE_TAG,u,...Uint8Array.from(Buffer.from(o,"hex"))],c=Uint8Array.from([...r,...i]);expect(e).toStrictEqual(c)}),it('builds the correct APDU for kind: "descriptor" on first message with swap signature tag',()=>{const e=new t.ProvideTLVTransactionInstructionDescriptorCommand({kind:"descriptor",dataHex:n,signatureHex:o,isFirstMessage:!0,swapSignatureTag:!0}).getApdu().getRawApdu(),r=[t.CLA,t.INS,t.P1_FIRST,t.P2,p],i=[...d,t.SWAP_SIGNATURE_TAG,u,...Uint8Array.from(Buffer.from(o,"hex"))],c=Uint8Array.from([...r,...i]);expect(e).toStrictEqual(c)}),it('uses P1=0x80 when isFirstMessage=false for "descriptor"',()=>{const e=new t.ProvideTLVTransactionInstructionDescriptorCommand({kind:"descriptor",dataHex:n,signatureHex:o,isFirstMessage:!1,swapSignatureTag:!1}).getApdu().getRawApdu();expect(e[2]).toBe(t.P1_NEXT)}),it("throws if signature is too short (<70 bytes)",()=>{const s="ab".repeat(68),e=new t.ProvideTLVTransactionInstructionDescriptorCommand({kind:"descriptor",dataHex:n,signatureHex:s,isFirstMessage:!0,swapSignatureTag:!1});expect(()=>e.getApdu()).toThrow(/Invalid signature length/i)}),it("throws if signature is too long (>72 bytes)",()=>{const s="ab".repeat(73),e=new t.ProvideTLVTransactionInstructionDescriptorCommand({kind:"descriptor",dataHex:n,signatureHex:s,isFirstMessage:!0,swapSignatureTag:!1});expect(()=>e.getApdu()).toThrow(/Invalid signature length/i)}),it("throws if signature hex has odd length",()=>{const s="a".repeat(141),e=new t.ProvideTLVTransactionInstructionDescriptorCommand({kind:"descriptor",dataHex:n,signatureHex:s,isFirstMessage:!0,swapSignatureTag:!1});expect(()=>e.getApdu()).toThrow(/Invalid signature length/i)}),it("throws if the total short-APDU payload would exceed 255 bytes",()=>{const s="f0".repeat(200),e=new t.ProvideTLVTransactionInstructionDescriptorCommand({kind:"descriptor",dataHex:s,signatureHex:o,isFirstMessage:!0,swapSignatureTag:!1});expect(()=>e.getApdu()).toThrow(/payload too large/i)})}),describe("parseResponse",()=>{it("returns success when status is 0x9000 and no data",()=>{const s=new t.ProvideTLVTransactionInstructionDescriptorCommand({kind:"empty",isFirstMessage:!0,swapSignatureTag:!1}),e={statusCode:Uint8Array.from([144,0]),data:new Uint8Array},r=s.parseResponse(e);expect(r).toStrictEqual((0,a.CommandResultFactory)({data:void 0})),expect((0,a.isSuccessCommandResult)(r)).toBe(!0)}),it("returns an app error when status code is not 0x9000",()=>{const s=new t.ProvideTLVTransactionInstructionDescriptorCommand({kind:"empty",isFirstMessage:!0,swapSignatureTag:!1}),e={statusCode:Uint8Array.from([106,128]),data:new Uint8Array},r=s.parseResponse(e);expect((0,a.isSuccessCommandResult)(r)).toBe(!1)}),it("returns InvalidStatusWordError if response contains unexpected data",()=>{const s=new t.ProvideTLVTransactionInstructionDescriptorCommand({kind:"empty",isFirstMessage:!0,swapSignatureTag:!1}),e={statusCode:Uint8Array.from([144,0]),data:Uint8Array.from([1])},r=s.parseResponse(e);expect((0,a.isSuccessCommandResult)(r)).toBe(!1),expect(r.error).toBeInstanceOf(a.InvalidStatusWordError)})})});
2
+ //# sourceMappingURL=ProvideTLVTransactionInstructionDescriptorCommand.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/internal/app-binder/command/ProvideTLVTransactionInstructionDescriptorCommand.test.ts"],
4
+ "sourcesContent": ["import {\n CommandResultFactory,\n InvalidStatusWordError,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport {\n CLA,\n INS,\n P1_FIRST,\n P1_NEXT,\n P2,\n ProvideTLVTransactionInstructionDescriptorCommand,\n SWAP_SIGNATURE_TAG,\n TRANSACTION_SIGNATURE_TAG,\n} from \"./ProvideTLVTransactionInstructionDescriptorCommand\";\n\nconst DATA_HEX = \"f0cacc1a\";\nconst DATA_BYTES = Uint8Array.from([0xf0, 0xca, 0xcc, 0x1a]);\nconst SIG_70_HEX = \"01\".repeat(70);\nconst SIG_70_LEN = 70;\n\nconst LC_DESCRIPTOR = DATA_BYTES.length + 1 + 1 + SIG_70_LEN; // 4 + 1 + 1 + 70 = 76 (0x4c)\n\ndescribe(\"ProvideTLVTransactionInstructionDescriptorCommand\", () => {\n describe(\"getApdu\", () => {\n it('builds the correct APDU for kind: \"empty\" (Lc=0)', () => {\n const cmd = new ProvideTLVTransactionInstructionDescriptorCommand({\n kind: \"empty\",\n isFirstMessage: true,\n swapSignatureTag: false,\n });\n\n const apdu = cmd.getApdu().getRawApdu();\n const EXPECTED = Uint8Array.from([CLA, INS, P1_FIRST, P2, 0x00]);\n expect(apdu).toStrictEqual(EXPECTED);\n });\n\n it('builds the correct APDU for kind: \"descriptor\" on first message with transaction signature tag', () => {\n const cmd = new ProvideTLVTransactionInstructionDescriptorCommand({\n kind: \"descriptor\",\n dataHex: DATA_HEX,\n signatureHex: SIG_70_HEX,\n isFirstMessage: true,\n swapSignatureTag: false,\n });\n\n const apdu = cmd.getApdu().getRawApdu();\n\n // header + Lc\n const header = [CLA, INS, P1_FIRST, P2, LC_DESCRIPTOR];\n // payload = data | TRANSACTION_SIGNATURE_TAG | <len> | <signature>\n const payload = [\n ...DATA_BYTES,\n TRANSACTION_SIGNATURE_TAG,\n SIG_70_LEN,\n ...Uint8Array.from(Buffer.from(SIG_70_HEX, \"hex\")),\n ];\n\n const EXPECTED = Uint8Array.from([...header, ...payload]);\n expect(apdu).toStrictEqual(EXPECTED);\n });\n\n it('builds the correct APDU for kind: \"descriptor\" on first message with swap signature tag', () => {\n const cmd = new ProvideTLVTransactionInstructionDescriptorCommand({\n kind: \"descriptor\",\n dataHex: DATA_HEX,\n signatureHex: SIG_70_HEX,\n isFirstMessage: true,\n swapSignatureTag: true,\n });\n\n const apdu = cmd.getApdu().getRawApdu();\n\n const header = [CLA, INS, P1_FIRST, P2, LC_DESCRIPTOR];\n // payload = data | SWAP_SIGNATURE_TAG | <len> | <signature>\n const payload = [\n ...DATA_BYTES,\n SWAP_SIGNATURE_TAG,\n SIG_70_LEN,\n ...Uint8Array.from(Buffer.from(SIG_70_HEX, \"hex\")),\n ];\n\n const EXPECTED = Uint8Array.from([...header, ...payload]);\n expect(apdu).toStrictEqual(EXPECTED);\n });\n\n it('uses P1=0x80 when isFirstMessage=false for \"descriptor\"', () => {\n const cmd = new ProvideTLVTransactionInstructionDescriptorCommand({\n kind: \"descriptor\",\n dataHex: DATA_HEX,\n signatureHex: SIG_70_HEX,\n isFirstMessage: false,\n swapSignatureTag: false,\n });\n\n const apdu = cmd.getApdu().getRawApdu();\n expect(apdu[2]).toBe(P1_NEXT);\n });\n\n it(\"throws if signature is too short (<70 bytes)\", () => {\n const tooShort = \"ab\".repeat(68); // 68 bytes\n const cmd = new ProvideTLVTransactionInstructionDescriptorCommand({\n kind: \"descriptor\",\n dataHex: DATA_HEX,\n signatureHex: tooShort,\n isFirstMessage: true,\n swapSignatureTag: false,\n });\n\n expect(() => cmd.getApdu()).toThrow(/Invalid signature length/i);\n });\n\n it(\"throws if signature is too long (>72 bytes)\", () => {\n const tooLong = \"ab\".repeat(73); // 73 bytes\n const cmd = new ProvideTLVTransactionInstructionDescriptorCommand({\n kind: \"descriptor\",\n dataHex: DATA_HEX,\n signatureHex: tooLong,\n isFirstMessage: true,\n swapSignatureTag: false,\n });\n\n expect(() => cmd.getApdu()).toThrow(/Invalid signature length/i);\n });\n\n it(\"throws if signature hex has odd length\", () => {\n // 141 hex chars -> 70.5 bytes\n const oddHex = \"a\".repeat(141);\n const cmd = new ProvideTLVTransactionInstructionDescriptorCommand({\n kind: \"descriptor\",\n dataHex: DATA_HEX,\n signatureHex: oddHex,\n isFirstMessage: true,\n swapSignatureTag: false,\n });\n\n expect(() => cmd.getApdu()).toThrow(/Invalid signature length/i);\n });\n\n it(\"throws if the total short-APDU payload would exceed 255 bytes\", () => {\n const BIG_DATA_HEX = \"f0\".repeat(200);\n const cmd = new ProvideTLVTransactionInstructionDescriptorCommand({\n kind: \"descriptor\",\n dataHex: BIG_DATA_HEX,\n signatureHex: SIG_70_HEX,\n isFirstMessage: true,\n swapSignatureTag: false,\n });\n\n expect(() => cmd.getApdu()).toThrow(/payload too large/i);\n });\n });\n\n describe(\"parseResponse\", () => {\n it(\"returns success when status is 0x9000 and no data\", () => {\n const cmd = new ProvideTLVTransactionInstructionDescriptorCommand({\n kind: \"empty\",\n isFirstMessage: true,\n swapSignatureTag: false,\n });\n\n const LNX_RESPONSE_GOOD = {\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: new Uint8Array(),\n };\n\n const parsed = cmd.parseResponse(LNX_RESPONSE_GOOD);\n expect(parsed).toStrictEqual(CommandResultFactory({ data: undefined }));\n expect(isSuccessCommandResult(parsed)).toBe(true);\n });\n\n it(\"returns an app error when status code is not 0x9000\", () => {\n const cmd = new ProvideTLVTransactionInstructionDescriptorCommand({\n kind: \"empty\",\n isFirstMessage: true,\n swapSignatureTag: false,\n });\n\n const LNX_RESPONSE_ERROR = {\n statusCode: Uint8Array.from([0x6a, 0x80]),\n data: new Uint8Array(),\n };\n\n const result = cmd.parseResponse(LNX_RESPONSE_ERROR);\n expect(isSuccessCommandResult(result)).toBe(false);\n });\n\n it(\"returns InvalidStatusWordError if response contains unexpected data\", () => {\n const cmd = new ProvideTLVTransactionInstructionDescriptorCommand({\n kind: \"empty\",\n isFirstMessage: true,\n swapSignatureTag: false,\n });\n\n const LNX_RESPONSE_EXTRA = {\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: Uint8Array.from([0x01]),\n };\n\n const result = cmd.parseResponse(LNX_RESPONSE_EXTRA);\n expect(isSuccessCommandResult(result)).toBe(false);\n // @ts-expect-error error is present on CommandErrorResult\n expect(result.error).toBeInstanceOf(InvalidStatusWordError);\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["import_device_management_kit", "import_ProvideTLVTransactionInstructionDescriptorCommand", "DATA_HEX", "DATA_BYTES", "SIG_70_HEX", "SIG_70_LEN", "LC_DESCRIPTOR", "apdu", "EXPECTED", "header", "payload", "tooShort", "cmd", "tooLong", "oddHex", "BIG_DATA_HEX", "LNX_RESPONSE_GOOD", "parsed", "LNX_RESPONSE_ERROR", "result", "LNX_RESPONSE_EXTRA"]
7
+ }
@@ -1,2 +1,2 @@
1
- "use strict";var p=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var f=Object.prototype.hasOwnProperty;var C=(a,e)=>{for(var n in e)p(a,n,{get:e[n],enumerable:!0})},l=(a,e,n,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of g(e))!f.call(a,s)&&s!==n&&p(a,s,{get:()=>e[s],enumerable:!(o=d(e,s))||o.enumerable});return a};var u=a=>l(p({},"__esModule",{value:!0}),a);var y={};C(y,{SignOffChainMessageCommand:()=>S});module.exports=u(y);var r=require("@ledgerhq/device-management-kit"),m=require("@ledgerhq/signer-utils"),i=require("purify-ts"),t=require("./utils/SolanaApplicationErrors");const A=64;class S{errorHelper=new m.CommandErrorHelper(t.SOLANA_APP_ERRORS,t.SolanaAppCommandErrorFactory);args;constructor(e){this.args=e}getApdu(){return new r.ApduBuilder({cla:224,ins:7,p1:1,p2:0}).addBufferToData(this.args.message).build()}parseResponse(e){return i.Maybe.fromNullable(this.errorHelper.getError(e)).orDefaultLazy(()=>{const o=new r.ApduParser(e).extractFieldByLength(A);return o?(0,r.CommandResultFactory)({data:o}):(0,r.CommandResultFactory)({error:new r.InvalidStatusWordError("Signature extraction failed")})})}}0&&(module.exports={SignOffChainMessageCommand});
1
+ "use strict";var p=Object.defineProperty;var C=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var A=(n,e)=>{for(var o in e)p(n,o,{get:e[o],enumerable:!0})},f=(n,e,o,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of g(e))!l.call(n,s)&&s!==o&&p(n,s,{get:()=>e[s],enumerable:!(r=C(e,s))||r.enumerable});return n};var c=n=>f(p({},"__esModule",{value:!0}),n);var h={};A(h,{CLA:()=>m,INS:()=>i,P1:()=>u,SOL_P2:()=>t,SignOffChainMessageCommand:()=>R});module.exports=c(h);var a=require("@ledgerhq/device-management-kit");const m=224,i=7,u=1,d=64,t={INIT:0,EXTEND:1,MORE:2};class R{constructor(e){this.args=e}name="signOffChainMessage";getApdu(){const e=(this.args.extend?t.EXTEND:t.INIT)|(this.args.more?t.MORE:0);return new a.ApduBuilder({cla:m,ins:i,p1:u,p2:e}).addBufferToData(this.args.chunkedData).build()}parseResponse(e){const r=new a.ApduParser(e).extractFieldByLength(d);return!r||r.length!==d?(0,a.CommandResultFactory)({data:new Uint8Array(0)}):(0,a.CommandResultFactory)({data:r})}}0&&(module.exports={CLA,INS,P1,SOL_P2,SignOffChainMessageCommand});
2
2
  //# sourceMappingURL=SignOffChainMessageCommand.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/command/SignOffChainMessageCommand.ts"],
4
- "sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\nimport { Maybe } from \"purify-ts\";\n\nimport { type Signature } from \"@api/model/Signature\";\n\nimport {\n SOLANA_APP_ERRORS,\n SolanaAppCommandErrorFactory,\n type SolanaAppErrorCodes,\n} from \"./utils/SolanaApplicationErrors\";\n\nconst SIGNATURE_LENGTH = 64;\n\nexport type SignOffChainMessageCommandResponse = Signature;\nexport type SignOffChainMessageCommandArgs = {\n readonly message: Uint8Array;\n};\n\nexport class SignOffChainMessageCommand\n implements\n Command<\n SignOffChainMessageCommandResponse,\n SignOffChainMessageCommandArgs,\n SolanaAppErrorCodes\n >\n{\n private readonly errorHelper = new CommandErrorHelper<\n SignOffChainMessageCommandResponse,\n SolanaAppErrorCodes\n >(SOLANA_APP_ERRORS, SolanaAppCommandErrorFactory);\n\n args: SignOffChainMessageCommandArgs;\n\n constructor(args: SignOffChainMessageCommandArgs) {\n this.args = args;\n }\n\n getApdu(): Apdu {\n return new ApduBuilder({\n cla: 0xe0,\n ins: 0x07,\n p1: 0x01,\n p2: 0x00,\n })\n .addBufferToData(this.args.message)\n .build();\n }\n\n parseResponse(\n response: ApduResponse,\n ): CommandResult<SignOffChainMessageCommandResponse, SolanaAppErrorCodes> {\n return Maybe.fromNullable(\n this.errorHelper.getError(response),\n ).orDefaultLazy(() => {\n const parser = new ApduParser(response);\n\n const signature = parser.extractFieldByLength(SIGNATURE_LENGTH);\n if (!signature) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Signature extraction failed\"),\n });\n }\n\n return CommandResultFactory({\n data: signature,\n });\n });\n }\n}\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,gCAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EASO,2CACPC,EAAmC,kCACnCC,EAAsB,qBAItBC,EAIO,2CAEP,MAAMC,EAAmB,GAOlB,MAAMN,CAOb,CACmB,YAAc,IAAI,qBAGjC,oBAAmB,8BAA4B,EAEjD,KAEA,YAAYO,EAAsC,CAChD,KAAK,KAAOA,CACd,CAEA,SAAgB,CACd,OAAO,IAAI,cAAY,CACrB,IAAK,IACL,IAAK,EACL,GAAI,EACJ,GAAI,CACN,CAAC,EACE,gBAAgB,KAAK,KAAK,OAAO,EACjC,MAAM,CACX,CAEA,cACEC,EACwE,CACxE,OAAO,QAAM,aACX,KAAK,YAAY,SAASA,CAAQ,CACpC,EAAE,cAAc,IAAM,CAGpB,MAAMC,EAFS,IAAI,aAAWD,CAAQ,EAEb,qBAAqBF,CAAgB,EAC9D,OAAKG,KAME,wBAAqB,CAC1B,KAAMA,CACR,CAAC,KAPQ,wBAAqB,CAC1B,MAAO,IAAI,yBAAuB,6BAA6B,CACjE,CAAC,CAML,CAAC,CACH,CACF",
6
- "names": ["SignOffChainMessageCommand_exports", "__export", "SignOffChainMessageCommand", "__toCommonJS", "import_device_management_kit", "import_signer_utils", "import_purify_ts", "import_SolanaApplicationErrors", "SIGNATURE_LENGTH", "args", "response", "signature"]
4
+ "sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type ChunkableCommandArgs } from \"@internal/app-binder/task/SendCommandInChunksTask\";\n\nimport { type SolanaAppErrorCodes } from \"./utils/SolanaApplicationErrors\";\n\nexport const CLA = 0xe0;\nexport const INS = 0x07;\nexport const P1 = 0x01;\n\nconst SIGNATURE_LENGTH = 64;\n\nexport const SOL_P2 = {\n INIT: 0x00,\n EXTEND: 0x01,\n MORE: 0x02,\n};\n\nexport type SignOffChainRawResponse = Uint8Array;\n\nexport class SignOffChainMessageCommand\n implements\n Command<SignOffChainRawResponse, ChunkableCommandArgs, SolanaAppErrorCodes>\n{\n readonly name = \"signOffChainMessage\";\n constructor(readonly args: ChunkableCommandArgs) {}\n\n getApdu(): Apdu {\n const p2 =\n (this.args.extend ? SOL_P2.EXTEND : SOL_P2.INIT) |\n (this.args.more ? SOL_P2.MORE : 0);\n\n return new ApduBuilder({\n cla: CLA,\n ins: INS,\n p1: P1,\n p2,\n })\n .addBufferToData(this.args.chunkedData)\n .build();\n }\n\n parseResponse(\n response: ApduResponse,\n ): CommandResult<SignOffChainRawResponse, SolanaAppErrorCodes> {\n const parser = new ApduParser(response);\n const sig = parser.extractFieldByLength(SIGNATURE_LENGTH);\n\n // for intermediate chunks, the device returns 0 bytes of data with 0x9000.\n // only the last chunk yields the 64-byte signature.\n if (!sig || sig.length !== SIGNATURE_LENGTH) {\n return CommandResultFactory({ data: new Uint8Array(0) });\n }\n\n return CommandResultFactory({ data: sig });\n }\n}\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,SAAAE,EAAA,QAAAC,EAAA,OAAAC,EAAA,WAAAC,EAAA,+BAAAC,IAAA,eAAAC,EAAAP,GAAA,IAAAQ,EAQO,2CAMA,MAAMN,EAAM,IACNC,EAAM,EACNC,EAAK,EAEZK,EAAmB,GAEZJ,EAAS,CACpB,KAAM,EACN,OAAQ,EACR,KAAM,CACR,EAIO,MAAMC,CAGb,CAEE,YAAqBI,EAA4B,CAA5B,UAAAA,CAA6B,CADzC,KAAO,sBAGhB,SAAgB,CACd,MAAMC,GACH,KAAK,KAAK,OAASN,EAAO,OAASA,EAAO,OAC1C,KAAK,KAAK,KAAOA,EAAO,KAAO,GAElC,OAAO,IAAI,cAAY,CACrB,IAAKH,EACL,IAAKC,EACL,GAAIC,EACJ,GAAAO,CACF,CAAC,EACE,gBAAgB,KAAK,KAAK,WAAW,EACrC,MAAM,CACX,CAEA,cACEC,EAC6D,CAE7D,MAAMC,EADS,IAAI,aAAWD,CAAQ,EACnB,qBAAqBH,CAAgB,EAIxD,MAAI,CAACI,GAAOA,EAAI,SAAWJ,KAClB,wBAAqB,CAAE,KAAM,IAAI,WAAW,CAAC,CAAE,CAAC,KAGlD,wBAAqB,CAAE,KAAMI,CAAI,CAAC,CAC3C,CACF",
6
+ "names": ["SignOffChainMessageCommand_exports", "__export", "CLA", "INS", "P1", "SOL_P2", "SignOffChainMessageCommand", "__toCommonJS", "import_device_management_kit", "SIGNATURE_LENGTH", "args", "p2", "response", "sig"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var e=require("@ledgerhq/device-management-kit"),n=require("./SignOffChainMessageCommand");describe("SignOffChainMessageCommand",()=>{let t;const a=new Uint8Array(Buffer.from("Solana SignOffChainMessage","utf-8")),o=64;beforeEach(()=>{t=new n.SignOffChainMessageCommand({message:a}),vi.clearAllMocks(),vi.importActual("@ledgerhq/device-management-kit")}),describe("getApdu",()=>{it("should return the correct APDU",()=>{const s=t.getApdu(),r=new e.ApduBuilder({cla:224,ins:7,p1:1,p2:0}).addBufferToData(a).build();expect(s.getRawApdu()).toEqual(r.getRawApdu())})}),describe("parseResponse",()=>{it("should parse the response correctly",()=>{const s=new Uint8Array(o).fill(1),r=t.parseResponse(new e.ApduResponse({data:s,statusCode:new Uint8Array([144,0])}));expect((0,e.isSuccessCommandResult)(r)).toBe(!0),(0,e.isSuccessCommandResult)(r)?expect(r.data).toEqual(s):assert.fail("Expected success result")}),describe("error handling",()=>{it("should return error if response is not success",()=>{const s=t.parseResponse(new e.ApduResponse({statusCode:new Uint8Array([106,130]),data:new Uint8Array(0)}));expect((0,e.isSuccessCommandResult)(s)).toBe(!1),(0,e.isSuccessCommandResult)(s)?assert.fail("Expected error"):expect(s.error).toEqual(expect.objectContaining({_tag:"SolanaAppCommandError",errorCode:"6a82",message:"Invalid off-chain message format"}))}),it("should return error if signature is missing or incomplete",()=>{const s=new Uint8Array(o-1).fill(1),r=t.parseResponse(new e.ApduResponse({data:s,statusCode:new Uint8Array([144,0])}));expect((0,e.isSuccessCommandResult)(r)).toBe(!1),(0,e.isSuccessCommandResult)(r)?assert.fail("Expected error"):typeof r.error.originalError=="object"&&r.error.originalError!==null&&"message"in r.error.originalError&&expect(r.error.originalError.message).toBe("Signature extraction failed")})})})});
1
+ "use strict";var a=require("@ledgerhq/device-management-kit"),e=require("./SignOffChainMessageCommand");describe("SignOffChainMessageCommand",()=>{const s=new TextEncoder().encode("Solana SignOffChainMessage"),c=64;describe("name",()=>{it("should be 'signOffChainMessage'",()=>{const d=new e.SignOffChainMessageCommand({chunkedData:s,extend:!1,more:!1});expect(d.name).toBe("signOffChainMessage")})}),describe("getApdu()",()=>{it("builds APDU for a single (final) chunk (p2=INIT)",()=>{const t=new e.SignOffChainMessageCommand({chunkedData:s,extend:!1,more:!1}).getApdu(),n=new a.ApduBuilder({cla:e.CLA,ins:e.INS,p1:e.P1,p2:0}).addBufferToData(s).build();expect(t.getRawApdu()).toEqual(n.getRawApdu())}),it("sets p2 correctly for first of many chunks (INIT|MORE)",()=>{const t=new e.SignOffChainMessageCommand({chunkedData:s,extend:!1,more:!0}).getApdu(),n=new a.ApduBuilder({cla:e.CLA,ins:e.INS,p1:e.P1,p2:2}).addBufferToData(s).build();expect(t.getRawApdu()).toEqual(n.getRawApdu())}),it("sets p2 correctly for middle chunks (EXTEND|MORE)",()=>{const t=new e.SignOffChainMessageCommand({chunkedData:s,extend:!0,more:!0}).getApdu(),n=new a.ApduBuilder({cla:e.CLA,ins:e.INS,p1:e.P1,p2:3}).addBufferToData(s).build();expect(t.getRawApdu()).toEqual(n.getRawApdu())}),it("sets p2 correctly for the final chunk after extends (EXTEND)",()=>{const t=new e.SignOffChainMessageCommand({chunkedData:s,extend:!0,more:!1}).getApdu(),n=new a.ApduBuilder({cla:e.CLA,ins:e.INS,p1:e.P1,p2:1}).addBufferToData(s).build();expect(t.getRawApdu()).toEqual(n.getRawApdu())})}),describe("parseResponse()",()=>{it("returns raw 64-byte signature on the last chunk",()=>{const d=new e.SignOffChainMessageCommand({chunkedData:s,extend:!0,more:!1}),t=new Uint8Array(c).fill(66),n=d.parseResponse(new a.ApduResponse({data:t,statusCode:new Uint8Array([144,0])}));expect((0,a.isSuccessCommandResult)(n)).toBe(!0),(0,a.isSuccessCommandResult)(n)&&expect(n.data).toEqual(t)}),it("returns empty data for intermediate chunks (no signature yet)",()=>{const t=new e.SignOffChainMessageCommand({chunkedData:s,extend:!0,more:!0}).parseResponse(new a.ApduResponse({data:new Uint8Array(0),statusCode:new Uint8Array([144,0])}));expect((0,a.isSuccessCommandResult)(t)).toBe(!0),(0,a.isSuccessCommandResult)(t)&&expect(t.data).toEqual(new Uint8Array(0))}),it("returns empty data if signature is present but not 64 bytes",()=>{const d=new e.SignOffChainMessageCommand({chunkedData:s,extend:!0,more:!1}),t=new Uint8Array(c-1).fill(153),n=d.parseResponse(new a.ApduResponse({data:t,statusCode:new Uint8Array([144,0])}));expect((0,a.isSuccessCommandResult)(n)).toBe(!0),(0,a.isSuccessCommandResult)(n)&&expect(n.data).toEqual(new Uint8Array(0))})})});
2
2
  //# sourceMappingURL=SignOffChainMessageCommand.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/command/SignOffChainMessageCommand.test.ts"],
4
- "sourcesContent": ["import {\n ApduBuilder,\n ApduResponse,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { SignOffChainMessageCommand } from \"./SignOffChainMessageCommand\";\n\ndescribe(\"SignOffChainMessageCommand\", () => {\n let command: SignOffChainMessageCommand;\n const MESSAGE = new Uint8Array(\n Buffer.from(\"Solana SignOffChainMessage\", \"utf-8\"),\n );\n const SIGNATURE_LENGTH = 64;\n\n beforeEach(() => {\n command = new SignOffChainMessageCommand({\n message: MESSAGE,\n });\n vi.clearAllMocks();\n vi.importActual(\"@ledgerhq/device-management-kit\");\n });\n\n describe(\"getApdu\", () => {\n it(\"should return the correct APDU\", () => {\n const apdu = command.getApdu();\n\n const expectedApdu = new ApduBuilder({\n cla: 0xe0,\n ins: 0x07,\n p1: 0x01,\n p2: 0x00,\n })\n .addBufferToData(MESSAGE)\n .build();\n\n expect(apdu.getRawApdu()).toEqual(expectedApdu.getRawApdu());\n });\n });\n\n describe(\"parseResponse\", () => {\n it(\"should parse the response correctly\", () => {\n const signature = new Uint8Array(SIGNATURE_LENGTH).fill(0x01);\n const parsed = command.parseResponse(\n new ApduResponse({\n data: signature,\n statusCode: new Uint8Array([0x90, 0x00]),\n }),\n );\n\n expect(isSuccessCommandResult(parsed)).toBe(true);\n if (isSuccessCommandResult(parsed)) {\n expect(parsed.data).toEqual(signature);\n } else {\n assert.fail(\"Expected success result\");\n }\n });\n\n describe(\"error handling\", () => {\n it(\"should return error if response is not success\", () => {\n const result = command.parseResponse(\n new ApduResponse({\n statusCode: new Uint8Array([0x6a, 0x82]),\n data: new Uint8Array(0),\n }),\n );\n\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n expect(result.error).toEqual(\n expect.objectContaining({\n _tag: \"SolanaAppCommandError\",\n errorCode: \"6a82\",\n message: \"Invalid off-chain message format\",\n }),\n );\n } else {\n assert.fail(\"Expected error\");\n }\n });\n\n it(\"should return error if signature is missing or incomplete\", () => {\n const incompleteSignature = new Uint8Array(SIGNATURE_LENGTH - 1).fill(\n 0x01,\n );\n const result = command.parseResponse(\n new ApduResponse({\n data: incompleteSignature,\n statusCode: new Uint8Array([0x90, 0x00]),\n }),\n );\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n if (\n typeof result.error.originalError === \"object\" &&\n result.error.originalError !== null &&\n \"message\" in result.error.originalError\n ) {\n expect(result.error.originalError.message).toBe(\n \"Signature extraction failed\",\n );\n }\n } else {\n assert.fail(\"Expected error\");\n }\n });\n });\n });\n});\n"],
5
- "mappings": "aAAA,IAAAA,EAIO,2CAEPC,EAA2C,wCAE3C,SAAS,6BAA8B,IAAM,CAC3C,IAAIC,EACJ,MAAMC,EAAU,IAAI,WAClB,OAAO,KAAK,6BAA8B,OAAO,CACnD,EACMC,EAAmB,GAEzB,WAAW,IAAM,CACfF,EAAU,IAAI,6BAA2B,CACvC,QAASC,CACX,CAAC,EACD,GAAG,cAAc,EACjB,GAAG,aAAa,iCAAiC,CACnD,CAAC,EAED,SAAS,UAAW,IAAM,CACxB,GAAG,iCAAkC,IAAM,CACzC,MAAME,EAAOH,EAAQ,QAAQ,EAEvBI,EAAe,IAAI,cAAY,CACnC,IAAK,IACL,IAAK,EACL,GAAI,EACJ,GAAI,CACN,CAAC,EACE,gBAAgBH,CAAO,EACvB,MAAM,EAET,OAAOE,EAAK,WAAW,CAAC,EAAE,QAAQC,EAAa,WAAW,CAAC,CAC7D,CAAC,CACH,CAAC,EAED,SAAS,gBAAiB,IAAM,CAC9B,GAAG,sCAAuC,IAAM,CAC9C,MAAMC,EAAY,IAAI,WAAWH,CAAgB,EAAE,KAAK,CAAI,EACtDI,EAASN,EAAQ,cACrB,IAAI,eAAa,CACf,KAAMK,EACN,WAAY,IAAI,WAAW,CAAC,IAAM,CAAI,CAAC,CACzC,CAAC,CACH,EAEA,UAAO,0BAAuBC,CAAM,CAAC,EAAE,KAAK,EAAI,KAC5C,0BAAuBA,CAAM,EAC/B,OAAOA,EAAO,IAAI,EAAE,QAAQD,CAAS,EAErC,OAAO,KAAK,yBAAyB,CAEzC,CAAC,EAED,SAAS,iBAAkB,IAAM,CAC/B,GAAG,iDAAkD,IAAM,CACzD,MAAME,EAASP,EAAQ,cACrB,IAAI,eAAa,CACf,WAAY,IAAI,WAAW,CAAC,IAAM,GAAI,CAAC,EACvC,KAAM,IAAI,WAAW,CAAC,CACxB,CAAC,CACH,EAEA,UAAO,0BAAuBO,CAAM,CAAC,EAAE,KAAK,EAAK,KAC5C,0BAAuBA,CAAM,EAShC,OAAO,KAAK,gBAAgB,EAR5B,OAAOA,EAAO,KAAK,EAAE,QACnB,OAAO,iBAAiB,CACtB,KAAM,wBACN,UAAW,OACX,QAAS,kCACX,CAAC,CACH,CAIJ,CAAC,EAED,GAAG,4DAA6D,IAAM,CACpE,MAAMC,EAAsB,IAAI,WAAWN,EAAmB,CAAC,EAAE,KAC/D,CACF,EACMK,EAASP,EAAQ,cACrB,IAAI,eAAa,CACf,KAAMQ,EACN,WAAY,IAAI,WAAW,CAAC,IAAM,CAAI,CAAC,CACzC,CAAC,CACH,EACA,UAAO,0BAAuBD,CAAM,CAAC,EAAE,KAAK,EAAK,KAC5C,0BAAuBA,CAAM,EAWhC,OAAO,KAAK,gBAAgB,EAT1B,OAAOA,EAAO,MAAM,eAAkB,UACtCA,EAAO,MAAM,gBAAkB,MAC/B,YAAaA,EAAO,MAAM,eAE1B,OAAOA,EAAO,MAAM,cAAc,OAAO,EAAE,KACzC,6BACF,CAKN,CAAC,CACH,CAAC,CACH,CAAC,CACH,CAAC",
6
- "names": ["import_device_management_kit", "import_SignOffChainMessageCommand", "command", "MESSAGE", "SIGNATURE_LENGTH", "apdu", "expectedApdu", "signature", "parsed", "result", "incompleteSignature"]
4
+ "sourcesContent": ["import {\n ApduBuilder,\n ApduResponse,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport {\n CLA,\n INS,\n P1,\n SignOffChainMessageCommand,\n} from \"./SignOffChainMessageCommand\";\n\ndescribe(\"SignOffChainMessageCommand\", () => {\n const MESSAGE = new TextEncoder().encode(\"Solana SignOffChainMessage\");\n const SIGNATURE_LENGTH = 64;\n\n describe(\"name\", () => {\n it(\"should be 'signOffChainMessage'\", () => {\n const command = new SignOffChainMessageCommand({\n chunkedData: MESSAGE,\n extend: false,\n more: false,\n });\n expect(command.name).toBe(\"signOffChainMessage\");\n });\n });\n\n describe(\"getApdu()\", () => {\n it(\"builds APDU for a single (final) chunk (p2=INIT)\", () => {\n const cmd = new SignOffChainMessageCommand({\n chunkedData: MESSAGE,\n extend: false,\n more: false,\n });\n\n const apdu = cmd.getApdu();\n\n const expected = new ApduBuilder({\n cla: CLA,\n ins: INS,\n p1: P1,\n p2: 0x00, // INIT only\n })\n .addBufferToData(MESSAGE)\n .build();\n\n expect(apdu.getRawApdu()).toEqual(expected.getRawApdu());\n });\n\n it(\"sets p2 correctly for first of many chunks (INIT|MORE)\", () => {\n const cmd = new SignOffChainMessageCommand({\n chunkedData: MESSAGE,\n extend: false,\n more: true,\n });\n\n const apdu = cmd.getApdu();\n\n const expected = new ApduBuilder({\n cla: CLA,\n ins: INS,\n p1: P1,\n p2: 0x02, // INIT|MORE\n })\n .addBufferToData(MESSAGE)\n .build();\n\n expect(apdu.getRawApdu()).toEqual(expected.getRawApdu());\n });\n\n it(\"sets p2 correctly for middle chunks (EXTEND|MORE)\", () => {\n const cmd = new SignOffChainMessageCommand({\n chunkedData: MESSAGE,\n extend: true,\n more: true,\n });\n\n const apdu = cmd.getApdu();\n\n const expected = new ApduBuilder({\n cla: CLA,\n ins: INS,\n p1: P1,\n p2: 0x03, // EXTEND|MORE\n })\n .addBufferToData(MESSAGE)\n .build();\n\n expect(apdu.getRawApdu()).toEqual(expected.getRawApdu());\n });\n\n it(\"sets p2 correctly for the final chunk after extends (EXTEND)\", () => {\n const cmd = new SignOffChainMessageCommand({\n chunkedData: MESSAGE,\n extend: true,\n more: false,\n });\n\n const apdu = cmd.getApdu();\n\n const expected = new ApduBuilder({\n cla: CLA,\n ins: INS,\n p1: P1,\n p2: 0x01, // EXTEND only\n })\n .addBufferToData(MESSAGE)\n .build();\n\n expect(apdu.getRawApdu()).toEqual(expected.getRawApdu());\n });\n });\n\n describe(\"parseResponse()\", () => {\n it(\"returns raw 64-byte signature on the last chunk\", () => {\n const cmd = new SignOffChainMessageCommand({\n chunkedData: MESSAGE,\n extend: true,\n more: false,\n });\n\n const signature = new Uint8Array(SIGNATURE_LENGTH).fill(0x42);\n\n const parsed = cmd.parseResponse(\n new ApduResponse({\n data: signature,\n statusCode: new Uint8Array([0x90, 0x00]),\n }),\n );\n\n expect(isSuccessCommandResult(parsed)).toBe(true);\n if (isSuccessCommandResult(parsed)) {\n expect(parsed.data).toEqual(signature);\n }\n });\n\n it(\"returns empty data for intermediate chunks (no signature yet)\", () => {\n const cmd = new SignOffChainMessageCommand({\n chunkedData: MESSAGE,\n extend: true,\n more: true,\n });\n\n const parsed = cmd.parseResponse(\n new ApduResponse({\n data: new Uint8Array(0), // device returns no data mid-stream\n statusCode: new Uint8Array([0x90, 0x00]),\n }),\n );\n\n expect(isSuccessCommandResult(parsed)).toBe(true);\n if (isSuccessCommandResult(parsed)) {\n expect(parsed.data).toEqual(new Uint8Array(0));\n }\n });\n\n it(\"returns empty data if signature is present but not 64 bytes\", () => {\n const cmd = new SignOffChainMessageCommand({\n chunkedData: MESSAGE,\n extend: true,\n more: false,\n });\n\n const shortSig = new Uint8Array(SIGNATURE_LENGTH - 1).fill(0x99);\n\n const parsed = cmd.parseResponse(\n new ApduResponse({\n data: shortSig,\n statusCode: new Uint8Array([0x90, 0x00]),\n }),\n );\n\n expect(isSuccessCommandResult(parsed)).toBe(true);\n if (isSuccessCommandResult(parsed)) {\n expect(parsed.data).toEqual(new Uint8Array(0));\n }\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["import_device_management_kit", "import_SignOffChainMessageCommand", "MESSAGE", "SIGNATURE_LENGTH", "command", "apdu", "expected", "cmd", "signature", "parsed", "shortSig"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var p=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var u=Object.prototype.hasOwnProperty;var A=(o,r)=>{for(var e in r)p(o,e,{get:r[e],enumerable:!0})},c=(o,r,e,t)=>{if(r&&typeof r=="object"||typeof r=="function")for(let a of g(r))!u.call(o,a)&&a!==e&&p(o,a,{get:()=>r[a],enumerable:!(t=l(r,a))||t.enumerable});return o};var S=o=>c(p({},"__esModule",{value:!0}),o);var R={};A(R,{SignTransactionCommand:()=>C});module.exports=S(R);var n=require("@ledgerhq/device-management-kit"),d=require("@ledgerhq/signer-utils"),s=require("purify-ts"),i=require("./utils/SolanaApplicationErrors");const y=64;class C{errorHelper=new d.CommandErrorHelper(i.SOLANA_APP_ERRORS,i.SolanaAppCommandErrorFactory);args;constructor(r){this.args=r}getApdu(){const{more:r,extend:e,serializedTransaction:t}=this.args;let a=0;r&&(a|=2),e&&(a|=1);const m={cla:224,ins:6,p1:1,p2:a};return new n.ApduBuilder(m).addBufferToData(t).build()}parseResponse(r){return s.Maybe.fromNullable(this.errorHelper.getError(r)).orDefaultLazy(()=>{const e=new n.ApduParser(r);if(e.getUnparsedRemainingLength()===0)return(0,n.CommandResultFactory)({data:s.Nothing});const t=e.extractFieldByLength(y);return t?(0,n.CommandResultFactory)({data:(0,s.Just)(t)}):(0,n.CommandResultFactory)({error:new n.InvalidStatusWordError("Signature is missing")})})}}0&&(module.exports={SignTransactionCommand});
1
+ "use strict";var m=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var A=Object.prototype.hasOwnProperty;var c=(a,r)=>{for(var e in r)m(a,e,{get:r[e],enumerable:!0})},S=(a,r,e,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let t of y(r))!A.call(a,t)&&t!==e&&m(a,t,{get:()=>r[t],enumerable:!(o=g(r,t))||o.enumerable});return a};var C=a=>S(m({},"__esModule",{value:!0}),a);var R={};c(R,{SignTransactionCommand:()=>f});module.exports=C(R);var n=require("@ledgerhq/device-management-kit"),d=require("@ledgerhq/signer-utils"),s=require("purify-ts"),u=require("../../../api/model/TransactionResolutionContext"),p=require("./utils/SolanaApplicationErrors");const T=64;class f{name="signTransaction";errorHelper=new d.CommandErrorHelper(p.SOLANA_APP_ERRORS,p.SolanaAppCommandErrorFactory);args;constructor(r){this.args=r}getApdu(){const{more:r,extend:e,serializedTransaction:o,userInputType:t}=this.args;let i=0;r&&(i|=2),e&&(i|=1),t===u.UserInputType.ata&&(i|=8);const l={cla:224,ins:6,p1:1,p2:i};return new n.ApduBuilder(l).addBufferToData(o).build()}parseResponse(r){return s.Maybe.fromNullable(this.errorHelper.getError(r)).orDefaultLazy(()=>{const e=new n.ApduParser(r);if(e.getUnparsedRemainingLength()===0)return(0,n.CommandResultFactory)({data:s.Nothing});const o=e.extractFieldByLength(T);return o?(0,n.CommandResultFactory)({data:(0,s.Just)(o)}):(0,n.CommandResultFactory)({error:new n.InvalidStatusWordError("Signature is missing")})})}}0&&(module.exports={SignTransactionCommand});
2
2
  //# sourceMappingURL=SignTransactionCommand.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/command/SignTransactionCommand.ts"],
4
- "sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n type ApduBuilderArgs,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\nimport { Just, Maybe, Nothing } from \"purify-ts\";\n\nimport { type Signature } from \"@api/model/Signature\";\n\nimport {\n SOLANA_APP_ERRORS,\n SolanaAppCommandErrorFactory,\n type SolanaAppErrorCodes,\n} from \"./utils/SolanaApplicationErrors\";\n\nconst SIGNATURE_LENGTH = 64;\n\nexport type SignTransactionCommandResponse = Maybe<Signature>;\nexport type SignTransactionCommandArgs = {\n /**\n * Chunked serialized transaction\n */\n readonly serializedTransaction: Uint8Array;\n readonly more: boolean;\n readonly extend: boolean;\n};\n\nexport class SignTransactionCommand\n implements\n Command<\n SignTransactionCommandResponse,\n SignTransactionCommandArgs,\n SolanaAppErrorCodes\n >\n{\n private readonly errorHelper = new CommandErrorHelper<\n SignTransactionCommandResponse,\n SolanaAppErrorCodes\n >(SOLANA_APP_ERRORS, SolanaAppCommandErrorFactory);\n\n args: SignTransactionCommandArgs;\n\n constructor(args: SignTransactionCommandArgs) {\n this.args = args;\n }\n\n getApdu(): Apdu {\n const { more, extend, serializedTransaction } = this.args;\n let p2 = 0x00;\n if (more) p2 |= 0x02;\n if (extend) p2 |= 0x01;\n\n const signTransactionArgs: ApduBuilderArgs = {\n cla: 0xe0,\n ins: 0x06,\n p1: 0x01,\n p2,\n };\n\n return new ApduBuilder(signTransactionArgs)\n .addBufferToData(serializedTransaction)\n .build();\n }\n\n parseResponse(\n response: ApduResponse,\n ): CommandResult<SignTransactionCommandResponse, SolanaAppErrorCodes> {\n return Maybe.fromNullable(\n this.errorHelper.getError(response),\n ).orDefaultLazy(() => {\n const parser = new ApduParser(response);\n\n if (parser.getUnparsedRemainingLength() === 0) {\n return CommandResultFactory({\n data: Nothing,\n });\n }\n\n const signature = parser.extractFieldByLength(SIGNATURE_LENGTH);\n if (!signature) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Signature is missing\"),\n });\n }\n\n return CommandResultFactory({\n data: Just(signature),\n });\n });\n }\n}\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,4BAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAUO,2CACPC,EAAmC,kCACnCC,EAAqC,qBAIrCC,EAIO,2CAEP,MAAMC,EAAmB,GAYlB,MAAMN,CAOb,CACmB,YAAc,IAAI,qBAGjC,oBAAmB,8BAA4B,EAEjD,KAEA,YAAYO,EAAkC,CAC5C,KAAK,KAAOA,CACd,CAEA,SAAgB,CACd,KAAM,CAAE,KAAAC,EAAM,OAAAC,EAAQ,sBAAAC,CAAsB,EAAI,KAAK,KACrD,IAAIC,EAAK,EACLH,IAAMG,GAAM,GACZF,IAAQE,GAAM,GAElB,MAAMC,EAAuC,CAC3C,IAAK,IACL,IAAK,EACL,GAAI,EACJ,GAAAD,CACF,EAEA,OAAO,IAAI,cAAYC,CAAmB,EACvC,gBAAgBF,CAAqB,EACrC,MAAM,CACX,CAEA,cACEG,EACoE,CACpE,OAAO,QAAM,aACX,KAAK,YAAY,SAASA,CAAQ,CACpC,EAAE,cAAc,IAAM,CACpB,MAAMC,EAAS,IAAI,aAAWD,CAAQ,EAEtC,GAAIC,EAAO,2BAA2B,IAAM,EAC1C,SAAO,wBAAqB,CAC1B,KAAM,SACR,CAAC,EAGH,MAAMC,EAAYD,EAAO,qBAAqBR,CAAgB,EAC9D,OAAKS,KAME,wBAAqB,CAC1B,QAAM,QAAKA,CAAS,CACtB,CAAC,KAPQ,wBAAqB,CAC1B,MAAO,IAAI,yBAAuB,sBAAsB,CAC1D,CAAC,CAML,CAAC,CACH,CACF",
6
- "names": ["SignTransactionCommand_exports", "__export", "SignTransactionCommand", "__toCommonJS", "import_device_management_kit", "import_signer_utils", "import_purify_ts", "import_SolanaApplicationErrors", "SIGNATURE_LENGTH", "args", "more", "extend", "serializedTransaction", "p2", "signTransactionArgs", "response", "parser", "signature"]
4
+ "sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n type ApduBuilderArgs,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\nimport { Just, Maybe, Nothing } from \"purify-ts\";\n\nimport { type Signature } from \"@api/model/Signature\";\nimport { UserInputType } from \"@api/model/TransactionResolutionContext\";\n\nimport {\n SOLANA_APP_ERRORS,\n SolanaAppCommandErrorFactory,\n type SolanaAppErrorCodes,\n} from \"./utils/SolanaApplicationErrors\";\n\nconst SIGNATURE_LENGTH = 64;\n\nexport type SignTransactionCommandResponse = Maybe<Signature>;\nexport type SignTransactionCommandArgs = {\n /**\n * Chunked serialized transaction\n */\n readonly serializedTransaction: Uint8Array;\n readonly more: boolean;\n readonly extend: boolean;\n readonly userInputType?: UserInputType;\n};\n\nexport class SignTransactionCommand\n implements\n Command<\n SignTransactionCommandResponse,\n SignTransactionCommandArgs,\n SolanaAppErrorCodes\n >\n{\n readonly name = \"signTransaction\";\n private readonly errorHelper = new CommandErrorHelper<\n SignTransactionCommandResponse,\n SolanaAppErrorCodes\n >(SOLANA_APP_ERRORS, SolanaAppCommandErrorFactory);\n\n args: SignTransactionCommandArgs;\n\n constructor(args: SignTransactionCommandArgs) {\n this.args = args;\n }\n\n getApdu(): Apdu {\n const { more, extend, serializedTransaction, userInputType } = this.args;\n let p2 = 0x00;\n if (more) p2 |= 0x02;\n if (extend) p2 |= 0x01;\n if (userInputType === UserInputType.ata) p2 |= 0x08;\n\n const signTransactionArgs: ApduBuilderArgs = {\n cla: 0xe0,\n ins: 0x06,\n p1: 0x01,\n p2,\n };\n\n return new ApduBuilder(signTransactionArgs)\n .addBufferToData(serializedTransaction)\n .build();\n }\n\n parseResponse(\n response: ApduResponse,\n ): CommandResult<SignTransactionCommandResponse, SolanaAppErrorCodes> {\n return Maybe.fromNullable(\n this.errorHelper.getError(response),\n ).orDefaultLazy(() => {\n const parser = new ApduParser(response);\n\n if (parser.getUnparsedRemainingLength() === 0) {\n return CommandResultFactory({\n data: Nothing,\n });\n }\n\n const signature = parser.extractFieldByLength(SIGNATURE_LENGTH);\n if (!signature) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Signature is missing\"),\n });\n }\n\n return CommandResultFactory({\n data: Just(signature),\n });\n });\n }\n}\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,4BAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAUO,2CACPC,EAAmC,kCACnCC,EAAqC,qBAGrCC,EAA8B,mDAE9BC,EAIO,2CAEP,MAAMC,EAAmB,GAalB,MAAMP,CAOb,CACW,KAAO,kBACC,YAAc,IAAI,qBAGjC,oBAAmB,8BAA4B,EAEjD,KAEA,YAAYQ,EAAkC,CAC5C,KAAK,KAAOA,CACd,CAEA,SAAgB,CACd,KAAM,CAAE,KAAAC,EAAM,OAAAC,EAAQ,sBAAAC,EAAuB,cAAAC,CAAc,EAAI,KAAK,KACpE,IAAIC,EAAK,EACLJ,IAAMI,GAAM,GACZH,IAAQG,GAAM,GACdD,IAAkB,gBAAc,MAAKC,GAAM,GAE/C,MAAMC,EAAuC,CAC3C,IAAK,IACL,IAAK,EACL,GAAI,EACJ,GAAAD,CACF,EAEA,OAAO,IAAI,cAAYC,CAAmB,EACvC,gBAAgBH,CAAqB,EACrC,MAAM,CACX,CAEA,cACEI,EACoE,CACpE,OAAO,QAAM,aACX,KAAK,YAAY,SAASA,CAAQ,CACpC,EAAE,cAAc,IAAM,CACpB,MAAMC,EAAS,IAAI,aAAWD,CAAQ,EAEtC,GAAIC,EAAO,2BAA2B,IAAM,EAC1C,SAAO,wBAAqB,CAC1B,KAAM,SACR,CAAC,EAGH,MAAMC,EAAYD,EAAO,qBAAqBT,CAAgB,EAC9D,OAAKU,KAME,wBAAqB,CAC1B,QAAM,QAAKA,CAAS,CACtB,CAAC,KAPQ,wBAAqB,CAC1B,MAAO,IAAI,yBAAuB,sBAAsB,CAC1D,CAAC,CAML,CAAC,CACH,CACF",
6
+ "names": ["SignTransactionCommand_exports", "__export", "SignTransactionCommand", "__toCommonJS", "import_device_management_kit", "import_signer_utils", "import_purify_ts", "import_TransactionResolutionContext", "import_SolanaApplicationErrors", "SIGNATURE_LENGTH", "args", "more", "extend", "serializedTransaction", "userInputType", "p2", "signTransactionArgs", "response", "parser", "signature"]
7
7
  }