@ledgerhq/device-signer-kit-solana 0.0.0-signer-eth-plugin-fix-20250331141239 → 0.0.0-transaction-unfunded-20250917151052
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 +5 -1
- 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 +2 -0
- package/lib/cjs/api/SolanaTools.js.map +7 -0
- package/lib/cjs/api/SolanaToolsBuilder.js +2 -0
- package/lib/cjs/api/SolanaToolsBuilder.js.map +7 -0
- package/lib/cjs/api/app-binder/GenerateTransactionDeviceActionTypes.js +2 -0
- package/lib/cjs/api/app-binder/GenerateTransactionDeviceActionTypes.js.map +7 -0
- package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js +1 -1
- package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js.map +1 -1
- package/lib/cjs/api/index.js +1 -1
- package/lib/cjs/api/index.js.map +3 -3
- package/lib/cjs/api/model/AddressOption.js +1 -1
- package/lib/cjs/api/model/AddressOption.js.map +1 -1
- package/lib/cjs/api/model/MessageOptions.js +2 -0
- package/lib/cjs/api/model/MessageOptions.js.map +7 -0
- package/lib/cjs/api/model/TransactionOptions.js +1 -1
- package/lib/cjs/api/model/TransactionOptions.js.map +1 -1
- package/lib/cjs/api/model/TransactionResolutionContext.js +2 -0
- package/lib/cjs/api/model/TransactionResolutionContext.js.map +7 -0
- package/lib/cjs/internal/DefaultSignerSolana.js +1 -1
- package/lib/cjs/internal/DefaultSignerSolana.js.map +3 -3
- package/lib/cjs/internal/DefaultSignerSolana.test.js +1 -1
- package/lib/cjs/internal/DefaultSignerSolana.test.js.map +3 -3
- package/lib/cjs/internal/DefaultSolanaTools.js +2 -0
- package/lib/cjs/internal/DefaultSolanaTools.js.map +7 -0
- package/lib/cjs/internal/DefaultSolanaTools.test.js +2 -0
- package/lib/cjs/internal/DefaultSolanaTools.test.js.map +7 -0
- 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/GetChallengeCommand.js +2 -0
- package/lib/cjs/internal/app-binder/command/GetChallengeCommand.js.map +7 -0
- package/lib/cjs/internal/app-binder/command/GetChallengeCommand.test.js +2 -0
- package/lib/cjs/internal/app-binder/command/GetChallengeCommand.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/command/GetPubKeyCommand.js.map +2 -2
- package/lib/cjs/internal/app-binder/command/ProvideTLVDescriptorCommand.js +2 -0
- package/lib/cjs/internal/app-binder/command/ProvideTLVDescriptorCommand.js.map +7 -0
- package/lib/cjs/internal/app-binder/command/ProvideTLVDescriptorCommand.test.js +2 -0
- package/lib/cjs/internal/app-binder/command/ProvideTLVDescriptorCommand.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/command/ProvideTrustedNamePKICommand.js +2 -0
- package/lib/cjs/internal/app-binder/command/ProvideTrustedNamePKICommand.js.map +7 -0
- package/lib/cjs/internal/app-binder/command/ProvideTrustedNamePKICommand.test.js +2 -0
- package/lib/cjs/internal/app-binder/command/ProvideTrustedNamePKICommand.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/device-action/GenerateTransactionDeviceAction.js +2 -0
- package/lib/cjs/internal/app-binder/device-action/GenerateTransactionDeviceAction.js.map +7 -0
- 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/device-action/__test-utils__/makeInternalApi.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/__test-utils__/makeInternalApi.js.map +3 -3
- package/lib/cjs/internal/app-binder/di/appBinderModule.js +1 -1
- package/lib/cjs/internal/app-binder/di/appBinderModule.js.map +3 -3
- package/lib/cjs/internal/app-binder/di/appBinderModule.test.js +1 -1
- package/lib/cjs/internal/app-binder/di/appBinderModule.test.js.map +2 -2
- package/lib/cjs/internal/app-binder/services/ApplicationChecker.js +2 -0
- package/lib/cjs/internal/app-binder/services/ApplicationChecker.js.map +7 -0
- package/lib/cjs/internal/app-binder/services/ApplicationChecker.test.js +2 -0
- package/lib/cjs/internal/app-binder/services/ApplicationChecker.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/services/GenerateSolanaTransaction.js +2 -0
- package/lib/cjs/internal/app-binder/services/GenerateSolanaTransaction.js.map +7 -0
- package/lib/cjs/internal/app-binder/services/GenerateSolanaTransaction.test.js +2 -0
- package/lib/cjs/internal/app-binder/services/GenerateSolanaTransaction.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/services/TransactionInspector.js +2 -0
- package/lib/cjs/internal/app-binder/services/TransactionInspector.js.map +7 -0
- 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/utils/transactionDecoders.js +2 -0
- package/lib/cjs/internal/app-binder/services/utils/transactionDecoders.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.js +2 -0
- package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.test.js +2 -0
- package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.js +2 -0
- package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.test.js +2 -0
- package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.test.js.map +7 -0
- 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 +1 -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/address/GetAddressUseCase.js +1 -1
- package/lib/cjs/internal/use-cases/address/GetAddressUseCase.js.map +2 -2
- package/lib/cjs/internal/use-cases/address/GetAddressUseCase.test.js +1 -1
- package/lib/cjs/internal/use-cases/address/GetAddressUseCase.test.js.map +2 -2
- package/lib/cjs/internal/use-cases/di/useCasesModule.js +1 -1
- package/lib/cjs/internal/use-cases/di/useCasesModule.js.map +3 -3
- package/lib/cjs/internal/use-cases/di/useCasesModule.test.js +1 -1
- package/lib/cjs/internal/use-cases/di/useCasesModule.test.js.map +2 -2
- package/lib/cjs/internal/use-cases/di/useCasesTypes.js +1 -1
- package/lib/cjs/internal/use-cases/di/useCasesTypes.js.map +2 -2
- package/lib/cjs/internal/use-cases/generateTransaction/GenerateTransactionUseCase.js +2 -0
- package/lib/cjs/internal/use-cases/generateTransaction/GenerateTransactionUseCase.js.map +7 -0
- package/lib/cjs/internal/use-cases/generateTransaction/GenerateTransactionUseCase.test.js +2 -0
- package/lib/cjs/internal/use-cases/generateTransaction/GenerateTransactionUseCase.test.js.map +7 -0
- package/lib/cjs/internal/use-cases/message/SignMessageUseCase.js +1 -1
- package/lib/cjs/internal/use-cases/message/SignMessageUseCase.js.map +3 -3
- package/lib/cjs/internal/use-cases/message/SignMessageUseCase.test.js +1 -1
- package/lib/cjs/internal/use-cases/message/SignMessageUseCase.test.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 +3 -3
- package/lib/cjs/package.json +17 -12
- package/lib/esm/api/SignerSolanaBuilder.js +1 -1
- package/lib/esm/api/SignerSolanaBuilder.js.map +3 -3
- package/lib/esm/api/SolanaTools.js +1 -0
- package/lib/esm/api/SolanaTools.js.map +7 -0
- package/lib/esm/api/SolanaToolsBuilder.js +2 -0
- package/lib/esm/api/SolanaToolsBuilder.js.map +7 -0
- package/lib/esm/api/app-binder/GenerateTransactionDeviceActionTypes.js +1 -0
- package/lib/esm/api/app-binder/GenerateTransactionDeviceActionTypes.js.map +7 -0
- package/lib/esm/api/index.js +1 -1
- package/lib/esm/api/index.js.map +3 -3
- package/lib/esm/api/model/MessageOptions.js +1 -0
- package/lib/esm/api/model/MessageOptions.js.map +7 -0
- package/lib/esm/api/model/TransactionResolutionContext.js +1 -0
- package/lib/esm/api/model/TransactionResolutionContext.js.map +7 -0
- package/lib/esm/internal/DefaultSignerSolana.js +1 -1
- package/lib/esm/internal/DefaultSignerSolana.js.map +3 -3
- package/lib/esm/internal/DefaultSignerSolana.test.js +1 -1
- package/lib/esm/internal/DefaultSignerSolana.test.js.map +3 -3
- package/lib/esm/internal/DefaultSolanaTools.js +2 -0
- package/lib/esm/internal/DefaultSolanaTools.js.map +7 -0
- package/lib/esm/internal/DefaultSolanaTools.test.js +2 -0
- package/lib/esm/internal/DefaultSolanaTools.test.js.map +7 -0
- 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/GetChallengeCommand.js +2 -0
- package/lib/esm/internal/app-binder/command/GetChallengeCommand.js.map +7 -0
- package/lib/esm/internal/app-binder/command/GetChallengeCommand.test.js +2 -0
- package/lib/esm/internal/app-binder/command/GetChallengeCommand.test.js.map +7 -0
- package/lib/esm/internal/app-binder/command/GetPubKeyCommand.js.map +2 -2
- package/lib/esm/internal/app-binder/command/ProvideTLVDescriptorCommand.js +2 -0
- package/lib/esm/internal/app-binder/command/ProvideTLVDescriptorCommand.js.map +7 -0
- package/lib/esm/internal/app-binder/command/ProvideTLVDescriptorCommand.test.js +2 -0
- package/lib/esm/internal/app-binder/command/ProvideTLVDescriptorCommand.test.js.map +7 -0
- package/lib/esm/internal/app-binder/command/ProvideTrustedNamePKICommand.js +2 -0
- package/lib/esm/internal/app-binder/command/ProvideTrustedNamePKICommand.js.map +7 -0
- package/lib/esm/internal/app-binder/command/ProvideTrustedNamePKICommand.test.js +2 -0
- package/lib/esm/internal/app-binder/command/ProvideTrustedNamePKICommand.test.js.map +7 -0
- package/lib/esm/internal/app-binder/device-action/GenerateTransactionDeviceAction.js +2 -0
- package/lib/esm/internal/app-binder/device-action/GenerateTransactionDeviceAction.js.map +7 -0
- 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/device-action/__test-utils__/makeInternalApi.js +1 -1
- package/lib/esm/internal/app-binder/device-action/__test-utils__/makeInternalApi.js.map +3 -3
- package/lib/esm/internal/app-binder/di/appBinderModule.js +1 -1
- package/lib/esm/internal/app-binder/di/appBinderModule.js.map +3 -3
- package/lib/esm/internal/app-binder/di/appBinderModule.test.js +1 -1
- package/lib/esm/internal/app-binder/di/appBinderModule.test.js.map +2 -2
- package/lib/esm/internal/app-binder/services/ApplicationChecker.js +2 -0
- package/lib/esm/internal/app-binder/services/ApplicationChecker.js.map +7 -0
- package/lib/esm/internal/app-binder/services/ApplicationChecker.test.js +2 -0
- package/lib/esm/internal/app-binder/services/ApplicationChecker.test.js.map +7 -0
- package/lib/esm/internal/app-binder/services/GenerateSolanaTransaction.js +2 -0
- package/lib/esm/internal/app-binder/services/GenerateSolanaTransaction.js.map +7 -0
- package/lib/esm/internal/app-binder/services/GenerateSolanaTransaction.test.js +2 -0
- package/lib/esm/internal/app-binder/services/GenerateSolanaTransaction.test.js.map +7 -0
- package/lib/esm/internal/app-binder/services/TransactionInspector.js +2 -0
- package/lib/esm/internal/app-binder/services/TransactionInspector.js.map +7 -0
- 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/utils/transactionDecoders.js +2 -0
- package/lib/esm/internal/app-binder/services/utils/transactionDecoders.js.map +7 -0
- package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.js +2 -0
- package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.js.map +7 -0
- package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.test.js +2 -0
- package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.test.js.map +7 -0
- package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.js +2 -0
- package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.js.map +7 -0
- package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.test.js +2 -0
- package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.test.js.map +7 -0
- 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 +1 -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/address/GetAddressUseCase.js +1 -1
- package/lib/esm/internal/use-cases/address/GetAddressUseCase.js.map +2 -2
- package/lib/esm/internal/use-cases/address/GetAddressUseCase.test.js +1 -1
- package/lib/esm/internal/use-cases/address/GetAddressUseCase.test.js.map +2 -2
- package/lib/esm/internal/use-cases/di/useCasesModule.js +1 -1
- package/lib/esm/internal/use-cases/di/useCasesModule.js.map +3 -3
- package/lib/esm/internal/use-cases/di/useCasesModule.test.js +1 -1
- package/lib/esm/internal/use-cases/di/useCasesModule.test.js.map +2 -2
- package/lib/esm/internal/use-cases/di/useCasesTypes.js +1 -1
- package/lib/esm/internal/use-cases/di/useCasesTypes.js.map +2 -2
- package/lib/esm/internal/use-cases/generateTransaction/GenerateTransactionUseCase.js +2 -0
- package/lib/esm/internal/use-cases/generateTransaction/GenerateTransactionUseCase.js.map +7 -0
- package/lib/esm/internal/use-cases/generateTransaction/GenerateTransactionUseCase.test.js +2 -0
- package/lib/esm/internal/use-cases/generateTransaction/GenerateTransactionUseCase.test.js.map +7 -0
- package/lib/esm/internal/use-cases/message/SignMessageUseCase.js +1 -1
- package/lib/esm/internal/use-cases/message/SignMessageUseCase.js.map +3 -3
- package/lib/esm/internal/use-cases/message/SignMessageUseCase.test.js +1 -1
- package/lib/esm/internal/use-cases/message/SignMessageUseCase.test.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 +3 -3
- package/lib/esm/package.json +17 -12
- package/lib/types/api/SignerSolana.d.ts +4 -3
- package/lib/types/api/SignerSolana.d.ts.map +1 -1
- package/lib/types/api/SignerSolanaBuilder.d.ts +12 -1
- package/lib/types/api/SignerSolanaBuilder.d.ts.map +1 -1
- package/lib/types/api/SolanaTools.d.ts +10 -0
- package/lib/types/api/SolanaTools.d.ts.map +1 -0
- package/lib/types/api/SolanaToolsBuilder.d.ts +39 -0
- package/lib/types/api/SolanaToolsBuilder.d.ts.map +1 -0
- package/lib/types/api/app-binder/GenerateTransactionDeviceActionTypes.d.ts +24 -0
- package/lib/types/api/app-binder/GenerateTransactionDeviceActionTypes.d.ts.map +1 -0
- package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts +11 -3
- package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts.map +1 -1
- package/lib/types/api/index.d.ts +3 -1
- package/lib/types/api/index.d.ts.map +1 -1
- package/lib/types/api/model/AddressOption.d.ts +1 -0
- package/lib/types/api/model/AddressOption.d.ts.map +1 -1
- package/lib/types/api/model/MessageOptions.d.ts +4 -0
- package/lib/types/api/model/MessageOptions.d.ts.map +1 -0
- package/lib/types/api/model/TransactionOptions.d.ts +6 -1
- package/lib/types/api/model/TransactionOptions.d.ts.map +1 -1
- package/lib/types/api/model/TransactionResolutionContext.d.ts +8 -0
- package/lib/types/api/model/TransactionResolutionContext.d.ts.map +1 -0
- package/lib/types/internal/DefaultSignerSolana.d.ts +7 -4
- package/lib/types/internal/DefaultSignerSolana.d.ts.map +1 -1
- package/lib/types/internal/DefaultSolanaTools.d.ts +20 -0
- package/lib/types/internal/DefaultSolanaTools.d.ts.map +1 -0
- package/lib/types/internal/DefaultSolanaTools.test.d.ts +2 -0
- package/lib/types/internal/DefaultSolanaTools.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/SolanaAppBinder.d.ts +12 -3
- package/lib/types/internal/app-binder/SolanaAppBinder.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/GetChallengeCommand.d.ts +11 -0
- package/lib/types/internal/app-binder/command/GetChallengeCommand.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/GetChallengeCommand.test.d.ts +2 -0
- package/lib/types/internal/app-binder/command/GetChallengeCommand.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/GetPubKeyCommand.d.ts +2 -3
- package/lib/types/internal/app-binder/command/GetPubKeyCommand.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/ProvideTLVDescriptorCommand.d.ts +13 -0
- package/lib/types/internal/app-binder/command/ProvideTLVDescriptorCommand.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/ProvideTLVDescriptorCommand.test.d.ts +2 -0
- package/lib/types/internal/app-binder/command/ProvideTLVDescriptorCommand.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/ProvideTrustedNamePKICommand.d.ts +13 -0
- package/lib/types/internal/app-binder/command/ProvideTrustedNamePKICommand.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/ProvideTrustedNamePKICommand.test.d.ts +2 -0
- package/lib/types/internal/app-binder/command/ProvideTrustedNamePKICommand.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/utils/SolanaApplicationErrors.d.ts.map +1 -1
- package/lib/types/internal/app-binder/device-action/GenerateTransactionDeviceAction.d.ts +23 -0
- package/lib/types/internal/app-binder/device-action/GenerateTransactionDeviceAction.d.ts.map +1 -0
- package/lib/types/internal/app-binder/device-action/SignTransactionDeviceAction.d.ts +18 -1
- package/lib/types/internal/app-binder/device-action/SignTransactionDeviceAction.d.ts.map +1 -1
- package/lib/types/internal/app-binder/device-action/__test-utils__/makeInternalApi.d.ts.map +1 -1
- package/lib/types/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.d.ts.map +1 -1
- package/lib/types/internal/app-binder/di/appBinderModule.d.ts.map +1 -1
- package/lib/types/internal/app-binder/services/ApplicationChecker.d.ts +13 -0
- package/lib/types/internal/app-binder/services/ApplicationChecker.d.ts.map +1 -0
- package/lib/types/internal/app-binder/services/ApplicationChecker.test.d.ts +2 -0
- package/lib/types/internal/app-binder/services/ApplicationChecker.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/services/GenerateSolanaTransaction.d.ts +14 -0
- package/lib/types/internal/app-binder/services/GenerateSolanaTransaction.d.ts.map +1 -0
- package/lib/types/internal/app-binder/services/GenerateSolanaTransaction.test.d.ts +2 -0
- package/lib/types/internal/app-binder/services/GenerateSolanaTransaction.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/services/TransactionInspector.d.ts +46 -0
- package/lib/types/internal/app-binder/services/TransactionInspector.d.ts.map +1 -0
- 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/utils/transactionDecoders.d.ts +23 -0
- package/lib/types/internal/app-binder/services/utils/transactionDecoders.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/BuildTransactionContextTask.d.ts +24 -0
- package/lib/types/internal/app-binder/task/BuildTransactionContextTask.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/BuildTransactionContextTask.test.d.ts +2 -0
- package/lib/types/internal/app-binder/task/BuildTransactionContextTask.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/ProvideTransactionContextTask.d.ts +15 -0
- package/lib/types/internal/app-binder/task/ProvideTransactionContextTask.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/ProvideTransactionContextTask.test.d.ts +2 -0
- package/lib/types/internal/app-binder/task/ProvideTransactionContextTask.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/SendSignMessageTask.d.ts +7 -0
- package/lib/types/internal/app-binder/task/SendSignMessageTask.d.ts.map +1 -1
- package/lib/types/internal/di.d.ts +3 -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/address/GetAddressUseCase.d.ts.map +1 -1
- package/lib/types/internal/use-cases/di/useCasesModule.d.ts.map +1 -1
- package/lib/types/internal/use-cases/di/useCasesTypes.d.ts +1 -0
- package/lib/types/internal/use-cases/di/useCasesTypes.d.ts.map +1 -1
- package/lib/types/internal/use-cases/generateTransaction/GenerateTransactionUseCase.d.ts +10 -0
- package/lib/types/internal/use-cases/generateTransaction/GenerateTransactionUseCase.d.ts.map +1 -0
- package/lib/types/internal/use-cases/generateTransaction/GenerateTransactionUseCase.test.d.ts +2 -0
- package/lib/types/internal/use-cases/generateTransaction/GenerateTransactionUseCase.test.d.ts.map +1 -0
- package/lib/types/internal/use-cases/message/SignMessageUseCase.d.ts +2 -1
- package/lib/types/internal/use-cases/message/SignMessageUseCase.d.ts.map +1 -1
- package/lib/types/internal/use-cases/transaction/SignTransactionUseCase.d.ts +2 -2
- package/lib/types/internal/use-cases/transaction/SignTransactionUseCase.d.ts.map +1 -1
- package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
- package/package.json +19 -14
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/internal/app-binder/services/TransactionInspector.test.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n ASSOCIATED_TOKEN_PROGRAM_ID,\n createAssociatedTokenAccountInstruction,\n createCloseAccountInstruction,\n createInitializeAccount2Instruction,\n createInitializeAccount3Instruction,\n createInitializeAccountInstruction,\n createSyncNativeInstruction,\n createTransferCheckedInstruction,\n createTransferInstruction,\n getAssociatedTokenAddressSync,\n TOKEN_2022_PROGRAM_ID,\n TOKEN_PROGRAM_ID,\n} from \"@solana/spl-token\";\nimport {\n Keypair,\n SystemProgram,\n Transaction,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport bs58 from \"bs58\";\nimport { describe, expect, it } from \"vitest\";\n\nimport {\n SolanaTransactionTypes,\n TransactionInspector,\n} from \"./TransactionInspector\";\n\nconst DUMMY_BLOCKHASH = bs58.encode(new Uint8Array(32).fill(0xaa));\n\nfunction makeSignedRawTx(\n ixs: TransactionInstruction[],\n signers: Keypair[],\n feePayer?: Keypair,\n) {\n const payer = feePayer ?? signers[0] ?? Keypair.generate();\n const tx = new Transaction();\n tx.recentBlockhash = DUMMY_BLOCKHASH;\n tx.feePayer = payer.publicKey;\n tx.add(...ixs);\n const seen = new Set<string>();\n const uniqueSigners = [payer, ...signers].filter((kp) => {\n const k = kp.publicKey.toBase58();\n if (seen.has(k)) return false;\n seen.add(k);\n return true;\n });\n\n tx.sign(...uniqueSigners);\n return { raw: tx.serialize(), payer };\n}\n\ndescribe(\"TransactionInspector\", () => {\n it(\"falls back to STANDARD for a plain SystemProgram transfer\", async () => {\n // given\n const payer = Keypair.generate();\n const dest = Keypair.generate().publicKey;\n\n const ix = SystemProgram.transfer({\n fromPubkey: payer.publicKey,\n toPubkey: dest,\n lamports: 1_000,\n });\n\n const { raw } = makeSignedRawTx([ix], [payer], payer);\n\n // when\n const result = await new TransactionInspector(raw).inspectTransactionType();\n\n // then\n expect(result.transactionType).toBe(SolanaTransactionTypes.STANDARD);\n expect(result.data).toEqual({});\n });\n\n it(\"detects an SPL Transfer and returns the destination address\", async () => {\n // given\n const owner = Keypair.generate();\n const source = Keypair.generate().publicKey;\n const destination = Keypair.generate().publicKey;\n\n const ix = createTransferInstruction(\n source,\n destination,\n owner.publicKey,\n 42n,\n [],\n TOKEN_PROGRAM_ID,\n );\n\n const { raw } = makeSignedRawTx([ix], [owner], owner);\n\n // when\n const result = await new TransactionInspector(raw).inspectTransactionType();\n\n // then\n expect(result.transactionType).toBe(SolanaTransactionTypes.SPL);\n expect(result.data.tokenAddress).toBe(destination.toBase58());\n });\n\n it(\"detects an SPL TransferChecked and returns the destination address\", async () => {\n // given\n const owner = Keypair.generate();\n const mint = Keypair.generate().publicKey;\n const source = Keypair.generate().publicKey;\n const destination = Keypair.generate().publicKey;\n\n const ix = createTransferCheckedInstruction(\n source,\n mint,\n destination,\n owner.publicKey,\n 123n,\n 0,\n [],\n TOKEN_PROGRAM_ID,\n );\n\n const { raw } = makeSignedRawTx([ix], [owner], owner);\n\n // when\n const result = await new TransactionInspector(raw).inspectTransactionType();\n\n // then\n expect(result.transactionType).toBe(SolanaTransactionTypes.SPL);\n expect(result.data.tokenAddress).toBe(destination.toBase58());\n });\n\n it(\"detects InitializeAccount and returns the new account and mint\", async () => {\n // given\n const payer = Keypair.generate();\n const mint = Keypair.generate().publicKey;\n const newAccount = Keypair.generate().publicKey;\n const owner = Keypair.generate().publicKey;\n\n const ix = createInitializeAccountInstruction(\n newAccount,\n mint,\n owner,\n TOKEN_PROGRAM_ID,\n );\n\n const { raw } = makeSignedRawTx([ix], [payer], payer);\n\n // when\n const result = await new TransactionInspector(raw).inspectTransactionType();\n\n // then\n expect(result.transactionType).toBe(SolanaTransactionTypes.SPL);\n expect(result.data.createATA).toEqual({\n address: newAccount.toBase58(),\n mintAddress: mint.toBase58(),\n });\n });\n\n it(\"detects InitializeAccount2 and returns the new account and mint\", async () => {\n // given\n const payer = Keypair.generate();\n const mint = Keypair.generate().publicKey;\n const newAccount = Keypair.generate().publicKey;\n const owner = Keypair.generate().publicKey;\n\n const ix = createInitializeAccount2Instruction(\n newAccount,\n mint,\n owner,\n TOKEN_PROGRAM_ID,\n );\n\n const { raw } = makeSignedRawTx([ix], [payer], payer);\n\n // when\n const result = await new TransactionInspector(raw).inspectTransactionType();\n\n // then\n expect(result.transactionType).toBe(SolanaTransactionTypes.SPL);\n expect(result.data.createATA).toEqual({\n address: newAccount.toBase58(),\n mintAddress: mint.toBase58(),\n });\n });\n\n it(\"detects InitializeAccount3 and returns the new account and mint\", async () => {\n // given\n const payer = Keypair.generate();\n const mint = Keypair.generate().publicKey;\n const newAccount = Keypair.generate().publicKey;\n\n const ix = createInitializeAccount3Instruction(\n newAccount,\n mint,\n TOKEN_PROGRAM_ID,\n );\n\n const { raw } = makeSignedRawTx([ix], [payer], payer);\n\n // when\n const result = await new TransactionInspector(raw).inspectTransactionType();\n\n // then\n expect(result.transactionType).toBe(SolanaTransactionTypes.SPL);\n expect(result.data.createATA).toEqual({\n address: newAccount.toBase58(),\n mintAddress: mint.toBase58(),\n });\n });\n\n it(\"detects ATA creation via Associated Token Program (classic TOKEN program)\", async () => {\n // given\n const payer = Keypair.generate();\n const owner = Keypair.generate().publicKey;\n const mint = Keypair.generate().publicKey;\n const ata = getAssociatedTokenAddressSync(\n mint,\n owner,\n true,\n TOKEN_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n );\n\n const ix = createAssociatedTokenAccountInstruction(\n payer.publicKey,\n ata,\n owner,\n mint,\n TOKEN_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n );\n\n const { raw } = makeSignedRawTx([ix], [payer], payer);\n\n // when\n const result = await new TransactionInspector(raw).inspectTransactionType();\n\n // then\n expect(result.transactionType).toBe(SolanaTransactionTypes.SPL);\n expect(result.data.createATA).toEqual({\n address: owner.toBase58(),\n mintAddress: mint.toBase58(),\n });\n });\n\n it(\"detects ATA creation via Associated Token Program (TOKEN-2022 program)\", async () => {\n // given\n const payer = Keypair.generate();\n const owner = Keypair.generate().publicKey;\n const mint = Keypair.generate().publicKey;\n const ata22 = getAssociatedTokenAddressSync(\n mint,\n owner,\n true,\n TOKEN_2022_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n );\n\n const ix = createAssociatedTokenAccountInstruction(\n payer.publicKey,\n ata22,\n owner,\n mint,\n TOKEN_2022_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n );\n\n const { raw } = makeSignedRawTx([ix], [payer], payer);\n\n // when\n const result = await new TransactionInspector(raw).inspectTransactionType();\n\n // then\n expect(result.transactionType).toBe(SolanaTransactionTypes.SPL);\n expect(result.data.createATA).toEqual({\n address: owner.toBase58(),\n mintAddress: mint.toBase58(),\n });\n });\n\n it(\"detects CloseAccount and returns the closed token account\", async () => {\n // given\n const owner = Keypair.generate();\n const account = Keypair.generate().publicKey;\n const dest = Keypair.generate().publicKey;\n\n const ix = createCloseAccountInstruction(account, dest, owner.publicKey);\n\n const { raw } = makeSignedRawTx([ix], [owner], owner);\n\n // when\n const result = await new TransactionInspector(raw).inspectTransactionType();\n\n // then\n expect(result.transactionType).toBe(SolanaTransactionTypes.SPL);\n expect(result.data.tokenAddress).toBe(account.toBase58());\n });\n\n it(\"detects SyncNative and returns the WSOL account\", async () => {\n // given\n const payer = Keypair.generate();\n const account = Keypair.generate().publicKey;\n\n const ix = createSyncNativeInstruction(account, TOKEN_PROGRAM_ID);\n\n const { raw } = makeSignedRawTx([ix], [payer], payer);\n\n // when\n const result = await new TransactionInspector(raw).inspectTransactionType();\n\n // then\n expect(result.transactionType).toBe(SolanaTransactionTypes.SPL);\n expect(result.data.tokenAddress).toBe(account.toBase58());\n });\n\n it(\"marks transaction as SPL even if decoders can't parse (last-resort SPL by program id)\", async () => {\n // given\n const payer = Keypair.generate();\n const bogusIx = new TransactionInstruction({\n programId: TOKEN_PROGRAM_ID,\n keys: [],\n data: Buffer.from([]),\n });\n\n const { raw } = makeSignedRawTx([bogusIx], [payer], payer);\n\n // when\n const result = await new TransactionInspector(raw).inspectTransactionType();\n\n // then\n expect(result.transactionType).toBe(SolanaTransactionTypes.SPL);\n expect(result.data).toEqual({});\n });\n\n it(\"falls back to STANDARD if the payload is unparseable\", async () => {\n // given\n const garbage = new Uint8Array([0xab, 0xad, 0xbe, 0xef]);\n\n // when\n const result = await new TransactionInspector(\n garbage,\n ).inspectTransactionType();\n\n // then\n expect(result.transactionType).toBe(SolanaTransactionTypes.STANDARD);\n expect(result.data).toEqual({});\n });\n\n it(\"fast path: tokenAddress override + SPL instruction, SPL and returns override\", async () => {\n // given\n const owner = Keypair.generate();\n const source = Keypair.generate().publicKey;\n const destination = Keypair.generate().publicKey;\n\n const ix = createTransferInstruction(\n source,\n destination,\n owner.publicKey,\n 1n,\n [],\n TOKEN_PROGRAM_ID,\n );\n const { raw } = makeSignedRawTx([ix], [owner], owner);\n\n const overrideToken = Keypair.generate().publicKey.toBase58();\n\n // when\n const result = await new TransactionInspector(\n raw,\n overrideToken,\n ).inspectTransactionType();\n\n // then\n expect(result.transactionType).toBe(SolanaTransactionTypes.SPL);\n expect(result.data.tokenAddress).toBe(overrideToken);\n });\n\n it(\"fast path: createATA override + ATA instruction, SPL and returns override\", async () => {\n // given\n const payer = Keypair.generate();\n const owner = Keypair.generate().publicKey;\n const mint = Keypair.generate().publicKey;\n const ata = getAssociatedTokenAddressSync(\n mint,\n owner,\n true,\n TOKEN_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n );\n\n const ix = createAssociatedTokenAccountInstruction(\n payer.publicKey,\n ata,\n owner,\n mint,\n TOKEN_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n );\n const { raw } = makeSignedRawTx([ix], [payer], payer);\n\n const overrideATA = {\n address: Keypair.generate().publicKey.toBase58(),\n mintAddress: Keypair.generate().publicKey.toBase58(),\n };\n\n // when\n const result = await new TransactionInspector(\n raw,\n undefined,\n overrideATA,\n ).inspectTransactionType();\n\n // then\n expect(result.transactionType).toBe(SolanaTransactionTypes.SPL);\n expect(result.data.createATA).toEqual(overrideATA);\n });\n\n it(\"fast path: both overrides + SPL instruction, SPL and returns both\", async () => {\n // given\n const owner = Keypair.generate();\n const source = Keypair.generate().publicKey;\n const destination = Keypair.generate().publicKey;\n\n const ix = createTransferInstruction(\n source,\n destination,\n owner.publicKey,\n 7n,\n [],\n TOKEN_PROGRAM_ID,\n );\n const { raw } = makeSignedRawTx([ix], [owner], owner);\n\n const tokenOverride = Keypair.generate().publicKey.toBase58();\n const ataOverride = {\n address: Keypair.generate().publicKey.toBase58(),\n mintAddress: Keypair.generate().publicKey.toBase58(),\n };\n\n // when\n const result = await new TransactionInspector(\n raw,\n tokenOverride,\n ataOverride,\n ).inspectTransactionType();\n\n // then\n expect(result.transactionType).toBe(SolanaTransactionTypes.SPL);\n expect(result.data.tokenAddress).toBe(tokenOverride);\n expect(result.data.createATA).toEqual(ataOverride);\n });\n});\n"],
|
|
5
|
+
"mappings": "AAAA,OACE,+BAAAA,EACA,2CAAAC,EACA,iCAAAC,EACA,uCAAAC,EACA,uCAAAC,EACA,sCAAAC,EACA,+BAAAC,EACA,oCAAAC,EACA,6BAAAC,EACA,iCAAAC,EACA,yBAAAC,EACA,oBAAAC,MACK,oBACP,OACE,WAAAC,EACA,iBAAAC,EACA,eAAAC,EACA,0BAAAC,MACK,kBACP,OAAOC,MAAU,OACjB,OAAS,YAAAC,EAAU,UAAAC,EAAQ,MAAAC,MAAU,SAErC,OACE,0BAAAC,EACA,wBAAAC,MACK,yBAEP,MAAMC,EAAkBN,EAAK,OAAO,IAAI,WAAW,EAAE,EAAE,KAAK,GAAI,CAAC,EAEjE,SAASO,EACPC,EACAC,EACAC,EACA,CACA,MAAMC,EAAQD,GAAYD,EAAQ,CAAC,GAAKb,EAAQ,SAAS,EACnDgB,EAAK,IAAId,EACfc,EAAG,gBAAkBN,EACrBM,EAAG,SAAWD,EAAM,UACpBC,EAAG,IAAI,GAAGJ,CAAG,EACb,MAAMK,EAAO,IAAI,IACXC,EAAgB,CAACH,EAAO,GAAGF,CAAO,EAAE,OAAQM,GAAO,CACvD,MAAMC,EAAID,EAAG,UAAU,SAAS,EAChC,OAAIF,EAAK,IAAIG,CAAC,EAAU,IACxBH,EAAK,IAAIG,CAAC,EACH,GACT,CAAC,EAED,OAAAJ,EAAG,KAAK,GAAGE,CAAa,EACjB,CAAE,IAAKF,EAAG,UAAU,EAAG,MAAAD,CAAM,CACtC,CAEAV,EAAS,uBAAwB,IAAM,CACrCE,EAAG,4DAA6D,SAAY,CAE1E,MAAMQ,EAAQf,EAAQ,SAAS,EACzBqB,EAAOrB,EAAQ,SAAS,EAAE,UAE1BsB,EAAKrB,EAAc,SAAS,CAChC,WAAYc,EAAM,UAClB,SAAUM,EACV,SAAU,GACZ,CAAC,EAEK,CAAE,IAAAE,CAAI,EAAIZ,EAAgB,CAACW,CAAE,EAAG,CAACP,CAAK,EAAGA,CAAK,EAG9CS,EAAS,MAAM,IAAIf,EAAqBc,CAAG,EAAE,uBAAuB,EAG1EjB,EAAOkB,EAAO,eAAe,EAAE,KAAKhB,EAAuB,QAAQ,EACnEF,EAAOkB,EAAO,IAAI,EAAE,QAAQ,CAAC,CAAC,CAChC,CAAC,EAEDjB,EAAG,8DAA+D,SAAY,CAE5E,MAAMkB,EAAQzB,EAAQ,SAAS,EACzB0B,EAAS1B,EAAQ,SAAS,EAAE,UAC5B2B,EAAc3B,EAAQ,SAAS,EAAE,UAEjCsB,EAAK1B,EACT8B,EACAC,EACAF,EAAM,UACN,IACA,CAAC,EACD1B,CACF,EAEM,CAAE,IAAAwB,CAAI,EAAIZ,EAAgB,CAACW,CAAE,EAAG,CAACG,CAAK,EAAGA,CAAK,EAG9CD,EAAS,MAAM,IAAIf,EAAqBc,CAAG,EAAE,uBAAuB,EAG1EjB,EAAOkB,EAAO,eAAe,EAAE,KAAKhB,EAAuB,GAAG,EAC9DF,EAAOkB,EAAO,KAAK,YAAY,EAAE,KAAKG,EAAY,SAAS,CAAC,CAC9D,CAAC,EAEDpB,EAAG,qEAAsE,SAAY,CAEnF,MAAMkB,EAAQzB,EAAQ,SAAS,EACzB4B,EAAO5B,EAAQ,SAAS,EAAE,UAC1B0B,EAAS1B,EAAQ,SAAS,EAAE,UAC5B2B,EAAc3B,EAAQ,SAAS,EAAE,UAEjCsB,EAAK3B,EACT+B,EACAE,EACAD,EACAF,EAAM,UACN,KACA,EACA,CAAC,EACD1B,CACF,EAEM,CAAE,IAAAwB,CAAI,EAAIZ,EAAgB,CAACW,CAAE,EAAG,CAACG,CAAK,EAAGA,CAAK,EAG9CD,EAAS,MAAM,IAAIf,EAAqBc,CAAG,EAAE,uBAAuB,EAG1EjB,EAAOkB,EAAO,eAAe,EAAE,KAAKhB,EAAuB,GAAG,EAC9DF,EAAOkB,EAAO,KAAK,YAAY,EAAE,KAAKG,EAAY,SAAS,CAAC,CAC9D,CAAC,EAEDpB,EAAG,iEAAkE,SAAY,CAE/E,MAAMQ,EAAQf,EAAQ,SAAS,EACzB4B,EAAO5B,EAAQ,SAAS,EAAE,UAC1B6B,EAAa7B,EAAQ,SAAS,EAAE,UAChCyB,EAAQzB,EAAQ,SAAS,EAAE,UAE3BsB,EAAK7B,EACToC,EACAD,EACAH,EACA1B,CACF,EAEM,CAAE,IAAAwB,CAAI,EAAIZ,EAAgB,CAACW,CAAE,EAAG,CAACP,CAAK,EAAGA,CAAK,EAG9CS,EAAS,MAAM,IAAIf,EAAqBc,CAAG,EAAE,uBAAuB,EAG1EjB,EAAOkB,EAAO,eAAe,EAAE,KAAKhB,EAAuB,GAAG,EAC9DF,EAAOkB,EAAO,KAAK,SAAS,EAAE,QAAQ,CACpC,QAASK,EAAW,SAAS,EAC7B,YAAaD,EAAK,SAAS,CAC7B,CAAC,CACH,CAAC,EAEDrB,EAAG,kEAAmE,SAAY,CAEhF,MAAMQ,EAAQf,EAAQ,SAAS,EACzB4B,EAAO5B,EAAQ,SAAS,EAAE,UAC1B6B,EAAa7B,EAAQ,SAAS,EAAE,UAChCyB,EAAQzB,EAAQ,SAAS,EAAE,UAE3BsB,EAAK/B,EACTsC,EACAD,EACAH,EACA1B,CACF,EAEM,CAAE,IAAAwB,CAAI,EAAIZ,EAAgB,CAACW,CAAE,EAAG,CAACP,CAAK,EAAGA,CAAK,EAG9CS,EAAS,MAAM,IAAIf,EAAqBc,CAAG,EAAE,uBAAuB,EAG1EjB,EAAOkB,EAAO,eAAe,EAAE,KAAKhB,EAAuB,GAAG,EAC9DF,EAAOkB,EAAO,KAAK,SAAS,EAAE,QAAQ,CACpC,QAASK,EAAW,SAAS,EAC7B,YAAaD,EAAK,SAAS,CAC7B,CAAC,CACH,CAAC,EAEDrB,EAAG,kEAAmE,SAAY,CAEhF,MAAMQ,EAAQf,EAAQ,SAAS,EACzB4B,EAAO5B,EAAQ,SAAS,EAAE,UAC1B6B,EAAa7B,EAAQ,SAAS,EAAE,UAEhCsB,EAAK9B,EACTqC,EACAD,EACA7B,CACF,EAEM,CAAE,IAAAwB,CAAI,EAAIZ,EAAgB,CAACW,CAAE,EAAG,CAACP,CAAK,EAAGA,CAAK,EAG9CS,EAAS,MAAM,IAAIf,EAAqBc,CAAG,EAAE,uBAAuB,EAG1EjB,EAAOkB,EAAO,eAAe,EAAE,KAAKhB,EAAuB,GAAG,EAC9DF,EAAOkB,EAAO,KAAK,SAAS,EAAE,QAAQ,CACpC,QAASK,EAAW,SAAS,EAC7B,YAAaD,EAAK,SAAS,CAC7B,CAAC,CACH,CAAC,EAEDrB,EAAG,4EAA6E,SAAY,CAE1F,MAAMQ,EAAQf,EAAQ,SAAS,EACzByB,EAAQzB,EAAQ,SAAS,EAAE,UAC3B4B,EAAO5B,EAAQ,SAAS,EAAE,UAC1B8B,EAAMjC,EACV+B,EACAH,EACA,GACA1B,EACAX,CACF,EAEMkC,EAAKjC,EACT0B,EAAM,UACNe,EACAL,EACAG,EACA7B,EACAX,CACF,EAEM,CAAE,IAAAmC,CAAI,EAAIZ,EAAgB,CAACW,CAAE,EAAG,CAACP,CAAK,EAAGA,CAAK,EAG9CS,EAAS,MAAM,IAAIf,EAAqBc,CAAG,EAAE,uBAAuB,EAG1EjB,EAAOkB,EAAO,eAAe,EAAE,KAAKhB,EAAuB,GAAG,EAC9DF,EAAOkB,EAAO,KAAK,SAAS,EAAE,QAAQ,CACpC,QAASC,EAAM,SAAS,EACxB,YAAaG,EAAK,SAAS,CAC7B,CAAC,CACH,CAAC,EAEDrB,EAAG,yEAA0E,SAAY,CAEvF,MAAMQ,EAAQf,EAAQ,SAAS,EACzByB,EAAQzB,EAAQ,SAAS,EAAE,UAC3B4B,EAAO5B,EAAQ,SAAS,EAAE,UAC1B+B,EAAQlC,EACZ+B,EACAH,EACA,GACA3B,EACAV,CACF,EAEMkC,EAAKjC,EACT0B,EAAM,UACNgB,EACAN,EACAG,EACA9B,EACAV,CACF,EAEM,CAAE,IAAAmC,CAAI,EAAIZ,EAAgB,CAACW,CAAE,EAAG,CAACP,CAAK,EAAGA,CAAK,EAG9CS,EAAS,MAAM,IAAIf,EAAqBc,CAAG,EAAE,uBAAuB,EAG1EjB,EAAOkB,EAAO,eAAe,EAAE,KAAKhB,EAAuB,GAAG,EAC9DF,EAAOkB,EAAO,KAAK,SAAS,EAAE,QAAQ,CACpC,QAASC,EAAM,SAAS,EACxB,YAAaG,EAAK,SAAS,CAC7B,CAAC,CACH,CAAC,EAEDrB,EAAG,4DAA6D,SAAY,CAE1E,MAAMkB,EAAQzB,EAAQ,SAAS,EACzBgC,EAAUhC,EAAQ,SAAS,EAAE,UAC7BqB,EAAOrB,EAAQ,SAAS,EAAE,UAE1BsB,EAAKhC,EAA8B0C,EAASX,EAAMI,EAAM,SAAS,EAEjE,CAAE,IAAAF,CAAI,EAAIZ,EAAgB,CAACW,CAAE,EAAG,CAACG,CAAK,EAAGA,CAAK,EAG9CD,EAAS,MAAM,IAAIf,EAAqBc,CAAG,EAAE,uBAAuB,EAG1EjB,EAAOkB,EAAO,eAAe,EAAE,KAAKhB,EAAuB,GAAG,EAC9DF,EAAOkB,EAAO,KAAK,YAAY,EAAE,KAAKQ,EAAQ,SAAS,CAAC,CAC1D,CAAC,EAEDzB,EAAG,kDAAmD,SAAY,CAEhE,MAAMQ,EAAQf,EAAQ,SAAS,EACzBgC,EAAUhC,EAAQ,SAAS,EAAE,UAE7BsB,EAAK5B,EAA4BsC,EAASjC,CAAgB,EAE1D,CAAE,IAAAwB,CAAI,EAAIZ,EAAgB,CAACW,CAAE,EAAG,CAACP,CAAK,EAAGA,CAAK,EAG9CS,EAAS,MAAM,IAAIf,EAAqBc,CAAG,EAAE,uBAAuB,EAG1EjB,EAAOkB,EAAO,eAAe,EAAE,KAAKhB,EAAuB,GAAG,EAC9DF,EAAOkB,EAAO,KAAK,YAAY,EAAE,KAAKQ,EAAQ,SAAS,CAAC,CAC1D,CAAC,EAEDzB,EAAG,wFAAyF,SAAY,CAEtG,MAAMQ,EAAQf,EAAQ,SAAS,EACzBiC,EAAU,IAAI9B,EAAuB,CACzC,UAAWJ,EACX,KAAM,CAAC,EACP,KAAM,OAAO,KAAK,CAAC,CAAC,CACtB,CAAC,EAEK,CAAE,IAAAwB,CAAI,EAAIZ,EAAgB,CAACsB,CAAO,EAAG,CAAClB,CAAK,EAAGA,CAAK,EAGnDS,EAAS,MAAM,IAAIf,EAAqBc,CAAG,EAAE,uBAAuB,EAG1EjB,EAAOkB,EAAO,eAAe,EAAE,KAAKhB,EAAuB,GAAG,EAC9DF,EAAOkB,EAAO,IAAI,EAAE,QAAQ,CAAC,CAAC,CAChC,CAAC,EAEDjB,EAAG,uDAAwD,SAAY,CAErE,MAAM2B,EAAU,IAAI,WAAW,CAAC,IAAM,IAAM,IAAM,GAAI,CAAC,EAGjDV,EAAS,MAAM,IAAIf,EACvByB,CACF,EAAE,uBAAuB,EAGzB5B,EAAOkB,EAAO,eAAe,EAAE,KAAKhB,EAAuB,QAAQ,EACnEF,EAAOkB,EAAO,IAAI,EAAE,QAAQ,CAAC,CAAC,CAChC,CAAC,EAEDjB,EAAG,+EAAgF,SAAY,CAE7F,MAAMkB,EAAQzB,EAAQ,SAAS,EACzB0B,EAAS1B,EAAQ,SAAS,EAAE,UAC5B2B,EAAc3B,EAAQ,SAAS,EAAE,UAEjCsB,EAAK1B,EACT8B,EACAC,EACAF,EAAM,UACN,GACA,CAAC,EACD1B,CACF,EACM,CAAE,IAAAwB,CAAI,EAAIZ,EAAgB,CAACW,CAAE,EAAG,CAACG,CAAK,EAAGA,CAAK,EAE9CU,EAAgBnC,EAAQ,SAAS,EAAE,UAAU,SAAS,EAGtDwB,EAAS,MAAM,IAAIf,EACvBc,EACAY,CACF,EAAE,uBAAuB,EAGzB7B,EAAOkB,EAAO,eAAe,EAAE,KAAKhB,EAAuB,GAAG,EAC9DF,EAAOkB,EAAO,KAAK,YAAY,EAAE,KAAKW,CAAa,CACrD,CAAC,EAED5B,EAAG,4EAA6E,SAAY,CAE1F,MAAMQ,EAAQf,EAAQ,SAAS,EACzByB,EAAQzB,EAAQ,SAAS,EAAE,UAC3B4B,EAAO5B,EAAQ,SAAS,EAAE,UAC1B8B,EAAMjC,EACV+B,EACAH,EACA,GACA1B,EACAX,CACF,EAEMkC,EAAKjC,EACT0B,EAAM,UACNe,EACAL,EACAG,EACA7B,EACAX,CACF,EACM,CAAE,IAAAmC,CAAI,EAAIZ,EAAgB,CAACW,CAAE,EAAG,CAACP,CAAK,EAAGA,CAAK,EAE9CqB,EAAc,CAClB,QAASpC,EAAQ,SAAS,EAAE,UAAU,SAAS,EAC/C,YAAaA,EAAQ,SAAS,EAAE,UAAU,SAAS,CACrD,EAGMwB,EAAS,MAAM,IAAIf,EACvBc,EACA,OACAa,CACF,EAAE,uBAAuB,EAGzB9B,EAAOkB,EAAO,eAAe,EAAE,KAAKhB,EAAuB,GAAG,EAC9DF,EAAOkB,EAAO,KAAK,SAAS,EAAE,QAAQY,CAAW,CACnD,CAAC,EAED7B,EAAG,oEAAqE,SAAY,CAElF,MAAMkB,EAAQzB,EAAQ,SAAS,EACzB0B,EAAS1B,EAAQ,SAAS,EAAE,UAC5B2B,EAAc3B,EAAQ,SAAS,EAAE,UAEjCsB,EAAK1B,EACT8B,EACAC,EACAF,EAAM,UACN,GACA,CAAC,EACD1B,CACF,EACM,CAAE,IAAAwB,CAAI,EAAIZ,EAAgB,CAACW,CAAE,EAAG,CAACG,CAAK,EAAGA,CAAK,EAE9CY,EAAgBrC,EAAQ,SAAS,EAAE,UAAU,SAAS,EACtDsC,EAAc,CAClB,QAAStC,EAAQ,SAAS,EAAE,UAAU,SAAS,EAC/C,YAAaA,EAAQ,SAAS,EAAE,UAAU,SAAS,CACrD,EAGMwB,EAAS,MAAM,IAAIf,EACvBc,EACAc,EACAC,CACF,EAAE,uBAAuB,EAGzBhC,EAAOkB,EAAO,eAAe,EAAE,KAAKhB,EAAuB,GAAG,EAC9DF,EAAOkB,EAAO,KAAK,YAAY,EAAE,KAAKa,CAAa,EACnD/B,EAAOkB,EAAO,KAAK,SAAS,EAAE,QAAQc,CAAW,CACnD,CAAC,CACH,CAAC",
|
|
6
|
+
"names": ["ASSOCIATED_TOKEN_PROGRAM_ID", "createAssociatedTokenAccountInstruction", "createCloseAccountInstruction", "createInitializeAccount2Instruction", "createInitializeAccount3Instruction", "createInitializeAccountInstruction", "createSyncNativeInstruction", "createTransferCheckedInstruction", "createTransferInstruction", "getAssociatedTokenAddressSync", "TOKEN_2022_PROGRAM_ID", "TOKEN_PROGRAM_ID", "Keypair", "SystemProgram", "Transaction", "TransactionInstruction", "bs58", "describe", "expect", "it", "SolanaTransactionTypes", "TransactionInspector", "DUMMY_BLOCKHASH", "makeSignedRawTx", "ixs", "signers", "feePayer", "payer", "tx", "seen", "uniqueSigners", "kp", "k", "dest", "ix", "raw", "result", "owner", "source", "destination", "mint", "newAccount", "ata", "ata22", "account", "bogusIx", "garbage", "overrideToken", "overrideATA", "tokenOverride", "ataOverride"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{ASSOCIATED_TOKEN_PROGRAM_ID as l,decodeBurnCheckedInstruction as b,decodeBurnInstruction as B,decodeCloseAccountInstruction as h,decodeFreezeAccountInstruction as T,decodeInitializeAccount2Instruction as x,decodeInitializeAccount3Instruction as w,decodeInitializeAccountInstruction as f,decodeInitializeImmutableOwnerInstruction as q,decodeSyncNativeInstruction as P,decodeThawAccountInstruction as C,decodeTransferCheckedInstruction as K,decodeTransferCheckedWithFeeInstruction as g,decodeTransferInstruction as R,getAssociatedTokenAddressSync as O,TOKEN_2022_PROGRAM_ID as a,TOKEN_PROGRAM_ID as i}from"@solana/spl-token";import{SystemProgram as _,SYSVAR_RENT_PUBKEY as z}from"@solana/web3.js";const r=e=>e.equals(i)||e.equals(a),o=e=>{try{return e()}catch{return null}},D=[{when:({programId:e})=>e.equals(l),decode:({ixMeta:e,message:s})=>{const n=e.accountKeyIndexes??[],c=t=>n[t]!==void 0?s.allKeys[n[t]]??null:null,u=c(1),d=c(3);if(!u||!d)return null;const y=n.map(t=>s.allKeys[t]).filter(t=>!!t),A=y.find(t=>t.equals(a))??y.find(t=>t.equals(i))??null,p=t=>t.equals(_.programId)||t.equals(i)||t.equals(a)||t.equals(l)||t.equals(z),I=y.filter(t=>!p(t)&&!t.equals(u)&&!t.equals(d)),k=(t,m)=>O(d,t,!0,m,l);if(A){for(const t of I)if(k(t,A).equals(u))return{createATA:{address:t.toBase58(),mintAddress:d.toBase58()}}}for(const t of I){if(k(t,i).equals(u))return{createATA:{address:t.toBase58(),mintAddress:d.toBase58()}};if(k(t,a).equals(u))return{createATA:{address:t.toBase58(),mintAddress:d.toBase58()}}}return null}},{when:({programId:e})=>e.equals(a),decode:({instruction:e,programId:s})=>o(()=>{const{keys:{destination:n}}=g(e,s);return{tokenAddress:n.pubkey.toBase58()}})},{when:({programId:e})=>r(e),decode:({instruction:e,programId:s})=>o(()=>{const{keys:{destination:n}}=R(e,s);return{tokenAddress:n.pubkey.toBase58()}})},{when:({programId:e})=>r(e),decode:({instruction:e,programId:s})=>o(()=>{const{keys:{destination:n}}=K(e,s);return{tokenAddress:n.pubkey.toBase58()}})},{when:({programId:e})=>r(e),decode:({instruction:e,programId:s})=>o(()=>{const{keys:{account:n,mint:c}}=f(e,s);return{createATA:{address:n.pubkey.toBase58(),mintAddress:c.pubkey.toBase58()}}})},{when:({programId:e})=>r(e),decode:({instruction:e,programId:s})=>o(()=>{const{keys:{account:n,mint:c}}=x(e,s);return{createATA:{address:n.pubkey.toBase58(),mintAddress:c.pubkey.toBase58()}}})},{when:({programId:e})=>r(e),decode:({instruction:e,programId:s})=>o(()=>{const{keys:{account:n,mint:c}}=w(e,s);return{createATA:{address:n.pubkey.toBase58(),mintAddress:c.pubkey.toBase58()}}})},{when:({programId:e})=>r(e),decode:({instruction:e,programId:s})=>o(()=>{const{keys:{account:n}}=q(e,s);return{tokenAddress:n.pubkey.toBase58()}})},{when:({programId:e})=>r(e),decode:({instruction:e,programId:s})=>o(()=>{const{keys:{account:n}}=h(e,s);return{tokenAddress:n.pubkey.toBase58()}})},{when:({programId:e})=>r(e),decode:({instruction:e,programId:s})=>o(()=>{const{keys:{account:n}}=P(e,s);return{tokenAddress:n.pubkey.toBase58()}})},{when:({programId:e})=>r(e),decode:({instruction:e,programId:s})=>o(()=>{const{keys:{account:n}}=b(e,s);return{tokenAddress:n.pubkey.toBase58()}})},{when:({programId:e})=>r(e),decode:({instruction:e,programId:s})=>o(()=>{const{keys:{account:n}}=B(e,s);return{tokenAddress:n.pubkey.toBase58()}})},{when:({programId:e})=>r(e),decode:({instruction:e,programId:s})=>o(()=>{const{keys:{account:n}}=T(e,s);return{tokenAddress:n.pubkey.toBase58()}})},{when:({programId:e})=>r(e),decode:({instruction:e,programId:s})=>o(()=>{const{keys:{account:n}}=C(e,s);return{tokenAddress:n.pubkey.toBase58()}})},{when:({programId:e})=>e.equals(l)||e.equals(i)||e.equals(a),decode:()=>null}];export{D as DECODERS};
|
|
2
|
+
//# sourceMappingURL=transactionDecoders.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../src/internal/app-binder/services/utils/transactionDecoders.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n ASSOCIATED_TOKEN_PROGRAM_ID,\n decodeBurnCheckedInstruction,\n decodeBurnInstruction,\n decodeCloseAccountInstruction,\n decodeFreezeAccountInstruction,\n decodeInitializeAccount2Instruction,\n decodeInitializeAccount3Instruction,\n decodeInitializeAccountInstruction,\n decodeInitializeImmutableOwnerInstruction,\n decodeSyncNativeInstruction,\n decodeThawAccountInstruction,\n decodeTransferCheckedInstruction,\n decodeTransferCheckedWithFeeInstruction,\n decodeTransferInstruction,\n getAssociatedTokenAddressSync,\n TOKEN_2022_PROGRAM_ID,\n TOKEN_PROGRAM_ID,\n} from \"@solana/spl-token\";\nimport {\n type PublicKey,\n SystemProgram,\n SYSVAR_RENT_PUBKEY,\n type TransactionInstruction,\n} from \"@solana/web3.js\";\n\nimport {\n type NormalizedCompiledIx,\n type NormalizedMessage,\n type TxInspectorResult,\n} from \"@internal/app-binder/services/TransactionInspector\";\n\nexport type IxContext = {\n programId: PublicKey;\n ixMeta: NormalizedCompiledIx;\n message: NormalizedMessage;\n instruction: TransactionInstruction;\n};\n\nexport type Decoder = {\n when: (ctx: IxContext) => boolean;\n decode: (ctx: IxContext) => TxInspectorResult[\"data\"] | null;\n};\n\nconst isTokenProgramId = (pid: PublicKey) =>\n pid.equals(TOKEN_PROGRAM_ID) || pid.equals(TOKEN_2022_PROGRAM_ID);\n\nconst safe = <T>(fn: () => T): T | null => {\n try {\n return fn();\n } catch {\n return null;\n }\n};\n\nexport type CreateAtaExplanation = {\n ataFromIx: string;\n ownerFound?: string;\n mint: string;\n tokenProgramUsed: \"token\" | \"token2022\";\n derivedClassic?: string;\n derived2022?: string;\n matches: \"classic\" | \"token2022\" | \"neither\";\n};\n\nexport const DECODERS: Decoder[] = [\n // ATA creation (with derivation fallback)\n {\n when: ({ programId }) => programId.equals(ASSOCIATED_TOKEN_PROGRAM_ID),\n decode: ({ ixMeta, message }) => {\n const idxs = ixMeta.accountKeyIndexes ?? [];\n const byIdx = (n: number) =>\n idxs[n] !== undefined ? (message.allKeys[idxs[n]] ?? null) : null;\n\n // canonical ATA ix layout: [payer, ata, owner, mint, system, tokenProgram, rent?]\n const ataPk = byIdx(1);\n const mintPk = byIdx(3);\n if (!ataPk || !mintPk) return null;\n\n const accs = idxs\n .map((i) => message.allKeys[i])\n .filter((k): k is PublicKey => !!k);\n\n // prefer token-2022 if present among ix accounts, else token classic\n const tokenProgInIx =\n accs.find((pk) => pk.equals(TOKEN_2022_PROGRAM_ID)) ??\n accs.find((pk) => pk.equals(TOKEN_PROGRAM_ID)) ??\n null;\n\n const isProgramOrSysvar = (pk: PublicKey) =>\n pk.equals(SystemProgram.programId) ||\n pk.equals(TOKEN_PROGRAM_ID) ||\n pk.equals(TOKEN_2022_PROGRAM_ID) ||\n pk.equals(ASSOCIATED_TOKEN_PROGRAM_ID) ||\n pk.equals(SYSVAR_RENT_PUBKEY);\n\n // candidate owners: exclude programs/sysvars, the ATA itself, and the mint\n const ownerCandidates = accs.filter(\n (pk) =>\n !isProgramOrSysvar(pk) && !pk.equals(ataPk) && !pk.equals(mintPk),\n );\n\n const derive = (owner: PublicKey, tokenProg: PublicKey) =>\n getAssociatedTokenAddressSync(\n mintPk,\n owner,\n true, // allowOwnerOffCurve\n tokenProg,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n );\n\n // try with the token program actually referenced in the ix (if any)\n if (tokenProgInIx) {\n for (const owner of ownerCandidates) {\n if (derive(owner, tokenProgInIx).equals(ataPk)) {\n return {\n createATA: {\n address: owner.toBase58(),\n mintAddress: mintPk.toBase58(),\n },\n };\n }\n }\n }\n\n // fallback: try both classic and 2022 (covers odd wrappers/missing program acct)\n for (const owner of ownerCandidates) {\n const dClassic = derive(owner, TOKEN_PROGRAM_ID);\n if (dClassic.equals(ataPk)) {\n return {\n createATA: {\n address: owner.toBase58(),\n mintAddress: mintPk.toBase58(),\n },\n };\n }\n const d22 = derive(owner, TOKEN_2022_PROGRAM_ID);\n if (d22.equals(ataPk)) {\n return {\n createATA: {\n address: owner.toBase58(),\n mintAddress: mintPk.toBase58(),\n },\n };\n }\n }\n return null;\n },\n },\n\n // Token-2022 fee\u2019d transfer\n {\n when: ({ programId }) => programId.equals(TOKEN_2022_PROGRAM_ID),\n decode: ({ instruction, programId }) =>\n safe(() => {\n const {\n keys: { destination },\n } = decodeTransferCheckedWithFeeInstruction(instruction, programId);\n return {\n tokenAddress: destination.pubkey.toBase58(),\n };\n }),\n },\n\n // Transfers\n {\n when: ({ programId }) => isTokenProgramId(programId),\n decode: ({ instruction, programId }) =>\n safe(() => {\n const {\n keys: { destination },\n } = decodeTransferInstruction(instruction, programId);\n return { tokenAddress: destination.pubkey.toBase58() };\n }),\n },\n {\n when: ({ programId }) => isTokenProgramId(programId),\n decode: ({ instruction, programId }) =>\n safe(() => {\n const {\n keys: { destination },\n } = decodeTransferCheckedInstruction(instruction, programId);\n return {\n tokenAddress: destination.pubkey.toBase58(),\n };\n }),\n },\n\n // Account init\n {\n when: ({ programId }) => isTokenProgramId(programId),\n decode: ({ instruction, programId }) =>\n safe(() => {\n const {\n keys: { account, mint },\n } = decodeInitializeAccountInstruction(instruction, programId);\n return {\n createATA: {\n address: account.pubkey.toBase58(),\n mintAddress: mint.pubkey.toBase58(),\n },\n };\n }),\n },\n {\n when: ({ programId }) => isTokenProgramId(programId),\n decode: ({ instruction, programId }) =>\n safe(() => {\n const {\n keys: { account, mint },\n } = decodeInitializeAccount2Instruction(instruction, programId);\n return {\n createATA: {\n address: account.pubkey.toBase58(),\n mintAddress: mint.pubkey.toBase58(),\n },\n };\n }),\n },\n {\n when: ({ programId }) => isTokenProgramId(programId),\n decode: ({ instruction, programId }) =>\n safe(() => {\n const {\n keys: { account, mint },\n } = decodeInitializeAccount3Instruction(instruction, programId);\n return {\n createATA: {\n address: account.pubkey.toBase58(),\n mintAddress: mint.pubkey.toBase58(),\n },\n };\n }),\n },\n {\n when: ({ programId }) => isTokenProgramId(programId),\n decode: ({ instruction, programId }) =>\n safe(() => {\n const {\n keys: { account },\n } = decodeInitializeImmutableOwnerInstruction(instruction, programId);\n return { tokenAddress: account.pubkey.toBase58() };\n }),\n },\n\n // Lifecycle / WSOL\n {\n when: ({ programId }) => isTokenProgramId(programId),\n decode: ({ instruction, programId }) =>\n safe(() => {\n const {\n keys: { account },\n } = decodeCloseAccountInstruction(instruction, programId);\n return { tokenAddress: account.pubkey.toBase58() };\n }),\n },\n {\n when: ({ programId }) => isTokenProgramId(programId),\n decode: ({ instruction, programId }) =>\n safe(() => {\n const {\n keys: { account },\n } = decodeSyncNativeInstruction(instruction, programId);\n return { tokenAddress: account.pubkey.toBase58() };\n }),\n },\n\n // Mint / Burn\n {\n when: ({ programId }) => isTokenProgramId(programId),\n decode: ({ instruction, programId }) =>\n safe(() => {\n const {\n keys: { account },\n } = decodeBurnCheckedInstruction(instruction, programId);\n return {\n tokenAddress: account.pubkey.toBase58(),\n };\n }),\n },\n {\n when: ({ programId }) => isTokenProgramId(programId),\n decode: ({ instruction, programId }) =>\n safe(() => {\n const {\n keys: { account },\n } = decodeBurnInstruction(instruction, programId);\n return {\n tokenAddress: account.pubkey.toBase58(),\n };\n }),\n },\n\n // Freeze / Thaw\n {\n when: ({ programId }) => isTokenProgramId(programId),\n decode: ({ instruction, programId }) =>\n safe(() => {\n const {\n keys: { account },\n } = decodeFreezeAccountInstruction(instruction, programId);\n return {\n tokenAddress: account.pubkey.toBase58(),\n };\n }),\n },\n {\n when: ({ programId }) => isTokenProgramId(programId),\n decode: ({ instruction, programId }) =>\n safe(() => {\n const {\n keys: { account },\n } = decodeThawAccountInstruction(instruction, programId);\n return {\n tokenAddress: account.pubkey.toBase58(),\n };\n }),\n },\n\n // LAST-RESORT: tag as SPL by program id only (when decoders can't run)\n {\n when: ({ programId }) =>\n programId.equals(ASSOCIATED_TOKEN_PROGRAM_ID) ||\n programId.equals(TOKEN_PROGRAM_ID) ||\n programId.equals(TOKEN_2022_PROGRAM_ID),\n decode: () => null,\n },\n];\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["ASSOCIATED_TOKEN_PROGRAM_ID", "decodeBurnCheckedInstruction", "decodeBurnInstruction", "decodeCloseAccountInstruction", "decodeFreezeAccountInstruction", "decodeInitializeAccount2Instruction", "decodeInitializeAccount3Instruction", "decodeInitializeAccountInstruction", "decodeInitializeImmutableOwnerInstruction", "decodeSyncNativeInstruction", "decodeThawAccountInstruction", "decodeTransferCheckedInstruction", "decodeTransferCheckedWithFeeInstruction", "decodeTransferInstruction", "getAssociatedTokenAddressSync", "TOKEN_2022_PROGRAM_ID", "TOKEN_PROGRAM_ID", "SystemProgram", "SYSVAR_RENT_PUBKEY", "isTokenProgramId", "pid", "safe", "fn", "DECODERS", "programId", "ixMeta", "message", "idxs", "byIdx", "n", "ataPk", "mintPk", "accs", "i", "k", "tokenProgInIx", "pk", "isProgramOrSysvar", "ownerCandidates", "derive", "owner", "tokenProg", "instruction", "destination", "account", "mint"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{isSuccessCommandResult as i}from"@ledgerhq/device-management-kit";import{GetChallengeCommand as s}from"../../app-binder/command/GetChallengeCommand";class p{constructor(o,e){this.api=o;this.args=e}async run(){const{contextModule:o,options:e}=this.args,a=this.api.getDeviceSessionState();let n;const r=await this.api.sendCommand(new s);return i(r)&&(n=r.data.challenge),(await o.getSolanaContext({deviceModelId:a.deviceModelId,tokenAddress:e.tokenAddress,challenge:n,createATA:e.createATA})).caseOf({Left:t=>{throw t},Right:t=>({challenge:n,descriptor:t.descriptor,addressResult:{tokenAccount:t.tokenAccount,owner:t.owner,contract:t.contract},calCertificate:t.certificate})})}}export{p as BuildTransactionContextTask};
|
|
2
|
+
//# sourceMappingURL=BuildTransactionContextTask.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/internal/app-binder/task/BuildTransactionContextTask.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n type ContextModule,\n type PkiCertificate,\n} from \"@ledgerhq/context-module\";\nimport {\n type InternalApi,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type TransactionResolutionContext } from \"@api/model/TransactionResolutionContext\";\nimport { GetChallengeCommand } from \"@internal/app-binder/command/GetChallengeCommand\";\n\nexport type SolanaBuildContextResult = {\n challenge: string | undefined;\n addressResult: {\n tokenAccount: string;\n owner: string;\n contract: string;\n };\n calCertificate: PkiCertificate;\n descriptor: Uint8Array;\n};\n\nexport type BuildTransactionContextTaskArgs = {\n readonly contextModule: ContextModule;\n readonly options: TransactionResolutionContext;\n};\n\nexport class BuildTransactionContextTask {\n constructor(\n private readonly api: InternalApi,\n private readonly args: BuildTransactionContextTaskArgs,\n ) {}\n\n async run(): Promise<SolanaBuildContextResult> {\n const { contextModule, options } = this.args;\n const deviceState = this.api.getDeviceSessionState();\n\n // get challenge\n let challenge: string | undefined;\n const challengeRes = await this.api.sendCommand(new GetChallengeCommand());\n if (isSuccessCommandResult(challengeRes)) {\n challenge = challengeRes.data.challenge;\n }\n\n // get Solana context\n const contextResult = await contextModule.getSolanaContext({\n deviceModelId: deviceState.deviceModelId,\n tokenAddress: options.tokenAddress,\n challenge,\n createATA: options.createATA,\n });\n\n return contextResult.caseOf({\n Left: (err) => {\n throw err;\n },\n Right: (ctx) => {\n return {\n challenge,\n descriptor: ctx.descriptor,\n addressResult: {\n tokenAccount: ctx.tokenAccount,\n owner: ctx.owner,\n contract: ctx.contract,\n },\n calCertificate: ctx.certificate,\n };\n },\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "AAIA,OAEE,0BAAAA,MACK,kCAGP,OAAS,uBAAAC,MAA2B,mDAkB7B,MAAMC,CAA4B,CACvC,YACmBC,EACAC,EACjB,CAFiB,SAAAD,EACA,UAAAC,CAChB,CAEH,MAAM,KAAyC,CAC7C,KAAM,CAAE,cAAAC,EAAe,QAAAC,CAAQ,EAAI,KAAK,KAClCC,EAAc,KAAK,IAAI,sBAAsB,EAGnD,IAAIC,EACJ,MAAMC,EAAe,MAAM,KAAK,IAAI,YAAY,IAAIR,CAAqB,EACzE,OAAID,EAAuBS,CAAY,IACrCD,EAAYC,EAAa,KAAK,YAIV,MAAMJ,EAAc,iBAAiB,CACzD,cAAeE,EAAY,cAC3B,aAAcD,EAAQ,aACtB,UAAAE,EACA,UAAWF,EAAQ,SACrB,CAAC,GAEoB,OAAO,CAC1B,KAAOI,GAAQ,CACb,MAAMA,CACR,EACA,MAAQC,IACC,CACL,UAAAH,EACA,WAAYG,EAAI,WAChB,cAAe,CACb,aAAcA,EAAI,aAClB,MAAOA,EAAI,MACX,SAAUA,EAAI,QAChB,EACA,eAAgBA,EAAI,WACtB,EAEJ,CAAC,CACH,CACF",
|
|
6
|
+
"names": ["isSuccessCommandResult", "GetChallengeCommand", "BuildTransactionContextTask", "api", "args", "contextModule", "options", "deviceState", "challenge", "challengeRes", "err", "ctx"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{CommandResultStatus as u,DeviceModelId as l}from"@ledgerhq/device-management-kit";import{Left as f,Right as m}from"purify-ts";import{beforeEach as C,describe as k,expect as n,it as r,vi as t}from"vitest";import{GetChallengeCommand as A}from"../../app-binder/command/GetChallengeCommand";import{BuildTransactionContextTask as d}from"./BuildTransactionContextTask";const a={getSolanaContext:t.fn(),getContext:t.fn(),getContexts:t.fn(),getTypedDataFilters:t.fn(),getWeb3Checks:t.fn()},i={contextModule:a,options:{tokenAddress:"someAddress",createATA:void 0}},e={descriptor:new Uint8Array([1,2,3]),tokenAccount:"someTokenAccount",owner:"someOwner",contract:"someContract",certificate:{payload:new Uint8Array([170,187]),keyUsageNumber:1}};let o;k("BuildTransactionContextTask",()=>{C(()=>{t.resetAllMocks(),o={getDeviceSessionState:t.fn().mockReturnValue({deviceModelId:l.NANO_X}),sendCommand:t.fn().mockResolvedValue({status:u.Success,data:{challenge:"someChallenge"}})}}),r("returns context successfully when challenge command succeeds",async()=>{a.getSolanaContext.mockResolvedValue(m(e));const s=await new d(o,i).run();n(o.sendCommand).toHaveBeenCalledWith(n.any(A)),n(a.getSolanaContext).toHaveBeenCalledWith({deviceModelId:l.NANO_X,tokenAddress:"someAddress",challenge:"someChallenge",createATA:void 0}),n(s).toEqual({challenge:"someChallenge",descriptor:e.descriptor,calCertificate:e.certificate,addressResult:{tokenAccount:e.tokenAccount,owner:e.owner,contract:e.contract}})}),r("returns context when challenge command fails",async()=>{o.sendCommand.mockResolvedValue({status:u.Error,data:{}}),a.getSolanaContext.mockResolvedValue(m(e));const s=await new d(o,i).run();n(a.getSolanaContext).toHaveBeenCalledWith({deviceModelId:l.NANO_X,tokenAddress:"someAddress",challenge:void 0,createATA:void 0}),n(s).toEqual({challenge:void 0,descriptor:e.descriptor,calCertificate:e.certificate,addressResult:{tokenAccount:e.tokenAccount,owner:e.owner,contract:e.contract}})}),r("throws if getSolanaContext returns Left",async()=>{const c=new Error("Solana context failure");a.getSolanaContext.mockResolvedValue(f(c));const s=new d(o,i);await n(s.run()).rejects.toThrow("Solana context failure")})});
|
|
2
|
+
//# sourceMappingURL=BuildTransactionContextTask.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/internal/app-binder/task/BuildTransactionContextTask.test.ts"],
|
|
4
|
+
"sourcesContent": ["/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n CommandResultStatus,\n DeviceModelId,\n type InternalApi,\n} from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { GetChallengeCommand } from \"@internal/app-binder/command/GetChallengeCommand\";\n\nimport {\n BuildTransactionContextTask,\n type SolanaBuildContextResult,\n} from \"./BuildTransactionContextTask\";\n\nconst contextModuleMock: ContextModule = {\n getSolanaContext: vi.fn(),\n getContext: vi.fn(),\n getContexts: vi.fn(),\n getTypedDataFilters: vi.fn(),\n getWeb3Checks: vi.fn(),\n};\n\nconst defaultArgs = {\n contextModule: contextModuleMock,\n options: {\n tokenAddress: \"someAddress\",\n createATA: undefined,\n },\n};\n\nconst domainSolanaPayload = {\n descriptor: new Uint8Array([1, 2, 3]),\n tokenAccount: \"someTokenAccount\",\n owner: \"someOwner\",\n contract: \"someContract\",\n certificate: { payload: new Uint8Array([0xaa, 0xbb]), keyUsageNumber: 1 },\n} as const;\n\nlet apiMock: InternalApi;\n\ndescribe(\"BuildTransactionContextTask\", () => {\n beforeEach(() => {\n vi.resetAllMocks();\n\n apiMock = {\n getDeviceSessionState: vi\n .fn()\n .mockReturnValue({ deviceModelId: DeviceModelId.NANO_X }),\n sendCommand: vi.fn().mockResolvedValue({\n status: CommandResultStatus.Success,\n data: { challenge: \"someChallenge\" },\n }),\n } as unknown as InternalApi;\n });\n\n it(\"returns context successfully when challenge command succeeds\", async () => {\n (contextModuleMock.getSolanaContext as any).mockResolvedValue(\n Right(domainSolanaPayload),\n );\n\n const task = new BuildTransactionContextTask(apiMock, defaultArgs);\n const result = await task.run();\n\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n expect.any(GetChallengeCommand),\n );\n\n expect(contextModuleMock.getSolanaContext).toHaveBeenCalledWith({\n deviceModelId: DeviceModelId.NANO_X,\n tokenAddress: \"someAddress\",\n challenge: \"someChallenge\",\n createATA: undefined,\n });\n\n expect(result).toEqual<SolanaBuildContextResult>({\n challenge: \"someChallenge\",\n descriptor: domainSolanaPayload.descriptor,\n calCertificate: domainSolanaPayload.certificate,\n addressResult: {\n tokenAccount: domainSolanaPayload.tokenAccount,\n owner: domainSolanaPayload.owner,\n contract: domainSolanaPayload.contract,\n },\n });\n });\n\n it(\"returns context when challenge command fails\", async () => {\n (apiMock.sendCommand as any).mockResolvedValue({\n status: CommandResultStatus.Error,\n data: {},\n });\n (contextModuleMock.getSolanaContext as any).mockResolvedValue(\n Right(domainSolanaPayload),\n );\n\n const task = new BuildTransactionContextTask(apiMock, defaultArgs);\n const result = await task.run();\n\n expect(contextModuleMock.getSolanaContext).toHaveBeenCalledWith({\n deviceModelId: DeviceModelId.NANO_X,\n tokenAddress: \"someAddress\",\n challenge: undefined,\n createATA: undefined,\n });\n\n expect(result).toEqual<SolanaBuildContextResult>({\n challenge: undefined,\n descriptor: domainSolanaPayload.descriptor,\n calCertificate: domainSolanaPayload.certificate,\n addressResult: {\n tokenAccount: domainSolanaPayload.tokenAccount,\n owner: domainSolanaPayload.owner,\n contract: domainSolanaPayload.contract,\n },\n });\n });\n\n it(\"throws if getSolanaContext returns Left\", async () => {\n const error = new Error(\"Solana context failure\");\n (contextModuleMock.getSolanaContext as any).mockResolvedValue(Left(error));\n\n const task = new BuildTransactionContextTask(apiMock, defaultArgs);\n\n await expect(task.run()).rejects.toThrow(\"Solana context failure\");\n });\n});\n"],
|
|
5
|
+
"mappings": "AAIA,OACE,uBAAAA,EACA,iBAAAC,MAEK,kCACP,OAAS,QAAAC,EAAM,SAAAC,MAAa,YAC5B,OAAS,cAAAC,EAAY,YAAAC,EAAU,UAAAC,EAAQ,MAAAC,EAAI,MAAAC,MAAU,SAErD,OAAS,uBAAAC,MAA2B,mDAEpC,OACE,+BAAAC,MAEK,gCAEP,MAAMC,EAAmC,CACvC,iBAAkBH,EAAG,GAAG,EACxB,WAAYA,EAAG,GAAG,EAClB,YAAaA,EAAG,GAAG,EACnB,oBAAqBA,EAAG,GAAG,EAC3B,cAAeA,EAAG,GAAG,CACvB,EAEMI,EAAc,CAClB,cAAeD,EACf,QAAS,CACP,aAAc,cACd,UAAW,MACb,CACF,EAEME,EAAsB,CAC1B,WAAY,IAAI,WAAW,CAAC,EAAG,EAAG,CAAC,CAAC,EACpC,aAAc,mBACd,MAAO,YACP,SAAU,eACV,YAAa,CAAE,QAAS,IAAI,WAAW,CAAC,IAAM,GAAI,CAAC,EAAG,eAAgB,CAAE,CAC1E,EAEA,IAAIC,EAEJT,EAAS,8BAA+B,IAAM,CAC5CD,EAAW,IAAM,CACfI,EAAG,cAAc,EAEjBM,EAAU,CACR,sBAAuBN,EACpB,GAAG,EACH,gBAAgB,CAAE,cAAeP,EAAc,MAAO,CAAC,EAC1D,YAAaO,EAAG,GAAG,EAAE,kBAAkB,CACrC,OAAQR,EAAoB,QAC5B,KAAM,CAAE,UAAW,eAAgB,CACrC,CAAC,CACH,CACF,CAAC,EAEDO,EAAG,+DAAgE,SAAY,CAC5EI,EAAkB,iBAAyB,kBAC1CR,EAAMU,CAAmB,CAC3B,EAGA,MAAME,EAAS,MADF,IAAIL,EAA4BI,EAASF,CAAW,EACvC,IAAI,EAE9BN,EAAOQ,EAAQ,WAAW,EAAE,qBAC1BR,EAAO,IAAIG,CAAmB,CAChC,EAEAH,EAAOK,EAAkB,gBAAgB,EAAE,qBAAqB,CAC9D,cAAeV,EAAc,OAC7B,aAAc,cACd,UAAW,gBACX,UAAW,MACb,CAAC,EAEDK,EAAOS,CAAM,EAAE,QAAkC,CAC/C,UAAW,gBACX,WAAYF,EAAoB,WAChC,eAAgBA,EAAoB,YACpC,cAAe,CACb,aAAcA,EAAoB,aAClC,MAAOA,EAAoB,MAC3B,SAAUA,EAAoB,QAChC,CACF,CAAC,CACH,CAAC,EAEDN,EAAG,+CAAgD,SAAY,CAC5DO,EAAQ,YAAoB,kBAAkB,CAC7C,OAAQd,EAAoB,MAC5B,KAAM,CAAC,CACT,CAAC,EACAW,EAAkB,iBAAyB,kBAC1CR,EAAMU,CAAmB,CAC3B,EAGA,MAAME,EAAS,MADF,IAAIL,EAA4BI,EAASF,CAAW,EACvC,IAAI,EAE9BN,EAAOK,EAAkB,gBAAgB,EAAE,qBAAqB,CAC9D,cAAeV,EAAc,OAC7B,aAAc,cACd,UAAW,OACX,UAAW,MACb,CAAC,EAEDK,EAAOS,CAAM,EAAE,QAAkC,CAC/C,UAAW,OACX,WAAYF,EAAoB,WAChC,eAAgBA,EAAoB,YACpC,cAAe,CACb,aAAcA,EAAoB,aAClC,MAAOA,EAAoB,MAC3B,SAAUA,EAAoB,QAChC,CACF,CAAC,CACH,CAAC,EAEDN,EAAG,0CAA2C,SAAY,CACxD,MAAMS,EAAQ,IAAI,MAAM,wBAAwB,EAC/CL,EAAkB,iBAAyB,kBAAkBT,EAAKc,CAAK,CAAC,EAEzE,MAAMC,EAAO,IAAIP,EAA4BI,EAASF,CAAW,EAEjE,MAAMN,EAAOW,EAAK,IAAI,CAAC,EAAE,QAAQ,QAAQ,wBAAwB,CACnE,CAAC,CACH,CAAC",
|
|
6
|
+
"names": ["CommandResultStatus", "DeviceModelId", "Left", "Right", "beforeEach", "describe", "expect", "it", "vi", "GetChallengeCommand", "BuildTransactionContextTask", "contextModuleMock", "defaultArgs", "domainSolanaPayload", "apiMock", "result", "error", "task"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{isSuccessCommandResult as a}from"@ledgerhq/device-management-kit";import{Nothing as n}from"purify-ts";import{ProvideTLVDescriptorCommand as p}from"../../app-binder/command/ProvideTLVDescriptorCommand";import{ProvideTrustedNamePKICommand as s}from"../../app-binder/command/ProvideTrustedNamePKICommand";class C{constructor(t,o){this.api=t;this.context=o}async run(){const{descriptor:t,certificate:o}=this.context,{payload:i}=o,r=await this.api.sendCommand(new s({pkiBlob:i}));if(!a(r))throw r;const e=await this.api.sendCommand(new p({payload:t}));if(!a(e))throw e;return n}}export{C as ProvideSolanaTransactionContextTask};
|
|
2
|
+
//# sourceMappingURL=ProvideTransactionContextTask.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/internal/app-binder/task/ProvideTransactionContextTask.ts"],
|
|
4
|
+
"sourcesContent": ["import { type PkiCertificate } from \"@ledgerhq/context-module\";\nimport {\n type CommandErrorResult,\n type InternalApi,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\nimport { type Maybe, Nothing } from \"purify-ts\";\n\nimport { ProvideTLVDescriptorCommand } from \"@internal/app-binder/command/ProvideTLVDescriptorCommand\";\nimport { ProvideTrustedNamePKICommand } from \"@internal/app-binder/command/ProvideTrustedNamePKICommand\";\nimport { type SolanaAppErrorCodes } from \"@internal/app-binder/command/utils/SolanaApplicationErrors\";\n\nexport type SolanaContextForDevice = {\n descriptor: Uint8Array;\n certificate: PkiCertificate;\n};\n\nexport class ProvideSolanaTransactionContextTask {\n constructor(\n private readonly api: InternalApi,\n private readonly context: SolanaContextForDevice,\n ) {}\n\n async run(): Promise<Maybe<CommandErrorResult<SolanaAppErrorCodes>>> {\n const { descriptor, certificate } = this.context;\n const { payload: certificatePayload } = certificate;\n\n // send CAL certificate + signature\n const pkiResult = await this.api.sendCommand(\n new ProvideTrustedNamePKICommand({\n pkiBlob: certificatePayload,\n }),\n );\n if (!isSuccessCommandResult(pkiResult)) {\n throw pkiResult;\n }\n\n // send signed TLV descriptor\n const tlvResult = await this.api.sendCommand(\n new ProvideTLVDescriptorCommand({ payload: descriptor }),\n );\n if (!isSuccessCommandResult(tlvResult)) {\n throw tlvResult;\n }\n\n return Nothing;\n }\n}\n"],
|
|
5
|
+
"mappings": "AACA,OAGE,0BAAAA,MACK,kCACP,OAAqB,WAAAC,MAAe,YAEpC,OAAS,+BAAAC,MAAmC,2DAC5C,OAAS,gCAAAC,MAAoC,4DAQtC,MAAMC,CAAoC,CAC/C,YACmBC,EACAC,EACjB,CAFiB,SAAAD,EACA,aAAAC,CAChB,CAEH,MAAM,KAA+D,CACnE,KAAM,CAAE,WAAAC,EAAY,YAAAC,CAAY,EAAI,KAAK,QACnC,CAAE,QAASC,CAAmB,EAAID,EAGlCE,EAAY,MAAM,KAAK,IAAI,YAC/B,IAAIP,EAA6B,CAC/B,QAASM,CACX,CAAC,CACH,EACA,GAAI,CAACT,EAAuBU,CAAS,EACnC,MAAMA,EAIR,MAAMC,EAAY,MAAM,KAAK,IAAI,YAC/B,IAAIT,EAA4B,CAAE,QAASK,CAAW,CAAC,CACzD,EACA,GAAI,CAACP,EAAuBW,CAAS,EACnC,MAAMA,EAGR,OAAOV,CACT,CACF",
|
|
6
|
+
"names": ["isSuccessCommandResult", "Nothing", "ProvideTLVDescriptorCommand", "ProvideTrustedNamePKICommand", "ProvideSolanaTransactionContextTask", "api", "context", "descriptor", "certificate", "certificatePayload", "pkiResult", "tlvResult"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{CommandResultFactory as r}from"@ledgerhq/device-management-kit";import{Maybe as k,Nothing as y}from"purify-ts";import{beforeEach as v,describe as x,expect as o,it as m,vi as p}from"vitest";import{ProvideTLVDescriptorCommand as w}from"../../app-binder/command/ProvideTLVDescriptorCommand";import{ProvideTrustedNamePKICommand as T}from"../../app-binder/command/ProvideTrustedNamePKICommand";import{ProvideSolanaTransactionContextTask as c}from"./ProvideTransactionContextTask";x("ProvideSolanaTransactionContextTask",()=>{let e,t;const d=Uint8Array.from([170,170,170]),l={payload:Uint8Array.from([222,173,190,239,222,173,190,239])},i={_tag:"SomeError",errorCode:0,message:"SomeError"};v(()=>{p.resetAllMocks(),e={sendCommand:p.fn()},t={descriptor:d,certificate:l}}),m("returns Nothing when both commands succeed",async()=>{const a=r({data:k.of(null)});e.sendCommand.mockResolvedValue(a);const s=await new c(e,t).run();o(e.sendCommand).toHaveBeenCalledTimes(2);const u=e.sendCommand.mock.calls[0];o(u).toBeDefined();const C=u[0];o(C).toBeInstanceOf(T),o(C.args.pkiBlob).toStrictEqual(l.payload);const f=e.sendCommand.mock.calls[1][0];o(f).toBeInstanceOf(w),o(f.args.payload).toStrictEqual(d),o(s).toStrictEqual(y)}),m("throws error if PKI command fails",async()=>{const a=r({error:i});e.sendCommand.mockResolvedValueOnce(a);const n=new c(e,t);await o(n.run()).rejects.toBe(a),o(e.sendCommand).toHaveBeenCalledTimes(1)}),m("throws error if TLV command fails",async()=>{const a=r({data:k.of(null)}),n=r({error:i});e.sendCommand.mockResolvedValueOnce(a).mockResolvedValueOnce(n);const s=new c(e,t);await o(s.run()).rejects.toBe(n),o(e.sendCommand).toHaveBeenCalledTimes(2)})});
|
|
2
|
+
//# sourceMappingURL=ProvideTransactionContextTask.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/internal/app-binder/task/ProvideTransactionContextTask.test.ts"],
|
|
4
|
+
"sourcesContent": ["/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { CommandResultFactory } from \"@ledgerhq/device-management-kit\";\nimport { Maybe, Nothing } from \"purify-ts\";\nimport { beforeEach, describe, expect, it, type Mock, vi } from \"vitest\";\n\nimport { ProvideTLVDescriptorCommand } from \"@internal/app-binder/command/ProvideTLVDescriptorCommand\";\nimport { ProvideTrustedNamePKICommand } from \"@internal/app-binder/command/ProvideTrustedNamePKICommand\";\n\nimport {\n ProvideSolanaTransactionContextTask,\n type SolanaContextForDevice,\n} from \"./ProvideTransactionContextTask\";\n\ndescribe(\"ProvideSolanaTransactionContextTask\", () => {\n let fakeApi: { sendCommand: Mock };\n let context: SolanaContextForDevice;\n\n const dummyDescriptor = Uint8Array.from([0xaa, 0xaa, 0xaa]);\n const dummyCertificate: any = {\n payload: Uint8Array.from([0xde, 0xad, 0xbe, 0xef, 0xde, 0xad, 0xbe, 0xef]),\n };\n\n const mockError = { _tag: \"SomeError\", errorCode: 0, message: \"SomeError\" };\n\n beforeEach(() => {\n vi.resetAllMocks();\n fakeApi = {\n sendCommand: vi.fn(),\n };\n context = {\n descriptor: dummyDescriptor,\n certificate: dummyCertificate,\n };\n });\n\n it(\"returns Nothing when both commands succeed\", async () => {\n // given\n const successResult = CommandResultFactory({ data: Maybe.of(null) });\n fakeApi.sendCommand.mockResolvedValue(successResult);\n\n const task = new ProvideSolanaTransactionContextTask(\n fakeApi as unknown as any,\n context,\n );\n\n // when\n const result = await task.run();\n\n // then\n expect(fakeApi.sendCommand).toHaveBeenCalledTimes(2);\n\n const firstCallCall = fakeApi.sendCommand.mock.calls[0];\n expect(firstCallCall).toBeDefined();\n const firstCallArg = firstCallCall![0];\n expect(firstCallArg).toBeInstanceOf(ProvideTrustedNamePKICommand);\n expect(\n (firstCallArg as ProvideTrustedNamePKICommand).args.pkiBlob,\n ).toStrictEqual(dummyCertificate.payload);\n\n const secondCallArg = fakeApi.sendCommand.mock.calls[1]![0]!;\n expect(secondCallArg).toBeInstanceOf(ProvideTLVDescriptorCommand);\n expect(\n (secondCallArg as ProvideTLVDescriptorCommand).args.payload,\n ).toStrictEqual(dummyDescriptor);\n\n expect(result).toStrictEqual(Nothing);\n });\n\n it(\"throws error if PKI command fails\", async () => {\n const errorResult = CommandResultFactory({ error: mockError });\n fakeApi.sendCommand.mockResolvedValueOnce(errorResult);\n\n const task = new ProvideSolanaTransactionContextTask(\n fakeApi as unknown as any,\n context,\n );\n\n await expect(task.run()).rejects.toBe(errorResult);\n expect(fakeApi.sendCommand).toHaveBeenCalledTimes(1);\n });\n\n it(\"throws error if TLV command fails\", async () => {\n const successResult = CommandResultFactory({ data: Maybe.of(null) });\n const tlvErrorResult = CommandResultFactory({ error: mockError });\n\n fakeApi.sendCommand\n .mockResolvedValueOnce(successResult)\n .mockResolvedValueOnce(tlvErrorResult);\n\n const task = new ProvideSolanaTransactionContextTask(\n fakeApi as unknown as any,\n context,\n );\n\n await expect(task.run()).rejects.toBe(tlvErrorResult);\n expect(fakeApi.sendCommand).toHaveBeenCalledTimes(2);\n });\n});\n"],
|
|
5
|
+
"mappings": "AAGA,OAAS,wBAAAA,MAA4B,kCACrC,OAAS,SAAAC,EAAO,WAAAC,MAAe,YAC/B,OAAS,cAAAC,EAAY,YAAAC,EAAU,UAAAC,EAAQ,MAAAC,EAAe,MAAAC,MAAU,SAEhE,OAAS,+BAAAC,MAAmC,2DAC5C,OAAS,gCAAAC,MAAoC,4DAE7C,OACE,uCAAAC,MAEK,kCAEPN,EAAS,sCAAuC,IAAM,CACpD,IAAIO,EACAC,EAEJ,MAAMC,EAAkB,WAAW,KAAK,CAAC,IAAM,IAAM,GAAI,CAAC,EACpDC,EAAwB,CAC5B,QAAS,WAAW,KAAK,CAAC,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAI,CAAC,CAC3E,EAEMC,EAAY,CAAE,KAAM,YAAa,UAAW,EAAG,QAAS,WAAY,EAE1EZ,EAAW,IAAM,CACfI,EAAG,cAAc,EACjBI,EAAU,CACR,YAAaJ,EAAG,GAAG,CACrB,EACAK,EAAU,CACR,WAAYC,EACZ,YAAaC,CACf,CACF,CAAC,EAEDR,EAAG,6CAA8C,SAAY,CAE3D,MAAMU,EAAgBhB,EAAqB,CAAE,KAAMC,EAAM,GAAG,IAAI,CAAE,CAAC,EACnEU,EAAQ,YAAY,kBAAkBK,CAAa,EAQnD,MAAMC,EAAS,MANF,IAAIP,EACfC,EACAC,CACF,EAG0B,IAAI,EAG9BP,EAAOM,EAAQ,WAAW,EAAE,sBAAsB,CAAC,EAEnD,MAAMO,EAAgBP,EAAQ,YAAY,KAAK,MAAM,CAAC,EACtDN,EAAOa,CAAa,EAAE,YAAY,EAClC,MAAMC,EAAeD,EAAe,CAAC,EACrCb,EAAOc,CAAY,EAAE,eAAeV,CAA4B,EAChEJ,EACGc,EAA8C,KAAK,OACtD,EAAE,cAAcL,EAAiB,OAAO,EAExC,MAAMM,EAAgBT,EAAQ,YAAY,KAAK,MAAM,CAAC,EAAG,CAAC,EAC1DN,EAAOe,CAAa,EAAE,eAAeZ,CAA2B,EAChEH,EACGe,EAA8C,KAAK,OACtD,EAAE,cAAcP,CAAe,EAE/BR,EAAOY,CAAM,EAAE,cAAcf,CAAO,CACtC,CAAC,EAEDI,EAAG,oCAAqC,SAAY,CAClD,MAAMe,EAAcrB,EAAqB,CAAE,MAAOe,CAAU,CAAC,EAC7DJ,EAAQ,YAAY,sBAAsBU,CAAW,EAErD,MAAMC,EAAO,IAAIZ,EACfC,EACAC,CACF,EAEA,MAAMP,EAAOiB,EAAK,IAAI,CAAC,EAAE,QAAQ,KAAKD,CAAW,EACjDhB,EAAOM,EAAQ,WAAW,EAAE,sBAAsB,CAAC,CACrD,CAAC,EAEDL,EAAG,oCAAqC,SAAY,CAClD,MAAMU,EAAgBhB,EAAqB,CAAE,KAAMC,EAAM,GAAG,IAAI,CAAE,CAAC,EAC7DsB,EAAiBvB,EAAqB,CAAE,MAAOe,CAAU,CAAC,EAEhEJ,EAAQ,YACL,sBAAsBK,CAAa,EACnC,sBAAsBO,CAAc,EAEvC,MAAMD,EAAO,IAAIZ,EACfC,EACAC,CACF,EAEA,MAAMP,EAAOiB,EAAK,IAAI,CAAC,EAAE,QAAQ,KAAKC,CAAc,EACpDlB,EAAOM,EAAQ,WAAW,EAAE,sBAAsB,CAAC,CACrD,CAAC,CACH,CAAC",
|
|
6
|
+
"names": ["CommandResultFactory", "Maybe", "Nothing", "beforeEach", "describe", "expect", "it", "vi", "ProvideTLVDescriptorCommand", "ProvideTrustedNamePKICommand", "ProvideSolanaTransactionContextTask", "fakeApi", "context", "dummyDescriptor", "dummyCertificate", "mockError", "successResult", "result", "firstCallCall", "firstCallArg", "secondCallArg", "errorResult", "task", "tlvErrorResult"]
|
|
7
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{APDU_MAX_PAYLOAD as
|
|
1
|
+
import{APDU_MAX_PAYLOAD as f,ByteArrayBuilder as m,CommandResultFactory as r,InvalidStatusWordError as i}from"@ledgerhq/device-management-kit";import{DerivationPathUtils as g}from"@ledgerhq/signer-utils";import l from"bs58";import{GetPubKeyCommand as p}from"../../app-binder/command/GetPubKeyCommand";import{SignOffChainMessageCommand as c}from"../../app-binder/command/SignOffChainMessageCommand";const y=65535;class U{constructor(e,t){this.api=e;this.args=t}async run(){const{sendingData:e,derivationPath:t}=this.args;if(e.length===0)return r({error:new i("Message cannot be empty")});if(e.length>y)return r({error:new i(`Message too long: ${e.length} bytes (max is 65535)`)});const d=g.splitPath(t),o=await this.api.sendCommand(new p({derivationPath:t,checkOnDevice:!1}));if(!("data"in o))return r({error:new i("Error getting public key from device")});const s=l.decode(o.data),a=this._buildFullMessage(e,s),n=this._buildApduCommand(a,d);return n.length>f?r({error:new i("The APDU command exceeds the maximum allowable size (255 bytes)")}):this.api.sendCommand(new c({message:n}))}_buildFullMessage(e,t){return new m().add8BitUIntToData(255).addAsciiStringToData("solana offchain").add8BitUIntToData(0).addBufferToData(new Uint8Array(32)).add8BitUIntToData(0).add8BitUIntToData(1).addBufferToData(t).add8BitUIntToData(e.length&255).add8BitUIntToData(e.length>>8&255).addBufferToData(e).build()}_buildApduCommand(e,t){const s=t.length*4,a=new m(e.length+1+1+s);return a.add8BitUIntToData(1),a.add8BitUIntToData(t.length),t.forEach(n=>{const u=new Uint8Array(4);new DataView(u.buffer).setUint32(0,n,!1),a.addBufferToData(u)}),a.addBufferToData(e),a.build()}}export{y as MAX_MESSAGE_LENGTH,U as SendSignMessageTask};
|
|
2
2
|
//# sourceMappingURL=SendSignMessageTask.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/task/SendSignMessageTask.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n APDU_MAX_PAYLOAD,\n ByteArrayBuilder,\n type CommandResult,\n CommandResultFactory,\n type InternalApi,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { DerivationPathUtils } from \"@ledgerhq/signer-utils\";\n\nimport { type Signature } from \"@api/index\";\nimport { SignOffChainMessageCommand } from \"@internal/app-binder/command/SignOffChainMessageCommand\";\nimport { type SolanaAppErrorCodes } from \"@internal/app-binder/command/utils/SolanaApplicationErrors\";\n\nexport type SendSignMessageTaskArgs = {\n sendingData: Uint8Array;\n derivationPath: string;\n};\n\nexport type SendSignMessageTaskRunFunctionReturn = Promise<\n CommandResult<Signature, SolanaAppErrorCodes>\n>;\n\nexport class SendSignMessageTask {\n constructor(\n private api: InternalApi,\n private args: SendSignMessageTaskArgs,\n ) {}\n\n async run(): SendSignMessageTaskRunFunctionReturn {\n const { sendingData, derivationPath } = this.args;\n\n
|
|
5
|
-
"mappings": "AAAA,OACE,oBAAAA,EACA,oBAAAC,EAEA,wBAAAC,EAEA,0BAAAC,MACK,kCACP,OAAS,uBAAAC,MAA2B,
|
|
6
|
-
"names": ["APDU_MAX_PAYLOAD", "ByteArrayBuilder", "CommandResultFactory", "InvalidStatusWordError", "DerivationPathUtils", "SignOffChainMessageCommand", "SendSignMessageTask", "api", "args", "sendingData", "derivationPath", "
|
|
4
|
+
"sourcesContent": ["import {\n APDU_MAX_PAYLOAD,\n ByteArrayBuilder,\n type CommandResult,\n CommandResultFactory,\n type InternalApi,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { DerivationPathUtils } from \"@ledgerhq/signer-utils\";\nimport bs58 from \"bs58\";\n\nimport { type Signature } from \"@api/index\";\nimport { GetPubKeyCommand } from \"@internal/app-binder/command/GetPubKeyCommand\";\nimport { SignOffChainMessageCommand } from \"@internal/app-binder/command/SignOffChainMessageCommand\";\nimport { type SolanaAppErrorCodes } from \"@internal/app-binder/command/utils/SolanaApplicationErrors\";\n\nexport type SendSignMessageTaskArgs = {\n sendingData: Uint8Array;\n derivationPath: string;\n};\n\nexport type SendSignMessageTaskRunFunctionReturn = Promise<\n CommandResult<Signature, SolanaAppErrorCodes>\n>;\n\nexport const MAX_MESSAGE_LENGTH = 0xffff;\n\nexport class SendSignMessageTask {\n constructor(\n private api: InternalApi,\n private args: SendSignMessageTaskArgs,\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\n if (sendingData.length > MAX_MESSAGE_LENGTH) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n `Message too long: ${sendingData.length} bytes (max is 65535)`,\n ),\n });\n }\n\n const pathIndexes = DerivationPathUtils.splitPath(derivationPath);\n\n const pubkeyResult = await this.api.sendCommand(\n new GetPubKeyCommand({ derivationPath, checkOnDevice: false }),\n );\n\n if (!(\"data\" in pubkeyResult)) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n \"Error getting public key from device\",\n ),\n });\n }\n\n const signerPubkey = bs58.decode(pubkeyResult.data);\n const fullMessage = this._buildFullMessage(sendingData, signerPubkey);\n const commandBuffer = this._buildApduCommand(fullMessage, pathIndexes);\n\n if (commandBuffer.length > APDU_MAX_PAYLOAD) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n \"The APDU command exceeds the maximum allowable size (255 bytes)\",\n ),\n });\n }\n\n return this.api.sendCommand(\n new SignOffChainMessageCommand({ message: commandBuffer }),\n );\n }\n\n /**\n * builds the serialised off-chain message header and body\n */\n private _buildFullMessage(\n sendingData: Uint8Array,\n signerPubkey: Uint8Array,\n ): Uint8Array {\n return (\n new ByteArrayBuilder()\n // 0xFF + prefix\n .add8BitUIntToData(0xff)\n .addAsciiStringToData(\"solana offchain\")\n // version = 0\n .add8BitUIntToData(0)\n // domain = 32 zeros\n .addBufferToData(new Uint8Array(32))\n // format = 0\n .add8BitUIntToData(0)\n // signer count = 1\n .add8BitUIntToData(1)\n // signer pubkey (32 bytes)\n .addBufferToData(signerPubkey)\n // message length (2 bytes, little endian)\n .add8BitUIntToData(sendingData.length & 0xff)\n .add8BitUIntToData((sendingData.length >> 8) & 0xff)\n // message body\n .addBufferToData(sendingData)\n .build()\n );\n }\n\n /**\n * builds the APDU command to send to the device\n */\n private _buildApduCommand(\n fullMessage: Uint8Array,\n paths: number[],\n ): Uint8Array {\n const numberOfSigners = 1;\n const derivationCount = 1;\n const pathBytes = paths.length * 4;\n const builder = new ByteArrayBuilder(\n fullMessage.length + numberOfSigners + derivationCount + pathBytes,\n );\n\n // number of signers\n builder.add8BitUIntToData(numberOfSigners);\n // number of BIP32 derivations\n builder.add8BitUIntToData(paths.length);\n // each derivation index\n paths.forEach((idx) => {\n const buf = new Uint8Array(4);\n new DataView(buf.buffer).setUint32(0, idx, false);\n builder.addBufferToData(buf);\n });\n // serialised off-chain message\n builder.addBufferToData(fullMessage);\n\n return builder.build();\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OACE,oBAAAA,EACA,oBAAAC,EAEA,wBAAAC,EAEA,0BAAAC,MACK,kCACP,OAAS,uBAAAC,MAA2B,yBACpC,OAAOC,MAAU,OAGjB,OAAS,oBAAAC,MAAwB,gDACjC,OAAS,8BAAAC,MAAkC,0DAYpC,MAAMC,EAAqB,MAE3B,MAAMC,CAAoB,CAC/B,YACUC,EACAC,EACR,CAFQ,SAAAD,EACA,UAAAC,CACP,CAEH,MAAM,KAA4C,CAChD,KAAM,CAAE,YAAAC,EAAa,eAAAC,CAAe,EAAI,KAAK,KAE7C,GAAID,EAAY,SAAW,EACzB,OAAOV,EAAqB,CAC1B,MAAO,IAAIC,EAAuB,yBAAyB,CAC7D,CAAC,EAGH,GAAIS,EAAY,OAASJ,EACvB,OAAON,EAAqB,CAC1B,MAAO,IAAIC,EACT,qBAAqBS,EAAY,MAAM,uBACzC,CACF,CAAC,EAGH,MAAME,EAAcV,EAAoB,UAAUS,CAAc,EAE1DE,EAAe,MAAM,KAAK,IAAI,YAClC,IAAIT,EAAiB,CAAE,eAAAO,EAAgB,cAAe,EAAM,CAAC,CAC/D,EAEA,GAAI,EAAE,SAAUE,GACd,OAAOb,EAAqB,CAC1B,MAAO,IAAIC,EACT,sCACF,CACF,CAAC,EAGH,MAAMa,EAAeX,EAAK,OAAOU,EAAa,IAAI,EAC5CE,EAAc,KAAK,kBAAkBL,EAAaI,CAAY,EAC9DE,EAAgB,KAAK,kBAAkBD,EAAaH,CAAW,EAErE,OAAII,EAAc,OAASlB,EAClBE,EAAqB,CAC1B,MAAO,IAAIC,EACT,iEACF,CACF,CAAC,EAGI,KAAK,IAAI,YACd,IAAII,EAA2B,CAAE,QAASW,CAAc,CAAC,CAC3D,CACF,CAKQ,kBACNN,EACAI,EACY,CACZ,OACE,IAAIf,EAAiB,EAElB,kBAAkB,GAAI,EACtB,qBAAqB,iBAAiB,EAEtC,kBAAkB,CAAC,EAEnB,gBAAgB,IAAI,WAAW,EAAE,CAAC,EAElC,kBAAkB,CAAC,EAEnB,kBAAkB,CAAC,EAEnB,gBAAgBe,CAAY,EAE5B,kBAAkBJ,EAAY,OAAS,GAAI,EAC3C,kBAAmBA,EAAY,QAAU,EAAK,GAAI,EAElD,gBAAgBA,CAAW,EAC3B,MAAM,CAEb,CAKQ,kBACNK,EACAE,EACY,CAGZ,MAAMC,EAAYD,EAAM,OAAS,EAC3BE,EAAU,IAAIpB,EAClBgB,EAAY,OAAS,EAAkB,EAAkBG,CAC3D,EAGA,OAAAC,EAAQ,kBAAkB,CAAe,EAEzCA,EAAQ,kBAAkBF,EAAM,MAAM,EAEtCA,EAAM,QAASG,GAAQ,CACrB,MAAMC,EAAM,IAAI,WAAW,CAAC,EAC5B,IAAI,SAASA,EAAI,MAAM,EAAE,UAAU,EAAGD,EAAK,EAAK,EAChDD,EAAQ,gBAAgBE,CAAG,CAC7B,CAAC,EAEDF,EAAQ,gBAAgBJ,CAAW,EAE5BI,EAAQ,MAAM,CACvB,CACF",
|
|
6
|
+
"names": ["APDU_MAX_PAYLOAD", "ByteArrayBuilder", "CommandResultFactory", "InvalidStatusWordError", "DerivationPathUtils", "bs58", "GetPubKeyCommand", "SignOffChainMessageCommand", "MAX_MESSAGE_LENGTH", "SendSignMessageTask", "api", "args", "sendingData", "derivationPath", "pathIndexes", "pubkeyResult", "signerPubkey", "fullMessage", "commandBuffer", "paths", "pathBytes", "builder", "idx", "buf"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{CommandResultFactory as
|
|
1
|
+
import{CommandResultFactory as o,InvalidStatusWordError as c}from"@ledgerhq/device-management-kit";import x from"bs58";import{makeDeviceActionInternalApiMock as h}from"../../app-binder/device-action/__test-utils__/makeInternalApi";import{MAX_MESSAGE_LENGTH as w,SendSignMessageTask as t}from"../../app-binder/task/SendSignMessageTask";const r="44'/501'/0'/0'",u=new Uint8Array(32).fill(0),m=x.encode(u),i=new Uint8Array([240,202,204,26]);describe("SendSignMessageTask",()=>{const e=h();beforeEach(()=>{vi.resetAllMocks()}),describe("run()",()=>{it("should error on empty message before any device call",async()=>{const a={derivationPath:r,sendingData:new Uint8Array([])},n=await new t(e,a).run();expect(e.sendCommand).toHaveBeenCalledTimes(0),expect(n.error).toEqual(new c("Message cannot be empty"))}),it("should return error if GET_PUBKEY fails",async()=>{e.sendCommand.mockResolvedValueOnce(o({error:new c("pubkey error")}));const a={derivationPath:r,sendingData:i},n=await new t(e,a).run();expect(e.sendCommand).toHaveBeenCalledTimes(1),expect(n.error).toEqual(new c("Error getting public key from device"))}),it("should return error if SignOffChainMessageCommand fails",async()=>{e.sendCommand.mockResolvedValueOnce(o({data:m})).mockResolvedValueOnce(o({error:new c("no signature returned")}));const a={derivationPath:r,sendingData:i},n=await new t(e,a).run();expect(e.sendCommand).toHaveBeenCalledTimes(2),expect(n.error).toEqual(new c("no signature returned"))}),it("should return success when signing succeeds",async()=>{const a=new Uint8Array([240,202,204,26]);e.sendCommand.mockResolvedValueOnce(o({data:m})).mockResolvedValueOnce(o({data:a}));const n={derivationPath:r,sendingData:i},s=await new t(e,n).run();expect(e.sendCommand).toHaveBeenCalledTimes(2),expect(s.data).toEqual(a)}),it("should reject invalid derivation path",async()=>{const a={derivationPath:"not/a/path",sendingData:i};await expect(new t(e,a).run()).rejects.toThrow()}),it("should correctly build APDU command lengths",()=>{const a=new t(e,{derivationPath:r,sendingData:i}),n=a._buildFullMessage(i,u),s=[-2147483604,-2147483147,-2147483648,0],l=a._buildApduCommand(n,s),d=2+s.length*4+n.length;expect(l.length).toBe(d)}),it("should handle maximum allowed message length",async()=>{const l=new Uint8Array(152).fill(1),d=new Uint8Array([240,202,204,26]);e.sendCommand.mockResolvedValueOnce(o({data:m})).mockResolvedValueOnce(o({data:d}));const g=await new t(e,{derivationPath:r,sendingData:l}).run();expect(e.sendCommand).toHaveBeenCalledTimes(2),expect(g.data).toEqual(d)}),it("should error on message exceeding 16-bit length (65535)",async()=>{const a=new Uint8Array(w+1).fill(170),n={derivationPath:r,sendingData:a},s=await new t(e,n).run();expect(e.sendCommand).toHaveBeenCalledTimes(0),expect(s.error).toEqual(new c(`Message too long: ${a.length} bytes (max is 65535)`))})})});
|
|
2
2
|
//# 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": ["
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["CommandResultFactory", "InvalidStatusWordError", "makeDeviceActionInternalApiMock", "SendSignMessageTask", "DERIVATION_PATH", "
|
|
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": "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",
|
|
6
|
+
"names": ["CommandResultFactory", "InvalidStatusWordError", "bs58", "makeDeviceActionInternalApiMock", "MAX_MESSAGE_LENGTH", "SendSignMessageTask", "DERIVATION_PATH", "PUBKEY", "PUBKEY_BASE58", "MESSAGE", "apiMock", "args", "result", "mockSig", "task", "fullMsg", "paths", "apdu", "expectedLen", "bigMsg", "tooBig"]
|
|
7
7
|
}
|
package/lib/esm/internal/di.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Container as
|
|
1
|
+
import{Container as r}from"inversify";import{appBinderModuleFactory as a}from"./app-binder/di/appBinderModule";import{useCasesModuleFactory as s}from"./use-cases/di/useCasesModule";import{externalTypes as o}from"./externalTypes";const l=({dmk:t,sessionId:n,contextModule:i})=>{const e=new r;return e.bind(o.Dmk).toConstantValue(t),e.bind(o.SessionId).toConstantValue(n),e.bind(o.ContextModule).toConstantValue(i),e.loadSync(a(),s()),e};export{l as 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 {\n type DeviceManagementKit,\n type DeviceSessionId,\n} from \"@ledgerhq/device-management-kit\";\nimport { Container } from \"inversify\";\n\
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["Container", "appBinderModuleFactory", "useCasesModuleFactory", "externalTypes", "makeContainer", "dmk", "sessionId", "container"]
|
|
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": "AAKA,OAAS,aAAAA,MAAiB,YAE1B,OAAS,0BAAAC,MAA8B,kCACvC,OAAS,yBAAAC,MAA6B,gCACtC,OAAS,iBAAAC,MAAqB,kBAOvB,MAAMC,EAAgB,CAAC,CAC5B,IAAAC,EACA,UAAAC,EACA,cAAAC,CACF,IAA0B,CACxB,MAAMC,EAAY,IAAIR,EAEtB,OAAAQ,EAAU,KAA0BL,EAAc,GAAG,EAAE,gBAAgBE,CAAG,EAC1EG,EACG,KAAsBL,EAAc,SAAS,EAC7C,gBAAgBG,CAAS,EAC5BE,EACG,KAAoBL,EAAc,aAAa,EAC/C,gBAAgBI,CAAa,EAEhCC,EAAU,SAASP,EAAuB,EAAGC,EAAsB,CAAC,EAE7DM,CACT",
|
|
6
|
+
"names": ["Container", "appBinderModuleFactory", "useCasesModuleFactory", "externalTypes", "makeContainer", "dmk", "sessionId", "contextModule", "container"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const o={Dmk:Symbol.for("Dmk"),SessionId:Symbol.for("SessionId")};export{o as externalTypes};
|
|
1
|
+
const o={Dmk:Symbol.for("Dmk"),SessionId:Symbol.for("SessionId"),ContextModule:Symbol.for("ContextModule")};export{o as 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};\n"],
|
|
5
|
-
"mappings": "AAAO,MAAMA,EAAgB,CAC3B,IAAK,OAAO,IAAI,KAAK,EACrB,UAAW,OAAO,IAAI,WAAW,
|
|
4
|
+
"sourcesContent": ["export const externalTypes = {\n Dmk: Symbol.for(\"Dmk\"),\n SessionId: Symbol.for(\"SessionId\"),\n ContextModule: Symbol.for(\"ContextModule\"),\n};\n"],
|
|
5
|
+
"mappings": "AAAO,MAAMA,EAAgB,CAC3B,IAAK,OAAO,IAAI,KAAK,EACrB,UAAW,OAAO,IAAI,WAAW,EACjC,cAAe,OAAO,IAAI,eAAe,CAC3C",
|
|
6
6
|
"names": ["externalTypes"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var a=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var d=(
|
|
1
|
+
var a=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var d=(n,p,e,i)=>{for(var r=i>1?void 0:i?s(p,e):p,o=n.length-1,c;o>=0;o--)(c=n[o])&&(r=(i?c(p,e,r):c(r))||r);return i&&r&&a(p,e,r),r},m=(n,p)=>(e,i)=>p(e,i,n);import{inject as A,injectable as f}from"inversify";import{appBinderTypes as l}from"../../app-binder/di/appBinderTypes";let t=class{constructor(p){this.appBinder=p}execute(p,e){return this.appBinder.getAddress({derivationPath:p,checkOnDevice:e?.checkOnDevice??!1,skipOpenApp:e?.skipOpenApp??!1})}};t=d([f(),m(0,A(l.AppBinder))],t);export{t as GetAddressUseCase};
|
|
2
2
|
//# sourceMappingURL=GetAddressUseCase.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/use-cases/address/GetAddressUseCase.ts"],
|
|
4
|
-
"sourcesContent": ["import { inject, injectable } from \"inversify\";\n\nimport { type GetAddressDAReturnType } from \"@api/app-binder/GetAddressDeviceActionTypes\";\nimport { type AddressOptions } from \"@api/model/AddressOption\";\nimport { appBinderTypes } from \"@internal/app-binder/di/appBinderTypes\";\nimport { SolanaAppBinder } from \"@internal/app-binder/SolanaAppBinder\";\n\n@injectable()\nexport class GetAddressUseCase {\n constructor(\n @inject(appBinderTypes.AppBinder) private appBinder: SolanaAppBinder,\n ) {}\n\n execute(\n derivationPath: string,\n options?: AddressOptions,\n ): GetAddressDAReturnType {\n return this.appBinder.getAddress({\n derivationPath,\n checkOnDevice: options?.checkOnDevice ?? false,\n });\n }\n}\n"],
|
|
5
|
-
"mappings": "iOAAA,OAAS,UAAAA,EAAQ,cAAAC,MAAkB,YAInC,OAAS,kBAAAC,MAAsB,yCAIxB,IAAMC,EAAN,KAAwB,CAC7B,YAC4CC,EAC1C,CAD0C,eAAAA,CACzC,CAEH,QACEC,EACAC,EACwB,CACxB,OAAO,KAAK,UAAU,WAAW,CAC/B,eAAAD,EACA,cAAeC,GAAS,eAAiB,
|
|
4
|
+
"sourcesContent": ["import { inject, injectable } from \"inversify\";\n\nimport { type GetAddressDAReturnType } from \"@api/app-binder/GetAddressDeviceActionTypes\";\nimport { type AddressOptions } from \"@api/model/AddressOption\";\nimport { appBinderTypes } from \"@internal/app-binder/di/appBinderTypes\";\nimport { SolanaAppBinder } from \"@internal/app-binder/SolanaAppBinder\";\n\n@injectable()\nexport class GetAddressUseCase {\n constructor(\n @inject(appBinderTypes.AppBinder) private appBinder: SolanaAppBinder,\n ) {}\n\n execute(\n derivationPath: string,\n options?: AddressOptions,\n ): GetAddressDAReturnType {\n return this.appBinder.getAddress({\n derivationPath,\n checkOnDevice: options?.checkOnDevice ?? false,\n skipOpenApp: options?.skipOpenApp ?? false,\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "iOAAA,OAAS,UAAAA,EAAQ,cAAAC,MAAkB,YAInC,OAAS,kBAAAC,MAAsB,yCAIxB,IAAMC,EAAN,KAAwB,CAC7B,YAC4CC,EAC1C,CAD0C,eAAAA,CACzC,CAEH,QACEC,EACAC,EACwB,CACxB,OAAO,KAAK,UAAU,WAAW,CAC/B,eAAAD,EACA,cAAeC,GAAS,eAAiB,GACzC,YAAaA,GAAS,aAAe,EACvC,CAAC,CACH,CACF,EAfaH,EAANI,EAAA,CADNC,EAAW,EAGPC,EAAA,EAAAC,EAAOC,EAAe,SAAS,IAFvBR",
|
|
6
6
|
"names": ["inject", "injectable", "appBinderTypes", "GetAddressUseCase", "appBinder", "derivationPath", "options", "__decorateClass", "injectable", "__decorateParam", "inject", "appBinderTypes"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{GetAddressUseCase as
|
|
1
|
+
import{GetAddressUseCase as p}from"./GetAddressUseCase";describe("GetAddressUseCase",()=>{const e="44'/501'",s="some-address",t=vi.fn().mockReturnValue(s),r={getAddress:t};let d;beforeEach(()=>{vi.clearAllMocks(),d=new p(r)}),it("should return the address from the appBinder's getAddress method",()=>{const o=d.execute(e,{checkOnDevice:!0,skipOpenApp:!0});expect(o).toEqual(s),expect(t).toHaveBeenCalledWith({derivationPath:e,checkOnDevice:!0,skipOpenApp:!0})}),it("should return the address from the appBinder's getAddress method with default options",()=>{const n=d.execute(e);expect(n).toEqual(s),expect(t).toHaveBeenCalledWith({derivationPath:e,checkOnDevice:!1,skipOpenApp:!1})})});
|
|
2
2
|
//# sourceMappingURL=GetAddressUseCase.test.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/use-cases/address/GetAddressUseCase.test.ts"],
|
|
4
|
-
"sourcesContent": ["import { type SolanaAppBinder } from \"@internal/app-binder/SolanaAppBinder\";\n\nimport { GetAddressUseCase } from \"./GetAddressUseCase\";\n\ndescribe(\"GetAddressUseCase\", () => {\n const derivationPath = \"44'/501'\";\n const address = \"some-address\";\n const getAddressMock = vi.fn().mockReturnValue(address);\n const appBinderMock = {\n getAddress: getAddressMock,\n } as unknown as SolanaAppBinder;\n let useCase: GetAddressUseCase;\n\n beforeEach(() => {\n vi.clearAllMocks();\n useCase = new GetAddressUseCase(appBinderMock);\n });\n\n it(\"should return the address from the appBinder's getAddress method\", () => {\n // GIVEN\n const checkOnDevice = true;\n\n // WHEN\n const result = useCase.execute(derivationPath, {
|
|
5
|
-
"mappings": "AAEA,OAAS,qBAAAA,MAAyB,sBAElC,SAAS,oBAAqB,IAAM,CAClC,MAAMC,EAAiB,WACjBC,EAAU,eACVC,EAAiB,GAAG,GAAG,EAAE,gBAAgBD,CAAO,EAChDE,EAAgB,CACpB,WAAYD,CACd,EACA,IAAIE,EAEJ,WAAW,IAAM,CACf,GAAG,cAAc,EACjBA,EAAU,IAAIL,EAAkBI,CAAa,CAC/C,CAAC,EAED,GAAG,mEAAoE,IAAM,
|
|
4
|
+
"sourcesContent": ["import { type SolanaAppBinder } from \"@internal/app-binder/SolanaAppBinder\";\n\nimport { GetAddressUseCase } from \"./GetAddressUseCase\";\n\ndescribe(\"GetAddressUseCase\", () => {\n const derivationPath = \"44'/501'\";\n const address = \"some-address\";\n const getAddressMock = vi.fn().mockReturnValue(address);\n const appBinderMock = {\n getAddress: getAddressMock,\n } as unknown as SolanaAppBinder;\n let useCase: GetAddressUseCase;\n\n beforeEach(() => {\n vi.clearAllMocks();\n useCase = new GetAddressUseCase(appBinderMock);\n });\n\n it(\"should return the address from the appBinder's getAddress method\", () => {\n // GIVEN\n const checkOnDevice = true;\n const skipOpenApp = true;\n\n // WHEN\n const result = useCase.execute(derivationPath, {\n checkOnDevice,\n skipOpenApp,\n });\n\n // THEN\n expect(result).toEqual(address);\n expect(getAddressMock).toHaveBeenCalledWith({\n derivationPath,\n checkOnDevice,\n skipOpenApp,\n });\n });\n\n it(\"should return the address from the appBinder's getAddress method with default options\", () => {\n // WHEN\n const result = useCase.execute(derivationPath);\n\n // THEN\n expect(result).toEqual(address);\n expect(getAddressMock).toHaveBeenCalledWith({\n derivationPath,\n checkOnDevice: false,\n skipOpenApp: false,\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "AAEA,OAAS,qBAAAA,MAAyB,sBAElC,SAAS,oBAAqB,IAAM,CAClC,MAAMC,EAAiB,WACjBC,EAAU,eACVC,EAAiB,GAAG,GAAG,EAAE,gBAAgBD,CAAO,EAChDE,EAAgB,CACpB,WAAYD,CACd,EACA,IAAIE,EAEJ,WAAW,IAAM,CACf,GAAG,cAAc,EACjBA,EAAU,IAAIL,EAAkBI,CAAa,CAC/C,CAAC,EAED,GAAG,mEAAoE,IAAM,CAM3E,MAAME,EAASD,EAAQ,QAAQJ,EAAgB,CAC7C,iBACA,cACF,CAAC,EAGD,OAAOK,CAAM,EAAE,QAAQJ,CAAO,EAC9B,OAAOC,CAAc,EAAE,qBAAqB,CAC1C,eAAAF,EACA,iBACA,cACF,CAAC,CACH,CAAC,EAED,GAAG,wFAAyF,IAAM,CAEhG,MAAMK,EAASD,EAAQ,QAAQJ,CAAc,EAG7C,OAAOK,CAAM,EAAE,QAAQJ,CAAO,EAC9B,OAAOC,CAAc,EAAE,qBAAqB,CAC1C,eAAAF,EACA,cAAe,GACf,YAAa,EACf,CAAC,CACH,CAAC,CACH,CAAC",
|
|
6
6
|
"names": ["GetAddressUseCase", "derivationPath", "address", "getAddressMock", "appBinderMock", "useCase", "result"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{ContainerModule as o}from"inversify";import{GetAddressUseCase as
|
|
1
|
+
import{ContainerModule as o}from"inversify";import{GetAddressUseCase as a}from"../../use-cases/address/GetAddressUseCase";import{GetAppConfigurationUseCase as t}from"../../use-cases/app-configuration/GetAppConfigurationUseCase";import{useCasesTypes as s}from"../../use-cases/di/useCasesTypes";import{GenerateTransactionUseCase as r}from"../../use-cases/generateTransaction/GenerateTransactionUseCase";import{SignMessageUseCase as n}from"../../use-cases/message/SignMessageUseCase";import{SignTransactionUseCase as i}from"../../use-cases/transaction/SignTransactionUseCase";const u=()=>new o(({bind:e})=>{e(s.GetAddressUseCase).to(a),e(s.GetAppConfigurationUseCase).to(t),e(s.SignTransactionUseCase).to(i),e(s.SignMessageUseCase).to(n),e(s.GenerateTransactionUseCase).to(r)});export{u as useCasesModuleFactory};
|
|
2
2
|
//# sourceMappingURL=useCasesModule.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/use-cases/di/useCasesModule.ts"],
|
|
4
|
-
"sourcesContent": ["import { ContainerModule } from \"inversify\";\n\nimport { GetAddressUseCase } from \"@internal/use-cases/address/GetAddressUseCase\";\nimport { GetAppConfigurationUseCase } from \"@internal/use-cases/app-configuration/GetAppConfigurationUseCase\";\nimport { useCasesTypes } from \"@internal/use-cases/di/useCasesTypes\";\nimport { SignMessageUseCase } from \"@internal/use-cases/message/SignMessageUseCase\";\nimport { SignTransactionUseCase } from \"@internal/use-cases/transaction/SignTransactionUseCase\";\n\nexport const useCasesModuleFactory = () =>\n new ContainerModule(
|
|
5
|
-
"mappings": "AAAA,OAAS,mBAAAA,MAAuB,YAEhC,OAAS,qBAAAC,MAAyB,gDAClC,OAAS,8BAAAC,MAAkC,mEAC3C,OAAS,iBAAAC,MAAqB,uCAC9B,OAAS,sBAAAC,MAA0B,iDACnC,OAAS,0BAAAC,MAA8B,yDAEhC,MAAMC,EAAwB,IACnC,
|
|
6
|
-
"names": ["ContainerModule", "GetAddressUseCase", "GetAppConfigurationUseCase", "useCasesTypes", "SignMessageUseCase", "SignTransactionUseCase", "useCasesModuleFactory", "bind"
|
|
4
|
+
"sourcesContent": ["import { ContainerModule } from \"inversify\";\n\nimport { GetAddressUseCase } from \"@internal/use-cases/address/GetAddressUseCase\";\nimport { GetAppConfigurationUseCase } from \"@internal/use-cases/app-configuration/GetAppConfigurationUseCase\";\nimport { useCasesTypes } from \"@internal/use-cases/di/useCasesTypes\";\nimport { GenerateTransactionUseCase } from \"@internal/use-cases/generateTransaction/GenerateTransactionUseCase\";\nimport { SignMessageUseCase } from \"@internal/use-cases/message/SignMessageUseCase\";\nimport { SignTransactionUseCase } from \"@internal/use-cases/transaction/SignTransactionUseCase\";\n\nexport const useCasesModuleFactory = () =>\n new ContainerModule(({ bind }) => {\n bind(useCasesTypes.GetAddressUseCase).to(GetAddressUseCase);\n bind(useCasesTypes.GetAppConfigurationUseCase).to(\n GetAppConfigurationUseCase,\n );\n bind(useCasesTypes.SignTransactionUseCase).to(SignTransactionUseCase);\n bind(useCasesTypes.SignMessageUseCase).to(SignMessageUseCase);\n bind(useCasesTypes.GenerateTransactionUseCase).to(\n GenerateTransactionUseCase,\n );\n });\n"],
|
|
5
|
+
"mappings": "AAAA,OAAS,mBAAAA,MAAuB,YAEhC,OAAS,qBAAAC,MAAyB,gDAClC,OAAS,8BAAAC,MAAkC,mEAC3C,OAAS,iBAAAC,MAAqB,uCAC9B,OAAS,8BAAAC,MAAkC,qEAC3C,OAAS,sBAAAC,MAA0B,iDACnC,OAAS,0BAAAC,MAA8B,yDAEhC,MAAMC,EAAwB,IACnC,IAAIP,EAAgB,CAAC,CAAE,KAAAQ,CAAK,IAAM,CAChCA,EAAKL,EAAc,iBAAiB,EAAE,GAAGF,CAAiB,EAC1DO,EAAKL,EAAc,0BAA0B,EAAE,GAC7CD,CACF,EACAM,EAAKL,EAAc,sBAAsB,EAAE,GAAGG,CAAsB,EACpEE,EAAKL,EAAc,kBAAkB,EAAE,GAAGE,CAAkB,EAC5DG,EAAKL,EAAc,0BAA0B,EAAE,GAC7CC,CACF,CACF,CAAC",
|
|
6
|
+
"names": ["ContainerModule", "GetAddressUseCase", "GetAppConfigurationUseCase", "useCasesTypes", "GenerateTransactionUseCase", "SignMessageUseCase", "SignTransactionUseCase", "useCasesModuleFactory", "bind"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Container as o}from"inversify";import{useCasesModuleFactory as
|
|
1
|
+
import{Container as o}from"inversify";import{useCasesModuleFactory as n}from"./useCasesModule";import{useCasesTypes as s}from"./useCasesTypes";describe("useCasesModuleFactory",()=>{describe("Default",()=>{let e,t;beforeEach(()=>{t=n(),e=new o,e.loadSync(t)}),it("should return the address module",()=>{expect(t).toBeDefined()}),it("should bind GetAddressUseCase",()=>{expect(e.isBound(s.GetAddressUseCase)).toBeTruthy()}),it("should bind GetAppConfigurationUseCase",()=>{expect(e.isBound(s.GetAppConfigurationUseCase)).toBeTruthy()}),it("should bind SignTransactionUseCase",()=>{expect(e.isBound(s.SignTransactionUseCase)).toBeTruthy()}),it("should bind SignMessageUseCase",()=>{expect(e.isBound(s.SignMessageUseCase)).toBeTruthy()}),it("should bind GenerateTransactionUseCase",()=>{expect(e.isBound(s.GenerateTransactionUseCase)).toBeTruthy()})})});
|
|
2
2
|
//# sourceMappingURL=useCasesModule.test.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/use-cases/di/useCasesModule.test.ts"],
|
|
4
|
-
"sourcesContent": ["import { Container } from \"inversify\";\n\nimport { useCasesModuleFactory } from \"./useCasesModule\";\nimport { useCasesTypes } from \"./useCasesTypes\";\n\ndescribe(\"useCasesModuleFactory\", () => {\n describe(\"Default\", () => {\n let container: Container;\n let mod: ReturnType<typeof useCasesModuleFactory>;\n beforeEach(() => {\n mod = useCasesModuleFactory();\n container = new Container();\n container.
|
|
5
|
-
"mappings": "AAAA,OAAS,aAAAA,MAAiB,YAE1B,OAAS,yBAAAC,MAA6B,mBACtC,OAAS,iBAAAC,MAAqB,kBAE9B,SAAS,wBAAyB,IAAM,CACtC,SAAS,UAAW,IAAM,CACxB,IAAIC,EACAC,EACJ,WAAW,IAAM,CACfA,EAAMH,EAAsB,EAC5BE,EAAY,IAAIH,EAChBG,EAAU,
|
|
4
|
+
"sourcesContent": ["import { Container } from \"inversify\";\n\nimport { useCasesModuleFactory } from \"./useCasesModule\";\nimport { useCasesTypes } from \"./useCasesTypes\";\n\ndescribe(\"useCasesModuleFactory\", () => {\n describe(\"Default\", () => {\n let container: Container;\n let mod: ReturnType<typeof useCasesModuleFactory>;\n beforeEach(() => {\n mod = useCasesModuleFactory();\n container = new Container();\n container.loadSync(mod);\n });\n\n it(\"should return the address module\", () => {\n expect(mod).toBeDefined();\n });\n\n it(\"should bind GetAddressUseCase\", () => {\n expect(container.isBound(useCasesTypes.GetAddressUseCase)).toBeTruthy();\n });\n\n it(\"should bind GetAppConfigurationUseCase\", () => {\n expect(\n container.isBound(useCasesTypes.GetAppConfigurationUseCase),\n ).toBeTruthy();\n });\n\n it(\"should bind SignTransactionUseCase\", () => {\n expect(\n container.isBound(useCasesTypes.SignTransactionUseCase),\n ).toBeTruthy();\n });\n\n it(\"should bind SignMessageUseCase\", () => {\n expect(container.isBound(useCasesTypes.SignMessageUseCase)).toBeTruthy();\n });\n\n it(\"should bind GenerateTransactionUseCase\", () => {\n expect(\n container.isBound(useCasesTypes.GenerateTransactionUseCase),\n ).toBeTruthy();\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "AAAA,OAAS,aAAAA,MAAiB,YAE1B,OAAS,yBAAAC,MAA6B,mBACtC,OAAS,iBAAAC,MAAqB,kBAE9B,SAAS,wBAAyB,IAAM,CACtC,SAAS,UAAW,IAAM,CACxB,IAAIC,EACAC,EACJ,WAAW,IAAM,CACfA,EAAMH,EAAsB,EAC5BE,EAAY,IAAIH,EAChBG,EAAU,SAASC,CAAG,CACxB,CAAC,EAED,GAAG,mCAAoC,IAAM,CAC3C,OAAOA,CAAG,EAAE,YAAY,CAC1B,CAAC,EAED,GAAG,gCAAiC,IAAM,CACxC,OAAOD,EAAU,QAAQD,EAAc,iBAAiB,CAAC,EAAE,WAAW,CACxE,CAAC,EAED,GAAG,yCAA0C,IAAM,CACjD,OACEC,EAAU,QAAQD,EAAc,0BAA0B,CAC5D,EAAE,WAAW,CACf,CAAC,EAED,GAAG,qCAAsC,IAAM,CAC7C,OACEC,EAAU,QAAQD,EAAc,sBAAsB,CACxD,EAAE,WAAW,CACf,CAAC,EAED,GAAG,iCAAkC,IAAM,CACzC,OAAOC,EAAU,QAAQD,EAAc,kBAAkB,CAAC,EAAE,WAAW,CACzE,CAAC,EAED,GAAG,yCAA0C,IAAM,CACjD,OACEC,EAAU,QAAQD,EAAc,0BAA0B,CAC5D,EAAE,WAAW,CACf,CAAC,CACH,CAAC,CACH,CAAC",
|
|
6
6
|
"names": ["Container", "useCasesModuleFactory", "useCasesTypes", "container", "mod"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const
|
|
1
|
+
const e={GetAddressUseCase:Symbol.for("GetAddressUseCase"),GetAppConfigurationUseCase:Symbol.for("GetAppConfigurationUseCase"),SignTransactionUseCase:Symbol.for("SignTransactionUseCase"),GenerateTransactionUseCase:Symbol.for("GenerateTransactionUseCase"),SignMessageUseCase:Symbol.for("SignMessageUseCase")};export{e as useCasesTypes};
|
|
2
2
|
//# sourceMappingURL=useCasesTypes.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/use-cases/di/useCasesTypes.ts"],
|
|
4
|
-
"sourcesContent": ["export const useCasesTypes = {\n GetAddressUseCase: Symbol.for(\"GetAddressUseCase\"),\n GetAppConfigurationUseCase: Symbol.for(\"GetAppConfigurationUseCase\"),\n SignTransactionUseCase: Symbol.for(\"SignTransactionUseCase\"),\n SignMessageUseCase: Symbol.for(\"SignMessageUseCase\"),\n};\n"],
|
|
5
|
-
"mappings": "AAAO,MAAMA,EAAgB,CAC3B,kBAAmB,OAAO,IAAI,mBAAmB,EACjD,2BAA4B,OAAO,IAAI,4BAA4B,EACnE,uBAAwB,OAAO,IAAI,wBAAwB,EAC3D,mBAAoB,OAAO,IAAI,oBAAoB,CACrD",
|
|
4
|
+
"sourcesContent": ["export const useCasesTypes = {\n GetAddressUseCase: Symbol.for(\"GetAddressUseCase\"),\n GetAppConfigurationUseCase: Symbol.for(\"GetAppConfigurationUseCase\"),\n SignTransactionUseCase: Symbol.for(\"SignTransactionUseCase\"),\n GenerateTransactionUseCase: Symbol.for(\"GenerateTransactionUseCase\"),\n SignMessageUseCase: Symbol.for(\"SignMessageUseCase\"),\n};\n"],
|
|
5
|
+
"mappings": "AAAO,MAAMA,EAAgB,CAC3B,kBAAmB,OAAO,IAAI,mBAAmB,EACjD,2BAA4B,OAAO,IAAI,4BAA4B,EACnE,uBAAwB,OAAO,IAAI,wBAAwB,EAC3D,2BAA4B,OAAO,IAAI,4BAA4B,EACnE,mBAAoB,OAAO,IAAI,oBAAoB,CACrD",
|
|
6
6
|
"names": ["useCasesTypes"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var c=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var m=(i,p,r,n)=>{for(var e=n>1?void 0:n?d(p,r):p,o=i.length-1,a;o>=0;o--)(a=i[o])&&(e=(n?a(p,r,e):a(e))||e);return n&&e&&c(p,r,e),e},A=(i,p)=>(r,n)=>p(r,n,i);import{inject as l,injectable as B}from"inversify";import{appBinderTypes as f}from"../../app-binder/di/appBinderTypes";let t=class{constructor(p){this.appBinder=p}execute(p,r){return this.appBinder.generateTransaction({derivationPath:p,skipOpenApp:r?.skipOpenApp??!1})}};t=m([B(),A(0,l(f.AppBinder))],t);export{t as GenerateTransactionUseCase};
|
|
2
|
+
//# sourceMappingURL=GenerateTransactionUseCase.js.map
|