@ledgerhq/device-signer-kit-solana 0.0.0-transactionInspector-resolutionObj-20250916113438 → 0.0.0-trusted-names-native-transfer-1-20260121120757
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +113 -24
- package/lib/cjs/api/SignerSolana.js +1 -1
- package/lib/cjs/api/SignerSolana.js.map +1 -1
- package/lib/cjs/api/SignerSolanaBuilder.js +1 -1
- package/lib/cjs/api/SignerSolanaBuilder.js.map +3 -3
- package/lib/cjs/api/SolanaTools.js +1 -1
- package/lib/cjs/api/SolanaTools.js.map +1 -1
- package/lib/cjs/api/app-binder/SignMessageDeviceActionTypes.js.map +1 -1
- package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js +1 -1
- package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js.map +3 -3
- package/lib/cjs/api/index.js +1 -1
- package/lib/cjs/api/index.js.map +2 -2
- package/lib/cjs/api/model/SolanaTransactionOptionalConfig.js +2 -0
- package/lib/cjs/api/model/SolanaTransactionOptionalConfig.js.map +7 -0
- package/lib/cjs/api/model/TransactionResolutionContext.js +1 -1
- package/lib/cjs/api/model/TransactionResolutionContext.js.map +3 -3
- package/lib/cjs/internal/DefaultSignerSolana.js +1 -1
- package/lib/cjs/internal/DefaultSignerSolana.js.map +3 -3
- package/lib/cjs/internal/app-binder/SolanaAppBinder.js +1 -1
- package/lib/cjs/internal/app-binder/SolanaAppBinder.js.map +3 -3
- package/lib/cjs/internal/app-binder/SolanaAppBinder.test.js +1 -1
- package/lib/cjs/internal/app-binder/SolanaAppBinder.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/command/GetAppConfigurationCommand.js +1 -1
- package/lib/cjs/internal/app-binder/command/GetAppConfigurationCommand.js.map +2 -2
- package/lib/cjs/internal/app-binder/command/GetAppConfigurationCommand.test.js +1 -1
- package/lib/cjs/internal/app-binder/command/GetAppConfigurationCommand.test.js.map +2 -2
- package/lib/cjs/internal/app-binder/command/GetChallengeCommand.js +1 -1
- package/lib/cjs/internal/app-binder/command/GetChallengeCommand.js.map +2 -2
- package/lib/cjs/internal/app-binder/command/GetChallengeCommand.test.js +1 -1
- package/lib/cjs/internal/app-binder/command/GetChallengeCommand.test.js.map +2 -2
- package/lib/cjs/internal/app-binder/command/GetPubKeyCommand.js +1 -1
- package/lib/cjs/internal/app-binder/command/GetPubKeyCommand.js.map +3 -3
- package/lib/cjs/internal/app-binder/command/GetPubKeyCommand.test.js +1 -1
- package/lib/cjs/internal/app-binder/command/GetPubKeyCommand.test.js.map +2 -2
- package/lib/cjs/internal/app-binder/command/ProvideTLVDescriptorCommand.js +1 -1
- package/lib/cjs/internal/app-binder/command/ProvideTLVDescriptorCommand.js.map +2 -2
- package/lib/cjs/internal/app-binder/command/ProvideTLVDescriptorCommand.test.js +1 -1
- package/lib/cjs/internal/app-binder/command/ProvideTLVDescriptorCommand.test.js.map +2 -2
- package/lib/cjs/internal/app-binder/command/ProvideTLVTransactionInstructionDescriptorCommand.js +2 -0
- package/lib/cjs/internal/app-binder/command/ProvideTLVTransactionInstructionDescriptorCommand.js.map +7 -0
- package/lib/cjs/internal/app-binder/command/ProvideTLVTransactionInstructionDescriptorCommand.test.js +2 -0
- package/lib/cjs/internal/app-binder/command/ProvideTLVTransactionInstructionDescriptorCommand.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/command/SignOffChainMessageCommand.js +1 -1
- package/lib/cjs/internal/app-binder/command/SignOffChainMessageCommand.js.map +3 -3
- package/lib/cjs/internal/app-binder/command/SignOffChainMessageCommand.test.js +1 -1
- package/lib/cjs/internal/app-binder/command/SignOffChainMessageCommand.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/command/SignTransactionCommand.js +1 -1
- package/lib/cjs/internal/app-binder/command/SignTransactionCommand.js.map +3 -3
- package/lib/cjs/internal/app-binder/command/SignTransactionCommand.test.js +1 -1
- package/lib/cjs/internal/app-binder/command/SignTransactionCommand.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.js.map +3 -3
- package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.test.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/services/GenerateSolanaTransaction.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/services/TransactionInspector.js +1 -1
- package/lib/cjs/internal/app-binder/services/TransactionInspector.js.map +3 -3
- package/lib/cjs/internal/app-binder/services/TransactionInspector.test.js +2 -0
- package/lib/cjs/internal/app-binder/services/TransactionInspector.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/services/bs58Encoder.js +2 -0
- package/lib/cjs/internal/app-binder/services/bs58Encoder.js.map +7 -0
- package/lib/cjs/internal/app-binder/services/utils/DefaultSolanaMessageNormaliser.js +2 -0
- package/lib/cjs/internal/app-binder/services/utils/DefaultSolanaMessageNormaliser.js.map +7 -0
- package/lib/cjs/internal/app-binder/services/utils/DefaultSolanaMessageNormaliser.test.js +2 -0
- package/lib/cjs/internal/app-binder/services/utils/DefaultSolanaMessageNormaliser.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/services/utils/NullLoggerPublisherService.js +2 -0
- package/lib/cjs/internal/app-binder/services/utils/NullLoggerPublisherService.js.map +7 -0
- package/lib/cjs/internal/app-binder/services/utils/NullLoggerPublisherService.test.js +2 -0
- package/lib/cjs/internal/app-binder/services/utils/NullLoggerPublisherService.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/services/utils/transactionDecoders.js +1 -1
- package/lib/cjs/internal/app-binder/services/utils/transactionDecoders.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/SendSignMessageTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/SendSignMessageTask.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/SendSignMessageTask.test.js +3 -1
- package/lib/cjs/internal/app-binder/task/SendSignMessageTask.test.js.map +3 -3
- package/lib/cjs/internal/di.js +1 -1
- package/lib/cjs/internal/di.js.map +3 -3
- package/lib/cjs/internal/externalTypes.js +1 -1
- package/lib/cjs/internal/externalTypes.js.map +2 -2
- package/lib/cjs/internal/use-cases/transaction/SignTransactionUseCase.js +1 -1
- package/lib/cjs/internal/use-cases/transaction/SignTransactionUseCase.js.map +3 -3
- package/lib/cjs/internal/use-cases/transaction/SignTransactionUseCase.test.js +1 -1
- package/lib/cjs/internal/use-cases/transaction/SignTransactionUseCase.test.js.map +2 -2
- package/lib/cjs/package.json +40 -36
- package/lib/esm/api/SignerSolanaBuilder.js +1 -1
- package/lib/esm/api/SignerSolanaBuilder.js.map +3 -3
- package/lib/esm/api/app-binder/SignTransactionDeviceActionTypes.js +1 -0
- package/lib/esm/api/app-binder/SignTransactionDeviceActionTypes.js.map +4 -4
- package/lib/esm/api/index.js +1 -1
- package/lib/esm/api/index.js.map +2 -2
- package/lib/esm/api/model/SolanaTransactionOptionalConfig.js +1 -0
- package/lib/esm/api/model/TransactionResolutionContext.js +1 -0
- package/lib/esm/api/model/TransactionResolutionContext.js.map +4 -4
- package/lib/esm/internal/DefaultSignerSolana.js.map +3 -3
- package/lib/esm/internal/app-binder/SolanaAppBinder.js +1 -1
- package/lib/esm/internal/app-binder/SolanaAppBinder.js.map +3 -3
- package/lib/esm/internal/app-binder/SolanaAppBinder.test.js +1 -1
- package/lib/esm/internal/app-binder/SolanaAppBinder.test.js.map +3 -3
- package/lib/esm/internal/app-binder/command/GetAppConfigurationCommand.js +1 -1
- package/lib/esm/internal/app-binder/command/GetAppConfigurationCommand.js.map +2 -2
- package/lib/esm/internal/app-binder/command/GetAppConfigurationCommand.test.js +1 -1
- package/lib/esm/internal/app-binder/command/GetAppConfigurationCommand.test.js.map +2 -2
- package/lib/esm/internal/app-binder/command/GetChallengeCommand.js +1 -1
- package/lib/esm/internal/app-binder/command/GetChallengeCommand.js.map +2 -2
- package/lib/esm/internal/app-binder/command/GetChallengeCommand.test.js +1 -1
- package/lib/esm/internal/app-binder/command/GetChallengeCommand.test.js.map +2 -2
- package/lib/esm/internal/app-binder/command/GetPubKeyCommand.js +1 -1
- package/lib/esm/internal/app-binder/command/GetPubKeyCommand.js.map +3 -3
- package/lib/esm/internal/app-binder/command/GetPubKeyCommand.test.js +1 -1
- package/lib/esm/internal/app-binder/command/GetPubKeyCommand.test.js.map +2 -2
- package/lib/esm/internal/app-binder/command/ProvideTLVDescriptorCommand.js +1 -1
- package/lib/esm/internal/app-binder/command/ProvideTLVDescriptorCommand.js.map +2 -2
- package/lib/esm/internal/app-binder/command/ProvideTLVDescriptorCommand.test.js +1 -1
- package/lib/esm/internal/app-binder/command/ProvideTLVDescriptorCommand.test.js.map +2 -2
- package/lib/esm/internal/app-binder/command/ProvideTLVTransactionInstructionDescriptorCommand.js +2 -0
- package/lib/esm/internal/app-binder/command/ProvideTLVTransactionInstructionDescriptorCommand.js.map +7 -0
- package/lib/esm/internal/app-binder/command/ProvideTLVTransactionInstructionDescriptorCommand.test.js +2 -0
- package/lib/esm/internal/app-binder/command/ProvideTLVTransactionInstructionDescriptorCommand.test.js.map +7 -0
- package/lib/esm/internal/app-binder/command/SignOffChainMessageCommand.js +1 -1
- package/lib/esm/internal/app-binder/command/SignOffChainMessageCommand.js.map +3 -3
- package/lib/esm/internal/app-binder/command/SignOffChainMessageCommand.test.js +1 -1
- package/lib/esm/internal/app-binder/command/SignOffChainMessageCommand.test.js.map +3 -3
- package/lib/esm/internal/app-binder/command/SignTransactionCommand.js +1 -1
- package/lib/esm/internal/app-binder/command/SignTransactionCommand.js.map +3 -3
- package/lib/esm/internal/app-binder/command/SignTransactionCommand.test.js +1 -1
- package/lib/esm/internal/app-binder/command/SignTransactionCommand.test.js.map +3 -3
- package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.js +1 -1
- package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.js.map +3 -3
- package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.test.js +1 -1
- package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.test.js.map +3 -3
- package/lib/esm/internal/app-binder/services/GenerateSolanaTransaction.test.js.map +3 -3
- package/lib/esm/internal/app-binder/services/TransactionInspector.js +1 -1
- package/lib/esm/internal/app-binder/services/TransactionInspector.js.map +3 -3
- package/lib/esm/internal/app-binder/services/TransactionInspector.test.js +2 -0
- package/lib/esm/internal/app-binder/services/TransactionInspector.test.js.map +7 -0
- package/lib/esm/internal/app-binder/services/bs58Encoder.js +2 -0
- package/lib/esm/internal/app-binder/services/bs58Encoder.js.map +7 -0
- package/lib/esm/internal/app-binder/services/utils/DefaultSolanaMessageNormaliser.js +2 -0
- package/lib/esm/internal/app-binder/services/utils/DefaultSolanaMessageNormaliser.js.map +7 -0
- package/lib/esm/internal/app-binder/services/utils/DefaultSolanaMessageNormaliser.test.js +2 -0
- package/lib/esm/internal/app-binder/services/utils/DefaultSolanaMessageNormaliser.test.js.map +7 -0
- package/lib/esm/internal/app-binder/services/utils/NullLoggerPublisherService.js +2 -0
- package/lib/esm/internal/app-binder/services/utils/NullLoggerPublisherService.js.map +7 -0
- package/lib/esm/internal/app-binder/services/utils/NullLoggerPublisherService.test.js +2 -0
- package/lib/esm/internal/app-binder/services/utils/NullLoggerPublisherService.test.js.map +7 -0
- package/lib/esm/internal/app-binder/services/utils/transactionDecoders.js +1 -1
- package/lib/esm/internal/app-binder/services/utils/transactionDecoders.js.map +3 -3
- package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.js +1 -1
- package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.js.map +3 -3
- package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.test.js.map +3 -3
- package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.js +1 -1
- package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.js.map +3 -3
- package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.test.js.map +3 -3
- package/lib/esm/internal/app-binder/task/SendSignMessageTask.js +1 -1
- package/lib/esm/internal/app-binder/task/SendSignMessageTask.js.map +3 -3
- package/lib/esm/internal/app-binder/task/SendSignMessageTask.test.js +3 -1
- package/lib/esm/internal/app-binder/task/SendSignMessageTask.test.js.map +3 -3
- package/lib/esm/internal/di.js +1 -1
- package/lib/esm/internal/di.js.map +3 -3
- package/lib/esm/internal/externalTypes.js +1 -1
- package/lib/esm/internal/externalTypes.js.map +2 -2
- package/lib/esm/internal/use-cases/transaction/SignTransactionUseCase.js +1 -1
- package/lib/esm/internal/use-cases/transaction/SignTransactionUseCase.js.map +3 -3
- package/lib/esm/internal/use-cases/transaction/SignTransactionUseCase.test.js +1 -1
- package/lib/esm/internal/use-cases/transaction/SignTransactionUseCase.test.js.map +2 -2
- package/lib/esm/package.json +40 -36
- package/lib/types/api/SignerSolana.d.ts +2 -3
- package/lib/types/api/SignerSolana.d.ts.map +1 -1
- package/lib/types/api/SignerSolanaBuilder.d.ts.map +1 -1
- package/lib/types/api/SolanaTools.d.ts +1 -2
- package/lib/types/api/SolanaTools.d.ts.map +1 -1
- package/lib/types/api/app-binder/SignMessageDeviceActionTypes.d.ts +3 -2
- package/lib/types/api/app-binder/SignMessageDeviceActionTypes.d.ts.map +1 -1
- package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts +13 -4
- package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts.map +1 -1
- package/lib/types/api/index.d.ts +2 -1
- package/lib/types/api/index.d.ts.map +1 -1
- package/lib/types/api/model/SolanaTransactionOptionalConfig.d.ts +7 -0
- package/lib/types/api/model/SolanaTransactionOptionalConfig.d.ts.map +1 -0
- package/lib/types/api/model/TransactionResolutionContext.d.ts +7 -0
- package/lib/types/api/model/TransactionResolutionContext.d.ts.map +1 -1
- package/lib/types/internal/DefaultSignerSolana.d.ts +293 -2
- package/lib/types/internal/DefaultSignerSolana.d.ts.map +1 -1
- package/lib/types/internal/app-binder/SolanaAppBinder.d.ts +5 -5
- package/lib/types/internal/app-binder/SolanaAppBinder.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/GetAppConfigurationCommand.d.ts +1 -0
- package/lib/types/internal/app-binder/command/GetAppConfigurationCommand.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/GetChallengeCommand.d.ts +1 -0
- package/lib/types/internal/app-binder/command/GetChallengeCommand.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/GetPubKeyCommand.d.ts +4 -1
- package/lib/types/internal/app-binder/command/GetPubKeyCommand.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/ProvideTLVDescriptorCommand.d.ts +1 -0
- package/lib/types/internal/app-binder/command/ProvideTLVDescriptorCommand.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/ProvideTLVTransactionInstructionDescriptorCommand.d.ts +29 -0
- package/lib/types/internal/app-binder/command/ProvideTLVTransactionInstructionDescriptorCommand.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/ProvideTLVTransactionInstructionDescriptorCommand.test.d.ts +2 -0
- package/lib/types/internal/app-binder/command/ProvideTLVTransactionInstructionDescriptorCommand.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/SignOffChainMessageCommand.d.ts +14 -9
- package/lib/types/internal/app-binder/command/SignOffChainMessageCommand.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/SignTransactionCommand.d.ts +3 -0
- package/lib/types/internal/app-binder/command/SignTransactionCommand.d.ts.map +1 -1
- package/lib/types/internal/app-binder/device-action/SignTransactionDeviceAction.d.ts +11 -4
- package/lib/types/internal/app-binder/device-action/SignTransactionDeviceAction.d.ts.map +1 -1
- package/lib/types/internal/app-binder/services/TransactionInspector.d.ts +21 -10
- package/lib/types/internal/app-binder/services/TransactionInspector.d.ts.map +1 -1
- package/lib/types/internal/app-binder/services/TransactionInspector.test.d.ts +2 -0
- package/lib/types/internal/app-binder/services/TransactionInspector.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/services/bs58Encoder.d.ts +9 -0
- package/lib/types/internal/app-binder/services/bs58Encoder.d.ts.map +1 -0
- package/lib/types/internal/app-binder/services/utils/DefaultSolanaMessageNormaliser.d.ts +8 -0
- package/lib/types/internal/app-binder/services/utils/DefaultSolanaMessageNormaliser.d.ts.map +1 -0
- package/lib/types/internal/app-binder/services/utils/DefaultSolanaMessageNormaliser.test.d.ts +2 -0
- package/lib/types/internal/app-binder/services/utils/DefaultSolanaMessageNormaliser.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/services/utils/NullLoggerPublisherService.d.ts +3 -0
- package/lib/types/internal/app-binder/services/utils/NullLoggerPublisherService.d.ts.map +1 -0
- package/lib/types/internal/app-binder/services/utils/NullLoggerPublisherService.test.d.ts +2 -0
- package/lib/types/internal/app-binder/services/utils/NullLoggerPublisherService.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/services/utils/transactionDecoders.d.ts +1 -12
- package/lib/types/internal/app-binder/services/utils/transactionDecoders.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/BuildTransactionContextTask.d.ts +9 -12
- package/lib/types/internal/app-binder/task/BuildTransactionContextTask.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/ProvideTransactionContextTask.d.ts +14 -7
- package/lib/types/internal/app-binder/task/ProvideTransactionContextTask.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/SendSignMessageTask.d.ts +22 -6
- package/lib/types/internal/app-binder/task/SendSignMessageTask.d.ts.map +1 -1
- package/lib/types/internal/di.d.ts.map +1 -1
- package/lib/types/internal/externalTypes.d.ts +1 -0
- package/lib/types/internal/externalTypes.d.ts.map +1 -1
- package/lib/types/internal/use-cases/transaction/SignTransactionUseCase.d.ts +2 -4
- package/lib/types/internal/use-cases/transaction/SignTransactionUseCase.d.ts.map +1 -1
- package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
- package/package.json +33 -29
- package/lib/cjs/api/model/TransactionOptions.js +0 -2
- package/lib/cjs/api/model/TransactionOptions.js.map +0 -7
- package/lib/cjs/internal/app-binder/command/ProvideTrustedNamePKICommand.js +0 -2
- package/lib/cjs/internal/app-binder/command/ProvideTrustedNamePKICommand.js.map +0 -7
- package/lib/cjs/internal/app-binder/command/ProvideTrustedNamePKICommand.test.js +0 -2
- package/lib/cjs/internal/app-binder/command/ProvideTrustedNamePKICommand.test.js.map +0 -7
- package/lib/esm/api/model/TransactionOptions.js +0 -1
- package/lib/esm/internal/app-binder/command/ProvideTrustedNamePKICommand.js +0 -2
- package/lib/esm/internal/app-binder/command/ProvideTrustedNamePKICommand.js.map +0 -7
- package/lib/esm/internal/app-binder/command/ProvideTrustedNamePKICommand.test.js +0 -2
- package/lib/esm/internal/app-binder/command/ProvideTrustedNamePKICommand.test.js.map +0 -7
- package/lib/types/api/model/TransactionOptions.d.ts +0 -8
- package/lib/types/api/model/TransactionOptions.d.ts.map +0 -1
- package/lib/types/internal/app-binder/command/ProvideTrustedNamePKICommand.d.ts +0 -13
- package/lib/types/internal/app-binder/command/ProvideTrustedNamePKICommand.d.ts.map +0 -1
- package/lib/types/internal/app-binder/command/ProvideTrustedNamePKICommand.test.d.ts +0 -2
- package/lib/types/internal/app-binder/command/ProvideTrustedNamePKICommand.test.d.ts.map +0 -1
- /package/lib/esm/api/model/{TransactionOptions.js.map → SolanaTransactionOptionalConfig.js.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/task/SendSignMessageTask.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["SendSignMessageTask_exports", "__export", "MAX_MESSAGE_LENGTH", "SendSignMessageTask", "__toCommonJS", "import_device_management_kit", "import_signer_utils", "
|
|
4
|
+
"sourcesContent": ["import {\n ByteArrayBuilder,\n type CommandResult,\n CommandResultFactory,\n type InternalApi,\n InvalidStatusWordError,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\nimport { DerivationPathUtils } from \"@ledgerhq/signer-utils\";\n\nimport { GetPubKeyCommand } from \"@internal/app-binder/command/GetPubKeyCommand\";\nimport {\n SignOffChainMessageCommand,\n type SignOffChainRawResponse,\n} from \"@internal/app-binder/command/SignOffChainMessageCommand\";\nimport { type SolanaAppErrorCodes } from \"@internal/app-binder/command/utils/SolanaApplicationErrors\";\nimport {\n type Bs58Encoder,\n DefaultBs58Encoder,\n} from \"@internal/app-binder/services/bs58Encoder\";\n\nimport {\n type CommandFactory,\n SendCommandInChunksTask,\n} from \"./SendCommandInChunksTask\";\n\nconst DEVICE_V0_PAYLOAD_CEILING = 15 * 1024; // 15360\nconst DEVICE_LEGACY_PAYLOAD_CEILING = 1280;\n\n// bytes reserved by app/header and transport\nconst RESERVED_HEADER_BYTES = 40;\nconst RESERVED_TRANSPORT_BYTES = 8;\n\n// derived usable body sizes\nconst OFFCHAINMSG_MAX_LEN =\n DEVICE_V0_PAYLOAD_CEILING - RESERVED_HEADER_BYTES - RESERVED_TRANSPORT_BYTES; // 15312\n\nconst LEGACY_OFFCHAINMSG_MAX_LEN =\n DEVICE_LEGACY_PAYLOAD_CEILING -\n RESERVED_HEADER_BYTES -\n RESERVED_TRANSPORT_BYTES; // 1232\n\n// device cap for v0 long UTF-8\nconst OFFCHAINMSG_MAX_V0_LEN = 65515;\n\nconst MAX_PRINTABLE_ASCII = 0x7e;\nconst MIN_PRINTABLE_ASCII = 0x20;\nconst LINE_FEED_ASCII = 0x0a;\n\nexport enum MessageFormat {\n Ascii = 0,\n Utf8 = 1,\n Utf8LongV0 = 2,\n}\n\nexport const MAX_MESSAGE_LENGTH = OFFCHAINMSG_MAX_V0_LEN;\n\nexport type SendSignMessageTaskArgs = {\n sendingData: Uint8Array;\n derivationPath: string;\n};\n\nexport type SendSignMessageTaskRunFunctionReturn = Promise<\n CommandResult<{ signature: string }, SolanaAppErrorCodes>\n>;\n\nexport class SendSignMessageTask {\n constructor(\n private api: InternalApi,\n private args: SendSignMessageTaskArgs,\n private readonly bs58Encoder: Bs58Encoder = DefaultBs58Encoder,\n ) {}\n\n async run(): SendSignMessageTaskRunFunctionReturn {\n const { sendingData, derivationPath } = this.args;\n\n if (sendingData.length === 0) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Message cannot be empty\"),\n });\n }\n if (sendingData.length > MAX_MESSAGE_LENGTH) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n `Message too long: ${sendingData.length} bytes (max is ${MAX_MESSAGE_LENGTH})`,\n ),\n });\n }\n\n const paths = DerivationPathUtils.splitPath(derivationPath);\n\n const pubkeyResult = await this.api.sendCommand(\n new GetPubKeyCommand({ derivationPath, checkOnDevice: false }),\n );\n if (!(\"data\" in pubkeyResult)) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n \"Error getting public key from device\",\n ),\n });\n }\n const signerPubkey = this.bs58Encoder.decode(pubkeyResult.data);\n\n // try v0 first\n const v0OCM = this._buildFullMessage(sendingData, signerPubkey, false);\n const v0Payload = this._buildApduCommand(v0OCM, paths);\n const v0Res = await this._sendInChunks(v0Payload);\n\n if (isSuccessCommandResult(v0Res)) {\n try {\n const sigB58 = this._buildEnvelopeBase58(v0Res.data, v0OCM);\n return CommandResultFactory({ data: { signature: sigB58 } });\n } catch (e) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n e instanceof Error ? e.message : String(e),\n ),\n });\n }\n }\n\n // if the app says header invalid, try legacy\n const v0Error: unknown =\n \"error\" in v0Res ? (v0Res as { error: unknown }).error : undefined;\n\n if (this._isInvalidOffchainHeaderError(v0Error)) {\n if (sendingData.length > LEGACY_OFFCHAINMSG_MAX_LEN) {\n return v0Res;\n }\n\n const legacyOCM = this._buildFullMessage(sendingData, signerPubkey, true);\n const legacyPayload = this._buildApduCommand(legacyOCM, paths);\n const legacyRes = await this._sendInChunks(legacyPayload);\n\n if (isSuccessCommandResult(legacyRes)) {\n try {\n const sigB58 = this._buildEnvelopeBase58(legacyRes.data, legacyOCM);\n return CommandResultFactory({ data: { signature: sigB58 } });\n } catch (e) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n e instanceof Error ? e.message : String(e),\n ),\n });\n }\n }\n return legacyRes;\n }\n\n return v0Res;\n }\n\n private _isUTF8(buf: Uint8Array): boolean {\n try {\n new TextDecoder(\"utf-8\", { fatal: true }).decode(buf);\n return true;\n } catch {\n return false;\n }\n }\n\n private _findMessageFormat(\n message: Uint8Array,\n isLegacy: boolean,\n ): MessageFormat {\n const maxLedgerLen = isLegacy\n ? LEGACY_OFFCHAINMSG_MAX_LEN\n : OFFCHAINMSG_MAX_LEN;\n\n if (message.length <= maxLedgerLen) {\n if (this._isPrintableASCII(message, isLegacy)) return MessageFormat.Ascii;\n if (this._isUTF8(message)) return MessageFormat.Utf8;\n } else if (message.length <= OFFCHAINMSG_MAX_V0_LEN) {\n if (this._isUTF8(message)) return MessageFormat.Utf8LongV0;\n } else {\n // unreachable if run() guards length\n throw new InvalidStatusWordError(\n `Message too long: ${message.length} bytes (max is ${OFFCHAINMSG_MAX_V0_LEN})`,\n );\n }\n // default to ASCII like legacy\n return MessageFormat.Ascii;\n }\n\n private _isPrintableASCII(buf: Uint8Array, isLegacy: boolean): boolean {\n for (let i = 0; i < buf.length; i++) {\n const ch: number = buf[i]!;\n if (!isLegacy && ch === LINE_FEED_ASCII) continue; // newline allowed only for non-legacy\n if (ch < MIN_PRINTABLE_ASCII || ch > MAX_PRINTABLE_ASCII) return false;\n }\n return true;\n }\n\n /**\n * build serialised off-chain message header + body\n * when `isLegacy` is true, build the short legacy header (no app-domain or signers).\n */\n private _buildFullMessage(\n messageBody: Uint8Array,\n signerPubkey: Uint8Array,\n isLegacy: boolean,\n ): Uint8Array {\n const format: MessageFormat = this._findMessageFormat(\n messageBody,\n isLegacy,\n );\n\n const builder = new ByteArrayBuilder();\n\n // signing domain: 0xFF + \"solana offchain\" (16 bytes)\n builder.add8BitUIntToData(0xff).addAsciiStringToData(\"solana offchain\");\n\n // header version = 0\n builder.add8BitUIntToData(0);\n\n if (!isLegacy) {\n // application domain = 32 zeros\n builder.addBufferToData(new Uint8Array(32));\n }\n\n // message format\n builder.add8BitUIntToData(format);\n\n if (!isLegacy) {\n // signer count = 1\n builder.add8BitUIntToData(1);\n // signer pubkey (32 bytes)\n builder.addBufferToData(signerPubkey);\n }\n\n // message length (LE, 2 bytes)\n builder.add8BitUIntToData(messageBody.length & 0xff);\n builder.add8BitUIntToData((messageBody.length >> 8) & 0xff);\n\n // message body\n builder.addBufferToData(messageBody);\n\n return builder.build();\n }\n\n // guard for the device\u2019s 0x6A81 \u201CInvalid off-chain message header\u201D error\n private _isInvalidOffchainHeaderError(\n e: unknown,\n ): e is { _tag: string; errorCode: string } {\n if (!e || typeof e !== \"object\") return false;\n const obj = e as Record<string, unknown>;\n const tag = obj[\"_tag\"];\n const code = obj[\"errorCode\"];\n return (\n typeof tag === \"string\" &&\n typeof code === \"string\" &&\n code.toLowerCase() === \"6a81\"\n );\n }\n\n /**\n * build APDU payload:\n * [signerCount=1][derivationsCount][each 4-byte index][OCM message]\n */\n private _buildApduCommand(\n fullMessage: Uint8Array,\n paths: number[],\n ): Uint8Array {\n const builder = new ByteArrayBuilder(\n 1 + 1 + paths.length * 4 + fullMessage.length,\n );\n\n builder.add8BitUIntToData(1); // number of signers\n builder.add8BitUIntToData(paths.length); // number of derivations\n paths.forEach((idx) => builder.add32BitUIntToData(idx)); // big-endian\n builder.addBufferToData(fullMessage);\n\n return builder.build(); // larger than 255 is ok, SendCommandInChunksTask will chunk it\n }\n\n // send APDU payload using chunk task, return raw 64-byte signature (last chunk)\n private async _sendInChunks(\n apduPayload: Uint8Array,\n ): Promise<CommandResult<SignOffChainRawResponse, SolanaAppErrorCodes>> {\n const commandFactory: CommandFactory<SignOffChainRawResponse> = (\n chunkArgs,\n ) => new SignOffChainMessageCommand(chunkArgs);\n\n return await new SendCommandInChunksTask<SignOffChainRawResponse>(\n this.api,\n {\n data: apduPayload,\n commandFactory,\n },\n ).run();\n }\n\n // build base58 OCM envelope: [signatureCount=1][signature(64)][serialized OCM]\n private _buildEnvelopeBase58(\n rawSignature: Uint8Array,\n serializedOCM: Uint8Array,\n ): string {\n if (rawSignature.length !== 64) {\n throw new InvalidStatusWordError(\n `Invalid signature length: ${rawSignature.length} (expected 64)`,\n );\n }\n const sigCount = Uint8Array.of(1);\n const envelope = new Uint8Array(\n sigCount.length + rawSignature.length + serializedOCM.length,\n );\n envelope.set(sigCount, 0);\n envelope.set(rawSignature, sigCount.length);\n envelope.set(serializedOCM, sigCount.length + rawSignature.length);\n return this.bs58Encoder.encode(envelope);\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["SendSignMessageTask_exports", "__export", "MAX_MESSAGE_LENGTH", "MessageFormat", "SendSignMessageTask", "__toCommonJS", "import_device_management_kit", "import_signer_utils", "import_GetPubKeyCommand", "import_SignOffChainMessageCommand", "import_bs58Encoder", "import_SendCommandInChunksTask", "DEVICE_V0_PAYLOAD_CEILING", "DEVICE_LEGACY_PAYLOAD_CEILING", "RESERVED_HEADER_BYTES", "RESERVED_TRANSPORT_BYTES", "OFFCHAINMSG_MAX_LEN", "LEGACY_OFFCHAINMSG_MAX_LEN", "OFFCHAINMSG_MAX_V0_LEN", "MAX_PRINTABLE_ASCII", "MIN_PRINTABLE_ASCII", "LINE_FEED_ASCII", "api", "args", "bs58Encoder", "sendingData", "derivationPath", "paths", "pubkeyResult", "signerPubkey", "v0OCM", "v0Payload", "v0Res", "sigB58", "e", "v0Error", "legacyOCM", "legacyPayload", "legacyRes", "buf", "message", "isLegacy", "maxLedgerLen", "i", "ch", "messageBody", "format", "builder", "obj", "tag", "code", "fullMessage", "idx", "apduPayload", "commandFactory", "chunkArgs", "rawSignature", "serializedOCM", "sigCount", "envelope"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,4 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var s=require("@ledgerhq/device-management-kit"),y=require("../../app-binder/device-action/__test-utils__/makeInternalApi"),g=require("../../app-binder/services/bs58Encoder"),t=require("../../app-binder/task/SendSignMessageTask");const r="44'/501'/0'/0'",c=new Uint8Array(32).fill(17),m=g.DefaultBs58Encoder.encode(c);function w(){return{_tag:"SolanaAppCommandError",errorCode:"6a81",message:"Invalid off-chain message header"}}describe("SendSignMessageTask",()=>{const n=(0,y.makeDeviceActionInternalApiMock)();beforeEach(()=>{vi.resetAllMocks()}),describe("run()",()=>{it("errors on empty message before any device call",async()=>{const e=await new t.SendSignMessageTask(n,{derivationPath:r,sendingData:new Uint8Array([])}).run();expect(n.sendCommand).toHaveBeenCalledTimes(0),expect(e.error).toEqual(new s.InvalidStatusWordError("Message cannot be empty"))}),it("errors when GET_PUBKEY fails",async()=>{n.sendCommand.mockResolvedValueOnce((0,s.CommandResultFactory)({error:new s.InvalidStatusWordError("pubkey error")}));const e=await new t.SendSignMessageTask(n,{derivationPath:r,sendingData:new Uint8Array([1,2,3])}).run();expect(n.sendCommand).toHaveBeenCalledTimes(1),expect(e.error).toEqual(new s.InvalidStatusWordError("Error getting public key from device"))}),it("surfaces command error when signing fails",async()=>{n.sendCommand.mockResolvedValueOnce((0,s.CommandResultFactory)({data:m})).mockResolvedValueOnce((0,s.CommandResultFactory)({error:new s.InvalidStatusWordError("no signature returned")}));const e=await new t.SendSignMessageTask(n,{derivationPath:r,sendingData:new Uint8Array([170,187])}).run();expect(n.sendCommand).toHaveBeenCalledTimes(2),expect(e.error).toEqual(new s.InvalidStatusWordError("no signature returned"))}),it("returns base58 envelope when signing succeeds",async()=>{const e=new Uint8Array([240,202,204,26]),a=new Uint8Array(64).fill(51);n.sendCommand.mockResolvedValueOnce((0,s.CommandResultFactory)({data:m})).mockResolvedValueOnce((0,s.CommandResultFactory)({data:a}));const o=new t.SendSignMessageTask(n,{derivationPath:r,sendingData:e}),i=o._buildFullMessage(e,c,!1),d=await o.run();expect(n.sendCommand).toHaveBeenCalledTimes(2),expect("data"in d).toBe(!0);const u=d.data.signature,l=new Uint8Array(1+a.length+i.length);l.set(Uint8Array.of(1),0),l.set(a,1),l.set(i,1+a.length),expect(g.DefaultBs58Encoder.decode(u)).toEqual(l)}),it("rejects invalid derivation path",async()=>{const e={derivationPath:"not/a/path",sendingData:new Uint8Array([1])};await expect(new t.SendSignMessageTask(n,e).run()).rejects.toThrow()}),it("builds APDU command with correct structure (prefix + tail)",()=>{const e=new Uint8Array([1,2,3]),a=new t.SendSignMessageTask(n,{derivationPath:r,sendingData:e}),o=a._buildFullMessage(e,c,!1),i=[-2147483604,-2147483147,-2147483648,0],d=a._buildApduCommand(o,i);expect(d[0]).toBe(1),expect(d[1]).toBe(i.length),expect(d.slice(d.length-o.length)).toEqual(o)}),it("handles large messages via chunking (no exact call count assertion)",async()=>{const e=new Uint8Array(4e3).fill(1),a=new Uint8Array(64).fill(68);n.sendCommand.mockResolvedValueOnce((0,s.CommandResultFactory)({data:m})).mockResolvedValue((0,s.CommandResultFactory)({data:a}));const o=await new t.SendSignMessageTask(n,{derivationPath:r,sendingData:e}).run();expect("data"in o).toBe(!0)}),it("errors on message exceeding v0 max (65515)",async()=>{const e=new Uint8Array(t.MAX_MESSAGE_LENGTH+1).fill(170),a=await new t.SendSignMessageTask(n,{derivationPath:r,sendingData:e}).run();expect(n.sendCommand).toHaveBeenCalledTimes(0),expect(a.error).toEqual(new s.InvalidStatusWordError(`Message too long: ${e.length} bytes (max is ${t.MAX_MESSAGE_LENGTH})`))}),it("falls back to legacy when v0 returns 6a81 (header error)",async()=>{const e=new Uint8Array([97,98,99]),a=new Uint8Array(64).fill(85);n.sendCommand.mockResolvedValueOnce((0,s.CommandResultFactory)({data:m})).mockResolvedValueOnce((0,s.CommandResultFactory)({error:w()})).mockResolvedValueOnce((0,s.CommandResultFactory)({data:a}));const o=new t.SendSignMessageTask(n,{derivationPath:r,sendingData:e}),i=o._buildFullMessage(e,c,!0),d=await o.run();expect(n.sendCommand).toHaveBeenCalledTimes(3);const u=d.data.signature,l=new Uint8Array(1+a.length+i.length);l.set(Uint8Array.of(1),0),l.set(a,1),l.set(i,1+a.length),expect(g.DefaultBs58Encoder.decode(u)).toEqual(l)}),it("does NOT fallback on non-6a81 errors",async()=>{n.sendCommand.mockResolvedValueOnce((0,s.CommandResultFactory)({data:m})).mockResolvedValueOnce((0,s.CommandResultFactory)({error:new s.InvalidStatusWordError("oups")}));const e=await new t.SendSignMessageTask(n,{derivationPath:r,sendingData:new Uint8Array([1,2])}).run();expect(n.sendCommand).toHaveBeenCalledTimes(2),expect(e.error).toBeInstanceOf(s.InvalidStatusWordError)}),it("propagates 6a81 if body is too large for legacy",async()=>{const e=new Uint8Array(2e3).fill(49);n.sendCommand.mockResolvedValueOnce((0,s.CommandResultFactory)({data:m})).mockResolvedValueOnce((0,s.CommandResultFactory)({error:w()}));const a=await new t.SendSignMessageTask(n,{derivationPath:r,sendingData:e}).run();expect(n.sendCommand).toHaveBeenCalledTimes(2),expect(a.error).toEqual(w())})}),describe("message format detection (indirect via header byte)",()=>{it("sets format=0 for ASCII \u2264 maxLedgerLen (v0 header)",()=>{const e=new TextEncoder().encode(`hello
|
|
2
|
+
world`),o=new t.SendSignMessageTask(n,{derivationPath:r,sendingData:e})._buildFullMessage(e,c,!1);expect(o[49]).toBe(t.MessageFormat.Ascii)}),it("sets format=1 for short UTF-8 non-ASCII (v0 header)",()=>{const e=new TextEncoder().encode("h\xE9ll\xF8"),o=new t.SendSignMessageTask(n,{derivationPath:r,sendingData:e})._buildFullMessage(e,c,!1);expect(o[49]).toBe(t.MessageFormat.Utf8)}),it("sets format=2 for long UTF-8 (v0 header)",()=>{const e=new TextEncoder().encode("x".repeat(15313)),o=new t.SendSignMessageTask(n,{derivationPath:r,sendingData:e})._buildFullMessage(e,c,!1);expect(o[49]).toBe(t.MessageFormat.Utf8LongV0)}),it("legacy header forbids newline in ASCII (so format becomes UTF-8=1)",()=>{const e=new TextEncoder().encode(`hello
|
|
3
|
+
world`),o=new t.SendSignMessageTask(n,{derivationPath:r,sendingData:e})._buildFullMessage(e,c,!0);expect(o[17]).toBe(t.MessageFormat.Utf8)}),it("legacy header sets format=0 for plain ASCII (no newline)",()=>{const e=new TextEncoder().encode("HELLO_123"),o=new t.SendSignMessageTask(n,{derivationPath:r,sendingData:e})._buildFullMessage(e,c,!0);expect(o[17]).toBe(t.MessageFormat.Ascii)}),it("message length is little-endian in both headers",()=>{const e=new Uint8Array([1,2,3]),a=new t.SendSignMessageTask(n,{derivationPath:r,sendingData:e}),o=a._buildFullMessage(e,c,!1);expect(o[83]).toBe(3),expect(o[84]).toBe(0);const i=a._buildFullMessage(e,c,!0);expect(i[18]).toBe(3),expect(i[19]).toBe(0)})}),it("returns error when device returns non-64-byte signature on final chunk",async()=>{const e=new Uint8Array([1,2,3]);n.sendCommand.mockResolvedValueOnce((0,s.CommandResultFactory)({data:m})).mockResolvedValueOnce((0,s.CommandResultFactory)({data:new Uint8Array(0)}));const a=await new t.SendSignMessageTask(n,{derivationPath:r,sendingData:e}).run();expect("error"in a).toBe(!0);const o=a.error;expect(o).toBeInstanceOf(s.InvalidStatusWordError)})});
|
|
2
4
|
//# sourceMappingURL=SendSignMessageTask.test.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/task/SendSignMessageTask.test.ts"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport bs58 from \"bs58\";\n\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\nimport {\n MAX_MESSAGE_LENGTH,\n SendSignMessageTask,\n} from \"@internal/app-binder/task/SendSignMessageTask\";\n\nconst DERIVATION_PATH = \"44'/501'/0'/0'\";\nconst PUBKEY = new Uint8Array(32).fill(0x00);\nconst PUBKEY_BASE58 = bs58.encode(PUBKEY);\nconst MESSAGE = new Uint8Array([0xf0, 0xca, 0xcc, 0x1a]);\n\ndescribe(\"SendSignMessageTask\", () => {\n const apiMock = makeDeviceActionInternalApiMock();\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"run()\", () => {\n it(\"should error on empty message before any device call\", async () => {\n // given\n const args = {\n derivationPath: DERIVATION_PATH,\n sendingData: new Uint8Array([]),\n };\n\n // when\n const result = await new SendSignMessageTask(apiMock, args).run();\n\n // then\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(0);\n expect((result as any).error).toEqual(\n new InvalidStatusWordError(\"Message cannot be empty\"),\n );\n });\n\n it(\"should return error if GET_PUBKEY fails\", async () => {\n // given\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"pubkey error\"),\n }),\n );\n const args = {\n derivationPath: DERIVATION_PATH,\n sendingData: MESSAGE,\n };\n\n // when\n const result = await new SendSignMessageTask(apiMock, args).run();\n\n // then\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(1);\n expect((result as any).error).toEqual(\n new InvalidStatusWordError(\"Error getting public key from device\"),\n );\n });\n\n it(\"should return error if SignOffChainMessageCommand fails\", async () => {\n // given\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: PUBKEY_BASE58 }))\n .mockResolvedValueOnce(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"no signature returned\"),\n }),\n );\n const args = {\n derivationPath: DERIVATION_PATH,\n sendingData: MESSAGE,\n };\n\n // when\n const result = await new SendSignMessageTask(apiMock, args).run();\n\n // then\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(2);\n expect((result as any).error).toEqual(\n new InvalidStatusWordError(\"no signature returned\"),\n );\n });\n\n it(\"should return success when signing succeeds\", async () => {\n // given\n const mockSig = new Uint8Array([0xf0, 0xca, 0xcc, 0x1a]);\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: PUBKEY_BASE58 }))\n .mockResolvedValueOnce(CommandResultFactory({ data: mockSig }));\n const args = {\n derivationPath: DERIVATION_PATH,\n sendingData: MESSAGE,\n };\n\n // when\n const result = await new SendSignMessageTask(apiMock, args).run();\n\n // then\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(2);\n expect((result as any).data).toEqual(mockSig);\n });\n\n it(\"should reject invalid derivation path\", async () => {\n const args = {\n derivationPath: \"not/a/path\",\n sendingData: MESSAGE,\n };\n await expect(\n new SendSignMessageTask(apiMock, args).run(),\n ).rejects.toThrow();\n });\n\n it(\"should correctly build APDU command lengths\", () => {\n // given\n const task: any = new SendSignMessageTask(apiMock, {\n derivationPath: DERIVATION_PATH,\n sendingData: MESSAGE,\n });\n\n // when\n const fullMsg = task._buildFullMessage(MESSAGE, PUBKEY);\n const paths = [44 | 0x80000000, 501 | 0x80000000, 0 | 0x80000000, 0];\n const apdu = task._buildApduCommand(fullMsg, paths);\n const expectedLen = 1 + 1 + paths.length * 4 + fullMsg.length;\n\n // then\n expect(apdu.length).toBe(expectedLen);\n });\n\n it(\"should handle maximum allowed message length\", async () => {\n // given\n const headerAPDU = 1 + 1 + 4 * 4;\n const fullMsgHeader = 1 + 15 + 1 + 32 + 1 + 1 + 32 + 2;\n const maxBody = 255 - headerAPDU - fullMsgHeader;\n const bigMsg = new Uint8Array(maxBody).fill(0x01);\n const mockSig = new Uint8Array([0xf0, 0xca, 0xcc, 0x1a]);\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: PUBKEY_BASE58 }))\n .mockResolvedValueOnce(CommandResultFactory({ data: mockSig }));\n\n // when\n const result = await new SendSignMessageTask(apiMock, {\n derivationPath: DERIVATION_PATH,\n sendingData: bigMsg,\n }).run();\n\n // then\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(2);\n expect((result as any).data).toEqual(mockSig);\n });\n\n it(\"should error on message exceeding 16-bit length (65535)\", async () => {\n // given\n const tooBig = new Uint8Array(MAX_MESSAGE_LENGTH + 1).fill(0xaa);\n const args = {\n derivationPath: DERIVATION_PATH,\n sendingData: tooBig,\n };\n\n // when\n const result = await new SendSignMessageTask(apiMock, args).run();\n\n // then\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(0);\n expect((result as any).error).toEqual(\n new InvalidStatusWordError(\n `Message too long: ${tooBig.length} bytes (max is 65535)`,\n ),\n );\n });\n });\n});\n"],
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["import_device_management_kit", "
|
|
4
|
+
"sourcesContent": ["/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\nimport { DefaultBs58Encoder } from \"@internal/app-binder/services/bs58Encoder\";\nimport {\n MAX_MESSAGE_LENGTH,\n MessageFormat,\n SendSignMessageTask,\n} from \"@internal/app-binder/task/SendSignMessageTask\";\n\nconst DERIVATION_PATH = \"44'/501'/0'/0'\";\nconst PUBKEY = new Uint8Array(32).fill(0x11);\nconst PUBKEY_BASE58 = DefaultBs58Encoder.encode(PUBKEY);\n\nfunction solanaHeaderErr() {\n return {\n _tag: \"SolanaAppCommandError\",\n errorCode: \"6a81\",\n message: \"Invalid off-chain message header\",\n } as const;\n}\n\ndescribe(\"SendSignMessageTask\", () => {\n const apiMock = makeDeviceActionInternalApiMock();\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"run()\", () => {\n it(\"errors on empty message before any device call\", async () => {\n const result = await new SendSignMessageTask(apiMock, {\n derivationPath: DERIVATION_PATH,\n sendingData: new Uint8Array([]),\n }).run();\n\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(0);\n expect((result as any).error).toEqual(\n new InvalidStatusWordError(\"Message cannot be empty\"),\n );\n });\n\n it(\"errors when GET_PUBKEY fails\", async () => {\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"pubkey error\"),\n }),\n );\n\n const res = await new SendSignMessageTask(apiMock, {\n derivationPath: DERIVATION_PATH,\n sendingData: new Uint8Array([1, 2, 3]),\n }).run();\n\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(1);\n expect((res as any).error).toEqual(\n new InvalidStatusWordError(\"Error getting public key from device\"),\n );\n });\n\n it(\"surfaces command error when signing fails\", async () => {\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: PUBKEY_BASE58 })) // pubkey\n .mockResolvedValueOnce(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"no signature returned\"),\n }),\n );\n\n const res = await new SendSignMessageTask(apiMock, {\n derivationPath: DERIVATION_PATH,\n sendingData: new Uint8Array([0xaa, 0xbb]),\n }).run();\n\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(2);\n expect((res as any).error).toEqual(\n new InvalidStatusWordError(\"no signature returned\"),\n );\n });\n\n it(\"returns base58 envelope when signing succeeds\", async () => {\n // given\n const msg = new Uint8Array([0xf0, 0xca, 0xcc, 0x1a]);\n const rawSig = new Uint8Array(64).fill(0x33); // mock 64-byte signature\n\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: PUBKEY_BASE58 })) // pubkey\n .mockResolvedValueOnce(CommandResultFactory({ data: rawSig })); // v0 last chunk\n\n const task: any = new SendSignMessageTask(apiMock, {\n derivationPath: DERIVATION_PATH,\n sendingData: msg,\n });\n const v0OCM: Uint8Array = task._buildFullMessage(msg, PUBKEY, false);\n\n // when\n const res = await task.run();\n\n // then\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(2);\n expect(\"data\" in res).toBe(true);\n const b58 = (res as any).data.signature as string;\n\n // expected envelope = [1][rawSig][v0OCM]\n const expected = new Uint8Array(1 + rawSig.length + v0OCM.length);\n expected.set(Uint8Array.of(1), 0);\n expected.set(rawSig, 1);\n expected.set(v0OCM, 1 + rawSig.length);\n\n expect(DefaultBs58Encoder.decode(b58)).toEqual(expected);\n });\n\n it(\"rejects invalid derivation path\", async () => {\n const args = {\n derivationPath: \"not/a/path\",\n sendingData: new Uint8Array([1]),\n };\n await expect(\n new SendSignMessageTask(apiMock, args).run(),\n ).rejects.toThrow();\n });\n\n it(\"builds APDU command with correct structure (prefix + tail)\", () => {\n const msg = new Uint8Array([1, 2, 3]);\n const task: any = new SendSignMessageTask(apiMock, {\n derivationPath: DERIVATION_PATH,\n sendingData: msg,\n });\n\n const fullMsg = task._buildFullMessage(msg, PUBKEY, false);\n const paths = [44 | 0x80000000, 501 | 0x80000000, 0 | 0x80000000, 0];\n const apdu = task._buildApduCommand(fullMsg, paths);\n\n // first byte: number of signers\n expect(apdu[0]).toBe(1);\n // second byte: number of derivation indices\n expect(apdu[1]).toBe(paths.length);\n // tail equals the serialized OCM\n expect(apdu.slice(apdu.length - fullMsg.length)).toEqual(fullMsg);\n });\n\n it(\"handles large messages via chunking (no exact call count assertion)\", async () => {\n const bigMsg = new Uint8Array(4000).fill(0x01);\n const rawSig = new Uint8Array(64).fill(0x44);\n\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: PUBKEY_BASE58 })) // pubkey\n .mockResolvedValue(CommandResultFactory({ data: rawSig })); // all subsequent chunks\n\n const res = await new SendSignMessageTask(apiMock, {\n derivationPath: DERIVATION_PATH,\n sendingData: bigMsg,\n }).run();\n\n expect(\"data\" in res).toBe(true);\n });\n\n it(\"errors on message exceeding v0 max (65515)\", async () => {\n const tooBig = new Uint8Array(MAX_MESSAGE_LENGTH + 1).fill(0xaa);\n const res = await new SendSignMessageTask(apiMock, {\n derivationPath: DERIVATION_PATH,\n sendingData: tooBig,\n }).run();\n\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(0);\n expect((res as any).error).toEqual(\n new InvalidStatusWordError(\n `Message too long: ${tooBig.length} bytes (max is ${MAX_MESSAGE_LENGTH})`,\n ),\n );\n });\n\n it(\"falls back to legacy when v0 returns 6a81 (header error)\", async () => {\n // given\n const msg = new Uint8Array([0x61, 0x62, 0x63]); // \"abc\"\n const rawSig = new Uint8Array(64).fill(0x55);\n\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: PUBKEY_BASE58 })) // pubkey\n .mockResolvedValueOnce(\n CommandResultFactory({ error: solanaHeaderErr() as any }),\n ) // v0 -> 6a81\n .mockResolvedValueOnce(CommandResultFactory({ data: rawSig })); // legacy -> OK\n\n const task: any = new SendSignMessageTask(apiMock, {\n derivationPath: DERIVATION_PATH,\n sendingData: msg,\n });\n\n // build expected LEGACY OCM to verify envelope\n const legacyOCM: Uint8Array = task._buildFullMessage(msg, PUBKEY, true);\n\n // when\n const res = await task.run();\n\n // then\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(3); // pubkey + v0 + legacy\n const b58 = (res as any).data.signature as string;\n\n const expected = new Uint8Array(1 + rawSig.length + legacyOCM.length);\n expected.set(Uint8Array.of(1), 0);\n expected.set(rawSig, 1);\n expected.set(legacyOCM, 1 + rawSig.length);\n\n expect(DefaultBs58Encoder.decode(b58)).toEqual(expected);\n });\n\n it(\"does NOT fallback on non-6a81 errors\", async () => {\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: PUBKEY_BASE58 }))\n .mockResolvedValueOnce(\n CommandResultFactory({ error: new InvalidStatusWordError(\"oups\") }),\n );\n\n const res = await new SendSignMessageTask(apiMock, {\n derivationPath: DERIVATION_PATH,\n sendingData: new Uint8Array([1, 2]),\n }).run();\n\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(2);\n expect((res as any).error).toBeInstanceOf(InvalidStatusWordError);\n });\n\n it(\"propagates 6a81 if body is too large for legacy\", async () => {\n const msg = new Uint8Array(2000).fill(0x31); // > 1232 legacy limit\n\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: PUBKEY_BASE58 })) // pubkey\n .mockResolvedValueOnce(\n CommandResultFactory({ error: solanaHeaderErr() as any }),\n ); // v0 -> 6a81\n\n const res = await new SendSignMessageTask(apiMock, {\n derivationPath: DERIVATION_PATH,\n sendingData: msg,\n }).run();\n\n // no legacy retry\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(2);\n expect((res as any).error).toEqual(solanaHeaderErr());\n });\n });\n\n describe(\"message format detection (indirect via header byte)\", () => {\n it(\"sets format=0 for ASCII \u2264 maxLedgerLen (v0 header)\", () => {\n const ascii = new TextEncoder().encode(\"hello\\nworld\"); // newline allowed in non-legacy\n const task: any = new SendSignMessageTask(apiMock, {\n derivationPath: DERIVATION_PATH,\n sendingData: ascii,\n });\n const v0 = task._buildFullMessage(ascii, PUBKEY, false);\n // in v0 format byte is at offset: 16 (domain) + 1 (ver) + 32 (app) = 49\n expect(v0[49]).toBe(MessageFormat.Ascii);\n });\n\n it(\"sets format=1 for short UTF-8 non-ASCII (v0 header)\", () => {\n const utf8 = new TextEncoder().encode(\"h\u00E9ll\u00F8\");\n const task: any = new SendSignMessageTask(apiMock, {\n derivationPath: DERIVATION_PATH,\n sendingData: utf8,\n });\n const v0 = task._buildFullMessage(utf8, PUBKEY, false);\n expect(v0[49]).toBe(MessageFormat.Utf8);\n });\n\n it(\"sets format=2 for long UTF-8 (v0 header)\", () => {\n // must exceed OFFCM_MAX_LEDGER_LEN to get format=2\n const longUtf8 = new TextEncoder().encode(\"x\".repeat(15313));\n const task: any = new SendSignMessageTask(apiMock, {\n derivationPath: DERIVATION_PATH,\n sendingData: longUtf8,\n });\n const v0 = task._buildFullMessage(longUtf8, PUBKEY, false);\n expect(v0[49]).toBe(MessageFormat.Utf8LongV0);\n });\n\n it(\"legacy header forbids newline in ASCII (so format becomes UTF-8=1)\", () => {\n const asciiWithNl = new TextEncoder().encode(\"hello\\nworld\");\n const task: any = new SendSignMessageTask(apiMock, {\n derivationPath: DERIVATION_PATH,\n sendingData: asciiWithNl,\n });\n const legacy = task._buildFullMessage(asciiWithNl, PUBKEY, true);\n // in legacy: format byte is at offset 16 (domain) + 1 (ver) = 17\n expect(legacy[17]).toBe(MessageFormat.Utf8);\n });\n\n it(\"legacy header sets format=0 for plain ASCII (no newline)\", () => {\n const ascii = new TextEncoder().encode(\"HELLO_123\");\n const task: any = new SendSignMessageTask(apiMock, {\n derivationPath: DERIVATION_PATH,\n sendingData: ascii,\n });\n const legacy = task._buildFullMessage(ascii, PUBKEY, true);\n expect(legacy[17]).toBe(MessageFormat.Ascii);\n });\n\n it(\"message length is little-endian in both headers\", () => {\n const body = new Uint8Array([1, 2, 3]); // length = 3\n const task: any = new SendSignMessageTask(apiMock, {\n derivationPath: DERIVATION_PATH,\n sendingData: body,\n });\n\n // v0 offsets:\n // length starts at: 16(domain) + 1(ver) + 32(app) + 1(format) + 1(count) + 32(pubkey) = 83\n const v0 = task._buildFullMessage(body, PUBKEY, false);\n expect(v0[83]).toBe(3); // LSB (0x03)\n expect(v0[84]).toBe(0); // MSB (0x00)\n\n // legacy offsets:\n // length starts at: 16(domain) + 1(ver) + 1(format) = 18\n const legacy = task._buildFullMessage(body, PUBKEY, true);\n expect(legacy[18]).toBe(3); // LSB (0x03)\n expect(legacy[19]).toBe(0); // MSB (0x00)\n });\n });\n\n it(\"returns error when device returns non-64-byte signature on final chunk\", async () => {\n const msg = new Uint8Array([1, 2, 3]);\n\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: PUBKEY_BASE58 }))\n .mockResolvedValueOnce(CommandResultFactory({ data: new Uint8Array(0) }));\n\n const res = await new SendSignMessageTask(apiMock, {\n derivationPath: DERIVATION_PATH,\n sendingData: msg,\n }).run();\n\n expect(\"error\" in res).toBe(true);\n\n const err = (res as any).error as unknown;\n expect(err).toBeInstanceOf(InvalidStatusWordError);\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_device_management_kit", "import_makeInternalApi", "import_bs58Encoder", "import_SendSignMessageTask", "DERIVATION_PATH", "PUBKEY", "PUBKEY_BASE58", "solanaHeaderErr", "apiMock", "result", "res", "msg", "rawSig", "task", "v0OCM", "b58", "expected", "args", "fullMsg", "paths", "apdu", "bigMsg", "tooBig", "legacyOCM", "ascii", "v0", "utf8", "longUtf8", "asciiWithNl", "legacy", "body", "err"]
|
|
7
7
|
}
|
package/lib/cjs/internal/di.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var a=Object.defineProperty;var
|
|
1
|
+
"use strict";var a=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var u=Object.prototype.hasOwnProperty;var C=(o,e)=>{for(var r in e)a(o,r,{get:e[r],enumerable:!0})},y=(o,e,r,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of g(e))!u.call(o,n)&&n!==r&&a(o,n,{get:()=>e[n],enumerable:!(t=d(e,n))||t.enumerable});return o};var M=o=>y(a({},"__esModule",{value:!0}),o);var v={};C(v,{makeContainer:()=>S});module.exports=M(v);var c=require("inversify"),l=require("./app-binder/di/appBinderModule"),m=require("./app-binder/services/utils/NullLoggerPublisherService"),p=require("./use-cases/di/useCasesModule"),i=require("./externalTypes");const S=({dmk:o,sessionId:e,contextModule:r})=>{const t=new c.Container;return t.bind(i.externalTypes.Dmk).toConstantValue(o),t.bind(i.externalTypes.SessionId).toConstantValue(e),t.bind(i.externalTypes.ContextModule).toConstantValue(r),t.bind(i.externalTypes.DmkLoggerFactory).toConstantValue(n=>{const s=o.getLoggerFactory?.();return s?s(`SignerSolana-${n}`):(0,m.NullLoggerPublisherService)(`SignerSolana-${n}`)}),t.loadSync((0,l.appBinderModuleFactory)(),(0,p.useCasesModuleFactory)()),t};0&&(module.exports={makeContainer});
|
|
2
2
|
//# sourceMappingURL=di.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/internal/di.ts"],
|
|
4
|
-
"sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n type DeviceManagementKit,\n type DeviceSessionId,\n} from \"@ledgerhq/device-management-kit\";\nimport { Container } from \"inversify\";\n\nimport { appBinderModuleFactory } from \"./app-binder/di/appBinderModule\";\nimport { useCasesModuleFactory } from \"./use-cases/di/useCasesModule\";\nimport { externalTypes } from \"./externalTypes\";\n\nexport type MakeContainerProps = {\n dmk: DeviceManagementKit;\n sessionId: DeviceSessionId;\n contextModule: ContextModule;\n};\nexport const makeContainer = ({\n dmk,\n sessionId,\n contextModule,\n}: MakeContainerProps) => {\n const container = new Container();\n\n container.bind<DeviceManagementKit>(externalTypes.Dmk).toConstantValue(dmk);\n container\n .bind<DeviceSessionId>(externalTypes.SessionId)\n .toConstantValue(sessionId);\n container\n .bind<ContextModule>(externalTypes.ContextModule)\n .toConstantValue(contextModule);\n\n container.loadSync(appBinderModuleFactory(), useCasesModuleFactory());\n\n return container;\n};\n"],
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,mBAAAE,IAAA,eAAAC,EAAAH,
|
|
6
|
-
"names": ["di_exports", "__export", "makeContainer", "__toCommonJS", "import_inversify", "import_appBinderModule", "import_useCasesModule", "import_externalTypes", "dmk", "sessionId", "contextModule", "container"]
|
|
4
|
+
"sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n type DeviceManagementKit,\n type DeviceSessionId,\n type LoggerPublisherService,\n} from \"@ledgerhq/device-management-kit\";\nimport { Container } from \"inversify\";\n\nimport { appBinderModuleFactory } from \"./app-binder/di/appBinderModule\";\nimport { NullLoggerPublisherService } from \"./app-binder/services/utils/NullLoggerPublisherService\";\nimport { useCasesModuleFactory } from \"./use-cases/di/useCasesModule\";\nimport { externalTypes } from \"./externalTypes\";\n\nexport type MakeContainerProps = {\n dmk: DeviceManagementKit;\n sessionId: DeviceSessionId;\n contextModule: ContextModule;\n};\n\nexport const makeContainer = ({\n dmk,\n sessionId,\n contextModule,\n}: MakeContainerProps) => {\n const container = new Container();\n\n container.bind<DeviceManagementKit>(externalTypes.Dmk).toConstantValue(dmk);\n container\n .bind<DeviceSessionId>(externalTypes.SessionId)\n .toConstantValue(sessionId);\n container\n .bind<ContextModule>(externalTypes.ContextModule)\n .toConstantValue(contextModule);\n\n container\n .bind<\n (tag: string) => LoggerPublisherService\n >(externalTypes.DmkLoggerFactory)\n .toConstantValue((tag: string) => {\n const factory = dmk.getLoggerFactory?.();\n return factory\n ? factory(`SignerSolana-${tag}`)\n : NullLoggerPublisherService(`SignerSolana-${tag}`);\n });\n\n container.loadSync(appBinderModuleFactory(), useCasesModuleFactory());\n\n return container;\n};\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,mBAAAE,IAAA,eAAAC,EAAAH,GAMA,IAAAI,EAA0B,qBAE1BC,EAAuC,2CACvCC,EAA2C,kEAC3CC,EAAsC,yCACtCC,EAA8B,2BAQvB,MAAMN,EAAgB,CAAC,CAC5B,IAAAO,EACA,UAAAC,EACA,cAAAC,CACF,IAA0B,CACxB,MAAMC,EAAY,IAAI,YAEtB,OAAAA,EAAU,KAA0B,gBAAc,GAAG,EAAE,gBAAgBH,CAAG,EAC1EG,EACG,KAAsB,gBAAc,SAAS,EAC7C,gBAAgBF,CAAS,EAC5BE,EACG,KAAoB,gBAAc,aAAa,EAC/C,gBAAgBD,CAAa,EAEhCC,EACG,KAEC,gBAAc,gBAAgB,EAC/B,gBAAiBC,GAAgB,CAChC,MAAMC,EAAUL,EAAI,mBAAmB,EACvC,OAAOK,EACHA,EAAQ,gBAAgBD,CAAG,EAAE,KAC7B,8BAA2B,gBAAgBA,CAAG,EAAE,CACtD,CAAC,EAEHD,EAAU,YAAS,0BAAuB,KAAG,yBAAsB,CAAC,EAE7DA,CACT",
|
|
6
|
+
"names": ["di_exports", "__export", "makeContainer", "__toCommonJS", "import_inversify", "import_appBinderModule", "import_NullLoggerPublisherService", "import_useCasesModule", "import_externalTypes", "dmk", "sessionId", "contextModule", "container", "tag", "factory"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var m=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var n=Object.getOwnPropertyNames;var s=Object.prototype.hasOwnProperty;var S=(e,o)=>{for(var t in o)m(e,t,{get:o[t],enumerable:!0})},b=(e,o,t,l)=>{if(o&&typeof o=="object"||typeof o=="function")for(let r of n(o))!s.call(e,r)&&r!==t&&m(e,r,{get:()=>o[r],enumerable:!(l=y(o,r))||l.enumerable});return e};var d=e=>b(m({},"__esModule",{value:!0}),e);var g={};S(g,{externalTypes:()=>f});module.exports=d(g);const f={Dmk:Symbol.for("Dmk"),SessionId:Symbol.for("SessionId"),ContextModule:Symbol.for("ContextModule"),DmkLoggerFactory:Symbol.for("DmkLoggerFactory")};0&&(module.exports={externalTypes});
|
|
2
2
|
//# sourceMappingURL=externalTypes.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/internal/externalTypes.ts"],
|
|
4
|
-
"sourcesContent": ["export const externalTypes = {\n Dmk: Symbol.for(\"Dmk\"),\n SessionId: Symbol.for(\"SessionId\"),\n ContextModule: Symbol.for(\"ContextModule\"),\n};\n"],
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,mBAAAE,IAAA,eAAAC,EAAAH,GAAO,MAAME,EAAgB,CAC3B,IAAK,OAAO,IAAI,KAAK,EACrB,UAAW,OAAO,IAAI,WAAW,EACjC,cAAe,OAAO,IAAI,eAAe,
|
|
4
|
+
"sourcesContent": ["export const externalTypes = {\n Dmk: Symbol.for(\"Dmk\"),\n SessionId: Symbol.for(\"SessionId\"),\n ContextModule: Symbol.for(\"ContextModule\"),\n DmkLoggerFactory: Symbol.for(\"DmkLoggerFactory\"),\n};\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,mBAAAE,IAAA,eAAAC,EAAAH,GAAO,MAAME,EAAgB,CAC3B,IAAK,OAAO,IAAI,KAAK,EACrB,UAAW,OAAO,IAAI,WAAW,EACjC,cAAe,OAAO,IAAI,eAAe,EACzC,iBAAkB,OAAO,IAAI,kBAAkB,CACjD",
|
|
6
6
|
"names": ["externalTypes_exports", "__export", "externalTypes", "__toCommonJS"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var a=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var B=Object.getOwnPropertyNames;var s=Object.prototype.hasOwnProperty;var u=(n,r)=>{for(var i in r)a(n,i,{get:r[i],enumerable:!0})},A=(n,r,i,p)=>{if(r&&typeof r=="object"||typeof r=="function")for(let o of B(r))!s.call(n,o)&&o!==i&&a(n,o,{get:()=>r[o],enumerable:!(p=f(r,o))||p.enumerable});return n};var g=n=>A(a({},"__esModule",{value:!0}),n),l=(n,r,i,p)=>{for(var o=p>1?void 0:p?f(r,i):r,m=n.length-1,c;m>=0;m--)(c=n[m])&&(o=(p?c(r,i,o):c(o))||o);return p&&o&&a(r,i,o),o},T=(n,r)=>(i,p)=>r(i,p,n);var y={};u(y,{SignTransactionUseCase:()=>t});module.exports=g(y);var e=require("inversify"),d=require("../../app-binder/di/appBinderTypes");let t=class{constructor(r){this.appBinder=r}execute(r,i,p){return this.appBinder.signTransaction({derivationPath:r,transaction:i,solanaTransactionOptionalConfig:p})}};t=l([(0,e.injectable)(),T(0,(0,e.inject)(d.appBinderTypes.AppBinder))],t);0&&(module.exports={SignTransactionUseCase});
|
|
2
2
|
//# sourceMappingURL=SignTransactionUseCase.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/use-cases/transaction/SignTransactionUseCase.ts"],
|
|
4
|
-
"sourcesContent": ["import { inject, injectable } from \"inversify\";\n\nimport { SignTransactionDAReturnType } from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport {
|
|
5
|
-
"mappings": "okBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,4BAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAmC,qBAKnCC,EAA+B,kDAIxB,IAAMC,EAAN,KAA6B,CAClC,YAC4CC,EAC1C,CAD0C,eAAAA,CACzC,CAEH,QACEC,EACAC,EACAC,
|
|
6
|
-
"names": ["SignTransactionUseCase_exports", "__export", "SignTransactionUseCase", "__toCommonJS", "import_inversify", "import_appBinderTypes", "SignTransactionUseCase", "appBinder", "derivationPath", "transaction", "
|
|
4
|
+
"sourcesContent": ["import { inject, injectable } from \"inversify\";\n\nimport { SignTransactionDAReturnType } from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { SolanaTransactionOptionalConfig } from \"@api/model/SolanaTransactionOptionalConfig\";\nimport { Transaction } from \"@api/model/Transaction\";\nimport { appBinderTypes } from \"@internal/app-binder/di/appBinderTypes\";\nimport { SolanaAppBinder } from \"@internal/app-binder/SolanaAppBinder\";\n\n@injectable()\nexport class SignTransactionUseCase {\n constructor(\n @inject(appBinderTypes.AppBinder) private appBinder: SolanaAppBinder,\n ) {}\n\n execute(\n derivationPath: string,\n transaction: Transaction,\n solanaTransactionOptionalConfig?: SolanaTransactionOptionalConfig,\n ): SignTransactionDAReturnType {\n return this.appBinder.signTransaction({\n derivationPath,\n transaction,\n solanaTransactionOptionalConfig,\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "okBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,4BAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAmC,qBAKnCC,EAA+B,kDAIxB,IAAMC,EAAN,KAA6B,CAClC,YAC4CC,EAC1C,CAD0C,eAAAA,CACzC,CAEH,QACEC,EACAC,EACAC,EAC6B,CAC7B,OAAO,KAAK,UAAU,gBAAgB,CACpC,eAAAF,EACA,YAAAC,EACA,gCAAAC,CACF,CAAC,CACH,CACF,EAhBaJ,EAANK,EAAA,IADN,cAAW,EAGPC,EAAA,eAAO,iBAAe,SAAS,IAFvBN",
|
|
6
|
+
"names": ["SignTransactionUseCase_exports", "__export", "SignTransactionUseCase", "__toCommonJS", "import_inversify", "import_appBinderTypes", "SignTransactionUseCase", "appBinder", "derivationPath", "transaction", "solanaTransactionOptionalConfig", "__decorateClass", "__decorateParam"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var i=require("./SignTransactionUseCase");describe("GetAppConfigurationUseCase",()=>{const
|
|
1
|
+
"use strict";var i=require("./SignTransactionUseCase");describe("GetAppConfigurationUseCase",()=>{const n=vi.fn(),s={signTransaction:n};let t;beforeEach(()=>{vi.clearAllMocks(),t=new i.SignTransactionUseCase(s)}),it("should return the config from the appBinder's getAppConfiguration method",()=>{n.mockReturnValue(new Uint8Array([66]));const e=t.execute("44'/501'/0'/0'",new Uint8Array([1,2,3,4]));expect(n).toHaveBeenCalledWith({derivationPath:"44'/501'/0'/0'",transaction:new Uint8Array([1,2,3,4]),solanaTransactionOptionalConfig:void 0}),expect(e).toEqual(new Uint8Array([66]))}),it("should forward skipOpenApp and TransactionResolutionContext to appBinder.signTransaction",()=>{const e="44'/501'/1'/2'",a=new Uint8Array([170,187]),o={skipOpenApp:!0,transactionResolutionContext:{tokenAddress:"someToken",createATA:{address:"someAddress",mintAddress:"someMint"}}};t.execute(e,a,o),expect(n).toHaveBeenCalledWith({derivationPath:e,transaction:a,solanaTransactionOptionalConfig:o})})});
|
|
2
2
|
//# sourceMappingURL=SignTransactionUseCase.test.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/use-cases/transaction/SignTransactionUseCase.test.ts"],
|
|
4
|
-
"sourcesContent": ["import { type SolanaAppBinder } from \"@internal/app-binder/SolanaAppBinder\";\n\nimport { SignTransactionUseCase } from \"./SignTransactionUseCase\";\n\ndescribe(\"GetAppConfigurationUseCase\", () => {\n const signTransactionMock = vi.fn();\n const appBinderMock = {\n signTransaction: signTransactionMock,\n } as unknown as SolanaAppBinder;\n let useCase: SignTransactionUseCase;\n\n beforeEach(() => {\n vi.clearAllMocks();\n useCase = new SignTransactionUseCase(appBinderMock);\n });\n\n it(\"should return the config from the appBinder's getAppConfiguration method\", () => {\n // GIVEN\n signTransactionMock.mockReturnValue(new Uint8Array([0x042]));\n\n // WHEN\n const result = useCase.execute(\n \"44'/501'/0'/0'\",\n new Uint8Array([0x01, 0x02, 0x03, 0x04]),\n );\n\n // THEN\n expect(signTransactionMock).toHaveBeenCalledWith({\n derivationPath: \"44'/501'/0'/0'\",\n transaction: new Uint8Array([0x01, 0x02, 0x03, 0x04]),\n
|
|
5
|
-
"mappings": "aAEA,IAAAA,EAAuC,oCAEvC,SAAS,6BAA8B,IAAM,CAC3C,MAAMC,EAAsB,GAAG,GAAG,EAC5BC,EAAgB,CACpB,gBAAiBD,CACnB,EACA,IAAIE,EAEJ,WAAW,IAAM,CACf,GAAG,cAAc,EACjBA,EAAU,IAAI,yBAAuBD,CAAa,CACpD,CAAC,EAED,GAAG,2EAA4E,IAAM,CAEnFD,EAAoB,gBAAgB,IAAI,WAAW,CAAC,EAAK,CAAC,CAAC,EAG3D,MAAMG,EAASD,EAAQ,QACrB,iBACA,IAAI,WAAW,CAAC,EAAM,EAAM,EAAM,CAAI,CAAC,CACzC,EAGA,OAAOF,CAAmB,EAAE,qBAAqB,CAC/C,eAAgB,iBAChB,YAAa,IAAI,WAAW,CAAC,EAAM,EAAM,EAAM,CAAI,CAAC,EACpD,
|
|
4
|
+
"sourcesContent": ["import { type SolanaAppBinder } from \"@internal/app-binder/SolanaAppBinder\";\n\nimport { SignTransactionUseCase } from \"./SignTransactionUseCase\";\n\ndescribe(\"GetAppConfigurationUseCase\", () => {\n const signTransactionMock = vi.fn();\n const appBinderMock = {\n signTransaction: signTransactionMock,\n } as unknown as SolanaAppBinder;\n let useCase: SignTransactionUseCase;\n\n beforeEach(() => {\n vi.clearAllMocks();\n useCase = new SignTransactionUseCase(appBinderMock);\n });\n\n it(\"should return the config from the appBinder's getAppConfiguration method\", () => {\n // GIVEN\n signTransactionMock.mockReturnValue(new Uint8Array([0x042]));\n\n // WHEN\n const result = useCase.execute(\n \"44'/501'/0'/0'\",\n new Uint8Array([0x01, 0x02, 0x03, 0x04]),\n );\n\n // THEN\n expect(signTransactionMock).toHaveBeenCalledWith({\n derivationPath: \"44'/501'/0'/0'\",\n transaction: new Uint8Array([0x01, 0x02, 0x03, 0x04]),\n solanaTransactionOptionalConfig: undefined,\n });\n expect(result).toEqual(new Uint8Array([0x042]));\n });\n\n it(\"should forward skipOpenApp and TransactionResolutionContext to appBinder.signTransaction\", () => {\n // GIVEN\n const derivationPath = \"44'/501'/1'/2'\";\n const tx = new Uint8Array([0xaa, 0xbb]);\n const opts = {\n skipOpenApp: true,\n transactionResolutionContext: {\n tokenAddress: \"someToken\",\n createATA: { address: \"someAddress\", mintAddress: \"someMint\" },\n },\n };\n\n // WHEN\n useCase.execute(derivationPath, tx, opts);\n\n // THEN\n expect(signTransactionMock).toHaveBeenCalledWith({\n derivationPath,\n transaction: tx,\n solanaTransactionOptionalConfig: opts,\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "aAEA,IAAAA,EAAuC,oCAEvC,SAAS,6BAA8B,IAAM,CAC3C,MAAMC,EAAsB,GAAG,GAAG,EAC5BC,EAAgB,CACpB,gBAAiBD,CACnB,EACA,IAAIE,EAEJ,WAAW,IAAM,CACf,GAAG,cAAc,EACjBA,EAAU,IAAI,yBAAuBD,CAAa,CACpD,CAAC,EAED,GAAG,2EAA4E,IAAM,CAEnFD,EAAoB,gBAAgB,IAAI,WAAW,CAAC,EAAK,CAAC,CAAC,EAG3D,MAAMG,EAASD,EAAQ,QACrB,iBACA,IAAI,WAAW,CAAC,EAAM,EAAM,EAAM,CAAI,CAAC,CACzC,EAGA,OAAOF,CAAmB,EAAE,qBAAqB,CAC/C,eAAgB,iBAChB,YAAa,IAAI,WAAW,CAAC,EAAM,EAAM,EAAM,CAAI,CAAC,EACpD,gCAAiC,MACnC,CAAC,EACD,OAAOG,CAAM,EAAE,QAAQ,IAAI,WAAW,CAAC,EAAK,CAAC,CAAC,CAChD,CAAC,EAED,GAAG,2FAA4F,IAAM,CAEnG,MAAMC,EAAiB,iBACjBC,EAAK,IAAI,WAAW,CAAC,IAAM,GAAI,CAAC,EAChCC,EAAO,CACX,YAAa,GACb,6BAA8B,CAC5B,aAAc,YACd,UAAW,CAAE,QAAS,cAAe,YAAa,UAAW,CAC/D,CACF,EAGAJ,EAAQ,QAAQE,EAAgBC,EAAIC,CAAI,EAGxC,OAAON,CAAmB,EAAE,qBAAqB,CAC/C,eAAAI,EACA,YAAaC,EACb,gCAAiCC,CACnC,CAAC,CACH,CAAC,CACH,CAAC",
|
|
6
6
|
"names": ["import_SignTransactionUseCase", "signTransactionMock", "appBinderMock", "useCase", "result", "derivationPath", "tx", "opts"]
|
|
7
7
|
}
|
package/lib/cjs/package.json
CHANGED
|
@@ -1,39 +1,4 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "@ledgerhq/device-signer-kit-solana",
|
|
3
|
-
"version": "1.2.0",
|
|
4
|
-
"private": false,
|
|
5
|
-
"license": "Apache-2.0",
|
|
6
|
-
"exports": {
|
|
7
|
-
".": {
|
|
8
|
-
"types": "./lib/types/index.d.ts",
|
|
9
|
-
"import": "./lib/esm/index.js",
|
|
10
|
-
"require": "./lib/cjs/index.js"
|
|
11
|
-
},
|
|
12
|
-
"./*": {
|
|
13
|
-
"types": "./lib/types/*",
|
|
14
|
-
"import": "./lib/esm/*",
|
|
15
|
-
"require": "./lib/cjs/*"
|
|
16
|
-
}
|
|
17
|
-
},
|
|
18
|
-
"files": [
|
|
19
|
-
"./lib"
|
|
20
|
-
],
|
|
21
|
-
"scripts": {
|
|
22
|
-
"prebuild": "rimraf lib",
|
|
23
|
-
"build": "pnpm ldmk-tool build --entryPoints src/index.ts,src/**/*.ts --tsconfig tsconfig.prod.json",
|
|
24
|
-
"dev": "concurrently \"pnpm watch:builds\" \"pnpm watch:types\"",
|
|
25
|
-
"watch:builds": "pnpm ldmk-tool watch --entryPoints src/index.ts,src/**/*.ts --tsconfig tsconfig.prod.json",
|
|
26
|
-
"watch:types": "concurrently \"tsc --watch -p tsconfig.prod.json\" \"tsc-alias --watch -p tsconfig.prod.json\"",
|
|
27
|
-
"lint": "eslint",
|
|
28
|
-
"lint:fix": "pnpm lint --fix",
|
|
29
|
-
"postpack": "find . -name '*.tgz' -exec cp {} ../../../dist/ \\; ",
|
|
30
|
-
"prettier": "prettier . --check",
|
|
31
|
-
"prettier:fix": "prettier . --write",
|
|
32
|
-
"typecheck": "tsc --noEmit",
|
|
33
|
-
"test": "vitest run",
|
|
34
|
-
"test:watch": "vitest",
|
|
35
|
-
"test:coverage": "vitest run --coverage"
|
|
36
|
-
},
|
|
37
2
|
"dependencies": {
|
|
38
3
|
"@ledgerhq/context-module": "workspace:*",
|
|
39
4
|
"@ledgerhq/signer-utils": "workspace:*",
|
|
@@ -58,7 +23,46 @@
|
|
|
58
23
|
"rxjs": "catalog:",
|
|
59
24
|
"ts-node": "catalog:"
|
|
60
25
|
},
|
|
26
|
+
"exports": {
|
|
27
|
+
".": {
|
|
28
|
+
"import": "./lib/esm/index.js",
|
|
29
|
+
"require": "./lib/cjs/index.js",
|
|
30
|
+
"types": "./lib/types/index.d.ts"
|
|
31
|
+
},
|
|
32
|
+
"./*": {
|
|
33
|
+
"import": "./lib/esm/*",
|
|
34
|
+
"require": "./lib/cjs/*",
|
|
35
|
+
"types": "./lib/types/*"
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"files": [
|
|
39
|
+
"./lib"
|
|
40
|
+
],
|
|
41
|
+
"license": "Apache-2.0",
|
|
42
|
+
"name": "@ledgerhq/device-signer-kit-solana",
|
|
61
43
|
"peerDependencies": {
|
|
62
44
|
"@ledgerhq/device-management-kit": "workspace:*"
|
|
63
|
-
}
|
|
45
|
+
},
|
|
46
|
+
"private": false,
|
|
47
|
+
"repository": {
|
|
48
|
+
"type": "git",
|
|
49
|
+
"url": "https://github.com/LedgerHQ/device-sdk-ts.git"
|
|
50
|
+
},
|
|
51
|
+
"scripts": {
|
|
52
|
+
"build": "pnpm ldmk-tool build --entryPoints src/index.ts,src/**/*.ts --tsconfig tsconfig.prod.json",
|
|
53
|
+
"dev": "concurrently \"pnpm watch:builds\" \"pnpm watch:types\"",
|
|
54
|
+
"lint": "eslint",
|
|
55
|
+
"lint:fix": "pnpm lint --fix",
|
|
56
|
+
"postpack": "find . -name '*.tgz' -exec cp {} ../../../dist/ \\; ",
|
|
57
|
+
"prebuild": "rimraf lib",
|
|
58
|
+
"prettier": "prettier . --check",
|
|
59
|
+
"prettier:fix": "prettier . --write",
|
|
60
|
+
"test": "vitest run",
|
|
61
|
+
"test:coverage": "vitest run --coverage",
|
|
62
|
+
"test:watch": "vitest",
|
|
63
|
+
"typecheck": "tsc --noEmit",
|
|
64
|
+
"watch:builds": "pnpm ldmk-tool watch --entryPoints src/index.ts,src/**/*.ts --tsconfig tsconfig.prod.json",
|
|
65
|
+
"watch:types": "concurrently \"tsc --watch -p tsconfig.prod.json\" \"tsc-alias --watch -p tsconfig.prod.json\""
|
|
66
|
+
},
|
|
67
|
+
"version": "0.0.0-trusted-names-native-transfer-1-20260121120757"
|
|
64
68
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{ContextModuleBuilder as
|
|
1
|
+
import{ContextModuleBuilder as i}from"@ledgerhq/context-module";import{NullLoggerPublisherService as n}from"../internal/app-binder/services/utils/NullLoggerPublisherService";import{DefaultSignerSolana as r}from"../internal/DefaultSignerSolana";class a{_dmk;_sessionId;_customContextModule;_originToken;constructor({dmk:e,sessionId:t,originToken:o}){this._dmk=e,this._sessionId=t,this._originToken=o}withContextModule(e){return this._customContextModule=e,this}build(){return new r({dmk:this._dmk,sessionId:this._sessionId,contextModule:this._customContextModule??new i({originToken:this._originToken,loggerFactory:e=>{const t=this._dmk.getLoggerFactory?.();return t?t(`SignerSolanaContextModule-${e}`):n(`SignerSolanaContextModule-${e}`)}}).build()})}}export{a as SignerSolanaBuilder};
|
|
2
2
|
//# sourceMappingURL=SignerSolanaBuilder.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/api/SignerSolanaBuilder.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type ContextModule,\n ContextModuleBuilder,\n} from \"@ledgerhq/context-module\";\nimport {\n type DeviceManagementKit,\n type DeviceSessionId,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { DefaultSignerSolana } from \"@internal/DefaultSignerSolana\";\n\ntype SignerSolanaBuilderConstructorArgs = {\n dmk: DeviceManagementKit;\n sessionId: DeviceSessionId;\n originToken?: string;\n};\n\n/**\n * Builder for the `SignerSolana` class.\n *\n * @example\n * ```\n * const signer = new SignerSolanaBuilder({ dmk, sessionId })\n * .build();\n * ```\n */\nexport class SignerSolanaBuilder {\n private _dmk: DeviceManagementKit;\n private _sessionId: DeviceSessionId;\n private _customContextModule: ContextModule | undefined;\n private _originToken: string | undefined;\n\n constructor({\n dmk,\n sessionId,\n originToken,\n }: SignerSolanaBuilderConstructorArgs) {\n this._dmk = dmk;\n this._sessionId = sessionId;\n this._originToken = originToken;\n }\n\n /**\n * Override the default context module\n *\n * @param contextModule\n * @returns this\n */\n withContextModule(contextModule: ContextModule) {\n this._customContextModule = contextModule;\n return this;\n }\n\n /**\n * Build the solana signer\n *\n * @returns the solana signer\n */\n public build() {\n return new DefaultSignerSolana({\n dmk: this._dmk,\n sessionId: this._sessionId,\n contextModule:\n this._customContextModule ??\n new ContextModuleBuilder({
|
|
5
|
-
"mappings": "AAAA,OAEE,wBAAAA,MACK,2BAMP,OAAS,uBAAAC,MAA2B,gCAiB7B,MAAMC,CAAoB,CACvB,KACA,WACA,qBACA,aAER,YAAY,CACV,IAAAC,EACA,UAAAC,EACA,YAAAC,CACF,EAAuC,CACrC,KAAK,KAAOF,EACZ,KAAK,WAAaC,EAClB,KAAK,aAAeC,CACtB,CAQA,kBAAkBC,EAA8B,CAC9C,YAAK,qBAAuBA,EACrB,IACT,CAOO,OAAQ,CACb,OAAO,IAAIL,EAAoB,CAC7B,IAAK,KAAK,KACV,UAAW,KAAK,WAChB,cACE,KAAK,sBACL,
|
|
6
|
-
"names": ["ContextModuleBuilder", "DefaultSignerSolana", "SignerSolanaBuilder", "dmk", "sessionId", "originToken", "contextModule"]
|
|
4
|
+
"sourcesContent": ["import {\n type ContextModule,\n ContextModuleBuilder,\n} from \"@ledgerhq/context-module\";\nimport {\n type DeviceManagementKit,\n type DeviceSessionId,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { NullLoggerPublisherService } from \"@internal/app-binder/services/utils/NullLoggerPublisherService\";\nimport { DefaultSignerSolana } from \"@internal/DefaultSignerSolana\";\n\ntype SignerSolanaBuilderConstructorArgs = {\n dmk: DeviceManagementKit;\n sessionId: DeviceSessionId;\n originToken?: string;\n};\n\n/**\n * Builder for the `SignerSolana` class.\n *\n * @example\n * ```\n * const signer = new SignerSolanaBuilder({ dmk, sessionId })\n * .build();\n * ```\n */\nexport class SignerSolanaBuilder {\n private _dmk: DeviceManagementKit;\n private _sessionId: DeviceSessionId;\n private _customContextModule: ContextModule | undefined;\n private _originToken: string | undefined;\n\n constructor({\n dmk,\n sessionId,\n originToken,\n }: SignerSolanaBuilderConstructorArgs) {\n this._dmk = dmk;\n this._sessionId = sessionId;\n this._originToken = originToken;\n }\n\n /**\n * Override the default context module\n *\n * @param contextModule\n * @returns this\n */\n withContextModule(contextModule: ContextModule) {\n this._customContextModule = contextModule;\n return this;\n }\n\n /**\n * Build the solana signer\n *\n * @returns the solana signer\n */\n public build() {\n return new DefaultSignerSolana({\n dmk: this._dmk,\n sessionId: this._sessionId,\n contextModule:\n this._customContextModule ??\n new ContextModuleBuilder({\n originToken: this._originToken,\n loggerFactory: (tag: string) => {\n const factory = this._dmk.getLoggerFactory?.();\n return factory\n ? factory(`SignerSolanaContextModule-${tag}`)\n : NullLoggerPublisherService(`SignerSolanaContextModule-${tag}`);\n },\n }).build(),\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OAEE,wBAAAA,MACK,2BAMP,OAAS,8BAAAC,MAAkC,iEAC3C,OAAS,uBAAAC,MAA2B,gCAiB7B,MAAMC,CAAoB,CACvB,KACA,WACA,qBACA,aAER,YAAY,CACV,IAAAC,EACA,UAAAC,EACA,YAAAC,CACF,EAAuC,CACrC,KAAK,KAAOF,EACZ,KAAK,WAAaC,EAClB,KAAK,aAAeC,CACtB,CAQA,kBAAkBC,EAA8B,CAC9C,YAAK,qBAAuBA,EACrB,IACT,CAOO,OAAQ,CACb,OAAO,IAAIL,EAAoB,CAC7B,IAAK,KAAK,KACV,UAAW,KAAK,WAChB,cACE,KAAK,sBACL,IAAIF,EAAqB,CACvB,YAAa,KAAK,aAClB,cAAgBQ,GAAgB,CAC9B,MAAMC,EAAU,KAAK,KAAK,mBAAmB,EAC7C,OAAOA,EACHA,EAAQ,6BAA6BD,CAAG,EAAE,EAC1CP,EAA2B,6BAA6BO,CAAG,EAAE,CACnE,CACF,CAAC,EAAE,MAAM,CACb,CAAC,CACH,CACF",
|
|
6
|
+
"names": ["ContextModuleBuilder", "NullLoggerPublisherService", "DefaultSignerSolana", "SignerSolanaBuilder", "dmk", "sessionId", "originToken", "contextModule", "tag", "factory"]
|
|
7
7
|
}
|
|
@@ -1 +1,2 @@
|
|
|
1
|
+
const t=Object.freeze({OPEN_APP:"signer.sol.steps.openApp",GET_APP_CONFIG:"signer.sol.steps.getAppConfig",INSPECT_TRANSACTION:"signer.sol.steps.inspectTransaction",BUILD_TRANSACTION_CONTEXT:"signer.sol.steps.buildTransactionContext",PROVIDE_TRANSACTION_CONTEXT:"signer.sol.steps.provideTransactionContext",SIGN_TRANSACTION:"signer.sol.steps.signTransaction"});export{t as signTransactionDAStateSteps};
|
|
1
2
|
//# sourceMappingURL=SignTransactionDeviceActionTypes.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": [],
|
|
4
|
-
"sourcesContent": [],
|
|
5
|
-
"mappings": "",
|
|
6
|
-
"names": []
|
|
3
|
+
"sources": ["../../../../src/api/app-binder/SignTransactionDeviceActionTypes.ts"],
|
|
4
|
+
"sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport { type SolanaTransactionContextResultSuccess } from \"@ledgerhq/context-module/src/solana/domain/solanaContextTypes.js\";\nimport {\n type DeviceActionState,\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 TxInspectorResult } from \"@internal/app-binder/services/TransactionInspector\";\n\nexport const signTransactionDAStateSteps = Object.freeze({\n OPEN_APP: \"signer.sol.steps.openApp\",\n GET_APP_CONFIG: \"signer.sol.steps.getAppConfig\",\n INSPECT_TRANSACTION: \"signer.sol.steps.inspectTransaction\",\n BUILD_TRANSACTION_CONTEXT: \"signer.sol.steps.buildTransactionContext\",\n PROVIDE_TRANSACTION_CONTEXT: \"signer.sol.steps.provideTransactionContext\",\n SIGN_TRANSACTION: \"signer.sol.steps.signTransaction\",\n} as const);\n\nexport type SignTransactionDAStateStep =\n (typeof signTransactionDAStateSteps)[keyof typeof signTransactionDAStateSteps];\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};\n\nexport type SignTransactionDAError =\n | OpenAppDAError\n | SendCommandInAppDAError<SolanaAppErrorCodes>;\n\ntype SignTransactionDARequiredInteraction =\n | UserInteractionRequired\n | OpenAppDARequiredInteraction;\n\nexport type SignTransactionDAIntermediateValue = {\n requiredUserInteraction: SignTransactionDARequiredInteraction;\n step: SignTransactionDAStateStep;\n};\n\nexport type SignTransactionDAState = DeviceActionState<\n SignTransactionDAOutput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n>;\n\nexport type SignTransactionDAInternalState = {\n readonly error: SignTransactionDAError | null;\n readonly signature: Signature | null;\n readonly appConfig: AppConfiguration | null;\n readonly solanaTransactionContext: SolanaTransactionContextResultSuccess | null;\n readonly inspectorResult: TxInspectorResult | null;\n};\n\nexport type SignTransactionDAReturnType = ExecuteDeviceActionReturnType<\n SignTransactionDAOutput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n>;\n"],
|
|
5
|
+
"mappings": "AAkBO,MAAMA,EAA8B,OAAO,OAAO,CACvD,SAAU,2BACV,eAAgB,gCAChB,oBAAqB,sCACrB,0BAA2B,2CAC3B,4BAA6B,6CAC7B,iBAAkB,kCACpB,CAAU",
|
|
6
|
+
"names": ["signTransactionDAStateSteps"]
|
|
7
7
|
}
|
package/lib/esm/api/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{SignerSolanaBuilder as
|
|
1
|
+
import{SignerSolanaBuilder as n}from"./SignerSolanaBuilder";import{SolanaToolsBuilder as a}from"./SolanaToolsBuilder";export{n as SignerSolanaBuilder,a as SolanaToolsBuilder};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/lib/esm/api/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/api/index.ts"],
|
|
4
|
-
"sourcesContent": ["export type {\n GenerateTransactionDAError,\n GenerateTransactionDAIntermediateValue,\n GenerateTransactionDAOutput,\n GenerateTransactionDAReturnType,\n} from \"@api/app-binder/GenerateTransactionDeviceActionTypes\";\nexport type {\n GetAddressDAError,\n GetAddressDAIntermediateValue,\n GetAddressDAOutput,\n GetAddressDAReturnType,\n} from \"@api/app-binder/GetAddressDeviceActionTypes\";\nexport type {\n GetAppConfigurationDAError,\n GetAppConfigurationDAIntermediateValue,\n GetAppConfigurationDAOutput,\n} from \"@api/app-binder/GetAppConfigurationDeviceActionTypes\";\nexport type {\n SignMessageDAError,\n SignMessageDAIntermediateValue,\n SignMessageDAOutput,\n} from \"@api/app-binder/SignMessageDeviceActionTypes\";\nexport type {\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAOutput,\n SignTransactionDAReturnType,\n} from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nexport type { Signature } from \"@api/model/Signature\";\nexport type {
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["export type {\n GenerateTransactionDAError,\n GenerateTransactionDAIntermediateValue,\n GenerateTransactionDAOutput,\n GenerateTransactionDAReturnType,\n} from \"@api/app-binder/GenerateTransactionDeviceActionTypes\";\nexport type {\n GetAddressDAError,\n GetAddressDAIntermediateValue,\n GetAddressDAOutput,\n GetAddressDAReturnType,\n} from \"@api/app-binder/GetAddressDeviceActionTypes\";\nexport type {\n GetAppConfigurationDAError,\n GetAppConfigurationDAIntermediateValue,\n GetAppConfigurationDAOutput,\n} from \"@api/app-binder/GetAppConfigurationDeviceActionTypes\";\nexport type {\n SignMessageDAError,\n SignMessageDAIntermediateValue,\n SignMessageDAOutput,\n} from \"@api/app-binder/SignMessageDeviceActionTypes\";\nexport type {\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAOutput,\n SignTransactionDAReturnType,\n} from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nexport type { Signature } from \"@api/model/Signature\";\nexport type { SolanaTransactionOptionalConfig } from \"@api/model/SolanaTransactionOptionalConfig\";\nexport type { Transaction } from \"@api/model/Transaction\";\nexport type {\n TransactionResolutionContext,\n UserInputType,\n} from \"@api/model/TransactionResolutionContext\";\nexport type { SignerSolana } from \"@api/SignerSolana\";\nexport { SignerSolanaBuilder } from \"@api/SignerSolanaBuilder\";\nexport type { SolanaTools } from \"@api/SolanaTools\";\nexport { SolanaToolsBuilder } from \"@api/SolanaToolsBuilder\";\n"],
|
|
5
|
+
"mappings": "AAoCA,OAAS,uBAAAA,MAA2B,2BAEpC,OAAS,sBAAAC,MAA0B",
|
|
6
6
|
"names": ["SignerSolanaBuilder", "SolanaToolsBuilder"]
|
|
7
7
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=SolanaTransactionOptionalConfig.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": [],
|
|
4
|
-
"sourcesContent": [],
|
|
5
|
-
"mappings": "",
|
|
6
|
-
"names": []
|
|
3
|
+
"sources": ["../../../../src/api/model/TransactionResolutionContext.ts"],
|
|
4
|
+
"sourcesContent": ["export type TransactionResolutionContext = {\n tokenAddress?: string;\n createATA?: {\n address: string;\n mintAddress: string;\n };\n tokenInternalId?: string;\n templateId?: string;\n userInputType?: UserInputType;\n};\n\nexport enum UserInputType {\n SOL = \"sol\",\n ATA = \"ata\",\n}\n"],
|
|
5
|
+
"mappings": "AAWO,IAAKA,OACVA,EAAA,IAAM,MACNA,EAAA,IAAM,MAFIA,OAAA",
|
|
6
|
+
"names": ["UserInputType"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/internal/DefaultSignerSolana.ts"],
|
|
4
|
-
"sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n type DeviceManagementKit,\n type DeviceSessionId,\n} from \"@ledgerhq/device-management-kit\";\nimport { type Container } from \"inversify\";\n\nimport { type GetAddressDAReturnType } from \"@api/app-binder/GetAddressDeviceActionTypes\";\nimport { type GetAppConfigurationDAReturnType } from \"@api/app-binder/GetAppConfigurationDeviceActionTypes\";\nimport { type SignMessageDAReturnType } from \"@api/app-binder/SignMessageDeviceActionTypes\";\nimport { type SignTransactionDAReturnType } from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { type AddressOptions } from \"@api/model/AddressOption\";\nimport { type MessageOptions } from \"@api/model/MessageOptions\";\nimport { type Transaction } from \"@api/model/Transaction\";\nimport { type TransactionResolutionContext } from \"@api/model/TransactionResolutionContext\";\nimport { type SignerSolana } from \"@api/SignerSolana\";\n\nimport { type GetAddressUseCase } from \"./use-cases/address/GetAddressUseCase\";\nimport { type GetAppConfigurationUseCase } from \"./use-cases/app-configuration/GetAppConfigurationUseCase\";\nimport { useCasesTypes } from \"./use-cases/di/useCasesTypes\";\nimport { type SignMessageUseCase } from \"./use-cases/message/SignMessageUseCase\";\nimport { type SignTransactionUseCase } from \"./use-cases/transaction/SignTransactionUseCase\";\nimport { makeContainer } from \"./di\";\n\nexport type DefaultSignerSolanaConstructorArgs = {\n dmk: DeviceManagementKit;\n sessionId: DeviceSessionId;\n contextModule: ContextModule;\n};\n\nexport class DefaultSignerSolana implements SignerSolana {\n private _container: Container;\n\n constructor({\n dmk,\n sessionId,\n contextModule,\n }: DefaultSignerSolanaConstructorArgs) {\n this._container = makeContainer({ dmk, sessionId, contextModule });\n }\n\n signTransaction(\n derivationPath: string,\n transaction: Transaction,\n resolutionContext?: TransactionResolutionContext,\n ): SignTransactionDAReturnType {\n return this._container\n .get<SignTransactionUseCase>(useCasesTypes.SignTransactionUseCase)\n .execute(derivationPath, transaction, resolutionContext);\n }\n\n signMessage(\n derivationPath: string,\n message: string,\n options?: MessageOptions,\n ): SignMessageDAReturnType {\n return this._container\n .get<SignMessageUseCase>(useCasesTypes.SignMessageUseCase)\n .execute(derivationPath, message, options);\n }\n\n getAddress(\n derivationPath: string,\n options?: AddressOptions,\n ): GetAddressDAReturnType {\n return this._container\n .get<GetAddressUseCase>(useCasesTypes.GetAddressUseCase)\n .execute(derivationPath, options);\n }\n\n getAppConfiguration(): GetAppConfigurationDAReturnType {\n return this._container\n .get<GetAppConfigurationUseCase>(useCasesTypes.GetAppConfigurationUseCase)\n .execute();\n }\n}\n"],
|
|
5
|
-
"mappings": "AAmBA,OAAS,iBAAAA,MAAqB,+BAG9B,OAAS,iBAAAC,MAAqB,OAQvB,MAAMC,CAA4C,CAC/C,WAER,YAAY,CACV,IAAAC,EACA,UAAAC,EACA,cAAAC,CACF,EAAuC,CACrC,KAAK,WAAaJ,EAAc,CAAE,IAAAE,EAAK,UAAAC,EAAW,cAAAC,CAAc,CAAC,CACnE,
|
|
6
|
-
"names": ["useCasesTypes", "makeContainer", "DefaultSignerSolana", "dmk", "sessionId", "contextModule", "derivationPath", "transaction", "
|
|
4
|
+
"sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n type DeviceManagementKit,\n type DeviceSessionId,\n} from \"@ledgerhq/device-management-kit\";\nimport { type Container } from \"inversify\";\n\nimport { type GetAddressDAReturnType } from \"@api/app-binder/GetAddressDeviceActionTypes\";\nimport { type GetAppConfigurationDAReturnType } from \"@api/app-binder/GetAppConfigurationDeviceActionTypes\";\nimport { type SignMessageDAReturnType } from \"@api/app-binder/SignMessageDeviceActionTypes\";\nimport { type SignTransactionDAReturnType } from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { type AddressOptions } from \"@api/model/AddressOption\";\nimport { type MessageOptions } from \"@api/model/MessageOptions\";\nimport { type SolanaTransactionOptionalConfig } from \"@api/model/SolanaTransactionOptionalConfig\";\nimport { type Transaction } from \"@api/model/Transaction\";\nimport { type SignerSolana } from \"@api/SignerSolana\";\n\nimport { type GetAddressUseCase } from \"./use-cases/address/GetAddressUseCase\";\nimport { type GetAppConfigurationUseCase } from \"./use-cases/app-configuration/GetAppConfigurationUseCase\";\nimport { useCasesTypes } from \"./use-cases/di/useCasesTypes\";\nimport { type SignMessageUseCase } from \"./use-cases/message/SignMessageUseCase\";\nimport { type SignTransactionUseCase } from \"./use-cases/transaction/SignTransactionUseCase\";\nimport { makeContainer } from \"./di\";\n\nexport type DefaultSignerSolanaConstructorArgs = {\n dmk: DeviceManagementKit;\n sessionId: DeviceSessionId;\n contextModule: ContextModule;\n};\n\nexport class DefaultSignerSolana implements SignerSolana {\n private _container: Container;\n\n constructor({\n dmk,\n sessionId,\n contextModule,\n }: DefaultSignerSolanaConstructorArgs) {\n this._container = makeContainer({ dmk, sessionId, contextModule });\n }\n\n /**\n * ## signTransaction\n * #### Securely sign a Solana or SPL transaction using **clear signing** on Ledger devices.\n * ---\n * ### Parameters\n *\n * **Required**\n * - **derivationPath** `string`\n * The derivation path used in the transaction.\n *\n * - **transaction** `Uint8Array`\n * The serialised transaction to sign.\n *\n * **Optional**\n * - **options** `SolanaTransactionOptionalConfig`\n * Provides additional context for transaction signing.\n *\n * - **transactionResolutionContext** `object`\n * Lets you explicitly pass `tokenAddress` and ATA details, bypassing extraction from the transaction itself.\n *\n * - **tokenAddress** `string`\n * SPL token address being transferred.\n *\n * - **createATA** `object`\n * Information about creating an associated token account (ATA).\n *\n * - **address** `string` \u2013 Address (owner) of the ATA.\n * - **mintAddress** `string` \u2013 Mint address of the ATA.\n *\n * - **tokenInternalId** `string`\n * Ledger internal token ID\n *\n * - **solanaRPCURL** `string`\n * RPC endpoint to use if `transactionResolutionContext` is not provided\n * and parsing requires network lookups.\n * In browser environments, use a CORS-enabled RPC URL.\n * Defaults to: `\"https://api.mainnet-beta.solana.com/\"`.\n *\n * - **skipOpenApp** `boolean`\n * If `true`, skips opening the Solana app on the device.\n *\n * ---\n * ### Returns\n *\n * - `observable` That emits DeviceActionState updates\n * - `cancel` A function to cancel the action on the Ledger device.\n *\n * ---\n * ### Internal Flow\n *\n * Under the hood, this method subscribes to an\n * `Observable<DeviceActionState<Uint8Array, SignTransactionDAError, IntermediateValue>>`.\n *\n * #### DeviceActionState\n * Represents the lifecycle of a device action:\n *\n * ```ts\n * type DeviceActionState<Output, Error, IntermediateValue> =\n * | { status: DeviceActionStatus.NotStarted }\n * | { status: DeviceActionStatus.Pending; intermediateValue: IntermediateValue }\n * | { status: DeviceActionStatus.Stopped }\n * | { status: DeviceActionStatus.Completed; output: Output }\n * | { status: DeviceActionStatus.Error; error: Error };\n *\n * enum DeviceActionStatus {\n * NotStarted = \"not-started\",\n * Pending = \"pending\",\n * Stopped = \"stopped\",\n * Completed = \"completed\",\n * Error = \"error\"\n * }\n * ```\n *\n * - **NotStarted** \u2192 Action hasn\u2019t begun.\n * - **Pending** \u2192 Waiting for user confirmation on the device.\n * Includes an `intermediateValue` of type `IntermediateValue`.\n * - **Stopped** \u2192 Action was cancelled before completion.\n * - **Completed** \u2192 Provides the signed transaction bytes (`Uint8Array`).\n * - **Error** \u2192 The device or signing operation failed (`SignTransactionDAError`).\n *\n * ---\n * ### Example\n *\n * ```ts\n * const { observable } = signerSolana.signTransaction(\"m/44'/501'/0'/0'\", serializedTx, {\n * transactionResolutionContext: resolution,\n * });\n * observable.subscribe({\n * next: state => {\n * if (state.status === DeviceActionStatus.Pending) {\n * console.log(\"Waiting for user action...\", state.intermediateValue);\n * }\n * if (state.status === DeviceActionStatus.Completed) {\n * console.log(\"Signature:\", state.output);\n * }\n * },\n * error: err => console.error(\"Error:\", err),\n * });\n * ```\n */\n signTransaction(\n derivationPath: string,\n transaction: Transaction,\n solanaTransactionOptionalConfig?: SolanaTransactionOptionalConfig,\n ): SignTransactionDAReturnType {\n return this._container\n .get<SignTransactionUseCase>(useCasesTypes.SignTransactionUseCase)\n .execute(derivationPath, transaction, solanaTransactionOptionalConfig);\n }\n\n /**\n * ## signMessage\n * #### Securely sign an arbitrary message on Ledger devices.\n * ---\n * ### Parameters\n *\n * **Required**\n * - **derivationPath** `string`\n * The derivation path used for signing.\n *\n * - **message** `string (hex-encoded)`\n * The message to sign, provided as a hex string.\n *\n * **Optional**\n * - **options** `MessageOptions`\n * - **skipOpenApp** `boolean`\n * If `true`, skips opening the Solana app on the device.\n *\n * ---\n * ### Returns\n *\n * - `observable` That emits DeviceActionState updates\n * - `cancel` A function to cancel the action on the Ledger device.\n *\n * ---\n * ### Internal Flow\n *\n * Under the hood, this method subscribes to an\n * `Observable<DeviceActionState<Uint8Array, SignMessageDAError, IntermediateValue>>`.\n *\n * #### DeviceActionState\n * Represents the lifecycle of a device action:\n *\n * ```ts\n * type DeviceActionState<Output, Error, IntermediateValue> =\n * | { status: DeviceActionStatus.NotStarted }\n * | { status: DeviceActionStatus.Pending; intermediateValue: IntermediateValue }\n * | { status: DeviceActionStatus.Stopped }\n * | { status: DeviceActionStatus.Completed; output: Output }\n * | { status: DeviceActionStatus.Error; error: Error };\n *\n * enum DeviceActionStatus {\n * NotStarted = \"not-started\",\n * Pending = \"pending\",\n * Stopped = \"stopped\",\n * Completed = \"completed\",\n * Error = \"error\"\n * }\n * ```\n *\n * - **NotStarted** \u2192 Action hasn\u2019t begun.\n * - **Pending** \u2192 Waiting for user confirmation on the device.\n * Includes an `intermediateValue` of type `IntermediateValue`.\n * - **Stopped** \u2192 Action was cancelled before completion.\n * - **Completed** \u2192 Provides the signed message bytes (`Uint8Array`).\n * - **Error** \u2192 The device or signing operation failed (`SignMessageDAError`).\n *\n * ---\n * ### Example\n *\n * ```ts\n * const { observable } = signerSolana.signMessage(\n * \"m/44'/501'/0'/0'\",\n * \"48656c6c6f20576f726c64\" // hex string\n * );\n * observable.subscribe({\n * next: state => {\n * if (state.status === DeviceActionStatus.Pending) {\n * console.log(\"Waiting for user action...\", state.intermediateValue);\n * }\n * if (state.status === DeviceActionStatus.Completed) {\n * console.log(\"Signature:\", state.output);\n * }\n * },\n * error: err => console.error(\"Error:\", err),\n * });\n * ```\n */\n signMessage(\n derivationPath: string,\n message: string,\n options?: MessageOptions,\n ): SignMessageDAReturnType {\n return this._container\n .get<SignMessageUseCase>(useCasesTypes.SignMessageUseCase)\n .execute(derivationPath, message, options);\n }\n\n /**\n * ## getAddress\n * #### Retrieve a Solana address from Ledger devices.\n * ---\n * ### Parameters\n *\n * **Required**\n * - **derivationPath** `string`\n * The derivation path of the account to retrieve the address from.\n *\n * **Optional**\n * - **options** `AddressOptions`\n * - **checkOnDevice** `boolean`\n * If `true`, prompts the user to verify the address on the device.\n *\n * - **skipOpenApp** `boolean`\n * If `true`, skips opening the Solana app on the device.\n *\n * ---\n * ### Returns\n *\n * - `observable` That emits DeviceActionState updates\n * - `cancel` A function to cancel the action on the Ledger device.\n *\n * ---\n * ### Internal Flow\n *\n * Under the hood, this method subscribes to an\n * `Observable<DeviceActionState<string, GetAddressDAError, IntermediateValue>>`.\n *\n * #### DeviceActionState\n * Represents the lifecycle of a device action:\n *\n * ```ts\n * type DeviceActionState<Output, Error, IntermediateValue> =\n * | { status: DeviceActionStatus.NotStarted }\n * | { status: DeviceActionStatus.Pending; intermediateValue: IntermediateValue }\n * | { status: DeviceActionStatus.Stopped }\n * | { status: DeviceActionStatus.Completed; output: Output }\n * | { status: DeviceActionStatus.Error; error: Error };\n *\n * enum DeviceActionStatus {\n * NotStarted = \"not-started\",\n * Pending = \"pending\",\n * Stopped = \"stopped\",\n * Completed = \"completed\",\n * Error = \"error\"\n * }\n * ```\n *\n * - **NotStarted** \u2192 Action hasn\u2019t begun.\n * - **Pending** \u2192 Waiting for user confirmation on the device.\n * Includes an `intermediateValue` of type `IntermediateValue`.\n * - **Stopped** \u2192 Action was cancelled before completion.\n * - **Completed** \u2192 Provides the base58-encoded address string, decoded to `Uint8Array`.\n * - **Error** \u2192 The device or signing operation failed (`GetAddressDAError`).\n *\n */\n getAddress(\n derivationPath: string,\n options?: AddressOptions,\n ): GetAddressDAReturnType {\n return this._container\n .get<GetAddressUseCase>(useCasesTypes.GetAddressUseCase)\n .execute(derivationPath, options);\n }\n\n /**\n * ## getAppConfiguration\n * #### Retrieve the current Solana app configuration from a Ledger device.\n * ---\n * ### Parameters\n *\n * This method does not require any parameters.\n *\n * ---\n * ### Returns\n *\n * - `observable` That emits DeviceActionState updates\n * - `cancel` A function to cancel the action on the Ledger device.\n *\n * ---\n * ### Internal Flow\n *\n * Under the hood, this method subscribes to an\n * `Observable<DeviceActionState<GetAppConfigurationResult, Error, IntermediateValue>>`.\n *\n * #### DeviceActionState\n * Represents the lifecycle of a device action:\n *\n * ```ts\n * type DeviceActionState<Output, Error, IntermediateValue> =\n * | { status: DeviceActionStatus.NotStarted }\n * | { status: DeviceActionStatus.Pending; intermediateValue: IntermediateValue }\n * | { status: DeviceActionStatus.Stopped }\n * | { status: DeviceActionStatus.Completed; output: Output }\n * | { status: DeviceActionStatus.Error; error: Error };\n *\n * enum DeviceActionStatus {\n * NotStarted = \"not-started\",\n * Pending = \"pending\",\n * Stopped = \"stopped\",\n * Completed = \"completed\",\n * Error = \"error\"\n * }\n * ```\n *\n * - **NotStarted** \u2192 Action hasn\u2019t begun.\n * - **Pending** \u2192 Waiting for user confirmation on the device.\n * Includes an `intermediateValue` of type `IntermediateValue`.\n * - **Stopped** \u2192 Action was cancelled before completion.\n * - **Completed** \u2192 Provides the app configuration object.\n * - **Error** \u2192 The device or signing operation failed.\n *\n * ---\n * ### Example\n *\n * ```ts\n * const config = await signerSolana.getAppConfiguration();\n * console.log(config.version, config.flags);\n * ```\n */\n getAppConfiguration(): GetAppConfigurationDAReturnType {\n return this._container\n .get<GetAppConfigurationUseCase>(useCasesTypes.GetAppConfigurationUseCase)\n .execute();\n }\n}\n"],
|
|
5
|
+
"mappings": "AAmBA,OAAS,iBAAAA,MAAqB,+BAG9B,OAAS,iBAAAC,MAAqB,OAQvB,MAAMC,CAA4C,CAC/C,WAER,YAAY,CACV,IAAAC,EACA,UAAAC,EACA,cAAAC,CACF,EAAuC,CACrC,KAAK,WAAaJ,EAAc,CAAE,IAAAE,EAAK,UAAAC,EAAW,cAAAC,CAAc,CAAC,CACnE,CAsGA,gBACEC,EACAC,EACAC,EAC6B,CAC7B,OAAO,KAAK,WACT,IAA4BR,EAAc,sBAAsB,EAChE,QAAQM,EAAgBC,EAAaC,CAA+B,CACzE,CAgFA,YACEF,EACAG,EACAC,EACyB,CACzB,OAAO,KAAK,WACT,IAAwBV,EAAc,kBAAkB,EACxD,QAAQM,EAAgBG,EAASC,CAAO,CAC7C,CA4DA,WACEJ,EACAI,EACwB,CACxB,OAAO,KAAK,WACT,IAAuBV,EAAc,iBAAiB,EACtD,QAAQM,EAAgBI,CAAO,CACpC,CAyDA,qBAAuD,CACrD,OAAO,KAAK,WACT,IAAgCV,EAAc,0BAA0B,EACxE,QAAQ,CACb,CACF",
|
|
6
|
+
"names": ["useCasesTypes", "makeContainer", "DefaultSignerSolana", "dmk", "sessionId", "contextModule", "derivationPath", "transaction", "solanaTransactionOptionalConfig", "message", "options"]
|
|
7
7
|
}
|