@ledgerhq/device-signer-kit-bitcoin 1.2.1 → 1.3.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 (91) hide show
  1. package/lib/cjs/api/app-binder/GetWalletAddressDeviceActionTypes.js +1 -1
  2. package/lib/cjs/api/app-binder/GetWalletAddressDeviceActionTypes.js.map +3 -3
  3. package/lib/cjs/api/app-binder/SignPsbtDeviceActionTypes.js +1 -1
  4. package/lib/cjs/api/app-binder/SignPsbtDeviceActionTypes.js.map +3 -3
  5. package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js +1 -1
  6. package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js.map +3 -3
  7. package/lib/cjs/internal/app-binder/BtcAppBinder.js +1 -1
  8. package/lib/cjs/internal/app-binder/BtcAppBinder.js.map +3 -3
  9. package/lib/cjs/internal/app-binder/BtcAppBinder.test.js +1 -1
  10. package/lib/cjs/internal/app-binder/BtcAppBinder.test.js.map +3 -3
  11. package/lib/cjs/internal/app-binder/command/ContinueCommand.js +1 -1
  12. package/lib/cjs/internal/app-binder/command/ContinueCommand.js.map +3 -3
  13. package/lib/cjs/internal/app-binder/command/ContinueCommand.test.js +1 -1
  14. package/lib/cjs/internal/app-binder/command/ContinueCommand.test.js.map +1 -1
  15. package/lib/cjs/internal/app-binder/command/GetExtendedPublicKeyCommand.js +1 -1
  16. package/lib/cjs/internal/app-binder/command/GetExtendedPublicKeyCommand.js.map +3 -3
  17. package/lib/cjs/internal/app-binder/command/GetExtendedPublicKeyCommand.test.js +1 -1
  18. package/lib/cjs/internal/app-binder/command/GetExtendedPublicKeyCommand.test.js.map +1 -1
  19. package/lib/cjs/internal/app-binder/command/GetMasterFingerprintCommand.js +1 -1
  20. package/lib/cjs/internal/app-binder/command/GetMasterFingerprintCommand.js.map +3 -3
  21. package/lib/cjs/internal/app-binder/command/GetMasterFingerprintCommand.test.js +1 -1
  22. package/lib/cjs/internal/app-binder/command/GetMasterFingerprintCommand.test.js.map +1 -1
  23. package/lib/cjs/internal/app-binder/constants.js +2 -0
  24. package/lib/cjs/internal/app-binder/constants.js.map +7 -0
  25. package/lib/cjs/internal/app-binder/device-action/GetWalletAddress/GetWalletAddressDeviceAction.js +1 -1
  26. package/lib/cjs/internal/app-binder/device-action/GetWalletAddress/GetWalletAddressDeviceAction.js.map +3 -3
  27. package/lib/cjs/internal/app-binder/device-action/GetWalletAddress/GetWalletAddressDeviceAction.test.js +1 -1
  28. package/lib/cjs/internal/app-binder/device-action/GetWalletAddress/GetWalletAddressDeviceAction.test.js.map +3 -3
  29. package/lib/cjs/internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction.js +1 -1
  30. package/lib/cjs/internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction.js.map +3 -3
  31. package/lib/cjs/internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction.test.js +1 -1
  32. package/lib/cjs/internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction.test.js.map +3 -3
  33. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js +1 -1
  34. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js.map +3 -3
  35. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js +1 -1
  36. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js.map +3 -3
  37. package/lib/cjs/package.json +1 -1
  38. package/lib/esm/api/app-binder/GetWalletAddressDeviceActionTypes.js +1 -0
  39. package/lib/esm/api/app-binder/GetWalletAddressDeviceActionTypes.js.map +4 -4
  40. package/lib/esm/api/app-binder/SignPsbtDeviceActionTypes.js +1 -0
  41. package/lib/esm/api/app-binder/SignPsbtDeviceActionTypes.js.map +4 -4
  42. package/lib/esm/api/app-binder/SignTransactionDeviceActionTypes.js +1 -0
  43. package/lib/esm/api/app-binder/SignTransactionDeviceActionTypes.js.map +4 -4
  44. package/lib/esm/internal/app-binder/BtcAppBinder.js +1 -1
  45. package/lib/esm/internal/app-binder/BtcAppBinder.js.map +3 -3
  46. package/lib/esm/internal/app-binder/BtcAppBinder.test.js +1 -1
  47. package/lib/esm/internal/app-binder/BtcAppBinder.test.js.map +3 -3
  48. package/lib/esm/internal/app-binder/command/ContinueCommand.js +1 -1
  49. package/lib/esm/internal/app-binder/command/ContinueCommand.js.map +3 -3
  50. package/lib/esm/internal/app-binder/command/ContinueCommand.test.js +1 -1
  51. package/lib/esm/internal/app-binder/command/ContinueCommand.test.js.map +1 -1
  52. package/lib/esm/internal/app-binder/command/GetExtendedPublicKeyCommand.js +1 -1
  53. package/lib/esm/internal/app-binder/command/GetExtendedPublicKeyCommand.js.map +3 -3
  54. package/lib/esm/internal/app-binder/command/GetExtendedPublicKeyCommand.test.js +1 -1
  55. package/lib/esm/internal/app-binder/command/GetExtendedPublicKeyCommand.test.js.map +1 -1
  56. package/lib/esm/internal/app-binder/command/GetMasterFingerprintCommand.js +1 -1
  57. package/lib/esm/internal/app-binder/command/GetMasterFingerprintCommand.js.map +3 -3
  58. package/lib/esm/internal/app-binder/command/GetMasterFingerprintCommand.test.js +1 -1
  59. package/lib/esm/internal/app-binder/command/GetMasterFingerprintCommand.test.js.map +1 -1
  60. package/lib/esm/internal/app-binder/constants.js +2 -0
  61. package/lib/esm/internal/app-binder/constants.js.map +7 -0
  62. package/lib/esm/internal/app-binder/device-action/GetWalletAddress/GetWalletAddressDeviceAction.js +1 -1
  63. package/lib/esm/internal/app-binder/device-action/GetWalletAddress/GetWalletAddressDeviceAction.js.map +3 -3
  64. package/lib/esm/internal/app-binder/device-action/GetWalletAddress/GetWalletAddressDeviceAction.test.js +1 -1
  65. package/lib/esm/internal/app-binder/device-action/GetWalletAddress/GetWalletAddressDeviceAction.test.js.map +3 -3
  66. package/lib/esm/internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction.js +1 -1
  67. package/lib/esm/internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction.js.map +3 -3
  68. package/lib/esm/internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction.test.js +1 -1
  69. package/lib/esm/internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction.test.js.map +3 -3
  70. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js +1 -1
  71. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js.map +3 -3
  72. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js +1 -1
  73. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js.map +3 -3
  74. package/lib/esm/package.json +1 -1
  75. package/lib/types/api/app-binder/GetWalletAddressDeviceActionTypes.d.ts +7 -0
  76. package/lib/types/api/app-binder/GetWalletAddressDeviceActionTypes.d.ts.map +1 -1
  77. package/lib/types/api/app-binder/SignPsbtDeviceActionTypes.d.ts +8 -0
  78. package/lib/types/api/app-binder/SignPsbtDeviceActionTypes.d.ts.map +1 -1
  79. package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts +7 -0
  80. package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts.map +1 -1
  81. package/lib/types/internal/app-binder/BtcAppBinder.d.ts.map +1 -1
  82. package/lib/types/internal/app-binder/command/ContinueCommand.d.ts.map +1 -1
  83. package/lib/types/internal/app-binder/command/GetExtendedPublicKeyCommand.d.ts.map +1 -1
  84. package/lib/types/internal/app-binder/command/GetMasterFingerprintCommand.d.ts.map +1 -1
  85. package/lib/types/internal/app-binder/constants.d.ts +2 -0
  86. package/lib/types/internal/app-binder/constants.d.ts.map +1 -0
  87. package/lib/types/internal/app-binder/device-action/GetWalletAddress/GetWalletAddressDeviceAction.d.ts.map +1 -1
  88. package/lib/types/internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction.d.ts.map +1 -1
  89. package/lib/types/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.d.ts.map +1 -1
  90. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  91. package/package.json +6 -6
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/internal/app-binder/device-action/GetWalletAddress/GetWalletAddressDeviceAction.ts"],
4
- "sourcesContent": ["import {\n type CommandResult,\n type DeviceActionStateMachine,\n type InternalApi,\n isSuccessCommandResult,\n OpenAppDeviceAction,\n type StateMachineTypes,\n UnknownDAError,\n UserInteractionRequired,\n XStateDeviceAction,\n} from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { assign, fromPromise, setup } from \"xstate\";\n\nimport {\n type GetWalletAddressDAError,\n type GetWalletAddressDAInput,\n type GetWalletAddressDAIntermediateValue,\n type GetWalletAddressDAInternalState,\n type GetWalletAddressDAOutput,\n} from \"@api/app-binder/GetWalletAddressDeviceActionTypes\";\nimport { type WalletAddress } from \"@api/model/Wallet\";\nimport { type Wallet as ApiWallet } from \"@api/model/Wallet\";\nimport { type BtcErrorCodes } from \"@internal/app-binder/command/utils/bitcoinAppErrors\";\nimport { GetWalletAddressTask } from \"@internal/app-binder/task/GetWalletAddressTask\";\nimport { PrepareWalletPolicyTask } from \"@internal/app-binder/task/PrepareWalletPolicyTask\";\nimport { type DataStoreService } from \"@internal/data-store/service/DataStoreService\";\nimport { type Wallet as InternalWallet } from \"@internal/wallet/model/Wallet\";\nimport { type WalletBuilder } from \"@internal/wallet/service/WalletBuilder\";\nimport { type WalletSerializer } from \"@internal/wallet/service/WalletSerializer\";\n\nexport type GetWalletAddressMachineDependencies = {\n readonly prepareWalletPolicy: (arg0: {\n input: {\n wallet: ApiWallet;\n walletBuilder: WalletBuilder;\n };\n }) => Promise<CommandResult<InternalWallet, BtcErrorCodes>>;\n readonly getWalletAddress: (arg0: {\n input: {\n checkOnDevice: boolean;\n change: boolean;\n addressIndex: number;\n wallet: InternalWallet;\n walletBuilder: WalletBuilder;\n walletSerializer: WalletSerializer;\n dataStoreService: DataStoreService;\n };\n }) => Promise<CommandResult<WalletAddress, BtcErrorCodes>>;\n};\n\nexport type ExtractGetWalletAddressMachineDependencies = (\n internalApi: InternalApi,\n) => GetWalletAddressMachineDependencies;\n\nexport class GetWalletAddressDeviceAction extends XStateDeviceAction<\n GetWalletAddressDAOutput,\n GetWalletAddressDAInput,\n GetWalletAddressDAError,\n GetWalletAddressDAIntermediateValue,\n GetWalletAddressDAInternalState\n> {\n makeStateMachine(\n internalApi: InternalApi,\n ): DeviceActionStateMachine<\n GetWalletAddressDAOutput,\n GetWalletAddressDAInput,\n GetWalletAddressDAError,\n GetWalletAddressDAIntermediateValue,\n GetWalletAddressDAInternalState\n > {\n type types = StateMachineTypes<\n GetWalletAddressDAOutput,\n GetWalletAddressDAInput,\n GetWalletAddressDAError,\n GetWalletAddressDAIntermediateValue,\n GetWalletAddressDAInternalState\n >;\n\n const { getWalletAddress, prepareWalletPolicy } =\n this.extractDependencies(internalApi);\n\n return setup({\n types: {\n input: {} as types[\"input\"],\n context: {} as types[\"context\"],\n output: {} as types[\"output\"],\n },\n\n actors: {\n openAppStateMachine: new OpenAppDeviceAction({\n input: { appName: \"Bitcoin\" },\n }).makeStateMachine(internalApi),\n prepareWalletPolicy: fromPromise(prepareWalletPolicy),\n getWalletAddress: fromPromise(getWalletAddress),\n },\n guards: {\n noInternalError: ({ context }) => context._internalState.error === null,\n skipOpenApp: ({ context }) => context.input.skipOpenApp,\n },\n actions: {\n assignErrorFromEvent: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: _.event[\"error\"], // NOTE: it should never happen, the error is not typed anymore here\n }),\n }),\n },\n }).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QGUCWUB2AFMAnWA9hgIYA2AsnLMTACJgBuqAxmAILMAuqRAdAPIAHMBjaDB9Jqw7ciAYghEwvVBgYEA1soLDR45J2Kcw5YswAWqsAG0ADAF1EoQQVipZGJyAAeiACwAzADsvACcABwAjKGRtuG2AGyRSX4ANCAAnoiRAEwArLy2uX6RQUGRpeHhfgC+NelomDj4RGSUsNR0jCzsXDwYvADC5mDMGkIiYhLd0n1EAEpwAK6knHJ2jkggLm4eXr4IoRG8eTlFOaWhQX45QaHpWQiRN4UBfu8JeaE3obY5OXUGuhsHhCCQKFQaGBJD0ZP0hiMxhM9NMpL0PItYCs1tZIptnK53P19ogjuETmdcpdrrd7pl-M8wnkgvkgvFbH48n4EkFASBGiCWuD2p1oTN0fCBc0wW1ITAFEoVGpNMo3E1Qa0IR0oRsvDsiUQSU88tVeOEktEEuE8m8cjcHqScicgokTXk8rZygFQgD6vzgdLNSKoTDZh5eFKNcK5WA5HhcARcLxBKQjAAzRMAW14asFMq1ot1W31ey2B0iJr8ZotoStNpu9vpCDtoTNHr8PoizyKvL9kaFsu1XTRcL4-fzwZgmOxw1GGnWDj1hNLoAOFwCBWC5u5RySEQdT1sra+OSt1wCAQuzICfPHQZjoYlY4DUcHounq1nY3WeKXu2JZaIOum5sgkO61tE4QHhWBS2HkCT-G8R5wc8N58hgBAQHAXh3tGQ5iiOcyeMWy4AauiAALQJAeVGFLY9EMYxDG9kC6oDgWIbiqOAzIlMj7cX+BrEeRCCNo8sS2CcRz-B6zIsnBaGsXm974fxREInOvHiGpGLLKsgkrj4iBnrwFwVgkCHfEeCQBNB3K8IEpxBO6ySep8in+mxE4Plx6m4W+UIGWRRlPJEVRmncOTmhyLI2QeUS8GFQRvPBXZRLWt4vuxk4EbCflZd5+EfpwX4aEFhqAU84RRYUpyXmBATJBeQTQZEARhKEG5Ne69GUplXkqaKOmSkszCsB05XCSFOSXgUyVshUdoJLYF7QYkvAXkUER3H45q1qE-XKXhQ2+eGACiuAJrgk1GjN+S8PNUTFMtq1Nrckl-O6wTct6KF5HUdRAA */\n id: \"GetWalletAddressDeviceAction\",\n initial: \"InitialState\",\n context: ({ input }) => {\n return {\n input,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n _internalState: {\n error: null,\n wallet: null,\n walletAddress: null,\n },\n };\n },\n states: {\n InitialState: {\n always: [\n {\n target: \"PrepareWalletPolicy\",\n guard: \"skipOpenApp\",\n },\n \"OpenAppDeviceAction\",\n ],\n },\n OpenAppDeviceAction: {\n exit: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n }),\n invoke: {\n id: \"openAppStateMachine\",\n input: { appName: \"Bitcoin\" },\n src: \"openAppStateMachine\",\n onSnapshot: {\n actions: assign({\n intermediateValue: (_) =>\n _.event.snapshot.context.intermediateValue,\n }),\n },\n onDone: {\n actions: assign({\n _internalState: (_) => {\n return _.event.output.caseOf<GetWalletAddressDAInternalState>(\n {\n Right: () => _.context._internalState,\n Left: (error) => ({\n ..._.context._internalState,\n error,\n }),\n },\n );\n },\n }),\n target: \"CheckOpenAppDeviceActionResult\",\n },\n },\n },\n CheckOpenAppDeviceActionResult: {\n always: [\n {\n target: \"PrepareWalletPolicy\",\n guard: \"noInternalError\",\n },\n \"Error\",\n ],\n },\n PrepareWalletPolicy: {\n invoke: {\n id: \"prepareWalletPolicy\",\n src: \"prepareWalletPolicy\",\n input: ({ context }) => ({\n wallet: context.input.wallet,\n walletBuilder: context.input.walletBuilder,\n }),\n onDone: {\n target: \"PrepareWalletPolicyResultCheck\",\n actions: assign({\n _internalState: ({ event, context }) => {\n if (isSuccessCommandResult(event.output)) {\n return {\n ...context._internalState,\n wallet: event.output.data,\n };\n }\n return {\n ...context._internalState,\n error: event.output.error,\n };\n },\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n PrepareWalletPolicyResultCheck: {\n always: [\n { guard: \"noInternalError\", target: \"GetWalletAddress\" },\n { target: \"Error\" },\n ],\n },\n GetWalletAddress: {\n entry: assign(({ context }) => ({\n intermediateValue: {\n requiredUserInteraction: context.input.checkOnDevice\n ? UserInteractionRequired.VerifyAddress\n : UserInteractionRequired.None,\n },\n })),\n exit: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n }),\n invoke: {\n id: \"getWalletAddress\",\n src: \"getWalletAddress\",\n input: ({ context }) => ({\n checkOnDevice: context.input.checkOnDevice,\n wallet: context._internalState.wallet!,\n change: context.input.change,\n addressIndex: context.input.addressIndex,\n dataStoreService: context.input.dataStoreService,\n walletSerializer: context.input.walletSerializer,\n walletBuilder: context.input.walletBuilder,\n }),\n onDone: {\n target: \"GetWalletAddressResultCheck\",\n actions: assign({\n _internalState: ({ event, context }) => {\n if (isSuccessCommandResult(event.output)) {\n return {\n ...context._internalState,\n walletAddress: event.output.data,\n };\n }\n return {\n ...context._internalState,\n error: event.output.error,\n };\n },\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n GetWalletAddressResultCheck: {\n always: [\n { guard: \"noInternalError\", target: \"Success\" },\n { target: \"Error\" },\n ],\n },\n Success: {\n type: \"final\",\n },\n Error: {\n type: \"final\",\n },\n },\n output: ({ context }) =>\n context._internalState.walletAddress\n ? Right(context._internalState.walletAddress)\n : Left(\n context._internalState.error ||\n new UnknownDAError(\"No error in final state\"),\n ),\n });\n }\n\n extractDependencies(\n internalApi: InternalApi,\n ): GetWalletAddressMachineDependencies {\n const prepareWalletPolicy = async (arg0: {\n input: { wallet: ApiWallet; walletBuilder: WalletBuilder };\n }): Promise<CommandResult<InternalWallet, BtcErrorCodes>> => {\n const {\n input: { walletBuilder, wallet },\n } = arg0;\n return await new PrepareWalletPolicyTask(\n internalApi,\n { wallet },\n walletBuilder,\n ).run();\n };\n const getWalletAddress = async (arg0: {\n input: {\n checkOnDevice: boolean;\n change: boolean;\n addressIndex: number;\n wallet: InternalWallet;\n walletBuilder: WalletBuilder;\n walletSerializer: WalletSerializer;\n dataStoreService: DataStoreService;\n };\n }): Promise<CommandResult<WalletAddress, BtcErrorCodes>> => {\n const {\n checkOnDevice,\n wallet,\n change,\n addressIndex,\n walletSerializer,\n dataStoreService,\n } = arg0.input;\n\n return await new GetWalletAddressTask(\n internalApi,\n {\n checkOnDevice,\n wallet,\n change,\n addressIndex,\n },\n walletSerializer,\n dataStoreService,\n ).run();\n };\n return {\n getWalletAddress,\n prepareWalletPolicy,\n };\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["isSuccessCommandResult", "OpenAppDeviceAction", "UnknownDAError", "UserInteractionRequired", "XStateDeviceAction", "Left", "Right", "assign", "fromPromise", "setup", "GetWalletAddressTask", "PrepareWalletPolicyTask", "GetWalletAddressDeviceAction", "internalApi", "getWalletAddress", "prepareWalletPolicy", "context", "_", "input", "error", "event", "arg0", "checkOnDevice", "wallet", "change", "addressIndex", "walletSerializer", "dataStoreService", "walletBuilder"]
4
+ "sourcesContent": ["import {\n type CommandResult,\n type DeviceActionStateMachine,\n type InternalApi,\n isSuccessCommandResult,\n OpenAppDeviceAction,\n type StateMachineTypes,\n UnknownDAError,\n UserInteractionRequired,\n XStateDeviceAction,\n} from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { assign, fromPromise, setup } from \"xstate\";\n\nimport {\n type GetWalletAddressDAError,\n type GetWalletAddressDAInput,\n type GetWalletAddressDAIntermediateValue,\n type GetWalletAddressDAInternalState,\n type GetWalletAddressDAOutput,\n getWalletAddressDAStateSteps,\n} from \"@api/app-binder/GetWalletAddressDeviceActionTypes\";\nimport { type WalletAddress } from \"@api/model/Wallet\";\nimport { type Wallet as ApiWallet } from \"@api/model/Wallet\";\nimport { type BtcErrorCodes } from \"@internal/app-binder/command/utils/bitcoinAppErrors\";\nimport { APP_NAME } from \"@internal/app-binder/constants\";\nimport { GetWalletAddressTask } from \"@internal/app-binder/task/GetWalletAddressTask\";\nimport { PrepareWalletPolicyTask } from \"@internal/app-binder/task/PrepareWalletPolicyTask\";\nimport { type DataStoreService } from \"@internal/data-store/service/DataStoreService\";\nimport { type Wallet as InternalWallet } from \"@internal/wallet/model/Wallet\";\nimport { type WalletBuilder } from \"@internal/wallet/service/WalletBuilder\";\nimport { type WalletSerializer } from \"@internal/wallet/service/WalletSerializer\";\n\nexport type GetWalletAddressMachineDependencies = {\n readonly prepareWalletPolicy: (arg0: {\n input: {\n wallet: ApiWallet;\n walletBuilder: WalletBuilder;\n };\n }) => Promise<CommandResult<InternalWallet, BtcErrorCodes>>;\n readonly getWalletAddress: (arg0: {\n input: {\n checkOnDevice: boolean;\n change: boolean;\n addressIndex: number;\n wallet: InternalWallet;\n walletBuilder: WalletBuilder;\n walletSerializer: WalletSerializer;\n dataStoreService: DataStoreService;\n };\n }) => Promise<CommandResult<WalletAddress, BtcErrorCodes>>;\n};\n\nexport type ExtractGetWalletAddressMachineDependencies = (\n internalApi: InternalApi,\n) => GetWalletAddressMachineDependencies;\n\nexport class GetWalletAddressDeviceAction extends XStateDeviceAction<\n GetWalletAddressDAOutput,\n GetWalletAddressDAInput,\n GetWalletAddressDAError,\n GetWalletAddressDAIntermediateValue,\n GetWalletAddressDAInternalState\n> {\n makeStateMachine(\n internalApi: InternalApi,\n ): DeviceActionStateMachine<\n GetWalletAddressDAOutput,\n GetWalletAddressDAInput,\n GetWalletAddressDAError,\n GetWalletAddressDAIntermediateValue,\n GetWalletAddressDAInternalState\n > {\n type types = StateMachineTypes<\n GetWalletAddressDAOutput,\n GetWalletAddressDAInput,\n GetWalletAddressDAError,\n GetWalletAddressDAIntermediateValue,\n GetWalletAddressDAInternalState\n >;\n\n const { getWalletAddress, prepareWalletPolicy } =\n this.extractDependencies(internalApi);\n\n return setup({\n types: {\n input: {} as types[\"input\"],\n context: {} as types[\"context\"],\n output: {} as types[\"output\"],\n },\n\n actors: {\n openAppStateMachine: new OpenAppDeviceAction({\n input: { appName: APP_NAME },\n }).makeStateMachine(internalApi),\n prepareWalletPolicy: fromPromise(prepareWalletPolicy),\n getWalletAddress: fromPromise(getWalletAddress),\n },\n guards: {\n noInternalError: ({ context }) => context._internalState.error === null,\n skipOpenApp: ({ context }) => context.input.skipOpenApp,\n },\n actions: {\n assignErrorFromEvent: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: _.event[\"error\"], // NOTE: it should never happen, the error is not typed anymore here\n }),\n }),\n },\n }).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QGUCWUB2AFMAnWA9hgIYA2AsnLMTACJgBuqAxmAILMAuqRAdAPIAHMBjaDB9Jqw7ciAYghEwvVBgYEA1soLDR45J2Kcw5YswAWqsAG0ADAF1EoQQVipZGJyAAeiACwAzADsvACcABwAjKGRtuG2AGyRSX4ANCAAnoiRAEwArLy2uX6RQUGRpeHhfgC+NelomDj4RGSUsNR0jCzsXDwYvADC5mDMGkIiYhLd0n1EAEpwAK6knHJ2jkggLm4eXr4IoRG8eTlFOaWhQX45QaHpWQiRN4UBfu8JeaE3obY5OXUGuhsHhCCQKFQaGBJD0ZP0hiMxhM9NMpL0PItYCs1tZIptnK53P19ogjuETmdcpdrrd7pl-M8wnkgvkgvFbH48n4EkFASBGiCWuD2p1oTN0fCBc0wW1ITAFEoVGpNMo3E1Qa0IR0oRsvDsiUQSU88tVeOEktEEuE8m8cjcHqScicgokTXk8rZygFQgD6vzgdLNSKoTDZh5eFKNcK5WA5HhcARcLxBKQjAAzRMAW14asFMq1ot1W31ey2B0iJr8ZotoStNpu9vpCDtoTNHr8PoizyKvL9kaFsu1XTRcL4-fzwZgmOxw1GGnWDj1hNLoAOFwCBWC5u5RySEQdT1sra+OSt1wCAQuzICfPHQZjoYlY4DUcHounq1nY3WeKXu2JZaIOum5sgkO61tE4QHhWBS2HkCT-G8R5wc8N58hgBAQHAXh3tGQ5iiOcyeMWy4AauiAALQJAeVGFLY9EMYxDG9kC6oDgWIbiqOAzIlMj7cX+BrEeRCCNo8sS2CcRz-B6zIsnBaGsXm974fxREInOvHiGpGLLKsgkrj4iBnrwFwVgkCHfEeCQBNB3K8IEpxBO6ySep8in+mxE4Plx6m4W+UIGWRRlPJEVRmncOTmhyLI2QeUS8GFQRvPBXZRLWt4vuxk4EbCflZd5+EfpwX4aEFhqAU84RRYUpyXmBATJBeQTQZEARhKEG5Ne69GUplXkqaKOmSkszCsB05XCSFOSXgUyVshUdoJLYF7QYkvAXkUER3H45q1qE-XKXhQ2+eGACiuAJrgk1GjN+S8PNUTFMtq1Nrckl-O6wTct6KF5HUdRAA */\n id: \"GetWalletAddressDeviceAction\",\n initial: \"InitialState\",\n context: ({ input }) => ({\n input,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getWalletAddressDAStateSteps.OPEN_APP,\n },\n _internalState: {\n error: null,\n wallet: null,\n walletAddress: null,\n },\n }),\n states: {\n InitialState: {\n always: [\n {\n target: \"PrepareWalletPolicy\",\n guard: \"skipOpenApp\",\n },\n \"OpenAppDeviceAction\",\n ],\n },\n OpenAppDeviceAction: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n step: getWalletAddressDAStateSteps.OPEN_APP,\n }),\n }),\n invoke: {\n id: \"openAppStateMachine\",\n input: { appName: APP_NAME },\n src: \"openAppStateMachine\",\n onSnapshot: {\n actions: assign({\n intermediateValue: ({ event }) => ({\n ...event.snapshot.context.intermediateValue,\n step: getWalletAddressDAStateSteps.OPEN_APP,\n }),\n }),\n },\n onDone: {\n actions: assign({\n _internalState: ({ event, context }) =>\n event.output.caseOf({\n Right: () => context._internalState,\n Left: (error) => ({\n ...context._internalState,\n error,\n }),\n }),\n }),\n target: \"CheckOpenAppDeviceActionResult\",\n },\n },\n },\n CheckOpenAppDeviceActionResult: {\n always: [\n {\n target: \"PrepareWalletPolicy\",\n guard: \"noInternalError\",\n },\n \"Error\",\n ],\n },\n\n PrepareWalletPolicy: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n step: getWalletAddressDAStateSteps.PREPARE_WALLET_POLICY,\n }),\n }),\n invoke: {\n id: \"prepareWalletPolicy\",\n src: \"prepareWalletPolicy\",\n input: ({ context }) => ({\n wallet: context.input.wallet,\n walletBuilder: context.input.walletBuilder,\n }),\n onDone: {\n target: \"PrepareWalletPolicyResultCheck\",\n actions: assign({\n _internalState: ({ event, context }) => {\n if (isSuccessCommandResult(event.output)) {\n return {\n ...context._internalState,\n wallet: event.output.data,\n };\n }\n return {\n ...context._internalState,\n error: event.output.error,\n };\n },\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n PrepareWalletPolicyResultCheck: {\n always: [\n { guard: \"noInternalError\", target: \"GetWalletAddress\" },\n { target: \"Error\" },\n ],\n },\n GetWalletAddress: {\n entry: assign(({ context }) => ({\n intermediateValue: {\n requiredUserInteraction: context.input.checkOnDevice\n ? UserInteractionRequired.VerifyAddress\n : UserInteractionRequired.None,\n step: getWalletAddressDAStateSteps.GET_WALLET_ADDRESS,\n },\n })),\n exit: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getWalletAddressDAStateSteps.GET_WALLET_ADDRESS,\n },\n }),\n invoke: {\n id: \"getWalletAddress\",\n src: \"getWalletAddress\",\n input: ({ context }) => ({\n checkOnDevice: context.input.checkOnDevice,\n wallet: context._internalState.wallet!,\n change: context.input.change,\n addressIndex: context.input.addressIndex,\n dataStoreService: context.input.dataStoreService,\n walletSerializer: context.input.walletSerializer,\n walletBuilder: context.input.walletBuilder,\n }),\n onDone: {\n target: \"GetWalletAddressResultCheck\",\n actions: assign({\n _internalState: ({ event, context }) => {\n if (isSuccessCommandResult(event.output)) {\n return {\n ...context._internalState,\n walletAddress: event.output.data,\n };\n }\n return {\n ...context._internalState,\n error: event.output.error,\n };\n },\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n GetWalletAddressResultCheck: {\n always: [\n { guard: \"noInternalError\", target: \"Success\" },\n { target: \"Error\" },\n ],\n },\n Success: {\n type: \"final\",\n },\n Error: {\n type: \"final\",\n },\n },\n output: ({ context }) =>\n context._internalState.walletAddress\n ? Right(context._internalState.walletAddress)\n : Left(\n context._internalState.error ||\n new UnknownDAError(\"No error in final state\"),\n ),\n });\n }\n\n extractDependencies(\n internalApi: InternalApi,\n ): GetWalletAddressMachineDependencies {\n const prepareWalletPolicy = async (arg0: {\n input: { wallet: ApiWallet; walletBuilder: WalletBuilder };\n }): Promise<CommandResult<InternalWallet, BtcErrorCodes>> => {\n const {\n input: { walletBuilder, wallet },\n } = arg0;\n return await new PrepareWalletPolicyTask(\n internalApi,\n { wallet },\n walletBuilder,\n ).run();\n };\n const getWalletAddress = async (arg0: {\n input: {\n checkOnDevice: boolean;\n change: boolean;\n addressIndex: number;\n wallet: InternalWallet;\n walletBuilder: WalletBuilder;\n walletSerializer: WalletSerializer;\n dataStoreService: DataStoreService;\n };\n }): Promise<CommandResult<WalletAddress, BtcErrorCodes>> => {\n const {\n checkOnDevice,\n wallet,\n change,\n addressIndex,\n walletSerializer,\n dataStoreService,\n } = arg0.input;\n\n return await new GetWalletAddressTask(\n internalApi,\n {\n checkOnDevice,\n wallet,\n change,\n addressIndex,\n },\n walletSerializer,\n dataStoreService,\n ).run();\n };\n return {\n getWalletAddress,\n prepareWalletPolicy,\n };\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["isSuccessCommandResult", "OpenAppDeviceAction", "UnknownDAError", "UserInteractionRequired", "XStateDeviceAction", "Left", "Right", "assign", "fromPromise", "setup", "getWalletAddressDAStateSteps", "APP_NAME", "GetWalletAddressTask", "PrepareWalletPolicyTask", "GetWalletAddressDeviceAction", "internalApi", "getWalletAddress", "prepareWalletPolicy", "context", "_", "input", "event", "error", "arg0", "checkOnDevice", "wallet", "change", "addressIndex", "walletSerializer", "dataStoreService", "walletBuilder"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{CommandResultFactory as o,DeviceActionStatus as e,UnknownDeviceExchangeError as d,UserInteractionRequired as t}from"@ledgerhq/device-management-kit";import{makeDeviceActionInternalApiMock as u}from"../../../app-binder/device-action/__test-utils__/makeInternalApi";import{setupOpenAppDAMock as p}from"../../../app-binder/device-action/__test-utils__/setupOpenAppDAMock";import{testDeviceActionStates as m}from"../../../app-binder/device-action/__test-utils__/testDeviceActionStates";import{GetWalletAddressDeviceAction as A}from"./GetWalletAddressDeviceAction";vi.mock("@ledgerhq/device-management-kit",async s=>({...await s(),OpenAppDeviceAction:vi.fn(()=>({makeStateMachine:vi.fn()}))}));describe("GetWalletAddressDeviceAction",()=>{const s=vi.fn(),l=vi.fn();function c(){return{prepareWalletPolicy:s,getWalletAddress:l}}describe("Success case",()=>{it("should call external dependencies with the correct parameters",()=>new Promise((n,i)=>{p();const r=new A({input:{wallet:"ApiWallet",walletBuilder:"WalletBuilder",walletSerializer:"WalletSerializer",dataStoreService:"DataStoreService",skipOpenApp:!1,checkOnDevice:!0,change:!1,addressIndex:1}});vi.spyOn(r,"extractDependencies").mockReturnValue(c()),s.mockResolvedValueOnce(o({data:"InternalWallet"})),l.mockResolvedValueOnce(o({data:"WalletAddress"}));const a=[{intermediateValue:{requiredUserInteraction:t.None},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.ConfirmOpenApp},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.None},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.VerifyAddress},status:e.Pending},{output:"WalletAddress",status:e.Completed}];m(r,a,u(),{onDone:n,onError:i})})),it("should be successful while skipping OpenApp",()=>new Promise((n,i)=>{p();const r=new A({input:{wallet:"ApiWallet",walletBuilder:"WalletBuilder",walletSerializer:"WalletSerializer",dataStoreService:"DataStoreService",skipOpenApp:!0,checkOnDevice:!0,change:!1,addressIndex:1}});vi.spyOn(r,"extractDependencies").mockReturnValue(c()),s.mockResolvedValueOnce(o({data:"InternalWallet"})),l.mockResolvedValueOnce(o({data:"WalletAddress"}));const a=[{intermediateValue:{requiredUserInteraction:t.None},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.VerifyAddress},status:e.Pending},{output:"WalletAddress",status:e.Completed}];m(r,a,u(),{onDone:n,onError:i})}))}),describe("Error cases",()=>{beforeEach(()=>{vi.resetAllMocks()}),it("Error if open app fails",()=>new Promise((n,i)=>{p(new d("Mocked error"));const r=[{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.ConfirmOpenApp}},{status:e.Error,error:new d("Mocked error")}],a=new A({input:{wallet:{},walletBuilder:{},walletSerializer:{},dataStoreService:{},skipOpenApp:!1,checkOnDevice:!0,change:!1,addressIndex:1}});vi.spyOn(a,"extractDependencies").mockReturnValue(c()),m(a,r,u(),{onDone:n,onError:i}),expect(l).not.toHaveBeenCalled()})),it("Error if prepareWalletPolicy fails",()=>new Promise((n,i)=>{p();const r=new A({input:{wallet:{},walletBuilder:{},walletSerializer:{},dataStoreService:{},skipOpenApp:!1,checkOnDevice:!0,change:!1,addressIndex:1}});vi.spyOn(r,"extractDependencies").mockReturnValue(c()),s.mockResolvedValueOnce(o({error:new d("Mocked error")}));const a=[{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.ConfirmOpenApp}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Error,error:new d("Mocked error")}];m(r,a,u(),{onDone:n,onError:i}),expect(l).not.toHaveBeenCalled()})),it("Error if getWalletAddress fails",()=>new Promise((n,i)=>{p();const r=new A({input:{wallet:{},walletBuilder:{},walletSerializer:{},dataStoreService:{},skipOpenApp:!1,checkOnDevice:!0,change:!1,addressIndex:1}});vi.spyOn(r,"extractDependencies").mockReturnValue(c()),s.mockResolvedValueOnce(o({data:"InternalWallet"})),l.mockResolvedValueOnce(o({error:new d("Mocked error")}));const a=[{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.ConfirmOpenApp}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.VerifyAddress}},{status:e.Error,error:new d("Mocked error")}];m(r,a,u(),{onDone:n,onError:i})}))})});
1
+ import{CommandResultFactory as d,DeviceActionStatus as e,UnknownDeviceExchangeError as c,UserInteractionRequired as t}from"@ledgerhq/device-management-kit";import{getWalletAddressDAStateSteps as r}from"../../../../api/app-binder/GetWalletAddressDeviceActionTypes";import{makeDeviceActionInternalApiMock as p}from"../../../app-binder/device-action/__test-utils__/makeInternalApi";import{setupOpenAppDAMock as A}from"../../../app-binder/device-action/__test-utils__/setupOpenAppDAMock";import{testDeviceActionStates as m}from"../../../app-binder/device-action/__test-utils__/testDeviceActionStates";import{GetWalletAddressDeviceAction as S}from"./GetWalletAddressDeviceAction";vi.mock("@ledgerhq/device-management-kit",async l=>({...await l(),OpenAppDeviceAction:vi.fn(()=>({makeStateMachine:vi.fn()}))}));describe("GetWalletAddressDeviceAction",()=>{const l=vi.fn(),o=vi.fn();function u(){return{prepareWalletPolicy:l,getWalletAddress:o}}describe("Success case",()=>{it("should call external dependencies with the correct parameters",()=>new Promise((i,s)=>{A();const a=new S({input:{wallet:"ApiWallet",walletBuilder:"WalletBuilder",walletSerializer:"WalletSerializer",dataStoreService:"DataStoreService",skipOpenApp:!1,checkOnDevice:!0,change:!1,addressIndex:1}});vi.spyOn(a,"extractDependencies").mockReturnValue(u()),l.mockResolvedValueOnce(d({data:"InternalWallet"})),o.mockResolvedValueOnce(d({data:"WalletAddress"}));const n=[{intermediateValue:{requiredUserInteraction:t.None,step:r.OPEN_APP},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.ConfirmOpenApp,step:r.OPEN_APP},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.None,step:r.PREPARE_WALLET_POLICY},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.VerifyAddress,step:r.GET_WALLET_ADDRESS},status:e.Pending},{output:"WalletAddress",status:e.Completed}];m(a,n,p(),{onDone:i,onError:s})})),it("should be successful while skipping OpenApp",()=>new Promise((i,s)=>{A();const a=new S({input:{wallet:"ApiWallet",walletBuilder:"WalletBuilder",walletSerializer:"WalletSerializer",dataStoreService:"DataStoreService",skipOpenApp:!0,checkOnDevice:!0,change:!1,addressIndex:1}});vi.spyOn(a,"extractDependencies").mockReturnValue(u()),l.mockResolvedValueOnce(d({data:"InternalWallet"})),o.mockResolvedValueOnce(d({data:"WalletAddress"}));const n=[{intermediateValue:{requiredUserInteraction:t.None,step:r.PREPARE_WALLET_POLICY},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.VerifyAddress,step:r.GET_WALLET_ADDRESS},status:e.Pending},{output:"WalletAddress",status:e.Completed}];m(a,n,p(),{onDone:i,onError:s})}))}),describe("Error cases",()=>{beforeEach(()=>{vi.resetAllMocks()}),it("Error if open app fails",()=>new Promise((i,s)=>{A(new c("Mocked error"));const a=[{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None,step:r.OPEN_APP}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.ConfirmOpenApp,step:r.OPEN_APP}},{status:e.Error,error:new c("Mocked error")}],n=new S({input:{wallet:{},walletBuilder:{},walletSerializer:{},dataStoreService:{},skipOpenApp:!1,checkOnDevice:!0,change:!1,addressIndex:1}});vi.spyOn(n,"extractDependencies").mockReturnValue(u()),m(n,a,p(),{onDone:i,onError:s}),expect(o).not.toHaveBeenCalled()})),it("Error if prepareWalletPolicy fails",()=>new Promise((i,s)=>{A();const a=new S({input:{wallet:{},walletBuilder:{},walletSerializer:{},dataStoreService:{},skipOpenApp:!1,checkOnDevice:!0,change:!1,addressIndex:1}});vi.spyOn(a,"extractDependencies").mockReturnValue(u()),l.mockResolvedValueOnce(d({error:new c("Mocked error")}));const n=[{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None,step:r.OPEN_APP}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.ConfirmOpenApp,step:r.OPEN_APP}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None,step:r.PREPARE_WALLET_POLICY}},{status:e.Error,error:new c("Mocked error")}];m(a,n,p(),{onDone:i,onError:s}),expect(o).not.toHaveBeenCalled()})),it("Error if getWalletAddress fails",()=>new Promise((i,s)=>{A();const a=new S({input:{wallet:{},walletBuilder:{},walletSerializer:{},dataStoreService:{},skipOpenApp:!1,checkOnDevice:!0,change:!1,addressIndex:1}});vi.spyOn(a,"extractDependencies").mockReturnValue(u()),l.mockResolvedValueOnce(d({data:"InternalWallet"})),o.mockResolvedValueOnce(d({error:new c("Mocked error")}));const n=[{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None,step:r.OPEN_APP}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.ConfirmOpenApp,step:r.OPEN_APP}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None,step:r.PREPARE_WALLET_POLICY}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.VerifyAddress,step:r.GET_WALLET_ADDRESS}},{status:e.Error,error:new c("Mocked error")}];m(a,n,p(),{onDone:i,onError:s})}))})});
2
2
  //# sourceMappingURL=GetWalletAddressDeviceAction.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/internal/app-binder/device-action/GetWalletAddress/GetWalletAddressDeviceAction.test.ts"],
4
- "sourcesContent": ["/* eslint @typescript-eslint/consistent-type-imports: off */\nimport {\n CommandResultFactory,\n DeviceActionStatus,\n UnknownDeviceExchangeError,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type GetWalletAddressDAState } from \"@api/app-binder/GetWalletAddressDeviceActionTypes\";\nimport { type RegisteredWallet, type WalletAddress } from \"@api/model/Wallet\";\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\nimport { setupOpenAppDAMock } from \"@internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock\";\nimport { testDeviceActionStates } from \"@internal/app-binder/device-action/__test-utils__/testDeviceActionStates\";\nimport { type DataStoreService } from \"@internal/data-store/service/DataStoreService\";\nimport { type WalletBuilder } from \"@internal/wallet/service/WalletBuilder\";\nimport { type WalletSerializer } from \"@internal/wallet/service/WalletSerializer\";\n\nimport { GetWalletAddressDeviceAction } from \"./GetWalletAddressDeviceAction\";\n\nvi.mock(\"@ledgerhq/device-management-kit\", async (importOriginal) => {\n const original =\n await importOriginal<typeof import(\"@ledgerhq/device-management-kit\")>();\n return {\n ...original,\n OpenAppDeviceAction: vi.fn(() => ({\n makeStateMachine: vi.fn(),\n })),\n };\n});\n\ndescribe(\"GetWalletAddressDeviceAction\", () => {\n const prepareWalletPolicyMock = vi.fn();\n const getWalletAddressMock = vi.fn();\n\n function extractDependenciesMock() {\n return {\n prepareWalletPolicy: prepareWalletPolicyMock,\n getWalletAddress: getWalletAddressMock,\n };\n }\n\n describe(\"Success case\", () => {\n it(\"should call external dependencies with the correct parameters\", () =>\n new Promise<void>((resolve, reject) => {\n // given\n setupOpenAppDAMock();\n\n const deviceAction = new GetWalletAddressDeviceAction({\n input: {\n wallet: \"ApiWallet\" as unknown as RegisteredWallet,\n walletBuilder: \"WalletBuilder\" as unknown as WalletBuilder,\n walletSerializer: \"WalletSerializer\" as unknown as WalletSerializer,\n dataStoreService: \"DataStoreService\" as unknown as DataStoreService,\n skipOpenApp: false,\n checkOnDevice: true,\n change: false,\n addressIndex: 1,\n },\n });\n\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n prepareWalletPolicyMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: \"InternalWallet\",\n }),\n );\n getWalletAddressMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: \"WalletAddress\",\n }),\n );\n\n const expectedStates: Array<GetWalletAddressDAState> = [\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n status: DeviceActionStatus.Pending,\n },\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n },\n status: DeviceActionStatus.Pending,\n },\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n status: DeviceActionStatus.Pending,\n },\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n },\n status: DeviceActionStatus.Pending,\n },\n {\n output: \"WalletAddress\" as unknown as WalletAddress,\n status: DeviceActionStatus.Completed,\n },\n ];\n\n // then\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"should be successful while skipping OpenApp\", () =>\n new Promise<void>((resolve, reject) => {\n // given\n setupOpenAppDAMock();\n\n const deviceAction = new GetWalletAddressDeviceAction({\n input: {\n wallet: \"ApiWallet\" as unknown as RegisteredWallet,\n walletBuilder: \"WalletBuilder\" as unknown as WalletBuilder,\n walletSerializer: \"WalletSerializer\" as unknown as WalletSerializer,\n dataStoreService: \"DataStoreService\" as unknown as DataStoreService,\n skipOpenApp: true,\n checkOnDevice: true,\n change: false,\n addressIndex: 1,\n },\n });\n\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n prepareWalletPolicyMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: \"InternalWallet\",\n }),\n );\n getWalletAddressMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: \"WalletAddress\",\n }),\n );\n\n const expectedStates: Array<GetWalletAddressDAState> = [\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n status: DeviceActionStatus.Pending,\n },\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n },\n status: DeviceActionStatus.Pending,\n },\n {\n output: \"WalletAddress\" as unknown as WalletAddress,\n status: DeviceActionStatus.Completed,\n },\n ];\n\n // then\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n });\n\n describe(\"Error cases\", () => {\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n it(\"Error if open app fails\", () =>\n new Promise<void>((resolve, reject) => {\n // given\n setupOpenAppDAMock(new UnknownDeviceExchangeError(\"Mocked error\"));\n\n const expectedStates: Array<GetWalletAddressDAState> = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n },\n ];\n\n const deviceAction = new GetWalletAddressDeviceAction({\n input: {\n wallet: {} as unknown as RegisteredWallet,\n walletBuilder: {} as WalletBuilder,\n walletSerializer: {} as WalletSerializer,\n dataStoreService: {} as DataStoreService,\n skipOpenApp: false,\n checkOnDevice: true,\n change: false,\n addressIndex: 1,\n },\n });\n\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n\n // then\n expect(getWalletAddressMock).not.toHaveBeenCalled();\n }));\n\n it(\"Error if prepareWalletPolicy fails\", () =>\n new Promise<void>((resolve, reject) => {\n // given\n setupOpenAppDAMock();\n\n const deviceAction = new GetWalletAddressDeviceAction({\n input: {\n wallet: {} as unknown as RegisteredWallet,\n walletBuilder: {} as WalletBuilder,\n walletSerializer: {} as WalletSerializer,\n dataStoreService: {} as DataStoreService,\n skipOpenApp: false,\n checkOnDevice: true,\n change: false,\n addressIndex: 1,\n },\n });\n\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n prepareWalletPolicyMock.mockResolvedValueOnce(\n CommandResultFactory({\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n }),\n );\n\n const expectedStates: Array<GetWalletAddressDAState> = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n },\n ];\n\n // then\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n\n expect(getWalletAddressMock).not.toHaveBeenCalled();\n }));\n\n it(\"Error if getWalletAddress fails\", () =>\n new Promise<void>((resolve, reject) => {\n // given\n setupOpenAppDAMock();\n\n const deviceAction = new GetWalletAddressDeviceAction({\n input: {\n wallet: {} as unknown as RegisteredWallet,\n walletBuilder: {} as WalletBuilder,\n walletSerializer: {} as WalletSerializer,\n dataStoreService: {} as DataStoreService,\n skipOpenApp: false,\n checkOnDevice: true,\n change: false,\n addressIndex: 1,\n },\n });\n\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n prepareWalletPolicyMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: \"InternalWallet\",\n }),\n );\n getWalletAddressMock.mockResolvedValueOnce(\n CommandResultFactory({\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n }),\n );\n\n const expectedStates: Array<GetWalletAddressDAState> = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n },\n ];\n\n // then\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["CommandResultFactory", "DeviceActionStatus", "UnknownDeviceExchangeError", "UserInteractionRequired", "makeDeviceActionInternalApiMock", "setupOpenAppDAMock", "testDeviceActionStates", "GetWalletAddressDeviceAction", "importOriginal", "prepareWalletPolicyMock", "getWalletAddressMock", "extractDependenciesMock", "resolve", "reject", "deviceAction", "expectedStates"]
4
+ "sourcesContent": ["/* eslint @typescript-eslint/consistent-type-imports: off */\nimport {\n CommandResultFactory,\n DeviceActionStatus,\n UnknownDeviceExchangeError,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\n\nimport {\n type GetWalletAddressDAState,\n getWalletAddressDAStateSteps,\n} from \"@api/app-binder/GetWalletAddressDeviceActionTypes\";\nimport { type RegisteredWallet, type WalletAddress } from \"@api/model/Wallet\";\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\nimport { setupOpenAppDAMock } from \"@internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock\";\nimport { testDeviceActionStates } from \"@internal/app-binder/device-action/__test-utils__/testDeviceActionStates\";\nimport { type DataStoreService } from \"@internal/data-store/service/DataStoreService\";\nimport { type WalletBuilder } from \"@internal/wallet/service/WalletBuilder\";\nimport { type WalletSerializer } from \"@internal/wallet/service/WalletSerializer\";\n\nimport { GetWalletAddressDeviceAction } from \"./GetWalletAddressDeviceAction\";\n\nvi.mock(\"@ledgerhq/device-management-kit\", async (importOriginal) => {\n const original =\n await importOriginal<typeof import(\"@ledgerhq/device-management-kit\")>();\n return {\n ...original,\n OpenAppDeviceAction: vi.fn(() => ({\n makeStateMachine: vi.fn(),\n })),\n };\n});\n\ndescribe(\"GetWalletAddressDeviceAction\", () => {\n const prepareWalletPolicyMock = vi.fn();\n const getWalletAddressMock = vi.fn();\n\n function extractDependenciesMock() {\n return {\n prepareWalletPolicy: prepareWalletPolicyMock,\n getWalletAddress: getWalletAddressMock,\n };\n }\n\n describe(\"Success case\", () => {\n it(\"should call external dependencies with the correct parameters\", () =>\n new Promise<void>((resolve, reject) => {\n // given\n setupOpenAppDAMock();\n\n const deviceAction = new GetWalletAddressDeviceAction({\n input: {\n wallet: \"ApiWallet\" as unknown as RegisteredWallet,\n walletBuilder: \"WalletBuilder\" as unknown as WalletBuilder,\n walletSerializer: \"WalletSerializer\" as unknown as WalletSerializer,\n dataStoreService: \"DataStoreService\" as unknown as DataStoreService,\n skipOpenApp: false,\n checkOnDevice: true,\n change: false,\n addressIndex: 1,\n },\n });\n\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n prepareWalletPolicyMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: \"InternalWallet\",\n }),\n );\n getWalletAddressMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: \"WalletAddress\",\n }),\n );\n\n const expectedStates: Array<GetWalletAddressDAState> = [\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getWalletAddressDAStateSteps.OPEN_APP,\n },\n status: DeviceActionStatus.Pending,\n },\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n step: getWalletAddressDAStateSteps.OPEN_APP,\n },\n status: DeviceActionStatus.Pending,\n },\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getWalletAddressDAStateSteps.PREPARE_WALLET_POLICY,\n },\n status: DeviceActionStatus.Pending,\n },\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n step: getWalletAddressDAStateSteps.GET_WALLET_ADDRESS,\n },\n status: DeviceActionStatus.Pending,\n },\n {\n output: \"WalletAddress\" as unknown as WalletAddress,\n status: DeviceActionStatus.Completed,\n },\n ];\n\n // then\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"should be successful while skipping OpenApp\", () =>\n new Promise<void>((resolve, reject) => {\n // given\n setupOpenAppDAMock();\n\n const deviceAction = new GetWalletAddressDeviceAction({\n input: {\n wallet: \"ApiWallet\" as unknown as RegisteredWallet,\n walletBuilder: \"WalletBuilder\" as unknown as WalletBuilder,\n walletSerializer: \"WalletSerializer\" as unknown as WalletSerializer,\n dataStoreService: \"DataStoreService\" as unknown as DataStoreService,\n skipOpenApp: true,\n checkOnDevice: true,\n change: false,\n addressIndex: 1,\n },\n });\n\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n prepareWalletPolicyMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: \"InternalWallet\",\n }),\n );\n getWalletAddressMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: \"WalletAddress\",\n }),\n );\n\n const expectedStates: Array<GetWalletAddressDAState> = [\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getWalletAddressDAStateSteps.PREPARE_WALLET_POLICY,\n },\n status: DeviceActionStatus.Pending,\n },\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n step: getWalletAddressDAStateSteps.GET_WALLET_ADDRESS,\n },\n status: DeviceActionStatus.Pending,\n },\n {\n output: \"WalletAddress\" as unknown as WalletAddress,\n status: DeviceActionStatus.Completed,\n },\n ];\n\n // then\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n });\n\n describe(\"Error cases\", () => {\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n it(\"Error if open app fails\", () =>\n new Promise<void>((resolve, reject) => {\n // given\n setupOpenAppDAMock(new UnknownDeviceExchangeError(\"Mocked error\"));\n\n const expectedStates: Array<GetWalletAddressDAState> = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getWalletAddressDAStateSteps.OPEN_APP,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n step: getWalletAddressDAStateSteps.OPEN_APP,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n },\n ];\n\n const deviceAction = new GetWalletAddressDeviceAction({\n input: {\n wallet: {} as unknown as RegisteredWallet,\n walletBuilder: {} as WalletBuilder,\n walletSerializer: {} as WalletSerializer,\n dataStoreService: {} as DataStoreService,\n skipOpenApp: false,\n checkOnDevice: true,\n change: false,\n addressIndex: 1,\n },\n });\n\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n\n // then\n expect(getWalletAddressMock).not.toHaveBeenCalled();\n }));\n\n it(\"Error if prepareWalletPolicy fails\", () =>\n new Promise<void>((resolve, reject) => {\n // given\n setupOpenAppDAMock();\n\n const deviceAction = new GetWalletAddressDeviceAction({\n input: {\n wallet: {} as unknown as RegisteredWallet,\n walletBuilder: {} as WalletBuilder,\n walletSerializer: {} as WalletSerializer,\n dataStoreService: {} as DataStoreService,\n skipOpenApp: false,\n checkOnDevice: true,\n change: false,\n addressIndex: 1,\n },\n });\n\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n prepareWalletPolicyMock.mockResolvedValueOnce(\n CommandResultFactory({\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n }),\n );\n\n const expectedStates: Array<GetWalletAddressDAState> = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getWalletAddressDAStateSteps.OPEN_APP,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n step: getWalletAddressDAStateSteps.OPEN_APP,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getWalletAddressDAStateSteps.PREPARE_WALLET_POLICY,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n },\n ];\n\n // then\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n\n expect(getWalletAddressMock).not.toHaveBeenCalled();\n }));\n\n it(\"Error if getWalletAddress fails\", () =>\n new Promise<void>((resolve, reject) => {\n // given\n setupOpenAppDAMock();\n\n const deviceAction = new GetWalletAddressDeviceAction({\n input: {\n wallet: {} as unknown as RegisteredWallet,\n walletBuilder: {} as WalletBuilder,\n walletSerializer: {} as WalletSerializer,\n dataStoreService: {} as DataStoreService,\n skipOpenApp: false,\n checkOnDevice: true,\n change: false,\n addressIndex: 1,\n },\n });\n\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n prepareWalletPolicyMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: \"InternalWallet\",\n }),\n );\n getWalletAddressMock.mockResolvedValueOnce(\n CommandResultFactory({\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n }),\n );\n\n const expectedStates: Array<GetWalletAddressDAState> = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getWalletAddressDAStateSteps.OPEN_APP,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n step: getWalletAddressDAStateSteps.OPEN_APP,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getWalletAddressDAStateSteps.PREPARE_WALLET_POLICY,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n step: getWalletAddressDAStateSteps.GET_WALLET_ADDRESS,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n },\n ];\n\n // then\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["CommandResultFactory", "DeviceActionStatus", "UnknownDeviceExchangeError", "UserInteractionRequired", "getWalletAddressDAStateSteps", "makeDeviceActionInternalApiMock", "setupOpenAppDAMock", "testDeviceActionStates", "GetWalletAddressDeviceAction", "importOriginal", "prepareWalletPolicyMock", "getWalletAddressMock", "extractDependenciesMock", "resolve", "reject", "deviceAction", "expectedStates"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{isSuccessCommandResult as o,OpenAppDeviceAction as S,UnknownDAError as b,UserInteractionRequired as i,XStateDeviceAction as d}from"@ledgerhq/device-management-kit";import{Left as m,Right as g}from"purify-ts";import{assign as r,fromPromise as p,setup as y}from"xstate";import{BuildPsbtTask as A}from"../../../app-binder/task/BuildPsbtTask";import{PrepareWalletPolicyTask as D}from"../../../app-binder/task/PrepareWalletPolicyTask";import{SignPsbtTask as w}from"../../../app-binder/task/SignPsbtTask";class B extends d{makeStateMachine(a){const{signPsbt:u,prepareWalletPolicy:c,buildPsbt:P}=this.extractDependencies(a);return y({types:{input:{},context:{},output:{}},actors:{openAppStateMachine:new S({input:{appName:"Bitcoin"}}).makeStateMachine(a),prepareWalletPolicy:p(c),buildPsbt:p(P),signPsbt:p(u)},guards:{noInternalError:({context:t})=>t._internalState.error===null,skipOpenApp:({context:t})=>t.input.skipOpenApp},actions:{assignErrorFromEvent:r({_internalState:t=>({...t.context._internalState,error:t.event.error})})}}).createMachine({id:"SignPsbtDeviceAction",initial:"InitialState",context:({input:t})=>({input:t,intermediateValue:{requiredUserInteraction:i.None},_internalState:{error:null,wallet:null,buildPsbtResult:null,signatures:null,signedPsbt:null}}),states:{InitialState:{always:[{target:"PrepareWalletPolicy",guard:"skipOpenApp"},"OpenAppDeviceAction"]},OpenAppDeviceAction:{exit:r({intermediateValue:{requiredUserInteraction:i.None}}),invoke:{id:"openAppStateMachine",input:{appName:"Bitcoin"},src:"openAppStateMachine",onSnapshot:{actions:r({intermediateValue:t=>t.event.snapshot.context.intermediateValue})},onDone:{actions:r({_internalState:t=>t.event.output.caseOf({Right:()=>t.context._internalState,Left:e=>({...t.context._internalState,error:e})})}),target:"CheckOpenAppDeviceActionResult"}}},CheckOpenAppDeviceActionResult:{always:[{target:"PrepareWalletPolicy",guard:"noInternalError"},"Error"]},PrepareWalletPolicy:{invoke:{id:"prepareWalletPolicy",src:"prepareWalletPolicy",input:({context:t})=>({wallet:t.input.wallet,walletBuilder:t.input.walletBuilder}),onDone:{target:"PrepareWalletPolicyResultCheck",actions:r({_internalState:({event:t,context:e})=>o(t.output)?{...e._internalState,wallet:t.output.data}:{...e._internalState,error:t.output.error}})},onError:{target:"Error",actions:"assignErrorFromEvent"}}},PrepareWalletPolicyResultCheck:{always:[{guard:"noInternalError",target:"BuildPsbt"},{target:"Error"}]},BuildPsbt:{invoke:{id:"buildPsbt",src:"buildPsbt",input:({context:t})=>({psbt:t.input.psbt,wallet:t._internalState.wallet,dataStoreService:t.input.dataStoreService,psbtMapper:t.input.psbtMapper}),onDone:{target:"BuildPsbtResultCheck",actions:r({_internalState:({event:t,context:e})=>o(t.output)?{...e._internalState,buildPsbtResult:t.output.data}:{...e._internalState,error:t.output.error}})},onError:{target:"Error",actions:"assignErrorFromEvent"}}},BuildPsbtResultCheck:{always:[{guard:"noInternalError",target:"SignPsbt"},{target:"Error"}]},SignPsbt:{entry:r({intermediateValue:{requiredUserInteraction:i.SignTransaction}}),exit:r({intermediateValue:{requiredUserInteraction:i.None}}),invoke:{id:"signPsbt",src:"signPsbt",input:({context:t})=>({walletSerializer:t.input.walletSerializer,valueParser:t.input.valueParser,buildPsbtResult:t._internalState.buildPsbtResult,wallet:t._internalState.wallet}),onDone:{target:"SignPsbtResultCheck",actions:r({_internalState:({event:t,context:e})=>o(t.output)?{...e._internalState,signatures:t.output.data}:{...e._internalState,error:t.output.error}})},onError:{target:"Error",actions:"assignErrorFromEvent"}}},SignPsbtResultCheck:{always:[{guard:"noInternalError",target:"Success"},{target:"Error"}]},Success:{type:"final"},Error:{type:"final"}},output:({context:{_internalState:{signatures:t,error:e}}})=>t?g(t):m(e||new b("No error in final state"))})}extractDependencies(a){return{prepareWalletPolicy:async t=>{const{input:{walletBuilder:e,wallet:n}}=t;return await new D(a,{wallet:n},e).run()},buildPsbt:async t=>{const{input:{psbt:e,wallet:n,dataStoreService:l,psbtMapper:s}}=t;return new A({psbt:e,wallet:n},l,s).run()},signPsbt:async t=>{const{input:{wallet:e,buildPsbtResult:n,walletSerializer:l,valueParser:s}}=t;return await new w(a,{wallet:e,...n},l,s).run()}}}}export{B as SignPsbtDeviceAction};
1
+ import{isSuccessCommandResult as o,OpenAppDeviceAction as d,UnknownDAError as m,UserInteractionRequired as n,XStateDeviceAction as g}from"@ledgerhq/device-management-kit";import{Left as y,Right as A}from"purify-ts";import{assign as r,fromPromise as u,setup as D}from"xstate";import{signPsbtDAStateSteps as a}from"../../../../api/app-binder/SignPsbtDeviceActionTypes";import{APP_NAME as b}from"../../../app-binder/constants";import{BuildPsbtTask as E}from"../../../app-binder/task/BuildPsbtTask";import{PrepareWalletPolicyTask as I}from"../../../app-binder/task/PrepareWalletPolicyTask";import{SignPsbtTask as w}from"../../../app-binder/task/SignPsbtTask";class M extends g{makeStateMachine(i){const{signPsbt:P,prepareWalletPolicy:c,buildPsbt:S}=this.extractDependencies(i);return D({types:{input:{},context:{},output:{}},actors:{openAppStateMachine:new d({input:{appName:b}}).makeStateMachine(i),prepareWalletPolicy:u(c),buildPsbt:u(S),signPsbt:u(P)},guards:{noInternalError:({context:t})=>t._internalState.error===null,skipOpenApp:({context:t})=>t.input.skipOpenApp},actions:{assignErrorFromEvent:r({_internalState:t=>({...t.context._internalState,error:t.event.error})})}}).createMachine({id:"SignPsbtDeviceAction",initial:"InitialState",context:({input:t})=>({input:t,intermediateValue:{requiredUserInteraction:n.None,step:a.OPEN_APP},_internalState:{error:null,wallet:null,buildPsbtResult:null,signatures:null,signedPsbt:null}}),states:{InitialState:{always:[{target:"PrepareWalletPolicy",guard:"skipOpenApp"},"OpenAppDeviceAction"]},OpenAppDeviceAction:{entry:r({intermediateValue:()=>({requiredUserInteraction:n.None,step:a.OPEN_APP})}),invoke:{id:"openAppStateMachine",input:{appName:b},src:"openAppStateMachine",onSnapshot:{actions:r({intermediateValue:({event:t})=>({...t.snapshot.context.intermediateValue,step:a.OPEN_APP})})},onDone:{actions:r({_internalState:t=>t.event.output.caseOf({Right:()=>t.context._internalState,Left:e=>({...t.context._internalState,error:e})})}),target:"CheckOpenAppDeviceActionResult"}}},CheckOpenAppDeviceActionResult:{always:[{target:"PrepareWalletPolicy",guard:"noInternalError"},"Error"]},PrepareWalletPolicy:{entry:r({intermediateValue:()=>({requiredUserInteraction:n.None,step:a.PREPARE_WALLET_POLICY})}),invoke:{id:"prepareWalletPolicy",src:"prepareWalletPolicy",input:({context:t})=>({wallet:t.input.wallet,walletBuilder:t.input.walletBuilder}),onDone:{target:"PrepareWalletPolicyResultCheck",actions:r({_internalState:({event:t,context:e})=>o(t.output)?{...e._internalState,wallet:t.output.data}:{...e._internalState,error:t.output.error}})},onError:{target:"Error",actions:"assignErrorFromEvent"}}},PrepareWalletPolicyResultCheck:{always:[{guard:"noInternalError",target:"BuildPsbt"},{target:"Error"}]},BuildPsbt:{entry:r({intermediateValue:()=>({requiredUserInteraction:n.None,step:a.BUILD_PSBT})}),invoke:{id:"buildPsbt",src:"buildPsbt",input:({context:t})=>({psbt:t.input.psbt,wallet:t._internalState.wallet,dataStoreService:t.input.dataStoreService,psbtMapper:t.input.psbtMapper}),onDone:{target:"BuildPsbtResultCheck",actions:r({_internalState:({event:t,context:e})=>o(t.output)?{...e._internalState,buildPsbtResult:t.output.data}:{...e._internalState,error:t.output.error}})},onError:{target:"Error",actions:"assignErrorFromEvent"}}},BuildPsbtResultCheck:{always:[{guard:"noInternalError",target:"SignPsbt"},{target:"Error"}]},SignPsbt:{entry:r({intermediateValue:{requiredUserInteraction:n.SignTransaction,step:a.SIGN_PSBT}}),exit:r({intermediateValue:{requiredUserInteraction:n.None,step:a.SIGN_PSBT}}),invoke:{id:"signPsbt",src:"signPsbt",input:({context:t})=>({walletSerializer:t.input.walletSerializer,valueParser:t.input.valueParser,buildPsbtResult:t._internalState.buildPsbtResult,wallet:t._internalState.wallet}),onDone:{target:"SignPsbtResultCheck",actions:r({_internalState:({event:t,context:e})=>o(t.output)?{...e._internalState,signatures:t.output.data}:{...e._internalState,error:t.output.error}})},onError:{target:"Error",actions:"assignErrorFromEvent"}}},SignPsbtResultCheck:{always:[{guard:"noInternalError",target:"Success"},{target:"Error"}]},Success:{type:"final"},Error:{type:"final"}},output:({context:{_internalState:{signatures:t,error:e}}})=>t?A(t):y(e||new m("No error in final state"))})}extractDependencies(i){return{prepareWalletPolicy:async t=>{const{input:{walletBuilder:e,wallet:l}}=t;return await new I(i,{wallet:l},e).run()},buildPsbt:async t=>{const{input:{psbt:e,wallet:l,dataStoreService:s,psbtMapper:p}}=t;return new E({psbt:e,wallet:l},s,p).run()},signPsbt:async t=>{const{input:{wallet:e,buildPsbtResult:l,walletSerializer:s,valueParser:p}}=t;return await new w(i,{wallet:e,...l},s,p).run()}}}}export{M as SignPsbtDeviceAction};
2
2
  //# sourceMappingURL=SignPsbtDeviceAction.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction.ts"],
4
- "sourcesContent": ["import {\n type CommandResult,\n type DeviceActionStateMachine,\n type InternalApi,\n isSuccessCommandResult,\n OpenAppDeviceAction,\n type StateMachineTypes,\n UnknownDAError,\n UserInteractionRequired,\n XStateDeviceAction,\n} from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { assign, fromPromise, setup } from \"xstate\";\n\nimport {\n type SignPsbtDAError,\n type SignPsbtDAInput,\n type SignPsbtDAIntermediateValue,\n type SignPsbtDAInternalState,\n type SignPsbtDAOutput,\n} from \"@api/app-binder/SignPsbtDeviceActionTypes\";\nimport { type Psbt as ApiPsbt } from \"@api/model/Psbt\";\nimport { type PsbtSignature } from \"@api/model/Signature\";\nimport { type Wallet as ApiWallet } from \"@api/model/Wallet\";\nimport { type BtcErrorCodes } from \"@internal/app-binder/command/utils/bitcoinAppErrors\";\nimport {\n BuildPsbtTask,\n type BuildPsbtTaskResult,\n} from \"@internal/app-binder/task/BuildPsbtTask\";\nimport { PrepareWalletPolicyTask } from \"@internal/app-binder/task/PrepareWalletPolicyTask\";\nimport { SignPsbtTask } from \"@internal/app-binder/task/SignPsbtTask\";\nimport type { DataStoreService } from \"@internal/data-store/service/DataStoreService\";\nimport type { PsbtMapper } from \"@internal/psbt/service/psbt/PsbtMapper\";\nimport type { ValueParser } from \"@internal/psbt/service/value/ValueParser\";\nimport { type Wallet as InternalWallet } from \"@internal/wallet/model/Wallet\";\nimport { type WalletBuilder } from \"@internal/wallet/service/WalletBuilder\";\nimport { type WalletSerializer } from \"@internal/wallet/service/WalletSerializer\";\n\nexport type MachineDependencies = {\n readonly prepareWalletPolicy: (arg0: {\n input: {\n wallet: ApiWallet;\n walletBuilder: WalletBuilder;\n };\n }) => Promise<CommandResult<InternalWallet, BtcErrorCodes>>;\n readonly buildPsbt: (arg0: {\n input: {\n psbt: ApiPsbt;\n wallet: InternalWallet;\n dataStoreService: DataStoreService;\n psbtMapper: PsbtMapper;\n };\n }) => Promise<CommandResult<BuildPsbtTaskResult, BtcErrorCodes>>;\n readonly signPsbt: (arg0: {\n input: {\n wallet: InternalWallet;\n buildPsbtResult: BuildPsbtTaskResult;\n walletSerializer: WalletSerializer;\n valueParser: ValueParser;\n };\n }) => Promise<CommandResult<PsbtSignature[], BtcErrorCodes>>;\n};\n\nexport type ExtractMachineDependencies = (\n internalApi: InternalApi,\n) => MachineDependencies;\n\nexport class SignPsbtDeviceAction extends XStateDeviceAction<\n SignPsbtDAOutput,\n SignPsbtDAInput,\n SignPsbtDAError,\n SignPsbtDAIntermediateValue,\n SignPsbtDAInternalState\n> {\n makeStateMachine(\n internalApi: InternalApi,\n ): DeviceActionStateMachine<\n SignPsbtDAOutput,\n SignPsbtDAInput,\n SignPsbtDAError,\n SignPsbtDAIntermediateValue,\n SignPsbtDAInternalState\n > {\n type types = StateMachineTypes<\n SignPsbtDAOutput,\n SignPsbtDAInput,\n SignPsbtDAError,\n SignPsbtDAIntermediateValue,\n SignPsbtDAInternalState\n >;\n\n const { signPsbt, prepareWalletPolicy, buildPsbt } =\n this.extractDependencies(internalApi);\n\n return setup({\n types: {\n input: {} as types[\"input\"],\n context: {} as types[\"context\"],\n output: {} as types[\"output\"],\n },\n\n actors: {\n openAppStateMachine: new OpenAppDeviceAction({\n input: { appName: \"Bitcoin\" },\n }).makeStateMachine(internalApi),\n prepareWalletPolicy: fromPromise(prepareWalletPolicy),\n buildPsbt: fromPromise(buildPsbt),\n signPsbt: fromPromise(signPsbt),\n },\n guards: {\n noInternalError: ({ context }) => context._internalState.error === null,\n skipOpenApp: ({ context }) => context.input.skipOpenApp,\n },\n actions: {\n assignErrorFromEvent: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: _.event[\"error\"], // NOTE: it should never happen, the error is not typed anymore here\n }),\n }),\n },\n }).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QGUCWUB2AFMAnWA9hgIYA2AsnLMTACJgBuqAxmAILMAuqRAdAPIAHMBjaDB9Jqw7ciAYghEwvVBgYEA1soLDR45J2Kcw5YswAWqsAG0ADAF1EoQQVipZGJyAAeiACwAzADsvACcABwAjKGRtuG2AGyRSX4ANCAAnoiRAEwArLy2uX6RQUGRpeHhfgC+NelomDj4RGSUsNR0jCzsXDwYvADC5mDMGkIiYhLd0n1EAEpwAK6knHJ2jkggLm4eXr4IoRG8eTlFOaWhQX45QaHpWQiRN4UBfu8JeaE3obY5OXUGuhsHhCCQKFQaGBJD0ZP0hiMxhM9NMpL0PItYCs1tZIptnK53P19ogjuETmdcpdrrd7pl-M8wnkgvkgvFbH48n4EkFASBGiCWuD2p1oTN0fCBc0wW1ITAFEoVGpNMo3E1Qa0IR0oRsvDsiUQSU88tVeOEktEEuE8m8cjcHqScicgokTXk8rZygFQgD6vzgdLNSKoTDZh5eFKNcK5WA5HhcARcLxBKQjAAzRMAW14asFMq1ot1W31ey2B0iJr8ZotoStNpu9vpCDtoTNHr8PoizyKvL9kaFsu1XTRcL4-fzwZgmOxw1GGnWDj1hNLoAOFwCBWC5u5RySEQdT1sra+OSt1wCAQuzICfPHQZjoYlY4DUcHounq1nY3WeKXu2JZaIOum5sgkO61tE4QHhWBS2HkCT-G8R5wc8N58hgBAQHAXh3tGQ5iiOcyeMWy4AauiAALQJAeVGFLY9EMYxDG9kC6oDgWIbiqOAzIlMj7cX+BrEeRCCNo8sS2CcRz-B6zIsnBaGsXm974fxREInOvHiGpGLLKsgkrj4iBnrwFwVgkCHfEeCQBNB3K8IEpxBO6ySep8in+mxE4Plx6m4W+UIGWRRlPJEVRmncOTmhyLI2QeUS8GFQRvPBXZRLWt4vuxk4EbCflZd5+EfpwX4aEFhqAU84RRYUpyXmBATJBeQTQZEARhKEG5Ne69GUplXkqaKOmSkszCsB05XCSFOSXgUyVshUdoJLYF7QYkvAXkUER3H45q1qE-XKXhQ2+eGACiuAJrgk1GjN+S8PNUTFMtq1Nrckl-O6wTct6KF5HUdRAA */\n id: \"SignPsbtDeviceAction\",\n initial: \"InitialState\",\n context: ({ input }) => {\n return {\n input,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n _internalState: {\n error: null,\n wallet: null,\n buildPsbtResult: null,\n signatures: null,\n signedPsbt: null,\n },\n };\n },\n states: {\n InitialState: {\n always: [\n {\n target: \"PrepareWalletPolicy\",\n guard: \"skipOpenApp\",\n },\n \"OpenAppDeviceAction\",\n ],\n },\n OpenAppDeviceAction: {\n exit: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n }),\n invoke: {\n id: \"openAppStateMachine\",\n input: { appName: \"Bitcoin\" },\n src: \"openAppStateMachine\",\n onSnapshot: {\n actions: assign({\n intermediateValue: (_) =>\n _.event.snapshot.context.intermediateValue,\n }),\n },\n onDone: {\n actions: assign({\n _internalState: (_) => {\n return _.event.output.caseOf<SignPsbtDAInternalState>({\n Right: () => _.context._internalState,\n Left: (error) => ({\n ..._.context._internalState,\n error,\n }),\n });\n },\n }),\n target: \"CheckOpenAppDeviceActionResult\",\n },\n },\n },\n CheckOpenAppDeviceActionResult: {\n always: [\n {\n target: \"PrepareWalletPolicy\",\n guard: \"noInternalError\",\n },\n \"Error\",\n ],\n },\n PrepareWalletPolicy: {\n invoke: {\n id: \"prepareWalletPolicy\",\n src: \"prepareWalletPolicy\",\n input: ({ context }) => ({\n wallet: context.input.wallet,\n walletBuilder: context.input.walletBuilder,\n }),\n onDone: {\n target: \"PrepareWalletPolicyResultCheck\",\n actions: assign({\n _internalState: ({ event, context }) => {\n if (isSuccessCommandResult(event.output)) {\n return {\n ...context._internalState,\n wallet: event.output.data,\n };\n }\n return {\n ...context._internalState,\n error: event.output.error,\n };\n },\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n PrepareWalletPolicyResultCheck: {\n always: [\n { guard: \"noInternalError\", target: \"BuildPsbt\" },\n { target: \"Error\" },\n ],\n },\n BuildPsbt: {\n invoke: {\n id: \"buildPsbt\",\n src: \"buildPsbt\",\n input: ({ context }) => ({\n psbt: context.input.psbt,\n wallet: context._internalState.wallet!,\n dataStoreService: context.input.dataStoreService,\n psbtMapper: context.input.psbtMapper,\n }),\n onDone: {\n target: \"BuildPsbtResultCheck\",\n actions: assign({\n _internalState: ({ event, context }) => {\n if (isSuccessCommandResult(event.output)) {\n return {\n ...context._internalState,\n buildPsbtResult: event.output.data,\n };\n }\n return {\n ...context._internalState,\n error: event.output.error,\n };\n },\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n BuildPsbtResultCheck: {\n always: [\n { guard: \"noInternalError\", target: \"SignPsbt\" },\n { target: \"Error\" },\n ],\n },\n SignPsbt: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n },\n }),\n exit: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n }),\n invoke: {\n id: \"signPsbt\",\n src: \"signPsbt\",\n input: ({ context }) => ({\n walletSerializer: context.input.walletSerializer,\n valueParser: context.input.valueParser,\n buildPsbtResult: context._internalState.buildPsbtResult!,\n wallet: context._internalState.wallet!,\n }),\n onDone: {\n target: \"SignPsbtResultCheck\",\n actions: assign({\n _internalState: ({ event, context }) => {\n if (isSuccessCommandResult(event.output)) {\n return {\n ...context._internalState,\n signatures: event.output.data,\n };\n }\n return {\n ...context._internalState,\n error: event.output.error,\n };\n },\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n SignPsbtResultCheck: {\n always: [\n { guard: \"noInternalError\", target: \"Success\" },\n { target: \"Error\" },\n ],\n },\n Success: {\n type: \"final\",\n },\n Error: {\n type: \"final\",\n },\n },\n output: ({\n context: {\n _internalState: { signatures, error },\n },\n }) =>\n signatures\n ? Right(signatures)\n : Left(error || new UnknownDAError(\"No error in final state\")),\n });\n }\n\n extractDependencies(internalApi: InternalApi): MachineDependencies {\n const prepareWalletPolicy = async (arg0: {\n input: { wallet: ApiWallet; walletBuilder: WalletBuilder };\n }): Promise<CommandResult<InternalWallet, BtcErrorCodes>> => {\n const {\n input: { walletBuilder, wallet },\n } = arg0;\n return await new PrepareWalletPolicyTask(\n internalApi,\n { wallet },\n walletBuilder,\n ).run();\n };\n const buildPsbt = async (arg0: {\n input: {\n psbt: ApiPsbt;\n wallet: InternalWallet;\n dataStoreService: DataStoreService;\n psbtMapper: PsbtMapper;\n };\n }): Promise<CommandResult<BuildPsbtTaskResult, BtcErrorCodes>> => {\n const {\n input: { psbt, wallet, dataStoreService, psbtMapper },\n } = arg0;\n return new BuildPsbtTask(\n { psbt, wallet },\n dataStoreService,\n psbtMapper,\n ).run();\n };\n const signPsbt = async (arg0: {\n input: {\n wallet: InternalWallet;\n buildPsbtResult: BuildPsbtTaskResult;\n walletSerializer: WalletSerializer;\n valueParser: ValueParser;\n };\n }): Promise<CommandResult<PsbtSignature[], BtcErrorCodes>> => {\n const {\n input: { wallet, buildPsbtResult, walletSerializer, valueParser },\n } = arg0;\n return await new SignPsbtTask(\n internalApi,\n { wallet, ...buildPsbtResult },\n walletSerializer,\n valueParser,\n ).run();\n };\n\n return {\n prepareWalletPolicy,\n buildPsbt,\n signPsbt,\n };\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["isSuccessCommandResult", "OpenAppDeviceAction", "UnknownDAError", "UserInteractionRequired", "XStateDeviceAction", "Left", "Right", "assign", "fromPromise", "setup", "BuildPsbtTask", "PrepareWalletPolicyTask", "SignPsbtTask", "SignPsbtDeviceAction", "internalApi", "signPsbt", "prepareWalletPolicy", "buildPsbt", "context", "_", "input", "error", "event", "signatures", "arg0", "walletBuilder", "wallet", "psbt", "dataStoreService", "psbtMapper", "buildPsbtResult", "walletSerializer", "valueParser"]
4
+ "sourcesContent": ["import {\n type CommandResult,\n type DeviceActionStateMachine,\n type InternalApi,\n isSuccessCommandResult,\n OpenAppDeviceAction,\n type StateMachineTypes,\n UnknownDAError,\n UserInteractionRequired,\n XStateDeviceAction,\n} from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { assign, fromPromise, setup } from \"xstate\";\n\nimport {\n type SignPsbtDAError,\n type SignPsbtDAInput,\n type SignPsbtDAIntermediateValue,\n type SignPsbtDAInternalState,\n type SignPsbtDAOutput,\n signPsbtDAStateSteps,\n} from \"@api/app-binder/SignPsbtDeviceActionTypes\";\nimport { type Psbt as ApiPsbt } from \"@api/model/Psbt\";\nimport { type PsbtSignature } from \"@api/model/Signature\";\nimport { type Wallet as ApiWallet } from \"@api/model/Wallet\";\nimport { type BtcErrorCodes } from \"@internal/app-binder/command/utils/bitcoinAppErrors\";\nimport { APP_NAME } from \"@internal/app-binder/constants\";\nimport {\n BuildPsbtTask,\n type BuildPsbtTaskResult,\n} from \"@internal/app-binder/task/BuildPsbtTask\";\nimport { PrepareWalletPolicyTask } from \"@internal/app-binder/task/PrepareWalletPolicyTask\";\nimport { SignPsbtTask } from \"@internal/app-binder/task/SignPsbtTask\";\nimport type { DataStoreService } from \"@internal/data-store/service/DataStoreService\";\nimport type { PsbtMapper } from \"@internal/psbt/service/psbt/PsbtMapper\";\nimport type { ValueParser } from \"@internal/psbt/service/value/ValueParser\";\nimport { type Wallet as InternalWallet } from \"@internal/wallet/model/Wallet\";\nimport { type WalletBuilder } from \"@internal/wallet/service/WalletBuilder\";\nimport { type WalletSerializer } from \"@internal/wallet/service/WalletSerializer\";\n\nexport type MachineDependencies = {\n readonly prepareWalletPolicy: (arg0: {\n input: {\n wallet: ApiWallet;\n walletBuilder: WalletBuilder;\n };\n }) => Promise<CommandResult<InternalWallet, BtcErrorCodes>>;\n readonly buildPsbt: (arg0: {\n input: {\n psbt: ApiPsbt;\n wallet: InternalWallet;\n dataStoreService: DataStoreService;\n psbtMapper: PsbtMapper;\n };\n }) => Promise<CommandResult<BuildPsbtTaskResult, BtcErrorCodes>>;\n readonly signPsbt: (arg0: {\n input: {\n wallet: InternalWallet;\n buildPsbtResult: BuildPsbtTaskResult;\n walletSerializer: WalletSerializer;\n valueParser: ValueParser;\n };\n }) => Promise<CommandResult<PsbtSignature[], BtcErrorCodes>>;\n};\n\nexport type ExtractMachineDependencies = (\n internalApi: InternalApi,\n) => MachineDependencies;\n\nexport class SignPsbtDeviceAction extends XStateDeviceAction<\n SignPsbtDAOutput,\n SignPsbtDAInput,\n SignPsbtDAError,\n SignPsbtDAIntermediateValue,\n SignPsbtDAInternalState\n> {\n makeStateMachine(\n internalApi: InternalApi,\n ): DeviceActionStateMachine<\n SignPsbtDAOutput,\n SignPsbtDAInput,\n SignPsbtDAError,\n SignPsbtDAIntermediateValue,\n SignPsbtDAInternalState\n > {\n type types = StateMachineTypes<\n SignPsbtDAOutput,\n SignPsbtDAInput,\n SignPsbtDAError,\n SignPsbtDAIntermediateValue,\n SignPsbtDAInternalState\n >;\n\n const { signPsbt, prepareWalletPolicy, buildPsbt } =\n this.extractDependencies(internalApi);\n\n return setup({\n types: {\n input: {} as types[\"input\"],\n context: {} as types[\"context\"],\n output: {} as types[\"output\"],\n },\n\n actors: {\n openAppStateMachine: new OpenAppDeviceAction({\n input: { appName: APP_NAME },\n }).makeStateMachine(internalApi),\n prepareWalletPolicy: fromPromise(prepareWalletPolicy),\n buildPsbt: fromPromise(buildPsbt),\n signPsbt: fromPromise(signPsbt),\n },\n guards: {\n noInternalError: ({ context }) => context._internalState.error === null,\n skipOpenApp: ({ context }) => context.input.skipOpenApp,\n },\n actions: {\n assignErrorFromEvent: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: _.event[\"error\"], // NOTE: it should never happen, the error is not typed anymore here\n }),\n }),\n },\n }).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QGUCWUB2AFMAnWA9hgIYA2AsnLMTACJgBuqAxmAILMAuqRAdAPIAHMBjaDB9Jqw7ciAYghEwvVBgYEA1soLDR45J2Kcw5YswAWqsAG0ADAF1EoQQVipZGJyAAeiACwAzADsvACcABwAjKGRtuG2AGyRSX4ANCAAnoiRAEwArLy2uX6RQUGRpeHhfgC+NelomDj4RGSUsNR0jCzsXDwYvADC5mDMGkIiYhLd0n1EAEpwAK6knHJ2jkggLm4eXr4IoRG8eTlFOaWhQX45QaHpWQiRN4UBfu8JeaE3obY5OXUGuhsHhCCQKFQaGBJD0ZP0hiMxhM9NMpL0PItYCs1tZIptnK53P19ogjuETmdcpdrrd7pl-M8wnkgvkgvFbH48n4EkFASBGiCWuD2p1oTN0fCBc0wW1ITAFEoVGpNMo3E1Qa0IR0oRsvDsiUQSU88tVeOEktEEuE8m8cjcHqScicgokTXk8rZygFQgD6vzgdLNSKoTDZh5eFKNcK5WA5HhcARcLxBKQjAAzRMAW14asFMq1ot1W31ey2B0iJr8ZotoStNpu9vpCDtoTNHr8PoizyKvL9kaFsu1XTRcL4-fzwZgmOxw1GGnWDj1hNLoAOFwCBWC5u5RySEQdT1sra+OSt1wCAQuzICfPHQZjoYlY4DUcHounq1nY3WeKXu2JZaIOum5sgkO61tE4QHhWBS2HkCT-G8R5wc8N58hgBAQHAXh3tGQ5iiOcyeMWy4AauiAALQJAeVGFLY9EMYxDG9kC6oDgWIbiqOAzIlMj7cX+BrEeRCCNo8sS2CcRz-B6zIsnBaGsXm974fxREInOvHiGpGLLKsgkrj4iBnrwFwVgkCHfEeCQBNB3K8IEpxBO6ySep8in+mxE4Plx6m4W+UIGWRRlPJEVRmncOTmhyLI2QeUS8GFQRvPBXZRLWt4vuxk4EbCflZd5+EfpwX4aEFhqAU84RRYUpyXmBATJBeQTQZEARhKEG5Ne69GUplXkqaKOmSkszCsB05XCSFOSXgUyVshUdoJLYF7QYkvAXkUER3H45q1qE-XKXhQ2+eGACiuAJrgk1GjN+S8PNUTFMtq1Nrckl-O6wTct6KF5HUdRAA */\n id: \"SignPsbtDeviceAction\",\n initial: \"InitialState\",\n context: ({ input }) => ({\n input,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signPsbtDAStateSteps.OPEN_APP,\n },\n _internalState: {\n error: null,\n wallet: null,\n buildPsbtResult: null,\n signatures: null,\n signedPsbt: null,\n },\n }),\n states: {\n InitialState: {\n always: [\n {\n target: \"PrepareWalletPolicy\",\n guard: \"skipOpenApp\",\n },\n \"OpenAppDeviceAction\",\n ],\n },\n OpenAppDeviceAction: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n step: signPsbtDAStateSteps.OPEN_APP,\n }),\n }),\n invoke: {\n id: \"openAppStateMachine\",\n input: { appName: APP_NAME },\n src: \"openAppStateMachine\",\n onSnapshot: {\n actions: assign({\n intermediateValue: ({ event }) => ({\n ...event.snapshot.context.intermediateValue,\n step: signPsbtDAStateSteps.OPEN_APP,\n }),\n }),\n },\n onDone: {\n actions: assign({\n _internalState: (_) => {\n return _.event.output.caseOf<SignPsbtDAInternalState>({\n Right: () => _.context._internalState,\n Left: (error) => ({\n ..._.context._internalState,\n error,\n }),\n });\n },\n }),\n target: \"CheckOpenAppDeviceActionResult\",\n },\n },\n },\n CheckOpenAppDeviceActionResult: {\n always: [\n {\n target: \"PrepareWalletPolicy\",\n guard: \"noInternalError\",\n },\n \"Error\",\n ],\n },\n PrepareWalletPolicy: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n step: signPsbtDAStateSteps.PREPARE_WALLET_POLICY,\n }),\n }),\n invoke: {\n id: \"prepareWalletPolicy\",\n src: \"prepareWalletPolicy\",\n input: ({ context }) => ({\n wallet: context.input.wallet,\n walletBuilder: context.input.walletBuilder,\n }),\n onDone: {\n target: \"PrepareWalletPolicyResultCheck\",\n actions: assign({\n _internalState: ({ event, context }) => {\n if (isSuccessCommandResult(event.output)) {\n return {\n ...context._internalState,\n wallet: event.output.data,\n };\n }\n return {\n ...context._internalState,\n error: event.output.error,\n };\n },\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n PrepareWalletPolicyResultCheck: {\n always: [\n { guard: \"noInternalError\", target: \"BuildPsbt\" },\n { target: \"Error\" },\n ],\n },\n BuildPsbt: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n step: signPsbtDAStateSteps.BUILD_PSBT,\n }),\n }),\n invoke: {\n id: \"buildPsbt\",\n src: \"buildPsbt\",\n input: ({ context }) => ({\n psbt: context.input.psbt,\n wallet: context._internalState.wallet!,\n dataStoreService: context.input.dataStoreService,\n psbtMapper: context.input.psbtMapper,\n }),\n onDone: {\n target: \"BuildPsbtResultCheck\",\n actions: assign({\n _internalState: ({ event, context }) => {\n if (isSuccessCommandResult(event.output)) {\n return {\n ...context._internalState,\n buildPsbtResult: event.output.data,\n };\n }\n return {\n ...context._internalState,\n error: event.output.error,\n };\n },\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n BuildPsbtResultCheck: {\n always: [\n { guard: \"noInternalError\", target: \"SignPsbt\" },\n { target: \"Error\" },\n ],\n },\n SignPsbt: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n step: signPsbtDAStateSteps.SIGN_PSBT,\n },\n }),\n exit: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signPsbtDAStateSteps.SIGN_PSBT,\n },\n }),\n invoke: {\n id: \"signPsbt\",\n src: \"signPsbt\",\n input: ({ context }) => ({\n walletSerializer: context.input.walletSerializer,\n valueParser: context.input.valueParser,\n buildPsbtResult: context._internalState.buildPsbtResult!,\n wallet: context._internalState.wallet!,\n }),\n onDone: {\n target: \"SignPsbtResultCheck\",\n actions: assign({\n _internalState: ({ event, context }) => {\n if (isSuccessCommandResult(event.output)) {\n return {\n ...context._internalState,\n signatures: event.output.data,\n };\n }\n return {\n ...context._internalState,\n error: event.output.error,\n };\n },\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n SignPsbtResultCheck: {\n always: [\n { guard: \"noInternalError\", target: \"Success\" },\n { target: \"Error\" },\n ],\n },\n Success: {\n type: \"final\",\n },\n Error: {\n type: \"final\",\n },\n },\n output: ({\n context: {\n _internalState: { signatures, error },\n },\n }) =>\n signatures\n ? Right(signatures)\n : Left(error || new UnknownDAError(\"No error in final state\")),\n });\n }\n\n extractDependencies(internalApi: InternalApi): MachineDependencies {\n const prepareWalletPolicy = async (arg0: {\n input: { wallet: ApiWallet; walletBuilder: WalletBuilder };\n }): Promise<CommandResult<InternalWallet, BtcErrorCodes>> => {\n const {\n input: { walletBuilder, wallet },\n } = arg0;\n return await new PrepareWalletPolicyTask(\n internalApi,\n { wallet },\n walletBuilder,\n ).run();\n };\n const buildPsbt = async (arg0: {\n input: {\n psbt: ApiPsbt;\n wallet: InternalWallet;\n dataStoreService: DataStoreService;\n psbtMapper: PsbtMapper;\n };\n }): Promise<CommandResult<BuildPsbtTaskResult, BtcErrorCodes>> => {\n const {\n input: { psbt, wallet, dataStoreService, psbtMapper },\n } = arg0;\n return new BuildPsbtTask(\n { psbt, wallet },\n dataStoreService,\n psbtMapper,\n ).run();\n };\n const signPsbt = async (arg0: {\n input: {\n wallet: InternalWallet;\n buildPsbtResult: BuildPsbtTaskResult;\n walletSerializer: WalletSerializer;\n valueParser: ValueParser;\n };\n }): Promise<CommandResult<PsbtSignature[], BtcErrorCodes>> => {\n const {\n input: { wallet, buildPsbtResult, walletSerializer, valueParser },\n } = arg0;\n return await new SignPsbtTask(\n internalApi,\n { wallet, ...buildPsbtResult },\n walletSerializer,\n valueParser,\n ).run();\n };\n\n return {\n prepareWalletPolicy,\n buildPsbt,\n signPsbt,\n };\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["isSuccessCommandResult", "OpenAppDeviceAction", "UnknownDAError", "UserInteractionRequired", "XStateDeviceAction", "Left", "Right", "assign", "fromPromise", "setup", "signPsbtDAStateSteps", "APP_NAME", "BuildPsbtTask", "PrepareWalletPolicyTask", "SignPsbtTask", "SignPsbtDeviceAction", "internalApi", "signPsbt", "prepareWalletPolicy", "buildPsbt", "context", "_", "input", "event", "error", "signatures", "arg0", "walletBuilder", "wallet", "psbt", "dataStoreService", "psbtMapper", "buildPsbtResult", "walletSerializer", "valueParser"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{CommandResultFactory as a,DeviceActionStatus as e,UnknownDeviceExchangeError as d,UserInteractionRequired as t}from"@ledgerhq/device-management-kit";import{UnknownDAError as k}from"@ledgerhq/device-management-kit";import{InvalidStatusWordError as w}from"@ledgerhq/device-management-kit";import{makeDeviceActionInternalApiMock as c}from"../../../app-binder/device-action/__test-utils__/makeInternalApi";import{setupOpenAppDAMock as p}from"../../../app-binder/device-action/__test-utils__/setupOpenAppDAMock";import{testDeviceActionStates as m}from"../../../app-binder/device-action/__test-utils__/testDeviceActionStates";import{SignPsbtDeviceAction as P}from"./SignPsbtDeviceAction";vi.mock("@ledgerhq/device-management-kit",async o=>({...await o(),OpenAppDeviceAction:vi.fn(()=>({makeStateMachine:vi.fn()}))}));describe("SignPsbtDeviceAction",()=>{const o=vi.fn(),l=vi.fn(),u=vi.fn();function S(){return{signPsbt:o,prepareWalletPolicy:l,buildPsbt:u}}describe("Success case",()=>{it("should call external dependencies with the correct parameters",()=>new Promise((n,i)=>{p();const r=new P({input:{wallet:"ApiWallet",psbt:"Hello world",walletBuilder:"WalletBuilder",walletSerializer:"WalletSerializer",dataStoreService:"DataStoreService",psbtMapper:"PsbtMapper",valueParser:"ValueParser",skipOpenApp:!1}});vi.spyOn(r,"extractDependencies").mockReturnValue(S()),l.mockResolvedValueOnce(a({data:"Wallet"})),u.mockResolvedValueOnce(a({data:"BuildPsbtResult"})),o.mockResolvedValueOnce(a({data:[{inputIndex:0,pubkey:Uint8Array.from([4,5,6]),signature:Uint8Array.from([1,2,3])}]}));const s=[{intermediateValue:{requiredUserInteraction:t.None},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.ConfirmOpenApp},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.None},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.None},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.SignTransaction},status:e.Pending},{output:[{inputIndex:0,pubkey:Uint8Array.from([4,5,6]),signature:Uint8Array.from([1,2,3])}],status:e.Completed}];m(r,s,c(),{onDone:()=>{expect(l).toHaveBeenCalledWith(expect.objectContaining({input:{wallet:"ApiWallet",walletBuilder:"WalletBuilder"}})),expect(u).toHaveBeenCalledWith(expect.objectContaining({input:{psbt:"Hello world",wallet:"Wallet",dataStoreService:"DataStoreService",psbtMapper:"PsbtMapper"}})),expect(o).toHaveBeenCalledWith(expect.objectContaining({input:{wallet:"Wallet",buildPsbtResult:"BuildPsbtResult",walletSerializer:"WalletSerializer",valueParser:"ValueParser"}})),n()},onError:i})})),it("should be successful while skipping OpenApp",()=>new Promise((n,i)=>{p();const r=new P({input:{wallet:"ApiWallet",psbt:"Hello world",walletBuilder:"WalletBuilder",walletSerializer:"WalletSerializer",dataStoreService:"DataStoreService",psbtMapper:"PsbtMapper",valueParser:"ValueParser",skipOpenApp:!0}});vi.spyOn(r,"extractDependencies").mockReturnValue(S()),l.mockResolvedValueOnce(a({data:"Wallet"})),u.mockResolvedValueOnce(a({data:"BuildPsbtResult"})),o.mockResolvedValueOnce(a({data:[{inputIndex:0,pubkey:Uint8Array.from([4,5,6]),signature:Uint8Array.from([1,2,3])}]}));const s=[{intermediateValue:{requiredUserInteraction:t.None},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.None},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.SignTransaction},status:e.Pending},{output:[{inputIndex:0,pubkey:Uint8Array.from([4,5,6]),signature:Uint8Array.from([1,2,3])}],status:e.Completed}];m(r,s,c(),{onDone:n,onError:i})}))}),describe("error cases",()=>{beforeEach(()=>{vi.resetAllMocks()}),it("Error if open app fails",()=>new Promise((n,i)=>{p(new d("Mocked error"));const r=[{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.ConfirmOpenApp}},{status:e.Error,error:new d("Mocked error")}],s=new P({input:{wallet:{},psbt:"Hello world",walletBuilder:{},walletSerializer:{},dataStoreService:{},psbtMapper:{},valueParser:{},skipOpenApp:!1}});m(s,r,c(),{onDone:n,onError:i})})),it("Error if prepareWallet fails",()=>new Promise((n,i)=>{p();const r=new P({input:{wallet:{},psbt:"Hello world",walletBuilder:{},walletSerializer:{},dataStoreService:{},psbtMapper:{},valueParser:{},skipOpenApp:!1}});vi.spyOn(r,"extractDependencies").mockReturnValue(S()),l.mockResolvedValueOnce(a({error:new d("Mocked error")}));const s=[{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.ConfirmOpenApp}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Error,error:new d("Mocked error")}];m(r,s,c(),{onDone:n,onError:i})})),it("Error if buildPsbt fails",()=>new Promise((n,i)=>{p();const r=new P({input:{wallet:{},psbt:"Hello world",walletBuilder:{},walletSerializer:{},dataStoreService:{},psbtMapper:{},valueParser:{},skipOpenApp:!1}});vi.spyOn(r,"extractDependencies").mockReturnValue(S()),l.mockResolvedValueOnce(a({data:{}})),u.mockResolvedValueOnce(a({error:new d("Mocked error")}));const s=[{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.ConfirmOpenApp}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Error,error:new d("Mocked error")}];m(r,s,c(),{onDone:n,onError:i})})),it("Error if signPsbt fails",()=>new Promise((n,i)=>{p();const r=new P({input:{wallet:{},psbt:"Hello world",walletBuilder:{},walletSerializer:{},dataStoreService:{},psbtMapper:{},valueParser:{},skipOpenApp:!1}});vi.spyOn(r,"extractDependencies").mockReturnValue(S()),l.mockResolvedValueOnce(a({data:{}})),u.mockResolvedValueOnce(a({data:{}})),o.mockResolvedValueOnce(a({error:new d("Mocked error")}));const s=[{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.ConfirmOpenApp}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.SignTransaction}},{status:e.Error,error:new d("Mocked error")}];m(r,s,c(),{onDone:n,onError:i})})),it("Error if signPsbt throws an exception",()=>new Promise((n,i)=>{p();const r=new P({input:{wallet:{},psbt:"Hello world",walletBuilder:{},walletSerializer:{},dataStoreService:{},psbtMapper:{},valueParser:{},skipOpenApp:!1}});vi.spyOn(r,"extractDependencies").mockReturnValue(S()),l.mockResolvedValueOnce(a({data:{}})),u.mockResolvedValueOnce(a({data:{}})),o.mockRejectedValueOnce(new w("Mocked error"));const s=[{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.ConfirmOpenApp}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.SignTransaction}},{status:e.Error,error:new w("Mocked error")}];m(r,s,c(),{onDone:n,onError:i})})),it("Return a Left if the final state has no signature",()=>new Promise((n,i)=>{p();const r=new P({input:{wallet:{},psbt:"Hello world",walletBuilder:{},walletSerializer:{},dataStoreService:{},psbtMapper:{},valueParser:{},skipOpenApp:!1}});vi.spyOn(r,"extractDependencies").mockReturnValue(S()),l.mockResolvedValueOnce(a({data:{}})),u.mockResolvedValueOnce(a({data:{}})),o.mockResolvedValueOnce(a({data:void 0}));const s=[{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.ConfirmOpenApp}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.SignTransaction}},{status:e.Error,error:new k("No error in final state")}];m(r,s,c(),{onDone:n,onError:i})}))})});
1
+ import{CommandResultFactory as n,DeviceActionStatus as e,UnknownDeviceExchangeError as p,UserInteractionRequired as t}from"@ledgerhq/device-management-kit";import{UnknownDAError as k}from"@ledgerhq/device-management-kit";import{InvalidStatusWordError as A}from"@ledgerhq/device-management-kit";import{signPsbtDAStateSteps as r}from"../../../../api/app-binder/SignPsbtDeviceActionTypes";import{makeDeviceActionInternalApiMock as c}from"../../../app-binder/device-action/__test-utils__/makeInternalApi";import{setupOpenAppDAMock as P}from"../../../app-binder/device-action/__test-utils__/setupOpenAppDAMock";import{testDeviceActionStates as m}from"../../../app-binder/device-action/__test-utils__/testDeviceActionStates";import{SignPsbtDeviceAction as S}from"./SignPsbtDeviceAction";vi.mock("@ledgerhq/device-management-kit",async u=>({...await u(),OpenAppDeviceAction:vi.fn(()=>({makeStateMachine:vi.fn()}))}));describe("SignPsbtDeviceAction",()=>{const u=vi.fn(),o=vi.fn(),d=vi.fn();function w(){return{signPsbt:u,prepareWalletPolicy:o,buildPsbt:d}}describe("Success case",()=>{it("should call external dependencies with the correct parameters",()=>new Promise((i,s)=>{P();const a=new S({input:{wallet:"ApiWallet",psbt:"Hello world",walletBuilder:"WalletBuilder",walletSerializer:"WalletSerializer",dataStoreService:"DataStoreService",psbtMapper:"PsbtMapper",valueParser:"ValueParser",skipOpenApp:!1}});vi.spyOn(a,"extractDependencies").mockReturnValue(w()),o.mockResolvedValueOnce(n({data:"Wallet"})),d.mockResolvedValueOnce(n({data:"BuildPsbtResult"})),u.mockResolvedValueOnce(n({data:[{inputIndex:0,pubkey:Uint8Array.from([4,5,6]),signature:Uint8Array.from([1,2,3])}]}));const l=[{intermediateValue:{requiredUserInteraction:t.None,step:r.OPEN_APP},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.ConfirmOpenApp,step:r.OPEN_APP},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.None,step:r.PREPARE_WALLET_POLICY},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.None,step:r.BUILD_PSBT},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.SignTransaction,step:r.SIGN_PSBT},status:e.Pending},{output:[{inputIndex:0,pubkey:Uint8Array.from([4,5,6]),signature:Uint8Array.from([1,2,3])}],status:e.Completed}];m(a,l,c(),{onDone:()=>{expect(o).toHaveBeenCalledWith(expect.objectContaining({input:{wallet:"ApiWallet",walletBuilder:"WalletBuilder"}})),expect(d).toHaveBeenCalledWith(expect.objectContaining({input:{psbt:"Hello world",wallet:"Wallet",dataStoreService:"DataStoreService",psbtMapper:"PsbtMapper"}})),expect(u).toHaveBeenCalledWith(expect.objectContaining({input:{wallet:"Wallet",buildPsbtResult:"BuildPsbtResult",walletSerializer:"WalletSerializer",valueParser:"ValueParser"}})),i()},onError:s})})),it("should be successful while skipping OpenApp",()=>new Promise((i,s)=>{P();const a=new S({input:{wallet:"ApiWallet",psbt:"Hello world",walletBuilder:"WalletBuilder",walletSerializer:"WalletSerializer",dataStoreService:"DataStoreService",psbtMapper:"PsbtMapper",valueParser:"ValueParser",skipOpenApp:!0}});vi.spyOn(a,"extractDependencies").mockReturnValue(w()),o.mockResolvedValueOnce(n({data:"Wallet"})),d.mockResolvedValueOnce(n({data:"BuildPsbtResult"})),u.mockResolvedValueOnce(n({data:[{inputIndex:0,pubkey:Uint8Array.from([4,5,6]),signature:Uint8Array.from([1,2,3])}]}));const l=[{intermediateValue:{requiredUserInteraction:t.None,step:r.PREPARE_WALLET_POLICY},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.None,step:r.BUILD_PSBT},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.SignTransaction,step:r.SIGN_PSBT},status:e.Pending},{output:[{inputIndex:0,pubkey:Uint8Array.from([4,5,6]),signature:Uint8Array.from([1,2,3])}],status:e.Completed}];m(a,l,c(),{onDone:i,onError:s})}))}),describe("error cases",()=>{beforeEach(()=>{vi.resetAllMocks()}),it("Error if open app fails",()=>new Promise((i,s)=>{P(new p("Mocked error"));const a=[{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None,step:r.OPEN_APP}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.ConfirmOpenApp,step:r.OPEN_APP}},{status:e.Error,error:new p("Mocked error")}],l=new S({input:{wallet:{},psbt:"Hello world",walletBuilder:{},walletSerializer:{},dataStoreService:{},psbtMapper:{},valueParser:{},skipOpenApp:!1}});m(l,a,c(),{onDone:i,onError:s})})),it("Error if prepareWallet fails",()=>new Promise((i,s)=>{P();const a=new S({input:{wallet:{},psbt:"Hello world",walletBuilder:{},walletSerializer:{},dataStoreService:{},psbtMapper:{},valueParser:{},skipOpenApp:!1}});vi.spyOn(a,"extractDependencies").mockReturnValue(w()),o.mockResolvedValueOnce(n({error:new p("Mocked error")}));const l=[{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None,step:r.OPEN_APP}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.ConfirmOpenApp,step:r.OPEN_APP}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None,step:r.PREPARE_WALLET_POLICY}},{status:e.Error,error:new p("Mocked error")}];m(a,l,c(),{onDone:i,onError:s})})),it("Error if buildPsbt fails",()=>new Promise((i,s)=>{P();const a=new S({input:{wallet:{},psbt:"Hello world",walletBuilder:{},walletSerializer:{},dataStoreService:{},psbtMapper:{},valueParser:{},skipOpenApp:!1}});vi.spyOn(a,"extractDependencies").mockReturnValue(w()),o.mockResolvedValueOnce(n({data:{}})),d.mockResolvedValueOnce(n({error:new p("Mocked error")}));const l=[{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None,step:r.OPEN_APP}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.ConfirmOpenApp,step:r.OPEN_APP}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None,step:r.PREPARE_WALLET_POLICY}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None,step:r.BUILD_PSBT}},{status:e.Error,error:new p("Mocked error")}];m(a,l,c(),{onDone:i,onError:s})})),it("Error if signPsbt fails",()=>new Promise((i,s)=>{P();const a=new S({input:{wallet:{},psbt:"Hello world",walletBuilder:{},walletSerializer:{},dataStoreService:{},psbtMapper:{},valueParser:{},skipOpenApp:!1}});vi.spyOn(a,"extractDependencies").mockReturnValue(w()),o.mockResolvedValueOnce(n({data:{}})),d.mockResolvedValueOnce(n({data:{}})),u.mockResolvedValueOnce(n({error:new p("Mocked error")}));const l=[{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None,step:r.OPEN_APP}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.ConfirmOpenApp,step:r.OPEN_APP}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None,step:r.PREPARE_WALLET_POLICY}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None,step:r.BUILD_PSBT}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.SignTransaction,step:r.SIGN_PSBT}},{status:e.Error,error:new p("Mocked error")}];m(a,l,c(),{onDone:i,onError:s})})),it("Error if signPsbt throws an exception",()=>new Promise((i,s)=>{P();const a=new S({input:{wallet:{},psbt:"Hello world",walletBuilder:{},walletSerializer:{},dataStoreService:{},psbtMapper:{},valueParser:{},skipOpenApp:!1}});vi.spyOn(a,"extractDependencies").mockReturnValue(w()),o.mockResolvedValueOnce(n({data:{}})),d.mockResolvedValueOnce(n({data:{}})),u.mockRejectedValueOnce(new A("Mocked error"));const l=[{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None,step:r.OPEN_APP}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.ConfirmOpenApp,step:r.OPEN_APP}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None,step:r.PREPARE_WALLET_POLICY}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None,step:r.BUILD_PSBT}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.SignTransaction,step:r.SIGN_PSBT}},{status:e.Error,error:new A("Mocked error")}];m(a,l,c(),{onDone:i,onError:s})})),it("Return a Left if the final state has no signature",()=>new Promise((i,s)=>{P();const a=new S({input:{wallet:{},psbt:"Hello world",walletBuilder:{},walletSerializer:{},dataStoreService:{},psbtMapper:{},valueParser:{},skipOpenApp:!1}});vi.spyOn(a,"extractDependencies").mockReturnValue(w()),o.mockResolvedValueOnce(n({data:{}})),d.mockResolvedValueOnce(n({data:{}})),u.mockResolvedValueOnce(n({data:void 0}));const l=[{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None,step:r.OPEN_APP}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.ConfirmOpenApp,step:r.OPEN_APP}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None,step:r.PREPARE_WALLET_POLICY}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None,step:r.BUILD_PSBT}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.SignTransaction,step:r.SIGN_PSBT}},{status:e.Error,error:new k("No error in final state")}];m(a,l,c(),{onDone:i,onError:s})}))})});
2
2
  //# sourceMappingURL=SignPsbtDeviceAction.test.js.map