diff --git a/NftFaucet/Attributes/FunctionHashAttribute.cs b/NftFaucet.Domain/Attributes/FunctionHashAttribute.cs similarity index 88% rename from NftFaucet/Attributes/FunctionHashAttribute.cs rename to NftFaucet.Domain/Attributes/FunctionHashAttribute.cs index cb0cc2f..4047cec 100644 --- a/NftFaucet/Attributes/FunctionHashAttribute.cs +++ b/NftFaucet.Domain/Attributes/FunctionHashAttribute.cs @@ -1,4 +1,4 @@ -namespace NftFaucet.Attributes; +namespace NftFaucet.Domain.Attributes; [AttributeUsage(AttributeTargets.Class)] public class FunctionHashAttribute : Attribute diff --git a/NftFaucet/Extensions/TypeExtensions.cs b/NftFaucet.Domain/Extensions/TypeExtensions.cs similarity index 90% rename from NftFaucet/Extensions/TypeExtensions.cs rename to NftFaucet.Domain/Extensions/TypeExtensions.cs index 0e140c7..d3f1690 100644 --- a/NftFaucet/Extensions/TypeExtensions.cs +++ b/NftFaucet.Domain/Extensions/TypeExtensions.cs @@ -1,6 +1,6 @@ using System.Reflection; -namespace NftFaucet.Extensions; +namespace NftFaucet.Domain.Extensions; public static class TypeExtensions { diff --git a/NftFaucet/Models/Function/Erc1155MintFunction.cs b/NftFaucet.Domain/Function/Erc1155MintFunction.cs similarity index 84% rename from NftFaucet/Models/Function/Erc1155MintFunction.cs rename to NftFaucet.Domain/Function/Erc1155MintFunction.cs index 1acaed5..695a1d7 100644 --- a/NftFaucet/Models/Function/Erc1155MintFunction.cs +++ b/NftFaucet.Domain/Function/Erc1155MintFunction.cs @@ -1,8 +1,8 @@ using System.Numerics; using Nethereum.ABI.FunctionEncoding.Attributes; -using NftFaucet.Attributes; +using NftFaucet.Domain.Attributes; -namespace NftFaucet.Models.Function; +namespace NftFaucet.Domain.Function; [Function("mint"), FunctionHash("0xd3fc9864")] public class Erc1155MintFunction : Function diff --git a/NftFaucet/Models/Function/Erc721MintFunction.cs b/NftFaucet.Domain/Function/Erc721MintFunction.cs similarity index 80% rename from NftFaucet/Models/Function/Erc721MintFunction.cs rename to NftFaucet.Domain/Function/Erc721MintFunction.cs index 5bb32d0..acaac99 100644 --- a/NftFaucet/Models/Function/Erc721MintFunction.cs +++ b/NftFaucet.Domain/Function/Erc721MintFunction.cs @@ -1,7 +1,7 @@ using Nethereum.ABI.FunctionEncoding.Attributes; -using NftFaucet.Attributes; +using NftFaucet.Domain.Attributes; -namespace NftFaucet.Models.Function; +namespace NftFaucet.Domain.Function; [Function("safeMint"), FunctionHash("0xd204c45e")] public class Erc721MintFunction : Function diff --git a/NftFaucet/Models/Function/Function.cs b/NftFaucet.Domain/Function/Function.cs similarity index 83% rename from NftFaucet/Models/Function/Function.cs rename to NftFaucet.Domain/Function/Function.cs index fef47bc..6e0267d 100644 --- a/NftFaucet/Models/Function/Function.cs +++ b/NftFaucet.Domain/Function/Function.cs @@ -1,9 +1,9 @@ using Nethereum.ABI.FunctionEncoding; using Nethereum.Hex.HexConvertors.Extensions; -using NftFaucet.Attributes; -using NftFaucet.Extensions; +using NftFaucet.Domain.Attributes; +using NftFaucet.Domain.Extensions; -namespace NftFaucet.Models.Function; +namespace NftFaucet.Domain.Function; public abstract class Function { diff --git a/NftFaucet/Plugins/NetworkPlugins/IContract.cs b/NftFaucet.Domain/Models/Abstraction/IContract.cs similarity index 79% rename from NftFaucet/Plugins/NetworkPlugins/IContract.cs rename to NftFaucet.Domain/Models/Abstraction/IContract.cs index 7158741..c56bee4 100644 --- a/NftFaucet/Plugins/NetworkPlugins/IContract.cs +++ b/NftFaucet.Domain/Models/Abstraction/IContract.cs @@ -1,4 +1,6 @@ -namespace NftFaucet.Plugins.NetworkPlugins; +using NftFaucet.Domain.Models.Enums; + +namespace NftFaucet.Domain.Models.Abstraction; public interface IContract { diff --git a/NftFaucet/Plugins/NetworkPlugins/INetwork.cs b/NftFaucet.Domain/Models/Abstraction/INetwork.cs similarity index 87% rename from NftFaucet/Plugins/NetworkPlugins/INetwork.cs rename to NftFaucet.Domain/Models/Abstraction/INetwork.cs index 91249a3..513a9c6 100644 --- a/NftFaucet/Plugins/NetworkPlugins/INetwork.cs +++ b/NftFaucet.Domain/Models/Abstraction/INetwork.cs @@ -1,4 +1,6 @@ -namespace NftFaucet.Plugins.NetworkPlugins; +using NftFaucet.Domain.Models.Enums; + +namespace NftFaucet.Domain.Models.Abstraction; public interface INetwork { diff --git a/NftFaucet/Plugins/IToken.cs b/NftFaucet.Domain/Models/Abstraction/IToken.cs similarity index 84% rename from NftFaucet/Plugins/IToken.cs rename to NftFaucet.Domain/Models/Abstraction/IToken.cs index db02a95..78dcd0c 100644 --- a/NftFaucet/Plugins/IToken.cs +++ b/NftFaucet.Domain/Models/Abstraction/IToken.cs @@ -1,4 +1,4 @@ -namespace NftFaucet.Plugins; +namespace NftFaucet.Domain.Models.Abstraction; public interface IToken { diff --git a/NftFaucet/Plugins/ITokenMedia.cs b/NftFaucet.Domain/Models/Abstraction/ITokenMedia.cs similarity index 78% rename from NftFaucet/Plugins/ITokenMedia.cs rename to NftFaucet.Domain/Models/Abstraction/ITokenMedia.cs index 733fcf1..321ba19 100644 --- a/NftFaucet/Plugins/ITokenMedia.cs +++ b/NftFaucet.Domain/Models/Abstraction/ITokenMedia.cs @@ -1,4 +1,4 @@ -namespace NftFaucet.Plugins; +namespace NftFaucet.Domain.Models.Abstraction; public interface ITokenMedia { diff --git a/NftFaucet/Plugins/ITokenUploadLocation.cs b/NftFaucet.Domain/Models/Abstraction/ITokenUploadLocation.cs similarity index 84% rename from NftFaucet/Plugins/ITokenUploadLocation.cs rename to NftFaucet.Domain/Models/Abstraction/ITokenUploadLocation.cs index 7f803bc..a07ebfb 100644 --- a/NftFaucet/Plugins/ITokenUploadLocation.cs +++ b/NftFaucet.Domain/Models/Abstraction/ITokenUploadLocation.cs @@ -1,4 +1,4 @@ -namespace NftFaucet.Plugins; +namespace NftFaucet.Domain.Models.Abstraction; public interface ITokenUploadLocation { diff --git a/NftFaucet.Domain/Models/Balance.cs b/NftFaucet.Domain/Models/Balance.cs new file mode 100644 index 0000000..2df71b9 --- /dev/null +++ b/NftFaucet.Domain/Models/Balance.cs @@ -0,0 +1,15 @@ +using System.Numerics; + +namespace NftFaucet.Domain.Models; + +public class Balance +{ + public BigInteger Amount { get; } + public string Currency { get; } + + public Balance(BigInteger amount, string currency) + { + Amount = amount; + Currency = currency ?? throw new ArgumentNullException(nameof(currency)); + } +} diff --git a/NftFaucet.Domain/Models/Contract.cs b/NftFaucet.Domain/Models/Contract.cs new file mode 100644 index 0000000..02a33d0 --- /dev/null +++ b/NftFaucet.Domain/Models/Contract.cs @@ -0,0 +1,16 @@ +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Domain.Models.Enums; + +namespace NftFaucet.Domain.Models; + +public class Contract : IContract +{ + public Guid Id { get; init; } + public string Name { get; init; } + public string Symbol { get; init; } + public string Address { get; init; } + public ContractType Type { get; init; } + public string DeploymentTxHash { get; init; } + public DateTime? DeployedAt { get; init; } + public bool IsVerified { get; init; } +} diff --git a/NftFaucet/Plugins/NetworkPlugins/ContractType.cs b/NftFaucet.Domain/Models/Enums/ContractType.cs similarity index 60% rename from NftFaucet/Plugins/NetworkPlugins/ContractType.cs rename to NftFaucet.Domain/Models/Enums/ContractType.cs index cbb9a2b..3da291c 100644 --- a/NftFaucet/Plugins/NetworkPlugins/ContractType.cs +++ b/NftFaucet.Domain/Models/Enums/ContractType.cs @@ -1,4 +1,4 @@ -namespace NftFaucet.Plugins.NetworkPlugins; +namespace NftFaucet.Domain.Models.Enums; public enum ContractType { diff --git a/NftFaucet/Plugins/NetworkPlugins/NetworkSubtype.cs b/NftFaucet.Domain/Models/Enums/NetworkSubtype.cs similarity index 75% rename from NftFaucet/Plugins/NetworkPlugins/NetworkSubtype.cs rename to NftFaucet.Domain/Models/Enums/NetworkSubtype.cs index 1763945..9e485d8 100644 --- a/NftFaucet/Plugins/NetworkPlugins/NetworkSubtype.cs +++ b/NftFaucet.Domain/Models/Enums/NetworkSubtype.cs @@ -1,4 +1,4 @@ -namespace NftFaucet.Plugins.NetworkPlugins; +namespace NftFaucet.Domain.Models.Enums; public enum NetworkSubtype { diff --git a/NftFaucet/Plugins/NetworkPlugins/NetworkType.cs b/NftFaucet.Domain/Models/Enums/NetworkType.cs similarity index 53% rename from NftFaucet/Plugins/NetworkPlugins/NetworkType.cs rename to NftFaucet.Domain/Models/Enums/NetworkType.cs index 0152ede..1a5c947 100644 --- a/NftFaucet/Plugins/NetworkPlugins/NetworkType.cs +++ b/NftFaucet.Domain/Models/Enums/NetworkType.cs @@ -1,4 +1,4 @@ -namespace NftFaucet.Plugins.NetworkPlugins; +namespace NftFaucet.Domain.Models.Enums; public enum NetworkType { diff --git a/NftFaucet/Plugins/Token.cs b/NftFaucet.Domain/Models/Token.cs similarity index 80% rename from NftFaucet/Plugins/Token.cs rename to NftFaucet.Domain/Models/Token.cs index 232e2bc..f11b0cb 100644 --- a/NftFaucet/Plugins/Token.cs +++ b/NftFaucet.Domain/Models/Token.cs @@ -1,4 +1,6 @@ -namespace NftFaucet.Plugins; +using NftFaucet.Domain.Models.Abstraction; + +namespace NftFaucet.Domain.Models; public class Token : IToken { diff --git a/NftFaucet/Plugins/TokenMedia.cs b/NftFaucet.Domain/Models/TokenMedia.cs similarity index 72% rename from NftFaucet/Plugins/TokenMedia.cs rename to NftFaucet.Domain/Models/TokenMedia.cs index 0618073..feab58c 100644 --- a/NftFaucet/Plugins/TokenMedia.cs +++ b/NftFaucet.Domain/Models/TokenMedia.cs @@ -1,4 +1,6 @@ -namespace NftFaucet.Plugins; +using NftFaucet.Domain.Models.Abstraction; + +namespace NftFaucet.Domain.Models; public class TokenMedia : ITokenMedia { diff --git a/NftFaucet/Models/TokenMetadata.cs b/NftFaucet.Domain/Models/TokenMetadata.cs similarity index 92% rename from NftFaucet/Models/TokenMetadata.cs rename to NftFaucet.Domain/Models/TokenMetadata.cs index 5959e7c..dc17489 100644 --- a/NftFaucet/Models/TokenMetadata.cs +++ b/NftFaucet.Domain/Models/TokenMetadata.cs @@ -1,6 +1,6 @@ using Newtonsoft.Json; -namespace NftFaucet.Models; +namespace NftFaucet.Domain.Models; public class TokenMetadata { diff --git a/NftFaucet/Plugins/TokenUploadLocation.cs b/NftFaucet.Domain/Models/TokenUploadLocation.cs similarity index 79% rename from NftFaucet/Plugins/TokenUploadLocation.cs rename to NftFaucet.Domain/Models/TokenUploadLocation.cs index 36dd7af..247dcaf 100644 --- a/NftFaucet/Plugins/TokenUploadLocation.cs +++ b/NftFaucet.Domain/Models/TokenUploadLocation.cs @@ -1,4 +1,6 @@ -namespace NftFaucet.Plugins; +using NftFaucet.Domain.Models.Abstraction; + +namespace NftFaucet.Domain.Models; public class TokenUploadLocation : ITokenUploadLocation { diff --git a/NftFaucet.Domain/NftFaucet.Domain.csproj b/NftFaucet.Domain/NftFaucet.Domain.csproj new file mode 100644 index 0000000..10c4357 --- /dev/null +++ b/NftFaucet.Domain/NftFaucet.Domain.csproj @@ -0,0 +1,14 @@ + + + + net6.0 + enable + disable + + + + + + + + diff --git a/NftFaucet.Domain/Services/ITokenMetadataGenerator.cs b/NftFaucet.Domain/Services/ITokenMetadataGenerator.cs new file mode 100644 index 0000000..46f954d --- /dev/null +++ b/NftFaucet.Domain/Services/ITokenMetadataGenerator.cs @@ -0,0 +1,8 @@ +using NftFaucet.Domain.Models.Abstraction; + +namespace NftFaucet.Domain.Services; + +public interface ITokenMetadataGenerator +{ + public string GenerateTokenMetadata(IToken token, Uri mainFileLocation, Uri coverFileLocation); +} diff --git a/NftFaucet.Domain/Services/TokenMetadataGenerator.cs b/NftFaucet.Domain/Services/TokenMetadataGenerator.cs new file mode 100644 index 0000000..315497b --- /dev/null +++ b/NftFaucet.Domain/Services/TokenMetadataGenerator.cs @@ -0,0 +1,22 @@ +using Newtonsoft.Json; +using NftFaucet.Domain.Models; +using NftFaucet.Domain.Models.Abstraction; + +namespace NftFaucet.Domain.Services; + +public class TokenMetadataGenerator : ITokenMetadataGenerator +{ + public string GenerateTokenMetadata(IToken token, Uri mainFileLocation, Uri coverFileLocation) + { + var tokenMetadata = new TokenMetadata + { + Name = token.Name, + Description = token.Description, + Image = coverFileLocation != null ? coverFileLocation.OriginalString : mainFileLocation.OriginalString, + AnimationUrl = coverFileLocation != null ? mainFileLocation.OriginalString : null, + ExternalUrl = "https://darkcodi.github.io/nft-faucet/", + }; + var metadataJson = JsonConvert.SerializeObject(tokenMetadata, Formatting.Indented); + return metadataJson; + } +} diff --git a/NftFaucet/Utils/ResultWrapper.cs b/NftFaucet.Domain/Utils/ResultWrapper.cs similarity index 97% rename from NftFaucet/Utils/ResultWrapper.cs rename to NftFaucet.Domain/Utils/ResultWrapper.cs index 7e76240..0e2adb3 100644 --- a/NftFaucet/Utils/ResultWrapper.cs +++ b/NftFaucet.Domain/Utils/ResultWrapper.cs @@ -1,6 +1,6 @@ using CSharpFunctionalExtensions; -namespace NftFaucet.Utils; +namespace NftFaucet.Domain.Utils; public static class ResultWrapper { diff --git a/NftFaucet/Extensions/EnumerableExtensions.cs b/NftFaucet.Infrastructure/Extensions/EnumerableExtensions.cs similarity index 81% rename from NftFaucet/Extensions/EnumerableExtensions.cs rename to NftFaucet.Infrastructure/Extensions/EnumerableExtensions.cs index 649f783..f5a43d4 100644 --- a/NftFaucet/Extensions/EnumerableExtensions.cs +++ b/NftFaucet.Infrastructure/Extensions/EnumerableExtensions.cs @@ -1,4 +1,4 @@ -namespace NftFaucet.Extensions; +namespace NftFaucet.Infrastructure.Extensions; public static class EnumerableExtensions { diff --git a/NftFaucet/Models/Dto/AppStateDto.cs b/NftFaucet.Infrastructure/Models/Dto/AppStateDto.cs similarity index 90% rename from NftFaucet/Models/Dto/AppStateDto.cs rename to NftFaucet.Infrastructure/Models/Dto/AppStateDto.cs index 723467e..ed04767 100644 --- a/NftFaucet/Models/Dto/AppStateDto.cs +++ b/NftFaucet.Infrastructure/Models/Dto/AppStateDto.cs @@ -1,4 +1,4 @@ -namespace NftFaucet.Models.Dto; +namespace NftFaucet.Infrastructure.Models.Dto; public class AppStateDto { diff --git a/NftFaucet/Models/Dto/ProviderStateDto.cs b/NftFaucet.Infrastructure/Models/Dto/ProviderStateDto.cs similarity index 69% rename from NftFaucet/Models/Dto/ProviderStateDto.cs rename to NftFaucet.Infrastructure/Models/Dto/ProviderStateDto.cs index c35d862..6e28a10 100644 --- a/NftFaucet/Models/Dto/ProviderStateDto.cs +++ b/NftFaucet.Infrastructure/Models/Dto/ProviderStateDto.cs @@ -1,4 +1,4 @@ -namespace NftFaucet.Models.Dto; +namespace NftFaucet.Infrastructure.Models.Dto; public class ProviderStateDto { diff --git a/NftFaucet/Models/Dto/TokenDto.cs b/NftFaucet.Infrastructure/Models/Dto/TokenDto.cs similarity index 92% rename from NftFaucet/Models/Dto/TokenDto.cs rename to NftFaucet.Infrastructure/Models/Dto/TokenDto.cs index 4afffd8..3083746 100644 --- a/NftFaucet/Models/Dto/TokenDto.cs +++ b/NftFaucet.Infrastructure/Models/Dto/TokenDto.cs @@ -1,4 +1,4 @@ -namespace NftFaucet.Models.Dto; +namespace NftFaucet.Infrastructure.Models.Dto; public class TokenDto { diff --git a/NftFaucet/Models/Dto/UploadLocationDto.cs b/NftFaucet.Infrastructure/Models/Dto/UploadLocationDto.cs similarity index 85% rename from NftFaucet/Models/Dto/UploadLocationDto.cs rename to NftFaucet.Infrastructure/Models/Dto/UploadLocationDto.cs index 8a30bd5..4164e97 100644 --- a/NftFaucet/Models/Dto/UploadLocationDto.cs +++ b/NftFaucet.Infrastructure/Models/Dto/UploadLocationDto.cs @@ -1,4 +1,4 @@ -namespace NftFaucet.Models.Dto; +namespace NftFaucet.Infrastructure.Models.Dto; public class UploadLocationDto { diff --git a/NftFaucet/Models/Dto/UploaderStateDto.cs b/NftFaucet.Infrastructure/Models/Dto/UploaderStateDto.cs similarity index 69% rename from NftFaucet/Models/Dto/UploaderStateDto.cs rename to NftFaucet.Infrastructure/Models/Dto/UploaderStateDto.cs index 99452e8..9a6f029 100644 --- a/NftFaucet/Models/Dto/UploaderStateDto.cs +++ b/NftFaucet.Infrastructure/Models/Dto/UploaderStateDto.cs @@ -1,4 +1,4 @@ -namespace NftFaucet.Models.Dto; +namespace NftFaucet.Infrastructure.Models.Dto; public class UploaderStateDto { diff --git a/NftFaucet/Models/State/PluginStateStorage.cs b/NftFaucet.Infrastructure/Models/State/PluginStateStorage.cs similarity index 63% rename from NftFaucet/Models/State/PluginStateStorage.cs rename to NftFaucet.Infrastructure/Models/State/PluginStateStorage.cs index 7d510af..5a9ac9f 100644 --- a/NftFaucet/Models/State/PluginStateStorage.cs +++ b/NftFaucet.Infrastructure/Models/State/PluginStateStorage.cs @@ -1,8 +1,7 @@ -using NftFaucet.Plugins.NetworkPlugins; -using NftFaucet.Plugins.ProviderPlugins; -using NftFaucet.Plugins.UploadPlugins; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Plugins.Models.Abstraction; -namespace NftFaucet.Models.State; +namespace NftFaucet.Infrastructure.Models.State; public class PluginStateStorage { diff --git a/NftFaucet/Models/State/ScopedAppState.cs b/NftFaucet.Infrastructure/Models/State/ScopedAppState.cs similarity index 88% rename from NftFaucet/Models/State/ScopedAppState.cs rename to NftFaucet.Infrastructure/Models/State/ScopedAppState.cs index ddec59f..6acf5ad 100644 --- a/NftFaucet/Models/State/ScopedAppState.cs +++ b/NftFaucet.Infrastructure/Models/State/ScopedAppState.cs @@ -1,8 +1,7 @@ -using NftFaucet.Plugins; -using NftFaucet.Plugins.NetworkPlugins; -using NftFaucet.Plugins.ProviderPlugins; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Plugins.Models.Abstraction; -namespace NftFaucet.Models.State; +namespace NftFaucet.Infrastructure.Models.State; public class ScopedAppState { diff --git a/NftFaucet/Models/State/UserStateStorage.cs b/NftFaucet.Infrastructure/Models/State/UserStateStorage.cs similarity index 84% rename from NftFaucet/Models/State/UserStateStorage.cs rename to NftFaucet.Infrastructure/Models/State/UserStateStorage.cs index a031327..bf09897 100644 --- a/NftFaucet/Models/State/UserStateStorage.cs +++ b/NftFaucet.Infrastructure/Models/State/UserStateStorage.cs @@ -1,6 +1,6 @@ -using NftFaucet.Plugins; +using NftFaucet.Domain.Models.Abstraction; -namespace NftFaucet.Models.State; +namespace NftFaucet.Infrastructure.Models.State; public class UserStateStorage { diff --git a/NftFaucet.Infrastructure/NftFaucet.Infrastructure.csproj b/NftFaucet.Infrastructure/NftFaucet.Infrastructure.csproj new file mode 100644 index 0000000..9aae771 --- /dev/null +++ b/NftFaucet.Infrastructure/NftFaucet.Infrastructure.csproj @@ -0,0 +1,17 @@ + + + + net6.0 + enable + disable + + + + + + + + + + + diff --git a/NftFaucet.Infrastructure/Repositories/IStateRepository.cs b/NftFaucet.Infrastructure/Repositories/IStateRepository.cs new file mode 100644 index 0000000..7a409e4 --- /dev/null +++ b/NftFaucet.Infrastructure/Repositories/IStateRepository.cs @@ -0,0 +1,21 @@ +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Infrastructure.Models.Dto; +using NftFaucet.Infrastructure.Models.State; +using NftFaucet.Plugins.Models.Abstraction; + +namespace NftFaucet.Infrastructure.Repositories; + +public interface IStateRepository +{ + public Task SaveAppState(ScopedAppState appState); + public Task SaveToken(IToken token); + public Task SaveUploadLocation(ITokenUploadLocation uploadLocation); + public Task SaveProviderState(IProvider provider); + public Task SaveUploaderState(IUploader uploader); + + public Task LoadAppState(ScopedAppState appState); + public Task LoadTokens(); + public Task LoadUploadLocations(); + public Task LoadUploaderStates(); + public Task LoadProviderStates(); +} diff --git a/NftFaucet/Services/StateRepository.cs b/NftFaucet.Infrastructure/Repositories/StateRepository.cs similarity index 94% rename from NftFaucet/Services/StateRepository.cs rename to NftFaucet.Infrastructure/Repositories/StateRepository.cs index 71bf793..89b202b 100644 --- a/NftFaucet/Services/StateRepository.cs +++ b/NftFaucet.Infrastructure/Repositories/StateRepository.cs @@ -1,13 +1,13 @@ -using NftFaucet.Models.Dto; -using NftFaucet.Models.State; -using NftFaucet.Plugins; -using NftFaucet.Plugins.ProviderPlugins; -using NftFaucet.Plugins.UploadPlugins; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Infrastructure.Models.Dto; +using NftFaucet.Infrastructure.Models.State; +using NftFaucet.Infrastructure.Services; +using NftFaucet.Plugins.Models.Abstraction; using TG.Blazor.IndexedDB; -namespace NftFaucet.Services; +namespace NftFaucet.Infrastructure.Repositories; -public class StateRepository +public class StateRepository : IStateRepository { private readonly IndexedDBManager _dbManager; private readonly Mapper _mapper; diff --git a/NftFaucet/Services/Mapper.cs b/NftFaucet.Infrastructure/Services/Mapper.cs similarity index 94% rename from NftFaucet/Services/Mapper.cs rename to NftFaucet.Infrastructure/Services/Mapper.cs index f72e8e2..81a469d 100644 --- a/NftFaucet/Services/Mapper.cs +++ b/NftFaucet.Infrastructure/Services/Mapper.cs @@ -1,8 +1,9 @@ -using NftFaucet.Models.Dto; -using NftFaucet.Models.State; -using NftFaucet.Plugins; +using NftFaucet.Domain.Models; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Infrastructure.Models.Dto; +using NftFaucet.Infrastructure.Models.State; -namespace NftFaucet.Services; +namespace NftFaucet.Infrastructure.Services; public class Mapper { diff --git a/NftFaucet/Services/RefreshMediator.cs b/NftFaucet.Infrastructure/Services/RefreshMediator.cs similarity index 87% rename from NftFaucet/Services/RefreshMediator.cs rename to NftFaucet.Infrastructure/Services/RefreshMediator.cs index 14468e9..e841ce5 100644 --- a/NftFaucet/Services/RefreshMediator.cs +++ b/NftFaucet.Infrastructure/Services/RefreshMediator.cs @@ -1,4 +1,4 @@ -namespace NftFaucet.Services; +namespace NftFaucet.Infrastructure.Services; public class RefreshMediator { diff --git a/NftFaucet/Plugins/NetworkPlugins/INetworkPlugin.cs b/NftFaucet.Plugins/Models/Abstraction/INetworkPlugin.cs similarity index 51% rename from NftFaucet/Plugins/NetworkPlugins/INetworkPlugin.cs rename to NftFaucet.Plugins/Models/Abstraction/INetworkPlugin.cs index 7bc2ba1..eece200 100644 --- a/NftFaucet/Plugins/NetworkPlugins/INetworkPlugin.cs +++ b/NftFaucet.Plugins/Models/Abstraction/INetworkPlugin.cs @@ -1,4 +1,6 @@ -namespace NftFaucet.Plugins.NetworkPlugins; +using NftFaucet.Domain.Models.Abstraction; + +namespace NftFaucet.Plugins.Models.Abstraction; public interface INetworkPlugin { diff --git a/NftFaucet/Plugins/ProviderPlugins/IProvider.cs b/NftFaucet.Plugins/Models/Abstraction/IProvider.cs similarity index 69% rename from NftFaucet/Plugins/ProviderPlugins/IProvider.cs rename to NftFaucet.Plugins/Models/Abstraction/IProvider.cs index df56f28..f268528 100644 --- a/NftFaucet/Plugins/ProviderPlugins/IProvider.cs +++ b/NftFaucet.Plugins/Models/Abstraction/IProvider.cs @@ -1,8 +1,8 @@ -using NftFaucet.Components.CardList; -using NftFaucet.Models; -using NftFaucet.Plugins.NetworkPlugins; +using CSharpFunctionalExtensions; +using NftFaucet.Domain.Models; +using NftFaucet.Domain.Models.Abstraction; -namespace NftFaucet.Plugins.ProviderPlugins; +namespace NftFaucet.Plugins.Models.Abstraction; public interface IProvider { @@ -15,8 +15,9 @@ public interface IProvider public bool IsConfigured { get; } public Task InitializeAsync(IServiceProvider serviceProvider); - public CardListItemProperty[] GetProperties(); - public CardListItemConfiguration GetConfiguration(); + public Property[] GetProperties(); + public ConfigurationItem[] GetConfigurationItems(); + public Task Configure(ConfigurationItem[] configurationItems); public bool IsNetworkSupported(INetwork network); public Task GetAddress(); public Task GetBalance(INetwork network); diff --git a/NftFaucet/Plugins/UploadPlugins/IUploader.cs b/NftFaucet.Plugins/Models/Abstraction/IUploader.cs similarity index 54% rename from NftFaucet/Plugins/UploadPlugins/IUploader.cs rename to NftFaucet.Plugins/Models/Abstraction/IUploader.cs index 2b6e802..0e3c6f2 100644 --- a/NftFaucet/Plugins/UploadPlugins/IUploader.cs +++ b/NftFaucet.Plugins/Models/Abstraction/IUploader.cs @@ -1,7 +1,6 @@ using CSharpFunctionalExtensions; -using NftFaucet.Components.CardList; -namespace NftFaucet.Plugins.UploadPlugins; +namespace NftFaucet.Plugins.Models.Abstraction; public interface IUploader { @@ -12,9 +11,10 @@ public interface IUploader public bool IsSupported { get; } public bool IsConfigured { get; } - public CardListItemProperty[] GetProperties(); - public CardListItemConfiguration GetConfiguration(); - public Task> Upload(string fileName, string fileType, byte[] fileData); + public Property[] GetProperties(); + public ConfigurationItem[] GetConfigurationItems(); + public Task Configure(ConfigurationItem[] configurationItems); + public Task Upload(string fileName, string fileType, byte[] fileData); public Task GetState(); public Task SetState(string state); } diff --git a/NftFaucet.Plugins/Models/ConfigurationItem.cs b/NftFaucet.Plugins/Models/ConfigurationItem.cs new file mode 100644 index 0000000..5b15409 --- /dev/null +++ b/NftFaucet.Plugins/Models/ConfigurationItem.cs @@ -0,0 +1,15 @@ +using NftFaucet.Plugins.Models.Enums; + +namespace NftFaucet.Plugins.Models; + +public class ConfigurationItem +{ + public UiDisplayType DisplayType { get; set; } + public string Name { get; set; } + public string Value { get; set; } + public string Placeholder { get; set; } + public bool IsDisabled { get; set; } + + // for buttons only + public Action ClickAction { get; set; } +} diff --git a/NftFaucet.Plugins/Models/Enums/UiDisplayType.cs b/NftFaucet.Plugins/Models/Enums/UiDisplayType.cs new file mode 100644 index 0000000..dae2dff --- /dev/null +++ b/NftFaucet.Plugins/Models/Enums/UiDisplayType.cs @@ -0,0 +1,7 @@ +namespace NftFaucet.Plugins.Models.Enums; + +public enum UiDisplayType +{ + Input, + Button, +} diff --git a/NftFaucet/Models/MintRequest.cs b/NftFaucet.Plugins/Models/MintRequest.cs similarity index 61% rename from NftFaucet/Models/MintRequest.cs rename to NftFaucet.Plugins/Models/MintRequest.cs index 69b22b5..664675e 100644 --- a/NftFaucet/Models/MintRequest.cs +++ b/NftFaucet.Plugins/Models/MintRequest.cs @@ -1,8 +1,7 @@ -using NftFaucet.Plugins; -using NftFaucet.Plugins.NetworkPlugins; -using NftFaucet.Plugins.ProviderPlugins; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Plugins.Models.Abstraction; -namespace NftFaucet.Models; +namespace NftFaucet.Plugins.Models; public record MintRequest( INetwork Network, diff --git a/NftFaucet.Plugins/Models/Property.cs b/NftFaucet.Plugins/Models/Property.cs new file mode 100644 index 0000000..cae84ba --- /dev/null +++ b/NftFaucet.Plugins/Models/Property.cs @@ -0,0 +1,9 @@ +namespace NftFaucet.Plugins.Models; + +public class Property +{ + public string Name { get; set; } + public string Value { get; set; } + public string ValueColor { get; set; } + public string Link { get; set; } +} diff --git a/NftFaucet.Plugins/NftFaucet.Plugins.csproj b/NftFaucet.Plugins/NftFaucet.Plugins.csproj new file mode 100644 index 0000000..1563ebb --- /dev/null +++ b/NftFaucet.Plugins/NftFaucet.Plugins.csproj @@ -0,0 +1,13 @@ + + + + net6.0 + enable + disable + + + + + + + diff --git a/NftFaucet.sln b/NftFaucet.sln index a3b36eb..cc747c7 100644 --- a/NftFaucet.sln +++ b/NftFaucet.sln @@ -2,6 +2,50 @@ Microsoft Visual Studio Solution File, Format Version 12.00 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NftFaucet", "NftFaucet\NftFaucet.csproj", "{E113DAEE-A1E4-4BE2-8CDA-6E06245A471A}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NftFaucet.Plugins", "NftFaucet.Plugins\NftFaucet.Plugins.csproj", "{CF83F0DB-41CD-46AA-8696-8351E098986D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Plugins", "Plugins", "{926C18AE-808E-4E77-985F-4EF54792D523}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NetworkPlugins", "NetworkPlugins", "{E29C020E-A3FD-4756-ACB3-3828F915EB40}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ProviderPlugins", "ProviderPlugins", "{9DE3CDEC-37AE-4FB0-B115-984EB47F57C5}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UploadPlugins", "UploadPlugins", "{5FA46262-EDA0-43BB-A1E5-57F50AD7EE00}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NftFaucet.ProviderPlugins.EthereumKeygen", "plugins\provider-plugins\NftFaucet.ProviderPlugins.EthereumKeygen\NftFaucet.ProviderPlugins.EthereumKeygen.csproj", "{B1D73FDE-0ECD-4917-8B9A-AEFD8C8C39C5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NftFaucet.Domain", "NftFaucet.Domain\NftFaucet.Domain.csproj", "{384ECEAB-40B1-4F22-AFBD-F710B935E23A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NftFaucet.ProviderPlugins.Metamask", "plugins\provider-plugins\NftFaucet.ProviderPlugins.Metamask\NftFaucet.ProviderPlugins.Metamask.csproj", "{3028C0A8-073A-4160-92C7-34D148F1D19C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NftFaucet.ProviderPlugins.SolanaKeygen", "plugins\provider-plugins\NftFaucet.ProviderPlugins.SolanaKeygen\NftFaucet.ProviderPlugins.SolanaKeygen.csproj", "{A48C079B-5466-4AE5-AA15-0D9D7C3A01A9}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NftFaucet.ProviderPlugins.Phantom", "plugins\provider-plugins\NftFaucet.ProviderPlugins.Phantom\NftFaucet.ProviderPlugins.Phantom.csproj", "{D6522592-0719-479F-AD8E-D58D4D7B207C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NftFaucet.UploadPlugins.Crust", "plugins\upload-plugins\NftFaucet.UploadPlugins.Crust\NftFaucet.UploadPlugins.Crust.csproj", "{BA56B8D0-B2BD-4170-9D95-D2A1ED29E334}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NftFaucet.UploadPlugins.Infura", "plugins\upload-plugins\NftFaucet.UploadPlugins.Infura\NftFaucet.UploadPlugins.Infura.csproj", "{3F51D52C-3A40-4206-9715-02425786B485}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NftFaucet.UploadPlugins.NftStorage", "plugins\upload-plugins\NftFaucet.UploadPlugins.NftStorage\NftFaucet.UploadPlugins.NftStorage.csproj", "{F0F74D75-68EC-4B56-897E-7292A05B963B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NftFaucet.NetworkPlugins.Arbitrum", "plugins\network-plugins\NftFaucet.NetworkPlugins.Arbitrum\NftFaucet.NetworkPlugins.Arbitrum.csproj", "{66ABDC2E-3BA0-42C8-B726-AD3B6B7EBE8C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NftFaucet.NetworkPlugins.Avalanche", "plugins\network-plugins\NftFaucet.NetworkPlugins.Avalanche\NftFaucet.NetworkPlugins.Avalanche.csproj", "{6E6362FA-C9A4-4C92-886F-E9510E58B5D5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NftFaucet.NetworkPlugins.BinanceSmartChain", "plugins\network-plugins\NftFaucet.NetworkPlugins.BinanceSmartChain\NftFaucet.NetworkPlugins.BinanceSmartChain.csproj", "{D2DDEA7F-38E7-4DE8-9E65-BC2C6393230B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NftFaucet.NetworkPlugins.Ethereum", "plugins\network-plugins\NftFaucet.NetworkPlugins.Ethereum\NftFaucet.NetworkPlugins.Ethereum.csproj", "{16E3361F-E94A-40AA-9DBD-04FBC17EF883}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NftFaucet.NetworkPlugins.Moonbeam", "plugins\network-plugins\NftFaucet.NetworkPlugins.Moonbeam\NftFaucet.NetworkPlugins.Moonbeam.csproj", "{445C33D6-CB12-4C7C-B77F-3A8E785A14BB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NftFaucet.NetworkPlugins.Optimism", "plugins\network-plugins\NftFaucet.NetworkPlugins.Optimism\NftFaucet.NetworkPlugins.Optimism.csproj", "{5EAB42A1-4C5B-407A-AE4E-34F608365760}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NftFaucet.NetworkPlugins.Polygon", "plugins\network-plugins\NftFaucet.NetworkPlugins.Polygon\NftFaucet.NetworkPlugins.Polygon.csproj", "{DD751505-81EC-4B8D-B2A5-FB246DCB68E4}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NftFaucet.NetworkPlugins.Solana", "plugins\network-plugins\NftFaucet.NetworkPlugins.Solana\NftFaucet.NetworkPlugins.Solana.csproj", "{A2EE3F83-C57C-48B1-A5FE-E573284B6661}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NftFaucet.Infrastructure", "NftFaucet.Infrastructure\NftFaucet.Infrastructure.csproj", "{06949AF1-D775-4E6B-A309-C358B05F4D50}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -12,5 +56,97 @@ Global {E113DAEE-A1E4-4BE2-8CDA-6E06245A471A}.Debug|Any CPU.Build.0 = Debug|Any CPU {E113DAEE-A1E4-4BE2-8CDA-6E06245A471A}.Release|Any CPU.ActiveCfg = Release|Any CPU {E113DAEE-A1E4-4BE2-8CDA-6E06245A471A}.Release|Any CPU.Build.0 = Release|Any CPU + {CF83F0DB-41CD-46AA-8696-8351E098986D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CF83F0DB-41CD-46AA-8696-8351E098986D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CF83F0DB-41CD-46AA-8696-8351E098986D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CF83F0DB-41CD-46AA-8696-8351E098986D}.Release|Any CPU.Build.0 = Release|Any CPU + {B1D73FDE-0ECD-4917-8B9A-AEFD8C8C39C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B1D73FDE-0ECD-4917-8B9A-AEFD8C8C39C5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B1D73FDE-0ECD-4917-8B9A-AEFD8C8C39C5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B1D73FDE-0ECD-4917-8B9A-AEFD8C8C39C5}.Release|Any CPU.Build.0 = Release|Any CPU + {384ECEAB-40B1-4F22-AFBD-F710B935E23A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {384ECEAB-40B1-4F22-AFBD-F710B935E23A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {384ECEAB-40B1-4F22-AFBD-F710B935E23A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {384ECEAB-40B1-4F22-AFBD-F710B935E23A}.Release|Any CPU.Build.0 = Release|Any CPU + {3028C0A8-073A-4160-92C7-34D148F1D19C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3028C0A8-073A-4160-92C7-34D148F1D19C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3028C0A8-073A-4160-92C7-34D148F1D19C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3028C0A8-073A-4160-92C7-34D148F1D19C}.Release|Any CPU.Build.0 = Release|Any CPU + {A48C079B-5466-4AE5-AA15-0D9D7C3A01A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A48C079B-5466-4AE5-AA15-0D9D7C3A01A9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A48C079B-5466-4AE5-AA15-0D9D7C3A01A9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A48C079B-5466-4AE5-AA15-0D9D7C3A01A9}.Release|Any CPU.Build.0 = Release|Any CPU + {D6522592-0719-479F-AD8E-D58D4D7B207C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D6522592-0719-479F-AD8E-D58D4D7B207C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D6522592-0719-479F-AD8E-D58D4D7B207C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D6522592-0719-479F-AD8E-D58D4D7B207C}.Release|Any CPU.Build.0 = Release|Any CPU + {BA56B8D0-B2BD-4170-9D95-D2A1ED29E334}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BA56B8D0-B2BD-4170-9D95-D2A1ED29E334}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BA56B8D0-B2BD-4170-9D95-D2A1ED29E334}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BA56B8D0-B2BD-4170-9D95-D2A1ED29E334}.Release|Any CPU.Build.0 = Release|Any CPU + {3F51D52C-3A40-4206-9715-02425786B485}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3F51D52C-3A40-4206-9715-02425786B485}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3F51D52C-3A40-4206-9715-02425786B485}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3F51D52C-3A40-4206-9715-02425786B485}.Release|Any CPU.Build.0 = Release|Any CPU + {F0F74D75-68EC-4B56-897E-7292A05B963B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F0F74D75-68EC-4B56-897E-7292A05B963B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F0F74D75-68EC-4B56-897E-7292A05B963B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F0F74D75-68EC-4B56-897E-7292A05B963B}.Release|Any CPU.Build.0 = Release|Any CPU + {66ABDC2E-3BA0-42C8-B726-AD3B6B7EBE8C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {66ABDC2E-3BA0-42C8-B726-AD3B6B7EBE8C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {66ABDC2E-3BA0-42C8-B726-AD3B6B7EBE8C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {66ABDC2E-3BA0-42C8-B726-AD3B6B7EBE8C}.Release|Any CPU.Build.0 = Release|Any CPU + {6E6362FA-C9A4-4C92-886F-E9510E58B5D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6E6362FA-C9A4-4C92-886F-E9510E58B5D5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6E6362FA-C9A4-4C92-886F-E9510E58B5D5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6E6362FA-C9A4-4C92-886F-E9510E58B5D5}.Release|Any CPU.Build.0 = Release|Any CPU + {D2DDEA7F-38E7-4DE8-9E65-BC2C6393230B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D2DDEA7F-38E7-4DE8-9E65-BC2C6393230B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D2DDEA7F-38E7-4DE8-9E65-BC2C6393230B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D2DDEA7F-38E7-4DE8-9E65-BC2C6393230B}.Release|Any CPU.Build.0 = Release|Any CPU + {16E3361F-E94A-40AA-9DBD-04FBC17EF883}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {16E3361F-E94A-40AA-9DBD-04FBC17EF883}.Debug|Any CPU.Build.0 = Debug|Any CPU + {16E3361F-E94A-40AA-9DBD-04FBC17EF883}.Release|Any CPU.ActiveCfg = Release|Any CPU + {16E3361F-E94A-40AA-9DBD-04FBC17EF883}.Release|Any CPU.Build.0 = Release|Any CPU + {445C33D6-CB12-4C7C-B77F-3A8E785A14BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {445C33D6-CB12-4C7C-B77F-3A8E785A14BB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {445C33D6-CB12-4C7C-B77F-3A8E785A14BB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {445C33D6-CB12-4C7C-B77F-3A8E785A14BB}.Release|Any CPU.Build.0 = Release|Any CPU + {5EAB42A1-4C5B-407A-AE4E-34F608365760}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5EAB42A1-4C5B-407A-AE4E-34F608365760}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5EAB42A1-4C5B-407A-AE4E-34F608365760}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5EAB42A1-4C5B-407A-AE4E-34F608365760}.Release|Any CPU.Build.0 = Release|Any CPU + {DD751505-81EC-4B8D-B2A5-FB246DCB68E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DD751505-81EC-4B8D-B2A5-FB246DCB68E4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DD751505-81EC-4B8D-B2A5-FB246DCB68E4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DD751505-81EC-4B8D-B2A5-FB246DCB68E4}.Release|Any CPU.Build.0 = Release|Any CPU + {A2EE3F83-C57C-48B1-A5FE-E573284B6661}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A2EE3F83-C57C-48B1-A5FE-E573284B6661}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A2EE3F83-C57C-48B1-A5FE-E573284B6661}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A2EE3F83-C57C-48B1-A5FE-E573284B6661}.Release|Any CPU.Build.0 = Release|Any CPU + {06949AF1-D775-4E6B-A309-C358B05F4D50}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {06949AF1-D775-4E6B-A309-C358B05F4D50}.Debug|Any CPU.Build.0 = Debug|Any CPU + {06949AF1-D775-4E6B-A309-C358B05F4D50}.Release|Any CPU.ActiveCfg = Release|Any CPU + {06949AF1-D775-4E6B-A309-C358B05F4D50}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {E29C020E-A3FD-4756-ACB3-3828F915EB40} = {926C18AE-808E-4E77-985F-4EF54792D523} + {9DE3CDEC-37AE-4FB0-B115-984EB47F57C5} = {926C18AE-808E-4E77-985F-4EF54792D523} + {5FA46262-EDA0-43BB-A1E5-57F50AD7EE00} = {926C18AE-808E-4E77-985F-4EF54792D523} + {B1D73FDE-0ECD-4917-8B9A-AEFD8C8C39C5} = {9DE3CDEC-37AE-4FB0-B115-984EB47F57C5} + {3028C0A8-073A-4160-92C7-34D148F1D19C} = {9DE3CDEC-37AE-4FB0-B115-984EB47F57C5} + {D6522592-0719-479F-AD8E-D58D4D7B207C} = {9DE3CDEC-37AE-4FB0-B115-984EB47F57C5} + {A48C079B-5466-4AE5-AA15-0D9D7C3A01A9} = {9DE3CDEC-37AE-4FB0-B115-984EB47F57C5} + {BA56B8D0-B2BD-4170-9D95-D2A1ED29E334} = {5FA46262-EDA0-43BB-A1E5-57F50AD7EE00} + {3F51D52C-3A40-4206-9715-02425786B485} = {5FA46262-EDA0-43BB-A1E5-57F50AD7EE00} + {F0F74D75-68EC-4B56-897E-7292A05B963B} = {5FA46262-EDA0-43BB-A1E5-57F50AD7EE00} + {66ABDC2E-3BA0-42C8-B726-AD3B6B7EBE8C} = {E29C020E-A3FD-4756-ACB3-3828F915EB40} + {6E6362FA-C9A4-4C92-886F-E9510E58B5D5} = {E29C020E-A3FD-4756-ACB3-3828F915EB40} + {D2DDEA7F-38E7-4DE8-9E65-BC2C6393230B} = {E29C020E-A3FD-4756-ACB3-3828F915EB40} + {16E3361F-E94A-40AA-9DBD-04FBC17EF883} = {E29C020E-A3FD-4756-ACB3-3828F915EB40} + {445C33D6-CB12-4C7C-B77F-3A8E785A14BB} = {E29C020E-A3FD-4756-ACB3-3828F915EB40} + {5EAB42A1-4C5B-407A-AE4E-34F608365760} = {E29C020E-A3FD-4756-ACB3-3828F915EB40} + {DD751505-81EC-4B8D-B2A5-FB246DCB68E4} = {E29C020E-A3FD-4756-ACB3-3828F915EB40} + {A2EE3F83-C57C-48B1-A5FE-E573284B6661} = {E29C020E-A3FD-4756-ACB3-3828F915EB40} EndGlobalSection EndGlobal diff --git a/NftFaucet/Components/BasicComponent.cs b/NftFaucet/Components/BasicComponent.cs index d96d8dc..b0d7b62 100644 --- a/NftFaucet/Components/BasicComponent.cs +++ b/NftFaucet/Components/BasicComponent.cs @@ -1,7 +1,8 @@ using Microsoft.AspNetCore.Components; -using NftFaucet.Models.State; +using NftFaucet.Infrastructure.Models.State; +using NftFaucet.Infrastructure.Repositories; +using NftFaucet.Infrastructure.Services; using NftFaucet.Options; -using NftFaucet.Services; using Radzen; namespace NftFaucet.Components; @@ -33,7 +34,7 @@ public abstract class BasicComponent : ComponentBase protected Settings Settings { get; set; } [Inject] - protected StateRepository StateRepository { get; set; } + protected IStateRepository StateRepository { get; set; } protected override void OnInitialized() { diff --git a/NftFaucet/Components/CardList/CardList.razor b/NftFaucet/Components/CardList/CardList.razor index 529f400..06007c1 100644 --- a/NftFaucet/Components/CardList/CardList.razor +++ b/NftFaucet/Components/CardList/CardList.razor @@ -61,12 +61,16 @@ } } - @if (cardListItem.Configuration != null) - { - - } +
+ @foreach (var button in cardListItem.Buttons ?? Array.Empty()) + { + if (!string.IsNullOrEmpty(button?.Name) || !string.IsNullOrEmpty(button?.Icon)) + { + + } + } +
diff --git a/NftFaucet/Components/CardList/CardList.razor.cs b/NftFaucet/Components/CardList/CardList.razor.cs index 83d86a1..a8aae7e 100644 --- a/NftFaucet/Components/CardList/CardList.razor.cs +++ b/NftFaucet/Components/CardList/CardList.razor.cs @@ -1,4 +1,5 @@ using Microsoft.AspNetCore.Components; +using NftFaucet.Pages; using Radzen; namespace NftFaucet.Components.CardList; @@ -38,20 +39,4 @@ public partial class CardList : BasicComponent await OnSelectedChange.InvokeAsync(SelectedItems); RefreshMediator.NotifyStateHasChangedSafe(); } - - protected async Task OpenItemConfigurationDialog(CardListItem item) - { - var result = (bool?) await DialogService.OpenAsync("Configuration", - new Dictionary - { - { "CardListItemId", item.Id }, - { "CardListItem", item }, - }, - new DialogOptions() {Width = "700px", Height = "570px", Resizable = true, Draggable = true}); - - if (result != null && result.Value) - { - RefreshMediator.NotifyStateHasChangedSafe(); - } - } } diff --git a/NftFaucet/Components/CardList/CardListItem.cs b/NftFaucet/Components/CardList/CardListItem.cs index 4a33562..c9b79b2 100644 --- a/NftFaucet/Components/CardList/CardListItem.cs +++ b/NftFaucet/Components/CardList/CardListItem.cs @@ -9,5 +9,5 @@ public class CardListItem public CardListItemSelectionIcon SelectionIcon { get; set; } public CardListItemProperty[] Properties { get; set; } = Array.Empty(); public CardListItemBadge[] Badges { get; set; } = Array.Empty(); - public CardListItemConfiguration Configuration { get; set; } + public CardListItemButton[] Buttons { get; set; } = Array.Empty(); } diff --git a/NftFaucet/Components/CardList/CardListItemButton.cs b/NftFaucet/Components/CardList/CardListItemButton.cs new file mode 100644 index 0000000..cffa30f --- /dev/null +++ b/NftFaucet/Components/CardList/CardListItemButton.cs @@ -0,0 +1,11 @@ +using Radzen; + +namespace NftFaucet.Components.CardList; + +public class CardListItemButton +{ + public string Name { get; set; } + public string Icon { get; set; } + public Action Action { get; set; } + public ButtonStyle Style { get; set; } +} diff --git a/NftFaucet/Components/CardList/CardListItemConfiguration.cs b/NftFaucet/Components/CardList/CardListItemConfiguration.cs deleted file mode 100644 index 49f31e5..0000000 --- a/NftFaucet/Components/CardList/CardListItemConfiguration.cs +++ /dev/null @@ -1,9 +0,0 @@ -using CSharpFunctionalExtensions; - -namespace NftFaucet.Components.CardList; - -public class CardListItemConfiguration -{ - public CardListItemConfigurationObject[] Objects { get; set; } - public Func> ConfigureAction { get; set; } -} diff --git a/NftFaucet/Components/CardList/CardListItemConfigurationDialog.razor b/NftFaucet/Components/CardList/CardListItemConfigurationDialog.razor deleted file mode 100644 index 51265a7..0000000 --- a/NftFaucet/Components/CardList/CardListItemConfigurationDialog.razor +++ /dev/null @@ -1,34 +0,0 @@ -@page "/configuration/{CardListItemId}" -@inherits BasicComponent - -Configuration - -
- @foreach (var configurationObject in CardListItem.Configuration.Objects) - { - switch (configurationObject.Type) - { - case CardListItemConfigurationObjectType.Input: - { -
-

@configurationObject.Name

- -
- break; - } - case CardListItemConfigurationObjectType.Button: - { -
- -
- break; - } - default: - throw new ArgumentOutOfRangeException(); - } - } - -
- -
-
diff --git a/NftFaucet/Components/CardList/CardListItemConfigurationDialog.razor.cs b/NftFaucet/Components/CardList/CardListItemConfigurationDialog.razor.cs deleted file mode 100644 index 15c5725..0000000 --- a/NftFaucet/Components/CardList/CardListItemConfigurationDialog.razor.cs +++ /dev/null @@ -1,25 +0,0 @@ -using Microsoft.AspNetCore.Components; -using Radzen; - -namespace NftFaucet.Components.CardList; - -public partial class CardListItemConfigurationDialog : BasicComponent -{ - [Parameter] public Guid CardListItemId { get; set; } - [Parameter] public CardListItem CardListItem { get; set; } - - private async Task OnSavePressed() - { - var result = await CardListItem.Configuration.ConfigureAction(CardListItem.Configuration.Objects); - if (result.IsFailure) - { - NotificationService.Notify(NotificationSeverity.Error, "Invalid configuration", result.Error); - return; - } - - await CardListItem.Configuration.ConfigureAction(CardListItem.Configuration.Objects); - RefreshMediator.NotifyStateHasChangedSafe(); - - DialogService.Close((bool?)true); - } -} diff --git a/NftFaucet/Components/CardList/CardListItemConfigurationObject.cs b/NftFaucet/Components/CardList/CardListItemConfigurationObject.cs deleted file mode 100644 index 507a31a..0000000 --- a/NftFaucet/Components/CardList/CardListItemConfigurationObject.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace NftFaucet.Components.CardList; - -public class CardListItemConfigurationObject -{ - public CardListItemConfigurationObjectType Type { get; set; } - - public string Name { get; set; } - public string Value { get; set; } - public string Icon { get; set; } - public string Placeholder { get; set; } - public bool IsDisabled { get; set; } - - // for type=Button only - public Action ClickAction { get; set; } -} diff --git a/NftFaucet/Components/CardList/CardListItemConfigurationObjectType.cs b/NftFaucet/Components/CardList/CardListItemConfigurationObjectType.cs deleted file mode 100644 index 2cc913d..0000000 --- a/NftFaucet/Components/CardList/CardListItemConfigurationObjectType.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace NftFaucet.Components.CardList; - -public enum CardListItemConfigurationObjectType -{ - Input, - Button, -} diff --git a/NftFaucet/Shared/NavMenu.razor b/NftFaucet/Components/NavMenu/NavMenu.razor similarity index 100% rename from NftFaucet/Shared/NavMenu.razor rename to NftFaucet/Components/NavMenu/NavMenu.razor diff --git a/NftFaucet/Shared/NavMenu.razor.cs b/NftFaucet/Components/NavMenu/NavMenu.razor.cs similarity index 92% rename from NftFaucet/Shared/NavMenu.razor.cs rename to NftFaucet/Components/NavMenu/NavMenu.razor.cs index ac53022..e489df1 100644 --- a/NftFaucet/Shared/NavMenu.razor.cs +++ b/NftFaucet/Components/NavMenu/NavMenu.razor.cs @@ -1,6 +1,4 @@ -using NftFaucet.Components; - -namespace NftFaucet.Shared; +namespace NftFaucet.Components.NavMenu; public partial class NavMenu : BasicComponent { diff --git a/NftFaucet/Shared/NavMenu.razor.css b/NftFaucet/Components/NavMenu/NavMenu.razor.css similarity index 100% rename from NftFaucet/Shared/NavMenu.razor.css rename to NftFaucet/Components/NavMenu/NavMenu.razor.css diff --git a/NftFaucet/Components/BasicLayout.cs b/NftFaucet/Layouts/BasicLayout.cs similarity index 85% rename from NftFaucet/Components/BasicLayout.cs rename to NftFaucet/Layouts/BasicLayout.cs index 2f4c682..a09642c 100644 --- a/NftFaucet/Components/BasicLayout.cs +++ b/NftFaucet/Layouts/BasicLayout.cs @@ -1,8 +1,8 @@ using Microsoft.AspNetCore.Components; -using NftFaucet.Models.State; -using NftFaucet.Services; +using NftFaucet.Infrastructure.Models.State; +using NftFaucet.Infrastructure.Services; -namespace NftFaucet.Components; +namespace NftFaucet.Layouts; public abstract class BasicLayout : LayoutComponentBase { diff --git a/NftFaucet/Shared/EmptyLayout.razor b/NftFaucet/Layouts/EmptyLayout.razor similarity index 100% rename from NftFaucet/Shared/EmptyLayout.razor rename to NftFaucet/Layouts/EmptyLayout.razor diff --git a/NftFaucet/Shared/MainLayout.razor b/NftFaucet/Layouts/MainLayout.razor similarity index 100% rename from NftFaucet/Shared/MainLayout.razor rename to NftFaucet/Layouts/MainLayout.razor diff --git a/NftFaucet/Shared/MainLayout.razor.css b/NftFaucet/Layouts/MainLayout.razor.css similarity index 100% rename from NftFaucet/Shared/MainLayout.razor.css rename to NftFaucet/Layouts/MainLayout.razor.css diff --git a/NftFaucet/Models/Balance.cs b/NftFaucet/Models/Balance.cs deleted file mode 100644 index 5a0d2e4..0000000 --- a/NftFaucet/Models/Balance.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System.Numerics; - -namespace NftFaucet.Models; - -public class Balance -{ - public BigInteger Amount { get; set; } - public string Currency { get; set; } -} diff --git a/NftFaucet/Models/MintingState.cs b/NftFaucet/Models/MintingState.cs deleted file mode 100644 index f9684ec..0000000 --- a/NftFaucet/Models/MintingState.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace NftFaucet.Models; - -public enum MintingState -{ - CheckingNetwork, - CheckingAddress, - CheckingBalance, - SendingTransaction, - Done, -} diff --git a/NftFaucet/Models/NewFileModel.cs b/NftFaucet/Models/NewFileModel.cs deleted file mode 100644 index e47543e..0000000 --- a/NftFaucet/Models/NewFileModel.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace NftFaucet.Models; - -public class NewFileModel -{ - public string Name { get; set; } - public string Description { get; set; } - public string MainFileData { get; set; } - public string MainFileName { get; set; } - public long? MainFileSize { get; set; } - public string CoverFileData { get; set; } - public string CoverFileName { get; set; } - public long? CoverFileSize { get; set; } -} diff --git a/NftFaucet/NftFaucet.csproj b/NftFaucet/NftFaucet.csproj index 1b4b8e3..0c0713a 100644 --- a/NftFaucet/NftFaucet.csproj +++ b/NftFaucet/NftFaucet.csproj @@ -9,19 +9,10 @@ - - - - - - - - - @@ -31,7 +22,23 @@ - <_ContentIncludedByDefault Remove="wwwroot\sample-data\weather.json" /> + + + + + + + + + + + + + + + + + diff --git a/NftFaucet/Pages/ConfigurationDialog.razor b/NftFaucet/Pages/ConfigurationDialog.razor new file mode 100644 index 0000000..eab5dbe --- /dev/null +++ b/NftFaucet/Pages/ConfigurationDialog.razor @@ -0,0 +1,36 @@ +@page "/configuration" +@using NftFaucet.Plugins.Models +@using NftFaucet.Plugins.Models.Enums +@inherits BasicComponent + +Configuration + +
+ @foreach (var configurationItem in ConfigurationItems ?? Array.Empty()) + { + switch (configurationItem.DisplayType) + { + case UiDisplayType.Input: + { +
+

@configurationItem.Name

+ +
+ break; + } + case UiDisplayType.Button: + { +
+ +
+ break; + } + default: + throw new ArgumentOutOfRangeException(); + } + } + +
+ +
+ diff --git a/NftFaucet/Pages/ConfigurationDialog.razor.cs b/NftFaucet/Pages/ConfigurationDialog.razor.cs new file mode 100644 index 0000000..de9991a --- /dev/null +++ b/NftFaucet/Pages/ConfigurationDialog.razor.cs @@ -0,0 +1,30 @@ +using CSharpFunctionalExtensions; +using Microsoft.AspNetCore.Components; +using NftFaucet.Components; +using NftFaucet.Plugins.Models; +using Radzen; + +namespace NftFaucet.Pages; + +public partial class ConfigurationDialog : BasicComponent +{ + [Parameter] + public ConfigurationItem[] ConfigurationItems { get; set; } + + [Parameter] + public Func> ConfigureAction { get; set; } + + private async Task OnSavePressed() + { + var result = await ConfigureAction(ConfigurationItems); + if (result.IsSuccess) + { + RefreshMediator.NotifyStateHasChangedSafe(); + DialogService.Close((bool?)true); + } + else + { + NotificationService.Notify(NotificationSeverity.Error, "Invalid configuration", result.Error); + } + } +} diff --git a/NftFaucet/Pages/ContractsPage.razor.cs b/NftFaucet/Pages/ContractsPage.razor.cs index 14a3a02..c733fcb 100644 --- a/NftFaucet/Pages/ContractsPage.razor.cs +++ b/NftFaucet/Pages/ContractsPage.razor.cs @@ -1,7 +1,7 @@ using System.Globalization; using NftFaucet.Components; using NftFaucet.Components.CardList; -using NftFaucet.Plugins.NetworkPlugins; +using NftFaucet.Domain.Models.Abstraction; using Radzen; namespace NftFaucet.Pages; diff --git a/NftFaucet/Pages/CreateTokenDialog.razor.cs b/NftFaucet/Pages/CreateTokenDialog.razor.cs index 707faa3..dfcedad 100644 --- a/NftFaucet/Pages/CreateTokenDialog.razor.cs +++ b/NftFaucet/Pages/CreateTokenDialog.razor.cs @@ -1,7 +1,6 @@ using MimeTypes; using NftFaucet.Components; -using NftFaucet.Models; -using NftFaucet.Plugins; +using NftFaucet.Domain.Models; using Radzen; namespace NftFaucet.Pages; @@ -96,4 +95,16 @@ public partial class CreateTokenDialog : BasicComponent Model.CoverFileName = null; Model.CoverFileSize = null; } + + private class NewFileModel + { + public string Name { get; set; } + public string Description { get; set; } + public string MainFileData { get; set; } + public string MainFileName { get; set; } + public long? MainFileSize { get; set; } + public string CoverFileData { get; set; } + public string CoverFileName { get; set; } + public long? CoverFileSize { get; set; } + } } diff --git a/NftFaucet/Pages/CreateUploadDialog.razor.cs b/NftFaucet/Pages/CreateUploadDialog.razor.cs index 7e1a94b..1e35ec0 100644 --- a/NftFaucet/Pages/CreateUploadDialog.razor.cs +++ b/NftFaucet/Pages/CreateUploadDialog.razor.cs @@ -1,11 +1,14 @@ using System.Text; +using CSharpFunctionalExtensions; using Microsoft.AspNetCore.Components; -using Newtonsoft.Json; using NftFaucet.Components; using NftFaucet.Components.CardList; -using NftFaucet.Models; -using NftFaucet.Plugins; -using NftFaucet.Plugins.UploadPlugins; +using NftFaucet.Domain.Models; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Domain.Services; +using NftFaucet.Domain.Utils; +using NftFaucet.Plugins.Models; +using NftFaucet.Plugins.Models.Abstraction; using Radzen; namespace NftFaucet.Pages; @@ -14,10 +17,12 @@ public partial class CreateUploadDialog : BasicComponent { [Parameter] public IToken Token { get; set; } + [Inject] public ITokenMetadataGenerator TokenMetadataGenerator { get; set; } + protected override void OnInitialized() { - RefreshCards(); base.OnInitialized(); + RefreshCards(); } private CardListItem[] UploaderCards { get; set; } @@ -28,17 +33,18 @@ public partial class CreateUploadDialog : BasicComponent private void RefreshCards() { UploaderCards = AppState.PluginStorage.Uploaders.Select(MapCardListItem).ToArray(); + RefreshMediator.NotifyStateHasChangedSafe(); } private CardListItem MapCardListItem(IUploader uploader) { - var configuration = uploader.GetConfiguration(); + var configurationItems = uploader.GetConfigurationItems(); return new CardListItem { Id = uploader.Id, ImageLocation = uploader.ImageName != null ? "./images/" + uploader.ImageName : null, Header = uploader.Name, - Properties = uploader.GetProperties(), + Properties = uploader.GetProperties().Select(Map).ToArray(), IsDisabled = !uploader.IsSupported, SelectionIcon = uploader.IsConfigured ? CardListItemSelectionIcon.Checkmark : CardListItemSelectionIcon.Warning, Badges = new[] @@ -50,22 +56,25 @@ public partial class CreateUploadDialog : BasicComponent ? new CardListItemBadge {Style = BadgeStyle.Light, Text = "Not Supported"} : null, }.Where(x => x != null).ToArray(), - Configuration = configuration == null - ? null - : new CardListItemConfiguration + Buttons = configurationItems != null && configurationItems.Any() + ? new[] { - Objects = configuration.Objects, - ConfigureAction = async x => + new CardListItemButton { - var result = await configuration.ConfigureAction(x); - RefreshCards(); - if (result.IsSuccess) + Icon = "build", + Style = ButtonStyle.Secondary, + Action = async () => { - await StateRepository.SaveUploaderState(uploader); + var result = await OpenConfigurationDialog(uploader); + RefreshCards(); + if (result.IsSuccess) + { + await StateRepository.SaveUploaderState(uploader); + } } - return result; - }, - }, + } + } + : Array.Empty(), }; } @@ -74,7 +83,7 @@ public partial class CreateUploadDialog : BasicComponent IsUploading = true; RefreshMediator.NotifyStateHasChangedSafe(); - var mainFileLocationResult = await SelectedUploader.Upload(Token.MainFile.FileName, Token.MainFile.FileType, Base64DataToBytes(Token.MainFile.FileData)); + var mainFileLocationResult = await ResultWrapper.Wrap(() => SelectedUploader.Upload(Token.MainFile.FileName, Token.MainFile.FileType, Base64DataToBytes(Token.MainFile.FileData))); if (mainFileLocationResult.IsFailure) { IsUploading = false; @@ -87,7 +96,7 @@ public partial class CreateUploadDialog : BasicComponent Uri coverFileLocation = null; if (Token.CoverFile != null) { - var coverFileLocationResult = await SelectedUploader.Upload(Token.CoverFile.FileName, Token.CoverFile.FileType, Base64DataToBytes(Token.CoverFile.FileData)); + var coverFileLocationResult = await ResultWrapper.Wrap(() => SelectedUploader.Upload(Token.CoverFile.FileName, Token.CoverFile.FileType, Base64DataToBytes(Token.CoverFile.FileData))); if (coverFileLocationResult.IsFailure) { IsUploading = false; @@ -98,9 +107,9 @@ public partial class CreateUploadDialog : BasicComponent coverFileLocation = coverFileLocationResult.Value; } - var tokenMetadata = GenerateTokenMetadata(Token, mainFileLocation, coverFileLocation); + var tokenMetadata = TokenMetadataGenerator.GenerateTokenMetadata(Token, mainFileLocation, coverFileLocation); var tokenMetadataBytes = Encoding.UTF8.GetBytes(tokenMetadata); - var tokenLocationResult = await SelectedUploader.Upload($"{Token.Id}.json", "application/json", tokenMetadataBytes); + var tokenLocationResult = await ResultWrapper.Wrap(() => SelectedUploader.Upload($"{Token.Id}.json", "application/json", tokenMetadataBytes)); if (tokenLocationResult.IsFailure) { IsUploading = false; @@ -124,6 +133,33 @@ public partial class CreateUploadDialog : BasicComponent DialogService.Close(uploadLocation); } + private async Task OpenConfigurationDialog(IUploader uploader) + { + var configurationItems = uploader.GetConfigurationItems(); + foreach (var configurationItem in configurationItems) + { + var prevClickHandler = configurationItem.ClickAction; + if (prevClickHandler != null) + { + configurationItem.ClickAction = () => + { + prevClickHandler(); + RefreshMediator.NotifyStateHasChangedSafe(); + }; + } + } + + var result = (bool?) await DialogService.OpenAsync("Configuration", + new Dictionary + { + { nameof(ConfigurationDialog.ConfigurationItems), configurationItems }, + { nameof(ConfigurationDialog.ConfigureAction), uploader.Configure }, + }, + new DialogOptions() {Width = "700px", Height = "570px", Resizable = true, Draggable = true}); + + return result != null && result.Value ? Result.Success() : Result.Failure("Operation cancelled"); + } + private static byte[] Base64DataToBytes(string fileData) { var index = fileData.IndexOf(';'); @@ -131,17 +167,12 @@ public partial class CreateUploadDialog : BasicComponent return Convert.FromBase64String(encoded); } - private static string GenerateTokenMetadata(IToken token, Uri mainFileLocation, Uri coverFileLocation) - { - var tokenMetadata = new TokenMetadata + private CardListItemProperty Map(Property model) + => model == null ? null : new CardListItemProperty { - Name = token.Name, - Description = token.Description, - Image = coverFileLocation != null ? coverFileLocation.OriginalString : mainFileLocation.OriginalString, - AnimationUrl = coverFileLocation != null ? mainFileLocation.OriginalString : null, - ExternalUrl = "https://darkcodi.github.io/nft-faucet/", + Name = model.Name, + Value = model.Value, + ValueColor = model.ValueColor, + Link = model.Link, }; - var metadataJson = JsonConvert.SerializeObject(tokenMetadata, Formatting.Indented); - return metadataJson; - } } diff --git a/NftFaucet/Pages/IndexPage.razor.cs b/NftFaucet/Pages/IndexPage.razor.cs index 3352664..84dca4c 100644 --- a/NftFaucet/Pages/IndexPage.razor.cs +++ b/NftFaucet/Pages/IndexPage.razor.cs @@ -7,18 +7,6 @@ public partial class IndexPage : BasicComponent { protected override async Task OnInitializedAsync() { - // if (!await Metamask.IsReady()) - // { - // UriHelper.NavigateToRelative("/connect-metamask"); - // return; - // } - // - // if (!AppState.IpfsContext.IsInitialized) - // { - // UriHelper.NavigateToRelative("/connect-ipfs"); - // return; - // } - NavigationManager.NavigateToRelative("/networks"); } } diff --git a/NftFaucet/Pages/MintDialog.razor b/NftFaucet/Pages/MintDialog.razor index 3f4ad2c..8e5b1c6 100644 --- a/NftFaucet/Pages/MintDialog.razor +++ b/NftFaucet/Pages/MintDialog.razor @@ -1,5 +1,4 @@ @page "/mint/in-progress" -@using NftFaucet.Models @inherits BasicComponent Minting... diff --git a/NftFaucet/Pages/MintDialog.razor.cs b/NftFaucet/Pages/MintDialog.razor.cs index b3a59a8..6cd5afe 100644 --- a/NftFaucet/Pages/MintDialog.razor.cs +++ b/NftFaucet/Pages/MintDialog.razor.cs @@ -1,8 +1,9 @@ using System.Numerics; using NftFaucet.Components; -using NftFaucet.Models; -using NftFaucet.Plugins.NetworkPlugins; -using NftFaucet.Utils; +using NftFaucet.Domain.Models; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Domain.Utils; +using NftFaucet.Plugins.Models; namespace NftFaucet.Pages; @@ -150,4 +151,13 @@ public partial class MintDialog : BasicComponent { DialogService.Close(TransactionHash); } + + private enum MintingState + { + CheckingNetwork, + CheckingAddress, + CheckingBalance, + SendingTransaction, + Done, + } } diff --git a/NftFaucet/Pages/MintPage.razor b/NftFaucet/Pages/MintPage.razor index a45117a..9958ed0 100644 --- a/NftFaucet/Pages/MintPage.razor +++ b/NftFaucet/Pages/MintPage.razor @@ -1,5 +1,5 @@ @page "/mint" -@using NftFaucet.Plugins.NetworkPlugins +@using NftFaucet.Domain.Models.Enums @inherits BasicComponent Mint diff --git a/NftFaucet/Pages/MintPage.razor.cs b/NftFaucet/Pages/MintPage.razor.cs index c44f7fc..2f1ab42 100644 --- a/NftFaucet/Pages/MintPage.razor.cs +++ b/NftFaucet/Pages/MintPage.razor.cs @@ -1,6 +1,6 @@ using CSharpFunctionalExtensions; using NftFaucet.Components; -using NftFaucet.Utils; +using NftFaucet.Domain.Utils; using Radzen; namespace NftFaucet.Pages; diff --git a/NftFaucet/Pages/NetworksPage.razor.cs b/NftFaucet/Pages/NetworksPage.razor.cs index 84dfbb4..ff9b767 100644 --- a/NftFaucet/Pages/NetworksPage.razor.cs +++ b/NftFaucet/Pages/NetworksPage.razor.cs @@ -1,6 +1,7 @@ using NftFaucet.Components; using NftFaucet.Components.CardList; -using NftFaucet.Plugins.NetworkPlugins; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Domain.Models.Enums; using Radzen; namespace NftFaucet.Pages; diff --git a/NftFaucet/Pages/ProvidersPage.razor.cs b/NftFaucet/Pages/ProvidersPage.razor.cs index 8bb0c41..c8a2601 100644 --- a/NftFaucet/Pages/ProvidersPage.razor.cs +++ b/NftFaucet/Pages/ProvidersPage.razor.cs @@ -1,7 +1,9 @@ +using CSharpFunctionalExtensions; using Microsoft.AspNetCore.Components; using NftFaucet.Components; using NftFaucet.Components.CardList; -using NftFaucet.Plugins.ProviderPlugins; +using NftFaucet.Plugins.Models; +using NftFaucet.Plugins.Models.Abstraction; using Radzen; namespace NftFaucet.Pages; @@ -35,14 +37,14 @@ public partial class ProvidersPage : BasicComponent private CardListItem MapCardListItem(IProvider provider) { - var configuration = provider.GetConfiguration(); + var configurationItems = provider.GetConfigurationItems(); return new CardListItem { Id = provider.Id, ImageLocation = provider.ImageName != null ? "./images/" + provider.ImageName : null, Header = provider.Name, IsDisabled = !provider.IsSupported, - Properties = provider.GetProperties().ToArray(), + Properties = provider.GetProperties().Select(Map).ToArray(), SelectionIcon = provider.IsConfigured ? CardListItemSelectionIcon.Checkmark : CardListItemSelectionIcon.Warning, Badges = new[] { @@ -53,20 +55,25 @@ public partial class ProvidersPage : BasicComponent ? new CardListItemBadge {Style = BadgeStyle.Light, Text = "Not Supported"} : null, }.Where(x => x != null).ToArray(), - Configuration = configuration == null ? null : new CardListItemConfiguration - { - Objects = configuration.Objects, - ConfigureAction = async x => + Buttons = configurationItems != null && configurationItems.Any() + ? new[] { - var result = await configuration.ConfigureAction(x); - RefreshCards(); - if (result.IsSuccess) + new CardListItemButton { - await StateRepository.SaveProviderState(provider); + Icon = "build", + Style = ButtonStyle.Secondary, + Action = async () => + { + var result = await OpenConfigurationDialog(provider); + RefreshCards(); + if (result.IsSuccess) + { + await StateRepository.SaveProviderState(provider); + } + } } - return result; - }, - }, + } + : Array.Empty(), }; } @@ -74,4 +81,40 @@ public partial class ProvidersPage : BasicComponent { await SaveAppState(); } + + private async Task OpenConfigurationDialog(IProvider provider) + { + var configurationItems = provider.GetConfigurationItems(); + foreach (var configurationItem in configurationItems) + { + var prevClickHandler = configurationItem.ClickAction; + if (prevClickHandler != null) + { + configurationItem.ClickAction = () => + { + prevClickHandler(); + RefreshMediator.NotifyStateHasChangedSafe(); + }; + } + } + + var result = (bool?) await DialogService.OpenAsync("Configuration", + new Dictionary + { + { nameof(ConfigurationDialog.ConfigurationItems), configurationItems }, + { nameof(ConfigurationDialog.ConfigureAction), provider.Configure }, + }, + new DialogOptions() {Width = "700px", Height = "570px", Resizable = true, Draggable = true}); + + return result != null && result.Value ? Result.Success() : Result.Failure("Operation cancelled"); + } + + private CardListItemProperty Map(Property model) + => model == null ? null : new CardListItemProperty + { + Name = model.Name, + Value = model.Value, + ValueColor = model.ValueColor, + Link = model.Link, + }; } diff --git a/NftFaucet/Pages/TokensPage.razor.cs b/NftFaucet/Pages/TokensPage.razor.cs index 9445139..5c7edc9 100644 --- a/NftFaucet/Pages/TokensPage.razor.cs +++ b/NftFaucet/Pages/TokensPage.razor.cs @@ -1,7 +1,7 @@ using ByteSizeLib; using NftFaucet.Components; using NftFaucet.Components.CardList; -using NftFaucet.Plugins; +using NftFaucet.Domain.Models.Abstraction; using Radzen; namespace NftFaucet.Pages; diff --git a/NftFaucet/Pages/UploadLocationsPage.razor.cs b/NftFaucet/Pages/UploadLocationsPage.razor.cs index b9e31e2..313cea9 100644 --- a/NftFaucet/Pages/UploadLocationsPage.razor.cs +++ b/NftFaucet/Pages/UploadLocationsPage.razor.cs @@ -1,7 +1,7 @@ using System.Globalization; using NftFaucet.Components; using NftFaucet.Components.CardList; -using NftFaucet.Plugins; +using NftFaucet.Domain.Models.Abstraction; using Radzen; namespace NftFaucet.Pages; diff --git a/NftFaucet/Plugins/NetworkPlugins/Contract.cs b/NftFaucet/Plugins/NetworkPlugins/Contract.cs deleted file mode 100644 index 517d473..0000000 --- a/NftFaucet/Plugins/NetworkPlugins/Contract.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace NftFaucet.Plugins.NetworkPlugins; - -public class Contract : IContract -{ - public Guid Id { get; set; } - public string Name { get; set; } - public string Symbol { get; set; } - public string Address { get; set; } - public ContractType Type { get; set; } - public string DeploymentTxHash { get; set; } - public DateTime? DeployedAt { get; set; } - public bool IsVerified { get; set; } -} diff --git a/NftFaucet/Plugins/ProviderPlugins/IProviderPlugin.cs b/NftFaucet/Plugins/ProviderPlugins/IProviderPlugin.cs deleted file mode 100644 index d27918b..0000000 --- a/NftFaucet/Plugins/ProviderPlugins/IProviderPlugin.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace NftFaucet.Plugins.ProviderPlugins; - -public interface IProviderPlugin -{ - public IReadOnlyCollection Providers { get; } -} diff --git a/NftFaucet/Plugins/ProviderPlugins/Keygen/KeygenProviderPlugin.cs b/NftFaucet/Plugins/ProviderPlugins/Keygen/KeygenProviderPlugin.cs deleted file mode 100644 index 30ab19a..0000000 --- a/NftFaucet/Plugins/ProviderPlugins/Keygen/KeygenProviderPlugin.cs +++ /dev/null @@ -1,12 +0,0 @@ -using NftFaucet.Plugins.ProviderPlugins.Keygen.Providers; - -namespace NftFaucet.Plugins.ProviderPlugins.Keygen; - -public class KeygenProviderPlugin : IProviderPlugin -{ - public IReadOnlyCollection Providers { get; } = new IProvider[] - { - new EthereumKeygenProvider(), - new SolanaKeygenProvider(), - }; -} diff --git a/NftFaucet/Plugins/ProviderPlugins/Metamask/MetamaskProviderPlugin.cs b/NftFaucet/Plugins/ProviderPlugins/Metamask/MetamaskProviderPlugin.cs deleted file mode 100644 index a989f7a..0000000 --- a/NftFaucet/Plugins/ProviderPlugins/Metamask/MetamaskProviderPlugin.cs +++ /dev/null @@ -1,11 +0,0 @@ -using NftFaucet.Plugins.ProviderPlugins.Metamask.Providers; - -namespace NftFaucet.Plugins.ProviderPlugins.Metamask; - -public class MetamaskProviderPlugin : IProviderPlugin -{ - public IReadOnlyCollection Providers { get; } = new IProvider[] - { - new MetamaskProvider(), - }; -} diff --git a/NftFaucet/Plugins/ProviderPlugins/Phantom/PhantomProviderPlugin.cs b/NftFaucet/Plugins/ProviderPlugins/Phantom/PhantomProviderPlugin.cs deleted file mode 100644 index 177b929..0000000 --- a/NftFaucet/Plugins/ProviderPlugins/Phantom/PhantomProviderPlugin.cs +++ /dev/null @@ -1,11 +0,0 @@ -using NftFaucet.Plugins.ProviderPlugins.Phantom.Providers; - -namespace NftFaucet.Plugins.ProviderPlugins.Phantom; - -public class PhantomProviderPlugin : IProviderPlugin -{ - public IReadOnlyCollection Providers { get; } = new IProvider[] - { - new PhantomProvider(), - }; -} diff --git a/NftFaucet/Plugins/UploadPlugins/Crust/CrustUploadPlugin.cs b/NftFaucet/Plugins/UploadPlugins/Crust/CrustUploadPlugin.cs deleted file mode 100644 index 2dfa267..0000000 --- a/NftFaucet/Plugins/UploadPlugins/Crust/CrustUploadPlugin.cs +++ /dev/null @@ -1,11 +0,0 @@ -using NftFaucet.Plugins.UploadPlugins.Crust.Uploaders; - -namespace NftFaucet.Plugins.UploadPlugins.Crust; - -public class CrustUploadPlugin : IUploadPlugin -{ - public IReadOnlyCollection Uploaders { get; } = new[] - { - new CrustUploader(), - }; -} diff --git a/NftFaucet/Plugins/UploadPlugins/IUploadPlugin.cs b/NftFaucet/Plugins/UploadPlugins/IUploadPlugin.cs deleted file mode 100644 index 3c3afbe..0000000 --- a/NftFaucet/Plugins/UploadPlugins/IUploadPlugin.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace NftFaucet.Plugins.UploadPlugins; - -public interface IUploadPlugin -{ - public IReadOnlyCollection Uploaders { get; } -} diff --git a/NftFaucet/Plugins/UploadPlugins/Infura/InfuraUploadPlugin.cs b/NftFaucet/Plugins/UploadPlugins/Infura/InfuraUploadPlugin.cs deleted file mode 100644 index a8518a5..0000000 --- a/NftFaucet/Plugins/UploadPlugins/Infura/InfuraUploadPlugin.cs +++ /dev/null @@ -1,11 +0,0 @@ -using NftFaucet.Plugins.UploadPlugins.Infura.Uploaders; - -namespace NftFaucet.Plugins.UploadPlugins.Infura; - -public class InfuraUploadPlugin : IUploadPlugin -{ - public IReadOnlyCollection Uploaders { get; } = new[] - { - new InfuraUploader(), - }; -} diff --git a/NftFaucet/Plugins/UploadPlugins/NftStorage/NftStorageUploadPlugin.cs b/NftFaucet/Plugins/UploadPlugins/NftStorage/NftStorageUploadPlugin.cs deleted file mode 100644 index 1a65b19..0000000 --- a/NftFaucet/Plugins/UploadPlugins/NftStorage/NftStorageUploadPlugin.cs +++ /dev/null @@ -1,11 +0,0 @@ -using NftFaucet.Plugins.UploadPlugins.NftStorage.Uploaders; - -namespace NftFaucet.Plugins.UploadPlugins.NftStorage; - -public class NftStorageUploadPlugin : IUploadPlugin -{ - public IReadOnlyCollection Uploaders { get; } = new[] - { - new NftStorageUploader(), - }; -} diff --git a/NftFaucet/Program.cs b/NftFaucet/Program.cs index 46ba10b..bde9f62 100644 --- a/NftFaucet/Program.cs +++ b/NftFaucet/Program.cs @@ -1,10 +1,13 @@ using Ethereum.MetaMask.Blazor; using Microsoft.AspNetCore.Components.Web; using Microsoft.AspNetCore.Components.WebAssembly.Hosting; -using NftFaucet.Models.State; using NftFaucet.Options; using NftFaucet.Services; using NftFaucet; +using NftFaucet.Domain.Services; +using NftFaucet.Infrastructure.Models.State; +using NftFaucet.Infrastructure.Repositories; +using NftFaucet.Infrastructure.Services; using Radzen; using TG.Blazor.IndexedDB; @@ -20,14 +23,18 @@ builder.Services.AddSingleton(settings); builder.Services.AddScoped(sp => new HttpClient {BaseAddress = new Uri(builder.HostEnvironment.BaseAddress)}); builder.Services.AddSingleton(); builder.Services.AddSingleton(); -builder.Services.AddScoped(); -builder.Services.AddScoped(); +builder.Services.AddScoped(); +builder.Services.AddScoped(); +builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); + +// add Radzen components builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); + builder.Services.AddMetaMaskBlazor(); builder.Services.AddIndexedDB(dbStore => @@ -107,6 +114,6 @@ builder.Services.AddIndexedDB(dbStore => }); var app = builder.Build(); -var initializationService = app.Services.GetRequiredService(); +var initializationService = app.Services.GetRequiredService(); await initializationService.Initialize(); await app.RunAsync(); diff --git a/NftFaucet/Services/IInitializationService.cs b/NftFaucet/Services/IInitializationService.cs new file mode 100644 index 0000000..0137163 --- /dev/null +++ b/NftFaucet/Services/IInitializationService.cs @@ -0,0 +1,6 @@ +namespace NftFaucet.Services; + +public interface IInitializationService +{ + public Task Initialize(); +} diff --git a/NftFaucet/Services/InitializationService.cs b/NftFaucet/Services/InitializationService.cs index d25e43c..4b35d82 100644 --- a/NftFaucet/Services/InitializationService.cs +++ b/NftFaucet/Services/InitializationService.cs @@ -1,16 +1,17 @@ -using NftFaucet.Extensions; -using NftFaucet.Models.State; +using NftFaucet.Infrastructure.Extensions; +using NftFaucet.Infrastructure.Models.State; +using NftFaucet.Infrastructure.Repositories; namespace NftFaucet.Services; -public class InitializationService +public class InitializationService : IInitializationService { private readonly ScopedAppState _appState; private readonly PluginLoader _pluginLoader; - private readonly StateRepository _stateRepository; + private readonly IStateRepository _stateRepository; private readonly IServiceProvider _serviceProvider; - public InitializationService(ScopedAppState appState, PluginLoader pluginLoader, StateRepository stateRepository, IServiceProvider serviceProvider) + public InitializationService(ScopedAppState appState, PluginLoader pluginLoader, IStateRepository stateRepository, IServiceProvider serviceProvider) { _appState = appState; _pluginLoader = pluginLoader; @@ -41,10 +42,9 @@ public class InitializationService _appState.PluginStorage.Uploaders == null && _appState.PluginStorage.Contracts == null; - _pluginLoader.EnsurePluginsLoaded(); _appState.PluginStorage.Networks ??= _pluginLoader.NetworkPlugins.SelectMany(x => x.Networks).Where(x => x != null).ToArray(); - _appState.PluginStorage.Providers ??= _pluginLoader.ProviderPlugins.SelectMany(x => x.Providers).Where(x => x != null).ToArray(); - _appState.PluginStorage.Uploaders ??= _pluginLoader.UploadPlugins.SelectMany(x => x.Uploaders).Where(x => x != null).ToArray(); + _appState.PluginStorage.Providers ??= _pluginLoader.ProviderPlugins.Where(x => x != null).ToArray(); + _appState.PluginStorage.Uploaders ??= _pluginLoader.UploadPlugins.Where(x => x != null).ToArray(); _appState.PluginStorage.Contracts ??= _appState.PluginStorage.Networks.SelectMany(x => x.DeployedContracts).Where(x => x != null).ToArray(); if (isFirstRun) diff --git a/NftFaucet/Services/PluginLoader.cs b/NftFaucet/Services/PluginLoader.cs index f0f267a..36614bc 100644 --- a/NftFaucet/Services/PluginLoader.cs +++ b/NftFaucet/Services/PluginLoader.cs @@ -1,36 +1,48 @@ -using System.Reflection; -using NftFaucet.Plugins.NetworkPlugins; -using NftFaucet.Plugins.ProviderPlugins; -using NftFaucet.Plugins.UploadPlugins; +using NftFaucet.NetworkPlugins.Arbitrum; +using NftFaucet.NetworkPlugins.Avalanche; +using NftFaucet.NetworkPlugins.BinanceSmartChain; +using NftFaucet.NetworkPlugins.Ethereum; +using NftFaucet.NetworkPlugins.Moonbeam; +using NftFaucet.NetworkPlugins.Optimism; +using NftFaucet.NetworkPlugins.Polygon; +using NftFaucet.NetworkPlugins.Solana; +using NftFaucet.Plugins.Models.Abstraction; +using NftFaucet.ProviderPlugins.EthereumKeygen; +using NftFaucet.ProviderPlugins.Metamask; +using NftFaucet.ProviderPlugins.Phantom; +using NftFaucet.ProviderPlugins.SolanaKeygen; +using NftFaucet.UploadPlugins.Crust; +using NftFaucet.UploadPlugins.Infura; +using NftFaucet.UploadPlugins.NftStorage; namespace NftFaucet.Services; public class PluginLoader { - public IReadOnlyCollection NetworkPlugins { get; private set; } - public IReadOnlyCollection ProviderPlugins { get; private set; } - public IReadOnlyCollection UploadPlugins { get; private set; } - - public bool ArePluginsLoaded { get; private set; } - - public void EnsurePluginsLoaded() + public IReadOnlyCollection NetworkPlugins { get; } = new INetworkPlugin[] { - if (ArePluginsLoaded) - { - return; - } + new EthereumNetworkPlugin(), + new PolygonNetworkPlugin(), + new BscNetworkPlugin(), + new OptimismNetworkPlugin(), + new MoonbeamNetworkPlugin(), + new ArbitrumNetworkPlugin(), + new AvalancheNetworkPlugin(), + new SolanaNetworkPlugin(), + }; - var assembly = Assembly.GetExecutingAssembly(); - var allTypes = assembly.GetTypes(); - - var networkPluginTypes = allTypes.Where(x => x.IsClass && typeof(INetworkPlugin).IsAssignableFrom(x)).ToArray(); - var providerPluginTypes = allTypes.Where(x => x.IsClass && typeof(IProviderPlugin).IsAssignableFrom(x)).ToArray(); - var uploadPluginTypes = allTypes.Where(x => x.IsClass && typeof(IUploadPlugin).IsAssignableFrom(x)).ToArray(); + public IReadOnlyCollection ProviderPlugins { get; } = new IProvider[] + { + new MetamaskProvider(), + new EthereumKeygenProvider(), + new PhantomProvider(), + new SolanaKeygenProvider(), + }; - NetworkPlugins = networkPluginTypes.Select(x => (INetworkPlugin) Activator.CreateInstance(x)).ToArray(); - ProviderPlugins = providerPluginTypes.Select(x => (IProviderPlugin) Activator.CreateInstance(x)).ToArray(); - UploadPlugins = uploadPluginTypes.Select(x => (IUploadPlugin) Activator.CreateInstance(x)).ToArray(); - - ArePluginsLoaded = true; - } + public IReadOnlyCollection UploadPlugins { get; } = new IUploader[] + { + new InfuraUploader(), + new NftStorageUploader(), + new CrustUploader(), + }; } diff --git a/NftFaucet/_Imports.razor b/NftFaucet/_Imports.razor index 5303b45..817bf30 100644 --- a/NftFaucet/_Imports.razor +++ b/NftFaucet/_Imports.razor @@ -11,6 +11,7 @@ @using NftFaucet.Components.CardList @using NftFaucet.Components.CheckmarkIcon @using NftFaucet.Components.WarningIcon -@using NftFaucet.Shared +@using NftFaucet.Components.NavMenu +@using NftFaucet.Layouts @using Radzen @using Radzen.Blazor diff --git a/NftFaucet/Plugins/NetworkPlugins/Arbitrum/ArbitrumNetworkPlugin.cs b/plugins/network-plugins/NftFaucet.NetworkPlugins.Arbitrum/ArbitrumNetworkPlugin.cs similarity index 58% rename from NftFaucet/Plugins/NetworkPlugins/Arbitrum/ArbitrumNetworkPlugin.cs rename to plugins/network-plugins/NftFaucet.NetworkPlugins.Arbitrum/ArbitrumNetworkPlugin.cs index fe80041..fb73269 100644 --- a/NftFaucet/Plugins/NetworkPlugins/Arbitrum/ArbitrumNetworkPlugin.cs +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.Arbitrum/ArbitrumNetworkPlugin.cs @@ -1,6 +1,8 @@ -using NftFaucet.Plugins.NetworkPlugins.Arbitrum.Networks; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.NetworkPlugins.Arbitrum.Networks; +using NftFaucet.Plugins.Models.Abstraction; -namespace NftFaucet.Plugins.NetworkPlugins.Arbitrum; +namespace NftFaucet.NetworkPlugins.Arbitrum; public class ArbitrumNetworkPlugin : INetworkPlugin { diff --git a/NftFaucet/Plugins/NetworkPlugins/Arbitrum/Networks/ArbitrumNovaNetwork.cs b/plugins/network-plugins/NftFaucet.NetworkPlugins.Arbitrum/Networks/ArbitrumNovaNetwork.cs similarity index 87% rename from NftFaucet/Plugins/NetworkPlugins/Arbitrum/Networks/ArbitrumNovaNetwork.cs rename to plugins/network-plugins/NftFaucet.NetworkPlugins.Arbitrum/Networks/ArbitrumNovaNetwork.cs index 01c6f8c..a388f17 100644 --- a/NftFaucet/Plugins/NetworkPlugins/Arbitrum/Networks/ArbitrumNovaNetwork.cs +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.Arbitrum/Networks/ArbitrumNovaNetwork.cs @@ -1,4 +1,7 @@ -namespace NftFaucet.Plugins.NetworkPlugins.Arbitrum.Networks; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Domain.Models.Enums; + +namespace NftFaucet.NetworkPlugins.Arbitrum.Networks; public class ArbitrumNovaNetwork : INetwork { diff --git a/NftFaucet/Plugins/NetworkPlugins/Arbitrum/Networks/ArbitrumOneNetwork.cs b/plugins/network-plugins/NftFaucet.NetworkPlugins.Arbitrum/Networks/ArbitrumOneNetwork.cs similarity index 86% rename from NftFaucet/Plugins/NetworkPlugins/Arbitrum/Networks/ArbitrumOneNetwork.cs rename to plugins/network-plugins/NftFaucet.NetworkPlugins.Arbitrum/Networks/ArbitrumOneNetwork.cs index 98887fa..8c3984e 100644 --- a/NftFaucet/Plugins/NetworkPlugins/Arbitrum/Networks/ArbitrumOneNetwork.cs +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.Arbitrum/Networks/ArbitrumOneNetwork.cs @@ -1,4 +1,7 @@ -namespace NftFaucet.Plugins.NetworkPlugins.Arbitrum.Networks; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Domain.Models.Enums; + +namespace NftFaucet.NetworkPlugins.Arbitrum.Networks; public class ArbitrumOneNetwork : INetwork { diff --git a/NftFaucet/Plugins/NetworkPlugins/Arbitrum/Networks/ArbitrumRinkebyNetwork.cs b/plugins/network-plugins/NftFaucet.NetworkPlugins.Arbitrum/Networks/ArbitrumRinkebyNetwork.cs similarity index 92% rename from NftFaucet/Plugins/NetworkPlugins/Arbitrum/Networks/ArbitrumRinkebyNetwork.cs rename to plugins/network-plugins/NftFaucet.NetworkPlugins.Arbitrum/Networks/ArbitrumRinkebyNetwork.cs index 37ccb7b..9eeac01 100644 --- a/NftFaucet/Plugins/NetworkPlugins/Arbitrum/Networks/ArbitrumRinkebyNetwork.cs +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.Arbitrum/Networks/ArbitrumRinkebyNetwork.cs @@ -1,6 +1,9 @@ using System.Globalization; +using NftFaucet.Domain.Models; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Domain.Models.Enums; -namespace NftFaucet.Plugins.NetworkPlugins.Arbitrum.Networks; +namespace NftFaucet.NetworkPlugins.Arbitrum.Networks; public class ArbitrumRinkebyNetwork : INetwork { diff --git a/plugins/network-plugins/NftFaucet.NetworkPlugins.Arbitrum/NftFaucet.NetworkPlugins.Arbitrum.csproj b/plugins/network-plugins/NftFaucet.NetworkPlugins.Arbitrum/NftFaucet.NetworkPlugins.Arbitrum.csproj new file mode 100644 index 0000000..f7c6f35 --- /dev/null +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.Arbitrum/NftFaucet.NetworkPlugins.Arbitrum.csproj @@ -0,0 +1,13 @@ + + + + net6.0 + enable + disable + + + + + + + diff --git a/NftFaucet/Plugins/NetworkPlugins/Avalanche/AvalancheNetworkPlugin.cs b/plugins/network-plugins/NftFaucet.NetworkPlugins.Avalanche/AvalancheNetworkPlugin.cs similarity index 54% rename from NftFaucet/Plugins/NetworkPlugins/Avalanche/AvalancheNetworkPlugin.cs rename to plugins/network-plugins/NftFaucet.NetworkPlugins.Avalanche/AvalancheNetworkPlugin.cs index 4865765..c5bdf95 100644 --- a/NftFaucet/Plugins/NetworkPlugins/Avalanche/AvalancheNetworkPlugin.cs +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.Avalanche/AvalancheNetworkPlugin.cs @@ -1,6 +1,8 @@ -using NftFaucet.Plugins.NetworkPlugins.Avalanche.Networks; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.NetworkPlugins.Avalanche.Networks; +using NftFaucet.Plugins.Models.Abstraction; -namespace NftFaucet.Plugins.NetworkPlugins.Avalanche; +namespace NftFaucet.NetworkPlugins.Avalanche; public class AvalancheNetworkPlugin : INetworkPlugin { diff --git a/NftFaucet/Plugins/NetworkPlugins/Avalanche/Networks/AvalancheFujiNetwork.cs b/plugins/network-plugins/NftFaucet.NetworkPlugins.Avalanche/Networks/AvalancheFujiNetwork.cs similarity index 92% rename from NftFaucet/Plugins/NetworkPlugins/Avalanche/Networks/AvalancheFujiNetwork.cs rename to plugins/network-plugins/NftFaucet.NetworkPlugins.Avalanche/Networks/AvalancheFujiNetwork.cs index 170ab13..3d5cc5a 100644 --- a/NftFaucet/Plugins/NetworkPlugins/Avalanche/Networks/AvalancheFujiNetwork.cs +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.Avalanche/Networks/AvalancheFujiNetwork.cs @@ -1,6 +1,9 @@ using System.Globalization; +using NftFaucet.Domain.Models; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Domain.Models.Enums; -namespace NftFaucet.Plugins.NetworkPlugins.Avalanche.Networks; +namespace NftFaucet.NetworkPlugins.Avalanche.Networks; public class AvalancheFujiNetwork : INetwork { diff --git a/NftFaucet/Plugins/NetworkPlugins/Avalanche/Networks/AvalancheMainnetNetwork.cs b/plugins/network-plugins/NftFaucet.NetworkPlugins.Avalanche/Networks/AvalancheMainnetNetwork.cs similarity index 86% rename from NftFaucet/Plugins/NetworkPlugins/Avalanche/Networks/AvalancheMainnetNetwork.cs rename to plugins/network-plugins/NftFaucet.NetworkPlugins.Avalanche/Networks/AvalancheMainnetNetwork.cs index 7f26fc6..bf96d0a 100644 --- a/NftFaucet/Plugins/NetworkPlugins/Avalanche/Networks/AvalancheMainnetNetwork.cs +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.Avalanche/Networks/AvalancheMainnetNetwork.cs @@ -1,4 +1,7 @@ -namespace NftFaucet.Plugins.NetworkPlugins.Avalanche.Networks; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Domain.Models.Enums; + +namespace NftFaucet.NetworkPlugins.Avalanche.Networks; public class AvalancheMainnetNetwork : INetwork { diff --git a/plugins/network-plugins/NftFaucet.NetworkPlugins.Avalanche/NftFaucet.NetworkPlugins.Avalanche.csproj b/plugins/network-plugins/NftFaucet.NetworkPlugins.Avalanche/NftFaucet.NetworkPlugins.Avalanche.csproj new file mode 100644 index 0000000..29af9bc --- /dev/null +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.Avalanche/NftFaucet.NetworkPlugins.Avalanche.csproj @@ -0,0 +1,13 @@ + + + + net6.0 + enable + enable + + + + + + + diff --git a/NftFaucet/Plugins/NetworkPlugins/BinanceSmartChain/BscNetworkPlugin.cs b/plugins/network-plugins/NftFaucet.NetworkPlugins.BinanceSmartChain/BscNetworkPlugin.cs similarity index 50% rename from NftFaucet/Plugins/NetworkPlugins/BinanceSmartChain/BscNetworkPlugin.cs rename to plugins/network-plugins/NftFaucet.NetworkPlugins.BinanceSmartChain/BscNetworkPlugin.cs index bf0ba79..b181dd9 100644 --- a/NftFaucet/Plugins/NetworkPlugins/BinanceSmartChain/BscNetworkPlugin.cs +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.BinanceSmartChain/BscNetworkPlugin.cs @@ -1,6 +1,8 @@ -using NftFaucet.Plugins.NetworkPlugins.BinanceSmartChain.Networks; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.NetworkPlugins.BinanceSmartChain.Networks; +using NftFaucet.Plugins.Models.Abstraction; -namespace NftFaucet.Plugins.NetworkPlugins.BinanceSmartChain; +namespace NftFaucet.NetworkPlugins.BinanceSmartChain; public class BscNetworkPlugin : INetworkPlugin { diff --git a/NftFaucet/Plugins/NetworkPlugins/BinanceSmartChain/Networks/BscMainnetNetwork.cs b/plugins/network-plugins/NftFaucet.NetworkPlugins.BinanceSmartChain/Networks/BscMainnetNetwork.cs similarity index 85% rename from NftFaucet/Plugins/NetworkPlugins/BinanceSmartChain/Networks/BscMainnetNetwork.cs rename to plugins/network-plugins/NftFaucet.NetworkPlugins.BinanceSmartChain/Networks/BscMainnetNetwork.cs index fa1fdbb..546cd64 100644 --- a/NftFaucet/Plugins/NetworkPlugins/BinanceSmartChain/Networks/BscMainnetNetwork.cs +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.BinanceSmartChain/Networks/BscMainnetNetwork.cs @@ -1,4 +1,7 @@ -namespace NftFaucet.Plugins.NetworkPlugins.BinanceSmartChain.Networks; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Domain.Models.Enums; + +namespace NftFaucet.NetworkPlugins.BinanceSmartChain.Networks; public class BscMainnetNetwork : INetwork { diff --git a/NftFaucet/Plugins/NetworkPlugins/BinanceSmartChain/Networks/BscTestnetNetwork.cs b/plugins/network-plugins/NftFaucet.NetworkPlugins.BinanceSmartChain/Networks/BscTestnetNetwork.cs similarity index 92% rename from NftFaucet/Plugins/NetworkPlugins/BinanceSmartChain/Networks/BscTestnetNetwork.cs rename to plugins/network-plugins/NftFaucet.NetworkPlugins.BinanceSmartChain/Networks/BscTestnetNetwork.cs index 2d86194..68ab10e 100644 --- a/NftFaucet/Plugins/NetworkPlugins/BinanceSmartChain/Networks/BscTestnetNetwork.cs +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.BinanceSmartChain/Networks/BscTestnetNetwork.cs @@ -1,6 +1,9 @@ using System.Globalization; +using NftFaucet.Domain.Models; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Domain.Models.Enums; -namespace NftFaucet.Plugins.NetworkPlugins.BinanceSmartChain.Networks; +namespace NftFaucet.NetworkPlugins.BinanceSmartChain.Networks; public class BscTestnetNetwork : INetwork { diff --git a/plugins/network-plugins/NftFaucet.NetworkPlugins.BinanceSmartChain/NftFaucet.NetworkPlugins.BinanceSmartChain.csproj b/plugins/network-plugins/NftFaucet.NetworkPlugins.BinanceSmartChain/NftFaucet.NetworkPlugins.BinanceSmartChain.csproj new file mode 100644 index 0000000..f7c6f35 --- /dev/null +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.BinanceSmartChain/NftFaucet.NetworkPlugins.BinanceSmartChain.csproj @@ -0,0 +1,13 @@ + + + + net6.0 + enable + disable + + + + + + + diff --git a/NftFaucet/Plugins/NetworkPlugins/Ethereum/EthereumNetworkPlugin.cs b/plugins/network-plugins/NftFaucet.NetworkPlugins.Ethereum/EthereumNetworkPlugin.cs similarity index 68% rename from NftFaucet/Plugins/NetworkPlugins/Ethereum/EthereumNetworkPlugin.cs rename to plugins/network-plugins/NftFaucet.NetworkPlugins.Ethereum/EthereumNetworkPlugin.cs index f7264cb..31a7b05 100644 --- a/NftFaucet/Plugins/NetworkPlugins/Ethereum/EthereumNetworkPlugin.cs +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.Ethereum/EthereumNetworkPlugin.cs @@ -1,6 +1,8 @@ -using NftFaucet.Plugins.NetworkPlugins.Ethereum.Networks; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.NetworkPlugins.Ethereum.Networks; +using NftFaucet.Plugins.Models.Abstraction; -namespace NftFaucet.Plugins.NetworkPlugins.Ethereum; +namespace NftFaucet.NetworkPlugins.Ethereum; public class EthereumNetworkPlugin : INetworkPlugin { diff --git a/NftFaucet/Plugins/NetworkPlugins/Ethereum/Networks/CustomNetwork.cs b/plugins/network-plugins/NftFaucet.NetworkPlugins.Ethereum/Networks/CustomNetwork.cs similarity index 86% rename from NftFaucet/Plugins/NetworkPlugins/Ethereum/Networks/CustomNetwork.cs rename to plugins/network-plugins/NftFaucet.NetworkPlugins.Ethereum/Networks/CustomNetwork.cs index bd8ce40..692fbc5 100644 --- a/NftFaucet/Plugins/NetworkPlugins/Ethereum/Networks/CustomNetwork.cs +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.Ethereum/Networks/CustomNetwork.cs @@ -1,4 +1,7 @@ -namespace NftFaucet.Plugins.NetworkPlugins.Ethereum.Networks; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Domain.Models.Enums; + +namespace NftFaucet.NetworkPlugins.Ethereum.Networks; public class CustomNetwork : INetwork { diff --git a/NftFaucet/Plugins/NetworkPlugins/Ethereum/Networks/EthereumMainnetNetwork.cs b/plugins/network-plugins/NftFaucet.NetworkPlugins.Ethereum/Networks/EthereumMainnetNetwork.cs similarity index 86% rename from NftFaucet/Plugins/NetworkPlugins/Ethereum/Networks/EthereumMainnetNetwork.cs rename to plugins/network-plugins/NftFaucet.NetworkPlugins.Ethereum/Networks/EthereumMainnetNetwork.cs index ee4dd34..599ad38 100644 --- a/NftFaucet/Plugins/NetworkPlugins/Ethereum/Networks/EthereumMainnetNetwork.cs +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.Ethereum/Networks/EthereumMainnetNetwork.cs @@ -1,4 +1,7 @@ -namespace NftFaucet.Plugins.NetworkPlugins.Ethereum.Networks; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Domain.Models.Enums; + +namespace NftFaucet.NetworkPlugins.Ethereum.Networks; public class EthereumMainnetNetwork : INetwork { diff --git a/NftFaucet/Plugins/NetworkPlugins/Ethereum/Networks/GoerliNetwork.cs b/plugins/network-plugins/NftFaucet.NetworkPlugins.Ethereum/Networks/GoerliNetwork.cs similarity index 92% rename from NftFaucet/Plugins/NetworkPlugins/Ethereum/Networks/GoerliNetwork.cs rename to plugins/network-plugins/NftFaucet.NetworkPlugins.Ethereum/Networks/GoerliNetwork.cs index 88ba105..8559a40 100644 --- a/NftFaucet/Plugins/NetworkPlugins/Ethereum/Networks/GoerliNetwork.cs +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.Ethereum/Networks/GoerliNetwork.cs @@ -1,6 +1,9 @@ using System.Globalization; +using NftFaucet.Domain.Models; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Domain.Models.Enums; -namespace NftFaucet.Plugins.NetworkPlugins.Ethereum.Networks; +namespace NftFaucet.NetworkPlugins.Ethereum.Networks; public class GoerliNetwork : INetwork { diff --git a/NftFaucet/Plugins/NetworkPlugins/Ethereum/Networks/KilnNetwork.cs b/plugins/network-plugins/NftFaucet.NetworkPlugins.Ethereum/Networks/KilnNetwork.cs similarity index 86% rename from NftFaucet/Plugins/NetworkPlugins/Ethereum/Networks/KilnNetwork.cs rename to plugins/network-plugins/NftFaucet.NetworkPlugins.Ethereum/Networks/KilnNetwork.cs index 411a8ac..adc28bd 100644 --- a/NftFaucet/Plugins/NetworkPlugins/Ethereum/Networks/KilnNetwork.cs +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.Ethereum/Networks/KilnNetwork.cs @@ -1,4 +1,7 @@ -namespace NftFaucet.Plugins.NetworkPlugins.Ethereum.Networks; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Domain.Models.Enums; + +namespace NftFaucet.NetworkPlugins.Ethereum.Networks; public class KilnNetwork : INetwork { diff --git a/NftFaucet/Plugins/NetworkPlugins/Ethereum/Networks/KovanNetwork.cs b/plugins/network-plugins/NftFaucet.NetworkPlugins.Ethereum/Networks/KovanNetwork.cs similarity index 92% rename from NftFaucet/Plugins/NetworkPlugins/Ethereum/Networks/KovanNetwork.cs rename to plugins/network-plugins/NftFaucet.NetworkPlugins.Ethereum/Networks/KovanNetwork.cs index b24ee93..d4ed47d 100644 --- a/NftFaucet/Plugins/NetworkPlugins/Ethereum/Networks/KovanNetwork.cs +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.Ethereum/Networks/KovanNetwork.cs @@ -1,6 +1,9 @@ using System.Globalization; +using NftFaucet.Domain.Models; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Domain.Models.Enums; -namespace NftFaucet.Plugins.NetworkPlugins.Ethereum.Networks; +namespace NftFaucet.NetworkPlugins.Ethereum.Networks; public class KovanNetwork : INetwork { diff --git a/NftFaucet/Plugins/NetworkPlugins/Ethereum/Networks/RinkebyNetwork.cs b/plugins/network-plugins/NftFaucet.NetworkPlugins.Ethereum/Networks/RinkebyNetwork.cs similarity index 92% rename from NftFaucet/Plugins/NetworkPlugins/Ethereum/Networks/RinkebyNetwork.cs rename to plugins/network-plugins/NftFaucet.NetworkPlugins.Ethereum/Networks/RinkebyNetwork.cs index f53af86..ab98862 100644 --- a/NftFaucet/Plugins/NetworkPlugins/Ethereum/Networks/RinkebyNetwork.cs +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.Ethereum/Networks/RinkebyNetwork.cs @@ -1,6 +1,9 @@ using System.Globalization; +using NftFaucet.Domain.Models; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Domain.Models.Enums; -namespace NftFaucet.Plugins.NetworkPlugins.Ethereum.Networks; +namespace NftFaucet.NetworkPlugins.Ethereum.Networks; public class RinkebyNetwork : INetwork { diff --git a/NftFaucet/Plugins/NetworkPlugins/Ethereum/Networks/RopstenNetwork.cs b/plugins/network-plugins/NftFaucet.NetworkPlugins.Ethereum/Networks/RopstenNetwork.cs similarity index 92% rename from NftFaucet/Plugins/NetworkPlugins/Ethereum/Networks/RopstenNetwork.cs rename to plugins/network-plugins/NftFaucet.NetworkPlugins.Ethereum/Networks/RopstenNetwork.cs index 4bcde5d..82031f6 100644 --- a/NftFaucet/Plugins/NetworkPlugins/Ethereum/Networks/RopstenNetwork.cs +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.Ethereum/Networks/RopstenNetwork.cs @@ -1,6 +1,9 @@ using System.Globalization; +using NftFaucet.Domain.Models; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Domain.Models.Enums; -namespace NftFaucet.Plugins.NetworkPlugins.Ethereum.Networks; +namespace NftFaucet.NetworkPlugins.Ethereum.Networks; public class RopstenNetwork : INetwork { diff --git a/NftFaucet/Plugins/NetworkPlugins/Ethereum/Networks/SepoliaNetwork.cs b/plugins/network-plugins/NftFaucet.NetworkPlugins.Ethereum/Networks/SepoliaNetwork.cs similarity index 86% rename from NftFaucet/Plugins/NetworkPlugins/Ethereum/Networks/SepoliaNetwork.cs rename to plugins/network-plugins/NftFaucet.NetworkPlugins.Ethereum/Networks/SepoliaNetwork.cs index 12c8ad2..c8712d2 100644 --- a/NftFaucet/Plugins/NetworkPlugins/Ethereum/Networks/SepoliaNetwork.cs +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.Ethereum/Networks/SepoliaNetwork.cs @@ -1,4 +1,7 @@ -namespace NftFaucet.Plugins.NetworkPlugins.Ethereum.Networks; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Domain.Models.Enums; + +namespace NftFaucet.NetworkPlugins.Ethereum.Networks; public class SepoliaNetwork : INetwork { diff --git a/plugins/network-plugins/NftFaucet.NetworkPlugins.Ethereum/NftFaucet.NetworkPlugins.Ethereum.csproj b/plugins/network-plugins/NftFaucet.NetworkPlugins.Ethereum/NftFaucet.NetworkPlugins.Ethereum.csproj new file mode 100644 index 0000000..f7c6f35 --- /dev/null +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.Ethereum/NftFaucet.NetworkPlugins.Ethereum.csproj @@ -0,0 +1,13 @@ + + + + net6.0 + enable + disable + + + + + + + diff --git a/NftFaucet/Plugins/NetworkPlugins/Moonbeam/MoonbeamNetworkPlugin.cs b/plugins/network-plugins/NftFaucet.NetworkPlugins.Moonbeam/MoonbeamNetworkPlugin.cs similarity index 57% rename from NftFaucet/Plugins/NetworkPlugins/Moonbeam/MoonbeamNetworkPlugin.cs rename to plugins/network-plugins/NftFaucet.NetworkPlugins.Moonbeam/MoonbeamNetworkPlugin.cs index 189f05e..46e1d85 100644 --- a/NftFaucet/Plugins/NetworkPlugins/Moonbeam/MoonbeamNetworkPlugin.cs +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.Moonbeam/MoonbeamNetworkPlugin.cs @@ -1,6 +1,8 @@ -using NftFaucet.Plugins.NetworkPlugins.Moonbeam.Networks; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.NetworkPlugins.Moonbeam.Networks; +using NftFaucet.Plugins.Models.Abstraction; -namespace NftFaucet.Plugins.NetworkPlugins.Moonbeam; +namespace NftFaucet.NetworkPlugins.Moonbeam; public class MoonbeamNetworkPlugin : INetworkPlugin { diff --git a/NftFaucet/Plugins/NetworkPlugins/Moonbeam/Networks/MoonbaseAlphaNetwork.cs b/plugins/network-plugins/NftFaucet.NetworkPlugins.Moonbeam/Networks/MoonbaseAlphaNetwork.cs similarity index 92% rename from NftFaucet/Plugins/NetworkPlugins/Moonbeam/Networks/MoonbaseAlphaNetwork.cs rename to plugins/network-plugins/NftFaucet.NetworkPlugins.Moonbeam/Networks/MoonbaseAlphaNetwork.cs index ea8e240..f61ccb8 100644 --- a/NftFaucet/Plugins/NetworkPlugins/Moonbeam/Networks/MoonbaseAlphaNetwork.cs +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.Moonbeam/Networks/MoonbaseAlphaNetwork.cs @@ -1,6 +1,9 @@ using System.Globalization; +using NftFaucet.Domain.Models; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Domain.Models.Enums; -namespace NftFaucet.Plugins.NetworkPlugins.Moonbeam.Networks; +namespace NftFaucet.NetworkPlugins.Moonbeam.Networks; public class MoonbaseAlphaNetwork : INetwork { diff --git a/NftFaucet/Plugins/NetworkPlugins/Moonbeam/Networks/MoonbeamNetwork.cs b/plugins/network-plugins/NftFaucet.NetworkPlugins.Moonbeam/Networks/MoonbeamNetwork.cs similarity index 86% rename from NftFaucet/Plugins/NetworkPlugins/Moonbeam/Networks/MoonbeamNetwork.cs rename to plugins/network-plugins/NftFaucet.NetworkPlugins.Moonbeam/Networks/MoonbeamNetwork.cs index bf298f8..b47c1f3 100644 --- a/NftFaucet/Plugins/NetworkPlugins/Moonbeam/Networks/MoonbeamNetwork.cs +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.Moonbeam/Networks/MoonbeamNetwork.cs @@ -1,4 +1,7 @@ -namespace NftFaucet.Plugins.NetworkPlugins.Moonbeam.Networks; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Domain.Models.Enums; + +namespace NftFaucet.NetworkPlugins.Moonbeam.Networks; public class MoonbeamNetwork : INetwork { diff --git a/NftFaucet/Plugins/NetworkPlugins/Moonbeam/Networks/MoonriverNetwork.cs b/plugins/network-plugins/NftFaucet.NetworkPlugins.Moonbeam/Networks/MoonriverNetwork.cs similarity index 87% rename from NftFaucet/Plugins/NetworkPlugins/Moonbeam/Networks/MoonriverNetwork.cs rename to plugins/network-plugins/NftFaucet.NetworkPlugins.Moonbeam/Networks/MoonriverNetwork.cs index 8ee35ca..fea9e2a 100644 --- a/NftFaucet/Plugins/NetworkPlugins/Moonbeam/Networks/MoonriverNetwork.cs +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.Moonbeam/Networks/MoonriverNetwork.cs @@ -1,4 +1,7 @@ -namespace NftFaucet.Plugins.NetworkPlugins.Moonbeam.Networks; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Domain.Models.Enums; + +namespace NftFaucet.NetworkPlugins.Moonbeam.Networks; public class MoonriverNetwork : INetwork { diff --git a/plugins/network-plugins/NftFaucet.NetworkPlugins.Moonbeam/NftFaucet.NetworkPlugins.Moonbeam.csproj b/plugins/network-plugins/NftFaucet.NetworkPlugins.Moonbeam/NftFaucet.NetworkPlugins.Moonbeam.csproj new file mode 100644 index 0000000..f7c6f35 --- /dev/null +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.Moonbeam/NftFaucet.NetworkPlugins.Moonbeam.csproj @@ -0,0 +1,13 @@ + + + + net6.0 + enable + disable + + + + + + + diff --git a/NftFaucet/Plugins/NetworkPlugins/Optimism/Networks/OptimismGoerliNetwork.cs b/plugins/network-plugins/NftFaucet.NetworkPlugins.Optimism/Networks/OptimismGoerliNetwork.cs similarity index 87% rename from NftFaucet/Plugins/NetworkPlugins/Optimism/Networks/OptimismGoerliNetwork.cs rename to plugins/network-plugins/NftFaucet.NetworkPlugins.Optimism/Networks/OptimismGoerliNetwork.cs index 0dbf7dd..5e8032d 100644 --- a/NftFaucet/Plugins/NetworkPlugins/Optimism/Networks/OptimismGoerliNetwork.cs +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.Optimism/Networks/OptimismGoerliNetwork.cs @@ -1,4 +1,7 @@ -namespace NftFaucet.Plugins.NetworkPlugins.Optimism.Networks; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Domain.Models.Enums; + +namespace NftFaucet.NetworkPlugins.Optimism.Networks; public class OptimismGoerliNetwork : INetwork { diff --git a/NftFaucet/Plugins/NetworkPlugins/Optimism/Networks/OptimismKovanNetwork.cs b/plugins/network-plugins/NftFaucet.NetworkPlugins.Optimism/Networks/OptimismKovanNetwork.cs similarity index 92% rename from NftFaucet/Plugins/NetworkPlugins/Optimism/Networks/OptimismKovanNetwork.cs rename to plugins/network-plugins/NftFaucet.NetworkPlugins.Optimism/Networks/OptimismKovanNetwork.cs index e7845b0..8540638 100644 --- a/NftFaucet/Plugins/NetworkPlugins/Optimism/Networks/OptimismKovanNetwork.cs +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.Optimism/Networks/OptimismKovanNetwork.cs @@ -1,6 +1,9 @@ using System.Globalization; +using NftFaucet.Domain.Models; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Domain.Models.Enums; -namespace NftFaucet.Plugins.NetworkPlugins.Optimism.Networks; +namespace NftFaucet.NetworkPlugins.Optimism.Networks; public class OptimismKovanNetwork : INetwork { diff --git a/NftFaucet/Plugins/NetworkPlugins/Optimism/Networks/OptimismMainnetNetwork.cs b/plugins/network-plugins/NftFaucet.NetworkPlugins.Optimism/Networks/OptimismMainnetNetwork.cs similarity index 86% rename from NftFaucet/Plugins/NetworkPlugins/Optimism/Networks/OptimismMainnetNetwork.cs rename to plugins/network-plugins/NftFaucet.NetworkPlugins.Optimism/Networks/OptimismMainnetNetwork.cs index 3b712cd..b5194ae 100644 --- a/NftFaucet/Plugins/NetworkPlugins/Optimism/Networks/OptimismMainnetNetwork.cs +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.Optimism/Networks/OptimismMainnetNetwork.cs @@ -1,4 +1,7 @@ -namespace NftFaucet.Plugins.NetworkPlugins.Optimism.Networks; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Domain.Models.Enums; + +namespace NftFaucet.NetworkPlugins.Optimism.Networks; public class OptimismMainnetNetwork : INetwork { diff --git a/plugins/network-plugins/NftFaucet.NetworkPlugins.Optimism/NftFaucet.NetworkPlugins.Optimism.csproj b/plugins/network-plugins/NftFaucet.NetworkPlugins.Optimism/NftFaucet.NetworkPlugins.Optimism.csproj new file mode 100644 index 0000000..f7c6f35 --- /dev/null +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.Optimism/NftFaucet.NetworkPlugins.Optimism.csproj @@ -0,0 +1,13 @@ + + + + net6.0 + enable + disable + + + + + + + diff --git a/NftFaucet/Plugins/NetworkPlugins/Optimism/OptimismNetworkPlugin.cs b/plugins/network-plugins/NftFaucet.NetworkPlugins.Optimism/OptimismNetworkPlugin.cs similarity index 58% rename from NftFaucet/Plugins/NetworkPlugins/Optimism/OptimismNetworkPlugin.cs rename to plugins/network-plugins/NftFaucet.NetworkPlugins.Optimism/OptimismNetworkPlugin.cs index f6cbcf1..73c1f3b 100644 --- a/NftFaucet/Plugins/NetworkPlugins/Optimism/OptimismNetworkPlugin.cs +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.Optimism/OptimismNetworkPlugin.cs @@ -1,6 +1,8 @@ -using NftFaucet.Plugins.NetworkPlugins.Optimism.Networks; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.NetworkPlugins.Optimism.Networks; +using NftFaucet.Plugins.Models.Abstraction; -namespace NftFaucet.Plugins.NetworkPlugins.Optimism; +namespace NftFaucet.NetworkPlugins.Optimism; public class OptimismNetworkPlugin : INetworkPlugin { diff --git a/NftFaucet/Plugins/NetworkPlugins/Polygon/Networks/PolygonMainnetNetwork.cs b/plugins/network-plugins/NftFaucet.NetworkPlugins.Polygon/Networks/PolygonMainnetNetwork.cs similarity index 86% rename from NftFaucet/Plugins/NetworkPlugins/Polygon/Networks/PolygonMainnetNetwork.cs rename to plugins/network-plugins/NftFaucet.NetworkPlugins.Polygon/Networks/PolygonMainnetNetwork.cs index 2cec136..2e26234 100644 --- a/NftFaucet/Plugins/NetworkPlugins/Polygon/Networks/PolygonMainnetNetwork.cs +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.Polygon/Networks/PolygonMainnetNetwork.cs @@ -1,4 +1,7 @@ -namespace NftFaucet.Plugins.NetworkPlugins.Polygon.Networks; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Domain.Models.Enums; + +namespace NftFaucet.NetworkPlugins.Polygon.Networks; public class PolygonMainnetNetwork : INetwork { diff --git a/NftFaucet/Plugins/NetworkPlugins/Polygon/Networks/PolygonMumbaiNetwork.cs b/plugins/network-plugins/NftFaucet.NetworkPlugins.Polygon/Networks/PolygonMumbaiNetwork.cs similarity index 92% rename from NftFaucet/Plugins/NetworkPlugins/Polygon/Networks/PolygonMumbaiNetwork.cs rename to plugins/network-plugins/NftFaucet.NetworkPlugins.Polygon/Networks/PolygonMumbaiNetwork.cs index e3ac553..bf35b2e 100644 --- a/NftFaucet/Plugins/NetworkPlugins/Polygon/Networks/PolygonMumbaiNetwork.cs +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.Polygon/Networks/PolygonMumbaiNetwork.cs @@ -1,6 +1,9 @@ using System.Globalization; +using NftFaucet.Domain.Models; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Domain.Models.Enums; -namespace NftFaucet.Plugins.NetworkPlugins.Polygon.Networks; +namespace NftFaucet.NetworkPlugins.Polygon.Networks; public class PolygonMumbaiNetwork : INetwork { diff --git a/plugins/network-plugins/NftFaucet.NetworkPlugins.Polygon/NftFaucet.NetworkPlugins.Polygon.csproj b/plugins/network-plugins/NftFaucet.NetworkPlugins.Polygon/NftFaucet.NetworkPlugins.Polygon.csproj new file mode 100644 index 0000000..29af9bc --- /dev/null +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.Polygon/NftFaucet.NetworkPlugins.Polygon.csproj @@ -0,0 +1,13 @@ + + + + net6.0 + enable + enable + + + + + + + diff --git a/NftFaucet/Plugins/NetworkPlugins/Polygon/PolygonNetworkPlugin.cs b/plugins/network-plugins/NftFaucet.NetworkPlugins.Polygon/PolygonNetworkPlugin.cs similarity index 54% rename from NftFaucet/Plugins/NetworkPlugins/Polygon/PolygonNetworkPlugin.cs rename to plugins/network-plugins/NftFaucet.NetworkPlugins.Polygon/PolygonNetworkPlugin.cs index e3c075d..5937556 100644 --- a/NftFaucet/Plugins/NetworkPlugins/Polygon/PolygonNetworkPlugin.cs +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.Polygon/PolygonNetworkPlugin.cs @@ -1,6 +1,8 @@ -using NftFaucet.Plugins.NetworkPlugins.Polygon.Networks; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.NetworkPlugins.Polygon.Networks; +using NftFaucet.Plugins.Models.Abstraction; -namespace NftFaucet.Plugins.NetworkPlugins.Polygon; +namespace NftFaucet.NetworkPlugins.Polygon; public class PolygonNetworkPlugin : INetworkPlugin { diff --git a/NftFaucet/Plugins/NetworkPlugins/Solana/Networks/SolanaDevnetNetwork.cs b/plugins/network-plugins/NftFaucet.NetworkPlugins.Solana/Networks/SolanaDevnetNetwork.cs similarity index 89% rename from NftFaucet/Plugins/NetworkPlugins/Solana/Networks/SolanaDevnetNetwork.cs rename to plugins/network-plugins/NftFaucet.NetworkPlugins.Solana/Networks/SolanaDevnetNetwork.cs index 742cadf..daec90d 100644 --- a/NftFaucet/Plugins/NetworkPlugins/Solana/Networks/SolanaDevnetNetwork.cs +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.Solana/Networks/SolanaDevnetNetwork.cs @@ -1,4 +1,8 @@ -namespace NftFaucet.Plugins.NetworkPlugins.Solana.Networks; +using NftFaucet.Domain.Models; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Domain.Models.Enums; + +namespace NftFaucet.NetworkPlugins.Solana.Networks; public class SolanaDevnetNetwork : INetwork { diff --git a/NftFaucet/Plugins/NetworkPlugins/Solana/Networks/SolanaMainnetNetwork.cs b/plugins/network-plugins/NftFaucet.NetworkPlugins.Solana/Networks/SolanaMainnetNetwork.cs similarity index 87% rename from NftFaucet/Plugins/NetworkPlugins/Solana/Networks/SolanaMainnetNetwork.cs rename to plugins/network-plugins/NftFaucet.NetworkPlugins.Solana/Networks/SolanaMainnetNetwork.cs index e0fa5d6..f872109 100644 --- a/NftFaucet/Plugins/NetworkPlugins/Solana/Networks/SolanaMainnetNetwork.cs +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.Solana/Networks/SolanaMainnetNetwork.cs @@ -1,4 +1,7 @@ -namespace NftFaucet.Plugins.NetworkPlugins.Solana.Networks; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Domain.Models.Enums; + +namespace NftFaucet.NetworkPlugins.Solana.Networks; public class SolanaMainnetNetwork : INetwork { diff --git a/NftFaucet/Plugins/NetworkPlugins/Solana/Networks/SolanaTestnetNetwork.cs b/plugins/network-plugins/NftFaucet.NetworkPlugins.Solana/Networks/SolanaTestnetNetwork.cs similarity index 89% rename from NftFaucet/Plugins/NetworkPlugins/Solana/Networks/SolanaTestnetNetwork.cs rename to plugins/network-plugins/NftFaucet.NetworkPlugins.Solana/Networks/SolanaTestnetNetwork.cs index 3bd2398..2fe64d9 100644 --- a/NftFaucet/Plugins/NetworkPlugins/Solana/Networks/SolanaTestnetNetwork.cs +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.Solana/Networks/SolanaTestnetNetwork.cs @@ -1,4 +1,8 @@ -namespace NftFaucet.Plugins.NetworkPlugins.Solana.Networks; +using NftFaucet.Domain.Models; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Domain.Models.Enums; + +namespace NftFaucet.NetworkPlugins.Solana.Networks; public class SolanaTestnetNetwork : INetwork { diff --git a/plugins/network-plugins/NftFaucet.NetworkPlugins.Solana/NftFaucet.NetworkPlugins.Solana.csproj b/plugins/network-plugins/NftFaucet.NetworkPlugins.Solana/NftFaucet.NetworkPlugins.Solana.csproj new file mode 100644 index 0000000..29af9bc --- /dev/null +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.Solana/NftFaucet.NetworkPlugins.Solana.csproj @@ -0,0 +1,13 @@ + + + + net6.0 + enable + enable + + + + + + + diff --git a/NftFaucet/Plugins/NetworkPlugins/Solana/SolanaNetworkPlugin.cs b/plugins/network-plugins/NftFaucet.NetworkPlugins.Solana/SolanaNetworkPlugin.cs similarity index 58% rename from NftFaucet/Plugins/NetworkPlugins/Solana/SolanaNetworkPlugin.cs rename to plugins/network-plugins/NftFaucet.NetworkPlugins.Solana/SolanaNetworkPlugin.cs index 2312a3a..fd39577 100644 --- a/NftFaucet/Plugins/NetworkPlugins/Solana/SolanaNetworkPlugin.cs +++ b/plugins/network-plugins/NftFaucet.NetworkPlugins.Solana/SolanaNetworkPlugin.cs @@ -1,6 +1,8 @@ -using NftFaucet.Plugins.NetworkPlugins.Solana.Networks; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.NetworkPlugins.Solana.Networks; +using NftFaucet.Plugins.Models.Abstraction; -namespace NftFaucet.Plugins.NetworkPlugins.Solana; +namespace NftFaucet.NetworkPlugins.Solana; public class SolanaNetworkPlugin : INetworkPlugin { diff --git a/plugins/provider-plugins/NftFaucet.ProviderPlugins.EthereumKeygen/EthereumKey.cs b/plugins/provider-plugins/NftFaucet.ProviderPlugins.EthereumKeygen/EthereumKey.cs new file mode 100644 index 0000000..f1d139e --- /dev/null +++ b/plugins/provider-plugins/NftFaucet.ProviderPlugins.EthereumKeygen/EthereumKey.cs @@ -0,0 +1,35 @@ +using Cryptography.ECDSA; +using Nethereum.Hex.HexConvertors.Extensions; +using Nethereum.Util; + +namespace NftFaucet.ProviderPlugins.EthereumKeygen; + +public class EthereumKey +{ + public string PrivateKey { get; } + public string Address { get; } + + public EthereumKey(string privateKey) + { + PrivateKey = privateKey ?? throw new ArgumentNullException(nameof(privateKey)); + Address = GetAddressFromPrivateKey(privateKey); + } + + public static EthereumKey GenerateNew() + { + var privateKeyBytes = Secp256K1Manager.GenerateRandomKey(); + var privateKeyString = privateKeyBytes.ToHex(prefix: false); + return new EthereumKey(privateKeyString); + } + + public static string GetAddressFromPrivateKey(string privateKey) + { + var privateKeyBytes = privateKey.HexToByteArray(); + var publicKeyBytes = Secp256K1Manager.GetPublicKey(privateKeyBytes, false).Skip(1).ToArray(); + var publicKeyHash = new Sha3Keccack().CalculateHash(publicKeyBytes); + var addressBytes = new byte[publicKeyHash.Length - 12]; + Array.Copy(publicKeyHash, 12, addressBytes, 0, publicKeyHash.Length - 12); + var addressString = new AddressUtil().ConvertToChecksumAddress(addressBytes.ToHex()); + return addressString; + } +} diff --git a/NftFaucet/Plugins/ProviderPlugins/Keygen/Providers/EthereumKeygenProvider.cs b/plugins/provider-plugins/NftFaucet.ProviderPlugins.EthereumKeygen/EthereumKeygenProvider.cs similarity index 77% rename from NftFaucet/Plugins/ProviderPlugins/Keygen/Providers/EthereumKeygenProvider.cs rename to plugins/provider-plugins/NftFaucet.ProviderPlugins.EthereumKeygen/EthereumKeygenProvider.cs index 423c6e7..2bee494 100644 --- a/NftFaucet/Plugins/ProviderPlugins/Keygen/Providers/EthereumKeygenProvider.cs +++ b/plugins/provider-plugins/NftFaucet.ProviderPlugins.EthereumKeygen/EthereumKeygenProvider.cs @@ -6,13 +6,16 @@ using Nethereum.RPC.Eth.DTOs; using Nethereum.RPC.TransactionTypes; using Nethereum.Web3; using Nethereum.Web3.Accounts; -using NftFaucet.Components.CardList; -using NftFaucet.Models; -using NftFaucet.Models.Function; -using NftFaucet.Plugins.NetworkPlugins; -using NftFaucet.Utils; +using NftFaucet.Domain.Function; +using NftFaucet.Domain.Models; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Domain.Models.Enums; +using NftFaucet.Domain.Utils; +using NftFaucet.Plugins.Models; +using NftFaucet.Plugins.Models.Abstraction; +using NftFaucet.Plugins.Models.Enums; -namespace NftFaucet.Plugins.ProviderPlugins.Keygen.Providers; +namespace NftFaucet.ProviderPlugins.EthereumKeygen; public class EthereumKeygenProvider : IProvider { @@ -28,33 +31,33 @@ public class EthereumKeygenProvider : IProvider public Task InitializeAsync(IServiceProvider serviceProvider) => Task.CompletedTask; - public CardListItemProperty[] GetProperties() - => new CardListItemProperty[] + public Property[] GetProperties() + => new[] { - new CardListItemProperty{ Name = "Address", Value = Key?.Address ?? "" }, + new Property{ Name = "Address", Value = Key?.Address ?? "" }, }; - public CardListItemConfiguration GetConfiguration() + public ConfigurationItem[] GetConfigurationItems() { - var privateKeyInput = new CardListItemConfigurationObject + var privateKeyInput = new ConfigurationItem { - Type = CardListItemConfigurationObjectType.Input, + DisplayType = UiDisplayType.Input, Name = "Private key", Placeholder = "", Value = Key?.PrivateKey ?? string.Empty, IsDisabled = true, }; - var addressInput = new CardListItemConfigurationObject + var addressInput = new ConfigurationItem { - Type = CardListItemConfigurationObjectType.Input, + DisplayType = UiDisplayType.Input, Name = "Address", Placeholder = "", Value = Key?.Address ?? string.Empty, IsDisabled = true, }; - var button = new CardListItemConfigurationObject + var button = new ConfigurationItem { - Type = CardListItemConfigurationObjectType.Button, + DisplayType = UiDisplayType.Button, Name = "Generate new keys", Placeholder = "", ClickAction = () => @@ -64,20 +67,18 @@ public class EthereumKeygenProvider : IProvider addressInput.Value = generatedKey.Address; }, }; - return new CardListItemConfiguration - { - Objects = new[] { privateKeyInput, addressInput, button }, - ConfigureAction = objects => - { - var keyResult = ResultWrapper.Wrap(() => new EthereumKey(objects[0].Value)); - if (keyResult.IsFailure) - return Task.FromResult(Result.Failure(keyResult.Error)); + return new[] { privateKeyInput, addressInput, button }; + } - Key = keyResult.Value; - IsConfigured = true; - return Task.FromResult(Result.Success()); - }, - }; + public Task Configure(ConfigurationItem[] configurationItems) + { + var keyResult = ResultWrapper.Wrap(() => new EthereumKey(configurationItems[0].Value)); + if (keyResult.IsFailure) + return Task.FromResult(Result.Failure(keyResult.Error)); + + Key = keyResult.Value; + IsConfigured = true; + return Task.FromResult(Result.Success()); } public bool IsNetworkSupported(INetwork network) @@ -94,11 +95,7 @@ public class EthereumKeygenProvider : IProvider var web3 = new Web3(network.PublicRpcUrl.OriginalString); var hexBalance = await web3.Eth.GetBalance.SendRequestAsync(Key.Address); var balance = hexBalance.Value; - return new Balance - { - Amount = balance, - Currency = "wei", - }; + return new Balance(balance, "wei"); } public Task GetNetwork(IReadOnlyCollection allKnownNetworks, INetwork selectedNetwork) diff --git a/plugins/provider-plugins/NftFaucet.ProviderPlugins.EthereumKeygen/NftFaucet.ProviderPlugins.EthereumKeygen.csproj b/plugins/provider-plugins/NftFaucet.ProviderPlugins.EthereumKeygen/NftFaucet.ProviderPlugins.EthereumKeygen.csproj new file mode 100644 index 0000000..90f846d --- /dev/null +++ b/plugins/provider-plugins/NftFaucet.ProviderPlugins.EthereumKeygen/NftFaucet.ProviderPlugins.EthereumKeygen.csproj @@ -0,0 +1,17 @@ + + + + net6.0 + enable + disable + + + + + + + + + + + diff --git a/NftFaucet/Plugins/ProviderPlugins/Metamask/Providers/MetamaskProvider.cs b/plugins/provider-plugins/NftFaucet.ProviderPlugins.Metamask/MetamaskProvider.cs similarity index 77% rename from NftFaucet/Plugins/ProviderPlugins/Metamask/Providers/MetamaskProvider.cs rename to plugins/provider-plugins/NftFaucet.ProviderPlugins.Metamask/MetamaskProvider.cs index 6d5bea2..a935dc6 100644 --- a/NftFaucet/Plugins/ProviderPlugins/Metamask/Providers/MetamaskProvider.cs +++ b/plugins/provider-plugins/NftFaucet.ProviderPlugins.Metamask/MetamaskProvider.cs @@ -1,12 +1,15 @@ using CSharpFunctionalExtensions; using Ethereum.MetaMask.Blazor; -using NftFaucet.Components.CardList; -using NftFaucet.Models; -using NftFaucet.Models.Function; -using NftFaucet.Plugins.NetworkPlugins; -using NftFaucet.Services; +using Microsoft.Extensions.DependencyInjection; +using NftFaucet.Domain.Function; +using NftFaucet.Domain.Models; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Domain.Models.Enums; +using NftFaucet.Plugins.Models; +using NftFaucet.Plugins.Models.Abstraction; +using NftFaucet.Plugins.Models.Enums; -namespace NftFaucet.Plugins.ProviderPlugins.Metamask.Providers; +namespace NftFaucet.ProviderPlugins.Metamask; public class MetamaskProvider : IProvider { @@ -19,7 +22,6 @@ public class MetamaskProvider : IProvider public bool IsConfigured => IsMetamaskAvailable && IsSiteConnected && !string.IsNullOrEmpty(Address); private IMetaMaskService MetaMaskService { get; set; } - private RefreshMediator RefreshMediator { get; set; } private bool IsMetamaskAvailable { get; set; } private bool IsSiteConnected { get; set; } @@ -29,7 +31,6 @@ public class MetamaskProvider : IProvider public async Task InitializeAsync(IServiceProvider serviceProvider) { MetaMaskService = serviceProvider.GetRequiredService(); - RefreshMediator = serviceProvider.GetRequiredService(); IsMetamaskAvailable = await MetaMaskService.IsMetaMaskAvailableAsync(); if (IsMetamaskAvailable) @@ -46,16 +47,16 @@ public class MetamaskProvider : IProvider IsInitialized = true; } - public CardListItemProperty[] GetProperties() + public Property[] GetProperties() { - var list = new List(3) + var list = new List(3) { - new CardListItemProperty + new Property { Name = "Installed", Value = IsMetamaskAvailable ? "YES" : "NO", ValueColor = IsMetamaskAvailable ? "green" : "red" }, - new CardListItemProperty + new Property { Name = "Connected", Value = IsSiteConnected ? "YES" : "NO", ValueColor = IsSiteConnected ? "green" : "red" @@ -63,7 +64,7 @@ public class MetamaskProvider : IProvider }; if (!string.IsNullOrEmpty(Address)) { - list.Add(new CardListItemProperty + list.Add(new Property { Name = "Address", Value = Address, @@ -73,27 +74,27 @@ public class MetamaskProvider : IProvider return list.ToArray(); } - public CardListItemConfiguration GetConfiguration() + public ConfigurationItem[] GetConfigurationItems() { - var addressInput = new CardListItemConfigurationObject + var addressInput = new ConfigurationItem { - Type = CardListItemConfigurationObjectType.Input, + DisplayType = UiDisplayType.Input, Name = "Address", Placeholder = "", Value = Address, IsDisabled = true, }; - var chainInput = new CardListItemConfigurationObject + var chainInput = new ConfigurationItem { - Type = CardListItemConfigurationObjectType.Input, + DisplayType = UiDisplayType.Input, Name = "ChainId", Placeholder = "", Value = ChainId, IsDisabled = true, }; - var connectButton = new CardListItemConfigurationObject + var connectButton = new ConfigurationItem { - Type = CardListItemConfigurationObjectType.Button, + DisplayType = UiDisplayType.Button, Name = "Connect", ClickAction = async () => { @@ -114,19 +115,15 @@ public class MetamaskProvider : IProvider ChainId = null; chainInput.Value = null; } + }, + }; + return new[] { addressInput, chainInput, connectButton }; + } - RefreshMediator.NotifyStateHasChangedSafe(); - }, - }; - return new CardListItemConfiguration - { - Objects = new[] { addressInput, chainInput, connectButton }, - ConfigureAction = objects => - { - // IsConfigured = true; - return Task.FromResult(Result.Success()); - }, - }; + public Task Configure(ConfigurationItem[] configurationItems) + { + // IsConfigured = true; + return Task.FromResult(Result.Success()); } public bool IsNetworkSupported(INetwork network) @@ -141,11 +138,7 @@ public class MetamaskProvider : IProvider return null; var balance = await MetaMaskService.GetBalanceAsync(); - return new Balance - { - Amount = balance, - Currency = "wei", - }; + return new Balance(balance, "wei"); } public Task GetNetwork(IReadOnlyCollection allKnownNetworks, INetwork selectedNetwork) diff --git a/plugins/provider-plugins/NftFaucet.ProviderPlugins.Metamask/NftFaucet.ProviderPlugins.Metamask.csproj b/plugins/provider-plugins/NftFaucet.ProviderPlugins.Metamask/NftFaucet.ProviderPlugins.Metamask.csproj new file mode 100644 index 0000000..ac8d5c2 --- /dev/null +++ b/plugins/provider-plugins/NftFaucet.ProviderPlugins.Metamask/NftFaucet.ProviderPlugins.Metamask.csproj @@ -0,0 +1,17 @@ + + + + net6.0 + enable + disable + + + + + + + + + + + diff --git a/plugins/provider-plugins/NftFaucet.ProviderPlugins.Phantom/NftFaucet.ProviderPlugins.Phantom.csproj b/plugins/provider-plugins/NftFaucet.ProviderPlugins.Phantom/NftFaucet.ProviderPlugins.Phantom.csproj new file mode 100644 index 0000000..f7c6f35 --- /dev/null +++ b/plugins/provider-plugins/NftFaucet.ProviderPlugins.Phantom/NftFaucet.ProviderPlugins.Phantom.csproj @@ -0,0 +1,13 @@ + + + + net6.0 + enable + disable + + + + + + + diff --git a/NftFaucet/Plugins/ProviderPlugins/Phantom/Providers/PhantomProvider.cs b/plugins/provider-plugins/NftFaucet.ProviderPlugins.Phantom/PhantomProvider.cs similarity index 54% rename from NftFaucet/Plugins/ProviderPlugins/Phantom/Providers/PhantomProvider.cs rename to plugins/provider-plugins/NftFaucet.ProviderPlugins.Phantom/PhantomProvider.cs index 29bb1f2..a728078 100644 --- a/NftFaucet/Plugins/ProviderPlugins/Phantom/Providers/PhantomProvider.cs +++ b/plugins/provider-plugins/NftFaucet.ProviderPlugins.Phantom/PhantomProvider.cs @@ -1,9 +1,11 @@ using CSharpFunctionalExtensions; -using NftFaucet.Components.CardList; -using NftFaucet.Models; -using NftFaucet.Plugins.NetworkPlugins; +using NftFaucet.Domain.Models; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Domain.Models.Enums; +using NftFaucet.Plugins.Models; +using NftFaucet.Plugins.Models.Abstraction; -namespace NftFaucet.Plugins.ProviderPlugins.Phantom.Providers; +namespace NftFaucet.ProviderPlugins.Phantom; public class PhantomProvider : IProvider { @@ -18,37 +20,28 @@ public class PhantomProvider : IProvider public Task InitializeAsync(IServiceProvider serviceProvider) => Task.CompletedTask; - public CardListItemProperty[] GetProperties() - => new CardListItemProperty[] + public Property[] GetProperties() + => new Property[] { - new CardListItemProperty{ Name = "Installed", Value = "YES" }, - new CardListItemProperty{ Name = "Connected", Value = IsConfigured ? "YES" : "NO" }, + new Property{ Name = "Installed", Value = "YES" }, + new Property{ Name = "Connected", Value = IsConfigured ? "YES" : "NO" }, }; - public CardListItemConfiguration GetConfiguration() - => new CardListItemConfiguration - { - Objects = new[] - { - new CardListItemConfigurationObject - { - Type = CardListItemConfigurationObjectType.Button, - Name = "Connect", - ClickAction = () => { }, - } - }, - ConfigureAction = objects => - { - IsConfigured = true; - return Task.FromResult(Result.Success()); - }, - }; + public ConfigurationItem[] GetConfigurationItems() + => Array.Empty(); + + public Task Configure(ConfigurationItem[] configurationItems) + { + throw new NotImplementedException(); + } public bool IsNetworkSupported(INetwork network) => network?.Type == NetworkType.Solana; public Task GetAddress() - => throw new NotImplementedException(); + { + throw new NotImplementedException(); + } public Task GetBalance(INetwork network) { @@ -60,11 +53,6 @@ public class PhantomProvider : IProvider throw new NotImplementedException(); } - public Task EnsureNetworkMatches(INetwork network) - { - throw new NotImplementedException(); - } - public Task Mint(MintRequest mintRequest) { throw new NotImplementedException(); diff --git a/plugins/provider-plugins/NftFaucet.ProviderPlugins.SolanaKeygen/NftFaucet.ProviderPlugins.SolanaKeygen.csproj b/plugins/provider-plugins/NftFaucet.ProviderPlugins.SolanaKeygen/NftFaucet.ProviderPlugins.SolanaKeygen.csproj new file mode 100644 index 0000000..2a9c51a --- /dev/null +++ b/plugins/provider-plugins/NftFaucet.ProviderPlugins.SolanaKeygen/NftFaucet.ProviderPlugins.SolanaKeygen.csproj @@ -0,0 +1,17 @@ + + + + net6.0 + enable + disable + + + + + + + + + + + diff --git a/NftFaucet/Models/SolanaKey.cs b/plugins/provider-plugins/NftFaucet.ProviderPlugins.SolanaKeygen/SolanaKey.cs similarity index 96% rename from NftFaucet/Models/SolanaKey.cs rename to plugins/provider-plugins/NftFaucet.ProviderPlugins.SolanaKeygen/SolanaKey.cs index ef36954..3373d76 100644 --- a/NftFaucet/Models/SolanaKey.cs +++ b/plugins/provider-plugins/NftFaucet.ProviderPlugins.SolanaKeygen/SolanaKey.cs @@ -1,7 +1,7 @@ using Solnet.Wallet; using Solnet.Wallet.Bip39; -namespace NftFaucet.Models; +namespace NftFaucet.ProviderPlugins.SolanaKeygen; public class SolanaKey { diff --git a/NftFaucet/Plugins/ProviderPlugins/Keygen/Providers/SolanaKeygenProvider.cs b/plugins/provider-plugins/NftFaucet.ProviderPlugins.SolanaKeygen/SolanaKeygenProvider.cs similarity index 82% rename from NftFaucet/Plugins/ProviderPlugins/Keygen/Providers/SolanaKeygenProvider.cs rename to plugins/provider-plugins/NftFaucet.ProviderPlugins.SolanaKeygen/SolanaKeygenProvider.cs index d4285dd..edf7faa 100644 --- a/NftFaucet/Plugins/ProviderPlugins/Keygen/Providers/SolanaKeygenProvider.cs +++ b/plugins/provider-plugins/NftFaucet.ProviderPlugins.SolanaKeygen/SolanaKeygenProvider.cs @@ -1,11 +1,13 @@ using System.Numerics; using System.Text; using CSharpFunctionalExtensions; -using Newtonsoft.Json; -using NftFaucet.Components.CardList; -using NftFaucet.Models; -using NftFaucet.Plugins.NetworkPlugins; -using NftFaucet.Utils; +using NftFaucet.Domain.Models; +using NftFaucet.Domain.Models.Abstraction; +using NftFaucet.Domain.Models.Enums; +using NftFaucet.Domain.Utils; +using NftFaucet.Plugins.Models; +using NftFaucet.Plugins.Models.Abstraction; +using NftFaucet.Plugins.Models.Enums; using Solana.Metaplex; using Solnet.Programs; using Solnet.Rpc; @@ -14,7 +16,7 @@ using Solnet.Rpc.Models; using Solnet.Rpc.Utilities; using Solnet.Wallet; -namespace NftFaucet.Plugins.ProviderPlugins.Keygen.Providers; +namespace NftFaucet.ProviderPlugins.SolanaKeygen; public class SolanaKeygenProvider : IProvider { @@ -30,48 +32,41 @@ public class SolanaKeygenProvider : IProvider public Task InitializeAsync(IServiceProvider serviceProvider) => Task.CompletedTask; - public Task Configure(CardListItemConfigurationObject[] items) - { - Key = SolanaKey.GenerateNew(); - IsConfigured = true; - return Task.CompletedTask; - } - - public CardListItemProperty[] GetProperties() - => new CardListItemProperty[] + public Property[] GetProperties() + => new[] { - new CardListItemProperty{ Name = "Address", Value = Key?.Address ?? "" }, + new Property{ Name = "Address", Value = Key?.Address ?? "" }, }; - public CardListItemConfiguration GetConfiguration() + public ConfigurationItem[] GetConfigurationItems() { - var mnemonicInput = new CardListItemConfigurationObject + var mnemonicInput = new ConfigurationItem { - Type = CardListItemConfigurationObjectType.Input, + DisplayType = UiDisplayType.Input, Name = "Mnemonic phrase", Placeholder = "", Value = Key?.MnemonicPhrase ?? string.Empty, IsDisabled = true, }; - var privateKeyInput = new CardListItemConfigurationObject + var privateKeyInput = new ConfigurationItem { - Type = CardListItemConfigurationObjectType.Input, + DisplayType = UiDisplayType.Input, Name = "Private key", Placeholder = "", Value = Key?.PrivateKey ?? string.Empty, IsDisabled = true, }; - var addressInput = new CardListItemConfigurationObject + var addressInput = new ConfigurationItem { - Type = CardListItemConfigurationObjectType.Input, + DisplayType = UiDisplayType.Input, Name = "Address", Placeholder = "", Value = Key?.Address ?? string.Empty, IsDisabled = true, }; - var button = new CardListItemConfigurationObject + var button = new ConfigurationItem { - Type = CardListItemConfigurationObjectType.Button, + DisplayType = UiDisplayType.Button, Name = "Generate new keys", Placeholder = "", ClickAction = () => @@ -82,20 +77,18 @@ public class SolanaKeygenProvider : IProvider addressInput.Value = generatedKey.Address; }, }; - return new CardListItemConfiguration - { - Objects = new[] { mnemonicInput, privateKeyInput, addressInput, button }, - ConfigureAction = objects => - { - var keyResult = ResultWrapper.Wrap(() => new SolanaKey(objects[0].Value)); - if (keyResult.IsFailure) - return Task.FromResult(Result.Failure(keyResult.Error)); + return new[] { mnemonicInput, privateKeyInput, addressInput, button }; + } - Key = keyResult.Value; - IsConfigured = true; - return Task.FromResult(Result.Success()); - }, - }; + public Task Configure(ConfigurationItem[] configurationItems) + { + var keyResult = ResultWrapper.Wrap(() => new SolanaKey(configurationItems[0].Value)); + if (keyResult.IsFailure) + return Task.FromResult(Result.Failure(keyResult.Error)); + + Key = keyResult.Value; + IsConfigured = true; + return Task.FromResult(Result.Success()); } public bool IsNetworkSupported(INetwork network) @@ -115,11 +108,7 @@ public class SolanaKeygenProvider : IProvider return null; var balance = new BigInteger(balanceResult.Result.Value); - return new Balance - { - Amount = balance, - Currency = "lamport", - }; + return new Balance(balance, "lamport"); } public Task GetNetwork(IReadOnlyCollection allKnownNetworks, INetwork selectedNetwork) diff --git a/NftFaucet/Plugins/UploadPlugins/Crust/ICrustPinApiClient.cs b/plugins/upload-plugins/NftFaucet.UploadPlugins.Crust/ApiClients/ICrustPinApiClient.cs similarity index 74% rename from NftFaucet/Plugins/UploadPlugins/Crust/ICrustPinApiClient.cs rename to plugins/upload-plugins/NftFaucet.UploadPlugins.Crust/ApiClients/ICrustPinApiClient.cs index c7ac8a2..c4b5c86 100644 --- a/NftFaucet/Plugins/UploadPlugins/Crust/ICrustPinApiClient.cs +++ b/plugins/upload-plugins/NftFaucet.UploadPlugins.Crust/ApiClients/ICrustPinApiClient.cs @@ -1,6 +1,7 @@ +using NftFaucet.UploadPlugins.Crust.Models; using RestEase; -namespace NftFaucet.Plugins.UploadPlugins.Crust; +namespace NftFaucet.UploadPlugins.Crust.ApiClients; [BaseAddress("https://pin.crustcode.com")] public interface ICrustPinApiClient diff --git a/NftFaucet/Plugins/UploadPlugins/Crust/ICrustUploadApiClient.cs b/plugins/upload-plugins/NftFaucet.UploadPlugins.Crust/ApiClients/ICrustUploadApiClient.cs similarity index 77% rename from NftFaucet/Plugins/UploadPlugins/Crust/ICrustUploadApiClient.cs rename to plugins/upload-plugins/NftFaucet.UploadPlugins.Crust/ApiClients/ICrustUploadApiClient.cs index 9e00b02..d6e29d9 100644 --- a/NftFaucet/Plugins/UploadPlugins/Crust/ICrustUploadApiClient.cs +++ b/plugins/upload-plugins/NftFaucet.UploadPlugins.Crust/ApiClients/ICrustUploadApiClient.cs @@ -1,7 +1,7 @@ -using NftFaucet.Plugins.UploadPlugins.Infura; +using NftFaucet.UploadPlugins.Crust.Models; using RestEase; -namespace NftFaucet.Plugins.UploadPlugins.Crust; +namespace NftFaucet.UploadPlugins.Crust.ApiClients; [BaseAddress("https://gw.crustapps.net")] public interface ICrustUploadApiClient diff --git a/NftFaucet/Plugins/UploadPlugins/Crust/Uploaders/CrustUploader.cs b/plugins/upload-plugins/NftFaucet.UploadPlugins.Crust/CrustUploader.cs similarity index 72% rename from NftFaucet/Plugins/UploadPlugins/Crust/Uploaders/CrustUploader.cs rename to plugins/upload-plugins/NftFaucet.UploadPlugins.Crust/CrustUploader.cs index fc279b5..a1c2a10 100644 --- a/NftFaucet/Plugins/UploadPlugins/Crust/Uploaders/CrustUploader.cs +++ b/plugins/upload-plugins/NftFaucet.UploadPlugins.Crust/CrustUploader.cs @@ -1,11 +1,13 @@ using System.Text; using CSharpFunctionalExtensions; using Nethereum.Signer; -using NftFaucet.Components.CardList; -using NftFaucet.Models; +using NftFaucet.Plugins.Models; +using NftFaucet.Plugins.Models.Abstraction; +using NftFaucet.UploadPlugins.Crust.ApiClients; +using NftFaucet.UploadPlugins.Crust.Models; using RestEase; -namespace NftFaucet.Plugins.UploadPlugins.Crust.Uploaders; +namespace NftFaucet.UploadPlugins.Crust; public class CrustUploader : IUploader { @@ -18,13 +20,16 @@ public class CrustUploader : IUploader private string AuthHeader { get; set; } - public CardListItemProperty[] GetProperties() - => new[] {new CardListItemProperty {Value = "Very slow, but zero-config"}}; + public Property[] GetProperties() + => new[] {new Property {Value = "Very slow, but zero-config"}}; - public CardListItemConfiguration GetConfiguration() - => null; + public ConfigurationItem[] GetConfigurationItems() + => Array.Empty(); - public async Task> Upload(string fileName, string fileType, byte[] fileData) + public Task Configure(ConfigurationItem[] configurationItems) + => Task.FromResult(Result.Success()); + + public async Task Upload(string fileName, string fileType, byte[] fileData) { var fileUploadRequest = ToMultipartContent(fileName, fileType, fileData); var uploadClient = RestClient.For(); @@ -34,13 +39,13 @@ public class CrustUploader : IUploader using var uploadFileResponse = await uploadClient.UploadFile(fileUploadRequest); if (!uploadFileResponse.ResponseMessage.IsSuccessStatusCode) { - return Result.Failure($"Status: {(int) uploadFileResponse.ResponseMessage.StatusCode}. Reason: {uploadFileResponse.ResponseMessage.ReasonPhrase}"); + throw new Exception($"Status: {(int) uploadFileResponse.ResponseMessage.StatusCode}. Reason: {uploadFileResponse.ResponseMessage.ReasonPhrase}"); } var uploadResponse = uploadFileResponse.GetContent(); if (string.IsNullOrEmpty(uploadResponse?.Hash)) { - return Result.Failure($"Unexpected response: {uploadFileResponse.StringContent}"); + throw new Exception($"Unexpected response: {uploadFileResponse.StringContent}"); } var pinningClient = RestClient.For(); @@ -53,7 +58,7 @@ public class CrustUploader : IUploader using var pinningResponse = await pinningClient.PinFile(pinRequest); if (!pinningResponse.IsSuccessStatusCode) { - return Result.Failure($"Status: {(int) pinningResponse.StatusCode}. Reason: {pinningResponse.ReasonPhrase}"); + throw new Exception($"Status: {(int) pinningResponse.StatusCode}. Reason: {pinningResponse.ReasonPhrase}"); } return new Uri("https://gw.crustapps.net/ipfs/" + uploadResponse.Hash); diff --git a/NftFaucet/Models/EthereumKey.cs b/plugins/upload-plugins/NftFaucet.UploadPlugins.Crust/EthereumKey.cs similarity index 96% rename from NftFaucet/Models/EthereumKey.cs rename to plugins/upload-plugins/NftFaucet.UploadPlugins.Crust/EthereumKey.cs index 6feec7b..3bee3a7 100644 --- a/NftFaucet/Models/EthereumKey.cs +++ b/plugins/upload-plugins/NftFaucet.UploadPlugins.Crust/EthereumKey.cs @@ -2,7 +2,7 @@ using Cryptography.ECDSA; using Nethereum.Hex.HexConvertors.Extensions; using Nethereum.Util; -namespace NftFaucet.Models; +namespace NftFaucet.UploadPlugins.Crust; public class EthereumKey { diff --git a/NftFaucet/Plugins/UploadPlugins/Crust/PinRequest.cs b/plugins/upload-plugins/NftFaucet.UploadPlugins.Crust/Models/PinRequest.cs similarity index 67% rename from NftFaucet/Plugins/UploadPlugins/Crust/PinRequest.cs rename to plugins/upload-plugins/NftFaucet.UploadPlugins.Crust/Models/PinRequest.cs index 7922c90..196fe8d 100644 --- a/NftFaucet/Plugins/UploadPlugins/Crust/PinRequest.cs +++ b/plugins/upload-plugins/NftFaucet.UploadPlugins.Crust/Models/PinRequest.cs @@ -1,4 +1,4 @@ -namespace NftFaucet.Plugins.UploadPlugins.Crust; +namespace NftFaucet.UploadPlugins.Crust.Models; public class PinRequest { diff --git a/NftFaucet/Plugins/UploadPlugins/Infura/UploadResponse.cs b/plugins/upload-plugins/NftFaucet.UploadPlugins.Crust/Models/UploadResponse.cs similarity index 74% rename from NftFaucet/Plugins/UploadPlugins/Infura/UploadResponse.cs rename to plugins/upload-plugins/NftFaucet.UploadPlugins.Crust/Models/UploadResponse.cs index b3c3e69..838bead 100644 --- a/NftFaucet/Plugins/UploadPlugins/Infura/UploadResponse.cs +++ b/plugins/upload-plugins/NftFaucet.UploadPlugins.Crust/Models/UploadResponse.cs @@ -1,4 +1,4 @@ -namespace NftFaucet.Plugins.UploadPlugins.Infura; +namespace NftFaucet.UploadPlugins.Crust.Models; public class UploadResponse { diff --git a/plugins/upload-plugins/NftFaucet.UploadPlugins.Crust/NftFaucet.UploadPlugins.Crust.csproj b/plugins/upload-plugins/NftFaucet.UploadPlugins.Crust/NftFaucet.UploadPlugins.Crust.csproj new file mode 100644 index 0000000..17814c9 --- /dev/null +++ b/plugins/upload-plugins/NftFaucet.UploadPlugins.Crust/NftFaucet.UploadPlugins.Crust.csproj @@ -0,0 +1,18 @@ + + + + net6.0 + enable + disable + + + + + + + + + + + + diff --git a/NftFaucet/Plugins/UploadPlugins/Infura/IInfuraIpfsApiClient.cs b/plugins/upload-plugins/NftFaucet.UploadPlugins.Infura/ApiClients/IInfuraIpfsApiClient.cs similarity index 83% rename from NftFaucet/Plugins/UploadPlugins/Infura/IInfuraIpfsApiClient.cs rename to plugins/upload-plugins/NftFaucet.UploadPlugins.Infura/ApiClients/IInfuraIpfsApiClient.cs index 76a0f72..eee52f7 100644 --- a/NftFaucet/Plugins/UploadPlugins/Infura/IInfuraIpfsApiClient.cs +++ b/plugins/upload-plugins/NftFaucet.UploadPlugins.Infura/ApiClients/IInfuraIpfsApiClient.cs @@ -1,7 +1,8 @@ using System.Net.Http.Headers; +using NftFaucet.UploadPlugins.Infura.Models; using RestEase; -namespace NftFaucet.Plugins.UploadPlugins.Infura; +namespace NftFaucet.UploadPlugins.Infura.ApiClients; public interface IInfuraIpfsApiClient { diff --git a/NftFaucet/Plugins/UploadPlugins/Infura/Uploaders/InfuraUploader.cs b/plugins/upload-plugins/NftFaucet.UploadPlugins.Infura/InfuraUploader.cs similarity index 76% rename from NftFaucet/Plugins/UploadPlugins/Infura/Uploaders/InfuraUploader.cs rename to plugins/upload-plugins/NftFaucet.UploadPlugins.Infura/InfuraUploader.cs index c8b5868..9fa302c 100644 --- a/NftFaucet/Plugins/UploadPlugins/Infura/Uploaders/InfuraUploader.cs +++ b/plugins/upload-plugins/NftFaucet.UploadPlugins.Infura/InfuraUploader.cs @@ -1,10 +1,13 @@ using System.Net.Http.Headers; using System.Text; using CSharpFunctionalExtensions; -using NftFaucet.Components.CardList; +using NftFaucet.Plugins.Models; +using NftFaucet.Plugins.Models.Abstraction; +using NftFaucet.Plugins.Models.Enums; +using NftFaucet.UploadPlugins.Infura.ApiClients; using RestEase; -namespace NftFaucet.Plugins.UploadPlugins.Infura.Uploaders; +namespace NftFaucet.UploadPlugins.Infura; public class InfuraUploader : IUploader { @@ -20,61 +23,61 @@ public class InfuraUploader : IUploader private string ProjectSecret { get; set; } private Uri DedicatedGatewayUrl { get; set; } - public CardListItemProperty[] GetProperties() + public Property[] GetProperties() { - var properties = new List(); + var properties = new List(); if (IsConfigured) { if (!string.IsNullOrEmpty(ProjectId)) { - properties.Add(new CardListItemProperty {Name = "ProjectId", Value = ProjectId}); + properties.Add(new Property {Name = "ProjectId", Value = ProjectId}); } if (DedicatedGatewayUrl != null) { - properties.Add(new CardListItemProperty {Name = "DedicatedGatewayUrl", Value = DedicatedGatewayUrl.ToString()}); + properties.Add(new Property {Name = "DedicatedGatewayUrl", Value = DedicatedGatewayUrl.ToString()}); } } else { - properties.Add(new CardListItemProperty {Name = "Configured", Value = "NO", ValueColor = "red"}); + properties.Add(new Property {Name = "Configured", Value = "NO", ValueColor = "red"}); } return properties.ToArray(); } - public CardListItemConfiguration GetConfiguration() + public ConfigurationItem[] GetConfigurationItems() { - var projectIdInput = new CardListItemConfigurationObject + var projectIdInput = new ConfigurationItem { - Type = CardListItemConfigurationObjectType.Input, + DisplayType = UiDisplayType.Input, Name = "Project ID", Placeholder = "", Value = ProjectId, }; - var projectSecretInput = new CardListItemConfigurationObject + var projectSecretInput = new ConfigurationItem { - Type = CardListItemConfigurationObjectType.Input, + DisplayType = UiDisplayType.Input, Name = "API Key Secret", Placeholder = "", Value = ProjectSecret, }; - var gatewayUrlInput = new CardListItemConfigurationObject + var gatewayUrlInput = new ConfigurationItem { - Type = CardListItemConfigurationObjectType.Input, + DisplayType = UiDisplayType.Input, Name = "Dedicated gateway URL (OPTIONAL)", Placeholder = "https://.infura-ipfs.io", Value = DedicatedGatewayUrl?.OriginalString, }; - return new CardListItemConfiguration - { - Objects = new[] { projectIdInput, projectSecretInput, gatewayUrlInput }, - ConfigureAction = async objects => await TryConfigure(objects[0].Value, objects[1].Value, objects[2].Value), - }; + return new[] { projectIdInput, projectSecretInput, gatewayUrlInput }; } - public async Task TryConfigure(string projectId, string projectSecret, string dedicatedGatewayUrl) + public async Task Configure(ConfigurationItem[] configurationItems) { + var projectId = configurationItems[0].Value; + var projectSecret = configurationItems[1].Value; + var dedicatedGatewayUrl = configurationItems[2].Value; + if (string.IsNullOrEmpty(projectId)) { return Result.Failure("ProjectId is null or empty"); @@ -133,20 +136,20 @@ public class InfuraUploader : IUploader return Result.Success(); } - public async Task> Upload(string fileName, string fileType, byte[] fileData) + public async Task Upload(string fileName, string fileType, byte[] fileData) { var apiClient = GetInfuraClient(ProjectId, ProjectSecret); var fileUploadRequest = ToMultipartContent(fileName, fileType, fileData); using var response = await apiClient.UploadFile(fileUploadRequest); if (!response.ResponseMessage.IsSuccessStatusCode) { - return Result.Failure($"Status: {(int) response.ResponseMessage.StatusCode}. Reason: {response.ResponseMessage.ReasonPhrase}"); + throw new Exception($"Status: {(int) response.ResponseMessage.StatusCode}. Reason: {response.ResponseMessage.ReasonPhrase}"); } var uploadResponse = response.GetContent(); if (string.IsNullOrEmpty(uploadResponse?.Hash)) { - return Result.Failure($"Unexpected response: {response.StringContent}"); + throw new Exception($"Unexpected response: {response.StringContent}"); } if (DedicatedGatewayUrl != null) diff --git a/plugins/upload-plugins/NftFaucet.UploadPlugins.Infura/Models/UploadResponse.cs b/plugins/upload-plugins/NftFaucet.UploadPlugins.Infura/Models/UploadResponse.cs new file mode 100644 index 0000000..bf0caf8 --- /dev/null +++ b/plugins/upload-plugins/NftFaucet.UploadPlugins.Infura/Models/UploadResponse.cs @@ -0,0 +1,8 @@ +namespace NftFaucet.UploadPlugins.Infura.Models; + +public class UploadResponse +{ + public string Name { get; set; } + public string Hash { get; set; } + public string Size { get; set; } +} diff --git a/NftFaucet/Plugins/UploadPlugins/Infura/VersionResponse.cs b/plugins/upload-plugins/NftFaucet.UploadPlugins.Infura/Models/VersionResponse.cs similarity index 82% rename from NftFaucet/Plugins/UploadPlugins/Infura/VersionResponse.cs rename to plugins/upload-plugins/NftFaucet.UploadPlugins.Infura/Models/VersionResponse.cs index a9dc67c..77d324f 100644 --- a/NftFaucet/Plugins/UploadPlugins/Infura/VersionResponse.cs +++ b/plugins/upload-plugins/NftFaucet.UploadPlugins.Infura/Models/VersionResponse.cs @@ -1,4 +1,4 @@ -namespace NftFaucet.Plugins.UploadPlugins.Infura; +namespace NftFaucet.UploadPlugins.Infura.Models; public class VersionResponse { diff --git a/plugins/upload-plugins/NftFaucet.UploadPlugins.Infura/NftFaucet.UploadPlugins.Infura.csproj b/plugins/upload-plugins/NftFaucet.UploadPlugins.Infura/NftFaucet.UploadPlugins.Infura.csproj new file mode 100644 index 0000000..f1b3c5e --- /dev/null +++ b/plugins/upload-plugins/NftFaucet.UploadPlugins.Infura/NftFaucet.UploadPlugins.Infura.csproj @@ -0,0 +1,17 @@ + + + + net6.0 + enable + disable + + + + + + + + + + + diff --git a/plugins/upload-plugins/NftFaucet.UploadPlugins.NftStorage/NftFaucet.UploadPlugins.NftStorage.csproj b/plugins/upload-plugins/NftFaucet.UploadPlugins.NftStorage/NftFaucet.UploadPlugins.NftStorage.csproj new file mode 100644 index 0000000..f7c6f35 --- /dev/null +++ b/plugins/upload-plugins/NftFaucet.UploadPlugins.NftStorage/NftFaucet.UploadPlugins.NftStorage.csproj @@ -0,0 +1,13 @@ + + + + net6.0 + enable + disable + + + + + + + diff --git a/NftFaucet/Plugins/UploadPlugins/NftStorage/Uploaders/NftStorageUploader.cs b/plugins/upload-plugins/NftFaucet.UploadPlugins.NftStorage/NftStorageUploader.cs similarity index 55% rename from NftFaucet/Plugins/UploadPlugins/NftStorage/Uploaders/NftStorageUploader.cs rename to plugins/upload-plugins/NftFaucet.UploadPlugins.NftStorage/NftStorageUploader.cs index 37e9532..090e08b 100644 --- a/NftFaucet/Plugins/UploadPlugins/NftStorage/Uploaders/NftStorageUploader.cs +++ b/plugins/upload-plugins/NftFaucet.UploadPlugins.NftStorage/NftStorageUploader.cs @@ -1,7 +1,8 @@ using CSharpFunctionalExtensions; -using NftFaucet.Components.CardList; +using NftFaucet.Plugins.Models; +using NftFaucet.Plugins.Models.Abstraction; -namespace NftFaucet.Plugins.UploadPlugins.NftStorage.Uploaders; +namespace NftFaucet.UploadPlugins.NftStorage; public class NftStorageUploader : IUploader { @@ -12,13 +13,18 @@ public class NftStorageUploader : IUploader public bool IsSupported { get; } = false; public bool IsConfigured { get; } = false; - public CardListItemProperty[] GetProperties() - => Array.Empty(); + public Property[] GetProperties() + => Array.Empty(); - public CardListItemConfiguration GetConfiguration() - => null; + public ConfigurationItem[] GetConfigurationItems() + => Array.Empty(); - public Task> Upload(string fileName, string fileType, byte[] fileData) + public Task Configure(ConfigurationItem[] configurationItems) + { + throw new NotImplementedException(); + } + + public Task Upload(string fileName, string fileType, byte[] fileData) { throw new NotImplementedException(); }