Jules was unable to complete the task in time. Please review the work done so far and provide feedback for Jules to continue.

pull/1322/head
google-labs-jules[bot] 2025-06-10 04:30:26 +00:00
parent ab648d6f0c
commit 6af4ca6377
229 changed files with 9416 additions and 0 deletions

View File

@ -0,0 +1,77 @@
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Nps.Core.Config;
namespace Nps.Client
{
public class ClientService : IHostedService
{
private readonly NpcClientConfig _config;
private readonly ILogger<ClientService> _logger;
private CancellationTokenSource? _internalCts;
public ClientService(NpcClientConfig config, ILogger<ClientService> logger)
{
_config = config;
_logger = logger;
}
public Task StartAsync(CancellationToken cancellationToken)
{
_logger.LogInformation("NPC Client service starting...");
_logger.LogInformation("Server Address: {ServerAddr}, VKey: {Vkey}", _config.Common?.ServerAddr, _config.Common?.Vkey);
if (_config.Tunnels != null)
{
_logger.LogInformation("Configured tunnels: {TunnelCount}", _config.Tunnels.Count);
foreach(var tunnel in _config.Tunnels)
{
_logger.LogDebug(" Tunnel: Mode={Mode}, ServerPort={ServerPort}, Target={TargetAddr}", tunnel.Mode, tunnel.ServerPort, tunnel.TargetAddr);
}
}
_internalCts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
// Placeholder for actual client connection logic loop
// For example, you might start a manager here that handles multiple tunnel connections
// Task.Run(async () => await ConnectAndManageTunnelsAsync(_internalCts.Token), _internalCts.Token);
_logger.LogInformation("Client service main logic placeholder started. (Actual tunnel connections not yet implemented).");
if (_config.Common?.AutoReconnection == true)
{
_logger.LogInformation("Auto-reconnection is enabled.");
}
return Task.CompletedTask;
}
public Task StopAsync(CancellationToken cancellationToken)
{
_logger.LogInformation("NPC Client service stopping...");
if(_internalCts != null && !_internalCts.IsCancellationRequested)
{
_internalCts.Cancel();
}
// Placeholder for actual disconnection logic
_logger.LogInformation("Client service cleanup placeholder. (Actual tunnel disconnections not yet implemented).");
return Task.CompletedTask;
}
// Example of a method that would contain the core client logic
// private async Task ConnectAndManageTunnelsAsync(CancellationToken cancellationToken)
// {
// while(!cancellationToken.IsCancellationRequested)
// {
// _logger.LogDebug("Client management loop running...");
// // Connect to server
// // For each tunnel in config, establish connection
// // Handle reconnections if AutoReconnection is true
// await Task.Delay(5000, cancellationToken); // Example delay
// }
// _logger.LogInformation("Client management loop stopped.");
// }
}
}

View File

@ -0,0 +1,24 @@
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<ProjectReference Include="..\Nps.Core\Nps.Core.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="9.0.5" />
<PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="9.0.5" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="9.0.5" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="9.0.5" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="9.0.5" />
<PackageReference Include="Microsoft.Extensions.Hosting.Systemd" Version="9.0.5" />
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="9.0.5" />
</ItemGroup>
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>

135
Nps.Client/Program.cs Normal file
View File

@ -0,0 +1,135 @@
using System;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Nps.Core.Config;
namespace Nps.Client
{
class Program
{
static async Task Main(string[] args)
{
var loggerForPreHost = CreatePreHostLogger();
if (args.Length > 0 && HandleServiceCommands(args, loggerForPreHost))
{
return; // Command was handled, exit
}
var hostBuilder = Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
config.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.npc.json", optional: false, reloadOnChange: true)
.AddEnvironmentVariables()
.AddCommandLine(args);
})
.ConfigureLogging((hostingContext, logging) =>
{
// Configure logging from appsettings.json
// For client, might want to add a default "Logging" section to appsettings.npc.json
// similar to Nps.Server if not already present, or set defaults here.
var loggingConfiguration = hostingContext.Configuration.GetSection("Logging");
if (!loggingConfiguration.Exists()) // Check if Logging section exists
{
// Apply some defaults if no configuration is found
logging.AddSimpleConsole(options =>
{
options.TimestampFormat = "HH:mm:ss ";
options.SingleLine = true;
});
logging.SetMinimumLevel(LogLevel.Information); // Default to Information if not set
loggerForPreHost.LogWarning("No 'Logging' section found in appsettings.npc.json. Applying default simple console logger with Information level.");
}
else
{
logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
logging.AddConsole();
}
})
.ConfigureServices((hostContext, services) =>
{
var clientConfig = new NpcClientConfig();
hostContext.Configuration.Bind(clientConfig);
services.AddSingleton(clientConfig);
services.AddHostedService<ClientService>();
});
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
hostBuilder.UseWindowsService(options =>
{
options.ServiceName = "NPC .NET Client";
});
}
else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
{
hostBuilder.UseSystemd();
}
var host = hostBuilder.Build();
var mainLogger = host.Services.GetRequiredService<ILogger<Program>>();
LogEffectiveConfig(mainLogger, host.Services.GetRequiredService<NpcClientConfig>());
mainLogger.LogInformation("Attempting to run as a service/daemon if not manually started or service command was issued.");
await host.RunAsync();
}
private static bool HandleServiceCommands(string[] args, ILogger<Program> logger)
{
if (args.Contains("install", StringComparer.OrdinalIgnoreCase))
{
logger.LogInformation("Service install command received. (Note: Actual installation not yet implemented.)");
return true;
}
if (args.Contains("uninstall", StringComparer.OrdinalIgnoreCase))
{
logger.LogInformation("Service uninstall command received. (Note: Actual uninstallation not yet implemented.)");
return true;
}
return false;
}
private static ILogger<Program> CreatePreHostLogger()
{
return LoggerFactory.Create(builder =>
{
builder.AddConsole().SetMinimumLevel(LogLevel.Information);
}).CreateLogger<Program>();
}
private static void LogEffectiveConfig(ILogger<Program> logger, NpcClientConfig clientConfig)
{
logger.LogInformation("NPC Client starting with effective configuration...");
if (clientConfig.Common != null)
{
logger.LogInformation("Common - ServerAddr: {ServerAddr}", clientConfig.Common.ServerAddr);
logger.LogInformation("Common - VKey: {Vkey}", clientConfig.Common.Vkey);
logger.LogInformation("Common - ConnType: {ConnType}", clientConfig.Common.ConnType);
logger.LogInformation("Common - AutoReconnection: {AutoReconnection}", clientConfig.Common.AutoReconnection);
}
else
{
logger.LogWarning("Common configuration section is missing!");
}
if (clientConfig.Tunnels != null && clientConfig.Tunnels.Any())
{
logger.LogInformation("Tunnels configured: {TunnelCount}", clientConfig.Tunnels.Count);
// Optionally log details for each tunnel if desired, respecting log levels
}
else
{
logger.LogInformation("No tunnels configured.");
}
}
}
}

View File

@ -0,0 +1,83 @@
{
"Common": {
"ServerAddr": "127.0.0.1:8024",
"Vkey": "1234567890abcdef",
"ConnType": "tcp",
"AutoReconnection": true,
"LogLevel": "info",
"RateLimit": "0", // 0 means no limit
"FlowStoreDriver": "memory",
"MaxConn": "0",
"MaxTunnelNum": "0",
"TlsEnable": false,
"HeartbeatInterval": "30s", // Example format, adjust as needed by parsing logic
"HeartbeatTimeout": "10s"
},
"Tunnels": [
{
"Mode": "tcp",
"ServerPort": 10000,
"TargetAddr": "127.0.0.1:8080",
"Remark": "web_server_tunnel"
},
{
"Mode": "socks5",
"ServerPort": 19009,
"Remark": "socks5_proxy",
"Password": "socks_password"
},
{
"Mode": "httpProxy",
"ServerPort": 19010,
"Remark": "http_proxy_tunnel",
"Username": "proxy_user",
"Password": "proxy_password"
},
{
"Mode": "secret",
"ServerPort": 19011,
"TargetAddr": "192.168.1.100:22",
"Password": "secret_key_for_ssh",
"Remark": "secret_ssh_tunnel"
},
{
"Mode": "p2p",
"ServerPort": 19012,
"TargetAddr": "remote_peer_vkey", // This might be interpreted differently or might need a specific format
"Password": "p2p_password", // Or "PeerUsername" / "PeerPassword" if that's how it's implemented
"Remark": "p2p_connection"
},
{
"Mode": "file",
"ServerPort": 19013,
"LocalPath": "/shared/files",
"StripPre": "/serve",
"Remark": "file_server_tunnel"
},
{
"Mode": "udp",
"ServerPort": 19014,
"TargetAddr": "10.0.0.5:53",
"Remark": "udp_dns_tunnel"
}
],
"HealthChecks": [
{
"Type": "http",
"Target": "127.0.0.1:8080", // Target for the health check, could be the local side of a tunnel
"Timeout": 5, // seconds
"Interval": 60, // seconds
"MaxFailures": 3,
"HttpUrl": "/status",
"Task": "web_server_tunnel" // Associates with the tunnel remark
},
{
"Type": "tcp",
"Target": "192.168.1.100:22",
"Timeout": 3,
"Interval": 120,
"MaxFailures": 2,
"Task": "secret_ssh_tunnel"
}
]
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,761 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v8.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v8.0": {
"Nps.Client/1.0.0": {
"dependencies": {
"Microsoft.Extensions.Configuration.Binder": "9.0.5",
"Microsoft.Extensions.Configuration.CommandLine": "9.0.5",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "9.0.5",
"Microsoft.Extensions.Configuration.Json": "9.0.5",
"Microsoft.Extensions.Hosting": "9.0.5",
"Microsoft.Extensions.Hosting.Systemd": "9.0.5",
"Microsoft.Extensions.Hosting.WindowsServices": "9.0.5",
"Nps.Core": "1.0.0"
},
"runtime": {
"Nps.Client.dll": {}
}
},
"Microsoft.Extensions.Configuration/9.0.5": {
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "9.0.5",
"Microsoft.Extensions.Primitives": "9.0.5"
},
"runtime": {
"lib/net8.0/Microsoft.Extensions.Configuration.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.525.21509"
}
}
},
"Microsoft.Extensions.Configuration.Abstractions/9.0.5": {
"dependencies": {
"Microsoft.Extensions.Primitives": "9.0.5"
},
"runtime": {
"lib/net8.0/Microsoft.Extensions.Configuration.Abstractions.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.525.21509"
}
}
},
"Microsoft.Extensions.Configuration.Binder/9.0.5": {
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "9.0.5"
},
"runtime": {
"lib/net8.0/Microsoft.Extensions.Configuration.Binder.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.525.21509"
}
}
},
"Microsoft.Extensions.Configuration.CommandLine/9.0.5": {
"dependencies": {
"Microsoft.Extensions.Configuration": "9.0.5",
"Microsoft.Extensions.Configuration.Abstractions": "9.0.5"
},
"runtime": {
"lib/net8.0/Microsoft.Extensions.Configuration.CommandLine.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.525.21509"
}
}
},
"Microsoft.Extensions.Configuration.EnvironmentVariables/9.0.5": {
"dependencies": {
"Microsoft.Extensions.Configuration": "9.0.5",
"Microsoft.Extensions.Configuration.Abstractions": "9.0.5"
},
"runtime": {
"lib/net8.0/Microsoft.Extensions.Configuration.EnvironmentVariables.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.525.21509"
}
}
},
"Microsoft.Extensions.Configuration.FileExtensions/9.0.5": {
"dependencies": {
"Microsoft.Extensions.Configuration": "9.0.5",
"Microsoft.Extensions.Configuration.Abstractions": "9.0.5",
"Microsoft.Extensions.FileProviders.Abstractions": "9.0.5",
"Microsoft.Extensions.FileProviders.Physical": "9.0.5",
"Microsoft.Extensions.Primitives": "9.0.5"
},
"runtime": {
"lib/net8.0/Microsoft.Extensions.Configuration.FileExtensions.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.525.21509"
}
}
},
"Microsoft.Extensions.Configuration.Json/9.0.5": {
"dependencies": {
"Microsoft.Extensions.Configuration": "9.0.5",
"Microsoft.Extensions.Configuration.Abstractions": "9.0.5",
"Microsoft.Extensions.Configuration.FileExtensions": "9.0.5",
"Microsoft.Extensions.FileProviders.Abstractions": "9.0.5",
"System.Text.Json": "9.0.5"
},
"runtime": {
"lib/net8.0/Microsoft.Extensions.Configuration.Json.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.525.21509"
}
}
},
"Microsoft.Extensions.Configuration.UserSecrets/9.0.5": {
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "9.0.5",
"Microsoft.Extensions.Configuration.Json": "9.0.5",
"Microsoft.Extensions.FileProviders.Abstractions": "9.0.5",
"Microsoft.Extensions.FileProviders.Physical": "9.0.5"
},
"runtime": {
"lib/net8.0/Microsoft.Extensions.Configuration.UserSecrets.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.525.21509"
}
}
},
"Microsoft.Extensions.DependencyInjection/9.0.5": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.5"
},
"runtime": {
"lib/net8.0/Microsoft.Extensions.DependencyInjection.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.525.21509"
}
}
},
"Microsoft.Extensions.DependencyInjection.Abstractions/9.0.5": {
"runtime": {
"lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.525.21509"
}
}
},
"Microsoft.Extensions.Diagnostics/9.0.5": {
"dependencies": {
"Microsoft.Extensions.Configuration": "9.0.5",
"Microsoft.Extensions.Diagnostics.Abstractions": "9.0.5",
"Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.5"
},
"runtime": {
"lib/net8.0/Microsoft.Extensions.Diagnostics.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.525.21509"
}
}
},
"Microsoft.Extensions.Diagnostics.Abstractions/9.0.5": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.5",
"Microsoft.Extensions.Options": "9.0.5",
"System.Diagnostics.DiagnosticSource": "9.0.5"
},
"runtime": {
"lib/net8.0/Microsoft.Extensions.Diagnostics.Abstractions.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.525.21509"
}
}
},
"Microsoft.Extensions.FileProviders.Abstractions/9.0.5": {
"dependencies": {
"Microsoft.Extensions.Primitives": "9.0.5"
},
"runtime": {
"lib/net8.0/Microsoft.Extensions.FileProviders.Abstractions.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.525.21509"
}
}
},
"Microsoft.Extensions.FileProviders.Physical/9.0.5": {
"dependencies": {
"Microsoft.Extensions.FileProviders.Abstractions": "9.0.5",
"Microsoft.Extensions.FileSystemGlobbing": "9.0.5",
"Microsoft.Extensions.Primitives": "9.0.5"
},
"runtime": {
"lib/net8.0/Microsoft.Extensions.FileProviders.Physical.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.525.21509"
}
}
},
"Microsoft.Extensions.FileSystemGlobbing/9.0.5": {
"runtime": {
"lib/net8.0/Microsoft.Extensions.FileSystemGlobbing.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.525.21509"
}
}
},
"Microsoft.Extensions.Hosting/9.0.5": {
"dependencies": {
"Microsoft.Extensions.Configuration": "9.0.5",
"Microsoft.Extensions.Configuration.Abstractions": "9.0.5",
"Microsoft.Extensions.Configuration.Binder": "9.0.5",
"Microsoft.Extensions.Configuration.CommandLine": "9.0.5",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "9.0.5",
"Microsoft.Extensions.Configuration.FileExtensions": "9.0.5",
"Microsoft.Extensions.Configuration.Json": "9.0.5",
"Microsoft.Extensions.Configuration.UserSecrets": "9.0.5",
"Microsoft.Extensions.DependencyInjection": "9.0.5",
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.5",
"Microsoft.Extensions.Diagnostics": "9.0.5",
"Microsoft.Extensions.FileProviders.Abstractions": "9.0.5",
"Microsoft.Extensions.FileProviders.Physical": "9.0.5",
"Microsoft.Extensions.Hosting.Abstractions": "9.0.5",
"Microsoft.Extensions.Logging": "9.0.5",
"Microsoft.Extensions.Logging.Abstractions": "9.0.5",
"Microsoft.Extensions.Logging.Configuration": "9.0.5",
"Microsoft.Extensions.Logging.Console": "9.0.5",
"Microsoft.Extensions.Logging.Debug": "9.0.5",
"Microsoft.Extensions.Logging.EventLog": "9.0.5",
"Microsoft.Extensions.Logging.EventSource": "9.0.5",
"Microsoft.Extensions.Options": "9.0.5"
},
"runtime": {
"lib/net8.0/Microsoft.Extensions.Hosting.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.525.21509"
}
}
},
"Microsoft.Extensions.Hosting.Abstractions/9.0.5": {
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "9.0.5",
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.5",
"Microsoft.Extensions.Diagnostics.Abstractions": "9.0.5",
"Microsoft.Extensions.FileProviders.Abstractions": "9.0.5",
"Microsoft.Extensions.Logging.Abstractions": "9.0.5"
},
"runtime": {
"lib/net8.0/Microsoft.Extensions.Hosting.Abstractions.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.525.21509"
}
}
},
"Microsoft.Extensions.Hosting.Systemd/9.0.5": {
"dependencies": {
"Microsoft.Extensions.Hosting": "9.0.5"
},
"runtime": {
"lib/net8.0/Microsoft.Extensions.Hosting.Systemd.dll": {
"assemblyVersion": "9.0.0.5",
"fileVersion": "9.0.525.21509"
}
}
},
"Microsoft.Extensions.Hosting.WindowsServices/9.0.5": {
"dependencies": {
"Microsoft.Extensions.Hosting": "9.0.5",
"Microsoft.Extensions.Logging.EventLog": "9.0.5",
"System.ServiceProcess.ServiceController": "9.0.5"
},
"runtime": {
"lib/net8.0/Microsoft.Extensions.Hosting.WindowsServices.dll": {
"assemblyVersion": "9.0.0.5",
"fileVersion": "9.0.525.21509"
}
}
},
"Microsoft.Extensions.Logging/9.0.5": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection": "9.0.5",
"Microsoft.Extensions.Logging.Abstractions": "9.0.5",
"Microsoft.Extensions.Options": "9.0.5"
},
"runtime": {
"lib/net8.0/Microsoft.Extensions.Logging.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.525.21509"
}
}
},
"Microsoft.Extensions.Logging.Abstractions/9.0.5": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.5",
"System.Diagnostics.DiagnosticSource": "9.0.5"
},
"runtime": {
"lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.525.21509"
}
}
},
"Microsoft.Extensions.Logging.Configuration/9.0.5": {
"dependencies": {
"Microsoft.Extensions.Configuration": "9.0.5",
"Microsoft.Extensions.Configuration.Abstractions": "9.0.5",
"Microsoft.Extensions.Configuration.Binder": "9.0.5",
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.5",
"Microsoft.Extensions.Logging": "9.0.5",
"Microsoft.Extensions.Logging.Abstractions": "9.0.5",
"Microsoft.Extensions.Options": "9.0.5",
"Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.5"
},
"runtime": {
"lib/net8.0/Microsoft.Extensions.Logging.Configuration.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.525.21509"
}
}
},
"Microsoft.Extensions.Logging.Console/9.0.5": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.5",
"Microsoft.Extensions.Logging": "9.0.5",
"Microsoft.Extensions.Logging.Abstractions": "9.0.5",
"Microsoft.Extensions.Logging.Configuration": "9.0.5",
"Microsoft.Extensions.Options": "9.0.5",
"System.Text.Json": "9.0.5"
},
"runtime": {
"lib/net8.0/Microsoft.Extensions.Logging.Console.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.525.21509"
}
}
},
"Microsoft.Extensions.Logging.Debug/9.0.5": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.5",
"Microsoft.Extensions.Logging": "9.0.5",
"Microsoft.Extensions.Logging.Abstractions": "9.0.5"
},
"runtime": {
"lib/net8.0/Microsoft.Extensions.Logging.Debug.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.525.21509"
}
}
},
"Microsoft.Extensions.Logging.EventLog/9.0.5": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.5",
"Microsoft.Extensions.Logging": "9.0.5",
"Microsoft.Extensions.Logging.Abstractions": "9.0.5",
"Microsoft.Extensions.Options": "9.0.5",
"System.Diagnostics.EventLog": "9.0.5"
},
"runtime": {
"lib/net8.0/Microsoft.Extensions.Logging.EventLog.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.525.21509"
}
}
},
"Microsoft.Extensions.Logging.EventSource/9.0.5": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.5",
"Microsoft.Extensions.Logging": "9.0.5",
"Microsoft.Extensions.Logging.Abstractions": "9.0.5",
"Microsoft.Extensions.Options": "9.0.5",
"Microsoft.Extensions.Primitives": "9.0.5",
"System.Text.Json": "9.0.5"
},
"runtime": {
"lib/net8.0/Microsoft.Extensions.Logging.EventSource.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.525.21509"
}
}
},
"Microsoft.Extensions.Options/9.0.5": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.5",
"Microsoft.Extensions.Primitives": "9.0.5"
},
"runtime": {
"lib/net8.0/Microsoft.Extensions.Options.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.525.21509"
}
}
},
"Microsoft.Extensions.Options.ConfigurationExtensions/9.0.5": {
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "9.0.5",
"Microsoft.Extensions.Configuration.Binder": "9.0.5",
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.5",
"Microsoft.Extensions.Options": "9.0.5",
"Microsoft.Extensions.Primitives": "9.0.5"
},
"runtime": {
"lib/net8.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.525.21509"
}
}
},
"Microsoft.Extensions.Primitives/9.0.5": {
"runtime": {
"lib/net8.0/Microsoft.Extensions.Primitives.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.525.21509"
}
}
},
"System.Diagnostics.DiagnosticSource/9.0.5": {
"runtime": {
"lib/net8.0/System.Diagnostics.DiagnosticSource.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.525.21509"
}
}
},
"System.Diagnostics.EventLog/9.0.5": {
"runtime": {
"lib/net8.0/System.Diagnostics.EventLog.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.525.21509"
}
},
"runtimeTargets": {
"runtimes/win/lib/net8.0/System.Diagnostics.EventLog.Messages.dll": {
"rid": "win",
"assetType": "runtime",
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.525.21509"
},
"runtimes/win/lib/net8.0/System.Diagnostics.EventLog.dll": {
"rid": "win",
"assetType": "runtime",
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.525.21509"
}
}
},
"System.IO.Pipelines/9.0.5": {
"runtime": {
"lib/net8.0/System.IO.Pipelines.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.525.21509"
}
}
},
"System.ServiceProcess.ServiceController/9.0.5": {
"dependencies": {
"System.Diagnostics.EventLog": "9.0.5"
},
"runtime": {
"lib/net8.0/System.ServiceProcess.ServiceController.dll": {
"assemblyVersion": "9.0.0.5",
"fileVersion": "9.0.525.21509"
}
},
"runtimeTargets": {
"runtimes/win/lib/net8.0/System.ServiceProcess.ServiceController.dll": {
"rid": "win",
"assetType": "runtime",
"assemblyVersion": "9.0.0.5",
"fileVersion": "9.0.525.21509"
}
}
},
"System.Text.Encodings.Web/9.0.5": {
"runtime": {
"lib/net8.0/System.Text.Encodings.Web.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.525.21509"
}
},
"runtimeTargets": {
"runtimes/browser/lib/net8.0/System.Text.Encodings.Web.dll": {
"rid": "browser",
"assetType": "runtime",
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.525.21509"
}
}
},
"System.Text.Json/9.0.5": {
"dependencies": {
"System.IO.Pipelines": "9.0.5",
"System.Text.Encodings.Web": "9.0.5"
},
"runtime": {
"lib/net8.0/System.Text.Json.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.525.21509"
}
}
},
"Nps.Core/1.0.0": {
"runtime": {
"Nps.Core.dll": {}
}
}
}
},
"libraries": {
"Nps.Client/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"Microsoft.Extensions.Configuration/9.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-uYXLg2Gt8KUH5nT3u+TBpg9VrRcN5+2zPmIjqEHR4kOoBwsbtMDncEJw9HiLvZqGgIo2TR4oraibAoy5hXn2bQ==",
"path": "microsoft.extensions.configuration/9.0.5",
"hashPath": "microsoft.extensions.configuration.9.0.5.nupkg.sha512"
},
"Microsoft.Extensions.Configuration.Abstractions/9.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-ew0G6gIznnyAkbIa67wXspkDFcVektjN3xaDAfBDIPbWph+rbuGaaohFxUSGw28ht7wdcWtTtElKnzfkcDDbOQ==",
"path": "microsoft.extensions.configuration.abstractions/9.0.5",
"hashPath": "microsoft.extensions.configuration.abstractions.9.0.5.nupkg.sha512"
},
"Microsoft.Extensions.Configuration.Binder/9.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-7pQ4Tkyofm8DFWFhqn9ZmG8qSAC2VitWleATj5qob9V9KtoxCVdwRtmiVl/ha3WAgjkEfW++JLWXox9MJwMgkg==",
"path": "microsoft.extensions.configuration.binder/9.0.5",
"hashPath": "microsoft.extensions.configuration.binder.9.0.5.nupkg.sha512"
},
"Microsoft.Extensions.Configuration.CommandLine/9.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-BloAPG22eV+F4CpGKg0lHeXsLxbsGeId4mNpNsUc250j79pcJL3OWVRgmyIUBP5eF74lYJlaOVF+54MRBAQV3A==",
"path": "microsoft.extensions.configuration.commandline/9.0.5",
"hashPath": "microsoft.extensions.configuration.commandline.9.0.5.nupkg.sha512"
},
"Microsoft.Extensions.Configuration.EnvironmentVariables/9.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-kfLv3nbn3tt42g/YfPMJGW6SJRt4DLIvSu5njrZv622kBGVOXBMwyoqFLvR/tULzn0mwICJu6GORdUJ+INpexg==",
"path": "microsoft.extensions.configuration.environmentvariables/9.0.5",
"hashPath": "microsoft.extensions.configuration.environmentvariables.9.0.5.nupkg.sha512"
},
"Microsoft.Extensions.Configuration.FileExtensions/9.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-ifrA7POOJ7EeoEJhC8r03WufBsEV4zgnTLQURHh1QIS/vU6ff/60z8M4tD3i2csdFPREEc1nGbiOZhi7Q5aMfw==",
"path": "microsoft.extensions.configuration.fileextensions/9.0.5",
"hashPath": "microsoft.extensions.configuration.fileextensions.9.0.5.nupkg.sha512"
},
"Microsoft.Extensions.Configuration.Json/9.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-LiWV+Sn5yvoQEd/vihGwkR3CZ4ekMrqP5OQiYOlbzMBfBa6JHBWBsTO5ta6dMYO9ADMiv9K6GBKJSF9DrP29sw==",
"path": "microsoft.extensions.configuration.json/9.0.5",
"hashPath": "microsoft.extensions.configuration.json.9.0.5.nupkg.sha512"
},
"Microsoft.Extensions.Configuration.UserSecrets/9.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-DONkv4TzvCUps55pu+667HasjhW5WoKndDPt9AvnF3qnYfgh+OXN01cDdH0h9cfXUXluzAZfGhqh/Uwt14aikg==",
"path": "microsoft.extensions.configuration.usersecrets/9.0.5",
"hashPath": "microsoft.extensions.configuration.usersecrets.9.0.5.nupkg.sha512"
},
"Microsoft.Extensions.DependencyInjection/9.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-N1Mn0T/tUBPoLL+Fzsp+VCEtneUhhxc1//Dx3BeuQ8AX+XrMlYCfnp2zgpEXnTCB7053CLdiqVWPZ7mEX6MPjg==",
"path": "microsoft.extensions.dependencyinjection/9.0.5",
"hashPath": "microsoft.extensions.dependencyinjection.9.0.5.nupkg.sha512"
},
"Microsoft.Extensions.DependencyInjection.Abstractions/9.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-cjnRtsEAzU73aN6W7vkWy8Phj5t3Xm78HSqgrbh/O4Q9SK/yN73wZVa21QQY6amSLQRQ/M8N+koGnY6PuvKQsw==",
"path": "microsoft.extensions.dependencyinjection.abstractions/9.0.5",
"hashPath": "microsoft.extensions.dependencyinjection.abstractions.9.0.5.nupkg.sha512"
},
"Microsoft.Extensions.Diagnostics/9.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-fRiUjmhm9e4vMp6WEO9MgWNxVtWSr4Pcgh1W4DyJIr8bRANlZz9JU7uicf7ShzMspDxo/9Ejo9zJ6qQZY0IhVw==",
"path": "microsoft.extensions.diagnostics/9.0.5",
"hashPath": "microsoft.extensions.diagnostics.9.0.5.nupkg.sha512"
},
"Microsoft.Extensions.Diagnostics.Abstractions/9.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-6YfTcULCYREMTqtk+s3UiszsFV2xN2FXtxdQpurmQJY9Cp/QGiM4MTKfJKUo7AzdLuzjOKKMWjQITmvtK7AsUg==",
"path": "microsoft.extensions.diagnostics.abstractions/9.0.5",
"hashPath": "microsoft.extensions.diagnostics.abstractions.9.0.5.nupkg.sha512"
},
"Microsoft.Extensions.FileProviders.Abstractions/9.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-LLm+e8lvD+jOI+blHRSxPqywPaohOTNcVzQv548R1UpkEiNB2D+zf3RrqxBdB1LDPicRMTnfiaKJovxF8oX1bQ==",
"path": "microsoft.extensions.fileproviders.abstractions/9.0.5",
"hashPath": "microsoft.extensions.fileproviders.abstractions.9.0.5.nupkg.sha512"
},
"Microsoft.Extensions.FileProviders.Physical/9.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-cMQqvK0rclKzAm2crSFe9JiimR+wzt6eaoRxa8/mYFkqekY4JEP8eShVZs4NPsKV2HQFHfDgwfFSsWUrUgqbKA==",
"path": "microsoft.extensions.fileproviders.physical/9.0.5",
"hashPath": "microsoft.extensions.fileproviders.physical.9.0.5.nupkg.sha512"
},
"Microsoft.Extensions.FileSystemGlobbing/9.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-TWJZJGIyUncH4Ah+Sy9X5mPJeoz02lRlFx9VWaFo4b4o0tkA1dk2u6HRHrfEC2L6N4IC+vFzfRWol1egyQqLtg==",
"path": "microsoft.extensions.filesystemglobbing/9.0.5",
"hashPath": "microsoft.extensions.filesystemglobbing.9.0.5.nupkg.sha512"
},
"Microsoft.Extensions.Hosting/9.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-PoTG6ptucJyxrrALQgRE5lwUMaSc3PK5vtEXuazEJ6mDQ9xRFmxElZCe81duH/TNH7+X/CVDVIZu6Ji2OQW4zQ==",
"path": "microsoft.extensions.hosting/9.0.5",
"hashPath": "microsoft.extensions.hosting.9.0.5.nupkg.sha512"
},
"Microsoft.Extensions.Hosting.Abstractions/9.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-3GA/dxqkP6yFe18qYRgtKYuN2onC8NfhlpNN21jptkVKk7olqBTkdT49oL0pSEz2SptRsux7LocCU7+alGnEag==",
"path": "microsoft.extensions.hosting.abstractions/9.0.5",
"hashPath": "microsoft.extensions.hosting.abstractions.9.0.5.nupkg.sha512"
},
"Microsoft.Extensions.Hosting.Systemd/9.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-D3iSX8vsCFF8J6da7BIpJwOVtPRU25gmbJ24+HyG4uPWNrybMY9v8MGzcAFAx3ELU75ia+VMTf2VUCAxBTw8gg==",
"path": "microsoft.extensions.hosting.systemd/9.0.5",
"hashPath": "microsoft.extensions.hosting.systemd.9.0.5.nupkg.sha512"
},
"Microsoft.Extensions.Hosting.WindowsServices/9.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-gBjI+sFTGvRDCXYgKitCjNedhcKnbLLa4QuKCcEbqhMLBl8hSfeqwsaYG90xMPNYk/zZQaTh7W2Ykf5+hv0Sew==",
"path": "microsoft.extensions.hosting.windowsservices/9.0.5",
"hashPath": "microsoft.extensions.hosting.windowsservices.9.0.5.nupkg.sha512"
},
"Microsoft.Extensions.Logging/9.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-rQU61lrgvpE/UgcAd4E56HPxUIkX/VUQCxWmwDTLLVeuwRDYTL0q/FLGfAW17cGTKyCh7ywYAEnY3sTEvURsfg==",
"path": "microsoft.extensions.logging/9.0.5",
"hashPath": "microsoft.extensions.logging.9.0.5.nupkg.sha512"
},
"Microsoft.Extensions.Logging.Abstractions/9.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-pP1PADCrIxMYJXxFmTVbAgEU7GVpjK5i0/tyfU9DiE0oXQy3JWQaOVgCkrCiePLgS8b5sghM3Fau3EeHiVWbCg==",
"path": "microsoft.extensions.logging.abstractions/9.0.5",
"hashPath": "microsoft.extensions.logging.abstractions.9.0.5.nupkg.sha512"
},
"Microsoft.Extensions.Logging.Configuration/9.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-WgYTJ1/dxdzqaYYMrgC6cZXJVmaoxUmWgsvR9Kg5ZARpy0LMw7fZIZMIiVuaxhItwwFIW0ruhAN+Er2/oVZgmQ==",
"path": "microsoft.extensions.logging.configuration/9.0.5",
"hashPath": "microsoft.extensions.logging.configuration.9.0.5.nupkg.sha512"
},
"Microsoft.Extensions.Logging.Console/9.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-0BqgvX5y34GOrsJeAypny53OoBnXjyjQCpanrpm7dZawKv5KFk7Tqbu7LFVsRu2T0tLpQ2YHMciMiAWtp+o/Bw==",
"path": "microsoft.extensions.logging.console/9.0.5",
"hashPath": "microsoft.extensions.logging.console.9.0.5.nupkg.sha512"
},
"Microsoft.Extensions.Logging.Debug/9.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-IyosWdl/NM2LP72zlavSpkZyd1SczzJ+8J4LImlKWF8w/JEbqJuSJey79Wd1lJGsDj7Cik8y4CD1T2mXMIhEVA==",
"path": "microsoft.extensions.logging.debug/9.0.5",
"hashPath": "microsoft.extensions.logging.debug.9.0.5.nupkg.sha512"
},
"Microsoft.Extensions.Logging.EventLog/9.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-KF+lvi5ZwNd5Oy5V6l0580cQjTi59boF6X4wp+2ozvUGTC4zBBsaDSVicR86pTWsDivmo9UeSlB+QgheGzrpJQ==",
"path": "microsoft.extensions.logging.eventlog/9.0.5",
"hashPath": "microsoft.extensions.logging.eventlog.9.0.5.nupkg.sha512"
},
"Microsoft.Extensions.Logging.EventSource/9.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-H4PVv6aDt4jNyZi7MN746GtHPNRjGdH7OrueDViQDBAw/b4incGYEPbUKUACa9HED0vfI4PPaQrzz1Hz5Odh3g==",
"path": "microsoft.extensions.logging.eventsource/9.0.5",
"hashPath": "microsoft.extensions.logging.eventsource.9.0.5.nupkg.sha512"
},
"Microsoft.Extensions.Options/9.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-vPdJQU8YLOUSSK8NL0RmwcXJr2E0w8xH559PGQl4JYsglgilZr9LZnqV2zdgk+XR05+kuvhBEZKoDVd46o7NqA==",
"path": "microsoft.extensions.options/9.0.5",
"hashPath": "microsoft.extensions.options.9.0.5.nupkg.sha512"
},
"Microsoft.Extensions.Options.ConfigurationExtensions/9.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-CJbAVdovKPFh2FoKxesu20odRVSbL/vtvzzObnG+5u38sOfzRS2Ncy25id0TjYUGQzMhNnJUHgTUzTMDl/3c9g==",
"path": "microsoft.extensions.options.configurationextensions/9.0.5",
"hashPath": "microsoft.extensions.options.configurationextensions.9.0.5.nupkg.sha512"
},
"Microsoft.Extensions.Primitives/9.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-b4OAv1qE1C9aM+ShWJu3rlo/WjDwa/I30aIPXqDWSKXTtKl1Wwh6BZn+glH5HndGVVn3C6ZAPQj5nv7/7HJNBQ==",
"path": "microsoft.extensions.primitives/9.0.5",
"hashPath": "microsoft.extensions.primitives.9.0.5.nupkg.sha512"
},
"System.Diagnostics.DiagnosticSource/9.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-WoI5or8kY2VxFdDmsaRZ5yaYvvb+4MCyy66eXo79Cy1uMa7qXeGIlYmZx7R9Zy5S4xZjmqvkk2V8L6/vDwAAEA==",
"path": "system.diagnostics.diagnosticsource/9.0.5",
"hashPath": "system.diagnostics.diagnosticsource.9.0.5.nupkg.sha512"
},
"System.Diagnostics.EventLog/9.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-nhtTvAgKTD7f6t0bkOb4/hNv0PShb8GHs5Fhn7PvYhwhyWiVyVBvL2vTGH0Hlw5jOZQmWkzQxjY6M/h4tl8M6Q==",
"path": "system.diagnostics.eventlog/9.0.5",
"hashPath": "system.diagnostics.eventlog.9.0.5.nupkg.sha512"
},
"System.IO.Pipelines/9.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-5WXo+3MGcnYn54+1ojf+kRzKq1Q6sDUnovujNJ2ky1nl1/kP3+PMil9LPbFvZ2mkhvAGmQcY07G2sfHat/v0Fw==",
"path": "system.io.pipelines/9.0.5",
"hashPath": "system.io.pipelines.9.0.5.nupkg.sha512"
},
"System.ServiceProcess.ServiceController/9.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-3mOK5BIwcBHAWzrH9oHCEgwmHecIgoW/P0B42MB8UgG3TqH5K68MBt1/4Mn7znexNP2o6AniDJIXfg04+feELA==",
"path": "system.serviceprocess.servicecontroller/9.0.5",
"hashPath": "system.serviceprocess.servicecontroller.9.0.5.nupkg.sha512"
},
"System.Text.Encodings.Web/9.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-HJPmqP2FsE+WVUUlTsZ4IFRSyzw40yz0ubiTnsaqm+Xo5fFZhVRvx6Zn8tLXj92/6pbre6OA4QL2A2vnCSKxJA==",
"path": "system.text.encodings.web/9.0.5",
"hashPath": "system.text.encodings.web.9.0.5.nupkg.sha512"
},
"System.Text.Json/9.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-rnP61ZfloTgPQPe7ecr36loNiGX3g1PocxlKHdY/FUpDSsExKkTxpMAlB4X35wNEPr1X7mkYZuQvW3Lhxmu7KA==",
"path": "system.text.json/9.0.5",
"hashPath": "system.text.json.9.0.5.nupkg.sha512"
},
"Nps.Core/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
}
}
}

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,12 @@
{
"runtimeOptions": {
"tfm": "net8.0",
"framework": {
"name": "Microsoft.NETCore.App",
"version": "8.0.0"
},
"configProperties": {
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
}
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")]

View File

@ -0,0 +1,21 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Nps.Client")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+df8006792ee2f3d27bf38aeea97fcd9a61e81842")]
[assembly: System.Reflection.AssemblyProductAttribute("Nps.Client")]
[assembly: System.Reflection.AssemblyTitleAttribute("Nps.Client")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
// Generated by the MSBuild WriteCodeFragment class.

View File

@ -0,0 +1 @@
bdb388638577b8467efbd53839c530dad589ea242cc53e3f5d6e44356f5fc7e8

View File

@ -0,0 +1,13 @@
is_global = true
build_property.TargetFramework = net8.0
build_property.TargetPlatformMinVersion =
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = Nps.Client
build_property.ProjectDir = /app/Nps.Client/
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =

View File

@ -0,0 +1,8 @@
// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

Binary file not shown.

View File

@ -0,0 +1 @@
7a2c9943f2907d473d405e149fde4be6d3ee8106c81933761e2b260e7b4f608a

View File

@ -0,0 +1,58 @@
/app/Nps.Client/bin/Debug/net8.0/Nps.Client
/app/Nps.Client/bin/Debug/net8.0/Nps.Client.deps.json
/app/Nps.Client/bin/Debug/net8.0/Nps.Client.runtimeconfig.json
/app/Nps.Client/bin/Debug/net8.0/Nps.Client.dll
/app/Nps.Client/bin/Debug/net8.0/Nps.Client.pdb
/app/Nps.Client/bin/Debug/net8.0/Microsoft.Extensions.Configuration.dll
/app/Nps.Client/bin/Debug/net8.0/Microsoft.Extensions.Configuration.Abstractions.dll
/app/Nps.Client/bin/Debug/net8.0/Microsoft.Extensions.Configuration.Binder.dll
/app/Nps.Client/bin/Debug/net8.0/Microsoft.Extensions.Configuration.CommandLine.dll
/app/Nps.Client/bin/Debug/net8.0/Microsoft.Extensions.Configuration.EnvironmentVariables.dll
/app/Nps.Client/bin/Debug/net8.0/Microsoft.Extensions.Configuration.FileExtensions.dll
/app/Nps.Client/bin/Debug/net8.0/Microsoft.Extensions.Configuration.Json.dll
/app/Nps.Client/bin/Debug/net8.0/Microsoft.Extensions.FileProviders.Abstractions.dll
/app/Nps.Client/bin/Debug/net8.0/Microsoft.Extensions.FileProviders.Physical.dll
/app/Nps.Client/bin/Debug/net8.0/Microsoft.Extensions.FileSystemGlobbing.dll
/app/Nps.Client/bin/Debug/net8.0/Microsoft.Extensions.Primitives.dll
/app/Nps.Client/bin/Debug/net8.0/System.IO.Pipelines.dll
/app/Nps.Client/bin/Debug/net8.0/System.Text.Encodings.Web.dll
/app/Nps.Client/bin/Debug/net8.0/System.Text.Json.dll
/app/Nps.Client/bin/Debug/net8.0/runtimes/browser/lib/net8.0/System.Text.Encodings.Web.dll
/app/Nps.Client/bin/Debug/net8.0/Nps.Core.dll
/app/Nps.Client/bin/Debug/net8.0/Nps.Core.pdb
/app/Nps.Client/obj/Debug/net8.0/Nps.Client.csproj.AssemblyReference.cache
/app/Nps.Client/obj/Debug/net8.0/Nps.Client.GeneratedMSBuildEditorConfig.editorconfig
/app/Nps.Client/obj/Debug/net8.0/Nps.Client.AssemblyInfoInputs.cache
/app/Nps.Client/obj/Debug/net8.0/Nps.Client.AssemblyInfo.cs
/app/Nps.Client/obj/Debug/net8.0/Nps.Client.csproj.CoreCompileInputs.cache
/app/Nps.Client/obj/Debug/net8.0/Nps.Client.sourcelink.json
/app/Nps.Client/obj/Debug/net8.0/Nps.Client.csproj.CopyComplete
/app/Nps.Client/obj/Debug/net8.0/Nps.Client.dll
/app/Nps.Client/obj/Debug/net8.0/refint/Nps.Client.dll
/app/Nps.Client/obj/Debug/net8.0/Nps.Client.pdb
/app/Nps.Client/obj/Debug/net8.0/Nps.Client.genruntimeconfig.cache
/app/Nps.Client/obj/Debug/net8.0/ref/Nps.Client.dll
/app/Nps.Client/bin/Debug/net8.0/Microsoft.Extensions.Configuration.UserSecrets.dll
/app/Nps.Client/bin/Debug/net8.0/Microsoft.Extensions.DependencyInjection.dll
/app/Nps.Client/bin/Debug/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll
/app/Nps.Client/bin/Debug/net8.0/Microsoft.Extensions.Diagnostics.dll
/app/Nps.Client/bin/Debug/net8.0/Microsoft.Extensions.Diagnostics.Abstractions.dll
/app/Nps.Client/bin/Debug/net8.0/Microsoft.Extensions.Hosting.dll
/app/Nps.Client/bin/Debug/net8.0/Microsoft.Extensions.Hosting.Abstractions.dll
/app/Nps.Client/bin/Debug/net8.0/Microsoft.Extensions.Hosting.Systemd.dll
/app/Nps.Client/bin/Debug/net8.0/Microsoft.Extensions.Hosting.WindowsServices.dll
/app/Nps.Client/bin/Debug/net8.0/Microsoft.Extensions.Logging.dll
/app/Nps.Client/bin/Debug/net8.0/Microsoft.Extensions.Logging.Abstractions.dll
/app/Nps.Client/bin/Debug/net8.0/Microsoft.Extensions.Logging.Configuration.dll
/app/Nps.Client/bin/Debug/net8.0/Microsoft.Extensions.Logging.Console.dll
/app/Nps.Client/bin/Debug/net8.0/Microsoft.Extensions.Logging.Debug.dll
/app/Nps.Client/bin/Debug/net8.0/Microsoft.Extensions.Logging.EventLog.dll
/app/Nps.Client/bin/Debug/net8.0/Microsoft.Extensions.Logging.EventSource.dll
/app/Nps.Client/bin/Debug/net8.0/Microsoft.Extensions.Options.dll
/app/Nps.Client/bin/Debug/net8.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll
/app/Nps.Client/bin/Debug/net8.0/System.Diagnostics.DiagnosticSource.dll
/app/Nps.Client/bin/Debug/net8.0/System.Diagnostics.EventLog.dll
/app/Nps.Client/bin/Debug/net8.0/System.ServiceProcess.ServiceController.dll
/app/Nps.Client/bin/Debug/net8.0/runtimes/win/lib/net8.0/System.Diagnostics.EventLog.Messages.dll
/app/Nps.Client/bin/Debug/net8.0/runtimes/win/lib/net8.0/System.Diagnostics.EventLog.dll
/app/Nps.Client/bin/Debug/net8.0/runtimes/win/lib/net8.0/System.ServiceProcess.ServiceController.dll

Binary file not shown.

View File

@ -0,0 +1 @@
6a23418542980450ccb7c9e9688e9c883407b20791d7450f89d06cbf1e2b80a4

Binary file not shown.

View File

@ -0,0 +1 @@
{"documents":{"/app/*":"https://raw.githubusercontent.com/Shurrik0030/nps/df8006792ee2f3d27bf38aeea97fcd9a61e81842/*"}}

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,148 @@
{
"format": 1,
"restore": {
"/app/Nps.Client/Nps.Client.csproj": {}
},
"projects": {
"/app/Nps.Client/Nps.Client.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "/app/Nps.Client/Nps.Client.csproj",
"projectName": "Nps.Client",
"projectPath": "/app/Nps.Client/Nps.Client.csproj",
"packagesPath": "/home/swebot/.nuget/packages/",
"outputPath": "/app/Nps.Client/obj/",
"projectStyle": "PackageReference",
"configFilePaths": [
"/home/swebot/.nuget/NuGet/NuGet.Config"
],
"originalTargetFrameworks": [
"net8.0"
],
"sources": {
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net8.0": {
"targetAlias": "net8.0",
"projectReferences": {
"/app/Nps.Core/Nps.Core.csproj": {
"projectPath": "/app/Nps.Core/Nps.Core.csproj"
}
}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
}
},
"frameworks": {
"net8.0": {
"targetAlias": "net8.0",
"dependencies": {
"Microsoft.Extensions.Configuration.Binder": {
"target": "Package",
"version": "[9.0.5, )"
},
"Microsoft.Extensions.Configuration.CommandLine": {
"target": "Package",
"version": "[9.0.5, )"
},
"Microsoft.Extensions.Configuration.EnvironmentVariables": {
"target": "Package",
"version": "[9.0.5, )"
},
"Microsoft.Extensions.Configuration.Json": {
"target": "Package",
"version": "[9.0.5, )"
},
"Microsoft.Extensions.Hosting": {
"target": "Package",
"version": "[9.0.5, )"
},
"Microsoft.Extensions.Hosting.Systemd": {
"target": "Package",
"version": "[9.0.5, )"
},
"Microsoft.Extensions.Hosting.WindowsServices": {
"target": "Package",
"version": "[9.0.5, )"
}
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "/usr/lib/dotnet/sdk/8.0.116/PortableRuntimeIdentifierGraph.json"
}
}
},
"/app/Nps.Core/Nps.Core.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "/app/Nps.Core/Nps.Core.csproj",
"projectName": "Nps.Core",
"projectPath": "/app/Nps.Core/Nps.Core.csproj",
"packagesPath": "/home/swebot/.nuget/packages/",
"outputPath": "/app/Nps.Core/obj/",
"projectStyle": "PackageReference",
"configFilePaths": [
"/home/swebot/.nuget/NuGet/NuGet.Config"
],
"originalTargetFrameworks": [
"net8.0"
],
"sources": {
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net8.0": {
"targetAlias": "net8.0",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
}
},
"frameworks": {
"net8.0": {
"targetAlias": "net8.0",
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "/usr/lib/dotnet/sdk/8.0.116/PortableRuntimeIdentifierGraph.json"
}
}
}
}
}

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">/home/swebot/.nuget/packages/</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">/home/swebot/.nuget/packages/</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.8.1</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="/home/swebot/.nuget/packages/" />
</ItemGroup>
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<Import Project="$(NuGetPackageRoot)microsoft.extensions.configuration.usersecrets/9.0.5/buildTransitive/net8.0/Microsoft.Extensions.Configuration.UserSecrets.props" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.configuration.usersecrets/9.0.5/buildTransitive/net8.0/Microsoft.Extensions.Configuration.UserSecrets.props')" />
</ImportGroup>
</Project>

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<Import Project="$(NuGetPackageRoot)system.text.json/9.0.5/buildTransitive/net8.0/System.Text.Json.targets" Condition="Exists('$(NuGetPackageRoot)system.text.json/9.0.5/buildTransitive/net8.0/System.Text.Json.targets')" />
<Import Project="$(NuGetPackageRoot)microsoft.extensions.options/9.0.5/buildTransitive/net8.0/Microsoft.Extensions.Options.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.options/9.0.5/buildTransitive/net8.0/Microsoft.Extensions.Options.targets')" />
<Import Project="$(NuGetPackageRoot)microsoft.extensions.configuration.binder/9.0.5/buildTransitive/netstandard2.0/Microsoft.Extensions.Configuration.Binder.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.configuration.binder/9.0.5/buildTransitive/netstandard2.0/Microsoft.Extensions.Configuration.Binder.targets')" />
<Import Project="$(NuGetPackageRoot)microsoft.extensions.logging.abstractions/9.0.5/buildTransitive/net8.0/Microsoft.Extensions.Logging.Abstractions.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.logging.abstractions/9.0.5/buildTransitive/net8.0/Microsoft.Extensions.Logging.Abstractions.targets')" />
<Import Project="$(NuGetPackageRoot)microsoft.extensions.configuration.usersecrets/9.0.5/buildTransitive/net8.0/Microsoft.Extensions.Configuration.UserSecrets.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.configuration.usersecrets/9.0.5/buildTransitive/net8.0/Microsoft.Extensions.Configuration.UserSecrets.targets')" />
</ImportGroup>
</Project>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,44 @@
{
"version": 2,
"dgSpecHash": "3TX4j2ex2BAZd0GhEQyDQfeNBmaCiEyclM0+gqTlnaA0IYxpDIvUYXShXvU4b9eW9m8hUSVZl8GHKR2nLpgg1g==",
"success": true,
"projectFilePath": "/app/Nps.Client/Nps.Client.csproj",
"expectedPackageFiles": [
"/home/swebot/.nuget/packages/microsoft.extensions.configuration/9.0.5/microsoft.extensions.configuration.9.0.5.nupkg.sha512",
"/home/swebot/.nuget/packages/microsoft.extensions.configuration.abstractions/9.0.5/microsoft.extensions.configuration.abstractions.9.0.5.nupkg.sha512",
"/home/swebot/.nuget/packages/microsoft.extensions.configuration.binder/9.0.5/microsoft.extensions.configuration.binder.9.0.5.nupkg.sha512",
"/home/swebot/.nuget/packages/microsoft.extensions.configuration.commandline/9.0.5/microsoft.extensions.configuration.commandline.9.0.5.nupkg.sha512",
"/home/swebot/.nuget/packages/microsoft.extensions.configuration.environmentvariables/9.0.5/microsoft.extensions.configuration.environmentvariables.9.0.5.nupkg.sha512",
"/home/swebot/.nuget/packages/microsoft.extensions.configuration.fileextensions/9.0.5/microsoft.extensions.configuration.fileextensions.9.0.5.nupkg.sha512",
"/home/swebot/.nuget/packages/microsoft.extensions.configuration.json/9.0.5/microsoft.extensions.configuration.json.9.0.5.nupkg.sha512",
"/home/swebot/.nuget/packages/microsoft.extensions.configuration.usersecrets/9.0.5/microsoft.extensions.configuration.usersecrets.9.0.5.nupkg.sha512",
"/home/swebot/.nuget/packages/microsoft.extensions.dependencyinjection/9.0.5/microsoft.extensions.dependencyinjection.9.0.5.nupkg.sha512",
"/home/swebot/.nuget/packages/microsoft.extensions.dependencyinjection.abstractions/9.0.5/microsoft.extensions.dependencyinjection.abstractions.9.0.5.nupkg.sha512",
"/home/swebot/.nuget/packages/microsoft.extensions.diagnostics/9.0.5/microsoft.extensions.diagnostics.9.0.5.nupkg.sha512",
"/home/swebot/.nuget/packages/microsoft.extensions.diagnostics.abstractions/9.0.5/microsoft.extensions.diagnostics.abstractions.9.0.5.nupkg.sha512",
"/home/swebot/.nuget/packages/microsoft.extensions.fileproviders.abstractions/9.0.5/microsoft.extensions.fileproviders.abstractions.9.0.5.nupkg.sha512",
"/home/swebot/.nuget/packages/microsoft.extensions.fileproviders.physical/9.0.5/microsoft.extensions.fileproviders.physical.9.0.5.nupkg.sha512",
"/home/swebot/.nuget/packages/microsoft.extensions.filesystemglobbing/9.0.5/microsoft.extensions.filesystemglobbing.9.0.5.nupkg.sha512",
"/home/swebot/.nuget/packages/microsoft.extensions.hosting/9.0.5/microsoft.extensions.hosting.9.0.5.nupkg.sha512",
"/home/swebot/.nuget/packages/microsoft.extensions.hosting.abstractions/9.0.5/microsoft.extensions.hosting.abstractions.9.0.5.nupkg.sha512",
"/home/swebot/.nuget/packages/microsoft.extensions.hosting.systemd/9.0.5/microsoft.extensions.hosting.systemd.9.0.5.nupkg.sha512",
"/home/swebot/.nuget/packages/microsoft.extensions.hosting.windowsservices/9.0.5/microsoft.extensions.hosting.windowsservices.9.0.5.nupkg.sha512",
"/home/swebot/.nuget/packages/microsoft.extensions.logging/9.0.5/microsoft.extensions.logging.9.0.5.nupkg.sha512",
"/home/swebot/.nuget/packages/microsoft.extensions.logging.abstractions/9.0.5/microsoft.extensions.logging.abstractions.9.0.5.nupkg.sha512",
"/home/swebot/.nuget/packages/microsoft.extensions.logging.configuration/9.0.5/microsoft.extensions.logging.configuration.9.0.5.nupkg.sha512",
"/home/swebot/.nuget/packages/microsoft.extensions.logging.console/9.0.5/microsoft.extensions.logging.console.9.0.5.nupkg.sha512",
"/home/swebot/.nuget/packages/microsoft.extensions.logging.debug/9.0.5/microsoft.extensions.logging.debug.9.0.5.nupkg.sha512",
"/home/swebot/.nuget/packages/microsoft.extensions.logging.eventlog/9.0.5/microsoft.extensions.logging.eventlog.9.0.5.nupkg.sha512",
"/home/swebot/.nuget/packages/microsoft.extensions.logging.eventsource/9.0.5/microsoft.extensions.logging.eventsource.9.0.5.nupkg.sha512",
"/home/swebot/.nuget/packages/microsoft.extensions.options/9.0.5/microsoft.extensions.options.9.0.5.nupkg.sha512",
"/home/swebot/.nuget/packages/microsoft.extensions.options.configurationextensions/9.0.5/microsoft.extensions.options.configurationextensions.9.0.5.nupkg.sha512",
"/home/swebot/.nuget/packages/microsoft.extensions.primitives/9.0.5/microsoft.extensions.primitives.9.0.5.nupkg.sha512",
"/home/swebot/.nuget/packages/system.diagnostics.diagnosticsource/9.0.5/system.diagnostics.diagnosticsource.9.0.5.nupkg.sha512",
"/home/swebot/.nuget/packages/system.diagnostics.eventlog/9.0.5/system.diagnostics.eventlog.9.0.5.nupkg.sha512",
"/home/swebot/.nuget/packages/system.io.pipelines/9.0.5/system.io.pipelines.9.0.5.nupkg.sha512",
"/home/swebot/.nuget/packages/system.serviceprocess.servicecontroller/9.0.5/system.serviceprocess.servicecontroller.9.0.5.nupkg.sha512",
"/home/swebot/.nuget/packages/system.text.encodings.web/9.0.5/system.text.encodings.web.9.0.5.nupkg.sha512",
"/home/swebot/.nuget/packages/system.text.json/9.0.5/system.text.json.9.0.5.nupkg.sha512"
],
"logs": []
}

6
Nps.Core/Class1.cs Normal file
View File

@ -0,0 +1,6 @@
namespace Nps.Core;
public class Class1
{
}

126
Nps.Core/NpcClientConfig.cs Normal file
View File

@ -0,0 +1,126 @@
using System.Collections.Generic;
using System.Text.Json.Serialization;
using Nps.Core.Serialization;
namespace Nps.Core.Config
{
public class NpcClientConfig
{
public CommonConfig? Common { get; set; }
[JsonConverter(typeof(TunnelListJsonConverter))]
public List<TunnelConfig> Tunnels { get; set; } = new List<TunnelConfig>();
public List<HealthCheckConfig> HealthChecks { get; set; } = new List<HealthCheckConfig>();
}
public class CommonConfig
{
public string? ServerAddr { get; set; }
public string? ConnType { get; set; }
public string? Vkey { get; set; }
public bool AutoReconnection { get; set; }
public string? LogLevel { get; set; }
public string? RateLimit { get; set; } // e.g., "10M"
public string? FlowStoreDriver { get; set; }
public string? MaxConn { get; set; }
public string? MaxTunnelNum { get; set; }
public string? ProxyUrl { get; set; }
public bool TlsEnable { get; set; }
public string? TlsVerify { get; set; } // true/false or path to CA
public string? TlsCertFile { get; set; }
public string? TlsKeyFile { get; set; }
public string? TlsServerName { get; set; }
public bool MultiAccount { get; set; }
public string? ConfigFile { get; set; }
public string? HeartbeatInterval { get; set; }
public string? HeartbeatTimeout { get; set; }
public string? ClientSecret { get; set; }
public string? ClientId { get; set; }
public string? NpHttpEnable { get; set; } // true/false
public string? NpHttpServer { get; set; }
public string? NpHttpUsername { get; set; }
public string? NpHttpPassword { get; set; }
}
[JsonDerivedType(typeof(TcpTunnelConfig), typeDiscriminator: "tcp")]
[JsonDerivedType(typeof(UdpTunnelConfig), typeDiscriminator: "udp")]
[JsonDerivedType(typeof(Socks5TunnelConfig), typeDiscriminator: "socks5")]
[JsonDerivedType(typeof(HttpProxyTunnelConfig), typeDiscriminator: "httpProxy")]
[JsonDerivedType(typeof(SecretTunnelConfig), typeDiscriminator: "secret")]
[JsonDerivedType(typeof(P2pTunnelConfig), typeDiscriminator: "p2p")]
[JsonDerivedType(typeof(FileTunnelConfig), typeDiscriminator: "file")]
public abstract class TunnelConfig
{
public string? Mode { get; set; }
public string? TargetAddr { get; set; } // Target address and port (e.g., "127.0.0.1:80")
public int ServerPort { get; set; } // Port on the NPS server to expose
public string? Remark { get; set; }
public string? ClientId { get; set; } // For multi-account, associate with specific client_id
public string? FlowLimit { get; set; } // e.g., "1G" or "10M"
public string? MaxConn { get; set; }
public string? Password { get; set; } // Used by multiple tunnel types
public string? LocalPath { get; set; } // Used by file tunnel
public string? StripPre { get; set; } // Used by file tunnel
public string? TlsEnable { get; set; } // true/false
public string? ProxyUrl { get; set; } // Used by socks5, httpProxy
public string? HealthCheckType { get; set; } // tcp, http
public string? HealthCheckTarget { get; set; } // ip:port
public string? HealthCheckTimeout { get; set; } // seconds
public string? HealthCheckInterval { get; set; } // seconds
public string? HealthCheckFailMax { get; set; } // count
public string? HealthCheckHttpUrl { get; set; } // for http health check
public string? HealthCheckHttpHost { get; set; } // for http health check
public string? Username { get; set; } // for httpProxy, socks5
public string? AllowIps { get; set; } // comma-separated list of allowed IPs
}
public class TcpTunnelConfig : TunnelConfig
{
// TCP specific properties if any in future
}
public class UdpTunnelConfig : TunnelConfig
{
// UDP specific properties
}
public class Socks5TunnelConfig : TunnelConfig
{
// Socks5 specific properties
}
public class HttpProxyTunnelConfig : TunnelConfig
{
// HTTP Proxy specific properties
}
public class SecretTunnelConfig : TunnelConfig
{
// Secret tunnel specific properties
}
public class P2pTunnelConfig : TunnelConfig
{
public string? PeerUsername { get; set; }
public string? PeerPassword { get; set; }
}
public class FileTunnelConfig : TunnelConfig
{
// File tunnel specific properties (LocalPath, StripPre already in base)
}
public class HealthCheckConfig
{
public string? Type { get; set; } // e.g., "tcp", "http"
public string? Target { get; set; } // Address and port to check (e.g., "127.0.0.1:8080")
public int Timeout { get; set; } // Seconds
public int Interval { get; set; } // Seconds
public int MaxFailures { get; set; } // Number of failures before considering down
public string? HttpUrl { get; set; } // For HTTP checks
public string? HttpHost { get; set; } // For HTTP checks
public string? Task { get; set; } // Associated task/tunnel remark or ID
}
}

9
Nps.Core/Nps.Core.csproj Normal file
View File

@ -0,0 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,81 @@
using System.Collections.Generic;
namespace Nps.Core.Config
{
public class NpsServerConfig
{
public string? RunMode { get; set; }
public string? HttpProxyIp { get; set; }
public int HttpProxyPort { get; set; }
public string? BridgeType { get; set; }
public int BridgePort { get; set; }
public string? PublicVkey { get; set; }
public string? LogLevel { get; set; }
public WebConfig? Web { get; set; }
public string? AuthCryptKey { get; set; }
public int DisconnectTimeout { get; set; }
public FlowConfig? Flow { get; set; }
public IpLimitConfig? IpLimit { get; set; }
public BridgeConfig? Bridge { get; set; }
public HttpsConfig? Https { get; set; }
public NpHttpConfig? NpHttp { get; set; }
public string? TlsEnable { get; set; }
public string? TlsCertFile { get; set; }
public string? TlsKeyFile { get; set; }
public string? Pprof { get; set; }
public int PprofPort { get; set; }
// TLS settings for the bridge/tunneling service
public string? BridgeTlsCertPath { get; set; }
public string? BridgeTlsCertPassword { get; set; }
}
public class WebConfig
{
public string? Host { get; set; }
public string? Username { get; set; }
public string? Password { get; set; }
public int Port { get; set; }
public string? Path { get; set; }
public string? Type { get; set; }
public bool UseCompress { get; set; }
public bool UseCache { get; set; }
}
public class FlowConfig
{
public int StoreDriver { get; set; }
public int ClientMaxLimit { get; set; }
public int ServerMaxLimit { get; set; }
}
public class IpLimitConfig
{
public bool Enable { get; set; }
public int MaxIpConnect { get; set; }
public int MaxTunnelConnect { get; set; }
}
public class BridgeConfig
{
public string? Ip { get; set; }
public string? Domain { get; set; }
public string? ServerPath { get; set; }
}
public class HttpsConfig
{
public bool ProxyTlsEnable { get; set; }
public string? ProxyTlsCertFile { get; set; }
public string? ProxyTlsKeyFile { get; set; }
}
public class NpHttpConfig
{
public bool Enable { get; set; }
public string? Server { get; set; }
public string? Username { get; set; }
public string? Password { get; set; }
public string? ProxyUrl { get; set; }
}
}

View File

@ -0,0 +1,19 @@
namespace Nps.Core.Protocol
{
public static class ProtocolConstants
{
// Represents the Go constant common.CONN_TEST = "4V"
// Decimal values: 18, 52, 86
// Hex values: 0x12, 0x34, 0x56
public static readonly byte[] ConnTestBytes = new byte[] { 0x12, 0x34, 0x56 };
// It might be useful to have the string representation as well,
// but care must be taken with encoding if it's used directly.
// For matching network bytes, ConnTestBytes is primary.
public const string ConnTestString = "\u00124V";
// Other protocol-wide constants can be added here.
// For example, default buffer sizes, timeout values not meant for configuration, etc.
public const int DefaultBufferSize = 4096; // Example
}
}

View File

@ -0,0 +1,34 @@
using System;
namespace Nps.Core.Protocol
{
//[Serializable] // Only needed if using BinaryFormatter, prefer System.Text.Json
public class LinkInformation
{
// Parameterless constructor for JSON deserialization
public LinkInformation() { }
public LinkInformation(string targetHost, string targetType, bool isEncrypted, bool isCompressed, string? clientRemoteAddr, bool isLocalProxy)
{
TargetHost = targetHost;
TargetType = targetType;
IsEncrypted = isEncrypted;
IsCompressed = isCompressed;
ClientRemoteAddr = clientRemoteAddr;
IsLocalProxy = isLocalProxy;
}
public string? TargetHost { get; set; } // e.g., "127.0.0.1:8080"
public string? TargetType { get; set; } // e.g., "tcp", "udp"
// In Go code, Crypt and Compress are bools in conn.Link. Let's map them directly.
public bool IsEncrypted { get; set; }
public bool IsCompressed { get; set; }
public string? ClientRemoteAddr { get; set; } // Original user's IP, if available/forwarded
public bool IsLocalProxy { get; set; } // Indicates if the link is for a local proxy setup (e.g. socks5, http proxy on client side)
// Consider adding other fields if they are part of the Link info exchange
// For example, a unique ID for the link, or specific task ID it relates to.
}
}

View File

@ -0,0 +1,206 @@
using System;
using System.Buffers.Binary;
using System.IO;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace Nps.Core.Protocol.Utils
{
public static class NetworkHelper
{
private const int LengthPrefixSize = 4; // For Int32 length prefix
/// <summary>
/// Writes a single byte flag to the stream. Assumes the flag string is a single character.
/// </summary>
public static async Task WriteFlagAsync(Stream stream, string flag, CancellationToken cancellationToken = default)
{
if (string.IsNullOrEmpty(flag) || flag.Length != 1)
{
throw new ArgumentException("Flag must be a single character string.", nameof(flag));
}
byte[] flagByte = Encoding.ASCII.GetBytes(flag); // Or UTF8 if flags can be non-ASCII
await stream.WriteAsync(flagByte, 0, 1, cancellationToken);
}
/// <summary>
/// Reads a single byte flag from the stream and converts it to a string.
/// </summary>
public static async Task<string?> ReadFlagAsync(Stream stream, CancellationToken cancellationToken = default)
{
byte[] flagByte = new byte[1];
int bytesRead = await ReadWithTimeoutAsync(stream, flagByte, 0, 1, cancellationToken);
if (bytesRead == 1)
{
return Encoding.ASCII.GetString(flagByte); // Or UTF8
}
return null; // Or throw exception if flag is mandatory
}
/// <summary>
/// Writes a byte array to the stream, prefixed by its length (Int32, LittleEndian).
/// </summary>
public static async Task WriteBytesWithLengthPrefixAsync(Stream stream, byte[] data, CancellationToken cancellationToken = default)
{
if (data == null) throw new ArgumentNullException(nameof(data));
byte[] lengthBytes = new byte[LengthPrefixSize];
BinaryPrimitives.WriteInt32LittleEndian(lengthBytes, data.Length);
await stream.WriteAsync(lengthBytes, 0, LengthPrefixSize, cancellationToken);
await stream.WriteAsync(data, 0, data.Length, cancellationToken);
}
/// <summary>
/// Reads a byte array from the stream that is prefixed by its length (Int32, LittleEndian).
/// </summary>
public static async Task<byte[]?> ReadBytesWithLengthPrefixAsync(Stream stream, CancellationToken cancellationToken = default)
{
byte[] lengthBytes = new byte[LengthPrefixSize];
int bytesRead = await ReadWithTimeoutAsync(stream, lengthBytes, 0, LengthPrefixSize, cancellationToken);
if (bytesRead < LengthPrefixSize)
{
// Not enough data for length prefix, could be connection closed or timeout
return null;
}
int dataLength = BinaryPrimitives.ReadInt32LittleEndian(lengthBytes);
if (dataLength < 0) // Or some reasonable max length check
{
throw new IOException("Invalid data length received.");
}
if (dataLength == 0)
{
return Array.Empty<byte>();
}
byte[] data = new byte[dataLength];
bytesRead = await ReadWithTimeoutAsync(stream, data, 0, dataLength, cancellationToken);
if (bytesRead < dataLength)
{
// Not enough data received, could be connection closed or timeout
// Consider how to handle partial reads if that's a valid scenario.
// For now, assuming full message or error.
throw new EndOfStreamException($"Expected {dataLength} bytes but only received {bytesRead}.");
}
return data;
}
/// <summary>
/// Writes a string to the stream, UTF-8 encoded, prefixed by its byte length.
/// </summary>
public static async Task WriteStringWithLengthPrefixAsync(Stream stream, string text, CancellationToken cancellationToken = default)
{
if (text == null) throw new ArgumentNullException(nameof(text));
byte[] data = Encoding.UTF8.GetBytes(text);
await WriteBytesWithLengthPrefixAsync(stream, data, cancellationToken);
}
/// <summary>
/// Reads a UTF-8 encoded string from the stream that was prefixed by its byte length.
/// </summary>
public static async Task<string?> ReadStringWithLengthPrefixAsync(Stream stream, CancellationToken cancellationToken = default)
{
byte[]? data = await ReadBytesWithLengthPrefixAsync(stream, cancellationToken);
return data != null ? Encoding.UTF8.GetString(data) : null;
}
/// <summary>
/// Writes the provided byte array directly to the stream.
/// </summary>
public static async Task WriteFixedLengthBytesAsync(Stream stream, byte[] data, CancellationToken cancellationToken = default)
{
if (data == null) throw new ArgumentNullException(nameof(data));
await stream.WriteAsync(data, 0, data.Length, cancellationToken);
}
/// <summary>
/// Reads a fixed number of bytes from the stream.
/// </summary>
/// <exception cref="EndOfStreamException">Thrown if the end of the stream is reached before reading the specified number of bytes.</exception>
public static async Task<byte[]> ReadFixedLengthBytesAsync(Stream stream, int length, CancellationToken cancellationToken = default)
{
if (length < 0) throw new ArgumentOutOfRangeException(nameof(length));
if (length == 0) return Array.Empty<byte>();
byte[] buffer = new byte[length];
int totalBytesRead = 0;
while (totalBytesRead < length)
{
int bytesRead = await ReadWithTimeoutAsync(stream, buffer, totalBytesRead, length - totalBytesRead, cancellationToken);
if (bytesRead == 0) // Stream closed or timeout occurred before any byte was read in this call
{
throw new EndOfStreamException($"Connection closed prematurely. Expected {length} bytes but only received {totalBytesRead}.");
}
totalBytesRead += bytesRead;
}
return buffer;
}
/// <summary>
/// Helper method to read from a Stream with a timeout if CancellationToken is used.
/// </summary>
private static async Task<int> ReadWithTimeoutAsync(Stream stream, byte[] buffer, int offset, int count, CancellationToken cancellationToken)
{
// If cancellationToken is default or None, just call ReadAsync
if (cancellationToken == default || cancellationToken == CancellationToken.None)
{
return await stream.ReadAsync(buffer, offset, count, cancellationToken);
}
// Create a task that completes when ReadAsync completes or when cancellation is requested
var readTask = stream.ReadAsync(buffer, offset, count, cancellationToken);
// Awaiting the task will throw OperationCanceledException if cancellationToken is triggered during the read.
return await readTask;
}
/// <summary>
/// Writes the predefined CONN_TEST byte sequence to the stream.
/// </summary>
public static async Task WriteConnTestAsync(Stream stream, CancellationToken cancellationToken = default)
{
await stream.WriteAsync(ProtocolConstants.ConnTestBytes, 0, ProtocolConstants.ConnTestBytes.Length, cancellationToken);
}
/// <summary>
/// Reads a sequence of bytes from the stream and verifies if it matches ProtocolConstants.ConnTestBytes.
/// </summary>
/// <returns>True if the sequence matches, false otherwise.</returns>
public static async Task<bool> VerifyConnTestAsync(Stream stream, CancellationToken cancellationToken = default)
{
byte[] buffer = new byte[ProtocolConstants.ConnTestBytes.Length];
try
{
int bytesRead = await ReadWithTimeoutAsync(stream, buffer, 0, buffer.Length, cancellationToken);
if (bytesRead < buffer.Length)
{
return false; // Not enough bytes read to match
}
for (int i = 0; i < buffer.Length; i++)
{
if (buffer[i] != ProtocolConstants.ConnTestBytes[i])
{
return false; // Byte sequence mismatch
}
}
return true; // Sequence matches
}
catch (IOException)
{
// Handle stream read errors (e.g., connection closed) as verification failure
return false;
}
catch (OperationCanceledException)
{
// If operation was cancelled, verification didn't complete
return false;
}
}
}
}

View File

@ -0,0 +1,39 @@
namespace Nps.Core.Protocol
{
public static class WorkTypes
{
// Connection establishment and verification
public const string ConnTest = "t"; // Test connection viability (may not be a work type but an initial handshake byte)
public const string VerifyReq = "v"; // Request from client to verify VKey / credentials
public const string VerifyErr = "e"; // Verification error from server
public const string VerifySuccess = "s"; // Verification success from server
// Core work types for data tunneling / proxying
public const string WorkMain = "m"; // Main work connection (e.g., for TCP, UDP proxy)
public const string WorkChan = "c"; // Channel for data transfer within a main work connection (e.g., new TCP connection for a tunnel)
// Configuration and control messages
public const string WorkConfig = "g"; // Client requests configuration from server
public const string NewConf = "o"; // Client sends new configuration to server (e.g. from npc.conf)
public const string NewHost = "h"; // Client sends new host information to server (part of config sync)
public const string NewTask = "a"; // Client sends new task (tunnel) information (part of config sync)
// Server might also send this to client if server-side changes dictate a new task for client? (Needs clarification)
// Specific tunnel types / features
public const string WorkRegister = "r"; // Client registers itself (e.g. for P2P or specific auth)
public const string WorkSecret = "x"; // Secret tunnel related work
public const string WorkFile = "f"; // File tunnel related work
public const string WorkP2p = "p"; // P2P tunnel related work
// UDP specific
public const string NewUdpConn = "u"; // Server signals client to establish a new UDP connection for a tunnel
// Status and Keep-alive
public const string WorkStatus = "w"; // Client requests status from server / sends its status
public const string KeepAlive = "k"; // Keep-alive packet (not in original list, but common)
// Placeholder for other types if discovered
// Example: Client disconnect signal, error messages etc.
// public const string Disconnect = "d";
}
}

View File

@ -0,0 +1,34 @@
using System;
using System.Security.Cryptography;
using System.Text;
namespace Nps.Core.Security
{
public static class CryptoUtils
{
public static byte[] ToMd5HashBytes(string input)
{
if (input == null) throw new ArgumentNullException(nameof(input));
using (MD5 md5 = MD5.Create())
{
byte[] inputBytes = Encoding.UTF8.GetBytes(input);
byte[] hashBytes = md5.ComputeHash(inputBytes);
return hashBytes;
}
}
public static string ToMd5Hash(string input)
{
if (input == null) throw new ArgumentNullException(nameof(input));
byte[] hashBytes = ToMd5HashBytes(input);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hashBytes.Length; i++)
{
sb.Append(hashBytes[i].ToString("x2")); // Hexadecimal format
}
return sb.ToString();
}
}
}

View File

@ -0,0 +1,58 @@
using System;
using System.Net.Sockets;
using System.Threading;
namespace Nps.Core.Sessions
{
public class ClientSession : IDisposable
{
public string ClientId { get; }
public string? Version { get; set; } // Full version from client
public string? CoreVersion { get; set; } // Core version from client
public Stream? SignalStream { get; set; }
public Stream? MuxStream { get; set; } // Placeholder, will be replaced by MUX handler later
public DateTime LastHeartbeat { get; set; }
public CancellationTokenSource Cts { get; }
private bool _disposed = false;
public ClientSession(string clientId)
{
ClientId = clientId ?? throw new ArgumentNullException(nameof(clientId));
Cts = new CancellationTokenSource();
LastHeartbeat = DateTime.UtcNow; // Initialize to now
}
public void UpdateHeartbeat()
{
LastHeartbeat = DateTime.UtcNow;
}
public void Close()
{
if (!_disposed)
{
if (!Cts.IsCancellationRequested)
{
Cts.Cancel();
}
// Close streams carefully, they might be null or already closed
// The owner of the session should log any errors during stream closure if necessary.
try { SignalStream?.Close(); SignalStream?.Dispose(); } catch { /* Ignore */ }
try { MuxStream?.Close(); MuxStream?.Dispose(); } catch { /* Ignore */ }
Cts.Dispose();
_disposed = true;
}
}
public void Dispose()
{
Close();
GC.SuppressFinalize(this);
}
}
}

View File

@ -0,0 +1,106 @@
using System;
using System.Collections.Generic;
using System.Text.Json;
using System.Text.Json.Serialization;
using Nps.Core.Config;
namespace Nps.Core.Serialization
{
public class TunnelListJsonConverter : JsonConverter<List<TunnelConfig>>
{
public override List<TunnelConfig> Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
if (reader.TokenType != JsonTokenType.StartArray)
{
throw new JsonException("Expected StartArray token");
}
var list = new List<TunnelConfig>();
var optionsWithoutThisConverter = new JsonSerializerOptions(options);
optionsWithoutThisConverter.Converters.Remove(this); // Avoid re-entrancy
while (reader.Read())
{
if (reader.TokenType == JsonTokenType.EndArray)
{
return list;
}
if (reader.TokenType == JsonTokenType.StartObject)
{
// Peek at the "Mode" property to determine the type
Utf8JsonReader readerClone = reader; // Clone to read ahead without advancing the main reader
string? mode = null;
string? currentPropertyName = null;
while(readerClone.Read() && readerClone.TokenType != JsonTokenType.EndObject)
{
if (readerClone.TokenType == JsonTokenType.PropertyName)
{
currentPropertyName = readerClone.GetString();
}
else if (readerClone.TokenType == JsonTokenType.String && currentPropertyName == "Mode")
{
mode = readerClone.GetString();
break;
}
}
if (string.IsNullOrEmpty(mode))
{
// This case should ideally not be hit if JSON is well-formed and Mode is present.
// If it can happen, one might deserialize to JsonElement first, inspect, then convert.
// For now, throwing an exception is clear.
throw new JsonException("Tunnel 'Mode' property not found, not a string, or not found early enough in the JSON object for this converter logic.");
}
TunnelConfig? tunnel = mode.ToLowerInvariant() switch
{
"tcp" => JsonSerializer.Deserialize<TcpTunnelConfig>(ref reader, optionsWithoutThisConverter),
"udp" => JsonSerializer.Deserialize<UdpTunnelConfig>(ref reader, optionsWithoutThisConverter),
"socks5" => JsonSerializer.Deserialize<Socks5TunnelConfig>(ref reader, optionsWithoutThisConverter),
"httpproxy" => JsonSerializer.Deserialize<HttpProxyTunnelConfig>(ref reader, optionsWithoutThisConverter),
"secret" => JsonSerializer.Deserialize<SecretTunnelConfig>(ref reader, optionsWithoutThisConverter),
"p2p" => JsonSerializer.Deserialize<P2pTunnelConfig>(ref reader, optionsWithoutThisConverter),
"file" => JsonSerializer.Deserialize<FileTunnelConfig>(ref reader, optionsWithoutThisConverter),
_ => throw new JsonException($"Unknown tunnel mode: {mode}")
};
if (tunnel != null)
{
list.Add(tunnel);
}
// If tunnel is null after deserialization (e.g. if the JSON object was just "null"),
// it's implicitly skipped, which is often desired.
}
else
{
// Skip over other token types if necessary, or throw error
throw new JsonException($"Unexpected token {reader.TokenType}");
}
}
throw new JsonException("Expected EndArray token");
}
public override void Write(Utf8JsonWriter writer, List<TunnelConfig> value, JsonSerializerOptions options)
{
writer.WriteStartArray();
var optionsWithoutThisConverter = new JsonSerializerOptions(options);
optionsWithoutThisConverter.Converters.Remove(this); // Avoid re-entrancy
foreach (var tunnel in value)
{
if (tunnel == null)
{
writer.WriteNullValue();
continue;
}
// Rely on [JsonDerivedType] attributes for serialization if System.Text.Json supports it well enough.
// Or explicitly cast and serialize.
JsonSerializer.Serialize(writer, tunnel, tunnel.GetType(), optionsWithoutThisConverter);
}
writer.WriteEndArray();
}
}
}

12
Nps.Core/VersionInfo.cs Normal file
View File

@ -0,0 +1,12 @@
namespace Nps.Core
{
public static class VersionInfo
{
// These should ideally match or be compatible with the Go version's core protocol version.
// Example: "0.1" or similar, reflecting the core interop version.
public const string CoreVersion = "0.26.10"; // Placeholder, align with Go's version.GetVersion() output for core features
// This can be the specific .NET implementation's version.
public const string FullVersion = "0.1.0-dotnet"; // Example version for this .NET port
}
}

View File

@ -0,0 +1,23 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v8.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v8.0": {
"Nps.Core/1.0.0": {
"runtime": {
"Nps.Core.dll": {}
}
}
}
},
"libraries": {
"Nps.Core/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
}
}
}

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")]

View File

@ -0,0 +1,21 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Nps.Core")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+df8006792ee2f3d27bf38aeea97fcd9a61e81842")]
[assembly: System.Reflection.AssemblyProductAttribute("Nps.Core")]
[assembly: System.Reflection.AssemblyTitleAttribute("Nps.Core")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
// Generated by the MSBuild WriteCodeFragment class.

View File

@ -0,0 +1 @@
3c5b813e1db179eb307d54053b71d4a32870fd7217e49133f0dd3a4ca94b6837

View File

@ -0,0 +1,13 @@
is_global = true
build_property.TargetFramework = net8.0
build_property.TargetPlatformMinVersion =
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = Nps.Core
build_property.ProjectDir = /app/Nps.Core/
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =

View File

@ -0,0 +1,8 @@
// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

Binary file not shown.

View File

@ -0,0 +1 @@
ccc3345d4b8043b0da3ec87f1246aac85996f7bafeb0fa62d384d90a39d126dd

View File

@ -0,0 +1,12 @@
/app/Nps.Core/obj/Debug/net8.0/Nps.Core.GeneratedMSBuildEditorConfig.editorconfig
/app/Nps.Core/obj/Debug/net8.0/Nps.Core.AssemblyInfoInputs.cache
/app/Nps.Core/obj/Debug/net8.0/Nps.Core.AssemblyInfo.cs
/app/Nps.Core/obj/Debug/net8.0/Nps.Core.csproj.CoreCompileInputs.cache
/app/Nps.Core/obj/Debug/net8.0/Nps.Core.sourcelink.json
/app/Nps.Core/bin/Debug/net8.0/Nps.Core.deps.json
/app/Nps.Core/bin/Debug/net8.0/Nps.Core.dll
/app/Nps.Core/bin/Debug/net8.0/Nps.Core.pdb
/app/Nps.Core/obj/Debug/net8.0/Nps.Core.dll
/app/Nps.Core/obj/Debug/net8.0/refint/Nps.Core.dll
/app/Nps.Core/obj/Debug/net8.0/Nps.Core.pdb
/app/Nps.Core/obj/Debug/net8.0/ref/Nps.Core.dll

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
{"documents":{"/app/*":"https://raw.githubusercontent.com/Shurrik0030/nps/df8006792ee2f3d27bf38aeea97fcd9a61e81842/*"}}

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More