@ledgerhq/device-signer-kit-ethereum 0.0.0-multisig-20250910160951 → 0.0.0-multisig-20250918154034

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.
Files changed (64) hide show
  1. package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js +1 -1
  2. package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js.map +2 -2
  3. package/lib/cjs/api/index.js +1 -1
  4. package/lib/cjs/api/index.js.map +3 -3
  5. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js +1 -1
  6. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js.map +3 -3
  7. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js +1 -1
  8. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js.map +3 -3
  9. package/lib/cjs/internal/app-binder/task/BuildFullContextsTask.js +1 -1
  10. package/lib/cjs/internal/app-binder/task/BuildFullContextsTask.js.map +2 -2
  11. package/lib/cjs/internal/app-binder/task/BuildFullContextsTask.test.js +1 -1
  12. package/lib/cjs/internal/app-binder/task/BuildFullContextsTask.test.js.map +2 -2
  13. package/lib/cjs/internal/app-binder/task/BuildSubcontextsTask.js +1 -1
  14. package/lib/cjs/internal/app-binder/task/BuildSubcontextsTask.js.map +3 -3
  15. package/lib/cjs/internal/app-binder/task/BuildSubcontextsTask.test.js +1 -1
  16. package/lib/cjs/internal/app-binder/task/BuildSubcontextsTask.test.js.map +3 -3
  17. package/lib/cjs/internal/app-binder/task/ProvideContextsTask.js +1 -1
  18. package/lib/cjs/internal/app-binder/task/ProvideContextsTask.js.map +2 -2
  19. package/lib/cjs/internal/app-binder/task/ProvideContextsTask.test.js +1 -1
  20. package/lib/cjs/internal/app-binder/task/ProvideContextsTask.test.js.map +2 -2
  21. package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.js +1 -1
  22. package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.js.map +3 -3
  23. package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.test.js +1 -1
  24. package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.test.js.map +2 -2
  25. package/lib/cjs/package.json +1 -1
  26. package/lib/esm/api/app-binder/SignTransactionDeviceActionTypes.js +1 -1
  27. package/lib/esm/api/app-binder/SignTransactionDeviceActionTypes.js.map +2 -2
  28. package/lib/esm/api/index.js +1 -1
  29. package/lib/esm/api/index.js.map +2 -2
  30. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js +1 -1
  31. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js.map +3 -3
  32. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js +1 -1
  33. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js.map +3 -3
  34. package/lib/esm/internal/app-binder/task/BuildFullContextsTask.js +1 -1
  35. package/lib/esm/internal/app-binder/task/BuildFullContextsTask.js.map +2 -2
  36. package/lib/esm/internal/app-binder/task/BuildFullContextsTask.test.js +1 -1
  37. package/lib/esm/internal/app-binder/task/BuildFullContextsTask.test.js.map +2 -2
  38. package/lib/esm/internal/app-binder/task/BuildSubcontextsTask.js +1 -1
  39. package/lib/esm/internal/app-binder/task/BuildSubcontextsTask.js.map +2 -2
  40. package/lib/esm/internal/app-binder/task/BuildSubcontextsTask.test.js +1 -1
  41. package/lib/esm/internal/app-binder/task/BuildSubcontextsTask.test.js.map +2 -2
  42. package/lib/esm/internal/app-binder/task/ProvideContextsTask.js +1 -1
  43. package/lib/esm/internal/app-binder/task/ProvideContextsTask.js.map +2 -2
  44. package/lib/esm/internal/app-binder/task/ProvideContextsTask.test.js +1 -1
  45. package/lib/esm/internal/app-binder/task/ProvideContextsTask.test.js.map +2 -2
  46. package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.js +1 -1
  47. package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.js.map +3 -3
  48. package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.test.js +1 -1
  49. package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.test.js.map +2 -2
  50. package/lib/esm/package.json +1 -1
  51. package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts +2 -1
  52. package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts.map +1 -1
  53. package/lib/types/api/index.d.ts +5 -9
  54. package/lib/types/api/index.d.ts.map +1 -1
  55. package/lib/types/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.d.ts +1 -1
  56. package/lib/types/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.d.ts.map +1 -1
  57. package/lib/types/internal/app-binder/task/BuildFullContextsTask.d.ts.map +1 -1
  58. package/lib/types/internal/app-binder/task/BuildSubcontextsTask.d.ts.map +1 -1
  59. package/lib/types/internal/app-binder/task/ProvideContextsTask.d.ts +3 -1
  60. package/lib/types/internal/app-binder/task/ProvideContextsTask.d.ts.map +1 -1
  61. package/lib/types/internal/app-binder/task/ProvideEIP712ContextTask.d.ts +1 -1
  62. package/lib/types/internal/app-binder/task/ProvideEIP712ContextTask.d.ts.map +1 -1
  63. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  64. package/package.json +7 -7
@@ -1,2 +1,2 @@
1
- import{DeviceModelId as s,isSuccessCommandResult as p,OpenAppDeviceAction as C,UnknownDAError as T,UserInteractionRequired as i,XStateDeviceAction as m}from"@ledgerhq/device-management-kit";import{Left as y,Right as A}from"purify-ts";import{and as h,assign as e,fromPromise as o,setup as E}from"xstate";import{SignTransactionDAStep as a}from"../../../../api/app-binder/SignTransactionDeviceActionTypes";import{GetAppConfiguration as I}from"../../../app-binder/command/GetAppConfigurationCommand";import{Web3CheckOptInCommand as k}from"../../../app-binder/command/Web3CheckOptInCommand";import{BuildFullContextsTask as f}from"../../../app-binder/task/BuildFullContextsTask";import{ParseTransactionTask as v}from"../../../app-binder/task/ParseTransactionTask";import{ProvideContextsTask as D}from"../../../app-binder/task/ProvideContextsTask";import{SendSignTransactionTask as _}from"../../../app-binder/task/SendSignTransactionTask";import{ApplicationChecker as P}from"../../../shared/utils/ApplicationChecker";class G extends m{makeStateMachine(r){const{getAppConfig:c,web3CheckOptIn:u,parseTransaction:l,buildContexts:g,signTransaction:d,provideContexts:S}=this.extractDependencies(r);return E({types:{input:{},context:{},output:{}},actors:{openAppStateMachine:new C({input:{appName:"Ethereum"}}).makeStateMachine(r),getAppConfig:o(c),web3CheckOptIn:o(u),parseTransaction:o(l),buildContexts:o(g),provideContexts:o(S),signTransaction:o(d)},guards:{noInternalError:({context:t})=>t._internalState.error===null,isWeb3ChecksSupported:({context:t})=>new P(r.getDeviceSessionState(),t._internalState.appConfig).withMinVersionExclusive("1.15.0").excludeDeviceModel(s.NANO_S).excludeDeviceModel(s.NANO_SP).excludeDeviceModel(s.NANO_X).check(),shouldOptIn:({context:t})=>!t._internalState.appConfig.web3ChecksEnabled&&!t._internalState.appConfig.web3ChecksOptIn,skipOpenApp:({context:t})=>!!t.input.options.skipOpenApp},actions:{assignErrorFromEvent:e({_internalState:t=>({...t.context._internalState,error:t.event.error})})}}).createMachine({id:"SignTransactionDeviceAction",initial:"InitialState",context:({input:t})=>({input:t,intermediateValue:{requiredUserInteraction:i.None,step:a.OPEN_APP},_internalState:{error:null,appConfig:null,subset:null,contexts:[],clearSigningType:null,transactionType:null,signature:null}}),states:{InitialState:{always:[{target:"GetAppConfig",guard:"skipOpenApp"},"OpenAppDeviceAction"]},OpenAppDeviceAction:{invoke:{id:"openAppStateMachine",input:{appName:"Ethereum"},src:"openAppStateMachine",onSnapshot:{actions:e({intermediateValue:t=>({...t.event.snapshot.context.intermediateValue,step:a.OPEN_APP})})},onDone:{actions:e({_internalState:t=>t.event.output.caseOf({Right:()=>t.context._internalState,Left:n=>({...t.context._internalState,error:n})})}),target:"CheckOpenAppDeviceActionResult"}}},CheckOpenAppDeviceActionResult:{always:[{target:"GetAppConfig",guard:"noInternalError"},"Error"]},GetAppConfig:{entry:e({intermediateValue:{requiredUserInteraction:i.None,step:a.GET_APP_CONFIG}}),invoke:{id:"getAppConfig",src:"getAppConfig",onDone:{target:"GetAppConfigResultCheck",actions:[e({_internalState:({event:t,context:n})=>p(t.output)?{...n._internalState,appConfig:t.output.data}:{...n._internalState,error:t.output.error}})]},onError:{target:"Error",actions:"assignErrorFromEvent"}}},GetAppConfigResultCheck:{always:[{target:"Web3ChecksOptIn",guard:h(["noInternalError","isWeb3ChecksSupported","shouldOptIn"])},{target:"ParseTransaction",guard:"noInternalError"},{target:"Error"}]},Web3ChecksOptIn:{entry:e({intermediateValue:{requiredUserInteraction:i.Web3ChecksOptIn,step:a.WEB3_CHECKS_OPT_IN}}),invoke:{id:"web3CheckOptIn",src:"web3CheckOptIn",onDone:{target:"Web3ChecksOptInResult",actions:[e({_internalState:({event:t,context:n})=>p(t.output)?{...n._internalState,appConfig:{...n._internalState.appConfig,web3ChecksEnabled:t.output.data.enabled}}:n._internalState})]},onError:{target:"Error",actions:"assignErrorFromEvent"}}},Web3ChecksOptInResult:{entry:e(({context:t})=>({intermediateValue:{requiredUserInteraction:i.None,step:a.WEB3_CHECKS_OPT_IN_RESULT,result:t._internalState.appConfig.web3ChecksEnabled}})),after:{0:{target:"ParseTransaction"}}},ParseTransaction:{entry:e({intermediateValue:{requiredUserInteraction:i.None,step:a.PARSE_TRANSACTION}}),invoke:{id:"parseTransaction",src:"parseTransaction",input:({context:t})=>({mapper:t.input.mapper,transaction:t.input.transaction}),onDone:{target:"BuildContexts",actions:e({_internalState:({event:t,context:n})=>({...n._internalState,subset:t.output.subset,transactionType:t.output.type})})},onError:{target:"Error",actions:"assignErrorFromEvent"}}},BuildContexts:{entry:e({intermediateValue:{requiredUserInteraction:i.None,step:a.BUILD_CONTEXTS}}),invoke:{id:"buildContexts",src:"buildContexts",input:({context:t})=>({contextModule:t.input.contextModule,mapper:t.input.mapper,parser:t.input.parser,options:t.input.options,appConfig:t._internalState.appConfig,derivationPath:t.input.derivationPath,subset:t._internalState.subset,transaction:t.input.transaction,deviceModelId:r.getDeviceModel().id}),onDone:{target:"ProvideContexts",actions:[e({_internalState:({event:t,context:n})=>({...n._internalState,contexts:t.output.clearSignContexts,clearSigningType:t.output.clearSigningType})})]},onError:{target:"Error",actions:"assignErrorFromEvent"}}},ProvideContexts:{entry:e({intermediateValue:{requiredUserInteraction:i.None,step:a.PROVIDE_CONTEXTS}}),exit:e({_internalState:({context:t})=>({...t._internalState,contexts:t._internalState.contexts.slice(1)})}),invoke:{id:"provideContexts",src:"provideContexts",input:({context:t})=>({contexts:t._internalState.contexts,derivationPath:t.input.derivationPath,serializedTransaction:t.input.transaction}),onDone:{target:"SignTransaction"},onError:{target:"Error",actions:"assignErrorFromEvent"}}},SignTransaction:{entry:e({intermediateValue:{requiredUserInteraction:i.SignTransaction,step:a.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:[e({_internalState:({event:t,context:n})=>p(t.output)?{...n._internalState,signature:t.output.data}:{...n._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?A(t._internalState.signature):y(t._internalState.error||new T("No error in final state"))})}extractDependencies(r){return{getAppConfig:async()=>r.sendCommand(new I),web3CheckOptIn:async()=>r.sendCommand(new k),parseTransaction:async t=>Promise.resolve(new v({mapper:t.input.mapper,transaction:t.input.transaction}).run()),buildContexts:async t=>new f(r,t.input).run(),provideContexts:async t=>new D(r,t.input).run(),signTransaction:async t=>new _(r,{...t.input}).run()}}}export{G as SignTransactionDeviceAction};
1
+ import{DeviceModelId as p,isSuccessCommandResult as s,OpenAppDeviceAction as T,UnknownDAError as C,UserInteractionRequired as i,XStateDeviceAction as m}from"@ledgerhq/device-management-kit";import{Left as y,Right as A}from"purify-ts";import{and as h,assign as n,fromPromise as o,setup as I}from"xstate";import{SignTransactionDAStep as a}from"../../../../api/app-binder/SignTransactionDeviceActionTypes";import{ClearSigningType as E}from"../../../../api/model/ClearSigningType";import{GetAppConfiguration as k}from"../../../app-binder/command/GetAppConfigurationCommand";import{Web3CheckOptInCommand as _}from"../../../app-binder/command/Web3CheckOptInCommand";import{BuildFullContextsTask as f}from"../../../app-binder/task/BuildFullContextsTask";import{ParseTransactionTask as v}from"../../../app-binder/task/ParseTransactionTask";import{ProvideContextsTask as D}from"../../../app-binder/task/ProvideContextsTask";import{SendSignTransactionTask as P}from"../../../app-binder/task/SendSignTransactionTask";import{ApplicationChecker as b}from"../../../shared/utils/ApplicationChecker";class L extends m{makeStateMachine(r){const{getAppConfig:c,web3CheckOptIn:u,parseTransaction:l,buildContexts:g,signTransaction:d,provideContexts:S}=this.extractDependencies(r);return I({types:{input:{},context:{},output:{}},actors:{openAppStateMachine:new T({input:{appName:"Ethereum"}}).makeStateMachine(r),getAppConfig:o(c),web3CheckOptIn:o(u),parseTransaction:o(l),buildContexts:o(g),provideContexts:o(S),signTransaction:o(d)},guards:{noInternalError:({context:t})=>t._internalState.error===null,notRefusedByUser:({context:t})=>t._internalState.error!==null&&(!("errorCode"in t._internalState.error)||t._internalState.error.errorCode!=="6985"),isWeb3ChecksSupported:({context:t})=>new b(r.getDeviceSessionState(),t._internalState.appConfig).withMinVersionExclusive("1.15.0").excludeDeviceModel(p.NANO_S).excludeDeviceModel(p.NANO_SP).excludeDeviceModel(p.NANO_X).check(),shouldOptIn:({context:t})=>!t._internalState.appConfig.web3ChecksEnabled&&!t._internalState.appConfig.web3ChecksOptIn,skipOpenApp:({context:t})=>!!t.input.options.skipOpenApp},actions:{assignErrorFromEvent:n({_internalState:t=>({...t.context._internalState,error:t.event.error})})}}).createMachine({id:"SignTransactionDeviceAction",initial:"InitialState",context:({input:t})=>({input:t,intermediateValue:{requiredUserInteraction:i.None,step:a.OPEN_APP},_internalState:{error:null,appConfig:null,subset:null,contexts:[],clearSigningType:null,transactionType:null,signature:null}}),states:{InitialState:{always:[{target:"GetAppConfig",guard:"skipOpenApp"},"OpenAppDeviceAction"]},OpenAppDeviceAction:{invoke:{id:"openAppStateMachine",input:{appName:"Ethereum"},src:"openAppStateMachine",onSnapshot:{actions:n({intermediateValue:t=>({...t.event.snapshot.context.intermediateValue,step:a.OPEN_APP})})},onDone:{actions:n({_internalState:t=>t.event.output.caseOf({Right:()=>t.context._internalState,Left:e=>({...t.context._internalState,error:e})})}),target:"CheckOpenAppDeviceActionResult"}}},CheckOpenAppDeviceActionResult:{always:[{target:"GetAppConfig",guard:"noInternalError"},"Error"]},GetAppConfig:{entry:n({intermediateValue:{requiredUserInteraction:i.None,step:a.GET_APP_CONFIG}}),invoke:{id:"getAppConfig",src:"getAppConfig",onDone:{target:"GetAppConfigResultCheck",actions:[n({_internalState:({event:t,context:e})=>s(t.output)?{...e._internalState,appConfig:t.output.data}:{...e._internalState,error:t.output.error}})]},onError:{target:"Error",actions:"assignErrorFromEvent"}}},GetAppConfigResultCheck:{always:[{target:"Web3ChecksOptIn",guard:h(["noInternalError","isWeb3ChecksSupported","shouldOptIn"])},{target:"ParseTransaction",guard:"noInternalError"},{target:"Error"}]},Web3ChecksOptIn:{entry:n({intermediateValue:{requiredUserInteraction:i.Web3ChecksOptIn,step:a.WEB3_CHECKS_OPT_IN}}),invoke:{id:"web3CheckOptIn",src:"web3CheckOptIn",onDone:{target:"Web3ChecksOptInResult",actions:[n({_internalState:({event:t,context:e})=>s(t.output)?{...e._internalState,appConfig:{...e._internalState.appConfig,web3ChecksEnabled:t.output.data.enabled}}:e._internalState})]},onError:{target:"Error",actions:"assignErrorFromEvent"}}},Web3ChecksOptInResult:{entry:n(({context:t})=>({intermediateValue:{requiredUserInteraction:i.None,step:a.WEB3_CHECKS_OPT_IN_RESULT,result:t._internalState.appConfig.web3ChecksEnabled}})),after:{0:{target:"ParseTransaction"}}},ParseTransaction:{entry:n({intermediateValue:{requiredUserInteraction:i.None,step:a.PARSE_TRANSACTION}}),invoke:{id:"parseTransaction",src:"parseTransaction",input:({context:t})=>({mapper:t.input.mapper,transaction:t.input.transaction}),onDone:{target:"BuildContexts",actions:n({_internalState:({event:t,context:e})=>({...e._internalState,subset:t.output.subset,transactionType:t.output.type})})},onError:{target:"Error",actions:"assignErrorFromEvent"}}},BuildContexts:{entry:n({intermediateValue:{requiredUserInteraction:i.None,step:a.BUILD_CONTEXTS}}),invoke:{id:"buildContexts",src:"buildContexts",input:({context:t})=>({contextModule:t.input.contextModule,mapper:t.input.mapper,parser:t.input.parser,options:t.input.options,appConfig:t._internalState.appConfig,derivationPath:t.input.derivationPath,subset:t._internalState.subset,transaction:t.input.transaction,deviceModelId:r.getDeviceModel().id}),onDone:{target:"ProvideContexts",actions:[n({_internalState:({event:t,context:e})=>({...e._internalState,contexts:t.output.clearSignContexts,clearSigningType:t.output.clearSigningType})})]},onError:{target:"Error",actions:"assignErrorFromEvent"}}},ProvideContexts:{entry:n({intermediateValue:{requiredUserInteraction:i.None,step:a.PROVIDE_CONTEXTS}}),exit:n({_internalState:({context:t})=>({...t._internalState,contexts:t._internalState.contexts.slice(1)})}),invoke:{id:"provideContexts",src:"provideContexts",input:({context:t})=>({contexts:t._internalState.contexts,derivationPath:t.input.derivationPath,serializedTransaction:t.input.transaction}),onDone:{target:"SignTransaction"},onError:{target:"Error",actions:"assignErrorFromEvent"}}},SignTransaction:{entry:n({intermediateValue:{requiredUserInteraction:i.SignTransaction,step:a.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:[n({_internalState:({event:t,context:e})=>s(t.output)?{...e._internalState,signature:t.output.data}:{...e._internalState,error:t.output.error}})]},onError:{target:"SignTransactionResultCheck",actions:"assignErrorFromEvent"}}},SignTransactionResultCheck:{always:[{guard:"noInternalError",target:"Success"},{guard:"notRefusedByUser",target:"BlindSignTransactionFallback"},{target:"Error"}]},BlindSignTransactionFallback:{entry:n({intermediateValue:{requiredUserInteraction:i.None,step:a.BLIND_SIGN_TRANSACTION_FALLBACK}}),invoke:{id:"blindSignTransactionFallback",src:"signTransaction",input:({context:t})=>({derivationPath:t.input.derivationPath,serializedTransaction:t.input.transaction,chainId:t._internalState.subset.chainId,transactionType:t._internalState.transactionType,clearSigningType:E.BASIC}),onDone:{target:"BlindSignTransactionFallbackResultCheck",actions:[n({_internalState:({event:t,context:e})=>s(t.output)?{...e._internalState,signature:t.output.data}:{...e._internalState,error:t.output.error}})]},onError:{target:"Error",actions:"assignErrorFromEvent"}}},BlindSignTransactionFallbackResultCheck:{always:[{guard:"noInternalError",target:"Success"},{target:"Error"}]},Success:{type:"final"},Error:{type:"final"}},output:({context:t})=>t._internalState.signature?A(t._internalState.signature):y(t._internalState.error||new C("No error in final state"))})}extractDependencies(r){return{getAppConfig:async()=>r.sendCommand(new k),web3CheckOptIn:async()=>r.sendCommand(new _),parseTransaction:async t=>Promise.resolve(new v({mapper:t.input.mapper,transaction:t.input.transaction}).run()),buildContexts:async t=>new f(r,t.input).run(),provideContexts:async t=>new D(r,t.input).run(),signTransaction:async t=>new P(r,{...t.input}).run()}}}export{L as SignTransactionDeviceAction};
2
2
  //# sourceMappingURL=SignTransactionDeviceAction.js.map
@@ -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 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 { 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 BuildFullContextsTask,\n type BuildFullContextsTaskArgs,\n type BuildFullContextsTaskResult,\n} from \"@internal/app-binder/task/BuildFullContextsTask\";\nimport {\n ParseTransactionTask,\n type ParseTransactionTaskArgs,\n type ParseTransactionTaskResult,\n} from \"@internal/app-binder/task/ParseTransactionTask\";\nimport {\n ProvideContextsTask,\n type ProvideContextsTaskArgs,\n type ProvideContextsTaskResult,\n} from \"@internal/app-binder/task/ProvideContextsTask\";\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 parseTransaction: (arg0: {\n input: ParseTransactionTaskArgs;\n }) => Promise<ParseTransactionTaskResult>;\n readonly buildContexts: (arg0: {\n input: BuildFullContextsTaskArgs;\n }) => Promise<BuildFullContextsTaskResult>;\n readonly provideContexts: (arg0: {\n input: ProvideContextsTaskArgs;\n }) => Promise<ProvideContextsTaskResult>;\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 parseTransaction,\n buildContexts,\n signTransaction,\n provideContexts,\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 parseTransaction: fromPromise(parseTransaction),\n buildContexts: fromPromise(buildContexts),\n provideContexts: fromPromise(provideContexts),\n signTransaction: fromPromise(signTransaction),\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 },\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 subset: null,\n contexts: [],\n clearSigningType: null,\n transactionType: 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: \"ParseTransaction\",\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 ParseTransaction\n after: {\n 0: {\n target: \"ParseTransaction\",\n },\n },\n },\n ParseTransaction: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: SignTransactionDAStep.PARSE_TRANSACTION,\n },\n }),\n invoke: {\n id: \"parseTransaction\",\n src: \"parseTransaction\",\n input: ({ context }) => ({\n mapper: context.input.mapper,\n transaction: context.input.transaction,\n }),\n onDone: {\n target: \"BuildContexts\",\n actions: assign({\n _internalState: ({ event, context }) => ({\n ...context._internalState,\n subset: event.output.subset,\n transactionType: event.output.type,\n }),\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n BuildContexts: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: SignTransactionDAStep.BUILD_CONTEXTS,\n },\n }),\n invoke: {\n id: \"buildContexts\",\n src: \"buildContexts\",\n input: ({ context }) => ({\n contextModule: context.input.contextModule,\n mapper: context.input.mapper,\n parser: context.input.parser,\n options: context.input.options,\n appConfig: context._internalState.appConfig!,\n derivationPath: context.input.derivationPath,\n subset: context._internalState.subset!,\n transaction: context.input.transaction,\n deviceModelId: internalApi.getDeviceModel().id,\n }),\n onDone: {\n target: \"ProvideContexts\",\n actions: [\n assign({\n _internalState: ({ event, context }) => ({\n ...context._internalState,\n contexts: event.output.clearSignContexts,\n clearSigningType: event.output.clearSigningType,\n }),\n }),\n ],\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n ProvideContexts: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: SignTransactionDAStep.PROVIDE_CONTEXTS,\n },\n }),\n exit: assign({\n // remove the first context of the first transaction details as it has been consumed\n _internalState: ({ context }) => {\n return {\n ...context._internalState,\n contexts: context._internalState.contexts.slice(1),\n };\n },\n }),\n invoke: {\n id: \"provideContexts\",\n src: \"provideContexts\",\n input: ({ context }) => ({\n contexts: context._internalState.contexts,\n derivationPath: context.input.derivationPath,\n serializedTransaction: context.input.transaction,\n }),\n onDone: {\n target: \"SignTransaction\",\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 parseTransaction = async (arg0: {\n input: ParseTransactionTaskArgs;\n }) =>\n Promise.resolve(\n new ParseTransactionTask({\n mapper: arg0.input.mapper,\n transaction: arg0.input.transaction,\n }).run(),\n );\n const buildContexts = async (arg0: { input: BuildFullContextsTaskArgs }) =>\n new BuildFullContextsTask(internalApi, arg0.input).run();\n\n const provideContexts = async (arg0: {\n input: ProvideContextsTaskArgs;\n }) => {\n return new ProvideContextsTask(internalApi, arg0.input).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 parseTransaction,\n buildContexts,\n provideContexts,\n signTransaction,\n };\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["DeviceModelId", "isSuccessCommandResult", "OpenAppDeviceAction", "UnknownDAError", "UserInteractionRequired", "XStateDeviceAction", "Left", "Right", "and", "assign", "fromPromise", "setup", "SignTransactionDAStep", "GetAppConfiguration", "Web3CheckOptInCommand", "BuildFullContextsTask", "ParseTransactionTask", "ProvideContextsTask", "SendSignTransactionTask", "ApplicationChecker", "SignTransactionDeviceAction", "internalApi", "getAppConfig", "web3CheckOptIn", "parseTransaction", "buildContexts", "signTransaction", "provideContexts", "context", "_", "input", "error", "event", "arg0"]
4
+ "sourcesContent": ["import {\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 { 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 { 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 BuildFullContextsTask,\n type BuildFullContextsTaskArgs,\n type BuildFullContextsTaskResult,\n} from \"@internal/app-binder/task/BuildFullContextsTask\";\nimport {\n ParseTransactionTask,\n type ParseTransactionTaskArgs,\n type ParseTransactionTaskResult,\n} from \"@internal/app-binder/task/ParseTransactionTask\";\nimport {\n ProvideContextsTask,\n type ProvideContextsTaskArgs,\n type ProvideContextsTaskResult,\n} from \"@internal/app-binder/task/ProvideContextsTask\";\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 parseTransaction: (arg0: {\n input: ParseTransactionTaskArgs;\n }) => Promise<ParseTransactionTaskResult>;\n readonly buildContexts: (arg0: {\n input: BuildFullContextsTaskArgs;\n }) => Promise<BuildFullContextsTaskResult>;\n readonly provideContexts: (arg0: {\n input: ProvideContextsTaskArgs;\n }) => Promise<ProvideContextsTaskResult>;\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 parseTransaction,\n buildContexts,\n signTransaction,\n provideContexts,\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 parseTransaction: fromPromise(parseTransaction),\n buildContexts: fromPromise(buildContexts),\n provideContexts: fromPromise(provideContexts),\n signTransaction: fromPromise(signTransaction),\n },\n guards: {\n noInternalError: ({ context }) => context._internalState.error === null,\n notRefusedByUser: ({ context }) =>\n context._internalState.error !== null &&\n (!(\"errorCode\" in context._internalState.error) ||\n context._internalState.error.errorCode !== \"6985\"),\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 },\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 N4IgpgJg5mDOIC5QGUCWUB2AVATgQw1jwGMAXVAewwBEwA3VYsAQTMowDoBJDVcvADbJSeUmADEAbQAMAXUSgADhVh92CkAA9EARgDsAZg4AOACzGAnAFYDNgGxXpF6ToA0IAJ67TOgEwcDHTsLCz9pQN9bAF8o9zRMXAIiNipaBiZWcipuXn4hETEpHXkkEGVVLIwNbQR9IzNLG3tHZzdPXV87aQ5I5ztfSON+zpi49Gx8QhJKtMYWFM4AeUUwDGZFRVmMhfEIKjAOVAw6CgBrA4oVtY3hUTAAWRIACyOwGRKlFTUqasQ9RxMVjMdgcdj0xnBvncXlqkTsHAsQxcnVMvmM4TsoxA8QmSWm7C280qHAAwk8wMRTstVutNvQ5pl2AAlOAAVwEpCkcg05W+VVKNR0gW6IOsoWMfgMdlMdmhHRBHActisFnMMqCmNi2PGiSmC0JjOyZIpVKutINCxZsHZnMkxR5X0qv1qwsVwRVOglcJlcoQEo4ns9pmkQL00mCFgMWJxuuSM3p22JAHEwKRaSSqAAzdC7faHY5nA4wNMbDMYbNQd4OirqAW6CVWDhWPR2fR2Yy+Fu+UwGX1C4zGHoGcPSDuGCx6HTRnWTOMEhNE9gcFMlxRliviMA4HAUHAcRQCUSZ3cAWw4xfTWfQVdKvKdddqDabLbbY-6Pb7IQ4I+sPdR1n+KMtRjWd8VSBdDU4FdL3LdArRtY1KS5D4ykdWtQBqAYO2-MFwyBHRTEjNoYT8Lpv3CKwrG7Zt0VMPRpwSUD9QghZl1TGCK3gjlENOIoULvdCtEQLD-HDMMHAlQjAj7VEdADENg1MYNhQMUwGNxPV43SRdsmg0srygLjSB4qRfH4tCfgfEScPE-CpOIxBVO6HQiLbVUQR8dTYzAmgWOJAB1MAACMDB42BllIHhcwwA4jhOc4OAAd2C0LyUpCKeBvT4a0sjDhKGfxmxDXwMT0SIDF7dpYUono9B7YxbAI4xHGMLymK0hlWMCkKwoyjBN23Xd90PUhjxwM9kp6tLTUijAstQnL+TyhA0X6Z9itK8rKphUwgW-MrfFCXpKJcejgJnPFmO0yCOG61KTXCxRZqM8RNFgAoDjwTMxBwAAKaQAEpxBAy6OsTJc7t6p6eCM+aBNyoSEAqgjFVIz0LE6CxWz0PtOz0Dg9HBMquh8LowTa0H52u1iAAU8BwWAwG8nY9hi-N4oORR6cZ5nKjhiylsRgxwQsJtCOlIIdFHaQWz7AwJ2-FyCMGEMMbOsZGMp8DqeJOmGaZ9r2AGnc9wPI9T33bmDa1ubuVvAXnWFywxax0mpfRWWqpVUWSqUgYw2F5xWvOzXNKpzriQAIVZVABAgMsxE0UhYGi2KCwSoKY7jhOwCT2B+cW50e09RUSshJwQ0nGSdEbKx-1bUI7IsCmw+1iOl2j2P46oRPk+NoazdGi3M67nO84Lvki8CQd+hljsK+bByEDq7oKocbtI3BOurBbuc2-B7IaZ3BgIDAMe+9ZtOOf3Y-UFP8-87t7LJ4fcwyqbbGezq-orFlKqCLIs4XwVFgjSFOr-XePkLS61vvfHuuc+5bhNsNc240b4UBPmfeB48n4LRfstN+hVP7CxlMAv+MIBxyRlAVSck5xSQKuu3bIINW79UvuzQsHBVChz3rbcyhcHx1xKhwVEwwQgV0nFYGSv8EQDCFD4GuehVQ7xDhpXh0ClwsN4f3U2I0xpnm4WonyE97zLSEd0URAxxHOEkX2aQAxFRgLKqqVWDYGFgx0pwLRPkjImRMYJGoQJnBNiFIdCSIJwgySGE2SwZVwgr1DO48OB8vEXVYb46afFqz4MRkE7oVhQlYyBBE7augDC+DkgUiUZgqnlLqkk-eniOCRwEEcCA3iFgADFBACCCiQXi7C4qcKCq0jA7S0m8O6QIXp-T-EIxqNKFs35VQSlVDKQmpg5aohESqAcnQQT1NUbzZJTSWltI6ZUKZMykJIIHno4eozxk8J8lcvplI5mCwWeYRsEkWzNXbJ2YwfY-D42kKieJHY2zNgab5HWHdHkXPYK8-pGSTTIWyaYxGk5IjPmsHXfQeEoT-1UqLfowpKIdlWUBDWRjGEpOaQiiZLyelvNOKipCdp+E5JqNiowzY8U+FskSkiw5TAmGlCEQioR-j6BiFqDAFBT7wFKIixpkEMUBMQAAWnIdqxsIQQiE3BGClx0QjmGzVaxHgahBC3DEBq+ZiBUQyXCE2YWSjJxgOFtC81NsNHZGpNcOkcKEbw0+Y5OuJg1ZDCUSqQFuNgHfmDN2AOYCnBTl9aw-1nAeKBvNH5ZkbIOQOvDQgA1AQxy2BbKdWwuNmwmDqo4cwjRykwuzWxVc650AludDXMBPRmoGAlP8cwTg5aRs6GGGu+g0RgJUTS45lrkzsX0rBQyRbjLTR7VZex-g0QuU6HXIdE5Sm1GDKLHQSsgkShDMLNtBbsiQ2mo9Wa27lrANdWYP2-QPKdikf-ORAQpZKLBUKds96Q2cCfQ9PqRk31Cxlvjaw7YKIQk9iRYB-hKUFJogU4BEGmGcD1jzC1gsw2Ox7EYYWql5aqS6MUuWdgjAhjrpQ7GSiCP0s7tnbByd4M1GDK6hwlEpRbyBcS-0-LURlTqiEMwnGmlHwwXfLBGBe7KufpigTVFGzlKVJ6cMX65YQnkljaVUo-DdgUzdVVZGHaCNHP4Fy2KP32OCDJBx1gzCIkIuiexzdM3qIfak55loN08X44gX+nYAzlOA-oKio4ZKExMFLFUQJ4mnWs6xM5YzbPIspJFhAXR0QBkOkKLGdUOybIA4YAIwDDCehVCCfDgWoHBYZecplXSWUovC1u+2AjlpgiYyIicl6St4SXvI7oX7RzWCDFhbLxJkCsmIEwWAGm8Fab+LYIwLk66tnCEOsFyXdPyKGO7QIGaF2kfbQAUUGjgIrhgbABl-EdiqtFfT-HxgOd0TsQMdjlVEIAA */\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 subset: null,\n contexts: [],\n clearSigningType: null,\n transactionType: 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: \"ParseTransaction\",\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 ParseTransaction\n after: {\n 0: {\n target: \"ParseTransaction\",\n },\n },\n },\n ParseTransaction: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: SignTransactionDAStep.PARSE_TRANSACTION,\n },\n }),\n invoke: {\n id: \"parseTransaction\",\n src: \"parseTransaction\",\n input: ({ context }) => ({\n mapper: context.input.mapper,\n transaction: context.input.transaction,\n }),\n onDone: {\n target: \"BuildContexts\",\n actions: assign({\n _internalState: ({ event, context }) => ({\n ...context._internalState,\n subset: event.output.subset,\n transactionType: event.output.type,\n }),\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n BuildContexts: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: SignTransactionDAStep.BUILD_CONTEXTS,\n },\n }),\n invoke: {\n id: \"buildContexts\",\n src: \"buildContexts\",\n input: ({ context }) => ({\n contextModule: context.input.contextModule,\n mapper: context.input.mapper,\n parser: context.input.parser,\n options: context.input.options,\n appConfig: context._internalState.appConfig!,\n derivationPath: context.input.derivationPath,\n subset: context._internalState.subset!,\n transaction: context.input.transaction,\n deviceModelId: internalApi.getDeviceModel().id,\n }),\n onDone: {\n target: \"ProvideContexts\",\n actions: [\n assign({\n _internalState: ({ event, context }) => ({\n ...context._internalState,\n contexts: event.output.clearSignContexts,\n clearSigningType: event.output.clearSigningType,\n }),\n }),\n ],\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n ProvideContexts: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: SignTransactionDAStep.PROVIDE_CONTEXTS,\n },\n }),\n exit: assign({\n // remove the first context of the first transaction details as it has been consumed\n _internalState: ({ context }) => {\n return {\n ...context._internalState,\n contexts: context._internalState.contexts.slice(1),\n };\n },\n }),\n invoke: {\n id: \"provideContexts\",\n src: \"provideContexts\",\n input: ({ context }) => ({\n contexts: context._internalState.contexts,\n derivationPath: context.input.derivationPath,\n serializedTransaction: context.input.transaction,\n }),\n onDone: {\n target: \"SignTransaction\",\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: \"SignTransactionResultCheck\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n SignTransactionResultCheck: {\n always: [\n { guard: \"noInternalError\", target: \"Success\" },\n {\n guard: \"notRefusedByUser\",\n target: \"BlindSignTransactionFallback\",\n },\n { target: \"Error\" },\n ],\n },\n BlindSignTransactionFallback: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: SignTransactionDAStep.BLIND_SIGN_TRANSACTION_FALLBACK,\n },\n }),\n invoke: {\n id: \"blindSignTransactionFallback\",\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: ClearSigningType.BASIC,\n }),\n onDone: {\n target: \"BlindSignTransactionFallbackResultCheck\",\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 BlindSignTransactionFallbackResultCheck: {\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 parseTransaction = async (arg0: {\n input: ParseTransactionTaskArgs;\n }) =>\n Promise.resolve(\n new ParseTransactionTask({\n mapper: arg0.input.mapper,\n transaction: arg0.input.transaction,\n }).run(),\n );\n const buildContexts = async (arg0: { input: BuildFullContextsTaskArgs }) =>\n new BuildFullContextsTask(internalApi, arg0.input).run();\n\n const provideContexts = async (arg0: {\n input: ProvideContextsTaskArgs;\n }) => {\n return new ProvideContextsTask(internalApi, arg0.input).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 parseTransaction,\n buildContexts,\n provideContexts,\n signTransaction,\n };\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["DeviceModelId", "isSuccessCommandResult", "OpenAppDeviceAction", "UnknownDAError", "UserInteractionRequired", "XStateDeviceAction", "Left", "Right", "and", "assign", "fromPromise", "setup", "SignTransactionDAStep", "ClearSigningType", "GetAppConfiguration", "Web3CheckOptInCommand", "BuildFullContextsTask", "ParseTransactionTask", "ProvideContextsTask", "SendSignTransactionTask", "ApplicationChecker", "SignTransactionDeviceAction", "internalApi", "getAppConfig", "web3CheckOptIn", "parseTransaction", "buildContexts", "signTransaction", "provideContexts", "context", "_", "input", "error", "event", "arg0"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{ClearSignContextType as D}from"@ledgerhq/context-module";import{CommandResultFactory as S,DeviceActionStatus as x,DeviceModelId as M,DeviceSessionStateType as P,DeviceStatus as B,hexaStringToBuffer as _,InvalidStatusWordError as A,UserInteractionRequired as N}from"@ledgerhq/device-management-kit";import{Transaction as H}from"ethers";import{Just as V}from"purify-ts";import{lastValueFrom as k}from"rxjs";import{SignTransactionDAStep as b}from"../../../../api/app-binder/SignTransactionDeviceActionTypes";import{ClearSigningType as T}from"../../../../api/model/ClearSigningType";import{TransactionType as w}from"../../../../api/model/TransactionType";import{makeDeviceActionInternalApiMock as q}from"../../../app-binder/device-action/__test-utils__/makeInternalApi";import{setupOpenAppDAMock as f}from"../../../app-binder/device-action/__test-utils__/setupOpenAppDAMock";import{executeUntilStep as p}from"../../../app-binder/device-action/__test-utils__/testDeviceActionUntilStep";import{SignTransactionDeviceAction as v}from"./SignTransactionDeviceAction";vi.mock("@ledgerhq/device-management-kit",async a=>({...await a(),OpenAppDeviceAction:vi.fn(()=>({makeStateMachine:vi.fn()}))}));describe("SignTransactionDeviceAction",()=>{let a;const o={getFieldContext:vi.fn(),getContexts:vi.fn(),getTypedDataFilters:vi.fn(),getWeb3Checks:vi.fn(),getSolanaContext:vi.fn()},i={mapTransactionToSubset:vi.fn()},c={extractValue:vi.fn()},E=vi.fn(),C=vi.fn(),m=vi.fn(),g=vi.fn(),y=vi.fn(),h=vi.fn();function l(){return{getAppConfig:E,web3CheckOptIn:C,parseTransaction:m,buildContexts:g,provideContexts:y,signTransaction:h}}const r=q(),s={domain:"domain-name.eth"},n=_(H.from({chainId:1n,nonce:0,data:"0x"}).unsignedSerialized),O={chainId:1,data:"0x",selector:"0x",to:"0x",value:0n};function I(e,t,R){return{blindSigningEnabled:!1,web3ChecksEnabled:t,web3ChecksOptIn:R,version:e}}function d(e,t,R){r.getDeviceSessionState.mockReturnValueOnce({sessionStateType:P.ReadyWithoutSecureChannel,deviceStatus:B.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:e},deviceModelId:M.FLEX,isSecureConnectionAllowed:!1}),r.getDeviceModel.mockReturnValueOnce({id:M.FLEX}),E.mockResolvedValue(S({data:I(e,t,R)}))}const u=(e,t)=>{if(e[t]?.status!==x.Pending)throw new Error(`Step ${t} is not pending: ${JSON.stringify(e[t])}`);return e[t]};describe("Happy path",()=>{describe("should sign a transaction",()=>{const e=[{context:{type:D.TRANSACTION_INFO,payload:"payload-1"},subcontextCallbacks:[]},{context:{type:D.TRANSACTION_FIELD_DESCRIPTION,payload:"payload-2"},subcontextCallbacks:[]}];beforeEach(()=>{vi.resetAllMocks(),f(),d("1.15.0",!1,!1),m.mockResolvedValueOnce({subset:O,type:w.EIP1559}),g.mockResolvedValueOnce({clearSignContexts:e,clearSigningType:T.EIP7730}),y.mockResolvedValueOnce(V(void 0)),h.mockResolvedValueOnce(S({data:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}}));const t=new v({input:{derivationPath:"44'/60'/0'/0/0",transaction:n,options:s,contextModule:o,mapper:i,parser:c}});vi.spyOn(t,"extractDependencies").mockReturnValue(l()),a=t._execute(r).observable}),it("should open the app",async()=>{const{steps:t}=await p(0,a);expect(u(t,0).intermediateValue.step).toBe(b.OPEN_APP)}),it("should confirm open app",async()=>{const{steps:t}=await p(1,a);expect(u(t,1).intermediateValue.requiredUserInteraction).toBe(N.ConfirmOpenApp)}),it("should get app config",async()=>{const{steps:t}=await p(2,a);expect(u(t,2).intermediateValue.step).toBe(b.GET_APP_CONFIG)}),it("should prebuild context",async()=>{const{steps:t}=await p(3,a);expect(u(t,3).intermediateValue.step).toBe(b.PARSE_TRANSACTION),expect(m).toHaveBeenCalledTimes(1),expect(m).toHaveBeenNthCalledWith(1,expect.objectContaining({input:{mapper:i,transaction:n}}))}),it("should build context",async()=>{const{steps:t}=await p(4,a);expect(u(t,4).intermediateValue.step).toBe(b.BUILD_CONTEXTS),expect(g).toHaveBeenCalledTimes(1),expect(g).toHaveBeenNthCalledWith(1,expect.objectContaining({input:{contextModule:o,parser:c,mapper:i,options:s,subset:O,transaction:n,appConfig:I("1.15.0",!1,!1),derivationPath:"44'/60'/0'/0/0",deviceModelId:M.FLEX}}))}),it("should provide context",async()=>{const{steps:t}=await p(5,a);expect(u(t,5).intermediateValue.step).toBe(b.PROVIDE_CONTEXTS),expect(y).toHaveBeenCalledTimes(1),expect(y).toHaveBeenNthCalledWith(1,expect.objectContaining({input:{contexts:e,serializedTransaction:n,derivationPath:"44'/60'/0'/0/0"}}))}),it("should sign transaction",async()=>{const{steps:t}=await p(6,a);expect(u(t,6).intermediateValue.step).toBe(b.SIGN_TRANSACTION),expect(h).toHaveBeenCalledTimes(1),expect(h).toHaveBeenNthCalledWith(1,expect.objectContaining({input:{derivationPath:"44'/60'/0'/0/0",serializedTransaction:n,chainId:1,transactionType:w.EIP1559,clearSigningType:T.EIP7730}}))}),it("should return the signature",async()=>{const t=await k(a);expect(t).toEqual({status:x.Completed,output:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}})})}),describe("should skip open app",()=>{beforeEach(()=>{vi.resetAllMocks(),f(),d("1.15.0",!1,!1);const e=new v({input:{derivationPath:"44'/60'/0'/0/0",transaction:n,options:{...s,skipOpenApp:!0},contextModule:o,mapper:i,parser:c}});m.mockResolvedValueOnce({subset:O,type:w.EIP1559}),g.mockResolvedValueOnce({clearSignContexts:[],clearSignContextsOptional:[],clearSigningType:T.BASIC}),y.mockResolvedValueOnce(V(void 0)),h.mockResolvedValueOnce(S({data:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}})),vi.spyOn(e,"extractDependencies").mockReturnValue(l()),a=e._execute(r).observable}),it("should skip open app and get app config directly",async()=>{const{steps:e}=await p(0,a);expect(u(e,0).intermediateValue.step).toBe(b.GET_APP_CONFIG)})}),describe("should opt in to web3 checks",()=>{beforeEach(()=>{vi.resetAllMocks(),f(),d("1.16.0",!1,!1);const e=new v({input:{derivationPath:"44'/60'/0'/0/0",transaction:n,options:s,contextModule:o,mapper:i,parser:c}});vi.spyOn(e,"extractDependencies").mockReturnValue(l()),C.mockResolvedValueOnce(S({data:{enabled:!0}})),a=e._execute(r).observable}),it("should opt in to web3 checks if app config is supported and not already enabled",async()=>{const{steps:e}=await p(4,a);expect(u(e,3).intermediateValue.step).toBe(b.WEB3_CHECKS_OPT_IN),expect(C).toHaveBeenCalledTimes(1),expect(u(e,4).intermediateValue.step).toBe(b.WEB3_CHECKS_OPT_IN_RESULT),expect(u(e,4).intermediateValue.result).toBe(!0)})}),describe("should not opt in to web3 checks",()=>{beforeEach(()=>{vi.resetAllMocks(),f();const e=new v({input:{derivationPath:"44'/60'/0'/0/0",transaction:n,options:s,contextModule:o,mapper:i,parser:c}});vi.spyOn(e,"extractDependencies").mockReturnValue(l()),a=e._execute(r).observable}),it("should not opt in to web3 checks if app config is not supported",async()=>{d("1.15.0",!1,!1),await p(3,a),expect(C).not.toHaveBeenCalled()}),it("should not opt in to web3 checks if already enabled",async()=>{d("1.16.0",!0,!1),await p(3,a),expect(C).not.toHaveBeenCalled()}),it("should not opt in to web3 checks if already opted out",async()=>{d("1.16.0",!1,!0),await p(3,a),expect(C).not.toHaveBeenCalled()})})}),describe("Error cases",()=>{beforeEach(()=>{vi.resetAllMocks()}),it("should return an error if the open app throw an error",async()=>{f(new Error("Open app failed")),d("1.15.0",!1,!1);const e=new v({input:{derivationPath:"44'/60'/0'/0/0",transaction:n,options:s,contextModule:o,mapper:i,parser:c}});vi.spyOn(e,"extractDependencies").mockReturnValue(l()),a=e._execute(r).observable;const t=await k(a);expect(t).toEqual({status:x.Error,error:new Error("Open app failed")})}),it("should return an error if the get app config return an error",async()=>{f(),E.mockResolvedValueOnce(S({error:new A("Get app config failed")}));const e=new v({input:{derivationPath:"44'/60'/0'/0/0",transaction:n,options:s,contextModule:o,mapper:i,parser:c}});vi.spyOn(e,"extractDependencies").mockReturnValue(l()),a=e._execute(r).observable;const t=await k(a);expect(t).toEqual({status:x.Error,error:new A("Get app config failed")})}),it("should return an error if the get app config throw an error",async()=>{f(),E.mockRejectedValueOnce(new Error("Get app config failed"));const e=new v({input:{derivationPath:"44'/60'/0'/0/0",transaction:n,options:s,contextModule:o,mapper:i,parser:c}});vi.spyOn(e,"extractDependencies").mockReturnValue(l()),a=e._execute(r).observable;const t=await k(a);expect(t).toEqual({status:x.Error,error:new Error("Get app config failed")})}),it("should ignore the web3checks result if the command fails",async()=>{f(),d("1.16.0",!1,!1);const e=new v({input:{derivationPath:"44'/60'/0'/0/0",transaction:n,options:s,contextModule:o,mapper:i,parser:c}});vi.spyOn(e,"extractDependencies").mockReturnValue(l()),C.mockResolvedValueOnce(S({error:new A("web3 check opt in failed")})),m.mockResolvedValueOnce({subset:O,type:w.EIP1559}),g.mockResolvedValueOnce({clearSignContexts:[],clearSignContextsOptional:[],clearSigningType:T.BASIC}),h.mockResolvedValueOnce(S({data:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}})),a=e._execute(r).observable;const t=await k(a);expect(t).toEqual({status:x.Completed,output:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}})}),it("should return an error if the parse transaction throw an error",async()=>{f(),d("1.15.0",!1,!1);const e=new v({input:{derivationPath:"44'/60'/0'/0/0",transaction:n,options:s,contextModule:o,mapper:i,parser:c}});vi.spyOn(e,"extractDependencies").mockReturnValue(l()),m.mockRejectedValueOnce(new Error("Parse transaction failed")),a=e._execute(r).observable;const t=await k(a);expect(t).toEqual({status:x.Error,error:new Error("Parse transaction failed")})}),it("should blind sign if the build contexts fails",async()=>{}),it("should blind sign if the provide contexts fails",async()=>{}),it("should return an error if the sign transaction fails",async()=>{f(),d("1.15.0",!1,!1);const e=new v({input:{derivationPath:"44'/60'/0'/0/0",transaction:n,options:s,contextModule:o,mapper:i,parser:c}});vi.spyOn(e,"extractDependencies").mockReturnValue(l()),m.mockResolvedValueOnce({subset:O,type:w.EIP1559}),g.mockResolvedValueOnce({clearSignContexts:[],clearSignContextsOptional:[],clearSigningType:T.BASIC}),y.mockResolvedValueOnce(V(void 0)),h.mockRejectedValueOnce(new Error("Sign transaction failed")),a=e._execute(r).observable;const t=await k(a);expect(t).toEqual({status:x.Error,error:new Error("Sign transaction failed")})}),it("should return an error if the sign transaction return an error",async()=>{f(),d("1.15.0",!1,!1);const e=new v({input:{derivationPath:"44'/60'/0'/0/0",transaction:n,options:s,contextModule:o,mapper:i,parser:c}});vi.spyOn(e,"extractDependencies").mockReturnValue(l()),m.mockResolvedValueOnce({subset:O,type:w.EIP1559}),g.mockResolvedValueOnce({clearSignContexts:[],clearSignContextsOptional:[],clearSigningType:T.BASIC}),y.mockResolvedValueOnce(V(void 0)),h.mockResolvedValueOnce(S({error:new A("Sign transaction failed")})),a=e._execute(r).observable;const t=await k(a);expect(t).toEqual({status:x.Error,error:new A("Sign transaction failed")})})})});
1
+ import{ClearSignContextType as M}from"@ledgerhq/context-module";import{CommandResultFactory as d,DeviceActionStatus as g,DeviceModelId as I,DeviceSessionStateType as B,DeviceStatus as D,hexaStringToBuffer as _,InvalidStatusWordError as T,UserInteractionRequired as N}from"@ledgerhq/device-management-kit";import{Transaction as H}from"ethers";import{Just as E}from"purify-ts";import{lastValueFrom as k}from"rxjs";import{SignTransactionDAStep as w}from"../../../../api/app-binder/SignTransactionDeviceActionTypes";import{ClearSigningType as x}from"../../../../api/model/ClearSigningType";import{TransactionType as b}from"../../../../api/model/TransactionType";import{makeDeviceActionInternalApiMock as W}from"../../../app-binder/device-action/__test-utils__/makeInternalApi";import{setupOpenAppDAMock as f}from"../../../app-binder/device-action/__test-utils__/setupOpenAppDAMock";import{executeUntilStep as S}from"../../../app-binder/device-action/__test-utils__/testDeviceActionUntilStep";import{SignTransactionDeviceAction as v}from"./SignTransactionDeviceAction";vi.mock("@ledgerhq/device-management-kit",async a=>({...await a(),OpenAppDeviceAction:vi.fn(()=>({makeStateMachine:vi.fn()}))}));describe("SignTransactionDeviceAction",()=>{let a;const i={getFieldContext:vi.fn(),getContexts:vi.fn(),getTypedDataFilters:vi.fn(),getWeb3Checks:vi.fn(),getSolanaContext:vi.fn()},c={mapTransactionToSubset:vi.fn()},s={extractValue:vi.fn()},A=vi.fn(),V=vi.fn(),m=vi.fn(),h=vi.fn(),C=vi.fn(),n=vi.fn();function p(){return{getAppConfig:A,web3CheckOptIn:V,parseTransaction:m,buildContexts:h,provideContexts:C,signTransaction:n}}const r=W(),l={domain:"domain-name.eth"},o=_(H.from({chainId:1n,nonce:0,data:"0x"}).unsignedSerialized),O={chainId:1,data:"0x",selector:"0x",to:"0x",value:0n};function P(e,t,R){return{blindSigningEnabled:!1,web3ChecksEnabled:t,web3ChecksOptIn:R,version:e}}function u(e,t,R){r.getDeviceSessionState.mockReturnValueOnce({sessionStateType:B.ReadyWithoutSecureChannel,deviceStatus:D.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:e},deviceModelId:I.FLEX,isSecureConnectionAllowed:!1}),r.getDeviceModel.mockReturnValueOnce({id:I.FLEX}),A.mockResolvedValue(d({data:P(e,t,R)}))}const y=(e,t)=>{if(e[t]?.status!==g.Pending)throw new Error(`Step ${t} is not pending: ${JSON.stringify(e[t])}`);return e[t]};describe("Happy path",()=>{describe("should sign a transaction",()=>{const e=[{context:{type:M.TRANSACTION_INFO,payload:"payload-1"},subcontextCallbacks:[]},{context:{type:M.TRANSACTION_FIELD_DESCRIPTION,payload:"payload-2"},subcontextCallbacks:[]}];beforeEach(()=>{vi.resetAllMocks(),f(),u("1.15.0",!1,!1),m.mockResolvedValueOnce({subset:O,type:b.EIP1559}),h.mockResolvedValueOnce({clearSignContexts:e,clearSigningType:x.EIP7730}),C.mockResolvedValueOnce(E(void 0)),n.mockResolvedValueOnce(d({data:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}}));const t=new v({input:{derivationPath:"44'/60'/0'/0/0",transaction:o,options:l,contextModule:i,mapper:c,parser:s}});vi.spyOn(t,"extractDependencies").mockReturnValue(p()),a=t._execute(r).observable}),it("should open the app",async()=>{const{steps:t}=await S(0,a);expect(y(t,0).intermediateValue.step).toBe(w.OPEN_APP)}),it("should confirm open app",async()=>{const{steps:t}=await S(1,a);expect(y(t,1).intermediateValue.requiredUserInteraction).toBe(N.ConfirmOpenApp)}),it("should get app config",async()=>{const{steps:t}=await S(2,a);expect(y(t,2).intermediateValue.step).toBe(w.GET_APP_CONFIG)}),it("should prebuild context",async()=>{const{steps:t}=await S(3,a);expect(y(t,3).intermediateValue.step).toBe(w.PARSE_TRANSACTION),expect(m).toHaveBeenCalledTimes(1),expect(m).toHaveBeenNthCalledWith(1,expect.objectContaining({input:{mapper:c,transaction:o}}))}),it("should build context",async()=>{const{steps:t}=await S(4,a);expect(y(t,4).intermediateValue.step).toBe(w.BUILD_CONTEXTS),expect(h).toHaveBeenCalledTimes(1),expect(h).toHaveBeenNthCalledWith(1,expect.objectContaining({input:{contextModule:i,parser:s,mapper:c,options:l,subset:O,transaction:o,appConfig:P("1.15.0",!1,!1),derivationPath:"44'/60'/0'/0/0",deviceModelId:I.FLEX}}))}),it("should provide context",async()=>{const{steps:t}=await S(5,a);expect(y(t,5).intermediateValue.step).toBe(w.PROVIDE_CONTEXTS),expect(C).toHaveBeenCalledTimes(1),expect(C).toHaveBeenNthCalledWith(1,expect.objectContaining({input:{contexts:e,serializedTransaction:o,derivationPath:"44'/60'/0'/0/0"}}))}),it("should sign transaction",async()=>{const{steps:t}=await S(6,a);expect(y(t,6).intermediateValue.step).toBe(w.SIGN_TRANSACTION),expect(n).toHaveBeenCalledTimes(1),expect(n).toHaveBeenNthCalledWith(1,expect.objectContaining({input:{derivationPath:"44'/60'/0'/0/0",serializedTransaction:o,chainId:1,transactionType:b.EIP1559,clearSigningType:x.EIP7730}}))}),it("should return the signature",async()=>{const t=await k(a);expect(t).toEqual({status:g.Completed,output:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}})})}),describe("should skip open app",()=>{beforeEach(()=>{vi.resetAllMocks(),f(),u("1.15.0",!1,!1);const e=new v({input:{derivationPath:"44'/60'/0'/0/0",transaction:o,options:{...l,skipOpenApp:!0},contextModule:i,mapper:c,parser:s}});m.mockResolvedValueOnce({subset:O,type:b.EIP1559}),h.mockResolvedValueOnce({clearSignContexts:[],clearSignContextsOptional:[],clearSigningType:x.BASIC}),C.mockResolvedValueOnce(E(void 0)),n.mockResolvedValueOnce(d({data:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}})),vi.spyOn(e,"extractDependencies").mockReturnValue(p()),a=e._execute(r).observable}),it("should skip open app and get app config directly",async()=>{const{steps:e}=await S(0,a);expect(y(e,0).intermediateValue.step).toBe(w.GET_APP_CONFIG)})}),describe("should opt in to web3 checks",()=>{beforeEach(()=>{vi.resetAllMocks(),f(),u("1.16.0",!1,!1);const e=new v({input:{derivationPath:"44'/60'/0'/0/0",transaction:o,options:l,contextModule:i,mapper:c,parser:s}});vi.spyOn(e,"extractDependencies").mockReturnValue(p()),V.mockResolvedValueOnce(d({data:{enabled:!0}})),a=e._execute(r).observable}),it("should opt in to web3 checks if app config is supported and not already enabled",async()=>{const{steps:e}=await S(4,a);expect(y(e,3).intermediateValue.step).toBe(w.WEB3_CHECKS_OPT_IN),expect(V).toHaveBeenCalledTimes(1),expect(y(e,4).intermediateValue.step).toBe(w.WEB3_CHECKS_OPT_IN_RESULT),expect(y(e,4).intermediateValue.result).toBe(!0)})}),describe("should not opt in to web3 checks",()=>{beforeEach(()=>{vi.resetAllMocks(),f();const e=new v({input:{derivationPath:"44'/60'/0'/0/0",transaction:o,options:l,contextModule:i,mapper:c,parser:s}});vi.spyOn(e,"extractDependencies").mockReturnValue(p()),a=e._execute(r).observable}),it("should not opt in to web3 checks if app config is not supported",async()=>{u("1.15.0",!1,!1),await S(3,a),expect(V).not.toHaveBeenCalled()}),it("should not opt in to web3 checks if already enabled",async()=>{u("1.16.0",!0,!1),await S(3,a),expect(V).not.toHaveBeenCalled()}),it("should not opt in to web3 checks if already opted out",async()=>{u("1.16.0",!1,!0),await S(3,a),expect(V).not.toHaveBeenCalled()})})}),describe("Error cases",()=>{beforeEach(()=>{vi.resetAllMocks()}),it("should return an error if the open app throw an error",async()=>{f(new Error("Open app failed")),u("1.15.0",!1,!1);const e=new v({input:{derivationPath:"44'/60'/0'/0/0",transaction:o,options:l,contextModule:i,mapper:c,parser:s}});vi.spyOn(e,"extractDependencies").mockReturnValue(p()),a=e._execute(r).observable;const t=await k(a);expect(t).toEqual({status:g.Error,error:new Error("Open app failed")})}),it("should return an error if the get app config return an error",async()=>{f(),A.mockResolvedValueOnce(d({error:new T("Get app config failed")}));const e=new v({input:{derivationPath:"44'/60'/0'/0/0",transaction:o,options:l,contextModule:i,mapper:c,parser:s}});vi.spyOn(e,"extractDependencies").mockReturnValue(p()),a=e._execute(r).observable;const t=await k(a);expect(t).toEqual({status:g.Error,error:new T("Get app config failed")})}),it("should return an error if the get app config throw an error",async()=>{f(),A.mockRejectedValueOnce(new Error("Get app config failed"));const e=new v({input:{derivationPath:"44'/60'/0'/0/0",transaction:o,options:l,contextModule:i,mapper:c,parser:s}});vi.spyOn(e,"extractDependencies").mockReturnValue(p()),a=e._execute(r).observable;const t=await k(a);expect(t).toEqual({status:g.Error,error:new Error("Get app config failed")})}),it("should ignore the web3checks result if the command fails",async()=>{f(),u("1.16.0",!1,!1);const e=new v({input:{derivationPath:"44'/60'/0'/0/0",transaction:o,options:l,contextModule:i,mapper:c,parser:s}});vi.spyOn(e,"extractDependencies").mockReturnValue(p()),V.mockResolvedValueOnce(d({error:new T("web3 check opt in failed")})),m.mockResolvedValueOnce({subset:O,type:b.EIP1559}),h.mockResolvedValueOnce({clearSignContexts:[],clearSignContextsOptional:[],clearSigningType:x.BASIC}),n.mockResolvedValueOnce(d({data:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}})),a=e._execute(r).observable;const t=await k(a);expect(t).toEqual({status:g.Completed,output:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}})}),it("should return an error if the parse transaction throw an error",async()=>{f(),u("1.15.0",!1,!1);const e=new v({input:{derivationPath:"44'/60'/0'/0/0",transaction:o,options:l,contextModule:i,mapper:c,parser:s}});vi.spyOn(e,"extractDependencies").mockReturnValue(p()),m.mockRejectedValueOnce(new Error("Parse transaction failed")),a=e._execute(r).observable;const t=await k(a);expect(t).toEqual({status:g.Error,error:new Error("Parse transaction failed")})}),it("should blind sign if the first sign transaction fails and the second sign transaction succeeds",async()=>{f(),u("1.15.0",!1,!1);const e=new v({input:{derivationPath:"44'/60'/0'/0/0",transaction:o,options:l,contextModule:i,mapper:c,parser:s}});vi.spyOn(e,"extractDependencies").mockReturnValue(p()),m.mockResolvedValueOnce({subset:O,type:b.EIP1559}),h.mockResolvedValueOnce({clearSignContexts:[],clearSignContextsOptional:[],clearSigningType:x.BASIC}),C.mockResolvedValueOnce(E(void 0)),n.mockResolvedValueOnce(d({error:new T("Sign transaction failed")})),n.mockResolvedValueOnce(d({data:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad789",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}})),a=e._execute(r).observable;const t=await k(a);expect(t).toEqual({status:g.Completed,output:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad789",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}})}),it("should blind sign if the first sign transaction throws an error and the second sign transaction succeeds",async()=>{f(),u("1.15.0",!1,!1);const e=new v({input:{derivationPath:"44'/60'/0'/0/0",transaction:o,options:l,contextModule:i,mapper:c,parser:s}});vi.spyOn(e,"extractDependencies").mockReturnValue(p()),m.mockResolvedValueOnce({subset:O,type:b.EIP1559}),h.mockResolvedValueOnce({clearSignContexts:[],clearSignContextsOptional:[],clearSigningType:x.EIP7730}),C.mockResolvedValueOnce(E(void 0)),n.mockRejectedValueOnce(new Error("Sign transaction failed")),n.mockResolvedValueOnce(d({data:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad789",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}})),a=e._execute(r).observable;const t=await k(a);expect(t).toEqual({status:g.Completed,output:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad789",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}}),expect(n).toHaveBeenCalledTimes(2),expect(n).toHaveBeenNthCalledWith(1,expect.objectContaining({input:{derivationPath:"44'/60'/0'/0/0",serializedTransaction:o,chainId:1,transactionType:b.EIP1559,clearSigningType:x.EIP7730}})),expect(n).toHaveBeenNthCalledWith(2,expect.objectContaining({input:{derivationPath:"44'/60'/0'/0/0",serializedTransaction:o,chainId:1,transactionType:b.EIP1559,clearSigningType:x.BASIC}}))}),it("should return an error if the sign transaction return two times an error",async()=>{f(),u("1.15.0",!1,!1);const e=new v({input:{derivationPath:"44'/60'/0'/0/0",transaction:o,options:l,contextModule:i,mapper:c,parser:s}});vi.spyOn(e,"extractDependencies").mockReturnValue(p()),m.mockResolvedValueOnce({subset:O,type:b.EIP1559}),h.mockResolvedValueOnce({clearSignContexts:[],clearSignContextsOptional:[],clearSigningType:x.BASIC}),C.mockResolvedValueOnce(E(void 0)),n.mockResolvedValueOnce(d({error:new T("Sign transaction failed")})),n.mockResolvedValueOnce(d({error:new T("Blind sign transaction failed")})),a=e._execute(r).observable;const t=await k(a);expect(t).toEqual({status:g.Error,error:new T("Blind sign transaction failed")})}),it("should return an error if the blind sign transaction fallback throws an error",async()=>{f(),u("1.15.0",!1,!1);const e=new v({input:{derivationPath:"44'/60'/0'/0/0",transaction:o,options:l,contextModule:i,mapper:c,parser:s}});vi.spyOn(e,"extractDependencies").mockReturnValue(p()),m.mockResolvedValueOnce({subset:O,type:b.EIP1559}),h.mockResolvedValueOnce({clearSignContexts:[],clearSignContextsOptional:[],clearSigningType:x.BASIC}),C.mockResolvedValueOnce(E(void 0)),n.mockResolvedValueOnce(d({error:new T("Sign transaction failed")})),n.mockRejectedValueOnce(new Error("Blind sign transaction fallback failed")),a=e._execute(r).observable;const t=await k(a);expect(t).toEqual({status:g.Error,error:new Error("Blind sign transaction fallback failed")})}),it("should return an error without trying blind sign fallback when user refuses transaction (error code 6985)",async()=>{f(),u("1.15.0",!1,!1);const e=new v({input:{derivationPath:"44'/60'/0'/0/0",transaction:o,options:l,contextModule:i,mapper:c,parser:s}});vi.spyOn(e,"extractDependencies").mockReturnValue(p()),m.mockResolvedValueOnce({subset:O,type:b.EIP1559}),h.mockResolvedValueOnce({clearSignContexts:[],clearSignContextsOptional:[],clearSigningType:x.BASIC}),C.mockResolvedValueOnce(E(void 0));const t=new T("User refused transaction");t.errorCode="6985",n.mockResolvedValueOnce(d({error:t})),a=e._execute(r).observable;const R=await k(a);expect(R).toEqual({status:g.Error,error:t}),expect(n).toHaveBeenCalledTimes(1)}),it("should try blind sign fallback when error is not user refusal (different error code)",async()=>{f(),u("1.15.0",!1,!1);const e=new v({input:{derivationPath:"44'/60'/0'/0/0",transaction:o,options:l,contextModule:i,mapper:c,parser:s}});vi.spyOn(e,"extractDependencies").mockReturnValue(p()),m.mockResolvedValueOnce({subset:O,type:b.EIP1559}),h.mockResolvedValueOnce({clearSignContexts:[],clearSignContextsOptional:[],clearSigningType:x.EIP7730}),C.mockResolvedValueOnce(E(void 0));const t=new T("Some other error");t.errorCode="6A80",n.mockResolvedValueOnce(d({error:t})),n.mockResolvedValueOnce(d({data:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad789",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}})),a=e._execute(r).observable;const R=await k(a);expect(R).toEqual({status:g.Completed,output:{v:28,r:"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad789",s:"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513"}}),expect(n).toHaveBeenCalledTimes(2),expect(n).toHaveBeenNthCalledWith(1,expect.objectContaining({input:{derivationPath:"44'/60'/0'/0/0",serializedTransaction:o,chainId:1,transactionType:b.EIP1559,clearSigningType:x.EIP7730}})),expect(n).toHaveBeenNthCalledWith(2,expect.objectContaining({input:{derivationPath:"44'/60'/0'/0/0",serializedTransaction:o,chainId:1,transactionType:b.EIP1559,clearSigningType:x.BASIC}}))})})});
2
2
  //# sourceMappingURL=SignTransactionDeviceAction.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.ts"],
4
- "sourcesContent": ["/* eslint @typescript-eslint/consistent-type-imports: 0 */\nimport {\n ClearSignContextType,\n type ContextModule,\n TransactionSubset,\n} from \"@ledgerhq/context-module\";\nimport {\n CommandResultFactory,\n DeviceActionState,\n DeviceActionStatus,\n DeviceModelId,\n DeviceSessionStateType,\n DeviceStatus,\n hexaStringToBuffer,\n InvalidStatusWordError,\n TransportDeviceModel,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { Transaction } from \"ethers\";\nimport { Just } from \"purify-ts\";\nimport { lastValueFrom, Observable } from \"rxjs\";\n\nimport {\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n type SignTransactionDAState,\n SignTransactionDAStep,\n} from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { Signature } from \"@api/index\";\nimport { ClearSigningType } from \"@api/model/ClearSigningType\";\nimport { TransactionType } from \"@api/model/TransactionType\";\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\nimport { setupOpenAppDAMock } from \"@internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock\";\nimport { executeUntilStep } from \"@internal/app-binder/device-action/__test-utils__/testDeviceActionUntilStep\";\nimport { ContextWithSubContexts } from \"@internal/app-binder/task/BuildFullContextsTask\";\nimport { type TransactionMapperService } from \"@internal/transaction/service/mapper/TransactionMapperService\";\nimport { type TransactionParserService } from \"@internal/transaction/service/parser/TransactionParserService\";\n\nimport { SignTransactionDeviceAction } from \"./SignTransactionDeviceAction\";\n\nvi.mock(\"@ledgerhq/device-management-kit\", async (importOriginal) => {\n const original =\n await importOriginal<typeof import(\"@ledgerhq/device-management-kit\")>();\n return {\n ...original,\n OpenAppDeviceAction: vi.fn(() => ({\n makeStateMachine: vi.fn(),\n })),\n };\n});\n\ndescribe(\"SignTransactionDeviceAction\", () => {\n let observable: Observable<\n DeviceActionState<\n Signature,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >\n >;\n const contextModuleMock: ContextModule = {\n getFieldContext: vi.fn(),\n getContexts: vi.fn(),\n getTypedDataFilters: vi.fn(),\n getWeb3Checks: vi.fn(),\n getSolanaContext: vi.fn(),\n };\n const mapperMock: TransactionMapperService = {\n mapTransactionToSubset: vi.fn(),\n } as unknown as TransactionMapperService;\n const parserMock: TransactionParserService = {\n extractValue: vi.fn(),\n } as unknown as TransactionParserService;\n const getAppConfigMock = vi.fn();\n const web3CheckOptInMock = vi.fn();\n const parseTransactionMock = vi.fn();\n const buildContextsMock = vi.fn();\n const provideContextsMock = vi.fn();\n const signTransactionMock = vi.fn();\n function extractDependenciesMock() {\n return {\n getAppConfig: getAppConfigMock,\n web3CheckOptIn: web3CheckOptInMock,\n parseTransaction: parseTransactionMock,\n buildContexts: buildContextsMock,\n provideContexts: provideContextsMock,\n signTransaction: signTransactionMock,\n };\n }\n const apiMock = makeDeviceActionInternalApiMock();\n const defaultOptions = {\n domain: \"domain-name.eth\",\n };\n const defaultTransaction: Uint8Array = hexaStringToBuffer(\n Transaction.from({\n chainId: 1n,\n nonce: 0,\n data: \"0x\",\n }).unsignedSerialized,\n )!;\n const defaultSubset: TransactionSubset = {\n chainId: 1,\n data: \"0x\",\n selector: \"0x\",\n to: \"0x\",\n value: 0n,\n };\n\n function createAppConfig(\n version: string,\n web3ChecksEnabled: boolean,\n web3ChecksOptIn: boolean,\n ) {\n return {\n blindSigningEnabled: false,\n web3ChecksEnabled,\n web3ChecksOptIn,\n version,\n };\n }\n\n function setupAppConfig(\n version: string,\n web3ChecksEnabled: boolean,\n web3ChecksOptIn: boolean,\n ) {\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n apiMock.getDeviceModel.mockReturnValueOnce({\n id: DeviceModelId.FLEX,\n } as unknown as TransportDeviceModel);\n getAppConfigMock.mockResolvedValue(\n CommandResultFactory({\n data: createAppConfig(version, web3ChecksEnabled, web3ChecksOptIn),\n }),\n );\n }\n\n const getStep = (s: Array<SignTransactionDAState>, index: number) => {\n if (s[index]?.status !== DeviceActionStatus.Pending) {\n throw new Error(\n `Step ${index} is not pending: ${JSON.stringify(s[index])}`,\n );\n }\n return s[index];\n };\n\n describe(\"Happy path\", () => {\n describe(\"should sign a transaction\", () => {\n const contexts: ContextWithSubContexts[] = [\n {\n context: {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"payload-1\",\n },\n subcontextCallbacks: [],\n },\n {\n context: {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload-2\",\n },\n subcontextCallbacks: [],\n },\n ];\n\n beforeEach(() => {\n vi.resetAllMocks();\n setupOpenAppDAMock();\n setupAppConfig(\"1.15.0\", false, false);\n\n // Mock the dependencies to return some sample data\n parseTransactionMock.mockResolvedValueOnce({\n subset: defaultSubset,\n type: TransactionType.EIP1559,\n });\n buildContextsMock.mockResolvedValueOnce({\n clearSignContexts: contexts,\n clearSigningType: ClearSigningType.EIP7730,\n });\n provideContextsMock.mockResolvedValueOnce(Just(void 0));\n signTransactionMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: {\n v: 0x1c,\n r: \"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788\",\n s: \"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513\",\n },\n }),\n );\n\n const deviceAction = new SignTransactionDeviceAction({\n input: {\n derivationPath: \"44'/60'/0'/0/0\",\n transaction: defaultTransaction,\n options: defaultOptions,\n contextModule: contextModuleMock,\n mapper: mapperMock,\n parser: parserMock,\n },\n });\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n\n observable = deviceAction._execute(apiMock).observable;\n });\n\n it(\"should open the app\", async () => {\n const { steps } = await executeUntilStep(0, observable);\n expect(getStep(steps, 0).intermediateValue.step).toBe(\n SignTransactionDAStep.OPEN_APP,\n );\n });\n\n it(\"should confirm open app\", async () => {\n const { steps } = await executeUntilStep(1, observable);\n expect(\n getStep(steps, 1).intermediateValue.requiredUserInteraction,\n ).toBe(UserInteractionRequired.ConfirmOpenApp);\n });\n\n it(\"should get app config\", async () => {\n const { steps } = await executeUntilStep(2, observable);\n expect(getStep(steps, 2).intermediateValue.step).toBe(\n SignTransactionDAStep.GET_APP_CONFIG,\n );\n });\n\n it(\"should prebuild context\", async () => {\n const { steps } = await executeUntilStep(3, observable);\n expect(getStep(steps, 3).intermediateValue.step).toBe(\n SignTransactionDAStep.PARSE_TRANSACTION,\n );\n expect(parseTransactionMock).toHaveBeenCalledTimes(1);\n expect(parseTransactionMock).toHaveBeenNthCalledWith(\n 1,\n expect.objectContaining({\n input: {\n mapper: mapperMock,\n transaction: defaultTransaction,\n },\n }),\n );\n });\n\n it(\"should build context\", async () => {\n const { steps } = await executeUntilStep(4, observable);\n expect(getStep(steps, 4).intermediateValue.step).toBe(\n SignTransactionDAStep.BUILD_CONTEXTS,\n );\n expect(buildContextsMock).toHaveBeenCalledTimes(1);\n expect(buildContextsMock).toHaveBeenNthCalledWith(\n 1,\n expect.objectContaining({\n input: {\n contextModule: contextModuleMock,\n parser: parserMock,\n mapper: mapperMock,\n options: defaultOptions,\n subset: defaultSubset,\n transaction: defaultTransaction,\n appConfig: createAppConfig(\"1.15.0\", false, false),\n derivationPath: \"44'/60'/0'/0/0\",\n deviceModelId: DeviceModelId.FLEX,\n },\n }),\n );\n });\n\n it(\"should provide context\", async () => {\n const { steps } = await executeUntilStep(5, observable);\n expect(getStep(steps, 5).intermediateValue.step).toBe(\n SignTransactionDAStep.PROVIDE_CONTEXTS,\n );\n expect(provideContextsMock).toHaveBeenCalledTimes(1);\n expect(provideContextsMock).toHaveBeenNthCalledWith(\n 1,\n expect.objectContaining({\n input: {\n contexts: contexts,\n serializedTransaction: defaultTransaction,\n derivationPath: \"44'/60'/0'/0/0\",\n },\n }),\n );\n });\n\n it(\"should sign transaction\", async () => {\n const { steps } = await executeUntilStep(6, observable);\n expect(getStep(steps, 6).intermediateValue.step).toBe(\n SignTransactionDAStep.SIGN_TRANSACTION,\n );\n expect(signTransactionMock).toHaveBeenCalledTimes(1);\n expect(signTransactionMock).toHaveBeenNthCalledWith(\n 1,\n expect.objectContaining({\n input: {\n derivationPath: \"44'/60'/0'/0/0\",\n serializedTransaction: defaultTransaction,\n chainId: 1,\n transactionType: TransactionType.EIP1559,\n clearSigningType: ClearSigningType.EIP7730,\n },\n }),\n );\n });\n\n it(\"should return the signature\", async () => {\n const result = await lastValueFrom(observable);\n expect(result).toEqual({\n status: DeviceActionStatus.Completed,\n output: {\n v: 0x1c,\n r: \"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788\",\n s: \"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513\",\n },\n });\n });\n });\n\n describe(\"should skip open app\", () => {\n beforeEach(() => {\n vi.resetAllMocks();\n setupOpenAppDAMock();\n setupAppConfig(\"1.15.0\", false, false);\n\n const deviceAction = new SignTransactionDeviceAction({\n input: {\n derivationPath: \"44'/60'/0'/0/0\",\n transaction: defaultTransaction,\n options: { ...defaultOptions, skipOpenApp: true },\n contextModule: contextModuleMock,\n mapper: mapperMock,\n parser: parserMock,\n },\n });\n parseTransactionMock.mockResolvedValueOnce({\n subset: defaultSubset,\n type: TransactionType.EIP1559,\n });\n buildContextsMock.mockResolvedValueOnce({\n clearSignContexts: [],\n clearSignContextsOptional: [],\n clearSigningType: ClearSigningType.BASIC,\n });\n provideContextsMock.mockResolvedValueOnce(Just(void 0));\n signTransactionMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: {\n v: 0x1c,\n r: \"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788\",\n s: \"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513\",\n },\n }),\n );\n\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n\n observable = deviceAction._execute(apiMock).observable;\n });\n\n it(\"should skip open app and get app config directly\", async () => {\n const { steps } = await executeUntilStep(0, observable);\n\n expect(getStep(steps, 0).intermediateValue.step).toBe(\n SignTransactionDAStep.GET_APP_CONFIG,\n );\n });\n });\n\n describe(\"should opt in to web3 checks\", () => {\n beforeEach(() => {\n vi.resetAllMocks();\n setupOpenAppDAMock();\n setupAppConfig(\"1.16.0\", false, false);\n\n const deviceAction = new SignTransactionDeviceAction({\n input: {\n derivationPath: \"44'/60'/0'/0/0\",\n transaction: defaultTransaction,\n options: defaultOptions,\n contextModule: contextModuleMock,\n mapper: mapperMock,\n parser: parserMock,\n },\n });\n\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n web3CheckOptInMock.mockResolvedValueOnce(\n CommandResultFactory({ data: { enabled: true } }),\n );\n\n observable = deviceAction._execute(apiMock).observable;\n });\n\n it(\"should opt in to web3 checks if app config is supported and not already enabled\", async () => {\n const { steps } = await executeUntilStep(4, observable);\n\n expect(getStep(steps, 3).intermediateValue.step).toBe(\n SignTransactionDAStep.WEB3_CHECKS_OPT_IN,\n );\n expect(web3CheckOptInMock).toHaveBeenCalledTimes(1);\n\n expect(getStep(steps, 4).intermediateValue.step).toBe(\n SignTransactionDAStep.WEB3_CHECKS_OPT_IN_RESULT,\n );\n // @ts-expect-error - result is not typed\n expect(getStep(steps, 4).intermediateValue.result).toBe(true);\n });\n });\n\n describe(\"should not opt in to web3 checks\", () => {\n beforeEach(() => {\n vi.resetAllMocks();\n setupOpenAppDAMock();\n\n const deviceAction = new SignTransactionDeviceAction({\n input: {\n derivationPath: \"44'/60'/0'/0/0\",\n transaction: defaultTransaction,\n options: defaultOptions,\n contextModule: contextModuleMock,\n mapper: mapperMock,\n parser: parserMock,\n },\n });\n\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n\n observable = deviceAction._execute(apiMock).observable;\n });\n\n it(\"should not opt in to web3 checks if app config is not supported\", async () => {\n setupAppConfig(\"1.15.0\", false, false);\n await executeUntilStep(3, observable);\n expect(web3CheckOptInMock).not.toHaveBeenCalled();\n });\n\n it(\"should not opt in to web3 checks if already enabled\", async () => {\n setupAppConfig(\"1.16.0\", true, false);\n await executeUntilStep(3, observable);\n expect(web3CheckOptInMock).not.toHaveBeenCalled();\n });\n\n it(\"should not opt in to web3 checks if already opted out\", async () => {\n setupAppConfig(\"1.16.0\", false, true);\n await executeUntilStep(3, observable);\n expect(web3CheckOptInMock).not.toHaveBeenCalled();\n });\n });\n });\n\n describe(\"Error cases\", () => {\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n it(\"should return an error if the open app throw an error\", async () => {\n // GIVEN\n setupOpenAppDAMock(new Error(\"Open app failed\"));\n setupAppConfig(\"1.15.0\", false, false);\n const deviceAction = new SignTransactionDeviceAction({\n input: {\n derivationPath: \"44'/60'/0'/0/0\",\n transaction: defaultTransaction,\n options: defaultOptions,\n contextModule: contextModuleMock,\n mapper: mapperMock,\n parser: parserMock,\n },\n });\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n observable = deviceAction._execute(apiMock).observable;\n\n // WHEN\n const result = await lastValueFrom(observable);\n\n // THEN\n expect(result).toEqual({\n status: DeviceActionStatus.Error,\n error: new Error(\"Open app failed\"),\n });\n });\n\n it(\"should return an error if the get app config return an error\", async () => {\n // GIVEN\n setupOpenAppDAMock();\n getAppConfigMock.mockResolvedValueOnce(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"Get app config failed\"),\n }),\n );\n const deviceAction = new SignTransactionDeviceAction({\n input: {\n derivationPath: \"44'/60'/0'/0/0\",\n transaction: defaultTransaction,\n options: defaultOptions,\n contextModule: contextModuleMock,\n mapper: mapperMock,\n parser: parserMock,\n },\n });\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n observable = deviceAction._execute(apiMock).observable;\n\n // WHEN\n const result = await lastValueFrom(observable);\n\n // THEN\n expect(result).toEqual({\n status: DeviceActionStatus.Error,\n error: new InvalidStatusWordError(\"Get app config failed\"),\n });\n });\n\n it(\"should return an error if the get app config throw an error\", async () => {\n // GIVEN\n setupOpenAppDAMock();\n getAppConfigMock.mockRejectedValueOnce(\n new Error(\"Get app config failed\"),\n );\n const deviceAction = new SignTransactionDeviceAction({\n input: {\n derivationPath: \"44'/60'/0'/0/0\",\n transaction: defaultTransaction,\n options: defaultOptions,\n contextModule: contextModuleMock,\n mapper: mapperMock,\n parser: parserMock,\n },\n });\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n observable = deviceAction._execute(apiMock).observable;\n\n // WHEN\n const result = await lastValueFrom(observable);\n\n // THEN\n expect(result).toEqual({\n status: DeviceActionStatus.Error,\n error: new Error(\"Get app config failed\"),\n });\n });\n\n it(\"should ignore the web3checks result if the command fails\", async () => {\n setupOpenAppDAMock();\n setupAppConfig(\"1.16.0\", false, false);\n const deviceAction = new SignTransactionDeviceAction({\n input: {\n derivationPath: \"44'/60'/0'/0/0\",\n transaction: defaultTransaction,\n options: defaultOptions,\n contextModule: contextModuleMock,\n mapper: mapperMock,\n parser: parserMock,\n },\n });\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n web3CheckOptInMock.mockResolvedValueOnce(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"web3 check opt in failed\"),\n }),\n );\n parseTransactionMock.mockResolvedValueOnce({\n subset: defaultSubset,\n type: TransactionType.EIP1559,\n });\n buildContextsMock.mockResolvedValueOnce({\n clearSignContexts: [],\n clearSignContextsOptional: [],\n clearSigningType: ClearSigningType.BASIC,\n });\n signTransactionMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: {\n v: 0x1c,\n r: \"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788\",\n s: \"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513\",\n },\n }),\n );\n observable = deviceAction._execute(apiMock).observable;\n\n // WHEN\n const result = await lastValueFrom(observable);\n\n // THEN\n expect(result).toEqual({\n status: DeviceActionStatus.Completed,\n output: {\n v: 0x1c,\n r: \"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788\",\n s: \"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513\",\n },\n });\n });\n\n it(\"should return an error if the parse transaction throw an error\", async () => {\n setupOpenAppDAMock();\n setupAppConfig(\"1.15.0\", false, false);\n const deviceAction = new SignTransactionDeviceAction({\n input: {\n derivationPath: \"44'/60'/0'/0/0\",\n transaction: defaultTransaction,\n options: defaultOptions,\n contextModule: contextModuleMock,\n mapper: mapperMock,\n parser: parserMock,\n },\n });\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n parseTransactionMock.mockRejectedValueOnce(\n new Error(\"Parse transaction failed\"),\n );\n observable = deviceAction._execute(apiMock).observable;\n\n // WHEN\n const result = await lastValueFrom(observable);\n\n // THEN\n expect(result).toEqual({\n status: DeviceActionStatus.Error,\n error: new Error(\"Parse transaction failed\"),\n });\n });\n\n it(\"should blind sign if the build contexts fails\", async () => {\n // TODO: implement this test\n });\n\n it(\"should blind sign if the provide contexts fails\", async () => {\n // TODO: implement this test\n });\n\n it(\"should return an error if the sign transaction fails\", async () => {\n setupOpenAppDAMock();\n setupAppConfig(\"1.15.0\", false, false);\n const deviceAction = new SignTransactionDeviceAction({\n input: {\n derivationPath: \"44'/60'/0'/0/0\",\n transaction: defaultTransaction,\n options: defaultOptions,\n contextModule: contextModuleMock,\n mapper: mapperMock,\n parser: parserMock,\n },\n });\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n parseTransactionMock.mockResolvedValueOnce({\n subset: defaultSubset,\n type: TransactionType.EIP1559,\n });\n buildContextsMock.mockResolvedValueOnce({\n clearSignContexts: [],\n clearSignContextsOptional: [],\n clearSigningType: ClearSigningType.BASIC,\n });\n provideContextsMock.mockResolvedValueOnce(Just(void 0));\n signTransactionMock.mockRejectedValueOnce(\n new Error(\"Sign transaction failed\"),\n );\n observable = deviceAction._execute(apiMock).observable;\n\n // WHEN\n const result = await lastValueFrom(observable);\n\n // THEN\n expect(result).toEqual({\n status: DeviceActionStatus.Error,\n error: new Error(\"Sign transaction failed\"),\n });\n });\n\n it(\"should return an error if the sign transaction return an error\", async () => {\n setupOpenAppDAMock();\n setupAppConfig(\"1.15.0\", false, false);\n const deviceAction = new SignTransactionDeviceAction({\n input: {\n derivationPath: \"44'/60'/0'/0/0\",\n transaction: defaultTransaction,\n options: defaultOptions,\n contextModule: contextModuleMock,\n mapper: mapperMock,\n parser: parserMock,\n },\n });\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n parseTransactionMock.mockResolvedValueOnce({\n subset: defaultSubset,\n type: TransactionType.EIP1559,\n });\n buildContextsMock.mockResolvedValueOnce({\n clearSignContexts: [],\n clearSignContextsOptional: [],\n clearSigningType: ClearSigningType.BASIC,\n });\n provideContextsMock.mockResolvedValueOnce(Just(void 0));\n signTransactionMock.mockResolvedValueOnce(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"Sign transaction failed\"),\n }),\n );\n observable = deviceAction._execute(apiMock).observable;\n\n // WHEN\n const result = await lastValueFrom(observable);\n\n // THEN\n expect(result).toEqual({\n status: DeviceActionStatus.Error,\n error: new InvalidStatusWordError(\"Sign transaction failed\"),\n });\n });\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["ClearSignContextType", "CommandResultFactory", "DeviceActionStatus", "DeviceModelId", "DeviceSessionStateType", "DeviceStatus", "hexaStringToBuffer", "InvalidStatusWordError", "UserInteractionRequired", "Transaction", "Just", "lastValueFrom", "SignTransactionDAStep", "ClearSigningType", "TransactionType", "makeDeviceActionInternalApiMock", "setupOpenAppDAMock", "executeUntilStep", "SignTransactionDeviceAction", "importOriginal", "observable", "contextModuleMock", "mapperMock", "parserMock", "getAppConfigMock", "web3CheckOptInMock", "parseTransactionMock", "buildContextsMock", "provideContextsMock", "signTransactionMock", "extractDependenciesMock", "apiMock", "defaultOptions", "defaultTransaction", "defaultSubset", "createAppConfig", "version", "web3ChecksEnabled", "web3ChecksOptIn", "setupAppConfig", "getStep", "s", "index", "contexts", "deviceAction", "steps", "result"]
4
+ "sourcesContent": ["/* eslint @typescript-eslint/consistent-type-imports: 0 */\nimport {\n ClearSignContextType,\n type ContextModule,\n TransactionSubset,\n} from \"@ledgerhq/context-module\";\nimport {\n CommandResultFactory,\n DeviceActionState,\n DeviceActionStatus,\n DeviceModelId,\n DeviceSessionStateType,\n DeviceStatus,\n hexaStringToBuffer,\n InvalidStatusWordError,\n TransportDeviceModel,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { Transaction } from \"ethers\";\nimport { Just } from \"purify-ts\";\nimport { lastValueFrom, Observable } from \"rxjs\";\n\nimport {\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n type SignTransactionDAState,\n SignTransactionDAStep,\n} from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { Signature } from \"@api/index\";\nimport { ClearSigningType } from \"@api/model/ClearSigningType\";\nimport { TransactionType } from \"@api/model/TransactionType\";\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\nimport { setupOpenAppDAMock } from \"@internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock\";\nimport { executeUntilStep } from \"@internal/app-binder/device-action/__test-utils__/testDeviceActionUntilStep\";\nimport { ContextWithSubContexts } from \"@internal/app-binder/task/BuildFullContextsTask\";\nimport { type TransactionMapperService } from \"@internal/transaction/service/mapper/TransactionMapperService\";\nimport { type TransactionParserService } from \"@internal/transaction/service/parser/TransactionParserService\";\n\nimport { SignTransactionDeviceAction } from \"./SignTransactionDeviceAction\";\n\nvi.mock(\"@ledgerhq/device-management-kit\", async (importOriginal) => {\n const original =\n await importOriginal<typeof import(\"@ledgerhq/device-management-kit\")>();\n return {\n ...original,\n OpenAppDeviceAction: vi.fn(() => ({\n makeStateMachine: vi.fn(),\n })),\n };\n});\n\ndescribe(\"SignTransactionDeviceAction\", () => {\n let observable: Observable<\n DeviceActionState<\n Signature,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >\n >;\n const contextModuleMock: ContextModule = {\n getFieldContext: vi.fn(),\n getContexts: vi.fn(),\n getTypedDataFilters: vi.fn(),\n getWeb3Checks: vi.fn(),\n getSolanaContext: vi.fn(),\n };\n const mapperMock: TransactionMapperService = {\n mapTransactionToSubset: vi.fn(),\n } as unknown as TransactionMapperService;\n const parserMock: TransactionParserService = {\n extractValue: vi.fn(),\n } as unknown as TransactionParserService;\n const getAppConfigMock = vi.fn();\n const web3CheckOptInMock = vi.fn();\n const parseTransactionMock = vi.fn();\n const buildContextsMock = vi.fn();\n const provideContextsMock = vi.fn();\n const signTransactionMock = vi.fn();\n function extractDependenciesMock() {\n return {\n getAppConfig: getAppConfigMock,\n web3CheckOptIn: web3CheckOptInMock,\n parseTransaction: parseTransactionMock,\n buildContexts: buildContextsMock,\n provideContexts: provideContextsMock,\n signTransaction: signTransactionMock,\n };\n }\n const apiMock = makeDeviceActionInternalApiMock();\n const defaultOptions = {\n domain: \"domain-name.eth\",\n };\n const defaultTransaction: Uint8Array = hexaStringToBuffer(\n Transaction.from({\n chainId: 1n,\n nonce: 0,\n data: \"0x\",\n }).unsignedSerialized,\n )!;\n const defaultSubset: TransactionSubset = {\n chainId: 1,\n data: \"0x\",\n selector: \"0x\",\n to: \"0x\",\n value: 0n,\n };\n\n function createAppConfig(\n version: string,\n web3ChecksEnabled: boolean,\n web3ChecksOptIn: boolean,\n ) {\n return {\n blindSigningEnabled: false,\n web3ChecksEnabled,\n web3ChecksOptIn,\n version,\n };\n }\n\n function setupAppConfig(\n version: string,\n web3ChecksEnabled: boolean,\n web3ChecksOptIn: boolean,\n ) {\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n apiMock.getDeviceModel.mockReturnValueOnce({\n id: DeviceModelId.FLEX,\n } as unknown as TransportDeviceModel);\n getAppConfigMock.mockResolvedValue(\n CommandResultFactory({\n data: createAppConfig(version, web3ChecksEnabled, web3ChecksOptIn),\n }),\n );\n }\n\n const getStep = (s: Array<SignTransactionDAState>, index: number) => {\n if (s[index]?.status !== DeviceActionStatus.Pending) {\n throw new Error(\n `Step ${index} is not pending: ${JSON.stringify(s[index])}`,\n );\n }\n return s[index];\n };\n\n describe(\"Happy path\", () => {\n describe(\"should sign a transaction\", () => {\n const contexts: ContextWithSubContexts[] = [\n {\n context: {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"payload-1\",\n },\n subcontextCallbacks: [],\n },\n {\n context: {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload-2\",\n },\n subcontextCallbacks: [],\n },\n ];\n\n beforeEach(() => {\n vi.resetAllMocks();\n setupOpenAppDAMock();\n setupAppConfig(\"1.15.0\", false, false);\n\n // Mock the dependencies to return some sample data\n parseTransactionMock.mockResolvedValueOnce({\n subset: defaultSubset,\n type: TransactionType.EIP1559,\n });\n buildContextsMock.mockResolvedValueOnce({\n clearSignContexts: contexts,\n clearSigningType: ClearSigningType.EIP7730,\n });\n provideContextsMock.mockResolvedValueOnce(Just(void 0));\n signTransactionMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: {\n v: 0x1c,\n r: \"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788\",\n s: \"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513\",\n },\n }),\n );\n\n const deviceAction = new SignTransactionDeviceAction({\n input: {\n derivationPath: \"44'/60'/0'/0/0\",\n transaction: defaultTransaction,\n options: defaultOptions,\n contextModule: contextModuleMock,\n mapper: mapperMock,\n parser: parserMock,\n },\n });\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n\n observable = deviceAction._execute(apiMock).observable;\n });\n\n it(\"should open the app\", async () => {\n const { steps } = await executeUntilStep(0, observable);\n expect(getStep(steps, 0).intermediateValue.step).toBe(\n SignTransactionDAStep.OPEN_APP,\n );\n });\n\n it(\"should confirm open app\", async () => {\n const { steps } = await executeUntilStep(1, observable);\n expect(\n getStep(steps, 1).intermediateValue.requiredUserInteraction,\n ).toBe(UserInteractionRequired.ConfirmOpenApp);\n });\n\n it(\"should get app config\", async () => {\n const { steps } = await executeUntilStep(2, observable);\n expect(getStep(steps, 2).intermediateValue.step).toBe(\n SignTransactionDAStep.GET_APP_CONFIG,\n );\n });\n\n it(\"should prebuild context\", async () => {\n const { steps } = await executeUntilStep(3, observable);\n expect(getStep(steps, 3).intermediateValue.step).toBe(\n SignTransactionDAStep.PARSE_TRANSACTION,\n );\n expect(parseTransactionMock).toHaveBeenCalledTimes(1);\n expect(parseTransactionMock).toHaveBeenNthCalledWith(\n 1,\n expect.objectContaining({\n input: {\n mapper: mapperMock,\n transaction: defaultTransaction,\n },\n }),\n );\n });\n\n it(\"should build context\", async () => {\n const { steps } = await executeUntilStep(4, observable);\n expect(getStep(steps, 4).intermediateValue.step).toBe(\n SignTransactionDAStep.BUILD_CONTEXTS,\n );\n expect(buildContextsMock).toHaveBeenCalledTimes(1);\n expect(buildContextsMock).toHaveBeenNthCalledWith(\n 1,\n expect.objectContaining({\n input: {\n contextModule: contextModuleMock,\n parser: parserMock,\n mapper: mapperMock,\n options: defaultOptions,\n subset: defaultSubset,\n transaction: defaultTransaction,\n appConfig: createAppConfig(\"1.15.0\", false, false),\n derivationPath: \"44'/60'/0'/0/0\",\n deviceModelId: DeviceModelId.FLEX,\n },\n }),\n );\n });\n\n it(\"should provide context\", async () => {\n const { steps } = await executeUntilStep(5, observable);\n expect(getStep(steps, 5).intermediateValue.step).toBe(\n SignTransactionDAStep.PROVIDE_CONTEXTS,\n );\n expect(provideContextsMock).toHaveBeenCalledTimes(1);\n expect(provideContextsMock).toHaveBeenNthCalledWith(\n 1,\n expect.objectContaining({\n input: {\n contexts: contexts,\n serializedTransaction: defaultTransaction,\n derivationPath: \"44'/60'/0'/0/0\",\n },\n }),\n );\n });\n\n it(\"should sign transaction\", async () => {\n const { steps } = await executeUntilStep(6, observable);\n expect(getStep(steps, 6).intermediateValue.step).toBe(\n SignTransactionDAStep.SIGN_TRANSACTION,\n );\n expect(signTransactionMock).toHaveBeenCalledTimes(1);\n expect(signTransactionMock).toHaveBeenNthCalledWith(\n 1,\n expect.objectContaining({\n input: {\n derivationPath: \"44'/60'/0'/0/0\",\n serializedTransaction: defaultTransaction,\n chainId: 1,\n transactionType: TransactionType.EIP1559,\n clearSigningType: ClearSigningType.EIP7730,\n },\n }),\n );\n });\n\n it(\"should return the signature\", async () => {\n const result = await lastValueFrom(observable);\n expect(result).toEqual({\n status: DeviceActionStatus.Completed,\n output: {\n v: 0x1c,\n r: \"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788\",\n s: \"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513\",\n },\n });\n });\n });\n\n describe(\"should skip open app\", () => {\n beforeEach(() => {\n vi.resetAllMocks();\n setupOpenAppDAMock();\n setupAppConfig(\"1.15.0\", false, false);\n\n const deviceAction = new SignTransactionDeviceAction({\n input: {\n derivationPath: \"44'/60'/0'/0/0\",\n transaction: defaultTransaction,\n options: { ...defaultOptions, skipOpenApp: true },\n contextModule: contextModuleMock,\n mapper: mapperMock,\n parser: parserMock,\n },\n });\n parseTransactionMock.mockResolvedValueOnce({\n subset: defaultSubset,\n type: TransactionType.EIP1559,\n });\n buildContextsMock.mockResolvedValueOnce({\n clearSignContexts: [],\n clearSignContextsOptional: [],\n clearSigningType: ClearSigningType.BASIC,\n });\n provideContextsMock.mockResolvedValueOnce(Just(void 0));\n signTransactionMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: {\n v: 0x1c,\n r: \"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788\",\n s: \"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513\",\n },\n }),\n );\n\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n\n observable = deviceAction._execute(apiMock).observable;\n });\n\n it(\"should skip open app and get app config directly\", async () => {\n const { steps } = await executeUntilStep(0, observable);\n\n expect(getStep(steps, 0).intermediateValue.step).toBe(\n SignTransactionDAStep.GET_APP_CONFIG,\n );\n });\n });\n\n describe(\"should opt in to web3 checks\", () => {\n beforeEach(() => {\n vi.resetAllMocks();\n setupOpenAppDAMock();\n setupAppConfig(\"1.16.0\", false, false);\n\n const deviceAction = new SignTransactionDeviceAction({\n input: {\n derivationPath: \"44'/60'/0'/0/0\",\n transaction: defaultTransaction,\n options: defaultOptions,\n contextModule: contextModuleMock,\n mapper: mapperMock,\n parser: parserMock,\n },\n });\n\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n web3CheckOptInMock.mockResolvedValueOnce(\n CommandResultFactory({ data: { enabled: true } }),\n );\n\n observable = deviceAction._execute(apiMock).observable;\n });\n\n it(\"should opt in to web3 checks if app config is supported and not already enabled\", async () => {\n const { steps } = await executeUntilStep(4, observable);\n\n expect(getStep(steps, 3).intermediateValue.step).toBe(\n SignTransactionDAStep.WEB3_CHECKS_OPT_IN,\n );\n expect(web3CheckOptInMock).toHaveBeenCalledTimes(1);\n\n expect(getStep(steps, 4).intermediateValue.step).toBe(\n SignTransactionDAStep.WEB3_CHECKS_OPT_IN_RESULT,\n );\n // @ts-expect-error - result is not typed\n expect(getStep(steps, 4).intermediateValue.result).toBe(true);\n });\n });\n\n describe(\"should not opt in to web3 checks\", () => {\n beforeEach(() => {\n vi.resetAllMocks();\n setupOpenAppDAMock();\n\n const deviceAction = new SignTransactionDeviceAction({\n input: {\n derivationPath: \"44'/60'/0'/0/0\",\n transaction: defaultTransaction,\n options: defaultOptions,\n contextModule: contextModuleMock,\n mapper: mapperMock,\n parser: parserMock,\n },\n });\n\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n\n observable = deviceAction._execute(apiMock).observable;\n });\n\n it(\"should not opt in to web3 checks if app config is not supported\", async () => {\n setupAppConfig(\"1.15.0\", false, false);\n await executeUntilStep(3, observable);\n expect(web3CheckOptInMock).not.toHaveBeenCalled();\n });\n\n it(\"should not opt in to web3 checks if already enabled\", async () => {\n setupAppConfig(\"1.16.0\", true, false);\n await executeUntilStep(3, observable);\n expect(web3CheckOptInMock).not.toHaveBeenCalled();\n });\n\n it(\"should not opt in to web3 checks if already opted out\", async () => {\n setupAppConfig(\"1.16.0\", false, true);\n await executeUntilStep(3, observable);\n expect(web3CheckOptInMock).not.toHaveBeenCalled();\n });\n });\n });\n\n describe(\"Error cases\", () => {\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n it(\"should return an error if the open app throw an error\", async () => {\n // GIVEN\n setupOpenAppDAMock(new Error(\"Open app failed\"));\n setupAppConfig(\"1.15.0\", false, false);\n const deviceAction = new SignTransactionDeviceAction({\n input: {\n derivationPath: \"44'/60'/0'/0/0\",\n transaction: defaultTransaction,\n options: defaultOptions,\n contextModule: contextModuleMock,\n mapper: mapperMock,\n parser: parserMock,\n },\n });\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n observable = deviceAction._execute(apiMock).observable;\n\n // WHEN\n const result = await lastValueFrom(observable);\n\n // THEN\n expect(result).toEqual({\n status: DeviceActionStatus.Error,\n error: new Error(\"Open app failed\"),\n });\n });\n\n it(\"should return an error if the get app config return an error\", async () => {\n // GIVEN\n setupOpenAppDAMock();\n getAppConfigMock.mockResolvedValueOnce(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"Get app config failed\"),\n }),\n );\n const deviceAction = new SignTransactionDeviceAction({\n input: {\n derivationPath: \"44'/60'/0'/0/0\",\n transaction: defaultTransaction,\n options: defaultOptions,\n contextModule: contextModuleMock,\n mapper: mapperMock,\n parser: parserMock,\n },\n });\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n observable = deviceAction._execute(apiMock).observable;\n\n // WHEN\n const result = await lastValueFrom(observable);\n\n // THEN\n expect(result).toEqual({\n status: DeviceActionStatus.Error,\n error: new InvalidStatusWordError(\"Get app config failed\"),\n });\n });\n\n it(\"should return an error if the get app config throw an error\", async () => {\n // GIVEN\n setupOpenAppDAMock();\n getAppConfigMock.mockRejectedValueOnce(\n new Error(\"Get app config failed\"),\n );\n const deviceAction = new SignTransactionDeviceAction({\n input: {\n derivationPath: \"44'/60'/0'/0/0\",\n transaction: defaultTransaction,\n options: defaultOptions,\n contextModule: contextModuleMock,\n mapper: mapperMock,\n parser: parserMock,\n },\n });\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n observable = deviceAction._execute(apiMock).observable;\n\n // WHEN\n const result = await lastValueFrom(observable);\n\n // THEN\n expect(result).toEqual({\n status: DeviceActionStatus.Error,\n error: new Error(\"Get app config failed\"),\n });\n });\n\n it(\"should ignore the web3checks result if the command fails\", async () => {\n setupOpenAppDAMock();\n setupAppConfig(\"1.16.0\", false, false);\n const deviceAction = new SignTransactionDeviceAction({\n input: {\n derivationPath: \"44'/60'/0'/0/0\",\n transaction: defaultTransaction,\n options: defaultOptions,\n contextModule: contextModuleMock,\n mapper: mapperMock,\n parser: parserMock,\n },\n });\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n web3CheckOptInMock.mockResolvedValueOnce(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"web3 check opt in failed\"),\n }),\n );\n parseTransactionMock.mockResolvedValueOnce({\n subset: defaultSubset,\n type: TransactionType.EIP1559,\n });\n buildContextsMock.mockResolvedValueOnce({\n clearSignContexts: [],\n clearSignContextsOptional: [],\n clearSigningType: ClearSigningType.BASIC,\n });\n signTransactionMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: {\n v: 0x1c,\n r: \"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788\",\n s: \"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513\",\n },\n }),\n );\n observable = deviceAction._execute(apiMock).observable;\n\n // WHEN\n const result = await lastValueFrom(observable);\n\n // THEN\n expect(result).toEqual({\n status: DeviceActionStatus.Completed,\n output: {\n v: 0x1c,\n r: \"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad788\",\n s: \"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513\",\n },\n });\n });\n\n it(\"should return an error if the parse transaction throw an error\", async () => {\n setupOpenAppDAMock();\n setupAppConfig(\"1.15.0\", false, false);\n const deviceAction = new SignTransactionDeviceAction({\n input: {\n derivationPath: \"44'/60'/0'/0/0\",\n transaction: defaultTransaction,\n options: defaultOptions,\n contextModule: contextModuleMock,\n mapper: mapperMock,\n parser: parserMock,\n },\n });\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n parseTransactionMock.mockRejectedValueOnce(\n new Error(\"Parse transaction failed\"),\n );\n observable = deviceAction._execute(apiMock).observable;\n\n // WHEN\n const result = await lastValueFrom(observable);\n\n // THEN\n expect(result).toEqual({\n status: DeviceActionStatus.Error,\n error: new Error(\"Parse transaction failed\"),\n });\n });\n\n it(\"should blind sign if the first sign transaction fails and the second sign transaction succeeds\", async () => {\n setupOpenAppDAMock();\n setupAppConfig(\"1.15.0\", false, false);\n const deviceAction = new SignTransactionDeviceAction({\n input: {\n derivationPath: \"44'/60'/0'/0/0\",\n transaction: defaultTransaction,\n options: defaultOptions,\n contextModule: contextModuleMock,\n mapper: mapperMock,\n parser: parserMock,\n },\n });\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n parseTransactionMock.mockResolvedValueOnce({\n subset: defaultSubset,\n type: TransactionType.EIP1559,\n });\n buildContextsMock.mockResolvedValueOnce({\n clearSignContexts: [],\n clearSignContextsOptional: [],\n clearSigningType: ClearSigningType.BASIC,\n });\n provideContextsMock.mockResolvedValueOnce(Just(void 0));\n signTransactionMock.mockResolvedValueOnce(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"Sign transaction failed\"),\n }),\n );\n signTransactionMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: {\n v: 0x1c,\n r: \"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad789\",\n s: \"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513\",\n },\n }),\n );\n observable = deviceAction._execute(apiMock).observable;\n\n // WHEN\n const result = await lastValueFrom(observable);\n\n // THEN\n expect(result).toEqual({\n status: DeviceActionStatus.Completed,\n output: {\n v: 0x1c,\n r: \"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad789\",\n s: \"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513\",\n },\n });\n });\n\n it(\"should blind sign if the first sign transaction throws an error and the second sign transaction succeeds\", async () => {\n setupOpenAppDAMock();\n setupAppConfig(\"1.15.0\", false, false);\n const deviceAction = new SignTransactionDeviceAction({\n input: {\n derivationPath: \"44'/60'/0'/0/0\",\n transaction: defaultTransaction,\n options: defaultOptions,\n contextModule: contextModuleMock,\n mapper: mapperMock,\n parser: parserMock,\n },\n });\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n parseTransactionMock.mockResolvedValueOnce({\n subset: defaultSubset,\n type: TransactionType.EIP1559,\n });\n buildContextsMock.mockResolvedValueOnce({\n clearSignContexts: [],\n clearSignContextsOptional: [],\n clearSigningType: ClearSigningType.EIP7730,\n });\n provideContextsMock.mockResolvedValueOnce(Just(void 0));\n signTransactionMock.mockRejectedValueOnce(\n new Error(\"Sign transaction failed\"),\n );\n signTransactionMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: {\n v: 0x1c,\n r: \"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad789\",\n s: \"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513\",\n },\n }),\n );\n observable = deviceAction._execute(apiMock).observable;\n\n // WHEN\n const result = await lastValueFrom(observable);\n\n // THEN\n expect(result).toEqual({\n status: DeviceActionStatus.Completed,\n output: {\n v: 0x1c,\n r: \"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad789\",\n s: \"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513\",\n },\n });\n expect(signTransactionMock).toHaveBeenCalledTimes(2);\n expect(signTransactionMock).toHaveBeenNthCalledWith(\n 1,\n expect.objectContaining({\n input: {\n derivationPath: \"44'/60'/0'/0/0\",\n serializedTransaction: defaultTransaction,\n chainId: 1,\n transactionType: TransactionType.EIP1559,\n clearSigningType: ClearSigningType.EIP7730,\n },\n }),\n );\n expect(signTransactionMock).toHaveBeenNthCalledWith(\n 2,\n expect.objectContaining({\n input: {\n derivationPath: \"44'/60'/0'/0/0\",\n serializedTransaction: defaultTransaction,\n chainId: 1,\n transactionType: TransactionType.EIP1559,\n clearSigningType: ClearSigningType.BASIC, // fallback to basic\n },\n }),\n );\n });\n\n it(\"should return an error if the sign transaction return two times an error\", async () => {\n setupOpenAppDAMock();\n setupAppConfig(\"1.15.0\", false, false);\n const deviceAction = new SignTransactionDeviceAction({\n input: {\n derivationPath: \"44'/60'/0'/0/0\",\n transaction: defaultTransaction,\n options: defaultOptions,\n contextModule: contextModuleMock,\n mapper: mapperMock,\n parser: parserMock,\n },\n });\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n parseTransactionMock.mockResolvedValueOnce({\n subset: defaultSubset,\n type: TransactionType.EIP1559,\n });\n buildContextsMock.mockResolvedValueOnce({\n clearSignContexts: [],\n clearSignContextsOptional: [],\n clearSigningType: ClearSigningType.BASIC,\n });\n provideContextsMock.mockResolvedValueOnce(Just(void 0));\n signTransactionMock.mockResolvedValueOnce(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"Sign transaction failed\"),\n }),\n );\n signTransactionMock.mockResolvedValueOnce(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"Blind sign transaction failed\"),\n }),\n );\n observable = deviceAction._execute(apiMock).observable;\n\n // WHEN\n const result = await lastValueFrom(observable);\n\n // THEN\n expect(result).toEqual({\n status: DeviceActionStatus.Error,\n error: new InvalidStatusWordError(\"Blind sign transaction failed\"),\n });\n });\n\n it(\"should return an error if the blind sign transaction fallback throws an error\", async () => {\n setupOpenAppDAMock();\n setupAppConfig(\"1.15.0\", false, false);\n const deviceAction = new SignTransactionDeviceAction({\n input: {\n derivationPath: \"44'/60'/0'/0/0\",\n transaction: defaultTransaction,\n options: defaultOptions,\n contextModule: contextModuleMock,\n mapper: mapperMock,\n parser: parserMock,\n },\n });\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n parseTransactionMock.mockResolvedValueOnce({\n subset: defaultSubset,\n type: TransactionType.EIP1559,\n });\n buildContextsMock.mockResolvedValueOnce({\n clearSignContexts: [],\n clearSignContextsOptional: [],\n clearSigningType: ClearSigningType.BASIC,\n });\n provideContextsMock.mockResolvedValueOnce(Just(void 0));\n signTransactionMock.mockResolvedValueOnce(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"Sign transaction failed\"),\n }),\n );\n signTransactionMock.mockRejectedValueOnce(\n new Error(\"Blind sign transaction fallback failed\"),\n );\n observable = deviceAction._execute(apiMock).observable;\n\n // WHEN\n const result = await lastValueFrom(observable);\n\n // THEN\n expect(result).toEqual({\n status: DeviceActionStatus.Error,\n error: new Error(\"Blind sign transaction fallback failed\"),\n });\n });\n\n it(\"should return an error without trying blind sign fallback when user refuses transaction (error code 6985)\", async () => {\n setupOpenAppDAMock();\n setupAppConfig(\"1.15.0\", false, false);\n const deviceAction = new SignTransactionDeviceAction({\n input: {\n derivationPath: \"44'/60'/0'/0/0\",\n transaction: defaultTransaction,\n options: defaultOptions,\n contextModule: contextModuleMock,\n mapper: mapperMock,\n parser: parserMock,\n },\n });\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n parseTransactionMock.mockResolvedValueOnce({\n subset: defaultSubset,\n type: TransactionType.EIP1559,\n });\n buildContextsMock.mockResolvedValueOnce({\n clearSignContexts: [],\n clearSignContextsOptional: [],\n clearSigningType: ClearSigningType.BASIC,\n });\n provideContextsMock.mockResolvedValueOnce(Just(void 0));\n\n // Create an error with the user refusal error code\n const userRefusalError = new InvalidStatusWordError(\n \"User refused transaction\",\n );\n (\n userRefusalError as InvalidStatusWordError & { errorCode: string }\n ).errorCode = \"6985\";\n\n signTransactionMock.mockResolvedValueOnce(\n CommandResultFactory({\n error: userRefusalError,\n }),\n );\n observable = deviceAction._execute(apiMock).observable;\n\n // WHEN\n const result = await lastValueFrom(observable);\n\n // THEN\n expect(result).toEqual({\n status: DeviceActionStatus.Error,\n error: userRefusalError,\n });\n // Verify that signTransaction was only called once (no blind sign fallback attempt)\n expect(signTransactionMock).toHaveBeenCalledTimes(1);\n });\n\n it(\"should try blind sign fallback when error is not user refusal (different error code)\", async () => {\n setupOpenAppDAMock();\n setupAppConfig(\"1.15.0\", false, false);\n const deviceAction = new SignTransactionDeviceAction({\n input: {\n derivationPath: \"44'/60'/0'/0/0\",\n transaction: defaultTransaction,\n options: defaultOptions,\n contextModule: contextModuleMock,\n mapper: mapperMock,\n parser: parserMock,\n },\n });\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n parseTransactionMock.mockResolvedValueOnce({\n subset: defaultSubset,\n type: TransactionType.EIP1559,\n });\n buildContextsMock.mockResolvedValueOnce({\n clearSignContexts: [],\n clearSignContextsOptional: [],\n clearSigningType: ClearSigningType.EIP7730,\n });\n provideContextsMock.mockResolvedValueOnce(Just(void 0));\n\n // Create an error with a different error code (not user refusal)\n const otherError = new InvalidStatusWordError(\"Some other error\");\n (otherError as InvalidStatusWordError & { errorCode: string }).errorCode =\n \"6A80\";\n\n signTransactionMock.mockResolvedValueOnce(\n CommandResultFactory({\n error: otherError,\n }),\n );\n signTransactionMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: {\n v: 0x1c,\n r: \"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad789\",\n s: \"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513\",\n },\n }),\n );\n observable = deviceAction._execute(apiMock).observable;\n\n // WHEN\n const result = await lastValueFrom(observable);\n\n // THEN\n expect(result).toEqual({\n status: DeviceActionStatus.Completed,\n output: {\n v: 0x1c,\n r: \"0x8a540510e13b0f2b11a451275716d29e08caad07e89a1c84964782fb5e1ad789\",\n s: \"0x64a0de235b270fbe81e8e40688f4a9f9ad9d283d690552c9331d7773ceafa513\",\n },\n });\n // Verify that signTransaction was called twice (first attempt + blind sign fallback)\n expect(signTransactionMock).toHaveBeenCalledTimes(2);\n expect(signTransactionMock).toHaveBeenNthCalledWith(\n 1,\n expect.objectContaining({\n input: {\n derivationPath: \"44'/60'/0'/0/0\",\n serializedTransaction: defaultTransaction,\n chainId: 1,\n transactionType: TransactionType.EIP1559,\n clearSigningType: ClearSigningType.EIP7730,\n },\n }),\n );\n expect(signTransactionMock).toHaveBeenNthCalledWith(\n 2,\n expect.objectContaining({\n input: {\n derivationPath: \"44'/60'/0'/0/0\",\n serializedTransaction: defaultTransaction,\n chainId: 1,\n transactionType: TransactionType.EIP1559,\n clearSigningType: ClearSigningType.BASIC, // fallback to basic\n },\n }),\n );\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["ClearSignContextType", "CommandResultFactory", "DeviceActionStatus", "DeviceModelId", "DeviceSessionStateType", "DeviceStatus", "hexaStringToBuffer", "InvalidStatusWordError", "UserInteractionRequired", "Transaction", "Just", "lastValueFrom", "SignTransactionDAStep", "ClearSigningType", "TransactionType", "makeDeviceActionInternalApiMock", "setupOpenAppDAMock", "executeUntilStep", "SignTransactionDeviceAction", "importOriginal", "observable", "contextModuleMock", "mapperMock", "parserMock", "getAppConfigMock", "web3CheckOptInMock", "parseTransactionMock", "buildContextsMock", "provideContextsMock", "signTransactionMock", "extractDependenciesMock", "apiMock", "defaultOptions", "defaultTransaction", "defaultSubset", "createAppConfig", "version", "web3ChecksEnabled", "web3ChecksOptIn", "setupAppConfig", "getStep", "s", "index", "contexts", "deviceAction", "steps", "result", "userRefusalError", "otherError"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{ClearSignContextReferenceType as p,ClearSignContextType as d}from"@ledgerhq/context-module";import{BuildBaseContexts as u}from"./BuildBaseContexts";import{BuildSubcontextsTask as x}from"./BuildSubcontextsTask";import{ParseNestedTransactionTask as C}from"./ParseNestedTransactionTask";class i{constructor(n,a,o=(t,e)=>new x(t,e),r=(t,e)=>new u(t,e),s=t=>new C(t)){this._api=n;this._args=a;this._buildSubcontextsTaskFactory=o;this._buildBaseContextsTaskFactory=r;this._preBuildNestedCallDataTaskFactory=s}async run(){const{clearSignContexts:n,clearSigningType:a,clearSignContextsOptional:o}=await this._buildBaseContextsTaskFactory(this._api,this._args).run(),r=n.map(t=>{const{subcontextCallbacks:e}=this._buildSubcontextsTaskFactory(this._api,{context:t,contextOptional:o,contextModule:this._args.contextModule,subset:this._args.subset,transactionParser:this._args.parser,deviceModelId:this._args.deviceModelId}).run();return{context:t,subcontextCallbacks:e}});let s=[];for(const t of r)if(t.context.type===d.TRANSACTION_FIELD_DESCRIPTION&&t.context.reference?.type===p.CALLDATA){const{subsets:e}=this._preBuildNestedCallDataTaskFactory({parser:this._args.parser,subset:this._args.subset,context:t.context}).run();for(const l of e){const{clearSignContexts:c}=await new i(this._api,{...this._args,subset:l},this._buildSubcontextsTaskFactory,this._buildBaseContextsTaskFactory,this._preBuildNestedCallDataTaskFactory).run();s=[...s,...c,t]}}else s.push(t);return{clearSignContexts:s,clearSigningType:a}}}export{i as BuildFullContextsTask};
1
+ import{ClearSignContextReferenceType as p,ClearSignContextType as u}from"@ledgerhq/context-module";import{BuildBaseContexts as d}from"./BuildBaseContexts";import{BuildSubcontextsTask as x}from"./BuildSubcontextsTask";import{ParseNestedTransactionTask as C}from"./ParseNestedTransactionTask";class i{constructor(n,o,a=(t,e)=>new x(t,e),r=(t,e)=>new d(t,e),s=t=>new C(t)){this._api=n;this._args=o;this._buildSubcontextsTaskFactory=a;this._buildBaseContextsTaskFactory=r;this._preBuildNestedCallDataTaskFactory=s}async run(){const{clearSignContexts:n,clearSigningType:o,clearSignContextsOptional:a}=await this._buildBaseContextsTaskFactory(this._api,this._args).run(),r=n.map(t=>{const{subcontextCallbacks:e}=this._buildSubcontextsTaskFactory(this._api,{context:t,contextOptional:a,contextModule:this._args.contextModule,subset:this._args.subset,transactionParser:this._args.parser,deviceModelId:this._args.deviceModelId}).run();return{context:t,subcontextCallbacks:e}}),s=[];for(const t of r)if(s.push(t),t.context.type===u.TRANSACTION_FIELD_DESCRIPTION&&t.context.reference?.type===p.CALLDATA){const{subsets:e}=this._preBuildNestedCallDataTaskFactory({parser:this._args.parser,subset:this._args.subset,context:t.context}).run();for(const l of e){const{clearSignContexts:c}=await new i(this._api,{...this._args,subset:l},this._buildSubcontextsTaskFactory,this._buildBaseContextsTaskFactory,this._preBuildNestedCallDataTaskFactory).run();s.push(...c)}}return{clearSignContexts:s,clearSigningType:o}}}export{i as BuildFullContextsTask};
2
2
  //# sourceMappingURL=BuildFullContextsTask.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/task/BuildFullContextsTask.ts"],
4
- "sourcesContent": ["import {\n type ClearSignContext,\n ClearSignContextReferenceType,\n type ClearSignContextSuccess,\n ClearSignContextType,\n type ContextModule,\n type TransactionSubset,\n} from \"@ledgerhq/context-module\";\nimport {\n type DeviceModelId,\n type InternalApi,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type GetConfigCommandResponse } from \"@api/app-binder/GetConfigCommandTypes\";\nimport { type ClearSigningType } from \"@api/model/ClearSigningType\";\nimport { type TransactionOptions } from \"@api/model/TransactionOptions\";\nimport { type TransactionMapperService } from \"@internal/transaction/service/mapper/TransactionMapperService\";\nimport { type TransactionParserService } from \"@internal/transaction/service/parser/TransactionParserService\";\n\nimport {\n BuildBaseContexts,\n type BuildBaseContextsArgs,\n} from \"./BuildBaseContexts\";\nimport {\n BuildSubcontextsTask,\n type BuildSubcontextsTaskArgs,\n} from \"./BuildSubcontextsTask\";\nimport {\n ParseNestedTransactionTask,\n type ParseNestedTransactionTaskArgs,\n} from \"./ParseNestedTransactionTask\";\n\nexport type BuildFullContextsTaskResult = {\n readonly clearSignContexts: ContextWithSubContexts[];\n readonly clearSigningType: ClearSigningType;\n};\n\nexport type BuildFullContextsTaskArgs = {\n readonly contextModule: ContextModule;\n readonly mapper: TransactionMapperService;\n readonly parser: TransactionParserService;\n readonly options: TransactionOptions;\n readonly appConfig: GetConfigCommandResponse;\n readonly derivationPath: string;\n readonly subset: TransactionSubset;\n readonly deviceModelId: DeviceModelId;\n readonly transaction?: Uint8Array;\n};\n\nexport type ContextWithSubContexts = {\n context: ClearSignContextSuccess;\n subcontextCallbacks: (() => Promise<ClearSignContext>)[];\n};\n\nexport class BuildFullContextsTask {\n constructor(\n private readonly _api: InternalApi,\n private readonly _args: BuildFullContextsTaskArgs,\n private readonly _buildSubcontextsTaskFactory = (\n api: InternalApi,\n args: BuildSubcontextsTaskArgs,\n ) => new BuildSubcontextsTask(api, args),\n private readonly _buildBaseContextsTaskFactory = (\n api: InternalApi,\n args: BuildBaseContextsArgs,\n ) => new BuildBaseContexts(api, args),\n private readonly _preBuildNestedCallDataTaskFactory = (\n args: ParseNestedTransactionTaskArgs,\n ) => new ParseNestedTransactionTask(args),\n ) {}\n\n async run(): Promise<BuildFullContextsTaskResult> {\n // get the base contexts\n const { clearSignContexts, clearSigningType, clearSignContextsOptional } =\n await this._buildBaseContextsTaskFactory(this._api, this._args).run();\n\n // for each context, build the subcontexts\n const contextsWithSubContexts: ContextWithSubContexts[] =\n clearSignContexts.map((context: ClearSignContextSuccess) => {\n const { subcontextCallbacks } = this._buildSubcontextsTaskFactory(\n this._api,\n {\n context,\n contextOptional: clearSignContextsOptional,\n contextModule: this._args.contextModule,\n subset: this._args.subset,\n transactionParser: this._args.parser,\n deviceModelId: this._args.deviceModelId,\n },\n ).run();\n\n return {\n context,\n subcontextCallbacks,\n };\n });\n\n // recursively build the nested contexts\n let contextWithNestedContexts: ContextWithSubContexts[] = [];\n for (const context of contextsWithSubContexts) {\n if (\n context.context.type ===\n ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION &&\n context.context.reference?.type ===\n ClearSignContextReferenceType.CALLDATA\n ) {\n const { subsets } = this._preBuildNestedCallDataTaskFactory({\n parser: this._args.parser,\n subset: this._args.subset,\n context: context.context,\n }).run();\n\n for (const subset of subsets) {\n const { clearSignContexts: nestedContexts } =\n await new BuildFullContextsTask(\n this._api,\n {\n ...this._args,\n subset,\n },\n // inject the factories for testing\n this._buildSubcontextsTaskFactory,\n this._buildBaseContextsTaskFactory,\n this._preBuildNestedCallDataTaskFactory,\n ).run();\n\n // TODO: this order will change with app optimizations\n // currently the order is:\n // previous contexts, nested transaction info and nested fields, calldata field from the parent,\n // futurre order:\n // previous contexts, nested transaction info, calldata field from the parent, then nested fields\n contextWithNestedContexts = [\n ...contextWithNestedContexts, // previous contexts\n ...nestedContexts, // nested transaction info and nested fields\n context, // calldatafield from the parent,\n ];\n }\n } else {\n contextWithNestedContexts.push(context);\n }\n }\n\n return {\n clearSignContexts: contextWithNestedContexts,\n clearSigningType,\n };\n }\n}\n"],
5
- "mappings": "AAAA,OAEE,iCAAAA,EAEA,wBAAAC,MAGK,2BAYP,OACE,qBAAAC,MAEK,sBACP,OACE,wBAAAC,MAEK,yBACP,OACE,8BAAAC,MAEK,+BAwBA,MAAMC,CAAsB,CACjC,YACmBC,EACAC,EACAC,EAA+B,CAC9CC,EACAC,IACG,IAAIP,EAAqBM,EAAKC,CAAI,EACtBC,EAAgC,CAC/CF,EACAC,IACG,IAAIR,EAAkBO,EAAKC,CAAI,EACnBE,EACfF,GACG,IAAIN,EAA2BM,CAAI,EACxC,CAbiB,UAAAJ,EACA,WAAAC,EACA,kCAAAC,EAIA,mCAAAG,EAIA,wCAAAC,CAGhB,CAEH,MAAM,KAA4C,CAEhD,KAAM,CAAE,kBAAAC,EAAmB,iBAAAC,EAAkB,0BAAAC,CAA0B,EACrE,MAAM,KAAK,8BAA8B,KAAK,KAAM,KAAK,KAAK,EAAE,IAAI,EAGhEC,EACJH,EAAkB,IAAKI,GAAqC,CAC1D,KAAM,CAAE,oBAAAC,CAAoB,EAAI,KAAK,6BACnC,KAAK,KACL,CACE,QAAAD,EACA,gBAAiBF,EACjB,cAAe,KAAK,MAAM,cAC1B,OAAQ,KAAK,MAAM,OACnB,kBAAmB,KAAK,MAAM,OAC9B,cAAe,KAAK,MAAM,aAC5B,CACF,EAAE,IAAI,EAEN,MAAO,CACL,QAAAE,EACA,oBAAAC,CACF,CACF,CAAC,EAGH,IAAIC,EAAsD,CAAC,EAC3D,UAAWF,KAAWD,EACpB,GACEC,EAAQ,QAAQ,OACdhB,EAAqB,+BACvBgB,EAAQ,QAAQ,WAAW,OACzBjB,EAA8B,SAChC,CACA,KAAM,CAAE,QAAAoB,CAAQ,EAAI,KAAK,mCAAmC,CAC1D,OAAQ,KAAK,MAAM,OACnB,OAAQ,KAAK,MAAM,OACnB,QAASH,EAAQ,OACnB,CAAC,EAAE,IAAI,EAEP,UAAWI,KAAUD,EAAS,CAC5B,KAAM,CAAE,kBAAmBE,CAAe,EACxC,MAAM,IAAIjB,EACR,KAAK,KACL,CACE,GAAG,KAAK,MACR,OAAAgB,CACF,EAEA,KAAK,6BACL,KAAK,8BACL,KAAK,kCACP,EAAE,IAAI,EAORF,EAA4B,CAC1B,GAAGA,EACH,GAAGG,EACHL,CACF,CACF,CACF,MACEE,EAA0B,KAAKF,CAAO,EAI1C,MAAO,CACL,kBAAmBE,EACnB,iBAAAL,CACF,CACF,CACF",
4
+ "sourcesContent": ["import {\n type ClearSignContext,\n ClearSignContextReferenceType,\n type ClearSignContextSuccess,\n ClearSignContextType,\n type ContextModule,\n type TransactionSubset,\n} from \"@ledgerhq/context-module\";\nimport {\n type DeviceModelId,\n type InternalApi,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type GetConfigCommandResponse } from \"@api/app-binder/GetConfigCommandTypes\";\nimport { type ClearSigningType } from \"@api/model/ClearSigningType\";\nimport { type TransactionOptions } from \"@api/model/TransactionOptions\";\nimport { type TransactionMapperService } from \"@internal/transaction/service/mapper/TransactionMapperService\";\nimport { type TransactionParserService } from \"@internal/transaction/service/parser/TransactionParserService\";\n\nimport {\n BuildBaseContexts,\n type BuildBaseContextsArgs,\n} from \"./BuildBaseContexts\";\nimport {\n BuildSubcontextsTask,\n type BuildSubcontextsTaskArgs,\n} from \"./BuildSubcontextsTask\";\nimport {\n ParseNestedTransactionTask,\n type ParseNestedTransactionTaskArgs,\n} from \"./ParseNestedTransactionTask\";\n\nexport type BuildFullContextsTaskResult = {\n readonly clearSignContexts: ContextWithSubContexts[];\n readonly clearSigningType: ClearSigningType;\n};\n\nexport type BuildFullContextsTaskArgs = {\n readonly contextModule: ContextModule;\n readonly mapper: TransactionMapperService;\n readonly parser: TransactionParserService;\n readonly options: TransactionOptions;\n readonly appConfig: GetConfigCommandResponse;\n readonly derivationPath: string;\n readonly subset: TransactionSubset;\n readonly deviceModelId: DeviceModelId;\n readonly transaction?: Uint8Array;\n};\n\nexport type ContextWithSubContexts = {\n context: ClearSignContextSuccess;\n subcontextCallbacks: (() => Promise<ClearSignContext>)[];\n};\n\nexport class BuildFullContextsTask {\n constructor(\n private readonly _api: InternalApi,\n private readonly _args: BuildFullContextsTaskArgs,\n private readonly _buildSubcontextsTaskFactory = (\n api: InternalApi,\n args: BuildSubcontextsTaskArgs,\n ) => new BuildSubcontextsTask(api, args),\n private readonly _buildBaseContextsTaskFactory = (\n api: InternalApi,\n args: BuildBaseContextsArgs,\n ) => new BuildBaseContexts(api, args),\n private readonly _preBuildNestedCallDataTaskFactory = (\n args: ParseNestedTransactionTaskArgs,\n ) => new ParseNestedTransactionTask(args),\n ) {}\n\n async run(): Promise<BuildFullContextsTaskResult> {\n // get the base contexts\n const { clearSignContexts, clearSigningType, clearSignContextsOptional } =\n await this._buildBaseContextsTaskFactory(this._api, this._args).run();\n\n // for each context, build the subcontexts\n const contextsWithSubContexts: ContextWithSubContexts[] =\n clearSignContexts.map((context: ClearSignContextSuccess) => {\n const { subcontextCallbacks } = this._buildSubcontextsTaskFactory(\n this._api,\n {\n context,\n contextOptional: clearSignContextsOptional,\n contextModule: this._args.contextModule,\n subset: this._args.subset,\n transactionParser: this._args.parser,\n deviceModelId: this._args.deviceModelId,\n },\n ).run();\n\n return {\n context,\n subcontextCallbacks,\n };\n });\n\n // recursively build the nested contexts\n const contextWithNestedContexts: ContextWithSubContexts[] = [];\n for (const context of contextsWithSubContexts) {\n contextWithNestedContexts.push(context);\n\n if (\n context.context.type ===\n ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION &&\n context.context.reference?.type ===\n ClearSignContextReferenceType.CALLDATA\n ) {\n const { subsets } = this._preBuildNestedCallDataTaskFactory({\n parser: this._args.parser,\n subset: this._args.subset,\n context: context.context,\n }).run();\n\n for (const subset of subsets) {\n const { clearSignContexts: nestedContexts } =\n await new BuildFullContextsTask(\n this._api,\n {\n ...this._args,\n subset,\n },\n // inject the factories for testing\n this._buildSubcontextsTaskFactory,\n this._buildBaseContextsTaskFactory,\n this._preBuildNestedCallDataTaskFactory,\n ).run();\n\n // Contexts order as expected by the Ethereum application:\n // * previous contexts\n // * calldata field from the parent\n // * list of nested transactions infos and nested fields\n contextWithNestedContexts.push(...nestedContexts);\n }\n }\n }\n\n return {\n clearSignContexts: contextWithNestedContexts,\n clearSigningType,\n };\n }\n}\n"],
5
+ "mappings": "AAAA,OAEE,iCAAAA,EAEA,wBAAAC,MAGK,2BAYP,OACE,qBAAAC,MAEK,sBACP,OACE,wBAAAC,MAEK,yBACP,OACE,8BAAAC,MAEK,+BAwBA,MAAMC,CAAsB,CACjC,YACmBC,EACAC,EACAC,EAA+B,CAC9CC,EACAC,IACG,IAAIP,EAAqBM,EAAKC,CAAI,EACtBC,EAAgC,CAC/CF,EACAC,IACG,IAAIR,EAAkBO,EAAKC,CAAI,EACnBE,EACfF,GACG,IAAIN,EAA2BM,CAAI,EACxC,CAbiB,UAAAJ,EACA,WAAAC,EACA,kCAAAC,EAIA,mCAAAG,EAIA,wCAAAC,CAGhB,CAEH,MAAM,KAA4C,CAEhD,KAAM,CAAE,kBAAAC,EAAmB,iBAAAC,EAAkB,0BAAAC,CAA0B,EACrE,MAAM,KAAK,8BAA8B,KAAK,KAAM,KAAK,KAAK,EAAE,IAAI,EAGhEC,EACJH,EAAkB,IAAKI,GAAqC,CAC1D,KAAM,CAAE,oBAAAC,CAAoB,EAAI,KAAK,6BACnC,KAAK,KACL,CACE,QAAAD,EACA,gBAAiBF,EACjB,cAAe,KAAK,MAAM,cAC1B,OAAQ,KAAK,MAAM,OACnB,kBAAmB,KAAK,MAAM,OAC9B,cAAe,KAAK,MAAM,aAC5B,CACF,EAAE,IAAI,EAEN,MAAO,CACL,QAAAE,EACA,oBAAAC,CACF,CACF,CAAC,EAGGC,EAAsD,CAAC,EAC7D,UAAWF,KAAWD,EAGpB,GAFAG,EAA0B,KAAKF,CAAO,EAGpCA,EAAQ,QAAQ,OACdhB,EAAqB,+BACvBgB,EAAQ,QAAQ,WAAW,OACzBjB,EAA8B,SAChC,CACA,KAAM,CAAE,QAAAoB,CAAQ,EAAI,KAAK,mCAAmC,CAC1D,OAAQ,KAAK,MAAM,OACnB,OAAQ,KAAK,MAAM,OACnB,QAASH,EAAQ,OACnB,CAAC,EAAE,IAAI,EAEP,UAAWI,KAAUD,EAAS,CAC5B,KAAM,CAAE,kBAAmBE,CAAe,EACxC,MAAM,IAAIjB,EACR,KAAK,KACL,CACE,GAAG,KAAK,MACR,OAAAgB,CACF,EAEA,KAAK,6BACL,KAAK,8BACL,KAAK,kCACP,EAAE,IAAI,EAMRF,EAA0B,KAAK,GAAGG,CAAc,CAClD,CACF,CAGF,MAAO,CACL,kBAAmBH,EACnB,iBAAAL,CACF,CACF,CACF",
6
6
  "names": ["ClearSignContextReferenceType", "ClearSignContextType", "BuildBaseContexts", "BuildSubcontextsTask", "ParseNestedTransactionTask", "BuildFullContextsTask", "_api", "_args", "_buildSubcontextsTaskFactory", "api", "args", "_buildBaseContextsTaskFactory", "_preBuildNestedCallDataTaskFactory", "clearSignContexts", "clearSigningType", "clearSignContextsOptional", "contextsWithSubContexts", "context", "subcontextCallbacks", "contextWithNestedContexts", "subsets", "subset", "nestedContexts"]
7
7
  }