@ledgerhq/device-signer-kit-solana 1.0.0
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.
- package/LICENSE.MD +202 -0
- package/README.md +513 -0
- package/lib/cjs/api/SignerSolana.js +2 -0
- package/lib/cjs/api/SignerSolana.js.map +7 -0
- package/lib/cjs/api/SignerSolanaBuilder.js +2 -0
- package/lib/cjs/api/SignerSolanaBuilder.js.map +7 -0
- package/lib/cjs/api/app-binder/GetAddressDeviceActionTypes.js +2 -0
- package/lib/cjs/api/app-binder/GetAddressDeviceActionTypes.js.map +7 -0
- package/lib/cjs/api/app-binder/GetAppConfigurationDeviceActionTypes.js +2 -0
- package/lib/cjs/api/app-binder/GetAppConfigurationDeviceActionTypes.js.map +7 -0
- package/lib/cjs/api/app-binder/SignMessageDeviceActionTypes.js +2 -0
- package/lib/cjs/api/app-binder/SignMessageDeviceActionTypes.js.map +7 -0
- package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js +2 -0
- package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js.map +7 -0
- package/lib/cjs/api/index.js +2 -0
- package/lib/cjs/api/index.js.map +7 -0
- package/lib/cjs/api/model/AddressOption.js +2 -0
- package/lib/cjs/api/model/AddressOption.js.map +7 -0
- package/lib/cjs/api/model/AppConfiguration.js +2 -0
- package/lib/cjs/api/model/AppConfiguration.js.map +7 -0
- package/lib/cjs/api/model/PublicKey.js +2 -0
- package/lib/cjs/api/model/PublicKey.js.map +7 -0
- package/lib/cjs/api/model/PublicKeyDisplayMode.js +2 -0
- package/lib/cjs/api/model/PublicKeyDisplayMode.js.map +7 -0
- package/lib/cjs/api/model/Signature.js +2 -0
- package/lib/cjs/api/model/Signature.js.map +7 -0
- package/lib/cjs/api/model/Transaction.js +2 -0
- package/lib/cjs/api/model/Transaction.js.map +7 -0
- package/lib/cjs/api/model/TransactionOptions.js +2 -0
- package/lib/cjs/api/model/TransactionOptions.js.map +7 -0
- package/lib/cjs/index.js +2 -0
- package/lib/cjs/index.js.map +7 -0
- package/lib/cjs/internal/DefaultSignerSolana.js +2 -0
- package/lib/cjs/internal/DefaultSignerSolana.js.map +7 -0
- package/lib/cjs/internal/DefaultSignerSolana.test.js +2 -0
- package/lib/cjs/internal/DefaultSignerSolana.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/SolanaAppBinder.js +2 -0
- package/lib/cjs/internal/app-binder/SolanaAppBinder.js.map +7 -0
- package/lib/cjs/internal/app-binder/SolanaAppBinder.test.js +2 -0
- package/lib/cjs/internal/app-binder/SolanaAppBinder.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/command/GetAppConfigurationCommand.js +2 -0
- package/lib/cjs/internal/app-binder/command/GetAppConfigurationCommand.js.map +7 -0
- package/lib/cjs/internal/app-binder/command/GetAppConfigurationCommand.test.js +2 -0
- package/lib/cjs/internal/app-binder/command/GetAppConfigurationCommand.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/command/GetPubKeyCommand.js +2 -0
- package/lib/cjs/internal/app-binder/command/GetPubKeyCommand.js.map +7 -0
- package/lib/cjs/internal/app-binder/command/GetPubKeyCommand.test.js +2 -0
- package/lib/cjs/internal/app-binder/command/GetPubKeyCommand.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/command/SignOffChainMessageCommand.js +2 -0
- package/lib/cjs/internal/app-binder/command/SignOffChainMessageCommand.js.map +7 -0
- package/lib/cjs/internal/app-binder/command/SignOffChainMessageCommand.test.js +2 -0
- package/lib/cjs/internal/app-binder/command/SignOffChainMessageCommand.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/command/SignTransactionCommand.js +2 -0
- package/lib/cjs/internal/app-binder/command/SignTransactionCommand.js.map +7 -0
- package/lib/cjs/internal/app-binder/command/SignTransactionCommand.test.js +2 -0
- package/lib/cjs/internal/app-binder/command/SignTransactionCommand.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/command/utils/solanaAppError.test.js +2 -0
- package/lib/cjs/internal/app-binder/command/utils/solanaAppError.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/command/utils/solanaAppErrors.js +2 -0
- package/lib/cjs/internal/app-binder/command/utils/solanaAppErrors.js.map +7 -0
- package/lib/cjs/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.js +2 -0
- package/lib/cjs/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.js.map +7 -0
- package/lib/cjs/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.test.js +2 -0
- package/lib/cjs/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.js +2 -0
- package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.js.map +7 -0
- package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.test.js +2 -0
- package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/device-action/__test-utils__/makeInternalApi.js +2 -0
- package/lib/cjs/internal/app-binder/device-action/__test-utils__/makeInternalApi.js.map +7 -0
- package/lib/cjs/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.js +2 -0
- package/lib/cjs/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.js.map +7 -0
- package/lib/cjs/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.js +2 -0
- package/lib/cjs/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.js.map +7 -0
- package/lib/cjs/internal/app-binder/di/appBinderModule.js +2 -0
- package/lib/cjs/internal/app-binder/di/appBinderModule.js.map +7 -0
- package/lib/cjs/internal/app-binder/di/appBinderModule.test.js +2 -0
- package/lib/cjs/internal/app-binder/di/appBinderModule.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/di/appBinderTypes.js +2 -0
- package/lib/cjs/internal/app-binder/di/appBinderTypes.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/SendCommandInChunksTask.js +2 -0
- package/lib/cjs/internal/app-binder/task/SendCommandInChunksTask.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/SendSignDataTask.js +2 -0
- package/lib/cjs/internal/app-binder/task/SendSignDataTask.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/SendSignDataTask.test.js +2 -0
- package/lib/cjs/internal/app-binder/task/SendSignDataTask.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/SendSignMessageTask.js +2 -0
- package/lib/cjs/internal/app-binder/task/SendSignMessageTask.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/SendSignMessageTask.test.js +2 -0
- package/lib/cjs/internal/app-binder/task/SendSignMessageTask.test.js.map +7 -0
- package/lib/cjs/internal/di.js +2 -0
- package/lib/cjs/internal/di.js.map +7 -0
- package/lib/cjs/internal/externalTypes.js +2 -0
- package/lib/cjs/internal/externalTypes.js.map +7 -0
- package/lib/cjs/internal/use-cases/address/GetAddressUseCase.js +2 -0
- package/lib/cjs/internal/use-cases/address/GetAddressUseCase.js.map +7 -0
- package/lib/cjs/internal/use-cases/address/GetAddressUseCase.test.js +2 -0
- package/lib/cjs/internal/use-cases/address/GetAddressUseCase.test.js.map +7 -0
- package/lib/cjs/internal/use-cases/app-configuration/GetAppConfiguration.test.js +2 -0
- package/lib/cjs/internal/use-cases/app-configuration/GetAppConfiguration.test.js.map +7 -0
- package/lib/cjs/internal/use-cases/app-configuration/GetAppConfigurationUseCase.js +2 -0
- package/lib/cjs/internal/use-cases/app-configuration/GetAppConfigurationUseCase.js.map +7 -0
- package/lib/cjs/internal/use-cases/di/useCasesModule.js +2 -0
- package/lib/cjs/internal/use-cases/di/useCasesModule.js.map +7 -0
- package/lib/cjs/internal/use-cases/di/useCasesModule.test.js +2 -0
- package/lib/cjs/internal/use-cases/di/useCasesModule.test.js.map +7 -0
- package/lib/cjs/internal/use-cases/di/useCasesTypes.js +2 -0
- package/lib/cjs/internal/use-cases/di/useCasesTypes.js.map +7 -0
- package/lib/cjs/internal/use-cases/message/SignMessageUseCase.js +2 -0
- package/lib/cjs/internal/use-cases/message/SignMessageUseCase.js.map +7 -0
- package/lib/cjs/internal/use-cases/message/SignMessageUseCase.test.js +2 -0
- package/lib/cjs/internal/use-cases/message/SignMessageUseCase.test.js.map +7 -0
- package/lib/cjs/internal/use-cases/transaction/SignTransactionUseCase.js +2 -0
- package/lib/cjs/internal/use-cases/transaction/SignTransactionUseCase.js.map +7 -0
- package/lib/cjs/internal/use-cases/transaction/SignTransactionUseCase.test.js +2 -0
- package/lib/cjs/internal/use-cases/transaction/SignTransactionUseCase.test.js.map +7 -0
- package/lib/cjs/package.json +58 -0
- package/lib/esm/api/SignerSolana.js +1 -0
- package/lib/esm/api/SignerSolana.js.map +7 -0
- package/lib/esm/api/SignerSolanaBuilder.js +2 -0
- package/lib/esm/api/SignerSolanaBuilder.js.map +7 -0
- package/lib/esm/api/app-binder/GetAddressDeviceActionTypes.js +1 -0
- package/lib/esm/api/app-binder/GetAddressDeviceActionTypes.js.map +7 -0
- package/lib/esm/api/app-binder/GetAppConfigurationDeviceActionTypes.js +1 -0
- package/lib/esm/api/app-binder/GetAppConfigurationDeviceActionTypes.js.map +7 -0
- package/lib/esm/api/app-binder/SignMessageDeviceActionTypes.js +1 -0
- package/lib/esm/api/app-binder/SignMessageDeviceActionTypes.js.map +7 -0
- package/lib/esm/api/app-binder/SignTransactionDeviceActionTypes.js +1 -0
- package/lib/esm/api/app-binder/SignTransactionDeviceActionTypes.js.map +7 -0
- package/lib/esm/api/index.js +2 -0
- package/lib/esm/api/index.js.map +7 -0
- package/lib/esm/api/model/AddressOption.js +1 -0
- package/lib/esm/api/model/AddressOption.js.map +7 -0
- package/lib/esm/api/model/AppConfiguration.js +1 -0
- package/lib/esm/api/model/AppConfiguration.js.map +7 -0
- package/lib/esm/api/model/PublicKey.js +1 -0
- package/lib/esm/api/model/PublicKey.js.map +7 -0
- package/lib/esm/api/model/PublicKeyDisplayMode.js +2 -0
- package/lib/esm/api/model/PublicKeyDisplayMode.js.map +7 -0
- package/lib/esm/api/model/Signature.js +1 -0
- package/lib/esm/api/model/Signature.js.map +7 -0
- package/lib/esm/api/model/Transaction.js +1 -0
- package/lib/esm/api/model/Transaction.js.map +7 -0
- package/lib/esm/api/model/TransactionOptions.js +1 -0
- package/lib/esm/api/model/TransactionOptions.js.map +7 -0
- package/lib/esm/index.js +2 -0
- package/lib/esm/index.js.map +7 -0
- package/lib/esm/internal/DefaultSignerSolana.js +2 -0
- package/lib/esm/internal/DefaultSignerSolana.js.map +7 -0
- package/lib/esm/internal/DefaultSignerSolana.test.js +2 -0
- package/lib/esm/internal/DefaultSignerSolana.test.js.map +7 -0
- package/lib/esm/internal/app-binder/SolanaAppBinder.js +2 -0
- package/lib/esm/internal/app-binder/SolanaAppBinder.js.map +7 -0
- package/lib/esm/internal/app-binder/SolanaAppBinder.test.js +2 -0
- package/lib/esm/internal/app-binder/SolanaAppBinder.test.js.map +7 -0
- package/lib/esm/internal/app-binder/command/GetAppConfigurationCommand.js +2 -0
- package/lib/esm/internal/app-binder/command/GetAppConfigurationCommand.js.map +7 -0
- package/lib/esm/internal/app-binder/command/GetAppConfigurationCommand.test.js +2 -0
- package/lib/esm/internal/app-binder/command/GetAppConfigurationCommand.test.js.map +7 -0
- package/lib/esm/internal/app-binder/command/GetPubKeyCommand.js +2 -0
- package/lib/esm/internal/app-binder/command/GetPubKeyCommand.js.map +7 -0
- package/lib/esm/internal/app-binder/command/GetPubKeyCommand.test.js +2 -0
- package/lib/esm/internal/app-binder/command/GetPubKeyCommand.test.js.map +7 -0
- package/lib/esm/internal/app-binder/command/SignOffChainMessageCommand.js +2 -0
- package/lib/esm/internal/app-binder/command/SignOffChainMessageCommand.js.map +7 -0
- package/lib/esm/internal/app-binder/command/SignOffChainMessageCommand.test.js +2 -0
- package/lib/esm/internal/app-binder/command/SignOffChainMessageCommand.test.js.map +7 -0
- package/lib/esm/internal/app-binder/command/SignTransactionCommand.js +2 -0
- package/lib/esm/internal/app-binder/command/SignTransactionCommand.js.map +7 -0
- package/lib/esm/internal/app-binder/command/SignTransactionCommand.test.js +2 -0
- package/lib/esm/internal/app-binder/command/SignTransactionCommand.test.js.map +7 -0
- package/lib/esm/internal/app-binder/command/utils/solanaAppError.test.js +2 -0
- package/lib/esm/internal/app-binder/command/utils/solanaAppError.test.js.map +7 -0
- package/lib/esm/internal/app-binder/command/utils/solanaAppErrors.js +2 -0
- package/lib/esm/internal/app-binder/command/utils/solanaAppErrors.js.map +7 -0
- package/lib/esm/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.js +2 -0
- package/lib/esm/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.js.map +7 -0
- package/lib/esm/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.test.js +2 -0
- package/lib/esm/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.test.js.map +7 -0
- package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.js +2 -0
- package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.js.map +7 -0
- package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.test.js +2 -0
- package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.test.js.map +7 -0
- package/lib/esm/internal/app-binder/device-action/__test-utils__/makeInternalApi.js +2 -0
- package/lib/esm/internal/app-binder/device-action/__test-utils__/makeInternalApi.js.map +7 -0
- package/lib/esm/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.js +2 -0
- package/lib/esm/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.js.map +7 -0
- package/lib/esm/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.js +2 -0
- package/lib/esm/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.js.map +7 -0
- package/lib/esm/internal/app-binder/di/appBinderModule.js +2 -0
- package/lib/esm/internal/app-binder/di/appBinderModule.js.map +7 -0
- package/lib/esm/internal/app-binder/di/appBinderModule.test.js +2 -0
- package/lib/esm/internal/app-binder/di/appBinderModule.test.js.map +7 -0
- package/lib/esm/internal/app-binder/di/appBinderTypes.js +2 -0
- package/lib/esm/internal/app-binder/di/appBinderTypes.js.map +7 -0
- package/lib/esm/internal/app-binder/task/SendCommandInChunksTask.js +2 -0
- package/lib/esm/internal/app-binder/task/SendCommandInChunksTask.js.map +7 -0
- package/lib/esm/internal/app-binder/task/SendSignDataTask.js +2 -0
- package/lib/esm/internal/app-binder/task/SendSignDataTask.js.map +7 -0
- package/lib/esm/internal/app-binder/task/SendSignDataTask.test.js +2 -0
- package/lib/esm/internal/app-binder/task/SendSignDataTask.test.js.map +7 -0
- package/lib/esm/internal/app-binder/task/SendSignMessageTask.js +2 -0
- package/lib/esm/internal/app-binder/task/SendSignMessageTask.js.map +7 -0
- package/lib/esm/internal/app-binder/task/SendSignMessageTask.test.js +2 -0
- package/lib/esm/internal/app-binder/task/SendSignMessageTask.test.js.map +7 -0
- package/lib/esm/internal/di.js +2 -0
- package/lib/esm/internal/di.js.map +7 -0
- package/lib/esm/internal/externalTypes.js +2 -0
- package/lib/esm/internal/externalTypes.js.map +7 -0
- package/lib/esm/internal/use-cases/address/GetAddressUseCase.js +2 -0
- package/lib/esm/internal/use-cases/address/GetAddressUseCase.js.map +7 -0
- package/lib/esm/internal/use-cases/address/GetAddressUseCase.test.js +2 -0
- package/lib/esm/internal/use-cases/address/GetAddressUseCase.test.js.map +7 -0
- package/lib/esm/internal/use-cases/app-configuration/GetAppConfiguration.test.js +2 -0
- package/lib/esm/internal/use-cases/app-configuration/GetAppConfiguration.test.js.map +7 -0
- package/lib/esm/internal/use-cases/app-configuration/GetAppConfigurationUseCase.js +2 -0
- package/lib/esm/internal/use-cases/app-configuration/GetAppConfigurationUseCase.js.map +7 -0
- package/lib/esm/internal/use-cases/di/useCasesModule.js +2 -0
- package/lib/esm/internal/use-cases/di/useCasesModule.js.map +7 -0
- package/lib/esm/internal/use-cases/di/useCasesModule.test.js +2 -0
- package/lib/esm/internal/use-cases/di/useCasesModule.test.js.map +7 -0
- package/lib/esm/internal/use-cases/di/useCasesTypes.js +2 -0
- package/lib/esm/internal/use-cases/di/useCasesTypes.js.map +7 -0
- package/lib/esm/internal/use-cases/message/SignMessageUseCase.js +2 -0
- package/lib/esm/internal/use-cases/message/SignMessageUseCase.js.map +7 -0
- package/lib/esm/internal/use-cases/message/SignMessageUseCase.test.js +2 -0
- package/lib/esm/internal/use-cases/message/SignMessageUseCase.test.js.map +7 -0
- package/lib/esm/internal/use-cases/transaction/SignTransactionUseCase.js +2 -0
- package/lib/esm/internal/use-cases/transaction/SignTransactionUseCase.js.map +7 -0
- package/lib/esm/internal/use-cases/transaction/SignTransactionUseCase.test.js +2 -0
- package/lib/esm/internal/use-cases/transaction/SignTransactionUseCase.test.js.map +7 -0
- package/lib/esm/package.json +58 -0
- package/lib/types/api/SignerSolana.d.ts +14 -0
- package/lib/types/api/SignerSolana.d.ts.map +1 -0
- package/lib/types/api/SignerSolanaBuilder.d.ts +28 -0
- package/lib/types/api/SignerSolanaBuilder.d.ts.map +1 -0
- package/lib/types/api/app-binder/GetAddressDeviceActionTypes.d.ts +9 -0
- package/lib/types/api/app-binder/GetAddressDeviceActionTypes.d.ts.map +1 -0
- package/lib/types/api/app-binder/GetAppConfigurationDeviceActionTypes.d.ts +7 -0
- package/lib/types/api/app-binder/GetAppConfigurationDeviceActionTypes.d.ts.map +1 -0
- package/lib/types/api/app-binder/SignMessageDeviceActionTypes.d.ts +20 -0
- package/lib/types/api/app-binder/SignMessageDeviceActionTypes.d.ts.map +1 -0
- package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts +23 -0
- package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts.map +1 -0
- package/lib/types/api/index.d.ts +10 -0
- package/lib/types/api/index.d.ts.map +1 -0
- package/lib/types/api/model/AddressOption.d.ts +4 -0
- package/lib/types/api/model/AddressOption.d.ts.map +1 -0
- package/lib/types/api/model/AppConfiguration.d.ts +7 -0
- package/lib/types/api/model/AppConfiguration.d.ts.map +1 -0
- package/lib/types/api/model/PublicKey.d.ts +2 -0
- package/lib/types/api/model/PublicKey.d.ts.map +1 -0
- package/lib/types/api/model/PublicKeyDisplayMode.d.ts +5 -0
- package/lib/types/api/model/PublicKeyDisplayMode.d.ts.map +1 -0
- package/lib/types/api/model/Signature.d.ts +2 -0
- package/lib/types/api/model/Signature.d.ts.map +1 -0
- package/lib/types/api/model/Transaction.d.ts +2 -0
- package/lib/types/api/model/Transaction.d.ts.map +1 -0
- package/lib/types/api/model/TransactionOptions.d.ts +2 -0
- package/lib/types/api/model/TransactionOptions.d.ts.map +1 -0
- package/lib/types/index.d.ts +3 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/internal/DefaultSignerSolana.d.ts +22 -0
- package/lib/types/internal/DefaultSignerSolana.d.ts.map +1 -0
- package/lib/types/internal/DefaultSignerSolana.test.d.ts +2 -0
- package/lib/types/internal/DefaultSignerSolana.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/SolanaAppBinder.d.ts +27 -0
- package/lib/types/internal/app-binder/SolanaAppBinder.d.ts.map +1 -0
- package/lib/types/internal/app-binder/SolanaAppBinder.test.d.ts +2 -0
- package/lib/types/internal/app-binder/SolanaAppBinder.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/GetAppConfigurationCommand.d.ts +11 -0
- package/lib/types/internal/app-binder/command/GetAppConfigurationCommand.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/GetAppConfigurationCommand.test.d.ts +2 -0
- package/lib/types/internal/app-binder/command/GetAppConfigurationCommand.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/GetPubKeyCommand.d.ts +15 -0
- package/lib/types/internal/app-binder/command/GetPubKeyCommand.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/GetPubKeyCommand.test.d.ts +2 -0
- package/lib/types/internal/app-binder/command/GetPubKeyCommand.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/SignOffChainMessageCommand.d.ts +14 -0
- package/lib/types/internal/app-binder/command/SignOffChainMessageCommand.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/SignOffChainMessageCommand.test.d.ts +2 -0
- package/lib/types/internal/app-binder/command/SignOffChainMessageCommand.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/SignTransactionCommand.d.ts +19 -0
- package/lib/types/internal/app-binder/command/SignTransactionCommand.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/SignTransactionCommand.test.d.ts +2 -0
- package/lib/types/internal/app-binder/command/SignTransactionCommand.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/utils/solanaAppError.test.d.ts +2 -0
- package/lib/types/internal/app-binder/command/utils/solanaAppError.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/utils/solanaAppErrors.d.ts +8 -0
- package/lib/types/internal/app-binder/command/utils/solanaAppErrors.d.ts.map +1 -0
- package/lib/types/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.d.ts +15 -0
- package/lib/types/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.d.ts.map +1 -0
- package/lib/types/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.test.d.ts +2 -0
- package/lib/types/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/device-action/SignTransactionDeviceAction.d.ts +17 -0
- package/lib/types/internal/app-binder/device-action/SignTransactionDeviceAction.d.ts.map +1 -0
- package/lib/types/internal/app-binder/device-action/SignTransactionDeviceAction.test.d.ts +2 -0
- package/lib/types/internal/app-binder/device-action/SignTransactionDeviceAction.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/device-action/__test-utils__/makeInternalApi.d.ts +3 -0
- package/lib/types/internal/app-binder/device-action/__test-utils__/makeInternalApi.d.ts.map +1 -0
- package/lib/types/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.d.ts +2 -0
- package/lib/types/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.d.ts.map +1 -0
- package/lib/types/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.d.ts +12 -0
- package/lib/types/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.d.ts.map +1 -0
- package/lib/types/internal/app-binder/di/appBinderModule.d.ts +3 -0
- package/lib/types/internal/app-binder/di/appBinderModule.d.ts.map +1 -0
- package/lib/types/internal/app-binder/di/appBinderModule.test.d.ts +2 -0
- package/lib/types/internal/app-binder/di/appBinderModule.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/di/appBinderTypes.d.ts +4 -0
- package/lib/types/internal/app-binder/di/appBinderTypes.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/SendCommandInChunksTask.d.ts +18 -0
- package/lib/types/internal/app-binder/task/SendCommandInChunksTask.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/SendSignDataTask.d.ts +17 -0
- package/lib/types/internal/app-binder/task/SendSignDataTask.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/SendSignDataTask.test.d.ts +2 -0
- package/lib/types/internal/app-binder/task/SendSignDataTask.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/SendSignMessageTask.d.ts +15 -0
- package/lib/types/internal/app-binder/task/SendSignMessageTask.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/SendSignMessageTask.test.d.ts +2 -0
- package/lib/types/internal/app-binder/task/SendSignMessageTask.test.d.ts.map +1 -0
- package/lib/types/internal/di.d.ts +8 -0
- package/lib/types/internal/di.d.ts.map +1 -0
- package/lib/types/internal/externalTypes.d.ts +5 -0
- package/lib/types/internal/externalTypes.d.ts.map +1 -0
- package/lib/types/internal/use-cases/address/GetAddressUseCase.d.ts +9 -0
- package/lib/types/internal/use-cases/address/GetAddressUseCase.d.ts.map +1 -0
- package/lib/types/internal/use-cases/address/GetAddressUseCase.test.d.ts +2 -0
- package/lib/types/internal/use-cases/address/GetAddressUseCase.test.d.ts.map +1 -0
- package/lib/types/internal/use-cases/app-configuration/GetAppConfiguration.test.d.ts +2 -0
- package/lib/types/internal/use-cases/app-configuration/GetAppConfiguration.test.d.ts.map +1 -0
- package/lib/types/internal/use-cases/app-configuration/GetAppConfigurationUseCase.d.ts +8 -0
- package/lib/types/internal/use-cases/app-configuration/GetAppConfigurationUseCase.d.ts.map +1 -0
- package/lib/types/internal/use-cases/di/useCasesModule.d.ts +3 -0
- package/lib/types/internal/use-cases/di/useCasesModule.d.ts.map +1 -0
- package/lib/types/internal/use-cases/di/useCasesModule.test.d.ts +2 -0
- package/lib/types/internal/use-cases/di/useCasesModule.test.d.ts.map +1 -0
- package/lib/types/internal/use-cases/di/useCasesTypes.d.ts +7 -0
- package/lib/types/internal/use-cases/di/useCasesTypes.d.ts.map +1 -0
- package/lib/types/internal/use-cases/message/SignMessageUseCase.d.ts +8 -0
- package/lib/types/internal/use-cases/message/SignMessageUseCase.d.ts.map +1 -0
- package/lib/types/internal/use-cases/message/SignMessageUseCase.test.d.ts +2 -0
- package/lib/types/internal/use-cases/message/SignMessageUseCase.test.d.ts.map +1 -0
- package/lib/types/internal/use-cases/transaction/SignTransactionUseCase.d.ts +10 -0
- package/lib/types/internal/use-cases/transaction/SignTransactionUseCase.d.ts.map +1 -0
- package/lib/types/internal/use-cases/transaction/SignTransactionUseCase.test.d.ts +2 -0
- package/lib/types/internal/use-cases/transaction/SignTransactionUseCase.test.d.ts.map +1 -0
- package/lib/types/tsconfig.prod.tsbuildinfo +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var g=Object.defineProperty;var o=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var G=Object.prototype.hasOwnProperty;var H=(r,n)=>{for(var t in n)g(r,t,{get:n[t],enumerable:!0})},L=(r,n,t,h)=>{if(n&&typeof n=="object"||typeof n=="function")for(let O of x(n))!G.call(r,O)&&O!==t&&g(r,O,{get:()=>n[O],enumerable:!(h=o(n,O))||h.enumerable});return r};var N=r=>L(g({},"__esModule",{value:!0}),r);var R={};H(R,{PublicKeyDisplayMode:()=>m});module.exports=N(R);var m=(t=>(t.LONG="long",t.SHORT="short",t))(m||{});0&&(module.exports={PublicKeyDisplayMode});
|
|
2
|
+
//# sourceMappingURL=PublicKeyDisplayMode.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/api/model/PublicKeyDisplayMode.ts"],
|
|
4
|
+
"sourcesContent": ["export enum PublicKeyDisplayMode {\n LONG = \"long\",\n SHORT = \"short\",\n}\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,0BAAAE,IAAA,eAAAC,EAAAH,GAAO,IAAKE,OACVA,EAAA,KAAO,OACPA,EAAA,MAAQ,QAFEA,OAAA",
|
|
6
|
+
"names": ["PublicKeyDisplayMode_exports", "__export", "PublicKeyDisplayMode", "__toCommonJS"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var i=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var o=(t,r,n,a)=>{if(r&&typeof r=="object"||typeof r=="function")for(let e of y(r))!g.call(t,e)&&e!==n&&i(t,e,{get:()=>r[e],enumerable:!(a=p(r,e))||a.enumerable});return t};var u=t=>o(i({},"__esModule",{value:!0}),t);var x={};module.exports=u(x);
|
|
2
|
+
//# sourceMappingURL=Signature.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var e=Object.defineProperty;var o=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var y=Object.prototype.hasOwnProperty;var c=(t,r,i,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let a of p(r))!y.call(t,a)&&a!==i&&e(t,a,{get:()=>r[a],enumerable:!(n=o(r,a))||n.enumerable});return t};var s=t=>c(e({},"__esModule",{value:!0}),t);var x={};module.exports=s(x);
|
|
2
|
+
//# sourceMappingURL=Transaction.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var o=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var s=Object.getOwnPropertyNames;var a=Object.prototype.hasOwnProperty;var c=(n,e,i,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of s(e))!a.call(n,r)&&r!==i&&o(n,r,{get:()=>e[r],enumerable:!(t=p(e,r))||t.enumerable});return n};var d=n=>c(o({},"__esModule",{value:!0}),n);var g={};module.exports=d(g);
|
|
2
|
+
//# sourceMappingURL=TransactionOptions.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/api/model/TransactionOptions.ts"],
|
|
4
|
+
"sourcesContent": ["// No option yet, but we need to keep this file for future use\n// in case of clear signing options\nexport type TransactionOptions = Record<string, never>;\n"],
|
|
5
|
+
"mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
|
|
6
|
+
"names": ["TransactionOptions_exports", "__toCommonJS"]
|
|
7
|
+
}
|
package/lib/cjs/index.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var x=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var f=(r,o,t,i)=>{if(o&&typeof o=="object"||typeof o=="function")for(let m of b(o))!c.call(r,m)&&m!==t&&x(r,m,{get:()=>o[m],enumerable:!(i=a(o,m))||i.enumerable});return r},e=(r,o,t)=>(f(r,o,"default"),t&&f(t,o,"default"));var d=r=>f(x({},"__esModule",{value:!0}),r);var p={};module.exports=d(p);var h=require("reflect-metadata");e(p,require("./api/index"),module.exports);0&&(module.exports={...require("./api/index")});
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/index.ts"],
|
|
4
|
+
"sourcesContent": ["// inversify requirement\nimport \"reflect-metadata\";\n\nexport * from \"@api/index\";\n"],
|
|
5
|
+
"mappings": "iaAAA,IAAAA,EAAA,kBAAAC,EAAAD,GACA,IAAAE,EAAO,4BAEPC,EAAAH,EAAc,sBAHd",
|
|
6
|
+
"names": ["src_exports", "__toCommonJS", "import_reflect_metadata", "__reExport"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var o=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var m=Object.prototype.hasOwnProperty;var c=(n,e)=>{for(var t in e)o(n,t,{get:e[t],enumerable:!0})},u=(n,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of g(e))!m.call(n,r)&&r!==t&&o(n,r,{get:()=>e[r],enumerable:!(i=p(e,r))||i.enumerable});return n};var f=n=>u(o({},"__esModule",{value:!0}),n);var A={};c(A,{DefaultSignerSolana:()=>y});module.exports=f(A);var s=require("./use-cases/di/useCasesTypes"),a=require("./di");class y{_container;constructor({dmk:e,sessionId:t}){this._container=(0,a.makeContainer)({dmk:e,sessionId:t})}signTransaction(e,t,i){return this._container.get(s.useCasesTypes.SignTransactionUseCase).execute(e,t,i)}signMessage(e,t){return this._container.get(s.useCasesTypes.SignMessageUseCase).execute(e,t)}getAddress(e,t){return this._container.get(s.useCasesTypes.GetAddressUseCase).execute(e,t)}getAppConfiguration(){return this._container.get(s.useCasesTypes.GetAppConfigurationUseCase).execute()}}0&&(module.exports={DefaultSignerSolana});
|
|
2
|
+
//# sourceMappingURL=DefaultSignerSolana.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/internal/DefaultSignerSolana.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n type DeviceManagementKit,\n type DeviceSessionId,\n} from \"@ledgerhq/device-management-kit\";\nimport { type Container } from \"inversify\";\n\nimport { type GetAddressDAReturnType } from \"@api/app-binder/GetAddressDeviceActionTypes\";\nimport { type GetAppConfigurationDAReturnType } from \"@api/app-binder/GetAppConfigurationDeviceActionTypes\";\nimport { type SignMessageDAReturnType } from \"@api/app-binder/SignMessageDeviceActionTypes\";\nimport { type SignTransactionDAReturnType } from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { type AddressOptions } from \"@api/model/AddressOption\";\nimport { type Transaction } from \"@api/model/Transaction\";\nimport { type TransactionOptions } from \"@api/model/TransactionOptions\";\nimport { type SignerSolana } from \"@api/SignerSolana\";\n\nimport { type GetAddressUseCase } from \"./use-cases/address/GetAddressUseCase\";\nimport { type GetAppConfigurationUseCase } from \"./use-cases/app-configuration/GetAppConfigurationUseCase\";\nimport { useCasesTypes } from \"./use-cases/di/useCasesTypes\";\nimport { type SignMessageUseCase } from \"./use-cases/message/SignMessageUseCase\";\nimport { type SignTransactionUseCase } from \"./use-cases/transaction/SignTransactionUseCase\";\nimport { makeContainer } from \"./di\";\n\nexport type DefaultSignerSolanaConstructorArgs = {\n dmk: DeviceManagementKit;\n sessionId: DeviceSessionId;\n};\n\nexport class DefaultSignerSolana implements SignerSolana {\n private _container: Container;\n\n constructor({ dmk, sessionId }: DefaultSignerSolanaConstructorArgs) {\n this._container = makeContainer({ dmk, sessionId });\n }\n\n signTransaction(\n derivationPath: string,\n transaction: Transaction,\n options?: TransactionOptions,\n ): SignTransactionDAReturnType {\n return this._container\n .get<SignTransactionUseCase>(useCasesTypes.SignTransactionUseCase)\n .execute(derivationPath, transaction, options);\n }\n\n signMessage(\n derivationPath: string,\n message: string,\n ): SignMessageDAReturnType {\n return this._container\n .get<SignMessageUseCase>(useCasesTypes.SignMessageUseCase)\n .execute(derivationPath, message);\n }\n\n getAddress(\n derivationPath: string,\n options?: AddressOptions,\n ): GetAddressDAReturnType {\n return this._container\n .get<GetAddressUseCase>(useCasesTypes.GetAddressUseCase)\n .execute(derivationPath, options);\n }\n\n getAppConfiguration(): GetAppConfigurationDAReturnType {\n return this._container\n .get<GetAppConfigurationUseCase>(useCasesTypes.GetAppConfigurationUseCase)\n .execute();\n }\n}\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,yBAAAE,IAAA,eAAAC,EAAAH,GAiBA,IAAAI,EAA8B,wCAG9BC,EAA8B,gBAOvB,MAAMH,CAA4C,CAC/C,WAER,YAAY,CAAE,IAAAI,EAAK,UAAAC,CAAU,EAAuC,CAClE,KAAK,cAAa,iBAAc,CAAE,IAAAD,EAAK,UAAAC,CAAU,CAAC,CACpD,CAEA,gBACEC,EACAC,EACAC,EAC6B,CAC7B,OAAO,KAAK,WACT,IAA4B,gBAAc,sBAAsB,EAChE,QAAQF,EAAgBC,EAAaC,CAAO,CACjD,CAEA,YACEF,EACAG,EACyB,CACzB,OAAO,KAAK,WACT,IAAwB,gBAAc,kBAAkB,EACxD,QAAQH,EAAgBG,CAAO,CACpC,CAEA,WACEH,EACAE,EACwB,CACxB,OAAO,KAAK,WACT,IAAuB,gBAAc,iBAAiB,EACtD,QAAQF,EAAgBE,CAAO,CACpC,CAEA,qBAAuD,CACrD,OAAO,KAAK,WACT,IAAgC,gBAAc,0BAA0B,EACxE,QAAQ,CACb,CACF",
|
|
6
|
+
"names": ["DefaultSignerSolana_exports", "__export", "DefaultSignerSolana", "__toCommonJS", "import_useCasesTypes", "import_di", "dmk", "sessionId", "derivationPath", "transaction", "options", "message"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var s=require("./DefaultSignerSolana");describe("DefaultSignerSolana",()=>{it("should be defined",()=>{const e=new s.DefaultSignerSolana({dmk:{},sessionId:{}});expect(e).toBeDefined()}),it("should call getAddress",()=>{const e={executeDeviceAction:jest.fn()},n={};new s.DefaultSignerSolana({dmk:e,sessionId:n}).getAddress("derivationPath",{}),expect(e.executeDeviceAction).toHaveBeenCalled()}),it("should call signTransaction",()=>{const e={executeDeviceAction:jest.fn()},n={};new s.DefaultSignerSolana({dmk:e,sessionId:n}).signTransaction("derivationPath",new Uint8Array,{}),expect(e.executeDeviceAction).toHaveBeenCalled()}),it("should call signMessage",()=>{const e={executeDeviceAction:jest.fn()},n={};new s.DefaultSignerSolana({dmk:e,sessionId:n}).signMessage("44'/501'/0'/0'","Hello world"),expect(e.executeDeviceAction).toHaveBeenCalled()}),it("should call getAppConfiguration",()=>{const e={executeDeviceAction:jest.fn()},n={};new s.DefaultSignerSolana({dmk:e,sessionId:n}).getAppConfiguration(),expect(e.executeDeviceAction).toHaveBeenCalled()})});
|
|
2
|
+
//# sourceMappingURL=DefaultSignerSolana.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/internal/DefaultSignerSolana.test.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n type DeviceManagementKit,\n type DeviceSessionId,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { DefaultSignerSolana } from \"./DefaultSignerSolana\";\n\ndescribe(\"DefaultSignerSolana\", () => {\n it(\"should be defined\", () => {\n const signer = new DefaultSignerSolana({\n dmk: {} as DeviceManagementKit,\n sessionId: {} as DeviceSessionId,\n });\n expect(signer).toBeDefined();\n });\n\n it(\"should call getAddress\", () => {\n const dmk = {\n executeDeviceAction: jest.fn(),\n } as unknown as DeviceManagementKit;\n const sessionId = {} as DeviceSessionId;\n const signer = new DefaultSignerSolana({ dmk, sessionId });\n signer.getAddress(\"derivationPath\", {});\n expect(dmk.executeDeviceAction).toHaveBeenCalled();\n });\n\n it(\"should call signTransaction\", () => {\n const dmk = {\n executeDeviceAction: jest.fn(),\n } as unknown as DeviceManagementKit;\n const sessionId = {} as DeviceSessionId;\n const signer = new DefaultSignerSolana({ dmk, sessionId });\n signer.signTransaction(\"derivationPath\", new Uint8Array(), {});\n expect(dmk.executeDeviceAction).toHaveBeenCalled();\n });\n\n it(\"should call signMessage\", () => {\n const dmk = {\n executeDeviceAction: jest.fn(),\n } as unknown as DeviceManagementKit;\n const sessionId = {} as DeviceSessionId;\n const signer = new DefaultSignerSolana({ dmk, sessionId });\n signer.signMessage(\"44'/501'/0'/0'\", \"Hello world\");\n expect(dmk.executeDeviceAction).toHaveBeenCalled();\n });\n\n it(\"should call getAppConfiguration\", () => {\n const dmk = {\n executeDeviceAction: jest.fn(),\n } as unknown as DeviceManagementKit;\n const sessionId = {} as DeviceSessionId;\n const signer = new DefaultSignerSolana({ dmk, sessionId });\n signer.getAppConfiguration();\n expect(dmk.executeDeviceAction).toHaveBeenCalled();\n });\n});\n"],
|
|
5
|
+
"mappings": "aAKA,IAAAA,EAAoC,iCAEpC,SAAS,sBAAuB,IAAM,CACpC,GAAG,oBAAqB,IAAM,CAC5B,MAAMC,EAAS,IAAI,sBAAoB,CACrC,IAAK,CAAC,EACN,UAAW,CAAC,CACd,CAAC,EACD,OAAOA,CAAM,EAAE,YAAY,CAC7B,CAAC,EAED,GAAG,yBAA0B,IAAM,CACjC,MAAMC,EAAM,CACV,oBAAqB,KAAK,GAAG,CAC/B,EACMC,EAAY,CAAC,EACJ,IAAI,sBAAoB,CAAE,IAAAD,EAAK,UAAAC,CAAU,CAAC,EAClD,WAAW,iBAAkB,CAAC,CAAC,EACtC,OAAOD,EAAI,mBAAmB,EAAE,iBAAiB,CACnD,CAAC,EAED,GAAG,8BAA+B,IAAM,CACtC,MAAMA,EAAM,CACV,oBAAqB,KAAK,GAAG,CAC/B,EACMC,EAAY,CAAC,EACJ,IAAI,sBAAoB,CAAE,IAAAD,EAAK,UAAAC,CAAU,CAAC,EAClD,gBAAgB,iBAAkB,IAAI,WAAc,CAAC,CAAC,EAC7D,OAAOD,EAAI,mBAAmB,EAAE,iBAAiB,CACnD,CAAC,EAED,GAAG,0BAA2B,IAAM,CAClC,MAAMA,EAAM,CACV,oBAAqB,KAAK,GAAG,CAC/B,EACMC,EAAY,CAAC,EACJ,IAAI,sBAAoB,CAAE,IAAAD,EAAK,UAAAC,CAAU,CAAC,EAClD,YAAY,iBAAkB,aAAa,EAClD,OAAOD,EAAI,mBAAmB,EAAE,iBAAiB,CACnD,CAAC,EAED,GAAG,kCAAmC,IAAM,CAC1C,MAAMA,EAAM,CACV,oBAAqB,KAAK,GAAG,CAC/B,EACMC,EAAY,CAAC,EACJ,IAAI,sBAAoB,CAAE,IAAAD,EAAK,UAAAC,CAAU,CAAC,EAClD,oBAAoB,EAC3B,OAAOD,EAAI,mBAAmB,EAAE,iBAAiB,CACnD,CAAC,CACH,CAAC",
|
|
6
|
+
"names": ["import_DefaultSignerSolana", "signer", "dmk", "sessionId"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var c=Object.defineProperty;var v=Object.getOwnPropertyDescriptor;var T=Object.getOwnPropertyNames;var I=Object.prototype.hasOwnProperty;var y=(i,e)=>{for(var t in e)c(i,t,{get:e[t],enumerable:!0})},R=(i,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of T(e))!I.call(i,n)&&n!==t&&c(i,n,{get:()=>e[n],enumerable:!(o=v(e,n))||o.enumerable});return i};var S=i=>R(c({},"__esModule",{value:!0}),i),A=(i,e,t,o)=>{for(var n=o>1?void 0:o?v(e,t):e,m=i.length-1,p;m>=0;m--)(p=i[m])&&(n=(o?p(e,t,n):p(n))||n);return o&&n&&c(e,t,n),n},d=(i,e)=>(t,o)=>e(t,o,i);var k={};y(k,{SolanaAppBinder:()=>r});module.exports=S(k);var s=require("@ledgerhq/device-management-kit"),a=require("inversify"),u=require("../externalTypes"),g=require("./command/GetAppConfigurationCommand"),D=require("./command/GetPubKeyCommand"),f=require("./device-action/SignMessage/SignMessageDeviceAction"),h=require("./device-action/SignTransactionDeviceAction");let r=class{constructor(e,t){this.dmk=e;this.sessionId=t}getAddress(e){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new s.SendCommandInAppDeviceAction({input:{command:new D.GetPubKeyCommand(e),appName:"Solana",requiredUserInteraction:e.checkOnDevice?s.UserInteractionRequired.VerifyAddress:s.UserInteractionRequired.None}})})}signTransaction(e){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new h.SignTransactionDeviceAction({input:{derivationPath:e.derivationPath,transaction:e.transaction,options:e.options??{}}})})}signMessage(e){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new f.SignMessageDeviceAction({input:{derivationPath:e.derivationPath,message:e.message}})})}getAppConfiguration(){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new s.SendCommandInAppDeviceAction({input:{command:new g.GetAppConfigurationCommand,appName:"Solana",requiredUserInteraction:s.UserInteractionRequired.None}})})}};r=A([(0,a.injectable)(),d(0,(0,a.inject)(u.externalTypes.Dmk)),d(1,(0,a.inject)(u.externalTypes.SessionId))],r);0&&(module.exports={SolanaAppBinder});
|
|
2
|
+
//# sourceMappingURL=SolanaAppBinder.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/internal/app-binder/SolanaAppBinder.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n DeviceManagementKit,\n type DeviceSessionId,\n SendCommandInAppDeviceAction,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport { GetAddressDAReturnType } from \"@api/app-binder/GetAddressDeviceActionTypes\";\nimport { GetAppConfigurationDAReturnType } from \"@api/app-binder/GetAppConfigurationDeviceActionTypes\";\nimport { SignMessageDAReturnType } from \"@api/app-binder/SignMessageDeviceActionTypes\";\nimport { SignTransactionDAReturnType } from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { Transaction } from \"@api/model/Transaction\";\nimport { TransactionOptions } from \"@api/model/TransactionOptions\";\nimport { externalTypes } from \"@internal/externalTypes\";\n\nimport { GetAppConfigurationCommand } from \"./command/GetAppConfigurationCommand\";\nimport { GetPubKeyCommand } from \"./command/GetPubKeyCommand\";\nimport { SignMessageDeviceAction } from \"./device-action/SignMessage/SignMessageDeviceAction\";\nimport { SignTransactionDeviceAction } from \"./device-action/SignTransactionDeviceAction\";\n\n@injectable()\nexport class SolanaAppBinder {\n constructor(\n @inject(externalTypes.Dmk) private dmk: DeviceManagementKit,\n @inject(externalTypes.SessionId) private sessionId: DeviceSessionId,\n ) {}\n\n getAddress(args: {\n derivationPath: string;\n checkOnDevice: boolean;\n }): GetAddressDAReturnType {\n return this.dmk.executeDeviceAction({\n sessionId: this.sessionId,\n deviceAction: new SendCommandInAppDeviceAction({\n input: {\n command: new GetPubKeyCommand(args),\n appName: \"Solana\",\n requiredUserInteraction: args.checkOnDevice\n ? UserInteractionRequired.VerifyAddress\n : UserInteractionRequired.None,\n },\n }),\n });\n }\n\n signTransaction(args: {\n derivationPath: string;\n transaction: Transaction;\n options?: TransactionOptions;\n }): SignTransactionDAReturnType {\n return this.dmk.executeDeviceAction({\n sessionId: this.sessionId,\n deviceAction: new SignTransactionDeviceAction({\n input: {\n derivationPath: args.derivationPath,\n transaction: args.transaction,\n options: args.options ?? {},\n },\n }),\n });\n }\n\n signMessage(args: {\n derivationPath: string;\n message: string;\n }): SignMessageDAReturnType {\n return this.dmk.executeDeviceAction({\n sessionId: this.sessionId,\n deviceAction: new SignMessageDeviceAction({\n input: {\n derivationPath: args.derivationPath,\n message: args.message,\n },\n }),\n });\n }\n\n getAppConfiguration(): GetAppConfigurationDAReturnType {\n return this.dmk.executeDeviceAction({\n sessionId: this.sessionId,\n deviceAction: new SendCommandInAppDeviceAction({\n input: {\n command: new GetAppConfigurationCommand(),\n appName: \"Solana\",\n requiredUserInteraction: UserInteractionRequired.None,\n },\n }),\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "okBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,qBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAKO,2CACPC,EAAmC,qBAQnCC,EAA8B,mCAE9BC,EAA2C,gDAC3CC,EAAiC,sCACjCC,EAAwC,+DACxCC,EAA4C,uDAGrC,IAAMC,EAAN,KAAsB,CAC3B,YACqCC,EACMC,EACzC,CAFmC,SAAAD,EACM,eAAAC,CACxC,CAEH,WAAWC,EAGgB,CACzB,OAAO,KAAK,IAAI,oBAAoB,CAClC,UAAW,KAAK,UAChB,aAAc,IAAI,+BAA6B,CAC7C,MAAO,CACL,QAAS,IAAI,mBAAiBA,CAAI,EAClC,QAAS,SACT,wBAAyBA,EAAK,cAC1B,0BAAwB,cACxB,0BAAwB,IAC9B,CACF,CAAC,CACH,CAAC,CACH,CAEA,gBAAgBA,EAIgB,CAC9B,OAAO,KAAK,IAAI,oBAAoB,CAClC,UAAW,KAAK,UAChB,aAAc,IAAI,8BAA4B,CAC5C,MAAO,CACL,eAAgBA,EAAK,eACrB,YAAaA,EAAK,YAClB,QAASA,EAAK,SAAW,CAAC,CAC5B,CACF,CAAC,CACH,CAAC,CACH,CAEA,YAAYA,EAGgB,CAC1B,OAAO,KAAK,IAAI,oBAAoB,CAClC,UAAW,KAAK,UAChB,aAAc,IAAI,0BAAwB,CACxC,MAAO,CACL,eAAgBA,EAAK,eACrB,QAASA,EAAK,OAChB,CACF,CAAC,CACH,CAAC,CACH,CAEA,qBAAuD,CACrD,OAAO,KAAK,IAAI,oBAAoB,CAClC,UAAW,KAAK,UAChB,aAAc,IAAI,+BAA6B,CAC7C,MAAO,CACL,QAAS,IAAI,6BACb,QAAS,SACT,wBAAyB,0BAAwB,IACnD,CACF,CAAC,CACH,CAAC,CACH,CACF,EApEaH,EAANI,EAAA,IADN,cAAW,EAGPC,EAAA,eAAO,gBAAc,GAAG,GACxBA,EAAA,eAAO,gBAAc,SAAS,IAHtBL",
|
|
6
|
+
"names": ["SolanaAppBinder_exports", "__export", "SolanaAppBinder", "__toCommonJS", "import_device_management_kit", "import_inversify", "import_externalTypes", "import_GetAppConfigurationCommand", "import_GetPubKeyCommand", "import_SignMessageDeviceAction", "import_SignTransactionDeviceAction", "SolanaAppBinder", "dmk", "sessionId", "args", "__decorateClass", "__decorateParam"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var s=require("@ledgerhq/device-management-kit"),d=require("rxjs"),A=require("./command/GetAppConfigurationCommand"),u=require("./command/GetPubKeyCommand"),l=require("./device-action/SignMessage/SignMessageDeviceAction"),m=require("./device-action/SignTransactionDeviceAction"),r=require("./SolanaAppBinder");describe("SolanaAppBinder",()=>{const n={sendCommand:jest.fn(),executeDeviceAction:jest.fn()};beforeEach(()=>{jest.clearAllMocks()}),it("should be defined",()=>{const e=new r.SolanaAppBinder({},{});expect(e).toBeDefined()}),describe("getAddress",()=>{it("should return the address",e=>{const i="D2PPQSYFe83nDzk96FqGumVU8JA7J8vj2Rhjc2oXzEi5";jest.spyOn(n,"executeDeviceAction").mockReturnValue({observable:(0,d.from)([{status:s.DeviceActionStatus.Completed,output:i}]),cancel:jest.fn()});const o=new r.SolanaAppBinder(n,"sessionId"),{observable:c}=o.getAddress({derivationPath:"44'/501'",checkOnDevice:!1}),a=[];c.subscribe({next:t=>{a.push(t)},error:t=>{e(t)},complete:()=>{try{expect(a).toEqual([{status:s.DeviceActionStatus.Completed,output:i}]),e()}catch(t){e(t)}}})}),describe("calls of executeDeviceAction with the correct params",()=>{const e={derivationPath:"44'/60'/3'/2/1",returnChainCode:!1};it("when checkOnDevice is true: UserInteractionRequired.VerifyAddress",()=>{const o={...e,checkOnDevice:!0};new r.SolanaAppBinder(n,"sessionId").getAddress(o),expect(n.executeDeviceAction).toHaveBeenCalledWith({sessionId:"sessionId",deviceAction:new s.SendCommandInAppDeviceAction({input:{command:new u.GetPubKeyCommand(o),appName:"Solana",requiredUserInteraction:s.UserInteractionRequired.VerifyAddress}})})}),it("when checkOnDevice is false: UserInteractionRequired.None",()=>{const o={...e,checkOnDevice:!1};new r.SolanaAppBinder(n,"sessionId").getAddress(o),expect(n.executeDeviceAction).toHaveBeenCalledWith({sessionId:"sessionId",deviceAction:new s.SendCommandInAppDeviceAction({input:{command:new u.GetPubKeyCommand(o),appName:"Solana",requiredUserInteraction:s.UserInteractionRequired.None}})})})})}),describe("signTransaction",()=>{it("should return the signature",e=>{const i=new Uint8Array([1,2,3]);jest.spyOn(n,"executeDeviceAction").mockReturnValue({observable:(0,d.from)([{status:s.DeviceActionStatus.Completed,output:i}]),cancel:jest.fn()});const o=new r.SolanaAppBinder(n,"sessionId"),{observable:c}=o.signTransaction({derivationPath:"44'/501'",transaction:new Uint8Array([1,2,3,4])}),a=[];c.subscribe({next:t=>{a.push(t)},error:t=>{e(t)},complete:()=>{try{expect(a).toEqual([{status:s.DeviceActionStatus.Completed,output:i}]),e()}catch(t){e(t)}}})}),it("should call executeDeviceAction with the correct params",()=>{const e="44'/60'/3'/2/1",i=new Uint8Array([1,2,3,4]);new r.SolanaAppBinder(n,"sessionId").signTransaction({derivationPath:e,transaction:i}),expect(n.executeDeviceAction).toHaveBeenCalledWith({deviceAction:new m.SignTransactionDeviceAction({input:{derivationPath:e,transaction:i,options:{}}}),sessionId:"sessionId"})})}),describe("signMessage",()=>{it("should return the signed message",e=>{const i=new Uint8Array([28,138,84,5,16]),o={derivationPath:"44'/501'/0'/0'",message:"Hello world"};jest.spyOn(n,"executeDeviceAction").mockReturnValue({observable:(0,d.from)([{status:s.DeviceActionStatus.Completed,output:i}]),cancel:jest.fn()});const c=new r.SolanaAppBinder(n,"sessionId"),{observable:a}=c.signMessage(o),t=[];a.subscribe({next:p=>{t.push(p)},error:p=>{e(p)},complete:()=>{try{expect(t).toEqual([{status:s.DeviceActionStatus.Completed,output:i}]),e()}catch(p){e(p)}}})}),it("should call executeDeviceAction with correct parameters",()=>{const e={derivationPath:"44'/501'/0'/0'",message:"Hello world"};new r.SolanaAppBinder(n,"sessionId").signMessage(e),expect(n.executeDeviceAction).toHaveBeenCalledWith({sessionId:"sessionId",deviceAction:new l.SignMessageDeviceAction({input:{derivationPath:e.derivationPath,message:e.message}})})})}),describe("getAppConfiguration",()=>{it("should return the app configuration",e=>{const i={blindSigningEnabled:!0,pubKeyDisplayMode:"LONG",version:"2.5.10"};jest.spyOn(n,"executeDeviceAction").mockReturnValue({observable:(0,d.from)([{status:s.DeviceActionStatus.Completed,output:i}]),cancel:jest.fn()});const o=new r.SolanaAppBinder(n,"sessionId"),{observable:c}=o.getAppConfiguration(),a=[];c.subscribe({next:t=>{a.push(t)},error:t=>{e(t)},complete:()=>{try{expect(a).toEqual([{status:s.DeviceActionStatus.Completed,output:i}]),e()}catch(t){e(t)}}})}),it("should call executeDeviceAction with the correct params",()=>{new r.SolanaAppBinder(n,"sessionId").getAppConfiguration(),expect(n.executeDeviceAction).toHaveBeenCalledWith({sessionId:"sessionId",deviceAction:new s.SendCommandInAppDeviceAction({input:{command:new A.GetAppConfigurationCommand,appName:"Solana",requiredUserInteraction:s.UserInteractionRequired.None}})})})})});
|
|
2
|
+
//# sourceMappingURL=SolanaAppBinder.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/internal/app-binder/SolanaAppBinder.test.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n type DeviceActionIntermediateValue,\n type DeviceActionState,\n DeviceActionStatus,\n type DeviceManagementKit,\n type DeviceSessionId,\n type DmkError,\n SendCommandInAppDeviceAction,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { from } from \"rxjs\";\n\nimport {\n type GetAppConfigurationDAError,\n type GetAppConfigurationDAIntermediateValue,\n type GetAppConfigurationDAOutput,\n} from \"@api/app-binder/GetAppConfigurationDeviceActionTypes\";\nimport {\n type GetAddressDAError,\n type GetAddressDAIntermediateValue,\n type GetAddressDAOutput,\n type SignTransactionDAError,\n type SignTransactionDAIntermediateValue,\n type SignTransactionDAOutput,\n} from \"@api/index\";\n\nimport { GetAppConfigurationCommand } from \"./command/GetAppConfigurationCommand\";\nimport { GetPubKeyCommand } from \"./command/GetPubKeyCommand\";\nimport { SignMessageDeviceAction } from \"./device-action/SignMessage/SignMessageDeviceAction\";\nimport { SignTransactionDeviceAction } from \"./device-action/SignTransactionDeviceAction\";\nimport { SolanaAppBinder } from \"./SolanaAppBinder\";\n\ndescribe(\"SolanaAppBinder\", () => {\n const mockedDmk: DeviceManagementKit = {\n sendCommand: jest.fn(),\n executeDeviceAction: jest.fn(),\n } as unknown as DeviceManagementKit;\n\n beforeEach(() => {\n jest.clearAllMocks();\n });\n\n it(\"should be defined\", () => {\n const binder = new SolanaAppBinder(\n {} as DeviceManagementKit,\n {} as DeviceSessionId,\n );\n expect(binder).toBeDefined();\n });\n\n describe(\"getAddress\", () => {\n it(\"should return the address\", (done) => {\n // GIVEN\n const address = \"D2PPQSYFe83nDzk96FqGumVU8JA7J8vj2Rhjc2oXzEi5\";\n\n jest.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: address,\n } as DeviceActionState<\n GetAddressDAOutput,\n GetAddressDAError,\n GetAddressDAIntermediateValue\n >,\n ]),\n cancel: jest.fn(),\n });\n\n // WHEN\n const appBinder = new SolanaAppBinder(mockedDmk, \"sessionId\");\n const { observable } = appBinder.getAddress({\n derivationPath: \"44'/501'\",\n checkOnDevice: false,\n });\n\n // THEN\n const states: DeviceActionState<\n GetAddressDAOutput,\n GetAddressDAError,\n GetAddressDAIntermediateValue\n >[] = [];\n observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n done(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: address,\n },\n ]);\n done();\n } catch (err) {\n done(err);\n }\n },\n });\n });\n\n describe(\"calls of executeDeviceAction with the correct params\", () => {\n const baseParams = {\n derivationPath: \"44'/60'/3'/2/1\",\n returnChainCode: false,\n };\n\n it(\"when checkOnDevice is true: UserInteractionRequired.VerifyAddress\", () => {\n // GIVEN\n const checkOnDevice = true;\n const params = {\n ...baseParams,\n checkOnDevice,\n };\n\n // WHEN\n const appBinder = new SolanaAppBinder(mockedDmk, \"sessionId\");\n appBinder.getAddress(params);\n\n // THEN\n expect(mockedDmk.executeDeviceAction).toHaveBeenCalledWith({\n sessionId: \"sessionId\",\n deviceAction: new SendCommandInAppDeviceAction({\n input: {\n command: new GetPubKeyCommand(params),\n appName: \"Solana\",\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n },\n }),\n });\n });\n\n it(\"when checkOnDevice is false: UserInteractionRequired.None\", () => {\n // GIVEN\n const checkOnDevice = false;\n const params = {\n ...baseParams,\n checkOnDevice,\n };\n\n // WHEN\n const appBinder = new SolanaAppBinder(mockedDmk, \"sessionId\");\n appBinder.getAddress(params);\n\n // THEN\n expect(mockedDmk.executeDeviceAction).toHaveBeenCalledWith({\n sessionId: \"sessionId\",\n deviceAction: new SendCommandInAppDeviceAction({\n input: {\n command: new GetPubKeyCommand(params),\n appName: \"Solana\",\n requiredUserInteraction: UserInteractionRequired.None,\n },\n }),\n });\n });\n });\n });\n\n describe(\"signTransaction\", () => {\n it(\"should return the signature\", (done) => {\n // GIVEN\n const signature = new Uint8Array([0x01, 0x02, 0x03]);\n\n jest.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: signature,\n } as DeviceActionState<\n SignTransactionDAOutput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >,\n ]),\n cancel: jest.fn(),\n });\n\n // WHEN\n const appBinder = new SolanaAppBinder(mockedDmk, \"sessionId\");\n const { observable } = appBinder.signTransaction({\n derivationPath: \"44'/501'\",\n transaction: new Uint8Array([0x01, 0x02, 0x03, 0x04]),\n });\n\n // THEN\n const states: DeviceActionState<\n SignTransactionDAOutput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >[] = [];\n observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n done(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: signature,\n },\n ]);\n done();\n } catch (err) {\n done(err);\n }\n },\n });\n });\n\n it(\"should call executeDeviceAction with the correct params\", () => {\n // GIVEN\n const derivationPath = \"44'/60'/3'/2/1\";\n const transaction = new Uint8Array([0x01, 0x02, 0x03, 0x04]);\n\n // WHEN\n const appBinder = new SolanaAppBinder(mockedDmk, \"sessionId\");\n appBinder.signTransaction({ derivationPath, transaction });\n\n // THEN\n expect(mockedDmk.executeDeviceAction).toHaveBeenCalledWith({\n deviceAction: new SignTransactionDeviceAction({\n input: {\n derivationPath,\n transaction,\n options: {},\n },\n }),\n sessionId: \"sessionId\",\n });\n });\n });\n\n describe(\"signMessage\", () => {\n it(\"should return the signed message\", (done) => {\n // GIVEN\n const signedMessage = new Uint8Array([0x1c, 0x8a, 0x54, 0x05, 0x10]);\n const signMessageArgs = {\n derivationPath: \"44'/501'/0'/0'\",\n message: \"Hello world\",\n };\n\n jest.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: signedMessage,\n } as DeviceActionState<\n Uint8Array,\n DmkError,\n DeviceActionIntermediateValue\n >,\n ]),\n cancel: jest.fn(),\n });\n\n // WHEN\n const appBinder = new SolanaAppBinder(mockedDmk, \"sessionId\");\n const { observable } = appBinder.signMessage(signMessageArgs);\n\n // THEN\n const states: DeviceActionState<Uint8Array, unknown, unknown>[] = [];\n observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n done(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: signedMessage,\n },\n ]);\n done();\n } catch (err) {\n done(err);\n }\n },\n });\n });\n\n it(\"should call executeDeviceAction with correct parameters\", () => {\n // GIVEN\n const signMessageArgs = {\n derivationPath: \"44'/501'/0'/0'\",\n message: \"Hello world\",\n };\n\n // WHEN\n const appBinder = new SolanaAppBinder(mockedDmk, \"sessionId\");\n appBinder.signMessage(signMessageArgs);\n\n // THEN\n expect(mockedDmk.executeDeviceAction).toHaveBeenCalledWith({\n sessionId: \"sessionId\",\n deviceAction: new SignMessageDeviceAction({\n input: {\n derivationPath: signMessageArgs.derivationPath,\n message: signMessageArgs.message,\n },\n }),\n });\n });\n });\n\n describe(\"getAppConfiguration\", () => {\n it(\"should return the app configuration\", (done) => {\n // GIVEN\n const appConfiguration = {\n blindSigningEnabled: true,\n pubKeyDisplayMode: \"LONG\",\n version: \"2.5.10\",\n };\n\n jest.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: appConfiguration,\n } as DeviceActionState<\n GetAppConfigurationDAOutput,\n GetAppConfigurationDAError,\n GetAppConfigurationDAIntermediateValue\n >,\n ]),\n cancel: jest.fn(),\n });\n\n // WHEN\n const appBinder = new SolanaAppBinder(mockedDmk, \"sessionId\");\n const { observable } = appBinder.getAppConfiguration();\n\n // THEN\n const states: DeviceActionState<\n GetAppConfigurationDAOutput,\n GetAppConfigurationDAError,\n GetAppConfigurationDAIntermediateValue\n >[] = [];\n observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n done(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: appConfiguration,\n },\n ]);\n done();\n } catch (err) {\n done(err);\n }\n },\n });\n });\n\n it(\"should call executeDeviceAction with the correct params\", () => {\n // GIVEN\n const appBinder = new SolanaAppBinder(mockedDmk, \"sessionId\");\n\n // WHEN\n appBinder.getAppConfiguration();\n\n // THEN\n expect(mockedDmk.executeDeviceAction).toHaveBeenCalledWith({\n sessionId: \"sessionId\",\n deviceAction: new SendCommandInAppDeviceAction({\n input: {\n command: new GetAppConfigurationCommand(), // Correct command\n appName: \"Solana\",\n requiredUserInteraction: UserInteractionRequired.None,\n },\n }),\n });\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_device_management_kit", "import_rxjs", "import_GetAppConfigurationCommand", "import_GetPubKeyCommand", "import_SignMessageDeviceAction", "import_SignTransactionDeviceAction", "import_SolanaAppBinder", "mockedDmk", "binder", "done", "address", "appBinder", "observable", "states", "state", "err", "baseParams", "params", "signature", "derivationPath", "transaction", "signedMessage", "signMessageArgs", "appConfiguration"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var i=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var A=(e,o)=>{for(var t in o)i(e,t,{get:o[t],enumerable:!0})},l=(e,o,t,p)=>{if(o&&typeof o=="object"||typeof o=="function")for(let r of C(o))!g.call(e,r)&&r!==t&&i(e,r,{get:()=>o[r],enumerable:!(p=u(o,r))||p.enumerable});return e};var f=e=>l(i({},"__esModule",{value:!0}),e);var y={};A(y,{GetAppConfigurationCommand:()=>c});module.exports=f(y);var n=require("@ledgerhq/device-management-kit"),s=require("../../../api/model/PublicKeyDisplayMode"),a=require("./utils/solanaAppErrors");class c{args;constructor(o){this.args=o}getApdu(){return new n.ApduBuilder({cla:224,ins:4,p1:0,p2:0}).build()}parseResponse(o){const t=new n.ApduParser(o),p=t.encodeToHexaString(o.statusCode);if((0,n.isCommandErrorCode)(p,a.solanaAppErrors))return(0,n.CommandResultFactory)({error:new a.SolanaAppCommandError({...a.solanaAppErrors[p],errorCode:p})});const r=t.extractFieldByLength(5);if(!r||r.length!==5||r.some(m=>m===void 0))return(0,n.CommandResultFactory)({error:new n.InvalidStatusWordError("Invalid response")});const d={blindSigningEnabled:!!r[0],pubKeyDisplayMode:r[1]===0?s.PublicKeyDisplayMode.LONG:s.PublicKeyDisplayMode.SHORT,version:`${r[2]}.${r[3]}.${r[4]}`};return(0,n.CommandResultFactory)({data:d})}}0&&(module.exports={GetAppConfigurationCommand});
|
|
2
|
+
//# sourceMappingURL=GetAppConfigurationCommand.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 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 isCommandErrorCode,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type AppConfiguration } from \"@api/model/AppConfiguration\";\nimport { PublicKeyDisplayMode } from \"@api/model/PublicKeyDisplayMode\";\n\nimport {\n SolanaAppCommandError,\n solanaAppErrors,\n} from \"./utils/solanaAppErrors\";\n\ntype GetAppConfigurationCommandArgs = void;\n\nexport class GetAppConfigurationCommand\n implements Command<AppConfiguration, GetAppConfigurationCommandArgs>\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(response: ApduResponse): CommandResult<AppConfiguration> {\n const parser = new ApduParser(response);\n const errorCode = parser.encodeToHexaString(response.statusCode);\n if (isCommandErrorCode(errorCode, solanaAppErrors)) {\n return CommandResultFactory({\n error: new SolanaAppCommandError({\n ...solanaAppErrors[errorCode],\n errorCode,\n }),\n });\n }\n\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"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,gCAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAUO,2CAGPC,EAAqC,2CAErCC,EAGO,mCAIA,MAAMJ,CAEb,CACE,KAEA,YAAYK,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,cAAcC,EAAyD,CACrE,MAAMC,EAAS,IAAI,aAAWD,CAAQ,EAChCE,EAAYD,EAAO,mBAAmBD,EAAS,UAAU,EAC/D,MAAI,sBAAmBE,EAAW,iBAAe,EAC/C,SAAO,wBAAqB,CAC1B,MAAO,IAAI,wBAAsB,CAC/B,GAAG,kBAAgBA,CAAS,EAC5B,UAAAA,CACF,CAAC,CACH,CAAC,EAGH,MAAMC,EAASF,EAAO,qBAAqB,CAAC,EAC5C,GACE,CAACE,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,CACF",
|
|
6
|
+
"names": ["GetAppConfigurationCommand_exports", "__export", "GetAppConfigurationCommand", "__toCommonJS", "import_device_management_kit", "import_PublicKeyDisplayMode", "import_solanaAppErrors", "args", "response", "parser", "errorCode", "buffer", "element", "config"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var e=require("@ledgerhq/device-management-kit"),s=require("../../../api/model/PublicKeyDisplayMode"),n=require("./GetAppConfigurationCommand");const a=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 n.GetAppConfigurationCommand,jest.clearAllMocks(),jest.requireActual("@ledgerhq/device-management-kit")}),describe("getApdu",()=>{it("should return the correct APDU",()=>{const r=o.getApdu();expect(r.getRawApdu()).toEqual(a)})}),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)?fail("Expected error"):expect(t.error).toEqual(expect.objectContaining({_tag:"InvalidStatusWordError",originalError:expect.objectContaining({message:"Invalid response"})}))}),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)?fail("Expected error"):expect(t.error).toEqual(expect.objectContaining({_tag:"InvalidStatusWordError",originalError:expect.objectContaining({message:"Invalid response"})}))})})})});
|
|
2
|
+
//# sourceMappingURL=GetAppConfigurationCommand.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 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 jest.clearAllMocks();\n jest.requireActual(\"@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: \"InvalidStatusWordError\",\n originalError: expect.objectContaining({\n message: \"Invalid response\",\n }),\n }),\n );\n } else {\n 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: \"InvalidStatusWordError\",\n originalError: expect.objectContaining({\n message: \"Invalid response\",\n }),\n }),\n );\n } else {\n 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,KAAK,cAAc,EACnB,KAAK,cAAc,iCAAiC,CACtD,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,EAUhC,KAAK,gBAAgB,EATrB,OAAOA,EAAO,KAAK,EAAE,QACnB,OAAO,iBAAiB,CACtB,KAAM,yBACN,cAAe,OAAO,iBAAiB,CACrC,QAAS,kBACX,CAAC,CACH,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,EAUhC,KAAK,gBAAgB,EATrB,OAAOA,EAAO,KAAK,EAAE,QACnB,OAAO,iBAAiB,CACtB,KAAM,yBACN,cAAe,OAAO,iBAAiB,CACrC,QAAS,kBACX,CAAC,CACH,CAAC,CACH,CAIJ,CAAC,CACH,CAAC,CACH,CAAC,CACH,CAAC",
|
|
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
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var l=Object.create;var d=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var g=Object.getPrototypeOf,P=Object.prototype.hasOwnProperty;var A=(r,e)=>{for(var t in e)d(r,t,{get:e[t],enumerable:!0})},i=(r,e,t,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of b(e))!P.call(r,n)&&n!==t&&d(r,n,{get:()=>e[n],enumerable:!(a=y(e,n))||a.enumerable});return r};var C=(r,e,t)=>(t=r!=null?l(g(r)):{},i(e||!r||!r.__esModule?d(t,"default",{value:r,enumerable:!0}):t,r)),h=r=>i(d({},"__esModule",{value:!0}),r);var K={};A(K,{GetPubKeyCommand:()=>f});module.exports=h(K);var o=require("@ledgerhq/device-management-kit"),p=require("@ledgerhq/signer-utils"),u=C(require("bs58")),s=require("./utils/solanaAppErrors");const m=32;class f{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),a=this.args.derivationPath,n=p.DerivationPathUtils.splitPath(a);return t.add8BitUIntToData(n.length),n.forEach(c=>{t.add32BitUIntToData(c)}),t.build()}parseResponse(e){const t=new o.ApduParser(e),a=t.encodeToHexaString(e.statusCode);if((0,o.isCommandErrorCode)(a,s.solanaAppErrors))return(0,o.CommandResultFactory)({error:new s.SolanaAppCommandError({...s.solanaAppErrors[a],errorCode:a})});if(t.testMinimalLength(m)===!1)return(0,o.CommandResultFactory)({error:new o.InvalidStatusWordError("Public key is missing")});const n=t.extractFieldByLength(m);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});
|
|
2
|
+
//# sourceMappingURL=GetPubKeyCommand.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 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 isCommandErrorCode,\n} from \"@ledgerhq/device-management-kit\";\nimport { DerivationPathUtils } from \"@ledgerhq/signer-utils\";\nimport bs58 from \"bs58\";\n\nimport { type PublicKey } from \"@api/model/PublicKey\";\n\nimport {\n SolanaAppCommandError,\n solanaAppErrors,\n} from \"./utils/solanaAppErrors\";\n\nconst PUBKEY_LENGTH = 32;\n\ntype GetPubKeyCommandResponse = PublicKey;\ntype GetPubKeyCommandArgs = {\n derivationPath: string;\n checkOnDevice: boolean;\n};\n\nexport class GetPubKeyCommand\n implements Command<GetPubKeyCommandResponse, GetPubKeyCommandArgs>\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> {\n const parser = new ApduParser(response);\n const errorCode = parser.encodeToHexaString(response.statusCode);\n if (isCommandErrorCode(errorCode, solanaAppErrors)) {\n return CommandResultFactory({\n error: new SolanaAppCommandError({\n ...solanaAppErrors[errorCode],\n errorCode,\n }),\n });\n }\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"],
|
|
5
|
+
"mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,sBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAWO,2CACPC,EAAoC,kCACpCC,EAAiB,mBAIjBC,EAGO,mCAEP,MAAMC,EAAgB,GAQf,MAAMN,CAEb,CACE,KAEA,YAAYO,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,EACyC,CACzC,MAAMC,EAAS,IAAI,aAAWD,CAAQ,EAChCE,EAAYD,EAAO,mBAAmBD,EAAS,UAAU,EAC/D,MAAI,sBAAmBE,EAAW,iBAAe,EAC/C,SAAO,wBAAqB,CAC1B,MAAO,IAAI,wBAAsB,CAC/B,GAAG,kBAAgBA,CAAS,EAC5B,UAAAA,CACF,CAAC,CACH,CAAC,EAGH,GAAID,EAAO,kBAAkBR,CAAa,IAAM,GAC9C,SAAO,wBAAqB,CAC1B,MAAO,IAAI,yBAAuB,uBAAuB,CAC3D,CAAC,EAGH,MAAMU,EAASF,EAAO,qBAAqBR,CAAa,EACxD,OAAIU,IAAW,UACN,wBAAqB,CAC1B,MAAO,IAAI,yBAAuB,8BAA8B,CAClE,CAAC,KAGI,wBAAqB,CAC1B,KAAM,EAAAC,QAAK,OAAOD,CAAM,CAC1B,CAAC,CACH,CACF",
|
|
6
|
+
"names": ["GetPubKeyCommand_exports", "__export", "GetPubKeyCommand", "__toCommonJS", "import_device_management_kit", "import_signer_utils", "import_bs58", "import_solanaAppErrors", "PUBKEY_LENGTH", "args", "getPubKeyArgs", "builder", "derivationPath", "path", "element", "response", "parser", "errorCode", "buffer", "bs58"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var t=require("@ledgerhq/device-management-kit"),s=require("./GetPubKeyCommand");const o=new Uint8Array([224,5,1,0,9,2,128,0,0,44,128,0,1,245]),a=new Uint8Array([224,5,0,0,9,2,128,0,0,44,128,0,1,245]),i=new Uint8Array([224,5,1,0,9,2,128,0,0,44,128,0,1,246]),c=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:c});describe("GetPubKeyCommand",()=>{let r;const n={derivationPath:"44'/501'",checkOnDevice:!0};beforeEach(()=>{r=new s.GetPubKeyCommand(n),jest.clearAllMocks(),jest.requireActual("@ledgerhq/device-management-kit")}),describe("getApdu",()=>{it("should return APDU",()=>{const e=r.getApdu();expect(e.getRawApdu()).toEqual(o)}),it("should return APDU without confirm",()=>{r=new s.GetPubKeyCommand({...n,checkOnDevice:!1});const e=r.getApdu();expect(e.getRawApdu()).toEqual(a)}),it("should return APDU with different path",()=>{r=new s.GetPubKeyCommand({...n,derivationPath:"44'/502'"});const e=r.getApdu();expect(e.getRawApdu()).toEqual(i)})}),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)?fail("Expected error"):expect(x.error).toEqual(expect.objectContaining({_tag:"InvalidStatusWordError",originalError:expect.objectContaining({message:"Public key is missing"})}))}),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)?fail("Expected error"):expect(x.error.originalError).toEqual(expect.objectContaining({message:"Public key is missing"}))})})})});
|
|
2
|
+
//# sourceMappingURL=GetPubKeyCommand.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 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 jest.clearAllMocks();\n jest.requireActual(\"@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: \"InvalidStatusWordError\",\n originalError: expect.objectContaining({\n message: \"Public key is missing\",\n }),\n }),\n );\n } else {\n 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 fail(\"Expected error\");\n }\n });\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "aAAA,IAAAA,EAIO,2CAEPC,EAAiC,8BAEjC,MAAMC,EAA6C,IAAI,WAAW,CAChE,IAAM,EAAM,EAAM,EAAM,EAAM,EAAM,IAAM,EAAM,EAAM,GAAM,IAAM,EAAM,EACxE,GACF,CAAC,EAEKC,EAAgD,IAAI,WAAW,CACnE,IAAM,EAAM,EAAM,EAAM,EAAM,EAAM,IAAM,EAAM,EAAM,GAAM,IAAM,EAAM,EACxE,GACF,CAAC,EAEKC,EAAiC,IAAI,WAAW,CACpD,IAAM,EAAM,EAAM,EAAM,EAAM,EAAM,IAAM,EAAM,EAAM,GAAM,IAAM,EAAM,EACxE,GACF,CAAC,EAGKC,EAAkB,IAAI,WAAW,CACrC,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,EACxE,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IACxE,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,CAC5C,CAAC,EAEKC,EAA2B,IAAI,eAAa,CAChD,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAMD,CACR,CAAC,EAED,SAAS,mBAAoB,IAAM,CACjC,IAAIE,EACJ,MAAMC,EAAc,CAClB,eAAgB,WAChB,cAAe,EACjB,EAEA,WAAW,IAAM,CACfD,EAAU,IAAI,mBAAiBC,CAAW,EAC1C,KAAK,cAAc,EACnB,KAAK,cAAc,iCAAiC,CACtD,CAAC,EAED,SAAS,UAAW,IAAM,CACxB,GAAG,qBAAsB,IAAM,CAC7B,MAAMC,EAAOF,EAAQ,QAAQ,EAC7B,OAAOE,EAAK,WAAW,CAAC,EAAE,QACxBP,CACF,CACF,CAAC,EAED,GAAG,qCAAsC,IAAM,CAC7CK,EAAU,IAAI,mBAAiB,CAC7B,GAAGC,EACH,cAAe,EACjB,CAAC,EACD,MAAMC,EAAOF,EAAQ,QAAQ,EAC7B,OAAOE,EAAK,WAAW,CAAC,EAAE,QACxBN,CACF,CACF,CAAC,EAED,GAAG,yCAA0C,IAAM,CACjDI,EAAU,IAAI,mBAAiB,CAC7B,GAAGC,EACH,eAAgB,UAClB,CAAC,EACD,MAAMC,EAAOF,EAAQ,QAAQ,EAC7B,OAAOE,EAAK,WAAW,CAAC,EAAE,QAAQL,CAA8B,CAClE,CAAC,CACH,CAAC,EAED,SAAS,gBAAiB,IAAM,CAC9B,GAAG,4BAA6B,IAAM,CACpC,MAAMM,EAASH,EAAQ,cAAcD,CAAwB,EAC7D,OAAOI,CAAM,EAAE,iBACb,wBAAqB,CACnB,KAAM,8CACR,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,EAASL,EAAQ,cAAcI,CAAQ,EAC7C,UAAO,0BAAuBC,CAAM,CAAC,EAAE,KAAK,EAAK,KAC5C,0BAAuBA,CAAM,EAUhC,KAAK,gBAAgB,EATrB,OAAOA,EAAO,KAAK,EAAE,QACnB,OAAO,iBAAiB,CACtB,KAAM,yBACN,cAAe,OAAO,iBAAiB,CACrC,QAAS,uBACX,CAAC,CACH,CAAC,CACH,CAIJ,CAAC,EAED,GAAG,+CAAgD,IAAM,CACvD,MAAMD,EAAW,IAAI,eAAa,CAChC,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAM,IAAI,WAAW,CAAC,CACxB,CAAC,EACKC,EAASL,EAAQ,cAAcI,CAAQ,EAC7C,UAAO,0BAAuBC,CAAM,CAAC,EAAE,KAAK,EAAK,KAC5C,0BAAuBA,CAAM,EAOhC,KAAK,gBAAgB,EANrB,OAAOA,EAAO,MAAM,aAAa,EAAE,QACjC,OAAO,iBAAiB,CACtB,QAAS,uBACX,CAAC,CACH,CAIJ,CAAC,CACH,CAAC,CACH,CAAC,CACH,CAAC",
|
|
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
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var i=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var g=(a,e)=>{for(var s in e)i(a,s,{get:e[s],enumerable:!0})},C=(a,e,s,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of d(e))!p.call(a,n)&&n!==s&&i(a,n,{get:()=>e[n],enumerable:!(o=m(e,n))||o.enumerable});return a};var f=a=>C(i({},"__esModule",{value:!0}),a);var A={};g(A,{SignOffChainMessageCommand:()=>l});module.exports=f(A);var r=require("@ledgerhq/device-management-kit"),t=require("./utils/solanaAppErrors");const u=64;class l{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){const s=new r.ApduParser(e),o=s.encodeToHexaString(e.statusCode);if((0,r.isCommandErrorCode)(o,t.solanaAppErrors))return(0,r.CommandResultFactory)({error:new t.SolanaAppCommandError({...t.solanaAppErrors[o],errorCode:o})});const n=s.extractFieldByLength(u);return n?(0,r.CommandResultFactory)({data:n}):(0,r.CommandResultFactory)({error:new r.InvalidStatusWordError("Signature extraction failed")})}}0&&(module.exports={SignOffChainMessageCommand});
|
|
2
|
+
//# sourceMappingURL=SignOffChainMessageCommand.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 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 isCommandErrorCode,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type Signature } from \"@api/model/Signature\";\n\nimport {\n SolanaAppCommandError,\n solanaAppErrors,\n} from \"./utils/solanaAppErrors\";\n\nconst SIGNATURE_LENGTH = 64;\n\nexport type SignOffChainMessageCommandResponse = Signature;\nexport type SignOffChainMessageCommandArgs = {\n readonly message: Uint8Array;\n readonly derivationPath: string;\n};\n\nexport class SignOffChainMessageCommand\n implements\n Command<SignOffChainMessageCommandResponse, SignOffChainMessageCommandArgs>\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> {\n const parser = new ApduParser(response);\n const errorCode = parser.encodeToHexaString(response.statusCode);\n if (isCommandErrorCode(errorCode, solanaAppErrors)) {\n return CommandResultFactory({\n error: new SolanaAppCommandError({\n ...solanaAppErrors[errorCode],\n errorCode,\n }),\n });\n }\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"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,gCAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAUO,2CAIPC,EAGO,mCAEP,MAAMC,EAAmB,GAQlB,MAAMJ,CAGb,CACE,KAEA,YAAYK,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,EACmD,CACnD,MAAMC,EAAS,IAAI,aAAWD,CAAQ,EAChCE,EAAYD,EAAO,mBAAmBD,EAAS,UAAU,EAC/D,MAAI,sBAAmBE,EAAW,iBAAe,EAC/C,SAAO,wBAAqB,CAC1B,MAAO,IAAI,wBAAsB,CAC/B,GAAG,kBAAgBA,CAAS,EAC5B,UAAAA,CACF,CAAC,CACH,CAAC,EAGH,MAAMC,EAAYF,EAAO,qBAAqBH,CAAgB,EAC9D,OAAKK,KAME,wBAAqB,CAC1B,KAAMA,CACR,CAAC,KAPQ,wBAAqB,CAC1B,MAAO,IAAI,yBAAuB,6BAA6B,CACjE,CAAC,CAML,CACF",
|
|
6
|
+
"names": ["SignOffChainMessageCommand_exports", "__export", "SignOffChainMessageCommand", "__toCommonJS", "import_device_management_kit", "import_solanaAppErrors", "SIGNATURE_LENGTH", "args", "response", "parser", "errorCode", "signature"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var e=require("@ledgerhq/device-management-kit"),o=require("./SignOffChainMessageCommand");describe("SignOffChainMessageCommand",()=>{let s;const a=new Uint8Array(Buffer.from("Solana SignOffChainMessage","utf-8")),n=64;beforeEach(()=>{s=new o.SignOffChainMessageCommand({message:a,derivationPath:"44'/501'/0'/0'"}),jest.clearAllMocks(),jest.requireActual("@ledgerhq/device-management-kit")}),describe("getApdu",()=>{it("should return the correct APDU",()=>{const t=s.getApdu(),r=new e.ApduBuilder({cla:224,ins:7,p1:1,p2:0}).addBufferToData(a).build();expect(t.getRawApdu()).toEqual(r.getRawApdu())})}),describe("parseResponse",()=>{it("should parse the response correctly",()=>{const t=new Uint8Array(n).fill(1),r=s.parseResponse(new e.ApduResponse({data:t,statusCode:new Uint8Array([144,0])}));expect((0,e.isSuccessCommandResult)(r)).toBe(!0),(0,e.isSuccessCommandResult)(r)?expect(r.data).toEqual(t):fail("Expected success result")}),describe("error handling",()=>{it("should return error if response is not success",()=>{const t=s.parseResponse(new e.ApduResponse({statusCode:new Uint8Array([106,130]),data:new Uint8Array(0)}));expect((0,e.isSuccessCommandResult)(t)).toBe(!1),(0,e.isSuccessCommandResult)(t)?fail("Expected error"):expect(t.error).toEqual(expect.objectContaining({_tag:"InvalidStatusWordError",originalError:expect.objectContaining({message:"Signature extraction failed"})}))}),it("should return error if signature is missing or incomplete",()=>{const t=new Uint8Array(n-1).fill(1),r=s.parseResponse(new e.ApduResponse({data:t,statusCode:new Uint8Array([144,0])}));expect((0,e.isSuccessCommandResult)(r)).toBe(!1),(0,e.isSuccessCommandResult)(r)?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")})})})});
|
|
2
|
+
//# sourceMappingURL=SignOffChainMessageCommand.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 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 derivationPath: \"44'/501'/0'/0'\",\n });\n jest.clearAllMocks();\n jest.requireActual(\"@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 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: \"InvalidStatusWordError\", // Adjust this based on your actual implementation\n originalError: expect.objectContaining({\n message: \"Signature extraction failed\",\n }),\n }),\n );\n } else {\n 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 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,EACT,eAAgB,gBAClB,CAAC,EACD,KAAK,cAAc,EACnB,KAAK,cAAc,iCAAiC,CACtD,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,KAAK,yBAAyB,CAElC,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,EAUhC,KAAK,gBAAgB,EATrB,OAAOA,EAAO,KAAK,EAAE,QACnB,OAAO,iBAAiB,CACtB,KAAM,yBACN,cAAe,OAAO,iBAAiB,CACrC,QAAS,6BACX,CAAC,CACH,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,KAAK,gBAAgB,EATnB,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"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var d=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var u=Object.prototype.hasOwnProperty;var c=(t,n)=>{for(var o in n)d(t,o,{get:n[o],enumerable:!0})},l=(t,n,o,a)=>{if(n&&typeof n=="object"||typeof n=="function")for(let e of g(n))!u.call(t,e)&&e!==o&&d(t,e,{get:()=>n[e],enumerable:!(a=p(n,e))||a.enumerable});return t};var C=t=>l(d({},"__esModule",{value:!0}),t);var S={};c(S,{SignTransactionCommand:()=>y});module.exports=C(S);var r=require("@ledgerhq/device-management-kit"),i=require("purify-ts"),s=require("./utils/solanaAppErrors");const A=64;class y{args;constructor(n){this.args=n}getApdu(){const{more:n,extend:o,serializedTransaction:a}=this.args;let e=0;n&&(e|=2),o&&(e|=1);const m={cla:224,ins:6,p1:1,p2:e};return new r.ApduBuilder(m).addBufferToData(a).build()}parseResponse(n){const o=new r.ApduParser(n),a=o.encodeToHexaString(n.statusCode);if(console.log("Status Code:",n.statusCode),console.log("Error Code:",a),(0,r.isCommandErrorCode)(a,s.solanaAppErrors))return(0,r.CommandResultFactory)({error:new s.SolanaAppCommandError({...s.solanaAppErrors[a],errorCode:a})});if(o.getUnparsedRemainingLength()===0)return(0,r.CommandResultFactory)({data:i.Nothing});const e=o.extractFieldByLength(A);return e?(0,r.CommandResultFactory)({data:(0,i.Just)(e)}):(0,r.CommandResultFactory)({error:new r.InvalidStatusWordError("Signature is missing")})}}0&&(module.exports={SignTransactionCommand});
|
|
2
|
+
//# sourceMappingURL=SignTransactionCommand.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 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 isCommandErrorCode,\n} from \"@ledgerhq/device-management-kit\";\nimport { Just, type Maybe, Nothing } from \"purify-ts\";\n\nimport { type Signature } from \"@api/model/Signature\";\n\nimport {\n SolanaAppCommandError,\n solanaAppErrors,\n} from \"./utils/solanaAppErrors\";\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<SignTransactionCommandResponse, SignTransactionCommandArgs>\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> {\n const parser = new ApduParser(response);\n const errorCode = parser.encodeToHexaString(response.statusCode);\n console.log(\"Status Code:\", response.statusCode); // Debugging\n console.log(\"Error Code:\", errorCode); // Debugging\n if (isCommandErrorCode(errorCode, solanaAppErrors)) {\n return CommandResultFactory({\n error: new SolanaAppCommandError({\n ...solanaAppErrors[errorCode],\n errorCode,\n }),\n });\n }\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"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,4BAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAWO,2CACPC,EAA0C,qBAI1CC,EAGO,mCAEP,MAAMC,EAAmB,GAYlB,MAAML,CAGb,CACE,KAEA,YAAYM,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,EAC+C,CAC/C,MAAMC,EAAS,IAAI,aAAWD,CAAQ,EAChCE,EAAYD,EAAO,mBAAmBD,EAAS,UAAU,EAG/D,GAFA,QAAQ,IAAI,eAAgBA,EAAS,UAAU,EAC/C,QAAQ,IAAI,cAAeE,CAAS,KAChC,sBAAmBA,EAAW,iBAAe,EAC/C,SAAO,wBAAqB,CAC1B,MAAO,IAAI,wBAAsB,CAC/B,GAAG,kBAAgBA,CAAS,EAC5B,UAAAA,CACF,CAAC,CACH,CAAC,EAGH,GAAID,EAAO,2BAA2B,IAAM,EAC1C,SAAO,wBAAqB,CAC1B,KAAM,SACR,CAAC,EAGH,MAAME,EAAYF,EAAO,qBAAqBR,CAAgB,EAC9D,OAAKU,KAME,wBAAqB,CAC1B,QAAM,QAAKA,CAAS,CACtB,CAAC,KAPQ,wBAAqB,CAC1B,MAAO,IAAI,yBAAuB,sBAAsB,CAC1D,CAAC,CAML,CACF",
|
|
6
|
+
"names": ["SignTransactionCommand_exports", "__export", "SignTransactionCommand", "__toCommonJS", "import_device_management_kit", "import_purify_ts", "import_solanaAppErrors", "SIGNATURE_LENGTH", "args", "more", "extend", "serializedTransaction", "p2", "signTransactionArgs", "response", "parser", "errorCode", "signature"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var t=require("@ledgerhq/device-management-kit"),o=require("purify-ts"),n=require("./SignTransactionCommand");describe("SignTransactionCommand",()=>{const a={serializedTransaction:new Uint8Array,more:!1,extend:!1};describe("getApdu",()=>{it("should return the correct APDU when the data is empty",()=>{const e=new n.SignTransactionCommand(a).getApdu();expect(e.data).toStrictEqual(new Uint8Array),expect(e.cla).toBe(224),expect(e.ins).toBe(6),expect(e.p1).toBe(1),expect(e.p2).toBe(0)}),it("should return the correct APDU when the data is not empty",()=>{const e=new n.SignTransactionCommand({serializedTransaction:new Uint8Array([1,2,3]),more:!1,extend:!1}).getApdu();expect(e.data).toStrictEqual(new Uint8Array([1,2,3])),expect(e.cla).toBe(224),expect(e.ins).toBe(6),expect(e.p1).toBe(1),expect(e.p2).toBe(0)}),it("should return the correct APDU when the more flag is set",()=>{const e=new n.SignTransactionCommand({serializedTransaction:new Uint8Array([1,2,3]),more:!0,extend:!1}).getApdu();expect(e.data).toStrictEqual(new Uint8Array([1,2,3])),expect(e.cla).toBe(224),expect(e.ins).toBe(6),expect(e.p1).toBe(1),expect(e.p2).toBe(2)}),it("should return the correct APDU when the extend flag is set",()=>{const e=new n.SignTransactionCommand({serializedTransaction:new Uint8Array([1,2,3]),more:!1,extend:!0}).getApdu();expect(e.data).toStrictEqual(new Uint8Array([1,2,3])),expect(e.cla).toBe(224),expect(e.ins).toBe(6),expect(e.p1).toBe(1),expect(e.p2).toBe(1)}),it("should return the correct APDU when the more and extend flags are set",()=>{const e=new n.SignTransactionCommand({serializedTransaction:new Uint8Array([1,2,3]),more:!0,extend:!0}).getApdu();expect(e.data).toStrictEqual(new Uint8Array([1,2,3])),expect(e.cla).toBe(224),expect(e.ins).toBe(6),expect(e.p1).toBe(1),expect(e.p2).toBe(3)})}),describe("parseResponse",()=>{it("should return Noting when the response is empty",()=>{const e=new n.SignTransactionCommand(a).parseResponse(new t.ApduResponse({statusCode:Uint8Array.from([144,0]),data:new Uint8Array([])}));expect(e).toStrictEqual((0,t.CommandResultFactory)({data:o.Nothing}))}),it("should return the signature when the response is not empty",()=>{const r=new n.SignTransactionCommand(a),e=new Uint8Array(Array.from({length:64},(x,c)=>c+1)),s=r.parseResponse(new t.ApduResponse({statusCode:Uint8Array.from([144,0]),data:e}));expect(s).toStrictEqual((0,t.CommandResultFactory)({data:(0,o.Just)(e)}))}),it("should return an error when the response data is not valid",()=>{const e=new n.SignTransactionCommand(a).parseResponse(new t.ApduResponse({statusCode:Uint8Array.from([144,0]),data:new Uint8Array([1])}));(0,t.isSuccessCommandResult)(e)?fail("The result should be an error."):expect(e.error).toEqual(new t.InvalidStatusWordError("Signature is missing"))})})});
|
|
2
|
+
//# sourceMappingURL=SignTransactionCommand.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/internal/app-binder/command/SignTransactionCommand.test.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n ApduResponse,\n CommandResultFactory,\n InvalidStatusWordError,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\nimport { Just, Nothing } from \"purify-ts\";\n\nimport {\n SignTransactionCommand,\n type SignTransactionCommandArgs,\n} from \"./SignTransactionCommand\";\n\ndescribe(\"SignTransactionCommand\", () => {\n const defaultArgs: SignTransactionCommandArgs = {\n serializedTransaction: new Uint8Array(),\n more: false,\n extend: false,\n };\n\n describe(\"getApdu\", () => {\n it(\"should return the correct APDU when the data is empty\", () => {\n // GIVEN\n const command = new SignTransactionCommand(defaultArgs);\n\n // WHEN\n const apdu = command.getApdu();\n\n // THEN\n expect(apdu.data).toStrictEqual(new Uint8Array());\n expect(apdu.cla).toBe(0xe0);\n expect(apdu.ins).toBe(0x06);\n expect(apdu.p1).toBe(0x01);\n expect(apdu.p2).toBe(0x00);\n });\n\n it(\"should return the correct APDU when the data is not empty\", () => {\n // GIVEN\n const command = new SignTransactionCommand({\n serializedTransaction: new Uint8Array([0x01, 0x02, 0x03]),\n more: false,\n extend: false,\n });\n\n // WHEN\n const apdu = command.getApdu();\n\n // THEN\n expect(apdu.data).toStrictEqual(new Uint8Array([0x01, 0x02, 0x03]));\n expect(apdu.cla).toBe(0xe0);\n expect(apdu.ins).toBe(0x06);\n expect(apdu.p1).toBe(0x01);\n expect(apdu.p2).toBe(0x00);\n });\n\n it(\"should return the correct APDU when the more flag is set\", () => {\n // GIVEN\n const command = new SignTransactionCommand({\n serializedTransaction: new Uint8Array([0x01, 0x02, 0x03]),\n more: true,\n extend: false,\n });\n\n // WHEN\n const apdu = command.getApdu();\n\n // THEN\n expect(apdu.data).toStrictEqual(new Uint8Array([0x01, 0x02, 0x03]));\n expect(apdu.cla).toBe(0xe0);\n expect(apdu.ins).toBe(0x06);\n expect(apdu.p1).toBe(0x01);\n expect(apdu.p2).toBe(0x02);\n });\n\n it(\"should return the correct APDU when the extend flag is set\", () => {\n // GIVEN\n const command = new SignTransactionCommand({\n serializedTransaction: new Uint8Array([0x01, 0x02, 0x03]),\n more: false,\n extend: true,\n });\n\n // WHEN\n const apdu = command.getApdu();\n\n // THEN\n expect(apdu.data).toStrictEqual(new Uint8Array([0x01, 0x02, 0x03]));\n expect(apdu.cla).toBe(0xe0);\n expect(apdu.ins).toBe(0x06);\n expect(apdu.p1).toBe(0x01);\n expect(apdu.p2).toBe(0x01);\n });\n\n it(\"should return the correct APDU when the more and extend flags are set\", () => {\n // GIVEN\n const command = new SignTransactionCommand({\n serializedTransaction: new Uint8Array([0x01, 0x02, 0x03]),\n more: true,\n extend: true,\n });\n\n // WHEN\n const apdu = command.getApdu();\n\n // THEN\n expect(apdu.data).toStrictEqual(new Uint8Array([0x01, 0x02, 0x03]));\n expect(apdu.cla).toBe(0xe0);\n expect(apdu.ins).toBe(0x06);\n expect(apdu.p1).toBe(0x01);\n expect(apdu.p2).toBe(0x03);\n });\n });\n\n describe(\"parseResponse\", () => {\n it(\"should return Noting when the response is empty\", () => {\n // GIVEN\n const command = new SignTransactionCommand(defaultArgs);\n\n // WHEN\n const result = command.parseResponse(\n new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: new Uint8Array([]),\n }),\n );\n\n // THEN\n expect(result).toStrictEqual(CommandResultFactory({ data: Nothing }));\n });\n\n it(\"should return the signature when the response is not empty\", () => {\n // GIVEN\n const command = new SignTransactionCommand(defaultArgs);\n const data = new Uint8Array(Array.from({ length: 64 }, (_, i) => i + 1));\n\n // WHEN\n const result = command.parseResponse(\n new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data,\n }),\n );\n\n // THEN\n expect(result).toStrictEqual(\n CommandResultFactory({\n data: Just(data),\n }),\n );\n });\n\n it(\"should return an error when the response data is not valid\", () => {\n // GIVEN\n const command = new SignTransactionCommand(defaultArgs);\n\n // WHEN\n const result = command.parseResponse(\n new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: new Uint8Array([0x01]),\n }),\n );\n\n // THEN\n if (isSuccessCommandResult(result))\n fail(\"The result should be an error.\");\n else {\n expect(result.error).toEqual(\n new InvalidStatusWordError(\"Signature is missing\"),\n );\n }\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_device_management_kit", "import_purify_ts", "import_SignTransactionCommand", "defaultArgs", "apdu", "result", "command", "data", "_", "i"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var c=require("@ledgerhq/device-management-kit"),t=require("./solanaAppErrors");describe("SolanaAppCommandError",()=>{it("should correctly instantiate with a message and error code",()=>{const e="Invalid data",r="6A80",o=new t.SolanaAppCommandError({message:e,errorCode:r});expect(o).toBeInstanceOf(t.SolanaAppCommandError),expect(o.message).toBe(e),expect(o.customErrorCode).toBe(r),expect(o._tag).toBe("SolanaAppCommandError")}),it("should correctly instantiate without an error code",()=>{const e="Some generic error",r=new t.SolanaAppCommandError({message:e,errorCode:void 0});expect(r).toBeInstanceOf(t.SolanaAppCommandError),expect(r.message).toBe(e),expect(r.customErrorCode).toBeUndefined(),expect(r._tag).toBe("SolanaAppCommandError")}),it("should handle default message if none is provided",()=>{const e=new t.SolanaAppCommandError({message:"An error occurred during device exchange.",errorCode:"6A80"});expect(e).toBeInstanceOf(t.SolanaAppCommandError),expect(e.message).toBe("An error occurred during device exchange."),expect(e.customErrorCode).toBe("6A80"),expect(e._tag).toBe("SolanaAppCommandError")}),it("should extend DeviceExchangeError",()=>{const e="Security status not satisfied",r="6982",o=new t.SolanaAppCommandError({message:e,errorCode:r});expect(o).toBeInstanceOf(c.DeviceExchangeError),expect(o).toBeInstanceOf(t.SolanaAppCommandError),expect(o._tag).toBe("SolanaAppCommandError"),expect(o.message).toBe(e),expect(o.customErrorCode).toBe(r)}),it("should allow custom properties to be checked",()=>{const e="Invalid parameter",r="6B00",o=new t.SolanaAppCommandError({message:e,errorCode:r});expect(o.customErrorCode).toBe("6B00"),expect(o.customErrorCode).not.toBe("6A80")})});
|
|
2
|
+
//# sourceMappingURL=solanaAppError.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../src/internal/app-binder/command/utils/solanaAppError.test.ts"],
|
|
4
|
+
"sourcesContent": ["import { DeviceExchangeError } from \"@ledgerhq/device-management-kit\";\n\nimport { SolanaAppCommandError } from \"./solanaAppErrors\";\n\ndescribe(\"SolanaAppCommandError\", () => {\n it(\"should correctly instantiate with a message and error code\", () => {\n const message = \"Invalid data\";\n const errorCode = \"6A80\";\n\n const error = new SolanaAppCommandError({\n message,\n errorCode,\n });\n\n expect(error).toBeInstanceOf(SolanaAppCommandError);\n expect(error.message).toBe(message);\n expect(error.customErrorCode).toBe(errorCode);\n expect(error._tag).toBe(\"SolanaAppCommandError\");\n });\n\n it(\"should correctly instantiate without an error code\", () => {\n const message = \"Some generic error\";\n\n const error = new SolanaAppCommandError({\n message,\n errorCode: undefined,\n });\n\n expect(error).toBeInstanceOf(SolanaAppCommandError);\n expect(error.message).toBe(message);\n expect(error.customErrorCode).toBeUndefined();\n expect(error._tag).toBe(\"SolanaAppCommandError\");\n });\n\n it(\"should handle default message if none is provided\", () => {\n const error = new SolanaAppCommandError({\n message: \"An error occurred during device exchange.\",\n errorCode: \"6A80\",\n });\n\n expect(error).toBeInstanceOf(SolanaAppCommandError);\n expect(error.message).toBe(\"An error occurred during device exchange.\");\n expect(error.customErrorCode).toBe(\"6A80\");\n expect(error._tag).toBe(\"SolanaAppCommandError\");\n });\n\n it(\"should extend DeviceExchangeError\", () => {\n const message = \"Security status not satisfied\";\n const errorCode = \"6982\";\n\n const error = new SolanaAppCommandError({\n message,\n errorCode,\n });\n\n expect(error).toBeInstanceOf(DeviceExchangeError);\n expect(error).toBeInstanceOf(SolanaAppCommandError);\n expect(error._tag).toBe(\"SolanaAppCommandError\");\n expect(error.message).toBe(message);\n expect(error.customErrorCode).toBe(errorCode);\n });\n\n it(\"should allow custom properties to be checked\", () => {\n const message = \"Invalid parameter\";\n const errorCode = \"6B00\";\n\n const error = new SolanaAppCommandError({\n message,\n errorCode,\n });\n\n expect(error.customErrorCode).toBe(\"6B00\");\n expect(error.customErrorCode).not.toBe(\"6A80\");\n });\n});\n"],
|
|
5
|
+
"mappings": "aAAA,IAAAA,EAAoC,2CAEpCC,EAAsC,6BAEtC,SAAS,wBAAyB,IAAM,CACtC,GAAG,6DAA8D,IAAM,CACrE,MAAMC,EAAU,eACVC,EAAY,OAEZC,EAAQ,IAAI,wBAAsB,CACtC,QAAAF,EACA,UAAAC,CACF,CAAC,EAED,OAAOC,CAAK,EAAE,eAAe,uBAAqB,EAClD,OAAOA,EAAM,OAAO,EAAE,KAAKF,CAAO,EAClC,OAAOE,EAAM,eAAe,EAAE,KAAKD,CAAS,EAC5C,OAAOC,EAAM,IAAI,EAAE,KAAK,uBAAuB,CACjD,CAAC,EAED,GAAG,qDAAsD,IAAM,CAC7D,MAAMF,EAAU,qBAEVE,EAAQ,IAAI,wBAAsB,CACtC,QAAAF,EACA,UAAW,MACb,CAAC,EAED,OAAOE,CAAK,EAAE,eAAe,uBAAqB,EAClD,OAAOA,EAAM,OAAO,EAAE,KAAKF,CAAO,EAClC,OAAOE,EAAM,eAAe,EAAE,cAAc,EAC5C,OAAOA,EAAM,IAAI,EAAE,KAAK,uBAAuB,CACjD,CAAC,EAED,GAAG,oDAAqD,IAAM,CAC5D,MAAMA,EAAQ,IAAI,wBAAsB,CACtC,QAAS,4CACT,UAAW,MACb,CAAC,EAED,OAAOA,CAAK,EAAE,eAAe,uBAAqB,EAClD,OAAOA,EAAM,OAAO,EAAE,KAAK,2CAA2C,EACtE,OAAOA,EAAM,eAAe,EAAE,KAAK,MAAM,EACzC,OAAOA,EAAM,IAAI,EAAE,KAAK,uBAAuB,CACjD,CAAC,EAED,GAAG,oCAAqC,IAAM,CAC5C,MAAMF,EAAU,gCACVC,EAAY,OAEZC,EAAQ,IAAI,wBAAsB,CACtC,QAAAF,EACA,UAAAC,CACF,CAAC,EAED,OAAOC,CAAK,EAAE,eAAe,qBAAmB,EAChD,OAAOA,CAAK,EAAE,eAAe,uBAAqB,EAClD,OAAOA,EAAM,IAAI,EAAE,KAAK,uBAAuB,EAC/C,OAAOA,EAAM,OAAO,EAAE,KAAKF,CAAO,EAClC,OAAOE,EAAM,eAAe,EAAE,KAAKD,CAAS,CAC9C,CAAC,EAED,GAAG,+CAAgD,IAAM,CACvD,MAAMD,EAAU,oBACVC,EAAY,OAEZC,EAAQ,IAAI,wBAAsB,CACtC,QAAAF,EACA,UAAAC,CACF,CAAC,EAED,OAAOC,EAAM,eAAe,EAAE,KAAK,MAAM,EACzC,OAAOA,EAAM,eAAe,EAAE,IAAI,KAAK,MAAM,CAC/C,CAAC,CACH,CAAC",
|
|
6
|
+
"names": ["import_device_management_kit", "import_solanaAppErrors", "message", "errorCode", "error"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var s=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var t=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var c=(e,r)=>{for(var o in r)s(e,o,{get:r[o],enumerable:!0})},i=(e,r,o,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let a of t(r))!p.call(e,a)&&a!==o&&s(e,a,{get:()=>r[a],enumerable:!(n=d(r,a))||n.enumerable});return e};var E=e=>i(s({},"__esModule",{value:!0}),e);var l={};c(l,{SolanaAppCommandError:()=>A,solanaAppErrors:()=>g});module.exports=E(l);var m=require("@ledgerhq/device-management-kit");const g={6700:{message:"Incorrect length"},6982:{message:"Security status not satisfied (Canceled by user)"},"6A80":{message:"Invalid data"},"6A81":{message:"Invalid off-chain message header"},"6A82":{message:"Invalid off-chain message format"},"6B00":{message:"Incorrect parameter P1 or P2"}};class A extends m.DeviceExchangeError{constructor({message:r,errorCode:o}){super({tag:"SolanaAppCommandError",message:r||"An error occurred during device exchange.",errorCode:void 0}),this.customErrorCode=o||void 0}customErrorCode}0&&(module.exports={SolanaAppCommandError,solanaAppErrors});
|
|
2
|
+
//# sourceMappingURL=solanaAppErrors.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../src/internal/app-binder/command/utils/solanaAppErrors.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n type CommandErrorArgs,\n type CommandErrors,\n DeviceExchangeError,\n type DmkError,\n} from \"@ledgerhq/device-management-kit\";\n\nexport type SolanaAppErrorCodes =\n | \"6700\"\n | \"6982\"\n | \"6A80\"\n | \"6A81\"\n | \"6A82\"\n | \"6B00\";\n\nexport const solanaAppErrors: CommandErrors<SolanaAppErrorCodes> = {\n \"6700\": { message: \"Incorrect length\" },\n \"6982\": { message: \"Security status not satisfied (Canceled by user)\" },\n \"6A80\": { message: \"Invalid data\" },\n \"6A81\": { message: \"Invalid off-chain message header\" },\n \"6A82\": { message: \"Invalid off-chain message format\" },\n \"6B00\": { message: \"Incorrect parameter P1 or P2\" },\n};\n\nexport class SolanaAppCommandError\n extends DeviceExchangeError<void>\n implements DmkError\n{\n constructor({\n message,\n errorCode,\n }: CommandErrorArgs<SolanaAppErrorCodes | void>) {\n super({\n tag: \"SolanaAppCommandError\",\n message: message || \"An error occurred during device exchange.\",\n errorCode: undefined,\n });\n this.customErrorCode = errorCode || undefined;\n }\n customErrorCode?: SolanaAppErrorCodes;\n}\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,2BAAAE,EAAA,oBAAAC,IAAA,eAAAC,EAAAJ,GAAA,IAAAK,EAKO,2CAUA,MAAMF,EAAsD,CACjE,KAAQ,CAAE,QAAS,kBAAmB,EACtC,KAAQ,CAAE,QAAS,kDAAmD,EACtE,OAAQ,CAAE,QAAS,cAAe,EAClC,OAAQ,CAAE,QAAS,kCAAmC,EACtD,OAAQ,CAAE,QAAS,kCAAmC,EACtD,OAAQ,CAAE,QAAS,8BAA+B,CACpD,EAEO,MAAMD,UACH,qBAEV,CACE,YAAY,CACV,QAAAI,EACA,UAAAC,CACF,EAAiD,CAC/C,MAAM,CACJ,IAAK,wBACL,QAASD,GAAW,4CACpB,UAAW,MACb,CAAC,EACD,KAAK,gBAAkBC,GAAa,MACtC,CACA,eACF",
|
|
6
|
+
"names": ["solanaAppErrors_exports", "__export", "SolanaAppCommandError", "solanaAppErrors", "__toCommonJS", "import_device_management_kit", "message", "errorCode"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var o=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var M=(s,n)=>{for(var i in n)o(s,i,{get:n[i],enumerable:!0})},d=(s,n,i,e)=>{if(n&&typeof n=="object"||typeof n=="function")for(let t of c(n))!l.call(s,t)&&t!==i&&o(s,t,{get:()=>n[t],enumerable:!(e=S(n,t))||e.enumerable});return s};var m=s=>d(o({},"__esModule",{value:!0}),s);var D={};M(D,{SignMessageDeviceAction:()=>A});module.exports=m(D);var r=require("@ledgerhq/device-management-kit"),g=require("purify-ts"),a=require("xstate"),u=require("../../../app-binder/task/SendSignMessageTask");class A extends r.XStateDeviceAction{makeStateMachine(n){const{signMessage:i}=this.extractDependencies(n);return(0,a.setup)({types:{input:{},context:{},output:{}},actors:{openAppStateMachine:new r.OpenAppDeviceAction({input:{appName:"Solana"}}).makeStateMachine(n),signMessage:(0,a.fromPromise)(i)},guards:{noInternalError:({context:e})=>e._internalState.error===null,messageSizeWithinLimit:({context:e})=>5+new TextEncoder().encode(e.input.message).length<=255},actions:{assignErrorFromEvent:(0,a.assign)({_internalState:({context:e,event:t})=>({...e._internalState,error:t.data})}),assignErrorMessageTooBig:(0,a.assign)({_internalState:({context:e})=>({...e._internalState,error:{_tag:"InvalidMessageSizeError",errorCode:"MessageTooLarge",message:"The APDU command exceeds the maximum allowable size (255 bytes)"}})})}}).createMachine({id:"SignMessageDeviceAction",initial:"OpenAppDeviceAction",context:({input:e})=>({input:e,intermediateValue:{requiredUserInteraction:r.UserInteractionRequired.None},_internalState:{error:null,signature:null}}),states:{OpenAppDeviceAction:{exit:(0,a.assign)({intermediateValue:{requiredUserInteraction:r.UserInteractionRequired.None}}),invoke:{id:"openAppStateMachine",input:{appName:"Solana"},src:"openAppStateMachine",onSnapshot:{actions:(0,a.assign)({intermediateValue:({event:e})=>e.snapshot.context.intermediateValue})},onDone:{actions:(0,a.assign)({_internalState:({event:e,context:t})=>e.output.caseOf({Right:()=>t._internalState,Left:p=>({...t._internalState,error:p})})}),target:"CheckOpenAppDeviceActionResult"},onError:{target:"Error",actions:"assignErrorFromEvent"}}},CheckOpenAppDeviceActionResult:{always:[{target:"CheckMessageSize",guard:"noInternalError"},"Error"]},CheckMessageSize:{always:[{target:"SignMessage",guard:"messageSizeWithinLimit"},{target:"Error",actions:"assignErrorMessageTooBig"}]},SignMessage:{entry:(0,a.assign)({intermediateValue:{requiredUserInteraction:r.UserInteractionRequired.SignPersonalMessage}}),exit:(0,a.assign)({intermediateValue:{requiredUserInteraction:r.UserInteractionRequired.None}}),invoke:{id:"signMessage",src:"signMessage",input:({context:e})=>({derivationPath:e.input.derivationPath,sendingData:new TextEncoder().encode(e.input.message)}),onDone:{target:"SignMessageResultCheck",actions:[(0,a.assign)({_internalState:({event:e,context:t})=>(0,r.isSuccessCommandResult)(e.output)?{...t._internalState,signature:e.output.data}:{...t._internalState,error:e.output.error}})]},onError:{target:"Error",actions:"assignErrorFromEvent"}}},SignMessageResultCheck:{always:[{guard:"noInternalError",target:"Success"},{target:"Error"}]},Success:{type:"final"},Error:{type:"final"}},output:({context:e})=>e._internalState.signature?(0,g.Right)(e._internalState.signature):(0,g.Left)(e._internalState.error||new r.UnknownDAError("No error in final state"))})}extractDependencies(n){return{signMessage:async e=>await new u.SendSignMessageTask(n,e.input).run()}}}0&&(module.exports={SignMessageDeviceAction});
|
|
2
|
+
//# sourceMappingURL=SignMessageDeviceAction.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../src/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n type CommandResult,\n //CommandResultStatus,\n type DeviceActionStateMachine,\n type InternalApi,\n isSuccessCommandResult,\n OpenAppDeviceAction,\n type StateMachineTypes,\n UnknownDAError,\n UserInteractionRequired,\n XStateDeviceAction,\n} from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { assign, fromPromise, setup } from \"xstate\";\n\nimport {\n type SignMessageDAError,\n type SignMessageDAInput,\n type SignMessageDAIntermediateValue,\n type SignMessageDAInternalState,\n type SignMessageDAOutput,\n} from \"@api/app-binder/SignMessageDeviceActionTypes\";\nimport { type Signature } from \"@api/model/Signature\";\nimport {\n SendSignMessageTask,\n type SendSignMessageTaskArgs,\n} from \"@internal/app-binder/task/SendSignMessageTask\";\n\nexport type MachineDependencies = {\n readonly signMessage: (arg0: {\n input: SendSignMessageTaskArgs;\n }) => Promise<CommandResult<Signature>>;\n};\n\nexport type ExtractMachineDependencies = (\n internalApi: InternalApi,\n) => MachineDependencies;\n\nexport class SignMessageDeviceAction extends XStateDeviceAction<\n SignMessageDAOutput,\n SignMessageDAInput,\n SignMessageDAError,\n SignMessageDAIntermediateValue,\n SignMessageDAInternalState\n> {\n makeStateMachine(\n internalApi: InternalApi,\n ): DeviceActionStateMachine<\n SignMessageDAOutput,\n SignMessageDAInput,\n SignMessageDAError,\n SignMessageDAIntermediateValue,\n SignMessageDAInternalState\n > {\n type types = StateMachineTypes<\n SignMessageDAOutput,\n SignMessageDAInput,\n SignMessageDAError,\n SignMessageDAIntermediateValue,\n SignMessageDAInternalState\n >;\n\n const { signMessage } = this.extractDependencies(internalApi);\n\n return setup({\n types: {\n input: {} as types[\"input\"],\n context: {} as types[\"context\"],\n output: {} as types[\"output\"],\n },\n actors: {\n openAppStateMachine: new OpenAppDeviceAction({\n input: { appName: \"Solana\" },\n }).makeStateMachine(internalApi),\n signMessage: fromPromise(signMessage),\n },\n guards: {\n noInternalError: ({ context }) => context._internalState.error === null,\n messageSizeWithinLimit: ({ context }) => {\n const messageSize = new TextEncoder().encode(\n context.input.message,\n ).length;\n const apduHeaderSize = 5;\n\n return apduHeaderSize + messageSize <= 255;\n },\n },\n actions: {\n assignErrorFromEvent: assign({\n _internalState: ({ context, event }) => ({\n ...context._internalState,\n error: event[\"data\"] as SignMessageDAError,\n }),\n }),\n assignErrorMessageTooBig: assign({\n _internalState: ({ context }) => ({\n ...context._internalState,\n error: {\n _tag: \"InvalidMessageSizeError\",\n errorCode: \"MessageTooLarge\",\n message:\n \"The APDU command exceeds the maximum allowable size (255 bytes)\",\n } as SignMessageDAError,\n }),\n }),\n },\n }).createMachine({\n id: \"SignMessageDeviceAction\",\n initial: \"OpenAppDeviceAction\",\n context: ({ input }) => {\n return {\n input,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n _internalState: {\n error: null,\n signature: null,\n },\n };\n },\n states: {\n OpenAppDeviceAction: {\n exit: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n }),\n invoke: {\n id: \"openAppStateMachine\",\n input: { appName: \"Solana\" },\n src: \"openAppStateMachine\",\n onSnapshot: {\n actions: assign({\n intermediateValue: ({ event }) =>\n event.snapshot.context.intermediateValue,\n }),\n },\n onDone: {\n actions: assign({\n _internalState: ({ event, context }) => {\n return event.output.caseOf<SignMessageDAInternalState>({\n Right: () => context._internalState,\n Left: (error) => ({\n ...context._internalState,\n error,\n }),\n });\n },\n }),\n target: \"CheckOpenAppDeviceActionResult\",\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n CheckOpenAppDeviceActionResult: {\n always: [\n {\n target: \"CheckMessageSize\",\n guard: \"noInternalError\",\n },\n \"Error\",\n ],\n },\n CheckMessageSize: {\n always: [\n {\n target: \"SignMessage\",\n guard: \"messageSizeWithinLimit\",\n },\n {\n target: \"Error\",\n actions: \"assignErrorMessageTooBig\",\n },\n ],\n },\n SignMessage: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction:\n UserInteractionRequired.SignPersonalMessage,\n },\n }),\n exit: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n }),\n invoke: {\n id: \"signMessage\",\n src: \"signMessage\",\n input: ({ context }) => ({\n derivationPath: context.input.derivationPath,\n sendingData: new TextEncoder().encode(context.input.message),\n }),\n onDone: {\n target: \"SignMessageResultCheck\",\n actions: [\n assign({\n _internalState: ({ event, context }) => {\n if (isSuccessCommandResult(event.output)) {\n return {\n ...context._internalState,\n signature: event.output.data,\n };\n }\n return {\n ...context._internalState,\n error: event.output.error,\n };\n },\n }),\n ],\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n SignMessageResultCheck: {\n always: [\n { guard: \"noInternalError\", target: \"Success\" },\n { target: \"Error\" },\n ],\n },\n Success: {\n type: \"final\",\n },\n Error: {\n type: \"final\",\n },\n },\n output: ({ context }) =>\n context._internalState.signature\n ? Right(context._internalState.signature)\n : Left(\n context._internalState.error ||\n new UnknownDAError(\"No error in final state\"),\n ),\n });\n }\n\n extractDependencies(internalApi: InternalApi): MachineDependencies {\n const signMessage = async (arg0: { input: SendSignMessageTaskArgs }) => {\n const result = await new SendSignMessageTask(\n internalApi,\n arg0.input,\n ).run();\n return result;\n };\n\n return {\n signMessage,\n };\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["SignMessageDeviceAction_exports", "__export", "SignMessageDeviceAction", "__toCommonJS", "import_device_management_kit", "import_purify_ts", "import_xstate", "import_SendSignMessageTask", "internalApi", "signMessage", "context", "event", "input", "error", "arg0"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var e=require("@ledgerhq/device-management-kit"),m=require("@ledgerhq/device-management-kit"),o=require("../../../app-binder/device-action/__test-utils__/makeInternalApi"),c=require("../../../app-binder/device-action/__test-utils__/setupOpenAppDAMock"),d=require("../../../app-binder/device-action/__test-utils__/testDeviceActionStates"),l=require("../../../app-binder/device-action/SignMessage/SignMessageDeviceAction");jest.mock("@ledgerhq/device-management-kit",()=>({...jest.requireActual("@ledgerhq/device-management-kit"),OpenAppDeviceAction:jest.fn(()=>({makeStateMachine:jest.fn()}))}));describe("SignMessageDeviceAction",()=>{const a=jest.fn();function p(){return{signMessage:a}}beforeEach(()=>{jest.resetAllMocks()}),describe("Success case",()=>{it("should call external dependencies with the correct parameters",t=>{(0,c.setupOpenAppDAMock)();const n=new l.SignMessageDeviceAction({input:{derivationPath:"44'/501'/0'/0'",message:"Hello world"}});jest.spyOn(n,"extractDependencies").mockImplementation(()=>p());const i=new Uint8Array([]);a.mockResolvedValueOnce((0,e.CommandResultFactory)({data:i}));const s=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.ConfirmOpenApp},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignPersonalMessage},status:e.DeviceActionStatus.Pending},{output:i,status:e.DeviceActionStatus.Completed}],{observable:r}=(0,d.testDeviceActionStates)(n,s,(0,o.makeDeviceActionInternalApiMock)());r.subscribe({complete:()=>{try{expect(a).toHaveBeenCalledWith(expect.objectContaining({input:expect.objectContaining({derivationPath:"44'/501'/0'/0'",sendingData:new TextEncoder().encode("Hello world")})})),t()}catch(u){t(u)}},error:u=>{t(u)}})})}),describe("error cases",()=>{it("Error if the open app fails",t=>{(0,c.setupOpenAppDAMock)(new e.UnknownDeviceExchangeError("Mocked error"));const n=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.ConfirmOpenApp}},{status:e.DeviceActionStatus.Error,error:new e.UnknownDeviceExchangeError("Mocked error")}],i=new l.SignMessageDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",message:"Hello world"}});jest.spyOn(i,"extractDependencies").mockImplementation(()=>p());const{observable:s}=(0,d.testDeviceActionStates)(i,n,(0,o.makeDeviceActionInternalApiMock)());s.subscribe({complete:()=>{try{expect(a).not.toHaveBeenCalled(),t()}catch(r){t(r)}},error:r=>{t(r)}})}),it("Error if the signMessage fails",t=>{(0,c.setupOpenAppDAMock)();const n=new l.SignMessageDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",message:"Hello world"}});jest.spyOn(n,"extractDependencies").mockImplementation(()=>p()),a.mockResolvedValueOnce((0,e.CommandResultFactory)({error:new e.UnknownDeviceExchangeError("Mocked error")}));const i=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.ConfirmOpenApp}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignPersonalMessage}},{status:e.DeviceActionStatus.Error,error:new e.UnknownDeviceExchangeError("Mocked error")}],{observable:s}=(0,d.testDeviceActionStates)(n,i,(0,o.makeDeviceActionInternalApiMock)());s.subscribe({complete:()=>{try{expect(a).toHaveBeenCalled(),t()}catch(r){t(r)}},error:r=>{t(r)}})}),it("Return a Left if the final state has no signature",t=>{(0,c.setupOpenAppDAMock)();const n=new l.SignMessageDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",message:"Hello world"}});jest.spyOn(n,"extractDependencies").mockImplementation(()=>p()),a.mockResolvedValueOnce((0,e.CommandResultFactory)({data:void 0}));const i=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.ConfirmOpenApp}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignPersonalMessage}},{status:e.DeviceActionStatus.Error,error:new m.UnknownDAError("No error in final state")}],{observable:s}=(0,d.testDeviceActionStates)(n,i,(0,o.makeDeviceActionInternalApiMock)());s.subscribe({complete:()=>{try{expect(a).toHaveBeenCalledWith(expect.objectContaining({input:expect.objectContaining({derivationPath:"44'/60'/0'/0/0",sendingData:new TextEncoder().encode("Hello world")})})),t()}catch(r){t(r)}},error:r=>{t(r)}})})})});
|
|
2
|
+
//# sourceMappingURL=SignMessageDeviceAction.test.js.map
|