@ledgerhq/device-signer-kit-cosmos 0.0.0-develop-20260228001144
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/LICENSE.MD +202 -0
- package/README.md +303 -0
- package/lib/cjs/api/SignerCosmos.js +2 -0
- package/lib/cjs/api/SignerCosmos.js.map +7 -0
- package/lib/cjs/api/SignerCosmosBuilder.js +2 -0
- package/lib/cjs/api/SignerCosmosBuilder.js.map +7 -0
- package/lib/cjs/api/SignerCosmosBuilder.test.js +2 -0
- package/lib/cjs/api/SignerCosmosBuilder.test.js.map +7 -0
- package/lib/cjs/api/app-binder/GetAddressDeviceActionTypes.js +2 -0
- package/lib/cjs/api/app-binder/GetAddressDeviceActionTypes.js.map +7 -0
- package/lib/cjs/api/app-binder/GetAppConfigDeviceActionTypes.js +2 -0
- package/lib/cjs/api/app-binder/GetAppConfigDeviceActionTypes.js.map +7 -0
- package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js +2 -0
- package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js.map +7 -0
- package/lib/cjs/api/index.js +2 -0
- package/lib/cjs/api/index.js.map +7 -0
- package/lib/cjs/api/model/AppConfig.js +2 -0
- package/lib/cjs/api/model/AppConfig.js.map +7 -0
- package/lib/cjs/api/model/JsonObject.js +2 -0
- package/lib/cjs/api/model/JsonObject.js.map +7 -0
- package/lib/cjs/api/model/JsonTransactionFormat.js +2 -0
- package/lib/cjs/api/model/JsonTransactionFormat.js.map +7 -0
- package/lib/cjs/api/model/PubKey.js +2 -0
- package/lib/cjs/api/model/PubKey.js.map +7 -0
- package/lib/cjs/api/model/Signature.js +2 -0
- package/lib/cjs/api/model/Signature.js.map +7 -0
- package/lib/cjs/index.js +2 -0
- package/lib/cjs/index.js.map +7 -0
- package/lib/cjs/internal/DefaultSignerCosmos.js +2 -0
- package/lib/cjs/internal/DefaultSignerCosmos.js.map +7 -0
- package/lib/cjs/internal/DefaultSignerCosmos.test.js +2 -0
- package/lib/cjs/internal/DefaultSignerCosmos.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/CosmosAppBinder.js +2 -0
- package/lib/cjs/internal/app-binder/CosmosAppBinder.js.map +7 -0
- package/lib/cjs/internal/app-binder/CosmosAppBinder.test.js +2 -0
- package/lib/cjs/internal/app-binder/CosmosAppBinder.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/command/GetAddressCommand.js +2 -0
- package/lib/cjs/internal/app-binder/command/GetAddressCommand.js.map +7 -0
- package/lib/cjs/internal/app-binder/command/GetAddressCommand.test.js +2 -0
- package/lib/cjs/internal/app-binder/command/GetAddressCommand.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/command/GetAppConfigCommand.js +2 -0
- package/lib/cjs/internal/app-binder/command/GetAppConfigCommand.js.map +7 -0
- package/lib/cjs/internal/app-binder/command/GetAppConfigCommand.test.js +2 -0
- package/lib/cjs/internal/app-binder/command/GetAppConfigCommand.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/command/SignTransactionCommand.js +2 -0
- package/lib/cjs/internal/app-binder/command/SignTransactionCommand.js.map +7 -0
- package/lib/cjs/internal/app-binder/command/SignTransactionCommand.test.js +2 -0
- package/lib/cjs/internal/app-binder/command/SignTransactionCommand.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/command/utils/CosmosApplicationError.test.js +2 -0
- package/lib/cjs/internal/app-binder/command/utils/CosmosApplicationError.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/command/utils/CosmosApplicationErrors.js +2 -0
- package/lib/cjs/internal/app-binder/command/utils/CosmosApplicationErrors.js.map +7 -0
- package/lib/cjs/internal/app-binder/command/utils/EncodeDerivationPath.js +2 -0
- package/lib/cjs/internal/app-binder/command/utils/EncodeDerivationPath.js.map +7 -0
- package/lib/cjs/internal/app-binder/command/utils/EncodeDerivationPath.test.js +2 -0
- package/lib/cjs/internal/app-binder/command/utils/EncodeDerivationPath.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/di/appBinderModule.js +2 -0
- package/lib/cjs/internal/app-binder/di/appBinderModule.js.map +7 -0
- package/lib/cjs/internal/app-binder/di/appBinderModule.test.js +2 -0
- package/lib/cjs/internal/app-binder/di/appBinderModule.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/di/appBinderTypes.js +2 -0
- package/lib/cjs/internal/app-binder/di/appBinderTypes.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/SignTransactionTask.js +2 -0
- package/lib/cjs/internal/app-binder/task/SignTransactionTask.js.map +7 -0
- package/lib/cjs/internal/app-binder/task/SignTransactionTask.test.js +2 -0
- package/lib/cjs/internal/app-binder/task/SignTransactionTask.test.js.map +7 -0
- package/lib/cjs/internal/di.js +2 -0
- package/lib/cjs/internal/di.js.map +7 -0
- package/lib/cjs/internal/externalTypes.js +2 -0
- package/lib/cjs/internal/externalTypes.js.map +7 -0
- package/lib/cjs/internal/use-cases/address/GetAddressUseCase.js +2 -0
- package/lib/cjs/internal/use-cases/address/GetAddressUseCase.js.map +7 -0
- package/lib/cjs/internal/use-cases/address/GetAddressUseCase.test.js +2 -0
- package/lib/cjs/internal/use-cases/address/GetAddressUseCase.test.js.map +7 -0
- package/lib/cjs/internal/use-cases/address/di/addressModule.js +2 -0
- package/lib/cjs/internal/use-cases/address/di/addressModule.js.map +7 -0
- package/lib/cjs/internal/use-cases/address/di/addressModule.test.js +2 -0
- package/lib/cjs/internal/use-cases/address/di/addressModule.test.js.map +7 -0
- package/lib/cjs/internal/use-cases/address/di/addressTypes.js +2 -0
- package/lib/cjs/internal/use-cases/address/di/addressTypes.js.map +7 -0
- package/lib/cjs/internal/use-cases/config/GetAppConfigUseCase.js +2 -0
- package/lib/cjs/internal/use-cases/config/GetAppConfigUseCase.js.map +7 -0
- package/lib/cjs/internal/use-cases/config/GetAppConfigUseCase.test.js +2 -0
- package/lib/cjs/internal/use-cases/config/GetAppConfigUseCase.test.js.map +7 -0
- package/lib/cjs/internal/use-cases/config/di/configModule.js +2 -0
- package/lib/cjs/internal/use-cases/config/di/configModule.js.map +7 -0
- package/lib/cjs/internal/use-cases/config/di/configModule.test.js +2 -0
- package/lib/cjs/internal/use-cases/config/di/configModule.test.js.map +7 -0
- package/lib/cjs/internal/use-cases/config/di/configTypes.js +2 -0
- package/lib/cjs/internal/use-cases/config/di/configTypes.js.map +7 -0
- package/lib/cjs/internal/use-cases/transaction/SignTransactionUseCase.js +2 -0
- package/lib/cjs/internal/use-cases/transaction/SignTransactionUseCase.js.map +7 -0
- package/lib/cjs/internal/use-cases/transaction/SignTransactionUseCase.test.js +2 -0
- package/lib/cjs/internal/use-cases/transaction/SignTransactionUseCase.test.js.map +7 -0
- package/lib/cjs/internal/use-cases/transaction/di/transactionModule.js +2 -0
- package/lib/cjs/internal/use-cases/transaction/di/transactionModule.js.map +7 -0
- package/lib/cjs/internal/use-cases/transaction/di/transactionModule.test.js +2 -0
- package/lib/cjs/internal/use-cases/transaction/di/transactionModule.test.js.map +7 -0
- package/lib/cjs/internal/use-cases/transaction/di/transactionTypes.js +2 -0
- package/lib/cjs/internal/use-cases/transaction/di/transactionTypes.js.map +7 -0
- package/lib/cjs/package.json +60 -0
- package/lib/esm/api/SignerCosmos.js +1 -0
- package/lib/esm/api/SignerCosmos.js.map +7 -0
- package/lib/esm/api/SignerCosmosBuilder.js +2 -0
- package/lib/esm/api/SignerCosmosBuilder.js.map +7 -0
- package/lib/esm/api/SignerCosmosBuilder.test.js +2 -0
- package/lib/esm/api/SignerCosmosBuilder.test.js.map +7 -0
- package/lib/esm/api/app-binder/GetAddressDeviceActionTypes.js +1 -0
- package/lib/esm/api/app-binder/GetAddressDeviceActionTypes.js.map +7 -0
- package/lib/esm/api/app-binder/GetAppConfigDeviceActionTypes.js +1 -0
- package/lib/esm/api/app-binder/GetAppConfigDeviceActionTypes.js.map +7 -0
- package/lib/esm/api/app-binder/SignTransactionDeviceActionTypes.js +1 -0
- package/lib/esm/api/app-binder/SignTransactionDeviceActionTypes.js.map +7 -0
- package/lib/esm/api/index.js +2 -0
- package/lib/esm/api/index.js.map +7 -0
- package/lib/esm/api/model/AppConfig.js +1 -0
- package/lib/esm/api/model/AppConfig.js.map +7 -0
- package/lib/esm/api/model/JsonObject.js +1 -0
- package/lib/esm/api/model/JsonObject.js.map +7 -0
- package/lib/esm/api/model/JsonTransactionFormat.js +1 -0
- package/lib/esm/api/model/JsonTransactionFormat.js.map +7 -0
- package/lib/esm/api/model/PubKey.js +1 -0
- package/lib/esm/api/model/PubKey.js.map +7 -0
- package/lib/esm/api/model/Signature.js +1 -0
- package/lib/esm/api/model/Signature.js.map +7 -0
- package/lib/esm/index.js +2 -0
- package/lib/esm/index.js.map +7 -0
- package/lib/esm/internal/DefaultSignerCosmos.js +2 -0
- package/lib/esm/internal/DefaultSignerCosmos.js.map +7 -0
- package/lib/esm/internal/DefaultSignerCosmos.test.js +2 -0
- package/lib/esm/internal/DefaultSignerCosmos.test.js.map +7 -0
- package/lib/esm/internal/app-binder/CosmosAppBinder.js +2 -0
- package/lib/esm/internal/app-binder/CosmosAppBinder.js.map +7 -0
- package/lib/esm/internal/app-binder/CosmosAppBinder.test.js +2 -0
- package/lib/esm/internal/app-binder/CosmosAppBinder.test.js.map +7 -0
- package/lib/esm/internal/app-binder/command/GetAddressCommand.js +2 -0
- package/lib/esm/internal/app-binder/command/GetAddressCommand.js.map +7 -0
- package/lib/esm/internal/app-binder/command/GetAddressCommand.test.js +2 -0
- package/lib/esm/internal/app-binder/command/GetAddressCommand.test.js.map +7 -0
- package/lib/esm/internal/app-binder/command/GetAppConfigCommand.js +2 -0
- package/lib/esm/internal/app-binder/command/GetAppConfigCommand.js.map +7 -0
- package/lib/esm/internal/app-binder/command/GetAppConfigCommand.test.js +2 -0
- package/lib/esm/internal/app-binder/command/GetAppConfigCommand.test.js.map +7 -0
- package/lib/esm/internal/app-binder/command/SignTransactionCommand.js +2 -0
- package/lib/esm/internal/app-binder/command/SignTransactionCommand.js.map +7 -0
- package/lib/esm/internal/app-binder/command/SignTransactionCommand.test.js +2 -0
- package/lib/esm/internal/app-binder/command/SignTransactionCommand.test.js.map +7 -0
- package/lib/esm/internal/app-binder/command/utils/CosmosApplicationError.test.js +2 -0
- package/lib/esm/internal/app-binder/command/utils/CosmosApplicationError.test.js.map +7 -0
- package/lib/esm/internal/app-binder/command/utils/CosmosApplicationErrors.js +2 -0
- package/lib/esm/internal/app-binder/command/utils/CosmosApplicationErrors.js.map +7 -0
- package/lib/esm/internal/app-binder/command/utils/EncodeDerivationPath.js +2 -0
- package/lib/esm/internal/app-binder/command/utils/EncodeDerivationPath.js.map +7 -0
- package/lib/esm/internal/app-binder/command/utils/EncodeDerivationPath.test.js +2 -0
- package/lib/esm/internal/app-binder/command/utils/EncodeDerivationPath.test.js.map +7 -0
- package/lib/esm/internal/app-binder/di/appBinderModule.js +2 -0
- package/lib/esm/internal/app-binder/di/appBinderModule.js.map +7 -0
- package/lib/esm/internal/app-binder/di/appBinderModule.test.js +2 -0
- package/lib/esm/internal/app-binder/di/appBinderModule.test.js.map +7 -0
- package/lib/esm/internal/app-binder/di/appBinderTypes.js +2 -0
- package/lib/esm/internal/app-binder/di/appBinderTypes.js.map +7 -0
- package/lib/esm/internal/app-binder/task/SignTransactionTask.js +2 -0
- package/lib/esm/internal/app-binder/task/SignTransactionTask.js.map +7 -0
- package/lib/esm/internal/app-binder/task/SignTransactionTask.test.js +2 -0
- package/lib/esm/internal/app-binder/task/SignTransactionTask.test.js.map +7 -0
- package/lib/esm/internal/di.js +2 -0
- package/lib/esm/internal/di.js.map +7 -0
- package/lib/esm/internal/externalTypes.js +2 -0
- package/lib/esm/internal/externalTypes.js.map +7 -0
- package/lib/esm/internal/use-cases/address/GetAddressUseCase.js +2 -0
- package/lib/esm/internal/use-cases/address/GetAddressUseCase.js.map +7 -0
- package/lib/esm/internal/use-cases/address/GetAddressUseCase.test.js +2 -0
- package/lib/esm/internal/use-cases/address/GetAddressUseCase.test.js.map +7 -0
- package/lib/esm/internal/use-cases/address/di/addressModule.js +2 -0
- package/lib/esm/internal/use-cases/address/di/addressModule.js.map +7 -0
- package/lib/esm/internal/use-cases/address/di/addressModule.test.js +2 -0
- package/lib/esm/internal/use-cases/address/di/addressModule.test.js.map +7 -0
- package/lib/esm/internal/use-cases/address/di/addressTypes.js +2 -0
- package/lib/esm/internal/use-cases/address/di/addressTypes.js.map +7 -0
- package/lib/esm/internal/use-cases/config/GetAppConfigUseCase.js +2 -0
- package/lib/esm/internal/use-cases/config/GetAppConfigUseCase.js.map +7 -0
- package/lib/esm/internal/use-cases/config/GetAppConfigUseCase.test.js +2 -0
- package/lib/esm/internal/use-cases/config/GetAppConfigUseCase.test.js.map +7 -0
- package/lib/esm/internal/use-cases/config/di/configModule.js +2 -0
- package/lib/esm/internal/use-cases/config/di/configModule.js.map +7 -0
- package/lib/esm/internal/use-cases/config/di/configModule.test.js +2 -0
- package/lib/esm/internal/use-cases/config/di/configModule.test.js.map +7 -0
- package/lib/esm/internal/use-cases/config/di/configTypes.js +2 -0
- package/lib/esm/internal/use-cases/config/di/configTypes.js.map +7 -0
- package/lib/esm/internal/use-cases/transaction/SignTransactionUseCase.js +2 -0
- package/lib/esm/internal/use-cases/transaction/SignTransactionUseCase.js.map +7 -0
- package/lib/esm/internal/use-cases/transaction/SignTransactionUseCase.test.js +2 -0
- package/lib/esm/internal/use-cases/transaction/SignTransactionUseCase.test.js.map +7 -0
- package/lib/esm/internal/use-cases/transaction/di/transactionModule.js +2 -0
- package/lib/esm/internal/use-cases/transaction/di/transactionModule.js.map +7 -0
- package/lib/esm/internal/use-cases/transaction/di/transactionModule.test.js +2 -0
- package/lib/esm/internal/use-cases/transaction/di/transactionModule.test.js.map +7 -0
- package/lib/esm/internal/use-cases/transaction/di/transactionTypes.js +2 -0
- package/lib/esm/internal/use-cases/transaction/di/transactionTypes.js.map +7 -0
- package/lib/esm/package.json +60 -0
- package/lib/types/api/SignerCosmos.d.ts +16 -0
- package/lib/types/api/SignerCosmos.d.ts.map +1 -0
- package/lib/types/api/SignerCosmosBuilder.d.ts +22 -0
- package/lib/types/api/SignerCosmosBuilder.d.ts.map +1 -0
- package/lib/types/api/SignerCosmosBuilder.test.d.ts +2 -0
- package/lib/types/api/SignerCosmosBuilder.test.d.ts.map +1 -0
- package/lib/types/api/app-binder/GetAddressDeviceActionTypes.d.ts +10 -0
- package/lib/types/api/app-binder/GetAddressDeviceActionTypes.d.ts.map +1 -0
- package/lib/types/api/app-binder/GetAppConfigDeviceActionTypes.d.ts +10 -0
- package/lib/types/api/app-binder/GetAppConfigDeviceActionTypes.d.ts.map +1 -0
- package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts +12 -0
- package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts.map +1 -0
- package/lib/types/api/index.d.ts +7 -0
- package/lib/types/api/index.d.ts.map +1 -0
- package/lib/types/api/model/AppConfig.d.ts +6 -0
- package/lib/types/api/model/AppConfig.d.ts.map +1 -0
- package/lib/types/api/model/JsonObject.d.ts +6 -0
- package/lib/types/api/model/JsonObject.d.ts.map +1 -0
- package/lib/types/api/model/JsonTransactionFormat.d.ts +31 -0
- package/lib/types/api/model/JsonTransactionFormat.d.ts.map +1 -0
- package/lib/types/api/model/PubKey.d.ts +5 -0
- package/lib/types/api/model/PubKey.d.ts.map +1 -0
- package/lib/types/api/model/Signature.d.ts +2 -0
- package/lib/types/api/model/Signature.d.ts.map +1 -0
- package/lib/types/index.d.ts +3 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/internal/DefaultSignerCosmos.d.ts +18 -0
- package/lib/types/internal/DefaultSignerCosmos.d.ts.map +1 -0
- package/lib/types/internal/DefaultSignerCosmos.test.d.ts +2 -0
- package/lib/types/internal/DefaultSignerCosmos.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/CosmosAppBinder.d.ts +22 -0
- package/lib/types/internal/app-binder/CosmosAppBinder.d.ts.map +1 -0
- package/lib/types/internal/app-binder/CosmosAppBinder.test.d.ts +2 -0
- package/lib/types/internal/app-binder/CosmosAppBinder.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/GetAddressCommand.d.ts +27 -0
- package/lib/types/internal/app-binder/command/GetAddressCommand.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/GetAddressCommand.test.d.ts +2 -0
- package/lib/types/internal/app-binder/command/GetAddressCommand.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/GetAppConfigCommand.d.ts +17 -0
- package/lib/types/internal/app-binder/command/GetAppConfigCommand.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/GetAppConfigCommand.test.d.ts +2 -0
- package/lib/types/internal/app-binder/command/GetAppConfigCommand.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/SignTransactionCommand.d.ts +38 -0
- package/lib/types/internal/app-binder/command/SignTransactionCommand.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/SignTransactionCommand.test.d.ts +2 -0
- package/lib/types/internal/app-binder/command/SignTransactionCommand.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/utils/CosmosApplicationError.test.d.ts +2 -0
- package/lib/types/internal/app-binder/command/utils/CosmosApplicationError.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/utils/CosmosApplicationErrors.d.ts +22 -0
- package/lib/types/internal/app-binder/command/utils/CosmosApplicationErrors.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/utils/EncodeDerivationPath.d.ts +2 -0
- package/lib/types/internal/app-binder/command/utils/EncodeDerivationPath.d.ts.map +1 -0
- package/lib/types/internal/app-binder/command/utils/EncodeDerivationPath.test.d.ts +2 -0
- package/lib/types/internal/app-binder/command/utils/EncodeDerivationPath.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/di/appBinderModule.d.ts +3 -0
- package/lib/types/internal/app-binder/di/appBinderModule.d.ts.map +1 -0
- package/lib/types/internal/app-binder/di/appBinderModule.test.d.ts +2 -0
- package/lib/types/internal/app-binder/di/appBinderModule.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/di/appBinderTypes.d.ts +4 -0
- package/lib/types/internal/app-binder/di/appBinderTypes.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/SignTransactionTask.d.ts +17 -0
- package/lib/types/internal/app-binder/task/SignTransactionTask.d.ts.map +1 -0
- package/lib/types/internal/app-binder/task/SignTransactionTask.test.d.ts +2 -0
- package/lib/types/internal/app-binder/task/SignTransactionTask.test.d.ts.map +1 -0
- package/lib/types/internal/di.d.ts +9 -0
- package/lib/types/internal/di.d.ts.map +1 -0
- package/lib/types/internal/externalTypes.d.ts +6 -0
- package/lib/types/internal/externalTypes.d.ts.map +1 -0
- package/lib/types/internal/use-cases/address/GetAddressUseCase.d.ts +9 -0
- package/lib/types/internal/use-cases/address/GetAddressUseCase.d.ts.map +1 -0
- package/lib/types/internal/use-cases/address/GetAddressUseCase.test.d.ts +2 -0
- package/lib/types/internal/use-cases/address/GetAddressUseCase.test.d.ts.map +1 -0
- package/lib/types/internal/use-cases/address/di/addressModule.d.ts +3 -0
- package/lib/types/internal/use-cases/address/di/addressModule.d.ts.map +1 -0
- package/lib/types/internal/use-cases/address/di/addressModule.test.d.ts +2 -0
- package/lib/types/internal/use-cases/address/di/addressModule.test.d.ts.map +1 -0
- package/lib/types/internal/use-cases/address/di/addressTypes.d.ts +4 -0
- package/lib/types/internal/use-cases/address/di/addressTypes.d.ts.map +1 -0
- package/lib/types/internal/use-cases/config/GetAppConfigUseCase.d.ts +8 -0
- package/lib/types/internal/use-cases/config/GetAppConfigUseCase.d.ts.map +1 -0
- package/lib/types/internal/use-cases/config/GetAppConfigUseCase.test.d.ts +2 -0
- package/lib/types/internal/use-cases/config/GetAppConfigUseCase.test.d.ts.map +1 -0
- package/lib/types/internal/use-cases/config/di/configModule.d.ts +3 -0
- package/lib/types/internal/use-cases/config/di/configModule.d.ts.map +1 -0
- package/lib/types/internal/use-cases/config/di/configModule.test.d.ts +2 -0
- package/lib/types/internal/use-cases/config/di/configModule.test.d.ts.map +1 -0
- package/lib/types/internal/use-cases/config/di/configTypes.d.ts +4 -0
- package/lib/types/internal/use-cases/config/di/configTypes.d.ts.map +1 -0
- package/lib/types/internal/use-cases/transaction/SignTransactionUseCase.d.ts +9 -0
- package/lib/types/internal/use-cases/transaction/SignTransactionUseCase.d.ts.map +1 -0
- package/lib/types/internal/use-cases/transaction/SignTransactionUseCase.test.d.ts +2 -0
- package/lib/types/internal/use-cases/transaction/SignTransactionUseCase.test.d.ts.map +1 -0
- package/lib/types/internal/use-cases/transaction/di/transactionModule.d.ts +3 -0
- package/lib/types/internal/use-cases/transaction/di/transactionModule.d.ts.map +1 -0
- package/lib/types/internal/use-cases/transaction/di/transactionModule.test.d.ts +2 -0
- package/lib/types/internal/use-cases/transaction/di/transactionModule.test.d.ts.map +1 -0
- package/lib/types/internal/use-cases/transaction/di/transactionTypes.d.ts +4 -0
- package/lib/types/internal/use-cases/transaction/di/transactionTypes.d.ts.map +1 -0
- package/lib/types/tsconfig.prod.tsbuildinfo +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var i=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var b=Object.prototype.hasOwnProperty;var d=(r,e,p,y)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of a(e))!b.call(r,t)&&t!==p&&i(r,t,{get:()=>e[t],enumerable:!(y=s(e,t))||y.enumerable});return r};var n=r=>d(i({},"__esModule",{value:!0}),r);var u={};module.exports=n(u);
|
|
2
|
+
//# sourceMappingURL=PubKey.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var i=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var o=(t,r,n,a)=>{if(r&&typeof r=="object"||typeof r=="function")for(let e of y(r))!g.call(t,e)&&e!==n&&i(t,e,{get:()=>r[e],enumerable:!(a=p(r,e))||a.enumerable});return t};var u=t=>o(i({},"__esModule",{value:!0}),t);var x={};module.exports=u(x);
|
|
2
|
+
//# sourceMappingURL=Signature.js.map
|
package/lib/cjs/index.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var x=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var f=(r,o,t,i)=>{if(o&&typeof o=="object"||typeof o=="function")for(let m of b(o))!c.call(r,m)&&m!==t&&x(r,m,{get:()=>o[m],enumerable:!(i=a(o,m))||i.enumerable});return r},e=(r,o,t)=>(f(r,o,"default"),t&&f(t,o,"default"));var d=r=>f(x({},"__esModule",{value:!0}),r);var p={};module.exports=d(p);var h=require("reflect-metadata");e(p,require("./api/index"),module.exports);0&&(module.exports={...require("./api/index")});
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/index.ts"],
|
|
4
|
+
"sourcesContent": ["// inversify requirement\nimport \"reflect-metadata\";\n\nexport * from \"@api/index\";\n"],
|
|
5
|
+
"mappings": "iaAAA,IAAAA,EAAA,kBAAAC,EAAAD,GACA,IAAAE,EAAO,4BAEPC,EAAAH,EAAc,sBAHd",
|
|
6
|
+
"names": ["index_exports", "__toCommonJS", "import_reflect_metadata", "__reExport"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var o=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var C=Object.prototype.hasOwnProperty;var y=(r,e)=>{for(var t in e)o(r,t,{get:e[t],enumerable:!0})},d=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of c(e))!C.call(r,s)&&s!==t&&o(r,s,{get:()=>e[s],enumerable:!(n=g(e,s))||n.enumerable});return r};var f=r=>d(o({},"__esModule",{value:!0}),r);var u={};y(u,{DefaultSignerCosmos:()=>A});module.exports=f(u);var i=require("./di"),p=require("./use-cases/address/di/addressTypes"),a=require("./use-cases/config/di/configTypes"),m=require("./use-cases/transaction/di/transactionTypes");class A{_container;constructor({dmk:e,sessionId:t}){this._container=(0,i.makeContainer)({dmk:e,sessionId:t})}getAppConfig(){return this._container.get(a.configTypes.GetAppConfigUseCase).execute()}getAddress(e,t,n){return this._container.get(p.addressTypes.GetAddressUseCase).execute(e,t,n)}signTransaction(e,t,n,s){return this._container.get(m.transactionTypes.SignTransactionUseCase).execute(e,t,n,s)}}0&&(module.exports={DefaultSignerCosmos});
|
|
2
|
+
//# sourceMappingURL=DefaultSignerCosmos.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/internal/DefaultSignerCosmos.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n type DeviceManagementKit,\n type DeviceSessionId,\n} from \"@ledgerhq/device-management-kit\";\nimport { type Container } from \"inversify\";\n\nimport { type GetAddressDAReturnType } from \"@api/app-binder/GetAddressDeviceActionTypes\";\nimport { type GetAppConfigDAReturnType } from \"@api/app-binder/GetAppConfigDeviceActionTypes\";\nimport { type SignTransactionDAReturnType } from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport {\n type AddressOptions,\n type SignerCosmos,\n type TransactionOptions,\n} from \"@api/SignerCosmos\";\nimport { makeContainer } from \"@internal/di\";\nimport { addressTypes } from \"@internal/use-cases/address/di/addressTypes\";\nimport { type GetAddressUseCase } from \"@internal/use-cases/address/GetAddressUseCase\";\nimport { configTypes } from \"@internal/use-cases/config/di/configTypes\";\nimport { type GetAppConfigUseCase } from \"@internal/use-cases/config/GetAppConfigUseCase\";\nimport { transactionTypes } from \"@internal/use-cases/transaction/di/transactionTypes\";\nimport { type SignTransactionUseCase } from \"@internal/use-cases/transaction/SignTransactionUseCase\";\n\ntype DefaultSignerCosmosConstructorArgs = {\n dmk: DeviceManagementKit;\n sessionId: DeviceSessionId;\n};\n\nexport class DefaultSignerCosmos implements SignerCosmos {\n private readonly _container: Container;\n\n constructor({ dmk, sessionId }: DefaultSignerCosmosConstructorArgs) {\n this._container = makeContainer({ dmk, sessionId });\n }\n\n getAppConfig(): GetAppConfigDAReturnType {\n return this._container\n .get<GetAppConfigUseCase>(configTypes.GetAppConfigUseCase)\n .execute();\n }\n\n getAddress(\n derivationPath: string,\n hrp: string,\n options?: AddressOptions,\n ): GetAddressDAReturnType {\n return this._container\n .get<GetAddressUseCase>(addressTypes.GetAddressUseCase)\n .execute(derivationPath, hrp, options);\n }\n\n signTransaction(\n derivationPath: string,\n hrp: string,\n transaction: Uint8Array,\n options?: TransactionOptions,\n ): SignTransactionDAReturnType {\n return this._container\n .get<SignTransactionUseCase>(transactionTypes.SignTransactionUseCase)\n .execute(derivationPath, hrp, transaction, options);\n }\n}\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,yBAAAE,IAAA,eAAAC,EAAAH,GAcA,IAAAI,EAA8B,wBAC9BC,EAA6B,uDAE7BC,EAA4B,qDAE5BC,EAAiC,+DAQ1B,MAAML,CAA4C,CACtC,WAEjB,YAAY,CAAE,IAAAM,EAAK,UAAAC,CAAU,EAAuC,CAClE,KAAK,cAAa,iBAAc,CAAE,IAAAD,EAAK,UAAAC,CAAU,CAAC,CACpD,CAEA,cAAyC,CACvC,OAAO,KAAK,WACT,IAAyB,cAAY,mBAAmB,EACxD,QAAQ,CACb,CAEA,WACEC,EACAC,EACAC,EACwB,CACxB,OAAO,KAAK,WACT,IAAuB,eAAa,iBAAiB,EACrD,QAAQF,EAAgBC,EAAKC,CAAO,CACzC,CAEA,gBACEF,EACAC,EACAE,EACAD,EAC6B,CAC7B,OAAO,KAAK,WACT,IAA4B,mBAAiB,sBAAsB,EACnE,QAAQF,EAAgBC,EAAKE,EAAaD,CAAO,CACtD,CACF",
|
|
6
|
+
"names": ["DefaultSignerCosmos_exports", "__export", "DefaultSignerCosmos", "__toCommonJS", "import_di", "import_addressTypes", "import_configTypes", "import_transactionTypes", "dmk", "sessionId", "derivationPath", "hrp", "options", "transaction"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var c=require("@ledgerhq/device-management-kit"),i=require("rxjs"),e=require("vitest"),a=require("./DefaultSignerCosmos");describe("DefaultSignerCosmos",()=>{const u="test-session-id",p=()=>({});it("getAppConfig should return the result from getAppConfigUseCase",()=>{const t={observable:(0,i.from)([{status:c.DeviceActionStatus.Completed,output:{major:1,minor:2,patch:3}}]),cancel:e.vi.fn()},n=e.vi.fn().mockReturnValue(t),o={executeDeviceAction:n,getLoggerFactory:e.vi.fn().mockReturnValue(p)},r=new a.DefaultSignerCosmos({dmk:o,sessionId:u}).getAppConfig();expect(n).toHaveBeenCalledTimes(1),expect(r).toBe(t)}),it("getAddress should return the result from getAddressUseCase",()=>{const t="44'/118'/0'/0/0",n="cosmos",o={observable:(0,i.from)([{status:c.DeviceActionStatus.Completed,output:{publicKey:new Uint8Array([1,2]),address:"cosmos1234567890"}}]),cancel:e.vi.fn()},s=e.vi.fn().mockReturnValue(o),r={executeDeviceAction:s,getLoggerFactory:e.vi.fn().mockReturnValue(p)},d=new a.DefaultSignerCosmos({dmk:r,sessionId:u}).getAddress(t,n);expect(s).toHaveBeenCalledTimes(1),expect(d).toBe(o)}),it("signTransaction should return the result from signTransactionUseCase",()=>{const t="44'/118'/0'/0/0",n="cosmos",o=new Uint8Array([1,2]),s={observable:(0,i.from)([{status:c.DeviceActionStatus.Completed,output:new Uint8Array([1,2])}]),cancel:e.vi.fn()},r=e.vi.fn().mockReturnValue(s),m={executeDeviceAction:r,getLoggerFactory:e.vi.fn().mockReturnValue(p)},A=new a.DefaultSignerCosmos({dmk:m,sessionId:u}).signTransaction(t,n,o);expect(r).toHaveBeenCalledTimes(1),expect(A).toBe(s)})});
|
|
2
|
+
//# sourceMappingURL=DefaultSignerCosmos.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/internal/DefaultSignerCosmos.test.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n DeviceActionStatus,\n type DeviceManagementKit,\n type DeviceSessionId,\n type ExecuteDeviceActionReturnType,\n} from \"@ledgerhq/device-management-kit\";\nimport { from } from \"rxjs\";\nimport { vi } from \"vitest\";\n\nimport {\n type GetAddressDAError,\n type GetAddressDAIntermediateValue,\n type GetAddressDAOutput,\n} from \"@api/app-binder/GetAddressDeviceActionTypes\";\nimport {\n type GetAppConfigDAError,\n type GetAppConfigDAIntermediateValue,\n type GetAppConfigDAOutput,\n} from \"@api/app-binder/GetAppConfigDeviceActionTypes\";\nimport {\n type SignTransactionDAError,\n type SignTransactionDAIntermediateValue,\n type SignTransactionDAOutput,\n} from \"@api/app-binder/SignTransactionDeviceActionTypes\";\n\nimport { DefaultSignerCosmos } from \"./DefaultSignerCosmos\";\n\ndescribe(\"DefaultSignerCosmos\", () => {\n const sessionId = \"test-session-id\" as DeviceSessionId;\n const mockLoggerFactory = () => ({});\n\n it(\"getAppConfig should return the result from getAppConfigUseCase\", () => {\n // ARRANGE\n const expectedResult: ExecuteDeviceActionReturnType<\n GetAppConfigDAOutput,\n GetAppConfigDAError,\n GetAppConfigDAIntermediateValue\n > = {\n observable: from([\n {\n status: DeviceActionStatus.Completed as const,\n output: {\n major: 1,\n minor: 2,\n patch: 3,\n },\n },\n ]),\n cancel: vi.fn(),\n };\n const executeDeviceActionMock = vi.fn().mockReturnValue(expectedResult);\n const dmkMock = {\n executeDeviceAction: executeDeviceActionMock,\n getLoggerFactory: vi.fn().mockReturnValue(mockLoggerFactory),\n } as unknown as DeviceManagementKit;\n const signer = new DefaultSignerCosmos({ dmk: dmkMock, sessionId });\n\n // ACT\n const result = signer.getAppConfig();\n\n // ASSERT\n expect(executeDeviceActionMock).toHaveBeenCalledTimes(1);\n expect(result).toBe(expectedResult);\n });\n\n it(\"getAddress should return the result from getAddressUseCase\", () => {\n // ARRANGE\n const derivationPath = \"44'/118'/0'/0/0\";\n const hrp = \"cosmos\";\n const expectedResult: ExecuteDeviceActionReturnType<\n GetAddressDAOutput,\n GetAddressDAError,\n GetAddressDAIntermediateValue\n > = {\n observable: from([\n {\n status: DeviceActionStatus.Completed as const,\n output: {\n publicKey: new Uint8Array([0x01, 0x02]),\n address: \"cosmos1234567890\",\n },\n },\n ]),\n cancel: vi.fn(),\n };\n const executeDeviceActionMock = vi.fn().mockReturnValue(expectedResult);\n const dmkMock = {\n executeDeviceAction: executeDeviceActionMock,\n getLoggerFactory: vi.fn().mockReturnValue(mockLoggerFactory),\n } as unknown as DeviceManagementKit;\n const signer = new DefaultSignerCosmos({ dmk: dmkMock, sessionId });\n\n // ACT\n const result = signer.getAddress(derivationPath, hrp);\n\n // ASSERT\n expect(executeDeviceActionMock).toHaveBeenCalledTimes(1);\n expect(result).toBe(expectedResult);\n });\n\n it(\"signTransaction should return the result from signTransactionUseCase\", () => {\n // ARRANGE\n const derivationPath = \"44'/118'/0'/0/0\";\n const hrp = \"cosmos\";\n const transaction = new Uint8Array([0x01, 0x02]);\n const expectedResult: ExecuteDeviceActionReturnType<\n SignTransactionDAOutput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n > = {\n observable: from([\n {\n status: DeviceActionStatus.Completed as const,\n output: new Uint8Array([0x01, 0x02]),\n },\n ]),\n cancel: vi.fn(),\n };\n const executeDeviceActionMock = vi.fn().mockReturnValue(expectedResult);\n const dmkMock = {\n executeDeviceAction: executeDeviceActionMock,\n getLoggerFactory: vi.fn().mockReturnValue(mockLoggerFactory),\n } as unknown as DeviceManagementKit;\n const signer = new DefaultSignerCosmos({ dmk: dmkMock, sessionId });\n\n // ACT\n const result = signer.signTransaction(derivationPath, hrp, transaction);\n\n // ASSERT\n expect(executeDeviceActionMock).toHaveBeenCalledTimes(1);\n expect(result).toBe(expectedResult);\n });\n});\n"],
|
|
5
|
+
"mappings": "aAAA,IAAAA,EAKO,2CACPC,EAAqB,gBACrBC,EAAmB,kBAkBnBC,EAAoC,iCAEpC,SAAS,sBAAuB,IAAM,CACpC,MAAMC,EAAY,kBACZC,EAAoB,KAAO,CAAC,GAElC,GAAG,iEAAkE,IAAM,CAEzE,MAAMC,EAIF,CACF,cAAY,QAAK,CACf,CACE,OAAQ,qBAAmB,UAC3B,OAAQ,CACN,MAAO,EACP,MAAO,EACP,MAAO,CACT,CACF,CACF,CAAC,EACD,OAAQ,KAAG,GAAG,CAChB,EACMC,EAA0B,KAAG,GAAG,EAAE,gBAAgBD,CAAc,EAChEE,EAAU,CACd,oBAAqBD,EACrB,iBAAkB,KAAG,GAAG,EAAE,gBAAgBF,CAAiB,CAC7D,EAIMI,EAHS,IAAI,sBAAoB,CAAE,IAAKD,EAAS,UAAAJ,CAAU,CAAC,EAG5C,aAAa,EAGnC,OAAOG,CAAuB,EAAE,sBAAsB,CAAC,EACvD,OAAOE,CAAM,EAAE,KAAKH,CAAc,CACpC,CAAC,EAED,GAAG,6DAA8D,IAAM,CAErE,MAAMI,EAAiB,kBACjBC,EAAM,SACNL,EAIF,CACF,cAAY,QAAK,CACf,CACE,OAAQ,qBAAmB,UAC3B,OAAQ,CACN,UAAW,IAAI,WAAW,CAAC,EAAM,CAAI,CAAC,EACtC,QAAS,kBACX,CACF,CACF,CAAC,EACD,OAAQ,KAAG,GAAG,CAChB,EACMC,EAA0B,KAAG,GAAG,EAAE,gBAAgBD,CAAc,EAChEE,EAAU,CACd,oBAAqBD,EACrB,iBAAkB,KAAG,GAAG,EAAE,gBAAgBF,CAAiB,CAC7D,EAIMI,EAHS,IAAI,sBAAoB,CAAE,IAAKD,EAAS,UAAAJ,CAAU,CAAC,EAG5C,WAAWM,EAAgBC,CAAG,EAGpD,OAAOJ,CAAuB,EAAE,sBAAsB,CAAC,EACvD,OAAOE,CAAM,EAAE,KAAKH,CAAc,CACpC,CAAC,EAED,GAAG,uEAAwE,IAAM,CAE/E,MAAMI,EAAiB,kBACjBC,EAAM,SACNC,EAAc,IAAI,WAAW,CAAC,EAAM,CAAI,CAAC,EACzCN,EAIF,CACF,cAAY,QAAK,CACf,CACE,OAAQ,qBAAmB,UAC3B,OAAQ,IAAI,WAAW,CAAC,EAAM,CAAI,CAAC,CACrC,CACF,CAAC,EACD,OAAQ,KAAG,GAAG,CAChB,EACMC,EAA0B,KAAG,GAAG,EAAE,gBAAgBD,CAAc,EAChEE,EAAU,CACd,oBAAqBD,EACrB,iBAAkB,KAAG,GAAG,EAAE,gBAAgBF,CAAiB,CAC7D,EAIMI,EAHS,IAAI,sBAAoB,CAAE,IAAKD,EAAS,UAAAJ,CAAU,CAAC,EAG5C,gBAAgBM,EAAgBC,EAAKC,CAAW,EAGtE,OAAOL,CAAuB,EAAE,sBAAsB,CAAC,EACvD,OAAOE,CAAM,EAAE,KAAKH,CAAc,CACpC,CAAC,CACH,CAAC",
|
|
6
|
+
"names": ["import_device_management_kit", "import_rxjs", "import_vitest", "import_DefaultSignerCosmos", "sessionId", "mockLoggerFactory", "expectedResult", "executeDeviceActionMock", "dmkMock", "result", "derivationPath", "hrp", "transaction"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var a=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var D=Object.getOwnPropertyNames;var T=Object.prototype.hasOwnProperty;var f=(n,e)=>{for(var i in e)a(n,i,{get:e[i],enumerable:!0})},I=(n,e,i,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of D(e))!T.call(n,t)&&t!==i&&a(n,t,{get:()=>e[t],enumerable:!(r=A(e,t))||r.enumerable});return n};var h=n=>I(a({},"__esModule",{value:!0}),n),k=(n,e,i,r)=>{for(var t=r>1?void 0:r?A(e,i):e,d=n.length-1,g;d>=0;d--)(g=n[d])&&(t=(r?g(e,i,t):g(t))||t);return r&&t&&a(e,i,t),t},c=(n,e)=>(i,r)=>e(i,r,n);var C={};f(C,{CosmosAppBinder:()=>p});module.exports=h(C);var o=require("@ledgerhq/device-management-kit"),s=require("inversify"),u=require("../app-binder/command/GetAddressCommand"),y=require("../app-binder/command/GetAppConfigCommand"),v=require("../app-binder/task/SignTransactionTask"),m=require("../externalTypes");let p=class{constructor(e,i,r){this.dmk=e;this.sessionId=i;this.dmkLoggerFactory=r}getAppConfig(e){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new o.SendCommandInAppDeviceAction({input:{command:new y.GetAppConfigCommand,appName:"Cosmos",requiredUserInteraction:o.UserInteractionRequired.None,skipOpenApp:e.skipOpenApp},logger:this.dmkLoggerFactory("GetAppConfigCommand")})})}getAddress(e){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new o.SendCommandInAppDeviceAction({input:{command:new u.GetAddressCommand(e),appName:"Cosmos",requiredUserInteraction:e.checkOnDevice?o.UserInteractionRequired.VerifyAddress:o.UserInteractionRequired.None,skipOpenApp:e.skipOpenApp},logger:this.dmkLoggerFactory("GetAddressCommand")})})}signTransaction(e){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new o.CallTaskInAppDeviceAction({input:{task:async i=>new v.SignTransactionTask(i,e,this.dmkLoggerFactory("SignTransactionTask")).run(),appName:"Cosmos",requiredUserInteraction:o.UserInteractionRequired.SignTransaction,skipOpenApp:e.skipOpenApp??!1},logger:this.dmkLoggerFactory("SignTransactionCommand")})})}};p=k([(0,s.injectable)(),c(0,(0,s.inject)(m.externalTypes.Dmk)),c(1,(0,s.inject)(m.externalTypes.SessionId)),c(2,(0,s.inject)(m.externalTypes.DmkLoggerFactory))],p);0&&(module.exports={CosmosAppBinder});
|
|
2
|
+
//# sourceMappingURL=CosmosAppBinder.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/internal/app-binder/CosmosAppBinder.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n CallTaskInAppDeviceAction,\n type DeviceManagementKit,\n type DeviceSessionId,\n LoggerPublisherService,\n SendCommandInAppDeviceAction,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport { type GetAddressDAReturnType } from \"@api/app-binder/GetAddressDeviceActionTypes\";\nimport { type GetAppConfigDAReturnType } from \"@api/app-binder/GetAppConfigDeviceActionTypes\";\nimport { type SignTransactionDAReturnType } from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport {\n GetAddressCommand,\n GetAddressCommandArgs,\n} from \"@internal/app-binder/command/GetAddressCommand\";\nimport { GetAppConfigCommand } from \"@internal/app-binder/command/GetAppConfigCommand\";\nimport { SignTransactionTask } from \"@internal/app-binder/task/SignTransactionTask\";\nimport { externalTypes } from \"@internal/externalTypes\";\n\n@injectable()\nexport class CosmosAppBinder {\n constructor(\n @inject(externalTypes.Dmk) private dmk: DeviceManagementKit,\n @inject(externalTypes.SessionId) private sessionId: DeviceSessionId,\n @inject(externalTypes.DmkLoggerFactory)\n private dmkLoggerFactory: (tag: string) => LoggerPublisherService,\n ) {}\n\n getAppConfig(args: { skipOpenApp: boolean }): GetAppConfigDAReturnType {\n return this.dmk.executeDeviceAction({\n sessionId: this.sessionId,\n deviceAction: new SendCommandInAppDeviceAction({\n input: {\n command: new GetAppConfigCommand(),\n appName: \"Cosmos\",\n requiredUserInteraction: UserInteractionRequired.None,\n skipOpenApp: args.skipOpenApp,\n },\n logger: this.dmkLoggerFactory(\"GetAppConfigCommand\"),\n }),\n });\n }\n\n getAddress(args: GetAddressCommandArgs): GetAddressDAReturnType {\n return this.dmk.executeDeviceAction({\n sessionId: this.sessionId,\n deviceAction: new SendCommandInAppDeviceAction({\n input: {\n command: new GetAddressCommand(args),\n appName: \"Cosmos\",\n requiredUserInteraction: args.checkOnDevice\n ? UserInteractionRequired.VerifyAddress\n : UserInteractionRequired.None,\n skipOpenApp: args.skipOpenApp,\n },\n logger: this.dmkLoggerFactory(\"GetAddressCommand\"),\n }),\n });\n }\n\n signTransaction(args: {\n derivationPath: string;\n hrp: string;\n transaction: Uint8Array;\n skipOpenApp?: boolean;\n }): SignTransactionDAReturnType {\n return this.dmk.executeDeviceAction({\n sessionId: this.sessionId,\n deviceAction: new CallTaskInAppDeviceAction({\n input: {\n task: async (internalApi) =>\n new SignTransactionTask(\n internalApi,\n args,\n this.dmkLoggerFactory(\"SignTransactionTask\"),\n ).run(),\n appName: \"Cosmos\",\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n skipOpenApp: args.skipOpenApp ?? false,\n },\n logger: this.dmkLoggerFactory(\"SignTransactionCommand\"),\n }),\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "okBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,qBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAOO,2CACPC,EAAmC,qBAKnCC,EAGO,0DACPC,EAAoC,4DACpCC,EAAoC,yDACpCC,EAA8B,mCAGvB,IAAMC,EAAN,KAAsB,CAC3B,YACqCC,EACMC,EAEjCC,EACR,CAJmC,SAAAF,EACM,eAAAC,EAEjC,sBAAAC,CACP,CAEH,aAAaC,EAA0D,CACrE,OAAO,KAAK,IAAI,oBAAoB,CAClC,UAAW,KAAK,UAChB,aAAc,IAAI,+BAA6B,CAC7C,MAAO,CACL,QAAS,IAAI,sBACb,QAAS,SACT,wBAAyB,0BAAwB,KACjD,YAAaA,EAAK,WACpB,EACA,OAAQ,KAAK,iBAAiB,qBAAqB,CACrD,CAAC,CACH,CAAC,CACH,CAEA,WAAWA,EAAqD,CAC9D,OAAO,KAAK,IAAI,oBAAoB,CAClC,UAAW,KAAK,UAChB,aAAc,IAAI,+BAA6B,CAC7C,MAAO,CACL,QAAS,IAAI,oBAAkBA,CAAI,EACnC,QAAS,SACT,wBAAyBA,EAAK,cAC1B,0BAAwB,cACxB,0BAAwB,KAC5B,YAAaA,EAAK,WACpB,EACA,OAAQ,KAAK,iBAAiB,mBAAmB,CACnD,CAAC,CACH,CAAC,CACH,CAEA,gBAAgBA,EAKgB,CAC9B,OAAO,KAAK,IAAI,oBAAoB,CAClC,UAAW,KAAK,UAChB,aAAc,IAAI,4BAA0B,CAC1C,MAAO,CACL,KAAM,MAAOC,GACX,IAAI,sBACFA,EACAD,EACA,KAAK,iBAAiB,qBAAqB,CAC7C,EAAE,IAAI,EACR,QAAS,SACT,wBAAyB,0BAAwB,gBACjD,YAAaA,EAAK,aAAe,EACnC,EACA,OAAQ,KAAK,iBAAiB,wBAAwB,CACxD,CAAC,CACH,CAAC,CACH,CACF,EAhEaJ,EAANM,EAAA,IADN,cAAW,EAGPC,EAAA,eAAO,gBAAc,GAAG,GACxBA,EAAA,eAAO,gBAAc,SAAS,GAC9BA,EAAA,eAAO,gBAAc,gBAAgB,IAJ7BP",
|
|
6
|
+
"names": ["CosmosAppBinder_exports", "__export", "CosmosAppBinder", "__toCommonJS", "import_device_management_kit", "import_inversify", "import_GetAddressCommand", "import_GetAppConfigCommand", "import_SignTransactionTask", "import_externalTypes", "CosmosAppBinder", "dmk", "sessionId", "dmkLoggerFactory", "args", "internalApi", "__decorateClass", "__decorateParam"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var e=require("@ledgerhq/device-management-kit"),a=require("rxjs"),i=require("vitest"),m=require("../app-binder/command/GetAddressCommand"),l=require("../app-binder/command/GetAppConfigCommand"),d=require("../app-binder/CosmosAppBinder");describe("CosmosAppBinder",()=>{const v={debug:i.vi.fn()},u=i.vi.fn().mockReturnValue(v);it("getAppConfig should call dmk.executeDeviceAction with SendCommandInAppDeviceAction and return the result",()=>{const r="test-session-id",s={observable:(0,a.from)([{status:e.DeviceActionStatus.Completed,output:{major:1,minor:2,patch:3}}]),cancel:i.vi.fn()},n=i.vi.fn().mockReturnValue(s),o={executeDeviceAction:n},A=new d.CosmosAppBinder(o,r,u).getAppConfig({skipOpenApp:!1});expect(n).toHaveBeenCalledTimes(1);const c=n.mock.calls[0][0];expect(c.deviceAction).toBeInstanceOf(e.SendCommandInAppDeviceAction),expect(c.deviceAction.input.command).toBeInstanceOf(l.GetAppConfigCommand),expect(c.deviceAction.input.appName).toBe("Cosmos"),expect(c.deviceAction.input.requiredUserInteraction).toBe(e.UserInteractionRequired.None),expect(c.deviceAction.input.skipOpenApp).toBe(!1),expect(A).toBe(s)}),it("getAddress should call dmk.executeDeviceAction with SendCommandInAppDeviceAction and return the result",()=>{const r="test-session-id",s={derivationPath:"44'/118'/0'/0/0",hrp:"cosmos",checkOnDevice:!1,skipOpenApp:!1},n={observable:(0,a.from)([{status:e.DeviceActionStatus.Completed,output:{publicKey:new Uint8Array([1,2]),address:"cosmos1234567890"}}]),cancel:i.vi.fn()},o=i.vi.fn().mockReturnValue(n),p={executeDeviceAction:o},c=new d.CosmosAppBinder(p,r,u).getAddress(s);expect(o).toHaveBeenCalledTimes(1);const t=o.mock.calls[0][0];expect(t.deviceAction).toBeInstanceOf(e.SendCommandInAppDeviceAction),expect(t.deviceAction.input.command).toBeInstanceOf(m.GetAddressCommand),expect(t.deviceAction.input.appName).toBe("Cosmos"),expect(t.deviceAction.input.requiredUserInteraction).toBe(e.UserInteractionRequired.None),expect(t.deviceAction.input.skipOpenApp).toBe(!1),expect(c).toBe(n)}),it("signTransaction should call dmk.executeDeviceAction with CallTaskInAppDeviceAction and return the result",()=>{const r="test-session-id",s={derivationPath:"44'/118'/0'/0/0",hrp:"cosmos",transaction:new Uint8Array([1,2]),skipOpenApp:!1},n={observable:(0,a.from)([{status:e.DeviceActionStatus.Completed,output:new Uint8Array([1,2])}]),cancel:i.vi.fn()},o=i.vi.fn().mockReturnValue(n),p={executeDeviceAction:o},c=new d.CosmosAppBinder(p,r,u).signTransaction(s);expect(o).toHaveBeenCalledTimes(1);const t=o.mock.calls[0][0];expect(t.deviceAction).toBeInstanceOf(e.CallTaskInAppDeviceAction),expect(t.deviceAction.input.appName).toBe("Cosmos"),expect(t.deviceAction.input.requiredUserInteraction).toBe(e.UserInteractionRequired.SignTransaction),expect(t.deviceAction.input.skipOpenApp).toBe(!1),expect(c).toBe(n)})});
|
|
2
|
+
//# sourceMappingURL=CosmosAppBinder.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/internal/app-binder/CosmosAppBinder.test.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n CallTaskInAppDeviceAction,\n DeviceActionStatus,\n type DeviceManagementKit,\n type ExecuteDeviceActionReturnType,\n type LoggerPublisherService,\n SendCommandInAppDeviceAction,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { from } from \"rxjs\";\nimport { vi } from \"vitest\";\n\nimport {\n type GetAddressDAError,\n type GetAddressDAIntermediateValue,\n type GetAddressDAOutput,\n} from \"@api/app-binder/GetAddressDeviceActionTypes\";\nimport {\n type GetAppConfigDAError,\n type GetAppConfigDAIntermediateValue,\n type GetAppConfigDAOutput,\n} from \"@api/app-binder/GetAppConfigDeviceActionTypes\";\nimport {\n type SignTransactionDAError,\n type SignTransactionDAIntermediateValue,\n type SignTransactionDAOutput,\n} from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { GetAddressCommand } from \"@internal/app-binder/command/GetAddressCommand\";\nimport { GetAppConfigCommand } from \"@internal/app-binder/command/GetAppConfigCommand\";\nimport { CosmosAppBinder } from \"@internal/app-binder/CosmosAppBinder\";\n\ndescribe(\"CosmosAppBinder\", () => {\n const loggerMock = {\n debug: vi.fn(),\n } as unknown as LoggerPublisherService;\n\n const loggerFactoryMock = vi.fn().mockReturnValue(loggerMock);\n\n it(\"getAppConfig should call dmk.executeDeviceAction with SendCommandInAppDeviceAction and return the result\", () => {\n // ARRANGE\n const sessionId = \"test-session-id\";\n const expectedResult: ExecuteDeviceActionReturnType<\n GetAppConfigDAOutput,\n GetAppConfigDAError,\n GetAppConfigDAIntermediateValue\n > = {\n observable: from([\n {\n status: DeviceActionStatus.Completed as const,\n output: {\n major: 1,\n minor: 2,\n patch: 3,\n },\n },\n ]),\n cancel: vi.fn(),\n };\n const executeDeviceActionMock = vi.fn().mockReturnValue(expectedResult);\n const dmkMock = {\n executeDeviceAction: executeDeviceActionMock,\n } as unknown as DeviceManagementKit;\n const binder = new CosmosAppBinder(dmkMock, sessionId, loggerFactoryMock);\n\n // ACT\n const result = binder.getAppConfig({ skipOpenApp: false });\n\n // ASSERT\n expect(executeDeviceActionMock).toHaveBeenCalledTimes(1);\n const args = executeDeviceActionMock.mock.calls[0]![0];\n expect(args.deviceAction).toBeInstanceOf(SendCommandInAppDeviceAction);\n expect(args.deviceAction.input.command).toBeInstanceOf(GetAppConfigCommand);\n expect(args.deviceAction.input.appName).toBe(\"Cosmos\");\n expect(args.deviceAction.input.requiredUserInteraction).toBe(\n UserInteractionRequired.None,\n );\n expect(args.deviceAction.input.skipOpenApp).toBe(false);\n expect(result).toBe(expectedResult);\n });\n\n it(\"getAddress should call dmk.executeDeviceAction with SendCommandInAppDeviceAction and return the result\", () => {\n // ARRANGE\n const sessionId = \"test-session-id\";\n const getAddressArgs = {\n derivationPath: \"44'/118'/0'/0/0\",\n hrp: \"cosmos\",\n checkOnDevice: false,\n skipOpenApp: false,\n };\n const expectedResult: ExecuteDeviceActionReturnType<\n GetAddressDAOutput,\n GetAddressDAError,\n GetAddressDAIntermediateValue\n > = {\n observable: from([\n {\n status: DeviceActionStatus.Completed as const,\n output: {\n publicKey: new Uint8Array([0x01, 0x02]),\n address: \"cosmos1234567890\",\n },\n },\n ]),\n cancel: vi.fn(),\n };\n const executeDeviceActionMock = vi.fn().mockReturnValue(expectedResult);\n const dmkMock = {\n executeDeviceAction: executeDeviceActionMock,\n } as unknown as DeviceManagementKit;\n const binder = new CosmosAppBinder(dmkMock, sessionId, loggerFactoryMock);\n\n // ACT\n const result = binder.getAddress(getAddressArgs);\n\n // ASSERT\n expect(executeDeviceActionMock).toHaveBeenCalledTimes(1);\n const args = executeDeviceActionMock.mock.calls[0]![0];\n expect(args.deviceAction).toBeInstanceOf(SendCommandInAppDeviceAction);\n expect(args.deviceAction.input.command).toBeInstanceOf(GetAddressCommand);\n expect(args.deviceAction.input.appName).toBe(\"Cosmos\");\n expect(args.deviceAction.input.requiredUserInteraction).toBe(\n UserInteractionRequired.None,\n );\n expect(args.deviceAction.input.skipOpenApp).toBe(false);\n expect(result).toBe(expectedResult);\n });\n\n it(\"signTransaction should call dmk.executeDeviceAction with CallTaskInAppDeviceAction and return the result\", () => {\n // ARRANGE\n const sessionId = \"test-session-id\";\n const signTransactionArgs = {\n derivationPath: \"44'/118'/0'/0/0\",\n hrp: \"cosmos\",\n transaction: new Uint8Array([0x01, 0x02]),\n skipOpenApp: false,\n };\n const expectedResult: ExecuteDeviceActionReturnType<\n SignTransactionDAOutput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n > = {\n observable: from([\n {\n status: DeviceActionStatus.Completed as const,\n output: new Uint8Array([0x01, 0x02]),\n },\n ]),\n cancel: vi.fn(),\n };\n const executeDeviceActionMock = vi.fn().mockReturnValue(expectedResult);\n const dmkMock = {\n executeDeviceAction: executeDeviceActionMock,\n } as unknown as DeviceManagementKit;\n const binder = new CosmosAppBinder(dmkMock, sessionId, loggerFactoryMock);\n\n // ACT\n const result = binder.signTransaction(signTransactionArgs);\n\n // ASSERT\n expect(executeDeviceActionMock).toHaveBeenCalledTimes(1);\n const args = executeDeviceActionMock.mock.calls[0]![0];\n expect(args.deviceAction).toBeInstanceOf(CallTaskInAppDeviceAction);\n expect(args.deviceAction.input.appName).toBe(\"Cosmos\");\n expect(args.deviceAction.input.requiredUserInteraction).toBe(\n UserInteractionRequired.SignTransaction,\n );\n expect(args.deviceAction.input.skipOpenApp).toBe(false);\n expect(result).toBe(expectedResult);\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_device_management_kit", "import_rxjs", "import_vitest", "import_GetAddressCommand", "import_GetAppConfigCommand", "import_CosmosAppBinder", "loggerMock", "loggerFactoryMock", "sessionId", "expectedResult", "executeDeviceActionMock", "dmkMock", "result", "args", "getAddressArgs", "signTransactionArgs"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var m=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var E=Object.getOwnPropertyNames;var P=Object.prototype.hasOwnProperty;var f=(o,e)=>{for(var r in e)m(o,r,{get:e[r],enumerable:!0})},x=(o,e,r,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let d of E(e))!P.call(o,d)&&d!==r&&m(o,d,{get:()=>e[d],enumerable:!(t=h(e,d))||t.enumerable});return o};var R=o=>x(m({},"__esModule",{value:!0}),o);var v={};f(v,{GetAddressCommand:()=>b,P1_CHECK_ON_DEVICE:()=>C,P1_NO_CHECK_ON_DEVICE:()=>u,cosmosGetAddressApduHeader:()=>l});module.exports=R(v);var s=require("@ledgerhq/device-management-kit"),n=require("@ledgerhq/signer-utils"),p=require("purify-ts"),a=require("../../app-binder/command/utils/CosmosApplicationErrors"),c=require("./utils/EncodeDerivationPath");const l=o=>({cla:85,ins:4,p1:o,p2:0}),C=1,u=0,G=5;class b{name="GetAddress";args;errorHelper=new n.CommandErrorHelper(a.COSMOS_APP_ERRORS,a.CosmosAppCommandErrorFactory);constructor(e){this.args=e}getApdu(){const e=new s.ApduBuilder(l(this.args.checkOnDevice?C:u));e.encodeInLVFromAscii(this.args.hrp);const r=n.DerivationPathUtils.splitPath(this.args.derivationPath);if(r.length!==G)throw new Error(`GetAddressCommand: expected cosmos style number of path elements, got ${r.length}`);const t=(0,c.encodeDerivationPath)(r);return e.addBufferToData(t),e.build()}parseResponse(e){return p.Maybe.fromNullable(this.errorHelper.getError(e)).orDefaultLazy(()=>{const r=new s.ApduParser(e),t=r.extractFieldByLength(33),d=r.getUnparsedRemainingLength(),i=r.extractFieldByLength(d);if(t===void 0||i===void 0)return(0,s.CommandResultFactory)({error:new s.InvalidStatusWordError("Public key is missing")});const A=i.filter(g=>g!==0),y=r.encodeToString(A);return(0,s.CommandResultFactory)({data:{publicKey:t,address:y}})})}}0&&(module.exports={GetAddressCommand,P1_CHECK_ON_DEVICE,P1_NO_CHECK_ON_DEVICE,cosmosGetAddressApduHeader});
|
|
2
|
+
//# sourceMappingURL=GetAddressCommand.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/internal/app-binder/command/GetAddressCommand.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport {\n CommandErrorHelper,\n DerivationPathUtils,\n} from \"@ledgerhq/signer-utils\";\nimport { Maybe } from \"purify-ts\";\n\nimport { type PubKey } from \"@api/model/PubKey\";\nimport {\n COSMOS_APP_ERRORS,\n CosmosAppCommandErrorFactory,\n type CosmosErrorCodes,\n} from \"@internal/app-binder/command/utils/CosmosApplicationErrors\";\n\nimport { encodeDerivationPath } from \"./utils/EncodeDerivationPath\";\n\nexport type GetAddressCommandArgs = {\n readonly derivationPath: string;\n readonly hrp: string;\n readonly checkOnDevice: boolean;\n readonly skipOpenApp: boolean;\n};\n\nexport type GetAddressCommandResponse = PubKey;\n\nexport const cosmosGetAddressApduHeader = (p1: number) => ({\n cla: 0x55,\n ins: 0x04,\n p1,\n p2: 0x00,\n});\n\nexport const P1_CHECK_ON_DEVICE = 0x01;\nexport const P1_NO_CHECK_ON_DEVICE = 0x00;\nconst DERIVATION_PATH_LENGTH = 5;\n\nexport class GetAddressCommand\n implements\n Command<GetAddressCommandResponse, GetAddressCommandArgs, CosmosErrorCodes>\n{\n readonly name = \"GetAddress\";\n\n private readonly args: GetAddressCommandArgs;\n\n private readonly errorHelper = new CommandErrorHelper<\n GetAddressCommandResponse,\n CosmosErrorCodes\n >(COSMOS_APP_ERRORS, CosmosAppCommandErrorFactory);\n\n constructor(args: GetAddressCommandArgs) {\n this.args = args;\n }\n\n getApdu(): Apdu {\n const apduBuilder = new ApduBuilder(\n cosmosGetAddressApduHeader(\n this.args.checkOnDevice ? P1_CHECK_ON_DEVICE : P1_NO_CHECK_ON_DEVICE,\n ),\n );\n\n apduBuilder.encodeInLVFromAscii(this.args.hrp);\n\n const derivationPath = DerivationPathUtils.splitPath(\n this.args.derivationPath,\n );\n\n if (derivationPath.length !== DERIVATION_PATH_LENGTH) {\n throw new Error(\n `GetAddressCommand: expected cosmos style number of path elements, got ${derivationPath.length}`,\n );\n }\n\n const encodedDerivationPath = encodeDerivationPath(derivationPath);\n apduBuilder.addBufferToData(encodedDerivationPath);\n\n return apduBuilder.build();\n }\n\n parseResponse(\n apduResponse: ApduResponse,\n ): CommandResult<GetAddressCommandResponse, CosmosErrorCodes> {\n return Maybe.fromNullable(\n this.errorHelper.getError(apduResponse),\n ).orDefaultLazy(() => {\n const apduParser = new ApduParser(apduResponse);\n const publicKey = apduParser.extractFieldByLength(33);\n const remaining = apduParser.getUnparsedRemainingLength();\n const address = apduParser.extractFieldByLength(remaining);\n\n if (publicKey === undefined || address === undefined) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Public key is missing\"),\n });\n }\n\n const trimmedAddrBytes = address.filter((b) => b !== 0x00);\n const bech32Address = apduParser.encodeToString(trimmedAddrBytes);\n\n return CommandResultFactory({\n data: {\n publicKey,\n address: bech32Address,\n },\n });\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,uBAAAE,EAAA,uBAAAC,EAAA,0BAAAC,EAAA,+BAAAC,IAAA,eAAAC,EAAAN,GAAA,IAAAO,EASO,2CACPC,EAGO,kCACPC,EAAsB,qBAGtBC,EAIO,sEAEPC,EAAqC,wCAW9B,MAAMN,EAA8BO,IAAgB,CACzD,IAAK,GACL,IAAK,EACL,GAAAA,EACA,GAAI,CACN,GAEaT,EAAqB,EACrBC,EAAwB,EAC/BS,EAAyB,EAExB,MAAMX,CAGb,CACW,KAAO,aAEC,KAEA,YAAc,IAAI,qBAGjC,oBAAmB,8BAA4B,EAEjD,YAAYY,EAA6B,CACvC,KAAK,KAAOA,CACd,CAEA,SAAgB,CACd,MAAMC,EAAc,IAAI,cACtBV,EACE,KAAK,KAAK,cAAgBF,EAAqBC,CACjD,CACF,EAEAW,EAAY,oBAAoB,KAAK,KAAK,GAAG,EAE7C,MAAMC,EAAiB,sBAAoB,UACzC,KAAK,KAAK,cACZ,EAEA,GAAIA,EAAe,SAAWH,EAC5B,MAAM,IAAI,MACR,yEAAyEG,EAAe,MAAM,EAChG,EAGF,MAAMC,KAAwB,wBAAqBD,CAAc,EACjE,OAAAD,EAAY,gBAAgBE,CAAqB,EAE1CF,EAAY,MAAM,CAC3B,CAEA,cACEG,EAC4D,CAC5D,OAAO,QAAM,aACX,KAAK,YAAY,SAASA,CAAY,CACxC,EAAE,cAAc,IAAM,CACpB,MAAMC,EAAa,IAAI,aAAWD,CAAY,EACxCE,EAAYD,EAAW,qBAAqB,EAAE,EAC9CE,EAAYF,EAAW,2BAA2B,EAClDG,EAAUH,EAAW,qBAAqBE,CAAS,EAEzD,GAAID,IAAc,QAAaE,IAAY,OACzC,SAAO,wBAAqB,CAC1B,MAAO,IAAI,yBAAuB,uBAAuB,CAC3D,CAAC,EAGH,MAAMC,EAAmBD,EAAQ,OAAQE,GAAMA,IAAM,CAAI,EACnDC,EAAgBN,EAAW,eAAeI,CAAgB,EAEhE,SAAO,wBAAqB,CAC1B,KAAM,CACJ,UAAAH,EACA,QAASK,CACX,CACF,CAAC,CACH,CAAC,CACH,CACF",
|
|
6
|
+
"names": ["GetAddressCommand_exports", "__export", "GetAddressCommand", "P1_CHECK_ON_DEVICE", "P1_NO_CHECK_ON_DEVICE", "cosmosGetAddressApduHeader", "__toCommonJS", "import_device_management_kit", "import_signer_utils", "import_purify_ts", "import_CosmosApplicationErrors", "import_EncodeDerivationPath", "p1", "DERIVATION_PATH_LENGTH", "args", "apduBuilder", "derivationPath", "encodedDerivationPath", "apduResponse", "apduParser", "publicKey", "remaining", "address", "trimmedAddrBytes", "b", "bech32Address"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var r=require("@ledgerhq/device-management-kit"),i=require("@ledgerhq/signer-utils"),s=require("../../app-binder/command/GetAddressCommand"),p=require("../../app-binder/command/utils/CosmosApplicationErrors");describe("GetAddressCommand",()=>{describe("name",()=>{it("should be 'GetAddress'",()=>{const o=new s.GetAddressCommand({derivationPath:"44'/118'/0'/0/0",hrp:"cosmos",checkOnDevice:!1,skipOpenApp:!1});expect(o.name).toBe("GetAddress")})}),describe("getApdu",()=>{const o=n=>{const e=i.DerivationPathUtils.splitPath(n),t=new DataView(new ArrayBuffer(20));for(let a=0;a<e.length;a++){const d=e[a]&2147483647,c=a<3?(2147483648|d)>>>0:d>>>0;t.setUint32(a*4,c,!0)}return new Uint8Array(t.buffer)};it("should return APDU",()=>{const n=new s.GetAddressCommand({derivationPath:"44'/118'/0'/0/0",hrp:"cosmos",checkOnDevice:!1,skipOpenApp:!1}),e=new r.ApduBuilder((0,s.cosmosGetAddressApduHeader)(s.P1_NO_CHECK_ON_DEVICE)).encodeInLVFromAscii("cosmos").addBufferToData(o("44'/118'/0'/0/0")),t=n.getApdu();expect(t.getRawApdu()).toStrictEqual(e.build().getRawApdu())}),it("should return APDU with P1=0x01 when checkOnDevice is true",()=>{const n=new s.GetAddressCommand({derivationPath:"44'/118'/0'/0/0",hrp:"cosmos",checkOnDevice:!0,skipOpenApp:!1}),e=new r.ApduBuilder((0,s.cosmosGetAddressApduHeader)(s.P1_CHECK_ON_DEVICE)).encodeInLVFromAscii("cosmos").addBufferToData(o("44'/118'/0'/0/0")),t=n.getApdu();expect(t.getRawApdu()).toStrictEqual(e.build().getRawApdu())}),it("should throw error when wrong derivation path is provided",()=>{const n=new s.GetAddressCommand({derivationPath:"44'/118'/0'/0",hrp:"cosmos",checkOnDevice:!1,skipOpenApp:!1});expect(()=>{n.getApdu()}).toThrow("GetAddressCommand: expected cosmos style number of path elements, got 4")})}),describe("parseResponse",()=>{it("should return publicKey and address on success",()=>{const o=new Uint8Array(33).fill(1),n=new TextEncoder().encode("cosmos1hj5fvaa2cwgj3zyg5r0yrzr8urwtde4lhp6kn2"),e=new Uint8Array(65);e.set(n);const t=new Uint8Array(98);t.set(o,0),t.set(e,33);const a=new r.ApduResponse({statusCode:new Uint8Array([144,0]),data:t}),c=new s.GetAddressCommand({derivationPath:"44'/118'/0'/0/0",hrp:"cosmos",checkOnDevice:!1,skipOpenApp:!1}).parseResponse(a);expect((0,r.isSuccessCommandResult)(c)).toBe(!0),(0,r.isSuccessCommandResult)(c)&&(expect(c.data.publicKey).toStrictEqual(o),expect(c.data.address).toBe("cosmos1hj5fvaa2cwgj3zyg5r0yrzr8urwtde4lhp6kn2"))}),it("should return CosmosAppCommandError",()=>{const o=new r.ApduResponse({statusCode:new Uint8Array([105,132]),data:new Uint8Array(98)}),e=new s.GetAddressCommand({derivationPath:"44'/118'/0'/0/0",hrp:"cosmos",checkOnDevice:!1,skipOpenApp:!1}).parseResponse(o);if(expect((0,r.isSuccessCommandResult)(e)).toBe(!1),!(0,r.isSuccessCommandResult)(e)){const t=e.error;expect(t.originalError.errorCode).toBe(p.CosmosErrorCodes.DATA_INVALID.slice(2))}}),it("should return InvalidStatusWordError when public key is missing",()=>{const o=new r.ApduResponse({statusCode:new Uint8Array([144,0]),data:new Uint8Array(0)}),e=new s.GetAddressCommand({derivationPath:"44'/118'/0'/0/0",hrp:"cosmos",checkOnDevice:!1,skipOpenApp:!1}).parseResponse(o);if(expect((0,r.isSuccessCommandResult)(e)).toBe(!1),!(0,r.isSuccessCommandResult)(e)){const t=e.error;expect(t.originalError.message).toBe("Public key is missing")}})})});
|
|
2
|
+
//# sourceMappingURL=GetAddressCommand.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/internal/app-binder/command/GetAddressCommand.test.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n ApduBuilder,\n ApduResponse,\n type InvalidStatusWordError,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\nimport { DerivationPathUtils } from \"@ledgerhq/signer-utils\";\n\nimport {\n cosmosGetAddressApduHeader,\n GetAddressCommand,\n P1_CHECK_ON_DEVICE,\n P1_NO_CHECK_ON_DEVICE,\n} from \"@internal/app-binder/command/GetAddressCommand\";\nimport {\n type CosmosAppCommandError,\n CosmosErrorCodes,\n} from \"@internal/app-binder/command/utils/CosmosApplicationErrors\";\n\ndescribe(\"GetAddressCommand\", () => {\n describe(\"name\", () => {\n it(\"should be 'GetAddress'\", () => {\n // ARRANGE\n const command = new GetAddressCommand({\n derivationPath: \"44'/118'/0'/0/0\",\n hrp: \"cosmos\",\n checkOnDevice: false,\n skipOpenApp: false,\n });\n // ASSERT\n expect(command.name).toBe(\"GetAddress\");\n });\n });\n\n describe(\"getApdu\", () => {\n const pathToBuffer = (derivationPath: string): Uint8Array => {\n const derivationPathArray = DerivationPathUtils.splitPath(derivationPath);\n const view = new DataView(new ArrayBuffer(20));\n for (let i = 0; i < derivationPathArray.length; i++) {\n const raw = derivationPathArray[i]! & 0x7fffffff;\n const hardened = i < 3 ? (0x80000000 | raw) >>> 0 : raw >>> 0;\n view.setUint32(i * 4, hardened, true);\n }\n return new Uint8Array(view.buffer);\n };\n\n it(\"should return APDU\", () => {\n // ARRANGE\n const command = new GetAddressCommand({\n derivationPath: \"44'/118'/0'/0/0\",\n hrp: \"cosmos\",\n checkOnDevice: false,\n skipOpenApp: false,\n });\n const expected = new ApduBuilder(\n cosmosGetAddressApduHeader(P1_NO_CHECK_ON_DEVICE),\n )\n .encodeInLVFromAscii(\"cosmos\")\n .addBufferToData(pathToBuffer(\"44'/118'/0'/0/0\"));\n // ACT\n const apdu = command.getApdu();\n // ASSERT\n expect(apdu.getRawApdu()).toStrictEqual(expected.build().getRawApdu());\n });\n\n it(\"should return APDU with P1=0x01 when checkOnDevice is true\", () => {\n // ARRANGE\n const command = new GetAddressCommand({\n derivationPath: \"44'/118'/0'/0/0\",\n hrp: \"cosmos\",\n checkOnDevice: true,\n skipOpenApp: false,\n });\n const expected = new ApduBuilder(\n cosmosGetAddressApduHeader(P1_CHECK_ON_DEVICE),\n )\n .encodeInLVFromAscii(\"cosmos\")\n .addBufferToData(pathToBuffer(\"44'/118'/0'/0/0\"));\n // ACT\n const apdu = command.getApdu();\n // ASSERT\n expect(apdu.getRawApdu()).toStrictEqual(expected.build().getRawApdu());\n });\n\n it(\"should throw error when wrong derivation path is provided\", () => {\n // ARRANGE\n const command = new GetAddressCommand({\n derivationPath: \"44'/118'/0'/0\",\n hrp: \"cosmos\",\n checkOnDevice: false,\n skipOpenApp: false,\n });\n // ACT & ASSERT\n expect(() => {\n command.getApdu();\n }).toThrow(\n \"GetAddressCommand: expected cosmos style number of path elements, got 4\",\n );\n });\n });\n\n describe(\"parseResponse\", () => {\n it(\"should return publicKey and address on success\", () => {\n // ARRANGE\n const publicKey = new Uint8Array(33).fill(0x01);\n const addressBytes = new TextEncoder().encode(\n \"cosmos1hj5fvaa2cwgj3zyg5r0yrzr8urwtde4lhp6kn2\",\n );\n const addressPadded = new Uint8Array(65);\n addressPadded.set(addressBytes);\n const data = new Uint8Array(33 + 65);\n data.set(publicKey, 0);\n data.set(addressPadded, 33);\n const response = new ApduResponse({\n statusCode: new Uint8Array([0x90, 0x00]),\n data,\n });\n const command = new GetAddressCommand({\n derivationPath: \"44'/118'/0'/0/0\",\n hrp: \"cosmos\",\n checkOnDevice: false,\n skipOpenApp: false,\n });\n // ACT\n const result = command.parseResponse(response);\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(true);\n if (isSuccessCommandResult(result)) {\n expect(result.data.publicKey).toStrictEqual(publicKey);\n expect(result.data.address).toBe(\n \"cosmos1hj5fvaa2cwgj3zyg5r0yrzr8urwtde4lhp6kn2\",\n );\n }\n });\n\n it(\"should return CosmosAppCommandError\", () => {\n // ARRANGE\n const response = new ApduResponse({\n statusCode: new Uint8Array([0x69, 0x84]),\n data: new Uint8Array(98),\n });\n const command = new GetAddressCommand({\n derivationPath: \"44'/118'/0'/0/0\",\n hrp: \"cosmos\",\n checkOnDevice: false,\n skipOpenApp: false,\n });\n // ACT\n const result = command.parseResponse(response);\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n const err = result.error as CosmosAppCommandError;\n expect((err.originalError as { errorCode: string }).errorCode).toBe(\n CosmosErrorCodes.DATA_INVALID.slice(2),\n );\n }\n });\n\n it(\"should return InvalidStatusWordError when public key is missing\", () => {\n // ARRANGE\n const response = new ApduResponse({\n statusCode: new Uint8Array([0x90, 0x00]),\n data: new Uint8Array(0),\n });\n const command = new GetAddressCommand({\n derivationPath: \"44'/118'/0'/0/0\",\n hrp: \"cosmos\",\n checkOnDevice: false,\n skipOpenApp: false,\n });\n // ACT\n const result = command.parseResponse(response);\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n const err = result.error as InvalidStatusWordError;\n expect((err.originalError as { message: string }).message).toBe(\n \"Public key is missing\",\n );\n }\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_device_management_kit", "import_signer_utils", "import_GetAddressCommand", "import_CosmosApplicationErrors", "command", "pathToBuffer", "derivationPath", "derivationPathArray", "view", "i", "raw", "hardened", "expected", "apdu", "publicKey", "addressBytes", "addressPadded", "data", "response", "result", "err"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var s=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var A=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var c=(r,o)=>{for(var e in o)s(r,e,{get:o[e],enumerable:!0})},y=(r,o,e,p)=>{if(o&&typeof o=="object"||typeof o=="function")for(let t of A(o))!l.call(r,t)&&t!==e&&s(r,t,{get:()=>o[t],enumerable:!(p=f(o,t))||p.enumerable});return r};var x=r=>y(s({},"__esModule",{value:!0}),r);var g={};c(g,{GetAppConfigCommand:()=>R,cosmosGetAppConfigApduHeader:()=>u});module.exports=x(g);var n=require("@ledgerhq/device-management-kit"),d=require("@ledgerhq/device-management-kit"),i=require("@ledgerhq/signer-utils"),C=require("purify-ts"),m=require("../../app-binder/command/utils/CosmosApplicationErrors");const u={cla:85,ins:0,p1:0,p2:0};class R{name="GetAppConfig";errorHelper=new i.CommandErrorHelper(m.COSMOS_APP_ERRORS,m.CosmosAppCommandErrorFactory);getApdu(){return new d.ApduBuilder(u).build()}parseResponse(o){return C.Maybe.fromNullable(this.errorHelper.getError(o)).orDefaultLazy(()=>{const e=new n.ApduParser(o);e.extract8BitUInt();const p=e.extract8BitUInt(),t=e.extract8BitUInt(),a=e.extract8BitUInt();return p===void 0||t===void 0||a===void 0?(0,n.CommandResultFactory)({error:new n.InvalidStatusWordError("Cannot extract version")}):(0,n.CommandResultFactory)({data:{major:p,minor:t,patch:a}})})}}0&&(module.exports={GetAppConfigCommand,cosmosGetAppConfigApduHeader});
|
|
2
|
+
//# sourceMappingURL=GetAppConfigCommand.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/internal/app-binder/command/GetAppConfigCommand.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n type Apdu,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { ApduBuilder } from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\nimport { Maybe } from \"purify-ts\";\n\nimport { type AppConfig } from \"@api/model/AppConfig\";\nimport {\n COSMOS_APP_ERRORS,\n CosmosAppCommandErrorFactory,\n type CosmosErrorCodes,\n} from \"@internal/app-binder/command/utils/CosmosApplicationErrors\";\n\nexport type GetAppConfigCommandResponse = AppConfig;\n\nexport const cosmosGetAppConfigApduHeader = {\n cla: 0x55,\n ins: 0x00,\n p1: 0x00,\n p2: 0x00,\n};\n\nexport class GetAppConfigCommand\n implements Command<GetAppConfigCommandResponse, void, CosmosErrorCodes>\n{\n readonly name = \"GetAppConfig\";\n\n private readonly errorHelper = new CommandErrorHelper<\n GetAppConfigCommandResponse,\n CosmosErrorCodes\n >(COSMOS_APP_ERRORS, CosmosAppCommandErrorFactory);\n\n getApdu(): Apdu {\n return new ApduBuilder(cosmosGetAppConfigApduHeader).build();\n }\n\n parseResponse(\n apduResponse: ApduResponse,\n ): CommandResult<GetAppConfigCommandResponse, CosmosErrorCodes> {\n return Maybe.fromNullable(\n this.errorHelper.getError(apduResponse),\n ).orDefaultLazy(() => {\n const apduParser = new ApduParser(apduResponse);\n apduParser.extract8BitUInt(); // Skip CLA value\n const major = apduParser.extract8BitUInt();\n const minor = apduParser.extract8BitUInt();\n const patch = apduParser.extract8BitUInt();\n\n if (major === undefined || minor === undefined || patch === undefined) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Cannot extract version\"),\n });\n }\n\n return CommandResultFactory({ data: { major, minor, patch } });\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,yBAAAE,EAAA,iCAAAC,IAAA,eAAAC,EAAAJ,GAAA,IAAAK,EAQO,2CACPA,EAA4B,2CAC5BC,EAAmC,kCACnCC,EAAsB,qBAGtBC,EAIO,sEAIA,MAAML,EAA+B,CAC1C,IAAK,GACL,IAAK,EACL,GAAI,EACJ,GAAI,CACN,EAEO,MAAMD,CAEb,CACW,KAAO,eAEC,YAAc,IAAI,qBAGjC,oBAAmB,8BAA4B,EAEjD,SAAgB,CACd,OAAO,IAAI,cAAYC,CAA4B,EAAE,MAAM,CAC7D,CAEA,cACEM,EAC8D,CAC9D,OAAO,QAAM,aACX,KAAK,YAAY,SAASA,CAAY,CACxC,EAAE,cAAc,IAAM,CACpB,MAAMC,EAAa,IAAI,aAAWD,CAAY,EAC9CC,EAAW,gBAAgB,EAC3B,MAAMC,EAAQD,EAAW,gBAAgB,EACnCE,EAAQF,EAAW,gBAAgB,EACnCG,EAAQH,EAAW,gBAAgB,EAEzC,OAAIC,IAAU,QAAaC,IAAU,QAAaC,IAAU,UACnD,wBAAqB,CAC1B,MAAO,IAAI,yBAAuB,wBAAwB,CAC5D,CAAC,KAGI,wBAAqB,CAAE,KAAM,CAAE,MAAAF,EAAO,MAAAC,EAAO,MAAAC,CAAM,CAAE,CAAC,CAC/D,CAAC,CACH,CACF",
|
|
6
|
+
"names": ["GetAppConfigCommand_exports", "__export", "GetAppConfigCommand", "cosmosGetAppConfigApduHeader", "__toCommonJS", "import_device_management_kit", "import_signer_utils", "import_purify_ts", "import_CosmosApplicationErrors", "apduResponse", "apduParser", "major", "minor", "patch"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var e=require("@ledgerhq/device-management-kit"),n=require("../../app-binder/command/GetAppConfigCommand"),a=require("../../app-binder/command/utils/CosmosApplicationErrors");describe("GetAppConfigCommand",()=>{let t;beforeEach(()=>{t=new n.GetAppConfigCommand}),describe("name",()=>{it("should be 'GetAppConfig'",()=>{expect(t.name).toBe("GetAppConfig")})}),describe("getApdu",()=>{it("should return APDU with CLA=0x55, INS=0x00, P1=0x00, P2=0x00 and no data",()=>{const o=new e.ApduBuilder(n.cosmosGetAppConfigApduHeader).build(),r=t.getApdu();expect(r.getRawApdu()).toStrictEqual(o.getRawApdu())})}),describe("parseResponse",()=>{it("should return major, minor, patch on success",()=>{const o=new e.ApduResponse({statusCode:new Uint8Array([144,0]),data:new Uint8Array([85,1,2,3])}),r=t.parseResponse(o);expect(r).toStrictEqual((0,e.CommandResultFactory)({data:{major:1,minor:2,patch:3}})),expect((0,e.isSuccessCommandResult)(r)).toBe(!0)}),it("should return CosmosAppCommandError with error code 0x6984 and message 'Data Invalid' when status is 0x6984",()=>{const o=new e.ApduResponse({statusCode:new Uint8Array([105,132]),data:new Uint8Array([85,1,2,3])}),r=t.parseResponse(o);if(expect((0,e.isSuccessCommandResult)(r)).toBe(!1),!(0,e.isSuccessCommandResult)(r)){const s=r.error;expect(s.originalError.errorCode).toBe(a.CosmosErrorCodes.DATA_INVALID.slice(2))}}),it("should return InvalidStatusWordError when version is missing",()=>{const o=new e.ApduResponse({statusCode:new Uint8Array([144,0]),data:new Uint8Array([85,1])}),r=t.parseResponse(o);if(expect((0,e.isSuccessCommandResult)(r)).toBe(!1),!(0,e.isSuccessCommandResult)(r)){const s=r.error;expect(s).toBeInstanceOf(e.InvalidStatusWordError),expect(s.originalError.message).toBe("Cannot extract version")}})})});
|
|
2
|
+
//# sourceMappingURL=GetAppConfigCommand.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/internal/app-binder/command/GetAppConfigCommand.test.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n ApduBuilder,\n ApduResponse,\n CommandResultFactory,\n InvalidStatusWordError,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport {\n cosmosGetAppConfigApduHeader,\n GetAppConfigCommand,\n} from \"@internal/app-binder/command/GetAppConfigCommand\";\nimport {\n type CosmosAppCommandError,\n CosmosErrorCodes,\n} from \"@internal/app-binder/command/utils/CosmosApplicationErrors\";\n\ndescribe(\"GetAppConfigCommand\", () => {\n let command: GetAppConfigCommand;\n\n beforeEach(() => {\n command = new GetAppConfigCommand();\n });\n\n describe(\"name\", () => {\n it(\"should be 'GetAppConfig'\", () => {\n // ASSERT\n expect(command.name).toBe(\"GetAppConfig\");\n });\n });\n\n describe(\"getApdu\", () => {\n it(\"should return APDU with CLA=0x55, INS=0x00, P1=0x00, P2=0x00 and no data\", () => {\n // ARRANGE: command is created in beforeEach\n const expected = new ApduBuilder(cosmosGetAppConfigApduHeader).build();\n // ACT\n const apdu = command.getApdu();\n // ASSERT\n expect(apdu.getRawApdu()).toStrictEqual(expected.getRawApdu());\n });\n });\n\n describe(\"parseResponse\", () => {\n it(\"should return major, minor, patch on success\", () => {\n // ARRANGE\n const response = new ApduResponse({\n statusCode: new Uint8Array([0x90, 0x00]),\n data: new Uint8Array([0x55, 0x01, 0x02, 0x03]), // CLA, major=1, minor=2, patch=3\n });\n // ACT\n const result = command.parseResponse(response);\n // ASSERT\n expect(result).toStrictEqual(\n CommandResultFactory({ data: { major: 1, minor: 2, patch: 3 } }),\n );\n expect(isSuccessCommandResult(result)).toBe(true);\n });\n\n it(\"should return CosmosAppCommandError with error code 0x6984 and message 'Data Invalid' when status is 0x6984\", () => {\n // ARRANGE\n const response = new ApduResponse({\n statusCode: new Uint8Array([0x69, 0x84]),\n data: new Uint8Array([0x55, 0x01, 0x02, 0x03]),\n });\n // ACT\n const result = command.parseResponse(response);\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n const err = result.error as CosmosAppCommandError;\n expect((err.originalError as { errorCode: string }).errorCode).toBe(\n CosmosErrorCodes.DATA_INVALID.slice(2),\n );\n }\n });\n\n it(\"should return InvalidStatusWordError when version is missing\", () => {\n // ARRANGE\n const response = new ApduResponse({\n statusCode: new Uint8Array([0x90, 0x00]),\n data: new Uint8Array([0x55, 0x01]), // only CLA + major; minor and patch missing\n });\n // ACT\n const result = command.parseResponse(response);\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n const err = result.error as InvalidStatusWordError;\n expect(err).toBeInstanceOf(InvalidStatusWordError);\n expect((err.originalError as { message: string }).message).toBe(\n \"Cannot extract version\",\n );\n }\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "aAAA,IAAAA,EAMO,2CAEPC,EAGO,4DACPC,EAGO,sEAEP,SAAS,sBAAuB,IAAM,CACpC,IAAIC,EAEJ,WAAW,IAAM,CACfA,EAAU,IAAI,qBAChB,CAAC,EAED,SAAS,OAAQ,IAAM,CACrB,GAAG,2BAA4B,IAAM,CAEnC,OAAOA,EAAQ,IAAI,EAAE,KAAK,cAAc,CAC1C,CAAC,CACH,CAAC,EAED,SAAS,UAAW,IAAM,CACxB,GAAG,2EAA4E,IAAM,CAEnF,MAAMC,EAAW,IAAI,cAAY,8BAA4B,EAAE,MAAM,EAE/DC,EAAOF,EAAQ,QAAQ,EAE7B,OAAOE,EAAK,WAAW,CAAC,EAAE,cAAcD,EAAS,WAAW,CAAC,CAC/D,CAAC,CACH,CAAC,EAED,SAAS,gBAAiB,IAAM,CAC9B,GAAG,+CAAgD,IAAM,CAEvD,MAAME,EAAW,IAAI,eAAa,CAChC,WAAY,IAAI,WAAW,CAAC,IAAM,CAAI,CAAC,EACvC,KAAM,IAAI,WAAW,CAAC,GAAM,EAAM,EAAM,CAAI,CAAC,CAC/C,CAAC,EAEKC,EAASJ,EAAQ,cAAcG,CAAQ,EAE7C,OAAOC,CAAM,EAAE,iBACb,wBAAqB,CAAE,KAAM,CAAE,MAAO,EAAG,MAAO,EAAG,MAAO,CAAE,CAAE,CAAC,CACjE,EACA,UAAO,0BAAuBA,CAAM,CAAC,EAAE,KAAK,EAAI,CAClD,CAAC,EAED,GAAG,8GAA+G,IAAM,CAEtH,MAAMD,EAAW,IAAI,eAAa,CAChC,WAAY,IAAI,WAAW,CAAC,IAAM,GAAI,CAAC,EACvC,KAAM,IAAI,WAAW,CAAC,GAAM,EAAM,EAAM,CAAI,CAAC,CAC/C,CAAC,EAEKC,EAASJ,EAAQ,cAAcG,CAAQ,EAG7C,GADA,UAAO,0BAAuBC,CAAM,CAAC,EAAE,KAAK,EAAK,EAC7C,IAAC,0BAAuBA,CAAM,EAAG,CACnC,MAAMC,EAAMD,EAAO,MACnB,OAAQC,EAAI,cAAwC,SAAS,EAAE,KAC7D,mBAAiB,aAAa,MAAM,CAAC,CACvC,CACF,CACF,CAAC,EAED,GAAG,+DAAgE,IAAM,CAEvE,MAAMF,EAAW,IAAI,eAAa,CAChC,WAAY,IAAI,WAAW,CAAC,IAAM,CAAI,CAAC,EACvC,KAAM,IAAI,WAAW,CAAC,GAAM,CAAI,CAAC,CACnC,CAAC,EAEKC,EAASJ,EAAQ,cAAcG,CAAQ,EAG7C,GADA,UAAO,0BAAuBC,CAAM,CAAC,EAAE,KAAK,EAAK,EAC7C,IAAC,0BAAuBA,CAAM,EAAG,CACnC,MAAMC,EAAMD,EAAO,MACnB,OAAOC,CAAG,EAAE,eAAe,wBAAsB,EACjD,OAAQA,EAAI,cAAsC,OAAO,EAAE,KACzD,wBACF,CACF,CACF,CAAC,CACH,CAAC,CACH,CAAC",
|
|
6
|
+
"names": ["import_device_management_kit", "import_GetAppConfigCommand", "import_CosmosApplicationErrors", "command", "expected", "apdu", "response", "result", "err"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var d=Object.defineProperty;var C=Object.getOwnPropertyDescriptor;var A=Object.getOwnPropertyNames;var T=Object.prototype.hasOwnProperty;var S=(t,r)=>{for(var e in r)d(t,e,{get:r[e],enumerable:!0})},f=(t,r,e,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let a of A(r))!T.call(t,a)&&a!==e&&d(t,a,{get:()=>r[a],enumerable:!(n=C(r,a))||n.enumerable});return t};var x=t=>f(d({},"__esModule",{value:!0}),t);var R={};S(R,{P1_ADD:()=>c,P1_INIT:()=>h,P1_LAST:()=>g,SignPhase:()=>l,SignTransactionCommand:()=>P,cosmotSignTransactionApduHeader:()=>u});module.exports=x(R);var o=require("@ledgerhq/device-management-kit"),s=require("@ledgerhq/signer-utils"),p=require("purify-ts"),i=require("../../app-binder/command/utils/CosmosApplicationErrors"),m=require("../../app-binder/command/utils/EncodeDerivationPath");const u=t=>({cla:85,ins:2,p1:t,p2:0}),h=0,c=1,g=2,y=5;var l=(n=>(n.INIT="init",n.ADD="add",n.LAST="last",n))(l||{});class P{name="SignTransaction";args;apduBuilder;errorHelper=new s.CommandErrorHelper(i.COSMOS_APP_ERRORS,i.CosmosAppCommandErrorFactory);constructor(r){this.args=r,this.apduBuilder=new o.ApduBuilder(u(this.p1()))}getApdu(){return this.isFirstChunk()?this.firstChunk():this.nextChunk()}parseResponse(r){return p.Maybe.fromNullable(this.errorHelper.getError(r)).orDefaultLazy(()=>{const e=new o.ApduParser(r),n=e.getUnparsedRemainingLength(),a=e.extractFieldByLength(n);return(0,o.CommandResultFactory)({data:a})})}p1(){switch(this.args.phase){case"init":return h;case"add":return c;case"last":return g}}isFirstChunk(){return this.args.phase==="init"}firstChunk(){const{derivationPath:r,hrp:e}=this.args;if(!r||!e)throw new Error("SignTransactionCommand: derivation path and human readable prefix are required for 'init' phase.");const n=s.DerivationPathUtils.splitPath(r);if(n.length!==y)throw new Error(`SignTransactionCommand: expected cosmos style number of path elements, got ${n.length}`);const a=(0,m.encodeDerivationPath)(n);return this.apduBuilder.addBufferToData(a),this.apduBuilder.encodeInLVFromAscii(e),this.apduBuilder.build()}nextChunk(){if(!this.args.transactionChunk)throw new Error("SignTransactionCommand: transaction chunk is required for 'add' and 'last' phases.");return this.apduBuilder.addBufferToData(this.args.transactionChunk),this.apduBuilder.build()}}0&&(module.exports={P1_ADD,P1_INIT,P1_LAST,SignPhase,SignTransactionCommand,cosmotSignTransactionApduHeader});
|
|
2
|
+
//# sourceMappingURL=SignTransactionCommand.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/internal/app-binder/command/SignTransactionCommand.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n} from \"@ledgerhq/device-management-kit\";\nimport {\n CommandErrorHelper,\n DerivationPathUtils,\n} from \"@ledgerhq/signer-utils\";\nimport { Maybe } from \"purify-ts\";\n\nimport { type Signature } from \"@api/model/Signature\";\nimport {\n COSMOS_APP_ERRORS,\n CosmosAppCommandErrorFactory,\n type CosmosErrorCodes,\n} from \"@internal/app-binder/command/utils/CosmosApplicationErrors\";\nimport { encodeDerivationPath } from \"@internal/app-binder/command/utils/EncodeDerivationPath\";\n\nexport const cosmotSignTransactionApduHeader = (p1: number) => ({\n cla: 0x55,\n ins: 0x02,\n p1: p1,\n p2: 0x00,\n});\n\nexport const P1_INIT = 0x00;\nexport const P1_ADD = 0x01;\nexport const P1_LAST = 0x02;\nconst DERIVATION_PATH_LENGTH = 5;\n\nexport enum SignPhase {\n INIT = \"init\",\n ADD = \"add\",\n LAST = \"last\",\n}\n\nexport type SignTransactionCommandArgs = {\n phase: SignPhase;\n derivationPath?: string;\n hrp?: string;\n transactionChunk?: Uint8Array;\n};\n\nexport type SignTransactionCommandResponse = Signature;\n\nexport class SignTransactionCommand\n implements\n Command<\n SignTransactionCommandResponse,\n SignTransactionCommandArgs,\n CosmosErrorCodes\n >\n{\n readonly name = \"SignTransaction\";\n\n private readonly args: SignTransactionCommandArgs;\n\n private readonly apduBuilder: ApduBuilder;\n\n private readonly errorHelper = new CommandErrorHelper<\n SignTransactionCommandResponse,\n CosmosErrorCodes\n >(COSMOS_APP_ERRORS, CosmosAppCommandErrorFactory);\n\n constructor(args: SignTransactionCommandArgs) {\n this.args = args;\n this.apduBuilder = new ApduBuilder(\n cosmotSignTransactionApduHeader(this.p1()),\n );\n }\n\n public getApdu(): Apdu {\n return this.isFirstChunk() ? this.firstChunk() : this.nextChunk();\n }\n\n public parseResponse(\n apduResponse: ApduResponse,\n ): CommandResult<SignTransactionCommandResponse, CosmosErrorCodes> {\n return Maybe.fromNullable(\n this.errorHelper.getError(apduResponse),\n ).orDefaultLazy(() => {\n const apduParser = new ApduParser(apduResponse);\n\n const remaining = apduParser.getUnparsedRemainingLength();\n const signature = apduParser.extractFieldByLength(remaining);\n\n return CommandResultFactory({\n data: signature as Signature,\n });\n });\n }\n\n private p1(): number {\n switch (this.args.phase) {\n case SignPhase.INIT:\n return P1_INIT;\n case SignPhase.ADD:\n return P1_ADD;\n case SignPhase.LAST:\n return P1_LAST;\n }\n }\n\n private isFirstChunk(): boolean {\n return this.args.phase === SignPhase.INIT;\n }\n\n private firstChunk(): Apdu {\n const { derivationPath, hrp } = this.args;\n\n if (!derivationPath || !hrp) {\n throw new Error(\n \"SignTransactionCommand: derivation path and human readable prefix are required for 'init' phase.\",\n );\n }\n\n const paths = DerivationPathUtils.splitPath(derivationPath);\n\n if (paths.length !== DERIVATION_PATH_LENGTH) {\n throw new Error(\n `SignTransactionCommand: expected cosmos style number of path elements, got ${paths.length}`,\n );\n }\n\n const encodedDerivationPath = encodeDerivationPath(paths);\n this.apduBuilder.addBufferToData(encodedDerivationPath);\n this.apduBuilder.encodeInLVFromAscii(hrp);\n return this.apduBuilder.build();\n }\n\n private nextChunk(): Apdu {\n if (!this.args.transactionChunk) {\n throw new Error(\n \"SignTransactionCommand: transaction chunk is required for 'add' and 'last' phases.\",\n );\n }\n\n this.apduBuilder.addBufferToData(this.args.transactionChunk);\n return this.apduBuilder.build();\n }\n}\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,YAAAE,EAAA,YAAAC,EAAA,YAAAC,EAAA,cAAAC,EAAA,2BAAAC,EAAA,oCAAAC,IAAA,eAAAC,EAAAR,GAAA,IAAAS,EAQO,2CACPC,EAGO,kCACPC,EAAsB,qBAGtBC,EAIO,sEACPC,EAAqC,mEAE9B,MAAMN,EAAmCO,IAAgB,CAC9D,IAAK,GACL,IAAK,EACL,GAAIA,EACJ,GAAI,CACN,GAEaX,EAAU,EACVD,EAAS,EACTE,EAAU,EACjBW,EAAyB,EAExB,IAAKV,OACVA,EAAA,KAAO,OACPA,EAAA,IAAM,MACNA,EAAA,KAAO,OAHGA,OAAA,IAeL,MAAMC,CAOb,CACW,KAAO,kBAEC,KAEA,YAEA,YAAc,IAAI,qBAGjC,oBAAmB,8BAA4B,EAEjD,YAAYU,EAAkC,CAC5C,KAAK,KAAOA,EACZ,KAAK,YAAc,IAAI,cACrBT,EAAgC,KAAK,GAAG,CAAC,CAC3C,CACF,CAEO,SAAgB,CACrB,OAAO,KAAK,aAAa,EAAI,KAAK,WAAW,EAAI,KAAK,UAAU,CAClE,CAEO,cACLU,EACiE,CACjE,OAAO,QAAM,aACX,KAAK,YAAY,SAASA,CAAY,CACxC,EAAE,cAAc,IAAM,CACpB,MAAMC,EAAa,IAAI,aAAWD,CAAY,EAExCE,EAAYD,EAAW,2BAA2B,EAClDE,EAAYF,EAAW,qBAAqBC,CAAS,EAE3D,SAAO,wBAAqB,CAC1B,KAAMC,CACR,CAAC,CACH,CAAC,CACH,CAEQ,IAAa,CACnB,OAAQ,KAAK,KAAK,MAAO,CACvB,IAAK,OACH,OAAOjB,EACT,IAAK,MACH,OAAOD,EACT,IAAK,OACH,OAAOE,CACX,CACF,CAEQ,cAAwB,CAC9B,OAAO,KAAK,KAAK,QAAU,MAC7B,CAEQ,YAAmB,CACzB,KAAM,CAAE,eAAAiB,EAAgB,IAAAC,CAAI,EAAI,KAAK,KAErC,GAAI,CAACD,GAAkB,CAACC,EACtB,MAAM,IAAI,MACR,kGACF,EAGF,MAAMC,EAAQ,sBAAoB,UAAUF,CAAc,EAE1D,GAAIE,EAAM,SAAWR,EACnB,MAAM,IAAI,MACR,8EAA8EQ,EAAM,MAAM,EAC5F,EAGF,MAAMC,KAAwB,wBAAqBD,CAAK,EACxD,YAAK,YAAY,gBAAgBC,CAAqB,EACtD,KAAK,YAAY,oBAAoBF,CAAG,EACjC,KAAK,YAAY,MAAM,CAChC,CAEQ,WAAkB,CACxB,GAAI,CAAC,KAAK,KAAK,iBACb,MAAM,IAAI,MACR,oFACF,EAGF,YAAK,YAAY,gBAAgB,KAAK,KAAK,gBAAgB,EACpD,KAAK,YAAY,MAAM,CAChC,CACF",
|
|
6
|
+
"names": ["SignTransactionCommand_exports", "__export", "P1_ADD", "P1_INIT", "P1_LAST", "SignPhase", "SignTransactionCommand", "cosmotSignTransactionApduHeader", "__toCommonJS", "import_device_management_kit", "import_signer_utils", "import_purify_ts", "import_CosmosApplicationErrors", "import_EncodeDerivationPath", "p1", "DERIVATION_PATH_LENGTH", "args", "apduResponse", "apduParser", "remaining", "signature", "derivationPath", "hrp", "paths", "encodedDerivationPath"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var o=require("@ledgerhq/device-management-kit"),d=require("@ledgerhq/signer-utils"),e=require("../../app-binder/command/SignTransactionCommand"),c=require("../../app-binder/command/utils/CosmosApplicationErrors");describe("SignTransactionCommand",()=>{describe("name",()=>{it("should be 'SignTransaction'",()=>{const r=new e.SignTransactionCommand({phase:e.SignPhase.INIT,derivationPath:"44'/118'/0'/0/0",hrp:"cosmos"});expect(r.name).toBe("SignTransaction")})}),describe("getApdu",()=>{const r=t=>{const n=d.DerivationPathUtils.splitPath(t),a=new DataView(new ArrayBuffer(20));for(let s=0;s<n.length;s++){const i=n[s]&2147483647,p=s<3?(2147483648|i)>>>0:i>>>0;a.setUint32(s*4,p,!0)}return new Uint8Array(a.buffer)};it("should return first APDU packet when phase is INIT",()=>{const t=new e.SignTransactionCommand({phase:e.SignPhase.INIT,derivationPath:"44'/118'/0'/0/0",hrp:"cosmos"}),n=new o.ApduBuilder((0,e.cosmotSignTransactionApduHeader)(e.P1_INIT)).addBufferToData(r("44'/118'/0'/0/0")).encodeInLVFromAscii("cosmos"),a=t.getApdu();expect(a.getRawApdu()).toStrictEqual(n.build().getRawApdu())}),it("should return APDU add packet (P1=0x01) when phase is ADD",()=>{const t=new TextEncoder().encode('{"fake-tx":"0"}'),n=new e.SignTransactionCommand({phase:e.SignPhase.ADD,transactionChunk:t}),a=new o.ApduBuilder((0,e.cosmotSignTransactionApduHeader)(e.P1_ADD)).addBufferToData(t),s=n.getApdu();expect(s.getRawApdu()).toStrictEqual(a.build().getRawApdu())}),it("should return APDU last packet (P1=0x02) when phase is LAST",()=>{const t=new TextEncoder().encode('{"fake-tw":"0"}'),n=new e.SignTransactionCommand({phase:e.SignPhase.LAST,transactionChunk:t}),a=new o.ApduBuilder((0,e.cosmotSignTransactionApduHeader)(e.P1_LAST)).addBufferToData(t),s=n.getApdu();expect(s.getRawApdu()).toStrictEqual(a.build().getRawApdu())}),it("should throw when phase is INIT and derivationPath is missing",()=>{const t=new e.SignTransactionCommand({phase:e.SignPhase.INIT,hrp:"cosmos"});expect(()=>t.getApdu()).toThrow("SignTransactionCommand: derivation path and human readable prefix are required for 'init' phase.")}),it("should throw when phase is INIT and hrp is missing",()=>{const t=new e.SignTransactionCommand({phase:e.SignPhase.INIT,derivationPath:"44'/118'/0'/0/0"});expect(()=>t.getApdu()).toThrow("SignTransactionCommand: derivation path and human readable prefix are required for 'init' phase.")}),it("should throw when phase is INIT and path does not have 5 elements",()=>{const t=new e.SignTransactionCommand({phase:e.SignPhase.INIT,derivationPath:"44'/118'/0'",hrp:"cosmos"});expect(()=>t.getApdu()).toThrow("SignTransactionCommand: expected cosmos style number of path elements, got 3")}),it("should throw when phase is ADD and transactionChunk is missing",()=>{const t=new e.SignTransactionCommand({phase:e.SignPhase.ADD});expect(()=>t.getApdu()).toThrow("SignTransactionCommand: transaction chunk is required for 'add' and 'last' phases.")}),it("should throw when phase is LAST and transactionChunk is missing",()=>{const t=new e.SignTransactionCommand({phase:e.SignPhase.LAST});expect(()=>t.getApdu()).toThrow("SignTransactionCommand: transaction chunk is required for 'add' and 'last' phases.")})}),describe("parseResponse",()=>{it("should return signature on success",()=>{const r=new Uint8Array(64).fill(171),t=new o.ApduResponse({statusCode:new Uint8Array([144,0]),data:r}),a=new e.SignTransactionCommand({phase:e.SignPhase.LAST,transactionChunk:new Uint8Array(1)}).parseResponse(t);expect(a).toStrictEqual((0,o.CommandResultFactory)({data:r})),expect((0,o.isSuccessCommandResult)(a)).toBe(!0)}),it("should return CosmosAppCommandError with DATA_INVALID when status is 0x6984",()=>{const r=new o.ApduResponse({statusCode:new Uint8Array([105,132]),data:new Uint8Array(64)}),n=new e.SignTransactionCommand({phase:e.SignPhase.LAST,transactionChunk:new Uint8Array(1)}).parseResponse(r);if(expect((0,o.isSuccessCommandResult)(n)).toBe(!1),!(0,o.isSuccessCommandResult)(n)){const a=n.error;expect(a.originalError.errorCode).toBe(c.CosmosErrorCodes.DATA_INVALID.slice(2))}})})});
|
|
2
|
+
//# sourceMappingURL=SignTransactionCommand.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/internal/app-binder/command/SignTransactionCommand.test.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n ApduBuilder,\n ApduResponse,\n CommandResultFactory,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\nimport { DerivationPathUtils } from \"@ledgerhq/signer-utils\";\n\nimport {\n cosmotSignTransactionApduHeader,\n P1_ADD,\n P1_INIT,\n P1_LAST,\n SignPhase,\n SignTransactionCommand,\n} from \"@internal/app-binder/command/SignTransactionCommand\";\nimport {\n type CosmosAppCommandError,\n CosmosErrorCodes,\n} from \"@internal/app-binder/command/utils/CosmosApplicationErrors\";\n\ndescribe(\"SignTransactionCommand\", () => {\n describe(\"name\", () => {\n it(\"should be 'SignTransaction'\", () => {\n // ARRANGE\n const command = new SignTransactionCommand({\n phase: SignPhase.INIT,\n derivationPath: \"44'/118'/0'/0/0\",\n hrp: \"cosmos\",\n });\n // ASSERT\n expect(command.name).toBe(\"SignTransaction\");\n });\n });\n\n describe(\"getApdu\", () => {\n const pathToBuffer = (derivationPath: string): Uint8Array => {\n const derivationPathArray = DerivationPathUtils.splitPath(derivationPath);\n const view = new DataView(new ArrayBuffer(20));\n for (let i = 0; i < derivationPathArray.length; i++) {\n const raw = derivationPathArray[i]! & 0x7fffffff;\n const hardened = i < 3 ? (0x80000000 | raw) >>> 0 : raw >>> 0;\n view.setUint32(i * 4, hardened, true);\n }\n return new Uint8Array(view.buffer);\n };\n\n it(\"should return first APDU packet when phase is INIT\", () => {\n // ARRANGE\n const command = new SignTransactionCommand({\n phase: SignPhase.INIT,\n derivationPath: \"44'/118'/0'/0/0\",\n hrp: \"cosmos\",\n });\n const expected = new ApduBuilder(cosmotSignTransactionApduHeader(P1_INIT))\n .addBufferToData(pathToBuffer(\"44'/118'/0'/0/0\"))\n .encodeInLVFromAscii(\"cosmos\");\n // ACT\n const apdu = command.getApdu();\n // ASSERT\n expect(apdu.getRawApdu()).toStrictEqual(expected.build().getRawApdu());\n });\n\n it(\"should return APDU add packet (P1=0x01) when phase is ADD\", () => {\n // ARRANGE\n const chunk = new TextEncoder().encode('{\"fake-tx\":\"0\"}');\n const command = new SignTransactionCommand({\n phase: SignPhase.ADD,\n transactionChunk: chunk,\n });\n const expected = new ApduBuilder(\n cosmotSignTransactionApduHeader(P1_ADD),\n ).addBufferToData(chunk);\n // ACT\n const apdu = command.getApdu();\n // ASSERT\n expect(apdu.getRawApdu()).toStrictEqual(expected.build().getRawApdu());\n });\n\n it(\"should return APDU last packet (P1=0x02) when phase is LAST\", () => {\n // ARRANGE\n const chunk = new TextEncoder().encode('{\"fake-tw\":\"0\"}');\n const command = new SignTransactionCommand({\n phase: SignPhase.LAST,\n transactionChunk: chunk,\n });\n const expected = new ApduBuilder(\n cosmotSignTransactionApduHeader(P1_LAST),\n ).addBufferToData(chunk);\n // ACT\n const apdu = command.getApdu();\n // ASSERT\n expect(apdu.getRawApdu()).toStrictEqual(expected.build().getRawApdu());\n });\n\n it(\"should throw when phase is INIT and derivationPath is missing\", () => {\n // ARRANGE\n const command = new SignTransactionCommand({\n phase: SignPhase.INIT,\n hrp: \"cosmos\",\n });\n // ACT & ASSERT\n expect(() => command.getApdu()).toThrow(\n \"SignTransactionCommand: derivation path and human readable prefix are required for 'init' phase.\",\n );\n });\n\n it(\"should throw when phase is INIT and hrp is missing\", () => {\n // ARRANGE\n const command = new SignTransactionCommand({\n phase: SignPhase.INIT,\n derivationPath: \"44'/118'/0'/0/0\",\n });\n // ACT & ASSERT\n expect(() => command.getApdu()).toThrow(\n \"SignTransactionCommand: derivation path and human readable prefix are required for 'init' phase.\",\n );\n });\n\n it(\"should throw when phase is INIT and path does not have 5 elements\", () => {\n // ARRANGE\n const command = new SignTransactionCommand({\n phase: SignPhase.INIT,\n derivationPath: \"44'/118'/0'\",\n hrp: \"cosmos\",\n });\n // ACT & ASSERT\n expect(() => command.getApdu()).toThrow(\n \"SignTransactionCommand: expected cosmos style number of path elements, got 3\",\n );\n });\n\n it(\"should throw when phase is ADD and transactionChunk is missing\", () => {\n // ARRANGE\n const command = new SignTransactionCommand({\n phase: SignPhase.ADD,\n });\n // ACT & ASSERT\n expect(() => command.getApdu()).toThrow(\n \"SignTransactionCommand: transaction chunk is required for 'add' and 'last' phases.\",\n );\n });\n\n it(\"should throw when phase is LAST and transactionChunk is missing\", () => {\n // ARRANGE\n const command = new SignTransactionCommand({\n phase: SignPhase.LAST,\n });\n // ACT & ASSERT\n expect(() => command.getApdu()).toThrow(\n \"SignTransactionCommand: transaction chunk is required for 'add' and 'last' phases.\",\n );\n });\n });\n\n describe(\"parseResponse\", () => {\n it(\"should return signature on success\", () => {\n // ARRANGE\n const signature = new Uint8Array(64).fill(0xab);\n const response = new ApduResponse({\n statusCode: new Uint8Array([0x90, 0x00]),\n data: signature,\n });\n const command = new SignTransactionCommand({\n phase: SignPhase.LAST,\n transactionChunk: new Uint8Array(1),\n });\n // ACT\n const result = command.parseResponse(response);\n // ASSERT\n expect(result).toStrictEqual(CommandResultFactory({ data: signature }));\n expect(isSuccessCommandResult(result)).toBe(true);\n });\n\n it(\"should return CosmosAppCommandError with DATA_INVALID when status is 0x6984\", () => {\n // ARRANGE\n const response = new ApduResponse({\n statusCode: new Uint8Array([0x69, 0x84]),\n data: new Uint8Array(64),\n });\n const command = new SignTransactionCommand({\n phase: SignPhase.LAST,\n transactionChunk: new Uint8Array(1),\n });\n // ACT\n const result = command.parseResponse(response);\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n const err = result.error as CosmosAppCommandError;\n expect((err.originalError as { errorCode: string }).errorCode).toBe(\n CosmosErrorCodes.DATA_INVALID.slice(2),\n );\n }\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_device_management_kit", "import_signer_utils", "import_SignTransactionCommand", "import_CosmosApplicationErrors", "command", "pathToBuffer", "derivationPath", "derivationPathArray", "view", "i", "raw", "hardened", "expected", "apdu", "chunk", "signature", "response", "result", "err"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var e=require("./CosmosApplicationErrors");describe("CosmosAppCommandError",()=>{it('Should have a tag "CosmosAppCommandError"',()=>{const r=new e.CosmosAppCommandError({message:"Test error message",errorCode:e.CosmosErrorCodes.EXECUTION_ERROR});expect(r._tag).toBe("CosmosAppCommandError")}),it.each([{errorCode:e.CosmosErrorCodes.EXECUTION_ERROR,message:"Execution Error"},{errorCode:e.CosmosErrorCodes.EMPTY_BUFFER,message:"Empty buffer"},{errorCode:e.CosmosErrorCodes.OUTPUT_BUFFER_TOO_SMALL,message:"Output buffer too small"},{errorCode:e.CosmosErrorCodes.COMMAND_NOT_ALLOWED,message:"Command not allowed"},{errorCode:e.CosmosErrorCodes.DATA_INVALID,message:"Data Invalid"},{errorCode:e.CosmosErrorCodes.TRANSACTION_DATA_EXCEEDS_BUFFER_CAPACITY,message:"Transaction data exceeds buffer capacity"},{errorCode:e.CosmosErrorCodes.WRONG_HRP_LENGTH,message:"Wrong HRP Length"},{errorCode:e.CosmosErrorCodes.INVALID_HD_PATH_COIN_VALUE,message:"Invalid HD path coin value"},{errorCode:e.CosmosErrorCodes.CHAIN_CONFIG_NOT_SUPPORTED,message:"Chain Config not supported"},{errorCode:e.CosmosErrorCodes.EXPERT_MODE_REQUIRED_FOR_ETH_CHAIN,message:"Expert Mode required for Eth chain"},{errorCode:e.CosmosErrorCodes.INS_NOT_SUPPORTED,message:"INS not supported"},{errorCode:e.CosmosErrorCodes.CLA_NOT_SUPPORTED,message:"CLA not supported"},{errorCode:e.CosmosErrorCodes.UNKNOWN_ERROR,message:"Unknown error"}])("Should have correct error code and message for %s",({errorCode:r,message:o})=>{const s=new e.CosmosAppCommandError({errorCode:r,message:o});expect(s.errorCode).toBe(r),expect(s.message).toBe(o)})});
|
|
2
|
+
//# sourceMappingURL=CosmosApplicationError.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../src/internal/app-binder/command/utils/CosmosApplicationError.test.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n CosmosAppCommandError,\n CosmosErrorCodes,\n} from \"./CosmosApplicationErrors\";\n\ndescribe(\"CosmosAppCommandError\", () => {\n it('Should have a tag \"CosmosAppCommandError\"', () => {\n const error = new CosmosAppCommandError({\n message: \"Test error message\",\n errorCode: CosmosErrorCodes.EXECUTION_ERROR,\n });\n expect(error._tag).toBe(\"CosmosAppCommandError\");\n });\n\n it.each([\n { errorCode: CosmosErrorCodes.EXECUTION_ERROR, message: \"Execution Error\" },\n { errorCode: CosmosErrorCodes.EMPTY_BUFFER, message: \"Empty buffer\" },\n {\n errorCode: CosmosErrorCodes.OUTPUT_BUFFER_TOO_SMALL,\n message: \"Output buffer too small\",\n },\n {\n errorCode: CosmosErrorCodes.COMMAND_NOT_ALLOWED,\n message: \"Command not allowed\",\n },\n { errorCode: CosmosErrorCodes.DATA_INVALID, message: \"Data Invalid\" },\n {\n errorCode: CosmosErrorCodes.TRANSACTION_DATA_EXCEEDS_BUFFER_CAPACITY,\n message: \"Transaction data exceeds buffer capacity\",\n },\n {\n errorCode: CosmosErrorCodes.WRONG_HRP_LENGTH,\n message: \"Wrong HRP Length\",\n },\n {\n errorCode: CosmosErrorCodes.INVALID_HD_PATH_COIN_VALUE,\n message: \"Invalid HD path coin value\",\n },\n {\n errorCode: CosmosErrorCodes.CHAIN_CONFIG_NOT_SUPPORTED,\n message: \"Chain Config not supported\",\n },\n {\n errorCode: CosmosErrorCodes.EXPERT_MODE_REQUIRED_FOR_ETH_CHAIN,\n message: \"Expert Mode required for Eth chain\",\n },\n {\n errorCode: CosmosErrorCodes.INS_NOT_SUPPORTED,\n message: \"INS not supported\",\n },\n {\n errorCode: CosmosErrorCodes.CLA_NOT_SUPPORTED,\n message: \"CLA not supported\",\n },\n { errorCode: CosmosErrorCodes.UNKNOWN_ERROR, message: \"Unknown error\" },\n ])(\n \"Should have correct error code and message for %s\",\n ({ errorCode, message }) => {\n const error = new CosmosAppCommandError({\n errorCode: errorCode,\n message: message,\n });\n expect(error.errorCode).toBe(errorCode);\n expect(error.message).toBe(message);\n },\n );\n});\n"],
|
|
5
|
+
"mappings": "aAAA,IAAAA,EAGO,qCAEP,SAAS,wBAAyB,IAAM,CACtC,GAAG,4CAA6C,IAAM,CACpD,MAAMC,EAAQ,IAAI,wBAAsB,CACtC,QAAS,qBACT,UAAW,mBAAiB,eAC9B,CAAC,EACD,OAAOA,EAAM,IAAI,EAAE,KAAK,uBAAuB,CACjD,CAAC,EAED,GAAG,KAAK,CACN,CAAE,UAAW,mBAAiB,gBAAiB,QAAS,iBAAkB,EAC1E,CAAE,UAAW,mBAAiB,aAAc,QAAS,cAAe,EACpE,CACE,UAAW,mBAAiB,wBAC5B,QAAS,yBACX,EACA,CACE,UAAW,mBAAiB,oBAC5B,QAAS,qBACX,EACA,CAAE,UAAW,mBAAiB,aAAc,QAAS,cAAe,EACpE,CACE,UAAW,mBAAiB,yCAC5B,QAAS,0CACX,EACA,CACE,UAAW,mBAAiB,iBAC5B,QAAS,kBACX,EACA,CACE,UAAW,mBAAiB,2BAC5B,QAAS,4BACX,EACA,CACE,UAAW,mBAAiB,2BAC5B,QAAS,4BACX,EACA,CACE,UAAW,mBAAiB,mCAC5B,QAAS,oCACX,EACA,CACE,UAAW,mBAAiB,kBAC5B,QAAS,mBACX,EACA,CACE,UAAW,mBAAiB,kBAC5B,QAAS,mBACX,EACA,CAAE,UAAW,mBAAiB,cAAe,QAAS,eAAgB,CACxE,CAAC,EACC,oDACA,CAAC,CAAE,UAAAC,EAAW,QAAAC,CAAQ,IAAM,CAC1B,MAAMF,EAAQ,IAAI,wBAAsB,CACtC,UAAWC,EACX,QAASC,CACX,CAAC,EACD,OAAOF,EAAM,SAAS,EAAE,KAAKC,CAAS,EACtC,OAAOD,EAAM,OAAO,EAAE,KAAKE,CAAO,CACpC,CACF,CACF,CAAC",
|
|
6
|
+
"names": ["import_CosmosApplicationErrors", "error", "errorCode", "message"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var _=Object.defineProperty;var O=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var s=Object.prototype.hasOwnProperty;var R=(x,a)=>{for(var t in a)_(x,t,{get:a[t],enumerable:!0})},T=(x,a,t,E)=>{if(a&&typeof a=="object"||typeof a=="function")for(let n of p(a))!s.call(x,n)&&n!==t&&_(x,n,{get:()=>a[n],enumerable:!(E=O(a,n))||E.enumerable});return x};var g=x=>T(_({},"__esModule",{value:!0}),x);var o={};R(o,{COSMOS_APP_ERRORS:()=>N,CosmosAppCommandError:()=>A,CosmosAppCommandErrorFactory:()=>D,CosmosErrorCodes:()=>m});module.exports=g(o);var r=require("@ledgerhq/device-management-kit"),m=(e=>(e.EXECUTION_ERROR="0x6400",e.EMPTY_BUFFER="0x6982",e.OUTPUT_BUFFER_TOO_SMALL="0x6983",e.COMMAND_NOT_ALLOWED="0x6986",e.DATA_INVALID="0x6984",e.TRANSACTION_DATA_EXCEEDS_BUFFER_CAPACITY="0x6988",e.WRONG_HRP_LENGTH="0x698A",e.INVALID_HD_PATH_COIN_VALUE="0x698B",e.CHAIN_CONFIG_NOT_SUPPORTED="0x698C",e.EXPERT_MODE_REQUIRED_FOR_ETH_CHAIN="0x698D",e.INS_NOT_SUPPORTED="0x6D00",e.CLA_NOT_SUPPORTED="0x6E00",e.UNKNOWN_ERROR="0x6F00",e))(m||{});const N={"0x6400":{message:"Execution Error"},"0x6982":{message:"Empty buffer"},"0x6983":{message:"Output buffer too small"},"0x6986":{message:"Command not allowed"},"0x6984":{message:"Data Invalid"},"0x6988":{message:"Transaction data exceeds buffer capacity"},"0x698A":{message:"Wrong HRP Length"},"0x698B":{message:"Invalid HD path coin value"},"0x698C":{message:"Chain Config not supported"},"0x698D":{message:"Expert Mode required for Eth chain"},"0x6D00":{message:"INS not supported"},"0x6E00":{message:"CLA not supported"},"0x6F00":{message:"Unknown error"}};class A extends r.DeviceExchangeError{constructor(a){super({tag:"CosmosAppCommandError",...a})}}const D=x=>new A(x);0&&(module.exports={COSMOS_APP_ERRORS,CosmosAppCommandError,CosmosAppCommandErrorFactory,CosmosErrorCodes});
|
|
2
|
+
//# sourceMappingURL=CosmosApplicationErrors.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../src/internal/app-binder/command/utils/CosmosApplicationErrors.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n type CommandErrorArgs,\n type CommandErrors,\n DeviceExchangeError,\n} from \"@ledgerhq/device-management-kit\";\n\nexport enum CosmosErrorCodes {\n EXECUTION_ERROR = \"0x6400\",\n EMPTY_BUFFER = \"0x6982\",\n OUTPUT_BUFFER_TOO_SMALL = \"0x6983\",\n COMMAND_NOT_ALLOWED = \"0x6986\",\n DATA_INVALID = \"0x6984\",\n TRANSACTION_DATA_EXCEEDS_BUFFER_CAPACITY = \"0x6988\",\n WRONG_HRP_LENGTH = \"0x698A\",\n INVALID_HD_PATH_COIN_VALUE = \"0x698B\",\n CHAIN_CONFIG_NOT_SUPPORTED = \"0x698C\",\n EXPERT_MODE_REQUIRED_FOR_ETH_CHAIN = \"0x698D\",\n INS_NOT_SUPPORTED = \"0x6D00\",\n CLA_NOT_SUPPORTED = \"0x6E00\",\n UNKNOWN_ERROR = \"0x6F00\",\n}\n\nexport const COSMOS_APP_ERRORS: CommandErrors<CosmosErrorCodes> = {\n \"0x6400\": { message: \"Execution Error\" },\n \"0x6982\": { message: \"Empty buffer\" },\n \"0x6983\": { message: \"Output buffer too small\" },\n \"0x6986\": { message: \"Command not allowed\" },\n \"0x6984\": { message: \"Data Invalid\" },\n \"0x6988\": { message: \"Transaction data exceeds buffer capacity\" },\n \"0x698A\": { message: \"Wrong HRP Length\" },\n \"0x698B\": { message: \"Invalid HD path coin value\" },\n \"0x698C\": { message: \"Chain Config not supported\" },\n \"0x698D\": { message: \"Expert Mode required for Eth chain\" },\n \"0x6D00\": { message: \"INS not supported\" },\n \"0x6E00\": { message: \"CLA not supported\" },\n \"0x6F00\": { message: \"Unknown error\" },\n};\n\nexport class CosmosAppCommandError extends DeviceExchangeError<CosmosErrorCodes> {\n constructor(args: CommandErrorArgs<CosmosErrorCodes>) {\n super({ tag: \"CosmosAppCommandError\", ...args });\n }\n}\n\nexport const CosmosAppCommandErrorFactory = (\n args: CommandErrorArgs<CosmosErrorCodes>,\n) => new CosmosAppCommandError(args);\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,uBAAAE,EAAA,0BAAAC,EAAA,iCAAAC,EAAA,qBAAAC,IAAA,eAAAC,EAAAN,GAAA,IAAAO,EAIO,2CAEKF,OACVA,EAAA,gBAAkB,SAClBA,EAAA,aAAe,SACfA,EAAA,wBAA0B,SAC1BA,EAAA,oBAAsB,SACtBA,EAAA,aAAe,SACfA,EAAA,yCAA2C,SAC3CA,EAAA,iBAAmB,SACnBA,EAAA,2BAA6B,SAC7BA,EAAA,2BAA6B,SAC7BA,EAAA,mCAAqC,SACrCA,EAAA,kBAAoB,SACpBA,EAAA,kBAAoB,SACpBA,EAAA,cAAgB,SAbNA,OAAA,IAgBL,MAAMH,EAAqD,CAChE,SAAU,CAAE,QAAS,iBAAkB,EACvC,SAAU,CAAE,QAAS,cAAe,EACpC,SAAU,CAAE,QAAS,yBAA0B,EAC/C,SAAU,CAAE,QAAS,qBAAsB,EAC3C,SAAU,CAAE,QAAS,cAAe,EACpC,SAAU,CAAE,QAAS,0CAA2C,EAChE,SAAU,CAAE,QAAS,kBAAmB,EACxC,SAAU,CAAE,QAAS,4BAA6B,EAClD,SAAU,CAAE,QAAS,4BAA6B,EAClD,SAAU,CAAE,QAAS,oCAAqC,EAC1D,SAAU,CAAE,QAAS,mBAAoB,EACzC,SAAU,CAAE,QAAS,mBAAoB,EACzC,SAAU,CAAE,QAAS,eAAgB,CACvC,EAEO,MAAMC,UAA8B,qBAAsC,CAC/E,YAAYK,EAA0C,CACpD,MAAM,CAAE,IAAK,wBAAyB,GAAGA,CAAK,CAAC,CACjD,CACF,CAEO,MAAMJ,EACXI,GACG,IAAIL,EAAsBK,CAAI",
|
|
6
|
+
"names": ["CosmosApplicationErrors_exports", "__export", "COSMOS_APP_ERRORS", "CosmosAppCommandError", "CosmosAppCommandErrorFactory", "CosmosErrorCodes", "__toCommonJS", "import_device_management_kit", "args"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var a=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var o=Object.getOwnPropertyNames;var w=Object.prototype.hasOwnProperty;var c=(r,e)=>{for(var n in e)a(r,n,{get:e[n],enumerable:!0})},u=(r,e,n,f)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of o(e))!w.call(r,t)&&t!==n&&a(r,t,{get:()=>e[t],enumerable:!(f=i(e,t))||f.enumerable});return r};var d=r=>u(a({},"__esModule",{value:!0}),r);var x={};c(x,{encodeDerivationPath:()=>s});module.exports=d(x);const s=r=>{const e=new DataView(new ArrayBuffer(20));for(let n=0;n<r.length;n++){const f=r[n]&2147483647,t=n<3?(2147483648|f)>>>0:f>>>0;e.setUint32(n*4,t,!0)}return new Uint8Array(e.buffer)};0&&(module.exports={encodeDerivationPath});
|
|
2
|
+
//# sourceMappingURL=EncodeDerivationPath.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../src/internal/app-binder/command/utils/EncodeDerivationPath.ts"],
|
|
4
|
+
"sourcesContent": ["export const encodeDerivationPath = (paths: number[]): Uint8Array => {\n const dataView = new DataView(new ArrayBuffer(20));\n for (let i = 0; i < paths.length; i++) {\n const raw = paths[i]! & 0x7fffffff;\n const hardened = i < 3 ? (0x80000000 | raw) >>> 0 : raw >>> 0;\n dataView.setUint32(i * 4, hardened, true);\n }\n return new Uint8Array(dataView.buffer);\n};\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,0BAAAE,IAAA,eAAAC,EAAAH,GAAO,MAAME,EAAwBE,GAAgC,CACnE,MAAMC,EAAW,IAAI,SAAS,IAAI,YAAY,EAAE,CAAC,EACjD,QAASC,EAAI,EAAGA,EAAIF,EAAM,OAAQE,IAAK,CACrC,MAAMC,EAAMH,EAAME,CAAC,EAAK,WAClBE,EAAWF,EAAI,GAAK,WAAaC,KAAS,EAAIA,IAAQ,EAC5DF,EAAS,UAAUC,EAAI,EAAGE,EAAU,EAAI,CAC1C,CACA,OAAO,IAAI,WAAWH,EAAS,MAAM,CACvC",
|
|
6
|
+
"names": ["EncodeDerivationPath_exports", "__export", "encodeDerivationPath", "__toCommonJS", "paths", "dataView", "i", "raw", "hardened"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var e=require("vitest"),n=require("./EncodeDerivationPath");(0,e.describe)("encodeDerivationPath",()=>{(0,e.describe)("Given a 5-level derivation path",()=>{(0,e.describe)("When encoding a standard Cosmos path (44'/118'/0'/0/0)",()=>{(0,e.it)("Then it should return a 20-byte buffer",()=>{const t=(0,n.encodeDerivationPath)([44,118,0,0,0]);(0,e.expect)(t).toBeInstanceOf(Uint8Array),(0,e.expect)(t.length).toBe(20)}),(0,e.it)("Then it should set hardened bit for the first three levels",()=>{const t=(0,n.encodeDerivationPath)([44,118,0,0,0]),f=new DataView(t.buffer,t.byteOffset,t.byteLength);(0,e.expect)(f.getUint32(0,!0)).toBe(2147483692),(0,e.expect)(f.getUint32(4,!0)).toBe(2147483766),(0,e.expect)(f.getUint32(8,!0)).toBe(2147483648)}),(0,e.it)("Then it should not set hardened bit for the last two levels",()=>{const t=(0,n.encodeDerivationPath)([44,118,0,0,0]),f=new DataView(t.buffer,t.byteOffset,t.byteLength);(0,e.expect)(f.getUint32(12,!0)).toBe(0),(0,e.expect)(f.getUint32(16,!0)).toBe(0)}),(0,e.it)("Then it should encode each level as little-endian uint32",()=>{const t=(0,n.encodeDerivationPath)([44,118,0,0,0]),f=new Uint8Array(20),i=new DataView(f.buffer);i.setUint32(0,-2147483604,!0),i.setUint32(4,-2147483530,!0),i.setUint32(8,-2147483648,!0),i.setUint32(12,0,!0),i.setUint32(16,0,!0),(0,e.expect)(t).toStrictEqual(f)})}),(0,e.describe)("When encoding a path with non-zero account and index",()=>{(0,e.it)("Then it should encode account and index without hardened bit",()=>{const t=(0,n.encodeDerivationPath)([44,118,0,1,2]),f=new DataView(t.buffer,t.byteOffset,t.byteLength);(0,e.expect)(f.getUint32(12,!0)).toBe(1),(0,e.expect)(f.getUint32(16,!0)).toBe(2)})}),(0,e.describe)("When encoding path values with high bits set",()=>{(0,e.it)("Then it should mask each level to 31 bits before applying hardened bit",()=>{const t=(0,n.encodeDerivationPath)([4294967295,4294967295,4294967295,4294967295,4294967295]),f=new DataView(t.buffer,t.byteOffset,t.byteLength);(0,e.expect)(f.getUint32(0,!0)).toBe(-1>>>0),(0,e.expect)(f.getUint32(4,!0)).toBe(-1>>>0),(0,e.expect)(f.getUint32(8,!0)).toBe(-1>>>0),(0,e.expect)(f.getUint32(12,!0)).toBe(2147483647),(0,e.expect)(f.getUint32(16,!0)).toBe(2147483647)})})})});
|
|
2
|
+
//# sourceMappingURL=EncodeDerivationPath.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../src/internal/app-binder/command/utils/EncodeDerivationPath.test.ts"],
|
|
4
|
+
"sourcesContent": ["import { describe, expect, it } from \"vitest\";\n\nimport { encodeDerivationPath } from \"./EncodeDerivationPath\";\n\ndescribe(\"encodeDerivationPath\", () => {\n describe(\"Given a 5-level derivation path\", () => {\n describe(\"When encoding a standard Cosmos path (44'/118'/0'/0/0)\", () => {\n it(\"Then it should return a 20-byte buffer\", () => {\n const result = encodeDerivationPath([44, 118, 0, 0, 0]);\n expect(result).toBeInstanceOf(Uint8Array);\n expect(result.length).toBe(20);\n });\n\n it(\"Then it should set hardened bit for the first three levels\", () => {\n const result = encodeDerivationPath([44, 118, 0, 0, 0]);\n const dataView = new DataView(\n result.buffer,\n result.byteOffset,\n result.byteLength,\n );\n // First 3 levels: high bit set (hardened); compare as unsigned 32-bit\n expect(dataView.getUint32(0, true)).toBe((0x80000000 | 44) >>> 0);\n expect(dataView.getUint32(4, true)).toBe((0x80000000 | 118) >>> 0);\n expect(dataView.getUint32(8, true)).toBe((0x80000000 | 0) >>> 0);\n });\n\n it(\"Then it should not set hardened bit for the last two levels\", () => {\n const result = encodeDerivationPath([44, 118, 0, 0, 0]);\n const dataView = new DataView(\n result.buffer,\n result.byteOffset,\n result.byteLength,\n );\n expect(dataView.getUint32(12, true)).toBe(0);\n expect(dataView.getUint32(16, true)).toBe(0);\n });\n\n it(\"Then it should encode each level as little-endian uint32\", () => {\n const result = encodeDerivationPath([44, 118, 0, 0, 0]);\n const expected = new Uint8Array(20);\n const expectedView = new DataView(expected.buffer);\n expectedView.setUint32(0, 0x80000000 | 44, true);\n expectedView.setUint32(4, 0x80000000 | 118, true);\n expectedView.setUint32(8, 0x80000000 | 0, true);\n expectedView.setUint32(12, 0, true);\n expectedView.setUint32(16, 0, true);\n expect(result).toStrictEqual(expected);\n });\n });\n\n describe(\"When encoding a path with non-zero account and index\", () => {\n it(\"Then it should encode account and index without hardened bit\", () => {\n const result = encodeDerivationPath([44, 118, 0, 1, 2]);\n const dataView = new DataView(\n result.buffer,\n result.byteOffset,\n result.byteLength,\n );\n expect(dataView.getUint32(12, true)).toBe(1);\n expect(dataView.getUint32(16, true)).toBe(2);\n });\n });\n\n describe(\"When encoding path values with high bits set\", () => {\n it(\"Then it should mask each level to 31 bits before applying hardened bit\", () => {\n const result = encodeDerivationPath([\n 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,\n ]);\n const dataView = new DataView(\n result.buffer,\n result.byteOffset,\n result.byteLength,\n );\n // 0xffffffff & 0x7fffffff = 0x7fffffff; first 3 get hardened; compare as unsigned 32-bit\n expect(dataView.getUint32(0, true)).toBe(\n (0x80000000 | 0x7fffffff) >>> 0,\n );\n expect(dataView.getUint32(4, true)).toBe(\n (0x80000000 | 0x7fffffff) >>> 0,\n );\n expect(dataView.getUint32(8, true)).toBe(\n (0x80000000 | 0x7fffffff) >>> 0,\n );\n expect(dataView.getUint32(12, true)).toBe(0x7fffffff >>> 0);\n expect(dataView.getUint32(16, true)).toBe(0x7fffffff >>> 0);\n });\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "aAAA,IAAAA,EAAqC,kBAErCC,EAAqC,qCAErC,YAAS,uBAAwB,IAAM,IACrC,YAAS,kCAAmC,IAAM,IAChD,YAAS,yDAA0D,IAAM,IACvE,MAAG,yCAA0C,IAAM,CACjD,MAAMC,KAAS,wBAAqB,CAAC,GAAI,IAAK,EAAG,EAAG,CAAC,CAAC,KACtD,UAAOA,CAAM,EAAE,eAAe,UAAU,KACxC,UAAOA,EAAO,MAAM,EAAE,KAAK,EAAE,CAC/B,CAAC,KAED,MAAG,6DAA8D,IAAM,CACrE,MAAMA,KAAS,wBAAqB,CAAC,GAAI,IAAK,EAAG,EAAG,CAAC,CAAC,EAChDC,EAAW,IAAI,SACnBD,EAAO,OACPA,EAAO,WACPA,EAAO,UACT,KAEA,UAAOC,EAAS,UAAU,EAAG,EAAI,CAAC,EAAE,KAAM,UAAsB,KAChE,UAAOA,EAAS,UAAU,EAAG,EAAI,CAAC,EAAE,KAAM,UAAuB,KACjE,UAAOA,EAAS,UAAU,EAAG,EAAI,CAAC,EAAE,KAAM,UAAqB,CACjE,CAAC,KAED,MAAG,8DAA+D,IAAM,CACtE,MAAMD,KAAS,wBAAqB,CAAC,GAAI,IAAK,EAAG,EAAG,CAAC,CAAC,EAChDC,EAAW,IAAI,SACnBD,EAAO,OACPA,EAAO,WACPA,EAAO,UACT,KACA,UAAOC,EAAS,UAAU,GAAI,EAAI,CAAC,EAAE,KAAK,CAAC,KAC3C,UAAOA,EAAS,UAAU,GAAI,EAAI,CAAC,EAAE,KAAK,CAAC,CAC7C,CAAC,KAED,MAAG,2DAA4D,IAAM,CACnE,MAAMD,KAAS,wBAAqB,CAAC,GAAI,IAAK,EAAG,EAAG,CAAC,CAAC,EAChDE,EAAW,IAAI,WAAW,EAAE,EAC5BC,EAAe,IAAI,SAASD,EAAS,MAAM,EACjDC,EAAa,UAAU,EAAG,YAAiB,EAAI,EAC/CA,EAAa,UAAU,EAAG,YAAkB,EAAI,EAChDA,EAAa,UAAU,EAAG,YAAgB,EAAI,EAC9CA,EAAa,UAAU,GAAI,EAAG,EAAI,EAClCA,EAAa,UAAU,GAAI,EAAG,EAAI,KAClC,UAAOH,CAAM,EAAE,cAAcE,CAAQ,CACvC,CAAC,CACH,CAAC,KAED,YAAS,uDAAwD,IAAM,IACrE,MAAG,+DAAgE,IAAM,CACvE,MAAMF,KAAS,wBAAqB,CAAC,GAAI,IAAK,EAAG,EAAG,CAAC,CAAC,EAChDC,EAAW,IAAI,SACnBD,EAAO,OACPA,EAAO,WACPA,EAAO,UACT,KACA,UAAOC,EAAS,UAAU,GAAI,EAAI,CAAC,EAAE,KAAK,CAAC,KAC3C,UAAOA,EAAS,UAAU,GAAI,EAAI,CAAC,EAAE,KAAK,CAAC,CAC7C,CAAC,CACH,CAAC,KAED,YAAS,+CAAgD,IAAM,IAC7D,MAAG,yEAA0E,IAAM,CACjF,MAAMD,KAAS,wBAAqB,CAClC,WAAY,WAAY,WAAY,WAAY,UAClD,CAAC,EACKC,EAAW,IAAI,SACnBD,EAAO,OACPA,EAAO,WACPA,EAAO,UACT,KAEA,UAAOC,EAAS,UAAU,EAAG,EAAI,CAAC,EAAE,KACjC,KAA6B,CAChC,KACA,UAAOA,EAAS,UAAU,EAAG,EAAI,CAAC,EAAE,KACjC,KAA6B,CAChC,KACA,UAAOA,EAAS,UAAU,EAAG,EAAI,CAAC,EAAE,KACjC,KAA6B,CAChC,KACA,UAAOA,EAAS,UAAU,GAAI,EAAI,CAAC,EAAE,KAAK,UAAgB,KAC1D,UAAOA,EAAS,UAAU,GAAI,EAAI,CAAC,EAAE,KAAK,UAAgB,CAC5D,CAAC,CACH,CAAC,CACH,CAAC,CACH,CAAC",
|
|
6
|
+
"names": ["import_vitest", "import_EncodeDerivationPath", "result", "dataView", "expected", "expectedView"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var n=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var s=Object.getOwnPropertyNames;var B=Object.prototype.hasOwnProperty;var f=(o,p)=>{for(var i in p)n(o,i,{get:p[i],enumerable:!0})},c=(o,p,i,e)=>{if(p&&typeof p=="object"||typeof p=="function")for(let r of s(p))!B.call(o,r)&&r!==i&&n(o,r,{get:()=>p[r],enumerable:!(e=a(p,r))||e.enumerable});return o};var g=o=>c(n({},"__esModule",{value:!0}),o);var u={};f(u,{appBindingModuleFactory:()=>l});module.exports=g(u);var t=require("inversify"),m=require("../../app-binder/CosmosAppBinder"),d=require("../../app-binder/di/appBinderTypes");const l=()=>new t.ContainerModule(({bind:o})=>{o(d.appBinderTypes.AppBinding).to(m.CosmosAppBinder)});0&&(module.exports={appBindingModuleFactory});
|
|
2
|
+
//# sourceMappingURL=appBinderModule.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/internal/app-binder/di/appBinderModule.ts"],
|
|
4
|
+
"sourcesContent": ["import { ContainerModule } from \"inversify\";\n\nimport { CosmosAppBinder } from \"@internal/app-binder/CosmosAppBinder\";\nimport { appBinderTypes } from \"@internal/app-binder/di/appBinderTypes\";\n\nexport const appBindingModuleFactory = () =>\n new ContainerModule(({ bind }) => {\n bind(appBinderTypes.AppBinding).to(CosmosAppBinder);\n });\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,6BAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAgC,qBAEhCC,EAAgC,gDAChCC,EAA+B,kDAExB,MAAMJ,EAA0B,IACrC,IAAI,kBAAgB,CAAC,CAAE,KAAAK,CAAK,IAAM,CAChCA,EAAK,iBAAe,UAAU,EAAE,GAAG,iBAAe,CACpD,CAAC",
|
|
6
|
+
"names": ["appBinderModule_exports", "__export", "appBindingModuleFactory", "__toCommonJS", "import_inversify", "import_CosmosAppBinder", "import_appBinderTypes", "bind"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var n=require("inversify"),r=require("./appBinderModule");describe("appBinderModule",()=>{describe("Default",()=>{let o,e;beforeEach(()=>{e=(0,r.appBindingModuleFactory)(),o=new n.Container,o.loadSync(e)}),it("should return app binder module",()=>{expect(e).toBeDefined()})})});
|
|
2
|
+
//# sourceMappingURL=appBinderModule.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/internal/app-binder/di/appBinderModule.test.ts"],
|
|
4
|
+
"sourcesContent": ["import { Container } from \"inversify\";\n\nimport { appBindingModuleFactory } from \"./appBinderModule\";\n\ndescribe(\"appBinderModule\", () => {\n describe(\"Default\", () => {\n let container: Container;\n let mod: ReturnType<typeof appBindingModuleFactory>;\n beforeEach(() => {\n mod = appBindingModuleFactory();\n container = new Container();\n container.loadSync(mod);\n });\n\n it(\"should return app binder module\", () => {\n expect(mod).toBeDefined();\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "aAAA,IAAAA,EAA0B,qBAE1BC,EAAwC,6BAExC,SAAS,kBAAmB,IAAM,CAChC,SAAS,UAAW,IAAM,CACxB,IAAIC,EACAC,EACJ,WAAW,IAAM,CACfA,KAAM,2BAAwB,EAC9BD,EAAY,IAAI,YAChBA,EAAU,SAASC,CAAG,CACxB,CAAC,EAED,GAAG,kCAAmC,IAAM,CAC1C,OAAOA,CAAG,EAAE,YAAY,CAC1B,CAAC,CACH,CAAC,CACH,CAAC",
|
|
6
|
+
"names": ["import_inversify", "import_appBinderModule", "container", "mod"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var s=Object.defineProperty;var e=Object.getOwnPropertyDescriptor;var r=Object.getOwnPropertyNames;var t=Object.prototype.hasOwnProperty;var B=(n,p)=>{for(var o in p)s(n,o,{get:p[o],enumerable:!0})},a=(n,p,o,d)=>{if(p&&typeof p=="object"||typeof p=="function")for(let i of r(p))!t.call(n,i)&&i!==o&&s(n,i,{get:()=>p[i],enumerable:!(d=e(p,i))||d.enumerable});return n};var c=n=>a(s({},"__esModule",{value:!0}),n);var y={};B(y,{appBinderTypes:()=>g});module.exports=c(y);const g={AppBinding:Symbol.for("AppBinding")};0&&(module.exports={appBinderTypes});
|
|
2
|
+
//# sourceMappingURL=appBinderTypes.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/internal/app-binder/di/appBinderTypes.ts"],
|
|
4
|
+
"sourcesContent": ["export const appBinderTypes = {\n AppBinding: Symbol.for(\"AppBinding\"),\n} as const;\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,oBAAAE,IAAA,eAAAC,EAAAH,GAAO,MAAME,EAAiB,CAC5B,WAAY,OAAO,IAAI,YAAY,CACrC",
|
|
6
|
+
"names": ["appBinderTypes_exports", "__export", "appBinderTypes", "__toCommonJS"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var d=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var C=(n,t)=>{for(var s in t)d(n,s,{get:t[s],enumerable:!0})},S=(n,t,s,e)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of m(t))!p.call(n,a)&&a!==s&&d(n,a,{get:()=>t[a],enumerable:!(e=l(t,a))||e.enumerable});return n};var T=n=>S(d({},"__esModule",{value:!0}),n);var f={};C(f,{SignTransactionTask:()=>A});module.exports=T(f);var r=require("@ledgerhq/device-management-kit"),i=require("../../app-binder/command/SignTransactionCommand");class A{constructor(t,s,e){this.api=t;this.args=s;this.logger=e}async run(){this.logger.debug("[run] Starting SignTransactionTask",{data:{derivationPath:this.args.derivationPath,hrp:this.args.hrp,transactionLength:this.args.transaction.length}});const{derivationPath:t,hrp:s,transaction:e}=this.args,a=await this.api.sendCommand(new i.SignTransactionCommand({phase:i.SignPhase.INIT,derivationPath:t,hrp:s}));if(!(0,r.isSuccessCommandResult)(a))return this.logger.debug("[run] Failed to sign transaction",{data:{error:a.error}}),(0,r.CommandResultFactory)({error:new r.InvalidStatusWordError("Failed to sign transaction")});for(let o=0;o<e.length;o+=r.APDU_MAX_PAYLOAD){const c=o+r.APDU_MAX_PAYLOAD>=e.length,u=c?i.SignPhase.LAST:i.SignPhase.ADD,h=e.slice(o,o+r.APDU_MAX_PAYLOAD),g=await this.api.sendCommand(new i.SignTransactionCommand({phase:u,transactionChunk:h}));if(!(0,r.isSuccessCommandResult)(g))return this.logger.debug("[run] Failed to sign transaction",{data:{chunkIndex:o,error:g.error}}),g;if(c)return this.logger.debug("[run] Transaction signed successfully",{data:{signature:g.data}}),(0,r.CommandResultFactory)({data:g.data})}return(0,r.CommandResultFactory)({error:new r.InvalidStatusWordError("No signature returned")})}}0&&(module.exports={SignTransactionTask});
|
|
2
|
+
//# sourceMappingURL=SignTransactionTask.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/internal/app-binder/task/SignTransactionTask.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n APDU_MAX_PAYLOAD,\n type CommandResult,\n CommandResultFactory,\n type InternalApi,\n InvalidStatusWordError,\n isSuccessCommandResult,\n type LoggerPublisherService,\n} from \"@ledgerhq/device-management-kit\";\n\nimport {\n SignPhase,\n SignTransactionCommand,\n type SignTransactionCommandResponse,\n} from \"@internal/app-binder/command/SignTransactionCommand\";\nimport { type CosmosErrorCodes } from \"@internal/app-binder/command/utils/CosmosApplicationErrors\";\n\ntype SignTransactionTaskArgs = {\n derivationPath: string;\n hrp: string;\n transaction: Uint8Array;\n};\n\nexport class SignTransactionTask {\n constructor(\n private api: InternalApi,\n private args: SignTransactionTaskArgs,\n private logger: LoggerPublisherService,\n ) {}\n\n async run(): Promise<\n CommandResult<SignTransactionCommandResponse, CosmosErrorCodes>\n > {\n this.logger.debug(\"[run] Starting SignTransactionTask\", {\n data: {\n derivationPath: this.args.derivationPath,\n hrp: this.args.hrp,\n transactionLength: this.args.transaction.length,\n },\n });\n\n const { derivationPath, hrp, transaction } = this.args;\n\n const result = await this.api.sendCommand(\n new SignTransactionCommand({\n phase: SignPhase.INIT,\n derivationPath,\n hrp,\n }),\n );\n\n if (!isSuccessCommandResult(result)) {\n this.logger.debug(\"[run] Failed to sign transaction\", {\n data: { error: result.error },\n });\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Failed to sign transaction\"),\n });\n }\n\n for (\n let offset = 0;\n offset < transaction.length;\n offset += APDU_MAX_PAYLOAD\n ) {\n const isLastChunk = offset + APDU_MAX_PAYLOAD >= transaction.length;\n const phase = isLastChunk ? SignPhase.LAST : SignPhase.ADD;\n const transactionChunk = transaction.slice(\n offset,\n offset + APDU_MAX_PAYLOAD,\n );\n\n const result = await this.api.sendCommand(\n new SignTransactionCommand({\n phase,\n transactionChunk,\n }),\n );\n\n if (!isSuccessCommandResult(result)) {\n this.logger.debug(\"[run] Failed to sign transaction\", {\n data: {\n chunkIndex: offset,\n error: result.error,\n },\n });\n return result;\n }\n\n if (isLastChunk) {\n this.logger.debug(\"[run] Transaction signed successfully\", {\n data: {\n signature: result.data,\n },\n });\n return CommandResultFactory({\n data: result.data,\n });\n }\n }\n\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"No signature returned\"),\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,yBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAQO,2CAEPC,EAIO,+DASA,MAAMH,CAAoB,CAC/B,YACUI,EACAC,EACAC,EACR,CAHQ,SAAAF,EACA,UAAAC,EACA,YAAAC,CACP,CAEH,MAAM,KAEJ,CACA,KAAK,OAAO,MAAM,qCAAsC,CACtD,KAAM,CACJ,eAAgB,KAAK,KAAK,eAC1B,IAAK,KAAK,KAAK,IACf,kBAAmB,KAAK,KAAK,YAAY,MAC3C,CACF,CAAC,EAED,KAAM,CAAE,eAAAC,EAAgB,IAAAC,EAAK,YAAAC,CAAY,EAAI,KAAK,KAE5CC,EAAS,MAAM,KAAK,IAAI,YAC5B,IAAI,yBAAuB,CACzB,MAAO,YAAU,KACjB,eAAAH,EACA,IAAAC,CACF,CAAC,CACH,EAEA,GAAI,IAAC,0BAAuBE,CAAM,EAChC,YAAK,OAAO,MAAM,mCAAoC,CACpD,KAAM,CAAE,MAAOA,EAAO,KAAM,CAC9B,CAAC,KACM,wBAAqB,CAC1B,MAAO,IAAI,yBAAuB,4BAA4B,CAChE,CAAC,EAGH,QACMC,EAAS,EACbA,EAASF,EAAY,OACrBE,GAAU,mBACV,CACA,MAAMC,EAAcD,EAAS,oBAAoBF,EAAY,OACvDI,EAAQD,EAAc,YAAU,KAAO,YAAU,IACjDE,EAAmBL,EAAY,MACnCE,EACAA,EAAS,kBACX,EAEMD,EAAS,MAAM,KAAK,IAAI,YAC5B,IAAI,yBAAuB,CACzB,MAAAG,EACA,iBAAAC,CACF,CAAC,CACH,EAEA,GAAI,IAAC,0BAAuBJ,CAAM,EAChC,YAAK,OAAO,MAAM,mCAAoC,CACpD,KAAM,CACJ,WAAYC,EACZ,MAAOD,EAAO,KAChB,CACF,CAAC,EACMA,EAGT,GAAIE,EACF,YAAK,OAAO,MAAM,wCAAyC,CACzD,KAAM,CACJ,UAAWF,EAAO,IACpB,CACF,CAAC,KACM,wBAAqB,CAC1B,KAAMA,EAAO,IACf,CAAC,CAEL,CAEA,SAAO,wBAAqB,CAC1B,MAAO,IAAI,yBAAuB,uBAAuB,CAC3D,CAAC,CACH,CACF",
|
|
6
|
+
"names": ["SignTransactionTask_exports", "__export", "SignTransactionTask", "__toCommonJS", "import_device_management_kit", "import_SignTransactionCommand", "api", "args", "logger", "derivationPath", "hrp", "transaction", "result", "offset", "isLastChunk", "phase", "transactionChunk"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var e=require("@ledgerhq/device-management-kit"),d=require("vitest"),a=require("../../app-binder/command/utils/CosmosApplicationErrors"),u=require("../../app-binder/task/SignTransactionTask");describe("SignTransactionTask",()=>{let s,c,i;beforeEach(()=>{s=d.vi.fn(),c={sendCommand:s},i={debug:d.vi.fn()}}),describe("run",()=>{it("should run the task and return signature on success",async()=>{const n=new Uint8Array(64).fill(205),r=new Uint8Array(300).fill(2);s.mockResolvedValueOnce({status:e.CommandResultStatus.Success}).mockResolvedValueOnce((0,e.CommandResultFactory)({data:new Uint8Array(0)})).mockResolvedValueOnce((0,e.CommandResultFactory)({data:n}));const t=await new u.SignTransactionTask(c,{derivationPath:"44'/118'/0'/0/0",hrp:"cosmos",transaction:r},i).run();expect((0,e.isSuccessCommandResult)(t)).toBe(!0),(0,e.isSuccessCommandResult)(t)&&expect(t.data).toStrictEqual(n)}),it("should return error when apdu response contains error",async()=>{const n=new Uint8Array(50),r=(0,e.CommandResultFactory)({error:new a.CosmosAppCommandError({message:"Data Invalid",errorCode:a.CosmosErrorCodes.DATA_INVALID})});s.mockResolvedValueOnce({status:e.CommandResultStatus.Success}).mockResolvedValueOnce(r);const t=await new u.SignTransactionTask(c,{derivationPath:"44'/118'/0'/0/0",hrp:"cosmos",transaction:n},i).run();expect((0,e.isSuccessCommandResult)(t)).toBe(!1),(0,e.isSuccessCommandResult)(t)||(expect(t.error).toBeInstanceOf(a.CosmosAppCommandError),expect(t.error.errorCode).toBe(a.CosmosErrorCodes.DATA_INVALID))}),it("should return InvalidStatusWordError when wrong derivation path or hrp is provided",async()=>{s.mockResolvedValue({status:e.CommandResultStatus.Error});const r=await new u.SignTransactionTask(c,{derivationPath:"44'/118'/0'/0",hrp:"cosmos",transaction:new Uint8Array(0)},i).run();if(expect((0,e.isSuccessCommandResult)(r)).toBe(!1),!(0,e.isSuccessCommandResult)(r)){const o=r.error;expect(o).toBeInstanceOf(e.InvalidStatusWordError),expect(o.originalError?.message).toBe("Failed to sign transaction")}}),it("should return InvalidStatusWordError when apdu response does not contain signature",async()=>{s.mockResolvedValue({status:e.CommandResultStatus.Success});const r=await new u.SignTransactionTask(c,{derivationPath:"44'/118'/0'/0/0",hrp:"cosmos",transaction:new Uint8Array(0)},i).run();if(expect((0,e.isSuccessCommandResult)(r)).toBe(!1),!(0,e.isSuccessCommandResult)(r)){const o=r.error;expect(o).toBeInstanceOf(e.InvalidStatusWordError),expect(o.originalError?.message).toBe("No signature returned")}})})});
|
|
2
|
+
//# sourceMappingURL=SignTransactionTask.test.js.map
|