@ledgerhq/device-signer-kit-solana 1.13.2 → 1.13.4
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/ProvisionTransactionCheckDeviceAction.test.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/ProvisionTransactionCheckDeviceAction.test.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 +3 -3
- package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.test.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/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/services/TransactionInputNormaliser.js +1 -1
- package/lib/cjs/internal/app-binder/services/TransactionInputNormaliser.js.map +3 -3
- package/lib/cjs/internal/app-binder/services/TransactionInputNormaliser.test.js +1 -1
- package/lib/cjs/internal/app-binder/services/TransactionInputNormaliser.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/services/__test-utils__/ambiguousMessages.js +2 -0
- package/lib/cjs/internal/app-binder/services/__test-utils__/ambiguousMessages.js.map +7 -0
- package/lib/cjs/internal/app-binder/services/utils/TransactionParser.js +1 -1
- package/lib/cjs/internal/app-binder/services/utils/TransactionParser.js.map +3 -3
- package/lib/cjs/internal/app-binder/services/utils/TransactionParser.test.js +1 -1
- package/lib/cjs/internal/app-binder/services/utils/TransactionParser.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 +3 -3
- 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/ProvisionTransactionCheckDeviceAction.test.js +1 -1
- package/lib/esm/internal/app-binder/device-action/ProvisionTransactionCheckDeviceAction.test.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 +3 -3
- package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.test.js +1 -1
- package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.test.js.map +3 -3
- package/lib/esm/internal/app-binder/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/services/TransactionInputNormaliser.js +1 -1
- package/lib/esm/internal/app-binder/services/TransactionInputNormaliser.js.map +3 -3
- package/lib/esm/internal/app-binder/services/TransactionInputNormaliser.test.js +1 -1
- package/lib/esm/internal/app-binder/services/TransactionInputNormaliser.test.js.map +3 -3
- package/lib/esm/internal/app-binder/services/__test-utils__/ambiguousMessages.js +2 -0
- package/lib/esm/internal/app-binder/services/__test-utils__/ambiguousMessages.js.map +7 -0
- package/lib/esm/internal/app-binder/services/utils/TransactionParser.js +1 -1
- package/lib/esm/internal/app-binder/services/utils/TransactionParser.js.map +3 -3
- package/lib/esm/internal/app-binder/services/utils/TransactionParser.test.js +1 -1
- package/lib/esm/internal/app-binder/services/utils/TransactionParser.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 +3 -3
- package/lib/types/api/app-binder/ProvisionTransactionCheckDeviceActionTypes.d.ts +5 -2
- 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/services/TransactionInputNormaliser.d.ts +23 -8
- package/lib/types/internal/app-binder/services/TransactionInputNormaliser.d.ts.map +1 -1
- package/lib/types/internal/app-binder/services/__test-utils__/ambiguousMessages.d.ts +7 -0
- package/lib/types/internal/app-binder/services/__test-utils__/ambiguousMessages.d.ts.map +1 -0
- package/lib/types/internal/app-binder/services/utils/TransactionParser.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 +7 -7
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var r=Object.defineProperty;var
|
|
1
|
+
"use strict";var r=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var c=(n,e,a,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of p(e))!l.call(n,t)&&t!==a&&r(n,t,{get:()=>e[t],enumerable:!(o=i(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 * `transactionChecksEnabled` is the state after the opt-in prompt (if any),\n * so the parent can re-provision later without prompting again.\n */\nexport type ProvisionTransactionCheckDAOutput = {\n readonly transactionChecksEnabled: boolean;\n};\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"),d=require("purify-ts"),r=require("xstate"),s=require("../../../api/app-binder/SignTransactionDeviceActionTypes"),h=require("../../app-binder/command/TransactionCheckOptInCommand"),u=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:C})=>(0,a.isSuccessCommandResult)(t.output)?{appConfig:{...C._internalState.appConfig,transactionChecksEnabled:t.output.data.enabled}}:C._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:({context:t})=>(0,d.Right)({transactionChecksEnabled:t._internalState.appConfig?.transactionChecksEnabled===!0})})}extractDependencies(e){return{transactionCheckOptIn:async()=>e.sendCommand(new h.TransactionCheckOptInCommand),provideTransactionCheck:async n=>new u.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: ({ context }) =>\n Right({\n transactionChecksEnabled:\n context._internalState.appConfig?.transactionChecksEnabled === true,\n }),\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
|
}
|
package/lib/cjs/internal/app-binder/device-action/ProvisionTransactionCheckDeviceAction.test.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var a=require("@ledgerhq/device-management-kit"),e=require("vitest"),l=require("../../../api/app-binder/SignTransactionDeviceActionTypes"),C=require("../../../api/model/PublicKeyDisplayMode"),v=require("./__test-utils__/makeInternalApi"),
|
|
1
|
+
"use strict";var a=require("@ledgerhq/device-management-kit"),e=require("vitest"),l=require("../../../api/app-binder/SignTransactionDeviceActionTypes"),C=require("../../../api/model/PublicKeyDisplayMode"),v=require("./__test-utils__/makeInternalApi"),h=require("./ProvisionTransactionCheckDeviceAction");const A="44'/501'/0'/0'",T=new Uint8Array([222,173,190,239]),D={getContexts:e.vi.fn()};function d(i={}){return{blindSigningEnabled:!0,pubKeyDisplayMode:C.PublicKeyDisplayMode.LONG,version:"1.16.0",transactionChecksEnabled:!1,transactionChecksOptIn:!1,...i}}let m,r,s;function P(){return{transactionCheckOptIn:r,provideTransactionCheck:s}}function c(i,t,n){const o=new h.ProvisionTransactionCheckDeviceAction({input:i});e.vi.spyOn(o,"extractDependencies").mockReturnValue(P());const{observable:f}=o._execute(m),u=[];f.subscribe({next:k=>u.push(k),error:n,complete:()=>t(u)})}function y(i){const t=[];for(const n of i){if(n.status!==a.DeviceActionStatus.Pending)continue;const o=n.intermediateValue.step;o&&t[t.length-1]!==o&&t.push(o)}return t}const p={derivationPath:A,transaction:T,contextModule:D,appConfig:d()};(0,e.describe)("ProvisionTransactionCheckDeviceAction",()=>{(0,e.beforeEach)(()=>{m=(0,v.makeDeviceActionInternalApiMock)(),r=e.vi.fn().mockResolvedValue((0,a.CommandResultFactory)({data:{enabled:!0}})),s=e.vi.fn().mockResolvedValue(void 0)}),(0,e.it)("not opted-in: runs opt-in, then provide when enabled, then completes",()=>new Promise((i,t)=>{c(p,n=>{try{(0,e.expect)(r).toHaveBeenCalled(),(0,e.expect)(s).toHaveBeenCalled();const o=y(n);(0,e.expect)(o).toContain(l.signTransactionDAStateSteps.TRANSACTION_CHECKS_OPT_IN),(0,e.expect)(o).toContain(l.signTransactionDAStateSteps.TRANSACTION_CHECKS_PROVIDE),(0,e.expect)(o.indexOf(l.signTransactionDAStateSteps.TRANSACTION_CHECKS_OPT_IN)).toBeLessThan(o.indexOf(l.signTransactionDAStateSteps.TRANSACTION_CHECKS_PROVIDE)),(0,e.expect)(n[n.length-1]).toEqual({status:a.DeviceActionStatus.Completed,output:{transactionChecksEnabled:!0}}),i()}catch(o){t(o)}},t)})),(0,e.it)("not opted-in + opt-in returns disabled: skips provide",()=>new Promise((i,t)=>{r.mockResolvedValue((0,a.CommandResultFactory)({data:{enabled:!1}})),c(p,n=>{try{(0,e.expect)(r).toHaveBeenCalled(),(0,e.expect)(s).not.toHaveBeenCalled(),(0,e.expect)(n[n.length-1]).toEqual({status:a.DeviceActionStatus.Completed,output:{transactionChecksEnabled:!1}}),i()}catch(o){t(o)}},t)})),(0,e.it)("already enabled: skips opt-in, runs provide directly",()=>new Promise((i,t)=>{c({...p,appConfig:d({transactionChecksEnabled:!0,transactionChecksOptIn:!0})},n=>{try{(0,e.expect)(r).not.toHaveBeenCalled(),(0,e.expect)(s).toHaveBeenCalled(),(0,e.expect)(n[n.length-1].status).toBe(a.DeviceActionStatus.Completed),i()}catch(o){t(o)}},t)})),(0,e.it)("already opted-in but not enabled: skips both opt-in and provide",()=>new Promise((i,t)=>{c({...p,appConfig:d({transactionChecksEnabled:!1,transactionChecksOptIn:!0})},n=>{try{(0,e.expect)(r).not.toHaveBeenCalled(),(0,e.expect)(s).not.toHaveBeenCalled(),(0,e.expect)(n[n.length-1].status).toBe(a.DeviceActionStatus.Completed),i()}catch(o){t(o)}},t)})),(0,e.it)("opt-in throws: still completes without provide (best-effort)",()=>new Promise((i,t)=>{r.mockRejectedValue(new Error("transport error")),c(p,n=>{try{(0,e.expect)(r).toHaveBeenCalled(),(0,e.expect)(s).not.toHaveBeenCalled(),(0,e.expect)(n[n.length-1].status).toBe(a.DeviceActionStatus.Completed),i()}catch(o){t(o)}},t)})),(0,e.it)("provide throws: still completes (best-effort)",()=>new Promise((i,t)=>{s.mockRejectedValue(new Error("provide error")),c({...p,appConfig:d({transactionChecksEnabled:!0,transactionChecksOptIn:!0})},n=>{try{(0,e.expect)(s).toHaveBeenCalled(),(0,e.expect)(n[n.length-1].status).toBe(a.DeviceActionStatus.Completed),i()}catch(o){t(o)}},t)}))});
|
|
2
2
|
//# sourceMappingURL=ProvisionTransactionCheckDeviceAction.test.js.map
|
package/lib/cjs/internal/app-binder/device-action/ProvisionTransactionCheckDeviceAction.test.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/device-action/ProvisionTransactionCheckDeviceAction.test.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n CommandResultFactory,\n type DeviceActionState,\n DeviceActionStatus,\n} from \"@ledgerhq/device-management-kit\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport {\n type ProvisionTransactionCheckDAError,\n type ProvisionTransactionCheckDAInput,\n type ProvisionTransactionCheckDAIntermediateValue,\n} from \"@api/app-binder/ProvisionTransactionCheckDeviceActionTypes\";\nimport { signTransactionDAStateSteps } from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { type AppConfiguration } from \"@api/model/AppConfiguration\";\nimport { PublicKeyDisplayMode } from \"@api/model/PublicKeyDisplayMode\";\n\nimport { makeDeviceActionInternalApiMock } from \"./__test-utils__/makeInternalApi\";\nimport { ProvisionTransactionCheckDeviceAction } from \"./ProvisionTransactionCheckDeviceAction\";\n\nconst defaultDerivation = \"44'/501'/0'/0'\";\nconst exampleTx = new Uint8Array([0xde, 0xad, 0xbe, 0xef]);\n\nconst contextModuleStub = { getContexts: vi.fn() } as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n\nfunction makeAppConfig(\n overrides: Partial<AppConfiguration> = {},\n): AppConfiguration {\n return {\n blindSigningEnabled: true,\n pubKeyDisplayMode: PublicKeyDisplayMode.LONG,\n version: \"1.16.0\",\n transactionChecksEnabled: false,\n transactionChecksOptIn: false,\n ...overrides,\n };\n}\n\nlet apiMock: ReturnType<typeof makeDeviceActionInternalApiMock>;\nlet optInMock: ReturnType<typeof vi.fn>;\nlet provideMock: ReturnType<typeof vi.fn>;\n\nfunction extractDeps() {\n return {\n transactionCheckOptIn: optInMock,\n provideTransactionCheck: provideMock,\n };\n}\n\nfunction run(\n input: ProvisionTransactionCheckDAInput,\n onComplete: (\n states: DeviceActionState<\n
|
|
5
|
-
"mappings": "aAAA,IAAAA,EAIO,2CACPC,EAAqD,
|
|
4
|
+
"sourcesContent": ["import {\n CommandResultFactory,\n type DeviceActionState,\n DeviceActionStatus,\n} from \"@ledgerhq/device-management-kit\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport {\n type ProvisionTransactionCheckDAError,\n type ProvisionTransactionCheckDAInput,\n type ProvisionTransactionCheckDAIntermediateValue,\n type ProvisionTransactionCheckDAOutput,\n} from \"@api/app-binder/ProvisionTransactionCheckDeviceActionTypes\";\nimport { signTransactionDAStateSteps } from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { type AppConfiguration } from \"@api/model/AppConfiguration\";\nimport { PublicKeyDisplayMode } from \"@api/model/PublicKeyDisplayMode\";\n\nimport { makeDeviceActionInternalApiMock } from \"./__test-utils__/makeInternalApi\";\nimport { ProvisionTransactionCheckDeviceAction } from \"./ProvisionTransactionCheckDeviceAction\";\n\nconst defaultDerivation = \"44'/501'/0'/0'\";\nconst exampleTx = new Uint8Array([0xde, 0xad, 0xbe, 0xef]);\n\nconst contextModuleStub = { getContexts: vi.fn() } as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n\nfunction makeAppConfig(\n overrides: Partial<AppConfiguration> = {},\n): AppConfiguration {\n return {\n blindSigningEnabled: true,\n pubKeyDisplayMode: PublicKeyDisplayMode.LONG,\n version: \"1.16.0\",\n transactionChecksEnabled: false,\n transactionChecksOptIn: false,\n ...overrides,\n };\n}\n\nlet apiMock: ReturnType<typeof makeDeviceActionInternalApiMock>;\nlet optInMock: ReturnType<typeof vi.fn>;\nlet provideMock: ReturnType<typeof vi.fn>;\n\nfunction extractDeps() {\n return {\n transactionCheckOptIn: optInMock,\n provideTransactionCheck: provideMock,\n };\n}\n\nfunction run(\n input: ProvisionTransactionCheckDAInput,\n onComplete: (\n states: DeviceActionState<\n ProvisionTransactionCheckDAOutput,\n ProvisionTransactionCheckDAError,\n ProvisionTransactionCheckDAIntermediateValue\n >[],\n ) => void,\n onError: (e: unknown) => void,\n) {\n const action = new ProvisionTransactionCheckDeviceAction({ input });\n vi.spyOn(action, \"extractDependencies\").mockReturnValue(extractDeps() as any); // eslint-disable-line @typescript-eslint/no-explicit-any\n const { observable } = action._execute(apiMock);\n const states: DeviceActionState<\n ProvisionTransactionCheckDAOutput,\n ProvisionTransactionCheckDAError,\n ProvisionTransactionCheckDAIntermediateValue\n >[] = [];\n observable.subscribe({\n next: (s) => states.push(s),\n error: onError,\n complete: () => onComplete(states),\n });\n}\n\nfunction stepSequence(\n states: DeviceActionState<\n ProvisionTransactionCheckDAOutput,\n ProvisionTransactionCheckDAError,\n ProvisionTransactionCheckDAIntermediateValue\n >[],\n): string[] {\n const steps: string[] = [];\n for (const s of states) {\n if (s.status !== DeviceActionStatus.Pending) continue;\n const step = (s.intermediateValue as { step?: string }).step;\n if (step && steps[steps.length - 1] !== step) steps.push(step);\n }\n return steps;\n}\n\nconst baseInput: ProvisionTransactionCheckDAInput = {\n derivationPath: defaultDerivation,\n transaction: exampleTx,\n contextModule: contextModuleStub,\n appConfig: makeAppConfig(),\n};\n\ndescribe(\"ProvisionTransactionCheckDeviceAction\", () => {\n beforeEach(() => {\n apiMock = makeDeviceActionInternalApiMock();\n optInMock = vi\n .fn()\n .mockResolvedValue(CommandResultFactory({ data: { enabled: true } }));\n provideMock = vi.fn().mockResolvedValue(undefined);\n });\n\n it(\"not opted-in: runs opt-in, then provide when enabled, then completes\", () =>\n new Promise<void>((resolve, reject) => {\n run(\n baseInput, // transactionChecksEnabled: false, transactionChecksOptIn: false\n (states) => {\n try {\n expect(optInMock).toHaveBeenCalled();\n // opt-in returned enabled: true, so provide runs.\n expect(provideMock).toHaveBeenCalled();\n const steps = stepSequence(states);\n expect(steps).toContain(\n signTransactionDAStateSteps.TRANSACTION_CHECKS_OPT_IN,\n );\n expect(steps).toContain(\n signTransactionDAStateSteps.TRANSACTION_CHECKS_PROVIDE,\n );\n expect(\n steps.indexOf(\n signTransactionDAStateSteps.TRANSACTION_CHECKS_OPT_IN,\n ),\n ).toBeLessThan(\n steps.indexOf(\n signTransactionDAStateSteps.TRANSACTION_CHECKS_PROVIDE,\n ),\n );\n // The opt-in outcome is surfaced so the parent can re-provision\n // without prompting again.\n expect(states[states.length - 1]).toEqual({\n status: DeviceActionStatus.Completed,\n output: { transactionChecksEnabled: true },\n });\n resolve();\n } catch (e) {\n reject(e);\n }\n },\n reject,\n );\n }));\n\n it(\"not opted-in + opt-in returns disabled: skips provide\", () =>\n new Promise<void>((resolve, reject) => {\n optInMock.mockResolvedValue(\n CommandResultFactory({ data: { enabled: false } }),\n );\n run(\n baseInput,\n (states) => {\n try {\n expect(optInMock).toHaveBeenCalled();\n expect(provideMock).not.toHaveBeenCalled();\n expect(states[states.length - 1]).toEqual({\n status: DeviceActionStatus.Completed,\n output: { transactionChecksEnabled: false },\n });\n resolve();\n } catch (e) {\n reject(e);\n }\n },\n reject,\n );\n }));\n\n it(\"already enabled: skips opt-in, runs provide directly\", () =>\n new Promise<void>((resolve, reject) => {\n run(\n {\n ...baseInput,\n appConfig: makeAppConfig({\n transactionChecksEnabled: true,\n transactionChecksOptIn: true,\n }),\n },\n (states) => {\n try {\n expect(optInMock).not.toHaveBeenCalled();\n expect(provideMock).toHaveBeenCalled();\n expect(states[states.length - 1]!.status).toBe(\n DeviceActionStatus.Completed,\n );\n resolve();\n } catch (e) {\n reject(e);\n }\n },\n reject,\n );\n }));\n\n it(\"already opted-in but not enabled: skips both opt-in and provide\", () =>\n new Promise<void>((resolve, reject) => {\n run(\n {\n ...baseInput,\n appConfig: makeAppConfig({\n transactionChecksEnabled: false,\n transactionChecksOptIn: true,\n }),\n },\n (states) => {\n try {\n expect(optInMock).not.toHaveBeenCalled();\n expect(provideMock).not.toHaveBeenCalled();\n expect(states[states.length - 1]!.status).toBe(\n DeviceActionStatus.Completed,\n );\n resolve();\n } catch (e) {\n reject(e);\n }\n },\n reject,\n );\n }));\n\n it(\"opt-in throws: still completes without provide (best-effort)\", () =>\n new Promise<void>((resolve, reject) => {\n optInMock.mockRejectedValue(new Error(\"transport error\"));\n run(\n baseInput,\n (states) => {\n try {\n expect(optInMock).toHaveBeenCalled();\n expect(provideMock).not.toHaveBeenCalled();\n expect(states[states.length - 1]!.status).toBe(\n DeviceActionStatus.Completed,\n );\n resolve();\n } catch (e) {\n reject(e);\n }\n },\n reject,\n );\n }));\n\n it(\"provide throws: still completes (best-effort)\", () =>\n new Promise<void>((resolve, reject) => {\n provideMock.mockRejectedValue(new Error(\"provide error\"));\n run(\n {\n ...baseInput,\n appConfig: makeAppConfig({\n transactionChecksEnabled: true,\n transactionChecksOptIn: true,\n }),\n },\n (states) => {\n try {\n expect(provideMock).toHaveBeenCalled();\n expect(states[states.length - 1]!.status).toBe(\n DeviceActionStatus.Completed,\n );\n resolve();\n } catch (e) {\n reject(e);\n }\n },\n reject,\n );\n }));\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["import_device_management_kit", "import_vitest", "import_SignTransactionDeviceActionTypes", "import_PublicKeyDisplayMode", "import_makeInternalApi", "import_ProvisionTransactionCheckDeviceAction", "defaultDerivation", "exampleTx", "contextModuleStub", "makeAppConfig", "overrides", "apiMock", "optInMock", "provideMock", "extractDeps", "run", "input", "onComplete", "onError", "action", "observable", "states", "s", "stepSequence", "steps", "step", "baseInput", "resolve", "reject", "e"]
|
|
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
|
}
|