@ledgerhq/device-signer-kit-ethereum 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/api/app-binder/GetConfigCommandTypes.js +2 -0
- package/lib/cjs/api/app-binder/GetConfigCommandTypes.js.map +7 -0
- package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js +1 -1
- package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js.map +1 -1
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/internal/app-binder/EthAppBinder.test.js +1 -1
- package/lib/cjs/internal/app-binder/EthAppBinder.test.js.map +2 -2
- package/lib/cjs/internal/app-binder/command/GetAppConfigurationCommand.js +2 -0
- package/lib/cjs/internal/app-binder/command/GetAppConfigurationCommand.js.map +7 -0
- package/lib/cjs/internal/app-binder/command/GetAppConfigurationCommand.test.js +2 -0
- package/lib/cjs/internal/app-binder/command/GetAppConfigurationCommand.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/command/ProvideWeb3CheckCommand.js +2 -0
- package/lib/cjs/internal/app-binder/command/ProvideWeb3CheckCommand.js.map +7 -0
- package/lib/cjs/internal/app-binder/command/ProvideWeb3CheckCommand.test.js +2 -0
- package/lib/cjs/internal/app-binder/command/ProvideWeb3CheckCommand.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/command/Web3CheckOptInCommand.js +2 -0
- package/lib/cjs/internal/app-binder/command/Web3CheckOptInCommand.js.map +7 -0
- package/lib/cjs/internal/app-binder/command/Web3CheckOptInCommand.test.js +2 -0
- package/lib/cjs/internal/app-binder/command/Web3CheckOptInCommand.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js.map +3 -3
- package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.js.map +2 -2
- package/lib/cjs/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.test.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.test.js.map +2 -2
- package/lib/cjs/internal/app-binder/device-action/__test-utils__/makeInternalApi.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/__test-utils__/makeInternalApi.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/BuildEIP712ContextTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/BuildEIP712ContextTask.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/BuildEIP712ContextTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/BuildEIP712ContextTask.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.test.js.map +2 -2
- package/lib/cjs/internal/app-binder/task/GetWeb3CheckTask.js +2 -0
- package/lib/cjs/internal/app-binder/task/GetWeb3CheckTask.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/GetWeb3CheckTask.test.js +2 -0
- package/lib/cjs/internal/app-binder/task/GetWeb3CheckTask.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.test.js.map +2 -2
- package/lib/cjs/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/ProvideTransactionGenericContextTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/ProvideTransactionGenericContextTask.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/ProvideTransactionGenericContextTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/ProvideTransactionGenericContextTask.test.js.map +2 -2
- package/lib/cjs/package.json +3 -3
- package/lib/esm/api/app-binder/GetConfigCommandTypes.js +1 -0
- package/lib/esm/api/app-binder/GetConfigCommandTypes.js.map +7 -0
- package/lib/esm/internal/app-binder/EthAppBinder.test.js +1 -1
- package/lib/esm/internal/app-binder/EthAppBinder.test.js.map +2 -2
- package/lib/esm/internal/app-binder/command/GetAppConfigurationCommand.js +2 -0
- package/lib/esm/internal/app-binder/command/GetAppConfigurationCommand.js.map +7 -0
- package/lib/esm/internal/app-binder/command/GetAppConfigurationCommand.test.js +2 -0
- package/lib/esm/internal/app-binder/command/GetAppConfigurationCommand.test.js.map +7 -0
- package/lib/esm/internal/app-binder/command/ProvideWeb3CheckCommand.js +2 -0
- package/lib/esm/internal/app-binder/command/ProvideWeb3CheckCommand.js.map +7 -0
- package/lib/esm/internal/app-binder/command/ProvideWeb3CheckCommand.test.js +2 -0
- package/lib/esm/internal/app-binder/command/ProvideWeb3CheckCommand.test.js.map +7 -0
- package/lib/esm/internal/app-binder/command/Web3CheckOptInCommand.js +2 -0
- package/lib/esm/internal/app-binder/command/Web3CheckOptInCommand.js.map +7 -0
- package/lib/esm/internal/app-binder/command/Web3CheckOptInCommand.test.js +2 -0
- package/lib/esm/internal/app-binder/command/Web3CheckOptInCommand.test.js.map +7 -0
- package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js +1 -1
- package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js.map +3 -3
- package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js +1 -1
- package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js.map +3 -3
- package/lib/esm/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.js +1 -1
- package/lib/esm/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.js.map +2 -2
- package/lib/esm/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.test.js +1 -1
- package/lib/esm/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.test.js.map +2 -2
- package/lib/esm/internal/app-binder/device-action/__test-utils__/makeInternalApi.js +1 -1
- package/lib/esm/internal/app-binder/device-action/__test-utils__/makeInternalApi.js.map +3 -3
- package/lib/esm/internal/app-binder/task/BuildEIP712ContextTask.js +1 -1
- package/lib/esm/internal/app-binder/task/BuildEIP712ContextTask.js.map +3 -3
- package/lib/esm/internal/app-binder/task/BuildEIP712ContextTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/BuildEIP712ContextTask.test.js.map +3 -3
- package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.test.js.map +2 -2
- package/lib/esm/internal/app-binder/task/GetWeb3CheckTask.js +2 -0
- package/lib/esm/internal/app-binder/task/GetWeb3CheckTask.js.map +7 -0
- package/lib/esm/internal/app-binder/task/GetWeb3CheckTask.test.js +2 -0
- package/lib/esm/internal/app-binder/task/GetWeb3CheckTask.test.js.map +7 -0
- package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.js +1 -1
- package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.js.map +3 -3
- package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.test.js.map +3 -3
- package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.js +1 -1
- package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.js.map +3 -3
- package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.test.js.map +2 -2
- package/lib/esm/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.js +1 -1
- package/lib/esm/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.js.map +3 -3
- package/lib/esm/internal/app-binder/task/ProvideTransactionGenericContextTask.js +1 -1
- package/lib/esm/internal/app-binder/task/ProvideTransactionGenericContextTask.js.map +3 -3
- package/lib/esm/internal/app-binder/task/ProvideTransactionGenericContextTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/ProvideTransactionGenericContextTask.test.js.map +2 -2
- package/lib/esm/package.json +3 -3
- package/lib/types/api/app-binder/GetConfigCommandTypes.d.ts +7 -0
- package/lib/types/api/app-binder/GetConfigCommandTypes.d.ts.map +1 -0
- package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts +2 -1
- package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/GetAppConfigurationCommand.d.ts +10 -0
- package/lib/types/internal/app-binder/command/GetAppConfigurationCommand.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/GetAppConfigurationCommand.test.d.ts +2 -0
- package/lib/types/internal/app-binder/command/GetAppConfigurationCommand.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/ProvideWeb3CheckCommand.d.ts +17 -0
- package/lib/types/internal/app-binder/command/ProvideWeb3CheckCommand.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/ProvideWeb3CheckCommand.test.d.ts +2 -0
- package/lib/types/internal/app-binder/command/ProvideWeb3CheckCommand.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/Web3CheckOptInCommand.d.ts +15 -0
- package/lib/types/internal/app-binder/command/Web3CheckOptInCommand.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/Web3CheckOptInCommand.test.d.ts +2 -0
- package/lib/types/internal/app-binder/command/Web3CheckOptInCommand.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.d.ts +13 -1
- package/lib/types/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.d.ts.map +1 -1
- package/lib/types/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.d.ts +1 -0
- package/lib/types/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.d.ts.map +1 -1
- package/lib/types/internal/app-binder/device-action/__test-utils__/makeInternalApi.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/BuildEIP712ContextTask.d.ts +4 -1
- package/lib/types/internal/app-binder/task/BuildEIP712ContextTask.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/GetWeb3CheckTask.d.ts +31 -0
- package/lib/types/internal/app-binder/task/GetWeb3CheckTask.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/GetWeb3CheckTask.test.d.ts +2 -0
- package/lib/types/internal/app-binder/task/GetWeb3CheckTask.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/ProvideEIP712ContextTask.d.ts +2 -0
- package/lib/types/internal/app-binder/task/ProvideEIP712ContextTask.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/ProvideTransactionContextTask.d.ts +3 -2
- package/lib/types/internal/app-binder/task/ProvideTransactionContextTask.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/ProvideTransactionGenericContextTask.d.ts +1 -0
- package/lib/types/internal/app-binder/task/ProvideTransactionGenericContextTask.d.ts.map +1 -1
- package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
- package/package.json +10 -10
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/task/ProvideEIP712ContextTask.test.ts"],
|
|
4
|
-
"sourcesContent": ["import { type TypedDataClearSignContextSuccess } from \"@ledgerhq/context-module\";\nimport {\n CommandResultFactory,\n hexaStringToBuffer,\n UnknownDeviceExchangeError,\n} from \"@ledgerhq/device-management-kit\";\nimport { Just, Nothing } from \"purify-ts\";\n\nimport { ProvideTokenInformationCommand } from \"@internal/app-binder/command/ProvideTokenInformationCommand\";\nimport {\n Eip712FilterType,\n SendEIP712FilteringCommand,\n} from \"@internal/app-binder/command/SendEIP712FilteringCommand\";\nimport {\n SendEIP712StructDefinitionCommand,\n StructDefinitionCommand,\n} from \"@internal/app-binder/command/SendEIP712StructDefinitionCommand\";\nimport {\n SendEIP712StructImplemCommand,\n StructImplemType,\n} from \"@internal/app-binder/command/SendEIP712StructImplemCommand\";\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\nimport {\n type FieldType,\n PrimitiveType,\n StructType,\n TypedDataValueArray,\n TypedDataValueField,\n TypedDataValueRoot,\n} from \"@internal/typed-data/model/Types\";\n\nimport {\n ProvideEIP712ContextTask,\n type ProvideEIP712ContextTaskArgs,\n} from \"./ProvideEIP712ContextTask\";\n\ndescribe(\"ProvideEIP712ContextTask\", () => {\n const apiMock = makeDeviceActionInternalApiMock();\n\n const TEST_TYPES = {\n EIP712Domain: {\n name: new PrimitiveType(\"string\", \"string\", Nothing),\n chainId: new PrimitiveType(\"uint256\", \"uint\", Just(32)),\n verifyingContract: new PrimitiveType(\"address\", \"address\", Nothing),\n },\n PermitSingle: {\n details: new StructType(\"PermitDetails\"),\n spender: new PrimitiveType(\"address\", \"address\", Nothing),\n sigDeadline: new PrimitiveType(\"uint256\", \"uint\", Just(32)),\n },\n PermitDetails: {\n token: new PrimitiveType(\"address\", \"address\", Nothing),\n amount: new PrimitiveType(\"uint160\", \"uint\", Just(20)),\n expiration: new PrimitiveType(\"uint48\", \"uint\", Just(6)),\n nonce: new PrimitiveType(\"uint48\", \"uint\", Just(6)),\n },\n };\n const TEST_DOMAIN_VALUES = [\n {\n path: \"\",\n type: \"\",\n value: new TypedDataValueRoot(\"EIP712Domain\"),\n },\n {\n path: \"name\",\n type: \"string\",\n value: new TypedDataValueField(new TextEncoder().encode(\"Permit2\")),\n },\n {\n path: \"chainId\",\n type: \"uint256\",\n value: new TypedDataValueField(Uint8Array.from([137])),\n },\n {\n path: \"verifyingContract\",\n type: \"address\",\n value: new TypedDataValueField(\n hexaStringToBuffer(\"0x000000000022d473030f116ddee9f6b43ac78ba3\")!,\n ),\n },\n ];\n const TEST_MESSAGE_VALUES = [\n {\n path: \"\",\n type: \"\",\n value: new TypedDataValueRoot(\"PermitSingle\"),\n },\n {\n path: \"details.token\",\n type: \"address\",\n value: new TypedDataValueField(\n hexaStringToBuffer(\"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\")!,\n ),\n },\n {\n path: \"details.amount\",\n type: \"uint160\",\n value: new TypedDataValueField(Uint8Array.from([0x12])),\n },\n {\n path: \"details.expiration\",\n type: \"uint48\",\n value: new TypedDataValueField(Uint8Array.from([0x12])),\n },\n {\n path: \"details.nonce\",\n type: \"uint48\",\n value: new TypedDataValueField(Uint8Array.from([0x00])),\n },\n {\n path: \"spender\",\n type: \"address\",\n value: new TypedDataValueField(\n hexaStringToBuffer(\"0xec7be89e9d109e7e3fec59c222cf297125fefda2\")!,\n ),\n },\n {\n path: \"sigDeadline\",\n type: \"uint256\",\n value: new TypedDataValueField(Uint8Array.from([0x12])),\n },\n ];\n const TEST_CLEAR_SIGN_CONTEXT: TypedDataClearSignContextSuccess = {\n type: \"success\",\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 4,\n signature:\n \"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3\",\n },\n tokens: {\n 0: \"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\",\n 255: \"payload-0x000000000022d473030f116ddee9f6b43ac78ba3\",\n },\n filters: {\n \"details.amount\": {\n displayName: \"Amount allowance\",\n path: \"details.amount\",\n signature:\n \"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n tokenIndex: 255,\n type: \"amount\",\n },\n \"details.expiration\": {\n displayName: \"Approval expire\",\n path: \"details.expiration\",\n signature:\n \"3044022056b3381e4540629ad73bc434ec49d80523234b82f62340fbb77157fb0eb21a680220459fe9cf6ca309f9c7dfc6d4711fea1848dba661563c57f77b3c2dc480b3a63b\",\n type: \"datetime\",\n },\n \"details.token\": {\n displayName: \"Amount allowance\",\n path: \"details.token\",\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n tokenIndex: 0,\n type: \"token\",\n },\n spender: {\n displayName: \"Approve to spender\",\n path: \"spender\",\n signature:\n \"3044022033e5713d9cb9bc375b56a9fb53b736c81ea3c4ac5cfb2d3ca7f8b8f0558fe2430220543ca4fef6d6f725f29e343f167fe9dd582aa856ecb5797259050eb990a1befb\",\n type: \"raw\",\n },\n },\n };\n\n const ADDRESS = new PrimitiveType(\"address\", \"address\", Nothing);\n const STRING = new PrimitiveType(\"string\", \"string\", Nothing);\n const UINT256 = new PrimitiveType(\"uint256\", \"uint\", Just(32));\n const UINT160 = new PrimitiveType(\"uint160\", \"uint\", Just(20));\n const UINT48 = new PrimitiveType(\"uint48\", \"uint\", Just(6));\n const CUSTOM = (name: string) => new StructType(name);\n\n const sendStructDefName = (name: string) =>\n new SendEIP712StructDefinitionCommand({\n command: StructDefinitionCommand.Name,\n name,\n });\n const sendStructDefField = (name: string, type: FieldType) =>\n new SendEIP712StructDefinitionCommand({\n command: StructDefinitionCommand.Field,\n name,\n type,\n });\n const sendStructImplRoot = (value: string) =>\n new SendEIP712StructImplemCommand({\n type: StructImplemType.ROOT,\n value,\n });\n const sendStructImplArray = (value: number) =>\n new SendEIP712StructImplemCommand({\n type: StructImplemType.ARRAY,\n value,\n });\n const sendStructImplField = (data: Uint8Array) =>\n new SendEIP712StructImplemCommand({\n type: StructImplemType.FIELD,\n value: {\n data,\n isLastChunk: true,\n },\n });\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n it(\"Send context with no clear signing context\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Nothing,\n domainHash: \"0x\",\n messageHash: \"0x\",\n };\n // WHEN\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: undefined }),\n );\n await new ProvideEIP712ContextTask(apiMock, args).run();\n\n // THEN\n expect(apiMock.sendCommand.mock.calls).toHaveLength(24);\n // Send Struct definitions\n expect(apiMock.sendCommand.mock.calls[0]![0]).toStrictEqual(\n sendStructDefName(\"EIP712Domain\"),\n );\n expect(apiMock.sendCommand.mock.calls[1]![0]).toStrictEqual(\n sendStructDefField(\"name\", STRING),\n );\n expect(apiMock.sendCommand.mock.calls[2]![0]).toStrictEqual(\n sendStructDefField(\"chainId\", UINT256),\n );\n expect(apiMock.sendCommand.mock.calls[3]![0]).toStrictEqual(\n sendStructDefField(\"verifyingContract\", ADDRESS),\n );\n expect(apiMock.sendCommand.mock.calls[4]![0]).toStrictEqual(\n sendStructDefName(\"PermitDetails\"),\n );\n expect(apiMock.sendCommand.mock.calls[5]![0]).toStrictEqual(\n sendStructDefField(\"token\", ADDRESS),\n );\n expect(apiMock.sendCommand.mock.calls[6]![0]).toStrictEqual(\n sendStructDefField(\"amount\", UINT160),\n );\n expect(apiMock.sendCommand.mock.calls[7]![0]).toStrictEqual(\n sendStructDefField(\"expiration\", UINT48),\n );\n expect(apiMock.sendCommand.mock.calls[8]![0]).toStrictEqual(\n sendStructDefField(\"nonce\", UINT48),\n );\n expect(apiMock.sendCommand.mock.calls[9]![0]).toStrictEqual(\n sendStructDefName(\"PermitSingle\"),\n );\n expect(apiMock.sendCommand.mock.calls[10]![0]).toStrictEqual(\n sendStructDefField(\"details\", CUSTOM(\"PermitDetails\")),\n );\n expect(apiMock.sendCommand.mock.calls[11]![0]).toStrictEqual(\n sendStructDefField(\"spender\", ADDRESS),\n );\n expect(apiMock.sendCommand.mock.calls[12]![0]).toStrictEqual(\n sendStructDefField(\"sigDeadline\", UINT256),\n );\n // Send the domain values\n expect(apiMock.sendCommand.mock.calls[13]![0]).toStrictEqual(\n sendStructImplRoot(\"EIP712Domain\"),\n );\n expect(apiMock.sendCommand.mock.calls[14]![0]).toStrictEqual(\n sendStructImplField(\n Uint8Array.from([0x00, 0x07, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x32]),\n ),\n );\n expect(apiMock.sendCommand.mock.calls[15]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x89])),\n );\n expect(apiMock.sendCommand.mock.calls[16]![0]).toStrictEqual(\n sendStructImplField(\n Uint8Array.from([\n 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0xd4, 0x73, 0x03,\n 0x0f, 0x11, 0x6d, 0xde, 0xe9, 0xf6, 0xb4, 0x3a, 0xc7, 0x8b, 0xa3,\n ]),\n ),\n );\n // Send the message values\n expect(apiMock.sendCommand.mock.calls[17]![0]).toStrictEqual(\n sendStructImplRoot(\"PermitSingle\"),\n );\n expect(apiMock.sendCommand.mock.calls[18]![0]).toStrictEqual(\n sendStructImplField(\n Uint8Array.from([\n 0x00, 0x14, 0x7c, 0xeb, 0x23, 0xfd, 0x6b, 0xc0, 0xad, 0xd5, 0x9e,\n 0x62, 0xac, 0x25, 0x57, 0x82, 0x70, 0xcf, 0xf1, 0xb9, 0xf6, 0x19,\n ]),\n ),\n );\n expect(apiMock.sendCommand.mock.calls[19]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x12])),\n );\n expect(apiMock.sendCommand.mock.calls[20]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x12])),\n );\n expect(apiMock.sendCommand.mock.calls[21]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x00])),\n );\n expect(apiMock.sendCommand.mock.calls[22]![0]).toStrictEqual(\n sendStructImplField(\n Uint8Array.from([\n 0x00, 0x14, 0xec, 0x7b, 0xe8, 0x9e, 0x9d, 0x10, 0x9e, 0x7e, 0x3f,\n 0xec, 0x59, 0xc2, 0x22, 0xcf, 0x29, 0x71, 0x25, 0xfe, 0xfd, 0xa2,\n ]),\n ),\n );\n expect(apiMock.sendCommand.mock.calls[23]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x12])),\n );\n });\n\n it(\"Send context with clear signing\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Just(TEST_CLEAR_SIGN_CONTEXT),\n domainHash: \"0x\",\n messageHash: \"0x\",\n };\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: { tokenIndex: 4 } })) // First token provided\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: { tokenIndex: 5 } })); // Second token provided\n // WHEN\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: undefined }),\n );\n await new ProvideEIP712ContextTask(apiMock, args).run();\n\n // THEN\n expect(apiMock.sendCommand.mock.calls).toHaveLength(32);\n // Send Struct definitions\n expect(apiMock.sendCommand.mock.calls[0]![0]).toStrictEqual(\n sendStructDefName(\"EIP712Domain\"),\n );\n expect(apiMock.sendCommand.mock.calls[1]![0]).toStrictEqual(\n sendStructDefField(\"name\", STRING),\n );\n expect(apiMock.sendCommand.mock.calls[2]![0]).toStrictEqual(\n sendStructDefField(\"chainId\", UINT256),\n );\n expect(apiMock.sendCommand.mock.calls[3]![0]).toStrictEqual(\n sendStructDefField(\"verifyingContract\", ADDRESS),\n );\n expect(apiMock.sendCommand.mock.calls[4]![0]).toStrictEqual(\n sendStructDefName(\"PermitDetails\"),\n );\n expect(apiMock.sendCommand.mock.calls[5]![0]).toStrictEqual(\n sendStructDefField(\"token\", ADDRESS),\n );\n expect(apiMock.sendCommand.mock.calls[6]![0]).toStrictEqual(\n sendStructDefField(\"amount\", UINT160),\n );\n expect(apiMock.sendCommand.mock.calls[7]![0]).toStrictEqual(\n sendStructDefField(\"expiration\", UINT48),\n );\n expect(apiMock.sendCommand.mock.calls[8]![0]).toStrictEqual(\n sendStructDefField(\"nonce\", UINT48),\n );\n expect(apiMock.sendCommand.mock.calls[9]![0]).toStrictEqual(\n sendStructDefName(\"PermitSingle\"),\n );\n expect(apiMock.sendCommand.mock.calls[10]![0]).toStrictEqual(\n sendStructDefField(\"details\", CUSTOM(\"PermitDetails\")),\n );\n expect(apiMock.sendCommand.mock.calls[11]![0]).toStrictEqual(\n sendStructDefField(\"spender\", ADDRESS),\n );\n expect(apiMock.sendCommand.mock.calls[12]![0]).toStrictEqual(\n sendStructDefField(\"sigDeadline\", UINT256),\n );\n // Activate the filtering\n expect(apiMock.sendCommand.mock.calls[13]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({ type: Eip712FilterType.Activation }),\n );\n // Send the domain values\n expect(apiMock.sendCommand.mock.calls[14]![0]).toStrictEqual(\n sendStructImplRoot(\"EIP712Domain\"),\n );\n expect(apiMock.sendCommand.mock.calls[15]![0]).toStrictEqual(\n sendStructImplField(\n Uint8Array.from([0x00, 0x07, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x32]),\n ),\n );\n expect(apiMock.sendCommand.mock.calls[16]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x89])),\n );\n expect(apiMock.sendCommand.mock.calls[17]![0]).toStrictEqual(\n sendStructImplField(\n Uint8Array.from([\n 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0xd4, 0x73, 0x03,\n 0x0f, 0x11, 0x6d, 0xde, 0xe9, 0xf6, 0xb4, 0x3a, 0xc7, 0x8b, 0xa3,\n ]),\n ),\n );\n // Send the message information filter\n expect(apiMock.sendCommand.mock.calls[18]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.MessageInfo,\n displayName: \"Permit2\",\n filtersCount: 4,\n signature:\n \"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3\",\n }),\n );\n // Send the message values with corresponding filters\n expect(apiMock.sendCommand.mock.calls[19]![0]).toStrictEqual(\n sendStructImplRoot(\"PermitSingle\"),\n );\n expect(apiMock.sendCommand.mock.calls[20]![0]).toStrictEqual(\n new ProvideTokenInformationCommand({\n payload: \"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\",\n }),\n );\n expect(apiMock.sendCommand.mock.calls[21]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Token,\n discarded: false,\n tokenIndex: 4,\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n }),\n );\n expect(apiMock.sendCommand.mock.calls[22]![0]).toStrictEqual(\n sendStructImplField(\n Uint8Array.from([\n 0x00, 0x14, 0x7c, 0xeb, 0x23, 0xfd, 0x6b, 0xc0, 0xad, 0xd5, 0x9e,\n 0x62, 0xac, 0x25, 0x57, 0x82, 0x70, 0xcf, 0xf1, 0xb9, 0xf6, 0x19,\n ]),\n ),\n );\n expect(apiMock.sendCommand.mock.calls[23]![0]).toStrictEqual(\n new ProvideTokenInformationCommand({\n payload: \"payload-0x000000000022d473030f116ddee9f6b43ac78ba3\",\n }),\n );\n expect(apiMock.sendCommand.mock.calls[24]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Amount,\n discarded: false,\n displayName: \"Amount allowance\",\n tokenIndex: 255,\n signature:\n \"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n }),\n );\n expect(apiMock.sendCommand.mock.calls[25]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x12])),\n );\n expect(apiMock.sendCommand.mock.calls[26]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Datetime,\n discarded: false,\n displayName: \"Approval expire\",\n signature:\n \"3044022056b3381e4540629ad73bc434ec49d80523234b82f62340fbb77157fb0eb21a680220459fe9cf6ca309f9c7dfc6d4711fea1848dba661563c57f77b3c2dc480b3a63b\",\n }),\n );\n expect(apiMock.sendCommand.mock.calls[27]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x12])),\n );\n expect(apiMock.sendCommand.mock.calls[28]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x00])),\n );\n expect(apiMock.sendCommand.mock.calls[29]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Raw,\n discarded: false,\n displayName: \"Approve to spender\",\n signature:\n \"3044022033e5713d9cb9bc375b56a9fb53b736c81ea3c4ac5cfb2d3ca7f8b8f0558fe2430220543ca4fef6d6f725f29e343f167fe9dd582aa856ecb5797259050eb990a1befb\",\n }),\n );\n expect(apiMock.sendCommand.mock.calls[30]![0]).toStrictEqual(\n sendStructImplField(\n Uint8Array.from([\n 0x00, 0x14, 0xec, 0x7b, 0xe8, 0x9e, 0x9d, 0x10, 0x9e, 0x7e, 0x3f,\n 0xec, 0x59, 0xc2, 0x22, 0xcf, 0x29, 0x71, 0x25, 0xfe, 0xfd, 0xa2,\n ]),\n ),\n );\n expect(apiMock.sendCommand.mock.calls[31]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x12])),\n );\n });\n\n it(\"Both tokens unavailable\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Just({\n type: \"success\",\n messageInfo: TEST_CLEAR_SIGN_CONTEXT.messageInfo,\n filters: TEST_CLEAR_SIGN_CONTEXT.filters,\n tokens: {},\n }),\n domainHash: \"0x\",\n messageHash: \"0x\",\n };\n\n // WHEN\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: undefined }),\n );\n await new ProvideEIP712ContextTask(apiMock, args).run();\n\n // THEN\n expect(apiMock.sendCommand).not.toHaveBeenCalledWith(\n new ProvideTokenInformationCommand({\n payload: \"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\",\n }),\n );\n expect(apiMock.sendCommand).not.toHaveBeenCalledWith(\n new ProvideTokenInformationCommand({\n payload: \"payload-0x000000000022d473030f116ddee9f6b43ac78ba3\",\n }),\n );\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Token,\n discarded: false,\n tokenIndex: 0,\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n }),\n );\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Amount,\n discarded: false,\n displayName: \"Amount allowance\",\n tokenIndex: 1,\n signature:\n \"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n }),\n );\n });\n\n it(\"First token unavailable\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Just({\n type: \"success\",\n messageInfo: TEST_CLEAR_SIGN_CONTEXT.messageInfo,\n filters: TEST_CLEAR_SIGN_CONTEXT.filters,\n tokens: { 255: \"payload-0x000000000022d473030f116ddee9f6b43ac78ba3\" },\n }),\n domainHash: \"0x\",\n messageHash: \"0x\",\n };\n\n // WHEN\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: { tokenIndex: 4 } }),\n );\n await new ProvideEIP712ContextTask(apiMock, args).run();\n\n // THEN\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Token,\n discarded: false,\n tokenIndex: 0,\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n }),\n );\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Amount,\n discarded: false,\n displayName: \"Amount allowance\",\n tokenIndex: 255,\n signature:\n \"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n }),\n );\n });\n\n it(\"Second token unavailable\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Just({\n type: \"success\",\n messageInfo: TEST_CLEAR_SIGN_CONTEXT.messageInfo,\n filters: TEST_CLEAR_SIGN_CONTEXT.filters,\n tokens: { 0: \"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\" },\n }),\n domainHash: \"0x\",\n messageHash: \"0x\",\n };\n\n // WHEN\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: { tokenIndex: 4 } }),\n );\n await new ProvideEIP712ContextTask(apiMock, args).run();\n\n // THEN\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Token,\n discarded: false,\n tokenIndex: 4,\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n }),\n );\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Amount,\n discarded: false,\n displayName: \"Amount allowance\",\n tokenIndex: 0,\n signature:\n \"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n }),\n );\n });\n\n it(\"Error when providing tokens\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Just(TEST_CLEAR_SIGN_CONTEXT),\n domainHash: \"0x\",\n messageHash: \"0x\",\n };\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({\n error: new UnknownDeviceExchangeError(\"error\"),\n }),\n );\n // WHEN\n const promise = new ProvideEIP712ContextTask(apiMock, args).run();\n\n // THEN\n await expect(promise).resolves.toStrictEqual(\n CommandResultFactory({\n error: new UnknownDeviceExchangeError(\"error\"),\n }),\n );\n });\n\n it(\"Error when sending struct definitions\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Just(TEST_CLEAR_SIGN_CONTEXT),\n domainHash: \"0x\",\n messageHash: \"0x\",\n };\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: { tokenIndex: 4 } }))\n .mockResolvedValueOnce(CommandResultFactory({ data: { tokenIndex: 5 } }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(\n CommandResultFactory({\n error: new UnknownDeviceExchangeError(\"error\"),\n }),\n );\n // WHEN\n const promise = new ProvideEIP712ContextTask(apiMock, args).run();\n\n // THEN\n await expect(promise).resolves.toStrictEqual(\n CommandResultFactory({ error: new UnknownDeviceExchangeError(\"error\") }),\n );\n });\n\n it(\"Error when sending struct implementations\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Nothing,\n domainHash: \"0x\",\n messageHash: \"0x\",\n };\n // WHEN\n apiMock.sendCommand\n // Struct definitions\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n // Struct implementations\n .mockResolvedValueOnce(\n CommandResultFactory({\n error: new UnknownDeviceExchangeError(\"error\"),\n }),\n )\n .mockResolvedValue(CommandResultFactory({ data: undefined }));\n const promise = new ProvideEIP712ContextTask(apiMock, args).run();\n\n // THEN\n await expect(promise).resolves.toStrictEqual(\n CommandResultFactory({ error: new UnknownDeviceExchangeError(\"error\") }),\n );\n });\n\n it(\"Send struct array\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n domainHash: \"0x\",\n messageHash: \"0x\",\n types: {},\n domain: [],\n message: [\n // Array containing an element\n {\n path: \"spenders\",\n type: \"address[]\",\n value: new TypedDataValueArray(1),\n },\n {\n path: \"spenders.[]\",\n type: \"address\",\n value: new TypedDataValueField(\n hexaStringToBuffer(\"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\")!,\n ),\n },\n // Empty array\n {\n path: \"beneficiaries\",\n type: \"address[]\",\n value: new TypedDataValueArray(0),\n },\n ],\n clearSignContext: Just({\n type: \"success\",\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 2,\n signature: \"sig\",\n },\n tokens: {},\n filters: {\n \"spenders.[]\": {\n displayName: \"Spender\",\n path: \"spenders.[]\",\n signature: \"sig\",\n type: \"raw\",\n },\n \"beneficiaries.[]\": {\n displayName: \"Beneficiary\",\n path: \"beneficiaries.[]\",\n signature: \"sig\",\n type: \"raw\",\n },\n },\n }),\n };\n // WHEN\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: undefined }),\n );\n await new ProvideEIP712ContextTask(apiMock, args).run();\n\n // THEN\n // Activate the filtering\n expect(apiMock.sendCommand.mock.calls[0]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({ type: Eip712FilterType.Activation }),\n );\n // Send the message information filter\n expect(apiMock.sendCommand.mock.calls[1]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.MessageInfo,\n displayName: \"Permit2\",\n filtersCount: 2,\n signature: \"sig\",\n }),\n );\n // Send first array containing 1 element\n expect(apiMock.sendCommand.mock.calls[2]![0]).toStrictEqual(\n sendStructImplArray(1),\n );\n expect(apiMock.sendCommand.mock.calls[3]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Raw,\n discarded: false,\n displayName: \"Spender\",\n signature: \"sig\",\n }),\n );\n expect(apiMock.sendCommand.mock.calls[4]![0]).toStrictEqual(\n sendStructImplField(\n Uint8Array.from([\n 0x00, 0x14, 0x7c, 0xeb, 0x23, 0xfd, 0x6b, 0xc0, 0xad, 0xd5, 0x9e,\n 0x62, 0xac, 0x25, 0x57, 0x82, 0x70, 0xcf, 0xf1, 0xb9, 0xf6, 0x19,\n ]),\n ),\n );\n // Send second empty array, with discarded filter\n expect(apiMock.sendCommand.mock.calls[5]![0]).toStrictEqual(\n sendStructImplArray(0),\n );\n expect(apiMock.sendCommand.mock.calls[6]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.DiscardedPath,\n path: \"beneficiaries.[]\",\n }),\n );\n expect(apiMock.sendCommand.mock.calls[7]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Raw,\n discarded: true,\n displayName: \"Beneficiary\",\n signature: \"sig\",\n }),\n );\n });\n});\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["CommandResultFactory", "hexaStringToBuffer", "UnknownDeviceExchangeError", "Just", "Nothing", "ProvideTokenInformationCommand", "Eip712FilterType", "SendEIP712FilteringCommand", "SendEIP712StructDefinitionCommand", "StructDefinitionCommand", "SendEIP712StructImplemCommand", "StructImplemType", "makeDeviceActionInternalApiMock", "PrimitiveType", "StructType", "TypedDataValueArray", "TypedDataValueField", "TypedDataValueRoot", "ProvideEIP712ContextTask", "apiMock", "TEST_TYPES", "TEST_DOMAIN_VALUES", "TEST_MESSAGE_VALUES", "TEST_CLEAR_SIGN_CONTEXT", "ADDRESS", "STRING", "UINT256", "UINT160", "UINT48", "CUSTOM", "name", "sendStructDefName", "sendStructDefField", "type", "sendStructImplRoot", "value", "sendStructImplArray", "sendStructImplField", "data", "args", "promise"]
|
|
4
|
+
"sourcesContent": ["import {\n type ClearSignContextSuccess,\n ClearSignContextType,\n type TypedDataClearSignContextSuccess,\n} from \"@ledgerhq/context-module\";\nimport {\n CommandResultFactory,\n hexaStringToBuffer,\n LoadCertificateCommand,\n UnknownDeviceExchangeError,\n} from \"@ledgerhq/device-management-kit\";\nimport { Just, Nothing } from \"purify-ts\";\n\nimport { ProvideTokenInformationCommand } from \"@internal/app-binder/command/ProvideTokenInformationCommand\";\nimport { ProvideWeb3CheckCommand } from \"@internal/app-binder/command/ProvideWeb3CheckCommand\";\nimport {\n Eip712FilterType,\n SendEIP712FilteringCommand,\n} from \"@internal/app-binder/command/SendEIP712FilteringCommand\";\nimport {\n SendEIP712StructDefinitionCommand,\n StructDefinitionCommand,\n} from \"@internal/app-binder/command/SendEIP712StructDefinitionCommand\";\nimport {\n SendEIP712StructImplemCommand,\n StructImplemType,\n} from \"@internal/app-binder/command/SendEIP712StructImplemCommand\";\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\nimport {\n type FieldType,\n PrimitiveType,\n StructType,\n TypedDataValueArray,\n TypedDataValueField,\n TypedDataValueRoot,\n} from \"@internal/typed-data/model/Types\";\n\nimport {\n ProvideEIP712ContextTask,\n type ProvideEIP712ContextTaskArgs,\n} from \"./ProvideEIP712ContextTask\";\n\ndescribe(\"ProvideEIP712ContextTask\", () => {\n const apiMock = makeDeviceActionInternalApiMock();\n\n const TEST_TYPES = {\n EIP712Domain: {\n name: new PrimitiveType(\"string\", \"string\", Nothing),\n chainId: new PrimitiveType(\"uint256\", \"uint\", Just(32)),\n verifyingContract: new PrimitiveType(\"address\", \"address\", Nothing),\n },\n PermitSingle: {\n details: new StructType(\"PermitDetails\"),\n spender: new PrimitiveType(\"address\", \"address\", Nothing),\n sigDeadline: new PrimitiveType(\"uint256\", \"uint\", Just(32)),\n },\n PermitDetails: {\n token: new PrimitiveType(\"address\", \"address\", Nothing),\n amount: new PrimitiveType(\"uint160\", \"uint\", Just(20)),\n expiration: new PrimitiveType(\"uint48\", \"uint\", Just(6)),\n nonce: new PrimitiveType(\"uint48\", \"uint\", Just(6)),\n },\n };\n const TEST_DOMAIN_VALUES = [\n {\n path: \"\",\n type: \"\",\n value: new TypedDataValueRoot(\"EIP712Domain\"),\n },\n {\n path: \"name\",\n type: \"string\",\n value: new TypedDataValueField(new TextEncoder().encode(\"Permit2\")),\n },\n {\n path: \"chainId\",\n type: \"uint256\",\n value: new TypedDataValueField(Uint8Array.from([137])),\n },\n {\n path: \"verifyingContract\",\n type: \"address\",\n value: new TypedDataValueField(\n hexaStringToBuffer(\"0x000000000022d473030f116ddee9f6b43ac78ba3\")!,\n ),\n },\n ];\n const TEST_MESSAGE_VALUES = [\n {\n path: \"\",\n type: \"\",\n value: new TypedDataValueRoot(\"PermitSingle\"),\n },\n {\n path: \"details.token\",\n type: \"address\",\n value: new TypedDataValueField(\n hexaStringToBuffer(\"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\")!,\n ),\n },\n {\n path: \"details.amount\",\n type: \"uint160\",\n value: new TypedDataValueField(Uint8Array.from([0x12])),\n },\n {\n path: \"details.expiration\",\n type: \"uint48\",\n value: new TypedDataValueField(Uint8Array.from([0x12])),\n },\n {\n path: \"details.nonce\",\n type: \"uint48\",\n value: new TypedDataValueField(Uint8Array.from([0x00])),\n },\n {\n path: \"spender\",\n type: \"address\",\n value: new TypedDataValueField(\n hexaStringToBuffer(\"0xec7be89e9d109e7e3fec59c222cf297125fefda2\")!,\n ),\n },\n {\n path: \"sigDeadline\",\n type: \"uint256\",\n value: new TypedDataValueField(Uint8Array.from([0x12])),\n },\n ];\n const TEST_CLEAR_SIGN_CONTEXT: TypedDataClearSignContextSuccess = {\n type: \"success\",\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 4,\n signature:\n \"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3\",\n },\n tokens: {\n 0: \"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\",\n 255: \"payload-0x000000000022d473030f116ddee9f6b43ac78ba3\",\n },\n filters: {\n \"details.amount\": {\n displayName: \"Amount allowance\",\n path: \"details.amount\",\n signature:\n \"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n tokenIndex: 255,\n type: \"amount\",\n },\n \"details.expiration\": {\n displayName: \"Approval expire\",\n path: \"details.expiration\",\n signature:\n \"3044022056b3381e4540629ad73bc434ec49d80523234b82f62340fbb77157fb0eb21a680220459fe9cf6ca309f9c7dfc6d4711fea1848dba661563c57f77b3c2dc480b3a63b\",\n type: \"datetime\",\n },\n \"details.token\": {\n displayName: \"Amount allowance\",\n path: \"details.token\",\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n tokenIndex: 0,\n type: \"token\",\n },\n spender: {\n displayName: \"Approve to spender\",\n path: \"spender\",\n signature:\n \"3044022033e5713d9cb9bc375b56a9fb53b736c81ea3c4ac5cfb2d3ca7f8b8f0558fe2430220543ca4fef6d6f725f29e343f167fe9dd582aa856ecb5797259050eb990a1befb\",\n type: \"raw\",\n },\n },\n };\n\n const ADDRESS = new PrimitiveType(\"address\", \"address\", Nothing);\n const STRING = new PrimitiveType(\"string\", \"string\", Nothing);\n const UINT256 = new PrimitiveType(\"uint256\", \"uint\", Just(32));\n const UINT160 = new PrimitiveType(\"uint160\", \"uint\", Just(20));\n const UINT48 = new PrimitiveType(\"uint48\", \"uint\", Just(6));\n const CUSTOM = (name: string) => new StructType(name);\n\n const sendStructDefName = (name: string) =>\n new SendEIP712StructDefinitionCommand({\n command: StructDefinitionCommand.Name,\n name,\n });\n const sendStructDefField = (name: string, type: FieldType) =>\n new SendEIP712StructDefinitionCommand({\n command: StructDefinitionCommand.Field,\n name,\n type,\n });\n const sendStructImplRoot = (value: string) =>\n new SendEIP712StructImplemCommand({\n type: StructImplemType.ROOT,\n value,\n });\n const sendStructImplArray = (value: number) =>\n new SendEIP712StructImplemCommand({\n type: StructImplemType.ARRAY,\n value,\n });\n const sendStructImplField = (data: Uint8Array) =>\n new SendEIP712StructImplemCommand({\n type: StructImplemType.FIELD,\n value: {\n data,\n isLastChunk: true,\n },\n });\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n it(\"Send context with no clear signing context\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n web3Check: null,\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Nothing,\n domainHash: \"0x\",\n messageHash: \"0x\",\n };\n // WHEN\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: undefined }),\n );\n await new ProvideEIP712ContextTask(apiMock, args).run();\n\n // THEN\n expect(apiMock.sendCommand.mock.calls).toHaveLength(24);\n // Send Struct definitions\n expect(apiMock.sendCommand.mock.calls[0]![0]).toStrictEqual(\n sendStructDefName(\"EIP712Domain\"),\n );\n expect(apiMock.sendCommand.mock.calls[1]![0]).toStrictEqual(\n sendStructDefField(\"name\", STRING),\n );\n expect(apiMock.sendCommand.mock.calls[2]![0]).toStrictEqual(\n sendStructDefField(\"chainId\", UINT256),\n );\n expect(apiMock.sendCommand.mock.calls[3]![0]).toStrictEqual(\n sendStructDefField(\"verifyingContract\", ADDRESS),\n );\n expect(apiMock.sendCommand.mock.calls[4]![0]).toStrictEqual(\n sendStructDefName(\"PermitDetails\"),\n );\n expect(apiMock.sendCommand.mock.calls[5]![0]).toStrictEqual(\n sendStructDefField(\"token\", ADDRESS),\n );\n expect(apiMock.sendCommand.mock.calls[6]![0]).toStrictEqual(\n sendStructDefField(\"amount\", UINT160),\n );\n expect(apiMock.sendCommand.mock.calls[7]![0]).toStrictEqual(\n sendStructDefField(\"expiration\", UINT48),\n );\n expect(apiMock.sendCommand.mock.calls[8]![0]).toStrictEqual(\n sendStructDefField(\"nonce\", UINT48),\n );\n expect(apiMock.sendCommand.mock.calls[9]![0]).toStrictEqual(\n sendStructDefName(\"PermitSingle\"),\n );\n expect(apiMock.sendCommand.mock.calls[10]![0]).toStrictEqual(\n sendStructDefField(\"details\", CUSTOM(\"PermitDetails\")),\n );\n expect(apiMock.sendCommand.mock.calls[11]![0]).toStrictEqual(\n sendStructDefField(\"spender\", ADDRESS),\n );\n expect(apiMock.sendCommand.mock.calls[12]![0]).toStrictEqual(\n sendStructDefField(\"sigDeadline\", UINT256),\n );\n // Send the domain values\n expect(apiMock.sendCommand.mock.calls[13]![0]).toStrictEqual(\n sendStructImplRoot(\"EIP712Domain\"),\n );\n expect(apiMock.sendCommand.mock.calls[14]![0]).toStrictEqual(\n sendStructImplField(\n Uint8Array.from([0x00, 0x07, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x32]),\n ),\n );\n expect(apiMock.sendCommand.mock.calls[15]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x89])),\n );\n expect(apiMock.sendCommand.mock.calls[16]![0]).toStrictEqual(\n sendStructImplField(\n Uint8Array.from([\n 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0xd4, 0x73, 0x03,\n 0x0f, 0x11, 0x6d, 0xde, 0xe9, 0xf6, 0xb4, 0x3a, 0xc7, 0x8b, 0xa3,\n ]),\n ),\n );\n // Send the message values\n expect(apiMock.sendCommand.mock.calls[17]![0]).toStrictEqual(\n sendStructImplRoot(\"PermitSingle\"),\n );\n expect(apiMock.sendCommand.mock.calls[18]![0]).toStrictEqual(\n sendStructImplField(\n Uint8Array.from([\n 0x00, 0x14, 0x7c, 0xeb, 0x23, 0xfd, 0x6b, 0xc0, 0xad, 0xd5, 0x9e,\n 0x62, 0xac, 0x25, 0x57, 0x82, 0x70, 0xcf, 0xf1, 0xb9, 0xf6, 0x19,\n ]),\n ),\n );\n expect(apiMock.sendCommand.mock.calls[19]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x12])),\n );\n expect(apiMock.sendCommand.mock.calls[20]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x12])),\n );\n expect(apiMock.sendCommand.mock.calls[21]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x00])),\n );\n expect(apiMock.sendCommand.mock.calls[22]![0]).toStrictEqual(\n sendStructImplField(\n Uint8Array.from([\n 0x00, 0x14, 0xec, 0x7b, 0xe8, 0x9e, 0x9d, 0x10, 0x9e, 0x7e, 0x3f,\n 0xec, 0x59, 0xc2, 0x22, 0xcf, 0x29, 0x71, 0x25, 0xfe, 0xfd, 0xa2,\n ]),\n ),\n );\n expect(apiMock.sendCommand.mock.calls[23]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x12])),\n );\n });\n\n it(\"Send context with clear signing\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n web3Check: null,\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Just(TEST_CLEAR_SIGN_CONTEXT),\n domainHash: \"0x\",\n messageHash: \"0x\",\n };\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: { tokenIndex: 4 } })) // First token provided\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: { tokenIndex: 5 } })); // Second token provided\n // WHEN\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: undefined }),\n );\n await new ProvideEIP712ContextTask(apiMock, args).run();\n\n // THEN\n expect(apiMock.sendCommand.mock.calls).toHaveLength(32);\n // Send Struct definitions\n expect(apiMock.sendCommand.mock.calls[0]![0]).toStrictEqual(\n sendStructDefName(\"EIP712Domain\"),\n );\n expect(apiMock.sendCommand.mock.calls[1]![0]).toStrictEqual(\n sendStructDefField(\"name\", STRING),\n );\n expect(apiMock.sendCommand.mock.calls[2]![0]).toStrictEqual(\n sendStructDefField(\"chainId\", UINT256),\n );\n expect(apiMock.sendCommand.mock.calls[3]![0]).toStrictEqual(\n sendStructDefField(\"verifyingContract\", ADDRESS),\n );\n expect(apiMock.sendCommand.mock.calls[4]![0]).toStrictEqual(\n sendStructDefName(\"PermitDetails\"),\n );\n expect(apiMock.sendCommand.mock.calls[5]![0]).toStrictEqual(\n sendStructDefField(\"token\", ADDRESS),\n );\n expect(apiMock.sendCommand.mock.calls[6]![0]).toStrictEqual(\n sendStructDefField(\"amount\", UINT160),\n );\n expect(apiMock.sendCommand.mock.calls[7]![0]).toStrictEqual(\n sendStructDefField(\"expiration\", UINT48),\n );\n expect(apiMock.sendCommand.mock.calls[8]![0]).toStrictEqual(\n sendStructDefField(\"nonce\", UINT48),\n );\n expect(apiMock.sendCommand.mock.calls[9]![0]).toStrictEqual(\n sendStructDefName(\"PermitSingle\"),\n );\n expect(apiMock.sendCommand.mock.calls[10]![0]).toStrictEqual(\n sendStructDefField(\"details\", CUSTOM(\"PermitDetails\")),\n );\n expect(apiMock.sendCommand.mock.calls[11]![0]).toStrictEqual(\n sendStructDefField(\"spender\", ADDRESS),\n );\n expect(apiMock.sendCommand.mock.calls[12]![0]).toStrictEqual(\n sendStructDefField(\"sigDeadline\", UINT256),\n );\n // Activate the filtering\n expect(apiMock.sendCommand.mock.calls[13]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({ type: Eip712FilterType.Activation }),\n );\n // Send the domain values\n expect(apiMock.sendCommand.mock.calls[14]![0]).toStrictEqual(\n sendStructImplRoot(\"EIP712Domain\"),\n );\n expect(apiMock.sendCommand.mock.calls[15]![0]).toStrictEqual(\n sendStructImplField(\n Uint8Array.from([0x00, 0x07, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x32]),\n ),\n );\n expect(apiMock.sendCommand.mock.calls[16]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x89])),\n );\n expect(apiMock.sendCommand.mock.calls[17]![0]).toStrictEqual(\n sendStructImplField(\n Uint8Array.from([\n 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0xd4, 0x73, 0x03,\n 0x0f, 0x11, 0x6d, 0xde, 0xe9, 0xf6, 0xb4, 0x3a, 0xc7, 0x8b, 0xa3,\n ]),\n ),\n );\n // Send the message information filter\n expect(apiMock.sendCommand.mock.calls[18]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.MessageInfo,\n displayName: \"Permit2\",\n filtersCount: 4,\n signature:\n \"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3\",\n }),\n );\n // Send the message values with corresponding filters\n expect(apiMock.sendCommand.mock.calls[19]![0]).toStrictEqual(\n sendStructImplRoot(\"PermitSingle\"),\n );\n expect(apiMock.sendCommand.mock.calls[20]![0]).toStrictEqual(\n new ProvideTokenInformationCommand({\n payload: \"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\",\n }),\n );\n expect(apiMock.sendCommand.mock.calls[21]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Token,\n discarded: false,\n tokenIndex: 4,\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n }),\n );\n expect(apiMock.sendCommand.mock.calls[22]![0]).toStrictEqual(\n sendStructImplField(\n Uint8Array.from([\n 0x00, 0x14, 0x7c, 0xeb, 0x23, 0xfd, 0x6b, 0xc0, 0xad, 0xd5, 0x9e,\n 0x62, 0xac, 0x25, 0x57, 0x82, 0x70, 0xcf, 0xf1, 0xb9, 0xf6, 0x19,\n ]),\n ),\n );\n expect(apiMock.sendCommand.mock.calls[23]![0]).toStrictEqual(\n new ProvideTokenInformationCommand({\n payload: \"payload-0x000000000022d473030f116ddee9f6b43ac78ba3\",\n }),\n );\n expect(apiMock.sendCommand.mock.calls[24]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Amount,\n discarded: false,\n displayName: \"Amount allowance\",\n tokenIndex: 255,\n signature:\n \"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n }),\n );\n expect(apiMock.sendCommand.mock.calls[25]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x12])),\n );\n expect(apiMock.sendCommand.mock.calls[26]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Datetime,\n discarded: false,\n displayName: \"Approval expire\",\n signature:\n \"3044022056b3381e4540629ad73bc434ec49d80523234b82f62340fbb77157fb0eb21a680220459fe9cf6ca309f9c7dfc6d4711fea1848dba661563c57f77b3c2dc480b3a63b\",\n }),\n );\n expect(apiMock.sendCommand.mock.calls[27]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x12])),\n );\n expect(apiMock.sendCommand.mock.calls[28]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x00])),\n );\n expect(apiMock.sendCommand.mock.calls[29]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Raw,\n discarded: false,\n displayName: \"Approve to spender\",\n signature:\n \"3044022033e5713d9cb9bc375b56a9fb53b736c81ea3c4ac5cfb2d3ca7f8b8f0558fe2430220543ca4fef6d6f725f29e343f167fe9dd582aa856ecb5797259050eb990a1befb\",\n }),\n );\n expect(apiMock.sendCommand.mock.calls[30]![0]).toStrictEqual(\n sendStructImplField(\n Uint8Array.from([\n 0x00, 0x14, 0xec, 0x7b, 0xe8, 0x9e, 0x9d, 0x10, 0x9e, 0x7e, 0x3f,\n 0xec, 0x59, 0xc2, 0x22, 0xcf, 0x29, 0x71, 0x25, 0xfe, 0xfd, 0xa2,\n ]),\n ),\n );\n expect(apiMock.sendCommand.mock.calls[31]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x12])),\n );\n });\n\n it(\"Both tokens unavailable\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n web3Check: null,\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Just({\n type: \"success\",\n messageInfo: TEST_CLEAR_SIGN_CONTEXT.messageInfo,\n filters: TEST_CLEAR_SIGN_CONTEXT.filters,\n tokens: {},\n }),\n domainHash: \"0x\",\n messageHash: \"0x\",\n };\n\n // WHEN\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: undefined }),\n );\n await new ProvideEIP712ContextTask(apiMock, args).run();\n\n // THEN\n expect(apiMock.sendCommand).not.toHaveBeenCalledWith(\n new ProvideTokenInformationCommand({\n payload: \"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\",\n }),\n );\n expect(apiMock.sendCommand).not.toHaveBeenCalledWith(\n new ProvideTokenInformationCommand({\n payload: \"payload-0x000000000022d473030f116ddee9f6b43ac78ba3\",\n }),\n );\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Token,\n discarded: false,\n tokenIndex: 0,\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n }),\n );\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Amount,\n discarded: false,\n displayName: \"Amount allowance\",\n tokenIndex: 1,\n signature:\n \"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n }),\n );\n });\n\n it(\"First token unavailable\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n web3Check: null,\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Just({\n type: \"success\",\n messageInfo: TEST_CLEAR_SIGN_CONTEXT.messageInfo,\n filters: TEST_CLEAR_SIGN_CONTEXT.filters,\n tokens: { 255: \"payload-0x000000000022d473030f116ddee9f6b43ac78ba3\" },\n }),\n domainHash: \"0x\",\n messageHash: \"0x\",\n };\n\n // WHEN\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: { tokenIndex: 4 } }),\n );\n await new ProvideEIP712ContextTask(apiMock, args).run();\n\n // THEN\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Token,\n discarded: false,\n tokenIndex: 0,\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n }),\n );\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Amount,\n discarded: false,\n displayName: \"Amount allowance\",\n tokenIndex: 255,\n signature:\n \"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n }),\n );\n });\n\n it(\"Second token unavailable\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n web3Check: null,\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Just({\n type: \"success\",\n messageInfo: TEST_CLEAR_SIGN_CONTEXT.messageInfo,\n filters: TEST_CLEAR_SIGN_CONTEXT.filters,\n tokens: { 0: \"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\" },\n }),\n domainHash: \"0x\",\n messageHash: \"0x\",\n };\n\n // WHEN\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: { tokenIndex: 4 } }),\n );\n await new ProvideEIP712ContextTask(apiMock, args).run();\n\n // THEN\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Token,\n discarded: false,\n tokenIndex: 4,\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n }),\n );\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Amount,\n discarded: false,\n displayName: \"Amount allowance\",\n tokenIndex: 0,\n signature:\n \"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n }),\n );\n });\n\n it(\"Provide Web3Check\", async () => {\n // GIVEN\n const web3Check: ClearSignContextSuccess<ClearSignContextType.WEB3_CHECK> =\n {\n type: ClearSignContextType.WEB3_CHECK,\n payload: \"0x010203\",\n };\n const args: ProvideEIP712ContextTaskArgs = {\n web3Check,\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Nothing,\n domainHash: \"0x\",\n messageHash: \"0x\",\n };\n\n // WHEN\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: undefined }),\n );\n await new ProvideEIP712ContextTask(apiMock, args).run();\n\n // THEN\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new ProvideWeb3CheckCommand({\n payload: hexaStringToBuffer(\"0x0003010203\")!,\n isFirstChunk: true,\n }),\n );\n });\n\n it(\"Provide Web3Check and certificate\", async () => {\n // GIVEN\n const web3Check: ClearSignContextSuccess<ClearSignContextType.WEB3_CHECK> =\n {\n type: ClearSignContextType.WEB3_CHECK,\n certificate: {\n keyUsageNumber: 3,\n payload: new Uint8Array(3).fill(42),\n },\n payload: \"0x010203\",\n };\n const args: ProvideEIP712ContextTaskArgs = {\n web3Check,\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Nothing,\n domainHash: \"0x\",\n messageHash: \"0x\",\n };\n\n // WHEN\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: undefined }),\n );\n await new ProvideEIP712ContextTask(apiMock, args).run();\n\n // THEN\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new LoadCertificateCommand({\n keyUsage: 3,\n certificate: web3Check.certificate!.payload,\n }),\n );\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new ProvideWeb3CheckCommand({\n payload: hexaStringToBuffer(\"0x0003010203\")!,\n isFirstChunk: true,\n }),\n );\n });\n\n it(\"Error when providing tokens\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n web3Check: null,\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Just(TEST_CLEAR_SIGN_CONTEXT),\n domainHash: \"0x\",\n messageHash: \"0x\",\n };\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({\n error: new UnknownDeviceExchangeError(\"error\"),\n }),\n );\n // WHEN\n const promise = new ProvideEIP712ContextTask(apiMock, args).run();\n\n // THEN\n await expect(promise).resolves.toStrictEqual(\n CommandResultFactory({\n error: new UnknownDeviceExchangeError(\"error\"),\n }),\n );\n });\n\n it(\"Error when sending struct definitions\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n web3Check: null,\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Just(TEST_CLEAR_SIGN_CONTEXT),\n domainHash: \"0x\",\n messageHash: \"0x\",\n };\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: { tokenIndex: 4 } }))\n .mockResolvedValueOnce(CommandResultFactory({ data: { tokenIndex: 5 } }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(\n CommandResultFactory({\n error: new UnknownDeviceExchangeError(\"error\"),\n }),\n );\n // WHEN\n const promise = new ProvideEIP712ContextTask(apiMock, args).run();\n\n // THEN\n await expect(promise).resolves.toStrictEqual(\n CommandResultFactory({ error: new UnknownDeviceExchangeError(\"error\") }),\n );\n });\n\n it(\"Error when sending struct implementations\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n web3Check: null,\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Nothing,\n domainHash: \"0x\",\n messageHash: \"0x\",\n };\n // WHEN\n apiMock.sendCommand\n // Struct definitions\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n // Struct implementations\n .mockResolvedValueOnce(\n CommandResultFactory({\n error: new UnknownDeviceExchangeError(\"error\"),\n }),\n )\n .mockResolvedValue(CommandResultFactory({ data: undefined }));\n const promise = new ProvideEIP712ContextTask(apiMock, args).run();\n\n // THEN\n await expect(promise).resolves.toStrictEqual(\n CommandResultFactory({ error: new UnknownDeviceExchangeError(\"error\") }),\n );\n });\n\n it(\"Send struct array\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n web3Check: null,\n domainHash: \"0x\",\n messageHash: \"0x\",\n types: {},\n domain: [],\n message: [\n // Array containing an element\n {\n path: \"spenders\",\n type: \"address[]\",\n value: new TypedDataValueArray(1),\n },\n {\n path: \"spenders.[]\",\n type: \"address\",\n value: new TypedDataValueField(\n hexaStringToBuffer(\"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\")!,\n ),\n },\n // Empty array\n {\n path: \"beneficiaries\",\n type: \"address[]\",\n value: new TypedDataValueArray(0),\n },\n ],\n clearSignContext: Just({\n type: \"success\",\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 2,\n signature: \"sig\",\n },\n tokens: {},\n filters: {\n \"spenders.[]\": {\n displayName: \"Spender\",\n path: \"spenders.[]\",\n signature: \"sig\",\n type: \"raw\",\n },\n \"beneficiaries.[]\": {\n displayName: \"Beneficiary\",\n path: \"beneficiaries.[]\",\n signature: \"sig\",\n type: \"raw\",\n },\n },\n }),\n };\n // WHEN\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: undefined }),\n );\n await new ProvideEIP712ContextTask(apiMock, args).run();\n\n // THEN\n // Activate the filtering\n expect(apiMock.sendCommand.mock.calls[0]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({ type: Eip712FilterType.Activation }),\n );\n // Send the message information filter\n expect(apiMock.sendCommand.mock.calls[1]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.MessageInfo,\n displayName: \"Permit2\",\n filtersCount: 2,\n signature: \"sig\",\n }),\n );\n // Send first array containing 1 element\n expect(apiMock.sendCommand.mock.calls[2]![0]).toStrictEqual(\n sendStructImplArray(1),\n );\n expect(apiMock.sendCommand.mock.calls[3]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Raw,\n discarded: false,\n displayName: \"Spender\",\n signature: \"sig\",\n }),\n );\n expect(apiMock.sendCommand.mock.calls[4]![0]).toStrictEqual(\n sendStructImplField(\n Uint8Array.from([\n 0x00, 0x14, 0x7c, 0xeb, 0x23, 0xfd, 0x6b, 0xc0, 0xad, 0xd5, 0x9e,\n 0x62, 0xac, 0x25, 0x57, 0x82, 0x70, 0xcf, 0xf1, 0xb9, 0xf6, 0x19,\n ]),\n ),\n );\n // Send second empty array, with discarded filter\n expect(apiMock.sendCommand.mock.calls[5]![0]).toStrictEqual(\n sendStructImplArray(0),\n );\n expect(apiMock.sendCommand.mock.calls[6]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.DiscardedPath,\n path: \"beneficiaries.[]\",\n }),\n );\n expect(apiMock.sendCommand.mock.calls[7]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Raw,\n discarded: true,\n displayName: \"Beneficiary\",\n signature: \"sig\",\n }),\n );\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["ClearSignContextType", "CommandResultFactory", "hexaStringToBuffer", "LoadCertificateCommand", "UnknownDeviceExchangeError", "Just", "Nothing", "ProvideTokenInformationCommand", "ProvideWeb3CheckCommand", "Eip712FilterType", "SendEIP712FilteringCommand", "SendEIP712StructDefinitionCommand", "StructDefinitionCommand", "SendEIP712StructImplemCommand", "StructImplemType", "makeDeviceActionInternalApiMock", "PrimitiveType", "StructType", "TypedDataValueArray", "TypedDataValueField", "TypedDataValueRoot", "ProvideEIP712ContextTask", "apiMock", "TEST_TYPES", "TEST_DOMAIN_VALUES", "TEST_MESSAGE_VALUES", "TEST_CLEAR_SIGN_CONTEXT", "ADDRESS", "STRING", "UINT256", "UINT160", "UINT48", "CUSTOM", "name", "sendStructDefName", "sendStructDefField", "type", "sendStructImplRoot", "value", "sendStructImplArray", "sendStructImplField", "data", "args", "web3Check", "promise"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{ClearSignContextType as
|
|
1
|
+
import{ClearSignContextType as t}from"@ledgerhq/context-module";import{CommandResultFactory as a,InvalidStatusWordError as i,isSuccessCommandResult as s,LoadCertificateCommand as d}from"@ledgerhq/device-management-kit";import{Just as m,Nothing as c}from"purify-ts";import{ProvideNFTInformationCommand as u}from"../../app-binder/command/ProvideNFTInformationCommand";import{ProvideTokenInformationCommand as p}from"../../app-binder/command/ProvideTokenInformationCommand";import{ProvideTrustedNameCommand as h}from"../../app-binder/command/ProvideTrustedNameCommand";import{ProvideWeb3CheckCommand as T}from"../../app-binder/command/ProvideWeb3CheckCommand";import{SetExternalPluginCommand as E}from"../../app-binder/command/SetExternalPluginCommand";import{SetPluginCommand as l}from"../../app-binder/command/SetPluginCommand";import{SendPayloadInChunksTask as C}from"./SendPayloadInChunksTask";class R{constructor(r,e){this.api=r;this.args=e}async run(){for(const r of this.args.clearSignContexts){const e=await this.provideContext(r);if(!s(e))return m(e)}if(this.args.web3Check){const r=await this.provideContext(this.args.web3Check);if(!s(r))return m(r)}return c}async provideContext({type:r,payload:e,certificate:o}){switch(o&&await this.api.sendCommand(new d({keyUsage:o.keyUsageNumber,certificate:o.payload})),r){case t.PLUGIN:return await this.api.sendCommand(new l({payload:e}));case t.EXTERNAL_PLUGIN:return await this.api.sendCommand(new E({payload:e}));case t.NFT:return await this.api.sendCommand(new u({payload:e}));case t.TOKEN:return await this.api.sendCommand(new p({payload:e}));case t.TRUSTED_NAME:return new C(this.api,{payload:e,commandFactory:n=>new h({data:n.chunkedData,isFirstChunk:n.isFirstChunk})}).run();case t.ENUM:case t.TRANSACTION_FIELD_DESCRIPTION:case t.TRANSACTION_INFO:return a({error:new i("The context type [EXTERNAL_PLUGIN] is not valid here")});case t.WEB3_CHECK:return new C(this.api,{payload:e,commandFactory:n=>new T({payload:n.chunkedData,isFirstChunk:n.isFirstChunk})}).run();default:{const n=r;return a({error:new i(`The context type [${n}] is not covered`)})}}}}export{R as ProvideTransactionContextTask};
|
|
2
2
|
//# sourceMappingURL=ProvideTransactionContextTask.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/task/ProvideTransactionContextTask.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type ClearSignContextSuccess,\n ClearSignContextType,\n} from \"@ledgerhq/context-module\";\nimport {\n type CommandErrorResult,\n type CommandResult,\n CommandResultFactory,\n type InternalApi,\n InvalidStatusWordError,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\nimport { Just, type Maybe, Nothing } from \"purify-ts\";\n\nimport { ProvideNFTInformationCommand } from \"@internal/app-binder/command/ProvideNFTInformationCommand\";\nimport {\n ProvideTokenInformationCommand,\n type ProvideTokenInformationCommandResponse,\n} from \"@internal/app-binder/command/ProvideTokenInformationCommand\";\nimport { ProvideTrustedNameCommand } from \"@internal/app-binder/command/ProvideTrustedNameCommand\";\nimport { SetExternalPluginCommand } from \"@internal/app-binder/command/SetExternalPluginCommand\";\nimport { SetPluginCommand } from \"@internal/app-binder/command/SetPluginCommand\";\nimport { type EthErrorCodes } from \"@internal/app-binder/command/utils/ethAppErrors\";\n\nimport { SendPayloadInChunksTask } from \"./SendPayloadInChunksTask\";\n\nexport type ProvideTransactionContextTaskArgs = {\n /**\n * The valid clear sign contexts offerred by the `BuildTrancationContextTask`.\n */\n clearSignContexts: ClearSignContextSuccess[];\n};\n\n/**\n * This task is responsible for providing the transaction context to the device.\n * It will send the 5 necessary commands:\n * - `SetPluginCommand` (single command)\n * - `SetExternalPluginCommand` (single command)\n * - `ProvideNFTInformationCommand` (single command)\n * - `ProvideTokenInformationCommand` (single command)\n * - `ProvideTrustedNameCommand` (__mulpitle commands__)\n *\n * The method `provideTrustedNameTask` is dedicated to send the multiple `ProvideTrustedNameCommand`.\n */\nexport class ProvideTransactionContextTask {\n constructor(\n private api: InternalApi,\n private args: ProvideTransactionContextTaskArgs,\n ) {}\n\n async run(): Promise<Maybe<CommandErrorResult<EthErrorCodes>>> {\n for (const context of this.args.clearSignContexts) {\n const res = await this.provideContext(context);\n if (!isSuccessCommandResult(res)) {\n return Just(res);\n }\n }\n return Nothing;\n }\n\n /**\n * This method will send a command according to the clear sign context type and return the command result if only one command\n * is sent, otherwise it will return the result of the `provideTrustedNameTask`.\n *\n * @param context The clear sign context to provide.\n * @returns A promise that resolves when the command is sent or result of the `provideTrustedNameTask`.\n */\n async provideContext({\n type,\n payload,\n }: ClearSignContextSuccess): Promise<\n CommandResult<void | ProvideTokenInformationCommandResponse, EthErrorCodes>\n > {\n switch (type) {\n case ClearSignContextType.PLUGIN: {\n return await this.api.sendCommand(new SetPluginCommand({ payload }));\n }\n case ClearSignContextType.EXTERNAL_PLUGIN: {\n return await this.api.sendCommand(\n new SetExternalPluginCommand({ payload }),\n );\n }\n case ClearSignContextType.NFT: {\n return await this.api.sendCommand(\n new ProvideNFTInformationCommand({ payload }),\n );\n }\n case ClearSignContextType.TOKEN: {\n return await this.api.sendCommand(\n new ProvideTokenInformationCommand({ payload }),\n );\n }\n case ClearSignContextType.TRUSTED_NAME: {\n return new SendPayloadInChunksTask(this.api, {\n payload,\n commandFactory: (args) =>\n new ProvideTrustedNameCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n }\n case ClearSignContextType.ENUM:\n case ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION:\n case ClearSignContextType.TRANSACTION_INFO: {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n \"The context type [EXTERNAL_PLUGIN] is not valid here\",\n ),\n });\n }\n default: {\n const uncoveredType: never = type;\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n `The context type [${uncoveredType}] is not covered`,\n ),\n });\n }\n }\n }\n}\n"],
|
|
5
|
-
"mappings": "AAAA,OAEE,wBAAAA,MACK,2BACP,OAGE,wBAAAC,EAEA,0BAAAC,EACA,0BAAAC,MACK,kCACP,OAAS,QAAAC,EAAkB,WAAAC,MAAe,YAE1C,OAAS,gCAAAC,MAAoC,4DAC7C,OACE,kCAAAC,MAEK,8DACP,OAAS,6BAAAC,MAAiC,yDAC1C,OAAS,4BAAAC,MAAgC,wDACzC,OAAS,oBAAAC,MAAwB,gDAGjC,OAAS,2BAAAC,MAA+B,
|
|
6
|
-
"names": ["ClearSignContextType", "CommandResultFactory", "InvalidStatusWordError", "isSuccessCommandResult", "Just", "Nothing", "ProvideNFTInformationCommand", "ProvideTokenInformationCommand", "ProvideTrustedNameCommand", "SetExternalPluginCommand", "SetPluginCommand", "SendPayloadInChunksTask", "ProvideTransactionContextTask", "api", "args", "context", "res", "type", "payload", "uncoveredType"]
|
|
4
|
+
"sourcesContent": ["import {\n type ClearSignContextSuccess,\n ClearSignContextType,\n} from \"@ledgerhq/context-module\";\nimport {\n type CommandErrorResult,\n type CommandResult,\n CommandResultFactory,\n type InternalApi,\n InvalidStatusWordError,\n isSuccessCommandResult,\n LoadCertificateCommand,\n} from \"@ledgerhq/device-management-kit\";\nimport { Just, type Maybe, Nothing } from \"purify-ts\";\n\nimport { ProvideNFTInformationCommand } from \"@internal/app-binder/command/ProvideNFTInformationCommand\";\nimport {\n ProvideTokenInformationCommand,\n type ProvideTokenInformationCommandResponse,\n} from \"@internal/app-binder/command/ProvideTokenInformationCommand\";\nimport { ProvideTrustedNameCommand } from \"@internal/app-binder/command/ProvideTrustedNameCommand\";\nimport { ProvideWeb3CheckCommand } from \"@internal/app-binder/command/ProvideWeb3CheckCommand\";\nimport { SetExternalPluginCommand } from \"@internal/app-binder/command/SetExternalPluginCommand\";\nimport { SetPluginCommand } from \"@internal/app-binder/command/SetPluginCommand\";\nimport { type EthErrorCodes } from \"@internal/app-binder/command/utils/ethAppErrors\";\n\nimport { SendPayloadInChunksTask } from \"./SendPayloadInChunksTask\";\n\nexport type ProvideTransactionContextTaskArgs = {\n /**\n * The valid clear sign contexts offerred by the `BuildTrancationContextTask`.\n */\n clearSignContexts: ClearSignContextSuccess[];\n web3Check: ClearSignContextSuccess<ClearSignContextType.WEB3_CHECK> | null;\n};\n\n/**\n * This task is responsible for providing the transaction context to the device.\n * It will send the 5 necessary commands:\n * - `SetPluginCommand` (single command)\n * - `SetExternalPluginCommand` (single command)\n * - `ProvideNFTInformationCommand` (single command)\n * - `ProvideTokenInformationCommand` (single command)\n * - `ProvideTrustedNameCommand` (__mulpitle commands__)\n *\n * The method `provideTrustedNameTask` is dedicated to send the multiple `ProvideTrustedNameCommand`.\n */\nexport class ProvideTransactionContextTask {\n constructor(\n private api: InternalApi,\n private args: ProvideTransactionContextTaskArgs,\n ) {}\n\n async run(): Promise<Maybe<CommandErrorResult<EthErrorCodes>>> {\n for (const context of this.args.clearSignContexts) {\n const res = await this.provideContext(context);\n if (!isSuccessCommandResult(res)) {\n return Just(res);\n }\n }\n if (this.args.web3Check) {\n const res = await this.provideContext(this.args.web3Check);\n if (!isSuccessCommandResult(res)) {\n return Just(res);\n }\n }\n return Nothing;\n }\n\n /**\n * This method will send a command according to the clear sign context type and return the command result if only one command\n * is sent, otherwise it will return the result of the `provideTrustedNameTask`.\n *\n * @param context The clear sign context to provide.\n * @returns A promise that resolves when the command is sent or result of the `provideTrustedNameTask`.\n */\n async provideContext({\n type,\n payload,\n certificate,\n }: ClearSignContextSuccess): Promise<\n CommandResult<void | ProvideTokenInformationCommandResponse, EthErrorCodes>\n > {\n // if a certificate is provided, we load it before sending the command\n if (certificate) {\n await this.api.sendCommand(\n new LoadCertificateCommand({\n keyUsage: certificate.keyUsageNumber,\n certificate: certificate.payload,\n }),\n );\n }\n\n switch (type) {\n case ClearSignContextType.PLUGIN: {\n return await this.api.sendCommand(new SetPluginCommand({ payload }));\n }\n case ClearSignContextType.EXTERNAL_PLUGIN: {\n return await this.api.sendCommand(\n new SetExternalPluginCommand({ payload }),\n );\n }\n case ClearSignContextType.NFT: {\n return await this.api.sendCommand(\n new ProvideNFTInformationCommand({ payload }),\n );\n }\n case ClearSignContextType.TOKEN: {\n return await this.api.sendCommand(\n new ProvideTokenInformationCommand({ payload }),\n );\n }\n case ClearSignContextType.TRUSTED_NAME: {\n return new SendPayloadInChunksTask(this.api, {\n payload,\n commandFactory: (args) =>\n new ProvideTrustedNameCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n }\n case ClearSignContextType.ENUM:\n case ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION:\n case ClearSignContextType.TRANSACTION_INFO: {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n \"The context type [EXTERNAL_PLUGIN] is not valid here\",\n ),\n });\n }\n case ClearSignContextType.WEB3_CHECK:\n return new SendPayloadInChunksTask(this.api, {\n payload,\n commandFactory: (args) =>\n new ProvideWeb3CheckCommand({\n payload: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n default: {\n const uncoveredType: never = type;\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n `The context type [${uncoveredType}] is not covered`,\n ),\n });\n }\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OAEE,wBAAAA,MACK,2BACP,OAGE,wBAAAC,EAEA,0BAAAC,EACA,0BAAAC,EACA,0BAAAC,MACK,kCACP,OAAS,QAAAC,EAAkB,WAAAC,MAAe,YAE1C,OAAS,gCAAAC,MAAoC,4DAC7C,OACE,kCAAAC,MAEK,8DACP,OAAS,6BAAAC,MAAiC,yDAC1C,OAAS,2BAAAC,MAA+B,uDACxC,OAAS,4BAAAC,MAAgC,wDACzC,OAAS,oBAAAC,MAAwB,gDAGjC,OAAS,2BAAAC,MAA+B,4BAqBjC,MAAMC,CAA8B,CACzC,YACUC,EACAC,EACR,CAFQ,SAAAD,EACA,UAAAC,CACP,CAEH,MAAM,KAAyD,CAC7D,UAAWC,KAAW,KAAK,KAAK,kBAAmB,CACjD,MAAMC,EAAM,MAAM,KAAK,eAAeD,CAAO,EAC7C,GAAI,CAACd,EAAuBe,CAAG,EAC7B,OAAOb,EAAKa,CAAG,CAEnB,CACA,GAAI,KAAK,KAAK,UAAW,CACvB,MAAMA,EAAM,MAAM,KAAK,eAAe,KAAK,KAAK,SAAS,EACzD,GAAI,CAACf,EAAuBe,CAAG,EAC7B,OAAOb,EAAKa,CAAG,CAEnB,CACA,OAAOZ,CACT,CASA,MAAM,eAAe,CACnB,KAAAa,EACA,QAAAC,EACA,YAAAC,CACF,EAEE,CAWA,OATIA,GACF,MAAM,KAAK,IAAI,YACb,IAAIjB,EAAuB,CACzB,SAAUiB,EAAY,eACtB,YAAaA,EAAY,OAC3B,CAAC,CACH,EAGMF,EAAM,CACZ,KAAKnB,EAAqB,OACxB,OAAO,MAAM,KAAK,IAAI,YAAY,IAAIY,EAAiB,CAAE,QAAAQ,CAAQ,CAAC,CAAC,EAErE,KAAKpB,EAAqB,gBACxB,OAAO,MAAM,KAAK,IAAI,YACpB,IAAIW,EAAyB,CAAE,QAAAS,CAAQ,CAAC,CAC1C,EAEF,KAAKpB,EAAqB,IACxB,OAAO,MAAM,KAAK,IAAI,YACpB,IAAIO,EAA6B,CAAE,QAAAa,CAAQ,CAAC,CAC9C,EAEF,KAAKpB,EAAqB,MACxB,OAAO,MAAM,KAAK,IAAI,YACpB,IAAIQ,EAA+B,CAAE,QAAAY,CAAQ,CAAC,CAChD,EAEF,KAAKpB,EAAqB,aACxB,OAAO,IAAIa,EAAwB,KAAK,IAAK,CAC3C,QAAAO,EACA,eAAiBJ,GACf,IAAIP,EAA0B,CAC5B,KAAMO,EAAK,YACX,aAAcA,EAAK,YACrB,CAAC,CACL,CAAC,EAAE,IAAI,EAET,KAAKhB,EAAqB,KAC1B,KAAKA,EAAqB,8BAC1B,KAAKA,EAAqB,iBACxB,OAAOC,EAAqB,CAC1B,MAAO,IAAIC,EACT,sDACF,CACF,CAAC,EAEH,KAAKF,EAAqB,WACxB,OAAO,IAAIa,EAAwB,KAAK,IAAK,CAC3C,QAAAO,EACA,eAAiBJ,GACf,IAAIN,EAAwB,CAC1B,QAASM,EAAK,YACd,aAAcA,EAAK,YACrB,CAAC,CACL,CAAC,EAAE,IAAI,EACT,QAAS,CACP,MAAMM,EAAuBH,EAC7B,OAAOlB,EAAqB,CAC1B,MAAO,IAAIC,EACT,qBAAqBoB,CAAa,kBACpC,CACF,CAAC,CACH,CACF,CACF,CACF",
|
|
6
|
+
"names": ["ClearSignContextType", "CommandResultFactory", "InvalidStatusWordError", "isSuccessCommandResult", "LoadCertificateCommand", "Just", "Nothing", "ProvideNFTInformationCommand", "ProvideTokenInformationCommand", "ProvideTrustedNameCommand", "ProvideWeb3CheckCommand", "SetExternalPluginCommand", "SetPluginCommand", "SendPayloadInChunksTask", "ProvideTransactionContextTask", "api", "args", "context", "res", "type", "payload", "certificate", "uncoveredType"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{ClearSignContextType as n}from"@ledgerhq/context-module";import{CommandResultFactory as r}from"@ledgerhq/device-management-kit";import{ProvideNFTInformationCommand as c}from"../../app-binder/command/ProvideNFTInformationCommand";import{ProvideTokenInformationCommand as m}from"../../app-binder/command/ProvideTokenInformationCommand";import{SetExternalPluginCommand as l}from"../../app-binder/command/SetExternalPluginCommand";import{SetPluginCommand as p}from"../../app-binder/command/SetPluginCommand";import{makeDeviceActionInternalApiMock as C}from"../../app-binder/device-action/__test-utils__/makeInternalApi";import{ProvideTransactionContextTask as d}from"./ProvideTransactionContextTask";describe("ProvideTransactionContextTask",()=>{const e=C(),i=r({data:void 0}),a=r({data:void 0,error:{}});beforeEach(()=>{vi.resetAllMocks()}),describe("run",()=>{const o={clearSignContexts:[{type:n.PLUGIN,payload:"706c7567696e"},{type:n.EXTERNAL_PLUGIN,payload:"65787465726e616c506c7567696e"},{type:n.NFT,payload:"6e6674"},{type:n.TOKEN,payload:"746f6b656e"}]};afterEach(()=>{vi.restoreAllMocks()}),it("should send relative commands when receiving ClearSignContexts of type not trustedName",async()=>{e.sendCommand.mockResolvedValue(i),await new d(e,o).run(),expect(e.sendCommand).toHaveBeenCalledTimes(4),expect(e.sendCommand).toHaveBeenNthCalledWith(o.clearSignContexts.findIndex(t=>t.type===n.PLUGIN)+1,expect.objectContaining(new p({payload:"706c7567696e"}))),expect(e.sendCommand).toHaveBeenNthCalledWith(o.clearSignContexts.findIndex(t=>t.type===n.EXTERNAL_PLUGIN)+1,expect.objectContaining(new l({payload:"65787465726e616c506c7567696e"}))),expect(e.sendCommand).toHaveBeenNthCalledWith(o.clearSignContexts.findIndex(t=>t.type===n.NFT)+1,expect.objectContaining(new c({payload:"6e6674"}))),expect(e.sendCommand).toHaveBeenNthCalledWith(o.clearSignContexts.findIndex(t=>t.type===n.TOKEN)+1,expect.objectContaining(new m({payload:"746f6b656e"})))}),it("should return the command error result and stop when the command fails",async()=>{e.sendCommand.mockReset(),e.sendCommand.mockResolvedValueOnce(a);const t=await new d(e,o).run();expect(e.sendCommand).toHaveBeenCalledTimes(1),expect(t.isJust()).toBe(!0),expect(t.extract()).toStrictEqual(a)})})});
|
|
1
|
+
import{ClearSignContextType as n}from"@ledgerhq/context-module";import{CommandResultFactory as r}from"@ledgerhq/device-management-kit";import{ProvideNFTInformationCommand as c}from"../../app-binder/command/ProvideNFTInformationCommand";import{ProvideTokenInformationCommand as m}from"../../app-binder/command/ProvideTokenInformationCommand";import{SetExternalPluginCommand as l}from"../../app-binder/command/SetExternalPluginCommand";import{SetPluginCommand as p}from"../../app-binder/command/SetPluginCommand";import{makeDeviceActionInternalApiMock as C}from"../../app-binder/device-action/__test-utils__/makeInternalApi";import{ProvideTransactionContextTask as d}from"./ProvideTransactionContextTask";describe("ProvideTransactionContextTask",()=>{const e=C(),i=r({data:void 0}),a=r({data:void 0,error:{}});beforeEach(()=>{vi.resetAllMocks()}),describe("run",()=>{const o={clearSignContexts:[{type:n.PLUGIN,payload:"706c7567696e"},{type:n.EXTERNAL_PLUGIN,payload:"65787465726e616c506c7567696e"},{type:n.NFT,payload:"6e6674"},{type:n.TOKEN,payload:"746f6b656e"}],web3Check:null};afterEach(()=>{vi.restoreAllMocks()}),it("should send relative commands when receiving ClearSignContexts of type not trustedName",async()=>{e.sendCommand.mockResolvedValue(i),await new d(e,o).run(),expect(e.sendCommand).toHaveBeenCalledTimes(4),expect(e.sendCommand).toHaveBeenNthCalledWith(o.clearSignContexts.findIndex(t=>t.type===n.PLUGIN)+1,expect.objectContaining(new p({payload:"706c7567696e"}))),expect(e.sendCommand).toHaveBeenNthCalledWith(o.clearSignContexts.findIndex(t=>t.type===n.EXTERNAL_PLUGIN)+1,expect.objectContaining(new l({payload:"65787465726e616c506c7567696e"}))),expect(e.sendCommand).toHaveBeenNthCalledWith(o.clearSignContexts.findIndex(t=>t.type===n.NFT)+1,expect.objectContaining(new c({payload:"6e6674"}))),expect(e.sendCommand).toHaveBeenNthCalledWith(o.clearSignContexts.findIndex(t=>t.type===n.TOKEN)+1,expect.objectContaining(new m({payload:"746f6b656e"})))}),it("should return the command error result and stop when the command fails",async()=>{e.sendCommand.mockReset(),e.sendCommand.mockResolvedValueOnce(a);const t=await new d(e,o).run();expect(e.sendCommand).toHaveBeenCalledTimes(1),expect(t.isJust()).toBe(!0),expect(t.extract()).toStrictEqual(a)})})});
|
|
2
2
|
//# sourceMappingURL=ProvideTransactionContextTask.test.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/task/ProvideTransactionContextTask.test.ts"],
|
|
4
|
-
"sourcesContent": ["import { ClearSignContextType } from \"@ledgerhq/context-module\";\nimport {\n CommandResultFactory,\n type UnknownDeviceExchangeError,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { ProvideNFTInformationCommand } from \"@internal/app-binder/command/ProvideNFTInformationCommand\";\nimport { ProvideTokenInformationCommand } from \"@internal/app-binder/command/ProvideTokenInformationCommand\";\nimport { SetExternalPluginCommand } from \"@internal/app-binder/command/SetExternalPluginCommand\";\nimport { SetPluginCommand } from \"@internal/app-binder/command/SetPluginCommand\";\nimport { type EthErrorCodes } from \"@internal/app-binder/command/utils/ethAppErrors\";\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\n\nimport {\n ProvideTransactionContextTask,\n type ProvideTransactionContextTaskArgs,\n} from \"./ProvideTransactionContextTask\";\n\ndescribe(\"ProvideTransactionContextTask\", () => {\n const api = makeDeviceActionInternalApiMock();\n const successResult = CommandResultFactory<void, EthErrorCodes>({\n data: undefined,\n });\n const errorResult = CommandResultFactory<void, EthErrorCodes>({\n data: undefined,\n error: {} as UnknownDeviceExchangeError,\n });\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"run\", () => {\n const args: ProvideTransactionContextTaskArgs = {\n clearSignContexts: [\n {\n type: ClearSignContextType.PLUGIN,\n payload: \"706c7567696e\", // \"plugin\"\n },\n {\n type: ClearSignContextType.EXTERNAL_PLUGIN,\n payload: \"65787465726e616c506c7567696e\", // \"externalPlugin\"\n },\n {\n type: ClearSignContextType.NFT,\n payload: \"6e6674\", // \"nft\"\n },\n {\n type: ClearSignContextType.TOKEN,\n payload: \"746f6b656e\", // \"token\"\n },\n ],\n };\n afterEach(() => {\n vi.restoreAllMocks();\n });\n it(\"should send relative commands when receiving ClearSignContexts of type not trustedName\", async () => {\n api.sendCommand.mockResolvedValue(successResult);\n // GIVEN\n const task = new ProvideTransactionContextTask(api, args);\n // WHEN\n await task.run();\n // THEN\n expect(api.sendCommand).toHaveBeenCalledTimes(4);\n expect(api.sendCommand).toHaveBeenNthCalledWith(\n args.clearSignContexts.findIndex(\n (c) => c.type === ClearSignContextType.PLUGIN,\n ) + 1,\n expect.objectContaining(\n new SetPluginCommand({ payload: \"706c7567696e\" }),\n ),\n );\n expect(api.sendCommand).toHaveBeenNthCalledWith(\n args.clearSignContexts.findIndex(\n (c) => c.type === ClearSignContextType.EXTERNAL_PLUGIN,\n ) + 1,\n expect.objectContaining(\n new SetExternalPluginCommand({\n payload: \"65787465726e616c506c7567696e\",\n }),\n ),\n );\n expect(api.sendCommand).toHaveBeenNthCalledWith(\n args.clearSignContexts.findIndex(\n (c) => c.type === ClearSignContextType.NFT,\n ) + 1,\n expect.objectContaining(\n new ProvideNFTInformationCommand({ payload: \"6e6674\" }),\n ),\n );\n expect(api.sendCommand).toHaveBeenNthCalledWith(\n args.clearSignContexts.findIndex(\n (c) => c.type === ClearSignContextType.TOKEN,\n ) + 1,\n expect.objectContaining(\n new ProvideTokenInformationCommand({ payload: \"746f6b656e\" }),\n ),\n );\n });\n it(\"should return the command error result and stop when the command fails\", async () => {\n api.sendCommand.mockReset();\n api.sendCommand.mockResolvedValueOnce(errorResult);\n // GIVEN\n const task = new ProvideTransactionContextTask(api, args);\n // WHEN\n const result = await task.run();\n // THEN\n expect(api.sendCommand).toHaveBeenCalledTimes(1);\n expect(result.isJust()).toBe(true);\n expect(result.extract()).toStrictEqual(errorResult);\n });\n });\n});\n"],
|
|
5
|
-
"mappings": "AAAA,OAAS,wBAAAA,MAA4B,2BACrC,OACE,wBAAAC,MAEK,kCAEP,OAAS,gCAAAC,MAAoC,4DAC7C,OAAS,kCAAAC,MAAsC,8DAC/C,OAAS,4BAAAC,MAAgC,wDACzC,OAAS,oBAAAC,MAAwB,gDAEjC,OAAS,mCAAAC,MAAuC,oEAEhD,OACE,iCAAAC,MAEK,kCAEP,SAAS,gCAAiC,IAAM,CAC9C,MAAMC,EAAMF,EAAgC,EACtCG,EAAgBR,EAA0C,CAC9D,KAAM,MACR,CAAC,EACKS,EAAcT,EAA0C,CAC5D,KAAM,OACN,MAAO,CAAC,CACV,CAAC,EAED,WAAW,IAAM,CACf,GAAG,cAAc,CACnB,CAAC,EAED,SAAS,MAAO,IAAM,CACpB,MAAMU,EAA0C,CAC9C,kBAAmB,CACjB,CACE,KAAMX,EAAqB,OAC3B,QAAS,cACX,EACA,CACE,KAAMA,EAAqB,gBAC3B,QAAS,8BACX,EACA,CACE,KAAMA,EAAqB,IAC3B,QAAS,QACX,EACA,CACE,KAAMA,EAAqB,MAC3B,QAAS,YACX,CACF,
|
|
4
|
+
"sourcesContent": ["import { ClearSignContextType } from \"@ledgerhq/context-module\";\nimport {\n CommandResultFactory,\n type UnknownDeviceExchangeError,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { ProvideNFTInformationCommand } from \"@internal/app-binder/command/ProvideNFTInformationCommand\";\nimport { ProvideTokenInformationCommand } from \"@internal/app-binder/command/ProvideTokenInformationCommand\";\nimport { SetExternalPluginCommand } from \"@internal/app-binder/command/SetExternalPluginCommand\";\nimport { SetPluginCommand } from \"@internal/app-binder/command/SetPluginCommand\";\nimport { type EthErrorCodes } from \"@internal/app-binder/command/utils/ethAppErrors\";\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\n\nimport {\n ProvideTransactionContextTask,\n type ProvideTransactionContextTaskArgs,\n} from \"./ProvideTransactionContextTask\";\n\ndescribe(\"ProvideTransactionContextTask\", () => {\n const api = makeDeviceActionInternalApiMock();\n const successResult = CommandResultFactory<void, EthErrorCodes>({\n data: undefined,\n });\n const errorResult = CommandResultFactory<void, EthErrorCodes>({\n data: undefined,\n error: {} as UnknownDeviceExchangeError,\n });\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"run\", () => {\n const args: ProvideTransactionContextTaskArgs = {\n clearSignContexts: [\n {\n type: ClearSignContextType.PLUGIN,\n payload: \"706c7567696e\", // \"plugin\"\n },\n {\n type: ClearSignContextType.EXTERNAL_PLUGIN,\n payload: \"65787465726e616c506c7567696e\", // \"externalPlugin\"\n },\n {\n type: ClearSignContextType.NFT,\n payload: \"6e6674\", // \"nft\"\n },\n {\n type: ClearSignContextType.TOKEN,\n payload: \"746f6b656e\", // \"token\"\n },\n ],\n web3Check: null,\n };\n afterEach(() => {\n vi.restoreAllMocks();\n });\n it(\"should send relative commands when receiving ClearSignContexts of type not trustedName\", async () => {\n api.sendCommand.mockResolvedValue(successResult);\n // GIVEN\n const task = new ProvideTransactionContextTask(api, args);\n // WHEN\n await task.run();\n // THEN\n expect(api.sendCommand).toHaveBeenCalledTimes(4);\n expect(api.sendCommand).toHaveBeenNthCalledWith(\n args.clearSignContexts.findIndex(\n (c) => c.type === ClearSignContextType.PLUGIN,\n ) + 1,\n expect.objectContaining(\n new SetPluginCommand({ payload: \"706c7567696e\" }),\n ),\n );\n expect(api.sendCommand).toHaveBeenNthCalledWith(\n args.clearSignContexts.findIndex(\n (c) => c.type === ClearSignContextType.EXTERNAL_PLUGIN,\n ) + 1,\n expect.objectContaining(\n new SetExternalPluginCommand({\n payload: \"65787465726e616c506c7567696e\",\n }),\n ),\n );\n expect(api.sendCommand).toHaveBeenNthCalledWith(\n args.clearSignContexts.findIndex(\n (c) => c.type === ClearSignContextType.NFT,\n ) + 1,\n expect.objectContaining(\n new ProvideNFTInformationCommand({ payload: \"6e6674\" }),\n ),\n );\n expect(api.sendCommand).toHaveBeenNthCalledWith(\n args.clearSignContexts.findIndex(\n (c) => c.type === ClearSignContextType.TOKEN,\n ) + 1,\n expect.objectContaining(\n new ProvideTokenInformationCommand({ payload: \"746f6b656e\" }),\n ),\n );\n });\n it(\"should return the command error result and stop when the command fails\", async () => {\n api.sendCommand.mockReset();\n api.sendCommand.mockResolvedValueOnce(errorResult);\n // GIVEN\n const task = new ProvideTransactionContextTask(api, args);\n // WHEN\n const result = await task.run();\n // THEN\n expect(api.sendCommand).toHaveBeenCalledTimes(1);\n expect(result.isJust()).toBe(true);\n expect(result.extract()).toStrictEqual(errorResult);\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "AAAA,OAAS,wBAAAA,MAA4B,2BACrC,OACE,wBAAAC,MAEK,kCAEP,OAAS,gCAAAC,MAAoC,4DAC7C,OAAS,kCAAAC,MAAsC,8DAC/C,OAAS,4BAAAC,MAAgC,wDACzC,OAAS,oBAAAC,MAAwB,gDAEjC,OAAS,mCAAAC,MAAuC,oEAEhD,OACE,iCAAAC,MAEK,kCAEP,SAAS,gCAAiC,IAAM,CAC9C,MAAMC,EAAMF,EAAgC,EACtCG,EAAgBR,EAA0C,CAC9D,KAAM,MACR,CAAC,EACKS,EAAcT,EAA0C,CAC5D,KAAM,OACN,MAAO,CAAC,CACV,CAAC,EAED,WAAW,IAAM,CACf,GAAG,cAAc,CACnB,CAAC,EAED,SAAS,MAAO,IAAM,CACpB,MAAMU,EAA0C,CAC9C,kBAAmB,CACjB,CACE,KAAMX,EAAqB,OAC3B,QAAS,cACX,EACA,CACE,KAAMA,EAAqB,gBAC3B,QAAS,8BACX,EACA,CACE,KAAMA,EAAqB,IAC3B,QAAS,QACX,EACA,CACE,KAAMA,EAAqB,MAC3B,QAAS,YACX,CACF,EACA,UAAW,IACb,EACA,UAAU,IAAM,CACd,GAAG,gBAAgB,CACrB,CAAC,EACD,GAAG,yFAA0F,SAAY,CACvGQ,EAAI,YAAY,kBAAkBC,CAAa,EAI/C,MAFa,IAAIF,EAA8BC,EAAKG,CAAI,EAE7C,IAAI,EAEf,OAAOH,EAAI,WAAW,EAAE,sBAAsB,CAAC,EAC/C,OAAOA,EAAI,WAAW,EAAE,wBACtBG,EAAK,kBAAkB,UACpBC,GAAMA,EAAE,OAASZ,EAAqB,MACzC,EAAI,EACJ,OAAO,iBACL,IAAIK,EAAiB,CAAE,QAAS,cAAe,CAAC,CAClD,CACF,EACA,OAAOG,EAAI,WAAW,EAAE,wBACtBG,EAAK,kBAAkB,UACpBC,GAAMA,EAAE,OAASZ,EAAqB,eACzC,EAAI,EACJ,OAAO,iBACL,IAAII,EAAyB,CAC3B,QAAS,8BACX,CAAC,CACH,CACF,EACA,OAAOI,EAAI,WAAW,EAAE,wBACtBG,EAAK,kBAAkB,UACpBC,GAAMA,EAAE,OAASZ,EAAqB,GACzC,EAAI,EACJ,OAAO,iBACL,IAAIE,EAA6B,CAAE,QAAS,QAAS,CAAC,CACxD,CACF,EACA,OAAOM,EAAI,WAAW,EAAE,wBACtBG,EAAK,kBAAkB,UACpBC,GAAMA,EAAE,OAASZ,EAAqB,KACzC,EAAI,EACJ,OAAO,iBACL,IAAIG,EAA+B,CAAE,QAAS,YAAa,CAAC,CAC9D,CACF,CACF,CAAC,EACD,GAAG,yEAA0E,SAAY,CACvFK,EAAI,YAAY,UAAU,EAC1BA,EAAI,YAAY,sBAAsBE,CAAW,EAIjD,MAAMG,EAAS,MAFF,IAAIN,EAA8BC,EAAKG,CAAI,EAE9B,IAAI,EAE9B,OAAOH,EAAI,WAAW,EAAE,sBAAsB,CAAC,EAC/C,OAAOK,EAAO,OAAO,CAAC,EAAE,KAAK,EAAI,EACjC,OAAOA,EAAO,QAAQ,CAAC,EAAE,cAAcH,CAAW,CACpD,CAAC,CACH,CAAC,CACH,CAAC",
|
|
6
6
|
"names": ["ClearSignContextType", "CommandResultFactory", "ProvideNFTInformationCommand", "ProvideTokenInformationCommand", "SetExternalPluginCommand", "SetPluginCommand", "makeDeviceActionInternalApiMock", "ProvideTransactionContextTask", "api", "successResult", "errorResult", "args", "c", "result"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{ClearSignContextType as n}from"@ledgerhq/context-module";import{bufferToHexaString as u,CommandResultFactory as C,InvalidStatusWordError as m,isSuccessCommandResult as a,LoadCertificateCommand as p}from"@ledgerhq/device-management-kit";import{Just as s,Nothing as d}from"purify-ts";import{GetChallengeCommand as l}from"../../app-binder/command/GetChallengeCommand";import{ProvideEnumCommand as f}from"../../app-binder/command/ProvideEnumCommand";import{ProvideNFTInformationCommand as h}from"../../app-binder/command/ProvideNFTInformationCommand";import{ProvideTokenInformationCommand as T}from"../../app-binder/command/ProvideTokenInformationCommand";import{ProvideTransactionFieldDescriptionCommand as v}from"../../app-binder/command/ProvideTransactionFieldDescriptionCommand";import{ProvideTrustedNameCommand as y}from"../../app-binder/command/ProvideTrustedNameCommand";import{SendPayloadInChunksTask as c}from"./SendPayloadInChunksTask";class
|
|
1
|
+
import{ClearSignContextType as n}from"@ledgerhq/context-module";import{bufferToHexaString as u,CommandResultFactory as C,InvalidStatusWordError as m,isSuccessCommandResult as a,LoadCertificateCommand as p}from"@ledgerhq/device-management-kit";import{Just as s,Nothing as d}from"purify-ts";import{GetChallengeCommand as l}from"../../app-binder/command/GetChallengeCommand";import{ProvideEnumCommand as f}from"../../app-binder/command/ProvideEnumCommand";import{ProvideNFTInformationCommand as h}from"../../app-binder/command/ProvideNFTInformationCommand";import{ProvideTokenInformationCommand as T}from"../../app-binder/command/ProvideTokenInformationCommand";import{ProvideTransactionFieldDescriptionCommand as v}from"../../app-binder/command/ProvideTransactionFieldDescriptionCommand";import{ProvideTrustedNameCommand as y}from"../../app-binder/command/ProvideTrustedNameCommand";import{ProvideWeb3CheckCommand as x}from"../../app-binder/command/ProvideWeb3CheckCommand";import{SendPayloadInChunksTask as c}from"./SendPayloadInChunksTask";class D{constructor(e,r){this.api=e;this.args=r}async run(){const{field:e}=this.args;if(await this.loadCertificate(e.certificate),e.reference!==void 0&&"value"in e.reference&&e.reference.value!==void 0&&await this.getAndProvideContext({type:e.reference.type,chainId:this.args.chainId,address:e.reference.value}),e.reference!==void 0&&e.reference.valuePath!==void 0){const t=this.args.transactionParser.extractValue(this.args.serializedTransaction,e.reference.valuePath);if(t.isRight())for(const o of t.extract()){const i=await this.provideContextReference(e.reference,o);if(i.isJust())return i}}const r=await this.provideContext({...e});return a(r)?d:s(r)}async loadCertificate(e){e&&await this.api.sendCommand(new p({keyUsage:e.keyUsageNumber,certificate:e.payload}))}async provideContextReference(e,r){if(e.type===n.ENUM)return this.provideEnumContextReference(e,r);const t=u(r.slice(Math.max(0,r.length-20)));return e.type===n.TRUSTED_NAME?this.provideTustedNameContextReference(e,t):this.getAndProvideContext({type:e.type,chainId:this.args.chainId,address:t})}async provideEnumContextReference(e,r){const t=r[r.length-1];if(!t)return d;const o=this.args.transactionEnums.find(i=>i.value===t&&i.id===e.id);if(o){await this.loadCertificate(o.certificate);const i=await this.provideContext(o);if(!a(i))return s(i)}return d}async provideTustedNameContextReference(e,r){const t=await this.api.sendCommand(new l);return a(t)?this.getAndProvideContext({type:e.type,chainId:this.args.chainId,address:r,challenge:t.data.challenge,types:e.types,sources:e.sources}):s(t)}async getAndProvideContext(e){const r=await this.args.contextModule.getContext(e);if(r.type!==n.ERROR){const t=await this.provideContext(r);if(!a(t))return s(t)}return d}async provideContext({type:e,payload:r}){switch(e){case n.NFT:return await this.api.sendCommand(new h({payload:r}));case n.TOKEN:return await this.api.sendCommand(new T({payload:r}));case n.TRUSTED_NAME:return new c(this.api,{payload:r,commandFactory:t=>new y({data:t.chunkedData,isFirstChunk:t.isFirstChunk})}).run();case n.ENUM:return new c(this.api,{payload:r,commandFactory:t=>new f({data:t.chunkedData,isFirstChunk:t.isFirstChunk})}).run();case n.TRANSACTION_FIELD_DESCRIPTION:return new c(this.api,{payload:r,commandFactory:t=>new v({data:t.chunkedData,isFirstChunk:t.isFirstChunk})}).run();case n.TRANSACTION_INFO:case n.PLUGIN:case n.EXTERNAL_PLUGIN:return C({error:new m(`The context type [${e}] is not valid as a transaction field or metadata`)});case n.WEB3_CHECK:return new c(this.api,{payload:r,commandFactory:t=>new x({payload:t.chunkedData,isFirstChunk:t.isFirstChunk})}).run();default:{const t=e;return C({error:new m(`The context type [${t}] is not covered`)})}}}}export{D as ProvideTransactionFieldDescriptionTask};
|
|
2
2
|
//# sourceMappingURL=ProvideTransactionFieldDescriptionTask.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type ClearSignContextReference,\n type ClearSignContextSuccess,\n type ClearSignContextSuccessType,\n ClearSignContextType,\n type ContextModule,\n type PkiCertificate,\n type TransactionFieldContext,\n} from \"@ledgerhq/context-module\";\nimport {\n bufferToHexaString,\n type CommandErrorResult,\n type CommandResult,\n CommandResultFactory,\n type HexaString,\n type InternalApi,\n InvalidStatusWordError,\n isSuccessCommandResult,\n LoadCertificateCommand,\n} from \"@ledgerhq/device-management-kit\";\nimport { Just, type Maybe, Nothing } from \"purify-ts\";\n\nimport { GetChallengeCommand } from \"@internal/app-binder/command/GetChallengeCommand\";\nimport { ProvideEnumCommand } from \"@internal/app-binder/command/ProvideEnumCommand\";\nimport { ProvideNFTInformationCommand } from \"@internal/app-binder/command/ProvideNFTInformationCommand\";\nimport {\n ProvideTokenInformationCommand,\n type ProvideTokenInformationCommandResponse,\n} from \"@internal/app-binder/command/ProvideTokenInformationCommand\";\nimport { ProvideTransactionFieldDescriptionCommand } from \"@internal/app-binder/command/ProvideTransactionFieldDescriptionCommand\";\nimport { ProvideTrustedNameCommand } from \"@internal/app-binder/command/ProvideTrustedNameCommand\";\nimport { type EthErrorCodes } from \"@internal/app-binder/command/utils/ethAppErrors\";\nimport { type TransactionParserService } from \"@internal/transaction/service/parser/TransactionParserService\";\n\nimport { type ProvideTransactionGenericContextTaskErrorCodes } from \"./ProvideTransactionGenericContextTask\";\nimport { SendPayloadInChunksTask } from \"./SendPayloadInChunksTask\";\n\nexport type ProvideTransactionFieldDescriptionTaskArgs = {\n field: ClearSignContextSuccess<\n Exclude<ClearSignContextSuccessType, ClearSignContextType.ENUM>\n >;\n serializedTransaction: Uint8Array;\n chainId: number;\n transactionParser: TransactionParserService;\n contextModule: ContextModule;\n transactionEnums: ClearSignContextSuccess<ClearSignContextType.ENUM>[];\n};\n\nexport type ProvideTransactionFieldDescriptionTaskErrorCodes =\n void | EthErrorCodes;\n\n/**\n * This task is responsible for providing the transaction context to the device.\n *\n */\nexport class ProvideTransactionFieldDescriptionTask {\n constructor(\n private api: InternalApi,\n private args: ProvideTransactionFieldDescriptionTaskArgs,\n ) {}\n\n async run(): Promise<\n Maybe<\n CommandErrorResult<\n ProvideTransactionFieldDescriptionTaskErrorCodes | EthErrorCodes\n >\n >\n > {\n const { field } = this.args;\n\n // If a certificate is provided, start by loading it to the device\n await this.loadCertificate(field.certificate);\n\n // if the reference is a string, it means it is a direct address\n // and we don't need to extract the value from the transaction\n // as it is already provided in the reference\n if (\n field.reference !== undefined &&\n \"value\" in field.reference &&\n field.reference.value !== undefined\n ) {\n await this.getAndProvideContext({\n type: field.reference.type,\n chainId: this.args.chainId,\n address: field.reference.value,\n });\n }\n\n // if the reference is a path, it means we need to extract the value\n // from the transaction and provide it to the device\n if (\n field.reference !== undefined &&\n field.reference.valuePath !== undefined\n ) {\n // iterate on each reference and provide the context\n const referenceValues = this.args.transactionParser.extractValue(\n this.args.serializedTransaction,\n field.reference.valuePath,\n );\n\n if (referenceValues.isRight()) {\n for (const value of referenceValues.extract()) {\n const provideReferenceResult = await this.provideContextReference(\n field.reference,\n value,\n );\n if (provideReferenceResult.isJust()) {\n return provideReferenceResult;\n }\n }\n }\n }\n\n const transactionFieldResult = await this.provideContext({ ...field });\n if (!isSuccessCommandResult(transactionFieldResult)) {\n return Just(transactionFieldResult);\n }\n\n return Nothing;\n }\n\n /**\n * This method will load the certificate to the device if it is provided.\n *\n * @param {PkiCertificate | undefined} certificate The certificate to load to the device.\n * @returns A promise that resolves when the certificate is loaded.\n */\n private async loadCertificate(\n certificate: PkiCertificate | undefined,\n ): Promise<void> {\n if (!certificate) return;\n\n await this.api.sendCommand(\n new LoadCertificateCommand({\n keyUsage: certificate.keyUsageNumber,\n certificate: certificate.payload,\n }),\n );\n }\n\n /**\n * This method will provide the context reference to the device.\n *\n * @param {ClearSignContextReference} reference The reference to provide.\n * @param {Uint8Array} value The value of the reference.\n * @returns A promise that resolves when the context is provided.\n */\n private async provideContextReference(\n reference: ClearSignContextReference,\n value: Uint8Array,\n ): Promise<\n Maybe<\n CommandErrorResult<\n ProvideTransactionGenericContextTaskErrorCodes | EthErrorCodes\n >\n >\n > {\n if (reference.type === ClearSignContextType.ENUM) {\n return this.provideEnumContextReference(reference, value);\n }\n\n const address = bufferToHexaString(\n value.slice(Math.max(0, value.length - 20)),\n );\n\n if (reference.type === ClearSignContextType.TRUSTED_NAME) {\n return this.provideTustedNameContextReference(reference, address);\n }\n\n return this.getAndProvideContext({\n type: reference.type,\n chainId: this.args.chainId,\n address,\n });\n }\n\n /**\n * This method will provide the enum context reference to the device\n * if the enum value is found in the transaction enums mapping.\n *\n * Note: We do not need to call the context module to get the enum context\n * as it is already provided with transactionEnums mapping.\n *\n * @param {ClearSignContextReference<ClearSignContextType.ENUM>} reference The enum reference to provide.\n * @param {Uint8Array} value The value of the enum.\n * @returns A promise that resolves when the context is provided.\n */\n private async provideEnumContextReference(\n reference: ClearSignContextReference<ClearSignContextType.ENUM>,\n value: Uint8Array,\n ): Promise<\n Maybe<CommandErrorResult<ProvideTransactionGenericContextTaskErrorCodes>>\n > {\n const enumValue = value[value.length - 1];\n if (!enumValue) return Nothing;\n\n const enumDescriptor = this.args.transactionEnums.find(\n (enumContext) =>\n enumContext.value === enumValue && enumContext.id === reference.id,\n );\n if (enumDescriptor) {\n await this.loadCertificate(enumDescriptor.certificate);\n\n const provideEnumResult = await this.provideContext(enumDescriptor);\n if (!isSuccessCommandResult(provideEnumResult)) {\n return Just(provideEnumResult);\n }\n }\n return Nothing;\n }\n\n /**\n * This method will provide the trusted name context reference to the device.\n *\n * Note: We need to call the context module to get the trusted name context\n * with a challenge to ensure the trusted name is valid.\n *\n * @param {ClearSignContextReference<ClearSignContextType.TRUSTED_NAME>} reference The trusted name reference to provide.\n * @param {HexaString} address The address of the trusted name.\n * @returns A promise that resolves when the context is provided.\n */\n private async provideTustedNameContextReference(\n reference: ClearSignContextReference<ClearSignContextType.TRUSTED_NAME>,\n address: HexaString,\n ): Promise<\n Maybe<\n CommandErrorResult<\n ProvideTransactionGenericContextTaskErrorCodes | EthErrorCodes\n >\n >\n > {\n const getChallengeResult = await this.api.sendCommand(\n new GetChallengeCommand(),\n );\n if (!isSuccessCommandResult(getChallengeResult)) {\n return Just(getChallengeResult);\n }\n\n return this.getAndProvideContext({\n type: reference.type,\n chainId: this.args.chainId,\n address,\n challenge: getChallengeResult.data.challenge,\n types: reference.types,\n sources: reference.sources,\n });\n }\n\n /**\n * This method will get the context from the context module\n * and provide it to the device.\n *\n * @param {TransactionFieldContext} field The field to provide.\n * @returns A promise that resolves when the context is provided.\n */\n private async getAndProvideContext(\n field: TransactionFieldContext,\n ): Promise<\n Maybe<CommandErrorResult<ProvideTransactionGenericContextTaskErrorCodes>>\n > {\n const context = await this.args.contextModule.getContext(field);\n if (context.type !== ClearSignContextType.ERROR) {\n const provideReferenceResult = await this.provideContext(context);\n if (!isSuccessCommandResult(provideReferenceResult)) {\n return Just(provideReferenceResult);\n }\n }\n return Nothing;\n }\n\n /**\n * This method will send a command according to the clear sign context type\n * and return the command result if only one command is sent,\n * otherwise it will return the result of the command.\n *\n * @param {ClearSignContextSuccess} context The clear sign context to provide.\n * @returns A promise that resolves when the command return a command response.\n */\n private async provideContext({\n type,\n payload,\n }: ClearSignContextSuccess): Promise<\n CommandResult<\n void | ProvideTokenInformationCommandResponse,\n ProvideTransactionGenericContextTaskErrorCodes\n >\n > {\n switch (type) {\n case ClearSignContextType.NFT:\n return await this.api.sendCommand(\n new ProvideNFTInformationCommand({ payload }),\n );\n case ClearSignContextType.TOKEN:\n return await this.api.sendCommand(\n new ProvideTokenInformationCommand({ payload }),\n );\n case ClearSignContextType.TRUSTED_NAME:\n return new SendPayloadInChunksTask(this.api, {\n payload,\n commandFactory: (args) =>\n new ProvideTrustedNameCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n case ClearSignContextType.ENUM:\n return new SendPayloadInChunksTask(this.api, {\n payload,\n commandFactory: (args) =>\n new ProvideEnumCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n case ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION:\n return new SendPayloadInChunksTask(this.api, {\n payload,\n commandFactory: (args) =>\n new ProvideTransactionFieldDescriptionCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n case ClearSignContextType.TRANSACTION_INFO:\n case ClearSignContextType.PLUGIN:\n case ClearSignContextType.EXTERNAL_PLUGIN:\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n `The context type [${type}] is not valid as a transaction field or metadata`,\n ),\n });\n default: {\n const uncoveredType: never = type;\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n `The context type [${uncoveredType}] is not covered`,\n ),\n });\n }\n }\n }\n}\n"],
|
|
5
|
-
"mappings": "AAAA,OAIE,wBAAAA,MAIK,2BACP,OACE,sBAAAC,EAGA,wBAAAC,EAGA,0BAAAC,EACA,0BAAAC,EACA,0BAAAC,MACK,kCACP,OAAS,QAAAC,EAAkB,WAAAC,MAAe,YAE1C,OAAS,uBAAAC,MAA2B,mDACpC,OAAS,sBAAAC,MAA0B,kDACnC,OAAS,gCAAAC,MAAoC,4DAC7C,OACE,kCAAAC,MAEK,8DACP,OAAS,6CAAAC,MAAiD,yEAC1D,OAAS,6BAAAC,MAAiC,
|
|
6
|
-
"names": ["ClearSignContextType", "bufferToHexaString", "CommandResultFactory", "InvalidStatusWordError", "isSuccessCommandResult", "LoadCertificateCommand", "Just", "Nothing", "GetChallengeCommand", "ProvideEnumCommand", "ProvideNFTInformationCommand", "ProvideTokenInformationCommand", "ProvideTransactionFieldDescriptionCommand", "ProvideTrustedNameCommand", "SendPayloadInChunksTask", "ProvideTransactionFieldDescriptionTask", "api", "args", "field", "referenceValues", "value", "provideReferenceResult", "transactionFieldResult", "certificate", "reference", "address", "enumValue", "enumDescriptor", "enumContext", "provideEnumResult", "getChallengeResult", "context", "type", "payload", "uncoveredType"]
|
|
4
|
+
"sourcesContent": ["import {\n type ClearSignContextReference,\n type ClearSignContextSuccess,\n type ClearSignContextSuccessType,\n ClearSignContextType,\n type ContextModule,\n type PkiCertificate,\n type TransactionFieldContext,\n} from \"@ledgerhq/context-module\";\nimport {\n bufferToHexaString,\n type CommandErrorResult,\n type CommandResult,\n CommandResultFactory,\n type HexaString,\n type InternalApi,\n InvalidStatusWordError,\n isSuccessCommandResult,\n LoadCertificateCommand,\n} from \"@ledgerhq/device-management-kit\";\nimport { Just, type Maybe, Nothing } from \"purify-ts\";\n\nimport { GetChallengeCommand } from \"@internal/app-binder/command/GetChallengeCommand\";\nimport { ProvideEnumCommand } from \"@internal/app-binder/command/ProvideEnumCommand\";\nimport { ProvideNFTInformationCommand } from \"@internal/app-binder/command/ProvideNFTInformationCommand\";\nimport {\n ProvideTokenInformationCommand,\n type ProvideTokenInformationCommandResponse,\n} from \"@internal/app-binder/command/ProvideTokenInformationCommand\";\nimport { ProvideTransactionFieldDescriptionCommand } from \"@internal/app-binder/command/ProvideTransactionFieldDescriptionCommand\";\nimport { ProvideTrustedNameCommand } from \"@internal/app-binder/command/ProvideTrustedNameCommand\";\nimport { ProvideWeb3CheckCommand } from \"@internal/app-binder/command/ProvideWeb3CheckCommand\";\nimport { type EthErrorCodes } from \"@internal/app-binder/command/utils/ethAppErrors\";\nimport { type TransactionParserService } from \"@internal/transaction/service/parser/TransactionParserService\";\n\nimport { type ProvideTransactionGenericContextTaskErrorCodes } from \"./ProvideTransactionGenericContextTask\";\nimport { SendPayloadInChunksTask } from \"./SendPayloadInChunksTask\";\n\nexport type ProvideTransactionFieldDescriptionTaskArgs = {\n field: ClearSignContextSuccess<\n Exclude<ClearSignContextSuccessType, ClearSignContextType.ENUM>\n >;\n serializedTransaction: Uint8Array;\n chainId: number;\n transactionParser: TransactionParserService;\n contextModule: ContextModule;\n transactionEnums: ClearSignContextSuccess<ClearSignContextType.ENUM>[];\n};\n\nexport type ProvideTransactionFieldDescriptionTaskErrorCodes =\n void | EthErrorCodes;\n\n/**\n * This task is responsible for providing the transaction context to the device.\n *\n */\nexport class ProvideTransactionFieldDescriptionTask {\n constructor(\n private api: InternalApi,\n private args: ProvideTransactionFieldDescriptionTaskArgs,\n ) {}\n\n async run(): Promise<\n Maybe<\n CommandErrorResult<\n ProvideTransactionFieldDescriptionTaskErrorCodes | EthErrorCodes\n >\n >\n > {\n const { field } = this.args;\n\n // If a certificate is provided, start by loading it to the device\n await this.loadCertificate(field.certificate);\n\n // if the reference is a string, it means it is a direct address\n // and we don't need to extract the value from the transaction\n // as it is already provided in the reference\n if (\n field.reference !== undefined &&\n \"value\" in field.reference &&\n field.reference.value !== undefined\n ) {\n await this.getAndProvideContext({\n type: field.reference.type,\n chainId: this.args.chainId,\n address: field.reference.value,\n });\n }\n\n // if the reference is a path, it means we need to extract the value\n // from the transaction and provide it to the device\n if (\n field.reference !== undefined &&\n field.reference.valuePath !== undefined\n ) {\n // iterate on each reference and provide the context\n const referenceValues = this.args.transactionParser.extractValue(\n this.args.serializedTransaction,\n field.reference.valuePath,\n );\n\n if (referenceValues.isRight()) {\n for (const value of referenceValues.extract()) {\n const provideReferenceResult = await this.provideContextReference(\n field.reference,\n value,\n );\n if (provideReferenceResult.isJust()) {\n return provideReferenceResult;\n }\n }\n }\n }\n\n const transactionFieldResult = await this.provideContext({ ...field });\n if (!isSuccessCommandResult(transactionFieldResult)) {\n return Just(transactionFieldResult);\n }\n\n return Nothing;\n }\n\n /**\n * This method will load the certificate to the device if it is provided.\n *\n * @param {PkiCertificate | undefined} certificate The certificate to load to the device.\n * @returns A promise that resolves when the certificate is loaded.\n */\n private async loadCertificate(\n certificate: PkiCertificate | undefined,\n ): Promise<void> {\n if (!certificate) return;\n\n await this.api.sendCommand(\n new LoadCertificateCommand({\n keyUsage: certificate.keyUsageNumber,\n certificate: certificate.payload,\n }),\n );\n }\n\n /**\n * This method will provide the context reference to the device.\n *\n * @param {ClearSignContextReference} reference The reference to provide.\n * @param {Uint8Array} value The value of the reference.\n * @returns A promise that resolves when the context is provided.\n */\n private async provideContextReference(\n reference: ClearSignContextReference,\n value: Uint8Array,\n ): Promise<\n Maybe<\n CommandErrorResult<\n ProvideTransactionGenericContextTaskErrorCodes | EthErrorCodes\n >\n >\n > {\n if (reference.type === ClearSignContextType.ENUM) {\n return this.provideEnumContextReference(reference, value);\n }\n\n const address = bufferToHexaString(\n value.slice(Math.max(0, value.length - 20)),\n );\n\n if (reference.type === ClearSignContextType.TRUSTED_NAME) {\n return this.provideTustedNameContextReference(reference, address);\n }\n\n return this.getAndProvideContext({\n type: reference.type,\n chainId: this.args.chainId,\n address,\n });\n }\n\n /**\n * This method will provide the enum context reference to the device\n * if the enum value is found in the transaction enums mapping.\n *\n * Note: We do not need to call the context module to get the enum context\n * as it is already provided with transactionEnums mapping.\n *\n * @param {ClearSignContextReference<ClearSignContextType.ENUM>} reference The enum reference to provide.\n * @param {Uint8Array} value The value of the enum.\n * @returns A promise that resolves when the context is provided.\n */\n private async provideEnumContextReference(\n reference: ClearSignContextReference<ClearSignContextType.ENUM>,\n value: Uint8Array,\n ): Promise<\n Maybe<CommandErrorResult<ProvideTransactionGenericContextTaskErrorCodes>>\n > {\n const enumValue = value[value.length - 1];\n if (!enumValue) return Nothing;\n\n const enumDescriptor = this.args.transactionEnums.find(\n (enumContext) =>\n enumContext.value === enumValue && enumContext.id === reference.id,\n );\n if (enumDescriptor) {\n await this.loadCertificate(enumDescriptor.certificate);\n\n const provideEnumResult = await this.provideContext(enumDescriptor);\n if (!isSuccessCommandResult(provideEnumResult)) {\n return Just(provideEnumResult);\n }\n }\n return Nothing;\n }\n\n /**\n * This method will provide the trusted name context reference to the device.\n *\n * Note: We need to call the context module to get the trusted name context\n * with a challenge to ensure the trusted name is valid.\n *\n * @param {ClearSignContextReference<ClearSignContextType.TRUSTED_NAME>} reference The trusted name reference to provide.\n * @param {HexaString} address The address of the trusted name.\n * @returns A promise that resolves when the context is provided.\n */\n private async provideTustedNameContextReference(\n reference: ClearSignContextReference<ClearSignContextType.TRUSTED_NAME>,\n address: HexaString,\n ): Promise<\n Maybe<\n CommandErrorResult<\n ProvideTransactionGenericContextTaskErrorCodes | EthErrorCodes\n >\n >\n > {\n const getChallengeResult = await this.api.sendCommand(\n new GetChallengeCommand(),\n );\n if (!isSuccessCommandResult(getChallengeResult)) {\n return Just(getChallengeResult);\n }\n\n return this.getAndProvideContext({\n type: reference.type,\n chainId: this.args.chainId,\n address,\n challenge: getChallengeResult.data.challenge,\n types: reference.types,\n sources: reference.sources,\n });\n }\n\n /**\n * This method will get the context from the context module\n * and provide it to the device.\n *\n * @param {TransactionFieldContext} field The field to provide.\n * @returns A promise that resolves when the context is provided.\n */\n private async getAndProvideContext(\n field: TransactionFieldContext,\n ): Promise<\n Maybe<CommandErrorResult<ProvideTransactionGenericContextTaskErrorCodes>>\n > {\n const context = await this.args.contextModule.getContext(field);\n if (context.type !== ClearSignContextType.ERROR) {\n const provideReferenceResult = await this.provideContext(context);\n if (!isSuccessCommandResult(provideReferenceResult)) {\n return Just(provideReferenceResult);\n }\n }\n return Nothing;\n }\n\n /**\n * This method will send a command according to the clear sign context type\n * and return the command result if only one command is sent,\n * otherwise it will return the result of the command.\n *\n * @param {ClearSignContextSuccess} context The clear sign context to provide.\n * @returns A promise that resolves when the command return a command response.\n */\n private async provideContext({\n type,\n payload,\n }: ClearSignContextSuccess): Promise<\n CommandResult<\n void | ProvideTokenInformationCommandResponse,\n ProvideTransactionGenericContextTaskErrorCodes\n >\n > {\n switch (type) {\n case ClearSignContextType.NFT:\n return await this.api.sendCommand(\n new ProvideNFTInformationCommand({ payload }),\n );\n case ClearSignContextType.TOKEN:\n return await this.api.sendCommand(\n new ProvideTokenInformationCommand({ payload }),\n );\n case ClearSignContextType.TRUSTED_NAME:\n return new SendPayloadInChunksTask(this.api, {\n payload,\n commandFactory: (args) =>\n new ProvideTrustedNameCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n case ClearSignContextType.ENUM:\n return new SendPayloadInChunksTask(this.api, {\n payload,\n commandFactory: (args) =>\n new ProvideEnumCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n case ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION:\n return new SendPayloadInChunksTask(this.api, {\n payload,\n commandFactory: (args) =>\n new ProvideTransactionFieldDescriptionCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n case ClearSignContextType.TRANSACTION_INFO:\n case ClearSignContextType.PLUGIN:\n case ClearSignContextType.EXTERNAL_PLUGIN:\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n `The context type [${type}] is not valid as a transaction field or metadata`,\n ),\n });\n case ClearSignContextType.WEB3_CHECK:\n return new SendPayloadInChunksTask(this.api, {\n payload,\n commandFactory: (args) =>\n new ProvideWeb3CheckCommand({\n payload: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n default: {\n const uncoveredType: never = type;\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n `The context type [${uncoveredType}] is not covered`,\n ),\n });\n }\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["ClearSignContextType", "bufferToHexaString", "CommandResultFactory", "InvalidStatusWordError", "isSuccessCommandResult", "LoadCertificateCommand", "Just", "Nothing", "GetChallengeCommand", "ProvideEnumCommand", "ProvideNFTInformationCommand", "ProvideTokenInformationCommand", "ProvideTransactionFieldDescriptionCommand", "ProvideTrustedNameCommand", "ProvideWeb3CheckCommand", "SendPayloadInChunksTask", "ProvideTransactionFieldDescriptionTask", "api", "args", "field", "referenceValues", "value", "provideReferenceResult", "transactionFieldResult", "certificate", "reference", "address", "enumValue", "enumDescriptor", "enumContext", "provideEnumResult", "getChallengeResult", "context", "type", "payload", "uncoveredType"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{ByteArrayBuilder as
|
|
1
|
+
import{ByteArrayBuilder as d,isSuccessCommandResult as o,LoadCertificateCommand as l}from"@ledgerhq/device-management-kit";import{DerivationPathUtils as C}from"@ledgerhq/signer-utils";import{Just as s,Nothing as m}from"purify-ts";import{ProvideTransactionInformationCommand as p}from"../../app-binder/command/ProvideTransactionInformationCommand";import{StoreTransactionCommand as u}from"../../app-binder/command/StoreTransactionCommand";import{ProvideTransactionFieldDescriptionTask as y}from"./ProvideTransactionFieldDescriptionTask";import{SendCommandInChunksTask as h}from"./SendCommandInChunksTask";import{SendPayloadInChunksTask as f}from"./SendPayloadInChunksTask";class w{constructor(a,e){this.api=a;this.args=e}async run(){const a=C.splitPath(this.args.derivationPath),e=new d;e.add8BitUIntToData(a.length),a.forEach(t=>{e.add32BitUIntToData(t)}),e.addBufferToData(this.args.serializedTransaction);const r=await new h(this.api,{data:e.build(),commandFactory:t=>new u({serializedTransaction:t.chunkedData,isFirstChunk:t.isFirstChunk})}).run();if(!o(r))return s(r);if(this.args.context.transactionInfoCertificate){const{keyUsageNumber:t,payload:n}=this.args.context.transactionInfoCertificate;await this.api.sendCommand(new l({keyUsage:t,certificate:n}))}const i=await new f(this.api,{payload:this.args.context.transactionInfo,commandFactory:t=>new p({data:t.chunkedData,isFirstChunk:t.isFirstChunk})}).run();if(!o(i))return s(i);const c=this.args.web3Check?[...this.args.context.transactionFields,this.args.web3Check]:this.args.context.transactionFields;for(const t of c){const n=await new y(this.api,{field:t,serializedTransaction:this.args.serializedTransaction,chainId:this.args.chainId,transactionParser:this.args.transactionParser,contextModule:this.args.contextModule,transactionEnums:this.args.context.transactionEnums}).run();if(n.isJust())return n}return m}}export{w as ProvideTransactionGenericContextTask};
|
|
2
2
|
//# sourceMappingURL=ProvideTransactionGenericContextTask.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/task/ProvideTransactionGenericContextTask.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type ClearSignContextSuccess,\n type ClearSignContextSuccessType,\n type ClearSignContextType,\n type ContextModule,\n type PkiCertificate,\n} from \"@ledgerhq/context-module\";\nimport {\n ByteArrayBuilder,\n type CommandErrorResult,\n type InternalApi,\n isSuccessCommandResult,\n LoadCertificateCommand,\n} from \"@ledgerhq/device-management-kit\";\nimport { DerivationPathUtils } from \"@ledgerhq/signer-utils\";\nimport { Just, type Maybe, Nothing } from \"purify-ts\";\n\nimport { ProvideTransactionInformationCommand } from \"@internal/app-binder/command/ProvideTransactionInformationCommand\";\nimport { StoreTransactionCommand } from \"@internal/app-binder/command/StoreTransactionCommand\";\nimport { type EthErrorCodes } from \"@internal/app-binder/command/utils/ethAppErrors\";\nimport { type TransactionParserService } from \"@internal/transaction/service/parser/TransactionParserService\";\n\nimport { ProvideTransactionFieldDescriptionTask } from \"./ProvideTransactionFieldDescriptionTask\";\nimport { SendCommandInChunksTask } from \"./SendCommandInChunksTask\";\nimport { SendPayloadInChunksTask } from \"./SendPayloadInChunksTask\";\n\nexport type GenericContext = {\n readonly transactionInfo: string;\n readonly transactionInfoCertificate: PkiCertificate;\n readonly transactionFields: ClearSignContextSuccess<\n Exclude<ClearSignContextSuccessType, ClearSignContextType.ENUM>\n >[];\n readonly transactionEnums: ClearSignContextSuccess<ClearSignContextType.ENUM>[];\n};\n\nexport type ProvideTransactionGenericContextTaskArgs = {\n readonly contextModule: ContextModule;\n readonly transactionParser: TransactionParserService;\n readonly chainId: number;\n readonly derivationPath: string;\n readonly serializedTransaction: Uint8Array;\n readonly context: GenericContext;\n};\n\nexport type ProvideTransactionGenericContextTaskErrorCodes =\n void | EthErrorCodes;\n\nexport class ProvideTransactionGenericContextTask {\n constructor(\n private api: InternalApi,\n private args: ProvideTransactionGenericContextTaskArgs,\n ) {}\n\n async run(): Promise<\n Maybe<CommandErrorResult<ProvideTransactionGenericContextTaskErrorCodes>>\n > {\n // Store the transaction in the device memory\n const paths = DerivationPathUtils.splitPath(this.args.derivationPath);\n const builder = new ByteArrayBuilder();\n builder.add8BitUIntToData(paths.length);\n paths.forEach((path) => {\n builder.add32BitUIntToData(path);\n });\n builder.addBufferToData(this.args.serializedTransaction);\n const storeTransactionResult = await new SendCommandInChunksTask(this.api, {\n data: builder.build(),\n commandFactory: (args) =>\n new StoreTransactionCommand({\n serializedTransaction: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n\n if (!isSuccessCommandResult(storeTransactionResult)) {\n return Just(storeTransactionResult);\n }\n\n if (this.args.context.transactionInfoCertificate) {\n const { keyUsageNumber: keyUsage, payload: certificate } =\n this.args.context.transactionInfoCertificate;\n await this.api.sendCommand(\n new LoadCertificateCommand({\n keyUsage,\n certificate,\n }),\n );\n }\n\n // Provide the transaction information\n const transactionInfoResult = await new SendPayloadInChunksTask(this.api, {\n payload: this.args.context.transactionInfo,\n commandFactory: (args) =>\n new ProvideTransactionInformationCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n\n if (!isSuccessCommandResult(transactionInfoResult)) {\n return Just(transactionInfoResult);\n }\n\n // Provide the transaction field description and according metadata reference\n for (const field of
|
|
5
|
-
"mappings": "AAOA,OACE,oBAAAA,EAGA,0BAAAC,EACA,0BAAAC,MACK,kCACP,OAAS,uBAAAC,MAA2B,yBACpC,OAAS,QAAAC,EAAkB,WAAAC,MAAe,YAE1C,OAAS,wCAAAC,MAA4C,oEACrD,OAAS,2BAAAC,MAA+B,uDAIxC,OAAS,0CAAAC,MAA8C,2CACvD,OAAS,2BAAAC,MAA+B,4BACxC,OAAS,2BAAAC,MAA+B,
|
|
6
|
-
"names": ["ByteArrayBuilder", "isSuccessCommandResult", "LoadCertificateCommand", "DerivationPathUtils", "Just", "Nothing", "ProvideTransactionInformationCommand", "StoreTransactionCommand", "ProvideTransactionFieldDescriptionTask", "SendCommandInChunksTask", "SendPayloadInChunksTask", "ProvideTransactionGenericContextTask", "api", "args", "paths", "builder", "path", "storeTransactionResult", "keyUsage", "certificate", "transactionInfoResult", "field", "result"]
|
|
4
|
+
"sourcesContent": ["import {\n type ClearSignContextSuccess,\n type ClearSignContextSuccessType,\n type ClearSignContextType,\n type ContextModule,\n type PkiCertificate,\n} from \"@ledgerhq/context-module\";\nimport {\n ByteArrayBuilder,\n type CommandErrorResult,\n type InternalApi,\n isSuccessCommandResult,\n LoadCertificateCommand,\n} from \"@ledgerhq/device-management-kit\";\nimport { DerivationPathUtils } from \"@ledgerhq/signer-utils\";\nimport { Just, type Maybe, Nothing } from \"purify-ts\";\n\nimport { ProvideTransactionInformationCommand } from \"@internal/app-binder/command/ProvideTransactionInformationCommand\";\nimport { StoreTransactionCommand } from \"@internal/app-binder/command/StoreTransactionCommand\";\nimport { type EthErrorCodes } from \"@internal/app-binder/command/utils/ethAppErrors\";\nimport { type TransactionParserService } from \"@internal/transaction/service/parser/TransactionParserService\";\n\nimport { ProvideTransactionFieldDescriptionTask } from \"./ProvideTransactionFieldDescriptionTask\";\nimport { SendCommandInChunksTask } from \"./SendCommandInChunksTask\";\nimport { SendPayloadInChunksTask } from \"./SendPayloadInChunksTask\";\n\nexport type GenericContext = {\n readonly transactionInfo: string;\n readonly transactionInfoCertificate: PkiCertificate;\n readonly transactionFields: ClearSignContextSuccess<\n Exclude<ClearSignContextSuccessType, ClearSignContextType.ENUM>\n >[];\n readonly transactionEnums: ClearSignContextSuccess<ClearSignContextType.ENUM>[];\n};\n\nexport type ProvideTransactionGenericContextTaskArgs = {\n readonly contextModule: ContextModule;\n readonly transactionParser: TransactionParserService;\n readonly chainId: number;\n readonly derivationPath: string;\n readonly serializedTransaction: Uint8Array;\n readonly context: GenericContext;\n readonly web3Check: ClearSignContextSuccess<ClearSignContextType.WEB3_CHECK> | null;\n};\n\nexport type ProvideTransactionGenericContextTaskErrorCodes =\n void | EthErrorCodes;\n\nexport class ProvideTransactionGenericContextTask {\n constructor(\n private api: InternalApi,\n private args: ProvideTransactionGenericContextTaskArgs,\n ) {}\n\n async run(): Promise<\n Maybe<CommandErrorResult<ProvideTransactionGenericContextTaskErrorCodes>>\n > {\n // Store the transaction in the device memory\n const paths = DerivationPathUtils.splitPath(this.args.derivationPath);\n const builder = new ByteArrayBuilder();\n builder.add8BitUIntToData(paths.length);\n paths.forEach((path) => {\n builder.add32BitUIntToData(path);\n });\n builder.addBufferToData(this.args.serializedTransaction);\n const storeTransactionResult = await new SendCommandInChunksTask(this.api, {\n data: builder.build(),\n commandFactory: (args) =>\n new StoreTransactionCommand({\n serializedTransaction: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n\n if (!isSuccessCommandResult(storeTransactionResult)) {\n return Just(storeTransactionResult);\n }\n\n if (this.args.context.transactionInfoCertificate) {\n const { keyUsageNumber: keyUsage, payload: certificate } =\n this.args.context.transactionInfoCertificate;\n await this.api.sendCommand(\n new LoadCertificateCommand({\n keyUsage,\n certificate,\n }),\n );\n }\n\n // Provide the transaction information\n const transactionInfoResult = await new SendPayloadInChunksTask(this.api, {\n payload: this.args.context.transactionInfo,\n commandFactory: (args) =>\n new ProvideTransactionInformationCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n\n if (!isSuccessCommandResult(transactionInfoResult)) {\n return Just(transactionInfoResult);\n }\n\n // If there is a web3 check, add it to the transactionField array\n const fields = this.args.web3Check\n ? [...this.args.context.transactionFields, this.args.web3Check]\n : this.args.context.transactionFields;\n\n // Provide the transaction field description and according metadata reference\n for (const field of fields) {\n const result = await new ProvideTransactionFieldDescriptionTask(\n this.api,\n {\n field,\n serializedTransaction: this.args.serializedTransaction,\n chainId: this.args.chainId,\n transactionParser: this.args.transactionParser,\n contextModule: this.args.contextModule,\n transactionEnums: this.args.context.transactionEnums,\n },\n ).run();\n\n if (result.isJust()) {\n return result;\n }\n }\n\n return Nothing;\n }\n}\n"],
|
|
5
|
+
"mappings": "AAOA,OACE,oBAAAA,EAGA,0BAAAC,EACA,0BAAAC,MACK,kCACP,OAAS,uBAAAC,MAA2B,yBACpC,OAAS,QAAAC,EAAkB,WAAAC,MAAe,YAE1C,OAAS,wCAAAC,MAA4C,oEACrD,OAAS,2BAAAC,MAA+B,uDAIxC,OAAS,0CAAAC,MAA8C,2CACvD,OAAS,2BAAAC,MAA+B,4BACxC,OAAS,2BAAAC,MAA+B,4BAwBjC,MAAMC,CAAqC,CAChD,YACUC,EACAC,EACR,CAFQ,SAAAD,EACA,UAAAC,CACP,CAEH,MAAM,KAEJ,CAEA,MAAMC,EAAQX,EAAoB,UAAU,KAAK,KAAK,cAAc,EAC9DY,EAAU,IAAIf,EACpBe,EAAQ,kBAAkBD,EAAM,MAAM,EACtCA,EAAM,QAASE,GAAS,CACtBD,EAAQ,mBAAmBC,CAAI,CACjC,CAAC,EACDD,EAAQ,gBAAgB,KAAK,KAAK,qBAAqB,EACvD,MAAME,EAAyB,MAAM,IAAIR,EAAwB,KAAK,IAAK,CACzE,KAAMM,EAAQ,MAAM,EACpB,eAAiBF,GACf,IAAIN,EAAwB,CAC1B,sBAAuBM,EAAK,YAC5B,aAAcA,EAAK,YACrB,CAAC,CACL,CAAC,EAAE,IAAI,EAEP,GAAI,CAACZ,EAAuBgB,CAAsB,EAChD,OAAOb,EAAKa,CAAsB,EAGpC,GAAI,KAAK,KAAK,QAAQ,2BAA4B,CAChD,KAAM,CAAE,eAAgBC,EAAU,QAASC,CAAY,EACrD,KAAK,KAAK,QAAQ,2BACpB,MAAM,KAAK,IAAI,YACb,IAAIjB,EAAuB,CACzB,SAAAgB,EACA,YAAAC,CACF,CAAC,CACH,CACF,CAGA,MAAMC,EAAwB,MAAM,IAAIV,EAAwB,KAAK,IAAK,CACxE,QAAS,KAAK,KAAK,QAAQ,gBAC3B,eAAiBG,GACf,IAAIP,EAAqC,CACvC,KAAMO,EAAK,YACX,aAAcA,EAAK,YACrB,CAAC,CACL,CAAC,EAAE,IAAI,EAEP,GAAI,CAACZ,EAAuBmB,CAAqB,EAC/C,OAAOhB,EAAKgB,CAAqB,EAInC,MAAMC,EAAS,KAAK,KAAK,UACrB,CAAC,GAAG,KAAK,KAAK,QAAQ,kBAAmB,KAAK,KAAK,SAAS,EAC5D,KAAK,KAAK,QAAQ,kBAGtB,UAAWC,KAASD,EAAQ,CAC1B,MAAME,EAAS,MAAM,IAAIf,EACvB,KAAK,IACL,CACE,MAAAc,EACA,sBAAuB,KAAK,KAAK,sBACjC,QAAS,KAAK,KAAK,QACnB,kBAAmB,KAAK,KAAK,kBAC7B,cAAe,KAAK,KAAK,cACzB,iBAAkB,KAAK,KAAK,QAAQ,gBACtC,CACF,EAAE,IAAI,EAEN,GAAIC,EAAO,OAAO,EAChB,OAAOA,CAEX,CAEA,OAAOlB,CACT,CACF",
|
|
6
|
+
"names": ["ByteArrayBuilder", "isSuccessCommandResult", "LoadCertificateCommand", "DerivationPathUtils", "Just", "Nothing", "ProvideTransactionInformationCommand", "StoreTransactionCommand", "ProvideTransactionFieldDescriptionTask", "SendCommandInChunksTask", "SendPayloadInChunksTask", "ProvideTransactionGenericContextTask", "api", "args", "paths", "builder", "path", "storeTransactionResult", "keyUsage", "certificate", "transactionInfoResult", "fields", "field", "result"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{CommandResultFactory as e,InvalidStatusWordError as r}from"@ledgerhq/device-management-kit";import{Just as u,Nothing as m}from"purify-ts";import{makeDeviceActionInternalApiMock as S}from"../../app-binder/device-action/__test-utils__/makeInternalApi";import{ProvideTransactionFieldDescriptionTask as i}from"./ProvideTransactionFieldDescriptionTask";import{ProvideTransactionGenericContextTask as a}from"./ProvideTransactionGenericContextTask";import{SendCommandInChunksTask as s}from"./SendCommandInChunksTask";import{SendPayloadInChunksTask as c}from"./SendPayloadInChunksTask";describe("ProvideTransactionGenericContextTask",()=>{const
|
|
1
|
+
import{CommandResultFactory as e,InvalidStatusWordError as r}from"@ledgerhq/device-management-kit";import{Just as u,Nothing as m}from"purify-ts";import{makeDeviceActionInternalApiMock as S}from"../../app-binder/device-action/__test-utils__/makeInternalApi";import{ProvideTransactionFieldDescriptionTask as i}from"./ProvideTransactionFieldDescriptionTask";import{ProvideTransactionGenericContextTask as a}from"./ProvideTransactionGenericContextTask";import{SendCommandInChunksTask as s}from"./SendCommandInChunksTask";import{SendPayloadInChunksTask as c}from"./SendPayloadInChunksTask";describe("ProvideTransactionGenericContextTask",()=>{const y="44/60'/0'/0'/0/0",v=new Uint8Array([18,52]),l="0x5678",C=[],d=[],x=1,T={},k={},p={keyUsageNumber:0,payload:new Uint8Array([18,52])},t={derivationPath:y,serializedTransaction:v,context:{transactionInfo:l,transactionInfoCertificate:p,transactionFields:C,transactionEnums:d},chainId:x,transactionParser:T,contextModule:k,web3Check:null},n=S();describe("run",()=>{beforeEach(()=>{vi.resetAllMocks()}),describe("should return an error",()=>{it("when storeTransactionResult fail",async()=>{vi.spyOn(s.prototype,"run").mockResolvedValue(e({error:new r("storeTransactionError")})),vi.spyOn(n,"sendCommand").mockResolvedValueOnce(e({data:void 0}));const o=await new a(n,t).run();expect(o).toEqual(u(e({error:new r("storeTransactionError")})))}),it("when provideTransactionInformationResult fail",async()=>{vi.spyOn(s.prototype,"run").mockResolvedValue(e({data:"0x1234"})),vi.spyOn(c.prototype,"run").mockResolvedValue(e({error:new r("provideTransactionInformationError")})),vi.spyOn(n,"sendCommand").mockResolvedValueOnce(e({data:void 0}));const o=await new a(n,t).run();expect(o).toEqual(u(e({error:new r("provideTransactionInformationError")})))}),it("when ProvideTransactionGenericContextTask fail",async()=>{vi.spyOn(s.prototype,"run").mockResolvedValue(e({data:"0x1234"})),vi.spyOn(c.prototype,"run").mockResolvedValue(e({data:"0x5678"})),vi.spyOn(i.prototype,"run").mockResolvedValue(u(e({error:new r("provideTransactionGenericContextTaskError")}))),vi.spyOn(n,"sendCommand").mockResolvedValueOnce(e({data:void 0}));const o=await new a(n,{...t,context:{transactionInfo:l,transactionInfoCertificate:p,transactionFields:[{}],transactionEnums:d}}).run();expect(o).toEqual(u(e({error:new r("provideTransactionGenericContextTaskError")})))})}),it("should call ProvideTransactionFieldDescriptionTask for each field",async()=>{const o=["field-1","field-2"];vi.spyOn(s.prototype,"run").mockResolvedValue(e({data:"0x1234"})),vi.spyOn(c.prototype,"run").mockResolvedValue(e({data:"0x5678"})),vi.spyOn(i.prototype,"run").mockResolvedValue(m),vi.spyOn(n,"sendCommand").mockResolvedValueOnce(e({data:void 0})),await new a(n,{...t,context:{transactionInfo:l,transactionInfoCertificate:p,transactionFields:o,transactionEnums:d}}).run(),expect(i.prototype.run).toHaveBeenCalledTimes(2)}),it("should return Nothing when all fields are provided",async()=>{vi.spyOn(s.prototype,"run").mockResolvedValue(e({data:"0x1234"})),vi.spyOn(c.prototype,"run").mockResolvedValue(e({data:"0x5678"})),vi.spyOn(i.prototype,"run").mockResolvedValue(m),vi.spyOn(n,"sendCommand").mockResolvedValueOnce(e({data:void 0}));const o=await new a(n,t).run();expect(o).toEqual(m)}),it("should load the transaction info certificate",async()=>{vi.spyOn(s.prototype,"run").mockResolvedValue(e({data:"0x1234"})),vi.spyOn(c.prototype,"run").mockResolvedValue(e({data:"0x5678"})),vi.spyOn(i.prototype,"run").mockResolvedValue(m),await new a(n,{...t,context:{transactionInfo:l,transactionInfoCertificate:p,transactionFields:C,transactionEnums:d}}).run(),expect(n.sendCommand).toHaveBeenCalledTimes(1)})})});
|
|
2
2
|
//# sourceMappingURL=ProvideTransactionGenericContextTask.test.js.map
|