@ledgerhq/device-signer-kit-solana 1.13.3 → 1.14.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.
Files changed (92) hide show
  1. package/lib/cjs/api/app-binder/ProvisionTransactionCheckDeviceActionTypes.js +1 -1
  2. package/lib/cjs/api/app-binder/ProvisionTransactionCheckDeviceActionTypes.js.map +1 -1
  3. package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js.map +1 -1
  4. package/lib/cjs/internal/app-binder/constants.js +1 -1
  5. package/lib/cjs/internal/app-binder/constants.js.map +3 -3
  6. package/lib/cjs/internal/app-binder/device-action/ProvisionTransactionCheckDeviceAction.js +1 -1
  7. package/lib/cjs/internal/app-binder/device-action/ProvisionTransactionCheckDeviceAction.js.map +2 -2
  8. package/lib/cjs/internal/app-binder/device-action/ProvisionTransactionCheckDeviceAction.test.js +1 -1
  9. package/lib/cjs/internal/app-binder/device-action/ProvisionTransactionCheckDeviceAction.test.js.map +2 -2
  10. package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.js +1 -1
  11. package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.js.map +3 -3
  12. package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.test.js +1 -1
  13. package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.test.js.map +3 -3
  14. package/lib/cjs/internal/app-binder/generic-flow-router/BasicFlowRule.js +2 -0
  15. package/lib/cjs/internal/app-binder/generic-flow-router/BasicFlowRule.js.map +7 -0
  16. package/lib/cjs/internal/app-binder/generic-flow-router/GenericFlowRouter.js +2 -0
  17. package/lib/cjs/internal/app-binder/generic-flow-router/GenericFlowRouter.js.map +7 -0
  18. package/lib/cjs/internal/app-binder/generic-flow-router/GenericFlowRouter.test.js +2 -0
  19. package/lib/cjs/internal/app-binder/generic-flow-router/GenericFlowRouter.test.js.map +7 -0
  20. package/lib/cjs/internal/app-binder/generic-flow-router/basicFlowRules.js +2 -0
  21. package/lib/cjs/internal/app-binder/generic-flow-router/basicFlowRules.js.map +7 -0
  22. package/lib/cjs/internal/app-binder/generic-flow-router/basicFlowRules.test.js +2 -0
  23. package/lib/cjs/internal/app-binder/generic-flow-router/basicFlowRules.test.js.map +7 -0
  24. package/lib/cjs/internal/app-binder/services/TransactionInputNormaliser.js +1 -1
  25. package/lib/cjs/internal/app-binder/services/TransactionInputNormaliser.js.map +3 -3
  26. package/lib/cjs/internal/app-binder/services/TransactionInputNormaliser.test.js +1 -1
  27. package/lib/cjs/internal/app-binder/services/TransactionInputNormaliser.test.js.map +3 -3
  28. package/lib/cjs/internal/app-binder/services/__test-utils__/ambiguousMessages.js +2 -0
  29. package/lib/cjs/internal/app-binder/services/__test-utils__/ambiguousMessages.js.map +7 -0
  30. package/lib/cjs/internal/app-binder/services/utils/TransactionParser.js +1 -1
  31. package/lib/cjs/internal/app-binder/services/utils/TransactionParser.js.map +3 -3
  32. package/lib/cjs/internal/app-binder/services/utils/TransactionParser.test.js +1 -1
  33. package/lib/cjs/internal/app-binder/services/utils/TransactionParser.test.js.map +3 -3
  34. package/lib/cjs/package.json +3 -3
  35. package/lib/esm/api/app-binder/SignTransactionDeviceActionTypes.js.map +1 -1
  36. package/lib/esm/internal/app-binder/constants.js +1 -1
  37. package/lib/esm/internal/app-binder/constants.js.map +3 -3
  38. package/lib/esm/internal/app-binder/device-action/ProvisionTransactionCheckDeviceAction.js +1 -1
  39. package/lib/esm/internal/app-binder/device-action/ProvisionTransactionCheckDeviceAction.js.map +2 -2
  40. package/lib/esm/internal/app-binder/device-action/ProvisionTransactionCheckDeviceAction.test.js +1 -1
  41. package/lib/esm/internal/app-binder/device-action/ProvisionTransactionCheckDeviceAction.test.js.map +2 -2
  42. package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.js +1 -1
  43. package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.js.map +3 -3
  44. package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.test.js +1 -1
  45. package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.test.js.map +3 -3
  46. package/lib/esm/internal/app-binder/generic-flow-router/BasicFlowRule.js +1 -0
  47. package/lib/esm/internal/app-binder/generic-flow-router/BasicFlowRule.js.map +7 -0
  48. package/lib/esm/internal/app-binder/generic-flow-router/GenericFlowRouter.js +2 -0
  49. package/lib/esm/internal/app-binder/generic-flow-router/GenericFlowRouter.js.map +7 -0
  50. package/lib/esm/internal/app-binder/generic-flow-router/GenericFlowRouter.test.js +2 -0
  51. package/lib/esm/internal/app-binder/generic-flow-router/GenericFlowRouter.test.js.map +7 -0
  52. package/lib/esm/internal/app-binder/generic-flow-router/basicFlowRules.js +2 -0
  53. package/lib/esm/internal/app-binder/generic-flow-router/basicFlowRules.js.map +7 -0
  54. package/lib/esm/internal/app-binder/generic-flow-router/basicFlowRules.test.js +2 -0
  55. package/lib/esm/internal/app-binder/generic-flow-router/basicFlowRules.test.js.map +7 -0
  56. package/lib/esm/internal/app-binder/services/TransactionInputNormaliser.js +1 -1
  57. package/lib/esm/internal/app-binder/services/TransactionInputNormaliser.js.map +3 -3
  58. package/lib/esm/internal/app-binder/services/TransactionInputNormaliser.test.js +1 -1
  59. package/lib/esm/internal/app-binder/services/TransactionInputNormaliser.test.js.map +3 -3
  60. package/lib/esm/internal/app-binder/services/__test-utils__/ambiguousMessages.js +2 -0
  61. package/lib/esm/internal/app-binder/services/__test-utils__/ambiguousMessages.js.map +7 -0
  62. package/lib/esm/internal/app-binder/services/utils/TransactionParser.js +1 -1
  63. package/lib/esm/internal/app-binder/services/utils/TransactionParser.js.map +3 -3
  64. package/lib/esm/internal/app-binder/services/utils/TransactionParser.test.js +1 -1
  65. package/lib/esm/internal/app-binder/services/utils/TransactionParser.test.js.map +3 -3
  66. package/lib/esm/package.json +3 -3
  67. package/lib/types/api/app-binder/ProvisionTransactionCheckDeviceActionTypes.d.ts +5 -1
  68. package/lib/types/api/app-binder/ProvisionTransactionCheckDeviceActionTypes.d.ts.map +1 -1
  69. package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts +1 -0
  70. package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts.map +1 -1
  71. package/lib/types/internal/app-binder/constants.d.ts +1 -0
  72. package/lib/types/internal/app-binder/constants.d.ts.map +1 -1
  73. package/lib/types/internal/app-binder/device-action/ProvisionTransactionCheckDeviceAction.d.ts.map +1 -1
  74. package/lib/types/internal/app-binder/device-action/SignTransactionDeviceAction.d.ts +5 -0
  75. package/lib/types/internal/app-binder/device-action/SignTransactionDeviceAction.d.ts.map +1 -1
  76. package/lib/types/internal/app-binder/generic-flow-router/BasicFlowRule.d.ts +22 -0
  77. package/lib/types/internal/app-binder/generic-flow-router/BasicFlowRule.d.ts.map +1 -0
  78. package/lib/types/internal/app-binder/generic-flow-router/GenericFlowRouter.d.ts +26 -0
  79. package/lib/types/internal/app-binder/generic-flow-router/GenericFlowRouter.d.ts.map +1 -0
  80. package/lib/types/internal/app-binder/generic-flow-router/GenericFlowRouter.test.d.ts +2 -0
  81. package/lib/types/internal/app-binder/generic-flow-router/GenericFlowRouter.test.d.ts.map +1 -0
  82. package/lib/types/internal/app-binder/generic-flow-router/basicFlowRules.d.ts +15 -0
  83. package/lib/types/internal/app-binder/generic-flow-router/basicFlowRules.d.ts.map +1 -0
  84. package/lib/types/internal/app-binder/generic-flow-router/basicFlowRules.test.d.ts +2 -0
  85. package/lib/types/internal/app-binder/generic-flow-router/basicFlowRules.test.d.ts.map +1 -0
  86. package/lib/types/internal/app-binder/services/TransactionInputNormaliser.d.ts +23 -8
  87. package/lib/types/internal/app-binder/services/TransactionInputNormaliser.d.ts.map +1 -1
  88. package/lib/types/internal/app-binder/services/__test-utils__/ambiguousMessages.d.ts +7 -0
  89. package/lib/types/internal/app-binder/services/__test-utils__/ambiguousMessages.d.ts.map +1 -0
  90. package/lib/types/internal/app-binder/services/utils/TransactionParser.d.ts.map +1 -1
  91. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  92. package/package.json +7 -7
@@ -1,2 +1,2 @@
1
- "use strict";var r=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var c=(n,e,i,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of p(e))!l.call(n,t)&&t!==i&&r(n,t,{get:()=>e[t],enumerable:!(o=a(e,t))||o.enumerable});return n};var s=n=>c(r({},"__esModule",{value:!0}),n);var d={};module.exports=s(d);
1
+ "use strict";var r=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var c=(n,e,a,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of p(e))!l.call(n,t)&&t!==a&&r(n,t,{get:()=>e[t],enumerable:!(o=i(e,t))||o.enumerable});return n};var s=n=>c(r({},"__esModule",{value:!0}),n);var d={};module.exports=s(d);
2
2
  //# sourceMappingURL=ProvisionTransactionCheckDeviceActionTypes.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/api/app-binder/ProvisionTransactionCheckDeviceActionTypes.ts"],
4
- "sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\n\nimport {\n type SignTransactionDAIntermediateValue,\n type SignTransactionDASimpleIntermediateValue,\n} from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { type AppConfiguration } from \"@api/model/AppConfiguration\";\n\nexport type ProvisionTransactionCheckDAInput = {\n readonly derivationPath: string;\n readonly transaction: Uint8Array;\n readonly contextModule: ContextModule;\n // Supplied at invoke time (depends on parent's runtime state)\n readonly appConfig?: AppConfiguration;\n readonly serializedForTxCheck?: Uint8Array;\n};\n\n/**\n * Best-effort: the machine provisions the tx-check descriptor but never\n * signs; any failure is swallowed, so the output is always `Right`.\n */\nexport type ProvisionTransactionCheckDAOutput = void;\n\nexport type ProvisionTransactionCheckDAError = never;\n\n/**\n * Emits the full union so the opt-in-result step's `result` field is\n * preserved when the parent forwards child snapshots.\n */\nexport type ProvisionTransactionCheckDAIntermediateValue =\n SignTransactionDAIntermediateValue;\n\nexport type ProvisionTransactionCheckDAInternalState = {\n // Starts from input.appConfig; updated with transactionChecksEnabled after opt-in.\n readonly appConfig: AppConfiguration | null;\n};\n\nexport type ProvisionTransactionCheckDASimpleIntermediateValue =\n SignTransactionDASimpleIntermediateValue;\n"],
4
+ "sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\n\nimport {\n type SignTransactionDAIntermediateValue,\n type SignTransactionDASimpleIntermediateValue,\n} from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { type AppConfiguration } from \"@api/model/AppConfiguration\";\n\nexport type ProvisionTransactionCheckDAInput = {\n readonly derivationPath: string;\n readonly transaction: Uint8Array;\n readonly contextModule: ContextModule;\n // Supplied at invoke time (depends on parent's runtime state)\n readonly appConfig?: AppConfiguration;\n readonly serializedForTxCheck?: Uint8Array;\n};\n\n/**\n * Best-effort: the machine provisions the tx-check descriptor but never\n * signs; any failure is swallowed, so the output is always `Right`.\n * `transactionChecksEnabled` is the state after the opt-in prompt (if any),\n * so the parent can re-provision later without prompting again.\n */\nexport type ProvisionTransactionCheckDAOutput = {\n readonly transactionChecksEnabled: boolean;\n};\n\nexport type ProvisionTransactionCheckDAError = never;\n\n/**\n * Emits the full union so the opt-in-result step's `result` field is\n * preserved when the parent forwards child snapshots.\n */\nexport type ProvisionTransactionCheckDAIntermediateValue =\n SignTransactionDAIntermediateValue;\n\nexport type ProvisionTransactionCheckDAInternalState = {\n // Starts from input.appConfig; updated with transactionChecksEnabled after opt-in.\n readonly appConfig: AppConfiguration | null;\n};\n\nexport type ProvisionTransactionCheckDASimpleIntermediateValue =\n SignTransactionDASimpleIntermediateValue;\n"],
5
5
  "mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
6
6
  "names": ["ProvisionTransactionCheckDeviceActionTypes_exports", "__toCommonJS"]
7
7
  }
@@ -1,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>;\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};\n\nexport type SignTransactionDAReturnType = ExecuteDeviceActionReturnType<\n SignTransactionDAOutput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n>;\n"],
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>;\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
5
  "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,iCAAAE,IAAA,eAAAC,EAAAH,GAmBO,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
  }
@@ -1,2 +1,2 @@
1
- "use strict";var A=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var n=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var M=(t,o)=>{for(var e in o)A(t,e,{get:o[e],enumerable:!0})},c=(t,o,e,E)=>{if(o&&typeof o=="object"||typeof o=="function")for(let _ of n(o))!p.call(t,_)&&_!==e&&A(t,_,{get:()=>o[_],enumerable:!(E=P(o,_))||E.enumerable});return t};var r=t=>c(A({},"__esModule",{value:!0}),t);var S={};M(S,{APP_NAME:()=>s,COMPUTE_BUDGET_PROGRAM_ID:()=>O,SOLANA_PUBKEY_LEN:()=>x,SYSTEM_PROGRAM_ID:()=>R});module.exports=r(S);const s="Solana",x=32,O="ComputeBudget111111111111111111111111111111",R="11111111111111111111111111111111";0&&(module.exports={APP_NAME,COMPUTE_BUDGET_PROGRAM_ID,SOLANA_PUBKEY_LEN,SYSTEM_PROGRAM_ID});
1
+ "use strict";var A=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var n=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var M=(o,t)=>{for(var e in t)A(o,e,{get:t[e],enumerable:!0})},R=(o,t,e,E)=>{if(t&&typeof t=="object"||typeof t=="function")for(let _ of n(t))!p.call(o,_)&&_!==e&&A(o,_,{get:()=>t[_],enumerable:!(E=P(t,_))||E.enumerable});return o};var S=o=>R(A({},"__esModule",{value:!0}),o);var D={};M(D,{APP_NAME:()=>c,COMPUTE_BUDGET_PROGRAM_ID:()=>s,SOLANA_PUBKEY_LEN:()=>r,STAKE_PROGRAM_ID:()=>O,SYSTEM_PROGRAM_ID:()=>x});module.exports=S(D);const c="Solana",r=32,s="ComputeBudget111111111111111111111111111111",x="11111111111111111111111111111111",O="Stake11111111111111111111111111111111111111";0&&(module.exports={APP_NAME,COMPUTE_BUDGET_PROGRAM_ID,SOLANA_PUBKEY_LEN,STAKE_PROGRAM_ID,SYSTEM_PROGRAM_ID});
2
2
  //# sourceMappingURL=constants.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/internal/app-binder/constants.ts"],
4
- "sourcesContent": ["export const APP_NAME = \"Solana\";\nexport const SOLANA_PUBKEY_LEN = 32;\nexport const COMPUTE_BUDGET_PROGRAM_ID =\n \"ComputeBudget111111111111111111111111111111\";\nexport const SYSTEM_PROGRAM_ID = \"11111111111111111111111111111111\";\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,cAAAE,EAAA,8BAAAC,EAAA,sBAAAC,EAAA,sBAAAC,IAAA,eAAAC,EAAAN,GAAO,MAAME,EAAW,SACXE,EAAoB,GACpBD,EACX,8CACWE,EAAoB",
6
- "names": ["constants_exports", "__export", "APP_NAME", "COMPUTE_BUDGET_PROGRAM_ID", "SOLANA_PUBKEY_LEN", "SYSTEM_PROGRAM_ID", "__toCommonJS"]
4
+ "sourcesContent": ["export const APP_NAME = \"Solana\";\nexport const SOLANA_PUBKEY_LEN = 32;\nexport const COMPUTE_BUDGET_PROGRAM_ID =\n \"ComputeBudget111111111111111111111111111111\";\nexport const SYSTEM_PROGRAM_ID = \"11111111111111111111111111111111\";\nexport const STAKE_PROGRAM_ID = \"Stake11111111111111111111111111111111111111\";\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,cAAAE,EAAA,8BAAAC,EAAA,sBAAAC,EAAA,qBAAAC,EAAA,sBAAAC,IAAA,eAAAC,EAAAP,GAAO,MAAME,EAAW,SACXE,EAAoB,GACpBD,EACX,8CACWG,EAAoB,mCACpBD,EAAmB",
6
+ "names": ["constants_exports", "__export", "APP_NAME", "COMPUTE_BUDGET_PROGRAM_ID", "SOLANA_PUBKEY_LEN", "STAKE_PROGRAM_ID", "SYSTEM_PROGRAM_ID", "__toCommonJS"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var p=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames;var T=Object.prototype.hasOwnProperty;var v=(o,e)=>{for(var i in e)p(o,i,{get:e[i],enumerable:!0})},I=(o,e,i,c)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of k(e))!T.call(o,n)&&n!==i&&p(o,n,{get:()=>e[n],enumerable:!(c=l(e,n))||c.enumerable});return o};var m=o=>I(p({},"__esModule",{value:!0}),o);var A={};v(A,{ProvisionTransactionCheckDeviceAction:()=>P});module.exports=m(A);var a=require("@ledgerhq/device-management-kit"),C=require("purify-ts"),r=require("xstate"),s=require("../../../api/app-binder/SignTransactionDeviceActionTypes"),u=require("../../app-binder/command/TransactionCheckOptInCommand"),h=require("../../app-binder/task/ProvideTransactionCheckTask");class P extends a.XStateDeviceAction{makeStateMachine(e){const{transactionCheckOptIn:i,provideTransactionCheck:c}=this.extractDependencies(e),n=this.getLoggerFactory(e)("ProvisionTransactionCheckDeviceAction");return(0,r.setup)({types:{input:{},context:{},output:{}},actors:{transactionCheckOptIn:(0,r.fromPromise)(i),provideTransactionCheck:(0,r.fromPromise)(c)},guards:{shouldOptIn:({context:t})=>!!t._internalState.appConfig&&!t._internalState.appConfig.transactionChecksEnabled&&!t._internalState.appConfig.transactionChecksOptIn,transactionChecksEnabled:({context:t})=>t._internalState.appConfig?.transactionChecksEnabled===!0}}).createMachine({id:"ProvisionTransactionCheckDeviceAction",initial:"OptInGate",context:({input:t})=>({input:t,intermediateValue:{requiredUserInteraction:a.UserInteractionRequired.None,step:s.signTransactionDAStateSteps.TRANSACTION_CHECKS_OPT_IN},_internalState:{appConfig:t.appConfig??null}}),states:{OptInGate:{always:[{target:"OptIn",guard:"shouldOptIn"},{target:"ProvideGate"}]},OptIn:{entry:(0,r.assign)({intermediateValue:()=>({requiredUserInteraction:a.UserInteractionRequired.Web3ChecksOptIn,step:s.signTransactionDAStateSteps.TRANSACTION_CHECKS_OPT_IN})}),invoke:{id:"transactionCheckOptIn",src:"transactionCheckOptIn",onDone:{target:"OptInResult",actions:[({event:t})=>{(0,a.isSuccessCommandResult)(t.output)||n.warn("[TransactionCheck] opt-in command returned error, proceeding without transaction-checks",{data:{error:t.output}})},(0,r.assign)({_internalState:({event:t,context:d})=>(0,a.isSuccessCommandResult)(t.output)?{appConfig:{...d._internalState.appConfig,transactionChecksEnabled:t.output.data.enabled}}:d._internalState})]},onError:{target:"OptInResult",actions:({event:t})=>n.info("[TransactionCheck] opt-in threw; proceeding without transaction-checks",{data:{error:String(t.error)}})}}},OptInResult:{entry:(0,r.assign)(({context:t})=>({intermediateValue:{requiredUserInteraction:a.UserInteractionRequired.None,step:s.signTransactionDAStateSteps.TRANSACTION_CHECKS_OPT_IN_RESULT,result:t._internalState.appConfig?.transactionChecksEnabled??!1}})),after:{0:{target:"ProvideGate"}}},ProvideGate:{always:[{target:"Provide",guard:"transactionChecksEnabled"},{target:"Done"}]},Provide:{entry:(0,r.assign)({intermediateValue:()=>({requiredUserInteraction:a.UserInteractionRequired.None,step:s.signTransactionDAStateSteps.TRANSACTION_CHECKS_PROVIDE})}),invoke:{id:"provideTransactionCheck",src:"provideTransactionCheck",input:({context:t})=>({derivationPath:t.input.derivationPath,transaction:t.input.transaction,contextModule:t.input.contextModule,serializedForTxCheck:t.input.serializedForTxCheck}),onDone:{target:"Done"},onError:{target:"Done",actions:({event:t})=>n.info("[TransactionCheck] provide threw; proceeding",{data:{error:String(t.error)}})}}},Done:{type:"final"}},output:()=>(0,C.Right)(void 0)})}extractDependencies(e){return{transactionCheckOptIn:async()=>e.sendCommand(new u.TransactionCheckOptInCommand),provideTransactionCheck:async n=>new h.ProvideTransactionCheckTask(e,{derivationPath:n.input.derivationPath,transactionBytes:n.input.transaction,contextModule:n.input.contextModule,serializedTransactionForTransactionCheck:n.input.serializedForTxCheck,loggerFactory:this.getLoggerFactory(e)}).run()}}}0&&(module.exports={ProvisionTransactionCheckDeviceAction});
1
+ "use strict";var p=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames;var T=Object.prototype.hasOwnProperty;var v=(o,e)=>{for(var i in e)p(o,i,{get:e[i],enumerable:!0})},I=(o,e,i,c)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of k(e))!T.call(o,n)&&n!==i&&p(o,n,{get:()=>e[n],enumerable:!(c=l(e,n))||c.enumerable});return o};var m=o=>I(p({},"__esModule",{value:!0}),o);var A={};v(A,{ProvisionTransactionCheckDeviceAction:()=>P});module.exports=m(A);var a=require("@ledgerhq/device-management-kit"),d=require("purify-ts"),r=require("xstate"),s=require("../../../api/app-binder/SignTransactionDeviceActionTypes"),h=require("../../app-binder/command/TransactionCheckOptInCommand"),u=require("../../app-binder/task/ProvideTransactionCheckTask");class P extends a.XStateDeviceAction{makeStateMachine(e){const{transactionCheckOptIn:i,provideTransactionCheck:c}=this.extractDependencies(e),n=this.getLoggerFactory(e)("ProvisionTransactionCheckDeviceAction");return(0,r.setup)({types:{input:{},context:{},output:{}},actors:{transactionCheckOptIn:(0,r.fromPromise)(i),provideTransactionCheck:(0,r.fromPromise)(c)},guards:{shouldOptIn:({context:t})=>!!t._internalState.appConfig&&!t._internalState.appConfig.transactionChecksEnabled&&!t._internalState.appConfig.transactionChecksOptIn,transactionChecksEnabled:({context:t})=>t._internalState.appConfig?.transactionChecksEnabled===!0}}).createMachine({id:"ProvisionTransactionCheckDeviceAction",initial:"OptInGate",context:({input:t})=>({input:t,intermediateValue:{requiredUserInteraction:a.UserInteractionRequired.None,step:s.signTransactionDAStateSteps.TRANSACTION_CHECKS_OPT_IN},_internalState:{appConfig:t.appConfig??null}}),states:{OptInGate:{always:[{target:"OptIn",guard:"shouldOptIn"},{target:"ProvideGate"}]},OptIn:{entry:(0,r.assign)({intermediateValue:()=>({requiredUserInteraction:a.UserInteractionRequired.Web3ChecksOptIn,step:s.signTransactionDAStateSteps.TRANSACTION_CHECKS_OPT_IN})}),invoke:{id:"transactionCheckOptIn",src:"transactionCheckOptIn",onDone:{target:"OptInResult",actions:[({event:t})=>{(0,a.isSuccessCommandResult)(t.output)||n.warn("[TransactionCheck] opt-in command returned error, proceeding without transaction-checks",{data:{error:t.output}})},(0,r.assign)({_internalState:({event:t,context:C})=>(0,a.isSuccessCommandResult)(t.output)?{appConfig:{...C._internalState.appConfig,transactionChecksEnabled:t.output.data.enabled}}:C._internalState})]},onError:{target:"OptInResult",actions:({event:t})=>n.info("[TransactionCheck] opt-in threw; proceeding without transaction-checks",{data:{error:String(t.error)}})}}},OptInResult:{entry:(0,r.assign)(({context:t})=>({intermediateValue:{requiredUserInteraction:a.UserInteractionRequired.None,step:s.signTransactionDAStateSteps.TRANSACTION_CHECKS_OPT_IN_RESULT,result:t._internalState.appConfig?.transactionChecksEnabled??!1}})),after:{0:{target:"ProvideGate"}}},ProvideGate:{always:[{target:"Provide",guard:"transactionChecksEnabled"},{target:"Done"}]},Provide:{entry:(0,r.assign)({intermediateValue:()=>({requiredUserInteraction:a.UserInteractionRequired.None,step:s.signTransactionDAStateSteps.TRANSACTION_CHECKS_PROVIDE})}),invoke:{id:"provideTransactionCheck",src:"provideTransactionCheck",input:({context:t})=>({derivationPath:t.input.derivationPath,transaction:t.input.transaction,contextModule:t.input.contextModule,serializedForTxCheck:t.input.serializedForTxCheck}),onDone:{target:"Done"},onError:{target:"Done",actions:({event:t})=>n.info("[TransactionCheck] provide threw; proceeding",{data:{error:String(t.error)}})}}},Done:{type:"final"}},output:({context:t})=>(0,d.Right)({transactionChecksEnabled:t._internalState.appConfig?.transactionChecksEnabled===!0})})}extractDependencies(e){return{transactionCheckOptIn:async()=>e.sendCommand(new h.TransactionCheckOptInCommand),provideTransactionCheck:async n=>new u.ProvideTransactionCheckTask(e,{derivationPath:n.input.derivationPath,transactionBytes:n.input.transaction,contextModule:n.input.contextModule,serializedTransactionForTransactionCheck:n.input.serializedForTxCheck,loggerFactory:this.getLoggerFactory(e)}).run()}}}0&&(module.exports={ProvisionTransactionCheckDeviceAction});
2
2
  //# sourceMappingURL=ProvisionTransactionCheckDeviceAction.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/device-action/ProvisionTransactionCheckDeviceAction.ts"],
4
- "sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n type CommandResult,\n type DeviceActionStateMachine,\n type InternalApi,\n isSuccessCommandResult,\n type StateMachineTypes,\n UserInteractionRequired,\n XStateDeviceAction,\n} from \"@ledgerhq/device-management-kit\";\nimport { Right } from \"purify-ts\";\nimport { assign, fromPromise, setup } from \"xstate\";\n\nimport {\n type ProvisionTransactionCheckDAError,\n type ProvisionTransactionCheckDAInput,\n type ProvisionTransactionCheckDAIntermediateValue,\n type ProvisionTransactionCheckDAInternalState,\n type ProvisionTransactionCheckDAOutput,\n} from \"@api/app-binder/ProvisionTransactionCheckDeviceActionTypes\";\nimport { signTransactionDAStateSteps } from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport {\n TransactionCheckOptInCommand,\n type TransactionCheckOptInCommandResponse,\n} from \"@internal/app-binder/command/TransactionCheckOptInCommand\";\nimport { type SolanaAppErrorCodes } from \"@internal/app-binder/command/utils/SolanaApplicationErrors\";\nimport { ProvideTransactionCheckTask } from \"@internal/app-binder/task/ProvideTransactionCheckTask\";\n\nexport type MachineDependencies = {\n readonly transactionCheckOptIn: () => Promise<\n CommandResult<TransactionCheckOptInCommandResponse, SolanaAppErrorCodes>\n >;\n readonly provideTransactionCheck: (arg0: {\n input: {\n derivationPath: string;\n transaction: Uint8Array;\n contextModule: ContextModule;\n serializedForTxCheck?: Uint8Array;\n };\n }) => Promise<void>;\n};\n\nexport class ProvisionTransactionCheckDeviceAction extends XStateDeviceAction<\n ProvisionTransactionCheckDAOutput,\n ProvisionTransactionCheckDAInput,\n ProvisionTransactionCheckDAError,\n ProvisionTransactionCheckDAIntermediateValue,\n ProvisionTransactionCheckDAInternalState\n> {\n makeStateMachine(\n internalApi: InternalApi,\n ): DeviceActionStateMachine<\n ProvisionTransactionCheckDAOutput,\n ProvisionTransactionCheckDAInput,\n ProvisionTransactionCheckDAError,\n ProvisionTransactionCheckDAIntermediateValue,\n ProvisionTransactionCheckDAInternalState\n > {\n type types = StateMachineTypes<\n ProvisionTransactionCheckDAOutput,\n ProvisionTransactionCheckDAInput,\n ProvisionTransactionCheckDAError,\n ProvisionTransactionCheckDAIntermediateValue,\n ProvisionTransactionCheckDAInternalState\n >;\n\n const { transactionCheckOptIn, provideTransactionCheck } =\n this.extractDependencies(internalApi);\n\n const logger = this.getLoggerFactory(internalApi)(\n \"ProvisionTransactionCheckDeviceAction\",\n );\n\n return setup({\n types: {\n input: {} as types[\"input\"],\n context: {} as types[\"context\"],\n output: {} as types[\"output\"],\n },\n actors: {\n transactionCheckOptIn: fromPromise(transactionCheckOptIn),\n provideTransactionCheck: fromPromise(provideTransactionCheck),\n },\n guards: {\n shouldOptIn: ({ context }) =>\n !!context._internalState.appConfig &&\n !context._internalState.appConfig.transactionChecksEnabled &&\n !context._internalState.appConfig.transactionChecksOptIn,\n transactionChecksEnabled: ({ context }) =>\n context._internalState.appConfig?.transactionChecksEnabled === true,\n },\n }).createMachine({\n id: \"ProvisionTransactionCheckDeviceAction\",\n initial: \"OptInGate\",\n context: ({ input }) => ({\n input,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.TRANSACTION_CHECKS_OPT_IN,\n },\n _internalState: {\n appConfig: input.appConfig ?? null,\n },\n }),\n states: {\n OptInGate: {\n always: [\n { target: \"OptIn\", guard: \"shouldOptIn\" },\n { target: \"ProvideGate\" },\n ],\n },\n OptIn: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.Web3ChecksOptIn,\n step: signTransactionDAStateSteps.TRANSACTION_CHECKS_OPT_IN,\n }),\n }),\n invoke: {\n id: \"transactionCheckOptIn\",\n src: \"transactionCheckOptIn\",\n onDone: {\n target: \"OptInResult\",\n actions: [\n ({ event }) => {\n if (!isSuccessCommandResult(event.output)) {\n logger.warn(\n \"[TransactionCheck] opt-in command returned error, proceeding without transaction-checks\",\n { data: { error: event.output } },\n );\n }\n },\n assign({\n _internalState: ({ event, context }) => {\n if (isSuccessCommandResult(event.output)) {\n return {\n appConfig: {\n ...context._internalState.appConfig!,\n transactionChecksEnabled: event.output.data.enabled,\n },\n };\n }\n return context._internalState;\n },\n }),\n ],\n },\n onError: {\n target: \"OptInResult\",\n actions: ({ event }) =>\n logger.info(\n \"[TransactionCheck] opt-in threw; proceeding without transaction-checks\",\n { data: { error: String(event.error) } },\n ),\n },\n },\n },\n OptInResult: {\n entry: assign(({ context }) => ({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.TRANSACTION_CHECKS_OPT_IN_RESULT,\n result:\n context._internalState.appConfig?.transactionChecksEnabled ??\n false,\n },\n })),\n // Zero-delay transition so the entry assign above is visible to\n // onSnapshot observers before the machine moves on.\n after: {\n 0: { target: \"ProvideGate\" },\n },\n },\n ProvideGate: {\n always: [\n { target: \"Provide\", guard: \"transactionChecksEnabled\" },\n { target: \"Done\" },\n ],\n },\n Provide: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.TRANSACTION_CHECKS_PROVIDE,\n }),\n }),\n invoke: {\n id: \"provideTransactionCheck\",\n src: \"provideTransactionCheck\",\n input: ({ context }) => ({\n derivationPath: context.input.derivationPath,\n transaction: context.input.transaction,\n contextModule: context.input.contextModule,\n serializedForTxCheck: context.input.serializedForTxCheck,\n }),\n onDone: { target: \"Done\" },\n onError: {\n target: \"Done\",\n actions: ({ event }) =>\n logger.info(\"[TransactionCheck] provide threw; proceeding\", {\n data: { error: String(event.error) },\n }),\n },\n },\n },\n Done: { type: \"final\" },\n },\n output: () => Right(undefined),\n });\n }\n\n extractDependencies(internalApi: InternalApi): MachineDependencies {\n const transactionCheckOptIn = async () =>\n internalApi.sendCommand(new TransactionCheckOptInCommand());\n\n const provideTransactionCheck = async (arg0: {\n input: {\n derivationPath: string;\n transaction: Uint8Array;\n contextModule: ContextModule;\n serializedForTxCheck?: Uint8Array;\n };\n }) =>\n new ProvideTransactionCheckTask(internalApi, {\n derivationPath: arg0.input.derivationPath,\n transactionBytes: arg0.input.transaction,\n contextModule: arg0.input.contextModule,\n serializedTransactionForTransactionCheck:\n arg0.input.serializedForTxCheck,\n loggerFactory: this.getLoggerFactory(internalApi),\n }).run();\n\n return { transactionCheckOptIn, provideTransactionCheck };\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n type CommandResult,\n type DeviceActionStateMachine,\n type InternalApi,\n isSuccessCommandResult,\n type StateMachineTypes,\n UserInteractionRequired,\n XStateDeviceAction,\n} from \"@ledgerhq/device-management-kit\";\nimport { Right } from \"purify-ts\";\nimport { assign, fromPromise, setup } from \"xstate\";\n\nimport {\n type ProvisionTransactionCheckDAError,\n type ProvisionTransactionCheckDAInput,\n type ProvisionTransactionCheckDAIntermediateValue,\n type ProvisionTransactionCheckDAInternalState,\n type ProvisionTransactionCheckDAOutput,\n} from \"@api/app-binder/ProvisionTransactionCheckDeviceActionTypes\";\nimport { signTransactionDAStateSteps } from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport {\n TransactionCheckOptInCommand,\n type TransactionCheckOptInCommandResponse,\n} from \"@internal/app-binder/command/TransactionCheckOptInCommand\";\nimport { type SolanaAppErrorCodes } from \"@internal/app-binder/command/utils/SolanaApplicationErrors\";\nimport { ProvideTransactionCheckTask } from \"@internal/app-binder/task/ProvideTransactionCheckTask\";\n\nexport type MachineDependencies = {\n readonly transactionCheckOptIn: () => Promise<\n CommandResult<TransactionCheckOptInCommandResponse, SolanaAppErrorCodes>\n >;\n readonly provideTransactionCheck: (arg0: {\n input: {\n derivationPath: string;\n transaction: Uint8Array;\n contextModule: ContextModule;\n serializedForTxCheck?: Uint8Array;\n };\n }) => Promise<void>;\n};\n\nexport class ProvisionTransactionCheckDeviceAction extends XStateDeviceAction<\n ProvisionTransactionCheckDAOutput,\n ProvisionTransactionCheckDAInput,\n ProvisionTransactionCheckDAError,\n ProvisionTransactionCheckDAIntermediateValue,\n ProvisionTransactionCheckDAInternalState\n> {\n makeStateMachine(\n internalApi: InternalApi,\n ): DeviceActionStateMachine<\n ProvisionTransactionCheckDAOutput,\n ProvisionTransactionCheckDAInput,\n ProvisionTransactionCheckDAError,\n ProvisionTransactionCheckDAIntermediateValue,\n ProvisionTransactionCheckDAInternalState\n > {\n type types = StateMachineTypes<\n ProvisionTransactionCheckDAOutput,\n ProvisionTransactionCheckDAInput,\n ProvisionTransactionCheckDAError,\n ProvisionTransactionCheckDAIntermediateValue,\n ProvisionTransactionCheckDAInternalState\n >;\n\n const { transactionCheckOptIn, provideTransactionCheck } =\n this.extractDependencies(internalApi);\n\n const logger = this.getLoggerFactory(internalApi)(\n \"ProvisionTransactionCheckDeviceAction\",\n );\n\n return setup({\n types: {\n input: {} as types[\"input\"],\n context: {} as types[\"context\"],\n output: {} as types[\"output\"],\n },\n actors: {\n transactionCheckOptIn: fromPromise(transactionCheckOptIn),\n provideTransactionCheck: fromPromise(provideTransactionCheck),\n },\n guards: {\n shouldOptIn: ({ context }) =>\n !!context._internalState.appConfig &&\n !context._internalState.appConfig.transactionChecksEnabled &&\n !context._internalState.appConfig.transactionChecksOptIn,\n transactionChecksEnabled: ({ context }) =>\n context._internalState.appConfig?.transactionChecksEnabled === true,\n },\n }).createMachine({\n id: \"ProvisionTransactionCheckDeviceAction\",\n initial: \"OptInGate\",\n context: ({ input }) => ({\n input,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.TRANSACTION_CHECKS_OPT_IN,\n },\n _internalState: {\n appConfig: input.appConfig ?? null,\n },\n }),\n states: {\n OptInGate: {\n always: [\n { target: \"OptIn\", guard: \"shouldOptIn\" },\n { target: \"ProvideGate\" },\n ],\n },\n OptIn: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.Web3ChecksOptIn,\n step: signTransactionDAStateSteps.TRANSACTION_CHECKS_OPT_IN,\n }),\n }),\n invoke: {\n id: \"transactionCheckOptIn\",\n src: \"transactionCheckOptIn\",\n onDone: {\n target: \"OptInResult\",\n actions: [\n ({ event }) => {\n if (!isSuccessCommandResult(event.output)) {\n logger.warn(\n \"[TransactionCheck] opt-in command returned error, proceeding without transaction-checks\",\n { data: { error: event.output } },\n );\n }\n },\n assign({\n _internalState: ({ event, context }) => {\n if (isSuccessCommandResult(event.output)) {\n return {\n appConfig: {\n ...context._internalState.appConfig!,\n transactionChecksEnabled: event.output.data.enabled,\n },\n };\n }\n return context._internalState;\n },\n }),\n ],\n },\n onError: {\n target: \"OptInResult\",\n actions: ({ event }) =>\n logger.info(\n \"[TransactionCheck] opt-in threw; proceeding without transaction-checks\",\n { data: { error: String(event.error) } },\n ),\n },\n },\n },\n OptInResult: {\n entry: assign(({ context }) => ({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.TRANSACTION_CHECKS_OPT_IN_RESULT,\n result:\n context._internalState.appConfig?.transactionChecksEnabled ??\n false,\n },\n })),\n // Zero-delay transition so the entry assign above is visible to\n // onSnapshot observers before the machine moves on.\n after: {\n 0: { target: \"ProvideGate\" },\n },\n },\n ProvideGate: {\n always: [\n { target: \"Provide\", guard: \"transactionChecksEnabled\" },\n { target: \"Done\" },\n ],\n },\n Provide: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.TRANSACTION_CHECKS_PROVIDE,\n }),\n }),\n invoke: {\n id: \"provideTransactionCheck\",\n src: \"provideTransactionCheck\",\n input: ({ context }) => ({\n derivationPath: context.input.derivationPath,\n transaction: context.input.transaction,\n contextModule: context.input.contextModule,\n serializedForTxCheck: context.input.serializedForTxCheck,\n }),\n onDone: { target: \"Done\" },\n onError: {\n target: \"Done\",\n actions: ({ event }) =>\n logger.info(\"[TransactionCheck] provide threw; proceeding\", {\n data: { error: String(event.error) },\n }),\n },\n },\n },\n Done: { type: \"final\" },\n },\n output: ({ context }) =>\n Right({\n transactionChecksEnabled:\n context._internalState.appConfig?.transactionChecksEnabled === true,\n }),\n });\n }\n\n extractDependencies(internalApi: InternalApi): MachineDependencies {\n const transactionCheckOptIn = async () =>\n internalApi.sendCommand(new TransactionCheckOptInCommand());\n\n const provideTransactionCheck = async (arg0: {\n input: {\n derivationPath: string;\n transaction: Uint8Array;\n contextModule: ContextModule;\n serializedForTxCheck?: Uint8Array;\n };\n }) =>\n new ProvideTransactionCheckTask(internalApi, {\n derivationPath: arg0.input.derivationPath,\n transactionBytes: arg0.input.transaction,\n contextModule: arg0.input.contextModule,\n serializedTransactionForTransactionCheck:\n arg0.input.serializedForTxCheck,\n loggerFactory: this.getLoggerFactory(internalApi),\n }).run();\n\n return { transactionCheckOptIn, provideTransactionCheck };\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["ProvisionTransactionCheckDeviceAction_exports", "__export", "ProvisionTransactionCheckDeviceAction", "__toCommonJS", "import_device_management_kit", "import_purify_ts", "import_xstate", "import_SignTransactionDeviceActionTypes", "import_TransactionCheckOptInCommand", "import_ProvideTransactionCheckTask", "internalApi", "transactionCheckOptIn", "provideTransactionCheck", "logger", "context", "input", "event", "arg0"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var a=require("@ledgerhq/device-management-kit"),e=require("vitest"),l=require("../../../api/app-binder/SignTransactionDeviceActionTypes"),C=require("../../../api/model/PublicKeyDisplayMode"),v=require("./__test-utils__/makeInternalApi"),m=require("./ProvisionTransactionCheckDeviceAction");const A="44'/501'/0'/0'",T=new Uint8Array([222,173,190,239]),y={getContexts:e.vi.fn()};function d(i={}){return{blindSigningEnabled:!0,pubKeyDisplayMode:C.PublicKeyDisplayMode.LONG,version:"1.16.0",transactionChecksEnabled:!1,transactionChecksOptIn:!1,...i}}let h,r,s;function D(){return{transactionCheckOptIn:r,provideTransactionCheck:s}}function c(i,t,n){const o=new m.ProvisionTransactionCheckDeviceAction({input:i});e.vi.spyOn(o,"extractDependencies").mockReturnValue(D());const{observable:f}=o._execute(h),u=[];f.subscribe({next:k=>u.push(k),error:n,complete:()=>t(u)})}function b(i){const t=[];for(const n of i){if(n.status!==a.DeviceActionStatus.Pending)continue;const o=n.intermediateValue.step;o&&t[t.length-1]!==o&&t.push(o)}return t}const p={derivationPath:A,transaction:T,contextModule:y,appConfig:d()};(0,e.describe)("ProvisionTransactionCheckDeviceAction",()=>{(0,e.beforeEach)(()=>{h=(0,v.makeDeviceActionInternalApiMock)(),r=e.vi.fn().mockResolvedValue((0,a.CommandResultFactory)({data:{enabled:!0}})),s=e.vi.fn().mockResolvedValue(void 0)}),(0,e.it)("not opted-in: runs opt-in, then provide when enabled, then completes",()=>new Promise((i,t)=>{c(p,n=>{try{(0,e.expect)(r).toHaveBeenCalled(),(0,e.expect)(s).toHaveBeenCalled();const o=b(n);(0,e.expect)(o).toContain(l.signTransactionDAStateSteps.TRANSACTION_CHECKS_OPT_IN),(0,e.expect)(o).toContain(l.signTransactionDAStateSteps.TRANSACTION_CHECKS_PROVIDE),(0,e.expect)(o.indexOf(l.signTransactionDAStateSteps.TRANSACTION_CHECKS_OPT_IN)).toBeLessThan(o.indexOf(l.signTransactionDAStateSteps.TRANSACTION_CHECKS_PROVIDE)),(0,e.expect)(n[n.length-1].status).toBe(a.DeviceActionStatus.Completed),i()}catch(o){t(o)}},t)})),(0,e.it)("not opted-in + opt-in returns disabled: skips provide",()=>new Promise((i,t)=>{r.mockResolvedValue((0,a.CommandResultFactory)({data:{enabled:!1}})),c(p,n=>{try{(0,e.expect)(r).toHaveBeenCalled(),(0,e.expect)(s).not.toHaveBeenCalled(),(0,e.expect)(n[n.length-1].status).toBe(a.DeviceActionStatus.Completed),i()}catch(o){t(o)}},t)})),(0,e.it)("already enabled: skips opt-in, runs provide directly",()=>new Promise((i,t)=>{c({...p,appConfig:d({transactionChecksEnabled:!0,transactionChecksOptIn:!0})},n=>{try{(0,e.expect)(r).not.toHaveBeenCalled(),(0,e.expect)(s).toHaveBeenCalled(),(0,e.expect)(n[n.length-1].status).toBe(a.DeviceActionStatus.Completed),i()}catch(o){t(o)}},t)})),(0,e.it)("already opted-in but not enabled: skips both opt-in and provide",()=>new Promise((i,t)=>{c({...p,appConfig:d({transactionChecksEnabled:!1,transactionChecksOptIn:!0})},n=>{try{(0,e.expect)(r).not.toHaveBeenCalled(),(0,e.expect)(s).not.toHaveBeenCalled(),(0,e.expect)(n[n.length-1].status).toBe(a.DeviceActionStatus.Completed),i()}catch(o){t(o)}},t)})),(0,e.it)("opt-in throws: still completes without provide (best-effort)",()=>new Promise((i,t)=>{r.mockRejectedValue(new Error("transport error")),c(p,n=>{try{(0,e.expect)(r).toHaveBeenCalled(),(0,e.expect)(s).not.toHaveBeenCalled(),(0,e.expect)(n[n.length-1].status).toBe(a.DeviceActionStatus.Completed),i()}catch(o){t(o)}},t)})),(0,e.it)("provide throws: still completes (best-effort)",()=>new Promise((i,t)=>{s.mockRejectedValue(new Error("provide error")),c({...p,appConfig:d({transactionChecksEnabled:!0,transactionChecksOptIn:!0})},n=>{try{(0,e.expect)(s).toHaveBeenCalled(),(0,e.expect)(n[n.length-1].status).toBe(a.DeviceActionStatus.Completed),i()}catch(o){t(o)}},t)}))});
1
+ "use strict";var a=require("@ledgerhq/device-management-kit"),e=require("vitest"),l=require("../../../api/app-binder/SignTransactionDeviceActionTypes"),C=require("../../../api/model/PublicKeyDisplayMode"),v=require("./__test-utils__/makeInternalApi"),h=require("./ProvisionTransactionCheckDeviceAction");const A="44'/501'/0'/0'",T=new Uint8Array([222,173,190,239]),D={getContexts:e.vi.fn()};function d(i={}){return{blindSigningEnabled:!0,pubKeyDisplayMode:C.PublicKeyDisplayMode.LONG,version:"1.16.0",transactionChecksEnabled:!1,transactionChecksOptIn:!1,...i}}let m,r,s;function P(){return{transactionCheckOptIn:r,provideTransactionCheck:s}}function c(i,t,n){const o=new h.ProvisionTransactionCheckDeviceAction({input:i});e.vi.spyOn(o,"extractDependencies").mockReturnValue(P());const{observable:f}=o._execute(m),u=[];f.subscribe({next:k=>u.push(k),error:n,complete:()=>t(u)})}function y(i){const t=[];for(const n of i){if(n.status!==a.DeviceActionStatus.Pending)continue;const o=n.intermediateValue.step;o&&t[t.length-1]!==o&&t.push(o)}return t}const p={derivationPath:A,transaction:T,contextModule:D,appConfig:d()};(0,e.describe)("ProvisionTransactionCheckDeviceAction",()=>{(0,e.beforeEach)(()=>{m=(0,v.makeDeviceActionInternalApiMock)(),r=e.vi.fn().mockResolvedValue((0,a.CommandResultFactory)({data:{enabled:!0}})),s=e.vi.fn().mockResolvedValue(void 0)}),(0,e.it)("not opted-in: runs opt-in, then provide when enabled, then completes",()=>new Promise((i,t)=>{c(p,n=>{try{(0,e.expect)(r).toHaveBeenCalled(),(0,e.expect)(s).toHaveBeenCalled();const o=y(n);(0,e.expect)(o).toContain(l.signTransactionDAStateSteps.TRANSACTION_CHECKS_OPT_IN),(0,e.expect)(o).toContain(l.signTransactionDAStateSteps.TRANSACTION_CHECKS_PROVIDE),(0,e.expect)(o.indexOf(l.signTransactionDAStateSteps.TRANSACTION_CHECKS_OPT_IN)).toBeLessThan(o.indexOf(l.signTransactionDAStateSteps.TRANSACTION_CHECKS_PROVIDE)),(0,e.expect)(n[n.length-1]).toEqual({status:a.DeviceActionStatus.Completed,output:{transactionChecksEnabled:!0}}),i()}catch(o){t(o)}},t)})),(0,e.it)("not opted-in + opt-in returns disabled: skips provide",()=>new Promise((i,t)=>{r.mockResolvedValue((0,a.CommandResultFactory)({data:{enabled:!1}})),c(p,n=>{try{(0,e.expect)(r).toHaveBeenCalled(),(0,e.expect)(s).not.toHaveBeenCalled(),(0,e.expect)(n[n.length-1]).toEqual({status:a.DeviceActionStatus.Completed,output:{transactionChecksEnabled:!1}}),i()}catch(o){t(o)}},t)})),(0,e.it)("already enabled: skips opt-in, runs provide directly",()=>new Promise((i,t)=>{c({...p,appConfig:d({transactionChecksEnabled:!0,transactionChecksOptIn:!0})},n=>{try{(0,e.expect)(r).not.toHaveBeenCalled(),(0,e.expect)(s).toHaveBeenCalled(),(0,e.expect)(n[n.length-1].status).toBe(a.DeviceActionStatus.Completed),i()}catch(o){t(o)}},t)})),(0,e.it)("already opted-in but not enabled: skips both opt-in and provide",()=>new Promise((i,t)=>{c({...p,appConfig:d({transactionChecksEnabled:!1,transactionChecksOptIn:!0})},n=>{try{(0,e.expect)(r).not.toHaveBeenCalled(),(0,e.expect)(s).not.toHaveBeenCalled(),(0,e.expect)(n[n.length-1].status).toBe(a.DeviceActionStatus.Completed),i()}catch(o){t(o)}},t)})),(0,e.it)("opt-in throws: still completes without provide (best-effort)",()=>new Promise((i,t)=>{r.mockRejectedValue(new Error("transport error")),c(p,n=>{try{(0,e.expect)(r).toHaveBeenCalled(),(0,e.expect)(s).not.toHaveBeenCalled(),(0,e.expect)(n[n.length-1].status).toBe(a.DeviceActionStatus.Completed),i()}catch(o){t(o)}},t)})),(0,e.it)("provide throws: still completes (best-effort)",()=>new Promise((i,t)=>{s.mockRejectedValue(new Error("provide error")),c({...p,appConfig:d({transactionChecksEnabled:!0,transactionChecksOptIn:!0})},n=>{try{(0,e.expect)(s).toHaveBeenCalled(),(0,e.expect)(n[n.length-1].status).toBe(a.DeviceActionStatus.Completed),i()}catch(o){t(o)}},t)}))});
2
2
  //# sourceMappingURL=ProvisionTransactionCheckDeviceAction.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/device-action/ProvisionTransactionCheckDeviceAction.test.ts"],
4
- "sourcesContent": ["import {\n CommandResultFactory,\n type DeviceActionState,\n DeviceActionStatus,\n} from \"@ledgerhq/device-management-kit\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport {\n type ProvisionTransactionCheckDAError,\n type ProvisionTransactionCheckDAInput,\n type ProvisionTransactionCheckDAIntermediateValue,\n} from \"@api/app-binder/ProvisionTransactionCheckDeviceActionTypes\";\nimport { signTransactionDAStateSteps } from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { type AppConfiguration } from \"@api/model/AppConfiguration\";\nimport { PublicKeyDisplayMode } from \"@api/model/PublicKeyDisplayMode\";\n\nimport { makeDeviceActionInternalApiMock } from \"./__test-utils__/makeInternalApi\";\nimport { ProvisionTransactionCheckDeviceAction } from \"./ProvisionTransactionCheckDeviceAction\";\n\nconst defaultDerivation = \"44'/501'/0'/0'\";\nconst exampleTx = new Uint8Array([0xde, 0xad, 0xbe, 0xef]);\n\nconst contextModuleStub = { getContexts: vi.fn() } as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n\nfunction makeAppConfig(\n overrides: Partial<AppConfiguration> = {},\n): AppConfiguration {\n return {\n blindSigningEnabled: true,\n pubKeyDisplayMode: PublicKeyDisplayMode.LONG,\n version: \"1.16.0\",\n transactionChecksEnabled: false,\n transactionChecksOptIn: false,\n ...overrides,\n };\n}\n\nlet apiMock: ReturnType<typeof makeDeviceActionInternalApiMock>;\nlet optInMock: ReturnType<typeof vi.fn>;\nlet provideMock: ReturnType<typeof vi.fn>;\n\nfunction extractDeps() {\n return {\n transactionCheckOptIn: optInMock,\n provideTransactionCheck: provideMock,\n };\n}\n\nfunction run(\n input: ProvisionTransactionCheckDAInput,\n onComplete: (\n states: DeviceActionState<\n void,\n ProvisionTransactionCheckDAError,\n ProvisionTransactionCheckDAIntermediateValue\n >[],\n ) => void,\n onError: (e: unknown) => void,\n) {\n const action = new ProvisionTransactionCheckDeviceAction({ input });\n vi.spyOn(action, \"extractDependencies\").mockReturnValue(extractDeps() as any); // eslint-disable-line @typescript-eslint/no-explicit-any\n const { observable } = action._execute(apiMock);\n const states: DeviceActionState<\n void,\n ProvisionTransactionCheckDAError,\n ProvisionTransactionCheckDAIntermediateValue\n >[] = [];\n observable.subscribe({\n next: (s) => states.push(s),\n error: onError,\n complete: () => onComplete(states),\n });\n}\n\nfunction stepSequence(\n states: DeviceActionState<\n void,\n ProvisionTransactionCheckDAError,\n ProvisionTransactionCheckDAIntermediateValue\n >[],\n): string[] {\n const steps: string[] = [];\n for (const s of states) {\n if (s.status !== DeviceActionStatus.Pending) continue;\n const step = (s.intermediateValue as { step?: string }).step;\n if (step && steps[steps.length - 1] !== step) steps.push(step);\n }\n return steps;\n}\n\nconst baseInput: ProvisionTransactionCheckDAInput = {\n derivationPath: defaultDerivation,\n transaction: exampleTx,\n contextModule: contextModuleStub,\n appConfig: makeAppConfig(),\n};\n\ndescribe(\"ProvisionTransactionCheckDeviceAction\", () => {\n beforeEach(() => {\n apiMock = makeDeviceActionInternalApiMock();\n optInMock = vi\n .fn()\n .mockResolvedValue(CommandResultFactory({ data: { enabled: true } }));\n provideMock = vi.fn().mockResolvedValue(undefined);\n });\n\n it(\"not opted-in: runs opt-in, then provide when enabled, then completes\", () =>\n new Promise<void>((resolve, reject) => {\n run(\n baseInput, // transactionChecksEnabled: false, transactionChecksOptIn: false\n (states) => {\n try {\n expect(optInMock).toHaveBeenCalled();\n // opt-in returned enabled: true, so provide runs.\n expect(provideMock).toHaveBeenCalled();\n const steps = stepSequence(states);\n expect(steps).toContain(\n signTransactionDAStateSteps.TRANSACTION_CHECKS_OPT_IN,\n );\n expect(steps).toContain(\n signTransactionDAStateSteps.TRANSACTION_CHECKS_PROVIDE,\n );\n expect(\n steps.indexOf(\n signTransactionDAStateSteps.TRANSACTION_CHECKS_OPT_IN,\n ),\n ).toBeLessThan(\n steps.indexOf(\n signTransactionDAStateSteps.TRANSACTION_CHECKS_PROVIDE,\n ),\n );\n expect(states[states.length - 1]!.status).toBe(\n DeviceActionStatus.Completed,\n );\n resolve();\n } catch (e) {\n reject(e);\n }\n },\n reject,\n );\n }));\n\n it(\"not opted-in + opt-in returns disabled: skips provide\", () =>\n new Promise<void>((resolve, reject) => {\n optInMock.mockResolvedValue(\n CommandResultFactory({ data: { enabled: false } }),\n );\n run(\n baseInput,\n (states) => {\n try {\n expect(optInMock).toHaveBeenCalled();\n expect(provideMock).not.toHaveBeenCalled();\n expect(states[states.length - 1]!.status).toBe(\n DeviceActionStatus.Completed,\n );\n resolve();\n } catch (e) {\n reject(e);\n }\n },\n reject,\n );\n }));\n\n it(\"already enabled: skips opt-in, runs provide directly\", () =>\n new Promise<void>((resolve, reject) => {\n run(\n {\n ...baseInput,\n appConfig: makeAppConfig({\n transactionChecksEnabled: true,\n transactionChecksOptIn: true,\n }),\n },\n (states) => {\n try {\n expect(optInMock).not.toHaveBeenCalled();\n expect(provideMock).toHaveBeenCalled();\n expect(states[states.length - 1]!.status).toBe(\n DeviceActionStatus.Completed,\n );\n resolve();\n } catch (e) {\n reject(e);\n }\n },\n reject,\n );\n }));\n\n it(\"already opted-in but not enabled: skips both opt-in and provide\", () =>\n new Promise<void>((resolve, reject) => {\n run(\n {\n ...baseInput,\n appConfig: makeAppConfig({\n transactionChecksEnabled: false,\n transactionChecksOptIn: true,\n }),\n },\n (states) => {\n try {\n expect(optInMock).not.toHaveBeenCalled();\n expect(provideMock).not.toHaveBeenCalled();\n expect(states[states.length - 1]!.status).toBe(\n DeviceActionStatus.Completed,\n );\n resolve();\n } catch (e) {\n reject(e);\n }\n },\n reject,\n );\n }));\n\n it(\"opt-in throws: still completes without provide (best-effort)\", () =>\n new Promise<void>((resolve, reject) => {\n optInMock.mockRejectedValue(new Error(\"transport error\"));\n run(\n baseInput,\n (states) => {\n try {\n expect(optInMock).toHaveBeenCalled();\n expect(provideMock).not.toHaveBeenCalled();\n expect(states[states.length - 1]!.status).toBe(\n DeviceActionStatus.Completed,\n );\n resolve();\n } catch (e) {\n reject(e);\n }\n },\n reject,\n );\n }));\n\n it(\"provide throws: still completes (best-effort)\", () =>\n new Promise<void>((resolve, reject) => {\n provideMock.mockRejectedValue(new Error(\"provide error\"));\n run(\n {\n ...baseInput,\n appConfig: makeAppConfig({\n transactionChecksEnabled: true,\n transactionChecksOptIn: true,\n }),\n },\n (states) => {\n try {\n expect(provideMock).toHaveBeenCalled();\n expect(states[states.length - 1]!.status).toBe(\n DeviceActionStatus.Completed,\n );\n resolve();\n } catch (e) {\n reject(e);\n }\n },\n reject,\n );\n }));\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {\n CommandResultFactory,\n type DeviceActionState,\n DeviceActionStatus,\n} from \"@ledgerhq/device-management-kit\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport {\n type ProvisionTransactionCheckDAError,\n type ProvisionTransactionCheckDAInput,\n type ProvisionTransactionCheckDAIntermediateValue,\n type ProvisionTransactionCheckDAOutput,\n} from \"@api/app-binder/ProvisionTransactionCheckDeviceActionTypes\";\nimport { signTransactionDAStateSteps } from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { type AppConfiguration } from \"@api/model/AppConfiguration\";\nimport { PublicKeyDisplayMode } from \"@api/model/PublicKeyDisplayMode\";\n\nimport { makeDeviceActionInternalApiMock } from \"./__test-utils__/makeInternalApi\";\nimport { ProvisionTransactionCheckDeviceAction } from \"./ProvisionTransactionCheckDeviceAction\";\n\nconst defaultDerivation = \"44'/501'/0'/0'\";\nconst exampleTx = new Uint8Array([0xde, 0xad, 0xbe, 0xef]);\n\nconst contextModuleStub = { getContexts: vi.fn() } as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n\nfunction makeAppConfig(\n overrides: Partial<AppConfiguration> = {},\n): AppConfiguration {\n return {\n blindSigningEnabled: true,\n pubKeyDisplayMode: PublicKeyDisplayMode.LONG,\n version: \"1.16.0\",\n transactionChecksEnabled: false,\n transactionChecksOptIn: false,\n ...overrides,\n };\n}\n\nlet apiMock: ReturnType<typeof makeDeviceActionInternalApiMock>;\nlet optInMock: ReturnType<typeof vi.fn>;\nlet provideMock: ReturnType<typeof vi.fn>;\n\nfunction extractDeps() {\n return {\n transactionCheckOptIn: optInMock,\n provideTransactionCheck: provideMock,\n };\n}\n\nfunction run(\n input: ProvisionTransactionCheckDAInput,\n onComplete: (\n states: DeviceActionState<\n ProvisionTransactionCheckDAOutput,\n ProvisionTransactionCheckDAError,\n ProvisionTransactionCheckDAIntermediateValue\n >[],\n ) => void,\n onError: (e: unknown) => void,\n) {\n const action = new ProvisionTransactionCheckDeviceAction({ input });\n vi.spyOn(action, \"extractDependencies\").mockReturnValue(extractDeps() as any); // eslint-disable-line @typescript-eslint/no-explicit-any\n const { observable } = action._execute(apiMock);\n const states: DeviceActionState<\n ProvisionTransactionCheckDAOutput,\n ProvisionTransactionCheckDAError,\n ProvisionTransactionCheckDAIntermediateValue\n >[] = [];\n observable.subscribe({\n next: (s) => states.push(s),\n error: onError,\n complete: () => onComplete(states),\n });\n}\n\nfunction stepSequence(\n states: DeviceActionState<\n ProvisionTransactionCheckDAOutput,\n ProvisionTransactionCheckDAError,\n ProvisionTransactionCheckDAIntermediateValue\n >[],\n): string[] {\n const steps: string[] = [];\n for (const s of states) {\n if (s.status !== DeviceActionStatus.Pending) continue;\n const step = (s.intermediateValue as { step?: string }).step;\n if (step && steps[steps.length - 1] !== step) steps.push(step);\n }\n return steps;\n}\n\nconst baseInput: ProvisionTransactionCheckDAInput = {\n derivationPath: defaultDerivation,\n transaction: exampleTx,\n contextModule: contextModuleStub,\n appConfig: makeAppConfig(),\n};\n\ndescribe(\"ProvisionTransactionCheckDeviceAction\", () => {\n beforeEach(() => {\n apiMock = makeDeviceActionInternalApiMock();\n optInMock = vi\n .fn()\n .mockResolvedValue(CommandResultFactory({ data: { enabled: true } }));\n provideMock = vi.fn().mockResolvedValue(undefined);\n });\n\n it(\"not opted-in: runs opt-in, then provide when enabled, then completes\", () =>\n new Promise<void>((resolve, reject) => {\n run(\n baseInput, // transactionChecksEnabled: false, transactionChecksOptIn: false\n (states) => {\n try {\n expect(optInMock).toHaveBeenCalled();\n // opt-in returned enabled: true, so provide runs.\n expect(provideMock).toHaveBeenCalled();\n const steps = stepSequence(states);\n expect(steps).toContain(\n signTransactionDAStateSteps.TRANSACTION_CHECKS_OPT_IN,\n );\n expect(steps).toContain(\n signTransactionDAStateSteps.TRANSACTION_CHECKS_PROVIDE,\n );\n expect(\n steps.indexOf(\n signTransactionDAStateSteps.TRANSACTION_CHECKS_OPT_IN,\n ),\n ).toBeLessThan(\n steps.indexOf(\n signTransactionDAStateSteps.TRANSACTION_CHECKS_PROVIDE,\n ),\n );\n // The opt-in outcome is surfaced so the parent can re-provision\n // without prompting again.\n expect(states[states.length - 1]).toEqual({\n status: DeviceActionStatus.Completed,\n output: { transactionChecksEnabled: true },\n });\n resolve();\n } catch (e) {\n reject(e);\n }\n },\n reject,\n );\n }));\n\n it(\"not opted-in + opt-in returns disabled: skips provide\", () =>\n new Promise<void>((resolve, reject) => {\n optInMock.mockResolvedValue(\n CommandResultFactory({ data: { enabled: false } }),\n );\n run(\n baseInput,\n (states) => {\n try {\n expect(optInMock).toHaveBeenCalled();\n expect(provideMock).not.toHaveBeenCalled();\n expect(states[states.length - 1]).toEqual({\n status: DeviceActionStatus.Completed,\n output: { transactionChecksEnabled: false },\n });\n resolve();\n } catch (e) {\n reject(e);\n }\n },\n reject,\n );\n }));\n\n it(\"already enabled: skips opt-in, runs provide directly\", () =>\n new Promise<void>((resolve, reject) => {\n run(\n {\n ...baseInput,\n appConfig: makeAppConfig({\n transactionChecksEnabled: true,\n transactionChecksOptIn: true,\n }),\n },\n (states) => {\n try {\n expect(optInMock).not.toHaveBeenCalled();\n expect(provideMock).toHaveBeenCalled();\n expect(states[states.length - 1]!.status).toBe(\n DeviceActionStatus.Completed,\n );\n resolve();\n } catch (e) {\n reject(e);\n }\n },\n reject,\n );\n }));\n\n it(\"already opted-in but not enabled: skips both opt-in and provide\", () =>\n new Promise<void>((resolve, reject) => {\n run(\n {\n ...baseInput,\n appConfig: makeAppConfig({\n transactionChecksEnabled: false,\n transactionChecksOptIn: true,\n }),\n },\n (states) => {\n try {\n expect(optInMock).not.toHaveBeenCalled();\n expect(provideMock).not.toHaveBeenCalled();\n expect(states[states.length - 1]!.status).toBe(\n DeviceActionStatus.Completed,\n );\n resolve();\n } catch (e) {\n reject(e);\n }\n },\n reject,\n );\n }));\n\n it(\"opt-in throws: still completes without provide (best-effort)\", () =>\n new Promise<void>((resolve, reject) => {\n optInMock.mockRejectedValue(new Error(\"transport error\"));\n run(\n baseInput,\n (states) => {\n try {\n expect(optInMock).toHaveBeenCalled();\n expect(provideMock).not.toHaveBeenCalled();\n expect(states[states.length - 1]!.status).toBe(\n DeviceActionStatus.Completed,\n );\n resolve();\n } catch (e) {\n reject(e);\n }\n },\n reject,\n );\n }));\n\n it(\"provide throws: still completes (best-effort)\", () =>\n new Promise<void>((resolve, reject) => {\n provideMock.mockRejectedValue(new Error(\"provide error\"));\n run(\n {\n ...baseInput,\n appConfig: makeAppConfig({\n transactionChecksEnabled: true,\n transactionChecksOptIn: true,\n }),\n },\n (states) => {\n try {\n expect(provideMock).toHaveBeenCalled();\n expect(states[states.length - 1]!.status).toBe(\n DeviceActionStatus.Completed,\n );\n resolve();\n } catch (e) {\n reject(e);\n }\n },\n reject,\n );\n }));\n});\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_device_management_kit", "import_vitest", "import_SignTransactionDeviceActionTypes", "import_PublicKeyDisplayMode", "import_makeInternalApi", "import_ProvisionTransactionCheckDeviceAction", "defaultDerivation", "exampleTx", "contextModuleStub", "makeAppConfig", "overrides", "apiMock", "optInMock", "provideMock", "extractDeps", "run", "input", "onComplete", "onError", "action", "observable", "states", "s", "stepSequence", "steps", "step", "baseInput", "resolve", "reject", "e"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var d=Object.defineProperty;var E=Object.getOwnPropertyDescriptor;var B=Object.getOwnPropertyNames;var F=Object.prototype.hasOwnProperty;var G=(o,n)=>{for(var c in n)d(o,c,{get:n[c],enumerable:!0})},O=(o,n,c,l)=>{if(n&&typeof n=="object"||typeof n=="function")for(let s of B(n))!F.call(o,s)&&s!==c&&d(o,s,{get:()=>n[s],enumerable:!(l=E(n,s))||l.enumerable});return o};var z=o=>O(d({},"__esModule",{value:!0}),o);var N={};G(N,{SignTransactionDeviceAction:()=>w});module.exports=z(N);var i=require("@ledgerhq/device-management-kit"),u=require("purify-ts"),a=require("xstate"),p=require("../../../api/app-binder/SignTransactionDeviceActionTypes"),f=require("../../app-binder/command/GetAppConfigurationCommand"),h=require("../../app-binder/constants"),y=require("../../app-binder/services/TransactionInputNormaliser"),k=require("../../app-binder/SolanaApplicationResolver"),A=require("../../app-binder/task/SolanaSigningReportTask"),v=require("./ProvisionBasicClearSignDeviceAction"),D=require("./ProvisionGenericClearSignDeviceAction"),P=require("./ProvisionTransactionCheckDeviceAction"),_=require("./SignBasicClearSignDeviceAction"),I=require("./SignGenericClearSignDeviceAction");function T(o){return o.transactionOptions?.solanaRPCURL??o.solanaRPCURL}class w extends i.XStateDeviceAction{makeStateMachine(n){const{normalizeTransaction:c,getAppConfig:l,reportSign:s}=this.extractDependencies(n),g=this.getLoggerFactory(n),M=g("SignTransactionDeviceAction"),R=this.input.disabledFeatures?new Set(this.input.disabledFeatures):void 0,S=(e,t)=>(0,k.isSolanaSignerFeatureSupported)(n,e,t,R),m=e=>{const t=T(e.input),r=e.input.transactionOptions?.fetchBlockhash,C=!!!e.input.transactionOptions?.transactionResolutionContext?.templateId&&e.input.transactionOptions?.delayed===!0&&!!(t||r)&&S("delayedSigning",e._internalState.appConfig);return{rpcUrl:C?t:void 0,fetchBlockhash:C?r:void 0}};return(0,a.setup)({types:{input:{},context:{},output:{}},actors:{normalizeTransaction:(0,a.fromPromise)(c),reportSign:(0,a.fromPromise)(s),openAppStateMachine:new i.OpenAppDeviceAction({input:{appName:h.APP_NAME}}).makeStateMachine(n),getAppConfig:(0,a.fromPromise)(l),transactionCheckStateMachine:new P.ProvisionTransactionCheckDeviceAction({input:{derivationPath:this.input.derivationPath,transaction:this.input.transaction,contextModule:this.input.contextModule},loggerFactory:this.getLoggerFactory(n)}).makeStateMachine(n),provisionGenericClearSignStateMachine:new D.ProvisionGenericClearSignDeviceAction({input:{derivationPath:this.input.derivationPath,transaction:this.input.transaction,contextModule:this.input.contextModule},loggerFactory:this.getLoggerFactory(n)}).makeStateMachine(n),provisionBasicClearSignStateMachine:new v.ProvisionBasicClearSignDeviceAction({input:{derivationPath:this.input.derivationPath,transaction:this.input.transaction,contextModule:this.input.contextModule},loggerFactory:this.getLoggerFactory(n)}).makeStateMachine(n),signGenericClearSignStateMachine:new I.SignGenericClearSignDeviceAction({input:{derivationPath:this.input.derivationPath,transaction:this.input.transaction},loggerFactory:this.getLoggerFactory(n)}).makeStateMachine(n),signBasicClearSignStateMachine:new _.SignBasicClearSignDeviceAction({input:{derivationPath:this.input.derivationPath,transaction:this.input.transaction},loggerFactory:this.getLoggerFactory(n)}).makeStateMachine(n)},guards:{noInternalError:({context:e})=>e._internalState.error===null,skipOpenApp:({context:e})=>e.input.transactionOptions?.skipOpenApp||!1,isTransactionChecksSupported:({context:e})=>S("transactionChecks",e._internalState.appConfig),isGenericClearSignAvailable:({context:e})=>S("genericClearSign",e._internalState.appConfig),isClearSignPrepared:({context:e})=>e._internalState.clearSignPrepared,hasSignature:({context:e})=>e._internalState.signature!==null},actions:{assignErrorFromEvent:(0,a.assign)({_internalState:e=>({...e.context._internalState,error:new i.UnknownDAError(e.event.error instanceof Error?e.event.error.message:String(e.event.error))})})}}).createMachine({id:"SignTransactionDeviceAction",initial:"NormalizeTransaction",context:({input:e})=>({input:e,intermediateValue:{requiredUserInteraction:i.UserInteractionRequired.None,step:p.signTransactionDAStateSteps.OPEN_APP},_internalState:{error:null,signature:null,appConfig:null,messageBytes:this.input.transaction,serializedForTxCheck:void 0,clearSignPrepared:!1,unrecognizedProgramIds:[],staleDescriptor:!1}}),states:{NormalizeTransaction:{entry:(0,a.assign)({intermediateValue:({context:e})=>({requiredUserInteraction:i.UserInteractionRequired.None,step:e.input.transactionOptions?.skipOpenApp?p.signTransactionDAStateSteps.GET_APP_CONFIG:p.signTransactionDAStateSteps.OPEN_APP})}),invoke:{id:"normalizeTransaction",src:"normalizeTransaction",onDone:[{target:"GetAppConfig",guard:"skipOpenApp",actions:(0,a.assign)({_internalState:({event:e,context:t})=>({...t._internalState,messageBytes:e.output.messageBytes,serializedForTxCheck:e.output.serializedForTxCheck})})},{target:"OpenAppDeviceAction",actions:(0,a.assign)({_internalState:({event:e,context:t})=>({...t._internalState,messageBytes:e.output.messageBytes,serializedForTxCheck:e.output.serializedForTxCheck})})}]}},OpenAppDeviceAction:{entry:(0,a.assign)({intermediateValue:()=>({requiredUserInteraction:i.UserInteractionRequired.None,step:p.signTransactionDAStateSteps.OPEN_APP})}),invoke:{id:"openAppStateMachine",src:"openAppStateMachine",input:()=>({appName:h.APP_NAME}),onSnapshot:{actions:(0,a.assign)({intermediateValue:({event:e})=>({...e.snapshot.context.intermediateValue,step:p.signTransactionDAStateSteps.OPEN_APP})})},onDone:{target:"OpenAppResultCheck",actions:(0,a.assign)({_internalState:({event:e,context:t})=>e.output.caseOf({Right:()=>t._internalState,Left:r=>({...t._internalState,error:r})})})}}},OpenAppResultCheck:{always:[{target:"GetAppConfig",guard:"noInternalError"},{target:"Error"}]},GetAppConfig:{entry:(0,a.assign)({intermediateValue:()=>({requiredUserInteraction:i.UserInteractionRequired.None,step:p.signTransactionDAStateSteps.GET_APP_CONFIG})}),invoke:{id:"getAppConfig",src:"getAppConfig",onDone:{target:"GetAppConfigResultCheck",actions:(0,a.assign)({_internalState:({event:e,context:t})=>(0,i.isSuccessCommandResult)(e.output)?{...t._internalState,appConfig:e.output.data}:{...t._internalState,error:e.output.error}})},onError:{target:"Error",actions:"assignErrorFromEvent"}}},GetAppConfigResultCheck:{always:[{target:"CheckTransactionCheckSupported",guard:"noInternalError"},{target:"Error"}]},CheckTransactionCheckSupported:{always:[{target:"TxCheck",guard:"isTransactionChecksSupported"},{target:"CheckGenericClearSignSupported"}]},TxCheck:{invoke:{id:"transactionCheckStateMachine",src:"transactionCheckStateMachine",input:({context:e})=>({appConfig:e._internalState.appConfig,derivationPath:e.input.derivationPath,transaction:e._internalState.messageBytes,contextModule:e.input.contextModule,serializedForTxCheck:e._internalState.serializedForTxCheck}),onSnapshot:{actions:(0,a.assign)({intermediateValue:({event:e})=>e.snapshot.context.intermediateValue})},onDone:{target:"CheckGenericClearSignSupported"}}},CheckGenericClearSignSupported:{always:[{target:"GenericClearSign",guard:(0,a.and)(["noInternalError","isGenericClearSignAvailable"])},{target:"BasicClearSign",guard:"noInternalError"},{target:"Error"}]},GenericClearSign:{invoke:{id:"provisionGenericClearSignStateMachine",src:"provisionGenericClearSignStateMachine",input:({context:e})=>({derivationPath:e.input.derivationPath,transaction:e._internalState.messageBytes,contextModule:e.input.contextModule}),onSnapshot:{actions:(0,a.assign)({intermediateValue:({event:e})=>e.snapshot.context.intermediateValue})},onDone:{target:"CheckGenericClearSignResult",actions:(0,a.assign)({_internalState:({event:e,context:t})=>e.output.caseOf({Right:r=>({...t._internalState,clearSignPrepared:r.status==="prepared",unrecognizedProgramIds:r.unrecognizedProgramIds,staleDescriptor:r.staleDescriptor}),Left:r=>({...t._internalState,error:r})})})},onError:{target:"BasicClearSign",actions:({event:e})=>M.info("[ClearSign] generic clear-sign threw; falling back to legacy",{data:{error:String(e.error)}})}}},CheckGenericClearSignResult:{always:[{target:"GenericTerminalSign",guard:(0,a.and)(["noInternalError","isClearSignPrepared"])},{target:"BasicClearSign",guard:"noInternalError"},{target:"Error"}]},GenericTerminalSign:{invoke:{id:"signGenericClearSignStateMachine",src:"signGenericClearSignStateMachine",input:({context:e})=>{const{rpcUrl:t,fetchBlockhash:r}=m(e);return{derivationPath:e.input.derivationPath,transaction:e._internalState.messageBytes,rpcUrl:t,fetchBlockhash:r,userInputType:e.input.transactionOptions?.transactionResolutionContext?.userInputType,blockhashService:e.input.blockhashService}},onSnapshot:{actions:(0,a.assign)({intermediateValue:({event:e})=>e.snapshot.context.intermediateValue})},onDone:{target:"CheckGenericTerminalSignResult",actions:(0,a.assign)({_internalState:({event:e,context:t})=>e.output.caseOf({Right:r=>r==="degraded"?t._internalState:{...t._internalState,signature:r},Left:r=>({...t._internalState,error:r})})})}}},CheckGenericTerminalSignResult:{always:[{target:"Report",guard:"hasSignature"},{target:"BasicClearSign",guard:"noInternalError"},{target:"Report"}]},BasicClearSign:{invoke:{id:"provisionBasicClearSignStateMachine",src:"provisionBasicClearSignStateMachine",input:({context:e})=>({derivationPath:e.input.derivationPath,transaction:e._internalState.messageBytes,contextModule:e.input.contextModule,appConfig:e._internalState.appConfig,rpcUrl:T(e.input),resolutionContext:e.input.transactionOptions?.transactionResolutionContext}),onSnapshot:{actions:(0,a.assign)({intermediateValue:({event:e})=>e.snapshot.context.intermediateValue})},onDone:{target:"Report"},onError:{target:"Report"}}},Report:{invoke:{src:"reportSign",input:({context:e})=>{const t=n.getDeviceSessionState(),r=t.sessionStateType!==i.DeviceSessionStateType.Connected?t.firmwareVersion?.os??null:null;return{isBlindSign:e._internalState.signature===null&&e._internalState.error===null,messageBytes:e._internalState.messageBytes,unrecognizedProgramIds:e._internalState.unrecognizedProgramIds,staleDescriptor:e._internalState.staleDescriptor,contextModule:e.input.contextModule,signerAppVersion:e._internalState.appConfig.version,deviceModelId:t.deviceModelId,deviceVersion:r,loggerFactory:g}},onDone:[{target:"SignTransactionResultCheck",guard:"hasSignature"},{target:"Error",guard:({context:e})=>e._internalState.error!==null},{target:"BasicTerminalSign"}],onError:[{target:"SignTransactionResultCheck",guard:"hasSignature"},{target:"Error",guard:({context:e})=>e._internalState.error!==null},{target:"BasicTerminalSign"}]}},BasicTerminalSign:{invoke:{id:"signBasicClearSignStateMachine",src:"signBasicClearSignStateMachine",input:({context:e})=>{const{rpcUrl:t,fetchBlockhash:r}=m(e);return{derivationPath:e.input.derivationPath,transaction:e._internalState.messageBytes,rpcUrl:t,fetchBlockhash:r,userInputType:e.input.transactionOptions?.transactionResolutionContext?.userInputType,blockhashService:e.input.blockhashService}},onSnapshot:{actions:(0,a.assign)({intermediateValue:({event:e})=>e.snapshot.context.intermediateValue})},onDone:{target:"SignTransactionResultCheck",actions:(0,a.assign)({_internalState:({event:e,context:t})=>e.output.caseOf({Right:r=>({...t._internalState,signature:r}),Left:r=>({...t._internalState,error:r})})})}}},SignTransactionResultCheck:{always:[{guard:"noInternalError",target:"Success"},{target:"Error"}]},Success:{type:"final"},Error:{type:"final"}},output:({context:e})=>e._internalState.signature?(0,u.Right)(e._internalState.signature):(0,u.Left)(e._internalState.error||new i.UnknownDAError("No error or signature available"))})}extractDependencies(n){return{normalizeTransaction:async()=>{try{return new y.TransactionInputNormaliser().normalize(this.input.transaction)}catch(g){return this.getLoggerFactory(n)("NormalizeTransaction").warn("[normalizeTransaction] format detection failed; treating input as message bytes",{data:{error:String(g)}}),{messageBytes:this.input.transaction,serializedForTxCheck:void 0}}},getAppConfig:async()=>n.sendCommand(new f.GetAppConfigurationCommand),reportSign:async g=>new A.SolanaSigningReportTask(g.input).run()}}}0&&(module.exports={SignTransactionDeviceAction});
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});
2
2
  //# sourceMappingURL=SignTransactionDeviceAction.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/device-action/SignTransactionDeviceAction.ts"],
4
- "sourcesContent": ["import {\n type CommandResult,\n type DeviceActionStateMachine,\n DeviceSessionStateType,\n type InternalApi,\n isSuccessCommandResult,\n OpenAppDeviceAction,\n type StateMachineTypes,\n UnknownDAError,\n UserInteractionRequired,\n XStateDeviceAction,\n} from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { and, assign, fromPromise, setup } from \"xstate\";\n\nimport {\n type SignTransactionDAError,\n type SignTransactionDAInput,\n type SignTransactionDAIntermediateValue,\n type SignTransactionDAInternalState,\n type SignTransactionDAOutput,\n signTransactionDAStateSteps,\n} from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { type AppConfiguration } from \"@api/model/AppConfiguration\";\nimport { GetAppConfigurationCommand } from \"@internal/app-binder/command/GetAppConfigurationCommand\";\nimport { type SolanaAppErrorCodes } from \"@internal/app-binder/command/utils/SolanaApplicationErrors\";\nimport { APP_NAME } from \"@internal/app-binder/constants\";\nimport {\n type NormalizedTransactionInput,\n TransactionInputNormaliser,\n} from \"@internal/app-binder/services/TransactionInputNormaliser\";\nimport {\n isSolanaSignerFeatureSupported,\n type SolanaSignerFeaturesNames,\n} from \"@internal/app-binder/SolanaApplicationResolver\";\nimport {\n SolanaSigningReportTask,\n type SolanaSigningReportTaskArgs,\n} from \"@internal/app-binder/task/SolanaSigningReportTask\";\n\nimport { ProvisionBasicClearSignDeviceAction } from \"./ProvisionBasicClearSignDeviceAction\";\nimport { ProvisionGenericClearSignDeviceAction } from \"./ProvisionGenericClearSignDeviceAction\";\nimport { ProvisionTransactionCheckDeviceAction } from \"./ProvisionTransactionCheckDeviceAction\";\nimport { SignBasicClearSignDeviceAction } from \"./SignBasicClearSignDeviceAction\";\nimport { SignGenericClearSignDeviceAction } from \"./SignGenericClearSignDeviceAction\";\n\n/**\n * Per-sign `transactionOptions.solanaRPCURL` overrides the builder default\n * (`input.solanaRPCURL`) for inspection and delayed signing.\n */\nfunction resolveSolanaRpcUrl(\n input: SignTransactionDAInput,\n): string | undefined {\n return input.transactionOptions?.solanaRPCURL ?? input.solanaRPCURL;\n}\n\nexport type MachineDependencies = {\n readonly normalizeTransaction: () => Promise<NormalizedTransactionInput>;\n readonly getAppConfig: () => Promise<\n CommandResult<AppConfiguration, SolanaAppErrorCodes>\n >;\n readonly reportSign: (arg0: {\n input: SolanaSigningReportTaskArgs;\n }) => Promise<void>;\n};\n\nexport class SignTransactionDeviceAction extends XStateDeviceAction<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n> {\n makeStateMachine(\n internalApi: InternalApi,\n ): DeviceActionStateMachine<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n > {\n type types = StateMachineTypes<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n >;\n\n const { normalizeTransaction, getAppConfig, reportSign } =\n this.extractDependencies(internalApi);\n\n const loggerFactory = this.getLoggerFactory(internalApi);\n const logger = loggerFactory(\"SignTransactionDeviceAction\");\n\n const disabledFeaturesSet:\n | ReadonlySet<SolanaSignerFeaturesNames>\n | undefined = this.input.disabledFeatures\n ? new Set(this.input.disabledFeatures)\n : undefined;\n\n const isSupported = (\n feature: SolanaSignerFeaturesNames,\n appConfig: AppConfiguration,\n ): boolean =>\n isSolanaSignerFeatureSupported(\n internalApi,\n feature,\n appConfig,\n disabledFeaturesSet,\n );\n\n // Blockhash refresh is opt-in and shared by both terminal-sign machines:\n // only when `delayed: true` is requested, a blockhash source exists, and\n // the app supports delayed signing. When it isn't allowed we withhold the\n // source so the signing machine signs the original transaction.\n //\n // Template-based swaps (LiFi, etc.) always sign with the original blockhash:\n // CAL-provided e016 descriptors are computed for the original transaction, so\n // refreshing the blockhash would invalidate them and make the Exchange app\n // reject the sign with a descriptor-mismatch error.\n const resolveRefreshSource = (\n context: types[\"context\"],\n ): {\n rpcUrl: string | undefined;\n fetchBlockhash: (() => Promise<Uint8Array>) | undefined;\n } => {\n const rpcUrl = resolveSolanaRpcUrl(context.input);\n const fetchBlockhash = context.input.transactionOptions?.fetchBlockhash;\n const isTemplateSwap =\n !!context.input.transactionOptions?.transactionResolutionContext\n ?.templateId;\n const refreshBlockhash =\n !isTemplateSwap &&\n context.input.transactionOptions?.delayed === true &&\n !!(rpcUrl || fetchBlockhash) &&\n isSupported(\"delayedSigning\", context._internalState.appConfig!);\n return {\n rpcUrl: refreshBlockhash ? rpcUrl : undefined,\n fetchBlockhash: refreshBlockhash ? fetchBlockhash : undefined,\n };\n };\n\n return setup({\n types: {\n input: {} as types[\"input\"],\n context: {} as types[\"context\"],\n output: {} as types[\"output\"],\n },\n actors: {\n normalizeTransaction: fromPromise(normalizeTransaction),\n reportSign: fromPromise(reportSign),\n openAppStateMachine: new OpenAppDeviceAction({\n input: { appName: APP_NAME },\n }).makeStateMachine(internalApi),\n getAppConfig: fromPromise(getAppConfig),\n transactionCheckStateMachine: new ProvisionTransactionCheckDeviceAction(\n {\n input: {\n derivationPath: this.input.derivationPath,\n transaction: this.input.transaction,\n contextModule: this.input.contextModule,\n },\n loggerFactory: this.getLoggerFactory(internalApi),\n },\n ).makeStateMachine(internalApi),\n provisionGenericClearSignStateMachine:\n new ProvisionGenericClearSignDeviceAction({\n input: {\n derivationPath: this.input.derivationPath,\n transaction: this.input.transaction,\n contextModule: this.input.contextModule,\n },\n loggerFactory: this.getLoggerFactory(internalApi),\n }).makeStateMachine(internalApi),\n provisionBasicClearSignStateMachine:\n new ProvisionBasicClearSignDeviceAction({\n // `appConfig` is unknown at construction; it is supplied at invoke\n // time (see the BasicClearSign state input below).\n input: {\n derivationPath: this.input.derivationPath,\n transaction: this.input.transaction,\n contextModule: this.input.contextModule,\n },\n loggerFactory: this.getLoggerFactory(internalApi),\n }).makeStateMachine(internalApi),\n signGenericClearSignStateMachine: new SignGenericClearSignDeviceAction({\n input: {\n derivationPath: this.input.derivationPath,\n transaction: this.input.transaction,\n },\n loggerFactory: this.getLoggerFactory(internalApi),\n }).makeStateMachine(internalApi),\n signBasicClearSignStateMachine: new SignBasicClearSignDeviceAction({\n input: {\n derivationPath: this.input.derivationPath,\n transaction: this.input.transaction,\n },\n loggerFactory: this.getLoggerFactory(internalApi),\n }).makeStateMachine(internalApi),\n },\n guards: {\n noInternalError: ({ context }) => context._internalState.error === null,\n skipOpenApp: ({ context }) =>\n context.input.transactionOptions?.skipOpenApp || false,\n isTransactionChecksSupported: ({ context }) =>\n isSupported(\"transactionChecks\", context._internalState.appConfig!),\n // Generic clear-signing terminates via SIGN MESSAGE DELAYED (0x09) on\n // the original message, so it only needs the capability bit \u2014 no RPC /\n // blockhash prerequisite.\n isGenericClearSignAvailable: ({ context }) =>\n isSupported(\"genericClearSign\", context._internalState.appConfig!),\n // Generic clear-sign child streamed + finalized the descriptors (its\n // Right(\"prepared\") outcome was folded into the context by the\n // GenericClearSign onDone).\n isClearSignPrepared: ({ context }) =>\n context._internalState.clearSignPrepared,\n hasSignature: ({ context }) =>\n context._internalState.signature !== null,\n },\n actions: {\n assignErrorFromEvent: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: new UnknownDAError(\n _.event[\"error\"] instanceof Error\n ? _.event[\"error\"].message\n : String(_.event[\"error\"]),\n ),\n }),\n }),\n },\n }).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QGUCWUB2AVATgQw1jwGMAXVAewwBEwA3VYsAQTMowDoBJDVcvADbJSeUmADEAbQAMAXUSgADhVh92CkAA9EARgDsAZg4AOAJzSAbAYAsOgKymdN08YA0IAJ67LxjnbvWxjoW-kGGxgC+Ee5omLgERGxUtAxMrORU3Lz8QiJiUjrySCDKqhkYGtoI+kZmljb2js5unojmRgbS1haG0o5OllEx6Nj4hCTlKYwsSZwA8opgGMyKilNps+IQVGAcqBh0FADWuxSLy6vComAAsiQAFvtgMkVKKmpUlYh6dgBMHL8bJ0LKY7AZOr87O4vAhjHpTCZfkEDHo+nprL8ekMQLFRgkJux1jNyhwFksVooAEpwACuAlIAGF7mBiEcpHINKUPhVilUdL9gn5TCjfr9rNJ+X8WjDzAi9AKDGLwb94RZrNjcfFxrMiel2KTzhTqbA6YzmayCq8Su9yl9qgKLEKRWKJZCkdDEEE-NIffLAX8LPUNSMtYlJvRpnrMgBxMCkCkMqgAM3QWx2ewOx12MHjq0TGBTUBenJt6l5uj9JmsBjhxjhdn0pg91S61gB1kCPT0aosxiRwbiYzDhIjGxJsdzinzhfEYBwOAoOA4igEoiTi4Athwcwnk+hi8Uubby9VK8Zq7X643m78fRwfT7+fCxQ2B3jteHUsT9RPdwX0MappMiybIHm8ZRlqAVQCuYHAWJClj8qYSpQq0LZ6HoHA2D2PpwuCphvqGBLJKO34xnGf6FoB9LARakiFCWEGfCeMHSHBCEWEhKHNt2dj3ghdh9FYgLGHYhFDsRNCkVGnC-nme5QNRZogVIvxWkekFaIgrHsYJnG-Mh1aoTCDQcKYvG9sYaIuJE0Q4iGEk6tJswcAA6mAABGBi0UcsALKQPBphguz7IcJwcAA7p53nmkc-k8GB1pMTyUHaRh-zdHCpjVtInSic2dZGH8gmoi4lmQuJ+JOV+MludFPl+YoAUYLO86Lsuq6kOuOBblFXk+fFGCJRpzGpQgKryhwmXwjleXGd4k3WGCOhWd29g-BYlUfiONUue5-WxY1zVKeImiwHkux4EmYg4AAFNIACU4iao5n6Rnt9WHYNSnDaWo1aQgiqQhwqqmNlxUqrlzaOAi1h6H2KLLZCK1bcOJG7SSPmxsFOCMAyAhgHgOC4sgNKrIuYgQOy6l-SlAMGBYgYg6YjM-NYoLSGC80IMh-yBgYwTwqJ5l2HoqOSbqLlY0sc54wTRMk2Tyg4JTlqMdydoM0zqo9AEHNc82elTd28F1qtnTouL1XvZjsXY7LxD44TxMjKT5Mq5Aqk08lmuM2xOts-rBjc90bFwyEZvgh2KpiXZL1VW9Y4-jLuOO-LLuYEFIWZuFMA43LzskxddzEI8wW-T7J4YmDJjooYir2DY0OdMbjNiuiGIqgRccOQnO028n+dp4XIxZxmYXZinBcK67xcPE89HexrVcGQicJw8qjfWM28FtuZjOBOY1borZwyDn36MD+RQ9OzPmfbMF49ZtuU-D3fGBXGIJdl88anq8eY1q5rzrpvME280J1n+PvUWDgVril+FbROZFZKv1vhnFqc4FxLhXGuTcL8b7pyLtcb+C8OSHlpnaIBtcN4NzATxeGAJMRWF7EqCUBhEH9yTpkZA9xBACAoBFNBuIx6hWfrAXhAh+GCMIbPYh89y5kPAsvMaxUdB+G6I4eEAtpB1m5kEXwDMXDaN7HoHQwQOGXy4ZwHhfCBFCNHpg9qOCup4PEbY6RI9MCf1uPI54iikrKIBqo9RIJGzaN0fQtixgQTw1FBiXRYse7n22pY5BHAsBzg3PsQQwiH7ZwnhwVQmB9hQDJPgcosBvEkIUUvABQTsqYWkBhdENhzxql+DxUEcFqyr26Bibs3cz7vjRlJDG+p44pIwEpHy1N-6aSqCEQUQIGbymMOCMEBVgZgjVNEkELNuixyGURa2ViOATJGdM2KatyGVzGosx0yyehInWQYehCJtkdkZn8YO0Soh2QwBQCAcANDnIls5OpI06ZVAALQWGbLC+8D4kXIrVBY0ZV9OA8DUDki6cz-pVAxM2HQlg2I1hmtIES61Bn2WSSMyWJIyQXDWOCzSkLNZ2EdICasAs-imIMKCAq-g-ABHgv0Wwok0X0v1Iyo0tIaKxTxVC7wFL7z2EEsEUWcNuzQwlMKjewozDNJ0JKll5FJzTnQIqu0OhxSYQbKLLogJ4agleWhYlxKTB1iaYZDsARDk0uGWCsZZrKIATlcpVkVqTw6GFP7FmoIBQrTWToIllg+LmRtaiTmqJlQmuDZwfaMUQJHR4FGsaYonAg1yhCBs2VGapv5feFm-K4lOA3nmjFdUDrFu+uGstAMDJmA4MS8GQRRSKnMgVbKZl4Z9H5KKJEgQO2nOlgQzxH8lYU0gP2qoUc+JjvZhKZC8E4VoX6Iw5EfY4nVmNUkwNJy0n21TvYzAO7EA1jWdQn4GEzD6HlAVOEJgwS3lwvG9hd7jlINqjYyRdiZGvpuYEglok+Iit3lYfoKa0ImzMsBroyF9BxOXWkjJPVslCBGG+hA-gGz3lncLMUBlXUwnhm2Qx0SNrBHMtS0FD7oO90mZckCVH4J-DMgKeUIQwHswKvoLCeyJQbXgvKYj0GaTECYLAeAiG6kLPlJhTEgR5QNxVMxz0oo-AM26PBYI-KzGqZcgAUTajgET+mAQ7OMwKUzzYlqYXDhytZ6q8Lqj+UAA */\n id: \"SignTransactionDeviceAction\",\n initial: \"NormalizeTransaction\",\n context: ({ input }) => ({\n input,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.OPEN_APP,\n },\n _internalState: {\n error: null,\n signature: null,\n appConfig: null,\n messageBytes: this.input.transaction,\n serializedForTxCheck: undefined,\n clearSignPrepared: false,\n unrecognizedProgramIds: [],\n staleDescriptor: false,\n },\n }),\n states: {\n NormalizeTransaction: {\n // Emit the correct first step immediately so the snapshot produced\n // while the actor runs already reflects where we are headed.\n entry: assign({\n intermediateValue: ({ context }) => ({\n requiredUserInteraction: UserInteractionRequired.None,\n step: context.input.transactionOptions?.skipOpenApp\n ? signTransactionDAStateSteps.GET_APP_CONFIG\n : signTransactionDAStateSteps.OPEN_APP,\n }),\n }),\n invoke: {\n id: \"normalizeTransaction\",\n src: \"normalizeTransaction\",\n onDone: [\n {\n target: \"GetAppConfig\",\n guard: \"skipOpenApp\",\n actions: assign({\n _internalState: ({ event, context }) => ({\n ...context._internalState,\n messageBytes: event.output.messageBytes,\n serializedForTxCheck: event.output.serializedForTxCheck,\n }),\n }),\n },\n {\n target: \"OpenAppDeviceAction\",\n actions: assign({\n _internalState: ({ event, context }) => ({\n ...context._internalState,\n messageBytes: event.output.messageBytes,\n serializedForTxCheck: event.output.serializedForTxCheck,\n }),\n }),\n },\n ],\n },\n },\n OpenAppDeviceAction: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.OPEN_APP,\n }),\n }),\n invoke: {\n id: \"openAppStateMachine\",\n src: \"openAppStateMachine\",\n input: () => ({ appName: APP_NAME }),\n onSnapshot: {\n actions: assign({\n intermediateValue: ({ event }) => ({\n ...event.snapshot.context.intermediateValue,\n step: signTransactionDAStateSteps.OPEN_APP,\n }),\n }),\n },\n onDone: {\n target: \"OpenAppResultCheck\",\n actions: assign({\n _internalState: ({ event, context }) =>\n event.output.caseOf({\n Right: () => context._internalState,\n Left: (error) => ({\n ...context._internalState,\n error,\n }),\n }),\n }),\n },\n },\n },\n OpenAppResultCheck: {\n always: [\n { target: \"GetAppConfig\", guard: \"noInternalError\" },\n { target: \"Error\" },\n ],\n },\n GetAppConfig: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.GET_APP_CONFIG,\n }),\n }),\n invoke: {\n id: \"getAppConfig\",\n src: \"getAppConfig\",\n onDone: {\n target: \"GetAppConfigResultCheck\",\n actions: assign({\n _internalState: ({ event, context }) =>\n isSuccessCommandResult(event.output)\n ? {\n ...context._internalState,\n appConfig: event.output.data,\n }\n : { ...context._internalState, error: event.output.error },\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n GetAppConfigResultCheck: {\n always: [\n {\n target: \"CheckTransactionCheckSupported\",\n guard: \"noInternalError\",\n },\n { target: \"Error\" },\n ],\n },\n CheckTransactionCheckSupported: {\n always: [\n // Feature supported: delegate opt-in + provide to the child machine.\n {\n target: \"TxCheck\",\n guard: \"isTransactionChecksSupported\",\n },\n // Feature not supported: skip the child machine entirely.\n { target: \"CheckGenericClearSignSupported\" },\n ],\n },\n // Web3-checks child machine: handles opt-in prompt and scan-descriptor\n // provisioning. Only reached when the feature is supported; opt-in and\n // provide decisions are made internally.\n TxCheck: {\n invoke: {\n id: \"transactionCheckStateMachine\",\n src: \"transactionCheckStateMachine\",\n // The scan descriptor must hash the exact message the device\n // reviews, i.e. the original bytes (blockhash included).\n input: ({ context }) => ({\n appConfig: context._internalState.appConfig!,\n derivationPath: context.input.derivationPath,\n transaction: context._internalState.messageBytes,\n contextModule: context.input.contextModule,\n serializedForTxCheck: context._internalState.serializedForTxCheck,\n }),\n onSnapshot: {\n actions: assign({\n intermediateValue: ({ event }) =>\n event.snapshot.context.intermediateValue,\n }),\n },\n onDone: { target: \"CheckGenericClearSignSupported\" },\n },\n },\n CheckGenericClearSignSupported: {\n always: [\n {\n target: \"GenericClearSign\",\n guard: and([\"noInternalError\", \"isGenericClearSignAvailable\"]),\n },\n { target: \"BasicClearSign\", guard: \"noInternalError\" },\n { target: \"Error\" },\n ],\n },\n // Generic clear-sign child: streams + validates the descriptors (no\n // signing, no UI). `\"prepared\"` runs the generic terminal sign;\n // `\"degraded\"` falls back to legacy basic provisioning.\n GenericClearSign: {\n invoke: {\n id: \"provisionGenericClearSignStateMachine\",\n src: \"provisionGenericClearSignStateMachine\",\n input: ({ context }) => ({\n derivationPath: context.input.derivationPath,\n transaction: context._internalState.messageBytes,\n contextModule: context.input.contextModule,\n }),\n onSnapshot: {\n actions: assign({\n intermediateValue: ({ event }) =>\n event.snapshot.context.intermediateValue,\n }),\n },\n // Fold the child's Either output into the context here (where\n // xstate types `event.output`), then branch on the context in\n // CheckGenericClearSignResult \u2014 no event cast in the guards.\n onDone: {\n target: \"CheckGenericClearSignResult\",\n actions: assign({\n _internalState: ({ event, context }) =>\n event.output.caseOf<SignTransactionDAInternalState>({\n Right: (outcome) => ({\n ...context._internalState,\n clearSignPrepared: outcome.status === \"prepared\",\n unrecognizedProgramIds: outcome.unrecognizedProgramIds,\n staleDescriptor: outcome.staleDescriptor,\n }),\n // Left never occurs (the prepare phase has no UI), but stay\n // defensive and surface it.\n Left: (error) => ({ ...context._internalState, error }),\n }),\n }),\n },\n onError: {\n target: \"BasicClearSign\",\n actions: ({ event }) =>\n logger.info(\n \"[ClearSign] generic clear-sign threw; falling back to legacy\",\n { data: { error: String(event.error) } },\n ),\n },\n },\n },\n CheckGenericClearSignResult: {\n always: [\n // Prepared: run the generic terminal sign; report fires after.\n {\n target: \"GenericTerminalSign\",\n guard: and([\"noInternalError\", \"isClearSignPrepared\"]),\n },\n // Degraded (Right(\"degraded\")): fall back to the legacy path.\n { target: \"BasicClearSign\", guard: \"noInternalError\" },\n // Defensive: surface an unexpected Left.\n { target: \"Error\" },\n ],\n },\n // Generic terminal sign: prompt + best-effort blockhash refresh +\n // delayed sign. A user cancel / signing failure surfaces; a non-cancel\n // prompt failure resolves to `\"degraded\"` and falls back to the legacy\n // basic path.\n GenericTerminalSign: {\n invoke: {\n id: \"signGenericClearSignStateMachine\",\n src: \"signGenericClearSignStateMachine\",\n input: ({ context }) => {\n const { rpcUrl, fetchBlockhash } = resolveRefreshSource(context);\n return {\n derivationPath: context.input.derivationPath,\n transaction: context._internalState.messageBytes,\n rpcUrl,\n fetchBlockhash,\n userInputType:\n context.input.transactionOptions?.transactionResolutionContext\n ?.userInputType,\n blockhashService: context.input.blockhashService,\n };\n },\n onSnapshot: {\n actions: assign({\n intermediateValue: ({ event }) =>\n event.snapshot.context.intermediateValue,\n }),\n },\n onDone: {\n target: \"CheckGenericTerminalSignResult\",\n actions: assign({\n _internalState: ({ event, context }) =>\n event.output.caseOf<SignTransactionDAInternalState>({\n // Right(Signature) on success; Right(\"degraded\") when the\n // prompt failed for a non-cancel reason (leave signature\n // unset so the result check falls back to legacy).\n Right: (signatureOrDegraded) =>\n signatureOrDegraded === \"degraded\"\n ? context._internalState\n : {\n ...context._internalState,\n signature: signatureOrDegraded,\n },\n // Left: the user cancelled or signing failed; surface it.\n Left: (error) => ({ ...context._internalState, error }),\n }),\n }),\n },\n },\n },\n CheckGenericTerminalSignResult: {\n always: [\n // Signed: report (isBlindSign: false) then surface result.\n { target: \"Report\", guard: \"hasSignature\" },\n // Degraded (no signature, no error): fall back to the legacy path.\n { target: \"BasicClearSign\", guard: \"noInternalError\" },\n // User cancel / signing failure: report (isBlindSign: false) then surface error.\n { target: \"Report\" },\n ],\n },\n // Legacy SPL / token provisioning child (best-effort, never signs). It\n // streams descriptors; control always proceeds to the basic terminal\n // sign.\n BasicClearSign: {\n invoke: {\n id: \"provisionBasicClearSignStateMachine\",\n src: \"provisionBasicClearSignStateMachine\",\n input: ({ context }) => ({\n derivationPath: context.input.derivationPath,\n transaction: context._internalState.messageBytes,\n contextModule: context.input.contextModule,\n appConfig: context._internalState.appConfig!,\n rpcUrl: resolveSolanaRpcUrl(context.input),\n resolutionContext:\n context.input.transactionOptions?.transactionResolutionContext,\n }),\n onSnapshot: {\n actions: assign({\n intermediateValue: ({ event }) =>\n event.snapshot.context.intermediateValue,\n }),\n },\n onDone: { target: \"Report\" },\n onError: { target: \"Report\" },\n },\n },\n // Single report state for all paths.\n // isBlindSign is derived from context: false when a signature or error is\n // already set (clear-sign path \u2014 success or cancel), true otherwise\n // (basic/legacy path, neither has run yet).\n // Routes to: SignTransactionResultCheck (clear-sign success),\n // Error (clear-sign cancel/failure), or\n // BasicTerminalSign (basic path).\n Report: {\n invoke: {\n src: \"reportSign\",\n input: ({ context }) => {\n const sessionState = internalApi.getDeviceSessionState();\n const deviceVersion =\n sessionState.sessionStateType !==\n DeviceSessionStateType.Connected\n ? (sessionState.firmwareVersion?.os ?? null)\n : null;\n return {\n isBlindSign:\n context._internalState.signature === null &&\n context._internalState.error === null,\n messageBytes: context._internalState.messageBytes,\n unrecognizedProgramIds:\n context._internalState.unrecognizedProgramIds,\n staleDescriptor: context._internalState.staleDescriptor,\n contextModule: context.input.contextModule,\n signerAppVersion: context._internalState.appConfig!.version,\n deviceModelId: sessionState.deviceModelId,\n deviceVersion,\n loggerFactory,\n } satisfies SolanaSigningReportTaskArgs;\n },\n onDone: [\n {\n target: \"SignTransactionResultCheck\",\n guard: \"hasSignature\",\n },\n {\n target: \"Error\",\n guard: ({ context }) => context._internalState.error !== null,\n },\n { target: \"BasicTerminalSign\" },\n ],\n onError: [\n {\n target: \"SignTransactionResultCheck\",\n guard: \"hasSignature\",\n },\n {\n target: \"Error\",\n guard: ({ context }) => context._internalState.error !== null,\n },\n { target: \"BasicTerminalSign\" },\n ],\n },\n },\n // Basic terminal sign: the legacy preview/one-shot path. It decides\n // delayed-vs-one-shot from the blockhash source (opt-in refresh).\n BasicTerminalSign: {\n invoke: {\n id: \"signBasicClearSignStateMachine\",\n src: \"signBasicClearSignStateMachine\",\n input: ({ context }) => {\n const { rpcUrl, fetchBlockhash } = resolveRefreshSource(context);\n return {\n derivationPath: context.input.derivationPath,\n transaction: context._internalState.messageBytes,\n rpcUrl,\n fetchBlockhash,\n userInputType:\n context.input.transactionOptions?.transactionResolutionContext\n ?.userInputType,\n blockhashService: context.input.blockhashService,\n };\n },\n onSnapshot: {\n actions: assign({\n intermediateValue: ({ event }) =>\n event.snapshot.context.intermediateValue,\n }),\n },\n onDone: {\n target: \"SignTransactionResultCheck\",\n actions: assign({\n _internalState: ({ event, context }) =>\n event.output.caseOf<SignTransactionDAInternalState>({\n Right: (signature) => ({\n ...context._internalState,\n signature,\n }),\n Left: (error) => ({ ...context._internalState, error }),\n }),\n }),\n },\n },\n },\n SignTransactionResultCheck: {\n always: [\n { guard: \"noInternalError\", target: \"Success\" },\n { target: \"Error\" },\n ],\n },\n Success: { type: \"final\" },\n Error: { type: \"final\" },\n },\n output: ({ context }) =>\n context._internalState.signature\n ? Right(context._internalState.signature)\n : Left(\n context._internalState.error ||\n new UnknownDAError(`No error or signature available`),\n ),\n });\n }\n\n extractDependencies(internalApi: InternalApi): MachineDependencies {\n const normalizeTransaction = async () => {\n try {\n return new TransactionInputNormaliser().normalize(\n this.input.transaction,\n );\n } catch (error) {\n this.getLoggerFactory(internalApi)(\"NormalizeTransaction\").warn(\n \"[normalizeTransaction] format detection failed; treating input as message bytes\",\n { data: { error: String(error) } },\n );\n return {\n messageBytes: this.input.transaction,\n serializedForTxCheck: undefined,\n };\n }\n };\n\n const getAppConfig = async () =>\n internalApi.sendCommand(new GetAppConfigurationCommand());\n\n const reportSign = async (arg0: { input: SolanaSigningReportTaskArgs }) =>\n new SolanaSigningReportTask(arg0.input).run();\n\n return {\n normalizeTransaction,\n getAppConfig,\n reportSign,\n };\n }\n}\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,iCAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAWO,2CACPC,EAA4B,qBAC5BC,EAAgD,kBAEhDC,EAOO,4DAEPC,EAA2C,mEAE3CC,EAAyB,0CACzBC,EAGO,oEACPC,EAGO,0DACPC,EAGO,6DAEPC,EAAoD,iDACpDC,EAAsD,mDACtDC,EAAsD,mDACtDC,EAA+C,4CAC/CC,EAAiD,8CAMjD,SAASC,EACPC,EACoB,CACpB,OAAOA,EAAM,oBAAoB,cAAgBA,EAAM,YACzD,CAYO,MAAMjB,UAAoC,oBAM/C,CACA,iBACEkB,EAOA,CASA,KAAM,CAAE,qBAAAC,EAAsB,aAAAC,EAAc,WAAAC,CAAW,EACrD,KAAK,oBAAoBH,CAAW,EAEhCI,EAAgB,KAAK,iBAAiBJ,CAAW,EACjDK,EAASD,EAAc,6BAA6B,EAEpDE,EAEU,KAAK,MAAM,iBACvB,IAAI,IAAI,KAAK,MAAM,gBAAgB,EACnC,OAEEC,EAAc,CAClBC,EACAC,OAEA,kCACET,EACAQ,EACAC,EACAH,CACF,EAWII,EACJC,GAIG,CACH,MAAMC,EAASd,EAAoBa,EAAQ,KAAK,EAC1CE,EAAiBF,EAAQ,MAAM,oBAAoB,eAInDG,EACJ,CAHA,CAAC,CAACH,EAAQ,MAAM,oBAAoB,8BAChC,YAGJA,EAAQ,MAAM,oBAAoB,UAAY,IAC9C,CAAC,EAAEC,GAAUC,IACbN,EAAY,iBAAkBI,EAAQ,eAAe,SAAU,EACjE,MAAO,CACL,OAAQG,EAAmBF,EAAS,OACpC,eAAgBE,EAAmBD,EAAiB,MACtD,CACF,EAEA,SAAO,SAAM,CACX,MAAO,CACL,MAAO,CAAC,EACR,QAAS,CAAC,EACV,OAAQ,CAAC,CACX,EACA,OAAQ,CACN,wBAAsB,eAAYZ,CAAoB,EACtD,cAAY,eAAYE,CAAU,EAClC,oBAAqB,IAAI,sBAAoB,CAC3C,MAAO,CAAE,QAAS,UAAS,CAC7B,CAAC,EAAE,iBAAiBH,CAAW,EAC/B,gBAAc,eAAYE,CAAY,EACtC,6BAA8B,IAAI,wCAChC,CACE,MAAO,CACL,eAAgB,KAAK,MAAM,eAC3B,YAAa,KAAK,MAAM,YACxB,cAAe,KAAK,MAAM,aAC5B,EACA,cAAe,KAAK,iBAAiBF,CAAW,CAClD,CACF,EAAE,iBAAiBA,CAAW,EAC9B,sCACE,IAAI,wCAAsC,CACxC,MAAO,CACL,eAAgB,KAAK,MAAM,eAC3B,YAAa,KAAK,MAAM,YACxB,cAAe,KAAK,MAAM,aAC5B,EACA,cAAe,KAAK,iBAAiBA,CAAW,CAClD,CAAC,EAAE,iBAAiBA,CAAW,EACjC,oCACE,IAAI,sCAAoC,CAGtC,MAAO,CACL,eAAgB,KAAK,MAAM,eAC3B,YAAa,KAAK,MAAM,YACxB,cAAe,KAAK,MAAM,aAC5B,EACA,cAAe,KAAK,iBAAiBA,CAAW,CAClD,CAAC,EAAE,iBAAiBA,CAAW,EACjC,iCAAkC,IAAI,mCAAiC,CACrE,MAAO,CACL,eAAgB,KAAK,MAAM,eAC3B,YAAa,KAAK,MAAM,WAC1B,EACA,cAAe,KAAK,iBAAiBA,CAAW,CAClD,CAAC,EAAE,iBAAiBA,CAAW,EAC/B,+BAAgC,IAAI,iCAA+B,CACjE,MAAO,CACL,eAAgB,KAAK,MAAM,eAC3B,YAAa,KAAK,MAAM,WAC1B,EACA,cAAe,KAAK,iBAAiBA,CAAW,CAClD,CAAC,EAAE,iBAAiBA,CAAW,CACjC,EACA,OAAQ,CACN,gBAAiB,CAAC,CAAE,QAAAW,CAAQ,IAAMA,EAAQ,eAAe,QAAU,KACnE,YAAa,CAAC,CAAE,QAAAA,CAAQ,IACtBA,EAAQ,MAAM,oBAAoB,aAAe,GACnD,6BAA8B,CAAC,CAAE,QAAAA,CAAQ,IACvCJ,EAAY,oBAAqBI,EAAQ,eAAe,SAAU,EAIpE,4BAA6B,CAAC,CAAE,QAAAA,CAAQ,IACtCJ,EAAY,mBAAoBI,EAAQ,eAAe,SAAU,EAInE,oBAAqB,CAAC,CAAE,QAAAA,CAAQ,IAC9BA,EAAQ,eAAe,kBACzB,aAAc,CAAC,CAAE,QAAAA,CAAQ,IACvBA,EAAQ,eAAe,YAAc,IACzC,EACA,QAAS,CACP,wBAAsB,UAAO,CAC3B,eAAiBI,IAAO,CACtB,GAAGA,EAAE,QAAQ,eACb,MAAO,IAAI,iBACTA,EAAE,MAAM,iBAAoB,MACxBA,EAAE,MAAM,MAAS,QACjB,OAAOA,EAAE,MAAM,KAAQ,CAC7B,CACF,EACF,CAAC,CACH,CACF,CAAC,EAAE,cAAc,CAEf,GAAI,8BACJ,QAAS,uBACT,QAAS,CAAC,CAAE,MAAAhB,CAAM,KAAO,CACvB,MAAAA,EACA,kBAAmB,CACjB,wBAAyB,0BAAwB,KACjD,KAAM,8BAA4B,QACpC,EACA,eAAgB,CACd,MAAO,KACP,UAAW,KACX,UAAW,KACX,aAAc,KAAK,MAAM,YACzB,qBAAsB,OACtB,kBAAmB,GACnB,uBAAwB,CAAC,EACzB,gBAAiB,EACnB,CACF,GACA,OAAQ,CACN,qBAAsB,CAGpB,SAAO,UAAO,CACZ,kBAAmB,CAAC,CAAE,QAAAY,CAAQ,KAAO,CACnC,wBAAyB,0BAAwB,KACjD,KAAMA,EAAQ,MAAM,oBAAoB,YACpC,8BAA4B,eAC5B,8BAA4B,QAClC,EACF,CAAC,EACD,OAAQ,CACN,GAAI,uBACJ,IAAK,uBACL,OAAQ,CACN,CACE,OAAQ,eACR,MAAO,cACP,WAAS,UAAO,CACd,eAAgB,CAAC,CAAE,MAAAK,EAAO,QAAAL,CAAQ,KAAO,CACvC,GAAGA,EAAQ,eACX,aAAcK,EAAM,OAAO,aAC3B,qBAAsBA,EAAM,OAAO,oBACrC,EACF,CAAC,CACH,EACA,CACE,OAAQ,sBACR,WAAS,UAAO,CACd,eAAgB,CAAC,CAAE,MAAAA,EAAO,QAAAL,CAAQ,KAAO,CACvC,GAAGA,EAAQ,eACX,aAAcK,EAAM,OAAO,aAC3B,qBAAsBA,EAAM,OAAO,oBACrC,EACF,CAAC,CACH,CACF,CACF,CACF,EACA,oBAAqB,CACnB,SAAO,UAAO,CACZ,kBAAmB,KAAO,CACxB,wBAAyB,0BAAwB,KACjD,KAAM,8BAA4B,QACpC,EACF,CAAC,EACD,OAAQ,CACN,GAAI,sBACJ,IAAK,sBACL,MAAO,KAAO,CAAE,QAAS,UAAS,GAClC,WAAY,CACV,WAAS,UAAO,CACd,kBAAmB,CAAC,CAAE,MAAAA,CAAM,KAAO,CACjC,GAAGA,EAAM,SAAS,QAAQ,kBAC1B,KAAM,8BAA4B,QACpC,EACF,CAAC,CACH,EACA,OAAQ,CACN,OAAQ,qBACR,WAAS,UAAO,CACd,eAAgB,CAAC,CAAE,MAAAA,EAAO,QAAAL,CAAQ,IAChCK,EAAM,OAAO,OAAO,CAClB,MAAO,IAAML,EAAQ,eACrB,KAAOM,IAAW,CAChB,GAAGN,EAAQ,eACX,MAAAM,CACF,EACF,CAAC,CACL,CAAC,CACH,CACF,CACF,EACA,mBAAoB,CAClB,OAAQ,CACN,CAAE,OAAQ,eAAgB,MAAO,iBAAkB,EACnD,CAAE,OAAQ,OAAQ,CACpB,CACF,EACA,aAAc,CACZ,SAAO,UAAO,CACZ,kBAAmB,KAAO,CACxB,wBAAyB,0BAAwB,KACjD,KAAM,8BAA4B,cACpC,EACF,CAAC,EACD,OAAQ,CACN,GAAI,eACJ,IAAK,eACL,OAAQ,CACN,OAAQ,0BACR,WAAS,UAAO,CACd,eAAgB,CAAC,CAAE,MAAAD,EAAO,QAAAL,CAAQ,OAChC,0BAAuBK,EAAM,MAAM,EAC/B,CACE,GAAGL,EAAQ,eACX,UAAWK,EAAM,OAAO,IAC1B,EACA,CAAE,GAAGL,EAAQ,eAAgB,MAAOK,EAAM,OAAO,KAAM,CAC/D,CAAC,CACH,EACA,QAAS,CACP,OAAQ,QACR,QAAS,sBACX,CACF,CACF,EACA,wBAAyB,CACvB,OAAQ,CACN,CACE,OAAQ,iCACR,MAAO,iBACT,EACA,CAAE,OAAQ,OAAQ,CACpB,CACF,EACA,+BAAgC,CAC9B,OAAQ,CAEN,CACE,OAAQ,UACR,MAAO,8BACT,EAEA,CAAE,OAAQ,gCAAiC,CAC7C,CACF,EAIA,QAAS,CACP,OAAQ,CACN,GAAI,+BACJ,IAAK,+BAGL,MAAO,CAAC,CAAE,QAAAL,CAAQ,KAAO,CACvB,UAAWA,EAAQ,eAAe,UAClC,eAAgBA,EAAQ,MAAM,eAC9B,YAAaA,EAAQ,eAAe,aACpC,cAAeA,EAAQ,MAAM,cAC7B,qBAAsBA,EAAQ,eAAe,oBAC/C,GACA,WAAY,CACV,WAAS,UAAO,CACd,kBAAmB,CAAC,CAAE,MAAAK,CAAM,IAC1BA,EAAM,SAAS,QAAQ,iBAC3B,CAAC,CACH,EACA,OAAQ,CAAE,OAAQ,gCAAiC,CACrD,CACF,EACA,+BAAgC,CAC9B,OAAQ,CACN,CACE,OAAQ,mBACR,SAAO,OAAI,CAAC,kBAAmB,6BAA6B,CAAC,CAC/D,EACA,CAAE,OAAQ,iBAAkB,MAAO,iBAAkB,EACrD,CAAE,OAAQ,OAAQ,CACpB,CACF,EAIA,iBAAkB,CAChB,OAAQ,CACN,GAAI,wCACJ,IAAK,wCACL,MAAO,CAAC,CAAE,QAAAL,CAAQ,KAAO,CACvB,eAAgBA,EAAQ,MAAM,eAC9B,YAAaA,EAAQ,eAAe,aACpC,cAAeA,EAAQ,MAAM,aAC/B,GACA,WAAY,CACV,WAAS,UAAO,CACd,kBAAmB,CAAC,CAAE,MAAAK,CAAM,IAC1BA,EAAM,SAAS,QAAQ,iBAC3B,CAAC,CACH,EAIA,OAAQ,CACN,OAAQ,8BACR,WAAS,UAAO,CACd,eAAgB,CAAC,CAAE,MAAAA,EAAO,QAAAL,CAAQ,IAChCK,EAAM,OAAO,OAAuC,CAClD,MAAQE,IAAa,CACnB,GAAGP,EAAQ,eACX,kBAAmBO,EAAQ,SAAW,WACtC,uBAAwBA,EAAQ,uBAChC,gBAAiBA,EAAQ,eAC3B,GAGA,KAAOD,IAAW,CAAE,GAAGN,EAAQ,eAAgB,MAAAM,CAAM,EACvD,CAAC,CACL,CAAC,CACH,EACA,QAAS,CACP,OAAQ,iBACR,QAAS,CAAC,CAAE,MAAAD,CAAM,IAChBX,EAAO,KACL,+DACA,CAAE,KAAM,CAAE,MAAO,OAAOW,EAAM,KAAK,CAAE,CAAE,CACzC,CACJ,CACF,CACF,EACA,4BAA6B,CAC3B,OAAQ,CAEN,CACE,OAAQ,sBACR,SAAO,OAAI,CAAC,kBAAmB,qBAAqB,CAAC,CACvD,EAEA,CAAE,OAAQ,iBAAkB,MAAO,iBAAkB,EAErD,CAAE,OAAQ,OAAQ,CACpB,CACF,EAKA,oBAAqB,CACnB,OAAQ,CACN,GAAI,mCACJ,IAAK,mCACL,MAAO,CAAC,CAAE,QAAAL,CAAQ,IAAM,CACtB,KAAM,CAAE,OAAAC,EAAQ,eAAAC,CAAe,EAAIH,EAAqBC,CAAO,EAC/D,MAAO,CACL,eAAgBA,EAAQ,MAAM,eAC9B,YAAaA,EAAQ,eAAe,aACpC,OAAAC,EACA,eAAAC,EACA,cACEF,EAAQ,MAAM,oBAAoB,8BAC9B,cACN,iBAAkBA,EAAQ,MAAM,gBAClC,CACF,EACA,WAAY,CACV,WAAS,UAAO,CACd,kBAAmB,CAAC,CAAE,MAAAK,CAAM,IAC1BA,EAAM,SAAS,QAAQ,iBAC3B,CAAC,CACH,EACA,OAAQ,CACN,OAAQ,iCACR,WAAS,UAAO,CACd,eAAgB,CAAC,CAAE,MAAAA,EAAO,QAAAL,CAAQ,IAChCK,EAAM,OAAO,OAAuC,CAIlD,MAAQG,GACNA,IAAwB,WACpBR,EAAQ,eACR,CACE,GAAGA,EAAQ,eACX,UAAWQ,CACb,EAEN,KAAOF,IAAW,CAAE,GAAGN,EAAQ,eAAgB,MAAAM,CAAM,EACvD,CAAC,CACL,CAAC,CACH,CACF,CACF,EACA,+BAAgC,CAC9B,OAAQ,CAEN,CAAE,OAAQ,SAAU,MAAO,cAAe,EAE1C,CAAE,OAAQ,iBAAkB,MAAO,iBAAkB,EAErD,CAAE,OAAQ,QAAS,CACrB,CACF,EAIA,eAAgB,CACd,OAAQ,CACN,GAAI,sCACJ,IAAK,sCACL,MAAO,CAAC,CAAE,QAAAN,CAAQ,KAAO,CACvB,eAAgBA,EAAQ,MAAM,eAC9B,YAAaA,EAAQ,eAAe,aACpC,cAAeA,EAAQ,MAAM,cAC7B,UAAWA,EAAQ,eAAe,UAClC,OAAQb,EAAoBa,EAAQ,KAAK,EACzC,kBACEA,EAAQ,MAAM,oBAAoB,4BACtC,GACA,WAAY,CACV,WAAS,UAAO,CACd,kBAAmB,CAAC,CAAE,MAAAK,CAAM,IAC1BA,EAAM,SAAS,QAAQ,iBAC3B,CAAC,CACH,EACA,OAAQ,CAAE,OAAQ,QAAS,EAC3B,QAAS,CAAE,OAAQ,QAAS,CAC9B,CACF,EAQA,OAAQ,CACN,OAAQ,CACN,IAAK,aACL,MAAO,CAAC,CAAE,QAAAL,CAAQ,IAAM,CACtB,MAAMS,EAAepB,EAAY,sBAAsB,EACjDqB,EACJD,EAAa,mBACb,yBAAuB,UAClBA,EAAa,iBAAiB,IAAM,KACrC,KACN,MAAO,CACL,YACET,EAAQ,eAAe,YAAc,MACrCA,EAAQ,eAAe,QAAU,KACnC,aAAcA,EAAQ,eAAe,aACrC,uBACEA,EAAQ,eAAe,uBACzB,gBAAiBA,EAAQ,eAAe,gBACxC,cAAeA,EAAQ,MAAM,cAC7B,iBAAkBA,EAAQ,eAAe,UAAW,QACpD,cAAeS,EAAa,cAC5B,cAAAC,EACA,cAAAjB,CACF,CACF,EACA,OAAQ,CACN,CACE,OAAQ,6BACR,MAAO,cACT,EACA,CACE,OAAQ,QACR,MAAO,CAAC,CAAE,QAAAO,CAAQ,IAAMA,EAAQ,eAAe,QAAU,IAC3D,EACA,CAAE,OAAQ,mBAAoB,CAChC,EACA,QAAS,CACP,CACE,OAAQ,6BACR,MAAO,cACT,EACA,CACE,OAAQ,QACR,MAAO,CAAC,CAAE,QAAAA,CAAQ,IAAMA,EAAQ,eAAe,QAAU,IAC3D,EACA,CAAE,OAAQ,mBAAoB,CAChC,CACF,CACF,EAGA,kBAAmB,CACjB,OAAQ,CACN,GAAI,iCACJ,IAAK,iCACL,MAAO,CAAC,CAAE,QAAAA,CAAQ,IAAM,CACtB,KAAM,CAAE,OAAAC,EAAQ,eAAAC,CAAe,EAAIH,EAAqBC,CAAO,EAC/D,MAAO,CACL,eAAgBA,EAAQ,MAAM,eAC9B,YAAaA,EAAQ,eAAe,aACpC,OAAAC,EACA,eAAAC,EACA,cACEF,EAAQ,MAAM,oBAAoB,8BAC9B,cACN,iBAAkBA,EAAQ,MAAM,gBAClC,CACF,EACA,WAAY,CACV,WAAS,UAAO,CACd,kBAAmB,CAAC,CAAE,MAAAK,CAAM,IAC1BA,EAAM,SAAS,QAAQ,iBAC3B,CAAC,CACH,EACA,OAAQ,CACN,OAAQ,6BACR,WAAS,UAAO,CACd,eAAgB,CAAC,CAAE,MAAAA,EAAO,QAAAL,CAAQ,IAChCK,EAAM,OAAO,OAAuC,CAClD,MAAQM,IAAe,CACrB,GAAGX,EAAQ,eACX,UAAAW,CACF,GACA,KAAOL,IAAW,CAAE,GAAGN,EAAQ,eAAgB,MAAAM,CAAM,EACvD,CAAC,CACL,CAAC,CACH,CACF,CACF,EACA,2BAA4B,CAC1B,OAAQ,CACN,CAAE,MAAO,kBAAmB,OAAQ,SAAU,EAC9C,CAAE,OAAQ,OAAQ,CACpB,CACF,EACA,QAAS,CAAE,KAAM,OAAQ,EACzB,MAAO,CAAE,KAAM,OAAQ,CACzB,EACA,OAAQ,CAAC,CAAE,QAAAN,CAAQ,IACjBA,EAAQ,eAAe,aACnB,SAAMA,EAAQ,eAAe,SAAS,KACtC,QACEA,EAAQ,eAAe,OACrB,IAAI,iBAAe,iCAAiC,CACxD,CACR,CAAC,CACH,CAEA,oBAAoBX,EAA+C,CAwBjE,MAAO,CACL,qBAxB2B,SAAY,CACvC,GAAI,CACF,OAAO,IAAI,6BAA2B,EAAE,UACtC,KAAK,MAAM,WACb,CACF,OAASiB,EAAO,CACd,YAAK,iBAAiBjB,CAAW,EAAE,sBAAsB,EAAE,KACzD,kFACA,CAAE,KAAM,CAAE,MAAO,OAAOiB,CAAK,CAAE,CAAE,CACnC,EACO,CACL,aAAc,KAAK,MAAM,YACzB,qBAAsB,MACxB,CACF,CACF,EAUE,aARmB,SACnBjB,EAAY,YAAY,IAAI,4BAA4B,EAQxD,WANiB,MAAOuB,GACxB,IAAI,0BAAwBA,EAAK,KAAK,EAAE,IAAI,CAM9C,CACF,CACF",
6
- "names": ["SignTransactionDeviceAction_exports", "__export", "SignTransactionDeviceAction", "__toCommonJS", "import_device_management_kit", "import_purify_ts", "import_xstate", "import_SignTransactionDeviceActionTypes", "import_GetAppConfigurationCommand", "import_constants", "import_TransactionInputNormaliser", "import_SolanaApplicationResolver", "import_SolanaSigningReportTask", "import_ProvisionBasicClearSignDeviceAction", "import_ProvisionGenericClearSignDeviceAction", "import_ProvisionTransactionCheckDeviceAction", "import_SignBasicClearSignDeviceAction", "import_SignGenericClearSignDeviceAction", "resolveSolanaRpcUrl", "input", "internalApi", "normalizeTransaction", "getAppConfig", "reportSign", "loggerFactory", "logger", "disabledFeaturesSet", "isSupported", "feature", "appConfig", "resolveRefreshSource", "context", "rpcUrl", "fetchBlockhash", "refreshBlockhash", "_", "event", "error", "outcome", "signatureOrDegraded", "sessionState", "deviceVersion", "signature", "arg0"]
4
+ "sourcesContent": ["import {\n type CommandResult,\n type DeviceActionStateMachine,\n DeviceSessionStateType,\n type InternalApi,\n isSuccessCommandResult,\n OpenAppDeviceAction,\n type StateMachineTypes,\n UnknownDAError,\n UserInteractionRequired,\n XStateDeviceAction,\n} from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { and, assign, fromPromise, setup } from \"xstate\";\n\nimport {\n type SignTransactionDAError,\n type SignTransactionDAInput,\n type SignTransactionDAIntermediateValue,\n type SignTransactionDAInternalState,\n type SignTransactionDAOutput,\n signTransactionDAStateSteps,\n} from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { type AppConfiguration } from \"@api/model/AppConfiguration\";\nimport { GetAppConfigurationCommand } from \"@internal/app-binder/command/GetAppConfigurationCommand\";\nimport { type SolanaAppErrorCodes } from \"@internal/app-binder/command/utils/SolanaApplicationErrors\";\nimport {\n APP_NAME,\n COMPUTE_BUDGET_PROGRAM_ID,\n} from \"@internal/app-binder/constants\";\nimport { resolveBasicFlowRules } from \"@internal/app-binder/generic-flow-router/basicFlowRules\";\nimport { GenericFlowRouter } from \"@internal/app-binder/generic-flow-router/GenericFlowRouter\";\nimport {\n type NormalizedTransactionInput,\n TransactionInputNormaliser,\n} from \"@internal/app-binder/services/TransactionInputNormaliser\";\nimport { TransactionParser } from \"@internal/app-binder/services/utils/TransactionParser\";\nimport {\n isSolanaSignerFeatureSupported,\n type SolanaSignerFeaturesNames,\n} from \"@internal/app-binder/SolanaApplicationResolver\";\nimport {\n SolanaSigningReportTask,\n type SolanaSigningReportTaskArgs,\n} from \"@internal/app-binder/task/SolanaSigningReportTask\";\n\nimport { ProvisionBasicClearSignDeviceAction } from \"./ProvisionBasicClearSignDeviceAction\";\nimport { ProvisionGenericClearSignDeviceAction } from \"./ProvisionGenericClearSignDeviceAction\";\nimport { ProvisionTransactionCheckDeviceAction } from \"./ProvisionTransactionCheckDeviceAction\";\nimport { SignBasicClearSignDeviceAction } from \"./SignBasicClearSignDeviceAction\";\nimport { SignGenericClearSignDeviceAction } from \"./SignGenericClearSignDeviceAction\";\n\n/**\n * Per-sign `transactionOptions.solanaRPCURL` overrides the builder default\n * (`input.solanaRPCURL`) for inspection and delayed signing.\n */\nfunction resolveSolanaRpcUrl(\n input: SignTransactionDAInput,\n): string | undefined {\n return input.transactionOptions?.solanaRPCURL ?? input.solanaRPCURL;\n}\n\nexport type MachineDependencies = {\n readonly normalizeTransaction: () => Promise<NormalizedTransactionInput>;\n readonly getAppConfig: () => Promise<\n CommandResult<AppConfiguration, SolanaAppErrorCodes>\n >;\n readonly reportSign: (arg0: {\n input: SolanaSigningReportTaskArgs;\n }) => Promise<void>;\n readonly resolveSigningRoute: (arg0: {\n input: { messageBytes: Uint8Array };\n }) => Promise<string | null>;\n};\n\nexport class SignTransactionDeviceAction extends XStateDeviceAction<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n> {\n makeStateMachine(\n internalApi: InternalApi,\n ): DeviceActionStateMachine<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n > {\n type types = StateMachineTypes<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n >;\n\n const {\n normalizeTransaction,\n getAppConfig,\n reportSign,\n resolveSigningRoute,\n } = this.extractDependencies(internalApi);\n\n const loggerFactory = this.getLoggerFactory(internalApi);\n const logger = loggerFactory(\"SignTransactionDeviceAction\");\n\n const disabledFeaturesSet:\n | ReadonlySet<SolanaSignerFeaturesNames>\n | undefined = this.input.disabledFeatures\n ? new Set(this.input.disabledFeatures)\n : undefined;\n\n const isSupported = (\n feature: SolanaSignerFeaturesNames,\n appConfig: AppConfiguration,\n ): boolean =>\n isSolanaSignerFeatureSupported(\n internalApi,\n feature,\n appConfig,\n disabledFeaturesSet,\n );\n\n // Blockhash refresh is opt-in and shared by both terminal-sign machines:\n // only when `delayed: true` is requested, a blockhash source exists, and\n // the app supports delayed signing. When it isn't allowed we withhold the\n // source so the signing machine signs the original transaction.\n //\n // Template-based swaps (LiFi, etc.) always sign with the original blockhash:\n // CAL-provided e016 descriptors are computed for the original transaction, so\n // refreshing the blockhash would invalidate them and make the Exchange app\n // reject the sign with a descriptor-mismatch error.\n const resolveRefreshSource = (\n context: types[\"context\"],\n ): {\n rpcUrl: string | undefined;\n fetchBlockhash: (() => Promise<Uint8Array>) | undefined;\n } => {\n const rpcUrl = resolveSolanaRpcUrl(context.input);\n const fetchBlockhash = context.input.transactionOptions?.fetchBlockhash;\n const isTemplateSwap =\n !!context.input.transactionOptions?.transactionResolutionContext\n ?.templateId;\n const refreshBlockhash =\n !isTemplateSwap &&\n context.input.transactionOptions?.delayed === true &&\n !!(rpcUrl || fetchBlockhash) &&\n isSupported(\"delayedSigning\", context._internalState.appConfig!);\n return {\n rpcUrl: refreshBlockhash ? rpcUrl : undefined,\n fetchBlockhash: refreshBlockhash ? fetchBlockhash : undefined,\n };\n };\n\n return setup({\n types: {\n input: {} as types[\"input\"],\n context: {} as types[\"context\"],\n output: {} as types[\"output\"],\n },\n actors: {\n normalizeTransaction: fromPromise(normalizeTransaction),\n reportSign: fromPromise(reportSign),\n resolveSigningRoute: fromPromise(resolveSigningRoute),\n openAppStateMachine: new OpenAppDeviceAction({\n input: { appName: APP_NAME },\n }).makeStateMachine(internalApi),\n getAppConfig: fromPromise(getAppConfig),\n transactionCheckStateMachine: new ProvisionTransactionCheckDeviceAction(\n {\n input: {\n derivationPath: this.input.derivationPath,\n transaction: this.input.transaction,\n contextModule: this.input.contextModule,\n },\n loggerFactory: this.getLoggerFactory(internalApi),\n },\n ).makeStateMachine(internalApi),\n provisionGenericClearSignStateMachine:\n new ProvisionGenericClearSignDeviceAction({\n input: {\n derivationPath: this.input.derivationPath,\n transaction: this.input.transaction,\n contextModule: this.input.contextModule,\n },\n loggerFactory: this.getLoggerFactory(internalApi),\n }).makeStateMachine(internalApi),\n provisionBasicClearSignStateMachine:\n new ProvisionBasicClearSignDeviceAction({\n // `appConfig` is unknown at construction; it is supplied at invoke\n // time (see the BasicClearSign state input below).\n input: {\n derivationPath: this.input.derivationPath,\n transaction: this.input.transaction,\n contextModule: this.input.contextModule,\n },\n loggerFactory: this.getLoggerFactory(internalApi),\n }).makeStateMachine(internalApi),\n signGenericClearSignStateMachine: new SignGenericClearSignDeviceAction({\n input: {\n derivationPath: this.input.derivationPath,\n transaction: this.input.transaction,\n },\n loggerFactory: this.getLoggerFactory(internalApi),\n }).makeStateMachine(internalApi),\n signBasicClearSignStateMachine: new SignBasicClearSignDeviceAction({\n input: {\n derivationPath: this.input.derivationPath,\n transaction: this.input.transaction,\n },\n loggerFactory: this.getLoggerFactory(internalApi),\n }).makeStateMachine(internalApi),\n },\n guards: {\n noInternalError: ({ context }) => context._internalState.error === null,\n skipOpenApp: ({ context }) =>\n context.input.transactionOptions?.skipOpenApp || false,\n isTransactionChecksSupported: ({ context }) =>\n isSupported(\"transactionChecks\", context._internalState.appConfig!),\n // Generic clear-signing terminates via SIGN MESSAGE DELAYED (0x09) on\n // the original message, so it only needs the capability bit \u2014 no RPC /\n // blockhash prerequisite.\n isGenericClearSignAvailable: ({ context }) =>\n isSupported(\"genericClearSign\", context._internalState.appConfig!),\n // Generic clear-sign child streamed + finalized the descriptors (its\n // Right(\"prepared\") outcome was folded into the context by the\n // GenericClearSign onDone).\n isClearSignPrepared: ({ context }) =>\n context._internalState.clearSignPrepared,\n hasSignature: ({ context }) =>\n context._internalState.signature !== null,\n hasBasicFlowRule: ({ context }) =>\n context._internalState.basicFlowRuleId !== null,\n },\n actions: {\n assignErrorFromEvent: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: new UnknownDAError(\n _.event[\"error\"] instanceof Error\n ? _.event[\"error\"].message\n : String(_.event[\"error\"]),\n ),\n }),\n }),\n },\n }).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QGUCWUB2AVATgQw1jwGMAXVAewwBEwA3VYsAQTMowDoBJDVcvADbJSeUmADEAbQAMAXUSgADhVh92CkAA9EARgDsAZg4AOAJzSAbAYAsOgKymdN08YA0IAJ67LxjnbvWxjoW-kGGxgC+Ee5omLgERGxUtAxMrORU3Lz8QiJiUjrySCDKqhkYGtoI+kZmljb2js5unojmRgbS1haG0o5OllEx6Nj4hCTlKYwsSZwA8opgGMyKilNps+IQVGAcqBh0FADWuxSLy6vComAAsiQAFvtgMkVKKmpUlYh6dgBMHL8bJ0LKY7AZOr87O4vAhjHpTCZfkEDHo+nprL8ekMQLFRgkJux1jNyhwFksVooAEpwACuAlIAGF7mBiEcpHINKUPhVilUdL9gn5TCjfr9rNJ+X8WjDzAi9AKDGLwb94RZrNjcfFxrMiel2KTzhTqbA6YzmayCq8Su9yl9qgKLEKRWKJZCkdDEEE-NIffLAX8LPUNSMtYlJvRpnrMgBxMCkCkMqgAM3QWx2ewOx12MHjq0TGBTUBenJt6l5uj9JmsBjhxjhdn0pg91S61gB1kCPT0aosxiRwbiYzDhIjGxJsdzinzhfEYBwOAoOA4igEoiTi4Athwcwnk+hi8Uubby9VK8Zq7X643m78fRwfT7+fCxQ2B3jteHUsT9RPdwX0MappMiybIHm8ZRlqAVQCuYHAWJClj8qYSpQq0LZ6HoHA2D2PpwuCphvqGBLJKO34xnGf6FoB9LARakiFCWEGfCeMHSHBCEWEhKHNt2dj3ghdh9FYgLGHYhFDsRNCkVGnC-nme5QNRZogVIvxWkekFaIgrHsYJnG-Mh1aoTCDQcKYvG9sYaIuJE0Q4iGEk6tJswcAA6mAABGBi0UcsALKQPBphguz7IcJwcAA7p53nmkc-k8GB1pMTyUHaRh-zdHCpjVtInSic2dZGH8gmoi4lmQuJ+JOV+MludFPl+YoAUYLO86Lsuq6kOuOBblFXk+fFGCJRpzGpQgKryhwmXwjleXGd4k3WGCOhWd29g-BYlUfiONUue5-WxY1zVKeImiwHkux4EmYg4AAFNIACU4iao5n6Rnt9WHYNSnDaWo1aQgiqQhwqqmNlxUqrlzaOAi1h6H2KLLZCK1bcOJG7SSPmxsFOCMAyAhgHgOC4sgNKrIuYgQOy6l-SlAMGBYgYg6YjM-NYoLSGC80IMh-yBgYwTwqJ5l2HoqOSbqLlY0sc54wTRMk2Tyg4JTlqMdydoM0zqo9AEHNc82elTd28F1qtnTouL1XvZjsXY7LxD44TxMjKT5Mq5Aqk08lmuM2xOts-rBjc90bFwyEZvgh2KpiXZL1VW9Y4-jLuOO-LLuYEFIWZuFMA43LzskxddzEI8wW-T7J4YmDJjooYir2DY0OdMbjNiuiGIqgRccOQnO028n+dp4XIxZxmYXZinBcK67xcPE89HexrVcGQicJw8qjfWM28FtuZjOBOY1borZwyDn36MD+RQ9OzPmfbMF49ZtuU-D3fGBXGIJdl88anq8eY1q5rzrpvME280J1n+PvUWDgVril+FbROZFZKv1vhnFqc4FxLhXGuTcL8b7pyLtcb+C8OSHlpnaIBtcN4NzATxeGAJMRWF7EqCUBhEH9yTpkZA9xBACAoBFNBuIx6hWfrAXhAh+GCMIbPYh89y5kPAsvMaxUdB+G6I4eEAtpB1m5kEXwDMXDaN7HoHQwQOGXy4ZwHhfCBFCNHpg9qOCup4PEbY6RI9MCf1uPI54iikrKIBqo9RIJGzaN0fQtixgQTw1FBiXRYse7n22pY5BHAsBzg3PsQQwiH7ZwnhwVQmB9hQDJPgcosBvEkIUUvABQTsqYWkBhdENhzxql+DxUEcFqyr26Bibs3cz7vjRlJDG+p44pIwEpHy1N-6aSqCEQUQIGbymMOCMEBVgZgjVNEkELNuixyGURa2ViOATJGdM2KatyGVzGosx0yyehInWQYehCJtkdkZn8YO0Soh2QwBQCAcANDnIls5OpI06ZVAALQWGbLC+8D4kXIrVBY0ZV9OA8DUDki6cz-pVAxM2HQlg2I1hmtIES61Bn2WSSMyWJIyQXDWOCzSkLNZ2EdICasAs-imIMKCAq-g-ABHgv0Wwok0X0v1Iyo0tIaKxTxVC7wFL7z2EEsEUWcNuzQwlMKjewozDNJ0JKll5FJzTnQIqu0OhxSYQbKLLogJ4agleWhYlxKTB1iaYZDsARDk0uGWCsZZrKIATlcpVkVqTw6GFP7FmoIBQrTWToIllg+LmRtaiTmqJlQmuDZwfaMUQJHR4FGsaYonAg1yhCBs2VGapv5feFm-K4lOA3nmjFdUDrFu+uGstAMDJmA4MS8GQRRSKnMgVbKZl4Z9H5KKJEgQO2nOlgQzxH8lYU0gP2qoUc+JjvZhKZC8E4VoX6Iw5EfY4nVmNUkwNJy0n21TvYzAO7EA1jWdQn4GEzD6HlAVOEJgwS3lwvG9hd7jlINqjYyRdiZGvpuYEglok+Iit3lYfoKa0ImzMsBroyF9BxOXWkjJPVslCBGG+hA-gGz3lncLMUBlXUwnhm2Qx0SNrBHMtS0FD7oO90mZckCVH4J-DMgKeUIQwHswKvoLCeyJQbXgvKYj0GaTECYLAeAiG6kLPlJhTEgR5QNxVMxz0oo-AM26PBYI-KzGqZcgAUTajgET+mAQ7OMwKUzzYlqYXDhytZ6q8Lqj+UAA */\n id: \"SignTransactionDeviceAction\",\n initial: \"NormalizeTransaction\",\n context: ({ input }) => ({\n input,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.OPEN_APP,\n },\n _internalState: {\n error: null,\n signature: null,\n appConfig: null,\n messageBytes: this.input.transaction,\n serializedForTxCheck: undefined,\n clearSignPrepared: false,\n unrecognizedProgramIds: [],\n staleDescriptor: false,\n basicFlowRuleId: null,\n },\n }),\n states: {\n NormalizeTransaction: {\n // Emit the correct first step immediately so the snapshot produced\n // while the actor runs already reflects where we are headed.\n entry: assign({\n intermediateValue: ({ context }) => ({\n requiredUserInteraction: UserInteractionRequired.None,\n step: context.input.transactionOptions?.skipOpenApp\n ? signTransactionDAStateSteps.GET_APP_CONFIG\n : signTransactionDAStateSteps.OPEN_APP,\n }),\n }),\n invoke: {\n id: \"normalizeTransaction\",\n src: \"normalizeTransaction\",\n onDone: [\n {\n target: \"GetAppConfig\",\n guard: \"skipOpenApp\",\n actions: assign({\n _internalState: ({ event, context }) => ({\n ...context._internalState,\n messageBytes: event.output.messageBytes,\n serializedForTxCheck: event.output.serializedForTxCheck,\n }),\n }),\n },\n {\n target: \"OpenAppDeviceAction\",\n actions: assign({\n _internalState: ({ event, context }) => ({\n ...context._internalState,\n messageBytes: event.output.messageBytes,\n serializedForTxCheck: event.output.serializedForTxCheck,\n }),\n }),\n },\n ],\n },\n },\n OpenAppDeviceAction: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.OPEN_APP,\n }),\n }),\n invoke: {\n id: \"openAppStateMachine\",\n src: \"openAppStateMachine\",\n input: () => ({ appName: APP_NAME }),\n onSnapshot: {\n actions: assign({\n intermediateValue: ({ event }) => ({\n ...event.snapshot.context.intermediateValue,\n step: signTransactionDAStateSteps.OPEN_APP,\n }),\n }),\n },\n onDone: {\n target: \"OpenAppResultCheck\",\n actions: assign({\n _internalState: ({ event, context }) =>\n event.output.caseOf({\n Right: () => context._internalState,\n Left: (error) => ({\n ...context._internalState,\n error,\n }),\n }),\n }),\n },\n },\n },\n OpenAppResultCheck: {\n always: [\n { target: \"GetAppConfig\", guard: \"noInternalError\" },\n { target: \"Error\" },\n ],\n },\n GetAppConfig: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.GET_APP_CONFIG,\n }),\n }),\n invoke: {\n id: \"getAppConfig\",\n src: \"getAppConfig\",\n onDone: {\n target: \"GetAppConfigResultCheck\",\n actions: assign({\n _internalState: ({ event, context }) =>\n isSuccessCommandResult(event.output)\n ? {\n ...context._internalState,\n appConfig: event.output.data,\n }\n : { ...context._internalState, error: event.output.error },\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n GetAppConfigResultCheck: {\n always: [\n {\n target: \"CheckTransactionCheckSupported\",\n guard: \"noInternalError\",\n },\n { target: \"Error\" },\n ],\n },\n CheckTransactionCheckSupported: {\n always: [\n // Feature supported: delegate opt-in + provide to the child machine.\n {\n target: \"TxCheck\",\n guard: \"isTransactionChecksSupported\",\n },\n // Feature not supported: skip the child machine entirely.\n { target: \"CheckGenericClearSignSupported\" },\n ],\n },\n // Web3-checks child machine: handles opt-in prompt and scan-descriptor\n // provisioning. Only reached when the feature is supported; opt-in and\n // provide decisions are made internally.\n TxCheck: {\n invoke: {\n id: \"transactionCheckStateMachine\",\n src: \"transactionCheckStateMachine\",\n // The scan descriptor must hash the exact message the device\n // reviews, i.e. the original bytes (blockhash included).\n input: ({ context }) => ({\n appConfig: context._internalState.appConfig!,\n derivationPath: context.input.derivationPath,\n transaction: context._internalState.messageBytes,\n contextModule: context.input.contextModule,\n serializedForTxCheck: context._internalState.serializedForTxCheck,\n }),\n onSnapshot: {\n actions: assign({\n intermediateValue: ({ event }) =>\n event.snapshot.context.intermediateValue,\n }),\n },\n // The opt-in has now been answered (or skipped): record the outcome\n // so the re-provision after a generic fallback never prompts again.\n onDone: {\n target: \"CheckGenericClearSignSupported\",\n actions: assign({\n _internalState: ({ event, context }) =>\n event.output.caseOf<SignTransactionDAInternalState>({\n Right: ({ transactionChecksEnabled }) => ({\n ...context._internalState,\n appConfig: {\n ...context._internalState.appConfig!,\n transactionChecksEnabled,\n transactionChecksOptIn: true,\n },\n }),\n Left: () => context._internalState,\n }),\n }),\n },\n },\n },\n CheckGenericClearSignSupported: {\n always: [\n {\n target: \"ResolveSigningRoute\",\n guard: and([\"noInternalError\", \"isGenericClearSignAvailable\"]),\n },\n { target: \"BasicClearSign\", guard: \"noInternalError\" },\n { target: \"Error\" },\n ],\n },\n // Basic-flow rules: a matching transaction skips generic clear-sign\n // and goes straight to the basic flow, where the app parses it\n // natively. Generic never ran, so the tx-check descriptor provided in\n // TxCheck is still in place and no re-provision is needed. The actor\n // never rejects; onError is purely defensive.\n ResolveSigningRoute: {\n invoke: {\n id: \"resolveSigningRoute\",\n src: \"resolveSigningRoute\",\n input: ({ context }) => ({\n messageBytes: context._internalState.messageBytes,\n }),\n onDone: {\n target: \"CheckSigningRoute\",\n actions: assign({\n _internalState: ({ event, context }) => ({\n ...context._internalState,\n basicFlowRuleId: event.output,\n }),\n }),\n },\n onError: { target: \"GenericClearSign\" },\n },\n },\n CheckSigningRoute: {\n always: [\n {\n target: \"BasicClearSign\",\n guard: \"hasBasicFlowRule\",\n actions: ({ context }) =>\n logger.info(\n \"[ClearSign] basic-flow rule matched; skipping generic clear-sign\",\n { data: { rule: context._internalState.basicFlowRuleId } },\n ),\n },\n { target: \"GenericClearSign\" },\n ],\n },\n // Generic clear-sign child: streams + validates the descriptors (no\n // signing, no UI). `\"prepared\"` runs the generic terminal sign;\n // `\"degraded\"` falls back to legacy basic provisioning.\n GenericClearSign: {\n invoke: {\n id: \"provisionGenericClearSignStateMachine\",\n src: \"provisionGenericClearSignStateMachine\",\n input: ({ context }) => ({\n derivationPath: context.input.derivationPath,\n transaction: context._internalState.messageBytes,\n contextModule: context.input.contextModule,\n }),\n onSnapshot: {\n actions: assign({\n intermediateValue: ({ event }) =>\n event.snapshot.context.intermediateValue,\n }),\n },\n // Fold the child's Either output into the context here (where\n // xstate types `event.output`), then branch on the context in\n // CheckGenericClearSignResult \u2014 no event cast in the guards.\n onDone: {\n target: \"CheckGenericClearSignResult\",\n actions: assign({\n _internalState: ({ event, context }) =>\n event.output.caseOf<SignTransactionDAInternalState>({\n Right: (outcome) => ({\n ...context._internalState,\n clearSignPrepared: outcome.status === \"prepared\",\n unrecognizedProgramIds: outcome.unrecognizedProgramIds,\n staleDescriptor: outcome.staleDescriptor,\n }),\n // Left never occurs (the prepare phase has no UI), but stay\n // defensive and surface it.\n Left: (error) => ({ ...context._internalState, error }),\n }),\n }),\n },\n onError: {\n target: \"CheckTxCheckReprovision\",\n actions: ({ event }) =>\n logger.info(\n \"[ClearSign] generic clear-sign threw; falling back to legacy\",\n { data: { error: String(event.error) } },\n ),\n },\n },\n },\n CheckGenericClearSignResult: {\n always: [\n // Prepared: run the generic terminal sign; report fires after.\n {\n target: \"GenericTerminalSign\",\n guard: and([\"noInternalError\", \"isClearSignPrepared\"]),\n },\n // Degraded (Right(\"degraded\")): fall back to the legacy path.\n { target: \"CheckTxCheckReprovision\", guard: \"noInternalError\" },\n // Defensive: surface an unexpected Left.\n { target: \"Error\" },\n ],\n },\n // Generic terminal sign: prompt + best-effort blockhash refresh +\n // delayed sign. A user cancel / signing failure surfaces; a non-cancel\n // prompt failure resolves to `\"degraded\"` and falls back to the legacy\n // basic path.\n GenericTerminalSign: {\n invoke: {\n id: \"signGenericClearSignStateMachine\",\n src: \"signGenericClearSignStateMachine\",\n input: ({ context }) => {\n const { rpcUrl, fetchBlockhash } = resolveRefreshSource(context);\n return {\n derivationPath: context.input.derivationPath,\n transaction: context._internalState.messageBytes,\n rpcUrl,\n fetchBlockhash,\n userInputType:\n context.input.transactionOptions?.transactionResolutionContext\n ?.userInputType,\n blockhashService: context.input.blockhashService,\n };\n },\n onSnapshot: {\n actions: assign({\n intermediateValue: ({ event }) =>\n event.snapshot.context.intermediateValue,\n }),\n },\n onDone: {\n target: \"CheckGenericTerminalSignResult\",\n actions: assign({\n _internalState: ({ event, context }) =>\n event.output.caseOf<SignTransactionDAInternalState>({\n // Right(Signature) on success; Right(\"degraded\") when the\n // prompt failed for a non-cancel reason (leave signature\n // unset so the result check falls back to legacy).\n Right: (signatureOrDegraded) =>\n signatureOrDegraded === \"degraded\"\n ? context._internalState\n : {\n ...context._internalState,\n signature: signatureOrDegraded,\n },\n // Left: the user cancelled or signing failed; surface it.\n Left: (error) => ({ ...context._internalState, error }),\n }),\n }),\n },\n },\n },\n CheckGenericTerminalSignResult: {\n always: [\n // Signed: report (isBlindSign: false) then surface result.\n { target: \"Report\", guard: \"hasSignature\" },\n // Degraded (no signature, no error): fall back to the legacy path.\n { target: \"CheckTxCheckReprovision\", guard: \"noInternalError\" },\n // User cancel / signing failure: report (isBlindSign: false) then surface error.\n { target: \"Report\" },\n ],\n },\n // A failed generic clear-sign attempt wipes the device's provisioned\n // context, including the tx-check descriptor sent in TxCheck. Provide\n // it again before falling back to the basic path. The opt-in was\n // already answered in TxCheck, so this pass never prompts.\n CheckTxCheckReprovision: {\n always: [\n {\n target: \"TxCheckReprovision\",\n guard: \"isTransactionChecksSupported\",\n },\n { target: \"BasicClearSign\" },\n ],\n },\n TxCheckReprovision: {\n invoke: {\n id: \"transactionCheckReprovisionStateMachine\",\n src: \"transactionCheckStateMachine\",\n input: ({ context }) => ({\n appConfig: context._internalState.appConfig!,\n derivationPath: context.input.derivationPath,\n transaction: context._internalState.messageBytes,\n contextModule: context.input.contextModule,\n serializedForTxCheck: context._internalState.serializedForTxCheck,\n }),\n onSnapshot: {\n actions: assign({\n intermediateValue: ({ event }) =>\n event.snapshot.context.intermediateValue,\n }),\n },\n onDone: { target: \"BasicClearSign\" },\n },\n },\n // Legacy SPL / token provisioning child (best-effort, never signs). It\n // streams descriptors; control always proceeds to the basic terminal\n // sign.\n BasicClearSign: {\n invoke: {\n id: \"provisionBasicClearSignStateMachine\",\n src: \"provisionBasicClearSignStateMachine\",\n input: ({ context }) => ({\n derivationPath: context.input.derivationPath,\n transaction: context._internalState.messageBytes,\n contextModule: context.input.contextModule,\n appConfig: context._internalState.appConfig!,\n rpcUrl: resolveSolanaRpcUrl(context.input),\n resolutionContext:\n context.input.transactionOptions?.transactionResolutionContext,\n }),\n onSnapshot: {\n actions: assign({\n intermediateValue: ({ event }) =>\n event.snapshot.context.intermediateValue,\n }),\n },\n onDone: { target: \"Report\" },\n onError: { target: \"Report\" },\n },\n },\n // Single report state for all paths.\n // isBlindSign is derived from context: false when a signature or error is\n // already set (clear-sign path \u2014 success or cancel) or when a\n // basic-flow rule routed the transaction (the app clear-signs it\n // natively), true otherwise (basic path, neither has run yet).\n // Routes to: SignTransactionResultCheck (clear-sign success),\n // Error (clear-sign cancel/failure), or\n // BasicTerminalSign (basic path).\n Report: {\n invoke: {\n src: \"reportSign\",\n input: ({ context }) => {\n const sessionState = internalApi.getDeviceSessionState();\n const deviceVersion =\n sessionState.sessionStateType !==\n DeviceSessionStateType.Connected\n ? (sessionState.firmwareVersion?.os ?? null)\n : null;\n return {\n isBlindSign:\n context._internalState.basicFlowRuleId === null &&\n context._internalState.signature === null &&\n context._internalState.error === null,\n messageBytes: context._internalState.messageBytes,\n unrecognizedProgramIds:\n context._internalState.unrecognizedProgramIds,\n staleDescriptor: context._internalState.staleDescriptor,\n contextModule: context.input.contextModule,\n signerAppVersion: context._internalState.appConfig!.version,\n deviceModelId: sessionState.deviceModelId,\n deviceVersion,\n loggerFactory,\n } satisfies SolanaSigningReportTaskArgs;\n },\n onDone: [\n {\n target: \"SignTransactionResultCheck\",\n guard: \"hasSignature\",\n },\n {\n target: \"Error\",\n guard: ({ context }) => context._internalState.error !== null,\n },\n { target: \"BasicTerminalSign\" },\n ],\n onError: [\n {\n target: \"SignTransactionResultCheck\",\n guard: \"hasSignature\",\n },\n {\n target: \"Error\",\n guard: ({ context }) => context._internalState.error !== null,\n },\n { target: \"BasicTerminalSign\" },\n ],\n },\n },\n // Basic terminal sign: the legacy preview/one-shot path. It decides\n // delayed-vs-one-shot from the blockhash source (opt-in refresh).\n BasicTerminalSign: {\n invoke: {\n id: \"signBasicClearSignStateMachine\",\n src: \"signBasicClearSignStateMachine\",\n input: ({ context }) => {\n const { rpcUrl, fetchBlockhash } = resolveRefreshSource(context);\n return {\n derivationPath: context.input.derivationPath,\n transaction: context._internalState.messageBytes,\n rpcUrl,\n fetchBlockhash,\n userInputType:\n context.input.transactionOptions?.transactionResolutionContext\n ?.userInputType,\n blockhashService: context.input.blockhashService,\n };\n },\n onSnapshot: {\n actions: assign({\n intermediateValue: ({ event }) =>\n event.snapshot.context.intermediateValue,\n }),\n },\n onDone: {\n target: \"SignTransactionResultCheck\",\n actions: assign({\n _internalState: ({ event, context }) =>\n event.output.caseOf<SignTransactionDAInternalState>({\n Right: (signature) => ({\n ...context._internalState,\n signature,\n }),\n Left: (error) => ({ ...context._internalState, error }),\n }),\n }),\n },\n },\n },\n SignTransactionResultCheck: {\n always: [\n { guard: \"noInternalError\", target: \"Success\" },\n { target: \"Error\" },\n ],\n },\n Success: { type: \"final\" },\n Error: { type: \"final\" },\n },\n output: ({ context }) =>\n context._internalState.signature\n ? Right(context._internalState.signature)\n : Left(\n context._internalState.error ||\n new UnknownDAError(`No error or signature available`),\n ),\n });\n }\n\n extractDependencies(internalApi: InternalApi): MachineDependencies {\n const normalizeTransaction = async () => {\n try {\n return new TransactionInputNormaliser().normalize(\n this.input.transaction,\n );\n } catch (error) {\n this.getLoggerFactory(internalApi)(\"NormalizeTransaction\").warn(\n \"[normalizeTransaction] format detection failed; treating input as message bytes\",\n { data: { error: String(error) } },\n );\n return {\n messageBytes: this.input.transaction,\n serializedForTxCheck: undefined,\n };\n }\n };\n\n const getAppConfig = async () =>\n internalApi.sendCommand(new GetAppConfigurationCommand());\n\n const reportSign = async (arg0: { input: SolanaSigningReportTaskArgs }) =>\n new SolanaSigningReportTask(arg0.input).run();\n\n // Never rejects: any failure means no rule matched, so the transaction\n // stays on the generic path. Program IDs are always static keys, so no\n // ALT resolver is needed.\n const resolveSigningRoute = async (arg0: {\n input: { messageBytes: Uint8Array };\n }): Promise<string | null> => {\n try {\n const parsed = await new TransactionParser()\n .parse(arg0.input.messageBytes)\n .run();\n if (parsed.isLeft()) return null;\n const message = parsed.unsafeCoerce().message;\n // ComputeBudget isn't in CAL: don't look it up.\n const programIds = [\n ...new Set(\n message.compiledInstructions.map((ix) =>\n message.allKeys[ix.programIdIndex]?.toBase58(),\n ),\n ),\n ].filter(\n (id): id is string =>\n id !== undefined && id !== COMPUTE_BUDGET_PROGRAM_ID,\n );\n const rules = await resolveBasicFlowRules(\n this.input.contextModule,\n programIds,\n );\n return new GenericFlowRouter(rules, {\n leadingAllowed: [COMPUTE_BUDGET_PROGRAM_ID],\n }).match(parsed.unsafeCoerce());\n } catch (error) {\n this.getLoggerFactory(internalApi)(\"ResolveSigningRoute\").warn(\n \"[resolveSigningRoute] failed; keeping the generic clear-sign path\",\n { data: { error: String(error) } },\n );\n return null;\n }\n };\n\n return {\n normalizeTransaction,\n getAppConfig,\n reportSign,\n resolveSigningRoute,\n };\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["SignTransactionDeviceAction_exports", "__export", "SignTransactionDeviceAction", "__toCommonJS", "import_device_management_kit", "import_purify_ts", "import_xstate", "import_SignTransactionDeviceActionTypes", "import_GetAppConfigurationCommand", "import_constants", "import_basicFlowRules", "import_GenericFlowRouter", "import_TransactionInputNormaliser", "import_TransactionParser", "import_SolanaApplicationResolver", "import_SolanaSigningReportTask", "import_ProvisionBasicClearSignDeviceAction", "import_ProvisionGenericClearSignDeviceAction", "import_ProvisionTransactionCheckDeviceAction", "import_SignBasicClearSignDeviceAction", "import_SignGenericClearSignDeviceAction", "resolveSolanaRpcUrl", "input", "internalApi", "normalizeTransaction", "getAppConfig", "reportSign", "resolveSigningRoute", "loggerFactory", "logger", "disabledFeaturesSet", "isSupported", "feature", "appConfig", "resolveRefreshSource", "context", "rpcUrl", "fetchBlockhash", "refreshBlockhash", "_", "event", "error", "transactionChecksEnabled", "outcome", "signatureOrDegraded", "sessionState", "deviceVersion", "signature", "arg0", "parsed", "message", "programIds", "ix", "id", "rules"]
7
7
  }