@ledgerhq/device-signer-kit-ethereum 1.17.0 → 1.18.1

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 (74) hide show
  1. package/README.md +43 -0
  2. package/lib/cjs/api/app-binder/SignTransactionDeviceActionFactory.js +1 -1
  3. package/lib/cjs/api/app-binder/SignTransactionDeviceActionFactory.js.map +2 -2
  4. package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js +1 -1
  5. package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js.map +2 -2
  6. package/lib/cjs/api/app-binder/SignTypedDataDeviceActionFactory.js +1 -1
  7. package/lib/cjs/api/app-binder/SignTypedDataDeviceActionFactory.js.map +2 -2
  8. package/lib/cjs/api/model/EvmAddressBook.js +1 -1
  9. package/lib/cjs/api/model/EvmAddressBook.js.map +3 -3
  10. package/lib/cjs/internal/app-binder/EthAppBinder.js +1 -1
  11. package/lib/cjs/internal/app-binder/EthAppBinder.js.map +3 -3
  12. package/lib/cjs/internal/app-binder/EthAppBinder.test.js +1 -1
  13. package/lib/cjs/internal/app-binder/EthAppBinder.test.js.map +3 -3
  14. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js +1 -1
  15. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js.map +3 -3
  16. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js +1 -1
  17. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js.map +3 -3
  18. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextsTask.js +1 -1
  19. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextsTask.js.map +3 -3
  20. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextsTask.test.js +1 -1
  21. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextsTask.test.js.map +3 -3
  22. package/lib/cjs/internal/di.js +1 -1
  23. package/lib/cjs/internal/di.js.map +3 -3
  24. package/lib/cjs/internal/shared/utils/buildExternalContactPayload.js +2 -0
  25. package/lib/cjs/internal/shared/utils/buildExternalContactPayload.js.map +7 -0
  26. package/lib/cjs/internal/shared/utils/buildExternalContactPayload.test.js +2 -0
  27. package/lib/cjs/internal/shared/utils/buildExternalContactPayload.test.js.map +7 -0
  28. package/lib/cjs/package.json +3 -2
  29. package/lib/esm/api/app-binder/SignTransactionDeviceActionFactory.js +1 -1
  30. package/lib/esm/api/app-binder/SignTransactionDeviceActionFactory.js.map +2 -2
  31. package/lib/esm/api/app-binder/SignTransactionDeviceActionTypes.js.map +2 -2
  32. package/lib/esm/api/app-binder/SignTypedDataDeviceActionFactory.js +1 -1
  33. package/lib/esm/api/app-binder/SignTypedDataDeviceActionFactory.js.map +2 -2
  34. package/lib/esm/api/model/EvmAddressBook.js +1 -0
  35. package/lib/esm/api/model/EvmAddressBook.js.map +4 -4
  36. package/lib/esm/internal/app-binder/EthAppBinder.js +1 -1
  37. package/lib/esm/internal/app-binder/EthAppBinder.js.map +3 -3
  38. package/lib/esm/internal/app-binder/EthAppBinder.test.js +1 -1
  39. package/lib/esm/internal/app-binder/EthAppBinder.test.js.map +3 -3
  40. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js +1 -1
  41. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js.map +3 -3
  42. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js +1 -1
  43. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js.map +3 -3
  44. package/lib/esm/internal/app-binder/task/ProvideTransactionContextsTask.js +1 -1
  45. package/lib/esm/internal/app-binder/task/ProvideTransactionContextsTask.js.map +3 -3
  46. package/lib/esm/internal/app-binder/task/ProvideTransactionContextsTask.test.js +1 -1
  47. package/lib/esm/internal/app-binder/task/ProvideTransactionContextsTask.test.js.map +3 -3
  48. package/lib/esm/internal/di.js +1 -1
  49. package/lib/esm/internal/di.js.map +3 -3
  50. package/lib/esm/internal/shared/utils/buildExternalContactPayload.js +2 -0
  51. package/lib/esm/internal/shared/utils/buildExternalContactPayload.js.map +7 -0
  52. package/lib/esm/internal/shared/utils/buildExternalContactPayload.test.js +2 -0
  53. package/lib/esm/internal/shared/utils/buildExternalContactPayload.test.js.map +7 -0
  54. package/lib/esm/package.json +3 -2
  55. package/lib/types/api/app-binder/SignTransactionDeviceActionFactory.d.ts +5 -3
  56. package/lib/types/api/app-binder/SignTransactionDeviceActionFactory.d.ts.map +1 -1
  57. package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts +3 -0
  58. package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts.map +1 -1
  59. package/lib/types/api/app-binder/SignTypedDataDeviceActionFactory.d.ts +3 -3
  60. package/lib/types/api/app-binder/SignTypedDataDeviceActionFactory.d.ts.map +1 -1
  61. package/lib/types/api/model/EvmAddressBook.d.ts +11 -3
  62. package/lib/types/api/model/EvmAddressBook.d.ts.map +1 -1
  63. package/lib/types/internal/app-binder/EthAppBinder.d.ts +3 -1
  64. package/lib/types/internal/app-binder/EthAppBinder.d.ts.map +1 -1
  65. package/lib/types/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.d.ts.map +1 -1
  66. package/lib/types/internal/app-binder/task/ProvideTransactionContextsTask.d.ts +23 -0
  67. package/lib/types/internal/app-binder/task/ProvideTransactionContextsTask.d.ts.map +1 -1
  68. package/lib/types/internal/di.d.ts.map +1 -1
  69. package/lib/types/internal/shared/utils/buildExternalContactPayload.d.ts +29 -0
  70. package/lib/types/internal/shared/utils/buildExternalContactPayload.d.ts.map +1 -0
  71. package/lib/types/internal/shared/utils/buildExternalContactPayload.test.d.ts +2 -0
  72. package/lib/types/internal/shared/utils/buildExternalContactPayload.test.d.ts.map +1 -0
  73. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  74. package/package.json +9 -8
package/README.md CHANGED
@@ -54,6 +54,49 @@ const signerEth = new SignerEthBuilder({ sdk, sessionId })
54
54
  .build();
55
55
  ```
56
56
 
57
+ ### Address book
58
+
59
+ Give the signer the user's address book to have the device show a saved contact
60
+ name in place of the raw recipient address when it reviews a transaction:
61
+
62
+ ```typescript
63
+ const signerEth = new SignerEthBuilder({ sdk, sessionId })
64
+ .withAddressBook({
65
+ contactGroups: [
66
+ {
67
+ contactName: "Alice",
68
+ groupHandle, // returned when the contact was registered on the device
69
+ hmacProof,
70
+ externalAddresses: [
71
+ {
72
+ scope: "Ethereum",
73
+ address: "0x...",
74
+ chainId: 1n,
75
+ hmacRest,
76
+ },
77
+ ],
78
+ },
79
+ ],
80
+ ledgerAccounts: [],
81
+ })
82
+ .build();
83
+ ```
84
+
85
+ Points to know:
86
+
87
+ - The snapshot must be complete, and it is read as-is: the signer neither
88
+ mutates nor persists it. Build a new signer to pick up later changes.
89
+ - Only EVM entries belong here. Filter by blockchain family before you build the
90
+ snapshot.
91
+ - A contact matches on address **and** `chainId`, and only against the
92
+ transaction recipient. A recipient carried in calldata — an ERC-20 `transfer`,
93
+ for example — still reviews as a raw address.
94
+ - A matched contact replaces the trusted name (ENS) for the same recipient.
95
+ - Nothing here can break a signature. An address book you do not supply, a
96
+ recipient that does not match, an app too old to support contacts, or a
97
+ contact the device rejects all leave the transaction signing as before,
98
+ against the raw address.
99
+
57
100
  ## 🔹 Use Cases
58
101
 
59
102
  The `SignerEthBuilder.build()` method will return a `SignerEth` instance that exposes 6 dedicated methods, each of which calls an independent use case. Each use case will return an object that contains an observable and a method called `cancel`.
@@ -1,2 +1,2 @@
1
- "use strict";var i=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var S=Object.prototype.hasOwnProperty;var m=(t,n)=>{for(var e in n)i(t,e,{get:n[e],enumerable:!0})},u=(t,n,e,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let o of g(n))!S.call(t,o)&&o!==e&&i(t,o,{get:()=>n[o],enumerable:!(r=s(n,o))||r.enumerable});return t};var T=t=>u(i({},"__esModule",{value:!0}),t);var A={};m(A,{SignTransactionDeviceActionFactory:()=>l});module.exports=T(A);var a=require("../../internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction"),c=require("../../internal/transaction/service/mapper/EthersTransactionMapperService"),p=require("../../internal/transaction/service/parser/TransactionParserService");const l=t=>new a.SignTransactionDeviceAction({input:{derivationPath:t.derivationPath,transaction:t.transaction,contextModule:t.contextModule,options:t.options??{},mapper:new c.EthersTransactionMapperService,parser:new p.TransactionParserService},inspect:t.inspect,loggerFactory:t.loggerFactory});0&&(module.exports={SignTransactionDeviceActionFactory});
1
+ "use strict";var n=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var m=Object.prototype.hasOwnProperty;var l=(o,t)=>{for(var r in t)n(o,r,{get:t[r],enumerable:!0})},v=(o,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of d(t))!m.call(o,e)&&e!==r&&n(o,e,{get:()=>t[e],enumerable:!(i=p(t,e))||i.enumerable});return o};var g=o=>v(n({},"__esModule",{value:!0}),o);var u={};l(u,{SignTransactionDeviceActionFactory:()=>y});module.exports=g(u);var a=require("../../internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction"),s=require("../../internal/transaction/service/mapper/EthersTransactionMapperService"),c=require("../../internal/transaction/service/parser/TransactionParserService");const y=o=>new a.SignTransactionDeviceAction({input:{derivationPath:o.derivationPath,transaction:o.transaction,contextModule:o.contextModule,addressBook:o.addressBook,options:o.options??{},mapper:new s.EthersTransactionMapperService,parser:new c.TransactionParserService},inspect:o.inspect,loggerFactory:o.loggerFactory});0&&(module.exports={SignTransactionDeviceActionFactory});
2
2
  //# sourceMappingURL=SignTransactionDeviceActionFactory.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/api/app-binder/SignTransactionDeviceActionFactory.ts"],
4
- "sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n type LoggerPublisherService,\n type XStateDeviceAction,\n} from \"@ledgerhq/device-management-kit\";\n\nimport {\n type SignTransactionDAError,\n type SignTransactionDAInput,\n type SignTransactionDAIntermediateValue,\n type SignTransactionDAInternalState,\n type SignTransactionDAOutput,\n} from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { type TransactionOptions } from \"@api/model/TransactionOptions\";\nimport { SignTransactionDeviceAction } from \"@internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction\";\nimport { EthersTransactionMapperService } from \"@internal/transaction/service/mapper/EthersTransactionMapperService\";\nimport { TransactionParserService } from \"@internal/transaction/service/parser/TransactionParserService\";\n\nexport const SignTransactionDeviceActionFactory = (args: {\n derivationPath: string;\n transaction: Uint8Array;\n contextModule: ContextModule;\n options?: TransactionOptions;\n inspect?: boolean;\n loggerFactory?: (tag: string) => LoggerPublisherService;\n}): XStateDeviceAction<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n> =>\n new SignTransactionDeviceAction({\n input: {\n derivationPath: args.derivationPath,\n transaction: args.transaction,\n contextModule: args.contextModule,\n options: args.options ?? {},\n mapper: new EthersTransactionMapperService(),\n parser: new TransactionParserService(),\n },\n inspect: args.inspect,\n loggerFactory: args.loggerFactory,\n });\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,wCAAAE,IAAA,eAAAC,EAAAH,GAcA,IAAAI,EAA4C,0FAC5CC,EAA+C,+EAC/CC,EAAyC,yEAElC,MAAMJ,EAAsCK,GAcjD,IAAI,8BAA4B,CAC9B,MAAO,CACL,eAAgBA,EAAK,eACrB,YAAaA,EAAK,YAClB,cAAeA,EAAK,cACpB,QAASA,EAAK,SAAW,CAAC,EAC1B,OAAQ,IAAI,iCACZ,OAAQ,IAAI,0BACd,EACA,QAASA,EAAK,QACd,cAAeA,EAAK,aACtB,CAAC",
4
+ "sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport { type LoggerPublisherService } from \"@ledgerhq/device-management-kit\";\n\nimport { type EvmAddressBook } from \"@api/model/EvmAddressBook\";\nimport { type TransactionOptions } from \"@api/model/TransactionOptions\";\nimport { SignTransactionDeviceAction } from \"@internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction\";\nimport { EthersTransactionMapperService } from \"@internal/transaction/service/mapper/EthersTransactionMapperService\";\nimport { TransactionParserService } from \"@internal/transaction/service/parser/TransactionParserService\";\n\nexport const SignTransactionDeviceActionFactory = (args: {\n derivationPath: string;\n transaction: Uint8Array;\n contextModule: ContextModule;\n addressBook?: EvmAddressBook;\n options?: TransactionOptions;\n inspect?: boolean;\n loggerFactory?: (tag: string) => LoggerPublisherService;\n}) =>\n new SignTransactionDeviceAction({\n input: {\n derivationPath: args.derivationPath,\n transaction: args.transaction,\n contextModule: args.contextModule,\n addressBook: args.addressBook,\n options: args.options ?? {},\n mapper: new EthersTransactionMapperService(),\n parser: new TransactionParserService(),\n },\n inspect: args.inspect,\n loggerFactory: args.loggerFactory,\n });\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,wCAAAE,IAAA,eAAAC,EAAAH,GAKA,IAAAI,EAA4C,0FAC5CC,EAA+C,+EAC/CC,EAAyC,yEAElC,MAAMJ,EAAsCK,GASjD,IAAI,8BAA4B,CAC9B,MAAO,CACL,eAAgBA,EAAK,eACrB,YAAaA,EAAK,YAClB,cAAeA,EAAK,cACpB,YAAaA,EAAK,YAClB,QAASA,EAAK,SAAW,CAAC,EAC1B,OAAQ,IAAI,iCACZ,OAAQ,IAAI,0BACd,EACA,QAASA,EAAK,QACd,cAAeA,EAAK,aACtB,CAAC",
6
6
  "names": ["SignTransactionDeviceActionFactory_exports", "__export", "SignTransactionDeviceActionFactory", "__toCommonJS", "import_SignTransactionDeviceAction", "import_EthersTransactionMapperService", "import_TransactionParserService", "args"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var i=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var u=(n,t)=>{for(var o in t)i(n,o,{get:t[o],enumerable:!0})},T=(n,t,o,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of c(t))!l.call(n,r)&&r!==o&&i(n,r,{get:()=>t[r],enumerable:!(a=p(t,r))||a.enumerable});return n};var y=n=>T(i({},"__esModule",{value:!0}),n);var d={};u(d,{SignTransactionDAStep:()=>s});module.exports=y(d);var s=(e=>(e.OPEN_APP="signer.eth.steps.openApp",e.GET_APP_CONFIG="signer.eth.steps.getAppConfig",e.GET_ADDRESS="signer.eth.steps.getAddress",e.WEB3_CHECKS_OPT_IN="signer.eth.steps.web3ChecksOptIn",e.WEB3_CHECKS_OPT_IN_RESULT="signer.eth.steps.web3ChecksOptInResult",e.PARSE_TRANSACTION="signer.eth.steps.parseTransaction",e.BUILD_CONTEXTS="signer.eth.steps.buildContexts",e.PROVIDE_CONTEXTS="signer.eth.steps.provideContexts",e.SIGN_TRANSACTION="signer.eth.steps.signTransaction",e.BLIND_SIGN_TRANSACTION_FALLBACK="signer.eth.steps.blindSignTransactionFallback",e.DETECT_BLIND_SIGNING="signer.eth.steps.detectBlindSigning",e))(s||{});0&&(module.exports={SignTransactionDAStep});
1
+ "use strict";var i=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var d=(r,t)=>{for(var o in t)i(r,o,{get:t[o],enumerable:!0})},u=(r,t,o,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of c(t))!l.call(r,n)&&n!==o&&i(r,n,{get:()=>t[n],enumerable:!(a=p(t,n))||a.enumerable});return r};var y=r=>u(i({},"__esModule",{value:!0}),r);var T={};d(T,{SignTransactionDAStep:()=>s});module.exports=y(T);var s=(e=>(e.OPEN_APP="signer.eth.steps.openApp",e.GET_APP_CONFIG="signer.eth.steps.getAppConfig",e.GET_ADDRESS="signer.eth.steps.getAddress",e.WEB3_CHECKS_OPT_IN="signer.eth.steps.web3ChecksOptIn",e.WEB3_CHECKS_OPT_IN_RESULT="signer.eth.steps.web3ChecksOptInResult",e.PARSE_TRANSACTION="signer.eth.steps.parseTransaction",e.BUILD_CONTEXTS="signer.eth.steps.buildContexts",e.PROVIDE_CONTEXTS="signer.eth.steps.provideContexts",e.SIGN_TRANSACTION="signer.eth.steps.signTransaction",e.BLIND_SIGN_TRANSACTION_FALLBACK="signer.eth.steps.blindSignTransactionFallback",e.DETECT_BLIND_SIGNING="signer.eth.steps.detectBlindSigning",e))(s||{});0&&(module.exports={SignTransactionDAStep});
2
2
  //# sourceMappingURL=SignTransactionDeviceActionTypes.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/api/app-binder/SignTransactionDeviceActionTypes.ts"],
4
- "sourcesContent": ["import {\n type ContextModule,\n type TransactionSubset,\n} from \"@ledgerhq/context-module\";\nimport {\n type CommandErrorResult,\n type DeviceActionState,\n type ExecuteDeviceActionReturnType,\n type OpenAppDAError,\n type OpenAppDARequiredInteraction,\n type UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type GetConfigCommandResponse } from \"@api/app-binder/GetConfigCommandTypes\";\nimport { type ClearSigningType } from \"@api/model/ClearSigningType\";\nimport { type Signature } from \"@api/model/Signature\";\nimport { type TransactionOptions } from \"@api/model/TransactionOptions\";\nimport { type TransactionType } from \"@api/model/TransactionType\";\nimport { type EthErrorCodes } from \"@internal/app-binder/command/utils/ethAppErrors\";\nimport { type 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\nexport enum SignTransactionDAStep {\n OPEN_APP = \"signer.eth.steps.openApp\",\n GET_APP_CONFIG = \"signer.eth.steps.getAppConfig\",\n GET_ADDRESS = \"signer.eth.steps.getAddress\",\n WEB3_CHECKS_OPT_IN = \"signer.eth.steps.web3ChecksOptIn\",\n WEB3_CHECKS_OPT_IN_RESULT = \"signer.eth.steps.web3ChecksOptInResult\",\n PARSE_TRANSACTION = \"signer.eth.steps.parseTransaction\",\n BUILD_CONTEXTS = \"signer.eth.steps.buildContexts\",\n PROVIDE_CONTEXTS = \"signer.eth.steps.provideContexts\",\n SIGN_TRANSACTION = \"signer.eth.steps.signTransaction\",\n BLIND_SIGN_TRANSACTION_FALLBACK = \"signer.eth.steps.blindSignTransactionFallback\",\n DETECT_BLIND_SIGNING = \"signer.eth.steps.detectBlindSigning\",\n}\n\nexport type SignTransactionDAOutput = Signature;\n\nexport type SignTransactionDAInput = {\n readonly derivationPath: string;\n readonly transaction: Uint8Array;\n readonly mapper: TransactionMapperService;\n readonly parser: TransactionParserService;\n readonly contextModule: ContextModule;\n readonly options: TransactionOptions;\n};\n\nexport type SignTransactionDAError =\n | OpenAppDAError\n | CommandErrorResult<EthErrorCodes>[\"error\"];\n\ntype SignTransactionDARequiredInteraction =\n | OpenAppDARequiredInteraction\n | UserInteractionRequired.Web3ChecksOptIn\n | UserInteractionRequired.SignTransaction;\n\nexport type SignTransactionDAIntermediateValue =\n | {\n requiredUserInteraction: SignTransactionDARequiredInteraction;\n step: Exclude<\n SignTransactionDAStep,\n SignTransactionDAStep.WEB3_CHECKS_OPT_IN_RESULT\n >;\n }\n | {\n requiredUserInteraction: UserInteractionRequired.None;\n step: SignTransactionDAStep.WEB3_CHECKS_OPT_IN_RESULT;\n result: boolean;\n };\n\nexport type SignTransactionDAState = DeviceActionState<\n SignTransactionDAOutput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n>;\n\nexport type SignTransactionDAInternalState = {\n readonly error: SignTransactionDAError | null;\n readonly appConfig: GetConfigCommandResponse | null;\n readonly subset: TransactionSubset | null;\n readonly contexts: ContextWithSubContexts[];\n readonly clearSigningType: ClearSigningType | null;\n readonly contextErrorCount: number;\n readonly transactionType: TransactionType | null;\n readonly signature: Signature | null;\n readonly isBlindSign: boolean | null;\n readonly usedFallback: boolean;\n};\n\nexport type SignTransactionDAReturnType = ExecuteDeviceActionReturnType<\n SignTransactionDAOutput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n>;\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,2BAAAE,IAAA,eAAAC,EAAAH,GAuBO,IAAKE,OACVA,EAAA,SAAW,2BACXA,EAAA,eAAiB,gCACjBA,EAAA,YAAc,8BACdA,EAAA,mBAAqB,mCACrBA,EAAA,0BAA4B,yCAC5BA,EAAA,kBAAoB,oCACpBA,EAAA,eAAiB,iCACjBA,EAAA,iBAAmB,mCACnBA,EAAA,iBAAmB,mCACnBA,EAAA,gCAAkC,gDAClCA,EAAA,qBAAuB,sCAXbA,OAAA",
4
+ "sourcesContent": ["import {\n type ContextModule,\n type TransactionSubset,\n} from \"@ledgerhq/context-module\";\nimport {\n type CommandErrorResult,\n type DeviceActionState,\n type ExecuteDeviceActionReturnType,\n type OpenAppDAError,\n type OpenAppDARequiredInteraction,\n type UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type GetConfigCommandResponse } from \"@api/app-binder/GetConfigCommandTypes\";\nimport { type ClearSigningType } from \"@api/model/ClearSigningType\";\nimport { type EvmAddressBook } from \"@api/model/EvmAddressBook\";\nimport { type Signature } from \"@api/model/Signature\";\nimport { type TransactionOptions } from \"@api/model/TransactionOptions\";\nimport { type TransactionType } from \"@api/model/TransactionType\";\nimport { type EthErrorCodes } from \"@internal/app-binder/command/utils/ethAppErrors\";\nimport { type 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\nexport enum SignTransactionDAStep {\n OPEN_APP = \"signer.eth.steps.openApp\",\n GET_APP_CONFIG = \"signer.eth.steps.getAppConfig\",\n GET_ADDRESS = \"signer.eth.steps.getAddress\",\n WEB3_CHECKS_OPT_IN = \"signer.eth.steps.web3ChecksOptIn\",\n WEB3_CHECKS_OPT_IN_RESULT = \"signer.eth.steps.web3ChecksOptInResult\",\n PARSE_TRANSACTION = \"signer.eth.steps.parseTransaction\",\n BUILD_CONTEXTS = \"signer.eth.steps.buildContexts\",\n PROVIDE_CONTEXTS = \"signer.eth.steps.provideContexts\",\n SIGN_TRANSACTION = \"signer.eth.steps.signTransaction\",\n BLIND_SIGN_TRANSACTION_FALLBACK = \"signer.eth.steps.blindSignTransactionFallback\",\n DETECT_BLIND_SIGNING = \"signer.eth.steps.detectBlindSigning\",\n}\n\nexport type SignTransactionDAOutput = Signature;\n\nexport type SignTransactionDAInput = {\n readonly derivationPath: string;\n readonly transaction: Uint8Array;\n readonly mapper: TransactionMapperService;\n readonly parser: TransactionParserService;\n readonly contextModule: ContextModule;\n /** Defaults to `EMPTY_EVM_ADDRESS_BOOK`, which matches no recipient. */\n readonly addressBook?: EvmAddressBook;\n readonly options: TransactionOptions;\n};\n\nexport type SignTransactionDAError =\n | OpenAppDAError\n | CommandErrorResult<EthErrorCodes>[\"error\"];\n\ntype SignTransactionDARequiredInteraction =\n | OpenAppDARequiredInteraction\n | UserInteractionRequired.Web3ChecksOptIn\n | UserInteractionRequired.SignTransaction;\n\nexport type SignTransactionDAIntermediateValue =\n | {\n requiredUserInteraction: SignTransactionDARequiredInteraction;\n step: Exclude<\n SignTransactionDAStep,\n SignTransactionDAStep.WEB3_CHECKS_OPT_IN_RESULT\n >;\n }\n | {\n requiredUserInteraction: UserInteractionRequired.None;\n step: SignTransactionDAStep.WEB3_CHECKS_OPT_IN_RESULT;\n result: boolean;\n };\n\nexport type SignTransactionDAState = DeviceActionState<\n SignTransactionDAOutput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n>;\n\nexport type SignTransactionDAInternalState = {\n readonly error: SignTransactionDAError | null;\n readonly appConfig: GetConfigCommandResponse | null;\n readonly subset: TransactionSubset | null;\n readonly contexts: ContextWithSubContexts[];\n readonly clearSigningType: ClearSigningType | null;\n readonly contextErrorCount: number;\n readonly transactionType: TransactionType | null;\n readonly signature: Signature | null;\n readonly isBlindSign: boolean | null;\n readonly usedFallback: boolean;\n};\n\nexport type SignTransactionDAReturnType = ExecuteDeviceActionReturnType<\n SignTransactionDAOutput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n>;\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,2BAAAE,IAAA,eAAAC,EAAAH,GAwBO,IAAKE,OACVA,EAAA,SAAW,2BACXA,EAAA,eAAiB,gCACjBA,EAAA,YAAc,8BACdA,EAAA,mBAAqB,mCACrBA,EAAA,0BAA4B,yCAC5BA,EAAA,kBAAoB,oCACpBA,EAAA,eAAiB,iCACjBA,EAAA,iBAAmB,mCACnBA,EAAA,iBAAmB,mCACnBA,EAAA,gCAAkC,gDAClCA,EAAA,qBAAuB,sCAXbA,OAAA",
6
6
  "names": ["SignTransactionDeviceActionTypes_exports", "__export", "SignTransactionDAStep", "__toCommonJS"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var r=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var S=Object.prototype.hasOwnProperty;var g=(e,t)=>{for(var p in t)r(e,p,{get:t[p],enumerable:!0})},m=(e,t,p,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of y(t))!S.call(e,a)&&a!==p&&r(e,a,{get:()=>t[a],enumerable:!(i=d(t,a))||i.enumerable});return e};var l=e=>m(r({},"__esModule",{value:!0}),e);var A={};g(A,{SignTypedDataDeviceActionFactory:()=>u});module.exports=l(A);var n=require("../../internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction"),o=require("../../internal/transaction/service/mapper/EthersTransactionMapperService"),D=require("../../internal/transaction/service/parser/TransactionParserService"),c=require("../../internal/typed-data/service/DefaultTypedDataParserService");const u=e=>new n.SignTypedDataDeviceAction({input:{derivationPath:e.derivationPath,data:e.data,contextModule:e.contextModule,skipOpenApp:e.skipOpenApp,parser:new c.DefaultTypedDataParserService,transactionMapper:new o.EthersTransactionMapperService,transactionParser:new D.TransactionParserService},inspect:e.inspect,loggerFactory:e.loggerFactory});0&&(module.exports={SignTypedDataDeviceActionFactory});
1
+ "use strict";var a=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var y=(e,t)=>{for(var r in t)a(e,r,{get:t[r],enumerable:!0})},g=(e,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of m(t))!l.call(e,o)&&o!==r&&a(e,o,{get:()=>t[o],enumerable:!(i=s(t,o))||i.enumerable});return e};var v=e=>g(a({},"__esModule",{value:!0}),e);var f={};y(f,{SignTypedDataDeviceActionFactory:()=>u});module.exports=v(f);var p=require("../../internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction"),n=require("../../internal/transaction/service/mapper/EthersTransactionMapperService"),c=require("../../internal/transaction/service/parser/TransactionParserService"),d=require("../../internal/typed-data/service/DefaultTypedDataParserService");const u=e=>new p.SignTypedDataDeviceAction({input:{derivationPath:e.derivationPath,data:e.data,contextModule:e.contextModule,skipOpenApp:e.skipOpenApp,parser:new d.DefaultTypedDataParserService,transactionMapper:new n.EthersTransactionMapperService,transactionParser:new c.TransactionParserService},inspect:e.inspect,loggerFactory:e.loggerFactory});0&&(module.exports={SignTypedDataDeviceActionFactory});
2
2
  //# sourceMappingURL=SignTypedDataDeviceActionFactory.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/api/app-binder/SignTypedDataDeviceActionFactory.ts"],
4
- "sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n type LoggerPublisherService,\n type XStateDeviceAction,\n} from \"@ledgerhq/device-management-kit\";\n\nimport {\n type SignTypedDataDAError,\n type SignTypedDataDAInput,\n type SignTypedDataDAIntermediateValue,\n type SignTypedDataDAInternalState,\n type SignTypedDataDAOutput,\n} from \"@api/app-binder/SignTypedDataDeviceActionTypes\";\nimport { type TypedData } from \"@api/model/TypedData\";\nimport { SignTypedDataDeviceAction } from \"@internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction\";\nimport { EthersTransactionMapperService } from \"@internal/transaction/service/mapper/EthersTransactionMapperService\";\nimport { TransactionParserService } from \"@internal/transaction/service/parser/TransactionParserService\";\nimport { DefaultTypedDataParserService } from \"@internal/typed-data/service/DefaultTypedDataParserService\";\n\nexport const SignTypedDataDeviceActionFactory = (args: {\n derivationPath: string;\n data: TypedData;\n contextModule: ContextModule;\n skipOpenApp: boolean;\n inspect?: boolean;\n loggerFactory?: (tag: string) => LoggerPublisherService;\n}): XStateDeviceAction<\n SignTypedDataDAOutput,\n SignTypedDataDAInput,\n SignTypedDataDAError,\n SignTypedDataDAIntermediateValue,\n SignTypedDataDAInternalState\n> =>\n new SignTypedDataDeviceAction({\n input: {\n derivationPath: args.derivationPath,\n data: args.data,\n contextModule: args.contextModule,\n skipOpenApp: args.skipOpenApp,\n parser: new DefaultTypedDataParserService(),\n transactionMapper: new EthersTransactionMapperService(),\n transactionParser: new TransactionParserService(),\n },\n inspect: args.inspect,\n loggerFactory: args.loggerFactory,\n });\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,sCAAAE,IAAA,eAAAC,EAAAH,GAcA,IAAAI,EAA0C,sFAC1CC,EAA+C,+EAC/CC,EAAyC,yEACzCC,EAA8C,sEAEvC,MAAML,EAAoCM,GAc/C,IAAI,4BAA0B,CAC5B,MAAO,CACL,eAAgBA,EAAK,eACrB,KAAMA,EAAK,KACX,cAAeA,EAAK,cACpB,YAAaA,EAAK,YAClB,OAAQ,IAAI,gCACZ,kBAAmB,IAAI,iCACvB,kBAAmB,IAAI,0BACzB,EACA,QAASA,EAAK,QACd,cAAeA,EAAK,aACtB,CAAC",
4
+ "sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport { type LoggerPublisherService } from \"@ledgerhq/device-management-kit\";\n\nimport { type TypedData } from \"@api/model/TypedData\";\nimport { SignTypedDataDeviceAction } from \"@internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction\";\nimport { EthersTransactionMapperService } from \"@internal/transaction/service/mapper/EthersTransactionMapperService\";\nimport { TransactionParserService } from \"@internal/transaction/service/parser/TransactionParserService\";\nimport { DefaultTypedDataParserService } from \"@internal/typed-data/service/DefaultTypedDataParserService\";\n\nexport const SignTypedDataDeviceActionFactory = (args: {\n derivationPath: string;\n data: TypedData;\n contextModule: ContextModule;\n skipOpenApp: boolean;\n inspect?: boolean;\n loggerFactory?: (tag: string) => LoggerPublisherService;\n}) =>\n new SignTypedDataDeviceAction({\n input: {\n derivationPath: args.derivationPath,\n data: args.data,\n contextModule: args.contextModule,\n skipOpenApp: args.skipOpenApp,\n parser: new DefaultTypedDataParserService(),\n transactionMapper: new EthersTransactionMapperService(),\n transactionParser: new TransactionParserService(),\n },\n inspect: args.inspect,\n loggerFactory: args.loggerFactory,\n });\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,sCAAAE,IAAA,eAAAC,EAAAH,GAIA,IAAAI,EAA0C,sFAC1CC,EAA+C,+EAC/CC,EAAyC,yEACzCC,EAA8C,sEAEvC,MAAML,EAAoCM,GAQ/C,IAAI,4BAA0B,CAC5B,MAAO,CACL,eAAgBA,EAAK,eACrB,KAAMA,EAAK,KACX,cAAeA,EAAK,cACpB,YAAaA,EAAK,YAClB,OAAQ,IAAI,gCACZ,kBAAmB,IAAI,iCACvB,kBAAmB,IAAI,0BACzB,EACA,QAASA,EAAK,QACd,cAAeA,EAAK,aACtB,CAAC",
6
6
  "names": ["SignTypedDataDeviceActionFactory_exports", "__export", "SignTypedDataDeviceActionFactory", "__toCommonJS", "import_SignTypedDataDeviceAction", "import_EthersTransactionMapperService", "import_TransactionParserService", "import_DefaultTypedDataParserService", "args"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var o=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var s=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var i=(r,t,a,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of s(t))!d.call(r,e)&&e!==a&&o(r,e,{get:()=>t[e],enumerable:!(n=c(t,e))||n.enumerable});return r};var p=r=>i(o({},"__esModule",{value:!0}),r);var m={};module.exports=p(m);
1
+ "use strict";var n=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var s=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var i=(t,e)=>{for(var o in e)n(t,o,{get:e[o],enumerable:!0})},p=(t,e,o,c)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of s(e))!d.call(t,r)&&r!==o&&n(t,r,{get:()=>e[r],enumerable:!(c=a(e,r))||c.enumerable});return t};var A=t=>p(n({},"__esModule",{value:!0}),t);var E={};i(E,{EMPTY_EVM_ADDRESS_BOOK:()=>m});module.exports=A(E);const m=Object.freeze({contactGroups:Object.freeze([]),ledgerAccounts:Object.freeze([])});0&&(module.exports={EMPTY_EVM_ADDRESS_BOOK});
2
2
  //# sourceMappingURL=EvmAddressBook.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/api/model/EvmAddressBook.ts"],
4
- "sourcesContent": ["/**\n * A complete snapshot of the EVM-compatible part of the address book.\n *\n * The signer never mutates this snapshot and never persists it: owning,\n * updating and persisting the address book remains the host's responsibility.\n *\n * Only EVM-family contacts and accounts belong here. The host filters by\n * blockchain family while building the snapshot, so the signer's in-flow\n * matching never needs a family discriminator and the models below do not\n * carry one.\n */\nexport type EvmAddressBook = {\n contactGroups: EvmContactGroup[];\n ledgerAccounts: EvmLedgerAccountContact[];\n};\n\n/**\n * A named contact and the external addresses registered under it.\n *\n * The group carries the name-level proof material that every one of its\n * addresses reuses, so matching an address always yields its group without a\n * lookup.\n */\nexport type EvmContactGroup = {\n contactName: string;\n groupHandle: Uint8Array;\n hmacProof: Uint8Array;\n externalAddresses: EvmExternalAddress[];\n};\n\n/**\n * An external address registered under a contact group, for one chain.\n *\n * The derivation path used at registration time is deliberately absent: the\n * signer never needs it to provide the contact to the device.\n */\nexport type EvmExternalAddress = {\n scope: string;\n address: `0x${string}`;\n chainId: bigint;\n hmacRest: Uint8Array;\n};\n\n/**\n * A named Ledger account contact, identified by its derivation path and chain\n * rather than by an address string.\n */\nexport type EvmLedgerAccountContact = {\n accountName: string;\n derivationPath: string;\n chainId: bigint;\n hmacProof: Uint8Array;\n};\n"],
5
- "mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
6
- "names": ["EvmAddressBook_exports", "__toCommonJS"]
4
+ "sourcesContent": ["/**\n * A complete snapshot of the EVM-compatible part of the address book.\n *\n * The signer never mutates this snapshot and never persists it: owning,\n * updating and persisting the address book remains the host's responsibility.\n *\n * Only EVM-family contacts and accounts belong here. The host filters by\n * blockchain family while building the snapshot, so the signer's in-flow\n * matching never needs a family discriminator and the models below do not\n * carry one.\n */\nexport type EvmAddressBook = {\n contactGroups: readonly EvmContactGroup[];\n ledgerAccounts: readonly EvmLedgerAccountContact[];\n};\n\n/**\n * A named contact and the external addresses registered under it.\n *\n * The group carries the name-level proof material that every one of its\n * addresses reuses, so matching an address always yields its group without a\n * lookup.\n */\nexport type EvmContactGroup = {\n contactName: string;\n groupHandle: Uint8Array;\n hmacProof: Uint8Array;\n externalAddresses: readonly EvmExternalAddress[];\n};\n\n/**\n * An external address registered under a contact group, for one chain.\n *\n * The derivation path used at registration time is deliberately absent: the\n * signer never needs it to provide the contact to the device.\n */\nexport type EvmExternalAddress = {\n scope: string;\n address: `0x${string}`;\n chainId: bigint;\n hmacRest: Uint8Array;\n};\n\n/**\n * A named Ledger account contact, identified by its derivation path and chain\n * rather than by an address string.\n */\nexport type EvmLedgerAccountContact = {\n accountName: string;\n derivationPath: string;\n chainId: bigint;\n hmacProof: Uint8Array;\n};\n\n/**\n * The book bound when the host supplies none. Matches nothing.\n *\n * Frozen because it is a process-wide singleton: it is the DI binding, the\n * device-action default and the fixture every test reuses, so a single stray\n * mutation would leak into every signer at once.\n */\nexport const EMPTY_EVM_ADDRESS_BOOK: EvmAddressBook = Object.freeze({\n contactGroups: Object.freeze([]),\n ledgerAccounts: Object.freeze([]),\n});\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,4BAAAE,IAAA,eAAAC,EAAAH,GA6DO,MAAME,EAAyC,OAAO,OAAO,CAClE,cAAe,OAAO,OAAO,CAAC,CAAC,EAC/B,eAAgB,OAAO,OAAO,CAAC,CAAC,CAClC,CAAC",
6
+ "names": ["EvmAddressBook_exports", "__export", "EMPTY_EVM_ADDRESS_BOOK", "__toCommonJS"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var m=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var P=Object.getOwnPropertyNames;var I=Object.prototype.hasOwnProperty;var M=(n,e)=>{for(var t in e)m(n,t,{get:e[t],enumerable:!0})},x=(n,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of P(e))!I.call(n,r)&&r!==t&&m(n,r,{get:()=>e[r],enumerable:!(i=y(e,r))||i.enumerable});return n};var O=n=>x(m({},"__esModule",{value:!0}),n),v=(n,e,t,i)=>{for(var r=i>1?void 0:i?y(e,t):e,d=n.length-1,g;d>=0;d--)(g=n[d])&&(r=(i?g(e,t,r):g(r))||r);return i&&r&&m(e,t,r),r},s=(n,e)=>(t,i)=>e(t,i,n);var L={};M(L,{EthAppBinder:()=>c});module.exports=O(L);var u=require("@ledgerhq/device-management-kit"),a=require("@ledgerhq/device-management-kit"),o=require("inversify"),k=require("../app-binder/device-action/SignTypedData/SignTypedDataDeviceAction"),l=require("../app-binder/task/SendSignPersonalMessageTask"),p=require("../externalTypes"),h=require("../transaction/di/transactionTypes"),D=require("./device-action/SignTransaction/SignTransactionDeviceAction"),S=require("./device-action/VerifySafeAddress/VerifySafeAddress"),T=require("./task/SendGetAddressTask"),f=require("./task/SendSignAuthorizationDelegationTask"),A=require("./constants");let c=class{constructor(e,t,i,r,d,g){this.dmk=e;this.contextModule=t;this.mapper=i;this.parser=r;this.sessionId=d;this.dmkLoggerFactory=g}getAddress(e){const t=this.dmkLoggerFactory("SendGetAddressTask");return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new u.CallTaskInAppDeviceAction({input:{task:async i=>new T.SendGetAddressTask(i,{contextModule:this.contextModule,derivationPath:e.derivationPath,checkOnDevice:e.checkOnDevice,returnChainCode:e.returnChainCode,chainId:e.chainId,loggerFactory:this.dmkLoggerFactory}).run(),appName:A.APP_NAME,requiredUserInteraction:e.checkOnDevice?a.UserInteractionRequired.VerifyAddress:a.UserInteractionRequired.None,skipOpenApp:e.skipOpenApp},logger:t})})}verifySafeAddress(e){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new S.VerifySafeAddressDeviceAction({input:{safeContractAddress:e.safeContractAddress,contextModule:this.contextModule,options:e.options??{chainId:1}},loggerFactory:this.dmkLoggerFactory})})}signPersonalMessage(e){const t=this.dmkLoggerFactory("SendSignPersonalMessageTask");return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new u.CallTaskInAppDeviceAction({input:{task:async i=>new l.SendSignPersonalMessageTask(i,{...e,logger:t}).run(),appName:A.APP_NAME,requiredUserInteraction:a.UserInteractionRequired.SignPersonalMessage,skipOpenApp:e.skipOpenApp},logger:this.dmkLoggerFactory("SendSignPersonalMessageTask")})})}signTransaction(e){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new D.SignTransactionDeviceAction({input:{derivationPath:e.derivationPath,transaction:e.transaction,mapper:this.mapper,parser:this.parser,contextModule:this.contextModule,options:e.options??{}},loggerFactory:this.dmkLoggerFactory})})}signTypedData(e){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new k.SignTypedDataDeviceAction({input:{derivationPath:e.derivationPath,data:e.data,parser:e.parser,transactionMapper:this.mapper,transactionParser:this.parser,contextModule:this.contextModule,skipOpenApp:e.skipOpenApp},loggerFactory:this.dmkLoggerFactory})})}signDelegationAuthorization(e){const t=this.dmkLoggerFactory("SendSignAuthorizationDelegationTask");return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new u.CallTaskInAppDeviceAction({input:{task:async i=>new f.SendSignAuthorizationDelegationTask(i,{...e,logger:t}).run(),appName:A.APP_NAME,requiredUserInteraction:a.UserInteractionRequired.SignDelegationAuthorization,skipOpenApp:!1},logger:this.dmkLoggerFactory("SendSignAuthorizationDelegationTask")})})}};c=v([(0,o.injectable)(),s(0,(0,o.inject)(p.externalTypes.Dmk)),s(1,(0,o.inject)(p.externalTypes.ContextModule)),s(2,(0,o.inject)(h.transactionTypes.TransactionMapperService)),s(3,(0,o.inject)(h.transactionTypes.TransactionParserService)),s(4,(0,o.inject)(p.externalTypes.SessionId)),s(5,(0,o.inject)(p.externalTypes.DmkLoggerFactory))],c);0&&(module.exports={EthAppBinder});
1
+ "use strict";var m=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var P=Object.getOwnPropertyNames;var I=Object.prototype.hasOwnProperty;var M=(o,e)=>{for(var t in e)m(o,t,{get:e[t],enumerable:!0})},x=(o,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of P(e))!I.call(o,r)&&r!==t&&m(o,r,{get:()=>e[r],enumerable:!(i=y(e,r))||i.enumerable});return o};var O=o=>x(m({},"__esModule",{value:!0}),o),v=(o,e,t,i)=>{for(var r=i>1?void 0:i?y(e,t):e,c=o.length-1,g;c>=0;c--)(g=o[c])&&(r=(i?g(e,t,r):g(r))||r);return i&&r&&m(e,t,r),r},s=(o,e)=>(t,i)=>e(t,i,o);var L={};M(L,{EthAppBinder:()=>d});module.exports=O(L);var u=require("@ledgerhq/device-management-kit"),p=require("@ledgerhq/device-management-kit"),n=require("inversify"),k=require("../app-binder/device-action/SignTypedData/SignTypedDataDeviceAction"),l=require("../app-binder/task/SendSignPersonalMessageTask"),a=require("../externalTypes"),h=require("../transaction/di/transactionTypes"),D=require("./device-action/SignTransaction/SignTransactionDeviceAction"),S=require("./device-action/VerifySafeAddress/VerifySafeAddress"),T=require("./task/SendGetAddressTask"),f=require("./task/SendSignAuthorizationDelegationTask"),A=require("./constants");let d=class{constructor(e,t,i,r,c,g,F){this.dmk=e;this.contextModule=t;this.mapper=i;this.parser=r;this.sessionId=c;this.dmkLoggerFactory=g;this.addressBook=F}getAddress(e){const t=this.dmkLoggerFactory("SendGetAddressTask");return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new u.CallTaskInAppDeviceAction({input:{task:async i=>new T.SendGetAddressTask(i,{contextModule:this.contextModule,derivationPath:e.derivationPath,checkOnDevice:e.checkOnDevice,returnChainCode:e.returnChainCode,chainId:e.chainId,loggerFactory:this.dmkLoggerFactory}).run(),appName:A.APP_NAME,requiredUserInteraction:e.checkOnDevice?p.UserInteractionRequired.VerifyAddress:p.UserInteractionRequired.None,skipOpenApp:e.skipOpenApp},logger:t})})}verifySafeAddress(e){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new S.VerifySafeAddressDeviceAction({input:{safeContractAddress:e.safeContractAddress,contextModule:this.contextModule,options:e.options??{chainId:1}},loggerFactory:this.dmkLoggerFactory})})}signPersonalMessage(e){const t=this.dmkLoggerFactory("SendSignPersonalMessageTask");return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new u.CallTaskInAppDeviceAction({input:{task:async i=>new l.SendSignPersonalMessageTask(i,{...e,logger:t}).run(),appName:A.APP_NAME,requiredUserInteraction:p.UserInteractionRequired.SignPersonalMessage,skipOpenApp:e.skipOpenApp},logger:this.dmkLoggerFactory("SendSignPersonalMessageTask")})})}signTransaction(e){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new D.SignTransactionDeviceAction({input:{derivationPath:e.derivationPath,transaction:e.transaction,mapper:this.mapper,parser:this.parser,contextModule:this.contextModule,addressBook:this.addressBook,options:e.options??{}},loggerFactory:this.dmkLoggerFactory})})}signTypedData(e){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new k.SignTypedDataDeviceAction({input:{derivationPath:e.derivationPath,data:e.data,parser:e.parser,transactionMapper:this.mapper,transactionParser:this.parser,contextModule:this.contextModule,skipOpenApp:e.skipOpenApp},loggerFactory:this.dmkLoggerFactory})})}signDelegationAuthorization(e){const t=this.dmkLoggerFactory("SendSignAuthorizationDelegationTask");return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new u.CallTaskInAppDeviceAction({input:{task:async i=>new f.SendSignAuthorizationDelegationTask(i,{...e,logger:t}).run(),appName:A.APP_NAME,requiredUserInteraction:p.UserInteractionRequired.SignDelegationAuthorization,skipOpenApp:!1},logger:this.dmkLoggerFactory("SendSignAuthorizationDelegationTask")})})}};d=v([(0,n.injectable)(),s(0,(0,n.inject)(a.externalTypes.Dmk)),s(1,(0,n.inject)(a.externalTypes.ContextModule)),s(2,(0,n.inject)(h.transactionTypes.TransactionMapperService)),s(3,(0,n.inject)(h.transactionTypes.TransactionParserService)),s(4,(0,n.inject)(a.externalTypes.SessionId)),s(5,(0,n.inject)(a.externalTypes.DmkLoggerFactory)),s(6,(0,n.inject)(a.externalTypes.AddressBook))],d);0&&(module.exports={EthAppBinder});
2
2
  //# sourceMappingURL=EthAppBinder.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/internal/app-binder/EthAppBinder.ts"],
4
- "sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n DeviceManagementKit,\n type DeviceSessionId,\n type LoggerPublisherService,\n} from \"@ledgerhq/device-management-kit\";\nimport { CallTaskInAppDeviceAction } from \"@ledgerhq/device-management-kit\";\nimport { UserInteractionRequired } from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport { type GetAddressDAReturnType } from \"@api/app-binder/GetAddressDeviceActionTypes\";\nimport { SignDelegationAuthorizationDAReturnType } from \"@api/app-binder/SignDelegationAuthorizationTypes\";\nimport { type SignPersonalMessageDAReturnType } from \"@api/app-binder/SignPersonalMessageDeviceActionTypes\";\nimport { type SignTransactionDAReturnType } from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { type SignTypedDataDAReturnType } from \"@api/app-binder/SignTypedDataDeviceActionTypes\";\nimport { VerifySafeAddressDAReturnType } from \"@api/app-binder/VerifySafeAddressDeviceActionTypes\";\nimport { SafeAddressOptions } from \"@api/model/SafeAddressOptions\";\nimport { type TransactionOptions } from \"@api/model/TransactionOptions\";\nimport { type TypedData } from \"@api/model/TypedData\";\nimport { SignTypedDataDeviceAction } from \"@internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction\";\nimport { SendSignPersonalMessageTask } from \"@internal/app-binder/task/SendSignPersonalMessageTask\";\nimport { externalTypes } from \"@internal/externalTypes\";\nimport { transactionTypes } from \"@internal/transaction/di/transactionTypes\";\nimport { type TransactionMapperService } from \"@internal/transaction/service/mapper/TransactionMapperService\";\nimport { TransactionParserService } from \"@internal/transaction/service/parser/TransactionParserService\";\nimport { type TypedDataParserService } from \"@internal/typed-data/service/TypedDataParserService\";\n\nimport { SignTransactionDeviceAction } from \"./device-action/SignTransaction/SignTransactionDeviceAction\";\nimport { VerifySafeAddressDeviceAction } from \"./device-action/VerifySafeAddress/VerifySafeAddress\";\nimport { SendGetAddressTask } from \"./task/SendGetAddressTask\";\nimport { SendSignAuthorizationDelegationTask } from \"./task/SendSignAuthorizationDelegationTask\";\nimport { APP_NAME } from \"./constants\";\n\n@injectable()\nexport class EthAppBinder {\n constructor(\n @inject(externalTypes.Dmk) private dmk: DeviceManagementKit,\n @inject(externalTypes.ContextModule) private contextModule: ContextModule,\n @inject(transactionTypes.TransactionMapperService)\n private mapper: TransactionMapperService,\n @inject(transactionTypes.TransactionParserService)\n private parser: TransactionParserService,\n @inject(externalTypes.SessionId) private sessionId: DeviceSessionId,\n @inject(externalTypes.DmkLoggerFactory)\n private dmkLoggerFactory: (tag: string) => LoggerPublisherService,\n ) {}\n\n getAddress(args: {\n derivationPath: string;\n checkOnDevice: boolean;\n returnChainCode: boolean;\n skipOpenApp: boolean;\n chainId?: number;\n }): GetAddressDAReturnType {\n const taskLogger = this.dmkLoggerFactory(\"SendGetAddressTask\");\n return this.dmk.executeDeviceAction({\n sessionId: this.sessionId,\n deviceAction: new CallTaskInAppDeviceAction({\n input: {\n task: async (internalApi) =>\n new SendGetAddressTask(internalApi, {\n contextModule: this.contextModule,\n derivationPath: args.derivationPath,\n checkOnDevice: args.checkOnDevice,\n returnChainCode: args.returnChainCode,\n chainId: args.chainId,\n loggerFactory: this.dmkLoggerFactory,\n }).run(),\n appName: APP_NAME,\n requiredUserInteraction: args.checkOnDevice\n ? UserInteractionRequired.VerifyAddress\n : UserInteractionRequired.None,\n skipOpenApp: args.skipOpenApp,\n },\n logger: taskLogger,\n }),\n });\n }\n\n verifySafeAddress(args: {\n safeContractAddress: string;\n options?: SafeAddressOptions;\n }): VerifySafeAddressDAReturnType {\n return this.dmk.executeDeviceAction({\n sessionId: this.sessionId,\n deviceAction: new VerifySafeAddressDeviceAction({\n input: {\n safeContractAddress: args.safeContractAddress,\n contextModule: this.contextModule,\n options: args.options ?? { chainId: 1 },\n },\n loggerFactory: this.dmkLoggerFactory,\n }),\n });\n }\n\n signPersonalMessage(args: {\n derivationPath: string;\n message: string | Uint8Array;\n skipOpenApp: boolean;\n }): SignPersonalMessageDAReturnType {\n const taskLogger = this.dmkLoggerFactory(\"SendSignPersonalMessageTask\");\n return this.dmk.executeDeviceAction({\n sessionId: this.sessionId,\n deviceAction: new CallTaskInAppDeviceAction({\n input: {\n task: async (internalApi) =>\n new SendSignPersonalMessageTask(internalApi, {\n ...args,\n logger: taskLogger,\n }).run(),\n appName: APP_NAME,\n requiredUserInteraction: UserInteractionRequired.SignPersonalMessage,\n skipOpenApp: args.skipOpenApp,\n },\n logger: this.dmkLoggerFactory(\"SendSignPersonalMessageTask\"),\n }),\n });\n }\n\n signTransaction(args: {\n derivationPath: string;\n transaction: Uint8Array;\n options?: TransactionOptions;\n }): SignTransactionDAReturnType {\n return this.dmk.executeDeviceAction({\n sessionId: this.sessionId,\n deviceAction: new SignTransactionDeviceAction({\n input: {\n derivationPath: args.derivationPath,\n transaction: args.transaction,\n mapper: this.mapper,\n parser: this.parser,\n contextModule: this.contextModule,\n options: args.options ?? {},\n },\n loggerFactory: this.dmkLoggerFactory,\n }),\n });\n }\n\n signTypedData(args: {\n derivationPath: string;\n parser: TypedDataParserService;\n data: TypedData;\n skipOpenApp: boolean;\n }): SignTypedDataDAReturnType {\n return this.dmk.executeDeviceAction({\n sessionId: this.sessionId,\n deviceAction: new SignTypedDataDeviceAction({\n input: {\n derivationPath: args.derivationPath,\n data: args.data,\n parser: args.parser,\n transactionMapper: this.mapper,\n transactionParser: this.parser,\n contextModule: this.contextModule,\n skipOpenApp: args.skipOpenApp,\n },\n loggerFactory: this.dmkLoggerFactory,\n }),\n });\n }\n\n signDelegationAuthorization(args: {\n derivationPath: string;\n chainId: number;\n address: string;\n nonce: number;\n }): SignDelegationAuthorizationDAReturnType {\n const taskLogger = this.dmkLoggerFactory(\n \"SendSignAuthorizationDelegationTask\",\n );\n return this.dmk.executeDeviceAction({\n sessionId: this.sessionId,\n deviceAction: new CallTaskInAppDeviceAction({\n input: {\n task: async (internalApi) =>\n new SendSignAuthorizationDelegationTask(internalApi, {\n ...args,\n logger: taskLogger,\n }).run(),\n appName: APP_NAME,\n requiredUserInteraction:\n UserInteractionRequired.SignDelegationAuthorization,\n skipOpenApp: false,\n },\n logger: this.dmkLoggerFactory(\"SendSignAuthorizationDelegationTask\"),\n }),\n });\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["EthAppBinder_exports", "__export", "EthAppBinder", "__toCommonJS", "import_device_management_kit", "import_inversify", "import_SignTypedDataDeviceAction", "import_SendSignPersonalMessageTask", "import_externalTypes", "import_transactionTypes", "import_SignTransactionDeviceAction", "import_VerifySafeAddress", "import_SendGetAddressTask", "import_SendSignAuthorizationDelegationTask", "import_constants", "EthAppBinder", "dmk", "contextModule", "mapper", "parser", "sessionId", "dmkLoggerFactory", "args", "taskLogger", "internalApi", "__decorateClass", "__decorateParam"]
4
+ "sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n DeviceManagementKit,\n type DeviceSessionId,\n type LoggerPublisherService,\n} from \"@ledgerhq/device-management-kit\";\nimport { CallTaskInAppDeviceAction } from \"@ledgerhq/device-management-kit\";\nimport { UserInteractionRequired } from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport { type GetAddressDAReturnType } from \"@api/app-binder/GetAddressDeviceActionTypes\";\nimport { SignDelegationAuthorizationDAReturnType } from \"@api/app-binder/SignDelegationAuthorizationTypes\";\nimport { type SignPersonalMessageDAReturnType } from \"@api/app-binder/SignPersonalMessageDeviceActionTypes\";\nimport { type SignTransactionDAReturnType } from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { type SignTypedDataDAReturnType } from \"@api/app-binder/SignTypedDataDeviceActionTypes\";\nimport { VerifySafeAddressDAReturnType } from \"@api/app-binder/VerifySafeAddressDeviceActionTypes\";\nimport { type EvmAddressBook } from \"@api/model/EvmAddressBook\";\nimport { SafeAddressOptions } from \"@api/model/SafeAddressOptions\";\nimport { type TransactionOptions } from \"@api/model/TransactionOptions\";\nimport { type TypedData } from \"@api/model/TypedData\";\nimport { SignTypedDataDeviceAction } from \"@internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction\";\nimport { SendSignPersonalMessageTask } from \"@internal/app-binder/task/SendSignPersonalMessageTask\";\nimport { externalTypes } from \"@internal/externalTypes\";\nimport { transactionTypes } from \"@internal/transaction/di/transactionTypes\";\nimport { type TransactionMapperService } from \"@internal/transaction/service/mapper/TransactionMapperService\";\nimport { TransactionParserService } from \"@internal/transaction/service/parser/TransactionParserService\";\nimport { type TypedDataParserService } from \"@internal/typed-data/service/TypedDataParserService\";\n\nimport { SignTransactionDeviceAction } from \"./device-action/SignTransaction/SignTransactionDeviceAction\";\nimport { VerifySafeAddressDeviceAction } from \"./device-action/VerifySafeAddress/VerifySafeAddress\";\nimport { SendGetAddressTask } from \"./task/SendGetAddressTask\";\nimport { SendSignAuthorizationDelegationTask } from \"./task/SendSignAuthorizationDelegationTask\";\nimport { APP_NAME } from \"./constants\";\n\n@injectable()\nexport class EthAppBinder {\n constructor(\n @inject(externalTypes.Dmk) private dmk: DeviceManagementKit,\n @inject(externalTypes.ContextModule) private contextModule: ContextModule,\n @inject(transactionTypes.TransactionMapperService)\n private mapper: TransactionMapperService,\n @inject(transactionTypes.TransactionParserService)\n private parser: TransactionParserService,\n @inject(externalTypes.SessionId) private sessionId: DeviceSessionId,\n @inject(externalTypes.DmkLoggerFactory)\n private dmkLoggerFactory: (tag: string) => LoggerPublisherService,\n @inject(externalTypes.AddressBook) private addressBook: EvmAddressBook,\n ) {}\n\n getAddress(args: {\n derivationPath: string;\n checkOnDevice: boolean;\n returnChainCode: boolean;\n skipOpenApp: boolean;\n chainId?: number;\n }): GetAddressDAReturnType {\n const taskLogger = this.dmkLoggerFactory(\"SendGetAddressTask\");\n return this.dmk.executeDeviceAction({\n sessionId: this.sessionId,\n deviceAction: new CallTaskInAppDeviceAction({\n input: {\n task: async (internalApi) =>\n new SendGetAddressTask(internalApi, {\n contextModule: this.contextModule,\n derivationPath: args.derivationPath,\n checkOnDevice: args.checkOnDevice,\n returnChainCode: args.returnChainCode,\n chainId: args.chainId,\n loggerFactory: this.dmkLoggerFactory,\n }).run(),\n appName: APP_NAME,\n requiredUserInteraction: args.checkOnDevice\n ? UserInteractionRequired.VerifyAddress\n : UserInteractionRequired.None,\n skipOpenApp: args.skipOpenApp,\n },\n logger: taskLogger,\n }),\n });\n }\n\n verifySafeAddress(args: {\n safeContractAddress: string;\n options?: SafeAddressOptions;\n }): VerifySafeAddressDAReturnType {\n return this.dmk.executeDeviceAction({\n sessionId: this.sessionId,\n deviceAction: new VerifySafeAddressDeviceAction({\n input: {\n safeContractAddress: args.safeContractAddress,\n contextModule: this.contextModule,\n options: args.options ?? { chainId: 1 },\n },\n loggerFactory: this.dmkLoggerFactory,\n }),\n });\n }\n\n signPersonalMessage(args: {\n derivationPath: string;\n message: string | Uint8Array;\n skipOpenApp: boolean;\n }): SignPersonalMessageDAReturnType {\n const taskLogger = this.dmkLoggerFactory(\"SendSignPersonalMessageTask\");\n return this.dmk.executeDeviceAction({\n sessionId: this.sessionId,\n deviceAction: new CallTaskInAppDeviceAction({\n input: {\n task: async (internalApi) =>\n new SendSignPersonalMessageTask(internalApi, {\n ...args,\n logger: taskLogger,\n }).run(),\n appName: APP_NAME,\n requiredUserInteraction: UserInteractionRequired.SignPersonalMessage,\n skipOpenApp: args.skipOpenApp,\n },\n logger: this.dmkLoggerFactory(\"SendSignPersonalMessageTask\"),\n }),\n });\n }\n\n signTransaction(args: {\n derivationPath: string;\n transaction: Uint8Array;\n options?: TransactionOptions;\n }): SignTransactionDAReturnType {\n return this.dmk.executeDeviceAction({\n sessionId: this.sessionId,\n deviceAction: new SignTransactionDeviceAction({\n input: {\n derivationPath: args.derivationPath,\n transaction: args.transaction,\n mapper: this.mapper,\n parser: this.parser,\n contextModule: this.contextModule,\n addressBook: this.addressBook,\n options: args.options ?? {},\n },\n loggerFactory: this.dmkLoggerFactory,\n }),\n });\n }\n\n signTypedData(args: {\n derivationPath: string;\n parser: TypedDataParserService;\n data: TypedData;\n skipOpenApp: boolean;\n }): SignTypedDataDAReturnType {\n return this.dmk.executeDeviceAction({\n sessionId: this.sessionId,\n deviceAction: new SignTypedDataDeviceAction({\n input: {\n derivationPath: args.derivationPath,\n data: args.data,\n parser: args.parser,\n transactionMapper: this.mapper,\n transactionParser: this.parser,\n contextModule: this.contextModule,\n skipOpenApp: args.skipOpenApp,\n },\n loggerFactory: this.dmkLoggerFactory,\n }),\n });\n }\n\n signDelegationAuthorization(args: {\n derivationPath: string;\n chainId: number;\n address: string;\n nonce: number;\n }): SignDelegationAuthorizationDAReturnType {\n const taskLogger = this.dmkLoggerFactory(\n \"SendSignAuthorizationDelegationTask\",\n );\n return this.dmk.executeDeviceAction({\n sessionId: this.sessionId,\n deviceAction: new CallTaskInAppDeviceAction({\n input: {\n task: async (internalApi) =>\n new SendSignAuthorizationDelegationTask(internalApi, {\n ...args,\n logger: taskLogger,\n }).run(),\n appName: APP_NAME,\n requiredUserInteraction:\n UserInteractionRequired.SignDelegationAuthorization,\n skipOpenApp: false,\n },\n logger: this.dmkLoggerFactory(\"SendSignAuthorizationDelegationTask\"),\n }),\n });\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["EthAppBinder_exports", "__export", "EthAppBinder", "__toCommonJS", "import_device_management_kit", "import_inversify", "import_SignTypedDataDeviceAction", "import_SendSignPersonalMessageTask", "import_externalTypes", "import_transactionTypes", "import_SignTransactionDeviceAction", "import_VerifySafeAddress", "import_SendGetAddressTask", "import_SendSignAuthorizationDelegationTask", "import_constants", "EthAppBinder", "dmk", "contextModule", "mapper", "parser", "sessionId", "dmkLoggerFactory", "addressBook", "args", "taskLogger", "internalApi", "__decorateClass", "__decorateParam"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var S=require("@ledgerhq/device-management-kit"),c=require("@ledgerhq/device-management-kit"),y=require("@ledgerhq/device-management-kit"),h=require("ethers"),m=require("rxjs"),f=require("./constants"),d=require("./EthAppBinder");const g=()=>({debug:vi.fn(),info:vi.fn(),warn:vi.fn(),error:vi.fn(),subscribers:[]});describe("EthAppBinder",()=>{const i={sendCommand:vi.fn(),executeDeviceAction:vi.fn()},l={getFieldContext:vi.fn(),getContexts:vi.fn(),getTypedDataFilters:vi.fn(),report:vi.fn()},D={mapTransactionToSubset:vi.fn()},A={extractValue:vi.fn()};beforeEach(()=>{vi.clearAllMocks()}),describe("getAddress",()=>{it("should return the address, publicKey, and chainCode",()=>new Promise((o,a)=>{const t="0xF7C69BedB292Dd3fC2cA4103989B5BD705164c43",r="04e3785ca";vi.spyOn(i,"executeDeviceAction").mockReturnValue({observable:(0,m.from)([{status:c.DeviceActionStatus.Completed,output:{address:t,publicKey:r,chainCode:void 0}}]),cancel:vi.fn()});const p=new d.EthAppBinder(i,l,D,A,"sessionId",g),{observable:s}=p.getAddress({derivationPath:"44'/60'/3'/2/1",checkOnDevice:!1,returnChainCode:!1,skipOpenApp:!1}),e=[];s.subscribe({next:n=>{e.push(n)},error:n=>{a(n)},complete:()=>{try{expect(e).toEqual([{status:c.DeviceActionStatus.Completed,output:{address:t,publicKey:r,chainCode:void 0}}]),o()}catch(n){a(n)}}})})),describe("calls of executeDeviceAction with the correct params",()=>{const o={derivationPath:"44'/60'/3'/2/1",checkOnDevice:!1,returnChainCode:!1,skipOpenApp:!1};test("when checkOnDevice is true: UserInteractionRequired.VerifyAddress",()=>{const t={...o,checkOnDevice:!0};new d.EthAppBinder(i,l,D,A,"sessionId",g).getAddress(t),expect(i.executeDeviceAction).toHaveBeenCalledWith(expect.objectContaining({sessionId:"sessionId",deviceAction:expect.objectContaining({input:expect.objectContaining({appName:f.APP_NAME,requiredUserInteraction:y.UserInteractionRequired.VerifyAddress,skipOpenApp:!1,task:expect.any(Function)})})}))}),test("when checkOnDevice is false: UserInteractionRequired.None",()=>{const t={...o,checkOnDevice:!1};new d.EthAppBinder(i,l,D,A,"sessionId",g).getAddress(t),expect(i.executeDeviceAction).toHaveBeenCalledWith(expect.objectContaining({sessionId:"sessionId",deviceAction:expect.objectContaining({input:expect.objectContaining({appName:f.APP_NAME,requiredUserInteraction:y.UserInteractionRequired.None,skipOpenApp:!1,task:expect.any(Function)})})}))})})}),describe("signTransaction",()=>{it("should return the signature",()=>new Promise((o,a)=>{const t={r:"0xDEAD",s:"0xBEEF",v:0},r=(0,S.hexaStringToBuffer)(h.Transaction.from({to:"0x1234567890123456789012345678901234567890",value:0n}).unsignedSerialized),u={};vi.spyOn(i,"executeDeviceAction").mockReturnValue({observable:(0,m.from)([{status:c.DeviceActionStatus.Completed,output:t}]),cancel:vi.fn()});const p=new d.EthAppBinder(i,l,D,A,"sessionId",g),{observable:s}=p.signTransaction({derivationPath:"44'/60'/3'/2/1",transaction:r,options:u}),e=[];s.subscribe({next:n=>{e.push(n)},error:n=>{a(n)},complete:()=>{try{expect(e).toEqual([{status:c.DeviceActionStatus.Completed,output:t}]),o()}catch(n){a(n)}}})})),it("should return the signature without options",()=>new Promise((o,a)=>{const t={r:"0xDEAD",s:"0xBEEF",v:0},r=(0,S.hexaStringToBuffer)(h.Transaction.from({to:"0x1234567890123456789012345678901234567890",value:0n}).unsignedSerialized);vi.spyOn(i,"executeDeviceAction").mockReturnValue({observable:(0,m.from)([{status:c.DeviceActionStatus.Completed,output:t}]),cancel:vi.fn()});const u=new d.EthAppBinder(i,l,D,A,"sessionId",g),{observable:p}=u.signTransaction({derivationPath:"44'/60'/3'/2/1",transaction:r,options:void 0}),s=[];p.subscribe({next:e=>{s.push(e)},error:e=>{a(e)},complete:()=>{try{expect(s).toEqual([{status:c.DeviceActionStatus.Completed,output:t}]),o()}catch(e){a(e)}}})}))}),describe("signMessage",()=>{it("should return the signature",()=>new Promise((o,a)=>{const t={r:"0xDEAD",s:"0xBEEF",v:0},r="Hello, World!";vi.spyOn(i,"executeDeviceAction").mockReturnValue({observable:(0,m.from)([{status:c.DeviceActionStatus.Completed,output:t}]),cancel:vi.fn()});const u=new d.EthAppBinder(i,l,D,A,"sessionId",g),{observable:p}=u.signPersonalMessage({derivationPath:"44'/60'/3'/2/1",message:r,skipOpenApp:!1}),s=[];p.subscribe({next:e=>{s.push(e)},error:e=>{a(e)},complete:()=>{try{expect(s).toEqual([{status:c.DeviceActionStatus.Completed,output:t}]),o()}catch(e){a(e)}}})}))}),describe("signDelegationAuthorization",()=>{it("should return the signature",()=>new Promise((o,a)=>{const t={r:"0xDEAD",s:"0xBEEF",v:0},r=2,u=42,p="0xaddress";vi.spyOn(i,"executeDeviceAction").mockReturnValue({observable:(0,m.from)([{status:c.DeviceActionStatus.Completed,output:t}]),cancel:vi.fn()});const s=new d.EthAppBinder(i,l,D,A,"sessionId",g),{observable:e}=s.signDelegationAuthorization({derivationPath:"44'/60'/3'/2/1",chainId:r,address:p,nonce:u}),n=[];e.subscribe({next:v=>{n.push(v)},error:v=>{a(v)},complete:()=>{try{expect(n).toEqual([{status:c.DeviceActionStatus.Completed,output:t}]),o()}catch(v){a(v)}}})}))}),describe("signTypedData",()=>{it("should return the signature",()=>new Promise((o,a)=>{const t={r:"0xDEAD",s:"0xBEEF",v:0},r={domain:{},types:{},primaryType:"test",message:{}},u={parse:vi.fn()};vi.spyOn(i,"executeDeviceAction").mockReturnValue({observable:(0,m.from)([{status:c.DeviceActionStatus.Completed,output:t}]),cancel:vi.fn()});const p=new d.EthAppBinder(i,l,D,A,"sessionId",g),{observable:s}=p.signTypedData({derivationPath:"44'/60'/3'/2/1",parser:u,data:r,skipOpenApp:!1}),e=[];s.subscribe({next:n=>{e.push(n)},error:n=>{a(n)},complete:()=>{try{expect(e).toEqual([{status:c.DeviceActionStatus.Completed,output:t}]),o()}catch(n){a(n)}}})}))})});
1
+ "use strict";var y=require("@ledgerhq/device-management-kit"),c=require("@ledgerhq/device-management-kit"),h=require("@ledgerhq/device-management-kit"),x=require("ethers"),v=require("rxjs"),g=require("../../api/model/EvmAddressBook"),f=require("./constants"),d=require("./EthAppBinder");const m=()=>({debug:vi.fn(),info:vi.fn(),warn:vi.fn(),error:vi.fn(),subscribers:[]});describe("EthAppBinder",()=>{const o={sendCommand:vi.fn(),executeDeviceAction:vi.fn()},l={getFieldContext:vi.fn(),getContexts:vi.fn(),getTypedDataFilters:vi.fn(),report:vi.fn()},D={mapTransactionToSubset:vi.fn()},A={extractValue:vi.fn()};beforeEach(()=>{vi.clearAllMocks()}),describe("getAddress",()=>{it("should return the address, publicKey, and chainCode",()=>new Promise((i,n)=>{const e="0xF7C69BedB292Dd3fC2cA4103989B5BD705164c43",s="04e3785ca";vi.spyOn(o,"executeDeviceAction").mockReturnValue({observable:(0,v.from)([{status:c.DeviceActionStatus.Completed,output:{address:e,publicKey:s,chainCode:void 0}}]),cancel:vi.fn()});const p=new d.EthAppBinder(o,l,D,A,"sessionId",m,g.EMPTY_EVM_ADDRESS_BOOK),{observable:r}=p.getAddress({derivationPath:"44'/60'/3'/2/1",checkOnDevice:!1,returnChainCode:!1,skipOpenApp:!1}),t=[];r.subscribe({next:a=>{t.push(a)},error:a=>{n(a)},complete:()=>{try{expect(t).toEqual([{status:c.DeviceActionStatus.Completed,output:{address:e,publicKey:s,chainCode:void 0}}]),i()}catch(a){n(a)}}})})),describe("calls of executeDeviceAction with the correct params",()=>{const i={derivationPath:"44'/60'/3'/2/1",checkOnDevice:!1,returnChainCode:!1,skipOpenApp:!1};test("when checkOnDevice is true: UserInteractionRequired.VerifyAddress",()=>{const e={...i,checkOnDevice:!0};new d.EthAppBinder(o,l,D,A,"sessionId",m,g.EMPTY_EVM_ADDRESS_BOOK).getAddress(e),expect(o.executeDeviceAction).toHaveBeenCalledWith(expect.objectContaining({sessionId:"sessionId",deviceAction:expect.objectContaining({input:expect.objectContaining({appName:f.APP_NAME,requiredUserInteraction:h.UserInteractionRequired.VerifyAddress,skipOpenApp:!1,task:expect.any(Function)})})}))}),test("when checkOnDevice is false: UserInteractionRequired.None",()=>{const e={...i,checkOnDevice:!1};new d.EthAppBinder(o,l,D,A,"sessionId",m,g.EMPTY_EVM_ADDRESS_BOOK).getAddress(e),expect(o.executeDeviceAction).toHaveBeenCalledWith(expect.objectContaining({sessionId:"sessionId",deviceAction:expect.objectContaining({input:expect.objectContaining({appName:f.APP_NAME,requiredUserInteraction:h.UserInteractionRequired.None,skipOpenApp:!1,task:expect.any(Function)})})}))})})}),describe("signTransaction",()=>{it("should return the signature",()=>new Promise((i,n)=>{const e={r:"0xDEAD",s:"0xBEEF",v:0},s=(0,y.hexaStringToBuffer)(x.Transaction.from({to:"0x1234567890123456789012345678901234567890",value:0n}).unsignedSerialized),u={};vi.spyOn(o,"executeDeviceAction").mockReturnValue({observable:(0,v.from)([{status:c.DeviceActionStatus.Completed,output:e}]),cancel:vi.fn()});const p=new d.EthAppBinder(o,l,D,A,"sessionId",m,g.EMPTY_EVM_ADDRESS_BOOK),{observable:r}=p.signTransaction({derivationPath:"44'/60'/3'/2/1",transaction:s,options:u}),t=[];r.subscribe({next:a=>{t.push(a)},error:a=>{n(a)},complete:()=>{try{expect(t).toEqual([{status:c.DeviceActionStatus.Completed,output:e}]),i()}catch(a){n(a)}}})})),it("should return the signature without options",()=>new Promise((i,n)=>{const e={r:"0xDEAD",s:"0xBEEF",v:0},s=(0,y.hexaStringToBuffer)(x.Transaction.from({to:"0x1234567890123456789012345678901234567890",value:0n}).unsignedSerialized);vi.spyOn(o,"executeDeviceAction").mockReturnValue({observable:(0,v.from)([{status:c.DeviceActionStatus.Completed,output:e}]),cancel:vi.fn()});const u=new d.EthAppBinder(o,l,D,A,"sessionId",m,g.EMPTY_EVM_ADDRESS_BOOK),{observable:p}=u.signTransaction({derivationPath:"44'/60'/3'/2/1",transaction:s,options:void 0}),r=[];p.subscribe({next:t=>{r.push(t)},error:t=>{n(t)},complete:()=>{try{expect(r).toEqual([{status:c.DeviceActionStatus.Completed,output:e}]),i()}catch(t){n(t)}}})})),it("passes the injected address book to the sign-transaction device action",()=>{const i={contactGroups:[{contactName:"Alice",groupHandle:new Uint8Array(64).fill(170),hmacProof:new Uint8Array(32).fill(187),externalAddresses:[{scope:"Ethereum",address:"0x1111111111111111111111111111111111111111",chainId:1n,hmacRest:new Uint8Array(32).fill(204)}]}],ledgerAccounts:[]},n=vi.spyOn(o,"executeDeviceAction").mockReturnValue({observable:(0,v.from)([]),cancel:vi.fn()});new d.EthAppBinder(o,l,D,A,"sessionId",m,i).signTransaction({derivationPath:"44'/60'/3'/2/1",transaction:new Uint8Array([1])});const{deviceAction:e}=n.mock.calls[0][0];expect(e.input.addressBook).toBe(i)})}),describe("signMessage",()=>{it("should return the signature",()=>new Promise((i,n)=>{const e={r:"0xDEAD",s:"0xBEEF",v:0},s="Hello, World!";vi.spyOn(o,"executeDeviceAction").mockReturnValue({observable:(0,v.from)([{status:c.DeviceActionStatus.Completed,output:e}]),cancel:vi.fn()});const u=new d.EthAppBinder(o,l,D,A,"sessionId",m,g.EMPTY_EVM_ADDRESS_BOOK),{observable:p}=u.signPersonalMessage({derivationPath:"44'/60'/3'/2/1",message:s,skipOpenApp:!1}),r=[];p.subscribe({next:t=>{r.push(t)},error:t=>{n(t)},complete:()=>{try{expect(r).toEqual([{status:c.DeviceActionStatus.Completed,output:e}]),i()}catch(t){n(t)}}})}))}),describe("signDelegationAuthorization",()=>{it("should return the signature",()=>new Promise((i,n)=>{const e={r:"0xDEAD",s:"0xBEEF",v:0},s=2,u=42,p="0xaddress";vi.spyOn(o,"executeDeviceAction").mockReturnValue({observable:(0,v.from)([{status:c.DeviceActionStatus.Completed,output:e}]),cancel:vi.fn()});const r=new d.EthAppBinder(o,l,D,A,"sessionId",m,g.EMPTY_EVM_ADDRESS_BOOK),{observable:t}=r.signDelegationAuthorization({derivationPath:"44'/60'/3'/2/1",chainId:s,address:p,nonce:u}),a=[];t.subscribe({next:S=>{a.push(S)},error:S=>{n(S)},complete:()=>{try{expect(a).toEqual([{status:c.DeviceActionStatus.Completed,output:e}]),i()}catch(S){n(S)}}})}))}),describe("signTypedData",()=>{it("should return the signature",()=>new Promise((i,n)=>{const e={r:"0xDEAD",s:"0xBEEF",v:0},s={domain:{},types:{},primaryType:"test",message:{}},u={parse:vi.fn()};vi.spyOn(o,"executeDeviceAction").mockReturnValue({observable:(0,v.from)([{status:c.DeviceActionStatus.Completed,output:e}]),cancel:vi.fn()});const p=new d.EthAppBinder(o,l,D,A,"sessionId",m,g.EMPTY_EVM_ADDRESS_BOOK),{observable:r}=p.signTypedData({derivationPath:"44'/60'/3'/2/1",parser:u,data:s,skipOpenApp:!1}),t=[];r.subscribe({next:a=>{t.push(a)},error:a=>{n(a)},complete:()=>{try{expect(t).toEqual([{status:c.DeviceActionStatus.Completed,output:e}]),i()}catch(a){n(a)}}})}))})});
2
2
  //# sourceMappingURL=EthAppBinder.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/internal/app-binder/EthAppBinder.test.ts"],
4
- "sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n type DeviceActionState,\n type DeviceManagementKit,\n hexaStringToBuffer,\n} from \"@ledgerhq/device-management-kit\";\nimport { DeviceActionStatus } from \"@ledgerhq/device-management-kit\";\nimport { UserInteractionRequired } from \"@ledgerhq/device-management-kit\";\nimport { Transaction } from \"ethers\";\nimport { from } from \"rxjs\";\n\nimport {\n type GetAddressDAError,\n type GetAddressDAIntermediateValue,\n type GetAddressDAOutput,\n} from \"@api/app-binder/GetAddressDeviceActionTypes\";\nimport {\n type SignDelegationAuthorizationDAError,\n type SignDelegationAuthorizationDAIntermediateValue,\n type SignDelegationAuthorizationDAOutput,\n} from \"@api/app-binder/SignDelegationAuthorizationTypes\";\nimport {\n type SignPersonalMessageDAError,\n type SignPersonalMessageDAIntermediateValue,\n type SignPersonalMessageDAOutput,\n} from \"@api/app-binder/SignPersonalMessageDeviceActionTypes\";\nimport {\n type SignTransactionDAError,\n type SignTransactionDAIntermediateValue,\n type SignTransactionDAOutput,\n} from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport {\n type SignTypedDataDAError,\n type SignTypedDataDAIntermediateValue,\n type SignTypedDataDAOutput,\n} from \"@api/app-binder/SignTypedDataDeviceActionTypes\";\nimport { type Signature } from \"@api/model/Signature\";\nimport { type TypedData } from \"@api/model/TypedData\";\nimport { type TransactionMapperService } from \"@internal/transaction/service/mapper/TransactionMapperService\";\nimport { type TransactionParserService } from \"@internal/transaction/service/parser/TransactionParserService\";\nimport { type TypedDataParserService } from \"@internal/typed-data/service/TypedDataParserService\";\n\nimport { APP_NAME } from \"./constants\";\nimport { EthAppBinder } from \"./EthAppBinder\";\n\nconst mockLoggerFactory = () => ({\n debug: vi.fn(),\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n subscribers: [],\n});\n\ndescribe(\"EthAppBinder\", () => {\n const mockedDmk: DeviceManagementKit = {\n sendCommand: vi.fn(),\n executeDeviceAction: vi.fn(),\n } as unknown as DeviceManagementKit;\n const mockedContextModule = {\n getFieldContext: vi.fn(),\n getContexts: vi.fn(),\n getTypedDataFilters: vi.fn(),\n report: vi.fn(),\n };\n const mockedMapper: TransactionMapperService = {\n mapTransactionToSubset: vi.fn(),\n } as unknown as TransactionMapperService;\n const mockedParser: TransactionParserService = {\n extractValue: vi.fn(),\n } as unknown as TransactionParserService;\n\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n describe(\"getAddress\", () => {\n it(\"should return the address, publicKey, and chainCode\", () =>\n new Promise<void>((resolve, reject) => {\n // GIVEN\n const address = \"0xF7C69BedB292Dd3fC2cA4103989B5BD705164c43\";\n const publicKey = \"04e3785ca\";\n const chainCode = undefined;\n\n vi.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: { address, publicKey, chainCode },\n } as DeviceActionState<\n GetAddressDAOutput,\n GetAddressDAError,\n GetAddressDAIntermediateValue\n >,\n ]),\n cancel: vi.fn(),\n });\n\n // WHEN\n const appBinder = new EthAppBinder(\n mockedDmk,\n mockedContextModule as unknown as ContextModule,\n mockedMapper,\n mockedParser,\n \"sessionId\",\n mockLoggerFactory,\n );\n const { observable } = appBinder.getAddress({\n derivationPath: \"44'/60'/3'/2/1\",\n checkOnDevice: false,\n returnChainCode: false,\n skipOpenApp: false,\n });\n\n // THEN\n const states: DeviceActionState<\n GetAddressDAOutput,\n GetAddressDAError,\n GetAddressDAIntermediateValue\n >[] = [];\n observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n reject(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: { address, publicKey, chainCode },\n },\n ]);\n resolve();\n } catch (err) {\n reject(err as Error);\n }\n },\n });\n }));\n\n describe(\"calls of executeDeviceAction with the correct params\", () => {\n const baseParams = {\n derivationPath: \"44'/60'/3'/2/1\",\n checkOnDevice: false,\n returnChainCode: false,\n skipOpenApp: false,\n };\n\n test(\"when checkOnDevice is true: UserInteractionRequired.VerifyAddress\", () => {\n // GIVEN\n const checkOnDevice = true;\n const params = {\n ...baseParams,\n checkOnDevice,\n };\n\n // WHEN\n const appBinder = new EthAppBinder(\n mockedDmk,\n mockedContextModule as unknown as ContextModule,\n mockedMapper,\n mockedParser,\n \"sessionId\",\n mockLoggerFactory,\n );\n appBinder.getAddress(params);\n\n // THEN - getAddress uses CallTaskInAppDeviceAction with a task (loads dynamic network context then sends getAddress)\n expect(mockedDmk.executeDeviceAction).toHaveBeenCalledWith(\n expect.objectContaining({\n sessionId: \"sessionId\",\n deviceAction: expect.objectContaining({\n input: expect.objectContaining({\n appName: APP_NAME,\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n skipOpenApp: false,\n task: expect.any(Function),\n }),\n }),\n }),\n );\n });\n\n test(\"when checkOnDevice is false: UserInteractionRequired.None\", () => {\n // GIVEN\n const checkOnDevice = false;\n const params = {\n ...baseParams,\n checkOnDevice,\n };\n\n // WHEN\n const appBinder = new EthAppBinder(\n mockedDmk,\n mockedContextModule as unknown as ContextModule,\n mockedMapper,\n mockedParser,\n \"sessionId\",\n mockLoggerFactory,\n );\n appBinder.getAddress(params);\n\n // THEN - getAddress uses CallTaskInAppDeviceAction with a task (loads dynamic network context then sends getAddress)\n expect(mockedDmk.executeDeviceAction).toHaveBeenCalledWith(\n expect.objectContaining({\n sessionId: \"sessionId\",\n deviceAction: expect.objectContaining({\n input: expect.objectContaining({\n appName: APP_NAME,\n requiredUserInteraction: UserInteractionRequired.None,\n skipOpenApp: false,\n task: expect.any(Function),\n }),\n }),\n }),\n );\n });\n });\n });\n\n describe(\"signTransaction\", () => {\n it(\"should return the signature\", () =>\n new Promise<void>((resolve, reject) => {\n // GIVEN\n const signature: Signature = {\n r: `0xDEAD`,\n s: `0xBEEF`,\n v: 0,\n };\n const transaction: Uint8Array = hexaStringToBuffer(\n Transaction.from({\n to: \"0x1234567890123456789012345678901234567890\",\n value: 0n,\n }).unsignedSerialized,\n )!;\n const options = {};\n\n vi.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: signature,\n } as DeviceActionState<\n SignTypedDataDAOutput,\n SignTypedDataDAError,\n SignTypedDataDAIntermediateValue\n >,\n ]),\n cancel: vi.fn(),\n });\n\n // WHEN\n const appBinder = new EthAppBinder(\n mockedDmk,\n mockedContextModule as unknown as ContextModule,\n mockedMapper,\n mockedParser,\n \"sessionId\",\n mockLoggerFactory,\n );\n const { observable } = appBinder.signTransaction({\n derivationPath: \"44'/60'/3'/2/1\",\n transaction,\n options,\n });\n\n // THEN\n const states: DeviceActionState<\n SignTransactionDAOutput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >[] = [];\n observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n reject(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: signature,\n },\n ]);\n resolve();\n } catch (err) {\n reject(err as Error);\n }\n },\n });\n }));\n\n it(\"should return the signature without options\", () =>\n new Promise<void>((resolve, reject) => {\n // GIVEN\n const signature: Signature = {\n r: `0xDEAD`,\n s: `0xBEEF`,\n v: 0,\n };\n const transaction: Uint8Array = hexaStringToBuffer(\n Transaction.from({\n to: \"0x1234567890123456789012345678901234567890\",\n value: 0n,\n }).unsignedSerialized,\n )!;\n\n vi.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: signature,\n } as DeviceActionState<\n SignTypedDataDAOutput,\n SignTypedDataDAError,\n SignTypedDataDAIntermediateValue\n >,\n ]),\n cancel: vi.fn(),\n });\n\n // WHEN\n const appBinder = new EthAppBinder(\n mockedDmk,\n mockedContextModule as unknown as ContextModule,\n mockedMapper,\n mockedParser,\n \"sessionId\",\n mockLoggerFactory,\n );\n const { observable } = appBinder.signTransaction({\n derivationPath: \"44'/60'/3'/2/1\",\n transaction,\n options: undefined,\n });\n\n // THEN\n const states: DeviceActionState<\n SignTransactionDAOutput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >[] = [];\n observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n reject(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: signature,\n },\n ]);\n resolve();\n } catch (err) {\n reject(err as Error);\n }\n },\n });\n }));\n });\n\n describe(\"signMessage\", () => {\n it(\"should return the signature\", () =>\n new Promise<void>((resolve, reject) => {\n // GIVEN\n const signature: Signature = {\n r: `0xDEAD`,\n s: `0xBEEF`,\n v: 0,\n };\n const message = \"Hello, World!\";\n\n vi.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: signature,\n } as DeviceActionState<\n SignPersonalMessageDAOutput,\n SignPersonalMessageDAError,\n SignPersonalMessageDAIntermediateValue\n >,\n ]),\n cancel: vi.fn(),\n });\n\n // WHEN\n const appBinder = new EthAppBinder(\n mockedDmk,\n mockedContextModule as unknown as ContextModule,\n mockedMapper,\n mockedParser,\n \"sessionId\",\n mockLoggerFactory,\n );\n const { observable } = appBinder.signPersonalMessage({\n derivationPath: \"44'/60'/3'/2/1\",\n message,\n skipOpenApp: false,\n });\n\n // THEN\n const states: DeviceActionState<\n SignPersonalMessageDAOutput,\n SignPersonalMessageDAError,\n SignPersonalMessageDAIntermediateValue\n >[] = [];\n observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n reject(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: signature,\n },\n ]);\n resolve();\n } catch (err) {\n reject(err as Error);\n }\n },\n });\n }));\n });\n\n describe(\"signDelegationAuthorization\", () => {\n it(\"should return the signature\", () =>\n new Promise<void>((resolve, reject) => {\n // GIVEN\n const signature: Signature = {\n r: `0xDEAD`,\n s: `0xBEEF`,\n v: 0,\n };\n const chainId = 2;\n const nonce = 42;\n const address = \"0xaddress\";\n\n vi.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: signature,\n } as DeviceActionState<\n SignDelegationAuthorizationDAOutput,\n SignDelegationAuthorizationDAError,\n SignDelegationAuthorizationDAIntermediateValue\n >,\n ]),\n cancel: vi.fn(),\n });\n\n // WHEN\n const appBinder = new EthAppBinder(\n mockedDmk,\n mockedContextModule as unknown as ContextModule,\n mockedMapper,\n mockedParser,\n \"sessionId\",\n mockLoggerFactory,\n );\n const { observable } = appBinder.signDelegationAuthorization({\n derivationPath: \"44'/60'/3'/2/1\",\n chainId,\n address,\n nonce,\n });\n\n // THEN\n const states: DeviceActionState<\n SignDelegationAuthorizationDAOutput,\n SignDelegationAuthorizationDAError,\n SignDelegationAuthorizationDAIntermediateValue\n >[] = [];\n observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n reject(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: signature,\n },\n ]);\n resolve();\n } catch (err) {\n reject(err as Error);\n }\n },\n });\n }));\n });\n\n describe(\"signTypedData\", () => {\n it(\"should return the signature\", () =>\n new Promise<void>((resolve, reject) => {\n // GIVEN\n const signature: Signature = {\n r: `0xDEAD`,\n s: `0xBEEF`,\n v: 0,\n };\n const typedData: TypedData = {\n domain: {},\n types: {},\n primaryType: \"test\",\n message: {},\n };\n const parser: TypedDataParserService = {\n parse: vi.fn(),\n };\n\n vi.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: signature,\n } as DeviceActionState<\n SignTypedDataDAOutput,\n SignTypedDataDAError,\n SignTypedDataDAIntermediateValue\n >,\n ]),\n cancel: vi.fn(),\n });\n\n // WHEN\n const appBinder = new EthAppBinder(\n mockedDmk,\n mockedContextModule as unknown as ContextModule,\n mockedMapper,\n mockedParser,\n \"sessionId\",\n mockLoggerFactory,\n );\n const { observable } = appBinder.signTypedData({\n derivationPath: \"44'/60'/3'/2/1\",\n parser,\n data: typedData,\n skipOpenApp: false,\n });\n\n // THEN\n const states: DeviceActionState<\n SignTypedDataDAOutput,\n SignTypedDataDAError,\n SignTypedDataDAIntermediateValue\n >[] = [];\n observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n reject(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: signature,\n },\n ]);\n resolve();\n } catch (err) {\n reject(err as Error);\n }\n },\n });\n }));\n });\n});\n"],
5
- "mappings": "aACA,IAAAA,EAIO,2CACPA,EAAmC,2CACnCA,EAAwC,2CACxCC,EAA4B,kBAC5BC,EAAqB,gBAiCrBC,EAAyB,uBACzBC,EAA6B,0BAE7B,MAAMC,EAAoB,KAAO,CAC/B,MAAO,GAAG,GAAG,EACb,KAAM,GAAG,GAAG,EACZ,KAAM,GAAG,GAAG,EACZ,MAAO,GAAG,GAAG,EACb,YAAa,CAAC,CAChB,GAEA,SAAS,eAAgB,IAAM,CAC7B,MAAMC,EAAiC,CACrC,YAAa,GAAG,GAAG,EACnB,oBAAqB,GAAG,GAAG,CAC7B,EACMC,EAAsB,CAC1B,gBAAiB,GAAG,GAAG,EACvB,YAAa,GAAG,GAAG,EACnB,oBAAqB,GAAG,GAAG,EAC3B,OAAQ,GAAG,GAAG,CAChB,EACMC,EAAyC,CAC7C,uBAAwB,GAAG,GAAG,CAChC,EACMC,EAAyC,CAC7C,aAAc,GAAG,GAAG,CACtB,EAEA,WAAW,IAAM,CACf,GAAG,cAAc,CACnB,CAAC,EAED,SAAS,aAAc,IAAM,CAC3B,GAAG,sDAAuD,IACxD,IAAI,QAAc,CAACC,EAASC,IAAW,CAErC,MAAMC,EAAU,6CACVC,EAAY,YAGlB,GAAG,MAAMP,EAAW,qBAAqB,EAAE,gBAAgB,CACzD,cAAY,QAAK,CACf,CACE,OAAQ,qBAAmB,UAC3B,OAAQ,CAAE,QAAAM,EAAS,UAAAC,EAAW,gBAAU,CAC1C,CAKF,CAAC,EACD,OAAQ,GAAG,GAAG,CAChB,CAAC,EAGD,MAAMC,EAAY,IAAI,eACpBR,EACAC,EACAC,EACAC,EACA,YACAJ,CACF,EACM,CAAE,WAAAU,CAAW,EAAID,EAAU,WAAW,CAC1C,eAAgB,iBAChB,cAAe,GACf,gBAAiB,GACjB,YAAa,EACf,CAAC,EAGKE,EAIA,CAAC,EACPD,EAAW,UAAU,CACnB,KAAOE,GAAU,CACfD,EAAO,KAAKC,CAAK,CACnB,EACA,MAAQC,GAAQ,CACdP,EAAOO,CAAG,CACZ,EACA,SAAU,IAAM,CACd,GAAI,CACF,OAAOF,CAAM,EAAE,QAAQ,CACrB,CACE,OAAQ,qBAAmB,UAC3B,OAAQ,CAAE,QAAAJ,EAAS,UAAAC,EAAW,gBAAU,CAC1C,CACF,CAAC,EACDH,EAAQ,CACV,OAASQ,EAAK,CACZP,EAAOO,CAAY,CACrB,CACF,CACF,CAAC,CACH,CAAC,CAAC,EAEJ,SAAS,uDAAwD,IAAM,CACrE,MAAMC,EAAa,CACjB,eAAgB,iBAChB,cAAe,GACf,gBAAiB,GACjB,YAAa,EACf,EAEA,KAAK,oEAAqE,IAAM,CAG9E,MAAMC,EAAS,CACb,GAAGD,EACH,gBACF,EAGkB,IAAI,eACpBb,EACAC,EACAC,EACAC,EACA,YACAJ,CACF,EACU,WAAWe,CAAM,EAG3B,OAAOd,EAAU,mBAAmB,EAAE,qBACpC,OAAO,iBAAiB,CACtB,UAAW,YACX,aAAc,OAAO,iBAAiB,CACpC,MAAO,OAAO,iBAAiB,CAC7B,QAAS,WACT,wBAAyB,0BAAwB,cACjD,YAAa,GACb,KAAM,OAAO,IAAI,QAAQ,CAC3B,CAAC,CACH,CAAC,CACH,CAAC,CACH,CACF,CAAC,EAED,KAAK,4DAA6D,IAAM,CAGtE,MAAMc,EAAS,CACb,GAAGD,EACH,gBACF,EAGkB,IAAI,eACpBb,EACAC,EACAC,EACAC,EACA,YACAJ,CACF,EACU,WAAWe,CAAM,EAG3B,OAAOd,EAAU,mBAAmB,EAAE,qBACpC,OAAO,iBAAiB,CACtB,UAAW,YACX,aAAc,OAAO,iBAAiB,CACpC,MAAO,OAAO,iBAAiB,CAC7B,QAAS,WACT,wBAAyB,0BAAwB,KACjD,YAAa,GACb,KAAM,OAAO,IAAI,QAAQ,CAC3B,CAAC,CACH,CAAC,CACH,CAAC,CACH,CACF,CAAC,CACH,CAAC,CACH,CAAC,EAED,SAAS,kBAAmB,IAAM,CAChC,GAAG,8BAA+B,IAChC,IAAI,QAAc,CAACI,EAASC,IAAW,CAErC,MAAMU,EAAuB,CAC3B,EAAG,SACH,EAAG,SACH,EAAG,CACL,EACMC,KAA0B,sBAC9B,cAAY,KAAK,CACf,GAAI,6CACJ,MAAO,EACT,CAAC,EAAE,kBACL,EACMC,EAAU,CAAC,EAEjB,GAAG,MAAMjB,EAAW,qBAAqB,EAAE,gBAAgB,CACzD,cAAY,QAAK,CACf,CACE,OAAQ,qBAAmB,UAC3B,OAAQe,CACV,CAKF,CAAC,EACD,OAAQ,GAAG,GAAG,CAChB,CAAC,EAGD,MAAMP,EAAY,IAAI,eACpBR,EACAC,EACAC,EACAC,EACA,YACAJ,CACF,EACM,CAAE,WAAAU,CAAW,EAAID,EAAU,gBAAgB,CAC/C,eAAgB,iBAChB,YAAAQ,EACA,QAAAC,CACF,CAAC,EAGKP,EAIA,CAAC,EACPD,EAAW,UAAU,CACnB,KAAOE,GAAU,CACfD,EAAO,KAAKC,CAAK,CACnB,EACA,MAAQC,GAAQ,CACdP,EAAOO,CAAG,CACZ,EACA,SAAU,IAAM,CACd,GAAI,CACF,OAAOF,CAAM,EAAE,QAAQ,CACrB,CACE,OAAQ,qBAAmB,UAC3B,OAAQK,CACV,CACF,CAAC,EACDX,EAAQ,CACV,OAASQ,EAAK,CACZP,EAAOO,CAAY,CACrB,CACF,CACF,CAAC,CACH,CAAC,CAAC,EAEJ,GAAG,8CAA+C,IAChD,IAAI,QAAc,CAACR,EAASC,IAAW,CAErC,MAAMU,EAAuB,CAC3B,EAAG,SACH,EAAG,SACH,EAAG,CACL,EACMC,KAA0B,sBAC9B,cAAY,KAAK,CACf,GAAI,6CACJ,MAAO,EACT,CAAC,EAAE,kBACL,EAEA,GAAG,MAAMhB,EAAW,qBAAqB,EAAE,gBAAgB,CACzD,cAAY,QAAK,CACf,CACE,OAAQ,qBAAmB,UAC3B,OAAQe,CACV,CAKF,CAAC,EACD,OAAQ,GAAG,GAAG,CAChB,CAAC,EAGD,MAAMP,EAAY,IAAI,eACpBR,EACAC,EACAC,EACAC,EACA,YACAJ,CACF,EACM,CAAE,WAAAU,CAAW,EAAID,EAAU,gBAAgB,CAC/C,eAAgB,iBAChB,YAAAQ,EACA,QAAS,MACX,CAAC,EAGKN,EAIA,CAAC,EACPD,EAAW,UAAU,CACnB,KAAOE,GAAU,CACfD,EAAO,KAAKC,CAAK,CACnB,EACA,MAAQC,GAAQ,CACdP,EAAOO,CAAG,CACZ,EACA,SAAU,IAAM,CACd,GAAI,CACF,OAAOF,CAAM,EAAE,QAAQ,CACrB,CACE,OAAQ,qBAAmB,UAC3B,OAAQK,CACV,CACF,CAAC,EACDX,EAAQ,CACV,OAASQ,EAAK,CACZP,EAAOO,CAAY,CACrB,CACF,CACF,CAAC,CACH,CAAC,CAAC,CACN,CAAC,EAED,SAAS,cAAe,IAAM,CAC5B,GAAG,8BAA+B,IAChC,IAAI,QAAc,CAACR,EAASC,IAAW,CAErC,MAAMU,EAAuB,CAC3B,EAAG,SACH,EAAG,SACH,EAAG,CACL,EACMG,EAAU,gBAEhB,GAAG,MAAMlB,EAAW,qBAAqB,EAAE,gBAAgB,CACzD,cAAY,QAAK,CACf,CACE,OAAQ,qBAAmB,UAC3B,OAAQe,CACV,CAKF,CAAC,EACD,OAAQ,GAAG,GAAG,CAChB,CAAC,EAGD,MAAMP,EAAY,IAAI,eACpBR,EACAC,EACAC,EACAC,EACA,YACAJ,CACF,EACM,CAAE,WAAAU,CAAW,EAAID,EAAU,oBAAoB,CACnD,eAAgB,iBAChB,QAAAU,EACA,YAAa,EACf,CAAC,EAGKR,EAIA,CAAC,EACPD,EAAW,UAAU,CACnB,KAAOE,GAAU,CACfD,EAAO,KAAKC,CAAK,CACnB,EACA,MAAQC,GAAQ,CACdP,EAAOO,CAAG,CACZ,EACA,SAAU,IAAM,CACd,GAAI,CACF,OAAOF,CAAM,EAAE,QAAQ,CACrB,CACE,OAAQ,qBAAmB,UAC3B,OAAQK,CACV,CACF,CAAC,EACDX,EAAQ,CACV,OAASQ,EAAK,CACZP,EAAOO,CAAY,CACrB,CACF,CACF,CAAC,CACH,CAAC,CAAC,CACN,CAAC,EAED,SAAS,8BAA+B,IAAM,CAC5C,GAAG,8BAA+B,IAChC,IAAI,QAAc,CAACR,EAASC,IAAW,CAErC,MAAMU,EAAuB,CAC3B,EAAG,SACH,EAAG,SACH,EAAG,CACL,EACMI,EAAU,EACVC,EAAQ,GACRd,EAAU,YAEhB,GAAG,MAAMN,EAAW,qBAAqB,EAAE,gBAAgB,CACzD,cAAY,QAAK,CACf,CACE,OAAQ,qBAAmB,UAC3B,OAAQe,CACV,CAKF,CAAC,EACD,OAAQ,GAAG,GAAG,CAChB,CAAC,EAGD,MAAMP,EAAY,IAAI,eACpBR,EACAC,EACAC,EACAC,EACA,YACAJ,CACF,EACM,CAAE,WAAAU,CAAW,EAAID,EAAU,4BAA4B,CAC3D,eAAgB,iBAChB,QAAAW,EACA,QAAAb,EACA,MAAAc,CACF,CAAC,EAGKV,EAIA,CAAC,EACPD,EAAW,UAAU,CACnB,KAAOE,GAAU,CACfD,EAAO,KAAKC,CAAK,CACnB,EACA,MAAQC,GAAQ,CACdP,EAAOO,CAAG,CACZ,EACA,SAAU,IAAM,CACd,GAAI,CACF,OAAOF,CAAM,EAAE,QAAQ,CACrB,CACE,OAAQ,qBAAmB,UAC3B,OAAQK,CACV,CACF,CAAC,EACDX,EAAQ,CACV,OAASQ,EAAK,CACZP,EAAOO,CAAY,CACrB,CACF,CACF,CAAC,CACH,CAAC,CAAC,CACN,CAAC,EAED,SAAS,gBAAiB,IAAM,CAC9B,GAAG,8BAA+B,IAChC,IAAI,QAAc,CAACR,EAASC,IAAW,CAErC,MAAMU,EAAuB,CAC3B,EAAG,SACH,EAAG,SACH,EAAG,CACL,EACMM,EAAuB,CAC3B,OAAQ,CAAC,EACT,MAAO,CAAC,EACR,YAAa,OACb,QAAS,CAAC,CACZ,EACMC,EAAiC,CACrC,MAAO,GAAG,GAAG,CACf,EAEA,GAAG,MAAMtB,EAAW,qBAAqB,EAAE,gBAAgB,CACzD,cAAY,QAAK,CACf,CACE,OAAQ,qBAAmB,UAC3B,OAAQe,CACV,CAKF,CAAC,EACD,OAAQ,GAAG,GAAG,CAChB,CAAC,EAGD,MAAMP,EAAY,IAAI,eACpBR,EACAC,EACAC,EACAC,EACA,YACAJ,CACF,EACM,CAAE,WAAAU,CAAW,EAAID,EAAU,cAAc,CAC7C,eAAgB,iBAChB,OAAAc,EACA,KAAMD,EACN,YAAa,EACf,CAAC,EAGKX,EAIA,CAAC,EACPD,EAAW,UAAU,CACnB,KAAOE,GAAU,CACfD,EAAO,KAAKC,CAAK,CACnB,EACA,MAAQC,GAAQ,CACdP,EAAOO,CAAG,CACZ,EACA,SAAU,IAAM,CACd,GAAI,CACF,OAAOF,CAAM,EAAE,QAAQ,CACrB,CACE,OAAQ,qBAAmB,UAC3B,OAAQK,CACV,CACF,CAAC,EACDX,EAAQ,CACV,OAASQ,EAAK,CACZP,EAAOO,CAAY,CACrB,CACF,CACF,CAAC,CACH,CAAC,CAAC,CACN,CAAC,CACH,CAAC",
6
- "names": ["import_device_management_kit", "import_ethers", "import_rxjs", "import_constants", "import_EthAppBinder", "mockLoggerFactory", "mockedDmk", "mockedContextModule", "mockedMapper", "mockedParser", "resolve", "reject", "address", "publicKey", "appBinder", "observable", "states", "state", "err", "baseParams", "params", "signature", "transaction", "options", "message", "chainId", "nonce", "typedData", "parser"]
4
+ "sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n type DeviceActionState,\n type DeviceManagementKit,\n hexaStringToBuffer,\n} from \"@ledgerhq/device-management-kit\";\nimport { DeviceActionStatus } from \"@ledgerhq/device-management-kit\";\nimport { UserInteractionRequired } from \"@ledgerhq/device-management-kit\";\nimport { Transaction } from \"ethers\";\nimport { from } from \"rxjs\";\n\nimport {\n type GetAddressDAError,\n type GetAddressDAIntermediateValue,\n type GetAddressDAOutput,\n} from \"@api/app-binder/GetAddressDeviceActionTypes\";\nimport {\n type SignDelegationAuthorizationDAError,\n type SignDelegationAuthorizationDAIntermediateValue,\n type SignDelegationAuthorizationDAOutput,\n} from \"@api/app-binder/SignDelegationAuthorizationTypes\";\nimport {\n type SignPersonalMessageDAError,\n type SignPersonalMessageDAIntermediateValue,\n type SignPersonalMessageDAOutput,\n} from \"@api/app-binder/SignPersonalMessageDeviceActionTypes\";\nimport {\n type SignTransactionDAError,\n type SignTransactionDAIntermediateValue,\n type SignTransactionDAOutput,\n} from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport {\n type SignTypedDataDAError,\n type SignTypedDataDAIntermediateValue,\n type SignTypedDataDAOutput,\n} from \"@api/app-binder/SignTypedDataDeviceActionTypes\";\nimport {\n EMPTY_EVM_ADDRESS_BOOK,\n type EvmAddressBook,\n} from \"@api/model/EvmAddressBook\";\nimport { type Signature } from \"@api/model/Signature\";\nimport { type TypedData } from \"@api/model/TypedData\";\nimport { type SignTransactionDeviceAction } from \"@internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction\";\nimport { type TransactionMapperService } from \"@internal/transaction/service/mapper/TransactionMapperService\";\nimport { type TransactionParserService } from \"@internal/transaction/service/parser/TransactionParserService\";\nimport { type TypedDataParserService } from \"@internal/typed-data/service/TypedDataParserService\";\n\nimport { APP_NAME } from \"./constants\";\nimport { EthAppBinder } from \"./EthAppBinder\";\n\nconst mockLoggerFactory = () => ({\n debug: vi.fn(),\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n subscribers: [],\n});\n\ndescribe(\"EthAppBinder\", () => {\n const mockedDmk: DeviceManagementKit = {\n sendCommand: vi.fn(),\n executeDeviceAction: vi.fn(),\n } as unknown as DeviceManagementKit;\n const mockedContextModule = {\n getFieldContext: vi.fn(),\n getContexts: vi.fn(),\n getTypedDataFilters: vi.fn(),\n report: vi.fn(),\n };\n const mockedMapper: TransactionMapperService = {\n mapTransactionToSubset: vi.fn(),\n } as unknown as TransactionMapperService;\n const mockedParser: TransactionParserService = {\n extractValue: vi.fn(),\n } as unknown as TransactionParserService;\n\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n describe(\"getAddress\", () => {\n it(\"should return the address, publicKey, and chainCode\", () =>\n new Promise<void>((resolve, reject) => {\n // GIVEN\n const address = \"0xF7C69BedB292Dd3fC2cA4103989B5BD705164c43\";\n const publicKey = \"04e3785ca\";\n const chainCode = undefined;\n\n vi.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: { address, publicKey, chainCode },\n } as DeviceActionState<\n GetAddressDAOutput,\n GetAddressDAError,\n GetAddressDAIntermediateValue\n >,\n ]),\n cancel: vi.fn(),\n });\n\n // WHEN\n const appBinder = new EthAppBinder(\n mockedDmk,\n mockedContextModule as unknown as ContextModule,\n mockedMapper,\n mockedParser,\n \"sessionId\",\n mockLoggerFactory,\n EMPTY_EVM_ADDRESS_BOOK,\n );\n const { observable } = appBinder.getAddress({\n derivationPath: \"44'/60'/3'/2/1\",\n checkOnDevice: false,\n returnChainCode: false,\n skipOpenApp: false,\n });\n\n // THEN\n const states: DeviceActionState<\n GetAddressDAOutput,\n GetAddressDAError,\n GetAddressDAIntermediateValue\n >[] = [];\n observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n reject(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: { address, publicKey, chainCode },\n },\n ]);\n resolve();\n } catch (err) {\n reject(err as Error);\n }\n },\n });\n }));\n\n describe(\"calls of executeDeviceAction with the correct params\", () => {\n const baseParams = {\n derivationPath: \"44'/60'/3'/2/1\",\n checkOnDevice: false,\n returnChainCode: false,\n skipOpenApp: false,\n };\n\n test(\"when checkOnDevice is true: UserInteractionRequired.VerifyAddress\", () => {\n // GIVEN\n const checkOnDevice = true;\n const params = {\n ...baseParams,\n checkOnDevice,\n };\n\n // WHEN\n const appBinder = new EthAppBinder(\n mockedDmk,\n mockedContextModule as unknown as ContextModule,\n mockedMapper,\n mockedParser,\n \"sessionId\",\n mockLoggerFactory,\n EMPTY_EVM_ADDRESS_BOOK,\n );\n appBinder.getAddress(params);\n\n // THEN - getAddress uses CallTaskInAppDeviceAction with a task (loads dynamic network context then sends getAddress)\n expect(mockedDmk.executeDeviceAction).toHaveBeenCalledWith(\n expect.objectContaining({\n sessionId: \"sessionId\",\n deviceAction: expect.objectContaining({\n input: expect.objectContaining({\n appName: APP_NAME,\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n skipOpenApp: false,\n task: expect.any(Function),\n }),\n }),\n }),\n );\n });\n\n test(\"when checkOnDevice is false: UserInteractionRequired.None\", () => {\n // GIVEN\n const checkOnDevice = false;\n const params = {\n ...baseParams,\n checkOnDevice,\n };\n\n // WHEN\n const appBinder = new EthAppBinder(\n mockedDmk,\n mockedContextModule as unknown as ContextModule,\n mockedMapper,\n mockedParser,\n \"sessionId\",\n mockLoggerFactory,\n EMPTY_EVM_ADDRESS_BOOK,\n );\n appBinder.getAddress(params);\n\n // THEN - getAddress uses CallTaskInAppDeviceAction with a task (loads dynamic network context then sends getAddress)\n expect(mockedDmk.executeDeviceAction).toHaveBeenCalledWith(\n expect.objectContaining({\n sessionId: \"sessionId\",\n deviceAction: expect.objectContaining({\n input: expect.objectContaining({\n appName: APP_NAME,\n requiredUserInteraction: UserInteractionRequired.None,\n skipOpenApp: false,\n task: expect.any(Function),\n }),\n }),\n }),\n );\n });\n });\n });\n\n describe(\"signTransaction\", () => {\n it(\"should return the signature\", () =>\n new Promise<void>((resolve, reject) => {\n // GIVEN\n const signature: Signature = {\n r: `0xDEAD`,\n s: `0xBEEF`,\n v: 0,\n };\n const transaction: Uint8Array = hexaStringToBuffer(\n Transaction.from({\n to: \"0x1234567890123456789012345678901234567890\",\n value: 0n,\n }).unsignedSerialized,\n )!;\n const options = {};\n\n vi.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: signature,\n } as DeviceActionState<\n SignTypedDataDAOutput,\n SignTypedDataDAError,\n SignTypedDataDAIntermediateValue\n >,\n ]),\n cancel: vi.fn(),\n });\n\n // WHEN\n const appBinder = new EthAppBinder(\n mockedDmk,\n mockedContextModule as unknown as ContextModule,\n mockedMapper,\n mockedParser,\n \"sessionId\",\n mockLoggerFactory,\n EMPTY_EVM_ADDRESS_BOOK,\n );\n const { observable } = appBinder.signTransaction({\n derivationPath: \"44'/60'/3'/2/1\",\n transaction,\n options,\n });\n\n // THEN\n const states: DeviceActionState<\n SignTransactionDAOutput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >[] = [];\n observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n reject(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: signature,\n },\n ]);\n resolve();\n } catch (err) {\n reject(err as Error);\n }\n },\n });\n }));\n\n it(\"should return the signature without options\", () =>\n new Promise<void>((resolve, reject) => {\n // GIVEN\n const signature: Signature = {\n r: `0xDEAD`,\n s: `0xBEEF`,\n v: 0,\n };\n const transaction: Uint8Array = hexaStringToBuffer(\n Transaction.from({\n to: \"0x1234567890123456789012345678901234567890\",\n value: 0n,\n }).unsignedSerialized,\n )!;\n\n vi.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: signature,\n } as DeviceActionState<\n SignTypedDataDAOutput,\n SignTypedDataDAError,\n SignTypedDataDAIntermediateValue\n >,\n ]),\n cancel: vi.fn(),\n });\n\n // WHEN\n const appBinder = new EthAppBinder(\n mockedDmk,\n mockedContextModule as unknown as ContextModule,\n mockedMapper,\n mockedParser,\n \"sessionId\",\n mockLoggerFactory,\n EMPTY_EVM_ADDRESS_BOOK,\n );\n const { observable } = appBinder.signTransaction({\n derivationPath: \"44'/60'/3'/2/1\",\n transaction,\n options: undefined,\n });\n\n // THEN\n const states: DeviceActionState<\n SignTransactionDAOutput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >[] = [];\n observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n reject(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: signature,\n },\n ]);\n resolve();\n } catch (err) {\n reject(err as Error);\n }\n },\n });\n }));\n\n it(\"passes the injected address book to the sign-transaction device action\", () => {\n // GIVEN\n const addressBook: EvmAddressBook = {\n contactGroups: [\n {\n contactName: \"Alice\",\n groupHandle: new Uint8Array(64).fill(0xaa),\n hmacProof: new Uint8Array(32).fill(0xbb),\n externalAddresses: [\n {\n scope: \"Ethereum\",\n address: \"0x1111111111111111111111111111111111111111\",\n chainId: 1n,\n hmacRest: new Uint8Array(32).fill(0xcc),\n },\n ],\n },\n ],\n ledgerAccounts: [],\n };\n const executeSpy = vi\n .spyOn(mockedDmk, \"executeDeviceAction\")\n .mockReturnValue({ observable: from([]), cancel: vi.fn() });\n\n // WHEN\n new EthAppBinder(\n mockedDmk,\n mockedContextModule as unknown as ContextModule,\n mockedMapper,\n mockedParser,\n \"sessionId\",\n mockLoggerFactory,\n addressBook,\n ).signTransaction({\n derivationPath: \"44'/60'/3'/2/1\",\n transaction: new Uint8Array([0x01]),\n });\n\n // THEN\n const { deviceAction } = executeSpy.mock.calls[0]![0];\n expect(\n (deviceAction as SignTransactionDeviceAction).input.addressBook,\n ).toBe(addressBook);\n });\n });\n\n describe(\"signMessage\", () => {\n it(\"should return the signature\", () =>\n new Promise<void>((resolve, reject) => {\n // GIVEN\n const signature: Signature = {\n r: `0xDEAD`,\n s: `0xBEEF`,\n v: 0,\n };\n const message = \"Hello, World!\";\n\n vi.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: signature,\n } as DeviceActionState<\n SignPersonalMessageDAOutput,\n SignPersonalMessageDAError,\n SignPersonalMessageDAIntermediateValue\n >,\n ]),\n cancel: vi.fn(),\n });\n\n // WHEN\n const appBinder = new EthAppBinder(\n mockedDmk,\n mockedContextModule as unknown as ContextModule,\n mockedMapper,\n mockedParser,\n \"sessionId\",\n mockLoggerFactory,\n EMPTY_EVM_ADDRESS_BOOK,\n );\n const { observable } = appBinder.signPersonalMessage({\n derivationPath: \"44'/60'/3'/2/1\",\n message,\n skipOpenApp: false,\n });\n\n // THEN\n const states: DeviceActionState<\n SignPersonalMessageDAOutput,\n SignPersonalMessageDAError,\n SignPersonalMessageDAIntermediateValue\n >[] = [];\n observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n reject(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: signature,\n },\n ]);\n resolve();\n } catch (err) {\n reject(err as Error);\n }\n },\n });\n }));\n });\n\n describe(\"signDelegationAuthorization\", () => {\n it(\"should return the signature\", () =>\n new Promise<void>((resolve, reject) => {\n // GIVEN\n const signature: Signature = {\n r: `0xDEAD`,\n s: `0xBEEF`,\n v: 0,\n };\n const chainId = 2;\n const nonce = 42;\n const address = \"0xaddress\";\n\n vi.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: signature,\n } as DeviceActionState<\n SignDelegationAuthorizationDAOutput,\n SignDelegationAuthorizationDAError,\n SignDelegationAuthorizationDAIntermediateValue\n >,\n ]),\n cancel: vi.fn(),\n });\n\n // WHEN\n const appBinder = new EthAppBinder(\n mockedDmk,\n mockedContextModule as unknown as ContextModule,\n mockedMapper,\n mockedParser,\n \"sessionId\",\n mockLoggerFactory,\n EMPTY_EVM_ADDRESS_BOOK,\n );\n const { observable } = appBinder.signDelegationAuthorization({\n derivationPath: \"44'/60'/3'/2/1\",\n chainId,\n address,\n nonce,\n });\n\n // THEN\n const states: DeviceActionState<\n SignDelegationAuthorizationDAOutput,\n SignDelegationAuthorizationDAError,\n SignDelegationAuthorizationDAIntermediateValue\n >[] = [];\n observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n reject(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: signature,\n },\n ]);\n resolve();\n } catch (err) {\n reject(err as Error);\n }\n },\n });\n }));\n });\n\n describe(\"signTypedData\", () => {\n it(\"should return the signature\", () =>\n new Promise<void>((resolve, reject) => {\n // GIVEN\n const signature: Signature = {\n r: `0xDEAD`,\n s: `0xBEEF`,\n v: 0,\n };\n const typedData: TypedData = {\n domain: {},\n types: {},\n primaryType: \"test\",\n message: {},\n };\n const parser: TypedDataParserService = {\n parse: vi.fn(),\n };\n\n vi.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: signature,\n } as DeviceActionState<\n SignTypedDataDAOutput,\n SignTypedDataDAError,\n SignTypedDataDAIntermediateValue\n >,\n ]),\n cancel: vi.fn(),\n });\n\n // WHEN\n const appBinder = new EthAppBinder(\n mockedDmk,\n mockedContextModule as unknown as ContextModule,\n mockedMapper,\n mockedParser,\n \"sessionId\",\n mockLoggerFactory,\n EMPTY_EVM_ADDRESS_BOOK,\n );\n const { observable } = appBinder.signTypedData({\n derivationPath: \"44'/60'/3'/2/1\",\n parser,\n data: typedData,\n skipOpenApp: false,\n });\n\n // THEN\n const states: DeviceActionState<\n SignTypedDataDAOutput,\n SignTypedDataDAError,\n SignTypedDataDAIntermediateValue\n >[] = [];\n observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n reject(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: signature,\n },\n ]);\n resolve();\n } catch (err) {\n reject(err as Error);\n }\n },\n });\n }));\n });\n});\n"],
5
+ "mappings": "aACA,IAAAA,EAIO,2CACPA,EAAmC,2CACnCA,EAAwC,2CACxCC,EAA4B,kBAC5BC,EAAqB,gBA2BrBC,EAGO,qCAQPC,EAAyB,uBACzBC,EAA6B,0BAE7B,MAAMC,EAAoB,KAAO,CAC/B,MAAO,GAAG,GAAG,EACb,KAAM,GAAG,GAAG,EACZ,KAAM,GAAG,GAAG,EACZ,MAAO,GAAG,GAAG,EACb,YAAa,CAAC,CAChB,GAEA,SAAS,eAAgB,IAAM,CAC7B,MAAMC,EAAiC,CACrC,YAAa,GAAG,GAAG,EACnB,oBAAqB,GAAG,GAAG,CAC7B,EACMC,EAAsB,CAC1B,gBAAiB,GAAG,GAAG,EACvB,YAAa,GAAG,GAAG,EACnB,oBAAqB,GAAG,GAAG,EAC3B,OAAQ,GAAG,GAAG,CAChB,EACMC,EAAyC,CAC7C,uBAAwB,GAAG,GAAG,CAChC,EACMC,EAAyC,CAC7C,aAAc,GAAG,GAAG,CACtB,EAEA,WAAW,IAAM,CACf,GAAG,cAAc,CACnB,CAAC,EAED,SAAS,aAAc,IAAM,CAC3B,GAAG,sDAAuD,IACxD,IAAI,QAAc,CAACC,EAASC,IAAW,CAErC,MAAMC,EAAU,6CACVC,EAAY,YAGlB,GAAG,MAAMP,EAAW,qBAAqB,EAAE,gBAAgB,CACzD,cAAY,QAAK,CACf,CACE,OAAQ,qBAAmB,UAC3B,OAAQ,CAAE,QAAAM,EAAS,UAAAC,EAAW,gBAAU,CAC1C,CAKF,CAAC,EACD,OAAQ,GAAG,GAAG,CAChB,CAAC,EAGD,MAAMC,EAAY,IAAI,eACpBR,EACAC,EACAC,EACAC,EACA,YACAJ,EACA,wBACF,EACM,CAAE,WAAAU,CAAW,EAAID,EAAU,WAAW,CAC1C,eAAgB,iBAChB,cAAe,GACf,gBAAiB,GACjB,YAAa,EACf,CAAC,EAGKE,EAIA,CAAC,EACPD,EAAW,UAAU,CACnB,KAAOE,GAAU,CACfD,EAAO,KAAKC,CAAK,CACnB,EACA,MAAQC,GAAQ,CACdP,EAAOO,CAAG,CACZ,EACA,SAAU,IAAM,CACd,GAAI,CACF,OAAOF,CAAM,EAAE,QAAQ,CACrB,CACE,OAAQ,qBAAmB,UAC3B,OAAQ,CAAE,QAAAJ,EAAS,UAAAC,EAAW,gBAAU,CAC1C,CACF,CAAC,EACDH,EAAQ,CACV,OAASQ,EAAK,CACZP,EAAOO,CAAY,CACrB,CACF,CACF,CAAC,CACH,CAAC,CAAC,EAEJ,SAAS,uDAAwD,IAAM,CACrE,MAAMC,EAAa,CACjB,eAAgB,iBAChB,cAAe,GACf,gBAAiB,GACjB,YAAa,EACf,EAEA,KAAK,oEAAqE,IAAM,CAG9E,MAAMC,EAAS,CACb,GAAGD,EACH,gBACF,EAGkB,IAAI,eACpBb,EACAC,EACAC,EACAC,EACA,YACAJ,EACA,wBACF,EACU,WAAWe,CAAM,EAG3B,OAAOd,EAAU,mBAAmB,EAAE,qBACpC,OAAO,iBAAiB,CACtB,UAAW,YACX,aAAc,OAAO,iBAAiB,CACpC,MAAO,OAAO,iBAAiB,CAC7B,QAAS,WACT,wBAAyB,0BAAwB,cACjD,YAAa,GACb,KAAM,OAAO,IAAI,QAAQ,CAC3B,CAAC,CACH,CAAC,CACH,CAAC,CACH,CACF,CAAC,EAED,KAAK,4DAA6D,IAAM,CAGtE,MAAMc,EAAS,CACb,GAAGD,EACH,gBACF,EAGkB,IAAI,eACpBb,EACAC,EACAC,EACAC,EACA,YACAJ,EACA,wBACF,EACU,WAAWe,CAAM,EAG3B,OAAOd,EAAU,mBAAmB,EAAE,qBACpC,OAAO,iBAAiB,CACtB,UAAW,YACX,aAAc,OAAO,iBAAiB,CACpC,MAAO,OAAO,iBAAiB,CAC7B,QAAS,WACT,wBAAyB,0BAAwB,KACjD,YAAa,GACb,KAAM,OAAO,IAAI,QAAQ,CAC3B,CAAC,CACH,CAAC,CACH,CAAC,CACH,CACF,CAAC,CACH,CAAC,CACH,CAAC,EAED,SAAS,kBAAmB,IAAM,CAChC,GAAG,8BAA+B,IAChC,IAAI,QAAc,CAACI,EAASC,IAAW,CAErC,MAAMU,EAAuB,CAC3B,EAAG,SACH,EAAG,SACH,EAAG,CACL,EACMC,KAA0B,sBAC9B,cAAY,KAAK,CACf,GAAI,6CACJ,MAAO,EACT,CAAC,EAAE,kBACL,EACMC,EAAU,CAAC,EAEjB,GAAG,MAAMjB,EAAW,qBAAqB,EAAE,gBAAgB,CACzD,cAAY,QAAK,CACf,CACE,OAAQ,qBAAmB,UAC3B,OAAQe,CACV,CAKF,CAAC,EACD,OAAQ,GAAG,GAAG,CAChB,CAAC,EAGD,MAAMP,EAAY,IAAI,eACpBR,EACAC,EACAC,EACAC,EACA,YACAJ,EACA,wBACF,EACM,CAAE,WAAAU,CAAW,EAAID,EAAU,gBAAgB,CAC/C,eAAgB,iBAChB,YAAAQ,EACA,QAAAC,CACF,CAAC,EAGKP,EAIA,CAAC,EACPD,EAAW,UAAU,CACnB,KAAOE,GAAU,CACfD,EAAO,KAAKC,CAAK,CACnB,EACA,MAAQC,GAAQ,CACdP,EAAOO,CAAG,CACZ,EACA,SAAU,IAAM,CACd,GAAI,CACF,OAAOF,CAAM,EAAE,QAAQ,CACrB,CACE,OAAQ,qBAAmB,UAC3B,OAAQK,CACV,CACF,CAAC,EACDX,EAAQ,CACV,OAASQ,EAAK,CACZP,EAAOO,CAAY,CACrB,CACF,CACF,CAAC,CACH,CAAC,CAAC,EAEJ,GAAG,8CAA+C,IAChD,IAAI,QAAc,CAACR,EAASC,IAAW,CAErC,MAAMU,EAAuB,CAC3B,EAAG,SACH,EAAG,SACH,EAAG,CACL,EACMC,KAA0B,sBAC9B,cAAY,KAAK,CACf,GAAI,6CACJ,MAAO,EACT,CAAC,EAAE,kBACL,EAEA,GAAG,MAAMhB,EAAW,qBAAqB,EAAE,gBAAgB,CACzD,cAAY,QAAK,CACf,CACE,OAAQ,qBAAmB,UAC3B,OAAQe,CACV,CAKF,CAAC,EACD,OAAQ,GAAG,GAAG,CAChB,CAAC,EAGD,MAAMP,EAAY,IAAI,eACpBR,EACAC,EACAC,EACAC,EACA,YACAJ,EACA,wBACF,EACM,CAAE,WAAAU,CAAW,EAAID,EAAU,gBAAgB,CAC/C,eAAgB,iBAChB,YAAAQ,EACA,QAAS,MACX,CAAC,EAGKN,EAIA,CAAC,EACPD,EAAW,UAAU,CACnB,KAAOE,GAAU,CACfD,EAAO,KAAKC,CAAK,CACnB,EACA,MAAQC,GAAQ,CACdP,EAAOO,CAAG,CACZ,EACA,SAAU,IAAM,CACd,GAAI,CACF,OAAOF,CAAM,EAAE,QAAQ,CACrB,CACE,OAAQ,qBAAmB,UAC3B,OAAQK,CACV,CACF,CAAC,EACDX,EAAQ,CACV,OAASQ,EAAK,CACZP,EAAOO,CAAY,CACrB,CACF,CACF,CAAC,CACH,CAAC,CAAC,EAEJ,GAAG,yEAA0E,IAAM,CAEjF,MAAMM,EAA8B,CAClC,cAAe,CACb,CACE,YAAa,QACb,YAAa,IAAI,WAAW,EAAE,EAAE,KAAK,GAAI,EACzC,UAAW,IAAI,WAAW,EAAE,EAAE,KAAK,GAAI,EACvC,kBAAmB,CACjB,CACE,MAAO,WACP,QAAS,6CACT,QAAS,GACT,SAAU,IAAI,WAAW,EAAE,EAAE,KAAK,GAAI,CACxC,CACF,CACF,CACF,EACA,eAAgB,CAAC,CACnB,EACMC,EAAa,GAChB,MAAMnB,EAAW,qBAAqB,EACtC,gBAAgB,CAAE,cAAY,QAAK,CAAC,CAAC,EAAG,OAAQ,GAAG,GAAG,CAAE,CAAC,EAG5D,IAAI,eACFA,EACAC,EACAC,EACAC,EACA,YACAJ,EACAmB,CACF,EAAE,gBAAgB,CAChB,eAAgB,iBAChB,YAAa,IAAI,WAAW,CAAC,CAAI,CAAC,CACpC,CAAC,EAGD,KAAM,CAAE,aAAAE,CAAa,EAAID,EAAW,KAAK,MAAM,CAAC,EAAG,CAAC,EACpD,OACGC,EAA6C,MAAM,WACtD,EAAE,KAAKF,CAAW,CACpB,CAAC,CACH,CAAC,EAED,SAAS,cAAe,IAAM,CAC5B,GAAG,8BAA+B,IAChC,IAAI,QAAc,CAACd,EAASC,IAAW,CAErC,MAAMU,EAAuB,CAC3B,EAAG,SACH,EAAG,SACH,EAAG,CACL,EACMM,EAAU,gBAEhB,GAAG,MAAMrB,EAAW,qBAAqB,EAAE,gBAAgB,CACzD,cAAY,QAAK,CACf,CACE,OAAQ,qBAAmB,UAC3B,OAAQe,CACV,CAKF,CAAC,EACD,OAAQ,GAAG,GAAG,CAChB,CAAC,EAGD,MAAMP,EAAY,IAAI,eACpBR,EACAC,EACAC,EACAC,EACA,YACAJ,EACA,wBACF,EACM,CAAE,WAAAU,CAAW,EAAID,EAAU,oBAAoB,CACnD,eAAgB,iBAChB,QAAAa,EACA,YAAa,EACf,CAAC,EAGKX,EAIA,CAAC,EACPD,EAAW,UAAU,CACnB,KAAOE,GAAU,CACfD,EAAO,KAAKC,CAAK,CACnB,EACA,MAAQC,GAAQ,CACdP,EAAOO,CAAG,CACZ,EACA,SAAU,IAAM,CACd,GAAI,CACF,OAAOF,CAAM,EAAE,QAAQ,CACrB,CACE,OAAQ,qBAAmB,UAC3B,OAAQK,CACV,CACF,CAAC,EACDX,EAAQ,CACV,OAASQ,EAAK,CACZP,EAAOO,CAAY,CACrB,CACF,CACF,CAAC,CACH,CAAC,CAAC,CACN,CAAC,EAED,SAAS,8BAA+B,IAAM,CAC5C,GAAG,8BAA+B,IAChC,IAAI,QAAc,CAACR,EAASC,IAAW,CAErC,MAAMU,EAAuB,CAC3B,EAAG,SACH,EAAG,SACH,EAAG,CACL,EACMO,EAAU,EACVC,EAAQ,GACRjB,EAAU,YAEhB,GAAG,MAAMN,EAAW,qBAAqB,EAAE,gBAAgB,CACzD,cAAY,QAAK,CACf,CACE,OAAQ,qBAAmB,UAC3B,OAAQe,CACV,CAKF,CAAC,EACD,OAAQ,GAAG,GAAG,CAChB,CAAC,EAGD,MAAMP,EAAY,IAAI,eACpBR,EACAC,EACAC,EACAC,EACA,YACAJ,EACA,wBACF,EACM,CAAE,WAAAU,CAAW,EAAID,EAAU,4BAA4B,CAC3D,eAAgB,iBAChB,QAAAc,EACA,QAAAhB,EACA,MAAAiB,CACF,CAAC,EAGKb,EAIA,CAAC,EACPD,EAAW,UAAU,CACnB,KAAOE,GAAU,CACfD,EAAO,KAAKC,CAAK,CACnB,EACA,MAAQC,GAAQ,CACdP,EAAOO,CAAG,CACZ,EACA,SAAU,IAAM,CACd,GAAI,CACF,OAAOF,CAAM,EAAE,QAAQ,CACrB,CACE,OAAQ,qBAAmB,UAC3B,OAAQK,CACV,CACF,CAAC,EACDX,EAAQ,CACV,OAASQ,EAAK,CACZP,EAAOO,CAAY,CACrB,CACF,CACF,CAAC,CACH,CAAC,CAAC,CACN,CAAC,EAED,SAAS,gBAAiB,IAAM,CAC9B,GAAG,8BAA+B,IAChC,IAAI,QAAc,CAACR,EAASC,IAAW,CAErC,MAAMU,EAAuB,CAC3B,EAAG,SACH,EAAG,SACH,EAAG,CACL,EACMS,EAAuB,CAC3B,OAAQ,CAAC,EACT,MAAO,CAAC,EACR,YAAa,OACb,QAAS,CAAC,CACZ,EACMC,EAAiC,CACrC,MAAO,GAAG,GAAG,CACf,EAEA,GAAG,MAAMzB,EAAW,qBAAqB,EAAE,gBAAgB,CACzD,cAAY,QAAK,CACf,CACE,OAAQ,qBAAmB,UAC3B,OAAQe,CACV,CAKF,CAAC,EACD,OAAQ,GAAG,GAAG,CAChB,CAAC,EAGD,MAAMP,EAAY,IAAI,eACpBR,EACAC,EACAC,EACAC,EACA,YACAJ,EACA,wBACF,EACM,CAAE,WAAAU,CAAW,EAAID,EAAU,cAAc,CAC7C,eAAgB,iBAChB,OAAAiB,EACA,KAAMD,EACN,YAAa,EACf,CAAC,EAGKd,EAIA,CAAC,EACPD,EAAW,UAAU,CACnB,KAAOE,GAAU,CACfD,EAAO,KAAKC,CAAK,CACnB,EACA,MAAQC,GAAQ,CACdP,EAAOO,CAAG,CACZ,EACA,SAAU,IAAM,CACd,GAAI,CACF,OAAOF,CAAM,EAAE,QAAQ,CACrB,CACE,OAAQ,qBAAmB,UAC3B,OAAQK,CACV,CACF,CAAC,EACDX,EAAQ,CACV,OAASQ,EAAK,CACZP,EAAOO,CAAY,CACrB,CACF,CACF,CAAC,CACH,CAAC,CAAC,CACN,CAAC,CACH,CAAC",
6
+ "names": ["import_device_management_kit", "import_ethers", "import_rxjs", "import_EvmAddressBook", "import_constants", "import_EthAppBinder", "mockLoggerFactory", "mockedDmk", "mockedContextModule", "mockedMapper", "mockedParser", "resolve", "reject", "address", "publicKey", "appBinder", "observable", "states", "state", "err", "baseParams", "params", "signature", "transaction", "options", "addressBook", "executeSpy", "deviceAction", "message", "chainId", "nonce", "typedData", "parser"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var S=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var G=Object.prototype.hasOwnProperty;var V=(o,a)=>{for(var p in a)S(o,p,{get:a[p],enumerable:!0})},U=(o,a,p,l)=>{if(a&&typeof a=="object"||typeof a=="function")for(let s of M(a))!G.call(o,s)&&s!==p&&S(o,s,{get:()=>a[s],enumerable:!(l=w(a,s))||l.enumerable});return o};var L=o=>U(S({},"__esModule",{value:!0}),o);var q={};V(q,{SignTransactionDeviceAction:()=>W});module.exports=L(q);var n=require("@ledgerhq/device-management-kit"),d=require("purify-ts"),e=require("xstate"),i=require("../../../../api/app-binder/SignTransactionDeviceActionTypes"),E=require("../../../../api/model/ClearSigningType"),_=require("../../../app-binder/command/GetAddressCommand"),I=require("../../../app-binder/command/GetAppConfigurationCommand"),k=require("../../../app-binder/command/Web3CheckOptInCommand"),u=require("../../../app-binder/constants"),D=require("../../../app-binder/EthereumApplicationResolver"),f=require("../../../app-binder/task/BlindSigningDetectionTask"),v=require("../../../app-binder/task/BuildFullContextsTask"),P=require("../../../app-binder/task/ParseTransactionTask"),b=require("../../../app-binder/task/ProvideTransactionContextsTask"),O=require("../../../app-binder/task/SendSignTransactionTask"),R=require("../../../shared/EthAppVersions");class W extends n.XStateDeviceAction{makeStateMachine(a){const{getAddress:p,getAppConfig:l,web3CheckOptIn:s,parseTransaction:T,buildContexts:C,signTransaction:m,provideContexts:y,detectBlindSigning:A}=this.extractDependencies(a);return(0,e.setup)({types:{input:{},context:{},output:{}},actors:{openAppStateMachine:new n.OpenAppDeviceAction({input:{appName:u.APP_NAME}}).makeStateMachine(a),getAddress:(0,e.fromPromise)(p),getAppConfig:(0,e.fromPromise)(l),web3CheckOptIn:(0,e.fromPromise)(s),parseTransaction:(0,e.fromPromise)(T),buildContexts:(0,e.fromPromise)(C),provideContexts:(0,e.fromPromise)(y),signTransaction:(0,e.fromPromise)(m),detectBlindSigning:(0,e.fromPromise)(A)},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 n.ApplicationChecker(a.getDeviceSessionState(),t._internalState.appConfig,new D.EthereumApplicationResolver).withMinVersionExclusive(R.MIN_ETH_APP_VERSION_FOR_WEB3_CHECKS).excludeDeviceModel(n.DeviceModelId.NANO_S).excludeDeviceModel(n.DeviceModelId.NANO_SP).excludeDeviceModel(n.DeviceModelId.NANO_X).check(),shouldOptIn:({context:t})=>!t._internalState.appConfig.web3ChecksEnabled&&!t._internalState.appConfig.web3ChecksOptIn,skipOpenApp:({context:t})=>!!t.input.options.skipOpenApp,hasSignature:({context:t})=>t._internalState.signature!==null},actions:{assignErrorFromEvent:(0,e.assign)({_internalState:t=>({...t.context._internalState,error:t.event.error})})}}).createMachine({id:"SignTransactionDeviceAction",initial:"InitialState",context:({input:t})=>({input:t,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:i.SignTransactionDAStep.OPEN_APP},_internalState:{error:null,appConfig:null,subset:null,contexts:[],clearSigningType:null,contextErrorCount:0,transactionType:null,signature:null,isBlindSign:null,usedFallback:!1}}),states:{InitialState:{always:[{target:"GetAppConfig",guard:"skipOpenApp"},"OpenAppDeviceAction"]},OpenAppDeviceAction:{invoke:{id:"openAppStateMachine",input:{appName:u.APP_NAME},src:"openAppStateMachine",onSnapshot:{actions:(0,e.assign)({intermediateValue:t=>({...t.event.snapshot.context.intermediateValue,step:i.SignTransactionDAStep.OPEN_APP})})},onDone:{actions:(0,e.assign)({_internalState:t=>t.event.output.caseOf({Right:()=>t.context._internalState,Left:r=>({...t.context._internalState,error:r})})}),target:"CheckOpenAppDeviceActionResult"}}},CheckOpenAppDeviceActionResult:{always:[{target:"GetAppConfig",guard:"noInternalError"},"Error"]},GetAppConfig:{entry:(0,e.assign)({intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:i.SignTransactionDAStep.GET_APP_CONFIG}}),invoke:{id:"getAppConfig",src:"getAppConfig",onDone:{target:"GetAppConfigResultCheck",actions:[(0,e.assign)({_internalState:({event:t,context:r})=>(0,n.isSuccessCommandResult)(t.output)?{...r._internalState,appConfig:t.output.data}:{...r._internalState,error:t.output.error}})]},onError:{target:"Error",actions:"assignErrorFromEvent"}}},GetAppConfigResultCheck:{always:[{target:"Web3ChecksOptIn",guard:(0,e.and)(["noInternalError","isWeb3ChecksSupported","shouldOptIn"])},{target:"ParseTransaction",guard:"noInternalError"},{target:"Error"}]},Web3ChecksOptIn:{entry:(0,e.assign)({intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.Web3ChecksOptIn,step:i.SignTransactionDAStep.WEB3_CHECKS_OPT_IN}}),invoke:{id:"web3CheckOptIn",src:"web3CheckOptIn",onDone:{target:"Web3ChecksOptInResult",actions:[(0,e.assign)({_internalState:({event:t,context:r})=>(0,n.isSuccessCommandResult)(t.output)?{...r._internalState,appConfig:{...r._internalState.appConfig,web3ChecksEnabled:t.output.data.enabled}}:r._internalState})]},onError:{target:"Error",actions:"assignErrorFromEvent"}}},Web3ChecksOptInResult:{entry:(0,e.assign)(({context:t})=>({intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:i.SignTransactionDAStep.WEB3_CHECKS_OPT_IN_RESULT,result:t._internalState.appConfig.web3ChecksEnabled}})),after:{0:{target:"ParseTransaction"}}},ParseTransaction:{entry:(0,e.assign)({intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:i.SignTransactionDAStep.PARSE_TRANSACTION}}),invoke:{id:"parseTransaction",src:"parseTransaction",input:({context:t})=>({mapper:t.input.mapper,transaction:t.input.transaction}),onDone:{target:"GetAddress",actions:(0,e.assign)({_internalState:({event:t,context:r})=>({...r._internalState,subset:t.output.subset,transactionType:t.output.type})})},onError:{target:"Error",actions:"assignErrorFromEvent"}}},GetAddress:{entry:(0,e.assign)({intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:i.SignTransactionDAStep.GET_ADDRESS}}),invoke:{id:"getAddress",src:"getAddress",input:({context:t})=>({derivationPath:t.input.derivationPath,checkOnDevice:!1,returnChainCode:!1}),onDone:{target:"BuildContexts",actions:(0,e.assign)({_internalState:({event:t,context:r})=>{if((0,n.isSuccessCommandResult)(t.output)){const g={...r._internalState.subset,from:t.output.data.address};return{...r._internalState,subset:g}}return{...r._internalState}}})},onError:{target:"Error"}}},BuildContexts:{entry:(0,e.assign)({intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:i.SignTransactionDAStep.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:a.getDeviceModel().id,loggerFactory:this.getLoggerFactory(a)}),onDone:{target:"ProvideContexts",actions:[(0,e.assign)({_internalState:({event:t,context:r})=>({...r._internalState,contexts:t.output.clearSignContexts,clearSigningType:t.output.clearSigningType,contextErrorCount:t.output.contextErrorCount})})]},onError:{target:"Error",actions:"assignErrorFromEvent"}}},ProvideContexts:{entry:(0,e.assign)({intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:i.SignTransactionDAStep.PROVIDE_CONTEXTS}}),invoke:{id:"provideContexts",src:"provideContexts",input:({context:t})=>({contexts:t._internalState.contexts,derivationPath:t.input.derivationPath,serializedTransaction:t.input.transaction,loggerFactory:this.getLoggerFactory(a)}),onDone:{target:"SignTransaction"},onError:{target:"Error",actions:"assignErrorFromEvent"}}},SignTransaction:{entry:(0,e.assign)({intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.SignTransaction,step:i.SignTransactionDAStep.SIGN_TRANSACTION}}),invoke:{id:"signTransaction",src:"signTransaction",input:({context:t})=>({derivationPath:t.input.derivationPath,serializedTransaction:t.input.transaction,chainId:t._internalState.subset.chainId,transactionType:t._internalState.transactionType,clearSigningType:t._internalState.clearSigningType}),onDone:{target:"SignTransactionResultCheck",actions:[(0,e.assign)({_internalState:({event:t,context:r})=>(0,n.isSuccessCommandResult)(t.output)?{...r._internalState,signature:t.output.data}:{...r._internalState,error:t.output.error}})]},onError:{target:"SignTransactionResultCheck",actions:"assignErrorFromEvent"}}},SignTransactionResultCheck:{always:[{guard:"noInternalError",target:"DetectBlindSigning"},{guard:"notRefusedByUser",target:"BlindSignTransactionFallback"},{target:"DetectBlindSigning"}]},BlindSignTransactionFallback:{entry:(0,e.assign)({intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:i.SignTransactionDAStep.BLIND_SIGN_TRANSACTION_FALLBACK},_internalState:({context:t})=>({...t._internalState,usedFallback:!0})}),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.ClearSigningType.BASIC}),onDone:{target:"BlindSignTransactionFallbackResultCheck",actions:[(0,e.assign)({_internalState:({event:t,context:r})=>(0,n.isSuccessCommandResult)(t.output)?{...r._internalState,signature:t.output.data}:{...r._internalState,error:t.output.error}})]},onError:{target:"DetectBlindSigning",actions:"assignErrorFromEvent"}}},BlindSignTransactionFallbackResultCheck:{always:"DetectBlindSigning"},DetectBlindSigning:{entry:(0,e.assign)({intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:i.SignTransactionDAStep.DETECT_BLIND_SIGNING}}),invoke:{id:"detectBlindSigning",src:"detectBlindSigning",input:({context:t})=>{const r=a.getDeviceSessionState(),g=r.sessionStateType!==n.DeviceSessionStateType.Connected?r.firmwareVersion?.os??null:null,{subset:c,contexts:h,usedFallback:B,clearSigningType:N,contextErrorCount:x}=t._internalState;return{input:{type:"transaction",hasContext:!(!!c?.data&&c.data.length>2)||h.length>0,contextTypes:h.map(F=>F.context.type),usedFallback:B,chainId:c?.chainId??null,targetAddress:c?.to??null,selectorId:c?.selector&&c.selector.length===u.SELECTOR_ID_LENGTH?c.selector:null,deviceModelId:a.getDeviceModel().id,signerAppVersion:t._internalState.appConfig?.version??"",deviceVersion:g,clearSigningType:N,partialContextErrors:x},contextModule:t.input.contextModule,loggerFactory:this.getLoggerFactory(a)}},onDone:[{guard:"hasSignature",target:"Success",actions:(0,e.assign)({_internalState:({event:t,context:r})=>({...r._internalState,isBlindSign:t.output.isBlindSign})})},{target:"Error",actions:(0,e.assign)({_internalState:({event:t,context:r})=>({...r._internalState,isBlindSign:t.output.isBlindSign})})}],onError:[{guard:"hasSignature",target:"Success"},{target:"Error"}]}},Success:{type:"final"},Error:{type:"final"}},output:({context:t})=>t._internalState.signature?(0,d.Right)(t._internalState.signature):(0,d.Left)(t._internalState.error||new n.UnknownDAError("No error in final state"))})}extractDependencies(a){return{getAddress:async t=>a.sendCommand(new _.GetAddressCommand(t.input)),getAppConfig:async()=>a.sendCommand(new I.GetAppConfiguration),web3CheckOptIn:async()=>a.sendCommand(new k.Web3CheckOptInCommand),parseTransaction:async t=>Promise.resolve(new P.ParseTransactionTask({mapper:t.input.mapper,transaction:t.input.transaction}).run()),buildContexts:async t=>new v.BuildFullContextsTask(a,t.input).run(),provideContexts:async t=>new b.ProvideTransactionContextsTask(a,t.input).run(),signTransaction:async t=>new O.SendSignTransactionTask(a,{...t.input,loggerFactory:this.getLoggerFactory(a)}).run(),detectBlindSigning:async t=>new f.BlindSigningDetectionTask(t.input).run()}}}0&&(module.exports={SignTransactionDeviceAction});
1
+ "use strict";var S=Object.defineProperty;var M=Object.getOwnPropertyDescriptor;var G=Object.getOwnPropertyNames;var V=Object.prototype.hasOwnProperty;var U=(o,a)=>{for(var p in a)S(o,p,{get:a[p],enumerable:!0})},L=(o,a,p,l)=>{if(a&&typeof a=="object"||typeof a=="function")for(let s of G(a))!V.call(o,s)&&s!==p&&S(o,s,{get:()=>a[s],enumerable:!(l=M(a,s))||l.enumerable});return o};var W=o=>L(S({},"__esModule",{value:!0}),o);var z={};U(z,{SignTransactionDeviceAction:()=>q});module.exports=W(z);var n=require("@ledgerhq/device-management-kit"),d=require("purify-ts"),e=require("xstate"),i=require("../../../../api/app-binder/SignTransactionDeviceActionTypes"),E=require("../../../../api/model/ClearSigningType"),_=require("../../../../api/model/EvmAddressBook"),k=require("../../../app-binder/command/GetAddressCommand"),I=require("../../../app-binder/command/GetAppConfigurationCommand"),D=require("../../../app-binder/command/Web3CheckOptInCommand"),u=require("../../../app-binder/constants"),f=require("../../../app-binder/EthereumApplicationResolver"),v=require("../../../app-binder/task/BlindSigningDetectionTask"),P=require("../../../app-binder/task/BuildFullContextsTask"),b=require("../../../app-binder/task/ParseTransactionTask"),O=require("../../../app-binder/task/ProvideTransactionContextsTask"),B=require("../../../app-binder/task/SendSignTransactionTask"),R=require("../../../shared/EthAppVersions");class q extends n.XStateDeviceAction{makeStateMachine(a){const{getAddress:p,getAppConfig:l,web3CheckOptIn:s,parseTransaction:C,buildContexts:T,signTransaction:m,provideContexts:y,detectBlindSigning:A}=this.extractDependencies(a);return(0,e.setup)({types:{input:{},context:{},output:{}},actors:{openAppStateMachine:new n.OpenAppDeviceAction({input:{appName:u.APP_NAME}}).makeStateMachine(a),getAddress:(0,e.fromPromise)(p),getAppConfig:(0,e.fromPromise)(l),web3CheckOptIn:(0,e.fromPromise)(s),parseTransaction:(0,e.fromPromise)(C),buildContexts:(0,e.fromPromise)(T),provideContexts:(0,e.fromPromise)(y),signTransaction:(0,e.fromPromise)(m),detectBlindSigning:(0,e.fromPromise)(A)},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 n.ApplicationChecker(a.getDeviceSessionState(),t._internalState.appConfig,new f.EthereumApplicationResolver).withMinVersionExclusive(R.MIN_ETH_APP_VERSION_FOR_WEB3_CHECKS).excludeDeviceModel(n.DeviceModelId.NANO_S).excludeDeviceModel(n.DeviceModelId.NANO_SP).excludeDeviceModel(n.DeviceModelId.NANO_X).check(),shouldOptIn:({context:t})=>!t._internalState.appConfig.web3ChecksEnabled&&!t._internalState.appConfig.web3ChecksOptIn,skipOpenApp:({context:t})=>!!t.input.options.skipOpenApp,hasSignature:({context:t})=>t._internalState.signature!==null},actions:{assignErrorFromEvent:(0,e.assign)({_internalState:t=>({...t.context._internalState,error:t.event.error})})}}).createMachine({id:"SignTransactionDeviceAction",initial:"InitialState",context:({input:t})=>({input:t,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:i.SignTransactionDAStep.OPEN_APP},_internalState:{error:null,appConfig:null,subset:null,contexts:[],clearSigningType:null,contextErrorCount:0,transactionType:null,signature:null,isBlindSign:null,usedFallback:!1}}),states:{InitialState:{always:[{target:"GetAppConfig",guard:"skipOpenApp"},"OpenAppDeviceAction"]},OpenAppDeviceAction:{invoke:{id:"openAppStateMachine",input:{appName:u.APP_NAME},src:"openAppStateMachine",onSnapshot:{actions:(0,e.assign)({intermediateValue:t=>({...t.event.snapshot.context.intermediateValue,step:i.SignTransactionDAStep.OPEN_APP})})},onDone:{actions:(0,e.assign)({_internalState:t=>t.event.output.caseOf({Right:()=>t.context._internalState,Left:r=>({...t.context._internalState,error:r})})}),target:"CheckOpenAppDeviceActionResult"}}},CheckOpenAppDeviceActionResult:{always:[{target:"GetAppConfig",guard:"noInternalError"},"Error"]},GetAppConfig:{entry:(0,e.assign)({intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:i.SignTransactionDAStep.GET_APP_CONFIG}}),invoke:{id:"getAppConfig",src:"getAppConfig",onDone:{target:"GetAppConfigResultCheck",actions:[(0,e.assign)({_internalState:({event:t,context:r})=>(0,n.isSuccessCommandResult)(t.output)?{...r._internalState,appConfig:t.output.data}:{...r._internalState,error:t.output.error}})]},onError:{target:"Error",actions:"assignErrorFromEvent"}}},GetAppConfigResultCheck:{always:[{target:"Web3ChecksOptIn",guard:(0,e.and)(["noInternalError","isWeb3ChecksSupported","shouldOptIn"])},{target:"ParseTransaction",guard:"noInternalError"},{target:"Error"}]},Web3ChecksOptIn:{entry:(0,e.assign)({intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.Web3ChecksOptIn,step:i.SignTransactionDAStep.WEB3_CHECKS_OPT_IN}}),invoke:{id:"web3CheckOptIn",src:"web3CheckOptIn",onDone:{target:"Web3ChecksOptInResult",actions:[(0,e.assign)({_internalState:({event:t,context:r})=>(0,n.isSuccessCommandResult)(t.output)?{...r._internalState,appConfig:{...r._internalState.appConfig,web3ChecksEnabled:t.output.data.enabled}}:r._internalState})]},onError:{target:"Error",actions:"assignErrorFromEvent"}}},Web3ChecksOptInResult:{entry:(0,e.assign)(({context:t})=>({intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:i.SignTransactionDAStep.WEB3_CHECKS_OPT_IN_RESULT,result:t._internalState.appConfig.web3ChecksEnabled}})),after:{0:{target:"ParseTransaction"}}},ParseTransaction:{entry:(0,e.assign)({intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:i.SignTransactionDAStep.PARSE_TRANSACTION}}),invoke:{id:"parseTransaction",src:"parseTransaction",input:({context:t})=>({mapper:t.input.mapper,transaction:t.input.transaction}),onDone:{target:"GetAddress",actions:(0,e.assign)({_internalState:({event:t,context:r})=>({...r._internalState,subset:t.output.subset,transactionType:t.output.type})})},onError:{target:"Error",actions:"assignErrorFromEvent"}}},GetAddress:{entry:(0,e.assign)({intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:i.SignTransactionDAStep.GET_ADDRESS}}),invoke:{id:"getAddress",src:"getAddress",input:({context:t})=>({derivationPath:t.input.derivationPath,checkOnDevice:!1,returnChainCode:!1}),onDone:{target:"BuildContexts",actions:(0,e.assign)({_internalState:({event:t,context:r})=>{if((0,n.isSuccessCommandResult)(t.output)){const g={...r._internalState.subset,from:t.output.data.address};return{...r._internalState,subset:g}}return{...r._internalState}}})},onError:{target:"Error"}}},BuildContexts:{entry:(0,e.assign)({intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:i.SignTransactionDAStep.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:a.getDeviceModel().id,loggerFactory:this.getLoggerFactory(a)}),onDone:{target:"ProvideContexts",actions:[(0,e.assign)({_internalState:({event:t,context:r})=>({...r._internalState,contexts:t.output.clearSignContexts,clearSigningType:t.output.clearSigningType,contextErrorCount:t.output.contextErrorCount})})]},onError:{target:"Error",actions:"assignErrorFromEvent"}}},ProvideContexts:{entry:(0,e.assign)({intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:i.SignTransactionDAStep.PROVIDE_CONTEXTS}}),invoke:{id:"provideContexts",src:"provideContexts",input:({context:t})=>({contexts:t._internalState.contexts,derivationPath:t.input.derivationPath,serializedTransaction:t.input.transaction,externalContact:{addressBook:t.input.addressBook??_.EMPTY_EVM_ADDRESS_BOOK,subset:t._internalState.subset,appConfig:t._internalState.appConfig},loggerFactory:this.getLoggerFactory(a)}),onDone:{target:"SignTransaction"},onError:{target:"Error",actions:"assignErrorFromEvent"}}},SignTransaction:{entry:(0,e.assign)({intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.SignTransaction,step:i.SignTransactionDAStep.SIGN_TRANSACTION}}),invoke:{id:"signTransaction",src:"signTransaction",input:({context:t})=>({derivationPath:t.input.derivationPath,serializedTransaction:t.input.transaction,chainId:t._internalState.subset.chainId,transactionType:t._internalState.transactionType,clearSigningType:t._internalState.clearSigningType}),onDone:{target:"SignTransactionResultCheck",actions:[(0,e.assign)({_internalState:({event:t,context:r})=>(0,n.isSuccessCommandResult)(t.output)?{...r._internalState,signature:t.output.data}:{...r._internalState,error:t.output.error}})]},onError:{target:"SignTransactionResultCheck",actions:"assignErrorFromEvent"}}},SignTransactionResultCheck:{always:[{guard:"noInternalError",target:"DetectBlindSigning"},{guard:"notRefusedByUser",target:"BlindSignTransactionFallback"},{target:"DetectBlindSigning"}]},BlindSignTransactionFallback:{entry:(0,e.assign)({intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:i.SignTransactionDAStep.BLIND_SIGN_TRANSACTION_FALLBACK},_internalState:({context:t})=>({...t._internalState,usedFallback:!0})}),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.ClearSigningType.BASIC}),onDone:{target:"BlindSignTransactionFallbackResultCheck",actions:[(0,e.assign)({_internalState:({event:t,context:r})=>(0,n.isSuccessCommandResult)(t.output)?{...r._internalState,signature:t.output.data}:{...r._internalState,error:t.output.error}})]},onError:{target:"DetectBlindSigning",actions:"assignErrorFromEvent"}}},BlindSignTransactionFallbackResultCheck:{always:"DetectBlindSigning"},DetectBlindSigning:{entry:(0,e.assign)({intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:i.SignTransactionDAStep.DETECT_BLIND_SIGNING}}),invoke:{id:"detectBlindSigning",src:"detectBlindSigning",input:({context:t})=>{const r=a.getDeviceSessionState(),g=r.sessionStateType!==n.DeviceSessionStateType.Connected?r.firmwareVersion?.os??null:null,{subset:c,contexts:h,usedFallback:N,clearSigningType:F,contextErrorCount:w}=t._internalState;return{input:{type:"transaction",hasContext:!(!!c?.data&&c.data.length>2)||h.length>0,contextTypes:h.map(x=>x.context.type),usedFallback:N,chainId:c?.chainId??null,targetAddress:c?.to??null,selectorId:c?.selector&&c.selector.length===u.SELECTOR_ID_LENGTH?c.selector:null,deviceModelId:a.getDeviceModel().id,signerAppVersion:t._internalState.appConfig?.version??"",deviceVersion:g,clearSigningType:F,partialContextErrors:w},contextModule:t.input.contextModule,loggerFactory:this.getLoggerFactory(a)}},onDone:[{guard:"hasSignature",target:"Success",actions:(0,e.assign)({_internalState:({event:t,context:r})=>({...r._internalState,isBlindSign:t.output.isBlindSign})})},{target:"Error",actions:(0,e.assign)({_internalState:({event:t,context:r})=>({...r._internalState,isBlindSign:t.output.isBlindSign})})}],onError:[{guard:"hasSignature",target:"Success"},{target:"Error"}]}},Success:{type:"final"},Error:{type:"final"}},output:({context:t})=>t._internalState.signature?(0,d.Right)(t._internalState.signature):(0,d.Left)(t._internalState.error||new n.UnknownDAError("No error in final state"))})}extractDependencies(a){return{getAddress:async t=>a.sendCommand(new k.GetAddressCommand(t.input)),getAppConfig:async()=>a.sendCommand(new I.GetAppConfiguration),web3CheckOptIn:async()=>a.sendCommand(new D.Web3CheckOptInCommand),parseTransaction:async t=>Promise.resolve(new b.ParseTransactionTask({mapper:t.input.mapper,transaction:t.input.transaction}).run()),buildContexts:async t=>new P.BuildFullContextsTask(a,t.input).run(),provideContexts:async t=>new O.ProvideTransactionContextsTask(a,t.input).run(),signTransaction:async t=>new B.SendSignTransactionTask(a,{...t.input,loggerFactory:this.getLoggerFactory(a)}).run(),detectBlindSigning:async t=>new v.BlindSigningDetectionTask(t.input).run()}}}0&&(module.exports={SignTransactionDeviceAction});
2
2
  //# sourceMappingURL=SignTransactionDeviceAction.js.map