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
-
-
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
+
+
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();
}