@ledgerhq/device-signer-kit-ethereum 1.8.0 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +59 -1
- package/lib/cjs/api/SignerEth.js +1 -1
- package/lib/cjs/api/SignerEth.js.map +1 -1
- package/lib/cjs/api/SignerEthBuilder.test.js +1 -1
- package/lib/cjs/api/SignerEthBuilder.test.js.map +2 -2
- package/lib/cjs/api/app-binder/VerifySafeAddressDeviceActionTypes.js +2 -0
- package/lib/cjs/api/app-binder/VerifySafeAddressDeviceActionTypes.js.map +7 -0
- package/lib/cjs/api/model/SafeAddressOptions.js +2 -0
- package/lib/cjs/api/model/SafeAddressOptions.js.map +7 -0
- package/lib/cjs/internal/DefaultSignerEth.js +1 -1
- package/lib/cjs/internal/DefaultSignerEth.js.map +3 -3
- package/lib/cjs/internal/app-binder/EthAppBinder.js +1 -1
- package/lib/cjs/internal/app-binder/EthAppBinder.js.map +3 -3
- package/lib/cjs/internal/app-binder/command/ProvideSafeAccountCommand.js +2 -0
- package/lib/cjs/internal/app-binder/command/ProvideSafeAccountCommand.js.map +7 -0
- package/lib/cjs/internal/app-binder/command/ProvideSafeAccountCommand.test.js +2 -0
- package/lib/cjs/internal/app-binder/command/ProvideSafeAccountCommand.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/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/VerifySafeAddress/VerifySafeAddress.js +2 -0
- package/lib/cjs/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.js.map +7 -0
- package/lib/cjs/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.test.js +2 -0
- package/lib/cjs/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/BuildBaseContexts.js +1 -1
- package/lib/cjs/internal/app-binder/task/BuildBaseContexts.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/BuildBaseContexts.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/BuildBaseContexts.test.js.map +2 -2
- package/lib/cjs/internal/app-binder/task/BuildSafeAddressContextTask.js +2 -0
- package/lib/cjs/internal/app-binder/task/BuildSafeAddressContextTask.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/BuildSafeAddressContextTask.test.js +2 -0
- package/lib/cjs/internal/app-binder/task/BuildSafeAddressContextTask.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/BuildSubcontextsTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/BuildSubcontextsTask.js.map +2 -2
- package/lib/cjs/internal/app-binder/task/ProvideContextTask.js +2 -0
- package/lib/cjs/internal/app-binder/task/ProvideContextTask.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/ProvideContextTask.test.js +2 -0
- package/lib/cjs/internal/app-binder/task/ProvideContextTask.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/ProvideTransactionContextsTask.js +2 -0
- package/lib/cjs/internal/app-binder/task/ProvideTransactionContextsTask.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/ProvideTransactionContextsTask.test.js +2 -0
- package/lib/cjs/internal/app-binder/task/ProvideTransactionContextsTask.test.js.map +7 -0
- package/lib/cjs/internal/di.js +1 -1
- package/lib/cjs/internal/di.js.map +3 -3
- package/lib/cjs/internal/safe/di/safeModule.js +2 -0
- package/lib/cjs/internal/safe/di/safeModule.js.map +7 -0
- package/lib/cjs/internal/safe/di/safeModule.test.js +2 -0
- package/lib/cjs/internal/safe/di/safeModule.test.js.map +7 -0
- package/lib/cjs/internal/safe/di/safeTypes.js +2 -0
- package/lib/cjs/internal/safe/di/safeTypes.js.map +7 -0
- package/lib/cjs/internal/safe/use-case/VerifySafeAddressUseCase.js +2 -0
- package/lib/cjs/internal/safe/use-case/VerifySafeAddressUseCase.js.map +7 -0
- package/lib/cjs/internal/safe/use-case/VerifySafeAddressUseCase.test.js +2 -0
- package/lib/cjs/internal/safe/use-case/VerifySafeAddressUseCase.test.js.map +7 -0
- package/lib/cjs/package.json +2 -2
- package/lib/esm/api/SignerEthBuilder.test.js +1 -1
- package/lib/esm/api/SignerEthBuilder.test.js.map +2 -2
- package/lib/esm/api/app-binder/VerifySafeAddressDeviceActionTypes.js +2 -0
- package/lib/esm/api/app-binder/VerifySafeAddressDeviceActionTypes.js.map +7 -0
- package/lib/esm/api/model/SafeAddressOptions.js +1 -0
- package/lib/esm/api/model/SafeAddressOptions.js.map +7 -0
- package/lib/esm/internal/DefaultSignerEth.js +1 -1
- package/lib/esm/internal/DefaultSignerEth.js.map +3 -3
- package/lib/esm/internal/app-binder/EthAppBinder.js +1 -1
- package/lib/esm/internal/app-binder/EthAppBinder.js.map +3 -3
- package/lib/esm/internal/app-binder/command/ProvideSafeAccountCommand.js +2 -0
- package/lib/esm/internal/app-binder/command/ProvideSafeAccountCommand.js.map +7 -0
- package/lib/esm/internal/app-binder/command/ProvideSafeAccountCommand.test.js +2 -0
- package/lib/esm/internal/app-binder/command/ProvideSafeAccountCommand.test.js.map +7 -0
- package/lib/esm/internal/app-binder/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/VerifySafeAddress/VerifySafeAddress.js +2 -0
- package/lib/esm/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.js.map +7 -0
- package/lib/esm/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.test.js +2 -0
- package/lib/esm/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.test.js.map +7 -0
- package/lib/esm/internal/app-binder/task/BuildBaseContexts.js +1 -1
- package/lib/esm/internal/app-binder/task/BuildBaseContexts.js.map +3 -3
- package/lib/esm/internal/app-binder/task/BuildBaseContexts.test.js +1 -1
- package/lib/esm/internal/app-binder/task/BuildBaseContexts.test.js.map +3 -3
- package/lib/esm/internal/app-binder/task/BuildSafeAddressContextTask.js +2 -0
- package/lib/esm/internal/app-binder/task/BuildSafeAddressContextTask.js.map +7 -0
- package/lib/esm/internal/app-binder/task/BuildSafeAddressContextTask.test.js +2 -0
- package/lib/esm/internal/app-binder/task/BuildSafeAddressContextTask.test.js.map +7 -0
- package/lib/esm/internal/app-binder/task/BuildSubcontextsTask.js +1 -1
- package/lib/esm/internal/app-binder/task/BuildSubcontextsTask.js.map +2 -2
- package/lib/esm/internal/app-binder/task/ProvideContextTask.js +2 -0
- package/lib/esm/internal/app-binder/task/ProvideContextTask.js.map +7 -0
- package/lib/esm/internal/app-binder/task/ProvideContextTask.test.js +2 -0
- package/lib/esm/internal/app-binder/task/ProvideContextTask.test.js.map +7 -0
- package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.js +1 -1
- package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.js.map +3 -3
- package/lib/esm/internal/app-binder/task/ProvideTransactionContextsTask.js +2 -0
- package/lib/esm/internal/app-binder/task/ProvideTransactionContextsTask.js.map +7 -0
- package/lib/esm/internal/app-binder/task/ProvideTransactionContextsTask.test.js +2 -0
- package/lib/esm/internal/app-binder/task/ProvideTransactionContextsTask.test.js.map +7 -0
- package/lib/esm/internal/di.js +1 -1
- package/lib/esm/internal/di.js.map +3 -3
- package/lib/esm/internal/safe/di/safeModule.js +2 -0
- package/lib/esm/internal/safe/di/safeModule.js.map +7 -0
- package/lib/esm/internal/safe/di/safeModule.test.js +2 -0
- package/lib/esm/internal/safe/di/safeModule.test.js.map +7 -0
- package/lib/esm/internal/safe/di/safeTypes.js +2 -0
- package/lib/esm/internal/safe/di/safeTypes.js.map +7 -0
- package/lib/esm/internal/safe/use-case/VerifySafeAddressUseCase.js +2 -0
- package/lib/esm/internal/safe/use-case/VerifySafeAddressUseCase.js.map +7 -0
- package/lib/esm/internal/safe/use-case/VerifySafeAddressUseCase.test.js +2 -0
- package/lib/esm/internal/safe/use-case/VerifySafeAddressUseCase.test.js.map +7 -0
- package/lib/esm/package.json +2 -2
- package/lib/types/api/SignerEth.d.ts +3 -0
- package/lib/types/api/SignerEth.d.ts.map +1 -1
- package/lib/types/api/app-binder/VerifySafeAddressDeviceActionTypes.d.ts +30 -0
- package/lib/types/api/app-binder/VerifySafeAddressDeviceActionTypes.d.ts.map +1 -0
- package/lib/types/api/model/SafeAddressOptions.d.ts +5 -0
- package/lib/types/api/model/SafeAddressOptions.d.ts.map +1 -0
- package/lib/types/internal/DefaultSignerEth.d.ts +3 -0
- package/lib/types/internal/DefaultSignerEth.d.ts.map +1 -1
- package/lib/types/internal/app-binder/EthAppBinder.d.ts +6 -0
- package/lib/types/internal/app-binder/EthAppBinder.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/ProvideSafeAccountCommand.d.ts +34 -0
- package/lib/types/internal/app-binder/command/ProvideSafeAccountCommand.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/ProvideSafeAccountCommand.test.d.ts +2 -0
- package/lib/types/internal/app-binder/command/ProvideSafeAccountCommand.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.d.ts +3 -3
- package/lib/types/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.d.ts.map +1 -1
- package/lib/types/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.d.ts +20 -0
- package/lib/types/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.d.ts.map +1 -0
- package/lib/types/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.test.d.ts +2 -0
- package/lib/types/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/BuildBaseContexts.d.ts +3 -1
- package/lib/types/internal/app-binder/task/BuildBaseContexts.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/BuildSafeAddressContextTask.d.ts +19 -0
- package/lib/types/internal/app-binder/task/BuildSafeAddressContextTask.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/BuildSafeAddressContextTask.test.d.ts +2 -0
- package/lib/types/internal/app-binder/task/BuildSafeAddressContextTask.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/BuildSubcontextsTask.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/ProvideContextTask.d.ts +22 -0
- package/lib/types/internal/app-binder/task/ProvideContextTask.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/ProvideContextTask.test.d.ts +2 -0
- package/lib/types/internal/app-binder/task/ProvideContextTask.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/ProvideEIP712ContextTask.d.ts +2 -2
- package/lib/types/internal/app-binder/task/ProvideEIP712ContextTask.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/ProvideTransactionContextsTask.d.ts +36 -0
- package/lib/types/internal/app-binder/task/ProvideTransactionContextsTask.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/ProvideTransactionContextsTask.test.d.ts +2 -0
- package/lib/types/internal/app-binder/task/ProvideTransactionContextsTask.test.d.ts.map +1 -0
- package/lib/types/internal/di.d.ts.map +1 -1
- package/lib/types/internal/safe/di/safeModule.d.ts +3 -0
- package/lib/types/internal/safe/di/safeModule.d.ts.map +1 -0
- package/lib/types/internal/safe/di/safeModule.test.d.ts +2 -0
- package/lib/types/internal/safe/di/safeModule.test.d.ts.map +1 -0
- package/lib/types/internal/safe/di/safeTypes.d.ts +4 -0
- package/lib/types/internal/safe/di/safeTypes.d.ts.map +1 -0
- package/lib/types/internal/safe/use-case/VerifySafeAddressUseCase.d.ts +9 -0
- package/lib/types/internal/safe/use-case/VerifySafeAddressUseCase.d.ts.map +1 -0
- package/lib/types/internal/safe/use-case/VerifySafeAddressUseCase.test.d.ts +2 -0
- package/lib/types/internal/safe/use-case/VerifySafeAddressUseCase.test.d.ts.map +1 -0
- package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
- package/package.json +6 -6
- package/lib/cjs/internal/app-binder/task/ProvideContextsTask.js +0 -2
- package/lib/cjs/internal/app-binder/task/ProvideContextsTask.js.map +0 -7
- package/lib/cjs/internal/app-binder/task/ProvideContextsTask.test.js +0 -2
- package/lib/cjs/internal/app-binder/task/ProvideContextsTask.test.js.map +0 -7
- package/lib/esm/internal/app-binder/task/ProvideContextsTask.js +0 -2
- package/lib/esm/internal/app-binder/task/ProvideContextsTask.js.map +0 -7
- package/lib/esm/internal/app-binder/task/ProvideContextsTask.test.js +0 -2
- package/lib/esm/internal/app-binder/task/ProvideContextsTask.test.js.map +0 -7
- package/lib/types/internal/app-binder/task/ProvideContextsTask.d.ts +0 -44
- package/lib/types/internal/app-binder/task/ProvideContextsTask.d.ts.map +0 -1
- package/lib/types/internal/app-binder/task/ProvideContextsTask.test.d.ts +0 -2
- package/lib/types/internal/app-binder/task/ProvideContextsTask.test.d.ts.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ledgerhq/device-signer-kit-ethereum",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.9.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"exports": {
|
|
@@ -31,17 +31,17 @@
|
|
|
31
31
|
"@types/semver": "7.7.0",
|
|
32
32
|
"rxjs": "7.8.2",
|
|
33
33
|
"ts-node": "10.9.2",
|
|
34
|
-
"@ledgerhq/context-module": "1.
|
|
35
|
-
"@ledgerhq/device-management-kit": "0.9.0",
|
|
34
|
+
"@ledgerhq/context-module": "1.9.0",
|
|
36
35
|
"@ledgerhq/ldmk-tool": "0.0.1",
|
|
37
36
|
"@ledgerhq/eslint-config-dsdk": "0.0.2",
|
|
38
|
-
"@ledgerhq/prettier-config-dsdk": "0.0.2",
|
|
39
37
|
"@ledgerhq/tsconfig-dsdk": "1.0.1",
|
|
38
|
+
"@ledgerhq/device-management-kit": "0.9.2",
|
|
39
|
+
"@ledgerhq/prettier-config-dsdk": "0.0.2",
|
|
40
40
|
"@ledgerhq/vitest-config-dmk": "0.0.0"
|
|
41
41
|
},
|
|
42
42
|
"peerDependencies": {
|
|
43
|
-
"@ledgerhq/
|
|
44
|
-
"@ledgerhq/
|
|
43
|
+
"@ledgerhq/context-module": "1.9.0",
|
|
44
|
+
"@ledgerhq/device-management-kit": "0.9.2"
|
|
45
45
|
},
|
|
46
46
|
"scripts": {
|
|
47
47
|
"prebuild": "rimraf lib",
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";var c=Object.defineProperty;var E=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var R=Object.prototype.hasOwnProperty;var A=(d,a)=>{for(var n in a)c(d,n,{get:a[n],enumerable:!0})},S=(d,a,n,s)=>{if(a&&typeof a=="object"||typeof a=="function")for(let t of x(a))!R.call(d,t)&&t!==n&&c(d,t,{get:()=>a[t],enumerable:!(s=E(a,t))||s.enumerable});return d};var D=d=>S(c({},"__esModule",{value:!0}),d);var g={};A(g,{ProvideContextsTask:()=>O});module.exports=D(g);var r=require("@ledgerhq/context-module"),i=require("@ledgerhq/device-management-kit"),h=require("@ledgerhq/signer-utils"),C=require("purify-ts"),k=require("../../app-binder/command/ProvideEnumCommand"),u=require("../../app-binder/command/ProvideNetworkConfigurationCommand"),p=require("../../app-binder/command/ProvideNFTInformationCommand"),T=require("../../app-binder/command/ProvideProxyInfoCommand"),y=require("../../app-binder/command/ProvideTokenInformationCommand"),f=require("../../app-binder/command/ProvideTransactionFieldDescriptionCommand"),I=require("../../app-binder/command/ProvideTransactionInformationCommand"),F=require("../../app-binder/command/ProvideTrustedNameCommand"),l=require("../../app-binder/command/ProvideWeb3CheckCommand"),_=require("../../app-binder/command/SetExternalPluginCommand"),P=require("../../app-binder/command/SetPluginCommand"),w=require("../../app-binder/command/StoreTransactionCommand"),v=require("./SendCommandInChunksTask"),N=require("./SendPayloadInChunksTask");class O{constructor(a,n,s=(o,e)=>new N.SendPayloadInChunksTask(o,e),t=(o,e)=>new v.SendCommandInChunksTask(o,e)){this._api=a;this._args=n;this._sendPayloadInChunksTaskFactory=s;this._sendCommandInChunksTaskFactory=t}async run(){let a=!1;for(const{context:n,subcontextCallbacks:s}of this._args.contexts){for(const o of s){const e=await o();if(e.type===r.ClearSignContextType.ERROR)continue;const m=await this.provideContext(e);if(!(0,i.isSuccessCommandResult)(m))return(0,C.Left)(m)}if(n.type===r.ClearSignContextType.PROXY_INFO)continue;if(!a&&this._args.serializedTransaction!==void 0&&n.type===r.ClearSignContextType.TRANSACTION_INFO){a=!0;const o=h.DerivationPathUtils.splitPath(this._args.derivationPath),e=new i.ByteArrayBuilder;e.add8BitUIntToData(o.length),o.forEach(m=>{e.add32BitUIntToData(m)}),e.addBufferToData(this._args.serializedTransaction),await this._sendCommandInChunksTaskFactory(this._api,{data:e.build(),commandFactory:m=>new w.StoreTransactionCommand({serializedTransaction:m.chunkedData,isFirstChunk:m.isFirstChunk})}).run()}const t=await this.provideContext(n);if(!(0,i.isSuccessCommandResult)(t))return(0,C.Left)(t)}return(0,C.Right)(void 0)}async provideContext({type:a,payload:n,certificate:s}){switch(s&&await this._api.sendCommand(new i.LoadCertificateCommand({keyUsage:s.keyUsageNumber,certificate:s.payload})),a){case r.ClearSignContextType.PLUGIN:return await this._api.sendCommand(new P.SetPluginCommand({payload:n}));case r.ClearSignContextType.EXTERNAL_PLUGIN:return await this._api.sendCommand(new _.SetExternalPluginCommand({payload:n}));case r.ClearSignContextType.NFT:return await this._api.sendCommand(new p.ProvideNFTInformationCommand({payload:n}));case r.ClearSignContextType.TOKEN:return await this._api.sendCommand(new y.ProvideTokenInformationCommand({payload:n}));case r.ClearSignContextType.TRANSACTION_INFO:return await this._sendPayloadInChunksTaskFactory(this._api,{payload:n,commandFactory:o=>new I.ProvideTransactionInformationCommand({data:o.chunkedData,isFirstChunk:o.isFirstChunk})}).run();case r.ClearSignContextType.TRUSTED_NAME:return this._sendPayloadInChunksTaskFactory(this._api,{payload:n,commandFactory:t=>new F.ProvideTrustedNameCommand({data:t.chunkedData,isFirstChunk:t.isFirstChunk})}).run();case r.ClearSignContextType.ENUM:return this._sendPayloadInChunksTaskFactory(this._api,{payload:n,commandFactory:t=>new k.ProvideEnumCommand({data:t.chunkedData,isFirstChunk:t.isFirstChunk})}).run();case r.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION:return this._sendPayloadInChunksTaskFactory(this._api,{payload:n,commandFactory:t=>new f.ProvideTransactionFieldDescriptionCommand({data:t.chunkedData,isFirstChunk:t.isFirstChunk})}).run();case r.ClearSignContextType.WEB3_CHECK:return this._sendPayloadInChunksTaskFactory(this._api,{payload:n,commandFactory:t=>new l.ProvideWeb3CheckCommand({payload:t.chunkedData,isFirstChunk:t.isFirstChunk})}).run();case r.ClearSignContextType.PROXY_INFO:return this._sendPayloadInChunksTaskFactory(this._api,{payload:n,commandFactory:t=>new T.ProvideProxyInfoCommand({data:t.chunkedData,isFirstChunk:t.isFirstChunk})}).run();case r.ClearSignContextType.DYNAMIC_NETWORK:return this._sendPayloadInChunksTaskFactory(this._api,{payload:n,commandFactory:t=>new u.ProvideNetworkConfigurationCommand({data:t.chunkedData,isFirstChunk:t.isFirstChunk,configurationType:u.NetworkConfigurationType.CONFIGURATION})}).run();case r.ClearSignContextType.DYNAMIC_NETWORK_ICON:return this._sendPayloadInChunksTaskFactory(this._api,{payload:n,commandFactory:t=>new u.ProvideNetworkConfigurationCommand({data:t.chunkedData,isFirstChunk:t.isFirstChunk,configurationType:u.NetworkConfigurationType.ICON}),withPayloadLength:!1}).run();default:{const t=a;return(0,i.CommandResultFactory)({error:new i.InvalidStatusWordError(`The context type [${t}] is not covered`)})}}}}0&&(module.exports={ProvideContextsTask});
|
|
2
|
-
//# sourceMappingURL=ProvideContextsTask.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../../src/internal/app-binder/task/ProvideContextsTask.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type ClearSignContextSuccess,\n ClearSignContextType,\n} from \"@ledgerhq/context-module\";\nimport {\n ByteArrayBuilder,\n type CommandErrorResult,\n type CommandResult,\n CommandResultFactory,\n type InternalApi,\n InvalidStatusWordError,\n isSuccessCommandResult,\n LoadCertificateCommand,\n} from \"@ledgerhq/device-management-kit\";\nimport { DerivationPathUtils } from \"@ledgerhq/signer-utils\";\nimport { type Either, Left, Right } from \"purify-ts\";\n\nimport { ProvideEnumCommand } from \"@internal/app-binder/command/ProvideEnumCommand\";\nimport {\n NetworkConfigurationType,\n ProvideNetworkConfigurationCommand,\n} from \"@internal/app-binder/command/ProvideNetworkConfigurationCommand\";\nimport { ProvideNFTInformationCommand } from \"@internal/app-binder/command/ProvideNFTInformationCommand\";\nimport { ProvideProxyInfoCommand } from \"@internal/app-binder/command/ProvideProxyInfoCommand\";\nimport { ProvideTokenInformationCommand } from \"@internal/app-binder/command/ProvideTokenInformationCommand\";\nimport { ProvideTransactionFieldDescriptionCommand } from \"@internal/app-binder/command/ProvideTransactionFieldDescriptionCommand\";\nimport { ProvideTransactionInformationCommand } from \"@internal/app-binder/command/ProvideTransactionInformationCommand\";\nimport { ProvideTrustedNameCommand } from \"@internal/app-binder/command/ProvideTrustedNameCommand\";\nimport { ProvideWeb3CheckCommand } from \"@internal/app-binder/command/ProvideWeb3CheckCommand\";\nimport { SetExternalPluginCommand } from \"@internal/app-binder/command/SetExternalPluginCommand\";\nimport { SetPluginCommand } from \"@internal/app-binder/command/SetPluginCommand\";\nimport { StoreTransactionCommand } from \"@internal/app-binder/command/StoreTransactionCommand\";\nimport { type EthErrorCodes } from \"@internal/app-binder/command/utils/ethAppErrors\";\n\nimport { type ContextWithSubContexts } from \"./BuildFullContextsTask\";\nimport {\n SendCommandInChunksTask,\n type SendCommandInChunksTaskArgs,\n} from \"./SendCommandInChunksTask\";\nimport {\n SendPayloadInChunksTask,\n type SendPayloadInChunksTaskArgs,\n} from \"./SendPayloadInChunksTask\";\n\nexport type ProvideContextsTaskArgs = {\n /**\n * The list of clear sign context with subcontexts callback to provide.\n */\n contexts: ContextWithSubContexts[];\n /**\n * The derivation path to provide.\n */\n derivationPath: string;\n /**\n * The serialized transaction to provide.\n * This parameter is optional in the case there is no transaction at all, for instance\n * if there is only a standalone calldata embedded in a message.\n */\n serializedTransaction?: Uint8Array;\n};\n\nexport type ProvideContextsTaskResult = Either<\n CommandErrorResult<EthErrorCodes>,\n void\n>;\n\n/**\n * This task is responsible for providing the transaction context to the device.\n * It will send the subcontexts callbacks in order and finish with the context.\n */\nexport class ProvideContextsTask {\n constructor(\n private _api: InternalApi,\n private _args: ProvideContextsTaskArgs,\n private _sendPayloadInChunksTaskFactory = (\n api: InternalApi,\n args: SendPayloadInChunksTaskArgs<unknown>,\n ) => new SendPayloadInChunksTask(api, args),\n private _sendCommandInChunksTaskFactory = (\n api: InternalApi,\n args: SendCommandInChunksTaskArgs<unknown>,\n ) => new SendCommandInChunksTask(api, args),\n ) {}\n\n async run(): Promise<ProvideContextsTaskResult> {\n let transactionInfoProvided = false;\n\n for (const { context, subcontextCallbacks } of this._args.contexts) {\n for (const callback of subcontextCallbacks) {\n const subcontext = await callback();\n\n if (subcontext.type === ClearSignContextType.ERROR) {\n // silently ignore error subcontexts\n continue;\n }\n\n const res = await this.provideContext(subcontext);\n if (!isSuccessCommandResult(res)) {\n return Left(res);\n }\n }\n\n if (context.type === ClearSignContextType.PROXY_INFO) {\n // In this specific case, the context is not valid as the challenge is not valid on the first call\n // the real data is provided in the subcontext callback\n continue;\n }\n\n if (\n !transactionInfoProvided &&\n this._args.serializedTransaction !== undefined &&\n context.type === ClearSignContextType.TRANSACTION_INFO\n ) {\n // Send the serialized transaction for the first TRANSACTION_INFO.\n // All other TRANSACTION_INFO contexts will be ignored as it will be for nested calldata.\n transactionInfoProvided = true;\n\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 await this._sendCommandInChunksTaskFactory(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\n const res = await this.provideContext(context);\n if (!isSuccessCommandResult(res)) {\n return Left(res);\n }\n }\n\n return Right(void 0);\n }\n\n /**\n * This method will send the context to the device.\n *\n * @param context The clear sign context to provide.\n * @returns A promise that resolves when the command is sent.\n */\n async provideContext({\n type,\n payload,\n certificate,\n }: ClearSignContextSuccess): Promise<CommandResult<unknown, EthErrorCodes>> {\n // if a certificate is provided, we load it before sending the command\n if (certificate) {\n await this._api.sendCommand(\n new LoadCertificateCommand({\n keyUsage: certificate.keyUsageNumber,\n certificate: certificate.payload,\n }),\n );\n }\n\n switch (type) {\n case ClearSignContextType.PLUGIN: {\n return await this._api.sendCommand(new SetPluginCommand({ payload }));\n }\n case ClearSignContextType.EXTERNAL_PLUGIN: {\n return await this._api.sendCommand(\n new SetExternalPluginCommand({ payload }),\n );\n }\n case ClearSignContextType.NFT: {\n return await this._api.sendCommand(\n new ProvideNFTInformationCommand({ payload }),\n );\n }\n case ClearSignContextType.TOKEN: {\n return await this._api.sendCommand(\n new ProvideTokenInformationCommand({ payload }),\n );\n }\n case ClearSignContextType.TRANSACTION_INFO: {\n const transactionInfoResult =\n await this._sendPayloadInChunksTaskFactory(this._api, {\n payload,\n commandFactory: (args) =>\n new ProvideTransactionInformationCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n\n return transactionInfoResult;\n }\n case ClearSignContextType.TRUSTED_NAME: {\n return this._sendPayloadInChunksTaskFactory(this._api, {\n payload,\n commandFactory: (args) =>\n new ProvideTrustedNameCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n }\n case ClearSignContextType.ENUM:\n return this._sendPayloadInChunksTaskFactory(this._api, {\n payload,\n commandFactory: (args) =>\n new ProvideEnumCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n case ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION:\n return this._sendPayloadInChunksTaskFactory(this._api, {\n payload,\n commandFactory: (args) =>\n new ProvideTransactionFieldDescriptionCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n case ClearSignContextType.WEB3_CHECK:\n return this._sendPayloadInChunksTaskFactory(this._api, {\n payload,\n commandFactory: (args) =>\n new ProvideWeb3CheckCommand({\n payload: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n case ClearSignContextType.PROXY_INFO:\n return this._sendPayloadInChunksTaskFactory(this._api, {\n payload,\n commandFactory: (args) =>\n new ProvideProxyInfoCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n case ClearSignContextType.DYNAMIC_NETWORK:\n // Dynamic network configuration uses the existing ProvideNetworkConfiguration command\n // but is provided as part of the context flow\n return this._sendPayloadInChunksTaskFactory(this._api, {\n payload,\n commandFactory: (args) =>\n new ProvideNetworkConfigurationCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n configurationType: NetworkConfigurationType.CONFIGURATION,\n }),\n }).run();\n case ClearSignContextType.DYNAMIC_NETWORK_ICON: {\n return this._sendPayloadInChunksTaskFactory(this._api, {\n payload,\n commandFactory: (args) =>\n new ProvideNetworkConfigurationCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n configurationType: NetworkConfigurationType.ICON,\n }),\n withPayloadLength: false,\n }).run();\n }\n 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": ["ProvideContextsTask_exports", "__export", "ProvideContextsTask", "__toCommonJS", "import_context_module", "import_device_management_kit", "import_signer_utils", "import_purify_ts", "import_ProvideEnumCommand", "import_ProvideNetworkConfigurationCommand", "import_ProvideNFTInformationCommand", "import_ProvideProxyInfoCommand", "import_ProvideTokenInformationCommand", "import_ProvideTransactionFieldDescriptionCommand", "import_ProvideTransactionInformationCommand", "import_ProvideTrustedNameCommand", "import_ProvideWeb3CheckCommand", "import_SetExternalPluginCommand", "import_SetPluginCommand", "import_StoreTransactionCommand", "import_SendCommandInChunksTask", "import_SendPayloadInChunksTask", "_api", "_args", "_sendPayloadInChunksTaskFactory", "api", "args", "_sendCommandInChunksTaskFactory", "transactionInfoProvided", "context", "subcontextCallbacks", "callback", "subcontext", "res", "paths", "builder", "path", "type", "payload", "certificate", "uncoveredType"]
|
|
7
|
-
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";var a=require("@ledgerhq/context-module"),x=require("@ledgerhq/device-management-kit"),m=require("purify-ts"),E=require("../../app-binder/command/ProvideEnumCommand"),F=require("../../app-binder/command/ProvideNetworkConfigurationCommand"),f=require("../../app-binder/command/ProvideNFTInformationCommand"),b=require("../../app-binder/command/ProvideProxyInfoCommand"),h=require("../../app-binder/command/ProvideTokenInformationCommand"),A=require("../../app-binder/command/ProvideTransactionFieldDescriptionCommand"),P=require("../../app-binder/command/ProvideTransactionInformationCommand"),N=require("../../app-binder/command/ProvideTrustedNameCommand"),B=require("../../app-binder/command/ProvideWeb3CheckCommand"),R=require("../../app-binder/command/SetExternalPluginCommand"),g=require("../../app-binder/command/SetPluginCommand"),w=require("../../app-binder/command/StoreTransactionCommand"),O=require("../../app-binder/device-action/__test-utils__/makeInternalApi"),i=require("./ProvideContextsTask"),U=require("./SendCommandInChunksTask"),H=require("./SendPayloadInChunksTask");describe("ProvideContextsTask",()=>{const e=(0,O.makeDeviceActionInternalApiMock)(),c=(0,x.CommandResultFactory)({data:void 0}),T=(0,x.CommandResultFactory)({data:void 0,error:{}});beforeEach(()=>{vi.resetAllMocks()}),describe("run",()=>{const o=vi.fn(),u=vi.fn(),r=vi.fn(),d=vi.fn();beforeEach(()=>{vi.clearAllMocks(),r.mockImplementation((t,s)=>({run:()=>u(t,s)})),d.mockImplementation((t,s)=>({run:()=>o(t,s)}))}),describe("with no subcontexts",()=>{it("should provide the transaction context for a TRANSACTION_INFO context",async()=>{const t={contexts:[{context:{type:a.ClearSignContextType.TRANSACTION_INFO,payload:"0x00",certificate:{keyUsageNumber:1,payload:new Uint8Array([1,2,3])}},subcontextCallbacks:[]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};u.mockResolvedValue(c),o.mockResolvedValue(c),e.sendCommand.mockResolvedValue(c);const n=await new i.ProvideContextsTask(e,t,d,r).run();expect(n).toEqual((0,m.Right)(void 0)),expect(u).toHaveBeenCalledTimes(1),expect(r).toHaveBeenCalledWith(e,{data:new Uint8Array([5,128,0,0,44,128,0,0,60,128,0,0,0,0,0,0,0,0,0,0,0]),commandFactory:expect.any(Function)});const y=r.mock.calls[0][1].commandFactory,l={chunkedData:new Uint8Array([1,2,3,4]),isFirstChunk:!0},p=y(l);expect(p).toBeInstanceOf(w.StoreTransactionCommand),expect(e.sendCommand).toHaveBeenCalledTimes(1),expect(e.sendCommand).toHaveBeenCalledWith(expect.any(x.LoadCertificateCommand)),expect(o).toHaveBeenCalledTimes(1),expect(o).toHaveBeenCalledWith(e,{payload:"0x00",commandFactory:expect.any(Function)});const k=o.mock.calls[0][1].commandFactory,v=k(l);expect(v).toBeInstanceOf(P.ProvideTransactionInformationCommand)}),it("should provide the transaction context for a TRANSACTION_INFO context without certificate",async()=>{const t={contexts:[{context:{type:a.ClearSignContextType.TRANSACTION_INFO,payload:"0x00"},subcontextCallbacks:[]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};u.mockResolvedValue(c),o.mockResolvedValue(c),e.sendCommand.mockResolvedValue(c);const n=await new i.ProvideContextsTask(e,t,d,r).run();expect(n).toEqual((0,m.Right)(void 0)),expect(u).toHaveBeenCalledTimes(1),expect(r).toHaveBeenCalledWith(e,{data:new Uint8Array([5,128,0,0,44,128,0,0,60,128,0,0,0,0,0,0,0,0,0,0,0]),commandFactory:expect.any(Function)});const y=r.mock.calls[0][1].commandFactory,l={chunkedData:new Uint8Array([1,2,3,4]),isFirstChunk:!0},p=y(l);expect(p).toBeInstanceOf(w.StoreTransactionCommand),expect(e.sendCommand).toHaveBeenCalledTimes(0),expect(o).toHaveBeenCalledTimes(1),expect(o).toHaveBeenCalledWith(e,{payload:"0x00",commandFactory:expect.any(Function)});const k=o.mock.calls[0][1].commandFactory,v=k(l);expect(v).toBeInstanceOf(P.ProvideTransactionInformationCommand)}),it.each([[a.ClearSignContextType.PLUGIN,g.SetPluginCommand],[a.ClearSignContextType.EXTERNAL_PLUGIN,R.SetExternalPluginCommand],[a.ClearSignContextType.NFT,f.ProvideNFTInformationCommand],[a.ClearSignContextType.TOKEN,h.ProvideTokenInformationCommand]])("should provide the transaction context by calling sendCommand for a %s context",async(t,s)=>{const n={contexts:[{context:{type:t,payload:"payload"},subcontextCallbacks:[]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};e.sendCommand.mockResolvedValue(c);const y=await new i.ProvideContextsTask(e,n,d,r).run();expect(y).toEqual((0,m.Right)(void 0)),expect(e.sendCommand).toHaveBeenCalledTimes(1),expect(e.sendCommand).toHaveBeenCalledWith(expect.any(s))}),it.each([[a.ClearSignContextType.ENUM,E.ProvideEnumCommand],[a.ClearSignContextType.TRUSTED_NAME,N.ProvideTrustedNameCommand],[a.ClearSignContextType.WEB3_CHECK,B.ProvideWeb3CheckCommand],[a.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,A.ProvideTransactionFieldDescriptionCommand],[a.ClearSignContextType.DYNAMIC_NETWORK_ICON,F.ProvideNetworkConfigurationCommand,!1],[a.ClearSignContextType.DYNAMIC_NETWORK,F.ProvideNetworkConfigurationCommand]])("should provide the transaction context by calling sendPayloadInChunksTask for a %s context",async(t,s,n=void 0)=>{const C={contexts:[{context:{type:t,payload:"payload",id:1,value:1},subcontextCallbacks:[]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};o.mockResolvedValue(c);const l=await new i.ProvideContextsTask(e,C,d,r).run();expect(l).toEqual((0,m.Right)(void 0)),expect(o).toHaveBeenCalledTimes(1),n===void 0?expect(o).toHaveBeenCalledWith(e,{payload:"payload",commandFactory:expect.any(Function)}):expect(o).toHaveBeenCalledWith(e,{payload:"payload",commandFactory:expect.any(Function),withPayloadLength:n});const I=d.mock.calls[0][1].commandFactory,k={chunkedData:new Uint8Array([1,2,3]),isFirstChunk:!0},v=I(k);expect(v).toBeInstanceOf(s)}),it("should only provide the subcontexts if the context is a PROXY_INFO",async()=>{const t={contexts:[{context:{type:a.ClearSignContextType.PROXY_INFO,payload:"payload"},subcontextCallbacks:[()=>Promise.resolve({type:a.ClearSignContextType.PROXY_INFO,payload:"subcontext payload"})]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};o.mockResolvedValue(c);const n=await new i.ProvideContextsTask(e,t,d,r).run();expect(n).toEqual((0,m.Right)(void 0)),expect(o).toHaveBeenCalledTimes(1),expect(o).toHaveBeenCalledWith(e,{payload:"subcontext payload",commandFactory:expect.any(Function)});const y=d.mock.calls[0][1].commandFactory,l={chunkedData:new Uint8Array([1,2,3]),isFirstChunk:!0},p=y(l);expect(p).toBeInstanceOf(b.ProvideProxyInfoCommand)}),it("should skip the subcontexts if the context is an error",async()=>{const t={contexts:[{context:{type:a.ClearSignContextType.TOKEN,payload:"payload",certificate:{keyUsageNumber:1,payload:new Uint8Array([1,2,3])}},subcontextCallbacks:[()=>Promise.resolve({type:a.ClearSignContextType.ERROR,error:new Error("error")})]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};o.mockResolvedValue(c),e.sendCommand.mockResolvedValue(c);const n=await new i.ProvideContextsTask(e,t,d,r).run();expect(n).toEqual((0,m.Right)(void 0)),expect(o).toHaveBeenCalledTimes(0),expect(u).toHaveBeenCalledTimes(0),expect(e.sendCommand).toHaveBeenCalledTimes(2),expect(e.sendCommand).toHaveBeenNthCalledWith(1,expect.any(x.LoadCertificateCommand)),expect(e.sendCommand).toHaveBeenNthCalledWith(2,expect.any(h.ProvideTokenInformationCommand))})}),describe("with subcontexts",()=>{it("should provide the transaction context and subcontext for a TRANSACTION_FIELD_DESCRIPTION context",async()=>{const t={contexts:[{context:{type:a.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"payload"},subcontextCallbacks:[()=>Promise.resolve({type:a.ClearSignContextType.TOKEN,payload:"payload"})]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};o.mockResolvedValue(c),e.sendCommand.mockResolvedValue(c);const n=await new i.ProvideContextsTask(e,t,d,r).run();expect(n).toEqual((0,m.Right)(void 0)),expect(o).toHaveBeenCalledTimes(1),expect(o).toHaveBeenCalledWith(e,{payload:"payload",commandFactory:expect.any(Function)});const y=d.mock.calls[0][1].commandFactory,l={chunkedData:new Uint8Array([1,2,3]),isFirstChunk:!0},p=y(l);expect(p).toBeInstanceOf(A.ProvideTransactionFieldDescriptionCommand),expect(e.sendCommand).toHaveBeenCalledTimes(1),expect(e.sendCommand).toHaveBeenCalledWith(expect.any(h.ProvideTokenInformationCommand))}),it("should provide the transaction context and subcontexts for a TRUSTED_NAME context",async()=>{const t={contexts:[{context:{type:a.ClearSignContextType.TRUSTED_NAME,payload:"payload"},subcontextCallbacks:[()=>Promise.resolve({type:a.ClearSignContextType.NFT,payload:"payload1"}),()=>Promise.resolve({type:a.ClearSignContextType.TOKEN,payload:"payload2"})]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};o.mockResolvedValue(c),e.sendCommand.mockResolvedValue(c);const n=await new i.ProvideContextsTask(e,t,d,r).run();expect(n).toEqual((0,m.Right)(void 0)),expect(o).toHaveBeenCalledTimes(1),expect(o).toHaveBeenCalledWith(e,{payload:"payload",commandFactory:expect.any(Function)});const y=d.mock.calls[0][1].commandFactory,l={chunkedData:new Uint8Array([1,2,3]),isFirstChunk:!0},p=y(l);expect(p).toBeInstanceOf(N.ProvideTrustedNameCommand),expect(e.sendCommand).toHaveBeenCalledTimes(2),expect(e.sendCommand).toHaveBeenNthCalledWith(1,expect.any(f.ProvideNFTInformationCommand)),expect(e.sendCommand).toHaveBeenNthCalledWith(2,expect.any(h.ProvideTokenInformationCommand))})}),describe("with subcontexts and certificate",()=>{it("should provide the transaction context and subcontexts for a TRUSTED_NAME context",async()=>{const t={contexts:[{context:{type:a.ClearSignContextType.TRUSTED_NAME,payload:"payload",certificate:{keyUsageNumber:1,payload:new Uint8Array([1,2,3])}},subcontextCallbacks:[()=>Promise.resolve({type:a.ClearSignContextType.NFT,payload:"payload1",certificate:{keyUsageNumber:2,payload:new Uint8Array([4,5,6])}})]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};o.mockResolvedValue(c),e.sendCommand.mockResolvedValue(c),await new i.ProvideContextsTask(e,t,d,r).run(),expect(e.sendCommand).toHaveBeenCalledTimes(3),expect(e.sendCommand).toHaveBeenNthCalledWith(1,expect.any(x.LoadCertificateCommand)),expect(e.sendCommand).toHaveBeenNthCalledWith(2,expect.any(f.ProvideNFTInformationCommand)),expect(e.sendCommand).toHaveBeenNthCalledWith(3,expect.any(x.LoadCertificateCommand))})}),describe("with error",()=>{it("should return an error if the provideContext fails",async()=>{const t={contexts:[{context:{type:a.ClearSignContextType.TOKEN,payload:"payload"},subcontextCallbacks:[]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};e.sendCommand.mockResolvedValue(T);const n=await new i.ProvideContextsTask(e,t,d,r).run();expect(n).toEqual((0,m.Left)(T))}),it("should return an error if the provide subcontext fails",async()=>{const t={contexts:[{context:{type:a.ClearSignContextType.TOKEN,payload:"payload"},subcontextCallbacks:[()=>Promise.resolve({type:a.ClearSignContextType.TOKEN,payload:"payload"})]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};e.sendCommand.mockResolvedValue(T);const n=await new i.ProvideContextsTask(e,t,d,r).run();expect(n).toEqual((0,m.Left)(T))}),it("should return an error if the type is not supported",async()=>{const t={contexts:[{context:{type:"unsupported",payload:"payload"},subcontextCallbacks:[]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"},n=await new i.ProvideContextsTask(e,t,d,r).run();expect(n).toEqual((0,m.Left)((0,x.CommandResultFactory)({error:new x.InvalidStatusWordError("The context type [unsupported] is not covered")})))})}),describe("factory types",()=>{it("should have a sendPayloadInChunksTaskFactory by default",()=>{const t=new i.ProvideContextsTask(e,{contexts:[{context:{type:a.ClearSignContextType.TOKEN,payload:"payload"},subcontextCallbacks:[]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"});expect(t._sendPayloadInChunksTaskFactory).toBeDefined();const s=t._sendPayloadInChunksTaskFactory(e,{payload:"payload",commandFactory:()=>new A.ProvideTransactionFieldDescriptionCommand({data:new Uint8Array,isFirstChunk:!0})});expect(s).toBeInstanceOf(H.SendPayloadInChunksTask)}),it("should have a sendCommandInChunksTaskFactory by default",()=>{const t=new i.ProvideContextsTask(e,{contexts:[{context:{type:a.ClearSignContextType.TOKEN,payload:"payload"},subcontextCallbacks:[]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"});expect(t._sendCommandInChunksTaskFactory).toBeDefined();const s=t._sendCommandInChunksTaskFactory(e,{data:new Uint8Array,commandFactory:()=>new w.StoreTransactionCommand({serializedTransaction:new Uint8Array,isFirstChunk:!0})});expect(s).toBeInstanceOf(U.SendCommandInChunksTask)})})})});
|
|
2
|
-
//# sourceMappingURL=ProvideContextsTask.test.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../../src/internal/app-binder/task/ProvideContextsTask.test.ts"],
|
|
4
|
-
"sourcesContent": ["import { ClearSignContextType } from \"@ledgerhq/context-module\";\nimport {\n CommandResultFactory,\n type InternalApi,\n InvalidStatusWordError,\n LoadCertificateCommand,\n type UnknownDeviceExchangeError,\n} from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { ProvideEnumCommand } from \"@internal/app-binder/command/ProvideEnumCommand\";\nimport { ProvideNetworkConfigurationCommand } from \"@internal/app-binder/command/ProvideNetworkConfigurationCommand\";\nimport { ProvideNFTInformationCommand } from \"@internal/app-binder/command/ProvideNFTInformationCommand\";\nimport { ProvideProxyInfoCommand } from \"@internal/app-binder/command/ProvideProxyInfoCommand\";\nimport { ProvideTokenInformationCommand } from \"@internal/app-binder/command/ProvideTokenInformationCommand\";\nimport { ProvideTransactionFieldDescriptionCommand } from \"@internal/app-binder/command/ProvideTransactionFieldDescriptionCommand\";\nimport { ProvideTransactionInformationCommand } from \"@internal/app-binder/command/ProvideTransactionInformationCommand\";\nimport { ProvideTrustedNameCommand } from \"@internal/app-binder/command/ProvideTrustedNameCommand\";\nimport { ProvideWeb3CheckCommand } from \"@internal/app-binder/command/ProvideWeb3CheckCommand\";\nimport { SetExternalPluginCommand } from \"@internal/app-binder/command/SetExternalPluginCommand\";\nimport { SetPluginCommand } from \"@internal/app-binder/command/SetPluginCommand\";\nimport { StoreTransactionCommand } from \"@internal/app-binder/command/StoreTransactionCommand\";\nimport { type EthErrorCodes } from \"@internal/app-binder/command/utils/ethAppErrors\";\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\n\nimport {\n ProvideContextsTask,\n type ProvideContextsTaskArgs,\n} from \"./ProvideContextsTask\";\nimport {\n SendCommandInChunksTask,\n type SendCommandInChunksTaskArgs,\n} from \"./SendCommandInChunksTask\";\nimport {\n SendPayloadInChunksTask,\n type SendPayloadInChunksTaskArgs,\n} from \"./SendPayloadInChunksTask\";\n\ndescribe(\"ProvideContextsTask\", () => {\n const api = makeDeviceActionInternalApiMock();\n const successResult = CommandResultFactory<void, EthErrorCodes>({\n data: undefined,\n });\n const errorResult = CommandResultFactory<void, EthErrorCodes>({\n data: undefined,\n error: {} as UnknownDeviceExchangeError,\n });\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"run\", () => {\n const sendPayloadInChunksRunMock = vi.fn();\n const sendCommandInChunksTaskRunMock = vi.fn();\n const sendCommandInChunksTaskMockFactory = vi.fn();\n const sendPayloadInChunksTaskMockFactory = vi.fn();\n\n beforeEach(() => {\n vi.clearAllMocks();\n sendCommandInChunksTaskMockFactory.mockImplementation(\n (a: InternalApi, args: SendCommandInChunksTaskArgs<unknown>) =>\n ({\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n run: () => sendCommandInChunksTaskRunMock(a, args),\n }) as unknown as SendCommandInChunksTask<unknown>,\n );\n sendPayloadInChunksTaskMockFactory.mockImplementation(\n (a: InternalApi, args: SendPayloadInChunksTaskArgs<unknown>) =>\n ({\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n run: () => sendPayloadInChunksRunMock(a, args),\n }) as unknown as SendPayloadInChunksTask<unknown>,\n );\n });\n\n describe(\"with no subcontexts\", () => {\n it(\"should provide the transaction context for a TRANSACTION_INFO context\", async () => {\n // GIVEN\n const args: ProvideContextsTaskArgs = {\n contexts: [\n {\n context: {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"0x00\",\n certificate: {\n keyUsageNumber: 1,\n payload: new Uint8Array([1, 2, 3]),\n },\n },\n subcontextCallbacks: [],\n },\n ],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n };\n sendCommandInChunksTaskRunMock.mockResolvedValue(successResult);\n sendPayloadInChunksRunMock.mockResolvedValue(successResult);\n api.sendCommand.mockResolvedValue(successResult);\n\n // WHEN\n const task = new ProvideContextsTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n sendCommandInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(Right(void 0));\n\n // StoreTransactionCommand\n expect(sendCommandInChunksTaskRunMock).toHaveBeenCalledTimes(1);\n expect(sendCommandInChunksTaskMockFactory).toHaveBeenCalledWith(api, {\n data: new Uint8Array([\n 0x05, 0x80, 0x00, 0x00, 0x2c, 0x80, 0x00, 0x00, 0x3c, 0x80, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n ]),\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n commandFactory: expect.any(Function),\n });\n // Test that the commandFactory returns a StoreTransactionCommand\n const factoryCall = sendCommandInChunksTaskMockFactory.mock.calls[0]!;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const commandFactory = factoryCall[1].commandFactory;\n // arbitrary data to test the commandFactory\n const mockArgs = {\n chunkedData: new Uint8Array([1, 2, 3, 4]),\n isFirstChunk: true,\n };\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n const command = commandFactory(mockArgs);\n expect(command).toBeInstanceOf(StoreTransactionCommand);\n\n // LoadCertificateCommand\n expect(api.sendCommand).toHaveBeenCalledTimes(1);\n expect(api.sendCommand).toHaveBeenCalledWith(\n expect.any(LoadCertificateCommand),\n );\n\n // ProvideTransactionInformationCommand\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledTimes(1);\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledWith(api, {\n payload: \"0x00\",\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n commandFactory: expect.any(Function),\n });\n // Test that the commandFactory returns a ProvideTransactionInformationCommand\n const factoryCall2 = sendPayloadInChunksRunMock.mock.calls[0]!;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const commandFactory2 = factoryCall2[1].commandFactory;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n const command2 = commandFactory2(mockArgs);\n expect(command2).toBeInstanceOf(ProvideTransactionInformationCommand);\n });\n\n it(\"should provide the transaction context for a TRANSACTION_INFO context without certificate\", async () => {\n // GIVEN\n const args: ProvideContextsTaskArgs = {\n contexts: [\n {\n context: {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"0x00\",\n },\n subcontextCallbacks: [],\n },\n ],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n };\n sendCommandInChunksTaskRunMock.mockResolvedValue(successResult);\n sendPayloadInChunksRunMock.mockResolvedValue(successResult);\n api.sendCommand.mockResolvedValue(successResult);\n\n // WHEN\n const task = new ProvideContextsTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n sendCommandInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(Right(void 0));\n\n // StoreTransactionCommand\n expect(sendCommandInChunksTaskRunMock).toHaveBeenCalledTimes(1);\n expect(sendCommandInChunksTaskMockFactory).toHaveBeenCalledWith(api, {\n data: new Uint8Array([\n 0x05, 0x80, 0x00, 0x00, 0x2c, 0x80, 0x00, 0x00, 0x3c, 0x80, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n ]),\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n commandFactory: expect.any(Function),\n });\n // Test that the commandFactory returns a StoreTransactionCommand\n const factoryCall = sendCommandInChunksTaskMockFactory.mock.calls[0]!;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const commandFactory = factoryCall[1].commandFactory;\n // arbitrary data to test the commandFactory\n const mockArgs = {\n chunkedData: new Uint8Array([1, 2, 3, 4]),\n isFirstChunk: true,\n };\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n const command = commandFactory(mockArgs);\n expect(command).toBeInstanceOf(StoreTransactionCommand);\n\n // LoadCertificateCommand\n expect(api.sendCommand).toHaveBeenCalledTimes(0);\n\n // ProvideTransactionInformationCommand\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledTimes(1);\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledWith(api, {\n payload: \"0x00\",\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n commandFactory: expect.any(Function),\n });\n // Test that the commandFactory returns a ProvideTransactionInformationCommand\n const factoryCall2 = sendPayloadInChunksRunMock.mock.calls[0]!;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const commandFactory2 = factoryCall2[1].commandFactory;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n const command2 = commandFactory2(mockArgs);\n expect(command2).toBeInstanceOf(ProvideTransactionInformationCommand);\n });\n\n it.each([\n [ClearSignContextType.PLUGIN, SetPluginCommand],\n [ClearSignContextType.EXTERNAL_PLUGIN, SetExternalPluginCommand],\n [ClearSignContextType.NFT, ProvideNFTInformationCommand],\n [ClearSignContextType.TOKEN, ProvideTokenInformationCommand],\n ] as const)(\n \"should provide the transaction context by calling sendCommand for a %s context\",\n async (contextType, commandClass) => {\n // GIVEN\n const args: ProvideContextsTaskArgs = {\n contexts: [\n {\n context: {\n type: contextType,\n payload: \"payload\",\n },\n subcontextCallbacks: [],\n },\n ],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n };\n api.sendCommand.mockResolvedValue(successResult);\n\n // WHEN\n const task = new ProvideContextsTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n sendCommandInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(Right(void 0));\n expect(api.sendCommand).toHaveBeenCalledTimes(1);\n expect(api.sendCommand).toHaveBeenCalledWith(\n expect.any(commandClass),\n );\n },\n );\n\n it.each([\n [ClearSignContextType.ENUM, ProvideEnumCommand],\n [ClearSignContextType.TRUSTED_NAME, ProvideTrustedNameCommand],\n [ClearSignContextType.WEB3_CHECK, ProvideWeb3CheckCommand],\n [\n ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n ProvideTransactionFieldDescriptionCommand,\n ],\n [\n ClearSignContextType.DYNAMIC_NETWORK_ICON,\n ProvideNetworkConfigurationCommand,\n false,\n ],\n [\n ClearSignContextType.DYNAMIC_NETWORK,\n ProvideNetworkConfigurationCommand,\n ],\n ] as const)(\n \"should provide the transaction context by calling sendPayloadInChunksTask for a %s context\",\n async (contextType, commandClass, withPayloadLength = undefined) => {\n // GIVEN\n const args: ProvideContextsTaskArgs = {\n contexts: [\n {\n context: {\n type: contextType,\n payload: \"payload\",\n id: 1,\n value: 1,\n },\n subcontextCallbacks: [],\n },\n ],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n };\n sendPayloadInChunksRunMock.mockResolvedValue(successResult);\n\n // WHEN\n const task = new ProvideContextsTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n sendCommandInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(Right(void 0));\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledTimes(1);\n if (withPayloadLength === undefined) {\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledWith(api, {\n payload: \"payload\",\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n commandFactory: expect.any(Function),\n });\n } else {\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledWith(api, {\n payload: \"payload\",\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n commandFactory: expect.any(Function),\n withPayloadLength,\n });\n }\n\n // Test that the commandFactory returns a commandClass\n const factoryCall = sendPayloadInChunksTaskMockFactory.mock.calls[0]!;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const commandFactory = factoryCall[1].commandFactory;\n const mockArgs = {\n chunkedData: new Uint8Array([1, 2, 3]),\n isFirstChunk: true,\n };\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n const command = commandFactory(mockArgs);\n expect(command).toBeInstanceOf(commandClass);\n },\n );\n\n it(\"should only provide the subcontexts if the context is a PROXY_INFO\", async () => {\n // GIVEN\n const args: ProvideContextsTaskArgs = {\n contexts: [\n {\n context: {\n type: ClearSignContextType.PROXY_INFO,\n payload: \"payload\",\n },\n subcontextCallbacks: [\n () =>\n Promise.resolve({\n type: ClearSignContextType.PROXY_INFO,\n payload: \"subcontext payload\",\n }),\n ],\n },\n ],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n };\n sendPayloadInChunksRunMock.mockResolvedValue(successResult);\n\n // WHEN\n const task = new ProvideContextsTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n sendCommandInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(Right(void 0));\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledTimes(1);\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledWith(api, {\n payload: \"subcontext payload\",\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n commandFactory: expect.any(Function),\n });\n\n // Test that the commandFactory returns a commandClass\n const factoryCall = sendPayloadInChunksTaskMockFactory.mock.calls[0]!;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const commandFactory = factoryCall[1].commandFactory;\n const mockArgs = {\n chunkedData: new Uint8Array([1, 2, 3]),\n isFirstChunk: true,\n };\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n const command = commandFactory(mockArgs);\n expect(command).toBeInstanceOf(ProvideProxyInfoCommand);\n });\n\n it(\"should skip the subcontexts if the context is an error\", async () => {\n // GIVEN\n const args: ProvideContextsTaskArgs = {\n contexts: [\n {\n context: {\n type: ClearSignContextType.TOKEN,\n payload: \"payload\",\n certificate: {\n keyUsageNumber: 1,\n payload: new Uint8Array([1, 2, 3]),\n },\n },\n subcontextCallbacks: [\n () =>\n Promise.resolve({\n type: ClearSignContextType.ERROR,\n error: new Error(\"error\"),\n }),\n ],\n },\n ],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n };\n sendPayloadInChunksRunMock.mockResolvedValue(successResult);\n api.sendCommand.mockResolvedValue(successResult);\n\n // WHEN\n const task = new ProvideContextsTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n sendCommandInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(Right(void 0));\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledTimes(0);\n expect(sendCommandInChunksTaskRunMock).toHaveBeenCalledTimes(0);\n expect(api.sendCommand).toHaveBeenCalledTimes(2);\n expect(api.sendCommand).toHaveBeenNthCalledWith(\n 1,\n expect.any(LoadCertificateCommand),\n );\n expect(api.sendCommand).toHaveBeenNthCalledWith(\n 2,\n expect.any(ProvideTokenInformationCommand),\n );\n });\n });\n\n describe(\"with subcontexts\", () => {\n it(\"should provide the transaction context and subcontext for a TRANSACTION_FIELD_DESCRIPTION context\", async () => {\n // GIVEN\n const args: ProvideContextsTaskArgs = {\n contexts: [\n {\n context: {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload\",\n },\n subcontextCallbacks: [\n () =>\n Promise.resolve({\n type: ClearSignContextType.TOKEN,\n payload: \"payload\",\n }),\n ],\n },\n ],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n };\n sendPayloadInChunksRunMock.mockResolvedValue(successResult);\n api.sendCommand.mockResolvedValue(successResult);\n\n // WHEN\n const task = new ProvideContextsTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n sendCommandInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(Right(void 0));\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledTimes(1);\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledWith(api, {\n payload: \"payload\",\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n commandFactory: expect.any(Function),\n });\n\n // Test that the commandFactory returns a commandClass\n const factoryCall = sendPayloadInChunksTaskMockFactory.mock.calls[0]!;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const commandFactory = factoryCall[1].commandFactory;\n const mockArgs = {\n chunkedData: new Uint8Array([1, 2, 3]),\n isFirstChunk: true,\n };\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n const command = commandFactory(mockArgs);\n expect(command).toBeInstanceOf(\n ProvideTransactionFieldDescriptionCommand,\n );\n\n expect(api.sendCommand).toHaveBeenCalledTimes(1);\n expect(api.sendCommand).toHaveBeenCalledWith(\n expect.any(ProvideTokenInformationCommand),\n );\n });\n\n it(\"should provide the transaction context and subcontexts for a TRUSTED_NAME context\", async () => {\n // GIVEN\n const args: ProvideContextsTaskArgs = {\n contexts: [\n {\n context: {\n type: ClearSignContextType.TRUSTED_NAME,\n payload: \"payload\",\n },\n subcontextCallbacks: [\n () =>\n Promise.resolve({\n type: ClearSignContextType.NFT,\n payload: \"payload1\",\n }),\n\n () =>\n Promise.resolve({\n type: ClearSignContextType.TOKEN,\n payload: \"payload2\",\n }),\n ],\n },\n ],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n };\n sendPayloadInChunksRunMock.mockResolvedValue(successResult);\n api.sendCommand.mockResolvedValue(successResult);\n\n // WHEN\n const task = new ProvideContextsTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n sendCommandInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(Right(void 0));\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledTimes(1);\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledWith(api, {\n payload: \"payload\",\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n commandFactory: expect.any(Function),\n });\n\n // Test that the commandFactory returns a commandClass\n const factoryCall = sendPayloadInChunksTaskMockFactory.mock.calls[0]!;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const commandFactory = factoryCall[1].commandFactory;\n const mockArgs = {\n chunkedData: new Uint8Array([1, 2, 3]),\n isFirstChunk: true,\n };\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n const command = commandFactory(mockArgs);\n expect(command).toBeInstanceOf(ProvideTrustedNameCommand);\n\n expect(api.sendCommand).toHaveBeenCalledTimes(2);\n expect(api.sendCommand).toHaveBeenNthCalledWith(\n 1,\n expect.any(ProvideNFTInformationCommand),\n );\n expect(api.sendCommand).toHaveBeenNthCalledWith(\n 2,\n expect.any(ProvideTokenInformationCommand),\n );\n });\n });\n\n describe(\"with subcontexts and certificate\", () => {\n it(\"should provide the transaction context and subcontexts for a TRUSTED_NAME context\", async () => {\n // GIVEN\n const args: ProvideContextsTaskArgs = {\n contexts: [\n {\n context: {\n type: ClearSignContextType.TRUSTED_NAME,\n payload: \"payload\",\n certificate: {\n keyUsageNumber: 1,\n payload: new Uint8Array([1, 2, 3]),\n },\n },\n subcontextCallbacks: [\n () =>\n Promise.resolve({\n type: ClearSignContextType.NFT,\n payload: \"payload1\",\n certificate: {\n keyUsageNumber: 2,\n payload: new Uint8Array([4, 5, 6]),\n },\n }),\n ],\n },\n ],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n };\n sendPayloadInChunksRunMock.mockResolvedValue(successResult);\n api.sendCommand.mockResolvedValue(successResult);\n\n // WHEN\n const task = new ProvideContextsTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n sendCommandInChunksTaskMockFactory,\n );\n await task.run();\n\n // THEN\n expect(api.sendCommand).toHaveBeenCalledTimes(3);\n expect(api.sendCommand).toHaveBeenNthCalledWith(\n 1,\n expect.any(LoadCertificateCommand),\n );\n expect(api.sendCommand).toHaveBeenNthCalledWith(\n 2,\n expect.any(ProvideNFTInformationCommand),\n );\n expect(api.sendCommand).toHaveBeenNthCalledWith(\n 3,\n expect.any(LoadCertificateCommand),\n );\n });\n });\n\n describe(\"with error\", () => {\n it(\"should return an error if the provideContext fails\", async () => {\n // GIVEN\n const args: ProvideContextsTaskArgs = {\n contexts: [\n {\n context: {\n type: ClearSignContextType.TOKEN,\n payload: \"payload\",\n },\n subcontextCallbacks: [],\n },\n ],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n };\n api.sendCommand.mockResolvedValue(errorResult);\n\n // WHEN\n const task = new ProvideContextsTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n sendCommandInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(Left(errorResult));\n });\n\n it(\"should return an error if the provide subcontext fails\", async () => {\n // GIVEN\n const args: ProvideContextsTaskArgs = {\n contexts: [\n {\n context: {\n type: ClearSignContextType.TOKEN,\n payload: \"payload\",\n },\n subcontextCallbacks: [\n () =>\n Promise.resolve({\n type: ClearSignContextType.TOKEN,\n payload: \"payload\",\n }),\n ],\n },\n ],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n };\n api.sendCommand.mockResolvedValue(errorResult);\n\n // WHEN\n const task = new ProvideContextsTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n sendCommandInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(Left(errorResult));\n });\n\n it(\"should return an error if the type is not supported\", async () => {\n // GIVEN\n const args: ProvideContextsTaskArgs = {\n contexts: [\n {\n context: {\n type: \"unsupported\" as unknown as ClearSignContextType.TOKEN,\n payload: \"payload\",\n },\n subcontextCallbacks: [],\n },\n ],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n };\n\n // WHEN\n const task = new ProvideContextsTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n sendCommandInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(\n Left(\n CommandResultFactory({\n error: new InvalidStatusWordError(\n `The context type [unsupported] is not covered`,\n ),\n }),\n ),\n );\n });\n });\n\n describe(\"factory types\", () => {\n it(\"should have a sendPayloadInChunksTaskFactory by default\", () => {\n // GIVEN\n const task = new ProvideContextsTask(api, {\n contexts: [\n {\n context: {\n type: ClearSignContextType.TOKEN,\n payload: \"payload\",\n },\n subcontextCallbacks: [],\n },\n ],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n });\n\n // THEN\n expect(task[\"_sendPayloadInChunksTaskFactory\"]).toBeDefined();\n const sendPayloadInChunksTask = task[\"_sendPayloadInChunksTaskFactory\"](\n api,\n {\n payload: \"payload\",\n commandFactory: () =>\n new ProvideTransactionFieldDescriptionCommand({\n data: new Uint8Array(),\n isFirstChunk: true,\n }),\n },\n );\n expect(sendPayloadInChunksTask).toBeInstanceOf(SendPayloadInChunksTask);\n });\n\n it(\"should have a sendCommandInChunksTaskFactory by default\", () => {\n // GIVEN\n const task = new ProvideContextsTask(api, {\n contexts: [\n {\n context: {\n type: ClearSignContextType.TOKEN,\n payload: \"payload\",\n },\n subcontextCallbacks: [],\n },\n ],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n });\n\n // THEN\n expect(task[\"_sendCommandInChunksTaskFactory\"]).toBeDefined();\n const sendCommandInChunksTask = task[\"_sendCommandInChunksTaskFactory\"](\n api,\n {\n data: new Uint8Array(),\n commandFactory: () =>\n new StoreTransactionCommand({\n serializedTransaction: new Uint8Array(),\n isFirstChunk: true,\n }),\n },\n );\n expect(sendCommandInChunksTask).toBeInstanceOf(SendCommandInChunksTask);\n });\n });\n });\n});\n"],
|
|
5
|
-
"mappings": "aAAA,IAAAA,EAAqC,oCACrCC,EAMO,2CACPC,EAA4B,qBAE5BC,EAAmC,2DACnCC,EAAmD,2EACnDC,EAA6C,qEAC7CC,EAAwC,gEACxCC,EAA+C,uEAC/CC,EAA0D,kFAC1DC,EAAqD,6EACrDC,EAA0C,kEAC1CC,EAAwC,gEACxCC,EAAyC,iEACzCC,EAAiC,yDACjCC,EAAwC,gEAExCC,EAAgD,6EAEhDC,EAGO,iCACPC,EAGO,qCACPC,EAGO,qCAEP,SAAS,sBAAuB,IAAM,CACpC,MAAMC,KAAM,mCAAgC,EACtCC,KAAgB,wBAA0C,CAC9D,KAAM,MACR,CAAC,EACKC,KAAc,wBAA0C,CAC5D,KAAM,OACN,MAAO,CAAC,CACV,CAAC,EAED,WAAW,IAAM,CACf,GAAG,cAAc,CACnB,CAAC,EAED,SAAS,MAAO,IAAM,CACpB,MAAMC,EAA6B,GAAG,GAAG,EACnCC,EAAiC,GAAG,GAAG,EACvCC,EAAqC,GAAG,GAAG,EAC3CC,EAAqC,GAAG,GAAG,EAEjD,WAAW,IAAM,CACf,GAAG,cAAc,EACjBD,EAAmC,mBACjC,CAACE,EAAgBC,KACd,CAEC,IAAK,IAAMJ,EAA+BG,EAAGC,CAAI,CACnD,EACJ,EACAF,EAAmC,mBACjC,CAACC,EAAgBC,KACd,CAEC,IAAK,IAAML,EAA2BI,EAAGC,CAAI,CAC/C,EACJ,CACF,CAAC,EAED,SAAS,sBAAuB,IAAM,CACpC,GAAG,wEAAyE,SAAY,CAEtF,MAAMA,EAAgC,CACpC,SAAU,CACR,CACE,QAAS,CACP,KAAM,uBAAqB,iBAC3B,QAAS,OACT,YAAa,CACX,eAAgB,EAChB,QAAS,IAAI,WAAW,CAAC,EAAG,EAAG,CAAC,CAAC,CACnC,CACF,EACA,oBAAqB,CAAC,CACxB,CACF,EACA,sBAAuB,IAAI,WAC3B,eAAgB,gBAClB,EACAJ,EAA+B,kBAAkBH,CAAa,EAC9DE,EAA2B,kBAAkBF,CAAa,EAC1DD,EAAI,YAAY,kBAAkBC,CAAa,EAS/C,MAAMQ,EAAS,MANF,IAAI,sBACfT,EACAQ,EACAF,EACAD,CACF,EAC0B,IAAI,EAG9B,OAAOI,CAAM,EAAE,WAAQ,SAAM,MAAM,CAAC,EAGpC,OAAOL,CAA8B,EAAE,sBAAsB,CAAC,EAC9D,OAAOC,CAAkC,EAAE,qBAAqBL,EAAK,CACnE,KAAM,IAAI,WAAW,CACnB,EAAM,IAAM,EAAM,EAAM,GAAM,IAAM,EAAM,EAAM,GAAM,IAAM,EAC5D,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,CACxD,CAAC,EAED,eAAgB,OAAO,IAAI,QAAQ,CACrC,CAAC,EAID,MAAMU,EAFcL,EAAmC,KAAK,MAAM,CAAC,EAEhC,CAAC,EAAE,eAEhCM,EAAW,CACf,YAAa,IAAI,WAAW,CAAC,EAAG,EAAG,EAAG,CAAC,CAAC,EACxC,aAAc,EAChB,EAEMC,EAAUF,EAAeC,CAAQ,EACvC,OAAOC,CAAO,EAAE,eAAe,yBAAuB,EAGtD,OAAOZ,EAAI,WAAW,EAAE,sBAAsB,CAAC,EAC/C,OAAOA,EAAI,WAAW,EAAE,qBACtB,OAAO,IAAI,wBAAsB,CACnC,EAGA,OAAOG,CAA0B,EAAE,sBAAsB,CAAC,EAC1D,OAAOA,CAA0B,EAAE,qBAAqBH,EAAK,CAC3D,QAAS,OAET,eAAgB,OAAO,IAAI,QAAQ,CACrC,CAAC,EAID,MAAMa,EAFeV,EAA2B,KAAK,MAAM,CAAC,EAEvB,CAAC,EAAE,eAElCW,EAAWD,EAAgBF,CAAQ,EACzC,OAAOG,CAAQ,EAAE,eAAe,sCAAoC,CACtE,CAAC,EAED,GAAG,4FAA6F,SAAY,CAE1G,MAAMN,EAAgC,CACpC,SAAU,CACR,CACE,QAAS,CACP,KAAM,uBAAqB,iBAC3B,QAAS,MACX,EACA,oBAAqB,CAAC,CACxB,CACF,EACA,sBAAuB,IAAI,WAC3B,eAAgB,gBAClB,EACAJ,EAA+B,kBAAkBH,CAAa,EAC9DE,EAA2B,kBAAkBF,CAAa,EAC1DD,EAAI,YAAY,kBAAkBC,CAAa,EAS/C,MAAMQ,EAAS,MANF,IAAI,sBACfT,EACAQ,EACAF,EACAD,CACF,EAC0B,IAAI,EAG9B,OAAOI,CAAM,EAAE,WAAQ,SAAM,MAAM,CAAC,EAGpC,OAAOL,CAA8B,EAAE,sBAAsB,CAAC,EAC9D,OAAOC,CAAkC,EAAE,qBAAqBL,EAAK,CACnE,KAAM,IAAI,WAAW,CACnB,EAAM,IAAM,EAAM,EAAM,GAAM,IAAM,EAAM,EAAM,GAAM,IAAM,EAC5D,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,CACxD,CAAC,EAED,eAAgB,OAAO,IAAI,QAAQ,CACrC,CAAC,EAID,MAAMU,EAFcL,EAAmC,KAAK,MAAM,CAAC,EAEhC,CAAC,EAAE,eAEhCM,EAAW,CACf,YAAa,IAAI,WAAW,CAAC,EAAG,EAAG,EAAG,CAAC,CAAC,EACxC,aAAc,EAChB,EAEMC,EAAUF,EAAeC,CAAQ,EACvC,OAAOC,CAAO,EAAE,eAAe,yBAAuB,EAGtD,OAAOZ,EAAI,WAAW,EAAE,sBAAsB,CAAC,EAG/C,OAAOG,CAA0B,EAAE,sBAAsB,CAAC,EAC1D,OAAOA,CAA0B,EAAE,qBAAqBH,EAAK,CAC3D,QAAS,OAET,eAAgB,OAAO,IAAI,QAAQ,CACrC,CAAC,EAID,MAAMa,EAFeV,EAA2B,KAAK,MAAM,CAAC,EAEvB,CAAC,EAAE,eAElCW,EAAWD,EAAgBF,CAAQ,EACzC,OAAOG,CAAQ,EAAE,eAAe,sCAAoC,CACtE,CAAC,EAED,GAAG,KAAK,CACN,CAAC,uBAAqB,OAAQ,kBAAgB,EAC9C,CAAC,uBAAqB,gBAAiB,0BAAwB,EAC/D,CAAC,uBAAqB,IAAK,8BAA4B,EACvD,CAAC,uBAAqB,MAAO,gCAA8B,CAC7D,CAAU,EACR,iFACA,MAAOC,EAAaC,IAAiB,CAEnC,MAAMR,EAAgC,CACpC,SAAU,CACR,CACE,QAAS,CACP,KAAMO,EACN,QAAS,SACX,EACA,oBAAqB,CAAC,CACxB,CACF,EACA,sBAAuB,IAAI,WAC3B,eAAgB,gBAClB,EACAf,EAAI,YAAY,kBAAkBC,CAAa,EAS/C,MAAMQ,EAAS,MANF,IAAI,sBACfT,EACAQ,EACAF,EACAD,CACF,EAC0B,IAAI,EAG9B,OAAOI,CAAM,EAAE,WAAQ,SAAM,MAAM,CAAC,EACpC,OAAOT,EAAI,WAAW,EAAE,sBAAsB,CAAC,EAC/C,OAAOA,EAAI,WAAW,EAAE,qBACtB,OAAO,IAAIgB,CAAY,CACzB,CACF,CACF,EAEA,GAAG,KAAK,CACN,CAAC,uBAAqB,KAAM,oBAAkB,EAC9C,CAAC,uBAAqB,aAAc,2BAAyB,EAC7D,CAAC,uBAAqB,WAAY,yBAAuB,EACzD,CACE,uBAAqB,8BACrB,2CACF,EACA,CACE,uBAAqB,qBACrB,qCACA,EACF,EACA,CACE,uBAAqB,gBACrB,oCACF,CACF,CAAU,EACR,6FACA,MAAOD,EAAaC,EAAcC,EAAoB,SAAc,CAElE,MAAMT,EAAgC,CACpC,SAAU,CACR,CACE,QAAS,CACP,KAAMO,EACN,QAAS,UACT,GAAI,EACJ,MAAO,CACT,EACA,oBAAqB,CAAC,CACxB,CACF,EACA,sBAAuB,IAAI,WAC3B,eAAgB,gBAClB,EACAZ,EAA2B,kBAAkBF,CAAa,EAS1D,MAAMQ,EAAS,MANF,IAAI,sBACfT,EACAQ,EACAF,EACAD,CACF,EAC0B,IAAI,EAG9B,OAAOI,CAAM,EAAE,WAAQ,SAAM,MAAM,CAAC,EACpC,OAAON,CAA0B,EAAE,sBAAsB,CAAC,EACtDc,IAAsB,OACxB,OAAOd,CAA0B,EAAE,qBAAqBH,EAAK,CAC3D,QAAS,UAET,eAAgB,OAAO,IAAI,QAAQ,CACrC,CAAC,EAED,OAAOG,CAA0B,EAAE,qBAAqBH,EAAK,CAC3D,QAAS,UAET,eAAgB,OAAO,IAAI,QAAQ,EACnC,kBAAAiB,CACF,CAAC,EAMH,MAAMP,EAFcJ,EAAmC,KAAK,MAAM,CAAC,EAEhC,CAAC,EAAE,eAChCK,EAAW,CACf,YAAa,IAAI,WAAW,CAAC,EAAG,EAAG,CAAC,CAAC,EACrC,aAAc,EAChB,EAEMC,EAAUF,EAAeC,CAAQ,EACvC,OAAOC,CAAO,EAAE,eAAeI,CAAY,CAC7C,CACF,EAEA,GAAG,qEAAsE,SAAY,CAEnF,MAAMR,EAAgC,CACpC,SAAU,CACR,CACE,QAAS,CACP,KAAM,uBAAqB,WAC3B,QAAS,SACX,EACA,oBAAqB,CACnB,IACE,QAAQ,QAAQ,CACd,KAAM,uBAAqB,WAC3B,QAAS,oBACX,CAAC,CACL,CACF,CACF,EACA,sBAAuB,IAAI,WAC3B,eAAgB,gBAClB,EACAL,EAA2B,kBAAkBF,CAAa,EAS1D,MAAMQ,EAAS,MANF,IAAI,sBACfT,EACAQ,EACAF,EACAD,CACF,EAC0B,IAAI,EAG9B,OAAOI,CAAM,EAAE,WAAQ,SAAM,MAAM,CAAC,EACpC,OAAON,CAA0B,EAAE,sBAAsB,CAAC,EAC1D,OAAOA,CAA0B,EAAE,qBAAqBH,EAAK,CAC3D,QAAS,qBAET,eAAgB,OAAO,IAAI,QAAQ,CACrC,CAAC,EAKD,MAAMU,EAFcJ,EAAmC,KAAK,MAAM,CAAC,EAEhC,CAAC,EAAE,eAChCK,EAAW,CACf,YAAa,IAAI,WAAW,CAAC,EAAG,EAAG,CAAC,CAAC,EACrC,aAAc,EAChB,EAEMC,EAAUF,EAAeC,CAAQ,EACvC,OAAOC,CAAO,EAAE,eAAe,yBAAuB,CACxD,CAAC,EAED,GAAG,yDAA0D,SAAY,CAEvE,MAAMJ,EAAgC,CACpC,SAAU,CACR,CACE,QAAS,CACP,KAAM,uBAAqB,MAC3B,QAAS,UACT,YAAa,CACX,eAAgB,EAChB,QAAS,IAAI,WAAW,CAAC,EAAG,EAAG,CAAC,CAAC,CACnC,CACF,EACA,oBAAqB,CACnB,IACE,QAAQ,QAAQ,CACd,KAAM,uBAAqB,MAC3B,MAAO,IAAI,MAAM,OAAO,CAC1B,CAAC,CACL,CACF,CACF,EACA,sBAAuB,IAAI,WAC3B,eAAgB,gBAClB,EACAL,EAA2B,kBAAkBF,CAAa,EAC1DD,EAAI,YAAY,kBAAkBC,CAAa,EAS/C,MAAMQ,EAAS,MANF,IAAI,sBACfT,EACAQ,EACAF,EACAD,CACF,EAC0B,IAAI,EAG9B,OAAOI,CAAM,EAAE,WAAQ,SAAM,MAAM,CAAC,EACpC,OAAON,CAA0B,EAAE,sBAAsB,CAAC,EAC1D,OAAOC,CAA8B,EAAE,sBAAsB,CAAC,EAC9D,OAAOJ,EAAI,WAAW,EAAE,sBAAsB,CAAC,EAC/C,OAAOA,EAAI,WAAW,EAAE,wBACtB,EACA,OAAO,IAAI,wBAAsB,CACnC,EACA,OAAOA,EAAI,WAAW,EAAE,wBACtB,EACA,OAAO,IAAI,gCAA8B,CAC3C,CACF,CAAC,CACH,CAAC,EAED,SAAS,mBAAoB,IAAM,CACjC,GAAG,oGAAqG,SAAY,CAElH,MAAMQ,EAAgC,CACpC,SAAU,CACR,CACE,QAAS,CACP,KAAM,uBAAqB,8BAC3B,QAAS,SACX,EACA,oBAAqB,CACnB,IACE,QAAQ,QAAQ,CACd,KAAM,uBAAqB,MAC3B,QAAS,SACX,CAAC,CACL,CACF,CACF,EACA,sBAAuB,IAAI,WAC3B,eAAgB,gBAClB,EACAL,EAA2B,kBAAkBF,CAAa,EAC1DD,EAAI,YAAY,kBAAkBC,CAAa,EAS/C,MAAMQ,EAAS,MANF,IAAI,sBACfT,EACAQ,EACAF,EACAD,CACF,EAC0B,IAAI,EAG9B,OAAOI,CAAM,EAAE,WAAQ,SAAM,MAAM,CAAC,EACpC,OAAON,CAA0B,EAAE,sBAAsB,CAAC,EAC1D,OAAOA,CAA0B,EAAE,qBAAqBH,EAAK,CAC3D,QAAS,UAET,eAAgB,OAAO,IAAI,QAAQ,CACrC,CAAC,EAKD,MAAMU,EAFcJ,EAAmC,KAAK,MAAM,CAAC,EAEhC,CAAC,EAAE,eAChCK,EAAW,CACf,YAAa,IAAI,WAAW,CAAC,EAAG,EAAG,CAAC,CAAC,EACrC,aAAc,EAChB,EAEMC,EAAUF,EAAeC,CAAQ,EACvC,OAAOC,CAAO,EAAE,eACd,2CACF,EAEA,OAAOZ,EAAI,WAAW,EAAE,sBAAsB,CAAC,EAC/C,OAAOA,EAAI,WAAW,EAAE,qBACtB,OAAO,IAAI,gCAA8B,CAC3C,CACF,CAAC,EAED,GAAG,oFAAqF,SAAY,CAElG,MAAMQ,EAAgC,CACpC,SAAU,CACR,CACE,QAAS,CACP,KAAM,uBAAqB,aAC3B,QAAS,SACX,EACA,oBAAqB,CACnB,IACE,QAAQ,QAAQ,CACd,KAAM,uBAAqB,IAC3B,QAAS,UACX,CAAC,EAEH,IACE,QAAQ,QAAQ,CACd,KAAM,uBAAqB,MAC3B,QAAS,UACX,CAAC,CACL,CACF,CACF,EACA,sBAAuB,IAAI,WAC3B,eAAgB,gBAClB,EACAL,EAA2B,kBAAkBF,CAAa,EAC1DD,EAAI,YAAY,kBAAkBC,CAAa,EAS/C,MAAMQ,EAAS,MANF,IAAI,sBACfT,EACAQ,EACAF,EACAD,CACF,EAC0B,IAAI,EAG9B,OAAOI,CAAM,EAAE,WAAQ,SAAM,MAAM,CAAC,EACpC,OAAON,CAA0B,EAAE,sBAAsB,CAAC,EAC1D,OAAOA,CAA0B,EAAE,qBAAqBH,EAAK,CAC3D,QAAS,UAET,eAAgB,OAAO,IAAI,QAAQ,CACrC,CAAC,EAKD,MAAMU,EAFcJ,EAAmC,KAAK,MAAM,CAAC,EAEhC,CAAC,EAAE,eAChCK,EAAW,CACf,YAAa,IAAI,WAAW,CAAC,EAAG,EAAG,CAAC,CAAC,EACrC,aAAc,EAChB,EAEMC,EAAUF,EAAeC,CAAQ,EACvC,OAAOC,CAAO,EAAE,eAAe,2BAAyB,EAExD,OAAOZ,EAAI,WAAW,EAAE,sBAAsB,CAAC,EAC/C,OAAOA,EAAI,WAAW,EAAE,wBACtB,EACA,OAAO,IAAI,8BAA4B,CACzC,EACA,OAAOA,EAAI,WAAW,EAAE,wBACtB,EACA,OAAO,IAAI,gCAA8B,CAC3C,CACF,CAAC,CACH,CAAC,EAED,SAAS,mCAAoC,IAAM,CACjD,GAAG,oFAAqF,SAAY,CAElG,MAAMQ,EAAgC,CACpC,SAAU,CACR,CACE,QAAS,CACP,KAAM,uBAAqB,aAC3B,QAAS,UACT,YAAa,CACX,eAAgB,EAChB,QAAS,IAAI,WAAW,CAAC,EAAG,EAAG,CAAC,CAAC,CACnC,CACF,EACA,oBAAqB,CACnB,IACE,QAAQ,QAAQ,CACd,KAAM,uBAAqB,IAC3B,QAAS,WACT,YAAa,CACX,eAAgB,EAChB,QAAS,IAAI,WAAW,CAAC,EAAG,EAAG,CAAC,CAAC,CACnC,CACF,CAAC,CACL,CACF,CACF,EACA,sBAAuB,IAAI,WAC3B,eAAgB,gBAClB,EACAL,EAA2B,kBAAkBF,CAAa,EAC1DD,EAAI,YAAY,kBAAkBC,CAAa,EAS/C,MANa,IAAI,sBACfD,EACAQ,EACAF,EACAD,CACF,EACW,IAAI,EAGf,OAAOL,EAAI,WAAW,EAAE,sBAAsB,CAAC,EAC/C,OAAOA,EAAI,WAAW,EAAE,wBACtB,EACA,OAAO,IAAI,wBAAsB,CACnC,EACA,OAAOA,EAAI,WAAW,EAAE,wBACtB,EACA,OAAO,IAAI,8BAA4B,CACzC,EACA,OAAOA,EAAI,WAAW,EAAE,wBACtB,EACA,OAAO,IAAI,wBAAsB,CACnC,CACF,CAAC,CACH,CAAC,EAED,SAAS,aAAc,IAAM,CAC3B,GAAG,qDAAsD,SAAY,CAEnE,MAAMQ,EAAgC,CACpC,SAAU,CACR,CACE,QAAS,CACP,KAAM,uBAAqB,MAC3B,QAAS,SACX,EACA,oBAAqB,CAAC,CACxB,CACF,EACA,sBAAuB,IAAI,WAC3B,eAAgB,gBAClB,EACAR,EAAI,YAAY,kBAAkBE,CAAW,EAS7C,MAAMO,EAAS,MANF,IAAI,sBACfT,EACAQ,EACAF,EACAD,CACF,EAC0B,IAAI,EAG9B,OAAOI,CAAM,EAAE,WAAQ,QAAKP,CAAW,CAAC,CAC1C,CAAC,EAED,GAAG,yDAA0D,SAAY,CAEvE,MAAMM,EAAgC,CACpC,SAAU,CACR,CACE,QAAS,CACP,KAAM,uBAAqB,MAC3B,QAAS,SACX,EACA,oBAAqB,CACnB,IACE,QAAQ,QAAQ,CACd,KAAM,uBAAqB,MAC3B,QAAS,SACX,CAAC,CACL,CACF,CACF,EACA,sBAAuB,IAAI,WAC3B,eAAgB,gBAClB,EACAR,EAAI,YAAY,kBAAkBE,CAAW,EAS7C,MAAMO,EAAS,MANF,IAAI,sBACfT,EACAQ,EACAF,EACAD,CACF,EAC0B,IAAI,EAG9B,OAAOI,CAAM,EAAE,WAAQ,QAAKP,CAAW,CAAC,CAC1C,CAAC,EAED,GAAG,sDAAuD,SAAY,CAEpE,MAAMM,EAAgC,CACpC,SAAU,CACR,CACE,QAAS,CACP,KAAM,cACN,QAAS,SACX,EACA,oBAAqB,CAAC,CACxB,CACF,EACA,sBAAuB,IAAI,WAC3B,eAAgB,gBAClB,EASMC,EAAS,MANF,IAAI,sBACfT,EACAQ,EACAF,EACAD,CACF,EAC0B,IAAI,EAG9B,OAAOI,CAAM,EAAE,WACb,WACE,wBAAqB,CACnB,MAAO,IAAI,yBACT,+CACF,CACF,CAAC,CACH,CACF,CACF,CAAC,CACH,CAAC,EAED,SAAS,gBAAiB,IAAM,CAC9B,GAAG,0DAA2D,IAAM,CAElE,MAAMS,EAAO,IAAI,sBAAoBlB,EAAK,CACxC,SAAU,CACR,CACE,QAAS,CACP,KAAM,uBAAqB,MAC3B,QAAS,SACX,EACA,oBAAqB,CAAC,CACxB,CACF,EACA,sBAAuB,IAAI,WAC3B,eAAgB,gBAClB,CAAC,EAGD,OAAOkB,EAAK,+BAAkC,EAAE,YAAY,EAC5D,MAAMC,EAA0BD,EAAK,gCACnClB,EACA,CACE,QAAS,UACT,eAAgB,IACd,IAAI,4CAA0C,CAC5C,KAAM,IAAI,WACV,aAAc,EAChB,CAAC,CACL,CACF,EACA,OAAOmB,CAAuB,EAAE,eAAe,yBAAuB,CACxE,CAAC,EAED,GAAG,0DAA2D,IAAM,CAElE,MAAMD,EAAO,IAAI,sBAAoBlB,EAAK,CACxC,SAAU,CACR,CACE,QAAS,CACP,KAAM,uBAAqB,MAC3B,QAAS,SACX,EACA,oBAAqB,CAAC,CACxB,CACF,EACA,sBAAuB,IAAI,WAC3B,eAAgB,gBAClB,CAAC,EAGD,OAAOkB,EAAK,+BAAkC,EAAE,YAAY,EAC5D,MAAME,EAA0BF,EAAK,gCACnClB,EACA,CACE,KAAM,IAAI,WACV,eAAgB,IACd,IAAI,0BAAwB,CAC1B,sBAAuB,IAAI,WAC3B,aAAc,EAChB,CAAC,CACL,CACF,EACA,OAAOoB,CAAuB,EAAE,eAAe,yBAAuB,CACxE,CAAC,CACH,CAAC,CACH,CAAC,CACH,CAAC",
|
|
6
|
-
"names": ["import_context_module", "import_device_management_kit", "import_purify_ts", "import_ProvideEnumCommand", "import_ProvideNetworkConfigurationCommand", "import_ProvideNFTInformationCommand", "import_ProvideProxyInfoCommand", "import_ProvideTokenInformationCommand", "import_ProvideTransactionFieldDescriptionCommand", "import_ProvideTransactionInformationCommand", "import_ProvideTrustedNameCommand", "import_ProvideWeb3CheckCommand", "import_SetExternalPluginCommand", "import_SetPluginCommand", "import_StoreTransactionCommand", "import_makeInternalApi", "import_ProvideContextsTask", "import_SendCommandInChunksTask", "import_SendPayloadInChunksTask", "api", "successResult", "errorResult", "sendPayloadInChunksRunMock", "sendCommandInChunksTaskRunMock", "sendCommandInChunksTaskMockFactory", "sendPayloadInChunksTaskMockFactory", "a", "args", "result", "commandFactory", "mockArgs", "command", "commandFactory2", "command2", "contextType", "commandClass", "withPayloadLength", "task", "sendPayloadInChunksTask", "sendCommandInChunksTask"]
|
|
7
|
-
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{ClearSignContextType as a}from"@ledgerhq/context-module";import{ByteArrayBuilder as c,CommandResultFactory as h,InvalidStatusWordError as k,isSuccessCommandResult as d,LoadCertificateCommand as p}from"@ledgerhq/device-management-kit";import{DerivationPathUtils as T}from"@ledgerhq/signer-utils";import{Left as m,Right as y}from"purify-ts";import{ProvideEnumCommand as f}from"../../app-binder/command/ProvideEnumCommand";import{NetworkConfigurationType as u,ProvideNetworkConfigurationCommand as C}from"../../app-binder/command/ProvideNetworkConfigurationCommand";import{ProvideNFTInformationCommand as I}from"../../app-binder/command/ProvideNFTInformationCommand";import{ProvideProxyInfoCommand as F}from"../../app-binder/command/ProvideProxyInfoCommand";import{ProvideTokenInformationCommand as l}from"../../app-binder/command/ProvideTokenInformationCommand";import{ProvideTransactionFieldDescriptionCommand as _}from"../../app-binder/command/ProvideTransactionFieldDescriptionCommand";import{ProvideTransactionInformationCommand as P}from"../../app-binder/command/ProvideTransactionInformationCommand";import{ProvideTrustedNameCommand as w}from"../../app-binder/command/ProvideTrustedNameCommand";import{ProvideWeb3CheckCommand as v}from"../../app-binder/command/ProvideWeb3CheckCommand";import{SetExternalPluginCommand as N}from"../../app-binder/command/SetExternalPluginCommand";import{SetPluginCommand as E}from"../../app-binder/command/SetPluginCommand";import{StoreTransactionCommand as x}from"../../app-binder/command/StoreTransactionCommand";import{SendCommandInChunksTask as R}from"./SendCommandInChunksTask";import{SendPayloadInChunksTask as A}from"./SendPayloadInChunksTask";class J{constructor(i,n,s=(r,o)=>new A(r,o),t=(r,o)=>new R(r,o)){this._api=i;this._args=n;this._sendPayloadInChunksTaskFactory=s;this._sendCommandInChunksTaskFactory=t}async run(){let i=!1;for(const{context:n,subcontextCallbacks:s}of this._args.contexts){for(const r of s){const o=await r();if(o.type===a.ERROR)continue;const e=await this.provideContext(o);if(!d(e))return m(e)}if(n.type===a.PROXY_INFO)continue;if(!i&&this._args.serializedTransaction!==void 0&&n.type===a.TRANSACTION_INFO){i=!0;const r=T.splitPath(this._args.derivationPath),o=new c;o.add8BitUIntToData(r.length),r.forEach(e=>{o.add32BitUIntToData(e)}),o.addBufferToData(this._args.serializedTransaction),await this._sendCommandInChunksTaskFactory(this._api,{data:o.build(),commandFactory:e=>new x({serializedTransaction:e.chunkedData,isFirstChunk:e.isFirstChunk})}).run()}const t=await this.provideContext(n);if(!d(t))return m(t)}return y(void 0)}async provideContext({type:i,payload:n,certificate:s}){switch(s&&await this._api.sendCommand(new p({keyUsage:s.keyUsageNumber,certificate:s.payload})),i){case a.PLUGIN:return await this._api.sendCommand(new E({payload:n}));case a.EXTERNAL_PLUGIN:return await this._api.sendCommand(new N({payload:n}));case a.NFT:return await this._api.sendCommand(new I({payload:n}));case a.TOKEN:return await this._api.sendCommand(new l({payload:n}));case a.TRANSACTION_INFO:return await this._sendPayloadInChunksTaskFactory(this._api,{payload:n,commandFactory:r=>new P({data:r.chunkedData,isFirstChunk:r.isFirstChunk})}).run();case a.TRUSTED_NAME:return this._sendPayloadInChunksTaskFactory(this._api,{payload:n,commandFactory:t=>new w({data:t.chunkedData,isFirstChunk:t.isFirstChunk})}).run();case a.ENUM:return this._sendPayloadInChunksTaskFactory(this._api,{payload:n,commandFactory:t=>new f({data:t.chunkedData,isFirstChunk:t.isFirstChunk})}).run();case a.TRANSACTION_FIELD_DESCRIPTION:return this._sendPayloadInChunksTaskFactory(this._api,{payload:n,commandFactory:t=>new _({data:t.chunkedData,isFirstChunk:t.isFirstChunk})}).run();case a.WEB3_CHECK:return this._sendPayloadInChunksTaskFactory(this._api,{payload:n,commandFactory:t=>new v({payload:t.chunkedData,isFirstChunk:t.isFirstChunk})}).run();case a.PROXY_INFO:return this._sendPayloadInChunksTaskFactory(this._api,{payload:n,commandFactory:t=>new F({data:t.chunkedData,isFirstChunk:t.isFirstChunk})}).run();case a.DYNAMIC_NETWORK:return this._sendPayloadInChunksTaskFactory(this._api,{payload:n,commandFactory:t=>new C({data:t.chunkedData,isFirstChunk:t.isFirstChunk,configurationType:u.CONFIGURATION})}).run();case a.DYNAMIC_NETWORK_ICON:return this._sendPayloadInChunksTaskFactory(this._api,{payload:n,commandFactory:t=>new C({data:t.chunkedData,isFirstChunk:t.isFirstChunk,configurationType:u.ICON}),withPayloadLength:!1}).run();default:{const t=i;return h({error:new k(`The context type [${t}] is not covered`)})}}}}export{J as ProvideContextsTask};
|
|
2
|
-
//# sourceMappingURL=ProvideContextsTask.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../../src/internal/app-binder/task/ProvideContextsTask.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type ClearSignContextSuccess,\n ClearSignContextType,\n} from \"@ledgerhq/context-module\";\nimport {\n ByteArrayBuilder,\n type CommandErrorResult,\n type CommandResult,\n CommandResultFactory,\n type InternalApi,\n InvalidStatusWordError,\n isSuccessCommandResult,\n LoadCertificateCommand,\n} from \"@ledgerhq/device-management-kit\";\nimport { DerivationPathUtils } from \"@ledgerhq/signer-utils\";\nimport { type Either, Left, Right } from \"purify-ts\";\n\nimport { ProvideEnumCommand } from \"@internal/app-binder/command/ProvideEnumCommand\";\nimport {\n NetworkConfigurationType,\n ProvideNetworkConfigurationCommand,\n} from \"@internal/app-binder/command/ProvideNetworkConfigurationCommand\";\nimport { ProvideNFTInformationCommand } from \"@internal/app-binder/command/ProvideNFTInformationCommand\";\nimport { ProvideProxyInfoCommand } from \"@internal/app-binder/command/ProvideProxyInfoCommand\";\nimport { ProvideTokenInformationCommand } from \"@internal/app-binder/command/ProvideTokenInformationCommand\";\nimport { ProvideTransactionFieldDescriptionCommand } from \"@internal/app-binder/command/ProvideTransactionFieldDescriptionCommand\";\nimport { ProvideTransactionInformationCommand } from \"@internal/app-binder/command/ProvideTransactionInformationCommand\";\nimport { ProvideTrustedNameCommand } from \"@internal/app-binder/command/ProvideTrustedNameCommand\";\nimport { ProvideWeb3CheckCommand } from \"@internal/app-binder/command/ProvideWeb3CheckCommand\";\nimport { SetExternalPluginCommand } from \"@internal/app-binder/command/SetExternalPluginCommand\";\nimport { SetPluginCommand } from \"@internal/app-binder/command/SetPluginCommand\";\nimport { StoreTransactionCommand } from \"@internal/app-binder/command/StoreTransactionCommand\";\nimport { type EthErrorCodes } from \"@internal/app-binder/command/utils/ethAppErrors\";\n\nimport { type ContextWithSubContexts } from \"./BuildFullContextsTask\";\nimport {\n SendCommandInChunksTask,\n type SendCommandInChunksTaskArgs,\n} from \"./SendCommandInChunksTask\";\nimport {\n SendPayloadInChunksTask,\n type SendPayloadInChunksTaskArgs,\n} from \"./SendPayloadInChunksTask\";\n\nexport type ProvideContextsTaskArgs = {\n /**\n * The list of clear sign context with subcontexts callback to provide.\n */\n contexts: ContextWithSubContexts[];\n /**\n * The derivation path to provide.\n */\n derivationPath: string;\n /**\n * The serialized transaction to provide.\n * This parameter is optional in the case there is no transaction at all, for instance\n * if there is only a standalone calldata embedded in a message.\n */\n serializedTransaction?: Uint8Array;\n};\n\nexport type ProvideContextsTaskResult = Either<\n CommandErrorResult<EthErrorCodes>,\n void\n>;\n\n/**\n * This task is responsible for providing the transaction context to the device.\n * It will send the subcontexts callbacks in order and finish with the context.\n */\nexport class ProvideContextsTask {\n constructor(\n private _api: InternalApi,\n private _args: ProvideContextsTaskArgs,\n private _sendPayloadInChunksTaskFactory = (\n api: InternalApi,\n args: SendPayloadInChunksTaskArgs<unknown>,\n ) => new SendPayloadInChunksTask(api, args),\n private _sendCommandInChunksTaskFactory = (\n api: InternalApi,\n args: SendCommandInChunksTaskArgs<unknown>,\n ) => new SendCommandInChunksTask(api, args),\n ) {}\n\n async run(): Promise<ProvideContextsTaskResult> {\n let transactionInfoProvided = false;\n\n for (const { context, subcontextCallbacks } of this._args.contexts) {\n for (const callback of subcontextCallbacks) {\n const subcontext = await callback();\n\n if (subcontext.type === ClearSignContextType.ERROR) {\n // silently ignore error subcontexts\n continue;\n }\n\n const res = await this.provideContext(subcontext);\n if (!isSuccessCommandResult(res)) {\n return Left(res);\n }\n }\n\n if (context.type === ClearSignContextType.PROXY_INFO) {\n // In this specific case, the context is not valid as the challenge is not valid on the first call\n // the real data is provided in the subcontext callback\n continue;\n }\n\n if (\n !transactionInfoProvided &&\n this._args.serializedTransaction !== undefined &&\n context.type === ClearSignContextType.TRANSACTION_INFO\n ) {\n // Send the serialized transaction for the first TRANSACTION_INFO.\n // All other TRANSACTION_INFO contexts will be ignored as it will be for nested calldata.\n transactionInfoProvided = true;\n\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 await this._sendCommandInChunksTaskFactory(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\n const res = await this.provideContext(context);\n if (!isSuccessCommandResult(res)) {\n return Left(res);\n }\n }\n\n return Right(void 0);\n }\n\n /**\n * This method will send the context to the device.\n *\n * @param context The clear sign context to provide.\n * @returns A promise that resolves when the command is sent.\n */\n async provideContext({\n type,\n payload,\n certificate,\n }: ClearSignContextSuccess): Promise<CommandResult<unknown, EthErrorCodes>> {\n // if a certificate is provided, we load it before sending the command\n if (certificate) {\n await this._api.sendCommand(\n new LoadCertificateCommand({\n keyUsage: certificate.keyUsageNumber,\n certificate: certificate.payload,\n }),\n );\n }\n\n switch (type) {\n case ClearSignContextType.PLUGIN: {\n return await this._api.sendCommand(new SetPluginCommand({ payload }));\n }\n case ClearSignContextType.EXTERNAL_PLUGIN: {\n return await this._api.sendCommand(\n new SetExternalPluginCommand({ payload }),\n );\n }\n case ClearSignContextType.NFT: {\n return await this._api.sendCommand(\n new ProvideNFTInformationCommand({ payload }),\n );\n }\n case ClearSignContextType.TOKEN: {\n return await this._api.sendCommand(\n new ProvideTokenInformationCommand({ payload }),\n );\n }\n case ClearSignContextType.TRANSACTION_INFO: {\n const transactionInfoResult =\n await this._sendPayloadInChunksTaskFactory(this._api, {\n payload,\n commandFactory: (args) =>\n new ProvideTransactionInformationCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n\n return transactionInfoResult;\n }\n case ClearSignContextType.TRUSTED_NAME: {\n return this._sendPayloadInChunksTaskFactory(this._api, {\n payload,\n commandFactory: (args) =>\n new ProvideTrustedNameCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n }\n case ClearSignContextType.ENUM:\n return this._sendPayloadInChunksTaskFactory(this._api, {\n payload,\n commandFactory: (args) =>\n new ProvideEnumCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n case ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION:\n return this._sendPayloadInChunksTaskFactory(this._api, {\n payload,\n commandFactory: (args) =>\n new ProvideTransactionFieldDescriptionCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n case ClearSignContextType.WEB3_CHECK:\n return this._sendPayloadInChunksTaskFactory(this._api, {\n payload,\n commandFactory: (args) =>\n new ProvideWeb3CheckCommand({\n payload: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n case ClearSignContextType.PROXY_INFO:\n return this._sendPayloadInChunksTaskFactory(this._api, {\n payload,\n commandFactory: (args) =>\n new ProvideProxyInfoCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n case ClearSignContextType.DYNAMIC_NETWORK:\n // Dynamic network configuration uses the existing ProvideNetworkConfiguration command\n // but is provided as part of the context flow\n return this._sendPayloadInChunksTaskFactory(this._api, {\n payload,\n commandFactory: (args) =>\n new ProvideNetworkConfigurationCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n configurationType: NetworkConfigurationType.CONFIGURATION,\n }),\n }).run();\n case ClearSignContextType.DYNAMIC_NETWORK_ICON: {\n return this._sendPayloadInChunksTaskFactory(this._api, {\n payload,\n commandFactory: (args) =>\n new ProvideNetworkConfigurationCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n configurationType: NetworkConfigurationType.ICON,\n }),\n withPayloadLength: false,\n }).run();\n }\n 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", "ByteArrayBuilder", "CommandResultFactory", "InvalidStatusWordError", "isSuccessCommandResult", "LoadCertificateCommand", "DerivationPathUtils", "Left", "Right", "ProvideEnumCommand", "NetworkConfigurationType", "ProvideNetworkConfigurationCommand", "ProvideNFTInformationCommand", "ProvideProxyInfoCommand", "ProvideTokenInformationCommand", "ProvideTransactionFieldDescriptionCommand", "ProvideTransactionInformationCommand", "ProvideTrustedNameCommand", "ProvideWeb3CheckCommand", "SetExternalPluginCommand", "SetPluginCommand", "StoreTransactionCommand", "SendCommandInChunksTask", "SendPayloadInChunksTask", "ProvideContextsTask", "_api", "_args", "_sendPayloadInChunksTaskFactory", "api", "args", "_sendCommandInChunksTaskFactory", "transactionInfoProvided", "context", "subcontextCallbacks", "callback", "subcontext", "res", "paths", "builder", "path", "type", "payload", "certificate", "uncoveredType"]
|
|
7
|
-
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{ClearSignContextType as a}from"@ledgerhq/context-module";import{CommandResultFactory as A,InvalidStatusWordError as B,LoadCertificateCommand as h}from"@ledgerhq/device-management-kit";import{Left as w,Right as x}from"purify-ts";import{ProvideEnumCommand as R}from"../../app-binder/command/ProvideEnumCommand";import{ProvideNetworkConfigurationCommand as N}from"../../app-binder/command/ProvideNetworkConfigurationCommand";import{ProvideNFTInformationCommand as I}from"../../app-binder/command/ProvideNFTInformationCommand";import{ProvideProxyInfoCommand as g}from"../../app-binder/command/ProvideProxyInfoCommand";import{ProvideTokenInformationCommand as T}from"../../app-binder/command/ProvideTokenInformationCommand";import{ProvideTransactionFieldDescriptionCommand as F}from"../../app-binder/command/ProvideTransactionFieldDescriptionCommand";import{ProvideTransactionInformationCommand as E}from"../../app-binder/command/ProvideTransactionInformationCommand";import{ProvideTrustedNameCommand as b}from"../../app-binder/command/ProvideTrustedNameCommand";import{ProvideWeb3CheckCommand as O}from"../../app-binder/command/ProvideWeb3CheckCommand";import{SetExternalPluginCommand as U}from"../../app-binder/command/SetExternalPluginCommand";import{SetPluginCommand as H}from"../../app-binder/command/SetPluginCommand";import{StoreTransactionCommand as P}from"../../app-binder/command/StoreTransactionCommand";import{makeDeviceActionInternalApiMock as S}from"../../app-binder/device-action/__test-utils__/makeInternalApi";import{ProvideContextsTask as i}from"./ProvideContextsTask";import{SendCommandInChunksTask as _}from"./SendCommandInChunksTask";import{SendPayloadInChunksTask as D}from"./SendPayloadInChunksTask";describe("ProvideContextsTask",()=>{const e=S(),c=A({data:void 0}),v=A({data:void 0,error:{}});beforeEach(()=>{vi.resetAllMocks()}),describe("run",()=>{const o=vi.fn(),C=vi.fn(),r=vi.fn(),d=vi.fn();beforeEach(()=>{vi.clearAllMocks(),r.mockImplementation((t,s)=>({run:()=>C(t,s)})),d.mockImplementation((t,s)=>({run:()=>o(t,s)}))}),describe("with no subcontexts",()=>{it("should provide the transaction context for a TRANSACTION_INFO context",async()=>{const t={contexts:[{context:{type:a.TRANSACTION_INFO,payload:"0x00",certificate:{keyUsageNumber:1,payload:new Uint8Array([1,2,3])}},subcontextCallbacks:[]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};C.mockResolvedValue(c),o.mockResolvedValue(c),e.sendCommand.mockResolvedValue(c);const n=await new i(e,t,d,r).run();expect(n).toEqual(x(void 0)),expect(C).toHaveBeenCalledTimes(1),expect(r).toHaveBeenCalledWith(e,{data:new Uint8Array([5,128,0,0,44,128,0,0,60,128,0,0,0,0,0,0,0,0,0,0,0]),commandFactory:expect.any(Function)});const m=r.mock.calls[0][1].commandFactory,l={chunkedData:new Uint8Array([1,2,3,4]),isFirstChunk:!0},y=m(l);expect(y).toBeInstanceOf(P),expect(e.sendCommand).toHaveBeenCalledTimes(1),expect(e.sendCommand).toHaveBeenCalledWith(expect.any(h)),expect(o).toHaveBeenCalledTimes(1),expect(o).toHaveBeenCalledWith(e,{payload:"0x00",commandFactory:expect.any(Function)});const u=o.mock.calls[0][1].commandFactory,k=u(l);expect(k).toBeInstanceOf(E)}),it("should provide the transaction context for a TRANSACTION_INFO context without certificate",async()=>{const t={contexts:[{context:{type:a.TRANSACTION_INFO,payload:"0x00"},subcontextCallbacks:[]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};C.mockResolvedValue(c),o.mockResolvedValue(c),e.sendCommand.mockResolvedValue(c);const n=await new i(e,t,d,r).run();expect(n).toEqual(x(void 0)),expect(C).toHaveBeenCalledTimes(1),expect(r).toHaveBeenCalledWith(e,{data:new Uint8Array([5,128,0,0,44,128,0,0,60,128,0,0,0,0,0,0,0,0,0,0,0]),commandFactory:expect.any(Function)});const m=r.mock.calls[0][1].commandFactory,l={chunkedData:new Uint8Array([1,2,3,4]),isFirstChunk:!0},y=m(l);expect(y).toBeInstanceOf(P),expect(e.sendCommand).toHaveBeenCalledTimes(0),expect(o).toHaveBeenCalledTimes(1),expect(o).toHaveBeenCalledWith(e,{payload:"0x00",commandFactory:expect.any(Function)});const u=o.mock.calls[0][1].commandFactory,k=u(l);expect(k).toBeInstanceOf(E)}),it.each([[a.PLUGIN,H],[a.EXTERNAL_PLUGIN,U],[a.NFT,I],[a.TOKEN,T]])("should provide the transaction context by calling sendCommand for a %s context",async(t,s)=>{const n={contexts:[{context:{type:t,payload:"payload"},subcontextCallbacks:[]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};e.sendCommand.mockResolvedValue(c);const m=await new i(e,n,d,r).run();expect(m).toEqual(x(void 0)),expect(e.sendCommand).toHaveBeenCalledTimes(1),expect(e.sendCommand).toHaveBeenCalledWith(expect.any(s))}),it.each([[a.ENUM,R],[a.TRUSTED_NAME,b],[a.WEB3_CHECK,O],[a.TRANSACTION_FIELD_DESCRIPTION,F],[a.DYNAMIC_NETWORK_ICON,N,!1],[a.DYNAMIC_NETWORK,N]])("should provide the transaction context by calling sendPayloadInChunksTask for a %s context",async(t,s,n=void 0)=>{const p={contexts:[{context:{type:t,payload:"payload",id:1,value:1},subcontextCallbacks:[]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};o.mockResolvedValue(c);const l=await new i(e,p,d,r).run();expect(l).toEqual(x(void 0)),expect(o).toHaveBeenCalledTimes(1),n===void 0?expect(o).toHaveBeenCalledWith(e,{payload:"payload",commandFactory:expect.any(Function)}):expect(o).toHaveBeenCalledWith(e,{payload:"payload",commandFactory:expect.any(Function),withPayloadLength:n});const f=d.mock.calls[0][1].commandFactory,u={chunkedData:new Uint8Array([1,2,3]),isFirstChunk:!0},k=f(u);expect(k).toBeInstanceOf(s)}),it("should only provide the subcontexts if the context is a PROXY_INFO",async()=>{const t={contexts:[{context:{type:a.PROXY_INFO,payload:"payload"},subcontextCallbacks:[()=>Promise.resolve({type:a.PROXY_INFO,payload:"subcontext payload"})]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};o.mockResolvedValue(c);const n=await new i(e,t,d,r).run();expect(n).toEqual(x(void 0)),expect(o).toHaveBeenCalledTimes(1),expect(o).toHaveBeenCalledWith(e,{payload:"subcontext payload",commandFactory:expect.any(Function)});const m=d.mock.calls[0][1].commandFactory,l={chunkedData:new Uint8Array([1,2,3]),isFirstChunk:!0},y=m(l);expect(y).toBeInstanceOf(g)}),it("should skip the subcontexts if the context is an error",async()=>{const t={contexts:[{context:{type:a.TOKEN,payload:"payload",certificate:{keyUsageNumber:1,payload:new Uint8Array([1,2,3])}},subcontextCallbacks:[()=>Promise.resolve({type:a.ERROR,error:new Error("error")})]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};o.mockResolvedValue(c),e.sendCommand.mockResolvedValue(c);const n=await new i(e,t,d,r).run();expect(n).toEqual(x(void 0)),expect(o).toHaveBeenCalledTimes(0),expect(C).toHaveBeenCalledTimes(0),expect(e.sendCommand).toHaveBeenCalledTimes(2),expect(e.sendCommand).toHaveBeenNthCalledWith(1,expect.any(h)),expect(e.sendCommand).toHaveBeenNthCalledWith(2,expect.any(T))})}),describe("with subcontexts",()=>{it("should provide the transaction context and subcontext for a TRANSACTION_FIELD_DESCRIPTION context",async()=>{const t={contexts:[{context:{type:a.TRANSACTION_FIELD_DESCRIPTION,payload:"payload"},subcontextCallbacks:[()=>Promise.resolve({type:a.TOKEN,payload:"payload"})]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};o.mockResolvedValue(c),e.sendCommand.mockResolvedValue(c);const n=await new i(e,t,d,r).run();expect(n).toEqual(x(void 0)),expect(o).toHaveBeenCalledTimes(1),expect(o).toHaveBeenCalledWith(e,{payload:"payload",commandFactory:expect.any(Function)});const m=d.mock.calls[0][1].commandFactory,l={chunkedData:new Uint8Array([1,2,3]),isFirstChunk:!0},y=m(l);expect(y).toBeInstanceOf(F),expect(e.sendCommand).toHaveBeenCalledTimes(1),expect(e.sendCommand).toHaveBeenCalledWith(expect.any(T))}),it("should provide the transaction context and subcontexts for a TRUSTED_NAME context",async()=>{const t={contexts:[{context:{type:a.TRUSTED_NAME,payload:"payload"},subcontextCallbacks:[()=>Promise.resolve({type:a.NFT,payload:"payload1"}),()=>Promise.resolve({type:a.TOKEN,payload:"payload2"})]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};o.mockResolvedValue(c),e.sendCommand.mockResolvedValue(c);const n=await new i(e,t,d,r).run();expect(n).toEqual(x(void 0)),expect(o).toHaveBeenCalledTimes(1),expect(o).toHaveBeenCalledWith(e,{payload:"payload",commandFactory:expect.any(Function)});const m=d.mock.calls[0][1].commandFactory,l={chunkedData:new Uint8Array([1,2,3]),isFirstChunk:!0},y=m(l);expect(y).toBeInstanceOf(b),expect(e.sendCommand).toHaveBeenCalledTimes(2),expect(e.sendCommand).toHaveBeenNthCalledWith(1,expect.any(I)),expect(e.sendCommand).toHaveBeenNthCalledWith(2,expect.any(T))})}),describe("with subcontexts and certificate",()=>{it("should provide the transaction context and subcontexts for a TRUSTED_NAME context",async()=>{const t={contexts:[{context:{type:a.TRUSTED_NAME,payload:"payload",certificate:{keyUsageNumber:1,payload:new Uint8Array([1,2,3])}},subcontextCallbacks:[()=>Promise.resolve({type:a.NFT,payload:"payload1",certificate:{keyUsageNumber:2,payload:new Uint8Array([4,5,6])}})]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};o.mockResolvedValue(c),e.sendCommand.mockResolvedValue(c),await new i(e,t,d,r).run(),expect(e.sendCommand).toHaveBeenCalledTimes(3),expect(e.sendCommand).toHaveBeenNthCalledWith(1,expect.any(h)),expect(e.sendCommand).toHaveBeenNthCalledWith(2,expect.any(I)),expect(e.sendCommand).toHaveBeenNthCalledWith(3,expect.any(h))})}),describe("with error",()=>{it("should return an error if the provideContext fails",async()=>{const t={contexts:[{context:{type:a.TOKEN,payload:"payload"},subcontextCallbacks:[]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};e.sendCommand.mockResolvedValue(v);const n=await new i(e,t,d,r).run();expect(n).toEqual(w(v))}),it("should return an error if the provide subcontext fails",async()=>{const t={contexts:[{context:{type:a.TOKEN,payload:"payload"},subcontextCallbacks:[()=>Promise.resolve({type:a.TOKEN,payload:"payload"})]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};e.sendCommand.mockResolvedValue(v);const n=await new i(e,t,d,r).run();expect(n).toEqual(w(v))}),it("should return an error if the type is not supported",async()=>{const t={contexts:[{context:{type:"unsupported",payload:"payload"},subcontextCallbacks:[]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"},n=await new i(e,t,d,r).run();expect(n).toEqual(w(A({error:new B("The context type [unsupported] is not covered")})))})}),describe("factory types",()=>{it("should have a sendPayloadInChunksTaskFactory by default",()=>{const t=new i(e,{contexts:[{context:{type:a.TOKEN,payload:"payload"},subcontextCallbacks:[]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"});expect(t._sendPayloadInChunksTaskFactory).toBeDefined();const s=t._sendPayloadInChunksTaskFactory(e,{payload:"payload",commandFactory:()=>new F({data:new Uint8Array,isFirstChunk:!0})});expect(s).toBeInstanceOf(D)}),it("should have a sendCommandInChunksTaskFactory by default",()=>{const t=new i(e,{contexts:[{context:{type:a.TOKEN,payload:"payload"},subcontextCallbacks:[]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"});expect(t._sendCommandInChunksTaskFactory).toBeDefined();const s=t._sendCommandInChunksTaskFactory(e,{data:new Uint8Array,commandFactory:()=>new P({serializedTransaction:new Uint8Array,isFirstChunk:!0})});expect(s).toBeInstanceOf(_)})})})});
|
|
2
|
-
//# sourceMappingURL=ProvideContextsTask.test.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../../src/internal/app-binder/task/ProvideContextsTask.test.ts"],
|
|
4
|
-
"sourcesContent": ["import { ClearSignContextType } from \"@ledgerhq/context-module\";\nimport {\n CommandResultFactory,\n type InternalApi,\n InvalidStatusWordError,\n LoadCertificateCommand,\n type UnknownDeviceExchangeError,\n} from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { ProvideEnumCommand } from \"@internal/app-binder/command/ProvideEnumCommand\";\nimport { ProvideNetworkConfigurationCommand } from \"@internal/app-binder/command/ProvideNetworkConfigurationCommand\";\nimport { ProvideNFTInformationCommand } from \"@internal/app-binder/command/ProvideNFTInformationCommand\";\nimport { ProvideProxyInfoCommand } from \"@internal/app-binder/command/ProvideProxyInfoCommand\";\nimport { ProvideTokenInformationCommand } from \"@internal/app-binder/command/ProvideTokenInformationCommand\";\nimport { ProvideTransactionFieldDescriptionCommand } from \"@internal/app-binder/command/ProvideTransactionFieldDescriptionCommand\";\nimport { ProvideTransactionInformationCommand } from \"@internal/app-binder/command/ProvideTransactionInformationCommand\";\nimport { ProvideTrustedNameCommand } from \"@internal/app-binder/command/ProvideTrustedNameCommand\";\nimport { ProvideWeb3CheckCommand } from \"@internal/app-binder/command/ProvideWeb3CheckCommand\";\nimport { SetExternalPluginCommand } from \"@internal/app-binder/command/SetExternalPluginCommand\";\nimport { SetPluginCommand } from \"@internal/app-binder/command/SetPluginCommand\";\nimport { StoreTransactionCommand } from \"@internal/app-binder/command/StoreTransactionCommand\";\nimport { type EthErrorCodes } from \"@internal/app-binder/command/utils/ethAppErrors\";\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\n\nimport {\n ProvideContextsTask,\n type ProvideContextsTaskArgs,\n} from \"./ProvideContextsTask\";\nimport {\n SendCommandInChunksTask,\n type SendCommandInChunksTaskArgs,\n} from \"./SendCommandInChunksTask\";\nimport {\n SendPayloadInChunksTask,\n type SendPayloadInChunksTaskArgs,\n} from \"./SendPayloadInChunksTask\";\n\ndescribe(\"ProvideContextsTask\", () => {\n const api = makeDeviceActionInternalApiMock();\n const successResult = CommandResultFactory<void, EthErrorCodes>({\n data: undefined,\n });\n const errorResult = CommandResultFactory<void, EthErrorCodes>({\n data: undefined,\n error: {} as UnknownDeviceExchangeError,\n });\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"run\", () => {\n const sendPayloadInChunksRunMock = vi.fn();\n const sendCommandInChunksTaskRunMock = vi.fn();\n const sendCommandInChunksTaskMockFactory = vi.fn();\n const sendPayloadInChunksTaskMockFactory = vi.fn();\n\n beforeEach(() => {\n vi.clearAllMocks();\n sendCommandInChunksTaskMockFactory.mockImplementation(\n (a: InternalApi, args: SendCommandInChunksTaskArgs<unknown>) =>\n ({\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n run: () => sendCommandInChunksTaskRunMock(a, args),\n }) as unknown as SendCommandInChunksTask<unknown>,\n );\n sendPayloadInChunksTaskMockFactory.mockImplementation(\n (a: InternalApi, args: SendPayloadInChunksTaskArgs<unknown>) =>\n ({\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n run: () => sendPayloadInChunksRunMock(a, args),\n }) as unknown as SendPayloadInChunksTask<unknown>,\n );\n });\n\n describe(\"with no subcontexts\", () => {\n it(\"should provide the transaction context for a TRANSACTION_INFO context\", async () => {\n // GIVEN\n const args: ProvideContextsTaskArgs = {\n contexts: [\n {\n context: {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"0x00\",\n certificate: {\n keyUsageNumber: 1,\n payload: new Uint8Array([1, 2, 3]),\n },\n },\n subcontextCallbacks: [],\n },\n ],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n };\n sendCommandInChunksTaskRunMock.mockResolvedValue(successResult);\n sendPayloadInChunksRunMock.mockResolvedValue(successResult);\n api.sendCommand.mockResolvedValue(successResult);\n\n // WHEN\n const task = new ProvideContextsTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n sendCommandInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(Right(void 0));\n\n // StoreTransactionCommand\n expect(sendCommandInChunksTaskRunMock).toHaveBeenCalledTimes(1);\n expect(sendCommandInChunksTaskMockFactory).toHaveBeenCalledWith(api, {\n data: new Uint8Array([\n 0x05, 0x80, 0x00, 0x00, 0x2c, 0x80, 0x00, 0x00, 0x3c, 0x80, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n ]),\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n commandFactory: expect.any(Function),\n });\n // Test that the commandFactory returns a StoreTransactionCommand\n const factoryCall = sendCommandInChunksTaskMockFactory.mock.calls[0]!;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const commandFactory = factoryCall[1].commandFactory;\n // arbitrary data to test the commandFactory\n const mockArgs = {\n chunkedData: new Uint8Array([1, 2, 3, 4]),\n isFirstChunk: true,\n };\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n const command = commandFactory(mockArgs);\n expect(command).toBeInstanceOf(StoreTransactionCommand);\n\n // LoadCertificateCommand\n expect(api.sendCommand).toHaveBeenCalledTimes(1);\n expect(api.sendCommand).toHaveBeenCalledWith(\n expect.any(LoadCertificateCommand),\n );\n\n // ProvideTransactionInformationCommand\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledTimes(1);\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledWith(api, {\n payload: \"0x00\",\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n commandFactory: expect.any(Function),\n });\n // Test that the commandFactory returns a ProvideTransactionInformationCommand\n const factoryCall2 = sendPayloadInChunksRunMock.mock.calls[0]!;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const commandFactory2 = factoryCall2[1].commandFactory;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n const command2 = commandFactory2(mockArgs);\n expect(command2).toBeInstanceOf(ProvideTransactionInformationCommand);\n });\n\n it(\"should provide the transaction context for a TRANSACTION_INFO context without certificate\", async () => {\n // GIVEN\n const args: ProvideContextsTaskArgs = {\n contexts: [\n {\n context: {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"0x00\",\n },\n subcontextCallbacks: [],\n },\n ],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n };\n sendCommandInChunksTaskRunMock.mockResolvedValue(successResult);\n sendPayloadInChunksRunMock.mockResolvedValue(successResult);\n api.sendCommand.mockResolvedValue(successResult);\n\n // WHEN\n const task = new ProvideContextsTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n sendCommandInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(Right(void 0));\n\n // StoreTransactionCommand\n expect(sendCommandInChunksTaskRunMock).toHaveBeenCalledTimes(1);\n expect(sendCommandInChunksTaskMockFactory).toHaveBeenCalledWith(api, {\n data: new Uint8Array([\n 0x05, 0x80, 0x00, 0x00, 0x2c, 0x80, 0x00, 0x00, 0x3c, 0x80, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n ]),\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n commandFactory: expect.any(Function),\n });\n // Test that the commandFactory returns a StoreTransactionCommand\n const factoryCall = sendCommandInChunksTaskMockFactory.mock.calls[0]!;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const commandFactory = factoryCall[1].commandFactory;\n // arbitrary data to test the commandFactory\n const mockArgs = {\n chunkedData: new Uint8Array([1, 2, 3, 4]),\n isFirstChunk: true,\n };\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n const command = commandFactory(mockArgs);\n expect(command).toBeInstanceOf(StoreTransactionCommand);\n\n // LoadCertificateCommand\n expect(api.sendCommand).toHaveBeenCalledTimes(0);\n\n // ProvideTransactionInformationCommand\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledTimes(1);\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledWith(api, {\n payload: \"0x00\",\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n commandFactory: expect.any(Function),\n });\n // Test that the commandFactory returns a ProvideTransactionInformationCommand\n const factoryCall2 = sendPayloadInChunksRunMock.mock.calls[0]!;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const commandFactory2 = factoryCall2[1].commandFactory;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n const command2 = commandFactory2(mockArgs);\n expect(command2).toBeInstanceOf(ProvideTransactionInformationCommand);\n });\n\n it.each([\n [ClearSignContextType.PLUGIN, SetPluginCommand],\n [ClearSignContextType.EXTERNAL_PLUGIN, SetExternalPluginCommand],\n [ClearSignContextType.NFT, ProvideNFTInformationCommand],\n [ClearSignContextType.TOKEN, ProvideTokenInformationCommand],\n ] as const)(\n \"should provide the transaction context by calling sendCommand for a %s context\",\n async (contextType, commandClass) => {\n // GIVEN\n const args: ProvideContextsTaskArgs = {\n contexts: [\n {\n context: {\n type: contextType,\n payload: \"payload\",\n },\n subcontextCallbacks: [],\n },\n ],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n };\n api.sendCommand.mockResolvedValue(successResult);\n\n // WHEN\n const task = new ProvideContextsTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n sendCommandInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(Right(void 0));\n expect(api.sendCommand).toHaveBeenCalledTimes(1);\n expect(api.sendCommand).toHaveBeenCalledWith(\n expect.any(commandClass),\n );\n },\n );\n\n it.each([\n [ClearSignContextType.ENUM, ProvideEnumCommand],\n [ClearSignContextType.TRUSTED_NAME, ProvideTrustedNameCommand],\n [ClearSignContextType.WEB3_CHECK, ProvideWeb3CheckCommand],\n [\n ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n ProvideTransactionFieldDescriptionCommand,\n ],\n [\n ClearSignContextType.DYNAMIC_NETWORK_ICON,\n ProvideNetworkConfigurationCommand,\n false,\n ],\n [\n ClearSignContextType.DYNAMIC_NETWORK,\n ProvideNetworkConfigurationCommand,\n ],\n ] as const)(\n \"should provide the transaction context by calling sendPayloadInChunksTask for a %s context\",\n async (contextType, commandClass, withPayloadLength = undefined) => {\n // GIVEN\n const args: ProvideContextsTaskArgs = {\n contexts: [\n {\n context: {\n type: contextType,\n payload: \"payload\",\n id: 1,\n value: 1,\n },\n subcontextCallbacks: [],\n },\n ],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n };\n sendPayloadInChunksRunMock.mockResolvedValue(successResult);\n\n // WHEN\n const task = new ProvideContextsTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n sendCommandInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(Right(void 0));\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledTimes(1);\n if (withPayloadLength === undefined) {\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledWith(api, {\n payload: \"payload\",\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n commandFactory: expect.any(Function),\n });\n } else {\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledWith(api, {\n payload: \"payload\",\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n commandFactory: expect.any(Function),\n withPayloadLength,\n });\n }\n\n // Test that the commandFactory returns a commandClass\n const factoryCall = sendPayloadInChunksTaskMockFactory.mock.calls[0]!;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const commandFactory = factoryCall[1].commandFactory;\n const mockArgs = {\n chunkedData: new Uint8Array([1, 2, 3]),\n isFirstChunk: true,\n };\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n const command = commandFactory(mockArgs);\n expect(command).toBeInstanceOf(commandClass);\n },\n );\n\n it(\"should only provide the subcontexts if the context is a PROXY_INFO\", async () => {\n // GIVEN\n const args: ProvideContextsTaskArgs = {\n contexts: [\n {\n context: {\n type: ClearSignContextType.PROXY_INFO,\n payload: \"payload\",\n },\n subcontextCallbacks: [\n () =>\n Promise.resolve({\n type: ClearSignContextType.PROXY_INFO,\n payload: \"subcontext payload\",\n }),\n ],\n },\n ],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n };\n sendPayloadInChunksRunMock.mockResolvedValue(successResult);\n\n // WHEN\n const task = new ProvideContextsTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n sendCommandInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(Right(void 0));\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledTimes(1);\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledWith(api, {\n payload: \"subcontext payload\",\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n commandFactory: expect.any(Function),\n });\n\n // Test that the commandFactory returns a commandClass\n const factoryCall = sendPayloadInChunksTaskMockFactory.mock.calls[0]!;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const commandFactory = factoryCall[1].commandFactory;\n const mockArgs = {\n chunkedData: new Uint8Array([1, 2, 3]),\n isFirstChunk: true,\n };\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n const command = commandFactory(mockArgs);\n expect(command).toBeInstanceOf(ProvideProxyInfoCommand);\n });\n\n it(\"should skip the subcontexts if the context is an error\", async () => {\n // GIVEN\n const args: ProvideContextsTaskArgs = {\n contexts: [\n {\n context: {\n type: ClearSignContextType.TOKEN,\n payload: \"payload\",\n certificate: {\n keyUsageNumber: 1,\n payload: new Uint8Array([1, 2, 3]),\n },\n },\n subcontextCallbacks: [\n () =>\n Promise.resolve({\n type: ClearSignContextType.ERROR,\n error: new Error(\"error\"),\n }),\n ],\n },\n ],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n };\n sendPayloadInChunksRunMock.mockResolvedValue(successResult);\n api.sendCommand.mockResolvedValue(successResult);\n\n // WHEN\n const task = new ProvideContextsTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n sendCommandInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(Right(void 0));\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledTimes(0);\n expect(sendCommandInChunksTaskRunMock).toHaveBeenCalledTimes(0);\n expect(api.sendCommand).toHaveBeenCalledTimes(2);\n expect(api.sendCommand).toHaveBeenNthCalledWith(\n 1,\n expect.any(LoadCertificateCommand),\n );\n expect(api.sendCommand).toHaveBeenNthCalledWith(\n 2,\n expect.any(ProvideTokenInformationCommand),\n );\n });\n });\n\n describe(\"with subcontexts\", () => {\n it(\"should provide the transaction context and subcontext for a TRANSACTION_FIELD_DESCRIPTION context\", async () => {\n // GIVEN\n const args: ProvideContextsTaskArgs = {\n contexts: [\n {\n context: {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload\",\n },\n subcontextCallbacks: [\n () =>\n Promise.resolve({\n type: ClearSignContextType.TOKEN,\n payload: \"payload\",\n }),\n ],\n },\n ],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n };\n sendPayloadInChunksRunMock.mockResolvedValue(successResult);\n api.sendCommand.mockResolvedValue(successResult);\n\n // WHEN\n const task = new ProvideContextsTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n sendCommandInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(Right(void 0));\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledTimes(1);\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledWith(api, {\n payload: \"payload\",\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n commandFactory: expect.any(Function),\n });\n\n // Test that the commandFactory returns a commandClass\n const factoryCall = sendPayloadInChunksTaskMockFactory.mock.calls[0]!;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const commandFactory = factoryCall[1].commandFactory;\n const mockArgs = {\n chunkedData: new Uint8Array([1, 2, 3]),\n isFirstChunk: true,\n };\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n const command = commandFactory(mockArgs);\n expect(command).toBeInstanceOf(\n ProvideTransactionFieldDescriptionCommand,\n );\n\n expect(api.sendCommand).toHaveBeenCalledTimes(1);\n expect(api.sendCommand).toHaveBeenCalledWith(\n expect.any(ProvideTokenInformationCommand),\n );\n });\n\n it(\"should provide the transaction context and subcontexts for a TRUSTED_NAME context\", async () => {\n // GIVEN\n const args: ProvideContextsTaskArgs = {\n contexts: [\n {\n context: {\n type: ClearSignContextType.TRUSTED_NAME,\n payload: \"payload\",\n },\n subcontextCallbacks: [\n () =>\n Promise.resolve({\n type: ClearSignContextType.NFT,\n payload: \"payload1\",\n }),\n\n () =>\n Promise.resolve({\n type: ClearSignContextType.TOKEN,\n payload: \"payload2\",\n }),\n ],\n },\n ],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n };\n sendPayloadInChunksRunMock.mockResolvedValue(successResult);\n api.sendCommand.mockResolvedValue(successResult);\n\n // WHEN\n const task = new ProvideContextsTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n sendCommandInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(Right(void 0));\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledTimes(1);\n expect(sendPayloadInChunksRunMock).toHaveBeenCalledWith(api, {\n payload: \"payload\",\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n commandFactory: expect.any(Function),\n });\n\n // Test that the commandFactory returns a commandClass\n const factoryCall = sendPayloadInChunksTaskMockFactory.mock.calls[0]!;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const commandFactory = factoryCall[1].commandFactory;\n const mockArgs = {\n chunkedData: new Uint8Array([1, 2, 3]),\n isFirstChunk: true,\n };\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n const command = commandFactory(mockArgs);\n expect(command).toBeInstanceOf(ProvideTrustedNameCommand);\n\n expect(api.sendCommand).toHaveBeenCalledTimes(2);\n expect(api.sendCommand).toHaveBeenNthCalledWith(\n 1,\n expect.any(ProvideNFTInformationCommand),\n );\n expect(api.sendCommand).toHaveBeenNthCalledWith(\n 2,\n expect.any(ProvideTokenInformationCommand),\n );\n });\n });\n\n describe(\"with subcontexts and certificate\", () => {\n it(\"should provide the transaction context and subcontexts for a TRUSTED_NAME context\", async () => {\n // GIVEN\n const args: ProvideContextsTaskArgs = {\n contexts: [\n {\n context: {\n type: ClearSignContextType.TRUSTED_NAME,\n payload: \"payload\",\n certificate: {\n keyUsageNumber: 1,\n payload: new Uint8Array([1, 2, 3]),\n },\n },\n subcontextCallbacks: [\n () =>\n Promise.resolve({\n type: ClearSignContextType.NFT,\n payload: \"payload1\",\n certificate: {\n keyUsageNumber: 2,\n payload: new Uint8Array([4, 5, 6]),\n },\n }),\n ],\n },\n ],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n };\n sendPayloadInChunksRunMock.mockResolvedValue(successResult);\n api.sendCommand.mockResolvedValue(successResult);\n\n // WHEN\n const task = new ProvideContextsTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n sendCommandInChunksTaskMockFactory,\n );\n await task.run();\n\n // THEN\n expect(api.sendCommand).toHaveBeenCalledTimes(3);\n expect(api.sendCommand).toHaveBeenNthCalledWith(\n 1,\n expect.any(LoadCertificateCommand),\n );\n expect(api.sendCommand).toHaveBeenNthCalledWith(\n 2,\n expect.any(ProvideNFTInformationCommand),\n );\n expect(api.sendCommand).toHaveBeenNthCalledWith(\n 3,\n expect.any(LoadCertificateCommand),\n );\n });\n });\n\n describe(\"with error\", () => {\n it(\"should return an error if the provideContext fails\", async () => {\n // GIVEN\n const args: ProvideContextsTaskArgs = {\n contexts: [\n {\n context: {\n type: ClearSignContextType.TOKEN,\n payload: \"payload\",\n },\n subcontextCallbacks: [],\n },\n ],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n };\n api.sendCommand.mockResolvedValue(errorResult);\n\n // WHEN\n const task = new ProvideContextsTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n sendCommandInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(Left(errorResult));\n });\n\n it(\"should return an error if the provide subcontext fails\", async () => {\n // GIVEN\n const args: ProvideContextsTaskArgs = {\n contexts: [\n {\n context: {\n type: ClearSignContextType.TOKEN,\n payload: \"payload\",\n },\n subcontextCallbacks: [\n () =>\n Promise.resolve({\n type: ClearSignContextType.TOKEN,\n payload: \"payload\",\n }),\n ],\n },\n ],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n };\n api.sendCommand.mockResolvedValue(errorResult);\n\n // WHEN\n const task = new ProvideContextsTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n sendCommandInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(Left(errorResult));\n });\n\n it(\"should return an error if the type is not supported\", async () => {\n // GIVEN\n const args: ProvideContextsTaskArgs = {\n contexts: [\n {\n context: {\n type: \"unsupported\" as unknown as ClearSignContextType.TOKEN,\n payload: \"payload\",\n },\n subcontextCallbacks: [],\n },\n ],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n };\n\n // WHEN\n const task = new ProvideContextsTask(\n api,\n args,\n sendPayloadInChunksTaskMockFactory,\n sendCommandInChunksTaskMockFactory,\n );\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(\n Left(\n CommandResultFactory({\n error: new InvalidStatusWordError(\n `The context type [unsupported] is not covered`,\n ),\n }),\n ),\n );\n });\n });\n\n describe(\"factory types\", () => {\n it(\"should have a sendPayloadInChunksTaskFactory by default\", () => {\n // GIVEN\n const task = new ProvideContextsTask(api, {\n contexts: [\n {\n context: {\n type: ClearSignContextType.TOKEN,\n payload: \"payload\",\n },\n subcontextCallbacks: [],\n },\n ],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n });\n\n // THEN\n expect(task[\"_sendPayloadInChunksTaskFactory\"]).toBeDefined();\n const sendPayloadInChunksTask = task[\"_sendPayloadInChunksTaskFactory\"](\n api,\n {\n payload: \"payload\",\n commandFactory: () =>\n new ProvideTransactionFieldDescriptionCommand({\n data: new Uint8Array(),\n isFirstChunk: true,\n }),\n },\n );\n expect(sendPayloadInChunksTask).toBeInstanceOf(SendPayloadInChunksTask);\n });\n\n it(\"should have a sendCommandInChunksTaskFactory by default\", () => {\n // GIVEN\n const task = new ProvideContextsTask(api, {\n contexts: [\n {\n context: {\n type: ClearSignContextType.TOKEN,\n payload: \"payload\",\n },\n subcontextCallbacks: [],\n },\n ],\n serializedTransaction: new Uint8Array(),\n derivationPath: \"44'/60'/0'/0/0\",\n });\n\n // THEN\n expect(task[\"_sendCommandInChunksTaskFactory\"]).toBeDefined();\n const sendCommandInChunksTask = task[\"_sendCommandInChunksTaskFactory\"](\n api,\n {\n data: new Uint8Array(),\n commandFactory: () =>\n new StoreTransactionCommand({\n serializedTransaction: new Uint8Array(),\n isFirstChunk: true,\n }),\n },\n );\n expect(sendCommandInChunksTask).toBeInstanceOf(SendCommandInChunksTask);\n });\n });\n });\n});\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["ClearSignContextType", "CommandResultFactory", "InvalidStatusWordError", "LoadCertificateCommand", "Left", "Right", "ProvideEnumCommand", "ProvideNetworkConfigurationCommand", "ProvideNFTInformationCommand", "ProvideProxyInfoCommand", "ProvideTokenInformationCommand", "ProvideTransactionFieldDescriptionCommand", "ProvideTransactionInformationCommand", "ProvideTrustedNameCommand", "ProvideWeb3CheckCommand", "SetExternalPluginCommand", "SetPluginCommand", "StoreTransactionCommand", "makeDeviceActionInternalApiMock", "ProvideContextsTask", "SendCommandInChunksTask", "SendPayloadInChunksTask", "api", "successResult", "errorResult", "sendPayloadInChunksRunMock", "sendCommandInChunksTaskRunMock", "sendCommandInChunksTaskMockFactory", "sendPayloadInChunksTaskMockFactory", "a", "args", "result", "commandFactory", "mockArgs", "command", "commandFactory2", "command2", "contextType", "commandClass", "withPayloadLength", "task", "sendPayloadInChunksTask", "sendCommandInChunksTask"]
|
|
7
|
-
}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { type ClearSignContextSuccess } from "@ledgerhq/context-module";
|
|
2
|
-
import { type CommandErrorResult, type CommandResult, type InternalApi } from "@ledgerhq/device-management-kit";
|
|
3
|
-
import { type Either } from "purify-ts";
|
|
4
|
-
import { type EthErrorCodes } from "../../app-binder/command/utils/ethAppErrors";
|
|
5
|
-
import { type ContextWithSubContexts } from "./BuildFullContextsTask";
|
|
6
|
-
import { SendCommandInChunksTask, type SendCommandInChunksTaskArgs } from "./SendCommandInChunksTask";
|
|
7
|
-
import { SendPayloadInChunksTask, type SendPayloadInChunksTaskArgs } from "./SendPayloadInChunksTask";
|
|
8
|
-
export type ProvideContextsTaskArgs = {
|
|
9
|
-
/**
|
|
10
|
-
* The list of clear sign context with subcontexts callback to provide.
|
|
11
|
-
*/
|
|
12
|
-
contexts: ContextWithSubContexts[];
|
|
13
|
-
/**
|
|
14
|
-
* The derivation path to provide.
|
|
15
|
-
*/
|
|
16
|
-
derivationPath: string;
|
|
17
|
-
/**
|
|
18
|
-
* The serialized transaction to provide.
|
|
19
|
-
* This parameter is optional in the case there is no transaction at all, for instance
|
|
20
|
-
* if there is only a standalone calldata embedded in a message.
|
|
21
|
-
*/
|
|
22
|
-
serializedTransaction?: Uint8Array;
|
|
23
|
-
};
|
|
24
|
-
export type ProvideContextsTaskResult = Either<CommandErrorResult<EthErrorCodes>, void>;
|
|
25
|
-
/**
|
|
26
|
-
* This task is responsible for providing the transaction context to the device.
|
|
27
|
-
* It will send the subcontexts callbacks in order and finish with the context.
|
|
28
|
-
*/
|
|
29
|
-
export declare class ProvideContextsTask {
|
|
30
|
-
private _api;
|
|
31
|
-
private _args;
|
|
32
|
-
private _sendPayloadInChunksTaskFactory;
|
|
33
|
-
private _sendCommandInChunksTaskFactory;
|
|
34
|
-
constructor(_api: InternalApi, _args: ProvideContextsTaskArgs, _sendPayloadInChunksTaskFactory?: (api: InternalApi, args: SendPayloadInChunksTaskArgs<unknown>) => SendPayloadInChunksTask<unknown>, _sendCommandInChunksTaskFactory?: (api: InternalApi, args: SendCommandInChunksTaskArgs<unknown>) => SendCommandInChunksTask<unknown>);
|
|
35
|
-
run(): Promise<ProvideContextsTaskResult>;
|
|
36
|
-
/**
|
|
37
|
-
* This method will send the context to the device.
|
|
38
|
-
*
|
|
39
|
-
* @param context The clear sign context to provide.
|
|
40
|
-
* @returns A promise that resolves when the command is sent.
|
|
41
|
-
*/
|
|
42
|
-
provideContext({ type, payload, certificate, }: ClearSignContextSuccess): Promise<CommandResult<unknown, EthErrorCodes>>;
|
|
43
|
-
}
|
|
44
|
-
//# sourceMappingURL=ProvideContextsTask.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ProvideContextsTask.d.ts","sourceRoot":"","sources":["../../../../../src/internal/app-binder/task/ProvideContextsTask.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,uBAAuB,EAE7B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAElB,KAAK,WAAW,EAIjB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,KAAK,MAAM,EAAe,MAAM,WAAW,CAAC;AAiBrD,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,iDAAiD,CAAC;AAErF,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EACL,uBAAuB,EACvB,KAAK,2BAA2B,EACjC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,uBAAuB,EACvB,KAAK,2BAA2B,EACjC,MAAM,2BAA2B,CAAC;AAEnC,MAAM,MAAM,uBAAuB,GAAG;IACpC;;OAEG;IACH,QAAQ,EAAE,sBAAsB,EAAE,CAAC;IACnC;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,UAAU,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,MAAM,CAC5C,kBAAkB,CAAC,aAAa,CAAC,EACjC,IAAI,CACL,CAAC;AAEF;;;GAGG;AACH,qBAAa,mBAAmB;IAE5B,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,+BAA+B;IAIvC,OAAO,CAAC,+BAA+B;gBAN/B,IAAI,EAAE,WAAW,EACjB,KAAK,EAAE,uBAAuB,EAC9B,+BAA+B,IACrC,KAAK,WAAW,EAChB,MAAM,2BAA2B,CAAC,OAAO,CAAC,qCACD,EACnC,+BAA+B,IACrC,KAAK,WAAW,EAChB,MAAM,2BAA2B,CAAC,OAAO,CAAC,qCACD;IAGvC,GAAG,IAAI,OAAO,CAAC,yBAAyB,CAAC;IA2D/C;;;;;OAKG;IACG,cAAc,CAAC,EACnB,IAAI,EACJ,OAAO,EACP,WAAW,GACZ,EAAE,uBAAuB,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;CA2H5E"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ProvideContextsTask.test.d.ts","sourceRoot":"","sources":["../../../../../src/internal/app-binder/task/ProvideContextsTask.test.ts"],"names":[],"mappings":""}
|