@ledgerhq/device-signer-kit-ethereum 0.0.0-rn-ble-pairing-removed-while-reconnecting-20250731150808 → 0.0.0-rn-ble-pairing-removed-while-reconnecting-20250807094338
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js +1 -1
- package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js.map +2 -2
- package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js.map +3 -3
- package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/BuildSubContextTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/BuildSubContextTask.js.map +2 -2
- package/lib/cjs/internal/app-binder/task/BuildSubContextTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/BuildSubContextTask.test.js.map +2 -2
- package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/GetWeb3CheckTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/GetWeb3CheckTask.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/GetWeb3CheckTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/GetWeb3CheckTask.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/PreBuildContextTask.js +2 -0
- package/lib/cjs/internal/app-binder/task/PreBuildContextTask.js.map +7 -0
- package/lib/cjs/internal/transaction/service/mapper/EthersTransactionMapperService.js +1 -1
- package/lib/cjs/internal/transaction/service/mapper/EthersTransactionMapperService.js.map +3 -3
- package/lib/cjs/internal/transaction/service/mapper/EthersTransactionMapperService.test.js +1 -1
- package/lib/cjs/internal/transaction/service/mapper/EthersTransactionMapperService.test.js.map +2 -2
- package/lib/cjs/internal/transaction/service/parser/TransactionParserService.js +1 -1
- package/lib/cjs/internal/transaction/service/parser/TransactionParserService.js.map +3 -3
- package/lib/cjs/internal/transaction/service/parser/TransactionParserService.test.js +1 -1
- package/lib/cjs/internal/transaction/service/parser/TransactionParserService.test.js.map +3 -3
- package/lib/esm/api/app-binder/SignTransactionDeviceActionTypes.js +1 -1
- package/lib/esm/api/app-binder/SignTransactionDeviceActionTypes.js.map +2 -2
- package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js +1 -1
- package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js.map +3 -3
- package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js +1 -1
- package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js.map +3 -3
- package/lib/esm/internal/app-binder/task/BuildSubContextTask.js +1 -1
- package/lib/esm/internal/app-binder/task/BuildSubContextTask.js.map +3 -3
- package/lib/esm/internal/app-binder/task/BuildSubContextTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/BuildSubContextTask.test.js.map +2 -2
- package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.js +1 -1
- package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.js.map +3 -3
- package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.test.js.map +3 -3
- package/lib/esm/internal/app-binder/task/GetWeb3CheckTask.js +1 -1
- package/lib/esm/internal/app-binder/task/GetWeb3CheckTask.js.map +3 -3
- package/lib/esm/internal/app-binder/task/GetWeb3CheckTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/GetWeb3CheckTask.test.js.map +3 -3
- package/lib/esm/internal/app-binder/task/PreBuildContextTask.js +2 -0
- package/lib/esm/internal/app-binder/task/PreBuildContextTask.js.map +7 -0
- package/lib/esm/internal/transaction/service/mapper/EthersTransactionMapperService.js +1 -1
- package/lib/esm/internal/transaction/service/mapper/EthersTransactionMapperService.js.map +3 -3
- package/lib/esm/internal/transaction/service/mapper/EthersTransactionMapperService.test.js +1 -1
- package/lib/esm/internal/transaction/service/mapper/EthersTransactionMapperService.test.js.map +2 -2
- package/lib/esm/internal/transaction/service/parser/TransactionParserService.js +1 -1
- package/lib/esm/internal/transaction/service/parser/TransactionParserService.js.map +3 -3
- package/lib/esm/internal/transaction/service/parser/TransactionParserService.test.js +1 -1
- package/lib/esm/internal/transaction/service/parser/TransactionParserService.test.js.map +3 -3
- package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts +3 -3
- package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts.map +1 -1
- package/lib/types/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.d.ts +9 -20
- package/lib/types/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/BuildSubContextTask.d.ts +2 -3
- package/lib/types/internal/app-binder/task/BuildSubContextTask.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/BuildTransactionContextTask.d.ts +3 -8
- package/lib/types/internal/app-binder/task/BuildTransactionContextTask.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/GetWeb3CheckTask.d.ts +2 -3
- package/lib/types/internal/app-binder/task/GetWeb3CheckTask.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/PreBuildContextTask.d.ts +17 -0
- package/lib/types/internal/app-binder/task/PreBuildContextTask.d.ts.map +1 -0
- package/lib/types/internal/transaction/service/mapper/EthersTransactionMapperService.d.ts.map +1 -1
- package/lib/types/internal/transaction/service/parser/TransactionParserService.d.ts +2 -2
- package/lib/types/internal/transaction/service/parser/TransactionParserService.d.ts.map +1 -1
- package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
- package/package.json +6 -6
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var i=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var
|
|
1
|
+
"use strict";var i=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var u=Object.prototype.hasOwnProperty;var l=(n,e)=>{for(var o in e)i(n,o,{get:e[o],enumerable:!0})},y=(n,e,o,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of c(e))!u.call(n,r)&&r!==o&&i(n,r,{get:()=>e[r],enumerable:!(a=s(e,r))||a.enumerable});return n};var T=n=>y(i({},"__esModule",{value:!0}),n);var d={};l(d,{SignTransactionDAStep:()=>p});module.exports=T(d);var p=(t=>(t.OPEN_APP="signer.eth.steps.openApp",t.GET_APP_CONFIG="signer.eth.steps.getAppConfig",t.WEB3_CHECKS_OPT_IN="signer.eth.steps.web3ChecksOptIn",t.WEB3_CHECKS_OPT_IN_RESULT="signer.eth.steps.web3ChecksOptInResult",t.PRE_BUILD_CONTEXT="signer.eth.steps.preBuildContext",t.BUILD_CONTEXT="signer.eth.steps.buildContext",t.BUILD_SUB_CONTEXT_AND_PROVIDE="signer.eth.steps.buildSubContextAndProvide",t.SIGN_TRANSACTION="signer.eth.steps.signTransaction",t))(p||{});0&&(module.exports={SignTransactionDAStep});
|
|
2
2
|
//# sourceMappingURL=SignTransactionDeviceActionTypes.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/api/app-binder/SignTransactionDeviceActionTypes.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type ClearSignContextSuccess,\n type ContextModule,\n} from \"@ledgerhq/context-module\";\nimport {\n type CommandErrorResult,\n type DeviceActionState,\n type ExecuteDeviceActionReturnType,\n type OpenAppDAError,\n type OpenAppDARequiredInteraction,\n type UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type GetConfigCommandResponse } from \"@api/app-binder/GetConfigCommandTypes\";\nimport { type ClearSigningType } from \"@api/model/ClearSigningType\";\nimport { type Signature } from \"@api/model/Signature\";\nimport { type TransactionOptions } from \"@api/model/TransactionOptions\";\nimport { type TransactionType } from \"@api/model/TransactionType\";\nimport { type EthErrorCodes } from \"@internal/app-binder/command/utils/ethAppErrors\";\nimport { type TransactionMapperService } from \"@internal/transaction/service/mapper/TransactionMapperService\";\nimport { type TransactionParserService } from \"@internal/transaction/service/parser/TransactionParserService\";\n\nexport enum SignTransactionDAStep {\n OPEN_APP = \"signer.eth.steps.openApp\",\n GET_APP_CONFIG = \"signer.eth.steps.getAppConfig\",\n WEB3_CHECKS_OPT_IN = \"signer.eth.steps.web3ChecksOptIn\",\n WEB3_CHECKS_OPT_IN_RESULT = \"signer.eth.steps.web3ChecksOptInResult\",\n BUILD_CONTEXT = \"signer.eth.steps.buildContext\",\n BUILD_SUB_CONTEXT_AND_PROVIDE = \"signer.eth.steps.buildSubContextAndProvide\",\n SIGN_TRANSACTION = \"signer.eth.steps.signTransaction\",\n}\n\nexport type SignTransactionDAOutput = Signature;\n\nexport type SignTransactionDAInput = {\n readonly derivationPath: string;\n readonly transaction: Uint8Array;\n readonly mapper: TransactionMapperService;\n readonly parser: TransactionParserService;\n readonly contextModule: ContextModule;\n readonly options: TransactionOptions;\n};\n\nexport type SignTransactionDAError =\n | OpenAppDAError\n | CommandErrorResult<EthErrorCodes>[\"error\"];\n\ntype SignTransactionDARequiredInteraction =\n | OpenAppDARequiredInteraction\n | UserInteractionRequired.Web3ChecksOptIn\n | UserInteractionRequired.SignTransaction;\n\nexport type SignTransactionDAIntermediateValue =\n | {\n requiredUserInteraction: SignTransactionDARequiredInteraction;\n step: Exclude<\n SignTransactionDAStep,\n SignTransactionDAStep.WEB3_CHECKS_OPT_IN_RESULT\n >;\n }\n | {\n requiredUserInteraction: UserInteractionRequired.None;\n step: SignTransactionDAStep.WEB3_CHECKS_OPT_IN_RESULT;\n result: boolean;\n };\n\nexport type SignTransactionDAState = DeviceActionState<\n SignTransactionDAOutput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n>;\n\nexport type SignTransactionDAInternalState = {\n readonly error: SignTransactionDAError | null;\n readonly appConfig: GetConfigCommandResponse | null;\n readonly clearSignContexts: ClearSignContextSuccess[] | null;\n readonly clearSignContextsOptional: ClearSignContextSuccess[] | null;\n readonly
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,2BAAAE,IAAA,eAAAC,EAAAH,
|
|
4
|
+
"sourcesContent": ["import {\n type ClearSignContextSuccess,\n type ContextModule,\n type TransactionSubset,\n} from \"@ledgerhq/context-module\";\nimport {\n type CommandErrorResult,\n type DeviceActionState,\n type ExecuteDeviceActionReturnType,\n type OpenAppDAError,\n type OpenAppDARequiredInteraction,\n type UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type GetConfigCommandResponse } from \"@api/app-binder/GetConfigCommandTypes\";\nimport { type ClearSigningType } from \"@api/model/ClearSigningType\";\nimport { type Signature } from \"@api/model/Signature\";\nimport { type TransactionOptions } from \"@api/model/TransactionOptions\";\nimport { type TransactionType } from \"@api/model/TransactionType\";\nimport { type EthErrorCodes } from \"@internal/app-binder/command/utils/ethAppErrors\";\nimport { type TransactionMapperService } from \"@internal/transaction/service/mapper/TransactionMapperService\";\nimport { type TransactionParserService } from \"@internal/transaction/service/parser/TransactionParserService\";\n\nexport enum SignTransactionDAStep {\n OPEN_APP = \"signer.eth.steps.openApp\",\n GET_APP_CONFIG = \"signer.eth.steps.getAppConfig\",\n WEB3_CHECKS_OPT_IN = \"signer.eth.steps.web3ChecksOptIn\",\n WEB3_CHECKS_OPT_IN_RESULT = \"signer.eth.steps.web3ChecksOptInResult\",\n PRE_BUILD_CONTEXT = \"signer.eth.steps.preBuildContext\",\n BUILD_CONTEXT = \"signer.eth.steps.buildContext\",\n BUILD_SUB_CONTEXT_AND_PROVIDE = \"signer.eth.steps.buildSubContextAndProvide\",\n SIGN_TRANSACTION = \"signer.eth.steps.signTransaction\",\n}\n\nexport type SignTransactionDAOutput = Signature;\n\nexport type SignTransactionDAInput = {\n readonly derivationPath: string;\n readonly transaction: Uint8Array;\n readonly mapper: TransactionMapperService;\n readonly parser: TransactionParserService;\n readonly contextModule: ContextModule;\n readonly options: TransactionOptions;\n};\n\nexport type SignTransactionDAError =\n | OpenAppDAError\n | CommandErrorResult<EthErrorCodes>[\"error\"];\n\ntype SignTransactionDARequiredInteraction =\n | OpenAppDARequiredInteraction\n | UserInteractionRequired.Web3ChecksOptIn\n | UserInteractionRequired.SignTransaction;\n\nexport type SignTransactionDAIntermediateValue =\n | {\n requiredUserInteraction: SignTransactionDARequiredInteraction;\n step: Exclude<\n SignTransactionDAStep,\n SignTransactionDAStep.WEB3_CHECKS_OPT_IN_RESULT\n >;\n }\n | {\n requiredUserInteraction: UserInteractionRequired.None;\n step: SignTransactionDAStep.WEB3_CHECKS_OPT_IN_RESULT;\n result: boolean;\n };\n\nexport type SignTransactionDAState = DeviceActionState<\n SignTransactionDAOutput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n>;\n\nexport type SignTransactionDAInternalState = {\n readonly error: SignTransactionDAError | null;\n readonly appConfig: GetConfigCommandResponse | null;\n readonly clearSignContexts: ClearSignContextSuccess[] | null;\n readonly clearSignContextsOptional: ClearSignContextSuccess[] | null;\n readonly subset: TransactionSubset | null;\n readonly transactionType: TransactionType | null;\n readonly clearSigningType: ClearSigningType | null;\n readonly signature: Signature | null;\n};\n\nexport type SignTransactionDAReturnType = ExecuteDeviceActionReturnType<\n SignTransactionDAOutput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n>;\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,2BAAAE,IAAA,eAAAC,EAAAH,GAuBO,IAAKE,OACVA,EAAA,SAAW,2BACXA,EAAA,eAAiB,gCACjBA,EAAA,mBAAqB,mCACrBA,EAAA,0BAA4B,yCAC5BA,EAAA,kBAAoB,mCACpBA,EAAA,cAAgB,gCAChBA,EAAA,8BAAgC,6CAChCA,EAAA,iBAAmB,mCARTA,OAAA",
|
|
6
6
|
"names": ["SignTransactionDeviceActionTypes_exports", "__export", "SignTransactionDAStep", "__toCommonJS"]
|
|
7
7
|
}
|
package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var l=Object.defineProperty;var
|
|
1
|
+
"use strict";var l=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames;var I=Object.prototype.hasOwnProperty;var P=(o,r)=>{for(var p in r)l(o,p,{get:r[p],enumerable:!0})},_=(o,r,p,u)=>{if(r&&typeof r=="object"||typeof r=="function")for(let s of k(r))!I.call(o,s)&&s!==p&&l(o,s,{get:()=>r[s],enumerable:!(u=x(r,s))||u.enumerable});return o};var v=o=>_(l({},"__esModule",{value:!0}),o);var f={};P(f,{SignTransactionDeviceAction:()=>D});module.exports=v(f);var n=require("@ledgerhq/device-management-kit"),c=require("purify-ts"),e=require("xstate"),i=require("../../../../api/app-binder/SignTransactionDeviceActionTypes"),S=require("../../../app-binder/command/GetAppConfigurationCommand"),T=require("../../../app-binder/command/Web3CheckOptInCommand"),m=require("../../../app-binder/task/BuildSubContextTask"),A=require("../../../app-binder/task/BuildTransactionContextTask"),y=require("../../../app-binder/task/PreBuildContextTask"),h=require("../../../app-binder/task/ProvideTransactionContextTask"),E=require("../../../app-binder/task/SendSignTransactionTask"),b=require("../../../shared/utils/ApplicationChecker");class D extends n.XStateDeviceAction{makeStateMachine(r){const{getAppConfig:p,web3CheckOptIn:u,preBuildContext:s,buildContext:d,signTransaction:g,buildSubContextAndProvide:C}=this.extractDependencies(r);return(0,e.setup)({types:{input:{},context:{},output:{}},actors:{openAppStateMachine:new n.OpenAppDeviceAction({input:{appName:"Ethereum"}}).makeStateMachine(r),getAppConfig:(0,e.fromPromise)(p),web3CheckOptIn:(0,e.fromPromise)(u),preBuildContext:(0,e.fromPromise)(s),buildContext:(0,e.fromPromise)(d),signTransaction:(0,e.fromPromise)(g),buildSubContextAndProvide:(0,e.fromPromise)(C)},guards:{noInternalError:({context:t})=>t._internalState.error===null,isWeb3ChecksSupported:({context:t})=>new b.ApplicationChecker(r.getDeviceSessionState(),t._internalState.appConfig).withMinVersionExclusive("1.15.0").excludeDeviceModel(n.DeviceModelId.NANO_S).excludeDeviceModel(n.DeviceModelId.NANO_SP).excludeDeviceModel(n.DeviceModelId.NANO_X).check(),shouldOptIn:({context:t})=>!t._internalState.appConfig.web3ChecksEnabled&&!t._internalState.appConfig.web3ChecksOptIn,skipOpenApp:({context:t})=>!!t.input.options.skipOpenApp,hasContextToProvide:({context:t})=>t._internalState.clearSignContexts!==null&&t._internalState.clearSignContexts.length>0},actions:{assignErrorFromEvent:(0,e.assign)({_internalState:t=>({...t.context._internalState,error:t.event.error})})}}).createMachine({id:"SignTransactionDeviceAction",initial:"InitialState",context:({input:t})=>({input:t,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:i.SignTransactionDAStep.OPEN_APP},_internalState:{error:null,appConfig:null,clearSignContexts:null,clearSignContextsOptional:null,subset:null,transactionType:null,clearSigningType:null,signature:null}}),states:{InitialState:{always:[{target:"GetAppConfig",guard:"skipOpenApp"},"OpenAppDeviceAction"]},OpenAppDeviceAction:{invoke:{id:"openAppStateMachine",input:{appName:"Ethereum"},src:"openAppStateMachine",onSnapshot:{actions:(0,e.assign)({intermediateValue:t=>({...t.event.snapshot.context.intermediateValue,step:i.SignTransactionDAStep.OPEN_APP})})},onDone:{actions:(0,e.assign)({_internalState:t=>t.event.output.caseOf({Right:()=>t.context._internalState,Left:a=>({...t.context._internalState,error:a})})}),target:"CheckOpenAppDeviceActionResult"}}},CheckOpenAppDeviceActionResult:{always:[{target:"GetAppConfig",guard:"noInternalError"},"Error"]},GetAppConfig:{entry:(0,e.assign)({intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:i.SignTransactionDAStep.GET_APP_CONFIG}}),invoke:{id:"getAppConfig",src:"getAppConfig",onDone:{target:"GetAppConfigResultCheck",actions:[(0,e.assign)({_internalState:({event:t,context:a})=>(0,n.isSuccessCommandResult)(t.output)?{...a._internalState,appConfig:t.output.data}:{...a._internalState,error:t.output.error}})]},onError:{target:"Error",actions:"assignErrorFromEvent"}}},GetAppConfigResultCheck:{always:[{target:"Web3ChecksOptIn",guard:(0,e.and)(["noInternalError","isWeb3ChecksSupported","shouldOptIn"])},{target:"PreBuildContext",guard:"noInternalError"},{target:"Error"}]},Web3ChecksOptIn:{entry:(0,e.assign)({intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.Web3ChecksOptIn,step:i.SignTransactionDAStep.WEB3_CHECKS_OPT_IN}}),invoke:{id:"web3CheckOptIn",src:"web3CheckOptIn",onDone:{target:"Web3ChecksOptInResult",actions:[(0,e.assign)({_internalState:({event:t,context:a})=>(0,n.isSuccessCommandResult)(t.output)?{...a._internalState,appConfig:{...a._internalState.appConfig,web3ChecksEnabled:t.output.data.enabled}}:a._internalState})]},onError:{target:"Error",actions:"assignErrorFromEvent"}}},Web3ChecksOptInResult:{entry:(0,e.assign)(({context:t})=>({intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:i.SignTransactionDAStep.WEB3_CHECKS_OPT_IN_RESULT,result:t._internalState.appConfig.web3ChecksEnabled}})),after:{0:{target:"PreBuildContext"}}},PreBuildContext:{entry:(0,e.assign)({intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:i.SignTransactionDAStep.PRE_BUILD_CONTEXT}}),invoke:{id:"preBuildContext",src:"preBuildContext",input:({context:t})=>({mapper:t.input.mapper,transaction:t.input.transaction}),onDone:{target:"BuildContext",actions:(0,e.assign)({_internalState:({event:t,context:a})=>({...a._internalState,transactionType:t.output.type,subset:t.output.subset})})},onError:{target:"Error",actions:"assignErrorFromEvent"}}},BuildContext:{entry:(0,e.assign)({intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:i.SignTransactionDAStep.BUILD_CONTEXT}}),invoke:{id:"buildContext",src:"buildContext",input:({context:t})=>({contextModule:t.input.contextModule,options:t.input.options,appConfig:t._internalState.appConfig,derivationPath:t.input.derivationPath,transaction:t.input.transaction,subset:t._internalState.subset}),onDone:{target:"HasContextToProvideCheck",actions:[(0,e.assign)({_internalState:({event:t,context:a})=>({...a._internalState,clearSignContexts:t.output.clearSignContexts,clearSignContextsOptional:t.output.clearSignContextsOptional,clearSigningType:t.output.clearSigningType})})]},onError:{target:"Error",actions:"assignErrorFromEvent"}}},HasContextToProvideCheck:{always:[{target:"BuildSubContextAndProvide",guard:"hasContextToProvide"},{target:"SignTransaction"}]},BuildSubContextAndProvide:{entry:(0,e.assign)({intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:i.SignTransactionDAStep.BUILD_SUB_CONTEXT_AND_PROVIDE}}),exit:(0,e.assign)({_internalState:({context:t})=>({...t._internalState,clearSignContexts:t._internalState.clearSignContexts.slice(1)})}),invoke:{id:"buildSubContextAndProvide",src:"buildSubContextAndProvide",input:({context:t})=>({context:t._internalState.clearSignContexts[0],contextOptional:t._internalState.clearSignContextsOptional,transactionParser:t.input.parser,transaction:t.input.transaction,contextModule:t.input.contextModule,subset:t._internalState.subset,derivationPath:t.input.derivationPath}),onDone:{target:"HasContextToProvideCheck"},onError:{target:"Error",actions:"assignErrorFromEvent"}}},SignTransaction:{entry:(0,e.assign)({intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.SignTransaction,step:i.SignTransactionDAStep.SIGN_TRANSACTION}}),invoke:{id:"signTransaction",src:"signTransaction",input:({context:t})=>({derivationPath:t.input.derivationPath,serializedTransaction:t.input.transaction,chainId:t._internalState.subset.chainId,transactionType:t._internalState.transactionType,clearSigningType:t._internalState.clearSigningType}),onDone:{target:"SignTransactionResultCheck",actions:[(0,e.assign)({_internalState:({event:t,context:a})=>(0,n.isSuccessCommandResult)(t.output)?{...a._internalState,signature:t.output.data}:{...a._internalState,error:t.output.error}})]},onError:{target:"Error",actions:"assignErrorFromEvent"}}},SignTransactionResultCheck:{always:[{guard:"noInternalError",target:"Success"},{target:"Error"}]},Success:{type:"final"},Error:{type:"final"}},output:({context:t})=>t._internalState.signature?(0,c.Right)(t._internalState.signature):(0,c.Left)(t._internalState.error||new n.UnknownDAError("No error in final state"))})}extractDependencies(r){return{getAppConfig:async()=>r.sendCommand(new S.GetAppConfiguration),web3CheckOptIn:async()=>r.sendCommand(new T.Web3CheckOptInCommand),preBuildContext:async t=>Promise.resolve(new y.PreBuildContextTask({mapper:t.input.mapper,transaction:t.input.transaction}).run()),buildContext:async t=>new A.BuildTransactionContextTask(r,t.input).run(),buildSubContextAndProvide:async t=>{const{subcontextCallbacks:a}=new m.BuildSubContextTask(r,{context:t.input.context,contextOptional:t.input.contextOptional,transactionParser:t.input.transactionParser,subset:t.input.subset,contextModule:t.input.contextModule}).run();return new h.ProvideTransactionContextTask(r,{context:t.input.context,subcontextsCallbacks:a,serializedTransaction:t.input.transaction,derivationPath:t.input.derivationPath}).run()},signTransaction:async t=>new E.SendSignTransactionTask(r,{...t.input}).run()}}}0&&(module.exports={SignTransactionDeviceAction});
|
|
2
2
|
//# sourceMappingURL=SignTransactionDeviceAction.js.map
|
package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type ClearSignContextSuccess,\n type ContextModule,\n} from \"@ledgerhq/context-module\";\nimport {\n type CommandErrorResult,\n type CommandResult,\n type DeviceActionStateMachine,\n DeviceModelId,\n type InternalApi,\n isSuccessCommandResult,\n OpenAppDeviceAction,\n type StateMachineTypes,\n UnknownDAError,\n UserInteractionRequired,\n XStateDeviceAction,\n} from \"@ledgerhq/device-management-kit\";\nimport { type Either, Left, Right } from \"purify-ts\";\nimport { and, assign, fromPromise, setup } from \"xstate\";\n\nimport { type GetConfigCommandResponse } from \"@api/app-binder/GetConfigCommandTypes\";\nimport {\n type SignTransactionDAError,\n type SignTransactionDAInput,\n type SignTransactionDAIntermediateValue,\n type SignTransactionDAInternalState,\n type SignTransactionDAOutput,\n SignTransactionDAStep,\n} from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { type ClearSigningType } from \"@api/model/ClearSigningType\";\nimport { type Signature } from \"@api/model/Signature\";\nimport { type TransactionOptions } from \"@api/model/TransactionOptions\";\nimport { type TransactionType } from \"@api/model/TransactionType\";\nimport { GetAppConfiguration } from \"@internal/app-binder/command/GetAppConfigurationCommand\";\nimport { type EthErrorCodes } from \"@internal/app-binder/command/utils/ethAppErrors\";\nimport {\n Web3CheckOptInCommand,\n type Web3CheckOptInCommandResponse,\n} from \"@internal/app-binder/command/Web3CheckOptInCommand\";\nimport { BuildSubContextTask } from \"@internal/app-binder/task/BuildSubContextTask\";\nimport {\n BuildTransactionContextTask,\n type BuildTransactionContextTaskArgs,\n type BuildTransactionTaskResult,\n} from \"@internal/app-binder/task/BuildTransactionContextTask\";\nimport { ProvideTransactionContextTask } from \"@internal/app-binder/task/ProvideTransactionContextTask\";\nimport { SendSignTransactionTask } from \"@internal/app-binder/task/SendSignTransactionTask\";\nimport { ApplicationChecker } from \"@internal/shared/utils/ApplicationChecker\";\nimport { type TransactionMapperService } from \"@internal/transaction/service/mapper/TransactionMapperService\";\nimport { type TransactionParserService } from \"@internal/transaction/service/parser/TransactionParserService\";\n\nexport type MachineDependencies = {\n readonly getAppConfig: () => Promise<\n CommandResult<GetConfigCommandResponse, EthErrorCodes>\n >;\n readonly web3CheckOptIn: () => Promise<\n CommandResult<Web3CheckOptInCommandResponse, EthErrorCodes>\n >;\n readonly buildContext: (arg0: {\n input: {\n contextModule: ContextModule;\n mapper: TransactionMapperService;\n transaction: Uint8Array;\n options: TransactionOptions;\n appConfig: GetConfigCommandResponse;\n derivationPath: string;\n };\n }) => Promise<BuildTransactionTaskResult>;\n readonly buildSubContextAndProvide: (arg0: {\n input: {\n context: ClearSignContextSuccess;\n contextOptional: ClearSignContextSuccess[];\n transactionParser: TransactionParserService;\n serializedTransaction: Uint8Array;\n contextModule: ContextModule;\n chainId: number;\n derivationPath: string;\n };\n }) => Promise<Either<CommandErrorResult<EthErrorCodes>, void>>;\n readonly signTransaction: (arg0: {\n input: {\n derivationPath: string;\n serializedTransaction: Uint8Array;\n chainId: number;\n transactionType: TransactionType;\n clearSigningType: ClearSigningType;\n };\n }) => Promise<CommandResult<Signature, EthErrorCodes>>;\n};\n\nexport class SignTransactionDeviceAction extends XStateDeviceAction<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n> {\n makeStateMachine(\n internalApi: InternalApi,\n ): DeviceActionStateMachine<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n > {\n type types = StateMachineTypes<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n >;\n\n const {\n getAppConfig,\n web3CheckOptIn,\n buildContext,\n signTransaction,\n buildSubContextAndProvide,\n } = this.extractDependencies(internalApi);\n\n return setup({\n types: {\n input: {} as types[\"input\"],\n context: {} as types[\"context\"],\n output: {} as types[\"output\"],\n },\n actors: {\n openAppStateMachine: new OpenAppDeviceAction({\n input: { appName: \"Ethereum\" },\n }).makeStateMachine(internalApi),\n getAppConfig: fromPromise(getAppConfig),\n web3CheckOptIn: fromPromise(web3CheckOptIn),\n buildContext: fromPromise(buildContext),\n signTransaction: fromPromise(signTransaction),\n buildSubContextAndProvide: fromPromise(buildSubContextAndProvide),\n },\n guards: {\n noInternalError: ({ context }) => context._internalState.error === null,\n isWeb3ChecksSupported: ({ context }) =>\n new ApplicationChecker(\n internalApi.getDeviceSessionState(),\n context._internalState.appConfig!,\n )\n .withMinVersionExclusive(\"1.15.0\")\n .excludeDeviceModel(DeviceModelId.NANO_S)\n .excludeDeviceModel(DeviceModelId.NANO_SP)\n .excludeDeviceModel(DeviceModelId.NANO_X)\n .check(),\n shouldOptIn: ({ context }) =>\n !context._internalState.appConfig!.web3ChecksEnabled &&\n !context._internalState.appConfig!.web3ChecksOptIn,\n skipOpenApp: ({ context }) => !!context.input.options.skipOpenApp,\n hasContextToProvide: ({ context }) =>\n context._internalState.clearSignContexts !== null &&\n context._internalState.clearSignContexts.length > 0,\n },\n actions: {\n assignErrorFromEvent: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: _.event[\"error\"], // NOTE: it should never happen, the error is not typed anymore here\n }),\n }),\n },\n }).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QGUCWUB2AVATgQw1jwGMAXVAewwBEwA3VYsAQTMowDoB5ABzA2Y8etBk1bkqAYghUwHVBjoUA1nIp8BQ5KTykwAWRIALBWADaABgC6iUDwqxUEjLZAAPRABYAzAHYOAJwAHACMAb4ArBYWAEw+FkHeADQgAJ6IwRYcAGwRQUG52TF5EcUAvmUpaJi4BERsVCKMLA2cAMJGYMTKvPyCwvTN4uwASnAArgA2pJKWNkgg9o7Orh4IAcEcpRYhvonZAd4byWmIITtZESEhBTHeEVH33hVV6Nj4hCTOTWKtHB1dHoafo-FrOMawKYzMwheZ2BxOdirDKbba7faHY4pdIIUIcG6+bwWbKeXwxIKeTzkl4garvOpfdig4ZUDgAcTApA6eEmk34MGksnkihUchgXKMPL5GBgc1cS0RVGRCBCngC2Q4aqCewCEWyQUyJxx5x2HBiByCsV8AQsaoinhpdNqn1azL+HIlUv5YEkYBwOAoOA4PEmugAZoGALYccXc3neuULBUrBZrVXqzXBHV6g2Wo1nDaasIWXxkwkxW0xXyOt7O+rfQa-Zzszlx6UwCFQgHdWbWeUIlOgNMBTxBDiJby3MkmiK+bFnCzeEL4mLm4m5aLeB2VWm1j71pmNsHsFue+MysCd6bd5SzWH95ZI1MF0fj7yTorT6Kz+cILfLhJEgiDZslVXwLACGsan3RlGiPFlOAAIXGVBJggNoqD0NwZhkDA5AUJRVA4AAjFC0IwjAsNIRN4UfJVnwQOJPCyIJyWLHYqV1bJf3OGJl3yYlfFA0dsiOZ4dydGDXXgv5kNQ9DMLAbDfX9QNg1DUgIxwaNSPkiiqJoxYByfIdECYli2JtDiYi439PGAjhvArVdrT4skDm3V5oIZaTRGPVk5PIxTsKvCVAV7OEjLolwGPJfJMwrUkjkiNUeIsK4OEJLdLWiUI9ig+kXQbPyEI4QKFMopTSFCm870i5MTPcMz8jHNVEsJcJ7QCX88pySJSlKPw7jCAq61gmgZObAAFAMGAgMB9KqwU8OFQi5B4WbUHmxbsMMhr6NMv9RzHFK8kiLdBu405cQSTV32Ym5slAw4YlGqTiqGP4ZooOaFuCmY-QDIMQ3DKNg027b-r24yDqao74tO7UIguu4rpxbJokCA0rmJCDjk83dvKKw8Sq+iGwA5PCcEYHacKFAjRXBn6top-g-RpqG+yTGGYsO7KTvtM7kfs1HfyszLfDCbIySpdzxK8wqDzg0npvJyn2eIWmVKB9TQe0pnfvV6nNc5+qeeVfnMsFpGUe8NGF3snI8liViQlEolIIkvcfI+psT0kn32GW-CRSIxwiaVjBoei5VmL2M1SSCB4KyTykIh6wtDgKcJJbyAIRq9iPxrdZsA+JqRAbUkHNLB8PFfG6PFV5uG47HOI9mThJ7Xs39fCpJ3tRe4JzTewPlc+0vvfLjAas6HtG8HFuuo4YldiXOJQgpdProCGzMvz-VOOYuPR+nkv-anyPZ-CmEzZjhj7LVFfQMJEIN5uHvrvyTxHPJEtgIKKUXIFQdwYAoPNeACwy6R3PrDfazc1gAFp7YIGQSvaIGDMEYNnKfGBk0Ty9E0AMFWjV4GxxiGLPUCc9SlGCKBSsuDi74NZDeQhIJmEzwmNMB8TdlT6n8HxEIeoP5kichQ66JoYgrzytjDBk5qyF3rr5CeJ4PRtm9DwxeaYbhjkHtla0dtRJzh3knfEs53wbHztaHwjDlF+1ZGoyU54OxcLCt0TRjU0zgW8IECCrF872Q2PaNKq4ci7yeuSPINxqSKLGnY-ySEyIVSoh42Gaw+JHHxIcaIGxOIlnzCqb8mV9QZK3McJOtjfYJLKkk2m193Hc3vodc0r47i7xssBEIS40o+EcouZGRQ3ZOSepUkmKjWTfV+rTVJCDEBLicpqAoeYUqLm6tdVyv9JHaiOPnUZ497GcEmSzI2HNKrYRmRbCCUjSzmjfsjCshw0pu3HK5aWfdbSeBGbE96YyDkcGgeNC5DE-DMRXl080fdKShDWTiCkAR8QHDCLsG05JyjfLHhNEhrIAWtHqcoIFh0qSmNyPkEcHc9Riz4o5UCDx3ZbiXBEPZmLxmcGQOMYgTBYCQNorwh+Ql4VUgSD4J6uRPAhEpRqWhYRjoXCCEy2BnAACiqkcAEpbvyzUKdhVPXtOK66oExwY3VEI1Ffhd4gLKEAA */\n id: \"SignTransactionDeviceAction\",\n initial: \"InitialState\",\n context: ({ input }) => {\n return {\n input,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: SignTransactionDAStep.OPEN_APP,\n },\n _internalState: {\n error: null,\n appConfig: null,\n clearSignContexts: null,\n clearSignContextsOptional: null,\n serializedTransaction: null,\n chainId: null,\n transactionType: null,\n clearSigningType: null,\n signature: null,\n },\n };\n },\n states: {\n InitialState: {\n always: [\n {\n target: \"GetAppConfig\",\n guard: \"skipOpenApp\",\n },\n \"OpenAppDeviceAction\",\n ],\n },\n OpenAppDeviceAction: {\n invoke: {\n id: \"openAppStateMachine\",\n input: {\n appName: \"Ethereum\",\n },\n src: \"openAppStateMachine\",\n onSnapshot: {\n actions: assign({\n intermediateValue: (_) => ({\n ..._.event.snapshot.context.intermediateValue,\n step: SignTransactionDAStep.OPEN_APP,\n }),\n }),\n },\n onDone: {\n actions: assign({\n _internalState: (_) => {\n return _.event.output.caseOf<SignTransactionDAInternalState>({\n Right: () => _.context._internalState,\n Left: (error) => ({\n ..._.context._internalState,\n error,\n }),\n });\n },\n }),\n target: \"CheckOpenAppDeviceActionResult\",\n },\n },\n },\n CheckOpenAppDeviceActionResult: {\n always: [\n {\n target: \"GetAppConfig\",\n guard: \"noInternalError\",\n },\n \"Error\",\n ],\n },\n GetAppConfig: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: SignTransactionDAStep.GET_APP_CONFIG,\n },\n }),\n invoke: {\n id: \"getAppConfig\",\n src: \"getAppConfig\",\n onDone: {\n target: \"GetAppConfigResultCheck\",\n actions: [\n assign({\n _internalState: ({ event, context }) => {\n if (isSuccessCommandResult(event.output)) {\n return {\n ...context._internalState,\n appConfig: event.output.data,\n };\n } else {\n return {\n ...context._internalState,\n error: event.output.error,\n };\n }\n },\n }),\n ],\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n GetAppConfigResultCheck: {\n always: [\n {\n target: \"Web3ChecksOptIn\",\n guard: and([\n \"noInternalError\",\n \"isWeb3ChecksSupported\",\n \"shouldOptIn\",\n ]),\n },\n {\n target: \"BuildContext\",\n guard: \"noInternalError\",\n },\n {\n target: \"Error\",\n },\n ],\n },\n Web3ChecksOptIn: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.Web3ChecksOptIn,\n step: SignTransactionDAStep.WEB3_CHECKS_OPT_IN,\n },\n }),\n invoke: {\n id: \"web3CheckOptIn\",\n src: \"web3CheckOptIn\",\n onDone: {\n target: \"Web3ChecksOptInResult\",\n actions: [\n assign({\n _internalState: ({ event, context }) => {\n if (isSuccessCommandResult(event.output)) {\n return {\n ...context._internalState,\n appConfig: {\n ...context._internalState.appConfig!,\n web3ChecksEnabled: event.output.data.enabled,\n },\n };\n } else {\n return context._internalState;\n }\n },\n }),\n ],\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n Web3ChecksOptInResult: {\n entry: assign(({ context }) => ({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: SignTransactionDAStep.WEB3_CHECKS_OPT_IN_RESULT,\n result: context._internalState.appConfig!.web3ChecksEnabled,\n },\n })),\n // Using after transition to force a snapshot of the state after the entry action\n // This ensures the intermediateValue is captured before moving to BuildContext\n after: {\n 0: {\n target: \"BuildContext\",\n },\n },\n },\n BuildContext: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: SignTransactionDAStep.BUILD_CONTEXT,\n },\n }),\n invoke: {\n id: \"buildContext\",\n src: \"buildContext\",\n input: ({ context }) => ({\n contextModule: context.input.contextModule,\n mapper: context.input.mapper,\n transaction: context.input.transaction,\n options: context.input.options,\n appConfig: context._internalState.appConfig!,\n derivationPath: context.input.derivationPath,\n }),\n onDone: {\n target: \"HasContextToProvideCheck\",\n actions: [\n assign({\n _internalState: ({ event, context }) => ({\n ...context._internalState,\n clearSignContexts: event.output.clearSignContexts!,\n clearSignContextsOptional:\n event.output.clearSignContextsOptional!,\n serializedTransaction: event.output.serializedTransaction,\n chainId: event.output.chainId,\n transactionType: event.output.transactionType,\n clearSigningType: event.output.clearSigningType,\n }),\n }),\n ],\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n HasContextToProvideCheck: {\n always: [\n {\n target: \"BuildSubContextAndProvide\",\n guard: \"hasContextToProvide\",\n },\n {\n target: \"SignTransaction\",\n },\n ],\n },\n BuildSubContextAndProvide: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: SignTransactionDAStep.BUILD_SUB_CONTEXT_AND_PROVIDE,\n },\n }),\n exit: assign({\n // remove the first context as it has been consumed\n _internalState: ({ context }) => ({\n ...context._internalState,\n clearSignContexts:\n context._internalState.clearSignContexts!.slice(1),\n }),\n }),\n invoke: {\n id: \"buildSubContextAndProvide\",\n src: \"buildSubContextAndProvide\",\n input: ({ context }) => ({\n context: context._internalState.clearSignContexts![0]!,\n contextOptional:\n context._internalState.clearSignContextsOptional!,\n transactionParser: context.input.parser,\n serializedTransaction:\n context._internalState.serializedTransaction!,\n contextModule: context.input.contextModule,\n chainId: context._internalState.chainId!,\n derivationPath: context.input.derivationPath,\n }),\n onDone: {\n target: \"HasContextToProvideCheck\",\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n SignTransaction: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n step: SignTransactionDAStep.SIGN_TRANSACTION,\n },\n }),\n invoke: {\n id: \"signTransaction\",\n src: \"signTransaction\",\n input: ({ context }) => ({\n derivationPath: context.input.derivationPath,\n serializedTransaction:\n context._internalState.serializedTransaction!,\n chainId: context._internalState.chainId!,\n transactionType: context._internalState.transactionType!,\n clearSigningType: context._internalState.clearSigningType!,\n }),\n onDone: {\n target: \"SignTransactionResultCheck\",\n actions: [\n assign({\n _internalState: ({ event, context }) => {\n if (isSuccessCommandResult(event.output)) {\n return {\n ...context._internalState,\n signature: event.output.data,\n };\n }\n return {\n ...context._internalState,\n error: event.output.error,\n };\n },\n }),\n ],\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n SignTransactionResultCheck: {\n always: [\n { guard: \"noInternalError\", target: \"Success\" },\n { target: \"Error\" },\n ],\n },\n Success: {\n type: \"final\",\n },\n Error: {\n type: \"final\",\n },\n },\n output: ({ context }) =>\n context._internalState.signature\n ? Right(context._internalState.signature)\n : Left(\n context._internalState.error ||\n new UnknownDAError(\"No error in final state\"),\n ),\n });\n }\n\n extractDependencies(internalApi: InternalApi): MachineDependencies {\n const getAppConfig = async () =>\n internalApi.sendCommand(new GetAppConfiguration());\n const web3CheckOptIn = async () =>\n internalApi.sendCommand(new Web3CheckOptInCommand());\n const buildContext = async (arg0: {\n input: BuildTransactionContextTaskArgs;\n }) => new BuildTransactionContextTask(internalApi, arg0.input).run();\n\n const buildSubContextAndProvide = async (arg0: {\n input: {\n context: ClearSignContextSuccess;\n contextOptional: ClearSignContextSuccess[];\n transactionParser: TransactionParserService;\n serializedTransaction: Uint8Array;\n contextModule: ContextModule;\n chainId: number;\n derivationPath: string;\n };\n }) => {\n const { subcontextCallbacks } = new BuildSubContextTask(internalApi, {\n context: arg0.input.context,\n contextOptional: arg0.input.contextOptional,\n transactionParser: arg0.input.transactionParser,\n serializedTransaction: arg0.input.serializedTransaction,\n contextModule: arg0.input.contextModule,\n chainId: arg0.input.chainId,\n }).run();\n return new ProvideTransactionContextTask(internalApi, {\n context: arg0.input.context,\n subcontextsCallbacks: subcontextCallbacks,\n serializedTransaction: arg0.input.serializedTransaction,\n derivationPath: arg0.input.derivationPath,\n }).run();\n };\n\n const signTransaction = async (arg0: {\n input: {\n derivationPath: string;\n serializedTransaction: Uint8Array;\n chainId: number;\n transactionType: TransactionType;\n clearSigningType: ClearSigningType;\n };\n }) =>\n new SendSignTransactionTask(internalApi, {\n ...arg0.input,\n }).run();\n\n return {\n getAppConfig,\n web3CheckOptIn,\n buildContext,\n buildSubContextAndProvide,\n signTransaction,\n };\n }\n}\n"],
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,iCAAAE,IAAA,eAAAC,EAAAH,
|
|
6
|
-
"names": ["SignTransactionDeviceAction_exports", "__export", "SignTransactionDeviceAction", "__toCommonJS", "import_device_management_kit", "import_purify_ts", "import_xstate", "import_SignTransactionDeviceActionTypes", "import_GetAppConfigurationCommand", "import_Web3CheckOptInCommand", "import_BuildSubContextTask", "import_BuildTransactionContextTask", "import_ProvideTransactionContextTask", "import_SendSignTransactionTask", "import_ApplicationChecker", "internalApi", "getAppConfig", "web3CheckOptIn", "buildContext", "signTransaction", "buildSubContextAndProvide", "context", "_", "input", "error", "event", "arg0", "subcontextCallbacks"]
|
|
4
|
+
"sourcesContent": ["import {\n type CommandErrorResult,\n type CommandResult,\n type DeviceActionStateMachine,\n DeviceModelId,\n type InternalApi,\n isSuccessCommandResult,\n OpenAppDeviceAction,\n type StateMachineTypes,\n UnknownDAError,\n UserInteractionRequired,\n XStateDeviceAction,\n} from \"@ledgerhq/device-management-kit\";\nimport { type Either, Left, Right } from \"purify-ts\";\nimport { and, assign, fromPromise, setup } from \"xstate\";\n\nimport { type GetConfigCommandResponse } from \"@api/app-binder/GetConfigCommandTypes\";\nimport {\n type SignTransactionDAError,\n type SignTransactionDAInput,\n type SignTransactionDAIntermediateValue,\n type SignTransactionDAInternalState,\n type SignTransactionDAOutput,\n SignTransactionDAStep,\n} from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { type ClearSigningType } from \"@api/model/ClearSigningType\";\nimport { type Signature } from \"@api/model/Signature\";\nimport { type TransactionType } from \"@api/model/TransactionType\";\nimport { GetAppConfiguration } from \"@internal/app-binder/command/GetAppConfigurationCommand\";\nimport { type EthErrorCodes } from \"@internal/app-binder/command/utils/ethAppErrors\";\nimport {\n Web3CheckOptInCommand,\n type Web3CheckOptInCommandResponse,\n} from \"@internal/app-binder/command/Web3CheckOptInCommand\";\nimport {\n BuildSubContextTask,\n type BuildSubContextTaskArgs,\n} from \"@internal/app-binder/task/BuildSubContextTask\";\nimport {\n BuildTransactionContextTask,\n type BuildTransactionContextTaskArgs,\n type BuildTransactionTaskResult,\n} from \"@internal/app-binder/task/BuildTransactionContextTask\";\nimport {\n PreBuildContextTask,\n type PreBuildContextTaskArgs,\n type PreBuildContextTaskResult,\n} from \"@internal/app-binder/task/PreBuildContextTask\";\nimport { ProvideTransactionContextTask } from \"@internal/app-binder/task/ProvideTransactionContextTask\";\nimport { SendSignTransactionTask } from \"@internal/app-binder/task/SendSignTransactionTask\";\nimport { ApplicationChecker } from \"@internal/shared/utils/ApplicationChecker\";\n\nexport type MachineDependencies = {\n readonly getAppConfig: () => Promise<\n CommandResult<GetConfigCommandResponse, EthErrorCodes>\n >;\n readonly web3CheckOptIn: () => Promise<\n CommandResult<Web3CheckOptInCommandResponse, EthErrorCodes>\n >;\n readonly preBuildContext: (arg0: {\n input: PreBuildContextTaskArgs;\n }) => Promise<PreBuildContextTaskResult>;\n readonly buildContext: (arg0: {\n input: BuildTransactionContextTaskArgs;\n }) => Promise<BuildTransactionTaskResult>;\n readonly buildSubContextAndProvide: (arg0: {\n input: BuildSubContextTaskArgs & {\n derivationPath: string;\n transaction: Uint8Array;\n };\n }) => Promise<Either<CommandErrorResult<EthErrorCodes>, void>>;\n readonly signTransaction: (arg0: {\n input: {\n derivationPath: string;\n serializedTransaction: Uint8Array;\n chainId: number;\n transactionType: TransactionType;\n clearSigningType: ClearSigningType;\n };\n }) => Promise<CommandResult<Signature, EthErrorCodes>>;\n};\n\nexport class SignTransactionDeviceAction extends XStateDeviceAction<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n> {\n makeStateMachine(\n internalApi: InternalApi,\n ): DeviceActionStateMachine<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n > {\n type types = StateMachineTypes<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n >;\n\n const {\n getAppConfig,\n web3CheckOptIn,\n preBuildContext,\n buildContext,\n signTransaction,\n buildSubContextAndProvide,\n } = this.extractDependencies(internalApi);\n\n return setup({\n types: {\n input: {} as types[\"input\"],\n context: {} as types[\"context\"],\n output: {} as types[\"output\"],\n },\n actors: {\n openAppStateMachine: new OpenAppDeviceAction({\n input: { appName: \"Ethereum\" },\n }).makeStateMachine(internalApi),\n getAppConfig: fromPromise(getAppConfig),\n web3CheckOptIn: fromPromise(web3CheckOptIn),\n preBuildContext: fromPromise(preBuildContext),\n buildContext: fromPromise(buildContext),\n signTransaction: fromPromise(signTransaction),\n buildSubContextAndProvide: fromPromise(buildSubContextAndProvide),\n },\n guards: {\n noInternalError: ({ context }) => context._internalState.error === null,\n isWeb3ChecksSupported: ({ context }) =>\n new ApplicationChecker(\n internalApi.getDeviceSessionState(),\n context._internalState.appConfig!,\n )\n .withMinVersionExclusive(\"1.15.0\")\n .excludeDeviceModel(DeviceModelId.NANO_S)\n .excludeDeviceModel(DeviceModelId.NANO_SP)\n .excludeDeviceModel(DeviceModelId.NANO_X)\n .check(),\n shouldOptIn: ({ context }) =>\n !context._internalState.appConfig!.web3ChecksEnabled &&\n !context._internalState.appConfig!.web3ChecksOptIn,\n skipOpenApp: ({ context }) => !!context.input.options.skipOpenApp,\n hasContextToProvide: ({ context }) =>\n context._internalState.clearSignContexts !== null &&\n context._internalState.clearSignContexts.length > 0,\n },\n actions: {\n assignErrorFromEvent: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: _.event[\"error\"], // NOTE: it should never happen, the error is not typed anymore here\n }),\n }),\n },\n }).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QGUCWUB2AVATgQw1jwGMAXVAewwBEwA3VYsAQTMowDoB5ABzA2Y8etBk1bkqAYghUwHVBjoUA1nIp8BQ5KTykwAWRIALBWADaABgC6iUDwqxUEjLZAAPRABYAzAHYOAJwAHACMAb4ArBYWAEw+FkHeADQgAJ6IwRYcAGwRQUG52TF5EcUAvmUpaJi4BERsVCKMLA2cAMJGYMTKvPyCwvTN4uwASnAArgA2pJKWNkgg9o7Orh4IAcEcpRYhvonZAd4byWmIITtZESEhBTHeEVH33hVV6Nj4hCTOTWKtHB1dHoafo-FrOMawKYzMwheZ2BxOdirDKbba7faHY4pdIIUIcG6+bwWbKeXwxIKeTzkl4garvOpfdig4ZUDgAcTApA6eEmk34MGksnkihUchgXKMPL5GBgc1cS0RVGRCBCngC2Q4aqCewCEWyQUyJxx5x2HBiByCsV8AQsaoinhpdNqn1azL+HIlUv5YEkYBwOAoOA4PEmugAZoGALYccXc3neuULBUrBZrVXqzXBHV6g2Wo1nDaasIWXxkwkxW0xXyOt7O+rfQa-Zzszlx6UwCFQgHdWbWeUIlOgNMBTxBDiJby3MkmiK+bFnCzeEL4mLm4m5aLeB2VWm1j71pmNsHsFue+MysCd6bd5SzWH95ZI1MF0fj7yTorT6Kz+cILfLhJEgiDZslVXwLACGsan3RlGiPFlOAAIXGVBJggNoqD0NwZhkDA5AUJRVA4AAjFC0IwjAsNIRN4UfJVnwQOJPCyIJyWLHYqV1bJf3OGJl3yYlfFA0dsiOZ4dydGDXXgv5kNQ9DMLAbDfX9QNg1DUgIxwaNSPkiiqJoxYByfIdECYli2JtDiYi439PGAjhvArVdrT4skDm3V5oIZaTRGPVk5PIxTsKvCVAV7OEjLolwGPJfJMwrUkjkiNUeIsK4OEJLdLWiUI9ig+kXQbPyEI4QKFMopTSFCm870i5MTPcMz8jHNVEsJcJ7QCX88pySJSlKPw7jCAq61gmgZObAAFAMGAgMB9KqwU8OFQi5B4WbUHmxbsMMhr6NMv9RzHFK8kiLdBu405cQSTV32Ym5slAw4YlGqTiqGP4ZooOaFuCmY-QDIMQ3DKNg027b-r24yDqao74tO7UIguu4rpxbJokCA0rmJCDjk83dvKKw8Sq+iGwA5PCcEYHacKFAjRXBn6top-g-RpqG+yTGGYsO7KTvtM7kfs1HfyszLfDCbIySpdzxK8wqDzg0npvJyn2eIWmVKB9TQe0pnfvV6nNc5+qeeVfnMsFpGUe8NGF3snI8liViQlEolIIkvcfI+psT0kn32GW-CRSIxwiaVjBoei5VmL2M1SSCB4KyTykIh6wtDgKcJJbyAIRq9iPxrdZsA+JqRAbUkHNLB8PFfG6PFV5uG47HOI9mThJ7Xs39fCpJ3tRe4JzTewPlc+0vvfLjAas6HtG8HFuuo4YldiXOJQgpdProCGzMvz-VOOYuPR+nkv-anyPZ-CmEzZjhj7LVFfQMJEIN5uHvrvyTxHPJEtgIKKUXIFQdwYAoPNeACwy6R3PrDfazc1gAFp7YIGQSvaIGDMEYNnKfGBk0Ty9E0AMFWjV4GxxiGLPUCc9SlGCKBSsuDi74NZDeQhIJmEzwmNMB8TdlT6n8HxEIeoP5kichQ66JoYgrzytjDBk5qyF3rr5CeJ4PRtm9DwxeaYbhjkHtla0dtRJzh3knfEs53wbHztaHwjDlF+1ZGoyU54OxcLCt0TRjU0zgW8IECCrF872Q2PaNKq4ci7yeuSPINxqSKLGnY-ySEyIVSoh42Gaw+JHHxIcaIGxOIlnzCqb8mV9QZK3McJOtjfYJLKkk2m193Hc3vodc0r47i7xssBEIS40o+EcouZGRQ3ZOSepUkmKjWTfV+rTVJCDEBLicpqAoeYUqLm6tdVyv9JHaiOPnUZ497GcEmSzI2HNKrYRmRbCCUjSzmjfsjCshw0pu3HK5aWfdbSeBGbE96YyDkcGgeNC5DE-DMRXl080fdKShDWTiCkAR8QHDCLsG05JyjfLHhNEhrIAWtHqcoIFh0qSmNyPkEcHc9Riz4o5UCDx3ZbiXBEPZmLxmcGQOMYgTBYCQNorwh+Ql4VUgSD4J6uRPAhEpRqWhYRjoXCCEy2BnAACiqkcAEpbvyzUKdhVPXtOK66oExwY3VEI1Ffhd4gLKEAA */\n id: \"SignTransactionDeviceAction\",\n initial: \"InitialState\",\n context: ({ input }) => {\n return {\n input,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: SignTransactionDAStep.OPEN_APP,\n },\n _internalState: {\n error: null,\n appConfig: null,\n clearSignContexts: null,\n clearSignContextsOptional: null,\n subset: null,\n transactionType: null,\n clearSigningType: null,\n signature: null,\n },\n };\n },\n states: {\n InitialState: {\n always: [\n {\n target: \"GetAppConfig\",\n guard: \"skipOpenApp\",\n },\n \"OpenAppDeviceAction\",\n ],\n },\n OpenAppDeviceAction: {\n invoke: {\n id: \"openAppStateMachine\",\n input: {\n appName: \"Ethereum\",\n },\n src: \"openAppStateMachine\",\n onSnapshot: {\n actions: assign({\n intermediateValue: (_) => ({\n ..._.event.snapshot.context.intermediateValue,\n step: SignTransactionDAStep.OPEN_APP,\n }),\n }),\n },\n onDone: {\n actions: assign({\n _internalState: (_) => {\n return _.event.output.caseOf<SignTransactionDAInternalState>({\n Right: () => _.context._internalState,\n Left: (error) => ({\n ..._.context._internalState,\n error,\n }),\n });\n },\n }),\n target: \"CheckOpenAppDeviceActionResult\",\n },\n },\n },\n CheckOpenAppDeviceActionResult: {\n always: [\n {\n target: \"GetAppConfig\",\n guard: \"noInternalError\",\n },\n \"Error\",\n ],\n },\n GetAppConfig: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: SignTransactionDAStep.GET_APP_CONFIG,\n },\n }),\n invoke: {\n id: \"getAppConfig\",\n src: \"getAppConfig\",\n onDone: {\n target: \"GetAppConfigResultCheck\",\n actions: [\n assign({\n _internalState: ({ event, context }) => {\n if (isSuccessCommandResult(event.output)) {\n return {\n ...context._internalState,\n appConfig: event.output.data,\n };\n } else {\n return {\n ...context._internalState,\n error: event.output.error,\n };\n }\n },\n }),\n ],\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n GetAppConfigResultCheck: {\n always: [\n {\n target: \"Web3ChecksOptIn\",\n guard: and([\n \"noInternalError\",\n \"isWeb3ChecksSupported\",\n \"shouldOptIn\",\n ]),\n },\n {\n target: \"PreBuildContext\",\n guard: \"noInternalError\",\n },\n {\n target: \"Error\",\n },\n ],\n },\n Web3ChecksOptIn: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.Web3ChecksOptIn,\n step: SignTransactionDAStep.WEB3_CHECKS_OPT_IN,\n },\n }),\n invoke: {\n id: \"web3CheckOptIn\",\n src: \"web3CheckOptIn\",\n onDone: {\n target: \"Web3ChecksOptInResult\",\n actions: [\n assign({\n _internalState: ({ event, context }) => {\n if (isSuccessCommandResult(event.output)) {\n return {\n ...context._internalState,\n appConfig: {\n ...context._internalState.appConfig!,\n web3ChecksEnabled: event.output.data.enabled,\n },\n };\n } else {\n return context._internalState;\n }\n },\n }),\n ],\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n Web3ChecksOptInResult: {\n entry: assign(({ context }) => ({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: SignTransactionDAStep.WEB3_CHECKS_OPT_IN_RESULT,\n result: context._internalState.appConfig!.web3ChecksEnabled,\n },\n })),\n // Using after transition to force a snapshot of the state after the entry action\n // This ensures the intermediateValue is captured before moving to BuildContext\n after: {\n 0: {\n target: \"PreBuildContext\",\n },\n },\n },\n PreBuildContext: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: SignTransactionDAStep.PRE_BUILD_CONTEXT,\n },\n }),\n invoke: {\n id: \"preBuildContext\",\n src: \"preBuildContext\",\n input: ({ context }) => ({\n mapper: context.input.mapper,\n transaction: context.input.transaction,\n }),\n onDone: {\n target: \"BuildContext\",\n actions: assign({\n _internalState: ({ event, context }) => ({\n ...context._internalState,\n transactionType: event.output.type,\n subset: event.output.subset,\n }),\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n BuildContext: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: SignTransactionDAStep.BUILD_CONTEXT,\n },\n }),\n invoke: {\n id: \"buildContext\",\n src: \"buildContext\",\n input: ({ context }) => ({\n contextModule: context.input.contextModule,\n options: context.input.options,\n appConfig: context._internalState.appConfig!,\n derivationPath: context.input.derivationPath,\n transaction: context.input.transaction,\n subset: context._internalState.subset!,\n }),\n onDone: {\n target: \"HasContextToProvideCheck\",\n actions: [\n assign({\n _internalState: ({ event, context }) => ({\n ...context._internalState,\n clearSignContexts: event.output.clearSignContexts!,\n clearSignContextsOptional:\n event.output.clearSignContextsOptional!,\n clearSigningType: event.output.clearSigningType,\n }),\n }),\n ],\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n HasContextToProvideCheck: {\n always: [\n {\n target: \"BuildSubContextAndProvide\",\n guard: \"hasContextToProvide\",\n },\n {\n target: \"SignTransaction\",\n },\n ],\n },\n BuildSubContextAndProvide: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: SignTransactionDAStep.BUILD_SUB_CONTEXT_AND_PROVIDE,\n },\n }),\n exit: assign({\n // remove the first context as it has been consumed\n _internalState: ({ context }) => ({\n ...context._internalState,\n clearSignContexts:\n context._internalState.clearSignContexts!.slice(1),\n }),\n }),\n invoke: {\n id: \"buildSubContextAndProvide\",\n src: \"buildSubContextAndProvide\",\n input: ({ context }) => ({\n context: context._internalState.clearSignContexts![0]!,\n contextOptional:\n context._internalState.clearSignContextsOptional!,\n transactionParser: context.input.parser,\n transaction: context.input.transaction!,\n contextModule: context.input.contextModule,\n subset: context._internalState.subset!,\n derivationPath: context.input.derivationPath,\n }),\n onDone: {\n target: \"HasContextToProvideCheck\",\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n SignTransaction: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n step: SignTransactionDAStep.SIGN_TRANSACTION,\n },\n }),\n invoke: {\n id: \"signTransaction\",\n src: \"signTransaction\",\n input: ({ context }) => ({\n derivationPath: context.input.derivationPath,\n serializedTransaction: context.input.transaction,\n chainId: context._internalState.subset!.chainId,\n transactionType: context._internalState.transactionType!,\n clearSigningType: context._internalState.clearSigningType!,\n }),\n onDone: {\n target: \"SignTransactionResultCheck\",\n actions: [\n assign({\n _internalState: ({ event, context }) => {\n if (isSuccessCommandResult(event.output)) {\n return {\n ...context._internalState,\n signature: event.output.data,\n };\n }\n return {\n ...context._internalState,\n error: event.output.error,\n };\n },\n }),\n ],\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n SignTransactionResultCheck: {\n always: [\n { guard: \"noInternalError\", target: \"Success\" },\n { target: \"Error\" },\n ],\n },\n Success: {\n type: \"final\",\n },\n Error: {\n type: \"final\",\n },\n },\n output: ({ context }) =>\n context._internalState.signature\n ? Right(context._internalState.signature)\n : Left(\n context._internalState.error ||\n new UnknownDAError(\"No error in final state\"),\n ),\n });\n }\n\n extractDependencies(internalApi: InternalApi): MachineDependencies {\n const getAppConfig = async () =>\n internalApi.sendCommand(new GetAppConfiguration());\n const web3CheckOptIn = async () =>\n internalApi.sendCommand(new Web3CheckOptInCommand());\n const preBuildContext = async (arg0: { input: PreBuildContextTaskArgs }) =>\n Promise.resolve(\n new PreBuildContextTask({\n mapper: arg0.input.mapper,\n transaction: arg0.input.transaction,\n }).run(),\n );\n const buildContext = async (arg0: {\n input: BuildTransactionContextTaskArgs;\n }) => new BuildTransactionContextTask(internalApi, arg0.input).run();\n\n const buildSubContextAndProvide = async (arg0: {\n input: BuildSubContextTaskArgs & {\n derivationPath: string;\n transaction: Uint8Array;\n };\n }) => {\n const { subcontextCallbacks } = new BuildSubContextTask(internalApi, {\n context: arg0.input.context,\n contextOptional: arg0.input.contextOptional,\n transactionParser: arg0.input.transactionParser,\n subset: arg0.input.subset,\n contextModule: arg0.input.contextModule,\n }).run();\n return new ProvideTransactionContextTask(internalApi, {\n context: arg0.input.context,\n subcontextsCallbacks: subcontextCallbacks,\n serializedTransaction: arg0.input.transaction,\n derivationPath: arg0.input.derivationPath,\n }).run();\n };\n\n const signTransaction = async (arg0: {\n input: {\n derivationPath: string;\n serializedTransaction: Uint8Array;\n chainId: number;\n transactionType: TransactionType;\n clearSigningType: ClearSigningType;\n };\n }) =>\n new SendSignTransactionTask(internalApi, {\n ...arg0.input,\n }).run();\n\n return {\n getAppConfig,\n web3CheckOptIn,\n preBuildContext,\n buildContext,\n buildSubContextAndProvide,\n signTransaction,\n };\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["SignTransactionDeviceAction_exports", "__export", "SignTransactionDeviceAction", "__toCommonJS", "import_device_management_kit", "import_purify_ts", "import_xstate", "import_SignTransactionDeviceActionTypes", "import_GetAppConfigurationCommand", "import_Web3CheckOptInCommand", "import_BuildSubContextTask", "import_BuildTransactionContextTask", "import_PreBuildContextTask", "import_ProvideTransactionContextTask", "import_SendSignTransactionTask", "import_ApplicationChecker", "internalApi", "getAppConfig", "web3CheckOptIn", "preBuildContext", "buildContext", "signTransaction", "buildSubContextAndProvide", "context", "_", "input", "error", "event", "arg0", "subcontextCallbacks"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var I=require("@ledgerhq/context-module"),e=require("@ledgerhq/device-management-kit"),P=require("@ledgerhq/device-management-kit"),y=require("ethers"),S=require("purify-ts"),t=require("../../../../api/app-binder/SignTransactionDeviceActionTypes"),f=require("../../../../api/model/ClearSigningType"),O=require("../../../../api/model/TransactionType"),_=require("../../../app-binder/device-action/__test-utils__/makeInternalApi"),m=require("../../../app-binder/device-action/__test-utils__/setupOpenAppDAMock"),C=require("../../../app-binder/device-action/__test-utils__/testDeviceActionStates"),g=require("./SignTransactionDeviceAction");vi.mock("@ledgerhq/device-management-kit",async a=>({...await a(),OpenAppDeviceAction:vi.fn(()=>({makeStateMachine:vi.fn()}))}));describe("SignTransactionDeviceAction",()=>{const a={getContext:vi.fn(),getContexts:vi.fn(),getTypedDataFilters:vi.fn(),getWeb3Checks:vi.fn(),getSolanaContext:vi.fn()},s={mapTransactionToSubset:vi.fn()},l={extractValue:vi.fn()},b=vi.fn(),E=vi.fn(),c=vi.fn(),u=vi.fn(),v=vi.fn();function A(){return{getAppConfig:b,web3CheckOptIn:E,buildContext:c,buildSubContextAndProvide:u,signTransaction:v}}const x=(0,_.makeDeviceActionInternalApiMock)(),d={domain:"domain-name.eth"},p=(0,e.hexaStringToBuffer)(y.Transaction.from({chainId:1n,nonce:0,data:"0x"}).unsignedSerialized);function N(i,r,n){return{blindSigningEnabled:!1,web3ChecksEnabled:r,web3ChecksOptIn:n,version:i}}function T(i,r,n){x.getDeviceSessionState.mockReturnValueOnce({sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:i},deviceModelId:e.DeviceModelId.FLEX,isSecureConnectionAllowed:!1}),b.mockResolvedValue((0,e.CommandResultFactory)({data:N(i,r,n)}))}beforeEach(()=>{vi.clearAllMocks()}),describe("Happy path",()=>{it("should call external dependencies with the correct parameters",()=>new Promise((i,r)=>{(0,m.setupOpenAppDAMock)(),T("1.15.0",!1,!1);const n=new g.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:p,options:d,contextModule:a,mapper:s,parser:l}});c.mockResolvedValueOnce({clearSignContexts:[{type:"token",payload:"payload-1"}],clearSignContextsOptional:[],serializedTransaction:new Uint8Array([1,2,3]),chainId:1,transactionType:O.TransactionType.LEGACY,clearSigningType:f.ClearSigningType.BASIC}),u.mockResolvedValueOnce((0,S.Just)(void 0)),v.mockResolvedValueOnce((0,e.CommandResultFactory)({data:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}})),vi.spyOn(n,"extractDependencies").mockReturnValue(A());const o=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.ConfirmOpenApp,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_SUB_CONTEXT_AND_PROVIDE},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction,step:t.SignTransactionDAStep.SIGN_TRANSACTION},status:e.DeviceActionStatus.Pending},{output:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"},status:e.DeviceActionStatus.Completed}];(0,C.testDeviceActionStates)(n,o,x,{onDone:()=>{expect(c).toHaveBeenCalledWith(expect.objectContaining({input:{contextModule:a,mapper:s,options:d,transaction:p,appConfig:N("1.15.0",!1,!1),derivationPath:"44'/60'/0'/0/0"}})),expect(u).toHaveBeenCalledWith(expect.objectContaining({input:expect.objectContaining({context:{type:"token",payload:"payload-1"},contextOptional:[],transactionParser:l,serializedTransaction:new Uint8Array([1,2,3]),contextModule:a,chainId:1,derivationPath:"44'/60'/0'/0/0"})})),expect(v).toHaveBeenCalledWith(expect.objectContaining({input:{derivationPath:"44'/60'/0'/0/0",serializedTransaction:new Uint8Array([1,2,3]),chainId:1,transactionType:O.TransactionType.LEGACY,clearSigningType:f.ClearSigningType.BASIC}})),i()},onError:r})})),it("should be successful while skipping OpenApp",()=>new Promise((i,r)=>{(0,m.setupOpenAppDAMock)(),T("1.15.0",!1,!1);const n=new g.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:p,options:{...d,skipOpenApp:!0},contextModule:a,mapper:s,parser:l}});c.mockResolvedValueOnce({clearSignContexts:[{type:"token",payload:"payload-1"}],serializedTransaction:new Uint8Array([1,2,3]),chainId:1,transactionType:O.TransactionType.LEGACY,clearSigningType:f.ClearSigningType.BASIC}),u.mockResolvedValueOnce((0,S.Just)(void 0)),v.mockResolvedValueOnce((0,e.CommandResultFactory)({data:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}})),vi.spyOn(n,"extractDependencies").mockReturnValue(A());const o=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_SUB_CONTEXT_AND_PROVIDE},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction,step:t.SignTransactionDAStep.SIGN_TRANSACTION},status:e.DeviceActionStatus.Pending},{output:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"},status:e.DeviceActionStatus.Completed}];(0,C.testDeviceActionStates)(n,o,x,{onDone:i,onError:r})})),it("should call external dependencies with the correct parameters with the generic parser",()=>new Promise((i,r)=>{(0,m.setupOpenAppDAMock)(),T("1.15.0",!1,!1);const n=new g.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:p,options:d,contextModule:a,mapper:s,parser:l}});c.mockResolvedValueOnce({clearSignContexts:[{type:I.ClearSignContextType.TRANSACTION_INFO,payload:"payload-1"},{type:I.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"payload-2"}],serializedTransaction:new Uint8Array([1,2,3]),chainId:7,transactionType:O.TransactionType.EIP1559,clearSigningType:f.ClearSigningType.EIP7730,clearSignContextsOptional:[]}),u.mockResolvedValueOnce((0,S.Just)(void 0)),v.mockResolvedValueOnce((0,e.CommandResultFactory)({data:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}})),vi.spyOn(n,"extractDependencies").mockReturnValue(A());const o=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.ConfirmOpenApp,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_SUB_CONTEXT_AND_PROVIDE},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_SUB_CONTEXT_AND_PROVIDE},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction,step:t.SignTransactionDAStep.SIGN_TRANSACTION},status:e.DeviceActionStatus.Pending},{output:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"},status:e.DeviceActionStatus.Completed}];(0,C.testDeviceActionStates)(n,o,x,{onError:r,onDone:()=>{expect(c).toHaveBeenCalledWith(expect.objectContaining({input:{contextModule:a,mapper:s,options:d,transaction:p,appConfig:N("1.15.0",!1,!1),derivationPath:"44'/60'/0'/0/0"}})),expect(u).toHaveBeenCalledTimes(2),expect(u).toHaveBeenNthCalledWith(1,expect.objectContaining({input:{chainId:7,context:{type:I.ClearSignContextType.TRANSACTION_INFO,payload:"payload-1"},contextModule:a,derivationPath:"44'/60'/0'/0/0",serializedTransaction:new Uint8Array([1,2,3]),transactionParser:l,contextOptional:[]}})),expect(u).toHaveBeenNthCalledWith(2,expect.objectContaining({input:{chainId:7,context:{type:I.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"payload-2"},contextModule:a,derivationPath:"44'/60'/0'/0/0",serializedTransaction:new Uint8Array([1,2,3]),transactionParser:l,contextOptional:[]}})),expect(v).toHaveBeenCalledWith(expect.objectContaining({input:{derivationPath:"44'/60'/0'/0/0",serializedTransaction:new Uint8Array([1,2,3]),chainId:7,transactionType:O.TransactionType.EIP1559,clearSigningType:f.ClearSigningType.EIP7730}})),i()}})})),it("should fallback to blind signing if provideContext return an error",()=>new Promise((i,r)=>{(0,m.setupOpenAppDAMock)(),T("1.15.0",!1,!1);const n=new g.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:p,options:d,contextModule:a,mapper:s,parser:l}});c.mockResolvedValueOnce({clearSignContexts:[{type:I.ClearSignContextType.TRANSACTION_INFO,payload:"payload-1"}],serializedTransaction:new Uint8Array([1,2,3]),chainId:1,transactionType:O.TransactionType.LEGACY,clearSigningType:f.ClearSigningType.EIP7730,clearSignContextsOptional:[]}),u.mockResolvedValueOnce((0,S.Left)(new Error("provideContext error"))),v.mockResolvedValueOnce((0,e.CommandResultFactory)({data:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}})),vi.spyOn(n,"extractDependencies").mockReturnValue(A());const o=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.ConfirmOpenApp,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_SUB_CONTEXT_AND_PROVIDE},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction,step:t.SignTransactionDAStep.SIGN_TRANSACTION},status:e.DeviceActionStatus.Pending},{output:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"},status:e.DeviceActionStatus.Completed}];(0,C.testDeviceActionStates)(n,o,x,{onError:r,onDone:()=>{expect(c).toHaveBeenCalledWith(expect.objectContaining({input:{contextModule:a,mapper:s,options:d,transaction:p,appConfig:N("1.15.0",!1,!1),derivationPath:"44'/60'/0'/0/0"}})),expect(u).toHaveBeenCalledWith(expect.objectContaining({input:{context:{type:I.ClearSignContextType.TRANSACTION_INFO,payload:"payload-1"},contextOptional:[],transactionParser:l,serializedTransaction:new Uint8Array([1,2,3]),contextModule:a,chainId:1,derivationPath:"44'/60'/0'/0/0"}})),expect(v).toHaveBeenCalledWith(expect.objectContaining({input:{derivationPath:"44'/60'/0'/0/0",serializedTransaction:new Uint8Array([1,2,3]),chainId:1,transactionType:O.TransactionType.LEGACY,clearSigningType:f.ClearSigningType.EIP7730}})),i()}})}))}),describe("Web3Checks",()=>{it("should call external dependencies with web3Checks enabled and supported",()=>new Promise((i,r)=>{(0,m.setupOpenAppDAMock)(),T("1.16.0",!0,!0);const n=new g.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:p,options:d,contextModule:a,mapper:s,parser:l}});c.mockRejectedValueOnce(new P.InvalidStatusWordError("buildContext error")),vi.spyOn(n,"extractDependencies").mockReturnValue(A());const o=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.ConfirmOpenApp,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{error:new P.InvalidStatusWordError("buildContext error"),status:e.DeviceActionStatus.Error}];(0,C.testDeviceActionStates)(n,o,x,{onDone:()=>{expect(b).toHaveBeenCalled(),expect(c).toHaveBeenCalledWith(expect.objectContaining({input:{contextModule:a,mapper:s,options:d,transaction:p,appConfig:N("1.16.0",!0,!0),derivationPath:"44'/60'/0'/0/0"}})),i()},onError:r})})),it("should call external dependencies with web3Checks supported but disabled",()=>new Promise((i,r)=>{(0,m.setupOpenAppDAMock)(),T("1.16.0",!1,!0);const n=new g.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:p,options:d,contextModule:a,mapper:s,parser:l}});c.mockRejectedValueOnce(new P.InvalidStatusWordError("buildContext error")),vi.spyOn(n,"extractDependencies").mockReturnValue(A());const o=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.ConfirmOpenApp,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{error:new P.InvalidStatusWordError("buildContext error"),status:e.DeviceActionStatus.Error}];(0,C.testDeviceActionStates)(n,o,x,{onDone:()=>{expect(b).toHaveBeenCalled(),expect(c).toHaveBeenCalledWith(expect.objectContaining({input:{contextModule:a,mapper:s,options:d,transaction:p,appConfig:N("1.16.0",!1,!0),derivationPath:"44'/60'/0'/0/0"}})),i()},onError:r})})),it("should call external dependencies with web3Checks opt-in, then enabled",()=>new Promise((i,r)=>{(0,m.setupOpenAppDAMock)(),T("1.16.0",!1,!1);const n=new g.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:p,options:d,contextModule:a,mapper:s,parser:l}});E.mockResolvedValueOnce((0,e.CommandResultFactory)({data:{enabled:!0}})),c.mockRejectedValueOnce(new P.InvalidStatusWordError("buildContext error")),vi.spyOn(n,"extractDependencies").mockReturnValue(A());const o=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.ConfirmOpenApp,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.Web3ChecksOptIn,step:t.SignTransactionDAStep.WEB3_CHECKS_OPT_IN},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.WEB3_CHECKS_OPT_IN_RESULT,result:!0},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{error:new P.InvalidStatusWordError("buildContext error"),status:e.DeviceActionStatus.Error}];(0,C.testDeviceActionStates)(n,o,x,{onDone:()=>{expect(b).toHaveBeenCalled(),expect(E).toHaveBeenCalled(),expect(c).toHaveBeenCalledWith(expect.objectContaining({input:{contextModule:a,mapper:s,options:d,transaction:p,appConfig:N("1.16.0",!0,!1),derivationPath:"44'/60'/0'/0/0"}})),i()},onError:r})})),it("should call external dependencies with web3Checks opt-in, then disabled",()=>new Promise((i,r)=>{(0,m.setupOpenAppDAMock)(),T("1.16.0",!1,!1);const n=new g.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:p,options:d,contextModule:a,mapper:s,parser:l}});E.mockResolvedValueOnce((0,e.CommandResultFactory)({data:{enabled:!1}})),c.mockRejectedValueOnce(new P.InvalidStatusWordError("buildContext error")),vi.spyOn(n,"extractDependencies").mockReturnValue(A());const o=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.ConfirmOpenApp,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.Web3ChecksOptIn,step:t.SignTransactionDAStep.WEB3_CHECKS_OPT_IN},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.WEB3_CHECKS_OPT_IN_RESULT,result:!1},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{error:new P.InvalidStatusWordError("buildContext error"),status:e.DeviceActionStatus.Error}];(0,C.testDeviceActionStates)(n,o,x,{onDone:()=>{expect(b).toHaveBeenCalled(),expect(E).toHaveBeenCalled(),expect(c).toHaveBeenCalledWith(expect.objectContaining({input:{contextModule:a,mapper:s,options:d,transaction:p,appConfig:N("1.16.0",!1,!1),derivationPath:"44'/60'/0'/0/0"}})),i()},onError:r})})),it("should provide web3Checks context if getWeb3Check return a value",()=>new Promise((i,r)=>{(0,m.setupOpenAppDAMock)(),T("1.15.0",!1,!1);const n=new g.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:p,options:d,contextModule:a,mapper:s,parser:l}});c.mockResolvedValueOnce({clearSignContexts:[{type:I.ClearSignContextType.TRANSACTION_INFO,payload:"payload-1"},{type:I.ClearSignContextType.WEB3_CHECK,payload:"0x01020304",certificate:{payload:new Uint8Array,keyUsageNumber:1}}],serializedTransaction:new Uint8Array([1,2,3]),chainId:1,transactionType:O.TransactionType.LEGACY,clearSigningType:f.ClearSigningType.EIP7730,clearSignContextsOptional:[]}),u.mockResolvedValueOnce((0,S.Just)(void 0)),v.mockResolvedValueOnce((0,e.CommandResultFactory)({data:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}})),vi.spyOn(n,"extractDependencies").mockReturnValue(A());const o=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.ConfirmOpenApp,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_SUB_CONTEXT_AND_PROVIDE},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_SUB_CONTEXT_AND_PROVIDE},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction,step:t.SignTransactionDAStep.SIGN_TRANSACTION},status:e.DeviceActionStatus.Pending},{output:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"},status:e.DeviceActionStatus.Completed}];(0,C.testDeviceActionStates)(n,o,x,{onError:r,onDone:()=>{expect(c).toHaveBeenCalledWith(expect.objectContaining({input:{contextModule:a,mapper:s,options:d,transaction:p,appConfig:N("1.15.0",!1,!1),derivationPath:"44'/60'/0'/0/0"}})),expect(u).toHaveBeenCalledTimes(2),expect(u).toHaveBeenNthCalledWith(1,expect.objectContaining({input:{context:{type:I.ClearSignContextType.TRANSACTION_INFO,payload:"payload-1"},contextOptional:[],transactionParser:l,serializedTransaction:new Uint8Array([1,2,3]),contextModule:a,chainId:1,derivationPath:"44'/60'/0'/0/0"}})),expect(u).toHaveBeenNthCalledWith(2,expect.objectContaining({input:{context:{type:I.ClearSignContextType.WEB3_CHECK,payload:"0x01020304",certificate:{payload:new Uint8Array,keyUsageNumber:1}},contextOptional:[],transactionParser:l,serializedTransaction:new Uint8Array([1,2,3]),contextModule:a,chainId:1,derivationPath:"44'/60'/0'/0/0"}})),expect(v).toHaveBeenCalledWith(expect.objectContaining({input:{derivationPath:"44'/60'/0'/0/0",serializedTransaction:new Uint8Array([1,2,3]),chainId:1,transactionType:O.TransactionType.LEGACY,clearSigningType:f.ClearSigningType.EIP7730}})),i()}})}))}),describe("OpenApp errors",()=>{it("should fail if OpenApp throw an error",()=>new Promise((i,r)=>{(0,m.setupOpenAppDAMock)(new e.UnknownDAError("OpenApp error"));const n=new g.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:p,options:d,contextModule:a,mapper:s,parser:l}});vi.spyOn(n,"extractDependencies").mockReturnValue(A());const o=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.ConfirmOpenApp,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{error:new e.UnknownDAError("OpenApp error"),status:e.DeviceActionStatus.Error}];(0,C.testDeviceActionStates)(n,o,x,{onError:r,onDone:()=>{i()}})}))}),describe("BuildContext errors",()=>{it("should fail if buildContext throws an error",()=>new Promise((i,r)=>{(0,m.setupOpenAppDAMock)(),T("1.15.0",!1,!1);const n=new g.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:p,options:d,contextModule:a,mapper:s,parser:l}});c.mockRejectedValueOnce(new P.InvalidStatusWordError("buildContext error")),vi.spyOn(n,"extractDependencies").mockReturnValue(A());const o=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.ConfirmOpenApp,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{error:new P.InvalidStatusWordError("buildContext error"),status:e.DeviceActionStatus.Error}];(0,C.testDeviceActionStates)(n,o,x,{onError:r,onDone:i})}))}),describe("SignTransaction errors",()=>{it("should fail if signTransaction returns an error",()=>new Promise((i,r)=>{(0,m.setupOpenAppDAMock)(),T("1.15.0",!1,!1);const n=new g.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:p,options:d,contextModule:a,mapper:s,parser:l}});c.mockResolvedValueOnce({clearSignContexts:[{type:I.ClearSignContextType.TRANSACTION_INFO,payload:"payload-1"}],serializedTransaction:new Uint8Array([1,2,3]),web3Check:null}),u.mockResolvedValueOnce((0,S.Just)(void 0)),v.mockResolvedValueOnce((0,e.CommandResultFactory)({error:new P.InvalidStatusWordError("signTransaction error")})),vi.spyOn(n,"extractDependencies").mockReturnValue(A());const o=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.ConfirmOpenApp,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_SUB_CONTEXT_AND_PROVIDE},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction,step:t.SignTransactionDAStep.SIGN_TRANSACTION},status:e.DeviceActionStatus.Pending},{error:new P.InvalidStatusWordError("signTransaction error"),status:e.DeviceActionStatus.Error}];(0,C.testDeviceActionStates)(n,o,x,{onError:r,onDone:i})}))})});
|
|
1
|
+
"use strict";var f=require("@ledgerhq/context-module"),e=require("@ledgerhq/device-management-kit"),x=require("@ledgerhq/device-management-kit"),U=require("ethers"),_=require("purify-ts"),t=require("../../../../api/app-binder/SignTransactionDeviceActionTypes"),E=require("../../../../api/model/ClearSigningType"),P=require("../../../../api/model/TransactionType"),h=require("../../../app-binder/device-action/__test-utils__/makeInternalApi"),I=require("../../../app-binder/device-action/__test-utils__/setupOpenAppDAMock"),O=require("../../../app-binder/device-action/__test-utils__/testDeviceActionStates"),v=require("./SignTransactionDeviceAction");vi.mock("@ledgerhq/device-management-kit",async r=>({...await r(),OpenAppDeviceAction:vi.fn(()=>({makeStateMachine:vi.fn()}))}));describe("SignTransactionDeviceAction",()=>{const r={getContext:vi.fn(),getContexts:vi.fn(),getTypedDataFilters:vi.fn(),getWeb3Checks:vi.fn(),getSolanaContext:vi.fn()},l={mapTransactionToSubset:vi.fn()},u={extractValue:vi.fn()},S=vi.fn(),V=vi.fn(),m=vi.fn(),p=vi.fn(),C=vi.fn(),A=vi.fn();function N(){return{getAppConfig:S,web3CheckOptIn:V,preBuildContext:m,buildContext:p,buildSubContextAndProvide:C,signTransaction:A}}const g=(0,h.makeDeviceActionInternalApiMock)(),d={domain:"domain-name.eth"},a=(0,e.hexaStringToBuffer)(U.Transaction.from({chainId:1n,nonce:0,data:"0x"}).unsignedSerialized),c={chainId:1,data:"0x",selector:"0x",to:"0x",value:0n};function b(i,o,n){return{blindSigningEnabled:!1,web3ChecksEnabled:o,web3ChecksOptIn:n,version:i}}function T(i,o,n){g.getDeviceSessionState.mockReturnValueOnce({sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:i},deviceModelId:e.DeviceModelId.FLEX,isSecureConnectionAllowed:!1}),S.mockResolvedValue((0,e.CommandResultFactory)({data:b(i,o,n)}))}beforeEach(()=>{vi.clearAllMocks()}),describe("Happy path",()=>{it("should call external dependencies with the correct parameters",()=>new Promise((i,o)=>{(0,I.setupOpenAppDAMock)(),T("1.15.0",!1,!1);const n=new v.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:a,options:d,contextModule:r,mapper:l,parser:u}});m.mockResolvedValueOnce({subset:c,type:P.TransactionType.LEGACY}),p.mockResolvedValueOnce({clearSignContexts:[{type:"token",payload:"payload-1"}],clearSignContextsOptional:[],clearSigningType:E.ClearSigningType.BASIC}),C.mockResolvedValueOnce((0,_.Just)(void 0)),A.mockResolvedValueOnce((0,e.CommandResultFactory)({data:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}})),vi.spyOn(n,"extractDependencies").mockReturnValue(N());const s=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.ConfirmOpenApp,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.PRE_BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_SUB_CONTEXT_AND_PROVIDE},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction,step:t.SignTransactionDAStep.SIGN_TRANSACTION},status:e.DeviceActionStatus.Pending},{output:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"},status:e.DeviceActionStatus.Completed}];(0,O.testDeviceActionStates)(n,s,g,{onDone:()=>{expect(m).toHaveBeenCalledWith(expect.objectContaining({input:{mapper:l,transaction:a}})),expect(p).toHaveBeenCalledWith(expect.objectContaining({input:{contextModule:r,options:d,subset:c,transaction:a,appConfig:b("1.15.0",!1,!1),derivationPath:"44'/60'/0'/0/0"}})),expect(C).toHaveBeenCalledWith(expect.objectContaining({input:expect.objectContaining({context:{type:"token",payload:"payload-1"},contextOptional:[],transactionParser:u,subset:c,contextModule:r,derivationPath:"44'/60'/0'/0/0",transaction:a})})),expect(A).toHaveBeenCalledWith(expect.objectContaining({input:{derivationPath:"44'/60'/0'/0/0",serializedTransaction:a,chainId:1,transactionType:P.TransactionType.LEGACY,clearSigningType:E.ClearSigningType.BASIC}})),i()},onError:o})})),it("should be successful while skipping OpenApp",()=>new Promise((i,o)=>{(0,I.setupOpenAppDAMock)(),T("1.15.0",!1,!1);const n=new v.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:a,options:{...d,skipOpenApp:!0},contextModule:r,mapper:l,parser:u}});m.mockResolvedValueOnce({subset:c,type:P.TransactionType.LEGACY}),p.mockResolvedValueOnce({clearSignContexts:[{type:"token",payload:"payload-1"}],clearSignContextsOptional:[],clearSigningType:E.ClearSigningType.BASIC}),C.mockResolvedValueOnce((0,_.Just)(void 0)),A.mockResolvedValueOnce((0,e.CommandResultFactory)({data:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}})),vi.spyOn(n,"extractDependencies").mockReturnValue(N());const s=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.PRE_BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_SUB_CONTEXT_AND_PROVIDE},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction,step:t.SignTransactionDAStep.SIGN_TRANSACTION},status:e.DeviceActionStatus.Pending},{output:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"},status:e.DeviceActionStatus.Completed}];(0,O.testDeviceActionStates)(n,s,g,{onDone:i,onError:o})})),it("should call external dependencies with the correct parameters with the generic parser",()=>new Promise((i,o)=>{(0,I.setupOpenAppDAMock)(),T("1.15.0",!1,!1);const n={...c,chainId:17},s=new v.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:a,options:d,contextModule:r,mapper:l,parser:u}});m.mockResolvedValueOnce({subset:n,type:P.TransactionType.EIP1559}),p.mockResolvedValueOnce({clearSignContexts:[{type:f.ClearSignContextType.TRANSACTION_INFO,payload:"payload-1"},{type:f.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"payload-2"}],clearSigningType:E.ClearSigningType.EIP7730,clearSignContextsOptional:[]}),C.mockResolvedValueOnce((0,_.Just)(void 0)),A.mockResolvedValueOnce((0,e.CommandResultFactory)({data:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}})),vi.spyOn(s,"extractDependencies").mockReturnValue(N());const y=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.ConfirmOpenApp,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.PRE_BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_SUB_CONTEXT_AND_PROVIDE},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_SUB_CONTEXT_AND_PROVIDE},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction,step:t.SignTransactionDAStep.SIGN_TRANSACTION},status:e.DeviceActionStatus.Pending},{output:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"},status:e.DeviceActionStatus.Completed}];(0,O.testDeviceActionStates)(s,y,g,{onError:o,onDone:()=>{expect(m).toHaveBeenCalledWith(expect.objectContaining({input:{mapper:l,transaction:a}})),expect(p).toHaveBeenCalledWith(expect.objectContaining({input:{contextModule:r,options:d,subset:n,transaction:a,appConfig:b("1.15.0",!1,!1),derivationPath:"44'/60'/0'/0/0"}})),expect(C).toHaveBeenCalledTimes(2),expect(C).toHaveBeenNthCalledWith(1,expect.objectContaining({input:{context:{type:f.ClearSignContextType.TRANSACTION_INFO,payload:"payload-1"},contextOptional:[],transactionParser:u,subset:n,contextModule:r,derivationPath:"44'/60'/0'/0/0",transaction:a}})),expect(C).toHaveBeenNthCalledWith(2,expect.objectContaining({input:{context:{type:f.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"payload-2"},contextOptional:[],transactionParser:u,subset:n,contextModule:r,derivationPath:"44'/60'/0'/0/0",transaction:a}})),expect(A).toHaveBeenCalledWith(expect.objectContaining({input:{derivationPath:"44'/60'/0'/0/0",serializedTransaction:a,chainId:n.chainId,transactionType:P.TransactionType.EIP1559,clearSigningType:E.ClearSigningType.EIP7730}})),i()}})})),it("should fallback to blind signing if provideContext return an error",()=>new Promise((i,o)=>{(0,I.setupOpenAppDAMock)(),T("1.15.0",!1,!1);const n=new v.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:a,options:d,contextModule:r,mapper:l,parser:u}});m.mockResolvedValueOnce({subset:c,type:P.TransactionType.LEGACY}),p.mockResolvedValueOnce({clearSignContexts:[{type:f.ClearSignContextType.TRANSACTION_INFO,payload:"payload-1"}],clearSigningType:E.ClearSigningType.EIP7730,clearSignContextsOptional:[]}),C.mockResolvedValueOnce((0,_.Left)(new Error("provideContext error"))),A.mockResolvedValueOnce((0,e.CommandResultFactory)({data:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}})),vi.spyOn(n,"extractDependencies").mockReturnValue(N());const s=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.ConfirmOpenApp,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.PRE_BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_SUB_CONTEXT_AND_PROVIDE},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction,step:t.SignTransactionDAStep.SIGN_TRANSACTION},status:e.DeviceActionStatus.Pending},{output:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"},status:e.DeviceActionStatus.Completed}];(0,O.testDeviceActionStates)(n,s,g,{onError:o,onDone:()=>{expect(p).toHaveBeenCalledWith(expect.objectContaining({input:{contextModule:r,options:d,subset:c,transaction:a,appConfig:b("1.15.0",!1,!1),derivationPath:"44'/60'/0'/0/0"}})),expect(C).toHaveBeenCalledWith(expect.objectContaining({input:{context:{type:f.ClearSignContextType.TRANSACTION_INFO,payload:"payload-1"},contextOptional:[],transactionParser:u,subset:c,contextModule:r,derivationPath:"44'/60'/0'/0/0",transaction:a}})),expect(A).toHaveBeenCalledWith(expect.objectContaining({input:{derivationPath:"44'/60'/0'/0/0",serializedTransaction:a,chainId:c.chainId,transactionType:P.TransactionType.LEGACY,clearSigningType:E.ClearSigningType.EIP7730}})),i()}})}))}),describe("Web3Checks",()=>{it("should call external dependencies with web3Checks enabled and supported",()=>new Promise((i,o)=>{(0,I.setupOpenAppDAMock)(),T("1.16.0",!0,!0);const n=new v.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:a,options:d,contextModule:r,mapper:l,parser:u}});m.mockResolvedValueOnce({subset:c,type:P.TransactionType.LEGACY}),p.mockRejectedValueOnce(new x.InvalidStatusWordError("buildContext error")),vi.spyOn(n,"extractDependencies").mockReturnValue(N());const s=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.ConfirmOpenApp,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.PRE_BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{error:new x.InvalidStatusWordError("buildContext error"),status:e.DeviceActionStatus.Error}];(0,O.testDeviceActionStates)(n,s,g,{onDone:()=>{expect(S).toHaveBeenCalled(),expect(p).toHaveBeenCalledWith(expect.objectContaining({input:{contextModule:r,options:d,subset:c,transaction:a,appConfig:b("1.16.0",!0,!0),derivationPath:"44'/60'/0'/0/0"}})),i()},onError:o})})),it("should call external dependencies with web3Checks supported but disabled",()=>new Promise((i,o)=>{(0,I.setupOpenAppDAMock)(),T("1.16.0",!1,!0);const n=new v.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:a,options:d,contextModule:r,mapper:l,parser:u}});m.mockResolvedValueOnce({subset:c,type:P.TransactionType.LEGACY}),p.mockRejectedValueOnce(new x.InvalidStatusWordError("buildContext error")),vi.spyOn(n,"extractDependencies").mockReturnValue(N());const s=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.ConfirmOpenApp,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.PRE_BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{error:new x.InvalidStatusWordError("buildContext error"),status:e.DeviceActionStatus.Error}];(0,O.testDeviceActionStates)(n,s,g,{onDone:()=>{expect(S).toHaveBeenCalled(),expect(p).toHaveBeenCalledWith(expect.objectContaining({input:{contextModule:r,options:d,subset:c,transaction:a,appConfig:b("1.16.0",!1,!0),derivationPath:"44'/60'/0'/0/0"}})),i()},onError:o})})),it("should call external dependencies with web3Checks opt-in, then enabled",()=>new Promise((i,o)=>{(0,I.setupOpenAppDAMock)(),T("1.16.0",!1,!1);const n=new v.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:a,options:d,contextModule:r,mapper:l,parser:u}});m.mockResolvedValueOnce({subset:c,type:P.TransactionType.LEGACY}),V.mockResolvedValueOnce((0,e.CommandResultFactory)({data:{enabled:!0}})),p.mockRejectedValueOnce(new x.InvalidStatusWordError("buildContext error")),vi.spyOn(n,"extractDependencies").mockReturnValue(N());const s=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.ConfirmOpenApp,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.Web3ChecksOptIn,step:t.SignTransactionDAStep.WEB3_CHECKS_OPT_IN},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.WEB3_CHECKS_OPT_IN_RESULT,result:!0},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.PRE_BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{error:new x.InvalidStatusWordError("buildContext error"),status:e.DeviceActionStatus.Error}];(0,O.testDeviceActionStates)(n,s,g,{onDone:()=>{expect(S).toHaveBeenCalled(),expect(V).toHaveBeenCalled(),expect(p).toHaveBeenCalledWith(expect.objectContaining({input:{contextModule:r,options:d,subset:c,transaction:a,appConfig:b("1.16.0",!0,!1),derivationPath:"44'/60'/0'/0/0"}})),i()},onError:o})})),it("should call external dependencies with web3Checks opt-in, then disabled",()=>new Promise((i,o)=>{(0,I.setupOpenAppDAMock)(),T("1.16.0",!1,!1);const n=new v.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:a,options:d,contextModule:r,mapper:l,parser:u}});m.mockResolvedValueOnce({subset:c,type:P.TransactionType.LEGACY}),V.mockResolvedValueOnce((0,e.CommandResultFactory)({data:{enabled:!1}})),p.mockRejectedValueOnce(new x.InvalidStatusWordError("buildContext error")),vi.spyOn(n,"extractDependencies").mockReturnValue(N());const s=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.ConfirmOpenApp,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.Web3ChecksOptIn,step:t.SignTransactionDAStep.WEB3_CHECKS_OPT_IN},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.WEB3_CHECKS_OPT_IN_RESULT,result:!1},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.PRE_BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{error:new x.InvalidStatusWordError("buildContext error"),status:e.DeviceActionStatus.Error}];(0,O.testDeviceActionStates)(n,s,g,{onDone:()=>{expect(S).toHaveBeenCalled(),expect(V).toHaveBeenCalled(),expect(p).toHaveBeenCalledWith(expect.objectContaining({input:{contextModule:r,options:d,subset:c,transaction:a,appConfig:b("1.16.0",!1,!1),derivationPath:"44'/60'/0'/0/0"}})),i()},onError:o})})),it("should provide web3Checks context if getWeb3Check return a value",()=>new Promise((i,o)=>{(0,I.setupOpenAppDAMock)(),T("1.15.0",!1,!1);const n=new v.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:a,options:d,contextModule:r,mapper:l,parser:u}});m.mockResolvedValueOnce({subset:c,type:P.TransactionType.EIP4844}),p.mockResolvedValueOnce({clearSignContexts:[{type:f.ClearSignContextType.TRANSACTION_INFO,payload:"payload-1"},{type:f.ClearSignContextType.WEB3_CHECK,payload:"0x01020304",certificate:{payload:new Uint8Array,keyUsageNumber:1}}],clearSigningType:E.ClearSigningType.EIP7730,clearSignContextsOptional:[]}),C.mockResolvedValueOnce((0,_.Just)(void 0)),A.mockResolvedValueOnce((0,e.CommandResultFactory)({data:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}})),vi.spyOn(n,"extractDependencies").mockReturnValue(N());const s=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.ConfirmOpenApp,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.PRE_BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_SUB_CONTEXT_AND_PROVIDE},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_SUB_CONTEXT_AND_PROVIDE},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction,step:t.SignTransactionDAStep.SIGN_TRANSACTION},status:e.DeviceActionStatus.Pending},{output:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"},status:e.DeviceActionStatus.Completed}];(0,O.testDeviceActionStates)(n,s,g,{onError:o,onDone:()=>{expect(p).toHaveBeenCalledWith(expect.objectContaining({input:{contextModule:r,options:d,subset:c,transaction:a,appConfig:b("1.15.0",!1,!1),derivationPath:"44'/60'/0'/0/0"}})),expect(C).toHaveBeenCalledTimes(2),expect(C).toHaveBeenNthCalledWith(1,expect.objectContaining({input:{context:{type:f.ClearSignContextType.TRANSACTION_INFO,payload:"payload-1"},contextOptional:[],transactionParser:u,subset:c,transaction:a,contextModule:r,derivationPath:"44'/60'/0'/0/0"}})),expect(C).toHaveBeenNthCalledWith(2,expect.objectContaining({input:{context:{type:f.ClearSignContextType.WEB3_CHECK,payload:"0x01020304",certificate:{payload:new Uint8Array,keyUsageNumber:1}},contextOptional:[],transactionParser:u,subset:c,transaction:a,contextModule:r,derivationPath:"44'/60'/0'/0/0"}})),expect(A).toHaveBeenCalledWith(expect.objectContaining({input:{derivationPath:"44'/60'/0'/0/0",serializedTransaction:a,chainId:c.chainId,transactionType:P.TransactionType.EIP4844,clearSigningType:E.ClearSigningType.EIP7730}})),i()}})}))}),describe("OpenApp errors",()=>{it("should fail if OpenApp throw an error",()=>new Promise((i,o)=>{(0,I.setupOpenAppDAMock)(new e.UnknownDAError("OpenApp error"));const n=new v.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:a,options:d,contextModule:r,mapper:l,parser:u}});vi.spyOn(n,"extractDependencies").mockReturnValue(N());const s=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.ConfirmOpenApp,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{error:new e.UnknownDAError("OpenApp error"),status:e.DeviceActionStatus.Error}];(0,O.testDeviceActionStates)(n,s,g,{onError:o,onDone:()=>{i()}})}))}),describe("PreBuildContext errors",()=>{it("should fail if buildContext throws an error",()=>new Promise((i,o)=>{(0,I.setupOpenAppDAMock)(),T("1.15.0",!1,!1);const n=new v.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:a,options:d,contextModule:r,mapper:l,parser:u}});m.mockRejectedValueOnce(new x.InvalidStatusWordError("preBuildContext error")),vi.spyOn(n,"extractDependencies").mockReturnValue(N());const s=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.ConfirmOpenApp,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.PRE_BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{error:new x.InvalidStatusWordError("preBuildContext error"),status:e.DeviceActionStatus.Error}];(0,O.testDeviceActionStates)(n,s,g,{onError:o,onDone:i})}))}),describe("BuildContext errors",()=>{it("should fail if buildContext throws an error",()=>new Promise((i,o)=>{(0,I.setupOpenAppDAMock)(),T("1.15.0",!1,!1);const n=new v.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:a,options:d,contextModule:r,mapper:l,parser:u}});m.mockResolvedValueOnce({subset:c,type:P.TransactionType.LEGACY}),p.mockRejectedValueOnce(new x.InvalidStatusWordError("buildContext error")),vi.spyOn(n,"extractDependencies").mockReturnValue(N());const s=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.ConfirmOpenApp,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.PRE_BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{error:new x.InvalidStatusWordError("buildContext error"),status:e.DeviceActionStatus.Error}];(0,O.testDeviceActionStates)(n,s,g,{onError:o,onDone:i})}))}),describe("SignTransaction errors",()=>{it("should fail if signTransaction returns an error",()=>new Promise((i,o)=>{(0,I.setupOpenAppDAMock)(),T("1.15.0",!1,!1);const n=new v.SignTransactionDeviceAction({input:{derivationPath:"44'/60'/0'/0/0",transaction:a,options:d,contextModule:r,mapper:l,parser:u}});m.mockResolvedValueOnce({subset:c,type:P.TransactionType.LEGACY}),p.mockResolvedValueOnce({clearSignContexts:[{type:f.ClearSignContextType.TRANSACTION_INFO,payload:"payload-1"}],clearSignContextsOptional:[],clearSigningType:E.ClearSigningType.EIP7730}),C.mockResolvedValueOnce((0,_.Just)(void 0)),A.mockResolvedValueOnce((0,e.CommandResultFactory)({error:new x.InvalidStatusWordError("signTransaction error")})),vi.spyOn(n,"extractDependencies").mockReturnValue(N());const s=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.ConfirmOpenApp,step:t.SignTransactionDAStep.OPEN_APP},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.PRE_BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:t.SignTransactionDAStep.BUILD_SUB_CONTEXT_AND_PROVIDE},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction,step:t.SignTransactionDAStep.SIGN_TRANSACTION},status:e.DeviceActionStatus.Pending},{error:new x.InvalidStatusWordError("signTransaction error"),status:e.DeviceActionStatus.Error}];(0,O.testDeviceActionStates)(n,s,g,{onError:o,onDone:i})}))})});
|
|
2
2
|
//# sourceMappingURL=SignTransactionDeviceAction.test.js.map
|