@ledgerhq/device-signer-kit-solana 1.13.2 → 1.13.3
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/app-binder/ProvisionTransactionCheckDeviceActionTypes.js +1 -1
- package/lib/cjs/api/app-binder/ProvisionTransactionCheckDeviceActionTypes.js.map +1 -1
- package/lib/cjs/api/app-binder/SignBasicClearSignDeviceActionTypes.js +1 -1
- package/lib/cjs/api/app-binder/SignBasicClearSignDeviceActionTypes.js.map +1 -1
- package/lib/cjs/api/app-binder/SignClearSignDeviceActionTypes.js +1 -1
- package/lib/cjs/api/app-binder/SignClearSignDeviceActionTypes.js.map +2 -2
- package/lib/cjs/internal/app-binder/device-action/ProvisionTransactionCheckDeviceAction.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/ProvisionTransactionCheckDeviceAction.js.map +2 -2
- package/lib/cjs/internal/app-binder/device-action/SignBasicClearSignDeviceAction.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/SignBasicClearSignDeviceAction.js.map +3 -3
- package/lib/cjs/internal/app-binder/device-action/SignBasicClearSignDeviceAction.test.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/SignBasicClearSignDeviceAction.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 +2 -2
- 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/services/BlockhashService.js +1 -1
- package/lib/cjs/internal/app-binder/services/BlockhashService.js.map +3 -3
- package/lib/cjs/internal/app-binder/services/BlockhashService.test.js +1 -1
- package/lib/cjs/internal/app-binder/services/BlockhashService.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/ProvideGenericClearSignContextTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/ProvideGenericClearSignContextTask.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/ProvideGenericClearSignContextTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/ProvideGenericClearSignContextTask.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/ProvideTransactionCheckTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/ProvideTransactionCheckTask.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/ProvideTransactionCheckTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/ProvideTransactionCheckTask.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/RefreshBlockhashTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/RefreshBlockhashTask.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/RefreshBlockhashTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/RefreshBlockhashTask.test.js.map +3 -3
- package/lib/cjs/package.json +2 -2
- package/lib/esm/api/app-binder/SignClearSignDeviceActionTypes.js +1 -1
- package/lib/esm/api/app-binder/SignClearSignDeviceActionTypes.js.map +2 -2
- package/lib/esm/internal/app-binder/device-action/ProvisionTransactionCheckDeviceAction.js +1 -1
- package/lib/esm/internal/app-binder/device-action/ProvisionTransactionCheckDeviceAction.js.map +2 -2
- package/lib/esm/internal/app-binder/device-action/SignBasicClearSignDeviceAction.js +1 -1
- package/lib/esm/internal/app-binder/device-action/SignBasicClearSignDeviceAction.js.map +3 -3
- package/lib/esm/internal/app-binder/device-action/SignBasicClearSignDeviceAction.test.js +1 -1
- package/lib/esm/internal/app-binder/device-action/SignBasicClearSignDeviceAction.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 +2 -2
- 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/services/BlockhashService.js +1 -1
- package/lib/esm/internal/app-binder/services/BlockhashService.js.map +3 -3
- package/lib/esm/internal/app-binder/services/BlockhashService.test.js +1 -1
- package/lib/esm/internal/app-binder/services/BlockhashService.test.js.map +3 -3
- package/lib/esm/internal/app-binder/task/ProvideGenericClearSignContextTask.js +1 -1
- package/lib/esm/internal/app-binder/task/ProvideGenericClearSignContextTask.js.map +3 -3
- package/lib/esm/internal/app-binder/task/ProvideGenericClearSignContextTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/ProvideGenericClearSignContextTask.test.js.map +3 -3
- package/lib/esm/internal/app-binder/task/ProvideTransactionCheckTask.js +1 -1
- package/lib/esm/internal/app-binder/task/ProvideTransactionCheckTask.js.map +3 -3
- package/lib/esm/internal/app-binder/task/ProvideTransactionCheckTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/ProvideTransactionCheckTask.test.js.map +3 -3
- package/lib/esm/internal/app-binder/task/RefreshBlockhashTask.js +1 -1
- package/lib/esm/internal/app-binder/task/RefreshBlockhashTask.js.map +3 -3
- package/lib/esm/internal/app-binder/task/RefreshBlockhashTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/RefreshBlockhashTask.test.js.map +3 -3
- package/lib/esm/package.json +2 -2
- package/lib/types/api/app-binder/ProvisionTransactionCheckDeviceActionTypes.d.ts +0 -1
- package/lib/types/api/app-binder/ProvisionTransactionCheckDeviceActionTypes.d.ts.map +1 -1
- package/lib/types/api/app-binder/SignBasicClearSignDeviceActionTypes.d.ts +0 -1
- package/lib/types/api/app-binder/SignBasicClearSignDeviceActionTypes.d.ts.map +1 -1
- package/lib/types/api/app-binder/SignClearSignDeviceActionTypes.d.ts +0 -1
- package/lib/types/api/app-binder/SignClearSignDeviceActionTypes.d.ts.map +1 -1
- package/lib/types/internal/app-binder/device-action/ProvisionTransactionCheckDeviceAction.d.ts +0 -1
- package/lib/types/internal/app-binder/device-action/ProvisionTransactionCheckDeviceAction.d.ts.map +1 -1
- package/lib/types/internal/app-binder/device-action/SignBasicClearSignDeviceAction.d.ts +2 -7
- package/lib/types/internal/app-binder/device-action/SignBasicClearSignDeviceAction.d.ts.map +1 -1
- package/lib/types/internal/app-binder/device-action/SignTransactionDeviceAction.d.ts.map +1 -1
- package/lib/types/internal/app-binder/services/BlockhashService.d.ts +15 -5
- package/lib/types/internal/app-binder/services/BlockhashService.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/ProvideGenericClearSignContextTask.d.ts +0 -3
- package/lib/types/internal/app-binder/task/ProvideGenericClearSignContextTask.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/ProvideTransactionCheckTask.d.ts +0 -11
- package/lib/types/internal/app-binder/task/ProvideTransactionCheckTask.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/RefreshBlockhashTask.d.ts +3 -2
- package/lib/types/internal/app-binder/task/RefreshBlockhashTask.d.ts.map +1 -1
- package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
- package/package.json +5 -5
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var r=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var
|
|
1
|
+
"use strict";var r=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var c=(n,e,i,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of p(e))!l.call(n,t)&&t!==i&&r(n,t,{get:()=>e[t],enumerable:!(o=a(e,t))||o.enumerable});return n};var s=n=>c(r({},"__esModule",{value:!0}),n);var d={};module.exports=s(d);
|
|
2
2
|
//# sourceMappingURL=ProvisionTransactionCheckDeviceActionTypes.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/api/app-binder/ProvisionTransactionCheckDeviceActionTypes.ts"],
|
|
4
|
-
"sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\n\nimport {\n type SignTransactionDAIntermediateValue,\n type SignTransactionDASimpleIntermediateValue,\n} from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { type AppConfiguration } from \"@api/model/AppConfiguration\";\n\nexport type ProvisionTransactionCheckDAInput = {\n readonly derivationPath: string;\n readonly transaction: Uint8Array;\n readonly contextModule: ContextModule;\n // Supplied at invoke time (depends on parent's runtime state)\n readonly appConfig?: AppConfiguration;\n readonly
|
|
4
|
+
"sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\n\nimport {\n type SignTransactionDAIntermediateValue,\n type SignTransactionDASimpleIntermediateValue,\n} from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { type AppConfiguration } from \"@api/model/AppConfiguration\";\n\nexport type ProvisionTransactionCheckDAInput = {\n readonly derivationPath: string;\n readonly transaction: Uint8Array;\n readonly contextModule: ContextModule;\n // Supplied at invoke time (depends on parent's runtime state)\n readonly appConfig?: AppConfiguration;\n readonly serializedForTxCheck?: Uint8Array;\n};\n\n/**\n * Best-effort: the machine provisions the tx-check descriptor but never\n * signs; any failure is swallowed, so the output is always `Right`.\n */\nexport type ProvisionTransactionCheckDAOutput = void;\n\nexport type ProvisionTransactionCheckDAError = never;\n\n/**\n * Emits the full union so the opt-in-result step's `result` field is\n * preserved when the parent forwards child snapshots.\n */\nexport type ProvisionTransactionCheckDAIntermediateValue =\n SignTransactionDAIntermediateValue;\n\nexport type ProvisionTransactionCheckDAInternalState = {\n // Starts from input.appConfig; updated with transactionChecksEnabled after opt-in.\n readonly appConfig: AppConfiguration | null;\n};\n\nexport type ProvisionTransactionCheckDASimpleIntermediateValue =\n SignTransactionDASimpleIntermediateValue;\n"],
|
|
5
5
|
"mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
|
|
6
6
|
"names": ["ProvisionTransactionCheckDeviceActionTypes_exports", "__toCommonJS"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var t=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var p=(r,e,a,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of S(e))!l.call(r,n)&&n!==a&&t(r,n,{get:()=>e[n],enumerable:!(i=g(e,n))||i.enumerable});return r};var o=r=>p(t({},"__esModule",{value:!0}),r);var u={};module.exports=o(u);
|
|
2
2
|
//# sourceMappingURL=SignBasicClearSignDeviceActionTypes.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/api/app-binder/SignBasicClearSignDeviceActionTypes.ts"],
|
|
4
|
-
"sourcesContent": ["import { type ExecuteDeviceActionReturnType } from \"@ledgerhq/device-management-kit\";\n\nimport {\n type SignClearSignDAError,\n type SignClearSignDAInput,\n type SignClearSignDAIntermediateValue,\n} from \"@api/app-binder/SignClearSignDeviceActionTypes\";\nimport { type Signature } from \"@api/model/Signature\";\n\nexport type SignBasicClearSignDAInput = SignClearSignDAInput;\n\nexport type SignBasicClearSignDAError = SignClearSignDAError;\n\nexport type SignBasicClearSignDAIntermediateValue =\n SignClearSignDAIntermediateValue;\n\nexport type SignBasicClearSignDAOutput = Signature;\n\nexport type SignBasicClearSignDAInternalState = {\n readonly error: SignBasicClearSignDAError | null;\n readonly signature: Signature | null;\n readonly
|
|
4
|
+
"sourcesContent": ["import { type ExecuteDeviceActionReturnType } from \"@ledgerhq/device-management-kit\";\n\nimport {\n type SignClearSignDAError,\n type SignClearSignDAInput,\n type SignClearSignDAIntermediateValue,\n} from \"@api/app-binder/SignClearSignDeviceActionTypes\";\nimport { type Signature } from \"@api/model/Signature\";\n\nexport type SignBasicClearSignDAInput = SignClearSignDAInput;\n\nexport type SignBasicClearSignDAError = SignClearSignDAError;\n\nexport type SignBasicClearSignDAIntermediateValue =\n SignClearSignDAIntermediateValue;\n\nexport type SignBasicClearSignDAOutput = Signature;\n\nexport type SignBasicClearSignDAInternalState = {\n readonly error: SignBasicClearSignDAError | null;\n readonly signature: Signature | null;\n readonly previewFallback: boolean;\n readonly transactionToSign: Uint8Array | null;\n};\n\nexport type SignBasicClearSignDAReturnType = ExecuteDeviceActionReturnType<\n SignBasicClearSignDAOutput,\n SignBasicClearSignDAError,\n SignBasicClearSignDAIntermediateValue\n>;\n"],
|
|
5
5
|
"mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
|
|
6
6
|
"names": ["SignBasicClearSignDeviceActionTypes_exports", "__toCommonJS"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var p=Object.defineProperty;var
|
|
1
|
+
"use strict";var p=Object.defineProperty;var o=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var s=Object.prototype.hasOwnProperty;var S=(r,e)=>{for(var n in e)p(r,n,{get:e[n],enumerable:!0})},l=(r,e,n,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of a(e))!s.call(r,t)&&t!==n&&p(r,t,{get:()=>e[t],enumerable:!(i=o(e,t))||i.enumerable});return r};var A=r=>l(p({},"__esModule",{value:!0}),r);var y={};S(y,{signClearSignDAStateSteps:()=>g});module.exports=A(y);const g=Object.freeze({PREVIEW_TRANSACTION:"signer.sol.steps.previewTransaction",FETCH_BLOCKHASH:"signer.sol.steps.fetchBlockhash",PROMPT_UI_DISPLAY:"signer.sol.steps.promptUiDisplay",DELAYED_SIGN:"signer.sol.steps.delayedSign",SIGN_TRANSACTION:"signer.sol.steps.signTransaction",FALLBACK_TO_NON_DELAYED_SIGN:"signer.sol.steps.fallbackToNonDelayedSign"});0&&(module.exports={signClearSignDAStateSteps});
|
|
2
2
|
//# sourceMappingURL=SignClearSignDeviceActionTypes.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/api/app-binder/SignClearSignDeviceActionTypes.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type OpenAppDAError,\n type OpenAppDARequiredInteraction,\n type SendCommandInAppDAError,\n type UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type UserInputType } from \"@api/model/TransactionResolutionContext\";\nimport { type SolanaAppErrorCodes } from \"@internal/app-binder/command/utils/SolanaApplicationErrors\";\nimport { type BlockhashService } from \"@internal/app-binder/services/BlockhashService\";\n\n/**\n * Steps shared by the two terminal signing machines\n * (`SignGenericClearSignDeviceAction` and `SignBasicClearSignDeviceAction`).\n * The blockhash refresh runs host-side via `RefreshBlockhashTask` and surfaces\n * as the single `FETCH_BLOCKHASH` step.\n */\nexport const signClearSignDAStateSteps = Object.freeze({\n
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,+BAAAE,IAAA,eAAAC,EAAAH,GAiBO,MAAME,EAA4B,OAAO,OAAO,CACrD,
|
|
4
|
+
"sourcesContent": ["import {\n type OpenAppDAError,\n type OpenAppDARequiredInteraction,\n type SendCommandInAppDAError,\n type UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type UserInputType } from \"@api/model/TransactionResolutionContext\";\nimport { type SolanaAppErrorCodes } from \"@internal/app-binder/command/utils/SolanaApplicationErrors\";\nimport { type BlockhashService } from \"@internal/app-binder/services/BlockhashService\";\n\n/**\n * Steps shared by the two terminal signing machines\n * (`SignGenericClearSignDeviceAction` and `SignBasicClearSignDeviceAction`).\n * The blockhash refresh runs host-side via `RefreshBlockhashTask` and surfaces\n * as the single `FETCH_BLOCKHASH` step.\n */\nexport const signClearSignDAStateSteps = Object.freeze({\n PREVIEW_TRANSACTION: \"signer.sol.steps.previewTransaction\",\n FETCH_BLOCKHASH: \"signer.sol.steps.fetchBlockhash\",\n PROMPT_UI_DISPLAY: \"signer.sol.steps.promptUiDisplay\",\n DELAYED_SIGN: \"signer.sol.steps.delayedSign\",\n SIGN_TRANSACTION: \"signer.sol.steps.signTransaction\",\n FALLBACK_TO_NON_DELAYED_SIGN: \"signer.sol.steps.fallbackToNonDelayedSign\",\n} as const);\n\nexport type SignClearSignDAStateStep =\n (typeof signClearSignDAStateSteps)[keyof typeof signClearSignDAStateSteps];\n\n/**\n * Input shared by both terminal signing machines. The blockhash source\n * (`rpcUrl` / `fetchBlockhash`) is only populated by the caller when a delayed\n * blockhash refresh is allowed; when withheld, the original transaction is\n * signed as-is.\n */\nexport type SignClearSignDAInput = {\n readonly derivationPath: string;\n readonly transaction: Uint8Array;\n readonly rpcUrl?: string;\n readonly fetchBlockhash?: () => Promise<Uint8Array>;\n readonly userInputType?: UserInputType;\n readonly blockhashService?: BlockhashService;\n};\n\nexport type SignClearSignDAError =\n | OpenAppDAError\n | SendCommandInAppDAError<SolanaAppErrorCodes>;\n\ntype SignClearSignDARequiredInteraction =\n | UserInteractionRequired\n | OpenAppDARequiredInteraction;\n\nexport type SignClearSignDAIntermediateValue = {\n requiredUserInteraction: SignClearSignDARequiredInteraction;\n step: SignClearSignDAStateStep;\n};\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,+BAAAE,IAAA,eAAAC,EAAAH,GAiBO,MAAME,EAA4B,OAAO,OAAO,CACrD,oBAAqB,sCACrB,gBAAiB,kCACjB,kBAAmB,mCACnB,aAAc,+BACd,iBAAkB,mCAClB,6BAA8B,2CAChC,CAAU",
|
|
6
6
|
"names": ["SignClearSignDeviceActionTypes_exports", "__export", "signClearSignDAStateSteps", "__toCommonJS"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var p=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames;var T=Object.prototype.hasOwnProperty;var v=(o,
|
|
1
|
+
"use strict";var p=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames;var T=Object.prototype.hasOwnProperty;var v=(o,e)=>{for(var i in e)p(o,i,{get:e[i],enumerable:!0})},I=(o,e,i,c)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of k(e))!T.call(o,n)&&n!==i&&p(o,n,{get:()=>e[n],enumerable:!(c=l(e,n))||c.enumerable});return o};var m=o=>I(p({},"__esModule",{value:!0}),o);var A={};v(A,{ProvisionTransactionCheckDeviceAction:()=>P});module.exports=m(A);var a=require("@ledgerhq/device-management-kit"),C=require("purify-ts"),r=require("xstate"),s=require("../../../api/app-binder/SignTransactionDeviceActionTypes"),u=require("../../app-binder/command/TransactionCheckOptInCommand"),h=require("../../app-binder/task/ProvideTransactionCheckTask");class P extends a.XStateDeviceAction{makeStateMachine(e){const{transactionCheckOptIn:i,provideTransactionCheck:c}=this.extractDependencies(e),n=this.getLoggerFactory(e)("ProvisionTransactionCheckDeviceAction");return(0,r.setup)({types:{input:{},context:{},output:{}},actors:{transactionCheckOptIn:(0,r.fromPromise)(i),provideTransactionCheck:(0,r.fromPromise)(c)},guards:{shouldOptIn:({context:t})=>!!t._internalState.appConfig&&!t._internalState.appConfig.transactionChecksEnabled&&!t._internalState.appConfig.transactionChecksOptIn,transactionChecksEnabled:({context:t})=>t._internalState.appConfig?.transactionChecksEnabled===!0}}).createMachine({id:"ProvisionTransactionCheckDeviceAction",initial:"OptInGate",context:({input:t})=>({input:t,intermediateValue:{requiredUserInteraction:a.UserInteractionRequired.None,step:s.signTransactionDAStateSteps.TRANSACTION_CHECKS_OPT_IN},_internalState:{appConfig:t.appConfig??null}}),states:{OptInGate:{always:[{target:"OptIn",guard:"shouldOptIn"},{target:"ProvideGate"}]},OptIn:{entry:(0,r.assign)({intermediateValue:()=>({requiredUserInteraction:a.UserInteractionRequired.Web3ChecksOptIn,step:s.signTransactionDAStateSteps.TRANSACTION_CHECKS_OPT_IN})}),invoke:{id:"transactionCheckOptIn",src:"transactionCheckOptIn",onDone:{target:"OptInResult",actions:[({event:t})=>{(0,a.isSuccessCommandResult)(t.output)||n.warn("[TransactionCheck] opt-in command returned error, proceeding without transaction-checks",{data:{error:t.output}})},(0,r.assign)({_internalState:({event:t,context:d})=>(0,a.isSuccessCommandResult)(t.output)?{appConfig:{...d._internalState.appConfig,transactionChecksEnabled:t.output.data.enabled}}:d._internalState})]},onError:{target:"OptInResult",actions:({event:t})=>n.info("[TransactionCheck] opt-in threw; proceeding without transaction-checks",{data:{error:String(t.error)}})}}},OptInResult:{entry:(0,r.assign)(({context:t})=>({intermediateValue:{requiredUserInteraction:a.UserInteractionRequired.None,step:s.signTransactionDAStateSteps.TRANSACTION_CHECKS_OPT_IN_RESULT,result:t._internalState.appConfig?.transactionChecksEnabled??!1}})),after:{0:{target:"ProvideGate"}}},ProvideGate:{always:[{target:"Provide",guard:"transactionChecksEnabled"},{target:"Done"}]},Provide:{entry:(0,r.assign)({intermediateValue:()=>({requiredUserInteraction:a.UserInteractionRequired.None,step:s.signTransactionDAStateSteps.TRANSACTION_CHECKS_PROVIDE})}),invoke:{id:"provideTransactionCheck",src:"provideTransactionCheck",input:({context:t})=>({derivationPath:t.input.derivationPath,transaction:t.input.transaction,contextModule:t.input.contextModule,serializedForTxCheck:t.input.serializedForTxCheck}),onDone:{target:"Done"},onError:{target:"Done",actions:({event:t})=>n.info("[TransactionCheck] provide threw; proceeding",{data:{error:String(t.error)}})}}},Done:{type:"final"}},output:()=>(0,C.Right)(void 0)})}extractDependencies(e){return{transactionCheckOptIn:async()=>e.sendCommand(new u.TransactionCheckOptInCommand),provideTransactionCheck:async n=>new h.ProvideTransactionCheckTask(e,{derivationPath:n.input.derivationPath,transactionBytes:n.input.transaction,contextModule:n.input.contextModule,serializedTransactionForTransactionCheck:n.input.serializedForTxCheck,loggerFactory:this.getLoggerFactory(e)}).run()}}}0&&(module.exports={ProvisionTransactionCheckDeviceAction});
|
|
2
2
|
//# sourceMappingURL=ProvisionTransactionCheckDeviceAction.js.map
|
package/lib/cjs/internal/app-binder/device-action/ProvisionTransactionCheckDeviceAction.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/device-action/ProvisionTransactionCheckDeviceAction.ts"],
|
|
4
|
-
"sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n type CommandResult,\n type DeviceActionStateMachine,\n type InternalApi,\n isSuccessCommandResult,\n type StateMachineTypes,\n UserInteractionRequired,\n XStateDeviceAction,\n} from \"@ledgerhq/device-management-kit\";\nimport { Right } from \"purify-ts\";\nimport { assign, fromPromise, setup } from \"xstate\";\n\nimport {\n type ProvisionTransactionCheckDAError,\n type ProvisionTransactionCheckDAInput,\n type ProvisionTransactionCheckDAIntermediateValue,\n type ProvisionTransactionCheckDAInternalState,\n type ProvisionTransactionCheckDAOutput,\n} from \"@api/app-binder/ProvisionTransactionCheckDeviceActionTypes\";\nimport { signTransactionDAStateSteps } from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport {\n TransactionCheckOptInCommand,\n type TransactionCheckOptInCommandResponse,\n} from \"@internal/app-binder/command/TransactionCheckOptInCommand\";\nimport { type SolanaAppErrorCodes } from \"@internal/app-binder/command/utils/SolanaApplicationErrors\";\nimport { ProvideTransactionCheckTask } from \"@internal/app-binder/task/ProvideTransactionCheckTask\";\n\nexport type MachineDependencies = {\n readonly transactionCheckOptIn: () => Promise<\n CommandResult<TransactionCheckOptInCommandResponse, SolanaAppErrorCodes>\n >;\n readonly provideTransactionCheck: (arg0: {\n input: {\n derivationPath: string;\n transaction: Uint8Array;\n contextModule: ContextModule;\n
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,2CAAAE,IAAA,eAAAC,EAAAH,GACA,IAAAI,EAQO,2CACPC,EAAsB,qBACtBC,EAA2C,kBAS3CC,EAA4C,4DAC5CC,EAGO,qEAEPC,EAA4C,
|
|
4
|
+
"sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n type CommandResult,\n type DeviceActionStateMachine,\n type InternalApi,\n isSuccessCommandResult,\n type StateMachineTypes,\n UserInteractionRequired,\n XStateDeviceAction,\n} from \"@ledgerhq/device-management-kit\";\nimport { Right } from \"purify-ts\";\nimport { assign, fromPromise, setup } from \"xstate\";\n\nimport {\n type ProvisionTransactionCheckDAError,\n type ProvisionTransactionCheckDAInput,\n type ProvisionTransactionCheckDAIntermediateValue,\n type ProvisionTransactionCheckDAInternalState,\n type ProvisionTransactionCheckDAOutput,\n} from \"@api/app-binder/ProvisionTransactionCheckDeviceActionTypes\";\nimport { signTransactionDAStateSteps } from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport {\n TransactionCheckOptInCommand,\n type TransactionCheckOptInCommandResponse,\n} from \"@internal/app-binder/command/TransactionCheckOptInCommand\";\nimport { type SolanaAppErrorCodes } from \"@internal/app-binder/command/utils/SolanaApplicationErrors\";\nimport { ProvideTransactionCheckTask } from \"@internal/app-binder/task/ProvideTransactionCheckTask\";\n\nexport type MachineDependencies = {\n readonly transactionCheckOptIn: () => Promise<\n CommandResult<TransactionCheckOptInCommandResponse, SolanaAppErrorCodes>\n >;\n readonly provideTransactionCheck: (arg0: {\n input: {\n derivationPath: string;\n transaction: Uint8Array;\n contextModule: ContextModule;\n serializedForTxCheck?: Uint8Array;\n };\n }) => Promise<void>;\n};\n\nexport class ProvisionTransactionCheckDeviceAction extends XStateDeviceAction<\n ProvisionTransactionCheckDAOutput,\n ProvisionTransactionCheckDAInput,\n ProvisionTransactionCheckDAError,\n ProvisionTransactionCheckDAIntermediateValue,\n ProvisionTransactionCheckDAInternalState\n> {\n makeStateMachine(\n internalApi: InternalApi,\n ): DeviceActionStateMachine<\n ProvisionTransactionCheckDAOutput,\n ProvisionTransactionCheckDAInput,\n ProvisionTransactionCheckDAError,\n ProvisionTransactionCheckDAIntermediateValue,\n ProvisionTransactionCheckDAInternalState\n > {\n type types = StateMachineTypes<\n ProvisionTransactionCheckDAOutput,\n ProvisionTransactionCheckDAInput,\n ProvisionTransactionCheckDAError,\n ProvisionTransactionCheckDAIntermediateValue,\n ProvisionTransactionCheckDAInternalState\n >;\n\n const { transactionCheckOptIn, provideTransactionCheck } =\n this.extractDependencies(internalApi);\n\n const logger = this.getLoggerFactory(internalApi)(\n \"ProvisionTransactionCheckDeviceAction\",\n );\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 transactionCheckOptIn: fromPromise(transactionCheckOptIn),\n provideTransactionCheck: fromPromise(provideTransactionCheck),\n },\n guards: {\n shouldOptIn: ({ context }) =>\n !!context._internalState.appConfig &&\n !context._internalState.appConfig.transactionChecksEnabled &&\n !context._internalState.appConfig.transactionChecksOptIn,\n transactionChecksEnabled: ({ context }) =>\n context._internalState.appConfig?.transactionChecksEnabled === true,\n },\n }).createMachine({\n id: \"ProvisionTransactionCheckDeviceAction\",\n initial: \"OptInGate\",\n context: ({ input }) => ({\n input,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.TRANSACTION_CHECKS_OPT_IN,\n },\n _internalState: {\n appConfig: input.appConfig ?? null,\n },\n }),\n states: {\n OptInGate: {\n always: [\n { target: \"OptIn\", guard: \"shouldOptIn\" },\n { target: \"ProvideGate\" },\n ],\n },\n OptIn: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.Web3ChecksOptIn,\n step: signTransactionDAStateSteps.TRANSACTION_CHECKS_OPT_IN,\n }),\n }),\n invoke: {\n id: \"transactionCheckOptIn\",\n src: \"transactionCheckOptIn\",\n onDone: {\n target: \"OptInResult\",\n actions: [\n ({ event }) => {\n if (!isSuccessCommandResult(event.output)) {\n logger.warn(\n \"[TransactionCheck] opt-in command returned error, proceeding without transaction-checks\",\n { data: { error: event.output } },\n );\n }\n },\n assign({\n _internalState: ({ event, context }) => {\n if (isSuccessCommandResult(event.output)) {\n return {\n appConfig: {\n ...context._internalState.appConfig!,\n transactionChecksEnabled: event.output.data.enabled,\n },\n };\n }\n return context._internalState;\n },\n }),\n ],\n },\n onError: {\n target: \"OptInResult\",\n actions: ({ event }) =>\n logger.info(\n \"[TransactionCheck] opt-in threw; proceeding without transaction-checks\",\n { data: { error: String(event.error) } },\n ),\n },\n },\n },\n OptInResult: {\n entry: assign(({ context }) => ({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.TRANSACTION_CHECKS_OPT_IN_RESULT,\n result:\n context._internalState.appConfig?.transactionChecksEnabled ??\n false,\n },\n })),\n // Zero-delay transition so the entry assign above is visible to\n // onSnapshot observers before the machine moves on.\n after: {\n 0: { target: \"ProvideGate\" },\n },\n },\n ProvideGate: {\n always: [\n { target: \"Provide\", guard: \"transactionChecksEnabled\" },\n { target: \"Done\" },\n ],\n },\n Provide: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.TRANSACTION_CHECKS_PROVIDE,\n }),\n }),\n invoke: {\n id: \"provideTransactionCheck\",\n src: \"provideTransactionCheck\",\n input: ({ context }) => ({\n derivationPath: context.input.derivationPath,\n transaction: context.input.transaction,\n contextModule: context.input.contextModule,\n serializedForTxCheck: context.input.serializedForTxCheck,\n }),\n onDone: { target: \"Done\" },\n onError: {\n target: \"Done\",\n actions: ({ event }) =>\n logger.info(\"[TransactionCheck] provide threw; proceeding\", {\n data: { error: String(event.error) },\n }),\n },\n },\n },\n Done: { type: \"final\" },\n },\n output: () => Right(undefined),\n });\n }\n\n extractDependencies(internalApi: InternalApi): MachineDependencies {\n const transactionCheckOptIn = async () =>\n internalApi.sendCommand(new TransactionCheckOptInCommand());\n\n const provideTransactionCheck = async (arg0: {\n input: {\n derivationPath: string;\n transaction: Uint8Array;\n contextModule: ContextModule;\n serializedForTxCheck?: Uint8Array;\n };\n }) =>\n new ProvideTransactionCheckTask(internalApi, {\n derivationPath: arg0.input.derivationPath,\n transactionBytes: arg0.input.transaction,\n contextModule: arg0.input.contextModule,\n serializedTransactionForTransactionCheck:\n arg0.input.serializedForTxCheck,\n loggerFactory: this.getLoggerFactory(internalApi),\n }).run();\n\n return { transactionCheckOptIn, provideTransactionCheck };\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["ProvisionTransactionCheckDeviceAction_exports", "__export", "ProvisionTransactionCheckDeviceAction", "__toCommonJS", "import_device_management_kit", "import_purify_ts", "import_xstate", "import_SignTransactionDeviceActionTypes", "import_TransactionCheckOptInCommand", "import_ProvideTransactionCheckTask", "internalApi", "transactionCheckOptIn", "provideTransactionCheck", "logger", "context", "input", "event", "arg0"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var S=Object.defineProperty;var D=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames;var E=Object.prototype.hasOwnProperty;var f=(s,r)=>{for(var o in r)S(s,o,{get:r[o],enumerable:!0})},B=(s,r,o,c)=>{if(r&&typeof r=="object"||typeof r=="function")for(let p of k(r))!E.call(s,p)&&p!==o&&S(s,p,{get:()=>r[p],enumerable:!(c=D(r,p))||c.enumerable});return s};var P=s=>B(S({},"__esModule",{value:!0}),s);var _={};f(_,{SignBasicClearSignDeviceAction:()=>U});module.exports=P(_);var a=require("@ledgerhq/device-management-kit"),g=require("purify-ts"),t=require("xstate"),u=require("../../../api/app-binder/SignClearSignDeviceActionTypes"),T=require("../../app-binder/command/DelayedSignTransactionCommand"),m=require("../../app-binder/command/SignTransactionCommand"),I=require("../../app-binder/command/SignTransactionPreviewCommand"),v=require("../../app-binder/command/utils/SolanaApplicationErrors"),A=require("../../app-binder/services/BlockhashService"),C=require("../../app-binder/task/RefreshBlockhashTask"),l=require("../../app-binder/task/SendSignDataTask");const w="6985";function d(s,r){if(!(0,a.isSuccessCommandResult)(r))return{...s,error:r.error};const o=r.data.extract();return r.data.isJust()&&o instanceof Uint8Array?{...s,signature:o}:{...s,error:new a.UnknownDAError("No signature available")}}class U extends a.XStateDeviceAction{makeStateMachine(r){const{previewTransaction:o,refreshBlockhash:c,delayedSignTransaction:p,signTransaction:h}=this.extractDependencies(r),y=this.getLoggerFactory(r)("SignBasicClearSignDeviceAction");return(0,t.setup)({types:{input:{},context:{},output:{}},actors:{previewTransaction:(0,t.fromPromise)(o),refreshBlockhash:(0,t.fromPromise)(c),delayedSignTransaction:(0,t.fromPromise)(p),signTransaction:(0,t.fromPromise)(h)},guards:{noInternalError:({context:e})=>e._internalState.error===null,isPreviewFallback:({context:e})=>e._internalState.previewFallback,hasBlockhashSource:({context:e})=>!!(e.input.rpcUrl||e.input.fetchBlockhash)},actions:{assignErrorFromEvent:(0,t.assign)({_internalState:e=>({...e.context._internalState,error:new a.UnknownDAError(e.event.error instanceof Error?e.event.error.message:String(e.event.error))})})}}).createMachine({id:"SignBasicClearSignDeviceAction",initial:"Entry",context:({input:e})=>({input:e,intermediateValue:{requiredUserInteraction:a.UserInteractionRequired.None,step:u.signClearSignDAStateSteps.PREVIEW_TRANSACTION},_internalState:{error:null,signature:null,previewFallback:!1,transactionToSign:null}}),states:{Entry:{always:[{target:"PreviewTransaction",guard:"hasBlockhashSource"},{target:"Sign"}]},PreviewTransaction:{entry:(0,t.assign)({intermediateValue:{requiredUserInteraction:a.UserInteractionRequired.SignTransaction,step:u.signClearSignDAStateSteps.PREVIEW_TRANSACTION}}),invoke:{id:"previewTransaction",src:"previewTransaction",input:({context:e})=>({derivationPath:e.input.derivationPath,serializedTransaction:e.input.transaction,userInputType:e.input.userInputType}),onDone:{target:"PreviewResultCheck",actions:(0,t.assign)({_internalState:({event:e,context:n})=>{if((0,a.isSuccessCommandResult)(e.output))return{...n._internalState,previewFallback:!1};const i=e.output.error;return i instanceof v.SolanaAppCommandError&&i.errorCode===w?{...n._internalState,error:i}:{...n._internalState,previewFallback:!0}},intermediateValue:{requiredUserInteraction:a.UserInteractionRequired.None,step:u.signClearSignDAStateSteps.PREVIEW_TRANSACTION}})},onError:{target:"Sign",actions:({event:e})=>y.info("[SigningOps] preview threw, signing original transaction",{data:{error:String(e.error)}})}}},PreviewResultCheck:{always:[{guard:"noInternalError",target:"RefreshBlockhash"},{target:"Error"}]},RefreshBlockhash:{entry:(0,t.assign)({intermediateValue:()=>({requiredUserInteraction:a.UserInteractionRequired.None,step:u.signClearSignDAStateSteps.FETCH_BLOCKHASH})}),invoke:{id:"refreshBlockhash",src:"refreshBlockhash",input:({context:e})=>({transaction:e.input.transaction,rpcUrl:e.input.rpcUrl,fetchBlockhash:e.input.fetchBlockhash}),onDone:{target:"PatchResultCheck",actions:(0,t.assign)({_internalState:({event:e,context:n})=>({...n._internalState,transactionToSign:e.output})})}}},PatchResultCheck:{always:[{target:"FallbackSign",guard:"isPreviewFallback"},{target:"DelayedSign"}]},DelayedSign:{entry:(0,t.assign)({intermediateValue:{requiredUserInteraction:a.UserInteractionRequired.None,step:u.signClearSignDAStateSteps.DELAYED_SIGN}}),invoke:{id:"delayedSignTransaction",src:"delayedSignTransaction",input:({context:e})=>({derivationPath:e.input.derivationPath,serializedTransaction:e._internalState.transactionToSign??e.input.transaction,userInputType:e.input.userInputType}),onDone:{target:"ResultCheck",actions:(0,t.assign)({_internalState:({event:e,context:n})=>d(n._internalState,e.output)})},onError:{target:"Error",actions:"assignErrorFromEvent"}}},Sign:{entry:(0,t.assign)({intermediateValue:{requiredUserInteraction:a.UserInteractionRequired.SignTransaction,step:u.signClearSignDAStateSteps.SIGN_TRANSACTION}}),invoke:{id:"signTransaction",src:"signTransaction",input:({context:e})=>({derivationPath:e.input.derivationPath,serializedTransaction:e.input.transaction,userInputType:e.input.userInputType}),onDone:{target:"ResultCheck",actions:(0,t.assign)({_internalState:({event:e,context:n})=>d(n._internalState,e.output)})},onError:{target:"Error",actions:"assignErrorFromEvent"}}},FallbackSign:{entry:(0,t.assign)({intermediateValue:{requiredUserInteraction:a.UserInteractionRequired.SignTransaction,step:u.signClearSignDAStateSteps.FALLBACK_TO_NON_DELAYED_SIGN}}),invoke:{id:"fallbackSign",src:"signTransaction",input:({context:e})=>({derivationPath:e.input.derivationPath,serializedTransaction:e._internalState.transactionToSign??e.input.transaction,userInputType:e.input.userInputType}),onDone:{target:"ResultCheck",actions:(0,t.assign)({_internalState:({event:e,context:n})=>d(n._internalState,e.output)})},onError:{target:"Error",actions:"assignErrorFromEvent"}}},ResultCheck:{always:[{guard:"noInternalError",target:"Success"},{target:"Error"}]},Success:{type:"final"},Error:{type:"final"}},output:({context:e})=>e._internalState.signature?(0,g.Right)(e._internalState.signature):(0,g.Left)(e._internalState.error||new a.UnknownDAError("No error or signature available"))})}extractDependencies(r){const o=this.input.blockhashService??new A.BlockhashService,c=this.getLoggerFactory(r);return{previewTransaction:async n=>new l.SignDataTask(r,{commandFactory:i=>new I.SignTransactionPreviewCommand({serializedTransaction:i.chunkedData,more:i.more,extend:i.extend,userInputType:n.input.userInputType}),derivationPath:n.input.derivationPath,sendingData:n.input.serializedTransaction,loggerFactory:c}).run(),refreshBlockhash:async n=>new C.RefreshBlockhashTask({transaction:n.input.transaction,rpcUrl:n.input.rpcUrl,fetchBlockhash:n.input.fetchBlockhash,blockhashService:o,loggerFactory:c}).run(),delayedSignTransaction:async n=>new l.SignDataTask(r,{commandFactory:i=>new T.DelayedSignTransactionCommand({serializedTransaction:i.chunkedData,more:i.more,extend:i.extend,userInputType:n.input.userInputType}),derivationPath:n.input.derivationPath,sendingData:n.input.serializedTransaction,loggerFactory:c}).run(),signTransaction:async n=>new l.SignDataTask(r,{commandFactory:i=>new m.SignTransactionCommand({serializedTransaction:i.chunkedData,more:i.more,extend:i.extend,userInputType:n.input.userInputType}),derivationPath:n.input.derivationPath,sendingData:n.input.serializedTransaction,loggerFactory:c}).run()}}}0&&(module.exports={SignBasicClearSignDeviceAction});
|
|
2
2
|
//# sourceMappingURL=SignBasicClearSignDeviceAction.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/device-action/SignBasicClearSignDeviceAction.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type CommandResult,\n type DeviceActionStateMachine,\n type InternalApi,\n isSuccessCommandResult,\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 SignBasicClearSignDAError,\n type SignBasicClearSignDAInput,\n type SignBasicClearSignDAIntermediateValue,\n type SignBasicClearSignDAInternalState,\n type SignBasicClearSignDAOutput,\n} from \"@api/app-binder/SignBasicClearSignDeviceActionTypes\";\nimport { signClearSignDAStateSteps } from \"@api/app-binder/SignClearSignDeviceActionTypes\";\nimport { type Signature } from \"@api/model/Signature\";\nimport { type UserInputType } from \"@api/model/TransactionResolutionContext\";\nimport { DelayedSignTransactionCommand } from \"@internal/app-binder/command/DelayedSignTransactionCommand\";\nimport { SignTransactionCommand } from \"@internal/app-binder/command/SignTransactionCommand\";\nimport { SignTransactionPreviewCommand } from \"@internal/app-binder/command/SignTransactionPreviewCommand\";\nimport {\n SolanaAppCommandError,\n type SolanaAppErrorCodes,\n} from \"@internal/app-binder/command/utils/SolanaApplicationErrors\";\nimport { BlockhashService } from \"@internal/app-binder/services/BlockhashService\";\nimport { RefreshBlockhashTask } from \"@internal/app-binder/task/RefreshBlockhashTask\";\nimport { SignDataTask } from \"@internal/app-binder/task/SendSignDataTask\";\n\nexport type MachineDependencies = {\n readonly previewTransaction: (arg0: {\n input: {\n derivationPath: string;\n serializedTransaction: Uint8Array;\n userInputType?: UserInputType;\n };\n }) => Promise<CommandResult<Maybe<Signature>, SolanaAppErrorCodes>>;\n readonly refreshBlockhash: (arg0: {\n input: {\n transaction: Uint8Array;\n rpcUrl?: string;\n fetchBlockhash?: () => Promise<Uint8Array>;\n };\n }) => Promise<Uint8Array>;\n readonly delayedSignTransaction: (arg0: {\n input: {\n derivationPath: string;\n serializedTransaction: Uint8Array;\n userInputType?: UserInputType;\n };\n }) => Promise<CommandResult<Maybe<Signature>, SolanaAppErrorCodes>>;\n readonly signTransaction: (arg0: {\n input: {\n derivationPath: string;\n serializedTransaction: Uint8Array;\n userInputType?: UserInputType;\n };\n }) => Promise<CommandResult<Maybe<Signature>, SolanaAppErrorCodes>>;\n readonly zeroBlockhashFn: (arg0: {\n input: { transaction: Uint8Array };\n }) => Promise<Uint8Array>;\n};\n\nconst USER_REJECTION_CODE: SolanaAppErrorCodes = \"6985\";\n\n/** Fold a sign command result into the internal state (signature or error). */\nfunction applySignatureResult(\n internalState: SignBasicClearSignDAInternalState,\n result: CommandResult<Maybe<Signature>, SolanaAppErrorCodes>,\n): SignBasicClearSignDAInternalState {\n if (!isSuccessCommandResult(result)) {\n return { ...internalState, error: result.error };\n }\n const data = result.data.extract();\n if (result.data.isJust() && data instanceof Uint8Array) {\n return { ...internalState, signature: data };\n }\n return {\n ...internalState,\n error: new UnknownDAError(\"No signature available\"),\n };\n}\n\n/**\n * Terminal sign for the legacy (non-generic) path. With a blockhash source it\n * runs the two-step delayed flow \u2014 `ZeroBlockhash` then `PreviewTransaction`\n * (0x08) to arm, a best-effort blockhash refresh (shared\n * `RefreshBlockhashTask`), then `DelayedSign` (0x09). Without a source (or when\n * arming degrades) it falls back to a one-shot `Sign` (0x06).\n */\nexport class SignBasicClearSignDeviceAction extends XStateDeviceAction<\n SignBasicClearSignDAOutput,\n SignBasicClearSignDAInput,\n SignBasicClearSignDAError,\n SignBasicClearSignDAIntermediateValue,\n SignBasicClearSignDAInternalState\n> {\n makeStateMachine(\n internalApi: InternalApi,\n ): DeviceActionStateMachine<\n SignBasicClearSignDAOutput,\n SignBasicClearSignDAInput,\n SignBasicClearSignDAError,\n SignBasicClearSignDAIntermediateValue,\n SignBasicClearSignDAInternalState\n > {\n type types = StateMachineTypes<\n SignBasicClearSignDAOutput,\n SignBasicClearSignDAInput,\n SignBasicClearSignDAError,\n SignBasicClearSignDAIntermediateValue,\n SignBasicClearSignDAInternalState\n >;\n\n const {\n previewTransaction,\n refreshBlockhash,\n delayedSignTransaction,\n signTransaction,\n zeroBlockhashFn,\n } = this.extractDependencies(internalApi);\n\n const logger = this.getLoggerFactory(internalApi)(\n \"SignBasicClearSignDeviceAction\",\n );\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 previewTransaction: fromPromise(previewTransaction),\n refreshBlockhash: fromPromise(refreshBlockhash),\n delayedSignTransaction: fromPromise(delayedSignTransaction),\n signTransaction: fromPromise(signTransaction),\n zeroBlockhashFn: fromPromise(zeroBlockhashFn),\n },\n guards: {\n noInternalError: ({ context }) => context._internalState.error === null,\n isPreviewFallback: ({ context }) =>\n context._internalState.previewFallback,\n hasBlockhashSource: ({ context }) =>\n !!(context.input.rpcUrl || context.input.fetchBlockhash),\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 id: \"SignBasicClearSignDeviceAction\",\n initial: \"Entry\",\n context: ({ input }) => ({\n input,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signClearSignDAStateSteps.ZERO_BLOCKHASH,\n },\n _internalState: {\n error: null,\n signature: null,\n zeroedTransaction: null,\n previewFallback: false,\n transactionToSign: null,\n },\n }),\n states: {\n // - source: preview (0x08) to arm, refresh, then SIGN DELAYED (0x09)\n // - no source: one-shot SIGN (0x06) on the original transaction\n Entry: {\n always: [\n { target: \"ZeroBlockhash\", guard: \"hasBlockhashSource\" },\n { target: \"Sign\" },\n ],\n },\n ZeroBlockhash: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n step: signClearSignDAStateSteps.ZERO_BLOCKHASH,\n }),\n }),\n invoke: {\n id: \"zeroBlockhashFn\",\n src: \"zeroBlockhashFn\",\n input: ({ context }) => ({\n transaction: context.input.transaction,\n }),\n onDone: {\n target: \"PreviewTransaction\",\n actions: assign({\n _internalState: ({ event, context }) => ({\n ...context._internalState,\n zeroedTransaction: event.output,\n }),\n }),\n },\n // Best-effort: a host-side zeroing failure must not block signing;\n // degrade to a plain one-shot sign of the original transaction.\n onError: {\n target: \"Sign\",\n actions: ({ event }) =>\n logger.info(\n \"[SigningOps] blockhash zeroing failed, signing original transaction\",\n { data: { error: String(event.error) } },\n ),\n },\n },\n },\n PreviewTransaction: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n step: signClearSignDAStateSteps.PREVIEW_TRANSACTION,\n },\n }),\n invoke: {\n id: \"previewTransaction\",\n src: \"previewTransaction\",\n input: ({ context }) => ({\n derivationPath: context.input.derivationPath,\n serializedTransaction: context._internalState.zeroedTransaction!,\n userInputType: context.input.userInputType,\n }),\n onDone: {\n target: \"PreviewResultCheck\",\n actions: assign({\n _internalState: ({ event, context }) => {\n if (isSuccessCommandResult(event.output)) {\n return {\n ...context._internalState,\n previewFallback: false,\n };\n }\n const error = event.output.error;\n if (\n error instanceof SolanaAppCommandError &&\n error.errorCode === USER_REJECTION_CODE\n ) {\n return { ...context._internalState, error };\n }\n return {\n ...context._internalState,\n previewFallback: true,\n };\n },\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signClearSignDAStateSteps.PREVIEW_TRANSACTION,\n },\n }),\n },\n // Best-effort: a preview throw (vs a user rejection, handled in\n // onDone) must not block signing; degrade to a plain one-shot sign\n // of the original transaction.\n onError: {\n target: \"Sign\",\n actions: ({ event }) =>\n logger.info(\n \"[SigningOps] preview threw, signing original transaction\",\n { data: { error: String(event.error) } },\n ),\n },\n },\n },\n PreviewResultCheck: {\n always: [\n { guard: \"noInternalError\", target: \"RefreshBlockhash\" },\n { target: \"Error\" },\n ],\n },\n RefreshBlockhash: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n step: signClearSignDAStateSteps.FETCH_BLOCKHASH,\n }),\n }),\n invoke: {\n id: \"refreshBlockhash\",\n src: \"refreshBlockhash\",\n input: ({ context }) => ({\n transaction: context.input.transaction,\n rpcUrl: context.input.rpcUrl,\n fetchBlockhash: context.input.fetchBlockhash,\n }),\n // The refresh task is best-effort and never rejects; it resolves to\n // the bytes to sign (patched on success, original otherwise).\n onDone: {\n target: \"PatchResultCheck\",\n actions: assign({\n _internalState: ({ event, context }) => ({\n ...context._internalState,\n transactionToSign: event.output,\n }),\n }),\n },\n },\n },\n PatchResultCheck: {\n always: [\n { target: \"FallbackSign\", guard: \"isPreviewFallback\" },\n { target: \"DelayedSign\" },\n ],\n },\n DelayedSign: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signClearSignDAStateSteps.DELAYED_SIGN,\n },\n }),\n invoke: {\n id: \"delayedSignTransaction\",\n src: \"delayedSignTransaction\",\n input: ({ context }) => ({\n derivationPath: context.input.derivationPath,\n serializedTransaction:\n context._internalState.transactionToSign ??\n context.input.transaction,\n userInputType: context.input.userInputType,\n }),\n onDone: {\n target: \"ResultCheck\",\n actions: assign({\n _internalState: ({ event, context }) =>\n applySignatureResult(context._internalState, event.output),\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n // Primary one-shot sign (no blockhash refresh): the device shows the\n // review and signs in a single pass (0x06).\n Sign: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n step: signClearSignDAStateSteps.SIGN_TRANSACTION,\n },\n }),\n invoke: {\n id: \"signTransaction\",\n src: \"signTransaction\",\n input: ({ context }) => ({\n derivationPath: context.input.derivationPath,\n serializedTransaction: context.input.transaction,\n userInputType: context.input.userInputType,\n }),\n onDone: {\n target: \"ResultCheck\",\n actions: assign({\n _internalState: ({ event, context }) =>\n applySignatureResult(context._internalState, event.output),\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n // Fallback sign (0x06): the 0x08 preview was unsupported, so we sign the\n // (blockhash-patched) transaction non-delayed.\n FallbackSign: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n step: signClearSignDAStateSteps.FALLBACK_TO_NON_DELAYED_SIGN,\n },\n }),\n invoke: {\n id: \"fallbackSign\",\n src: \"signTransaction\",\n input: ({ context }) => ({\n derivationPath: context.input.derivationPath,\n // No patch (fetch failed): sign the original tx.\n serializedTransaction:\n context._internalState.transactionToSign ??\n context.input.transaction,\n userInputType: context.input.userInputType,\n }),\n onDone: {\n target: \"ResultCheck\",\n actions: assign({\n _internalState: ({ event, context }) =>\n applySignatureResult(context._internalState, event.output),\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n ResultCheck: {\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 blockhashService =\n this.input.blockhashService ?? new BlockhashService();\n\n const loggerFactory = this.getLoggerFactory(internalApi);\n\n const previewTransaction = async (arg0: {\n input: {\n derivationPath: string;\n serializedTransaction: Uint8Array;\n userInputType?: UserInputType;\n };\n }) =>\n new SignDataTask(internalApi, {\n commandFactory: (args) =>\n new SignTransactionPreviewCommand({\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 loggerFactory,\n }).run();\n\n const delayedSignTransaction = async (arg0: {\n input: {\n derivationPath: string;\n serializedTransaction: Uint8Array;\n userInputType?: UserInputType;\n };\n }) =>\n new SignDataTask(internalApi, {\n commandFactory: (args) =>\n new DelayedSignTransactionCommand({\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 loggerFactory,\n }).run();\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 loggerFactory,\n }).run();\n\n const zeroBlockhashFn = async (arg0: {\n input: { transaction: Uint8Array };\n }) =>\n Promise.resolve(blockhashService.zeroBlockhash(arg0.input.transaction));\n\n const refreshBlockhash = async (arg0: {\n input: {\n transaction: Uint8Array;\n rpcUrl?: string;\n fetchBlockhash?: () => Promise<Uint8Array>;\n };\n }) =>\n new RefreshBlockhashTask({\n transaction: arg0.input.transaction,\n rpcUrl: arg0.input.rpcUrl,\n fetchBlockhash: arg0.input.fetchBlockhash,\n blockhashService,\n loggerFactory,\n }).run();\n\n return {\n previewTransaction,\n refreshBlockhash,\n delayedSignTransaction,\n signTransaction,\n zeroBlockhashFn,\n };\n }\n}\n"],
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,oCAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EASO,2CACPC,EAAwC,qBACxCC,EAA2C,kBAS3CC,EAA0C,0DAG1CC,EAA8C,sEAC9CC,EAAuC,+DACvCC,EAA8C,sEAC9CC,EAGO,sEACPC,EAAiC,0DACjCC,EAAqC,0DACrCC,EAA6B,
|
|
6
|
-
"names": ["SignBasicClearSignDeviceAction_exports", "__export", "SignBasicClearSignDeviceAction", "__toCommonJS", "import_device_management_kit", "import_purify_ts", "import_xstate", "import_SignClearSignDeviceActionTypes", "import_DelayedSignTransactionCommand", "import_SignTransactionCommand", "import_SignTransactionPreviewCommand", "import_SolanaApplicationErrors", "import_BlockhashService", "import_RefreshBlockhashTask", "import_SendSignDataTask", "USER_REJECTION_CODE", "applySignatureResult", "internalState", "result", "data", "internalApi", "previewTransaction", "refreshBlockhash", "delayedSignTransaction", "signTransaction", "
|
|
4
|
+
"sourcesContent": ["import {\n type CommandResult,\n type DeviceActionStateMachine,\n type InternalApi,\n isSuccessCommandResult,\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 SignBasicClearSignDAError,\n type SignBasicClearSignDAInput,\n type SignBasicClearSignDAIntermediateValue,\n type SignBasicClearSignDAInternalState,\n type SignBasicClearSignDAOutput,\n} from \"@api/app-binder/SignBasicClearSignDeviceActionTypes\";\nimport { signClearSignDAStateSteps } from \"@api/app-binder/SignClearSignDeviceActionTypes\";\nimport { type Signature } from \"@api/model/Signature\";\nimport { type UserInputType } from \"@api/model/TransactionResolutionContext\";\nimport { DelayedSignTransactionCommand } from \"@internal/app-binder/command/DelayedSignTransactionCommand\";\nimport { SignTransactionCommand } from \"@internal/app-binder/command/SignTransactionCommand\";\nimport { SignTransactionPreviewCommand } from \"@internal/app-binder/command/SignTransactionPreviewCommand\";\nimport {\n SolanaAppCommandError,\n type SolanaAppErrorCodes,\n} from \"@internal/app-binder/command/utils/SolanaApplicationErrors\";\nimport { BlockhashService } from \"@internal/app-binder/services/BlockhashService\";\nimport { RefreshBlockhashTask } from \"@internal/app-binder/task/RefreshBlockhashTask\";\nimport { SignDataTask } from \"@internal/app-binder/task/SendSignDataTask\";\n\nexport type MachineDependencies = {\n readonly previewTransaction: (arg0: {\n input: {\n derivationPath: string;\n serializedTransaction: Uint8Array;\n userInputType?: UserInputType;\n };\n }) => Promise<CommandResult<Maybe<Signature>, SolanaAppErrorCodes>>;\n readonly refreshBlockhash: (arg0: {\n input: {\n transaction: Uint8Array;\n rpcUrl?: string;\n fetchBlockhash?: () => Promise<Uint8Array>;\n };\n }) => Promise<Uint8Array>;\n readonly delayedSignTransaction: (arg0: {\n input: {\n derivationPath: string;\n serializedTransaction: Uint8Array;\n userInputType?: UserInputType;\n };\n }) => Promise<CommandResult<Maybe<Signature>, SolanaAppErrorCodes>>;\n readonly signTransaction: (arg0: {\n input: {\n derivationPath: string;\n serializedTransaction: Uint8Array;\n userInputType?: UserInputType;\n };\n }) => Promise<CommandResult<Maybe<Signature>, SolanaAppErrorCodes>>;\n};\n\nconst USER_REJECTION_CODE: SolanaAppErrorCodes = \"6985\";\n\n/** Fold a sign command result into the internal state (signature or error). */\nfunction applySignatureResult(\n internalState: SignBasicClearSignDAInternalState,\n result: CommandResult<Maybe<Signature>, SolanaAppErrorCodes>,\n): SignBasicClearSignDAInternalState {\n if (!isSuccessCommandResult(result)) {\n return { ...internalState, error: result.error };\n }\n const data = result.data.extract();\n if (result.data.isJust() && data instanceof Uint8Array) {\n return { ...internalState, signature: data };\n }\n return {\n ...internalState,\n error: new UnknownDAError(\"No signature available\"),\n };\n}\n\n/**\n * Terminal sign for the legacy (non-generic) path. With a blockhash source it\n * runs the two-step delayed flow \u2014 `PreviewTransaction` (0x08) of the original\n * transaction to arm, a best-effort blockhash refresh (shared\n * `RefreshBlockhashTask`), then `DelayedSign` (0x09). Without a source (or when\n * arming degrades) it falls back to a one-shot `Sign` (0x06).\n */\nexport class SignBasicClearSignDeviceAction extends XStateDeviceAction<\n SignBasicClearSignDAOutput,\n SignBasicClearSignDAInput,\n SignBasicClearSignDAError,\n SignBasicClearSignDAIntermediateValue,\n SignBasicClearSignDAInternalState\n> {\n makeStateMachine(\n internalApi: InternalApi,\n ): DeviceActionStateMachine<\n SignBasicClearSignDAOutput,\n SignBasicClearSignDAInput,\n SignBasicClearSignDAError,\n SignBasicClearSignDAIntermediateValue,\n SignBasicClearSignDAInternalState\n > {\n type types = StateMachineTypes<\n SignBasicClearSignDAOutput,\n SignBasicClearSignDAInput,\n SignBasicClearSignDAError,\n SignBasicClearSignDAIntermediateValue,\n SignBasicClearSignDAInternalState\n >;\n\n const {\n previewTransaction,\n refreshBlockhash,\n delayedSignTransaction,\n signTransaction,\n } = this.extractDependencies(internalApi);\n\n const logger = this.getLoggerFactory(internalApi)(\n \"SignBasicClearSignDeviceAction\",\n );\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 previewTransaction: fromPromise(previewTransaction),\n refreshBlockhash: fromPromise(refreshBlockhash),\n delayedSignTransaction: fromPromise(delayedSignTransaction),\n signTransaction: fromPromise(signTransaction),\n },\n guards: {\n noInternalError: ({ context }) => context._internalState.error === null,\n isPreviewFallback: ({ context }) =>\n context._internalState.previewFallback,\n hasBlockhashSource: ({ context }) =>\n !!(context.input.rpcUrl || context.input.fetchBlockhash),\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 id: \"SignBasicClearSignDeviceAction\",\n initial: \"Entry\",\n context: ({ input }) => ({\n input,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signClearSignDAStateSteps.PREVIEW_TRANSACTION,\n },\n _internalState: {\n error: null,\n signature: null,\n previewFallback: false,\n transactionToSign: null,\n },\n }),\n states: {\n // - source: preview (0x08) to arm, refresh, then SIGN DELAYED (0x09)\n // - no source: one-shot SIGN (0x06) on the original transaction\n Entry: {\n always: [\n { target: \"PreviewTransaction\", guard: \"hasBlockhashSource\" },\n { target: \"Sign\" },\n ],\n },\n PreviewTransaction: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n step: signClearSignDAStateSteps.PREVIEW_TRANSACTION,\n },\n }),\n invoke: {\n id: \"previewTransaction\",\n src: \"previewTransaction\",\n input: ({ context }) => ({\n derivationPath: context.input.derivationPath,\n serializedTransaction: context.input.transaction,\n userInputType: context.input.userInputType,\n }),\n onDone: {\n target: \"PreviewResultCheck\",\n actions: assign({\n _internalState: ({ event, context }) => {\n if (isSuccessCommandResult(event.output)) {\n return {\n ...context._internalState,\n previewFallback: false,\n };\n }\n const error = event.output.error;\n if (\n error instanceof SolanaAppCommandError &&\n error.errorCode === USER_REJECTION_CODE\n ) {\n return { ...context._internalState, error };\n }\n return {\n ...context._internalState,\n previewFallback: true,\n };\n },\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signClearSignDAStateSteps.PREVIEW_TRANSACTION,\n },\n }),\n },\n // Best-effort: a preview throw (vs a user rejection, handled in\n // onDone) must not block signing; degrade to a plain one-shot sign\n // of the original transaction.\n onError: {\n target: \"Sign\",\n actions: ({ event }) =>\n logger.info(\n \"[SigningOps] preview threw, signing original transaction\",\n { data: { error: String(event.error) } },\n ),\n },\n },\n },\n PreviewResultCheck: {\n always: [\n { guard: \"noInternalError\", target: \"RefreshBlockhash\" },\n { target: \"Error\" },\n ],\n },\n RefreshBlockhash: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n step: signClearSignDAStateSteps.FETCH_BLOCKHASH,\n }),\n }),\n invoke: {\n id: \"refreshBlockhash\",\n src: \"refreshBlockhash\",\n input: ({ context }) => ({\n transaction: context.input.transaction,\n rpcUrl: context.input.rpcUrl,\n fetchBlockhash: context.input.fetchBlockhash,\n }),\n // The refresh task is best-effort and never rejects; it resolves to\n // the bytes to sign (patched on success, original otherwise).\n onDone: {\n target: \"PatchResultCheck\",\n actions: assign({\n _internalState: ({ event, context }) => ({\n ...context._internalState,\n transactionToSign: event.output,\n }),\n }),\n },\n },\n },\n PatchResultCheck: {\n always: [\n { target: \"FallbackSign\", guard: \"isPreviewFallback\" },\n { target: \"DelayedSign\" },\n ],\n },\n DelayedSign: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signClearSignDAStateSteps.DELAYED_SIGN,\n },\n }),\n invoke: {\n id: \"delayedSignTransaction\",\n src: \"delayedSignTransaction\",\n input: ({ context }) => ({\n derivationPath: context.input.derivationPath,\n serializedTransaction:\n context._internalState.transactionToSign ??\n context.input.transaction,\n userInputType: context.input.userInputType,\n }),\n onDone: {\n target: \"ResultCheck\",\n actions: assign({\n _internalState: ({ event, context }) =>\n applySignatureResult(context._internalState, event.output),\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n // Primary one-shot sign (no blockhash refresh): the device shows the\n // review and signs in a single pass (0x06).\n Sign: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n step: signClearSignDAStateSteps.SIGN_TRANSACTION,\n },\n }),\n invoke: {\n id: \"signTransaction\",\n src: \"signTransaction\",\n input: ({ context }) => ({\n derivationPath: context.input.derivationPath,\n serializedTransaction: context.input.transaction,\n userInputType: context.input.userInputType,\n }),\n onDone: {\n target: \"ResultCheck\",\n actions: assign({\n _internalState: ({ event, context }) =>\n applySignatureResult(context._internalState, event.output),\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n // Fallback sign (0x06): the 0x08 preview was unsupported, so we sign the\n // (blockhash-patched) transaction non-delayed.\n FallbackSign: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n step: signClearSignDAStateSteps.FALLBACK_TO_NON_DELAYED_SIGN,\n },\n }),\n invoke: {\n id: \"fallbackSign\",\n src: \"signTransaction\",\n input: ({ context }) => ({\n derivationPath: context.input.derivationPath,\n // No patch (fetch failed): sign the original tx.\n serializedTransaction:\n context._internalState.transactionToSign ??\n context.input.transaction,\n userInputType: context.input.userInputType,\n }),\n onDone: {\n target: \"ResultCheck\",\n actions: assign({\n _internalState: ({ event, context }) =>\n applySignatureResult(context._internalState, event.output),\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n ResultCheck: {\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 blockhashService =\n this.input.blockhashService ?? new BlockhashService();\n\n const loggerFactory = this.getLoggerFactory(internalApi);\n\n const previewTransaction = async (arg0: {\n input: {\n derivationPath: string;\n serializedTransaction: Uint8Array;\n userInputType?: UserInputType;\n };\n }) =>\n new SignDataTask(internalApi, {\n commandFactory: (args) =>\n new SignTransactionPreviewCommand({\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 loggerFactory,\n }).run();\n\n const delayedSignTransaction = async (arg0: {\n input: {\n derivationPath: string;\n serializedTransaction: Uint8Array;\n userInputType?: UserInputType;\n };\n }) =>\n new SignDataTask(internalApi, {\n commandFactory: (args) =>\n new DelayedSignTransactionCommand({\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 loggerFactory,\n }).run();\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 loggerFactory,\n }).run();\n\n const refreshBlockhash = async (arg0: {\n input: {\n transaction: Uint8Array;\n rpcUrl?: string;\n fetchBlockhash?: () => Promise<Uint8Array>;\n };\n }) =>\n new RefreshBlockhashTask({\n transaction: arg0.input.transaction,\n rpcUrl: arg0.input.rpcUrl,\n fetchBlockhash: arg0.input.fetchBlockhash,\n blockhashService,\n loggerFactory,\n }).run();\n\n return {\n previewTransaction,\n refreshBlockhash,\n delayedSignTransaction,\n signTransaction,\n };\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["SignBasicClearSignDeviceAction_exports", "__export", "SignBasicClearSignDeviceAction", "__toCommonJS", "import_device_management_kit", "import_purify_ts", "import_xstate", "import_SignClearSignDeviceActionTypes", "import_DelayedSignTransactionCommand", "import_SignTransactionCommand", "import_SignTransactionPreviewCommand", "import_SolanaApplicationErrors", "import_BlockhashService", "import_RefreshBlockhashTask", "import_SendSignDataTask", "USER_REJECTION_CODE", "applySignatureResult", "internalState", "result", "data", "internalApi", "previewTransaction", "refreshBlockhash", "delayedSignTransaction", "signTransaction", "logger", "context", "_", "input", "event", "error", "blockhashService", "loggerFactory", "arg0", "args"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var i=require("@ledgerhq/device-management-kit"),
|
|
1
|
+
"use strict";var i=require("@ledgerhq/device-management-kit"),m=require("purify-ts"),e=require("vitest"),h=require("../../app-binder/command/utils/SolanaApplicationErrors"),y=require("./__test-utils__/makeInternalApi"),C=require("./SignBasicClearSignDeviceAction");const u="44'/501'/0'/0'",c=new Uint8Array([222,173,190,239]),g=new Uint8Array([1,2,3,4]),p=new Uint8Array([170,187]),v="https://api.devnet.solana.com";let f,s,B,l,r;function x(){return{previewTransaction:s,refreshBlockhash:B,delayedSignTransaction:l,signTransaction:r}}function d(o,n,a){const t=new C.SignBasicClearSignDeviceAction({input:o});e.vi.spyOn(t,"extractDependencies").mockReturnValue(x());const{observable:k}=t._execute(f),S=[];k.subscribe({next:A=>S.push(A),error:a,complete:()=>n(S)})}(0,e.describe)("SignBasicClearSignDeviceAction",()=>{(0,e.beforeEach)(()=>{f=(0,y.makeDeviceActionInternalApiMock)(),s=e.vi.fn().mockResolvedValue((0,i.CommandResultFactory)({data:m.Nothing})),l=e.vi.fn().mockResolvedValue((0,i.CommandResultFactory)({data:(0,m.Just)(p)})),r=e.vi.fn().mockResolvedValue((0,i.CommandResultFactory)({data:(0,m.Just)(p)})),B=e.vi.fn().mockImplementation(async o=>o.input.rpcUrl||o.input.fetchBlockhash?g:o.input.transaction)}),(0,e.it)("happy path: preview accepted, refresh, then delayed-sign the patched tx (0x09)",()=>new Promise((o,n)=>{d({derivationPath:u,transaction:c,rpcUrl:v},a=>{try{(0,e.expect)(s).toHaveBeenCalledTimes(1),(0,e.expect)(s.mock.calls[0][0].input.serializedTransaction).toStrictEqual(c),(0,e.expect)(l).toHaveBeenCalledTimes(1),(0,e.expect)(r).not.toHaveBeenCalled(),(0,e.expect)(l.mock.calls[0][0].input.serializedTransaction).toStrictEqual(g);const t=a[a.length-1];(0,e.expect)(t.status===i.DeviceActionStatus.Completed&&t.output).toStrictEqual(p),o()}catch(t){n(t)}},n)})),(0,e.it)("preview unsupported (6d00): refresh then fallback one-shot sign (0x06)",()=>new Promise((o,n)=>{s.mockResolvedValue((0,i.CommandResultFactory)({error:new h.SolanaAppCommandError({errorCode:"6d00",message:"not supported"})})),d({derivationPath:u,transaction:c,rpcUrl:v},a=>{try{(0,e.expect)(r).toHaveBeenCalledTimes(1),(0,e.expect)(l).not.toHaveBeenCalled(),(0,e.expect)(r.mock.calls[0][0].input.serializedTransaction).toStrictEqual(g);const t=a[a.length-1];(0,e.expect)(t.status===i.DeviceActionStatus.Completed&&t.output).toStrictEqual(p),o()}catch(t){n(t)}},n)})),(0,e.it)("preview user rejection (6985): surfaces an error, never signs",()=>new Promise((o,n)=>{s.mockResolvedValue((0,i.CommandResultFactory)({error:new h.SolanaAppCommandError({errorCode:"6985",message:"Canceled by user"})})),d({derivationPath:u,transaction:c,rpcUrl:v},a=>{try{(0,e.expect)(l).not.toHaveBeenCalled(),(0,e.expect)(r).not.toHaveBeenCalled(),(0,e.expect)(a[a.length-1].status).toBe(i.DeviceActionStatus.Error),o()}catch(t){n(t)}},n)})),(0,e.it)("preview throws: degrades to a one-shot sign of the original tx",()=>new Promise((o,n)=>{s.mockRejectedValue(new Error("preview boom")),d({derivationPath:u,transaction:c,rpcUrl:v},a=>{try{(0,e.expect)(r).toHaveBeenCalledTimes(1),(0,e.expect)(l).not.toHaveBeenCalled(),(0,e.expect)(r.mock.calls[0][0].input.serializedTransaction).toStrictEqual(c);const t=a[a.length-1];(0,e.expect)(t.status===i.DeviceActionStatus.Completed&&t.output).toStrictEqual(p),o()}catch(t){n(t)}},n)})),(0,e.it)("no blockhash source: primary one-shot sign (0x06), no preview",()=>new Promise((o,n)=>{d({derivationPath:u,transaction:c},a=>{try{(0,e.expect)(s).not.toHaveBeenCalled(),(0,e.expect)(l).not.toHaveBeenCalled(),(0,e.expect)(r).toHaveBeenCalledTimes(1),(0,e.expect)(r.mock.calls[0][0].input.serializedTransaction).toStrictEqual(c);const t=a[a.length-1];(0,e.expect)(t.status===i.DeviceActionStatus.Completed&&t.output).toStrictEqual(p),o()}catch(t){n(t)}},n)}))});
|
|
2
2
|
//# sourceMappingURL=SignBasicClearSignDeviceAction.test.js.map
|
package/lib/cjs/internal/app-binder/device-action/SignBasicClearSignDeviceAction.test.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/device-action/SignBasicClearSignDeviceAction.test.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n CommandResultFactory,\n type DeviceActionState,\n DeviceActionStatus,\n} from \"@ledgerhq/device-management-kit\";\nimport { Just, Nothing } from \"purify-ts\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport {\n type SignBasicClearSignDAError,\n type SignBasicClearSignDAInput,\n type SignBasicClearSignDAIntermediateValue,\n type SignBasicClearSignDAOutput,\n} from \"@api/app-binder/SignBasicClearSignDeviceActionTypes\";\nimport { SolanaAppCommandError } from \"@internal/app-binder/command/utils/SolanaApplicationErrors\";\n\nimport { makeDeviceActionInternalApiMock } from \"./__test-utils__/makeInternalApi\";\nimport { SignBasicClearSignDeviceAction } from \"./SignBasicClearSignDeviceAction\";\n\nconst defaultDerivation = \"44'/501'/0'/0'\";\nconst exampleTx = new Uint8Array([0xde, 0xad, 0xbe, 0xef]);\nconst
|
|
5
|
-
"mappings": "aAAA,IAAAA,EAIO,2CACPC,EAA8B,qBAC9BC,EAAqD,kBAQrDC,EAAsC,sEAEtCC,EAAgD,4CAChDC,EAA+C,4CAE/C,MAAMC,EAAoB,iBACpBC,EAAY,IAAI,WAAW,CAAC,IAAM,IAAM,IAAM,GAAI,CAAC,EACnDC,
|
|
6
|
-
"names": ["import_device_management_kit", "import_purify_ts", "import_vitest", "import_SolanaApplicationErrors", "import_makeInternalApi", "import_SignBasicClearSignDeviceAction", "defaultDerivation", "exampleTx", "
|
|
4
|
+
"sourcesContent": ["import {\n CommandResultFactory,\n type DeviceActionState,\n DeviceActionStatus,\n} from \"@ledgerhq/device-management-kit\";\nimport { Just, Nothing } from \"purify-ts\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport {\n type SignBasicClearSignDAError,\n type SignBasicClearSignDAInput,\n type SignBasicClearSignDAIntermediateValue,\n type SignBasicClearSignDAOutput,\n} from \"@api/app-binder/SignBasicClearSignDeviceActionTypes\";\nimport { SolanaAppCommandError } from \"@internal/app-binder/command/utils/SolanaApplicationErrors\";\n\nimport { makeDeviceActionInternalApiMock } from \"./__test-utils__/makeInternalApi\";\nimport { SignBasicClearSignDeviceAction } from \"./SignBasicClearSignDeviceAction\";\n\nconst defaultDerivation = \"44'/501'/0'/0'\";\nconst exampleTx = new Uint8Array([0xde, 0xad, 0xbe, 0xef]);\nconst patchedTx = new Uint8Array([0x01, 0x02, 0x03, 0x04]);\nconst exampleSignature = new Uint8Array([0xaa, 0xbb]);\nconst rpcUrl = \"https://api.devnet.solana.com\";\n\nlet apiMock: ReturnType<typeof makeDeviceActionInternalApiMock>;\nlet previewMock: ReturnType<typeof vi.fn>;\nlet refreshBlockhashMock: ReturnType<typeof vi.fn>;\nlet delayedSignMock: ReturnType<typeof vi.fn>;\nlet signMock: ReturnType<typeof vi.fn>;\n\nfunction extractDeps() {\n return {\n previewTransaction: previewMock,\n refreshBlockhash: refreshBlockhashMock,\n delayedSignTransaction: delayedSignMock,\n signTransaction: signMock,\n };\n}\n\nfunction run(\n input: SignBasicClearSignDAInput,\n onComplete: (\n states: DeviceActionState<\n SignBasicClearSignDAOutput,\n SignBasicClearSignDAError,\n SignBasicClearSignDAIntermediateValue\n >[],\n ) => void,\n onError: (e: unknown) => void,\n) {\n const action = new SignBasicClearSignDeviceAction({ input });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n vi.spyOn(action, \"extractDependencies\").mockReturnValue(extractDeps() as any);\n const { observable } = action._execute(apiMock);\n const states: DeviceActionState<\n SignBasicClearSignDAOutput,\n SignBasicClearSignDAError,\n SignBasicClearSignDAIntermediateValue\n >[] = [];\n observable.subscribe({\n next: (s) => states.push(s),\n error: onError,\n complete: () => onComplete(states),\n });\n}\n\ndescribe(\"SignBasicClearSignDeviceAction\", () => {\n beforeEach(() => {\n apiMock = makeDeviceActionInternalApiMock();\n previewMock = vi\n .fn()\n .mockResolvedValue(CommandResultFactory({ data: Nothing }));\n delayedSignMock = vi\n .fn()\n .mockResolvedValue(\n CommandResultFactory({ data: Just(exampleSignature) }),\n );\n signMock = vi\n .fn()\n .mockResolvedValue(\n CommandResultFactory({ data: Just(exampleSignature) }),\n );\n // Mirror the real task: patched tx when a blockhash source exists, original\n // otherwise.\n refreshBlockhashMock = vi\n .fn()\n .mockImplementation(async (arg) =>\n arg.input.rpcUrl || arg.input.fetchBlockhash\n ? patchedTx\n : arg.input.transaction,\n );\n });\n\n it(\"happy path: preview accepted, refresh, then delayed-sign the patched tx (0x09)\", () =>\n new Promise<void>((resolve, reject) => {\n run(\n {\n derivationPath: defaultDerivation,\n transaction: exampleTx,\n rpcUrl,\n },\n (states) => {\n try {\n expect(previewMock).toHaveBeenCalledTimes(1);\n // The preview carries the original tx (blockhash untouched): the\n // device checks the transaction-check TX_HASH over these bytes.\n expect(\n previewMock.mock.calls[0]![0].input.serializedTransaction,\n ).toStrictEqual(exampleTx);\n expect(delayedSignMock).toHaveBeenCalledTimes(1);\n expect(signMock).not.toHaveBeenCalled();\n expect(\n delayedSignMock.mock.calls[0]![0].input.serializedTransaction,\n ).toStrictEqual(patchedTx);\n const last = states[states.length - 1]!;\n expect(\n last.status === DeviceActionStatus.Completed && last.output,\n ).toStrictEqual(exampleSignature);\n resolve();\n } catch (e) {\n reject(e);\n }\n },\n reject,\n );\n }));\n\n it(\"preview unsupported (6d00): refresh then fallback one-shot sign (0x06)\", () =>\n new Promise<void>((resolve, reject) => {\n previewMock.mockResolvedValue(\n CommandResultFactory({\n error: new SolanaAppCommandError({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...({ errorCode: \"6d00\", message: \"not supported\" } as any),\n }),\n }),\n );\n run(\n {\n derivationPath: defaultDerivation,\n transaction: exampleTx,\n rpcUrl,\n },\n (states) => {\n try {\n expect(signMock).toHaveBeenCalledTimes(1);\n expect(delayedSignMock).not.toHaveBeenCalled();\n expect(\n signMock.mock.calls[0]![0].input.serializedTransaction,\n ).toStrictEqual(patchedTx);\n const last = states[states.length - 1]!;\n expect(\n last.status === DeviceActionStatus.Completed && last.output,\n ).toStrictEqual(exampleSignature);\n resolve();\n } catch (e) {\n reject(e);\n }\n },\n reject,\n );\n }));\n\n it(\"preview user rejection (6985): surfaces an error, never signs\", () =>\n new Promise<void>((resolve, reject) => {\n previewMock.mockResolvedValue(\n CommandResultFactory({\n error: new SolanaAppCommandError({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...({ errorCode: \"6985\", message: \"Canceled by user\" } as any),\n }),\n }),\n );\n run(\n {\n derivationPath: defaultDerivation,\n transaction: exampleTx,\n rpcUrl,\n },\n (states) => {\n try {\n expect(delayedSignMock).not.toHaveBeenCalled();\n expect(signMock).not.toHaveBeenCalled();\n expect(states[states.length - 1]!.status).toBe(\n DeviceActionStatus.Error,\n );\n resolve();\n } catch (e) {\n reject(e);\n }\n },\n reject,\n );\n }));\n\n it(\"preview throws: degrades to a one-shot sign of the original tx\", () =>\n new Promise<void>((resolve, reject) => {\n previewMock.mockRejectedValue(new Error(\"preview boom\"));\n run(\n {\n derivationPath: defaultDerivation,\n transaction: exampleTx,\n rpcUrl,\n },\n (states) => {\n try {\n expect(signMock).toHaveBeenCalledTimes(1);\n expect(delayedSignMock).not.toHaveBeenCalled();\n expect(\n signMock.mock.calls[0]![0].input.serializedTransaction,\n ).toStrictEqual(exampleTx);\n const last = states[states.length - 1]!;\n expect(\n last.status === DeviceActionStatus.Completed && last.output,\n ).toStrictEqual(exampleSignature);\n resolve();\n } catch (e) {\n reject(e);\n }\n },\n reject,\n );\n }));\n\n it(\"no blockhash source: primary one-shot sign (0x06), no preview\", () =>\n new Promise<void>((resolve, reject) => {\n run(\n { derivationPath: defaultDerivation, transaction: exampleTx },\n (states) => {\n try {\n expect(previewMock).not.toHaveBeenCalled();\n expect(delayedSignMock).not.toHaveBeenCalled();\n expect(signMock).toHaveBeenCalledTimes(1);\n expect(\n signMock.mock.calls[0]![0].input.serializedTransaction,\n ).toStrictEqual(exampleTx);\n const last = states[states.length - 1]!;\n expect(\n last.status === DeviceActionStatus.Completed && last.output,\n ).toStrictEqual(exampleSignature);\n resolve();\n } catch (e) {\n reject(e);\n }\n },\n reject,\n );\n }));\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_device_management_kit", "import_purify_ts", "import_vitest", "import_SolanaApplicationErrors", "import_makeInternalApi", "import_SignBasicClearSignDeviceAction", "defaultDerivation", "exampleTx", "patchedTx", "exampleSignature", "rpcUrl", "apiMock", "previewMock", "refreshBlockhashMock", "delayedSignMock", "signMock", "extractDeps", "run", "input", "onComplete", "onError", "action", "observable", "states", "s", "arg", "resolve", "reject", "last", "e"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var h=Object.defineProperty;var E=Object.getOwnPropertyDescriptor;var B=Object.getOwnPropertyNames;var F=Object.prototype.hasOwnProperty;var G=(o,n)=>{for(var c in n)h(o,c,{get:n[c],enumerable:!0})},O=(o,n,c,l)=>{if(n&&typeof n=="object"||typeof n=="function")for(let s of B(n))!F.call(o,s)&&s!==c&&h(o,s,{get:()=>n[s],enumerable:!(l=E(n,s))||l.enumerable});return o};var z=o=>O(h({},"__esModule",{value:!0}),o);var N={};G(N,{SignTransactionDeviceAction:()=>w});module.exports=z(N);var i=require("@ledgerhq/device-management-kit"),u=require("purify-ts"),r=require("xstate"),p=require("../../../api/app-binder/SignTransactionDeviceActionTypes"),T=require("../../app-binder/command/GetAppConfigurationCommand"),m=require("../../app-binder/constants"),y=require("../../app-binder/services/TransactionInputNormaliser"),k=require("../../app-binder/SolanaApplicationResolver"),A=require("../../app-binder/task/SolanaSigningReportTask"),v=require("./ProvisionBasicClearSignDeviceAction"),D=require("./ProvisionGenericClearSignDeviceAction"),P=require("./ProvisionTransactionCheckDeviceAction"),_=require("./SignBasicClearSignDeviceAction"),I=require("./SignGenericClearSignDeviceAction");function f(o){return o.transactionOptions?.solanaRPCURL??o.solanaRPCURL}class w extends i.XStateDeviceAction{makeStateMachine(n){const{normalizeTransaction:c,getAppConfig:l,reportSign:s}=this.extractDependencies(n),g=this.getLoggerFactory(n),M=g("SignTransactionDeviceAction"),R=this.input.disabledFeatures?new Set(this.input.disabledFeatures):void 0,S=(e,t)=>(0,k.isSolanaSignerFeatureSupported)(n,e,t,R),d=e=>{const t=f(e.input),a=e.input.transactionOptions?.fetchBlockhash,C=!!!e.input.transactionOptions?.transactionResolutionContext?.templateId&&e.input.transactionOptions?.delayed===!0&&!!(t||a)&&S("delayedSigning",e._internalState.appConfig);return{rpcUrl:C?t:void 0,fetchBlockhash:C?a:void 0}};return(0,r.setup)({types:{input:{},context:{},output:{}},actors:{normalizeTransaction:(0,r.fromPromise)(c),reportSign:(0,r.fromPromise)(s),openAppStateMachine:new i.OpenAppDeviceAction({input:{appName:m.APP_NAME}}).makeStateMachine(n),getAppConfig:(0,r.fromPromise)(l),transactionCheckStateMachine:new P.ProvisionTransactionCheckDeviceAction({input:{derivationPath:this.input.derivationPath,transaction:this.input.transaction,contextModule:this.input.contextModule},loggerFactory:this.getLoggerFactory(n)}).makeStateMachine(n),provisionGenericClearSignStateMachine:new D.ProvisionGenericClearSignDeviceAction({input:{derivationPath:this.input.derivationPath,transaction:this.input.transaction,contextModule:this.input.contextModule},loggerFactory:this.getLoggerFactory(n)}).makeStateMachine(n),provisionBasicClearSignStateMachine:new v.ProvisionBasicClearSignDeviceAction({input:{derivationPath:this.input.derivationPath,transaction:this.input.transaction,contextModule:this.input.contextModule},loggerFactory:this.getLoggerFactory(n)}).makeStateMachine(n),signGenericClearSignStateMachine:new I.SignGenericClearSignDeviceAction({input:{derivationPath:this.input.derivationPath,transaction:this.input.transaction},loggerFactory:this.getLoggerFactory(n)}).makeStateMachine(n),signBasicClearSignStateMachine:new _.SignBasicClearSignDeviceAction({input:{derivationPath:this.input.derivationPath,transaction:this.input.transaction},loggerFactory:this.getLoggerFactory(n)}).makeStateMachine(n)},guards:{noInternalError:({context:e})=>e._internalState.error===null,skipOpenApp:({context:e})=>e.input.transactionOptions?.skipOpenApp||!1,isTransactionChecksSupported:({context:e})=>S("transactionChecks",e._internalState.appConfig),isGenericClearSignAvailable:({context:e})=>S("genericClearSign",e._internalState.appConfig),isClearSignPrepared:({context:e})=>e._internalState.clearSignPrepared,hasSignature:({context:e})=>e._internalState.signature!==null},actions:{assignErrorFromEvent:(0,r.assign)({_internalState:e=>({...e.context._internalState,error:new i.UnknownDAError(e.event.error instanceof Error?e.event.error.message:String(e.event.error))})})}}).createMachine({id:"SignTransactionDeviceAction",initial:"NormalizeTransaction",context:({input:e})=>({input:e,intermediateValue:{requiredUserInteraction:i.UserInteractionRequired.None,step:p.signTransactionDAStateSteps.OPEN_APP},_internalState:{error:null,signature:null,appConfig:null,messageBytes:this.input.transaction,serializedForTxCheck:void 0,clearSignPrepared:!1,unrecognizedProgramIds:[],staleDescriptor:!1}}),states:{NormalizeTransaction:{entry:(0,r.assign)({intermediateValue:({context:e})=>({requiredUserInteraction:i.UserInteractionRequired.None,step:e.input.transactionOptions?.skipOpenApp?p.signTransactionDAStateSteps.GET_APP_CONFIG:p.signTransactionDAStateSteps.OPEN_APP})}),invoke:{id:"normalizeTransaction",src:"normalizeTransaction",onDone:[{target:"GetAppConfig",guard:"skipOpenApp",actions:(0,r.assign)({_internalState:({event:e,context:t})=>({...t._internalState,messageBytes:e.output.messageBytes,serializedForTxCheck:e.output.serializedForTxCheck})})},{target:"OpenAppDeviceAction",actions:(0,r.assign)({_internalState:({event:e,context:t})=>({...t._internalState,messageBytes:e.output.messageBytes,serializedForTxCheck:e.output.serializedForTxCheck})})}]}},OpenAppDeviceAction:{entry:(0,r.assign)({intermediateValue:()=>({requiredUserInteraction:i.UserInteractionRequired.None,step:p.signTransactionDAStateSteps.OPEN_APP})}),invoke:{id:"openAppStateMachine",src:"openAppStateMachine",input:()=>({appName:m.APP_NAME}),onSnapshot:{actions:(0,r.assign)({intermediateValue:({event:e})=>({...e.snapshot.context.intermediateValue,step:p.signTransactionDAStateSteps.OPEN_APP})})},onDone:{target:"OpenAppResultCheck",actions:(0,r.assign)({_internalState:({event:e,context:t})=>e.output.caseOf({Right:()=>t._internalState,Left:a=>({...t._internalState,error:a})})})}}},OpenAppResultCheck:{always:[{target:"GetAppConfig",guard:"noInternalError"},{target:"Error"}]},GetAppConfig:{entry:(0,r.assign)({intermediateValue:()=>({requiredUserInteraction:i.UserInteractionRequired.None,step:p.signTransactionDAStateSteps.GET_APP_CONFIG})}),invoke:{id:"getAppConfig",src:"getAppConfig",onDone:{target:"GetAppConfigResultCheck",actions:(0,r.assign)({_internalState:({event:e,context:t})=>(0,i.isSuccessCommandResult)(e.output)?{...t._internalState,appConfig:e.output.data}:{...t._internalState,error:e.output.error}})},onError:{target:"Error",actions:"assignErrorFromEvent"}}},GetAppConfigResultCheck:{always:[{target:"CheckTransactionCheckSupported",guard:"noInternalError"},{target:"Error"}]},CheckTransactionCheckSupported:{always:[{target:"TxCheck",guard:"isTransactionChecksSupported"},{target:"CheckGenericClearSignSupported"}]},TxCheck:{invoke:{id:"transactionCheckStateMachine",src:"transactionCheckStateMachine",input:({context:e})=>{const{rpcUrl:t,fetchBlockhash:a}=d(e);return{appConfig:e._internalState.appConfig,derivationPath:e.input.derivationPath,transaction:e._internalState.messageBytes,contextModule:e.input.contextModule,isBlockhashRefreshNeeded:t!==void 0||a!==void 0,serializedForTxCheck:e._internalState.serializedForTxCheck}},onSnapshot:{actions:(0,r.assign)({intermediateValue:({event:e})=>e.snapshot.context.intermediateValue})},onDone:{target:"CheckGenericClearSignSupported"}}},CheckGenericClearSignSupported:{always:[{target:"GenericClearSign",guard:(0,r.and)(["noInternalError","isGenericClearSignAvailable"])},{target:"BasicClearSign",guard:"noInternalError"},{target:"Error"}]},GenericClearSign:{invoke:{id:"provisionGenericClearSignStateMachine",src:"provisionGenericClearSignStateMachine",input:({context:e})=>({derivationPath:e.input.derivationPath,transaction:e._internalState.messageBytes,contextModule:e.input.contextModule}),onSnapshot:{actions:(0,r.assign)({intermediateValue:({event:e})=>e.snapshot.context.intermediateValue})},onDone:{target:"CheckGenericClearSignResult",actions:(0,r.assign)({_internalState:({event:e,context:t})=>e.output.caseOf({Right:a=>({...t._internalState,clearSignPrepared:a.status==="prepared",unrecognizedProgramIds:a.unrecognizedProgramIds,staleDescriptor:a.staleDescriptor}),Left:a=>({...t._internalState,error:a})})})},onError:{target:"BasicClearSign",actions:({event:e})=>M.info("[ClearSign] generic clear-sign threw; falling back to legacy",{data:{error:String(e.error)}})}}},CheckGenericClearSignResult:{always:[{target:"GenericTerminalSign",guard:(0,r.and)(["noInternalError","isClearSignPrepared"])},{target:"BasicClearSign",guard:"noInternalError"},{target:"Error"}]},GenericTerminalSign:{invoke:{id:"signGenericClearSignStateMachine",src:"signGenericClearSignStateMachine",input:({context:e})=>{const{rpcUrl:t,fetchBlockhash:a}=d(e);return{derivationPath:e.input.derivationPath,transaction:e._internalState.messageBytes,rpcUrl:t,fetchBlockhash:a,userInputType:e.input.transactionOptions?.transactionResolutionContext?.userInputType,blockhashService:e.input.blockhashService}},onSnapshot:{actions:(0,r.assign)({intermediateValue:({event:e})=>e.snapshot.context.intermediateValue})},onDone:{target:"CheckGenericTerminalSignResult",actions:(0,r.assign)({_internalState:({event:e,context:t})=>e.output.caseOf({Right:a=>a==="degraded"?t._internalState:{...t._internalState,signature:a},Left:a=>({...t._internalState,error:a})})})}}},CheckGenericTerminalSignResult:{always:[{target:"Report",guard:"hasSignature"},{target:"BasicClearSign",guard:"noInternalError"},{target:"Report"}]},BasicClearSign:{invoke:{id:"provisionBasicClearSignStateMachine",src:"provisionBasicClearSignStateMachine",input:({context:e})=>({derivationPath:e.input.derivationPath,transaction:e._internalState.messageBytes,contextModule:e.input.contextModule,appConfig:e._internalState.appConfig,rpcUrl:f(e.input),resolutionContext:e.input.transactionOptions?.transactionResolutionContext}),onSnapshot:{actions:(0,r.assign)({intermediateValue:({event:e})=>e.snapshot.context.intermediateValue})},onDone:{target:"Report"},onError:{target:"Report"}}},Report:{invoke:{src:"reportSign",input:({context:e})=>{const t=n.getDeviceSessionState(),a=t.sessionStateType!==i.DeviceSessionStateType.Connected?t.firmwareVersion?.os??null:null;return{isBlindSign:e._internalState.signature===null&&e._internalState.error===null,messageBytes:e._internalState.messageBytes,unrecognizedProgramIds:e._internalState.unrecognizedProgramIds,staleDescriptor:e._internalState.staleDescriptor,contextModule:e.input.contextModule,signerAppVersion:e._internalState.appConfig.version,deviceModelId:t.deviceModelId,deviceVersion:a,loggerFactory:g}},onDone:[{target:"SignTransactionResultCheck",guard:"hasSignature"},{target:"Error",guard:({context:e})=>e._internalState.error!==null},{target:"BasicTerminalSign"}],onError:[{target:"SignTransactionResultCheck",guard:"hasSignature"},{target:"Error",guard:({context:e})=>e._internalState.error!==null},{target:"BasicTerminalSign"}]}},BasicTerminalSign:{invoke:{id:"signBasicClearSignStateMachine",src:"signBasicClearSignStateMachine",input:({context:e})=>{const{rpcUrl:t,fetchBlockhash:a}=d(e);return{derivationPath:e.input.derivationPath,transaction:e._internalState.messageBytes,rpcUrl:t,fetchBlockhash:a,userInputType:e.input.transactionOptions?.transactionResolutionContext?.userInputType,blockhashService:e.input.blockhashService}},onSnapshot:{actions:(0,r.assign)({intermediateValue:({event:e})=>e.snapshot.context.intermediateValue})},onDone:{target:"SignTransactionResultCheck",actions:(0,r.assign)({_internalState:({event:e,context:t})=>e.output.caseOf({Right:a=>({...t._internalState,signature:a}),Left:a=>({...t._internalState,error:a})})})}}},SignTransactionResultCheck:{always:[{guard:"noInternalError",target:"Success"},{target:"Error"}]},Success:{type:"final"},Error:{type:"final"}},output:({context:e})=>e._internalState.signature?(0,u.Right)(e._internalState.signature):(0,u.Left)(e._internalState.error||new i.UnknownDAError("No error or signature available"))})}extractDependencies(n){return{normalizeTransaction:async()=>{try{return new y.TransactionInputNormaliser().normalize(this.input.transaction)}catch(g){return this.getLoggerFactory(n)("NormalizeTransaction").warn("[normalizeTransaction] format detection failed; treating input as message bytes",{data:{error:String(g)}}),{messageBytes:this.input.transaction,serializedForTxCheck:void 0}}},getAppConfig:async()=>n.sendCommand(new T.GetAppConfigurationCommand),reportSign:async g=>new A.SolanaSigningReportTask(g.input).run()}}}0&&(module.exports={SignTransactionDeviceAction});
|
|
1
|
+
"use strict";var d=Object.defineProperty;var E=Object.getOwnPropertyDescriptor;var B=Object.getOwnPropertyNames;var F=Object.prototype.hasOwnProperty;var G=(o,n)=>{for(var c in n)d(o,c,{get:n[c],enumerable:!0})},O=(o,n,c,l)=>{if(n&&typeof n=="object"||typeof n=="function")for(let s of B(n))!F.call(o,s)&&s!==c&&d(o,s,{get:()=>n[s],enumerable:!(l=E(n,s))||l.enumerable});return o};var z=o=>O(d({},"__esModule",{value:!0}),o);var N={};G(N,{SignTransactionDeviceAction:()=>w});module.exports=z(N);var i=require("@ledgerhq/device-management-kit"),u=require("purify-ts"),a=require("xstate"),p=require("../../../api/app-binder/SignTransactionDeviceActionTypes"),f=require("../../app-binder/command/GetAppConfigurationCommand"),h=require("../../app-binder/constants"),y=require("../../app-binder/services/TransactionInputNormaliser"),k=require("../../app-binder/SolanaApplicationResolver"),A=require("../../app-binder/task/SolanaSigningReportTask"),v=require("./ProvisionBasicClearSignDeviceAction"),D=require("./ProvisionGenericClearSignDeviceAction"),P=require("./ProvisionTransactionCheckDeviceAction"),_=require("./SignBasicClearSignDeviceAction"),I=require("./SignGenericClearSignDeviceAction");function T(o){return o.transactionOptions?.solanaRPCURL??o.solanaRPCURL}class w extends i.XStateDeviceAction{makeStateMachine(n){const{normalizeTransaction:c,getAppConfig:l,reportSign:s}=this.extractDependencies(n),g=this.getLoggerFactory(n),M=g("SignTransactionDeviceAction"),R=this.input.disabledFeatures?new Set(this.input.disabledFeatures):void 0,S=(e,t)=>(0,k.isSolanaSignerFeatureSupported)(n,e,t,R),m=e=>{const t=T(e.input),r=e.input.transactionOptions?.fetchBlockhash,C=!!!e.input.transactionOptions?.transactionResolutionContext?.templateId&&e.input.transactionOptions?.delayed===!0&&!!(t||r)&&S("delayedSigning",e._internalState.appConfig);return{rpcUrl:C?t:void 0,fetchBlockhash:C?r:void 0}};return(0,a.setup)({types:{input:{},context:{},output:{}},actors:{normalizeTransaction:(0,a.fromPromise)(c),reportSign:(0,a.fromPromise)(s),openAppStateMachine:new i.OpenAppDeviceAction({input:{appName:h.APP_NAME}}).makeStateMachine(n),getAppConfig:(0,a.fromPromise)(l),transactionCheckStateMachine:new P.ProvisionTransactionCheckDeviceAction({input:{derivationPath:this.input.derivationPath,transaction:this.input.transaction,contextModule:this.input.contextModule},loggerFactory:this.getLoggerFactory(n)}).makeStateMachine(n),provisionGenericClearSignStateMachine:new D.ProvisionGenericClearSignDeviceAction({input:{derivationPath:this.input.derivationPath,transaction:this.input.transaction,contextModule:this.input.contextModule},loggerFactory:this.getLoggerFactory(n)}).makeStateMachine(n),provisionBasicClearSignStateMachine:new v.ProvisionBasicClearSignDeviceAction({input:{derivationPath:this.input.derivationPath,transaction:this.input.transaction,contextModule:this.input.contextModule},loggerFactory:this.getLoggerFactory(n)}).makeStateMachine(n),signGenericClearSignStateMachine:new I.SignGenericClearSignDeviceAction({input:{derivationPath:this.input.derivationPath,transaction:this.input.transaction},loggerFactory:this.getLoggerFactory(n)}).makeStateMachine(n),signBasicClearSignStateMachine:new _.SignBasicClearSignDeviceAction({input:{derivationPath:this.input.derivationPath,transaction:this.input.transaction},loggerFactory:this.getLoggerFactory(n)}).makeStateMachine(n)},guards:{noInternalError:({context:e})=>e._internalState.error===null,skipOpenApp:({context:e})=>e.input.transactionOptions?.skipOpenApp||!1,isTransactionChecksSupported:({context:e})=>S("transactionChecks",e._internalState.appConfig),isGenericClearSignAvailable:({context:e})=>S("genericClearSign",e._internalState.appConfig),isClearSignPrepared:({context:e})=>e._internalState.clearSignPrepared,hasSignature:({context:e})=>e._internalState.signature!==null},actions:{assignErrorFromEvent:(0,a.assign)({_internalState:e=>({...e.context._internalState,error:new i.UnknownDAError(e.event.error instanceof Error?e.event.error.message:String(e.event.error))})})}}).createMachine({id:"SignTransactionDeviceAction",initial:"NormalizeTransaction",context:({input:e})=>({input:e,intermediateValue:{requiredUserInteraction:i.UserInteractionRequired.None,step:p.signTransactionDAStateSteps.OPEN_APP},_internalState:{error:null,signature:null,appConfig:null,messageBytes:this.input.transaction,serializedForTxCheck:void 0,clearSignPrepared:!1,unrecognizedProgramIds:[],staleDescriptor:!1}}),states:{NormalizeTransaction:{entry:(0,a.assign)({intermediateValue:({context:e})=>({requiredUserInteraction:i.UserInteractionRequired.None,step:e.input.transactionOptions?.skipOpenApp?p.signTransactionDAStateSteps.GET_APP_CONFIG:p.signTransactionDAStateSteps.OPEN_APP})}),invoke:{id:"normalizeTransaction",src:"normalizeTransaction",onDone:[{target:"GetAppConfig",guard:"skipOpenApp",actions:(0,a.assign)({_internalState:({event:e,context:t})=>({...t._internalState,messageBytes:e.output.messageBytes,serializedForTxCheck:e.output.serializedForTxCheck})})},{target:"OpenAppDeviceAction",actions:(0,a.assign)({_internalState:({event:e,context:t})=>({...t._internalState,messageBytes:e.output.messageBytes,serializedForTxCheck:e.output.serializedForTxCheck})})}]}},OpenAppDeviceAction:{entry:(0,a.assign)({intermediateValue:()=>({requiredUserInteraction:i.UserInteractionRequired.None,step:p.signTransactionDAStateSteps.OPEN_APP})}),invoke:{id:"openAppStateMachine",src:"openAppStateMachine",input:()=>({appName:h.APP_NAME}),onSnapshot:{actions:(0,a.assign)({intermediateValue:({event:e})=>({...e.snapshot.context.intermediateValue,step:p.signTransactionDAStateSteps.OPEN_APP})})},onDone:{target:"OpenAppResultCheck",actions:(0,a.assign)({_internalState:({event:e,context:t})=>e.output.caseOf({Right:()=>t._internalState,Left:r=>({...t._internalState,error:r})})})}}},OpenAppResultCheck:{always:[{target:"GetAppConfig",guard:"noInternalError"},{target:"Error"}]},GetAppConfig:{entry:(0,a.assign)({intermediateValue:()=>({requiredUserInteraction:i.UserInteractionRequired.None,step:p.signTransactionDAStateSteps.GET_APP_CONFIG})}),invoke:{id:"getAppConfig",src:"getAppConfig",onDone:{target:"GetAppConfigResultCheck",actions:(0,a.assign)({_internalState:({event:e,context:t})=>(0,i.isSuccessCommandResult)(e.output)?{...t._internalState,appConfig:e.output.data}:{...t._internalState,error:e.output.error}})},onError:{target:"Error",actions:"assignErrorFromEvent"}}},GetAppConfigResultCheck:{always:[{target:"CheckTransactionCheckSupported",guard:"noInternalError"},{target:"Error"}]},CheckTransactionCheckSupported:{always:[{target:"TxCheck",guard:"isTransactionChecksSupported"},{target:"CheckGenericClearSignSupported"}]},TxCheck:{invoke:{id:"transactionCheckStateMachine",src:"transactionCheckStateMachine",input:({context:e})=>({appConfig:e._internalState.appConfig,derivationPath:e.input.derivationPath,transaction:e._internalState.messageBytes,contextModule:e.input.contextModule,serializedForTxCheck:e._internalState.serializedForTxCheck}),onSnapshot:{actions:(0,a.assign)({intermediateValue:({event:e})=>e.snapshot.context.intermediateValue})},onDone:{target:"CheckGenericClearSignSupported"}}},CheckGenericClearSignSupported:{always:[{target:"GenericClearSign",guard:(0,a.and)(["noInternalError","isGenericClearSignAvailable"])},{target:"BasicClearSign",guard:"noInternalError"},{target:"Error"}]},GenericClearSign:{invoke:{id:"provisionGenericClearSignStateMachine",src:"provisionGenericClearSignStateMachine",input:({context:e})=>({derivationPath:e.input.derivationPath,transaction:e._internalState.messageBytes,contextModule:e.input.contextModule}),onSnapshot:{actions:(0,a.assign)({intermediateValue:({event:e})=>e.snapshot.context.intermediateValue})},onDone:{target:"CheckGenericClearSignResult",actions:(0,a.assign)({_internalState:({event:e,context:t})=>e.output.caseOf({Right:r=>({...t._internalState,clearSignPrepared:r.status==="prepared",unrecognizedProgramIds:r.unrecognizedProgramIds,staleDescriptor:r.staleDescriptor}),Left:r=>({...t._internalState,error:r})})})},onError:{target:"BasicClearSign",actions:({event:e})=>M.info("[ClearSign] generic clear-sign threw; falling back to legacy",{data:{error:String(e.error)}})}}},CheckGenericClearSignResult:{always:[{target:"GenericTerminalSign",guard:(0,a.and)(["noInternalError","isClearSignPrepared"])},{target:"BasicClearSign",guard:"noInternalError"},{target:"Error"}]},GenericTerminalSign:{invoke:{id:"signGenericClearSignStateMachine",src:"signGenericClearSignStateMachine",input:({context:e})=>{const{rpcUrl:t,fetchBlockhash:r}=m(e);return{derivationPath:e.input.derivationPath,transaction:e._internalState.messageBytes,rpcUrl:t,fetchBlockhash:r,userInputType:e.input.transactionOptions?.transactionResolutionContext?.userInputType,blockhashService:e.input.blockhashService}},onSnapshot:{actions:(0,a.assign)({intermediateValue:({event:e})=>e.snapshot.context.intermediateValue})},onDone:{target:"CheckGenericTerminalSignResult",actions:(0,a.assign)({_internalState:({event:e,context:t})=>e.output.caseOf({Right:r=>r==="degraded"?t._internalState:{...t._internalState,signature:r},Left:r=>({...t._internalState,error:r})})})}}},CheckGenericTerminalSignResult:{always:[{target:"Report",guard:"hasSignature"},{target:"BasicClearSign",guard:"noInternalError"},{target:"Report"}]},BasicClearSign:{invoke:{id:"provisionBasicClearSignStateMachine",src:"provisionBasicClearSignStateMachine",input:({context:e})=>({derivationPath:e.input.derivationPath,transaction:e._internalState.messageBytes,contextModule:e.input.contextModule,appConfig:e._internalState.appConfig,rpcUrl:T(e.input),resolutionContext:e.input.transactionOptions?.transactionResolutionContext}),onSnapshot:{actions:(0,a.assign)({intermediateValue:({event:e})=>e.snapshot.context.intermediateValue})},onDone:{target:"Report"},onError:{target:"Report"}}},Report:{invoke:{src:"reportSign",input:({context:e})=>{const t=n.getDeviceSessionState(),r=t.sessionStateType!==i.DeviceSessionStateType.Connected?t.firmwareVersion?.os??null:null;return{isBlindSign:e._internalState.signature===null&&e._internalState.error===null,messageBytes:e._internalState.messageBytes,unrecognizedProgramIds:e._internalState.unrecognizedProgramIds,staleDescriptor:e._internalState.staleDescriptor,contextModule:e.input.contextModule,signerAppVersion:e._internalState.appConfig.version,deviceModelId:t.deviceModelId,deviceVersion:r,loggerFactory:g}},onDone:[{target:"SignTransactionResultCheck",guard:"hasSignature"},{target:"Error",guard:({context:e})=>e._internalState.error!==null},{target:"BasicTerminalSign"}],onError:[{target:"SignTransactionResultCheck",guard:"hasSignature"},{target:"Error",guard:({context:e})=>e._internalState.error!==null},{target:"BasicTerminalSign"}]}},BasicTerminalSign:{invoke:{id:"signBasicClearSignStateMachine",src:"signBasicClearSignStateMachine",input:({context:e})=>{const{rpcUrl:t,fetchBlockhash:r}=m(e);return{derivationPath:e.input.derivationPath,transaction:e._internalState.messageBytes,rpcUrl:t,fetchBlockhash:r,userInputType:e.input.transactionOptions?.transactionResolutionContext?.userInputType,blockhashService:e.input.blockhashService}},onSnapshot:{actions:(0,a.assign)({intermediateValue:({event:e})=>e.snapshot.context.intermediateValue})},onDone:{target:"SignTransactionResultCheck",actions:(0,a.assign)({_internalState:({event:e,context:t})=>e.output.caseOf({Right:r=>({...t._internalState,signature:r}),Left:r=>({...t._internalState,error:r})})})}}},SignTransactionResultCheck:{always:[{guard:"noInternalError",target:"Success"},{target:"Error"}]},Success:{type:"final"},Error:{type:"final"}},output:({context:e})=>e._internalState.signature?(0,u.Right)(e._internalState.signature):(0,u.Left)(e._internalState.error||new i.UnknownDAError("No error or signature available"))})}extractDependencies(n){return{normalizeTransaction:async()=>{try{return new y.TransactionInputNormaliser().normalize(this.input.transaction)}catch(g){return this.getLoggerFactory(n)("NormalizeTransaction").warn("[normalizeTransaction] format detection failed; treating input as message bytes",{data:{error:String(g)}}),{messageBytes:this.input.transaction,serializedForTxCheck:void 0}}},getAppConfig:async()=>n.sendCommand(new f.GetAppConfigurationCommand),reportSign:async g=>new A.SolanaSigningReportTask(g.input).run()}}}0&&(module.exports={SignTransactionDeviceAction});
|
|
2
2
|
//# sourceMappingURL=SignTransactionDeviceAction.js.map
|