@ledgerhq/device-signer-kit-bitcoin 1.1.0 → 1.2.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.
- package/lib/cjs/internal/DefaultSignerBtc.test.js +1 -1
- package/lib/cjs/internal/DefaultSignerBtc.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/BtcAppBinder.js +1 -1
- package/lib/cjs/internal/app-binder/BtcAppBinder.js.map +3 -3
- package/lib/cjs/internal/app-binder/BtcAppBinder.test.js +1 -1
- package/lib/cjs/internal/app-binder/BtcAppBinder.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/device-action/GetWalletAddress/GetWalletAddressDeviceAction.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/GetWalletAddress/GetWalletAddressDeviceAction.js.map +3 -3
- package/lib/cjs/internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction.js.map +3 -3
- package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js.map +3 -3
- package/lib/cjs/internal/app-binder/device-action/__test-utils__/makeInternalApi.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/__test-utils__/makeInternalApi.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/RegisterWalletTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/RegisterWalletTask.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/RegisterWalletTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/RegisterWalletTask.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/SignMessageTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/SignMessageTask.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/SignMessageTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/SignMessageTask.test.js.map +3 -3
- package/lib/cjs/internal/di.js +1 -1
- package/lib/cjs/internal/di.js.map +3 -3
- package/lib/cjs/internal/externalTypes.js +1 -1
- package/lib/cjs/internal/externalTypes.js.map +2 -2
- package/lib/cjs/package.json +1 -1
- package/lib/esm/internal/DefaultSignerBtc.test.js +1 -1
- package/lib/esm/internal/DefaultSignerBtc.test.js.map +3 -3
- package/lib/esm/internal/app-binder/BtcAppBinder.js +1 -1
- package/lib/esm/internal/app-binder/BtcAppBinder.js.map +3 -3
- package/lib/esm/internal/app-binder/BtcAppBinder.test.js +1 -1
- package/lib/esm/internal/app-binder/BtcAppBinder.test.js.map +3 -3
- package/lib/esm/internal/app-binder/device-action/GetWalletAddress/GetWalletAddressDeviceAction.js +1 -1
- package/lib/esm/internal/app-binder/device-action/GetWalletAddress/GetWalletAddressDeviceAction.js.map +3 -3
- package/lib/esm/internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction.js +1 -1
- package/lib/esm/internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction.js.map +3 -3
- package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js +1 -1
- package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js.map +3 -3
- package/lib/esm/internal/app-binder/device-action/__test-utils__/makeInternalApi.js +1 -1
- package/lib/esm/internal/app-binder/device-action/__test-utils__/makeInternalApi.js.map +3 -3
- package/lib/esm/internal/app-binder/task/RegisterWalletTask.js +1 -1
- package/lib/esm/internal/app-binder/task/RegisterWalletTask.js.map +3 -3
- package/lib/esm/internal/app-binder/task/RegisterWalletTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/RegisterWalletTask.test.js.map +3 -3
- package/lib/esm/internal/app-binder/task/SignMessageTask.js +1 -1
- package/lib/esm/internal/app-binder/task/SignMessageTask.js.map +3 -3
- package/lib/esm/internal/app-binder/task/SignMessageTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/SignMessageTask.test.js.map +3 -3
- package/lib/esm/internal/di.js +1 -1
- package/lib/esm/internal/di.js.map +3 -3
- package/lib/esm/internal/externalTypes.js +1 -1
- package/lib/esm/internal/externalTypes.js.map +2 -2
- package/lib/esm/package.json +1 -1
- package/lib/types/internal/app-binder/BtcAppBinder.d.ts +3 -2
- package/lib/types/internal/app-binder/BtcAppBinder.d.ts.map +1 -1
- package/lib/types/internal/app-binder/device-action/GetWalletAddress/GetWalletAddressDeviceAction.d.ts +0 -4
- package/lib/types/internal/app-binder/device-action/GetWalletAddress/GetWalletAddressDeviceAction.d.ts.map +1 -1
- package/lib/types/internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction.d.ts +0 -4
- package/lib/types/internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction.d.ts.map +1 -1
- package/lib/types/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.d.ts +0 -4
- package/lib/types/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.d.ts.map +1 -1
- package/lib/types/internal/app-binder/device-action/__test-utils__/makeInternalApi.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/RegisterWalletTask.d.ts +3 -1
- package/lib/types/internal/app-binder/task/RegisterWalletTask.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/SignMessageTask.d.ts +3 -1
- package/lib/types/internal/app-binder/task/SignMessageTask.d.ts.map +1 -1
- package/lib/types/internal/di.d.ts.map +1 -1
- package/lib/types/internal/externalTypes.d.ts +1 -0
- package/lib/types/internal/externalTypes.d.ts.map +1 -1
- package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
- package/package.json +5 -5
package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var c=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var
|
|
1
|
+
"use strict";var c=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var b=Object.prototype.hasOwnProperty;var D=(i,e)=>{for(var o in e)c(i,o,{get:e[o],enumerable:!0})},E=(i,e,o,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of d(e))!b.call(i,t)&&t!==o&&c(i,t,{get:()=>e[t],enumerable:!(s=m(e,t))||s.enumerable});return i};var T=i=>E(c({},"__esModule",{value:!0}),i);var A={};D(A,{SignTransactionDeviceAction:()=>y});module.exports=T(A);var a=require("@ledgerhq/device-management-kit"),u=require("purify-ts"),n=require("xstate"),l=require("../../../app-binder/device-action/SignPsbt/SignPsbtDeviceAction"),g=require("../../../app-binder/task/ExtractTransactionTask"),S=require("../../../app-binder/task/UpdatePsbtTask");class y extends a.XStateDeviceAction{makeStateMachine(e){const{updatePsbt:o,extractTransaction:s}=this.extractDependencies();return(0,n.setup)({types:{input:{},context:{},output:{}},actors:{signPsbtStateMachine:new l.SignPsbtDeviceAction({input:this.input,loggerFactory:this.getLoggerFactory(e)}).makeStateMachine(e),updatePsbt:(0,n.fromPromise)(o),extractTransaction:(0,n.fromPromise)(s)},guards:{noInternalError:({context:t})=>t._internalState.error===null},actions:{assignErrorFromEvent:(0,n.assign)({_internalState:t=>({...t.context._internalState,error:t.event.error})})}}).createMachine({id:"SignPsbtDeviceAction",initial:"SignPsbtDeviceAction",context:({input:t})=>({input:t,intermediateValue:{requiredUserInteraction:a.UserInteractionRequired.None},_internalState:{error:null,signatures:null,signedPsbt:null,transaction:null}}),states:{SignPsbtDeviceAction:{exit:(0,n.assign)({intermediateValue:{requiredUserInteraction:a.UserInteractionRequired.None}}),invoke:{id:"signPsbtStateMachine",src:"signPsbtStateMachine",input:({context:t})=>t.input,onSnapshot:{actions:(0,n.assign)({intermediateValue:t=>t.event.snapshot.context.intermediateValue})},onDone:{target:"SignPsbtResultCheck",actions:(0,n.assign)({_internalState:({event:t,context:r})=>t.output.caseOf({Right:p=>({...r._internalState,signatures:p}),Left:p=>({...r._internalState,error:p})})})},onError:{target:"Error",actions:"assignErrorFromEvent"}}},SignPsbtResultCheck:{always:[{guard:"noInternalError",target:"UpdatePsbt"},{target:"Error"}]},UpdatePsbt:{invoke:{id:"updatePsbt",src:"updatePsbt",input:({context:t})=>({psbt:t.input.psbt,valueParser:t.input.valueParser,psbtMapper:t.input.psbtMapper,signatures:t._internalState.signatures}),onDone:{target:"UpdatePsbtResultCheck",actions:(0,n.assign)({_internalState:({event:t,context:r})=>(0,a.isSuccessCommandResult)(t.output)?{...r._internalState,signedPsbt:t.output.data}:{...r._internalState,error:t.output.error}})},onError:{target:"Error",actions:"assignErrorFromEvent"}}},UpdatePsbtResultCheck:{always:[{guard:"noInternalError",target:"ExtractTransaction"},{target:"Error"}]},ExtractTransaction:{invoke:{id:"extractTransaction",src:"extractTransaction",input:({context:t})=>({valueParser:t.input.valueParser,psbt:t._internalState.signedPsbt}),onDone:{target:"ExtractTransactionResultCheck",actions:(0,n.assign)({_internalState:({event:t,context:r})=>(0,a.isSuccessCommandResult)(t.output)?{...r._internalState,transaction:t.output.data}:{...r._internalState,error:t.output.error}})},onError:{target:"Error",actions:"assignErrorFromEvent"}}},ExtractTransactionResultCheck:{always:[{guard:"noInternalError",target:"Success"},{target:"Error"}]},Success:{type:"final"},Error:{type:"final"}},output:({context:t})=>t._internalState.transaction?(0,u.Right)(t._internalState.transaction):(0,u.Left)(t._internalState.error||new a.UnknownDAError("No error in final state"))})}extractDependencies(){return{updatePsbt:async s=>{const{input:{psbt:t,signatures:r,valueParser:p,psbtMapper:P}}=s;return await new S.UpdatePsbtTask({psbt:t,signatures:r},p,P).run()},extractTransaction:async s=>{const{input:{psbt:t,valueParser:r}}=s;return new g.ExtractTransactionTask({psbt:t},r).run()}}}}0&&(module.exports={SignTransactionDeviceAction});
|
|
2
2
|
//# sourceMappingURL=SignTransactionDeviceAction.js.map
|
package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type CommandResult,\n type DeviceActionStateMachine,\n type HexaString,\n type InternalApi,\n isSuccessCommandResult,\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 SignTransactionDAError,\n type SignTransactionDAInput,\n type SignTransactionDAIntermediateValue,\n type SignTransactionDAInternalState,\n type SignTransactionDAOutput,\n} from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { type Psbt as ApiPsbt } from \"@api/model/Psbt\";\nimport { type PsbtSignature } from \"@api/model/Signature\";\nimport { type BtcErrorCodes } from \"@internal/app-binder/command/utils/bitcoinAppErrors\";\nimport { SignPsbtDeviceAction } from \"@internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction\";\nimport { ExtractTransactionTask } from \"@internal/app-binder/task/ExtractTransactionTask\";\nimport { UpdatePsbtTask } from \"@internal/app-binder/task/UpdatePsbtTask\";\nimport { type Psbt as InternalPsbt } from \"@internal/psbt/model/Psbt\";\nimport { type PsbtMapper } from \"@internal/psbt/service/psbt/PsbtMapper\";\nimport type { ValueParser } from \"@internal/psbt/service/value/ValueParser\";\n\nexport type MachineDependencies = {\n readonly updatePsbt: (arg0: {\n input: {\n psbt: ApiPsbt;\n signatures: PsbtSignature[];\n psbtMapper: PsbtMapper;\n valueParser: ValueParser;\n };\n }) => Promise<CommandResult<InternalPsbt, BtcErrorCodes>>;\n readonly extractTransaction: (arg0: {\n input: { psbt: InternalPsbt; valueParser: ValueParser };\n }) => Promise<CommandResult<HexaString, BtcErrorCodes>>;\n};\n\nexport type ExtractMachineDependencies = (\n internalApi: InternalApi,\n) => MachineDependencies;\n\nexport class SignTransactionDeviceAction extends XStateDeviceAction<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n> {\n constructor(args: { input: SignTransactionDAInput; inspect?: boolean }) {\n super(args);\n }\n makeStateMachine(\n internalApi: InternalApi,\n ): DeviceActionStateMachine<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n > {\n type types = StateMachineTypes<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n >;\n\n const { updatePsbt, extractTransaction } = this.extractDependencies();\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 signPsbtStateMachine: new SignPsbtDeviceAction({\n input: this.input,\n }).makeStateMachine(internalApi),\n updatePsbt: fromPromise(updatePsbt),\n extractTransaction: fromPromise(extractTransaction),\n },\n guards: {\n noInternalError: ({ context }) => context._internalState.error === null,\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: \"SignPsbtDeviceAction\",\n context: ({ input }) => {\n return {\n input,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n _internalState: {\n error: null,\n signatures: null,\n signedPsbt: null,\n transaction: null,\n },\n };\n },\n states: {\n SignPsbtDeviceAction: {\n exit: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n }),\n invoke: {\n id: \"signPsbtStateMachine\",\n src: \"signPsbtStateMachine\",\n input: ({ context }) => context.input,\n onSnapshot: {\n actions: assign({\n intermediateValue: (_) =>\n _.event.snapshot.context.intermediateValue,\n }),\n },\n onDone: {\n target: \"SignPsbtResultCheck\",\n actions: [\n assign({\n _internalState: ({ event, context }) => {\n return event.output.caseOf<SignTransactionDAInternalState>({\n Right: (data) => ({\n ...context._internalState,\n signatures: data,\n }),\n Left: (error) => ({\n ...context._internalState,\n error,\n }),\n });\n },\n }),\n ],\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n SignPsbtResultCheck: {\n always: [\n { guard: \"noInternalError\", target: \"UpdatePsbt\" },\n { target: \"Error\" },\n ],\n },\n UpdatePsbt: {\n invoke: {\n id: \"updatePsbt\",\n src: \"updatePsbt\",\n input: ({ context }) => ({\n psbt: context.input.psbt,\n valueParser: context.input.valueParser,\n psbtMapper: context.input.psbtMapper,\n signatures: context._internalState.signatures!,\n }),\n onDone: {\n target: \"UpdatePsbtResultCheck\",\n actions: [\n assign({\n _internalState: ({ event, context }) => {\n if (isSuccessCommandResult(event.output)) {\n return {\n ...context._internalState,\n signedPsbt: event.output.data,\n };\n } else {\n return {\n ...context._internalState,\n error: event.output.error,\n };\n }\n },\n }),\n ],\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n UpdatePsbtResultCheck: {\n always: [\n { guard: \"noInternalError\", target: \"ExtractTransaction\" },\n { target: \"Error\" },\n ],\n },\n ExtractTransaction: {\n invoke: {\n id: \"extractTransaction\",\n src: \"extractTransaction\",\n input: ({ context }) => ({\n valueParser: context.input.valueParser,\n psbt: context._internalState.signedPsbt!,\n }),\n onDone: {\n target: \"ExtractTransactionResultCheck\",\n actions: [\n assign({\n _internalState: ({ event, context }) => {\n if (isSuccessCommandResult(event.output)) {\n return {\n ...context._internalState,\n transaction: event.output.data,\n };\n } else {\n return {\n ...context._internalState,\n error: event.output.error,\n };\n }\n },\n }),\n ],\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n ExtractTransactionResultCheck: {\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.transaction\n ? Right(context._internalState.transaction)\n : Left(\n context._internalState.error ||\n new UnknownDAError(\"No error in final state\"),\n ),\n });\n }\n\n extractDependencies(): MachineDependencies {\n const updatePsbt = async (arg0: {\n input: {\n psbt: ApiPsbt;\n signatures: PsbtSignature[];\n psbtMapper: PsbtMapper;\n valueParser: ValueParser;\n };\n }): Promise<CommandResult<InternalPsbt, BtcErrorCodes>> => {\n const {\n input: { psbt, signatures, valueParser, psbtMapper },\n } = arg0;\n return await new UpdatePsbtTask(\n { psbt, signatures },\n valueParser,\n psbtMapper,\n ).run();\n };\n\n const extractTransaction = async (arg0: {\n input: { psbt: InternalPsbt; valueParser: ValueParser };\n }): Promise<CommandResult<HexaString, BtcErrorCodes>> => {\n const {\n input: { psbt, valueParser },\n } = arg0;\n return new ExtractTransactionTask({ psbt }, valueParser).run();\n };\n\n return {\n updatePsbt,\n extractTransaction,\n };\n }\n}\n"],
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,iCAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAUO,2CACPC,EAA4B,qBAC5BC,EAA2C,kBAY3CC,EAAqC,4EACrCC,EAAuC,4DACvCC,EAA+B,oDAuBxB,MAAMP,UAAoC,oBAM/C,CACA,
|
|
6
|
-
"names": ["SignTransactionDeviceAction_exports", "__export", "SignTransactionDeviceAction", "__toCommonJS", "import_device_management_kit", "import_purify_ts", "import_xstate", "import_SignPsbtDeviceAction", "import_ExtractTransactionTask", "import_UpdatePsbtTask", "
|
|
4
|
+
"sourcesContent": ["import {\n type CommandResult,\n type DeviceActionStateMachine,\n type HexaString,\n type InternalApi,\n isSuccessCommandResult,\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 SignTransactionDAError,\n type SignTransactionDAInput,\n type SignTransactionDAIntermediateValue,\n type SignTransactionDAInternalState,\n type SignTransactionDAOutput,\n} from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { type Psbt as ApiPsbt } from \"@api/model/Psbt\";\nimport { type PsbtSignature } from \"@api/model/Signature\";\nimport { type BtcErrorCodes } from \"@internal/app-binder/command/utils/bitcoinAppErrors\";\nimport { SignPsbtDeviceAction } from \"@internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction\";\nimport { ExtractTransactionTask } from \"@internal/app-binder/task/ExtractTransactionTask\";\nimport { UpdatePsbtTask } from \"@internal/app-binder/task/UpdatePsbtTask\";\nimport { type Psbt as InternalPsbt } from \"@internal/psbt/model/Psbt\";\nimport { type PsbtMapper } from \"@internal/psbt/service/psbt/PsbtMapper\";\nimport type { ValueParser } from \"@internal/psbt/service/value/ValueParser\";\n\nexport type MachineDependencies = {\n readonly updatePsbt: (arg0: {\n input: {\n psbt: ApiPsbt;\n signatures: PsbtSignature[];\n psbtMapper: PsbtMapper;\n valueParser: ValueParser;\n };\n }) => Promise<CommandResult<InternalPsbt, BtcErrorCodes>>;\n readonly extractTransaction: (arg0: {\n input: { psbt: InternalPsbt; valueParser: ValueParser };\n }) => Promise<CommandResult<HexaString, BtcErrorCodes>>;\n};\n\nexport type ExtractMachineDependencies = (\n internalApi: InternalApi,\n) => MachineDependencies;\n\nexport class SignTransactionDeviceAction extends XStateDeviceAction<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n> {\n makeStateMachine(\n internalApi: InternalApi,\n ): DeviceActionStateMachine<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n > {\n type types = StateMachineTypes<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n >;\n\n const { updatePsbt, extractTransaction } = this.extractDependencies();\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 signPsbtStateMachine: new SignPsbtDeviceAction({\n input: this.input,\n loggerFactory: this.getLoggerFactory(internalApi),\n }).makeStateMachine(internalApi),\n updatePsbt: fromPromise(updatePsbt),\n extractTransaction: fromPromise(extractTransaction),\n },\n guards: {\n noInternalError: ({ context }) => context._internalState.error === null,\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: \"SignPsbtDeviceAction\",\n context: ({ input }) => {\n return {\n input,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n _internalState: {\n error: null,\n signatures: null,\n signedPsbt: null,\n transaction: null,\n },\n };\n },\n states: {\n SignPsbtDeviceAction: {\n exit: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n }),\n invoke: {\n id: \"signPsbtStateMachine\",\n src: \"signPsbtStateMachine\",\n input: ({ context }) => context.input,\n onSnapshot: {\n actions: assign({\n intermediateValue: (_) =>\n _.event.snapshot.context.intermediateValue,\n }),\n },\n onDone: {\n target: \"SignPsbtResultCheck\",\n actions: assign({\n _internalState: ({ event, context }) => {\n return event.output.caseOf<SignTransactionDAInternalState>({\n Right: (data) => ({\n ...context._internalState,\n signatures: data,\n }),\n Left: (error) => ({\n ...context._internalState,\n error,\n }),\n });\n },\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n SignPsbtResultCheck: {\n always: [\n { guard: \"noInternalError\", target: \"UpdatePsbt\" },\n { target: \"Error\" },\n ],\n },\n UpdatePsbt: {\n invoke: {\n id: \"updatePsbt\",\n src: \"updatePsbt\",\n input: ({ context }) => ({\n psbt: context.input.psbt,\n valueParser: context.input.valueParser,\n psbtMapper: context.input.psbtMapper,\n signatures: context._internalState.signatures!,\n }),\n onDone: {\n target: \"UpdatePsbtResultCheck\",\n actions: assign({\n _internalState: ({ event, context }) => {\n if (isSuccessCommandResult(event.output)) {\n return {\n ...context._internalState,\n signedPsbt: event.output.data,\n };\n } else {\n return {\n ...context._internalState,\n error: event.output.error,\n };\n }\n },\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n UpdatePsbtResultCheck: {\n always: [\n { guard: \"noInternalError\", target: \"ExtractTransaction\" },\n { target: \"Error\" },\n ],\n },\n ExtractTransaction: {\n invoke: {\n id: \"extractTransaction\",\n src: \"extractTransaction\",\n input: ({ context }) => ({\n valueParser: context.input.valueParser,\n psbt: context._internalState.signedPsbt!,\n }),\n onDone: {\n target: \"ExtractTransactionResultCheck\",\n actions: assign({\n _internalState: ({ event, context }) => {\n if (isSuccessCommandResult(event.output)) {\n return {\n ...context._internalState,\n transaction: event.output.data,\n };\n } else {\n return {\n ...context._internalState,\n error: event.output.error,\n };\n }\n },\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n ExtractTransactionResultCheck: {\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.transaction\n ? Right(context._internalState.transaction)\n : Left(\n context._internalState.error ||\n new UnknownDAError(\"No error in final state\"),\n ),\n });\n }\n\n extractDependencies(): MachineDependencies {\n const updatePsbt = async (arg0: {\n input: {\n psbt: ApiPsbt;\n signatures: PsbtSignature[];\n psbtMapper: PsbtMapper;\n valueParser: ValueParser;\n };\n }): Promise<CommandResult<InternalPsbt, BtcErrorCodes>> => {\n const {\n input: { psbt, signatures, valueParser, psbtMapper },\n } = arg0;\n return await new UpdatePsbtTask(\n { psbt, signatures },\n valueParser,\n psbtMapper,\n ).run();\n };\n\n const extractTransaction = async (arg0: {\n input: { psbt: InternalPsbt; valueParser: ValueParser };\n }): Promise<CommandResult<HexaString, BtcErrorCodes>> => {\n const {\n input: { psbt, valueParser },\n } = arg0;\n return new ExtractTransactionTask({ psbt }, valueParser).run();\n };\n\n return {\n updatePsbt,\n extractTransaction,\n };\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["SignTransactionDeviceAction_exports", "__export", "SignTransactionDeviceAction", "__toCommonJS", "import_device_management_kit", "import_purify_ts", "import_xstate", "import_SignPsbtDeviceAction", "import_ExtractTransactionTask", "import_UpdatePsbtTask", "internalApi", "updatePsbt", "extractTransaction", "context", "_", "input", "event", "data", "error", "arg0", "psbt", "signatures", "valueParser", "psbtMapper"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var o=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var r=Object.getOwnPropertyNames;var v=Object.prototype.hasOwnProperty;var a=(n,e)=>{for(var i in e)o(n,i,{get:e[i],enumerable:!0})},S=(n,e,i,c)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of r(e))!v.call(n,t)&&t!==i&&o(n,t,{get:()=>e[t],enumerable:!(c=s(e,t))||c.enumerable});return n};var f=n=>S(o({},"__esModule",{value:!0}),n);var b={};a(b,{makeDeviceActionInternalApiMock:()=>A});module.exports=f(b);const g=vi.fn(),M=vi.fn(),p=vi.fn(),d=vi.fn(),k=vi.fn(),l=vi.fn(),m=vi.fn(),D=vi.fn(),u=vi.fn(n=>({debug:vi.fn(),info:vi.fn(),warn:vi.fn(),error:vi.fn(),subscribers:[]}));function A(){return{sendApdu:g,sendCommand:M,getDeviceModel:p,getDeviceSessionState:d,getDeviceSessionStateObservable:k,setDeviceSessionState:l,getManagerApiService:m,getSecureChannelService:D,loggerFactory:u}}0&&(module.exports={makeDeviceActionInternalApiMock});
|
|
2
2
|
//# sourceMappingURL=makeInternalApi.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/internal/app-binder/device-action/__test-utils__/makeInternalApi.ts"],
|
|
4
|
-
"sourcesContent": ["import { type InternalApi } from \"@ledgerhq/device-management-kit\";\nimport { type Mocked } from \"vitest\";\n\nconst sendApduMock = vi.fn();\nconst sendCommandMock = vi.fn();\nconst apiGetDeviceModelMock = vi.fn();\nconst apiGetDeviceSessionStateMock = vi.fn();\nconst apiGetDeviceSessionStateObservableMock = vi.fn();\nconst setDeviceSessionStateMock = vi.fn();\nconst getManagerApiServiceMock = vi.fn();\nconst getSecureChannelServiceMock = vi.fn();\nconst
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,qCAAAE,IAAA,eAAAC,EAAAH,GAGA,MAAMI,EAAe,GAAG,GAAG,EACrBC,EAAkB,GAAG,GAAG,EACxBC,EAAwB,GAAG,GAAG,EAC9BC,EAA+B,GAAG,GAAG,EACrCC,EAAyC,GAAG,GAAG,EAC/CC,EAA4B,GAAG,GAAG,EAClCC,EAA2B,GAAG,GAAG,EACjCC,EAA8B,GAAG,GAAG,EACpCC,
|
|
6
|
-
"names": ["makeInternalApi_exports", "__export", "makeDeviceActionInternalApiMock", "__toCommonJS", "sendApduMock", "sendCommandMock", "apiGetDeviceModelMock", "apiGetDeviceSessionStateMock", "apiGetDeviceSessionStateObservableMock", "setDeviceSessionStateMock", "getManagerApiServiceMock", "getSecureChannelServiceMock", "
|
|
4
|
+
"sourcesContent": ["import { type InternalApi } from \"@ledgerhq/device-management-kit\";\nimport { type Mocked } from \"vitest\";\n\nconst sendApduMock = vi.fn();\nconst sendCommandMock = vi.fn();\nconst apiGetDeviceModelMock = vi.fn();\nconst apiGetDeviceSessionStateMock = vi.fn();\nconst apiGetDeviceSessionStateObservableMock = vi.fn();\nconst setDeviceSessionStateMock = vi.fn();\nconst getManagerApiServiceMock = vi.fn();\nconst getSecureChannelServiceMock = vi.fn();\nconst loggerFactoryMock = vi.fn((_tag: string) => ({\n debug: vi.fn(),\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n subscribers: [],\n}));\n\nexport function makeDeviceActionInternalApiMock(): Mocked<InternalApi> {\n return {\n sendApdu: sendApduMock,\n sendCommand: sendCommandMock,\n getDeviceModel: apiGetDeviceModelMock,\n getDeviceSessionState: apiGetDeviceSessionStateMock,\n getDeviceSessionStateObservable: apiGetDeviceSessionStateObservableMock,\n setDeviceSessionState: setDeviceSessionStateMock,\n getManagerApiService: getManagerApiServiceMock,\n getSecureChannelService: getSecureChannelServiceMock,\n loggerFactory: loggerFactoryMock,\n };\n}\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,qCAAAE,IAAA,eAAAC,EAAAH,GAGA,MAAMI,EAAe,GAAG,GAAG,EACrBC,EAAkB,GAAG,GAAG,EACxBC,EAAwB,GAAG,GAAG,EAC9BC,EAA+B,GAAG,GAAG,EACrCC,EAAyC,GAAG,GAAG,EAC/CC,EAA4B,GAAG,GAAG,EAClCC,EAA2B,GAAG,GAAG,EACjCC,EAA8B,GAAG,GAAG,EACpCC,EAAoB,GAAG,GAAIC,IAAkB,CACjD,MAAO,GAAG,GAAG,EACb,KAAM,GAAG,GAAG,EACZ,KAAM,GAAG,GAAG,EACZ,MAAO,GAAG,GAAG,EACb,YAAa,CAAC,CAChB,EAAE,EAEK,SAASX,GAAuD,CACrE,MAAO,CACL,SAAUE,EACV,YAAaC,EACb,eAAgBC,EAChB,sBAAuBC,EACvB,gCAAiCC,EACjC,sBAAuBC,EACvB,qBAAsBC,EACtB,wBAAyBC,EACzB,cAAeC,CACjB,CACF",
|
|
6
|
+
"names": ["makeInternalApi_exports", "__export", "makeDeviceActionInternalApiMock", "__toCommonJS", "sendApduMock", "sendCommandMock", "apiGetDeviceModelMock", "apiGetDeviceSessionStateMock", "apiGetDeviceSessionStateObservableMock", "setDeviceSessionStateMock", "getManagerApiServiceMock", "getSecureChannelServiceMock", "loggerFactoryMock", "_tag"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var n=Object.defineProperty;var
|
|
1
|
+
"use strict";var n=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var _=Object.prototype.hasOwnProperty;var h=(r,e)=>{for(var a in e)n(r,a,{get:e[a],enumerable:!0})},f=(r,e,a,l)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of w(e))!_.call(r,t)&&t!==a&&n(r,t,{get:()=>e[t],enumerable:!(l=R(e,t))||l.enumerable});return r};var k=r=>f(n({},"__esModule",{value:!0}),r);var T={};h(T,{RegisterWalletTask:()=>v});module.exports=k(T);var s=require("@ledgerhq/device-management-kit"),d=require("../../../api/model/Wallet"),c=require("../../app-binder/command/RegisterWalletAddressCommand"),p=require("../../app-binder/task/ContinueTask"),u=require("../../data-store/model/DataStore"),y=require("../../utils/BtcCommandUtils");class v{constructor(e,a,l,t,g,W=(i,o)=>new p.ContinueTask(i,o)){this._api=e;this._args=a;this._walletBuilder=l;this._walletSerializer=t;this._dataStoreService=g;this._continueTaskFactory=W;this._logger=this._args.loggerFactory("RegisterWalletTask")}_logger;async run(){const{walletPolicy:e}=this._args;this._logger.debug("[run] Starting RegisterWalletTask",{data:{walletName:e.name,descriptorTemplate:e.descriptorTemplate,keysCount:e.keys?.length??0}});const a=this._walletBuilder.fromWalletPolicy(e),l=new u.DataStore;this._dataStoreService.merklizeWallet(l,a);const t=this._walletSerializer.serialize(a);this._logger.debug("[run] Sending RegisterWalletAddressCommand",{data:{walletName:e.name,serializedWalletLength:t?.length??0}});const g=await this._api.sendCommand(new c.RegisterWalletAddressCommand({walletPolicy:t})),i=await this._continueTaskFactory(this._api,l).run(g);if((0,s.isSuccessCommandResult)(i)){const o=y.BtcCommandUtils.getWalletRegistration(i);if(!(0,s.isSuccessCommandResult)(o))return this._logger.error("[run] Wallet registration parsing failed",{data:{error:o.error}}),(0,s.CommandResultFactory)({error:o.error});const{walletHmac:m}=o.data;return this._logger.debug("[run] RegisterWalletTask completed successfully",{data:{walletName:e.name,walletHmac:Array.from(m).map(S=>S.toString(16).padStart(2,"0")).join("")}}),(0,s.CommandResultFactory)({data:new d.RegisteredWallet(e.name,e.descriptorTemplate,e.keys,m)})}return this._logger.error("[run] RegisterWalletTask failed",{data:{error:i.error}}),i}}0&&(module.exports={RegisterWalletTask});
|
|
2
2
|
//# sourceMappingURL=RegisterWalletTask.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/task/RegisterWalletTask.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type CommandResult,\n CommandResultFactory,\n type InternalApi,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { RegisteredWallet, type WalletPolicy } from \"@api/model/Wallet\";\nimport { RegisterWalletAddressCommand } from \"@internal/app-binder/command/RegisterWalletAddressCommand\";\nimport { type BtcErrorCodes } from \"@internal/app-binder/command/utils/bitcoinAppErrors\";\nimport { ContinueTask } from \"@internal/app-binder/task/ContinueTask\";\nimport { DataStore } from \"@internal/data-store/model/DataStore\";\nimport type { DataStoreService } from \"@internal/data-store/service/DataStoreService\";\nimport { BtcCommandUtils } from \"@internal/utils/BtcCommandUtils\";\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 RegisterWalletTaskArgs = {\n walletPolicy: WalletPolicy;\n};\n\nexport type RegisterWalletTaskResult = CommandResult<\n RegisteredWallet,\n BtcErrorCodes\n>;\n\nexport class RegisterWalletTask {\n constructor(\n private readonly _api: InternalApi,\n private readonly _args: RegisterWalletTaskArgs,\n private readonly _walletBuilder: WalletBuilder,\n private readonly _walletSerializer: WalletSerializer,\n private readonly _dataStoreService: DataStoreService,\n private readonly _continueTaskFactory = (\n api: InternalApi,\n dataStore: DataStore,\n ) => new ContinueTask(api, dataStore),\n ) {}\n\n async run(): Promise<RegisterWalletTaskResult> {\n const { walletPolicy } = this._args;\n\n const wallet: InternalWallet =\n this._walletBuilder.fromWalletPolicy(walletPolicy);\n\n const dataStore = new DataStore();\n this._dataStoreService.merklizeWallet(dataStore, wallet);\n\n const serializedWallet = this._walletSerializer.serialize(wallet);\n\n const registerCommandResult = await this._api.sendCommand(\n new RegisterWalletAddressCommand({\n walletPolicy: serializedWallet,\n }),\n );\n\n const continueTask = this._continueTaskFactory(this._api, dataStore);\n const result = await continueTask.run(registerCommandResult);\n\n if (isSuccessCommandResult(result)) {\n const registrationResult = BtcCommandUtils.getWalletRegistration(result);\n\n if (!isSuccessCommandResult(registrationResult)) {\n return CommandResultFactory({\n error: registrationResult.error,\n });\n }\n\n const { walletHmac } = registrationResult.data;\n\n return CommandResultFactory({\n data: new RegisteredWallet(\n walletPolicy.name,\n walletPolicy.descriptorTemplate,\n walletPolicy.keys,\n walletHmac,\n ),\n });\n }\n\n return result;\n }\n}\n"],
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,wBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,
|
|
6
|
-
"names": ["RegisterWalletTask_exports", "__export", "RegisterWalletTask", "__toCommonJS", "import_device_management_kit", "import_Wallet", "import_RegisterWalletAddressCommand", "import_ContinueTask", "import_DataStore", "import_BtcCommandUtils", "_api", "_args", "_walletBuilder", "_walletSerializer", "_dataStoreService", "_continueTaskFactory", "api", "dataStore", "walletPolicy", "wallet", "serializedWallet", "registerCommandResult", "result", "registrationResult", "walletHmac"]
|
|
4
|
+
"sourcesContent": ["import {\n type CommandResult,\n CommandResultFactory,\n type InternalApi,\n isSuccessCommandResult,\n type LoggerPublisherService,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { RegisteredWallet, type WalletPolicy } from \"@api/model/Wallet\";\nimport { RegisterWalletAddressCommand } from \"@internal/app-binder/command/RegisterWalletAddressCommand\";\nimport { type BtcErrorCodes } from \"@internal/app-binder/command/utils/bitcoinAppErrors\";\nimport { ContinueTask } from \"@internal/app-binder/task/ContinueTask\";\nimport { DataStore } from \"@internal/data-store/model/DataStore\";\nimport type { DataStoreService } from \"@internal/data-store/service/DataStoreService\";\nimport { BtcCommandUtils } from \"@internal/utils/BtcCommandUtils\";\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 RegisterWalletTaskArgs = {\n walletPolicy: WalletPolicy;\n loggerFactory: (tag: string) => LoggerPublisherService;\n};\n\nexport type RegisterWalletTaskResult = CommandResult<\n RegisteredWallet,\n BtcErrorCodes\n>;\n\nexport class RegisterWalletTask {\n private readonly _logger: LoggerPublisherService;\n\n constructor(\n private readonly _api: InternalApi,\n private readonly _args: RegisterWalletTaskArgs,\n private readonly _walletBuilder: WalletBuilder,\n private readonly _walletSerializer: WalletSerializer,\n private readonly _dataStoreService: DataStoreService,\n private readonly _continueTaskFactory = (\n api: InternalApi,\n dataStore: DataStore,\n ) => new ContinueTask(api, dataStore),\n ) {\n this._logger = this._args.loggerFactory(\"RegisterWalletTask\");\n }\n\n async run(): Promise<RegisterWalletTaskResult> {\n const { walletPolicy } = this._args;\n\n this._logger.debug(\"[run] Starting RegisterWalletTask\", {\n data: {\n walletName: walletPolicy.name,\n descriptorTemplate: walletPolicy.descriptorTemplate,\n keysCount: walletPolicy.keys?.length ?? 0,\n },\n });\n\n const wallet: InternalWallet =\n this._walletBuilder.fromWalletPolicy(walletPolicy);\n\n const dataStore = new DataStore();\n this._dataStoreService.merklizeWallet(dataStore, wallet);\n\n const serializedWallet = this._walletSerializer.serialize(wallet);\n\n this._logger.debug(\"[run] Sending RegisterWalletAddressCommand\", {\n data: {\n walletName: walletPolicy.name,\n serializedWalletLength: serializedWallet?.length ?? 0,\n },\n });\n const registerCommandResult = await this._api.sendCommand(\n new RegisterWalletAddressCommand({\n walletPolicy: serializedWallet,\n }),\n );\n\n const continueTask = this._continueTaskFactory(this._api, dataStore);\n const result = await continueTask.run(registerCommandResult);\n\n if (isSuccessCommandResult(result)) {\n const registrationResult = BtcCommandUtils.getWalletRegistration(result);\n\n if (!isSuccessCommandResult(registrationResult)) {\n this._logger.error(\"[run] Wallet registration parsing failed\", {\n data: { error: registrationResult.error },\n });\n return CommandResultFactory({\n error: registrationResult.error,\n });\n }\n\n const { walletHmac } = registrationResult.data;\n\n this._logger.debug(\"[run] RegisterWalletTask completed successfully\", {\n data: {\n walletName: walletPolicy.name,\n walletHmac: Array.from(walletHmac)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\"),\n },\n });\n return CommandResultFactory({\n data: new RegisteredWallet(\n walletPolicy.name,\n walletPolicy.descriptorTemplate,\n walletPolicy.keys,\n walletHmac,\n ),\n });\n }\n\n this._logger.error(\"[run] RegisterWalletTask failed\", {\n data: { error: result.error },\n });\n return result;\n }\n}\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,wBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAMO,2CAEPC,EAAoD,6BACpDC,EAA6C,qEAE7CC,EAA6B,kDAC7BC,EAA0B,gDAE1BC,EAAgC,2CAezB,MAAMP,CAAmB,CAG9B,YACmBQ,EACAC,EACAC,EACAC,EACAC,EACAC,EAAuB,CACtCC,EACAC,IACG,IAAI,eAAaD,EAAKC,CAAS,EACpC,CATiB,UAAAP,EACA,WAAAC,EACA,oBAAAC,EACA,uBAAAC,EACA,uBAAAC,EACA,0BAAAC,EAKjB,KAAK,QAAU,KAAK,MAAM,cAAc,oBAAoB,CAC9D,CAdiB,QAgBjB,MAAM,KAAyC,CAC7C,KAAM,CAAE,aAAAG,CAAa,EAAI,KAAK,MAE9B,KAAK,QAAQ,MAAM,oCAAqC,CACtD,KAAM,CACJ,WAAYA,EAAa,KACzB,mBAAoBA,EAAa,mBACjC,UAAWA,EAAa,MAAM,QAAU,CAC1C,CACF,CAAC,EAED,MAAMC,EACJ,KAAK,eAAe,iBAAiBD,CAAY,EAE7CD,EAAY,IAAI,YACtB,KAAK,kBAAkB,eAAeA,EAAWE,CAAM,EAEvD,MAAMC,EAAmB,KAAK,kBAAkB,UAAUD,CAAM,EAEhE,KAAK,QAAQ,MAAM,6CAA8C,CAC/D,KAAM,CACJ,WAAYD,EAAa,KACzB,uBAAwBE,GAAkB,QAAU,CACtD,CACF,CAAC,EACD,MAAMC,EAAwB,MAAM,KAAK,KAAK,YAC5C,IAAI,+BAA6B,CAC/B,aAAcD,CAChB,CAAC,CACH,EAGME,EAAS,MADM,KAAK,qBAAqB,KAAK,KAAML,CAAS,EACjC,IAAII,CAAqB,EAE3D,MAAI,0BAAuBC,CAAM,EAAG,CAClC,MAAMC,EAAqB,kBAAgB,sBAAsBD,CAAM,EAEvE,GAAI,IAAC,0BAAuBC,CAAkB,EAC5C,YAAK,QAAQ,MAAM,2CAA4C,CAC7D,KAAM,CAAE,MAAOA,EAAmB,KAAM,CAC1C,CAAC,KACM,wBAAqB,CAC1B,MAAOA,EAAmB,KAC5B,CAAC,EAGH,KAAM,CAAE,WAAAC,CAAW,EAAID,EAAmB,KAE1C,YAAK,QAAQ,MAAM,kDAAmD,CACpE,KAAM,CACJ,WAAYL,EAAa,KACzB,WAAY,MAAM,KAAKM,CAAU,EAC9B,IAAKC,GAAMA,EAAE,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,EAC1C,KAAK,EAAE,CACZ,CACF,CAAC,KACM,wBAAqB,CAC1B,KAAM,IAAI,mBACRP,EAAa,KACbA,EAAa,mBACbA,EAAa,KACbM,CACF,CACF,CAAC,CACH,CAEA,YAAK,QAAQ,MAAM,kCAAmC,CACpD,KAAM,CAAE,MAAOF,EAAO,KAAM,CAC9B,CAAC,EACMA,CACT,CACF",
|
|
6
|
+
"names": ["RegisterWalletTask_exports", "__export", "RegisterWalletTask", "__toCommonJS", "import_device_management_kit", "import_Wallet", "import_RegisterWalletAddressCommand", "import_ContinueTask", "import_DataStore", "import_BtcCommandUtils", "_api", "_args", "_walletBuilder", "_walletSerializer", "_dataStoreService", "_continueTaskFactory", "api", "dataStore", "walletPolicy", "wallet", "serializedWallet", "registerCommandResult", "result", "registrationResult", "walletHmac", "b"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("@ledgerhq/device-management-kit"),
|
|
1
|
+
"use strict";var e=require("@ledgerhq/device-management-kit"),i=require("../../../api/model/Wallet"),y=require("../../data-store/model/DataStore"),u=require("./RegisterWalletTask");const t=new i.WalletPolicy("My Multisig","wsh(sortedmulti(2,@0/**,@1/**))",["[f5acc2fd/48'/1'/0'/2']tpubDFAqEGNyad35aBCKUAXbQGDjdVhNueno5ZZVEn3sQbW5ci457gLR7HyTmHBg93oourBssgUxuWz1jX5uhc1qaqFo9VsybY1J5FuedLfm4dK","tpubDE7NQymr4AFtcJXi9TaWZtrhAdy8QyKmT4U6b9qYByAxCzoyMJ8zw5d8xVLVpbTRAEqP8pVUxjLE2vDt1rSFjaiS8DSz1QcNZ8D1qxUMx1g"]),w=Uint8Array.from([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32]),f=Uint8Array.from([33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64]),p=new Uint8Array([...w,...f]),k=Uint8Array.from([1,2,3,4]),g={debug:vi.fn(),info:vi.fn(),warn:vi.fn(),error:vi.fn(),subscribers:[]},m=n=>g;describe("RegisterWalletTask",()=>{const n={sendCommand:vi.fn()},d={name:t.name,descriptorTemplate:t.descriptorTemplate,keys:t.keys,hmac:new Uint8Array(32).fill(0),keysTree:{getRoot:vi.fn()},descriptorBuffer:new Uint8Array},l={fromWalletPolicy:vi.fn().mockReturnValue(d)},c={serialize:vi.fn().mockReturnValue(k)},x={merklizeWallet:vi.fn()};afterEach(()=>{vi.resetAllMocks()}),describe("run",()=>{it("should successfully register a wallet and return RegisteredWallet with hmac",async()=>{const r={walletPolicy:t,loggerFactory:m},o=(0,e.CommandResultFactory)({data:new e.ApduResponse({statusCode:new Uint8Array([144,0]),data:p})}),s=()=>({run:vi.fn().mockReturnValue(o)}),a=await new u.RegisterWalletTask(n,r,l,c,x,s).run();expect(l.fromWalletPolicy).toHaveBeenCalledWith(t),expect(x.merklizeWallet).toHaveBeenCalledWith(expect.any(y.DataStore),d),expect(c.serialize).toHaveBeenCalledWith(d),expect((0,e.isSuccessCommandResult)(a)).toBe(!0),(0,e.isSuccessCommandResult)(a)&&(expect(a.data).toBeInstanceOf(i.RegisteredWallet),expect(a.data).toEqual(new i.RegisteredWallet(t.name,t.descriptorTemplate,t.keys,f)))}),it("should return an error if the RegisterWalletAddressCommand fails",async()=>{const r={walletPolicy:t,loggerFactory:m},o=(0,e.CommandResultFactory)({error:new e.InvalidStatusWordError("Registration failed")}),s=()=>({run:vi.fn().mockReturnValue(o)}),a=await new u.RegisterWalletTask(n,r,l,c,x,s).run();expect(a).toStrictEqual((0,e.CommandResultFactory)({error:new e.InvalidStatusWordError("Registration failed")}))}),it("should call sendCommand with the serialized wallet policy",async()=>{const r={walletPolicy:t,loggerFactory:m},o=(0,e.CommandResultFactory)({data:new e.ApduResponse({statusCode:new Uint8Array([144,0]),data:p})}),s=()=>({run:vi.fn().mockReturnValue(o)});await new u.RegisterWalletTask(n,r,l,c,x,s).run(),expect(n.sendCommand).toHaveBeenCalledWith(expect.objectContaining({name:"registerWalletAddress"}))})})});
|
|
2
2
|
//# sourceMappingURL=RegisterWalletTask.test.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/task/RegisterWalletTask.test.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n ApduResponse,\n CommandResultFactory,\n type InternalApi,\n InvalidStatusWordError,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { RegisteredWallet, WalletPolicy } from \"@api/model/Wallet\";\nimport { type ContinueTask } from \"@internal/app-binder/task/ContinueTask\";\nimport { DataStore } from \"@internal/data-store/model/DataStore\";\nimport { type DataStoreService } from \"@internal/data-store/service/DataStoreService\";\nimport { type Wallet } from \"@internal/wallet/model/Wallet\";\nimport { type WalletBuilder } from \"@internal/wallet/service/WalletBuilder\";\nimport { type WalletSerializer } from \"@internal/wallet/service/WalletSerializer\";\n\nimport { RegisterWalletTask } from \"./RegisterWalletTask\";\n\nconst WALLET_POLICY = new WalletPolicy(\n \"My Multisig\",\n \"wsh(sortedmulti(2,@0/**,@1/**))\",\n [\n \"[f5acc2fd/48'/1'/0'/2']tpubDFAqEGNyad35aBCKUAXbQGDjdVhNueno5ZZVEn3sQbW5ci457gLR7HyTmHBg93oourBssgUxuWz1jX5uhc1qaqFo9VsybY1J5FuedLfm4dK\",\n \"tpubDE7NQymr4AFtcJXi9TaWZtrhAdy8QyKmT4U6b9qYByAxCzoyMJ8zw5d8xVLVpbTRAEqP8pVUxjLE2vDt1rSFjaiS8DSz1QcNZ8D1qxUMx1g\",\n ],\n);\n\nconst WALLET_ID = Uint8Array.from([\n 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d,\n 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a,\n 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20,\n]);\n\nconst WALLET_HMAC = Uint8Array.from([\n 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d,\n 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a,\n 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40,\n]);\n\n// Combined response data: walletId (32 bytes) + walletHmac (32 bytes)\nconst APDU_RESPONSE_DATA = new Uint8Array([...WALLET_ID, ...WALLET_HMAC]);\n\nconst SERIALIZED_WALLET = Uint8Array.from([0x01, 0x02, 0x03, 0x04]);\n\ndescribe(\"RegisterWalletTask\", () => {\n const apiMock = {\n sendCommand: vi.fn(),\n } as unknown as InternalApi;\n\n const mockInternalWallet = {\n name: WALLET_POLICY.name,\n descriptorTemplate: WALLET_POLICY.descriptorTemplate,\n keys: WALLET_POLICY.keys,\n hmac: new Uint8Array(32).fill(0),\n keysTree: { getRoot: vi.fn() },\n descriptorBuffer: new Uint8Array(),\n } as unknown as Wallet;\n\n const walletBuilderMock = {\n fromWalletPolicy: vi.fn().mockReturnValue(mockInternalWallet),\n } as unknown as WalletBuilder;\n\n const walletSerializerMock = {\n serialize: vi.fn().mockReturnValue(SERIALIZED_WALLET),\n } as unknown as WalletSerializer;\n\n const dataStoreServiceMock = {\n merklizeWallet: vi.fn(),\n } as unknown as DataStoreService;\n\n afterEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"run\", () => {\n it(\"should successfully register a wallet and return RegisteredWallet with hmac\", async () => {\n // GIVEN\n const args = {\n walletPolicy: WALLET_POLICY,\n };\n\n const successResult = CommandResultFactory<ApduResponse, void>({\n data: new ApduResponse({\n statusCode: new Uint8Array([0x90, 0x00]),\n data: APDU_RESPONSE_DATA,\n }),\n });\n\n const continueTaskFactory = () =>\n ({\n run: vi.fn().mockReturnValue(successResult),\n }) as unknown as ContinueTask;\n\n // WHEN\n const result = await new RegisterWalletTask(\n apiMock,\n args,\n walletBuilderMock,\n walletSerializerMock,\n dataStoreServiceMock,\n continueTaskFactory,\n ).run();\n\n // THEN\n expect(walletBuilderMock.fromWalletPolicy).toHaveBeenCalledWith(\n WALLET_POLICY,\n );\n expect(dataStoreServiceMock.merklizeWallet).toHaveBeenCalledWith(\n expect.any(DataStore),\n mockInternalWallet,\n );\n expect(walletSerializerMock.serialize).toHaveBeenCalledWith(\n mockInternalWallet,\n );\n expect(isSuccessCommandResult(result)).toBe(true);\n if (isSuccessCommandResult(result)) {\n expect(result.data).toBeInstanceOf(RegisteredWallet);\n expect(result.data).toEqual(\n new RegisteredWallet(\n WALLET_POLICY.name,\n WALLET_POLICY.descriptorTemplate,\n WALLET_POLICY.keys,\n WALLET_HMAC,\n ),\n );\n }\n });\n\n it(\"should return an error if the RegisterWalletAddressCommand fails\", async () => {\n // GIVEN\n const args = {\n walletPolicy: WALLET_POLICY,\n };\n\n const resultError = CommandResultFactory<ApduResponse, void>({\n error: new InvalidStatusWordError(\"Registration failed\"),\n });\n\n const continueTaskFactory = () =>\n ({\n run: vi.fn().mockReturnValue(resultError),\n }) as unknown as ContinueTask;\n\n // WHEN\n const result = await new RegisterWalletTask(\n apiMock,\n args,\n walletBuilderMock,\n walletSerializerMock,\n dataStoreServiceMock,\n continueTaskFactory,\n ).run();\n\n // THEN\n expect(result).toStrictEqual(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"Registration failed\"),\n }),\n );\n });\n\n it(\"should call sendCommand with the serialized wallet policy\", async () => {\n // GIVEN\n const args = {\n walletPolicy: WALLET_POLICY,\n };\n\n const successResult = CommandResultFactory<ApduResponse, void>({\n data: new ApduResponse({\n statusCode: new Uint8Array([0x90, 0x00]),\n data: APDU_RESPONSE_DATA,\n }),\n });\n\n const continueTaskFactory = () =>\n ({\n run: vi.fn().mockReturnValue(successResult),\n }) as unknown as ContinueTask;\n\n // WHEN\n await new RegisterWalletTask(\n apiMock,\n args,\n walletBuilderMock,\n walletSerializerMock,\n dataStoreServiceMock,\n continueTaskFactory,\n ).run();\n\n // THEN\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n expect.objectContaining({\n name: \"registerWalletAddress\",\n }),\n );\n });\n });\n});\n"],
|
|
5
|
-
"mappings": "aAAA,IAAAA,EAMO,2CAEPC,EAA+C,6BAE/CC,EAA0B,gDAM1BC,EAAmC,gCAEnC,MAAMC,EAAgB,IAAI,eACxB,cACA,kCACA,CACE,yIACA,iHACF,CACF,EAEMC,EAAY,WAAW,KAAK,CAChC,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GAAM,GAAM,GAAM,GACxE,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GACxE,GAAM,GAAM,GAAM,GAAM,GAAM,EAChC,CAAC,EAEKC,EAAc,WAAW,KAAK,CAClC,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GACxE,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GACxE,GAAM,GAAM,GAAM,GAAM,GAAM,EAChC,CAAC,EAGKC,EAAqB,IAAI,WAAW,CAAC,GAAGF,EAAW,GAAGC,CAAW,CAAC,EAElEE,EAAoB,WAAW,KAAK,CAAC,EAAM,EAAM,EAAM,CAAI,CAAC,
|
|
6
|
-
"names": ["import_device_management_kit", "import_Wallet", "import_DataStore", "import_RegisterWalletTask", "WALLET_POLICY", "WALLET_ID", "WALLET_HMAC", "APDU_RESPONSE_DATA", "SERIALIZED_WALLET", "apiMock", "mockInternalWallet", "walletBuilderMock", "walletSerializerMock", "dataStoreServiceMock", "args", "successResult", "continueTaskFactory", "result", "resultError"]
|
|
4
|
+
"sourcesContent": ["import {\n ApduResponse,\n CommandResultFactory,\n type InternalApi,\n InvalidStatusWordError,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { RegisteredWallet, WalletPolicy } from \"@api/model/Wallet\";\nimport { type ContinueTask } from \"@internal/app-binder/task/ContinueTask\";\nimport { DataStore } from \"@internal/data-store/model/DataStore\";\nimport { type DataStoreService } from \"@internal/data-store/service/DataStoreService\";\nimport { type Wallet } from \"@internal/wallet/model/Wallet\";\nimport { type WalletBuilder } from \"@internal/wallet/service/WalletBuilder\";\nimport { type WalletSerializer } from \"@internal/wallet/service/WalletSerializer\";\n\nimport { RegisterWalletTask } from \"./RegisterWalletTask\";\n\nconst WALLET_POLICY = new WalletPolicy(\n \"My Multisig\",\n \"wsh(sortedmulti(2,@0/**,@1/**))\",\n [\n \"[f5acc2fd/48'/1'/0'/2']tpubDFAqEGNyad35aBCKUAXbQGDjdVhNueno5ZZVEn3sQbW5ci457gLR7HyTmHBg93oourBssgUxuWz1jX5uhc1qaqFo9VsybY1J5FuedLfm4dK\",\n \"tpubDE7NQymr4AFtcJXi9TaWZtrhAdy8QyKmT4U6b9qYByAxCzoyMJ8zw5d8xVLVpbTRAEqP8pVUxjLE2vDt1rSFjaiS8DSz1QcNZ8D1qxUMx1g\",\n ],\n);\n\nconst WALLET_ID = Uint8Array.from([\n 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d,\n 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a,\n 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20,\n]);\n\nconst WALLET_HMAC = Uint8Array.from([\n 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d,\n 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a,\n 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40,\n]);\n\n// Combined response data: walletId (32 bytes) + walletHmac (32 bytes)\nconst APDU_RESPONSE_DATA = new Uint8Array([...WALLET_ID, ...WALLET_HMAC]);\n\nconst SERIALIZED_WALLET = Uint8Array.from([0x01, 0x02, 0x03, 0x04]);\n\nconst mockLogger = {\n debug: vi.fn(),\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n subscribers: [],\n};\nconst mockLoggerFactory = (_tag: string) => mockLogger;\n\ndescribe(\"RegisterWalletTask\", () => {\n const apiMock = {\n sendCommand: vi.fn(),\n } as unknown as InternalApi;\n\n const mockInternalWallet = {\n name: WALLET_POLICY.name,\n descriptorTemplate: WALLET_POLICY.descriptorTemplate,\n keys: WALLET_POLICY.keys,\n hmac: new Uint8Array(32).fill(0),\n keysTree: { getRoot: vi.fn() },\n descriptorBuffer: new Uint8Array(),\n } as unknown as Wallet;\n\n const walletBuilderMock = {\n fromWalletPolicy: vi.fn().mockReturnValue(mockInternalWallet),\n } as unknown as WalletBuilder;\n\n const walletSerializerMock = {\n serialize: vi.fn().mockReturnValue(SERIALIZED_WALLET),\n } as unknown as WalletSerializer;\n\n const dataStoreServiceMock = {\n merklizeWallet: vi.fn(),\n } as unknown as DataStoreService;\n\n afterEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"run\", () => {\n it(\"should successfully register a wallet and return RegisteredWallet with hmac\", async () => {\n // GIVEN\n const args = {\n walletPolicy: WALLET_POLICY,\n loggerFactory: mockLoggerFactory,\n };\n\n const successResult = CommandResultFactory<ApduResponse, void>({\n data: new ApduResponse({\n statusCode: new Uint8Array([0x90, 0x00]),\n data: APDU_RESPONSE_DATA,\n }),\n });\n\n const continueTaskFactory = () =>\n ({\n run: vi.fn().mockReturnValue(successResult),\n }) as unknown as ContinueTask;\n\n // WHEN\n const result = await new RegisterWalletTask(\n apiMock,\n args,\n walletBuilderMock,\n walletSerializerMock,\n dataStoreServiceMock,\n continueTaskFactory,\n ).run();\n\n // THEN\n expect(walletBuilderMock.fromWalletPolicy).toHaveBeenCalledWith(\n WALLET_POLICY,\n );\n expect(dataStoreServiceMock.merklizeWallet).toHaveBeenCalledWith(\n expect.any(DataStore),\n mockInternalWallet,\n );\n expect(walletSerializerMock.serialize).toHaveBeenCalledWith(\n mockInternalWallet,\n );\n expect(isSuccessCommandResult(result)).toBe(true);\n if (isSuccessCommandResult(result)) {\n expect(result.data).toBeInstanceOf(RegisteredWallet);\n expect(result.data).toEqual(\n new RegisteredWallet(\n WALLET_POLICY.name,\n WALLET_POLICY.descriptorTemplate,\n WALLET_POLICY.keys,\n WALLET_HMAC,\n ),\n );\n }\n });\n\n it(\"should return an error if the RegisterWalletAddressCommand fails\", async () => {\n // GIVEN\n const args = {\n walletPolicy: WALLET_POLICY,\n loggerFactory: mockLoggerFactory,\n };\n\n const resultError = CommandResultFactory<ApduResponse, void>({\n error: new InvalidStatusWordError(\"Registration failed\"),\n });\n\n const continueTaskFactory = () =>\n ({\n run: vi.fn().mockReturnValue(resultError),\n }) as unknown as ContinueTask;\n\n // WHEN\n const result = await new RegisterWalletTask(\n apiMock,\n args,\n walletBuilderMock,\n walletSerializerMock,\n dataStoreServiceMock,\n continueTaskFactory,\n ).run();\n\n // THEN\n expect(result).toStrictEqual(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"Registration failed\"),\n }),\n );\n });\n\n it(\"should call sendCommand with the serialized wallet policy\", async () => {\n // GIVEN\n const args = {\n walletPolicy: WALLET_POLICY,\n loggerFactory: mockLoggerFactory,\n };\n\n const successResult = CommandResultFactory<ApduResponse, void>({\n data: new ApduResponse({\n statusCode: new Uint8Array([0x90, 0x00]),\n data: APDU_RESPONSE_DATA,\n }),\n });\n\n const continueTaskFactory = () =>\n ({\n run: vi.fn().mockReturnValue(successResult),\n }) as unknown as ContinueTask;\n\n // WHEN\n await new RegisterWalletTask(\n apiMock,\n args,\n walletBuilderMock,\n walletSerializerMock,\n dataStoreServiceMock,\n continueTaskFactory,\n ).run();\n\n // THEN\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n expect.objectContaining({\n name: \"registerWalletAddress\",\n }),\n );\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_device_management_kit", "import_Wallet", "import_DataStore", "import_RegisterWalletTask", "WALLET_POLICY", "WALLET_ID", "WALLET_HMAC", "APDU_RESPONSE_DATA", "SERIALIZED_WALLET", "mockLogger", "mockLoggerFactory", "_tag", "apiMock", "mockInternalWallet", "walletBuilderMock", "walletSerializerMock", "dataStoreServiceMock", "args", "successResult", "continueTaskFactory", "result", "resultError"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var m=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var k=Object.prototype.hasOwnProperty;var _=(a,e)=>{for(var s in e)m(a,s,{get:e[s],enumerable:!0})},v=(a,e,s,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of f(e))!k.call(a,r)&&r!==s&&m(a,r,{get:()=>e[r],enumerable:!(n=y(e,r))||n.enumerable});return a};var C=a=>v(m({},"__esModule",{value:!0}),a);var T={};_(T,{SendSignMessageTask:()=>M});module.exports=C(T);var d=require("@ledgerhq/device-management-kit"),S=require("../../app-binder/command/SignMessageCommand"),l=require("../../app-binder/command/utils/constants"),u=require("../../app-binder/task/ContinueTask"),c=require("../../data-store/model/DataStore"),p=require("../../utils/BtcCommandUtils");class M{constructor(e,s,n,r=(o,i)=>new u.ContinueTask(o,i)){this._api=e;this._args=s;this._dataStoreService=n;this._continueTaskFactory=r;this._logger=this._args.loggerFactory("SendSignMessageTask")}_logger;async run(){const{derivationPath:e,message:s}=this._args;this._logger.debug("[run] Starting SendSignMessageTask",{data:{derivationPath:e,message:s}});const n=new c.DataStore,r=new TextEncoder().encode(s),o=[];for(let t=0;t<r.length;t+=l.CHUNK_SIZE)o.push(r.subarray(t,t+l.CHUNK_SIZE));const i=this._dataStoreService.merklizeChunks(n,o);this._logger.debug("[run] Sending SignMessageCommand",{data:{derivationPath:e,chunksCount:o.length,merkleRoot:i?Array.from(i).map(t=>t.toString(16).padStart(2,"0")).join(""):null}});const h=await this._api.sendCommand(new S.SignMessageCommand({derivationPath:e,messageLength:r.length,messageMerkleRoot:i})),g=await this._continueTaskFactory(this._api,n).run(h);if((0,d.isSuccessCommandResult)(g)){const t=p.BtcCommandUtils.getSignature(g);return(0,d.isSuccessCommandResult)(t)&&this._logger.debug("[run] SendSignMessageTask completed successfully",{data:{signature:t.data}}),t}return this._logger.error("[run] SendSignMessageTask failed",{data:{error:g.error}}),g}}0&&(module.exports={SendSignMessageTask});
|
|
2
2
|
//# sourceMappingURL=SignMessageTask.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/task/SignMessageTask.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type CommandResult,\n type InternalApi,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type Signature } from \"@api/model/Signature\";\nimport { SignMessageCommand } from \"@internal/app-binder/command/SignMessageCommand\";\nimport { type BtcErrorCodes } from \"@internal/app-binder/command/utils/bitcoinAppErrors\";\nimport { CHUNK_SIZE } from \"@internal/app-binder/command/utils/constants\";\nimport { ContinueTask } from \"@internal/app-binder/task/ContinueTask\";\nimport { DataStore } from \"@internal/data-store/model/DataStore\";\nimport { type DataStoreService } from \"@internal/data-store/service/DataStoreService\";\nimport { BtcCommandUtils } from \"@internal/utils/BtcCommandUtils\";\n\nexport type SendSignMessageTaskArgs = {\n derivationPath: string;\n message: string;\n};\n\nexport class SendSignMessageTask {\n constructor(\n private readonly _api: InternalApi,\n private readonly _args: SendSignMessageTaskArgs,\n private readonly _dataStoreService: DataStoreService,\n private readonly _continueTaskFactory = (\n api: InternalApi,\n dataStore: DataStore,\n ) => new ContinueTask(api, dataStore),\n ) {}\n\n async run(): Promise<CommandResult<Signature, BtcErrorCodes>> {\n const { derivationPath, message } = this._args;\n\n const dataStore = new DataStore();\n\n const messageBuffer = new TextEncoder().encode(message);\n const chunks: Uint8Array[] = [];\n for (let i = 0; i < messageBuffer.length; i += CHUNK_SIZE) {\n chunks.push(messageBuffer.subarray(i, i + CHUNK_SIZE));\n }\n\n const merkleRoot = this._dataStoreService.merklizeChunks(dataStore, chunks);\n\n const signMessageFirstCommandResponse = await this._api.sendCommand(\n new SignMessageCommand({\n derivationPath,\n messageLength: messageBuffer.length,\n messageMerkleRoot: merkleRoot,\n }),\n );\n const response = await this._continueTaskFactory(this._api, dataStore).run(\n signMessageFirstCommandResponse,\n );\n if (isSuccessCommandResult(response)) {\n
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,yBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,
|
|
6
|
-
"names": ["SignMessageTask_exports", "__export", "SendSignMessageTask", "__toCommonJS", "import_device_management_kit", "import_SignMessageCommand", "import_constants", "import_ContinueTask", "import_DataStore", "import_BtcCommandUtils", "_api", "_args", "_dataStoreService", "_continueTaskFactory", "api", "dataStore", "derivationPath", "message", "messageBuffer", "chunks", "i", "merkleRoot", "signMessageFirstCommandResponse", "response"]
|
|
4
|
+
"sourcesContent": ["import {\n type CommandResult,\n type InternalApi,\n isSuccessCommandResult,\n type LoggerPublisherService,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type Signature } from \"@api/model/Signature\";\nimport { SignMessageCommand } from \"@internal/app-binder/command/SignMessageCommand\";\nimport { type BtcErrorCodes } from \"@internal/app-binder/command/utils/bitcoinAppErrors\";\nimport { CHUNK_SIZE } from \"@internal/app-binder/command/utils/constants\";\nimport { ContinueTask } from \"@internal/app-binder/task/ContinueTask\";\nimport { DataStore } from \"@internal/data-store/model/DataStore\";\nimport { type DataStoreService } from \"@internal/data-store/service/DataStoreService\";\nimport { BtcCommandUtils } from \"@internal/utils/BtcCommandUtils\";\n\nexport type SendSignMessageTaskArgs = {\n derivationPath: string;\n message: string;\n loggerFactory: (tag: string) => LoggerPublisherService;\n};\n\nexport class SendSignMessageTask {\n private readonly _logger: LoggerPublisherService;\n\n constructor(\n private readonly _api: InternalApi,\n private readonly _args: SendSignMessageTaskArgs,\n private readonly _dataStoreService: DataStoreService,\n private readonly _continueTaskFactory = (\n api: InternalApi,\n dataStore: DataStore,\n ) => new ContinueTask(api, dataStore),\n ) {\n this._logger = this._args.loggerFactory(\"SendSignMessageTask\");\n }\n\n async run(): Promise<CommandResult<Signature, BtcErrorCodes>> {\n const { derivationPath, message } = this._args;\n\n this._logger.debug(\"[run] Starting SendSignMessageTask\", {\n data: { derivationPath, message },\n });\n\n const dataStore = new DataStore();\n\n const messageBuffer = new TextEncoder().encode(message);\n const chunks: Uint8Array[] = [];\n for (let i = 0; i < messageBuffer.length; i += CHUNK_SIZE) {\n chunks.push(messageBuffer.subarray(i, i + CHUNK_SIZE));\n }\n\n const merkleRoot = this._dataStoreService.merklizeChunks(dataStore, chunks);\n\n this._logger.debug(\"[run] Sending SignMessageCommand\", {\n data: {\n derivationPath,\n chunksCount: chunks.length,\n merkleRoot: merkleRoot\n ? Array.from(merkleRoot)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\")\n : null,\n },\n });\n const signMessageFirstCommandResponse = await this._api.sendCommand(\n new SignMessageCommand({\n derivationPath,\n messageLength: messageBuffer.length,\n messageMerkleRoot: merkleRoot,\n }),\n );\n const response = await this._continueTaskFactory(this._api, dataStore).run(\n signMessageFirstCommandResponse,\n );\n if (isSuccessCommandResult(response)) {\n const signatureResult = BtcCommandUtils.getSignature(response);\n if (isSuccessCommandResult(signatureResult)) {\n this._logger.debug(\"[run] SendSignMessageTask completed successfully\", {\n data: { signature: signatureResult.data },\n });\n }\n return signatureResult;\n }\n this._logger.error(\"[run] SendSignMessageTask failed\", {\n data: { error: response.error },\n });\n return response;\n }\n}\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,yBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAKO,2CAGPC,EAAmC,2DAEnCC,EAA2B,wDAC3BC,EAA6B,kDAC7BC,EAA0B,gDAE1BC,EAAgC,2CAQzB,MAAMP,CAAoB,CAG/B,YACmBQ,EACAC,EACAC,EACAC,EAAuB,CACtCC,EACAC,IACG,IAAI,eAAaD,EAAKC,CAAS,EACpC,CAPiB,UAAAL,EACA,WAAAC,EACA,uBAAAC,EACA,0BAAAC,EAKjB,KAAK,QAAU,KAAK,MAAM,cAAc,qBAAqB,CAC/D,CAZiB,QAcjB,MAAM,KAAwD,CAC5D,KAAM,CAAE,eAAAG,EAAgB,QAAAC,CAAQ,EAAI,KAAK,MAEzC,KAAK,QAAQ,MAAM,qCAAsC,CACvD,KAAM,CAAE,eAAAD,EAAgB,QAAAC,CAAQ,CAClC,CAAC,EAED,MAAMF,EAAY,IAAI,YAEhBG,EAAgB,IAAI,YAAY,EAAE,OAAOD,CAAO,EAChDE,EAAuB,CAAC,EAC9B,QAASC,EAAI,EAAGA,EAAIF,EAAc,OAAQE,GAAK,aAC7CD,EAAO,KAAKD,EAAc,SAASE,EAAGA,EAAI,YAAU,CAAC,EAGvD,MAAMC,EAAa,KAAK,kBAAkB,eAAeN,EAAWI,CAAM,EAE1E,KAAK,QAAQ,MAAM,mCAAoC,CACrD,KAAM,CACJ,eAAAH,EACA,YAAaG,EAAO,OACpB,WAAYE,EACR,MAAM,KAAKA,CAAU,EAClB,IAAKC,GAAMA,EAAE,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,EAC1C,KAAK,EAAE,EACV,IACN,CACF,CAAC,EACD,MAAMC,EAAkC,MAAM,KAAK,KAAK,YACtD,IAAI,qBAAmB,CACrB,eAAAP,EACA,cAAeE,EAAc,OAC7B,kBAAmBG,CACrB,CAAC,CACH,EACMG,EAAW,MAAM,KAAK,qBAAqB,KAAK,KAAMT,CAAS,EAAE,IACrEQ,CACF,EACA,MAAI,0BAAuBC,CAAQ,EAAG,CACpC,MAAMC,EAAkB,kBAAgB,aAAaD,CAAQ,EAC7D,SAAI,0BAAuBC,CAAe,GACxC,KAAK,QAAQ,MAAM,mDAAoD,CACrE,KAAM,CAAE,UAAWA,EAAgB,IAAK,CAC1C,CAAC,EAEIA,CACT,CACA,YAAK,QAAQ,MAAM,mCAAoC,CACrD,KAAM,CAAE,MAAOD,EAAS,KAAM,CAChC,CAAC,EACMA,CACT,CACF",
|
|
6
|
+
"names": ["SignMessageTask_exports", "__export", "SendSignMessageTask", "__toCommonJS", "import_device_management_kit", "import_SignMessageCommand", "import_constants", "import_ContinueTask", "import_DataStore", "import_BtcCommandUtils", "_api", "_args", "_dataStoreService", "_continueTaskFactory", "api", "dataStore", "derivationPath", "message", "messageBuffer", "chunks", "i", "merkleRoot", "b", "signMessageFirstCommandResponse", "response", "signatureResult"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("@ledgerhq/device-management-kit"),o=require("../../app-binder/command/utils/constants"),
|
|
1
|
+
"use strict";var e=require("@ledgerhq/device-management-kit"),o=require("../../app-binder/command/utils/constants"),l=require("../../data-store/model/DataStore"),s=require("./SignMessageTask");const d="a".repeat(o.CHUNK_SIZE),S="a".repeat(o.CHUNK_SIZE*2),x="44'/0'/0'/0/0",u=new Uint8Array(o.SHA256_SIZE).fill(1),m={v:27,r:"0x97a4ca8f694633592601f5a23e0bcc553c9d0a90d3a3422d575508a92898b96e",s:"0x6950d02e74e9c102c164a225533082cabdd890efc463f67f60cefe8c3f87cfce"},g=new Uint8Array([27,151,164,202,143,105,70,51,89,38,1,245,162,62,11,204,85,60,157,10,144,211,163,66,45,87,85,8,169,40,152,185,110,105,80,208,46,116,233,193,2,193,100,162,37,83,48,130,202,189,216,144,239,196,99,246,127,96,206,254,140,63,135,207,206]),v={debug:vi.fn(),info:vi.fn(),warn:vi.fn(),error:vi.fn(),subscribers:[]},f=c=>v;describe("SignMessageTask",()=>{const c=(0,e.CommandResultFactory)({data:new e.ApduResponse({statusCode:new Uint8Array([144,0]),data:g})}),i={sendCommand:vi.fn()};afterEach(()=>{vi.resetAllMocks()}),describe("run",()=>{it("should correctly chunk a message that fits in 1 chunk",async()=>{const n={derivationPath:x,message:d,loggerFactory:f},a={merklizeChunks:vi.fn().mockReturnValue(u)},t=()=>({run:vi.fn().mockReturnValue(c)}),r=await new s.SendSignMessageTask(i,n,a,t).run();expect(a.merklizeChunks).toHaveBeenCalledWith(expect.any(l.DataStore),[Uint8Array.from(new Array(64).fill(97))]),expect(r).toStrictEqual((0,e.CommandResultFactory)({data:m}))}),it("should correctly chunk a message that fits in 2 chunks",async()=>{const n={derivationPath:x,message:S,loggerFactory:f},a={merklizeChunks:vi.fn().mockReturnValue(u)},t=()=>({run:vi.fn().mockReturnValue(c)}),r=await new s.SendSignMessageTask(i,n,a,t).run();expect(a.merklizeChunks).toHaveBeenCalledWith(expect.any(l.DataStore),[Uint8Array.from(new Array(64).fill(97)),Uint8Array.from(new Array(64).fill(97))]),expect(r).toStrictEqual((0,e.CommandResultFactory)({data:m}))}),it("should return an error if the initial SignMessageCommand fails",async()=>{const n={derivationPath:x,message:d,loggerFactory:f},a=(0,e.CommandResultFactory)({error:new e.InvalidStatusWordError("error")}),t={merklizeChunks:vi.fn().mockReturnValue(u)},r=()=>({run:vi.fn().mockReturnValue(a)}),k=await new s.SendSignMessageTask(i,n,t,r).run();expect(k).toStrictEqual((0,e.CommandResultFactory)({error:new e.InvalidStatusWordError("error")}))})})});
|
|
2
2
|
//# sourceMappingURL=SignMessageTask.test.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/task/SignMessageTask.test.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n ApduResponse,\n CommandResultFactory,\n type InternalApi,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type Signature } from \"@api/model/Signature\";\nimport {\n CHUNK_SIZE,\n SHA256_SIZE,\n} from \"@internal/app-binder/command/utils/constants\";\nimport { type ContinueTask } from \"@internal/app-binder/task/ContinueTask\";\nimport { DataStore } from \"@internal/data-store/model/DataStore\";\nimport { type DataStoreService } from \"@internal/data-store/service/DataStoreService\";\n\nimport { SendSignMessageTask } from \"./SignMessageTask\";\n\nconst EXACT_ONE_CHUNK_MESSAGE = \"a\".repeat(CHUNK_SIZE);\nconst EXACT_TWO_CHUNKS_MESSAGE = \"a\".repeat(CHUNK_SIZE * 2);\nconst DERIVATION_PATH = \"44'/0'/0'/0/0\";\nconst MERKLE_ROOT = new Uint8Array(SHA256_SIZE).fill(0x01);\n\nconst SIGNATURE: Signature = {\n v: 27,\n r: \"0x97a4ca8f694633592601f5a23e0bcc553c9d0a90d3a3422d575508a92898b96e\",\n s: \"0x6950d02e74e9c102c164a225533082cabdd890efc463f67f60cefe8c3f87cfce\",\n};\n\nconst SIGNATURE_APDU = new Uint8Array([\n 0x1b, 0x97, 0xa4, 0xca, 0x8f, 0x69, 0x46, 0x33, 0x59, 0x26, 0x01, 0xf5, 0xa2,\n 0x3e, 0x0b, 0xcc, 0x55, 0x3c, 0x9d, 0x0a, 0x90, 0xd3, 0xa3, 0x42, 0x2d, 0x57,\n 0x55, 0x08, 0xa9, 0x28, 0x98, 0xb9, 0x6e, 0x69, 0x50, 0xd0, 0x2e, 0x74, 0xe9,\n 0xc1, 0x02, 0xc1, 0x64, 0xa2, 0x25, 0x53, 0x30, 0x82, 0xca, 0xbd, 0xd8, 0x90,\n 0xef, 0xc4, 0x63, 0xf6, 0x7f, 0x60, 0xce, 0xfe, 0x8c, 0x3f, 0x87, 0xcf, 0xce,\n]);\n\ndescribe(\"SignMessageTask\", () => {\n const signatureResult = CommandResultFactory<ApduResponse, void>({\n data: new ApduResponse({\n statusCode: new Uint8Array([0x90, 0x00]),\n data: SIGNATURE_APDU,\n }),\n });\n const apiMock = {\n sendCommand: vi.fn(),\n } as unknown as InternalApi;\n\n afterEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"run\", () => {\n it(\"should correctly chunk a message that fits in 1 chunk\", async () => {\n // GIVEN\n const args = {\n derivationPath: DERIVATION_PATH,\n message: EXACT_ONE_CHUNK_MESSAGE,\n };\n\n const dataStoreService = {\n merklizeChunks: vi.fn().mockReturnValue(MERKLE_ROOT),\n } as unknown as DataStoreService;\n\n const continueTaskFactory = () =>\n ({\n run: vi.fn().mockReturnValue(signatureResult),\n }) as unknown as ContinueTask;\n\n // WHEN\n const result = await new SendSignMessageTask(\n apiMock,\n args,\n dataStoreService,\n continueTaskFactory,\n ).run();\n\n // THEN\n expect(dataStoreService.merklizeChunks).toHaveBeenCalledWith(\n expect.any(DataStore),\n [Uint8Array.from(new Array(64).fill(0x61))],\n );\n expect(result).toStrictEqual(CommandResultFactory({ data: SIGNATURE }));\n });\n\n it(\"should correctly chunk a message that fits in 2 chunks\", async () => {\n // GIVEN\n const args = {\n derivationPath: DERIVATION_PATH,\n message: EXACT_TWO_CHUNKS_MESSAGE,\n };\n\n const dataStoreService = {\n merklizeChunks: vi.fn().mockReturnValue(MERKLE_ROOT),\n } as unknown as DataStoreService;\n\n const continueTaskFactory = () =>\n ({\n run: vi.fn().mockReturnValue(signatureResult),\n }) as unknown as ContinueTask;\n\n // WHEN\n const result = await new SendSignMessageTask(\n apiMock,\n args,\n dataStoreService,\n continueTaskFactory,\n ).run();\n\n // THEN\n expect(dataStoreService.merklizeChunks).toHaveBeenCalledWith(\n expect.any(DataStore),\n [\n Uint8Array.from(new Array(64).fill(0x61)),\n Uint8Array.from(new Array(64).fill(0x61)),\n ],\n );\n expect(result).toStrictEqual(CommandResultFactory({ data: SIGNATURE }));\n });\n\n it(\"should return an error if the initial SignMessageCommand fails\", async () => {\n // GIVEN\n const args = {\n derivationPath: DERIVATION_PATH,\n message: EXACT_ONE_CHUNK_MESSAGE,\n };\n\n const resultError = CommandResultFactory<Signature, void>({\n error: new InvalidStatusWordError(\"error\"),\n });\n const dataStoreService = {\n merklizeChunks: vi.fn().mockReturnValue(MERKLE_ROOT),\n } as unknown as DataStoreService;\n\n const continueTaskFactory = () =>\n ({\n run: vi.fn().mockReturnValue(resultError),\n }) as unknown as ContinueTask;\n\n // WHEN\n const result = await new SendSignMessageTask(\n apiMock,\n args,\n dataStoreService,\n continueTaskFactory,\n ).run();\n\n // THEN\n expect(result).toStrictEqual(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"error\"),\n }),\n );\n });\n });\n});\n"],
|
|
5
|
-
"mappings": "aAAA,IAAAA,EAKO,2CAGPC,EAGO,wDAEPC,EAA0B,gDAG1BC,EAAoC,6BAEpC,MAAMC,EAA0B,IAAI,OAAO,YAAU,EAC/CC,EAA2B,IAAI,OAAO,aAAa,CAAC,EACpDC,EAAkB,gBAClBC,EAAc,IAAI,WAAW,aAAW,EAAE,KAAK,CAAI,EAEnDC,EAAuB,CAC3B,EAAG,GACH,EAAG,qEACH,EAAG,oEACL,EAEMC,EAAiB,IAAI,WAAW,CACpC,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,GAAM,GAAM,EAAM,IAAM,IACxE,GAAM,GAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,GAAM,GACxE,GAAM,EAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IACxE,IAAM,EAAM,IAAM,IAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IACxE,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAC1E,CAAC,
|
|
6
|
-
"names": ["import_device_management_kit", "import_constants", "import_DataStore", "import_SignMessageTask", "EXACT_ONE_CHUNK_MESSAGE", "EXACT_TWO_CHUNKS_MESSAGE", "DERIVATION_PATH", "MERKLE_ROOT", "SIGNATURE", "SIGNATURE_APDU", "signatureResult", "apiMock", "args", "dataStoreService", "continueTaskFactory", "result", "resultError"]
|
|
4
|
+
"sourcesContent": ["import {\n ApduResponse,\n CommandResultFactory,\n type InternalApi,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type Signature } from \"@api/model/Signature\";\nimport {\n CHUNK_SIZE,\n SHA256_SIZE,\n} from \"@internal/app-binder/command/utils/constants\";\nimport { type ContinueTask } from \"@internal/app-binder/task/ContinueTask\";\nimport { DataStore } from \"@internal/data-store/model/DataStore\";\nimport { type DataStoreService } from \"@internal/data-store/service/DataStoreService\";\n\nimport { SendSignMessageTask } from \"./SignMessageTask\";\n\nconst EXACT_ONE_CHUNK_MESSAGE = \"a\".repeat(CHUNK_SIZE);\nconst EXACT_TWO_CHUNKS_MESSAGE = \"a\".repeat(CHUNK_SIZE * 2);\nconst DERIVATION_PATH = \"44'/0'/0'/0/0\";\nconst MERKLE_ROOT = new Uint8Array(SHA256_SIZE).fill(0x01);\n\nconst SIGNATURE: Signature = {\n v: 27,\n r: \"0x97a4ca8f694633592601f5a23e0bcc553c9d0a90d3a3422d575508a92898b96e\",\n s: \"0x6950d02e74e9c102c164a225533082cabdd890efc463f67f60cefe8c3f87cfce\",\n};\n\nconst SIGNATURE_APDU = new Uint8Array([\n 0x1b, 0x97, 0xa4, 0xca, 0x8f, 0x69, 0x46, 0x33, 0x59, 0x26, 0x01, 0xf5, 0xa2,\n 0x3e, 0x0b, 0xcc, 0x55, 0x3c, 0x9d, 0x0a, 0x90, 0xd3, 0xa3, 0x42, 0x2d, 0x57,\n 0x55, 0x08, 0xa9, 0x28, 0x98, 0xb9, 0x6e, 0x69, 0x50, 0xd0, 0x2e, 0x74, 0xe9,\n 0xc1, 0x02, 0xc1, 0x64, 0xa2, 0x25, 0x53, 0x30, 0x82, 0xca, 0xbd, 0xd8, 0x90,\n 0xef, 0xc4, 0x63, 0xf6, 0x7f, 0x60, 0xce, 0xfe, 0x8c, 0x3f, 0x87, 0xcf, 0xce,\n]);\n\nconst mockLogger = {\n debug: vi.fn(),\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n subscribers: [],\n};\nconst mockLoggerFactory = (_tag: string) => mockLogger;\n\ndescribe(\"SignMessageTask\", () => {\n const signatureResult = CommandResultFactory<ApduResponse, void>({\n data: new ApduResponse({\n statusCode: new Uint8Array([0x90, 0x00]),\n data: SIGNATURE_APDU,\n }),\n });\n const apiMock = {\n sendCommand: vi.fn(),\n } as unknown as InternalApi;\n\n afterEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"run\", () => {\n it(\"should correctly chunk a message that fits in 1 chunk\", async () => {\n // GIVEN\n const args = {\n derivationPath: DERIVATION_PATH,\n message: EXACT_ONE_CHUNK_MESSAGE,\n loggerFactory: mockLoggerFactory,\n };\n\n const dataStoreService = {\n merklizeChunks: vi.fn().mockReturnValue(MERKLE_ROOT),\n } as unknown as DataStoreService;\n\n const continueTaskFactory = () =>\n ({\n run: vi.fn().mockReturnValue(signatureResult),\n }) as unknown as ContinueTask;\n\n // WHEN\n const result = await new SendSignMessageTask(\n apiMock,\n args,\n dataStoreService,\n continueTaskFactory,\n ).run();\n\n // THEN\n expect(dataStoreService.merklizeChunks).toHaveBeenCalledWith(\n expect.any(DataStore),\n [Uint8Array.from(new Array(64).fill(0x61))],\n );\n expect(result).toStrictEqual(CommandResultFactory({ data: SIGNATURE }));\n });\n\n it(\"should correctly chunk a message that fits in 2 chunks\", async () => {\n // GIVEN\n const args = {\n derivationPath: DERIVATION_PATH,\n message: EXACT_TWO_CHUNKS_MESSAGE,\n loggerFactory: mockLoggerFactory,\n };\n\n const dataStoreService = {\n merklizeChunks: vi.fn().mockReturnValue(MERKLE_ROOT),\n } as unknown as DataStoreService;\n\n const continueTaskFactory = () =>\n ({\n run: vi.fn().mockReturnValue(signatureResult),\n }) as unknown as ContinueTask;\n\n // WHEN\n const result = await new SendSignMessageTask(\n apiMock,\n args,\n dataStoreService,\n continueTaskFactory,\n ).run();\n\n // THEN\n expect(dataStoreService.merklizeChunks).toHaveBeenCalledWith(\n expect.any(DataStore),\n [\n Uint8Array.from(new Array(64).fill(0x61)),\n Uint8Array.from(new Array(64).fill(0x61)),\n ],\n );\n expect(result).toStrictEqual(CommandResultFactory({ data: SIGNATURE }));\n });\n\n it(\"should return an error if the initial SignMessageCommand fails\", async () => {\n // GIVEN\n const args = {\n derivationPath: DERIVATION_PATH,\n message: EXACT_ONE_CHUNK_MESSAGE,\n loggerFactory: mockLoggerFactory,\n };\n\n const resultError = CommandResultFactory<Signature, void>({\n error: new InvalidStatusWordError(\"error\"),\n });\n const dataStoreService = {\n merklizeChunks: vi.fn().mockReturnValue(MERKLE_ROOT),\n } as unknown as DataStoreService;\n\n const continueTaskFactory = () =>\n ({\n run: vi.fn().mockReturnValue(resultError),\n }) as unknown as ContinueTask;\n\n // WHEN\n const result = await new SendSignMessageTask(\n apiMock,\n args,\n dataStoreService,\n continueTaskFactory,\n ).run();\n\n // THEN\n expect(result).toStrictEqual(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"error\"),\n }),\n );\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_device_management_kit", "import_constants", "import_DataStore", "import_SignMessageTask", "EXACT_ONE_CHUNK_MESSAGE", "EXACT_TWO_CHUNKS_MESSAGE", "DERIVATION_PATH", "MERKLE_ROOT", "SIGNATURE", "SIGNATURE_APDU", "mockLogger", "mockLoggerFactory", "_tag", "signatureResult", "apiMock", "args", "dataStoreService", "continueTaskFactory", "result", "resultError"]
|
|
7
7
|
}
|
package/lib/cjs/internal/di.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var a=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var M=Object.prototype.hasOwnProperty;var f=(o,e)=>{for(var t in e)a(o,t,{get:e[t],enumerable:!0})},S=(o,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of u(e))!M.call(o,r)&&r!==t&&a(o,r,{get:()=>e[r],enumerable:!(n=y(e,r))||n.enumerable});return o};var v=o=>S(a({},"__esModule",{value:!0}),o);var D={};f(D,{makeContainer:()=>C});module.exports=v(D);var s=require("inversify"),m=require("./data-store/di/dataStoreModule"),i=require("./externalTypes"),c=require("./merkle-tree/di/merkleTreeModule"),p=require("./psbt/di/psbtModule"),d=require("./use-cases/di/useCasesModule"),g=require("./wallet/di/walletModule"),l=require("./app-binder/di/appBinderModule");const C=({dmk:o,sessionId:e})=>{const t=new s.Container;return t.bind(i.externalTypes.Dmk).toConstantValue(o),t.bind(i.externalTypes.SessionId).toConstantValue(e),t.bind(i.externalTypes.DmkLoggerFactory).toConstantValue(n=>o.getLoggerFactory()(["SignerBtc",n])),t.loadSync((0,l.appBinderModuleFactory)(),(0,d.useCasesModuleFactory)(),(0,g.walletModuleFactory)(),(0,p.psbtModuleFactory)(),(0,m.dataStoreModuleFactory)(),(0,c.merkleTreeModuleFactory)()),t};0&&(module.exports={makeContainer});
|
|
2
2
|
//# sourceMappingURL=di.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/internal/di.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type DeviceManagementKit,\n type DeviceSessionId,\n} from \"@ledgerhq/device-management-kit\";\nimport { Container } from \"inversify\";\n\nimport { dataStoreModuleFactory } from \"@internal/data-store/di/dataStoreModule\";\nimport { externalTypes } from \"@internal/externalTypes\";\nimport { merkleTreeModuleFactory } from \"@internal/merkle-tree/di/merkleTreeModule\";\nimport { psbtModuleFactory } from \"@internal/psbt/di/psbtModule\";\nimport { useCasesModuleFactory } from \"@internal/use-cases/di/useCasesModule\";\nimport { walletModuleFactory } from \"@internal/wallet/di/walletModule\";\n\nimport { appBinderModuleFactory } from \"./app-binder/di/appBinderModule\";\n\ntype MakeContainerProps = {\n dmk: DeviceManagementKit;\n sessionId: DeviceSessionId;\n};\nexport const makeContainer = ({ dmk, sessionId }: MakeContainerProps) => {\n const container = new Container();\n\n container.bind<DeviceManagementKit>(externalTypes.Dmk).toConstantValue(dmk);\n container\n .bind<DeviceSessionId>(externalTypes.SessionId)\n .toConstantValue(sessionId);\n\n container.loadSync(\n appBinderModuleFactory(),\n useCasesModuleFactory(),\n walletModuleFactory(),\n psbtModuleFactory(),\n dataStoreModuleFactory(),\n merkleTreeModuleFactory(),\n );\n\n return container;\n};\n"],
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,mBAAAE,IAAA,eAAAC,EAAAH,
|
|
6
|
-
"names": ["di_exports", "__export", "makeContainer", "__toCommonJS", "import_inversify", "import_dataStoreModule", "import_externalTypes", "import_merkleTreeModule", "import_psbtModule", "import_useCasesModule", "import_walletModule", "import_appBinderModule", "dmk", "sessionId", "container"]
|
|
4
|
+
"sourcesContent": ["import {\n type DeviceManagementKit,\n type DeviceSessionId,\n type LoggerPublisherService,\n} from \"@ledgerhq/device-management-kit\";\nimport { Container } from \"inversify\";\n\nimport { dataStoreModuleFactory } from \"@internal/data-store/di/dataStoreModule\";\nimport { externalTypes } from \"@internal/externalTypes\";\nimport { merkleTreeModuleFactory } from \"@internal/merkle-tree/di/merkleTreeModule\";\nimport { psbtModuleFactory } from \"@internal/psbt/di/psbtModule\";\nimport { useCasesModuleFactory } from \"@internal/use-cases/di/useCasesModule\";\nimport { walletModuleFactory } from \"@internal/wallet/di/walletModule\";\n\nimport { appBinderModuleFactory } from \"./app-binder/di/appBinderModule\";\n\ntype MakeContainerProps = {\n dmk: DeviceManagementKit;\n sessionId: DeviceSessionId;\n};\n\nexport const makeContainer = ({ dmk, sessionId }: MakeContainerProps) => {\n const container = new Container();\n\n container.bind<DeviceManagementKit>(externalTypes.Dmk).toConstantValue(dmk);\n container\n .bind<DeviceSessionId>(externalTypes.SessionId)\n .toConstantValue(sessionId);\n\n container\n .bind<\n (tag: string) => LoggerPublisherService\n >(externalTypes.DmkLoggerFactory)\n .toConstantValue((tag: string) =>\n dmk.getLoggerFactory()([\"SignerBtc\", tag]),\n );\n\n container.loadSync(\n appBinderModuleFactory(),\n useCasesModuleFactory(),\n walletModuleFactory(),\n psbtModuleFactory(),\n dataStoreModuleFactory(),\n merkleTreeModuleFactory(),\n );\n\n return container;\n};\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,mBAAAE,IAAA,eAAAC,EAAAH,GAKA,IAAAI,EAA0B,qBAE1BC,EAAuC,mDACvCC,EAA8B,mCAC9BC,EAAwC,qDACxCC,EAAkC,wCAClCC,EAAsC,iDACtCC,EAAoC,4CAEpCC,EAAuC,2CAOhC,MAAMT,EAAgB,CAAC,CAAE,IAAAU,EAAK,UAAAC,CAAU,IAA0B,CACvE,MAAMC,EAAY,IAAI,YAEtB,OAAAA,EAAU,KAA0B,gBAAc,GAAG,EAAE,gBAAgBF,CAAG,EAC1EE,EACG,KAAsB,gBAAc,SAAS,EAC7C,gBAAgBD,CAAS,EAE5BC,EACG,KAEC,gBAAc,gBAAgB,EAC/B,gBAAiBC,GAChBH,EAAI,iBAAiB,EAAE,CAAC,YAAaG,CAAG,CAAC,CAC3C,EAEFD,EAAU,YACR,0BAAuB,KACvB,yBAAsB,KACtB,uBAAoB,KACpB,qBAAkB,KAClB,0BAAuB,KACvB,2BAAwB,CAC1B,EAEOA,CACT",
|
|
6
|
+
"names": ["di_exports", "__export", "makeContainer", "__toCommonJS", "import_inversify", "import_dataStoreModule", "import_externalTypes", "import_merkleTreeModule", "import_psbtModule", "import_useCasesModule", "import_walletModule", "import_appBinderModule", "dmk", "sessionId", "container", "tag"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var s=Object.defineProperty;var t=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var k=(r,o)=>{for(var m in o)s(r,m,{get:o[m],enumerable:!0})},l=(r,o,m,y)=>{if(o&&typeof o=="object"||typeof o=="function")for(let e of S(o))!g.call(r,e)&&e!==m&&s(r,e,{get:()=>o[e],enumerable:!(y=t(o,e))||y.enumerable});return r};var n=r=>l(s({},"__esModule",{value:!0}),r);var a={};k(a,{externalTypes:()=>D});module.exports=n(a);const D={Dmk:Symbol.for("Dmk"),SessionId:Symbol.for("SessionId"),DmkLoggerFactory:Symbol.for("DmkLoggerFactory")};0&&(module.exports={externalTypes});
|
|
2
2
|
//# sourceMappingURL=externalTypes.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/internal/externalTypes.ts"],
|
|
4
|
-
"sourcesContent": ["export const externalTypes = {\n Dmk: Symbol.for(\"Dmk\"),\n SessionId: Symbol.for(\"SessionId\"),\n};\n"],
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,mBAAAE,IAAA,eAAAC,EAAAH,GAAO,MAAME,EAAgB,CAC3B,IAAK,OAAO,IAAI,KAAK,EACrB,UAAW,OAAO,IAAI,WAAW,
|
|
4
|
+
"sourcesContent": ["export const externalTypes = {\n Dmk: Symbol.for(\"Dmk\"),\n SessionId: Symbol.for(\"SessionId\"),\n DmkLoggerFactory: Symbol.for(\"DmkLoggerFactory\"),\n};\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,mBAAAE,IAAA,eAAAC,EAAAH,GAAO,MAAME,EAAgB,CAC3B,IAAK,OAAO,IAAI,KAAK,EACrB,UAAW,OAAO,IAAI,WAAW,EACjC,iBAAkB,OAAO,IAAI,kBAAkB,CACjD",
|
|
6
6
|
"names": ["externalTypes_exports", "__export", "externalTypes", "__toCommonJS"]
|
|
7
7
|
}
|
package/lib/cjs/package.json
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{DefaultDescriptorTemplate as
|
|
1
|
+
import{DefaultDescriptorTemplate as a,DefaultWallet as c,WalletPolicy as m}from"../api/model/Wallet";import{DefaultSignerBtc as s}from"./DefaultSignerBtc";import{GetExtendedPublicKeyUseCase as r}from"./use-cases/get-extended-public-key/GetExtendedPublicKeyUseCase";import{GetMasterFingerprintUseCase as p}from"./use-cases/get-master-fingerprint/GetMasterFingerprintUseCase";import{RegisterWalletUseCase as g}from"./use-cases/register-wallet/RegisterWalletUseCase";import{SignPsbtUseCase as l}from"./use-cases/sign-psbt/SignPsbtUseCase";import{SignTransactionUseCase as u}from"./use-cases/sign-transaction/SignTransactionUseCase";import{SignMessageUseCase as d}from"./use-cases/sign-message/SignMessageUseCase";const i=()=>({debug:vi.fn(),info:vi.fn(),warn:vi.fn(),error:vi.fn(),subscribers:[]});describe("DefaultSignerBtc",()=>{it("should be defined",()=>{const e=new s({dmk:{},sessionId:"session-id"});expect(e).toBeDefined()}),it("should call getExtendedPublicKeyUseCase",()=>{vi.spyOn(r.prototype,"execute");const e="session-id",t={executeDeviceAction:vi.fn(),getLoggerFactory:vi.fn().mockReturnValue(i)};new s({dmk:t,sessionId:e}).getExtendedPublicKey("44'/0'/0'/0/0",{checkOnDevice:!0}),expect(r.prototype.execute).toHaveBeenCalled()}),it("should call getMasterFingerprintUseCase",()=>{vi.spyOn(p.prototype,"execute");const e="session-id",t={executeDeviceAction:vi.fn(),getLoggerFactory:vi.fn().mockReturnValue(i)};new s({dmk:t,sessionId:e}).getMasterFingerprint({skipOpenApp:!1}),expect(p.prototype.execute).toHaveBeenCalled()}),it("should call registerWalletUseCase",()=>{vi.spyOn(g.prototype,"execute");const e="session-id",t={executeDeviceAction:vi.fn(),getLoggerFactory:vi.fn().mockReturnValue(i)},n=new s({dmk:t,sessionId:e}),o=new m("My Multisig","wsh(sortedmulti(2,@0/**,@1/**))",["[f5acc2fd/48'/1'/0'/2']tpubXXX","tpubYYY"]);n.registerWallet(o,{skipOpenApp:!1}),expect(g.prototype.execute).toHaveBeenCalled()}),it("should call signMessageUseCase",()=>{vi.spyOn(d.prototype,"execute");const e="session-id",t={executeDeviceAction:vi.fn(),getLoggerFactory:vi.fn().mockReturnValue(i)};new s({dmk:t,sessionId:e}).signMessage("44'/0'/0'/0/0","message",{skipOpenApp:!1}),expect(d.prototype.execute).toHaveBeenCalled()}),it("should call signPsbtUseCase",()=>{vi.spyOn(l.prototype,"execute");const e="session-id",t={executeDeviceAction:vi.fn(),getLoggerFactory:vi.fn().mockReturnValue(i)};new s({dmk:t,sessionId:e}).signPsbt(new c("44'/0'/0'",a.NATIVE_SEGWIT),"",{skipOpenApp:!1}),expect(l.prototype.execute).toHaveBeenCalled()}),it("should call signTransactionUseCase",()=>{vi.spyOn(u.prototype,"execute");const e="session-id",t={executeDeviceAction:vi.fn(),getLoggerFactory:vi.fn().mockReturnValue(i)};new s({dmk:t,sessionId:e}).signTransaction(new c("44'/0'/0'",a.NATIVE_SEGWIT),"",{skipOpenApp:!1}),expect(u.prototype.execute).toHaveBeenCalled()})});
|
|
2
2
|
//# sourceMappingURL=DefaultSignerBtc.test.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/internal/DefaultSignerBtc.test.ts"],
|
|
4
|
-
"sourcesContent": ["import { type DeviceManagementKit } from \"@ledgerhq/device-management-kit\";\n\nimport {\n DefaultDescriptorTemplate,\n DefaultWallet,\n WalletPolicy,\n} from \"@api/model/Wallet\";\nimport { DefaultSignerBtc } from \"@internal/DefaultSignerBtc\";\nimport { GetExtendedPublicKeyUseCase } from \"@internal/use-cases/get-extended-public-key/GetExtendedPublicKeyUseCase\";\nimport { GetMasterFingerprintUseCase } from \"@internal/use-cases/get-master-fingerprint/GetMasterFingerprintUseCase\";\nimport { RegisterWalletUseCase } from \"@internal/use-cases/register-wallet/RegisterWalletUseCase\";\nimport { SignPsbtUseCase } from \"@internal/use-cases/sign-psbt/SignPsbtUseCase\";\nimport { SignTransactionUseCase } from \"@internal/use-cases/sign-transaction/SignTransactionUseCase\";\n\nimport { SignMessageUseCase } from \"./use-cases/sign-message/SignMessageUseCase\";\n\ndescribe(\"DefaultSignerBtc\", () => {\n it(\"should be defined\", () => {\n const signer = new DefaultSignerBtc({\n dmk: {} as DeviceManagementKit,\n sessionId: \"session-id\",\n });\n expect(signer).toBeDefined();\n });\n\n it(\"should call getExtendedPublicKeyUseCase\", () => {\n vi.spyOn(GetExtendedPublicKeyUseCase.prototype, \"execute\");\n const sessionId = \"session-id\";\n const dmk = {\n executeDeviceAction: vi.fn(),\n } as unknown as DeviceManagementKit;\n const signer = new DefaultSignerBtc({ dmk, sessionId });\n signer.getExtendedPublicKey(\"44'/0'/0'/0/0\", {\n checkOnDevice: true,\n });\n expect(GetExtendedPublicKeyUseCase.prototype.execute).toHaveBeenCalled();\n });\n\n it(\"should call getMasterFingerprintUseCase\", () => {\n vi.spyOn(GetMasterFingerprintUseCase.prototype, \"execute\");\n const sessionId = \"session-id\";\n const dmk = {\n executeDeviceAction: vi.fn(),\n } as unknown as DeviceManagementKit;\n const signer = new DefaultSignerBtc({ dmk, sessionId });\n signer.getMasterFingerprint({ skipOpenApp: false });\n expect(GetMasterFingerprintUseCase.prototype.execute).toHaveBeenCalled();\n });\n\n it(\"should call registerWalletUseCase\", () => {\n vi.spyOn(RegisterWalletUseCase.prototype, \"execute\");\n const sessionId = \"session-id\";\n const dmk = {\n executeDeviceAction: vi.fn(),\n } as unknown as DeviceManagementKit;\n const signer = new DefaultSignerBtc({ dmk, sessionId });\n const walletPolicy = new WalletPolicy(\n \"My Multisig\",\n \"wsh(sortedmulti(2,@0/**,@1/**))\",\n [\"[f5acc2fd/48'/1'/0'/2']tpubXXX\", \"tpubYYY\"],\n );\n signer.registerWallet(walletPolicy, { skipOpenApp: false });\n expect(RegisterWalletUseCase.prototype.execute).toHaveBeenCalled();\n });\n\n it(\"should call signMessageUseCase\", () => {\n vi.spyOn(SignMessageUseCase.prototype, \"execute\");\n const sessionId = \"session-id\";\n const dmk = {\n executeDeviceAction: vi.fn(),\n } as unknown as DeviceManagementKit;\n const derivationPath = \"44'/0'/0'/0/0\";\n const message = \"message\";\n const signer = new DefaultSignerBtc({ dmk, sessionId });\n signer.signMessage(derivationPath, message, { skipOpenApp: false });\n expect(SignMessageUseCase.prototype.execute).toHaveBeenCalled();\n });\n it(\"should call signPsbtUseCase\", () => {\n vi.spyOn(SignPsbtUseCase.prototype, \"execute\");\n const sessionId = \"session-id\";\n const dmk = {\n executeDeviceAction: vi.fn(),\n } as unknown as DeviceManagementKit;\n const signer = new DefaultSignerBtc({ dmk, sessionId });\n signer.signPsbt(\n new DefaultWallet(\"44'/0'/0'\", DefaultDescriptorTemplate.NATIVE_SEGWIT),\n \"\",\n { skipOpenApp: false },\n );\n expect(SignPsbtUseCase.prototype.execute).toHaveBeenCalled();\n });\n it(\"should call signTransactionUseCase\", () => {\n vi.spyOn(SignTransactionUseCase.prototype, \"execute\");\n const sessionId = \"session-id\";\n const dmk = {\n executeDeviceAction: vi.fn(),\n } as unknown as DeviceManagementKit;\n const signer = new DefaultSignerBtc({ dmk, sessionId });\n signer.signTransaction(\n new DefaultWallet(\"44'/0'/0'\", DefaultDescriptorTemplate.NATIVE_SEGWIT),\n \"\",\n { skipOpenApp: false },\n );\n expect(SignTransactionUseCase.prototype.execute).toHaveBeenCalled();\n });\n});\n"],
|
|
5
|
-
"mappings": "AAEA,OACE,6BAAAA,EACA,iBAAAC,EACA,gBAAAC,MACK,oBACP,OAAS,oBAAAC,MAAwB,6BACjC,OAAS,+BAAAC,MAAmC,0EAC5C,OAAS,+BAAAC,MAAmC,yEAC5C,OAAS,yBAAAC,MAA6B,4DACtC,OAAS,mBAAAC,MAAuB,gDAChC,OAAS,0BAAAC,MAA8B,8DAEvC,OAAS,sBAAAC,MAA0B,8CAEnC,SAAS,mBAAoB,IAAM,CACjC,GAAG,oBAAqB,IAAM,CAC5B,MAAMC,EAAS,
|
|
6
|
-
"names": ["DefaultDescriptorTemplate", "DefaultWallet", "WalletPolicy", "DefaultSignerBtc", "GetExtendedPublicKeyUseCase", "GetMasterFingerprintUseCase", "RegisterWalletUseCase", "SignPsbtUseCase", "SignTransactionUseCase", "SignMessageUseCase", "signer", "sessionId", "dmk", "walletPolicy"]
|
|
4
|
+
"sourcesContent": ["import { type DeviceManagementKit } from \"@ledgerhq/device-management-kit\";\n\nimport {\n DefaultDescriptorTemplate,\n DefaultWallet,\n WalletPolicy,\n} from \"@api/model/Wallet\";\nimport { DefaultSignerBtc } from \"@internal/DefaultSignerBtc\";\nimport { GetExtendedPublicKeyUseCase } from \"@internal/use-cases/get-extended-public-key/GetExtendedPublicKeyUseCase\";\nimport { GetMasterFingerprintUseCase } from \"@internal/use-cases/get-master-fingerprint/GetMasterFingerprintUseCase\";\nimport { RegisterWalletUseCase } from \"@internal/use-cases/register-wallet/RegisterWalletUseCase\";\nimport { SignPsbtUseCase } from \"@internal/use-cases/sign-psbt/SignPsbtUseCase\";\nimport { SignTransactionUseCase } from \"@internal/use-cases/sign-transaction/SignTransactionUseCase\";\n\nimport { SignMessageUseCase } from \"./use-cases/sign-message/SignMessageUseCase\";\n\nconst mockLoggerFactory = () => ({\n debug: vi.fn(),\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n subscribers: [],\n});\n\ndescribe(\"DefaultSignerBtc\", () => {\n it(\"should be defined\", () => {\n const signer = new DefaultSignerBtc({\n dmk: {} as DeviceManagementKit,\n sessionId: \"session-id\",\n });\n expect(signer).toBeDefined();\n });\n\n it(\"should call getExtendedPublicKeyUseCase\", () => {\n vi.spyOn(GetExtendedPublicKeyUseCase.prototype, \"execute\");\n const sessionId = \"session-id\";\n const dmk = {\n executeDeviceAction: vi.fn(),\n getLoggerFactory: vi.fn().mockReturnValue(mockLoggerFactory),\n } as unknown as DeviceManagementKit;\n const signer = new DefaultSignerBtc({ dmk, sessionId });\n signer.getExtendedPublicKey(\"44'/0'/0'/0/0\", {\n checkOnDevice: true,\n });\n expect(GetExtendedPublicKeyUseCase.prototype.execute).toHaveBeenCalled();\n });\n\n it(\"should call getMasterFingerprintUseCase\", () => {\n vi.spyOn(GetMasterFingerprintUseCase.prototype, \"execute\");\n const sessionId = \"session-id\";\n const dmk = {\n executeDeviceAction: vi.fn(),\n getLoggerFactory: vi.fn().mockReturnValue(mockLoggerFactory),\n } as unknown as DeviceManagementKit;\n const signer = new DefaultSignerBtc({ dmk, sessionId });\n signer.getMasterFingerprint({ skipOpenApp: false });\n expect(GetMasterFingerprintUseCase.prototype.execute).toHaveBeenCalled();\n });\n\n it(\"should call registerWalletUseCase\", () => {\n vi.spyOn(RegisterWalletUseCase.prototype, \"execute\");\n const sessionId = \"session-id\";\n const dmk = {\n executeDeviceAction: vi.fn(),\n getLoggerFactory: vi.fn().mockReturnValue(mockLoggerFactory),\n } as unknown as DeviceManagementKit;\n const signer = new DefaultSignerBtc({ dmk, sessionId });\n const walletPolicy = new WalletPolicy(\n \"My Multisig\",\n \"wsh(sortedmulti(2,@0/**,@1/**))\",\n [\"[f5acc2fd/48'/1'/0'/2']tpubXXX\", \"tpubYYY\"],\n );\n signer.registerWallet(walletPolicy, { skipOpenApp: false });\n expect(RegisterWalletUseCase.prototype.execute).toHaveBeenCalled();\n });\n\n it(\"should call signMessageUseCase\", () => {\n vi.spyOn(SignMessageUseCase.prototype, \"execute\");\n const sessionId = \"session-id\";\n const dmk = {\n executeDeviceAction: vi.fn(),\n getLoggerFactory: vi.fn().mockReturnValue(mockLoggerFactory),\n } as unknown as DeviceManagementKit;\n const derivationPath = \"44'/0'/0'/0/0\";\n const message = \"message\";\n const signer = new DefaultSignerBtc({ dmk, sessionId });\n signer.signMessage(derivationPath, message, { skipOpenApp: false });\n expect(SignMessageUseCase.prototype.execute).toHaveBeenCalled();\n });\n it(\"should call signPsbtUseCase\", () => {\n vi.spyOn(SignPsbtUseCase.prototype, \"execute\");\n const sessionId = \"session-id\";\n const dmk = {\n executeDeviceAction: vi.fn(),\n getLoggerFactory: vi.fn().mockReturnValue(mockLoggerFactory),\n } as unknown as DeviceManagementKit;\n const signer = new DefaultSignerBtc({ dmk, sessionId });\n signer.signPsbt(\n new DefaultWallet(\"44'/0'/0'\", DefaultDescriptorTemplate.NATIVE_SEGWIT),\n \"\",\n { skipOpenApp: false },\n );\n expect(SignPsbtUseCase.prototype.execute).toHaveBeenCalled();\n });\n it(\"should call signTransactionUseCase\", () => {\n vi.spyOn(SignTransactionUseCase.prototype, \"execute\");\n const sessionId = \"session-id\";\n const dmk = {\n executeDeviceAction: vi.fn(),\n getLoggerFactory: vi.fn().mockReturnValue(mockLoggerFactory),\n } as unknown as DeviceManagementKit;\n const signer = new DefaultSignerBtc({ dmk, sessionId });\n signer.signTransaction(\n new DefaultWallet(\"44'/0'/0'\", DefaultDescriptorTemplate.NATIVE_SEGWIT),\n \"\",\n { skipOpenApp: false },\n );\n expect(SignTransactionUseCase.prototype.execute).toHaveBeenCalled();\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["DefaultDescriptorTemplate", "DefaultWallet", "WalletPolicy", "DefaultSignerBtc", "GetExtendedPublicKeyUseCase", "GetMasterFingerprintUseCase", "RegisterWalletUseCase", "SignPsbtUseCase", "SignTransactionUseCase", "SignMessageUseCase", "mockLoggerFactory", "signer", "sessionId", "dmk", "walletPolicy"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var
|
|
1
|
+
var y=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var m=(s,e,t,n)=>{for(var r=n>1?void 0:n?S(e,t):e,p=s.length-1,l;p>=0;p--)(l=s[p])&&(r=(n?l(e,t,r):l(r))||r);return n&&r&&y(e,t,r),r},i=(s,e)=>(t,n)=>e(t,n,s);import{CallTaskInAppDeviceAction as g,SendCommandInAppDeviceAction as u,UserInteractionRequired as o}from"@ledgerhq/device-management-kit";import{inject as a,injectable as h}from"inversify";import{GetExtendedPublicKeyCommand as k}from"../app-binder/command/GetExtendedPublicKeyCommand";import{GetMasterFingerprintCommand as _}from"../app-binder/command/GetMasterFingerprintCommand";import{SignPsbtDeviceAction as D}from"../app-binder/device-action/SignPsbt/SignPsbtDeviceAction";import{SignTransactionDeviceAction as b}from"../app-binder/device-action/SignTransaction/SignTransactionDeviceAction";import{RegisterWalletTask as w}from"../app-binder/task/RegisterWalletTask";import{SendSignMessageTask as I}from"../app-binder/task/SignMessageTask";import{dataStoreTypes as P}from"../data-store/di/dataStoreTypes";import{externalTypes as d}from"../externalTypes";import{psbtTypes as v}from"../psbt/di/psbtTypes";import{walletTypes as A}from"../wallet/di/walletTypes";import{GetWalletAddressDeviceAction as f}from"./device-action/GetWalletAddress/GetWalletAddressDeviceAction";let c=class{constructor(e,t,n,r,p,l,T,M){this._dmk=e;this._sessionId=t;this._walletBuilder=n;this._walletSerializer=r;this._dataStoreService=p;this._psbtMapper=l;this._valueParser=T;this._dmkLoggerFactory=M}getExtendedPublicKey(e){return this._dmk.executeDeviceAction({sessionId:this._sessionId,deviceAction:new u({input:{command:new k(e),appName:"Bitcoin",requiredUserInteraction:e.checkOnDevice?o.VerifyAddress:o.None,skipOpenApp:e.skipOpenApp},logger:this._dmkLoggerFactory("GetExtendedPublicKeyCommand")})})}getMasterFingerprint(e){return this._dmk.executeDeviceAction({sessionId:this._sessionId,deviceAction:new u({input:{command:new _,appName:"Bitcoin",requiredUserInteraction:o.None,skipOpenApp:e.skipOpenApp},logger:this._dmkLoggerFactory("GetMasterFingerprintCommand")})})}signMessage(e){return this._dmk.executeDeviceAction({sessionId:this._sessionId,deviceAction:new g({input:{task:async t=>new I(t,{derivationPath:e.derivationPath,message:e.message,loggerFactory:this._dmkLoggerFactory},this._dataStoreService).run(),appName:"Bitcoin",requiredUserInteraction:o.SignPersonalMessage,skipOpenApp:e.skipOpenApp},logger:this._dmkLoggerFactory("SendSignMessageTask")})})}signPsbt(e){return this._dmk.executeDeviceAction({sessionId:this._sessionId,deviceAction:new D({input:{psbt:e.psbt,wallet:e.wallet,walletBuilder:this._walletBuilder,walletSerializer:this._walletSerializer,dataStoreService:this._dataStoreService,psbtMapper:this._psbtMapper,valueParser:this._valueParser,skipOpenApp:e.skipOpenApp},loggerFactory:this._dmkLoggerFactory})})}getWalletAddress(e){return this._dmk.executeDeviceAction({sessionId:this._sessionId,deviceAction:new f({input:{wallet:e.wallet,skipOpenApp:e.skipOpenApp,checkOnDevice:e.checkOnDevice,change:e.change,addressIndex:e.addressIndex,walletBuilder:this._walletBuilder,walletSerializer:this._walletSerializer,dataStoreService:this._dataStoreService},loggerFactory:this._dmkLoggerFactory})})}signTransaction(e){return this._dmk.executeDeviceAction({sessionId:this._sessionId,deviceAction:new b({input:{psbt:e.psbt,wallet:e.wallet,walletBuilder:this._walletBuilder,walletSerializer:this._walletSerializer,dataStoreService:this._dataStoreService,psbtMapper:this._psbtMapper,valueParser:this._valueParser,skipOpenApp:e.skipOpenApp},loggerFactory:this._dmkLoggerFactory})})}registerWallet(e){return this._dmk.executeDeviceAction({sessionId:this._sessionId,deviceAction:new g({input:{task:async t=>new w(t,{walletPolicy:e.wallet,loggerFactory:this._dmkLoggerFactory},this._walletBuilder,this._walletSerializer,this._dataStoreService).run(),appName:"Bitcoin",requiredUserInteraction:o.RegisterWallet,skipOpenApp:e.skipOpenApp},logger:this._dmkLoggerFactory("RegisterWalletTask")})})}};c=m([h(),i(0,a(d.Dmk)),i(1,a(d.SessionId)),i(2,a(A.WalletBuilder)),i(3,a(A.WalletSerializer)),i(4,a(P.DataStoreService)),i(5,a(v.PsbtMapper)),i(6,a(v.ValueParser)),i(7,a(d.DmkLoggerFactory))],c);export{c as BtcAppBinder};
|
|
2
2
|
//# sourceMappingURL=BtcAppBinder.js.map
|