@ledgerhq/device-signer-kit-ethereum 0.0.0-signer-eth-plugin-fix-20250331141239 → 0.0.0-web-ble-29-08---20250829104351
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +53 -0
- package/lib/cjs/api/SignerEth.js +1 -1
- package/lib/cjs/api/SignerEth.js.map +1 -1
- package/lib/cjs/api/SignerEthBuilder.js +1 -1
- package/lib/cjs/api/SignerEthBuilder.js.map +3 -3
- package/lib/cjs/api/SignerEthBuilder.test.js +1 -1
- package/lib/cjs/api/SignerEthBuilder.test.js.map +3 -3
- package/lib/cjs/api/app-binder/SignDelegationAuthorizationTypes.js +2 -0
- package/lib/cjs/api/app-binder/SignDelegationAuthorizationTypes.js.map +7 -0
- package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js +1 -1
- package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js.map +2 -2
- package/lib/cjs/api/app-binder/SignTypedDataDeviceActionTypes.js +1 -1
- package/lib/cjs/api/app-binder/SignTypedDataDeviceActionTypes.js.map +2 -2
- package/lib/cjs/api/index.js +1 -1
- package/lib/cjs/api/index.js.map +2 -2
- package/lib/cjs/api/model/AddressOptions.js +1 -1
- package/lib/cjs/api/model/AddressOptions.js.map +1 -1
- package/lib/cjs/api/model/ClearSigningType.js +2 -0
- package/lib/cjs/api/model/ClearSigningType.js.map +7 -0
- package/lib/cjs/api/model/MessageOptions.js +2 -0
- package/lib/cjs/api/model/MessageOptions.js.map +7 -0
- package/lib/cjs/api/model/TransactionOptions.js +1 -1
- package/lib/cjs/api/model/TransactionOptions.js.map +1 -1
- package/lib/cjs/api/model/TypedDataOptions.js +2 -0
- package/lib/cjs/api/model/TypedDataOptions.js.map +7 -0
- package/lib/cjs/internal/DefaultSignerEth.js +1 -1
- package/lib/cjs/internal/DefaultSignerEth.js.map +3 -3
- package/lib/cjs/internal/DefaultSignerEth.test.js +1 -1
- package/lib/cjs/internal/DefaultSignerEth.test.js.map +3 -3
- package/lib/cjs/internal/address/di/addressModule.js +1 -1
- package/lib/cjs/internal/address/di/addressModule.js.map +3 -3
- package/lib/cjs/internal/address/di/addressModule.test.js +1 -1
- package/lib/cjs/internal/address/di/addressModule.test.js.map +2 -2
- package/lib/cjs/internal/address/use-case/GetAddressUseCase.js +1 -1
- package/lib/cjs/internal/address/use-case/GetAddressUseCase.js.map +2 -2
- package/lib/cjs/internal/address/use-case/GetAddressUseCase.test.js +1 -1
- package/lib/cjs/internal/address/use-case/GetAddressUseCase.test.js.map +2 -2
- package/lib/cjs/internal/app-binder/EthAppBinder.js +1 -1
- package/lib/cjs/internal/app-binder/EthAppBinder.js.map +3 -3
- package/lib/cjs/internal/app-binder/EthAppBinder.test.js +1 -1
- package/lib/cjs/internal/app-binder/EthAppBinder.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/command/ProvideProxyInfoCommand.js +2 -0
- package/lib/cjs/internal/app-binder/command/ProvideProxyInfoCommand.js.map +7 -0
- package/lib/cjs/internal/app-binder/command/ProvideProxyInfoCommand.test.js +2 -0
- package/lib/cjs/internal/app-binder/command/ProvideProxyInfoCommand.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/command/SignAuthorizationDelegationCommand.js +2 -0
- package/lib/cjs/internal/app-binder/command/SignAuthorizationDelegationCommand.js.map +7 -0
- package/lib/cjs/internal/app-binder/command/SignAuthorizationDelegationCommand.test.js +2 -0
- package/lib/cjs/internal/app-binder/command/SignAuthorizationDelegationCommand.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js.map +3 -3
- package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.js.map +3 -3
- package/lib/cjs/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.test.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.test.js.map +2 -2
- package/lib/cjs/internal/app-binder/device-action/__test-utils__/makeInternalApi.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/__test-utils__/makeInternalApi.js.map +3 -3
- package/lib/cjs/internal/app-binder/di/appBinderModule.js +1 -1
- package/lib/cjs/internal/app-binder/di/appBinderModule.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/BuildEIP712ContextTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/BuildEIP712ContextTask.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/BuildEIP712ContextTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/BuildEIP712ContextTask.test.js.map +2 -2
- package/lib/cjs/internal/app-binder/task/BuildSubContextTask.js +2 -0
- package/lib/cjs/internal/app-binder/task/BuildSubContextTask.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/BuildSubContextTask.test.js +2 -0
- package/lib/cjs/internal/app-binder/task/BuildSubContextTask.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/GetWeb3CheckTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/GetWeb3CheckTask.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/GetWeb3CheckTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/GetWeb3CheckTask.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/PreBuildContextTask.js +2 -0
- package/lib/cjs/internal/app-binder/task/PreBuildContextTask.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.js.map +2 -2
- package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.test.js.map +2 -2
- package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/SendPayloadInChunksTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/SendPayloadInChunksTask.js.map +1 -1
- package/lib/cjs/internal/app-binder/task/SendSignAuthorizationDelegationTask.js +2 -0
- package/lib/cjs/internal/app-binder/task/SendSignAuthorizationDelegationTask.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/SendSignAuthorizationDelegationTask.test.js +2 -0
- package/lib/cjs/internal/app-binder/task/SendSignAuthorizationDelegationTask.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/SendSignTransactionTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/SendSignTransactionTask.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/SendSignTransactionTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/SendSignTransactionTask.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/SignTypedDataLegacyTask.js +2 -0
- package/lib/cjs/internal/app-binder/task/SignTypedDataLegacyTask.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/SignTypedDataLegacyTask.test.js +2 -0
- package/lib/cjs/internal/app-binder/task/SignTypedDataLegacyTask.test.js.map +7 -0
- package/lib/cjs/internal/di.js +1 -1
- package/lib/cjs/internal/di.js.map +3 -3
- package/lib/cjs/internal/eip7702/di/eip7702Module.js +2 -0
- package/lib/cjs/internal/eip7702/di/eip7702Module.js.map +7 -0
- package/lib/cjs/internal/eip7702/di/eip7702Module.test.js +2 -0
- package/lib/cjs/internal/eip7702/di/eip7702Module.test.js.map +7 -0
- package/lib/cjs/internal/eip7702/di/eip7702Types.js +2 -0
- package/lib/cjs/internal/eip7702/di/eip7702Types.js.map +7 -0
- package/lib/cjs/internal/eip7702/use-case/SignDelegationAuthorizationUseCase.js +2 -0
- package/lib/cjs/internal/eip7702/use-case/SignDelegationAuthorizationUseCase.js.map +7 -0
- package/lib/cjs/internal/eip7702/use-case/SignDelegationAuthorizationUseCase.test.js +2 -0
- package/lib/cjs/internal/eip7702/use-case/SignDelegationAuthorizationUseCase.test.js.map +7 -0
- package/lib/cjs/internal/message/di/messageModule.js +1 -1
- package/lib/cjs/internal/message/di/messageModule.js.map +3 -3
- package/lib/cjs/internal/message/di/messageModule.test.js +1 -1
- package/lib/cjs/internal/message/di/messageModule.test.js.map +2 -2
- package/lib/cjs/internal/message/use-case/SignMessageUseCase.js +1 -1
- package/lib/cjs/internal/message/use-case/SignMessageUseCase.js.map +3 -3
- package/lib/cjs/internal/message/use-case/SignMessageUseCase.test.js +1 -1
- package/lib/cjs/internal/message/use-case/SignMessageUseCase.test.js.map +2 -2
- package/lib/cjs/internal/shared/utils/ApplicationChecker.js +1 -1
- package/lib/cjs/internal/shared/utils/ApplicationChecker.js.map +3 -3
- package/lib/cjs/internal/shared/utils/ApplicationChecker.test.js +1 -1
- package/lib/cjs/internal/shared/utils/ApplicationChecker.test.js.map +2 -2
- package/lib/cjs/internal/transaction/di/transactionModule.js +1 -1
- package/lib/cjs/internal/transaction/di/transactionModule.js.map +3 -3
- package/lib/cjs/internal/transaction/di/transactionModule.test.js +1 -1
- package/lib/cjs/internal/transaction/di/transactionModule.test.js.map +2 -2
- package/lib/cjs/internal/transaction/service/mapper/EthersTransactionMapperService.js +2 -0
- package/lib/cjs/internal/transaction/service/mapper/EthersTransactionMapperService.js.map +7 -0
- package/lib/cjs/internal/transaction/service/mapper/EthersTransactionMapperService.test.js +2 -0
- package/lib/cjs/internal/transaction/service/mapper/EthersTransactionMapperService.test.js.map +7 -0
- package/lib/cjs/internal/transaction/service/mapper/TransactionMapperService.js +1 -1
- package/lib/cjs/internal/transaction/service/mapper/TransactionMapperService.js.map +3 -3
- package/lib/cjs/internal/transaction/service/parser/TransactionParserService.js +1 -1
- package/lib/cjs/internal/transaction/service/parser/TransactionParserService.js.map +3 -3
- package/lib/cjs/internal/transaction/service/parser/TransactionParserService.test.js +1 -1
- package/lib/cjs/internal/transaction/service/parser/TransactionParserService.test.js.map +3 -3
- package/lib/cjs/internal/typed-data/di/typedDataModule.js +1 -1
- package/lib/cjs/internal/typed-data/di/typedDataModule.js.map +3 -3
- package/lib/cjs/internal/typed-data/di/typedDataModule.test.js +1 -1
- package/lib/cjs/internal/typed-data/di/typedDataModule.test.js.map +2 -2
- package/lib/cjs/internal/typed-data/service/DefaultTypedDataParserService.js +1 -1
- package/lib/cjs/internal/typed-data/service/DefaultTypedDataParserService.js.map +2 -2
- package/lib/cjs/internal/typed-data/service/TypedDataParser.js +1 -1
- package/lib/cjs/internal/typed-data/service/TypedDataParser.js.map +3 -3
- package/lib/cjs/internal/typed-data/service/TypedDataParser.test.js +1 -1
- package/lib/cjs/internal/typed-data/service/TypedDataParser.test.js.map +2 -2
- package/lib/cjs/internal/typed-data/use-case/SignTypedDataUseCase.js +1 -1
- package/lib/cjs/internal/typed-data/use-case/SignTypedDataUseCase.js.map +3 -3
- package/lib/cjs/internal/typed-data/use-case/SignTypedDataUseCase.test.js +1 -1
- package/lib/cjs/internal/typed-data/use-case/SignTypedDataUseCase.test.js.map +2 -2
- package/lib/cjs/package.json +13 -14
- package/lib/esm/api/SignerEthBuilder.js +1 -1
- package/lib/esm/api/SignerEthBuilder.js.map +3 -3
- package/lib/esm/api/SignerEthBuilder.test.js +1 -1
- package/lib/esm/api/SignerEthBuilder.test.js.map +3 -3
- package/lib/esm/api/app-binder/SignDelegationAuthorizationTypes.js +1 -0
- package/lib/esm/api/app-binder/SignTransactionDeviceActionTypes.js +1 -1
- package/lib/esm/api/app-binder/SignTransactionDeviceActionTypes.js.map +2 -2
- package/lib/esm/api/app-binder/SignTypedDataDeviceActionTypes.js +1 -1
- package/lib/esm/api/app-binder/SignTypedDataDeviceActionTypes.js.map +2 -2
- package/lib/esm/api/index.js +1 -1
- package/lib/esm/api/index.js.map +2 -2
- package/lib/esm/api/model/ClearSigningType.js +2 -0
- package/lib/esm/api/model/ClearSigningType.js.map +7 -0
- package/lib/esm/api/model/MessageOptions.js +1 -0
- package/lib/esm/api/model/MessageOptions.js.map +7 -0
- package/lib/esm/api/model/TypedDataOptions.js +1 -0
- package/lib/esm/api/model/TypedDataOptions.js.map +7 -0
- package/lib/esm/internal/DefaultSignerEth.js +1 -1
- package/lib/esm/internal/DefaultSignerEth.js.map +3 -3
- package/lib/esm/internal/DefaultSignerEth.test.js +1 -1
- package/lib/esm/internal/DefaultSignerEth.test.js.map +3 -3
- package/lib/esm/internal/address/di/addressModule.js +1 -1
- package/lib/esm/internal/address/di/addressModule.js.map +3 -3
- package/lib/esm/internal/address/di/addressModule.test.js +1 -1
- package/lib/esm/internal/address/di/addressModule.test.js.map +2 -2
- package/lib/esm/internal/address/use-case/GetAddressUseCase.js +1 -1
- package/lib/esm/internal/address/use-case/GetAddressUseCase.js.map +2 -2
- package/lib/esm/internal/address/use-case/GetAddressUseCase.test.js +1 -1
- package/lib/esm/internal/address/use-case/GetAddressUseCase.test.js.map +2 -2
- package/lib/esm/internal/app-binder/EthAppBinder.js +1 -1
- package/lib/esm/internal/app-binder/EthAppBinder.js.map +3 -3
- package/lib/esm/internal/app-binder/EthAppBinder.test.js +1 -1
- package/lib/esm/internal/app-binder/EthAppBinder.test.js.map +3 -3
- package/lib/esm/internal/app-binder/command/ProvideProxyInfoCommand.js +2 -0
- package/lib/esm/internal/app-binder/command/ProvideProxyInfoCommand.js.map +7 -0
- package/lib/esm/internal/app-binder/command/ProvideProxyInfoCommand.test.js +2 -0
- package/lib/esm/internal/app-binder/command/ProvideProxyInfoCommand.test.js.map +7 -0
- package/lib/esm/internal/app-binder/command/SignAuthorizationDelegationCommand.js +2 -0
- package/lib/esm/internal/app-binder/command/SignAuthorizationDelegationCommand.js.map +7 -0
- package/lib/esm/internal/app-binder/command/SignAuthorizationDelegationCommand.test.js +2 -0
- package/lib/esm/internal/app-binder/command/SignAuthorizationDelegationCommand.test.js.map +7 -0
- package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js +1 -1
- package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js.map +3 -3
- package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js +1 -1
- package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js.map +3 -3
- package/lib/esm/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.js +1 -1
- package/lib/esm/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.js.map +3 -3
- package/lib/esm/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.test.js +1 -1
- package/lib/esm/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.test.js.map +2 -2
- package/lib/esm/internal/app-binder/device-action/__test-utils__/makeInternalApi.js +1 -1
- package/lib/esm/internal/app-binder/device-action/__test-utils__/makeInternalApi.js.map +3 -3
- package/lib/esm/internal/app-binder/di/appBinderModule.js +1 -1
- package/lib/esm/internal/app-binder/di/appBinderModule.js.map +3 -3
- package/lib/esm/internal/app-binder/task/BuildEIP712ContextTask.js +1 -1
- package/lib/esm/internal/app-binder/task/BuildEIP712ContextTask.js.map +3 -3
- package/lib/esm/internal/app-binder/task/BuildEIP712ContextTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/BuildEIP712ContextTask.test.js.map +2 -2
- package/lib/esm/internal/app-binder/task/BuildSubContextTask.js +2 -0
- package/lib/esm/internal/app-binder/task/BuildSubContextTask.js.map +7 -0
- package/lib/esm/internal/app-binder/task/BuildSubContextTask.test.js +2 -0
- package/lib/esm/internal/app-binder/task/BuildSubContextTask.test.js.map +7 -0
- package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.js +1 -1
- package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.js.map +3 -3
- package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.test.js.map +3 -3
- package/lib/esm/internal/app-binder/task/GetWeb3CheckTask.js +1 -1
- package/lib/esm/internal/app-binder/task/GetWeb3CheckTask.js.map +3 -3
- package/lib/esm/internal/app-binder/task/GetWeb3CheckTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/GetWeb3CheckTask.test.js.map +3 -3
- package/lib/esm/internal/app-binder/task/PreBuildContextTask.js +2 -0
- package/lib/esm/internal/app-binder/task/PreBuildContextTask.js.map +7 -0
- package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.js.map +2 -2
- package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.test.js.map +2 -2
- package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.js +1 -1
- package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.js.map +3 -3
- package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.test.js.map +3 -3
- package/lib/esm/internal/app-binder/task/SendPayloadInChunksTask.js +1 -1
- package/lib/esm/internal/app-binder/task/SendPayloadInChunksTask.js.map +1 -1
- package/lib/esm/internal/app-binder/task/SendSignAuthorizationDelegationTask.js +2 -0
- package/lib/esm/internal/app-binder/task/SendSignAuthorizationDelegationTask.js.map +7 -0
- package/lib/esm/internal/app-binder/task/SendSignAuthorizationDelegationTask.test.js +2 -0
- package/lib/esm/internal/app-binder/task/SendSignAuthorizationDelegationTask.test.js.map +7 -0
- package/lib/esm/internal/app-binder/task/SendSignTransactionTask.js +1 -1
- package/lib/esm/internal/app-binder/task/SendSignTransactionTask.js.map +3 -3
- package/lib/esm/internal/app-binder/task/SendSignTransactionTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/SendSignTransactionTask.test.js.map +3 -3
- package/lib/esm/internal/app-binder/task/SignTypedDataLegacyTask.js +2 -0
- package/lib/esm/internal/app-binder/task/SignTypedDataLegacyTask.js.map +7 -0
- package/lib/esm/internal/app-binder/task/SignTypedDataLegacyTask.test.js +2 -0
- package/lib/esm/internal/app-binder/task/SignTypedDataLegacyTask.test.js.map +7 -0
- package/lib/esm/internal/di.js +1 -1
- package/lib/esm/internal/di.js.map +3 -3
- package/lib/esm/internal/eip7702/di/eip7702Module.js +2 -0
- package/lib/esm/internal/eip7702/di/eip7702Module.js.map +7 -0
- package/lib/esm/internal/eip7702/di/eip7702Module.test.js +2 -0
- package/lib/esm/internal/eip7702/di/eip7702Module.test.js.map +7 -0
- package/lib/esm/internal/eip7702/di/eip7702Types.js +2 -0
- package/lib/esm/internal/eip7702/di/eip7702Types.js.map +7 -0
- package/lib/esm/internal/eip7702/use-case/SignDelegationAuthorizationUseCase.js +2 -0
- package/lib/esm/internal/eip7702/use-case/SignDelegationAuthorizationUseCase.js.map +7 -0
- package/lib/esm/internal/eip7702/use-case/SignDelegationAuthorizationUseCase.test.js +2 -0
- package/lib/esm/internal/eip7702/use-case/SignDelegationAuthorizationUseCase.test.js.map +7 -0
- package/lib/esm/internal/message/di/messageModule.js +1 -1
- package/lib/esm/internal/message/di/messageModule.js.map +3 -3
- package/lib/esm/internal/message/di/messageModule.test.js +1 -1
- package/lib/esm/internal/message/di/messageModule.test.js.map +2 -2
- package/lib/esm/internal/message/use-case/SignMessageUseCase.js +1 -1
- package/lib/esm/internal/message/use-case/SignMessageUseCase.js.map +3 -3
- package/lib/esm/internal/message/use-case/SignMessageUseCase.test.js +1 -1
- package/lib/esm/internal/message/use-case/SignMessageUseCase.test.js.map +2 -2
- package/lib/esm/internal/shared/utils/ApplicationChecker.js +1 -1
- package/lib/esm/internal/shared/utils/ApplicationChecker.js.map +3 -3
- package/lib/esm/internal/shared/utils/ApplicationChecker.test.js +1 -1
- package/lib/esm/internal/shared/utils/ApplicationChecker.test.js.map +2 -2
- package/lib/esm/internal/transaction/di/transactionModule.js +1 -1
- package/lib/esm/internal/transaction/di/transactionModule.js.map +3 -3
- package/lib/esm/internal/transaction/di/transactionModule.test.js +1 -1
- package/lib/esm/internal/transaction/di/transactionModule.test.js.map +2 -2
- package/lib/esm/internal/transaction/service/mapper/EthersTransactionMapperService.js +2 -0
- package/lib/esm/internal/transaction/service/mapper/EthersTransactionMapperService.js.map +7 -0
- package/lib/esm/internal/transaction/service/mapper/EthersTransactionMapperService.test.js +2 -0
- package/lib/esm/internal/transaction/service/mapper/EthersTransactionMapperService.test.js.map +7 -0
- package/lib/esm/internal/transaction/service/mapper/TransactionMapperService.js +0 -1
- package/lib/esm/internal/transaction/service/mapper/TransactionMapperService.js.map +4 -4
- package/lib/esm/internal/transaction/service/parser/TransactionParserService.js +1 -1
- package/lib/esm/internal/transaction/service/parser/TransactionParserService.js.map +3 -3
- package/lib/esm/internal/transaction/service/parser/TransactionParserService.test.js +1 -1
- package/lib/esm/internal/transaction/service/parser/TransactionParserService.test.js.map +3 -3
- package/lib/esm/internal/typed-data/di/typedDataModule.js +1 -1
- package/lib/esm/internal/typed-data/di/typedDataModule.js.map +3 -3
- package/lib/esm/internal/typed-data/di/typedDataModule.test.js +1 -1
- package/lib/esm/internal/typed-data/di/typedDataModule.test.js.map +2 -2
- package/lib/esm/internal/typed-data/service/DefaultTypedDataParserService.js +1 -1
- package/lib/esm/internal/typed-data/service/DefaultTypedDataParserService.js.map +2 -2
- package/lib/esm/internal/typed-data/service/TypedDataParser.js +1 -1
- package/lib/esm/internal/typed-data/service/TypedDataParser.js.map +3 -3
- package/lib/esm/internal/typed-data/service/TypedDataParser.test.js +1 -1
- package/lib/esm/internal/typed-data/service/TypedDataParser.test.js.map +2 -2
- package/lib/esm/internal/typed-data/use-case/SignTypedDataUseCase.js +1 -1
- package/lib/esm/internal/typed-data/use-case/SignTypedDataUseCase.js.map +3 -3
- package/lib/esm/internal/typed-data/use-case/SignTypedDataUseCase.test.js +1 -1
- package/lib/esm/internal/typed-data/use-case/SignTypedDataUseCase.test.js.map +2 -2
- package/lib/esm/package.json +13 -14
- package/lib/types/api/SignerEth.d.ts +8 -4
- package/lib/types/api/SignerEth.d.ts.map +1 -1
- package/lib/types/api/SignerEthBuilder.d.ts +4 -2
- package/lib/types/api/SignerEthBuilder.d.ts.map +1 -1
- package/lib/types/api/app-binder/SignDelegationAuthorizationTypes.d.ts +19 -0
- package/lib/types/api/app-binder/SignDelegationAuthorizationTypes.d.ts.map +1 -0
- package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts +14 -10
- package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts.map +1 -1
- package/lib/types/api/app-binder/SignTypedDataDeviceActionTypes.d.ts +7 -1
- package/lib/types/api/app-binder/SignTypedDataDeviceActionTypes.d.ts.map +1 -1
- package/lib/types/api/index.d.ts +5 -0
- package/lib/types/api/index.d.ts.map +1 -1
- package/lib/types/api/model/AddressOptions.d.ts +1 -0
- package/lib/types/api/model/AddressOptions.d.ts.map +1 -1
- package/lib/types/api/model/ClearSigningType.d.ts +5 -0
- package/lib/types/api/model/ClearSigningType.d.ts.map +1 -0
- package/lib/types/api/model/MessageOptions.d.ts +4 -0
- package/lib/types/api/model/MessageOptions.d.ts.map +1 -0
- package/lib/types/api/model/TransactionOptions.d.ts +1 -0
- package/lib/types/api/model/TransactionOptions.d.ts.map +1 -1
- package/lib/types/api/model/TypedDataOptions.d.ts +4 -0
- package/lib/types/api/model/TypedDataOptions.d.ts.map +1 -0
- package/lib/types/internal/DefaultSignerEth.d.ts +7 -3
- package/lib/types/internal/DefaultSignerEth.d.ts.map +1 -1
- package/lib/types/internal/address/di/addressModule.d.ts.map +1 -1
- package/lib/types/internal/address/use-case/GetAddressUseCase.d.ts.map +1 -1
- package/lib/types/internal/app-binder/EthAppBinder.d.ts +13 -3
- package/lib/types/internal/app-binder/EthAppBinder.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/ProvideProxyInfoCommand.d.ts +20 -0
- package/lib/types/internal/app-binder/command/ProvideProxyInfoCommand.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/ProvideProxyInfoCommand.test.d.ts +2 -0
- package/lib/types/internal/app-binder/command/ProvideProxyInfoCommand.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/SignAuthorizationDelegationCommand.d.ts +29 -0
- package/lib/types/internal/app-binder/command/SignAuthorizationDelegationCommand.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/SignAuthorizationDelegationCommand.test.d.ts +2 -0
- package/lib/types/internal/app-binder/command/SignAuthorizationDelegationCommand.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/utils/ethAppErrors.d.ts.map +1 -1
- package/lib/types/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.d.ts +14 -31
- package/lib/types/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.d.ts.map +1 -1
- package/lib/types/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.d.ts +1 -2
- package/lib/types/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.d.ts.map +1 -1
- package/lib/types/internal/app-binder/device-action/__test-utils__/makeInternalApi.d.ts.map +1 -1
- package/lib/types/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.d.ts.map +1 -1
- package/lib/types/internal/app-binder/di/appBinderModule.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/BuildEIP712ContextTask.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/BuildSubContextTask.d.ts +20 -0
- package/lib/types/internal/app-binder/task/BuildSubContextTask.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/BuildSubContextTask.test.d.ts +2 -0
- package/lib/types/internal/app-binder/task/BuildSubContextTask.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/BuildTransactionContextTask.d.ts +10 -14
- package/lib/types/internal/app-binder/task/BuildTransactionContextTask.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/GetWeb3CheckTask.d.ts +2 -3
- package/lib/types/internal/app-binder/task/GetWeb3CheckTask.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/PreBuildContextTask.d.ts +17 -0
- package/lib/types/internal/app-binder/task/PreBuildContextTask.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/ProvideEIP712ContextTask.d.ts +0 -2
- package/lib/types/internal/app-binder/task/ProvideEIP712ContextTask.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/ProvideTransactionContextTask.d.ts +28 -22
- package/lib/types/internal/app-binder/task/ProvideTransactionContextTask.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/SendPayloadInChunksTask.d.ts +1 -2
- package/lib/types/internal/app-binder/task/SendPayloadInChunksTask.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/SendSignAuthorizationDelegationTask.d.ts +18 -0
- package/lib/types/internal/app-binder/task/SendSignAuthorizationDelegationTask.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/SendSignAuthorizationDelegationTask.test.d.ts +2 -0
- package/lib/types/internal/app-binder/task/SendSignAuthorizationDelegationTask.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/SendSignTransactionTask.d.ts +2 -1
- package/lib/types/internal/app-binder/task/SendSignTransactionTask.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/SignTypedDataLegacyTask.d.ts +12 -0
- package/lib/types/internal/app-binder/task/SignTypedDataLegacyTask.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/SignTypedDataLegacyTask.test.d.ts +2 -0
- package/lib/types/internal/app-binder/task/SignTypedDataLegacyTask.test.d.ts.map +1 -0
- package/lib/types/internal/di.d.ts.map +1 -1
- package/lib/types/internal/eip7702/di/eip7702Module.d.ts +3 -0
- package/lib/types/internal/eip7702/di/eip7702Module.d.ts.map +1 -0
- package/lib/types/internal/eip7702/di/eip7702Module.test.d.ts +2 -0
- package/lib/types/internal/eip7702/di/eip7702Module.test.d.ts.map +1 -0
- package/lib/types/internal/eip7702/di/eip7702Types.d.ts +4 -0
- package/lib/types/internal/eip7702/di/eip7702Types.d.ts.map +1 -0
- package/lib/types/internal/eip7702/use-case/SignDelegationAuthorizationUseCase.d.ts +8 -0
- package/lib/types/internal/eip7702/use-case/SignDelegationAuthorizationUseCase.d.ts.map +1 -0
- package/lib/types/internal/eip7702/use-case/SignDelegationAuthorizationUseCase.test.d.ts +2 -0
- package/lib/types/internal/eip7702/use-case/SignDelegationAuthorizationUseCase.test.d.ts.map +1 -0
- package/lib/types/internal/message/di/messageModule.d.ts.map +1 -1
- package/lib/types/internal/message/use-case/SignMessageUseCase.d.ts +2 -1
- package/lib/types/internal/message/use-case/SignMessageUseCase.d.ts.map +1 -1
- package/lib/types/internal/shared/utils/ApplicationChecker.d.ts.map +1 -1
- package/lib/types/internal/transaction/di/transactionModule.d.ts.map +1 -1
- package/lib/types/internal/transaction/service/mapper/EthersTransactionMapperService.d.ts +8 -0
- package/lib/types/internal/transaction/service/mapper/EthersTransactionMapperService.d.ts.map +1 -0
- package/lib/types/internal/transaction/service/mapper/EthersTransactionMapperService.test.d.ts +2 -0
- package/lib/types/internal/transaction/service/mapper/EthersTransactionMapperService.test.d.ts.map +1 -0
- package/lib/types/internal/transaction/service/mapper/TransactionMapperService.d.ts +4 -7
- package/lib/types/internal/transaction/service/mapper/TransactionMapperService.d.ts.map +1 -1
- package/lib/types/internal/transaction/service/parser/TransactionParserService.d.ts +2 -2
- package/lib/types/internal/transaction/service/parser/TransactionParserService.d.ts.map +1 -1
- package/lib/types/internal/typed-data/di/typedDataModule.d.ts.map +1 -1
- package/lib/types/internal/typed-data/service/TypedDataParser.d.ts +4 -2
- package/lib/types/internal/typed-data/service/TypedDataParser.d.ts.map +1 -1
- package/lib/types/internal/typed-data/use-case/SignTypedDataUseCase.d.ts +2 -1
- package/lib/types/internal/typed-data/use-case/SignTypedDataUseCase.d.ts.map +1 -1
- package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
- package/package.json +18 -19
- package/lib/cjs/internal/app-binder/constant/plugins.js +0 -2
- package/lib/cjs/internal/app-binder/constant/plugins.js.map +0 -7
- package/lib/cjs/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.js +0 -2
- package/lib/cjs/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.js.map +0 -7
- package/lib/cjs/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.test.js +0 -2
- package/lib/cjs/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.test.js.map +0 -7
- package/lib/cjs/internal/app-binder/task/ProvideTransactionGenericContextTask.js +0 -2
- package/lib/cjs/internal/app-binder/task/ProvideTransactionGenericContextTask.js.map +0 -7
- package/lib/cjs/internal/app-binder/task/ProvideTransactionGenericContextTask.test.js +0 -2
- package/lib/cjs/internal/app-binder/task/ProvideTransactionGenericContextTask.test.js.map +0 -7
- package/lib/cjs/internal/transaction/service/mapper/EthersRawTransactionMapper.js +0 -2
- package/lib/cjs/internal/transaction/service/mapper/EthersRawTransactionMapper.js.map +0 -7
- package/lib/cjs/internal/transaction/service/mapper/EthersRawTransactionMapper.test.js +0 -2
- package/lib/cjs/internal/transaction/service/mapper/EthersRawTransactionMapper.test.js.map +0 -7
- package/lib/cjs/internal/transaction/service/mapper/TransactionMapper.js +0 -2
- package/lib/cjs/internal/transaction/service/mapper/TransactionMapper.js.map +0 -7
- package/lib/cjs/internal/transaction/service/mapper/TransactionMapperService.test.js +0 -2
- package/lib/cjs/internal/transaction/service/mapper/TransactionMapperService.test.js.map +0 -7
- package/lib/esm/internal/app-binder/constant/plugins.js +0 -2
- package/lib/esm/internal/app-binder/constant/plugins.js.map +0 -7
- package/lib/esm/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.js +0 -2
- package/lib/esm/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.js.map +0 -7
- package/lib/esm/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.test.js +0 -2
- package/lib/esm/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.test.js.map +0 -7
- package/lib/esm/internal/app-binder/task/ProvideTransactionGenericContextTask.js +0 -2
- package/lib/esm/internal/app-binder/task/ProvideTransactionGenericContextTask.js.map +0 -7
- package/lib/esm/internal/app-binder/task/ProvideTransactionGenericContextTask.test.js +0 -2
- package/lib/esm/internal/app-binder/task/ProvideTransactionGenericContextTask.test.js.map +0 -7
- package/lib/esm/internal/transaction/service/mapper/EthersRawTransactionMapper.js +0 -2
- package/lib/esm/internal/transaction/service/mapper/EthersRawTransactionMapper.js.map +0 -7
- package/lib/esm/internal/transaction/service/mapper/EthersRawTransactionMapper.test.js +0 -2
- package/lib/esm/internal/transaction/service/mapper/EthersRawTransactionMapper.test.js.map +0 -7
- package/lib/esm/internal/transaction/service/mapper/TransactionMapper.js +0 -1
- package/lib/esm/internal/transaction/service/mapper/TransactionMapperService.test.js +0 -2
- package/lib/esm/internal/transaction/service/mapper/TransactionMapperService.test.js.map +0 -7
- package/lib/types/internal/app-binder/constant/plugins.d.ts +0 -2
- package/lib/types/internal/app-binder/constant/plugins.d.ts.map +0 -1
- package/lib/types/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.d.ts +0 -80
- package/lib/types/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.d.ts.map +0 -1
- package/lib/types/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.test.d.ts +0 -2
- package/lib/types/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.test.d.ts.map +0 -1
- package/lib/types/internal/app-binder/task/ProvideTransactionGenericContextTask.d.ts +0 -28
- package/lib/types/internal/app-binder/task/ProvideTransactionGenericContextTask.d.ts.map +0 -1
- package/lib/types/internal/app-binder/task/ProvideTransactionGenericContextTask.test.d.ts +0 -2
- package/lib/types/internal/app-binder/task/ProvideTransactionGenericContextTask.test.d.ts.map +0 -1
- package/lib/types/internal/transaction/service/mapper/EthersRawTransactionMapper.d.ts +0 -7
- package/lib/types/internal/transaction/service/mapper/EthersRawTransactionMapper.d.ts.map +0 -1
- package/lib/types/internal/transaction/service/mapper/EthersRawTransactionMapper.test.d.ts +0 -2
- package/lib/types/internal/transaction/service/mapper/EthersRawTransactionMapper.test.d.ts.map +0 -1
- package/lib/types/internal/transaction/service/mapper/TransactionMapper.d.ts +0 -6
- package/lib/types/internal/transaction/service/mapper/TransactionMapper.d.ts.map +0 -1
- package/lib/types/internal/transaction/service/mapper/TransactionMapperService.test.d.ts +0 -2
- package/lib/types/internal/transaction/service/mapper/TransactionMapperService.test.d.ts.map +0 -1
- /package/lib/esm/{internal/transaction/service/mapper/TransactionMapper.js.map → api/app-binder/SignDelegationAuthorizationTypes.js.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/task/ProvideTransactionContextTask.test.ts"],
|
|
4
|
-
"sourcesContent": ["import { ClearSignContextType } from \"@ledgerhq/context-module\";\nimport {\n CommandResultFactory,\n type UnknownDeviceExchangeError,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { ProvideNFTInformationCommand } from \"@internal/app-binder/command/ProvideNFTInformationCommand\";\nimport { ProvideTokenInformationCommand } from \"@internal/app-binder/command/ProvideTokenInformationCommand\";\nimport { SetExternalPluginCommand } from \"@internal/app-binder/command/SetExternalPluginCommand\";\nimport { SetPluginCommand } from \"@internal/app-binder/command/SetPluginCommand\";\nimport { type EthErrorCodes } from \"@internal/app-binder/command/utils/ethAppErrors\";\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\n\nimport {\n ProvideTransactionContextTask,\n type ProvideTransactionContextTaskArgs,\n} from \"./ProvideTransactionContextTask\";\n\ndescribe(\"ProvideTransactionContextTask\", () => {\n const api = makeDeviceActionInternalApiMock();\n const successResult = CommandResultFactory<void, EthErrorCodes>({\n data: undefined,\n });\n const errorResult = CommandResultFactory<void, EthErrorCodes>({\n data: undefined,\n error: {} as UnknownDeviceExchangeError,\n });\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"run\", () => {\n const args: ProvideTransactionContextTaskArgs = {\n clearSignContexts: [\n {\n type: ClearSignContextType.PLUGIN,\n payload: \"706c7567696e\", // \"plugin\"\n },\n {\n type: ClearSignContextType.EXTERNAL_PLUGIN,\n payload: \"65787465726e616c506c7567696e\", // \"externalPlugin\"\n },\n {\n type: ClearSignContextType.NFT,\n payload: \"6e6674\", // \"nft\"\n },\n {\n type: ClearSignContextType.TOKEN,\n payload: \"746f6b656e\", // \"token\"\n },\n ],\n web3Check: null,\n };\n afterEach(() => {\n vi.restoreAllMocks();\n });\n it(\"should send relative commands when receiving ClearSignContexts of type not trustedName\", async () => {\n api.sendCommand.mockResolvedValue(successResult);\n // GIVEN\n const task = new ProvideTransactionContextTask(api, args);\n // WHEN\n await task.run();\n // THEN\n expect(api.sendCommand).toHaveBeenCalledTimes(4);\n expect(api.sendCommand).toHaveBeenNthCalledWith(\n args.clearSignContexts.findIndex(\n (c) => c.type === ClearSignContextType.PLUGIN,\n ) + 1,\n expect.objectContaining(\n new SetPluginCommand({ payload: \"706c7567696e\" }),\n ),\n );\n expect(api.sendCommand).toHaveBeenNthCalledWith(\n args.clearSignContexts.findIndex(\n (c) => c.type === ClearSignContextType.EXTERNAL_PLUGIN,\n ) + 1,\n expect.objectContaining(\n new SetExternalPluginCommand({\n payload: \"65787465726e616c506c7567696e\",\n }),\n ),\n );\n expect(api.sendCommand).toHaveBeenNthCalledWith(\n args.clearSignContexts.findIndex(\n (c) => c.type === ClearSignContextType.NFT,\n ) + 1,\n expect.objectContaining(\n new ProvideNFTInformationCommand({ payload: \"6e6674\" }),\n ),\n );\n expect(api.sendCommand).toHaveBeenNthCalledWith(\n args.clearSignContexts.findIndex(\n (c) => c.type === ClearSignContextType.TOKEN,\n ) + 1,\n expect.objectContaining(\n new ProvideTokenInformationCommand({ payload: \"746f6b656e\" }),\n ),\n );\n });\n it(\"should return the command error result and stop when the command fails\", async () => {\n api.sendCommand.mockReset();\n api.sendCommand.mockResolvedValueOnce(errorResult);\n // GIVEN\n const task = new ProvideTransactionContextTask(api, args);\n // WHEN\n const result = await task.run();\n // THEN\n expect(api.sendCommand).toHaveBeenCalledTimes(1);\n expect(result.isJust()).toBe(true);\n expect(result.extract()).toStrictEqual(errorResult);\n });\n });\n});\n"],
|
|
5
|
-
"mappings": "AAAA,
|
|
6
|
-
"names": ["ClearSignContextType", "CommandResultFactory", "ProvideNFTInformationCommand", "ProvideTokenInformationCommand", "SetExternalPluginCommand", "SetPluginCommand", "makeDeviceActionInternalApiMock", "ProvideTransactionContextTask", "api", "successResult", "errorResult", "
|
|
4
|
+
"sourcesContent": ["import {\n type ClearSignContextSuccess,\n ClearSignContextType,\n} from \"@ledgerhq/context-module\";\nimport {\n CommandResultFactory,\n type InternalApi,\n InvalidStatusWordError,\n LoadCertificateCommand,\n type UnknownDeviceExchangeError,\n} from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { ProvideEnumCommand } from \"@internal/app-binder/command/ProvideEnumCommand\";\nimport { ProvideNFTInformationCommand } from \"@internal/app-binder/command/ProvideNFTInformationCommand\";\nimport { ProvideTokenInformationCommand } from \"@internal/app-binder/command/ProvideTokenInformationCommand\";\nimport { ProvideTransactionFieldDescriptionCommand } from \"@internal/app-binder/command/ProvideTransactionFieldDescriptionCommand\";\nimport { ProvideTransactionInformationCommand } from \"@internal/app-binder/command/ProvideTransactionInformationCommand\";\nimport { ProvideTrustedNameCommand } from \"@internal/app-binder/command/ProvideTrustedNameCommand\";\nimport { ProvideWeb3CheckCommand } from \"@internal/app-binder/command/ProvideWeb3CheckCommand\";\nimport { SetExternalPluginCommand } from \"@internal/app-binder/command/SetExternalPluginCommand\";\nimport { SetPluginCommand } from \"@internal/app-binder/command/SetPluginCommand\";\nimport { StoreTransactionCommand } from \"@internal/app-binder/command/StoreTransactionCommand\";\nimport { type EthErrorCodes } from \"@internal/app-binder/command/utils/ethAppErrors\";\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\n\nimport {\n ProvideTransactionContextTask,\n type ProvideTransactionContextTaskArgs,\n} from \"./ProvideTransactionContextTask\";\nimport {\n SendCommandInChunksTask,\n type SendCommandInChunksTaskArgs,\n} from \"./SendCommandInChunksTask\";\nimport {\n SendPayloadInChunksTask,\n type SendPayloadInChunksTaskArgs,\n} from \"./SendPayloadInChunksTask\";\n\ndescribe(\"ProvideTransactionContextTask\", () => {\n const api = makeDeviceActionInternalApiMock();\n const successResult = CommandResultFactory<void, EthErrorCodes>({\n data: undefined,\n });\n const errorResult = CommandResultFactory<void, EthErrorCodes>({\n data: undefined,\n error: {} as UnknownDeviceExchangeError,\n });\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"run\", () => {\n const sendPayloadInChunksRunMock = vi.fn();\n const sendCommandInChunksTaskRunMock = vi.fn();\n const sendCommandInChunksTaskMockFactory = vi.fn();\n const sendPayloadInChunksTaskMockFactory = vi.fn();\n\n beforeEach(() => {\n vi.clearAllMocks();\n sendCommandInChunksTaskMockFactory.mockImplementation(\n (a: InternalApi, args: SendCommandInChunksTaskArgs<unknown>) =>\n ({\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n run: () => sendCommandInChunksTaskRunMock(a, args),\n }) as unknown as SendCommandInChunksTask<unknown>,\n );\n sendPayloadInChunksTaskMockFactory.mockImplementation(\n (a: InternalApi, args: SendPayloadInChunksTaskArgs<unknown>) =>\n ({\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n run: () => sendPayloadInChunksRunMock(a, args),\n }) as unknown as SendPayloadInChunksTask<unknown>,\n );\n });\n\n describe(\"with no subcontexts\", () => {\n it(\"should provide the transaction context for a TRANSACTION_INFO context\", async () => {\n // GIVEN\n const args: ProvideTransactionContextTaskArgs = {\n context: {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"0x00\",\n certificate: {\n keyUsageNumber: 1,\n payload: new Uint8Array([1, 2, 3]),\n },\n },\n subcontextsCallbacks: [],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n };\n sendCommandInChunksTaskRunMock.mockResolvedValue(successResult);\n sendPayloadInChunksRunMock.mockResolvedValue(successResult);\n api.sendCommand.mockResolvedValue(successResult);\n\n // WHEN\n const task = new ProvideTransactionContextTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n sendCommandInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(Right(void 0));\n\n // StoreTransactionCommand\n expect(sendCommandInChunksTaskRunMock).toHaveBeenCalledTimes(1);\n expect(sendCommandInChunksTaskMockFactory).toHaveBeenCalledWith(api, {\n data: new Uint8Array([\n 0x05, 0x80, 0x00, 0x00, 0x2c, 0x80, 0x00, 0x00, 0x3c, 0x80, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n ]),\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n commandFactory: expect.any(Function),\n });\n // Test that the commandFactory returns a StoreTransactionCommand\n const factoryCall = sendCommandInChunksTaskMockFactory.mock.calls[0]!;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const commandFactory = factoryCall[1].commandFactory;\n // arbitrary data to test the commandFactory\n const mockArgs = {\n chunkedData: new Uint8Array([1, 2, 3, 4]),\n isFirstChunk: true,\n };\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n const command = commandFactory(mockArgs);\n expect(command).toBeInstanceOf(StoreTransactionCommand);\n\n // LoadCertificateCommand\n expect(api.sendCommand).toHaveBeenCalledTimes(1);\n expect(api.sendCommand).toHaveBeenCalledWith(\n expect.any(LoadCertificateCommand),\n );\n\n // ProvideTransactionInformationCommand\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledTimes(1);\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledWith(api, {\n payload: \"0x00\",\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n commandFactory: expect.any(Function),\n });\n // Test that the commandFactory returns a ProvideTransactionInformationCommand\n const factoryCall2 = sendPayloadInChunksRunMock.mock.calls[0]!;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const commandFactory2 = factoryCall2[1].commandFactory;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n const command2 = commandFactory2(mockArgs);\n expect(command2).toBeInstanceOf(ProvideTransactionInformationCommand);\n });\n\n it(\"should provide the transaction context for a TRANSACTION_INFO context without certificate\", async () => {\n // GIVEN\n const args: ProvideTransactionContextTaskArgs = {\n context: {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"0x00\",\n },\n subcontextsCallbacks: [],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n };\n sendCommandInChunksTaskRunMock.mockResolvedValue(successResult);\n sendPayloadInChunksRunMock.mockResolvedValue(successResult);\n api.sendCommand.mockResolvedValue(successResult);\n\n // WHEN\n const task = new ProvideTransactionContextTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n sendCommandInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(Right(void 0));\n\n // StoreTransactionCommand\n expect(sendCommandInChunksTaskRunMock).toHaveBeenCalledTimes(1);\n expect(sendCommandInChunksTaskMockFactory).toHaveBeenCalledWith(api, {\n data: new Uint8Array([\n 0x05, 0x80, 0x00, 0x00, 0x2c, 0x80, 0x00, 0x00, 0x3c, 0x80, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n ]),\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n commandFactory: expect.any(Function),\n });\n // Test that the commandFactory returns a StoreTransactionCommand\n const factoryCall = sendCommandInChunksTaskMockFactory.mock.calls[0]!;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const commandFactory = factoryCall[1].commandFactory;\n // arbitrary data to test the commandFactory\n const mockArgs = {\n chunkedData: new Uint8Array([1, 2, 3, 4]),\n isFirstChunk: true,\n };\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n const command = commandFactory(mockArgs);\n expect(command).toBeInstanceOf(StoreTransactionCommand);\n\n // LoadCertificateCommand\n expect(api.sendCommand).toHaveBeenCalledTimes(0);\n\n // ProvideTransactionInformationCommand\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledTimes(1);\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledWith(api, {\n payload: \"0x00\",\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n commandFactory: expect.any(Function),\n });\n // Test that the commandFactory returns a ProvideTransactionInformationCommand\n const factoryCall2 = sendPayloadInChunksRunMock.mock.calls[0]!;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const commandFactory2 = factoryCall2[1].commandFactory;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n const command2 = commandFactory2(mockArgs);\n expect(command2).toBeInstanceOf(ProvideTransactionInformationCommand);\n });\n\n it.each([\n [ClearSignContextType.PLUGIN, SetPluginCommand],\n [ClearSignContextType.EXTERNAL_PLUGIN, SetExternalPluginCommand],\n [ClearSignContextType.NFT, ProvideNFTInformationCommand],\n [ClearSignContextType.TOKEN, ProvideTokenInformationCommand],\n ] as const)(\n \"should provide the transaction context by calling sendCommand for a %s context\",\n async (contextType, commandClass) => {\n // GIVEN\n const args: ProvideTransactionContextTaskArgs = {\n context: {\n type: contextType,\n payload: \"payload\",\n },\n subcontextsCallbacks: [],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n };\n api.sendCommand.mockResolvedValue(successResult);\n\n // WHEN\n const task = new ProvideTransactionContextTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n sendCommandInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(Right(void 0));\n expect(api.sendCommand).toHaveBeenCalledTimes(1);\n expect(api.sendCommand).toHaveBeenCalledWith(\n expect.any(commandClass),\n );\n },\n );\n\n it.each([\n [ClearSignContextType.ENUM, ProvideEnumCommand],\n [ClearSignContextType.TRUSTED_NAME, ProvideTrustedNameCommand],\n [ClearSignContextType.WEB3_CHECK, ProvideWeb3CheckCommand],\n [\n ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n ProvideTransactionFieldDescriptionCommand,\n ],\n ] as const)(\n \"should provide the transaction context by calling sendPayloadInChunksTask for a %s context\",\n async (contextType, commandClass) => {\n // GIVEN\n const args: ProvideTransactionContextTaskArgs = {\n context: {\n type: contextType,\n payload: \"payload\",\n } as ClearSignContextSuccess,\n subcontextsCallbacks: [],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n };\n sendPayloadInChunksRunMock.mockResolvedValue(successResult);\n\n // WHEN\n const task = new ProvideTransactionContextTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n sendCommandInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(Right(void 0));\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledTimes(1);\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledWith(api, {\n payload: \"payload\",\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n commandFactory: expect.any(Function),\n });\n\n // Test that the commandFactory returns a commandClass\n const factoryCall = sendPayloadInChunksTaskMockFactory.mock.calls[0]!;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const commandFactory = factoryCall[1].commandFactory;\n const mockArgs = {\n chunkedData: new Uint8Array([1, 2, 3]),\n isFirstChunk: true,\n };\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n const command = commandFactory(mockArgs);\n expect(command).toBeInstanceOf(commandClass);\n },\n );\n\n it(\"should skip the subcontexts if the context is an error\", async () => {\n // GIVEN\n const args: ProvideTransactionContextTaskArgs = {\n context: {\n type: ClearSignContextType.TOKEN,\n payload: \"payload\",\n certificate: {\n keyUsageNumber: 1,\n payload: new Uint8Array([1, 2, 3]),\n },\n },\n subcontextsCallbacks: [\n () =>\n Promise.resolve({\n type: ClearSignContextType.ERROR,\n error: new Error(\"error\"),\n }),\n ],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n };\n sendPayloadInChunksRunMock.mockResolvedValue(successResult);\n api.sendCommand.mockResolvedValue(successResult);\n\n // WHEN\n const task = new ProvideTransactionContextTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n sendCommandInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(Right(void 0));\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledTimes(0);\n expect(sendCommandInChunksTaskRunMock).toHaveBeenCalledTimes(0);\n expect(api.sendCommand).toHaveBeenCalledTimes(2);\n expect(api.sendCommand).toHaveBeenNthCalledWith(\n 1,\n expect.any(LoadCertificateCommand),\n );\n expect(api.sendCommand).toHaveBeenNthCalledWith(\n 2,\n expect.any(ProvideTokenInformationCommand),\n );\n });\n });\n\n describe(\"with subcontexts\", () => {\n it(\"should provide the transaction context and subcontext for a TRANSACTION_FIELD_DESCRIPTION context\", async () => {\n // GIVEN\n const args: ProvideTransactionContextTaskArgs = {\n context: {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload\",\n },\n subcontextsCallbacks: [\n () =>\n Promise.resolve({\n type: ClearSignContextType.TOKEN,\n payload: \"payload\",\n }),\n ],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n };\n sendPayloadInChunksRunMock.mockResolvedValue(successResult);\n api.sendCommand.mockResolvedValue(successResult);\n\n // WHEN\n const task = new ProvideTransactionContextTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n sendCommandInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(Right(void 0));\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledTimes(1);\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledWith(api, {\n payload: \"payload\",\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n commandFactory: expect.any(Function),\n });\n\n // Test that the commandFactory returns a commandClass\n const factoryCall = sendPayloadInChunksTaskMockFactory.mock.calls[0]!;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const commandFactory = factoryCall[1].commandFactory;\n const mockArgs = {\n chunkedData: new Uint8Array([1, 2, 3]),\n isFirstChunk: true,\n };\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n const command = commandFactory(mockArgs);\n expect(command).toBeInstanceOf(\n ProvideTransactionFieldDescriptionCommand,\n );\n\n expect(api.sendCommand).toHaveBeenCalledTimes(1);\n expect(api.sendCommand).toHaveBeenCalledWith(\n expect.any(ProvideTokenInformationCommand),\n );\n });\n\n it(\"should provide the transaction context and subcontexts for a TRUSTED_NAME context\", async () => {\n // GIVEN\n const args: ProvideTransactionContextTaskArgs = {\n context: {\n type: ClearSignContextType.TRUSTED_NAME,\n payload: \"payload\",\n },\n subcontextsCallbacks: [\n () =>\n Promise.resolve({\n type: ClearSignContextType.NFT,\n payload: \"payload1\",\n }),\n\n () =>\n Promise.resolve({\n type: ClearSignContextType.TOKEN,\n payload: \"payload2\",\n }),\n ],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n };\n sendPayloadInChunksRunMock.mockResolvedValue(successResult);\n api.sendCommand.mockResolvedValue(successResult);\n\n // WHEN\n const task = new ProvideTransactionContextTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n sendCommandInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(Right(void 0));\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledTimes(1);\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledWith(api, {\n payload: \"payload\",\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n commandFactory: expect.any(Function),\n });\n\n // Test that the commandFactory returns a commandClass\n const factoryCall = sendPayloadInChunksTaskMockFactory.mock.calls[0]!;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const commandFactory = factoryCall[1].commandFactory;\n const mockArgs = {\n chunkedData: new Uint8Array([1, 2, 3]),\n isFirstChunk: true,\n };\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n const command = commandFactory(mockArgs);\n expect(command).toBeInstanceOf(ProvideTrustedNameCommand);\n\n expect(api.sendCommand).toHaveBeenCalledTimes(2);\n expect(api.sendCommand).toHaveBeenNthCalledWith(\n 1,\n expect.any(ProvideNFTInformationCommand),\n );\n expect(api.sendCommand).toHaveBeenNthCalledWith(\n 2,\n expect.any(ProvideTokenInformationCommand),\n );\n });\n });\n\n describe(\"with subcontexts and certificate\", () => {\n it(\"should provide the transaction context and subcontexts for a TRUSTED_NAME context\", async () => {\n // GIVEN\n const args: ProvideTransactionContextTaskArgs = {\n context: {\n type: ClearSignContextType.TRUSTED_NAME,\n payload: \"payload\",\n certificate: {\n keyUsageNumber: 1,\n payload: new Uint8Array([1, 2, 3]),\n },\n },\n subcontextsCallbacks: [\n () =>\n Promise.resolve({\n type: ClearSignContextType.NFT,\n payload: \"payload1\",\n certificate: {\n keyUsageNumber: 2,\n payload: new Uint8Array([4, 5, 6]),\n },\n }),\n ],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n };\n sendPayloadInChunksRunMock.mockResolvedValue(successResult);\n api.sendCommand.mockResolvedValue(successResult);\n\n // WHEN\n const task = new ProvideTransactionContextTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n sendCommandInChunksTaskMockFactory,\n );\n await task.run();\n\n // THEN\n expect(api.sendCommand).toHaveBeenCalledTimes(3);\n expect(api.sendCommand).toHaveBeenNthCalledWith(\n 1,\n expect.any(LoadCertificateCommand),\n );\n expect(api.sendCommand).toHaveBeenNthCalledWith(\n 2,\n expect.any(ProvideNFTInformationCommand),\n );\n expect(api.sendCommand).toHaveBeenNthCalledWith(\n 3,\n expect.any(LoadCertificateCommand),\n );\n });\n });\n\n describe(\"with error\", () => {\n it(\"should return an error if the provideContext fails\", async () => {\n // GIVEN\n const args: ProvideTransactionContextTaskArgs = {\n context: {\n type: ClearSignContextType.TOKEN,\n payload: \"payload\",\n },\n subcontextsCallbacks: [],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n };\n api.sendCommand.mockResolvedValue(errorResult);\n\n // WHEN\n const task = new ProvideTransactionContextTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n sendCommandInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(Left(errorResult));\n });\n\n it(\"should return an error if the provide subcontext fails\", async () => {\n // GIVEN\n const args: ProvideTransactionContextTaskArgs = {\n context: {\n type: ClearSignContextType.TOKEN,\n payload: \"payload\",\n },\n subcontextsCallbacks: [\n () =>\n Promise.resolve({\n type: ClearSignContextType.TOKEN,\n payload: \"payload\",\n }),\n ],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n };\n api.sendCommand.mockResolvedValue(errorResult);\n\n // WHEN\n const task = new ProvideTransactionContextTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n sendCommandInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(Left(errorResult));\n });\n\n it(\"should return an error if the type is not supported\", async () => {\n // GIVEN\n const args: ProvideTransactionContextTaskArgs = {\n context: {\n type: \"unsupported\" as unknown as ClearSignContextType.TOKEN,\n payload: \"payload\",\n },\n subcontextsCallbacks: [],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n };\n\n // WHEN\n const task = new ProvideTransactionContextTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n sendCommandInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(\n Left(\n CommandResultFactory({\n error: new InvalidStatusWordError(\n `The context type [unsupported] is not covered`,\n ),\n }),\n ),\n );\n });\n });\n\n describe(\"factory types\", () => {\n it(\"should have a sendPayloadInChunksTaskFactory by default\", () => {\n // GIVEN\n const task = new ProvideTransactionContextTask(api, {\n context: {\n type: ClearSignContextType.TOKEN,\n payload: \"payload\",\n },\n subcontextsCallbacks: [],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n });\n\n // THEN\n expect(task[\"_sendPayloadInChunksTaskFactory\"]).toBeDefined();\n const sendPayloadInChunksTask = task[\"_sendPayloadInChunksTaskFactory\"](\n api,\n {\n payload: \"payload\",\n commandFactory: () =>\n new ProvideTransactionFieldDescriptionCommand({\n data: new Uint8Array(),\n isFirstChunk: true,\n }),\n },\n );\n expect(sendPayloadInChunksTask).toBeInstanceOf(SendPayloadInChunksTask);\n });\n\n it(\"should have a sendCommandInChunksTaskFactory by default\", () => {\n // GIVEN\n const task = new ProvideTransactionContextTask(api, {\n context: {\n type: ClearSignContextType.TOKEN,\n payload: \"payload\",\n },\n subcontextsCallbacks: [],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n });\n\n // THEN\n expect(task[\"_sendCommandInChunksTaskFactory\"]).toBeDefined();\n const sendCommandInChunksTask = task[\"_sendCommandInChunksTaskFactory\"](\n api,\n {\n data: new Uint8Array(),\n commandFactory: () =>\n new StoreTransactionCommand({\n serializedTransaction: new Uint8Array(),\n isFirstChunk: true,\n }),\n },\n );\n expect(sendCommandInChunksTask).toBeInstanceOf(SendCommandInChunksTask);\n });\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["ClearSignContextType", "CommandResultFactory", "InvalidStatusWordError", "LoadCertificateCommand", "Left", "Right", "ProvideEnumCommand", "ProvideNFTInformationCommand", "ProvideTokenInformationCommand", "ProvideTransactionFieldDescriptionCommand", "ProvideTransactionInformationCommand", "ProvideTrustedNameCommand", "ProvideWeb3CheckCommand", "SetExternalPluginCommand", "SetPluginCommand", "StoreTransactionCommand", "makeDeviceActionInternalApiMock", "ProvideTransactionContextTask", "SendCommandInChunksTask", "SendPayloadInChunksTask", "api", "successResult", "errorResult", "sendPayloadInChunksRunMock", "sendCommandInChunksTaskRunMock", "sendCommandInChunksTaskMockFactory", "sendPayloadInChunksTaskMockFactory", "args", "result", "commandFactory", "mockArgs", "command", "commandFactory2", "command2", "contextType", "commandClass", "task", "sendPayloadInChunksTask", "sendCommandInChunksTask"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{CommandResultFactory as r,InvalidStatusWordError as
|
|
1
|
+
import{CommandResultFactory as r,InvalidStatusWordError as o}from"@ledgerhq/device-management-kit";import{PayloadUtils as n}from"../../shared/utils/PayloadUtils";import{SendCommandInChunksTask as t}from"./SendCommandInChunksTask";class i{constructor(a,d){this.api=a;this.args=d}async run(){const a=n.getBufferFromPayload(this.args.payload);return a?new t(this.api,{data:a,commandFactory:this.args.commandFactory}).run():r({error:new o("Invalid payload")})}}export{i as SendPayloadInChunksTask};
|
|
2
2
|
//# sourceMappingURL=SendPayloadInChunksTask.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/task/SendPayloadInChunksTask.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type CommandResult,\n CommandResultFactory,\n type InternalApi,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type EthErrorCodes } from \"@internal/app-binder/command/utils/ethAppErrors\";\nimport { PayloadUtils } from \"@internal/shared/utils/PayloadUtils\";\n\nimport {\n SendCommandInChunksTask,\n type SendCommandInChunksTaskArgs,\n} from \"./SendCommandInChunksTask\";\n\
|
|
4
|
+
"sourcesContent": ["import {\n type CommandResult,\n CommandResultFactory,\n type InternalApi,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type EthErrorCodes } from \"@internal/app-binder/command/utils/ethAppErrors\";\nimport { PayloadUtils } from \"@internal/shared/utils/PayloadUtils\";\n\nimport {\n SendCommandInChunksTask,\n type SendCommandInChunksTaskArgs,\n} from \"./SendCommandInChunksTask\";\n\nexport type SendPayloadInChunksTaskArgs<T> = {\n payload: string;\n commandFactory: SendCommandInChunksTaskArgs<T>[\"commandFactory\"];\n};\n\nexport class SendPayloadInChunksTask<T> {\n constructor(\n private api: InternalApi,\n private args: SendPayloadInChunksTaskArgs<T>,\n ) {}\n async run(): Promise<CommandResult<T, EthErrorCodes>> {\n const data = PayloadUtils.getBufferFromPayload(this.args.payload);\n\n if (!data) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Invalid payload\"),\n });\n }\n\n return new SendCommandInChunksTask(this.api, {\n data,\n commandFactory: this.args.commandFactory,\n }).run();\n }\n}\n"],
|
|
5
5
|
"mappings": "AAAA,OAEE,wBAAAA,EAEA,0BAAAC,MACK,kCAGP,OAAS,gBAAAC,MAAoB,sCAE7B,OACE,2BAAAC,MAEK,4BAOA,MAAMC,CAA2B,CACtC,YACUC,EACAC,EACR,CAFQ,SAAAD,EACA,UAAAC,CACP,CACH,MAAM,KAAgD,CACpD,MAAMC,EAAOL,EAAa,qBAAqB,KAAK,KAAK,OAAO,EAEhE,OAAKK,EAME,IAAIJ,EAAwB,KAAK,IAAK,CAC3C,KAAAI,EACA,eAAgB,KAAK,KAAK,cAC5B,CAAC,EAAE,IAAI,EAREP,EAAqB,CAC1B,MAAO,IAAIC,EAAuB,iBAAiB,CACrD,CAAC,CAOL,CACF",
|
|
6
6
|
"names": ["CommandResultFactory", "InvalidStatusWordError", "PayloadUtils", "SendCommandInChunksTask", "SendPayloadInChunksTask", "api", "args", "data"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{ByteArrayBuilder as u,CommandResultFactory as d,InvalidStatusWordError as m,isSuccessCommandResult as c}from"@ledgerhq/device-management-kit";import{DerivationPathUtils as I}from"@ledgerhq/signer-utils";import{SignEIP7702AuthorizationCommand as T}from"../../app-binder/command/SignAuthorizationDelegationCommand";import{SendCommandInChunksTask as h}from"./SendCommandInChunksTask";const l=0,p=1,g=2,A=3;class D{constructor(e,o){this.api=e;this.args=o}async run(){const{derivationPath:e,chainId:o,address:i,nonce:s}=this.args,a=I.splitPath(e),t=this.buildData(a,o,i,s),n=await new h(this.api,{data:t,commandFactory:r=>new T({data:r.chunkedData,isFirstChunk:r.isFirstChunk})}).run();return c(n)?n.data.mapOrDefault(r=>d({data:r}),d({error:new m("no signature returned")})):n}buildData(e,o,i,s){const a=new u;a.add8BitUIntToData(e.length),e.forEach(r=>{a.add32BitUIntToData(r)});const t=new u;t.encodeInTLVFromBuffer(l,Uint8Array.from([1])),t.encodeInTLVFromHexa(p,i),t.encodeInTLVFromUInt64(g,o),t.encodeInTLVFromUInt64(A,s);const n=t.build();return a.add16BitUIntToData(n.length).addBufferToData(n).build()}}export{D as SendSignAuthorizationDelegationTask};
|
|
2
|
+
//# sourceMappingURL=SendSignAuthorizationDelegationTask.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/internal/app-binder/task/SendSignAuthorizationDelegationTask.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n ByteArrayBuilder,\n type CommandResult,\n CommandResultFactory,\n type InternalApi,\n InvalidStatusWordError,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\nimport { DerivationPathUtils } from \"@ledgerhq/signer-utils\";\n\nimport { type Signature } from \"@api/model/Signature\";\nimport {\n SignEIP7702AuthorizationCommand,\n type SignEIP7702AuthorizationCommandResponse,\n} from \"@internal/app-binder/command/SignAuthorizationDelegationCommand\";\nimport { type EthErrorCodes } from \"@internal/app-binder/command/utils/ethAppErrors\";\n\nimport { SendCommandInChunksTask } from \"./SendCommandInChunksTask\";\n\nconst TAG_STRUCT_EIP7702_VERSION: number = 0x00;\nconst TAG_STRUCT_EIP7702_DELEGATE_ADDR: number = 0x01;\nconst TAG_STRUCT_EIP7702_CHAIN_ID: number = 0x02;\nconst TAG_STRUCT_EIP7702_NONCE: number = 0x03;\n\ntype SendSignAuthorizationDelegationTaskArgs = {\n derivationPath: string;\n chainId: number;\n address: string;\n nonce: number;\n};\n\nexport class SendSignAuthorizationDelegationTask {\n constructor(\n private api: InternalApi,\n private args: SendSignAuthorizationDelegationTaskArgs,\n ) {}\n\n async run(): Promise<CommandResult<Signature, EthErrorCodes>> {\n const { derivationPath, chainId, address, nonce } = this.args;\n const paths = DerivationPathUtils.splitPath(derivationPath);\n\n const buffer = this.buildData(paths, chainId, address, nonce);\n\n const result =\n await new SendCommandInChunksTask<SignEIP7702AuthorizationCommandResponse>(\n this.api,\n {\n data: buffer,\n commandFactory: (args) =>\n new SignEIP7702AuthorizationCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n },\n ).run();\n\n if (!isSuccessCommandResult(result)) {\n return result;\n }\n\n return result.data.mapOrDefault(\n (data) => CommandResultFactory({ data }),\n CommandResultFactory({\n error: new InvalidStatusWordError(\"no signature returned\"),\n }),\n );\n }\n\n buildData(\n paths: number[],\n chainId: number,\n address: string,\n nonce: number,\n ): Uint8Array {\n const builder = new ByteArrayBuilder();\n // add the derivation paths length\n builder.add8BitUIntToData(paths.length);\n // add every derivation path\n paths.forEach((path) => {\n builder.add32BitUIntToData(path);\n });\n\n // Send EIP7702 Auth structure\n const builderStruct = new ByteArrayBuilder();\n builderStruct.encodeInTLVFromBuffer(\n TAG_STRUCT_EIP7702_VERSION,\n Uint8Array.from([0x01]),\n );\n // Add address\n builderStruct.encodeInTLVFromHexa(\n TAG_STRUCT_EIP7702_DELEGATE_ADDR,\n address,\n );\n // Add chainId\n builderStruct.encodeInTLVFromUInt64(TAG_STRUCT_EIP7702_CHAIN_ID, chainId);\n // Add nonce\n builderStruct.encodeInTLVFromUInt64(TAG_STRUCT_EIP7702_NONCE, nonce);\n const structBuffer = builderStruct.build();\n\n return builder\n .add16BitUIntToData(structBuffer.length)\n .addBufferToData(structBuffer)\n .build();\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OACE,oBAAAA,EAEA,wBAAAC,EAEA,0BAAAC,EACA,0BAAAC,MACK,kCACP,OAAS,uBAAAC,MAA2B,yBAGpC,OACE,mCAAAC,MAEK,kEAGP,OAAS,2BAAAC,MAA+B,4BAExC,MAAMC,EAAqC,EACrCC,EAA2C,EAC3CC,EAAsC,EACtCC,EAAmC,EASlC,MAAMC,CAAoC,CAC/C,YACUC,EACAC,EACR,CAFQ,SAAAD,EACA,UAAAC,CACP,CAEH,MAAM,KAAwD,CAC5D,KAAM,CAAE,eAAAC,EAAgB,QAAAC,EAAS,QAAAC,EAAS,MAAAC,CAAM,EAAI,KAAK,KACnDC,EAAQd,EAAoB,UAAUU,CAAc,EAEpDK,EAAS,KAAK,UAAUD,EAAOH,EAASC,EAASC,CAAK,EAEtDG,EACJ,MAAM,IAAId,EACR,KAAK,IACL,CACE,KAAMa,EACN,eAAiBN,GACf,IAAIR,EAAgC,CAClC,KAAMQ,EAAK,YACX,aAAcA,EAAK,YACrB,CAAC,CACL,CACF,EAAE,IAAI,EAER,OAAKV,EAAuBiB,CAAM,EAI3BA,EAAO,KAAK,aAChBC,GAASpB,EAAqB,CAAE,KAAAoB,CAAK,CAAC,EACvCpB,EAAqB,CACnB,MAAO,IAAIC,EAAuB,uBAAuB,CAC3D,CAAC,CACH,EARSkB,CASX,CAEA,UACEF,EACAH,EACAC,EACAC,EACY,CACZ,MAAMK,EAAU,IAAItB,EAEpBsB,EAAQ,kBAAkBJ,EAAM,MAAM,EAEtCA,EAAM,QAASK,GAAS,CACtBD,EAAQ,mBAAmBC,CAAI,CACjC,CAAC,EAGD,MAAMC,EAAgB,IAAIxB,EAC1BwB,EAAc,sBACZjB,EACA,WAAW,KAAK,CAAC,CAAI,CAAC,CACxB,EAEAiB,EAAc,oBACZhB,EACAQ,CACF,EAEAQ,EAAc,sBAAsBf,EAA6BM,CAAO,EAExES,EAAc,sBAAsBd,EAA0BO,CAAK,EACnE,MAAMQ,EAAeD,EAAc,MAAM,EAEzC,OAAOF,EACJ,mBAAmBG,EAAa,MAAM,EACtC,gBAAgBA,CAAY,EAC5B,MAAM,CACX,CACF",
|
|
6
|
+
"names": ["ByteArrayBuilder", "CommandResultFactory", "InvalidStatusWordError", "isSuccessCommandResult", "DerivationPathUtils", "SignEIP7702AuthorizationCommand", "SendCommandInChunksTask", "TAG_STRUCT_EIP7702_VERSION", "TAG_STRUCT_EIP7702_DELEGATE_ADDR", "TAG_STRUCT_EIP7702_CHAIN_ID", "TAG_STRUCT_EIP7702_NONCE", "SendSignAuthorizationDelegationTask", "api", "args", "derivationPath", "chainId", "address", "nonce", "paths", "buffer", "result", "data", "builder", "path", "builderStruct", "structBuffer"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{CommandResultFactory as a}from"@ledgerhq/device-management-kit";import{InvalidStatusWordError as o}from"@ledgerhq/device-management-kit";import{Just as m,Nothing as l}from"purify-ts";import{SignEIP7702AuthorizationCommand as r}from"../../app-binder/command/SignAuthorizationDelegationCommand";import{makeDeviceActionInternalApiMock as f}from"../../app-binder/device-action/__test-utils__/makeInternalApi";import{SendSignAuthorizationDelegationTask as d}from"./SendSignAuthorizationDelegationTask";const u=new Uint8Array([5,128,0,0,44,128,0,0,60,128,0,0,0,0,0,0,0,0,0,0,0,0,45,0,1,1,1,20,76,210,65,232,209,81,14,48,178,7,99,151,175,199,80,138,229,156,102,201,2,8,0,0,0,0,0,0,0,1,3,8,0,0,0,0,0,0,0,41]),i=new Uint8Array([5,128,0,0,44,128,0,0,60,128,0,0,0,0,0,0,0,0,0,0,0,1,9,0,1,1,1,240,76,210,65,232,209,81,14,48,178,7,99,151,175,199,80,138,229,156,102,201,76,210,65,232,209,81,14,48,178,7,99,151,175,199,80,138,229,156,102,201,76,210,65,232,209,81,14,48,178,7,99,151,175,199,80,138,229,156,102,201,76,210,65,232,209,81,14,48,178,7,99,151,175,199,80,138,229,156,102,201,76,210,65,232,209,81,14,48,178,7,99,151,175,199,80,138,229,156,102,201,76,210,65,232,209,81,14,48,178,7,99,151,175,199,80,138,229,156,102,201,76,210,65,232,209,81,14,48,178,7,99,151,175,199,80,138,229,156,102,201,76,210,65,232,209,81,14,48,178,7,99,151,175,199,80,138,229,156,102,201,76,210,65,232,209,81,14,48,178,7,99,151,175,199,80,138,229,156,102,201,76,210,65,232,209,81,14,48,178,7,99,151,175,199,80,138,229,156,102,201,76,210,65,232,209,81,14,48,178,7,99,151,175,199,80,138,229,156,102,201,76,210,65,232,209,81,14,48,178,7,99,151,175,199,80,138,229,156,102,201,2,8,0,0,0,0,0,0,0,1,3,8,0,0,0,0,0,0,0,41]);describe("SendSignAuthorizationDelegationTask",()=>{const x=f(),n={v:27,r:"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",s:"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"},s=a({data:m(n)}),t=a({data:l});beforeEach(()=>{vi.resetAllMocks()}),describe("run",()=>{it("should send the message in chunks",async()=>{const e={derivationPath:"44'/60'/0'/0/0",address:"0x4Cd241E8d1510e30b2076397afc7508Ae59C66c9",chainId:1,nonce:41};x.sendCommand.mockResolvedValueOnce(s),x.sendCommand.mockResolvedValueOnce(t);const c=await new d(x,e).run();expect(x.sendCommand.mock.calls).toHaveLength(1),expect(x.sendCommand.mock.calls[0][0]).toStrictEqual(new r({data:new Uint8Array(u),isFirstChunk:!0})),expect(c.data).toStrictEqual(n)}),it("should send the long message in chunks",async()=>{const e={derivationPath:"44'/60'/0'/0/0",address:"0x4Cd241E8d1510e30b2076397afc7508Ae59C66c94Cd241E8d1510e30b2076397afc7508Ae59C66c94Cd241E8d1510e30b2076397afc7508Ae59C66c94Cd241E8d1510e30b2076397afc7508Ae59C66c94Cd241E8d1510e30b2076397afc7508Ae59C66c94Cd241E8d1510e30b2076397afc7508Ae59C66c94Cd241E8d1510e30b2076397afc7508Ae59C66c94Cd241E8d1510e30b2076397afc7508Ae59C66c94Cd241E8d1510e30b2076397afc7508Ae59C66c94Cd241E8d1510e30b2076397afc7508Ae59C66c94Cd241E8d1510e30b2076397afc7508Ae59C66c94Cd241E8d1510e30b2076397afc7508Ae59C66c9",chainId:1,nonce:41};x.sendCommand.mockResolvedValueOnce(t),x.sendCommand.mockResolvedValueOnce(s);const c=await new d(x,e).run();expect(x.sendCommand.mock.calls).toHaveLength(2),expect(x.sendCommand.mock.calls[0][0]).toStrictEqual(new r({data:i.slice(0,255),isFirstChunk:!0})),expect(x.sendCommand.mock.calls[1][0]).toStrictEqual(new r({data:i.slice(255,510),isFirstChunk:!1})),expect(c.data).toStrictEqual(n)}),it("should return an error if the command fails",async()=>{const e={derivationPath:"44'/60'/0'/0/0",address:"0x4Cd241E8d1510e30b2076397afc7508Ae59C66c9",chainId:1,nonce:41};x.sendCommand.mockResolvedValueOnce(a({error:new o("An error")}));const c=await new d(x,e).run();expect(c).toStrictEqual(a({error:new o("An error")}))}),it("should return an error if the command returns no data",async()=>{const e={derivationPath:"44'/60'/0'/0/0",address:"0x4Cd241E8d1510e30b2076397afc7508Ae59C66c9",chainId:1,nonce:41};x.sendCommand.mockResolvedValueOnce(t);const c=await new d(x,e).run();expect(c).toStrictEqual(a({error:new o("no signature returned")}))})})});
|
|
2
|
+
//# sourceMappingURL=SendSignAuthorizationDelegationTask.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/internal/app-binder/task/SendSignAuthorizationDelegationTask.test.ts"],
|
|
4
|
+
"sourcesContent": ["import { CommandResultFactory } from \"@ledgerhq/device-management-kit\";\nimport { InvalidStatusWordError } from \"@ledgerhq/device-management-kit\";\nimport { Just, Nothing } from \"purify-ts\";\n\nimport { SignEIP7702AuthorizationCommand } from \"@internal/app-binder/command/SignAuthorizationDelegationCommand\";\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\n\nimport { SendSignAuthorizationDelegationTask } from \"./SendSignAuthorizationDelegationTask\";\n\nconst SMALL_MESSAGE_DATA = new Uint8Array([\n 0x05, 0x80, 0x00, 0x00, 0x2c, 0x80, 0x00, 0x00, 0x3c, 0x80, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x01, 0x01,\n 0x01, 0x14, 0x4c, 0xd2, 0x41, 0xe8, 0xd1, 0x51, 0x0e, 0x30, 0xb2, 0x07, 0x63,\n 0x97, 0xaf, 0xc7, 0x50, 0x8a, 0xe5, 0x9c, 0x66, 0xc9, 0x02, 0x08, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x29,\n]);\n\nconst LONG_MESSAGE_DATA = new Uint8Array([\n 0x05, 0x80, 0x00, 0x00, 0x2c, 0x80, 0x00, 0x00, 0x3c, 0x80, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x09, 0x00, 0x01, 0x01,\n 0x01, 0xf0, 0x4c, 0xd2, 0x41, 0xe8, 0xd1, 0x51, 0x0e, 0x30, 0xb2, 0x07, 0x63,\n 0x97, 0xaf, 0xc7, 0x50, 0x8a, 0xe5, 0x9c, 0x66, 0xc9, 0x4c, 0xd2, 0x41, 0xe8,\n 0xd1, 0x51, 0x0e, 0x30, 0xb2, 0x07, 0x63, 0x97, 0xaf, 0xc7, 0x50, 0x8a, 0xe5,\n 0x9c, 0x66, 0xc9, 0x4c, 0xd2, 0x41, 0xe8, 0xd1, 0x51, 0x0e, 0x30, 0xb2, 0x07,\n 0x63, 0x97, 0xaf, 0xc7, 0x50, 0x8a, 0xe5, 0x9c, 0x66, 0xc9, 0x4c, 0xd2, 0x41,\n 0xe8, 0xd1, 0x51, 0x0e, 0x30, 0xb2, 0x07, 0x63, 0x97, 0xaf, 0xc7, 0x50, 0x8a,\n 0xe5, 0x9c, 0x66, 0xc9, 0x4c, 0xd2, 0x41, 0xe8, 0xd1, 0x51, 0x0e, 0x30, 0xb2,\n 0x07, 0x63, 0x97, 0xaf, 0xc7, 0x50, 0x8a, 0xe5, 0x9c, 0x66, 0xc9, 0x4c, 0xd2,\n 0x41, 0xe8, 0xd1, 0x51, 0x0e, 0x30, 0xb2, 0x07, 0x63, 0x97, 0xaf, 0xc7, 0x50,\n 0x8a, 0xe5, 0x9c, 0x66, 0xc9, 0x4c, 0xd2, 0x41, 0xe8, 0xd1, 0x51, 0x0e, 0x30,\n 0xb2, 0x07, 0x63, 0x97, 0xaf, 0xc7, 0x50, 0x8a, 0xe5, 0x9c, 0x66, 0xc9, 0x4c,\n 0xd2, 0x41, 0xe8, 0xd1, 0x51, 0x0e, 0x30, 0xb2, 0x07, 0x63, 0x97, 0xaf, 0xc7,\n 0x50, 0x8a, 0xe5, 0x9c, 0x66, 0xc9, 0x4c, 0xd2, 0x41, 0xe8, 0xd1, 0x51, 0x0e,\n 0x30, 0xb2, 0x07, 0x63, 0x97, 0xaf, 0xc7, 0x50, 0x8a, 0xe5, 0x9c, 0x66, 0xc9,\n 0x4c, 0xd2, 0x41, 0xe8, 0xd1, 0x51, 0x0e, 0x30, 0xb2, 0x07, 0x63, 0x97, 0xaf,\n 0xc7, 0x50, 0x8a, 0xe5, 0x9c, 0x66, 0xc9, 0x4c, 0xd2, 0x41, 0xe8, 0xd1, 0x51,\n 0x0e, 0x30, 0xb2, 0x07, 0x63, 0x97, 0xaf, 0xc7, 0x50, 0x8a, 0xe5, 0x9c, 0x66,\n 0xc9, 0x4c, 0xd2, 0x41, 0xe8, 0xd1, 0x51, 0x0e, 0x30, 0xb2, 0x07, 0x63, 0x97,\n 0xaf, 0xc7, 0x50, 0x8a, 0xe5, 0x9c, 0x66, 0xc9, 0x02, 0x08, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x29,\n]);\n\ndescribe(\"SendSignAuthorizationDelegationTask\", () => {\n const apiMock = makeDeviceActionInternalApiMock();\n const signature = {\n v: 27,\n r: \"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef\",\n s: \"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef\",\n };\n const resultOk = CommandResultFactory({\n data: Just(signature),\n });\n const resultNothing = CommandResultFactory({ data: Nothing });\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"run\", () => {\n it(\"should send the message in chunks\", async () => {\n // GIVEN\n const args = {\n derivationPath: \"44'/60'/0'/0/0\",\n address: \"0x4Cd241E8d1510e30b2076397afc7508Ae59C66c9\",\n chainId: 1,\n nonce: 41,\n };\n apiMock.sendCommand.mockResolvedValueOnce(resultOk);\n apiMock.sendCommand.mockResolvedValueOnce(resultNothing);\n\n // WHEN\n const result = await new SendSignAuthorizationDelegationTask(\n apiMock,\n args,\n ).run();\n\n // THEN\n expect(apiMock.sendCommand.mock.calls).toHaveLength(1);\n expect(apiMock.sendCommand.mock.calls[0]![0]).toStrictEqual(\n new SignEIP7702AuthorizationCommand({\n data: new Uint8Array(SMALL_MESSAGE_DATA),\n isFirstChunk: true,\n }),\n );\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n expect((result as any).data).toStrictEqual(signature);\n });\n\n it(\"should send the long message in chunks\", async () => {\n // GIVEN\n const args = {\n derivationPath: \"44'/60'/0'/0/0\",\n address:\n \"0x4Cd241E8d1510e30b2076397afc7508Ae59C66c94Cd241E8d1510e30b2076397afc7508Ae59C66c94Cd241E8d1510e30b2076397afc7508Ae59C66c94Cd241E8d1510e30b2076397afc7508Ae59C66c94Cd241E8d1510e30b2076397afc7508Ae59C66c94Cd241E8d1510e30b2076397afc7508Ae59C66c94Cd241E8d1510e30b2076397afc7508Ae59C66c94Cd241E8d1510e30b2076397afc7508Ae59C66c94Cd241E8d1510e30b2076397afc7508Ae59C66c94Cd241E8d1510e30b2076397afc7508Ae59C66c94Cd241E8d1510e30b2076397afc7508Ae59C66c94Cd241E8d1510e30b2076397afc7508Ae59C66c9\",\n chainId: 1,\n nonce: 41,\n };\n apiMock.sendCommand.mockResolvedValueOnce(resultNothing);\n apiMock.sendCommand.mockResolvedValueOnce(resultOk);\n\n // WHEN\n const result = await new SendSignAuthorizationDelegationTask(\n apiMock,\n args,\n ).run();\n\n // THEN\n expect(apiMock.sendCommand.mock.calls).toHaveLength(2);\n expect(apiMock.sendCommand.mock.calls[0]![0]).toStrictEqual(\n new SignEIP7702AuthorizationCommand({\n data: LONG_MESSAGE_DATA.slice(0, 255),\n isFirstChunk: true,\n }),\n );\n expect(apiMock.sendCommand.mock.calls[1]![0]).toStrictEqual(\n new SignEIP7702AuthorizationCommand({\n data: LONG_MESSAGE_DATA.slice(255, 510),\n isFirstChunk: false,\n }),\n );\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n expect((result as any).data).toStrictEqual(signature);\n });\n\n it(\"should return an error if the command fails\", async () => {\n // GIVEN\n const args = {\n derivationPath: \"44'/60'/0'/0/0\",\n address: \"0x4Cd241E8d1510e30b2076397afc7508Ae59C66c9\",\n chainId: 1,\n nonce: 41,\n };\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"An error\"),\n }),\n );\n\n // WHEN\n const result = await new SendSignAuthorizationDelegationTask(\n apiMock,\n args,\n ).run();\n\n // THEN\n expect(result).toStrictEqual(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"An error\"),\n }),\n );\n });\n\n it(\"should return an error if the command returns no data\", async () => {\n // GIVEN\n const args = {\n derivationPath: \"44'/60'/0'/0/0\",\n address: \"0x4Cd241E8d1510e30b2076397afc7508Ae59C66c9\",\n chainId: 1,\n nonce: 41,\n };\n apiMock.sendCommand.mockResolvedValueOnce(resultNothing);\n\n // WHEN\n const result = await new SendSignAuthorizationDelegationTask(\n apiMock,\n args,\n ).run();\n\n // THEN\n expect(result).toStrictEqual(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"no signature returned\"),\n }),\n );\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["CommandResultFactory", "InvalidStatusWordError", "Just", "Nothing", "SignEIP7702AuthorizationCommand", "makeDeviceActionInternalApiMock", "SendSignAuthorizationDelegationTask", "SMALL_MESSAGE_DATA", "LONG_MESSAGE_DATA", "apiMock", "signature", "resultOk", "resultNothing", "args", "result"]
|
|
7
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{APDU_MAX_PAYLOAD as
|
|
1
|
+
import{APDU_MAX_PAYLOAD as m,ByteArrayBuilder as f,CommandResultFactory as d,hexaStringToBuffer as T,InvalidStatusWordError as l,isSuccessCommandResult as g}from"@ledgerhq/device-management-kit";import{DerivationPathUtils as y}from"@ledgerhq/signer-utils";import{decodeRlp as S,encodeRlp as A}from"ethers";import{Nothing as C}from"purify-ts";import{ClearSigningType as I}from"../../../api/model/ClearSigningType";import{TransactionType as h}from"../../../api/model/TransactionType";import{SignTransactionCommand as U}from"../../app-binder/command/SignTransactionCommand";import{StartTransactionCommand as v}from"../../app-binder/command/StartTransactionCommand";const k=4;class x{constructor(o,a){this.api=o;this.args=a}async run(){if(this.args.clearSigningType===I.EIP7730){const r=await this.api.sendCommand(new v);return g(r)?this.recoverSignature(r.data).mapOrDefault(s=>d({data:s}),d({error:new l("no signature returned")})):r}const{derivationPath:o,serializedTransaction:a}=this.args,n=y.splitPath(o),t=new f(a.length+1+n.length*k);t.add8BitUIntToData(n.length),n.forEach(r=>{t.add32BitUIntToData(r)});const i=t.build(),e=this.getChunks(i,a);let c=C;for(let r=0;r<e.length;r++){const s=await this.api.sendCommand(new U({serializedTransaction:e[r],isFirstChunk:r===0}));if(!g(s))return s;c=s.data}return this.recoverSignature(c).mapOrDefault(r=>d({data:r}),d({error:new l("no signature returned")}))}getChunks(o,a){const n=Uint8Array.from([...o,...a]);let t=m;if(n.length<=t)return[n];if(this.args.transactionType===h.LEGACY)try{const c=S(a);if(Array.isArray(c)){const r=c.slice(-3),s=A(r),p=T(s).subarray(1);for(t=m;t>o.length;t--){const u=n.length%t;if(u===0||u>p.length)break}}}catch{t=m}let i=0;const e=[];for(;i<n.length;)e.push(n.slice(i,i+t)),i+=t;return e}recoverSignature(o){return o.map(({v:a,r:n,s:t})=>{if(this.args.transactionType!==h.LEGACY)return{v:a,r:n,s:t};const i=4294967295;let e=this.args.chainId;for(;e>i;)e=e>>8;const r=e*2+35&255;return{v:(a==r?0:1)+this.args.chainId*2+35,r:n,s:t}})}}export{x as SendSignTransactionTask};
|
|
2
2
|
//# sourceMappingURL=SendSignTransactionTask.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/task/SendSignTransactionTask.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n APDU_MAX_PAYLOAD,\n ByteArrayBuilder,\n type CommandResult,\n CommandResultFactory,\n hexaStringToBuffer,\n type InternalApi,\n InvalidStatusWordError,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\nimport { DerivationPathUtils } from \"@ledgerhq/signer-utils\";\nimport { decodeRlp, encodeRlp } from \"ethers\";\nimport { Nothing } from \"purify-ts\";\n\nimport { type Signature } from \"@api/index\";\nimport { TransactionType } from \"@api/model/TransactionType\";\nimport {\n SignTransactionCommand,\n type SignTransactionCommandResponse,\n} from \"@internal/app-binder/command/SignTransactionCommand\";\nimport { StartTransactionCommand } from \"@internal/app-binder/command/StartTransactionCommand\";\nimport { type EthErrorCodes } from \"@internal/app-binder/command/utils/ethAppErrors\";\n\nconst PATH_SIZE = 4;\n\ntype SendSignTransactionTaskArgs = {\n derivationPath: string;\n serializedTransaction: Uint8Array;\n chainId: number;\n transactionType: TransactionType;\n
|
|
5
|
-
"mappings": "AAAA,OACE,oBAAAA,EACA,oBAAAC,EAEA,wBAAAC,EACA,sBAAAC,EAEA,0BAAAC,EACA,0BAAAC,MACK,kCACP,OAAS,uBAAAC,MAA2B,yBACpC,OAAS,aAAAC,EAAW,aAAAC,MAAiB,SACrC,OAAS,WAAAC,MAAe,YAGxB,OAAS,mBAAAC,MAAuB,6BAChC,OACE,0BAAAC,MAEK,sDACP,OAAS,2BAAAC,MAA+B,uDAGxC,MAAMC,EAAY,EAUX,MAAMC,CAAwB,CACnC,YACUC,EACAC,EACR,CAFQ,SAAAD,EACA,UAAAC,CACP,CAEH,MAAM,KAAwD,CAE5D,GAAI,
|
|
6
|
-
"names": ["APDU_MAX_PAYLOAD", "ByteArrayBuilder", "CommandResultFactory", "hexaStringToBuffer", "InvalidStatusWordError", "isSuccessCommandResult", "DerivationPathUtils", "decodeRlp", "encodeRlp", "Nothing", "TransactionType", "SignTransactionCommand", "StartTransactionCommand", "PATH_SIZE", "SendSignTransactionTask", "api", "args", "signature", "data", "derivationPath", "serializedTransaction", "paths", "builder", "path", "derivations", "chunks", "resultData", "i", "result", "buffer", "chunkSize", "decodedRlp", "decodedVrs", "encodedVrs", "encodedVrsBuff", "lastChunkSize", "offset", "v", "r", "s", "MAX_UINT32", "truncatedChainId", "v0"]
|
|
4
|
+
"sourcesContent": ["import {\n APDU_MAX_PAYLOAD,\n ByteArrayBuilder,\n type CommandResult,\n CommandResultFactory,\n hexaStringToBuffer,\n type InternalApi,\n InvalidStatusWordError,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\nimport { DerivationPathUtils } from \"@ledgerhq/signer-utils\";\nimport { decodeRlp, encodeRlp } from \"ethers\";\nimport { Nothing } from \"purify-ts\";\n\nimport { type Signature } from \"@api/index\";\nimport { ClearSigningType } from \"@api/model/ClearSigningType\";\nimport { TransactionType } from \"@api/model/TransactionType\";\nimport {\n SignTransactionCommand,\n type SignTransactionCommandResponse,\n} from \"@internal/app-binder/command/SignTransactionCommand\";\nimport { StartTransactionCommand } from \"@internal/app-binder/command/StartTransactionCommand\";\nimport { type EthErrorCodes } from \"@internal/app-binder/command/utils/ethAppErrors\";\n\nconst PATH_SIZE = 4;\n\ntype SendSignTransactionTaskArgs = {\n derivationPath: string;\n serializedTransaction: Uint8Array;\n chainId: number;\n transactionType: TransactionType;\n clearSigningType: ClearSigningType;\n};\n\nexport class SendSignTransactionTask {\n constructor(\n private api: InternalApi,\n private args: SendSignTransactionTaskArgs,\n ) {}\n\n async run(): Promise<CommandResult<Signature, EthErrorCodes>> {\n // For generic-parser transactions, the derivation path and transaction were previously sent\n if (this.args.clearSigningType === ClearSigningType.EIP7730) {\n const signature = await this.api.sendCommand(\n new StartTransactionCommand(),\n );\n if (!isSuccessCommandResult(signature)) {\n return signature;\n }\n return this.recoverSignature(signature.data).mapOrDefault(\n (data) => CommandResultFactory({ data }),\n CommandResultFactory({\n error: new InvalidStatusWordError(\"no signature returned\"),\n }),\n );\n }\n\n // For other transactions, add derivation path and transaction to the payload\n const { derivationPath, serializedTransaction } = this.args;\n const paths = DerivationPathUtils.splitPath(derivationPath);\n const builder = new ByteArrayBuilder(\n serializedTransaction.length + 1 + paths.length * PATH_SIZE,\n );\n // add the derivation paths length\n builder.add8BitUIntToData(paths.length);\n // add every derivation path\n paths.forEach((path) => {\n builder.add32BitUIntToData(path);\n });\n const derivations = builder.build();\n\n // Send chunks\n const chunks = this.getChunks(derivations, serializedTransaction);\n let resultData: SignTransactionCommandResponse = Nothing;\n for (let i = 0; i < chunks.length; i++) {\n const result = await this.api.sendCommand(\n new SignTransactionCommand({\n serializedTransaction: chunks[i]!,\n isFirstChunk: i === 0,\n }),\n );\n if (!isSuccessCommandResult(result)) {\n return result;\n }\n resultData = result.data;\n }\n\n return this.recoverSignature(resultData).mapOrDefault(\n (data) => CommandResultFactory({ data }),\n CommandResultFactory({\n error: new InvalidStatusWordError(\"no signature returned\"),\n }),\n );\n }\n\n private getChunks(\n derivations: Uint8Array,\n serializedTransaction: Uint8Array,\n ): Uint8Array[] {\n const buffer = Uint8Array.from([...derivations, ...serializedTransaction]);\n\n // No chunking for small transactions\n let chunkSize = APDU_MAX_PAYLOAD;\n if (buffer.length <= chunkSize) {\n return [buffer];\n }\n\n // Since EIP-155, legacy transactions signature encode the chainId in V parity and\n // it has to be part of the hashed transaction:\n // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-155.md\n //\n // A known issue is present in ethereum app for those transactions:\n // if the last chunk start at the EIP-155 marker (the chainId), then the app\n // will confuse it with a pre-eip155 transaction, and compute an invalid signature\n // before receiving the last chunk...\n // It cannot be fixed without breaking APDU backward compatibility.\n //\n // Therefore the client has to make sure the last chunk don't start on that marker.\n if (this.args.transactionType === TransactionType.LEGACY) {\n try {\n // Decode the RLP of the transaction and keep only the last 3 elements (v, r, s)\n const decodedRlp = decodeRlp(serializedTransaction);\n if (Array.isArray(decodedRlp)) {\n const decodedVrs = decodedRlp.slice(-3);\n // Encode those values back to RLP in order to get the length of this serialized list\n // Result should be something like [0xc0 + list payload length, list.map(rlp)]\n // since only v can be used to store the chainId in legacy transactions\n const encodedVrs = encodeRlp(decodedVrs);\n // Since chainIds are uint256, the list payload length can be 1B (v rlp description) + 32B (v) + 1B (r) + 1B (s) = 35B max (< 55B)\n // Therefore, the RLP of this vrs list should be prefixed by a value between [0xc1, 0xe3] (0xc0 + 35B = 0xe3 max)\n // @see https://ethereum.org/en/developers/docs/data-structures-and-encoding/rlp/\n // `encodedVrs` is then everything but the first byte of this serialization\n const encodedVrsBuff = hexaStringToBuffer(encodedVrs)!.subarray(1);\n\n // Now we search for the biggest chunk value that won't chunk just before the v,r,s values.\n for (\n chunkSize = APDU_MAX_PAYLOAD;\n chunkSize > derivations.length;\n chunkSize--\n ) {\n const lastChunkSize = buffer.length % chunkSize;\n if (lastChunkSize === 0 || lastChunkSize > encodedVrsBuff.length) {\n break;\n }\n }\n }\n } catch (_error) {\n // fallback to \"standard\" APDU chunk size if the transaction cannot be decoded\n chunkSize = APDU_MAX_PAYLOAD;\n }\n }\n\n // Finally we can chunk the buffer\n let offset = 0;\n const chunks: Uint8Array[] = [];\n while (offset < buffer.length) {\n chunks.push(buffer.slice(offset, offset + chunkSize));\n offset += chunkSize;\n }\n return chunks;\n }\n\n private recoverSignature(\n data: SignTransactionCommandResponse,\n ): SignTransactionCommandResponse {\n return data.map(({ v, r, s }) => {\n if (this.args.transactionType !== TransactionType.LEGACY) {\n return { v, r, s };\n }\n\n // Legacy transactions after EIP-155 has a signature parity formatted as:\n // V = CHAIN_ID * 2 + 35 + {0,1}\n // where {0,1} is the parity\n // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-155.md\n //\n // A known issue is present in ethereum app:\n // - chainId is encoded on 32 bits\n // - V is encoded on 8 bits\n // It means both can overflow for big chain IDs.\n //\n // That's why the client has to reconstruct it, to keep APDU backward compatibility\n // for main chain IDs.\n //\n // For more infos:\n // https://github.com/LedgerHQ/app-ethereum/blob/1.12.2/src_features/signTx/ui_common_signTx.c#L36\n // https://github.com/LedgerHQ/app-ethereum/blob/1.12.2/client/src/ledger_app_clients/ethereum/utils.py#L35\n\n // First truncate the chainId\n const MAX_UINT32 = 0xffffffff;\n let truncatedChainId = this.args.chainId;\n while (truncatedChainId > MAX_UINT32) {\n truncatedChainId = truncatedChainId >> 8;\n }\n\n // Then truncate the parity encoding\n const MAX_UINT8 = 0xff;\n const v0 = (truncatedChainId * 2 + 35) & MAX_UINT8;\n\n // Now reconstruct the full V\n const parity = v == v0 ? 0 : 1;\n const fullV = parity + this.args.chainId * 2 + 35;\n return { v: fullV, r, s };\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["APDU_MAX_PAYLOAD", "ByteArrayBuilder", "CommandResultFactory", "hexaStringToBuffer", "InvalidStatusWordError", "isSuccessCommandResult", "DerivationPathUtils", "decodeRlp", "encodeRlp", "Nothing", "ClearSigningType", "TransactionType", "SignTransactionCommand", "StartTransactionCommand", "PATH_SIZE", "SendSignTransactionTask", "api", "args", "signature", "data", "derivationPath", "serializedTransaction", "paths", "builder", "path", "derivations", "chunks", "resultData", "i", "result", "buffer", "chunkSize", "decodedRlp", "decodedVrs", "encodedVrs", "encodedVrsBuff", "lastChunkSize", "offset", "v", "r", "s", "MAX_UINT32", "truncatedChainId", "v0"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{APDU_MAX_PAYLOAD as
|
|
1
|
+
import{APDU_MAX_PAYLOAD as l,CommandResultFactory as r,hexaStringToBuffer as w,InvalidStatusWordError as y}from"@ledgerhq/device-management-kit";import{Transaction as S}from"ethers";import{Just as u,Nothing as v}from"purify-ts";import{ClearSigningType as n}from"../../../api/model/ClearSigningType";import{SignTransactionCommand as s}from"../../app-binder/command/SignTransactionCommand";import{StartTransactionCommand as C}from"../../app-binder/command/StartTransactionCommand";import{makeDeviceActionInternalApiMock as k}from"../../app-binder/device-action/__test-utils__/makeInternalApi";import{SendSignTransactionTask as t}from"./SendSignTransactionTask";const o=new Uint8Array([5,128,0,0,44,128,0,0,60,128,0,0,0,0,0,0,0,0,0,0,0]),c=new Uint8Array([5,128,0,0,44,128,0,0,60,128,0,0,0,0,0,0,0,0,0,0,0,248,107,130,6,126,132,87,25,19,31,131,1,16,104,148,218,193,127,149,141,46,229,35,162,32,98,6,153,69,151,193,61,131,30,199,128,184,68,169,5,156,187,0,0]),m=new Uint8Array([249,8,175,38,133,1,178,61,148,131,131,5,193,252,148,222,241,192,222,217,190,199,241,161,103,8,25,131,50,64,240,39,178,94,255,128,185,8,136,65,85,101,176,0,0,0,0,0,0,0,0,0,0,0,0,31,152,64,168,93,90,245,191,29,23,98,249,37,189,173,220,66,1,249,132,0,0,0,0,0,0,0,0,0,0,0,0,160,184,105,145,198,33,139,54,193,209,157,74,46,158,176,206,54,6,235,72,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,233,51,89,83,149,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,51,239,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,96,0,0,0,0,0,0,0,0,0]);describe("SendSignTransactionTask",()=>{const x=k(),f={v:27,r:"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",s:"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"},p=r({data:u(f)}),d=r({data:v});beforeEach(()=>{vi.resetAllMocks()}),describe("run",()=>{it("should send the transaction in one command",async()=>{const e={derivationPath:"44'/60'/0'/0/0",serializedTransaction:c,chainId:1,transactionType:1,clearSigningType:n.BASIC};x.sendCommand.mockResolvedValueOnce(p);const a=await new t(x,e).run();expect(x.sendCommand.mock.calls).toHaveLength(1),expect(x.sendCommand.mock.calls[0][0]).toStrictEqual(new s({serializedTransaction:new Uint8Array([...o,...c]),isFirstChunk:!0})),expect(a.data).toStrictEqual(f)}),it("Generic-parser transaction should be signed without payload",async()=>{const e={derivationPath:"44'/60'/0'/0/0",serializedTransaction:c,chainId:1,transactionType:1,clearSigningType:n.EIP7730};x.sendCommand.mockResolvedValueOnce(p);const a=await new t(x,e).run();expect(x.sendCommand.mock.calls).toHaveLength(1),expect(x.sendCommand.mock.calls[0][0]).toStrictEqual(new C),expect(a.data).toStrictEqual(f)}),it("should send the transaction in chunks",async()=>{const e={derivationPath:"44'/60'/0'/0/0",serializedTransaction:m,chainId:1,transactionType:1,clearSigningType:n.BASIC};x.sendCommand.mockResolvedValueOnce(d),x.sendCommand.mockResolvedValueOnce(p);const a=await new t(x,e).run();expect(x.sendCommand.mock.calls).toHaveLength(2),expect(x.sendCommand.mock.calls[0][0]).toStrictEqual(new s({serializedTransaction:new Uint8Array([...o,...m]).slice(0,l),isFirstChunk:!0})),expect(x.sendCommand.mock.calls[1][0]).toStrictEqual(new s({serializedTransaction:new Uint8Array([...o,...m]).slice(l,l*2),isFirstChunk:!1})),expect(a.data).toStrictEqual(f)}),it.each([[458,127,254],[458,0x818181818181,254],[452,0x818181818181,251]])("should prevent chunking legacy transactions just before the [r,s,v] for dataSize %i, chainId %i",async(e,a,h)=>{const i=new S;i.to="0x0123456789abcdef0123456789abcdef01234567",i.nonce=0,i.value=0n,i.gasLimit=1n,i.gasPrice=2n,i.data="0x"+new Array(e).fill("00").join(""),i.chainId=a,i.type=0;const g=w(i.unsignedSerialized),T={derivationPath:"44'/60'/0'/0/0",serializedTransaction:g,chainId:a,transactionType:0,clearSigningType:n.BASIC};x.sendCommand.mockResolvedValueOnce(d),x.sendCommand.mockResolvedValueOnce(d),x.sendCommand.mockResolvedValue(p),await new t(x,T).run();const b=Uint8Array.from([...o,...g]);expect(x.sendCommand.mock.calls).toHaveLength(3),expect(x.sendCommand.mock.calls[0][0]).toStrictEqual(new s({serializedTransaction:b.slice(0,h),isFirstChunk:!0})),expect(x.sendCommand.mock.calls[1][0]).toStrictEqual(new s({serializedTransaction:b.slice(h,h*2),isFirstChunk:!1})),expect(x.sendCommand.mock.calls[2][0]).toStrictEqual(new s({serializedTransaction:b.slice(h*2),isFirstChunk:!1}))}),it("should return an error if the command fails",async()=>{const e={derivationPath:"44'/60'/0'/0/0",serializedTransaction:c,chainId:1,transactionType:1,clearSigningType:n.BASIC};x.sendCommand.mockResolvedValueOnce(d);const a=await new t(x,e).run();expect(x.sendCommand.mock.calls).toHaveLength(1),expect(x.sendCommand.mock.calls[0][0]).toStrictEqual(new s({serializedTransaction:new Uint8Array([...o,...c]),isFirstChunk:!0})),expect(a.error).toStrictEqual(new y("no signature returned"))}),it("should return an error if the generic-parser command fails",async()=>{const e={derivationPath:"44'/60'/0'/0/0",serializedTransaction:c,chainId:1,transactionType:1,clearSigningType:n.EIP7730};x.sendCommand.mockResolvedValueOnce(d);const a=await new t(x,e).run();expect(x.sendCommand.mock.calls).toHaveLength(1),expect(x.sendCommand.mock.calls[0][0]).toStrictEqual(new C),expect(a.error).toStrictEqual(new y("no signature returned"))}),it("should return an error if the command fails in the middle of the transaction",async()=>{const e={derivationPath:"44'/60'/0'/0/0",serializedTransaction:m,chainId:1,transactionType:1,clearSigningType:n.BASIC};x.sendCommand.mockResolvedValueOnce(d),x.sendCommand.mockResolvedValueOnce(r({error:new y("An error")}));const a=await new t(x,e).run();expect(x.sendCommand.mock.calls).toHaveLength(2),expect(x.sendCommand.mock.calls[0][0]).toStrictEqual(new s({serializedTransaction:new Uint8Array([...o,...m]).slice(0,l),isFirstChunk:!0})),expect(x.sendCommand.mock.calls[1][0]).toStrictEqual(new s({serializedTransaction:new Uint8Array([...o,...m]).slice(l,l*2),isFirstChunk:!1})),expect(a.error).toStrictEqual(new y("An error"))}),it("legacy transaction with small chainId",async()=>{const e={derivationPath:"44'/60'/0'/0/0",serializedTransaction:c,chainId:56,transactionType:0,clearSigningType:n.BASIC};x.sendCommand.mockResolvedValueOnce(r({data:u({v:147,r:"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",s:"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"})}));const a=await new t(x,e).run();expect(a.data.v).toStrictEqual(147)}),it("legacy transaction with small chainId with positive parity",async()=>{const e={derivationPath:"44'/60'/0'/0/0",serializedTransaction:c,chainId:56,transactionType:0,clearSigningType:n.BASIC};x.sendCommand.mockResolvedValueOnce(r({data:u({v:148,r:"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",s:"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"})}));const a=await new t(x,e).run();expect(a.data.v).toStrictEqual(148)}),it("legacy transaction with big chainId",async()=>{const e={derivationPath:"44'/60'/0'/0/0",serializedTransaction:c,chainId:11297108109,transactionType:0,clearSigningType:n.BASIC};x.sendCommand.mockResolvedValueOnce(r({data:u({v:131,r:"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",s:"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"})}));const a=await new t(x,e).run();expect(a.data.v).toStrictEqual(22594216253)}),it("legacy transaction with big chainId with positive parity",async()=>{const e={derivationPath:"44'/60'/0'/0/0",serializedTransaction:c,chainId:11297108109,transactionType:0,clearSigningType:n.BASIC};x.sendCommand.mockResolvedValueOnce(r({data:u({v:132,r:"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",s:"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"})}));const a=await new t(x,e).run();expect(a.data.v).toStrictEqual(22594216254)})})});
|
|
2
2
|
//# sourceMappingURL=SendSignTransactionTask.test.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/task/SendSignTransactionTask.test.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n APDU_MAX_PAYLOAD,\n CommandResultFactory,\n hexaStringToBuffer,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { Transaction } from \"ethers\";\nimport { Just, Nothing } from \"purify-ts\";\n\nimport { SignTransactionCommand } from \"@internal/app-binder/command/SignTransactionCommand\";\nimport { StartTransactionCommand } from \"@internal/app-binder/command/StartTransactionCommand\";\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\n\nimport { SendSignTransactionTask } from \"./SendSignTransactionTask\";\n\nconst PATH = new Uint8Array([\n 0x05, 0x80, 0x00, 0x00, 0x2c, 0x80, 0x00, 0x00, 0x3c, 0x80, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n]);\n\nconst SIMPLE_TRANSACTION = new Uint8Array([\n 0x05, 0x80, 0x00, 0x00, 0x2c, 0x80, 0x00, 0x00, 0x3c, 0x80, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x6b, 0x82, 0x06, 0x7e,\n 0x84, 0x57, 0x19, 0x13, 0x1f, 0x83, 0x01, 0x10, 0x68, 0x94, 0xda, 0xc1, 0x7f,\n 0x95, 0x8d, 0x2e, 0xe5, 0x23, 0xa2, 0x20, 0x62, 0x06, 0x99, 0x45, 0x97, 0xc1,\n 0x3d, 0x83, 0x1e, 0xc7, 0x80, 0xb8, 0x44, 0xa9, 0x05, 0x9c, 0xbb, 0x00, 0x00,\n]);\n\nconst BIG_TRANSACTION = new Uint8Array([\n 0xf9, 0x08, 0xaf, 0x26, 0x85, 0x01, 0xb2, 0x3d, 0x94, 0x83, 0x83, 0x05, 0xc1,\n 0xfc, 0x94, 0xde, 0xf1, 0xc0, 0xde, 0xd9, 0xbe, 0xc7, 0xf1, 0xa1, 0x67, 0x08,\n 0x19, 0x83, 0x32, 0x40, 0xf0, 0x27, 0xb2, 0x5e, 0xff, 0x80, 0xb9, 0x08, 0x88,\n 0x41, 0x55, 0x65, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x1f, 0x98, 0x40, 0xa8, 0x5d, 0x5a, 0xf5, 0xbf, 0x1d, 0x17,\n 0x62, 0xf9, 0x25, 0xbd, 0xad, 0xdc, 0x42, 0x01, 0xf9, 0x84, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xb8, 0x69, 0x91,\n 0xc6, 0x21, 0x8b, 0x36, 0xc1, 0xd1, 0x9d, 0x4a, 0x2e, 0x9e, 0xb0, 0xce, 0x36,\n 0x06, 0xeb, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x61, 0xe9, 0x33, 0x59, 0x53, 0x95, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x33,\n 0xef, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x05, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x40, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n]);\n\ndescribe(\"SendSignTransactionTask\", () => {\n const apiMock = makeDeviceActionInternalApiMock();\n const signature = {\n v: 27,\n r: \"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef\",\n s: \"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef\",\n };\n const resultOk = CommandResultFactory({\n data: Just(signature),\n });\n const resultNothing = CommandResultFactory({ data: Nothing });\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"run\", () => {\n it(\"should send the transaction in one command\", async () => {\n // GIVEN\n const args = {\n derivationPath: \"44'/60'/0'/0/0\",\n serializedTransaction: SIMPLE_TRANSACTION,\n chainId: 1,\n transactionType: 1,\n isLegacy: true,\n };\n apiMock.sendCommand.mockResolvedValueOnce(resultOk);\n\n // WHEN\n const result = await new SendSignTransactionTask(apiMock, args).run();\n\n // THEN\n expect(apiMock.sendCommand.mock.calls).toHaveLength(1);\n expect(apiMock.sendCommand.mock.calls[0]![0]).toStrictEqual(\n new SignTransactionCommand({\n serializedTransaction: new Uint8Array([\n ...PATH,\n ...SIMPLE_TRANSACTION,\n ]),\n isFirstChunk: true,\n }),\n );\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n expect((result as any).data).toStrictEqual(signature);\n });\n\n it(\"Generic-parser transaction should be signed without payload\", async () => {\n // GIVEN\n const args = {\n derivationPath: \"44'/60'/0'/0/0\",\n serializedTransaction: SIMPLE_TRANSACTION,\n chainId: 1,\n transactionType: 1,\n isLegacy: false,\n };\n apiMock.sendCommand.mockResolvedValueOnce(resultOk);\n\n // WHEN\n const result = await new SendSignTransactionTask(apiMock, args).run();\n\n // THEN\n expect(apiMock.sendCommand.mock.calls).toHaveLength(1);\n expect(apiMock.sendCommand.mock.calls[0]![0]).toStrictEqual(\n new StartTransactionCommand(),\n );\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n expect((result as any).data).toStrictEqual(signature);\n });\n\n it(\"should send the transaction in chunks\", async () => {\n // GIVEN\n const args = {\n derivationPath: \"44'/60'/0'/0/0\",\n serializedTransaction: BIG_TRANSACTION,\n chainId: 1,\n transactionType: 1,\n isLegacy: true,\n };\n apiMock.sendCommand.mockResolvedValueOnce(resultNothing);\n apiMock.sendCommand.mockResolvedValueOnce(resultOk);\n\n // WHEN\n const result = await new SendSignTransactionTask(apiMock, args).run();\n\n // THEN\n expect(apiMock.sendCommand.mock.calls).toHaveLength(2);\n expect(apiMock.sendCommand.mock.calls[0]![0]).toStrictEqual(\n new SignTransactionCommand({\n serializedTransaction: new Uint8Array([\n ...PATH,\n ...BIG_TRANSACTION,\n ]).slice(0, APDU_MAX_PAYLOAD),\n isFirstChunk: true,\n }),\n );\n expect(apiMock.sendCommand.mock.calls[1]![0]).toStrictEqual(\n new SignTransactionCommand({\n serializedTransaction: new Uint8Array([\n ...PATH,\n ...BIG_TRANSACTION,\n ]).slice(APDU_MAX_PAYLOAD, APDU_MAX_PAYLOAD * 2),\n isFirstChunk: false,\n }),\n );\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n expect((result as any).data).toStrictEqual(signature);\n });\n\n it.each([\n [458, 127, 254],\n [458, 0x818181818181, 254],\n [452, 0x818181818181, 251],\n ])(\n \"should prevent chunking legacy transactions just before the [r,s,v] for dataSize %i, chainId %i\",\n async (dataSize, chainId, chunkSize) => {\n // GIVEN\n const transaction = new Transaction();\n transaction.to = \"0x0123456789abcdef0123456789abcdef01234567\";\n transaction.nonce = 0;\n transaction.value = 0n;\n transaction.gasLimit = 1n;\n transaction.gasPrice = 2n;\n transaction.data = \"0x\" + new Array(dataSize).fill(\"00\").join(\"\");\n transaction.chainId = chainId;\n transaction.type = 0;\n const serialized = hexaStringToBuffer(transaction.unsignedSerialized)!;\n const args = {\n derivationPath: \"44'/60'/0'/0/0\",\n serializedTransaction: serialized,\n chainId,\n transactionType: 0,\n isLegacy: true,\n };\n apiMock.sendCommand.mockResolvedValueOnce(resultNothing);\n apiMock.sendCommand.mockResolvedValueOnce(resultNothing);\n apiMock.sendCommand.mockResolvedValue(resultOk);\n\n // WHEN\n await new SendSignTransactionTask(apiMock, args).run();\n\n // THEN\n const payload = Uint8Array.from([...PATH, ...serialized]);\n expect(apiMock.sendCommand.mock.calls).toHaveLength(3);\n expect(apiMock.sendCommand.mock.calls[0]![0]).toStrictEqual(\n new SignTransactionCommand({\n serializedTransaction: payload.slice(0, chunkSize),\n isFirstChunk: true,\n }),\n );\n expect(apiMock.sendCommand.mock.calls[1]![0]).toStrictEqual(\n new SignTransactionCommand({\n serializedTransaction: payload.slice(chunkSize, chunkSize * 2),\n isFirstChunk: false,\n }),\n );\n expect(apiMock.sendCommand.mock.calls[2]![0]).toStrictEqual(\n new SignTransactionCommand({\n serializedTransaction: payload.slice(chunkSize * 2),\n isFirstChunk: false,\n }),\n );\n },\n );\n\n it(\"should return an error if the command fails\", async () => {\n // GIVEN\n const args = {\n derivationPath: \"44'/60'/0'/0/0\",\n serializedTransaction: SIMPLE_TRANSACTION,\n chainId: 1,\n transactionType: 1,\n isLegacy: true,\n };\n apiMock.sendCommand.mockResolvedValueOnce(resultNothing);\n\n // WHEN\n const result = await new SendSignTransactionTask(apiMock, args).run();\n\n // THEN\n expect(apiMock.sendCommand.mock.calls).toHaveLength(1);\n expect(apiMock.sendCommand.mock.calls[0]![0]).toStrictEqual(\n new SignTransactionCommand({\n serializedTransaction: new Uint8Array([\n ...PATH,\n ...SIMPLE_TRANSACTION,\n ]),\n isFirstChunk: true,\n }),\n );\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n expect((result as any).error).toStrictEqual(\n new InvalidStatusWordError(\"no signature returned\"),\n );\n });\n\n it(\"should return an error if the generic-parser command fails\", async () => {\n // GIVEN\n const args = {\n derivationPath: \"44'/60'/0'/0/0\",\n serializedTransaction: SIMPLE_TRANSACTION,\n chainId: 1,\n transactionType: 1,\n isLegacy: false,\n };\n apiMock.sendCommand.mockResolvedValueOnce(resultNothing);\n\n // WHEN\n const result = await new SendSignTransactionTask(apiMock, args).run();\n\n // THEN\n expect(apiMock.sendCommand.mock.calls).toHaveLength(1);\n expect(apiMock.sendCommand.mock.calls[0]![0]).toStrictEqual(\n new StartTransactionCommand(),\n );\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n expect((result as any).error).toStrictEqual(\n new InvalidStatusWordError(\"no signature returned\"),\n );\n });\n\n it(\"should return an error if the command fails in the middle of the transaction\", async () => {\n // GIVEN\n const args = {\n derivationPath: \"44'/60'/0'/0/0\",\n serializedTransaction: BIG_TRANSACTION,\n chainId: 1,\n transactionType: 1,\n isLegacy: true,\n };\n apiMock.sendCommand.mockResolvedValueOnce(resultNothing);\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"An error\"),\n }),\n );\n\n // WHEN\n const result = await new SendSignTransactionTask(apiMock, args).run();\n\n // THEN\n expect(apiMock.sendCommand.mock.calls).toHaveLength(2);\n expect(apiMock.sendCommand.mock.calls[0]![0]).toStrictEqual(\n new SignTransactionCommand({\n serializedTransaction: new Uint8Array([\n ...PATH,\n ...BIG_TRANSACTION,\n ]).slice(0, APDU_MAX_PAYLOAD),\n isFirstChunk: true,\n }),\n );\n expect(apiMock.sendCommand.mock.calls[1]![0]).toStrictEqual(\n new SignTransactionCommand({\n serializedTransaction: new Uint8Array([\n ...PATH,\n ...BIG_TRANSACTION,\n ]).slice(APDU_MAX_PAYLOAD, APDU_MAX_PAYLOAD * 2),\n isFirstChunk: false,\n }),\n );\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n expect((result as any).error).toStrictEqual(\n new InvalidStatusWordError(\"An error\"),\n );\n });\n\n it(\"legacy transaction with small chainId\", async () => {\n // GIVEN\n const args = {\n derivationPath: \"44'/60'/0'/0/0\",\n serializedTransaction: SIMPLE_TRANSACTION,\n chainId: 56,\n transactionType: 0,\n isLegacy: true,\n };\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({\n data: Just({\n v: 147,\n r: \"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef\",\n s: \"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef\",\n }),\n }),\n );\n\n // WHEN\n const result = await new SendSignTransactionTask(apiMock, args).run();\n\n // THEN\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n expect((result as any).data.v).toStrictEqual(147);\n });\n\n it(\"legacy transaction with small chainId with positive parity\", async () => {\n // GIVEN\n const args = {\n derivationPath: \"44'/60'/0'/0/0\",\n serializedTransaction: SIMPLE_TRANSACTION,\n chainId: 56,\n transactionType: 0,\n isLegacy: true,\n };\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({\n data: Just({\n v: 148,\n r: \"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef\",\n s: \"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef\",\n }),\n }),\n );\n\n // WHEN\n const result = await new SendSignTransactionTask(apiMock, args).run();\n\n // THEN\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n expect((result as any).data.v).toStrictEqual(148);\n });\n\n it(\"legacy transaction with big chainId\", async () => {\n // GIVEN\n const args = {\n derivationPath: \"44'/60'/0'/0/0\",\n serializedTransaction: SIMPLE_TRANSACTION,\n chainId: 11297108109,\n transactionType: 0,\n isLegacy: true,\n };\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({\n data: Just({\n v: 131,\n r: \"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef\",\n s: \"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef\",\n }),\n }),\n );\n\n // WHEN\n const result = await new SendSignTransactionTask(apiMock, args).run();\n\n // THEN\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n expect((result as any).data.v).toStrictEqual(22594216253);\n });\n\n it(\"legacy transaction with big chainId with positive parity\", async () => {\n // GIVEN\n const args = {\n derivationPath: \"44'/60'/0'/0/0\",\n serializedTransaction: SIMPLE_TRANSACTION,\n chainId: 11297108109,\n transactionType: 0,\n isLegacy: true,\n };\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({\n data: Just({\n v: 132,\n r: \"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef\",\n s: \"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef\",\n }),\n }),\n );\n\n // WHEN\n const result = await new SendSignTransactionTask(apiMock, args).run();\n\n // THEN\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n expect((result as any).data.v).toStrictEqual(22594216254);\n });\n });\n});\n"],
|
|
5
|
-
"mappings": "AAAA,OACE,oBAAAA,EACA,wBAAAC,EACA,sBAAAC,EACA,0BAAAC,MACK,kCACP,OAAS,eAAAC,MAAmB,SAC5B,OAAS,QAAAC,EAAM,WAAAC,MAAe,YAE9B,OAAS,0BAAAC,MAA8B,sDACvC,OAAS,2BAAAC,MAA+B,uDACxC,OAAS,mCAAAC,MAAuC,oEAEhD,OAAS,2BAAAC,MAA+B,4BAExC,MAAMC,EAAO,IAAI,WAAW,CAC1B,EAAM,IAAM,EAAM,EAAM,GAAM,IAAM,EAAM,EAAM,GAAM,IAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,CAC5C,CAAC,EAEKC,EAAqB,IAAI,WAAW,CACxC,EAAM,IAAM,EAAM,EAAM,GAAM,IAAM,EAAM,EAAM,GAAM,IAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,IAAM,IAAM,IAAM,EAAM,IACxE,IAAM,GAAM,GAAM,GAAM,GAAM,IAAM,EAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IACxE,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,EAAM,IAAM,GAAM,IAAM,IACxE,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,EAAM,IAAM,IAAM,EAAM,CAC1E,CAAC,EAEKC,EAAkB,IAAI,WAAW,CACrC,IAAM,EAAM,IAAM,GAAM,IAAM,EAAM,IAAM,GAAM,IAAM,IAAM,IAAM,EAAM,IACxE,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,EACxE,GAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,EAAM,IACxE,GAAM,GAAM,IAAM,IAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,GACxE,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,EAAM,IAAM,IAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,IAAM,IAAM,IAAM,IACxE,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,GACxE,EAAM,IAAM,GAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACxE,EAAM,GAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,EAAM,EAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GACxE,IAAM,GAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,IAAM,EAAM,EAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,IAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,GAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,GAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,GAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,CAC1E,CAAC,EAED,SAAS,0BAA2B,IAAM,CACxC,MAAMC,EAAUL,EAAgC,EAC1CM,EAAY,CAChB,EAAG,GACH,EAAG,qEACH,EAAG,oEACL,EACMC,
|
|
6
|
-
"names": ["APDU_MAX_PAYLOAD", "CommandResultFactory", "hexaStringToBuffer", "InvalidStatusWordError", "Transaction", "Just", "Nothing", "SignTransactionCommand", "StartTransactionCommand", "makeDeviceActionInternalApiMock", "SendSignTransactionTask", "PATH", "SIMPLE_TRANSACTION", "BIG_TRANSACTION", "apiMock", "signature", "resultOk", "resultNothing", "args", "result", "dataSize", "chainId", "chunkSize", "transaction", "serialized", "payload"]
|
|
4
|
+
"sourcesContent": ["import {\n APDU_MAX_PAYLOAD,\n CommandResultFactory,\n hexaStringToBuffer,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { Transaction } from \"ethers\";\nimport { Just, Nothing } from \"purify-ts\";\n\nimport { ClearSigningType } from \"@api/model/ClearSigningType\";\nimport { SignTransactionCommand } from \"@internal/app-binder/command/SignTransactionCommand\";\nimport { StartTransactionCommand } from \"@internal/app-binder/command/StartTransactionCommand\";\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\n\nimport { SendSignTransactionTask } from \"./SendSignTransactionTask\";\n\nconst PATH = new Uint8Array([\n 0x05, 0x80, 0x00, 0x00, 0x2c, 0x80, 0x00, 0x00, 0x3c, 0x80, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n]);\n\nconst SIMPLE_TRANSACTION = new Uint8Array([\n 0x05, 0x80, 0x00, 0x00, 0x2c, 0x80, 0x00, 0x00, 0x3c, 0x80, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x6b, 0x82, 0x06, 0x7e,\n 0x84, 0x57, 0x19, 0x13, 0x1f, 0x83, 0x01, 0x10, 0x68, 0x94, 0xda, 0xc1, 0x7f,\n 0x95, 0x8d, 0x2e, 0xe5, 0x23, 0xa2, 0x20, 0x62, 0x06, 0x99, 0x45, 0x97, 0xc1,\n 0x3d, 0x83, 0x1e, 0xc7, 0x80, 0xb8, 0x44, 0xa9, 0x05, 0x9c, 0xbb, 0x00, 0x00,\n]);\n\nconst BIG_TRANSACTION = new Uint8Array([\n 0xf9, 0x08, 0xaf, 0x26, 0x85, 0x01, 0xb2, 0x3d, 0x94, 0x83, 0x83, 0x05, 0xc1,\n 0xfc, 0x94, 0xde, 0xf1, 0xc0, 0xde, 0xd9, 0xbe, 0xc7, 0xf1, 0xa1, 0x67, 0x08,\n 0x19, 0x83, 0x32, 0x40, 0xf0, 0x27, 0xb2, 0x5e, 0xff, 0x80, 0xb9, 0x08, 0x88,\n 0x41, 0x55, 0x65, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x1f, 0x98, 0x40, 0xa8, 0x5d, 0x5a, 0xf5, 0xbf, 0x1d, 0x17,\n 0x62, 0xf9, 0x25, 0xbd, 0xad, 0xdc, 0x42, 0x01, 0xf9, 0x84, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xb8, 0x69, 0x91,\n 0xc6, 0x21, 0x8b, 0x36, 0xc1, 0xd1, 0x9d, 0x4a, 0x2e, 0x9e, 0xb0, 0xce, 0x36,\n 0x06, 0xeb, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x61, 0xe9, 0x33, 0x59, 0x53, 0x95, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x33,\n 0xef, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x05, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x40, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n]);\n\ndescribe(\"SendSignTransactionTask\", () => {\n const apiMock = makeDeviceActionInternalApiMock();\n const signature = {\n v: 27,\n r: \"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef\",\n s: \"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef\",\n };\n const resultOk = CommandResultFactory({\n data: Just(signature),\n });\n const resultNothing = CommandResultFactory({ data: Nothing });\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"run\", () => {\n it(\"should send the transaction in one command\", async () => {\n // GIVEN\n const args = {\n derivationPath: \"44'/60'/0'/0/0\",\n serializedTransaction: SIMPLE_TRANSACTION,\n chainId: 1,\n transactionType: 1,\n clearSigningType: ClearSigningType.BASIC,\n };\n apiMock.sendCommand.mockResolvedValueOnce(resultOk);\n\n // WHEN\n const result = await new SendSignTransactionTask(apiMock, args).run();\n\n // THEN\n expect(apiMock.sendCommand.mock.calls).toHaveLength(1);\n expect(apiMock.sendCommand.mock.calls[0]![0]).toStrictEqual(\n new SignTransactionCommand({\n serializedTransaction: new Uint8Array([\n ...PATH,\n ...SIMPLE_TRANSACTION,\n ]),\n isFirstChunk: true,\n }),\n );\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n expect((result as any).data).toStrictEqual(signature);\n });\n\n it(\"Generic-parser transaction should be signed without payload\", async () => {\n // GIVEN\n const args = {\n derivationPath: \"44'/60'/0'/0/0\",\n serializedTransaction: SIMPLE_TRANSACTION,\n chainId: 1,\n transactionType: 1,\n clearSigningType: ClearSigningType.EIP7730,\n };\n apiMock.sendCommand.mockResolvedValueOnce(resultOk);\n\n // WHEN\n const result = await new SendSignTransactionTask(apiMock, args).run();\n\n // THEN\n expect(apiMock.sendCommand.mock.calls).toHaveLength(1);\n expect(apiMock.sendCommand.mock.calls[0]![0]).toStrictEqual(\n new StartTransactionCommand(),\n );\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n expect((result as any).data).toStrictEqual(signature);\n });\n\n it(\"should send the transaction in chunks\", async () => {\n // GIVEN\n const args = {\n derivationPath: \"44'/60'/0'/0/0\",\n serializedTransaction: BIG_TRANSACTION,\n chainId: 1,\n transactionType: 1,\n clearSigningType: ClearSigningType.BASIC,\n };\n apiMock.sendCommand.mockResolvedValueOnce(resultNothing);\n apiMock.sendCommand.mockResolvedValueOnce(resultOk);\n\n // WHEN\n const result = await new SendSignTransactionTask(apiMock, args).run();\n\n // THEN\n expect(apiMock.sendCommand.mock.calls).toHaveLength(2);\n expect(apiMock.sendCommand.mock.calls[0]![0]).toStrictEqual(\n new SignTransactionCommand({\n serializedTransaction: new Uint8Array([\n ...PATH,\n ...BIG_TRANSACTION,\n ]).slice(0, APDU_MAX_PAYLOAD),\n isFirstChunk: true,\n }),\n );\n expect(apiMock.sendCommand.mock.calls[1]![0]).toStrictEqual(\n new SignTransactionCommand({\n serializedTransaction: new Uint8Array([\n ...PATH,\n ...BIG_TRANSACTION,\n ]).slice(APDU_MAX_PAYLOAD, APDU_MAX_PAYLOAD * 2),\n isFirstChunk: false,\n }),\n );\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n expect((result as any).data).toStrictEqual(signature);\n });\n\n it.each([\n [458, 127, 254],\n [458, 0x818181818181, 254],\n [452, 0x818181818181, 251],\n ])(\n \"should prevent chunking legacy transactions just before the [r,s,v] for dataSize %i, chainId %i\",\n async (dataSize, chainId, chunkSize) => {\n // GIVEN\n const transaction = new Transaction();\n transaction.to = \"0x0123456789abcdef0123456789abcdef01234567\";\n transaction.nonce = 0;\n transaction.value = 0n;\n transaction.gasLimit = 1n;\n transaction.gasPrice = 2n;\n transaction.data = \"0x\" + new Array(dataSize).fill(\"00\").join(\"\");\n transaction.chainId = chainId;\n transaction.type = 0;\n const serialized = hexaStringToBuffer(transaction.unsignedSerialized)!;\n const args = {\n derivationPath: \"44'/60'/0'/0/0\",\n serializedTransaction: serialized,\n chainId,\n transactionType: 0,\n clearSigningType: ClearSigningType.BASIC,\n };\n apiMock.sendCommand.mockResolvedValueOnce(resultNothing);\n apiMock.sendCommand.mockResolvedValueOnce(resultNothing);\n apiMock.sendCommand.mockResolvedValue(resultOk);\n\n // WHEN\n await new SendSignTransactionTask(apiMock, args).run();\n\n // THEN\n const payload = Uint8Array.from([...PATH, ...serialized]);\n expect(apiMock.sendCommand.mock.calls).toHaveLength(3);\n expect(apiMock.sendCommand.mock.calls[0]![0]).toStrictEqual(\n new SignTransactionCommand({\n serializedTransaction: payload.slice(0, chunkSize),\n isFirstChunk: true,\n }),\n );\n expect(apiMock.sendCommand.mock.calls[1]![0]).toStrictEqual(\n new SignTransactionCommand({\n serializedTransaction: payload.slice(chunkSize, chunkSize * 2),\n isFirstChunk: false,\n }),\n );\n expect(apiMock.sendCommand.mock.calls[2]![0]).toStrictEqual(\n new SignTransactionCommand({\n serializedTransaction: payload.slice(chunkSize * 2),\n isFirstChunk: false,\n }),\n );\n },\n );\n\n it(\"should return an error if the command fails\", async () => {\n // GIVEN\n const args = {\n derivationPath: \"44'/60'/0'/0/0\",\n serializedTransaction: SIMPLE_TRANSACTION,\n chainId: 1,\n transactionType: 1,\n clearSigningType: ClearSigningType.BASIC,\n };\n apiMock.sendCommand.mockResolvedValueOnce(resultNothing);\n\n // WHEN\n const result = await new SendSignTransactionTask(apiMock, args).run();\n\n // THEN\n expect(apiMock.sendCommand.mock.calls).toHaveLength(1);\n expect(apiMock.sendCommand.mock.calls[0]![0]).toStrictEqual(\n new SignTransactionCommand({\n serializedTransaction: new Uint8Array([\n ...PATH,\n ...SIMPLE_TRANSACTION,\n ]),\n isFirstChunk: true,\n }),\n );\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n expect((result as any).error).toStrictEqual(\n new InvalidStatusWordError(\"no signature returned\"),\n );\n });\n\n it(\"should return an error if the generic-parser command fails\", async () => {\n // GIVEN\n const args = {\n derivationPath: \"44'/60'/0'/0/0\",\n serializedTransaction: SIMPLE_TRANSACTION,\n chainId: 1,\n transactionType: 1,\n clearSigningType: ClearSigningType.EIP7730,\n };\n apiMock.sendCommand.mockResolvedValueOnce(resultNothing);\n\n // WHEN\n const result = await new SendSignTransactionTask(apiMock, args).run();\n\n // THEN\n expect(apiMock.sendCommand.mock.calls).toHaveLength(1);\n expect(apiMock.sendCommand.mock.calls[0]![0]).toStrictEqual(\n new StartTransactionCommand(),\n );\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n expect((result as any).error).toStrictEqual(\n new InvalidStatusWordError(\"no signature returned\"),\n );\n });\n\n it(\"should return an error if the command fails in the middle of the transaction\", async () => {\n // GIVEN\n const args = {\n derivationPath: \"44'/60'/0'/0/0\",\n serializedTransaction: BIG_TRANSACTION,\n chainId: 1,\n transactionType: 1,\n clearSigningType: ClearSigningType.BASIC,\n };\n apiMock.sendCommand.mockResolvedValueOnce(resultNothing);\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"An error\"),\n }),\n );\n\n // WHEN\n const result = await new SendSignTransactionTask(apiMock, args).run();\n\n // THEN\n expect(apiMock.sendCommand.mock.calls).toHaveLength(2);\n expect(apiMock.sendCommand.mock.calls[0]![0]).toStrictEqual(\n new SignTransactionCommand({\n serializedTransaction: new Uint8Array([\n ...PATH,\n ...BIG_TRANSACTION,\n ]).slice(0, APDU_MAX_PAYLOAD),\n isFirstChunk: true,\n }),\n );\n expect(apiMock.sendCommand.mock.calls[1]![0]).toStrictEqual(\n new SignTransactionCommand({\n serializedTransaction: new Uint8Array([\n ...PATH,\n ...BIG_TRANSACTION,\n ]).slice(APDU_MAX_PAYLOAD, APDU_MAX_PAYLOAD * 2),\n isFirstChunk: false,\n }),\n );\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n expect((result as any).error).toStrictEqual(\n new InvalidStatusWordError(\"An error\"),\n );\n });\n\n it(\"legacy transaction with small chainId\", async () => {\n // GIVEN\n const args = {\n derivationPath: \"44'/60'/0'/0/0\",\n serializedTransaction: SIMPLE_TRANSACTION,\n chainId: 56,\n transactionType: 0,\n clearSigningType: ClearSigningType.BASIC,\n };\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({\n data: Just({\n v: 147,\n r: \"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef\",\n s: \"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef\",\n }),\n }),\n );\n\n // WHEN\n const result = await new SendSignTransactionTask(apiMock, args).run();\n\n // THEN\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n expect((result as any).data.v).toStrictEqual(147);\n });\n\n it(\"legacy transaction with small chainId with positive parity\", async () => {\n // GIVEN\n const args = {\n derivationPath: \"44'/60'/0'/0/0\",\n serializedTransaction: SIMPLE_TRANSACTION,\n chainId: 56,\n transactionType: 0,\n clearSigningType: ClearSigningType.BASIC,\n };\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({\n data: Just({\n v: 148,\n r: \"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef\",\n s: \"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef\",\n }),\n }),\n );\n\n // WHEN\n const result = await new SendSignTransactionTask(apiMock, args).run();\n\n // THEN\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n expect((result as any).data.v).toStrictEqual(148);\n });\n\n it(\"legacy transaction with big chainId\", async () => {\n // GIVEN\n const args = {\n derivationPath: \"44'/60'/0'/0/0\",\n serializedTransaction: SIMPLE_TRANSACTION,\n chainId: 11297108109,\n transactionType: 0,\n clearSigningType: ClearSigningType.BASIC,\n };\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({\n data: Just({\n v: 131,\n r: \"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef\",\n s: \"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef\",\n }),\n }),\n );\n\n // WHEN\n const result = await new SendSignTransactionTask(apiMock, args).run();\n\n // THEN\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n expect((result as any).data.v).toStrictEqual(22594216253);\n });\n\n it(\"legacy transaction with big chainId with positive parity\", async () => {\n // GIVEN\n const args = {\n derivationPath: \"44'/60'/0'/0/0\",\n serializedTransaction: SIMPLE_TRANSACTION,\n chainId: 11297108109,\n transactionType: 0,\n clearSigningType: ClearSigningType.BASIC,\n };\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({\n data: Just({\n v: 132,\n r: \"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef\",\n s: \"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef\",\n }),\n }),\n );\n\n // WHEN\n const result = await new SendSignTransactionTask(apiMock, args).run();\n\n // THEN\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n expect((result as any).data.v).toStrictEqual(22594216254);\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "AAAA,OACE,oBAAAA,EACA,wBAAAC,EACA,sBAAAC,EACA,0BAAAC,MACK,kCACP,OAAS,eAAAC,MAAmB,SAC5B,OAAS,QAAAC,EAAM,WAAAC,MAAe,YAE9B,OAAS,oBAAAC,MAAwB,8BACjC,OAAS,0BAAAC,MAA8B,sDACvC,OAAS,2BAAAC,MAA+B,uDACxC,OAAS,mCAAAC,MAAuC,oEAEhD,OAAS,2BAAAC,MAA+B,4BAExC,MAAMC,EAAO,IAAI,WAAW,CAC1B,EAAM,IAAM,EAAM,EAAM,GAAM,IAAM,EAAM,EAAM,GAAM,IAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,CAC5C,CAAC,EAEKC,EAAqB,IAAI,WAAW,CACxC,EAAM,IAAM,EAAM,EAAM,GAAM,IAAM,EAAM,EAAM,GAAM,IAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,IAAM,IAAM,IAAM,EAAM,IACxE,IAAM,GAAM,GAAM,GAAM,GAAM,IAAM,EAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IACxE,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,EAAM,IAAM,GAAM,IAAM,IACxE,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,EAAM,IAAM,IAAM,EAAM,CAC1E,CAAC,EAEKC,EAAkB,IAAI,WAAW,CACrC,IAAM,EAAM,IAAM,GAAM,IAAM,EAAM,IAAM,GAAM,IAAM,IAAM,IAAM,EAAM,IACxE,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,EACxE,GAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,EAAM,IACxE,GAAM,GAAM,IAAM,IAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,GACxE,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,EAAM,IAAM,IAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,IAAM,IAAM,IAAM,IACxE,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,GACxE,EAAM,IAAM,GAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACxE,EAAM,GAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,EAAM,EAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GACxE,IAAM,GAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,IAAM,EAAM,EAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,IAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACxE,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,E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",
|
|
6
|
+
"names": ["APDU_MAX_PAYLOAD", "CommandResultFactory", "hexaStringToBuffer", "InvalidStatusWordError", "Transaction", "Just", "Nothing", "ClearSigningType", "SignTransactionCommand", "StartTransactionCommand", "makeDeviceActionInternalApiMock", "SendSignTransactionTask", "PATH", "SIMPLE_TRANSACTION", "BIG_TRANSACTION", "apiMock", "signature", "resultOk", "resultNothing", "args", "result", "dataSize", "chainId", "chunkSize", "transaction", "serialized", "payload"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{TypedDataEncoder as e}from"ethers";import{Just as n}from"purify-ts";import{SignEIP712Command as p}from"../../app-binder/command/SignEIP712Command";class h{constructor(t,a,r){this.api=t;this.data=a;this.derivationPath=r}async run(){const t=e.hashDomain(this.data.domain);if(!this.data.types[this.data.primaryType])throw new Error(`Primary type "${this.data.primaryType}" is not defined in the types.`);const a=this.data.types,{EIP712Domain:r,...i}=a,o=e.hashStruct(this.data.primaryType,i,this.data.message);return await this.api.sendCommand(new p({derivationPath:this.derivationPath,legacyArgs:n({domainHash:t,messageHash:o})}))}}export{h as SignTypedDataLegacyTask};
|
|
2
|
+
//# sourceMappingURL=SignTypedDataLegacyTask.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/internal/app-binder/task/SignTypedDataLegacyTask.ts"],
|
|
4
|
+
"sourcesContent": ["import type {\n CommandResult,\n InternalApi,\n} from \"@ledgerhq/device-management-kit\";\nimport type { TypedDataField } from \"ethers\";\nimport { TypedDataEncoder } from \"ethers\";\nimport { Just } from \"purify-ts\";\n\nimport type { Signature } from \"@api/model/Signature\";\nimport type { TypedData } from \"@api/model/TypedData\";\nimport { SignEIP712Command } from \"@internal/app-binder/command/SignEIP712Command\";\nimport type { EthErrorCodes } from \"@internal/app-binder/command/utils/ethAppErrors\";\n\nexport class SignTypedDataLegacyTask {\n constructor(\n private readonly api: InternalApi,\n private readonly data: TypedData,\n private readonly derivationPath: string,\n ) {}\n\n async run(): Promise<CommandResult<Signature, EthErrorCodes>> {\n // Compute domain hash and message hash on client side\n const domainHash = TypedDataEncoder.hashDomain(this.data.domain);\n\n if (!this.data.types[this.data.primaryType]) {\n throw new Error(\n `Primary type \"${this.data.primaryType}\" is not defined in the types.`,\n );\n }\n\n const typesRecord: Record<string, TypedDataField[]> = this.data.types;\n const { EIP712Domain, ...rest } = typesRecord;\n const messageHash = TypedDataEncoder.hashStruct(\n this.data.primaryType,\n rest,\n this.data.message,\n );\n\n // Blind sign the hash\n return await this.api.sendCommand(\n new SignEIP712Command({\n derivationPath: this.derivationPath,\n legacyArgs: Just({\n domainHash,\n messageHash,\n }),\n }),\n );\n }\n}\n"],
|
|
5
|
+
"mappings": "AAKA,OAAS,oBAAAA,MAAwB,SACjC,OAAS,QAAAC,MAAY,YAIrB,OAAS,qBAAAC,MAAyB,iDAG3B,MAAMC,CAAwB,CACnC,YACmBC,EACAC,EACAC,EACjB,CAHiB,SAAAF,EACA,UAAAC,EACA,oBAAAC,CAChB,CAEH,MAAM,KAAwD,CAE5D,MAAMC,EAAaP,EAAiB,WAAW,KAAK,KAAK,MAAM,EAE/D,GAAI,CAAC,KAAK,KAAK,MAAM,KAAK,KAAK,WAAW,EACxC,MAAM,IAAI,MACR,iBAAiB,KAAK,KAAK,WAAW,gCACxC,EAGF,MAAMQ,EAAgD,KAAK,KAAK,MAC1D,CAAE,aAAAC,EAAc,GAAGC,CAAK,EAAIF,EAC5BG,EAAcX,EAAiB,WACnC,KAAK,KAAK,YACVU,EACA,KAAK,KAAK,OACZ,EAGA,OAAO,MAAM,KAAK,IAAI,YACpB,IAAIR,EAAkB,CACpB,eAAgB,KAAK,eACrB,WAAYD,EAAK,CACf,WAAAM,EACA,YAAAI,CACF,CAAC,CACH,CAAC,CACH,CACF,CACF",
|
|
6
|
+
"names": ["TypedDataEncoder", "Just", "SignEIP712Command", "SignTypedDataLegacyTask", "api", "data", "derivationPath", "domainHash", "typesRecord", "EIP712Domain", "rest", "messageHash"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{CommandResultFactory as n}from"@ledgerhq/device-management-kit";import{Just as s}from"purify-ts";import{SignEIP712Command as o}from"../../app-binder/command/SignEIP712Command";import{makeDeviceActionInternalApiMock as c}from"../../app-binder/device-action/__test-utils__/makeInternalApi";import{SignTypedDataLegacyTask as r}from"./SignTypedDataLegacyTask";describe("SignTypedDataLegacyTask",()=>{const e=c(),i={domain:{name:"Permit2",chainId:137,verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3"},primaryType:"PermitSingle",message:{details:{token:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",amount:"69420000000000000000",expiration:"1718184249",nonce:"0"},spender:"0xec7be89e9d109e7e3fec59c222cf297125fefda2",sigDeadline:"1715594049"},types:{PermitSingle:[{name:"details",type:"PermitDetails"},{name:"spender",type:"address"},{name:"sigDeadline",type:"uint256"}],PermitDetails:[{name:"token",type:"address"},{name:"amount",type:"uint"},{name:"expiration",type:"uint"},{name:"nonce",type:"uint"}]}};beforeEach(()=>{vi.resetAllMocks()}),it("Successful legagy signing",async()=>{const t=new r(e,i,"44'/60'/0'/0/0");e.sendCommand.mockResolvedValue(n({data:{r:"0x24",s:"0x42",v:0}}));const a=await t.run();expect(e.sendCommand).toHaveBeenCalledWith(new o({derivationPath:"44'/60'/0'/0/0",legacyArgs:s({domainHash:"0xf033048cb2764f596bc4d98e089fa38bb84b4be3d5da2e77f9bfac0e4d6c68ca",messageHash:"0x1087495b5e10337738059920fe1de8216235299745e8c97e21b409009a4c362a"})})),expect(a).toStrictEqual(n({data:{r:"0x24",s:"0x42",v:0}}))}),it("Should throw error if no primary type",async()=>{const t=new r(e,{...i,primaryType:"Wat?"},"44'/60'/0'/0/0");e.sendCommand.mockResolvedValue(n({data:{r:"0x24",s:"0x42",v:0}}));try{await t.run()}catch(a){expect(a).toBeInstanceOf(Error),expect(a.message).toBe('Primary type "Wat?" is not defined in the types.')}})});
|
|
2
|
+
//# sourceMappingURL=SignTypedDataLegacyTask.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/internal/app-binder/task/SignTypedDataLegacyTask.test.ts"],
|
|
4
|
+
"sourcesContent": ["import { CommandResultFactory } from \"@ledgerhq/device-management-kit\";\nimport { Just } from \"purify-ts\";\n\nimport { SignEIP712Command } from \"@internal/app-binder/command/SignEIP712Command\";\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\n\nimport { SignTypedDataLegacyTask } from \"./SignTypedDataLegacyTask\";\n\ndescribe(\"SignTypedDataLegacyTask\", () => {\n const apiMock = makeDeviceActionInternalApiMock();\n\n const TEST_DATA = {\n domain: {\n name: \"Permit2\",\n chainId: 137,\n verifyingContract: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n },\n primaryType: \"PermitSingle\",\n message: {\n details: {\n token: \"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\",\n amount: \"69420000000000000000\",\n expiration: \"1718184249\",\n nonce: \"0\",\n },\n spender: \"0xec7be89e9d109e7e3fec59c222cf297125fefda2\",\n sigDeadline: \"1715594049\",\n },\n types: {\n PermitSingle: [\n {\n name: \"details\",\n type: \"PermitDetails\",\n },\n {\n name: \"spender\",\n type: \"address\",\n },\n {\n name: \"sigDeadline\",\n type: \"uint256\",\n },\n ],\n PermitDetails: [\n { name: \"token\", type: \"address\" },\n { name: \"amount\", type: \"uint\" },\n { name: \"expiration\", type: \"uint\" },\n { name: \"nonce\", type: \"uint\" },\n ],\n },\n };\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n it(\"Successful legagy signing\", async () => {\n // GIVEN\n const task = new SignTypedDataLegacyTask(\n apiMock,\n TEST_DATA,\n \"44'/60'/0'/0/0\",\n );\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({\n data: {\n r: \"0x24\",\n s: \"0x42\",\n v: 0,\n },\n }),\n );\n // WHEN\n const signature = await task.run();\n // THEN\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SignEIP712Command({\n derivationPath: \"44'/60'/0'/0/0\",\n legacyArgs: Just({\n domainHash:\n \"0xf033048cb2764f596bc4d98e089fa38bb84b4be3d5da2e77f9bfac0e4d6c68ca\",\n messageHash:\n \"0x1087495b5e10337738059920fe1de8216235299745e8c97e21b409009a4c362a\",\n }),\n }),\n );\n expect(signature).toStrictEqual(\n CommandResultFactory({\n data: {\n r: \"0x24\",\n s: \"0x42\",\n v: 0,\n },\n }),\n );\n });\n\n it(\"Should throw error if no primary type\", async () => {\n // GIVEN\n const task = new SignTypedDataLegacyTask(\n apiMock,\n {\n ...TEST_DATA,\n primaryType: \"Wat?\",\n },\n \"44'/60'/0'/0/0\",\n );\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({\n data: {\n r: \"0x24\",\n s: \"0x42\",\n v: 0,\n },\n }),\n );\n // WHEN\n try {\n await task.run();\n } catch (e) {\n // THEN\n expect(e).toBeInstanceOf(Error);\n // @ts-expect-error\n expect(e.message).toBe(\n 'Primary type \"Wat?\" is not defined in the types.',\n );\n }\n });\n});\n"],
|
|
5
|
+
"mappings": "AAAA,OAAS,wBAAAA,MAA4B,kCACrC,OAAS,QAAAC,MAAY,YAErB,OAAS,qBAAAC,MAAyB,iDAClC,OAAS,mCAAAC,MAAuC,oEAEhD,OAAS,2BAAAC,MAA+B,4BAExC,SAAS,0BAA2B,IAAM,CACxC,MAAMC,EAAUF,EAAgC,EAE1CG,EAAY,CAChB,OAAQ,CACN,KAAM,UACN,QAAS,IACT,kBAAmB,4CACrB,EACA,YAAa,eACb,QAAS,CACP,QAAS,CACP,MAAO,6CACP,OAAQ,uBACR,WAAY,aACZ,MAAO,GACT,EACA,QAAS,6CACT,YAAa,YACf,EACA,MAAO,CACL,aAAc,CACZ,CACE,KAAM,UACN,KAAM,eACR,EACA,CACE,KAAM,UACN,KAAM,SACR,EACA,CACE,KAAM,cACN,KAAM,SACR,CACF,EACA,cAAe,CACb,CAAE,KAAM,QAAS,KAAM,SAAU,EACjC,CAAE,KAAM,SAAU,KAAM,MAAO,EAC/B,CAAE,KAAM,aAAc,KAAM,MAAO,EACnC,CAAE,KAAM,QAAS,KAAM,MAAO,CAChC,CACF,CACF,EAEA,WAAW,IAAM,CACf,GAAG,cAAc,CACnB,CAAC,EAED,GAAG,4BAA6B,SAAY,CAE1C,MAAMC,EAAO,IAAIH,EACfC,EACAC,EACA,gBACF,EACAD,EAAQ,YAAY,kBAClBL,EAAqB,CACnB,KAAM,CACJ,EAAG,OACH,EAAG,OACH,EAAG,CACL,CACF,CAAC,CACH,EAEA,MAAMQ,EAAY,MAAMD,EAAK,IAAI,EAEjC,OAAOF,EAAQ,WAAW,EAAE,qBAC1B,IAAIH,EAAkB,CACpB,eAAgB,iBAChB,WAAYD,EAAK,CACf,WACE,qEACF,YACE,oEACJ,CAAC,CACH,CAAC,CACH,EACA,OAAOO,CAAS,EAAE,cAChBR,EAAqB,CACnB,KAAM,CACJ,EAAG,OACH,EAAG,OACH,EAAG,CACL,CACF,CAAC,CACH,CACF,CAAC,EAED,GAAG,wCAAyC,SAAY,CAEtD,MAAMO,EAAO,IAAIH,EACfC,EACA,CACE,GAAGC,EACH,YAAa,MACf,EACA,gBACF,EACAD,EAAQ,YAAY,kBAClBL,EAAqB,CACnB,KAAM,CACJ,EAAG,OACH,EAAG,OACH,EAAG,CACL,CACF,CAAC,CACH,EAEA,GAAI,CACF,MAAMO,EAAK,IAAI,CACjB,OAASE,EAAG,CAEV,OAAOA,CAAC,EAAE,eAAe,KAAK,EAE9B,OAAOA,EAAE,OAAO,EAAE,KAChB,kDACF,CACF,CACF,CAAC,CACH,CAAC",
|
|
6
|
+
"names": ["CommandResultFactory", "Just", "SignEIP712Command", "makeDeviceActionInternalApiMock", "SignTypedDataLegacyTask", "apiMock", "TEST_DATA", "task", "signature", "e"]
|
|
7
|
+
}
|
package/lib/esm/internal/di.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Container as
|
|
1
|
+
import{Container as i}from"inversify";import{addressModuleFactory as a}from"./address/di/addressModule";import{appBindingModuleFactory as m}from"./app-binder/di/appBinderModule";import{eip7702ModuleFactory as d}from"./eip7702/di/eip7702Module";import{externalTypes as o}from"./externalTypes";import{messageModuleFactory as s}from"./message/di/messageModule";import{transactionModuleFactory as p}from"./transaction/di/transactionModule";import{typedDataModuleFactory as c}from"./typed-data/di/typedDataModule";const v=({dmk:t,sessionId:n,contextModule:r})=>{const e=new i;return e.bind(o.Dmk).toConstantValue(t),e.bind(o.ContextModule).toConstantValue(r),e.bind(o.SessionId).toConstantValue(n),e.loadSync(a(),m(),d(),s(),p(),c()),e};export{v as makeContainer};
|
|
2
2
|
//# sourceMappingURL=di.js.map
|