@ledgerhq/context-module 2.1.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/package.json +2 -2
- package/lib/cjs/src/DefaultContextModule.js +1 -1
- package/lib/cjs/src/DefaultContextModule.js.map +3 -3
- package/lib/cjs/src/di.js +1 -1
- package/lib/cjs/src/di.js.map +3 -3
- package/lib/cjs/src/index.js +1 -1
- package/lib/cjs/src/index.js.map +2 -2
- package/lib/cjs/src/modules/multichain/pki/model/KeyId.js +1 -1
- package/lib/cjs/src/modules/multichain/pki/model/KeyId.js.map +2 -2
- package/lib/cjs/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.js +1 -1
- package/lib/cjs/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.js.map +3 -3
- package/lib/cjs/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.test.js +1 -1
- package/lib/cjs/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.test.js.map +3 -3
- package/lib/cjs/src/modules/solana/alt-resolution/data/AltResolutionDataSource.js +2 -0
- package/lib/cjs/src/modules/solana/alt-resolution/data/AltResolutionDataSource.js.map +7 -0
- package/lib/cjs/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.js +2 -0
- package/lib/cjs/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.js.map +7 -0
- package/lib/cjs/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.test.js +2 -0
- package/lib/cjs/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.test.js.map +7 -0
- package/lib/cjs/src/modules/solana/alt-resolution/di/altResolutionModuleFactory.js +2 -0
- package/lib/cjs/src/modules/solana/alt-resolution/di/altResolutionModuleFactory.js.map +7 -0
- package/lib/cjs/src/modules/solana/alt-resolution/di/altResolutionTypes.js +2 -0
- package/lib/cjs/src/modules/solana/alt-resolution/di/altResolutionTypes.js.map +7 -0
- package/lib/cjs/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.js +2 -0
- package/lib/cjs/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.js.map +7 -0
- package/lib/cjs/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.test.js +2 -0
- package/lib/cjs/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.test.js.map +7 -0
- package/lib/cjs/src/modules/solana/enum-variant/di/enumVariantModuleFactory.js +2 -0
- package/lib/cjs/src/modules/solana/enum-variant/di/enumVariantModuleFactory.js.map +7 -0
- package/lib/cjs/src/modules/solana/enum-variant/di/enumVariantTypes.js +2 -0
- package/lib/cjs/src/modules/solana/enum-variant/di/enumVariantTypes.js.map +7 -0
- package/lib/cjs/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.js +2 -0
- package/lib/cjs/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.js.map +7 -0
- package/lib/cjs/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.test.js +2 -0
- package/lib/cjs/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.test.js.map +7 -0
- package/lib/cjs/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.js +2 -0
- package/lib/cjs/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.js.map +7 -0
- package/lib/cjs/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.test.js +2 -0
- package/lib/cjs/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.test.js.map +7 -0
- package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoDataSource.js +2 -0
- package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoDataSource.js.map +7 -0
- package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoDto.js +2 -0
- package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoDto.js.map +7 -0
- package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoMapper.js +2 -0
- package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoMapper.js.map +7 -0
- package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoMapper.test.js +2 -0
- package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoMapper.test.js.map +7 -0
- package/lib/cjs/src/modules/solana/instruction-info/di/instructionInfoModuleFactory.js +2 -0
- package/lib/cjs/src/modules/solana/instruction-info/di/instructionInfoModuleFactory.js.map +7 -0
- package/lib/cjs/src/modules/solana/instruction-info/di/instructionInfoTypes.js +2 -0
- package/lib/cjs/src/modules/solana/instruction-info/di/instructionInfoTypes.js.map +7 -0
- package/lib/cjs/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.js +2 -0
- package/lib/cjs/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.js.map +7 -0
- package/lib/cjs/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.test.js +2 -0
- package/lib/cjs/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.test.js.map +7 -0
- package/lib/cjs/src/modules/solana/model/SolanaClearSignContext.js +1 -1
- package/lib/cjs/src/modules/solana/model/SolanaClearSignContext.js.map +3 -3
- package/lib/cjs/src/modules/solana/model/SolanaContextTypes.js +1 -1
- package/lib/cjs/src/modules/solana/model/SolanaContextTypes.js.map +1 -1
- package/lib/cjs/src/modules/solana/model/SolanaPayloads.js +1 -1
- package/lib/cjs/src/modules/solana/model/SolanaPayloads.js.map +3 -3
- package/lib/cjs/src/modules/solana/model/SolanaTransactionScanChainId.js +1 -1
- package/lib/cjs/src/modules/solana/model/SolanaTransactionScanChainId.js.map +2 -2
- package/lib/cjs/src/modules/solana/owner-info/domain/OwnerInfoContextLoader.js +1 -1
- package/lib/cjs/src/modules/solana/owner-info/domain/OwnerInfoContextLoader.js.map +2 -2
- package/lib/cjs/src/modules/solana/owner-info/domain/OwnerInfoContextLoader.test.js +1 -1
- package/lib/cjs/src/modules/solana/owner-info/domain/OwnerInfoContextLoader.test.js.map +2 -2
- package/lib/cjs/src/modules/solana/owner-info/domain/solanaContextTypes.js +1 -1
- package/lib/cjs/src/modules/solana/owner-info/domain/solanaContextTypes.js.map +1 -1
- package/lib/cjs/src/modules/solana/token/domain/TokenContextLoader.js +1 -1
- package/lib/cjs/src/modules/solana/token/domain/TokenContextLoader.js.map +3 -3
- package/lib/cjs/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.js +2 -0
- package/lib/cjs/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.js.map +7 -0
- package/lib/cjs/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.test.js +2 -0
- package/lib/cjs/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.test.js.map +7 -0
- package/lib/cjs/src/modules/solana/token-account-state/data/TokenAccountStateDataSource.js +2 -0
- package/lib/cjs/src/modules/solana/token-account-state/data/TokenAccountStateDataSource.js.map +7 -0
- package/lib/cjs/src/modules/solana/token-account-state/di/tokenAccountStateModuleFactory.js +2 -0
- package/lib/cjs/src/modules/solana/token-account-state/di/tokenAccountStateModuleFactory.js.map +7 -0
- package/lib/cjs/src/modules/solana/token-account-state/di/tokenAccountStateTypes.js +2 -0
- package/lib/cjs/src/modules/solana/token-account-state/di/tokenAccountStateTypes.js.map +7 -0
- package/lib/cjs/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.js +2 -0
- package/lib/cjs/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.js.map +7 -0
- package/lib/cjs/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.test.js +2 -0
- package/lib/cjs/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.test.js.map +7 -0
- package/lib/cjs/src/modules/solana/token-info/data/HttpTokenInfoDataSource.js +2 -0
- package/lib/cjs/src/modules/solana/token-info/data/HttpTokenInfoDataSource.js.map +7 -0
- package/lib/cjs/src/modules/solana/token-info/data/HttpTokenInfoDataSource.test.js +2 -0
- package/lib/cjs/src/modules/solana/token-info/data/HttpTokenInfoDataSource.test.js.map +7 -0
- package/lib/cjs/src/modules/solana/token-info/data/TokenInfoDataSource.js +2 -0
- package/lib/cjs/src/modules/solana/token-info/data/TokenInfoDataSource.js.map +7 -0
- package/lib/cjs/src/modules/solana/token-info/di/tokenInfoModuleFactory.js +2 -0
- package/lib/cjs/src/modules/solana/token-info/di/tokenInfoModuleFactory.js.map +7 -0
- package/lib/cjs/src/modules/solana/token-info/di/tokenInfoTypes.js +2 -0
- package/lib/cjs/src/modules/solana/token-info/di/tokenInfoTypes.js.map +7 -0
- package/lib/cjs/src/modules/solana/token-info/domain/TokenInfoContextLoader.js +2 -0
- package/lib/cjs/src/modules/solana/token-info/domain/TokenInfoContextLoader.js.map +7 -0
- package/lib/cjs/src/modules/solana/token-info/domain/TokenInfoContextLoader.test.js +2 -0
- package/lib/cjs/src/modules/solana/token-info/domain/TokenInfoContextLoader.test.js.map +7 -0
- package/lib/cjs/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.js +2 -0
- package/lib/cjs/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.js.map +7 -0
- package/lib/cjs/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.test.js +2 -0
- package/lib/cjs/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.test.js.map +7 -0
- package/lib/cjs/src/modules/solana/trusted-name/data/TrustedNameDataSource.js +2 -0
- package/lib/cjs/src/modules/solana/trusted-name/data/TrustedNameDataSource.js.map +7 -0
- package/lib/cjs/src/modules/solana/trusted-name/di/trustedNameModuleFactory.js +2 -0
- package/lib/cjs/src/modules/solana/trusted-name/di/trustedNameModuleFactory.js.map +7 -0
- package/lib/cjs/src/modules/solana/trusted-name/di/trustedNameTypes.js +2 -0
- package/lib/cjs/src/modules/solana/trusted-name/di/trustedNameTypes.js.map +7 -0
- package/lib/cjs/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.js +2 -0
- package/lib/cjs/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.js.map +7 -0
- package/lib/cjs/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.test.js +2 -0
- package/lib/cjs/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.test.js.map +7 -0
- package/lib/cjs/src/shared/model/ClearSignContext.js +1 -1
- package/lib/cjs/src/shared/model/ClearSignContext.js.map +2 -2
- package/lib/cjs/src/shared/utils/HexStringUtils.js +1 -1
- package/lib/cjs/src/shared/utils/HexStringUtils.js.map +3 -3
- package/lib/cjs/src/shared/utils/HexStringUtils.test.js +1 -1
- package/lib/cjs/src/shared/utils/HexStringUtils.test.js.map +2 -2
- package/lib/cjs/src/shared/utils/certificateCache.js +2 -0
- package/lib/cjs/src/shared/utils/certificateCache.js.map +7 -0
- package/lib/cjs/src/shared/utils/certificateCache.test.js +2 -0
- package/lib/cjs/src/shared/utils/certificateCache.test.js.map +7 -0
- package/lib/cjs/src/shared/utils/certificateResult.js +2 -0
- package/lib/cjs/src/shared/utils/certificateResult.js.map +7 -0
- package/lib/cjs/src/shared/utils/certificateResult.test.js +2 -0
- package/lib/cjs/src/shared/utils/certificateResult.test.js.map +7 -0
- package/lib/cjs/src/shared/utils/challengeBoundLoader.js +2 -0
- package/lib/cjs/src/shared/utils/challengeBoundLoader.js.map +7 -0
- package/lib/cjs/src/shared/utils/challengeBoundLoader.test.js +2 -0
- package/lib/cjs/src/shared/utils/challengeBoundLoader.test.js.map +7 -0
- package/lib/cjs/src/shared/utils/deviceModelIdCodec.js +2 -0
- package/lib/cjs/src/shared/utils/deviceModelIdCodec.js.map +7 -0
- package/lib/cjs/src/shared/utils/deviceModelIdCodec.test.js +2 -0
- package/lib/cjs/src/shared/utils/deviceModelIdCodec.test.js.map +7 -0
- package/lib/cjs/src/shared/utils/signedDescriptorDto.js +2 -0
- package/lib/cjs/src/shared/utils/signedDescriptorDto.js.map +7 -0
- package/lib/cjs/src/shared/utils/signedDescriptorDto.test.js +2 -0
- package/lib/cjs/src/shared/utils/signedDescriptorDto.test.js.map +7 -0
- package/lib/cjs/src/shared/utils/uIntCodec.js +2 -0
- package/lib/cjs/src/shared/utils/uIntCodec.js.map +7 -0
- package/lib/cjs/src/shared/utils/uIntCodec.test.js +2 -0
- package/lib/cjs/src/shared/utils/uIntCodec.test.js.map +7 -0
- package/lib/esm/package.json +2 -2
- package/lib/esm/src/DefaultContextModule.js +1 -1
- package/lib/esm/src/DefaultContextModule.js.map +3 -3
- package/lib/esm/src/di.js +1 -1
- package/lib/esm/src/di.js.map +3 -3
- package/lib/esm/src/index.js +1 -1
- package/lib/esm/src/index.js.map +2 -2
- package/lib/esm/src/modules/multichain/pki/model/KeyId.js +1 -1
- package/lib/esm/src/modules/multichain/pki/model/KeyId.js.map +2 -2
- package/lib/esm/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.js +1 -1
- package/lib/esm/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.js.map +3 -3
- package/lib/esm/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.test.js +1 -1
- package/lib/esm/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.test.js.map +3 -3
- package/lib/esm/src/modules/solana/alt-resolution/data/AltResolutionDataSource.js +1 -0
- package/lib/esm/src/modules/solana/alt-resolution/data/AltResolutionDataSource.js.map +7 -0
- package/lib/esm/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.js +2 -0
- package/lib/esm/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.js.map +7 -0
- package/lib/esm/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.test.js +2 -0
- package/lib/esm/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.test.js.map +7 -0
- package/lib/esm/src/modules/solana/alt-resolution/di/altResolutionModuleFactory.js +2 -0
- package/lib/esm/src/modules/solana/alt-resolution/di/altResolutionModuleFactory.js.map +7 -0
- package/lib/esm/src/modules/solana/alt-resolution/di/altResolutionTypes.js +2 -0
- package/lib/esm/src/modules/solana/alt-resolution/di/altResolutionTypes.js.map +7 -0
- package/lib/esm/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.js +2 -0
- package/lib/esm/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.js.map +7 -0
- package/lib/esm/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.test.js +2 -0
- package/lib/esm/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.test.js.map +7 -0
- package/lib/esm/src/modules/solana/enum-variant/di/enumVariantModuleFactory.js +2 -0
- package/lib/esm/src/modules/solana/enum-variant/di/enumVariantModuleFactory.js.map +7 -0
- package/lib/esm/src/modules/solana/enum-variant/di/enumVariantTypes.js +2 -0
- package/lib/esm/src/modules/solana/enum-variant/di/enumVariantTypes.js.map +7 -0
- package/lib/esm/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.js +2 -0
- package/lib/esm/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.js.map +7 -0
- package/lib/esm/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.test.js +2 -0
- package/lib/esm/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.test.js.map +7 -0
- package/lib/esm/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.js +2 -0
- package/lib/esm/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.js.map +7 -0
- package/lib/esm/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.test.js +2 -0
- package/lib/esm/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.test.js.map +7 -0
- package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoDataSource.js +1 -0
- package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoDataSource.js.map +7 -0
- package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoDto.js +2 -0
- package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoDto.js.map +7 -0
- package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoMapper.js +2 -0
- package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoMapper.js.map +7 -0
- package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoMapper.test.js +2 -0
- package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoMapper.test.js.map +7 -0
- package/lib/esm/src/modules/solana/instruction-info/di/instructionInfoModuleFactory.js +2 -0
- package/lib/esm/src/modules/solana/instruction-info/di/instructionInfoModuleFactory.js.map +7 -0
- package/lib/esm/src/modules/solana/instruction-info/di/instructionInfoTypes.js +2 -0
- package/lib/esm/src/modules/solana/instruction-info/di/instructionInfoTypes.js.map +7 -0
- package/lib/esm/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.js +2 -0
- package/lib/esm/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.js.map +7 -0
- package/lib/esm/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.test.js +2 -0
- package/lib/esm/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.test.js.map +7 -0
- package/lib/esm/src/modules/solana/model/SolanaClearSignContext.js +1 -1
- package/lib/esm/src/modules/solana/model/SolanaClearSignContext.js.map +3 -3
- package/lib/esm/src/modules/solana/model/SolanaPayloads.js +1 -0
- package/lib/esm/src/modules/solana/model/SolanaPayloads.js.map +4 -4
- package/lib/esm/src/modules/solana/model/SolanaTransactionScanChainId.js +1 -1
- package/lib/esm/src/modules/solana/model/SolanaTransactionScanChainId.js.map +2 -2
- package/lib/esm/src/modules/solana/owner-info/domain/OwnerInfoContextLoader.js +1 -1
- package/lib/esm/src/modules/solana/owner-info/domain/OwnerInfoContextLoader.js.map +2 -2
- package/lib/esm/src/modules/solana/owner-info/domain/OwnerInfoContextLoader.test.js +1 -1
- package/lib/esm/src/modules/solana/owner-info/domain/OwnerInfoContextLoader.test.js.map +2 -2
- package/lib/esm/src/modules/solana/token/domain/TokenContextLoader.js +1 -1
- package/lib/esm/src/modules/solana/token/domain/TokenContextLoader.js.map +3 -3
- package/lib/esm/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.js +2 -0
- package/lib/esm/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.js.map +7 -0
- package/lib/esm/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.test.js +2 -0
- package/lib/esm/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.test.js.map +7 -0
- package/lib/esm/src/modules/solana/token-account-state/data/TokenAccountStateDataSource.js +1 -0
- package/lib/esm/src/modules/solana/token-account-state/data/TokenAccountStateDataSource.js.map +7 -0
- package/lib/esm/src/modules/solana/token-account-state/di/tokenAccountStateModuleFactory.js +2 -0
- package/lib/esm/src/modules/solana/token-account-state/di/tokenAccountStateModuleFactory.js.map +7 -0
- package/lib/esm/src/modules/solana/token-account-state/di/tokenAccountStateTypes.js +2 -0
- package/lib/esm/src/modules/solana/token-account-state/di/tokenAccountStateTypes.js.map +7 -0
- package/lib/esm/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.js +2 -0
- package/lib/esm/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.js.map +7 -0
- package/lib/esm/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.test.js +2 -0
- package/lib/esm/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.test.js.map +7 -0
- package/lib/esm/src/modules/solana/token-info/data/HttpTokenInfoDataSource.js +2 -0
- package/lib/esm/src/modules/solana/token-info/data/HttpTokenInfoDataSource.js.map +7 -0
- package/lib/esm/src/modules/solana/token-info/data/HttpTokenInfoDataSource.test.js +2 -0
- package/lib/esm/src/modules/solana/token-info/data/HttpTokenInfoDataSource.test.js.map +7 -0
- package/lib/esm/src/modules/solana/token-info/data/TokenInfoDataSource.js +1 -0
- package/lib/esm/src/modules/solana/token-info/data/TokenInfoDataSource.js.map +7 -0
- package/lib/esm/src/modules/solana/token-info/di/tokenInfoModuleFactory.js +2 -0
- package/lib/esm/src/modules/solana/token-info/di/tokenInfoModuleFactory.js.map +7 -0
- package/lib/esm/src/modules/solana/token-info/di/tokenInfoTypes.js +2 -0
- package/lib/esm/src/modules/solana/token-info/di/tokenInfoTypes.js.map +7 -0
- package/lib/esm/src/modules/solana/token-info/domain/TokenInfoContextLoader.js +2 -0
- package/lib/esm/src/modules/solana/token-info/domain/TokenInfoContextLoader.js.map +7 -0
- package/lib/esm/src/modules/solana/token-info/domain/TokenInfoContextLoader.test.js +2 -0
- package/lib/esm/src/modules/solana/token-info/domain/TokenInfoContextLoader.test.js.map +7 -0
- package/lib/esm/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.js +2 -0
- package/lib/esm/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.js.map +7 -0
- package/lib/esm/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.test.js +2 -0
- package/lib/esm/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.test.js.map +7 -0
- package/lib/esm/src/modules/solana/trusted-name/data/TrustedNameDataSource.js +1 -0
- package/lib/esm/src/modules/solana/trusted-name/data/TrustedNameDataSource.js.map +7 -0
- package/lib/esm/src/modules/solana/trusted-name/di/trustedNameModuleFactory.js +2 -0
- package/lib/esm/src/modules/solana/trusted-name/di/trustedNameModuleFactory.js.map +7 -0
- package/lib/esm/src/modules/solana/trusted-name/di/trustedNameTypes.js +2 -0
- package/lib/esm/src/modules/solana/trusted-name/di/trustedNameTypes.js.map +7 -0
- package/lib/esm/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.js +2 -0
- package/lib/esm/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.js.map +7 -0
- package/lib/esm/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.test.js +2 -0
- package/lib/esm/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.test.js.map +7 -0
- package/lib/esm/src/shared/model/ClearSignContext.js +1 -1
- package/lib/esm/src/shared/model/ClearSignContext.js.map +2 -2
- package/lib/esm/src/shared/utils/HexStringUtils.js +1 -1
- package/lib/esm/src/shared/utils/HexStringUtils.js.map +3 -3
- package/lib/esm/src/shared/utils/HexStringUtils.test.js +1 -1
- package/lib/esm/src/shared/utils/HexStringUtils.test.js.map +2 -2
- package/lib/esm/src/shared/utils/certificateCache.js +2 -0
- package/lib/esm/src/shared/utils/certificateCache.js.map +7 -0
- package/lib/esm/src/shared/utils/certificateCache.test.js +2 -0
- package/lib/esm/src/shared/utils/certificateCache.test.js.map +7 -0
- package/lib/esm/src/shared/utils/certificateResult.js +2 -0
- package/lib/esm/src/shared/utils/certificateResult.js.map +7 -0
- package/lib/esm/src/shared/utils/certificateResult.test.js +2 -0
- package/lib/esm/src/shared/utils/certificateResult.test.js.map +7 -0
- package/lib/esm/src/shared/utils/challengeBoundLoader.js +2 -0
- package/lib/esm/src/shared/utils/challengeBoundLoader.js.map +7 -0
- package/lib/esm/src/shared/utils/challengeBoundLoader.test.js +2 -0
- package/lib/esm/src/shared/utils/challengeBoundLoader.test.js.map +7 -0
- package/lib/esm/src/shared/utils/deviceModelIdCodec.js +2 -0
- package/lib/esm/src/shared/utils/deviceModelIdCodec.js.map +7 -0
- package/lib/esm/src/shared/utils/deviceModelIdCodec.test.js +2 -0
- package/lib/esm/src/shared/utils/deviceModelIdCodec.test.js.map +7 -0
- package/lib/esm/src/shared/utils/signedDescriptorDto.js +2 -0
- package/lib/esm/src/shared/utils/signedDescriptorDto.js.map +7 -0
- package/lib/esm/src/shared/utils/signedDescriptorDto.test.js +2 -0
- package/lib/esm/src/shared/utils/signedDescriptorDto.test.js.map +7 -0
- package/lib/esm/src/shared/utils/uIntCodec.js +2 -0
- package/lib/esm/src/shared/utils/uIntCodec.js.map +7 -0
- package/lib/esm/src/shared/utils/uIntCodec.test.js +2 -0
- package/lib/esm/src/shared/utils/uIntCodec.test.js.map +7 -0
- package/lib/types/src/DefaultContextModule.d.ts.map +1 -1
- package/lib/types/src/di.d.ts.map +1 -1
- package/lib/types/src/index.d.ts +16 -0
- package/lib/types/src/index.d.ts.map +1 -1
- package/lib/types/src/modules/multichain/pki/model/KeyId.d.ts +1 -0
- package/lib/types/src/modules/multichain/pki/model/KeyId.d.ts.map +1 -1
- package/lib/types/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.d.ts +1 -1
- package/lib/types/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.d.ts.map +1 -1
- package/lib/types/src/modules/solana/alt-resolution/data/AltResolutionDataSource.d.ts +17 -0
- package/lib/types/src/modules/solana/alt-resolution/data/AltResolutionDataSource.d.ts.map +1 -0
- package/lib/types/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.d.ts +11 -0
- package/lib/types/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.d.ts.map +1 -0
- package/lib/types/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.test.d.ts +2 -0
- package/lib/types/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.test.d.ts.map +1 -0
- package/lib/types/src/modules/solana/alt-resolution/di/altResolutionModuleFactory.d.ts +3 -0
- package/lib/types/src/modules/solana/alt-resolution/di/altResolutionModuleFactory.d.ts.map +1 -0
- package/lib/types/src/modules/solana/alt-resolution/di/altResolutionTypes.d.ts +5 -0
- package/lib/types/src/modules/solana/alt-resolution/di/altResolutionTypes.d.ts.map +1 -0
- package/lib/types/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.d.ts +23 -0
- package/lib/types/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.d.ts.map +1 -0
- package/lib/types/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.test.d.ts +2 -0
- package/lib/types/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.test.d.ts.map +1 -0
- package/lib/types/src/modules/solana/enum-variant/di/enumVariantModuleFactory.d.ts +3 -0
- package/lib/types/src/modules/solana/enum-variant/di/enumVariantModuleFactory.d.ts.map +1 -0
- package/lib/types/src/modules/solana/enum-variant/di/enumVariantTypes.d.ts +4 -0
- package/lib/types/src/modules/solana/enum-variant/di/enumVariantTypes.d.ts.map +1 -0
- package/lib/types/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.d.ts +45 -0
- package/lib/types/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.d.ts.map +1 -0
- package/lib/types/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.test.d.ts +2 -0
- package/lib/types/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.test.d.ts.map +1 -0
- package/lib/types/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.d.ts +11 -0
- package/lib/types/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.d.ts.map +1 -0
- package/lib/types/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.test.d.ts +2 -0
- package/lib/types/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.test.d.ts.map +1 -0
- package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoDataSource.d.ts +32 -0
- package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoDataSource.d.ts.map +1 -0
- package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoDto.d.ts +135 -0
- package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoDto.d.ts.map +1 -0
- package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoMapper.d.ts +23 -0
- package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoMapper.d.ts.map +1 -0
- package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoMapper.test.d.ts +2 -0
- package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoMapper.test.d.ts.map +1 -0
- package/lib/types/src/modules/solana/instruction-info/di/instructionInfoModuleFactory.d.ts +3 -0
- package/lib/types/src/modules/solana/instruction-info/di/instructionInfoModuleFactory.d.ts.map +1 -0
- package/lib/types/src/modules/solana/instruction-info/di/instructionInfoTypes.d.ts +5 -0
- package/lib/types/src/modules/solana/instruction-info/di/instructionInfoTypes.d.ts.map +1 -0
- package/lib/types/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.d.ts +39 -0
- package/lib/types/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.d.ts.map +1 -0
- package/lib/types/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.test.d.ts +2 -0
- package/lib/types/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.test.d.ts.map +1 -0
- package/lib/types/src/modules/solana/model/SolanaClearSignContext.d.ts +33 -2
- package/lib/types/src/modules/solana/model/SolanaClearSignContext.d.ts.map +1 -1
- package/lib/types/src/modules/solana/model/SolanaContextTypes.d.ts +8 -1
- package/lib/types/src/modules/solana/model/SolanaContextTypes.d.ts.map +1 -1
- package/lib/types/src/modules/solana/model/SolanaPayloads.d.ts +126 -0
- package/lib/types/src/modules/solana/model/SolanaPayloads.d.ts.map +1 -1
- package/lib/types/src/modules/solana/model/SolanaTransactionScanChainId.d.ts +6 -5
- package/lib/types/src/modules/solana/model/SolanaTransactionScanChainId.d.ts.map +1 -1
- package/lib/types/src/modules/solana/owner-info/domain/solanaContextTypes.d.ts +2 -5
- package/lib/types/src/modules/solana/owner-info/domain/solanaContextTypes.d.ts.map +1 -1
- package/lib/types/src/modules/solana/token/domain/TokenContextLoader.d.ts.map +1 -1
- package/lib/types/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.d.ts +11 -0
- package/lib/types/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.d.ts.map +1 -0
- package/lib/types/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.test.d.ts +2 -0
- package/lib/types/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.test.d.ts.map +1 -0
- package/lib/types/src/modules/solana/token-account-state/data/TokenAccountStateDataSource.d.ts +15 -0
- package/lib/types/src/modules/solana/token-account-state/data/TokenAccountStateDataSource.d.ts.map +1 -0
- package/lib/types/src/modules/solana/token-account-state/di/tokenAccountStateModuleFactory.d.ts +3 -0
- package/lib/types/src/modules/solana/token-account-state/di/tokenAccountStateModuleFactory.d.ts.map +1 -0
- package/lib/types/src/modules/solana/token-account-state/di/tokenAccountStateTypes.d.ts +5 -0
- package/lib/types/src/modules/solana/token-account-state/di/tokenAccountStateTypes.d.ts.map +1 -0
- package/lib/types/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.d.ts +26 -0
- package/lib/types/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.d.ts.map +1 -0
- package/lib/types/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.test.d.ts +2 -0
- package/lib/types/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.test.d.ts.map +1 -0
- package/lib/types/src/modules/solana/token-info/data/HttpTokenInfoDataSource.d.ts +11 -0
- package/lib/types/src/modules/solana/token-info/data/HttpTokenInfoDataSource.d.ts.map +1 -0
- package/lib/types/src/modules/solana/token-info/data/HttpTokenInfoDataSource.test.d.ts +2 -0
- package/lib/types/src/modules/solana/token-info/data/HttpTokenInfoDataSource.test.d.ts.map +1 -0
- package/lib/types/src/modules/solana/token-info/data/TokenInfoDataSource.d.ts +24 -0
- package/lib/types/src/modules/solana/token-info/data/TokenInfoDataSource.d.ts.map +1 -0
- package/lib/types/src/modules/solana/token-info/di/tokenInfoModuleFactory.d.ts +3 -0
- package/lib/types/src/modules/solana/token-info/di/tokenInfoModuleFactory.d.ts.map +1 -0
- package/lib/types/src/modules/solana/token-info/di/tokenInfoTypes.d.ts +5 -0
- package/lib/types/src/modules/solana/token-info/di/tokenInfoTypes.d.ts.map +1 -0
- package/lib/types/src/modules/solana/token-info/domain/TokenInfoContextLoader.d.ts +26 -0
- package/lib/types/src/modules/solana/token-info/domain/TokenInfoContextLoader.d.ts.map +1 -0
- package/lib/types/src/modules/solana/token-info/domain/TokenInfoContextLoader.test.d.ts +2 -0
- package/lib/types/src/modules/solana/token-info/domain/TokenInfoContextLoader.test.d.ts.map +1 -0
- package/lib/types/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.d.ts +11 -0
- package/lib/types/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.d.ts.map +1 -0
- package/lib/types/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.test.d.ts +2 -0
- package/lib/types/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.test.d.ts.map +1 -0
- package/lib/types/src/modules/solana/trusted-name/data/TrustedNameDataSource.d.ts +18 -0
- package/lib/types/src/modules/solana/trusted-name/data/TrustedNameDataSource.d.ts.map +1 -0
- package/lib/types/src/modules/solana/trusted-name/di/trustedNameModuleFactory.d.ts +3 -0
- package/lib/types/src/modules/solana/trusted-name/di/trustedNameModuleFactory.d.ts.map +1 -0
- package/lib/types/src/modules/solana/trusted-name/di/trustedNameTypes.d.ts +5 -0
- package/lib/types/src/modules/solana/trusted-name/di/trustedNameTypes.d.ts.map +1 -0
- package/lib/types/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.d.ts +29 -0
- package/lib/types/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.d.ts.map +1 -0
- package/lib/types/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.test.d.ts +2 -0
- package/lib/types/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.test.d.ts.map +1 -0
- package/lib/types/src/shared/model/ClearSignContext.d.ts +7 -1
- package/lib/types/src/shared/model/ClearSignContext.d.ts.map +1 -1
- package/lib/types/src/shared/utils/HexStringUtils.d.ts +7 -0
- package/lib/types/src/shared/utils/HexStringUtils.d.ts.map +1 -1
- package/lib/types/src/shared/utils/certificateCache.d.ts +23 -0
- package/lib/types/src/shared/utils/certificateCache.d.ts.map +1 -0
- package/lib/types/src/shared/utils/certificateCache.test.d.ts +2 -0
- package/lib/types/src/shared/utils/certificateCache.test.d.ts.map +1 -0
- package/lib/types/src/shared/utils/certificateResult.d.ts +26 -0
- package/lib/types/src/shared/utils/certificateResult.d.ts.map +1 -0
- package/lib/types/src/shared/utils/certificateResult.test.d.ts +2 -0
- package/lib/types/src/shared/utils/certificateResult.test.d.ts.map +1 -0
- package/lib/types/src/shared/utils/challengeBoundLoader.d.ts +43 -0
- package/lib/types/src/shared/utils/challengeBoundLoader.d.ts.map +1 -0
- package/lib/types/src/shared/utils/challengeBoundLoader.test.d.ts +2 -0
- package/lib/types/src/shared/utils/challengeBoundLoader.test.d.ts.map +1 -0
- package/lib/types/src/shared/utils/deviceModelIdCodec.d.ts +7 -0
- package/lib/types/src/shared/utils/deviceModelIdCodec.d.ts.map +1 -0
- package/lib/types/src/shared/utils/deviceModelIdCodec.test.d.ts +2 -0
- package/lib/types/src/shared/utils/deviceModelIdCodec.test.d.ts.map +1 -0
- package/lib/types/src/shared/utils/signedDescriptorDto.d.ts +15 -0
- package/lib/types/src/shared/utils/signedDescriptorDto.d.ts.map +1 -0
- package/lib/types/src/shared/utils/signedDescriptorDto.test.d.ts +2 -0
- package/lib/types/src/shared/utils/signedDescriptorDto.test.d.ts.map +1 -0
- package/lib/types/src/shared/utils/uIntCodec.d.ts +20 -0
- package/lib/types/src/shared/utils/uIntCodec.d.ts.map +1 -0
- package/lib/types/src/shared/utils/uIntCodec.test.d.ts +2 -0
- package/lib/types/src/shared/utils/uIntCodec.test.d.ts.map +1 -0
- package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
- package/package.json +6 -6
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../../src/modules/solana/trusted-name/domain/TrustedNameContextLoader.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n type DeviceModelId,\n type LoggerPublisherService,\n} from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\nimport { array, Codec, optional, string } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { pkiTypes } from \"@/modules/multichain/pki/di/pkiTypes\";\nimport { type PkiCertificateLoader } from \"@/modules/multichain/pki/domain/PkiCertificateLoader\";\nimport { type SolanaTrustedNameDataSource } from \"@/modules/solana/trusted-name/data/TrustedNameDataSource\";\nimport { solanaTrustedNameTypes } from \"@/modules/solana/trusted-name/di/trustedNameTypes\";\nimport { type ContextLoader } from \"@/shared/domain/ContextLoader\";\nimport {\n type ClearSignContext,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\nimport { loadChallengeBoundContexts } from \"@/shared/utils/challengeBoundLoader\";\nimport { deviceModelIdCodec } from \"@/shared/utils/deviceModelIdCodec\";\n\nconst SUPPORTED_TYPES: ClearSignContextType[] = [\n ClearSignContextType.SOLANA_TRUSTED_NAME,\n];\n\nconst NETWORK_DEFAULT = \"mainnet\";\n\n/**\n * One trusted-name request, resolved to a Uint8Array TLV descriptor. The\n * caller must obtain a fresh challenge immediately before each fetch.\n */\nexport type SolanaTrustedNameRequest = {\n address: string;\n challenge: string;\n types: string[];\n sources: string[];\n};\n\nexport type SolanaTrustedNameContextInput = {\n deviceModelId: DeviceModelId;\n network?: string; // \"mainnet\" | \"devnet\" | \"testnet\"; defaults to mainnet\n requests: SolanaTrustedNameRequest[];\n};\n\nconst trustedNameRequestCodec = Codec.interface({\n address: string,\n challenge: string,\n types: array(string),\n sources: array(string),\n});\n\nconst solanaTrustedNameInputCodec = Codec.interface({\n deviceModelId: deviceModelIdCodec,\n network: optional(string),\n requests: array(trustedNameRequestCodec),\n});\n\n@injectable()\nexport class SolanaTrustedNameContextLoader\n implements ContextLoader<SolanaTrustedNameContextInput>\n{\n private readonly logger: LoggerPublisherService;\n\n constructor(\n @inject(solanaTrustedNameTypes.SolanaTrustedNameDataSource)\n private readonly dataSource: SolanaTrustedNameDataSource,\n @inject(pkiTypes.PkiCertificateLoader)\n private readonly certificateLoader: PkiCertificateLoader,\n @inject(configTypes.ContextModuleLoggerFactory)\n loggerFactory: (tag: string) => LoggerPublisherService,\n ) {\n this.logger = loggerFactory(\"SolanaTrustedNameContextLoader\");\n }\n\n public canHandle(\n input: unknown,\n expectedTypes: ClearSignContextType[],\n ): input is SolanaTrustedNameContextInput {\n if (!SUPPORTED_TYPES.every((t) => expectedTypes.includes(t))) return false;\n return solanaTrustedNameInputCodec.decode(input).caseOf({\n Left: () => false,\n Right: ({ requests }) =>\n requests.length > 0 &&\n requests.every((r) => r.address.length > 0 && r.challenge.length > 0),\n });\n }\n\n public async load(\n input: SolanaTrustedNameContextInput,\n ): Promise<ClearSignContext[]> {\n const network = input.network || NETWORK_DEFAULT;\n\n return loadChallengeBoundContexts({\n requests: input.requests,\n deviceModelId: input.deviceModelId,\n certificateLoader: this.certificateLoader,\n logger: this.logger,\n label: \"TRUSTED_NAME\",\n fetch: (request) =>\n this.dataSource.getTrustedName({\n address: request.address,\n challenge: request.challenge,\n types: request.types,\n sources: request.sources,\n network,\n }),\n toContext: (value, certificate) => ({\n type: ClearSignContextType.SOLANA_TRUSTED_NAME,\n payload: value.descriptor,\n certificate,\n }),\n describe: (request) => ({ address: request.address }),\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "okBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,oCAAAE,IAAA,eAAAC,EAAAH,GAIA,IAAAI,EAAmC,qBACnCC,EAA+C,qBAE/CC,EAA4B,mCAC5BC,EAAyB,gDAGzBC,EAAuC,6DAEvCC,EAGO,2CACPC,EAA2C,+CAC3CC,EAAmC,6CAEnC,MAAMC,EAA0C,CAC9C,uBAAqB,mBACvB,EAEMC,EAAkB,UAmBlBC,EAA0B,QAAM,UAAU,CAC9C,QAAS,SACT,UAAW,SACX,SAAO,SAAM,QAAM,EACnB,WAAS,SAAM,QAAM,CACvB,CAAC,EAEKC,EAA8B,QAAM,UAAU,CAClD,cAAe,qBACf,WAAS,YAAS,QAAM,EACxB,YAAU,SAAMD,CAAuB,CACzC,CAAC,EAGM,IAAME,EAAN,KAEP,CAGE,YAEmBC,EAEAC,EAEjBC,EACA,CALiB,gBAAAF,EAEA,uBAAAC,EAIjB,KAAK,OAASC,EAAc,gCAAgC,CAC9D,CAXiB,OAaV,UACLC,EACAC,EACwC,CACxC,OAAKT,EAAgB,MAAOU,GAAMD,EAAc,SAASC,CAAC,CAAC,EACpDP,EAA4B,OAAOK,CAAK,EAAE,OAAO,CACtD,KAAM,IAAM,GACZ,MAAO,CAAC,CAAE,SAAAG,CAAS,IACjBA,EAAS,OAAS,GAClBA,EAAS,MAAO,GAAM,EAAE,QAAQ,OAAS,GAAK,EAAE,UAAU,OAAS,CAAC,CACxE,CAAC,EANoE,EAOvE,CAEA,MAAa,KACXH,EAC6B,CAC7B,MAAMI,EAAUJ,EAAM,SAAWP,EAEjC,SAAO,8BAA2B,CAChC,SAAUO,EAAM,SAChB,cAAeA,EAAM,cACrB,kBAAmB,KAAK,kBACxB,OAAQ,KAAK,OACb,MAAO,eACP,MAAQK,GACN,KAAK,WAAW,eAAe,CAC7B,QAASA,EAAQ,QACjB,UAAWA,EAAQ,UACnB,MAAOA,EAAQ,MACf,QAASA,EAAQ,QACjB,QAAAD,CACF,CAAC,EACH,UAAW,CAACE,EAAOC,KAAiB,CAClC,KAAM,uBAAqB,oBAC3B,QAASD,EAAM,WACf,YAAAC,CACF,GACA,SAAWF,IAAa,CAAE,QAASA,EAAQ,OAAQ,EACrD,CAAC,CACH,CACF,EAxDaT,EAANY,EAAA,IADN,cAAW,EAOPC,EAAA,eAAO,yBAAuB,2BAA2B,GAEzDA,EAAA,eAAO,WAAS,oBAAoB,GAEpCA,EAAA,eAAO,cAAY,0BAA0B,IAVrCb",
|
|
6
|
+
"names": ["TrustedNameContextLoader_exports", "__export", "SolanaTrustedNameContextLoader", "__toCommonJS", "import_inversify", "import_purify_ts", "import_configTypes", "import_pkiTypes", "import_trustedNameTypes", "import_ClearSignContext", "import_challengeBoundLoader", "import_deviceModelIdCodec", "SUPPORTED_TYPES", "NETWORK_DEFAULT", "trustedNameRequestCodec", "solanaTrustedNameInputCodec", "SolanaTrustedNameContextLoader", "dataSource", "certificateLoader", "loggerFactory", "input", "expectedTypes", "t", "requests", "network", "request", "value", "certificate", "__decorateClass", "__decorateParam"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var c=require("@ledgerhq/device-management-kit"),n=require("purify-ts"),e=require("vitest"),r=require("../../../../shared/model/ClearSignContext"),y=require("./TrustedNameContextLoader");const m=()=>({debug:e.vi.fn(),info:e.vi.fn(),warn:e.vi.fn(),error:e.vi.fn(),subscribers:[]}),i={keyUsageNumber:4,payload:new Uint8Array([7])},s="Addr11111111111111111111111111111111111111",u="Addr22222222222222222222222222222222222222";(0,e.describe)("SolanaTrustedNameContextLoader",()=>{let d,l;(0,e.beforeEach)(()=>{e.vi.restoreAllMocks(),d={getTrustedName:e.vi.fn()},l={loadCertificate:e.vi.fn().mockResolvedValue(i)}});const o=()=>new y.SolanaTrustedNameContextLoader(d,l,m);(0,e.describe)("canHandle",()=>{(0,e.it)("returns true when SOLANA_TRUSTED_NAME is requested with valid requests",()=>{(0,e.expect)(o().canHandle({deviceModelId:c.DeviceModelId.NANO_X,requests:[{address:s,challenge:"c",types:["eoa"],sources:["sns"]}]},[r.ClearSignContextType.SOLANA_TRUSTED_NAME])).toBe(!0)}),(0,e.it)("returns false when SOLANA_TRUSTED_NAME is not requested",()=>{(0,e.expect)(o().canHandle({requests:[{address:s,challenge:"c",types:["eoa"],sources:["sns"]}]},[r.ClearSignContextType.SOLANA_TOKEN])).toBe(!1)}),(0,e.it)("returns false on malformed input",()=>{const t=o(),a=[r.ClearSignContextType.SOLANA_TRUSTED_NAME];(0,e.expect)(t.canHandle({requests:[]},a)).toBe(!1),(0,e.expect)(t.canHandle({requests:[{address:"",challenge:"c",types:[],sources:[]}]},a)).toBe(!1),(0,e.expect)(t.canHandle({requests:[{address:s,challenge:"",types:[],sources:[]}]},a)).toBe(!1)})}),(0,e.describe)("load",()=>{(0,e.it)("emits one SOLANA_TRUSTED_NAME per request with Uint8Array payload",async()=>{e.vi.spyOn(d,"getTrustedName").mockImplementation(async({address:a})=>(0,n.Right)({address:a,descriptor:new Uint8Array([a===s?170:187]),keyId:"name_key",keyUsage:"trusted_name"}));const t=await o().load({deviceModelId:c.DeviceModelId.NANO_X,requests:[{address:s,challenge:"c1",types:["eoa"],sources:["sns"]},{address:u,challenge:"c2",types:["program"],sources:["cal"]}]});(0,e.expect)(t).toHaveLength(2),(0,e.expect)(t[0]).toMatchObject({type:r.ClearSignContextType.SOLANA_TRUSTED_NAME,payload:new Uint8Array([170]),certificate:i}),(0,e.expect)(t[1]).toMatchObject({type:r.ClearSignContextType.SOLANA_TRUSTED_NAME,payload:new Uint8Array([187])})}),(0,e.it)("emits an ERROR per failing request and keeps the others",async()=>{e.vi.spyOn(d,"getTrustedName").mockImplementation(async({address:a})=>a===s?(0,n.Right)({address:a,descriptor:new Uint8Array([170]),keyId:"k",keyUsage:"u"}):(0,n.Left)(new Error("upstream-404")));const t=await o().load({deviceModelId:c.DeviceModelId.NANO_X,requests:[{address:s,challenge:"c1",types:[],sources:[]},{address:u,challenge:"c2",types:[],sources:[]}]});(0,e.expect)(t[0]?.type).toBe(r.ClearSignContextType.SOLANA_TRUSTED_NAME),(0,e.expect)(t[1]?.type).toBe(r.ClearSignContextType.ERROR)}),(0,e.it)("forwards default network=mainnet when input.network is omitted",async()=>{const t=e.vi.spyOn(d,"getTrustedName").mockResolvedValue((0,n.Right)({address:s,descriptor:new Uint8Array([1]),keyId:"k",keyUsage:"u"}));await o().load({deviceModelId:c.DeviceModelId.NANO_X,requests:[{address:s,challenge:"c",types:[],sources:[]}]}),(0,e.expect)(t).toHaveBeenCalledWith(e.expect.objectContaining({network:"mainnet"}))})})});
|
|
2
|
+
//# sourceMappingURL=TrustedNameContextLoader.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../../src/modules/solana/trusted-name/domain/TrustedNameContextLoader.test.ts"],
|
|
4
|
+
"sourcesContent": ["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { DeviceModelId } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { type PkiCertificateLoader } from \"@/modules/multichain/pki/domain/PkiCertificateLoader\";\nimport { type SolanaTrustedNameDataSource } from \"@/modules/solana/trusted-name/data/TrustedNameDataSource\";\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\n\nimport { SolanaTrustedNameContextLoader } from \"./TrustedNameContextLoader\";\n\nconst mockLoggerFactory = () => ({\n debug: vi.fn(),\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n subscribers: [],\n});\n\nconst mockCertificate = { keyUsageNumber: 4, payload: new Uint8Array([7]) };\nconst ADDR_A = \"Addr11111111111111111111111111111111111111\";\nconst ADDR_B = \"Addr22222222222222222222222222222222222222\";\n\ndescribe(\"SolanaTrustedNameContextLoader\", () => {\n let dataSource: SolanaTrustedNameDataSource;\n let certificateLoader: PkiCertificateLoader;\n\n beforeEach(() => {\n vi.restoreAllMocks();\n dataSource = {\n getTrustedName: vi.fn(),\n };\n certificateLoader = {\n loadCertificate: vi.fn().mockResolvedValue(mockCertificate),\n };\n });\n\n const makeLoader = () =>\n new SolanaTrustedNameContextLoader(\n dataSource,\n certificateLoader,\n mockLoggerFactory,\n );\n\n describe(\"canHandle\", () => {\n it(\"returns true when SOLANA_TRUSTED_NAME is requested with valid requests\", () => {\n expect(\n makeLoader().canHandle(\n {\n deviceModelId: DeviceModelId.NANO_X,\n requests: [\n {\n address: ADDR_A,\n challenge: \"c\",\n types: [\"eoa\"],\n sources: [\"sns\"],\n },\n ],\n },\n [ClearSignContextType.SOLANA_TRUSTED_NAME],\n ),\n ).toBe(true);\n });\n\n it(\"returns false when SOLANA_TRUSTED_NAME is not requested\", () => {\n expect(\n makeLoader().canHandle(\n {\n requests: [\n {\n address: ADDR_A,\n challenge: \"c\",\n types: [\"eoa\"],\n sources: [\"sns\"],\n },\n ],\n } as any,\n [ClearSignContextType.SOLANA_TOKEN],\n ),\n ).toBe(false);\n });\n\n it(\"returns false on malformed input\", () => {\n const loader = makeLoader();\n const types = [ClearSignContextType.SOLANA_TRUSTED_NAME];\n expect(loader.canHandle({ requests: [] } as any, types)).toBe(false);\n expect(\n loader.canHandle(\n {\n requests: [{ address: \"\", challenge: \"c\", types: [], sources: [] }],\n } as any,\n types,\n ),\n ).toBe(false);\n expect(\n loader.canHandle(\n {\n requests: [\n { address: ADDR_A, challenge: \"\", types: [], sources: [] },\n ],\n } as any,\n types,\n ),\n ).toBe(false);\n });\n });\n\n describe(\"load\", () => {\n it(\"emits one SOLANA_TRUSTED_NAME per request with Uint8Array payload\", async () => {\n vi.spyOn(dataSource, \"getTrustedName\").mockImplementation(\n async ({ address }) =>\n Right({\n address,\n descriptor: new Uint8Array([address === ADDR_A ? 0xaa : 0xbb]),\n keyId: \"name_key\",\n keyUsage: \"trusted_name\",\n }),\n );\n\n const result = await makeLoader().load({\n deviceModelId: DeviceModelId.NANO_X,\n requests: [\n {\n address: ADDR_A,\n challenge: \"c1\",\n types: [\"eoa\"],\n sources: [\"sns\"],\n },\n {\n address: ADDR_B,\n challenge: \"c2\",\n types: [\"program\"],\n sources: [\"cal\"],\n },\n ],\n });\n\n expect(result).toHaveLength(2);\n expect(result[0]).toMatchObject({\n type: ClearSignContextType.SOLANA_TRUSTED_NAME,\n payload: new Uint8Array([0xaa]),\n certificate: mockCertificate,\n });\n expect(result[1]).toMatchObject({\n type: ClearSignContextType.SOLANA_TRUSTED_NAME,\n payload: new Uint8Array([0xbb]),\n });\n });\n\n it(\"emits an ERROR per failing request and keeps the others\", async () => {\n vi.spyOn(dataSource, \"getTrustedName\").mockImplementation(\n async ({ address }) => {\n if (address === ADDR_A) {\n return Right({\n address,\n descriptor: new Uint8Array([0xaa]),\n keyId: \"k\",\n keyUsage: \"u\",\n });\n }\n return Left(new Error(\"upstream-404\"));\n },\n );\n\n const out = await makeLoader().load({\n deviceModelId: DeviceModelId.NANO_X,\n requests: [\n { address: ADDR_A, challenge: \"c1\", types: [], sources: [] },\n { address: ADDR_B, challenge: \"c2\", types: [], sources: [] },\n ],\n });\n\n expect(out[0]?.type).toBe(ClearSignContextType.SOLANA_TRUSTED_NAME);\n expect(out[1]?.type).toBe(ClearSignContextType.ERROR);\n });\n\n it(\"forwards default network=mainnet when input.network is omitted\", async () => {\n const spy = vi.spyOn(dataSource, \"getTrustedName\").mockResolvedValue(\n Right({\n address: ADDR_A,\n descriptor: new Uint8Array([1]),\n keyId: \"k\",\n keyUsage: \"u\",\n }),\n );\n\n await makeLoader().load({\n deviceModelId: DeviceModelId.NANO_X,\n requests: [{ address: ADDR_A, challenge: \"c\", types: [], sources: [] }],\n });\n\n expect(spy).toHaveBeenCalledWith(\n expect.objectContaining({ network: \"mainnet\" }),\n );\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_device_management_kit", "import_purify_ts", "import_vitest", "import_ClearSignContext", "import_TrustedNameContextLoader", "mockLoggerFactory", "mockCertificate", "ADDR_A", "ADDR_B", "dataSource", "certificateLoader", "makeLoader", "loader", "types", "address", "result", "out", "spy"]
|
|
7
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var o=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var _=Object.getOwnPropertyNames;var u=Object.prototype.hasOwnProperty;var O=(r,E)=>{for(var a in E)o(r,a,{get:E[a],enumerable:!0})},A=(r,E,a,t)=>{if(E&&typeof E=="object"||typeof E=="function")for(let s of _(E))!u.call(r,s)&&s!==a&&o(r,s,{get:()=>E[s],enumerable:!(t=c(E,s))||t.enumerable});return r};var n=r=>A(o({},"__esModule",{value:!0}),r);var T={};O(T,{ClearSignContextType:()=>N});module.exports=n(T);var N=(e=>(e.ERROR="error",e.CONCORDIUM_ACCOUNT_OWNERSHIP="concordiumAccountOwnership",e.ETHEREUM_TOKEN="ethereumToken",e.ETHEREUM_NFT="ethereumNft",e.ETHEREUM_TRUSTED_NAME="ethereumTrustedName",e.ETHEREUM_PLUGIN="ethereumPlugin",e.ETHEREUM_EXTERNAL_PLUGIN="ethereumExternalPlugin",e.ETHEREUM_TRANSACTION_INFO="ethereumTransactionInfo",e.ETHEREUM_PROXY_INFO="ethereumProxyInfo",e.ETHEREUM_ENUM="ethereumEnum",e.ETHEREUM_TRANSACTION_FIELD_DESCRIPTION="ethereumTransactionFieldDescription",e.ETHEREUM_TRANSACTION_CHECK="ethereumTransactionCheck",e.ETHEREUM_DYNAMIC_NETWORK="ethereumDynamicNetwork",e.ETHEREUM_DYNAMIC_NETWORK_ICON="ethereumDynamicNetworkIcon",e.ETHEREUM_SAFE="ethereumSafe",e.ETHEREUM_SIGNER="ethereumSigner",e.ETHEREUM_GATED_SIGNING="ethereumGatedSigning",e.SOLANA_TOKEN="solanaToken",e.SOLANA_LIFI="solanaLifi",e.SOLANA_TRUSTED_NAME="solanaTrustedName",e.SOLANA_BASIC_TRUSTED_NAME="solanaBasicTrustedName",e.SOLANA_TRANSACTION_CHECK="solanaTransactionCheck",e.SOLANA_INSTRUCTION_INFO="solanaInstructionInfo",e.SOLANA_ENUM_VARIANT="solanaEnumVariant",e.SOLANA_TOKEN_INFO="solanaTokenInfo",e.SOLANA_TOKEN_ACCOUNT_STATE="solanaTokenAccountState",e.SOLANA_ALT_RESOLUTION="solanaAltResolution",e))(N||{});0&&(module.exports={ClearSignContextType});
|
|
2
2
|
//# sourceMappingURL=ClearSignContext.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/shared/model/ClearSignContext.ts"],
|
|
4
|
-
"sourcesContent": ["import { type EthereumPayloadOverrides } from \"@/modules/ethereum/model/EthereumClearSignContext\";\nimport { type PkiCertificate } from \"@/modules/multichain/pki/model/PkiCertificate\";\nimport { type SolanaPayloadOverrides } from \"@/modules/solana/model/SolanaClearSignContext\";\n\nexport enum ClearSignContextType {\n ERROR = \"error\",\n CONCORDIUM_ACCOUNT_OWNERSHIP = \"concordiumAccountOwnership\",\n ETHEREUM_TOKEN = \"ethereumToken\",\n ETHEREUM_NFT = \"ethereumNft\",\n ETHEREUM_TRUSTED_NAME = \"ethereumTrustedName\",\n ETHEREUM_PLUGIN = \"ethereumPlugin\",\n ETHEREUM_EXTERNAL_PLUGIN = \"ethereumExternalPlugin\",\n ETHEREUM_TRANSACTION_INFO = \"ethereumTransactionInfo\",\n ETHEREUM_PROXY_INFO = \"ethereumProxyInfo\",\n ETHEREUM_ENUM = \"ethereumEnum\",\n ETHEREUM_TRANSACTION_FIELD_DESCRIPTION = \"ethereumTransactionFieldDescription\",\n ETHEREUM_TRANSACTION_CHECK = \"ethereumTransactionCheck\",\n ETHEREUM_DYNAMIC_NETWORK = \"ethereumDynamicNetwork\",\n ETHEREUM_DYNAMIC_NETWORK_ICON = \"ethereumDynamicNetworkIcon\",\n ETHEREUM_SAFE = \"ethereumSafe\",\n ETHEREUM_SIGNER = \"ethereumSigner\",\n ETHEREUM_GATED_SIGNING = \"ethereumGatedSigning\",\n SOLANA_TOKEN = \"solanaToken\",\n SOLANA_LIFI = \"solanaLifi\",\n SOLANA_TRUSTED_NAME = \"solanaTrustedName\",\n SOLANA_TRANSACTION_CHECK = \"solanaTransactionCheck\",\n}\n\nexport type ClearSignContextSuccessType = Exclude<\n ClearSignContextType,\n ClearSignContextType.ERROR\n>;\n\n/**\n * Base payload shape shared by every success context. Chain modules extend\n * this via PayloadOverrides for variants that carry typed payloads.\n */\nexport type ClearSignContextSuccessBase = {\n payload: string;\n certificate?: PkiCertificate;\n};\n\ntype ClearSignContextSuccessPayloadsBase = {\n [K in ClearSignContextSuccessType]: ClearSignContextSuccessBase;\n};\n\n// Chain modules contribute typed-payload overrides. This file is the\n// integration boundary that assembles them into the cross-chain union.\ntype ClearSignContextSuccessPayloadOverrides = EthereumPayloadOverrides &\n SolanaPayloadOverrides;\n\ntype ClearSignContextSuccessPayloads = Omit<\n ClearSignContextSuccessPayloadsBase,\n keyof ClearSignContextSuccessPayloadOverrides\n> &\n ClearSignContextSuccessPayloadOverrides;\n\nexport type ClearSignContextSuccess<\n T extends ClearSignContextSuccessType = ClearSignContextSuccessType,\n> = T extends ClearSignContextSuccessType\n ? { type: T } & ClearSignContextSuccessPayloads[T]\n : never;\n\nexport type ClearSignContextError = {\n type: ClearSignContextType.ERROR;\n error: Error;\n};\n\nexport type ClearSignContext = ClearSignContextSuccess | ClearSignContextError;\n"],
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,0BAAAE,IAAA,eAAAC,EAAAH,GAIO,IAAKE,OACVA,EAAA,MAAQ,QACRA,EAAA,6BAA+B,6BAC/BA,EAAA,eAAiB,gBACjBA,EAAA,aAAe,cACfA,EAAA,sBAAwB,sBACxBA,EAAA,gBAAkB,iBAClBA,EAAA,yBAA2B,yBAC3BA,EAAA,0BAA4B,0BAC5BA,EAAA,oBAAsB,oBACtBA,EAAA,cAAgB,eAChBA,EAAA,uCAAyC,sCACzCA,EAAA,2BAA6B,2BAC7BA,EAAA,yBAA2B,yBAC3BA,EAAA,8BAAgC,6BAChCA,EAAA,cAAgB,eAChBA,EAAA,gBAAkB,iBAClBA,EAAA,uBAAyB,uBACzBA,EAAA,aAAe,cACfA,EAAA,YAAc,aACdA,EAAA,oBAAsB,oBACtBA,EAAA,yBAA2B,
|
|
4
|
+
"sourcesContent": ["import { type EthereumPayloadOverrides } from \"@/modules/ethereum/model/EthereumClearSignContext\";\nimport { type PkiCertificate } from \"@/modules/multichain/pki/model/PkiCertificate\";\nimport { type SolanaPayloadOverrides } from \"@/modules/solana/model/SolanaClearSignContext\";\n\nexport enum ClearSignContextType {\n ERROR = \"error\",\n CONCORDIUM_ACCOUNT_OWNERSHIP = \"concordiumAccountOwnership\",\n ETHEREUM_TOKEN = \"ethereumToken\",\n ETHEREUM_NFT = \"ethereumNft\",\n ETHEREUM_TRUSTED_NAME = \"ethereumTrustedName\",\n ETHEREUM_PLUGIN = \"ethereumPlugin\",\n ETHEREUM_EXTERNAL_PLUGIN = \"ethereumExternalPlugin\",\n ETHEREUM_TRANSACTION_INFO = \"ethereumTransactionInfo\",\n ETHEREUM_PROXY_INFO = \"ethereumProxyInfo\",\n ETHEREUM_ENUM = \"ethereumEnum\",\n ETHEREUM_TRANSACTION_FIELD_DESCRIPTION = \"ethereumTransactionFieldDescription\",\n ETHEREUM_TRANSACTION_CHECK = \"ethereumTransactionCheck\",\n ETHEREUM_DYNAMIC_NETWORK = \"ethereumDynamicNetwork\",\n ETHEREUM_DYNAMIC_NETWORK_ICON = \"ethereumDynamicNetworkIcon\",\n ETHEREUM_SAFE = \"ethereumSafe\",\n ETHEREUM_SIGNER = \"ethereumSigner\",\n ETHEREUM_GATED_SIGNING = \"ethereumGatedSigning\",\n SOLANA_TOKEN = \"solanaToken\",\n SOLANA_LIFI = \"solanaLifi\",\n SOLANA_TRUSTED_NAME = \"solanaTrustedName\",\n SOLANA_BASIC_TRUSTED_NAME = \"solanaBasicTrustedName\",\n SOLANA_TRANSACTION_CHECK = \"solanaTransactionCheck\",\n SOLANA_INSTRUCTION_INFO = \"solanaInstructionInfo\",\n SOLANA_ENUM_VARIANT = \"solanaEnumVariant\",\n SOLANA_TOKEN_INFO = \"solanaTokenInfo\",\n SOLANA_TOKEN_ACCOUNT_STATE = \"solanaTokenAccountState\",\n SOLANA_ALT_RESOLUTION = \"solanaAltResolution\",\n}\n\nexport type ClearSignContextSuccessType = Exclude<\n ClearSignContextType,\n ClearSignContextType.ERROR\n>;\n\n/**\n * Base payload shape shared by every success context. Chain modules extend\n * this via PayloadOverrides for variants that carry typed payloads.\n */\nexport type ClearSignContextSuccessBase = {\n payload: string;\n certificate?: PkiCertificate;\n};\n\ntype ClearSignContextSuccessPayloadsBase = {\n [K in ClearSignContextSuccessType]: ClearSignContextSuccessBase;\n};\n\n// Chain modules contribute typed-payload overrides. This file is the\n// integration boundary that assembles them into the cross-chain union.\ntype ClearSignContextSuccessPayloadOverrides = EthereumPayloadOverrides &\n SolanaPayloadOverrides;\n\ntype ClearSignContextSuccessPayloads = Omit<\n ClearSignContextSuccessPayloadsBase,\n keyof ClearSignContextSuccessPayloadOverrides\n> &\n ClearSignContextSuccessPayloadOverrides;\n\nexport type ClearSignContextSuccess<\n T extends ClearSignContextSuccessType = ClearSignContextSuccessType,\n> = T extends ClearSignContextSuccessType\n ? { type: T } & ClearSignContextSuccessPayloads[T]\n : never;\n\nexport type ClearSignContextError = {\n type: ClearSignContextType.ERROR;\n error: Error;\n};\n\nexport type ClearSignContext = ClearSignContextSuccess | ClearSignContextError;\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,0BAAAE,IAAA,eAAAC,EAAAH,GAIO,IAAKE,OACVA,EAAA,MAAQ,QACRA,EAAA,6BAA+B,6BAC/BA,EAAA,eAAiB,gBACjBA,EAAA,aAAe,cACfA,EAAA,sBAAwB,sBACxBA,EAAA,gBAAkB,iBAClBA,EAAA,yBAA2B,yBAC3BA,EAAA,0BAA4B,0BAC5BA,EAAA,oBAAsB,oBACtBA,EAAA,cAAgB,eAChBA,EAAA,uCAAyC,sCACzCA,EAAA,2BAA6B,2BAC7BA,EAAA,yBAA2B,yBAC3BA,EAAA,8BAAgC,6BAChCA,EAAA,cAAgB,eAChBA,EAAA,gBAAkB,iBAClBA,EAAA,uBAAyB,uBACzBA,EAAA,aAAe,cACfA,EAAA,YAAc,aACdA,EAAA,oBAAsB,oBACtBA,EAAA,0BAA4B,yBAC5BA,EAAA,yBAA2B,yBAC3BA,EAAA,wBAA0B,wBAC1BA,EAAA,oBAAsB,oBACtBA,EAAA,kBAAoB,kBACpBA,EAAA,2BAA6B,0BAC7BA,EAAA,sBAAwB,sBA3BdA,OAAA",
|
|
6
6
|
"names": ["ClearSignContext_exports", "__export", "ClearSignContextType", "__toCommonJS"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var s=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var o=Object.getOwnPropertyNames;var h=Object.prototype.hasOwnProperty;var l=(i,r)=>{for(var t in r)s(i,t,{get:r[t],enumerable:!0})},a=(i,r,t,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let e of o(r))!h.call(i,e)&&e!==t&&s(i,e,{get:()=>r[e],enumerable:!(n=g(r,e))||n.enumerable});return i};var x=i=>a(s({},"__esModule",{value:!0}),i);var S={};l(S,{HexStringUtils:()=>c});module.exports=x(S);class c{static hexToBytes(r){const t=r.startsWith("0x")||r.startsWith("0X")?r.slice(2):r;if(t.length===0)throw new Error("HexStringUtils.hexToBytes: empty hex string");if(t.length%2!==0)throw new Error(`HexStringUtils.hexToBytes: odd-length hex string (${t.length})`);if(!/^[0-9a-fA-F]+$/.test(t))throw new Error("HexStringUtils.hexToBytes: non-hex characters");const n=new Uint8Array(t.length/2);for(let e=0;e<n.length;e++)n[e]=Number.parseInt(t.slice(e*2,e*2+2),16);return n}static stringToHex(r){let t="";for(let n=0;n<r.length;n++){const e=r.charCodeAt(n).toString(16);t+=e.padStart(2,"0")}return t}static appendSignatureToPayload(r,t,n){t.length%2!==0&&(t="0"+t);let e=(t.length/2).toString(16);return e.length%2!==0&&(e="0"+e),`${r}${n}${e}${t}`}}0&&(module.exports={HexStringUtils});
|
|
2
2
|
//# sourceMappingURL=HexStringUtils.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/shared/utils/HexStringUtils.ts"],
|
|
4
|
-
"sourcesContent": ["export class HexStringUtils {\n static stringToHex(str: string): string {\n let hexString = \"\";\n for (let i = 0; i < str.length; i++) {\n const hex = str.charCodeAt(i).toString(16);\n hexString += hex.padStart(2, \"0\"); // Ensure each hex code is at least 2 characters long\n }\n return hexString;\n }\n\n static appendSignatureToPayload(\n payload: string,\n signature: string,\n tag: string,\n ): string {\n // Ensure correct padding\n if (signature.length % 2 !== 0) {\n signature = \"0\" + signature;\n }\n // TLV encoding as according to trusted name documentation\n let signatureLength = (signature.length / 2).toString(16);\n if (signatureLength.length % 2 !== 0) {\n signatureLength = \"0\" + signatureLength;\n }\n\n return `${payload}${tag}${signatureLength}${signature}`;\n }\n}\n"],
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,oBAAAE,IAAA,eAAAC,EAAAH,GAAO,MAAME,CAAe,
|
|
6
|
-
"names": ["HexStringUtils_exports", "__export", "HexStringUtils", "__toCommonJS", "
|
|
4
|
+
"sourcesContent": ["export class HexStringUtils {\n /**\n * Decode a non-empty even-length hex string (with optional `0x` prefix)\n * into a Uint8Array. Throws on empty input, odd length, or non-hex\n * characters \u2014 the empty case is rejected explicitly so callers can't\n * silently produce a zero-length descriptor.\n */\n static hexToBytes(hex: string): Uint8Array {\n const s = hex.startsWith(\"0x\") || hex.startsWith(\"0X\") ? hex.slice(2) : hex;\n if (s.length === 0) {\n throw new Error(\"HexStringUtils.hexToBytes: empty hex string\");\n }\n if (s.length % 2 !== 0) {\n throw new Error(\n `HexStringUtils.hexToBytes: odd-length hex string (${s.length})`,\n );\n }\n if (!/^[0-9a-fA-F]+$/.test(s)) {\n throw new Error(\"HexStringUtils.hexToBytes: non-hex characters\");\n }\n const out = new Uint8Array(s.length / 2);\n for (let i = 0; i < out.length; i++) {\n out[i] = Number.parseInt(s.slice(i * 2, i * 2 + 2), 16);\n }\n return out;\n }\n\n static stringToHex(str: string): string {\n let hexString = \"\";\n for (let i = 0; i < str.length; i++) {\n const hex = str.charCodeAt(i).toString(16);\n hexString += hex.padStart(2, \"0\"); // Ensure each hex code is at least 2 characters long\n }\n return hexString;\n }\n\n static appendSignatureToPayload(\n payload: string,\n signature: string,\n tag: string,\n ): string {\n // Ensure correct padding\n if (signature.length % 2 !== 0) {\n signature = \"0\" + signature;\n }\n // TLV encoding as according to trusted name documentation\n let signatureLength = (signature.length / 2).toString(16);\n if (signatureLength.length % 2 !== 0) {\n signatureLength = \"0\" + signatureLength;\n }\n\n return `${payload}${tag}${signatureLength}${signature}`;\n }\n}\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,oBAAAE,IAAA,eAAAC,EAAAH,GAAO,MAAME,CAAe,CAO1B,OAAO,WAAWE,EAAyB,CACzC,MAAMC,EAAID,EAAI,WAAW,IAAI,GAAKA,EAAI,WAAW,IAAI,EAAIA,EAAI,MAAM,CAAC,EAAIA,EACxE,GAAIC,EAAE,SAAW,EACf,MAAM,IAAI,MAAM,6CAA6C,EAE/D,GAAIA,EAAE,OAAS,IAAM,EACnB,MAAM,IAAI,MACR,qDAAqDA,EAAE,MAAM,GAC/D,EAEF,GAAI,CAAC,iBAAiB,KAAKA,CAAC,EAC1B,MAAM,IAAI,MAAM,+CAA+C,EAEjE,MAAMC,EAAM,IAAI,WAAWD,EAAE,OAAS,CAAC,EACvC,QAASE,EAAI,EAAGA,EAAID,EAAI,OAAQC,IAC9BD,EAAIC,CAAC,EAAI,OAAO,SAASF,EAAE,MAAME,EAAI,EAAGA,EAAI,EAAI,CAAC,EAAG,EAAE,EAExD,OAAOD,CACT,CAEA,OAAO,YAAYE,EAAqB,CACtC,IAAIC,EAAY,GAChB,QAASF,EAAI,EAAGA,EAAIC,EAAI,OAAQD,IAAK,CACnC,MAAMH,EAAMI,EAAI,WAAWD,CAAC,EAAE,SAAS,EAAE,EACzCE,GAAaL,EAAI,SAAS,EAAG,GAAG,CAClC,CACA,OAAOK,CACT,CAEA,OAAO,yBACLC,EACAC,EACAC,EACQ,CAEJD,EAAU,OAAS,IAAM,IAC3BA,EAAY,IAAMA,GAGpB,IAAIE,GAAmBF,EAAU,OAAS,GAAG,SAAS,EAAE,EACxD,OAAIE,EAAgB,OAAS,IAAM,IACjCA,EAAkB,IAAMA,GAGnB,GAAGH,CAAO,GAAGE,CAAG,GAAGC,CAAe,GAAGF,CAAS,EACvD,CACF",
|
|
6
|
+
"names": ["HexStringUtils_exports", "__export", "HexStringUtils", "__toCommonJS", "hex", "s", "out", "i", "str", "hexString", "payload", "signature", "tag", "signatureLength"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var t=require("../../shared/utils/HexStringUtils");describe("HexStringUtils",()=>{describe("appendSignatureToPayload",()=>{it("should append signature to payload",()=>{const s=t.HexStringUtils.appendSignatureToPayload("01020304","05060708","15");expect(s).toEqual("01020304150405060708")}),it("should append signature to payload with odd length",()=>{const s=t.HexStringUtils.appendSignatureToPayload("01020304","5060708","15");expect(s).toEqual("01020304150405060708")})}),describe("hexToBytes",()=>{it("decodes a plain hex string into Uint8Array",()=>{expect(t.HexStringUtils.hexToBytes("deadbeef")).toEqual(new Uint8Array([222,173,190,239]))}),it("strips a 0x prefix",()=>{expect(t.HexStringUtils.hexToBytes("0xCAFEBABE")).toEqual(new Uint8Array([202,254,186,190]))}),it("throws on the empty string",()=>{expect(()=>t.HexStringUtils.hexToBytes("")).toThrow(/empty hex string/)}),it("throws on a bare `0x` prefix with no payload",()=>{expect(()=>t.HexStringUtils.hexToBytes("0x")).toThrow(/empty hex string/)}),it("throws on odd-length input",()=>{expect(()=>t.HexStringUtils.hexToBytes("abc")).toThrow(/odd-length/)}),it("throws on non-hex characters",()=>{expect(()=>t.HexStringUtils.hexToBytes("zzzz")).toThrow(/non-hex/)})}),describe("stringToHex",()=>{it("should convert string to hex",()=>{const e=t.HexStringUtils.stringToHex("test");expect(e).toEqual("74657374")}),it("should convert string to hex with odd length",()=>{const e=t.HexStringUtils.stringToHex("test1");expect(e).toEqual("7465737431")})})});
|
|
2
2
|
//# sourceMappingURL=HexStringUtils.test.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/shared/utils/HexStringUtils.test.ts"],
|
|
4
|
-
"sourcesContent": ["import { HexStringUtils } from \"@/shared/utils/HexStringUtils\";\n\ndescribe(\"HexStringUtils\", () => {\n describe(\"appendSignatureToPayload\", () => {\n it(\"should append signature to payload\", () => {\n // GIVEN\n const payload = \"01020304\";\n const signature = \"05060708\";\n const tag = \"15\";\n // WHEN\n const result = HexStringUtils.appendSignatureToPayload(\n payload,\n signature,\n tag,\n );\n // THEN\n expect(result).toEqual(\"01020304150405060708\");\n });\n\n it(\"should append signature to payload with odd length\", () => {\n // GIVEN\n const payload = \"01020304\";\n const signature = \"5060708\";\n const tag = \"15\";\n // WHEN\n const result = HexStringUtils.appendSignatureToPayload(\n payload,\n signature,\n tag,\n );\n // THEN\n expect(result).toEqual(\"01020304150405060708\");\n });\n });\n\n describe(\"stringToHex\", () => {\n it(\"should convert string to hex\", () => {\n // GIVEN\n const str = \"test\";\n // WHEN\n const result = HexStringUtils.stringToHex(str);\n // THEN\n expect(result).toEqual(\"74657374\");\n });\n\n it(\"should convert string to hex with odd length\", () => {\n // GIVEN\n const str = \"test1\";\n // WHEN\n const result = HexStringUtils.stringToHex(str);\n // THEN\n expect(result).toEqual(\"7465737431\");\n });\n });\n});\n"],
|
|
5
|
-
"mappings": "aAAA,IAAAA,EAA+B,yCAE/B,SAAS,iBAAkB,IAAM,CAC/B,SAAS,2BAA4B,IAAM,CACzC,GAAG,qCAAsC,IAAM,CAM7C,MAAMC,EAAS,iBAAe,yBAJd,WACE,WACN,IAMZ,EAEA,OAAOA,CAAM,EAAE,QAAQ,sBAAsB,CAC/C,CAAC,EAED,GAAG,qDAAsD,IAAM,CAM7D,MAAMA,EAAS,iBAAe,yBAJd,WACE,UACN,IAMZ,EAEA,OAAOA,CAAM,EAAE,QAAQ,sBAAsB,CAC/C,CAAC,CACH,CAAC,EAED,SAAS,cAAe,IAAM,CAC5B,GAAG,+BAAgC,IAAM,CAIvC,MAAMA,EAAS,iBAAe,YAFlB,MAEiC,EAE7C,OAAOA,CAAM,EAAE,QAAQ,UAAU,CACnC,CAAC,EAED,GAAG,+CAAgD,IAAM,CAIvD,MAAMA,EAAS,iBAAe,YAFlB,OAEiC,EAE7C,OAAOA,CAAM,EAAE,QAAQ,YAAY,CACrC,CAAC,CACH,CAAC,CACH,CAAC",
|
|
4
|
+
"sourcesContent": ["import { HexStringUtils } from \"@/shared/utils/HexStringUtils\";\n\ndescribe(\"HexStringUtils\", () => {\n describe(\"appendSignatureToPayload\", () => {\n it(\"should append signature to payload\", () => {\n // GIVEN\n const payload = \"01020304\";\n const signature = \"05060708\";\n const tag = \"15\";\n // WHEN\n const result = HexStringUtils.appendSignatureToPayload(\n payload,\n signature,\n tag,\n );\n // THEN\n expect(result).toEqual(\"01020304150405060708\");\n });\n\n it(\"should append signature to payload with odd length\", () => {\n // GIVEN\n const payload = \"01020304\";\n const signature = \"5060708\";\n const tag = \"15\";\n // WHEN\n const result = HexStringUtils.appendSignatureToPayload(\n payload,\n signature,\n tag,\n );\n // THEN\n expect(result).toEqual(\"01020304150405060708\");\n });\n });\n\n describe(\"hexToBytes\", () => {\n it(\"decodes a plain hex string into Uint8Array\", () => {\n expect(HexStringUtils.hexToBytes(\"deadbeef\")).toEqual(\n new Uint8Array([0xde, 0xad, 0xbe, 0xef]),\n );\n });\n\n it(\"strips a 0x prefix\", () => {\n expect(HexStringUtils.hexToBytes(\"0xCAFEBABE\")).toEqual(\n new Uint8Array([0xca, 0xfe, 0xba, 0xbe]),\n );\n });\n\n it(\"throws on the empty string\", () => {\n expect(() => HexStringUtils.hexToBytes(\"\")).toThrow(/empty hex string/);\n });\n\n it(\"throws on a bare `0x` prefix with no payload\", () => {\n expect(() => HexStringUtils.hexToBytes(\"0x\")).toThrow(/empty hex string/);\n });\n\n it(\"throws on odd-length input\", () => {\n expect(() => HexStringUtils.hexToBytes(\"abc\")).toThrow(/odd-length/);\n });\n\n it(\"throws on non-hex characters\", () => {\n expect(() => HexStringUtils.hexToBytes(\"zzzz\")).toThrow(/non-hex/);\n });\n });\n\n describe(\"stringToHex\", () => {\n it(\"should convert string to hex\", () => {\n // GIVEN\n const str = \"test\";\n // WHEN\n const result = HexStringUtils.stringToHex(str);\n // THEN\n expect(result).toEqual(\"74657374\");\n });\n\n it(\"should convert string to hex with odd length\", () => {\n // GIVEN\n const str = \"test1\";\n // WHEN\n const result = HexStringUtils.stringToHex(str);\n // THEN\n expect(result).toEqual(\"7465737431\");\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "aAAA,IAAAA,EAA+B,yCAE/B,SAAS,iBAAkB,IAAM,CAC/B,SAAS,2BAA4B,IAAM,CACzC,GAAG,qCAAsC,IAAM,CAM7C,MAAMC,EAAS,iBAAe,yBAJd,WACE,WACN,IAMZ,EAEA,OAAOA,CAAM,EAAE,QAAQ,sBAAsB,CAC/C,CAAC,EAED,GAAG,qDAAsD,IAAM,CAM7D,MAAMA,EAAS,iBAAe,yBAJd,WACE,UACN,IAMZ,EAEA,OAAOA,CAAM,EAAE,QAAQ,sBAAsB,CAC/C,CAAC,CACH,CAAC,EAED,SAAS,aAAc,IAAM,CAC3B,GAAG,6CAA8C,IAAM,CACrD,OAAO,iBAAe,WAAW,UAAU,CAAC,EAAE,QAC5C,IAAI,WAAW,CAAC,IAAM,IAAM,IAAM,GAAI,CAAC,CACzC,CACF,CAAC,EAED,GAAG,qBAAsB,IAAM,CAC7B,OAAO,iBAAe,WAAW,YAAY,CAAC,EAAE,QAC9C,IAAI,WAAW,CAAC,IAAM,IAAM,IAAM,GAAI,CAAC,CACzC,CACF,CAAC,EAED,GAAG,6BAA8B,IAAM,CACrC,OAAO,IAAM,iBAAe,WAAW,EAAE,CAAC,EAAE,QAAQ,kBAAkB,CACxE,CAAC,EAED,GAAG,+CAAgD,IAAM,CACvD,OAAO,IAAM,iBAAe,WAAW,IAAI,CAAC,EAAE,QAAQ,kBAAkB,CAC1E,CAAC,EAED,GAAG,6BAA8B,IAAM,CACrC,OAAO,IAAM,iBAAe,WAAW,KAAK,CAAC,EAAE,QAAQ,YAAY,CACrE,CAAC,EAED,GAAG,+BAAgC,IAAM,CACvC,OAAO,IAAM,iBAAe,WAAW,MAAM,CAAC,EAAE,QAAQ,SAAS,CACnE,CAAC,CACH,CAAC,EAED,SAAS,cAAe,IAAM,CAC5B,GAAG,+BAAgC,IAAM,CAIvC,MAAMA,EAAS,iBAAe,YAFlB,MAEiC,EAE7C,OAAOA,CAAM,EAAE,QAAQ,UAAU,CACnC,CAAC,EAED,GAAG,+CAAgD,IAAM,CAIvD,MAAMA,EAAS,iBAAe,YAFlB,OAEiC,EAE7C,OAAOA,CAAM,EAAE,QAAQ,YAAY,CACrC,CAAC,CACH,CAAC,CACH,CAAC",
|
|
6
6
|
"names": ["import_HexStringUtils", "result"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var c=Object.defineProperty;var C=Object.getOwnPropertyDescriptor;var n=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var s=(t,e)=>{for(var r in e)c(t,r,{get:e[r],enumerable:!0})},d=(t,e,r,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of n(e))!p.call(t,i)&&i!==r&&c(t,i,{get:()=>e[i],enumerable:!(a=C(e,i))||a.enumerable});return t};var L=t=>d(c({},"__esModule",{value:!0}),t);var k={};s(k,{makeCertificateCache:()=>u});module.exports=L(k);function u(t,e){const r=new Map;return(a,i)=>{const f=`${a}::${i}`;let o=r.get(f);return o||(o=t.loadCertificate({keyId:a,keyUsage:i,targetDevice:e}),r.set(f,o)),o}}0&&(module.exports={makeCertificateCache});
|
|
2
|
+
//# sourceMappingURL=certificateCache.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/shared/utils/certificateCache.ts"],
|
|
4
|
+
"sourcesContent": ["import { type PkiCertificateLoader } from \"@/modules/multichain/pki/domain/PkiCertificateLoader\";\n\ntype LoadCertificate = PkiCertificateLoader[\"loadCertificate\"];\ntype LoadCertificateResult = ReturnType<LoadCertificate>;\ntype CertificateLookup = (\n keyId: string,\n keyUsage: string,\n) => LoadCertificateResult;\n\n/**\n * Builds a per-batch certificate-loader memoiser. Returns a `(keyId,\n * keyUsage) => Promise<Certificate | undefined>` function that issues\n * `loadCertificate` once per distinct `(keyId, keyUsage)` pair and\n * returns the cached promise for every subsequent caller in the same\n * batch.\n *\n * Use when a single `load()` call fans out N requests whose backend\n * responses report `(keyId, keyUsage)` independently but, in the common\n * case, all reference the same PKI root \u2014 issuing N parallel duplicate\n * cert loads would waste cycles and bandwidth.\n *\n * The returned cache is intentionally short-lived: scope it to one\n * loader invocation, then drop it. Cross-invocation caching is a\n * different concern handled (or not) elsewhere.\n */\nexport function makeCertificateCache(\n certificateLoader: PkiCertificateLoader,\n targetDevice: string,\n): CertificateLookup {\n const cache = new Map<string, LoadCertificateResult>();\n return (keyId, keyUsage) => {\n const key = `${keyId}::${keyUsage}`;\n let promise = cache.get(key);\n if (!promise) {\n promise = certificateLoader.loadCertificate({\n keyId,\n keyUsage,\n targetDevice,\n });\n cache.set(key, promise);\n }\n return promise;\n };\n}\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,0BAAAE,IAAA,eAAAC,EAAAH,GAyBO,SAASE,EACdE,EACAC,EACmB,CACnB,MAAMC,EAAQ,IAAI,IAClB,MAAO,CAACC,EAAOC,IAAa,CAC1B,MAAMC,EAAM,GAAGF,CAAK,KAAKC,CAAQ,GACjC,IAAIE,EAAUJ,EAAM,IAAIG,CAAG,EAC3B,OAAKC,IACHA,EAAUN,EAAkB,gBAAgB,CAC1C,MAAAG,EACA,SAAAC,EACA,aAAAH,CACF,CAAC,EACDC,EAAM,IAAIG,EAAKC,CAAO,GAEjBA,CACT,CACF",
|
|
6
|
+
"names": ["certificateCache_exports", "__export", "makeCertificateCache", "__toCommonJS", "certificateLoader", "targetDevice", "cache", "keyId", "keyUsage", "key", "promise"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var e=require("vitest"),i=require("./certificateCache");(0,e.describe)("makeCertificateCache",()=>{let t;(0,e.beforeEach)(()=>{t={loadCertificate:e.vi.fn().mockResolvedValue({keyUsageNumber:8,payload:new Uint8Array([1])})}}),(0,e.it)("calls loadCertificate once for repeated (keyId, keyUsage)",async()=>{const a=(0,i.makeCertificateCache)(t,"nanoX");await Promise.all([a("k1","coin_meta"),a("k1","coin_meta"),a("k1","coin_meta")]),(0,e.expect)(t.loadCertificate).toHaveBeenCalledTimes(1),(0,e.expect)(t.loadCertificate).toHaveBeenCalledWith({keyId:"k1",keyUsage:"coin_meta",targetDevice:"nanoX"})}),(0,e.it)("issues distinct calls per distinct (keyId, keyUsage)",async()=>{const a=(0,i.makeCertificateCache)(t,"nanoX");await Promise.all([a("k1","coin_meta"),a("k2","coin_meta"),a("k1","trusted_name")]),(0,e.expect)(t.loadCertificate).toHaveBeenCalledTimes(3)}),(0,e.it)("returns the same promise instance for the same key",()=>{const a=(0,i.makeCertificateCache)(t,"nanoX"),o=a("k1","coin_meta"),c=a("k1","coin_meta");(0,e.expect)(o).toBe(c)})});
|
|
2
|
+
//# sourceMappingURL=certificateCache.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/shared/utils/certificateCache.test.ts"],
|
|
4
|
+
"sourcesContent": ["import { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { type PkiCertificateLoader } from \"@/modules/multichain/pki/domain/PkiCertificateLoader\";\n\nimport { makeCertificateCache } from \"./certificateCache\";\n\ndescribe(\"makeCertificateCache\", () => {\n let loader: PkiCertificateLoader;\n\n beforeEach(() => {\n loader = {\n loadCertificate: vi\n .fn()\n .mockResolvedValue({ keyUsageNumber: 8, payload: new Uint8Array([1]) }),\n };\n });\n\n it(\"calls loadCertificate once for repeated (keyId, keyUsage)\", async () => {\n const getCert = makeCertificateCache(loader, \"nanoX\");\n\n await Promise.all([\n getCert(\"k1\", \"coin_meta\"),\n getCert(\"k1\", \"coin_meta\"),\n getCert(\"k1\", \"coin_meta\"),\n ]);\n\n expect(loader.loadCertificate).toHaveBeenCalledTimes(1);\n expect(loader.loadCertificate).toHaveBeenCalledWith({\n keyId: \"k1\",\n keyUsage: \"coin_meta\",\n targetDevice: \"nanoX\",\n });\n });\n\n it(\"issues distinct calls per distinct (keyId, keyUsage)\", async () => {\n const getCert = makeCertificateCache(loader, \"nanoX\");\n\n await Promise.all([\n getCert(\"k1\", \"coin_meta\"),\n getCert(\"k2\", \"coin_meta\"),\n getCert(\"k1\", \"trusted_name\"),\n ]);\n\n expect(loader.loadCertificate).toHaveBeenCalledTimes(3);\n });\n\n it(\"returns the same promise instance for the same key\", () => {\n const getCert = makeCertificateCache(loader, \"nanoX\");\n const a = getCert(\"k1\", \"coin_meta\");\n const b = getCert(\"k1\", \"coin_meta\");\n expect(a).toBe(b);\n });\n});\n"],
|
|
5
|
+
"mappings": "aAAA,IAAAA,EAAqD,kBAIrDC,EAAqC,iCAErC,YAAS,uBAAwB,IAAM,CACrC,IAAIC,KAEJ,cAAW,IAAM,CACfA,EAAS,CACP,gBAAiB,KACd,GAAG,EACH,kBAAkB,CAAE,eAAgB,EAAG,QAAS,IAAI,WAAW,CAAC,CAAC,CAAC,CAAE,CAAC,CAC1E,CACF,CAAC,KAED,MAAG,4DAA6D,SAAY,CAC1E,MAAMC,KAAU,wBAAqBD,EAAQ,OAAO,EAEpD,MAAM,QAAQ,IAAI,CAChBC,EAAQ,KAAM,WAAW,EACzBA,EAAQ,KAAM,WAAW,EACzBA,EAAQ,KAAM,WAAW,CAC3B,CAAC,KAED,UAAOD,EAAO,eAAe,EAAE,sBAAsB,CAAC,KACtD,UAAOA,EAAO,eAAe,EAAE,qBAAqB,CAClD,MAAO,KACP,SAAU,YACV,aAAc,OAChB,CAAC,CACH,CAAC,KAED,MAAG,uDAAwD,SAAY,CACrE,MAAMC,KAAU,wBAAqBD,EAAQ,OAAO,EAEpD,MAAM,QAAQ,IAAI,CAChBC,EAAQ,KAAM,WAAW,EACzBA,EAAQ,KAAM,WAAW,EACzBA,EAAQ,KAAM,cAAc,CAC9B,CAAC,KAED,UAAOD,EAAO,eAAe,EAAE,sBAAsB,CAAC,CACxD,CAAC,KAED,MAAG,qDAAsD,IAAM,CAC7D,MAAMC,KAAU,wBAAqBD,EAAQ,OAAO,EAC9CE,EAAID,EAAQ,KAAM,WAAW,EAC7BE,EAAIF,EAAQ,KAAM,WAAW,KACnC,UAAOC,CAAC,EAAE,KAAKC,CAAC,CAClB,CAAC,CACH,CAAC",
|
|
6
|
+
"names": ["import_vitest", "import_certificateCache", "loader", "getCert", "a", "b"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var f=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var n=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var u=(i,t)=>{for(var e in t)f(i,e,{get:t[e],enumerable:!0})},C=(i,t,e,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of n(t))!c.call(i,r)&&r!==e&&f(i,r,{get:()=>t[r],enumerable:!(o=a(t,r))||o.enumerable});return i};var k=i=>C(f({},"__esModule",{value:!0}),i);var l={};u(l,{loadCertificateResult:()=>s});module.exports=k(l);function s(i,t){return i.loadCertificate(t).then(e=>({ok:!0,value:e}),e=>({ok:!1,error:e instanceof Error?e:new Error(typeof e=="string"?e:JSON.stringify(e))}))}0&&(module.exports={loadCertificateResult});
|
|
2
|
+
//# sourceMappingURL=certificateResult.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/shared/utils/certificateResult.ts"],
|
|
4
|
+
"sourcesContent": ["import { type PkiCertificateLoader } from \"@/modules/multichain/pki/domain/PkiCertificateLoader\";\nimport { type PkiCertificate } from \"@/modules/multichain/pki/model/PkiCertificate\";\nimport { type PkiCertificateInfo } from \"@/modules/multichain/pki/model/PkiCertificateInfo\";\n\n/**\n * Tagged result of a certificate load attempt. Mirrors the\n * `Promise.allSettled`-style pattern but stays inside a single Promise\n * so callers can `Promise.all([certPromise, dataPromise])` to\n * parallelise cert + data fetches without one path's rejection tanking\n * the other.\n */\nexport type CertificateResult =\n | { ok: true; value: PkiCertificate | undefined }\n | { ok: false; error: Error };\n\n/**\n * Wrap a `loadCertificate` call into a non-rejecting promise so it can\n * be awaited alongside a parallel data fetch via `Promise.all`. A\n * thrown error is normalised into a tagged `{ ok: false }` Result;\n * caller decides how to surface it (typically: one ERROR\n * ClearSignContext per request in the batch).\n */\nexport function loadCertificateResult(\n certificateLoader: PkiCertificateLoader,\n params: PkiCertificateInfo,\n): Promise<CertificateResult> {\n return certificateLoader.loadCertificate(params).then(\n (value): CertificateResult => ({ ok: true, value }),\n (error: unknown): CertificateResult => ({\n ok: false,\n error:\n error instanceof Error\n ? error\n : new Error(\n typeof error === \"string\" ? error : JSON.stringify(error),\n ),\n }),\n );\n}\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,2BAAAE,IAAA,eAAAC,EAAAH,GAsBO,SAASE,EACdE,EACAC,EAC4B,CAC5B,OAAOD,EAAkB,gBAAgBC,CAAM,EAAE,KAC9CC,IAA8B,CAAE,GAAI,GAAM,MAAAA,CAAM,GAChDC,IAAuC,CACtC,GAAI,GACJ,MACEA,aAAiB,MACbA,EACA,IAAI,MACF,OAAOA,GAAU,SAAWA,EAAQ,KAAK,UAAUA,CAAK,CAC1D,CACR,EACF,CACF",
|
|
6
|
+
"names": ["certificateResult_exports", "__export", "loadCertificateResult", "__toCommonJS", "certificateLoader", "params", "value", "error"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var e=require("vitest"),o=require("./certificateResult");(0,e.describe)("loadCertificateResult",()=>{let t;(0,e.beforeEach)(()=>{t={loadCertificate:e.vi.fn()}}),(0,e.it)("returns { ok: true, value } on success",async()=>{const r={keyUsageNumber:8,payload:new Uint8Array([1])};e.vi.spyOn(t,"loadCertificate").mockResolvedValue(r);const a=await(0,o.loadCertificateResult)(t,{keyId:"k",keyUsage:"u",targetDevice:"nanoX"});(0,e.expect)(a).toEqual({ok:!0,value:r})}),(0,e.it)("returns { ok: true, value: undefined } when loader resolves undefined",async()=>{e.vi.spyOn(t,"loadCertificate").mockResolvedValue(void 0);const r=await(0,o.loadCertificateResult)(t,{keyId:"k",keyUsage:"u",targetDevice:"nanoX"});(0,e.expect)(r).toEqual({ok:!0,value:void 0})}),(0,e.it)("returns { ok: false, error } on rejection (no rethrow)",async()=>{e.vi.spyOn(t,"loadCertificate").mockRejectedValue(new Error("pki-down"));const r=await(0,o.loadCertificateResult)(t,{keyId:"k",keyUsage:"u",targetDevice:"nanoX"});(0,e.expect)(r).toEqual({ok:!1,error:new Error("pki-down")})}),(0,e.it)("wraps non-Error throws in Error",async()=>{e.vi.spyOn(t,"loadCertificate").mockRejectedValue("string-rejection");const r=await(0,o.loadCertificateResult)(t,{keyId:"k",keyUsage:"u",targetDevice:"nanoX"});(0,e.expect)(r.ok).toBe(!1),r.ok||((0,e.expect)(r.error).toBeInstanceOf(Error),(0,e.expect)(r.error.message).toBe("string-rejection"))})});
|
|
2
|
+
//# sourceMappingURL=certificateResult.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/shared/utils/certificateResult.test.ts"],
|
|
4
|
+
"sourcesContent": ["import { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { type PkiCertificateLoader } from \"@/modules/multichain/pki/domain/PkiCertificateLoader\";\n\nimport { loadCertificateResult } from \"./certificateResult\";\n\ndescribe(\"loadCertificateResult\", () => {\n let loader: PkiCertificateLoader;\n\n beforeEach(() => {\n loader = {\n loadCertificate: vi.fn(),\n };\n });\n\n it(\"returns { ok: true, value } on success\", async () => {\n const cert = { keyUsageNumber: 8, payload: new Uint8Array([1]) };\n vi.spyOn(loader, \"loadCertificate\").mockResolvedValue(cert);\n\n const result = await loadCertificateResult(loader, {\n keyId: \"k\",\n keyUsage: \"u\",\n targetDevice: \"nanoX\",\n });\n\n expect(result).toEqual({ ok: true, value: cert });\n });\n\n it(\"returns { ok: true, value: undefined } when loader resolves undefined\", async () => {\n vi.spyOn(loader, \"loadCertificate\").mockResolvedValue(undefined);\n\n const result = await loadCertificateResult(loader, {\n keyId: \"k\",\n keyUsage: \"u\",\n targetDevice: \"nanoX\",\n });\n\n expect(result).toEqual({ ok: true, value: undefined });\n });\n\n it(\"returns { ok: false, error } on rejection (no rethrow)\", async () => {\n vi.spyOn(loader, \"loadCertificate\").mockRejectedValue(\n new Error(\"pki-down\"),\n );\n\n const result = await loadCertificateResult(loader, {\n keyId: \"k\",\n keyUsage: \"u\",\n targetDevice: \"nanoX\",\n });\n\n expect(result).toEqual({ ok: false, error: new Error(\"pki-down\") });\n });\n\n it(\"wraps non-Error throws in Error\", async () => {\n vi.spyOn(loader, \"loadCertificate\").mockRejectedValue(\"string-rejection\");\n\n const result = await loadCertificateResult(loader, {\n keyId: \"k\",\n keyUsage: \"u\",\n targetDevice: \"nanoX\",\n });\n\n expect(result.ok).toBe(false);\n if (!result.ok) {\n expect(result.error).toBeInstanceOf(Error);\n expect(result.error.message).toBe(\"string-rejection\");\n }\n });\n});\n"],
|
|
5
|
+
"mappings": "aAAA,IAAAA,EAAqD,kBAIrDC,EAAsC,kCAEtC,YAAS,wBAAyB,IAAM,CACtC,IAAIC,KAEJ,cAAW,IAAM,CACfA,EAAS,CACP,gBAAiB,KAAG,GAAG,CACzB,CACF,CAAC,KAED,MAAG,yCAA0C,SAAY,CACvD,MAAMC,EAAO,CAAE,eAAgB,EAAG,QAAS,IAAI,WAAW,CAAC,CAAC,CAAC,CAAE,EAC/D,KAAG,MAAMD,EAAQ,iBAAiB,EAAE,kBAAkBC,CAAI,EAE1D,MAAMC,EAAS,QAAM,yBAAsBF,EAAQ,CACjD,MAAO,IACP,SAAU,IACV,aAAc,OAChB,CAAC,KAED,UAAOE,CAAM,EAAE,QAAQ,CAAE,GAAI,GAAM,MAAOD,CAAK,CAAC,CAClD,CAAC,KAED,MAAG,wEAAyE,SAAY,CACtF,KAAG,MAAMD,EAAQ,iBAAiB,EAAE,kBAAkB,MAAS,EAE/D,MAAME,EAAS,QAAM,yBAAsBF,EAAQ,CACjD,MAAO,IACP,SAAU,IACV,aAAc,OAChB,CAAC,KAED,UAAOE,CAAM,EAAE,QAAQ,CAAE,GAAI,GAAM,MAAO,MAAU,CAAC,CACvD,CAAC,KAED,MAAG,yDAA0D,SAAY,CACvE,KAAG,MAAMF,EAAQ,iBAAiB,EAAE,kBAClC,IAAI,MAAM,UAAU,CACtB,EAEA,MAAME,EAAS,QAAM,yBAAsBF,EAAQ,CACjD,MAAO,IACP,SAAU,IACV,aAAc,OAChB,CAAC,KAED,UAAOE,CAAM,EAAE,QAAQ,CAAE,GAAI,GAAO,MAAO,IAAI,MAAM,UAAU,CAAE,CAAC,CACpE,CAAC,KAED,MAAG,kCAAmC,SAAY,CAChD,KAAG,MAAMF,EAAQ,iBAAiB,EAAE,kBAAkB,kBAAkB,EAExE,MAAME,EAAS,QAAM,yBAAsBF,EAAQ,CACjD,MAAO,IACP,SAAU,IACV,aAAc,OAChB,CAAC,KAED,UAAOE,EAAO,EAAE,EAAE,KAAK,EAAK,EACvBA,EAAO,QACV,UAAOA,EAAO,KAAK,EAAE,eAAe,KAAK,KACzC,UAAOA,EAAO,MAAM,OAAO,EAAE,KAAK,kBAAkB,EAExD,CAAC,CACH,CAAC",
|
|
6
|
+
"names": ["import_vitest", "import_certificateResult", "loader", "cert", "result"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var u=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var P=Object.getOwnPropertyNames;var x=Object.prototype.hasOwnProperty;var T=(r,e)=>{for(var a in e)u(r,a,{get:e[a],enumerable:!0})},k=(r,e,a,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of P(e))!x.call(r,t)&&t!==a&&u(r,t,{get:()=>e[t],enumerable:!(i=y(e,t))||i.enumerable});return r};var w=r=>k(u({},"__esModule",{value:!0}),r);var L={};T(L,{loadChallengeBoundContexts:()=>E});module.exports=w(L);var c=require("../../shared/model/ClearSignContext"),g=require("../../shared/utils/certificateCache");async function E({requests:r,deviceModelId:e,certificateLoader:a,logger:i,label:t,fetch:C,toContext:m,describe:d}){i.debug(`[load] Fetching ${t} descriptors`,{data:{count:r.length}});const R=await Promise.all(r.map(async n=>({request:n,either:await C(n)}))),p=(0,g.makeCertificateCache)(a,e);return Promise.all(R.map(({request:n,either:h})=>h.caseOf({Left:async o=>(i.warn(`[load] ${t} fetch failed`,{data:{...d(n),error:o.message}}),{type:c.ClearSignContextType.ERROR,error:o}),Right:async o=>{let l;try{l=await p(o.keyId,o.keyUsage)}catch(s){const f=s instanceof Error?s:new Error(String(s));return i.warn(`[load] ${t} certificate load failed`,{data:{...d(n),error:f.message}}),{type:c.ClearSignContextType.ERROR,error:f}}if(!l){const s=new Error(`[ContextModule] ${t}: certificate is missing`);return i.warn(`[load] ${t} certificate missing`,{data:d(n)}),{type:c.ClearSignContextType.ERROR,error:s}}return m(o,l)}})))}0&&(module.exports={loadChallengeBoundContexts});
|
|
2
|
+
//# sourceMappingURL=challengeBoundLoader.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/shared/utils/challengeBoundLoader.ts"],
|
|
4
|
+
"sourcesContent": ["import { type LoggerPublisherService } from \"@ledgerhq/device-management-kit\";\nimport { type Either } from \"purify-ts\";\n\nimport { type PkiCertificateLoader } from \"@/modules/multichain/pki/domain/PkiCertificateLoader\";\nimport { type PkiCertificate } from \"@/modules/multichain/pki/model/PkiCertificate\";\nimport {\n type ClearSignContext,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\nimport { makeCertificateCache } from \"@/shared/utils/certificateCache\";\n\n/**\n * Shape every challenge-bound dynamic-descriptor result shares: the PKI\n * identifiers the host needs to load the matching certificate. The three\n * Solana challenge-bound loaders (token-account-state, alt-resolution,\n * trusted-name) each fetch a per-request descriptor whose backend response\n * reports its own `(keyId, keyUsage)`.\n */\nexport type ChallengeBoundResult = {\n keyId: string;\n keyUsage: string;\n};\n\nexport type ChallengeBoundLoaderParams<\n TRequest,\n TResult extends ChallengeBoundResult,\n> = {\n requests: TRequest[];\n deviceModelId: string;\n certificateLoader: PkiCertificateLoader;\n logger: LoggerPublisherService;\n /** Short UPPER_SNAKE label used in log messages, e.g. `\"TRUSTED_NAME\"`. */\n label: string;\n /** Issue the per-request backend fetch. */\n fetch: (request: TRequest) => Promise<Either<Error, TResult>>;\n /** Build the success context from a validated result + its certificate. */\n toContext: (result: TResult, certificate: PkiCertificate) => ClearSignContext;\n /** Structured fields attached to per-request log lines. */\n describe: (request: TRequest) => Record<string, unknown>;\n};\n\n/**\n * Orchestrates the shared lifecycle of the Solana challenge-bound loaders:\n * fan out the per-request fetches in parallel, dedup certificate loads per\n * batch via {@link makeCertificateCache}, and map each request to exactly\n * one {@link ClearSignContext}.\n *\n * A fetch failure, a certificate-load throw, or an absent (resolved-\n * `undefined`) certificate each degrade that single request to an ERROR\n * context \u2014 never the whole batch, and never a success context shipped\n * without a certificate.\n */\nexport async function loadChallengeBoundContexts<\n TRequest,\n TResult extends ChallengeBoundResult,\n>({\n requests,\n deviceModelId,\n certificateLoader,\n logger,\n label,\n fetch,\n toContext,\n describe,\n}: ChallengeBoundLoaderParams<TRequest, TResult>): Promise<ClearSignContext[]> {\n logger.debug(`[load] Fetching ${label} descriptors`, {\n data: { count: requests.length },\n });\n\n const fetched = await Promise.all(\n requests.map(async (request) => ({\n request,\n either: await fetch(request),\n })),\n );\n\n const getCert = makeCertificateCache(certificateLoader, deviceModelId);\n\n return Promise.all(\n fetched.map(({ request, either }) =>\n either.caseOf<Promise<ClearSignContext>>({\n Left: async (error) => {\n logger.warn(`[load] ${label} fetch failed`, {\n data: { ...describe(request), error: error.message },\n });\n return { type: ClearSignContextType.ERROR, error };\n },\n Right: async (value) => {\n let certificate: PkiCertificate | undefined;\n try {\n certificate = await getCert(value.keyId, value.keyUsage);\n } catch (caught) {\n const error =\n caught instanceof Error ? caught : new Error(String(caught));\n logger.warn(`[load] ${label} certificate load failed`, {\n data: { ...describe(request), error: error.message },\n });\n return { type: ClearSignContextType.ERROR, error };\n }\n if (!certificate) {\n const error = new Error(\n `[ContextModule] ${label}: certificate is missing`,\n );\n logger.warn(`[load] ${label} certificate missing`, {\n data: describe(request),\n });\n return { type: ClearSignContextType.ERROR, error };\n }\n return toContext(value, certificate);\n },\n }),\n ),\n );\n}\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,gCAAAE,IAAA,eAAAC,EAAAH,GAKA,IAAAI,EAGO,2CACPC,EAAqC,2CA2CrC,eAAsBH,EAGpB,CACA,SAAAI,EACA,cAAAC,EACA,kBAAAC,EACA,OAAAC,EACA,MAAAC,EACA,MAAAC,EACA,UAAAC,EACA,SAAAC,CACF,EAA+E,CAC7EJ,EAAO,MAAM,mBAAmBC,CAAK,eAAgB,CACnD,KAAM,CAAE,MAAOJ,EAAS,MAAO,CACjC,CAAC,EAED,MAAMQ,EAAU,MAAM,QAAQ,IAC5BR,EAAS,IAAI,MAAOS,IAAa,CAC/B,QAAAA,EACA,OAAQ,MAAMJ,EAAMI,CAAO,CAC7B,EAAE,CACJ,EAEMC,KAAU,wBAAqBR,EAAmBD,CAAa,EAErE,OAAO,QAAQ,IACbO,EAAQ,IAAI,CAAC,CAAE,QAAAC,EAAS,OAAAE,CAAO,IAC7BA,EAAO,OAAkC,CACvC,KAAM,MAAOC,IACXT,EAAO,KAAK,UAAUC,CAAK,gBAAiB,CAC1C,KAAM,CAAE,GAAGG,EAASE,CAAO,EAAG,MAAOG,EAAM,OAAQ,CACrD,CAAC,EACM,CAAE,KAAM,uBAAqB,MAAO,MAAAA,CAAM,GAEnD,MAAO,MAAOC,GAAU,CACtB,IAAIC,EACJ,GAAI,CACFA,EAAc,MAAMJ,EAAQG,EAAM,MAAOA,EAAM,QAAQ,CACzD,OAASE,EAAQ,CACf,MAAMH,EACJG,aAAkB,MAAQA,EAAS,IAAI,MAAM,OAAOA,CAAM,CAAC,EAC7D,OAAAZ,EAAO,KAAK,UAAUC,CAAK,2BAA4B,CACrD,KAAM,CAAE,GAAGG,EAASE,CAAO,EAAG,MAAOG,EAAM,OAAQ,CACrD,CAAC,EACM,CAAE,KAAM,uBAAqB,MAAO,MAAAA,CAAM,CACnD,CACA,GAAI,CAACE,EAAa,CAChB,MAAMF,EAAQ,IAAI,MAChB,mBAAmBR,CAAK,0BAC1B,EACA,OAAAD,EAAO,KAAK,UAAUC,CAAK,uBAAwB,CACjD,KAAMG,EAASE,CAAO,CACxB,CAAC,EACM,CAAE,KAAM,uBAAqB,MAAO,MAAAG,CAAM,CACnD,CACA,OAAON,EAAUO,EAAOC,CAAW,CACrC,CACF,CAAC,CACH,CACF,CACF",
|
|
6
|
+
"names": ["challengeBoundLoader_exports", "__export", "loadChallengeBoundContexts", "__toCommonJS", "import_ClearSignContext", "import_certificateCache", "requests", "deviceModelId", "certificateLoader", "logger", "label", "fetch", "toContext", "describe", "fetched", "request", "getCert", "either", "error", "value", "certificate", "caught"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var i=require("purify-ts"),e=require("vitest"),s=require("../../shared/model/ClearSignContext"),o=require("./challengeBoundLoader");const y=()=>({debug:e.vi.fn(),info:e.vi.fn(),warn:e.vi.fn(),error:e.vi.fn(),subscribers:[]}),n={keyUsageNumber:1,payload:new Uint8Array([1])},c=(r,t)=>({deviceModelId:"stax",certificateLoader:r,logger:y(),label:"TEST_CTX",fetch:t,toContext:(a,d)=>({type:s.ClearSignContextType.SOLANA_TRUSTED_NAME,payload:a.descriptor,certificate:d}),describe:a=>({id:a.id})});(0,e.describe)("loadChallengeBoundContexts",()=>{let r;(0,e.beforeEach)(()=>{e.vi.restoreAllMocks(),r={loadCertificate:e.vi.fn().mockResolvedValue(n)}}),(0,e.it)("emits one success context per request with its certificate",async()=>{const t=await(0,o.loadChallengeBoundContexts)({...c(r,async({id:a})=>(0,i.Right)({id:a,descriptor:new Uint8Array([170]),keyId:"k",keyUsage:"u"})),requests:[{id:"a",challenge:"c1"},{id:"b",challenge:"c2"}]});(0,e.expect)(t).toHaveLength(2),(0,e.expect)(t.every(a=>a.type===s.ClearSignContextType.SOLANA_TRUSTED_NAME)).toBe(!0),(0,e.expect)(t[0].certificate).toBe(n)}),(0,e.it)("degrades only the failing request to ERROR and keeps the others",async()=>{const t=await(0,o.loadChallengeBoundContexts)({...c(r,async({id:a})=>a==="a"?(0,i.Right)({id:a,descriptor:new Uint8Array([1]),keyId:"k",keyUsage:"u"}):(0,i.Left)(new Error("boom"))),requests:[{id:"a",challenge:"c1"},{id:"b",challenge:"c2"}]});(0,e.expect)(t[0]?.type).toBe(s.ClearSignContextType.SOLANA_TRUSTED_NAME),(0,e.expect)(t[1]?.type).toBe(s.ClearSignContextType.ERROR)}),(0,e.it)("emits ERROR when the certificate load throws",async()=>{e.vi.spyOn(r,"loadCertificate").mockRejectedValue(new Error("pki-down"));const t=await(0,o.loadChallengeBoundContexts)({...c(r,async({id:a})=>(0,i.Right)({id:a,descriptor:new Uint8Array([1]),keyId:"k",keyUsage:"u"})),requests:[{id:"a",challenge:"c1"}]});(0,e.expect)(t[0]?.type).toBe(s.ClearSignContextType.ERROR),(0,e.expect)(t[0].error.message).toBe("pki-down")}),(0,e.it)("emits ERROR (not a cert-less success) when the certificate resolves undefined",async()=>{e.vi.spyOn(r,"loadCertificate").mockResolvedValue(void 0);const t=await(0,o.loadChallengeBoundContexts)({...c(r,async({id:a})=>(0,i.Right)({id:a,descriptor:new Uint8Array([1]),keyId:"k",keyUsage:"u"})),requests:[{id:"a",challenge:"c1"}]});(0,e.expect)(t[0]?.type).toBe(s.ClearSignContextType.ERROR),(0,e.expect)(t[0].error.message).toMatch(/TEST_CTX: certificate is missing/)}),(0,e.it)("dedups certificate loads per (keyId, keyUsage) across the batch",async()=>{const t=await(0,o.loadChallengeBoundContexts)({...c(r,async({id:a})=>(0,i.Right)({id:a,descriptor:new Uint8Array([1]),keyId:"same",keyUsage:"same"})),requests:[{id:"a",challenge:"c1"},{id:"b",challenge:"c2"},{id:"c",challenge:"c3"}]});(0,e.expect)(t).toHaveLength(3),(0,e.expect)(r.loadCertificate).toHaveBeenCalledTimes(1)})});
|
|
2
|
+
//# sourceMappingURL=challengeBoundLoader.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/shared/utils/challengeBoundLoader.test.ts"],
|
|
4
|
+
"sourcesContent": ["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Left, Right } from \"purify-ts\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { type PkiCertificateLoader } from \"@/modules/multichain/pki/domain/PkiCertificateLoader\";\nimport { type PkiCertificate } from \"@/modules/multichain/pki/model/PkiCertificate\";\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\n\nimport { loadChallengeBoundContexts } from \"./challengeBoundLoader\";\n\nconst mockLogger = () => ({\n debug: vi.fn(),\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n subscribers: [],\n});\n\nconst certificate = { keyUsageNumber: 1, payload: new Uint8Array([0x01]) };\n\ntype Req = { id: string; challenge: string };\ntype Res = {\n id: string;\n descriptor: Uint8Array;\n keyId: string;\n keyUsage: string;\n};\n\nconst baseParams = (\n certificateLoader: PkiCertificateLoader,\n fetch: (r: Req) => Promise<any>,\n) => ({\n deviceModelId: \"stax\",\n certificateLoader,\n logger: mockLogger() as any,\n label: \"TEST_CTX\",\n fetch,\n toContext: (value: Res, cert: PkiCertificate) => ({\n type: ClearSignContextType.SOLANA_TRUSTED_NAME as const,\n payload: value.descriptor,\n certificate: cert,\n }),\n describe: (r: Req) => ({ id: r.id }),\n});\n\ndescribe(\"loadChallengeBoundContexts\", () => {\n let certificateLoader: PkiCertificateLoader;\n\n beforeEach(() => {\n vi.restoreAllMocks();\n certificateLoader = {\n loadCertificate: vi.fn().mockResolvedValue(certificate),\n };\n });\n\n it(\"emits one success context per request with its certificate\", async () => {\n const out = await loadChallengeBoundContexts({\n ...baseParams(certificateLoader, async ({ id }) =>\n Right({\n id,\n descriptor: new Uint8Array([0xaa]),\n keyId: \"k\",\n keyUsage: \"u\",\n }),\n ),\n requests: [\n { id: \"a\", challenge: \"c1\" },\n { id: \"b\", challenge: \"c2\" },\n ],\n });\n\n expect(out).toHaveLength(2);\n expect(\n out.every((c) => c.type === ClearSignContextType.SOLANA_TRUSTED_NAME),\n ).toBe(true);\n expect((out[0] as any).certificate).toBe(certificate);\n });\n\n it(\"degrades only the failing request to ERROR and keeps the others\", async () => {\n const out = await loadChallengeBoundContexts({\n ...baseParams(certificateLoader, async ({ id }) =>\n id === \"a\"\n ? Right({\n id,\n descriptor: new Uint8Array([1]),\n keyId: \"k\",\n keyUsage: \"u\",\n })\n : Left(new Error(\"boom\")),\n ),\n requests: [\n { id: \"a\", challenge: \"c1\" },\n { id: \"b\", challenge: \"c2\" },\n ],\n });\n\n expect(out[0]?.type).toBe(ClearSignContextType.SOLANA_TRUSTED_NAME);\n expect(out[1]?.type).toBe(ClearSignContextType.ERROR);\n });\n\n it(\"emits ERROR when the certificate load throws\", async () => {\n vi.spyOn(certificateLoader, \"loadCertificate\").mockRejectedValue(\n new Error(\"pki-down\"),\n );\n\n const out = await loadChallengeBoundContexts({\n ...baseParams(certificateLoader, async ({ id }) =>\n Right({\n id,\n descriptor: new Uint8Array([1]),\n keyId: \"k\",\n keyUsage: \"u\",\n }),\n ),\n requests: [{ id: \"a\", challenge: \"c1\" }],\n });\n\n expect(out[0]?.type).toBe(ClearSignContextType.ERROR);\n expect((out[0] as any).error.message).toBe(\"pki-down\");\n });\n\n it(\"emits ERROR (not a cert-less success) when the certificate resolves undefined\", async () => {\n vi.spyOn(certificateLoader, \"loadCertificate\").mockResolvedValue(undefined);\n\n const out = await loadChallengeBoundContexts({\n ...baseParams(certificateLoader, async ({ id }) =>\n Right({\n id,\n descriptor: new Uint8Array([1]),\n keyId: \"k\",\n keyUsage: \"u\",\n }),\n ),\n requests: [{ id: \"a\", challenge: \"c1\" }],\n });\n\n expect(out[0]?.type).toBe(ClearSignContextType.ERROR);\n expect((out[0] as any).error.message).toMatch(\n /TEST_CTX: certificate is missing/,\n );\n });\n\n it(\"dedups certificate loads per (keyId, keyUsage) across the batch\", async () => {\n const out = await loadChallengeBoundContexts({\n ...baseParams(certificateLoader, async ({ id }) =>\n Right({\n id,\n descriptor: new Uint8Array([1]),\n keyId: \"same\",\n keyUsage: \"same\",\n }),\n ),\n requests: [\n { id: \"a\", challenge: \"c1\" },\n { id: \"b\", challenge: \"c2\" },\n { id: \"c\", challenge: \"c3\" },\n ],\n });\n\n expect(out).toHaveLength(3);\n // Three requests share one PKI key \u2192 exactly one loadCertificate call.\n expect(certificateLoader.loadCertificate).toHaveBeenCalledTimes(1);\n });\n});\n"],
|
|
5
|
+
"mappings": "aACA,IAAAA,EAA4B,qBAC5BC,EAAqD,kBAIrDC,EAAqC,2CAErCC,EAA2C,kCAE3C,MAAMC,EAAa,KAAO,CACxB,MAAO,KAAG,GAAG,EACb,KAAM,KAAG,GAAG,EACZ,KAAM,KAAG,GAAG,EACZ,MAAO,KAAG,GAAG,EACb,YAAa,CAAC,CAChB,GAEMC,EAAc,CAAE,eAAgB,EAAG,QAAS,IAAI,WAAW,CAAC,CAAI,CAAC,CAAE,EAUnEC,EAAa,CACjBC,EACAC,KACI,CACJ,cAAe,OACf,kBAAAD,EACA,OAAQH,EAAW,EACnB,MAAO,WACP,MAAAI,EACA,UAAW,CAACC,EAAYC,KAA0B,CAChD,KAAM,uBAAqB,oBAC3B,QAASD,EAAM,WACf,YAAaC,CACf,GACA,SAAWC,IAAY,CAAE,GAAIA,EAAE,EAAG,EACpC,MAEA,YAAS,6BAA8B,IAAM,CAC3C,IAAIJ,KAEJ,cAAW,IAAM,CACf,KAAG,gBAAgB,EACnBA,EAAoB,CAClB,gBAAiB,KAAG,GAAG,EAAE,kBAAkBF,CAAW,CACxD,CACF,CAAC,KAED,MAAG,6DAA8D,SAAY,CAC3E,MAAMO,EAAM,QAAM,8BAA2B,CAC3C,GAAGN,EAAWC,EAAmB,MAAO,CAAE,GAAAM,CAAG,OAC3C,SAAM,CACJ,GAAAA,EACA,WAAY,IAAI,WAAW,CAAC,GAAI,CAAC,EACjC,MAAO,IACP,SAAU,GACZ,CAAC,CACH,EACA,SAAU,CACR,CAAE,GAAI,IAAK,UAAW,IAAK,EAC3B,CAAE,GAAI,IAAK,UAAW,IAAK,CAC7B,CACF,CAAC,KAED,UAAOD,CAAG,EAAE,aAAa,CAAC,KAC1B,UACEA,EAAI,MAAOE,GAAMA,EAAE,OAAS,uBAAqB,mBAAmB,CACtE,EAAE,KAAK,EAAI,KACX,UAAQF,EAAI,CAAC,EAAU,WAAW,EAAE,KAAKP,CAAW,CACtD,CAAC,KAED,MAAG,kEAAmE,SAAY,CAChF,MAAMO,EAAM,QAAM,8BAA2B,CAC3C,GAAGN,EAAWC,EAAmB,MAAO,CAAE,GAAAM,CAAG,IAC3CA,IAAO,OACH,SAAM,CACJ,GAAAA,EACA,WAAY,IAAI,WAAW,CAAC,CAAC,CAAC,EAC9B,MAAO,IACP,SAAU,GACZ,CAAC,KACD,QAAK,IAAI,MAAM,MAAM,CAAC,CAC5B,EACA,SAAU,CACR,CAAE,GAAI,IAAK,UAAW,IAAK,EAC3B,CAAE,GAAI,IAAK,UAAW,IAAK,CAC7B,CACF,CAAC,KAED,UAAOD,EAAI,CAAC,GAAG,IAAI,EAAE,KAAK,uBAAqB,mBAAmB,KAClE,UAAOA,EAAI,CAAC,GAAG,IAAI,EAAE,KAAK,uBAAqB,KAAK,CACtD,CAAC,KAED,MAAG,+CAAgD,SAAY,CAC7D,KAAG,MAAML,EAAmB,iBAAiB,EAAE,kBAC7C,IAAI,MAAM,UAAU,CACtB,EAEA,MAAMK,EAAM,QAAM,8BAA2B,CAC3C,GAAGN,EAAWC,EAAmB,MAAO,CAAE,GAAAM,CAAG,OAC3C,SAAM,CACJ,GAAAA,EACA,WAAY,IAAI,WAAW,CAAC,CAAC,CAAC,EAC9B,MAAO,IACP,SAAU,GACZ,CAAC,CACH,EACA,SAAU,CAAC,CAAE,GAAI,IAAK,UAAW,IAAK,CAAC,CACzC,CAAC,KAED,UAAOD,EAAI,CAAC,GAAG,IAAI,EAAE,KAAK,uBAAqB,KAAK,KACpD,UAAQA,EAAI,CAAC,EAAU,MAAM,OAAO,EAAE,KAAK,UAAU,CACvD,CAAC,KAED,MAAG,gFAAiF,SAAY,CAC9F,KAAG,MAAML,EAAmB,iBAAiB,EAAE,kBAAkB,MAAS,EAE1E,MAAMK,EAAM,QAAM,8BAA2B,CAC3C,GAAGN,EAAWC,EAAmB,MAAO,CAAE,GAAAM,CAAG,OAC3C,SAAM,CACJ,GAAAA,EACA,WAAY,IAAI,WAAW,CAAC,CAAC,CAAC,EAC9B,MAAO,IACP,SAAU,GACZ,CAAC,CACH,EACA,SAAU,CAAC,CAAE,GAAI,IAAK,UAAW,IAAK,CAAC,CACzC,CAAC,KAED,UAAOD,EAAI,CAAC,GAAG,IAAI,EAAE,KAAK,uBAAqB,KAAK,KACpD,UAAQA,EAAI,CAAC,EAAU,MAAM,OAAO,EAAE,QACpC,kCACF,CACF,CAAC,KAED,MAAG,kEAAmE,SAAY,CAChF,MAAMA,EAAM,QAAM,8BAA2B,CAC3C,GAAGN,EAAWC,EAAmB,MAAO,CAAE,GAAAM,CAAG,OAC3C,SAAM,CACJ,GAAAA,EACA,WAAY,IAAI,WAAW,CAAC,CAAC,CAAC,EAC9B,MAAO,OACP,SAAU,MACZ,CAAC,CACH,EACA,SAAU,CACR,CAAE,GAAI,IAAK,UAAW,IAAK,EAC3B,CAAE,GAAI,IAAK,UAAW,IAAK,EAC3B,CAAE,GAAI,IAAK,UAAW,IAAK,CAC7B,CACF,CAAC,KAED,UAAOD,CAAG,EAAE,aAAa,CAAC,KAE1B,UAAOL,EAAkB,eAAe,EAAE,sBAAsB,CAAC,CACnE,CAAC,CACH,CAAC",
|
|
6
|
+
"names": ["import_purify_ts", "import_vitest", "import_ClearSignContext", "import_challengeBoundLoader", "mockLogger", "certificate", "baseParams", "certificateLoader", "fetch", "value", "cert", "r", "out", "id", "c"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var i=Object.defineProperty;var N=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var p=(o,e)=>{for(var t in e)i(o,t,{get:e[t],enumerable:!0})},A=(o,e,t,m)=>{if(e&&typeof e=="object"||typeof e=="function")for(let c of f(e))!l.call(o,c)&&c!==t&&i(o,c,{get:()=>e[c],enumerable:!(m=N(e,c))||m.enumerable});return o};var O=o=>A(i({},"__esModule",{value:!0}),o);var n={};p(n,{deviceModelIdCodec:()=>X});module.exports=O(n);var r=require("@ledgerhq/device-management-kit"),d=require("purify-ts");const X=(0,d.oneOf)([(0,d.exactly)(r.DeviceModelId.NANO_X),(0,d.exactly)(r.DeviceModelId.NANO_SP),(0,d.exactly)(r.DeviceModelId.STAX),(0,d.exactly)(r.DeviceModelId.FLEX)]);0&&(module.exports={deviceModelIdCodec});
|
|
2
|
+
//# sourceMappingURL=deviceModelIdCodec.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/shared/utils/deviceModelIdCodec.ts"],
|
|
4
|
+
"sourcesContent": ["import { DeviceModelId } from \"@ledgerhq/device-management-kit\";\nimport { exactly, oneOf } from \"purify-ts\";\n\n/**\n * Set of device models supported by the clear-signing and transaction-check\n * flows. Excludes `NANO_S` and `APEX`.\n */\nexport const deviceModelIdCodec = oneOf([\n exactly(DeviceModelId.NANO_X),\n exactly(DeviceModelId.NANO_SP),\n exactly(DeviceModelId.STAX),\n exactly(DeviceModelId.FLEX),\n]);\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,wBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAA8B,2CAC9BC,EAA+B,qBAMxB,MAAMH,KAAqB,SAAM,IACtC,WAAQ,gBAAc,MAAM,KAC5B,WAAQ,gBAAc,OAAO,KAC7B,WAAQ,gBAAc,IAAI,KAC1B,WAAQ,gBAAc,IAAI,CAC5B,CAAC",
|
|
6
|
+
"names": ["deviceModelIdCodec_exports", "__export", "deviceModelIdCodec", "__toCommonJS", "import_device_management_kit", "import_purify_ts"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var e=require("@ledgerhq/device-management-kit"),t=require("purify-ts"),d=require("./deviceModelIdCodec");describe("deviceModelIdCodec",()=>{it.each([e.DeviceModelId.NANO_X,e.DeviceModelId.NANO_SP,e.DeviceModelId.STAX,e.DeviceModelId.FLEX])("decodes %s as Right",o=>{expect(d.deviceModelIdCodec.decode(o)).toEqual((0,t.Right)(o))}),it("rejects NANO_S (unsupported for clear-signing)",()=>{expect(d.deviceModelIdCodec.decode(e.DeviceModelId.NANO_S).isLeft()).toBe(!0)}),it.each([null,void 0,"","ledger",42,{},[]])("rejects non-model values: %s",o=>{expect(d.deviceModelIdCodec.decode(o).isLeft()).toBe(!0)}),it("encodes a model as itself",()=>{expect(d.deviceModelIdCodec.encode(e.DeviceModelId.NANO_X)).toBe(e.DeviceModelId.NANO_X)})});
|
|
2
|
+
//# sourceMappingURL=deviceModelIdCodec.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/shared/utils/deviceModelIdCodec.test.ts"],
|
|
4
|
+
"sourcesContent": ["import { DeviceModelId } from \"@ledgerhq/device-management-kit\";\nimport { Right } from \"purify-ts\";\n\nimport { deviceModelIdCodec } from \"./deviceModelIdCodec\";\n\ndescribe(\"deviceModelIdCodec\", () => {\n it.each([\n DeviceModelId.NANO_X,\n DeviceModelId.NANO_SP,\n DeviceModelId.STAX,\n DeviceModelId.FLEX,\n ])(\"decodes %s as Right\", (model) => {\n expect(deviceModelIdCodec.decode(model)).toEqual(Right(model));\n });\n\n it(\"rejects NANO_S (unsupported for clear-signing)\", () => {\n expect(deviceModelIdCodec.decode(DeviceModelId.NANO_S).isLeft()).toBe(true);\n });\n\n it.each([null, undefined, \"\", \"ledger\", 42, {}, []])(\n \"rejects non-model values: %s\",\n (value) => {\n expect(deviceModelIdCodec.decode(value).isLeft()).toBe(true);\n },\n );\n\n it(\"encodes a model as itself\", () => {\n expect(deviceModelIdCodec.encode(DeviceModelId.NANO_X)).toBe(\n DeviceModelId.NANO_X,\n );\n });\n});\n"],
|
|
5
|
+
"mappings": "aAAA,IAAAA,EAA8B,2CAC9BC,EAAsB,qBAEtBC,EAAmC,gCAEnC,SAAS,qBAAsB,IAAM,CACnC,GAAG,KAAK,CACN,gBAAc,OACd,gBAAc,QACd,gBAAc,KACd,gBAAc,IAChB,CAAC,EAAE,sBAAwBC,GAAU,CACnC,OAAO,qBAAmB,OAAOA,CAAK,CAAC,EAAE,WAAQ,SAAMA,CAAK,CAAC,CAC/D,CAAC,EAED,GAAG,iDAAkD,IAAM,CACzD,OAAO,qBAAmB,OAAO,gBAAc,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAI,CAC5E,CAAC,EAED,GAAG,KAAK,CAAC,KAAM,OAAW,GAAI,SAAU,GAAI,CAAC,EAAG,CAAC,CAAC,CAAC,EACjD,+BACCC,GAAU,CACT,OAAO,qBAAmB,OAAOA,CAAK,EAAE,OAAO,CAAC,EAAE,KAAK,EAAI,CAC7D,CACF,EAEA,GAAG,4BAA6B,IAAM,CACpC,OAAO,qBAAmB,OAAO,gBAAc,MAAM,CAAC,EAAE,KACtD,gBAAc,MAChB,CACF,CAAC,CACH,CAAC",
|
|
6
|
+
"names": ["import_device_management_kit", "import_purify_ts", "import_deviceModelIdCodec", "model", "value"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var s=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var g=(e,o)=>{for(var n in o)s(e,n,{get:o[n],enumerable:!0})},y=(e,o,n,c)=>{if(o&&typeof o=="object"||typeof o=="function")for(let r of p(o))!d.call(e,r)&&r!==n&&s(e,r,{get:()=>o[r],enumerable:!(c=i(o,r))||c.enumerable});return e};var D=e=>y(s({},"__esModule",{value:!0}),e);var a={};g(a,{signedDescriptorDtoCodec:()=>m});module.exports=D(a);var t=require("purify-ts");const f=t.Codec.custom({decode:e=>typeof e=="string"&&e.length>0?(0,t.Right)(e):(0,t.Left)("Expected a non-empty string"),encode:e=>e}),m=t.Codec.interface({signedDescriptor:f,keyId:t.string,keyUsage:t.string});0&&(module.exports={signedDescriptorDtoCodec});
|
|
2
|
+
//# sourceMappingURL=signedDescriptorDto.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/shared/utils/signedDescriptorDto.ts"],
|
|
4
|
+
"sourcesContent": ["import { Codec, type GetType, Left, Right, string } from \"purify-ts\";\n\n/**\n * Codec for a non-empty string. Rejects `\"\"` so callers can't decode a\n * malformed-but-typed-correctly response (e.g. `signedDescriptor: \"\"`)\n * into a valid DTO.\n */\nconst nonEmptyString = Codec.custom<string>({\n decode: (input) =>\n typeof input === \"string\" && input.length > 0\n ? Right(input)\n : Left(\"Expected a non-empty string\"),\n encode: (value) => value,\n});\n\n/**\n * Common envelope shape returned by the Solana dynamic-descriptor backend\n * endpoints: a hex-encoded signed TLV plus the PKI key identifiers used to\n * load the matching certificate. `Codec.interface` ignores extra fields, so\n * each datasource can validate this shared slice and ignore the rest of its\n * own response.\n */\nexport const signedDescriptorDtoCodec = Codec.interface({\n signedDescriptor: nonEmptyString,\n keyId: string,\n keyUsage: string,\n});\n\nexport type SignedDescriptorDto = GetType<typeof signedDescriptorDtoCodec>;\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,8BAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAyD,qBAOzD,MAAMC,EAAiB,QAAM,OAAe,CAC1C,OAASC,GACP,OAAOA,GAAU,UAAYA,EAAM,OAAS,KACxC,SAAMA,CAAK,KACX,QAAK,6BAA6B,EACxC,OAASC,GAAUA,CACrB,CAAC,EASYL,EAA2B,QAAM,UAAU,CACtD,iBAAkBG,EAClB,MAAO,SACP,SAAU,QACZ,CAAC",
|
|
6
|
+
"names": ["signedDescriptorDto_exports", "__export", "signedDescriptorDtoCodec", "__toCommonJS", "import_purify_ts", "nonEmptyString", "input", "value"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var s=require("purify-ts"),t=require("./signedDescriptorDto");describe("signedDescriptorDtoCodec",()=>{const e={signedDescriptor:"deadbeef",keyId:"some_key",keyUsage:"coin_meta"};it("decodes a well-formed envelope as Right",()=>{expect(t.signedDescriptorDtoCodec.decode(e)).toEqual((0,s.Right)(e))}),it("ignores extra fields (datasource-specific context)",()=>{const i={...e,account_address:"abc",entry_index:3};expect(t.signedDescriptorDtoCodec.decode(i)).toEqual((0,s.Right)(e))}),it("rejects null and primitives",()=>{expect(t.signedDescriptorDtoCodec.decode(null).isLeft()).toBe(!0),expect(t.signedDescriptorDtoCodec.decode(void 0).isLeft()).toBe(!0),expect(t.signedDescriptorDtoCodec.decode("string").isLeft()).toBe(!0),expect(t.signedDescriptorDtoCodec.decode(42).isLeft()).toBe(!0)}),it.each([["missing signedDescriptor",{keyId:"k",keyUsage:"u"}],["empty signedDescriptor",{...e,signedDescriptor:""}],["non-string signedDescriptor",{...e,signedDescriptor:123}],["missing keyId",{signedDescriptor:"ab",keyUsage:"u"}],["non-string keyId",{...e,keyId:null}],["missing keyUsage",{signedDescriptor:"ab",keyId:"k"}],["non-string keyUsage",{...e,keyUsage:0}]])("rejects %s",(i,d)=>{expect(t.signedDescriptorDtoCodec.decode(d).isLeft()).toBe(!0)})});
|
|
2
|
+
//# sourceMappingURL=signedDescriptorDto.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/shared/utils/signedDescriptorDto.test.ts"],
|
|
4
|
+
"sourcesContent": ["import { Right } from \"purify-ts\";\n\nimport { signedDescriptorDtoCodec } from \"./signedDescriptorDto\";\n\ndescribe(\"signedDescriptorDtoCodec\", () => {\n const valid = {\n signedDescriptor: \"deadbeef\",\n keyId: \"some_key\",\n keyUsage: \"coin_meta\",\n };\n\n it(\"decodes a well-formed envelope as Right\", () => {\n expect(signedDescriptorDtoCodec.decode(valid)).toEqual(Right(valid));\n });\n\n it(\"ignores extra fields (datasource-specific context)\", () => {\n const withExtras = { ...valid, account_address: \"abc\", entry_index: 3 };\n expect(signedDescriptorDtoCodec.decode(withExtras)).toEqual(Right(valid));\n });\n\n it(\"rejects null and primitives\", () => {\n expect(signedDescriptorDtoCodec.decode(null).isLeft()).toBe(true);\n expect(signedDescriptorDtoCodec.decode(undefined).isLeft()).toBe(true);\n expect(signedDescriptorDtoCodec.decode(\"string\").isLeft()).toBe(true);\n expect(signedDescriptorDtoCodec.decode(42).isLeft()).toBe(true);\n });\n\n it.each([\n [\"missing signedDescriptor\", { keyId: \"k\", keyUsage: \"u\" }],\n [\"empty signedDescriptor\", { ...valid, signedDescriptor: \"\" }],\n [\"non-string signedDescriptor\", { ...valid, signedDescriptor: 123 }],\n [\"missing keyId\", { signedDescriptor: \"ab\", keyUsage: \"u\" }],\n [\"non-string keyId\", { ...valid, keyId: null }],\n [\"missing keyUsage\", { signedDescriptor: \"ab\", keyId: \"k\" }],\n [\"non-string keyUsage\", { ...valid, keyUsage: 0 }],\n ])(\"rejects %s\", (_label, bad) => {\n expect(signedDescriptorDtoCodec.decode(bad).isLeft()).toBe(true);\n });\n});\n"],
|
|
5
|
+
"mappings": "aAAA,IAAAA,EAAsB,qBAEtBC,EAAyC,iCAEzC,SAAS,2BAA4B,IAAM,CACzC,MAAMC,EAAQ,CACZ,iBAAkB,WAClB,MAAO,WACP,SAAU,WACZ,EAEA,GAAG,0CAA2C,IAAM,CAClD,OAAO,2BAAyB,OAAOA,CAAK,CAAC,EAAE,WAAQ,SAAMA,CAAK,CAAC,CACrE,CAAC,EAED,GAAG,qDAAsD,IAAM,CAC7D,MAAMC,EAAa,CAAE,GAAGD,EAAO,gBAAiB,MAAO,YAAa,CAAE,EACtE,OAAO,2BAAyB,OAAOC,CAAU,CAAC,EAAE,WAAQ,SAAMD,CAAK,CAAC,CAC1E,CAAC,EAED,GAAG,8BAA+B,IAAM,CACtC,OAAO,2BAAyB,OAAO,IAAI,EAAE,OAAO,CAAC,EAAE,KAAK,EAAI,EAChE,OAAO,2BAAyB,OAAO,MAAS,EAAE,OAAO,CAAC,EAAE,KAAK,EAAI,EACrE,OAAO,2BAAyB,OAAO,QAAQ,EAAE,OAAO,CAAC,EAAE,KAAK,EAAI,EACpE,OAAO,2BAAyB,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,KAAK,EAAI,CAChE,CAAC,EAED,GAAG,KAAK,CACN,CAAC,2BAA4B,CAAE,MAAO,IAAK,SAAU,GAAI,CAAC,EAC1D,CAAC,yBAA0B,CAAE,GAAGA,EAAO,iBAAkB,EAAG,CAAC,EAC7D,CAAC,8BAA+B,CAAE,GAAGA,EAAO,iBAAkB,GAAI,CAAC,EACnE,CAAC,gBAAiB,CAAE,iBAAkB,KAAM,SAAU,GAAI,CAAC,EAC3D,CAAC,mBAAoB,CAAE,GAAGA,EAAO,MAAO,IAAK,CAAC,EAC9C,CAAC,mBAAoB,CAAE,iBAAkB,KAAM,MAAO,GAAI,CAAC,EAC3D,CAAC,sBAAuB,CAAE,GAAGA,EAAO,SAAU,CAAE,CAAC,CACnD,CAAC,EAAE,aAAc,CAACE,EAAQC,IAAQ,CAChC,OAAO,2BAAyB,OAAOA,CAAG,EAAE,OAAO,CAAC,EAAE,KAAK,EAAI,CACjE,CAAC,CACH,CAAC",
|
|
6
|
+
"names": ["import_purify_ts", "import_signedDescriptorDto", "valid", "withExtras", "_label", "bad"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var n=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var s=Object.prototype.hasOwnProperty;var x=(t,e)=>{for(var o in e)n(t,o,{get:e[o],enumerable:!0})},C=(t,e,o,m)=>{if(e&&typeof e=="object"||typeof e=="function")for(let c of u(e))!s.call(t,c)&&c!==o&&n(t,c,{get:()=>e[c],enumerable:!(m=p(e,c))||m.enumerable});return t};var b=t=>C(n({},"__esModule",{value:!0}),t);var i={};x(i,{u16Codec:()=>g,u8Codec:()=>f,uIntCodec:()=>d});module.exports=b(i);var r=require("purify-ts");const d=t=>{const e=2**t-1;return r.Codec.custom({decode:o=>typeof o=="number"&&Number.isInteger(o)&&o>=0&&o<=e?(0,r.Right)(o):(0,r.Left)(`Expected a u${t} integer (0..=${e})`),encode:o=>o})},f=d(8),g=d(16);0&&(module.exports={u16Codec,u8Codec,uIntCodec});
|
|
2
|
+
//# sourceMappingURL=uIntCodec.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/shared/utils/uIntCodec.ts"],
|
|
4
|
+
"sourcesContent": ["import { Codec, Left, Right } from \"purify-ts\";\n\n/**\n * Factory for an unsigned N-bit integer codec (0..=2^bits-1). Decodes only\n * finite integers in that range; everything else (floats, negatives,\n * non-numbers, NaN) returns Left.\n */\nexport const uIntCodec = (bits: number) => {\n const max = 2 ** bits - 1;\n return Codec.custom<number>({\n decode: (value) =>\n typeof value === \"number\" &&\n Number.isInteger(value) &&\n value >= 0 &&\n value <= max\n ? Right(value)\n : Left(`Expected a u${bits} integer (0..=${max})`),\n encode: (value) => value,\n });\n};\n\n/**\n * Codec for an unsigned 8-bit integer (0..=255).\n *\n * Used for byte-wide TLV fields like ALT entry indices.\n */\nexport const u8Codec = uIntCodec(8);\n\n/**\n * Codec for an unsigned 16-bit integer (0..=65535).\n *\n * Used for the enum-variant index, which can range over a uint16.\n */\nexport const u16Codec = uIntCodec(16);\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,cAAAE,EAAA,YAAAC,EAAA,cAAAC,IAAA,eAAAC,EAAAL,GAAA,IAAAM,EAAmC,qBAO5B,MAAMF,EAAaG,GAAiB,CACzC,MAAMC,EAAM,GAAKD,EAAO,EACxB,OAAO,QAAM,OAAe,CAC1B,OAASE,GACP,OAAOA,GAAU,UACjB,OAAO,UAAUA,CAAK,GACtBA,GAAS,GACTA,GAASD,KACL,SAAMC,CAAK,KACX,QAAK,eAAeF,CAAI,iBAAiBC,CAAG,GAAG,EACrD,OAASC,GAAUA,CACrB,CAAC,CACH,EAOaN,EAAUC,EAAU,CAAC,EAOrBF,EAAWE,EAAU,EAAE",
|
|
6
|
+
"names": ["uIntCodec_exports", "__export", "u16Codec", "u8Codec", "uIntCodec", "__toCommonJS", "import_purify_ts", "bits", "max", "value"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var c=require("purify-ts"),t=require("./uIntCodec");describe("uIntCodec",()=>{describe("uIntCodec factory",()=>{it("builds a codec bounded by the given bit width",()=>{const e=(0,t.uIntCodec)(4);expect(e.decode(0)).toEqual((0,c.Right)(0)),expect(e.decode(15)).toEqual((0,c.Right)(15)),expect(e.decode(16)).toEqual((0,c.Left)("Expected a u4 integer (0..=15)"))})}),describe("u8Codec",()=>{it.each([0,1,127,255])("decodes %s as Right",e=>{expect(t.u8Codec.decode(e)).toEqual((0,c.Right)(e))}),it.each([-1,256,1.5,Number.NaN,Number.POSITIVE_INFINITY,Number.NEGATIVE_INFINITY])("rejects out-of-range / non-integer numbers: %s",e=>{expect(t.u8Codec.decode(e)).toEqual((0,c.Left)("Expected a u8 integer (0..=255)"))}),it.each(["0",null,void 0,!0,{},[]])("rejects non-numeric values: %s",e=>{expect(t.u8Codec.decode(e)).toEqual((0,c.Left)("Expected a u8 integer (0..=255)"))}),it("encodes a number as itself",()=>{expect(t.u8Codec.encode(42)).toBe(42)})}),describe("u16Codec",()=>{it.each([0,1,255,256,1e3,65535])("decodes %s as Right",e=>{expect(t.u16Codec.decode(e)).toEqual((0,c.Right)(e))}),it.each([-1,65536,1.5,Number.NaN,Number.POSITIVE_INFINITY,Number.NEGATIVE_INFINITY])("rejects out-of-range / non-integer numbers: %s",e=>{expect(t.u16Codec.decode(e)).toEqual((0,c.Left)("Expected a u16 integer (0..=65535)"))}),it.each(["0",null,void 0,!0,{},[]])("rejects non-numeric values: %s",e=>{expect(t.u16Codec.decode(e)).toEqual((0,c.Left)("Expected a u16 integer (0..=65535)"))}),it("encodes a number as itself",()=>{expect(t.u16Codec.encode(4242)).toBe(4242)})})});
|
|
2
|
+
//# sourceMappingURL=uIntCodec.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/shared/utils/uIntCodec.test.ts"],
|
|
4
|
+
"sourcesContent": ["import { Left, Right } from \"purify-ts\";\n\nimport { u8Codec, u16Codec, uIntCodec } from \"./uIntCodec\";\n\ndescribe(\"uIntCodec\", () => {\n describe(\"uIntCodec factory\", () => {\n it(\"builds a codec bounded by the given bit width\", () => {\n const u4Codec = uIntCodec(4);\n expect(u4Codec.decode(0)).toEqual(Right(0));\n expect(u4Codec.decode(15)).toEqual(Right(15));\n expect(u4Codec.decode(16)).toEqual(\n Left(\"Expected a u4 integer (0..=15)\"),\n );\n });\n });\n\n describe(\"u8Codec\", () => {\n it.each([0, 1, 127, 255])(\"decodes %s as Right\", (n) => {\n expect(u8Codec.decode(n)).toEqual(Right(n));\n });\n\n it.each([\n -1,\n 256,\n 1.5,\n Number.NaN,\n Number.POSITIVE_INFINITY,\n Number.NEGATIVE_INFINITY,\n ])(\"rejects out-of-range / non-integer numbers: %s\", (n) => {\n expect(u8Codec.decode(n)).toEqual(\n Left(\"Expected a u8 integer (0..=255)\"),\n );\n });\n\n it.each([\"0\", null, undefined, true, {}, []])(\n \"rejects non-numeric values: %s\",\n (value) => {\n expect(u8Codec.decode(value)).toEqual(\n Left(\"Expected a u8 integer (0..=255)\"),\n );\n },\n );\n\n it(\"encodes a number as itself\", () => {\n expect(u8Codec.encode(42)).toBe(42);\n });\n });\n\n describe(\"u16Codec\", () => {\n it.each([0, 1, 255, 256, 1000, 65535])(\"decodes %s as Right\", (n) => {\n expect(u16Codec.decode(n)).toEqual(Right(n));\n });\n\n it.each([\n -1,\n 65536,\n 1.5,\n Number.NaN,\n Number.POSITIVE_INFINITY,\n Number.NEGATIVE_INFINITY,\n ])(\"rejects out-of-range / non-integer numbers: %s\", (n) => {\n expect(u16Codec.decode(n)).toEqual(\n Left(\"Expected a u16 integer (0..=65535)\"),\n );\n });\n\n it.each([\"0\", null, undefined, true, {}, []])(\n \"rejects non-numeric values: %s\",\n (value) => {\n expect(u16Codec.decode(value)).toEqual(\n Left(\"Expected a u16 integer (0..=65535)\"),\n );\n },\n );\n\n it(\"encodes a number as itself\", () => {\n expect(u16Codec.encode(4242)).toBe(4242);\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "aAAA,IAAAA,EAA4B,qBAE5BC,EAA6C,uBAE7C,SAAS,YAAa,IAAM,CAC1B,SAAS,oBAAqB,IAAM,CAClC,GAAG,gDAAiD,IAAM,CACxD,MAAMC,KAAU,aAAU,CAAC,EAC3B,OAAOA,EAAQ,OAAO,CAAC,CAAC,EAAE,WAAQ,SAAM,CAAC,CAAC,EAC1C,OAAOA,EAAQ,OAAO,EAAE,CAAC,EAAE,WAAQ,SAAM,EAAE,CAAC,EAC5C,OAAOA,EAAQ,OAAO,EAAE,CAAC,EAAE,WACzB,QAAK,gCAAgC,CACvC,CACF,CAAC,CACH,CAAC,EAED,SAAS,UAAW,IAAM,CACxB,GAAG,KAAK,CAAC,EAAG,EAAG,IAAK,GAAG,CAAC,EAAE,sBAAwBC,GAAM,CACtD,OAAO,UAAQ,OAAOA,CAAC,CAAC,EAAE,WAAQ,SAAMA,CAAC,CAAC,CAC5C,CAAC,EAED,GAAG,KAAK,CACN,GACA,IACA,IACA,OAAO,IACP,OAAO,kBACP,OAAO,iBACT,CAAC,EAAE,iDAAmDA,GAAM,CAC1D,OAAO,UAAQ,OAAOA,CAAC,CAAC,EAAE,WACxB,QAAK,iCAAiC,CACxC,CACF,CAAC,EAED,GAAG,KAAK,CAAC,IAAK,KAAM,OAAW,GAAM,CAAC,EAAG,CAAC,CAAC,CAAC,EAC1C,iCACCC,GAAU,CACT,OAAO,UAAQ,OAAOA,CAAK,CAAC,EAAE,WAC5B,QAAK,iCAAiC,CACxC,CACF,CACF,EAEA,GAAG,6BAA8B,IAAM,CACrC,OAAO,UAAQ,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CACpC,CAAC,CACH,CAAC,EAED,SAAS,WAAY,IAAM,CACzB,GAAG,KAAK,CAAC,EAAG,EAAG,IAAK,IAAK,IAAM,KAAK,CAAC,EAAE,sBAAwBD,GAAM,CACnE,OAAO,WAAS,OAAOA,CAAC,CAAC,EAAE,WAAQ,SAAMA,CAAC,CAAC,CAC7C,CAAC,EAED,GAAG,KAAK,CACN,GACA,MACA,IACA,OAAO,IACP,OAAO,kBACP,OAAO,iBACT,CAAC,EAAE,iDAAmDA,GAAM,CAC1D,OAAO,WAAS,OAAOA,CAAC,CAAC,EAAE,WACzB,QAAK,oCAAoC,CAC3C,CACF,CAAC,EAED,GAAG,KAAK,CAAC,IAAK,KAAM,OAAW,GAAM,CAAC,EAAG,CAAC,CAAC,CAAC,EAC1C,iCACCC,GAAU,CACT,OAAO,WAAS,OAAOA,CAAK,CAAC,EAAE,WAC7B,QAAK,oCAAoC,CAC3C,CACF,CACF,EAEA,GAAG,6BAA8B,IAAM,CACrC,OAAO,WAAS,OAAO,IAAI,CAAC,EAAE,KAAK,IAAI,CACzC,CAAC,CACH,CAAC,CACH,CAAC",
|
|
6
|
+
"names": ["import_purify_ts", "import_uIntCodec", "u4Codec", "n", "value"]
|
|
7
|
+
}
|
package/lib/esm/package.json
CHANGED
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"license": "Apache-2.0",
|
|
36
36
|
"name": "@ledgerhq/context-module",
|
|
37
37
|
"peerDependencies": {
|
|
38
|
-
"@ledgerhq/device-management-kit": "
|
|
38
|
+
"@ledgerhq/device-management-kit": "^1.7.1"
|
|
39
39
|
},
|
|
40
40
|
"private": false,
|
|
41
41
|
"repository": {
|
|
@@ -58,5 +58,5 @@
|
|
|
58
58
|
"watch:builds": "pnpm ldmk-tool watch --entryPoints index.ts,src/**/*.ts --tsconfig tsconfig.prod.json",
|
|
59
59
|
"watch:types": "concurrently \"tsc --watch -p tsconfig.prod.json\" \"tsc-alias --watch -p tsconfig.prod.json\""
|
|
60
60
|
},
|
|
61
|
-
"version": "2.
|
|
61
|
+
"version": "2.2.0"
|
|
62
62
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{makeContainer as
|
|
1
|
+
import{makeContainer as x}from"./di";import{accountOwnershipTypes as g}from"./modules/concordium/account-ownership/di/accountOwnershipTypes";import{calldataTypes as u}from"./modules/ethereum/calldata/di/calldataTypes";import{dynamicNetworkTypes as f}from"./modules/ethereum/dynamic-network/di/dynamicNetworkTypes";import{externalPluginTypes as L}from"./modules/ethereum/external-plugin/di/externalPluginTypes";import{gatedSigningTypes as p}from"./modules/ethereum/gated-signing/di/gatedSigningTypes";import{nftTypes as l}from"./modules/ethereum/nft/di/nftTypes";import{proxyTypes as y}from"./modules/ethereum/proxy/di/proxyTypes";import{safeTypes as h}from"./modules/ethereum/safe/di/safeTypes";import{tokenTypes as C}from"./modules/ethereum/token/di/tokenTypes";import{trustedNameTypes as m}from"./modules/ethereum/trusted-name/di/trustedNameTypes";import{typedDataTypes as T}from"./modules/ethereum/typed-data/di/typedDataTypes";import{reporterTypes as c}from"./modules/multichain/reporter/di/reporterTypes";import{transactionCheckTypes as s}from"./modules/multichain/transaction-check/di/transactionCheckTypes";import{altResolutionTypes as _}from"./modules/solana/alt-resolution/di/altResolutionTypes";import{enumVariantTypes as S}from"./modules/solana/enum-variant/di/enumVariantTypes";import{instructionInfoTypes as D}from"./modules/solana/instruction-info/di/instructionInfoTypes";import{lifiTypes as R}from"./modules/solana/lifi/di/lifiTypes";import{ownerInfoTypes as k}from"./modules/solana/owner-info/di/ownerInfoTypes";import{tokenTypes as v}from"./modules/solana/token/di/tokenTypes";import{tokenAccountStateTypes as F}from"./modules/solana/token-account-state/di/tokenAccountStateTypes";import{tokenInfoTypes as w}from"./modules/solana/token-info/di/tokenInfoTypes";import{solanaTrustedNameTypes as B}from"./modules/solana/trusted-name/di/trustedNameTypes";import{ContextModuleChainID as o}from"./shared/domain/ContextModuleChainID";import{ClearSignContextType as i}from"./shared/model/ClearSignContext";class ne{_container;_config;_loaders;_typedDataLoader;_fieldLoaders;_blindSigningReporter;constructor(e){this._config=e,this._container=x({config:e}),this._loaders=e.defaultLoaders?this._getDefaultLoaders():[],this._loaders.push(...e.customLoaders),this._fieldLoaders=e.defaultFieldLoaders?this._getDefaultFieldLoaders():[],this._fieldLoaders.push(...e.customFieldLoaders),this._typedDataLoader=e.customTypedDataLoader??this._getDefaultTypedDataLoader(),this._blindSigningReporter=e.customBlindSigningReporter??this._getBlindSigningReporter()}_getDefaultFieldLoaders(){return this._config.chain!==o.Ethereum?[]:[this._container.get(l.NftContextFieldLoader),this._container.get(C.TokenContextFieldLoader),this._container.get(m.TrustedNameContextFieldLoader),this._container.get(y.ProxyContextFieldLoader)]}_getDefaultLoaders(){const{chain:e}=this._config;switch(e){case o.Ethereum:return[this._container.get(L.ExternalPluginContextLoader),this._container.get(m.TrustedNameContextLoader),this._container.get(l.NftContextLoader),this._container.get(C.TokenContextLoader),this._container.get(u.CalldataContextLoader),this._container.get(f.DynamicNetworkContextLoader),this._container.get(h.SafeAddressLoader),this._container.get(p.GatedSigningContextLoader),this._container.get(p.GatedSigningTypedDataContextLoader),this._container.get(s.TransactionCheckLoader),this._container.get(s.TypedDataCheckLoader)];case o.Solana:return[this._container.get(v.TokenContextLoader),this._container.get(R.LifiContextLoader),this._container.get(k.OwnerInfoContextLoader),this._container.get(s.TransactionCheckLoader),this._container.get(D.InstructionInfoContextLoader),this._container.get(S.EnumVariantContextLoader),this._container.get(w.TokenInfoContextLoader),this._container.get(F.TokenAccountStateContextLoader),this._container.get(_.AltResolutionContextLoader),this._container.get(B.SolanaTrustedNameContextLoader)];case o.Concordium:return[this._container.get(g.AccountOwnershipContextLoader)];default:{const t=e;return[]}}}_getDefaultTypedDataLoader(){return this._config.chain!==o.Ethereum?{load:()=>Promise.reject(new Error("[ContextModule] getTypedDataFilters is not supported for this chain"))}:this._container.get(T.TypedDataContextLoader)}_getBlindSigningReporter(){return this._container.isBound(c.BlindSigningReporter)?this._container.get(c.BlindSigningReporter):null}async getContexts(e,t){const r=Object.values(i),a=this._loaders.filter(d=>d.canHandle(e,t??r)).map(d=>d.load(e));return(await Promise.all(a)).flat()}async getFieldContext(e,t){const r=this._fieldLoaders.filter(n=>n.canHandle(e,t));if(r.length===0)return Promise.resolve({type:i.ERROR,error:new Error(`Loader not found for field: ${e} and expected type: ${t}`)});for(const n of r){const a=await n.loadField(e);if(a.type!==i.ERROR)return a}return{type:i.ERROR,error:new Error(`Loader not found for field: ${e} and expected type: ${t}`)}}async getTypedDataFilters(e){return this._typedDataLoader.load(e)}async report(e){await this._blindSigningReporter?.report(e)}}export{ne as DefaultContextModule};
|
|
2
2
|
//# sourceMappingURL=DefaultContextModule.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/DefaultContextModule.ts"],
|
|
4
|
-
"sourcesContent": ["import { type Container } from \"inversify\";\n\nimport {\n type ContextModuleLoaderConfig,\n type ContextModuleServiceConfig,\n} from \"@/config/model/ContextModuleConfig\";\nimport { type ContextModule } from \"@/ContextModule\";\nimport { makeContainer } from \"@/di\";\nimport { accountOwnershipTypes } from \"@/modules/concordium/account-ownership/di/accountOwnershipTypes\";\nimport { calldataTypes } from \"@/modules/ethereum/calldata/di/calldataTypes\";\nimport { dynamicNetworkTypes } from \"@/modules/ethereum/dynamic-network/di/dynamicNetworkTypes\";\nimport { externalPluginTypes } from \"@/modules/ethereum/external-plugin/di/externalPluginTypes\";\nimport { gatedSigningTypes } from \"@/modules/ethereum/gated-signing/di/gatedSigningTypes\";\nimport type { TypedDataClearSignContext } from \"@/modules/ethereum/model/TypedDataClearSignContext\";\nimport type { TypedDataContext } from \"@/modules/ethereum/model/TypedDataContext\";\nimport { nftTypes } from \"@/modules/ethereum/nft/di/nftTypes\";\nimport { proxyTypes } from \"@/modules/ethereum/proxy/di/proxyTypes\";\nimport { safeTypes } from \"@/modules/ethereum/safe/di/safeTypes\";\nimport { tokenTypes as ethereumTokenTypes } from \"@/modules/ethereum/token/di/tokenTypes\";\nimport { trustedNameTypes } from \"@/modules/ethereum/trusted-name/di/trustedNameTypes\";\nimport { typedDataTypes } from \"@/modules/ethereum/typed-data/di/typedDataTypes\";\nimport type { TypedDataContextLoader } from \"@/modules/ethereum/typed-data/domain/TypedDataContextLoader\";\nimport { type BlindSigningReportParams } from \"@/modules/multichain/reporter/data/BlindSigningReporterDatasource\";\nimport { reporterTypes } from \"@/modules/multichain/reporter/di/reporterTypes\";\nimport { type BlindSigningReporter } from \"@/modules/multichain/reporter/domain/BlindSigningReporter\";\nimport { transactionCheckTypes } from \"@/modules/multichain/transaction-check/di/transactionCheckTypes\";\nimport { lifiTypes } from \"@/modules/solana/lifi/di/lifiTypes\";\nimport { ownerInfoTypes } from \"@/modules/solana/owner-info/di/ownerInfoTypes\";\nimport { tokenTypes as solanaTokenTypes } from \"@/modules/solana/token/di/tokenTypes\";\nimport { type ContextFieldLoader } from \"@/shared/domain/ContextFieldLoader\";\nimport { type ContextLoader } from \"@/shared/domain/ContextLoader\";\nimport { ContextModuleChainID } from \"@/shared/domain/ContextModuleChainID\";\nimport {\n type ClearSignContext,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\n\nexport class DefaultContextModule implements ContextModule {\n private _container: Container;\n private _config: ContextModuleServiceConfig & ContextModuleLoaderConfig;\n private _loaders: ContextLoader<unknown>[];\n private _typedDataLoader: TypedDataContextLoader;\n private _fieldLoaders: ContextFieldLoader<unknown>[];\n private _blindSigningReporter: BlindSigningReporter | null;\n\n constructor(args: ContextModuleServiceConfig & ContextModuleLoaderConfig) {\n this._config = args;\n this._container = makeContainer({ config: args });\n\n this._loaders = args.defaultLoaders ? this._getDefaultLoaders() : [];\n this._loaders.push(...args.customLoaders);\n\n this._fieldLoaders = args.defaultFieldLoaders\n ? this._getDefaultFieldLoaders()\n : [];\n this._fieldLoaders.push(...args.customFieldLoaders);\n\n this._typedDataLoader =\n args.customTypedDataLoader ?? this._getDefaultTypedDataLoader();\n this._blindSigningReporter =\n args.customBlindSigningReporter ?? this._getBlindSigningReporter();\n }\n\n private _getDefaultFieldLoaders(): ContextFieldLoader[] {\n if (this._config.chain !== ContextModuleChainID.Ethereum) return [];\n return [\n this._container.get<ContextFieldLoader>(nftTypes.NftContextFieldLoader),\n this._container.get<ContextFieldLoader>(\n ethereumTokenTypes.TokenContextFieldLoader,\n ),\n this._container.get<ContextFieldLoader>(\n trustedNameTypes.TrustedNameContextFieldLoader,\n ),\n this._container.get<ContextFieldLoader>(\n proxyTypes.ProxyContextFieldLoader,\n ),\n ];\n }\n\n private _getDefaultLoaders(): ContextLoader<unknown>[] {\n const { chain } = this._config;\n switch (chain) {\n case ContextModuleChainID.Ethereum:\n return [\n this._container.get<ContextLoader>(\n externalPluginTypes.ExternalPluginContextLoader,\n ),\n this._container.get<ContextLoader>(\n trustedNameTypes.TrustedNameContextLoader,\n ),\n this._container.get<ContextLoader>(nftTypes.NftContextLoader),\n this._container.get<ContextLoader>(\n ethereumTokenTypes.TokenContextLoader,\n ),\n this._container.get<ContextLoader>(\n calldataTypes.CalldataContextLoader,\n ),\n this._container.get<ContextLoader>(\n dynamicNetworkTypes.DynamicNetworkContextLoader,\n ),\n this._container.get<ContextLoader>(safeTypes.SafeAddressLoader),\n this._container.get<ContextLoader>(\n gatedSigningTypes.GatedSigningContextLoader,\n ),\n this._container.get<ContextLoader>(\n gatedSigningTypes.GatedSigningTypedDataContextLoader,\n ),\n this._container.get<ContextLoader>(\n transactionCheckTypes.TransactionCheckLoader,\n ),\n this._container.get<ContextLoader>(\n transactionCheckTypes.TypedDataCheckLoader,\n ),\n ];\n case ContextModuleChainID.Solana:\n return [\n this._container.get<ContextLoader>(\n solanaTokenTypes.TokenContextLoader,\n ),\n this._container.get<ContextLoader>(lifiTypes.LifiContextLoader),\n this._container.get<ContextLoader>(\n ownerInfoTypes.OwnerInfoContextLoader,\n ),\n this._container.get<ContextLoader>(\n transactionCheckTypes.TransactionCheckLoader,\n ),\n ];\n case ContextModuleChainID.Concordium:\n return [\n this._container.get<ContextLoader>(\n accountOwnershipTypes.AccountOwnershipContextLoader,\n ),\n ];\n default: {\n const exhaustiveCheck: never = chain;\n void exhaustiveCheck;\n return [];\n }\n }\n }\n\n private _getDefaultTypedDataLoader(): TypedDataContextLoader {\n if (this._config.chain !== ContextModuleChainID.Ethereum) {\n return {\n load: () =>\n Promise.reject(\n new Error(\n \"[ContextModule] getTypedDataFilters is not supported for this chain\",\n ),\n ),\n };\n }\n return this._container.get<TypedDataContextLoader>(\n typedDataTypes.TypedDataContextLoader,\n );\n }\n\n private _getBlindSigningReporter(): BlindSigningReporter | null {\n if (this._container.isBound(reporterTypes.BlindSigningReporter)) {\n return this._container.get<BlindSigningReporter>(\n reporterTypes.BlindSigningReporter,\n );\n }\n return null;\n }\n\n public async getContexts(\n input: unknown,\n expectedTypes?: ClearSignContextType[],\n ): Promise<ClearSignContext[]> {\n const allContextTypes = Object.values(ClearSignContextType);\n const loaders = this._loaders.filter((l) =>\n l.canHandle(input, expectedTypes ?? allContextTypes),\n );\n const promises = loaders.map((fetcher) => fetcher.load(input));\n const responses = await Promise.all(promises);\n return responses.flat();\n }\n\n public async getFieldContext<TInput>(\n field: TInput,\n expectedType: ClearSignContextType,\n ): Promise<ClearSignContext> {\n const loaders = this._fieldLoaders.filter((l) =>\n l.canHandle(field, expectedType),\n );\n if (loaders.length === 0) {\n return Promise.resolve({\n type: ClearSignContextType.ERROR,\n error: new Error(\n `Loader not found for field: ${field} and expected type: ${expectedType}`,\n ),\n });\n }\n\n for (const loader of loaders) {\n const context = await loader.loadField(field);\n if (context.type !== ClearSignContextType.ERROR) {\n return context;\n }\n }\n\n return {\n type: ClearSignContextType.ERROR,\n error: new Error(\n `Loader not found for field: ${field} and expected type: ${expectedType}`,\n ),\n };\n }\n\n public async getTypedDataFilters(\n typedData: TypedDataContext,\n ): Promise<TypedDataClearSignContext> {\n return this._typedDataLoader.load(typedData);\n }\n\n public async report(params: BlindSigningReportParams): Promise<void> {\n await this._blindSigningReporter?.report(params);\n }\n}\n"],
|
|
5
|
-
"mappings": "AAOA,OAAS,iBAAAA,MAAqB,OAC9B,OAAS,yBAAAC,MAA6B,kEACtC,OAAS,iBAAAC,MAAqB,+CAC9B,OAAS,uBAAAC,MAA2B,4DACpC,OAAS,uBAAAC,MAA2B,4DACpC,OAAS,qBAAAC,MAAyB,wDAGlC,OAAS,YAAAC,MAAgB,qCACzB,OAAS,cAAAC,MAAkB,yCAC3B,OAAS,aAAAC,MAAiB,uCAC1B,OAAS,cAAcC,MAA0B,yCACjD,OAAS,oBAAAC,MAAwB,sDACjC,OAAS,kBAAAC,MAAsB,kDAG/B,OAAS,iBAAAC,MAAqB,iDAE9B,OAAS,yBAAAC,MAA6B,kEACtC,OAAS,aAAAC,MAAiB,qCAC1B,OAAS,kBAAAC,MAAsB,gDAC/B,OAAS,cAAcC,MAAwB,
|
|
6
|
-
"names": ["makeContainer", "accountOwnershipTypes", "calldataTypes", "dynamicNetworkTypes", "externalPluginTypes", "gatedSigningTypes", "nftTypes", "proxyTypes", "safeTypes", "ethereumTokenTypes", "trustedNameTypes", "typedDataTypes", "reporterTypes", "transactionCheckTypes", "lifiTypes", "ownerInfoTypes", "solanaTokenTypes", "ContextModuleChainID", "ClearSignContextType", "DefaultContextModule", "args", "chain", "exhaustiveCheck", "input", "expectedTypes", "allContextTypes", "promises", "l", "fetcher", "field", "expectedType", "loaders", "loader", "context", "typedData", "params"]
|
|
4
|
+
"sourcesContent": ["import { type Container } from \"inversify\";\n\nimport {\n type ContextModuleLoaderConfig,\n type ContextModuleServiceConfig,\n} from \"@/config/model/ContextModuleConfig\";\nimport { type ContextModule } from \"@/ContextModule\";\nimport { makeContainer } from \"@/di\";\nimport { accountOwnershipTypes } from \"@/modules/concordium/account-ownership/di/accountOwnershipTypes\";\nimport { calldataTypes } from \"@/modules/ethereum/calldata/di/calldataTypes\";\nimport { dynamicNetworkTypes } from \"@/modules/ethereum/dynamic-network/di/dynamicNetworkTypes\";\nimport { externalPluginTypes } from \"@/modules/ethereum/external-plugin/di/externalPluginTypes\";\nimport { gatedSigningTypes } from \"@/modules/ethereum/gated-signing/di/gatedSigningTypes\";\nimport type { TypedDataClearSignContext } from \"@/modules/ethereum/model/TypedDataClearSignContext\";\nimport type { TypedDataContext } from \"@/modules/ethereum/model/TypedDataContext\";\nimport { nftTypes } from \"@/modules/ethereum/nft/di/nftTypes\";\nimport { proxyTypes } from \"@/modules/ethereum/proxy/di/proxyTypes\";\nimport { safeTypes } from \"@/modules/ethereum/safe/di/safeTypes\";\nimport { tokenTypes as ethereumTokenTypes } from \"@/modules/ethereum/token/di/tokenTypes\";\nimport { trustedNameTypes } from \"@/modules/ethereum/trusted-name/di/trustedNameTypes\";\nimport { typedDataTypes } from \"@/modules/ethereum/typed-data/di/typedDataTypes\";\nimport type { TypedDataContextLoader } from \"@/modules/ethereum/typed-data/domain/TypedDataContextLoader\";\nimport { type BlindSigningReportParams } from \"@/modules/multichain/reporter/data/BlindSigningReporterDatasource\";\nimport { reporterTypes } from \"@/modules/multichain/reporter/di/reporterTypes\";\nimport { type BlindSigningReporter } from \"@/modules/multichain/reporter/domain/BlindSigningReporter\";\nimport { transactionCheckTypes } from \"@/modules/multichain/transaction-check/di/transactionCheckTypes\";\nimport { altResolutionTypes } from \"@/modules/solana/alt-resolution/di/altResolutionTypes\";\nimport { enumVariantTypes } from \"@/modules/solana/enum-variant/di/enumVariantTypes\";\nimport { instructionInfoTypes } from \"@/modules/solana/instruction-info/di/instructionInfoTypes\";\nimport { lifiTypes } from \"@/modules/solana/lifi/di/lifiTypes\";\nimport { ownerInfoTypes } from \"@/modules/solana/owner-info/di/ownerInfoTypes\";\nimport { tokenTypes as solanaTokenTypes } from \"@/modules/solana/token/di/tokenTypes\";\nimport { tokenAccountStateTypes } from \"@/modules/solana/token-account-state/di/tokenAccountStateTypes\";\nimport { tokenInfoTypes } from \"@/modules/solana/token-info/di/tokenInfoTypes\";\nimport { solanaTrustedNameTypes } from \"@/modules/solana/trusted-name/di/trustedNameTypes\";\nimport { type ContextFieldLoader } from \"@/shared/domain/ContextFieldLoader\";\nimport { type ContextLoader } from \"@/shared/domain/ContextLoader\";\nimport { ContextModuleChainID } from \"@/shared/domain/ContextModuleChainID\";\nimport {\n type ClearSignContext,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\n\nexport class DefaultContextModule implements ContextModule {\n private _container: Container;\n private _config: ContextModuleServiceConfig & ContextModuleLoaderConfig;\n private _loaders: ContextLoader<unknown>[];\n private _typedDataLoader: TypedDataContextLoader;\n private _fieldLoaders: ContextFieldLoader<unknown>[];\n private _blindSigningReporter: BlindSigningReporter | null;\n\n constructor(args: ContextModuleServiceConfig & ContextModuleLoaderConfig) {\n this._config = args;\n this._container = makeContainer({ config: args });\n\n this._loaders = args.defaultLoaders ? this._getDefaultLoaders() : [];\n this._loaders.push(...args.customLoaders);\n\n this._fieldLoaders = args.defaultFieldLoaders\n ? this._getDefaultFieldLoaders()\n : [];\n this._fieldLoaders.push(...args.customFieldLoaders);\n\n this._typedDataLoader =\n args.customTypedDataLoader ?? this._getDefaultTypedDataLoader();\n this._blindSigningReporter =\n args.customBlindSigningReporter ?? this._getBlindSigningReporter();\n }\n\n private _getDefaultFieldLoaders(): ContextFieldLoader[] {\n if (this._config.chain !== ContextModuleChainID.Ethereum) return [];\n return [\n this._container.get<ContextFieldLoader>(nftTypes.NftContextFieldLoader),\n this._container.get<ContextFieldLoader>(\n ethereumTokenTypes.TokenContextFieldLoader,\n ),\n this._container.get<ContextFieldLoader>(\n trustedNameTypes.TrustedNameContextFieldLoader,\n ),\n this._container.get<ContextFieldLoader>(\n proxyTypes.ProxyContextFieldLoader,\n ),\n ];\n }\n\n private _getDefaultLoaders(): ContextLoader<unknown>[] {\n const { chain } = this._config;\n switch (chain) {\n case ContextModuleChainID.Ethereum:\n return [\n this._container.get<ContextLoader>(\n externalPluginTypes.ExternalPluginContextLoader,\n ),\n this._container.get<ContextLoader>(\n trustedNameTypes.TrustedNameContextLoader,\n ),\n this._container.get<ContextLoader>(nftTypes.NftContextLoader),\n this._container.get<ContextLoader>(\n ethereumTokenTypes.TokenContextLoader,\n ),\n this._container.get<ContextLoader>(\n calldataTypes.CalldataContextLoader,\n ),\n this._container.get<ContextLoader>(\n dynamicNetworkTypes.DynamicNetworkContextLoader,\n ),\n this._container.get<ContextLoader>(safeTypes.SafeAddressLoader),\n this._container.get<ContextLoader>(\n gatedSigningTypes.GatedSigningContextLoader,\n ),\n this._container.get<ContextLoader>(\n gatedSigningTypes.GatedSigningTypedDataContextLoader,\n ),\n this._container.get<ContextLoader>(\n transactionCheckTypes.TransactionCheckLoader,\n ),\n this._container.get<ContextLoader>(\n transactionCheckTypes.TypedDataCheckLoader,\n ),\n ];\n case ContextModuleChainID.Solana:\n return [\n this._container.get<ContextLoader>(\n solanaTokenTypes.TokenContextLoader,\n ),\n this._container.get<ContextLoader>(lifiTypes.LifiContextLoader),\n this._container.get<ContextLoader>(\n ownerInfoTypes.OwnerInfoContextLoader,\n ),\n this._container.get<ContextLoader>(\n transactionCheckTypes.TransactionCheckLoader,\n ),\n this._container.get<ContextLoader>(\n instructionInfoTypes.InstructionInfoContextLoader,\n ),\n this._container.get<ContextLoader>(\n enumVariantTypes.EnumVariantContextLoader,\n ),\n this._container.get<ContextLoader>(\n tokenInfoTypes.TokenInfoContextLoader,\n ),\n this._container.get<ContextLoader>(\n tokenAccountStateTypes.TokenAccountStateContextLoader,\n ),\n this._container.get<ContextLoader>(\n altResolutionTypes.AltResolutionContextLoader,\n ),\n this._container.get<ContextLoader>(\n solanaTrustedNameTypes.SolanaTrustedNameContextLoader,\n ),\n ];\n case ContextModuleChainID.Concordium:\n return [\n this._container.get<ContextLoader>(\n accountOwnershipTypes.AccountOwnershipContextLoader,\n ),\n ];\n default: {\n const exhaustiveCheck: never = chain;\n void exhaustiveCheck;\n return [];\n }\n }\n }\n\n private _getDefaultTypedDataLoader(): TypedDataContextLoader {\n if (this._config.chain !== ContextModuleChainID.Ethereum) {\n return {\n load: () =>\n Promise.reject(\n new Error(\n \"[ContextModule] getTypedDataFilters is not supported for this chain\",\n ),\n ),\n };\n }\n return this._container.get<TypedDataContextLoader>(\n typedDataTypes.TypedDataContextLoader,\n );\n }\n\n private _getBlindSigningReporter(): BlindSigningReporter | null {\n if (this._container.isBound(reporterTypes.BlindSigningReporter)) {\n return this._container.get<BlindSigningReporter>(\n reporterTypes.BlindSigningReporter,\n );\n }\n return null;\n }\n\n public async getContexts(\n input: unknown,\n expectedTypes?: ClearSignContextType[],\n ): Promise<ClearSignContext[]> {\n const allContextTypes = Object.values(ClearSignContextType);\n const loaders = this._loaders.filter((l) =>\n l.canHandle(input, expectedTypes ?? allContextTypes),\n );\n const promises = loaders.map((fetcher) => fetcher.load(input));\n const responses = await Promise.all(promises);\n return responses.flat();\n }\n\n public async getFieldContext<TInput>(\n field: TInput,\n expectedType: ClearSignContextType,\n ): Promise<ClearSignContext> {\n const loaders = this._fieldLoaders.filter((l) =>\n l.canHandle(field, expectedType),\n );\n if (loaders.length === 0) {\n return Promise.resolve({\n type: ClearSignContextType.ERROR,\n error: new Error(\n `Loader not found for field: ${field} and expected type: ${expectedType}`,\n ),\n });\n }\n\n for (const loader of loaders) {\n const context = await loader.loadField(field);\n if (context.type !== ClearSignContextType.ERROR) {\n return context;\n }\n }\n\n return {\n type: ClearSignContextType.ERROR,\n error: new Error(\n `Loader not found for field: ${field} and expected type: ${expectedType}`,\n ),\n };\n }\n\n public async getTypedDataFilters(\n typedData: TypedDataContext,\n ): Promise<TypedDataClearSignContext> {\n return this._typedDataLoader.load(typedData);\n }\n\n public async report(params: BlindSigningReportParams): Promise<void> {\n await this._blindSigningReporter?.report(params);\n }\n}\n"],
|
|
5
|
+
"mappings": "AAOA,OAAS,iBAAAA,MAAqB,OAC9B,OAAS,yBAAAC,MAA6B,kEACtC,OAAS,iBAAAC,MAAqB,+CAC9B,OAAS,uBAAAC,MAA2B,4DACpC,OAAS,uBAAAC,MAA2B,4DACpC,OAAS,qBAAAC,MAAyB,wDAGlC,OAAS,YAAAC,MAAgB,qCACzB,OAAS,cAAAC,MAAkB,yCAC3B,OAAS,aAAAC,MAAiB,uCAC1B,OAAS,cAAcC,MAA0B,yCACjD,OAAS,oBAAAC,MAAwB,sDACjC,OAAS,kBAAAC,MAAsB,kDAG/B,OAAS,iBAAAC,MAAqB,iDAE9B,OAAS,yBAAAC,MAA6B,kEACtC,OAAS,sBAAAC,MAA0B,wDACnC,OAAS,oBAAAC,MAAwB,oDACjC,OAAS,wBAAAC,MAA4B,4DACrC,OAAS,aAAAC,MAAiB,qCAC1B,OAAS,kBAAAC,MAAsB,gDAC/B,OAAS,cAAcC,MAAwB,uCAC/C,OAAS,0BAAAC,MAA8B,iEACvC,OAAS,kBAAAC,MAAsB,gDAC/B,OAAS,0BAAAC,MAA8B,oDAGvC,OAAS,wBAAAC,MAA4B,uCACrC,OAEE,wBAAAC,MACK,kCAEA,MAAMC,EAA8C,CACjD,WACA,QACA,SACA,iBACA,cACA,sBAER,YAAYC,EAA8D,CACxE,KAAK,QAAUA,EACf,KAAK,WAAa1B,EAAc,CAAE,OAAQ0B,CAAK,CAAC,EAEhD,KAAK,SAAWA,EAAK,eAAiB,KAAK,mBAAmB,EAAI,CAAC,EACnE,KAAK,SAAS,KAAK,GAAGA,EAAK,aAAa,EAExC,KAAK,cAAgBA,EAAK,oBACtB,KAAK,wBAAwB,EAC7B,CAAC,EACL,KAAK,cAAc,KAAK,GAAGA,EAAK,kBAAkB,EAElD,KAAK,iBACHA,EAAK,uBAAyB,KAAK,2BAA2B,EAChE,KAAK,sBACHA,EAAK,4BAA8B,KAAK,yBAAyB,CACrE,CAEQ,yBAAgD,CACtD,OAAI,KAAK,QAAQ,QAAUH,EAAqB,SAAiB,CAAC,EAC3D,CACL,KAAK,WAAW,IAAwBjB,EAAS,qBAAqB,EACtE,KAAK,WAAW,IACdG,EAAmB,uBACrB,EACA,KAAK,WAAW,IACdC,EAAiB,6BACnB,EACA,KAAK,WAAW,IACdH,EAAW,uBACb,CACF,CACF,CAEQ,oBAA+C,CACrD,KAAM,CAAE,MAAAoB,CAAM,EAAI,KAAK,QACvB,OAAQA,EAAO,CACb,KAAKJ,EAAqB,SACxB,MAAO,CACL,KAAK,WAAW,IACdnB,EAAoB,2BACtB,EACA,KAAK,WAAW,IACdM,EAAiB,wBACnB,EACA,KAAK,WAAW,IAAmBJ,EAAS,gBAAgB,EAC5D,KAAK,WAAW,IACdG,EAAmB,kBACrB,EACA,KAAK,WAAW,IACdP,EAAc,qBAChB,EACA,KAAK,WAAW,IACdC,EAAoB,2BACtB,EACA,KAAK,WAAW,IAAmBK,EAAU,iBAAiB,EAC9D,KAAK,WAAW,IACdH,EAAkB,yBACpB,EACA,KAAK,WAAW,IACdA,EAAkB,kCACpB,EACA,KAAK,WAAW,IACdQ,EAAsB,sBACxB,EACA,KAAK,WAAW,IACdA,EAAsB,oBACxB,CACF,EACF,KAAKU,EAAqB,OACxB,MAAO,CACL,KAAK,WAAW,IACdJ,EAAiB,kBACnB,EACA,KAAK,WAAW,IAAmBF,EAAU,iBAAiB,EAC9D,KAAK,WAAW,IACdC,EAAe,sBACjB,EACA,KAAK,WAAW,IACdL,EAAsB,sBACxB,EACA,KAAK,WAAW,IACdG,EAAqB,4BACvB,EACA,KAAK,WAAW,IACdD,EAAiB,wBACnB,EACA,KAAK,WAAW,IACdM,EAAe,sBACjB,EACA,KAAK,WAAW,IACdD,EAAuB,8BACzB,EACA,KAAK,WAAW,IACdN,EAAmB,0BACrB,EACA,KAAK,WAAW,IACdQ,EAAuB,8BACzB,CACF,EACF,KAAKC,EAAqB,WACxB,MAAO,CACL,KAAK,WAAW,IACdtB,EAAsB,6BACxB,CACF,EACF,QAAS,CACP,MAAM2B,EAAyBD,EAE/B,MAAO,CAAC,CACV,CACF,CACF,CAEQ,4BAAqD,CAC3D,OAAI,KAAK,QAAQ,QAAUJ,EAAqB,SACvC,CACL,KAAM,IACJ,QAAQ,OACN,IAAI,MACF,qEACF,CACF,CACJ,EAEK,KAAK,WAAW,IACrBZ,EAAe,sBACjB,CACF,CAEQ,0BAAwD,CAC9D,OAAI,KAAK,WAAW,QAAQC,EAAc,oBAAoB,EACrD,KAAK,WAAW,IACrBA,EAAc,oBAChB,EAEK,IACT,CAEA,MAAa,YACXiB,EACAC,EAC6B,CAC7B,MAAMC,EAAkB,OAAO,OAAOP,CAAoB,EAIpDQ,EAHU,KAAK,SAAS,OAAQC,GACpCA,EAAE,UAAUJ,EAAOC,GAAiBC,CAAe,CACrD,EACyB,IAAKG,GAAYA,EAAQ,KAAKL,CAAK,CAAC,EAE7D,OADkB,MAAM,QAAQ,IAAIG,CAAQ,GAC3B,KAAK,CACxB,CAEA,MAAa,gBACXG,EACAC,EAC2B,CAC3B,MAAMC,EAAU,KAAK,cAAc,OAAQJ,GACzCA,EAAE,UAAUE,EAAOC,CAAY,CACjC,EACA,GAAIC,EAAQ,SAAW,EACrB,OAAO,QAAQ,QAAQ,CACrB,KAAMb,EAAqB,MAC3B,MAAO,IAAI,MACT,+BAA+BW,CAAK,uBAAuBC,CAAY,EACzE,CACF,CAAC,EAGH,UAAWE,KAAUD,EAAS,CAC5B,MAAME,EAAU,MAAMD,EAAO,UAAUH,CAAK,EAC5C,GAAII,EAAQ,OAASf,EAAqB,MACxC,OAAOe,CAEX,CAEA,MAAO,CACL,KAAMf,EAAqB,MAC3B,MAAO,IAAI,MACT,+BAA+BW,CAAK,uBAAuBC,CAAY,EACzE,CACF,CACF,CAEA,MAAa,oBACXI,EACoC,CACpC,OAAO,KAAK,iBAAiB,KAAKA,CAAS,CAC7C,CAEA,MAAa,OAAOC,EAAiD,CACnE,MAAM,KAAK,uBAAuB,OAAOA,CAAM,CACjD,CACF",
|
|
6
|
+
"names": ["makeContainer", "accountOwnershipTypes", "calldataTypes", "dynamicNetworkTypes", "externalPluginTypes", "gatedSigningTypes", "nftTypes", "proxyTypes", "safeTypes", "ethereumTokenTypes", "trustedNameTypes", "typedDataTypes", "reporterTypes", "transactionCheckTypes", "altResolutionTypes", "enumVariantTypes", "instructionInfoTypes", "lifiTypes", "ownerInfoTypes", "solanaTokenTypes", "tokenAccountStateTypes", "tokenInfoTypes", "solanaTrustedNameTypes", "ContextModuleChainID", "ClearSignContextType", "DefaultContextModule", "args", "chain", "exhaustiveCheck", "input", "expectedTypes", "allContextTypes", "promises", "l", "fetcher", "field", "expectedType", "loaders", "loader", "context", "typedData", "params"]
|
|
7
7
|
}
|