@ledgerhq/context-module 0.0.0-develop-20250922001227 → 0.0.0-develop-20250924001152
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/lib/cjs/src/ContextModule.js +1 -1
- package/lib/cjs/src/ContextModule.js.map +1 -1
- package/lib/cjs/src/ContextModuleBuilder.js +1 -1
- package/lib/cjs/src/ContextModuleBuilder.js.map +3 -3
- package/lib/cjs/src/ContextModuleBuilder.test.js +1 -1
- package/lib/cjs/src/ContextModuleBuilder.test.js.map +3 -3
- package/lib/cjs/src/DefaultContextModule.js +1 -1
- package/lib/cjs/src/DefaultContextModule.js.map +3 -3
- package/lib/cjs/src/DefaultContextModule.test.js +1 -1
- package/lib/cjs/src/DefaultContextModule.test.js.map +3 -3
- package/lib/cjs/src/calldata/data/CalldataDescriptorDataSource.js +2 -0
- package/lib/cjs/src/calldata/data/CalldataDescriptorDataSource.js.map +7 -0
- package/lib/cjs/src/calldata/data/HttpCalldataDescriptorDataSource.js +2 -0
- package/lib/cjs/src/calldata/data/HttpCalldataDescriptorDataSource.js.map +7 -0
- package/lib/cjs/src/calldata/data/HttpCalldataDescriptorDataSource.test.js +2 -0
- package/lib/cjs/src/calldata/data/HttpCalldataDescriptorDataSource.test.js.map +7 -0
- package/lib/cjs/src/{transaction → calldata}/data/dto/CalldataDto.js.map +1 -1
- package/lib/cjs/src/calldata/di/calldataModuleFactory.js +2 -0
- package/lib/cjs/src/calldata/di/calldataModuleFactory.js.map +7 -0
- package/lib/cjs/src/calldata/di/calldataTypes.js +2 -0
- package/lib/cjs/src/calldata/di/calldataTypes.js.map +7 -0
- package/lib/cjs/src/calldata/domain/CalldataContextLoader.js +2 -0
- package/lib/cjs/src/calldata/domain/CalldataContextLoader.js.map +7 -0
- package/lib/cjs/src/calldata/domain/CalldataContextLoader.test.js +2 -0
- package/lib/cjs/src/calldata/domain/CalldataContextLoader.test.js.map +7 -0
- package/lib/cjs/src/config/model/ContextModuleConfig.js +1 -1
- package/lib/cjs/src/config/model/ContextModuleConfig.js.map +1 -1
- package/lib/cjs/src/di.js +1 -1
- package/lib/cjs/src/di.js.map +3 -3
- package/lib/cjs/src/dynamic-network/domain/DynamicNetworkContextLoader.test.js +1 -1
- package/lib/cjs/src/dynamic-network/domain/DynamicNetworkContextLoader.test.js.map +2 -2
- package/lib/cjs/src/index.js +1 -1
- package/lib/cjs/src/index.js.map +2 -2
- package/lib/cjs/src/nft/domain/NftContextFieldLoader.js +1 -1
- package/lib/cjs/src/nft/domain/NftContextFieldLoader.js.map +3 -3
- package/lib/cjs/src/nft/domain/NftContextFieldLoader.test.js +1 -1
- package/lib/cjs/src/nft/domain/NftContextFieldLoader.test.js.map +3 -3
- package/lib/cjs/src/proxy/data/HttpProxyDataSource.js +1 -1
- package/lib/cjs/src/proxy/data/HttpProxyDataSource.js.map +3 -3
- package/lib/cjs/src/proxy/data/HttpProxyDataSource.test.js +1 -1
- package/lib/cjs/src/proxy/data/HttpProxyDataSource.test.js.map +3 -3
- package/lib/cjs/src/proxy/data/HttpSafeProxyDataSource.js +2 -0
- package/lib/cjs/src/proxy/data/HttpSafeProxyDataSource.js.map +7 -0
- package/lib/cjs/src/proxy/data/HttpSafeProxyDataSource.test.js +2 -0
- package/lib/cjs/src/proxy/data/HttpSafeProxyDataSource.test.js.map +7 -0
- package/lib/cjs/src/proxy/data/ProxyDataSource.js +2 -0
- package/lib/cjs/src/proxy/data/ProxyDataSource.js.map +7 -0
- package/lib/cjs/src/proxy/data/dto/SafeProxyImplementationAddressDto.js +2 -0
- package/lib/cjs/src/proxy/data/dto/SafeProxyImplementationAddressDto.js.map +7 -0
- package/lib/cjs/src/proxy/di/proxyModuleFactory.js +1 -1
- package/lib/cjs/src/proxy/di/proxyModuleFactory.js.map +3 -3
- package/lib/cjs/src/proxy/di/proxyModuleFactory.test.js +2 -0
- package/lib/cjs/src/proxy/di/proxyModuleFactory.test.js.map +7 -0
- package/lib/cjs/src/proxy/domain/ProxyContextFieldLoader.js +1 -1
- package/lib/cjs/src/proxy/domain/ProxyContextFieldLoader.js.map +3 -3
- package/lib/cjs/src/proxy/domain/ProxyContextFieldLoader.test.js +1 -1
- package/lib/cjs/src/proxy/domain/ProxyContextFieldLoader.test.js.map +3 -3
- package/lib/cjs/src/proxy/model/ProxyDelegateCall.js +1 -1
- package/lib/cjs/src/proxy/model/ProxyDelegateCall.js.map +1 -1
- package/lib/cjs/src/shared/domain/ContextFieldLoader.js +1 -1
- package/lib/cjs/src/shared/domain/ContextFieldLoader.js.map +3 -3
- package/lib/cjs/src/shared/domain/ContextLoader.js +1 -1
- package/lib/cjs/src/shared/domain/ContextLoader.js.map +1 -1
- package/lib/cjs/src/shared/model/ClearSignContext.js +1 -1
- package/lib/cjs/src/shared/model/ClearSignContext.js.map +2 -2
- package/lib/cjs/src/shared/model/TypedDataClearSignContext.js.map +1 -1
- package/lib/cjs/src/token/domain/TokenContextFieldLoader.js +1 -1
- package/lib/cjs/src/token/domain/TokenContextFieldLoader.js.map +3 -3
- package/lib/cjs/src/token/domain/TokenContextFieldLoader.test.js +1 -1
- package/lib/cjs/src/token/domain/TokenContextFieldLoader.test.js.map +3 -3
- package/lib/cjs/src/trusted-name/domain/TrustedNameContextFieldLoader.js +1 -1
- package/lib/cjs/src/trusted-name/domain/TrustedNameContextFieldLoader.js.map +3 -3
- package/lib/cjs/src/trusted-name/domain/TrustedNameContextFieldLoader.test.js +1 -1
- package/lib/cjs/src/trusted-name/domain/TrustedNameContextFieldLoader.test.js.map +3 -3
- package/lib/cjs/src/typed-data/domain/DefaultTypedDataContextLoader.js +1 -1
- package/lib/cjs/src/typed-data/domain/DefaultTypedDataContextLoader.js.map +3 -3
- package/lib/cjs/src/typed-data/domain/DefaultTypedDataContextLoader.test.js +1 -1
- package/lib/cjs/src/typed-data/domain/DefaultTypedDataContextLoader.test.js.map +3 -3
- package/lib/esm/src/ContextModuleBuilder.js +1 -1
- package/lib/esm/src/ContextModuleBuilder.js.map +3 -3
- package/lib/esm/src/ContextModuleBuilder.test.js +1 -1
- package/lib/esm/src/ContextModuleBuilder.test.js.map +3 -3
- package/lib/esm/src/DefaultContextModule.js +1 -1
- package/lib/esm/src/DefaultContextModule.js.map +3 -3
- package/lib/esm/src/DefaultContextModule.test.js +1 -1
- package/lib/esm/src/DefaultContextModule.test.js.map +3 -3
- package/lib/esm/src/calldata/data/CalldataDescriptorDataSource.js +1 -0
- package/lib/esm/src/calldata/data/HttpCalldataDescriptorDataSource.js +2 -0
- package/lib/esm/src/calldata/data/HttpCalldataDescriptorDataSource.js.map +7 -0
- package/lib/esm/src/calldata/data/HttpCalldataDescriptorDataSource.test.js +2 -0
- package/lib/esm/src/calldata/data/HttpCalldataDescriptorDataSource.test.js.map +7 -0
- package/lib/esm/src/calldata/di/calldataModuleFactory.js +2 -0
- package/lib/esm/src/calldata/di/calldataModuleFactory.js.map +7 -0
- package/lib/esm/src/calldata/di/calldataTypes.js +2 -0
- package/lib/esm/src/calldata/di/calldataTypes.js.map +7 -0
- package/lib/esm/src/calldata/domain/CalldataContextLoader.js +2 -0
- package/lib/esm/src/calldata/domain/CalldataContextLoader.js.map +7 -0
- package/lib/esm/src/calldata/domain/CalldataContextLoader.test.js +2 -0
- package/lib/esm/src/calldata/domain/CalldataContextLoader.test.js.map +7 -0
- package/lib/esm/src/di.js +1 -1
- package/lib/esm/src/di.js.map +3 -3
- package/lib/esm/src/dynamic-network/domain/DynamicNetworkContextLoader.test.js +1 -1
- package/lib/esm/src/dynamic-network/domain/DynamicNetworkContextLoader.test.js.map +2 -2
- package/lib/esm/src/index.js +1 -1
- package/lib/esm/src/index.js.map +2 -2
- package/lib/esm/src/nft/domain/NftContextFieldLoader.js +1 -1
- package/lib/esm/src/nft/domain/NftContextFieldLoader.js.map +3 -3
- package/lib/esm/src/nft/domain/NftContextFieldLoader.test.js +1 -1
- package/lib/esm/src/nft/domain/NftContextFieldLoader.test.js.map +3 -3
- package/lib/esm/src/proxy/data/HttpProxyDataSource.js +1 -1
- package/lib/esm/src/proxy/data/HttpProxyDataSource.js.map +3 -3
- package/lib/esm/src/proxy/data/HttpProxyDataSource.test.js +1 -1
- package/lib/esm/src/proxy/data/HttpProxyDataSource.test.js.map +3 -3
- package/lib/esm/src/proxy/data/HttpSafeProxyDataSource.js +2 -0
- package/lib/esm/src/proxy/data/HttpSafeProxyDataSource.js.map +7 -0
- package/lib/esm/src/proxy/data/HttpSafeProxyDataSource.test.js +2 -0
- package/lib/esm/src/proxy/data/HttpSafeProxyDataSource.test.js.map +7 -0
- package/lib/esm/src/proxy/data/ProxyDataSource.js +1 -0
- package/lib/esm/src/proxy/data/dto/SafeProxyImplementationAddressDto.js +1 -0
- package/lib/esm/src/proxy/di/proxyModuleFactory.js +1 -1
- package/lib/esm/src/proxy/di/proxyModuleFactory.js.map +3 -3
- package/lib/esm/src/proxy/di/proxyModuleFactory.test.js +2 -0
- package/lib/esm/src/proxy/di/proxyModuleFactory.test.js.map +7 -0
- package/lib/esm/src/proxy/domain/ProxyContextFieldLoader.js +1 -1
- package/lib/esm/src/proxy/domain/ProxyContextFieldLoader.js.map +3 -3
- package/lib/esm/src/proxy/domain/ProxyContextFieldLoader.test.js +1 -1
- package/lib/esm/src/proxy/domain/ProxyContextFieldLoader.test.js.map +3 -3
- package/lib/esm/src/shared/domain/ContextFieldLoader.js +0 -1
- package/lib/esm/src/shared/domain/ContextFieldLoader.js.map +4 -4
- package/lib/esm/src/shared/model/ClearSignContext.js +1 -1
- package/lib/esm/src/shared/model/ClearSignContext.js.map +2 -2
- package/lib/esm/src/shared/model/TypedDataClearSignContext.js.map +1 -1
- package/lib/esm/src/token/domain/TokenContextFieldLoader.js +1 -1
- package/lib/esm/src/token/domain/TokenContextFieldLoader.js.map +3 -3
- package/lib/esm/src/token/domain/TokenContextFieldLoader.test.js +1 -1
- package/lib/esm/src/token/domain/TokenContextFieldLoader.test.js.map +3 -3
- package/lib/esm/src/trusted-name/domain/TrustedNameContextFieldLoader.js +1 -1
- package/lib/esm/src/trusted-name/domain/TrustedNameContextFieldLoader.js.map +3 -3
- package/lib/esm/src/trusted-name/domain/TrustedNameContextFieldLoader.test.js +1 -1
- package/lib/esm/src/trusted-name/domain/TrustedNameContextFieldLoader.test.js.map +3 -3
- package/lib/esm/src/typed-data/domain/DefaultTypedDataContextLoader.js +1 -1
- package/lib/esm/src/typed-data/domain/DefaultTypedDataContextLoader.js.map +3 -3
- package/lib/esm/src/typed-data/domain/DefaultTypedDataContextLoader.test.js +1 -1
- package/lib/esm/src/typed-data/domain/DefaultTypedDataContextLoader.test.js.map +3 -3
- package/lib/types/src/ContextModule.d.ts +2 -4
- package/lib/types/src/ContextModule.d.ts.map +1 -1
- package/lib/types/src/ContextModuleBuilder.d.ts +8 -1
- package/lib/types/src/ContextModuleBuilder.d.ts.map +1 -1
- package/lib/types/src/DefaultContextModule.d.ts +2 -3
- package/lib/types/src/DefaultContextModule.d.ts.map +1 -1
- package/lib/types/src/{transaction/data/TransactionDataSource.d.ts → calldata/data/CalldataDescriptorDataSource.d.ts} +4 -4
- package/lib/types/src/calldata/data/CalldataDescriptorDataSource.d.ts.map +1 -0
- package/lib/types/src/{transaction/data/HttpTransactionDataSource.d.ts → calldata/data/HttpCalldataDescriptorDataSource.d.ts} +6 -5
- package/lib/types/src/calldata/data/HttpCalldataDescriptorDataSource.d.ts.map +1 -0
- package/lib/types/src/calldata/data/HttpCalldataDescriptorDataSource.test.d.ts +2 -0
- package/lib/types/src/calldata/data/HttpCalldataDescriptorDataSource.test.d.ts.map +1 -0
- package/lib/types/src/calldata/data/dto/CalldataDto.d.ts.map +1 -0
- package/lib/types/src/calldata/di/calldataModuleFactory.d.ts +3 -0
- package/lib/types/src/calldata/di/calldataModuleFactory.d.ts.map +1 -0
- package/lib/types/src/calldata/di/calldataTypes.d.ts +6 -0
- package/lib/types/src/calldata/di/calldataTypes.d.ts.map +1 -0
- package/lib/types/src/calldata/domain/CalldataContextLoader.d.ts +15 -0
- package/lib/types/src/calldata/domain/CalldataContextLoader.d.ts.map +1 -0
- package/lib/types/src/calldata/domain/CalldataContextLoader.test.d.ts +2 -0
- package/lib/types/src/calldata/domain/CalldataContextLoader.test.d.ts.map +1 -0
- package/lib/types/src/config/model/ContextModuleConfig.d.ts +7 -0
- package/lib/types/src/config/model/ContextModuleConfig.d.ts.map +1 -1
- package/lib/types/src/di.d.ts.map +1 -1
- package/lib/types/src/index.d.ts +40 -1
- package/lib/types/src/index.d.ts.map +1 -1
- package/lib/types/src/nft/domain/NftContextFieldLoader.d.ts +10 -6
- package/lib/types/src/nft/domain/NftContextFieldLoader.d.ts.map +1 -1
- package/lib/types/src/proxy/data/HttpProxyDataSource.d.ts +2 -22
- package/lib/types/src/proxy/data/HttpProxyDataSource.d.ts.map +1 -1
- package/lib/types/src/proxy/data/HttpSafeProxyDataSource.d.ts +13 -0
- package/lib/types/src/proxy/data/HttpSafeProxyDataSource.d.ts.map +1 -0
- package/lib/types/src/proxy/data/HttpSafeProxyDataSource.test.d.ts +2 -0
- package/lib/types/src/proxy/data/HttpSafeProxyDataSource.test.d.ts.map +1 -0
- package/lib/types/src/proxy/data/ProxyDataSource.d.ts +15 -0
- package/lib/types/src/proxy/data/ProxyDataSource.d.ts.map +1 -0
- package/lib/types/src/proxy/data/dto/SafeProxyImplementationAddressDto.d.ts +8 -0
- package/lib/types/src/proxy/data/dto/SafeProxyImplementationAddressDto.d.ts.map +1 -0
- package/lib/types/src/proxy/di/proxyModuleFactory.d.ts +2 -1
- package/lib/types/src/proxy/di/proxyModuleFactory.d.ts.map +1 -1
- package/lib/types/src/proxy/di/proxyModuleFactory.test.d.ts +2 -0
- package/lib/types/src/proxy/di/proxyModuleFactory.test.d.ts.map +1 -0
- package/lib/types/src/proxy/domain/ProxyContextFieldLoader.d.ts +15 -7
- package/lib/types/src/proxy/domain/ProxyContextFieldLoader.d.ts.map +1 -1
- package/lib/types/src/proxy/model/ProxyDelegateCall.d.ts +1 -1
- package/lib/types/src/proxy/model/ProxyDelegateCall.d.ts.map +1 -1
- package/lib/types/src/shared/domain/ContextFieldLoader.d.ts +13 -11
- package/lib/types/src/shared/domain/ContextFieldLoader.d.ts.map +1 -1
- package/lib/types/src/shared/domain/ContextLoader.d.ts +0 -2
- package/lib/types/src/shared/domain/ContextLoader.d.ts.map +1 -1
- package/lib/types/src/shared/model/ClearSignContext.d.ts +1 -1
- package/lib/types/src/shared/model/ClearSignContext.d.ts.map +1 -1
- package/lib/types/src/shared/model/TypedDataClearSignContext.d.ts +1 -1
- package/lib/types/src/shared/model/TypedDataClearSignContext.d.ts.map +1 -1
- package/lib/types/src/token/domain/TokenContextFieldLoader.d.ts +9 -6
- package/lib/types/src/token/domain/TokenContextFieldLoader.d.ts.map +1 -1
- package/lib/types/src/trusted-name/domain/TrustedNameContextFieldLoader.d.ts +13 -6
- package/lib/types/src/trusted-name/domain/TrustedNameContextFieldLoader.d.ts.map +1 -1
- package/lib/types/src/typed-data/domain/DefaultTypedDataContextLoader.d.ts +1 -1
- package/lib/types/src/typed-data/domain/DefaultTypedDataContextLoader.d.ts.map +1 -1
- package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/lib/cjs/src/proxy/model/ProxyImplementationAddress.js +0 -2
- package/lib/cjs/src/proxy/model/ProxyImplementationAddress.js.map +0 -7
- package/lib/cjs/src/shared/model/TransactionFieldContext.js +0 -2
- package/lib/cjs/src/shared/model/TransactionFieldContext.js.map +0 -7
- package/lib/cjs/src/transaction/data/HttpTransactionDataSource.js +0 -2
- package/lib/cjs/src/transaction/data/HttpTransactionDataSource.js.map +0 -7
- package/lib/cjs/src/transaction/data/HttpTransactionDataSource.test.js +0 -2
- package/lib/cjs/src/transaction/data/HttpTransactionDataSource.test.js.map +0 -7
- package/lib/cjs/src/transaction/data/TransactionDataSource.js +0 -2
- package/lib/cjs/src/transaction/data/TransactionDataSource.js.map +0 -7
- package/lib/cjs/src/transaction/di/transactionModuleFactory.js +0 -2
- package/lib/cjs/src/transaction/di/transactionModuleFactory.js.map +0 -7
- package/lib/cjs/src/transaction/di/transactionTypes.js +0 -2
- package/lib/cjs/src/transaction/di/transactionTypes.js.map +0 -7
- package/lib/cjs/src/transaction/domain/TransactionContextLoader.js +0 -2
- package/lib/cjs/src/transaction/domain/TransactionContextLoader.js.map +0 -7
- package/lib/cjs/src/transaction/domain/TransactionContextLoader.test.js +0 -2
- package/lib/cjs/src/transaction/domain/TransactionContextLoader.test.js.map +0 -7
- package/lib/esm/src/proxy/model/ProxyImplementationAddress.js +0 -1
- package/lib/esm/src/shared/model/TransactionFieldContext.js +0 -1
- package/lib/esm/src/transaction/data/HttpTransactionDataSource.js +0 -2
- package/lib/esm/src/transaction/data/HttpTransactionDataSource.js.map +0 -7
- package/lib/esm/src/transaction/data/HttpTransactionDataSource.test.js +0 -2
- package/lib/esm/src/transaction/data/HttpTransactionDataSource.test.js.map +0 -7
- package/lib/esm/src/transaction/data/TransactionDataSource.js +0 -1
- package/lib/esm/src/transaction/di/transactionModuleFactory.js +0 -2
- package/lib/esm/src/transaction/di/transactionModuleFactory.js.map +0 -7
- package/lib/esm/src/transaction/di/transactionTypes.js +0 -2
- package/lib/esm/src/transaction/di/transactionTypes.js.map +0 -7
- package/lib/esm/src/transaction/domain/TransactionContextLoader.js +0 -2
- package/lib/esm/src/transaction/domain/TransactionContextLoader.js.map +0 -7
- package/lib/esm/src/transaction/domain/TransactionContextLoader.test.js +0 -2
- package/lib/esm/src/transaction/domain/TransactionContextLoader.test.js.map +0 -7
- package/lib/types/src/proxy/model/ProxyImplementationAddress.d.ts +0 -4
- package/lib/types/src/proxy/model/ProxyImplementationAddress.d.ts.map +0 -1
- package/lib/types/src/shared/model/TransactionFieldContext.d.ts +0 -26
- package/lib/types/src/shared/model/TransactionFieldContext.d.ts.map +0 -1
- package/lib/types/src/transaction/data/HttpTransactionDataSource.d.ts.map +0 -1
- package/lib/types/src/transaction/data/HttpTransactionDataSource.test.d.ts +0 -2
- package/lib/types/src/transaction/data/HttpTransactionDataSource.test.d.ts.map +0 -1
- package/lib/types/src/transaction/data/TransactionDataSource.d.ts.map +0 -1
- package/lib/types/src/transaction/data/dto/CalldataDto.d.ts.map +0 -1
- package/lib/types/src/transaction/di/transactionModuleFactory.d.ts +0 -3
- package/lib/types/src/transaction/di/transactionModuleFactory.d.ts.map +0 -1
- package/lib/types/src/transaction/di/transactionTypes.d.ts +0 -5
- package/lib/types/src/transaction/di/transactionTypes.d.ts.map +0 -1
- package/lib/types/src/transaction/domain/TransactionContextLoader.d.ts +0 -12
- package/lib/types/src/transaction/domain/TransactionContextLoader.d.ts.map +0 -1
- package/lib/types/src/transaction/domain/TransactionContextLoader.test.d.ts +0 -2
- package/lib/types/src/transaction/domain/TransactionContextLoader.test.d.ts.map +0 -1
- /package/lib/cjs/src/{transaction → calldata}/data/dto/CalldataDto.js +0 -0
- /package/lib/esm/src/{proxy/model/ProxyImplementationAddress.js.map → calldata/data/CalldataDescriptorDataSource.js.map} +0 -0
- /package/lib/esm/src/{transaction → calldata}/data/dto/CalldataDto.js +0 -0
- /package/lib/esm/src/{transaction → calldata}/data/dto/CalldataDto.js.map +0 -0
- /package/lib/esm/src/{shared/model/TransactionFieldContext.js.map → proxy/data/ProxyDataSource.js.map} +0 -0
- /package/lib/esm/src/{transaction/data/TransactionDataSource.js.map → proxy/data/dto/SafeProxyImplementationAddressDto.js.map} +0 -0
- /package/lib/types/src/{transaction → calldata}/data/dto/CalldataDto.d.ts +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Left as c,Right as
|
|
1
|
+
import{Left as c,Right as n}from"purify-ts";import{ClearSignContextType as l}from"../../shared/model/ClearSignContext";import{TrustedNameContextFieldLoader as r}from"../../trusted-name/domain/TrustedNameContextFieldLoader";describe("TrustedNameContextFieldLoader",()=>{const t={getTrustedNamePayload:vi.fn(),getDomainNamePayload:vi.fn()},d=new r(t),e={chainId:1,address:"0x1234567890abcdef",challenge:"test-challenge",types:["contract","token"],sources:["ledger","ens"]},o="0x123456789abcdef0";beforeEach(()=>{vi.resetAllMocks()}),describe("canHandle",()=>{it("should return true for valid trusted name field",()=>{const a={chainId:1,address:"0x1234567890abcdef",challenge:"test-challenge",types:["contract","token"],sources:["ledger","ens"]};expect(d.canHandle(a,l.TRUSTED_NAME)).toBe(!0)}),describe("should return false for invalid inputs",()=>{const a=[{name:"null",value:null},{name:"undefined",value:void 0},{name:"string",value:"invalid"},{name:"number",value:123},{name:"boolean",value:!0},{name:"array",value:[]},{name:"empty object",value:{}},{name:"object missing chainId",value:{address:"0x123",challenge:"test",types:["contract"],sources:["ledger"]}},{name:"object missing address",value:{chainId:1,challenge:"test",types:["contract"],sources:["ledger"]}},{name:"object missing challenge",value:{chainId:1,address:"0x123",types:["contract"],sources:["ledger"]}},{name:"object missing types",value:{chainId:1,address:"0x123",challenge:"test",sources:["ledger"]}},{name:"object missing sources",value:{chainId:1,address:"0x123",challenge:"test",types:["contract"]}}];test.each(a)("$name",({value:s})=>{expect(d.canHandle(s,l.TRUSTED_NAME)).toBe(!1)})}),it("should return false for invalid expected type",()=>{expect(d.canHandle(e,l.TOKEN)).toBe(!1)})}),describe("loadField",()=>{it("should return error context when trusted name data source fails",async()=>{const a=new Error("Trusted name data source error");vi.spyOn(t,"getTrustedNamePayload").mockResolvedValue(c(a));const s=await d.loadField(e);expect(t.getTrustedNamePayload).toHaveBeenCalledWith({chainId:e.chainId,address:e.address,challenge:e.challenge,types:e.types,sources:e.sources}),expect(s).toEqual({type:l.ERROR,error:a})}),it("should return trusted name context when successful",async()=>{vi.spyOn(t,"getTrustedNamePayload").mockResolvedValue(n(o));const a=await d.loadField(e);expect(t.getTrustedNamePayload).toHaveBeenCalledWith({chainId:e.chainId,address:e.address,challenge:e.challenge,types:e.types,sources:e.sources}),expect(a).toEqual({type:l.TRUSTED_NAME,payload:o})}),it("should handle different chain IDs and addresses correctly",async()=>{const a={...e,chainId:137,address:"0xdeadbeef",challenge:"custom-challenge"};vi.spyOn(t,"getTrustedNamePayload").mockResolvedValue(n(o));const s=await d.loadField(a);expect(t.getTrustedNamePayload).toHaveBeenCalledWith({chainId:137,address:"0xdeadbeef",challenge:"custom-challenge",types:e.types,sources:e.sources}),expect(s).toEqual({type:l.TRUSTED_NAME,payload:o})}),it("should handle different types and sources correctly",async()=>{const a={...e,types:["wallet","exchange"],sources:["coingecko","1inch"]};vi.spyOn(t,"getTrustedNamePayload").mockResolvedValue(n(o));const s=await d.loadField(a);expect(t.getTrustedNamePayload).toHaveBeenCalledWith({chainId:e.chainId,address:e.address,challenge:e.challenge,types:["wallet","exchange"],sources:["coingecko","1inch"]}),expect(s).toEqual({type:l.TRUSTED_NAME,payload:o})}),it("should preserve error message from trusted name data source",async()=>{const a=new Error("Network timeout error");vi.spyOn(t,"getTrustedNamePayload").mockResolvedValue(c(a));const s=await d.loadField(e);expect(s).toEqual({type:l.ERROR,error:a})}),it("should handle empty trusted name payload",async()=>{const a="";vi.spyOn(t,"getTrustedNamePayload").mockResolvedValue(n(a));const s=await d.loadField(e);expect(s).toEqual({type:l.TRUSTED_NAME,payload:a})}),it("should handle empty types and sources arrays",async()=>{const a={...e,types:[],sources:[]};vi.spyOn(t,"getTrustedNamePayload").mockResolvedValue(n(o));const s=await d.loadField(a);expect(t.getTrustedNamePayload).toHaveBeenCalledWith({chainId:e.chainId,address:e.address,challenge:e.challenge,types:[],sources:[]}),expect(s).toEqual({type:l.TRUSTED_NAME,payload:o})}),it("should handle single type and source",async()=>{const a={...e,types:["contract"],sources:["ens"]};vi.spyOn(t,"getTrustedNamePayload").mockResolvedValue(n(o));const s=await d.loadField(a);expect(t.getTrustedNamePayload).toHaveBeenCalledWith({chainId:e.chainId,address:e.address,challenge:e.challenge,types:["contract"],sources:["ens"]}),expect(s).toEqual({type:l.TRUSTED_NAME,payload:o})})})});
|
|
2
2
|
//# sourceMappingURL=TrustedNameContextFieldLoader.test.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/trusted-name/domain/TrustedNameContextFieldLoader.test.ts"],
|
|
4
|
-
"sourcesContent": ["import { Left, Right } from \"purify-ts\";\n\nimport { ContextFieldLoaderKind } from \"@/shared/domain/ContextFieldLoader\";\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\nimport { type TransactionFieldContext } from \"@/shared/model/TransactionFieldContext\";\nimport { type TrustedNameDataSource } from \"@/trusted-name/data/TrustedNameDataSource\";\nimport { TrustedNameContextFieldLoader } from \"@/trusted-name/domain/TrustedNameContextFieldLoader\";\n\ndescribe(\"TrustedNameContextFieldLoader\", () => {\n const mockTrustedNameDataSource: TrustedNameDataSource = {\n getTrustedNamePayload: vi.fn(),\n getDomainNamePayload: vi.fn(),\n };\n const trustedNameContextFieldLoader = new TrustedNameContextFieldLoader(\n mockTrustedNameDataSource,\n );\n\n const mockTransactionField: TransactionFieldContext<ContextFieldLoaderKind.TRUSTED_NAME> =\n {\n kind: ContextFieldLoaderKind.TRUSTED_NAME,\n chainId: 1,\n address: \"0x1234567890abcdef\",\n challenge: \"test-challenge\",\n types: [\"contract\", \"token\"],\n sources: [\"ledger\", \"ens\"],\n };\n\n const mockTrustedNamePayload = \"0x123456789abcdef0\";\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"constructor\", () => {\n it(\"should initialize with correct kind\", () => {\n // THEN\n expect(trustedNameContextFieldLoader.kind).toBe(\n ContextFieldLoaderKind.TRUSTED_NAME,\n );\n });\n });\n\n describe(\"loadField\", () => {\n it(\"should return error context when trusted name data source fails\", async () => {\n // GIVEN\n const error = new Error(\"Trusted name data source error\");\n vi.spyOn(\n mockTrustedNameDataSource,\n \"getTrustedNamePayload\",\n ).mockResolvedValue(Left(error));\n\n // WHEN\n const result =\n await trustedNameContextFieldLoader.loadField(mockTransactionField);\n\n // THEN\n expect(\n mockTrustedNameDataSource.getTrustedNamePayload,\n ).toHaveBeenCalledWith({\n chainId: mockTransactionField.chainId,\n address: mockTransactionField.address,\n challenge: mockTransactionField.challenge,\n types: mockTransactionField.types,\n sources: mockTransactionField.sources,\n });\n expect(result).toEqual({\n type: ClearSignContextType.ERROR,\n error: error,\n });\n });\n\n it(\"should return trusted name context when successful\", async () => {\n // GIVEN\n vi.spyOn(\n mockTrustedNameDataSource,\n \"getTrustedNamePayload\",\n ).mockResolvedValue(Right(mockTrustedNamePayload));\n\n // WHEN\n const result =\n await trustedNameContextFieldLoader.loadField(mockTransactionField);\n\n // THEN\n expect(\n mockTrustedNameDataSource.getTrustedNamePayload,\n ).toHaveBeenCalledWith({\n chainId: mockTransactionField.chainId,\n address: mockTransactionField.address,\n challenge: mockTransactionField.challenge,\n types: mockTransactionField.types,\n sources: mockTransactionField.sources,\n });\n expect(result).toEqual({\n type: ClearSignContextType.TRUSTED_NAME,\n payload: mockTrustedNamePayload,\n });\n });\n\n it(\"should handle different chain IDs and addresses correctly\", async () => {\n // GIVEN\n const customField = {\n ...mockTransactionField,\n chainId: 137,\n address: \"0xdeadbeef\",\n challenge: \"custom-challenge\",\n };\n vi.spyOn(\n mockTrustedNameDataSource,\n \"getTrustedNamePayload\",\n ).mockResolvedValue(Right(mockTrustedNamePayload));\n\n // WHEN\n const result = await trustedNameContextFieldLoader.loadField(customField);\n\n // THEN\n expect(\n mockTrustedNameDataSource.getTrustedNamePayload,\n ).toHaveBeenCalledWith({\n chainId: 137,\n address: \"0xdeadbeef\",\n challenge: \"custom-challenge\",\n types: mockTransactionField.types,\n sources: mockTransactionField.sources,\n });\n expect(result).toEqual({\n type: ClearSignContextType.TRUSTED_NAME,\n payload: mockTrustedNamePayload,\n });\n });\n\n it(\"should handle different types and sources correctly\", async () => {\n // GIVEN\n const customField = {\n ...mockTransactionField,\n types: [\"wallet\", \"exchange\"],\n sources: [\"coingecko\", \"1inch\"],\n };\n vi.spyOn(\n mockTrustedNameDataSource,\n \"getTrustedNamePayload\",\n ).mockResolvedValue(Right(mockTrustedNamePayload));\n\n // WHEN\n const result = await trustedNameContextFieldLoader.loadField(customField);\n\n // THEN\n expect(\n mockTrustedNameDataSource.getTrustedNamePayload,\n ).toHaveBeenCalledWith({\n chainId: mockTransactionField.chainId,\n address: mockTransactionField.address,\n challenge: mockTransactionField.challenge,\n types: [\"wallet\", \"exchange\"],\n sources: [\"coingecko\", \"1inch\"],\n });\n expect(result).toEqual({\n type: ClearSignContextType.TRUSTED_NAME,\n payload: mockTrustedNamePayload,\n });\n });\n\n it(\"should preserve error message from trusted name data source\", async () => {\n // GIVEN\n const specificError = new Error(\"Network timeout error\");\n vi.spyOn(\n mockTrustedNameDataSource,\n \"getTrustedNamePayload\",\n ).mockResolvedValue(Left(specificError));\n\n // WHEN\n const result =\n await trustedNameContextFieldLoader.loadField(mockTransactionField);\n\n // THEN\n expect(result).toEqual({\n type: ClearSignContextType.ERROR,\n error: specificError,\n });\n });\n\n it(\"should handle empty trusted name payload\", async () => {\n // GIVEN\n const emptyPayload = \"\";\n vi.spyOn(\n mockTrustedNameDataSource,\n \"getTrustedNamePayload\",\n ).mockResolvedValue(Right(emptyPayload));\n\n // WHEN\n const result =\n await trustedNameContextFieldLoader.loadField(mockTransactionField);\n\n // THEN\n expect(result).toEqual({\n type: ClearSignContextType.TRUSTED_NAME,\n payload: emptyPayload,\n });\n });\n\n it(\"should handle empty types and sources arrays\", async () => {\n // GIVEN\n const fieldWithEmptyArrays = {\n ...mockTransactionField,\n types: [],\n sources: [],\n };\n vi.spyOn(\n mockTrustedNameDataSource,\n \"getTrustedNamePayload\",\n ).mockResolvedValue(Right(mockTrustedNamePayload));\n\n // WHEN\n const result =\n await trustedNameContextFieldLoader.loadField(fieldWithEmptyArrays);\n\n // THEN\n expect(\n mockTrustedNameDataSource.getTrustedNamePayload,\n ).toHaveBeenCalledWith({\n chainId: mockTransactionField.chainId,\n address: mockTransactionField.address,\n challenge: mockTransactionField.challenge,\n types: [],\n sources: [],\n });\n expect(result).toEqual({\n type: ClearSignContextType.TRUSTED_NAME,\n payload: mockTrustedNamePayload,\n });\n });\n\n it(\"should handle single type and source\", async () => {\n // GIVEN\n const fieldWithSingleElements = {\n ...mockTransactionField,\n types: [\"contract\"],\n sources: [\"ens\"],\n };\n vi.spyOn(\n mockTrustedNameDataSource,\n \"getTrustedNamePayload\",\n ).mockResolvedValue(Right(mockTrustedNamePayload));\n\n // WHEN\n const result = await trustedNameContextFieldLoader.loadField(\n fieldWithSingleElements,\n );\n\n // THEN\n expect(\n mockTrustedNameDataSource.getTrustedNamePayload,\n ).toHaveBeenCalledWith({\n chainId: mockTransactionField.chainId,\n address: mockTransactionField.address,\n challenge: mockTransactionField.challenge,\n types: [\"contract\"],\n sources: [\"ens\"],\n });\n expect(result).toEqual({\n type: ClearSignContextType.TRUSTED_NAME,\n payload: mockTrustedNamePayload,\n });\n });\n });\n});\n"],
|
|
5
|
-
"mappings": "AAAA,OAAS,QAAAA,EAAM,SAAAC,MAAa,YAE5B,OAAS,
|
|
6
|
-
"names": ["Left", "Right", "
|
|
4
|
+
"sourcesContent": ["import { Left, Right } from \"purify-ts\";\n\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\nimport { type TrustedNameDataSource } from \"@/trusted-name/data/TrustedNameDataSource\";\nimport { TrustedNameContextFieldLoader } from \"@/trusted-name/domain/TrustedNameContextFieldLoader\";\n\ndescribe(\"TrustedNameContextFieldLoader\", () => {\n const mockTrustedNameDataSource: TrustedNameDataSource = {\n getTrustedNamePayload: vi.fn(),\n getDomainNamePayload: vi.fn(),\n };\n const trustedNameContextFieldLoader = new TrustedNameContextFieldLoader(\n mockTrustedNameDataSource,\n );\n\n const mockTransactionField = {\n chainId: 1,\n address: \"0x1234567890abcdef\",\n challenge: \"test-challenge\",\n types: [\"contract\", \"token\"],\n sources: [\"ledger\", \"ens\"],\n };\n\n const mockTrustedNamePayload = \"0x123456789abcdef0\";\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"canHandle\", () => {\n it(\"should return true for valid trusted name field\", () => {\n // GIVEN\n const validField = {\n chainId: 1,\n address: \"0x1234567890abcdef\",\n challenge: \"test-challenge\",\n types: [\"contract\", \"token\"],\n sources: [\"ledger\", \"ens\"],\n };\n\n // THEN\n expect(\n trustedNameContextFieldLoader.canHandle(\n validField,\n ClearSignContextType.TRUSTED_NAME,\n ),\n ).toBe(true);\n });\n\n describe(\"should return false for invalid inputs\", () => {\n const invalidInputs = [\n { name: \"null\", value: null },\n { name: \"undefined\", value: undefined },\n { name: \"string\", value: \"invalid\" },\n { name: \"number\", value: 123 },\n { name: \"boolean\", value: true },\n { name: \"array\", value: [] },\n { name: \"empty object\", value: {} },\n {\n name: \"object missing chainId\",\n value: {\n address: \"0x123\",\n challenge: \"test\",\n types: [\"contract\"],\n sources: [\"ledger\"],\n },\n },\n {\n name: \"object missing address\",\n value: {\n chainId: 1,\n challenge: \"test\",\n types: [\"contract\"],\n sources: [\"ledger\"],\n },\n },\n {\n name: \"object missing challenge\",\n value: {\n chainId: 1,\n address: \"0x123\",\n types: [\"contract\"],\n sources: [\"ledger\"],\n },\n },\n {\n name: \"object missing types\",\n value: {\n chainId: 1,\n address: \"0x123\",\n challenge: \"test\",\n sources: [\"ledger\"],\n },\n },\n {\n name: \"object missing sources\",\n value: {\n chainId: 1,\n address: \"0x123\",\n challenge: \"test\",\n types: [\"contract\"],\n },\n },\n ];\n\n test.each(invalidInputs)(\"$name\", ({ value }) => {\n expect(\n trustedNameContextFieldLoader.canHandle(\n value,\n ClearSignContextType.TRUSTED_NAME,\n ),\n ).toBe(false);\n });\n });\n\n it(\"should return false for invalid expected type\", () => {\n expect(\n trustedNameContextFieldLoader.canHandle(\n mockTransactionField,\n ClearSignContextType.TOKEN,\n ),\n ).toBe(false);\n });\n });\n\n describe(\"loadField\", () => {\n it(\"should return error context when trusted name data source fails\", async () => {\n // GIVEN\n const error = new Error(\"Trusted name data source error\");\n vi.spyOn(\n mockTrustedNameDataSource,\n \"getTrustedNamePayload\",\n ).mockResolvedValue(Left(error));\n\n // WHEN\n const result =\n await trustedNameContextFieldLoader.loadField(mockTransactionField);\n\n // THEN\n expect(\n mockTrustedNameDataSource.getTrustedNamePayload,\n ).toHaveBeenCalledWith({\n chainId: mockTransactionField.chainId,\n address: mockTransactionField.address,\n challenge: mockTransactionField.challenge,\n types: mockTransactionField.types,\n sources: mockTransactionField.sources,\n });\n expect(result).toEqual({\n type: ClearSignContextType.ERROR,\n error: error,\n });\n });\n\n it(\"should return trusted name context when successful\", async () => {\n // GIVEN\n vi.spyOn(\n mockTrustedNameDataSource,\n \"getTrustedNamePayload\",\n ).mockResolvedValue(Right(mockTrustedNamePayload));\n\n // WHEN\n const result =\n await trustedNameContextFieldLoader.loadField(mockTransactionField);\n\n // THEN\n expect(\n mockTrustedNameDataSource.getTrustedNamePayload,\n ).toHaveBeenCalledWith({\n chainId: mockTransactionField.chainId,\n address: mockTransactionField.address,\n challenge: mockTransactionField.challenge,\n types: mockTransactionField.types,\n sources: mockTransactionField.sources,\n });\n expect(result).toEqual({\n type: ClearSignContextType.TRUSTED_NAME,\n payload: mockTrustedNamePayload,\n });\n });\n\n it(\"should handle different chain IDs and addresses correctly\", async () => {\n // GIVEN\n const customField = {\n ...mockTransactionField,\n chainId: 137,\n address: \"0xdeadbeef\",\n challenge: \"custom-challenge\",\n };\n vi.spyOn(\n mockTrustedNameDataSource,\n \"getTrustedNamePayload\",\n ).mockResolvedValue(Right(mockTrustedNamePayload));\n\n // WHEN\n const result = await trustedNameContextFieldLoader.loadField(customField);\n\n // THEN\n expect(\n mockTrustedNameDataSource.getTrustedNamePayload,\n ).toHaveBeenCalledWith({\n chainId: 137,\n address: \"0xdeadbeef\",\n challenge: \"custom-challenge\",\n types: mockTransactionField.types,\n sources: mockTransactionField.sources,\n });\n expect(result).toEqual({\n type: ClearSignContextType.TRUSTED_NAME,\n payload: mockTrustedNamePayload,\n });\n });\n\n it(\"should handle different types and sources correctly\", async () => {\n // GIVEN\n const customField = {\n ...mockTransactionField,\n types: [\"wallet\", \"exchange\"],\n sources: [\"coingecko\", \"1inch\"],\n };\n vi.spyOn(\n mockTrustedNameDataSource,\n \"getTrustedNamePayload\",\n ).mockResolvedValue(Right(mockTrustedNamePayload));\n\n // WHEN\n const result = await trustedNameContextFieldLoader.loadField(customField);\n\n // THEN\n expect(\n mockTrustedNameDataSource.getTrustedNamePayload,\n ).toHaveBeenCalledWith({\n chainId: mockTransactionField.chainId,\n address: mockTransactionField.address,\n challenge: mockTransactionField.challenge,\n types: [\"wallet\", \"exchange\"],\n sources: [\"coingecko\", \"1inch\"],\n });\n expect(result).toEqual({\n type: ClearSignContextType.TRUSTED_NAME,\n payload: mockTrustedNamePayload,\n });\n });\n\n it(\"should preserve error message from trusted name data source\", async () => {\n // GIVEN\n const specificError = new Error(\"Network timeout error\");\n vi.spyOn(\n mockTrustedNameDataSource,\n \"getTrustedNamePayload\",\n ).mockResolvedValue(Left(specificError));\n\n // WHEN\n const result =\n await trustedNameContextFieldLoader.loadField(mockTransactionField);\n\n // THEN\n expect(result).toEqual({\n type: ClearSignContextType.ERROR,\n error: specificError,\n });\n });\n\n it(\"should handle empty trusted name payload\", async () => {\n // GIVEN\n const emptyPayload = \"\";\n vi.spyOn(\n mockTrustedNameDataSource,\n \"getTrustedNamePayload\",\n ).mockResolvedValue(Right(emptyPayload));\n\n // WHEN\n const result =\n await trustedNameContextFieldLoader.loadField(mockTransactionField);\n\n // THEN\n expect(result).toEqual({\n type: ClearSignContextType.TRUSTED_NAME,\n payload: emptyPayload,\n });\n });\n\n it(\"should handle empty types and sources arrays\", async () => {\n // GIVEN\n const fieldWithEmptyArrays = {\n ...mockTransactionField,\n types: [],\n sources: [],\n };\n vi.spyOn(\n mockTrustedNameDataSource,\n \"getTrustedNamePayload\",\n ).mockResolvedValue(Right(mockTrustedNamePayload));\n\n // WHEN\n const result =\n await trustedNameContextFieldLoader.loadField(fieldWithEmptyArrays);\n\n // THEN\n expect(\n mockTrustedNameDataSource.getTrustedNamePayload,\n ).toHaveBeenCalledWith({\n chainId: mockTransactionField.chainId,\n address: mockTransactionField.address,\n challenge: mockTransactionField.challenge,\n types: [],\n sources: [],\n });\n expect(result).toEqual({\n type: ClearSignContextType.TRUSTED_NAME,\n payload: mockTrustedNamePayload,\n });\n });\n\n it(\"should handle single type and source\", async () => {\n // GIVEN\n const fieldWithSingleElements = {\n ...mockTransactionField,\n types: [\"contract\"],\n sources: [\"ens\"],\n };\n vi.spyOn(\n mockTrustedNameDataSource,\n \"getTrustedNamePayload\",\n ).mockResolvedValue(Right(mockTrustedNamePayload));\n\n // WHEN\n const result = await trustedNameContextFieldLoader.loadField(\n fieldWithSingleElements,\n );\n\n // THEN\n expect(\n mockTrustedNameDataSource.getTrustedNamePayload,\n ).toHaveBeenCalledWith({\n chainId: mockTransactionField.chainId,\n address: mockTransactionField.address,\n challenge: mockTransactionField.challenge,\n types: [\"contract\"],\n sources: [\"ens\"],\n });\n expect(result).toEqual({\n type: ClearSignContextType.TRUSTED_NAME,\n payload: mockTrustedNamePayload,\n });\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Left", "Right", "ClearSignContextType", "TrustedNameContextFieldLoader", "mockTrustedNameDataSource", "trustedNameContextFieldLoader", "mockTransactionField", "mockTrustedNamePayload", "validField", "invalidInputs", "value", "error", "result", "customField", "specificError", "emptyPayload", "fieldWithEmptyArrays", "fieldWithSingleElements"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var
|
|
1
|
+
var S=Object.defineProperty;var D=Object.getOwnPropertyDescriptor;var m=(c,e,r,t)=>{for(var a=t>1?void 0:t?D(e,r):e,n=c.length-1,o;n>=0;n--)(o=c[n])&&(a=(t?o(e,r,a):o(a))||a);return t&&a&&S(e,r,a),a},p=(c,e)=>(r,t)=>e(r,t,c);import{bufferToHexaString as h}from"@ledgerhq/device-management-kit";import{inject as y,injectable as I}from"inversify";import{pkiTypes as k}from"../../pki/di/pkiTypes";import{KeyId as P}from"../../pki/model/KeyId";import{KeyUsage as F}from"../../pki/model/KeyUsage";import{proxyTypes as A}from"../../proxy/di/proxyTypes";import{ClearSignContextType as R}from"../../shared/model/ClearSignContext";import{TypedDataCalldataParamPresence as H,VERIFYING_CONTRACT_TOKEN_INDEX as N}from"../../shared/model/TypedDataClearSignContext";import{tokenTypes as _}from"../../token/di/tokenTypes";import{typedDataTypes as w}from"../../typed-data/di/typedDataTypes";let u=class{constructor(e,r,t,a){this.dataSource=e;this.tokenDataSource=r;this.proxyDataSource=t;this._certificateLoader=a}async load(e){let r,t=await this.dataSource.getTypedDataFilters({address:e.verifyingContract,chainId:e.chainId,version:e.version,schema:e.schema});if(t.isLeft()){const{resolvedAddress:i,context:s}=await this.resolveProxy(e);if(s!==void 0&&(r=s,t=await this.dataSource.getTypedDataFilters({address:i,chainId:e.chainId,version:e.version,schema:e.schema})),t.isLeft())return{type:"error",error:t.extract()}}const{messageInfo:a,filters:n,calldatasInfos:o}=t.unsafeCoerce(),d=n.reduce((i,s)=>(i[s.path]=s,i),{});return{type:"success",messageInfo:a,filters:d,trustedNamesAddresses:this.extractTrustedNames(n,e),tokens:await this.extractTokens(n,e),calldatas:this.extractCalldatas(n,o,e),proxy:r}}async resolveProxy(e){const r=await this.proxyDataSource.getProxyImplementationAddress({calldata:"0x",proxyAddress:e.verifyingContract,chainId:e.chainId,challenge:e.challenge??""});if(r.isLeft())return{resolvedAddress:e.verifyingContract,context:void 0};const t=await this._certificateLoader.loadCertificate({keyId:P.CalCalldataKey,keyUsage:F.Calldata,targetDevice:e.deviceModelId}),a=r.unsafeCoerce();return{resolvedAddress:a.implementationAddress,context:{type:R.PROXY_INFO,payload:a.signedDescriptor,certificate:t}}}extractTrustedNames(e,r){return e.filter(t=>t.type==="trusted-name").reduce((t,a)=>{const n=r.fieldsValues.filter(o=>o.path===a.path);if(n.length!==0){const o=n[0],d=this.convertAddressToHexaString(o.value);t[a.path]=d}return t},{})}async extractTokens(e,r){const t={};for(const a of e){if(a.type!=="token"&&a.type!=="amount")continue;const n=a.tokenIndex;if(t[n]===void 0){if(a.type==="token"){const o=r.fieldsValues.filter(s=>s.path===a.path);if(o.length===0)continue;const d=o[0],i=this.convertAddressToHexaString(d.value);if(o.every(s=>this.convertAddressToHexaString(s.value)===i)){const s=r.chainId;(await this.tokenDataSource.getTokenInfosPayload({address:i,chainId:s})).ifRight(f=>{t[n]=f})}}else if(a.type==="amount"&&n===N){const o=r.verifyingContract,d=r.chainId;(await this.tokenDataSource.getTokenInfosPayload({address:o,chainId:d})).ifRight(s=>{t[n]=s})}}}return t}extractCalldatas(e,r,t){const a=e.reduce((o,d)=>{if(d.type==="calldata-value"||d.type==="calldata-callee"||d.type==="calldata-chain-id"||d.type==="calldata-selector"||d.type==="calldata-amount"||d.type==="calldata-spender"){const i=o[d.calldataIndex];i===void 0?o[d.calldataIndex]=[d]:i.push(d)}return o},{}),n={};for(const o in r){const d=r[o],i=a[o];if(!i)continue;const s=this.extractHexaString(i.find(l=>l.type==="calldata-value"),t,"0x"),T=this.extractHexaString(i.find(l=>l.type==="calldata-selector"),t,s.slice(0,10)),f=this.extractAddress(i.find(l=>l.type==="calldata-callee"),t,d.calleeFlag),g=this.extractAddress(i.find(l=>l.type==="calldata-spender"),t,d.spenderFlag),C=this.extractBigint(i.find(l=>l.type==="calldata-amount"),t,void 0),x=this.extractBigint(i.find(l=>l.type==="calldata-chain-id"),t,void 0),v=x!==void 0&&x<Number.MAX_SAFE_INTEGER?Number(x):t.chainId;n[o]={filter:d,subset:{chainId:v,data:s,selector:T,to:f,value:C,from:g}}}return n}extractHexaString(e,r,t){if(e!==void 0){const a=r.fieldsValues.filter(n=>n.path===e.path);if(a.length!==0)return h(a[0].value)}return t}extractAddress(e,r,t,a){if(t===H.VerifyingContract)return r.verifyingContract;if(e!==void 0){const n=r.fieldsValues.filter(o=>o.path===e.path);if(n.length!==0)return this.convertAddressToHexaString(n[0].value)}return a}extractBigint(e,r,t){if(e!==void 0){const a=r.fieldsValues.filter(n=>n.path===e.path);if(a.length!==0)return BigInt(h(a[0].value))}return t}convertAddressToHexaString(e){return`0x${Array.from(e,r=>r.toString(16).padStart(2,"0")).join("").padStart(40,"0")}`}};u=m([I(),p(0,y(w.TypedDataDataSource)),p(1,y(_.TokenDataSource)),p(2,y(A.ProxyDataSource)),p(3,y(k.PkiCertificateLoader))],u);export{u as DefaultTypedDataContextLoader};
|
|
2
2
|
//# sourceMappingURL=DefaultTypedDataContextLoader.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/typed-data/domain/DefaultTypedDataContextLoader.ts"],
|
|
4
|
-
"sourcesContent": ["import type { HexaString } from \"@ledgerhq/device-management-kit\";\nimport { bufferToHexaString } from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport { pkiTypes } from \"@/pki/di/pkiTypes\";\nimport { type PkiCertificateLoader } from \"@/pki/domain/PkiCertificateLoader\";\nimport { KeyId } from \"@/pki/model/KeyId\";\nimport { KeyUsage } from \"@/pki/model/KeyUsage\";\nimport type { ProxyDataSource } from \"@/proxy/data/HttpProxyDataSource\";\nimport { proxyTypes } from \"@/proxy/di/proxyTypes\";\nimport {\n type ClearSignContextSuccess,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\nimport type {\n TypedDataCalldataIndex,\n TypedDataCalldataInfo,\n TypedDataClearSignContext,\n TypedDataFilter,\n TypedDataFilterCalldata,\n TypedDataFilterCalldataInfo,\n TypedDataFilterPath,\n TypedDataToken,\n TypedDataTokenIndex,\n} from \"@/shared/model/TypedDataClearSignContext\";\nimport {\n TypedDataCalldataParamPresence,\n VERIFYING_CONTRACT_TOKEN_INDEX,\n} from \"@/shared/model/TypedDataClearSignContext\";\nimport type { TypedDataContext } from \"@/shared/model/TypedDataContext\";\nimport type { TokenDataSource } from \"@/token/data/TokenDataSource\";\nimport { tokenTypes } from \"@/token/di/tokenTypes\";\nimport type { TypedDataDataSource } from \"@/typed-data/data/TypedDataDataSource\";\nimport { typedDataTypes } from \"@/typed-data/di/typedDataTypes\";\nimport type { TypedDataContextLoader } from \"@/typed-data/domain/TypedDataContextLoader\";\n\ntype ResolvedProxy = {\n resolvedAddress: string;\n context?: ClearSignContextSuccess<ClearSignContextType.PROXY_DELEGATE_CALL>;\n};\n\n@injectable()\nexport class DefaultTypedDataContextLoader implements TypedDataContextLoader {\n constructor(\n @inject(typedDataTypes.TypedDataDataSource)\n private dataSource: TypedDataDataSource,\n @inject(tokenTypes.TokenDataSource)\n private tokenDataSource: TokenDataSource,\n @inject(proxyTypes.ProxyDataSource)\n private proxyDataSource: ProxyDataSource,\n @inject(pkiTypes.PkiCertificateLoader)\n private _certificateLoader: PkiCertificateLoader,\n ) {}\n\n async load(typedData: TypedDataContext): Promise<TypedDataClearSignContext> {\n // Get the typed data filters from the data source\n let proxy:\n | ClearSignContextSuccess<ClearSignContextType.PROXY_DELEGATE_CALL>\n | undefined = undefined;\n let data = await this.dataSource.getTypedDataFilters({\n address: typedData.verifyingContract,\n chainId: typedData.chainId,\n version: typedData.version,\n schema: typedData.schema,\n });\n\n // If there was an error getting the typed data filters, try to resolve a proxy at that address\n if (data.isLeft()) {\n const { resolvedAddress, context } = await this.resolveProxy(typedData);\n if (context !== undefined) {\n proxy = context;\n data = await this.dataSource.getTypedDataFilters({\n address: resolvedAddress,\n chainId: typedData.chainId,\n version: typedData.version,\n schema: typedData.schema,\n });\n }\n // If there was stil an error, return immediately\n if (data.isLeft()) {\n return {\n type: \"error\",\n error: data.extract(),\n };\n }\n }\n\n // Else, extract the message info and filters\n const { messageInfo, filters, calldatasInfos } = data.unsafeCoerce();\n const mappedFilters = filters.reduce(\n (acc, filter) => {\n acc[filter.path] = filter;\n return acc;\n },\n {} as Record<TypedDataFilterPath, TypedDataFilter>,\n );\n\n return {\n type: \"success\",\n messageInfo,\n filters: mappedFilters,\n trustedNamesAddresses: this.extractTrustedNames(filters, typedData),\n tokens: await this.extractTokens(filters, typedData),\n calldatas: this.extractCalldatas(filters, calldatasInfos, typedData),\n proxy,\n };\n }\n\n private async resolveProxy(\n typedData: TypedDataContext,\n ): Promise<ResolvedProxy> {\n // Try to resolve the proxy\n const proxyDelegateCall = await this.proxyDataSource.getProxyDelegateCall({\n calldata: \"0x\",\n proxyAddress: typedData.verifyingContract,\n chainId: typedData.chainId,\n challenge: typedData.challenge ?? \"\",\n });\n\n // Early return on failure\n if (proxyDelegateCall.isLeft()) {\n return {\n resolvedAddress: typedData.verifyingContract,\n context: undefined,\n };\n }\n\n // Fetch descriptor on success\n const certificate = await this._certificateLoader.loadCertificate({\n keyId: KeyId.CalCalldataKey,\n keyUsage: KeyUsage.Calldata,\n targetDevice: typedData.deviceModelId,\n });\n const proxyData = proxyDelegateCall.unsafeCoerce();\n return {\n resolvedAddress:\n proxyData.delegateAddresses.find(\n (address) => address === typedData.verifyingContract,\n ) || proxyData.delegateAddresses[0]!,\n context: {\n type: ClearSignContextType.PROXY_DELEGATE_CALL,\n payload: proxyData.signedDescriptor,\n certificate,\n },\n };\n }\n\n private extractTrustedNames(\n filters: TypedDataFilter[],\n typedData: TypedDataContext,\n ): Record<TypedDataFilterPath, HexaString> {\n return filters\n .filter((filter) => filter.type === \"trusted-name\")\n .reduce(\n (acc, filter) => {\n const values = typedData.fieldsValues.filter(\n (entry) => entry.path === filter.path,\n );\n if (values.length !== 0) {\n const value = values[0]!;\n const address = this.convertAddressToHexaString(value.value);\n acc[filter.path] = address;\n }\n return acc;\n },\n {} as Record<TypedDataFilterPath, HexaString>,\n );\n }\n\n private async extractTokens(\n filters: TypedDataFilter[],\n typedData: TypedDataContext,\n ): Promise<Record<TypedDataTokenIndex, TypedDataToken>> {\n const mappedTokens: Record<TypedDataTokenIndex, TypedDataToken> = {};\n for (const filter of filters) {\n if (filter.type !== \"token\" && filter.type !== \"amount\") {\n continue; // no token reference\n }\n const tokenIndex = filter.tokenIndex;\n if (mappedTokens[tokenIndex] !== undefined) {\n continue; // Already fetched for a previous filter\n }\n\n // If the filter is a token, get token address from typed message values, and fetch descriptor\n if (filter.type === \"token\") {\n const values = typedData.fieldsValues.filter(\n (entry) => entry.path === filter.path,\n );\n if (values.length === 0) {\n // No value matching the referenced token. It may be located in an empty array.\n continue;\n }\n const value = values[0]!;\n const address = this.convertAddressToHexaString(value.value);\n\n // Arrays with different tokens are not supported since there is only 1 tokenIndex per filter.\n // Only fetch tokens if all values are the same.\n if (\n values.every(\n (entry) => this.convertAddressToHexaString(entry.value) === address,\n )\n ) {\n // Fetch descriptor\n const chainId = typedData.chainId;\n const payload = await this.tokenDataSource.getTokenInfosPayload({\n address,\n chainId,\n });\n payload.ifRight((p) => {\n mappedTokens[tokenIndex] = p;\n });\n }\n }\n\n // If the filter is an amount with a reference to the verifyingContract, fetch verifyingContract descriptor.\n // This is because descriptors data-sources should be compatible with Ledger devices specifications:\n // https://github.com/LedgerHQ/app-ethereum/blob/develop/doc/ethapp.adoc#amount-join-value\n else if (\n filter.type === \"amount\" &&\n tokenIndex === VERIFYING_CONTRACT_TOKEN_INDEX\n ) {\n const address = typedData.verifyingContract;\n const chainId = typedData.chainId;\n const payload = await this.tokenDataSource.getTokenInfosPayload({\n address,\n chainId,\n });\n payload.ifRight((p) => {\n mappedTokens[tokenIndex] = p;\n });\n }\n }\n return mappedTokens;\n }\n\n private extractCalldatas(\n filters: TypedDataFilter[],\n calldatasInfos: Record<TypedDataCalldataIndex, TypedDataFilterCalldataInfo>,\n typedData: TypedDataContext,\n ): Record<TypedDataCalldataIndex, TypedDataCalldataInfo> {\n // Map filters per calldataIndex\n const calldataFilters = filters.reduce(\n (acc, filter) => {\n if (\n filter.type === \"calldata-value\" ||\n filter.type === \"calldata-callee\" ||\n filter.type === \"calldata-chain-id\" ||\n filter.type === \"calldata-selector\" ||\n filter.type === \"calldata-amount\" ||\n filter.type === \"calldata-spender\"\n ) {\n const array = acc[filter.calldataIndex];\n if (array === undefined) {\n acc[filter.calldataIndex] = [filter];\n } else {\n array.push(filter);\n }\n }\n return acc;\n },\n {} as Record<TypedDataCalldataIndex, TypedDataFilterCalldata[]>,\n );\n\n // Iterate over calldatas\n const mappedCalldatas: Record<\n TypedDataCalldataIndex,\n TypedDataCalldataInfo\n > = {};\n for (const calldataIndex in calldatasInfos) {\n const infos = calldatasInfos[calldataIndex]!;\n const filters = calldataFilters[calldataIndex];\n if (!filters) {\n continue;\n }\n\n // Get data\n const data = this.extractHexaString(\n filters.find((filter) => filter.type === \"calldata-value\"),\n typedData,\n \"0x\",\n );\n\n // Get selector\n const selector = this.extractHexaString(\n filters.find((filter) => filter.type === \"calldata-selector\"),\n typedData,\n data.slice(0, 10),\n );\n\n // Get to\n const to = this.extractAddress(\n filters.find((filter) => filter.type === \"calldata-callee\"),\n typedData,\n infos.calleeFlag,\n );\n\n // Get from\n const from = this.extractAddress(\n filters.find((filter) => filter.type === \"calldata-spender\"),\n typedData,\n infos.spenderFlag,\n );\n\n // Get amount\n const value = this.extractBigint(\n filters.find((filter) => filter.type === \"calldata-amount\"),\n typedData,\n undefined,\n );\n\n // Get chainId\n const chainIdBigint = this.extractBigint(\n filters.find((filter) => filter.type === \"calldata-chain-id\"),\n typedData,\n undefined,\n );\n const chainId =\n chainIdBigint !== undefined && chainIdBigint < Number.MAX_SAFE_INTEGER\n ? Number(chainIdBigint)\n : typedData.chainId;\n\n mappedCalldatas[calldataIndex] = {\n filter: infos,\n subset: {\n chainId,\n data,\n selector,\n to,\n value,\n from,\n },\n };\n }\n return mappedCalldatas;\n }\n\n private extractHexaString(\n filter: TypedDataFilter | undefined,\n typedData: TypedDataContext,\n defaultValue: string,\n ): string {\n if (filter !== undefined) {\n const values = typedData.fieldsValues.filter(\n (entry) => entry.path === filter.path,\n );\n if (values.length !== 0) {\n return bufferToHexaString(values[0]!.value);\n }\n }\n return defaultValue;\n }\n\n private extractAddress(\n filter: TypedDataFilter | undefined,\n typedData: TypedDataContext,\n presenceFlag: TypedDataCalldataParamPresence,\n defaultValue?: string,\n ): string | undefined {\n if (presenceFlag === TypedDataCalldataParamPresence.VerifyingContract) {\n return typedData.verifyingContract;\n } else if (filter !== undefined) {\n const values = typedData.fieldsValues.filter(\n (entry) => entry.path === filter.path,\n );\n if (values.length !== 0) {\n return this.convertAddressToHexaString(values[0]!.value);\n }\n }\n return defaultValue;\n }\n\n private extractBigint(\n filter: TypedDataFilter | undefined,\n typedData: TypedDataContext,\n defaultValue: bigint | undefined,\n ): bigint | undefined {\n if (filter !== undefined) {\n const values = typedData.fieldsValues.filter(\n (entry) => entry.path === filter.path,\n );\n if (values.length !== 0) {\n return BigInt(bufferToHexaString(values[0]!.value));\n }\n }\n return defaultValue;\n }\n\n private convertAddressToHexaString(address: Uint8Array): HexaString {\n // Address size is 20 bytes so 40 characters, padded with zeros on the left\n return `0x${Array.from(address, (byte) =>\n byte.toString(16).padStart(2, \"0\"),\n )\n .join(\"\")\n .padStart(40, \"0\")}`;\n }\n}\n"],
|
|
5
|
-
"mappings": "iOACA,OAAS,sBAAAA,MAA0B,kCACnC,OAAS,UAAAC,EAAQ,cAAAC,MAAkB,YAEnC,OAAS,YAAAC,MAAgB,oBAEzB,OAAS,SAAAC,MAAa,oBACtB,OAAS,YAAAC,MAAgB,uBAEzB,OAAS,cAAAC,MAAkB,wBAC3B,OAEE,wBAAAC,MACK,kCAYP,OACE,kCAAAC,EACA,kCAAAC,MACK,2CAGP,OAAS,cAAAC,MAAkB,wBAE3B,OAAS,kBAAAC,MAAsB,iCASxB,IAAMC,EAAN,KAAsE,CAC3E,YAEUC,EAEAC,EAEAC,EAEAC,EACR,CAPQ,gBAAAH,EAEA,qBAAAC,EAEA,qBAAAC,EAEA,wBAAAC,CACP,CAEH,MAAM,KAAKC,EAAiE,CAE1E,IAAIC,EAGAC,EAAO,MAAM,KAAK,WAAW,oBAAoB,CACnD,QAASF,EAAU,kBACnB,QAASA,EAAU,QACnB,QAASA,EAAU,QACnB,OAAQA,EAAU,MACpB,CAAC,EAGD,GAAIE,EAAK,OAAO,EAAG,CACjB,KAAM,CAAE,gBAAAC,EAAiB,QAAAC,CAAQ,EAAI,MAAM,KAAK,aAAaJ,CAAS,EAWtE,GAVII,IAAY,SACdH,EAAQG,EACRF,EAAO,MAAM,KAAK,WAAW,oBAAoB,CAC/C,QAASC,EACT,QAASH,EAAU,QACnB,QAASA,EAAU,QACnB,OAAQA,EAAU,MACpB,CAAC,GAGCE,EAAK,OAAO,EACd,MAAO,CACL,KAAM,QACN,MAAOA,EAAK,QAAQ,CACtB,CAEJ,CAGA,KAAM,CAAE,YAAAG,EAAa,QAAAC,EAAS,eAAAC,CAAe,EAAIL,EAAK,aAAa,EAC7DM,EAAgBF,EAAQ,OAC5B,CAACG,EAAKC,KACJD,EAAIC,EAAO,IAAI,EAAIA,EACZD,GAET,CAAC,CACH,EAEA,MAAO,CACL,KAAM,UACN,YAAAJ,EACA,QAASG,EACT,sBAAuB,KAAK,oBAAoBF,EAASN,CAAS,EAClE,OAAQ,MAAM,KAAK,cAAcM,EAASN,CAAS,EACnD,UAAW,KAAK,iBAAiBM,EAASC,EAAgBP,CAAS,EACnE,MAAAC,CACF,CACF,CAEA,MAAc,aACZD,EACwB,CAExB,MAAMW,
|
|
6
|
-
"names": ["bufferToHexaString", "inject", "injectable", "pkiTypes", "KeyId", "KeyUsage", "proxyTypes", "ClearSignContextType", "TypedDataCalldataParamPresence", "VERIFYING_CONTRACT_TOKEN_INDEX", "tokenTypes", "typedDataTypes", "DefaultTypedDataContextLoader", "dataSource", "tokenDataSource", "proxyDataSource", "_certificateLoader", "typedData", "proxy", "data", "resolvedAddress", "context", "messageInfo", "filters", "calldatasInfos", "mappedFilters", "acc", "filter", "proxyDelegateCall", "certificate", "KeyId", "KeyUsage", "proxyData", "
|
|
4
|
+
"sourcesContent": ["import type { HexaString } from \"@ledgerhq/device-management-kit\";\nimport { bufferToHexaString } from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport { pkiTypes } from \"@/pki/di/pkiTypes\";\nimport { type PkiCertificateLoader } from \"@/pki/domain/PkiCertificateLoader\";\nimport { KeyId } from \"@/pki/model/KeyId\";\nimport { KeyUsage } from \"@/pki/model/KeyUsage\";\nimport type { ProxyDataSource } from \"@/proxy/data/ProxyDataSource\";\nimport { proxyTypes } from \"@/proxy/di/proxyTypes\";\nimport {\n type ClearSignContextSuccess,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\nimport type {\n TypedDataCalldataIndex,\n TypedDataCalldataInfo,\n TypedDataClearSignContext,\n TypedDataFilter,\n TypedDataFilterCalldata,\n TypedDataFilterCalldataInfo,\n TypedDataFilterPath,\n TypedDataToken,\n TypedDataTokenIndex,\n} from \"@/shared/model/TypedDataClearSignContext\";\nimport {\n TypedDataCalldataParamPresence,\n VERIFYING_CONTRACT_TOKEN_INDEX,\n} from \"@/shared/model/TypedDataClearSignContext\";\nimport type { TypedDataContext } from \"@/shared/model/TypedDataContext\";\nimport type { TokenDataSource } from \"@/token/data/TokenDataSource\";\nimport { tokenTypes } from \"@/token/di/tokenTypes\";\nimport type { TypedDataDataSource } from \"@/typed-data/data/TypedDataDataSource\";\nimport { typedDataTypes } from \"@/typed-data/di/typedDataTypes\";\nimport type { TypedDataContextLoader } from \"@/typed-data/domain/TypedDataContextLoader\";\n\ntype ResolvedProxy = {\n resolvedAddress: string;\n context?: ClearSignContextSuccess<ClearSignContextType.PROXY_INFO>;\n};\n\n@injectable()\nexport class DefaultTypedDataContextLoader implements TypedDataContextLoader {\n constructor(\n @inject(typedDataTypes.TypedDataDataSource)\n private dataSource: TypedDataDataSource,\n @inject(tokenTypes.TokenDataSource)\n private tokenDataSource: TokenDataSource,\n @inject(proxyTypes.ProxyDataSource)\n private proxyDataSource: ProxyDataSource,\n @inject(pkiTypes.PkiCertificateLoader)\n private _certificateLoader: PkiCertificateLoader,\n ) {}\n\n async load(typedData: TypedDataContext): Promise<TypedDataClearSignContext> {\n // Get the typed data filters from the data source\n let proxy:\n | ClearSignContextSuccess<ClearSignContextType.PROXY_INFO>\n | undefined = undefined;\n let data = await this.dataSource.getTypedDataFilters({\n address: typedData.verifyingContract,\n chainId: typedData.chainId,\n version: typedData.version,\n schema: typedData.schema,\n });\n\n // If there was an error getting the typed data filters, try to resolve a proxy at that address\n if (data.isLeft()) {\n const { resolvedAddress, context } = await this.resolveProxy(typedData);\n if (context !== undefined) {\n proxy = context;\n data = await this.dataSource.getTypedDataFilters({\n address: resolvedAddress,\n chainId: typedData.chainId,\n version: typedData.version,\n schema: typedData.schema,\n });\n }\n // If there was stil an error, return immediately\n if (data.isLeft()) {\n return {\n type: \"error\",\n error: data.extract(),\n };\n }\n }\n\n // Else, extract the message info and filters\n const { messageInfo, filters, calldatasInfos } = data.unsafeCoerce();\n const mappedFilters = filters.reduce(\n (acc, filter) => {\n acc[filter.path] = filter;\n return acc;\n },\n {} as Record<TypedDataFilterPath, TypedDataFilter>,\n );\n\n return {\n type: \"success\",\n messageInfo,\n filters: mappedFilters,\n trustedNamesAddresses: this.extractTrustedNames(filters, typedData),\n tokens: await this.extractTokens(filters, typedData),\n calldatas: this.extractCalldatas(filters, calldatasInfos, typedData),\n proxy,\n };\n }\n\n private async resolveProxy(\n typedData: TypedDataContext,\n ): Promise<ResolvedProxy> {\n // Try to resolve the proxy\n const proxyDelegateCall =\n await this.proxyDataSource.getProxyImplementationAddress({\n calldata: \"0x\",\n proxyAddress: typedData.verifyingContract,\n chainId: typedData.chainId,\n challenge: typedData.challenge ?? \"\",\n });\n\n // Early return on failure\n if (proxyDelegateCall.isLeft()) {\n return {\n resolvedAddress: typedData.verifyingContract,\n context: undefined,\n };\n }\n\n // Fetch descriptor on success\n const certificate = await this._certificateLoader.loadCertificate({\n keyId: KeyId.CalCalldataKey,\n keyUsage: KeyUsage.Calldata,\n targetDevice: typedData.deviceModelId,\n });\n const proxyData = proxyDelegateCall.unsafeCoerce();\n return {\n resolvedAddress: proxyData.implementationAddress,\n context: {\n type: ClearSignContextType.PROXY_INFO,\n payload: proxyData.signedDescriptor,\n certificate,\n },\n };\n }\n\n private extractTrustedNames(\n filters: TypedDataFilter[],\n typedData: TypedDataContext,\n ): Record<TypedDataFilterPath, HexaString> {\n return filters\n .filter((filter) => filter.type === \"trusted-name\")\n .reduce(\n (acc, filter) => {\n const values = typedData.fieldsValues.filter(\n (entry) => entry.path === filter.path,\n );\n if (values.length !== 0) {\n const value = values[0]!;\n const address = this.convertAddressToHexaString(value.value);\n acc[filter.path] = address;\n }\n return acc;\n },\n {} as Record<TypedDataFilterPath, HexaString>,\n );\n }\n\n private async extractTokens(\n filters: TypedDataFilter[],\n typedData: TypedDataContext,\n ): Promise<Record<TypedDataTokenIndex, TypedDataToken>> {\n const mappedTokens: Record<TypedDataTokenIndex, TypedDataToken> = {};\n for (const filter of filters) {\n if (filter.type !== \"token\" && filter.type !== \"amount\") {\n continue; // no token reference\n }\n const tokenIndex = filter.tokenIndex;\n if (mappedTokens[tokenIndex] !== undefined) {\n continue; // Already fetched for a previous filter\n }\n\n // If the filter is a token, get token address from typed message values, and fetch descriptor\n if (filter.type === \"token\") {\n const values = typedData.fieldsValues.filter(\n (entry) => entry.path === filter.path,\n );\n if (values.length === 0) {\n // No value matching the referenced token. It may be located in an empty array.\n continue;\n }\n const value = values[0]!;\n const address = this.convertAddressToHexaString(value.value);\n\n // Arrays with different tokens are not supported since there is only 1 tokenIndex per filter.\n // Only fetch tokens if all values are the same.\n if (\n values.every(\n (entry) => this.convertAddressToHexaString(entry.value) === address,\n )\n ) {\n // Fetch descriptor\n const chainId = typedData.chainId;\n const payload = await this.tokenDataSource.getTokenInfosPayload({\n address,\n chainId,\n });\n payload.ifRight((p) => {\n mappedTokens[tokenIndex] = p;\n });\n }\n }\n\n // If the filter is an amount with a reference to the verifyingContract, fetch verifyingContract descriptor.\n // This is because descriptors data-sources should be compatible with Ledger devices specifications:\n // https://github.com/LedgerHQ/app-ethereum/blob/develop/doc/ethapp.adoc#amount-join-value\n else if (\n filter.type === \"amount\" &&\n tokenIndex === VERIFYING_CONTRACT_TOKEN_INDEX\n ) {\n const address = typedData.verifyingContract;\n const chainId = typedData.chainId;\n const payload = await this.tokenDataSource.getTokenInfosPayload({\n address,\n chainId,\n });\n payload.ifRight((p) => {\n mappedTokens[tokenIndex] = p;\n });\n }\n }\n return mappedTokens;\n }\n\n private extractCalldatas(\n filters: TypedDataFilter[],\n calldatasInfos: Record<TypedDataCalldataIndex, TypedDataFilterCalldataInfo>,\n typedData: TypedDataContext,\n ): Record<TypedDataCalldataIndex, TypedDataCalldataInfo> {\n // Map filters per calldataIndex\n const calldataFilters = filters.reduce(\n (acc, filter) => {\n if (\n filter.type === \"calldata-value\" ||\n filter.type === \"calldata-callee\" ||\n filter.type === \"calldata-chain-id\" ||\n filter.type === \"calldata-selector\" ||\n filter.type === \"calldata-amount\" ||\n filter.type === \"calldata-spender\"\n ) {\n const array = acc[filter.calldataIndex];\n if (array === undefined) {\n acc[filter.calldataIndex] = [filter];\n } else {\n array.push(filter);\n }\n }\n return acc;\n },\n {} as Record<TypedDataCalldataIndex, TypedDataFilterCalldata[]>,\n );\n\n // Iterate over calldatas\n const mappedCalldatas: Record<\n TypedDataCalldataIndex,\n TypedDataCalldataInfo\n > = {};\n for (const calldataIndex in calldatasInfos) {\n const infos = calldatasInfos[calldataIndex]!;\n const filters = calldataFilters[calldataIndex];\n if (!filters) {\n continue;\n }\n\n // Get data\n const data = this.extractHexaString(\n filters.find((filter) => filter.type === \"calldata-value\"),\n typedData,\n \"0x\",\n );\n\n // Get selector\n const selector = this.extractHexaString(\n filters.find((filter) => filter.type === \"calldata-selector\"),\n typedData,\n data.slice(0, 10),\n );\n\n // Get to\n const to = this.extractAddress(\n filters.find((filter) => filter.type === \"calldata-callee\"),\n typedData,\n infos.calleeFlag,\n );\n\n // Get from\n const from = this.extractAddress(\n filters.find((filter) => filter.type === \"calldata-spender\"),\n typedData,\n infos.spenderFlag,\n );\n\n // Get amount\n const value = this.extractBigint(\n filters.find((filter) => filter.type === \"calldata-amount\"),\n typedData,\n undefined,\n );\n\n // Get chainId\n const chainIdBigint = this.extractBigint(\n filters.find((filter) => filter.type === \"calldata-chain-id\"),\n typedData,\n undefined,\n );\n const chainId =\n chainIdBigint !== undefined && chainIdBigint < Number.MAX_SAFE_INTEGER\n ? Number(chainIdBigint)\n : typedData.chainId;\n\n mappedCalldatas[calldataIndex] = {\n filter: infos,\n subset: {\n chainId,\n data,\n selector,\n to,\n value,\n from,\n },\n };\n }\n return mappedCalldatas;\n }\n\n private extractHexaString(\n filter: TypedDataFilter | undefined,\n typedData: TypedDataContext,\n defaultValue: string,\n ): string {\n if (filter !== undefined) {\n const values = typedData.fieldsValues.filter(\n (entry) => entry.path === filter.path,\n );\n if (values.length !== 0) {\n return bufferToHexaString(values[0]!.value);\n }\n }\n return defaultValue;\n }\n\n private extractAddress(\n filter: TypedDataFilter | undefined,\n typedData: TypedDataContext,\n presenceFlag: TypedDataCalldataParamPresence,\n defaultValue?: string,\n ): string | undefined {\n if (presenceFlag === TypedDataCalldataParamPresence.VerifyingContract) {\n return typedData.verifyingContract;\n } else if (filter !== undefined) {\n const values = typedData.fieldsValues.filter(\n (entry) => entry.path === filter.path,\n );\n if (values.length !== 0) {\n return this.convertAddressToHexaString(values[0]!.value);\n }\n }\n return defaultValue;\n }\n\n private extractBigint(\n filter: TypedDataFilter | undefined,\n typedData: TypedDataContext,\n defaultValue: bigint | undefined,\n ): bigint | undefined {\n if (filter !== undefined) {\n const values = typedData.fieldsValues.filter(\n (entry) => entry.path === filter.path,\n );\n if (values.length !== 0) {\n return BigInt(bufferToHexaString(values[0]!.value));\n }\n }\n return defaultValue;\n }\n\n private convertAddressToHexaString(address: Uint8Array): HexaString {\n // Address size is 20 bytes so 40 characters, padded with zeros on the left\n return `0x${Array.from(address, (byte) =>\n byte.toString(16).padStart(2, \"0\"),\n )\n .join(\"\")\n .padStart(40, \"0\")}`;\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["bufferToHexaString", "inject", "injectable", "pkiTypes", "KeyId", "KeyUsage", "proxyTypes", "ClearSignContextType", "TypedDataCalldataParamPresence", "VERIFYING_CONTRACT_TOKEN_INDEX", "tokenTypes", "typedDataTypes", "DefaultTypedDataContextLoader", "dataSource", "tokenDataSource", "proxyDataSource", "_certificateLoader", "typedData", "proxy", "data", "resolvedAddress", "context", "messageInfo", "filters", "calldatasInfos", "mappedFilters", "acc", "filter", "proxyDelegateCall", "certificate", "KeyId", "KeyUsage", "proxyData", "ClearSignContextType", "values", "entry", "value", "address", "mappedTokens", "tokenIndex", "chainId", "p", "VERIFYING_CONTRACT_TOKEN_INDEX", "calldataFilters", "array", "mappedCalldatas", "calldataIndex", "infos", "selector", "to", "from", "chainIdBigint", "defaultValue", "bufferToHexaString", "presenceFlag", "TypedDataCalldataParamPresence", "byte", "__decorateClass", "injectable", "__decorateParam", "inject", "typedDataTypes", "tokenTypes", "proxyTypes", "pkiTypes"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{DeviceModelId as f}from"@ledgerhq/device-management-kit";import{Left as l,Right as t}from"purify-ts";import{ClearSignContextType as u}from"../../shared/model/ClearSignContext";import{TypedDataCalldataParamPresence as s}from"../../shared/model/TypedDataClearSignContext";import{DefaultTypedDataContextLoader as v}from"../../typed-data/domain/DefaultTypedDataContextLoader";describe("TypedDataContextLoader",()=>{const r=vi.fn(),i=vi.fn(),d=vi.fn(),o={getTokenInfosPayload:vi.fn()},m={getTypedDataFilters:d},y={getProxyDelegateCall:r,getProxyImplementationAddress:vi.fn()},g={loadCertificate:i},c=new v(m,o,y,g),b={PermitSingle:[{name:"details",type:"PermitDetails"},{name:"spender",type:"address"},{name:"sigDeadline",type:"uint256"}],PermitDetails:[{type:"address[]",name:"token"},{name:"amount",type:"uint160"},{name:"expiration",type:"uint48"},{name:"nonce",type:"uint48"}],EIP712Domain:[{name:"name",type:"string"},{name:"chainId",type:"uint256"},{name:"verifyingContract",type:"address"}]},n=[{path:"details.token.[]",value:Uint8Array.from([124,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,25])},{path:"details.amount",value:Uint8Array.from([18])},{path:"spender",value:Uint8Array.from([18])},{path:"details.expiration",value:Uint8Array.from([18])}],p={SafeTx:[{name:"to",type:"address"},{name:"spender",type:"address"},{name:"value",type:"uint256"},{name:"data",type:"bytes"},{name:"selector",type:"bytes"},{name:"chainId",type:"uint256"},{name:"operation",type:"uint8"}],EIP712Domain:[{name:"chainId",type:"uint256"},{name:"verifyingContract",type:"address"}]},x=[{path:"to",value:Uint8Array.from([124,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,25])},{path:"spender",value:Uint8Array.from([140,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,25])},{path:"value",value:Uint8Array.from([14,235,224,180,14,128,0])},{path:"data",value:Uint8Array.from([106,118,18,2,0,0,0,0,0,0,0,0,0,0,0,0,35,248,171,252,40,36,195,151,204,179,218,137,174,119,41,132,16,125,219,153])},{path:"selector",value:Uint8Array.from([119,136,153,170])},{path:"chainId",value:Uint8Array.from([18,52])},{path:"operation",value:Uint8Array.from([1])}];beforeEach(()=>{vi.clearAllMocks(),vi.spyOn(o,"getTokenInfosPayload").mockImplementation(({address:a})=>Promise.resolve(t(`payload-${a}`))),r.mockResolvedValue(l(new Error("No proxy")))}),describe("load function",()=>{it("success with referenced token",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:b,challenge:"1234",fieldsValues:n,deviceModelId:f.STAX};d.mockResolvedValueOnce(Promise.resolve(t({messageInfo:{displayName:"Permit2",filtersCount:4,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[{type:"token",displayName:"Amount allowance",path:"details.token.[]",tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"},{type:"amount",displayName:"Amount allowance",path:"details.amount",tokenIndex:0,signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3"},{type:"raw",displayName:"Approve to spender",path:"spender",signature:"3044022033e5713d9cb9bc375b56a9fb53b736c81ea3c4ac5cfb2d3ca7f8b8f0558fe2430220543ca4fef6d6f725f29e343f167fe9dd582aa856ecb5797259050eb990a1befb"},{type:"datetime",displayName:"Approval expire",path:"details.expiration",signature:"3044022056b3381e4540629ad73bc434ec49d80523234b82f62340fbb77157fb0eb21a680220459fe9cf6ca309f9c7dfc6d4711fea1848dba661563c57f77b3c2dc480b3a63b"}]})));const e=await c.load(a);expect(d).toHaveBeenCalledWith(expect.objectContaining({address:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1})),expect(e).toEqual({type:"success",messageInfo:{displayName:"Permit2",filtersCount:4,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},trustedNamesAddresses:{},tokens:{0:"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"},calldatas:{},proxy:void 0,filters:{"details.amount":{displayName:"Amount allowance",path:"details.amount",signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3",tokenIndex:0,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"}}})}),it("success with referenced token verifying contract",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:b,challenge:"1234",fieldsValues:n,deviceModelId:f.STAX};d.mockResolvedValueOnce(Promise.resolve(t({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[{type:"token",displayName:"Amount allowance",path:"details.token.[]",tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"},{type:"amount",displayName:"Amount allowance",path:"details.amount",tokenIndex:255,signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3"}]})));const e=await c.load(a);expect(e).toEqual({type:"success",messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},trustedNamesAddresses:{},tokens:{0:"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",255:"payload-0x000000000022d473030f116ddee9f6b43ac78ba3"},calldatas:{},proxy:void 0,filters:{"details.amount":{displayName:"Amount allowance",path:"details.amount",signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3",tokenIndex:255,type:"amount"},"details.token.[]":{displayName:"Amount allowance",path:"details.token.[]",signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733",tokenIndex:0,type:"token"}}})}),it("success with calldata",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:p,challenge:"1234",fieldsValues:x,deviceModelId:f.STAX};d.mockResolvedValueOnce(Promise.resolve(t({messageInfo:{displayName:"Multisig transaction",filtersCount:4,signature:"304402206553ac5a2ce6bb17b94f3ec559fb037af0b742d62c001d8938aad709accd71ed022075ce87c3eb65e605f0ce0b2bc4bf960498bacf109a499807d1a7906d9c78c9c4"},calldatasInfos:{0:{calldataIndex:0,displayName:"Transaction",valueFlag:!0,calleeFlag:s.Present,chainIdFlag:!1,selectorFlag:!1,amountFlag:!0,spenderFlag:s.Present,signature:"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"}},filters:[{type:"raw",displayName:"Operation type",path:"operation",signature:"3045022100fb9f3e7bab8ac0cd9a5722389a19d1ebdd39d7a6da6e374724a46eebee6896bc022070e991bb022111ed448540511b7fa4f70d5e92b0a3866d75cfc9d3cf1cf75d9b"},{type:"calldata-value",displayName:"Transaction",path:"data",calldataIndex:0,signature:"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a"},{type:"calldata-callee",displayName:"Transaction",path:"to",calldataIndex:0,signature:"30440220796cc549e363c5bc9f9d5bda894cf4cda11f157519f673d2b4a8b3ce716a8fba0220663c888d764084072856fe654ff425bffe671c2550068c64be9eddd6c84178b8"},{type:"calldata-amount",displayName:"Transaction",path:"value",calldataIndex:0,signature:"3044022021601a55098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f"},{type:"calldata-chain-id",displayName:"Transaction",path:"chainId",calldataIndex:0,signature:"3044022021601a56098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f"},{type:"calldata-selector",displayName:"Transaction",path:"selector",calldataIndex:0,signature:"3044022021601a57098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f"},{type:"calldata-spender",displayName:"Transaction",path:"spender",calldataIndex:0,signature:"3044022021601a58098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f"}]})));const e=await c.load(a);expect(e).toEqual({type:"success",messageInfo:{displayName:"Multisig transaction",filtersCount:4,signature:"304402206553ac5a2ce6bb17b94f3ec559fb037af0b742d62c001d8938aad709accd71ed022075ce87c3eb65e605f0ce0b2bc4bf960498bacf109a499807d1a7906d9c78c9c4"},trustedNamesAddresses:{},tokens:{},calldatas:{0:{filter:{calldataIndex:0,displayName:"Transaction",valueFlag:!0,calleeFlag:s.Present,chainIdFlag:!1,selectorFlag:!1,amountFlag:!0,spenderFlag:s.Present,signature:"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"},subset:{chainId:4660,data:"0x6a76120200000000000000000000000023f8abfc2824c397ccb3da89ae772984107ddb99",from:"0x8ceb23fd6bc0add59e62ac25578270cff1b9f619",selector:"0x778899aa",to:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",value:4200000000000000n}}},proxy:void 0,filters:{data:{displayName:"Transaction",path:"data",signature:"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a",calldataIndex:0,type:"calldata-value"},operation:{displayName:"Operation type",path:"operation",signature:"3045022100fb9f3e7bab8ac0cd9a5722389a19d1ebdd39d7a6da6e374724a46eebee6896bc022070e991bb022111ed448540511b7fa4f70d5e92b0a3866d75cfc9d3cf1cf75d9b",type:"raw"},to:{displayName:"Transaction",path:"to",signature:"30440220796cc549e363c5bc9f9d5bda894cf4cda11f157519f673d2b4a8b3ce716a8fba0220663c888d764084072856fe654ff425bffe671c2550068c64be9eddd6c84178b8",calldataIndex:0,type:"calldata-callee"},value:{displayName:"Transaction",path:"value",signature:"3044022021601a55098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f",calldataIndex:0,type:"calldata-amount"},chainId:{displayName:"Transaction",path:"chainId",signature:"3044022021601a56098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f",calldataIndex:0,type:"calldata-chain-id"},selector:{displayName:"Transaction",path:"selector",signature:"3044022021601a57098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f",calldataIndex:0,type:"calldata-selector"},spender:{displayName:"Transaction",path:"spender",signature:"3044022021601a58098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f",calldataIndex:0,type:"calldata-spender"}}})}),it("success with several calldatas",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:p,challenge:"1234",fieldsValues:x,deviceModelId:f.STAX};d.mockResolvedValueOnce(Promise.resolve(t({messageInfo:{displayName:"Multisig transaction",filtersCount:4,signature:"304402206553ac5a2ce6bb17b94f3ec559fb037af0b742d62c001d8938aad709accd71ed022075ce87c3eb65e605f0ce0b2bc4bf960498bacf109a499807d1a7906d9c78c9c4"},calldatasInfos:{0:{calldataIndex:0,displayName:"Transaction",valueFlag:!0,calleeFlag:s.VerifyingContract,chainIdFlag:!1,selectorFlag:!1,amountFlag:!0,spenderFlag:s.VerifyingContract,signature:"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"},1:{calldataIndex:1,displayName:"Transaction 2",valueFlag:!1,calleeFlag:s.VerifyingContract,chainIdFlag:!0,selectorFlag:!0,amountFlag:!1,spenderFlag:s.VerifyingContract,signature:"3056122100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"}},filters:[{type:"raw",displayName:"Operation type",path:"operation",signature:"3045022100fb9f3e7bab8ac0cd9a5722389a19d1ebdd39d7a6da6e374724a46eebee6896bc022070e991bb022111ed448540511b7fa4f70d5e92b0a3866d75cfc9d3cf1cf75d9b"},{type:"calldata-value",displayName:"Transaction",path:"data",calldataIndex:0,signature:"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a"},{type:"calldata-selector",displayName:"Transaction",path:"selector",calldataIndex:1,signature:"3044022021601a57098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f"}]})));const e=await c.load(a);expect(e).toEqual({type:"success",messageInfo:{displayName:"Multisig transaction",filtersCount:4,signature:"304402206553ac5a2ce6bb17b94f3ec559fb037af0b742d62c001d8938aad709accd71ed022075ce87c3eb65e605f0ce0b2bc4bf960498bacf109a499807d1a7906d9c78c9c4"},trustedNamesAddresses:{},tokens:{},calldatas:{0:{filter:{calldataIndex:0,displayName:"Transaction",valueFlag:!0,calleeFlag:s.VerifyingContract,chainIdFlag:!1,selectorFlag:!1,amountFlag:!0,spenderFlag:s.VerifyingContract,signature:"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"},subset:{chainId:1,data:"0x6a76120200000000000000000000000023f8abfc2824c397ccb3da89ae772984107ddb99",from:"0x000000000022d473030f116ddee9f6b43ac78ba3",selector:"0x6a761202",to:"0x000000000022d473030f116ddee9f6b43ac78ba3",value:void 0}},1:{filter:{calldataIndex:1,displayName:"Transaction 2",valueFlag:!1,calleeFlag:s.VerifyingContract,chainIdFlag:!0,selectorFlag:!0,amountFlag:!1,spenderFlag:s.VerifyingContract,signature:"3056122100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"},subset:{chainId:1,data:"0x",from:"0x000000000022d473030f116ddee9f6b43ac78ba3",selector:"0x778899aa",to:"0x000000000022d473030f116ddee9f6b43ac78ba3",value:void 0}}},proxy:void 0,filters:{data:{displayName:"Transaction",path:"data",signature:"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a",calldataIndex:0,type:"calldata-value"},selector:{displayName:"Transaction",path:"selector",signature:"3044022021601a57098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f",calldataIndex:1,type:"calldata-selector"},operation:{displayName:"Operation type",path:"operation",signature:"3045022100fb9f3e7bab8ac0cd9a5722389a19d1ebdd39d7a6da6e374724a46eebee6896bc022070e991bb022111ed448540511b7fa4f70d5e92b0a3866d75cfc9d3cf1cf75d9b",type:"raw"}}})}),it("success with proxy",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:b,challenge:"1234",fieldsValues:n,deviceModelId:f.STAX};r.mockResolvedValueOnce(t({delegateAddresses:["0x987654321fedcba0"],signedDescriptor:"0x123456789abcdef0"})),i.mockResolvedValue(void 0),d.mockResolvedValueOnce(Promise.resolve(l(new Error("error")))).mockResolvedValueOnce(Promise.resolve(t({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[]})));const e=await c.load(a);expect(d).toHaveBeenCalledTimes(2),expect(d).toHaveBeenLastCalledWith(expect.objectContaining({address:"0x987654321fedcba0",chainId:1})),expect(e).toEqual({type:"success",messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},trustedNamesAddresses:{},tokens:{},calldatas:{},proxy:{type:u.PROXY_DELEGATE_CALL,payload:"0x123456789abcdef0",certificate:void 0},filters:{}})}),it("success with proxy and certificate",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:b,challenge:"1234",fieldsValues:n,deviceModelId:f.STAX};r.mockResolvedValueOnce(t({delegateAddresses:["0x987654321fedcba0"],signedDescriptor:"0x123456789abcdef0"})),i.mockResolvedValue({keyUsageNumber:1,payload:new Uint8Array([1,2,3,4])}),d.mockResolvedValueOnce(Promise.resolve(l(new Error("error")))).mockResolvedValueOnce(Promise.resolve(t({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[]})));const e=await c.load(a);expect(d).toHaveBeenCalledTimes(2),expect(d).toHaveBeenLastCalledWith(expect.objectContaining({address:"0x987654321fedcba0",chainId:1})),expect(e).toEqual({type:"success",messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},trustedNamesAddresses:{},tokens:{},calldatas:{},proxy:{type:u.PROXY_DELEGATE_CALL,payload:"0x123456789abcdef0",certificate:{keyUsageNumber:1,payload:new Uint8Array([1,2,3,4])}},filters:{}})}),it("should return an error if filters are unavailable",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:b,challenge:"1234",fieldsValues:n,deviceModelId:f.STAX};d.mockResolvedValueOnce(Promise.resolve(l(new Error("error"))));const e=await c.load(a);expect(d).toHaveBeenCalledTimes(1),expect(e).toEqual({type:"error",error:new Error("error")})}),it("should return an error if filters are unavailable in the proxy",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:b,challenge:"1234",fieldsValues:n,deviceModelId:f.STAX};r.mockResolvedValueOnce(t({delegateAddresses:["0x987654321fedcba0"],signedDescriptor:"0x123456789abcdef0"})),i.mockResolvedValue(void 0),d.mockResolvedValueOnce(Promise.resolve(l(new Error("error")))).mockResolvedValueOnce(Promise.resolve(l(new Error("error"))));const e=await c.load(a);expect(d).toHaveBeenCalledTimes(2),expect(e).toEqual({type:"error",error:new Error("error")})}),it("success with a trusted name",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:b,challenge:"1234",fieldsValues:n,deviceModelId:f.STAX};d.mockResolvedValueOnce(Promise.resolve(t({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[{type:"trusted-name",displayName:"Amount allowance",path:"details.token.[]",signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733",types:["contract"],sources:["local","ens"],typesAndSourcesPayload:"010203010002"}]})));const e=await c.load(a);expect(e).toEqual({type:"success",messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},trustedNamesAddresses:{"details.token.[]":"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"},tokens:{},calldatas:{},filters:{"details.token.[]":{displayName:"Amount allowance",path:"details.token.[]",signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733",types:["contract"],sources:["local","ens"],typesAndSourcesPayload:"010203010002",type:"trusted-name"}}})}),it("success with unavailable tokens",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:b,challenge:"1234",fieldsValues:n,deviceModelId:f.STAX};d.mockResolvedValueOnce(Promise.resolve(t({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[{type:"token",displayName:"Amount allowance",path:"details.token.[]",tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"}]}))),vi.spyOn(o,"getTokenInfosPayload").mockImplementation(()=>Promise.resolve(l(new Error("token error"))));const e=await c.load(a);expect(e).toEqual({type:"success",messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},trustedNamesAddresses:{},tokens:{},calldatas:{},filters:{"details.token.[]":{displayName:"Amount allowance",path:"details.token.[]",signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733",tokenIndex:0,type:"token"}}})}),it("success with several identic tokens",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:b,challenge:"1234",fieldsValues:[{path:"details.token.[]",value:Uint8Array.from([124,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,25])},...n],deviceModelId:f.STAX};d.mockResolvedValueOnce(Promise.resolve(t({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[{type:"token",displayName:"Amount allowance",path:"details.token.[]",tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"}]}))),vi.spyOn(o,"getTokenInfosPayload").mockImplementation(()=>Promise.resolve(l(new Error("token error"))));const e=await c.load(a);expect(o.getTokenInfosPayload).toHaveBeenCalledWith({address:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",chainId:1}),expect(e.type).toEqual("success")}),it("success with several different tokens",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:b,challenge:"1234",fieldsValues:[{path:"details.token.[]",value:Uint8Array.from([124,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,255])},...n],deviceModelId:f.STAX};d.mockResolvedValueOnce(Promise.resolve(t({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[{type:"token",displayName:"Amount allowance",path:"details.token.[]",tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"}]})));const e=await c.load(a);expect(o.getTokenInfosPayload).not.toHaveBeenCalledWith({address:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f6ff",chainId:1}),expect(o.getTokenInfosPayload).not.toHaveBeenCalledWith({address:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",chainId:1}),expect(e.type).toEqual("success")}),it("should ignore the token if value is not found",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:b,challenge:"1234",fieldsValues:n,deviceModelId:f.STAX};d.mockResolvedValueOnce(Promise.resolve(t({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[{type:"token",displayName:"Amount allowance",path:"details.badtoken",tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"}]})));const e=await c.load(a);expect(e.type).toEqual("success"),e.type==="success"&&(expect(e.filters["details.badtoken"]?.displayName).toEqual("Amount allowance"),expect(e.tokens).toEqual({}))})})});
|
|
1
|
+
import{DeviceModelId as f}from"@ledgerhq/device-management-kit";import{Left as l,Right as t}from"purify-ts";import{ClearSignContextType as u}from"../../shared/model/ClearSignContext";import{TypedDataCalldataParamPresence as s}from"../../shared/model/TypedDataClearSignContext";import{DefaultTypedDataContextLoader as v}from"../../typed-data/domain/DefaultTypedDataContextLoader";describe("TypedDataContextLoader",()=>{const r=vi.fn(),i=vi.fn(),d=vi.fn(),o={getTokenInfosPayload:vi.fn()},m={getTypedDataFilters:d},y={getProxyImplementationAddress:r},g={loadCertificate:i},c=new v(m,o,y,g),n={PermitSingle:[{name:"details",type:"PermitDetails"},{name:"spender",type:"address"},{name:"sigDeadline",type:"uint256"}],PermitDetails:[{type:"address[]",name:"token"},{name:"amount",type:"uint160"},{name:"expiration",type:"uint48"},{name:"nonce",type:"uint48"}],EIP712Domain:[{name:"name",type:"string"},{name:"chainId",type:"uint256"},{name:"verifyingContract",type:"address"}]},b=[{path:"details.token.[]",value:Uint8Array.from([124,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,25])},{path:"details.amount",value:Uint8Array.from([18])},{path:"spender",value:Uint8Array.from([18])},{path:"details.expiration",value:Uint8Array.from([18])}],p={SafeTx:[{name:"to",type:"address"},{name:"spender",type:"address"},{name:"value",type:"uint256"},{name:"data",type:"bytes"},{name:"selector",type:"bytes"},{name:"chainId",type:"uint256"},{name:"operation",type:"uint8"}],EIP712Domain:[{name:"chainId",type:"uint256"},{name:"verifyingContract",type:"address"}]},x=[{path:"to",value:Uint8Array.from([124,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,25])},{path:"spender",value:Uint8Array.from([140,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,25])},{path:"value",value:Uint8Array.from([14,235,224,180,14,128,0])},{path:"data",value:Uint8Array.from([106,118,18,2,0,0,0,0,0,0,0,0,0,0,0,0,35,248,171,252,40,36,195,151,204,179,218,137,174,119,41,132,16,125,219,153])},{path:"selector",value:Uint8Array.from([119,136,153,170])},{path:"chainId",value:Uint8Array.from([18,52])},{path:"operation",value:Uint8Array.from([1])}];beforeEach(()=>{vi.clearAllMocks(),vi.spyOn(o,"getTokenInfosPayload").mockImplementation(({address:a})=>Promise.resolve(t(`payload-${a}`))),r.mockResolvedValue(l(new Error("No proxy")))}),describe("load function",()=>{it("success with referenced token",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:b,deviceModelId:f.STAX};d.mockResolvedValueOnce(Promise.resolve(t({messageInfo:{displayName:"Permit2",filtersCount:4,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[{type:"token",displayName:"Amount allowance",path:"details.token.[]",tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"},{type:"amount",displayName:"Amount allowance",path:"details.amount",tokenIndex:0,signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3"},{type:"raw",displayName:"Approve to spender",path:"spender",signature:"3044022033e5713d9cb9bc375b56a9fb53b736c81ea3c4ac5cfb2d3ca7f8b8f0558fe2430220543ca4fef6d6f725f29e343f167fe9dd582aa856ecb5797259050eb990a1befb"},{type:"datetime",displayName:"Approval expire",path:"details.expiration",signature:"3044022056b3381e4540629ad73bc434ec49d80523234b82f62340fbb77157fb0eb21a680220459fe9cf6ca309f9c7dfc6d4711fea1848dba661563c57f77b3c2dc480b3a63b"}]})));const e=await c.load(a);expect(d).toHaveBeenCalledWith(expect.objectContaining({address:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1})),expect(e).toEqual({type:"success",messageInfo:{displayName:"Permit2",filtersCount:4,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},trustedNamesAddresses:{},tokens:{0:"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"},calldatas:{},proxy:void 0,filters:{"details.amount":{displayName:"Amount allowance",path:"details.amount",signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3",tokenIndex:0,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"}}})}),it("success with referenced token verifying contract",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:b,deviceModelId:f.STAX};d.mockResolvedValueOnce(Promise.resolve(t({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[{type:"token",displayName:"Amount allowance",path:"details.token.[]",tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"},{type:"amount",displayName:"Amount allowance",path:"details.amount",tokenIndex:255,signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3"}]})));const e=await c.load(a);expect(e).toEqual({type:"success",messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},trustedNamesAddresses:{},tokens:{0:"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",255:"payload-0x000000000022d473030f116ddee9f6b43ac78ba3"},calldatas:{},proxy:void 0,filters:{"details.amount":{displayName:"Amount allowance",path:"details.amount",signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3",tokenIndex:255,type:"amount"},"details.token.[]":{displayName:"Amount allowance",path:"details.token.[]",signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733",tokenIndex:0,type:"token"}}})}),it("success with calldata",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:p,challenge:"1234",fieldsValues:x,deviceModelId:f.STAX};d.mockResolvedValueOnce(Promise.resolve(t({messageInfo:{displayName:"Multisig transaction",filtersCount:4,signature:"304402206553ac5a2ce6bb17b94f3ec559fb037af0b742d62c001d8938aad709accd71ed022075ce87c3eb65e605f0ce0b2bc4bf960498bacf109a499807d1a7906d9c78c9c4"},calldatasInfos:{0:{calldataIndex:0,displayName:"Transaction",valueFlag:!0,calleeFlag:s.Present,chainIdFlag:!1,selectorFlag:!1,amountFlag:!0,spenderFlag:s.Present,signature:"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"}},filters:[{type:"raw",displayName:"Operation type",path:"operation",signature:"3045022100fb9f3e7bab8ac0cd9a5722389a19d1ebdd39d7a6da6e374724a46eebee6896bc022070e991bb022111ed448540511b7fa4f70d5e92b0a3866d75cfc9d3cf1cf75d9b"},{type:"calldata-value",displayName:"Transaction",path:"data",calldataIndex:0,signature:"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a"},{type:"calldata-callee",displayName:"Transaction",path:"to",calldataIndex:0,signature:"30440220796cc549e363c5bc9f9d5bda894cf4cda11f157519f673d2b4a8b3ce716a8fba0220663c888d764084072856fe654ff425bffe671c2550068c64be9eddd6c84178b8"},{type:"calldata-amount",displayName:"Transaction",path:"value",calldataIndex:0,signature:"3044022021601a55098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f"},{type:"calldata-chain-id",displayName:"Transaction",path:"chainId",calldataIndex:0,signature:"3044022021601a56098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f"},{type:"calldata-selector",displayName:"Transaction",path:"selector",calldataIndex:0,signature:"3044022021601a57098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f"},{type:"calldata-spender",displayName:"Transaction",path:"spender",calldataIndex:0,signature:"3044022021601a58098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f"}]})));const e=await c.load(a);expect(e).toEqual({type:"success",messageInfo:{displayName:"Multisig transaction",filtersCount:4,signature:"304402206553ac5a2ce6bb17b94f3ec559fb037af0b742d62c001d8938aad709accd71ed022075ce87c3eb65e605f0ce0b2bc4bf960498bacf109a499807d1a7906d9c78c9c4"},trustedNamesAddresses:{},tokens:{},calldatas:{0:{filter:{calldataIndex:0,displayName:"Transaction",valueFlag:!0,calleeFlag:s.Present,chainIdFlag:!1,selectorFlag:!1,amountFlag:!0,spenderFlag:s.Present,signature:"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"},subset:{chainId:4660,data:"0x6a76120200000000000000000000000023f8abfc2824c397ccb3da89ae772984107ddb99",from:"0x8ceb23fd6bc0add59e62ac25578270cff1b9f619",selector:"0x778899aa",to:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",value:4200000000000000n}}},proxy:void 0,filters:{data:{displayName:"Transaction",path:"data",signature:"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a",calldataIndex:0,type:"calldata-value"},operation:{displayName:"Operation type",path:"operation",signature:"3045022100fb9f3e7bab8ac0cd9a5722389a19d1ebdd39d7a6da6e374724a46eebee6896bc022070e991bb022111ed448540511b7fa4f70d5e92b0a3866d75cfc9d3cf1cf75d9b",type:"raw"},to:{displayName:"Transaction",path:"to",signature:"30440220796cc549e363c5bc9f9d5bda894cf4cda11f157519f673d2b4a8b3ce716a8fba0220663c888d764084072856fe654ff425bffe671c2550068c64be9eddd6c84178b8",calldataIndex:0,type:"calldata-callee"},value:{displayName:"Transaction",path:"value",signature:"3044022021601a55098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f",calldataIndex:0,type:"calldata-amount"},chainId:{displayName:"Transaction",path:"chainId",signature:"3044022021601a56098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f",calldataIndex:0,type:"calldata-chain-id"},selector:{displayName:"Transaction",path:"selector",signature:"3044022021601a57098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f",calldataIndex:0,type:"calldata-selector"},spender:{displayName:"Transaction",path:"spender",signature:"3044022021601a58098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f",calldataIndex:0,type:"calldata-spender"}}})}),it("success with several calldatas",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:p,challenge:"1234",fieldsValues:x,deviceModelId:f.STAX};d.mockResolvedValueOnce(Promise.resolve(t({messageInfo:{displayName:"Multisig transaction",filtersCount:4,signature:"304402206553ac5a2ce6bb17b94f3ec559fb037af0b742d62c001d8938aad709accd71ed022075ce87c3eb65e605f0ce0b2bc4bf960498bacf109a499807d1a7906d9c78c9c4"},calldatasInfos:{0:{calldataIndex:0,displayName:"Transaction",valueFlag:!0,calleeFlag:s.VerifyingContract,chainIdFlag:!1,selectorFlag:!1,amountFlag:!0,spenderFlag:s.VerifyingContract,signature:"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"},1:{calldataIndex:1,displayName:"Transaction 2",valueFlag:!1,calleeFlag:s.VerifyingContract,chainIdFlag:!0,selectorFlag:!0,amountFlag:!1,spenderFlag:s.VerifyingContract,signature:"3056122100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"}},filters:[{type:"raw",displayName:"Operation type",path:"operation",signature:"3045022100fb9f3e7bab8ac0cd9a5722389a19d1ebdd39d7a6da6e374724a46eebee6896bc022070e991bb022111ed448540511b7fa4f70d5e92b0a3866d75cfc9d3cf1cf75d9b"},{type:"calldata-value",displayName:"Transaction",path:"data",calldataIndex:0,signature:"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a"},{type:"calldata-selector",displayName:"Transaction",path:"selector",calldataIndex:1,signature:"3044022021601a57098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f"}]})));const e=await c.load(a);expect(e).toEqual({type:"success",messageInfo:{displayName:"Multisig transaction",filtersCount:4,signature:"304402206553ac5a2ce6bb17b94f3ec559fb037af0b742d62c001d8938aad709accd71ed022075ce87c3eb65e605f0ce0b2bc4bf960498bacf109a499807d1a7906d9c78c9c4"},trustedNamesAddresses:{},tokens:{},calldatas:{0:{filter:{calldataIndex:0,displayName:"Transaction",valueFlag:!0,calleeFlag:s.VerifyingContract,chainIdFlag:!1,selectorFlag:!1,amountFlag:!0,spenderFlag:s.VerifyingContract,signature:"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"},subset:{chainId:1,data:"0x6a76120200000000000000000000000023f8abfc2824c397ccb3da89ae772984107ddb99",from:"0x000000000022d473030f116ddee9f6b43ac78ba3",selector:"0x6a761202",to:"0x000000000022d473030f116ddee9f6b43ac78ba3",value:void 0}},1:{filter:{calldataIndex:1,displayName:"Transaction 2",valueFlag:!1,calleeFlag:s.VerifyingContract,chainIdFlag:!0,selectorFlag:!0,amountFlag:!1,spenderFlag:s.VerifyingContract,signature:"3056122100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"},subset:{chainId:1,data:"0x",from:"0x000000000022d473030f116ddee9f6b43ac78ba3",selector:"0x778899aa",to:"0x000000000022d473030f116ddee9f6b43ac78ba3",value:void 0}}},proxy:void 0,filters:{data:{displayName:"Transaction",path:"data",signature:"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a",calldataIndex:0,type:"calldata-value"},selector:{displayName:"Transaction",path:"selector",signature:"3044022021601a57098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f",calldataIndex:1,type:"calldata-selector"},operation:{displayName:"Operation type",path:"operation",signature:"3045022100fb9f3e7bab8ac0cd9a5722389a19d1ebdd39d7a6da6e374724a46eebee6896bc022070e991bb022111ed448540511b7fa4f70d5e92b0a3866d75cfc9d3cf1cf75d9b",type:"raw"}}})}),it("success with proxy",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:b,deviceModelId:f.STAX};r.mockResolvedValueOnce(t({implementationAddress:"0x987654321fedcba0",signedDescriptor:"0x123456789abcdef0"})),i.mockResolvedValue(void 0),d.mockResolvedValueOnce(Promise.resolve(l(new Error("error")))).mockResolvedValueOnce(Promise.resolve(t({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[]})));const e=await c.load(a);expect(d).toHaveBeenCalledTimes(2),expect(d).toHaveBeenLastCalledWith(expect.objectContaining({address:"0x987654321fedcba0",chainId:1})),expect(e).toEqual({type:"success",messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},trustedNamesAddresses:{},tokens:{},calldatas:{},proxy:{type:u.PROXY_INFO,payload:"0x123456789abcdef0",certificate:void 0},filters:{}})}),it("success with proxy and certificate",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:b,deviceModelId:f.STAX};r.mockResolvedValueOnce(t({implementationAddress:"0x987654321fedcba0",signedDescriptor:"0x123456789abcdef0"})),i.mockResolvedValue({keyUsageNumber:1,payload:new Uint8Array([1,2,3,4])}),d.mockResolvedValueOnce(Promise.resolve(l(new Error("error")))).mockResolvedValueOnce(Promise.resolve(t({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[]})));const e=await c.load(a);expect(d).toHaveBeenCalledTimes(2),expect(d).toHaveBeenLastCalledWith(expect.objectContaining({address:"0x987654321fedcba0",chainId:1})),expect(e).toEqual({type:"success",messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},trustedNamesAddresses:{},tokens:{},calldatas:{},proxy:{type:u.PROXY_INFO,payload:"0x123456789abcdef0",certificate:{keyUsageNumber:1,payload:new Uint8Array([1,2,3,4])}},filters:{}})}),it("should return an error if filters are unavailable",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:b,deviceModelId:f.STAX};d.mockResolvedValueOnce(Promise.resolve(l(new Error("error"))));const e=await c.load(a);expect(d).toHaveBeenCalledTimes(1),expect(e).toEqual({type:"error",error:new Error("error")})}),it("should return an error if filters are unavailable in the proxy",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:b,deviceModelId:f.STAX};r.mockResolvedValueOnce(t({delegateAddresses:["0x987654321fedcba0"],signedDescriptor:"0x123456789abcdef0"})),i.mockResolvedValue(void 0),d.mockResolvedValueOnce(Promise.resolve(l(new Error("error")))).mockResolvedValueOnce(Promise.resolve(l(new Error("error"))));const e=await c.load(a);expect(d).toHaveBeenCalledTimes(2),expect(e).toEqual({type:"error",error:new Error("error")})}),it("success with a trusted name",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:b,deviceModelId:f.STAX};d.mockResolvedValueOnce(Promise.resolve(t({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[{type:"trusted-name",displayName:"Amount allowance",path:"details.token.[]",signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733",types:["contract"],sources:["local","ens"],typesAndSourcesPayload:"010203010002"}]})));const e=await c.load(a);expect(e).toEqual({type:"success",messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},trustedNamesAddresses:{"details.token.[]":"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"},tokens:{},calldatas:{},filters:{"details.token.[]":{displayName:"Amount allowance",path:"details.token.[]",signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733",types:["contract"],sources:["local","ens"],typesAndSourcesPayload:"010203010002",type:"trusted-name"}}})}),it("success with unavailable tokens",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:b,deviceModelId:f.STAX};d.mockResolvedValueOnce(Promise.resolve(t({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[{type:"token",displayName:"Amount allowance",path:"details.token.[]",tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"}]}))),vi.spyOn(o,"getTokenInfosPayload").mockImplementation(()=>Promise.resolve(l(new Error("token error"))));const e=await c.load(a);expect(e).toEqual({type:"success",messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},trustedNamesAddresses:{},tokens:{},calldatas:{},filters:{"details.token.[]":{displayName:"Amount allowance",path:"details.token.[]",signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733",tokenIndex:0,type:"token"}}})}),it("success with several identic tokens",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:[{path:"details.token.[]",value:Uint8Array.from([124,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,25])},...b],deviceModelId:f.STAX};d.mockResolvedValueOnce(Promise.resolve(t({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[{type:"token",displayName:"Amount allowance",path:"details.token.[]",tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"}]}))),vi.spyOn(o,"getTokenInfosPayload").mockImplementation(()=>Promise.resolve(l(new Error("token error"))));const e=await c.load(a);expect(o.getTokenInfosPayload).toHaveBeenCalledWith({address:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",chainId:1}),expect(e.type).toEqual("success")}),it("success with several different tokens",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:[{path:"details.token.[]",value:Uint8Array.from([124,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,255])},...b],deviceModelId:f.STAX};d.mockResolvedValueOnce(Promise.resolve(t({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[{type:"token",displayName:"Amount allowance",path:"details.token.[]",tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"}]})));const e=await c.load(a);expect(o.getTokenInfosPayload).not.toHaveBeenCalledWith({address:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f6ff",chainId:1}),expect(o.getTokenInfosPayload).not.toHaveBeenCalledWith({address:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",chainId:1}),expect(e.type).toEqual("success")}),it("should ignore the token if value is not found",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:b,deviceModelId:f.STAX};d.mockResolvedValueOnce(Promise.resolve(t({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[{type:"token",displayName:"Amount allowance",path:"details.badtoken",tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"}]})));const e=await c.load(a);expect(e.type).toEqual("success"),e.type==="success"&&(expect(e.filters["details.badtoken"]?.displayName).toEqual("Amount allowance"),expect(e.tokens).toEqual({}))})})});
|
|
2
2
|
//# sourceMappingURL=DefaultTypedDataContextLoader.test.js.map
|