@ledgerhq/device-signer-kit-solana 1.14.0 → 1.15.0
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/SignTransactionDeviceActionTypes.js +1 -1
- package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js.map +2 -2
- package/lib/cjs/api/index.js +1 -1
- package/lib/cjs/api/index.js.map +3 -3
- package/lib/cjs/api/model/SolanaTransactionErrors.js +2 -0
- package/lib/cjs/api/model/SolanaTransactionErrors.js.map +7 -0
- package/lib/cjs/api/model/SolanaTransactionErrors.test.js +2 -0
- package/lib/cjs/api/model/SolanaTransactionErrors.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/SolanaApplicationResolver.js +1 -1
- package/lib/cjs/internal/app-binder/SolanaApplicationResolver.js.map +3 -3
- package/lib/cjs/internal/app-binder/SolanaApplicationResolver.test.js +1 -1
- package/lib/cjs/internal/app-binder/SolanaApplicationResolver.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/TransactionInspector.test.js +1 -1
- package/lib/cjs/internal/app-binder/services/TransactionInspector.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/services/__test-utils__/ambiguousMessages.js +1 -1
- package/lib/cjs/internal/app-binder/services/__test-utils__/ambiguousMessages.js.map +3 -3
- package/lib/cjs/internal/app-binder/services/__test-utils__/v1Fixtures.js +2 -0
- package/lib/cjs/internal/app-binder/services/__test-utils__/v1Fixtures.js.map +7 -0
- package/lib/cjs/internal/app-binder/services/utils/ParserError.js +1 -1
- package/lib/cjs/internal/app-binder/services/utils/ParserError.js.map +2 -2
- 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/services/utils/messageVersion.js +2 -0
- package/lib/cjs/internal/app-binder/services/utils/messageVersion.js.map +7 -0
- package/lib/cjs/internal/app-binder/services/utils/messageVersion.test.js +2 -0
- package/lib/cjs/internal/app-binder/services/utils/messageVersion.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/services/utils/v1Message.js +2 -0
- package/lib/cjs/internal/app-binder/services/utils/v1Message.js.map +7 -0
- package/lib/cjs/internal/app-binder/services/utils/v1Message.kit-contract.test.js +2 -0
- package/lib/cjs/internal/app-binder/services/utils/v1Message.kit-contract.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/services/utils/v1Message.test.js +2 -0
- package/lib/cjs/internal/app-binder/services/utils/v1Message.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/BuildGenericClearSignContextTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/BuildGenericClearSignContextTask.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/SolanaSigningReportTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/SolanaSigningReportTask.test.js.map +3 -3
- package/lib/cjs/package.json +2 -2
- package/lib/esm/api/app-binder/SignTransactionDeviceActionTypes.js.map +2 -2
- package/lib/esm/api/index.js +1 -1
- package/lib/esm/api/index.js.map +3 -3
- package/lib/esm/api/model/SolanaTransactionErrors.js +2 -0
- package/lib/esm/api/model/SolanaTransactionErrors.js.map +7 -0
- package/lib/esm/api/model/SolanaTransactionErrors.test.js +2 -0
- package/lib/esm/api/model/SolanaTransactionErrors.test.js.map +7 -0
- package/lib/esm/internal/app-binder/SolanaApplicationResolver.js +1 -1
- package/lib/esm/internal/app-binder/SolanaApplicationResolver.js.map +3 -3
- package/lib/esm/internal/app-binder/SolanaApplicationResolver.test.js +1 -1
- package/lib/esm/internal/app-binder/SolanaApplicationResolver.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/TransactionInspector.test.js +1 -1
- package/lib/esm/internal/app-binder/services/TransactionInspector.test.js.map +3 -3
- package/lib/esm/internal/app-binder/services/__test-utils__/ambiguousMessages.js +1 -1
- package/lib/esm/internal/app-binder/services/__test-utils__/ambiguousMessages.js.map +2 -2
- package/lib/esm/internal/app-binder/services/__test-utils__/v1Fixtures.js +2 -0
- package/lib/esm/internal/app-binder/services/__test-utils__/v1Fixtures.js.map +7 -0
- package/lib/esm/internal/app-binder/services/utils/ParserError.js +1 -1
- package/lib/esm/internal/app-binder/services/utils/ParserError.js.map +2 -2
- 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/services/utils/messageVersion.js +2 -0
- package/lib/esm/internal/app-binder/services/utils/messageVersion.js.map +7 -0
- package/lib/esm/internal/app-binder/services/utils/messageVersion.test.js +2 -0
- package/lib/esm/internal/app-binder/services/utils/messageVersion.test.js.map +7 -0
- package/lib/esm/internal/app-binder/services/utils/v1Message.js +2 -0
- package/lib/esm/internal/app-binder/services/utils/v1Message.js.map +7 -0
- package/lib/esm/internal/app-binder/services/utils/v1Message.kit-contract.test.js +2 -0
- package/lib/esm/internal/app-binder/services/utils/v1Message.kit-contract.test.js.map +7 -0
- package/lib/esm/internal/app-binder/services/utils/v1Message.test.js +2 -0
- package/lib/esm/internal/app-binder/services/utils/v1Message.test.js.map +7 -0
- package/lib/esm/internal/app-binder/task/BuildGenericClearSignContextTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/BuildGenericClearSignContextTask.test.js.map +3 -3
- package/lib/esm/internal/app-binder/task/SolanaSigningReportTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/SolanaSigningReportTask.test.js.map +3 -3
- package/lib/esm/package.json +2 -2
- package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts +2 -1
- package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts.map +1 -1
- package/lib/types/api/index.d.ts +1 -0
- package/lib/types/api/index.d.ts.map +1 -1
- package/lib/types/api/model/SolanaTransactionErrors.d.ts +35 -0
- package/lib/types/api/model/SolanaTransactionErrors.d.ts.map +1 -0
- package/lib/types/api/model/SolanaTransactionErrors.test.d.ts +2 -0
- package/lib/types/api/model/SolanaTransactionErrors.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/SolanaApplicationResolver.d.ts +7 -1
- package/lib/types/internal/app-binder/SolanaApplicationResolver.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 +1 -0
- package/lib/types/internal/app-binder/services/BlockhashService.d.ts.map +1 -1
- package/lib/types/internal/app-binder/services/TransactionInputNormaliser.d.ts +13 -0
- 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 +1 -0
- package/lib/types/internal/app-binder/services/__test-utils__/ambiguousMessages.d.ts.map +1 -1
- package/lib/types/internal/app-binder/services/__test-utils__/v1Fixtures.d.ts +75 -0
- package/lib/types/internal/app-binder/services/__test-utils__/v1Fixtures.d.ts.map +1 -0
- package/lib/types/internal/app-binder/services/utils/ParserError.d.ts +2 -1
- package/lib/types/internal/app-binder/services/utils/ParserError.d.ts.map +1 -1
- package/lib/types/internal/app-binder/services/utils/TransactionParser.d.ts +10 -3
- package/lib/types/internal/app-binder/services/utils/TransactionParser.d.ts.map +1 -1
- package/lib/types/internal/app-binder/services/utils/messageVersion.d.ts +27 -0
- package/lib/types/internal/app-binder/services/utils/messageVersion.d.ts.map +1 -0
- package/lib/types/internal/app-binder/services/utils/messageVersion.test.d.ts +2 -0
- package/lib/types/internal/app-binder/services/utils/messageVersion.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/services/utils/v1Message.d.ts +20 -0
- package/lib/types/internal/app-binder/services/utils/v1Message.d.ts.map +1 -0
- package/lib/types/internal/app-binder/services/utils/v1Message.kit-contract.test.d.ts +2 -0
- package/lib/types/internal/app-binder/services/utils/v1Message.kit-contract.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/services/utils/v1Message.test.d.ts +2 -0
- package/lib/types/internal/app-binder/services/utils/v1Message.test.d.ts.map +1 -0
- package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
- package/package.json +7 -7
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var o=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var s=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var S=(n,e)=>{for(var
|
|
1
|
+
"use strict";var o=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var s=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var S=(n,e)=>{for(var t in e)o(n,t,{get:e[t],enumerable:!0})},l=(n,e,t,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of s(e))!p.call(n,r)&&r!==t&&o(n,r,{get:()=>e[r],enumerable:!(a=i(e,r))||a.enumerable});return n};var c=n=>l(o({},"__esModule",{value:!0}),n);var g={};S(g,{signTransactionDAStateSteps:()=>A});module.exports=c(g);const A=Object.freeze({OPEN_APP:"signer.sol.steps.openApp",GET_APP_CONFIG:"signer.sol.steps.getAppConfig",TRANSACTION_CHECKS_OPT_IN:"signer.sol.steps.transactionChecksOptIn",TRANSACTION_CHECKS_OPT_IN_RESULT:"signer.sol.steps.transactionChecksOptInResult",TRANSACTION_CHECKS_PROVIDE:"signer.sol.steps.transactionChecksProvide",INSPECT_TRANSACTION:"signer.sol.steps.inspectTransaction",GET_PUB_KEY:"signer.sol.steps.getPubKey",BUILD_BASIC_CLEAR_SIGN_CONTEXT:"signer.sol.steps.buildBasicClearSignContext",PROVIDE_BASIC_CLEAR_SIGN_CONTEXT:"signer.sol.steps.provideBasicClearSignContext",BUILD_GENERIC_CLEAR_SIGN_CONTEXT:"signer.sol.steps.buildGenericClearSignContext",PROVIDE_GENERIC_CLEAR_SIGN_CONTEXT:"signer.sol.steps.provideGenericClearSignContext",FINALIZE_GENERIC_CLEAR_SIGN:"signer.sol.steps.finalizeGenericClearSign",PROMPT_UI_DISPLAY:"signer.sol.steps.promptUiDisplay",SIGN_TRANSACTION:"signer.sol.steps.signTransaction",DELAYED_SIGN:"signer.sol.steps.delayedSign"});0&&(module.exports={signTransactionDAStateSteps});
|
|
2
2
|
//# sourceMappingURL=SignTransactionDeviceActionTypes.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/api/app-binder/SignTransactionDeviceActionTypes.ts"],
|
|
4
|
-
"sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n type ExecuteDeviceActionReturnType,\n type OpenAppDAError,\n type OpenAppDARequiredInteraction,\n type SendCommandInAppDAError,\n type UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type AppConfiguration } from \"@api/model/AppConfiguration\";\nimport { type Signature } from \"@api/model/Signature\";\nimport { type SolanaTransactionOptionalConfig } from \"@api/model/SolanaTransactionOptionalConfig\";\nimport { type Transaction } from \"@api/model/Transaction\";\nimport { type SolanaAppErrorCodes } from \"@internal/app-binder/command/utils/SolanaApplicationErrors\";\nimport { type BlockhashService } from \"@internal/app-binder/services/BlockhashService\";\nimport { type SolanaSignerFeaturesNames } from \"@internal/app-binder/SolanaApplicationResolver\";\n\nimport { type SignClearSignDAStateStep } from \"./SignClearSignDeviceActionTypes\";\n\nexport const signTransactionDAStateSteps = Object.freeze({\n OPEN_APP: \"signer.sol.steps.openApp\",\n GET_APP_CONFIG: \"signer.sol.steps.getAppConfig\",\n TRANSACTION_CHECKS_OPT_IN: \"signer.sol.steps.transactionChecksOptIn\",\n TRANSACTION_CHECKS_OPT_IN_RESULT:\n \"signer.sol.steps.transactionChecksOptInResult\",\n TRANSACTION_CHECKS_PROVIDE: \"signer.sol.steps.transactionChecksProvide\",\n INSPECT_TRANSACTION: \"signer.sol.steps.inspectTransaction\",\n GET_PUB_KEY: \"signer.sol.steps.getPubKey\",\n BUILD_BASIC_CLEAR_SIGN_CONTEXT: \"signer.sol.steps.buildBasicClearSignContext\",\n PROVIDE_BASIC_CLEAR_SIGN_CONTEXT:\n \"signer.sol.steps.provideBasicClearSignContext\",\n BUILD_GENERIC_CLEAR_SIGN_CONTEXT:\n \"signer.sol.steps.buildGenericClearSignContext\",\n PROVIDE_GENERIC_CLEAR_SIGN_CONTEXT:\n \"signer.sol.steps.provideGenericClearSignContext\",\n FINALIZE_GENERIC_CLEAR_SIGN: \"signer.sol.steps.finalizeGenericClearSign\",\n PROMPT_UI_DISPLAY: \"signer.sol.steps.promptUiDisplay\",\n SIGN_TRANSACTION: \"signer.sol.steps.signTransaction\",\n DELAYED_SIGN: \"signer.sol.steps.delayedSign\",\n} as const);\n\n/**\n * Which clear-signing path produced the signature.\n * `full` = device ran the merge engine\n * `srfc39-only` = partial CAL coverage, device auto-rendered per-instruction without merge\n * `none` = blind/legacy fallback (no instruction recognised or capability absent).\n */\nexport type ClearSignMode = \"full\" | \"srfc39-only\" | \"none\";\n\nexport type SignTransactionDAStateStep =\n | (typeof signTransactionDAStateSteps)[keyof typeof signTransactionDAStateSteps]\n | SignClearSignDAStateStep;\n\nexport type SignTransactionDAOutput = Signature;\n\nexport type SignTransactionDAInput = {\n readonly derivationPath: string;\n readonly transaction: Transaction;\n readonly contextModule: ContextModule;\n readonly transactionOptions?: SolanaTransactionOptionalConfig;\n readonly solanaRPCURL?: string;\n readonly blockhashService?: BlockhashService;\n readonly disabledFeatures?: ReadonlyArray<SolanaSignerFeaturesNames>;\n};\n\nexport type SignTransactionDAError =\n | OpenAppDAError\n | SendCommandInAppDAError<SolanaAppErrorCodes
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,iCAAAE,IAAA,eAAAC,EAAAH,
|
|
4
|
+
"sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n type ExecuteDeviceActionReturnType,\n type OpenAppDAError,\n type OpenAppDARequiredInteraction,\n type SendCommandInAppDAError,\n type UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type AppConfiguration } from \"@api/model/AppConfiguration\";\nimport { type Signature } from \"@api/model/Signature\";\nimport {\n type InvalidSolanaTransactionError,\n type SolanaTransactionVersionNotSupportedError,\n} from \"@api/model/SolanaTransactionErrors\";\nimport { type SolanaTransactionOptionalConfig } from \"@api/model/SolanaTransactionOptionalConfig\";\nimport { type Transaction } from \"@api/model/Transaction\";\nimport { type SolanaAppErrorCodes } from \"@internal/app-binder/command/utils/SolanaApplicationErrors\";\nimport { type BlockhashService } from \"@internal/app-binder/services/BlockhashService\";\nimport { type SolanaSignerFeaturesNames } from \"@internal/app-binder/SolanaApplicationResolver\";\n\nimport { type SignClearSignDAStateStep } from \"./SignClearSignDeviceActionTypes\";\n\nexport const signTransactionDAStateSteps = Object.freeze({\n OPEN_APP: \"signer.sol.steps.openApp\",\n GET_APP_CONFIG: \"signer.sol.steps.getAppConfig\",\n TRANSACTION_CHECKS_OPT_IN: \"signer.sol.steps.transactionChecksOptIn\",\n TRANSACTION_CHECKS_OPT_IN_RESULT:\n \"signer.sol.steps.transactionChecksOptInResult\",\n TRANSACTION_CHECKS_PROVIDE: \"signer.sol.steps.transactionChecksProvide\",\n INSPECT_TRANSACTION: \"signer.sol.steps.inspectTransaction\",\n GET_PUB_KEY: \"signer.sol.steps.getPubKey\",\n BUILD_BASIC_CLEAR_SIGN_CONTEXT: \"signer.sol.steps.buildBasicClearSignContext\",\n PROVIDE_BASIC_CLEAR_SIGN_CONTEXT:\n \"signer.sol.steps.provideBasicClearSignContext\",\n BUILD_GENERIC_CLEAR_SIGN_CONTEXT:\n \"signer.sol.steps.buildGenericClearSignContext\",\n PROVIDE_GENERIC_CLEAR_SIGN_CONTEXT:\n \"signer.sol.steps.provideGenericClearSignContext\",\n FINALIZE_GENERIC_CLEAR_SIGN: \"signer.sol.steps.finalizeGenericClearSign\",\n PROMPT_UI_DISPLAY: \"signer.sol.steps.promptUiDisplay\",\n SIGN_TRANSACTION: \"signer.sol.steps.signTransaction\",\n DELAYED_SIGN: \"signer.sol.steps.delayedSign\",\n} as const);\n\n/**\n * Which clear-signing path produced the signature.\n * `full` = device ran the merge engine\n * `srfc39-only` = partial CAL coverage, device auto-rendered per-instruction without merge\n * `none` = blind/legacy fallback (no instruction recognised or capability absent).\n */\nexport type ClearSignMode = \"full\" | \"srfc39-only\" | \"none\";\n\nexport type SignTransactionDAStateStep =\n | (typeof signTransactionDAStateSteps)[keyof typeof signTransactionDAStateSteps]\n | SignClearSignDAStateStep;\n\nexport type SignTransactionDAOutput = Signature;\n\nexport type SignTransactionDAInput = {\n readonly derivationPath: string;\n readonly transaction: Transaction;\n readonly contextModule: ContextModule;\n readonly transactionOptions?: SolanaTransactionOptionalConfig;\n readonly solanaRPCURL?: string;\n readonly blockhashService?: BlockhashService;\n readonly disabledFeatures?: ReadonlyArray<SolanaSignerFeaturesNames>;\n};\n\nexport type SignTransactionDAError =\n | OpenAppDAError\n | SendCommandInAppDAError<SolanaAppErrorCodes>\n | SolanaTransactionVersionNotSupportedError\n | InvalidSolanaTransactionError;\n\ntype SignTransactionDARequiredInteraction =\n | UserInteractionRequired\n | OpenAppDARequiredInteraction;\n\n/**\n * The intermediate value shared by every sign-transaction step except the\n * TRANSACTION_CHECKS_OPT_IN_RESULT branch (which carries an extra `result`). The\n * clear-sign child machines emit exactly this shape, so the parent can fold\n * their snapshots into its own intermediate value without a cast.\n */\nexport type SignTransactionDASimpleIntermediateValue = {\n requiredUserInteraction: SignTransactionDARequiredInteraction;\n step: Exclude<\n SignTransactionDAStateStep,\n typeof signTransactionDAStateSteps.TRANSACTION_CHECKS_OPT_IN_RESULT\n >;\n};\n\nexport type SignTransactionDAIntermediateValue =\n | SignTransactionDASimpleIntermediateValue\n | {\n requiredUserInteraction: UserInteractionRequired.None;\n step: typeof signTransactionDAStateSteps.TRANSACTION_CHECKS_OPT_IN_RESULT;\n result: boolean;\n };\n\nexport type SignTransactionDAInternalState = {\n readonly error: SignTransactionDAError | null;\n readonly signature: Signature | null;\n readonly appConfig: AppConfiguration | null;\n // Updated by NormalizeTransaction; starts as the raw input and is replaced\n // with the extracted message bytes once the actor completes. serializedForTxCheck\n // is only set when the input was tx.serialize().\n readonly messageBytes: Uint8Array;\n readonly serializedForTxCheck: Uint8Array | undefined;\n // Set when the generic clear-sign path streamed + FINALIZE-validated the\n // descriptors, so the terminal sign runs the generic PROMPT UI DISPLAY flow\n // instead of the legacy preview.\n readonly clearSignPrepared: boolean;\n // Unrecognized program IDs from generic clear-sign, used for blind-sign reporting.\n readonly unrecognizedProgramIds: string[];\n // Set when generic clear-sign degraded specifically due to an ACCOUNT_SCHEMA\n // pre-check failure (stale CAL descriptor), used for blind-sign reporting.\n readonly staleDescriptor: boolean;\n // Id of the basic-flow rule that routed the transaction straight to the\n // basic flow (skipping generic clear-sign), or null when none matched.\n readonly basicFlowRuleId: string | null;\n};\n\nexport type SignTransactionDAReturnType = ExecuteDeviceActionReturnType<\n SignTransactionDAOutput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n>;\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,iCAAAE,IAAA,eAAAC,EAAAH,GAuBO,MAAME,EAA8B,OAAO,OAAO,CACvD,SAAU,2BACV,eAAgB,gCAChB,0BAA2B,0CAC3B,iCACE,gDACF,2BAA4B,4CAC5B,oBAAqB,sCACrB,YAAa,6BACb,+BAAgC,8CAChC,iCACE,gDACF,iCACE,gDACF,mCACE,kDACF,4BAA6B,4CAC7B,kBAAmB,mCACnB,iBAAkB,mCAClB,aAAc,8BAChB,CAAU",
|
|
6
6
|
"names": ["SignTransactionDeviceActionTypes_exports", "__export", "signTransactionDAStateSteps", "__toCommonJS"]
|
|
7
7
|
}
|
package/lib/cjs/api/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var i=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var T=Object.prototype.hasOwnProperty;var f=(r,e)=>{for(var n in e)i(r,n,{get:e[n],enumerable:!0})},D=(r,e,n,p)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of y(e))!T.call(r,t)&&t!==n&&i(r,t,{get:()=>e[t],enumerable:!(p=u(e,t))||p.enumerable});return r};var x=r=>D(i({},"__esModule",{value:!0}),r);var C={};f(C,{GetAddressDeviceActionFactory:()=>s.GetAddressDeviceActionFactory,GetPubKeyCommand:()=>d.GetPubKeyCommand,InvalidSolanaTransactionError:()=>o.InvalidSolanaTransactionError,SignMessageDeviceActionFactory:()=>S.SignMessageDeviceActionFactory,SignMessageVersion:()=>m.SignMessageVersion,SignTransactionDeviceAction:()=>g.SignTransactionDeviceAction,SignTransactionDeviceActionFactory:()=>c.SignTransactionDeviceActionFactory,SignerSolanaBuilder:()=>A.SignerSolanaBuilder,SolanaAppCommandError:()=>a.SolanaAppCommandError,SolanaTransactionVersionNotSupportedError:()=>o.SolanaTransactionVersionNotSupportedError,isInvalidSolanaTransactionError:()=>o.isInvalidSolanaTransactionError,isSolanaAppError:()=>a.isSolanaAppError,isSolanaTransactionVersionNotSupportedError:()=>o.isSolanaTransactionVersionNotSupportedError,signTransactionDAStateSteps:()=>l.signTransactionDAStateSteps});module.exports=x(C);var s=require("./app-binder/GetAddressDeviceActionFactory"),S=require("./app-binder/SignMessageDeviceActionFactory"),c=require("./app-binder/SignTransactionDeviceActionFactory"),l=require("./app-binder/SignTransactionDeviceActionTypes"),m=require("./model/MessageOptions"),a=require("./model/SolanaAppErrors"),o=require("./model/SolanaTransactionErrors"),A=require("./SignerSolanaBuilder"),d=require("../internal/app-binder/command/GetPubKeyCommand"),g=require("../internal/app-binder/device-action/SignTransactionDeviceAction");0&&(module.exports={GetAddressDeviceActionFactory,GetPubKeyCommand,InvalidSolanaTransactionError,SignMessageDeviceActionFactory,SignMessageVersion,SignTransactionDeviceAction,SignTransactionDeviceActionFactory,SignerSolanaBuilder,SolanaAppCommandError,SolanaTransactionVersionNotSupportedError,isInvalidSolanaTransactionError,isSolanaAppError,isSolanaTransactionVersionNotSupportedError,signTransactionDAStateSteps});
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/lib/cjs/api/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/api/index.ts"],
|
|
4
|
-
"sourcesContent": ["export { GetAddressDeviceActionFactory } from \"@api/app-binder/GetAddressDeviceActionFactory\";\nexport type {\n GetAddressDAError,\n GetAddressDAIntermediateValue,\n GetAddressDAOutput,\n GetAddressDAReturnType,\n} from \"@api/app-binder/GetAddressDeviceActionTypes\";\nexport type {\n GetAppConfigurationDAError,\n GetAppConfigurationDAIntermediateValue,\n GetAppConfigurationDAOutput,\n} from \"@api/app-binder/GetAppConfigurationDeviceActionTypes\";\nexport { SignMessageDeviceActionFactory } from \"@api/app-binder/SignMessageDeviceActionFactory\";\nexport type {\n SignMessageDAError,\n SignMessageDAIntermediateValue,\n SignMessageDAOutput,\n SignMessageTaskError,\n} from \"@api/app-binder/SignMessageDeviceActionTypes\";\nexport { SignTransactionDeviceActionFactory } from \"@api/app-binder/SignTransactionDeviceActionFactory\";\nexport {\n type ClearSignMode,\n type SignTransactionDAError,\n type SignTransactionDAInput,\n type SignTransactionDAIntermediateValue,\n type SignTransactionDAOutput,\n type SignTransactionDAReturnType,\n type SignTransactionDAStateStep,\n signTransactionDAStateSteps,\n} from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nexport type { MessageOptions } from \"@api/model/MessageOptions\";\nexport { SignMessageVersion } from \"@api/model/MessageOptions\";\nexport type { Signature } from \"@api/model/Signature\";\nexport {\n isSolanaAppError,\n SolanaAppCommandError,\n} from \"@api/model/SolanaAppErrors\";\nexport type { SolanaTransactionOptionalConfig } from \"@api/model/SolanaTransactionOptionalConfig\";\nexport type { Transaction } from \"@api/model/Transaction\";\nexport type {\n TransactionResolutionContext,\n UserInputType,\n} from \"@api/model/TransactionResolutionContext\";\nexport type { SignerSolana } from \"@api/SignerSolana\";\nexport { SignerSolanaBuilder } from \"@api/SignerSolanaBuilder\";\nexport {\n GetPubKeyCommand,\n type GetPubKeyCommandArgs,\n type GetPubKeyCommandResponse,\n} from \"@internal/app-binder/command/GetPubKeyCommand\";\nexport type { SolanaAppErrorCodes } from \"@internal/app-binder/command/utils/SolanaApplicationErrors\";\nexport { SignTransactionDeviceAction } from \"@internal/app-binder/device-action/SignTransactionDeviceAction\";\nexport type { SolanaSignerFeaturesNames } from \"@internal/app-binder/SolanaApplicationResolver\";\n"],
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,
|
|
6
|
-
"names": ["api_exports", "__export", "__toCommonJS", "import_GetAddressDeviceActionFactory", "import_SignMessageDeviceActionFactory", "import_SignTransactionDeviceActionFactory", "import_SignTransactionDeviceActionTypes", "import_MessageOptions", "import_SolanaAppErrors", "import_SignerSolanaBuilder", "import_GetPubKeyCommand", "import_SignTransactionDeviceAction"]
|
|
4
|
+
"sourcesContent": ["export { GetAddressDeviceActionFactory } from \"@api/app-binder/GetAddressDeviceActionFactory\";\nexport type {\n GetAddressDAError,\n GetAddressDAIntermediateValue,\n GetAddressDAOutput,\n GetAddressDAReturnType,\n} from \"@api/app-binder/GetAddressDeviceActionTypes\";\nexport type {\n GetAppConfigurationDAError,\n GetAppConfigurationDAIntermediateValue,\n GetAppConfigurationDAOutput,\n} from \"@api/app-binder/GetAppConfigurationDeviceActionTypes\";\nexport { SignMessageDeviceActionFactory } from \"@api/app-binder/SignMessageDeviceActionFactory\";\nexport type {\n SignMessageDAError,\n SignMessageDAIntermediateValue,\n SignMessageDAOutput,\n SignMessageTaskError,\n} from \"@api/app-binder/SignMessageDeviceActionTypes\";\nexport { SignTransactionDeviceActionFactory } from \"@api/app-binder/SignTransactionDeviceActionFactory\";\nexport {\n type ClearSignMode,\n type SignTransactionDAError,\n type SignTransactionDAInput,\n type SignTransactionDAIntermediateValue,\n type SignTransactionDAOutput,\n type SignTransactionDAReturnType,\n type SignTransactionDAStateStep,\n signTransactionDAStateSteps,\n} from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nexport type { MessageOptions } from \"@api/model/MessageOptions\";\nexport { SignMessageVersion } from \"@api/model/MessageOptions\";\nexport type { Signature } from \"@api/model/Signature\";\nexport {\n isSolanaAppError,\n SolanaAppCommandError,\n} from \"@api/model/SolanaAppErrors\";\nexport {\n InvalidSolanaTransactionError,\n isInvalidSolanaTransactionError,\n isSolanaTransactionVersionNotSupportedError,\n SolanaTransactionVersionNotSupportedError,\n type SolanaTransactionVersionNotSupportedReason,\n type SolanaV1TransactionRule,\n} from \"@api/model/SolanaTransactionErrors\";\nexport type { SolanaTransactionOptionalConfig } from \"@api/model/SolanaTransactionOptionalConfig\";\nexport type { Transaction } from \"@api/model/Transaction\";\nexport type {\n TransactionResolutionContext,\n UserInputType,\n} from \"@api/model/TransactionResolutionContext\";\nexport type { SignerSolana } from \"@api/SignerSolana\";\nexport { SignerSolanaBuilder } from \"@api/SignerSolanaBuilder\";\nexport {\n GetPubKeyCommand,\n type GetPubKeyCommandArgs,\n type GetPubKeyCommandResponse,\n} from \"@internal/app-binder/command/GetPubKeyCommand\";\nexport type { SolanaAppErrorCodes } from \"@internal/app-binder/command/utils/SolanaApplicationErrors\";\nexport { SignTransactionDeviceAction } from \"@internal/app-binder/device-action/SignTransactionDeviceAction\";\nexport type { SolanaSignerFeaturesNames } from \"@internal/app-binder/SolanaApplicationResolver\";\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,43BAAAE,EAAAF,GAAA,IAAAG,EAA8C,yDAY9CC,EAA+C,0DAO/CC,EAAmD,8DACnDC,EASO,4DAEPC,EAAmC,qCAEnCC,EAGO,sCACPC,EAOO,8CAQPC,EAAoC,oCACpCC,EAIO,yDAEPC,EAA4C",
|
|
6
|
+
"names": ["api_exports", "__export", "__toCommonJS", "import_GetAddressDeviceActionFactory", "import_SignMessageDeviceActionFactory", "import_SignTransactionDeviceActionFactory", "import_SignTransactionDeviceActionTypes", "import_MessageOptions", "import_SolanaAppErrors", "import_SolanaTransactionErrors", "import_SignerSolanaBuilder", "import_GetPubKeyCommand", "import_SignTransactionDeviceAction"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var t=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var E=(o,n)=>{for(var r in n)t(o,r,{get:n[r],enumerable:!0})},T=(o,n,r,i)=>{if(n&&typeof n=="object"||typeof n=="function")for(let a of S(n))!p.call(o,a)&&a!==r&&t(o,a,{get:()=>n[a],enumerable:!(i=l(n,a))||i.enumerable});return o};var N=o=>T(t({},"__esModule",{value:!0}),o);var A={};E(A,{INVALID_SOLANA_TRANSACTION_ERROR_TAG:()=>e,InvalidSolanaTransactionError:()=>_,SOLANA_TRANSACTION_VERSION_NOT_SUPPORTED_ERROR_TAG:()=>s,SolanaTransactionVersionNotSupportedError:()=>c,isInvalidSolanaTransactionError:()=>R,isSolanaTransactionVersionNotSupportedError:()=>u});module.exports=N(A);const s="SolanaTransactionVersionNotSupportedError",e="InvalidSolanaTransactionError";class c{constructor(n,r){this.version=n;this.reason=r;this.originalError=new Error(r==="appVersion"?`Solana transaction version ${n} is not supported by this Solana app version. Update the Solana app.`:`Solana transaction version ${n} is not supported.`)}_tag=s;originalError}class _{constructor(n,r){this.rule=n;this.originalError=new Error(`Invalid Solana v1 transaction (${n}): ${r}`)}_tag=e;originalError}const u=o=>typeof o=="object"&&o!==null&&o._tag===s&&typeof o.version=="number",R=o=>typeof o=="object"&&o!==null&&o._tag===e&&typeof o.rule=="string";0&&(module.exports={INVALID_SOLANA_TRANSACTION_ERROR_TAG,InvalidSolanaTransactionError,SOLANA_TRANSACTION_VERSION_NOT_SUPPORTED_ERROR_TAG,SolanaTransactionVersionNotSupportedError,isInvalidSolanaTransactionError,isSolanaTransactionVersionNotSupportedError});
|
|
2
|
+
//# sourceMappingURL=SolanaTransactionErrors.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/api/model/SolanaTransactionErrors.ts"],
|
|
4
|
+
"sourcesContent": ["import { type DmkError } from \"@ledgerhq/device-management-kit\";\n\n/** The Solana v1 message rule an invalid transaction breaks. */\nexport type SolanaV1TransactionRule =\n | \"VERSION\"\n | \"TRUNCATED\"\n | \"CONFIG_MASK\"\n | \"TRAILING_BYTES\"\n | \"READONLY_SIGNERS\"\n | \"SIGNATURE_COUNT\"\n | \"INSTRUCTION_COUNT\"\n | \"ADDRESS_COUNT\"\n | \"DUPLICATE_ADDRESS\"\n | \"HEAP_SIZE\"\n | \"PROGRAM_INDEX\"\n | \"ACCOUNT_INDEX\"\n | \"MESSAGE_SIZE\";\n\n/**\n * Why a transaction version is refused:\n * - `unknownVersion`: no Solana app supports it (version 2 and above).\n * - `appVersion`: the connected Solana app is too old for it.\n */\nexport type SolanaTransactionVersionNotSupportedReason =\n | \"unknownVersion\"\n | \"appVersion\";\n\nexport const SOLANA_TRANSACTION_VERSION_NOT_SUPPORTED_ERROR_TAG =\n \"SolanaTransactionVersionNotSupportedError\";\nexport const INVALID_SOLANA_TRANSACTION_ERROR_TAG =\n \"InvalidSolanaTransactionError\";\n\n/**\n * The transaction uses a message version the signer refuses, before anything\n * is sent to the device.\n */\nexport class SolanaTransactionVersionNotSupportedError implements DmkError {\n readonly _tag = SOLANA_TRANSACTION_VERSION_NOT_SUPPORTED_ERROR_TAG;\n readonly originalError: Error;\n\n constructor(\n readonly version: number,\n readonly reason: SolanaTransactionVersionNotSupportedReason,\n ) {\n this.originalError = new Error(\n reason === \"appVersion\"\n ? `Solana transaction version ${version} is not supported by this Solana app version. Update the Solana app.`\n : `Solana transaction version ${version} is not supported.`,\n );\n }\n}\n\n/**\n * The transaction breaks a validity rule of its message version, so neither\n * the chain nor the device would accept it. Nothing is sent to the device.\n */\nexport class InvalidSolanaTransactionError implements DmkError {\n readonly _tag = INVALID_SOLANA_TRANSACTION_ERROR_TAG;\n readonly originalError: Error;\n\n constructor(\n readonly rule: SolanaV1TransactionRule,\n detail: string,\n ) {\n this.originalError = new Error(\n `Invalid Solana v1 transaction (${rule}): ${detail}`,\n );\n }\n}\n\n// The guards are structural (`_tag`) rather than `instanceof`, for the same\n// dual-package reason as `isSolanaAppError`.\n\nexport const isSolanaTransactionVersionNotSupportedError = (\n error: unknown,\n): error is SolanaTransactionVersionNotSupportedError =>\n typeof error === \"object\" &&\n error !== null &&\n (error as { _tag?: unknown })._tag ===\n SOLANA_TRANSACTION_VERSION_NOT_SUPPORTED_ERROR_TAG &&\n typeof (error as { version?: unknown }).version === \"number\";\n\nexport const isInvalidSolanaTransactionError = (\n error: unknown,\n): error is InvalidSolanaTransactionError =>\n typeof error === \"object\" &&\n error !== null &&\n (error as { _tag?: unknown })._tag === INVALID_SOLANA_TRANSACTION_ERROR_TAG &&\n typeof (error as { rule?: unknown }).rule === \"string\";\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,0CAAAE,EAAA,kCAAAC,EAAA,uDAAAC,EAAA,8CAAAC,EAAA,oCAAAC,EAAA,gDAAAC,IAAA,eAAAC,EAAAR,GA2BO,MAAMI,EACX,4CACWF,EACX,gCAMK,MAAMG,CAA8D,CAIzE,YACWI,EACAC,EACT,CAFS,aAAAD,EACA,YAAAC,EAET,KAAK,cAAgB,IAAI,MACvBA,IAAW,aACP,8BAA8BD,CAAO,uEACrC,8BAA8BA,CAAO,oBAC3C,CACF,CAZS,KAAOL,EACP,aAYX,CAMO,MAAMD,CAAkD,CAI7D,YACWQ,EACTC,EACA,CAFS,UAAAD,EAGT,KAAK,cAAgB,IAAI,MACvB,kCAAkCA,CAAI,MAAMC,CAAM,EACpD,CACF,CAVS,KAAOV,EACP,aAUX,CAKO,MAAMK,EACXM,GAEA,OAAOA,GAAU,UACjBA,IAAU,MACTA,EAA6B,OAC5BT,GACF,OAAQS,EAAgC,SAAY,SAEzCP,EACXO,GAEA,OAAOA,GAAU,UACjBA,IAAU,MACTA,EAA6B,OAASX,GACvC,OAAQW,EAA6B,MAAS",
|
|
6
|
+
"names": ["SolanaTransactionErrors_exports", "__export", "INVALID_SOLANA_TRANSACTION_ERROR_TAG", "InvalidSolanaTransactionError", "SOLANA_TRANSACTION_VERSION_NOT_SUPPORTED_ERROR_TAG", "SolanaTransactionVersionNotSupportedError", "isInvalidSolanaTransactionError", "isSolanaTransactionVersionNotSupportedError", "__toCommonJS", "version", "reason", "rule", "detail", "error"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var r=require("./SolanaTransactionErrors");describe("SolanaTransactionVersionNotSupportedError",()=>{it("names the version for an unknown version",()=>{const o=new r.SolanaTransactionVersionNotSupportedError(2,"unknownVersion");expect(o).toMatchObject({_tag:"SolanaTransactionVersionNotSupportedError",version:2,reason:"unknownVersion"}),expect(o.originalError.message).toBe("Solana transaction version 2 is not supported.")}),it("asks for an app update when the app is too old",()=>{const o=new r.SolanaTransactionVersionNotSupportedError(1,"appVersion");expect(o.originalError.message).toBe("Solana transaction version 1 is not supported by this Solana app version. Update the Solana app.")})});describe("InvalidSolanaTransactionError",()=>{it("names the rule and its detail",()=>{const o=new r.InvalidSolanaTransactionError("CONFIG_MASK","Unknown config bits in mask 0x2f.");expect(o).toMatchObject({_tag:"InvalidSolanaTransactionError",rule:"CONFIG_MASK"}),expect(o.originalError.message).toBe("Invalid Solana v1 transaction (CONFIG_MASK): Unknown config bits in mask 0x2f.")})});describe("isSolanaTransactionVersionNotSupportedError",()=>{it("accepts the error and a structurally equal object from another copy of the kit",()=>{expect((0,r.isSolanaTransactionVersionNotSupportedError)(new r.SolanaTransactionVersionNotSupportedError(2,"unknownVersion"))).toBe(!0),expect((0,r.isSolanaTransactionVersionNotSupportedError)({_tag:"SolanaTransactionVersionNotSupportedError",version:1})).toBe(!0)}),it.each([["the other error",new r.InvalidSolanaTransactionError("VERSION","x")],["a missing version",{_tag:"SolanaTransactionVersionNotSupportedError"}],["a plain error",new Error("boom")],["null",null],["a string","SolanaTransactionVersionNotSupportedError"]])("rejects %s",(o,n)=>{expect((0,r.isSolanaTransactionVersionNotSupportedError)(n)).toBe(!1)})});describe("isInvalidSolanaTransactionError",()=>{it("accepts the error and a structurally equal object from another copy of the kit",()=>{expect((0,r.isInvalidSolanaTransactionError)(new r.InvalidSolanaTransactionError("TRAILING_BYTES","x"))).toBe(!0),expect((0,r.isInvalidSolanaTransactionError)({_tag:"InvalidSolanaTransactionError",rule:"TRUNCATED"})).toBe(!0)}),it.each([["the other error",new r.SolanaTransactionVersionNotSupportedError(1,"appVersion")],["a missing rule",{_tag:"InvalidSolanaTransactionError"}],["a plain error",new Error("boom")],["undefined",void 0]])("rejects %s",(o,n)=>{expect((0,r.isInvalidSolanaTransactionError)(n)).toBe(!1)})});
|
|
2
|
+
//# sourceMappingURL=SolanaTransactionErrors.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/api/model/SolanaTransactionErrors.test.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n InvalidSolanaTransactionError,\n isInvalidSolanaTransactionError,\n isSolanaTransactionVersionNotSupportedError,\n SolanaTransactionVersionNotSupportedError,\n} from \"./SolanaTransactionErrors\";\n\ndescribe(\"SolanaTransactionVersionNotSupportedError\", () => {\n it(\"names the version for an unknown version\", () => {\n const error = new SolanaTransactionVersionNotSupportedError(\n 2,\n \"unknownVersion\",\n );\n\n expect(error).toMatchObject({\n _tag: \"SolanaTransactionVersionNotSupportedError\",\n version: 2,\n reason: \"unknownVersion\",\n });\n expect(error.originalError.message).toBe(\n \"Solana transaction version 2 is not supported.\",\n );\n });\n\n it(\"asks for an app update when the app is too old\", () => {\n const error = new SolanaTransactionVersionNotSupportedError(\n 1,\n \"appVersion\",\n );\n\n expect(error.originalError.message).toBe(\n \"Solana transaction version 1 is not supported by this Solana app version. Update the Solana app.\",\n );\n });\n});\n\ndescribe(\"InvalidSolanaTransactionError\", () => {\n it(\"names the rule and its detail\", () => {\n const error = new InvalidSolanaTransactionError(\n \"CONFIG_MASK\",\n \"Unknown config bits in mask 0x2f.\",\n );\n\n expect(error).toMatchObject({\n _tag: \"InvalidSolanaTransactionError\",\n rule: \"CONFIG_MASK\",\n });\n expect(error.originalError.message).toBe(\n \"Invalid Solana v1 transaction (CONFIG_MASK): Unknown config bits in mask 0x2f.\",\n );\n });\n});\n\ndescribe(\"isSolanaTransactionVersionNotSupportedError\", () => {\n it(\"accepts the error and a structurally equal object from another copy of the kit\", () => {\n expect(\n isSolanaTransactionVersionNotSupportedError(\n new SolanaTransactionVersionNotSupportedError(2, \"unknownVersion\"),\n ),\n ).toBe(true);\n expect(\n isSolanaTransactionVersionNotSupportedError({\n _tag: \"SolanaTransactionVersionNotSupportedError\",\n version: 1,\n }),\n ).toBe(true);\n });\n\n it.each([\n [\"the other error\", new InvalidSolanaTransactionError(\"VERSION\", \"x\")],\n [\n \"a missing version\",\n { _tag: \"SolanaTransactionVersionNotSupportedError\" },\n ],\n [\"a plain error\", new Error(\"boom\")],\n [\"null\", null],\n [\"a string\", \"SolanaTransactionVersionNotSupportedError\"],\n ])(\"rejects %s\", (_, value) => {\n expect(isSolanaTransactionVersionNotSupportedError(value)).toBe(false);\n });\n});\n\ndescribe(\"isInvalidSolanaTransactionError\", () => {\n it(\"accepts the error and a structurally equal object from another copy of the kit\", () => {\n expect(\n isInvalidSolanaTransactionError(\n new InvalidSolanaTransactionError(\"TRAILING_BYTES\", \"x\"),\n ),\n ).toBe(true);\n expect(\n isInvalidSolanaTransactionError({\n _tag: \"InvalidSolanaTransactionError\",\n rule: \"TRUNCATED\",\n }),\n ).toBe(true);\n });\n\n it.each([\n [\n \"the other error\",\n new SolanaTransactionVersionNotSupportedError(1, \"appVersion\"),\n ],\n [\"a missing rule\", { _tag: \"InvalidSolanaTransactionError\" }],\n [\"a plain error\", new Error(\"boom\")],\n [\"undefined\", undefined],\n ])(\"rejects %s\", (_, value) => {\n expect(isInvalidSolanaTransactionError(value)).toBe(false);\n });\n});\n"],
|
|
5
|
+
"mappings": "aAAA,IAAAA,EAKO,qCAEP,SAAS,4CAA6C,IAAM,CAC1D,GAAG,2CAA4C,IAAM,CACnD,MAAMC,EAAQ,IAAI,4CAChB,EACA,gBACF,EAEA,OAAOA,CAAK,EAAE,cAAc,CAC1B,KAAM,4CACN,QAAS,EACT,OAAQ,gBACV,CAAC,EACD,OAAOA,EAAM,cAAc,OAAO,EAAE,KAClC,gDACF,CACF,CAAC,EAED,GAAG,iDAAkD,IAAM,CACzD,MAAMA,EAAQ,IAAI,4CAChB,EACA,YACF,EAEA,OAAOA,EAAM,cAAc,OAAO,EAAE,KAClC,kGACF,CACF,CAAC,CACH,CAAC,EAED,SAAS,gCAAiC,IAAM,CAC9C,GAAG,gCAAiC,IAAM,CACxC,MAAMA,EAAQ,IAAI,gCAChB,cACA,mCACF,EAEA,OAAOA,CAAK,EAAE,cAAc,CAC1B,KAAM,gCACN,KAAM,aACR,CAAC,EACD,OAAOA,EAAM,cAAc,OAAO,EAAE,KAClC,gFACF,CACF,CAAC,CACH,CAAC,EAED,SAAS,8CAA+C,IAAM,CAC5D,GAAG,iFAAkF,IAAM,CACzF,UACE,+CACE,IAAI,4CAA0C,EAAG,gBAAgB,CACnE,CACF,EAAE,KAAK,EAAI,EACX,UACE,+CAA4C,CAC1C,KAAM,4CACN,QAAS,CACX,CAAC,CACH,EAAE,KAAK,EAAI,CACb,CAAC,EAED,GAAG,KAAK,CACN,CAAC,kBAAmB,IAAI,gCAA8B,UAAW,GAAG,CAAC,EACrE,CACE,oBACA,CAAE,KAAM,2CAA4C,CACtD,EACA,CAAC,gBAAiB,IAAI,MAAM,MAAM,CAAC,EACnC,CAAC,OAAQ,IAAI,EACb,CAAC,WAAY,2CAA2C,CAC1D,CAAC,EAAE,aAAc,CAACC,EAAGC,IAAU,CAC7B,UAAO,+CAA4CA,CAAK,CAAC,EAAE,KAAK,EAAK,CACvE,CAAC,CACH,CAAC,EAED,SAAS,kCAAmC,IAAM,CAChD,GAAG,iFAAkF,IAAM,CACzF,UACE,mCACE,IAAI,gCAA8B,iBAAkB,GAAG,CACzD,CACF,EAAE,KAAK,EAAI,EACX,UACE,mCAAgC,CAC9B,KAAM,gCACN,KAAM,WACR,CAAC,CACH,EAAE,KAAK,EAAI,CACb,CAAC,EAED,GAAG,KAAK,CACN,CACE,kBACA,IAAI,4CAA0C,EAAG,YAAY,CAC/D,EACA,CAAC,iBAAkB,CAAE,KAAM,+BAAgC,CAAC,EAC5D,CAAC,gBAAiB,IAAI,MAAM,MAAM,CAAC,EACnC,CAAC,YAAa,MAAS,CACzB,CAAC,EAAE,aAAc,CAACD,EAAGC,IAAU,CAC7B,UAAO,mCAAgCA,CAAK,CAAC,EAAE,KAAK,EAAK,CAC3D,CAAC,CACH,CAAC",
|
|
6
|
+
"names": ["import_SolanaTransactionErrors", "error", "_", "value"]
|
|
7
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var p=Object.defineProperty;var
|
|
1
|
+
"use strict";var p=Object.defineProperty;var I=Object.getOwnPropertyDescriptor;var E=Object.getOwnPropertyNames;var m=Object.prototype.hasOwnProperty;var O=(n,e)=>{for(var s in e)p(n,s,{get:e[s],enumerable:!0})},R=(n,e,s,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of E(e))!m.call(n,t)&&t!==s&&p(n,t,{get:()=>e[t],enumerable:!(i=I(e,t))||i.enumerable});return n};var g=n=>R(p({},"__esModule",{value:!0}),n);var C={};O(C,{SOLANA_MIN_DELAYED_SIGNING_VERSION:()=>c,SOLANA_MIN_GENERIC_CLEAR_SIGN_VERSION:()=>S,SOLANA_MIN_SPL_VERSION:()=>l,SOLANA_MIN_TRANSACTION_CHECKS_VERSION:()=>A,SOLANA_MIN_V1_TRANSACTIONS_VERSION:()=>d,SOLANA_SIGNER_FEATURES:()=>N,SolanaApplicationResolver:()=>_,isSolanaSignerFeatureSupported:()=>v});module.exports=g(C);var o=require("@ledgerhq/device-management-kit"),a=require("./constants");const r="0.0.1",l="1.9.2",c="1.14.0",A="1.16.0",S="1.17.0",d="1.18.0",N={spl:{minVersion:l,excludedModels:[o.DeviceModelId.NANO_S],excludedApps:[]},transactionChecks:{minVersion:A,excludedModels:[o.DeviceModelId.NANO_S,o.DeviceModelId.NANO_SP,o.DeviceModelId.NANO_X],excludedApps:["Exchange"]},delayedSigning:{minVersion:c,excludedModels:[],excludedApps:["Exchange"]},genericClearSign:{minVersion:S,excludedModels:[o.DeviceModelId.NANO_S],excludedApps:["Exchange"]},v1Transactions:{minVersion:d,excludedModels:[],excludedApps:[]}};function v(n,e,s,i){if(i?.has(e))return!1;const{minVersion:t,excludedModels:u,excludedApps:x}=N[e];return new o.ApplicationChecker(n.getDeviceSessionState(),s,new _).withMinVersionInclusive(t).excludeDeviceModels(...u).excludeApps(...x).check()}class _{resolve(e,s){if(e.sessionStateType===o.DeviceSessionStateType.Connected)return{isCompatible:!1,version:r};const i=e.currentApp?.name;return!i||i!==a.APP_NAME&&i!=="Exchange"?{isCompatible:!1,version:r}:{isCompatible:!0,version:s.version}}}0&&(module.exports={SOLANA_MIN_DELAYED_SIGNING_VERSION,SOLANA_MIN_GENERIC_CLEAR_SIGN_VERSION,SOLANA_MIN_SPL_VERSION,SOLANA_MIN_TRANSACTION_CHECKS_VERSION,SOLANA_MIN_V1_TRANSACTIONS_VERSION,SOLANA_SIGNER_FEATURES,SolanaApplicationResolver,isSolanaSignerFeatureSupported});
|
|
2
2
|
//# sourceMappingURL=SolanaApplicationResolver.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/internal/app-binder/SolanaApplicationResolver.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type AppConfig,\n ApplicationChecker,\n type ApplicationResolver,\n DeviceModelId,\n type DeviceSessionState,\n DeviceSessionStateType,\n type InternalApi,\n type ResolvedApp,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type AppConfiguration } from \"@api/model/AppConfiguration\";\n\nimport { APP_NAME } from \"./constants\";\n\
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,wCAAAE,EAAA,0CAAAC,EAAA,2BAAAC,EAAA,0CAAAC,EAAA,2BAAAC,EAAA,8BAAAC,EAAA,mCAAAC,IAAA,eAAAC,
|
|
6
|
-
"names": ["SolanaApplicationResolver_exports", "__export", "SOLANA_MIN_DELAYED_SIGNING_VERSION", "SOLANA_MIN_GENERIC_CLEAR_SIGN_VERSION", "SOLANA_MIN_SPL_VERSION", "SOLANA_MIN_TRANSACTION_CHECKS_VERSION", "SOLANA_SIGNER_FEATURES", "SolanaApplicationResolver", "isSolanaSignerFeatureSupported", "__toCommonJS", "import_device_management_kit", "import_constants", "DEFAULT_VERSION", "internalApi", "feature", "appConfig", "disabledFeatures", "minVersion", "excludedModels", "excludedApps", "deviceState", "appName"]
|
|
4
|
+
"sourcesContent": ["import {\n type AppConfig,\n ApplicationChecker,\n type ApplicationResolver,\n DeviceModelId,\n type DeviceSessionState,\n DeviceSessionStateType,\n type InternalApi,\n type ResolvedApp,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type AppConfiguration } from \"@api/model/AppConfiguration\";\n\nimport { APP_NAME } from \"./constants\";\n\nconst DEFAULT_VERSION = \"0.0.1\";\nexport const SOLANA_MIN_SPL_VERSION = \"1.9.2\";\nexport const SOLANA_MIN_DELAYED_SIGNING_VERSION = \"1.14.0\";\n\nexport const SOLANA_MIN_TRANSACTION_CHECKS_VERSION = \"1.16.0\";\nexport const SOLANA_MIN_GENERIC_CLEAR_SIGN_VERSION = \"1.17.0\";\nexport const SOLANA_MIN_V1_TRANSACTIONS_VERSION = \"1.18.0\";\n\nexport const SOLANA_SIGNER_FEATURES = {\n spl: {\n minVersion: SOLANA_MIN_SPL_VERSION,\n excludedModels: [DeviceModelId.NANO_S],\n excludedApps: [] as string[],\n },\n transactionChecks: {\n minVersion: SOLANA_MIN_TRANSACTION_CHECKS_VERSION,\n excludedModels: [\n DeviceModelId.NANO_S,\n DeviceModelId.NANO_SP,\n DeviceModelId.NANO_X,\n ],\n excludedApps: [\"Exchange\"],\n },\n delayedSigning: {\n minVersion: SOLANA_MIN_DELAYED_SIGNING_VERSION,\n excludedModels: [] as DeviceModelId[],\n excludedApps: [\"Exchange\"],\n },\n genericClearSign: {\n minVersion: SOLANA_MIN_GENERIC_CLEAR_SIGN_VERSION,\n excludedModels: [DeviceModelId.NANO_S],\n excludedApps: [\"Exchange\"],\n },\n v1Transactions: {\n minVersion: SOLANA_MIN_V1_TRANSACTIONS_VERSION,\n excludedModels: [] as DeviceModelId[],\n excludedApps: [] as string[],\n },\n} as const;\n\nexport type SolanaSignerFeaturesNames = keyof typeof SOLANA_SIGNER_FEATURES;\n\n/**\n * Whether the connected Solana app supports a given feature, applying its\n * minimum version plus device-model / orchestrating-app exclusions.\n *\n * Pass `disabledFeatures` to force-disable specific features regardless of\n * firmware version (e.g. for testing or temporary kill-switches).\n */\nexport function isSolanaSignerFeatureSupported(\n internalApi: InternalApi,\n feature: SolanaSignerFeaturesNames,\n appConfig: AppConfiguration,\n disabledFeatures?: ReadonlySet<SolanaSignerFeaturesNames>,\n): boolean {\n if (disabledFeatures?.has(feature)) {\n return false;\n }\n const { minVersion, excludedModels, excludedApps } =\n SOLANA_SIGNER_FEATURES[feature];\n return new ApplicationChecker(\n internalApi.getDeviceSessionState(),\n appConfig,\n new SolanaApplicationResolver(),\n )\n .withMinVersionInclusive(minVersion)\n .excludeDeviceModels(...excludedModels)\n .excludeApps(...excludedApps)\n .check();\n}\n\nexport class SolanaApplicationResolver implements ApplicationResolver {\n resolve(deviceState: DeviceSessionState, appConfig: AppConfig): ResolvedApp {\n if (deviceState.sessionStateType === DeviceSessionStateType.Connected) {\n return { isCompatible: false, version: DEFAULT_VERSION };\n }\n\n const appName = deviceState.currentApp?.name;\n\n if (!appName || (appName !== APP_NAME && appName !== \"Exchange\")) {\n return { isCompatible: false, version: DEFAULT_VERSION };\n }\n\n // appConfig.version is authoritative: it comes from GetAppConfiguration\n // executed against the signer app, so it reflects the actual on-device version\n // whether Solana is opened directly or via Exchange orchestration.\n return { isCompatible: true, version: appConfig.version };\n }\n}\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,wCAAAE,EAAA,0CAAAC,EAAA,2BAAAC,EAAA,0CAAAC,EAAA,uCAAAC,EAAA,2BAAAC,EAAA,8BAAAC,EAAA,mCAAAC,IAAA,eAAAC,EAAAV,GAAA,IAAAW,EASO,2CAIPC,EAAyB,uBAEzB,MAAMC,EAAkB,QACXT,EAAyB,QACzBF,EAAqC,SAErCG,EAAwC,SACxCF,EAAwC,SACxCG,EAAqC,SAErCC,EAAyB,CACpC,IAAK,CACH,WAAYH,EACZ,eAAgB,CAAC,gBAAc,MAAM,EACrC,aAAc,CAAC,CACjB,EACA,kBAAmB,CACjB,WAAYC,EACZ,eAAgB,CACd,gBAAc,OACd,gBAAc,QACd,gBAAc,MAChB,EACA,aAAc,CAAC,UAAU,CAC3B,EACA,eAAgB,CACd,WAAYH,EACZ,eAAgB,CAAC,EACjB,aAAc,CAAC,UAAU,CAC3B,EACA,iBAAkB,CAChB,WAAYC,EACZ,eAAgB,CAAC,gBAAc,MAAM,EACrC,aAAc,CAAC,UAAU,CAC3B,EACA,eAAgB,CACd,WAAYG,EACZ,eAAgB,CAAC,EACjB,aAAc,CAAC,CACjB,CACF,EAWO,SAASG,EACdK,EACAC,EACAC,EACAC,EACS,CACT,GAAIA,GAAkB,IAAIF,CAAO,EAC/B,MAAO,GAET,KAAM,CAAE,WAAAG,EAAY,eAAAC,EAAgB,aAAAC,CAAa,EAC/Cb,EAAuBQ,CAAO,EAChC,OAAO,IAAI,qBACTD,EAAY,sBAAsB,EAClCE,EACA,IAAIR,CACN,EACG,wBAAwBU,CAAU,EAClC,oBAAoB,GAAGC,CAAc,EACrC,YAAY,GAAGC,CAAY,EAC3B,MAAM,CACX,CAEO,MAAMZ,CAAyD,CACpE,QAAQa,EAAiCL,EAAmC,CAC1E,GAAIK,EAAY,mBAAqB,yBAAuB,UAC1D,MAAO,CAAE,aAAc,GAAO,QAASR,CAAgB,EAGzD,MAAMS,EAAUD,EAAY,YAAY,KAExC,MAAI,CAACC,GAAYA,IAAY,YAAYA,IAAY,WAC5C,CAAE,aAAc,GAAO,QAAST,CAAgB,EAMlD,CAAE,aAAc,GAAM,QAASG,EAAU,OAAQ,CAC1D,CACF",
|
|
6
|
+
"names": ["SolanaApplicationResolver_exports", "__export", "SOLANA_MIN_DELAYED_SIGNING_VERSION", "SOLANA_MIN_GENERIC_CLEAR_SIGN_VERSION", "SOLANA_MIN_SPL_VERSION", "SOLANA_MIN_TRANSACTION_CHECKS_VERSION", "SOLANA_MIN_V1_TRANSACTIONS_VERSION", "SOLANA_SIGNER_FEATURES", "SolanaApplicationResolver", "isSolanaSignerFeatureSupported", "__toCommonJS", "import_device_management_kit", "import_constants", "DEFAULT_VERSION", "internalApi", "feature", "appConfig", "disabledFeatures", "minVersion", "excludedModels", "excludedApps", "deviceState", "appName"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var o=require("@ledgerhq/device-management-kit"),r=require("../../api/model/PublicKeyDisplayMode"),s=require("./SolanaApplicationResolver");function a(e){return{version:e,blindSigningEnabled:!1}}function l(e,t,n=o.DeviceModelId.FLEX){return{sessionStateType:o.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:o.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:e,version:t},deviceModelId:n,isSecureConnectionAllowed:!1}}function p(){return{sessionStateType:o.DeviceSessionStateType.Connected,deviceStatus:o.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Solana",version:"1.0.0"},deviceModelId:o.DeviceModelId.FLEX,isSecureConnectionAllowed:!1}}describe("SolanaApplicationResolver",()=>{const e=new s.SolanaApplicationResolver;it("should resolve as incompatible when device is Connected",()=>{const t=p(),n=a("1.0.0"),i=e.resolve(t,n);expect(i).toStrictEqual({isCompatible:!1,version:"0.0.1"})}),it("should resolve as compatible with appConfig.version when app is Solana",()=>{const t=l("Solana","1.4.0"),n=a("1.0.0"),i=e.resolve(t,n);expect(i).toStrictEqual({isCompatible:!0,version:"1.0.0"})}),it("should resolve as incompatible when app is not Solana",()=>{const t=l("Ethereum","1.0.0"),n=a("1.0.0"),i=e.resolve(t,n);expect(i).toStrictEqual({isCompatible:!1,version:"0.0.1"})})});describe("isSolanaSignerFeatureSupported",()=>{const e={blindSigningEnabled:!1,pubKeyDisplayMode:r.PublicKeyDisplayMode.LONG,version:"99.0.0"},t={};it("returns false immediately when the feature is in disabledFeatures",()=>{const
|
|
1
|
+
"use strict";var o=require("@ledgerhq/device-management-kit"),r=require("../../api/model/PublicKeyDisplayMode"),s=require("./SolanaApplicationResolver");function a(e){return{version:e,blindSigningEnabled:!1}}function l(e,t,n=o.DeviceModelId.FLEX){return{sessionStateType:o.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:o.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:e,version:t},deviceModelId:n,isSecureConnectionAllowed:!1}}function p(){return{sessionStateType:o.DeviceSessionStateType.Connected,deviceStatus:o.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Solana",version:"1.0.0"},deviceModelId:o.DeviceModelId.FLEX,isSecureConnectionAllowed:!1}}describe("SolanaApplicationResolver",()=>{const e=new s.SolanaApplicationResolver;it("should resolve as incompatible when device is Connected",()=>{const t=p(),n=a("1.0.0"),i=e.resolve(t,n);expect(i).toStrictEqual({isCompatible:!1,version:"0.0.1"})}),it("should resolve as compatible with appConfig.version when app is Solana",()=>{const t=l("Solana","1.4.0"),n=a("1.0.0"),i=e.resolve(t,n);expect(i).toStrictEqual({isCompatible:!0,version:"1.0.0"})}),it("should resolve as incompatible when app is not Solana",()=>{const t=l("Ethereum","1.0.0"),n=a("1.0.0"),i=e.resolve(t,n);expect(i).toStrictEqual({isCompatible:!1,version:"0.0.1"})})});describe("isSolanaSignerFeatureSupported",()=>{const e={blindSigningEnabled:!1,pubKeyDisplayMode:r.PublicKeyDisplayMode.LONG,version:"99.0.0"},t={};it("returns false immediately when the feature is in disabledFeatures",()=>{const i=(0,s.isSolanaSignerFeatureSupported)(t,"spl",e,new Set(["spl"]));expect(i).toBe(!1)});function n(i){return{getDeviceSessionState:()=>l(i,"99.0.0")}}it("disables delayed signing when Solana is orchestrated by Exchange",()=>{expect((0,s.isSolanaSignerFeatureSupported)(n("Exchange"),"delayedSigning",e)).toBe(!1)}),it("enables delayed signing when Solana is opened directly",()=>{expect((0,s.isSolanaSignerFeatureSupported)(n("Solana"),"delayedSigning",e)).toBe(!0)})});
|
|
2
2
|
//# sourceMappingURL=SolanaApplicationResolver.test.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/internal/app-binder/SolanaApplicationResolver.test.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type AppConfig,\n DeviceModelId,\n DeviceSessionStateType,\n DeviceStatus,\n type InternalApi,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type AppConfiguration } from \"@api/model/AppConfiguration\";\nimport { PublicKeyDisplayMode } from \"@api/model/PublicKeyDisplayMode\";\n\nimport {\n isSolanaSignerFeatureSupported,\n SolanaApplicationResolver,\n} from \"./SolanaApplicationResolver\";\n\nfunction createAppConfig(version: string): AppConfig {\n return {\n version,\n blindSigningEnabled: false,\n };\n}\n\nfunction createReadyState(\n appName: string,\n appVersion: string,\n modelId: DeviceModelId = DeviceModelId.FLEX,\n) {\n return {\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: appName, version: appVersion },\n deviceModelId: modelId,\n isSecureConnectionAllowed: false,\n };\n}\n\nfunction createConnectedState() {\n return {\n sessionStateType: DeviceSessionStateType.Connected,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Solana\", version: \"1.0.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n };\n}\n\ndescribe(\"SolanaApplicationResolver\", () => {\n const resolver = new SolanaApplicationResolver();\n\n it(\"should resolve as incompatible when device is Connected\", () => {\n const state = createConnectedState();\n const config = createAppConfig(\"1.0.0\");\n const result = resolver.resolve(state, config);\n expect(result).toStrictEqual({\n isCompatible: false,\n version: \"0.0.1\",\n });\n });\n\n it(\"should resolve as compatible with appConfig.version when app is Solana\", () => {\n const state = createReadyState(\"Solana\", \"1.4.0\");\n const config = createAppConfig(\"1.0.0\");\n const result = resolver.resolve(state, config);\n expect(result).toStrictEqual({\n isCompatible: true,\n version: \"1.0.0\",\n });\n });\n\n it(\"should resolve as incompatible when app is not Solana\", () => {\n const state = createReadyState(\"Ethereum\", \"1.0.0\");\n const config = createAppConfig(\"1.0.0\");\n const result = resolver.resolve(state, config);\n expect(result).toStrictEqual({\n isCompatible: false,\n version: \"0.0.1\",\n });\n });\n});\n\ndescribe(\"isSolanaSignerFeatureSupported\", () => {\n const appConfig: AppConfiguration = {\n blindSigningEnabled: false,\n pubKeyDisplayMode: PublicKeyDisplayMode.LONG,\n version: \"99.0.0\",\n };\n // getDeviceSessionState is never reached when the feature is force-disabled.\n const mockApi = {} as unknown as InternalApi;\n\n it(\"returns false immediately when the feature is in disabledFeatures\", () => {\n const result = isSolanaSignerFeatureSupported(\n mockApi,\n \"spl\",\n appConfig,\n new Set([\"spl\"]),\n );\n expect(result).toBe(false);\n });\n});\n"],
|
|
5
|
-
"mappings": "aAAA,IAAAA,EAMO,2CAGPC,EAAqC,2CAErCC,EAGO,uCAEP,SAASC,EAAgBC,EAA4B,CACnD,MAAO,CACL,QAAAA,EACA,oBAAqB,EACvB,CACF,CAEA,SAASC,EACPC,EACAC,EACAC,EAAyB,gBAAc,KACvC,CACA,MAAO,CACL,iBAAkB,yBAAuB,0BACzC,aAAc,eAAa,UAC3B,cAAe,CAAC,EAChB,WAAY,CAAE,KAAMF,EAAS,QAASC,CAAW,EACjD,cAAeC,EACf,0BAA2B,EAC7B,CACF,CAEA,SAASC,GAAuB,CAC9B,MAAO,CACL,iBAAkB,yBAAuB,UACzC,aAAc,eAAa,UAC3B,cAAe,CAAC,EAChB,WAAY,CAAE,KAAM,SAAU,QAAS,OAAQ,EAC/C,cAAe,gBAAc,KAC7B,0BAA2B,EAC7B,CACF,CAEA,SAAS,4BAA6B,IAAM,CAC1C,MAAMC,EAAW,IAAI,4BAErB,GAAG,0DAA2D,IAAM,CAClE,MAAMC,EAAQF,EAAqB,EAC7BG,EAAST,EAAgB,OAAO,EAChCU,EAASH,EAAS,QAAQC,EAAOC,CAAM,EAC7C,OAAOC,CAAM,EAAE,cAAc,CAC3B,aAAc,GACd,QAAS,OACX,CAAC,CACH,CAAC,EAED,GAAG,yEAA0E,IAAM,CACjF,MAAMF,EAAQN,EAAiB,SAAU,OAAO,EAC1CO,EAAST,EAAgB,OAAO,EAChCU,EAASH,EAAS,QAAQC,EAAOC,CAAM,EAC7C,OAAOC,CAAM,EAAE,cAAc,CAC3B,aAAc,GACd,QAAS,OACX,CAAC,CACH,CAAC,EAED,GAAG,wDAAyD,IAAM,CAChE,MAAMF,EAAQN,EAAiB,WAAY,OAAO,EAC5CO,EAAST,EAAgB,OAAO,EAChCU,EAASH,EAAS,QAAQC,EAAOC,CAAM,EAC7C,OAAOC,CAAM,EAAE,cAAc,CAC3B,aAAc,GACd,QAAS,OACX,CAAC,CACH,CAAC,CACH,CAAC,EAED,SAAS,iCAAkC,IAAM,CAC/C,MAAMC,EAA8B,CAClC,oBAAqB,GACrB,kBAAmB,uBAAqB,KACxC,QAAS,QACX,EAEMC,EAAU,CAAC,EAEjB,GAAG,oEAAqE,IAAM,CAC5E,MAAMF,KAAS,kCACbE,EACA,MACAD,EACA,IAAI,IAAI,CAAC,KAAK,CAAC,CACjB,EACA,OAAOD,CAAM,EAAE,KAAK,EAAK,CAC3B,CAAC,CACH,CAAC",
|
|
6
|
-
"names": ["import_device_management_kit", "import_PublicKeyDisplayMode", "import_SolanaApplicationResolver", "createAppConfig", "version", "createReadyState", "appName", "appVersion", "modelId", "createConnectedState", "resolver", "state", "config", "result", "appConfig", "mockApi"]
|
|
4
|
+
"sourcesContent": ["import {\n type AppConfig,\n DeviceModelId,\n DeviceSessionStateType,\n DeviceStatus,\n type InternalApi,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type AppConfiguration } from \"@api/model/AppConfiguration\";\nimport { PublicKeyDisplayMode } from \"@api/model/PublicKeyDisplayMode\";\n\nimport {\n isSolanaSignerFeatureSupported,\n SolanaApplicationResolver,\n} from \"./SolanaApplicationResolver\";\n\nfunction createAppConfig(version: string): AppConfig {\n return {\n version,\n blindSigningEnabled: false,\n };\n}\n\nfunction createReadyState(\n appName: string,\n appVersion: string,\n modelId: DeviceModelId = DeviceModelId.FLEX,\n) {\n return {\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: appName, version: appVersion },\n deviceModelId: modelId,\n isSecureConnectionAllowed: false,\n };\n}\n\nfunction createConnectedState() {\n return {\n sessionStateType: DeviceSessionStateType.Connected,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Solana\", version: \"1.0.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n };\n}\n\ndescribe(\"SolanaApplicationResolver\", () => {\n const resolver = new SolanaApplicationResolver();\n\n it(\"should resolve as incompatible when device is Connected\", () => {\n const state = createConnectedState();\n const config = createAppConfig(\"1.0.0\");\n const result = resolver.resolve(state, config);\n expect(result).toStrictEqual({\n isCompatible: false,\n version: \"0.0.1\",\n });\n });\n\n it(\"should resolve as compatible with appConfig.version when app is Solana\", () => {\n const state = createReadyState(\"Solana\", \"1.4.0\");\n const config = createAppConfig(\"1.0.0\");\n const result = resolver.resolve(state, config);\n expect(result).toStrictEqual({\n isCompatible: true,\n version: \"1.0.0\",\n });\n });\n\n it(\"should resolve as incompatible when app is not Solana\", () => {\n const state = createReadyState(\"Ethereum\", \"1.0.0\");\n const config = createAppConfig(\"1.0.0\");\n const result = resolver.resolve(state, config);\n expect(result).toStrictEqual({\n isCompatible: false,\n version: \"0.0.1\",\n });\n });\n});\n\ndescribe(\"isSolanaSignerFeatureSupported\", () => {\n const appConfig: AppConfiguration = {\n blindSigningEnabled: false,\n pubKeyDisplayMode: PublicKeyDisplayMode.LONG,\n version: \"99.0.0\",\n };\n // getDeviceSessionState is never reached when the feature is force-disabled.\n const mockApi = {} as unknown as InternalApi;\n\n it(\"returns false immediately when the feature is in disabledFeatures\", () => {\n const result = isSolanaSignerFeatureSupported(\n mockApi,\n \"spl\",\n appConfig,\n new Set([\"spl\"]),\n );\n expect(result).toBe(false);\n });\n\n function apiFor(appName: string): InternalApi {\n return {\n getDeviceSessionState: () => createReadyState(appName, \"99.0.0\"),\n } as unknown as InternalApi;\n }\n\n it(\"disables delayed signing when Solana is orchestrated by Exchange\", () => {\n expect(\n isSolanaSignerFeatureSupported(\n apiFor(\"Exchange\"),\n \"delayedSigning\",\n appConfig,\n ),\n ).toBe(false);\n });\n\n it(\"enables delayed signing when Solana is opened directly\", () => {\n expect(\n isSolanaSignerFeatureSupported(\n apiFor(\"Solana\"),\n \"delayedSigning\",\n appConfig,\n ),\n ).toBe(true);\n });\n});\n"],
|
|
5
|
+
"mappings": "aAAA,IAAAA,EAMO,2CAGPC,EAAqC,2CAErCC,EAGO,uCAEP,SAASC,EAAgBC,EAA4B,CACnD,MAAO,CACL,QAAAA,EACA,oBAAqB,EACvB,CACF,CAEA,SAASC,EACPC,EACAC,EACAC,EAAyB,gBAAc,KACvC,CACA,MAAO,CACL,iBAAkB,yBAAuB,0BACzC,aAAc,eAAa,UAC3B,cAAe,CAAC,EAChB,WAAY,CAAE,KAAMF,EAAS,QAASC,CAAW,EACjD,cAAeC,EACf,0BAA2B,EAC7B,CACF,CAEA,SAASC,GAAuB,CAC9B,MAAO,CACL,iBAAkB,yBAAuB,UACzC,aAAc,eAAa,UAC3B,cAAe,CAAC,EAChB,WAAY,CAAE,KAAM,SAAU,QAAS,OAAQ,EAC/C,cAAe,gBAAc,KAC7B,0BAA2B,EAC7B,CACF,CAEA,SAAS,4BAA6B,IAAM,CAC1C,MAAMC,EAAW,IAAI,4BAErB,GAAG,0DAA2D,IAAM,CAClE,MAAMC,EAAQF,EAAqB,EAC7BG,EAAST,EAAgB,OAAO,EAChCU,EAASH,EAAS,QAAQC,EAAOC,CAAM,EAC7C,OAAOC,CAAM,EAAE,cAAc,CAC3B,aAAc,GACd,QAAS,OACX,CAAC,CACH,CAAC,EAED,GAAG,yEAA0E,IAAM,CACjF,MAAMF,EAAQN,EAAiB,SAAU,OAAO,EAC1CO,EAAST,EAAgB,OAAO,EAChCU,EAASH,EAAS,QAAQC,EAAOC,CAAM,EAC7C,OAAOC,CAAM,EAAE,cAAc,CAC3B,aAAc,GACd,QAAS,OACX,CAAC,CACH,CAAC,EAED,GAAG,wDAAyD,IAAM,CAChE,MAAMF,EAAQN,EAAiB,WAAY,OAAO,EAC5CO,EAAST,EAAgB,OAAO,EAChCU,EAASH,EAAS,QAAQC,EAAOC,CAAM,EAC7C,OAAOC,CAAM,EAAE,cAAc,CAC3B,aAAc,GACd,QAAS,OACX,CAAC,CACH,CAAC,CACH,CAAC,EAED,SAAS,iCAAkC,IAAM,CAC/C,MAAMC,EAA8B,CAClC,oBAAqB,GACrB,kBAAmB,uBAAqB,KACxC,QAAS,QACX,EAEMC,EAAU,CAAC,EAEjB,GAAG,oEAAqE,IAAM,CAC5E,MAAMF,KAAS,kCACbE,EACA,MACAD,EACA,IAAI,IAAI,CAAC,KAAK,CAAC,CACjB,EACA,OAAOD,CAAM,EAAE,KAAK,EAAK,CAC3B,CAAC,EAED,SAASG,EAAOV,EAA8B,CAC5C,MAAO,CACL,sBAAuB,IAAMD,EAAiBC,EAAS,QAAQ,CACjE,CACF,CAEA,GAAG,mEAAoE,IAAM,CAC3E,UACE,kCACEU,EAAO,UAAU,EACjB,iBACAF,CACF,CACF,EAAE,KAAK,EAAK,CACd,CAAC,EAED,GAAG,yDAA0D,IAAM,CACjE,UACE,kCACEE,EAAO,QAAQ,EACf,iBACAF,CACF,CACF,EAAE,KAAK,EAAI,CACb,CAAC,CACH,CAAC",
|
|
6
|
+
"names": ["import_device_management_kit", "import_PublicKeyDisplayMode", "import_SolanaApplicationResolver", "createAppConfig", "version", "createReadyState", "appName", "appVersion", "modelId", "createConnectedState", "resolver", "state", "config", "result", "appConfig", "mockApi", "apiFor"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var f=Object.defineProperty;var G=Object.getOwnPropertyDescriptor;var O=Object.getOwnPropertyNames;var z=Object.prototype.hasOwnProperty;var V=(o,a)=>{for(var l in a)f(o,l,{get:a[l],enumerable:!0})},N=(o,a,l,S)=>{if(a&&typeof a=="object"||typeof a=="function")for(let s of O(a))!z.call(o,s)&&s!==l&&f(o,s,{get:()=>a[s],enumerable:!(S=G(a,s))||S.enumerable});return o};var U=o=>N(f({},"__esModule",{value:!0}),o);var L={};V(L,{SignTransactionDeviceAction:()=>b});module.exports=U(L);var r=require("@ledgerhq/device-management-kit"),C=require("purify-ts"),n=require("xstate"),g=require("../../../api/app-binder/SignTransactionDeviceActionTypes"),v=require("../../app-binder/command/GetAppConfigurationCommand"),u=require("../../app-binder/constants"),A=require("../../app-binder/generic-flow-router/basicFlowRules"),R=require("../../app-binder/generic-flow-router/GenericFlowRouter"),_=require("../../app-binder/services/TransactionInputNormaliser"),P=require("../../app-binder/services/utils/TransactionParser"),D=require("../../app-binder/SolanaApplicationResolver"),I=require("../../app-binder/task/SolanaSigningReportTask"),M=require("./ProvisionBasicClearSignDeviceAction"),B=require("./ProvisionGenericClearSignDeviceAction"),w=require("./ProvisionTransactionCheckDeviceAction"),E=require("./SignBasicClearSignDeviceAction"),F=require("./SignGenericClearSignDeviceAction");function y(o){return o.transactionOptions?.solanaRPCURL??o.solanaRPCURL}class b extends r.XStateDeviceAction{makeStateMachine(a){const{normalizeTransaction:l,getAppConfig:S,reportSign:s,resolveSigningRoute:T}=this.extractDependencies(a),c=this.getLoggerFactory(a),p=c("SignTransactionDeviceAction"),h=this.input.disabledFeatures?new Set(this.input.disabledFeatures):void 0,d=(e,t)=>(0,D.isSolanaSignerFeatureSupported)(a,e,t,h),m=e=>{const t=y(e.input),i=e.input.transactionOptions?.fetchBlockhash,k=!!!e.input.transactionOptions?.transactionResolutionContext?.templateId&&e.input.transactionOptions?.delayed===!0&&!!(t||i)&&d("delayedSigning",e._internalState.appConfig);return{rpcUrl:k?t:void 0,fetchBlockhash:k?i:void 0}};return(0,n.setup)({types:{input:{},context:{},output:{}},actors:{normalizeTransaction:(0,n.fromPromise)(l),reportSign:(0,n.fromPromise)(s),resolveSigningRoute:(0,n.fromPromise)(T),openAppStateMachine:new r.OpenAppDeviceAction({input:{appName:u.APP_NAME}}).makeStateMachine(a),getAppConfig:(0,n.fromPromise)(S),transactionCheckStateMachine:new w.ProvisionTransactionCheckDeviceAction({input:{derivationPath:this.input.derivationPath,transaction:this.input.transaction,contextModule:this.input.contextModule},loggerFactory:this.getLoggerFactory(a)}).makeStateMachine(a),provisionGenericClearSignStateMachine:new B.ProvisionGenericClearSignDeviceAction({input:{derivationPath:this.input.derivationPath,transaction:this.input.transaction,contextModule:this.input.contextModule},loggerFactory:this.getLoggerFactory(a)}).makeStateMachine(a),provisionBasicClearSignStateMachine:new M.ProvisionBasicClearSignDeviceAction({input:{derivationPath:this.input.derivationPath,transaction:this.input.transaction,contextModule:this.input.contextModule},loggerFactory:this.getLoggerFactory(a)}).makeStateMachine(a),signGenericClearSignStateMachine:new F.SignGenericClearSignDeviceAction({input:{derivationPath:this.input.derivationPath,transaction:this.input.transaction},loggerFactory:this.getLoggerFactory(a)}).makeStateMachine(a),signBasicClearSignStateMachine:new E.SignBasicClearSignDeviceAction({input:{derivationPath:this.input.derivationPath,transaction:this.input.transaction},loggerFactory:this.getLoggerFactory(a)}).makeStateMachine(a)},guards:{noInternalError:({context:e})=>e._internalState.error===null,skipOpenApp:({context:e})=>e.input.transactionOptions?.skipOpenApp||!1,isTransactionChecksSupported:({context:e})=>d("transactionChecks",e._internalState.appConfig),isGenericClearSignAvailable:({context:e})=>d("genericClearSign",e._internalState.appConfig),isClearSignPrepared:({context:e})=>e._internalState.clearSignPrepared,hasSignature:({context:e})=>e._internalState.signature!==null,hasBasicFlowRule:({context:e})=>e._internalState.basicFlowRuleId!==null},actions:{assignErrorFromEvent:(0,n.assign)({_internalState:e=>({...e.context._internalState,error:new r.UnknownDAError(e.event.error instanceof Error?e.event.error.message:String(e.event.error))})})}}).createMachine({id:"SignTransactionDeviceAction",initial:"NormalizeTransaction",context:({input:e})=>({input:e,intermediateValue:{requiredUserInteraction:r.UserInteractionRequired.None,step:g.signTransactionDAStateSteps.OPEN_APP},_internalState:{error:null,signature:null,appConfig:null,messageBytes:this.input.transaction,serializedForTxCheck:void 0,clearSignPrepared:!1,unrecognizedProgramIds:[],staleDescriptor:!1,basicFlowRuleId:null}}),states:{NormalizeTransaction:{entry:(0,n.assign)({intermediateValue:({context:e})=>({requiredUserInteraction:r.UserInteractionRequired.None,step:e.input.transactionOptions?.skipOpenApp?g.signTransactionDAStateSteps.GET_APP_CONFIG:g.signTransactionDAStateSteps.OPEN_APP})}),invoke:{id:"normalizeTransaction",src:"normalizeTransaction",onDone:[{target:"GetAppConfig",guard:"skipOpenApp",actions:(0,n.assign)({_internalState:({event:e,context:t})=>({...t._internalState,messageBytes:e.output.messageBytes,serializedForTxCheck:e.output.serializedForTxCheck})})},{target:"OpenAppDeviceAction",actions:(0,n.assign)({_internalState:({event:e,context:t})=>({...t._internalState,messageBytes:e.output.messageBytes,serializedForTxCheck:e.output.serializedForTxCheck})})}]}},OpenAppDeviceAction:{entry:(0,n.assign)({intermediateValue:()=>({requiredUserInteraction:r.UserInteractionRequired.None,step:g.signTransactionDAStateSteps.OPEN_APP})}),invoke:{id:"openAppStateMachine",src:"openAppStateMachine",input:()=>({appName:u.APP_NAME}),onSnapshot:{actions:(0,n.assign)({intermediateValue:({event:e})=>({...e.snapshot.context.intermediateValue,step:g.signTransactionDAStateSteps.OPEN_APP})})},onDone:{target:"OpenAppResultCheck",actions:(0,n.assign)({_internalState:({event:e,context:t})=>e.output.caseOf({Right:()=>t._internalState,Left:i=>({...t._internalState,error:i})})})}}},OpenAppResultCheck:{always:[{target:"GetAppConfig",guard:"noInternalError"},{target:"Error"}]},GetAppConfig:{entry:(0,n.assign)({intermediateValue:()=>({requiredUserInteraction:r.UserInteractionRequired.None,step:g.signTransactionDAStateSteps.GET_APP_CONFIG})}),invoke:{id:"getAppConfig",src:"getAppConfig",onDone:{target:"GetAppConfigResultCheck",actions:(0,n.assign)({_internalState:({event:e,context:t})=>(0,r.isSuccessCommandResult)(e.output)?{...t._internalState,appConfig:e.output.data}:{...t._internalState,error:e.output.error}})},onError:{target:"Error",actions:"assignErrorFromEvent"}}},GetAppConfigResultCheck:{always:[{target:"CheckTransactionCheckSupported",guard:"noInternalError"},{target:"Error"}]},CheckTransactionCheckSupported:{always:[{target:"TxCheck",guard:"isTransactionChecksSupported"},{target:"CheckGenericClearSignSupported"}]},TxCheck:{invoke:{id:"transactionCheckStateMachine",src:"transactionCheckStateMachine",input:({context:e})=>({appConfig:e._internalState.appConfig,derivationPath:e.input.derivationPath,transaction:e._internalState.messageBytes,contextModule:e.input.contextModule,serializedForTxCheck:e._internalState.serializedForTxCheck}),onSnapshot:{actions:(0,n.assign)({intermediateValue:({event:e})=>e.snapshot.context.intermediateValue})},onDone:{target:"CheckGenericClearSignSupported",actions:(0,n.assign)({_internalState:({event:e,context:t})=>e.output.caseOf({Right:({transactionChecksEnabled:i})=>({...t._internalState,appConfig:{...t._internalState.appConfig,transactionChecksEnabled:i,transactionChecksOptIn:!0}}),Left:()=>t._internalState})})}}},CheckGenericClearSignSupported:{always:[{target:"ResolveSigningRoute",guard:(0,n.and)(["noInternalError","isGenericClearSignAvailable"])},{target:"BasicClearSign",guard:"noInternalError"},{target:"Error"}]},ResolveSigningRoute:{invoke:{id:"resolveSigningRoute",src:"resolveSigningRoute",input:({context:e})=>({messageBytes:e._internalState.messageBytes}),onDone:{target:"CheckSigningRoute",actions:(0,n.assign)({_internalState:({event:e,context:t})=>({...t._internalState,basicFlowRuleId:e.output})})},onError:{target:"GenericClearSign"}}},CheckSigningRoute:{always:[{target:"BasicClearSign",guard:"hasBasicFlowRule",actions:({context:e})=>p.info("[ClearSign] basic-flow rule matched; skipping generic clear-sign",{data:{rule:e._internalState.basicFlowRuleId}})},{target:"GenericClearSign"}]},GenericClearSign:{invoke:{id:"provisionGenericClearSignStateMachine",src:"provisionGenericClearSignStateMachine",input:({context:e})=>({derivationPath:e.input.derivationPath,transaction:e._internalState.messageBytes,contextModule:e.input.contextModule}),onSnapshot:{actions:(0,n.assign)({intermediateValue:({event:e})=>e.snapshot.context.intermediateValue})},onDone:{target:"CheckGenericClearSignResult",actions:(0,n.assign)({_internalState:({event:e,context:t})=>e.output.caseOf({Right:i=>({...t._internalState,clearSignPrepared:i.status==="prepared",unrecognizedProgramIds:i.unrecognizedProgramIds,staleDescriptor:i.staleDescriptor}),Left:i=>({...t._internalState,error:i})})})},onError:{target:"CheckTxCheckReprovision",actions:({event:e})=>p.info("[ClearSign] generic clear-sign threw; falling back to legacy",{data:{error:String(e.error)}})}}},CheckGenericClearSignResult:{always:[{target:"GenericTerminalSign",guard:(0,n.and)(["noInternalError","isClearSignPrepared"])},{target:"CheckTxCheckReprovision",guard:"noInternalError"},{target:"Error"}]},GenericTerminalSign:{invoke:{id:"signGenericClearSignStateMachine",src:"signGenericClearSignStateMachine",input:({context:e})=>{const{rpcUrl:t,fetchBlockhash:i}=m(e);return{derivationPath:e.input.derivationPath,transaction:e._internalState.messageBytes,rpcUrl:t,fetchBlockhash:i,userInputType:e.input.transactionOptions?.transactionResolutionContext?.userInputType,blockhashService:e.input.blockhashService}},onSnapshot:{actions:(0,n.assign)({intermediateValue:({event:e})=>e.snapshot.context.intermediateValue})},onDone:{target:"CheckGenericTerminalSignResult",actions:(0,n.assign)({_internalState:({event:e,context:t})=>e.output.caseOf({Right:i=>i==="degraded"?t._internalState:{...t._internalState,signature:i},Left:i=>({...t._internalState,error:i})})})}}},CheckGenericTerminalSignResult:{always:[{target:"Report",guard:"hasSignature"},{target:"CheckTxCheckReprovision",guard:"noInternalError"},{target:"Report"}]},CheckTxCheckReprovision:{always:[{target:"TxCheckReprovision",guard:"isTransactionChecksSupported"},{target:"BasicClearSign"}]},TxCheckReprovision:{invoke:{id:"transactionCheckReprovisionStateMachine",src:"transactionCheckStateMachine",input:({context:e})=>({appConfig:e._internalState.appConfig,derivationPath:e.input.derivationPath,transaction:e._internalState.messageBytes,contextModule:e.input.contextModule,serializedForTxCheck:e._internalState.serializedForTxCheck}),onSnapshot:{actions:(0,n.assign)({intermediateValue:({event:e})=>e.snapshot.context.intermediateValue})},onDone:{target:"BasicClearSign"}}},BasicClearSign:{invoke:{id:"provisionBasicClearSignStateMachine",src:"provisionBasicClearSignStateMachine",input:({context:e})=>({derivationPath:e.input.derivationPath,transaction:e._internalState.messageBytes,contextModule:e.input.contextModule,appConfig:e._internalState.appConfig,rpcUrl:y(e.input),resolutionContext:e.input.transactionOptions?.transactionResolutionContext}),onSnapshot:{actions:(0,n.assign)({intermediateValue:({event:e})=>e.snapshot.context.intermediateValue})},onDone:{target:"Report"},onError:{target:"Report"}}},Report:{invoke:{src:"reportSign",input:({context:e})=>{const t=a.getDeviceSessionState(),i=t.sessionStateType!==r.DeviceSessionStateType.Connected?t.firmwareVersion?.os??null:null;return{isBlindSign:e._internalState.basicFlowRuleId===null&&e._internalState.signature===null&&e._internalState.error===null,messageBytes:e._internalState.messageBytes,unrecognizedProgramIds:e._internalState.unrecognizedProgramIds,staleDescriptor:e._internalState.staleDescriptor,contextModule:e.input.contextModule,signerAppVersion:e._internalState.appConfig.version,deviceModelId:t.deviceModelId,deviceVersion:i,loggerFactory:c}},onDone:[{target:"SignTransactionResultCheck",guard:"hasSignature"},{target:"Error",guard:({context:e})=>e._internalState.error!==null},{target:"BasicTerminalSign"}],onError:[{target:"SignTransactionResultCheck",guard:"hasSignature"},{target:"Error",guard:({context:e})=>e._internalState.error!==null},{target:"BasicTerminalSign"}]}},BasicTerminalSign:{invoke:{id:"signBasicClearSignStateMachine",src:"signBasicClearSignStateMachine",input:({context:e})=>{const{rpcUrl:t,fetchBlockhash:i}=m(e);return{derivationPath:e.input.derivationPath,transaction:e._internalState.messageBytes,rpcUrl:t,fetchBlockhash:i,userInputType:e.input.transactionOptions?.transactionResolutionContext?.userInputType,blockhashService:e.input.blockhashService}},onSnapshot:{actions:(0,n.assign)({intermediateValue:({event:e})=>e.snapshot.context.intermediateValue})},onDone:{target:"SignTransactionResultCheck",actions:(0,n.assign)({_internalState:({event:e,context:t})=>e.output.caseOf({Right:i=>({...t._internalState,signature:i}),Left:i=>({...t._internalState,error:i})})})}}},SignTransactionResultCheck:{always:[{guard:"noInternalError",target:"Success"},{target:"Error"}]},Success:{type:"final"},Error:{type:"final"}},output:({context:e})=>e._internalState.signature?(0,C.Right)(e._internalState.signature):(0,C.Left)(e._internalState.error||new r.UnknownDAError("No error or signature available"))})}extractDependencies(a){return{normalizeTransaction:async()=>{try{return new _.TransactionInputNormaliser().normalize(this.input.transaction)}catch(c){return this.getLoggerFactory(a)("NormalizeTransaction").warn("[normalizeTransaction] format detection failed; treating input as message bytes",{data:{error:String(c)}}),{messageBytes:this.input.transaction,serializedForTxCheck:void 0}}},getAppConfig:async()=>a.sendCommand(new v.GetAppConfigurationCommand),reportSign:async c=>new I.SolanaSigningReportTask(c.input).run(),resolveSigningRoute:async c=>{try{const p=await new P.TransactionParser().parse(c.input.messageBytes).run();if(p.isLeft())return null;const h=p.unsafeCoerce().message,d=[...new Set(h.compiledInstructions.map(e=>h.allKeys[e.programIdIndex]?.toBase58()))].filter(e=>e!==void 0&&e!==u.COMPUTE_BUDGET_PROGRAM_ID),m=await(0,A.resolveBasicFlowRules)(this.input.contextModule,d);return new R.GenericFlowRouter(m,{leadingAllowed:[u.COMPUTE_BUDGET_PROGRAM_ID]}).match(p.unsafeCoerce())}catch(p){return this.getLoggerFactory(a)("ResolveSigningRoute").warn("[resolveSigningRoute] failed; keeping the generic clear-sign path",{data:{error:String(p)}}),null}}}}}0&&(module.exports={SignTransactionDeviceAction});
|
|
1
|
+
"use strict";var f=Object.defineProperty;var O=Object.getOwnPropertyDescriptor;var z=Object.getOwnPropertyNames;var V=Object.prototype.hasOwnProperty;var N=(o,a)=>{for(var l in a)f(o,l,{get:a[l],enumerable:!0})},U=(o,a,l,d)=>{if(a&&typeof a=="object"||typeof a=="function")for(let c of z(a))!V.call(o,c)&&c!==l&&f(o,c,{get:()=>a[c],enumerable:!(d=O(a,c))||d.enumerable});return o};var b=o=>U(f({},"__esModule",{value:!0}),o);var x={};N(x,{SignTransactionDeviceAction:()=>L});module.exports=b(x);var i=require("@ledgerhq/device-management-kit"),C=require("purify-ts"),n=require("xstate"),g=require("../../../api/app-binder/SignTransactionDeviceActionTypes"),v=require("../../app-binder/command/GetAppConfigurationCommand"),S=require("../../app-binder/constants"),A=require("../../app-binder/generic-flow-router/basicFlowRules"),R=require("../../app-binder/generic-flow-router/GenericFlowRouter"),_=require("../../app-binder/services/TransactionInputNormaliser"),P=require("../../app-binder/services/utils/messageVersion"),D=require("../../app-binder/services/utils/TransactionParser"),I=require("../../app-binder/SolanaApplicationResolver"),M=require("../../app-binder/task/SolanaSigningReportTask"),B=require("./ProvisionBasicClearSignDeviceAction"),E=require("./ProvisionGenericClearSignDeviceAction"),w=require("./ProvisionTransactionCheckDeviceAction"),F=require("./SignBasicClearSignDeviceAction"),G=require("./SignGenericClearSignDeviceAction");function y(o){return o.transactionOptions?.solanaRPCURL??o.solanaRPCURL}class L extends i.XStateDeviceAction{makeStateMachine(a){const{normalizeTransaction:l,getAppConfig:d,reportSign:c,resolveSigningRoute:T}=this.extractDependencies(a),p=this.getLoggerFactory(a),s=p("SignTransactionDeviceAction"),h=this.input.disabledFeatures?new Set(this.input.disabledFeatures):void 0,u=(e,t)=>(0,I.isSolanaSignerFeatureSupported)(a,e,t,h),m=e=>{const t=y(e.input),r=e.input.transactionOptions?.fetchBlockhash,k=!!!e.input.transactionOptions?.transactionResolutionContext?.templateId&&e.input.transactionOptions?.delayed===!0&&!!(t||r)&&u("delayedSigning",e._internalState.appConfig);return{rpcUrl:k?t:void 0,fetchBlockhash:k?r:void 0}};return(0,n.setup)({types:{input:{},context:{},output:{}},actors:{normalizeTransaction:(0,n.fromPromise)(l),reportSign:(0,n.fromPromise)(c),resolveSigningRoute:(0,n.fromPromise)(T),openAppStateMachine:new i.OpenAppDeviceAction({input:{appName:S.APP_NAME}}).makeStateMachine(a),getAppConfig:(0,n.fromPromise)(d),transactionCheckStateMachine:new w.ProvisionTransactionCheckDeviceAction({input:{derivationPath:this.input.derivationPath,transaction:this.input.transaction,contextModule:this.input.contextModule},loggerFactory:this.getLoggerFactory(a)}).makeStateMachine(a),provisionGenericClearSignStateMachine:new E.ProvisionGenericClearSignDeviceAction({input:{derivationPath:this.input.derivationPath,transaction:this.input.transaction,contextModule:this.input.contextModule},loggerFactory:this.getLoggerFactory(a)}).makeStateMachine(a),provisionBasicClearSignStateMachine:new B.ProvisionBasicClearSignDeviceAction({input:{derivationPath:this.input.derivationPath,transaction:this.input.transaction,contextModule:this.input.contextModule},loggerFactory:this.getLoggerFactory(a)}).makeStateMachine(a),signGenericClearSignStateMachine:new G.SignGenericClearSignDeviceAction({input:{derivationPath:this.input.derivationPath,transaction:this.input.transaction},loggerFactory:this.getLoggerFactory(a)}).makeStateMachine(a),signBasicClearSignStateMachine:new F.SignBasicClearSignDeviceAction({input:{derivationPath:this.input.derivationPath,transaction:this.input.transaction},loggerFactory:this.getLoggerFactory(a)}).makeStateMachine(a)},guards:{noInternalError:({context:e})=>e._internalState.error===null,skipOpenApp:({context:e})=>e.input.transactionOptions?.skipOpenApp||!1,isTransactionChecksSupported:({context:e})=>u("transactionChecks",e._internalState.appConfig),isGenericClearSignAvailable:({context:e})=>u("genericClearSign",e._internalState.appConfig),isClearSignPrepared:({context:e})=>e._internalState.clearSignPrepared,hasSignature:({context:e})=>e._internalState.signature!==null,hasBasicFlowRule:({context:e})=>e._internalState.basicFlowRuleId!==null},actions:{assignErrorFromEvent:(0,n.assign)({_internalState:e=>({...e.context._internalState,error:new i.UnknownDAError(e.event.error instanceof Error?e.event.error.message:String(e.event.error))})})}}).createMachine({id:"SignTransactionDeviceAction",initial:"NormalizeTransaction",context:({input:e})=>({input:e,intermediateValue:{requiredUserInteraction:i.UserInteractionRequired.None,step:g.signTransactionDAStateSteps.OPEN_APP},_internalState:{error:null,signature:null,appConfig:null,messageBytes:this.input.transaction,serializedForTxCheck:void 0,clearSignPrepared:!1,unrecognizedProgramIds:[],staleDescriptor:!1,basicFlowRuleId:null}}),states:{NormalizeTransaction:{entry:(0,n.assign)({intermediateValue:({context:e})=>({requiredUserInteraction:i.UserInteractionRequired.None,step:e.input.transactionOptions?.skipOpenApp?g.signTransactionDAStateSteps.GET_APP_CONFIG:g.signTransactionDAStateSteps.OPEN_APP})}),invoke:{id:"normalizeTransaction",src:"normalizeTransaction",onDone:[{target:"GetAppConfig",guard:"skipOpenApp",actions:(0,n.assign)({_internalState:({event:e,context:t})=>({...t._internalState,messageBytes:e.output.messageBytes,serializedForTxCheck:e.output.serializedForTxCheck})})},{target:"OpenAppDeviceAction",actions:(0,n.assign)({_internalState:({event:e,context:t})=>({...t._internalState,messageBytes:e.output.messageBytes,serializedForTxCheck:e.output.serializedForTxCheck})})}]}},OpenAppDeviceAction:{entry:(0,n.assign)({intermediateValue:()=>({requiredUserInteraction:i.UserInteractionRequired.None,step:g.signTransactionDAStateSteps.OPEN_APP})}),invoke:{id:"openAppStateMachine",src:"openAppStateMachine",input:()=>({appName:S.APP_NAME}),onSnapshot:{actions:(0,n.assign)({intermediateValue:({event:e})=>({...e.snapshot.context.intermediateValue,step:g.signTransactionDAStateSteps.OPEN_APP})})},onDone:{target:"OpenAppResultCheck",actions:(0,n.assign)({_internalState:({event:e,context:t})=>e.output.caseOf({Right:()=>t._internalState,Left:r=>({...t._internalState,error:r})})})}}},OpenAppResultCheck:{always:[{target:"GetAppConfig",guard:"noInternalError"},{target:"Error"}]},GetAppConfig:{entry:(0,n.assign)({intermediateValue:()=>({requiredUserInteraction:i.UserInteractionRequired.None,step:g.signTransactionDAStateSteps.GET_APP_CONFIG})}),invoke:{id:"getAppConfig",src:"getAppConfig",onDone:{target:"GetAppConfigResultCheck",actions:(0,n.assign)({_internalState:({event:e,context:t})=>(0,i.isSuccessCommandResult)(e.output)?{...t._internalState,appConfig:e.output.data}:{...t._internalState,error:e.output.error}})},onError:{target:"Error",actions:"assignErrorFromEvent"}}},GetAppConfigResultCheck:{always:[{target:"CheckTransactionVersionSupported",guard:"noInternalError"},{target:"Error"}]},CheckTransactionVersionSupported:{entry:(0,n.assign)({_internalState:({context:e})=>({...e._internalState,error:(0,P.checkMessageVersion)(e._internalState.messageBytes,u("v1Transactions",e._internalState.appConfig))})}),always:[{target:"CheckTransactionCheckSupported",guard:"noInternalError"},{target:"Error",actions:({context:e})=>s.info("[CheckTransactionVersionSupported] transaction refused",{data:{error:e._internalState.error}})}]},CheckTransactionCheckSupported:{always:[{target:"TxCheck",guard:"isTransactionChecksSupported"},{target:"CheckGenericClearSignSupported"}]},TxCheck:{invoke:{id:"transactionCheckStateMachine",src:"transactionCheckStateMachine",input:({context:e})=>({appConfig:e._internalState.appConfig,derivationPath:e.input.derivationPath,transaction:e._internalState.messageBytes,contextModule:e.input.contextModule,serializedForTxCheck:e._internalState.serializedForTxCheck}),onSnapshot:{actions:(0,n.assign)({intermediateValue:({event:e})=>e.snapshot.context.intermediateValue})},onDone:{target:"CheckGenericClearSignSupported",actions:(0,n.assign)({_internalState:({event:e,context:t})=>e.output.caseOf({Right:({transactionChecksEnabled:r})=>({...t._internalState,appConfig:{...t._internalState.appConfig,transactionChecksEnabled:r,transactionChecksOptIn:!0}}),Left:()=>t._internalState})})}}},CheckGenericClearSignSupported:{always:[{target:"ResolveSigningRoute",guard:(0,n.and)(["noInternalError","isGenericClearSignAvailable"])},{target:"BasicClearSign",guard:"noInternalError"},{target:"Error"}]},ResolveSigningRoute:{invoke:{id:"resolveSigningRoute",src:"resolveSigningRoute",input:({context:e})=>({messageBytes:e._internalState.messageBytes}),onDone:{target:"CheckSigningRoute",actions:(0,n.assign)({_internalState:({event:e,context:t})=>({...t._internalState,basicFlowRuleId:e.output})})},onError:{target:"GenericClearSign"}}},CheckSigningRoute:{always:[{target:"BasicClearSign",guard:"hasBasicFlowRule",actions:({context:e})=>s.info("[ClearSign] basic-flow rule matched; skipping generic clear-sign",{data:{rule:e._internalState.basicFlowRuleId}})},{target:"GenericClearSign"}]},GenericClearSign:{invoke:{id:"provisionGenericClearSignStateMachine",src:"provisionGenericClearSignStateMachine",input:({context:e})=>({derivationPath:e.input.derivationPath,transaction:e._internalState.messageBytes,contextModule:e.input.contextModule}),onSnapshot:{actions:(0,n.assign)({intermediateValue:({event:e})=>e.snapshot.context.intermediateValue})},onDone:{target:"CheckGenericClearSignResult",actions:(0,n.assign)({_internalState:({event:e,context:t})=>e.output.caseOf({Right:r=>({...t._internalState,clearSignPrepared:r.status==="prepared",unrecognizedProgramIds:r.unrecognizedProgramIds,staleDescriptor:r.staleDescriptor}),Left:r=>({...t._internalState,error:r})})})},onError:{target:"CheckTxCheckReprovision",actions:({event:e})=>s.info("[ClearSign] generic clear-sign threw; falling back to legacy",{data:{error:String(e.error)}})}}},CheckGenericClearSignResult:{always:[{target:"GenericTerminalSign",guard:(0,n.and)(["noInternalError","isClearSignPrepared"])},{target:"CheckTxCheckReprovision",guard:"noInternalError"},{target:"Error"}]},GenericTerminalSign:{invoke:{id:"signGenericClearSignStateMachine",src:"signGenericClearSignStateMachine",input:({context:e})=>{const{rpcUrl:t,fetchBlockhash:r}=m(e);return{derivationPath:e.input.derivationPath,transaction:e._internalState.messageBytes,rpcUrl:t,fetchBlockhash:r,userInputType:e.input.transactionOptions?.transactionResolutionContext?.userInputType,blockhashService:e.input.blockhashService}},onSnapshot:{actions:(0,n.assign)({intermediateValue:({event:e})=>e.snapshot.context.intermediateValue})},onDone:{target:"CheckGenericTerminalSignResult",actions:(0,n.assign)({_internalState:({event:e,context:t})=>e.output.caseOf({Right:r=>r==="degraded"?t._internalState:{...t._internalState,signature:r},Left:r=>({...t._internalState,error:r})})})}}},CheckGenericTerminalSignResult:{always:[{target:"Report",guard:"hasSignature"},{target:"CheckTxCheckReprovision",guard:"noInternalError"},{target:"Report"}]},CheckTxCheckReprovision:{always:[{target:"TxCheckReprovision",guard:"isTransactionChecksSupported"},{target:"BasicClearSign"}]},TxCheckReprovision:{invoke:{id:"transactionCheckReprovisionStateMachine",src:"transactionCheckStateMachine",input:({context:e})=>({appConfig:e._internalState.appConfig,derivationPath:e.input.derivationPath,transaction:e._internalState.messageBytes,contextModule:e.input.contextModule,serializedForTxCheck:e._internalState.serializedForTxCheck}),onSnapshot:{actions:(0,n.assign)({intermediateValue:({event:e})=>e.snapshot.context.intermediateValue})},onDone:{target:"BasicClearSign"}}},BasicClearSign:{invoke:{id:"provisionBasicClearSignStateMachine",src:"provisionBasicClearSignStateMachine",input:({context:e})=>({derivationPath:e.input.derivationPath,transaction:e._internalState.messageBytes,contextModule:e.input.contextModule,appConfig:e._internalState.appConfig,rpcUrl:y(e.input),resolutionContext:e.input.transactionOptions?.transactionResolutionContext}),onSnapshot:{actions:(0,n.assign)({intermediateValue:({event:e})=>e.snapshot.context.intermediateValue})},onDone:{target:"Report"},onError:{target:"Report"}}},Report:{invoke:{src:"reportSign",input:({context:e})=>{const t=a.getDeviceSessionState(),r=t.sessionStateType!==i.DeviceSessionStateType.Connected?t.firmwareVersion?.os??null:null;return{isBlindSign:e._internalState.basicFlowRuleId===null&&e._internalState.signature===null&&e._internalState.error===null,messageBytes:e._internalState.messageBytes,unrecognizedProgramIds:e._internalState.unrecognizedProgramIds,staleDescriptor:e._internalState.staleDescriptor,contextModule:e.input.contextModule,signerAppVersion:e._internalState.appConfig.version,deviceModelId:t.deviceModelId,deviceVersion:r,loggerFactory:p}},onDone:[{target:"SignTransactionResultCheck",guard:"hasSignature"},{target:"Error",guard:({context:e})=>e._internalState.error!==null},{target:"BasicTerminalSign"}],onError:[{target:"SignTransactionResultCheck",guard:"hasSignature"},{target:"Error",guard:({context:e})=>e._internalState.error!==null},{target:"BasicTerminalSign"}]}},BasicTerminalSign:{invoke:{id:"signBasicClearSignStateMachine",src:"signBasicClearSignStateMachine",input:({context:e})=>{const{rpcUrl:t,fetchBlockhash:r}=m(e);return{derivationPath:e.input.derivationPath,transaction:e._internalState.messageBytes,rpcUrl:t,fetchBlockhash:r,userInputType:e.input.transactionOptions?.transactionResolutionContext?.userInputType,blockhashService:e.input.blockhashService}},onSnapshot:{actions:(0,n.assign)({intermediateValue:({event:e})=>e.snapshot.context.intermediateValue})},onDone:{target:"SignTransactionResultCheck",actions:(0,n.assign)({_internalState:({event:e,context:t})=>e.output.caseOf({Right:r=>({...t._internalState,signature:r}),Left:r=>({...t._internalState,error:r})})})}}},SignTransactionResultCheck:{always:[{guard:"noInternalError",target:"Success"},{target:"Error"}]},Success:{type:"final"},Error:{type:"final"}},output:({context:e})=>e._internalState.signature?(0,C.Right)(e._internalState.signature):(0,C.Left)(e._internalState.error||new i.UnknownDAError("No error or signature available"))})}extractDependencies(a){return{normalizeTransaction:async()=>{try{return new _.TransactionInputNormaliser().normalize(this.input.transaction)}catch(p){return this.getLoggerFactory(a)("NormalizeTransaction").warn("[normalizeTransaction] format detection failed; treating input as message bytes",{data:{error:String(p)}}),{messageBytes:this.input.transaction,serializedForTxCheck:void 0}}},getAppConfig:async()=>a.sendCommand(new v.GetAppConfigurationCommand),reportSign:async p=>new M.SolanaSigningReportTask(p.input).run(),resolveSigningRoute:async p=>{try{const s=await new D.TransactionParser().parse(p.input.messageBytes).run();if(s.isLeft())return null;const h=s.unsafeCoerce().message,u=[...new Set(h.compiledInstructions.map(e=>h.allKeys[e.programIdIndex]?.toBase58()))].filter(e=>e!==void 0&&e!==S.COMPUTE_BUDGET_PROGRAM_ID),m=await(0,A.resolveBasicFlowRules)(this.input.contextModule,u);return new R.GenericFlowRouter(m,{leadingAllowed:[S.COMPUTE_BUDGET_PROGRAM_ID]}).match(s.unsafeCoerce())}catch(s){return this.getLoggerFactory(a)("ResolveSigningRoute").warn("[resolveSigningRoute] failed; keeping the generic clear-sign path",{data:{error:String(s)}}),null}}}}}0&&(module.exports={SignTransactionDeviceAction});
|
|
2
2
|
//# sourceMappingURL=SignTransactionDeviceAction.js.map
|