@ledgerhq/device-signer-kit-solana 0.0.0-signer-eth-plugin-fix-20250331141239 → 0.0.0-transactionInspector-resolutionObj-20250916095320
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/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/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 -2
- 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 +11 -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 +12 -3
- package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts.map +1 -1
- package/lib/types/api/index.d.ts +3 -0
- 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 +7 -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 +13 -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 +15 -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 +32 -0
- package/lib/types/internal/app-binder/services/TransactionInspector.d.ts.map +1 -0
- package/lib/types/internal/app-binder/services/utils/transactionDecoders.d.ts +25 -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 +4 -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 +20 -15
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/di/appBinderModule.test.ts"],
|
|
4
|
-
"sourcesContent": ["import { Container } from \"inversify\";\n\nimport { appBinderModuleFactory } from \"./appBinderModule\";\n\ndescribe(\"appBinderModule\", () => {\n describe(\"Default\", () => {\n let container: Container;\n let mod: ReturnType<typeof appBinderModuleFactory>;\n beforeEach(() => {\n mod = appBinderModuleFactory();\n container = new Container();\n container.
|
|
5
|
-
"mappings": "aAAA,IAAAA,EAA0B,qBAE1BC,EAAuC,6BAEvC,SAAS,kBAAmB,IAAM,CAChC,SAAS,UAAW,IAAM,CACxB,IAAIC,EACAC,EACJ,WAAW,IAAM,CACfA,KAAM,0BAAuB,EAC7BD,EAAY,IAAI,YAChBA,EAAU,
|
|
4
|
+
"sourcesContent": ["import { Container } from \"inversify\";\n\nimport { appBinderModuleFactory } from \"./appBinderModule\";\n\ndescribe(\"appBinderModule\", () => {\n describe(\"Default\", () => {\n let container: Container;\n let mod: ReturnType<typeof appBinderModuleFactory>;\n beforeEach(() => {\n mod = appBinderModuleFactory();\n container = new Container();\n container.loadSync(mod);\n });\n\n it(\"should return appBinder module\", () => {\n expect(mod).toBeDefined();\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "aAAA,IAAAA,EAA0B,qBAE1BC,EAAuC,6BAEvC,SAAS,kBAAmB,IAAM,CAChC,SAAS,UAAW,IAAM,CACxB,IAAIC,EACAC,EACJ,WAAW,IAAM,CACfA,KAAM,0BAAuB,EAC7BD,EAAY,IAAI,YAChBA,EAAU,SAASC,CAAG,CACxB,CAAC,EAED,GAAG,iCAAkC,IAAM,CACzC,OAAOA,CAAG,EAAE,YAAY,CAC1B,CAAC,CACH,CAAC,CACH,CAAC",
|
|
6
6
|
"names": ["import_inversify", "import_appBinderModule", "container", "mod"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var r=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var h=(i,e)=>{for(var t in e)r(i,t,{get:e[t],enumerable:!0})},m=(i,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of a(e))!c.call(i,s)&&s!==t&&r(i,s,{get:()=>e[s],enumerable:!(n=l(e,s))||n.enumerable});return i};var f=i=>m(r({},"__esModule",{value:!0}),i);var v={};h(v,{ApplicationChecker:()=>u});module.exports=f(v);var p=require("@ledgerhq/device-management-kit"),o=require("semver");class u{isCompatible=!0;version="0.0.1";modelId;constructor(e,t){if(this.modelId=e.deviceModelId,e.sessionStateType===p.DeviceSessionStateType.Connected){this.isCompatible=!1;return}if(e.currentApp.name!=="Solana"){this.isCompatible=!1;return}e.currentApp.name==="Solana"?this.version=e.currentApp.version:this.version=t.version}withMinVersionInclusive(e){return(0,o.gte)(this.version,e)||(this.isCompatible=!1),this}withMinVersionExclusive(e){return(0,o.gt)(this.version,e)||(this.isCompatible=!1),this}excludeDeviceModel(e){return this.modelId===e&&(this.isCompatible=!1),this}check(){return this.isCompatible}}0&&(module.exports={ApplicationChecker});
|
|
2
|
+
//# sourceMappingURL=ApplicationChecker.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/internal/app-binder/services/ApplicationChecker.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n type DeviceModelId,\n type DeviceSessionState,\n DeviceSessionStateType,\n} from \"@ledgerhq/device-management-kit\";\nimport { gt, gte } from \"semver\";\n\nimport { type AppConfiguration } from \"@api/model/AppConfiguration\";\n\nexport class ApplicationChecker {\n private isCompatible: boolean = true;\n private version: string = \"0.0.1\";\n private modelId: DeviceModelId;\n\n constructor(deviceState: DeviceSessionState, appConfig: AppConfiguration) {\n this.modelId = deviceState.deviceModelId;\n\n // If device is not ready or app is unexpected, checker cannot be successful\n if (deviceState.sessionStateType === DeviceSessionStateType.Connected) {\n this.isCompatible = false;\n return;\n }\n if (deviceState.currentApp.name !== \"Solana\") {\n this.isCompatible = false;\n return;\n }\n if (deviceState.currentApp.name === \"Solana\") {\n this.version = deviceState.currentApp.version;\n } else {\n // Fallback on appConfig version if a plugin is running.\n // It won't contain release candidate suffix but it should be enough for that edge case.\n this.version = appConfig.version;\n }\n }\n\n withMinVersionInclusive(version: string): ApplicationChecker {\n if (!gte(this.version, version)) {\n this.isCompatible = false;\n }\n return this;\n }\n\n withMinVersionExclusive(version: string): ApplicationChecker {\n if (!gt(this.version, version)) {\n this.isCompatible = false;\n }\n return this;\n }\n\n excludeDeviceModel(modelId: DeviceModelId): ApplicationChecker {\n if (this.modelId === modelId) {\n this.isCompatible = false;\n }\n return this;\n }\n\n check(): boolean {\n return this.isCompatible;\n }\n}\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,wBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAIO,2CACPC,EAAwB,kBAIjB,MAAMH,CAAmB,CACtB,aAAwB,GACxB,QAAkB,QAClB,QAER,YAAYI,EAAiCC,EAA6B,CAIxE,GAHA,KAAK,QAAUD,EAAY,cAGvBA,EAAY,mBAAqB,yBAAuB,UAAW,CACrE,KAAK,aAAe,GACpB,MACF,CACA,GAAIA,EAAY,WAAW,OAAS,SAAU,CAC5C,KAAK,aAAe,GACpB,MACF,CACIA,EAAY,WAAW,OAAS,SAClC,KAAK,QAAUA,EAAY,WAAW,QAItC,KAAK,QAAUC,EAAU,OAE7B,CAEA,wBAAwBC,EAAqC,CAC3D,SAAK,OAAI,KAAK,QAASA,CAAO,IAC5B,KAAK,aAAe,IAEf,IACT,CAEA,wBAAwBA,EAAqC,CAC3D,SAAK,MAAG,KAAK,QAASA,CAAO,IAC3B,KAAK,aAAe,IAEf,IACT,CAEA,mBAAmBC,EAA4C,CAC7D,OAAI,KAAK,UAAYA,IACnB,KAAK,aAAe,IAEf,IACT,CAEA,OAAiB,CACf,OAAO,KAAK,YACd,CACF",
|
|
6
|
+
"names": ["ApplicationChecker_exports", "__export", "ApplicationChecker", "__toCommonJS", "import_device_management_kit", "import_semver", "deviceState", "appConfig", "version", "modelId"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var e=require("@ledgerhq/device-management-kit"),n=require("vitest"),l=require("../../../api/model/PublicKeyDisplayMode"),i=require("./ApplicationChecker");function c(t){return{version:t,blindSigningEnabled:!1,pubKeyDisplayMode:l.PublicKeyDisplayMode.SHORT}}(0,n.describe)("ApplicationChecker (Solana)",()=>{(0,n.it)("should pass check when on Solana app and in valid state",()=>{const t={sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Solana",version:"1.4.0"},deviceModelId:e.DeviceModelId.FLEX,isSecureConnectionAllowed:!1},s=c("1.4.0"),o=new i.ApplicationChecker(t,s).check();(0,n.expect)(o).toBe(!0)}),(0,n.it)("should reject if session state is Connected",()=>{const t={sessionStateType:e.DeviceSessionStateType.Connected,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Solana",version:"1.4.0"},deviceModelId:e.DeviceModelId.FLEX,isSecureConnectionAllowed:!1},s=c("1.4.0"),o=new i.ApplicationChecker(t,s).check();(0,n.expect)(o).toBe(!1)}),(0,n.it)("should reject if not Solana app",()=>{const t={sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.0.0"},deviceModelId:e.DeviceModelId.FLEX,isSecureConnectionAllowed:!1},s=c("1.0.0"),o=new i.ApplicationChecker(t,s).check();(0,n.expect)(o).toBe(!1)}),(0,n.it)("should pass with min version inclusive",()=>{const t={sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Solana",version:"1.4.0"},deviceModelId:e.DeviceModelId.FLEX,isSecureConnectionAllowed:!1},s=c("1.4.0"),o=new i.ApplicationChecker(t,s).withMinVersionInclusive("1.3.0").check();(0,n.expect)(o).toBe(!0)}),(0,n.it)("should reject with min version inclusive if version too low",()=>{const t={sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Solana",version:"1.3.0"},deviceModelId:e.DeviceModelId.FLEX,isSecureConnectionAllowed:!1},s=c("1.3.0"),o=new i.ApplicationChecker(t,s).withMinVersionInclusive("1.4.0").check();(0,n.expect)(o).toBe(!1)}),(0,n.it)("should pass with min version exclusive",()=>{const t={sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Solana",version:"1.4.0"},deviceModelId:e.DeviceModelId.FLEX,isSecureConnectionAllowed:!1},s=c("1.4.0"),o=new i.ApplicationChecker(t,s).withMinVersionExclusive("1.3.0").check();(0,n.expect)(o).toBe(!0)}),(0,n.it)("should reject with min version exclusive if equal",()=>{const t={sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Solana",version:"1.4.0"},deviceModelId:e.DeviceModelId.FLEX,isSecureConnectionAllowed:!1},s=c("1.4.0"),o=new i.ApplicationChecker(t,s).withMinVersionExclusive("1.4.0").check();(0,n.expect)(o).toBe(!1)}),(0,n.it)("should reject excluded device model",()=>{const t={sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Solana",version:"1.4.0"},deviceModelId:e.DeviceModelId.NANO_S,isSecureConnectionAllowed:!1},s=c("1.4.0"),o=new i.ApplicationChecker(t,s).excludeDeviceModel(e.DeviceModelId.NANO_S).check();(0,n.expect)(o).toBe(!1)}),(0,n.it)("should allow allowed device model",()=>{const t={sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Solana",version:"1.4.0"},deviceModelId:e.DeviceModelId.FLEX,isSecureConnectionAllowed:!1},s=c("1.4.0"),o=new i.ApplicationChecker(t,s).excludeDeviceModel(e.DeviceModelId.NANO_S).check();(0,n.expect)(o).toBe(!0)})});
|
|
2
|
+
//# sourceMappingURL=ApplicationChecker.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/internal/app-binder/services/ApplicationChecker.test.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n DeviceModelId,\n DeviceSessionStateType,\n DeviceStatus,\n} from \"@ledgerhq/device-management-kit\";\nimport { describe, expect, it } from \"vitest\";\n\nimport { type AppConfiguration } from \"@api/model/AppConfiguration\";\nimport { PublicKeyDisplayMode } from \"@api/model/PublicKeyDisplayMode\";\n\nimport { ApplicationChecker } from \"./ApplicationChecker\";\n\nfunction createAppConfig(version: string): AppConfiguration {\n return {\n version,\n blindSigningEnabled: false,\n pubKeyDisplayMode: PublicKeyDisplayMode.SHORT,\n };\n}\n\ndescribe(\"ApplicationChecker (Solana)\", () => {\n it(\"should pass check when on Solana app and in valid state\", () => {\n // given\n const state = {\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Solana\", version: \"1.4.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n };\n const config = createAppConfig(\"1.4.0\");\n\n // when\n const result = new ApplicationChecker(state, config).check();\n\n // then\n expect(result).toBe(true);\n });\n\n it(\"should reject if session state is Connected\", () => {\n // given\n const state = {\n sessionStateType: DeviceSessionStateType.Connected,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Solana\", version: \"1.4.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n };\n const config = createAppConfig(\"1.4.0\");\n\n // when\n const result = new ApplicationChecker(state, config).check();\n\n // then\n expect(result).toBe(false);\n });\n\n it(\"should reject if not Solana app\", () => {\n // given\n const state = {\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.0.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n };\n const config = createAppConfig(\"1.0.0\");\n // when\n const result = new ApplicationChecker(state, config).check();\n\n // then\n expect(result).toBe(false);\n });\n\n it(\"should pass with min version inclusive\", () => {\n // given\n const state = {\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Solana\", version: \"1.4.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n };\n const config = createAppConfig(\"1.4.0\");\n\n // when\n const result = new ApplicationChecker(state, config)\n .withMinVersionInclusive(\"1.3.0\")\n .check();\n\n // then\n expect(result).toBe(true);\n });\n\n it(\"should reject with min version inclusive if version too low\", () => {\n // given\n const state = {\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Solana\", version: \"1.3.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n };\n const config = createAppConfig(\"1.3.0\");\n\n // when\n const result = new ApplicationChecker(state, config)\n .withMinVersionInclusive(\"1.4.0\")\n .check();\n\n // then\n expect(result).toBe(false);\n });\n\n it(\"should pass with min version exclusive\", () => {\n // given\n const state = {\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Solana\", version: \"1.4.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n };\n const config = createAppConfig(\"1.4.0\");\n\n // when\n const result = new ApplicationChecker(state, config)\n .withMinVersionExclusive(\"1.3.0\")\n .check();\n\n // then\n expect(result).toBe(true);\n });\n\n it(\"should reject with min version exclusive if equal\", () => {\n // given\n const state = {\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Solana\", version: \"1.4.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n };\n const config = createAppConfig(\"1.4.0\");\n\n // when\n const result = new ApplicationChecker(state, config)\n .withMinVersionExclusive(\"1.4.0\")\n .check();\n\n // then\n expect(result).toBe(false);\n });\n\n it(\"should reject excluded device model\", () => {\n // given\n const state = {\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Solana\", version: \"1.4.0\" },\n deviceModelId: DeviceModelId.NANO_S,\n isSecureConnectionAllowed: false,\n };\n const config = createAppConfig(\"1.4.0\");\n\n // when\n const result = new ApplicationChecker(state, config)\n .excludeDeviceModel(DeviceModelId.NANO_S)\n .check();\n\n // then\n expect(result).toBe(false);\n });\n\n it(\"should allow allowed device model\", () => {\n // given\n const state = {\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Solana\", version: \"1.4.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n };\n const config = createAppConfig(\"1.4.0\");\n\n // when\n const result = new ApplicationChecker(state, config)\n .excludeDeviceModel(DeviceModelId.NANO_S)\n .check();\n\n // then\n expect(result).toBe(true);\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_device_management_kit", "import_vitest", "import_PublicKeyDisplayMode", "import_ApplicationChecker", "createAppConfig", "version", "state", "config", "result"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var b=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var A=Object.getOwnPropertyNames;var w=Object.prototype.hasOwnProperty;var h=(i,e)=>{for(var n in e)b(i,n,{get:e[n],enumerable:!0})},P=(i,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of A(e))!w.call(i,a)&&a!==n&&b(i,a,{get:()=>e[a],enumerable:!(r=y(e,a))||r.enumerable});return i};var C=i=>P(b({},"__esModule",{value:!0}),i);var k={};h(k,{COIN_DATA:()=>f,GenerateSolanaTransaction:()=>D});module.exports=C(k);var s=require("@solana/spl-token"),t=require("@solana/web3.js");const f={USDC:{mint:new t.PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),decimals:6}};class D{generateUsdcTransaction(e,n,r,a=1){return this.generateSplTokenTransaction(e,n,f.USDC.mint.toBase58(),r,f.USDC.decimals,a)}generateSplTokenTransaction(e,n,r,a,c,g=1){const o=new t.PublicKey(e),u=new t.PublicKey(n),l=new t.PublicKey(r),d=(0,s.getAssociatedTokenAddressSync)(l,o,!1,s.TOKEN_PROGRAM_ID,s.ASSOCIATED_TOKEN_PROGRAM_ID),p=(0,s.getAssociatedTokenAddressSync)(l,u,!1,s.TOKEN_PROGRAM_ID,s.ASSOCIATED_TOKEN_PROGRAM_ID),S=BigInt(Math.round(a*10**c)),m=new t.Transaction({recentBlockhash:"a3PD566oU2nE9JHwuC897aaT7ispdqaQ63Si6jzyKAg",feePayer:o});for(let T=0;T<g;T++)m.add((0,s.createTransferCheckedInstruction)(d,l,p,o,S,c,[]));return m.signatures=[{publicKey:o,signature:null}],this.toBase64(m.serializeMessage())}generatePlainSolanaTransaction(e,n,r,a=1){const c=new t.PublicKey(e),g=new t.PublicKey(n),o=new t.Transaction({recentBlockhash:"a3PD566oU2nE9JHwuC897aaT7ispdqaQ63Si6jzyKAg",feePayer:c});for(let u=0;u<a;u++)o.add(t.SystemProgram.transfer({fromPubkey:c,toPubkey:g,lamports:r}));return o.signatures=[{publicKey:c,signature:null}],this.toBase64(o.serializeMessage())}toBase64(e){let n="";for(const r of e){if(typeof r!="number")throw new Error("Invalid byte value");n+=String.fromCharCode(r)}try{return btoa(n)}catch{return Buffer.from(e).toString("base64")}}}0&&(module.exports={COIN_DATA,GenerateSolanaTransaction});
|
|
2
|
+
//# sourceMappingURL=GenerateSolanaTransaction.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/internal/app-binder/services/GenerateSolanaTransaction.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n ASSOCIATED_TOKEN_PROGRAM_ID,\n createTransferCheckedInstruction,\n getAssociatedTokenAddressSync,\n TOKEN_PROGRAM_ID,\n} from \"@solana/spl-token\";\nimport { PublicKey, SystemProgram, Transaction } from \"@solana/web3.js\";\n\nexport const COIN_DATA = {\n USDC: {\n mint: new PublicKey(\"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\"),\n decimals: 6,\n },\n};\n\nexport class GenerateSolanaTransaction {\n public generateUsdcTransaction(\n feePayerKey: string,\n recipientKey: string,\n usdcAmount: number,\n numberOfTransfers: number = 1,\n ): string {\n return this.generateSplTokenTransaction(\n feePayerKey,\n recipientKey,\n COIN_DATA.USDC.mint.toBase58(),\n usdcAmount,\n COIN_DATA.USDC.decimals,\n numberOfTransfers,\n );\n }\n\n public generateSplTokenTransaction(\n feePayerKey: string,\n recipientKey: string,\n mintAddress: string,\n amountInTokens: number,\n decimals: number,\n numberOfTransfers: number = 1,\n ): string {\n const feePayer = new PublicKey(feePayerKey);\n const recipient = new PublicKey(recipientKey);\n const mint = new PublicKey(mintAddress);\n\n const sourceATA = getAssociatedTokenAddressSync(\n mint,\n feePayer,\n false,\n TOKEN_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n );\n const destATA = getAssociatedTokenAddressSync(\n mint,\n recipient,\n false,\n TOKEN_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n );\n\n const amount = BigInt(Math.round(amountInTokens * 10 ** decimals));\n\n const tx = new Transaction({\n // hardcoded as transaction won't be broadcasted but only used for testing\n recentBlockhash: \"a3PD566oU2nE9JHwuC897aaT7ispdqaQ63Si6jzyKAg\",\n feePayer,\n });\n for (let i = 0; i < numberOfTransfers; i++) {\n tx.add(\n createTransferCheckedInstruction(\n sourceATA,\n mint,\n destATA,\n feePayer,\n amount,\n decimals,\n [],\n ),\n );\n }\n\n tx.signatures = [{ publicKey: feePayer, signature: null }];\n\n return this.toBase64(tx.serializeMessage());\n }\n\n public generatePlainSolanaTransaction(\n feePayerKey: string,\n recipientKey: string,\n lamports: number,\n numberOfTransactions: number = 1,\n ): string {\n const feePayer = new PublicKey(feePayerKey);\n const recipient = new PublicKey(recipientKey);\n\n const tx = new Transaction({\n // hardcoded as transaction won't be broadcasted but only used for testing\n recentBlockhash: \"a3PD566oU2nE9JHwuC897aaT7ispdqaQ63Si6jzyKAg\",\n feePayer,\n });\n for (let i = 0; i < numberOfTransactions; i++) {\n tx.add(\n SystemProgram.transfer({\n fromPubkey: feePayer,\n toPubkey: recipient,\n lamports,\n }),\n );\n }\n tx.signatures = [{ publicKey: feePayer, signature: null }];\n return this.toBase64(tx.serializeMessage());\n }\n\n private toBase64(bytes: Uint8Array): string {\n let bin = \"\";\n for (const b of bytes) {\n if (typeof b !== \"number\") throw new Error(\"Invalid byte value\");\n bin += String.fromCharCode(b);\n }\n try {\n return btoa(bin);\n } catch {\n return Buffer.from(bytes).toString(\"base64\");\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,eAAAE,EAAA,8BAAAC,IAAA,eAAAC,EAAAJ,GAAA,IAAAK,EAKO,6BACPC,EAAsD,2BAE/C,MAAMJ,EAAY,CACvB,KAAM,CACJ,KAAM,IAAI,YAAU,8CAA8C,EAClE,SAAU,CACZ,CACF,EAEO,MAAMC,CAA0B,CAC9B,wBACLI,EACAC,EACAC,EACAC,EAA4B,EACpB,CACR,OAAO,KAAK,4BACVH,EACAC,EACAN,EAAU,KAAK,KAAK,SAAS,EAC7BO,EACAP,EAAU,KAAK,SACfQ,CACF,CACF,CAEO,4BACLH,EACAC,EACAG,EACAC,EACAC,EACAH,EAA4B,EACpB,CACR,MAAMI,EAAW,IAAI,YAAUP,CAAW,EACpCQ,EAAY,IAAI,YAAUP,CAAY,EACtCQ,EAAO,IAAI,YAAUL,CAAW,EAEhCM,KAAY,iCAChBD,EACAF,EACA,GACA,mBACA,6BACF,EACMI,KAAU,iCACdF,EACAD,EACA,GACA,mBACA,6BACF,EAEMI,EAAS,OAAO,KAAK,MAAMP,EAAiB,IAAMC,CAAQ,CAAC,EAE3DO,EAAK,IAAI,cAAY,CAEzB,gBAAiB,8CACjB,SAAAN,CACF,CAAC,EACD,QAASO,EAAI,EAAGA,EAAIX,EAAmBW,IACrCD,EAAG,OACD,oCACEH,EACAD,EACAE,EACAJ,EACAK,EACAN,EACA,CAAC,CACH,CACF,EAGF,OAAAO,EAAG,WAAa,CAAC,CAAE,UAAWN,EAAU,UAAW,IAAK,CAAC,EAElD,KAAK,SAASM,EAAG,iBAAiB,CAAC,CAC5C,CAEO,+BACLb,EACAC,EACAc,EACAC,EAA+B,EACvB,CACR,MAAMT,EAAW,IAAI,YAAUP,CAAW,EACpCQ,EAAY,IAAI,YAAUP,CAAY,EAEtCY,EAAK,IAAI,cAAY,CAEzB,gBAAiB,8CACjB,SAAAN,CACF,CAAC,EACD,QAASO,EAAI,EAAGA,EAAIE,EAAsBF,IACxCD,EAAG,IACD,gBAAc,SAAS,CACrB,WAAYN,EACZ,SAAUC,EACV,SAAAO,CACF,CAAC,CACH,EAEF,OAAAF,EAAG,WAAa,CAAC,CAAE,UAAWN,EAAU,UAAW,IAAK,CAAC,EAClD,KAAK,SAASM,EAAG,iBAAiB,CAAC,CAC5C,CAEQ,SAASI,EAA2B,CAC1C,IAAIC,EAAM,GACV,UAAWC,KAAKF,EAAO,CACrB,GAAI,OAAOE,GAAM,SAAU,MAAM,IAAI,MAAM,oBAAoB,EAC/DD,GAAO,OAAO,aAAaC,CAAC,CAC9B,CACA,GAAI,CACF,OAAO,KAAKD,CAAG,CACjB,MAAQ,CACN,OAAO,OAAO,KAAKD,CAAK,EAAE,SAAS,QAAQ,CAC7C,CACF,CACF",
|
|
6
|
+
"names": ["GenerateSolanaTransaction_exports", "__export", "COIN_DATA", "GenerateSolanaTransaction", "__toCommonJS", "import_spl_token", "import_web3", "feePayerKey", "recipientKey", "usdcAmount", "numberOfTransfers", "mintAddress", "amountInTokens", "decimals", "feePayer", "recipient", "mint", "sourceATA", "destATA", "amount", "tx", "i", "lamports", "numberOfTransactions", "bytes", "bin", "b"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var t=require("@solana/spl-token"),a=require("@solana/web3.js"),e=require("vitest"),o=require("./GenerateSolanaTransaction");(0,e.describe)("GenerateSolanaTransaction",()=>{const p=a.Keypair.generate(),g=a.Keypair.generate(),u=p.publicKey.toBase58(),l=g.publicKey.toBase58();(0,e.it)("generateUsdcTransaction should equal generateSplTokenTransaction with USDC constants",()=>{const r=new o.GenerateSolanaTransaction,s=r.generateUsdcTransaction(u,l,2.5,3),i=r.generateSplTokenTransaction(u,l,o.COIN_DATA.USDC.mint.toBase58(),2.5,o.COIN_DATA.USDC.decimals,3);(0,e.expect)(s).toBe(i)}),(0,e.it)("generateSplTokenTransaction emits correct SPL-Token TransferChecked instructions",()=>{const r=new o.GenerateSolanaTransaction,s=o.COIN_DATA.USDC.mint,i=o.COIN_DATA.USDC.decimals,K=1.25,f=2,c=r.generateSplTokenTransaction(u,l,s.toBase58(),K,i,f),m=Uint8Array.from(Buffer.from(c,"base64")),n=a.Message.from(m);(0,e.expect)(n.instructions).toHaveLength(f);const T=(0,t.getAssociatedTokenAddressSync)(s,p.publicKey,!1,t.TOKEN_PROGRAM_ID,t.ASSOCIATED_TOKEN_PROGRAM_ID),d=(0,t.getAssociatedTokenAddressSync)(s,g.publicKey,!1,t.TOKEN_PROGRAM_ID,t.ASSOCIATED_TOKEN_PROGRAM_ID);for(const y of n.instructions){const S=n.accountKeys[y.programIdIndex];(0,e.expect)(S.equals(t.TOKEN_PROGRAM_ID)).toBe(!0),(0,e.expect)(n.accountKeys[y.accounts[0]].equals(T)).toBe(!0),(0,e.expect)(n.accountKeys[y.accounts[1]].equals(s)).toBe(!0),(0,e.expect)(n.accountKeys[y.accounts[2]].equals(d)).toBe(!0),(0,e.expect)(n.accountKeys[y.accounts[3]].equals(p.publicKey)).toBe(!0)}}),(0,e.it)("generatePlainSolanaTransaction emits correct SystemProgram.transfer instructions",()=>{const r=new o.GenerateSolanaTransaction,s=1e3,i=3,K=r.generatePlainSolanaTransaction(u,l,s,i),f=Uint8Array.from(Buffer.from(K,"base64")),c=a.Message.from(f);(0,e.expect)(c.instructions).toHaveLength(i);for(const m of c.instructions){const n=c.accountKeys[m.programIdIndex];(0,e.expect)(n.equals(a.SystemProgram.programId)).toBe(!0),(0,e.expect)(c.accountKeys[m.accounts[0]].toBase58()).toBe(u),(0,e.expect)(c.accountKeys[m.accounts[1]].toBase58()).toBe(l)}})});
|
|
2
|
+
//# sourceMappingURL=GenerateSolanaTransaction.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/internal/app-binder/services/GenerateSolanaTransaction.test.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n ASSOCIATED_TOKEN_PROGRAM_ID,\n getAssociatedTokenAddressSync,\n TOKEN_PROGRAM_ID,\n} from \"@solana/spl-token\";\nimport {\n Keypair,\n Message,\n type PublicKey,\n SystemProgram,\n} from \"@solana/web3.js\";\nimport { describe, expect, it } from \"vitest\";\n\nimport {\n COIN_DATA,\n GenerateSolanaTransaction,\n} from \"./GenerateSolanaTransaction\";\n\ndescribe(\"GenerateSolanaTransaction\", () => {\n const feePayer = Keypair.generate();\n const recipient = Keypair.generate();\n const feePayerKey = feePayer.publicKey.toBase58();\n const recipientKey = recipient.publicKey.toBase58();\n\n it(\"generateUsdcTransaction should equal generateSplTokenTransaction with USDC constants\", () => {\n // given\n const gen = new GenerateSolanaTransaction();\n const txA = gen.generateUsdcTransaction(feePayerKey, recipientKey, 2.5, 3);\n\n // when\n const txB = gen.generateSplTokenTransaction(\n feePayerKey,\n recipientKey,\n COIN_DATA.USDC.mint.toBase58(),\n 2.5,\n COIN_DATA.USDC.decimals,\n 3,\n );\n\n // then\n expect(txA).toBe(txB);\n });\n\n it(\"generateSplTokenTransaction emits correct SPL-Token TransferChecked instructions\", () => {\n // given\n const gen = new GenerateSolanaTransaction();\n const mint = COIN_DATA.USDC.mint;\n const decimals = COIN_DATA.USDC.decimals;\n const amount = 1.25;\n const transfers = 2;\n\n // when\n const b64 = gen.generateSplTokenTransaction(\n feePayerKey,\n recipientKey,\n mint.toBase58(),\n amount,\n decimals,\n transfers,\n );\n\n const uint8Array = Uint8Array.from(Buffer.from(b64, \"base64\"));\n const msg = Message.from(uint8Array);\n\n // then\n expect(msg.instructions).toHaveLength(transfers);\n\n const sourceAta = getAssociatedTokenAddressSync(\n mint,\n feePayer.publicKey,\n false,\n TOKEN_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n );\n const destAta = getAssociatedTokenAddressSync(\n mint,\n recipient.publicKey,\n false,\n TOKEN_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n );\n\n for (const ix of msg.instructions) {\n // program must be the SPL-Token program\n const pid = msg.accountKeys[ix.programIdIndex]!;\n expect(pid.equals(TOKEN_PROGRAM_ID)).toBe(true);\n\n // first account is source ATA, second is mint, third is dest ATA\n expect(\n (msg.accountKeys[ix.accounts[0]!] as PublicKey).equals(sourceAta),\n ).toBe(true);\n expect((msg.accountKeys[ix.accounts[1]!] as PublicKey).equals(mint)).toBe(\n true,\n );\n expect(\n (msg.accountKeys[ix.accounts[2]!] as PublicKey).equals(destAta),\n ).toBe(true);\n\n // feePayer must sign\n expect(\n (msg.accountKeys[ix.accounts[3]!] as PublicKey).equals(\n feePayer.publicKey,\n ),\n ).toBe(true);\n }\n });\n\n it(\"generatePlainSolanaTransaction emits correct SystemProgram.transfer instructions\", () => {\n // given\n const gen = new GenerateSolanaTransaction();\n const lamports = 1_000;\n const ops = 3;\n\n // when\n const b64 = gen.generatePlainSolanaTransaction(\n feePayerKey,\n recipientKey,\n lamports,\n ops,\n );\n const uint8Array = Uint8Array.from(Buffer.from(b64, \"base64\"));\n const msg = Message.from(uint8Array);\n\n // then\n expect(msg.instructions).toHaveLength(ops);\n\n for (const ix of msg.instructions) {\n // program must be SystemProgram\n const pid = msg.accountKeys[ix.programIdIndex]!;\n expect(pid.equals(SystemProgram.programId)).toBe(true);\n\n // accounts: [fromPubkey, toPubkey]\n expect((msg.accountKeys[ix.accounts[0]!] as PublicKey).toBase58()).toBe(\n feePayerKey,\n );\n expect((msg.accountKeys[ix.accounts[1]!] as PublicKey).toBase58()).toBe(\n recipientKey,\n );\n }\n });\n});\n"],
|
|
5
|
+
"mappings": "aAAA,IAAAA,EAIO,6BACPC,EAKO,2BACPC,EAAqC,kBAErCC,EAGO,0CAEP,YAAS,4BAA6B,IAAM,CAC1C,MAAMC,EAAW,UAAQ,SAAS,EAC5BC,EAAY,UAAQ,SAAS,EAC7BC,EAAcF,EAAS,UAAU,SAAS,EAC1CG,EAAeF,EAAU,UAAU,SAAS,KAElD,MAAG,uFAAwF,IAAM,CAE/F,MAAMG,EAAM,IAAI,4BACVC,EAAMD,EAAI,wBAAwBF,EAAaC,EAAc,IAAK,CAAC,EAGnEG,EAAMF,EAAI,4BACdF,EACAC,EACA,YAAU,KAAK,KAAK,SAAS,EAC7B,IACA,YAAU,KAAK,SACf,CACF,KAGA,UAAOE,CAAG,EAAE,KAAKC,CAAG,CACtB,CAAC,KAED,MAAG,mFAAoF,IAAM,CAE3F,MAAMF,EAAM,IAAI,4BACVG,EAAO,YAAU,KAAK,KACtBC,EAAW,YAAU,KAAK,SAC1BC,EAAS,KACTC,EAAY,EAGZC,EAAMP,EAAI,4BACdF,EACAC,EACAI,EAAK,SAAS,EACdE,EACAD,EACAE,CACF,EAEME,EAAa,WAAW,KAAK,OAAO,KAAKD,EAAK,QAAQ,CAAC,EACvDE,EAAM,UAAQ,KAAKD,CAAU,KAGnC,UAAOC,EAAI,YAAY,EAAE,aAAaH,CAAS,EAE/C,MAAMI,KAAY,iCAChBP,EACAP,EAAS,UACT,GACA,mBACA,6BACF,EACMe,KAAU,iCACdR,EACAN,EAAU,UACV,GACA,mBACA,6BACF,EAEA,UAAWe,KAAMH,EAAI,aAAc,CAEjC,MAAMI,EAAMJ,EAAI,YAAYG,EAAG,cAAc,KAC7C,UAAOC,EAAI,OAAO,kBAAgB,CAAC,EAAE,KAAK,EAAI,KAG9C,UACGJ,EAAI,YAAYG,EAAG,SAAS,CAAC,CAAE,EAAgB,OAAOF,CAAS,CAClE,EAAE,KAAK,EAAI,KACX,UAAQD,EAAI,YAAYG,EAAG,SAAS,CAAC,CAAE,EAAgB,OAAOT,CAAI,CAAC,EAAE,KACnE,EACF,KACA,UACGM,EAAI,YAAYG,EAAG,SAAS,CAAC,CAAE,EAAgB,OAAOD,CAAO,CAChE,EAAE,KAAK,EAAI,KAGX,UACGF,EAAI,YAAYG,EAAG,SAAS,CAAC,CAAE,EAAgB,OAC9ChB,EAAS,SACX,CACF,EAAE,KAAK,EAAI,CACb,CACF,CAAC,KAED,MAAG,mFAAoF,IAAM,CAE3F,MAAMI,EAAM,IAAI,4BACVc,EAAW,IACXC,EAAM,EAGNR,EAAMP,EAAI,+BACdF,EACAC,EACAe,EACAC,CACF,EACMP,EAAa,WAAW,KAAK,OAAO,KAAKD,EAAK,QAAQ,CAAC,EACvDE,EAAM,UAAQ,KAAKD,CAAU,KAGnC,UAAOC,EAAI,YAAY,EAAE,aAAaM,CAAG,EAEzC,UAAWH,KAAMH,EAAI,aAAc,CAEjC,MAAMI,EAAMJ,EAAI,YAAYG,EAAG,cAAc,KAC7C,UAAOC,EAAI,OAAO,gBAAc,SAAS,CAAC,EAAE,KAAK,EAAI,KAGrD,UAAQJ,EAAI,YAAYG,EAAG,SAAS,CAAC,CAAE,EAAgB,SAAS,CAAC,EAAE,KACjEd,CACF,KACA,UAAQW,EAAI,YAAYG,EAAG,SAAS,CAAC,CAAE,EAAgB,SAAS,CAAC,EAAE,KACjEb,CACF,CACF,CACF,CAAC,CACH,CAAC",
|
|
6
|
+
"names": ["import_spl_token", "import_web3", "import_vitest", "import_GenerateSolanaTransaction", "feePayer", "recipient", "feePayerKey", "recipientKey", "gen", "txA", "txB", "mint", "decimals", "amount", "transfers", "b64", "uint8Array", "msg", "sourceAta", "destAta", "ix", "pid", "lamports", "ops"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var f=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames;var S=Object.prototype.hasOwnProperty;var h=(a,e)=>{for(var t in e)f(a,t,{get:e[t],enumerable:!0})},L=(a,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of k(e))!S.call(a,o)&&o!==t&&f(a,o,{get:()=>e[o],enumerable:!(n=x(e,o))||n.enumerable});return a};var D=a=>L(f({},"__esModule",{value:!0}),a);var C={};h(C,{SolanaTransactionTypes:()=>K,TransactionInspector:()=>N});module.exports=D(C);var m=require("@solana/spl-token"),i=require("@solana/web3.js"),I=require("buffer"),T=require("../../app-binder/services/utils/transactionDecoders"),K=(t=>(t.STANDARD="Standard",t.SPL="SPL",t))(K||{});const R="http://api.mainnet-beta.solana.com/",M=new i.Connection(R,{commitment:"confirmed"}),g=a=>!!a&&(a.equals(m.ASSOCIATED_TOKEN_PROGRAM_ID)||a.equals(m.TOKEN_PROGRAM_ID)||a.equals(m.TOKEN_2022_PROGRAM_ID));class N{constructor(e,t,n){this.rawTransactionBytes=e;this.tokenAddress=t;this.createATA=n}async inspectTransactionType(){try{const e=await this.normaliseMessage(this.rawTransactionBytes);if(this.tokenAddress||this.createATA){const t=e.compiledInstructions.some(o=>g(e.allKeys[o.programIdIndex])),n={};return this.tokenAddress&&(n.tokenAddress=this.tokenAddress),this.createATA&&(n.createATA=this.createATA,!n.mintAddress&&this.createATA.mintAddress&&(n.mintAddress=this.createATA.mintAddress)),{transactionType:t?"SPL":"Standard",data:n}}for(const t of e.compiledInstructions){const n=e.allKeys[t.programIdIndex];if(!n)continue;const o=t.accountKeyIndexes.map(r=>e.allKeys[r]).filter(r=>!!r),y=new i.TransactionInstruction({programId:n,keys:o.map(r=>({pubkey:r,isSigner:!1,isWritable:!1})),data:I.Buffer.from(t.data)}),l={programId:n,ixMeta:t,message:e,instruction:y};for(const r of T.DECODERS){if(!r.when(l))continue;const u=r.decode(l);if(u)return{transactionType:"SPL",data:u}}if(g(n))return{transactionType:"SPL",data:{}}}return{transactionType:"Standard",data:{}}}catch{return{transactionType:"Standard",data:{}}}}async normaliseMessage(e){const t=this.tryDeserialiseVersioned(e);if(t){const s=t.message,c=await w(s);let A;return typeof s.getAccountKeys=="function"?A=s.getAccountKeys(c?{accountKeysFromLookups:c}:void 0).keySegments().flat():A=[...s.staticAccountKeys],{compiledInstructions:s.compiledInstructions.map(d=>{const b=d,P=Array.from(b.accounts??d.accountKeyIndexes??[]);let p;return d.data instanceof Uint8Array?p=d.data:typeof d.data=="string"?p=I.Buffer.from(d.data,"base64"):p=Uint8Array.from(d.data??[]),{programIdIndex:d.programIdIndex,accountKeyIndexes:P,data:p}}),allKeys:A}}const n=i.Transaction.from(e),o=new Map,y=s=>{if(!s)return;const c=s.toBase58();o.has(c)||o.set(c,s)};y(n.feePayer??null);for(const s of n.instructions){y(s.programId);for(const c of s.keys)y(c.pubkey)}const l=Array.from(o.values()),r=new Map(l.map((s,c)=>[s.toBase58(),c]));return{compiledInstructions:n.instructions.map(s=>({programIdIndex:r.get(s.programId.toBase58())??-1,accountKeyIndexes:s.keys.map(c=>r.get(c.pubkey.toBase58())??-1),data:s.data})),allKeys:l}}tryDeserialiseVersioned(e){try{return i.VersionedTransaction.deserialize(e)}catch{try{return{message:i.VersionedMessage.deserialize(e)}}catch{return null}}}}async function w(a){const e=a.addressTableLookups??[];if(!e.length)return;const t=[],n=[];return await Promise.all(e.map(async o=>{const l=(await M.getAddressLookupTable(o.accountKey)).value;if(!l)return;const r=l.state.addresses;for(const u of o.writableIndexes??[]){const s=r[u];s&&t.push(s)}for(const u of o.readonlyIndexes??[]){const s=r[u];s&&n.push(s)}})),{writable:t,readonly:n}}0&&(module.exports={SolanaTransactionTypes,TransactionInspector});
|
|
2
|
+
//# sourceMappingURL=TransactionInspector.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/internal/app-binder/services/TransactionInspector.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n ASSOCIATED_TOKEN_PROGRAM_ID,\n TOKEN_2022_PROGRAM_ID,\n TOKEN_PROGRAM_ID,\n} from \"@solana/spl-token\";\nimport {\n Connection,\n type PublicKey,\n Transaction,\n TransactionInstruction,\n VersionedMessage,\n VersionedTransaction,\n} from \"@solana/web3.js\";\nimport { Buffer } from \"buffer\";\n\nimport {\n DECODERS,\n type IxContext,\n type TxInspectorResult,\n} from \"@internal/app-binder/services/utils/transactionDecoders\";\n\nexport enum SolanaTransactionTypes {\n STANDARD = \"Standard\",\n SPL = \"SPL\",\n}\n\nexport type NormalizedCompiledIx = {\n programIdIndex: number;\n accountKeyIndexes: number[];\n data: Uint8Array;\n};\n\nexport type NormalizedMessage = {\n compiledInstructions: NormalizedCompiledIx[];\n allKeys: PublicKey[];\n};\n\ntype LoadedAddresses = { writable: PublicKey[]; readonly: PublicKey[] };\n\nconst RPC_URL = \"http://api.mainnet-beta.solana.com/\";\n\nconst defaultConnection = new Connection(RPC_URL, { commitment: \"confirmed\" });\n\nconst isSPLProgramId = (pid: PublicKey | undefined) =>\n !!pid &&\n (pid.equals(ASSOCIATED_TOKEN_PROGRAM_ID) ||\n pid.equals(TOKEN_PROGRAM_ID) ||\n pid.equals(TOKEN_2022_PROGRAM_ID));\n\nexport class TransactionInspector {\n constructor(\n private readonly rawTransactionBytes: Uint8Array,\n private readonly tokenAddress?: string | null,\n private readonly createATA?: {\n address: string;\n mintAddress: string;\n } | null,\n ) {}\n\n public async inspectTransactionType(): Promise<TxInspectorResult> {\n try {\n const message = await this.normaliseMessage(this.rawTransactionBytes);\n\n // If tokenAddress or createATA is provided, use those directly\n // and only classify SPL vs Standard by scanning program IDs.\n if (this.tokenAddress || this.createATA) {\n const looksSPL = message.compiledInstructions.some((ix) =>\n isSPLProgramId(message.allKeys[ix.programIdIndex]),\n );\n\n const data: TxInspectorResult[\"data\"] = {};\n if (this.tokenAddress) data.tokenAddress = this.tokenAddress;\n if (this.createATA) {\n data.createATA = this.createATA;\n // If mint is known from createATA and caller didn't pass mintAddress explicitly,\n // populate it so downstream UI has the same shape as decoder output.\n if (!data.mintAddress && this.createATA.mintAddress) {\n data.mintAddress = this.createATA.mintAddress;\n }\n }\n\n return {\n transactionType: looksSPL\n ? SolanaTransactionTypes.SPL\n : SolanaTransactionTypes.STANDARD,\n data,\n };\n }\n\n // Normal path: decode from the message\n for (const ixMeta of message.compiledInstructions) {\n const programId = message.allKeys[ixMeta.programIdIndex];\n if (!programId) continue;\n\n const resolvedKeys = ixMeta.accountKeyIndexes\n .map((i) => message.allKeys[i])\n .filter((key): key is PublicKey => !!key);\n\n // Build an instruction even with partial keys; decoders handle missing fields gracefully.\n const instruction = new TransactionInstruction({\n programId,\n keys: resolvedKeys.map((key) => ({\n pubkey: key,\n isSigner: false,\n isWritable: false,\n })),\n data: Buffer.from(ixMeta.data),\n });\n\n const ctx: IxContext = { programId, ixMeta, message, instruction };\n\n for (const decoder of DECODERS) {\n if (!decoder.when(ctx)) continue;\n const data = decoder.decode(ctx);\n if (data) {\n return { transactionType: SolanaTransactionTypes.SPL, data };\n }\n }\n\n if (isSPLProgramId(programId)) {\n return { transactionType: SolanaTransactionTypes.SPL, data: {} };\n }\n }\n\n return { transactionType: SolanaTransactionTypes.STANDARD, data: {} };\n } catch {\n return { transactionType: SolanaTransactionTypes.STANDARD, data: {} };\n }\n }\n\n /**\n * Normalise any tx (legacy or v0) into { compiledInstructions, allKeys }.\n * For v0, we auto-fetch looked-up addresses from ALT(s) via the baked-in connection.\n */\n private async normaliseMessage(\n rawBytes: Uint8Array,\n ): Promise<NormalizedMessage> {\n const versionedTX = this.tryDeserialiseVersioned(rawBytes);\n if (versionedTX) {\n const msg = versionedTX.message as VersionedMessage & {\n getAccountKeys?: (options?: {\n accountKeysFromLookups?: LoadedAddresses;\n }) => {\n staticAccountKeys: PublicKey[];\n accountKeysFromLookups?: LoadedAddresses;\n keySegments: () => PublicKey[][];\n };\n compiledInstructions: Array<{\n programIdIndex: number;\n accountKeyIndexes?: number[]; // legacy field name\n accounts?: number[]; // v0 field name\n data: Uint8Array | string | number[];\n }>;\n staticAccountKeys: PublicKey[];\n };\n\n const lookedUp = await resolveLookedUpAddressesFromMessage(msg);\n\n let allKeys: PublicKey[];\n if (typeof msg.getAccountKeys === \"function\") {\n const messageAccountKeys = msg.getAccountKeys(\n lookedUp ? { accountKeysFromLookups: lookedUp } : undefined,\n );\n allKeys = messageAccountKeys.keySegments().flat();\n } else {\n allKeys = [...msg.staticAccountKeys];\n }\n\n const compiledInstructions: NormalizedCompiledIx[] =\n msg.compiledInstructions.map((ix) => {\n const ixWithAccounts = ix as typeof ix & { accounts?: number[] };\n const accountKeyIndexes = Array.from(\n ixWithAccounts.accounts ?? ix.accountKeyIndexes ?? [],\n ) as number[];\n\n let data: Uint8Array;\n if (ix.data instanceof Uint8Array) {\n data = ix.data;\n } else if (typeof ix.data === \"string\") {\n data = Buffer.from(ix.data, \"base64\"); // v0 encodes instruction data as base64\n } else {\n data = Uint8Array.from(ix.data ?? []);\n }\n\n return {\n programIdIndex: ix.programIdIndex,\n accountKeyIndexes,\n data,\n };\n });\n\n return { compiledInstructions, allKeys };\n }\n\n // Legacy (no ALTs)\n const legacy = Transaction.from(rawBytes);\n\n const allKeyMap = new Map<string, PublicKey>();\n const add = (pubkey?: PublicKey | null) => {\n if (!pubkey) return;\n const key = pubkey.toBase58();\n if (!allKeyMap.has(key)) allKeyMap.set(key, pubkey);\n };\n\n add(legacy.feePayer ?? null);\n for (const ix of legacy.instructions) {\n add(ix.programId);\n for (const key of ix.keys) add(key.pubkey);\n }\n const allKeys = Array.from(allKeyMap.values());\n const indexByB58 = new Map(allKeys.map((pk, i) => [pk.toBase58(), i]));\n\n const compiledInstructions: NormalizedCompiledIx[] =\n legacy.instructions.map((ix) => ({\n programIdIndex: indexByB58.get(ix.programId.toBase58()) ?? -1,\n accountKeyIndexes: ix.keys.map(\n (key) => indexByB58.get(key.pubkey.toBase58()) ?? -1,\n ),\n data: ix.data,\n }));\n\n return { compiledInstructions, allKeys };\n }\n\n private tryDeserialiseVersioned(\n rawBytes: Uint8Array,\n ): VersionedTransaction | null {\n try {\n return VersionedTransaction.deserialize(rawBytes);\n } catch {\n try {\n const msg = VersionedMessage.deserialize(rawBytes);\n // Wrap in a dummy VersionedTransaction-like shape just for uniform handling\n return { message: msg } as VersionedTransaction;\n } catch {\n return null;\n }\n }\n }\n}\n\n// fetch looked-up addresses for a VersionedMessage via the baked-in connection\nasync function resolveLookedUpAddressesFromMessage(\n msg: VersionedMessage,\n): Promise<LoadedAddresses | undefined> {\n const lookups = msg.addressTableLookups ?? [];\n if (!lookups.length) return;\n\n const writable: PublicKey[] = [];\n const readonly: PublicKey[] = [];\n\n await Promise.all(\n lookups.map(async (lu) => {\n const res = await defaultConnection.getAddressLookupTable(lu.accountKey);\n const table = res.value;\n if (!table) return;\n const addrs = table.state.addresses;\n\n for (const i of lu.writableIndexes ?? []) {\n const pk = addrs[i];\n if (pk) writable.push(pk);\n }\n for (const i of lu.readonlyIndexes ?? []) {\n const pk = addrs[i];\n if (pk) readonly.push(pk);\n }\n }),\n );\n\n return { writable, readonly };\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["TransactionInspector_exports", "__export", "SolanaTransactionTypes", "TransactionInspector", "__toCommonJS", "import_spl_token", "import_web3", "import_buffer", "import_transactionDecoders", "RPC_URL", "defaultConnection", "isSPLProgramId", "pid", "rawTransactionBytes", "tokenAddress", "createATA", "message", "looksSPL", "ix", "data", "ixMeta", "programId", "resolvedKeys", "i", "key", "instruction", "ctx", "decoder", "rawBytes", "versionedTX", "msg", "lookedUp", "resolveLookedUpAddressesFromMessage", "allKeys", "ixWithAccounts", "accountKeyIndexes", "legacy", "allKeyMap", "add", "pubkey", "indexByB58", "pk", "lookups", "writable", "readonly", "lu", "table", "addrs"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var y=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var m=Object.prototype.hasOwnProperty;var I=(e,n)=>{for(var s in n)y(e,s,{get:n[s],enumerable:!0})},b=(e,n,s,o)=>{if(n&&typeof n=="object"||typeof n=="function")for(let d of p(n))!m.call(e,d)&&d!==s&&y(e,d,{get:()=>n[d],enumerable:!(o=A(n,d))||o.enumerable});return e};var T=e=>b(y({},"__esModule",{value:!0}),e);var f={};I(f,{DECODERS:()=>B});module.exports=T(f);var t=require("@solana/spl-token");const c=e=>e.equals(t.TOKEN_PROGRAM_ID)||e.equals(t.TOKEN_2022_PROGRAM_ID),r=e=>{try{return e()}catch{return null}},B=[{when:({programId:e})=>e.equals(t.ASSOCIATED_TOKEN_PROGRAM_ID),decode:({ixMeta:e,message:n})=>{const s=i=>{const u=e.accountKeyIndexes[i];return u!==void 0?n.allKeys[u]??null:null},o=s(1);let d=s(2),a=s(3);if(!d||!a){const i=e.accountKeyIndexes.slice(2);for(const u of i){const k=n.allKeys[u];if(k){if(!d&&k!==o){d=k;continue}if(!a&&k!==o&&k!==d&&(a=k),d&&a)break}}}let l=null;for(const i of e.accountKeyIndexes){const u=n.allKeys[i];if(u&&(u.equals(t.TOKEN_PROGRAM_ID)||u.equals(t.TOKEN_2022_PROGRAM_ID))){l=u;break}}if(!d||!a)return null;if(o)return{createATA:{address:o.toBase58(),mintAddress:a.toBase58()}};if(l){const i=l.equals(t.TOKEN_2022_PROGRAM_ID);return{createATA:{address:(0,t.getAssociatedTokenAddressSync)(a,d,!0,i?t.TOKEN_2022_PROGRAM_ID:t.TOKEN_PROGRAM_ID,t.ASSOCIATED_TOKEN_PROGRAM_ID).toBase58(),mintAddress:a.toBase58()}}}return null}},{when:({programId:e})=>e.equals(t.TOKEN_2022_PROGRAM_ID),decode:({instruction:e,programId:n})=>r(()=>{const{keys:{destination:s,mint:o}}=(0,t.decodeTransferCheckedWithFeeInstruction)(e,n);return{tokenAddress:s.pubkey.toBase58(),mintAddress:o.pubkey.toBase58()}})},{when:({programId:e})=>c(e),decode:({instruction:e,programId:n})=>r(()=>{const{keys:{destination:s}}=(0,t.decodeTransferInstruction)(e,n);return{tokenAddress:s.pubkey.toBase58()}})},{when:({programId:e})=>c(e),decode:({instruction:e,programId:n})=>r(()=>{const{keys:{destination:s,mint:o}}=(0,t.decodeTransferCheckedInstruction)(e,n);return{tokenAddress:s.pubkey.toBase58(),mintAddress:o.pubkey.toBase58()}})},{when:({programId:e})=>c(e),decode:({instruction:e,programId:n})=>r(()=>{const{keys:{account:s,mint:o}}=(0,t.decodeInitializeAccountInstruction)(e,n);return{createATA:{address:s.pubkey.toBase58(),mintAddress:o.pubkey.toBase58()}}})},{when:({programId:e})=>c(e),decode:({instruction:e,programId:n})=>r(()=>{const{keys:{account:s,mint:o}}=(0,t.decodeInitializeAccount2Instruction)(e,n);return{createATA:{address:s.pubkey.toBase58(),mintAddress:o.pubkey.toBase58()}}})},{when:({programId:e})=>c(e),decode:({instruction:e,programId:n})=>r(()=>{const{keys:{account:s,mint:o}}=(0,t.decodeInitializeAccount3Instruction)(e,n);return{createATA:{address:s.pubkey.toBase58(),mintAddress:o.pubkey.toBase58()}}})},{when:({programId:e})=>c(e),decode:({instruction:e,programId:n})=>r(()=>{const{keys:{account:s}}=(0,t.decodeInitializeImmutableOwnerInstruction)(e,n);return{tokenAddress:s.pubkey.toBase58()}})},{when:({programId:e})=>c(e),decode:({instruction:e,programId:n})=>r(()=>{const{keys:{account:s}}=(0,t.decodeCloseAccountInstruction)(e,n);return{tokenAddress:s.pubkey.toBase58()}})},{when:({programId:e})=>c(e),decode:({instruction:e,programId:n})=>r(()=>{const{keys:{account:s}}=(0,t.decodeSyncNativeInstruction)(e,n);return{tokenAddress:s.pubkey.toBase58()}})},{when:({programId:e})=>c(e),decode:({instruction:e,programId:n})=>r(()=>{const{keys:{account:s,mint:o}}=(0,t.decodeBurnCheckedInstruction)(e,n);return{tokenAddress:s.pubkey.toBase58(),mintAddress:o.pubkey.toBase58()}})},{when:({programId:e})=>c(e),decode:({instruction:e,programId:n})=>r(()=>{const{keys:{account:s,mint:o}}=(0,t.decodeBurnInstruction)(e,n);return{tokenAddress:s.pubkey.toBase58(),mintAddress:o.pubkey.toBase58()}})},{when:({programId:e})=>c(e),decode:({instruction:e,programId:n})=>r(()=>{const{keys:{account:s,mint:o}}=(0,t.decodeFreezeAccountInstruction)(e,n);return{tokenAddress:s.pubkey.toBase58(),mintAddress:o.pubkey.toBase58()}})},{when:({programId:e})=>c(e),decode:({instruction:e,programId:n})=>r(()=>{const{keys:{account:s,mint:o}}=(0,t.decodeThawAccountInstruction)(e,n);return{tokenAddress:s.pubkey.toBase58(),mintAddress:o.pubkey.toBase58()}})},{when:({programId:e})=>e.equals(t.ASSOCIATED_TOKEN_PROGRAM_ID)||e.equals(t.TOKEN_PROGRAM_ID)||e.equals(t.TOKEN_2022_PROGRAM_ID),decode:()=>({})}];0&&(module.exports={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 { type PublicKey, type TransactionInstruction } from \"@solana/web3.js\";\n\nimport {\n type NormalizedCompiledIx,\n type NormalizedMessage,\n type SolanaTransactionTypes,\n} from \"@internal/app-binder/services/TransactionInspector\";\n\nexport interface TxInspectorResult {\n transactionType: SolanaTransactionTypes;\n data: {\n tokenAddress?: string;\n mintAddress?: string;\n createATA?: { address: string; mintAddress: string };\n };\n}\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 const DECODERS: Decoder[] = [\n // ATA creation (with derivation fallback)\n {\n when: ({ programId }) => programId.equals(ASSOCIATED_TOKEN_PROGRAM_ID),\n decode: ({ ixMeta, message }) => {\n // Helpers to read by ix index safely\n const byIdx = (n: number): PublicKey | null => {\n const i = ixMeta.accountKeyIndexes[n];\n return i !== undefined ? (message.allKeys[i] ?? null) : null;\n };\n\n // Common positions (fast path)\n const ataPk = byIdx(1);\n let ownerPk = byIdx(2);\n let mintPk = byIdx(3);\n\n // Recover owner/mint if they weren't in the usual slots\n if (!ownerPk || !mintPk) {\n const afterFirstTwo = ixMeta.accountKeyIndexes.slice(2);\n for (const k of afterFirstTwo) {\n const pk = message.allKeys[k];\n if (!pk) continue;\n if (!ownerPk && pk !== ataPk) {\n ownerPk = pk;\n continue;\n }\n if (!mintPk && pk !== ataPk && pk !== ownerPk) {\n mintPk = pk;\n }\n if (ownerPk && mintPk) break;\n }\n }\n\n // Find token program by VALUE anywhere (works for legacy or 2022)\n let tokenProgramPk: PublicKey | null = null;\n for (const k of ixMeta.accountKeyIndexes) {\n const pk = message.allKeys[k];\n if (!pk) continue;\n if (pk.equals(TOKEN_PROGRAM_ID) || pk.equals(TOKEN_2022_PROGRAM_ID)) {\n tokenProgramPk = pk;\n break;\n }\n }\n\n // Need owner+mint at minimum\n if (!ownerPk || !mintPk) return null;\n\n // If ATA pubkey was provided in the ix, trust it\n if (ataPk) {\n return {\n createATA: {\n address: ataPk.toBase58(),\n mintAddress: mintPk.toBase58(),\n },\n };\n }\n\n // If token program is present, derive deterministically\n if (tokenProgramPk) {\n const isV22 = tokenProgramPk.equals(TOKEN_2022_PROGRAM_ID);\n const derived = getAssociatedTokenAddressSync(\n mintPk,\n ownerPk,\n true, // allowOwnerOffCurve\n isV22 ? TOKEN_2022_PROGRAM_ID : TOKEN_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n );\n return {\n createATA: {\n address: derived.toBase58(),\n mintAddress: mintPk.toBase58(),\n },\n };\n }\n\n // No ATA + no token program \u2192 let outer logic decide (Token-2022 hint / ALT fetch / conservative)\n return null;\n },\n },\n\n // Token-2022 fee\u2019d transfer (CWIF)\n {\n when: ({ programId }) => programId.equals(TOKEN_2022_PROGRAM_ID),\n decode: ({ instruction, programId }) =>\n safe(() => {\n const {\n keys: { destination, mint },\n } = decodeTransferCheckedWithFeeInstruction(instruction, programId);\n return {\n tokenAddress: destination.pubkey.toBase58(),\n mintAddress: mint.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, mint },\n } = decodeTransferCheckedInstruction(instruction, programId);\n return {\n tokenAddress: destination.pubkey.toBase58(),\n mintAddress: mint.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, mint },\n } = decodeBurnCheckedInstruction(instruction, programId);\n return {\n tokenAddress: account.pubkey.toBase58(),\n mintAddress: mint.pubkey.toBase58(),\n };\n }),\n },\n {\n when: ({ programId }) => isTokenProgramId(programId),\n decode: ({ instruction, programId }) =>\n safe(() => {\n const {\n keys: { account, mint },\n } = decodeBurnInstruction(instruction, programId);\n return {\n tokenAddress: account.pubkey.toBase58(),\n mintAddress: mint.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, mint },\n } = decodeFreezeAccountInstruction(instruction, programId);\n return {\n tokenAddress: account.pubkey.toBase58(),\n mintAddress: mint.pubkey.toBase58(),\n };\n }),\n },\n {\n when: ({ programId }) => isTokenProgramId(programId),\n decode: ({ instruction, programId }) =>\n safe(() => {\n const {\n keys: { account, mint },\n } = decodeThawAccountInstruction(instruction, programId);\n return {\n tokenAddress: account.pubkey.toBase58(),\n mintAddress: mint.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: () => ({}),\n },\n];\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["transactionDecoders_exports", "__export", "DECODERS", "__toCommonJS", "import_spl_token", "isTokenProgramId", "pid", "safe", "fn", "programId", "ixMeta", "message", "byIdx", "n", "i", "ataPk", "ownerPk", "mintPk", "afterFirstTwo", "k", "pk", "tokenProgramPk", "isV22", "instruction", "destination", "mint", "account"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var i=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var u=Object.prototype.hasOwnProperty;var g=(n,t)=>{for(var o in t)i(n,o,{get:t[o],enumerable:!0})},C=(n,t,o,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of p(t))!u.call(n,e)&&e!==o&&i(n,e,{get:()=>t[e],enumerable:!(a=d(t,e))||a.enumerable});return n};var m=n=>C(i({},"__esModule",{value:!0}),n);var A={};g(A,{BuildTransactionContextTask:()=>f});module.exports=m(A);var c=require("@ledgerhq/device-management-kit"),l=require("../../app-binder/command/GetChallengeCommand");class f{constructor(t,o){this.api=t;this.args=o}async run(){const{contextModule:t,options:o}=this.args,a=this.api.getDeviceSessionState();let e;const s=await this.api.sendCommand(new l.GetChallengeCommand);return(0,c.isSuccessCommandResult)(s)&&(e=s.data.challenge),(await t.getSolanaContext({deviceModelId:a.deviceModelId,tokenAddress:o.tokenAddress,challenge:e,createATA:o.createATA})).caseOf({Left:r=>{throw r},Right:r=>({challenge:e,descriptor:r.descriptor,addressResult:{tokenAccount:r.tokenAccount,owner:r.owner,contract:r.contract},calCertificate:r.certificate})})}}0&&(module.exports={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 TransactionOptions } from \"@api/model/TransactionOptions\";\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: TransactionOptions;\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": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,iCAAAE,IAAA,eAAAC,EAAAH,GAIA,IAAAI,EAGO,2CAGPC,EAAoC,4DAkB7B,MAAMH,CAA4B,CACvC,YACmBI,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,IAAI,qBAAqB,EACzE,SAAI,0BAAuBA,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": ["BuildTransactionContextTask_exports", "__export", "BuildTransactionContextTask", "__toCommonJS", "import_device_management_kit", "import_GetChallengeCommand", "api", "args", "contextModule", "options", "deviceState", "challenge", "challengeRes", "err", "ctx"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var n=require("@ledgerhq/device-management-kit"),c=require("purify-ts"),e=require("vitest"),i=require("../../app-binder/command/GetChallengeCommand"),l=require("./BuildTransactionContextTask");const a={getSolanaContext:e.vi.fn(),getContext:e.vi.fn(),getContexts:e.vi.fn(),getTypedDataFilters:e.vi.fn(),getWeb3Checks:e.vi.fn()},d={contextModule:a,options:{tokenAddress:"someAddress",createATA:void 0}},t={descriptor:new Uint8Array([1,2,3]),tokenAccount:"someTokenAccount",owner:"someOwner",contract:"someContract",certificate:{payload:new Uint8Array([170,187]),keyUsageNumber:1}};let o;(0,e.describe)("BuildTransactionContextTask",()=>{(0,e.beforeEach)(()=>{e.vi.resetAllMocks(),o={getDeviceSessionState:e.vi.fn().mockReturnValue({deviceModelId:n.DeviceModelId.NANO_X}),sendCommand:e.vi.fn().mockResolvedValue({status:n.CommandResultStatus.Success,data:{challenge:"someChallenge"}})}}),(0,e.it)("returns context successfully when challenge command succeeds",async()=>{a.getSolanaContext.mockResolvedValue((0,c.Right)(t));const s=await new l.BuildTransactionContextTask(o,d).run();(0,e.expect)(o.sendCommand).toHaveBeenCalledWith(e.expect.any(i.GetChallengeCommand)),(0,e.expect)(a.getSolanaContext).toHaveBeenCalledWith({deviceModelId:n.DeviceModelId.NANO_X,tokenAddress:"someAddress",challenge:"someChallenge",createATA:void 0}),(0,e.expect)(s).toEqual({challenge:"someChallenge",descriptor:t.descriptor,calCertificate:t.certificate,addressResult:{tokenAccount:t.tokenAccount,owner:t.owner,contract:t.contract}})}),(0,e.it)("returns context when challenge command fails",async()=>{o.sendCommand.mockResolvedValue({status:n.CommandResultStatus.Error,data:{}}),a.getSolanaContext.mockResolvedValue((0,c.Right)(t));const s=await new l.BuildTransactionContextTask(o,d).run();(0,e.expect)(a.getSolanaContext).toHaveBeenCalledWith({deviceModelId:n.DeviceModelId.NANO_X,tokenAddress:"someAddress",challenge:void 0,createATA:void 0}),(0,e.expect)(s).toEqual({challenge:void 0,descriptor:t.descriptor,calCertificate:t.certificate,addressResult:{tokenAccount:t.tokenAccount,owner:t.owner,contract:t.contract}})}),(0,e.it)("throws if getSolanaContext returns Left",async()=>{const r=new Error("Solana context failure");a.getSolanaContext.mockResolvedValue((0,c.Left)(r));const s=new l.BuildTransactionContextTask(o,d);await(0,e.expect)(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,IAAAA,EAIO,2CACPC,EAA4B,qBAC5BC,EAAqD,kBAErDC,EAAoC,4DAEpCC,EAGO,yCAEP,MAAMC,EAAmC,CACvC,iBAAkB,KAAG,GAAG,EACxB,WAAY,KAAG,GAAG,EAClB,YAAa,KAAG,GAAG,EACnB,oBAAqB,KAAG,GAAG,EAC3B,cAAe,KAAG,GAAG,CACvB,EAEMC,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,KAEJ,YAAS,8BAA+B,IAAM,IAC5C,cAAW,IAAM,CACf,KAAG,cAAc,EAEjBA,EAAU,CACR,sBAAuB,KACpB,GAAG,EACH,gBAAgB,CAAE,cAAe,gBAAc,MAAO,CAAC,EAC1D,YAAa,KAAG,GAAG,EAAE,kBAAkB,CACrC,OAAQ,sBAAoB,QAC5B,KAAM,CAAE,UAAW,eAAgB,CACrC,CAAC,CACH,CACF,CAAC,KAED,MAAG,+DAAgE,SAAY,CAC5EH,EAAkB,iBAAyB,qBAC1C,SAAME,CAAmB,CAC3B,EAGA,MAAME,EAAS,MADF,IAAI,8BAA4BD,EAASF,CAAW,EACvC,IAAI,KAE9B,UAAOE,EAAQ,WAAW,EAAE,qBAC1B,SAAO,IAAI,qBAAmB,CAChC,KAEA,UAAOH,EAAkB,gBAAgB,EAAE,qBAAqB,CAC9D,cAAe,gBAAc,OAC7B,aAAc,cACd,UAAW,gBACX,UAAW,MACb,CAAC,KAED,UAAOI,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,KAED,MAAG,+CAAgD,SAAY,CAC5DC,EAAQ,YAAoB,kBAAkB,CAC7C,OAAQ,sBAAoB,MAC5B,KAAM,CAAC,CACT,CAAC,EACAH,EAAkB,iBAAyB,qBAC1C,SAAME,CAAmB,CAC3B,EAGA,MAAME,EAAS,MADF,IAAI,8BAA4BD,EAASF,CAAW,EACvC,IAAI,KAE9B,UAAOD,EAAkB,gBAAgB,EAAE,qBAAqB,CAC9D,cAAe,gBAAc,OAC7B,aAAc,cACd,UAAW,OACX,UAAW,MACb,CAAC,KAED,UAAOI,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,KAED,MAAG,0CAA2C,SAAY,CACxD,MAAMG,EAAQ,IAAI,MAAM,wBAAwB,EAC/CL,EAAkB,iBAAyB,qBAAkB,QAAKK,CAAK,CAAC,EAEzE,MAAMC,EAAO,IAAI,8BAA4BH,EAASF,CAAW,EAEjE,QAAM,UAAOK,EAAK,IAAI,CAAC,EAAE,QAAQ,QAAQ,wBAAwB,CACnE,CAAC,CACH,CAAC",
|
|
6
|
+
"names": ["import_device_management_kit", "import_purify_ts", "import_vitest", "import_GetChallengeCommand", "import_BuildTransactionContextTask", "contextModuleMock", "defaultArgs", "domainSolanaPayload", "apiMock", "result", "error", "task"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var i=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var y=Object.prototype.hasOwnProperty;var C=(o,t)=>{for(var e in t)i(o,e,{get:t[e],enumerable:!0})},f=(o,t,e,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of l(t))!y.call(o,r)&&r!==e&&i(o,r,{get:()=>t[r],enumerable:!(a=d(t,r))||a.enumerable});return o};var u=o=>f(i({},"__esModule",{value:!0}),o);var P={};C(P,{ProvideSolanaTransactionContextTask:()=>v});module.exports=u(P);var n=require("@ledgerhq/device-management-kit"),s=require("purify-ts"),m=require("../../app-binder/command/ProvideTLVDescriptorCommand"),c=require("../../app-binder/command/ProvideTrustedNamePKICommand");class v{constructor(t,e){this.api=t;this.context=e}async run(){const{descriptor:t,certificate:e}=this.context,{payload:a}=e,r=await this.api.sendCommand(new c.ProvideTrustedNamePKICommand({pkiBlob:a}));if(!(0,n.isSuccessCommandResult)(r))throw r;const p=await this.api.sendCommand(new m.ProvideTLVDescriptorCommand({payload:t}));if(!(0,n.isSuccessCommandResult)(p))throw p;return s.Nothing}}0&&(module.exports={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": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,yCAAAE,IAAA,eAAAC,EAAAH,GACA,IAAAI,EAIO,2CACPC,EAAoC,qBAEpCC,EAA4C,oEAC5CC,EAA6C,qEAQtC,MAAML,CAAoC,CAC/C,YACmBM,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,IAAI,+BAA6B,CAC/B,QAASD,CACX,CAAC,CACH,EACA,GAAI,IAAC,0BAAuBC,CAAS,EACnC,MAAMA,EAIR,MAAMC,EAAY,MAAM,KAAK,IAAI,YAC/B,IAAI,8BAA4B,CAAE,QAASJ,CAAW,CAAC,CACzD,EACA,GAAI,IAAC,0BAAuBI,CAAS,EACnC,MAAMA,EAGR,OAAO,SACT,CACF",
|
|
6
|
+
"names": ["ProvideTransactionContextTask_exports", "__export", "ProvideSolanaTransactionContextTask", "__toCommonJS", "import_device_management_kit", "import_purify_ts", "import_ProvideTLVDescriptorCommand", "import_ProvideTrustedNamePKICommand", "api", "context", "descriptor", "certificate", "certificatePayload", "pkiResult", "tlvResult"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var t=require("@ledgerhq/device-management-kit"),r=require("purify-ts"),e=require("vitest"),k=require("../../app-binder/command/ProvideTLVDescriptorCommand"),p=require("../../app-binder/command/ProvideTrustedNamePKICommand"),m=require("./ProvideTransactionContextTask");(0,e.describe)("ProvideSolanaTransactionContextTask",()=>{let o,s;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"};(0,e.beforeEach)(()=>{e.vi.resetAllMocks(),o={sendCommand:e.vi.fn()},s={descriptor:d,certificate:l}}),(0,e.it)("returns Nothing when both commands succeed",async()=>{const a=(0,t.CommandResultFactory)({data:r.Maybe.of(null)});o.sendCommand.mockResolvedValue(a);const c=await new m.ProvideSolanaTransactionContextTask(o,s).run();(0,e.expect)(o.sendCommand).toHaveBeenCalledTimes(2);const u=o.sendCommand.mock.calls[0];(0,e.expect)(u).toBeDefined();const C=u[0];(0,e.expect)(C).toBeInstanceOf(p.ProvideTrustedNamePKICommand),(0,e.expect)(C.args.pkiBlob).toStrictEqual(l.payload);const f=o.sendCommand.mock.calls[1][0];(0,e.expect)(f).toBeInstanceOf(k.ProvideTLVDescriptorCommand),(0,e.expect)(f.args.payload).toStrictEqual(d),(0,e.expect)(c).toStrictEqual(r.Nothing)}),(0,e.it)("throws error if PKI command fails",async()=>{const a=(0,t.CommandResultFactory)({error:i});o.sendCommand.mockResolvedValueOnce(a);const n=new m.ProvideSolanaTransactionContextTask(o,s);await(0,e.expect)(n.run()).rejects.toBe(a),(0,e.expect)(o.sendCommand).toHaveBeenCalledTimes(1)}),(0,e.it)("throws error if TLV command fails",async()=>{const a=(0,t.CommandResultFactory)({data:r.Maybe.of(null)}),n=(0,t.CommandResultFactory)({error:i});o.sendCommand.mockResolvedValueOnce(a).mockResolvedValueOnce(n);const c=new m.ProvideSolanaTransactionContextTask(o,s);await(0,e.expect)(c.run()).rejects.toBe(n),(0,e.expect)(o.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,IAAAA,EAAqC,2CACrCC,EAA+B,qBAC/BC,EAAgE,kBAEhEC,EAA4C,oEAC5CC,EAA6C,qEAE7CC,EAGO,8CAEP,YAAS,sCAAuC,IAAM,CACpD,IAAIC,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,KAE1E,cAAW,IAAM,CACf,KAAG,cAAc,EACjBJ,EAAU,CACR,YAAa,KAAG,GAAG,CACrB,EACAC,EAAU,CACR,WAAYC,EACZ,YAAaC,CACf,CACF,CAAC,KAED,MAAG,6CAA8C,SAAY,CAE3D,MAAME,KAAgB,wBAAqB,CAAE,KAAM,QAAM,GAAG,IAAI,CAAE,CAAC,EACnEL,EAAQ,YAAY,kBAAkBK,CAAa,EAQnD,MAAMC,EAAS,MANF,IAAI,sCACfN,EACAC,CACF,EAG0B,IAAI,KAG9B,UAAOD,EAAQ,WAAW,EAAE,sBAAsB,CAAC,EAEnD,MAAMO,EAAgBP,EAAQ,YAAY,KAAK,MAAM,CAAC,KACtD,UAAOO,CAAa,EAAE,YAAY,EAClC,MAAMC,EAAeD,EAAe,CAAC,KACrC,UAAOC,CAAY,EAAE,eAAe,8BAA4B,KAChE,UACGA,EAA8C,KAAK,OACtD,EAAE,cAAcL,EAAiB,OAAO,EAExC,MAAMM,EAAgBT,EAAQ,YAAY,KAAK,MAAM,CAAC,EAAG,CAAC,KAC1D,UAAOS,CAAa,EAAE,eAAe,6BAA2B,KAChE,UACGA,EAA8C,KAAK,OACtD,EAAE,cAAcP,CAAe,KAE/B,UAAOI,CAAM,EAAE,cAAc,SAAO,CACtC,CAAC,KAED,MAAG,oCAAqC,SAAY,CAClD,MAAMI,KAAc,wBAAqB,CAAE,MAAON,CAAU,CAAC,EAC7DJ,EAAQ,YAAY,sBAAsBU,CAAW,EAErD,MAAMC,EAAO,IAAI,sCACfX,EACAC,CACF,EAEA,QAAM,UAAOU,EAAK,IAAI,CAAC,EAAE,QAAQ,KAAKD,CAAW,KACjD,UAAOV,EAAQ,WAAW,EAAE,sBAAsB,CAAC,CACrD,CAAC,KAED,MAAG,oCAAqC,SAAY,CAClD,MAAMK,KAAgB,wBAAqB,CAAE,KAAM,QAAM,GAAG,IAAI,CAAE,CAAC,EAC7DO,KAAiB,wBAAqB,CAAE,MAAOR,CAAU,CAAC,EAEhEJ,EAAQ,YACL,sBAAsBK,CAAa,EACnC,sBAAsBO,CAAc,EAEvC,MAAMD,EAAO,IAAI,sCACfX,EACAC,CACF,EAEA,QAAM,UAAOU,EAAK,IAAI,CAAC,EAAE,QAAQ,KAAKC,CAAc,KACpD,UAAOZ,EAAQ,WAAW,EAAE,sBAAsB,CAAC,CACrD,CAAC,CACH,CAAC",
|
|
6
|
+
"names": ["import_device_management_kit", "import_purify_ts", "import_vitest", "import_ProvideTLVDescriptorCommand", "import_ProvideTrustedNamePKICommand", "import_ProvideTransactionContextTask", "fakeApi", "context", "dummyDescriptor", "dummyCertificate", "mockError", "successResult", "result", "firstCallCall", "firstCallArg", "secondCallArg", "errorResult", "task", "tlvErrorResult"]
|
|
7
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var A=Object.create;var d=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var S=Object.getPrototypeOf,T=Object.prototype.hasOwnProperty;var D=(a,e)=>{for(var t in e)d(a,t,{get:e[t],enumerable:!0})},f=(a,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of b(e))!T.call(a,r)&&r!==t&&d(a,r,{get:()=>e[r],enumerable:!(o=h(e,r))||o.enumerable});return a};var U=(a,e,t)=>(t=a!=null?A(S(a)):{},f(e||!a||!a.__esModule?d(t,"default",{value:a,enumerable:!0}):t,a)),B=a=>f(d({},"__esModule",{value:!0}),a);var C={};D(C,{MAX_MESSAGE_LENGTH:()=>y,SendSignMessageTask:()=>w});module.exports=B(C);var n=require("@ledgerhq/device-management-kit"),g=require("@ledgerhq/signer-utils"),l=U(require("bs58")),p=require("../../app-binder/command/GetPubKeyCommand"),c=require("../../app-binder/command/SignOffChainMessageCommand");const y=65535;class w{constructor(e,t){this.api=e;this.args=t}async run(){const{sendingData:e,derivationPath:t}=this.args;if(e.length===0)return(0,n.CommandResultFactory)({error:new n.InvalidStatusWordError("Message cannot be empty")});if(e.length>y)return(0,n.CommandResultFactory)({error:new n.InvalidStatusWordError(`Message too long: ${e.length} bytes (max is 65535)`)});const o=g.DerivationPathUtils.splitPath(t),r=await this.api.sendCommand(new p.GetPubKeyCommand({derivationPath:t,checkOnDevice:!1}));if(!("data"in r))return(0,n.CommandResultFactory)({error:new n.InvalidStatusWordError("Error getting public key from device")});const u=l.default.decode(r.data),i=this._buildFullMessage(e,u),s=this._buildApduCommand(i,o);return s.length>n.APDU_MAX_PAYLOAD?(0,n.CommandResultFactory)({error:new n.InvalidStatusWordError("The APDU command exceeds the maximum allowable size (255 bytes)")}):this.api.sendCommand(new c.SignOffChainMessageCommand({message:s}))}_buildFullMessage(e,t){return new n.ByteArrayBuilder().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 u=t.length*4,i=new n.ByteArrayBuilder(e.length+1+1+u);return i.add8BitUIntToData(1),i.add8BitUIntToData(t.length),t.forEach(s=>{const m=new Uint8Array(4);new DataView(m.buffer).setUint32(0,s,!1),i.addBufferToData(m)}),i.addBufferToData(e),i.build()}}0&&(module.exports={MAX_MESSAGE_LENGTH,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": "
|
|
6
|
-
"names": ["SendSignMessageTask_exports", "__export", "SendSignMessageTask", "__toCommonJS", "import_device_management_kit", "import_signer_utils", "import_SignOffChainMessageCommand", "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": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,wBAAAE,EAAA,wBAAAC,IAAA,eAAAC,EAAAJ,GAAA,IAAAK,EAOO,2CACPC,EAAoC,kCACpCC,EAAiB,mBAGjBC,EAAiC,yDACjCC,EAA2C,mEAYpC,MAAMP,EAAqB,MAE3B,MAAMC,CAAoB,CAC/B,YACUO,EACAC,EACR,CAFQ,SAAAD,EACA,UAAAC,CACP,CAEH,MAAM,KAA4C,CAChD,KAAM,CAAE,YAAAC,EAAa,eAAAC,CAAe,EAAI,KAAK,KAE7C,GAAID,EAAY,SAAW,EACzB,SAAO,wBAAqB,CAC1B,MAAO,IAAI,yBAAuB,yBAAyB,CAC7D,CAAC,EAGH,GAAIA,EAAY,OAASV,EACvB,SAAO,wBAAqB,CAC1B,MAAO,IAAI,yBACT,qBAAqBU,EAAY,MAAM,uBACzC,CACF,CAAC,EAGH,MAAME,EAAc,sBAAoB,UAAUD,CAAc,EAE1DE,EAAe,MAAM,KAAK,IAAI,YAClC,IAAI,mBAAiB,CAAE,eAAAF,EAAgB,cAAe,EAAM,CAAC,CAC/D,EAEA,GAAI,EAAE,SAAUE,GACd,SAAO,wBAAqB,CAC1B,MAAO,IAAI,yBACT,sCACF,CACF,CAAC,EAGH,MAAMC,EAAe,EAAAC,QAAK,OAAOF,EAAa,IAAI,EAC5CG,EAAc,KAAK,kBAAkBN,EAAaI,CAAY,EAC9DG,EAAgB,KAAK,kBAAkBD,EAAaJ,CAAW,EAErE,OAAIK,EAAc,OAAS,sBAClB,wBAAqB,CAC1B,MAAO,IAAI,yBACT,iEACF,CACF,CAAC,EAGI,KAAK,IAAI,YACd,IAAI,6BAA2B,CAAE,QAASA,CAAc,CAAC,CAC3D,CACF,CAKQ,kBACNP,EACAI,EACY,CACZ,OACE,IAAI,mBAAiB,EAElB,kBAAkB,GAAI,EACtB,qBAAqB,iBAAiB,EAEtC,kBAAkB,CAAC,EAEnB,gBAAgB,IAAI,WAAW,EAAE,CAAC,EAElC,kBAAkB,CAAC,EAEnB,kBAAkB,CAAC,EAEnB,gBAAgBA,CAAY,EAE5B,kBAAkBJ,EAAY,OAAS,GAAI,EAC3C,kBAAmBA,EAAY,QAAU,EAAK,GAAI,EAElD,gBAAgBA,CAAW,EAC3B,MAAM,CAEb,CAKQ,kBACNM,EACAE,EACY,CAGZ,MAAMC,EAAYD,EAAM,OAAS,EAC3BE,EAAU,IAAI,mBAClBJ,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": ["SendSignMessageTask_exports", "__export", "MAX_MESSAGE_LENGTH", "SendSignMessageTask", "__toCommonJS", "import_device_management_kit", "import_signer_utils", "import_bs58", "import_GetPubKeyCommand", "import_SignOffChainMessageCommand", "api", "args", "sendingData", "derivationPath", "pathIndexes", "pubkeyResult", "signerPubkey", "bs58", "fullMessage", "commandBuffer", "paths", "pathBytes", "builder", "idx", "buf"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var w=Object.create;var m=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var v=Object.getPrototypeOf,f=Object.prototype.hasOwnProperty;var A=(e,a,n,o)=>{if(a&&typeof a=="object"||typeof a=="function")for(let r of p(a))!f.call(e,r)&&r!==n&&m(e,r,{get:()=>a[r],enumerable:!(o=y(a,r))||o.enumerable});return e};var C=(e,a,n)=>(n=e!=null?w(v(e)):{},A(a||!e||!e.__esModule?m(n,"default",{value:e,enumerable:!0}):n,e));var t=require("@ledgerhq/device-management-kit"),u=C(require("bs58")),g=require("../../app-binder/device-action/__test-utils__/makeInternalApi"),s=require("../../app-binder/task/SendSignMessageTask");const c="44'/501'/0'/0'",x=new Uint8Array(32).fill(0),l=u.default.encode(x),i=new Uint8Array([240,202,204,26]);describe("SendSignMessageTask",()=>{const e=(0,g.makeDeviceActionInternalApiMock)();beforeEach(()=>{vi.resetAllMocks()}),describe("run()",()=>{it("should error on empty message before any device call",async()=>{const a={derivationPath:c,sendingData:new Uint8Array([])},n=await new s.SendSignMessageTask(e,a).run();expect(e.sendCommand).toHaveBeenCalledTimes(0),expect(n.error).toEqual(new t.InvalidStatusWordError("Message cannot be empty"))}),it("should return error if GET_PUBKEY fails",async()=>{e.sendCommand.mockResolvedValueOnce((0,t.CommandResultFactory)({error:new t.InvalidStatusWordError("pubkey error")}));const a={derivationPath:c,sendingData:i},n=await new s.SendSignMessageTask(e,a).run();expect(e.sendCommand).toHaveBeenCalledTimes(1),expect(n.error).toEqual(new t.InvalidStatusWordError("Error getting public key from device"))}),it("should return error if SignOffChainMessageCommand fails",async()=>{e.sendCommand.mockResolvedValueOnce((0,t.CommandResultFactory)({data:l})).mockResolvedValueOnce((0,t.CommandResultFactory)({error:new t.InvalidStatusWordError("no signature returned")}));const a={derivationPath:c,sendingData:i},n=await new s.SendSignMessageTask(e,a).run();expect(e.sendCommand).toHaveBeenCalledTimes(2),expect(n.error).toEqual(new t.InvalidStatusWordError("no signature returned"))}),it("should return success when signing succeeds",async()=>{const a=new Uint8Array([240,202,204,26]);e.sendCommand.mockResolvedValueOnce((0,t.CommandResultFactory)({data:l})).mockResolvedValueOnce((0,t.CommandResultFactory)({data:a}));const n={derivationPath:c,sendingData:i},o=await new s.SendSignMessageTask(e,n).run();expect(e.sendCommand).toHaveBeenCalledTimes(2),expect(o.data).toEqual(a)}),it("should reject invalid derivation path",async()=>{const a={derivationPath:"not/a/path",sendingData:i};await expect(new s.SendSignMessageTask(e,a).run()).rejects.toThrow()}),it("should correctly build APDU command lengths",()=>{const a=new s.SendSignMessageTask(e,{derivationPath:c,sendingData:i}),n=a._buildFullMessage(i,x),o=[-2147483604,-2147483147,-2147483648,0],r=a._buildApduCommand(n,o),d=2+o.length*4+n.length;expect(r.length).toBe(d)}),it("should handle maximum allowed message length",async()=>{const r=new Uint8Array(152).fill(1),d=new Uint8Array([240,202,204,26]);e.sendCommand.mockResolvedValueOnce((0,t.CommandResultFactory)({data:l})).mockResolvedValueOnce((0,t.CommandResultFactory)({data:d}));const h=await new s.SendSignMessageTask(e,{derivationPath:c,sendingData:r}).run();expect(e.sendCommand).toHaveBeenCalledTimes(2),expect(h.data).toEqual(d)}),it("should error on message exceeding 16-bit length (65535)",async()=>{const a=new Uint8Array(s.MAX_MESSAGE_LENGTH+1).fill(170),n={derivationPath:c,sendingData:a},o=await new s.SendSignMessageTask(e,n).run();expect(e.sendCommand).toHaveBeenCalledTimes(0),expect(o.error).toEqual(new t.InvalidStatusWordError(`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": ["import_device_management_kit", "import_makeInternalApi", "import_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": ["import_device_management_kit", "import_bs58", "import_makeInternalApi", "import_SendSignMessageTask", "DERIVATION_PATH", "PUBKEY", "PUBKEY_BASE58", "bs58", "MESSAGE", "apiMock", "args", "result", "mockSig", "task", "fullMsg", "paths", "apdu", "expectedLen", "bigMsg", "tooBig"]
|
|
7
7
|
}
|
package/lib/cjs/internal/di.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var a=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var u=(o,e)=>{for(var n in e)a(o,n,{get:e[n],enumerable:!0})},C=(o,e,n,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of c(e))!l.call(o,i)&&i!==n&&a(o,i,{get:()=>e[i],enumerable:!(t=p(e,i))||t.enumerable});return o};var M=o=>C(a({},"__esModule",{value:!0}),o);var y={};u(y,{makeContainer:()=>x});module.exports=M(y);var s=require("inversify"),d=require("./app-binder/di/appBinderModule"),m=require("./use-cases/di/useCasesModule"),r=require("./externalTypes");const x=({dmk:o,sessionId:e,contextModule:n})=>{const t=new s.Container;return t.bind(r.externalTypes.Dmk).toConstantValue(o),t.bind(r.externalTypes.SessionId).toConstantValue(e),t.bind(r.externalTypes.ContextModule).toConstantValue(n),t.loadSync((0,d.appBinderModuleFactory)(),(0,m.useCasesModuleFactory)()),t};0&&(module.exports={makeContainer});
|
|
2
2
|
//# sourceMappingURL=di.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/internal/di.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type DeviceManagementKit,\n type DeviceSessionId,\n} from \"@ledgerhq/device-management-kit\";\nimport { Container } from \"inversify\";\n\
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,mBAAAE,IAAA,eAAAC,EAAAH,
|
|
6
|
-
"names": ["di_exports", "__export", "makeContainer", "__toCommonJS", "import_inversify", "import_appBinderModule", "import_useCasesModule", "import_externalTypes", "dmk", "sessionId", "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": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,mBAAAE,IAAA,eAAAC,EAAAH,GAKA,IAAAI,EAA0B,qBAE1BC,EAAuC,2CACvCC,EAAsC,yCACtCC,EAA8B,2BAOvB,MAAML,EAAgB,CAAC,CAC5B,IAAAM,EACA,UAAAC,EACA,cAAAC,CACF,IAA0B,CACxB,MAAMC,EAAY,IAAI,YAEtB,OAAAA,EAAU,KAA0B,gBAAc,GAAG,EAAE,gBAAgBH,CAAG,EAC1EG,EACG,KAAsB,gBAAc,SAAS,EAC7C,gBAAgBF,CAAS,EAC5BE,EACG,KAAoB,gBAAc,aAAa,EAC/C,gBAAgBD,CAAa,EAEhCC,EAAU,YAAS,0BAAuB,KAAG,yBAAsB,CAAC,EAE7DA,CACT",
|
|
6
|
+
"names": ["di_exports", "__export", "makeContainer", "__toCommonJS", "import_inversify", "import_appBinderModule", "import_useCasesModule", "import_externalTypes", "dmk", "sessionId", "contextModule", "container"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var n=Object.defineProperty;var
|
|
1
|
+
"use strict";var n=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var r=Object.getOwnPropertyNames;var S=Object.prototype.hasOwnProperty;var d=(e,o)=>{for(var l in o)n(e,l,{get:o[l],enumerable:!0})},x=(e,o,l,s)=>{if(o&&typeof o=="object"||typeof o=="function")for(let t of r(o))!S.call(e,t)&&t!==l&&n(e,t,{get:()=>o[t],enumerable:!(s=m(o,t))||s.enumerable});return e};var y=e=>x(n({},"__esModule",{value:!0}),e);var f={};d(f,{externalTypes:()=>b});module.exports=y(f);const b={Dmk:Symbol.for("Dmk"),SessionId:Symbol.for("SessionId"),ContextModule:Symbol.for("ContextModule")};0&&(module.exports={externalTypes});
|
|
2
2
|
//# sourceMappingURL=externalTypes.js.map
|