Creating Currency API endpoint
This commit is contained in:
		
							parent
							
								
									9cf0b0b4fe
								
							
						
					
					
						commit
						c704a21787
					
				| @ -2,9 +2,11 @@ FSharp.Core | |||||||
| DSharpPlus | DSharpPlus | ||||||
| DSharpPlus.Interactivity | DSharpPlus.Interactivity | ||||||
| DSharpPlus.SlashCommands | DSharpPlus.SlashCommands | ||||||
|  | FSharp.Core | ||||||
| dotenv.net | dotenv.net | ||||||
| Npgsql.FSharp | Npgsql.FSharp | ||||||
| mixpanel-csharp | mixpanel-csharp | ||||||
| Solnet.Rpc | Solnet.Rpc | ||||||
| FsToolkit.ErrorHandling | FsToolkit.ErrorHandling | ||||||
| FSharp.Data | FSharp.Data | ||||||
|  | Newtonsoft.Json | ||||||
							
								
								
									
										118
									
								
								CurrencyAPI/Currency.fs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										118
									
								
								CurrencyAPI/Currency.fs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,118 @@ | |||||||
|  | module CurrencyAPI.App | ||||||
|  | 
 | ||||||
|  | open System | ||||||
|  | open System.IO | ||||||
|  | open Microsoft.AspNetCore.Builder | ||||||
|  | open Microsoft.AspNetCore.Hosting | ||||||
|  | open Microsoft.AspNetCore.Http | ||||||
|  | open Microsoft.Extensions.Hosting | ||||||
|  | open Microsoft.Extensions.Logging | ||||||
|  | open Microsoft.Extensions.DependencyInjection | ||||||
|  | open Giraffe | ||||||
|  | open dotenv.net | ||||||
|  | open Npgsql.FSharp | ||||||
|  | 
 | ||||||
|  | let prodEnv = DotEnv.Read(DotEnvOptions(envFilePaths = [ "../.prod.env"], overwriteExistingVars = false)) | ||||||
|  | 
 | ||||||
|  | let ( _ , connStr ) = prodEnv.TryGetValue("DATABASE_URL") | ||||||
|  | let ( _ , apiKey ) = prodEnv.TryGetValue("API_KEY") | ||||||
|  | 
 | ||||||
|  | let validateApiKey (ctx : HttpContext) = | ||||||
|  |     match ctx.TryGetRequestHeader "X-API-Key" with | ||||||
|  |     | Some key -> apiKey.Equals key | ||||||
|  |     | None     -> false | ||||||
|  |      | ||||||
|  | let accessDenied = setStatusCode 401 >=> text "Access Denied" | ||||||
|  | let requiresApiKey = authorizeRequest validateApiKey accessDenied | ||||||
|  | 
 | ||||||
|  | let getCurrentBalance (discordId : string) = | ||||||
|  |     task { | ||||||
|  |         let! amounts = | ||||||
|  |             connStr | ||||||
|  |             |> Sql.connect | ||||||
|  |             |> Sql.parameters [ "did" , Sql.string discordId ] | ||||||
|  |             |> Sql.query """SELECT gbt FROM "user" WHERE discord_id = @did""" | ||||||
|  |             |> Sql.executeAsync (fun r -> r.int "gbt") | ||||||
|  |         match amounts with | ||||||
|  |         | []   -> return Error "User not found" | ||||||
|  |         | a::_ -> return Ok a | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | let get (discordId : string) : HttpHandler =  | ||||||
|  |     fun (next : HttpFunc) (ctx : HttpContext) -> | ||||||
|  |         task { | ||||||
|  |             try | ||||||
|  |                 match! getCurrentBalance discordId with | ||||||
|  |                 | Ok amount -> return! json {| Amount = amount |} next ctx | ||||||
|  |                 | Error e -> return! RequestErrors.notFound (json {| Error = e |}) next ctx | ||||||
|  |             with ex -> | ||||||
|  |                 return! ServerErrors.internalError (json {| Error = ex.Message |}) next ctx | ||||||
|  |         } | ||||||
|  |          | ||||||
|  | let modify sign (discordId : string) : HttpHandler =  | ||||||
|  |     fun (next : HttpFunc) (ctx : HttpContext) -> | ||||||
|  |         task { | ||||||
|  |             let! body = ctx.BindJsonAsync<{|Amount:int|}>() | ||||||
|  |             match! getCurrentBalance discordId with | ||||||
|  |             | Ok current -> | ||||||
|  |                 let amount = body.Amount * sign | ||||||
|  |                 if current + amount < 0 then | ||||||
|  |                     return! RequestErrors.badRequest (json {| Error = "Insufficient funds" |}) next ctx | ||||||
|  |                 else | ||||||
|  |                 try | ||||||
|  |                     let! _ = | ||||||
|  |                         connStr | ||||||
|  |                         |> Sql.connect | ||||||
|  |                         |> Sql.parameters [ "did" , Sql.string discordId ; "amount" , Sql.int amount ] | ||||||
|  |                         |> Sql.query """UPDATE "user" SET gbt = GREATEST(gbt + @amount, 0) WHERE discord_id = @did""" | ||||||
|  |                         |> Sql.executeNonQueryAsync | ||||||
|  |                     return! json {| NewBalance = current + amount |} next ctx | ||||||
|  |                 with ex -> return! RequestErrors.notFound (json {| Error = ex.Message |}) next ctx | ||||||
|  |             | Error e -> return! RequestErrors.notFound (json {| Error = e |}) next ctx | ||||||
|  |         } | ||||||
|  |          | ||||||
|  | let webApp = | ||||||
|  |     choose [ | ||||||
|  |         GET   >=> requiresApiKey >=> routef "/user/%s/balance" get | ||||||
|  |         PATCH >=> requiresApiKey >=> routef "/user/%s/balance/withdraw" (modify -1) | ||||||
|  |         PATCH >=> requiresApiKey >=> routef "/user/%s/balance/deposit" (modify +1) | ||||||
|  |         RequestErrors.NOT_FOUND "Not Found" ] | ||||||
|  | 
 | ||||||
|  | let errorHandler (ex : Exception) (logger : ILogger) = | ||||||
|  |     logger.LogError(ex, "An unhandled exception has occurred while executing the request.") | ||||||
|  |     clearResponse >=> setStatusCode 500 >=> text ex.Message | ||||||
|  | 
 | ||||||
|  | let configureApp (app : IApplicationBuilder) = | ||||||
|  |     let env = app.ApplicationServices.GetService<IWebHostEnvironment>() | ||||||
|  |     if env.IsDevelopment() then | ||||||
|  |         app.UseDeveloperExceptionPage() | ||||||
|  |     else | ||||||
|  |         app.UseGiraffeErrorHandler(errorHandler) | ||||||
|  |     |> ignore | ||||||
|  |     app.UseGiraffe(webApp) | ||||||
|  | 
 | ||||||
|  | let configureServices (services : IServiceCollection) = | ||||||
|  |     services.AddGiraffe() |> ignore | ||||||
|  | 
 | ||||||
|  | let configureLogging (builder : ILoggingBuilder) = | ||||||
|  |     builder.AddConsole() | ||||||
|  |            .AddDebug() |> ignore | ||||||
|  | 
 | ||||||
|  | [<EntryPoint>] | ||||||
|  | let main args = | ||||||
|  |     let contentRoot = Directory.GetCurrentDirectory() | ||||||
|  |     let webRoot     = Path.Combine(contentRoot, "WebRoot") | ||||||
|  |     Host.CreateDefaultBuilder(args) | ||||||
|  |         .ConfigureWebHostDefaults( | ||||||
|  |             fun webHostBuilder -> | ||||||
|  |                 webHostBuilder | ||||||
|  |                     .UseContentRoot(contentRoot) | ||||||
|  |                     .UseWebRoot(webRoot) | ||||||
|  |                     .ConfigureKestrel(fun opt -> opt.AddServerHeader <- false) | ||||||
|  |                     .Configure(Action<IApplicationBuilder> configureApp) | ||||||
|  |                     .ConfigureServices(configureServices) | ||||||
|  |                     .ConfigureLogging(configureLogging) | ||||||
|  |                     |> ignore) | ||||||
|  |         .Build() | ||||||
|  |         .Run() | ||||||
|  |     0 | ||||||
							
								
								
									
										19
									
								
								CurrencyAPI/CurrencyAPI.fsproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								CurrencyAPI/CurrencyAPI.fsproj
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,19 @@ | |||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <Project Sdk="Microsoft.NET.Sdk.Web"> | ||||||
|  |   <PropertyGroup> | ||||||
|  |     <TargetFramework>net6.0</TargetFramework> | ||||||
|  |     <AssemblyName>CurrencyAPI.App</AssemblyName> | ||||||
|  |     <EnableDefaultContentItems>false</EnableDefaultContentItems> | ||||||
|  |     <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> | ||||||
|  |   </PropertyGroup> | ||||||
|  |   <ItemGroup> | ||||||
|  |     <Compile Include="Currency.fs" /> | ||||||
|  |   </ItemGroup> | ||||||
|  |   <ItemGroup> | ||||||
|  |     <None Include="web.config" CopyToOutputDirectory="PreserveNewest" /> | ||||||
|  |     <Content Include="WebRoot\**\*"> | ||||||
|  |       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> | ||||||
|  |     </Content> | ||||||
|  |   </ItemGroup> | ||||||
|  |   <Import Project="..\.paket\Paket.Restore.targets" /> | ||||||
|  | </Project> | ||||||
							
								
								
									
										5
									
								
								CurrencyAPI/paket.references
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								CurrencyAPI/paket.references
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | |||||||
|  | FSharp.Data | ||||||
|  | FSharp.Core | ||||||
|  | dotenv.net | ||||||
|  | Npgsql.FSharp | ||||||
|  | Giraffe | ||||||
							
								
								
									
										9
									
								
								CurrencyAPI/web.config
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								CurrencyAPI/web.config
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | |||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <configuration> | ||||||
|  |   <system.webServer> | ||||||
|  |     <handlers> | ||||||
|  |       <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" /> | ||||||
|  |     </handlers> | ||||||
|  |     <aspNetCore processPath="dotnet" arguments="CurrencyAPI.dll" stdoutLogEnabled="false" stdoutLogFile="logs/stdout" /> | ||||||
|  |   </system.webServer> | ||||||
|  | </configuration> | ||||||
| @ -5,6 +5,8 @@ VisualStudioVersion = 16.0.30114.105 | |||||||
| MinimumVisualStudioVersion = 10.0.40219.1 | MinimumVisualStudioVersion = 10.0.40219.1 | ||||||
| Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Bot", "Bot\Bot.fsproj", "{FF9E58A6-1A1D-4DEC-B52D-265F215BF315}" | Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Bot", "Bot\Bot.fsproj", "{FF9E58A6-1A1D-4DEC-B52D-265F215BF315}" | ||||||
| EndProject | EndProject | ||||||
|  | Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "CurrencyAPI", "CurrencyAPI\CurrencyAPI.fsproj", "{AFA1A9F3-625E-44CA-83DA-A50756D119B5}" | ||||||
|  | EndProject | ||||||
| Global | Global | ||||||
| 	GlobalSection(SolutionConfigurationPlatforms) = preSolution | 	GlobalSection(SolutionConfigurationPlatforms) = preSolution | ||||||
| 		Debug|Any CPU = Debug|Any CPU | 		Debug|Any CPU = Debug|Any CPU | ||||||
| @ -22,5 +24,9 @@ Global | |||||||
| 		{44151B85-0D17-4270-AD72-490A6D8D6290}.Debug|Any CPU.Build.0 = Debug|Any CPU | 		{44151B85-0D17-4270-AD72-490A6D8D6290}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||||
| 		{44151B85-0D17-4270-AD72-490A6D8D6290}.Release|Any CPU.ActiveCfg = Release|Any CPU | 		{44151B85-0D17-4270-AD72-490A6D8D6290}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||||
| 		{44151B85-0D17-4270-AD72-490A6D8D6290}.Release|Any CPU.Build.0 = Release|Any CPU | 		{44151B85-0D17-4270-AD72-490A6D8D6290}.Release|Any CPU.Build.0 = Release|Any CPU | ||||||
|  | 		{AFA1A9F3-625E-44CA-83DA-A50756D119B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||||||
|  | 		{AFA1A9F3-625E-44CA-83DA-A50756D119B5}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||||
|  | 		{AFA1A9F3-625E-44CA-83DA-A50756D119B5}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||||
|  | 		{AFA1A9F3-625E-44CA-83DA-A50756D119B5}.Release|Any CPU.Build.0 = Release|Any CPU | ||||||
| 	EndGlobalSection | 	EndGlobalSection | ||||||
| EndGlobal | EndGlobal | ||||||
|  | |||||||
| @ -11,11 +11,12 @@ nuget DSharpPlus.SlashCommands >= 4.3.0-nightly-01135 | |||||||
| nuget FSharp.Data | nuget FSharp.Data | ||||||
| nuget FsToolkit.ErrorHandling | nuget FsToolkit.ErrorHandling | ||||||
| 
 | 
 | ||||||
| nuget MongoDB.Driver |  | ||||||
| nuget dotenv.net 3.1.1 | nuget dotenv.net 3.1.1 | ||||||
| nuget Npgsql.FSharp | nuget Npgsql.FSharp | ||||||
| nuget mixpanel-csharp 5.0.0 | nuget mixpanel-csharp 5.0.0 | ||||||
| nuget Solnet.Extensions | nuget Solnet.Extensions | ||||||
| nuget Solnet.KeyStore | nuget Solnet.KeyStore | ||||||
| nuget Solnet.Programs | nuget Solnet.Programs | ||||||
| nuget Solnet.Rpc | nuget Solnet.Rpc | ||||||
|  | 
 | ||||||
|  | nuget Giraffe | ||||||
|  | |||||||
							
								
								
									
										48
									
								
								paket.lock
									
									
									
									
									
								
							
							
						
						
									
										48
									
								
								paket.lock
									
									
									
									
									
								
							| @ -4,9 +4,6 @@ NUGET | |||||||
|   remote: https://api.nuget.org/v3/index.json |   remote: https://api.nuget.org/v3/index.json | ||||||
|     Chaos.NaCl.Standard (1.0) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) |     Chaos.NaCl.Standard (1.0) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||||
|     ConcurrentHashSet (1.3) |     ConcurrentHashSet (1.3) | ||||||
|     DnsClient (1.6) |  | ||||||
|       Microsoft.Win32.Registry (>= 5.0) |  | ||||||
|       System.Buffers (>= 4.5.1) - restriction: || (&& (== net6.0) (>= net471)) (&& (== net6.0) (< netstandard2.0)) (&& (== net6.0) (< netstandard2.1)) (== netstandard2.0) (&& (== netstandard2.1) (>= net471)) (&& (== netstandard2.1) (< netstandard2.0)) |  | ||||||
|     dotenv.net (3.1.1) |     dotenv.net (3.1.1) | ||||||
|       System.Memory (>= 4.5.4) - restriction: || (&& (== net6.0) (< netstandard2.0)) (&& (== net6.0) (< netstandard2.1)) (== netstandard2.0) (&& (== netstandard2.1) (< netstandard2.0)) |       System.Memory (>= 4.5.4) - restriction: || (&& (== net6.0) (< netstandard2.0)) (&& (== net6.0) (< netstandard2.1)) (== netstandard2.0) (&& (== netstandard2.1) (< netstandard2.0)) | ||||||
|     DSharpPlus (4.3.0-nightly-01135) |     DSharpPlus (4.3.0-nightly-01135) | ||||||
| @ -35,6 +32,15 @@ NUGET | |||||||
|       FSharp.Core (>= 4.7.2) |       FSharp.Core (>= 4.7.2) | ||||||
|     FsToolkit.ErrorHandling (2.13) |     FsToolkit.ErrorHandling (2.13) | ||||||
|       FSharp.Core (>= 4.7.2) |       FSharp.Core (>= 4.7.2) | ||||||
|  |     Giraffe (6.0) | ||||||
|  |       FSharp.Core (>= 6.0.1) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||||
|  |       Giraffe.ViewEngine (>= 1.3) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||||
|  |       Microsoft.IO.RecyclableMemoryStream (>= 2.2) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||||
|  |       Newtonsoft.Json (>= 13.0.1) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||||
|  |       System.Text.Json (>= 6.0.2) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||||
|  |       Utf8Json (>= 1.3.7) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||||
|  |     Giraffe.ViewEngine (1.4) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||||
|  |       FSharp.Core (>= 5.0) | ||||||
|     Microsoft.Bcl.AsyncInterfaces (6.0) - restriction: || (&& (== net6.0) (< netstandard2.1)) (== netstandard2.0) |     Microsoft.Bcl.AsyncInterfaces (6.0) - restriction: || (&& (== net6.0) (< netstandard2.1)) (== netstandard2.0) | ||||||
|       System.Threading.Tasks.Extensions (>= 4.5.4) - restriction: || (&& (== net6.0) (>= net461)) (&& (== net6.0) (< netstandard2.1)) (== netstandard2.0) (&& (== netstandard2.1) (>= net461)) |       System.Threading.Tasks.Extensions (>= 4.5.4) - restriction: || (&& (== net6.0) (>= net461)) (&& (== net6.0) (< netstandard2.1)) (== netstandard2.0) (&& (== netstandard2.1) (>= net461)) | ||||||
|     Microsoft.Bcl.HashCode (1.1.1) - restriction: || (&& (== net6.0) (< netstandard2.1)) (== netstandard2.0) |     Microsoft.Bcl.HashCode (1.1.1) - restriction: || (&& (== net6.0) (< netstandard2.1)) (== netstandard2.0) | ||||||
| @ -89,31 +95,14 @@ NUGET | |||||||
|       Microsoft.Extensions.Primitives (>= 6.0) |       Microsoft.Extensions.Primitives (>= 6.0) | ||||||
|     Microsoft.Extensions.Primitives (6.0) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) |     Microsoft.Extensions.Primitives (6.0) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||||
|       System.Runtime.CompilerServices.Unsafe (>= 6.0) |       System.Runtime.CompilerServices.Unsafe (>= 6.0) | ||||||
|  |     Microsoft.IO.RecyclableMemoryStream (2.2) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||||
|     Microsoft.NETCore.Platforms (6.0.2) |     Microsoft.NETCore.Platforms (6.0.2) | ||||||
|     Microsoft.NETCore.Targets (5.0) |     Microsoft.NETCore.Targets (5.0) | ||||||
|     Microsoft.Win32.Primitives (4.3) |     Microsoft.Win32.Primitives (4.3) | ||||||
|       Microsoft.NETCore.Platforms (>= 1.1) |       Microsoft.NETCore.Platforms (>= 1.1) | ||||||
|       Microsoft.NETCore.Targets (>= 1.1) |       Microsoft.NETCore.Targets (>= 1.1) | ||||||
|       System.Runtime (>= 4.3) |       System.Runtime (>= 4.3) | ||||||
|     Microsoft.Win32.Registry (5.0) |  | ||||||
|       System.Buffers (>= 4.5.1) - restriction: || (&& (== net6.0) (>= monoandroid) (< netstandard1.3)) (&& (== net6.0) (>= monotouch)) (&& (== net6.0) (< netcoreapp2.0)) (&& (== net6.0) (>= xamarinios)) (&& (== net6.0) (>= xamarinmac)) (&& (== net6.0) (>= xamarintvos)) (&& (== net6.0) (>= xamarinwatchos)) (== netstandard2.0) (== netstandard2.1) |  | ||||||
|       System.Memory (>= 4.5.4) - restriction: || (&& (== net6.0) (< netcoreapp2.0)) (&& (== net6.0) (< netcoreapp2.1)) (&& (== net6.0) (>= uap10.1)) (== netstandard2.0) (== netstandard2.1) |  | ||||||
|       System.Security.AccessControl (>= 5.0) |  | ||||||
|       System.Security.Principal.Windows (>= 5.0) |  | ||||||
|     mixpanel-csharp (5.0) |     mixpanel-csharp (5.0) | ||||||
|     MongoDB.Bson (2.15) |  | ||||||
|       System.Runtime.CompilerServices.Unsafe (>= 5.0) |  | ||||||
|     MongoDB.Driver (2.15) |  | ||||||
|       MongoDB.Bson (>= 2.15) |  | ||||||
|       MongoDB.Driver.Core (>= 2.15) |  | ||||||
|       MongoDB.Libmongocrypt (>= 1.3) |  | ||||||
|     MongoDB.Driver.Core (2.15) |  | ||||||
|       DnsClient (>= 1.6) |  | ||||||
|       MongoDB.Bson (>= 2.15) |  | ||||||
|       MongoDB.Libmongocrypt (>= 1.3) |  | ||||||
|       SharpCompress (>= 0.30.1) |  | ||||||
|       System.Buffers (>= 4.5.1) |  | ||||||
|     MongoDB.Libmongocrypt (1.3) |  | ||||||
|     Newtonsoft.Json (13.0.1) |     Newtonsoft.Json (13.0.1) | ||||||
|     Npgsql (6.0.3) |     Npgsql (6.0.3) | ||||||
|       Microsoft.Bcl.AsyncInterfaces (>= 6.0) - restriction: || (&& (== net6.0) (< netstandard2.1)) (== netstandard2.0) |       Microsoft.Bcl.AsyncInterfaces (>= 6.0) - restriction: || (&& (== net6.0) (< netstandard2.1)) (== netstandard2.0) | ||||||
| @ -177,9 +166,6 @@ NUGET | |||||||
|     runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) |     runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) | ||||||
|     runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) |     runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) | ||||||
|     runtime.ubuntu.18.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) |     runtime.ubuntu.18.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) | ||||||
|     SharpCompress (0.30.1) |  | ||||||
|       System.Memory (>= 4.5.4) - restriction: || (&& (== net6.0) (>= net461)) (&& (== net6.0) (< netstandard2.1)) (== netstandard2.0) (&& (== netstandard2.1) (>= net461)) |  | ||||||
|       System.Text.Encoding.CodePages (>= 5.0) - restriction: || (&& (== net6.0) (>= net461)) (&& (== net6.0) (< netcoreapp3.1)) (&& (== net6.0) (< netstandard2.1)) (== netstandard2.0) (== netstandard2.1) |  | ||||||
|     Solnet.Extensions (6.0.11) |     Solnet.Extensions (6.0.11) | ||||||
|       Solnet.Programs (>= 6.0.11) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) |       Solnet.Programs (>= 6.0.11) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||||
|       Solnet.Rpc (>= 6.0.11) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) |       Solnet.Rpc (>= 6.0.11) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||||
| @ -197,7 +183,7 @@ NUGET | |||||||
|     Solnet.Wallet (6.0.11) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) |     Solnet.Wallet (6.0.11) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||||
|       Chaos.NaCl.Standard (>= 1.0) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) |       Chaos.NaCl.Standard (>= 1.0) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||||
|       Portable.BouncyCastle (>= 1.9) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) |       Portable.BouncyCastle (>= 1.9) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||||
|     System.Buffers (4.5.1) |     System.Buffers (4.5.1) - restriction: || (&& (== net6.0) (>= monotouch)) (&& (== net6.0) (>= net461)) (&& (== net6.0) (< netcoreapp2.0) (< netstandard2.1)) (&& (== net6.0) (< netstandard1.1)) (&& (== net6.0) (< netstandard2.0)) (&& (== net6.0) (< netstandard2.1) (>= xamarinios)) (&& (== net6.0) (< netstandard2.1) (>= xamarinmac)) (&& (== net6.0) (< netstandard2.1) (>= xamarintvos)) (&& (== net6.0) (< netstandard2.1) (>= xamarinwatchos)) (== netstandard2.0) (== netstandard2.1) | ||||||
|     System.Collections (4.3) |     System.Collections (4.3) | ||||||
|       Microsoft.NETCore.Platforms (>= 1.1) |       Microsoft.NETCore.Platforms (>= 1.1) | ||||||
|       Microsoft.NETCore.Targets (>= 1.1) |       Microsoft.NETCore.Targets (>= 1.1) | ||||||
| @ -397,6 +383,8 @@ NUGET | |||||||
|       System.IO (>= 4.3) |       System.IO (>= 4.3) | ||||||
|       System.Reflection.Primitives (>= 4.3) |       System.Reflection.Primitives (>= 4.3) | ||||||
|       System.Runtime (>= 4.3) |       System.Runtime (>= 4.3) | ||||||
|  |     System.Reflection.Emit (4.7) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||||
|  |     System.Reflection.Emit.Lightweight (4.7) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||||
|     System.Reflection.Extensions (4.3) |     System.Reflection.Extensions (4.3) | ||||||
|       Microsoft.NETCore.Platforms (>= 1.1) |       Microsoft.NETCore.Platforms (>= 1.1) | ||||||
|       Microsoft.NETCore.Targets (>= 1.1) |       Microsoft.NETCore.Targets (>= 1.1) | ||||||
| @ -444,8 +432,6 @@ NUGET | |||||||
|       System.Resources.ResourceManager (>= 4.3) |       System.Resources.ResourceManager (>= 4.3) | ||||||
|       System.Runtime (>= 4.3) |       System.Runtime (>= 4.3) | ||||||
|       System.Runtime.Extensions (>= 4.3) |       System.Runtime.Extensions (>= 4.3) | ||||||
|     System.Security.AccessControl (6.0) |  | ||||||
|       System.Security.Principal.Windows (>= 5.0) - restriction: || (&& (== net6.0) (>= net461)) (== netstandard2.0) (== netstandard2.1) |  | ||||||
|     System.Security.Claims (4.3) |     System.Security.Claims (4.3) | ||||||
|       System.Collections (>= 4.3) |       System.Collections (>= 4.3) | ||||||
|       System.Globalization (>= 4.3) |       System.Globalization (>= 4.3) | ||||||
| @ -541,9 +527,6 @@ NUGET | |||||||
|       Microsoft.NETCore.Platforms (>= 1.1) |       Microsoft.NETCore.Platforms (>= 1.1) | ||||||
|       Microsoft.NETCore.Targets (>= 1.1) |       Microsoft.NETCore.Targets (>= 1.1) | ||||||
|       System.Runtime (>= 4.3) |       System.Runtime (>= 4.3) | ||||||
|     System.Text.Encoding.CodePages (6.0) - restriction: || (&& (== net6.0) (>= net461)) (&& (== net6.0) (< netcoreapp3.1)) (&& (== net6.0) (< netstandard2.1)) (== netstandard2.0) (== netstandard2.1) |  | ||||||
|       System.Memory (>= 4.5.4) - restriction: || (&& (== net6.0) (>= net461)) (&& (== net6.0) (< netcoreapp3.1)) (== netstandard2.0) (== netstandard2.1) |  | ||||||
|       System.Runtime.CompilerServices.Unsafe (>= 6.0) |  | ||||||
|     System.Text.Encoding.Extensions (4.3) |     System.Text.Encoding.Extensions (4.3) | ||||||
|       Microsoft.NETCore.Platforms (>= 1.1) |       Microsoft.NETCore.Platforms (>= 1.1) | ||||||
|       Microsoft.NETCore.Targets (>= 1.1) |       Microsoft.NETCore.Targets (>= 1.1) | ||||||
| @ -573,3 +556,8 @@ NUGET | |||||||
|       Microsoft.NETCore.Targets (>= 1.1) |       Microsoft.NETCore.Targets (>= 1.1) | ||||||
|       System.Runtime (>= 4.3) |       System.Runtime (>= 4.3) | ||||||
|     System.ValueTuple (4.5) |     System.ValueTuple (4.5) | ||||||
|  |     Utf8Json (1.3.7) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||||
|  |       System.Reflection.Emit (>= 4.3) | ||||||
|  |       System.Reflection.Emit.Lightweight (>= 4.3) | ||||||
|  |       System.Threading.Tasks.Extensions (>= 4.4) | ||||||
|  |       System.ValueTuple (>= 4.4) | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user