@ledgerhq/context-module 1.14.1 → 1.16.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/README.md +10 -0
- package/lib/cjs/package.json +2 -2
- package/lib/cjs/src/ContextModule.js +1 -1
- package/lib/cjs/src/ContextModule.js.map +1 -1
- package/lib/cjs/src/ContextModuleBuilder.js +1 -1
- package/lib/cjs/src/ContextModuleBuilder.js.map +3 -3
- package/lib/cjs/src/ContextModuleBuilder.test.js +1 -1
- package/lib/cjs/src/ContextModuleBuilder.test.js.map +3 -3
- package/lib/cjs/src/DefaultContextModule.js +1 -1
- package/lib/cjs/src/DefaultContextModule.js.map +3 -3
- package/lib/cjs/src/DefaultContextModule.test.js +1 -1
- package/lib/cjs/src/DefaultContextModule.test.js.map +2 -2
- package/lib/cjs/src/calldata/data/HttpCalldataDescriptorDataSource.js +1 -1
- package/lib/cjs/src/calldata/data/HttpCalldataDescriptorDataSource.js.map +2 -2
- package/lib/cjs/src/calldata/data/HttpCalldataDescriptorDataSource.test.js.map +1 -1
- package/lib/cjs/src/config/di/configModuleFactory.js +1 -1
- package/lib/cjs/src/config/di/configModuleFactory.js.map +2 -2
- package/lib/cjs/src/config/model/ContextModuleConfig.js +1 -1
- package/lib/cjs/src/config/model/ContextModuleConfig.js.map +1 -1
- package/lib/cjs/src/di.js +1 -1
- package/lib/cjs/src/di.js.map +3 -3
- package/lib/cjs/src/dynamic-network/data/HttpDynamicNetworkDataSource.js +1 -1
- package/lib/cjs/src/dynamic-network/data/HttpDynamicNetworkDataSource.js.map +2 -2
- package/lib/cjs/src/dynamic-network/data/HttpDynamicNetworkDataSource.test.js.map +2 -2
- package/lib/cjs/src/dynamic-network/domain/DynamicNetworkContextLoader.js +1 -1
- package/lib/cjs/src/dynamic-network/domain/DynamicNetworkContextLoader.js.map +3 -3
- package/lib/cjs/src/dynamic-network/domain/DynamicNetworkContextLoader.test.js.map +1 -1
- package/lib/cjs/src/external-plugin/data/HttpExternalPluginDataSource.js +1 -1
- package/lib/cjs/src/external-plugin/data/HttpExternalPluginDataSource.js.map +2 -2
- package/lib/cjs/src/external-plugin/data/HttpExternalPluginDataSource.test.js +1 -1
- package/lib/cjs/src/external-plugin/data/HttpExternalPluginDataSource.test.js.map +1 -1
- package/lib/cjs/src/gated-signing/data/GatedDescriptorDataSource.js +2 -0
- package/lib/cjs/src/gated-signing/data/GatedDescriptorDataSource.js.map +7 -0
- package/lib/cjs/src/gated-signing/data/HttpGatedDescriptorDataSource.js +2 -0
- package/lib/cjs/src/gated-signing/data/HttpGatedDescriptorDataSource.js.map +7 -0
- package/lib/cjs/src/gated-signing/data/HttpGatedDescriptorDataSource.test.js +2 -0
- package/lib/cjs/src/gated-signing/data/HttpGatedDescriptorDataSource.test.js.map +7 -0
- package/lib/cjs/src/gated-signing/data/dto/GatedDappsDto.js +2 -0
- package/lib/cjs/src/gated-signing/data/dto/GatedDappsDto.js.map +7 -0
- package/lib/cjs/src/gated-signing/di/gatedSigningModuleFactory.js +2 -0
- package/lib/cjs/src/gated-signing/di/gatedSigningModuleFactory.js.map +7 -0
- package/lib/cjs/src/gated-signing/di/gatedSigningTypes.js +2 -0
- package/lib/cjs/src/gated-signing/di/gatedSigningTypes.js.map +7 -0
- package/lib/cjs/src/gated-signing/domain/GatedSigningContextLoader.js +2 -0
- package/lib/cjs/src/gated-signing/domain/GatedSigningContextLoader.js.map +7 -0
- package/lib/cjs/src/gated-signing/domain/GatedSigningContextLoader.test.js +2 -0
- package/lib/cjs/src/gated-signing/domain/GatedSigningContextLoader.test.js.map +7 -0
- package/lib/cjs/src/gated-signing/domain/GatedSigningTypedDataContextLoader.js +2 -0
- package/lib/cjs/src/gated-signing/domain/GatedSigningTypedDataContextLoader.js.map +7 -0
- package/lib/cjs/src/gated-signing/domain/GatedSigningTypedDataContextLoader.test.js +2 -0
- package/lib/cjs/src/gated-signing/domain/GatedSigningTypedDataContextLoader.test.js.map +7 -0
- package/lib/cjs/src/index.js +1 -1
- package/lib/cjs/src/index.js.map +2 -2
- package/lib/cjs/src/nft/data/HttpNftDataSource.js +1 -1
- package/lib/cjs/src/nft/data/HttpNftDataSource.js.map +2 -2
- package/lib/cjs/src/nft/data/HttpNftDataSource.test.js +1 -1
- package/lib/cjs/src/nft/data/HttpNftDataSource.test.js.map +1 -1
- package/lib/cjs/src/pki/data/HttpPkiCertificateDataSource.js +1 -1
- package/lib/cjs/src/pki/data/HttpPkiCertificateDataSource.js.map +2 -2
- package/lib/cjs/src/pki/data/HttpPkiCertificateDataSource.test.js.map +1 -1
- package/lib/cjs/src/pki/model/KeyId.js +1 -1
- package/lib/cjs/src/pki/model/KeyId.js.map +2 -2
- package/lib/cjs/src/pki/model/KeyUsage.js +1 -1
- package/lib/cjs/src/pki/model/KeyUsage.js.map +2 -2
- package/lib/cjs/src/proxy/data/HttpProxyDataSource.js +1 -1
- package/lib/cjs/src/proxy/data/HttpProxyDataSource.js.map +2 -2
- package/lib/cjs/src/proxy/data/HttpProxyDataSource.test.js.map +1 -1
- package/lib/cjs/src/proxy/data/HttpSafeProxyDataSource.js +1 -1
- package/lib/cjs/src/proxy/data/HttpSafeProxyDataSource.js.map +2 -2
- package/lib/cjs/src/proxy/data/HttpSafeProxyDataSource.test.js.map +1 -1
- package/lib/cjs/src/proxy/di/proxyModuleFactory.js +1 -1
- package/lib/cjs/src/proxy/di/proxyModuleFactory.js.map +3 -3
- package/lib/cjs/src/proxy/di/proxyModuleFactory.test.js +1 -1
- package/lib/cjs/src/proxy/di/proxyModuleFactory.test.js.map +2 -2
- package/lib/cjs/src/reporter/data/BlindSigningReporterDatasource.js +2 -0
- package/lib/cjs/src/reporter/data/BlindSigningReporterDatasource.js.map +7 -0
- package/lib/cjs/src/reporter/data/HttpBlindSigningReporterDatasource.js +2 -0
- package/lib/cjs/src/reporter/data/HttpBlindSigningReporterDatasource.js.map +7 -0
- package/lib/cjs/src/reporter/data/HttpBlindSigningReporterDatasource.test.js +2 -0
- package/lib/cjs/src/reporter/data/HttpBlindSigningReporterDatasource.test.js.map +7 -0
- package/lib/cjs/src/reporter/data/dto/BlindSigningEventDto.js +2 -0
- package/lib/cjs/src/reporter/data/dto/BlindSigningEventDto.js.map +7 -0
- package/lib/cjs/src/reporter/di/reporterModuleFactory.js +2 -0
- package/lib/cjs/src/reporter/di/reporterModuleFactory.js.map +7 -0
- package/lib/cjs/src/reporter/di/reporterTypes.js +2 -0
- package/lib/cjs/src/reporter/di/reporterTypes.js.map +7 -0
- package/lib/cjs/src/reporter/domain/BlindSigningReporter.js +2 -0
- package/lib/cjs/src/reporter/domain/BlindSigningReporter.js.map +7 -0
- package/lib/cjs/src/reporter/domain/DefaultBlindSigningReporter.js +2 -0
- package/lib/cjs/src/reporter/domain/DefaultBlindSigningReporter.js.map +7 -0
- package/lib/cjs/src/reporter/domain/DefaultBlindSigningReporter.test.js +2 -0
- package/lib/cjs/src/reporter/domain/DefaultBlindSigningReporter.test.js.map +7 -0
- package/lib/cjs/src/reporter/model/BlindSigningEvent.js +2 -0
- package/lib/cjs/src/reporter/model/BlindSigningEvent.js.map +7 -0
- package/lib/cjs/src/reporter/model/BlindSigningModelId.js +2 -0
- package/lib/cjs/src/reporter/model/BlindSigningModelId.js.map +7 -0
- package/lib/cjs/src/safe/data/HttpSafeAccountDataSource.js +1 -1
- package/lib/cjs/src/safe/data/HttpSafeAccountDataSource.js.map +2 -2
- package/lib/cjs/src/safe/data/HttpSafeAccountDataSource.test.js +1 -1
- package/lib/cjs/src/safe/data/HttpSafeAccountDataSource.test.js.map +2 -2
- 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/model/SolanaContextTypes.js +1 -1
- package/lib/cjs/src/shared/model/SolanaContextTypes.js.map +1 -1
- package/lib/cjs/src/shared/utils/KeyUsageMapper.js +1 -1
- package/lib/cjs/src/shared/utils/KeyUsageMapper.js.map +2 -2
- package/lib/cjs/src/shared/utils/KeyUsageMapper.test.js +1 -1
- package/lib/cjs/src/shared/utils/KeyUsageMapper.test.js.map +2 -2
- package/lib/cjs/src/solana/data/HttpSolanaOwnerInfoDataSource.js +1 -1
- package/lib/cjs/src/solana/data/HttpSolanaOwnerInfoDataSource.js.map +2 -2
- package/lib/cjs/src/solana/data/HttpSolanaOwnerInfoDataSource.test.js +1 -1
- package/lib/cjs/src/solana/data/HttpSolanaOwnerInfoDataSource.test.js.map +1 -1
- package/lib/cjs/src/solana/domain/DefaultSolanaContextLoader.js +1 -1
- package/lib/cjs/src/solana/domain/DefaultSolanaContextLoader.js.map +3 -3
- package/lib/cjs/src/solana/domain/DefaultSolanaContextLoader.test.js +1 -1
- package/lib/cjs/src/solana/domain/DefaultSolanaContextLoader.test.js.map +1 -1
- package/lib/cjs/src/solana/domain/solanaContextTypes.js.map +1 -1
- package/lib/cjs/src/solanaLifi/data/HttpSolanaLifiDataSource.js +1 -1
- package/lib/cjs/src/solanaLifi/data/HttpSolanaLifiDataSource.js.map +3 -3
- package/lib/cjs/src/solanaLifi/data/HttpSolanaLifiDataSource.test.js +1 -1
- package/lib/cjs/src/solanaLifi/data/HttpSolanaLifiDataSource.test.js.map +3 -3
- package/lib/cjs/src/solanaLifi/data/SolanaLifiDataSource.js +1 -1
- package/lib/cjs/src/solanaLifi/data/SolanaLifiDataSource.js.map +1 -1
- package/lib/cjs/src/solanaLifi/domain/SolanaLifiContextLoader.js +1 -1
- package/lib/cjs/src/solanaLifi/domain/SolanaLifiContextLoader.js.map +3 -3
- package/lib/cjs/src/solanaLifi/domain/SolanaLifiContextLoader.test.js +1 -1
- package/lib/cjs/src/solanaLifi/domain/SolanaLifiContextLoader.test.js.map +3 -3
- package/lib/cjs/src/solanaToken/data/HttpSolanaTokenDataSource.js +1 -1
- package/lib/cjs/src/solanaToken/data/HttpSolanaTokenDataSource.js.map +2 -2
- package/lib/cjs/src/solanaToken/data/HttpSolanaTokenDataSource.test.js +2 -2
- package/lib/cjs/src/solanaToken/data/HttpSolanaTokenDataSource.test.js.map +2 -2
- package/lib/cjs/src/solanaToken/domain/SolanaTokenContextLoader.js +1 -1
- package/lib/cjs/src/solanaToken/domain/SolanaTokenContextLoader.js.map +2 -2
- package/lib/cjs/src/solanaToken/domain/SolanaTokenContextLoader.test.js +1 -1
- package/lib/cjs/src/solanaToken/domain/SolanaTokenContextLoader.test.js.map +1 -1
- package/lib/cjs/src/token/data/HttpTokenDataSource.js +1 -1
- package/lib/cjs/src/token/data/HttpTokenDataSource.js.map +2 -2
- package/lib/cjs/src/token/data/HttpTokenDataSource.test.js.map +1 -1
- package/lib/cjs/src/transaction-check/data/HttpTransactionCheckDataSource.js +1 -1
- package/lib/cjs/src/transaction-check/data/HttpTransactionCheckDataSource.js.map +2 -2
- package/lib/cjs/src/transaction-check/data/HttpTransactionCheckDataSource.test.js.map +1 -1
- package/lib/cjs/src/transaction-check/data/HttpTypedDataCheckDataSource.js.map +2 -2
- package/lib/cjs/src/transaction-check/data/HttpTypedDataCheckDataSource.test.js.map +1 -1
- package/lib/cjs/src/trusted-name/data/HttpTrustedNameDataSource.js +1 -1
- package/lib/cjs/src/trusted-name/data/HttpTrustedNameDataSource.js.map +2 -2
- package/lib/cjs/src/trusted-name/data/HttpTrustedNameDataSource.test.js.map +1 -1
- package/lib/cjs/src/trusted-name/di/trustedNameModuleFactory.js +1 -1
- package/lib/cjs/src/trusted-name/di/trustedNameModuleFactory.js.map +3 -3
- package/lib/cjs/src/typed-data/data/HttpTypedDataDataSource.js +1 -1
- package/lib/cjs/src/typed-data/data/HttpTypedDataDataSource.js.map +3 -3
- package/lib/cjs/src/typed-data/data/HttpTypedDataDataSource.test.js.map +1 -1
- package/lib/cjs/src/typed-data/utils/getSchemaHash.js +2 -0
- package/lib/cjs/src/typed-data/utils/getSchemaHash.js.map +7 -0
- package/lib/cjs/src/typed-data/utils/getSchemaHash.test.js +2 -0
- package/lib/cjs/src/typed-data/utils/getSchemaHash.test.js.map +7 -0
- package/lib/esm/package.json +2 -2
- package/lib/esm/src/ContextModuleBuilder.js +1 -1
- package/lib/esm/src/ContextModuleBuilder.js.map +3 -3
- package/lib/esm/src/ContextModuleBuilder.test.js +1 -1
- package/lib/esm/src/ContextModuleBuilder.test.js.map +3 -3
- package/lib/esm/src/DefaultContextModule.js +1 -1
- package/lib/esm/src/DefaultContextModule.js.map +3 -3
- package/lib/esm/src/DefaultContextModule.test.js +1 -1
- package/lib/esm/src/DefaultContextModule.test.js.map +2 -2
- package/lib/esm/src/calldata/data/HttpCalldataDescriptorDataSource.js +1 -1
- package/lib/esm/src/calldata/data/HttpCalldataDescriptorDataSource.js.map +2 -2
- package/lib/esm/src/calldata/data/HttpCalldataDescriptorDataSource.test.js.map +1 -1
- package/lib/esm/src/config/di/configModuleFactory.js +1 -1
- package/lib/esm/src/config/di/configModuleFactory.js.map +2 -2
- package/lib/esm/src/di.js +1 -1
- package/lib/esm/src/di.js.map +3 -3
- package/lib/esm/src/dynamic-network/data/HttpDynamicNetworkDataSource.js +1 -1
- package/lib/esm/src/dynamic-network/data/HttpDynamicNetworkDataSource.js.map +2 -2
- package/lib/esm/src/dynamic-network/data/HttpDynamicNetworkDataSource.test.js.map +2 -2
- package/lib/esm/src/dynamic-network/domain/DynamicNetworkContextLoader.js +1 -1
- package/lib/esm/src/dynamic-network/domain/DynamicNetworkContextLoader.js.map +3 -3
- package/lib/esm/src/dynamic-network/domain/DynamicNetworkContextLoader.test.js.map +1 -1
- package/lib/esm/src/external-plugin/data/HttpExternalPluginDataSource.js.map +2 -2
- package/lib/esm/src/external-plugin/data/HttpExternalPluginDataSource.test.js.map +1 -1
- package/lib/esm/src/gated-signing/data/GatedDescriptorDataSource.js +1 -0
- package/lib/esm/src/gated-signing/data/GatedDescriptorDataSource.js.map +7 -0
- package/lib/esm/src/gated-signing/data/HttpGatedDescriptorDataSource.js +2 -0
- package/lib/esm/src/gated-signing/data/HttpGatedDescriptorDataSource.js.map +7 -0
- package/lib/esm/src/gated-signing/data/HttpGatedDescriptorDataSource.test.js +2 -0
- package/lib/esm/src/gated-signing/data/HttpGatedDescriptorDataSource.test.js.map +7 -0
- package/lib/esm/src/gated-signing/data/dto/GatedDappsDto.js +1 -0
- package/lib/esm/src/gated-signing/data/dto/GatedDappsDto.js.map +7 -0
- package/lib/esm/src/gated-signing/di/gatedSigningModuleFactory.js +2 -0
- package/lib/esm/src/gated-signing/di/gatedSigningModuleFactory.js.map +7 -0
- package/lib/esm/src/gated-signing/di/gatedSigningTypes.js +2 -0
- package/lib/esm/src/gated-signing/di/gatedSigningTypes.js.map +7 -0
- package/lib/esm/src/gated-signing/domain/GatedSigningContextLoader.js +2 -0
- package/lib/esm/src/gated-signing/domain/GatedSigningContextLoader.js.map +7 -0
- package/lib/esm/src/gated-signing/domain/GatedSigningContextLoader.test.js +2 -0
- package/lib/esm/src/gated-signing/domain/GatedSigningContextLoader.test.js.map +7 -0
- package/lib/esm/src/gated-signing/domain/GatedSigningTypedDataContextLoader.js +2 -0
- package/lib/esm/src/gated-signing/domain/GatedSigningTypedDataContextLoader.js.map +7 -0
- package/lib/esm/src/gated-signing/domain/GatedSigningTypedDataContextLoader.test.js +2 -0
- package/lib/esm/src/gated-signing/domain/GatedSigningTypedDataContextLoader.test.js.map +7 -0
- package/lib/esm/src/index.js +1 -1
- package/lib/esm/src/index.js.map +2 -2
- package/lib/esm/src/nft/data/HttpNftDataSource.js +1 -1
- package/lib/esm/src/nft/data/HttpNftDataSource.js.map +2 -2
- package/lib/esm/src/nft/data/HttpNftDataSource.test.js +1 -1
- package/lib/esm/src/nft/data/HttpNftDataSource.test.js.map +1 -1
- package/lib/esm/src/pki/data/HttpPkiCertificateDataSource.js +1 -1
- package/lib/esm/src/pki/data/HttpPkiCertificateDataSource.js.map +2 -2
- package/lib/esm/src/pki/data/HttpPkiCertificateDataSource.test.js.map +1 -1
- package/lib/esm/src/pki/model/KeyId.js +1 -1
- package/lib/esm/src/pki/model/KeyId.js.map +2 -2
- package/lib/esm/src/pki/model/KeyUsage.js +1 -1
- package/lib/esm/src/pki/model/KeyUsage.js.map +2 -2
- package/lib/esm/src/proxy/data/HttpProxyDataSource.js +1 -1
- package/lib/esm/src/proxy/data/HttpProxyDataSource.js.map +2 -2
- package/lib/esm/src/proxy/data/HttpProxyDataSource.test.js.map +1 -1
- package/lib/esm/src/proxy/data/HttpSafeProxyDataSource.js.map +2 -2
- package/lib/esm/src/proxy/data/HttpSafeProxyDataSource.test.js.map +1 -1
- package/lib/esm/src/proxy/di/proxyModuleFactory.js +1 -1
- package/lib/esm/src/proxy/di/proxyModuleFactory.js.map +3 -3
- package/lib/esm/src/proxy/di/proxyModuleFactory.test.js +1 -1
- package/lib/esm/src/proxy/di/proxyModuleFactory.test.js.map +2 -2
- package/lib/esm/src/reporter/data/BlindSigningReporterDatasource.js +1 -0
- package/lib/esm/src/reporter/data/BlindSigningReporterDatasource.js.map +7 -0
- package/lib/esm/src/reporter/data/HttpBlindSigningReporterDatasource.js +2 -0
- package/lib/esm/src/reporter/data/HttpBlindSigningReporterDatasource.js.map +7 -0
- package/lib/esm/src/reporter/data/HttpBlindSigningReporterDatasource.test.js +2 -0
- package/lib/esm/src/reporter/data/HttpBlindSigningReporterDatasource.test.js.map +7 -0
- package/lib/esm/src/reporter/data/dto/BlindSigningEventDto.js +1 -0
- package/lib/esm/src/reporter/data/dto/BlindSigningEventDto.js.map +7 -0
- package/lib/esm/src/reporter/di/reporterModuleFactory.js +2 -0
- package/lib/esm/src/reporter/di/reporterModuleFactory.js.map +7 -0
- package/lib/esm/src/reporter/di/reporterTypes.js +2 -0
- package/lib/esm/src/reporter/di/reporterTypes.js.map +7 -0
- package/lib/esm/src/reporter/domain/BlindSigningReporter.js +1 -0
- package/lib/esm/src/reporter/domain/BlindSigningReporter.js.map +7 -0
- package/lib/esm/src/reporter/domain/DefaultBlindSigningReporter.js +2 -0
- package/lib/esm/src/reporter/domain/DefaultBlindSigningReporter.js.map +7 -0
- package/lib/esm/src/reporter/domain/DefaultBlindSigningReporter.test.js +2 -0
- package/lib/esm/src/reporter/domain/DefaultBlindSigningReporter.test.js.map +7 -0
- package/lib/esm/src/reporter/model/BlindSigningEvent.js +2 -0
- package/lib/esm/src/reporter/model/BlindSigningEvent.js.map +7 -0
- package/lib/esm/src/reporter/model/BlindSigningModelId.js +2 -0
- package/lib/esm/src/reporter/model/BlindSigningModelId.js.map +7 -0
- package/lib/esm/src/safe/data/HttpSafeAccountDataSource.js +1 -1
- package/lib/esm/src/safe/data/HttpSafeAccountDataSource.js.map +2 -2
- package/lib/esm/src/safe/data/HttpSafeAccountDataSource.test.js +1 -1
- package/lib/esm/src/safe/data/HttpSafeAccountDataSource.test.js.map +2 -2
- 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/model/SolanaContextTypes.js.map +1 -1
- package/lib/esm/src/shared/utils/KeyUsageMapper.js +1 -1
- package/lib/esm/src/shared/utils/KeyUsageMapper.js.map +2 -2
- package/lib/esm/src/shared/utils/KeyUsageMapper.test.js +1 -1
- package/lib/esm/src/shared/utils/KeyUsageMapper.test.js.map +2 -2
- package/lib/esm/src/solana/data/HttpSolanaOwnerInfoDataSource.js +1 -1
- package/lib/esm/src/solana/data/HttpSolanaOwnerInfoDataSource.js.map +2 -2
- package/lib/esm/src/solana/data/HttpSolanaOwnerInfoDataSource.test.js.map +1 -1
- package/lib/esm/src/solana/domain/DefaultSolanaContextLoader.js +1 -1
- package/lib/esm/src/solana/domain/DefaultSolanaContextLoader.js.map +3 -3
- package/lib/esm/src/solana/domain/DefaultSolanaContextLoader.test.js +1 -1
- package/lib/esm/src/solana/domain/DefaultSolanaContextLoader.test.js.map +1 -1
- package/lib/esm/src/solanaLifi/data/HttpSolanaLifiDataSource.js +1 -1
- package/lib/esm/src/solanaLifi/data/HttpSolanaLifiDataSource.js.map +3 -3
- package/lib/esm/src/solanaLifi/data/HttpSolanaLifiDataSource.test.js +1 -1
- package/lib/esm/src/solanaLifi/data/HttpSolanaLifiDataSource.test.js.map +3 -3
- package/lib/esm/src/solanaLifi/domain/SolanaLifiContextLoader.js +1 -1
- package/lib/esm/src/solanaLifi/domain/SolanaLifiContextLoader.js.map +3 -3
- package/lib/esm/src/solanaLifi/domain/SolanaLifiContextLoader.test.js +1 -1
- package/lib/esm/src/solanaLifi/domain/SolanaLifiContextLoader.test.js.map +3 -3
- package/lib/esm/src/solanaToken/data/HttpSolanaTokenDataSource.js +1 -1
- package/lib/esm/src/solanaToken/data/HttpSolanaTokenDataSource.js.map +2 -2
- package/lib/esm/src/solanaToken/data/HttpSolanaTokenDataSource.test.js +2 -2
- package/lib/esm/src/solanaToken/data/HttpSolanaTokenDataSource.test.js.map +2 -2
- package/lib/esm/src/solanaToken/domain/SolanaTokenContextLoader.js +1 -1
- package/lib/esm/src/solanaToken/domain/SolanaTokenContextLoader.js.map +2 -2
- package/lib/esm/src/solanaToken/domain/SolanaTokenContextLoader.test.js +1 -1
- package/lib/esm/src/solanaToken/domain/SolanaTokenContextLoader.test.js.map +1 -1
- package/lib/esm/src/token/data/HttpTokenDataSource.js.map +2 -2
- package/lib/esm/src/token/data/HttpTokenDataSource.test.js.map +1 -1
- package/lib/esm/src/transaction-check/data/HttpTransactionCheckDataSource.js +1 -1
- package/lib/esm/src/transaction-check/data/HttpTransactionCheckDataSource.js.map +2 -2
- package/lib/esm/src/transaction-check/data/HttpTransactionCheckDataSource.test.js.map +1 -1
- package/lib/esm/src/transaction-check/data/HttpTypedDataCheckDataSource.js.map +2 -2
- package/lib/esm/src/transaction-check/data/HttpTypedDataCheckDataSource.test.js.map +1 -1
- package/lib/esm/src/trusted-name/data/HttpTrustedNameDataSource.js.map +2 -2
- package/lib/esm/src/trusted-name/data/HttpTrustedNameDataSource.test.js.map +1 -1
- package/lib/esm/src/trusted-name/di/trustedNameModuleFactory.js +1 -1
- package/lib/esm/src/trusted-name/di/trustedNameModuleFactory.js.map +3 -3
- package/lib/esm/src/typed-data/data/HttpTypedDataDataSource.js +1 -1
- package/lib/esm/src/typed-data/data/HttpTypedDataDataSource.js.map +3 -3
- package/lib/esm/src/typed-data/data/HttpTypedDataDataSource.test.js.map +1 -1
- package/lib/esm/src/typed-data/utils/getSchemaHash.js +2 -0
- package/lib/esm/src/typed-data/utils/getSchemaHash.js.map +7 -0
- package/lib/esm/src/typed-data/utils/getSchemaHash.test.js +2 -0
- package/lib/esm/src/typed-data/utils/getSchemaHash.test.js.map +7 -0
- package/lib/types/src/ContextModule.d.ts +2 -0
- package/lib/types/src/ContextModule.d.ts.map +1 -1
- package/lib/types/src/ContextModuleBuilder.d.ts +30 -3
- package/lib/types/src/ContextModuleBuilder.d.ts.map +1 -1
- package/lib/types/src/DefaultContextModule.d.ts +6 -2
- package/lib/types/src/DefaultContextModule.d.ts.map +1 -1
- package/lib/types/src/calldata/data/HttpCalldataDescriptorDataSource.d.ts +2 -2
- package/lib/types/src/calldata/data/HttpCalldataDescriptorDataSource.d.ts.map +1 -1
- package/lib/types/src/config/di/configModuleFactory.d.ts +2 -2
- package/lib/types/src/config/di/configModuleFactory.d.ts.map +1 -1
- package/lib/types/src/config/model/ContextModuleConfig.d.ts +14 -3
- package/lib/types/src/config/model/ContextModuleConfig.d.ts.map +1 -1
- package/lib/types/src/di.d.ts +2 -2
- package/lib/types/src/di.d.ts.map +1 -1
- package/lib/types/src/dynamic-network/data/HttpDynamicNetworkDataSource.d.ts +2 -2
- package/lib/types/src/dynamic-network/data/HttpDynamicNetworkDataSource.d.ts.map +1 -1
- package/lib/types/src/dynamic-network/domain/DynamicNetworkContextLoader.d.ts +4 -2
- package/lib/types/src/dynamic-network/domain/DynamicNetworkContextLoader.d.ts.map +1 -1
- package/lib/types/src/external-plugin/data/HttpExternalPluginDataSource.d.ts +2 -2
- package/lib/types/src/external-plugin/data/HttpExternalPluginDataSource.d.ts.map +1 -1
- package/lib/types/src/gated-signing/data/GatedDescriptorDataSource.d.ts +20 -0
- package/lib/types/src/gated-signing/data/GatedDescriptorDataSource.d.ts.map +1 -0
- package/lib/types/src/gated-signing/data/HttpGatedDescriptorDataSource.d.ts +13 -0
- package/lib/types/src/gated-signing/data/HttpGatedDescriptorDataSource.d.ts.map +1 -0
- package/lib/types/src/gated-signing/data/HttpGatedDescriptorDataSource.test.d.ts +2 -0
- package/lib/types/src/gated-signing/data/HttpGatedDescriptorDataSource.test.d.ts.map +1 -0
- package/lib/types/src/gated-signing/data/dto/GatedDappsDto.d.ts +15 -0
- package/lib/types/src/gated-signing/data/dto/GatedDappsDto.d.ts.map +1 -0
- package/lib/types/src/gated-signing/di/gatedSigningModuleFactory.d.ts +3 -0
- package/lib/types/src/gated-signing/di/gatedSigningModuleFactory.d.ts.map +1 -0
- package/lib/types/src/gated-signing/di/gatedSigningTypes.d.ts +6 -0
- package/lib/types/src/gated-signing/di/gatedSigningTypes.d.ts.map +1 -0
- package/lib/types/src/gated-signing/domain/GatedSigningContextLoader.d.ts +22 -0
- package/lib/types/src/gated-signing/domain/GatedSigningContextLoader.d.ts.map +1 -0
- package/lib/types/src/gated-signing/domain/GatedSigningContextLoader.test.d.ts +2 -0
- package/lib/types/src/gated-signing/domain/GatedSigningContextLoader.test.d.ts.map +1 -0
- package/lib/types/src/gated-signing/domain/GatedSigningTypedDataContextLoader.d.ts +27 -0
- package/lib/types/src/gated-signing/domain/GatedSigningTypedDataContextLoader.d.ts.map +1 -0
- package/lib/types/src/gated-signing/domain/GatedSigningTypedDataContextLoader.test.d.ts +2 -0
- package/lib/types/src/gated-signing/domain/GatedSigningTypedDataContextLoader.test.d.ts.map +1 -0
- package/lib/types/src/index.d.ts +12 -1
- package/lib/types/src/index.d.ts.map +1 -1
- package/lib/types/src/nft/data/HttpNftDataSource.d.ts +2 -2
- package/lib/types/src/nft/data/HttpNftDataSource.d.ts.map +1 -1
- package/lib/types/src/pki/data/HttpPkiCertificateDataSource.d.ts +2 -2
- package/lib/types/src/pki/data/HttpPkiCertificateDataSource.d.ts.map +1 -1
- package/lib/types/src/pki/model/KeyId.d.ts +3 -1
- package/lib/types/src/pki/model/KeyId.d.ts.map +1 -1
- package/lib/types/src/pki/model/KeyUsage.d.ts +3 -1
- package/lib/types/src/pki/model/KeyUsage.d.ts.map +1 -1
- package/lib/types/src/proxy/data/HttpProxyDataSource.d.ts +2 -2
- package/lib/types/src/proxy/data/HttpProxyDataSource.d.ts.map +1 -1
- package/lib/types/src/proxy/data/HttpSafeProxyDataSource.d.ts +2 -2
- package/lib/types/src/proxy/data/HttpSafeProxyDataSource.d.ts.map +1 -1
- package/lib/types/src/proxy/di/proxyModuleFactory.d.ts +2 -2
- package/lib/types/src/proxy/di/proxyModuleFactory.d.ts.map +1 -1
- package/lib/types/src/reporter/data/BlindSigningReporterDatasource.d.ts +23 -0
- package/lib/types/src/reporter/data/BlindSigningReporterDatasource.d.ts.map +1 -0
- package/lib/types/src/reporter/data/HttpBlindSigningReporterDatasource.d.ts +9 -0
- package/lib/types/src/reporter/data/HttpBlindSigningReporterDatasource.d.ts.map +1 -0
- package/lib/types/src/reporter/data/HttpBlindSigningReporterDatasource.test.d.ts +2 -0
- package/lib/types/src/reporter/data/HttpBlindSigningReporterDatasource.test.d.ts.map +1 -0
- package/lib/types/src/reporter/data/dto/BlindSigningEventDto.d.ts +26 -0
- package/lib/types/src/reporter/data/dto/BlindSigningEventDto.d.ts.map +1 -0
- package/lib/types/src/reporter/di/reporterModuleFactory.d.ts +3 -0
- package/lib/types/src/reporter/di/reporterModuleFactory.d.ts.map +1 -0
- package/lib/types/src/reporter/di/reporterTypes.d.ts +5 -0
- package/lib/types/src/reporter/di/reporterTypes.d.ts.map +1 -0
- package/lib/types/src/reporter/domain/BlindSigningReporter.d.ts +6 -0
- package/lib/types/src/reporter/domain/BlindSigningReporter.d.ts.map +1 -0
- package/lib/types/src/reporter/domain/DefaultBlindSigningReporter.d.ts +9 -0
- package/lib/types/src/reporter/domain/DefaultBlindSigningReporter.d.ts.map +1 -0
- package/lib/types/src/reporter/domain/DefaultBlindSigningReporter.test.d.ts +2 -0
- package/lib/types/src/reporter/domain/DefaultBlindSigningReporter.test.d.ts.map +1 -0
- package/lib/types/src/reporter/model/BlindSigningEvent.d.ts +21 -0
- package/lib/types/src/reporter/model/BlindSigningEvent.d.ts.map +1 -0
- package/lib/types/src/reporter/model/BlindSigningModelId.d.ts +12 -0
- package/lib/types/src/reporter/model/BlindSigningModelId.d.ts.map +1 -0
- package/lib/types/src/safe/data/HttpSafeAccountDataSource.d.ts +2 -2
- package/lib/types/src/safe/data/HttpSafeAccountDataSource.d.ts.map +1 -1
- package/lib/types/src/shared/model/ClearSignContext.d.ts +2 -1
- package/lib/types/src/shared/model/ClearSignContext.d.ts.map +1 -1
- package/lib/types/src/shared/model/SolanaContextTypes.d.ts +33 -3
- package/lib/types/src/shared/model/SolanaContextTypes.d.ts.map +1 -1
- package/lib/types/src/shared/utils/KeyUsageMapper.d.ts.map +1 -1
- package/lib/types/src/solana/data/HttpSolanaOwnerInfoDataSource.d.ts +2 -2
- package/lib/types/src/solana/data/HttpSolanaOwnerInfoDataSource.d.ts.map +1 -1
- package/lib/types/src/solana/domain/DefaultSolanaContextLoader.d.ts +4 -1
- package/lib/types/src/solana/domain/DefaultSolanaContextLoader.d.ts.map +1 -1
- package/lib/types/src/solana/domain/solanaContextTypes.d.ts +2 -2
- package/lib/types/src/solana/domain/solanaContextTypes.d.ts.map +1 -1
- package/lib/types/src/solanaLifi/data/HttpSolanaLifiDataSource.d.ts +4 -2
- package/lib/types/src/solanaLifi/data/HttpSolanaLifiDataSource.d.ts.map +1 -1
- package/lib/types/src/solanaLifi/data/SolanaLifiDataSource.d.ts +2 -5
- package/lib/types/src/solanaLifi/data/SolanaLifiDataSource.d.ts.map +1 -1
- package/lib/types/src/solanaLifi/domain/SolanaLifiContextLoader.d.ts +10 -8
- package/lib/types/src/solanaLifi/domain/SolanaLifiContextLoader.d.ts.map +1 -1
- package/lib/types/src/solanaToken/data/HttpSolanaTokenDataSource.d.ts +2 -2
- package/lib/types/src/solanaToken/data/HttpSolanaTokenDataSource.d.ts.map +1 -1
- package/lib/types/src/solanaToken/domain/SolanaTokenContextLoader.d.ts +6 -11
- package/lib/types/src/solanaToken/domain/SolanaTokenContextLoader.d.ts.map +1 -1
- package/lib/types/src/token/data/HttpTokenDataSource.d.ts +2 -2
- package/lib/types/src/token/data/HttpTokenDataSource.d.ts.map +1 -1
- package/lib/types/src/transaction-check/data/HttpTransactionCheckDataSource.d.ts +2 -2
- package/lib/types/src/transaction-check/data/HttpTransactionCheckDataSource.d.ts.map +1 -1
- package/lib/types/src/transaction-check/data/HttpTypedDataCheckDataSource.d.ts +2 -2
- package/lib/types/src/transaction-check/data/HttpTypedDataCheckDataSource.d.ts.map +1 -1
- package/lib/types/src/trusted-name/data/HttpTrustedNameDataSource.d.ts +2 -2
- package/lib/types/src/trusted-name/data/HttpTrustedNameDataSource.d.ts.map +1 -1
- package/lib/types/src/trusted-name/di/trustedNameModuleFactory.d.ts +2 -2
- package/lib/types/src/trusted-name/di/trustedNameModuleFactory.d.ts.map +1 -1
- package/lib/types/src/typed-data/data/HttpTypedDataDataSource.d.ts +2 -3
- package/lib/types/src/typed-data/data/HttpTypedDataDataSource.d.ts.map +1 -1
- package/lib/types/src/typed-data/utils/getSchemaHash.d.ts +12 -0
- package/lib/types/src/typed-data/utils/getSchemaHash.d.ts.map +1 -0
- package/lib/types/src/typed-data/utils/getSchemaHash.test.d.ts +2 -0
- package/lib/types/src/typed-data/utils/getSchemaHash.test.d.ts.map +1 -0
- package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
- package/package.json +7 -7
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/gated-signing/data/HttpGatedDescriptorDataSource.ts"],
|
|
4
|
+
"sourcesContent": ["import axios from \"axios\";\nimport { inject, injectable } from \"inversify\";\nimport { Either, Left, Right } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport {\n LEDGER_CLIENT_VERSION_HEADER,\n LEDGER_ORIGIN_TOKEN_HEADER,\n} from \"@/shared/constant/HttpHeaders\";\nimport { SIGNATURE_TAG } from \"@/shared/model/SignatureTags\";\nimport { HexStringUtils } from \"@/shared/utils/HexStringUtils\";\nimport PACKAGE from \"@root/package.json\";\n\nimport {\n type GatedDappsDto,\n type GatedDappsResponseItemDto,\n type GatedDescriptorEntryDto,\n} from \"./dto/GatedDappsDto\";\nimport {\n type GatedDescriptorDataSource,\n type GetGatedDescriptorForTypedDataParams,\n type GetGatedDescriptorParams,\n type GetGatedDescriptorResponse,\n} from \"./GatedDescriptorDataSource\";\n\n@injectable()\nexport class HttpGatedDescriptorDataSource\n implements GatedDescriptorDataSource\n{\n constructor(\n @inject(configTypes.Config)\n private readonly config: ContextModuleServiceConfig,\n ) {}\n\n async getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n }: GetGatedDescriptorParams): Promise<\n Either<Error, GetGatedDescriptorResponse>\n > {\n let dto: GatedDappsDto | undefined;\n try {\n const response = await axios.request<GatedDappsDto>({\n method: \"GET\",\n url: `${this.config.cal.url}/gated_dapps`,\n params: {\n ref: `branch:${this.config.cal.branch}`,\n output: \"gated_descriptors,app,category\",\n contracts: contractAddress,\n chain_id: chainId,\n },\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n [LEDGER_ORIGIN_TOKEN_HEADER]: this.config.originToken,\n },\n });\n dto = response.data;\n } catch (error) {\n return Left(\n new Error(\n `[ContextModule] HttpGatedDescriptorDataSource: Failed to fetch gated descriptors: ${error}`,\n ),\n );\n }\n\n if (!this.isGatedDappsDto(dto)) {\n return Left(\n new Error(\n `[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response`,\n ),\n );\n }\n\n const normalizedAddress = contractAddress.toLowerCase();\n const selectorWithout0x = selector.startsWith(\"0x\")\n ? selector.slice(2).toLowerCase()\n : selector.toLowerCase();\n const selectorWith0x = `0x${selectorWithout0x}`;\n\n for (const item of dto) {\n const byContract = item.gated_descriptors?.[normalizedAddress];\n if (!byContract) continue;\n\n const entry =\n byContract[selectorWithout0x] ??\n byContract[selectorWith0x] ??\n byContract[selector];\n if (entry?.descriptor) {\n return Right({\n signedDescriptor: HexStringUtils.appendSignatureToPayload(\n entry.descriptor,\n entry.signatures![this.config.cal.mode]!,\n SIGNATURE_TAG,\n ),\n });\n }\n }\n\n return Left(\n new Error(\n `[ContextModule] HttpGatedDescriptorDataSource: No gated descriptor for contract ${contractAddress} and selector ${selector}`,\n ),\n );\n }\n\n async getGatedDescriptorForTypedData({\n contractAddress,\n schemaHash,\n chainId,\n }: GetGatedDescriptorForTypedDataParams): Promise<\n Either<Error, GetGatedDescriptorResponse>\n > {\n let dto: GatedDappsDto | undefined;\n try {\n const response = await axios.request<GatedDappsDto>({\n method: \"GET\",\n url: `${this.config.cal.url}/gated_dapps`,\n params: {\n ref: `branch:${this.config.cal.branch}`,\n output: \"gated_descriptors\",\n contracts: contractAddress,\n chain_id: chainId,\n },\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n [LEDGER_ORIGIN_TOKEN_HEADER]: this.config.originToken,\n },\n });\n dto = response.data;\n } catch (error) {\n return Left(\n new Error(\n `[ContextModule] HttpGatedDescriptorDataSource: Failed to fetch gated descriptors: ${error}`,\n ),\n );\n }\n\n if (!this.isGatedDappsDto(dto)) {\n return Left(\n new Error(\n `[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response`,\n ),\n );\n }\n\n const normalizedAddress = contractAddress.toLowerCase();\n const normalizedSchemaHash = schemaHash.toLowerCase();\n\n for (const item of dto) {\n const byContract = item.gated_descriptors?.[normalizedAddress];\n if (!byContract) continue;\n\n const entry = byContract[normalizedSchemaHash];\n if (entry?.descriptor) {\n return Right({\n signedDescriptor: HexStringUtils.appendSignatureToPayload(\n entry.descriptor,\n entry.signatures![this.config.cal.mode]!,\n SIGNATURE_TAG,\n ),\n });\n }\n }\n\n return Left(\n new Error(\n `[ContextModule] HttpGatedDescriptorDataSource: No gated descriptor for contract ${contractAddress} and schema hash ${schemaHash}`,\n ),\n );\n }\n\n private isGatedDappsDto(data: unknown): data is GatedDappsDto {\n if (!Array.isArray(data) || data.length === 0) {\n return false;\n }\n for (const item of data) {\n if (!this.isGatedDappsResponseItemDto(item)) {\n return false;\n }\n }\n return true;\n }\n\n private isGatedDappsResponseItemDto(\n item: unknown,\n ): item is GatedDappsResponseItemDto {\n if (!item || typeof item !== \"object\") {\n return false;\n }\n const obj = item as Record<string, unknown>;\n if (\n !obj[\"gated_descriptors\"] ||\n typeof obj[\"gated_descriptors\"] !== \"object\"\n ) {\n return false;\n }\n const byContract = obj[\"gated_descriptors\"] as Record<string, unknown>;\n for (const selectorsMap of Object.values(byContract)) {\n if (typeof selectorsMap !== \"object\" || selectorsMap === null) {\n return false;\n }\n for (const entry of Object.values(\n selectorsMap as Record<string, unknown>,\n )) {\n if (!this.isGatedDescriptorEntryDto(entry)) {\n return false;\n }\n }\n }\n return true;\n }\n\n private isGatedDescriptorEntryDto(\n entry: unknown,\n ): entry is GatedDescriptorEntryDto {\n if (!entry || typeof entry !== \"object\") {\n return false;\n }\n const e = entry as Record<string, unknown>;\n if (\n typeof e[\"network\"] !== \"string\" ||\n typeof e[\"chain_id\"] !== \"number\" ||\n typeof e[\"address\"] !== \"string\" ||\n typeof e[\"selector\"] !== \"string\" ||\n typeof e[\"version\"] !== \"string\" ||\n typeof e[\"descriptor\"] !== \"string\"\n ) {\n return false;\n }\n if (e[\"signatures\"] !== undefined) {\n if (typeof e[\"signatures\"] !== \"object\" || e[\"signatures\"] === null) {\n return false;\n }\n const sigs = e[\"signatures\"] as Record<string, unknown>;\n for (const v of Object.values(sigs)) {\n if (typeof v !== \"string\") {\n return false;\n }\n }\n }\n return true;\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["HttpGatedDescriptorDataSource_exports", "__export", "HttpGatedDescriptorDataSource", "__toCommonJS", "import_axios", "import_inversify", "import_purify_ts", "import_configTypes", "import_HttpHeaders", "import_SignatureTags", "import_HexStringUtils", "import_package", "HttpGatedDescriptorDataSource", "config", "contractAddress", "selector", "chainId", "dto", "axios", "PACKAGE", "error", "normalizedAddress", "selectorWithout0x", "selectorWith0x", "item", "byContract", "entry", "schemaHash", "normalizedSchemaHash", "data", "obj", "selectorsMap", "e", "sigs", "v", "__decorateClass", "__decorateParam"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var f=Object.create;var v=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var D=Object.getOwnPropertyNames;var E=Object.getPrototypeOf,q=Object.prototype.hasOwnProperty;var k=(t,e,o,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of D(e))!q.call(t,i)&&i!==o&&v(t,i,{get:()=>e[i],enumerable:!(s=x(e,i))||s.enumerable});return t};var w=(t,e,o)=>(o=t!=null?f(E(t)):{},k(e||!t||!t.__esModule?v(o,"default",{value:t,enumerable:!0}):o,t));var a=w(require("axios")),n=require("purify-ts"),c=require("../../gated-signing/data/HttpGatedDescriptorDataSource"),p=require("../../shared/constant/HttpHeaders"),h=w(require("../../../package.json"));vi.mock("axios");describe("HttpGatedDescriptorDataSource",()=>{const t={cal:{url:"https://crypto-assets-service.api.ledger.com/v1",branch:"next",mode:"prod"},originToken:"test-origin-token"},e="0x1111111254fb6c44bac0bed2854e76f90643097d",o="0xa1251d75",s=1,i="010122020101222a30783131313131313235346662366334346261633062656432383534653736663930363433303937642308000000000000000140086131323531643735",l=[{gated_descriptors:{"0x1111111254fb6c44bac0bed2854e76f90643097d":{a1251d75:{network:"ethereum",chain_id:1,address:"0x1111111254fb6c44bac0bed2854e76f90643097d",selector:"a1251d75",version:"v1",descriptor:i,signatures:{prod:"00",test:"00"}}}}}],g=`${i}150100`;beforeEach(()=>{vi.clearAllMocks()}),describe("getGatedDescriptor",()=>{it("should return descriptor on successful request with correct URL and params",async()=>{vi.spyOn(a.default,"request").mockResolvedValue({status:200,data:l});const r=await new c.HttpGatedDescriptorDataSource(t).getGatedDescriptor({contractAddress:e,selector:o,chainId:s});expect(a.default.request).toHaveBeenCalledWith({method:"GET",url:"https://crypto-assets-service.api.ledger.com/v1/gated_dapps",params:{ref:"branch:next",output:"gated_descriptors,app,category",contracts:e,chain_id:s},headers:{[p.LEDGER_CLIENT_VERSION_HEADER]:`context-module/${h.default.version}`,[p.LEDGER_ORIGIN_TOKEN_HEADER]:"test-origin-token"}}),expect(r).toEqual((0,n.Right)({signedDescriptor:g}))}),it("should find descriptor when API response has selector key without 0x prefix",async()=>{vi.spyOn(a.default,"request").mockResolvedValue({status:200,data:l});const r=await new c.HttpGatedDescriptorDataSource(t).getGatedDescriptor({contractAddress:e,selector:"0xa1251d75",chainId:s});expect(r).toEqual((0,n.Right)({signedDescriptor:g}))}),it("should return Left when response is not an array",async()=>{vi.spyOn(a.default,"request").mockResolvedValue({status:200,data:{gated_descriptors:{}}});const r=await new c.HttpGatedDescriptorDataSource(t).getGatedDescriptor({contractAddress:e,selector:o,chainId:s});expect(r).toEqual((0,n.Left)(new Error("[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response")))}),it("should return Left when response is empty array",async()=>{vi.spyOn(a.default,"request").mockResolvedValue({status:200,data:[]});const r=await new c.HttpGatedDescriptorDataSource(t).getGatedDescriptor({contractAddress:e,selector:o,chainId:s});expect(r).toEqual((0,n.Left)(new Error("[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response")))}),it("should return Left when no descriptor matches contract and selector",async()=>{vi.spyOn(a.default,"request").mockResolvedValue({status:200,data:[{gated_descriptors:{"0xothercontract":{a1251d75:{descriptor:"some-descriptor",network:"ethereum",chain_id:1,address:"0xother",selector:"a1251d75",version:"v1"}}}}]});const r=await new c.HttpGatedDescriptorDataSource(t).getGatedDescriptor({contractAddress:e,selector:o,chainId:s});expect(r).toEqual((0,n.Left)(new Error("[ContextModule] HttpGatedDescriptorDataSource: No gated descriptor for contract 0x1111111254fb6c44bac0bed2854e76f90643097d and selector 0xa1251d75")))}),it("should return Left when axios request fails",async()=>{vi.spyOn(a.default,"request").mockRejectedValue(new Error("Network error"));const r=await new c.HttpGatedDescriptorDataSource(t).getGatedDescriptor({contractAddress:e,selector:o,chainId:s});expect(r).toEqual((0,n.Left)(new Error("[ContextModule] HttpGatedDescriptorDataSource: Failed to fetch gated descriptors: Error: Network error")))}),it("should use config.cal.branch in ref param",async()=>{const r={...t,cal:{...t.cal,branch:"main"}};vi.spyOn(a.default,"request").mockResolvedValue({status:200,data:l}),await new c.HttpGatedDescriptorDataSource(r).getGatedDescriptor({contractAddress:e,selector:o,chainId:s}),expect(a.default.request).toHaveBeenCalledWith(expect.objectContaining({params:expect.objectContaining({ref:"branch:main"})}))}),describe("when response fails DTO validation",()=>{const r=new Error("[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response");it("should return Left when array item has no gated_descriptors",async()=>{vi.spyOn(a.default,"request").mockResolvedValue({status:200,data:[{}]});const d=await new c.HttpGatedDescriptorDataSource(t).getGatedDescriptor({contractAddress:e,selector:o,chainId:s});expect(d).toEqual((0,n.Left)(r))}),it("should return Left when gated_descriptors is not an object",async()=>{vi.spyOn(a.default,"request").mockResolvedValue({status:200,data:[{gated_descriptors:"not-an-object"}]});const d=await new c.HttpGatedDescriptorDataSource(t).getGatedDescriptor({contractAddress:e,selector:o,chainId:s});expect(d).toEqual((0,n.Left)(r))}),it("should return Left when entry is missing required field (descriptor)",async()=>{vi.spyOn(a.default,"request").mockResolvedValue({status:200,data:[{gated_descriptors:{[e]:{a1251d75:{network:"ethereum",chain_id:1,address:e,selector:"a1251d75",version:"v1"}}}}]});const d=await new c.HttpGatedDescriptorDataSource(t).getGatedDescriptor({contractAddress:e,selector:o,chainId:s});expect(d).toEqual((0,n.Left)(r))}),it("should return Left when entry has wrong type for chain_id",async()=>{vi.spyOn(a.default,"request").mockResolvedValue({status:200,data:[{gated_descriptors:{[e]:{a1251d75:{network:"ethereum",chain_id:"1",address:e,selector:"a1251d75",version:"v1",descriptor:i,signatures:{prod:"00",test:"00"}}}}}]});const d=await new c.HttpGatedDescriptorDataSource(t).getGatedDescriptor({contractAddress:e,selector:o,chainId:s});expect(d).toEqual((0,n.Left)(r))}),it("should return Left when entry signatures contains non-string value",async()=>{vi.spyOn(a.default,"request").mockResolvedValue({status:200,data:[{gated_descriptors:{[e]:{a1251d75:{network:"ethereum",chain_id:1,address:e,selector:"a1251d75",version:"v1",descriptor:i,signatures:{prod:123}}}}}]});const d=await new c.HttpGatedDescriptorDataSource(t).getGatedDescriptor({contractAddress:e,selector:o,chainId:s});expect(d).toEqual((0,n.Left)(r))}),it("should return Left when array item is null",async()=>{vi.spyOn(a.default,"request").mockResolvedValue({status:200,data:[null]});const d=await new c.HttpGatedDescriptorDataSource(t).getGatedDescriptor({contractAddress:e,selector:o,chainId:s});expect(d).toEqual((0,n.Left)(r))}),it("should return Left when selectors map value is not an object",async()=>{vi.spyOn(a.default,"request").mockResolvedValue({status:200,data:[{gated_descriptors:{[e]:"not-a-selectors-map"}}]});const d=await new c.HttpGatedDescriptorDataSource(t).getGatedDescriptor({contractAddress:e,selector:o,chainId:s});expect(d).toEqual((0,n.Left)(r))})})}),describe("getGatedDescriptorForTypedData",()=>{const r="4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3",d="010122020101222a30783131313131313235346662366334346261633062656432383534653736663930363433303937642308000000000000000140086131323531643735",m=[{gated_descriptors:{[e]:{[r]:{network:"ethereum",chain_id:1,address:e,selector:"eip712",version:"v1",descriptor:d,signatures:{prod:"00",test:"00"}}}}}],y=`${d}150100`;it("should return descriptor on successful request when keyed by schema hash",async()=>{vi.spyOn(a.default,"request").mockResolvedValue({status:200,data:m});const u=await new c.HttpGatedDescriptorDataSource(t).getGatedDescriptorForTypedData({contractAddress:e,schemaHash:r,chainId:s});expect(a.default.request).toHaveBeenCalledWith({method:"GET",url:"https://crypto-assets-service.api.ledger.com/v1/gated_dapps",params:{ref:"branch:next",output:"gated_descriptors",contracts:e,chain_id:s},headers:{[p.LEDGER_CLIENT_VERSION_HEADER]:`context-module/${h.default.version}`,[p.LEDGER_ORIGIN_TOKEN_HEADER]:"test-origin-token"}}),expect(u).toEqual((0,n.Right)({signedDescriptor:y}))}),it("should return Left when no descriptor matches contract and schema hash",async()=>{vi.spyOn(a.default,"request").mockResolvedValue({status:200,data:[{gated_descriptors:{[e]:{other_schema_hash:{descriptor:"some-descriptor",network:"ethereum",chain_id:1,address:e,selector:"eip712",version:"v1"}}}}]});const u=await new c.HttpGatedDescriptorDataSource(t).getGatedDescriptorForTypedData({contractAddress:e,schemaHash:r,chainId:s});expect(u).toEqual((0,n.Left)(new Error(`[ContextModule] HttpGatedDescriptorDataSource: No gated descriptor for contract ${e} and schema hash ${r}`)))}),it("should return Left when axios request fails",async()=>{vi.spyOn(a.default,"request").mockRejectedValue(new Error("Network error"));const u=await new c.HttpGatedDescriptorDataSource(t).getGatedDescriptorForTypedData({contractAddress:e,schemaHash:r,chainId:s});expect(u).toEqual((0,n.Left)(new Error("[ContextModule] HttpGatedDescriptorDataSource: Failed to fetch gated descriptors: Error: Network error")))})})});
|
|
2
|
+
//# sourceMappingURL=HttpGatedDescriptorDataSource.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/gated-signing/data/HttpGatedDescriptorDataSource.test.ts"],
|
|
4
|
+
"sourcesContent": ["import axios from \"axios\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { HttpGatedDescriptorDataSource } from \"@/gated-signing/data/HttpGatedDescriptorDataSource\";\nimport {\n LEDGER_CLIENT_VERSION_HEADER,\n LEDGER_ORIGIN_TOKEN_HEADER,\n} from \"@/shared/constant/HttpHeaders\";\nimport PACKAGE from \"@root/package.json\";\n\nvi.mock(\"axios\");\n\ndescribe(\"HttpGatedDescriptorDataSource\", () => {\n const config: ContextModuleServiceConfig = {\n cal: {\n url: \"https://crypto-assets-service.api.ledger.com/v1\",\n branch: \"next\",\n mode: \"prod\",\n },\n originToken: \"test-origin-token\",\n } as ContextModuleServiceConfig;\n\n const contractAddress = \"0x1111111254fb6c44bac0bed2854e76f90643097d\";\n const selector = \"0xa1251d75\";\n const chainId = 1;\n\n const descriptorPayload =\n \"010122020101222a30783131313131313235346662366334346261633062656432383534653736663930363433303937642308000000000000000140086131323531643735\";\n const validGatedDappsResponse = [\n {\n gated_descriptors: {\n \"0x1111111254fb6c44bac0bed2854e76f90643097d\": {\n a1251d75: {\n network: \"ethereum\",\n chain_id: 1,\n address: \"0x1111111254fb6c44bac0bed2854e76f90643097d\",\n selector: \"a1251d75\",\n version: \"v1\",\n descriptor: descriptorPayload,\n signatures: { prod: \"00\", test: \"00\" },\n },\n },\n },\n },\n ];\n // signedDescriptor = payload + SIGNATURE_TAG(\"15\") + length(01) + signature(\"00\")\n const expectedSignedDescriptor = `${descriptorPayload}150100`;\n\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n describe(\"getGatedDescriptor\", () => {\n it(\"should return descriptor on successful request with correct URL and params\", async () => {\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validGatedDappsResponse,\n });\n\n const result = await new HttpGatedDescriptorDataSource(\n config,\n ).getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n });\n\n expect(axios.request).toHaveBeenCalledWith({\n method: \"GET\",\n url: \"https://crypto-assets-service.api.ledger.com/v1/gated_dapps\",\n params: {\n ref: \"branch:next\",\n output: \"gated_descriptors,app,category\",\n contracts: contractAddress,\n chain_id: chainId,\n },\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n [LEDGER_ORIGIN_TOKEN_HEADER]: \"test-origin-token\",\n },\n });\n expect(result).toEqual(\n Right({\n signedDescriptor: expectedSignedDescriptor,\n }),\n );\n });\n\n it(\"should find descriptor when API response has selector key without 0x prefix\", async () => {\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validGatedDappsResponse,\n });\n\n const result = await new HttpGatedDescriptorDataSource(\n config,\n ).getGatedDescriptor({\n contractAddress,\n selector: \"0xa1251d75\",\n chainId,\n });\n\n expect(result).toEqual(\n Right({\n signedDescriptor: expectedSignedDescriptor,\n }),\n );\n });\n\n it(\"should return Left when response is not an array\", async () => {\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: { gated_descriptors: {} },\n });\n\n const result = await new HttpGatedDescriptorDataSource(\n config,\n ).getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n });\n\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response\",\n ),\n ),\n );\n });\n\n it(\"should return Left when response is empty array\", async () => {\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: [],\n });\n\n const result = await new HttpGatedDescriptorDataSource(\n config,\n ).getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n });\n\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response\",\n ),\n ),\n );\n });\n\n it(\"should return Left when no descriptor matches contract and selector\", async () => {\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: [\n {\n gated_descriptors: {\n \"0xothercontract\": {\n a1251d75: {\n descriptor: \"some-descriptor\",\n network: \"ethereum\",\n chain_id: 1,\n address: \"0xother\",\n selector: \"a1251d75\",\n version: \"v1\",\n },\n },\n },\n },\n ],\n });\n\n const result = await new HttpGatedDescriptorDataSource(\n config,\n ).getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n });\n\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpGatedDescriptorDataSource: No gated descriptor for contract 0x1111111254fb6c44bac0bed2854e76f90643097d and selector 0xa1251d75\",\n ),\n ),\n );\n });\n\n it(\"should return Left when axios request fails\", async () => {\n vi.spyOn(axios, \"request\").mockRejectedValue(new Error(\"Network error\"));\n\n const result = await new HttpGatedDescriptorDataSource(\n config,\n ).getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n });\n\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpGatedDescriptorDataSource: Failed to fetch gated descriptors: Error: Network error\",\n ),\n ),\n );\n });\n\n it(\"should use config.cal.branch in ref param\", async () => {\n const configMain: ContextModuleServiceConfig = {\n ...config,\n cal: { ...config.cal!, branch: \"main\" },\n } as ContextModuleServiceConfig;\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validGatedDappsResponse,\n });\n\n await new HttpGatedDescriptorDataSource(configMain).getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n });\n\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n params: expect.objectContaining({\n ref: \"branch:main\",\n }),\n }),\n );\n });\n\n describe(\"when response fails DTO validation\", () => {\n const invalidResponseError = new Error(\n \"[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response\",\n );\n\n it(\"should return Left when array item has no gated_descriptors\", async () => {\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: [{}],\n });\n\n const result = await new HttpGatedDescriptorDataSource(\n config,\n ).getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n });\n\n expect(result).toEqual(Left(invalidResponseError));\n });\n\n it(\"should return Left when gated_descriptors is not an object\", async () => {\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: [{ gated_descriptors: \"not-an-object\" }],\n });\n\n const result = await new HttpGatedDescriptorDataSource(\n config,\n ).getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n });\n\n expect(result).toEqual(Left(invalidResponseError));\n });\n\n it(\"should return Left when entry is missing required field (descriptor)\", async () => {\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: [\n {\n gated_descriptors: {\n [contractAddress]: {\n a1251d75: {\n network: \"ethereum\",\n chain_id: 1,\n address: contractAddress,\n selector: \"a1251d75\",\n version: \"v1\",\n // descriptor missing\n },\n },\n },\n },\n ],\n });\n\n const result = await new HttpGatedDescriptorDataSource(\n config,\n ).getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n });\n\n expect(result).toEqual(Left(invalidResponseError));\n });\n\n it(\"should return Left when entry has wrong type for chain_id\", async () => {\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: [\n {\n gated_descriptors: {\n [contractAddress]: {\n a1251d75: {\n network: \"ethereum\",\n chain_id: \"1\", // string instead of number\n address: contractAddress,\n selector: \"a1251d75\",\n version: \"v1\",\n descriptor: descriptorPayload,\n signatures: { prod: \"00\", test: \"00\" },\n },\n },\n },\n },\n ],\n });\n\n const result = await new HttpGatedDescriptorDataSource(\n config,\n ).getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n });\n\n expect(result).toEqual(Left(invalidResponseError));\n });\n\n it(\"should return Left when entry signatures contains non-string value\", async () => {\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: [\n {\n gated_descriptors: {\n [contractAddress]: {\n a1251d75: {\n network: \"ethereum\",\n chain_id: 1,\n address: contractAddress,\n selector: \"a1251d75\",\n version: \"v1\",\n descriptor: descriptorPayload,\n signatures: { prod: 123 }, // number instead of string\n },\n },\n },\n },\n ],\n });\n\n const result = await new HttpGatedDescriptorDataSource(\n config,\n ).getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n });\n\n expect(result).toEqual(Left(invalidResponseError));\n });\n\n it(\"should return Left when array item is null\", async () => {\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: [null],\n });\n\n const result = await new HttpGatedDescriptorDataSource(\n config,\n ).getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n });\n\n expect(result).toEqual(Left(invalidResponseError));\n });\n\n it(\"should return Left when selectors map value is not an object\", async () => {\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: [\n {\n gated_descriptors: {\n [contractAddress]: \"not-a-selectors-map\",\n },\n },\n ],\n });\n\n const result = await new HttpGatedDescriptorDataSource(\n config,\n ).getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n });\n\n expect(result).toEqual(Left(invalidResponseError));\n });\n });\n });\n\n describe(\"getGatedDescriptorForTypedData\", () => {\n const schemaHash =\n \"4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3\";\n const descriptorPayloadTypedData =\n \"010122020101222a30783131313131313235346662366334346261633062656432383534653736663930363433303937642308000000000000000140086131323531643735\";\n const validTypedDataResponse = [\n {\n gated_descriptors: {\n [contractAddress]: {\n [schemaHash]: {\n network: \"ethereum\",\n chain_id: 1,\n address: contractAddress,\n selector: \"eip712\",\n version: \"v1\",\n descriptor: descriptorPayloadTypedData,\n signatures: { prod: \"00\", test: \"00\" },\n },\n },\n },\n },\n ];\n const expectedSignedDescriptorTypedData = `${descriptorPayloadTypedData}150100`;\n\n it(\"should return descriptor on successful request when keyed by schema hash\", async () => {\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validTypedDataResponse,\n });\n\n const result = await new HttpGatedDescriptorDataSource(\n config,\n ).getGatedDescriptorForTypedData({\n contractAddress,\n schemaHash,\n chainId,\n });\n\n expect(axios.request).toHaveBeenCalledWith({\n method: \"GET\",\n url: \"https://crypto-assets-service.api.ledger.com/v1/gated_dapps\",\n params: {\n ref: \"branch:next\",\n output: \"gated_descriptors\",\n contracts: contractAddress,\n chain_id: chainId,\n },\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n [LEDGER_ORIGIN_TOKEN_HEADER]: \"test-origin-token\",\n },\n });\n expect(result).toEqual(\n Right({\n signedDescriptor: expectedSignedDescriptorTypedData,\n }),\n );\n });\n\n it(\"should return Left when no descriptor matches contract and schema hash\", async () => {\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: [\n {\n gated_descriptors: {\n [contractAddress]: {\n other_schema_hash: {\n descriptor: \"some-descriptor\",\n network: \"ethereum\",\n chain_id: 1,\n address: contractAddress,\n selector: \"eip712\",\n version: \"v1\",\n },\n },\n },\n },\n ],\n });\n\n const result = await new HttpGatedDescriptorDataSource(\n config,\n ).getGatedDescriptorForTypedData({\n contractAddress,\n schemaHash,\n chainId,\n });\n\n expect(result).toEqual(\n Left(\n new Error(\n `[ContextModule] HttpGatedDescriptorDataSource: No gated descriptor for contract ${contractAddress} and schema hash ${schemaHash}`,\n ),\n ),\n );\n });\n\n it(\"should return Left when axios request fails\", async () => {\n vi.spyOn(axios, \"request\").mockRejectedValue(new Error(\"Network error\"));\n\n const result = await new HttpGatedDescriptorDataSource(\n config,\n ).getGatedDescriptorForTypedData({\n contractAddress,\n schemaHash,\n chainId,\n });\n\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpGatedDescriptorDataSource: Failed to fetch gated descriptors: Error: Network error\",\n ),\n ),\n );\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_axios", "import_purify_ts", "import_HttpGatedDescriptorDataSource", "import_HttpHeaders", "import_package", "config", "contractAddress", "selector", "chainId", "descriptorPayload", "validGatedDappsResponse", "expectedSignedDescriptor", "axios", "result", "PACKAGE", "configMain", "invalidResponseError", "schemaHash", "descriptorPayloadTypedData", "validTypedDataResponse", "expectedSignedDescriptorTypedData"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var o=Object.defineProperty;var n=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var a=Object.prototype.hasOwnProperty;var d=(e,t,p,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of i(t))!a.call(e,r)&&r!==p&&o(e,r,{get:()=>t[r],enumerable:!(s=n(t,r))||s.enumerable});return e};var D=e=>d(o({},"__esModule",{value:!0}),e);var c={};module.exports=D(c);
|
|
2
|
+
//# sourceMappingURL=GatedDappsDto.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../src/gated-signing/data/dto/GatedDappsDto.ts"],
|
|
4
|
+
"sourcesContent": ["export type GatedDescriptorEntryDto = {\n network: string;\n chain_id: number;\n address: string;\n selector: string;\n version: string;\n descriptor: string;\n signatures?: Record<string, string>;\n};\n\nexport type GatedDescriptorsByContractDto = Record<\n string,\n Record<string, GatedDescriptorEntryDto>\n>;\n\nexport type GatedDappsResponseItemDto = {\n gated_descriptors: GatedDescriptorsByContractDto;\n};\n\nexport type GatedDappsDto = GatedDappsResponseItemDto[];\n"],
|
|
5
|
+
"mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
|
|
6
|
+
"names": ["GatedDappsDto_exports", "__toCommonJS"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var i=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var D=Object.prototype.hasOwnProperty;var G=(t,o)=>{for(var r in o)i(t,r,{get:o[r],enumerable:!0})},f=(t,o,r,n)=>{if(o&&typeof o=="object"||typeof o=="function")for(let e of c(o))!D.call(t,e)&&e!==r&&i(t,e,{get:()=>o[e],enumerable:!(n=S(o,e))||n.enumerable});return t};var x=t=>f(i({},"__esModule",{value:!0}),t);var s={};G(s,{gatedSigningModuleFactory:()=>C});module.exports=x(s);var d=require("inversify"),g=require("../../gated-signing/data/HttpGatedDescriptorDataSource"),p=require("../../gated-signing/domain/GatedSigningContextLoader"),m=require("../../gated-signing/domain/GatedSigningTypedDataContextLoader"),a=require("./gatedSigningTypes");const C=()=>new d.ContainerModule(({bind:t})=>{t(a.gatedSigningTypes.GatedDescriptorDataSource).to(g.HttpGatedDescriptorDataSource),t(a.gatedSigningTypes.GatedSigningContextLoader).to(p.GatedSigningContextLoader),t(a.gatedSigningTypes.GatedSigningTypedDataContextLoader).to(m.GatedSigningTypedDataContextLoader)});0&&(module.exports={gatedSigningModuleFactory});
|
|
2
|
+
//# sourceMappingURL=gatedSigningModuleFactory.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/gated-signing/di/gatedSigningModuleFactory.ts"],
|
|
4
|
+
"sourcesContent": ["import { ContainerModule } from \"inversify\";\n\nimport { HttpGatedDescriptorDataSource } from \"@/gated-signing/data/HttpGatedDescriptorDataSource\";\nimport { GatedSigningContextLoader } from \"@/gated-signing/domain/GatedSigningContextLoader\";\nimport { GatedSigningTypedDataContextLoader } from \"@/gated-signing/domain/GatedSigningTypedDataContextLoader\";\n\nimport { gatedSigningTypes } from \"./gatedSigningTypes\";\n\nexport const gatedSigningModuleFactory = () =>\n new ContainerModule(({ bind }) => {\n bind(gatedSigningTypes.GatedDescriptorDataSource).to(\n HttpGatedDescriptorDataSource,\n );\n bind(gatedSigningTypes.GatedSigningContextLoader).to(\n GatedSigningContextLoader,\n );\n bind(gatedSigningTypes.GatedSigningTypedDataContextLoader).to(\n GatedSigningTypedDataContextLoader,\n );\n });\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,+BAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAgC,qBAEhCC,EAA8C,8DAC9CC,EAA0C,4DAC1CC,EAAmD,qEAEnDC,EAAkC,+BAE3B,MAAMN,EAA4B,IACvC,IAAI,kBAAgB,CAAC,CAAE,KAAAO,CAAK,IAAM,CAChCA,EAAK,oBAAkB,yBAAyB,EAAE,GAChD,+BACF,EACAA,EAAK,oBAAkB,yBAAyB,EAAE,GAChD,2BACF,EACAA,EAAK,oBAAkB,kCAAkC,EAAE,GACzD,oCACF,CACF,CAAC",
|
|
6
|
+
"names": ["gatedSigningModuleFactory_exports", "__export", "gatedSigningModuleFactory", "__toCommonJS", "import_inversify", "import_HttpGatedDescriptorDataSource", "import_GatedSigningContextLoader", "import_GatedSigningTypedDataContextLoader", "import_gatedSigningTypes", "bind"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var n=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var S=(t,e)=>{for(var a in e)n(t,a,{get:e[a],enumerable:!0})},p=(t,e,a,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of i(e))!g.call(t,o)&&o!==a&&n(t,o,{get:()=>e[o],enumerable:!(r=d(e,o))||r.enumerable});return t};var y=t=>p(n({},"__esModule",{value:!0}),t);var G={};S(G,{gatedSigningTypes:()=>D});module.exports=y(G);const D={GatedDescriptorDataSource:Symbol.for("GatedDescriptorDataSource"),GatedSigningContextLoader:Symbol.for("GatedSigningContextLoader"),GatedSigningTypedDataContextLoader:Symbol.for("GatedSigningTypedDataContextLoader")};0&&(module.exports={gatedSigningTypes});
|
|
2
|
+
//# sourceMappingURL=gatedSigningTypes.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/gated-signing/di/gatedSigningTypes.ts"],
|
|
4
|
+
"sourcesContent": ["export const gatedSigningTypes = {\n GatedDescriptorDataSource: Symbol.for(\"GatedDescriptorDataSource\"),\n GatedSigningContextLoader: Symbol.for(\"GatedSigningContextLoader\"),\n GatedSigningTypedDataContextLoader: Symbol.for(\n \"GatedSigningTypedDataContextLoader\",\n ),\n};\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,uBAAAE,IAAA,eAAAC,EAAAH,GAAO,MAAME,EAAoB,CAC/B,0BAA2B,OAAO,IAAI,2BAA2B,EACjE,0BAA2B,OAAO,IAAI,2BAA2B,EACjE,mCAAoC,OAAO,IACzC,oCACF,CACF",
|
|
6
|
+
"names": ["gatedSigningTypes_exports", "__export", "gatedSigningTypes", "__toCommonJS"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var l=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var A=Object.getOwnPropertyNames;var R=Object.prototype.hasOwnProperty;var w=(o,e)=>{for(var r in e)l(o,r,{get:e[r],enumerable:!0})},L=(o,e,r,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of A(e))!R.call(o,t)&&t!==r&&l(o,t,{get:()=>e[t],enumerable:!(a=x(e,t))||a.enumerable});return o};var E=o=>L(l({},"__esModule",{value:!0}),o),S=(o,e,r,a)=>{for(var t=a>1?void 0:a?x(e,r):e,i=o.length-1,n;i>=0;i--)(n=o[i])&&(t=(a?n(e,r,t):n(t))||t);return a&&t&&l(e,r,t),t},y=(o,e)=>(r,a)=>e(r,a,o);var U={};w(U,{GatedSigningContextLoader:()=>d});module.exports=E(U);var f=require("@ledgerhq/device-management-kit"),s=require("inversify"),C=require("../../gated-signing/di/gatedSigningTypes"),u=require("../../pki/di/pkiTypes"),D=require("../../pki/model/KeyId"),G=require("../../pki/model/KeyUsage"),I=require("../../proxy/di/proxyTypes"),c=require("../../shared/model/ClearSignContext");const H=[c.ClearSignContextType.GATED_SIGNING];function N(o){const e=o.toLowerCase();return e.startsWith("0x")?e:`0x${e}`}let d=class{constructor(e,r,a){this._dataSource=e;this._certificateLoader=r;this._proxyDataSource=a}canHandle(e,r){return H.every(a=>r.includes(a))&&typeof e=="object"&&e!==null&&"to"in e&&(0,f.isHexaString)(e.to)&&e.to!=="0x"&&"selector"in e&&(0,f.isHexaString)(e.selector)&&"chainId"in e&&typeof e.chainId=="number"&&"deviceModelId"in e&&e.deviceModelId!==void 0}async load({to:e,selector:r,chainId:a,deviceModelId:t}){const i=await this._dataSource.getGatedDescriptor({contractAddress:e,selector:r,chainId:a});if(i.isRight()){const{signedDescriptor:v}=i.unsafeCoerce(),T=await this._loadGatedCertificate(t);return[{type:c.ClearSignContextType.GATED_SIGNING,payload:v,certificate:T}]}const n={type:c.ClearSignContextType.ERROR,error:i.extract()},m=await this._proxyDataSource.getProxyImplementationAddress({proxyAddress:e,chainId:a,challenge:"",calldata:"0x"});if(m.isLeft())return[n];const p=m.unsafeCoerce(),_=N(p.implementationAddress),g=await this._dataSource.getGatedDescriptor({contractAddress:_,selector:r,chainId:a});if(g.isLeft())return[n];const{signedDescriptor:P}=g.unsafeCoerce(),[h,k]=await Promise.all([this._certificateLoader.loadCertificate({keyId:p.keyId,keyUsage:p.keyUsage,targetDevice:t}),this._loadGatedCertificate(t)]);return[{type:c.ClearSignContextType.PROXY_INFO,payload:p.signedDescriptor,certificate:h},{type:c.ClearSignContextType.GATED_SIGNING,payload:P,certificate:k}]}_loadGatedCertificate(e){return this._certificateLoader.loadCertificate({keyId:D.KeyId.CalGatedSigning,keyUsage:G.KeyUsage.GatedSigning,targetDevice:e})}};d=S([(0,s.injectable)(),y(0,(0,s.inject)(C.gatedSigningTypes.GatedDescriptorDataSource)),y(1,(0,s.inject)(u.pkiTypes.PkiCertificateLoader)),y(2,(0,s.inject)(I.proxyTypes.ProxyDataSource))],d);0&&(module.exports={GatedSigningContextLoader});
|
|
2
|
+
//# sourceMappingURL=GatedSigningContextLoader.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/gated-signing/domain/GatedSigningContextLoader.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n DeviceModelId,\n HexaString,\n isHexaString,\n} from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport { type GatedDescriptorDataSource } from \"@/gated-signing/data/GatedDescriptorDataSource\";\nimport { gatedSigningTypes } from \"@/gated-signing/di/gatedSigningTypes\";\nimport { pkiTypes } from \"@/pki/di/pkiTypes\";\nimport { type PkiCertificateLoader } from \"@/pki/domain/PkiCertificateLoader\";\nimport { KeyId } from \"@/pki/model/KeyId\";\nimport { KeyUsage } from \"@/pki/model/KeyUsage\";\nimport type { ProxyDataSource } from \"@/proxy/data/ProxyDataSource\";\nimport { proxyTypes } from \"@/proxy/di/proxyTypes\";\nimport { ContextLoader } from \"@/shared/domain/ContextLoader\";\nimport {\n ClearSignContext,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\n\nexport type GatedSigningContextInput = {\n to: HexaString;\n selector: HexaString;\n chainId: number;\n deviceModelId: DeviceModelId;\n};\n\nconst SUPPORTED_TYPES: ClearSignContextType[] = [\n ClearSignContextType.GATED_SIGNING,\n];\n\nfunction normalizeAddress(address: string): HexaString {\n const lower = address.toLowerCase();\n return (lower.startsWith(\"0x\") ? lower : `0x${lower}`) as HexaString;\n}\n\n@injectable()\nexport class GatedSigningContextLoader\n implements ContextLoader<GatedSigningContextInput>\n{\n constructor(\n @inject(gatedSigningTypes.GatedDescriptorDataSource)\n private readonly _dataSource: GatedDescriptorDataSource,\n @inject(pkiTypes.PkiCertificateLoader)\n private readonly _certificateLoader: PkiCertificateLoader,\n @inject(proxyTypes.ProxyDataSource)\n private readonly _proxyDataSource: ProxyDataSource,\n ) {}\n\n canHandle(\n input: unknown,\n expectedTypes: ClearSignContextType[],\n ): input is GatedSigningContextInput {\n return (\n SUPPORTED_TYPES.every((type) => expectedTypes.includes(type)) &&\n typeof input === \"object\" &&\n input !== null &&\n \"to\" in input &&\n isHexaString(input.to) &&\n input.to !== \"0x\" &&\n \"selector\" in input &&\n isHexaString(input.selector) &&\n \"chainId\" in input &&\n typeof input.chainId === \"number\" &&\n \"deviceModelId\" in input &&\n input.deviceModelId !== undefined\n );\n }\n\n async load({\n to,\n selector,\n chainId,\n deviceModelId,\n }: GatedSigningContextInput): Promise<ClearSignContext[]> {\n const directResult = await this._dataSource.getGatedDescriptor({\n contractAddress: to,\n selector,\n chainId,\n });\n\n if (directResult.isRight()) {\n const { signedDescriptor } = directResult.unsafeCoerce();\n const certificate = await this._loadGatedCertificate(deviceModelId);\n return [\n {\n type: ClearSignContextType.GATED_SIGNING,\n payload: signedDescriptor,\n certificate,\n },\n ];\n }\n\n const errorContext: ClearSignContext = {\n type: ClearSignContextType.ERROR,\n error: directResult.extract() as Error,\n };\n\n const proxyResult =\n await this._proxyDataSource.getProxyImplementationAddress({\n proxyAddress: to,\n chainId,\n challenge: \"\",\n calldata: \"0x\",\n });\n\n if (proxyResult.isLeft()) {\n return [errorContext];\n }\n\n const proxyData = proxyResult.unsafeCoerce();\n const implementationAddress = normalizeAddress(\n proxyData.implementationAddress,\n );\n\n const implGatedResult = await this._dataSource.getGatedDescriptor({\n contractAddress: implementationAddress,\n selector,\n chainId,\n });\n\n if (implGatedResult.isLeft()) {\n return [errorContext];\n }\n\n const { signedDescriptor } = implGatedResult.unsafeCoerce();\n const [proxyCertificate, gatedCertificate] = await Promise.all([\n this._certificateLoader.loadCertificate({\n keyId: proxyData.keyId,\n keyUsage: proxyData.keyUsage,\n targetDevice: deviceModelId,\n }),\n this._loadGatedCertificate(deviceModelId),\n ]);\n\n return [\n {\n type: ClearSignContextType.PROXY_INFO,\n payload: proxyData.signedDescriptor,\n certificate: proxyCertificate,\n },\n {\n type: ClearSignContextType.GATED_SIGNING,\n payload: signedDescriptor,\n certificate: gatedCertificate,\n },\n ];\n }\n\n private _loadGatedCertificate(deviceModelId: DeviceModelId) {\n return this._certificateLoader.loadCertificate({\n keyId: KeyId.CalGatedSigning,\n keyUsage: KeyUsage.GatedSigning,\n targetDevice: deviceModelId,\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "okBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,+BAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAIO,2CACPC,EAAmC,qBAGnCC,EAAkC,gDAClCC,EAAyB,6BAEzBC,EAAsB,6BACtBC,EAAyB,gCAEzBC,EAA2B,iCAE3BC,EAGO,2CASP,MAAMC,EAA0C,CAC9C,uBAAqB,aACvB,EAEA,SAASC,EAAiBC,EAA6B,CACrD,MAAMC,EAAQD,EAAQ,YAAY,EAClC,OAAQC,EAAM,WAAW,IAAI,EAAIA,EAAQ,KAAKA,CAAK,EACrD,CAGO,IAAMC,EAAN,KAEP,CACE,YAEmBC,EAEAC,EAEAC,EACjB,CALiB,iBAAAF,EAEA,wBAAAC,EAEA,sBAAAC,CAChB,CAEH,UACEC,EACAC,EACmC,CACnC,OACET,EAAgB,MAAOU,GAASD,EAAc,SAASC,CAAI,CAAC,GAC5D,OAAOF,GAAU,UACjBA,IAAU,MACV,OAAQA,MACR,gBAAaA,EAAM,EAAE,GACrBA,EAAM,KAAO,MACb,aAAcA,MACd,gBAAaA,EAAM,QAAQ,GAC3B,YAAaA,GACb,OAAOA,EAAM,SAAY,UACzB,kBAAmBA,GACnBA,EAAM,gBAAkB,MAE5B,CAEA,MAAM,KAAK,CACT,GAAAG,EACA,SAAAC,EACA,QAAAC,EACA,cAAAC,CACF,EAA0D,CACxD,MAAMC,EAAe,MAAM,KAAK,YAAY,mBAAmB,CAC7D,gBAAiBJ,EACjB,SAAAC,EACA,QAAAC,CACF,CAAC,EAED,GAAIE,EAAa,QAAQ,EAAG,CAC1B,KAAM,CAAE,iBAAAC,CAAiB,EAAID,EAAa,aAAa,EACjDE,EAAc,MAAM,KAAK,sBAAsBH,CAAa,EAClE,MAAO,CACL,CACE,KAAM,uBAAqB,cAC3B,QAASE,EACT,YAAAC,CACF,CACF,CACF,CAEA,MAAMC,EAAiC,CACrC,KAAM,uBAAqB,MAC3B,MAAOH,EAAa,QAAQ,CAC9B,EAEMI,EACJ,MAAM,KAAK,iBAAiB,8BAA8B,CACxD,aAAcR,EACd,QAAAE,EACA,UAAW,GACX,SAAU,IACZ,CAAC,EAEH,GAAIM,EAAY,OAAO,EACrB,MAAO,CAACD,CAAY,EAGtB,MAAME,EAAYD,EAAY,aAAa,EACrCE,EAAwBpB,EAC5BmB,EAAU,qBACZ,EAEME,EAAkB,MAAM,KAAK,YAAY,mBAAmB,CAChE,gBAAiBD,EACjB,SAAAT,EACA,QAAAC,CACF,CAAC,EAED,GAAIS,EAAgB,OAAO,EACzB,MAAO,CAACJ,CAAY,EAGtB,KAAM,CAAE,iBAAAF,CAAiB,EAAIM,EAAgB,aAAa,EACpD,CAACC,EAAkBC,CAAgB,EAAI,MAAM,QAAQ,IAAI,CAC7D,KAAK,mBAAmB,gBAAgB,CACtC,MAAOJ,EAAU,MACjB,SAAUA,EAAU,SACpB,aAAcN,CAChB,CAAC,EACD,KAAK,sBAAsBA,CAAa,CAC1C,CAAC,EAED,MAAO,CACL,CACE,KAAM,uBAAqB,WAC3B,QAASM,EAAU,iBACnB,YAAaG,CACf,EACA,CACE,KAAM,uBAAqB,cAC3B,QAASP,EACT,YAAaQ,CACf,CACF,CACF,CAEQ,sBAAsBV,EAA8B,CAC1D,OAAO,KAAK,mBAAmB,gBAAgB,CAC7C,MAAO,QAAM,gBACb,SAAU,WAAS,aACnB,aAAcA,CAChB,CAAC,CACH,CACF,EAvHaV,EAANqB,EAAA,IADN,cAAW,EAKPC,EAAA,eAAO,oBAAkB,yBAAyB,GAElDA,EAAA,eAAO,WAAS,oBAAoB,GAEpCA,EAAA,eAAO,aAAW,eAAe,IARzBtB",
|
|
6
|
+
"names": ["GatedSigningContextLoader_exports", "__export", "GatedSigningContextLoader", "__toCommonJS", "import_device_management_kit", "import_inversify", "import_gatedSigningTypes", "import_pkiTypes", "import_KeyId", "import_KeyUsage", "import_proxyTypes", "import_ClearSignContext", "SUPPORTED_TYPES", "normalizeAddress", "address", "lower", "GatedSigningContextLoader", "_dataSource", "_certificateLoader", "_proxyDataSource", "input", "expectedTypes", "type", "to", "selector", "chainId", "deviceModelId", "directResult", "signedDescriptor", "certificate", "errorContext", "proxyResult", "proxyData", "implementationAddress", "implGatedResult", "proxyCertificate", "gatedCertificate", "__decorateClass", "__decorateParam"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var d=require("@ledgerhq/device-management-kit"),i=require("purify-ts"),m=require("../../gated-signing/domain/GatedSigningContextLoader"),f=require("../../pki/model/KeyId"),g=require("../../pki/model/KeyUsage"),c=require("../../shared/model/ClearSignContext");describe("GatedSigningContextLoader",()=>{const o={getGatedDescriptor:vi.fn(),getGatedDescriptorForTypedData:vi.fn()},n={loadCertificate:vi.fn()},s={getProxyImplementationAddress:vi.fn()},r=new m.GatedSigningContextLoader(o,n,s),x={keyUsageNumber:1,payload:new Uint8Array([1,2,3])},l=[c.ClearSignContextType.GATED_SIGNING];beforeEach(()=>{vi.resetAllMocks(),vi.spyOn(n,"loadCertificate").mockResolvedValue(x)}),describe("canHandle function",()=>{const e={to:"0x1111111254fb6c44bac0bed2854e76f90643097d",selector:"0xa1251d75",chainId:1,deviceModelId:d.DeviceModelId.STAX};it("should return true for valid input",()=>{expect(r.canHandle(e,l)).toBe(!0)}),it("should return false for invalid expected type",()=>{expect(r.canHandle(e,[c.ClearSignContextType.TOKEN])).toBe(!1),expect(r.canHandle(e,[c.ClearSignContextType.DYNAMIC_NETWORK])).toBe(!1)}),it.each([[null,"null input"],[void 0,"undefined input"],[{},"empty object"],["string","string input"],[123,"number input"]])("should return false for %s",(a,t)=>{expect(r.canHandle(a,l)).toBe(!1)}),it.each([[{...e,to:void 0},"missing to"],[{...e,selector:void 0},"missing selector"],[{...e,chainId:void 0},"missing chainId"],[{...e,deviceModelId:void 0},"missing deviceModelId"]])("should return false for %s",(a,t)=>{expect(r.canHandle(a,l)).toBe(!1)}),it.each([[{...e,to:"0x"},"empty to (0x)"],[{...e,to:"not-hex"},"non-hex to"],[{...e,selector:"not-hex"},"non-hex selector"],[{...e,chainId:"1"},"string chainId"],[{...e,chainId:null},"null chainId"]])("should return false for %s",(a,t)=>{expect(r.canHandle(a,l)).toBe(!1)})}),describe("load function",()=>{const e={to:"0x1111111254fb6c44bac0bed2854e76f90643097d",selector:"0xa1251d75",chainId:1,deviceModelId:d.DeviceModelId.STAX},a="010122020101222a30783131313131313235346662366334346261633062656432383534653736663930363433303937642308000000000000000140086131323531643735150100";it("should return error context when getGatedDescriptor returns Left and proxy resolution fails",async()=>{const t=new Error("Failed to fetch gated descriptors");vi.spyOn(o,"getGatedDescriptor").mockResolvedValue((0,i.Left)(t)),vi.spyOn(s,"getProxyImplementationAddress").mockResolvedValue((0,i.Left)(new Error("Not a proxy")));const p=await r.load(e);expect(p).toEqual([{type:c.ClearSignContextType.ERROR,error:t}]),expect(o.getGatedDescriptor).toHaveBeenCalledWith({contractAddress:e.to,selector:e.selector,chainId:e.chainId}),expect(s.getProxyImplementationAddress).toHaveBeenCalledWith({proxyAddress:e.to,chainId:e.chainId,challenge:"",calldata:"0x"}),expect(n.loadCertificate).not.toHaveBeenCalled()}),it("should return gated signing context when getGatedDescriptor succeeds",async()=>{vi.spyOn(o,"getGatedDescriptor").mockResolvedValue((0,i.Right)({signedDescriptor:a}));const t=await r.load(e);expect(t).toHaveLength(1),expect(t[0]).toMatchObject({type:c.ClearSignContextType.GATED_SIGNING,payload:a,certificate:x}),expect(o.getGatedDescriptor).toHaveBeenCalledWith({contractAddress:e.to,selector:e.selector,chainId:e.chainId}),expect(n.loadCertificate).toHaveBeenCalledWith({keyId:f.KeyId.CalGatedSigning,keyUsage:g.KeyUsage.GatedSigning,targetDevice:e.deviceModelId})}),it("should pass to as contractAddress to getGatedDescriptor",async()=>{const t="0xabcdef1234567890abcdef1234567890abcdef12";vi.spyOn(o,"getGatedDescriptor").mockResolvedValue((0,i.Right)({signedDescriptor:a})),await r.load({...e,to:t}),expect(o.getGatedDescriptor).toHaveBeenCalledWith(expect.objectContaining({contractAddress:t}))}),it("should request certificate for correct device model",async()=>{vi.spyOn(o,"getGatedDescriptor").mockResolvedValue((0,i.Right)({signedDescriptor:a})),await r.load({...e,deviceModelId:d.DeviceModelId.FLEX}),expect(n.loadCertificate).toHaveBeenCalledWith({keyId:f.KeyId.CalGatedSigning,keyUsage:g.KeyUsage.GatedSigning,targetDevice:d.DeviceModelId.FLEX})}),it("should reject when certificate loading fails",async()=>{const t=new Error("Certificate loading failed");vi.spyOn(o,"getGatedDescriptor").mockResolvedValue((0,i.Right)({signedDescriptor:a})),vi.spyOn(n,"loadCertificate").mockRejectedValue(t),await expect(r.load(e)).rejects.toThrow(t)}),it("should return PROXY_INFO and GATED_SIGNING when to is proxy and gated descriptor exists for implementation",async()=>{const t="0xabcdef1234567890abcdef1234567890abcdef12",p="0xproxy-descriptor";vi.spyOn(o,"getGatedDescriptor").mockResolvedValueOnce((0,i.Left)(new Error("No gated descriptor"))).mockResolvedValueOnce((0,i.Right)({signedDescriptor:a})),vi.spyOn(s,"getProxyImplementationAddress").mockResolvedValue((0,i.Right)({implementationAddress:t,signedDescriptor:p,keyId:"domain-metadata",keyUsage:"trusted-name"}));const u=await r.load(e);expect(u).toHaveLength(2),expect(u[0]).toMatchObject({type:c.ClearSignContextType.PROXY_INFO,payload:p}),expect(u[1]).toMatchObject({type:c.ClearSignContextType.GATED_SIGNING,payload:a}),expect(o.getGatedDescriptor).toHaveBeenCalledTimes(2),expect(o.getGatedDescriptor).toHaveBeenNthCalledWith(1,{contractAddress:e.to,selector:e.selector,chainId:e.chainId}),expect(o.getGatedDescriptor).toHaveBeenNthCalledWith(2,{contractAddress:t.toLowerCase(),selector:e.selector,chainId:e.chainId})})})});
|
|
2
|
+
//# sourceMappingURL=GatedSigningContextLoader.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/gated-signing/domain/GatedSigningContextLoader.test.ts"],
|
|
4
|
+
"sourcesContent": ["import { DeviceModelId } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { type GatedDescriptorDataSource } from \"@/gated-signing/data/GatedDescriptorDataSource\";\nimport {\n type GatedSigningContextInput,\n GatedSigningContextLoader,\n} from \"@/gated-signing/domain/GatedSigningContextLoader\";\nimport { type PkiCertificateLoader } from \"@/pki/domain/PkiCertificateLoader\";\nimport { KeyId } from \"@/pki/model/KeyId\";\nimport { KeyUsage } from \"@/pki/model/KeyUsage\";\nimport { type PkiCertificate } from \"@/pki/model/PkiCertificate\";\nimport type { ProxyDataSource } from \"@/proxy/data/ProxyDataSource\";\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\n\ndescribe(\"GatedSigningContextLoader\", () => {\n const mockGatedDescriptorDataSource: GatedDescriptorDataSource = {\n getGatedDescriptor: vi.fn(),\n getGatedDescriptorForTypedData: vi.fn(),\n };\n\n const mockCertificateLoader: PkiCertificateLoader = {\n loadCertificate: vi.fn(),\n };\n\n const mockProxyDataSource: ProxyDataSource = {\n getProxyImplementationAddress: vi.fn(),\n };\n\n const loader = new GatedSigningContextLoader(\n mockGatedDescriptorDataSource,\n mockCertificateLoader,\n mockProxyDataSource,\n );\n\n const mockCertificate: PkiCertificate = {\n keyUsageNumber: 1,\n payload: new Uint8Array([0x01, 0x02, 0x03]),\n };\n\n const SUPPORTED_TYPES: ClearSignContextType[] = [\n ClearSignContextType.GATED_SIGNING,\n ];\n\n beforeEach(() => {\n vi.resetAllMocks();\n vi.spyOn(mockCertificateLoader, \"loadCertificate\").mockResolvedValue(\n mockCertificate,\n );\n });\n\n describe(\"canHandle function\", () => {\n const validInput: GatedSigningContextInput = {\n to: \"0x1111111254fb6c44bac0bed2854e76f90643097d\",\n selector: \"0xa1251d75\",\n chainId: 1,\n deviceModelId: DeviceModelId.STAX,\n };\n\n it(\"should return true for valid input\", () => {\n expect(loader.canHandle(validInput, SUPPORTED_TYPES)).toBe(true);\n });\n\n it(\"should return false for invalid expected type\", () => {\n expect(loader.canHandle(validInput, [ClearSignContextType.TOKEN])).toBe(\n false,\n );\n expect(\n loader.canHandle(validInput, [ClearSignContextType.DYNAMIC_NETWORK]),\n ).toBe(false);\n });\n\n it.each([\n [null, \"null input\"],\n [undefined, \"undefined input\"],\n [{}, \"empty object\"],\n [\"string\", \"string input\"],\n [123, \"number input\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, SUPPORTED_TYPES)).toBe(false);\n });\n\n it.each([\n [{ ...validInput, to: undefined }, \"missing to\"],\n [{ ...validInput, selector: undefined }, \"missing selector\"],\n [{ ...validInput, chainId: undefined }, \"missing chainId\"],\n [{ ...validInput, deviceModelId: undefined }, \"missing deviceModelId\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, SUPPORTED_TYPES)).toBe(false);\n });\n\n it.each([\n [{ ...validInput, to: \"0x\" }, \"empty to (0x)\"],\n [{ ...validInput, to: \"not-hex\" }, \"non-hex to\"],\n [{ ...validInput, selector: \"not-hex\" }, \"non-hex selector\"],\n [{ ...validInput, chainId: \"1\" as unknown as number }, \"string chainId\"],\n [{ ...validInput, chainId: null as unknown as number }, \"null chainId\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, SUPPORTED_TYPES)).toBe(false);\n });\n });\n\n describe(\"load function\", () => {\n const validInput: GatedSigningContextInput = {\n to: \"0x1111111254fb6c44bac0bed2854e76f90643097d\",\n selector: \"0xa1251d75\",\n chainId: 1,\n deviceModelId: DeviceModelId.STAX,\n };\n\n const signedDescriptor =\n \"010122020101222a30783131313131313235346662366334346261633062656432383534653736663930363433303937642308000000000000000140086131323531643735150100\";\n\n it(\"should return error context when getGatedDescriptor returns Left and proxy resolution fails\", async () => {\n const error = new Error(\"Failed to fetch gated descriptors\");\n vi.spyOn(\n mockGatedDescriptorDataSource,\n \"getGatedDescriptor\",\n ).mockResolvedValue(Left(error));\n vi.spyOn(\n mockProxyDataSource,\n \"getProxyImplementationAddress\",\n ).mockResolvedValue(Left(new Error(\"Not a proxy\")));\n\n const result = await loader.load(validInput);\n\n expect(result).toEqual([\n {\n type: ClearSignContextType.ERROR,\n error,\n },\n ]);\n expect(\n mockGatedDescriptorDataSource.getGatedDescriptor,\n ).toHaveBeenCalledWith({\n contractAddress: validInput.to,\n selector: validInput.selector,\n chainId: validInput.chainId,\n });\n expect(\n mockProxyDataSource.getProxyImplementationAddress,\n ).toHaveBeenCalledWith({\n proxyAddress: validInput.to,\n chainId: validInput.chainId,\n challenge: \"\",\n calldata: \"0x\",\n });\n expect(mockCertificateLoader.loadCertificate).not.toHaveBeenCalled();\n });\n\n it(\"should return gated signing context when getGatedDescriptor succeeds\", async () => {\n vi.spyOn(\n mockGatedDescriptorDataSource,\n \"getGatedDescriptor\",\n ).mockResolvedValue(Right({ signedDescriptor }));\n\n const result = await loader.load(validInput);\n\n expect(result).toHaveLength(1);\n expect(result[0]).toMatchObject({\n type: ClearSignContextType.GATED_SIGNING,\n payload: signedDescriptor,\n certificate: mockCertificate,\n });\n expect(\n mockGatedDescriptorDataSource.getGatedDescriptor,\n ).toHaveBeenCalledWith({\n contractAddress: validInput.to,\n selector: validInput.selector,\n chainId: validInput.chainId,\n });\n expect(mockCertificateLoader.loadCertificate).toHaveBeenCalledWith({\n keyId: KeyId.CalGatedSigning,\n keyUsage: KeyUsage.GatedSigning,\n targetDevice: validInput.deviceModelId,\n });\n });\n\n it(\"should pass to as contractAddress to getGatedDescriptor\", async () => {\n const customTo = \"0xabcdef1234567890abcdef1234567890abcdef12\";\n vi.spyOn(\n mockGatedDescriptorDataSource,\n \"getGatedDescriptor\",\n ).mockResolvedValue(Right({ signedDescriptor }));\n\n await loader.load({\n ...validInput,\n to: customTo,\n });\n\n expect(\n mockGatedDescriptorDataSource.getGatedDescriptor,\n ).toHaveBeenCalledWith(\n expect.objectContaining({\n contractAddress: customTo,\n }),\n );\n });\n\n it(\"should request certificate for correct device model\", async () => {\n vi.spyOn(\n mockGatedDescriptorDataSource,\n \"getGatedDescriptor\",\n ).mockResolvedValue(Right({ signedDescriptor }));\n\n await loader.load({\n ...validInput,\n deviceModelId: DeviceModelId.FLEX,\n });\n\n expect(mockCertificateLoader.loadCertificate).toHaveBeenCalledWith({\n keyId: KeyId.CalGatedSigning,\n keyUsage: KeyUsage.GatedSigning,\n targetDevice: DeviceModelId.FLEX,\n });\n });\n\n it(\"should reject when certificate loading fails\", async () => {\n const certificateError = new Error(\"Certificate loading failed\");\n vi.spyOn(\n mockGatedDescriptorDataSource,\n \"getGatedDescriptor\",\n ).mockResolvedValue(Right({ signedDescriptor }));\n vi.spyOn(mockCertificateLoader, \"loadCertificate\").mockRejectedValue(\n certificateError,\n );\n\n await expect(loader.load(validInput)).rejects.toThrow(certificateError);\n });\n\n it(\"should return PROXY_INFO and GATED_SIGNING when to is proxy and gated descriptor exists for implementation\", async () => {\n const implementationAddress =\n \"0xabcdef1234567890abcdef1234567890abcdef12\";\n const proxySignedDescriptor = \"0xproxy-descriptor\";\n vi.spyOn(mockGatedDescriptorDataSource, \"getGatedDescriptor\")\n .mockResolvedValueOnce(Left(new Error(\"No gated descriptor\")))\n .mockResolvedValueOnce(Right({ signedDescriptor }));\n vi.spyOn(\n mockProxyDataSource,\n \"getProxyImplementationAddress\",\n ).mockResolvedValue(\n Right({\n implementationAddress,\n signedDescriptor: proxySignedDescriptor,\n keyId: \"domain-metadata\",\n keyUsage: \"trusted-name\",\n }),\n );\n\n const result = await loader.load(validInput);\n\n expect(result).toHaveLength(2);\n expect(result[0]).toMatchObject({\n type: ClearSignContextType.PROXY_INFO,\n payload: proxySignedDescriptor,\n });\n expect(result[1]).toMatchObject({\n type: ClearSignContextType.GATED_SIGNING,\n payload: signedDescriptor,\n });\n expect(\n mockGatedDescriptorDataSource.getGatedDescriptor,\n ).toHaveBeenCalledTimes(2);\n expect(\n mockGatedDescriptorDataSource.getGatedDescriptor,\n ).toHaveBeenNthCalledWith(1, {\n contractAddress: validInput.to,\n selector: validInput.selector,\n chainId: validInput.chainId,\n });\n expect(\n mockGatedDescriptorDataSource.getGatedDescriptor,\n ).toHaveBeenNthCalledWith(2, {\n contractAddress: implementationAddress.toLowerCase(),\n selector: validInput.selector,\n chainId: validInput.chainId,\n });\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_device_management_kit", "import_purify_ts", "import_GatedSigningContextLoader", "import_KeyId", "import_KeyUsage", "import_ClearSignContext", "mockGatedDescriptorDataSource", "mockCertificateLoader", "mockProxyDataSource", "loader", "mockCertificate", "SUPPORTED_TYPES", "validInput", "input", "_description", "signedDescriptor", "error", "result", "customTo", "certificateError", "implementationAddress", "proxySignedDescriptor"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var y=Object.defineProperty;var G=Object.getOwnPropertyDescriptor;var L=Object.getOwnPropertyNames;var H=Object.prototype.hasOwnProperty;var b=(o,e)=>{for(var t in e)y(o,t,{get:e[t],enumerable:!0})},j=(o,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of L(e))!H.call(o,a)&&a!==t&&y(o,a,{get:()=>e[a],enumerable:!(r=G(e,a))||r.enumerable});return o};var O=o=>j(y({},"__esModule",{value:!0}),o),I=(o,e,t,r)=>{for(var a=r>1?void 0:r?G(e,t):e,i=o.length-1,s;i>=0;i--)(s=o[i])&&(a=(r?s(e,t,a):s(a))||a);return r&&a&&y(e,t,a),a},f=(o,e)=>(t,r)=>e(t,r,o);var M={};b(M,{GatedSigningTypedDataContextLoader:()=>p});module.exports=O(M);var c=require("inversify"),T=require("../../gated-signing/di/gatedSigningTypes"),k=require("../../pki/di/pkiTypes"),S=require("../../pki/model/KeyId"),u=require("../../pki/model/KeyUsage"),R=require("../../proxy/di/proxyTypes"),n=require("../../shared/model/ClearSignContext"),w=require("../../typed-data/utils/getSchemaHash");const N="0x0000000000000000000000000000000000000000",U=[n.ClearSignContextType.GATED_SIGNING];function F(o){if(!o||typeof o!="object")return!1;const e=o;if(!e.types||typeof e.types!="object"||Array.isArray(e.types))return!1;const t=e.types;for(const r of Object.keys(t)){if(typeof r!="string")return!1;const a=t[r];if(!Array.isArray(a))return!1;for(const i of a)if(!i||typeof i!="object"||typeof i.name!="string"||typeof i.type!="string")return!1}return!0}let p=class{constructor(e,t,r){this._dataSource=e;this._certificateLoader=t;this._proxyDataSource=r}canHandle(e,t){return U.every(r=>t.includes(r))&&typeof e=="object"&&e!==null&&"data"in e&&F(e.data)&&"chainId"in e&&"deviceModelId"in e&&e.deviceModelId!==void 0&&"challenge"in e&&typeof e.challenge=="string"}async load({data:e,chainId:t,deviceModelId:r,challenge:a}){const i=e.domain?.verifyingContract?.toLowerCase()??N,s=i.startsWith("0x")?i:`0x${i}`,x=(0,w.getSchemaHash)(e.types),g=await this._dataSource.getGatedDescriptorForTypedData({contractAddress:s,schemaHash:x,chainId:t});if(g.isRight()){const{signedDescriptor:m}=g.unsafeCoerce(),E=await this._certificateLoader.loadCertificate({keyId:S.KeyId.CalGatedSigning,keyUsage:u.KeyUsage.GatedSigning,targetDevice:r});return[{type:n.ClearSignContextType.GATED_SIGNING,payload:m,certificate:E}]}const D=g.caseOf({Left:m=>m,Right:()=>new Error("unreachable")}),C=await this._proxyDataSource.getProxyImplementationAddress({proxyAddress:s,chainId:t,challenge:a,calldata:"0x"});if(C.isLeft())return[{type:n.ClearSignContextType.ERROR,error:D}];const d=C.unsafeCoerce(),l=d.implementationAddress.toLowerCase(),v=l.startsWith("0x")?l:`0x${l}`,h=await this._dataSource.getGatedDescriptorForTypedData({contractAddress:v,schemaHash:x,chainId:t});if(h.isLeft())return[{type:n.ClearSignContextType.ERROR,error:D}];const{signedDescriptor:_}=h.unsafeCoerce(),[A,P]=await Promise.all([this._certificateLoader.loadCertificate({keyId:d.keyId,keyUsage:d.keyUsage,targetDevice:r}),this._certificateLoader.loadCertificate({keyId:S.KeyId.CalGatedSigning,keyUsage:u.KeyUsage.GatedSigning,targetDevice:r})]);return[{type:n.ClearSignContextType.PROXY_INFO,payload:d.signedDescriptor,certificate:A},{type:n.ClearSignContextType.GATED_SIGNING,payload:_,certificate:P}]}};p=I([(0,c.injectable)(),f(0,(0,c.inject)(T.gatedSigningTypes.GatedDescriptorDataSource)),f(1,(0,c.inject)(k.pkiTypes.PkiCertificateLoader)),f(2,(0,c.inject)(R.proxyTypes.ProxyDataSource))],p);0&&(module.exports={GatedSigningTypedDataContextLoader});
|
|
2
|
+
//# sourceMappingURL=GatedSigningTypedDataContextLoader.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/gated-signing/domain/GatedSigningTypedDataContextLoader.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n DeviceModelId,\n type HexaString,\n} from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport { type GatedDescriptorDataSource } from \"@/gated-signing/data/GatedDescriptorDataSource\";\nimport { gatedSigningTypes } from \"@/gated-signing/di/gatedSigningTypes\";\nimport { pkiTypes } from \"@/pki/di/pkiTypes\";\nimport { type PkiCertificateLoader } from \"@/pki/domain/PkiCertificateLoader\";\nimport { KeyId } from \"@/pki/model/KeyId\";\nimport { KeyUsage } from \"@/pki/model/KeyUsage\";\nimport type { ProxyDataSource } from \"@/proxy/data/ProxyDataSource\";\nimport { proxyTypes } from \"@/proxy/di/proxyTypes\";\nimport { ContextLoader } from \"@/shared/domain/ContextLoader\";\nimport {\n ClearSignContext,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\nimport type { TypedDataSchema } from \"@/shared/model/TypedDataContext\";\nimport { getSchemaHash } from \"@/typed-data/utils/getSchemaHash\";\n\nconst ZERO_ADDRESS = \"0x0000000000000000000000000000000000000000\";\n\nexport type GatedSigningTypedDataContextInput = {\n data: {\n types: TypedDataSchema;\n domain?: { verifyingContract?: string };\n };\n chainId: number;\n deviceModelId: DeviceModelId;\n challenge: string;\n};\n\nconst SUPPORTED_TYPES: ClearSignContextType[] = [\n ClearSignContextType.GATED_SIGNING,\n];\n\nfunction hasTypedDataShape(\n data: unknown,\n): data is { types: TypedDataSchema; domain?: { verifyingContract?: string } } {\n if (!data || typeof data !== \"object\") return false;\n const obj = data as Record<string, unknown>;\n if (\n !obj[\"types\"] ||\n typeof obj[\"types\"] !== \"object\" ||\n Array.isArray(obj[\"types\"])\n ) {\n return false;\n }\n const types = obj[\"types\"] as Record<string, unknown>;\n for (const key of Object.keys(types)) {\n if (typeof key !== \"string\") return false;\n const value = types[key];\n if (!Array.isArray(value)) return false;\n for (const item of value) {\n if (\n !item ||\n typeof item !== \"object\" ||\n typeof (item as { name?: unknown }).name !== \"string\" ||\n typeof (item as { type?: unknown }).type !== \"string\"\n ) {\n return false;\n }\n }\n }\n return true;\n}\n\n@injectable()\nexport class GatedSigningTypedDataContextLoader\n implements ContextLoader<GatedSigningTypedDataContextInput>\n{\n constructor(\n @inject(gatedSigningTypes.GatedDescriptorDataSource)\n private readonly _dataSource: GatedDescriptorDataSource,\n @inject(pkiTypes.PkiCertificateLoader)\n private readonly _certificateLoader: PkiCertificateLoader,\n @inject(proxyTypes.ProxyDataSource)\n private readonly _proxyDataSource: ProxyDataSource,\n ) {}\n\n canHandle(\n input: unknown,\n expectedTypes: ClearSignContextType[],\n ): input is GatedSigningTypedDataContextInput {\n return (\n SUPPORTED_TYPES.every((type) => expectedTypes.includes(type)) &&\n typeof input === \"object\" &&\n input !== null &&\n \"data\" in input &&\n hasTypedDataShape((input as GatedSigningTypedDataContextInput).data) &&\n \"chainId\" in input &&\n \"deviceModelId\" in input &&\n (input as GatedSigningTypedDataContextInput).deviceModelId !==\n undefined &&\n \"challenge\" in input &&\n typeof (input as GatedSigningTypedDataContextInput).challenge === \"string\"\n );\n }\n\n async load({\n data,\n chainId,\n deviceModelId,\n challenge,\n }: GatedSigningTypedDataContextInput): Promise<ClearSignContext[]> {\n const raw = data.domain?.verifyingContract?.toLowerCase() ?? ZERO_ADDRESS;\n const verifyingContract: HexaString = raw.startsWith(\"0x\")\n ? (raw as HexaString)\n : (`0x${raw}` as HexaString);\n const schemaHash = getSchemaHash(data.types);\n\n const directResult = await this._dataSource.getGatedDescriptorForTypedData({\n contractAddress: verifyingContract,\n schemaHash,\n chainId,\n });\n\n if (directResult.isRight()) {\n const { signedDescriptor } = directResult.unsafeCoerce();\n const certificate = await this._certificateLoader.loadCertificate({\n keyId: KeyId.CalGatedSigning,\n keyUsage: KeyUsage.GatedSigning,\n targetDevice: deviceModelId,\n });\n return [\n {\n type: ClearSignContextType.GATED_SIGNING,\n payload: signedDescriptor,\n certificate,\n },\n ];\n }\n\n const firstError: Error = directResult.caseOf({\n Left: (error) => error,\n Right: () => new Error(\"unreachable\"),\n });\n\n const proxyResult =\n await this._proxyDataSource.getProxyImplementationAddress({\n proxyAddress: verifyingContract,\n chainId,\n challenge,\n calldata: \"0x\",\n });\n\n if (proxyResult.isLeft()) {\n return [\n {\n type: ClearSignContextType.ERROR,\n error: firstError,\n },\n ];\n }\n\n const proxyData = proxyResult.unsafeCoerce();\n const implRaw = proxyData.implementationAddress.toLowerCase();\n const implementationAddress: HexaString = implRaw.startsWith(\"0x\")\n ? (implRaw as HexaString)\n : (`0x${implRaw}` as HexaString);\n\n const implGatedResult =\n await this._dataSource.getGatedDescriptorForTypedData({\n contractAddress: implementationAddress,\n schemaHash,\n chainId,\n });\n\n if (implGatedResult.isLeft()) {\n return [\n {\n type: ClearSignContextType.ERROR,\n error: firstError,\n },\n ];\n }\n\n const { signedDescriptor } = implGatedResult.unsafeCoerce();\n const [proxyCertificate, gatedCertificate] = await Promise.all([\n this._certificateLoader.loadCertificate({\n keyId: proxyData.keyId,\n keyUsage: proxyData.keyUsage,\n targetDevice: deviceModelId,\n }),\n this._certificateLoader.loadCertificate({\n keyId: KeyId.CalGatedSigning,\n keyUsage: KeyUsage.GatedSigning,\n targetDevice: deviceModelId,\n }),\n ]);\n\n return [\n {\n type: ClearSignContextType.PROXY_INFO,\n payload: proxyData.signedDescriptor,\n certificate: proxyCertificate,\n },\n {\n type: ClearSignContextType.GATED_SIGNING,\n payload: signedDescriptor,\n certificate: gatedCertificate,\n },\n ];\n }\n}\n"],
|
|
5
|
+
"mappings": "okBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,wCAAAE,IAAA,eAAAC,EAAAH,GAIA,IAAAI,EAAmC,qBAGnCC,EAAkC,gDAClCC,EAAyB,6BAEzBC,EAAsB,6BACtBC,EAAyB,gCAEzBC,EAA2B,iCAE3BC,EAGO,2CAEPC,EAA8B,4CAE9B,MAAMC,EAAe,6CAYfC,EAA0C,CAC9C,uBAAqB,aACvB,EAEA,SAASC,EACPC,EAC6E,CAC7E,GAAI,CAACA,GAAQ,OAAOA,GAAS,SAAU,MAAO,GAC9C,MAAMC,EAAMD,EACZ,GACE,CAACC,EAAI,OACL,OAAOA,EAAI,OAAa,UACxB,MAAM,QAAQA,EAAI,KAAQ,EAE1B,MAAO,GAET,MAAMC,EAAQD,EAAI,MAClB,UAAWE,KAAO,OAAO,KAAKD,CAAK,EAAG,CACpC,GAAI,OAAOC,GAAQ,SAAU,MAAO,GACpC,MAAMC,EAAQF,EAAMC,CAAG,EACvB,GAAI,CAAC,MAAM,QAAQC,CAAK,EAAG,MAAO,GAClC,UAAWC,KAAQD,EACjB,GACE,CAACC,GACD,OAAOA,GAAS,UAChB,OAAQA,EAA4B,MAAS,UAC7C,OAAQA,EAA4B,MAAS,SAE7C,MAAO,EAGb,CACA,MAAO,EACT,CAGO,IAAMC,EAAN,KAEP,CACE,YAEmBC,EAEAC,EAEAC,EACjB,CALiB,iBAAAF,EAEA,wBAAAC,EAEA,sBAAAC,CAChB,CAEH,UACEC,EACAC,EAC4C,CAC5C,OACEb,EAAgB,MAAOc,GAASD,EAAc,SAASC,CAAI,CAAC,GAC5D,OAAOF,GAAU,UACjBA,IAAU,MACV,SAAUA,GACVX,EAAmBW,EAA4C,IAAI,GACnE,YAAaA,GACb,kBAAmBA,GAClBA,EAA4C,gBAC3C,QACF,cAAeA,GACf,OAAQA,EAA4C,WAAc,QAEtE,CAEA,MAAM,KAAK,CACT,KAAAV,EACA,QAAAa,EACA,cAAAC,EACA,UAAAC,CACF,EAAmE,CACjE,MAAMC,EAAMhB,EAAK,QAAQ,mBAAmB,YAAY,GAAKH,EACvDoB,EAAgCD,EAAI,WAAW,IAAI,EACpDA,EACA,KAAKA,CAAG,GACPE,KAAa,iBAAclB,EAAK,KAAK,EAErCmB,EAAe,MAAM,KAAK,YAAY,+BAA+B,CACzE,gBAAiBF,EACjB,WAAAC,EACA,QAAAL,CACF,CAAC,EAED,GAAIM,EAAa,QAAQ,EAAG,CAC1B,KAAM,CAAE,iBAAAC,CAAiB,EAAID,EAAa,aAAa,EACjDE,EAAc,MAAM,KAAK,mBAAmB,gBAAgB,CAChE,MAAO,QAAM,gBACb,SAAU,WAAS,aACnB,aAAcP,CAChB,CAAC,EACD,MAAO,CACL,CACE,KAAM,uBAAqB,cAC3B,QAASM,EACT,YAAAC,CACF,CACF,CACF,CAEA,MAAMC,EAAoBH,EAAa,OAAO,CAC5C,KAAOI,GAAUA,EACjB,MAAO,IAAM,IAAI,MAAM,aAAa,CACtC,CAAC,EAEKC,EACJ,MAAM,KAAK,iBAAiB,8BAA8B,CACxD,aAAcP,EACd,QAAAJ,EACA,UAAAE,EACA,SAAU,IACZ,CAAC,EAEH,GAAIS,EAAY,OAAO,EACrB,MAAO,CACL,CACE,KAAM,uBAAqB,MAC3B,MAAOF,CACT,CACF,EAGF,MAAMG,EAAYD,EAAY,aAAa,EACrCE,EAAUD,EAAU,sBAAsB,YAAY,EACtDE,EAAoCD,EAAQ,WAAW,IAAI,EAC5DA,EACA,KAAKA,CAAO,GAEXE,EACJ,MAAM,KAAK,YAAY,+BAA+B,CACpD,gBAAiBD,EACjB,WAAAT,EACA,QAAAL,CACF,CAAC,EAEH,GAAIe,EAAgB,OAAO,EACzB,MAAO,CACL,CACE,KAAM,uBAAqB,MAC3B,MAAON,CACT,CACF,EAGF,KAAM,CAAE,iBAAAF,CAAiB,EAAIQ,EAAgB,aAAa,EACpD,CAACC,EAAkBC,CAAgB,EAAI,MAAM,QAAQ,IAAI,CAC7D,KAAK,mBAAmB,gBAAgB,CACtC,MAAOL,EAAU,MACjB,SAAUA,EAAU,SACpB,aAAcX,CAChB,CAAC,EACD,KAAK,mBAAmB,gBAAgB,CACtC,MAAO,QAAM,gBACb,SAAU,WAAS,aACnB,aAAcA,CAChB,CAAC,CACH,CAAC,EAED,MAAO,CACL,CACE,KAAM,uBAAqB,WAC3B,QAASW,EAAU,iBACnB,YAAaI,CACf,EACA,CACE,KAAM,uBAAqB,cAC3B,QAAST,EACT,YAAaU,CACf,CACF,CACF,CACF,EAxIaxB,EAANyB,EAAA,IADN,cAAW,EAKPC,EAAA,eAAO,oBAAkB,yBAAyB,GAElDA,EAAA,eAAO,WAAS,oBAAoB,GAEpCA,EAAA,eAAO,aAAW,eAAe,IARzB1B",
|
|
6
|
+
"names": ["GatedSigningTypedDataContextLoader_exports", "__export", "GatedSigningTypedDataContextLoader", "__toCommonJS", "import_inversify", "import_gatedSigningTypes", "import_pkiTypes", "import_KeyId", "import_KeyUsage", "import_proxyTypes", "import_ClearSignContext", "import_getSchemaHash", "ZERO_ADDRESS", "SUPPORTED_TYPES", "hasTypedDataShape", "data", "obj", "types", "key", "value", "item", "GatedSigningTypedDataContextLoader", "_dataSource", "_certificateLoader", "_proxyDataSource", "input", "expectedTypes", "type", "chainId", "deviceModelId", "challenge", "raw", "verifyingContract", "schemaHash", "directResult", "signedDescriptor", "certificate", "firstError", "error", "proxyResult", "proxyData", "implRaw", "implementationAddress", "implGatedResult", "proxyCertificate", "gatedCertificate", "__decorateClass", "__decorateParam"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var i=require("@ledgerhq/device-management-kit"),n=require("purify-ts"),m=require("../../gated-signing/domain/GatedSigningTypedDataContextLoader"),g=require("../../pki/model/KeyId"),h=require("../../pki/model/KeyUsage"),c=require("../../shared/model/ClearSignContext");describe("GatedSigningTypedDataContextLoader",()=>{const a={getGatedDescriptor:vi.fn(),getGatedDescriptorForTypedData:vi.fn()},s={loadCertificate:vi.fn()},l={getProxyImplementationAddress:vi.fn()},t=new m.GatedSigningTypedDataContextLoader(a,s,l),f={keyUsageNumber:1,payload:new Uint8Array([1,2,3])},r=[c.ClearSignContextType.GATED_SIGNING],e={data:{types:{EIP712Domain:[{name:"name",type:"string"},{name:"chainId",type:"uint256"}],Mail:[{name:"subject",type:"string"}]},domain:{verifyingContract:"0x1111111254fb6c44bac0bed2854e76f90643097d"}},chainId:1,deviceModelId:i.DeviceModelId.STAX,challenge:"test-challenge"};beforeEach(()=>{vi.resetAllMocks(),vi.spyOn(s,"loadCertificate").mockResolvedValue(f)}),describe("canHandle",()=>{it("should return true for valid typed data input",()=>{expect(t.canHandle(e,r)).toBe(!0)}),it("should return false when expected types do not include GATED_SIGNING",()=>{expect(t.canHandle(e,[c.ClearSignContextType.TOKEN])).toBe(!1),expect(t.canHandle(e,[c.ClearSignContextType.DYNAMIC_NETWORK])).toBe(!1)}),it.each([[null,"null input"],[void 0,"undefined input"],[{},"empty object"],["string","string input"]])("should return false for %s",(d,o)=>{expect(t.canHandle(d,r)).toBe(!1)}),it("should return false for transaction-style input (selector, to)",()=>{const d={to:"0x1111111254fb6c44bac0bed2854e76f90643097d",selector:"0xa1251d75",chainId:1,deviceModelId:i.DeviceModelId.STAX};expect(t.canHandle(d,r)).toBe(!1)}),it("should return false when data is missing",()=>{expect(t.canHandle({chainId:1,deviceModelId:i.DeviceModelId.STAX},r)).toBe(!1)}),it("should return false when data.types is not a valid schema",()=>{expect(t.canHandle({data:{types:"not-an-object"},chainId:1,deviceModelId:i.DeviceModelId.STAX,challenge:e.challenge},r)).toBe(!1),expect(t.canHandle({data:{types:{}},chainId:1,deviceModelId:i.DeviceModelId.STAX,challenge:e.challenge},r)).toBe(!0)}),it("should return false when chainId or deviceModelId is missing",()=>{expect(t.canHandle({data:e.data,deviceModelId:i.DeviceModelId.STAX,challenge:e.challenge},r)).toBe(!1),expect(t.canHandle({data:e.data,chainId:1,challenge:e.challenge},r)).toBe(!1)}),it("should return false when challenge is missing",()=>{expect(t.canHandle({data:e.data,chainId:1,deviceModelId:i.DeviceModelId.STAX},r)).toBe(!1)})}),describe("load",()=>{const d="010122020101222a30783131313131313235346662366334346261633062656432383534653736663930363433303937642308000000000000000140086131323531643735150100";it("should return error context when getGatedDescriptorForTypedData returns Left and proxy resolution fails",async()=>{const o=new Error("No gated descriptor for schema hash");vi.spyOn(a,"getGatedDescriptorForTypedData").mockResolvedValue((0,n.Left)(o)),vi.spyOn(l,"getProxyImplementationAddress").mockResolvedValue((0,n.Left)(new Error("Not a proxy")));const p=await t.load(e);expect(p).toEqual([{type:c.ClearSignContextType.ERROR,error:o}]),expect(a.getGatedDescriptorForTypedData).toHaveBeenCalledWith({contractAddress:e.data.domain.verifyingContract.toLowerCase(),schemaHash:expect.any(String),chainId:e.chainId}),expect(l.getProxyImplementationAddress).toHaveBeenCalledWith({proxyAddress:e.data.domain.verifyingContract.toLowerCase(),chainId:e.chainId,challenge:e.challenge,calldata:"0x"}),expect(s.loadCertificate).not.toHaveBeenCalled()}),it("should return gated signing context when getGatedDescriptorForTypedData succeeds",async()=>{vi.spyOn(a,"getGatedDescriptorForTypedData").mockResolvedValue((0,n.Right)({signedDescriptor:d}));const o=await t.load(e);expect(o).toHaveLength(1),expect(o[0]).toMatchObject({type:c.ClearSignContextType.GATED_SIGNING,payload:d,certificate:f}),expect(a.getGatedDescriptorForTypedData).toHaveBeenCalledWith({contractAddress:e.data.domain.verifyingContract.toLowerCase(),schemaHash:expect.any(String),chainId:e.chainId}),expect(s.loadCertificate).toHaveBeenCalledWith({keyId:g.KeyId.CalGatedSigning,keyUsage:h.KeyUsage.GatedSigning,targetDevice:e.deviceModelId})}),it("should use zero address when domain.verifyingContract is missing",async()=>{vi.spyOn(a,"getGatedDescriptorForTypedData").mockResolvedValue((0,n.Right)({signedDescriptor:d})),await t.load({data:{types:e.data.types},chainId:e.chainId,deviceModelId:e.deviceModelId,challenge:e.challenge}),expect(a.getGatedDescriptorForTypedData).toHaveBeenCalledWith(expect.objectContaining({contractAddress:"0x0000000000000000000000000000000000000000"}))}),it("should request certificate for correct device model",async()=>{vi.spyOn(a,"getGatedDescriptorForTypedData").mockResolvedValue((0,n.Right)({signedDescriptor:d})),await t.load({...e,deviceModelId:i.DeviceModelId.FLEX}),expect(s.loadCertificate).toHaveBeenCalledWith({keyId:g.KeyId.CalGatedSigning,keyUsage:h.KeyUsage.GatedSigning,targetDevice:i.DeviceModelId.FLEX})}),it("should reject when certificate loading fails",async()=>{const o=new Error("Certificate loading failed");vi.spyOn(a,"getGatedDescriptorForTypedData").mockResolvedValue((0,n.Right)({signedDescriptor:d})),vi.spyOn(s,"loadCertificate").mockRejectedValue(o),await expect(t.load(e)).rejects.toThrow(o)}),it("should return PROXY_INFO and GATED_SIGNING when verifying contract is proxy and gated descriptor exists for implementation",async()=>{const o="0xabcdef1234567890abcdef1234567890abcdef12",p="0xproxy-descriptor";vi.spyOn(a,"getGatedDescriptorForTypedData").mockResolvedValueOnce((0,n.Left)(new Error("No gated descriptor"))).mockResolvedValueOnce((0,n.Right)({signedDescriptor:d})),vi.spyOn(l,"getProxyImplementationAddress").mockResolvedValue((0,n.Right)({implementationAddress:o,signedDescriptor:p,keyId:"domain-metadata",keyUsage:"trusted-name"}));const y=await t.load(e);expect(y).toHaveLength(2),expect(y[0]).toMatchObject({type:c.ClearSignContextType.PROXY_INFO,payload:p}),expect(y[1]).toMatchObject({type:c.ClearSignContextType.GATED_SIGNING,payload:d}),expect(a.getGatedDescriptorForTypedData).toHaveBeenCalledTimes(2),expect(a.getGatedDescriptorForTypedData).toHaveBeenNthCalledWith(1,{contractAddress:e.data.domain.verifyingContract.toLowerCase(),schemaHash:expect.any(String),chainId:e.chainId}),expect(a.getGatedDescriptorForTypedData).toHaveBeenNthCalledWith(2,{contractAddress:o.toLowerCase(),schemaHash:expect.any(String),chainId:e.chainId})})})});
|
|
2
|
+
//# sourceMappingURL=GatedSigningTypedDataContextLoader.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/gated-signing/domain/GatedSigningTypedDataContextLoader.test.ts"],
|
|
4
|
+
"sourcesContent": ["import { DeviceModelId } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { type GatedDescriptorDataSource } from \"@/gated-signing/data/GatedDescriptorDataSource\";\nimport {\n type GatedSigningTypedDataContextInput,\n GatedSigningTypedDataContextLoader,\n} from \"@/gated-signing/domain/GatedSigningTypedDataContextLoader\";\nimport { type PkiCertificateLoader } from \"@/pki/domain/PkiCertificateLoader\";\nimport { KeyId } from \"@/pki/model/KeyId\";\nimport { KeyUsage } from \"@/pki/model/KeyUsage\";\nimport { type PkiCertificate } from \"@/pki/model/PkiCertificate\";\nimport type { ProxyDataSource } from \"@/proxy/data/ProxyDataSource\";\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\n\ndescribe(\"GatedSigningTypedDataContextLoader\", () => {\n const mockGatedDescriptorDataSource: GatedDescriptorDataSource = {\n getGatedDescriptor: vi.fn(),\n getGatedDescriptorForTypedData: vi.fn(),\n };\n\n const mockCertificateLoader: PkiCertificateLoader = {\n loadCertificate: vi.fn(),\n };\n\n const mockProxyDataSource: ProxyDataSource = {\n getProxyImplementationAddress: vi.fn(),\n };\n\n const loader = new GatedSigningTypedDataContextLoader(\n mockGatedDescriptorDataSource,\n mockCertificateLoader,\n mockProxyDataSource,\n );\n\n const mockCertificate: PkiCertificate = {\n keyUsageNumber: 1,\n payload: new Uint8Array([0x01, 0x02, 0x03]),\n };\n\n const SUPPORTED_TYPES: ClearSignContextType[] = [\n ClearSignContextType.GATED_SIGNING,\n ];\n\n const validInput: GatedSigningTypedDataContextInput = {\n data: {\n types: {\n EIP712Domain: [\n { name: \"name\", type: \"string\" },\n { name: \"chainId\", type: \"uint256\" },\n ],\n Mail: [{ name: \"subject\", type: \"string\" }],\n },\n domain: {\n verifyingContract: \"0x1111111254fb6c44bac0bed2854e76f90643097d\",\n },\n },\n chainId: 1,\n deviceModelId: DeviceModelId.STAX,\n challenge: \"test-challenge\",\n };\n\n beforeEach(() => {\n vi.resetAllMocks();\n vi.spyOn(mockCertificateLoader, \"loadCertificate\").mockResolvedValue(\n mockCertificate,\n );\n });\n\n describe(\"canHandle\", () => {\n it(\"should return true for valid typed data input\", () => {\n expect(loader.canHandle(validInput, SUPPORTED_TYPES)).toBe(true);\n });\n\n it(\"should return false when expected types do not include GATED_SIGNING\", () => {\n expect(loader.canHandle(validInput, [ClearSignContextType.TOKEN])).toBe(\n false,\n );\n expect(\n loader.canHandle(validInput, [ClearSignContextType.DYNAMIC_NETWORK]),\n ).toBe(false);\n });\n\n it.each([\n [null, \"null input\"],\n [undefined, \"undefined input\"],\n [{}, \"empty object\"],\n [\"string\", \"string input\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, SUPPORTED_TYPES)).toBe(false);\n });\n\n it(\"should return false for transaction-style input (selector, to)\", () => {\n const transactionInput = {\n to: \"0x1111111254fb6c44bac0bed2854e76f90643097d\",\n selector: \"0xa1251d75\",\n chainId: 1,\n deviceModelId: DeviceModelId.STAX,\n };\n expect(loader.canHandle(transactionInput, SUPPORTED_TYPES)).toBe(false);\n });\n\n it(\"should return false when data is missing\", () => {\n expect(\n loader.canHandle(\n { chainId: 1, deviceModelId: DeviceModelId.STAX },\n SUPPORTED_TYPES,\n ),\n ).toBe(false);\n });\n\n it(\"should return false when data.types is not a valid schema\", () => {\n expect(\n loader.canHandle(\n {\n data: { types: \"not-an-object\" },\n chainId: 1,\n deviceModelId: DeviceModelId.STAX,\n challenge: validInput.challenge,\n },\n SUPPORTED_TYPES,\n ),\n ).toBe(false);\n expect(\n loader.canHandle(\n {\n data: { types: {} },\n chainId: 1,\n deviceModelId: DeviceModelId.STAX,\n challenge: validInput.challenge,\n },\n SUPPORTED_TYPES,\n ),\n ).toBe(true);\n });\n\n it(\"should return false when chainId or deviceModelId is missing\", () => {\n expect(\n loader.canHandle(\n {\n data: validInput.data,\n deviceModelId: DeviceModelId.STAX,\n challenge: validInput.challenge,\n },\n SUPPORTED_TYPES,\n ),\n ).toBe(false);\n expect(\n loader.canHandle(\n {\n data: validInput.data,\n chainId: 1,\n challenge: validInput.challenge,\n },\n SUPPORTED_TYPES,\n ),\n ).toBe(false);\n });\n\n it(\"should return false when challenge is missing\", () => {\n expect(\n loader.canHandle(\n {\n data: validInput.data,\n chainId: 1,\n deviceModelId: DeviceModelId.STAX,\n },\n SUPPORTED_TYPES,\n ),\n ).toBe(false);\n });\n });\n\n describe(\"load\", () => {\n const signedDescriptor =\n \"010122020101222a30783131313131313235346662366334346261633062656432383534653736663930363433303937642308000000000000000140086131323531643735150100\";\n\n it(\"should return error context when getGatedDescriptorForTypedData returns Left and proxy resolution fails\", async () => {\n const error = new Error(\"No gated descriptor for schema hash\");\n vi.spyOn(\n mockGatedDescriptorDataSource,\n \"getGatedDescriptorForTypedData\",\n ).mockResolvedValue(Left(error));\n vi.spyOn(\n mockProxyDataSource,\n \"getProxyImplementationAddress\",\n ).mockResolvedValue(Left(new Error(\"Not a proxy\")));\n\n const result = await loader.load(validInput);\n\n expect(result).toEqual([\n {\n type: ClearSignContextType.ERROR,\n error,\n },\n ]);\n expect(\n mockGatedDescriptorDataSource.getGatedDescriptorForTypedData,\n ).toHaveBeenCalledWith({\n contractAddress:\n validInput.data.domain!.verifyingContract!.toLowerCase(),\n schemaHash: expect.any(String),\n chainId: validInput.chainId,\n });\n expect(\n mockProxyDataSource.getProxyImplementationAddress,\n ).toHaveBeenCalledWith({\n proxyAddress: validInput.data.domain!.verifyingContract!.toLowerCase(),\n chainId: validInput.chainId,\n challenge: validInput.challenge,\n calldata: \"0x\",\n });\n expect(mockCertificateLoader.loadCertificate).not.toHaveBeenCalled();\n });\n\n it(\"should return gated signing context when getGatedDescriptorForTypedData succeeds\", async () => {\n vi.spyOn(\n mockGatedDescriptorDataSource,\n \"getGatedDescriptorForTypedData\",\n ).mockResolvedValue(Right({ signedDescriptor }));\n\n const result = await loader.load(validInput);\n\n expect(result).toHaveLength(1);\n expect(result[0]).toMatchObject({\n type: ClearSignContextType.GATED_SIGNING,\n payload: signedDescriptor,\n certificate: mockCertificate,\n });\n expect(\n mockGatedDescriptorDataSource.getGatedDescriptorForTypedData,\n ).toHaveBeenCalledWith({\n contractAddress:\n validInput.data.domain!.verifyingContract!.toLowerCase(),\n schemaHash: expect.any(String),\n chainId: validInput.chainId,\n });\n expect(mockCertificateLoader.loadCertificate).toHaveBeenCalledWith({\n keyId: KeyId.CalGatedSigning,\n keyUsage: KeyUsage.GatedSigning,\n targetDevice: validInput.deviceModelId,\n });\n });\n\n it(\"should use zero address when domain.verifyingContract is missing\", async () => {\n vi.spyOn(\n mockGatedDescriptorDataSource,\n \"getGatedDescriptorForTypedData\",\n ).mockResolvedValue(Right({ signedDescriptor }));\n\n await loader.load({\n data: { types: validInput.data.types },\n chainId: validInput.chainId,\n deviceModelId: validInput.deviceModelId,\n challenge: validInput.challenge,\n });\n\n expect(\n mockGatedDescriptorDataSource.getGatedDescriptorForTypedData,\n ).toHaveBeenCalledWith(\n expect.objectContaining({\n contractAddress: \"0x0000000000000000000000000000000000000000\",\n }),\n );\n });\n\n it(\"should request certificate for correct device model\", async () => {\n vi.spyOn(\n mockGatedDescriptorDataSource,\n \"getGatedDescriptorForTypedData\",\n ).mockResolvedValue(Right({ signedDescriptor }));\n\n await loader.load({\n ...validInput,\n deviceModelId: DeviceModelId.FLEX,\n });\n\n expect(mockCertificateLoader.loadCertificate).toHaveBeenCalledWith({\n keyId: KeyId.CalGatedSigning,\n keyUsage: KeyUsage.GatedSigning,\n targetDevice: DeviceModelId.FLEX,\n });\n });\n\n it(\"should reject when certificate loading fails\", async () => {\n const certificateError = new Error(\"Certificate loading failed\");\n vi.spyOn(\n mockGatedDescriptorDataSource,\n \"getGatedDescriptorForTypedData\",\n ).mockResolvedValue(Right({ signedDescriptor }));\n vi.spyOn(mockCertificateLoader, \"loadCertificate\").mockRejectedValue(\n certificateError,\n );\n\n await expect(loader.load(validInput)).rejects.toThrow(certificateError);\n });\n\n it(\"should return PROXY_INFO and GATED_SIGNING when verifying contract is proxy and gated descriptor exists for implementation\", async () => {\n const implementationAddress =\n \"0xabcdef1234567890abcdef1234567890abcdef12\";\n const proxySignedDescriptor = \"0xproxy-descriptor\";\n vi.spyOn(mockGatedDescriptorDataSource, \"getGatedDescriptorForTypedData\")\n .mockResolvedValueOnce(Left(new Error(\"No gated descriptor\")))\n .mockResolvedValueOnce(Right({ signedDescriptor }));\n vi.spyOn(\n mockProxyDataSource,\n \"getProxyImplementationAddress\",\n ).mockResolvedValue(\n Right({\n implementationAddress,\n signedDescriptor: proxySignedDescriptor,\n keyId: \"domain-metadata\",\n keyUsage: \"trusted-name\",\n }),\n );\n\n const result = await loader.load(validInput);\n\n expect(result).toHaveLength(2);\n expect(result[0]).toMatchObject({\n type: ClearSignContextType.PROXY_INFO,\n payload: proxySignedDescriptor,\n });\n expect(result[1]).toMatchObject({\n type: ClearSignContextType.GATED_SIGNING,\n payload: signedDescriptor,\n });\n expect(\n mockGatedDescriptorDataSource.getGatedDescriptorForTypedData,\n ).toHaveBeenCalledTimes(2);\n expect(\n mockGatedDescriptorDataSource.getGatedDescriptorForTypedData,\n ).toHaveBeenNthCalledWith(1, {\n contractAddress:\n validInput.data.domain!.verifyingContract!.toLowerCase(),\n schemaHash: expect.any(String),\n chainId: validInput.chainId,\n });\n expect(\n mockGatedDescriptorDataSource.getGatedDescriptorForTypedData,\n ).toHaveBeenNthCalledWith(2, {\n contractAddress: implementationAddress.toLowerCase(),\n schemaHash: expect.any(String),\n chainId: validInput.chainId,\n });\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_device_management_kit", "import_purify_ts", "import_GatedSigningTypedDataContextLoader", "import_KeyId", "import_KeyUsage", "import_ClearSignContext", "mockGatedDescriptorDataSource", "mockCertificateLoader", "mockProxyDataSource", "loader", "mockCertificate", "SUPPORTED_TYPES", "validInput", "input", "_description", "transactionInput", "signedDescriptor", "error", "result", "certificateError", "implementationAddress", "proxySignedDescriptor"]
|
|
7
|
+
}
|
package/lib/cjs/src/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var C=Object.defineProperty;var n=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var p=(t,e,f,m)=>{if(e&&typeof e=="object"||typeof e=="function")for(let x of l(e))!d.call(t,x)&&x!==f&&C(t,x,{get:()=>e[x],enumerable:!(m=n(e,x))||m.enumerable});return t},r=(t,e,f)=>(p(t,e,"default"),f&&p(f,e,"default"));var M=t=>p(C({},"__esModule",{value:!0}),t);var o={};module.exports=M(o);r(o,require("./calldata/data/CalldataDescriptorDataSource"),module.exports);r(o,require("./calldata/data/HttpCalldataDescriptorDataSource"),module.exports);r(o,require("./calldata/domain/CalldataContextLoader"),module.exports);r(o,require("./ContextModule"),module.exports);r(o,require("./ContextModuleBuilder"),module.exports);r(o,require("./DefaultContextModule"),module.exports);r(o,require("./dynamic-network/data/DynamicNetworkDataSource"),module.exports);r(o,require("./dynamic-network/data/HttpDynamicNetworkDataSource"),module.exports);r(o,require("./dynamic-network/domain/DynamicNetworkContextLoader"),module.exports);r(o,require("./dynamic-network/model/DynamicNetworkConfiguration"),module.exports);r(o,require("./external-plugin/data/ExternalPluginDataSource"),module.exports);r(o,require("./external-plugin/data/HttpExternalPluginDataSource"),module.exports);r(o,require("./external-plugin/domain/ExternalPluginContextLoader"),module.exports);r(o,require("./gated-signing/data/GatedDescriptorDataSource"),module.exports);r(o,require("./gated-signing/data/HttpGatedDescriptorDataSource"),module.exports);r(o,require("./gated-signing/domain/GatedSigningContextLoader"),module.exports);r(o,require("./gated-signing/domain/GatedSigningTypedDataContextLoader"),module.exports);r(o,require("./nft/data/HttpNftDataSource"),module.exports);r(o,require("./nft/data/NftDataSource"),module.exports);r(o,require("./nft/domain/NftContextFieldLoader"),module.exports);r(o,require("./nft/domain/NftContextLoader"),module.exports);r(o,require("./pki/data/HttpPkiCertificateDataSource"),module.exports);r(o,require("./pki/data/PkiCertificateDataSource"),module.exports);r(o,require("./pki/domain/DefaultPkiCertificateLoader"),module.exports);r(o,require("./pki/domain/PkiCertificateLoader"),module.exports);r(o,require("./pki/model/KeyId"),module.exports);r(o,require("./pki/model/KeyUsage"),module.exports);r(o,require("./pki/model/PkiCertificate"),module.exports);r(o,require("./pki/model/PkiCertificateInfo"),module.exports);r(o,require("./proxy/data/HttpProxyDataSource"),module.exports);r(o,require("./proxy/data/HttpSafeProxyDataSource"),module.exports);r(o,require("./proxy/data/ProxyDataSource"),module.exports);r(o,require("./proxy/domain/ProxyContextFieldLoader"),module.exports);r(o,require("./reporter/data/BlindSigningReporterDatasource"),module.exports);r(o,require("./reporter/data/HttpBlindSigningReporterDatasource"),module.exports);r(o,require("./reporter/domain/BlindSigningReporter"),module.exports);r(o,require("./reporter/domain/DefaultBlindSigningReporter"),module.exports);r(o,require("./reporter/model/BlindSigningEvent"),module.exports);r(o,require("./reporter/model/BlindSigningModelId"),module.exports);r(o,require("./shared/domain/ContextFieldLoader"),module.exports);r(o,require("./shared/domain/ContextLoader"),module.exports);r(o,require("./shared/model/ClearSignContext"),module.exports);r(o,require("./shared/model/GenericPath"),module.exports);r(o,require("./shared/model/SolanaContextTypes"),module.exports);r(o,require("./shared/model/TransactionSubset"),module.exports);r(o,require("./shared/model/TypedDataClearSignContext"),module.exports);r(o,require("./shared/model/TypedDataContext"),module.exports);r(o,require("./solana/data/HttpSolanaOwnerInfoDataSource"),module.exports);r(o,require("./solana/data/SolanaDataSource"),module.exports);r(o,require("./solana/domain/DefaultSolanaContextLoader"),module.exports);r(o,require("./solana/domain/SolanaContextLoader"),module.exports);r(o,require("./solana/domain/solanaContextTypes"),module.exports);r(o,require("./token/data/HttpTokenDataSource"),module.exports);r(o,require("./token/data/TokenDataSource"),module.exports);r(o,require("./token/domain/TokenContextFieldLoader"),module.exports);r(o,require("./token/domain/TokenContextLoader"),module.exports);r(o,require("./trusted-name/data/HttpTrustedNameDataSource"),module.exports);r(o,require("./trusted-name/data/TrustedNameDataSource"),module.exports);r(o,require("./trusted-name/domain/TrustedNameContextFieldLoader"),module.exports);r(o,require("./trusted-name/domain/TrustedNameContextLoader"),module.exports);r(o,require("./typed-data/data/HttpTypedDataDataSource"),module.exports);r(o,require("./typed-data/data/TypedDataDataSource"),module.exports);r(o,require("./typed-data/domain/DefaultTypedDataContextLoader"),module.exports);r(o,require("./typed-data/domain/TypedDataContextLoader"),module.exports);r(o,require("./typed-data/utils/getSchemaHash"),module.exports);r(o,require("./uniswap/data/AbiDecoderDataSource"),module.exports);r(o,require("./uniswap/data/CommandDecoderDataSource"),module.exports);r(o,require("./uniswap/data/DefaultCommandDecoderDataSource"),module.exports);r(o,require("./uniswap/data/EthersAbiDecoderDataSource"),module.exports);r(o,require("./uniswap/domain/UniswapContextLoader"),module.exports);0&&(module.exports={...require("./calldata/data/CalldataDescriptorDataSource"),...require("./calldata/data/HttpCalldataDescriptorDataSource"),...require("./calldata/domain/CalldataContextLoader"),...require("./ContextModule"),...require("./ContextModuleBuilder"),...require("./DefaultContextModule"),...require("./dynamic-network/data/DynamicNetworkDataSource"),...require("./dynamic-network/data/HttpDynamicNetworkDataSource"),...require("./dynamic-network/domain/DynamicNetworkContextLoader"),...require("./dynamic-network/model/DynamicNetworkConfiguration"),...require("./external-plugin/data/ExternalPluginDataSource"),...require("./external-plugin/data/HttpExternalPluginDataSource"),...require("./external-plugin/domain/ExternalPluginContextLoader"),...require("./gated-signing/data/GatedDescriptorDataSource"),...require("./gated-signing/data/HttpGatedDescriptorDataSource"),...require("./gated-signing/domain/GatedSigningContextLoader"),...require("./gated-signing/domain/GatedSigningTypedDataContextLoader"),...require("./nft/data/HttpNftDataSource"),...require("./nft/data/NftDataSource"),...require("./nft/domain/NftContextFieldLoader"),...require("./nft/domain/NftContextLoader"),...require("./pki/data/HttpPkiCertificateDataSource"),...require("./pki/data/PkiCertificateDataSource"),...require("./pki/domain/DefaultPkiCertificateLoader"),...require("./pki/domain/PkiCertificateLoader"),...require("./pki/model/KeyId"),...require("./pki/model/KeyUsage"),...require("./pki/model/PkiCertificate"),...require("./pki/model/PkiCertificateInfo"),...require("./proxy/data/HttpProxyDataSource"),...require("./proxy/data/HttpSafeProxyDataSource"),...require("./proxy/data/ProxyDataSource"),...require("./proxy/domain/ProxyContextFieldLoader"),...require("./reporter/data/BlindSigningReporterDatasource"),...require("./reporter/data/HttpBlindSigningReporterDatasource"),...require("./reporter/domain/BlindSigningReporter"),...require("./reporter/domain/DefaultBlindSigningReporter"),...require("./reporter/model/BlindSigningEvent"),...require("./reporter/model/BlindSigningModelId"),...require("./shared/domain/ContextFieldLoader"),...require("./shared/domain/ContextLoader"),...require("./shared/model/ClearSignContext"),...require("./shared/model/GenericPath"),...require("./shared/model/SolanaContextTypes"),...require("./shared/model/TransactionSubset"),...require("./shared/model/TypedDataClearSignContext"),...require("./shared/model/TypedDataContext"),...require("./solana/data/HttpSolanaOwnerInfoDataSource"),...require("./solana/data/SolanaDataSource"),...require("./solana/domain/DefaultSolanaContextLoader"),...require("./solana/domain/SolanaContextLoader"),...require("./solana/domain/solanaContextTypes"),...require("./token/data/HttpTokenDataSource"),...require("./token/data/TokenDataSource"),...require("./token/domain/TokenContextFieldLoader"),...require("./token/domain/TokenContextLoader"),...require("./trusted-name/data/HttpTrustedNameDataSource"),...require("./trusted-name/data/TrustedNameDataSource"),...require("./trusted-name/domain/TrustedNameContextFieldLoader"),...require("./trusted-name/domain/TrustedNameContextLoader"),...require("./typed-data/data/HttpTypedDataDataSource"),...require("./typed-data/data/TypedDataDataSource"),...require("./typed-data/domain/DefaultTypedDataContextLoader"),...require("./typed-data/domain/TypedDataContextLoader"),...require("./typed-data/utils/getSchemaHash"),...require("./uniswap/data/AbiDecoderDataSource"),...require("./uniswap/data/CommandDecoderDataSource"),...require("./uniswap/data/DefaultCommandDecoderDataSource"),...require("./uniswap/data/EthersAbiDecoderDataSource"),...require("./uniswap/domain/UniswapContextLoader")});
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/lib/cjs/src/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["export * from \"./calldata/data/CalldataDescriptorDataSource\";\nexport * from \"./calldata/data/HttpCalldataDescriptorDataSource\";\nexport * from \"./calldata/domain/CalldataContextLoader\";\nexport
|
|
5
|
-
"mappings": "iaAAA,IAAAA,EAAA,kBAAAC,EAAAD,GAAAE,EAAAF,EAAc,wDAAd,gBACAE,EAAAF,EAAc,4DADd,gBAEAE,EAAAF,EAAc,mDAFd,
|
|
4
|
+
"sourcesContent": ["export * from \"./calldata/data/CalldataDescriptorDataSource\";\nexport * from \"./calldata/data/HttpCalldataDescriptorDataSource\";\nexport * from \"./calldata/domain/CalldataContextLoader\";\nexport type {\n ContextModuleCalBranch,\n ContextModuleCalConfig,\n ContextModuleCalMode,\n ContextModuleConfig,\n ContextModuleDatasourceConfig,\n ContextModuleMetadataServiceConfig,\n ContextModuleReporterConfig,\n ContextModuleWeb3ChecksConfig,\n} from \"./config/model/ContextModuleConfig\";\nexport * from \"./ContextModule\";\nexport * from \"./ContextModuleBuilder\";\nexport * from \"./DefaultContextModule\";\nexport * from \"./dynamic-network/data/DynamicNetworkDataSource\";\nexport * from \"./dynamic-network/data/HttpDynamicNetworkDataSource\";\nexport * from \"./dynamic-network/domain/DynamicNetworkContextLoader\";\nexport * from \"./dynamic-network/model/DynamicNetworkConfiguration\";\nexport * from \"./external-plugin/data/ExternalPluginDataSource\";\nexport * from \"./external-plugin/data/HttpExternalPluginDataSource\";\nexport * from \"./external-plugin/domain/ExternalPluginContextLoader\";\nexport * from \"./gated-signing/data/GatedDescriptorDataSource\";\nexport * from \"./gated-signing/data/HttpGatedDescriptorDataSource\";\nexport * from \"./gated-signing/domain/GatedSigningContextLoader\";\nexport * from \"./gated-signing/domain/GatedSigningTypedDataContextLoader\";\nexport * from \"./nft/data/HttpNftDataSource\";\nexport * from \"./nft/data/NftDataSource\";\nexport * from \"./nft/domain/NftContextFieldLoader\";\nexport * from \"./nft/domain/NftContextLoader\";\nexport * from \"./pki/data/HttpPkiCertificateDataSource\";\nexport * from \"./pki/data/PkiCertificateDataSource\";\nexport * from \"./pki/domain/DefaultPkiCertificateLoader\";\nexport * from \"./pki/domain/PkiCertificateLoader\";\nexport * from \"./pki/model/KeyId\";\nexport * from \"./pki/model/KeyUsage\";\nexport * from \"./pki/model/PkiCertificate\";\nexport * from \"./pki/model/PkiCertificateInfo\";\nexport * from \"./proxy/data/HttpProxyDataSource\";\nexport * from \"./proxy/data/HttpSafeProxyDataSource\";\nexport * from \"./proxy/data/ProxyDataSource\";\nexport * from \"./proxy/domain/ProxyContextFieldLoader\";\nexport * from \"./reporter/data/BlindSigningReporterDatasource\";\nexport * from \"./reporter/data/HttpBlindSigningReporterDatasource\";\nexport * from \"./reporter/domain/BlindSigningReporter\";\nexport * from \"./reporter/domain/DefaultBlindSigningReporter\";\nexport * from \"./reporter/model/BlindSigningEvent\";\nexport * from \"./reporter/model/BlindSigningModelId\";\nexport * from \"./shared/domain/ContextFieldLoader\";\nexport * from \"./shared/domain/ContextLoader\";\nexport * from \"./shared/model/ClearSignContext\";\nexport * from \"./shared/model/GenericPath\";\nexport * from \"./shared/model/SolanaContextTypes\";\nexport * from \"./shared/model/TransactionSubset\";\nexport * from \"./shared/model/TypedDataClearSignContext\";\nexport * from \"./shared/model/TypedDataContext\";\nexport * from \"./solana/data/HttpSolanaOwnerInfoDataSource\";\nexport * from \"./solana/data/SolanaDataSource\";\nexport * from \"./solana/domain/DefaultSolanaContextLoader\";\nexport * from \"./solana/domain/SolanaContextLoader\";\nexport * from \"./solana/domain/solanaContextTypes\";\nexport * from \"./token/data/HttpTokenDataSource\";\nexport * from \"./token/data/TokenDataSource\";\nexport * from \"./token/domain/TokenContextFieldLoader\";\nexport * from \"./token/domain/TokenContextLoader\";\nexport * from \"./trusted-name/data/HttpTrustedNameDataSource\";\nexport * from \"./trusted-name/data/TrustedNameDataSource\";\nexport * from \"./trusted-name/domain/TrustedNameContextFieldLoader\";\nexport * from \"./trusted-name/domain/TrustedNameContextLoader\";\nexport * from \"./typed-data/data/HttpTypedDataDataSource\";\nexport * from \"./typed-data/data/TypedDataDataSource\";\nexport * from \"./typed-data/domain/DefaultTypedDataContextLoader\";\nexport * from \"./typed-data/domain/TypedDataContextLoader\";\nexport * from \"./typed-data/utils/getSchemaHash\";\nexport * from \"./uniswap/data/AbiDecoderDataSource\";\nexport * from \"./uniswap/data/CommandDecoderDataSource\";\nexport * from \"./uniswap/data/DefaultCommandDecoderDataSource\";\nexport * from \"./uniswap/data/EthersAbiDecoderDataSource\";\nexport * from \"./uniswap/domain/UniswapContextLoader\";\n"],
|
|
5
|
+
"mappings": "iaAAA,IAAAA,EAAA,kBAAAC,EAAAD,GAAAE,EAAAF,EAAc,wDAAd,gBACAE,EAAAF,EAAc,4DADd,gBAEAE,EAAAF,EAAc,mDAFd,gBAaAE,EAAAF,EAAc,2BAbd,gBAcAE,EAAAF,EAAc,kCAdd,gBAeAE,EAAAF,EAAc,kCAfd,gBAgBAE,EAAAF,EAAc,2DAhBd,gBAiBAE,EAAAF,EAAc,+DAjBd,gBAkBAE,EAAAF,EAAc,gEAlBd,gBAmBAE,EAAAF,EAAc,+DAnBd,gBAoBAE,EAAAF,EAAc,2DApBd,gBAqBAE,EAAAF,EAAc,+DArBd,gBAsBAE,EAAAF,EAAc,gEAtBd,gBAuBAE,EAAAF,EAAc,0DAvBd,gBAwBAE,EAAAF,EAAc,8DAxBd,gBAyBAE,EAAAF,EAAc,4DAzBd,gBA0BAE,EAAAF,EAAc,qEA1Bd,gBA2BAE,EAAAF,EAAc,wCA3Bd,gBA4BAE,EAAAF,EAAc,oCA5Bd,gBA6BAE,EAAAF,EAAc,8CA7Bd,gBA8BAE,EAAAF,EAAc,yCA9Bd,gBA+BAE,EAAAF,EAAc,mDA/Bd,gBAgCAE,EAAAF,EAAc,+CAhCd,gBAiCAE,EAAAF,EAAc,oDAjCd,gBAkCAE,EAAAF,EAAc,6CAlCd,gBAmCAE,EAAAF,EAAc,6BAnCd,gBAoCAE,EAAAF,EAAc,gCApCd,gBAqCAE,EAAAF,EAAc,sCArCd,gBAsCAE,EAAAF,EAAc,0CAtCd,gBAuCAE,EAAAF,EAAc,4CAvCd,gBAwCAE,EAAAF,EAAc,gDAxCd,gBAyCAE,EAAAF,EAAc,wCAzCd,gBA0CAE,EAAAF,EAAc,kDA1Cd,gBA2CAE,EAAAF,EAAc,0DA3Cd,gBA4CAE,EAAAF,EAAc,8DA5Cd,gBA6CAE,EAAAF,EAAc,kDA7Cd,gBA8CAE,EAAAF,EAAc,yDA9Cd,gBA+CAE,EAAAF,EAAc,8CA/Cd,gBAgDAE,EAAAF,EAAc,gDAhDd,gBAiDAE,EAAAF,EAAc,8CAjDd,gBAkDAE,EAAAF,EAAc,yCAlDd,gBAmDAE,EAAAF,EAAc,2CAnDd,gBAoDAE,EAAAF,EAAc,sCApDd,gBAqDAE,EAAAF,EAAc,6CArDd,gBAsDAE,EAAAF,EAAc,4CAtDd,gBAuDAE,EAAAF,EAAc,oDAvDd,gBAwDAE,EAAAF,EAAc,2CAxDd,gBAyDAE,EAAAF,EAAc,uDAzDd,gBA0DAE,EAAAF,EAAc,0CA1Dd,gBA2DAE,EAAAF,EAAc,sDA3Dd,gBA4DAE,EAAAF,EAAc,+CA5Dd,gBA6DAE,EAAAF,EAAc,8CA7Dd,gBA8DAE,EAAAF,EAAc,4CA9Dd,gBA+DAE,EAAAF,EAAc,wCA/Dd,gBAgEAE,EAAAF,EAAc,kDAhEd,gBAiEAE,EAAAF,EAAc,6CAjEd,gBAkEAE,EAAAF,EAAc,yDAlEd,gBAmEAE,EAAAF,EAAc,qDAnEd,gBAoEAE,EAAAF,EAAc,+DApEd,gBAqEAE,EAAAF,EAAc,0DArEd,gBAsEAE,EAAAF,EAAc,qDAtEd,gBAuEAE,EAAAF,EAAc,iDAvEd,gBAwEAE,EAAAF,EAAc,6DAxEd,gBAyEAE,EAAAF,EAAc,sDAzEd,gBA0EAE,EAAAF,EAAc,4CA1Ed,gBA2EAE,EAAAF,EAAc,+CA3Ed,gBA4EAE,EAAAF,EAAc,mDA5Ed,gBA6EAE,EAAAF,EAAc,0DA7Ed,gBA8EAE,EAAAF,EAAc,qDA9Ed,gBA+EAE,EAAAF,EAAc,iDA/Ed",
|
|
6
6
|
"names": ["src_exports", "__toCommonJS", "__reExport"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var x=Object.create;var s=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var
|
|
1
|
+
"use strict";var x=Object.create;var s=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var S=Object.getPrototypeOf,G=Object.prototype.hasOwnProperty;var N=(e,t)=>{for(var o in t)s(e,o,{get:t[o],enumerable:!0})},g=(e,t,o,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of C(t))!G.call(e,r)&&r!==o&&s(e,r,{get:()=>t[r],enumerable:!(a=p(t,r))||a.enumerable});return e};var E=(e,t,o)=>(o=e!=null?x(S(e)):{},g(t||!e||!e.__esModule?s(o,"default",{value:e,enumerable:!0}):o,e)),v=e=>g(s({},"__esModule",{value:!0}),e),y=(e,t,o,a)=>{for(var r=a>1?void 0:a?p(t,o):t,l=e.length-1,d;l>=0;l--)(d=e[l])&&(r=(a?d(t,o,r):d(r))||r);return a&&r&&s(t,o,r),r},h=(e,t)=>(o,a)=>t(o,a,e);var D={};N(D,{HttpNftDataSource:()=>m});module.exports=v(D);var f=E(require("axios")),c=require("inversify"),n=require("purify-ts"),P=require("../../config/di/configTypes"),i=require("../../shared/constant/HttpHeaders"),u=E(require("../../../package.json"));let m=class{constructor(t){this.config=t}async getSetPluginPayload({chainId:t,address:o,selector:a}){try{const r=await f.default.request({method:"GET",url:`${this.config.metadataServiceDomain.url}/v1/ethereum/${t}/contracts/${o}/plugin-selector/${a}`,headers:{[i.LEDGER_CLIENT_VERSION_HEADER]:`context-module/${u.default.version}`,[i.LEDGER_ORIGIN_TOKEN_HEADER]:this.config.originToken}});return r.data.payload?(0,n.Right)(r.data.payload):(0,n.Left)(new Error("[ContextModule] HttpNftDataSource: unexpected empty response"))}catch{return(0,n.Left)(new Error("[ContextModule] HttpNftDataSource: Failed to fetch set plugin payload"))}}async getNftInfosPayload({chainId:t,address:o}){try{const a=await f.default.request({method:"GET",url:`${this.config.metadataServiceDomain.url}/v1/ethereum/${t}/contracts/${o}`,headers:{[i.LEDGER_CLIENT_VERSION_HEADER]:`context-module/${u.default.version}`,[i.LEDGER_ORIGIN_TOKEN_HEADER]:this.config.originToken}});return a.data.payload?(0,n.Right)(a.data.payload):(0,n.Left)(new Error("[ContextModule] HttpNftDataSource: no nft metadata"))}catch{return(0,n.Left)(new Error("[ContextModule] HttpNftDataSource: Failed to fetch nft informations"))}}};m=y([(0,c.injectable)(),h(0,(0,c.inject)(P.configTypes.Config))],m);0&&(module.exports={HttpNftDataSource});
|
|
2
2
|
//# sourceMappingURL=HttpNftDataSource.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/nft/data/HttpNftDataSource.ts"],
|
|
4
|
-
"sourcesContent": ["import axios from \"axios\";\nimport { inject, injectable } from \"inversify\";\nimport { Either, Left, Right } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { type
|
|
5
|
-
"mappings": "qtBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,uBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAkB,oBAClBC,EAAmC,qBACnCC,EAAoC,qBAEpCC,EAA4B,mCAO5BC,EAGO,yCACPC,EAAoB,iCAGb,IAAMC,EAAN,KAAiD,CACtD,
|
|
4
|
+
"sourcesContent": ["import axios from \"axios\";\nimport { inject, injectable } from \"inversify\";\nimport { Either, Left, Right } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport {\n GetNftInformationsParams,\n GetSetPluginPayloadParams,\n NftDataSource,\n} from \"@/nft/data/NftDataSource\";\nimport {\n LEDGER_CLIENT_VERSION_HEADER,\n LEDGER_ORIGIN_TOKEN_HEADER,\n} from \"@/shared/constant/HttpHeaders\";\nimport PACKAGE from \"@root/package.json\";\n\n@injectable()\nexport class HttpNftDataSource implements NftDataSource {\n constructor(\n @inject(configTypes.Config)\n private readonly config: ContextModuleServiceConfig,\n ) {}\n\n public async getSetPluginPayload({\n chainId,\n address,\n selector,\n }: GetSetPluginPayloadParams): Promise<Either<Error, string>> {\n try {\n const response = await axios.request<{ payload: string }>({\n method: \"GET\",\n url: `${this.config.metadataServiceDomain.url}/v1/ethereum/${chainId}/contracts/${address}/plugin-selector/${selector}`,\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n [LEDGER_ORIGIN_TOKEN_HEADER]: this.config.originToken,\n },\n });\n\n return response.data.payload\n ? Right(response.data.payload)\n : Left(\n new Error(\n \"[ContextModule] HttpNftDataSource: unexpected empty response\",\n ),\n );\n } catch (_error) {\n return Left(\n new Error(\n \"[ContextModule] HttpNftDataSource: Failed to fetch set plugin payload\",\n ),\n );\n }\n }\n\n public async getNftInfosPayload({\n chainId,\n address,\n }: GetNftInformationsParams): Promise<Either<Error, string>> {\n try {\n const response = await axios.request<{ payload: string }>({\n method: \"GET\",\n url: `${this.config.metadataServiceDomain.url}/v1/ethereum/${chainId}/contracts/${address}`,\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n [LEDGER_ORIGIN_TOKEN_HEADER]: this.config.originToken,\n },\n });\n\n return response.data.payload\n ? Right(response.data.payload)\n : Left(new Error(\"[ContextModule] HttpNftDataSource: no nft metadata\"));\n } catch (_error) {\n return Left(\n new Error(\n \"[ContextModule] HttpNftDataSource: Failed to fetch nft informations\",\n ),\n );\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "qtBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,uBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAkB,oBAClBC,EAAmC,qBACnCC,EAAoC,qBAEpCC,EAA4B,mCAO5BC,EAGO,yCACPC,EAAoB,iCAGb,IAAMC,EAAN,KAAiD,CACtD,YAEmBC,EACjB,CADiB,YAAAA,CAChB,CAEH,MAAa,oBAAoB,CAC/B,QAAAC,EACA,QAAAC,EACA,SAAAC,CACF,EAA8D,CAC5D,GAAI,CACF,MAAMC,EAAW,MAAM,EAAAC,QAAM,QAA6B,CACxD,OAAQ,MACR,IAAK,GAAG,KAAK,OAAO,sBAAsB,GAAG,gBAAgBJ,CAAO,cAAcC,CAAO,oBAAoBC,CAAQ,GACrH,QAAS,CACP,CAAC,8BAA4B,EAAG,kBAAkB,EAAAG,QAAQ,OAAO,GACjE,CAAC,4BAA0B,EAAG,KAAK,OAAO,WAC5C,CACF,CAAC,EAED,OAAOF,EAAS,KAAK,WACjB,SAAMA,EAAS,KAAK,OAAO,KAC3B,QACE,IAAI,MACF,8DACF,CACF,CACN,MAAiB,CACf,SAAO,QACL,IAAI,MACF,uEACF,CACF,CACF,CACF,CAEA,MAAa,mBAAmB,CAC9B,QAAAH,EACA,QAAAC,CACF,EAA6D,CAC3D,GAAI,CACF,MAAME,EAAW,MAAM,EAAAC,QAAM,QAA6B,CACxD,OAAQ,MACR,IAAK,GAAG,KAAK,OAAO,sBAAsB,GAAG,gBAAgBJ,CAAO,cAAcC,CAAO,GACzF,QAAS,CACP,CAAC,8BAA4B,EAAG,kBAAkB,EAAAI,QAAQ,OAAO,GACjE,CAAC,4BAA0B,EAAG,KAAK,OAAO,WAC5C,CACF,CAAC,EAED,OAAOF,EAAS,KAAK,WACjB,SAAMA,EAAS,KAAK,OAAO,KAC3B,QAAK,IAAI,MAAM,oDAAoD,CAAC,CAC1E,MAAiB,CACf,SAAO,QACL,IAAI,MACF,qEACF,CACF,CACF,CACF,CACF,EA9DaL,EAANQ,EAAA,IADN,cAAW,EAGPC,EAAA,eAAO,cAAY,MAAM,IAFjBT",
|
|
6
6
|
"names": ["HttpNftDataSource_exports", "__export", "HttpNftDataSource", "__toCommonJS", "import_axios", "import_inversify", "import_purify_ts", "import_configTypes", "import_HttpHeaders", "import_package", "HttpNftDataSource", "config", "chainId", "address", "selector", "response", "axios", "PACKAGE", "__decorateClass", "__decorateParam"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var p=Object.create;var
|
|
1
|
+
"use strict";var p=Object.create;var c=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var h=Object.getOwnPropertyNames;var y=Object.getPrototypeOf,f=Object.prototype.hasOwnProperty;var m=(t,e,o,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of h(e))!f.call(t,n)&&n!==o&&c(t,n,{get:()=>e[n],enumerable:!(i=x(e,n))||i.enumerable});return t};var l=(t,e,o)=>(o=t!=null?p(y(t)):{},m(e||!t||!t.__esModule?c(o,"default",{value:t,enumerable:!0}):o,t));var a=l(require("axios")),r=require("../../shared/constant/HttpHeaders"),d=l(require("../../../package.json")),u=require("./HttpNftDataSource");vi.mock("axios");const s={web3checks:{url:"web3checksUrl"},metadataServiceDomain:{url:"https://nft.api.live.ledger.com"},originToken:"originToken"};describe("HttpNftDataSource",()=>{let t;beforeAll(()=>{t=new u.HttpNftDataSource(s),vi.clearAllMocks()}),it("should call axios with the ledger client version and origin Token header",async()=>{const e=`context-module/${d.default.version}`,o=vi.fn(()=>Promise.resolve({data:[]}));vi.spyOn(a.default,"request").mockImplementation(o),await t.getNftInfosPayload({address:"0x00",chainId:1}),await t.getSetPluginPayload({address:"0x00",chainId:1,selector:"0x00"}),expect(o).toHaveBeenNthCalledWith(1,expect.objectContaining({headers:{[r.LEDGER_CLIENT_VERSION_HEADER]:e,[r.LEDGER_ORIGIN_TOKEN_HEADER]:s.originToken}})),expect(o).toHaveBeenNthCalledWith(2,expect.objectContaining({headers:{[r.LEDGER_CLIENT_VERSION_HEADER]:e,[r.LEDGER_ORIGIN_TOKEN_HEADER]:s.originToken}}))}),describe("getNftInfosPayload",()=>{it("should return an error when axios throws an error",async()=>{vi.spyOn(a.default,"request").mockRejectedValue(new Error("error"));const e=await t.getNftInfosPayload({address:"0x00",chainId:1});expect(e.extract()).toEqual(new Error("[ContextModule] HttpNftDataSource: Failed to fetch nft informations"))}),it("should return an error when the response is empty",async()=>{const e={data:{}};vi.spyOn(a.default,"request").mockResolvedValue(e);const o=await t.getNftInfosPayload({address:"0x00",chainId:1});expect(o.extract()).toEqual(new Error("[ContextModule] HttpNftDataSource: no nft metadata"))}),it("should return the payload",async()=>{const e={data:{payload:"payload"}};vi.spyOn(a.default,"request").mockResolvedValue(e);const o=await t.getNftInfosPayload({address:"0x00",chainId:1});expect(o.extract()).toEqual("payload")})}),describe("getSetPluginPayload",()=>{it("should return an error when axios throws an error",async()=>{vi.spyOn(a.default,"request").mockRejectedValue(new Error("error"));const e=await t.getSetPluginPayload({address:"0x00",chainId:1,selector:"0x00"});expect(e.extract()).toEqual(new Error("[ContextModule] HttpNftDataSource: Failed to fetch set plugin payload"))}),it("should return an error when the response is empty",async()=>{const e={data:{}};vi.spyOn(a.default,"request").mockResolvedValue(e);const o=await t.getSetPluginPayload({address:"0x00",chainId:1,selector:"0x00"});expect(o.extract()).toEqual(new Error("[ContextModule] HttpNftDataSource: unexpected empty response"))}),it("should return the payload",async()=>{const e={data:{payload:"payload"}};vi.spyOn(a.default,"request").mockResolvedValue(e);const o=await t.getSetPluginPayload({address:"0x00",chainId:1,selector:"0x00"});expect(o.extract()).toEqual("payload")})})});
|
|
2
2
|
//# sourceMappingURL=HttpNftDataSource.test.js.map
|