@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/task/ProvideContextTask.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n type ClearSignContextSuccess,\n ClearSignContextType,\n} from \"@ledgerhq/context-module\";\nimport {\n type CommandResult,\n CommandResultFactory,\n type InternalApi,\n InvalidStatusWordError,\n LoadCertificateCommand,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { ProvideEnumCommand } from \"@internal/app-binder/command/ProvideEnumCommand\";\nimport {\n NetworkConfigurationType,\n ProvideNetworkConfigurationCommand,\n} from \"@internal/app-binder/command/ProvideNetworkConfigurationCommand\";\nimport { ProvideNFTInformationCommand } from \"@internal/app-binder/command/ProvideNFTInformationCommand\";\nimport { ProvideProxyInfoCommand } from \"@internal/app-binder/command/ProvideProxyInfoCommand\";\nimport {\n ProvideSafeAccountCommand,\n ProvideSafeAccountCommandType,\n} from \"@internal/app-binder/command/ProvideSafeAccountCommand\";\nimport { ProvideTokenInformationCommand } from \"@internal/app-binder/command/ProvideTokenInformationCommand\";\nimport { ProvideTransactionFieldDescriptionCommand } from \"@internal/app-binder/command/ProvideTransactionFieldDescriptionCommand\";\nimport { ProvideTransactionInformationCommand } from \"@internal/app-binder/command/ProvideTransactionInformationCommand\";\nimport { ProvideTrustedNameCommand } from \"@internal/app-binder/command/ProvideTrustedNameCommand\";\nimport { ProvideWeb3CheckCommand } from \"@internal/app-binder/command/ProvideWeb3CheckCommand\";\nimport { SetExternalPluginCommand } from \"@internal/app-binder/command/SetExternalPluginCommand\";\nimport { SetPluginCommand } from \"@internal/app-binder/command/SetPluginCommand\";\nimport { type EthErrorCodes } from \"@internal/app-binder/command/utils/ethAppErrors\";\n\nimport {\n SendPayloadInChunksTask,\n type SendPayloadInChunksTaskArgs,\n} from \"./SendPayloadInChunksTask\";\n\nexport type ProvideContextTaskArgs = {\n /**\n * The clear sign context to provide.\n */\n context: ClearSignContextSuccess;\n};\n\nexport type ProvideContextTaskResult = CommandResult<unknown, EthErrorCodes>;\n\n/**\n * This task is responsible for providing a single context to the device.\n */\nexport class ProvideContextTask {\n constructor(\n private _api: InternalApi,\n private _args: ProvideContextTaskArgs,\n private _sendPayloadInChunksTaskFactory = (\n api: InternalApi,\n args: SendPayloadInChunksTaskArgs<unknown>,\n ) => new SendPayloadInChunksTask(api, args),\n ) {}\n\n async run(): Promise<ProvideContextTaskResult> {\n const { type, payload, certificate } = this._args.context;\n\n // if a certificate is provided, we load it before sending the command\n if (certificate) {\n await this._api.sendCommand(\n new LoadCertificateCommand({\n keyUsage: certificate.keyUsageNumber,\n certificate: certificate.payload,\n }),\n );\n }\n\n switch (type) {\n case ClearSignContextType.PLUGIN: {\n return await this._api.sendCommand(new SetPluginCommand({ payload }));\n }\n case ClearSignContextType.EXTERNAL_PLUGIN: {\n return await this._api.sendCommand(\n new SetExternalPluginCommand({ payload }),\n );\n }\n case ClearSignContextType.NFT: {\n return await this._api.sendCommand(\n new ProvideNFTInformationCommand({ payload }),\n );\n }\n case ClearSignContextType.TOKEN: {\n return await this._api.sendCommand(\n new ProvideTokenInformationCommand({ payload }),\n );\n }\n case ClearSignContextType.TRANSACTION_INFO: {\n const transactionInfoResult =\n await this._sendPayloadInChunksTaskFactory(this._api, {\n payload,\n commandFactory: (args) =>\n new ProvideTransactionInformationCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n\n return transactionInfoResult;\n }\n case ClearSignContextType.TRUSTED_NAME: {\n return this._sendPayloadInChunksTaskFactory(this._api, {\n payload,\n commandFactory: (args) =>\n new ProvideTrustedNameCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n }\n case ClearSignContextType.ENUM:\n return this._sendPayloadInChunksTaskFactory(this._api, {\n payload,\n commandFactory: (args) =>\n new ProvideEnumCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n case ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION:\n return this._sendPayloadInChunksTaskFactory(this._api, {\n payload,\n commandFactory: (args) =>\n new ProvideTransactionFieldDescriptionCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n case ClearSignContextType.WEB3_CHECK:\n return this._sendPayloadInChunksTaskFactory(this._api, {\n payload,\n commandFactory: (args) =>\n new ProvideWeb3CheckCommand({\n payload: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n case ClearSignContextType.PROXY_INFO:\n return this._sendPayloadInChunksTaskFactory(this._api, {\n payload,\n commandFactory: (args) =>\n new ProvideProxyInfoCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n case ClearSignContextType.DYNAMIC_NETWORK:\n // Dynamic network configuration uses the existing ProvideNetworkConfiguration command\n // but is provided as part of the context flow\n return this._sendPayloadInChunksTaskFactory(this._api, {\n payload,\n commandFactory: (args) =>\n new ProvideNetworkConfigurationCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n configurationType: NetworkConfigurationType.CONFIGURATION,\n }),\n }).run();\n case ClearSignContextType.DYNAMIC_NETWORK_ICON: {\n return this._sendPayloadInChunksTaskFactory(this._api, {\n payload,\n commandFactory: (args) =>\n new ProvideNetworkConfigurationCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n configurationType: NetworkConfigurationType.ICON,\n }),\n withPayloadLength: false,\n }).run();\n }\n case ClearSignContextType.SAFE:\n return this._sendPayloadInChunksTaskFactory(this._api, {\n payload,\n commandFactory: (args) =>\n new ProvideSafeAccountCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n type: ProvideSafeAccountCommandType.SAFE_DESCRIPTOR,\n }),\n }).run();\n case ClearSignContextType.SIGNER:\n return this._sendPayloadInChunksTaskFactory(this._api, {\n payload,\n commandFactory: (args) =>\n new ProvideSafeAccountCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n type: ProvideSafeAccountCommandType.SIGNER_DESCRIPTOR,\n }),\n }).run();\n default: {\n const uncoveredType: never = type;\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n `The context type [${uncoveredType}] is not covered`,\n ),\n });\n }\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["ProvideContextTask_exports", "__export", "ProvideContextTask", "__toCommonJS", "import_context_module", "import_device_management_kit", "import_ProvideEnumCommand", "import_ProvideNetworkConfigurationCommand", "import_ProvideNFTInformationCommand", "import_ProvideProxyInfoCommand", "import_ProvideSafeAccountCommand", "import_ProvideTokenInformationCommand", "import_ProvideTransactionFieldDescriptionCommand", "import_ProvideTransactionInformationCommand", "import_ProvideTrustedNameCommand", "import_ProvideWeb3CheckCommand", "import_SetExternalPluginCommand", "import_SetPluginCommand", "import_SendPayloadInChunksTask", "_api", "_args", "_sendPayloadInChunksTaskFactory", "api", "args", "type", "payload", "certificate", "uncoveredType"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var a=require("@ledgerhq/context-module"),m=require("@ledgerhq/device-management-kit"),h=require("../../app-binder/command/ProvideEnumCommand"),y=require("../../app-binder/command/ProvideNetworkConfigurationCommand"),f=require("../../app-binder/command/ProvideNFTInformationCommand"),v=require("../../app-binder/command/ProvideProxyInfoCommand"),u=require("../../app-binder/command/ProvideSafeAccountCommand"),x=require("../../app-binder/command/ProvideTokenInformationCommand"),g=require("../../app-binder/command/ProvideTransactionFieldDescriptionCommand"),T=require("../../app-binder/command/ProvideTransactionInformationCommand"),w=require("../../app-binder/command/ProvideTrustedNameCommand"),E=require("../../app-binder/command/ProvideWeb3CheckCommand"),A=require("../../app-binder/command/SetExternalPluginCommand"),I=require("../../app-binder/command/SetPluginCommand"),P=require("../../app-binder/device-action/__test-utils__/makeInternalApi"),d=require("./ProvideContextTask"),N=require("./SendPayloadInChunksTask");describe("ProvideContextTask",()=>{const e=(0,P.makeDeviceActionInternalApiMock)(),n=(0,m.CommandResultFactory)({data:void 0}),k=(0,m.CommandResultFactory)({data:void 0,error:{}});beforeEach(()=>{vi.resetAllMocks()}),describe("run",()=>{const r=vi.fn(),s=vi.fn();beforeEach(()=>{vi.clearAllMocks(),s.mockImplementation((t,c)=>({run:()=>r(t,c)}))}),describe("contexts with sendCommand",()=>{it.each([[a.ClearSignContextType.PLUGIN,I.SetPluginCommand],[a.ClearSignContextType.EXTERNAL_PLUGIN,A.SetExternalPluginCommand],[a.ClearSignContextType.NFT,f.ProvideNFTInformationCommand],[a.ClearSignContextType.TOKEN,x.ProvideTokenInformationCommand]])("should provide context by calling sendCommand for a %s context",async(t,c)=>{const o={context:{type:t,payload:"payload"}};e.sendCommand.mockResolvedValue(n);const i=await new d.ProvideContextTask(e,o,s).run();expect(i).toEqual(n),expect(e.sendCommand).toHaveBeenCalledTimes(1),expect(e.sendCommand).toHaveBeenCalledWith(expect.any(c))})}),describe("contexts with sendPayloadInChunksTask",()=>{it.each([[a.ClearSignContextType.TRANSACTION_INFO,T.ProvideTransactionInformationCommand],[a.ClearSignContextType.TRUSTED_NAME,w.ProvideTrustedNameCommand],[a.ClearSignContextType.ENUM,h.ProvideEnumCommand],[a.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,g.ProvideTransactionFieldDescriptionCommand],[a.ClearSignContextType.WEB3_CHECK,E.ProvideWeb3CheckCommand],[a.ClearSignContextType.PROXY_INFO,v.ProvideProxyInfoCommand]])("should provide context by calling sendPayloadInChunksTask for a %s context",async(t,c)=>{const o={context:{type:t,payload:"payload"}};r.mockResolvedValue(n);const i=await new d.ProvideContextTask(e,o,s).run();expect(i).toEqual(n),expect(r).toHaveBeenCalledTimes(1),expect(r).toHaveBeenCalledWith(e,{payload:"payload",commandFactory:expect.any(Function)});const l=s.mock.calls[0][1].commandFactory,F={chunkedData:new Uint8Array([1,2,3]),isFirstChunk:!0},R=l(F);expect(R).toBeInstanceOf(c)}),it("should provide context for DYNAMIC_NETWORK with correct configuration type",async()=>{const t={context:{type:a.ClearSignContextType.DYNAMIC_NETWORK,payload:"payload"}};r.mockResolvedValue(n);const o=await new d.ProvideContextTask(e,t,s).run();expect(o).toEqual(n),expect(r).toHaveBeenCalledTimes(1);const i=s.mock.calls[0][1].commandFactory,p={chunkedData:new Uint8Array([1,2,3]),isFirstChunk:!0},l=i(p);expect(l).toBeInstanceOf(y.ProvideNetworkConfigurationCommand),expect(l.args.configurationType).toBe(y.NetworkConfigurationType.CONFIGURATION)}),it("should provide context for DYNAMIC_NETWORK_ICON with correct configuration type and withPayloadLength",async()=>{const t={context:{type:a.ClearSignContextType.DYNAMIC_NETWORK_ICON,payload:"payload"}};r.mockResolvedValue(n);const o=await new d.ProvideContextTask(e,t,s).run();expect(o).toEqual(n),expect(r).toHaveBeenCalledTimes(1),expect(r).toHaveBeenCalledWith(e,{payload:"payload",commandFactory:expect.any(Function),withPayloadLength:!1});const i=s.mock.calls[0][1].commandFactory,p={chunkedData:new Uint8Array([1,2,3]),isFirstChunk:!0},l=i(p);expect(l).toBeInstanceOf(y.ProvideNetworkConfigurationCommand),expect(l.args.configurationType).toBe(y.NetworkConfigurationType.ICON)}),it("should provide context for SAFE with correct type",async()=>{const t={context:{type:a.ClearSignContextType.SAFE,payload:"payload"}};r.mockResolvedValue(n);const o=await new d.ProvideContextTask(e,t,s).run();expect(o).toEqual(n),expect(r).toHaveBeenCalledTimes(1);const i=s.mock.calls[0][1].commandFactory,p={chunkedData:new Uint8Array([1,2,3]),isFirstChunk:!0},l=i(p);expect(l).toBeInstanceOf(u.ProvideSafeAccountCommand),expect(l.args.type).toBe(u.ProvideSafeAccountCommandType.SAFE_DESCRIPTOR)}),it("should provide context for SIGNER with correct type",async()=>{const t={context:{type:a.ClearSignContextType.SIGNER,payload:"payload"}};r.mockResolvedValue(n);const o=await new d.ProvideContextTask(e,t,s).run();expect(o).toEqual(n),expect(r).toHaveBeenCalledTimes(1);const i=s.mock.calls[0][1].commandFactory,p={chunkedData:new Uint8Array([1,2,3]),isFirstChunk:!0},l=i(p);expect(l).toBeInstanceOf(u.ProvideSafeAccountCommand),expect(l.args.type).toBe(u.ProvideSafeAccountCommandType.SIGNER_DESCRIPTOR)})}),describe("with certificate",()=>{it("should load certificate before providing context when certificate is present",async()=>{const t={context:{type:a.ClearSignContextType.TOKEN,payload:"payload",certificate:{keyUsageNumber:1,payload:new Uint8Array([1,2,3])}}};e.sendCommand.mockResolvedValue(n);const o=await new d.ProvideContextTask(e,t,s).run();expect(o).toEqual(n),expect(e.sendCommand).toHaveBeenCalledTimes(2),expect(e.sendCommand).toHaveBeenNthCalledWith(1,expect.any(m.LoadCertificateCommand)),expect(e.sendCommand).toHaveBeenNthCalledWith(2,expect.any(x.ProvideTokenInformationCommand))}),it("should load certificate with sendPayloadInChunksTask context",async()=>{const t={context:{type:a.ClearSignContextType.TRANSACTION_INFO,payload:"payload",certificate:{keyUsageNumber:2,payload:new Uint8Array([4,5,6])}}};e.sendCommand.mockResolvedValue(n),r.mockResolvedValue(n);const o=await new d.ProvideContextTask(e,t,s).run();expect(o).toEqual(n),expect(e.sendCommand).toHaveBeenCalledTimes(1),expect(e.sendCommand).toHaveBeenCalledWith(expect.any(m.LoadCertificateCommand)),expect(r).toHaveBeenCalledTimes(1)}),it("should not load certificate when not present",async()=>{const t={context:{type:a.ClearSignContextType.TOKEN,payload:"payload"}};e.sendCommand.mockResolvedValue(n);const o=await new d.ProvideContextTask(e,t,s).run();expect(o).toEqual(n),expect(e.sendCommand).toHaveBeenCalledTimes(1),expect(e.sendCommand).toHaveBeenCalledWith(expect.any(x.ProvideTokenInformationCommand))})}),describe("error handling",()=>{it("should return error when sendCommand fails",async()=>{const t={context:{type:a.ClearSignContextType.NFT,payload:"payload"}};e.sendCommand.mockResolvedValue(k);const o=await new d.ProvideContextTask(e,t,s).run();expect(o).toEqual(k)}),it("should return error when sendPayloadInChunksTask fails",async()=>{const t={context:{type:a.ClearSignContextType.TRUSTED_NAME,payload:"payload"}};r.mockResolvedValue(k);const o=await new d.ProvideContextTask(e,t,s).run();expect(o).toEqual(k)}),it("should return error for unsupported context type",async()=>{const t={context:{type:"unsupported",payload:"payload"}},o=await new d.ProvideContextTask(e,t,s).run();expect(o).toEqual((0,m.CommandResultFactory)({error:new m.InvalidStatusWordError("The context type [unsupported] is not covered")}))})}),describe("factory",()=>{it("should have a default sendPayloadInChunksTaskFactory",()=>{const t={context:{type:a.ClearSignContextType.TOKEN,payload:"payload"}},c=new d.ProvideContextTask(e,t);expect(c._sendPayloadInChunksTaskFactory).toBeDefined();const o=c._sendPayloadInChunksTaskFactory(e,{payload:"payload",commandFactory:()=>new T.ProvideTransactionInformationCommand({data:new Uint8Array,isFirstChunk:!0})});expect(o).toBeInstanceOf(N.SendPayloadInChunksTask)})})})});
|
|
2
|
+
//# sourceMappingURL=ProvideContextTask.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/internal/app-binder/task/ProvideContextTask.test.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n type ClearSignContextSuccess,\n ClearSignContextType,\n} from \"@ledgerhq/context-module\";\nimport {\n CommandResultFactory,\n type InternalApi,\n InvalidStatusWordError,\n LoadCertificateCommand,\n type UnknownDeviceExchangeError,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { ProvideEnumCommand } from \"@internal/app-binder/command/ProvideEnumCommand\";\nimport {\n NetworkConfigurationType,\n ProvideNetworkConfigurationCommand,\n} from \"@internal/app-binder/command/ProvideNetworkConfigurationCommand\";\nimport { ProvideNFTInformationCommand } from \"@internal/app-binder/command/ProvideNFTInformationCommand\";\nimport { ProvideProxyInfoCommand } from \"@internal/app-binder/command/ProvideProxyInfoCommand\";\nimport {\n ProvideSafeAccountCommand,\n ProvideSafeAccountCommandType,\n} from \"@internal/app-binder/command/ProvideSafeAccountCommand\";\nimport { ProvideTokenInformationCommand } from \"@internal/app-binder/command/ProvideTokenInformationCommand\";\nimport { ProvideTransactionFieldDescriptionCommand } from \"@internal/app-binder/command/ProvideTransactionFieldDescriptionCommand\";\nimport { ProvideTransactionInformationCommand } from \"@internal/app-binder/command/ProvideTransactionInformationCommand\";\nimport { ProvideTrustedNameCommand } from \"@internal/app-binder/command/ProvideTrustedNameCommand\";\nimport { ProvideWeb3CheckCommand } from \"@internal/app-binder/command/ProvideWeb3CheckCommand\";\nimport { SetExternalPluginCommand } from \"@internal/app-binder/command/SetExternalPluginCommand\";\nimport { SetPluginCommand } from \"@internal/app-binder/command/SetPluginCommand\";\nimport { type EthErrorCodes } from \"@internal/app-binder/command/utils/ethAppErrors\";\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\n\nimport {\n ProvideContextTask,\n type ProvideContextTaskArgs,\n} from \"./ProvideContextTask\";\nimport {\n SendPayloadInChunksTask,\n type SendPayloadInChunksTaskArgs,\n} from \"./SendPayloadInChunksTask\";\n\ndescribe(\"ProvideContextTask\", () => {\n const api = makeDeviceActionInternalApiMock();\n const successResult = CommandResultFactory<void, EthErrorCodes>({\n data: undefined,\n });\n const errorResult = CommandResultFactory<void, EthErrorCodes>({\n data: undefined,\n error: {} as UnknownDeviceExchangeError,\n });\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"run\", () => {\n const sendPayloadInChunksRunMock = vi.fn();\n const sendPayloadInChunksTaskMockFactory = vi.fn();\n\n beforeEach(() => {\n vi.clearAllMocks();\n sendPayloadInChunksTaskMockFactory.mockImplementation(\n (a: InternalApi, args: SendPayloadInChunksTaskArgs<unknown>) =>\n ({\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n run: () => sendPayloadInChunksRunMock(a, args),\n }) as unknown as SendPayloadInChunksTask<unknown>,\n );\n });\n\n describe(\"contexts with sendCommand\", () => {\n it.each([\n [ClearSignContextType.PLUGIN, SetPluginCommand],\n [ClearSignContextType.EXTERNAL_PLUGIN, SetExternalPluginCommand],\n [ClearSignContextType.NFT, ProvideNFTInformationCommand],\n [ClearSignContextType.TOKEN, ProvideTokenInformationCommand],\n ] as const)(\n \"should provide context by calling sendCommand for a %s context\",\n async (contextType, commandClass) => {\n // GIVEN\n const args: ProvideContextTaskArgs = {\n context: {\n type: contextType,\n payload: \"payload\",\n },\n };\n api.sendCommand.mockResolvedValue(successResult);\n\n // WHEN\n const task = new ProvideContextTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(successResult);\n expect(api.sendCommand).toHaveBeenCalledTimes(1);\n expect(api.sendCommand).toHaveBeenCalledWith(\n expect.any(commandClass),\n );\n },\n );\n });\n\n describe(\"contexts with sendPayloadInChunksTask\", () => {\n it.each([\n [\n ClearSignContextType.TRANSACTION_INFO,\n ProvideTransactionInformationCommand,\n ],\n [ClearSignContextType.TRUSTED_NAME, ProvideTrustedNameCommand],\n [ClearSignContextType.ENUM, ProvideEnumCommand],\n [\n ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n ProvideTransactionFieldDescriptionCommand,\n ],\n [ClearSignContextType.WEB3_CHECK, ProvideWeb3CheckCommand],\n [ClearSignContextType.PROXY_INFO, ProvideProxyInfoCommand],\n ] as const)(\n \"should provide context by calling sendPayloadInChunksTask for a %s context\",\n async (contextType, commandClass) => {\n // GIVEN\n const args: ProvideContextTaskArgs = {\n context: {\n type: contextType,\n payload: \"payload\",\n } as ClearSignContextSuccess<typeof contextType>,\n };\n sendPayloadInChunksRunMock.mockResolvedValue(successResult);\n\n // WHEN\n const task = new ProvideContextTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(successResult);\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledTimes(1);\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledWith(api, {\n payload: \"payload\",\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n commandFactory: expect.any(Function),\n });\n\n // Test that the commandFactory returns the correct command class\n const factoryCall = sendPayloadInChunksTaskMockFactory.mock.calls[0]!;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const commandFactory = factoryCall[1].commandFactory;\n const mockArgs = {\n chunkedData: new Uint8Array([1, 2, 3]),\n isFirstChunk: true,\n };\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n const command = commandFactory(mockArgs);\n expect(command).toBeInstanceOf(commandClass);\n },\n );\n\n it(\"should provide context for DYNAMIC_NETWORK with correct configuration type\", async () => {\n // GIVEN\n const args: ProvideContextTaskArgs = {\n context: {\n type: ClearSignContextType.DYNAMIC_NETWORK,\n payload: \"payload\",\n },\n };\n sendPayloadInChunksRunMock.mockResolvedValue(successResult);\n\n // WHEN\n const task = new ProvideContextTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(successResult);\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledTimes(1);\n\n // Test that the commandFactory returns ProvideNetworkConfigurationCommand with CONFIGURATION type\n const factoryCall = sendPayloadInChunksTaskMockFactory.mock.calls[0]!;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const commandFactory = factoryCall[1].commandFactory;\n const mockArgs = {\n chunkedData: new Uint8Array([1, 2, 3]),\n isFirstChunk: true,\n };\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n const command = commandFactory(mockArgs);\n expect(command).toBeInstanceOf(ProvideNetworkConfigurationCommand);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n expect(command.args.configurationType).toBe(\n NetworkConfigurationType.CONFIGURATION,\n );\n });\n\n it(\"should provide context for DYNAMIC_NETWORK_ICON with correct configuration type and withPayloadLength\", async () => {\n // GIVEN\n const args: ProvideContextTaskArgs = {\n context: {\n type: ClearSignContextType.DYNAMIC_NETWORK_ICON,\n payload: \"payload\",\n },\n };\n sendPayloadInChunksRunMock.mockResolvedValue(successResult);\n\n // WHEN\n const task = new ProvideContextTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(successResult);\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledTimes(1);\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledWith(api, {\n payload: \"payload\",\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n commandFactory: expect.any(Function),\n withPayloadLength: false,\n });\n\n // Test that the commandFactory returns ProvideNetworkConfigurationCommand with ICON type\n const factoryCall = sendPayloadInChunksTaskMockFactory.mock.calls[0]!;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const commandFactory = factoryCall[1].commandFactory;\n const mockArgs = {\n chunkedData: new Uint8Array([1, 2, 3]),\n isFirstChunk: true,\n };\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n const command = commandFactory(mockArgs);\n expect(command).toBeInstanceOf(ProvideNetworkConfigurationCommand);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n expect(command.args.configurationType).toBe(\n NetworkConfigurationType.ICON,\n );\n });\n\n it(\"should provide context for SAFE with correct type\", async () => {\n // GIVEN\n const args: ProvideContextTaskArgs = {\n context: {\n type: ClearSignContextType.SAFE,\n payload: \"payload\",\n },\n };\n sendPayloadInChunksRunMock.mockResolvedValue(successResult);\n\n // WHEN\n const task = new ProvideContextTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(successResult);\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledTimes(1);\n\n // Test that the commandFactory returns ProvideSafeAccountCommand with SAFE_DESCRIPTOR type\n const factoryCall = sendPayloadInChunksTaskMockFactory.mock.calls[0]!;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const commandFactory = factoryCall[1].commandFactory;\n const mockArgs = {\n chunkedData: new Uint8Array([1, 2, 3]),\n isFirstChunk: true,\n };\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n const command = commandFactory(mockArgs);\n expect(command).toBeInstanceOf(ProvideSafeAccountCommand);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n expect(command.args.type).toBe(\n ProvideSafeAccountCommandType.SAFE_DESCRIPTOR,\n );\n });\n\n it(\"should provide context for SIGNER with correct type\", async () => {\n // GIVEN\n const args: ProvideContextTaskArgs = {\n context: {\n type: ClearSignContextType.SIGNER,\n payload: \"payload\",\n },\n };\n sendPayloadInChunksRunMock.mockResolvedValue(successResult);\n\n // WHEN\n const task = new ProvideContextTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(successResult);\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledTimes(1);\n\n // Test that the commandFactory returns ProvideSafeAccountCommand with SIGNER_DESCRIPTOR type\n const factoryCall = sendPayloadInChunksTaskMockFactory.mock.calls[0]!;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const commandFactory = factoryCall[1].commandFactory;\n const mockArgs = {\n chunkedData: new Uint8Array([1, 2, 3]),\n isFirstChunk: true,\n };\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n const command = commandFactory(mockArgs);\n expect(command).toBeInstanceOf(ProvideSafeAccountCommand);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n expect(command.args.type).toBe(\n ProvideSafeAccountCommandType.SIGNER_DESCRIPTOR,\n );\n });\n });\n\n describe(\"with certificate\", () => {\n it(\"should load certificate before providing context when certificate is present\", async () => {\n // GIVEN\n const args: ProvideContextTaskArgs = {\n context: {\n type: ClearSignContextType.TOKEN,\n payload: \"payload\",\n certificate: {\n keyUsageNumber: 1,\n payload: new Uint8Array([1, 2, 3]),\n },\n },\n };\n api.sendCommand.mockResolvedValue(successResult);\n\n // WHEN\n const task = new ProvideContextTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(successResult);\n expect(api.sendCommand).toHaveBeenCalledTimes(2);\n expect(api.sendCommand).toHaveBeenNthCalledWith(\n 1,\n expect.any(LoadCertificateCommand),\n );\n expect(api.sendCommand).toHaveBeenNthCalledWith(\n 2,\n expect.any(ProvideTokenInformationCommand),\n );\n });\n\n it(\"should load certificate with sendPayloadInChunksTask context\", async () => {\n // GIVEN\n const args: ProvideContextTaskArgs = {\n context: {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"payload\",\n certificate: {\n keyUsageNumber: 2,\n payload: new Uint8Array([4, 5, 6]),\n },\n },\n };\n api.sendCommand.mockResolvedValue(successResult);\n sendPayloadInChunksRunMock.mockResolvedValue(successResult);\n\n // WHEN\n const task = new ProvideContextTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(successResult);\n expect(api.sendCommand).toHaveBeenCalledTimes(1);\n expect(api.sendCommand).toHaveBeenCalledWith(\n expect.any(LoadCertificateCommand),\n );\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledTimes(1);\n });\n\n it(\"should not load certificate when not present\", async () => {\n // GIVEN\n const args: ProvideContextTaskArgs = {\n context: {\n type: ClearSignContextType.TOKEN,\n payload: \"payload\",\n },\n };\n api.sendCommand.mockResolvedValue(successResult);\n\n // WHEN\n const task = new ProvideContextTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(successResult);\n expect(api.sendCommand).toHaveBeenCalledTimes(1);\n expect(api.sendCommand).toHaveBeenCalledWith(\n expect.any(ProvideTokenInformationCommand),\n );\n });\n });\n\n describe(\"error handling\", () => {\n it(\"should return error when sendCommand fails\", async () => {\n // GIVEN\n const args: ProvideContextTaskArgs = {\n context: {\n type: ClearSignContextType.NFT,\n payload: \"payload\",\n },\n };\n api.sendCommand.mockResolvedValue(errorResult);\n\n // WHEN\n const task = new ProvideContextTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(errorResult);\n });\n\n it(\"should return error when sendPayloadInChunksTask fails\", async () => {\n // GIVEN\n const args: ProvideContextTaskArgs = {\n context: {\n type: ClearSignContextType.TRUSTED_NAME,\n payload: \"payload\",\n },\n };\n sendPayloadInChunksRunMock.mockResolvedValue(errorResult);\n\n // WHEN\n const task = new ProvideContextTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(errorResult);\n });\n\n it(\"should return error for unsupported context type\", async () => {\n // GIVEN\n const args: ProvideContextTaskArgs = {\n context: {\n type: \"unsupported\" as unknown as ClearSignContextType.TOKEN,\n payload: \"payload\",\n },\n };\n\n // WHEN\n const task = new ProvideContextTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(\n CommandResultFactory({\n error: new InvalidStatusWordError(\n `The context type [unsupported] is not covered`,\n ),\n }),\n );\n });\n });\n\n describe(\"factory\", () => {\n it(\"should have a default sendPayloadInChunksTaskFactory\", () => {\n // GIVEN\n const args: ProvideContextTaskArgs = {\n context: {\n type: ClearSignContextType.TOKEN,\n payload: \"payload\",\n },\n };\n\n // WHEN\n const task = new ProvideContextTask(api, args);\n\n // THEN\n expect(task[\"_sendPayloadInChunksTaskFactory\"]).toBeDefined();\n const sendPayloadInChunksTask = task[\"_sendPayloadInChunksTaskFactory\"](\n api,\n {\n payload: \"payload\",\n commandFactory: () =>\n new ProvideTransactionInformationCommand({\n data: new Uint8Array(),\n isFirstChunk: true,\n }),\n },\n );\n expect(sendPayloadInChunksTask).toBeInstanceOf(SendPayloadInChunksTask);\n });\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_context_module", "import_device_management_kit", "import_ProvideEnumCommand", "import_ProvideNetworkConfigurationCommand", "import_ProvideNFTInformationCommand", "import_ProvideProxyInfoCommand", "import_ProvideSafeAccountCommand", "import_ProvideTokenInformationCommand", "import_ProvideTransactionFieldDescriptionCommand", "import_ProvideTransactionInformationCommand", "import_ProvideTrustedNameCommand", "import_ProvideWeb3CheckCommand", "import_SetExternalPluginCommand", "import_SetPluginCommand", "import_makeInternalApi", "import_ProvideContextTask", "import_SendPayloadInChunksTask", "api", "successResult", "errorResult", "sendPayloadInChunksRunMock", "sendPayloadInChunksTaskMockFactory", "a", "args", "contextType", "commandClass", "result", "commandFactory", "mockArgs", "command", "task", "sendPayloadInChunksTask"]
|
|
7
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var g=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var P=Object.getOwnPropertyNames;var F=Object.prototype.hasOwnProperty;var M=(u,e)=>{for(var a in e)g(u,a,{get:e[a],enumerable:!0})},V=(u,e,a,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of P(e))!F.call(u,t)&&t!==a&&g(u,t,{get:()=>e[t],enumerable:!(n=b(e,t))||n.enumerable});return u};var J=u=>V(g({},"__esModule",{value:!0}),u);var O={};M(O,{ProvideEIP712ContextTask:()=>_});module.exports=J(O);var x=require("@ledgerhq/context-module"),T=require("@ledgerhq/context-module"),s=require("@ledgerhq/device-management-kit"),d=require("purify-ts"),E=require("../../app-binder/command/GetChallengeCommand"),v=require("../../app-binder/command/ProvideTokenInformationCommand"),N=require("../../app-binder/command/ProvideTrustedNameCommand"),R=require("../../app-binder/command/ProvideWeb3CheckCommand"),r=require("../../app-binder/command/SendEIP712FilteringCommand"),l=require("../../app-binder/command/SendEIP712StructDefinitionCommand"),h=require("../../app-binder/command/SendEIP712StructImplemCommand"),C=require("../../app-binder/task/SendEIP712StructImplemTask"),A=require("../../typed-data/model/Types"),f=require("../../typed-data/model/Types"),I=require("./SendPayloadInChunksTask");const w=5;class _{constructor(e,a,n){this.api=e;this.contextModule=a;this.args=n;for(const t of this.args.domain)if(t.path==="chainId"&&t.value instanceof A.TypedDataValueField){const i=BigInt((0,s.bufferToHexaString)(t.value.data));i<=Number.MAX_SAFE_INTEGER&&(this.chainId=(0,d.Just)(Number(i)));break}}chainId=d.Nothing;async run(){this.args.web3Check&&(this.args.web3Check.certificate&&await this.api.sendCommand(new s.LoadCertificateCommand({keyUsage:this.args.web3Check.certificate.keyUsageNumber,certificate:this.args.web3Check.certificate.payload})),await new I.SendPayloadInChunksTask(this.api,{payload:this.args.web3Check.payload,commandFactory:t=>new R.ProvideWeb3CheckCommand({payload:t.chunkedData,isFirstChunk:t.isFirstChunk})}).run());const e=(0,s.CommandResultFactory)({data:void 0}),a=Object.entries(this.args.types).sort(([t],[i])=>t.localeCompare(i));for(const[t,i]of a){const o=await this.api.sendCommand(new l.SendEIP712StructDefinitionCommand({command:l.StructDefinitionCommand.Name,name:t}));if(!(0,s.isSuccessCommandResult)(o))return o;for(const[m,c]of Object.entries(i)){const y=await this.api.sendCommand(new l.SendEIP712StructDefinitionCommand({command:l.StructDefinitionCommand.Field,name:m,type:c}));if(!(0,s.isSuccessCommandResult)(y))return y}}if(this.args.clearSignContext.isJust()){const t=await this.api.sendCommand(new r.SendEIP712FilteringCommand({type:r.Eip712FilterType.Activation}));if(!(0,s.isSuccessCommandResult)(t))return t}for(const t of this.args.domain){const o=await this.getImplementationTask(t).run();if(!(0,s.isSuccessCommandResult)(o))return o}if(this.args.clearSignContext.isJust()){const t=this.args.clearSignContext.extract(),i=await this.api.sendCommand(new r.SendEIP712FilteringCommand({type:r.Eip712FilterType.MessageInfo,displayName:t.messageInfo.displayName,filtersCount:t.messageInfo.filtersCount,signature:t.messageInfo.signature}));if(!(0,s.isSuccessCommandResult)(i))return i}const n={indexes:{},nextIndex:0};for(const t of this.args.message){const i=await this.provideTokenInformation(t,n);if(i.isJust())return i.extract();const o=await this.provideTrustedName(t);if(o.isJust())return o.extract();const m=await this.filterValue(t,n);if(m.isJust()&&!(0,s.isSuccessCommandResult)(m.extract()))return m.extract();const y=await this.getImplementationTask(t).run();if(!(0,s.isSuccessCommandResult)(y))return y;if(this.args.clearSignContext.isJust()&&t.value instanceof f.TypedDataValueArray&&t.value.length===0){const D=Object.entries(this.args.clearSignContext.extract().filters).filter(([p])=>p.startsWith(`${t.path}.[]`)).map(([,p])=>p);for(const p of D){const k=await this.api.sendCommand(new r.SendEIP712FilteringCommand({type:r.Eip712FilterType.DiscardedPath,path:p.path}));if(!(0,s.isSuccessCommandResult)(k))return k;const S=await this.provideFiltering(p,n,!0);if(!(0,s.isSuccessCommandResult)(S))return S}}}return e}getImplementationTask(e){return e.value instanceof f.TypedDataValueRoot?new C.SendEIP712StructImplemTask(this.api,{type:h.StructImplemType.ROOT,value:e.value.root}):e.value instanceof f.TypedDataValueArray?new C.SendEIP712StructImplemTask(this.api,{type:h.StructImplemType.ARRAY,value:e.value.length}):new C.SendEIP712StructImplemTask(this.api,{type:h.StructImplemType.FIELD,value:e.value.data})}async provideTokenInformation(e,a){if(this.args.clearSignContext.isJust()){const n=this.args.clearSignContext.extract().filters[e.path];if(n!==void 0&&(n.type==="amount"||n.type==="token")&&a.indexes[n.tokenIndex]===void 0){const t=n.tokenIndex,o=this.args.clearSignContext.extract().tokens[t];if(o===void 0)return d.Nothing;const m=await this.api.sendCommand(new v.ProvideTokenInformationCommand({payload:o}));if(!(0,s.isSuccessCommandResult)(m))return d.Maybe.of(m);let{tokenIndex:c}=m.data;a.nextIndex=(c+1)%w,Number(t)===x.VERIFYING_CONTRACT_TOKEN_INDEX&&(c=x.VERIFYING_CONTRACT_TOKEN_INDEX),a.indexes[Number(t)]=c}}return d.Nothing}async provideTrustedName(e){if(this.args.clearSignContext.isJust()&&this.chainId.isJust()){const a=this.args.clearSignContext.extract(),n=a.filters[e.path],t=a.trustedNamesAddresses[e.path];if(n!==void 0&&n.type==="trusted-name"&&t!==void 0){const i=await this.api.sendCommand(new E.GetChallengeCommand);if(!(0,s.isSuccessCommandResult)(i))return(0,d.Just)(i);const o=await this.contextModule.getContext({type:T.ClearSignContextType.TRUSTED_NAME,chainId:this.chainId.extract(),address:t,challenge:i.data.challenge,types:n.types,sources:n.sources});if(o.type===T.ClearSignContextType.TRUSTED_NAME){o.certificate&&await this.api.sendCommand(new s.LoadCertificateCommand({keyUsage:o.certificate.keyUsageNumber,certificate:o.certificate.payload}));const m=await new I.SendPayloadInChunksTask(this.api,{payload:o.payload,commandFactory:c=>new N.ProvideTrustedNameCommand({data:c.chunkedData,isFirstChunk:c.isFirstChunk})}).run();if(!(0,s.isSuccessCommandResult)(m))return(0,d.Just)(m)}}}return d.Nothing}async filterValue(e,a){if(this.args.clearSignContext.isJust()){const n=this.args.clearSignContext.extract().filters[e.path];if(n===void 0)return d.Nothing;const t=await this.provideFiltering(n,a,!1);return d.Maybe.of(t)}return d.Nothing}async provideFiltering(e,a,n){switch(e.type){case"trusted-name":return await this.api.sendCommand(new r.SendEIP712FilteringCommand({type:r.Eip712FilterType.TrustedName,discarded:n,displayName:e.displayName,typesAndSourcesPayload:e.typesAndSourcesPayload,signature:e.signature}));case"datetime":return await this.api.sendCommand(new r.SendEIP712FilteringCommand({type:r.Eip712FilterType.Datetime,discarded:n,displayName:e.displayName,signature:e.signature}));case"raw":return await this.api.sendCommand(new r.SendEIP712FilteringCommand({type:r.Eip712FilterType.Raw,discarded:n,displayName:e.displayName,signature:e.signature}));case"token":return this.sanitizeDeviceIndex(e.tokenIndex,a),await this.api.sendCommand(new r.SendEIP712FilteringCommand({type:r.Eip712FilterType.Token,discarded:n,tokenIndex:a.indexes[e.tokenIndex],signature:e.signature}));case"amount":return this.sanitizeDeviceIndex(e.tokenIndex,a),await this.api.sendCommand(new r.SendEIP712FilteringCommand({type:r.Eip712FilterType.Amount,discarded:n,displayName:e.displayName,tokenIndex:a.indexes[e.tokenIndex],signature:e.signature}));default:return(0,s.CommandResultFactory)({error:new s.InvalidStatusWordError("ProvideEIP712ContextTask/provideFiltering - Unhandled filter type")})}}sanitizeDeviceIndex(e,a){a.indexes[e]===void 0&&(a.indexes[e]=a.nextIndex,a.nextIndex=(a.nextIndex+1)%w)}}0&&(module.exports={ProvideEIP712ContextTask});
|
|
1
|
+
"use strict";var T=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var _=Object.prototype.hasOwnProperty;var V=(p,e)=>{for(var t in e)T(p,t,{get:e[t],enumerable:!0})},O=(p,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of M(e))!_.call(p,a)&&a!==t&&T(p,a,{get:()=>e[a],enumerable:!(n=b(e,a))||n.enumerable});return p};var J=p=>O(T({},"__esModule",{value:!0}),p);var W={};V(W,{ProvideEIP712ContextTask:()=>U});module.exports=J(W);var u=require("@ledgerhq/context-module"),l=require("@ledgerhq/context-module"),o=require("@ledgerhq/device-management-kit"),d=require("purify-ts"),E=require("../../app-binder/command/GetChallengeCommand"),k=require("../../app-binder/command/ProvideProxyInfoCommand"),F=require("../../app-binder/command/ProvideTokenInformationCommand"),P=require("../../app-binder/command/ProvideTrustedNameCommand"),N=require("../../app-binder/command/ProvideWeb3CheckCommand"),s=require("../../app-binder/command/SendEIP712FilteringCommand"),h=require("../../app-binder/command/SendEIP712StructDefinitionCommand"),f=require("../../app-binder/command/SendEIP712StructImplemCommand"),x=require("../../app-binder/task/SendEIP712StructImplemTask"),D=require("../../typed-data/model/Types"),g=require("../../typed-data/model/Types"),R=require("./ProvideTransactionContextsTask"),I=require("./SendPayloadInChunksTask");const S=5;class U{constructor(e,t,n,a=i=>new R.ProvideTransactionContextsTask(this.api,i)){this.api=e;this.contextModule=t;this.args=n;this.provideContextFactory=a;for(const i of this.args.domain)if(i.path==="chainId"&&i.value instanceof D.TypedDataValueField){const r=BigInt((0,o.bufferToHexaString)(i.value.data));r<=Number.MAX_SAFE_INTEGER&&(this.chainId=(0,d.Just)(Number(r)));break}}chainId=d.Nothing;calldataMetadatas={};async run(){this.args.web3Check&&await this.provideContext(this.args.web3Check),await this.args.clearSignContext.ifJust(async a=>{a.proxy!==void 0&&await this.provideContext(a.proxy)});const e=(0,o.CommandResultFactory)({data:void 0}),t=Object.entries(this.args.types).sort(([a],[i])=>a.localeCompare(i));for(const[a,i]of t){const r=await this.api.sendCommand(new h.SendEIP712StructDefinitionCommand({command:h.StructDefinitionCommand.Name,name:a}));if(!(0,o.isSuccessCommandResult)(r))return r;for(const[c,m]of Object.entries(i)){const y=await this.api.sendCommand(new h.SendEIP712StructDefinitionCommand({command:h.StructDefinitionCommand.Field,name:c,type:m}));if(!(0,o.isSuccessCommandResult)(y))return y}}if(this.args.clearSignContext.isJust()){const a=await this.api.sendCommand(new s.SendEIP712FilteringCommand({type:s.Eip712FilterType.Activation}));if(!(0,o.isSuccessCommandResult)(a))return a}for(const a of this.args.domain){const r=await this.getImplementationTask(a).run();if(!(0,o.isSuccessCommandResult)(r))return r}if(this.args.clearSignContext.isJust()){const a=this.args.clearSignContext.extract(),i=await this.api.sendCommand(new s.SendEIP712FilteringCommand({type:s.Eip712FilterType.MessageInfo,displayName:a.messageInfo.displayName,filtersCount:a.messageInfo.filtersCount,signature:a.messageInfo.signature}));if(!(0,o.isSuccessCommandResult)(i))return i}const n={indexes:{},nextIndex:0};for(const a of this.args.message){const i=await this.provideTokenInformation(a,n);if(i.isJust())return i.extract();const r=await this.provideTrustedName(a);if(r.isJust())return r.extract();const c=await this.filterValue(a,n);if(c.isJust()&&!(0,o.isSuccessCommandResult)(c.extract()))return c.extract();const y=await this.getImplementationTask(a).run();if(!(0,o.isSuccessCommandResult)(y))return y;if(await this.tryProvideTransactionContext(),this.args.clearSignContext.isJust()&&a.value instanceof g.TypedDataValueArray&&a.value.length===0){const A=Object.entries(this.args.clearSignContext.extract().filters).filter(([C])=>C.startsWith(`${a.path}.[]`)).map(([,C])=>C);for(const C of A){const w=await this.api.sendCommand(new s.SendEIP712FilteringCommand({type:s.Eip712FilterType.DiscardedPath,path:C.path}));if(!(0,o.isSuccessCommandResult)(w))return w;const v=await this.provideFiltering(C,n,!0);if(!(0,o.isSuccessCommandResult)(v))return v}}}return e}async provideContext({type:e,payload:t,certificate:n}){switch(n&&await this.api.sendCommand(new o.LoadCertificateCommand({keyUsage:n.keyUsageNumber,certificate:n.payload})),e){case l.ClearSignContextType.WEB3_CHECK:await new I.SendPayloadInChunksTask(this.api,{payload:t,commandFactory:a=>new N.ProvideWeb3CheckCommand({payload:a.chunkedData,isFirstChunk:a.isFirstChunk})}).run();break;case l.ClearSignContextType.PROXY_INFO:await new I.SendPayloadInChunksTask(this.api,{payload:t,commandFactory:a=>new k.ProvideProxyInfoCommand({data:a.chunkedData,isFirstChunk:a.isFirstChunk})}).run();break;case l.ClearSignContextType.TOKEN:case l.ClearSignContextType.NFT:case l.ClearSignContextType.TRUSTED_NAME:case l.ClearSignContextType.PLUGIN:case l.ClearSignContextType.EXTERNAL_PLUGIN:case l.ClearSignContextType.ENUM:case l.ClearSignContextType.TRANSACTION_INFO:case l.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION:case l.ClearSignContextType.DYNAMIC_NETWORK:case l.ClearSignContextType.DYNAMIC_NETWORK_ICON:case l.ClearSignContextType.SAFE:case l.ClearSignContextType.SIGNER:throw new Error(`Context type ${e} not supported in EIP712 messages`);default:{const a=e;throw new Error(`Unhandled context type ${a}`)}}}getImplementationTask(e){return e.value instanceof g.TypedDataValueRoot?new x.SendEIP712StructImplemTask(this.api,{type:f.StructImplemType.ROOT,value:e.value.root}):e.value instanceof g.TypedDataValueArray?new x.SendEIP712StructImplemTask(this.api,{type:f.StructImplemType.ARRAY,value:e.value.length}):new x.SendEIP712StructImplemTask(this.api,{type:f.StructImplemType.FIELD,value:e.value.data})}async provideTokenInformation(e,t){if(this.args.clearSignContext.isJust()){const n=this.args.clearSignContext.extract().filters[e.path];if(n!==void 0&&(n.type==="amount"||n.type==="token")&&t.indexes[n.tokenIndex]===void 0){const a=n.tokenIndex,r=this.args.clearSignContext.extract().tokens[a];if(r===void 0)return d.Nothing;const c=await this.api.sendCommand(new F.ProvideTokenInformationCommand({payload:r}));if(!(0,o.isSuccessCommandResult)(c))return d.Maybe.of(c);let{tokenIndex:m}=c.data;t.nextIndex=(m+1)%S,Number(a)===u.VERIFYING_CONTRACT_TOKEN_INDEX&&(m=u.VERIFYING_CONTRACT_TOKEN_INDEX),t.indexes[Number(a)]=m}}return d.Nothing}async provideTrustedName(e){if(this.args.clearSignContext.isJust()&&this.chainId.isJust()){const t=this.args.clearSignContext.extract(),n=t.filters[e.path],a=t.trustedNamesAddresses[e.path];if(n!==void 0&&n.type==="trusted-name"&&a!==void 0){const i=await this.api.sendCommand(new E.GetChallengeCommand);if(!(0,o.isSuccessCommandResult)(i))return(0,d.Just)(i);const r=await this.contextModule.getFieldContext({chainId:this.chainId.extract(),address:a,challenge:i.data.challenge,types:n.types,sources:n.sources,deviceModelId:this.args.deviceModelId},l.ClearSignContextType.TRUSTED_NAME);if(r.type===l.ClearSignContextType.TRUSTED_NAME){r.certificate&&await this.api.sendCommand(new o.LoadCertificateCommand({keyUsage:r.certificate.keyUsageNumber,certificate:r.certificate.payload}));const c=await new I.SendPayloadInChunksTask(this.api,{payload:r.payload,commandFactory:m=>new P.ProvideTrustedNameCommand({data:m.chunkedData,isFirstChunk:m.isFirstChunk})}).run();if(!(0,o.isSuccessCommandResult)(c))return(0,d.Just)(c)}}}return d.Nothing}async filterValue(e,t){if(this.args.clearSignContext.isJust()){const n=this.args.clearSignContext.extract().filters[e.path];if(n===void 0)return d.Nothing;const a=await this.provideFiltering(n,t,!1);return d.Maybe.of(a)}return d.Nothing}async provideFiltering(e,t,n){switch(e.type){case"trusted-name":return await this.api.sendCommand(new s.SendEIP712FilteringCommand({type:s.Eip712FilterType.TrustedName,discarded:n,displayName:e.displayName,typesAndSourcesPayload:e.typesAndSourcesPayload,signature:e.signature}));case"datetime":return await this.api.sendCommand(new s.SendEIP712FilteringCommand({type:s.Eip712FilterType.Datetime,discarded:n,displayName:e.displayName,signature:e.signature}));case"raw":return await this.api.sendCommand(new s.SendEIP712FilteringCommand({type:s.Eip712FilterType.Raw,discarded:n,displayName:e.displayName,signature:e.signature}));case"token":return this.sanitizeDeviceIndex(e.tokenIndex,t),await this.api.sendCommand(new s.SendEIP712FilteringCommand({type:s.Eip712FilterType.Token,discarded:n,tokenIndex:t.indexes[e.tokenIndex],signature:e.signature}));case"amount":return this.sanitizeDeviceIndex(e.tokenIndex,t),await this.api.sendCommand(new s.SendEIP712FilteringCommand({type:s.Eip712FilterType.Amount,discarded:n,displayName:e.displayName,tokenIndex:t.indexes[e.tokenIndex],signature:e.signature}));case"calldata-value":return await this.provideCalldataInfos(e.calldataIndex),await this.api.sendCommand(new s.SendEIP712FilteringCommand({type:s.Eip712FilterType.CalldataValue,discarded:n,calldataIndex:e.calldataIndex,signature:e.signature}));case"calldata-callee":return await this.provideCalldataInfos(e.calldataIndex),await this.api.sendCommand(new s.SendEIP712FilteringCommand({type:s.Eip712FilterType.CalldataCallee,discarded:n,calldataIndex:e.calldataIndex,signature:e.signature}));case"calldata-spender":return await this.provideCalldataInfos(e.calldataIndex),await this.api.sendCommand(new s.SendEIP712FilteringCommand({type:s.Eip712FilterType.CalldataSpender,discarded:n,calldataIndex:e.calldataIndex,signature:e.signature}));case"calldata-chain-id":return await this.provideCalldataInfos(e.calldataIndex),await this.api.sendCommand(new s.SendEIP712FilteringCommand({type:s.Eip712FilterType.CalldataChainId,discarded:n,calldataIndex:e.calldataIndex,signature:e.signature}));case"calldata-selector":return await this.provideCalldataInfos(e.calldataIndex),await this.api.sendCommand(new s.SendEIP712FilteringCommand({type:s.Eip712FilterType.CalldataSelector,discarded:n,calldataIndex:e.calldataIndex,signature:e.signature}));case"calldata-amount":return await this.provideCalldataInfos(e.calldataIndex),await this.api.sendCommand(new s.SendEIP712FilteringCommand({type:s.Eip712FilterType.CalldataAmount,discarded:n,calldataIndex:e.calldataIndex,signature:e.signature}));default:{const a=e;throw new Error(`ProvideEIP712ContextTask/provideFiltering - Unhandled filter ${a}`)}}}async provideCalldataInfos(e){if(this.args.clearSignContext.isJust()){if(this.calldataMetadatas[e]!==void 0)return this.calldataMetadatas[e].remainingFilters--,d.Nothing;const t=this.args.clearSignContext.extract().calldatas[e];if(t===void 0)return d.Nothing;const a=[t.filter.valueFlag,t.filter.calleeFlag===u.TypedDataCalldataParamPresence.Present,t.filter.chainIdFlag,t.filter.selectorFlag,t.filter.amountFlag,t.filter.spenderFlag===u.TypedDataCalldataParamPresence.Present].filter(i=>i).length;return this.calldataMetadatas[e]={remainingFilters:a-1,contexts:this.args.calldatasContexts[e]},d.Maybe.of(await this.api.sendCommand(new s.SendEIP712FilteringCommand({type:s.Eip712FilterType.CalldataInfo,discarded:!1,calldataIndex:e,valueFlag:t.filter.valueFlag,calleeFlag:this.mapCalldataPresence(t.filter.calleeFlag),chainIdFlag:t.filter.chainIdFlag,selectorFlag:t.filter.selectorFlag,amountFlag:t.filter.amountFlag,spenderFlag:this.mapCalldataPresence(t.filter.spenderFlag),signature:t.filter.signature})))}return d.Nothing}async tryProvideTransactionContext(){for(const e in this.calldataMetadatas){const t=this.calldataMetadatas[e];t.remainingFilters===0&&(t.contexts!==void 0&&await this.provideContextFactory({contexts:t.contexts,derivationPath:this.args.derivationPath}).run(),delete this.calldataMetadatas[e])}}mapCalldataPresence(e){switch(e){case u.TypedDataCalldataParamPresence.None:return s.CalldataParamPresence.None;case u.TypedDataCalldataParamPresence.Present:return s.CalldataParamPresence.Present;case u.TypedDataCalldataParamPresence.VerifyingContract:return s.CalldataParamPresence.VerifyingContract;default:{const t=e;throw new Error(`Unhandled presence ${t}`)}}}sanitizeDeviceIndex(e,t){t.indexes[e]===void 0&&(t.indexes[e]=t.nextIndex,t.nextIndex=(t.nextIndex+1)%S)}}0&&(module.exports={ProvideEIP712ContextTask});
|
|
2
2
|
//# sourceMappingURL=ProvideEIP712ContextTask.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/task/ProvideEIP712ContextTask.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type ContextModule,\n type TypedDataClearSignContextSuccess,\n type TypedDataFilter,\n type TypedDataTokenIndex,\n VERIFYING_CONTRACT_TOKEN_INDEX,\n} from \"@ledgerhq/context-module\";\nimport {\n type ClearSignContextSuccess,\n ClearSignContextType,\n} from \"@ledgerhq/context-module\";\nimport type {\n CommandResult,\n InternalApi,\n} from \"@ledgerhq/device-management-kit\";\nimport {\n bufferToHexaString,\n CommandResultFactory,\n InvalidStatusWordError,\n isSuccessCommandResult,\n LoadCertificateCommand,\n} from \"@ledgerhq/device-management-kit\";\nimport { Just, Maybe, Nothing } from \"purify-ts\";\n\nimport { GetChallengeCommand } from \"@internal/app-binder/command/GetChallengeCommand\";\nimport { ProvideTokenInformationCommand } from \"@internal/app-binder/command/ProvideTokenInformationCommand\";\nimport { ProvideTrustedNameCommand } from \"@internal/app-binder/command/ProvideTrustedNameCommand\";\nimport { ProvideWeb3CheckCommand } from \"@internal/app-binder/command/ProvideWeb3CheckCommand\";\nimport {\n Eip712FilterType,\n SendEIP712FilteringCommand,\n} from \"@internal/app-binder/command/SendEIP712FilteringCommand\";\nimport {\n SendEIP712StructDefinitionCommand,\n StructDefinitionCommand,\n} from \"@internal/app-binder/command/SendEIP712StructDefinitionCommand\";\nimport { StructImplemType } from \"@internal/app-binder/command/SendEIP712StructImplemCommand\";\nimport { type EthErrorCodes } from \"@internal/app-binder/command/utils/ethAppErrors\";\nimport { SendEIP712StructImplemTask } from \"@internal/app-binder/task/SendEIP712StructImplemTask\";\nimport { TypedDataValueField } from \"@internal/typed-data/model/Types\";\nimport {\n type FieldName,\n type FieldType,\n type StructName,\n type TypedDataValue,\n TypedDataValueArray,\n TypedDataValueRoot,\n} from \"@internal/typed-data/model/Types\";\n\nimport { SendPayloadInChunksTask } from \"./SendPayloadInChunksTask\";\n\ntype AllSuccessTypes = void | { tokenIndex: number };\n\nexport type ProvideEIP712ContextTaskReturnType = Promise<\n CommandResult<AllSuccessTypes, EthErrorCodes>\n>;\n\nexport type ProvideEIP712ContextTaskArgs = {\n types: Record<StructName, Record<FieldName, FieldType>>;\n domain: Array<TypedDataValue>;\n message: Array<TypedDataValue>;\n clearSignContext: Maybe<TypedDataClearSignContextSuccess>;\n web3Check: ClearSignContextSuccess<ClearSignContextType.WEB3_CHECK> | null;\n};\n\nconst DEVICE_ASSETS_MAX = 5;\n\ntype DeviceAssetIndexes = {\n indexes: Record<TypedDataTokenIndex, number>;\n nextIndex: number;\n};\n\nexport class ProvideEIP712ContextTask {\n private chainId: Maybe<number> = Nothing;\n\n constructor(\n private api: InternalApi,\n private contextModule: ContextModule,\n private args: ProvideEIP712ContextTaskArgs,\n ) {\n for (const domainValue of this.args.domain) {\n if (\n domainValue.path === \"chainId\" &&\n domainValue.value instanceof TypedDataValueField\n ) {\n const val = BigInt(bufferToHexaString(domainValue.value.data));\n if (val <= Number.MAX_SAFE_INTEGER) {\n this.chainId = Just(Number(val));\n }\n break;\n }\n }\n }\n\n async run(): ProvideEIP712ContextTaskReturnType {\n // Send message simulation first\n if (this.args.web3Check) {\n if (this.args.web3Check.certificate) {\n await this.api.sendCommand(\n new LoadCertificateCommand({\n keyUsage: this.args.web3Check.certificate.keyUsageNumber,\n certificate: this.args.web3Check.certificate.payload,\n }),\n );\n }\n await new SendPayloadInChunksTask(this.api, {\n payload: this.args.web3Check.payload,\n commandFactory: (args) =>\n new ProvideWeb3CheckCommand({\n payload: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n }\n\n const result: CommandResult<AllSuccessTypes, EthErrorCodes> =\n CommandResultFactory<AllSuccessTypes, EthErrorCodes>({ data: undefined });\n\n // Provide the structure definitions.\n // Should be sent before struct implementations, as described here:\n // https://github.com/LedgerHQ/app-ethereum/blob/develop/doc/ethapp.adoc#eip712-send-struct-definition\n // Note that those types are used to compute the schema hash, in the device and in ClearSignContexts, as described here:\n // https://github.com/LedgerHQ/app-ethereum/blob/develop/doc/ethapp.adoc#eip712-filtering\n // Therefore it should be normalized on both sides: sorted per keys\n const types = Object.entries(this.args.types).sort(([aKey], [bKey]) =>\n aKey.localeCompare(bKey),\n );\n for (const [structName, fields] of types) {\n const structNameResult = await this.api.sendCommand(\n new SendEIP712StructDefinitionCommand({\n command: StructDefinitionCommand.Name,\n name: structName,\n }),\n );\n if (!isSuccessCommandResult(structNameResult)) {\n return structNameResult;\n }\n\n for (const [fieldName, fieldType] of Object.entries(fields)) {\n const fieldResult = await this.api.sendCommand(\n new SendEIP712StructDefinitionCommand({\n command: StructDefinitionCommand.Field,\n name: fieldName,\n type: fieldType,\n }),\n );\n if (!isSuccessCommandResult(fieldResult)) {\n return fieldResult;\n }\n }\n }\n\n // possibly activate the filtering, before sending domain and message implementations, as described here:\n // https://github.com/LedgerHQ/app-ethereum/blob/develop/doc/ethapp.adoc#activation\n if (this.args.clearSignContext.isJust()) {\n const activationResult = await this.api.sendCommand(\n new SendEIP712FilteringCommand({ type: Eip712FilterType.Activation }),\n );\n if (!isSuccessCommandResult(activationResult)) {\n return activationResult;\n }\n }\n\n // send domain implementation values.\n for (const value of this.args.domain) {\n const domainImplTask = this.getImplementationTask(value);\n const domainImplResult = await domainImplTask.run();\n if (!isSuccessCommandResult(domainImplResult)) {\n return domainImplResult;\n }\n }\n\n // possibly send MessageInformation filter (between Domain and Message)\n // should be sent between Domain and Message implementations, as described here:\n // https://github.com/LedgerHQ/app-ethereum/blob/develop/doc/ethapp.adoc#message-info\n if (this.args.clearSignContext.isJust()) {\n const clearSignContext = this.args.clearSignContext.extract();\n const messageInfoFilterResult = await this.api.sendCommand(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.MessageInfo,\n displayName: clearSignContext.messageInfo.displayName,\n filtersCount: clearSignContext.messageInfo.filtersCount,\n signature: clearSignContext.messageInfo.signature,\n }),\n );\n if (!isSuccessCommandResult(messageInfoFilterResult)) {\n return messageInfoFilterResult;\n }\n }\n\n // send message implementation values\n const deviceIndexes: DeviceAssetIndexes = { indexes: {}, nextIndex: 0 };\n for (const value of this.args.message) {\n // 5.1 Provide token descriptors, if any\n // Keep a map of all device indexes for those provided tokens.\n const maybeTokenError = await this.provideTokenInformation(\n value,\n deviceIndexes,\n );\n if (maybeTokenError.isJust()) {\n return maybeTokenError.extract();\n }\n\n // Provide trusted name descriptors, if any\n const maybeNameError = await this.provideTrustedName(value);\n if (maybeNameError.isJust()) {\n return maybeNameError.extract();\n }\n\n // if there's a filter, send it\n // https://github.com/LedgerHQ/app-ethereum/blob/develop/doc/ethapp.adoc#amount-join-token\n const maybeFilterResult = await this.filterValue(value, deviceIndexes);\n if (\n maybeFilterResult.isJust() &&\n !isSuccessCommandResult(maybeFilterResult.extract())\n ) {\n return maybeFilterResult.extract();\n }\n\n // provide message value implementation\n const messageImplTask = this.getImplementationTask(value);\n const messageImplResult = await messageImplTask.run();\n if (!isSuccessCommandResult(messageImplResult)) {\n return messageImplResult;\n }\n\n // if the value is an empty array, discard sub-filters since\n // there will be no according sub-values in the message\n if (\n this.args.clearSignContext.isJust() &&\n value.value instanceof TypedDataValueArray &&\n value.value.length === 0\n ) {\n const filters = Object.entries(\n this.args.clearSignContext.extract().filters,\n );\n const discardedFilters = filters\n .filter(([path]) => path.startsWith(`${value.path}.[]`))\n .map(([, filter]) => filter);\n for (const filter of discardedFilters) {\n const discardedPathResult = await this.api.sendCommand(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.DiscardedPath,\n path: filter.path,\n }),\n );\n if (!isSuccessCommandResult(discardedPathResult)) {\n return discardedPathResult;\n }\n\n const provideFilteringResult = await this.provideFiltering(\n filter,\n deviceIndexes,\n true,\n );\n if (!isSuccessCommandResult(provideFilteringResult)) {\n return provideFilteringResult;\n }\n }\n }\n }\n\n return result;\n }\n\n getImplementationTask(value: TypedDataValue): SendEIP712StructImplemTask {\n if (value.value instanceof TypedDataValueRoot) {\n return new SendEIP712StructImplemTask(this.api, {\n type: StructImplemType.ROOT,\n value: value.value.root,\n });\n } else if (value.value instanceof TypedDataValueArray) {\n return new SendEIP712StructImplemTask(this.api, {\n type: StructImplemType.ARRAY,\n value: value.value.length,\n });\n } else {\n return new SendEIP712StructImplemTask(this.api, {\n type: StructImplemType.FIELD,\n value: value.value.data,\n });\n }\n }\n\n async provideTokenInformation(\n value: TypedDataValue,\n deviceIndexes: DeviceAssetIndexes,\n ): Promise<Maybe<CommandResult<AllSuccessTypes, EthErrorCodes>>> {\n if (this.args.clearSignContext.isJust()) {\n const filter = this.args.clearSignContext.extract().filters[value.path];\n // tokens descriptors only needed when a tokenIndex is available in filter.\n // it should be sent to the device only 1 time so deviceIndexes has to be checked.\n if (\n filter !== undefined &&\n (filter.type === \"amount\" || filter.type === \"token\") &&\n deviceIndexes.indexes[filter.tokenIndex] === undefined\n ) {\n const descriptorIndex = filter.tokenIndex;\n const tokens = this.args.clearSignContext.extract().tokens;\n const token = tokens[descriptorIndex];\n if (token === undefined) {\n return Nothing;\n }\n\n const provideTokenInfoResult = await this.api.sendCommand(\n new ProvideTokenInformationCommand({ payload: token }),\n );\n if (!isSuccessCommandResult(provideTokenInfoResult)) {\n return Maybe.of(provideTokenInfoResult);\n }\n let { tokenIndex: deviceIndex } = provideTokenInfoResult.data;\n deviceIndexes.nextIndex = (deviceIndex + 1) % DEVICE_ASSETS_MAX;\n\n // the token corresponding to the Verifying Contract of message domain has a special index value, as described here:\n // https://github.com/LedgerHQ/app-ethereum/blob/develop/doc/ethapp.adoc#amount-join-value\n if (Number(descriptorIndex) === VERIFYING_CONTRACT_TOKEN_INDEX) {\n deviceIndex = VERIFYING_CONTRACT_TOKEN_INDEX;\n }\n\n deviceIndexes.indexes[Number(descriptorIndex)] = deviceIndex;\n }\n }\n return Nothing;\n }\n\n private async provideTrustedName(\n value: TypedDataValue,\n ): Promise<Maybe<CommandResult<AllSuccessTypes, EthErrorCodes>>> {\n if (this.args.clearSignContext.isJust() && this.chainId.isJust()) {\n const context = this.args.clearSignContext.extract();\n const filter = context.filters[value.path];\n const address = context.trustedNamesAddresses[value.path];\n if (\n filter !== undefined &&\n filter.type === \"trusted-name\" &&\n address !== undefined\n ) {\n const getChallengeResult = await this.api.sendCommand(\n new GetChallengeCommand(),\n );\n if (!isSuccessCommandResult(getChallengeResult)) {\n return Just(getChallengeResult);\n }\n\n const context = await this.contextModule.getContext({\n type: ClearSignContextType.TRUSTED_NAME,\n chainId: this.chainId.extract(),\n address,\n challenge: getChallengeResult.data.challenge,\n types: filter.types,\n sources: filter.sources,\n });\n if (context.type === ClearSignContextType.TRUSTED_NAME) {\n if (context.certificate) {\n await this.api.sendCommand(\n new LoadCertificateCommand({\n keyUsage: context.certificate.keyUsageNumber,\n certificate: context.certificate.payload,\n }),\n );\n }\n const provideNameResult = await new SendPayloadInChunksTask(\n this.api,\n {\n payload: context.payload,\n commandFactory: (args) =>\n new ProvideTrustedNameCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n },\n ).run();\n if (!isSuccessCommandResult(provideNameResult)) {\n return Just(provideNameResult);\n }\n }\n }\n }\n return Nothing;\n }\n\n async filterValue(\n value: TypedDataValue,\n deviceIndexes: DeviceAssetIndexes,\n ): Promise<Maybe<CommandResult<AllSuccessTypes, EthErrorCodes>>> {\n if (this.args.clearSignContext.isJust()) {\n const filter = this.args.clearSignContext.extract().filters[value.path];\n if (filter === undefined) {\n return Nothing;\n }\n // provide the filter\n const filteringResult = await this.provideFiltering(\n filter,\n deviceIndexes,\n false,\n );\n return Maybe.of(filteringResult);\n }\n return Nothing;\n }\n\n async provideFiltering(\n filter: TypedDataFilter,\n deviceIndexes: DeviceAssetIndexes,\n discarded: boolean,\n ): Promise<CommandResult<AllSuccessTypes, EthErrorCodes>> {\n switch (filter.type) {\n case \"trusted-name\":\n return await this.api.sendCommand(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.TrustedName,\n discarded,\n displayName: filter.displayName,\n typesAndSourcesPayload: filter.typesAndSourcesPayload,\n signature: filter.signature,\n }),\n );\n case \"datetime\":\n return await this.api.sendCommand(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Datetime,\n discarded,\n displayName: filter.displayName,\n signature: filter.signature,\n }),\n );\n case \"raw\":\n return await this.api.sendCommand(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Raw,\n discarded,\n displayName: filter.displayName,\n signature: filter.signature,\n }),\n );\n case \"token\":\n this.sanitizeDeviceIndex(filter.tokenIndex, deviceIndexes);\n return await this.api.sendCommand(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Token,\n discarded,\n tokenIndex: deviceIndexes.indexes[filter.tokenIndex]!,\n signature: filter.signature,\n }),\n );\n case \"amount\":\n this.sanitizeDeviceIndex(filter.tokenIndex, deviceIndexes);\n return await this.api.sendCommand(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Amount,\n discarded,\n displayName: filter.displayName,\n tokenIndex: deviceIndexes.indexes[filter.tokenIndex]!,\n signature: filter.signature,\n }),\n );\n default:\n return CommandResultFactory<AllSuccessTypes, EthErrorCodes>({\n error: new InvalidStatusWordError(\n \"ProvideEIP712ContextTask/provideFiltering - Unhandled filter type\",\n ),\n });\n }\n }\n\n private sanitizeDeviceIndex(\n descriptorIndex: number,\n deviceIndexes: DeviceAssetIndexes,\n ) {\n // If a token is missing, the device will replace it with a placeholder and use the next available index\n if (deviceIndexes.indexes[descriptorIndex] === undefined) {\n deviceIndexes.indexes[descriptorIndex] = deviceIndexes.nextIndex;\n deviceIndexes.nextIndex =\n (deviceIndexes.nextIndex + 1) % DEVICE_ASSETS_MAX;\n }\n }\n}\n"],
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,8BAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,
|
|
6
|
-
"names": ["ProvideEIP712ContextTask_exports", "__export", "ProvideEIP712ContextTask", "__toCommonJS", "import_context_module", "import_device_management_kit", "import_purify_ts", "import_GetChallengeCommand", "import_ProvideTokenInformationCommand", "import_ProvideTrustedNameCommand", "import_ProvideWeb3CheckCommand", "import_SendEIP712FilteringCommand", "import_SendEIP712StructDefinitionCommand", "import_SendEIP712StructImplemCommand", "import_SendEIP712StructImplemTask", "import_Types", "import_SendPayloadInChunksTask", "DEVICE_ASSETS_MAX", "api", "contextModule", "args", "domainValue", "val", "result", "types", "aKey", "bKey", "structName", "fields", "structNameResult", "fieldName", "fieldType", "fieldResult", "activationResult", "value", "domainImplResult", "
|
|
4
|
+
"sourcesContent": ["import {\n type ContextModule,\n type TypedDataCalldataIndex,\n TypedDataCalldataParamPresence,\n type TypedDataClearSignContextSuccess,\n type TypedDataFilter,\n type TypedDataTokenIndex,\n VERIFYING_CONTRACT_TOKEN_INDEX,\n} from \"@ledgerhq/context-module\";\nimport {\n type ClearSignContextSuccess,\n ClearSignContextType,\n} from \"@ledgerhq/context-module\";\nimport type {\n CommandResult,\n DeviceModelId,\n InternalApi,\n} from \"@ledgerhq/device-management-kit\";\nimport {\n bufferToHexaString,\n CommandResultFactory,\n isSuccessCommandResult,\n LoadCertificateCommand,\n} from \"@ledgerhq/device-management-kit\";\nimport { Just, Maybe, Nothing } from \"purify-ts\";\n\nimport { GetChallengeCommand } from \"@internal/app-binder/command/GetChallengeCommand\";\nimport { ProvideProxyInfoCommand } from \"@internal/app-binder/command/ProvideProxyInfoCommand\";\nimport { ProvideTokenInformationCommand } from \"@internal/app-binder/command/ProvideTokenInformationCommand\";\nimport { ProvideTrustedNameCommand } from \"@internal/app-binder/command/ProvideTrustedNameCommand\";\nimport { ProvideWeb3CheckCommand } from \"@internal/app-binder/command/ProvideWeb3CheckCommand\";\nimport {\n CalldataParamPresence,\n Eip712FilterType,\n SendEIP712FilteringCommand,\n} from \"@internal/app-binder/command/SendEIP712FilteringCommand\";\nimport {\n SendEIP712StructDefinitionCommand,\n StructDefinitionCommand,\n} from \"@internal/app-binder/command/SendEIP712StructDefinitionCommand\";\nimport { StructImplemType } from \"@internal/app-binder/command/SendEIP712StructImplemCommand\";\nimport { type EthErrorCodes } from \"@internal/app-binder/command/utils/ethAppErrors\";\nimport { type ContextWithSubContexts } from \"@internal/app-binder/task/BuildFullContextsTask\";\nimport { SendEIP712StructImplemTask } from \"@internal/app-binder/task/SendEIP712StructImplemTask\";\nimport { TypedDataValueField } from \"@internal/typed-data/model/Types\";\nimport {\n type FieldName,\n type FieldType,\n type StructName,\n type TypedDataValue,\n TypedDataValueArray,\n TypedDataValueRoot,\n} from \"@internal/typed-data/model/Types\";\n\nimport {\n ProvideTransactionContextsTask,\n type ProvideTransactionContextsTaskArgs,\n} from \"./ProvideTransactionContextsTask\";\nimport { SendPayloadInChunksTask } from \"./SendPayloadInChunksTask\";\n\ntype AllSuccessTypes = void | { tokenIndex: number };\n\nexport type ProvideEIP712ContextTaskReturnType = Promise<\n CommandResult<AllSuccessTypes, EthErrorCodes>\n>;\n\nexport type ProvideEIP712ContextTaskArgs = {\n deviceModelId: DeviceModelId;\n derivationPath: string;\n types: Record<StructName, Record<FieldName, FieldType>>;\n domain: Array<TypedDataValue>;\n message: Array<TypedDataValue>;\n clearSignContext: Maybe<TypedDataClearSignContextSuccess>;\n calldatasContexts: Record<TypedDataCalldataIndex, ContextWithSubContexts[]>;\n web3Check: ClearSignContextSuccess<ClearSignContextType.WEB3_CHECK> | null;\n};\n\nconst DEVICE_ASSETS_MAX = 5;\n\ntype DeviceAssetIndexes = {\n indexes: Record<TypedDataTokenIndex, number>;\n nextIndex: number;\n};\n\ntype CalldataFiltersMetadata = {\n remainingFilters: number;\n contexts?: ContextWithSubContexts[];\n};\n\nexport class ProvideEIP712ContextTask {\n private chainId: Maybe<number> = Nothing;\n private calldataMetadatas: Record<\n TypedDataCalldataIndex,\n CalldataFiltersMetadata\n > = {};\n\n constructor(\n private api: InternalApi,\n private contextModule: ContextModule,\n private args: ProvideEIP712ContextTaskArgs,\n private readonly provideContextFactory = (\n args: ProvideTransactionContextsTaskArgs,\n ) => new ProvideTransactionContextsTask(this.api, args),\n ) {\n for (const domainValue of this.args.domain) {\n if (\n domainValue.path === \"chainId\" &&\n domainValue.value instanceof TypedDataValueField\n ) {\n const val = BigInt(bufferToHexaString(domainValue.value.data));\n if (val <= Number.MAX_SAFE_INTEGER) {\n this.chainId = Just(Number(val));\n }\n break;\n }\n }\n }\n\n async run(): ProvideEIP712ContextTaskReturnType {\n // Send message simulation first\n if (this.args.web3Check) {\n await this.provideContext(this.args.web3Check);\n }\n\n // Send proxy descriptor first if required\n await this.args.clearSignContext.ifJust(async (clearSignContext) => {\n if (clearSignContext.proxy !== undefined) {\n await this.provideContext(clearSignContext.proxy);\n }\n });\n\n const result: CommandResult<AllSuccessTypes, EthErrorCodes> =\n CommandResultFactory<AllSuccessTypes, EthErrorCodes>({ data: undefined });\n\n // Provide the structure definitions.\n // Should be sent before struct implementations, as described here:\n // https://github.com/LedgerHQ/app-ethereum/blob/develop/doc/ethapp.adoc#eip712-send-struct-definition\n // Note that those types are used to compute the schema hash, in the device and in ClearSignContexts, as described here:\n // https://github.com/LedgerHQ/app-ethereum/blob/develop/doc/ethapp.adoc#eip712-filtering\n // Therefore it should be normalized on both sides: sorted per keys\n const types = Object.entries(this.args.types).sort(([aKey], [bKey]) =>\n aKey.localeCompare(bKey),\n );\n for (const [structName, fields] of types) {\n const structNameResult = await this.api.sendCommand(\n new SendEIP712StructDefinitionCommand({\n command: StructDefinitionCommand.Name,\n name: structName,\n }),\n );\n if (!isSuccessCommandResult(structNameResult)) {\n return structNameResult;\n }\n\n for (const [fieldName, fieldType] of Object.entries(fields)) {\n const fieldResult = await this.api.sendCommand(\n new SendEIP712StructDefinitionCommand({\n command: StructDefinitionCommand.Field,\n name: fieldName,\n type: fieldType,\n }),\n );\n if (!isSuccessCommandResult(fieldResult)) {\n return fieldResult;\n }\n }\n }\n\n // possibly activate the filtering, before sending domain and message implementations, as described here:\n // https://github.com/LedgerHQ/app-ethereum/blob/develop/doc/ethapp.adoc#activation\n if (this.args.clearSignContext.isJust()) {\n const activationResult = await this.api.sendCommand(\n new SendEIP712FilteringCommand({ type: Eip712FilterType.Activation }),\n );\n if (!isSuccessCommandResult(activationResult)) {\n return activationResult;\n }\n }\n\n // send domain implementation values.\n for (const value of this.args.domain) {\n const domainImplTask = this.getImplementationTask(value);\n const domainImplResult = await domainImplTask.run();\n if (!isSuccessCommandResult(domainImplResult)) {\n return domainImplResult;\n }\n }\n\n // possibly send MessageInformation filter (between Domain and Message)\n // should be sent between Domain and Message implementations, as described here:\n // https://github.com/LedgerHQ/app-ethereum/blob/develop/doc/ethapp.adoc#message-info\n if (this.args.clearSignContext.isJust()) {\n const clearSignContext = this.args.clearSignContext.extract();\n const messageInfoFilterResult = await this.api.sendCommand(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.MessageInfo,\n displayName: clearSignContext.messageInfo.displayName,\n filtersCount: clearSignContext.messageInfo.filtersCount,\n signature: clearSignContext.messageInfo.signature,\n }),\n );\n if (!isSuccessCommandResult(messageInfoFilterResult)) {\n return messageInfoFilterResult;\n }\n }\n\n // send message implementation values\n const deviceIndexes: DeviceAssetIndexes = { indexes: {}, nextIndex: 0 };\n for (const value of this.args.message) {\n // 5.1 Provide token descriptors, if any\n // Keep a map of all device indexes for those provided tokens.\n const maybeTokenError = await this.provideTokenInformation(\n value,\n deviceIndexes,\n );\n if (maybeTokenError.isJust()) {\n return maybeTokenError.extract();\n }\n\n // Provide trusted name descriptors, if any\n const maybeNameError = await this.provideTrustedName(value);\n if (maybeNameError.isJust()) {\n return maybeNameError.extract();\n }\n\n // if there's a filter, send it\n // https://github.com/LedgerHQ/app-ethereum/blob/develop/doc/ethapp.adoc#amount-join-token\n const maybeFilterResult = await this.filterValue(value, deviceIndexes);\n if (\n maybeFilterResult.isJust() &&\n !isSuccessCommandResult(maybeFilterResult.extract())\n ) {\n return maybeFilterResult.extract();\n }\n\n // provide message value implementation\n const messageImplTask = this.getImplementationTask(value);\n const messageImplResult = await messageImplTask.run();\n if (!isSuccessCommandResult(messageImplResult)) {\n return messageImplResult;\n }\n\n // if a transaction was embedded in that value, provide the related clear sign context\n await this.tryProvideTransactionContext();\n\n // if the value is an empty array, discard sub-filters since\n // there will be no according sub-values in the message\n if (\n this.args.clearSignContext.isJust() &&\n value.value instanceof TypedDataValueArray &&\n value.value.length === 0\n ) {\n const filters = Object.entries(\n this.args.clearSignContext.extract().filters,\n );\n const discardedFilters = filters\n .filter(([path]) => path.startsWith(`${value.path}.[]`))\n .map(([, filter]) => filter);\n for (const filter of discardedFilters) {\n const discardedPathResult = await this.api.sendCommand(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.DiscardedPath,\n path: filter.path,\n }),\n );\n if (!isSuccessCommandResult(discardedPathResult)) {\n return discardedPathResult;\n }\n\n const provideFilteringResult = await this.provideFiltering(\n filter,\n deviceIndexes,\n true,\n );\n if (!isSuccessCommandResult(provideFilteringResult)) {\n return provideFilteringResult;\n }\n }\n }\n }\n\n return result;\n }\n\n async provideContext({\n type,\n payload,\n certificate,\n }: ClearSignContextSuccess) {\n // if a certificate is provided, we load it before sending the command\n if (certificate) {\n await this.api.sendCommand(\n new LoadCertificateCommand({\n keyUsage: certificate.keyUsageNumber,\n certificate: certificate.payload,\n }),\n );\n }\n\n switch (type) {\n case ClearSignContextType.WEB3_CHECK:\n await new SendPayloadInChunksTask(this.api, {\n payload,\n commandFactory: (args) =>\n new ProvideWeb3CheckCommand({\n payload: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n break;\n case ClearSignContextType.PROXY_INFO:\n await new SendPayloadInChunksTask(this.api, {\n payload,\n commandFactory: (args) =>\n new ProvideProxyInfoCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n break;\n case ClearSignContextType.TOKEN:\n case ClearSignContextType.NFT:\n case ClearSignContextType.TRUSTED_NAME:\n case ClearSignContextType.PLUGIN:\n case ClearSignContextType.EXTERNAL_PLUGIN:\n case ClearSignContextType.ENUM:\n case ClearSignContextType.TRANSACTION_INFO:\n case ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION:\n case ClearSignContextType.DYNAMIC_NETWORK:\n case ClearSignContextType.DYNAMIC_NETWORK_ICON:\n case ClearSignContextType.SAFE:\n case ClearSignContextType.SIGNER:\n throw new Error(\n `Context type ${type} not supported in EIP712 messages`,\n );\n default: {\n const uncoveredType: never = type;\n throw new Error(`Unhandled context type ${uncoveredType}`);\n }\n }\n }\n\n getImplementationTask(value: TypedDataValue): SendEIP712StructImplemTask {\n if (value.value instanceof TypedDataValueRoot) {\n return new SendEIP712StructImplemTask(this.api, {\n type: StructImplemType.ROOT,\n value: value.value.root,\n });\n } else if (value.value instanceof TypedDataValueArray) {\n return new SendEIP712StructImplemTask(this.api, {\n type: StructImplemType.ARRAY,\n value: value.value.length,\n });\n } else {\n return new SendEIP712StructImplemTask(this.api, {\n type: StructImplemType.FIELD,\n value: value.value.data,\n });\n }\n }\n\n async provideTokenInformation(\n value: TypedDataValue,\n deviceIndexes: DeviceAssetIndexes,\n ): Promise<Maybe<CommandResult<AllSuccessTypes, EthErrorCodes>>> {\n if (this.args.clearSignContext.isJust()) {\n const filter = this.args.clearSignContext.extract().filters[value.path];\n // tokens descriptors only needed when a tokenIndex is available in filter.\n // it should be sent to the device only 1 time so deviceIndexes has to be checked.\n if (\n filter !== undefined &&\n (filter.type === \"amount\" || filter.type === \"token\") &&\n deviceIndexes.indexes[filter.tokenIndex] === undefined\n ) {\n const descriptorIndex = filter.tokenIndex;\n const tokens = this.args.clearSignContext.extract().tokens;\n const token = tokens[descriptorIndex];\n if (token === undefined) {\n return Nothing;\n }\n\n const provideTokenInfoResult = await this.api.sendCommand(\n new ProvideTokenInformationCommand({ payload: token }),\n );\n if (!isSuccessCommandResult(provideTokenInfoResult)) {\n return Maybe.of(provideTokenInfoResult);\n }\n let { tokenIndex: deviceIndex } = provideTokenInfoResult.data;\n deviceIndexes.nextIndex = (deviceIndex + 1) % DEVICE_ASSETS_MAX;\n\n // the token corresponding to the Verifying Contract of message domain has a special index value, as described here:\n // https://github.com/LedgerHQ/app-ethereum/blob/develop/doc/ethapp.adoc#amount-join-value\n if (Number(descriptorIndex) === VERIFYING_CONTRACT_TOKEN_INDEX) {\n deviceIndex = VERIFYING_CONTRACT_TOKEN_INDEX;\n }\n\n deviceIndexes.indexes[Number(descriptorIndex)] = deviceIndex;\n }\n }\n return Nothing;\n }\n\n private async provideTrustedName(\n value: TypedDataValue,\n ): Promise<Maybe<CommandResult<AllSuccessTypes, EthErrorCodes>>> {\n if (this.args.clearSignContext.isJust() && this.chainId.isJust()) {\n const context = this.args.clearSignContext.extract();\n const filter = context.filters[value.path];\n const address = context.trustedNamesAddresses[value.path];\n if (\n filter !== undefined &&\n filter.type === \"trusted-name\" &&\n address !== undefined\n ) {\n const getChallengeResult = await this.api.sendCommand(\n new GetChallengeCommand(),\n );\n if (!isSuccessCommandResult(getChallengeResult)) {\n return Just(getChallengeResult);\n }\n\n const context = await this.contextModule.getFieldContext(\n {\n chainId: this.chainId.extract(),\n address,\n challenge: getChallengeResult.data.challenge,\n types: filter.types,\n sources: filter.sources,\n deviceModelId: this.args.deviceModelId,\n },\n ClearSignContextType.TRUSTED_NAME,\n );\n if (context.type === ClearSignContextType.TRUSTED_NAME) {\n if (context.certificate) {\n await this.api.sendCommand(\n new LoadCertificateCommand({\n keyUsage: context.certificate.keyUsageNumber,\n certificate: context.certificate.payload,\n }),\n );\n }\n const provideNameResult = await new SendPayloadInChunksTask(\n this.api,\n {\n payload: context.payload,\n commandFactory: (args) =>\n new ProvideTrustedNameCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n },\n ).run();\n if (!isSuccessCommandResult(provideNameResult)) {\n return Just(provideNameResult);\n }\n }\n }\n }\n return Nothing;\n }\n\n async filterValue(\n value: TypedDataValue,\n deviceIndexes: DeviceAssetIndexes,\n ): Promise<Maybe<CommandResult<AllSuccessTypes, EthErrorCodes>>> {\n if (this.args.clearSignContext.isJust()) {\n const filter = this.args.clearSignContext.extract().filters[value.path];\n if (filter === undefined) {\n return Nothing;\n }\n // provide the filter\n const filteringResult = await this.provideFiltering(\n filter,\n deviceIndexes,\n false,\n );\n return Maybe.of(filteringResult);\n }\n return Nothing;\n }\n\n async provideFiltering(\n filter: TypedDataFilter,\n deviceIndexes: DeviceAssetIndexes,\n discarded: boolean,\n ): Promise<CommandResult<AllSuccessTypes, EthErrorCodes>> {\n switch (filter.type) {\n case \"trusted-name\":\n return await this.api.sendCommand(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.TrustedName,\n discarded,\n displayName: filter.displayName,\n typesAndSourcesPayload: filter.typesAndSourcesPayload,\n signature: filter.signature,\n }),\n );\n case \"datetime\":\n return await this.api.sendCommand(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Datetime,\n discarded,\n displayName: filter.displayName,\n signature: filter.signature,\n }),\n );\n case \"raw\":\n return await this.api.sendCommand(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Raw,\n discarded,\n displayName: filter.displayName,\n signature: filter.signature,\n }),\n );\n case \"token\":\n this.sanitizeDeviceIndex(filter.tokenIndex, deviceIndexes);\n return await this.api.sendCommand(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Token,\n discarded,\n tokenIndex: deviceIndexes.indexes[filter.tokenIndex]!,\n signature: filter.signature,\n }),\n );\n case \"amount\":\n this.sanitizeDeviceIndex(filter.tokenIndex, deviceIndexes);\n return await this.api.sendCommand(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Amount,\n discarded,\n displayName: filter.displayName,\n tokenIndex: deviceIndexes.indexes[filter.tokenIndex]!,\n signature: filter.signature,\n }),\n );\n case \"calldata-value\":\n await this.provideCalldataInfos(filter.calldataIndex);\n return await this.api.sendCommand(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.CalldataValue,\n discarded,\n calldataIndex: filter.calldataIndex,\n signature: filter.signature,\n }),\n );\n case \"calldata-callee\":\n await this.provideCalldataInfos(filter.calldataIndex);\n return await this.api.sendCommand(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.CalldataCallee,\n discarded,\n calldataIndex: filter.calldataIndex,\n signature: filter.signature,\n }),\n );\n case \"calldata-spender\":\n await this.provideCalldataInfos(filter.calldataIndex);\n return await this.api.sendCommand(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.CalldataSpender,\n discarded,\n calldataIndex: filter.calldataIndex,\n signature: filter.signature,\n }),\n );\n case \"calldata-chain-id\":\n await this.provideCalldataInfos(filter.calldataIndex);\n return await this.api.sendCommand(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.CalldataChainId,\n discarded,\n calldataIndex: filter.calldataIndex,\n signature: filter.signature,\n }),\n );\n case \"calldata-selector\":\n await this.provideCalldataInfos(filter.calldataIndex);\n return await this.api.sendCommand(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.CalldataSelector,\n discarded,\n calldataIndex: filter.calldataIndex,\n signature: filter.signature,\n }),\n );\n case \"calldata-amount\":\n await this.provideCalldataInfos(filter.calldataIndex);\n return await this.api.sendCommand(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.CalldataAmount,\n discarded,\n calldataIndex: filter.calldataIndex,\n signature: filter.signature,\n }),\n );\n default: {\n const unhandledType: never = filter;\n throw new Error(\n `ProvideEIP712ContextTask/provideFiltering - Unhandled filter ${unhandledType}`,\n );\n }\n }\n }\n\n private async provideCalldataInfos(\n calldataIndex: number,\n ): Promise<Maybe<CommandResult<AllSuccessTypes, EthErrorCodes>>> {\n if (this.args.clearSignContext.isJust()) {\n // ensure the calldata info was not already provided to the device\n if (this.calldataMetadatas[calldataIndex] !== undefined) {\n // If already provided, update the remaining filters count\n this.calldataMetadatas[calldataIndex]!.remainingFilters--;\n return Nothing;\n }\n\n // get the calldata infos\n const calldataInfos =\n this.args.clearSignContext.extract().calldatas[calldataIndex];\n if (calldataInfos === undefined) {\n return Nothing;\n }\n\n // Initialize the expected filters count\n const filtersPresence = [\n calldataInfos.filter.valueFlag,\n calldataInfos.filter.calleeFlag ===\n TypedDataCalldataParamPresence.Present,\n calldataInfos.filter.chainIdFlag,\n calldataInfos.filter.selectorFlag,\n calldataInfos.filter.amountFlag,\n calldataInfos.filter.spenderFlag ===\n TypedDataCalldataParamPresence.Present,\n ];\n const filtersCount = filtersPresence.filter((f) => f).length;\n this.calldataMetadatas[calldataIndex] = {\n remainingFilters: filtersCount - 1, // Minus 1 since a filter is already being sent\n contexts: this.args.calldatasContexts[calldataIndex],\n };\n\n // provide the transaction infos filter\n return Maybe.of(\n await this.api.sendCommand(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.CalldataInfo,\n discarded: false,\n calldataIndex: calldataIndex,\n valueFlag: calldataInfos.filter.valueFlag,\n calleeFlag: this.mapCalldataPresence(\n calldataInfos.filter.calleeFlag,\n ),\n chainIdFlag: calldataInfos.filter.chainIdFlag,\n selectorFlag: calldataInfos.filter.selectorFlag,\n amountFlag: calldataInfos.filter.amountFlag,\n spenderFlag: this.mapCalldataPresence(\n calldataInfos.filter.spenderFlag,\n ),\n signature: calldataInfos.filter.signature,\n }),\n ),\n );\n }\n return Nothing;\n }\n\n private async tryProvideTransactionContext() {\n for (const calldataIndex in this.calldataMetadatas) {\n const metadata = this.calldataMetadatas[calldataIndex]!;\n if (metadata.remainingFilters === 0) {\n // All the filters and implementations were sent for that TX,\n // the related clear sign contexts should now be provided\n if (metadata.contexts !== undefined) {\n await this.provideContextFactory({\n contexts: metadata.contexts,\n derivationPath: this.args.derivationPath,\n }).run();\n }\n delete this.calldataMetadatas[calldataIndex];\n }\n }\n }\n\n private mapCalldataPresence(\n presence: TypedDataCalldataParamPresence,\n ): CalldataParamPresence {\n switch (presence) {\n case TypedDataCalldataParamPresence.None:\n return CalldataParamPresence.None;\n case TypedDataCalldataParamPresence.Present:\n return CalldataParamPresence.Present;\n case TypedDataCalldataParamPresence.VerifyingContract:\n return CalldataParamPresence.VerifyingContract;\n default: {\n const unhandledPresence: never = presence;\n throw new Error(`Unhandled presence ${unhandledPresence}`);\n }\n }\n }\n\n private sanitizeDeviceIndex(\n descriptorIndex: number,\n deviceIndexes: DeviceAssetIndexes,\n ) {\n // If a token is missing, the device will replace it with a placeholder and use the next available index\n if (deviceIndexes.indexes[descriptorIndex] === undefined) {\n deviceIndexes.indexes[descriptorIndex] = deviceIndexes.nextIndex;\n deviceIndexes.nextIndex =\n (deviceIndexes.nextIndex + 1) % DEVICE_ASSETS_MAX;\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["ProvideEIP712ContextTask_exports", "__export", "ProvideEIP712ContextTask", "__toCommonJS", "import_context_module", "import_device_management_kit", "import_purify_ts", "import_GetChallengeCommand", "import_ProvideProxyInfoCommand", "import_ProvideTokenInformationCommand", "import_ProvideTrustedNameCommand", "import_ProvideWeb3CheckCommand", "import_SendEIP712FilteringCommand", "import_SendEIP712StructDefinitionCommand", "import_SendEIP712StructImplemCommand", "import_SendEIP712StructImplemTask", "import_Types", "import_ProvideTransactionContextsTask", "import_SendPayloadInChunksTask", "DEVICE_ASSETS_MAX", "api", "contextModule", "args", "provideContextFactory", "domainValue", "val", "clearSignContext", "result", "types", "aKey", "bKey", "structName", "fields", "structNameResult", "fieldName", "fieldType", "fieldResult", "activationResult", "value", "domainImplResult", "messageInfoFilterResult", "deviceIndexes", "maybeTokenError", "maybeNameError", "maybeFilterResult", "messageImplResult", "discardedFilters", "path", "filter", "discardedPathResult", "provideFilteringResult", "type", "payload", "certificate", "uncoveredType", "descriptorIndex", "token", "provideTokenInfoResult", "deviceIndex", "context", "address", "getChallengeResult", "provideNameResult", "filteringResult", "discarded", "unhandledType", "calldataIndex", "calldataInfos", "filtersCount", "f", "metadata", "presence", "unhandledPresence"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var b=require("@ledgerhq/context-module"),a=require("@ledgerhq/device-management-kit"),c=require("purify-ts"),E=require("../../app-binder/command/GetChallengeCommand"),g=require("../../app-binder/command/ProvideTokenInformationCommand"),A=require("../../app-binder/command/ProvideWeb3CheckCommand"),t=require("../../app-binder/command/SendEIP712FilteringCommand"),y=require("../../app-binder/command/SendEIP712StructDefinitionCommand"),p=require("../../app-binder/command/SendEIP712StructImplemCommand"),q=require("../../app-binder/device-action/__test-utils__/makeInternalApi"),d=require("../../typed-data/model/Types"),i=require("./ProvideEIP712ContextTask");describe("ProvideEIP712ContextTask",()=>{const e=(0,q.makeDeviceActionInternalApiMock)(),l={getContext:vi.fn(),getContexts:vi.fn(),getTypedDataFilters:vi.fn(),getWeb3Checks:vi.fn(),getSolanaContext:vi.fn()},r={EIP712Domain:{name:new d.PrimitiveType("string","string",c.Nothing),chainId:new d.PrimitiveType("uint256","uint",(0,c.Just)(32)),verifyingContract:new d.PrimitiveType("address","address",c.Nothing)},PermitSingle:{details:new d.StructType("PermitDetails"),spender:new d.PrimitiveType("address","address",c.Nothing),sigDeadline:new d.PrimitiveType("uint256","uint",(0,c.Just)(32))},PermitDetails:{token:new d.PrimitiveType("address","address",c.Nothing),amount:new d.PrimitiveType("uint160","uint",(0,c.Just)(20)),expiration:new d.PrimitiveType("uint48","uint",(0,c.Just)(6)),nonce:new d.PrimitiveType("uint48","uint",(0,c.Just)(6))}},m=[{path:"",type:"",value:new d.TypedDataValueRoot("EIP712Domain")},{path:"name",type:"string",value:new d.TypedDataValueField(new TextEncoder().encode("Permit2"))},{path:"chainId",type:"uint256",value:new d.TypedDataValueField(Uint8Array.from([137]))},{path:"verifyingContract",type:"address",value:new d.TypedDataValueField((0,a.hexaStringToBuffer)("0x000000000022d473030f116ddee9f6b43ac78ba3"))}],f=[{path:"",type:"",value:new d.TypedDataValueRoot("PermitSingle")},{path:"details.token",type:"address",value:new d.TypedDataValueField((0,a.hexaStringToBuffer)("0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"))},{path:"details.amount",type:"uint160",value:new d.TypedDataValueField(Uint8Array.from([18]))},{path:"details.expiration",type:"uint48",value:new d.TypedDataValueField(Uint8Array.from([18]))},{path:"details.nonce",type:"uint48",value:new d.TypedDataValueField(Uint8Array.from([0]))},{path:"spender",type:"address",value:new d.TypedDataValueField((0,a.hexaStringToBuffer)("0xec7be89e9d109e7e3fec59c222cf297125fefda2"))},{path:"sigDeadline",type:"uint256",value:new d.TypedDataValueField(Uint8Array.from([18]))}],x={type:"success",messageInfo:{displayName:"Permit2",filtersCount:4,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},trustedNamesAddresses:{},tokens:{0:"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",255:"payload-0x000000000022d473030f116ddee9f6b43ac78ba3"},filters:{"details.amount":{displayName:"Amount allowance",path:"details.amount",signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3",tokenIndex:255,type:"amount"},"details.expiration":{displayName:"Approval expire",path:"details.expiration",signature:"3044022056b3381e4540629ad73bc434ec49d80523234b82f62340fbb77157fb0eb21a680220459fe9cf6ca309f9c7dfc6d4711fea1848dba661563c57f77b3c2dc480b3a63b",type:"datetime"},"details.token":{displayName:"Amount allowance",path:"details.token",signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733",tokenIndex:0,type:"token"},spender:{displayName:"Approve to spender",path:"spender",signature:"3044022033e5713d9cb9bc375b56a9fb53b736c81ea3c4ac5cfb2d3ca7f8b8f0558fe2430220543ca4fef6d6f725f29e343f167fe9dd582aa856ecb5797259050eb990a1befb",type:"raw"}}},C=new d.PrimitiveType("address","address",c.Nothing),h=new d.PrimitiveType("string","string",c.Nothing),S=new d.PrimitiveType("uint256","uint",(0,c.Just)(32)),I=new d.PrimitiveType("uint160","uint",(0,c.Just)(20)),w=new d.PrimitiveType("uint48","uint",(0,c.Just)(6)),R=n=>new d.StructType(n),k=n=>new y.SendEIP712StructDefinitionCommand({command:y.StructDefinitionCommand.Name,name:n}),o=(n,u)=>new y.SendEIP712StructDefinitionCommand({command:y.StructDefinitionCommand.Field,name:n,type:u}),v=n=>new p.SendEIP712StructImplemCommand({type:p.StructImplemType.ROOT,value:n}),P=n=>new p.SendEIP712StructImplemCommand({type:p.StructImplemType.ARRAY,value:n}),s=n=>new p.SendEIP712StructImplemCommand({type:p.StructImplemType.FIELD,value:{data:n,isLastChunk:!0}});beforeEach(()=>{vi.resetAllMocks()}),it("Send context with no clear signing context",async()=>{const n={web3Check:null,types:r,domain:m,message:f,clearSignContext:c.Nothing};e.sendCommand.mockResolvedValue((0,a.CommandResultFactory)({data:void 0})),await new i.ProvideEIP712ContextTask(e,l,n).run(),expect(e.sendCommand.mock.calls).toHaveLength(24),expect(e.sendCommand.mock.calls[0][0]).toStrictEqual(k("EIP712Domain")),expect(e.sendCommand.mock.calls[1][0]).toStrictEqual(o("name",h)),expect(e.sendCommand.mock.calls[2][0]).toStrictEqual(o("chainId",S)),expect(e.sendCommand.mock.calls[3][0]).toStrictEqual(o("verifyingContract",C)),expect(e.sendCommand.mock.calls[4][0]).toStrictEqual(k("PermitDetails")),expect(e.sendCommand.mock.calls[5][0]).toStrictEqual(o("token",C)),expect(e.sendCommand.mock.calls[6][0]).toStrictEqual(o("amount",I)),expect(e.sendCommand.mock.calls[7][0]).toStrictEqual(o("expiration",w)),expect(e.sendCommand.mock.calls[8][0]).toStrictEqual(o("nonce",w)),expect(e.sendCommand.mock.calls[9][0]).toStrictEqual(k("PermitSingle")),expect(e.sendCommand.mock.calls[10][0]).toStrictEqual(o("details",R("PermitDetails"))),expect(e.sendCommand.mock.calls[11][0]).toStrictEqual(o("spender",C)),expect(e.sendCommand.mock.calls[12][0]).toStrictEqual(o("sigDeadline",S)),expect(e.sendCommand.mock.calls[13][0]).toStrictEqual(v("EIP712Domain")),expect(e.sendCommand.mock.calls[14][0]).toStrictEqual(s(Uint8Array.from([0,7,80,101,114,109,105,116,50]))),expect(e.sendCommand.mock.calls[15][0]).toStrictEqual(s(Uint8Array.from([0,1,137]))),expect(e.sendCommand.mock.calls[16][0]).toStrictEqual(s(Uint8Array.from([0,20,0,0,0,0,0,34,212,115,3,15,17,109,222,233,246,180,58,199,139,163]))),expect(e.sendCommand.mock.calls[17][0]).toStrictEqual(v("PermitSingle")),expect(e.sendCommand.mock.calls[18][0]).toStrictEqual(s(Uint8Array.from([0,20,124,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,25]))),expect(e.sendCommand.mock.calls[19][0]).toStrictEqual(s(Uint8Array.from([0,1,18]))),expect(e.sendCommand.mock.calls[20][0]).toStrictEqual(s(Uint8Array.from([0,1,18]))),expect(e.sendCommand.mock.calls[21][0]).toStrictEqual(s(Uint8Array.from([0,1,0]))),expect(e.sendCommand.mock.calls[22][0]).toStrictEqual(s(Uint8Array.from([0,20,236,123,232,158,157,16,158,126,63,236,89,194,34,207,41,113,37,254,253,162]))),expect(e.sendCommand.mock.calls[23][0]).toStrictEqual(s(Uint8Array.from([0,1,18])))}),it("Send context with clear signing",async()=>{const n={web3Check:null,types:r,domain:m,message:f,clearSignContext:(0,c.Just)(x)};e.sendCommand.mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:{tokenIndex:4}})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:{tokenIndex:5}})),e.sendCommand.mockResolvedValue((0,a.CommandResultFactory)({data:void 0})),await new i.ProvideEIP712ContextTask(e,l,n).run(),expect(e.sendCommand.mock.calls).toHaveLength(32),expect(e.sendCommand.mock.calls[0][0]).toStrictEqual(k("EIP712Domain")),expect(e.sendCommand.mock.calls[1][0]).toStrictEqual(o("name",h)),expect(e.sendCommand.mock.calls[2][0]).toStrictEqual(o("chainId",S)),expect(e.sendCommand.mock.calls[3][0]).toStrictEqual(o("verifyingContract",C)),expect(e.sendCommand.mock.calls[4][0]).toStrictEqual(k("PermitDetails")),expect(e.sendCommand.mock.calls[5][0]).toStrictEqual(o("token",C)),expect(e.sendCommand.mock.calls[6][0]).toStrictEqual(o("amount",I)),expect(e.sendCommand.mock.calls[7][0]).toStrictEqual(o("expiration",w)),expect(e.sendCommand.mock.calls[8][0]).toStrictEqual(o("nonce",w)),expect(e.sendCommand.mock.calls[9][0]).toStrictEqual(k("PermitSingle")),expect(e.sendCommand.mock.calls[10][0]).toStrictEqual(o("details",R("PermitDetails"))),expect(e.sendCommand.mock.calls[11][0]).toStrictEqual(o("spender",C)),expect(e.sendCommand.mock.calls[12][0]).toStrictEqual(o("sigDeadline",S)),expect(e.sendCommand.mock.calls[13][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Activation})),expect(e.sendCommand.mock.calls[14][0]).toStrictEqual(v("EIP712Domain")),expect(e.sendCommand.mock.calls[15][0]).toStrictEqual(s(Uint8Array.from([0,7,80,101,114,109,105,116,50]))),expect(e.sendCommand.mock.calls[16][0]).toStrictEqual(s(Uint8Array.from([0,1,137]))),expect(e.sendCommand.mock.calls[17][0]).toStrictEqual(s(Uint8Array.from([0,20,0,0,0,0,0,34,212,115,3,15,17,109,222,233,246,180,58,199,139,163]))),expect(e.sendCommand.mock.calls[18][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.MessageInfo,displayName:"Permit2",filtersCount:4,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"})),expect(e.sendCommand.mock.calls[19][0]).toStrictEqual(v("PermitSingle")),expect(e.sendCommand.mock.calls[20][0]).toStrictEqual(new g.ProvideTokenInformationCommand({payload:"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"})),expect(e.sendCommand.mock.calls[21][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Token,discarded:!1,tokenIndex:4,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"})),expect(e.sendCommand.mock.calls[22][0]).toStrictEqual(s(Uint8Array.from([0,20,124,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,25]))),expect(e.sendCommand.mock.calls[23][0]).toStrictEqual(new g.ProvideTokenInformationCommand({payload:"payload-0x000000000022d473030f116ddee9f6b43ac78ba3"})),expect(e.sendCommand.mock.calls[24][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Amount,discarded:!1,displayName:"Amount allowance",tokenIndex:255,signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3"})),expect(e.sendCommand.mock.calls[25][0]).toStrictEqual(s(Uint8Array.from([0,1,18]))),expect(e.sendCommand.mock.calls[26][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Datetime,discarded:!1,displayName:"Approval expire",signature:"3044022056b3381e4540629ad73bc434ec49d80523234b82f62340fbb77157fb0eb21a680220459fe9cf6ca309f9c7dfc6d4711fea1848dba661563c57f77b3c2dc480b3a63b"})),expect(e.sendCommand.mock.calls[27][0]).toStrictEqual(s(Uint8Array.from([0,1,18]))),expect(e.sendCommand.mock.calls[28][0]).toStrictEqual(s(Uint8Array.from([0,1,0]))),expect(e.sendCommand.mock.calls[29][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Raw,discarded:!1,displayName:"Approve to spender",signature:"3044022033e5713d9cb9bc375b56a9fb53b736c81ea3c4ac5cfb2d3ca7f8b8f0558fe2430220543ca4fef6d6f725f29e343f167fe9dd582aa856ecb5797259050eb990a1befb"})),expect(e.sendCommand.mock.calls[30][0]).toStrictEqual(s(Uint8Array.from([0,20,236,123,232,158,157,16,158,126,63,236,89,194,34,207,41,113,37,254,253,162]))),expect(e.sendCommand.mock.calls[31][0]).toStrictEqual(s(Uint8Array.from([0,1,18])))}),it("Both tokens unavailable",async()=>{const n={web3Check:null,types:r,domain:m,message:f,clearSignContext:(0,c.Just)({type:"success",messageInfo:x.messageInfo,filters:x.filters,trustedNamesAddresses:{},tokens:{}})};e.sendCommand.mockResolvedValue((0,a.CommandResultFactory)({data:void 0})),await new i.ProvideEIP712ContextTask(e,l,n).run(),expect(e.sendCommand).not.toHaveBeenCalledWith(new g.ProvideTokenInformationCommand({payload:"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"})),expect(e.sendCommand).not.toHaveBeenCalledWith(new g.ProvideTokenInformationCommand({payload:"payload-0x000000000022d473030f116ddee9f6b43ac78ba3"})),expect(e.sendCommand).toHaveBeenCalledWith(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Token,discarded:!1,tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"})),expect(e.sendCommand).toHaveBeenCalledWith(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Amount,discarded:!1,displayName:"Amount allowance",tokenIndex:1,signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3"}))}),it("First token unavailable",async()=>{const n={web3Check:null,types:r,domain:m,message:f,clearSignContext:(0,c.Just)({type:"success",messageInfo:x.messageInfo,filters:x.filters,trustedNamesAddresses:{},tokens:{255:"payload-0x000000000022d473030f116ddee9f6b43ac78ba3"}})};e.sendCommand.mockResolvedValue((0,a.CommandResultFactory)({data:{tokenIndex:4}})),await new i.ProvideEIP712ContextTask(e,l,n).run(),expect(e.sendCommand).toHaveBeenCalledWith(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Token,discarded:!1,tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"})),expect(e.sendCommand).toHaveBeenCalledWith(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Amount,discarded:!1,displayName:"Amount allowance",tokenIndex:255,signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3"}))}),it("Second token unavailable",async()=>{const n={web3Check:null,types:r,domain:m,message:f,clearSignContext:(0,c.Just)({type:"success",messageInfo:x.messageInfo,filters:x.filters,trustedNamesAddresses:{},tokens:{0:"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"}})};e.sendCommand.mockResolvedValue((0,a.CommandResultFactory)({data:{tokenIndex:4}})),await new i.ProvideEIP712ContextTask(e,l,n).run(),expect(e.sendCommand).toHaveBeenCalledWith(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Token,discarded:!1,tokenIndex:4,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"})),expect(e.sendCommand).toHaveBeenCalledWith(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Amount,discarded:!1,displayName:"Amount allowance",tokenIndex:0,signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3"}))}),it("Filter with trusted name",async()=>{const n={web3Check:null,types:r,domain:m,message:f,clearSignContext:(0,c.Just)({type:"success",messageInfo:x.messageInfo,filters:{"details.token":{displayName:"Amount allowance",path:"details.token",signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733",types:["contract"],sources:["local","ens"],typesAndSourcesPayload:"010203010002",type:"trusted-name"}},trustedNamesAddresses:{"details.token":"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"},tokens:{}})};e.sendCommand.mockResolvedValue((0,a.CommandResultFactory)({data:{challenge:"0x42"}})),l.getContext.mockResolvedValue({type:b.ClearSignContextType.TRUSTED_NAME,payload:"0x01020304"}),await new i.ProvideEIP712ContextTask(e,l,n).run(),expect(e.sendCommand).toHaveBeenCalledWith(new E.GetChallengeCommand),expect(l.getContext).toHaveBeenCalledWith({type:b.ClearSignContextType.TRUSTED_NAME,chainId:137,address:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",types:["contract"],sources:["local","ens"],challenge:"0x42"}),expect(e.sendCommand).toHaveBeenCalledWith(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.TrustedName,discarded:!1,displayName:"Amount allowance",typesAndSourcesPayload:"010203010002",signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"}))}),it("Filter with trusted name and certificate",async()=>{const n={web3Check:null,types:r,domain:m,message:f,clearSignContext:(0,c.Just)({type:"success",messageInfo:x.messageInfo,filters:{"details.token":{displayName:"Amount allowance",path:"details.token",signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733",types:["contract"],sources:["local","ens"],typesAndSourcesPayload:"010203010002",type:"trusted-name"}},trustedNamesAddresses:{"details.token":"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"},tokens:{}})};e.sendCommand.mockResolvedValue((0,a.CommandResultFactory)({data:{challenge:"0x42"}})),l.getContext.mockResolvedValue({type:b.ClearSignContextType.TRUSTED_NAME,certificate:{keyUsageNumber:7,payload:new Uint8Array(3).fill(42)},payload:"0x01020304"}),await new i.ProvideEIP712ContextTask(e,l,n).run(),expect(e.sendCommand).toHaveBeenCalledWith(new E.GetChallengeCommand),expect(l.getContext).toHaveBeenCalledWith({type:b.ClearSignContextType.TRUSTED_NAME,chainId:137,address:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",types:["contract"],sources:["local","ens"],challenge:"0x42"}),expect(e.sendCommand).toHaveBeenCalledWith(new a.LoadCertificateCommand({keyUsage:7,certificate:new Uint8Array(3).fill(42)})),expect(e.sendCommand).toHaveBeenCalledWith(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.TrustedName,discarded:!1,displayName:"Amount allowance",typesAndSourcesPayload:"010203010002",signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"}))}),it("Provide Web3Check",async()=>{const u={web3Check:{type:b.ClearSignContextType.WEB3_CHECK,payload:"0x010203"},types:r,domain:m,message:f,clearSignContext:c.Nothing};e.sendCommand.mockResolvedValue((0,a.CommandResultFactory)({data:void 0})),await new i.ProvideEIP712ContextTask(e,l,u).run(),expect(e.sendCommand).toHaveBeenCalledWith(new A.ProvideWeb3CheckCommand({payload:(0,a.hexaStringToBuffer)("0x0003010203"),isFirstChunk:!0}))}),it("Provide Web3Check and certificate",async()=>{const n={type:b.ClearSignContextType.WEB3_CHECK,certificate:{keyUsageNumber:3,payload:new Uint8Array(3).fill(42)},payload:"0x010203"},u={web3Check:n,types:r,domain:m,message:f,clearSignContext:c.Nothing};e.sendCommand.mockResolvedValue((0,a.CommandResultFactory)({data:void 0})),await new i.ProvideEIP712ContextTask(e,l,u).run(),expect(e.sendCommand).toHaveBeenCalledWith(new a.LoadCertificateCommand({keyUsage:3,certificate:n.certificate.payload})),expect(e.sendCommand).toHaveBeenCalledWith(new A.ProvideWeb3CheckCommand({payload:(0,a.hexaStringToBuffer)("0x0003010203"),isFirstChunk:!0}))}),it("Error when providing tokens",async()=>{const n={web3Check:null,types:r,domain:m,message:f,clearSignContext:(0,c.Just)(x)};e.sendCommand.mockResolvedValueOnce((0,a.CommandResultFactory)({error:new a.UnknownDeviceExchangeError("error")}));const u=new i.ProvideEIP712ContextTask(e,l,n).run();await expect(u).resolves.toStrictEqual((0,a.CommandResultFactory)({error:new a.UnknownDeviceExchangeError("error")}))}),it("Error when sending struct definitions",async()=>{const n={web3Check:null,types:r,domain:m,message:f,clearSignContext:(0,c.Just)(x)};e.sendCommand.mockResolvedValueOnce((0,a.CommandResultFactory)({data:{tokenIndex:4}})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:{tokenIndex:5}})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({error:new a.UnknownDeviceExchangeError("error")}));const u=new i.ProvideEIP712ContextTask(e,l,n).run();await expect(u).resolves.toStrictEqual((0,a.CommandResultFactory)({error:new a.UnknownDeviceExchangeError("error")}))}),it("Error when sending struct implementations",async()=>{const n={web3Check:null,types:r,domain:m,message:f,clearSignContext:c.Nothing};e.sendCommand.mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({error:new a.UnknownDeviceExchangeError("error")})).mockResolvedValue((0,a.CommandResultFactory)({data:void 0}));const u=new i.ProvideEIP712ContextTask(e,l,n).run();await expect(u).resolves.toStrictEqual((0,a.CommandResultFactory)({error:new a.UnknownDeviceExchangeError("error")}))}),it("Send struct array",async()=>{const n={web3Check:null,types:{},domain:[],message:[{path:"spenders",type:"address[]",value:new d.TypedDataValueArray(1)},{path:"spenders.[]",type:"address",value:new d.TypedDataValueField((0,a.hexaStringToBuffer)("0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"))},{path:"beneficiaries",type:"address[]",value:new d.TypedDataValueArray(0)}],clearSignContext:(0,c.Just)({type:"success",messageInfo:{displayName:"Permit2",filtersCount:2,signature:"sig"},trustedNamesAddresses:{},tokens:{},filters:{"spenders.[]":{displayName:"Spender",path:"spenders.[]",signature:"sig",type:"raw"},"beneficiaries.[]":{displayName:"Beneficiary",path:"beneficiaries.[]",signature:"sig",type:"raw"}}})};e.sendCommand.mockResolvedValue((0,a.CommandResultFactory)({data:void 0})),await new i.ProvideEIP712ContextTask(e,l,n).run(),expect(e.sendCommand.mock.calls[0][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Activation})),expect(e.sendCommand.mock.calls[1][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.MessageInfo,displayName:"Permit2",filtersCount:2,signature:"sig"})),expect(e.sendCommand.mock.calls[2][0]).toStrictEqual(P(1)),expect(e.sendCommand.mock.calls[3][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Raw,discarded:!1,displayName:"Spender",signature:"sig"})),expect(e.sendCommand.mock.calls[4][0]).toStrictEqual(s(Uint8Array.from([0,20,124,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,25]))),expect(e.sendCommand.mock.calls[5][0]).toStrictEqual(P(0)),expect(e.sendCommand.mock.calls[6][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.DiscardedPath,path:"beneficiaries.[]"})),expect(e.sendCommand.mock.calls[7][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Raw,discarded:!0,displayName:"Beneficiary",signature:"sig"}))})});
|
|
1
|
+
"use strict";var p=require("@ledgerhq/context-module"),a=require("@ledgerhq/device-management-kit"),c=require("purify-ts"),R=require("../../app-binder/command/ProvideProxyInfoCommand"),v=require("../../app-binder/command/ProvideTokenInformationCommand"),I=require("../../app-binder/command/ProvideWeb3CheckCommand"),t=require("../../app-binder/command/SendEIP712FilteringCommand"),g=require("../../app-binder/command/SendEIP712StructDefinitionCommand"),C=require("../../app-binder/command/SendEIP712StructImplemCommand"),q=require("../../app-binder/device-action/__test-utils__/makeInternalApi"),n=require("../../typed-data/model/Types"),i=require("./ProvideEIP712ContextTask");describe("ProvideEIP712ContextTask",()=>{const e=(0,q.makeDeviceActionInternalApiMock)(),l=vi.fn(),r={getFieldContext:vi.fn(),getContexts:vi.fn(),getTypedDataFilters:vi.fn(),getWeb3Checks:vi.fn(),getSolanaContext:vi.fn()},m={EIP712Domain:{name:new n.PrimitiveType("string","string",c.Nothing),chainId:new n.PrimitiveType("uint256","uint",(0,c.Just)(32)),verifyingContract:new n.PrimitiveType("address","address",c.Nothing)},PermitSingle:{details:new n.StructType("PermitDetails"),spender:new n.PrimitiveType("address","address",c.Nothing),sigDeadline:new n.PrimitiveType("uint256","uint",(0,c.Just)(32))},PermitDetails:{token:new n.PrimitiveType("address","address",c.Nothing),amount:new n.PrimitiveType("uint160","uint",(0,c.Just)(20)),expiration:new n.PrimitiveType("uint48","uint",(0,c.Just)(6)),nonce:new n.PrimitiveType("uint48","uint",(0,c.Just)(6))}},b=[{path:"",type:"",value:new n.TypedDataValueRoot("EIP712Domain")},{path:"name",type:"string",value:new n.TypedDataValueField(new TextEncoder().encode("Permit2"))},{path:"chainId",type:"uint256",value:new n.TypedDataValueField(Uint8Array.from([137]))},{path:"verifyingContract",type:"address",value:new n.TypedDataValueField((0,a.hexaStringToBuffer)("0x000000000022d473030f116ddee9f6b43ac78ba3"))}],x=[{path:"",type:"",value:new n.TypedDataValueRoot("PermitSingle")},{path:"details.token",type:"address",value:new n.TypedDataValueField((0,a.hexaStringToBuffer)("0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"))},{path:"details.amount",type:"uint160",value:new n.TypedDataValueField(Uint8Array.from([18]))},{path:"details.expiration",type:"uint48",value:new n.TypedDataValueField(Uint8Array.from([18]))},{path:"details.nonce",type:"uint48",value:new n.TypedDataValueField(Uint8Array.from([0]))},{path:"spender",type:"address",value:new n.TypedDataValueField((0,a.hexaStringToBuffer)("0xec7be89e9d109e7e3fec59c222cf297125fefda2"))},{path:"sigDeadline",type:"uint256",value:new n.TypedDataValueField(Uint8Array.from([18]))}],u={type:"success",messageInfo:{displayName:"Permit2",filtersCount:4,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},trustedNamesAddresses:{},calldatas:{},proxy:void 0,tokens:{0:"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",255:"payload-0x000000000022d473030f116ddee9f6b43ac78ba3"},filters:{"details.amount":{displayName:"Amount allowance",path:"details.amount",signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3",tokenIndex:255,type:"amount"},"details.expiration":{displayName:"Approval expire",path:"details.expiration",signature:"3044022056b3381e4540629ad73bc434ec49d80523234b82f62340fbb77157fb0eb21a680220459fe9cf6ca309f9c7dfc6d4711fea1848dba661563c57f77b3c2dc480b3a63b",type:"datetime"},"details.token":{displayName:"Amount allowance",path:"details.token",signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733",tokenIndex:0,type:"token"},spender:{displayName:"Approve to spender",path:"spender",signature:"3044022033e5713d9cb9bc375b56a9fb53b736c81ea3c4ac5cfb2d3ca7f8b8f0558fe2430220543ca4fef6d6f725f29e343f167fe9dd582aa856ecb5797259050eb990a1befb",type:"raw"}}},y=new n.PrimitiveType("address","address",c.Nothing),h=new n.PrimitiveType("string","string",c.Nothing),S=new n.PrimitiveType("uint256","uint",(0,c.Just)(32)),P=new n.PrimitiveType("uint160","uint",(0,c.Just)(20)),w=new n.PrimitiveType("uint48","uint",(0,c.Just)(6)),A=d=>new n.StructType(d),k=d=>new g.SendEIP712StructDefinitionCommand({command:g.StructDefinitionCommand.Name,name:d}),o=(d,f)=>new g.SendEIP712StructDefinitionCommand({command:g.StructDefinitionCommand.Field,name:d,type:f}),E=d=>new C.SendEIP712StructImplemCommand({type:C.StructImplemType.ROOT,value:d}),T=d=>new C.SendEIP712StructImplemCommand({type:C.StructImplemType.ARRAY,value:d}),s=d=>new C.SendEIP712StructImplemCommand({type:C.StructImplemType.FIELD,value:{data:d,isLastChunk:!0}});beforeEach(()=>{vi.resetAllMocks(),l.mockReturnValue({run:async()=>{}})}),it("Send context with no clear signing context",async()=>{const d={deviceModelId:a.DeviceModelId.STAX,derivationPath:"44'/60'/0'/0/0",web3Check:null,types:m,domain:b,message:x,clearSignContext:c.Nothing,calldatasContexts:{}};e.sendCommand.mockResolvedValue((0,a.CommandResultFactory)({data:void 0})),await new i.ProvideEIP712ContextTask(e,r,d,l).run(),expect(e.sendCommand.mock.calls).toHaveLength(24),expect(e.sendCommand.mock.calls[0][0]).toStrictEqual(k("EIP712Domain")),expect(e.sendCommand.mock.calls[1][0]).toStrictEqual(o("name",h)),expect(e.sendCommand.mock.calls[2][0]).toStrictEqual(o("chainId",S)),expect(e.sendCommand.mock.calls[3][0]).toStrictEqual(o("verifyingContract",y)),expect(e.sendCommand.mock.calls[4][0]).toStrictEqual(k("PermitDetails")),expect(e.sendCommand.mock.calls[5][0]).toStrictEqual(o("token",y)),expect(e.sendCommand.mock.calls[6][0]).toStrictEqual(o("amount",P)),expect(e.sendCommand.mock.calls[7][0]).toStrictEqual(o("expiration",w)),expect(e.sendCommand.mock.calls[8][0]).toStrictEqual(o("nonce",w)),expect(e.sendCommand.mock.calls[9][0]).toStrictEqual(k("PermitSingle")),expect(e.sendCommand.mock.calls[10][0]).toStrictEqual(o("details",A("PermitDetails"))),expect(e.sendCommand.mock.calls[11][0]).toStrictEqual(o("spender",y)),expect(e.sendCommand.mock.calls[12][0]).toStrictEqual(o("sigDeadline",S)),expect(e.sendCommand.mock.calls[13][0]).toStrictEqual(E("EIP712Domain")),expect(e.sendCommand.mock.calls[14][0]).toStrictEqual(s(Uint8Array.from([0,7,80,101,114,109,105,116,50]))),expect(e.sendCommand.mock.calls[15][0]).toStrictEqual(s(Uint8Array.from([0,1,137]))),expect(e.sendCommand.mock.calls[16][0]).toStrictEqual(s(Uint8Array.from([0,20,0,0,0,0,0,34,212,115,3,15,17,109,222,233,246,180,58,199,139,163]))),expect(e.sendCommand.mock.calls[17][0]).toStrictEqual(E("PermitSingle")),expect(e.sendCommand.mock.calls[18][0]).toStrictEqual(s(Uint8Array.from([0,20,124,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,25]))),expect(e.sendCommand.mock.calls[19][0]).toStrictEqual(s(Uint8Array.from([0,1,18]))),expect(e.sendCommand.mock.calls[20][0]).toStrictEqual(s(Uint8Array.from([0,1,18]))),expect(e.sendCommand.mock.calls[21][0]).toStrictEqual(s(Uint8Array.from([0,1,0]))),expect(e.sendCommand.mock.calls[22][0]).toStrictEqual(s(Uint8Array.from([0,20,236,123,232,158,157,16,158,126,63,236,89,194,34,207,41,113,37,254,253,162]))),expect(e.sendCommand.mock.calls[23][0]).toStrictEqual(s(Uint8Array.from([0,1,18])))}),it("Send context with clear signing",async()=>{const d={deviceModelId:a.DeviceModelId.STAX,derivationPath:"44'/60'/0'/0/0",web3Check:null,types:m,domain:b,message:x,clearSignContext:(0,c.Just)(u),calldatasContexts:{}};e.sendCommand.mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:{tokenIndex:4}})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:{tokenIndex:5}})),e.sendCommand.mockResolvedValue((0,a.CommandResultFactory)({data:void 0})),await new i.ProvideEIP712ContextTask(e,r,d,l).run(),expect(e.sendCommand.mock.calls).toHaveLength(32),expect(e.sendCommand.mock.calls[0][0]).toStrictEqual(k("EIP712Domain")),expect(e.sendCommand.mock.calls[1][0]).toStrictEqual(o("name",h)),expect(e.sendCommand.mock.calls[2][0]).toStrictEqual(o("chainId",S)),expect(e.sendCommand.mock.calls[3][0]).toStrictEqual(o("verifyingContract",y)),expect(e.sendCommand.mock.calls[4][0]).toStrictEqual(k("PermitDetails")),expect(e.sendCommand.mock.calls[5][0]).toStrictEqual(o("token",y)),expect(e.sendCommand.mock.calls[6][0]).toStrictEqual(o("amount",P)),expect(e.sendCommand.mock.calls[7][0]).toStrictEqual(o("expiration",w)),expect(e.sendCommand.mock.calls[8][0]).toStrictEqual(o("nonce",w)),expect(e.sendCommand.mock.calls[9][0]).toStrictEqual(k("PermitSingle")),expect(e.sendCommand.mock.calls[10][0]).toStrictEqual(o("details",A("PermitDetails"))),expect(e.sendCommand.mock.calls[11][0]).toStrictEqual(o("spender",y)),expect(e.sendCommand.mock.calls[12][0]).toStrictEqual(o("sigDeadline",S)),expect(e.sendCommand.mock.calls[13][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Activation})),expect(e.sendCommand.mock.calls[14][0]).toStrictEqual(E("EIP712Domain")),expect(e.sendCommand.mock.calls[15][0]).toStrictEqual(s(Uint8Array.from([0,7,80,101,114,109,105,116,50]))),expect(e.sendCommand.mock.calls[16][0]).toStrictEqual(s(Uint8Array.from([0,1,137]))),expect(e.sendCommand.mock.calls[17][0]).toStrictEqual(s(Uint8Array.from([0,20,0,0,0,0,0,34,212,115,3,15,17,109,222,233,246,180,58,199,139,163]))),expect(e.sendCommand.mock.calls[18][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.MessageInfo,displayName:"Permit2",filtersCount:4,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"})),expect(e.sendCommand.mock.calls[19][0]).toStrictEqual(E("PermitSingle")),expect(e.sendCommand.mock.calls[20][0]).toStrictEqual(new v.ProvideTokenInformationCommand({payload:"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"})),expect(e.sendCommand.mock.calls[21][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Token,discarded:!1,tokenIndex:4,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"})),expect(e.sendCommand.mock.calls[22][0]).toStrictEqual(s(Uint8Array.from([0,20,124,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,25]))),expect(e.sendCommand.mock.calls[23][0]).toStrictEqual(new v.ProvideTokenInformationCommand({payload:"payload-0x000000000022d473030f116ddee9f6b43ac78ba3"})),expect(e.sendCommand.mock.calls[24][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Amount,discarded:!1,displayName:"Amount allowance",tokenIndex:255,signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3"})),expect(e.sendCommand.mock.calls[25][0]).toStrictEqual(s(Uint8Array.from([0,1,18]))),expect(e.sendCommand.mock.calls[26][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Datetime,discarded:!1,displayName:"Approval expire",signature:"3044022056b3381e4540629ad73bc434ec49d80523234b82f62340fbb77157fb0eb21a680220459fe9cf6ca309f9c7dfc6d4711fea1848dba661563c57f77b3c2dc480b3a63b"})),expect(e.sendCommand.mock.calls[27][0]).toStrictEqual(s(Uint8Array.from([0,1,18]))),expect(e.sendCommand.mock.calls[28][0]).toStrictEqual(s(Uint8Array.from([0,1,0]))),expect(e.sendCommand.mock.calls[29][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Raw,discarded:!1,displayName:"Approve to spender",signature:"3044022033e5713d9cb9bc375b56a9fb53b736c81ea3c4ac5cfb2d3ca7f8b8f0558fe2430220543ca4fef6d6f725f29e343f167fe9dd582aa856ecb5797259050eb990a1befb"})),expect(e.sendCommand.mock.calls[30][0]).toStrictEqual(s(Uint8Array.from([0,20,236,123,232,158,157,16,158,126,63,236,89,194,34,207,41,113,37,254,253,162]))),expect(e.sendCommand.mock.calls[31][0]).toStrictEqual(s(Uint8Array.from([0,1,18])))}),it("Both tokens unavailable",async()=>{const d={deviceModelId:a.DeviceModelId.STAX,derivationPath:"44'/60'/0'/0/0",web3Check:null,types:m,domain:b,message:x,clearSignContext:(0,c.Just)({type:"success",messageInfo:u.messageInfo,filters:u.filters,trustedNamesAddresses:{},calldatas:{},proxy:void 0,tokens:{}}),calldatasContexts:{}};e.sendCommand.mockResolvedValue((0,a.CommandResultFactory)({data:void 0})),await new i.ProvideEIP712ContextTask(e,r,d,l).run(),expect(e.sendCommand).not.toHaveBeenCalledWith(new v.ProvideTokenInformationCommand({payload:"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"})),expect(e.sendCommand).not.toHaveBeenCalledWith(new v.ProvideTokenInformationCommand({payload:"payload-0x000000000022d473030f116ddee9f6b43ac78ba3"})),expect(e.sendCommand).toHaveBeenCalledWith(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Token,discarded:!1,tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"})),expect(e.sendCommand).toHaveBeenCalledWith(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Amount,discarded:!1,displayName:"Amount allowance",tokenIndex:1,signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3"}))}),it("Provide calldata filters",async()=>{const d={deviceModelId:a.DeviceModelId.STAX,derivationPath:"44'/60'/0'/0/0",web3Check:null,types:m,domain:b,message:x,clearSignContext:(0,c.Just)({type:"success",messageInfo:u.messageInfo,filters:{"details.amount":{displayName:"Value",path:"details.amount",signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3",calldataIndex:0,type:"calldata-value"},"details.expiration":{displayName:"Callee",path:"details.expiration",signature:"304502201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3",calldataIndex:0,type:"calldata-callee"},spender:{displayName:"Spender",path:"spender",signature:"304602201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3",calldataIndex:0,type:"calldata-spender"},"details.token":{displayName:"Chain ID",path:"details.token",signature:"304702201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3",calldataIndex:0,type:"calldata-chain-id"},"details.nonce":{displayName:"Chain ID",path:"details.nonce",signature:"304802201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3",calldataIndex:1,type:"calldata-selector"},sigDeadline:{displayName:"Amount",path:"sigDeadline",signature:"304902201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3",calldataIndex:1,type:"calldata-amount"}},trustedNamesAddresses:{},calldatas:{0:{filter:{calldataIndex:0,displayName:"Transaction",valueFlag:!0,calleeFlag:p.TypedDataCalldataParamPresence.Present,chainIdFlag:!1,selectorFlag:!1,amountFlag:!0,spenderFlag:p.TypedDataCalldataParamPresence.VerifyingContract,signature:"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"},subset:{chainId:4660,data:"0x6a76120200000000000000000000000023f8abfc2824c397ccb3da89ae772984107ddb99",from:"0x8ceb23fd6bc0add59e62ac25578270cff1b9f619",selector:"0x778899aa",to:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",value:4200000000000000n}},1:{filter:{calldataIndex:1,displayName:"Transaction",valueFlag:!0,calleeFlag:p.TypedDataCalldataParamPresence.Present,chainIdFlag:!1,selectorFlag:!1,amountFlag:!0,spenderFlag:p.TypedDataCalldataParamPresence.VerifyingContract,signature:"3045932100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"},subset:{chainId:4661,data:"0x6a76120200000000000000000000000023f8abfc2824c397ccb3da89ae772984107ddb99",from:"0x8ceb23fd6bc0add59e62ac25578270cff1b9f619",selector:"0x778899aa",to:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",value:4300000000000000n}}},proxy:void 0,tokens:{}}),calldatasContexts:{0:[]}};e.sendCommand.mockResolvedValue((0,a.CommandResultFactory)({data:void 0})),await new i.ProvideEIP712ContextTask(e,r,d,l).run(),expect(l).toHaveBeenCalledTimes(1),expect(l).toHaveBeenCalledWith({contexts:[],derivationPath:"44'/60'/0'/0/0"}),expect(e.sendCommand).toHaveBeenCalledWith(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.CalldataInfo,discarded:!1,calldataIndex:0,valueFlag:!0,calleeFlag:t.CalldataParamPresence.Present,chainIdFlag:!1,selectorFlag:!1,amountFlag:!0,spenderFlag:t.CalldataParamPresence.VerifyingContract,signature:"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"})),expect(e.sendCommand).toHaveBeenCalledWith(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.CalldataValue,discarded:!1,calldataIndex:0,signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3"})),expect(e.sendCommand).toHaveBeenCalledWith(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.CalldataCallee,discarded:!1,calldataIndex:0,signature:"304502201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3"})),expect(e.sendCommand).toHaveBeenCalledWith(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.CalldataSpender,discarded:!1,calldataIndex:0,signature:"304602201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3"})),expect(e.sendCommand).toHaveBeenCalledWith(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.CalldataChainId,discarded:!1,calldataIndex:0,signature:"304702201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3"})),expect(e.sendCommand).toHaveBeenCalledWith(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.CalldataInfo,discarded:!1,calldataIndex:1,valueFlag:!0,calleeFlag:t.CalldataParamPresence.Present,chainIdFlag:!1,selectorFlag:!1,amountFlag:!0,spenderFlag:t.CalldataParamPresence.VerifyingContract,signature:"3045932100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"})),expect(e.sendCommand).toHaveBeenCalledWith(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.CalldataSelector,discarded:!1,calldataIndex:1,signature:"304802201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3"})),expect(e.sendCommand).toHaveBeenCalledWith(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.CalldataAmount,discarded:!1,calldataIndex:1,signature:"304902201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3"}))}),it("First token unavailable",async()=>{const d={deviceModelId:a.DeviceModelId.STAX,derivationPath:"44'/60'/0'/0/0",web3Check:null,types:m,domain:b,message:x,clearSignContext:(0,c.Just)({type:"success",messageInfo:u.messageInfo,filters:u.filters,trustedNamesAddresses:{},calldatas:{},proxy:void 0,tokens:{255:"payload-0x000000000022d473030f116ddee9f6b43ac78ba3"}}),calldatasContexts:{}};e.sendCommand.mockResolvedValue((0,a.CommandResultFactory)({data:{tokenIndex:4}})),await new i.ProvideEIP712ContextTask(e,r,d,l).run(),expect(e.sendCommand).toHaveBeenCalledWith(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Token,discarded:!1,tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"})),expect(e.sendCommand).toHaveBeenCalledWith(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Amount,discarded:!1,displayName:"Amount allowance",tokenIndex:255,signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3"}))}),it("Second token unavailable",async()=>{const d={deviceModelId:a.DeviceModelId.STAX,derivationPath:"44'/60'/0'/0/0",web3Check:null,types:m,domain:b,message:x,clearSignContext:(0,c.Just)({type:"success",messageInfo:u.messageInfo,filters:u.filters,trustedNamesAddresses:{},calldatas:{},proxy:void 0,tokens:{0:"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"}}),calldatasContexts:{}};e.sendCommand.mockResolvedValue((0,a.CommandResultFactory)({data:{tokenIndex:4}})),await new i.ProvideEIP712ContextTask(e,r,d,l).run(),expect(e.sendCommand).toHaveBeenCalledWith(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Token,discarded:!1,tokenIndex:4,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"})),expect(e.sendCommand).toHaveBeenCalledWith(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Amount,discarded:!1,displayName:"Amount allowance",tokenIndex:0,signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3"}))}),it("Provide proxy",async()=>{const d={type:p.ClearSignContextType.PROXY_INFO,payload:"0x010203"},f={...u,proxy:d},V={deviceModelId:a.DeviceModelId.STAX,derivationPath:"44'/60'/0'/0/0",web3Check:null,types:m,domain:b,message:x,clearSignContext:(0,c.Just)(f),calldatasContexts:{}};e.sendCommand.mockResolvedValue((0,a.CommandResultFactory)({data:{tokenIndex:4}})),await new i.ProvideEIP712ContextTask(e,r,V,l).run(),expect(e.sendCommand).toHaveBeenCalledWith(new R.ProvideProxyInfoCommand({data:(0,a.hexaStringToBuffer)("0x0003010203"),isFirstChunk:!0}))}),it("Provide Web3Check",async()=>{const d={type:p.ClearSignContextType.WEB3_CHECK,payload:"0x010203"},f={deviceModelId:a.DeviceModelId.STAX,derivationPath:"44'/60'/0'/0/0",web3Check:d,types:m,domain:b,message:x,clearSignContext:c.Nothing,calldatasContexts:{}};e.sendCommand.mockResolvedValue((0,a.CommandResultFactory)({data:void 0})),await new i.ProvideEIP712ContextTask(e,r,f,l).run(),expect(e.sendCommand).toHaveBeenCalledWith(new I.ProvideWeb3CheckCommand({payload:(0,a.hexaStringToBuffer)("0x0003010203"),isFirstChunk:!0}))}),it("Provide Web3Check and certificate",async()=>{const d={type:p.ClearSignContextType.WEB3_CHECK,certificate:{keyUsageNumber:3,payload:new Uint8Array(3).fill(42)},payload:"0x010203"},f={deviceModelId:a.DeviceModelId.STAX,derivationPath:"44'/60'/0'/0/0",web3Check:d,types:m,domain:b,message:x,clearSignContext:c.Nothing,calldatasContexts:{}};e.sendCommand.mockResolvedValue((0,a.CommandResultFactory)({data:void 0})),await new i.ProvideEIP712ContextTask(e,r,f,l).run(),expect(e.sendCommand).toHaveBeenCalledWith(new a.LoadCertificateCommand({keyUsage:3,certificate:d.certificate.payload})),expect(e.sendCommand).toHaveBeenCalledWith(new I.ProvideWeb3CheckCommand({payload:(0,a.hexaStringToBuffer)("0x0003010203"),isFirstChunk:!0}))}),it("Error when providing tokens",async()=>{const d={deviceModelId:a.DeviceModelId.STAX,derivationPath:"44'/60'/0'/0/0",web3Check:null,types:m,domain:b,message:x,clearSignContext:(0,c.Just)(u),calldatasContexts:{}};e.sendCommand.mockResolvedValueOnce((0,a.CommandResultFactory)({error:new a.UnknownDeviceExchangeError("error")}));const f=new i.ProvideEIP712ContextTask(e,r,d,l).run();await expect(f).resolves.toStrictEqual((0,a.CommandResultFactory)({error:new a.UnknownDeviceExchangeError("error")}))}),it("Error when sending struct definitions",async()=>{const d={deviceModelId:a.DeviceModelId.STAX,derivationPath:"44'/60'/0'/0/0",web3Check:null,types:m,domain:b,message:x,clearSignContext:(0,c.Just)(u),calldatasContexts:{}};e.sendCommand.mockResolvedValueOnce((0,a.CommandResultFactory)({data:{tokenIndex:4}})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:{tokenIndex:5}})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({error:new a.UnknownDeviceExchangeError("error")}));const f=new i.ProvideEIP712ContextTask(e,r,d,l).run();await expect(f).resolves.toStrictEqual((0,a.CommandResultFactory)({error:new a.UnknownDeviceExchangeError("error")}))}),it("Error when sending struct implementations",async()=>{const d={deviceModelId:a.DeviceModelId.STAX,derivationPath:"44'/60'/0'/0/0",web3Check:null,types:m,domain:b,message:x,clearSignContext:c.Nothing,calldatasContexts:{}};e.sendCommand.mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({error:new a.UnknownDeviceExchangeError("error")})).mockResolvedValue((0,a.CommandResultFactory)({data:void 0}));const f=new i.ProvideEIP712ContextTask(e,r,d,l).run();await expect(f).resolves.toStrictEqual((0,a.CommandResultFactory)({error:new a.UnknownDeviceExchangeError("error")}))}),it("Send struct array",async()=>{const d={deviceModelId:a.DeviceModelId.STAX,derivationPath:"44'/60'/0'/0/0",web3Check:null,types:{},domain:[],message:[{path:"spenders",type:"address[]",value:new n.TypedDataValueArray(1)},{path:"spenders.[]",type:"address",value:new n.TypedDataValueField((0,a.hexaStringToBuffer)("0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"))},{path:"beneficiaries",type:"address[]",value:new n.TypedDataValueArray(0)}],clearSignContext:(0,c.Just)({type:"success",messageInfo:{displayName:"Permit2",filtersCount:2,signature:"sig"},trustedNamesAddresses:{},calldatas:{},proxy:void 0,tokens:{},filters:{"spenders.[]":{displayName:"Spender",path:"spenders.[]",signature:"sig",type:"raw"},"beneficiaries.[]":{displayName:"Beneficiary",path:"beneficiaries.[]",signature:"sig",type:"raw"}}}),calldatasContexts:{}};e.sendCommand.mockResolvedValue((0,a.CommandResultFactory)({data:void 0})),await new i.ProvideEIP712ContextTask(e,r,d,l).run(),expect(e.sendCommand.mock.calls[0][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Activation})),expect(e.sendCommand.mock.calls[1][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.MessageInfo,displayName:"Permit2",filtersCount:2,signature:"sig"})),expect(e.sendCommand.mock.calls[2][0]).toStrictEqual(T(1)),expect(e.sendCommand.mock.calls[3][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Raw,discarded:!1,displayName:"Spender",signature:"sig"})),expect(e.sendCommand.mock.calls[4][0]).toStrictEqual(s(Uint8Array.from([0,20,124,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,25]))),expect(e.sendCommand.mock.calls[5][0]).toStrictEqual(T(0)),expect(e.sendCommand.mock.calls[6][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.DiscardedPath,path:"beneficiaries.[]"})),expect(e.sendCommand.mock.calls[7][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Raw,discarded:!0,displayName:"Beneficiary",signature:"sig"}))})});
|
|
2
2
|
//# sourceMappingURL=ProvideEIP712ContextTask.test.js.map
|