@ledgerhq/device-signer-kit-ethereum 1.7.0 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +59 -1
- package/lib/cjs/api/SignerEth.js +1 -1
- package/lib/cjs/api/SignerEth.js.map +1 -1
- package/lib/cjs/api/SignerEthBuilder.test.js +1 -1
- package/lib/cjs/api/SignerEthBuilder.test.js.map +2 -2
- 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/app-binder/VerifySafeAddressDeviceActionTypes.js +2 -0
- package/lib/cjs/api/app-binder/VerifySafeAddressDeviceActionTypes.js.map +7 -0
- package/lib/cjs/api/model/SafeAddressOptions.js +2 -0
- package/lib/cjs/api/model/SafeAddressOptions.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/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 +2 -2
- package/lib/cjs/internal/app-binder/command/ProvideSafeAccountCommand.js +2 -0
- package/lib/cjs/internal/app-binder/command/ProvideSafeAccountCommand.js.map +7 -0
- package/lib/cjs/internal/app-binder/command/ProvideSafeAccountCommand.test.js +2 -0
- package/lib/cjs/internal/app-binder/command/ProvideSafeAccountCommand.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/command/SendEIP712FilteringCommand.js +1 -1
- package/lib/cjs/internal/app-binder/command/SendEIP712FilteringCommand.js.map +3 -3
- package/lib/cjs/internal/app-binder/command/SendEIP712FilteringCommand.test.js +1 -1
- package/lib/cjs/internal/app-binder/command/SendEIP712FilteringCommand.test.js.map +3 -3
- 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 +2 -2
- 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 +3 -3
- package/lib/cjs/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.js +2 -0
- package/lib/cjs/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.js.map +7 -0
- package/lib/cjs/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.test.js +2 -0
- package/lib/cjs/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/device-action/__test-utils__/testDeviceActionUntilStep.js +2 -0
- package/lib/cjs/internal/app-binder/device-action/__test-utils__/testDeviceActionUntilStep.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/BuildBaseContexts.js +2 -0
- package/lib/cjs/internal/app-binder/task/BuildBaseContexts.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/BuildBaseContexts.test.js +2 -0
- package/lib/cjs/internal/app-binder/task/BuildBaseContexts.test.js.map +7 -0
- 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 +3 -3
- package/lib/cjs/internal/app-binder/task/BuildFullContextsTask.js +2 -0
- package/lib/cjs/internal/app-binder/task/BuildFullContextsTask.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/BuildFullContextsTask.test.js +2 -0
- package/lib/cjs/internal/app-binder/task/BuildFullContextsTask.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/BuildSafeAddressContextTask.js +2 -0
- package/lib/cjs/internal/app-binder/task/BuildSafeAddressContextTask.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/BuildSafeAddressContextTask.test.js +2 -0
- package/lib/cjs/internal/app-binder/task/BuildSafeAddressContextTask.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/BuildSubcontextsTask.js +2 -0
- package/lib/cjs/internal/app-binder/task/BuildSubcontextsTask.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/BuildSubcontextsTask.test.js +2 -0
- package/lib/cjs/internal/app-binder/task/BuildSubcontextsTask.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/ParseNestedTransactionTask.js +2 -0
- package/lib/cjs/internal/app-binder/task/ParseNestedTransactionTask.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/ParseNestedTransactionTask.test.js +2 -0
- package/lib/cjs/internal/app-binder/task/ParseNestedTransactionTask.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/ParseTransactionTask.js +2 -0
- package/lib/cjs/internal/app-binder/task/ParseTransactionTask.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/ParseTransactionTask.test.js +2 -0
- package/lib/cjs/internal/app-binder/task/ParseTransactionTask.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/ProvideContextTask.js +2 -0
- package/lib/cjs/internal/app-binder/task/ProvideContextTask.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/ProvideContextTask.test.js +2 -0
- package/lib/cjs/internal/app-binder/task/ProvideContextTask.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/ProvideTransactionContextsTask.js +2 -0
- package/lib/cjs/internal/app-binder/task/ProvideTransactionContextsTask.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/ProvideTransactionContextsTask.test.js +2 -0
- package/lib/cjs/internal/app-binder/task/ProvideTransactionContextsTask.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/safe/di/safeModule.js +2 -0
- package/lib/cjs/internal/safe/di/safeModule.js.map +7 -0
- package/lib/cjs/internal/safe/di/safeModule.test.js +2 -0
- package/lib/cjs/internal/safe/di/safeModule.test.js.map +7 -0
- package/lib/cjs/internal/safe/di/safeTypes.js +2 -0
- package/lib/cjs/internal/safe/di/safeTypes.js.map +7 -0
- package/lib/cjs/internal/safe/use-case/VerifySafeAddressUseCase.js +2 -0
- package/lib/cjs/internal/safe/use-case/VerifySafeAddressUseCase.js.map +7 -0
- package/lib/cjs/internal/safe/use-case/VerifySafeAddressUseCase.test.js +2 -0
- package/lib/cjs/internal/safe/use-case/VerifySafeAddressUseCase.test.js.map +7 -0
- package/lib/cjs/internal/transaction/service/parser/TransactionParserService.js +1 -1
- package/lib/cjs/internal/transaction/service/parser/TransactionParserService.js.map +2 -2
- package/lib/cjs/internal/transaction/service/parser/TransactionParserService.test.js +1 -1
- package/lib/cjs/internal/transaction/service/parser/TransactionParserService.test.js.map +2 -2
- package/lib/cjs/package.json +2 -2
- package/lib/esm/api/SignerEthBuilder.test.js +1 -1
- package/lib/esm/api/SignerEthBuilder.test.js.map +2 -2
- 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/app-binder/VerifySafeAddressDeviceActionTypes.js +2 -0
- package/lib/esm/api/app-binder/VerifySafeAddressDeviceActionTypes.js.map +7 -0
- package/lib/esm/api/model/SafeAddressOptions.js +1 -0
- package/lib/esm/api/model/SafeAddressOptions.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/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 +2 -2
- package/lib/esm/internal/app-binder/command/ProvideSafeAccountCommand.js +2 -0
- package/lib/esm/internal/app-binder/command/ProvideSafeAccountCommand.js.map +7 -0
- package/lib/esm/internal/app-binder/command/ProvideSafeAccountCommand.test.js +2 -0
- package/lib/esm/internal/app-binder/command/ProvideSafeAccountCommand.test.js.map +7 -0
- package/lib/esm/internal/app-binder/command/SendEIP712FilteringCommand.js +1 -1
- package/lib/esm/internal/app-binder/command/SendEIP712FilteringCommand.js.map +3 -3
- package/lib/esm/internal/app-binder/command/SendEIP712FilteringCommand.test.js +1 -1
- package/lib/esm/internal/app-binder/command/SendEIP712FilteringCommand.test.js.map +3 -3
- 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 +2 -2
- 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 +3 -3
- package/lib/esm/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.js +2 -0
- package/lib/esm/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.js.map +7 -0
- package/lib/esm/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.test.js +2 -0
- package/lib/esm/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.test.js.map +7 -0
- package/lib/esm/internal/app-binder/device-action/__test-utils__/testDeviceActionUntilStep.js +2 -0
- package/lib/esm/internal/app-binder/device-action/__test-utils__/testDeviceActionUntilStep.js.map +7 -0
- package/lib/esm/internal/app-binder/task/BuildBaseContexts.js +2 -0
- package/lib/esm/internal/app-binder/task/BuildBaseContexts.js.map +7 -0
- package/lib/esm/internal/app-binder/task/BuildBaseContexts.test.js +2 -0
- package/lib/esm/internal/app-binder/task/BuildBaseContexts.test.js.map +7 -0
- 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 +3 -3
- package/lib/esm/internal/app-binder/task/BuildFullContextsTask.js +2 -0
- package/lib/esm/internal/app-binder/task/BuildFullContextsTask.js.map +7 -0
- package/lib/esm/internal/app-binder/task/BuildFullContextsTask.test.js +2 -0
- package/lib/esm/internal/app-binder/task/BuildFullContextsTask.test.js.map +7 -0
- package/lib/esm/internal/app-binder/task/BuildSafeAddressContextTask.js +2 -0
- package/lib/esm/internal/app-binder/task/BuildSafeAddressContextTask.js.map +7 -0
- package/lib/esm/internal/app-binder/task/BuildSafeAddressContextTask.test.js +2 -0
- package/lib/esm/internal/app-binder/task/BuildSafeAddressContextTask.test.js.map +7 -0
- package/lib/esm/internal/app-binder/task/BuildSubcontextsTask.js +2 -0
- package/lib/esm/internal/app-binder/task/BuildSubcontextsTask.js.map +7 -0
- package/lib/esm/internal/app-binder/task/BuildSubcontextsTask.test.js +2 -0
- package/lib/esm/internal/app-binder/task/BuildSubcontextsTask.test.js.map +7 -0
- package/lib/esm/internal/app-binder/task/ParseNestedTransactionTask.js +2 -0
- package/lib/esm/internal/app-binder/task/ParseNestedTransactionTask.js.map +7 -0
- package/lib/esm/internal/app-binder/task/ParseNestedTransactionTask.test.js +2 -0
- package/lib/esm/internal/app-binder/task/ParseNestedTransactionTask.test.js.map +7 -0
- package/lib/esm/internal/app-binder/task/ParseTransactionTask.js +2 -0
- package/lib/esm/internal/app-binder/task/ParseTransactionTask.js.map +7 -0
- package/lib/esm/internal/app-binder/task/ParseTransactionTask.test.js +2 -0
- package/lib/esm/internal/app-binder/task/ParseTransactionTask.test.js.map +7 -0
- package/lib/esm/internal/app-binder/task/ProvideContextTask.js +2 -0
- package/lib/esm/internal/app-binder/task/ProvideContextTask.js.map +7 -0
- package/lib/esm/internal/app-binder/task/ProvideContextTask.test.js +2 -0
- package/lib/esm/internal/app-binder/task/ProvideContextTask.test.js.map +7 -0
- package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.js +1 -1
- package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.js.map +3 -3
- package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.test.js.map +3 -3
- package/lib/esm/internal/app-binder/task/ProvideTransactionContextsTask.js +2 -0
- package/lib/esm/internal/app-binder/task/ProvideTransactionContextsTask.js.map +7 -0
- package/lib/esm/internal/app-binder/task/ProvideTransactionContextsTask.test.js +2 -0
- package/lib/esm/internal/app-binder/task/ProvideTransactionContextsTask.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/safe/di/safeModule.js +2 -0
- package/lib/esm/internal/safe/di/safeModule.js.map +7 -0
- package/lib/esm/internal/safe/di/safeModule.test.js +2 -0
- package/lib/esm/internal/safe/di/safeModule.test.js.map +7 -0
- package/lib/esm/internal/safe/di/safeTypes.js +2 -0
- package/lib/esm/internal/safe/di/safeTypes.js.map +7 -0
- package/lib/esm/internal/safe/use-case/VerifySafeAddressUseCase.js +2 -0
- package/lib/esm/internal/safe/use-case/VerifySafeAddressUseCase.js.map +7 -0
- package/lib/esm/internal/safe/use-case/VerifySafeAddressUseCase.test.js +2 -0
- package/lib/esm/internal/safe/use-case/VerifySafeAddressUseCase.test.js.map +7 -0
- package/lib/esm/internal/transaction/service/parser/TransactionParserService.js +1 -1
- package/lib/esm/internal/transaction/service/parser/TransactionParserService.js.map +2 -2
- package/lib/esm/internal/transaction/service/parser/TransactionParserService.test.js +1 -1
- package/lib/esm/internal/transaction/service/parser/TransactionParserService.test.js.map +2 -2
- package/lib/esm/package.json +2 -2
- package/lib/types/api/SignerEth.d.ts +3 -0
- package/lib/types/api/SignerEth.d.ts.map +1 -1
- package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts +9 -8
- package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts.map +1 -1
- package/lib/types/api/app-binder/SignTypedDataDeviceActionTypes.d.ts +4 -0
- package/lib/types/api/app-binder/SignTypedDataDeviceActionTypes.d.ts.map +1 -1
- package/lib/types/api/app-binder/VerifySafeAddressDeviceActionTypes.d.ts +30 -0
- package/lib/types/api/app-binder/VerifySafeAddressDeviceActionTypes.d.ts.map +1 -0
- package/lib/types/api/model/SafeAddressOptions.d.ts +5 -0
- package/lib/types/api/model/SafeAddressOptions.d.ts.map +1 -0
- package/lib/types/internal/DefaultSignerEth.d.ts +3 -0
- package/lib/types/internal/DefaultSignerEth.d.ts.map +1 -1
- package/lib/types/internal/app-binder/EthAppBinder.d.ts +6 -0
- package/lib/types/internal/app-binder/EthAppBinder.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/ProvideSafeAccountCommand.d.ts +34 -0
- package/lib/types/internal/app-binder/command/ProvideSafeAccountCommand.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/ProvideSafeAccountCommand.test.d.ts +2 -0
- package/lib/types/internal/app-binder/command/ProvideSafeAccountCommand.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/SendEIP712FilteringCommand.d.ts +29 -1
- package/lib/types/internal/app-binder/command/SendEIP712FilteringCommand.d.ts.map +1 -1
- package/lib/types/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.d.ts +14 -18
- 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 +4 -0
- package/lib/types/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.d.ts.map +1 -1
- package/lib/types/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.d.ts +20 -0
- package/lib/types/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.d.ts.map +1 -0
- package/lib/types/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.test.d.ts +2 -0
- package/lib/types/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/device-action/__test-utils__/testDeviceActionUntilStep.d.ts +6 -0
- package/lib/types/internal/app-binder/device-action/__test-utils__/testDeviceActionUntilStep.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/BuildBaseContexts.d.ts +51 -0
- package/lib/types/internal/app-binder/task/BuildBaseContexts.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/BuildBaseContexts.test.d.ts +2 -0
- package/lib/types/internal/app-binder/task/BuildBaseContexts.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/BuildEIP712ContextTask.d.ts +8 -1
- package/lib/types/internal/app-binder/task/BuildEIP712ContextTask.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/BuildFullContextsTask.d.ts +39 -0
- package/lib/types/internal/app-binder/task/BuildFullContextsTask.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/BuildFullContextsTask.test.d.ts +2 -0
- package/lib/types/internal/app-binder/task/BuildFullContextsTask.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/BuildSafeAddressContextTask.d.ts +19 -0
- package/lib/types/internal/app-binder/task/BuildSafeAddressContextTask.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/BuildSafeAddressContextTask.test.d.ts +2 -0
- package/lib/types/internal/app-binder/task/BuildSafeAddressContextTask.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/BuildSubcontextsTask.d.ts +28 -0
- package/lib/types/internal/app-binder/task/BuildSubcontextsTask.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/BuildSubcontextsTask.test.d.ts +2 -0
- package/lib/types/internal/app-binder/task/BuildSubcontextsTask.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/ParseNestedTransactionTask.d.ts +21 -0
- package/lib/types/internal/app-binder/task/ParseNestedTransactionTask.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/ParseNestedTransactionTask.test.d.ts +2 -0
- package/lib/types/internal/app-binder/task/ParseNestedTransactionTask.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/{PreBuildContextTask.d.ts → ParseTransactionTask.d.ts} +6 -6
- package/lib/types/internal/app-binder/task/ParseTransactionTask.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/ParseTransactionTask.test.d.ts +2 -0
- package/lib/types/internal/app-binder/task/ParseTransactionTask.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/ProvideContextTask.d.ts +22 -0
- package/lib/types/internal/app-binder/task/ProvideContextTask.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/ProvideContextTask.test.d.ts +2 -0
- package/lib/types/internal/app-binder/task/ProvideContextTask.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/ProvideEIP712ContextTask.d.ts +14 -3
- package/lib/types/internal/app-binder/task/ProvideEIP712ContextTask.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/ProvideTransactionContextsTask.d.ts +36 -0
- package/lib/types/internal/app-binder/task/ProvideTransactionContextsTask.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/ProvideTransactionContextsTask.test.d.ts +2 -0
- package/lib/types/internal/app-binder/task/ProvideTransactionContextsTask.test.d.ts.map +1 -0
- package/lib/types/internal/di.d.ts.map +1 -1
- package/lib/types/internal/safe/di/safeModule.d.ts +3 -0
- package/lib/types/internal/safe/di/safeModule.d.ts.map +1 -0
- package/lib/types/internal/safe/di/safeModule.test.d.ts +2 -0
- package/lib/types/internal/safe/di/safeModule.test.d.ts.map +1 -0
- package/lib/types/internal/safe/di/safeTypes.d.ts +4 -0
- package/lib/types/internal/safe/di/safeTypes.d.ts.map +1 -0
- package/lib/types/internal/safe/use-case/VerifySafeAddressUseCase.d.ts +9 -0
- package/lib/types/internal/safe/use-case/VerifySafeAddressUseCase.d.ts.map +1 -0
- package/lib/types/internal/safe/use-case/VerifySafeAddressUseCase.test.d.ts +2 -0
- package/lib/types/internal/safe/use-case/VerifySafeAddressUseCase.test.d.ts.map +1 -0
- package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
- package/package.json +9 -9
- package/lib/cjs/internal/app-binder/task/BuildSubContextTask.js +0 -2
- package/lib/cjs/internal/app-binder/task/BuildSubContextTask.js.map +0 -7
- package/lib/cjs/internal/app-binder/task/BuildSubContextTask.test.js +0 -2
- package/lib/cjs/internal/app-binder/task/BuildSubContextTask.test.js.map +0 -7
- package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.js +0 -2
- package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.js.map +0 -7
- package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.test.js +0 -2
- package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.test.js.map +0 -7
- package/lib/cjs/internal/app-binder/task/PreBuildContextTask.js +0 -2
- package/lib/cjs/internal/app-binder/task/PreBuildContextTask.js.map +0 -7
- package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.js +0 -2
- package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.js.map +0 -7
- package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.test.js +0 -2
- package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.test.js.map +0 -7
- package/lib/esm/internal/app-binder/task/BuildSubContextTask.js +0 -2
- package/lib/esm/internal/app-binder/task/BuildSubContextTask.js.map +0 -7
- package/lib/esm/internal/app-binder/task/BuildSubContextTask.test.js +0 -2
- package/lib/esm/internal/app-binder/task/BuildSubContextTask.test.js.map +0 -7
- package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.js +0 -2
- package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.js.map +0 -7
- package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.test.js +0 -2
- package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.test.js.map +0 -7
- package/lib/esm/internal/app-binder/task/PreBuildContextTask.js +0 -2
- package/lib/esm/internal/app-binder/task/PreBuildContextTask.js.map +0 -7
- package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.js +0 -2
- package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.js.map +0 -7
- package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.test.js +0 -2
- package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.test.js.map +0 -7
- package/lib/types/internal/app-binder/task/BuildSubContextTask.d.ts +0 -20
- package/lib/types/internal/app-binder/task/BuildSubContextTask.d.ts.map +0 -1
- package/lib/types/internal/app-binder/task/BuildSubContextTask.test.d.ts +0 -2
- package/lib/types/internal/app-binder/task/BuildSubContextTask.test.d.ts.map +0 -1
- package/lib/types/internal/app-binder/task/BuildTransactionContextTask.d.ts +0 -28
- package/lib/types/internal/app-binder/task/BuildTransactionContextTask.d.ts.map +0 -1
- package/lib/types/internal/app-binder/task/BuildTransactionContextTask.test.d.ts +0 -2
- package/lib/types/internal/app-binder/task/BuildTransactionContextTask.test.d.ts.map +0 -1
- package/lib/types/internal/app-binder/task/PreBuildContextTask.d.ts.map +0 -1
- package/lib/types/internal/app-binder/task/ProvideTransactionContextTask.d.ts +0 -44
- package/lib/types/internal/app-binder/task/ProvideTransactionContextTask.d.ts.map +0 -1
- package/lib/types/internal/app-binder/task/ProvideTransactionContextTask.test.d.ts +0 -2
- package/lib/types/internal/app-binder/task/ProvideTransactionContextTask.test.d.ts.map +0 -1
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/internal/app-binder/command/ProvideSafeAccountCommand.test.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n type ApduResponse,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { EthAppCommandError } from \"./utils/ethAppErrors\";\nimport {\n ProvideSafeAccountCommand,\n type ProvideSafeAccountCommandArgs,\n ProvideSafeAccountCommandType,\n} from \"./ProvideSafeAccountCommand\";\n\ndescribe(\"ProvideSafeAccountCommand\", () => {\n describe(\"getApdu\", () => {\n it(\"should return the raw APDU for the first chunk with SAFE_DESCRIPTOR type\", () => {\n // GIVEN\n const args: ProvideSafeAccountCommandArgs = {\n data: Uint8Array.from([0x01, 0x02, 0x03]),\n isFirstChunk: true,\n type: ProvideSafeAccountCommandType.SAFE_DESCRIPTOR,\n };\n\n // WHEN\n const command = new ProvideSafeAccountCommand(args);\n const apdu = command.getApdu();\n\n // THEN\n expect(apdu.getRawApdu()).toStrictEqual(\n Uint8Array.from([0xe0, 0x36, 0x01, 0x00, 0x03, 0x01, 0x02, 0x03]),\n );\n });\n\n it(\"should return the raw APDU for the first chunk with SIGNER_DESCRIPTOR type\", () => {\n // GIVEN\n const args: ProvideSafeAccountCommandArgs = {\n data: Uint8Array.from([0x01, 0x02, 0x03]),\n isFirstChunk: true,\n type: ProvideSafeAccountCommandType.SIGNER_DESCRIPTOR,\n };\n\n // WHEN\n const command = new ProvideSafeAccountCommand(args);\n const apdu = command.getApdu();\n\n // THEN\n expect(apdu.getRawApdu()).toStrictEqual(\n Uint8Array.from([0xe0, 0x36, 0x01, 0x01, 0x03, 0x01, 0x02, 0x03]),\n );\n });\n\n it(\"should return the raw APDU for the subsequent chunk with SAFE_DESCRIPTOR type\", () => {\n // GIVEN\n const args: ProvideSafeAccountCommandArgs = {\n data: Uint8Array.from([0x04, 0x05, 0x06]),\n isFirstChunk: false,\n type: ProvideSafeAccountCommandType.SAFE_DESCRIPTOR,\n };\n\n // WHEN\n const command = new ProvideSafeAccountCommand(args);\n const apdu = command.getApdu();\n\n // THEN\n expect(apdu.getRawApdu()).toStrictEqual(\n Uint8Array.from([0xe0, 0x36, 0x00, 0x00, 0x03, 0x04, 0x05, 0x06]),\n );\n });\n\n it(\"should return the raw APDU for the subsequent chunk with SIGNER_DESCRIPTOR type\", () => {\n // GIVEN\n const args: ProvideSafeAccountCommandArgs = {\n data: Uint8Array.from([0x04, 0x05, 0x06]),\n isFirstChunk: false,\n type: ProvideSafeAccountCommandType.SIGNER_DESCRIPTOR,\n };\n\n // WHEN\n const command = new ProvideSafeAccountCommand(args);\n const apdu = command.getApdu();\n\n // THEN\n expect(apdu.getRawApdu()).toStrictEqual(\n Uint8Array.from([0xe0, 0x36, 0x00, 0x01, 0x03, 0x04, 0x05, 0x06]),\n );\n });\n });\n\n describe(\"parseResponse\", () => {\n it(\"should return an error if the response status code is invalid\", () => {\n // GIVEN\n const response: ApduResponse = {\n data: Uint8Array.from([]),\n statusCode: Uint8Array.from([0x6d, 0x00]), // Invalid status code\n };\n\n // WHEN\n const command = new ProvideSafeAccountCommand({\n data: new Uint8Array(0),\n isFirstChunk: true,\n type: ProvideSafeAccountCommandType.SAFE_DESCRIPTOR,\n });\n const result = command.parseResponse(response);\n\n // THEN\n if (isSuccessCommandResult(result)) {\n throw new Error(\"Expected an error\");\n } else {\n expect(result.error).toBeDefined();\n expect(result.error).toBeInstanceOf(EthAppCommandError);\n }\n });\n\n it(\"should return a success result if the response status code is valid\", () => {\n // GIVEN\n const response: ApduResponse = {\n data: Uint8Array.from([]),\n statusCode: Uint8Array.from([0x90, 0x00]), // Success status code\n };\n\n // WHEN\n const command = new ProvideSafeAccountCommand({\n data: new Uint8Array(0),\n isFirstChunk: true,\n type: ProvideSafeAccountCommandType.SAFE_DESCRIPTOR,\n });\n const result = command.parseResponse(response);\n\n // THEN\n expect(isSuccessCommandResult(result)).toBe(true);\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "aAAA,IAAAA,EAGO,2CAEPC,EAAmC,gCACnCC,EAIO,uCAEP,SAAS,4BAA6B,IAAM,CAC1C,SAAS,UAAW,IAAM,CACxB,GAAG,2EAA4E,IAAM,CAEnF,MAAMC,EAAsC,CAC1C,KAAM,WAAW,KAAK,CAAC,EAAM,EAAM,CAAI,CAAC,EACxC,aAAc,GACd,KAAM,gCAA8B,eACtC,EAIMC,EADU,IAAI,4BAA0BD,CAAI,EAC7B,QAAQ,EAG7B,OAAOC,EAAK,WAAW,CAAC,EAAE,cACxB,WAAW,KAAK,CAAC,IAAM,GAAM,EAAM,EAAM,EAAM,EAAM,EAAM,CAAI,CAAC,CAClE,CACF,CAAC,EAED,GAAG,6EAA8E,IAAM,CAErF,MAAMD,EAAsC,CAC1C,KAAM,WAAW,KAAK,CAAC,EAAM,EAAM,CAAI,CAAC,EACxC,aAAc,GACd,KAAM,gCAA8B,iBACtC,EAIMC,EADU,IAAI,4BAA0BD,CAAI,EAC7B,QAAQ,EAG7B,OAAOC,EAAK,WAAW,CAAC,EAAE,cACxB,WAAW,KAAK,CAAC,IAAM,GAAM,EAAM,EAAM,EAAM,EAAM,EAAM,CAAI,CAAC,CAClE,CACF,CAAC,EAED,GAAG,gFAAiF,IAAM,CAExF,MAAMD,EAAsC,CAC1C,KAAM,WAAW,KAAK,CAAC,EAAM,EAAM,CAAI,CAAC,EACxC,aAAc,GACd,KAAM,gCAA8B,eACtC,EAIMC,EADU,IAAI,4BAA0BD,CAAI,EAC7B,QAAQ,EAG7B,OAAOC,EAAK,WAAW,CAAC,EAAE,cACxB,WAAW,KAAK,CAAC,IAAM,GAAM,EAAM,EAAM,EAAM,EAAM,EAAM,CAAI,CAAC,CAClE,CACF,CAAC,EAED,GAAG,kFAAmF,IAAM,CAE1F,MAAMD,EAAsC,CAC1C,KAAM,WAAW,KAAK,CAAC,EAAM,EAAM,CAAI,CAAC,EACxC,aAAc,GACd,KAAM,gCAA8B,iBACtC,EAIMC,EADU,IAAI,4BAA0BD,CAAI,EAC7B,QAAQ,EAG7B,OAAOC,EAAK,WAAW,CAAC,EAAE,cACxB,WAAW,KAAK,CAAC,IAAM,GAAM,EAAM,EAAM,EAAM,EAAM,EAAM,CAAI,CAAC,CAClE,CACF,CAAC,CACH,CAAC,EAED,SAAS,gBAAiB,IAAM,CAC9B,GAAG,gEAAiE,IAAM,CAExE,MAAMC,EAAyB,CAC7B,KAAM,WAAW,KAAK,CAAC,CAAC,EACxB,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,CAC1C,EAQMC,EALU,IAAI,4BAA0B,CAC5C,KAAM,IAAI,WAAW,CAAC,EACtB,aAAc,GACd,KAAM,gCAA8B,eACtC,CAAC,EACsB,cAAcD,CAAQ,EAG7C,MAAI,0BAAuBC,CAAM,EAC/B,MAAM,IAAI,MAAM,mBAAmB,EAEnC,OAAOA,EAAO,KAAK,EAAE,YAAY,EACjC,OAAOA,EAAO,KAAK,EAAE,eAAe,oBAAkB,CAE1D,CAAC,EAED,GAAG,sEAAuE,IAAM,CAE9E,MAAMD,EAAyB,CAC7B,KAAM,WAAW,KAAK,CAAC,CAAC,EACxB,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,CAC1C,EAQMC,EALU,IAAI,4BAA0B,CAC5C,KAAM,IAAI,WAAW,CAAC,EACtB,aAAc,GACd,KAAM,gCAA8B,eACtC,CAAC,EACsB,cAAcD,CAAQ,EAG7C,UAAO,0BAAuBC,CAAM,CAAC,EAAE,KAAK,EAAI,CAClD,CAAC,CACH,CAAC,CACH,CAAC",
|
|
6
|
+
"names": ["import_device_management_kit", "import_ethAppErrors", "import_ProvideSafeAccountCommand", "args", "apdu", "response", "result"]
|
|
7
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var s=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var y=Object.prototype.hasOwnProperty;var F=(r,e)=>{for(var t in e)s(r,t,{get:e[t],enumerable:!0})},T=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let l of u(e))!y.call(r,l)&&l!==t&&s(r,l,{get:()=>e[l],enumerable:!(i=m(e,l))||i.enumerable});return r};var C=r=>T(s({},"__esModule",{value:!0}),r);var I={};F(I,{CalldataParamPresence:()=>c,Eip712FilterType:()=>g,SendEIP712FilteringCommand:()=>h});module.exports=C(I);var d=require("@ledgerhq/device-management-kit"),o=require("@ledgerhq/signer-utils"),p=require("purify-ts"),n=require("./utils/ethAppErrors"),g=(a=>(a.Activation="activation",a.DiscardedPath="discarded_path",a.MessageInfo="message_info",a.Datetime="datetime",a.Raw="raw",a.Amount="amount",a.Token="token",a.TrustedName="trusted-name",a.CalldataInfo="calldata-info",a.CalldataValue="calldata-value",a.CalldataCallee="calldata-callee",a.CalldataChainId="calldata-chain-id",a.CalldataSelector="calldata-selector",a.CalldataAmount="calldata-amount",a.CalldataSpender="calldata-spender",a))(g||{}),c=(i=>(i[i.None=0]="None",i[i.Present=1]="Present",i[i.VerifyingContract=2]="VerifyingContract",i))(c||{});const E={activation:0,discarded_path:1,message_info:15,"calldata-spender":244,"calldata-amount":245,"calldata-selector":246,"calldata-chain-id":247,"calldata-callee":248,"calldata-value":249,"calldata-info":250,"trusted-name":251,datetime:252,token:253,amount:254,raw:255};class h{constructor(e){this.args=e}errorHelper=new o.CommandErrorHelper(n.ETH_APP_ERRORS,n.EthAppCommandErrorFactory);getApdu(){const e={cla:224,ins:30,p1:"discarded"in this.args&&this.args.discarded?1:0,p2:E[this.args.type]},t=new d.ApduBuilder(e);switch(this.args.type){case"message_info":t.encodeInLVFromAscii(this.args.displayName).add8BitUIntToData(this.args.filtersCount).encodeInLVFromHexa(this.args.signature);break;case"discarded_path":t.encodeInLVFromAscii(this.args.path);break;case"datetime":case"raw":t.encodeInLVFromAscii(this.args.displayName).encodeInLVFromHexa(this.args.signature);break;case"trusted-name":t.encodeInLVFromAscii(this.args.displayName).addHexaStringToData(this.args.typesAndSourcesPayload).encodeInLVFromHexa(this.args.signature);break;case"token":case"amount":this.args.type==="amount"&&t.encodeInLVFromAscii(this.args.displayName),t.add8BitUIntToData(this.args.tokenIndex).encodeInLVFromHexa(this.args.signature);break;case"calldata-info":t.add8BitUIntToData(this.args.calldataIndex).add8BitUIntToData(this.args.valueFlag?1:0).add8BitUIntToData(this.args.calleeFlag).add8BitUIntToData(this.args.chainIdFlag?1:0).add8BitUIntToData(this.args.selectorFlag?1:0).add8BitUIntToData(this.args.amountFlag?1:0).add8BitUIntToData(this.args.spenderFlag).encodeInLVFromHexa(this.args.signature);break;case"calldata-value":case"calldata-callee":case"calldata-chain-id":case"calldata-selector":case"calldata-amount":case"calldata-spender":t.add8BitUIntToData(this.args.calldataIndex).encodeInLVFromHexa(this.args.signature);break}return t.build()}parseResponse(e){return p.Maybe.fromNullable(this.errorHelper.getError(e)).orDefault((0,d.CommandResultFactory)({data:void 0}))}}0&&(module.exports={CalldataParamPresence,Eip712FilterType,SendEIP712FilteringCommand});
|
|
2
2
|
//# sourceMappingURL=SendEIP712FilteringCommand.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/command/SendEIP712FilteringCommand.ts"],
|
|
4
|
-
"sourcesContent": ["// https://github.com/LedgerHQ/app-ethereum/blob/develop/doc/ethapp.adoc#eip712-filtering\nimport {\n type Apdu,\n ApduBuilder,\n type ApduBuilderArgs,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n} from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\nimport { Maybe } from \"purify-ts\";\n\nimport {\n ETH_APP_ERRORS,\n EthAppCommandErrorFactory,\n type EthErrorCodes,\n} from \"./utils/ethAppErrors\";\n\nexport enum Eip712FilterType {\n Activation = \"activation\",\n DiscardedPath = \"discarded_path\",\n MessageInfo = \"message_info\",\n Datetime = \"datetime\",\n Raw = \"raw\",\n Amount = \"amount\",\n Token = \"token\",\n TrustedName = \"trusted-name\",\n}\n\nexport type SendEIP712FilteringCommandArgs =\n | { type: Eip712FilterType.Activation }\n | { type: Eip712FilterType.DiscardedPath; path: string }\n | {\n type: Eip712FilterType.MessageInfo;\n displayName: string;\n filtersCount: number;\n signature: string;\n }\n | {\n type: Eip712FilterType.Datetime;\n discarded: boolean;\n displayName: string;\n signature: string;\n }\n | {\n type: Eip712FilterType.TrustedName;\n discarded: boolean;\n displayName: string;\n typesAndSourcesPayload: string;\n signature: string;\n }\n | {\n type: Eip712FilterType.Token;\n discarded: boolean;\n tokenIndex: number;\n signature: string;\n }\n | {\n type: Eip712FilterType.Raw;\n discarded: boolean;\n displayName: string;\n signature: string;\n }\n | {\n type: Eip712FilterType.Amount;\n discarded: boolean;\n displayName: string;\n tokenIndex: number;\n signature: string;\n };\n\nconst FILTER_TO_P2: Record<Eip712FilterType, number> = {\n [Eip712FilterType.Activation]: 0x00,\n [Eip712FilterType.DiscardedPath]: 0x01,\n [Eip712FilterType.MessageInfo]: 0x0f,\n [Eip712FilterType.TrustedName]: 0xfb,\n [Eip712FilterType.Datetime]: 0xfc,\n [Eip712FilterType.Token]: 0xfd,\n [Eip712FilterType.Amount]: 0xfe,\n [Eip712FilterType.Raw]: 0xff,\n};\n\nexport class SendEIP712FilteringCommand\n implements Command<void, SendEIP712FilteringCommandArgs, EthErrorCodes>\n{\n private readonly errorHelper = new CommandErrorHelper<void, EthErrorCodes>(\n ETH_APP_ERRORS,\n EthAppCommandErrorFactory,\n );\n\n constructor(private readonly args: SendEIP712FilteringCommandArgs) {}\n\n getApdu(): Apdu {\n const filteringArgs: ApduBuilderArgs = {\n cla: 0xe0,\n ins: 0x1e,\n p1: \"discarded\" in this.args && this.args.discarded ? 0x01 : 0x00,\n p2: FILTER_TO_P2[this.args.type],\n };\n const builder = new ApduBuilder(filteringArgs);\n\n switch (this.args.type) {\n case Eip712FilterType.MessageInfo:\n builder\n .encodeInLVFromAscii(this.args.displayName)\n .add8BitUIntToData(this.args.filtersCount)\n .encodeInLVFromHexa(this.args.signature);\n break;\n case Eip712FilterType.DiscardedPath:\n builder.encodeInLVFromAscii(this.args.path);\n break;\n case Eip712FilterType.Datetime:\n case Eip712FilterType.Raw:\n builder\n .encodeInLVFromAscii(this.args.displayName)\n .encodeInLVFromHexa(this.args.signature);\n break;\n case Eip712FilterType.TrustedName:\n builder\n .encodeInLVFromAscii(this.args.displayName)\n .addHexaStringToData(this.args.typesAndSourcesPayload)\n .encodeInLVFromHexa(this.args.signature);\n break;\n case Eip712FilterType.Token:\n case Eip712FilterType.Amount:\n if (this.args.type === Eip712FilterType.Amount) {\n builder.encodeInLVFromAscii(this.args.displayName);\n }\n builder\n .add8BitUIntToData(this.args.tokenIndex)\n .encodeInLVFromHexa(this.args.signature);\n break;\n }\n return builder.build();\n }\n\n parseResponse(\n apduResponse: ApduResponse,\n ): CommandResult<void, EthErrorCodes> {\n return Maybe.fromNullable(\n this.errorHelper.getError(apduResponse),\n ).orDefault(CommandResultFactory({ data: undefined }));\n }\n}\n"],
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,
|
|
6
|
-
"names": ["SendEIP712FilteringCommand_exports", "__export", "Eip712FilterType", "SendEIP712FilteringCommand", "__toCommonJS", "import_device_management_kit", "import_signer_utils", "import_purify_ts", "import_ethAppErrors", "FILTER_TO_P2", "args", "filteringArgs", "builder", "apduResponse"]
|
|
4
|
+
"sourcesContent": ["// https://github.com/LedgerHQ/app-ethereum/blob/develop/doc/ethapp.adoc#eip712-filtering\nimport {\n type Apdu,\n ApduBuilder,\n type ApduBuilderArgs,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n} from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\nimport { Maybe } from \"purify-ts\";\n\nimport {\n ETH_APP_ERRORS,\n EthAppCommandErrorFactory,\n type EthErrorCodes,\n} from \"./utils/ethAppErrors\";\n\nexport enum Eip712FilterType {\n Activation = \"activation\",\n DiscardedPath = \"discarded_path\",\n MessageInfo = \"message_info\",\n Datetime = \"datetime\",\n Raw = \"raw\",\n Amount = \"amount\",\n Token = \"token\",\n TrustedName = \"trusted-name\",\n // Calldata filters\n CalldataInfo = \"calldata-info\",\n CalldataValue = \"calldata-value\",\n CalldataCallee = \"calldata-callee\",\n CalldataChainId = \"calldata-chain-id\",\n CalldataSelector = \"calldata-selector\",\n CalldataAmount = \"calldata-amount\",\n CalldataSpender = \"calldata-spender\",\n}\n\nexport enum CalldataParamPresence {\n None = 0x0,\n Present = 0x1,\n VerifyingContract = 0x2,\n}\n\nexport type SendEIP712FilteringCommandArgs =\n | { type: Eip712FilterType.Activation }\n | { type: Eip712FilterType.DiscardedPath; path: string }\n | {\n type: Eip712FilterType.MessageInfo;\n displayName: string;\n filtersCount: number;\n signature: string;\n }\n | {\n type: Eip712FilterType.Datetime;\n discarded: boolean;\n displayName: string;\n signature: string;\n }\n | {\n type: Eip712FilterType.TrustedName;\n discarded: boolean;\n displayName: string;\n typesAndSourcesPayload: string;\n signature: string;\n }\n | {\n type: Eip712FilterType.Token;\n discarded: boolean;\n tokenIndex: number;\n signature: string;\n }\n | {\n type: Eip712FilterType.Raw;\n discarded: boolean;\n displayName: string;\n signature: string;\n }\n | {\n type: Eip712FilterType.Amount;\n discarded: boolean;\n displayName: string;\n tokenIndex: number;\n signature: string;\n }\n | {\n type: Eip712FilterType.CalldataInfo;\n discarded: boolean;\n calldataIndex: number;\n valueFlag: boolean;\n calleeFlag: CalldataParamPresence;\n chainIdFlag: boolean;\n selectorFlag: boolean;\n amountFlag: boolean;\n spenderFlag: CalldataParamPresence;\n signature: string;\n }\n | {\n type:\n | Eip712FilterType.CalldataValue\n | Eip712FilterType.CalldataCallee\n | Eip712FilterType.CalldataChainId\n | Eip712FilterType.CalldataSelector\n | Eip712FilterType.CalldataAmount\n | Eip712FilterType.CalldataSpender;\n discarded: boolean;\n calldataIndex: number;\n signature: string;\n };\n\nconst FILTER_TO_P2: Record<Eip712FilterType, number> = {\n [Eip712FilterType.Activation]: 0x00,\n [Eip712FilterType.DiscardedPath]: 0x01,\n [Eip712FilterType.MessageInfo]: 0x0f,\n [Eip712FilterType.CalldataSpender]: 0xf4,\n [Eip712FilterType.CalldataAmount]: 0xf5,\n [Eip712FilterType.CalldataSelector]: 0xf6,\n [Eip712FilterType.CalldataChainId]: 0xf7,\n [Eip712FilterType.CalldataCallee]: 0xf8,\n [Eip712FilterType.CalldataValue]: 0xf9,\n [Eip712FilterType.CalldataInfo]: 0xfa,\n [Eip712FilterType.TrustedName]: 0xfb,\n [Eip712FilterType.Datetime]: 0xfc,\n [Eip712FilterType.Token]: 0xfd,\n [Eip712FilterType.Amount]: 0xfe,\n [Eip712FilterType.Raw]: 0xff,\n};\n\nexport class SendEIP712FilteringCommand\n implements Command<void, SendEIP712FilteringCommandArgs, EthErrorCodes>\n{\n private readonly errorHelper = new CommandErrorHelper<void, EthErrorCodes>(\n ETH_APP_ERRORS,\n EthAppCommandErrorFactory,\n );\n\n constructor(private readonly args: SendEIP712FilteringCommandArgs) {}\n\n getApdu(): Apdu {\n const filteringArgs: ApduBuilderArgs = {\n cla: 0xe0,\n ins: 0x1e,\n p1: \"discarded\" in this.args && this.args.discarded ? 0x01 : 0x00,\n p2: FILTER_TO_P2[this.args.type],\n };\n const builder = new ApduBuilder(filteringArgs);\n\n switch (this.args.type) {\n case Eip712FilterType.MessageInfo:\n builder\n .encodeInLVFromAscii(this.args.displayName)\n .add8BitUIntToData(this.args.filtersCount)\n .encodeInLVFromHexa(this.args.signature);\n break;\n case Eip712FilterType.DiscardedPath:\n builder.encodeInLVFromAscii(this.args.path);\n break;\n case Eip712FilterType.Datetime:\n case Eip712FilterType.Raw:\n builder\n .encodeInLVFromAscii(this.args.displayName)\n .encodeInLVFromHexa(this.args.signature);\n break;\n case Eip712FilterType.TrustedName:\n builder\n .encodeInLVFromAscii(this.args.displayName)\n .addHexaStringToData(this.args.typesAndSourcesPayload)\n .encodeInLVFromHexa(this.args.signature);\n break;\n case Eip712FilterType.Token:\n case Eip712FilterType.Amount:\n if (this.args.type === Eip712FilterType.Amount) {\n builder.encodeInLVFromAscii(this.args.displayName);\n }\n builder\n .add8BitUIntToData(this.args.tokenIndex)\n .encodeInLVFromHexa(this.args.signature);\n break;\n case Eip712FilterType.CalldataInfo:\n builder\n .add8BitUIntToData(this.args.calldataIndex)\n .add8BitUIntToData(this.args.valueFlag ? 1 : 0)\n .add8BitUIntToData(this.args.calleeFlag)\n .add8BitUIntToData(this.args.chainIdFlag ? 1 : 0)\n .add8BitUIntToData(this.args.selectorFlag ? 1 : 0)\n .add8BitUIntToData(this.args.amountFlag ? 1 : 0)\n .add8BitUIntToData(this.args.spenderFlag)\n .encodeInLVFromHexa(this.args.signature);\n break;\n case Eip712FilterType.CalldataValue:\n case Eip712FilterType.CalldataCallee:\n case Eip712FilterType.CalldataChainId:\n case Eip712FilterType.CalldataSelector:\n case Eip712FilterType.CalldataAmount:\n case Eip712FilterType.CalldataSpender:\n builder\n .add8BitUIntToData(this.args.calldataIndex)\n .encodeInLVFromHexa(this.args.signature);\n break;\n }\n return builder.build();\n }\n\n parseResponse(\n apduResponse: ApduResponse,\n ): CommandResult<void, EthErrorCodes> {\n return Maybe.fromNullable(\n this.errorHelper.getError(apduResponse),\n ).orDefault(CommandResultFactory({ data: undefined }));\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["SendEIP712FilteringCommand_exports", "__export", "CalldataParamPresence", "Eip712FilterType", "SendEIP712FilteringCommand", "__toCommonJS", "import_device_management_kit", "import_signer_utils", "import_purify_ts", "import_ethAppErrors", "FILTER_TO_P2", "args", "filteringArgs", "builder", "apduResponse"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var c=require("@ledgerhq/device-management-kit"),x=require("./SendEIP712FilteringCommand");const
|
|
1
|
+
"use strict";var c=require("@ledgerhq/device-management-kit"),x=require("./SendEIP712FilteringCommand");const s=Uint8Array.from([224,30,0,0,0]),o=Uint8Array.from([224,30,0,15,84,11,49,105,110,99,104,32,79,114,100,101,114,6,70,48,68,2,32,41,94,10,235,23,202,9,41,178,169,76,50,77,103,208,181,82,138,186,38,129,119,243,172,41,123,86,49,65,224,0,39,2,32,58,195,96,217,253,12,156,12,18,39,157,30,115,190,165,213,73,161,232,20,31,69,77,136,251,225,232,239,151,14,104,2]),t=Uint8Array.from([224,30,0,255,77,4,70,114,111,109,71,48,69,2,33,0,184,32,228,223,177,160,205,230,220,151,217,163,78,235,177,164,238,240,178,38,38,46,103,136,17,138,179,199,251,121,254,53,2,32,45,66,106,56,139,76,58,128,150,179,248,68,18,167,2,234,83,119,112,230,30,224,114,126,193,183,16,193,218,82,12,68]),r=Uint8Array.from([224,30,0,250,79,3,1,1,0,1,0,2,71,48,69,2,33,0,255,114,120,71,68,84,49,229,113,205,42,13,157,180,42,126,182,46,55,135,123,155,242,14,106,150,88,66,85,52,126,25,2,32,10,110,149,183,248,230,59,47,171,11,239,136,199,71,222,106,56,125,6,53,27,229,189,195,75,44,31,154,234,111,221,40]),m=Uint8Array.from([224,30,0,249,73,7,71,48,69,2,33,0,255,114,120,71,68,84,49,229,113,205,42,13,157,180,42,126,182,46,55,135,123,155,242,14,106,150,88,66,85,52,126,25,2,32,10,110,149,183,248,230,59,47,171,11,239,136,199,71,222,106,56,125,6,53,27,229,189,195,75,44,31,154,234,111,221,40]),b=Uint8Array.from([224,30,0,253,73,1,71,48,69,2,33,0,255,114,120,71,68,84,49,229,113,205,42,13,157,180,42,126,182,46,55,135,123,155,242,14,106,150,88,66,85,52,126,25,2,32,10,110,149,183,248,230,59,47,171,11,239,136,199,71,222,106,56,125,6,53,27,229,189,195,75,44,31,154,234,111,221,40]),i=Uint8Array.from([224,30,0,254,89,15,82,101,99,101,105,118,101,32,109,105,110,105,109,117,109,1,71,48,69,2,33,0,165,157,196,121,168,56,168,19,144,156,20,10,21,230,182,91,197,140,86,51,40,75,249,115,196,54,222,90,89,38,52,226,2,32,30,3,143,199,153,93,147,159,204,213,70,228,200,94,121,60,10,212,81,33,110,54,164,237,252,123,206,91,226,120,8,203]),p=Uint8Array.from([224,30,0,251,86,7,83,112,101,110,100,101,114,1,2,3,1,0,2,71,48,69,2,33,0,232,71,22,110,96,248,81,227,200,209,244,65,57,129,24,152,204,208,211,160,58,237,108,119,248,195,153,56,19,244,121,210,2,32,49,254,107,106,87,75,86,197,16,64,3,207,7,144,13,17,255,175,48,61,192,22,218,76,28,61,24,70,99,218,143,106]),l=Uint8Array.from([224,30,0,252,88,15,65,112,112,114,111,118,97,108,32,101,120,112,105,114,101,71,48,69,2,33,0,232,71,22,110,96,248,81,227,200,209,244,65,57,129,24,152,204,208,211,160,58,237,108,119,248,195,153,56,19,244,121,210,2,32,49,254,107,106,87,75,86,197,16,64,3,207,7,144,13,17,255,175,48,61,192,22,218,76,28,61,24,70,99,218,143,106]),A=Uint8Array.from([224,30,0,1,17,16,116,111,46,91,93,46,119,97,108,108,101,116,115,46,91,93]);describe("SendEIP712FilteringCommand",()=>{describe("getApdu",()=>{it("Activate APDU",()=>{const e={type:x.Eip712FilterType.Activation},a=new x.SendEIP712FilteringCommand(e).getApdu();expect(a.getRawApdu()).toStrictEqual(s)}),it("Discarded path APDU",()=>{const e={type:x.Eip712FilterType.DiscardedPath,path:"to.[].wallets.[]"},a=new x.SendEIP712FilteringCommand(e).getApdu();expect(a.getRawApdu()).toStrictEqual(A)}),it("Message info APDU",()=>{const e={type:x.Eip712FilterType.MessageInfo,displayName:"1inch Order",filtersCount:6,signature:"30440220295e0aeb17ca0929b2a94c324d67d0b5528aba268177f3ac297b563141e0002702203ac360d9fd0c9c0c12279d1e73bea5d549a1e8141f454d88fbe1e8ef970e6802"},a=new x.SendEIP712FilteringCommand(e).getApdu();expect(a.getRawApdu()).toStrictEqual(o)}),it("Raw APDU",()=>{const e={type:x.Eip712FilterType.Raw,discarded:!1,displayName:"From",signature:"3045022100b820e4dfb1a0cde6dc97d9a34eebb1a4eef0b226262e6788118ab3c7fb79fe3502202d426a388b4c3a8096b3f84412a702ea537770e61ee0727ec1b710c1da520c44"},a=new x.SendEIP712FilteringCommand(e).getApdu();expect(a.getRawApdu()).toStrictEqual(t)}),it("Calldata info APDU",()=>{const e={type:x.Eip712FilterType.CalldataInfo,discarded:!1,calldataIndex:3,valueFlag:!0,calleeFlag:x.CalldataParamPresence.Present,chainIdFlag:!1,selectorFlag:!0,amountFlag:!1,spenderFlag:x.CalldataParamPresence.VerifyingContract,signature:"3045022100ff727847445431e571cd2a0d9db42a7eb62e37877b9bf20e6a96584255347e1902200a6e95b7f8e63b2fab0bef88c747de6a387d06351be5bdc34b2c1f9aea6fdd28"},a=new x.SendEIP712FilteringCommand(e).getApdu();expect(a.getRawApdu()).toStrictEqual(r)}),it.each([{name:"spender",type:x.Eip712FilterType.CalldataSpender,cmd:244},{name:"amount",type:x.Eip712FilterType.CalldataAmount,cmd:245},{name:"selector",type:x.Eip712FilterType.CalldataSelector,cmd:246},{name:"chainId",type:x.Eip712FilterType.CalldataChainId,cmd:247},{name:"callee",type:x.Eip712FilterType.CalldataCallee,cmd:248},{name:"value",type:x.Eip712FilterType.CalldataValue,cmd:249}])("Calldata APDU $name",({type:e,cmd:d})=>{const a={type:e,discarded:!1,calldataIndex:7,signature:"3045022100ff727847445431e571cd2a0d9db42a7eb62e37877b9bf20e6a96584255347e1902200a6e95b7f8e63b2fab0bef88c747de6a387d06351be5bdc34b2c1f9aea6fdd28"},n=Uint8Array.from(m);n[3]=d;const f=new x.SendEIP712FilteringCommand(a).getApdu();expect(f.getRawApdu()).toStrictEqual(n)}),it("Token APDU",()=>{const e={type:x.Eip712FilterType.Token,discarded:!1,tokenIndex:1,signature:"3045022100ff727847445431e571cd2a0d9db42a7eb62e37877b9bf20e6a96584255347e1902200a6e95b7f8e63b2fab0bef88c747de6a387d06351be5bdc34b2c1f9aea6fdd28"},a=new x.SendEIP712FilteringCommand(e).getApdu();expect(a.getRawApdu()).toStrictEqual(b)}),it("Amount APDU",()=>{const e={type:x.Eip712FilterType.Amount,discarded:!1,displayName:"Receive minimum",tokenIndex:1,signature:"3045022100a59dc479a838a813909c140a15e6b65bc58c5633284bf973c436de5a592634e202201e038fc7995d939fccd546e4c85e793c0ad451216e36a4edfc7bce5be27808cb"},a=new x.SendEIP712FilteringCommand(e).getApdu();expect(a.getRawApdu()).toStrictEqual(i)}),it("Date-time APDU",()=>{const e={type:x.Eip712FilterType.Datetime,discarded:!1,displayName:"Approval expire",signature:"3045022100e847166e60f851e3c8d1f44139811898ccd0d3a03aed6c77f8c3993813f479d2022031fe6b6a574b56c5104003cf07900d11ffaf303dc016da4c1c3d184663da8f6a"},a=new x.SendEIP712FilteringCommand(e).getApdu();expect(a.getRawApdu()).toStrictEqual(l)}),it("Trusted name APDU",()=>{const e={type:x.Eip712FilterType.TrustedName,discarded:!1,displayName:"Spender",typesAndSourcesPayload:"010203010002",signature:"3045022100e847166e60f851e3c8d1f44139811898ccd0d3a03aed6c77f8c3993813f479d2022031fe6b6a574b56c5104003cf07900d11ffaf303dc016da4c1c3d184663da8f6a"},a=new x.SendEIP712FilteringCommand(e).getApdu();expect(a.getRawApdu()).toStrictEqual(p)}),it("Discarded filter",()=>{const e={type:x.Eip712FilterType.Raw,discarded:!0,displayName:"From",signature:"3045022100b820e4dfb1a0cde6dc97d9a34eebb1a4eef0b226262e6788118ab3c7fb79fe3502202d426a388b4c3a8096b3f84412a702ea537770e61ee0727ec1b710c1da520c44"},a=new x.SendEIP712FilteringCommand(e).getApdu();expect(a.getRawApdu()).toStrictEqual(Uint8Array.from([...t.slice(0,2),1,...t.slice(3)]))})}),describe("parseResponse",()=>{it("should return an error if the response status code is invalid",()=>{const e={statusCode:Buffer.from([106,128]),data:Buffer.from([])},a=new x.SendEIP712FilteringCommand({type:x.Eip712FilterType.Activation}).parseResponse(e);expect((0,c.isSuccessCommandResult)(a)).toBe(!1)}),it("should parse the response",()=>{const e={statusCode:Buffer.from([144,0]),data:Buffer.from([])},d=new x.SendEIP712FilteringCommand({type:x.Eip712FilterType.Activation});expect(d.parseResponse(e)).toStrictEqual((0,c.CommandResultFactory)({data:void 0}))})})});
|
|
2
2
|
//# sourceMappingURL=SendEIP712FilteringCommand.test.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/command/SendEIP712FilteringCommand.test.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type ApduResponse,\n CommandResultFactory,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport {\n Eip712FilterType,\n SendEIP712FilteringCommand,\n type SendEIP712FilteringCommandArgs,\n} from \"./SendEIP712FilteringCommand\";\n\nconst ACTIVATE_APDU = Uint8Array.from([0xe0, 0x1e, 0x00, 0x00, 0x00]);\nconst MESSAGE_INFO_APDU = Uint8Array.from([\n 0xe0, 0x1e, 0x00, 0x0f, 0x54, 0x0b, 0x31, 0x69, 0x6e, 0x63, 0x68, 0x20, 0x4f,\n 0x72, 0x64, 0x65, 0x72, 0x06, 0x46, 0x30, 0x44, 0x02, 0x20, 0x29, 0x5e, 0x0a,\n 0xeb, 0x17, 0xca, 0x09, 0x29, 0xb2, 0xa9, 0x4c, 0x32, 0x4d, 0x67, 0xd0, 0xb5,\n 0x52, 0x8a, 0xba, 0x26, 0x81, 0x77, 0xf3, 0xac, 0x29, 0x7b, 0x56, 0x31, 0x41,\n 0xe0, 0x00, 0x27, 0x02, 0x20, 0x3a, 0xc3, 0x60, 0xd9, 0xfd, 0x0c, 0x9c, 0x0c,\n 0x12, 0x27, 0x9d, 0x1e, 0x73, 0xbe, 0xa5, 0xd5, 0x49, 0xa1, 0xe8, 0x14, 0x1f,\n 0x45, 0x4d, 0x88, 0xfb, 0xe1, 0xe8, 0xef, 0x97, 0x0e, 0x68, 0x02,\n]);\nconst RAW_APDU = Uint8Array.from([\n 0xe0, 0x1e, 0x00, 0xff, 0x4d, 0x04, 0x46, 0x72, 0x6f, 0x6d, 0x47, 0x30, 0x45,\n 0x02, 0x21, 0x00, 0xb8, 0x20, 0xe4, 0xdf, 0xb1, 0xa0, 0xcd, 0xe6, 0xdc, 0x97,\n 0xd9, 0xa3, 0x4e, 0xeb, 0xb1, 0xa4, 0xee, 0xf0, 0xb2, 0x26, 0x26, 0x2e, 0x67,\n 0x88, 0x11, 0x8a, 0xb3, 0xc7, 0xfb, 0x79, 0xfe, 0x35, 0x02, 0x20, 0x2d, 0x42,\n 0x6a, 0x38, 0x8b, 0x4c, 0x3a, 0x80, 0x96, 0xb3, 0xf8, 0x44, 0x12, 0xa7, 0x02,\n 0xea, 0x53, 0x77, 0x70, 0xe6, 0x1e, 0xe0, 0x72, 0x7e, 0xc1, 0xb7, 0x10, 0xc1,\n 0xda, 0x52, 0x0c, 0x44,\n]);\nconst TOKEN_APDU = Uint8Array.from([\n 0xe0, 0x1e, 0x00, 0xfd, 0x49, 0x01, 0x47, 0x30, 0x45, 0x02, 0x21, 0x00, 0xff,\n 0x72, 0x78, 0x47, 0x44, 0x54, 0x31, 0xe5, 0x71, 0xcd, 0x2a, 0x0d, 0x9d, 0xb4,\n 0x2a, 0x7e, 0xb6, 0x2e, 0x37, 0x87, 0x7b, 0x9b, 0xf2, 0x0e, 0x6a, 0x96, 0x58,\n 0x42, 0x55, 0x34, 0x7e, 0x19, 0x02, 0x20, 0x0a, 0x6e, 0x95, 0xb7, 0xf8, 0xe6,\n 0x3b, 0x2f, 0xab, 0x0b, 0xef, 0x88, 0xc7, 0x47, 0xde, 0x6a, 0x38, 0x7d, 0x06,\n 0x35, 0x1b, 0xe5, 0xbd, 0xc3, 0x4b, 0x2c, 0x1f, 0x9a, 0xea, 0x6f, 0xdd, 0x28,\n]);\nconst AMOUNT_APDU = Uint8Array.from([\n 0xe0, 0x1e, 0x00, 0xfe, 0x59, 0x0f, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65,\n 0x20, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x01, 0x47, 0x30, 0x45, 0x02,\n 0x21, 0x00, 0xa5, 0x9d, 0xc4, 0x79, 0xa8, 0x38, 0xa8, 0x13, 0x90, 0x9c, 0x14,\n 0x0a, 0x15, 0xe6, 0xb6, 0x5b, 0xc5, 0x8c, 0x56, 0x33, 0x28, 0x4b, 0xf9, 0x73,\n 0xc4, 0x36, 0xde, 0x5a, 0x59, 0x26, 0x34, 0xe2, 0x02, 0x20, 0x1e, 0x03, 0x8f,\n 0xc7, 0x99, 0x5d, 0x93, 0x9f, 0xcc, 0xd5, 0x46, 0xe4, 0xc8, 0x5e, 0x79, 0x3c,\n 0x0a, 0xd4, 0x51, 0x21, 0x6e, 0x36, 0xa4, 0xed, 0xfc, 0x7b, 0xce, 0x5b, 0xe2,\n 0x78, 0x08, 0xcb,\n]);\nconst TRUSTED_NAME_APDU = Uint8Array.from([\n 0xe0, 0x1e, 0x00, 0xfb, 0x56, 0x07, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x72,\n 0x01, 0x02, 0x03, 0x01, 0x00, 0x02, 0x47, 0x30, 0x45, 0x02, 0x21, 0x00, 0xe8,\n 0x47, 0x16, 0x6e, 0x60, 0xf8, 0x51, 0xe3, 0xc8, 0xd1, 0xf4, 0x41, 0x39, 0x81,\n 0x18, 0x98, 0xcc, 0xd0, 0xd3, 0xa0, 0x3a, 0xed, 0x6c, 0x77, 0xf8, 0xc3, 0x99,\n 0x38, 0x13, 0xf4, 0x79, 0xd2, 0x02, 0x20, 0x31, 0xfe, 0x6b, 0x6a, 0x57, 0x4b,\n 0x56, 0xc5, 0x10, 0x40, 0x03, 0xcf, 0x07, 0x90, 0x0d, 0x11, 0xff, 0xaf, 0x30,\n 0x3d, 0xc0, 0x16, 0xda, 0x4c, 0x1c, 0x3d, 0x18, 0x46, 0x63, 0xda, 0x8f, 0x6a,\n]);\nconst DATE_TIME_APDU = Uint8Array.from([\n 0xe0, 0x1e, 0x00, 0xfc, 0x58, 0x0f, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61,\n 0x6c, 0x20, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x47, 0x30, 0x45, 0x02, 0x21,\n 0x00, 0xe8, 0x47, 0x16, 0x6e, 0x60, 0xf8, 0x51, 0xe3, 0xc8, 0xd1, 0xf4, 0x41,\n 0x39, 0x81, 0x18, 0x98, 0xcc, 0xd0, 0xd3, 0xa0, 0x3a, 0xed, 0x6c, 0x77, 0xf8,\n 0xc3, 0x99, 0x38, 0x13, 0xf4, 0x79, 0xd2, 0x02, 0x20, 0x31, 0xfe, 0x6b, 0x6a,\n 0x57, 0x4b, 0x56, 0xc5, 0x10, 0x40, 0x03, 0xcf, 0x07, 0x90, 0x0d, 0x11, 0xff,\n 0xaf, 0x30, 0x3d, 0xc0, 0x16, 0xda, 0x4c, 0x1c, 0x3d, 0x18, 0x46, 0x63, 0xda,\n 0x8f, 0x6a,\n]);\nconst DISCARDED_PATH_APDU = Uint8Array.from([\n 0xe0, 0x1e, 0x00, 0x01, 0x11, 0x10, 0x74, 0x6f, 0x2e, 0x5b, 0x5d, 0x2e, 0x77,\n 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x2e, 0x5b, 0x5d,\n]);\n\ndescribe(\"SendEIP712FilteringCommand\", () => {\n describe(\"getApdu\", () => {\n it(\"Activate APDU\", () => {\n // GIVEN\n const args: SendEIP712FilteringCommandArgs = {\n type: Eip712FilterType.Activation,\n };\n // WHEN\n const command = new SendEIP712FilteringCommand(args);\n const apdu = command.getApdu();\n // THEN\n expect(apdu.getRawApdu()).toStrictEqual(ACTIVATE_APDU);\n });\n\n it(\"Discarded path APDU\", () => {\n // GIVEN\n const args: SendEIP712FilteringCommandArgs = {\n type: Eip712FilterType.DiscardedPath,\n path: \"to.[].wallets.[]\",\n };\n // WHEN\n const command = new SendEIP712FilteringCommand(args);\n const apdu = command.getApdu();\n // THEN\n expect(apdu.getRawApdu()).toStrictEqual(DISCARDED_PATH_APDU);\n });\n\n it(\"Message info APDU\", () => {\n // GIVEN\n const args: SendEIP712FilteringCommandArgs = {\n type: Eip712FilterType.MessageInfo,\n displayName: \"1inch Order\",\n filtersCount: 6,\n signature:\n \"30440220295e0aeb17ca0929b2a94c324d67d0b5528aba268177f3ac297b563141e0002702203ac360d9fd0c9c0c12279d1e73bea5d549a1e8141f454d88fbe1e8ef970e6802\",\n };\n // WHEN\n const command = new SendEIP712FilteringCommand(args);\n const apdu = command.getApdu();\n // THEN\n expect(apdu.getRawApdu()).toStrictEqual(MESSAGE_INFO_APDU);\n });\n\n it(\"Raw APDU\", () => {\n // GIVEN\n const args: SendEIP712FilteringCommandArgs = {\n type: Eip712FilterType.Raw,\n discarded: false,\n displayName: \"From\",\n signature:\n \"3045022100b820e4dfb1a0cde6dc97d9a34eebb1a4eef0b226262e6788118ab3c7fb79fe3502202d426a388b4c3a8096b3f84412a702ea537770e61ee0727ec1b710c1da520c44\",\n };\n // WHEN\n const command = new SendEIP712FilteringCommand(args);\n const apdu = command.getApdu();\n // THEN\n expect(apdu.getRawApdu()).toStrictEqual(RAW_APDU);\n });\n\n it(\"Token APDU\", () => {\n // GIVEN\n const args: SendEIP712FilteringCommandArgs = {\n type: Eip712FilterType.Token,\n discarded: false,\n tokenIndex: 1,\n signature:\n \"3045022100ff727847445431e571cd2a0d9db42a7eb62e37877b9bf20e6a96584255347e1902200a6e95b7f8e63b2fab0bef88c747de6a387d06351be5bdc34b2c1f9aea6fdd28\",\n };\n // WHEN\n const command = new SendEIP712FilteringCommand(args);\n const apdu = command.getApdu();\n // THEN\n expect(apdu.getRawApdu()).toStrictEqual(TOKEN_APDU);\n });\n\n it(\"Amount APDU\", () => {\n // GIVEN\n const args: SendEIP712FilteringCommandArgs = {\n type: Eip712FilterType.Amount,\n discarded: false,\n displayName: \"Receive minimum\",\n tokenIndex: 1,\n signature:\n \"3045022100a59dc479a838a813909c140a15e6b65bc58c5633284bf973c436de5a592634e202201e038fc7995d939fccd546e4c85e793c0ad451216e36a4edfc7bce5be27808cb\",\n };\n // WHEN\n const command = new SendEIP712FilteringCommand(args);\n const apdu = command.getApdu();\n // THEN\n expect(apdu.getRawApdu()).toStrictEqual(AMOUNT_APDU);\n });\n\n it(\"Date-time APDU\", () => {\n // GIVEN\n const args: SendEIP712FilteringCommandArgs = {\n type: Eip712FilterType.Datetime,\n discarded: false,\n displayName: \"Approval expire\",\n signature:\n \"3045022100e847166e60f851e3c8d1f44139811898ccd0d3a03aed6c77f8c3993813f479d2022031fe6b6a574b56c5104003cf07900d11ffaf303dc016da4c1c3d184663da8f6a\",\n };\n // WHEN\n const command = new SendEIP712FilteringCommand(args);\n const apdu = command.getApdu();\n // THEN\n expect(apdu.getRawApdu()).toStrictEqual(DATE_TIME_APDU);\n });\n\n it(\"Trusted name APDU\", () => {\n // GIVEN\n const args: SendEIP712FilteringCommandArgs = {\n type: Eip712FilterType.TrustedName,\n discarded: false,\n displayName: \"Spender\",\n typesAndSourcesPayload: \"010203010002\",\n signature:\n \"3045022100e847166e60f851e3c8d1f44139811898ccd0d3a03aed6c77f8c3993813f479d2022031fe6b6a574b56c5104003cf07900d11ffaf303dc016da4c1c3d184663da8f6a\",\n };\n // WHEN\n const command = new SendEIP712FilteringCommand(args);\n const apdu = command.getApdu();\n // THEN\n expect(apdu.getRawApdu()).toStrictEqual(TRUSTED_NAME_APDU);\n });\n\n it(\"Discarded filter\", () => {\n // GIVEN\n const args: SendEIP712FilteringCommandArgs = {\n type: Eip712FilterType.Raw,\n discarded: true,\n displayName: \"From\",\n signature:\n \"3045022100b820e4dfb1a0cde6dc97d9a34eebb1a4eef0b226262e6788118ab3c7fb79fe3502202d426a388b4c3a8096b3f84412a702ea537770e61ee0727ec1b710c1da520c44\",\n };\n // WHEN\n const command = new SendEIP712FilteringCommand(args);\n const apdu = command.getApdu();\n // THEN\n expect(apdu.getRawApdu()).toStrictEqual(\n Uint8Array.from([...RAW_APDU.slice(0, 2), 0x01, ...RAW_APDU.slice(3)]),\n );\n });\n });\n\n describe(\"parseResponse\", () => {\n it(\"should return an error if the response status code is invalid\", () => {\n // GIVEN\n const response: ApduResponse = {\n statusCode: Buffer.from([0x6a, 0x80]), // Invalid status code\n data: Buffer.from([]),\n };\n // WHEN\n const command = new SendEIP712FilteringCommand({\n type: Eip712FilterType.Activation,\n });\n // THEN\n const result = command.parseResponse(response);\n expect(isSuccessCommandResult(result)).toBe(false);\n });\n\n it(\"should parse the response\", () => {\n // GIVEN\n const response: ApduResponse = {\n statusCode: Buffer.from([0x90, 0x00]), // Success status code\n data: Buffer.from([]),\n };\n // WHEN\n const command = new SendEIP712FilteringCommand({\n type: Eip712FilterType.Activation,\n });\n // THEN\n expect(command.parseResponse(response)).toStrictEqual(\n CommandResultFactory({ data: undefined }),\n );\n });\n });\n});\n"],
|
|
5
|
-
"mappings": "aAAA,IAAAA,EAIO,2CAEPC,
|
|
6
|
-
"names": ["import_device_management_kit", "import_SendEIP712FilteringCommand", "ACTIVATE_APDU", "MESSAGE_INFO_APDU", "RAW_APDU", "TOKEN_APDU", "AMOUNT_APDU", "TRUSTED_NAME_APDU", "DATE_TIME_APDU", "DISCARDED_PATH_APDU", "args", "apdu", "response", "result", "command"]
|
|
4
|
+
"sourcesContent": ["import {\n type ApduResponse,\n CommandResultFactory,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport {\n CalldataParamPresence,\n Eip712FilterType,\n SendEIP712FilteringCommand,\n type SendEIP712FilteringCommandArgs,\n} from \"./SendEIP712FilteringCommand\";\n\nconst ACTIVATE_APDU = Uint8Array.from([0xe0, 0x1e, 0x00, 0x00, 0x00]);\nconst MESSAGE_INFO_APDU = Uint8Array.from([\n 0xe0, 0x1e, 0x00, 0x0f, 0x54, 0x0b, 0x31, 0x69, 0x6e, 0x63, 0x68, 0x20, 0x4f,\n 0x72, 0x64, 0x65, 0x72, 0x06, 0x46, 0x30, 0x44, 0x02, 0x20, 0x29, 0x5e, 0x0a,\n 0xeb, 0x17, 0xca, 0x09, 0x29, 0xb2, 0xa9, 0x4c, 0x32, 0x4d, 0x67, 0xd0, 0xb5,\n 0x52, 0x8a, 0xba, 0x26, 0x81, 0x77, 0xf3, 0xac, 0x29, 0x7b, 0x56, 0x31, 0x41,\n 0xe0, 0x00, 0x27, 0x02, 0x20, 0x3a, 0xc3, 0x60, 0xd9, 0xfd, 0x0c, 0x9c, 0x0c,\n 0x12, 0x27, 0x9d, 0x1e, 0x73, 0xbe, 0xa5, 0xd5, 0x49, 0xa1, 0xe8, 0x14, 0x1f,\n 0x45, 0x4d, 0x88, 0xfb, 0xe1, 0xe8, 0xef, 0x97, 0x0e, 0x68, 0x02,\n]);\nconst RAW_APDU = Uint8Array.from([\n 0xe0, 0x1e, 0x00, 0xff, 0x4d, 0x04, 0x46, 0x72, 0x6f, 0x6d, 0x47, 0x30, 0x45,\n 0x02, 0x21, 0x00, 0xb8, 0x20, 0xe4, 0xdf, 0xb1, 0xa0, 0xcd, 0xe6, 0xdc, 0x97,\n 0xd9, 0xa3, 0x4e, 0xeb, 0xb1, 0xa4, 0xee, 0xf0, 0xb2, 0x26, 0x26, 0x2e, 0x67,\n 0x88, 0x11, 0x8a, 0xb3, 0xc7, 0xfb, 0x79, 0xfe, 0x35, 0x02, 0x20, 0x2d, 0x42,\n 0x6a, 0x38, 0x8b, 0x4c, 0x3a, 0x80, 0x96, 0xb3, 0xf8, 0x44, 0x12, 0xa7, 0x02,\n 0xea, 0x53, 0x77, 0x70, 0xe6, 0x1e, 0xe0, 0x72, 0x7e, 0xc1, 0xb7, 0x10, 0xc1,\n 0xda, 0x52, 0x0c, 0x44,\n]);\nconst CALLDATA_INFO_APDU = Uint8Array.from([\n 0xe0, 0x1e, 0x00, 0xfa, 0x4f, 0x03, 0x01, 0x01, 0x00, 0x01, 0x00, 0x02, 0x47,\n 0x30, 0x45, 0x02, 0x21, 0x00, 0xff, 0x72, 0x78, 0x47, 0x44, 0x54, 0x31, 0xe5,\n 0x71, 0xcd, 0x2a, 0x0d, 0x9d, 0xb4, 0x2a, 0x7e, 0xb6, 0x2e, 0x37, 0x87, 0x7b,\n 0x9b, 0xf2, 0x0e, 0x6a, 0x96, 0x58, 0x42, 0x55, 0x34, 0x7e, 0x19, 0x02, 0x20,\n 0x0a, 0x6e, 0x95, 0xb7, 0xf8, 0xe6, 0x3b, 0x2f, 0xab, 0x0b, 0xef, 0x88, 0xc7,\n 0x47, 0xde, 0x6a, 0x38, 0x7d, 0x06, 0x35, 0x1b, 0xe5, 0xbd, 0xc3, 0x4b, 0x2c,\n 0x1f, 0x9a, 0xea, 0x6f, 0xdd, 0x28,\n]);\nconst CALLDATA_VALUE_APDU = Uint8Array.from([\n 0xe0, 0x1e, 0x00, 0xf9, 0x49, 0x07, 0x47, 0x30, 0x45, 0x02, 0x21, 0x00, 0xff,\n 0x72, 0x78, 0x47, 0x44, 0x54, 0x31, 0xe5, 0x71, 0xcd, 0x2a, 0x0d, 0x9d, 0xb4,\n 0x2a, 0x7e, 0xb6, 0x2e, 0x37, 0x87, 0x7b, 0x9b, 0xf2, 0x0e, 0x6a, 0x96, 0x58,\n 0x42, 0x55, 0x34, 0x7e, 0x19, 0x02, 0x20, 0x0a, 0x6e, 0x95, 0xb7, 0xf8, 0xe6,\n 0x3b, 0x2f, 0xab, 0x0b, 0xef, 0x88, 0xc7, 0x47, 0xde, 0x6a, 0x38, 0x7d, 0x06,\n 0x35, 0x1b, 0xe5, 0xbd, 0xc3, 0x4b, 0x2c, 0x1f, 0x9a, 0xea, 0x6f, 0xdd, 0x28,\n]);\nconst TOKEN_APDU = Uint8Array.from([\n 0xe0, 0x1e, 0x00, 0xfd, 0x49, 0x01, 0x47, 0x30, 0x45, 0x02, 0x21, 0x00, 0xff,\n 0x72, 0x78, 0x47, 0x44, 0x54, 0x31, 0xe5, 0x71, 0xcd, 0x2a, 0x0d, 0x9d, 0xb4,\n 0x2a, 0x7e, 0xb6, 0x2e, 0x37, 0x87, 0x7b, 0x9b, 0xf2, 0x0e, 0x6a, 0x96, 0x58,\n 0x42, 0x55, 0x34, 0x7e, 0x19, 0x02, 0x20, 0x0a, 0x6e, 0x95, 0xb7, 0xf8, 0xe6,\n 0x3b, 0x2f, 0xab, 0x0b, 0xef, 0x88, 0xc7, 0x47, 0xde, 0x6a, 0x38, 0x7d, 0x06,\n 0x35, 0x1b, 0xe5, 0xbd, 0xc3, 0x4b, 0x2c, 0x1f, 0x9a, 0xea, 0x6f, 0xdd, 0x28,\n]);\nconst AMOUNT_APDU = Uint8Array.from([\n 0xe0, 0x1e, 0x00, 0xfe, 0x59, 0x0f, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65,\n 0x20, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x01, 0x47, 0x30, 0x45, 0x02,\n 0x21, 0x00, 0xa5, 0x9d, 0xc4, 0x79, 0xa8, 0x38, 0xa8, 0x13, 0x90, 0x9c, 0x14,\n 0x0a, 0x15, 0xe6, 0xb6, 0x5b, 0xc5, 0x8c, 0x56, 0x33, 0x28, 0x4b, 0xf9, 0x73,\n 0xc4, 0x36, 0xde, 0x5a, 0x59, 0x26, 0x34, 0xe2, 0x02, 0x20, 0x1e, 0x03, 0x8f,\n 0xc7, 0x99, 0x5d, 0x93, 0x9f, 0xcc, 0xd5, 0x46, 0xe4, 0xc8, 0x5e, 0x79, 0x3c,\n 0x0a, 0xd4, 0x51, 0x21, 0x6e, 0x36, 0xa4, 0xed, 0xfc, 0x7b, 0xce, 0x5b, 0xe2,\n 0x78, 0x08, 0xcb,\n]);\nconst TRUSTED_NAME_APDU = Uint8Array.from([\n 0xe0, 0x1e, 0x00, 0xfb, 0x56, 0x07, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x72,\n 0x01, 0x02, 0x03, 0x01, 0x00, 0x02, 0x47, 0x30, 0x45, 0x02, 0x21, 0x00, 0xe8,\n 0x47, 0x16, 0x6e, 0x60, 0xf8, 0x51, 0xe3, 0xc8, 0xd1, 0xf4, 0x41, 0x39, 0x81,\n 0x18, 0x98, 0xcc, 0xd0, 0xd3, 0xa0, 0x3a, 0xed, 0x6c, 0x77, 0xf8, 0xc3, 0x99,\n 0x38, 0x13, 0xf4, 0x79, 0xd2, 0x02, 0x20, 0x31, 0xfe, 0x6b, 0x6a, 0x57, 0x4b,\n 0x56, 0xc5, 0x10, 0x40, 0x03, 0xcf, 0x07, 0x90, 0x0d, 0x11, 0xff, 0xaf, 0x30,\n 0x3d, 0xc0, 0x16, 0xda, 0x4c, 0x1c, 0x3d, 0x18, 0x46, 0x63, 0xda, 0x8f, 0x6a,\n]);\nconst DATE_TIME_APDU = Uint8Array.from([\n 0xe0, 0x1e, 0x00, 0xfc, 0x58, 0x0f, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61,\n 0x6c, 0x20, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x47, 0x30, 0x45, 0x02, 0x21,\n 0x00, 0xe8, 0x47, 0x16, 0x6e, 0x60, 0xf8, 0x51, 0xe3, 0xc8, 0xd1, 0xf4, 0x41,\n 0x39, 0x81, 0x18, 0x98, 0xcc, 0xd0, 0xd3, 0xa0, 0x3a, 0xed, 0x6c, 0x77, 0xf8,\n 0xc3, 0x99, 0x38, 0x13, 0xf4, 0x79, 0xd2, 0x02, 0x20, 0x31, 0xfe, 0x6b, 0x6a,\n 0x57, 0x4b, 0x56, 0xc5, 0x10, 0x40, 0x03, 0xcf, 0x07, 0x90, 0x0d, 0x11, 0xff,\n 0xaf, 0x30, 0x3d, 0xc0, 0x16, 0xda, 0x4c, 0x1c, 0x3d, 0x18, 0x46, 0x63, 0xda,\n 0x8f, 0x6a,\n]);\nconst DISCARDED_PATH_APDU = Uint8Array.from([\n 0xe0, 0x1e, 0x00, 0x01, 0x11, 0x10, 0x74, 0x6f, 0x2e, 0x5b, 0x5d, 0x2e, 0x77,\n 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x2e, 0x5b, 0x5d,\n]);\n\ndescribe(\"SendEIP712FilteringCommand\", () => {\n describe(\"getApdu\", () => {\n it(\"Activate APDU\", () => {\n // GIVEN\n const args: SendEIP712FilteringCommandArgs = {\n type: Eip712FilterType.Activation,\n };\n // WHEN\n const command = new SendEIP712FilteringCommand(args);\n const apdu = command.getApdu();\n // THEN\n expect(apdu.getRawApdu()).toStrictEqual(ACTIVATE_APDU);\n });\n\n it(\"Discarded path APDU\", () => {\n // GIVEN\n const args: SendEIP712FilteringCommandArgs = {\n type: Eip712FilterType.DiscardedPath,\n path: \"to.[].wallets.[]\",\n };\n // WHEN\n const command = new SendEIP712FilteringCommand(args);\n const apdu = command.getApdu();\n // THEN\n expect(apdu.getRawApdu()).toStrictEqual(DISCARDED_PATH_APDU);\n });\n\n it(\"Message info APDU\", () => {\n // GIVEN\n const args: SendEIP712FilteringCommandArgs = {\n type: Eip712FilterType.MessageInfo,\n displayName: \"1inch Order\",\n filtersCount: 6,\n signature:\n \"30440220295e0aeb17ca0929b2a94c324d67d0b5528aba268177f3ac297b563141e0002702203ac360d9fd0c9c0c12279d1e73bea5d549a1e8141f454d88fbe1e8ef970e6802\",\n };\n // WHEN\n const command = new SendEIP712FilteringCommand(args);\n const apdu = command.getApdu();\n // THEN\n expect(apdu.getRawApdu()).toStrictEqual(MESSAGE_INFO_APDU);\n });\n\n it(\"Raw APDU\", () => {\n // GIVEN\n const args: SendEIP712FilteringCommandArgs = {\n type: Eip712FilterType.Raw,\n discarded: false,\n displayName: \"From\",\n signature:\n \"3045022100b820e4dfb1a0cde6dc97d9a34eebb1a4eef0b226262e6788118ab3c7fb79fe3502202d426a388b4c3a8096b3f84412a702ea537770e61ee0727ec1b710c1da520c44\",\n };\n // WHEN\n const command = new SendEIP712FilteringCommand(args);\n const apdu = command.getApdu();\n // THEN\n expect(apdu.getRawApdu()).toStrictEqual(RAW_APDU);\n });\n\n it(\"Calldata info APDU\", () => {\n // GIVEN\n const args: SendEIP712FilteringCommandArgs = {\n type: Eip712FilterType.CalldataInfo,\n discarded: false,\n calldataIndex: 3,\n valueFlag: true,\n calleeFlag: CalldataParamPresence.Present,\n chainIdFlag: false,\n selectorFlag: true,\n amountFlag: false,\n spenderFlag: CalldataParamPresence.VerifyingContract,\n signature:\n \"3045022100ff727847445431e571cd2a0d9db42a7eb62e37877b9bf20e6a96584255347e1902200a6e95b7f8e63b2fab0bef88c747de6a387d06351be5bdc34b2c1f9aea6fdd28\",\n };\n // WHEN\n const command = new SendEIP712FilteringCommand(args);\n const apdu = command.getApdu();\n // THEN\n expect(apdu.getRawApdu()).toStrictEqual(CALLDATA_INFO_APDU);\n });\n\n it.each([\n { name: \"spender\", type: Eip712FilterType.CalldataSpender, cmd: 0xf4 },\n { name: \"amount\", type: Eip712FilterType.CalldataAmount, cmd: 0xf5 },\n { name: \"selector\", type: Eip712FilterType.CalldataSelector, cmd: 0xf6 },\n { name: \"chainId\", type: Eip712FilterType.CalldataChainId, cmd: 0xf7 },\n { name: \"callee\", type: Eip712FilterType.CalldataCallee, cmd: 0xf8 },\n { name: \"value\", type: Eip712FilterType.CalldataValue, cmd: 0xf9 },\n ])(\"Calldata APDU $name\", ({ type, cmd }) => {\n // GIVEN\n const args: SendEIP712FilteringCommandArgs = {\n type,\n discarded: false,\n calldataIndex: 7,\n signature:\n \"3045022100ff727847445431e571cd2a0d9db42a7eb62e37877b9bf20e6a96584255347e1902200a6e95b7f8e63b2fab0bef88c747de6a387d06351be5bdc34b2c1f9aea6fdd28\",\n } as SendEIP712FilteringCommandArgs;\n const expectedApdu = Uint8Array.from(CALLDATA_VALUE_APDU);\n expectedApdu[3] = cmd;\n // WHEN\n const command = new SendEIP712FilteringCommand(args);\n const apdu = command.getApdu();\n // THEN\n expect(apdu.getRawApdu()).toStrictEqual(expectedApdu);\n });\n\n it(\"Token APDU\", () => {\n // GIVEN\n const args: SendEIP712FilteringCommandArgs = {\n type: Eip712FilterType.Token,\n discarded: false,\n tokenIndex: 1,\n signature:\n \"3045022100ff727847445431e571cd2a0d9db42a7eb62e37877b9bf20e6a96584255347e1902200a6e95b7f8e63b2fab0bef88c747de6a387d06351be5bdc34b2c1f9aea6fdd28\",\n };\n // WHEN\n const command = new SendEIP712FilteringCommand(args);\n const apdu = command.getApdu();\n // THEN\n expect(apdu.getRawApdu()).toStrictEqual(TOKEN_APDU);\n });\n\n it(\"Amount APDU\", () => {\n // GIVEN\n const args: SendEIP712FilteringCommandArgs = {\n type: Eip712FilterType.Amount,\n discarded: false,\n displayName: \"Receive minimum\",\n tokenIndex: 1,\n signature:\n \"3045022100a59dc479a838a813909c140a15e6b65bc58c5633284bf973c436de5a592634e202201e038fc7995d939fccd546e4c85e793c0ad451216e36a4edfc7bce5be27808cb\",\n };\n // WHEN\n const command = new SendEIP712FilteringCommand(args);\n const apdu = command.getApdu();\n // THEN\n expect(apdu.getRawApdu()).toStrictEqual(AMOUNT_APDU);\n });\n\n it(\"Date-time APDU\", () => {\n // GIVEN\n const args: SendEIP712FilteringCommandArgs = {\n type: Eip712FilterType.Datetime,\n discarded: false,\n displayName: \"Approval expire\",\n signature:\n \"3045022100e847166e60f851e3c8d1f44139811898ccd0d3a03aed6c77f8c3993813f479d2022031fe6b6a574b56c5104003cf07900d11ffaf303dc016da4c1c3d184663da8f6a\",\n };\n // WHEN\n const command = new SendEIP712FilteringCommand(args);\n const apdu = command.getApdu();\n // THEN\n expect(apdu.getRawApdu()).toStrictEqual(DATE_TIME_APDU);\n });\n\n it(\"Trusted name APDU\", () => {\n // GIVEN\n const args: SendEIP712FilteringCommandArgs = {\n type: Eip712FilterType.TrustedName,\n discarded: false,\n displayName: \"Spender\",\n typesAndSourcesPayload: \"010203010002\",\n signature:\n \"3045022100e847166e60f851e3c8d1f44139811898ccd0d3a03aed6c77f8c3993813f479d2022031fe6b6a574b56c5104003cf07900d11ffaf303dc016da4c1c3d184663da8f6a\",\n };\n // WHEN\n const command = new SendEIP712FilteringCommand(args);\n const apdu = command.getApdu();\n // THEN\n expect(apdu.getRawApdu()).toStrictEqual(TRUSTED_NAME_APDU);\n });\n\n it(\"Discarded filter\", () => {\n // GIVEN\n const args: SendEIP712FilteringCommandArgs = {\n type: Eip712FilterType.Raw,\n discarded: true,\n displayName: \"From\",\n signature:\n \"3045022100b820e4dfb1a0cde6dc97d9a34eebb1a4eef0b226262e6788118ab3c7fb79fe3502202d426a388b4c3a8096b3f84412a702ea537770e61ee0727ec1b710c1da520c44\",\n };\n // WHEN\n const command = new SendEIP712FilteringCommand(args);\n const apdu = command.getApdu();\n // THEN\n expect(apdu.getRawApdu()).toStrictEqual(\n Uint8Array.from([...RAW_APDU.slice(0, 2), 0x01, ...RAW_APDU.slice(3)]),\n );\n });\n });\n\n describe(\"parseResponse\", () => {\n it(\"should return an error if the response status code is invalid\", () => {\n // GIVEN\n const response: ApduResponse = {\n statusCode: Buffer.from([0x6a, 0x80]), // Invalid status code\n data: Buffer.from([]),\n };\n // WHEN\n const command = new SendEIP712FilteringCommand({\n type: Eip712FilterType.Activation,\n });\n // THEN\n const result = command.parseResponse(response);\n expect(isSuccessCommandResult(result)).toBe(false);\n });\n\n it(\"should parse the response\", () => {\n // GIVEN\n const response: ApduResponse = {\n statusCode: Buffer.from([0x90, 0x00]), // Success status code\n data: Buffer.from([]),\n };\n // WHEN\n const command = new SendEIP712FilteringCommand({\n type: Eip712FilterType.Activation,\n });\n // THEN\n expect(command.parseResponse(response)).toStrictEqual(\n CommandResultFactory({ data: undefined }),\n );\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_device_management_kit", "import_SendEIP712FilteringCommand", "ACTIVATE_APDU", "MESSAGE_INFO_APDU", "RAW_APDU", "CALLDATA_INFO_APDU", "CALLDATA_VALUE_APDU", "TOKEN_APDU", "AMOUNT_APDU", "TRUSTED_NAME_APDU", "DATE_TIME_APDU", "DISCARDED_PATH_APDU", "args", "apdu", "type", "cmd", "expectedApdu", "response", "result", "command"]
|
|
7
7
|
}
|
package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var l=Object.defineProperty;var
|
|
1
|
+
"use strict";var l=Object.defineProperty;var k=Object.getOwnPropertyDescriptor;var _=Object.getOwnPropertyNames;var f=Object.prototype.hasOwnProperty;var v=(o,r)=>{for(var p in r)l(o,p,{get:r[p],enumerable:!0})},D=(o,r,p,c)=>{if(r&&typeof r=="object"||typeof r=="function")for(let s of _(r))!f.call(o,s)&&s!==p&&l(o,s,{get:()=>r[s],enumerable:!(c=k(r,s))||c.enumerable});return o};var P=o=>D(l({},"__esModule",{value:!0}),o);var O={};v(O,{SignTransactionDeviceAction:()=>b});module.exports=P(O);var e=require("@ledgerhq/device-management-kit"),u=require("purify-ts"),n=require("xstate"),i=require("../../../../api/app-binder/SignTransactionDeviceActionTypes"),T=require("../../../../api/model/ClearSigningType"),C=require("../../../app-binder/command/GetAppConfigurationCommand"),m=require("../../../app-binder/command/Web3CheckOptInCommand"),y=require("../../../app-binder/task/BuildFullContextsTask"),A=require("../../../app-binder/task/ParseTransactionTask"),h=require("../../../app-binder/task/ProvideTransactionContextsTask"),I=require("../../../app-binder/task/SendSignTransactionTask"),E=require("../../../shared/utils/ApplicationChecker");class b extends e.XStateDeviceAction{makeStateMachine(r){const{getAppConfig:p,web3CheckOptIn:c,parseTransaction:s,buildContexts:g,signTransaction:d,provideContexts:S}=this.extractDependencies(r);return(0,n.setup)({types:{input:{},context:{},output:{}},actors:{openAppStateMachine:new e.OpenAppDeviceAction({input:{appName:"Ethereum"}}).makeStateMachine(r),getAppConfig:(0,n.fromPromise)(p),web3CheckOptIn:(0,n.fromPromise)(c),parseTransaction:(0,n.fromPromise)(s),buildContexts:(0,n.fromPromise)(g),provideContexts:(0,n.fromPromise)(S),signTransaction:(0,n.fromPromise)(d)},guards:{noInternalError:({context:t})=>t._internalState.error===null,notRefusedByUser:({context:t})=>t._internalState.error!==null&&(!("errorCode"in t._internalState.error)||t._internalState.error.errorCode!=="6985"),isWeb3ChecksSupported:({context:t})=>new E.ApplicationChecker(r.getDeviceSessionState(),t._internalState.appConfig).withMinVersionExclusive("1.15.0").excludeDeviceModel(e.DeviceModelId.NANO_S).excludeDeviceModel(e.DeviceModelId.NANO_SP).excludeDeviceModel(e.DeviceModelId.NANO_X).check(),shouldOptIn:({context:t})=>!t._internalState.appConfig.web3ChecksEnabled&&!t._internalState.appConfig.web3ChecksOptIn,skipOpenApp:({context:t})=>!!t.input.options.skipOpenApp},actions:{assignErrorFromEvent:(0,n.assign)({_internalState:t=>({...t.context._internalState,error:t.event.error})})}}).createMachine({id:"SignTransactionDeviceAction",initial:"InitialState",context:({input:t})=>({input:t,intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:i.SignTransactionDAStep.OPEN_APP},_internalState:{error:null,appConfig:null,subset:null,contexts:[],clearSigningType:null,transactionType:null,signature:null}}),states:{InitialState:{always:[{target:"GetAppConfig",guard:"skipOpenApp"},"OpenAppDeviceAction"]},OpenAppDeviceAction:{invoke:{id:"openAppStateMachine",input:{appName:"Ethereum"},src:"openAppStateMachine",onSnapshot:{actions:(0,n.assign)({intermediateValue:t=>({...t.event.snapshot.context.intermediateValue,step:i.SignTransactionDAStep.OPEN_APP})})},onDone:{actions:(0,n.assign)({_internalState:t=>t.event.output.caseOf({Right:()=>t.context._internalState,Left:a=>({...t.context._internalState,error:a})})}),target:"CheckOpenAppDeviceActionResult"}}},CheckOpenAppDeviceActionResult:{always:[{target:"GetAppConfig",guard:"noInternalError"},"Error"]},GetAppConfig:{entry:(0,n.assign)({intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:i.SignTransactionDAStep.GET_APP_CONFIG}}),invoke:{id:"getAppConfig",src:"getAppConfig",onDone:{target:"GetAppConfigResultCheck",actions:[(0,n.assign)({_internalState:({event:t,context:a})=>(0,e.isSuccessCommandResult)(t.output)?{...a._internalState,appConfig:t.output.data}:{...a._internalState,error:t.output.error}})]},onError:{target:"Error",actions:"assignErrorFromEvent"}}},GetAppConfigResultCheck:{always:[{target:"Web3ChecksOptIn",guard:(0,n.and)(["noInternalError","isWeb3ChecksSupported","shouldOptIn"])},{target:"ParseTransaction",guard:"noInternalError"},{target:"Error"}]},Web3ChecksOptIn:{entry:(0,n.assign)({intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.Web3ChecksOptIn,step:i.SignTransactionDAStep.WEB3_CHECKS_OPT_IN}}),invoke:{id:"web3CheckOptIn",src:"web3CheckOptIn",onDone:{target:"Web3ChecksOptInResult",actions:[(0,n.assign)({_internalState:({event:t,context:a})=>(0,e.isSuccessCommandResult)(t.output)?{...a._internalState,appConfig:{...a._internalState.appConfig,web3ChecksEnabled:t.output.data.enabled}}:a._internalState})]},onError:{target:"Error",actions:"assignErrorFromEvent"}}},Web3ChecksOptInResult:{entry:(0,n.assign)(({context:t})=>({intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:i.SignTransactionDAStep.WEB3_CHECKS_OPT_IN_RESULT,result:t._internalState.appConfig.web3ChecksEnabled}})),after:{0:{target:"ParseTransaction"}}},ParseTransaction:{entry:(0,n.assign)({intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:i.SignTransactionDAStep.PARSE_TRANSACTION}}),invoke:{id:"parseTransaction",src:"parseTransaction",input:({context:t})=>({mapper:t.input.mapper,transaction:t.input.transaction}),onDone:{target:"BuildContexts",actions:(0,n.assign)({_internalState:({event:t,context:a})=>({...a._internalState,subset:t.output.subset,transactionType:t.output.type})})},onError:{target:"Error",actions:"assignErrorFromEvent"}}},BuildContexts:{entry:(0,n.assign)({intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:i.SignTransactionDAStep.BUILD_CONTEXTS}}),invoke:{id:"buildContexts",src:"buildContexts",input:({context:t})=>({contextModule:t.input.contextModule,mapper:t.input.mapper,parser:t.input.parser,options:t.input.options,appConfig:t._internalState.appConfig,derivationPath:t.input.derivationPath,subset:t._internalState.subset,transaction:t.input.transaction,deviceModelId:r.getDeviceModel().id}),onDone:{target:"ProvideContexts",actions:[(0,n.assign)({_internalState:({event:t,context:a})=>({...a._internalState,contexts:t.output.clearSignContexts,clearSigningType:t.output.clearSigningType})})]},onError:{target:"Error",actions:"assignErrorFromEvent"}}},ProvideContexts:{entry:(0,n.assign)({intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:i.SignTransactionDAStep.PROVIDE_CONTEXTS}}),exit:(0,n.assign)({_internalState:({context:t})=>({...t._internalState,contexts:t._internalState.contexts.slice(1)})}),invoke:{id:"provideContexts",src:"provideContexts",input:({context:t})=>({contexts:t._internalState.contexts,derivationPath:t.input.derivationPath,serializedTransaction:t.input.transaction}),onDone:{target:"SignTransaction"},onError:{target:"Error",actions:"assignErrorFromEvent"}}},SignTransaction:{entry:(0,n.assign)({intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction,step:i.SignTransactionDAStep.SIGN_TRANSACTION}}),invoke:{id:"signTransaction",src:"signTransaction",input:({context:t})=>({derivationPath:t.input.derivationPath,serializedTransaction:t.input.transaction,chainId:t._internalState.subset.chainId,transactionType:t._internalState.transactionType,clearSigningType:t._internalState.clearSigningType}),onDone:{target:"SignTransactionResultCheck",actions:[(0,n.assign)({_internalState:({event:t,context:a})=>(0,e.isSuccessCommandResult)(t.output)?{...a._internalState,signature:t.output.data}:{...a._internalState,error:t.output.error}})]},onError:{target:"SignTransactionResultCheck",actions:"assignErrorFromEvent"}}},SignTransactionResultCheck:{always:[{guard:"noInternalError",target:"Success"},{guard:"notRefusedByUser",target:"BlindSignTransactionFallback"},{target:"Error"}]},BlindSignTransactionFallback:{entry:(0,n.assign)({intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:i.SignTransactionDAStep.BLIND_SIGN_TRANSACTION_FALLBACK}}),invoke:{id:"blindSignTransactionFallback",src:"signTransaction",input:({context:t})=>({derivationPath:t.input.derivationPath,serializedTransaction:t.input.transaction,chainId:t._internalState.subset.chainId,transactionType:t._internalState.transactionType,clearSigningType:T.ClearSigningType.BASIC}),onDone:{target:"BlindSignTransactionFallbackResultCheck",actions:[(0,n.assign)({_internalState:({event:t,context:a})=>(0,e.isSuccessCommandResult)(t.output)?{...a._internalState,signature:t.output.data}:{...a._internalState,error:t.output.error}})]},onError:{target:"Error",actions:"assignErrorFromEvent"}}},BlindSignTransactionFallbackResultCheck:{always:[{guard:"noInternalError",target:"Success"},{target:"Error"}]},Success:{type:"final"},Error:{type:"final"}},output:({context:t})=>t._internalState.signature?(0,u.Right)(t._internalState.signature):(0,u.Left)(t._internalState.error||new e.UnknownDAError("No error in final state"))})}extractDependencies(r){return{getAppConfig:async()=>r.sendCommand(new C.GetAppConfiguration),web3CheckOptIn:async()=>r.sendCommand(new m.Web3CheckOptInCommand),parseTransaction:async t=>Promise.resolve(new A.ParseTransactionTask({mapper:t.input.mapper,transaction:t.input.transaction}).run()),buildContexts:async t=>new y.BuildFullContextsTask(r,t.input).run(),provideContexts:async t=>new h.ProvideTransactionContextsTask(r,t.input).run(),signTransaction:async t=>new I.SendSignTransactionTask(r,{...t.input}).run()}}}0&&(module.exports={SignTransactionDeviceAction});
|
|
2
2
|
//# sourceMappingURL=SignTransactionDeviceAction.js.map
|
package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type CommandErrorResult,\n type CommandResult,\n type DeviceActionStateMachine,\n DeviceModelId,\n type InternalApi,\n isSuccessCommandResult,\n OpenAppDeviceAction,\n type StateMachineTypes,\n UnknownDAError,\n UserInteractionRequired,\n XStateDeviceAction,\n} from \"@ledgerhq/device-management-kit\";\nimport { type Either, Left, Right } from \"purify-ts\";\nimport { and, assign, fromPromise, setup } from \"xstate\";\n\nimport { type GetConfigCommandResponse } from \"@api/app-binder/GetConfigCommandTypes\";\nimport {\n type SignTransactionDAError,\n type SignTransactionDAInput,\n type SignTransactionDAIntermediateValue,\n type SignTransactionDAInternalState,\n type SignTransactionDAOutput,\n SignTransactionDAStep,\n} from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { type ClearSigningType } from \"@api/model/ClearSigningType\";\nimport { type Signature } from \"@api/model/Signature\";\nimport { type TransactionType } from \"@api/model/TransactionType\";\nimport { GetAppConfiguration } from \"@internal/app-binder/command/GetAppConfigurationCommand\";\nimport { type EthErrorCodes } from \"@internal/app-binder/command/utils/ethAppErrors\";\nimport {\n Web3CheckOptInCommand,\n type Web3CheckOptInCommandResponse,\n} from \"@internal/app-binder/command/Web3CheckOptInCommand\";\nimport {\n BuildSubContextTask,\n type BuildSubContextTaskArgs,\n} from \"@internal/app-binder/task/BuildSubContextTask\";\nimport {\n BuildTransactionContextTask,\n type BuildTransactionContextTaskArgs,\n type BuildTransactionTaskResult,\n} from \"@internal/app-binder/task/BuildTransactionContextTask\";\nimport {\n PreBuildContextTask,\n type PreBuildContextTaskArgs,\n type PreBuildContextTaskResult,\n} from \"@internal/app-binder/task/PreBuildContextTask\";\nimport { ProvideTransactionContextTask } from \"@internal/app-binder/task/ProvideTransactionContextTask\";\nimport { SendSignTransactionTask } from \"@internal/app-binder/task/SendSignTransactionTask\";\nimport { ApplicationChecker } from \"@internal/shared/utils/ApplicationChecker\";\n\nexport type MachineDependencies = {\n readonly getAppConfig: () => Promise<\n CommandResult<GetConfigCommandResponse, EthErrorCodes>\n >;\n readonly web3CheckOptIn: () => Promise<\n CommandResult<Web3CheckOptInCommandResponse, EthErrorCodes>\n >;\n readonly preBuildContext: (arg0: {\n input: PreBuildContextTaskArgs;\n }) => Promise<PreBuildContextTaskResult>;\n readonly buildContext: (arg0: {\n input: BuildTransactionContextTaskArgs;\n }) => Promise<BuildTransactionTaskResult>;\n readonly buildSubContextAndProvide: (arg0: {\n input: BuildSubContextTaskArgs & {\n derivationPath: string;\n transaction: Uint8Array;\n };\n }) => Promise<Either<CommandErrorResult<EthErrorCodes>, void>>;\n readonly signTransaction: (arg0: {\n input: {\n derivationPath: string;\n serializedTransaction: Uint8Array;\n chainId: number;\n transactionType: TransactionType;\n clearSigningType: ClearSigningType;\n };\n }) => Promise<CommandResult<Signature, EthErrorCodes>>;\n};\n\nexport class SignTransactionDeviceAction extends XStateDeviceAction<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n> {\n makeStateMachine(\n internalApi: InternalApi,\n ): DeviceActionStateMachine<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n > {\n type types = StateMachineTypes<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n >;\n\n const {\n getAppConfig,\n web3CheckOptIn,\n preBuildContext,\n buildContext,\n signTransaction,\n buildSubContextAndProvide,\n } = this.extractDependencies(internalApi);\n\n return setup({\n types: {\n input: {} as types[\"input\"],\n context: {} as types[\"context\"],\n output: {} as types[\"output\"],\n },\n actors: {\n openAppStateMachine: new OpenAppDeviceAction({\n input: { appName: \"Ethereum\" },\n }).makeStateMachine(internalApi),\n getAppConfig: fromPromise(getAppConfig),\n web3CheckOptIn: fromPromise(web3CheckOptIn),\n preBuildContext: fromPromise(preBuildContext),\n buildContext: fromPromise(buildContext),\n signTransaction: fromPromise(signTransaction),\n buildSubContextAndProvide: fromPromise(buildSubContextAndProvide),\n },\n guards: {\n noInternalError: ({ context }) => context._internalState.error === null,\n isWeb3ChecksSupported: ({ context }) =>\n new ApplicationChecker(\n internalApi.getDeviceSessionState(),\n context._internalState.appConfig!,\n )\n .withMinVersionExclusive(\"1.15.0\")\n .excludeDeviceModel(DeviceModelId.NANO_S)\n .excludeDeviceModel(DeviceModelId.NANO_SP)\n .excludeDeviceModel(DeviceModelId.NANO_X)\n .check(),\n shouldOptIn: ({ context }) =>\n !context._internalState.appConfig!.web3ChecksEnabled &&\n !context._internalState.appConfig!.web3ChecksOptIn,\n skipOpenApp: ({ context }) => !!context.input.options.skipOpenApp,\n hasContextToProvide: ({ context }) =>\n context._internalState.clearSignContexts !== null &&\n context._internalState.clearSignContexts.length > 0,\n },\n actions: {\n assignErrorFromEvent: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: _.event[\"error\"], // NOTE: it should never happen, the error is not typed anymore here\n }),\n }),\n },\n }).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QGUCWUB2AVATgQw1jwGMAXVAewwBEwA3VYsAQTMowDoB5ABzA2Y8etBk1bkqAYghUwHVBjoUA1nIp8BQ5KTykwAWRIALBWADaABgC6iUDwqxUEjLZAAPRABYAzAHYOAJwAHACMAb4ArBYWAEw+FkHeADQgAJ6IwRYcAGwRQUG52TF5EcUAvmUpaJi4BERsVCKMLA2cAMJGYMTKvPyCwvTN4uwASnAArgA2pJKWNkgg9o7Orh4IAcEcpRYhvonZAd4byWmIITtZESEhBTHeEVH33hVV6Nj4hCTOTWKtHB1dHoafo-FrOMawKYzMwheZ2BxOdirDKbba7faHY4pdIIUIcG6+bwWbKeXwxIKeTzkl4garvOpfdig4ZUDgAcTApA6eEmk34MGksnkihUchgXKMPL5GBgc1cS0RVGRCBCngC2Q4aqCewCEWyQUyJxx5x2HBiByCsV8AQsaoinhpdNqn1azL+HIlUv5YEkYBwOAoOA4PEmugAZoGALYccXc3neuULBUrBZrVXqzXBHV6g2Wo1nDaasIWXxkwkxW0xXyOt7O+rfQa-Zzszlx6UwCFQgHdWbWeUIlOgNMBTxBDiJby3MkmiK+bFnCzeEL4mLm4m5aLeB2VWm1j71pmNsHsFue+MysCd6bd5SzWH95ZI1MF0fj7yTorT6Kz+cILfLhJEgiDZslVXwLACGsan3RlGiPFlOAAIXGVBJggNoqD0NwZhkDA5AUJRVA4AAjFC0IwjAsNIRN4UfJVnwQOJPCyIJyWLHYqV1bJf3OGJl3yYlfFA0dsiOZ4dydGDXXgv5kNQ9DMLAbDfX9QNg1DUgIxwaNSPkiiqJoxYByfIdECYli2JtDiYi439PGAjhvArVdrT4skDm3V5oIZaTRGPVk5PIxTsKvCVAV7OEjLolwGPJfJMwrUkjkiNUeIsK4OEJLdLWiUI9ig+kXQbPyEI4QKFMopTSFCm870i5MTPcMz8jHNVEsJcJ7QCX88pySJSlKPw7jCAq61gmgZObAAFAMGAgMB9KqwU8OFQi5B4WbUHmxbsMMhr6NMv9RzHFK8kiLdBu405cQSTV32Ym5slAw4YlGqTiqGP4ZooOaFuCmY-QDIMQ3DKNg027b-r24yDqao74tO7UIguu4rpxbJokCA0rmJCDjk83dvKKw8Sq+iGwA5PCcEYHacKFAjRXBn6top-g-RpqG+yTGGYsO7KTvtM7kfs1HfyszLfDCbIySpdzxK8wqDzg0npvJyn2eIWmVKB9TQe0pnfvV6nNc5+qeeVfnMsFpGUe8NGF3snI8liViQlEolIIkvcfI+psT0kn32GW-CRSIxwiaVjBoei5VmL2M1SSCB4KyTykIh6wtDgKcJJbyAIRq9iPxrdZsA+JqRAbUkHNLB8PFfG6PFV5uG47HOI9mThJ7Xs39fCpJ3tRe4JzTewPlc+0vvfLjAas6HtG8HFuuo4YldiXOJQgpdProCGzMvz-VOOYuPR+nkv-anyPZ-CmEzZjhj7LVFfQMJEIN5uHvrvyTxHPJEtgIKKUXIFQdwYAoPNeACwy6R3PrDfazc1gAFp7YIGQSvaIGDMEYNnKfGBk0Ty9E0AMFWjV4GxxiGLPUCc9SlGCKBSsuDi74NZDeQhIJmEzwmNMB8TdlT6n8HxEIeoP5kichQ66JoYgrzytjDBk5qyF3rr5CeJ4PRtm9DwxeaYbhjkHtla0dtRJzh3knfEs53wbHztaHwjDlF+1ZGoyU54OxcLCt0TRjU0zgW8IECCrF872Q2PaNKq4ci7yeuSPINxqSKLGnY-ySEyIVSoh42Gaw+JHHxIcaIGxOIlnzCqb8mV9QZK3McJOtjfYJLKkk2m193Hc3vodc0r47i7xssBEIS40o+EcouZGRQ3ZOSepUkmKjWTfV+rTVJCDEBLicpqAoeYUqLm6tdVyv9JHaiOPnUZ497GcEmSzI2HNKrYRmRbCCUjSzmjfsjCshw0pu3HK5aWfdbSeBGbE96YyDkcGgeNC5DE-DMRXl080fdKShDWTiCkAR8QHDCLsG05JyjfLHhNEhrIAWtHqcoIFh0qSmNyPkEcHc9Riz4o5UCDx3ZbiXBEPZmLxmcGQOMYgTBYCQNorwh+Ql4VUgSD4J6uRPAhEpRqWhYRjoXCCEy2BnAACiqkcAEpbvyzUKdhVPXtOK66oExwY3VEI1Ffhd4gLKEAA */\n id: \"SignTransactionDeviceAction\",\n initial: \"InitialState\",\n context: ({ input }) => {\n return {\n input,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: SignTransactionDAStep.OPEN_APP,\n },\n _internalState: {\n error: null,\n appConfig: null,\n clearSignContexts: null,\n clearSignContextsOptional: null,\n subset: null,\n transactionType: null,\n clearSigningType: null,\n signature: null,\n },\n };\n },\n states: {\n InitialState: {\n always: [\n {\n target: \"GetAppConfig\",\n guard: \"skipOpenApp\",\n },\n \"OpenAppDeviceAction\",\n ],\n },\n OpenAppDeviceAction: {\n invoke: {\n id: \"openAppStateMachine\",\n input: {\n appName: \"Ethereum\",\n },\n src: \"openAppStateMachine\",\n onSnapshot: {\n actions: assign({\n intermediateValue: (_) => ({\n ..._.event.snapshot.context.intermediateValue,\n step: SignTransactionDAStep.OPEN_APP,\n }),\n }),\n },\n onDone: {\n actions: assign({\n _internalState: (_) => {\n return _.event.output.caseOf<SignTransactionDAInternalState>({\n Right: () => _.context._internalState,\n Left: (error) => ({\n ..._.context._internalState,\n error,\n }),\n });\n },\n }),\n target: \"CheckOpenAppDeviceActionResult\",\n },\n },\n },\n CheckOpenAppDeviceActionResult: {\n always: [\n {\n target: \"GetAppConfig\",\n guard: \"noInternalError\",\n },\n \"Error\",\n ],\n },\n GetAppConfig: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: SignTransactionDAStep.GET_APP_CONFIG,\n },\n }),\n invoke: {\n id: \"getAppConfig\",\n src: \"getAppConfig\",\n onDone: {\n target: \"GetAppConfigResultCheck\",\n actions: [\n assign({\n _internalState: ({ event, context }) => {\n if (isSuccessCommandResult(event.output)) {\n return {\n ...context._internalState,\n appConfig: event.output.data,\n };\n } else {\n return {\n ...context._internalState,\n error: event.output.error,\n };\n }\n },\n }),\n ],\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n GetAppConfigResultCheck: {\n always: [\n {\n target: \"Web3ChecksOptIn\",\n guard: and([\n \"noInternalError\",\n \"isWeb3ChecksSupported\",\n \"shouldOptIn\",\n ]),\n },\n {\n target: \"PreBuildContext\",\n guard: \"noInternalError\",\n },\n {\n target: \"Error\",\n },\n ],\n },\n Web3ChecksOptIn: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.Web3ChecksOptIn,\n step: SignTransactionDAStep.WEB3_CHECKS_OPT_IN,\n },\n }),\n invoke: {\n id: \"web3CheckOptIn\",\n src: \"web3CheckOptIn\",\n onDone: {\n target: \"Web3ChecksOptInResult\",\n actions: [\n assign({\n _internalState: ({ event, context }) => {\n if (isSuccessCommandResult(event.output)) {\n return {\n ...context._internalState,\n appConfig: {\n ...context._internalState.appConfig!,\n web3ChecksEnabled: event.output.data.enabled,\n },\n };\n } else {\n return context._internalState;\n }\n },\n }),\n ],\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n Web3ChecksOptInResult: {\n entry: assign(({ context }) => ({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: SignTransactionDAStep.WEB3_CHECKS_OPT_IN_RESULT,\n result: context._internalState.appConfig!.web3ChecksEnabled,\n },\n })),\n // Using after transition to force a snapshot of the state after the entry action\n // This ensures the intermediateValue is captured before moving to BuildContext\n after: {\n 0: {\n target: \"PreBuildContext\",\n },\n },\n },\n PreBuildContext: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: SignTransactionDAStep.PRE_BUILD_CONTEXT,\n },\n }),\n invoke: {\n id: \"preBuildContext\",\n src: \"preBuildContext\",\n input: ({ context }) => ({\n mapper: context.input.mapper,\n transaction: context.input.transaction,\n }),\n onDone: {\n target: \"BuildContext\",\n actions: assign({\n _internalState: ({ event, context }) => ({\n ...context._internalState,\n transactionType: event.output.type,\n subset: event.output.subset,\n }),\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n BuildContext: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: SignTransactionDAStep.BUILD_CONTEXT,\n },\n }),\n invoke: {\n id: \"buildContext\",\n src: \"buildContext\",\n input: ({ context }) => ({\n contextModule: context.input.contextModule,\n options: context.input.options,\n appConfig: context._internalState.appConfig!,\n derivationPath: context.input.derivationPath,\n transaction: context.input.transaction,\n subset: context._internalState.subset!,\n }),\n onDone: {\n target: \"HasContextToProvideCheck\",\n actions: [\n assign({\n _internalState: ({ event, context }) => ({\n ...context._internalState,\n clearSignContexts: event.output.clearSignContexts!,\n clearSignContextsOptional:\n event.output.clearSignContextsOptional!,\n clearSigningType: event.output.clearSigningType,\n }),\n }),\n ],\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n HasContextToProvideCheck: {\n always: [\n {\n target: \"BuildSubContextAndProvide\",\n guard: \"hasContextToProvide\",\n },\n {\n target: \"SignTransaction\",\n },\n ],\n },\n BuildSubContextAndProvide: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: SignTransactionDAStep.BUILD_SUB_CONTEXT_AND_PROVIDE,\n },\n }),\n exit: assign({\n // remove the first context as it has been consumed\n _internalState: ({ context }) => ({\n ...context._internalState,\n clearSignContexts:\n context._internalState.clearSignContexts!.slice(1),\n }),\n }),\n invoke: {\n id: \"buildSubContextAndProvide\",\n src: \"buildSubContextAndProvide\",\n input: ({ context }) => ({\n context: context._internalState.clearSignContexts![0]!,\n contextOptional:\n context._internalState.clearSignContextsOptional!,\n transactionParser: context.input.parser,\n transaction: context.input.transaction!,\n contextModule: context.input.contextModule,\n subset: context._internalState.subset!,\n derivationPath: context.input.derivationPath,\n }),\n onDone: {\n target: \"HasContextToProvideCheck\",\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n SignTransaction: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n step: SignTransactionDAStep.SIGN_TRANSACTION,\n },\n }),\n invoke: {\n id: \"signTransaction\",\n src: \"signTransaction\",\n input: ({ context }) => ({\n derivationPath: context.input.derivationPath,\n serializedTransaction: context.input.transaction,\n chainId: context._internalState.subset!.chainId,\n transactionType: context._internalState.transactionType!,\n clearSigningType: context._internalState.clearSigningType!,\n }),\n onDone: {\n target: \"SignTransactionResultCheck\",\n actions: [\n assign({\n _internalState: ({ event, context }) => {\n if (isSuccessCommandResult(event.output)) {\n return {\n ...context._internalState,\n signature: event.output.data,\n };\n }\n return {\n ...context._internalState,\n error: event.output.error,\n };\n },\n }),\n ],\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n SignTransactionResultCheck: {\n always: [\n { guard: \"noInternalError\", target: \"Success\" },\n { target: \"Error\" },\n ],\n },\n Success: {\n type: \"final\",\n },\n Error: {\n type: \"final\",\n },\n },\n output: ({ context }) =>\n context._internalState.signature\n ? Right(context._internalState.signature)\n : Left(\n context._internalState.error ||\n new UnknownDAError(\"No error in final state\"),\n ),\n });\n }\n\n extractDependencies(internalApi: InternalApi): MachineDependencies {\n const getAppConfig = async () =>\n internalApi.sendCommand(new GetAppConfiguration());\n const web3CheckOptIn = async () =>\n internalApi.sendCommand(new Web3CheckOptInCommand());\n const preBuildContext = async (arg0: { input: PreBuildContextTaskArgs }) =>\n Promise.resolve(\n new PreBuildContextTask({\n mapper: arg0.input.mapper,\n transaction: arg0.input.transaction,\n }).run(),\n );\n const buildContext = async (arg0: {\n input: BuildTransactionContextTaskArgs;\n }) => new BuildTransactionContextTask(internalApi, arg0.input).run();\n\n const buildSubContextAndProvide = async (arg0: {\n input: BuildSubContextTaskArgs & {\n derivationPath: string;\n transaction: Uint8Array;\n };\n }) => {\n const { subcontextCallbacks } = new BuildSubContextTask(internalApi, {\n context: arg0.input.context,\n contextOptional: arg0.input.contextOptional,\n transactionParser: arg0.input.transactionParser,\n subset: arg0.input.subset,\n contextModule: arg0.input.contextModule,\n }).run();\n return new ProvideTransactionContextTask(internalApi, {\n context: arg0.input.context,\n subcontextsCallbacks: subcontextCallbacks,\n serializedTransaction: arg0.input.transaction,\n derivationPath: arg0.input.derivationPath,\n }).run();\n };\n\n const signTransaction = async (arg0: {\n input: {\n derivationPath: string;\n serializedTransaction: Uint8Array;\n chainId: number;\n transactionType: TransactionType;\n clearSigningType: ClearSigningType;\n };\n }) =>\n new SendSignTransactionTask(internalApi, {\n ...arg0.input,\n }).run();\n\n return {\n getAppConfig,\n web3CheckOptIn,\n preBuildContext,\n buildContext,\n buildSubContextAndProvide,\n signTransaction,\n };\n }\n}\n"],
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,iCAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,
|
|
6
|
-
"names": ["SignTransactionDeviceAction_exports", "__export", "SignTransactionDeviceAction", "__toCommonJS", "import_device_management_kit", "import_purify_ts", "import_xstate", "import_SignTransactionDeviceActionTypes", "
|
|
4
|
+
"sourcesContent": ["import {\n type CommandResult,\n type DeviceActionStateMachine,\n DeviceModelId,\n type InternalApi,\n isSuccessCommandResult,\n OpenAppDeviceAction,\n type StateMachineTypes,\n UnknownDAError,\n UserInteractionRequired,\n XStateDeviceAction,\n} from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { and, assign, fromPromise, setup } from \"xstate\";\n\nimport { type GetConfigCommandResponse } from \"@api/app-binder/GetConfigCommandTypes\";\nimport {\n type SignTransactionDAError,\n type SignTransactionDAInput,\n type SignTransactionDAIntermediateValue,\n type SignTransactionDAInternalState,\n type SignTransactionDAOutput,\n SignTransactionDAStep,\n} from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { ClearSigningType } from \"@api/model/ClearSigningType\";\nimport { type Signature } from \"@api/model/Signature\";\nimport { type TransactionType } from \"@api/model/TransactionType\";\nimport { GetAppConfiguration } from \"@internal/app-binder/command/GetAppConfigurationCommand\";\nimport { type EthErrorCodes } from \"@internal/app-binder/command/utils/ethAppErrors\";\nimport {\n Web3CheckOptInCommand,\n type Web3CheckOptInCommandResponse,\n} from \"@internal/app-binder/command/Web3CheckOptInCommand\";\nimport {\n BuildFullContextsTask,\n type BuildFullContextsTaskArgs,\n type BuildFullContextsTaskResult,\n} from \"@internal/app-binder/task/BuildFullContextsTask\";\nimport {\n ParseTransactionTask,\n type ParseTransactionTaskArgs,\n type ParseTransactionTaskResult,\n} from \"@internal/app-binder/task/ParseTransactionTask\";\nimport {\n ProvideTransactionContextsTask,\n type ProvideTransactionContextsTaskArgs,\n type ProvideTransactionContextsTaskResult,\n} from \"@internal/app-binder/task/ProvideTransactionContextsTask\";\nimport { SendSignTransactionTask } from \"@internal/app-binder/task/SendSignTransactionTask\";\nimport { ApplicationChecker } from \"@internal/shared/utils/ApplicationChecker\";\n\nexport type MachineDependencies = {\n readonly getAppConfig: () => Promise<\n CommandResult<GetConfigCommandResponse, EthErrorCodes>\n >;\n readonly web3CheckOptIn: () => Promise<\n CommandResult<Web3CheckOptInCommandResponse, EthErrorCodes>\n >;\n readonly parseTransaction: (arg0: {\n input: ParseTransactionTaskArgs;\n }) => Promise<ParseTransactionTaskResult>;\n readonly buildContexts: (arg0: {\n input: BuildFullContextsTaskArgs;\n }) => Promise<BuildFullContextsTaskResult>;\n readonly provideContexts: (arg0: {\n input: ProvideTransactionContextsTaskArgs;\n }) => Promise<ProvideTransactionContextsTaskResult>;\n readonly signTransaction: (arg0: {\n input: {\n derivationPath: string;\n serializedTransaction: Uint8Array;\n chainId: number;\n transactionType: TransactionType;\n clearSigningType: ClearSigningType;\n };\n }) => Promise<CommandResult<Signature, EthErrorCodes>>;\n};\n\nexport class SignTransactionDeviceAction extends XStateDeviceAction<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n> {\n makeStateMachine(\n internalApi: InternalApi,\n ): DeviceActionStateMachine<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n > {\n type types = StateMachineTypes<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n >;\n\n const {\n getAppConfig,\n web3CheckOptIn,\n parseTransaction,\n buildContexts,\n signTransaction,\n provideContexts,\n } = this.extractDependencies(internalApi);\n\n return setup({\n types: {\n input: {} as types[\"input\"],\n context: {} as types[\"context\"],\n output: {} as types[\"output\"],\n },\n actors: {\n openAppStateMachine: new OpenAppDeviceAction({\n input: { appName: \"Ethereum\" },\n }).makeStateMachine(internalApi),\n getAppConfig: fromPromise(getAppConfig),\n web3CheckOptIn: fromPromise(web3CheckOptIn),\n parseTransaction: fromPromise(parseTransaction),\n buildContexts: fromPromise(buildContexts),\n provideContexts: fromPromise(provideContexts),\n signTransaction: fromPromise(signTransaction),\n },\n guards: {\n noInternalError: ({ context }) => context._internalState.error === null,\n notRefusedByUser: ({ context }) =>\n context._internalState.error !== null &&\n (!(\"errorCode\" in context._internalState.error) ||\n context._internalState.error.errorCode !== \"6985\"),\n isWeb3ChecksSupported: ({ context }) =>\n new ApplicationChecker(\n internalApi.getDeviceSessionState(),\n context._internalState.appConfig!,\n )\n .withMinVersionExclusive(\"1.15.0\")\n .excludeDeviceModel(DeviceModelId.NANO_S)\n .excludeDeviceModel(DeviceModelId.NANO_SP)\n .excludeDeviceModel(DeviceModelId.NANO_X)\n .check(),\n shouldOptIn: ({ context }) =>\n !context._internalState.appConfig!.web3ChecksEnabled &&\n !context._internalState.appConfig!.web3ChecksOptIn,\n skipOpenApp: ({ context }) => !!context.input.options.skipOpenApp,\n },\n actions: {\n assignErrorFromEvent: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: _.event[\"error\"], // NOTE: it should never happen, the error is not typed anymore here\n }),\n }),\n },\n }).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QGUCWUB2AVATgQw1jwGMAXVAewwBEwA3VYsAQTMowDoBJDVcvADbJSeUmADEAbQAMAXUSgADhVh92CkAA9EARgDsAZg4AOACzGAnAFYDNgGxXpF6ToA0IAJ67TOgEwcDHTsLCz9pQN9bAF8o9zRMXAIiNipaBiZWcipuXn4hETEpHXkkEGVVLIwNbQR9IzNLG3tHZzdPXV87aQ5I5ztfSON+zpi49Gx8QhJKtMYWFM4AeUUwDGZFRVmMhfEIKjAOVAw6CgBrA4oVtY3hUTAAWRIACyOwGRKlFTUqasQ9RxMVjMdgcdj0xnBvncXlqkTsHAsQxcnVMvmM4TsoxA8QmSWm7C280qHAAwk8wMRTstVutNvQ5pl2AAlOAAVwEpCkcg05W+VVKNR0gW6IOsoWMfgMdlMdmhHRBHActisFnMMqCmNi2PGiSmC0JjOyZIpVKutINCxZsHZnMkxR5X0qv1qwsVwRVOglcJlcoQEo4ns9pmkQL00mCFgMWJxuuSM3p22JAHEwKRaSSqAAzdC7faHY5nA4wNMbDMYbNQd4OirqAW6CVWDhWPR2fR2Yy+Fu+UwGX1C4zGHoGcPSDuGCx6HTRnWTOMEhNE9gcFMlxRliviMA4HAUHAcRQCUSZ3cAWw4xfTWfQVdKvKdddqDabLbbY-6Pb7IQ4I+sPdR1n+KMtRjWd8VSBdDU4FdL3LdArRtY1KS5D4ykdWtQBqAYO2-MFwyBHRTEjNoYT8Lpv3CKwrG7Zt0VMPRpwSUD9QghZl1TGCK3gjlENOIoULvdCtEQLD-HDMMHAlQjAj7VEdADENg1MYNhQMUwGNxPV43SRdsmg0srygLjSB4qRfH4tCfgfEScPE-CpOIxBVO6HQiLbVUQR8dTYzAmgWOJAB1MAACMDB42BllIHhcwwA4jhOc4OAAd2C0LyUpCKeBvT4a0sjDhKGfxmxDXwMT0SIDF7dpYUono9B7YxbAI4xHGMLymK0hlWMCkKwoyjBN23Xd90PUhjxwM9kp6tLTUijAstQnL+TyhA0X6Z9itK8rKphUwgW-MrfFCXpKJcejgJnPFmO0yCOG61KTXCxRZqM8RNFgAoDjwTMxBwAAKaQAEpxBAy6OsTJc7t6p6eCM+aBNyoSEAqgjFVIz0LE6CxWz0PtOz0Dg9HBMquh8LowTa0H52u1iAAU8BwWAwG8nY9hi-N4oORR6cZ5nKjhiylsRgxwQsJtCOlIIdFHaQWz7AwJ2-FyCMGEMMbOsZGMp8DqeJOmGaZ9r2AGnc9wPI9T33bmDa1ubuVvAXnWFywxax0mpfRWWqpVUWSqUgYw2F5xWvOzXNKpzriQAIVZVABAgMsxE0UhYGi2KCwSoKY7jhOwCT2B+cW50e09RUSshJwQ0nGSdEbKx-1bUI7IsCmw+1iOl2j2P46oRPk+NoazdGi3M67nO84Lvki8CQd+hljsK+bByEDq7oKocbtI3BOurBbuc2-B7IaZ3BgIDAMe+9ZtOOf3Y-UFP8-87t7LJ4fcwyqbbGezq-orFlKqCLIs4XwVFgjSFOr-XePkLS61vvfHuuc+5bhNsNc240b4UBPmfeB48n4LRfstN+hVP7CxlMAv+MIBxyRlAVSck5xSQKuu3bIINW79UvuzQsHBVChz3rbcyhcHx1xKhwVEwwQgV0nFYGSv8EQDCFD4GuehVQ7xDhpXh0ClwsN4f3U2I0xpnm4WonyE97zLSEd0URAxxHOEkX2aQAxFRgLKqqVWDYGFgx0pwLRPkjImRMYJGoQJnBNiFIdCSIJwgySGE2SwZVwgr1DO48OB8vEXVYb46afFqz4MRkE7oVhQlYyBBE7augDC+DkgUiUZgqnlLqkk-eniOCRwEEcCA3iFgADFBACCCiQXi7C4qcKCq0jA7S0m8O6QIXp-T-EIxqNKFs35VQSlVDKQmpg5aohESqAcnQQT1NUbzZJTSWltI6ZUKZMykJIIHno4eozxk8J8lcvplI5mCwWeYRsEkWzNXbJ2YwfY-D42kKieJHY2zNgab5HWHdHkXPYK8-pGSTTIWyaYxGk5IjPmsHXfQeEoT-1UqLfowpKIdlWUBDWRjGEpOaQiiZLyelvNOKipCdp+E5JqNiowzY8U+FskSkiw5TAmGlCEQioR-j6BiFqDAFBT7wFKIixpkEMUBMQAAWnIdqxsIQQiE3BGClx0QjmGzVaxHgahBC3DEBq+ZiBUQyXCE2YWSjJxgOFtC81NsNHZGpNcOkcKEbw0+Y5OuJg1ZDCUSqQFuNgHfmDN2AOYCnBTl9aw-1nAeKBvNH5ZkbIOQOvDQgA1AQxy2BbKdWwuNmwmDqo4cwjRykwuzWxVc650AludDXMBPRmoGAlP8cwTg5aRs6GGGu+g0RgJUTS45lrkzsX0rBQyRbjLTR7VZex-g0QuU6HXIdE5Sm1GDKLHQSsgkShDMLNtBbsiQ2mo9Wa27lrANdWYP2-QPKdikf-ORAQpZKLBUKds96Q2cCfQ9PqRk31Cxlvjaw7YKIQk9iRYB-hKUFJogU4BEGmGcD1jzC1gsw2Ox7EYYWql5aqS6MUuWdgjAhjrpQ7GSiCP0s7tnbByd4M1GDK6hwlEpRbyBcS-0-LURlTqiEMwnGmlHwwXfLBGBe7KufpigTVFGzlKVJ6cMX65YQnkljaVUo-DdgUzdVVZGHaCNHP4Fy2KP32OCDJBx1gzCIkIuiexzdM3qIfak55loN08X44gX+nYAzlOA-oKio4ZKExMFLFUQJ4mnWs6xM5YzbPIspJFhAXR0QBkOkKLGdUOybIA4YAIwDDCehVCCfDgWoHBYZecplXSWUovC1u+2AjlpgiYyIicl6St4SXvI7oX7RzWCDFhbLxJkCsmIEwWAGm8Fab+LYIwLk66tnCEOsFyXdPyKGO7QIGaF2kfbQAUUGjgIrhgbABl-EdiqtFfT-HxgOd0TsQMdjlVEIAA */\n id: \"SignTransactionDeviceAction\",\n initial: \"InitialState\",\n context: ({ input }) => {\n return {\n input,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: SignTransactionDAStep.OPEN_APP,\n },\n _internalState: {\n error: null,\n appConfig: null,\n subset: null,\n contexts: [],\n clearSigningType: null,\n transactionType: null,\n signature: null,\n },\n };\n },\n states: {\n InitialState: {\n always: [\n {\n target: \"GetAppConfig\",\n guard: \"skipOpenApp\",\n },\n \"OpenAppDeviceAction\",\n ],\n },\n OpenAppDeviceAction: {\n invoke: {\n id: \"openAppStateMachine\",\n input: {\n appName: \"Ethereum\",\n },\n src: \"openAppStateMachine\",\n onSnapshot: {\n actions: assign({\n intermediateValue: (_) => ({\n ..._.event.snapshot.context.intermediateValue,\n step: SignTransactionDAStep.OPEN_APP,\n }),\n }),\n },\n onDone: {\n actions: assign({\n _internalState: (_) => {\n return _.event.output.caseOf<SignTransactionDAInternalState>({\n Right: () => _.context._internalState,\n Left: (error) => ({\n ..._.context._internalState,\n error,\n }),\n });\n },\n }),\n target: \"CheckOpenAppDeviceActionResult\",\n },\n },\n },\n CheckOpenAppDeviceActionResult: {\n always: [\n {\n target: \"GetAppConfig\",\n guard: \"noInternalError\",\n },\n \"Error\",\n ],\n },\n GetAppConfig: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: SignTransactionDAStep.GET_APP_CONFIG,\n },\n }),\n invoke: {\n id: \"getAppConfig\",\n src: \"getAppConfig\",\n onDone: {\n target: \"GetAppConfigResultCheck\",\n actions: [\n assign({\n _internalState: ({ event, context }) => {\n if (isSuccessCommandResult(event.output)) {\n return {\n ...context._internalState,\n appConfig: event.output.data,\n };\n } else {\n return {\n ...context._internalState,\n error: event.output.error,\n };\n }\n },\n }),\n ],\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n GetAppConfigResultCheck: {\n always: [\n {\n target: \"Web3ChecksOptIn\",\n guard: and([\n \"noInternalError\",\n \"isWeb3ChecksSupported\",\n \"shouldOptIn\",\n ]),\n },\n {\n target: \"ParseTransaction\",\n guard: \"noInternalError\",\n },\n {\n target: \"Error\",\n },\n ],\n },\n Web3ChecksOptIn: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.Web3ChecksOptIn,\n step: SignTransactionDAStep.WEB3_CHECKS_OPT_IN,\n },\n }),\n invoke: {\n id: \"web3CheckOptIn\",\n src: \"web3CheckOptIn\",\n onDone: {\n target: \"Web3ChecksOptInResult\",\n actions: [\n assign({\n _internalState: ({ event, context }) => {\n if (isSuccessCommandResult(event.output)) {\n return {\n ...context._internalState,\n appConfig: {\n ...context._internalState.appConfig!,\n web3ChecksEnabled: event.output.data.enabled,\n },\n };\n } else {\n return context._internalState;\n }\n },\n }),\n ],\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n Web3ChecksOptInResult: {\n entry: assign(({ context }) => ({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: SignTransactionDAStep.WEB3_CHECKS_OPT_IN_RESULT,\n result: context._internalState.appConfig!.web3ChecksEnabled,\n },\n })),\n // Using after transition to force a snapshot of the state after the entry action\n // This ensures the intermediateValue is captured before moving to ParseTransaction\n after: {\n 0: {\n target: \"ParseTransaction\",\n },\n },\n },\n ParseTransaction: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: SignTransactionDAStep.PARSE_TRANSACTION,\n },\n }),\n invoke: {\n id: \"parseTransaction\",\n src: \"parseTransaction\",\n input: ({ context }) => ({\n mapper: context.input.mapper,\n transaction: context.input.transaction,\n }),\n onDone: {\n target: \"BuildContexts\",\n actions: assign({\n _internalState: ({ event, context }) => ({\n ...context._internalState,\n subset: event.output.subset,\n transactionType: event.output.type,\n }),\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n BuildContexts: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: SignTransactionDAStep.BUILD_CONTEXTS,\n },\n }),\n invoke: {\n id: \"buildContexts\",\n src: \"buildContexts\",\n input: ({ context }) => ({\n contextModule: context.input.contextModule,\n mapper: context.input.mapper,\n parser: context.input.parser,\n options: context.input.options,\n appConfig: context._internalState.appConfig!,\n derivationPath: context.input.derivationPath,\n subset: context._internalState.subset!,\n transaction: context.input.transaction,\n deviceModelId: internalApi.getDeviceModel().id,\n }),\n onDone: {\n target: \"ProvideContexts\",\n actions: [\n assign({\n _internalState: ({ event, context }) => ({\n ...context._internalState,\n contexts: event.output.clearSignContexts,\n clearSigningType: event.output.clearSigningType,\n }),\n }),\n ],\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n ProvideContexts: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: SignTransactionDAStep.PROVIDE_CONTEXTS,\n },\n }),\n exit: assign({\n // remove the first context of the first transaction details as it has been consumed\n _internalState: ({ context }) => {\n return {\n ...context._internalState,\n contexts: context._internalState.contexts.slice(1),\n };\n },\n }),\n invoke: {\n id: \"provideContexts\",\n src: \"provideContexts\",\n input: ({ context }) => ({\n contexts: context._internalState.contexts,\n derivationPath: context.input.derivationPath,\n serializedTransaction: context.input.transaction,\n }),\n onDone: {\n target: \"SignTransaction\",\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n SignTransaction: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n step: SignTransactionDAStep.SIGN_TRANSACTION,\n },\n }),\n invoke: {\n id: \"signTransaction\",\n src: \"signTransaction\",\n input: ({ context }) => ({\n derivationPath: context.input.derivationPath,\n serializedTransaction: context.input.transaction,\n chainId: context._internalState.subset!.chainId,\n transactionType: context._internalState.transactionType!,\n clearSigningType: context._internalState.clearSigningType!,\n }),\n onDone: {\n target: \"SignTransactionResultCheck\",\n actions: [\n assign({\n _internalState: ({ event, context }) => {\n if (isSuccessCommandResult(event.output)) {\n return {\n ...context._internalState,\n signature: event.output.data,\n };\n }\n return {\n ...context._internalState,\n error: event.output.error,\n };\n },\n }),\n ],\n },\n onError: {\n target: \"SignTransactionResultCheck\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n SignTransactionResultCheck: {\n always: [\n { guard: \"noInternalError\", target: \"Success\" },\n {\n guard: \"notRefusedByUser\",\n target: \"BlindSignTransactionFallback\",\n },\n { target: \"Error\" },\n ],\n },\n BlindSignTransactionFallback: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: SignTransactionDAStep.BLIND_SIGN_TRANSACTION_FALLBACK,\n },\n }),\n invoke: {\n id: \"blindSignTransactionFallback\",\n src: \"signTransaction\",\n input: ({ context }) => ({\n derivationPath: context.input.derivationPath,\n serializedTransaction: context.input.transaction,\n chainId: context._internalState.subset!.chainId,\n transactionType: context._internalState.transactionType!,\n clearSigningType: ClearSigningType.BASIC,\n }),\n onDone: {\n target: \"BlindSignTransactionFallbackResultCheck\",\n actions: [\n assign({\n _internalState: ({ event, context }) => {\n if (isSuccessCommandResult(event.output)) {\n return {\n ...context._internalState,\n signature: event.output.data,\n };\n }\n return {\n ...context._internalState,\n error: event.output.error,\n };\n },\n }),\n ],\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n BlindSignTransactionFallbackResultCheck: {\n always: [\n { guard: \"noInternalError\", target: \"Success\" },\n { target: \"Error\" },\n ],\n },\n Success: {\n type: \"final\",\n },\n Error: {\n type: \"final\",\n },\n },\n output: ({ context }) =>\n context._internalState.signature\n ? Right(context._internalState.signature)\n : Left(\n context._internalState.error ||\n new UnknownDAError(\"No error in final state\"),\n ),\n });\n }\n\n extractDependencies(internalApi: InternalApi): MachineDependencies {\n const getAppConfig = async () =>\n internalApi.sendCommand(new GetAppConfiguration());\n const web3CheckOptIn = async () =>\n internalApi.sendCommand(new Web3CheckOptInCommand());\n const parseTransaction = async (arg0: {\n input: ParseTransactionTaskArgs;\n }) =>\n Promise.resolve(\n new ParseTransactionTask({\n mapper: arg0.input.mapper,\n transaction: arg0.input.transaction,\n }).run(),\n );\n const buildContexts = async (arg0: { input: BuildFullContextsTaskArgs }) =>\n new BuildFullContextsTask(internalApi, arg0.input).run();\n\n const provideContexts = async (arg0: {\n input: ProvideTransactionContextsTaskArgs;\n }) => {\n return new ProvideTransactionContextsTask(internalApi, arg0.input).run();\n };\n\n const signTransaction = async (arg0: {\n input: {\n derivationPath: string;\n serializedTransaction: Uint8Array;\n chainId: number;\n transactionType: TransactionType;\n clearSigningType: ClearSigningType;\n };\n }) =>\n new SendSignTransactionTask(internalApi, {\n ...arg0.input,\n }).run();\n\n return {\n getAppConfig,\n web3CheckOptIn,\n parseTransaction,\n buildContexts,\n provideContexts,\n signTransaction,\n };\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["SignTransactionDeviceAction_exports", "__export", "SignTransactionDeviceAction", "__toCommonJS", "import_device_management_kit", "import_purify_ts", "import_xstate", "import_SignTransactionDeviceActionTypes", "import_ClearSigningType", "import_GetAppConfigurationCommand", "import_Web3CheckOptInCommand", "import_BuildFullContextsTask", "import_ParseTransactionTask", "import_ProvideTransactionContextsTask", "import_SendSignTransactionTask", "import_ApplicationChecker", "internalApi", "getAppConfig", "web3CheckOptIn", "parseTransaction", "buildContexts", "signTransaction", "provideContexts", "context", "_", "input", "error", "event", "arg0"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var f=require("@ledgerhq/context-module"),e=require("@ledgerhq/device-management-kit"),x=require("@ledgerhq/device-management-kit"),U=require("ethers"),_=require("purify-ts"),t=require("../../../../api/app-binder/SignTransactionDeviceActionTypes"),E=require("../../../../api/model/ClearSigningType"),P=require("../../../../api/model/TransactionType"),h=require("../../../app-binder/device-action/__test-utils__/makeInternalApi"),I=require("../../../app-binder/device-action/__test-utils__/setupOpenAppDAMock"),O=require("../../../app-binder/device-action/__test-utils__/testDeviceActionStates"),v=require("./SignTransactionDeviceAction");vi.mock("@ledgerhq/device-management-kit",async r=>({...await r(),OpenAppDeviceAction:vi.fn(()=>({makeStateMachine:vi.fn()}))}));describe("SignTransactionDeviceAction",()=>{const r={getContext:vi.fn(),getContexts:vi.fn(),getTypedDataFilters:vi.fn(),getWeb3Checks:vi.fn(),getSolanaContext:vi.fn()},l={mapTransactionToSubset:vi.fn()},u={extractValue:vi.fn()},S=vi.fn(),V=vi.fn(),m=vi.fn(),p=vi.fn(),C=vi.fn(),A=vi.fn();function N(){return{getAppConfig:S,web3CheckOptIn:V,preBuildContext:m,buildContext:p,buildSubContextAndProvide:C,signTransaction:A}}const g=(0,h.makeDeviceActionInternalApiMock)(),d={domain:"domain-name.eth"},a=(0,e.hexaStringToBuffer)(U.Transaction.from({chainId:1n,nonce:0,data:"0x"}).unsignedSerialized),c={chainId:1,data:"0x",selector:"0x",to:"0x",value:0n};function b(i,o,n){return{blindSigningEnabled:!1,web3ChecksEnabled:o,web3ChecksOptIn:n,version:i}}function T(i,o,n){g.getDeviceSessionState.mockReturnValueOnce({sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:i},deviceModelId:e.DeviceModelId.FLEX,isSecureConnectionAllowed:!1}),S.mockResolvedValue((0,e.CommandResultFactory)({data:b(i,o,n)}))}beforeEach(()=>{vi.clearAllMocks()}),describe("Happy path",()=>{it("should call external dependencies with the correct parameters",()=>new Promise((i,o)=>{(0,I.setupOpenAppDAMock)(),T("1.15.0",!1,!1);const n=new v.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:a,options:d,contextModule:r,mapper:l,parser:u}});m.mockResolvedValueOnce({subset:c,type:P.TransactionType.LEGACY}),p.mockResolvedValueOnce({clearSignContexts:[{type:"token",payload:"payload-1"}],clearSignContextsOptional:[],clearSigningType:E.ClearSigningType.BASIC}),C.mockResolvedValueOnce((0,_.Just)(void 0)),A.mockResolvedValueOnce((0,e.CommandResultFactory)({data:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}})),vi.spyOn(n,"extractDependencies").mockReturnValue(N());const s=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.ConfirmOpenApp,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.PRE_BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_SUB_CONTEXT_AND_PROVIDE},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction,step:t.SignTransactionDAStep.SIGN_TRANSACTION},status:e.DeviceActionStatus.Pending},{output:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"},status:e.DeviceActionStatus.Completed}];(0,O.testDeviceActionStates)(n,s,g,{onDone:()=>{expect(m).toHaveBeenCalledWith(expect.objectContaining({input:{mapper:l,transaction:a}})),expect(p).toHaveBeenCalledWith(expect.objectContaining({input:{contextModule:r,options:d,subset:c,transaction:a,appConfig:b("1.15.0",!1,!1),derivationPath:"44'/60'/0'/0/0"}})),expect(C).toHaveBeenCalledWith(expect.objectContaining({input:expect.objectContaining({context:{type:"token",payload:"payload-1"},contextOptional:[],transactionParser:u,subset:c,contextModule:r,derivationPath:"44'/60'/0'/0/0",transaction:a})})),expect(A).toHaveBeenCalledWith(expect.objectContaining({input:{derivationPath:"44'/60'/0'/0/0",serializedTransaction:a,chainId:1,transactionType:P.TransactionType.LEGACY,clearSigningType:E.ClearSigningType.BASIC}})),i()},onError:o})})),it("should be successful while skipping OpenApp",()=>new Promise((i,o)=>{(0,I.setupOpenAppDAMock)(),T("1.15.0",!1,!1);const n=new v.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:a,options:{...d,skipOpenApp:!0},contextModule:r,mapper:l,parser:u}});m.mockResolvedValueOnce({subset:c,type:P.TransactionType.LEGACY}),p.mockResolvedValueOnce({clearSignContexts:[{type:"token",payload:"payload-1"}],clearSignContextsOptional:[],clearSigningType:E.ClearSigningType.BASIC}),C.mockResolvedValueOnce((0,_.Just)(void 0)),A.mockResolvedValueOnce((0,e.CommandResultFactory)({data:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}})),vi.spyOn(n,"extractDependencies").mockReturnValue(N());const s=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.PRE_BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_SUB_CONTEXT_AND_PROVIDE},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction,step:t.SignTransactionDAStep.SIGN_TRANSACTION},status:e.DeviceActionStatus.Pending},{output:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"},status:e.DeviceActionStatus.Completed}];(0,O.testDeviceActionStates)(n,s,g,{onDone:i,onError:o})})),it("should call external dependencies with the correct parameters with the generic parser",()=>new Promise((i,o)=>{(0,I.setupOpenAppDAMock)(),T("1.15.0",!1,!1);const n={...c,chainId:17},s=new v.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:a,options:d,contextModule:r,mapper:l,parser:u}});m.mockResolvedValueOnce({subset:n,type:P.TransactionType.EIP1559}),p.mockResolvedValueOnce({clearSignContexts:[{type:f.ClearSignContextType.TRANSACTION_INFO,payload:"payload-1"},{type:f.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"payload-2"}],clearSigningType:E.ClearSigningType.EIP7730,clearSignContextsOptional:[]}),C.mockResolvedValueOnce((0,_.Just)(void 0)),A.mockResolvedValueOnce((0,e.CommandResultFactory)({data:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}})),vi.spyOn(s,"extractDependencies").mockReturnValue(N());const y=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.ConfirmOpenApp,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.PRE_BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_SUB_CONTEXT_AND_PROVIDE},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_SUB_CONTEXT_AND_PROVIDE},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction,step:t.SignTransactionDAStep.SIGN_TRANSACTION},status:e.DeviceActionStatus.Pending},{output:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"},status:e.DeviceActionStatus.Completed}];(0,O.testDeviceActionStates)(s,y,g,{onError:o,onDone:()=>{expect(m).toHaveBeenCalledWith(expect.objectContaining({input:{mapper:l,transaction:a}})),expect(p).toHaveBeenCalledWith(expect.objectContaining({input:{contextModule:r,options:d,subset:n,transaction:a,appConfig:b("1.15.0",!1,!1),derivationPath:"44'/60'/0'/0/0"}})),expect(C).toHaveBeenCalledTimes(2),expect(C).toHaveBeenNthCalledWith(1,expect.objectContaining({input:{context:{type:f.ClearSignContextType.TRANSACTION_INFO,payload:"payload-1"},contextOptional:[],transactionParser:u,subset:n,contextModule:r,derivationPath:"44'/60'/0'/0/0",transaction:a}})),expect(C).toHaveBeenNthCalledWith(2,expect.objectContaining({input:{context:{type:f.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"payload-2"},contextOptional:[],transactionParser:u,subset:n,contextModule:r,derivationPath:"44'/60'/0'/0/0",transaction:a}})),expect(A).toHaveBeenCalledWith(expect.objectContaining({input:{derivationPath:"44'/60'/0'/0/0",serializedTransaction:a,chainId:n.chainId,transactionType:P.TransactionType.EIP1559,clearSigningType:E.ClearSigningType.EIP7730}})),i()}})})),it("should fallback to blind signing if provideContext return an error",()=>new Promise((i,o)=>{(0,I.setupOpenAppDAMock)(),T("1.15.0",!1,!1);const n=new v.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:a,options:d,contextModule:r,mapper:l,parser:u}});m.mockResolvedValueOnce({subset:c,type:P.TransactionType.LEGACY}),p.mockResolvedValueOnce({clearSignContexts:[{type:f.ClearSignContextType.TRANSACTION_INFO,payload:"payload-1"}],clearSigningType:E.ClearSigningType.EIP7730,clearSignContextsOptional:[]}),C.mockResolvedValueOnce((0,_.Left)(new Error("provideContext error"))),A.mockResolvedValueOnce((0,e.CommandResultFactory)({data:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}})),vi.spyOn(n,"extractDependencies").mockReturnValue(N());const s=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.ConfirmOpenApp,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.PRE_BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_SUB_CONTEXT_AND_PROVIDE},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction,step:t.SignTransactionDAStep.SIGN_TRANSACTION},status:e.DeviceActionStatus.Pending},{output:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"},status:e.DeviceActionStatus.Completed}];(0,O.testDeviceActionStates)(n,s,g,{onError:o,onDone:()=>{expect(p).toHaveBeenCalledWith(expect.objectContaining({input:{contextModule:r,options:d,subset:c,transaction:a,appConfig:b("1.15.0",!1,!1),derivationPath:"44'/60'/0'/0/0"}})),expect(C).toHaveBeenCalledWith(expect.objectContaining({input:{context:{type:f.ClearSignContextType.TRANSACTION_INFO,payload:"payload-1"},contextOptional:[],transactionParser:u,subset:c,contextModule:r,derivationPath:"44'/60'/0'/0/0",transaction:a}})),expect(A).toHaveBeenCalledWith(expect.objectContaining({input:{derivationPath:"44'/60'/0'/0/0",serializedTransaction:a,chainId:c.chainId,transactionType:P.TransactionType.LEGACY,clearSigningType:E.ClearSigningType.EIP7730}})),i()}})}))}),describe("Web3Checks",()=>{it("should call external dependencies with web3Checks enabled and supported",()=>new Promise((i,o)=>{(0,I.setupOpenAppDAMock)(),T("1.16.0",!0,!0);const n=new v.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:a,options:d,contextModule:r,mapper:l,parser:u}});m.mockResolvedValueOnce({subset:c,type:P.TransactionType.LEGACY}),p.mockRejectedValueOnce(new x.InvalidStatusWordError("buildContext error")),vi.spyOn(n,"extractDependencies").mockReturnValue(N());const s=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.ConfirmOpenApp,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.PRE_BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{error:new x.InvalidStatusWordError("buildContext error"),status:e.DeviceActionStatus.Error}];(0,O.testDeviceActionStates)(n,s,g,{onDone:()=>{expect(S).toHaveBeenCalled(),expect(p).toHaveBeenCalledWith(expect.objectContaining({input:{contextModule:r,options:d,subset:c,transaction:a,appConfig:b("1.16.0",!0,!0),derivationPath:"44'/60'/0'/0/0"}})),i()},onError:o})})),it("should call external dependencies with web3Checks supported but disabled",()=>new Promise((i,o)=>{(0,I.setupOpenAppDAMock)(),T("1.16.0",!1,!0);const n=new v.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:a,options:d,contextModule:r,mapper:l,parser:u}});m.mockResolvedValueOnce({subset:c,type:P.TransactionType.LEGACY}),p.mockRejectedValueOnce(new x.InvalidStatusWordError("buildContext error")),vi.spyOn(n,"extractDependencies").mockReturnValue(N());const s=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.ConfirmOpenApp,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.PRE_BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{error:new x.InvalidStatusWordError("buildContext error"),status:e.DeviceActionStatus.Error}];(0,O.testDeviceActionStates)(n,s,g,{onDone:()=>{expect(S).toHaveBeenCalled(),expect(p).toHaveBeenCalledWith(expect.objectContaining({input:{contextModule:r,options:d,subset:c,transaction:a,appConfig:b("1.16.0",!1,!0),derivationPath:"44'/60'/0'/0/0"}})),i()},onError:o})})),it("should call external dependencies with web3Checks opt-in, then enabled",()=>new Promise((i,o)=>{(0,I.setupOpenAppDAMock)(),T("1.16.0",!1,!1);const n=new v.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:a,options:d,contextModule:r,mapper:l,parser:u}});m.mockResolvedValueOnce({subset:c,type:P.TransactionType.LEGACY}),V.mockResolvedValueOnce((0,e.CommandResultFactory)({data:{enabled:!0}})),p.mockRejectedValueOnce(new x.InvalidStatusWordError("buildContext error")),vi.spyOn(n,"extractDependencies").mockReturnValue(N());const s=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.ConfirmOpenApp,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.Web3ChecksOptIn,step:t.SignTransactionDAStep.WEB3_CHECKS_OPT_IN},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.WEB3_CHECKS_OPT_IN_RESULT,result:!0},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.PRE_BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{error:new x.InvalidStatusWordError("buildContext error"),status:e.DeviceActionStatus.Error}];(0,O.testDeviceActionStates)(n,s,g,{onDone:()=>{expect(S).toHaveBeenCalled(),expect(V).toHaveBeenCalled(),expect(p).toHaveBeenCalledWith(expect.objectContaining({input:{contextModule:r,options:d,subset:c,transaction:a,appConfig:b("1.16.0",!0,!1),derivationPath:"44'/60'/0'/0/0"}})),i()},onError:o})})),it("should call external dependencies with web3Checks opt-in, then disabled",()=>new Promise((i,o)=>{(0,I.setupOpenAppDAMock)(),T("1.16.0",!1,!1);const n=new v.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:a,options:d,contextModule:r,mapper:l,parser:u}});m.mockResolvedValueOnce({subset:c,type:P.TransactionType.LEGACY}),V.mockResolvedValueOnce((0,e.CommandResultFactory)({data:{enabled:!1}})),p.mockRejectedValueOnce(new x.InvalidStatusWordError("buildContext error")),vi.spyOn(n,"extractDependencies").mockReturnValue(N());const s=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.ConfirmOpenApp,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.Web3ChecksOptIn,step:t.SignTransactionDAStep.WEB3_CHECKS_OPT_IN},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.WEB3_CHECKS_OPT_IN_RESULT,result:!1},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.PRE_BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{error:new x.InvalidStatusWordError("buildContext error"),status:e.DeviceActionStatus.Error}];(0,O.testDeviceActionStates)(n,s,g,{onDone:()=>{expect(S).toHaveBeenCalled(),expect(V).toHaveBeenCalled(),expect(p).toHaveBeenCalledWith(expect.objectContaining({input:{contextModule:r,options:d,subset:c,transaction:a,appConfig:b("1.16.0",!1,!1),derivationPath:"44'/60'/0'/0/0"}})),i()},onError:o})})),it("should provide web3Checks context if getWeb3Check return a value",()=>new Promise((i,o)=>{(0,I.setupOpenAppDAMock)(),T("1.15.0",!1,!1);const n=new v.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:a,options:d,contextModule:r,mapper:l,parser:u}});m.mockResolvedValueOnce({subset:c,type:P.TransactionType.EIP4844}),p.mockResolvedValueOnce({clearSignContexts:[{type:f.ClearSignContextType.TRANSACTION_INFO,payload:"payload-1"},{type:f.ClearSignContextType.WEB3_CHECK,payload:"0x01020304",certificate:{payload:new Uint8Array,keyUsageNumber:1}}],clearSigningType:E.ClearSigningType.EIP7730,clearSignContextsOptional:[]}),C.mockResolvedValueOnce((0,_.Just)(void 0)),A.mockResolvedValueOnce((0,e.CommandResultFactory)({data:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}})),vi.spyOn(n,"extractDependencies").mockReturnValue(N());const s=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.ConfirmOpenApp,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.PRE_BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_SUB_CONTEXT_AND_PROVIDE},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_SUB_CONTEXT_AND_PROVIDE},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction,step:t.SignTransactionDAStep.SIGN_TRANSACTION},status:e.DeviceActionStatus.Pending},{output:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"},status:e.DeviceActionStatus.Completed}];(0,O.testDeviceActionStates)(n,s,g,{onError:o,onDone:()=>{expect(p).toHaveBeenCalledWith(expect.objectContaining({input:{contextModule:r,options:d,subset:c,transaction:a,appConfig:b("1.15.0",!1,!1),derivationPath:"44'/60'/0'/0/0"}})),expect(C).toHaveBeenCalledTimes(2),expect(C).toHaveBeenNthCalledWith(1,expect.objectContaining({input:{context:{type:f.ClearSignContextType.TRANSACTION_INFO,payload:"payload-1"},contextOptional:[],transactionParser:u,subset:c,transaction:a,contextModule:r,derivationPath:"44'/60'/0'/0/0"}})),expect(C).toHaveBeenNthCalledWith(2,expect.objectContaining({input:{context:{type:f.ClearSignContextType.WEB3_CHECK,payload:"0x01020304",certificate:{payload:new Uint8Array,keyUsageNumber:1}},contextOptional:[],transactionParser:u,subset:c,transaction:a,contextModule:r,derivationPath:"44'/60'/0'/0/0"}})),expect(A).toHaveBeenCalledWith(expect.objectContaining({input:{derivationPath:"44'/60'/0'/0/0",serializedTransaction:a,chainId:c.chainId,transactionType:P.TransactionType.EIP4844,clearSigningType:E.ClearSigningType.EIP7730}})),i()}})}))}),describe("OpenApp errors",()=>{it("should fail if OpenApp throw an error",()=>new Promise((i,o)=>{(0,I.setupOpenAppDAMock)(new e.UnknownDAError("OpenApp error"));const n=new v.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:a,options:d,contextModule:r,mapper:l,parser:u}});vi.spyOn(n,"extractDependencies").mockReturnValue(N());const s=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.ConfirmOpenApp,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{error:new e.UnknownDAError("OpenApp error"),status:e.DeviceActionStatus.Error}];(0,O.testDeviceActionStates)(n,s,g,{onError:o,onDone:()=>{i()}})}))}),describe("PreBuildContext errors",()=>{it("should fail if buildContext throws an error",()=>new Promise((i,o)=>{(0,I.setupOpenAppDAMock)(),T("1.15.0",!1,!1);const n=new v.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:a,options:d,contextModule:r,mapper:l,parser:u}});m.mockRejectedValueOnce(new x.InvalidStatusWordError("preBuildContext error")),vi.spyOn(n,"extractDependencies").mockReturnValue(N());const s=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.ConfirmOpenApp,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.PRE_BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{error:new x.InvalidStatusWordError("preBuildContext error"),status:e.DeviceActionStatus.Error}];(0,O.testDeviceActionStates)(n,s,g,{onError:o,onDone:i})}))}),describe("BuildContext errors",()=>{it("should fail if buildContext throws an error",()=>new Promise((i,o)=>{(0,I.setupOpenAppDAMock)(),T("1.15.0",!1,!1);const n=new v.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:a,options:d,contextModule:r,mapper:l,parser:u}});m.mockResolvedValueOnce({subset:c,type:P.TransactionType.LEGACY}),p.mockRejectedValueOnce(new x.InvalidStatusWordError("buildContext error")),vi.spyOn(n,"extractDependencies").mockReturnValue(N());const s=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.ConfirmOpenApp,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.PRE_BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{error:new x.InvalidStatusWordError("buildContext error"),status:e.DeviceActionStatus.Error}];(0,O.testDeviceActionStates)(n,s,g,{onError:o,onDone:i})}))}),describe("SignTransaction errors",()=>{it("should fail if signTransaction returns an error",()=>new Promise((i,o)=>{(0,I.setupOpenAppDAMock)(),T("1.15.0",!1,!1);const n=new v.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:a,options:d,contextModule:r,mapper:l,parser:u}});m.mockResolvedValueOnce({subset:c,type:P.TransactionType.LEGACY}),p.mockResolvedValueOnce({clearSignContexts:[{type:f.ClearSignContextType.TRANSACTION_INFO,payload:"payload-1"}],clearSignContextsOptional:[],clearSigningType:E.ClearSigningType.EIP7730}),C.mockResolvedValueOnce((0,_.Just)(void 0)),A.mockResolvedValueOnce((0,e.CommandResultFactory)({error:new x.InvalidStatusWordError("signTransaction error")})),vi.spyOn(n,"extractDependencies").mockReturnValue(N());const s=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.ConfirmOpenApp,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.PRE_BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_SUB_CONTEXT_AND_PROVIDE},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction,step:t.SignTransactionDAStep.SIGN_TRANSACTION},status:e.DeviceActionStatus.Pending},{error:new x.InvalidStatusWordError("signTransaction error"),status:e.DeviceActionStatus.Error}];(0,O.testDeviceActionStates)(n,s,g,{onError:o,onDone:i})}))})});
|
|
1
|
+
"use strict";var R=require("@ledgerhq/context-module"),t=require("@ledgerhq/device-management-kit"),I=require("ethers"),T=require("purify-ts"),g=require("rxjs"),O=require("../../../../api/app-binder/SignTransactionDeviceActionTypes"),x=require("../../../../api/model/ClearSigningType"),b=require("../../../../api/model/TransactionType"),P=require("../../../app-binder/device-action/__test-utils__/makeInternalApi"),p=require("../../../app-binder/device-action/__test-utils__/setupOpenAppDAMock"),h=require("../../../app-binder/device-action/__test-utils__/testDeviceActionUntilStep"),u=require("./SignTransactionDeviceAction");vi.mock("@ledgerhq/device-management-kit",async n=>({...await n(),OpenAppDeviceAction:vi.fn(()=>({makeStateMachine:vi.fn()}))}));describe("SignTransactionDeviceAction",()=>{let n;const c={getFieldContext:vi.fn(),getContexts:vi.fn(),getTypedDataFilters:vi.fn(),getWeb3Checks:vi.fn(),getSolanaContext:vi.fn()},r={mapTransactionToSubset:vi.fn()},l={extractValue:vi.fn()},V=vi.fn(),w=vi.fn(),m=vi.fn(),k=vi.fn(),S=vi.fn(),o=vi.fn();function f(){return{getAppConfig:V,web3CheckOptIn:w,parseTransaction:m,buildContexts:k,provideContexts:S,signTransaction:o}}const s=(0,P.makeDeviceActionInternalApiMock)(),d={domain:"domain-name.eth"},i=(0,t.hexaStringToBuffer)(I.Transaction.from({chainId:1n,nonce:0,data:"0x"}).unsignedSerialized),y={chainId:1,data:"0x",selector:"0x",to:"0x",value:0n};function A(e,a,E){return{blindSigningEnabled:!1,web3ChecksEnabled:a,web3ChecksOptIn:E,version:e}}function v(e,a,E){s.getDeviceSessionState.mockReturnValueOnce({sessionStateType:t.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:t.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:e},deviceModelId:t.DeviceModelId.FLEX,isSecureConnectionAllowed:!1}),s.getDeviceModel.mockReturnValueOnce({id:t.DeviceModelId.FLEX}),V.mockResolvedValue((0,t.CommandResultFactory)({data:A(e,a,E)}))}const C=(e,a)=>{if(e[a]?.status!==t.DeviceActionStatus.Pending)throw new Error(`Step ${a} is not pending: ${JSON.stringify(e[a])}`);return e[a]};describe("Happy path",()=>{describe("should sign a transaction",()=>{const e=[{context:{type:R.ClearSignContextType.TRANSACTION_INFO,payload:"payload-1"},subcontextCallbacks:[]},{context:{type:R.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"payload-2"},subcontextCallbacks:[]}];beforeEach(()=>{vi.resetAllMocks(),(0,p.setupOpenAppDAMock)(),v("1.15.0",!1,!1),m.mockResolvedValueOnce({subset:y,type:b.TransactionType.EIP1559}),k.mockResolvedValueOnce({clearSignContexts:e,clearSigningType:x.ClearSigningType.EIP7730}),S.mockResolvedValueOnce((0,T.Just)(void 0)),o.mockResolvedValueOnce((0,t.CommandResultFactory)({data:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}}));const a=new u.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:i,options:d,contextModule:c,mapper:r,parser:l}});vi.spyOn(a,"extractDependencies").mockReturnValue(f()),n=a._execute(s).observable}),it("should open the app",async()=>{const{steps:a}=await(0,h.executeUntilStep)(0,n);expect(C(a,0).intermediateValue.step).toBe(O.SignTransactionDAStep.OPEN_APP)}),it("should confirm open app",async()=>{const{steps:a}=await(0,h.executeUntilStep)(1,n);expect(C(a,1).intermediateValue.requiredUserInteraction).toBe(t.UserInteractionRequired.ConfirmOpenApp)}),it("should get app config",async()=>{const{steps:a}=await(0,h.executeUntilStep)(2,n);expect(C(a,2).intermediateValue.step).toBe(O.SignTransactionDAStep.GET_APP_CONFIG)}),it("should prebuild context",async()=>{const{steps:a}=await(0,h.executeUntilStep)(3,n);expect(C(a,3).intermediateValue.step).toBe(O.SignTransactionDAStep.PARSE_TRANSACTION),expect(m).toHaveBeenCalledTimes(1),expect(m).toHaveBeenNthCalledWith(1,expect.objectContaining({input:{mapper:r,transaction:i}}))}),it("should build context",async()=>{const{steps:a}=await(0,h.executeUntilStep)(4,n);expect(C(a,4).intermediateValue.step).toBe(O.SignTransactionDAStep.BUILD_CONTEXTS),expect(k).toHaveBeenCalledTimes(1),expect(k).toHaveBeenNthCalledWith(1,expect.objectContaining({input:{contextModule:c,parser:l,mapper:r,options:d,subset:y,transaction:i,appConfig:A("1.15.0",!1,!1),derivationPath:"44'/60'/0'/0/0",deviceModelId:t.DeviceModelId.FLEX}}))}),it("should provide context",async()=>{const{steps:a}=await(0,h.executeUntilStep)(5,n);expect(C(a,5).intermediateValue.step).toBe(O.SignTransactionDAStep.PROVIDE_CONTEXTS),expect(S).toHaveBeenCalledTimes(1),expect(S).toHaveBeenNthCalledWith(1,expect.objectContaining({input:{contexts:e,serializedTransaction:i,derivationPath:"44'/60'/0'/0/0"}}))}),it("should sign transaction",async()=>{const{steps:a}=await(0,h.executeUntilStep)(6,n);expect(C(a,6).intermediateValue.step).toBe(O.SignTransactionDAStep.SIGN_TRANSACTION),expect(o).toHaveBeenCalledTimes(1),expect(o).toHaveBeenNthCalledWith(1,expect.objectContaining({input:{derivationPath:"44'/60'/0'/0/0",serializedTransaction:i,chainId:1,transactionType:b.TransactionType.EIP1559,clearSigningType:x.ClearSigningType.EIP7730}}))}),it("should return the signature",async()=>{const a=await(0,g.lastValueFrom)(n);expect(a).toEqual({status:t.DeviceActionStatus.Completed,output:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}})})}),describe("should skip open app",()=>{beforeEach(()=>{vi.resetAllMocks(),(0,p.setupOpenAppDAMock)(),v("1.15.0",!1,!1);const e=new u.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:i,options:{...d,skipOpenApp:!0},contextModule:c,mapper:r,parser:l}});m.mockResolvedValueOnce({subset:y,type:b.TransactionType.EIP1559}),k.mockResolvedValueOnce({clearSignContexts:[],clearSignContextsOptional:[],clearSigningType:x.ClearSigningType.BASIC}),S.mockResolvedValueOnce((0,T.Just)(void 0)),o.mockResolvedValueOnce((0,t.CommandResultFactory)({data:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}})),vi.spyOn(e,"extractDependencies").mockReturnValue(f()),n=e._execute(s).observable}),it("should skip open app and get app config directly",async()=>{const{steps:e}=await(0,h.executeUntilStep)(0,n);expect(C(e,0).intermediateValue.step).toBe(O.SignTransactionDAStep.GET_APP_CONFIG)})}),describe("should opt in to web3 checks",()=>{beforeEach(()=>{vi.resetAllMocks(),(0,p.setupOpenAppDAMock)(),v("1.16.0",!1,!1);const e=new u.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:i,options:d,contextModule:c,mapper:r,parser:l}});vi.spyOn(e,"extractDependencies").mockReturnValue(f()),w.mockResolvedValueOnce((0,t.CommandResultFactory)({data:{enabled:!0}})),n=e._execute(s).observable}),it("should opt in to web3 checks if app config is supported and not already enabled",async()=>{const{steps:e}=await(0,h.executeUntilStep)(4,n);expect(C(e,3).intermediateValue.step).toBe(O.SignTransactionDAStep.WEB3_CHECKS_OPT_IN),expect(w).toHaveBeenCalledTimes(1),expect(C(e,4).intermediateValue.step).toBe(O.SignTransactionDAStep.WEB3_CHECKS_OPT_IN_RESULT),expect(C(e,4).intermediateValue.result).toBe(!0)})}),describe("should not opt in to web3 checks",()=>{beforeEach(()=>{vi.resetAllMocks(),(0,p.setupOpenAppDAMock)();const e=new u.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:i,options:d,contextModule:c,mapper:r,parser:l}});vi.spyOn(e,"extractDependencies").mockReturnValue(f()),n=e._execute(s).observable}),it("should not opt in to web3 checks if app config is not supported",async()=>{v("1.15.0",!1,!1),await(0,h.executeUntilStep)(3,n),expect(w).not.toHaveBeenCalled()}),it("should not opt in to web3 checks if already enabled",async()=>{v("1.16.0",!0,!1),await(0,h.executeUntilStep)(3,n),expect(w).not.toHaveBeenCalled()}),it("should not opt in to web3 checks if already opted out",async()=>{v("1.16.0",!1,!0),await(0,h.executeUntilStep)(3,n),expect(w).not.toHaveBeenCalled()})})}),describe("Error cases",()=>{beforeEach(()=>{vi.resetAllMocks()}),it("should return an error if the open app throw an error",async()=>{(0,p.setupOpenAppDAMock)(new Error("Open app failed")),v("1.15.0",!1,!1);const e=new u.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:i,options:d,contextModule:c,mapper:r,parser:l}});vi.spyOn(e,"extractDependencies").mockReturnValue(f()),n=e._execute(s).observable;const a=await(0,g.lastValueFrom)(n);expect(a).toEqual({status:t.DeviceActionStatus.Error,error:new Error("Open app failed")})}),it("should return an error if the get app config return an error",async()=>{(0,p.setupOpenAppDAMock)(),V.mockResolvedValueOnce((0,t.CommandResultFactory)({error:new t.InvalidStatusWordError("Get app config failed")}));const e=new u.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:i,options:d,contextModule:c,mapper:r,parser:l}});vi.spyOn(e,"extractDependencies").mockReturnValue(f()),n=e._execute(s).observable;const a=await(0,g.lastValueFrom)(n);expect(a).toEqual({status:t.DeviceActionStatus.Error,error:new t.InvalidStatusWordError("Get app config failed")})}),it("should return an error if the get app config throw an error",async()=>{(0,p.setupOpenAppDAMock)(),V.mockRejectedValueOnce(new Error("Get app config failed"));const e=new u.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:i,options:d,contextModule:c,mapper:r,parser:l}});vi.spyOn(e,"extractDependencies").mockReturnValue(f()),n=e._execute(s).observable;const a=await(0,g.lastValueFrom)(n);expect(a).toEqual({status:t.DeviceActionStatus.Error,error:new Error("Get app config failed")})}),it("should ignore the web3checks result if the command fails",async()=>{(0,p.setupOpenAppDAMock)(),v("1.16.0",!1,!1);const e=new u.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:i,options:d,contextModule:c,mapper:r,parser:l}});vi.spyOn(e,"extractDependencies").mockReturnValue(f()),w.mockResolvedValueOnce((0,t.CommandResultFactory)({error:new t.InvalidStatusWordError("web3 check opt in failed")})),m.mockResolvedValueOnce({subset:y,type:b.TransactionType.EIP1559}),k.mockResolvedValueOnce({clearSignContexts:[],clearSignContextsOptional:[],clearSigningType:x.ClearSigningType.BASIC}),o.mockResolvedValueOnce((0,t.CommandResultFactory)({data:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}})),n=e._execute(s).observable;const a=await(0,g.lastValueFrom)(n);expect(a).toEqual({status:t.DeviceActionStatus.Completed,output:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}})}),it("should return an error if the parse transaction throw an error",async()=>{(0,p.setupOpenAppDAMock)(),v("1.15.0",!1,!1);const e=new u.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:i,options:d,contextModule:c,mapper:r,parser:l}});vi.spyOn(e,"extractDependencies").mockReturnValue(f()),m.mockRejectedValueOnce(new Error("Parse transaction failed")),n=e._execute(s).observable;const a=await(0,g.lastValueFrom)(n);expect(a).toEqual({status:t.DeviceActionStatus.Error,error:new Error("Parse transaction failed")})}),it("should blind sign if the first sign transaction fails and the second sign transaction succeeds",async()=>{(0,p.setupOpenAppDAMock)(),v("1.15.0",!1,!1);const e=new u.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:i,options:d,contextModule:c,mapper:r,parser:l}});vi.spyOn(e,"extractDependencies").mockReturnValue(f()),m.mockResolvedValueOnce({subset:y,type:b.TransactionType.EIP1559}),k.mockResolvedValueOnce({clearSignContexts:[],clearSignContextsOptional:[],clearSigningType:x.ClearSigningType.BASIC}),S.mockResolvedValueOnce((0,T.Just)(void 0)),o.mockResolvedValueOnce((0,t.CommandResultFactory)({error:new t.InvalidStatusWordError("Sign transaction failed")})),o.mockResolvedValueOnce((0,t.CommandResultFactory)({data:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad789",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}})),n=e._execute(s).observable;const a=await(0,g.lastValueFrom)(n);expect(a).toEqual({status:t.DeviceActionStatus.Completed,output:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad789",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}})}),it("should blind sign if the first sign transaction throws an error and the second sign transaction succeeds",async()=>{(0,p.setupOpenAppDAMock)(),v("1.15.0",!1,!1);const e=new u.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:i,options:d,contextModule:c,mapper:r,parser:l}});vi.spyOn(e,"extractDependencies").mockReturnValue(f()),m.mockResolvedValueOnce({subset:y,type:b.TransactionType.EIP1559}),k.mockResolvedValueOnce({clearSignContexts:[],clearSignContextsOptional:[],clearSigningType:x.ClearSigningType.EIP7730}),S.mockResolvedValueOnce((0,T.Just)(void 0)),o.mockRejectedValueOnce(new Error("Sign transaction failed")),o.mockResolvedValueOnce((0,t.CommandResultFactory)({data:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad789",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}})),n=e._execute(s).observable;const a=await(0,g.lastValueFrom)(n);expect(a).toEqual({status:t.DeviceActionStatus.Completed,output:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad789",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}}),expect(o).toHaveBeenCalledTimes(2),expect(o).toHaveBeenNthCalledWith(1,expect.objectContaining({input:{derivationPath:"44'/60'/0'/0/0",serializedTransaction:i,chainId:1,transactionType:b.TransactionType.EIP1559,clearSigningType:x.ClearSigningType.EIP7730}})),expect(o).toHaveBeenNthCalledWith(2,expect.objectContaining({input:{derivationPath:"44'/60'/0'/0/0",serializedTransaction:i,chainId:1,transactionType:b.TransactionType.EIP1559,clearSigningType:x.ClearSigningType.BASIC}}))}),it("should return an error if the sign transaction return two times an error",async()=>{(0,p.setupOpenAppDAMock)(),v("1.15.0",!1,!1);const e=new u.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:i,options:d,contextModule:c,mapper:r,parser:l}});vi.spyOn(e,"extractDependencies").mockReturnValue(f()),m.mockResolvedValueOnce({subset:y,type:b.TransactionType.EIP1559}),k.mockResolvedValueOnce({clearSignContexts:[],clearSignContextsOptional:[],clearSigningType:x.ClearSigningType.BASIC}),S.mockResolvedValueOnce((0,T.Just)(void 0)),o.mockResolvedValueOnce((0,t.CommandResultFactory)({error:new t.InvalidStatusWordError("Sign transaction failed")})),o.mockResolvedValueOnce((0,t.CommandResultFactory)({error:new t.InvalidStatusWordError("Blind sign transaction failed")})),n=e._execute(s).observable;const a=await(0,g.lastValueFrom)(n);expect(a).toEqual({status:t.DeviceActionStatus.Error,error:new t.InvalidStatusWordError("Blind sign transaction failed")})}),it("should return an error if the blind sign transaction fallback throws an error",async()=>{(0,p.setupOpenAppDAMock)(),v("1.15.0",!1,!1);const e=new u.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:i,options:d,contextModule:c,mapper:r,parser:l}});vi.spyOn(e,"extractDependencies").mockReturnValue(f()),m.mockResolvedValueOnce({subset:y,type:b.TransactionType.EIP1559}),k.mockResolvedValueOnce({clearSignContexts:[],clearSignContextsOptional:[],clearSigningType:x.ClearSigningType.BASIC}),S.mockResolvedValueOnce((0,T.Just)(void 0)),o.mockResolvedValueOnce((0,t.CommandResultFactory)({error:new t.InvalidStatusWordError("Sign transaction failed")})),o.mockRejectedValueOnce(new Error("Blind sign transaction fallback failed")),n=e._execute(s).observable;const a=await(0,g.lastValueFrom)(n);expect(a).toEqual({status:t.DeviceActionStatus.Error,error:new Error("Blind sign transaction fallback failed")})}),it("should return an error without trying blind sign fallback when user refuses transaction (error code 6985)",async()=>{(0,p.setupOpenAppDAMock)(),v("1.15.0",!1,!1);const e=new u.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:i,options:d,contextModule:c,mapper:r,parser:l}});vi.spyOn(e,"extractDependencies").mockReturnValue(f()),m.mockResolvedValueOnce({subset:y,type:b.TransactionType.EIP1559}),k.mockResolvedValueOnce({clearSignContexts:[],clearSignContextsOptional:[],clearSigningType:x.ClearSigningType.BASIC}),S.mockResolvedValueOnce((0,T.Just)(void 0));const a=new t.InvalidStatusWordError("User refused transaction");a.errorCode="6985",o.mockResolvedValueOnce((0,t.CommandResultFactory)({error:a})),n=e._execute(s).observable;const E=await(0,g.lastValueFrom)(n);expect(E).toEqual({status:t.DeviceActionStatus.Error,error:a}),expect(o).toHaveBeenCalledTimes(1)}),it("should try blind sign fallback when error is not user refusal (different error code)",async()=>{(0,p.setupOpenAppDAMock)(),v("1.15.0",!1,!1);const e=new u.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:i,options:d,contextModule:c,mapper:r,parser:l}});vi.spyOn(e,"extractDependencies").mockReturnValue(f()),m.mockResolvedValueOnce({subset:y,type:b.TransactionType.EIP1559}),k.mockResolvedValueOnce({clearSignContexts:[],clearSignContextsOptional:[],clearSigningType:x.ClearSigningType.EIP7730}),S.mockResolvedValueOnce((0,T.Just)(void 0));const a=new t.InvalidStatusWordError("Some other error");a.errorCode="6A80",o.mockResolvedValueOnce((0,t.CommandResultFactory)({error:a})),o.mockResolvedValueOnce((0,t.CommandResultFactory)({data:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad789",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}})),n=e._execute(s).observable;const E=await(0,g.lastValueFrom)(n);expect(E).toEqual({status:t.DeviceActionStatus.Completed,output:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad789",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}}),expect(o).toHaveBeenCalledTimes(2),expect(o).toHaveBeenNthCalledWith(1,expect.objectContaining({input:{derivationPath:"44'/60'/0'/0/0",serializedTransaction:i,chainId:1,transactionType:b.TransactionType.EIP1559,clearSigningType:x.ClearSigningType.EIP7730}})),expect(o).toHaveBeenNthCalledWith(2,expect.objectContaining({input:{derivationPath:"44'/60'/0'/0/0",serializedTransaction:i,chainId:1,transactionType:b.TransactionType.EIP1559,clearSigningType:x.ClearSigningType.BASIC}}))})})});
|
|
2
2
|
//# sourceMappingURL=SignTransactionDeviceAction.test.js.map
|