@ledgerhq/device-signer-kit-solana 1.5.1 → 1.6.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/api/SignerSolanaBuilder.js +1 -1
- package/lib/cjs/api/SignerSolanaBuilder.js.map +3 -3
- package/lib/cjs/api/SolanaToolsBuilder.js +1 -1
- package/lib/cjs/api/SolanaToolsBuilder.js.map +3 -3
- package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js.map +1 -1
- package/lib/cjs/api/index.js +1 -1
- package/lib/cjs/api/index.js.map +2 -2
- package/lib/cjs/api/model/TransactionResolutionContext.js +1 -1
- package/lib/cjs/api/model/TransactionResolutionContext.js.map +3 -3
- package/lib/cjs/internal/DefaultSignerSolana.test.js +1 -1
- package/lib/cjs/internal/DefaultSignerSolana.test.js.map +3 -3
- package/lib/cjs/internal/DefaultSolanaTools.test.js +1 -1
- package/lib/cjs/internal/DefaultSolanaTools.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/SolanaAppBinder.js +1 -1
- package/lib/cjs/internal/app-binder/SolanaAppBinder.js.map +3 -3
- package/lib/cjs/internal/app-binder/SolanaAppBinder.test.js +1 -1
- package/lib/cjs/internal/app-binder/SolanaAppBinder.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/command/SignTransactionCommand.js +1 -1
- package/lib/cjs/internal/app-binder/command/SignTransactionCommand.js.map +3 -3
- package/lib/cjs/internal/app-binder/command/SignTransactionCommand.test.js +1 -1
- package/lib/cjs/internal/app-binder/command/SignTransactionCommand.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.js.map +3 -3
- package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.test.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.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 +2 -2
- package/lib/esm/api/SignerSolanaBuilder.js +1 -1
- package/lib/esm/api/SignerSolanaBuilder.js.map +3 -3
- package/lib/esm/api/SolanaToolsBuilder.js +1 -1
- package/lib/esm/api/SolanaToolsBuilder.js.map +3 -3
- package/lib/esm/api/app-binder/SignTransactionDeviceActionTypes.js.map +1 -1
- package/lib/esm/api/index.js +1 -1
- package/lib/esm/api/index.js.map +2 -2
- package/lib/esm/api/model/TransactionResolutionContext.js +1 -0
- package/lib/esm/api/model/TransactionResolutionContext.js.map +4 -4
- package/lib/esm/internal/DefaultSignerSolana.test.js +1 -1
- package/lib/esm/internal/DefaultSignerSolana.test.js.map +3 -3
- package/lib/esm/internal/DefaultSolanaTools.test.js +1 -1
- package/lib/esm/internal/DefaultSolanaTools.test.js.map +3 -3
- package/lib/esm/internal/app-binder/SolanaAppBinder.js +1 -1
- package/lib/esm/internal/app-binder/SolanaAppBinder.js.map +3 -3
- package/lib/esm/internal/app-binder/SolanaAppBinder.test.js +1 -1
- package/lib/esm/internal/app-binder/SolanaAppBinder.test.js.map +3 -3
- package/lib/esm/internal/app-binder/command/SignTransactionCommand.js +1 -1
- package/lib/esm/internal/app-binder/command/SignTransactionCommand.js.map +3 -3
- package/lib/esm/internal/app-binder/command/SignTransactionCommand.test.js +1 -1
- package/lib/esm/internal/app-binder/command/SignTransactionCommand.test.js.map +3 -3
- package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.js +1 -1
- package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.js.map +3 -3
- package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.test.js +1 -1
- package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.test.js.map +3 -3
- package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.js +1 -1
- package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.js.map +3 -3
- package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.test.js.map +3 -3
- package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.js +1 -1
- package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.js.map +3 -3
- package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.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 +2 -2
- package/lib/types/api/SignerSolanaBuilder.d.ts.map +1 -1
- package/lib/types/api/SolanaToolsBuilder.d.ts.map +1 -1
- package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts +1 -1
- package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts.map +1 -1
- package/lib/types/api/index.d.ts +1 -0
- package/lib/types/api/index.d.ts.map +1 -1
- package/lib/types/api/model/TransactionResolutionContext.d.ts +5 -0
- package/lib/types/api/model/TransactionResolutionContext.d.ts.map +1 -1
- package/lib/types/internal/app-binder/SolanaAppBinder.d.ts +3 -2
- package/lib/types/internal/app-binder/SolanaAppBinder.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/SignTransactionCommand.d.ts +2 -0
- package/lib/types/internal/app-binder/command/SignTransactionCommand.d.ts.map +1 -1
- package/lib/types/internal/app-binder/device-action/SignTransactionDeviceAction.d.ts +9 -3
- package/lib/types/internal/app-binder/device-action/SignTransactionDeviceAction.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/BuildTransactionContextTask.d.ts +3 -1
- package/lib/types/internal/app-binder/task/BuildTransactionContextTask.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/ProvideTransactionContextTask.d.ts +9 -6
- package/lib/types/internal/app-binder/task/ProvideTransactionContextTask.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 +7 -7
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var d=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var v=Object.prototype.hasOwnProperty;var E=(o,n)=>{for(var p in n)d(o,p,{get:n[p],enumerable:!0})},P=(o,n,p,c)=>{if(n&&typeof n=="object"||typeof n=="function")for(let s of f(n))!v.call(o,s)&&s!==p&&d(o,s,{get:()=>n[s],enumerable:!(c=x(n,s))||c.enumerable});return o};var R=o=>P(d({},"__esModule",{value:!0}),o);var _={};E(_,{SignTransactionDeviceAction:()=>h});module.exports=R(_);var e=require("@ledgerhq/device-management-kit"),l=require("purify-ts"),r=require("xstate"),i=require("../../../api/app-binder/SignTransactionDeviceActionTypes"),A=require("../../app-binder/command/GetAppConfigurationCommand"),C=require("../../app-binder/command/SignTransactionCommand"),m=require("../../app-binder/services/ApplicationChecker"),g=require("../../app-binder/services/TransactionInspector"),y=require("../../app-binder/task/BuildTransactionContextTask"),I=require("../../app-binder/task/ProvideTransactionContextTask"),D=require("../../app-binder/task/SendSignDataTask");class h extends e.XStateDeviceAction{_loggerFactory;constructor(n){super({input:n.input,inspect:n.inspect,logger:n.loggerFactory("SignTransactionDeviceAction")}),this._loggerFactory=n.loggerFactory}makeStateMachine(n){const{signTransaction:p,getAppConfig:c,buildContext:s,provideContext:T,inspectTransaction:S}=this.extractDependencies(n);return(0,r.setup)({types:{input:{},context:{},output:{}},actors:{openAppStateMachine:new e.OpenAppDeviceAction({input:{appName:"Solana"}}).makeStateMachine(n),getAppConfig:(0,r.fromPromise)(c),inspectTransaction:(0,r.fromPromise)(({input:t})=>S({serializedTransaction:t.serializedTransaction,resolutionContext:t.resolutionContext,rpcUrl:t.rpcUrl})),buildContext:(0,r.fromPromise)(s),provideContext:(0,r.fromPromise)(T),signTransaction:(0,r.fromPromise)(p)},guards:{noInternalError:({context:t})=>t._internalState.error===null,skipOpenApp:({context:t})=>t.input.transactionOptions?.skipOpenApp||!1,isSPLSupported:({context:t})=>new m.ApplicationChecker(n.getDeviceSessionState(),t._internalState.appConfig).withMinVersionExclusive("1.4.0").excludeDeviceModel(e.DeviceModelId.NANO_S).check(),isAnSPLTransaction:({context:t})=>t._internalState.inspectorResult?.transactionType===g.SolanaTransactionTypes.SPL,shouldSkipInspection:({context:t})=>t._internalState.error===null&&!!t.input.transactionOptions?.transactionResolutionContext},actions:{assignErrorFromEvent:(0,r.assign)({_internalState:t=>({...t.context._internalState,error:new e.UnknownDAError(t.event.error instanceof Error?t.event.error.message:String(t.event.error))})})}}).createMachine({id:"SignTransactionDeviceAction",initial:"InitialState",context:({input:t})=>({input:t,intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:i.signTransactionDAStateSteps.OPEN_APP},_internalState:{error:null,signature:null,appConfig:null,solanaTransactionContext:null,inspectorResult:null}}),states:{InitialState:{always:[{target:"GetAppConfig",guard:"skipOpenApp"},{target:"OpenAppDeviceAction"}]},OpenAppDeviceAction:{entry:(0,r.assign)({intermediateValue:()=>({requiredUserInteraction:e.UserInteractionRequired.None,step:i.signTransactionDAStateSteps.OPEN_APP})}),invoke:{id:"openAppStateMachine",src:"openAppStateMachine",input:()=>({appName:"Solana"}),onSnapshot:{actions:(0,r.assign)({intermediateValue:({event:t})=>({...t.snapshot.context.intermediateValue,step:i.signTransactionDAStateSteps.OPEN_APP})})},onDone:{target:"CheckOpenAppDeviceActionResult",actions:(0,r.assign)({_internalState:({event:t,context:a})=>t.output.caseOf({Right:()=>a._internalState,Left:u=>({...a._internalState,error:u})})})}}},CheckOpenAppDeviceActionResult:{always:[{target:"GetAppConfig",guard:"noInternalError"},{target:"Error"}]},GetAppConfig:{entry:(0,r.assign)({intermediateValue:()=>({requiredUserInteraction:e.UserInteractionRequired.None,step:i.signTransactionDAStateSteps.GET_APP_CONFIG})}),invoke:{id:"getAppConfig",src:"getAppConfig",onDone:{target:"GetAppConfigResultCheck",actions:(0,r.assign)({_internalState:({event:t,context:a})=>(0,e.isSuccessCommandResult)(t.output)?{...a._internalState,appConfig:t.output.data}:{...a._internalState,error:t.output.error}})},onError:{target:"Error",actions:"assignErrorFromEvent"}}},GetAppConfigResultCheck:{always:[{target:"InspectTransaction",guard:"noInternalError"},{target:"Error"}]},InspectTransaction:{entry:(0,r.assign)({intermediateValue:()=>({requiredUserInteraction:e.UserInteractionRequired.None,step:i.signTransactionDAStateSteps.INSPECT_TRANSACTION})}),invoke:{id:"inspectTransaction",src:"inspectTransaction",input:({context:t})=>({serializedTransaction:t.input.transaction,resolutionContext:t.input.transactionOptions?.transactionResolutionContext,rpcUrl:t.input.transactionOptions?.solanaRPCURL}),onDone:{target:"AfterInspect",actions:(0,r.assign)({_internalState:({context:t,event:a})=>({...t._internalState,inspectorResult:a.output})})},onError:{target:"SignTransaction"}}},AfterInspect:{always:[{target:"BuildContext",guard:"isAnSPLTransaction"},{target:"SignTransaction"}]},BuildContext:{entry:(0,r.assign)({intermediateValue:()=>({requiredUserInteraction:e.UserInteractionRequired.None,step:i.signTransactionDAStateSteps.BUILD_TRANSACTION_CONTEXT})}),invoke:{id:"buildContext",src:"buildContext",input:({context:t})=>{const a=t._internalState.inspectorResult?.data;return{contextModule:t.input.contextModule,loggerFactory:this._loggerFactory,options:{tokenAddress:a?.tokenAddress,createATA:a?.createATA,tokenInternalId:t.input.transactionOptions?.transactionResolutionContext?.tokenInternalId,templateId:t.input.transactionOptions?.transactionResolutionContext?.templateId}}},onDone:{target:"ProvideContext",actions:(0,r.assign)({_internalState:({event:t,context:a})=>({...a._internalState,solanaTransactionContext:{tlvDescriptor:t.output.tlvDescriptor,trustedNamePKICertificate:t.output.trustedNamePKICertificate,loadersResults:t.output.loadersResults}})})},onError:{target:"SignTransaction"}}},ProvideContext:{entry:(0,r.assign)({intermediateValue:()=>({requiredUserInteraction:e.UserInteractionRequired.None,step:i.signTransactionDAStateSteps.PROVIDE_TRANSACTION_CONTEXT})}),invoke:{id:"provideContext",src:"provideContext",input:({context:t})=>{if(!t._internalState.solanaTransactionContext)throw new e.UnknownDAError("Solana transaction context is not available");return{...t._internalState.solanaTransactionContext,transactionBytes:t.input.transaction,loggerFactory:this._loggerFactory}},onDone:{target:"SignTransaction"},onError:{target:"SignTransaction"}}},SignTransaction:{entry:(0,r.assign)({intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction,step:i.signTransactionDAStateSteps.SIGN_TRANSACTION}}),invoke:{id:"signTransaction",src:"signTransaction",input:({context:t})=>({derivationPath:t.input.derivationPath,serializedTransaction:t.input.transaction,userInputType:t.input.transactionOptions?.transactionResolutionContext?.userInputType}),onDone:{target:"SignTransactionResultCheck",actions:(0,r.assign)({_internalState:({event:t,context:a})=>{if(!(0,e.isSuccessCommandResult)(t.output))return{...a._internalState,error:t.output.error};const u=t.output.data.extract();return t.output.data.isJust()&&u instanceof Uint8Array?{...a._internalState,signature:u}:{...a._internalState,error:new e.UnknownDAError("No Signature available")}},intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:i.signTransactionDAStateSteps.SIGN_TRANSACTION}})},onError:{target:"Error",actions:"assignErrorFromEvent"}}},SignTransactionResultCheck:{always:[{guard:"noInternalError",target:"Success"},{target:"Error"}]},Success:{type:"final"},Error:{type:"final"}},output:({context:t})=>t._internalState.signature?(0,l.Right)(t._internalState.signature):(0,l.Left)(t._internalState.error||new e.UnknownDAError("No error or signature available"))})}extractDependencies(n){return{getAppConfig:async()=>n.sendCommand(new A.GetAppConfigurationCommand),buildContext:async t=>new y.BuildTransactionContextTask(n,t.input).run(),provideContext:async t=>new I.ProvideSolanaTransactionContextTask(n,t.input).run(),signTransaction:async t=>new D.SignDataTask(n,{commandFactory:a=>new C.SignTransactionCommand({serializedTransaction:a.chunkedData,more:a.more,extend:a.extend,userInputType:t.input.userInputType}),derivationPath:t.input.derivationPath,sendingData:t.input.serializedTransaction}).run(),inspectTransaction:async t=>Promise.resolve(new g.TransactionInspector(t.rpcUrl).inspectTransactionType(t.serializedTransaction,t.resolutionContext?.tokenAddress,t.resolutionContext?.createATA))}}}0&&(module.exports={SignTransactionDeviceAction});
|
|
2
2
|
//# sourceMappingURL=SignTransactionDeviceAction.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/device-action/SignTransactionDeviceAction.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type CommandErrorResult,\n type CommandResult,\n type DeviceActionStateMachine,\n DeviceModelId,\n type InternalApi,\n isSuccessCommandResult,\n OpenAppDeviceAction,\n type StateMachineTypes,\n UnknownDAError,\n UserInteractionRequired,\n XStateDeviceAction,\n} from \"@ledgerhq/device-management-kit\";\nimport { Left, type Maybe, 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 signTransactionDAStateSteps,\n} from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { type AppConfiguration } from \"@api/model/AppConfiguration\";\nimport { type Signature } from \"@api/model/Signature\";\nimport { type TransactionResolutionContext } from \"@api/model/TransactionResolutionContext\";\nimport { GetAppConfigurationCommand } from \"@internal/app-binder/command/GetAppConfigurationCommand\";\nimport { SignTransactionCommand } from \"@internal/app-binder/command/SignTransactionCommand\";\nimport { type SolanaAppErrorCodes } from \"@internal/app-binder/command/utils/SolanaApplicationErrors\";\nimport { ApplicationChecker } from \"@internal/app-binder/services/ApplicationChecker\";\nimport {\n SolanaTransactionTypes,\n TransactionInspector,\n} from \"@internal/app-binder/services/TransactionInspector\";\nimport { type TxInspectorResult } from \"@internal/app-binder/services/TransactionInspector\";\nimport {\n BuildTransactionContextTask,\n type BuildTransactionContextTaskArgs,\n type SolanaBuildContextResult,\n} from \"@internal/app-binder/task/BuildTransactionContextTask\";\nimport {\n ProvideSolanaTransactionContextTask,\n type ProvideSolanaTransactionContextTaskContext,\n} from \"@internal/app-binder/task/ProvideTransactionContextTask\";\nimport { SignDataTask } from \"@internal/app-binder/task/SendSignDataTask\";\n\nexport type MachineDependencies = {\n readonly getAppConfig: () => Promise<\n CommandResult<AppConfiguration, SolanaAppErrorCodes>\n >;\n readonly buildContext: (arg0: {\n input: BuildTransactionContextTaskArgs;\n }) => Promise<SolanaBuildContextResult>;\n readonly provideContext: (arg0: {\n input: ProvideSolanaTransactionContextTaskContext;\n }) => Promise<Maybe<CommandErrorResult<SolanaAppErrorCodes>>>;\n readonly inspectTransaction: (arg0: {\n serializedTransaction: Uint8Array;\n resolutionContext?: TransactionResolutionContext;\n rpcUrl?: string;\n }) => Promise<TxInspectorResult>;\n readonly signTransaction: (arg0: {\n input: {\n derivationPath: string;\n serializedTransaction: Uint8Array;\n };\n }) => Promise<\n CommandResult<Maybe<Signature | SolanaAppErrorCodes>, SolanaAppErrorCodes>\n >;\n};\n\nexport class SignTransactionDeviceAction extends XStateDeviceAction<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n> {\n makeStateMachine(\n internalApi: InternalApi,\n ): DeviceActionStateMachine<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n > {\n type types = StateMachineTypes<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n >;\n\n const {\n signTransaction,\n getAppConfig,\n buildContext,\n provideContext,\n inspectTransaction,\n } = this.extractDependencies(internalApi);\n\n return setup({\n types: {\n input: {} as types[\"input\"],\n context: {} as types[\"context\"],\n output: {} as types[\"output\"],\n },\n actors: {\n openAppStateMachine: new OpenAppDeviceAction({\n input: { appName: \"Solana\" },\n }).makeStateMachine(internalApi),\n\n getAppConfig: fromPromise(getAppConfig),\n inspectTransaction: fromPromise(\n ({\n input,\n }: {\n input: {\n serializedTransaction: Uint8Array;\n resolutionContext?: TransactionResolutionContext;\n rpcUrl?: string;\n };\n }) =>\n inspectTransaction({\n serializedTransaction: input.serializedTransaction,\n resolutionContext: input.resolutionContext,\n rpcUrl: input.rpcUrl,\n }),\n ),\n buildContext: fromPromise(buildContext),\n provideContext: fromPromise(provideContext),\n signTransaction: fromPromise(signTransaction),\n },\n guards: {\n noInternalError: ({ context }) => context._internalState.error === null,\n skipOpenApp: ({ context }) =>\n context.input.transactionOptions?.skipOpenApp || false,\n isSPLSupported: ({ context }) =>\n new ApplicationChecker(\n internalApi.getDeviceSessionState(),\n context._internalState.appConfig!,\n )\n .withMinVersionExclusive(\"1.4.0\")\n .excludeDeviceModel(DeviceModelId.NANO_S)\n .check(),\n isAnSPLTransaction: ({ context }) =>\n context._internalState.inspectorResult?.transactionType ===\n SolanaTransactionTypes.SPL,\n shouldSkipInspection: ({ context }) =>\n context._internalState.error === null &&\n !!context.input.transactionOptions?.transactionResolutionContext,\n },\n actions: {\n assignErrorFromEvent: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: new UnknownDAError(\n _.event[\"error\"] instanceof Error\n ? _.event[\"error\"].message\n : String(_.event[\"error\"]),\n ),\n }),\n }),\n },\n }).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QGUCWUB2AVATgQw1jwGMAXVAewwBEwA3VYsAQTMowDoBJDVcvADbJSeUmADEAbQAMAXUSgADhVh92CkAA9EARgDsAZg4AOAJzSAbNNOmATNZ0AWPRYA0IAJ67bLjgcfW-hYArNIGpsGOAL5R7miYuAREbFS0DEys5FTcvPxCImJSOvJIIMqqWRga2gj6RmaW1nYOzm6eujqdHNbWPsE6DXq2MXHo2PiEJJVpjCwpnADyimAYzIqKMxnz4hBUYByoGHQUANb7FMur68KiYACyJAAWh2AyJUoqalTViHrBthxbP5-I5HMZjH9gm0vLVpBCOBYnI5bBY9NI4RZjCMQPFxkkpuxNnNKhwAMKPMDEE5LFZrDb0WaZdgAJTgAFcBKQpHINOUvlVSjUdAZhX5HAY9JLbMEDAZMXp3DDOvoOKEXIZgsZ9JrorEcWNEpN5kSmdlyZTqZc6Sb5qzYByuZJirzPpUfrURUZgZKhjK5RDFYgtRxHDZTKCJZjEXosXrcYbktMGVsSQBxMCkOmkqgAM3QOz2ByOp32MEz62zGDzUDeLoq6kFui1plVpgMEIs9kldlsgdq0oBYU6xmkAwh0mCwWx8YmicJyeJ7A46fLikr1fEYBwOAoOA4igEohzu4Athwy1nc+ha6U+W7G7Vm632y4u3oe32dDYOGHzDLLMYEootOBqzgSqQLqanArpeVboHaDrmlS3LvGUroNqANS2D4eh+H8fSvl+eiOJ+tjBnYyKohY5hAtIuqjAkYHGpB8zLhmsHVghnJIScRSoXeGFaIg2GSnh-x-IRpjEX2-g6D+LigqioIyo4kQgYx+LMeki7ZDwsDLGQCbgRgBYYPshzHGcRb6ZSpBGfMN4fPW3wPmRqk-tR6KOE4Oids4pFDAiUmYjYI5gu26l4kaSbaVBOQ2YZTGVJu267vuh6kMeOBnocCV2Ul7COWhzkCphwnGO5pieXRPl+Qq7QII4Vghgp0jqqpOiRfZMWMqxzA5mIOB6QZjo8re6EuWVCAGCJ3SdtRAwxqOvYNZ0IohiEETBKYgHBHowpdQVEGxX1A1bsNtl8XW-LujNPhzSipiLSOOgrUqBgThw752GidHvpqBiHZpPUpku-WDRdZBSLY-ETaVQnTbNliPc9y19lYAKqbY4ZPa9XbDHGoHA-OJ0kgAQmyqACBAlZiJoXK7GZRaWfsABGlPU7TYD00VAmTQjEr9CYr3il+6JOJ+r0WKqQzmDNvk6P8sYMVFc7Hb15MczTVB01yW47nuB5HqeHDs1T2sYLrvNw7dfxyVqtii+Yo4kQ1QzSD+-w7VJIrGCEgOExp0UkxrS4AAo7gwEBgFz9OmeZxZWYokeoNHsekNbJXusibZfQMARO09b0dKiJjGCi6JkdtthOEDwfq6D2QRxQUcxzr3N66lhsZVlZ7Jy3qdt5bHeZzdD450Y+0VXRIo2K9fZ+wCdgRCKvkRPNddqzQLEks3rfp1xpA8Sh133lNrQe-K7ZURjiuS383Shk1fqK8Bgeq8ZNq7ynaft-Th-HydLDLO48XCXwhNfFwt9gifi8j+CcNhsbaklJ1d+3UQ6N04DOYmVB47MxLBwVQQct6jzPgjJWLYIT-DottbyOhSLBjBBERWmp5rGCnGgo629SZLmwfXEy+s0pG0yibIhH8HJjScmPKaFCTD4RoeGToksgQhgQTKCqkJHab0-jvXhRN+EAIpMhUhgkah7URICUIbVpA13FE9T8q8-DlxCJ2Jwjt2HaK0qHbIfCt6GItFdcaICZEuDktKdEaJbHhHoatFEwQnHSmIlJUMM1dR6gwBQaO8BSi+J0Tw-mfN4Y1AALTQkQMU+Jv4qm-gsKpTxIMdKcB4GoQQNwxCn1MYgZEpFMQcH0FjbCgECYq3QQ3RpHAaRXHpPk+GhTbpQkBMCZEnRtpDBCLAiwXoAhVR0BEtqeh6kYPGTxSZ1pdFUEPh0-mQpK7dEVhYaiGiXoGEltYMU1hPJi1WYcsZcUYIVivFAK5RTdChEcICEI5cwT7VUpqUiAwETEXbE0CE4JUEjK4V-Jc-y1yAv8VSYF7p7D3UiGicUyyXA7QCpPcxyItRDCcAczhODuHeKaYQEaozZk21ck1YwgIpK+QCOiJ6VVSILKUtjOe21NkBwxSyrF2RwbnQ5bZQlD4PqBWRoYNqwoXmxPDCGR2q8dq7WVvqYheS2UcApubdO6qpr+FCH0gItT7A2CsJEWBuca6aietQ7y-wfmsswRwPeg97VBOkQLCILYXBKzCJOF8ksujfW8nYKwU96IWvEQ0uK4bf7D3-uybiRiTgOoRqpUciLFb7T9GYSWDyy4oi1G1J6dTmX8MVVg-RW8K01FDELKwP0rHOFBKRD6X0bBNQeaEWeFhg3do4Lk20Jaj5lv7YgSIUkTBkQnB9FJe0HFhEBIrLU4IDCRBFou85WC2TECYLAbJUiyFmMQX0oYOEa751du9OECTMQyn+AEDh8qu23o4AAUS7puhA207AfpEgyn9fZDAtllH7awSaJTghiDEIAA */\n id: \"SignTransactionDeviceAction\",\n initial: \"InitialState\",\n context: ({ input }) => ({\n input,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.OPEN_APP,\n },\n _internalState: {\n error: null,\n signature: null,\n appConfig: null,\n solanaTransactionContext: null,\n inspectorResult: null,\n },\n }),\n states: {\n InitialState: {\n always: [\n { target: \"GetAppConfig\", guard: \"skipOpenApp\" },\n { target: \"OpenAppDeviceAction\" },\n ],\n },\n OpenAppDeviceAction: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.OPEN_APP,\n }),\n }),\n invoke: {\n id: \"openAppStateMachine\",\n src: \"openAppStateMachine\",\n input: () => ({ appName: \"Solana\" }),\n onSnapshot: {\n actions: assign({\n intermediateValue: ({ event }) => ({\n ...event.snapshot.context.intermediateValue,\n step: signTransactionDAStateSteps.OPEN_APP,\n }),\n }),\n },\n onDone: {\n target: \"CheckOpenAppDeviceActionResult\",\n actions: assign({\n _internalState: ({ event, context }) =>\n event.output.caseOf({\n Right: () => context._internalState,\n Left: (error) => ({\n ...context._internalState,\n error,\n }),\n }),\n }),\n },\n },\n },\n CheckOpenAppDeviceActionResult: {\n always: [\n { target: \"GetAppConfig\", guard: \"noInternalError\" },\n { target: \"Error\" },\n ],\n },\n GetAppConfig: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.GET_APP_CONFIG,\n }),\n }),\n invoke: {\n id: \"getAppConfig\",\n src: \"getAppConfig\",\n onDone: {\n target: \"GetAppConfigResultCheck\",\n actions: assign({\n _internalState: ({ event, context }) =>\n isSuccessCommandResult(event.output)\n ? {\n ...context._internalState,\n appConfig: event.output.data,\n }\n : { ...context._internalState, error: event.output.error },\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n GetAppConfigResultCheck: {\n always: [\n { target: \"InspectTransaction\", guard: \"noInternalError\" },\n { target: \"Error\" },\n ],\n },\n InspectTransaction: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.INSPECT_TRANSACTION,\n }),\n }),\n invoke: {\n id: \"inspectTransaction\",\n src: \"inspectTransaction\",\n\n input: ({ context }) => ({\n serializedTransaction: context.input.transaction,\n resolutionContext:\n context.input.transactionOptions?.transactionResolutionContext,\n rpcUrl: context.input.transactionOptions?.solanaRPCURL,\n }),\n onDone: {\n target: \"AfterInspect\",\n actions: assign({\n _internalState: ({ context, event }) => ({\n ...context._internalState,\n inspectorResult: event.output,\n }),\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n AfterInspect: {\n always: [\n { target: \"BuildContext\", guard: \"isAnSPLTransaction\" },\n { target: \"SignTransaction\", guard: \"noInternalError\" },\n { target: \"Error\" },\n ],\n },\n BuildContext: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.BUILD_TRANSACTION_CONTEXT,\n }),\n }),\n invoke: {\n id: \"buildContext\",\n src: \"buildContext\",\n input: ({ context }) => {\n const inspectorData =\n context._internalState.inspectorResult?.data;\n return {\n contextModule: context.input.contextModule,\n options: {\n tokenAddress: inspectorData?.tokenAddress,\n createATA: inspectorData?.createATA,\n tokenInternalId:\n context.input.transactionOptions\n ?.transactionResolutionContext?.tokenInternalId,\n templateId:\n context.input.transactionOptions\n ?.transactionResolutionContext?.templateId,\n },\n };\n },\n onDone: {\n target: \"ProvideContext\",\n actions: [\n assign({\n _internalState: ({ event, context }) => ({\n ...context._internalState,\n solanaTransactionContext: {\n tlvDescriptor: event.output.tlvDescriptor,\n trustedNamePKICertificate:\n event.output.trustedNamePKICertificate,\n loadersResults: event.output.loadersResults,\n },\n }),\n }),\n ],\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n ProvideContext: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.PROVIDE_TRANSACTION_CONTEXT,\n }),\n }),\n invoke: {\n id: \"provideContext\",\n src: \"provideContext\",\n input: ({ context }) => {\n if (!context._internalState.solanaTransactionContext) {\n throw new UnknownDAError(\n \"Solana transaction context is not available\",\n );\n }\n return {\n ...context._internalState.solanaTransactionContext,\n transactionBytes: context.input.transaction,\n };\n },\n onDone: {\n target: \"ProvideContextResultCheck\",\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n ProvideContextResultCheck: {\n always: [\n { target: \"SignTransaction\", guard: \"noInternalError\" },\n { target: \"Error\" },\n ],\n },\n SignTransaction: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n step: signTransactionDAStateSteps.SIGN_TRANSACTION,\n },\n }),\n invoke: {\n id: \"signTransaction\",\n src: \"signTransaction\",\n input: ({ context }) => {\n return {\n derivationPath: context.input.derivationPath,\n serializedTransaction: context.input.transaction,\n };\n },\n onDone: {\n target: \"SignTransactionResultCheck\",\n actions: [\n assign({\n _internalState: ({ event, context }) => {\n if (!isSuccessCommandResult(event.output))\n return {\n ...context._internalState,\n error: event.output.error,\n };\n\n const data = event.output.data.extract();\n if (\n event.output.data.isJust() &&\n data instanceof Uint8Array\n )\n return {\n ...context._internalState,\n signature: data,\n };\n\n return {\n ...context._internalState,\n error: new UnknownDAError(\"No Signature available\"),\n };\n },\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.SIGN_TRANSACTION,\n },\n }),\n ],\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n SignTransactionResultCheck: {\n always: [\n { guard: \"noInternalError\", target: \"Success\" },\n { target: \"Error\" },\n ],\n },\n Success: { type: \"final\" },\n Error: { type: \"final\" },\n },\n output: ({ context }) =>\n context._internalState.signature\n ? Right(context._internalState.signature)\n : Left(\n context._internalState.error ||\n new UnknownDAError(`No error or signature available`),\n ),\n });\n }\n\n extractDependencies(internalApi: InternalApi): MachineDependencies {\n const getAppConfig = async () =>\n internalApi.sendCommand(new GetAppConfigurationCommand());\n\n const buildContext = async (arg0: {\n input: BuildTransactionContextTaskArgs;\n }) => new BuildTransactionContextTask(internalApi, arg0.input).run();\n\n const provideContext = async (arg0: {\n input: ProvideSolanaTransactionContextTaskContext;\n }) =>\n new ProvideSolanaTransactionContextTask(internalApi, arg0.input).run();\n\n const inspectTransaction = async (arg0: {\n serializedTransaction: Uint8Array;\n resolutionContext?: TransactionResolutionContext;\n rpcUrl?: string;\n }) =>\n Promise.resolve(\n new TransactionInspector(arg0.rpcUrl).inspectTransactionType(\n arg0.serializedTransaction,\n arg0.resolutionContext?.tokenAddress,\n arg0.resolutionContext?.createATA,\n ),\n );\n\n const signTransaction = async (arg0: {\n input: {\n derivationPath: string;\n serializedTransaction: Uint8Array;\n };\n }) =>\n new SignDataTask(internalApi, {\n commandFactory: (args) =>\n new SignTransactionCommand({\n serializedTransaction: args.chunkedData,\n more: args.more,\n extend: args.extend,\n }),\n derivationPath: arg0.input.derivationPath,\n sendingData: arg0.input.serializedTransaction,\n }).run();\n\n return {\n getAppConfig,\n buildContext,\n provideContext,\n signTransaction,\n inspectTransaction,\n };\n }\n}\n"],
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,iCAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,
|
|
6
|
-
"names": ["SignTransactionDeviceAction_exports", "__export", "SignTransactionDeviceAction", "__toCommonJS", "import_device_management_kit", "import_purify_ts", "import_xstate", "import_SignTransactionDeviceActionTypes", "import_GetAppConfigurationCommand", "import_SignTransactionCommand", "import_ApplicationChecker", "import_TransactionInspector", "import_BuildTransactionContextTask", "import_ProvideTransactionContextTask", "import_SendSignDataTask", "internalApi", "signTransaction", "getAppConfig", "buildContext", "provideContext", "inspectTransaction", "input", "context", "_", "event", "error", "inspectorData", "data", "arg0"
|
|
4
|
+
"sourcesContent": ["import {\n type CommandErrorResult,\n type CommandResult,\n type DeviceActionStateMachine,\n DeviceModelId,\n type InternalApi,\n isSuccessCommandResult,\n type LoggerPublisherService,\n OpenAppDeviceAction,\n type StateMachineTypes,\n UnknownDAError,\n UserInteractionRequired,\n XStateDeviceAction,\n} from \"@ledgerhq/device-management-kit\";\nimport { Left, type Maybe, 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 signTransactionDAStateSteps,\n} from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { type AppConfiguration } from \"@api/model/AppConfiguration\";\nimport { type Signature } from \"@api/model/Signature\";\nimport {\n type TransactionResolutionContext,\n type UserInputType,\n} from \"@api/model/TransactionResolutionContext\";\nimport { GetAppConfigurationCommand } from \"@internal/app-binder/command/GetAppConfigurationCommand\";\nimport { SignTransactionCommand } from \"@internal/app-binder/command/SignTransactionCommand\";\nimport { type SolanaAppErrorCodes } from \"@internal/app-binder/command/utils/SolanaApplicationErrors\";\nimport { ApplicationChecker } from \"@internal/app-binder/services/ApplicationChecker\";\nimport {\n SolanaTransactionTypes,\n TransactionInspector,\n} from \"@internal/app-binder/services/TransactionInspector\";\nimport { type TxInspectorResult } from \"@internal/app-binder/services/TransactionInspector\";\nimport {\n BuildTransactionContextTask,\n type BuildTransactionContextTaskArgs,\n type SolanaBuildContextResult,\n} from \"@internal/app-binder/task/BuildTransactionContextTask\";\nimport {\n ProvideSolanaTransactionContextTask,\n type ProvideSolanaTransactionContextTaskArgs,\n} from \"@internal/app-binder/task/ProvideTransactionContextTask\";\nimport { SignDataTask } from \"@internal/app-binder/task/SendSignDataTask\";\n\nexport type MachineDependencies = {\n readonly getAppConfig: () => Promise<\n CommandResult<AppConfiguration, SolanaAppErrorCodes>\n >;\n readonly buildContext: (arg0: {\n input: BuildTransactionContextTaskArgs;\n }) => Promise<SolanaBuildContextResult>;\n readonly provideContext: (arg0: {\n input: ProvideSolanaTransactionContextTaskArgs;\n }) => Promise<Maybe<CommandErrorResult<SolanaAppErrorCodes>>>;\n readonly inspectTransaction: (arg0: {\n serializedTransaction: Uint8Array;\n resolutionContext?: TransactionResolutionContext;\n rpcUrl?: string;\n }) => Promise<TxInspectorResult>;\n readonly signTransaction: (arg0: {\n input: {\n derivationPath: string;\n serializedTransaction: Uint8Array;\n };\n }) => Promise<\n CommandResult<Maybe<Signature | SolanaAppErrorCodes>, SolanaAppErrorCodes>\n >;\n};\n\nexport class SignTransactionDeviceAction extends XStateDeviceAction<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n> {\n private readonly _loggerFactory: (tag: string) => LoggerPublisherService;\n\n constructor(args: {\n input: SignTransactionDAInput;\n inspect?: boolean;\n loggerFactory: (tag: string) => LoggerPublisherService;\n }) {\n super({\n input: args.input,\n inspect: args.inspect,\n logger: args.loggerFactory(\"SignTransactionDeviceAction\"),\n });\n this._loggerFactory = args.loggerFactory;\n }\n\n makeStateMachine(\n internalApi: InternalApi,\n ): DeviceActionStateMachine<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n > {\n type types = StateMachineTypes<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n >;\n\n const {\n signTransaction,\n getAppConfig,\n buildContext,\n provideContext,\n inspectTransaction,\n } = this.extractDependencies(internalApi);\n\n return setup({\n types: {\n input: {} as types[\"input\"],\n context: {} as types[\"context\"],\n output: {} as types[\"output\"],\n },\n actors: {\n openAppStateMachine: new OpenAppDeviceAction({\n input: { appName: \"Solana\" },\n }).makeStateMachine(internalApi),\n getAppConfig: fromPromise(getAppConfig),\n inspectTransaction: fromPromise(\n ({\n input,\n }: {\n input: {\n serializedTransaction: Uint8Array;\n resolutionContext?: TransactionResolutionContext;\n rpcUrl?: string;\n };\n }) =>\n inspectTransaction({\n serializedTransaction: input.serializedTransaction,\n resolutionContext: input.resolutionContext,\n rpcUrl: input.rpcUrl,\n }),\n ),\n buildContext: fromPromise(buildContext),\n provideContext: fromPromise(provideContext),\n signTransaction: fromPromise(signTransaction),\n },\n guards: {\n noInternalError: ({ context }) => context._internalState.error === null,\n skipOpenApp: ({ context }) =>\n context.input.transactionOptions?.skipOpenApp || false,\n isSPLSupported: ({ context }) =>\n new ApplicationChecker(\n internalApi.getDeviceSessionState(),\n context._internalState.appConfig!,\n )\n .withMinVersionExclusive(\"1.4.0\")\n .excludeDeviceModel(DeviceModelId.NANO_S)\n .check(),\n isAnSPLTransaction: ({ context }) =>\n context._internalState.inspectorResult?.transactionType ===\n SolanaTransactionTypes.SPL,\n shouldSkipInspection: ({ context }) =>\n context._internalState.error === null &&\n !!context.input.transactionOptions?.transactionResolutionContext,\n },\n actions: {\n assignErrorFromEvent: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: new UnknownDAError(\n _.event[\"error\"] instanceof Error\n ? _.event[\"error\"].message\n : String(_.event[\"error\"]),\n ),\n }),\n }),\n },\n }).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QGUCWUB2AVATgQw1jwGMAXVAewwBEwA3VYsAQTMowDoBJDVcvADbJSeUmADEAbQAMAXUSgADhVh92CkAA9EAJgCMADg4BWAGw7jAGhABPRHr3SA7Bx0BONwGYALNOPfvUz1jHQBfUOs0TFwCIjYqWgYmVnIqbl5+IRExKT15JBBlVVSMDW0EfSMzC2s7BDdvHQ5pby9ff0DgsIiQKOx8QhISxMYWeM4AeUUwDGZFRRHk8fEIKjAOVAw6CgBrdYpp2fnhUTAAWRIAC02wGXylFTUqMsQnN1MON2lzK1tEN0MJicOicTlMoM8LXe4Ui6H6sSG7EWYxKHAAwpcwMQdlMZnMFvRRil2AAlOAAVwEpCkcg0RSepQK5T0nmMRmkwR+tX+3iMgVM0mc+j0OgM3Vh0QGcWGhKWqIxWJxh3xyOJVDJsEp1MkeTpjxKLwQLLZzU5NT+CAMeg4rTcBneLN8bx8MN6cJig3GqvGHAA4mBSPi0VQAGboFZrDZbXbrGCB+bBjBhqB3PXFdRM+wGUzeVymaq-OqOMWfe0BHyeNxOPSmV19D3SpGylHsP0BoOh8NgHA4Cg4DiKASiEN9gC2HDjHaT6FTBXpBszRuzuZ0+a5Fr0Hk+HjL2YsLNMtZ69aliISzbVnH98cUieTGq1CuxNPuhX1GdA5R0nh0TRapgMJxC3sBwmgMMVwU8QC3l5Yw63dU8vQvH1ryne8KSpJ8dlyV95w-LRdB-P9AkA4CEB8a0qxzYwnE8H5jW8eDJQRJCkhbNIeFgaYyAbM8MAjDB1k2bY9ijLisVIXjxlnB502eRdRS+Dgc2+c0i2kBoODBUUDA0ytqyPCV4U9GU2MvdJxJ4xCSnEbte37QdhzHMTuMk6z2Bkt85MZT9dHtaRlN8dc6kCALvDBbwzA0jTwqApjjMbc8zJ9ZgQzEHBONcl80wZQ0fyCLSKyA7kjRZa1+UFYFQLFeKpNMokUrS7tMoknCcoXXzyNXa1aO8Txio3SFjC0jwfD8AIghCWr3KShrUVS9KWrIKQdFw995M6-KeqKsiBSaSLIUMYwvgaUFppY+q5VbAAhclUAECBEzETRqVWQSoxE9YACM7oep6wBezy8I2gjyKcbMbQMPqBqLBxPA4HxzD0RpaKhQy3WYkym2S1Fbvux6qGe6k7L7Ach1IEccHHH78f+wHaTndafNB-qId5aGyOBAK3GMQ7aM3KD9HOrHZqutIAAVewYCAwDp17I2EmMByl1AZbloGmcNPrRQRr5gpA8EOHA1daOghoDDg48EIu7G5tbSWKGl2XCYB4me1JxyKecxQVbVl36bW7ytZ-IxK1Usi90+dwaLtAWxT0YXEpoZDUQdp25YfTDMWfDWg8XcKeYR47+rIhwgOaVoxo6SbxQxhK+O9VPfedjAicz0gsLaxm886gvhtZLwYfsQVcz15HvzjoWrcxpPG9bE8baoAShOjUTVBnvjc9yxdeZ0XN-AAoejVXIxVx0vSqxrROG5T+frZF-iSYc8nKfHdf6+khnZO3zrd-3kij6gXhkFZGjhwpWhzNfVids0gLwfu3TuW8OqgxjsNNwlRAGeAcAjMUTgOQjwAryKBl12KcDgUnBB2dsI6kDj-FBbw0EYNLqufuuDpCsnATWRiroMAUBlvAAo5Cb443wsDZm5QAC0pgSpSOaIKeRCiFFOGIbbMWnAeBqEECcMQ7V8LlEaCVRwhs3heErCCSErR0ZCOgWojguIjgEhESDMRWtBSfHDiVMsrhRpmNRpYlRotSHoiofYlUt91QYVILokGzJ-zKVIiVBoAV3CmPQX46E08P4kPMqhBMnYoDRPEfYfwRhB6lyhMpH8wIALHQtpbIydVVFBNybefJlDFSFMNDoIUrhDCALAVpGsgpi6XysffWe4T1GEFco05xmsFLGBFJ8Q+5SnC5lMPlap3xBYGACcnJxnAFrNWmRJTpi4sE1kKhzQxIo3CDIFH4Lwoy9lzzSHjP6-sondzoeUHwUMjYinKV4XpDyRkGU8C8yZHA06qxbkTM5m0PC5muRuBwPUfFpIsRkhpM19kwM4DCv2rdXbtOxAi0GB0Pg7RuYeI2EEtkbLFLszJsy8W2Oscglx+c7QfFFICwxe8jAshNqubZTLIUHI4By0kkSsLkvKMYXeJhDGQnhvoY6e9FU82cGMjeNignIHJMQJgsABHf2QeUAUtKoYlxVdIUOEEPC0QuW4CV+KOAAFF3Y4HlYgK1HwbWAL3vDMwkVumRV0ofcI4QgA */\n id: \"SignTransactionDeviceAction\",\n initial: \"InitialState\",\n context: ({ input }) => ({\n input,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.OPEN_APP,\n },\n _internalState: {\n error: null,\n signature: null,\n appConfig: null,\n solanaTransactionContext: null,\n inspectorResult: null,\n },\n }),\n states: {\n InitialState: {\n always: [\n { target: \"GetAppConfig\", guard: \"skipOpenApp\" },\n { target: \"OpenAppDeviceAction\" },\n ],\n },\n OpenAppDeviceAction: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.OPEN_APP,\n }),\n }),\n invoke: {\n id: \"openAppStateMachine\",\n src: \"openAppStateMachine\",\n input: () => ({ appName: \"Solana\" }),\n onSnapshot: {\n actions: assign({\n intermediateValue: ({ event }) => ({\n ...event.snapshot.context.intermediateValue,\n step: signTransactionDAStateSteps.OPEN_APP,\n }),\n }),\n },\n onDone: {\n target: \"CheckOpenAppDeviceActionResult\",\n actions: assign({\n _internalState: ({ event, context }) =>\n event.output.caseOf({\n Right: () => context._internalState,\n Left: (error) => ({\n ...context._internalState,\n error,\n }),\n }),\n }),\n },\n },\n },\n CheckOpenAppDeviceActionResult: {\n always: [\n { target: \"GetAppConfig\", guard: \"noInternalError\" },\n { target: \"Error\" },\n ],\n },\n GetAppConfig: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.GET_APP_CONFIG,\n }),\n }),\n invoke: {\n id: \"getAppConfig\",\n src: \"getAppConfig\",\n onDone: {\n target: \"GetAppConfigResultCheck\",\n actions: assign({\n _internalState: ({ event, context }) =>\n isSuccessCommandResult(event.output)\n ? {\n ...context._internalState,\n appConfig: event.output.data,\n }\n : { ...context._internalState, error: event.output.error },\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n GetAppConfigResultCheck: {\n always: [\n { target: \"InspectTransaction\", guard: \"noInternalError\" },\n { target: \"Error\" },\n ],\n },\n InspectTransaction: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.INSPECT_TRANSACTION,\n }),\n }),\n invoke: {\n id: \"inspectTransaction\",\n src: \"inspectTransaction\",\n\n input: ({ context }) => ({\n serializedTransaction: context.input.transaction,\n resolutionContext:\n context.input.transactionOptions?.transactionResolutionContext,\n rpcUrl: context.input.transactionOptions?.solanaRPCURL,\n }),\n onDone: {\n target: \"AfterInspect\",\n actions: assign({\n _internalState: ({ context, event }) => ({\n ...context._internalState,\n inspectorResult: event.output,\n }),\n }),\n },\n onError: {\n target: \"SignTransaction\",\n },\n },\n },\n AfterInspect: {\n always: [\n { target: \"BuildContext\", guard: \"isAnSPLTransaction\" },\n { target: \"SignTransaction\" },\n ],\n },\n BuildContext: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.BUILD_TRANSACTION_CONTEXT,\n }),\n }),\n invoke: {\n id: \"buildContext\",\n src: \"buildContext\",\n input: ({ context }) => {\n const inspectorData =\n context._internalState.inspectorResult?.data;\n return {\n contextModule: context.input.contextModule,\n loggerFactory: this._loggerFactory,\n options: {\n tokenAddress: inspectorData?.tokenAddress,\n createATA: inspectorData?.createATA,\n tokenInternalId:\n context.input.transactionOptions\n ?.transactionResolutionContext?.tokenInternalId,\n templateId:\n context.input.transactionOptions\n ?.transactionResolutionContext?.templateId,\n },\n };\n },\n onDone: {\n target: \"ProvideContext\",\n actions: assign({\n _internalState: ({ event, context }) => ({\n ...context._internalState,\n solanaTransactionContext: {\n tlvDescriptor: event.output.tlvDescriptor,\n trustedNamePKICertificate:\n event.output.trustedNamePKICertificate,\n loadersResults: event.output.loadersResults,\n },\n }),\n }),\n },\n onError: {\n target: \"SignTransaction\",\n },\n },\n },\n ProvideContext: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.PROVIDE_TRANSACTION_CONTEXT,\n }),\n }),\n invoke: {\n id: \"provideContext\",\n src: \"provideContext\",\n input: ({ context }) => {\n if (!context._internalState.solanaTransactionContext) {\n throw new UnknownDAError(\n \"Solana transaction context is not available\",\n );\n }\n return {\n ...context._internalState.solanaTransactionContext,\n transactionBytes: context.input.transaction,\n loggerFactory: this._loggerFactory,\n };\n },\n onDone: {\n target: \"SignTransaction\",\n },\n onError: {\n target: \"SignTransaction\",\n },\n },\n },\n SignTransaction: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n step: signTransactionDAStateSteps.SIGN_TRANSACTION,\n },\n }),\n invoke: {\n id: \"signTransaction\",\n src: \"signTransaction\",\n input: ({ context }) => {\n return {\n derivationPath: context.input.derivationPath,\n serializedTransaction: context.input.transaction,\n userInputType:\n context.input.transactionOptions?.transactionResolutionContext\n ?.userInputType,\n };\n },\n onDone: {\n target: \"SignTransactionResultCheck\",\n actions: assign({\n _internalState: ({ event, context }) => {\n if (!isSuccessCommandResult(event.output))\n return {\n ...context._internalState,\n error: event.output.error,\n };\n\n const data = event.output.data.extract();\n if (event.output.data.isJust() && data instanceof Uint8Array)\n return {\n ...context._internalState,\n signature: data,\n };\n\n return {\n ...context._internalState,\n error: new UnknownDAError(\"No Signature available\"),\n };\n },\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.SIGN_TRANSACTION,\n },\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n SignTransactionResultCheck: {\n always: [\n { guard: \"noInternalError\", target: \"Success\" },\n { target: \"Error\" },\n ],\n },\n Success: { type: \"final\" },\n Error: { type: \"final\" },\n },\n output: ({ context }) =>\n context._internalState.signature\n ? Right(context._internalState.signature)\n : Left(\n context._internalState.error ||\n new UnknownDAError(`No error or signature available`),\n ),\n });\n }\n\n extractDependencies(internalApi: InternalApi): MachineDependencies {\n const getAppConfig = async () =>\n internalApi.sendCommand(new GetAppConfigurationCommand());\n\n const buildContext = async (arg0: {\n input: BuildTransactionContextTaskArgs;\n }) => new BuildTransactionContextTask(internalApi, arg0.input).run();\n\n const provideContext = async (arg0: {\n input: ProvideSolanaTransactionContextTaskArgs;\n }) =>\n new ProvideSolanaTransactionContextTask(internalApi, arg0.input).run();\n\n const inspectTransaction = async (arg0: {\n serializedTransaction: Uint8Array;\n resolutionContext?: TransactionResolutionContext;\n rpcUrl?: string;\n }) =>\n Promise.resolve(\n new TransactionInspector(arg0.rpcUrl).inspectTransactionType(\n arg0.serializedTransaction,\n arg0.resolutionContext?.tokenAddress,\n arg0.resolutionContext?.createATA,\n ),\n );\n\n const signTransaction = async (arg0: {\n input: {\n derivationPath: string;\n serializedTransaction: Uint8Array;\n userInputType?: UserInputType;\n };\n }) =>\n new SignDataTask(internalApi, {\n commandFactory: (args) =>\n new SignTransactionCommand({\n serializedTransaction: args.chunkedData,\n more: args.more,\n extend: args.extend,\n userInputType: arg0.input.userInputType,\n }),\n derivationPath: arg0.input.derivationPath,\n sendingData: arg0.input.serializedTransaction,\n }).run();\n\n return {\n getAppConfig,\n buildContext,\n provideContext,\n signTransaction,\n inspectTransaction,\n };\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["SignTransactionDeviceAction_exports", "__export", "SignTransactionDeviceAction", "__toCommonJS", "import_device_management_kit", "import_purify_ts", "import_xstate", "import_SignTransactionDeviceActionTypes", "import_GetAppConfigurationCommand", "import_SignTransactionCommand", "import_ApplicationChecker", "import_TransactionInspector", "import_BuildTransactionContextTask", "import_ProvideTransactionContextTask", "import_SendSignDataTask", "args", "internalApi", "signTransaction", "getAppConfig", "buildContext", "provideContext", "inspectTransaction", "input", "context", "_", "event", "error", "inspectorData", "data", "arg0"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("@ledgerhq/device-management-kit"),o=require("purify-ts"),t=require("vitest"),n=require("../../../api/app-binder/SignTransactionDeviceActionTypes"),T=require("../../app-binder/device-action/__test-utils__/testDeviceActionStates"),u=require("../../app-binder/services/TransactionInspector"),y=require("./__test-utils__/makeInternalApi"),S=require("./SignTransactionDeviceAction");const N="44'/501'/0'/0'",I=new Uint8Array([222,173,190,239]),v={getSolanaContext:t.vi.fn()};let r,d,p,m,g,l;function D(){return{getAppConfig:d,buildContext:p,provideContext:m,signTransaction:g,inspectTransaction:l}}(0,t.describe)("SignTransactionDeviceAction (Solana)",()=>{(0,t.beforeEach)(()=>{r=(0,y.makeDeviceActionInternalApiMock)(),d=t.vi.fn(),p=t.vi.fn(),m=t.vi.fn(),g=t.vi.fn(),l=t.vi.fn().mockResolvedValue({transactionType:u.SolanaTransactionTypes.SPL,data:{tokenAddress:null,createATA:!1}})}),(0,t.it)("happy path (skip open): getAppConfig -> inspect -> build -> provide -> sign",()=>new Promise((s,c)=>{r.getDeviceSessionState.mockReturnValue({sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Solana",version:"1.4.1"},deviceModelId:e.DeviceModelId.NANO_X,isSecureConnectionAllowed:!0}),d.mockResolvedValue((0,e.CommandResultFactory)({data:{}})),l.mockResolvedValue({transactionType:u.SolanaTransactionTypes.SPL});const a={tlvDescriptor:new Uint8Array([1]),trustedNamePKICertificate:{keyUsageNumber:0,payload:new Uint8Array([1])},loadersResults:[]};p.mockResolvedValue(a),m.mockResolvedValue(o.Nothing);const i=new Uint8Array([170,187]);g.mockResolvedValue((0,e.CommandResultFactory)({data:(0,o.Just)(i)}));const A=new S.SignTransactionDeviceAction({input:{derivationPath:N,transaction:I,transactionOptions:{skipOpenApp:!0},contextModule:v}});t.vi.spyOn(A,"extractDependencies").mockReturnValue(D());const C=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:n.signTransactionDAStateSteps.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:n.signTransactionDAStateSteps.INSPECT_TRANSACTION},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:n.signTransactionDAStateSteps.BUILD_TRANSACTION_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:n.signTransactionDAStateSteps.PROVIDE_TRANSACTION_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction,step:n.signTransactionDAStateSteps.SIGN_TRANSACTION},status:e.DeviceActionStatus.Pending},{output:i,status:e.DeviceActionStatus.Completed}];(0,T.testDeviceActionStates)(A,C,r,{onDone:s,onError:c})})),(0,t.it)("failure in provideContext still signs",()=>new Promise((s,c)=>{r.getDeviceSessionState.mockReturnValue({sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Solana",version:"1.4.1"},deviceModelId:e.DeviceModelId.NANO_X,isSecureConnectionAllowed:!0}),d.mockResolvedValue((0,e.CommandResultFactory)({data:{}})),l.mockResolvedValue({transactionType:u.SolanaTransactionTypes.SPL}),p.mockResolvedValue({descriptor:new Uint8Array([2]),trustedNamePKICertificate:{keyUsageNumber:0,payload:new Uint8Array},challenge:void 0,addressResult:{tokenAccount:"",owner:"",contract:""},loadersResults:[]}),m.mockResolvedValue((0,o.Just)((0,e.CommandResultFactory)({error:new e.InvalidStatusWordError("ctxErr")})));const a=new Uint8Array([254]);g.mockResolvedValue((0,e.CommandResultFactory)({data:(0,o.Just)(a)}));const i=new S.SignTransactionDeviceAction({input:{derivationPath:N,transaction:I,transactionOptions:{skipOpenApp:!0},contextModule:v}});t.vi.spyOn(i,"extractDependencies").mockReturnValue(D());const A=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:n.signTransactionDAStateSteps.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:n.signTransactionDAStateSteps.INSPECT_TRANSACTION},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:n.signTransactionDAStateSteps.BUILD_TRANSACTION_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:n.signTransactionDAStateSteps.PROVIDE_TRANSACTION_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction,step:n.signTransactionDAStateSteps.SIGN_TRANSACTION},status:e.DeviceActionStatus.Pending},{output:a,status:e.DeviceActionStatus.Completed}];(0,T.testDeviceActionStates)(i,A,r,{onDone:s,onError:c})})),(0,t.it)("buildContext throws \u2192 error",()=>new Promise((s,c)=>{r.getDeviceSessionState.mockReturnValue({sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Solana",version:"1.4.1"},deviceModelId:e.DeviceModelId.NANO_X,isSecureConnectionAllowed:!0}),d.mockResolvedValue((0,e.CommandResultFactory)({data:{}})),l.mockResolvedValue({transactionType:u.SolanaTransactionTypes.SPL}),p.mockRejectedValue(new e.InvalidStatusWordError("bldErr"));const a=new S.SignTransactionDeviceAction({input:{derivationPath:N,transaction:I,transactionOptions:{skipOpenApp:!0},contextModule:v}});t.vi.spyOn(a,"extractDependencies").mockReturnValue(D());const i=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:n.signTransactionDAStateSteps.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:n.signTransactionDAStateSteps.INSPECT_TRANSACTION},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:n.signTransactionDAStateSteps.BUILD_TRANSACTION_CONTEXT},status:e.DeviceActionStatus.Pending},{error:expect.anything(),status:e.DeviceActionStatus.Error}];(0,T.testDeviceActionStates)(a,i,r,{onDone:s,onError:c})}))});
|
|
1
|
+
"use strict";var e=require("@ledgerhq/device-management-kit"),u=require("purify-ts"),t=require("vitest"),n=require("../../../api/app-binder/SignTransactionDeviceActionTypes"),S=require("../../app-binder/device-action/__test-utils__/testDeviceActionStates"),m=require("../../app-binder/services/TransactionInspector"),R=require("./__test-utils__/makeInternalApi"),N=require("./SignTransactionDeviceAction");const I="44'/501'/0'/0'",v=new Uint8Array([222,173,190,239]),C=()=>({debug:t.vi.fn(),info:t.vi.fn(),warn:t.vi.fn(),error:t.vi.fn(),subscribers:[]}),D={getSolanaContext:t.vi.fn()};let o,A,d,g,l,T;function y(){return{getAppConfig:A,buildContext:d,provideContext:g,signTransaction:l,inspectTransaction:T}}(0,t.describe)("SignTransactionDeviceAction (Solana)",()=>{(0,t.beforeEach)(()=>{o=(0,R.makeDeviceActionInternalApiMock)(),A=t.vi.fn(),d=t.vi.fn(),g=t.vi.fn(),l=t.vi.fn(),T=t.vi.fn().mockResolvedValue({transactionType:m.SolanaTransactionTypes.SPL,data:{tokenAddress:null,createATA:!1}})}),(0,t.it)("happy path (skip open): getAppConfig -> inspect -> build -> provide -> sign",()=>new Promise((s,c)=>{o.getDeviceSessionState.mockReturnValue({sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Solana",version:"1.4.1"},deviceModelId:e.DeviceModelId.NANO_X,isSecureConnectionAllowed:!0}),A.mockResolvedValue((0,e.CommandResultFactory)({data:{}})),T.mockResolvedValue({transactionType:m.SolanaTransactionTypes.SPL});const a={tlvDescriptor:new Uint8Array([1]),trustedNamePKICertificate:{keyUsageNumber:0,payload:new Uint8Array([1])},loadersResults:[]};d.mockResolvedValue(a),g.mockResolvedValue(u.Nothing);const i=new Uint8Array([170,187]);l.mockResolvedValue((0,e.CommandResultFactory)({data:(0,u.Just)(i)}));const r={derivationPath:I,transaction:v,transactionOptions:{skipOpenApp:!0},contextModule:D},p=new N.SignTransactionDeviceAction({input:r,loggerFactory:C});t.vi.spyOn(p,"extractDependencies").mockReturnValue(y());const V=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:n.signTransactionDAStateSteps.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:n.signTransactionDAStateSteps.INSPECT_TRANSACTION},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:n.signTransactionDAStateSteps.BUILD_TRANSACTION_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:n.signTransactionDAStateSteps.PROVIDE_TRANSACTION_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction,step:n.signTransactionDAStateSteps.SIGN_TRANSACTION},status:e.DeviceActionStatus.Pending},{output:i,status:e.DeviceActionStatus.Completed}];(0,S.testDeviceActionStates)(p,V,o,{onDone:s,onError:c})})),(0,t.it)("inspectTransaction rejects, still signs (fallback)",()=>new Promise((s,c)=>{o.getDeviceSessionState.mockReturnValue({sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Solana",version:"1.4.1"},deviceModelId:e.DeviceModelId.NANO_X,isSecureConnectionAllowed:!0}),A.mockResolvedValue((0,e.CommandResultFactory)({data:{}})),T.mockRejectedValue(new e.InvalidStatusWordError("inspErr"));const a=new Uint8Array([17,34]);l.mockResolvedValue((0,e.CommandResultFactory)({data:(0,u.Just)(a)}));const i=new N.SignTransactionDeviceAction({input:{derivationPath:I,transaction:v,transactionOptions:{skipOpenApp:!0},contextModule:D},loggerFactory:C});t.vi.spyOn(i,"extractDependencies").mockReturnValue(y());const r=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:n.signTransactionDAStateSteps.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:n.signTransactionDAStateSteps.INSPECT_TRANSACTION},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction,step:n.signTransactionDAStateSteps.SIGN_TRANSACTION},status:e.DeviceActionStatus.Pending},{output:a,status:e.DeviceActionStatus.Completed}];(0,S.testDeviceActionStates)(i,r,o,{onDone:()=>{expect(d).not.toHaveBeenCalled(),expect(g).not.toHaveBeenCalled(),s()},onError:c})})),(0,t.it)("buildContext throws, still signs (fallback)",()=>new Promise((s,c)=>{o.getDeviceSessionState.mockReturnValue({sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Solana",version:"1.4.1"},deviceModelId:e.DeviceModelId.NANO_X,isSecureConnectionAllowed:!0}),A.mockResolvedValue((0,e.CommandResultFactory)({data:{}})),T.mockResolvedValue({transactionType:m.SolanaTransactionTypes.SPL}),d.mockRejectedValue(new e.InvalidStatusWordError("bldErr"));const a=new Uint8Array([202,254]);l.mockResolvedValue((0,e.CommandResultFactory)({data:(0,u.Just)(a)}));const i=new N.SignTransactionDeviceAction({input:{derivationPath:I,transaction:v,transactionOptions:{skipOpenApp:!0},contextModule:D},loggerFactory:C});t.vi.spyOn(i,"extractDependencies").mockReturnValue(y());const r=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:n.signTransactionDAStateSteps.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:n.signTransactionDAStateSteps.INSPECT_TRANSACTION},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:n.signTransactionDAStateSteps.BUILD_TRANSACTION_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction,step:n.signTransactionDAStateSteps.SIGN_TRANSACTION},status:e.DeviceActionStatus.Pending},{output:a,status:e.DeviceActionStatus.Completed}];(0,S.testDeviceActionStates)(i,r,o,{onDone:s,onError:c})})),(0,t.it)("provideContext rejects, still signs (fallback)",()=>new Promise((s,c)=>{o.getDeviceSessionState.mockReturnValue({sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Solana",version:"1.4.1"},deviceModelId:e.DeviceModelId.NANO_X,isSecureConnectionAllowed:!0}),A.mockResolvedValue((0,e.CommandResultFactory)({data:{}})),T.mockResolvedValue({transactionType:m.SolanaTransactionTypes.SPL});const a={tlvDescriptor:new Uint8Array([1]),trustedNamePKICertificate:{keyUsageNumber:0,payload:new Uint8Array([2])},loadersResults:[]};d.mockResolvedValue(a),g.mockRejectedValue(new e.InvalidStatusWordError("provErr"));const i=new Uint8Array([51]);l.mockResolvedValue((0,e.CommandResultFactory)({data:(0,u.Just)(i)}));const r=new N.SignTransactionDeviceAction({input:{derivationPath:I,transaction:v,transactionOptions:{skipOpenApp:!0},contextModule:D},loggerFactory:C});t.vi.spyOn(r,"extractDependencies").mockReturnValue(y());const p=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:n.signTransactionDAStateSteps.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:n.signTransactionDAStateSteps.INSPECT_TRANSACTION},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:n.signTransactionDAStateSteps.BUILD_TRANSACTION_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:n.signTransactionDAStateSteps.PROVIDE_TRANSACTION_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction,step:n.signTransactionDAStateSteps.SIGN_TRANSACTION},status:e.DeviceActionStatus.Pending},{output:i,status:e.DeviceActionStatus.Completed}];(0,S.testDeviceActionStates)(r,p,o,{onDone:()=>{expect(d).toHaveBeenCalledTimes(1),expect(g).toHaveBeenCalledTimes(1),expect(l).toHaveBeenCalledTimes(1),s()},onError:c})})),(0,t.it)("failure in provideContext still signs",()=>new Promise((s,c)=>{o.getDeviceSessionState.mockReturnValue({sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Solana",version:"1.4.1"},deviceModelId:e.DeviceModelId.NANO_X,isSecureConnectionAllowed:!0}),A.mockResolvedValue((0,e.CommandResultFactory)({data:{}})),T.mockResolvedValue({transactionType:m.SolanaTransactionTypes.SPL}),d.mockResolvedValue({tlvDescriptor:new Uint8Array([2]),trustedNamePKICertificate:{keyUsageNumber:0,payload:new Uint8Array},loadersResults:[]}),g.mockResolvedValue((0,u.Just)((0,e.CommandResultFactory)({error:new e.InvalidStatusWordError("ctxErr")})));const a=new Uint8Array([254]);l.mockResolvedValue((0,e.CommandResultFactory)({data:(0,u.Just)(a)}));const i={derivationPath:I,transaction:v,transactionOptions:{skipOpenApp:!0},contextModule:D},r=new N.SignTransactionDeviceAction({input:i,loggerFactory:C});t.vi.spyOn(r,"extractDependencies").mockReturnValue(y());const p=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:n.signTransactionDAStateSteps.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:n.signTransactionDAStateSteps.INSPECT_TRANSACTION},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:n.signTransactionDAStateSteps.BUILD_TRANSACTION_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:n.signTransactionDAStateSteps.PROVIDE_TRANSACTION_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction,step:n.signTransactionDAStateSteps.SIGN_TRANSACTION},status:e.DeviceActionStatus.Pending},{output:a,status:e.DeviceActionStatus.Completed}];(0,S.testDeviceActionStates)(r,p,o,{onDone:s,onError:c})})),(0,t.it)("buildContext throws \u2192 error",()=>new Promise((s,c)=>{o.getDeviceSessionState.mockReturnValue({sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Solana",version:"1.4.1"},deviceModelId:e.DeviceModelId.NANO_X,isSecureConnectionAllowed:!0}),A.mockResolvedValue((0,e.CommandResultFactory)({data:{}})),T.mockResolvedValue({transactionType:m.SolanaTransactionTypes.SPL}),d.mockRejectedValue(new e.InvalidStatusWordError("bldErr"));const a=new Uint8Array([171,205]);l.mockResolvedValue((0,e.CommandResultFactory)({data:(0,u.Just)(a)}));const i={derivationPath:I,transaction:v,transactionOptions:{skipOpenApp:!0},contextModule:D},r=new N.SignTransactionDeviceAction({input:i,loggerFactory:C});t.vi.spyOn(r,"extractDependencies").mockReturnValue(y());const p=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:n.signTransactionDAStateSteps.GET_APP_CONFIG},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:n.signTransactionDAStateSteps.INSPECT_TRANSACTION},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None,step:n.signTransactionDAStateSteps.BUILD_TRANSACTION_CONTEXT},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction,step:n.signTransactionDAStateSteps.SIGN_TRANSACTION},status:e.DeviceActionStatus.Pending},{output:a,status:e.DeviceActionStatus.Completed}];(0,S.testDeviceActionStates)(r,p,o,{onDone:s,onError:c})}))});
|
|
2
2
|
//# sourceMappingURL=SignTransactionDeviceAction.test.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/device-action/SignTransactionDeviceAction.test.ts"],
|
|
4
|
-
"sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n CommandResultFactory,\n type DeviceActionState,\n DeviceActionStatus,\n DeviceModelId,\n DeviceSessionStateType,\n DeviceStatus,\n InvalidStatusWordError,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { Just, Nothing } from \"purify-ts\";\nimport { beforeEach, describe, it, vi } from \"vitest\";\n\nimport {\n type SignTransactionDAError,\n type SignTransactionDAInput,\n type SignTransactionDAIntermediateValue,\n signTransactionDAStateSteps,\n} from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { testDeviceActionStates } from \"@internal/app-binder/device-action/__test-utils__/testDeviceActionStates\";\nimport { SolanaTransactionTypes } from \"@internal/app-binder/services/TransactionInspector\";\nimport { type SolanaBuildContextResult } from \"@internal/app-binder/task/BuildTransactionContextTask\";\n\nimport { makeDeviceActionInternalApiMock } from \"./__test-utils__/makeInternalApi\";\nimport { SignTransactionDeviceAction } from \"./SignTransactionDeviceAction\";\n\nconst defaultDerivation = \"44'/501'/0'/0'\";\nconst exampleTx = new Uint8Array([0xde, 0xad, 0xbe, 0xef]);\n\nconst contextModuleStub: ContextModule = {\n getSolanaContext: vi.fn(),\n} as unknown as ContextModule;\n\nlet apiMock: ReturnType<typeof makeDeviceActionInternalApiMock>;\nlet getAppConfigMock: ReturnType<typeof vi.fn>;\nlet buildContextMock: ReturnType<typeof vi.fn>;\nlet provideContextMock: ReturnType<typeof vi.fn>;\nlet signMock: ReturnType<typeof vi.fn>;\nlet inspectTransactionMock: ReturnType<typeof vi.fn>;\n\nfunction extractDeps() {\n return {\n getAppConfig: getAppConfigMock,\n buildContext: buildContextMock,\n provideContext: provideContextMock,\n signTransaction: signMock,\n inspectTransaction: inspectTransactionMock,\n };\n}\n\ndescribe(\"SignTransactionDeviceAction (Solana)\", () => {\n beforeEach(() => {\n apiMock = makeDeviceActionInternalApiMock();\n getAppConfigMock = vi.fn();\n buildContextMock = vi.fn();\n provideContextMock = vi.fn();\n signMock = vi.fn();\n inspectTransactionMock = vi.fn().mockResolvedValue({\n transactionType: SolanaTransactionTypes.SPL,\n data: { tokenAddress: null, createATA: false },\n });\n });\n\n it(\"happy path (skip open): getAppConfig -> inspect -> build -> provide -> sign\", () =>\n new Promise<void>((resolve, reject) => {\n apiMock.getDeviceSessionState.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Solana\", version: \"1.4.1\" },\n deviceModelId: DeviceModelId.NANO_X,\n isSecureConnectionAllowed: true,\n });\n\n getAppConfigMock.mockResolvedValue(CommandResultFactory({ data: {} }));\n inspectTransactionMock.mockResolvedValue({\n transactionType: SolanaTransactionTypes.SPL,\n });\n\n const ctx: SolanaBuildContextResult = {\n tlvDescriptor: new Uint8Array([1]),\n trustedNamePKICertificate: {\n keyUsageNumber: 0,\n payload: new Uint8Array([0x01]),\n },\n loadersResults: [],\n };\n buildContextMock.mockResolvedValue(ctx);\n provideContextMock.mockResolvedValue(Nothing);\n\n const signature = new Uint8Array([0xaa, 0xbb]);\n signMock.mockResolvedValue(\n CommandResultFactory({ data: Just(signature) }),\n );\n\n const action = new SignTransactionDeviceAction({\n input: {\n derivationPath: defaultDerivation,\n transaction: exampleTx,\n transactionOptions: { skipOpenApp: true },\n contextModule: contextModuleStub,\n } as SignTransactionDAInput,\n });\n vi.spyOn(action, \"extractDependencies\").mockReturnValue(extractDeps());\n\n const expected = [\n // getAppConfig\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.GET_APP_CONFIG,\n },\n status: DeviceActionStatus.Pending,\n },\n // inspectTransaction\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.INSPECT_TRANSACTION,\n },\n status: DeviceActionStatus.Pending,\n },\n // buildContext\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.BUILD_TRANSACTION_CONTEXT,\n },\n status: DeviceActionStatus.Pending,\n },\n // provideContext\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.PROVIDE_TRANSACTION_CONTEXT,\n },\n status: DeviceActionStatus.Pending,\n },\n // signTransaction\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n step: signTransactionDAStateSteps.SIGN_TRANSACTION,\n },\n status: DeviceActionStatus.Pending,\n },\n // success\n { output: signature, status: DeviceActionStatus.Completed },\n ] as DeviceActionState<\n Uint8Array,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >[];\n\n testDeviceActionStates<\n Uint8Array,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >(action, expected, apiMock, { onDone: resolve, onError: reject });\n }));\n\n it(\"failure in provideContext still signs\", () =>\n new Promise<void>((resolve, reject) => {\n apiMock.getDeviceSessionState.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Solana\", version: \"1.4.1\" },\n deviceModelId: DeviceModelId.NANO_X,\n isSecureConnectionAllowed: true,\n });\n\n getAppConfigMock.mockResolvedValue(CommandResultFactory({ data: {} }));\n inspectTransactionMock.mockResolvedValue({\n transactionType: SolanaTransactionTypes.SPL,\n });\n\n buildContextMock.mockResolvedValue({\n descriptor: new Uint8Array([2]),\n trustedNamePKICertificate: {\n keyUsageNumber: 0,\n payload: new Uint8Array(),\n },\n challenge: undefined,\n addressResult: { tokenAccount: \"\", owner: \"\", contract: \"\" },\n loadersResults: [], // <-- include it\n });\n provideContextMock.mockResolvedValue(\n Just(\n CommandResultFactory({ error: new InvalidStatusWordError(\"ctxErr\") }),\n ),\n );\n const sig = new Uint8Array([0xfe]);\n signMock.mockResolvedValue(CommandResultFactory({ data: Just(sig) }));\n\n const action = new SignTransactionDeviceAction({\n input: {\n derivationPath: defaultDerivation,\n transaction: exampleTx,\n transactionOptions: { skipOpenApp: true },\n contextModule: contextModuleStub,\n } as SignTransactionDAInput,\n });\n vi.spyOn(action, \"extractDependencies\").mockReturnValue(extractDeps());\n\n const expected = [\n // getAppConfig\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.GET_APP_CONFIG,\n },\n status: DeviceActionStatus.Pending,\n },\n // inspectTransaction\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.INSPECT_TRANSACTION,\n },\n status: DeviceActionStatus.Pending,\n },\n // buildContext\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.BUILD_TRANSACTION_CONTEXT,\n },\n status: DeviceActionStatus.Pending,\n },\n // provideContext (returns error but continues)\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.PROVIDE_TRANSACTION_CONTEXT,\n },\n status: DeviceActionStatus.Pending,\n },\n // signTransaction\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n step: signTransactionDAStateSteps.SIGN_TRANSACTION,\n },\n status: DeviceActionStatus.Pending,\n },\n // success\n { output: sig, status: DeviceActionStatus.Completed },\n ] as DeviceActionState<\n Uint8Array,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >[];\n\n testDeviceActionStates<\n Uint8Array,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >(action, expected, apiMock, { onDone: resolve, onError: reject });\n }));\n\n it(\"buildContext throws \u2192 error\", () =>\n new Promise<void>((resolve, reject) => {\n apiMock.getDeviceSessionState.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Solana\", version: \"1.4.1\" },\n deviceModelId: DeviceModelId.NANO_X,\n isSecureConnectionAllowed: true,\n });\n\n getAppConfigMock.mockResolvedValue(CommandResultFactory({ data: {} }));\n inspectTransactionMock.mockResolvedValue({\n transactionType: SolanaTransactionTypes.SPL,\n });\n\n buildContextMock.mockRejectedValue(new InvalidStatusWordError(\"bldErr\"));\n\n const action = new SignTransactionDeviceAction({\n input: {\n derivationPath: defaultDerivation,\n transaction: exampleTx,\n transactionOptions: { skipOpenApp: true },\n contextModule: contextModuleStub,\n } as SignTransactionDAInput,\n });\n vi.spyOn(action, \"extractDependencies\").mockReturnValue(extractDeps());\n\n const expected = [\n // getAppConfig\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.GET_APP_CONFIG,\n },\n status: DeviceActionStatus.Pending,\n },\n // inspectTransaction\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.INSPECT_TRANSACTION,\n },\n status: DeviceActionStatus.Pending,\n },\n // buildContext (throws)\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.BUILD_TRANSACTION_CONTEXT,\n },\n status: DeviceActionStatus.Pending,\n },\n // error raised from buildContext\n {\n error: expect.anything() as unknown as SignTransactionDAError,\n status: DeviceActionStatus.Error,\n },\n ] as DeviceActionState<\n Uint8Array,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >[];\n\n testDeviceActionStates<\n Uint8Array,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >(action, expected, apiMock, { onDone: resolve, onError: reject });\n }));\n});\n"],
|
|
5
|
-
"mappings": "aACA,IAAAA,EASO,2CACPC,EAA8B,qBAC9BC,EAA6C,kBAE7CC,EAKO,4DACPC,EAAuC,oFACvCC,EAAuC,8DAGvCC,EAAgD,4CAChDC,EAA4C,yCAE5C,MAAMC,EAAoB,iBACpBC,EAAY,IAAI,WAAW,CAAC,IAAM,IAAM,IAAM,GAAI,CAAC,EAEnDC,EAAmC,CACvC,iBAAkB,KAAG,GAAG,CAC1B,EAEA,IAAIC,EACAC,EACAC,EACAC,EACAC,EACAC,EAEJ,SAASC,GAAc,CACrB,MAAO,CACL,aAAcL,EACd,aAAcC,EACd,eAAgBC,EAChB,gBAAiBC,EACjB,mBAAoBC,CACtB,CACF,IAEA,YAAS,uCAAwC,IAAM,IACrD,cAAW,IAAM,CACfL,KAAU,mCAAgC,EAC1CC,EAAmB,KAAG,GAAG,EACzBC,EAAmB,KAAG,GAAG,EACzBC,EAAqB,KAAG,GAAG,EAC3BC,EAAW,KAAG,GAAG,EACjBC,EAAyB,KAAG,GAAG,EAAE,kBAAkB,CACjD,gBAAiB,yBAAuB,IACxC,KAAM,CAAE,aAAc,KAAM,UAAW,EAAM,CAC/C,CAAC,CACH,CAAC,KAED,MAAG,8EAA+E,IAChF,IAAI,QAAc,CAACE,EAASC,IAAW,CACrCR,EAAQ,sBAAsB,gBAAgB,CAC5C,iBAAkB,yBAAuB,0BACzC,aAAc,eAAa,UAC3B,cAAe,CAAC,EAChB,WAAY,CAAE,KAAM,SAAU,QAAS,OAAQ,EAC/C,cAAe,gBAAc,OAC7B,0BAA2B,EAC7B,CAAC,EAEDC,EAAiB,qBAAkB,wBAAqB,CAAE,KAAM,CAAC,CAAE,CAAC,CAAC,EACrEI,EAAuB,kBAAkB,CACvC,gBAAiB,yBAAuB,GAC1C,CAAC,EAED,MAAMI,EAAgC,CACpC,cAAe,IAAI,WAAW,CAAC,CAAC,CAAC,EACjC,0BAA2B,CACzB,eAAgB,EAChB,QAAS,IAAI,WAAW,CAAC,CAAI,CAAC,CAChC,EACA,eAAgB,CAAC,CACnB,EACAP,EAAiB,kBAAkBO,CAAG,EACtCN,EAAmB,kBAAkB,SAAO,EAE5C,MAAMO,EAAY,IAAI,WAAW,CAAC,IAAM,GAAI,CAAC,EAC7CN,EAAS,qBACP,wBAAqB,CAAE,QAAM,QAAKM,CAAS,CAAE,CAAC,CAChD,EAEA,MAAMC,EAAS,IAAI,8BAA4B,CAC7C,MAAO,CACL,
|
|
6
|
-
"names": ["import_device_management_kit", "import_purify_ts", "import_vitest", "import_SignTransactionDeviceActionTypes", "import_testDeviceActionStates", "import_TransactionInspector", "import_makeInternalApi", "import_SignTransactionDeviceAction", "defaultDerivation", "exampleTx", "contextModuleStub", "apiMock", "getAppConfigMock", "buildContextMock", "provideContextMock", "signMock", "inspectTransactionMock", "extractDeps", "resolve", "reject", "ctx", "signature", "action", "expected", "sig"]
|
|
4
|
+
"sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n CommandResultFactory,\n type DeviceActionState,\n DeviceActionStatus,\n DeviceModelId,\n DeviceSessionStateType,\n DeviceStatus,\n InvalidStatusWordError,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { Just, Nothing } from \"purify-ts\";\nimport { beforeEach, describe, it, vi } from \"vitest\";\n\nimport {\n type SignTransactionDAError,\n type SignTransactionDAInput,\n type SignTransactionDAIntermediateValue,\n signTransactionDAStateSteps,\n} from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { testDeviceActionStates } from \"@internal/app-binder/device-action/__test-utils__/testDeviceActionStates\";\nimport { SolanaTransactionTypes } from \"@internal/app-binder/services/TransactionInspector\";\nimport { type SolanaBuildContextResult } from \"@internal/app-binder/task/BuildTransactionContextTask\";\n\nimport { makeDeviceActionInternalApiMock } from \"./__test-utils__/makeInternalApi\";\nimport { SignTransactionDeviceAction } from \"./SignTransactionDeviceAction\";\n\nconst defaultDerivation = \"44'/501'/0'/0'\";\nconst exampleTx = new Uint8Array([0xde, 0xad, 0xbe, 0xef]);\n\nconst mockLoggerFactory = () => ({\n debug: vi.fn(),\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n subscribers: [],\n});\n\nconst contextModuleStub: ContextModule = {\n getSolanaContext: vi.fn(),\n} as unknown as ContextModule;\n\nlet apiMock: ReturnType<typeof makeDeviceActionInternalApiMock>;\nlet getAppConfigMock: ReturnType<typeof vi.fn>;\nlet buildContextMock: ReturnType<typeof vi.fn>;\nlet provideContextMock: ReturnType<typeof vi.fn>;\nlet signMock: ReturnType<typeof vi.fn>;\nlet inspectTransactionMock: ReturnType<typeof vi.fn>;\n\nfunction extractDeps() {\n return {\n getAppConfig: getAppConfigMock,\n buildContext: buildContextMock,\n provideContext: provideContextMock,\n signTransaction: signMock,\n inspectTransaction: inspectTransactionMock,\n };\n}\n\ndescribe(\"SignTransactionDeviceAction (Solana)\", () => {\n beforeEach(() => {\n apiMock = makeDeviceActionInternalApiMock();\n getAppConfigMock = vi.fn();\n buildContextMock = vi.fn();\n provideContextMock = vi.fn();\n signMock = vi.fn();\n inspectTransactionMock = vi.fn().mockResolvedValue({\n transactionType: SolanaTransactionTypes.SPL,\n data: { tokenAddress: null, createATA: false },\n });\n });\n\n it(\"happy path (skip open): getAppConfig -> inspect -> build -> provide -> sign\", () =>\n new Promise<void>((resolve, reject) => {\n apiMock.getDeviceSessionState.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Solana\", version: \"1.4.1\" },\n deviceModelId: DeviceModelId.NANO_X,\n isSecureConnectionAllowed: true,\n });\n\n getAppConfigMock.mockResolvedValue(CommandResultFactory({ data: {} }));\n inspectTransactionMock.mockResolvedValue({\n transactionType: SolanaTransactionTypes.SPL,\n });\n\n const ctx: SolanaBuildContextResult = {\n tlvDescriptor: new Uint8Array([1]),\n trustedNamePKICertificate: {\n keyUsageNumber: 0,\n payload: new Uint8Array([0x01]),\n },\n loadersResults: [],\n };\n buildContextMock.mockResolvedValue(ctx);\n provideContextMock.mockResolvedValue(Nothing);\n\n const signature = new Uint8Array([0xaa, 0xbb]);\n signMock.mockResolvedValue(\n CommandResultFactory({ data: Just(signature) }),\n );\n\n const input: SignTransactionDAInput = {\n derivationPath: defaultDerivation,\n transaction: exampleTx,\n transactionOptions: { skipOpenApp: true },\n contextModule: contextModuleStub,\n };\n\n const action = new SignTransactionDeviceAction({\n input,\n loggerFactory: mockLoggerFactory,\n });\n vi.spyOn(action, \"extractDependencies\").mockReturnValue(extractDeps());\n\n const expected = [\n // getAppConfig\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.GET_APP_CONFIG,\n },\n status: DeviceActionStatus.Pending,\n },\n // inspectTransaction\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.INSPECT_TRANSACTION,\n },\n status: DeviceActionStatus.Pending,\n },\n // buildContext\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.BUILD_TRANSACTION_CONTEXT,\n },\n status: DeviceActionStatus.Pending,\n },\n // provideContext\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.PROVIDE_TRANSACTION_CONTEXT,\n },\n status: DeviceActionStatus.Pending,\n },\n // signTransaction\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n step: signTransactionDAStateSteps.SIGN_TRANSACTION,\n },\n status: DeviceActionStatus.Pending,\n },\n // success\n { output: signature, status: DeviceActionStatus.Completed },\n ] as DeviceActionState<\n Uint8Array,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >[];\n\n testDeviceActionStates<\n Uint8Array,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >(action, expected, apiMock, { onDone: resolve, onError: reject });\n }));\n\n it(\"inspectTransaction rejects, still signs (fallback)\", () =>\n new Promise<void>((resolve, reject) => {\n apiMock.getDeviceSessionState.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Solana\", version: \"1.4.1\" },\n deviceModelId: DeviceModelId.NANO_X,\n isSecureConnectionAllowed: true,\n });\n\n getAppConfigMock.mockResolvedValue(CommandResultFactory({ data: {} }));\n\n // InspectTransaction fails, machine transitions to SignTransaction\n inspectTransactionMock.mockRejectedValue(\n new InvalidStatusWordError(\"inspErr\"),\n );\n\n const sig = new Uint8Array([0x11, 0x22]);\n signMock.mockResolvedValue(CommandResultFactory({ data: Just(sig) }));\n\n const action = new SignTransactionDeviceAction({\n input: {\n derivationPath: defaultDerivation,\n transaction: exampleTx,\n transactionOptions: { skipOpenApp: true },\n contextModule: contextModuleStub,\n },\n loggerFactory: mockLoggerFactory,\n });\n vi.spyOn(action, \"extractDependencies\").mockReturnValue(extractDeps());\n\n const expected = [\n // getAppConfig\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.GET_APP_CONFIG,\n },\n status: DeviceActionStatus.Pending,\n },\n // inspectTransaction\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.INSPECT_TRANSACTION,\n },\n status: DeviceActionStatus.Pending,\n },\n // signTransaction (fallback)\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n step: signTransactionDAStateSteps.SIGN_TRANSACTION,\n },\n status: DeviceActionStatus.Pending,\n },\n // success\n { output: sig, status: DeviceActionStatus.Completed },\n ] as DeviceActionState<\n Uint8Array,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >[];\n\n testDeviceActionStates(action, expected, apiMock, {\n onDone: () => {\n // we should not try to build/provide context if inspection failed\n expect(buildContextMock).not.toHaveBeenCalled();\n expect(provideContextMock).not.toHaveBeenCalled();\n resolve();\n },\n onError: reject,\n });\n }));\n\n it(\"buildContext throws, still signs (fallback)\", () =>\n new Promise<void>((resolve, reject) => {\n apiMock.getDeviceSessionState.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Solana\", version: \"1.4.1\" },\n deviceModelId: DeviceModelId.NANO_X,\n isSecureConnectionAllowed: true,\n });\n\n getAppConfigMock.mockResolvedValue(CommandResultFactory({ data: {} }));\n inspectTransactionMock.mockResolvedValue({\n transactionType: SolanaTransactionTypes.SPL,\n });\n\n // BuildContext fails, machine transitions to SignTransaction\n buildContextMock.mockRejectedValue(new InvalidStatusWordError(\"bldErr\"));\n\n const sig = new Uint8Array([0xca, 0xfe]);\n signMock.mockResolvedValue(CommandResultFactory({ data: Just(sig) }));\n\n const action = new SignTransactionDeviceAction({\n input: {\n derivationPath: defaultDerivation,\n transaction: exampleTx,\n transactionOptions: { skipOpenApp: true },\n contextModule: contextModuleStub,\n },\n loggerFactory: mockLoggerFactory,\n });\n vi.spyOn(action, \"extractDependencies\").mockReturnValue(extractDeps());\n\n const expected = [\n // getAppConfig\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.GET_APP_CONFIG,\n },\n status: DeviceActionStatus.Pending,\n },\n // inspectTransaction\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.INSPECT_TRANSACTION,\n },\n status: DeviceActionStatus.Pending,\n },\n // buildContext (fails, but we still saw the pending step)\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.BUILD_TRANSACTION_CONTEXT,\n },\n status: DeviceActionStatus.Pending,\n },\n // signTransaction (fallback)\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n step: signTransactionDAStateSteps.SIGN_TRANSACTION,\n },\n status: DeviceActionStatus.Pending,\n },\n // success\n { output: sig, status: DeviceActionStatus.Completed },\n ] as DeviceActionState<\n Uint8Array,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >[];\n\n testDeviceActionStates<\n Uint8Array,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >(action, expected, apiMock, { onDone: resolve, onError: reject });\n }));\n\n it(\"provideContext rejects, still signs (fallback)\", () =>\n new Promise<void>((resolve, reject) => {\n apiMock.getDeviceSessionState.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Solana\", version: \"1.4.1\" },\n deviceModelId: DeviceModelId.NANO_X,\n isSecureConnectionAllowed: true,\n });\n\n getAppConfigMock.mockResolvedValue(CommandResultFactory({ data: {} }));\n inspectTransactionMock.mockResolvedValue({\n transactionType: SolanaTransactionTypes.SPL,\n });\n\n const ctx: SolanaBuildContextResult = {\n tlvDescriptor: new Uint8Array([0x01]),\n trustedNamePKICertificate: {\n keyUsageNumber: 0,\n payload: new Uint8Array([0x02]),\n },\n loadersResults: [],\n };\n buildContextMock.mockResolvedValue(ctx);\n\n // ProvideContext rejects, machine transitions to SignTransaction\n provideContextMock.mockRejectedValue(\n new InvalidStatusWordError(\"provErr\"),\n );\n\n const sig = new Uint8Array([0x33]);\n signMock.mockResolvedValue(CommandResultFactory({ data: Just(sig) }));\n\n const action = new SignTransactionDeviceAction({\n input: {\n derivationPath: defaultDerivation,\n transaction: exampleTx,\n transactionOptions: { skipOpenApp: true },\n contextModule: contextModuleStub,\n },\n loggerFactory: mockLoggerFactory,\n });\n vi.spyOn(action, \"extractDependencies\").mockReturnValue(extractDeps());\n\n const expected = [\n // getAppConfig\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.GET_APP_CONFIG,\n },\n status: DeviceActionStatus.Pending,\n },\n // inspectTransaction\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.INSPECT_TRANSACTION,\n },\n status: DeviceActionStatus.Pending,\n },\n // buildContext\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.BUILD_TRANSACTION_CONTEXT,\n },\n status: DeviceActionStatus.Pending,\n },\n // provideContext\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.PROVIDE_TRANSACTION_CONTEXT,\n },\n status: DeviceActionStatus.Pending,\n },\n // signTransaction (fallback)\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n step: signTransactionDAStateSteps.SIGN_TRANSACTION,\n },\n status: DeviceActionStatus.Pending,\n },\n // success\n { output: sig, status: DeviceActionStatus.Completed },\n ] as DeviceActionState<\n Uint8Array,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >[];\n\n testDeviceActionStates(action, expected, apiMock, {\n onDone: () => {\n expect(buildContextMock).toHaveBeenCalledTimes(1);\n expect(provideContextMock).toHaveBeenCalledTimes(1);\n expect(signMock).toHaveBeenCalledTimes(1);\n resolve();\n },\n onError: reject,\n });\n }));\n\n it(\"failure in provideContext still signs\", () =>\n new Promise<void>((resolve, reject) => {\n apiMock.getDeviceSessionState.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Solana\", version: \"1.4.1\" },\n deviceModelId: DeviceModelId.NANO_X,\n isSecureConnectionAllowed: true,\n });\n\n getAppConfigMock.mockResolvedValue(CommandResultFactory({ data: {} }));\n inspectTransactionMock.mockResolvedValue({\n transactionType: SolanaTransactionTypes.SPL,\n });\n\n buildContextMock.mockResolvedValue({\n tlvDescriptor: new Uint8Array([2]),\n trustedNamePKICertificate: {\n keyUsageNumber: 0,\n payload: new Uint8Array(),\n },\n loadersResults: [],\n });\n provideContextMock.mockResolvedValue(\n Just(\n CommandResultFactory({ error: new InvalidStatusWordError(\"ctxErr\") }),\n ),\n );\n const sig = new Uint8Array([0xfe]);\n signMock.mockResolvedValue(CommandResultFactory({ data: Just(sig) }));\n\n const input: SignTransactionDAInput = {\n derivationPath: defaultDerivation,\n transaction: exampleTx,\n transactionOptions: { skipOpenApp: true },\n contextModule: contextModuleStub,\n };\n\n const action = new SignTransactionDeviceAction({\n input,\n loggerFactory: mockLoggerFactory,\n });\n vi.spyOn(action, \"extractDependencies\").mockReturnValue(extractDeps());\n\n const expected = [\n // getAppConfig\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.GET_APP_CONFIG,\n },\n status: DeviceActionStatus.Pending,\n },\n // inspectTransaction\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.INSPECT_TRANSACTION,\n },\n status: DeviceActionStatus.Pending,\n },\n // buildContext\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.BUILD_TRANSACTION_CONTEXT,\n },\n status: DeviceActionStatus.Pending,\n },\n // provideContext (returns error but continues)\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.PROVIDE_TRANSACTION_CONTEXT,\n },\n status: DeviceActionStatus.Pending,\n },\n // signTransaction\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n step: signTransactionDAStateSteps.SIGN_TRANSACTION,\n },\n status: DeviceActionStatus.Pending,\n },\n // success\n { output: sig, status: DeviceActionStatus.Completed },\n ] as DeviceActionState<\n Uint8Array,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >[];\n\n testDeviceActionStates<\n Uint8Array,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >(action, expected, apiMock, { onDone: resolve, onError: reject });\n }));\n\n it(\"buildContext throws \u2192 error\", () =>\n new Promise<void>((resolve, reject) => {\n apiMock.getDeviceSessionState.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Solana\", version: \"1.4.1\" },\n deviceModelId: DeviceModelId.NANO_X,\n isSecureConnectionAllowed: true,\n });\n\n getAppConfigMock.mockResolvedValue(CommandResultFactory({ data: {} }));\n inspectTransactionMock.mockResolvedValue({\n transactionType: SolanaTransactionTypes.SPL,\n });\n\n buildContextMock.mockRejectedValue(new InvalidStatusWordError(\"bldErr\"));\n\n const sig = new Uint8Array([0xab, 0xcd]);\n signMock.mockResolvedValue(CommandResultFactory({ data: Just(sig) }));\n\n const input: SignTransactionDAInput = {\n derivationPath: defaultDerivation,\n transaction: exampleTx,\n transactionOptions: { skipOpenApp: true },\n contextModule: contextModuleStub,\n };\n\n const action = new SignTransactionDeviceAction({\n input,\n loggerFactory: mockLoggerFactory,\n });\n vi.spyOn(action, \"extractDependencies\").mockReturnValue(extractDeps());\n\n const expected = [\n // getAppConfig\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.GET_APP_CONFIG,\n },\n status: DeviceActionStatus.Pending,\n },\n // inspectTransaction\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.INSPECT_TRANSACTION,\n },\n status: DeviceActionStatus.Pending,\n },\n // buildContext (throws)\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.BUILD_TRANSACTION_CONTEXT,\n },\n status: DeviceActionStatus.Pending,\n },\n // signTransaction (fallback)\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n step: signTransactionDAStateSteps.SIGN_TRANSACTION,\n },\n status: DeviceActionStatus.Pending,\n },\n // success\n { output: sig, status: DeviceActionStatus.Completed },\n ] as DeviceActionState<\n Uint8Array,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >[];\n\n testDeviceActionStates<\n Uint8Array,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >(action, expected, apiMock, { onDone: resolve, onError: reject });\n }));\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_device_management_kit", "import_purify_ts", "import_vitest", "import_SignTransactionDeviceActionTypes", "import_testDeviceActionStates", "import_TransactionInspector", "import_makeInternalApi", "import_SignTransactionDeviceAction", "defaultDerivation", "exampleTx", "mockLoggerFactory", "contextModuleStub", "apiMock", "getAppConfigMock", "buildContextMock", "provideContextMock", "signMock", "inspectTransactionMock", "extractDeps", "resolve", "reject", "ctx", "signature", "input", "action", "expected", "sig"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var s=Object.defineProperty;var
|
|
1
|
+
"use strict";var s=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var x=(o,e)=>{for(var t in e)s(o,t,{get:e[t],enumerable:!0})},C=(o,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of u(e))!p.call(o,a)&&a!==t&&s(o,a,{get:()=>e[a],enumerable:!(r=g(e,a))||r.enumerable});return o};var m=o=>C(s({},"__esModule",{value:!0}),o);var y={};x(y,{BuildTransactionContextTask:()=>h});module.exports=m(y);var d=require("@ledgerhq/device-management-kit"),c=require("../../app-binder/command/GetChallengeCommand");class h{constructor(e,t){this.api=e;this.args=t;this._logger=t.loggerFactory("BuildTransactionContextTask")}_logger;async run(){this._logger.debug("[run] Starting BuildTransactionContextTask");const{contextModule:e,options:t}=this.args,r=this.api.getDeviceSessionState();let a;const l=await this.api.sendCommand(new c.GetChallengeCommand);if((0,d.isSuccessCommandResult)(l))a=l.data.challenge;else throw new Error("Failed to get challenge from device");const i={deviceModelId:r.deviceModelId,tokenAddress:t.tokenAddress,challenge:a,createATA:t.createATA,tokenInternalId:t.tokenInternalId,templateId:t.templateId};return this._logger.debug("[run] Calling contextModule.getSolanaContext",{data:{args:i}}),(await e.getSolanaContext(i)).caseOf({Left:n=>{throw this._logger.error("[run] Solana context result",{data:{error:{message:n.message,name:n.name,stack:n.stack}}}),n},Right:n=>(this._logger.debug("[run] Solana context result",{data:{result:n}}),n)})}}0&&(module.exports={BuildTransactionContextTask});
|
|
2
2
|
//# sourceMappingURL=BuildTransactionContextTask.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/task/BuildTransactionContextTask.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type ContextModule,\n type PkiCertificate,\n type SolanaContextLoaderResults,\n} from \"@ledgerhq/context-module\";\nimport {\n type InternalApi,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type TransactionResolutionContext } from \"@api/model/TransactionResolutionContext\";\nimport { GetChallengeCommand } from \"@internal/app-binder/command/GetChallengeCommand\";\n\nexport type SolanaBuildContextResult = {\n trustedNamePKICertificate: PkiCertificate;\n tlvDescriptor: Uint8Array;\n loadersResults: SolanaContextLoaderResults;\n};\n\nexport type BuildTransactionContextTaskArgs = {\n readonly contextModule: ContextModule;\n readonly options: TransactionResolutionContext;\n};\n\nexport class BuildTransactionContextTask {\n constructor(\n private readonly api: InternalApi,\n private readonly args: BuildTransactionContextTaskArgs,\n ) {}\n\n async run(): Promise<SolanaBuildContextResult> {\n const { contextModule, options } = this.args;\n const deviceState = this.api.getDeviceSessionState();\n\n // get challenge\n let challenge: string | undefined;\n const challengeRes = await this.api.sendCommand(new GetChallengeCommand());\n if (isSuccessCommandResult(challengeRes)) {\n challenge = challengeRes.data.challenge;\n }\n\
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,iCAAAE,IAAA,eAAAC,EAAAH,GAKA,IAAAI,
|
|
6
|
-
"names": ["BuildTransactionContextTask_exports", "__export", "BuildTransactionContextTask", "__toCommonJS", "import_device_management_kit", "import_GetChallengeCommand", "api", "args", "contextModule", "options", "deviceState", "challenge", "challengeRes", "err", "ctx"]
|
|
4
|
+
"sourcesContent": ["import {\n type ContextModule,\n type PkiCertificate,\n type SolanaContextLoaderResults,\n} from \"@ledgerhq/context-module\";\nimport {\n type InternalApi,\n isSuccessCommandResult,\n type LoggerPublisherService,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type TransactionResolutionContext } from \"@api/model/TransactionResolutionContext\";\nimport { GetChallengeCommand } from \"@internal/app-binder/command/GetChallengeCommand\";\n\nexport type SolanaBuildContextResult = {\n trustedNamePKICertificate: PkiCertificate;\n tlvDescriptor: Uint8Array;\n loadersResults: SolanaContextLoaderResults;\n};\n\nexport type BuildTransactionContextTaskArgs = {\n readonly contextModule: ContextModule;\n readonly options: TransactionResolutionContext;\n readonly loggerFactory: (tag: string) => LoggerPublisherService;\n};\n\nexport class BuildTransactionContextTask {\n private readonly _logger: LoggerPublisherService;\n constructor(\n private readonly api: InternalApi,\n private readonly args: BuildTransactionContextTaskArgs,\n ) {\n this._logger = args.loggerFactory(\"BuildTransactionContextTask\");\n }\n\n async run(): Promise<SolanaBuildContextResult> {\n this._logger.debug(\"[run] Starting BuildTransactionContextTask\");\n const { contextModule, options } = this.args;\n const deviceState = this.api.getDeviceSessionState();\n\n // get challenge\n let challenge: string | undefined;\n const challengeRes = await this.api.sendCommand(new GetChallengeCommand());\n if (isSuccessCommandResult(challengeRes)) {\n challenge = challengeRes.data.challenge;\n } else {\n throw new Error(\"Failed to get challenge from device\");\n }\n\n const contextModuleGetSolanaContextArgs = {\n deviceModelId: deviceState.deviceModelId,\n tokenAddress: options.tokenAddress,\n challenge,\n createATA: options.createATA,\n tokenInternalId: options.tokenInternalId,\n templateId: options.templateId,\n };\n // get Solana context\n this._logger.debug(\"[run] Calling contextModule.getSolanaContext\", {\n data: {\n args: contextModuleGetSolanaContextArgs,\n },\n });\n const contextResult = await contextModule.getSolanaContext(\n contextModuleGetSolanaContextArgs,\n );\n\n return contextResult.caseOf({\n Left: (err) => {\n this._logger.error(\"[run] Solana context result\", {\n data: {\n error: {\n message: err.message,\n name: err.name,\n stack: err.stack,\n },\n },\n });\n throw err;\n },\n Right: (ctx) => {\n this._logger.debug(\"[run] Solana context result\", {\n data: {\n result: ctx,\n },\n });\n return ctx;\n },\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,iCAAAE,IAAA,eAAAC,EAAAH,GAKA,IAAAI,EAIO,2CAGPC,EAAoC,4DAc7B,MAAMH,CAA4B,CAEvC,YACmBI,EACAC,EACjB,CAFiB,SAAAD,EACA,UAAAC,EAEjB,KAAK,QAAUA,EAAK,cAAc,6BAA6B,CACjE,CANiB,QAQjB,MAAM,KAAyC,CAC7C,KAAK,QAAQ,MAAM,4CAA4C,EAC/D,KAAM,CAAE,cAAAC,EAAe,QAAAC,CAAQ,EAAI,KAAK,KAClCC,EAAc,KAAK,IAAI,sBAAsB,EAGnD,IAAIC,EACJ,MAAMC,EAAe,MAAM,KAAK,IAAI,YAAY,IAAI,qBAAqB,EACzE,MAAI,0BAAuBA,CAAY,EACrCD,EAAYC,EAAa,KAAK,cAE9B,OAAM,IAAI,MAAM,qCAAqC,EAGvD,MAAMC,EAAoC,CACxC,cAAeH,EAAY,cAC3B,aAAcD,EAAQ,aACtB,UAAAE,EACA,UAAWF,EAAQ,UACnB,gBAAiBA,EAAQ,gBACzB,WAAYA,EAAQ,UACtB,EAEA,YAAK,QAAQ,MAAM,+CAAgD,CACjE,KAAM,CACJ,KAAMI,CACR,CACF,CAAC,GACqB,MAAML,EAAc,iBACxCK,CACF,GAEqB,OAAO,CAC1B,KAAOC,GAAQ,CACb,WAAK,QAAQ,MAAM,8BAA+B,CAChD,KAAM,CACJ,MAAO,CACL,QAASA,EAAI,QACb,KAAMA,EAAI,KACV,MAAOA,EAAI,KACb,CACF,CACF,CAAC,EACKA,CACR,EACA,MAAQC,IACN,KAAK,QAAQ,MAAM,8BAA+B,CAChD,KAAM,CACJ,OAAQA,CACV,CACF,CAAC,EACMA,EAEX,CAAC,CACH,CACF",
|
|
6
|
+
"names": ["BuildTransactionContextTask_exports", "__export", "BuildTransactionContextTask", "__toCommonJS", "import_device_management_kit", "import_GetChallengeCommand", "api", "args", "contextModule", "options", "deviceState", "challenge", "challengeRes", "contextModuleGetSolanaContextArgs", "err", "ctx"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var o=require("@ledgerhq/device-management-kit"),n=require("purify-ts"),e=require("vitest"),i=require("../../app-binder/command/GetChallengeCommand"),l=require("./BuildTransactionContextTask");const u=()=>({debug:e.vi.fn(),info:e.vi.fn(),warn:e.vi.fn(),error:e.vi.fn(),subscribers:[]}),a={getSolanaContext:e.vi.fn()},d={contextModule:a,loggerFactory:u,options:{tokenAddress:"someAddress",createATA:void 0}},r={tlvDescriptor:new Uint8Array([1,2,3]),trustedNamePKICertificate:{payload:new Uint8Array([170,187]),keyUsageNumber:1},loadersResults:[]};let t;(0,e.describe)("BuildTransactionContextTask",()=>{(0,e.beforeEach)(()=>{e.vi.resetAllMocks(),t={getDeviceSessionState:e.vi.fn().mockReturnValue({deviceModelId:o.DeviceModelId.NANO_X}),sendCommand:e.vi.fn().mockResolvedValue({status:o.CommandResultStatus.Success,data:{challenge:"someChallenge"}})}}),(0,e.it)("returns context successfully when challenge command succeeds",async()=>{a.getSolanaContext.mockResolvedValue((0,n.Right)(r));const c=await new l.BuildTransactionContextTask(t,d).run();(0,e.expect)(t.sendCommand).toHaveBeenCalledWith(e.expect.any(i.GetChallengeCommand)),(0,e.expect)(a.getSolanaContext).toHaveBeenCalledWith({deviceModelId:o.DeviceModelId.NANO_X,tokenAddress:"someAddress",challenge:"someChallenge",createATA:void 0}),(0,e.expect)(c).toEqual({tlvDescriptor:r.tlvDescriptor,trustedNamePKICertificate:r.trustedNamePKICertificate,loadersResults:[]})}),(0,e.it)("throws if challenge command fails",async()=>{t.sendCommand.mockResolvedValue({status:o.CommandResultStatus.Error,data:{}}),a.getSolanaContext.mockResolvedValue((0,n.Right)(r));const s=new l.BuildTransactionContextTask(t,d);await(0,e.expect)(s.run()).rejects.toThrow("Failed to get challenge from device")}),(0,e.it)("throws if getSolanaContext returns Left",async()=>{const s=new Error("Solana context failure");a.getSolanaContext.mockResolvedValue((0,n.Left)(s));const c=new l.BuildTransactionContextTask(t,d);await(0,e.expect)(c.run()).rejects.toThrow("Solana context failure")})});
|
|
2
2
|
//# sourceMappingURL=BuildTransactionContextTask.test.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/task/BuildTransactionContextTask.test.ts"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n CommandResultStatus,\n DeviceModelId,\n type InternalApi,\n} from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { GetChallengeCommand } from \"@internal/app-binder/command/GetChallengeCommand\";\n\nimport {\n BuildTransactionContextTask,\n type SolanaBuildContextResult,\n} from \"./BuildTransactionContextTask\";\n\nconst contextModuleMock: ContextModule = {\n getSolanaContext: vi.fn(),\n} as unknown as ContextModule;\n\nconst defaultArgs = {\n contextModule: contextModuleMock,\n options: {\n tokenAddress: \"someAddress\",\n createATA: undefined,\n },\n};\n\nconst solanaContextRightPayload = {\n tlvDescriptor: new Uint8Array([1, 2, 3]),\n trustedNamePKICertificate: {\n payload: new Uint8Array([0xaa, 0xbb]),\n keyUsageNumber: 1,\n },\n loadersResults: [], // required by the task's return type\n} as const;\n\nlet apiMock: InternalApi;\n\ndescribe(\"BuildTransactionContextTask\", () => {\n beforeEach(() => {\n vi.resetAllMocks();\n\n apiMock = {\n getDeviceSessionState: vi\n .fn()\n .mockReturnValue({ deviceModelId: DeviceModelId.NANO_X }),\n sendCommand: vi.fn().mockResolvedValue({\n status: CommandResultStatus.Success,\n data: { challenge: \"someChallenge\" },\n }),\n } as unknown as InternalApi;\n });\n\n it(\"returns context successfully when challenge command succeeds\", async () => {\n (contextModuleMock.getSolanaContext as any).mockResolvedValue(\n Right(solanaContextRightPayload),\n );\n\n const task = new BuildTransactionContextTask(apiMock, defaultArgs);\n const result = await task.run();\n\n // challenge is fetched\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n expect.any(GetChallengeCommand),\n );\n\n // getSolanaContext called with challenge\n expect(contextModuleMock.getSolanaContext).toHaveBeenCalledWith({\n deviceModelId: DeviceModelId.NANO_X,\n tokenAddress: \"someAddress\",\n challenge: \"someChallenge\",\n createATA: undefined,\n });\n\n // matches SolanaBuildContextResult shape\n expect(result).toEqual<SolanaBuildContextResult>({\n tlvDescriptor: solanaContextRightPayload.tlvDescriptor,\n trustedNamePKICertificate:\n solanaContextRightPayload.trustedNamePKICertificate,\n loadersResults: [],\n });\n });\n\n it(\"
|
|
5
|
-
"mappings": "aAIA,IAAAA,EAIO,2CACPC,EAA4B,qBAC5BC,EAAqD,kBAErDC,EAAoC,4DAEpCC,EAGO,yCAEP,MAAMC,EAAmC,CACvC,iBAAkB,KAAG,GAAG,CAC1B,EAEMC,EAAc,CAClB,cAAeD,EACf,QAAS,CACP,aAAc,cACd,UAAW,MACb,CACF,
|
|
6
|
-
"names": ["import_device_management_kit", "import_purify_ts", "import_vitest", "import_GetChallengeCommand", "import_BuildTransactionContextTask", "contextModuleMock", "defaultArgs", "solanaContextRightPayload", "apiMock", "result", "
|
|
4
|
+
"sourcesContent": ["/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n CommandResultStatus,\n DeviceModelId,\n type InternalApi,\n} from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { GetChallengeCommand } from \"@internal/app-binder/command/GetChallengeCommand\";\n\nimport {\n BuildTransactionContextTask,\n type SolanaBuildContextResult,\n} from \"./BuildTransactionContextTask\";\n\nconst mockLoggerFactory = () => ({\n debug: vi.fn(),\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n subscribers: [],\n});\n\nconst contextModuleMock: ContextModule = {\n getSolanaContext: vi.fn(),\n} as unknown as ContextModule;\n\nconst defaultArgs = {\n contextModule: contextModuleMock,\n loggerFactory: mockLoggerFactory,\n options: {\n tokenAddress: \"someAddress\",\n createATA: undefined,\n },\n};\n\nconst solanaContextRightPayload = {\n tlvDescriptor: new Uint8Array([1, 2, 3]),\n trustedNamePKICertificate: {\n payload: new Uint8Array([0xaa, 0xbb]),\n keyUsageNumber: 1,\n },\n loadersResults: [], // required by the task's return type\n} as const;\n\nlet apiMock: InternalApi;\n\ndescribe(\"BuildTransactionContextTask\", () => {\n beforeEach(() => {\n vi.resetAllMocks();\n\n apiMock = {\n getDeviceSessionState: vi\n .fn()\n .mockReturnValue({ deviceModelId: DeviceModelId.NANO_X }),\n sendCommand: vi.fn().mockResolvedValue({\n status: CommandResultStatus.Success,\n data: { challenge: \"someChallenge\" },\n }),\n } as unknown as InternalApi;\n });\n\n it(\"returns context successfully when challenge command succeeds\", async () => {\n (contextModuleMock.getSolanaContext as any).mockResolvedValue(\n Right(solanaContextRightPayload),\n );\n\n const task = new BuildTransactionContextTask(apiMock, defaultArgs);\n const result = await task.run();\n\n // challenge is fetched\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n expect.any(GetChallengeCommand),\n );\n\n // getSolanaContext called with challenge\n expect(contextModuleMock.getSolanaContext).toHaveBeenCalledWith({\n deviceModelId: DeviceModelId.NANO_X,\n tokenAddress: \"someAddress\",\n challenge: \"someChallenge\",\n createATA: undefined,\n });\n\n // matches SolanaBuildContextResult shape\n expect(result).toEqual<SolanaBuildContextResult>({\n tlvDescriptor: solanaContextRightPayload.tlvDescriptor,\n trustedNamePKICertificate:\n solanaContextRightPayload.trustedNamePKICertificate,\n loadersResults: [],\n });\n });\n\n it(\"throws if challenge command fails\", async () => {\n (apiMock.sendCommand as any).mockResolvedValue({\n status: CommandResultStatus.Error,\n data: {},\n });\n (contextModuleMock.getSolanaContext as any).mockResolvedValue(\n Right(solanaContextRightPayload),\n );\n\n const task = new BuildTransactionContextTask(apiMock, defaultArgs);\n\n await expect(task.run()).rejects.toThrow(\n \"Failed to get challenge from device\",\n );\n });\n\n it(\"throws if getSolanaContext returns Left\", async () => {\n const error = new Error(\"Solana context failure\");\n (contextModuleMock.getSolanaContext as any).mockResolvedValue(Left(error));\n\n const task = new BuildTransactionContextTask(apiMock, defaultArgs);\n\n await expect(task.run()).rejects.toThrow(\"Solana context failure\");\n });\n});\n"],
|
|
5
|
+
"mappings": "aAIA,IAAAA,EAIO,2CACPC,EAA4B,qBAC5BC,EAAqD,kBAErDC,EAAoC,4DAEpCC,EAGO,yCAEP,MAAMC,EAAoB,KAAO,CAC/B,MAAO,KAAG,GAAG,EACb,KAAM,KAAG,GAAG,EACZ,KAAM,KAAG,GAAG,EACZ,MAAO,KAAG,GAAG,EACb,YAAa,CAAC,CAChB,GAEMC,EAAmC,CACvC,iBAAkB,KAAG,GAAG,CAC1B,EAEMC,EAAc,CAClB,cAAeD,EACf,cAAeD,EACf,QAAS,CACP,aAAc,cACd,UAAW,MACb,CACF,EAEMG,EAA4B,CAChC,cAAe,IAAI,WAAW,CAAC,EAAG,EAAG,CAAC,CAAC,EACvC,0BAA2B,CACzB,QAAS,IAAI,WAAW,CAAC,IAAM,GAAI,CAAC,EACpC,eAAgB,CAClB,EACA,eAAgB,CAAC,CACnB,EAEA,IAAIC,KAEJ,YAAS,8BAA+B,IAAM,IAC5C,cAAW,IAAM,CACf,KAAG,cAAc,EAEjBA,EAAU,CACR,sBAAuB,KACpB,GAAG,EACH,gBAAgB,CAAE,cAAe,gBAAc,MAAO,CAAC,EAC1D,YAAa,KAAG,GAAG,EAAE,kBAAkB,CACrC,OAAQ,sBAAoB,QAC5B,KAAM,CAAE,UAAW,eAAgB,CACrC,CAAC,CACH,CACF,CAAC,KAED,MAAG,+DAAgE,SAAY,CAC5EH,EAAkB,iBAAyB,qBAC1C,SAAME,CAAyB,CACjC,EAGA,MAAME,EAAS,MADF,IAAI,8BAA4BD,EAASF,CAAW,EACvC,IAAI,KAG9B,UAAOE,EAAQ,WAAW,EAAE,qBAC1B,SAAO,IAAI,qBAAmB,CAChC,KAGA,UAAOH,EAAkB,gBAAgB,EAAE,qBAAqB,CAC9D,cAAe,gBAAc,OAC7B,aAAc,cACd,UAAW,gBACX,UAAW,MACb,CAAC,KAGD,UAAOI,CAAM,EAAE,QAAkC,CAC/C,cAAeF,EAA0B,cACzC,0BACEA,EAA0B,0BAC5B,eAAgB,CAAC,CACnB,CAAC,CACH,CAAC,KAED,MAAG,oCAAqC,SAAY,CACjDC,EAAQ,YAAoB,kBAAkB,CAC7C,OAAQ,sBAAoB,MAC5B,KAAM,CAAC,CACT,CAAC,EACAH,EAAkB,iBAAyB,qBAC1C,SAAME,CAAyB,CACjC,EAEA,MAAMG,EAAO,IAAI,8BAA4BF,EAASF,CAAW,EAEjE,QAAM,UAAOI,EAAK,IAAI,CAAC,EAAE,QAAQ,QAC/B,qCACF,CACF,CAAC,KAED,MAAG,0CAA2C,SAAY,CACxD,MAAMC,EAAQ,IAAI,MAAM,wBAAwB,EAC/CN,EAAkB,iBAAyB,qBAAkB,QAAKM,CAAK,CAAC,EAEzE,MAAMD,EAAO,IAAI,8BAA4BF,EAASF,CAAW,EAEjE,QAAM,UAAOI,EAAK,IAAI,CAAC,EAAE,QAAQ,QAAQ,wBAAwB,CACnE,CAAC,CACH,CAAC",
|
|
6
|
+
"names": ["import_device_management_kit", "import_purify_ts", "import_vitest", "import_GetChallengeCommand", "import_BuildTransactionContextTask", "mockLoggerFactory", "contextModuleMock", "defaultArgs", "solanaContextRightPayload", "apiMock", "result", "task", "error"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var g=Object.defineProperty;var k=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var T=Object.prototype.hasOwnProperty;var x=(i,e)=>{for(var a in e)g(i,a,{get:e[a],enumerable:!0})},w=(i,e,a,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of v(e))!T.call(i,r)&&r!==a&&g(i,r,{get:()=>e[r],enumerable:!(t=k(e,r))||t.enumerable});return i};var h=i=>w(g({},"__esModule",{value:!0}),i);var L={};x(L,{ProvideSolanaTransactionContextTask:()=>A,SWAP_MODE:()=>C});module.exports=h(L);var s=require("@ledgerhq/context-module"),n=require("@ledgerhq/device-management-kit"),y=require("purify-ts"),c=require("../../app-binder/command/ProvideTLVTransactionInstructionDescriptorCommand"),S=require("../../app-binder/command/ProvideTLVDescriptorCommand"),f=require("../../app-binder/services/utils/DefaultSolanaMessageNormaliser");const C="test";class A{constructor(e,a){this.api=e;this.args=a;this._logger=a.loggerFactory("ProvideSolanaTransactionContextTask"),this._normaliser=a.normaliser??f.DefaultSolanaMessageNormaliser}_logger;_normaliser;async run(){this._logger.debug("[run] Starting ProvideSolanaTransactionContextTask");const{tlvDescriptor:e,trustedNamePKICertificate:a,loadersResults:t,transactionBytes:r}=this.args;await this.api.sendCommand(new n.LoadCertificateCommand({certificate:a.payload,keyUsage:a.keyUsageNumber})),await this.api.sendCommand(new S.ProvideTLVDescriptorCommand({payload:e})),this._logger.debug("[run] Providing optional Solana context from loaders",{data:{loadersResults:t}});for(const d of t)switch(d.type){case s.SolanaContextTypes.SOLANA_TOKEN:{const o=t.find(l=>l.type===s.SolanaContextTypes.SOLANA_TOKEN);this._logger.debug(`[run] Providing ${s.SolanaContextTypes.SOLANA_TOKEN}`,{data:{args:{tokenMetadataResult:o}}}),o&&await this.provideTokenMetadataContext(o);break}case s.SolanaContextTypes.SOLANA_LIFI:{const o=t.find(l=>l.type===s.SolanaContextTypes.SOLANA_LIFI);this._logger.debug(`[run] Providing ${s.SolanaContextTypes.SOLANA_LIFI}`,{data:{args:{lifiDescriptorListResult:o,transactionBytes:r}}}),o&&await this.provideSwapContext(o,r);break}case s.SolanaContextTypes.ERROR:{this._logger.debug("[run] Loader result of type ERROR, skipping");break}default:{this._logger.debug("[run] Loader result of unknown type, skipping");break}}return y.Nothing}async provideTokenMetadataContext(e){const{payload:a,certificate:t}=e;if(a&&t){const r=await this.api.sendCommand(new n.LoadCertificateCommand({certificate:t.payload,keyUsage:t.keyUsageNumber}));if(!(0,n.isSuccessCommandResult)(r))throw new Error("[SignerSolana] ProvideSolanaTransactionContextTask: Failed to send tokenMetadataCertificate to device, latest firmware version required");await this.api.sendCommand(new c.ProvideTLVTransactionInstructionDescriptorCommand({kind:"descriptor",dataHex:a.solanaTokenDescriptor.data,signatureHex:a.solanaTokenDescriptor.signature,isFirstMessage:!0,swapSignatureTag:!1}))}}async provideSwapContext(e,a){const t=e.payload;if(t){const r=await this._normaliser.normaliseMessage(a);for(const[d,o]of r.compiledInstructions.entries()){const m=r.allKeys[o.programIdIndex]?.toBase58(),p=m?t[m]:void 0,u=p&&p.signatures[C];p&&u?await this.api.sendCommand(new c.ProvideTLVTransactionInstructionDescriptorCommand({kind:"descriptor",dataHex:p.data,signatureHex:u,isFirstMessage:d===0,swapSignatureTag:!0})):await this.api.sendCommand(new c.ProvideTLVTransactionInstructionDescriptorCommand({kind:"empty",isFirstMessage:d===0,swapSignatureTag:!0}))}}}}0&&(module.exports={ProvideSolanaTransactionContextTask,SWAP_MODE});
|
|
2
2
|
//# sourceMappingURL=ProvideTransactionContextTask.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/task/ProvideTransactionContextTask.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n SolanaContextTypes,\n type SolanaLifiContextSuccess,\n type SolanaTokenContextSuccess,\n} from \"@ledgerhq/context-module\";\nimport {\n type CommandErrorResult,\n type InternalApi,\n isSuccessCommandResult,\n LoadCertificateCommand,\n} from \"@ledgerhq/device-management-kit\";\nimport { type Maybe, Nothing } from \"purify-ts\";\n\nimport { ProvideTLVTransactionInstructionDescriptorCommand } from \"@internal/app-binder//command/ProvideTLVTransactionInstructionDescriptorCommand\";\nimport { ProvideTLVDescriptorCommand } from \"@internal/app-binder/command/ProvideTLVDescriptorCommand\";\nimport { type SolanaAppErrorCodes } from \"@internal/app-binder/command/utils/SolanaApplicationErrors\";\nimport {\n DefaultSolanaMessageNormaliser,\n type SolanaMessageNormaliserConstructor,\n} from \"@internal/app-binder/services/utils/DefaultSolanaMessageNormaliser\";\n\nimport { type SolanaBuildContextResult } from \"./BuildTransactionContextTask\";\n\nexport const SWAP_MODE = \"test\";\n\nexport type
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,yCAAAE,EAAA,cAAAC,IAAA,eAAAC,EAAAJ,GAAA,IAAAK,EAIO,oCACPC,
|
|
6
|
-
"names": ["ProvideTransactionContextTask_exports", "__export", "ProvideSolanaTransactionContextTask", "SWAP_MODE", "__toCommonJS", "import_context_module", "import_device_management_kit", "import_purify_ts", "import_ProvideTLVTransactionInstructionDescriptorCommand", "import_ProvideTLVDescriptorCommand", "import_DefaultSolanaMessageNormaliser", "api", "
|
|
4
|
+
"sourcesContent": ["import {\n SolanaContextTypes,\n type SolanaLifiContextSuccess,\n type SolanaTokenContextSuccess,\n} from \"@ledgerhq/context-module\";\nimport {\n type CommandErrorResult,\n type InternalApi,\n isSuccessCommandResult,\n LoadCertificateCommand,\n type LoggerPublisherService,\n} from \"@ledgerhq/device-management-kit\";\nimport { type Maybe, Nothing } from \"purify-ts\";\n\nimport { ProvideTLVTransactionInstructionDescriptorCommand } from \"@internal/app-binder//command/ProvideTLVTransactionInstructionDescriptorCommand\";\nimport { ProvideTLVDescriptorCommand } from \"@internal/app-binder/command/ProvideTLVDescriptorCommand\";\nimport { type SolanaAppErrorCodes } from \"@internal/app-binder/command/utils/SolanaApplicationErrors\";\nimport {\n DefaultSolanaMessageNormaliser,\n type SolanaMessageNormaliserConstructor,\n} from \"@internal/app-binder/services/utils/DefaultSolanaMessageNormaliser\";\n\nimport { type SolanaBuildContextResult } from \"./BuildTransactionContextTask\";\n\nexport const SWAP_MODE = \"test\";\n\nexport type ProvideSolanaTransactionContextTaskArgs =\n SolanaBuildContextResult & {\n readonly transactionBytes: Uint8Array;\n readonly loggerFactory: (tag: string) => LoggerPublisherService;\n readonly normaliser?: SolanaMessageNormaliserConstructor;\n };\n\nexport class ProvideSolanaTransactionContextTask {\n private readonly _logger: LoggerPublisherService;\n private readonly _normaliser: SolanaMessageNormaliserConstructor;\n constructor(\n private readonly api: InternalApi,\n private readonly args: ProvideSolanaTransactionContextTaskArgs,\n ) {\n this._logger = args.loggerFactory(\"ProvideSolanaTransactionContextTask\");\n this._normaliser = args.normaliser ?? DefaultSolanaMessageNormaliser;\n }\n\n async run(): Promise<Maybe<CommandErrorResult<SolanaAppErrorCodes>>> {\n this._logger.debug(\"[run] Starting ProvideSolanaTransactionContextTask\");\n const {\n tlvDescriptor,\n trustedNamePKICertificate,\n loadersResults,\n transactionBytes,\n } = this.args;\n\n // --------------------------------------------------------------------\n // providing default solana context\n\n // send PKI certificate + signature\n await this.api.sendCommand(\n new LoadCertificateCommand({\n certificate: trustedNamePKICertificate.payload,\n keyUsage: trustedNamePKICertificate.keyUsageNumber,\n }),\n );\n\n // send signed descriptor\n await this.api.sendCommand(\n new ProvideTLVDescriptorCommand({ payload: tlvDescriptor }),\n );\n\n // --------------------------------------------------------------------\n // providing optional solana context via context module loaders results\n\n this._logger.debug(\"[run] Providing optional Solana context from loaders\", {\n data: { loadersResults },\n });\n for (const loaderResult of loadersResults) {\n switch (loaderResult.type) {\n // always resolve SOLANA_TOKEN first\n case SolanaContextTypes.SOLANA_TOKEN: {\n const tokenMetadataResult = loadersResults.find(\n (res) => res.type === SolanaContextTypes.SOLANA_TOKEN,\n );\n this._logger.debug(\n `[run] Providing ${SolanaContextTypes.SOLANA_TOKEN}`,\n { data: { args: { tokenMetadataResult } } },\n );\n if (tokenMetadataResult) {\n await this.provideTokenMetadataContext(tokenMetadataResult);\n }\n break;\n }\n\n case SolanaContextTypes.SOLANA_LIFI: {\n const lifiDescriptorListResult = loadersResults.find(\n (res) => res.type === SolanaContextTypes.SOLANA_LIFI,\n );\n this._logger.debug(\n `[run] Providing ${SolanaContextTypes.SOLANA_LIFI}`,\n { data: { args: { lifiDescriptorListResult, transactionBytes } } },\n );\n if (lifiDescriptorListResult) {\n await this.provideSwapContext(\n lifiDescriptorListResult,\n transactionBytes,\n );\n }\n break;\n }\n\n case SolanaContextTypes.ERROR: {\n this._logger.debug(`[run] Loader result of type ERROR, skipping`);\n break;\n }\n\n default: {\n this._logger.debug(`[run] Loader result of unknown type, skipping`);\n break;\n }\n }\n }\n\n return Nothing;\n }\n\n private async provideTokenMetadataContext(\n tokenMetadataResult: SolanaTokenContextSuccess,\n ): Promise<void> {\n const {\n payload: tokenMetadataPayload,\n certificate: tokenMetadataCertificate,\n } = tokenMetadataResult;\n\n if (tokenMetadataPayload && tokenMetadataCertificate) {\n // send token metadata certificate\n const tokenMetadataCertificateToDeviceResult = await this.api.sendCommand(\n new LoadCertificateCommand({\n certificate: tokenMetadataCertificate.payload,\n keyUsage: tokenMetadataCertificate.keyUsageNumber,\n }),\n );\n if (!isSuccessCommandResult(tokenMetadataCertificateToDeviceResult)) {\n // IMPORTANT, TO BE MAPPED TO LatestFirmwareVersionRequired(\"LatestFirmwareVersionRequired\") ERROR\n throw new Error(\n \"[SignerSolana] ProvideSolanaTransactionContextTask: Failed to send tokenMetadataCertificate to device, latest firmware version required\",\n );\n }\n\n // send token metadata signed descriptor\n await this.api.sendCommand(\n new ProvideTLVTransactionInstructionDescriptorCommand({\n kind: \"descriptor\",\n dataHex: tokenMetadataPayload.solanaTokenDescriptor.data,\n signatureHex: tokenMetadataPayload.solanaTokenDescriptor.signature,\n // token metadata is a single chunk, so this is always the first message\n isFirstMessage: true,\n swapSignatureTag: false,\n }),\n );\n }\n }\n\n private async provideSwapContext(\n lifiDescriptorListResult: SolanaLifiContextSuccess,\n transactionBytes: Uint8Array,\n ): Promise<void> {\n const lifiDescriptors = lifiDescriptorListResult.payload;\n\n if (lifiDescriptors) {\n const message = await this._normaliser.normaliseMessage(transactionBytes);\n\n for (const [\n index,\n instruction,\n ] of message.compiledInstructions.entries()) {\n const programId = message.allKeys[instruction.programIdIndex];\n const programIdStr = programId?.toBase58();\n const descriptor = programIdStr\n ? lifiDescriptors[programIdStr]\n : undefined;\n\n const sigHex = descriptor && descriptor.signatures[SWAP_MODE];\n\n if (descriptor && sigHex) {\n await this.api.sendCommand(\n new ProvideTLVTransactionInstructionDescriptorCommand({\n kind: \"descriptor\",\n dataHex: descriptor.data,\n signatureHex: sigHex,\n isFirstMessage: index === 0,\n swapSignatureTag: true,\n }),\n );\n } else {\n await this.api.sendCommand(\n new ProvideTLVTransactionInstructionDescriptorCommand({\n kind: \"empty\",\n isFirstMessage: index === 0,\n swapSignatureTag: true,\n }),\n );\n }\n }\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["ProvideTransactionContextTask_exports", "__export", "ProvideSolanaTransactionContextTask", "SWAP_MODE", "__toCommonJS", "import_context_module", "import_device_management_kit", "import_purify_ts", "import_ProvideTLVTransactionInstructionDescriptorCommand", "import_ProvideTLVDescriptorCommand", "import_DefaultSolanaMessageNormaliser", "api", "args", "tlvDescriptor", "trustedNamePKICertificate", "loadersResults", "transactionBytes", "loaderResult", "tokenMetadataResult", "res", "lifiDescriptorListResult", "tokenMetadataPayload", "tokenMetadataCertificate", "tokenMetadataCertificateToDeviceResult", "lifiDescriptors", "message", "index", "instruction", "programIdStr", "descriptor", "sigHex"]
|
|
7
7
|
}
|