aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md2
-rw-r--r--back-end/src/Endpoints/BmAccountEndpoint.cs8
-rw-r--r--back-end/src/Endpoints/BookmarkEndpoint.cs21
-rw-r--r--back-end/src/Endpoints/SiteLookupEndpoint.cs10
-rw-r--r--back-end/src/SimpleBookmark.csproj8
-rw-r--r--back-end/src/SimpleBookmarkEntry.cs30
-rw-r--r--ci/build.env30
-rw-r--r--ci/compile.ps118
-rw-r--r--ci/config-templates/Essentials.Accounts-template.json6
-rw-r--r--ci/config-templates/PageRouter-template.json2
-rw-r--r--ci/config-templates/SessionProvider-template.json23
-rw-r--r--ci/config-templates/SimpleBookmark-template.json8
-rw-r--r--ci/config-templates/config-template.json148
-rw-r--r--ci/container/Dockerfile38
-rw-r--r--ci/container/Taskfile.yaml37
-rw-r--r--ci/container/docker-compose.yaml1
-rw-r--r--ci/container/run.sh14
-rw-r--r--ci/plugins.taskfile.yaml13
-rw-r--r--ci/taskfile.yaml12
-rw-r--r--front-end/package-lock.json506
20 files changed, 474 insertions, 461 deletions
diff --git a/README.md b/README.md
index 998109e..408196b 100644
--- a/README.md
+++ b/README.md
@@ -60,7 +60,7 @@ Download the latest alpine build package: [sb-alpine3.19-oci.tgz](https://www.va
This archive contains all the software needed to build the image locally. It also comes with a docker-compose.yaml file for easy setup and deployment. Here is the gist:
``` shell
tar -xzf sb-alpine3.19-oci.tgz
-docker build . -t vnuge/simple-bookmark
+docker-compose build
docker-compose up -d
```
_Of course there is more setup involved, so take a look at the docs for more info_
diff --git a/back-end/src/Endpoints/BmAccountEndpoint.cs b/back-end/src/Endpoints/BmAccountEndpoint.cs
index 24ddb90..81b2ff3 100644
--- a/back-end/src/Endpoints/BmAccountEndpoint.cs
+++ b/back-end/src/Endpoints/BmAccountEndpoint.cs
@@ -36,11 +36,12 @@ using VNLib.Plugins.Extensions.Loading;
using VNLib.Plugins.Extensions.Validation;
using VNLib.Plugins.Extensions.Loading.Users;
using VNLib.Plugins.Extensions.Loading.Events;
-
-using SimpleBookmark.Model;
+using VNLib.Plugins.Extensions.Loading.Routing;
namespace SimpleBookmark.Endpoints
{
+ [EndpointPath("{{path}}")]
+ [EndpointLogName("Accounts")]
[ConfigurationName("registration")]
internal sealed class BmAccountEndpoint : UnprotectedWebEndpoint
{
@@ -58,9 +59,6 @@ namespace SimpleBookmark.Endpoints
public BmAccountEndpoint(PluginBase plugin, IConfigScope config)
{
- string path = config.GetRequiredProperty("path", p => p.GetString()!);
- InitPathAndLog(path, plugin.Log);
-
//get setup mode and enabled startup arguments
SetupMode = plugin.HostArgs.HasArgument("--setup");
Enabled = !plugin.HostArgs.HasArgument("--disable-registation");
diff --git a/back-end/src/Endpoints/BookmarkEndpoint.cs b/back-end/src/Endpoints/BookmarkEndpoint.cs
index ae2932d..d76cb35 100644
--- a/back-end/src/Endpoints/BookmarkEndpoint.cs
+++ b/back-end/src/Endpoints/BookmarkEndpoint.cs
@@ -39,6 +39,7 @@ using VNLib.Plugins.Essentials.Accounts;
using VNLib.Plugins.Essentials.Endpoints;
using VNLib.Plugins.Essentials.Extensions;
using VNLib.Plugins.Extensions.Loading;
+using VNLib.Plugins.Extensions.Loading.Routing;
using VNLib.Plugins.Extensions.Data.Extensions;
using VNLib.Plugins.Extensions.Validation;
@@ -47,25 +48,15 @@ using SimpleBookmark.Model;
namespace SimpleBookmark.Endpoints
{
+ [EndpointPath("{{path}}")]
+ [EndpointLogName("Bookmarks")]
[ConfigurationName("bm_endpoint")]
- internal sealed class BookmarkEndpoint : ProtectedWebEndpoint
+ internal sealed class BookmarkEndpoint(PluginBase plugin, IConfigScope config) : ProtectedWebEndpoint
{
private static readonly IValidator<BookmarkEntry> BmValidator = BookmarkEntry.GetValidator();
- private readonly BookmarkStore Bookmarks;
- private readonly BookmarkStoreConfig BmConfig;
-
- public BookmarkEndpoint(PluginBase plugin, IConfigScope config)
- {
- string? path = config.GetRequiredProperty("path", p => p.GetString()!);
- InitPathAndLog(path, plugin.Log);
-
- //Init bookmark store
- Bookmarks = plugin.GetOrCreateSingleton<BookmarkStore>();
-
- //Load config
- BmConfig = config.GetRequiredProperty("config", p => p.Deserialize<BookmarkStoreConfig>()!);
- }
+ private readonly BookmarkStore Bookmarks = plugin.GetOrCreateSingleton<BookmarkStore>();
+ private readonly BookmarkStoreConfig BmConfig = config.GetRequiredProperty<BookmarkStoreConfig>("config");
///<inheritdoc/>
protected override async ValueTask<VfReturnType> GetAsync(HttpEntity entity)
diff --git a/back-end/src/Endpoints/SiteLookupEndpoint.cs b/back-end/src/Endpoints/SiteLookupEndpoint.cs
index effe6aa..f184ea9 100644
--- a/back-end/src/Endpoints/SiteLookupEndpoint.cs
+++ b/back-end/src/Endpoints/SiteLookupEndpoint.cs
@@ -28,11 +28,14 @@ using VNLib.Plugins.Essentials.Endpoints;
using VNLib.Plugins.Essentials.Extensions;
using VNLib.Plugins.Extensions.Loading;
using VNLib.Plugins.Extensions.Validation;
+using VNLib.Plugins.Extensions.Loading.Routing;
using SimpleBookmark.PlatformFeatures.Curl;
namespace SimpleBookmark.Endpoints
{
+ [EndpointPath("{{path}}")]
+ [EndpointLogName("Site Lookup")]
[ConfigurationName("curl")]
internal sealed class SiteLookupEndpoint : ProtectedWebEndpoint
{
@@ -44,11 +47,8 @@ namespace SimpleBookmark.Endpoints
public SiteLookupEndpoint(PluginBase plugin, IConfigScope config)
{
- string path = config.GetRequiredProperty("path", p => p.GetString()!);
- InitPathAndLog(path, plugin.Log);
-
- string exePath = config.GetValueOrDefault("exe_path", p => p.GetString(), DefaultCurlExecName);
- bool httspOnly = config.GetValueOrDefault("https_only", p => p.GetBoolean(), false);
+ string exePath = config.GetValueOrDefault("exe_path", DefaultCurlExecName);
+ bool httspOnly = config.GetValueOrDefault("https_only", false);
//Optional extra arguments
string[] extrArgs = config.GetValueOrDefault(
diff --git a/back-end/src/SimpleBookmark.csproj b/back-end/src/SimpleBookmark.csproj
index 382d141..ea8ade9 100644
--- a/back-end/src/SimpleBookmark.csproj
+++ b/back-end/src/SimpleBookmark.csproj
@@ -33,10 +33,10 @@
</ItemGroup>
<ItemGroup>
- <PackageReference Include="VNLib.Plugins.Extensions.Data" Version="0.1.0-ci0064" />
- <PackageReference Include="VNLib.Plugins.Extensions.Loading" Version="0.1.0-ci0064" />
- <PackageReference Include="VNLib.Plugins.Extensions.Loading.Sql" Version="0.1.0-ci0064" />
- <PackageReference Include="VNLib.Plugins.Extensions.Validation" Version="0.1.0-ci0064" />
+ <PackageReference Include="VNLib.Plugins.Extensions.Data" Version="0.1.0-ci0065" />
+ <PackageReference Include="VNLib.Plugins.Extensions.Loading" Version="0.1.0-ci0065" />
+ <PackageReference Include="VNLib.Plugins.Extensions.Loading.Sql" Version="0.1.0-ci0065" />
+ <PackageReference Include="VNLib.Plugins.Extensions.Validation" Version="0.1.0-ci0065" />
<PackageReference Include="VNLib.Plugins.Extensions.VNCache" Version="0.1.0-ci0057" />
</ItemGroup>
diff --git a/back-end/src/SimpleBookmarkEntry.cs b/back-end/src/SimpleBookmarkEntry.cs
index 13b94a5..a3d9eb9 100644
--- a/back-end/src/SimpleBookmarkEntry.cs
+++ b/back-end/src/SimpleBookmarkEntry.cs
@@ -22,9 +22,6 @@
*/
using System;
-using System.Linq;
-using System.Text;
-using System.Text.Json;
using VNLib.Plugins;
using VNLib.Utils.Logging;
@@ -76,7 +73,7 @@ namespace SimpleBookmark
@"
******************************************************************************
Simple-Bookmark - A linkding inspired, self hosted, bookmark manager
- By Vaughn Nugent - vnpublic @proton.me
+ By Vaughn Nugent - vnpublic@proton.me
https://www.vaughnnugent.com/resources/software
License: GNU Affero General Public License v3.0
This application comes with ABSOLUTELY NO WARRANTY.
@@ -84,27 +81,10 @@ namespace SimpleBookmark
Documentation: https://www.vaughnnugent.com/resources/software/articles?tags=docs,_simple-bookmark
GitHub: https://github.com/VnUgE/simple-bookmark
{warning}
- Your server is now running at the following locations:{0}
-******************************************************************************";
-
- string[] interfaces = HostConfig.GetProperty("virtual_hosts")
- .EnumerateArray()
- .Select(e =>
- {
- JsonElement el = e.GetProperty("interface");
- string ipAddress = el.GetProperty("address").GetString()!;
- int port = el.GetProperty("port").GetInt32();
- return $"{ipAddress}:{port}";
- })
- .ToArray();
-
- StringBuilder sb = new();
- foreach (string intf in interfaces)
- {
- sb.Append("\n\t");
- sb.AppendLine(intf);
- }
+\******************************************************************************";
+
+
//See if setup mode is enabled
bool setupMode = HostArgs.HasArgument("--setup") && !HostArgs.HasArgument("--disable-registation");
@@ -112,7 +92,7 @@ namespace SimpleBookmark
? "\nWARNING: This server is in setup mode. Account registation is open to all users.\n"
: string.Empty;
- Log.Information(template, warnMessage, sb);
+ Log.Information(template, warnMessage);
}
}
}
diff --git a/ci/build.env b/ci/build.env
index b0933f0..5e3b8ce 100644
--- a/ci/build.env
+++ b/ci/build.env
@@ -18,32 +18,19 @@ COMPRESSION_LIB_PATH=lib/vnlib_compress.dll
# Plugins
##########
-DEBUG_PLUGINS=false
-MAX_LOGIN_ATTEMPS=10
-MAX_BOOKMARKS=5000
-REG_TOKEN_DURATION_MIN=360
-
##########
# HTTP
##########
-#sets the absolute maxium upload size
-MAX_CONTENT_LENGTH=5120000
-
-HTTP_TRACE_ON=false
-HTTP_DOWNSTREAM_SERVERS=[]
-
#default ssl dir is ssl/
-SSL_JSON={"cert": "ssl/cert.pem", "privkey":"ssl/key.pem"}
+TLS_ENABLE=true
+TLS_CERT=ssl/cert.pem
+TLS_PRIVATE_KEY=ssl/key.pem
#############
# HC VAULT
#############
-HC_VAULT_ADDR=
-HC_VAULT_TOKEN=
-HC_VAULT_TRUST_CERT=false
-
##########
# SQL
##########
@@ -57,20 +44,9 @@ SQL_CONNECTION_STRING=Data Source=data/simple-bookmark.db;
##############
CACHE_ASM_PATH=VNLib.Data.Caching.Providers.VNCache.dll
-REDIS_CONNECTION_STRING=
-VNCACHE_INITIAL_NODES=[]
-
-#for self contained apps, memcache needs to be true
-MEMCACHE_ONLY=true
############
# SECRETS
############
PASSWORD_PEPPER=file://secrets/password-pepper.txt
-DATABASE_PASSWORD=
-REDIS_PASSWORD=
-
-#no cache, so clear vars
-VNCACHE_CLIENT_PRIVATE_KEY=
-VNCACHE_CACHE_PUBLIC_KEY= \ No newline at end of file
diff --git a/ci/compile.ps1 b/ci/compile.ps1
index 2858d06..459f304 100644
--- a/ci/compile.ps1
+++ b/ci/compile.ps1
@@ -5,15 +5,19 @@ $templateFiles = Get-ChildItem -Path $inputDir -Filter "*-template.json" -File
foreach ($file in $templateFiles) {
$baseFilename = $file.BaseName + '.json'
$templateFilePath = $file.FullName
-
- #remove the -template.json suffix
- $outputFilePath = Join-Path -Path $outputDir -ChildPath $baseFilename.replace("-template","")
- #substitute environment variables for file variables
- Get-Content $templateFilePath | ForEach-Object {
- if ($_ -match "\$\{((\w+))\}")
+ #remove the -template.json suffix
+ $outputFilePath = Join-Path -Path $outputDir -ChildPath $baseFilename.replace("-template","")
+
+ #substitute environment variables for file variables
+ Get-Content $templateFilePath | ForEach-Object {
+ if ($_ -match "\$\{(\w+)(:-([^\}]+))?\}")
{
- $_ -replace "\$\{(\w+)\}",$([Environment]::GetEnvironmentVariable($Matches[1]))
+ $varName = $Matches[1]
+ $defaultValue = if ($Matches[3]) { $Matches[3] } else { '' }
+ $envValue = [Environment]::GetEnvironmentVariable($varName)
+ if (!$envValue) { $envValue = $defaultValue }
+ $_ -replace "\$\{(\w+)(:-([^\}]+))?\}", $envValue
}
else
{
diff --git a/ci/config-templates/Essentials.Accounts-template.json b/ci/config-templates/Essentials.Accounts-template.json
index 54e9b58..eba3528 100644
--- a/ci/config-templates/Essentials.Accounts-template.json
+++ b/ci/config-templates/Essentials.Accounts-template.json
@@ -1,12 +1,12 @@
{
- "debug": ${DEBUG_PLUGINS},
+ "debug": ${DEBUG_PLUGINS:-false}, //Enables obnoxious debug logging
//endpoints
"login_endpoint": {
"path": "/api/account/login",
- "max_login_attempts": ${MAX_LOGIN_ATTEMPS}, //10 failed attempts in 10 minutes
- "failed_attempt_timeout_sec": 600 //10 minutes
+ "max_login_attempts": ${MAX_LOGIN_ATTEMPS:-10}, //10 failed attempts in 10 minutes
+ "failed_attempt_timeout_sec": 600 //10 minutes
},
"keepalive_endpoint": {
diff --git a/ci/config-templates/PageRouter-template.json b/ci/config-templates/PageRouter-template.json
index 86a51f8..7fe27c1 100644
--- a/ci/config-templates/PageRouter-template.json
+++ b/ci/config-templates/PageRouter-template.json
@@ -1,5 +1,5 @@
{
- "debug": ${DEBUG_PLUGINS},
+ "debug": ${DEBUG_PLUGINS:-false}, //Enables obnoxious debug logging
"store": {
//All builds require the routes.xml file in the config directory even after variable substitution
"route_file": "config/routes.xml"
diff --git a/ci/config-templates/SessionProvider-template.json b/ci/config-templates/SessionProvider-template.json
index 328f06f..b855bc8 100644
--- a/ci/config-templates/SessionProvider-template.json
+++ b/ci/config-templates/SessionProvider-template.json
@@ -1,25 +1,20 @@
{
- "debug": ${DEBUG_PLUGINS},
+ "debug": ${DEBUG_PLUGINS:-false}, //Enables obnoxious debug logging
//Provider assemblies to load
"provider_assemblies": [ "VNLib.Plugins.Sessions.VNCache.dll" ],
//Web session provider, valid format for VNCache and also memory sessions
"web": {
- //Cache system key prefix
- "cache_prefix": "websessions",
- //The session cookie name
- "cookie_name": "sb-session",
- //Size in bytes for generated session ids
- "cookie_size": 40,
- //time (in seconds) a session is valid for
- "valid_for_sec": 3600,
- //The maxium number of connections waiting for the cache server responses
- "max_waiting_connections": 100,
- //Enforce strict cross-origin session checks
- "strict_cors": true,
+
+ "cache_prefix": "websessions", //Cache system key prefix
+ "cookie_name": "sb-session", //The session cookie name
+ "cookie_size": 40, //Size in bytes for generated session ids
+ "valid_for_sec": 3600, //time (in seconds) a session is valid for
+ "max_waiting_connections": 100, //The maxium number of connections waiting for the cache server responses
+
///Enforces strict TLS to help prevent tls downgrades based on stored session variables (privacy note: this can be leaked through brute-forced if session id is stolen)
- "strict_tls_protocol": true
+ "strict_tls_protocol": ${SESSION_STRICT_TLS:-true}
}
} \ No newline at end of file
diff --git a/ci/config-templates/SimpleBookmark-template.json b/ci/config-templates/SimpleBookmark-template.json
index 8736d8d..dcbf701 100644
--- a/ci/config-templates/SimpleBookmark-template.json
+++ b/ci/config-templates/SimpleBookmark-template.json
@@ -1,7 +1,7 @@
{
//Comments are allowed
- "debug": ${DEBUG_PLUGINS}, //Enables obnoxious debug logging
+ "debug": ${DEBUG_PLUGINS:-false}, //Enables obnoxious debug logging
"bm_endpoint": {
@@ -10,7 +10,7 @@
"config": {
"max_limit": 100, //Max results per page
"default_limit": 20, //Default results per page
- "user_quota": ${MAX_BOOKMARKS} //Max bookmarks per user
+ "user_quota": ${MAX_BOOKMARKS:-5000} //Max bookmarks per user
}
},
@@ -29,7 +29,7 @@
"registration": {
"path": "/api/register", //Path for the registration endpoint
- "token_lifetime_mins": ${REG_TOKEN_DURATION_MIN}, //Token lifetime in minutes
- "key_regen_interval_mins": ${REG_TOKEN_DURATION_MIN}0 //Signing key regeneration interval in minutes
+ "token_lifetime_mins": ${REG_TOKEN_DURATION_MIN:-360}, //Token lifetime in minutes
+ "key_regen_interval_mins": ${REG_TOKEN_DURATION_MIN:-360}0 //Signing key regeneration interval in minutes
}
} \ No newline at end of file
diff --git a/ci/config-templates/config-template.json b/ci/config-templates/config-template.json
index 7055678..1573461 100644
--- a/ci/config-templates/config-template.json
+++ b/ci/config-templates/config-template.json
@@ -3,41 +3,38 @@
//Host application config, config is loaded as a read-only DOM that is available
//to the host and loaded child plugins, all elements are available to plugins via the 'HostConfig' property
- "http": {
- //The defaut HTTP version to being requests with (does not support http/2 yet)
- "default_version": "HTTP/1.1",
- //The maxium size (in bytes) of response messges that will be compressed
- "compression_limit": 512000,
- //Minium response size (in bytes) to compress
- "compression_minimum": 2048,
- //The size of the buffer to use when parsing multipart/form data uploads
- "multipart_max_buf_size": 8192,
- //The maxium ammount of data (in bytes) allows for mulitpart/form data file uploads
- "multipart_max_size": 80240,
- //Absolute maximum size (in bytes) of the request entity body (exludes headers)
- "max_entity_size": ${MAX_CONTENT_LENGTH},
- //Keepalive ms for HTTP1.1 keepalive connections
- "keepalive_ms": 1000000,
- //The buffer size to use when parsing headers (also the maxium request header size allowed)
- "header_buf_size": 8128,
- //The maxium number of headers allowed in an HTTP request message
- "max_request_header_count": 50,
- //The maxium number of allowed network connections, before 503s will be issued automatically and connections closed
- "max_connections": 5000,
- //The size in bytes of the buffer to use when writing response messages
- "response_buf_size": 65536,
- //time (in ms) to wait for a response from an active connection in recv mode, before dropping it
- "recv_timeout_ms": 5000,
- //Time in ms to wait for the client to accept transport data before terminating the connection
- "send_timeout_ms": 60000,
- //The size (in bytes) of the buffer used to store all response header data
- "response_header_buf_size": 16384,
- //Max number of file uploads allowed per request
- "max_uploads_per_request": 10
+ "tcp": {
+ "keepalive_sec": 0, //How long to wait for a keepalive response before closing the connection (0 to disable tcp keepalive)
+ "keepalive_interval_sec": 0, //How long to wait between keepalive probes
+ "max_recv_size": 655360, //640k absolute maximum recv buffer (defaults to OS socket buffer size)
+ "max_connections": ${HTTP_MAX_CONS:-5000}0, //Per listener instance
+ "backlog": 1000, //OS socket backlog,
+
+ "tx_buffer": 65536, //OS socket send buffer size 64k is a good default
+ "rx_buffer": 65536 //OS socket recv buffer size 64k is a good default
},
- //Compression is installed in the container at lib/ directory along with the native library supporting gzip and brotli
- "compression_lib": "lib/vnlib.net.compression/VNLib.Net.Compression.dll",
+ "http": {
+ "default_version": "HTTP/1.1", //The defaut HTTP version to being requests with (does not support http/2 yet)
+ "multipart_max_buf_size": 8192, //The size of the buffer to use when parsing multipart/form data uploads
+ "multipart_max_size": 80240, //The maxium ammount of data (in bytes) allows for mulitpart/form data file uploads
+ "max_entity_size": ${MAX_CONTENT_LENGTH:-5120000}, //Absolute maximum size (in bytes) of the request entity body (exludes headers)
+ "header_buf_size": 8128, //The buffer size to use when parsing headers (also the maxium request header size allowed)
+ "max_request_header_count": 50, //The maxium number of headers allowed in an HTTP request message
+ "max_connections":${HTTP_MAX_CONS:-5000}, //The maxium number of allowed network connections, before 503s will be issued automatically and connections closed
+ "response_header_buf_size": 8128, //The size (in bytes) of the buffer used to store all response header data
+ "max_uploads_per_request": 10, //Max number of multi-part file uploads allowed per request
+ "keepalive_ms": 1000000, //Keepalive ms for HTTP1.1 keepalive connections
+ "recv_timeout_ms": 5000, //time (in ms) to wait for a response from an active connection in recv mode, before dropping it
+ "send_timeout_ms": 60000, //Time in ms to wait for the client to accept transport data before terminating the connection
+
+ "compression": {
+ "enabled": ${COMPRESSION_ON:-true}, //controls compression globally
+ "assembly": "lib/vnlib.net.compression/VNLib.Net.Compression.dll", //A custom assembly path (ex: 'VNLib.Net.Compression.dll')
+ "max_size": ${COMPRESSION_MAX:-512000}, //Maxium size of a response to compress before it's bypassed
+ "min_size": ${COMPRESSION_MIN:-2048} //Minium size of a response to compress, if smaller compression is bypassed
+ }
+ },
//Setup the native lib
"vnlib.net.compression": {
@@ -45,24 +42,30 @@
"level": 1
},
-
- //Maxium ammount of time a request is allowed to be processed (includes loading or waiting for sessions) before operations will be cancelled and a 503 returned
- "max_execution_time_ms": 20000,
-
//Collection of objects to define hosts+interfaces to build server listeners from
"virtual_hosts": [
{
- "trace": ${HTTP_TRACE_ON},
+ "trace": ${HTTP_TRACE_ON:-false},
+ "force_port_check": false, //disable port checking by default (useful for containers)
//The interface to bind to, you may not mix TLS and non-TLS connections on the same interface
- "interface": {
- "address": "0.0.0.0",
- "port": 8080
- },
+ "interfaces": [
+ {
+ "address": "0.0.0.0",
+ "port": ${HTTP_PORT:-8080},
+
+ "ssl": ${TLS_ENABLE:-true}, //Enables TLS for this interface for this host specifically
+ "certificate": "${TLS_CERT}", //Cert may be pem or pfx (include private key in pfx, or include private key in a pem file)
+ "private_key": "${TLS_PRIVATE_KEY}", //A pem encoded private key, REQUIRED if using a PEM certificate, may be encrypted with a password
+ "password": null, //An optional password for the ssl private key
+ "client_cert_required": false, //requires that any client connecting to this host present a valid certificate
+ "use_os_ciphers": false //Use the OS's ciphers instead of the hard-coded ciphers
+ }
+ ],
//Collection of "trusted" servers to allow proxy header support from
- "downstream_servers": ${HTTP_DOWNSTREAM_SERVERS},
+ "downstream_servers": ${HTTP_DOWNSTREAM_SERVERS:-[]},
//The hostname to listen for, "*" as wildcard, and "[system]" as the default hostname for the current machine
"hostname": "*",
@@ -76,16 +79,31 @@
//A list of error file objects, files are loaded into memory (and watched for changes) and returned when the specified error code occurs
"error_files": [],
- //The default
- "cache_default_sec": 864000,
+ "cors": {
+ "enabled": false, //Enables cors protections for this host
+ "deny_cors_connections": false, //If true, all cors connections will be denied
+ "allowed_origins": [ ]
+ },
+
+ //Key-value headers object, some headers are special and are controlled by the vh processor
+ "headers": {
+ "Server": "Simple-Bookmark-Server",
+ "X-Frame-Options": "DENY",
+ "X-Content-Type-Options": "nosniff",
+ "X-XSS-Protection": "1; mode=block",
+ },
- "ssl": ${SSL_JSON},
+ //The default
+ "cache_default_sec": 864000,
+ //Maxium ammount of time a request is allowed to be processed (includes loading or waiting for sessions) before operations will be cancelled and a 503 returned
+ "max_execution_time_ms": 20000,
}
],
//Defines the directory where plugin's are to be loaded from
"plugins": {
+ "enabled": true,
//Hot-reload creates collectable assemblies that allow full re-load support in the host application, should only be used for development purposes!
"hot_reload": false,
"path": "plugins/",
@@ -93,27 +111,31 @@
"assets": "plugins/assets/"
},
- "sys_log": {
- "path": "data/logs/sys-log.txt",
- "flush_sec": 5,
- "retained_files": 31,
- "file_size_limit": 10485760,
- "interval": "infinite"
- },
-
- "app_log": {
- "path": "data/logs/app-log.txt",
- "flush_sec": 5,
- "retained_files": 31,
- "file_size_limit": 10485760,
- "interval": "infinite"
+ "logs":{
+ "sys_log": {
+ "enabled": ${LOG_ENABLE_FILES:-true},
+ "path": "data/logs/sys-log.txt",
+ "flush_sec": 5,
+ "retained_files": 31,
+ "file_size_limit": 10485760,
+ "interval": "infinite"
+ },
+
+ "app_log": {
+ "enabled": ${LOG_ENABLE_FILES:-true},
+ "path": "data/logs/app-log.txt",
+ "flush_sec": 5,
+ "retained_files": 31,
+ "file_size_limit": 10485760,
+ "interval": "infinite"
+ }
},
//HASHICORP VAULT
"hashicorp_vault": {
"url": "${HC_VAULT_ADDR}",
"token": "${HC_VAULT_TOKEN}",
- "trust_certificate": ${HC_VAULT_TRUST_CERT},
+ "trust_certificate": ${HC_VAULT_TRUST_CERT:-false},
},
//SQL CONFIG
@@ -139,13 +161,13 @@
"discovery_interval_sec": 120,
//Initial nodes to discover from
- "initial_nodes": ${VNCACHE_INITIAL_NODES},
+ "initial_nodes": ${VNCACHE_INITIAL_NODES:-[]},
//Disable TLS
"use_tls": false,
//Setting this value to true will cause the cache store to load a memory-only instance, without remote backing
- "memory_only": ${MEMCACHE_ONLY},
+ "memory_only": ${MEMCACHE_ONLY:-true},
//enable memory cache
"memory_cache": {
diff --git a/ci/container/Dockerfile b/ci/container/Dockerfile
index f8cdfa3..84a4fc1 100644
--- a/ci/container/Dockerfile
+++ b/ci/container/Dockerfile
@@ -34,7 +34,7 @@ COPY --from=native-cont /build/out /app/lib
#copy self signed ssl certs for first startup
COPY --from=native-cont /build/ssl /app/ssl
-RUN apk update && apk add --no-cache gettext icu-libs dumb-init curl
+RUN apk update && apk add --no-cache icu-libs dumb-init curl
#workdir
WORKDIR /app
@@ -55,45 +55,17 @@ ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=0
ENV VNLIB_ARGON2_DLL_PATH=/app/lib/libargon2.so \
COMPRESSION_LIB_PATH=/app/lib/libvn_compress.so
-#set default env variables
-ENV MAX_BOOKMARKS=5000 \
- MAX_CONTENT_LENGTH=5120000 \
- REG_TOKEN_DURATION_MIN=360 \
- MAX_LOGIN_ATTEMPS=10
-
#SQL Config
ENV SQL_LIB_PATH=VNLib.Plugins.Extensions.Sql.SQLite.dll
ENV SQL_CONNECTION_STRING="Data Source=data/simple-bookmark.db;"
-
-#HC Vault
-ENV HC_VAULT_ADDR="" \
- HC_VAULT_TOKEN="" \
- HC_VAULT_TRUST_CERT=false
-
#VNCACHE (default to memory only)
-ENV CACHE_ASM_PATH=VNLib.Data.Caching.Providers.VNCache.dll \
- MEMCACHE_ONLY=true \
- REDIS_CONNECTION_STRING="" \
- VNCACHE_INITIAL_NODES=[]
-
-#SECRETS
-ENV PASSWORD_PEPPER="" \
- DATABASE_PASSWORD="" \
- REDIS_PASSWORD="" \
- VNCACHE_CLIENT_PRIVATE_KEY="" \
- VNCACHE_CACHE_PUBLIC_KEY=""
-
-
-#HTTP/PROXY Config
-ENV HTTP_DOWNSTREAM_SERVERS=[] \
- HTTP_TRACE_ON=false
+ENV CACHE_ASM_PATH=VNLib.Data.Caching.Providers.VNCache.dll
#set default certificate files to the self signed ones created in the build container
-ENV SSL_JSON='{"cert": "ssl/cert.pem", "privkey":"ssl/key.pem"}'
-
-#disable plugin debugging by default
-ENV DEBUG_PLUGINS=false
+ENV TLS_ENABLE=true \
+TLS_CERT=ssl/cert.pem \
+TLS_PRIVATE_KEY=ssl/key.pem
#run the init script within dumb-init
ENTRYPOINT ["dumb-init", "--"]
diff --git a/ci/container/Taskfile.yaml b/ci/container/Taskfile.yaml
index 40c08ea..c497c3e 100644
--- a/ci/container/Taskfile.yaml
+++ b/ci/container/Taskfile.yaml
@@ -9,6 +9,8 @@ version: "3"
vars:
INCLUDE_FILES: "Dockerfile, docker-compose.yaml"
CERT_KEY_PARAMS: "ec -pkeyopt ec_paramgen_curve:secp384r1"
+ OUT_DIR: "{{.USER_WORKING_DIR}}/out"
+ SSL_DIR: "{{.USER_WORKING_DIR}}/ssl"
includes:
install:
@@ -18,20 +20,37 @@ includes:
tasks:
#called from inside the container to build native libraries
build-libs:
- vars:
- OUT_DIR: "{{.USER_WORKING_DIR}}/out"
- SSL_DIR: "{{.USER_WORKING_DIR}}/ssl"
- HOSTNAME:
- sh: echo $HOSTNAME
+ deps:
+ - task: build_rpmalloc
+ - task: build_argon2
+ - task: build_compres
+ - task: create_cert
+ build_rpmalloc:
+ internal: true
cmds:
- #build argon2 native library
- - cd lib/argon2/ && task && cp build/libargon2.so {{.OUT_DIR}}/libargon2.so
#build rpmalloc library and rewrite to a standard .dll extension
- - cd lib/vnlib_rpmalloc/ && task && cp build/libvn_rpmalloc.so {{.OUT_DIR}}/libvn_rpmalloc.so
+ - cmd: cd lib/vnlib_rpmalloc/ && task && cp build/libvn_rpmalloc.so {{.OUT_DIR}}/libvn_rpmalloc.so
+
+ build_argon2:
+ internal: true
+ cmds:
+ #build argon2 native library
+ - cmd: cd lib/argon2/ && task && cp build/libargon2.so {{.OUT_DIR}}/libargon2.so
+
+ build_compress:
+ internal: true
+ cmds:
#build compression and rewrite to a standard .dll extension
- - cd lib/vnlib_compress/ && task && cp build/libvn_compress.so {{.OUT_DIR}}/libvn_compress.so
+ - cmd: cd lib/vnlib_compress/ && task && cp build/libvn_compress.so {{.OUT_DIR}}/libvn_compress.so
+ create_cert:
+ internal: true
+ vars:
+ HOSTNAME:
+ sh: echo $HOSTNAME
+
+ cmds:
#create a fresh self-signed cert for the container during build
- openssl req -new -x509 -days 365 -keyout {{.SSL_DIR}}/key.pem -out {{.SSL_DIR}}/cert.pem -newkey {{.CERT_KEY_PARAMS}} --nodes -subj "/CN={{.HOSTNAME}}"
- echo "WARNING Self signed certificate created during build stage, DO NOT COPY THIS IMAGE"
diff --git a/ci/container/docker-compose.yaml b/ci/container/docker-compose.yaml
index 65eebdc..b41bff9 100644
--- a/ci/container/docker-compose.yaml
+++ b/ci/container/docker-compose.yaml
@@ -56,6 +56,7 @@ services:
VNCACHE_CACHE_PUBLIC_KEY: ""
#HTTP
+ HTTP_PORT: "8080"
HTTP_DOWNSTREAM_SERVERS: '[]' #a comma separated list of downstream (proxy) server ip addresses
HTTP_TRACE_ON: "false" #enable http trace logging, requires you to set --debug to SERVER_ARGS variable below
diff --git a/ci/container/run.sh b/ci/container/run.sh
index d829509..8e4f3cd 100644
--- a/ci/container/run.sh
+++ b/ci/container/run.sh
@@ -2,6 +2,18 @@
#this script will be invoked by dumb-init in the container on statup and is located at /app
+substitute_config_file() {
+ local templateFilePath="$1"
+ local outputFilePath="$2"
+
+ # Substitute environment variables with their values or default values
+ while IFS= read -r line; do
+ # Use pattern matching and parameter expansion to handle defaults
+ modifiedLine=$(echo "$line" | sed -E 's/\$\{([^:-]+)(:-([^}]+))?\}/$(echo "${\1:-\3}")/ge')
+ eval "echo \"$modifiedLine\""
+ done < "$templateFilePath" > "$outputFilePath"
+}
+
echo "Generating configuration files"
rm -rf config && mkdir config
@@ -11,7 +23,7 @@ cp config-templates/routes.xml config/routes.xml
#substitude all -template files in the config-templates dir and write them to the config dir
for file in config-templates/*-template.json; do
- envsubst < $file > config/$(basename $file -template.json).json
+ substitute_config_file $file config/$(basename $file -template.json).json
done
echo "Complete"
diff --git a/ci/plugins.taskfile.yaml b/ci/plugins.taskfile.yaml
index 17b3036..a06f3ba 100644
--- a/ci/plugins.taskfile.yaml
+++ b/ci/plugins.taskfile.yaml
@@ -11,12 +11,12 @@ includes:
vars:
PLUGIN_NAME: 'SimpleBookmark'
- CORE_VERSION: '1b590c2517fef110564943ed8a10edd11fa758b0'
+ CORE_VERSION: '0419f315e5689e043f311203ab8e61f69f1ee1d6'
ESSENTIALS_VERSION: '451091e93b5feee7a5e01d3a81f5d63efa7ea8be'
CACHE_VERSION: '930980a1e6b5db24dd4d8beeb115e4279ea79ee2'
- USERS_VERSION: '6d48be92c39d0046c5d827fb86af7ea1f3877e69'
- SESSION_VERSION: 'f2dedded2a8646273c4dd13013b8334d64e02d6f'
- EXTENSIONS_VERSION: '1350c983c371fdd6a93596c8474345f9168284e1'
+ USERS_VERSION: '26adc7c79b1bd732c76a7c0ab3638294f697ab03'
+ SESSION_VERSION: '34902c086d1707707b806864363cfaee317213e2'
+ EXTENSIONS_VERSION: '641bdbe75cb0128c09e27f1b92709c86574026ac'
tasks:
@@ -179,11 +179,6 @@ tasks:
DIR: './lib/argon2'
VERSION: '{{.CORE_VERSION}}'
- #remove unneeded files
- - for: [ man, latex, kats, argon2-specs.pdf ]
- cmd: powershell -Command "rm ./lib/argon2/{{.ITEM}} -Recurse"
- ignore_error: true
-
install-rpmalloc:
cmds:
#install the rpmalloc source code package for Linux and Mac
diff --git a/ci/taskfile.yaml b/ci/taskfile.yaml
index 0221bc9..4eba99a 100644
--- a/ci/taskfile.yaml
+++ b/ci/taskfile.yaml
@@ -8,7 +8,7 @@ version: "3"
vars:
BUILDS_URL: https://www.vaughnnugent.com/public/resources/software/builds
SQLITE_OUT_DIR: "plugins/assets/VNLib.Plugins.Extensions.Loading.Sql.SQLite"
- WEBSERVER_VERSION: 'a54c9d0da36ee15b5a1b6852b843bc0a40694ce5'
+ WEBSERVER_VERSION: '0419f315e5689e043f311203ab8e61f69f1ee1d6'
includes:
install:
@@ -57,7 +57,7 @@ tasks:
- task: install:install
vars:
PROJECT_NAME: 'VNLib.Webserver'
- MODULE_NAME: "VNLib.Webserver"
+ MODULE_NAME: "VNLib.Core"
FILE_NAME: "linux-x64-release.tgz"
DIR: 'webserver/'
VERSION: '{{.WEBSERVER_VERSION}}'
@@ -138,10 +138,10 @@ tasks:
internal: false
dotenv: ['build.env'] #use the local .env file when compiling config variables
cmds:
- - cmd: powershell mkdir config/ -Force
- ignore_error: true
- - cmd: powershell './compile.ps1' -InputDir config-templates/ -OutputDir config/
- - cmd: powershell cp config-templates/routes.xml config/routes.xml -Force
+ - cmd: powershell mkdir config/ -Force
+ ignore_error: true
+ - cmd: powershell './compile.ps1' -InputDir config-templates/ -OutputDir config/
+ - cmd: powershell cp config-templates/routes.xml config/routes.xml -Force
prune-plugin-libs:
cmds:
diff --git a/front-end/package-lock.json b/front-end/package-lock.json
index 2c4a533..e9fbae0 100644
--- a/front-end/package-lock.json
+++ b/front-end/package-lock.json
@@ -37,7 +37,7 @@
"typescript": "^5.0.2",
"vite": "^5.0.x",
"vue-eslint-parser": "^9.3.0",
- "vue-tsc": "^1.6.5"
+ "vue-tsc": "^2.0.x"
}
},
"node_modules/@alloc/quick-lru": {
@@ -53,11 +53,32 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@babel/parser": {
+ "node_modules/@babel/helper-string-parser": {
"version": "7.24.8",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.8.tgz",
- "integrity": "sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
+ "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
+ "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.25.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz",
+ "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==",
"license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.25.2"
+ },
"bin": {
"parser": "bin/babel-parser.js"
},
@@ -65,6 +86,20 @@
"node": ">=6.0.0"
}
},
+ "node_modules/@babel/types": {
+ "version": "7.25.2",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz",
+ "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.24.8",
+ "@babel/helper-validator-identifier": "^7.24.7",
+ "to-fast-properties": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
"node_modules/@esbuild/aix-ppc64": {
"version": "0.21.5",
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
@@ -784,9 +819,9 @@
}
},
"node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.19.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.19.0.tgz",
- "integrity": "sha512-JlPfZ/C7yn5S5p0yKk7uhHTTnFlvTgLetl2VxqE518QgyM7C9bSfFTYvB/Q/ftkq0RIPY4ySxTz+/wKJ/dXC0w==",
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.20.0.tgz",
+ "integrity": "sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==",
"cpu": [
"arm"
],
@@ -798,9 +833,9 @@
]
},
"node_modules/@rollup/rollup-android-arm64": {
- "version": "4.19.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.19.0.tgz",
- "integrity": "sha512-RDxUSY8D1tWYfn00DDi5myxKgOk6RvWPxhmWexcICt/MEC6yEMr4HNCu1sXXYLw8iAsg0D44NuU+qNq7zVWCrw==",
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.20.0.tgz",
+ "integrity": "sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==",
"cpu": [
"arm64"
],
@@ -812,9 +847,9 @@
]
},
"node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.19.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.19.0.tgz",
- "integrity": "sha512-emvKHL4B15x6nlNTBMtIaC9tLPRpeA5jMvRLXVbl/W9Ie7HhkrE7KQjvgS9uxgatL1HmHWDXk5TTS4IaNJxbAA==",
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.20.0.tgz",
+ "integrity": "sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==",
"cpu": [
"arm64"
],
@@ -826,9 +861,9 @@
]
},
"node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.19.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.19.0.tgz",
- "integrity": "sha512-fO28cWA1dC57qCd+D0rfLC4VPbh6EOJXrreBmFLWPGI9dpMlER2YwSPZzSGfq11XgcEpPukPTfEVFtw2q2nYJg==",
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.20.0.tgz",
+ "integrity": "sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==",
"cpu": [
"x64"
],
@@ -840,9 +875,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.19.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.19.0.tgz",
- "integrity": "sha512-2Rn36Ubxdv32NUcfm0wB1tgKqkQuft00PtM23VqLuCUR4N5jcNWDoV5iBC9jeGdgS38WK66ElncprqgMUOyomw==",
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.20.0.tgz",
+ "integrity": "sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==",
"cpu": [
"arm"
],
@@ -854,9 +889,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.19.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.19.0.tgz",
- "integrity": "sha512-gJuzIVdq/X1ZA2bHeCGCISe0VWqCoNT8BvkQ+BfsixXwTOndhtLUpOg0A1Fcx/+eA6ei6rMBzlOz4JzmiDw7JQ==",
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.20.0.tgz",
+ "integrity": "sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==",
"cpu": [
"arm"
],
@@ -868,9 +903,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.19.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.19.0.tgz",
- "integrity": "sha512-0EkX2HYPkSADo9cfeGFoQ7R0/wTKb7q6DdwI4Yn/ULFE1wuRRCHybxpl2goQrx4c/yzK3I8OlgtBu4xvted0ug==",
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.20.0.tgz",
+ "integrity": "sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==",
"cpu": [
"arm64"
],
@@ -882,9 +917,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.19.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.19.0.tgz",
- "integrity": "sha512-GlIQRj9px52ISomIOEUq/IojLZqzkvRpdP3cLgIE1wUWaiU5Takwlzpz002q0Nxxr1y2ZgxC2obWxjr13lvxNQ==",
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.20.0.tgz",
+ "integrity": "sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==",
"cpu": [
"arm64"
],
@@ -896,9 +931,9 @@
]
},
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
- "version": "4.19.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.19.0.tgz",
- "integrity": "sha512-N6cFJzssruDLUOKfEKeovCKiHcdwVYOT1Hs6dovDQ61+Y9n3Ek4zXvtghPPelt6U0AH4aDGnDLb83uiJMkWYzQ==",
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.20.0.tgz",
+ "integrity": "sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==",
"cpu": [
"ppc64"
],
@@ -910,9 +945,9 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.19.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.19.0.tgz",
- "integrity": "sha512-2DnD3mkS2uuam/alF+I7M84koGwvn3ZVD7uG+LEWpyzo/bq8+kKnus2EVCkcvh6PlNB8QPNFOz6fWd5N8o1CYg==",
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.20.0.tgz",
+ "integrity": "sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==",
"cpu": [
"riscv64"
],
@@ -924,9 +959,9 @@
]
},
"node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.19.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.19.0.tgz",
- "integrity": "sha512-D6pkaF7OpE7lzlTOFCB2m3Ngzu2ykw40Nka9WmKGUOTS3xcIieHe82slQlNq69sVB04ch73thKYIWz/Ian8DUA==",
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.20.0.tgz",
+ "integrity": "sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==",
"cpu": [
"s390x"
],
@@ -938,9 +973,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.19.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.19.0.tgz",
- "integrity": "sha512-HBndjQLP8OsdJNSxpNIN0einbDmRFg9+UQeZV1eiYupIRuZsDEoeGU43NQsS34Pp166DtwQOnpcbV/zQxM+rWA==",
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.20.0.tgz",
+ "integrity": "sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==",
"cpu": [
"x64"
],
@@ -952,9 +987,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.19.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.19.0.tgz",
- "integrity": "sha512-HxfbvfCKJe/RMYJJn0a12eiOI9OOtAUF4G6ozrFUK95BNyoJaSiBjIOHjZskTUffUrB84IPKkFG9H9nEvJGW6A==",
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.20.0.tgz",
+ "integrity": "sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==",
"cpu": [
"x64"
],
@@ -966,9 +1001,9 @@
]
},
"node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.19.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.19.0.tgz",
- "integrity": "sha512-HxDMKIhmcguGTiP5TsLNolwBUK3nGGUEoV/BO9ldUBoMLBssvh4J0X8pf11i1fTV7WShWItB1bKAKjX4RQeYmg==",
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.20.0.tgz",
+ "integrity": "sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==",
"cpu": [
"arm64"
],
@@ -980,9 +1015,9 @@
]
},
"node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.19.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.19.0.tgz",
- "integrity": "sha512-xItlIAZZaiG/u0wooGzRsx11rokP4qyc/79LkAOdznGRAbOFc+SfEdfUOszG1odsHNgwippUJavag/+W/Etc6Q==",
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.20.0.tgz",
+ "integrity": "sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==",
"cpu": [
"ia32"
],
@@ -994,9 +1029,9 @@
]
},
"node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.19.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.19.0.tgz",
- "integrity": "sha512-xNo5fV5ycvCCKqiZcpB65VMR11NJB+StnxHz20jdqRAktfdfzhgjTiJ2doTDQE/7dqGaV5I7ZGqKpgph6lCIag==",
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.20.0.tgz",
+ "integrity": "sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==",
"cpu": [
"x64"
],
@@ -1008,9 +1043,9 @@
]
},
"node_modules/@tanstack/virtual-core": {
- "version": "3.8.3",
- "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.8.3.tgz",
- "integrity": "sha512-vd2A2TnM5lbnWZnHi9B+L2gPtkSeOtJOAw358JqokIH1+v2J7vUAzFVPwB/wrye12RFOurffXu33plm4uQ+JBQ==",
+ "version": "3.8.4",
+ "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.8.4.tgz",
+ "integrity": "sha512-iO5Ujgw3O1yIxWDe9FgUPNkGjyT657b1WNX52u+Wv1DyBFEpdCdGkuVaky0M3hHFqNWjAmHWTn4wgj9rTr7ZQg==",
"license": "MIT",
"funding": {
"type": "github",
@@ -1018,12 +1053,12 @@
}
},
"node_modules/@tanstack/vue-virtual": {
- "version": "3.8.3",
- "resolved": "https://registry.npmjs.org/@tanstack/vue-virtual/-/vue-virtual-3.8.3.tgz",
- "integrity": "sha512-xrFLkOiqLoGwohgr1+Q880hkNdQWqwi19EXzx38iAjVEm1Db3KIAV0aVP57/dnNXU3NO1Vx8wnIHII5J4n1LyA==",
+ "version": "3.8.4",
+ "resolved": "https://registry.npmjs.org/@tanstack/vue-virtual/-/vue-virtual-3.8.4.tgz",
+ "integrity": "sha512-4Pq8odunHQPsTg2iE2yzWdzYed/8LySy2knxqJYkaNOQRXbqJ7O/Owpoon8ZM9L+jLL1faM5TVHV0eJxm68q8A==",
"license": "MIT",
"dependencies": {
- "@tanstack/virtual-core": "3.8.3"
+ "@tanstack/virtual-core": "3.8.4"
},
"funding": {
"type": "github",
@@ -1082,9 +1117,9 @@
"peer": true
},
"node_modules/@vitejs/plugin-vue": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.1.0.tgz",
- "integrity": "sha512-QMRxARyrdiwi1mj3AW4fLByoHTavreXq0itdEW696EihXglf1MB3D4C2gBvE0jMPH29ZjC3iK8aIaUMLf4EOGA==",
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.1.2.tgz",
+ "integrity": "sha512-nY9IwH12qeiJqumTCLJLE7IiNx7HZ39cbHaysEUd+Myvbz9KAqd2yq+U01Kab1R/H1BmiyM2ShTYlNH32Fzo3A==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1111,84 +1146,93 @@
}
},
"node_modules/@volar/language-core": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-1.11.1.tgz",
- "integrity": "sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==",
+ "version": "2.4.0-alpha.18",
+ "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.0-alpha.18.tgz",
+ "integrity": "sha512-JAYeJvYQQROmVRtSBIczaPjP3DX4QW1fOqW1Ebs0d3Y3EwSNRglz03dSv0Dm61dzd0Yx3WgTW3hndDnTQqgmyg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@volar/source-map": "1.11.1"
+ "@volar/source-map": "2.4.0-alpha.18"
}
},
"node_modules/@volar/source-map": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.11.1.tgz",
- "integrity": "sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==",
+ "version": "2.4.0-alpha.18",
+ "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.0-alpha.18.tgz",
+ "integrity": "sha512-MTeCV9MUwwsH0sNFiZwKtFrrVZUK6p8ioZs3xFzHc2cvDXHWlYN3bChdQtwKX+FY2HG6H3CfAu1pKijolzIQ8g==",
"dev": true,
- "license": "MIT",
- "dependencies": {
- "muggle-string": "^0.3.1"
- }
+ "license": "MIT"
},
"node_modules/@volar/typescript": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-1.11.1.tgz",
- "integrity": "sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==",
+ "version": "2.4.0-alpha.18",
+ "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.0-alpha.18.tgz",
+ "integrity": "sha512-sXh5Y8sqGUkgxpMWUGvRXggxYHAVxg0Pa1C42lQZuPDrW6vHJPR0VCK8Sr7WJsAW530HuNQT/ZIskmXtxjybMQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@volar/language-core": "1.11.1",
- "path-browserify": "^1.0.1"
+ "@volar/language-core": "2.4.0-alpha.18",
+ "path-browserify": "^1.0.1",
+ "vscode-uri": "^3.0.8"
}
},
"node_modules/@vue/compiler-core": {
- "version": "3.4.34",
- "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.34.tgz",
- "integrity": "sha512-Z0izUf32+wAnQewjHu+pQf1yw00EGOmevl1kE+ljjjMe7oEfpQ+BI3/JNK7yMB4IrUsqLDmPecUrpj3mCP+yJQ==",
+ "version": "3.4.35",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.35.tgz",
+ "integrity": "sha512-gKp0zGoLnMYtw4uS/SJRRO7rsVggLjvot3mcctlMXunYNsX+aRJDqqw/lV5/gHK91nvaAAlWFgdVl020AW1Prg==",
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.24.7",
- "@vue/shared": "3.4.34",
+ "@vue/shared": "3.4.35",
"entities": "^4.5.0",
"estree-walker": "^2.0.2",
"source-map-js": "^1.2.0"
}
},
"node_modules/@vue/compiler-dom": {
- "version": "3.4.34",
- "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.34.tgz",
- "integrity": "sha512-3PUOTS1h5cskdOJMExCu2TInXuM0j60DRPpSCJDqOCupCfUZCJoyQmKtRmA8EgDNZ5kcEE7vketamRZfrEuVDw==",
+ "version": "3.4.35",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.35.tgz",
+ "integrity": "sha512-pWIZRL76/oE/VMhdv/ovZfmuooEni6JPG1BFe7oLk5DZRo/ImydXijoZl/4kh2406boRQ7lxTYzbZEEXEhj9NQ==",
"license": "MIT",
"dependencies": {
- "@vue/compiler-core": "3.4.34",
- "@vue/shared": "3.4.34"
+ "@vue/compiler-core": "3.4.35",
+ "@vue/shared": "3.4.35"
}
},
"node_modules/@vue/compiler-sfc": {
- "version": "3.4.34",
- "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.34.tgz",
- "integrity": "sha512-x6lm0UrM03jjDXTPZgD9Ad8bIVD1ifWNit2EaWQIZB5CULr46+FbLQ5RpK7AXtDHGjx9rmvC7QRCTjsiGkAwRw==",
+ "version": "3.4.35",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.35.tgz",
+ "integrity": "sha512-xacnRS/h/FCsjsMfxBkzjoNxyxEyKyZfBch/P4vkLRvYJwe5ChXmZZrj8Dsed/752H2Q3JE8kYu9Uyha9J6PgA==",
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.24.7",
- "@vue/compiler-core": "3.4.34",
- "@vue/compiler-dom": "3.4.34",
- "@vue/compiler-ssr": "3.4.34",
- "@vue/shared": "3.4.34",
+ "@vue/compiler-core": "3.4.35",
+ "@vue/compiler-dom": "3.4.35",
+ "@vue/compiler-ssr": "3.4.35",
+ "@vue/shared": "3.4.35",
"estree-walker": "^2.0.2",
"magic-string": "^0.30.10",
- "postcss": "^8.4.39",
+ "postcss": "^8.4.40",
"source-map-js": "^1.2.0"
}
},
"node_modules/@vue/compiler-ssr": {
- "version": "3.4.34",
- "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.34.tgz",
- "integrity": "sha512-8TDBcLaTrFm5rnF+Qm4BlliaopJgqJ28Nsrc80qazynm5aJO+Emu7y0RWw34L8dNnTRdcVBpWzJxhGYzsoVu4g==",
+ "version": "3.4.35",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.35.tgz",
+ "integrity": "sha512-7iynB+0KB1AAJKk/biENTV5cRGHRdbdaD7Mx3nWcm1W8bVD6QmnH3B4AHhQQ1qZHhqFwzEzMwiytXm3PX1e60A==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/compiler-dom": "3.4.35",
+ "@vue/shared": "3.4.35"
+ }
+ },
+ "node_modules/@vue/compiler-vue2": {
+ "version": "2.7.16",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz",
+ "integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@vue/compiler-dom": "3.4.34",
- "@vue/shared": "3.4.34"
+ "de-indent": "^1.0.2",
+ "he": "^1.2.0"
}
},
"node_modules/@vue/devtools-api": {
@@ -1198,21 +1242,20 @@
"license": "MIT"
},
"node_modules/@vue/language-core": {
- "version": "1.8.27",
- "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.27.tgz",
- "integrity": "sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==",
+ "version": "2.0.29",
+ "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.0.29.tgz",
+ "integrity": "sha512-o2qz9JPjhdoVj8D2+9bDXbaI4q2uZTHQA/dbyZT4Bj1FR9viZxDJnLcKVHfxdn6wsOzRgpqIzJEEmSSvgMvDTQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@volar/language-core": "~1.11.1",
- "@volar/source-map": "~1.11.1",
- "@vue/compiler-dom": "^3.3.0",
- "@vue/shared": "^3.3.0",
+ "@volar/language-core": "~2.4.0-alpha.18",
+ "@vue/compiler-dom": "^3.4.0",
+ "@vue/compiler-vue2": "^2.7.16",
+ "@vue/shared": "^3.4.0",
"computeds": "^0.0.1",
"minimatch": "^9.0.3",
- "muggle-string": "^0.3.1",
- "path-browserify": "^1.0.1",
- "vue-template-compiler": "^2.7.14"
+ "muggle-string": "^0.4.1",
+ "path-browserify": "^1.0.1"
},
"peerDependencies": {
"typescript": "*"
@@ -1250,53 +1293,53 @@
}
},
"node_modules/@vue/reactivity": {
- "version": "3.4.34",
- "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.34.tgz",
- "integrity": "sha512-ua+Lo+wBRlBEX9TtgPOShE2JwIO7p6BTZ7t1KZVPoaBRfqbC7N3c8Mpzicx173fXxx5VXeU6ykiHo7WgLzJQDA==",
+ "version": "3.4.35",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.35.tgz",
+ "integrity": "sha512-Ggtz7ZZHakriKioveJtPlStYardwQH6VCs9V13/4qjHSQb/teE30LVJNrbBVs4+aoYGtTQKJbTe4CWGxVZrvEw==",
"license": "MIT",
"dependencies": {
- "@vue/shared": "3.4.34"
+ "@vue/shared": "3.4.35"
}
},
"node_modules/@vue/runtime-core": {
- "version": "3.4.34",
- "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.34.tgz",
- "integrity": "sha512-PXhkiRPwcPGJ1BnyBZFI96GfInCVskd0HPNIAZn7i3YOmLbtbTZpB7/kDTwC1W7IqdGPkTVC63IS7J2nZs4Ebg==",
+ "version": "3.4.35",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.35.tgz",
+ "integrity": "sha512-D+BAjFoWwT5wtITpSxwqfWZiBClhBbR+bm0VQlWYFOadUUXFo+5wbe9ErXhLvwguPiLZdEF13QAWi2vP3ZD5tA==",
"license": "MIT",
"dependencies": {
- "@vue/reactivity": "3.4.34",
- "@vue/shared": "3.4.34"
+ "@vue/reactivity": "3.4.35",
+ "@vue/shared": "3.4.35"
}
},
"node_modules/@vue/runtime-dom": {
- "version": "3.4.34",
- "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.34.tgz",
- "integrity": "sha512-dXqIe+RqFAK2Euak4UsvbIupalrhc67OuQKpD7HJ3W2fv8jlqvI7szfBCsAEcE8o/wyNpkloxB6J8viuF/E3gw==",
+ "version": "3.4.35",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.35.tgz",
+ "integrity": "sha512-yGOlbos+MVhlS5NWBF2HDNgblG8e2MY3+GigHEyR/dREAluvI5tuUUgie3/9XeqhPE4LF0i2wjlduh5thnfOqw==",
"license": "MIT",
"dependencies": {
- "@vue/reactivity": "3.4.34",
- "@vue/runtime-core": "3.4.34",
- "@vue/shared": "3.4.34",
+ "@vue/reactivity": "3.4.35",
+ "@vue/runtime-core": "3.4.35",
+ "@vue/shared": "3.4.35",
"csstype": "^3.1.3"
}
},
"node_modules/@vue/server-renderer": {
- "version": "3.4.34",
- "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.34.tgz",
- "integrity": "sha512-GeyEUfMVRZMD/mZcNONEqg7MiU10QQ1DB3O/Qr6+8uXpbwdlmVgQ5Qs1/ZUAFX1X2UUtqMoGrDRbxdWfOJFT7Q==",
+ "version": "3.4.35",
+ "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.35.tgz",
+ "integrity": "sha512-iZ0e/u9mRE4T8tNhlo0tbA+gzVkgv8r5BX6s1kRbOZqfpq14qoIvCZ5gIgraOmYkMYrSEZgkkojFPr+Nyq/Mnw==",
"license": "MIT",
"dependencies": {
- "@vue/compiler-ssr": "3.4.34",
- "@vue/shared": "3.4.34"
+ "@vue/compiler-ssr": "3.4.35",
+ "@vue/shared": "3.4.35"
},
"peerDependencies": {
- "vue": "3.4.34"
+ "vue": "3.4.35"
}
},
"node_modules/@vue/shared": {
- "version": "3.4.34",
- "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.34.tgz",
- "integrity": "sha512-x5LmiRLpRsd9KTjAB8MPKf0CDPMcuItjP0gbNqFCIgL1I8iYp4zglhj9w9FPCdIbHG2M91RVeIbArFfFTz9I3A==",
+ "version": "3.4.35",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.35.tgz",
+ "integrity": "sha512-hvuhBYYDe+b1G8KHxsQ0diDqDMA8D9laxWZhNAjE83VZb5UDaXl9Xnz7cGdDSyiHM90qqI/CyGMcpBpiDy6VVQ==",
"license": "MIT"
},
"node_modules/@vuelidate/core": {
@@ -1403,9 +1446,9 @@
}
},
"node_modules/@vueuse/core/node_modules/vue-demi": {
- "version": "0.14.9",
- "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.9.tgz",
- "integrity": "sha512-dC1TJMODGM8lxhP6wLToncaDPPNB3biVxxRDuNCYpuXwi70ou7NsGd97KVTJ2omepGId429JZt8oaZKeXbqxwg==",
+ "version": "0.14.10",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz",
+ "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
"hasInstallScript": true,
"license": "MIT",
"bin": {
@@ -1450,9 +1493,9 @@
}
},
"node_modules/@vueuse/shared/node_modules/vue-demi": {
- "version": "0.14.9",
- "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.9.tgz",
- "integrity": "sha512-dC1TJMODGM8lxhP6wLToncaDPPNB3biVxxRDuNCYpuXwi70ou7NsGd97KVTJ2omepGId429JZt8oaZKeXbqxwg==",
+ "version": "0.14.10",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz",
+ "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
"hasInstallScript": true,
"license": "MIT",
"bin": {
@@ -1579,9 +1622,9 @@
"license": "MIT"
},
"node_modules/autoprefixer": {
- "version": "10.4.19",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz",
- "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==",
+ "version": "10.4.20",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz",
+ "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==",
"dev": true,
"funding": [
{
@@ -1599,11 +1642,11 @@
],
"license": "MIT",
"dependencies": {
- "browserslist": "^4.23.0",
- "caniuse-lite": "^1.0.30001599",
+ "browserslist": "^4.23.3",
+ "caniuse-lite": "^1.0.30001646",
"fraction.js": "^4.3.7",
"normalize-range": "^0.1.2",
- "picocolors": "^1.0.0",
+ "picocolors": "^1.0.1",
"postcss-value-parser": "^4.2.0"
},
"bin": {
@@ -1617,9 +1660,9 @@
}
},
"node_modules/axios": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz",
- "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==",
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.3.tgz",
+ "integrity": "sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw==",
"license": "MIT",
"dependencies": {
"follow-redirects": "^1.15.6",
@@ -1683,9 +1726,9 @@
}
},
"node_modules/browserslist": {
- "version": "4.23.2",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz",
- "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==",
+ "version": "4.23.3",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz",
+ "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==",
"dev": true,
"funding": [
{
@@ -1703,9 +1746,9 @@
],
"license": "MIT",
"dependencies": {
- "caniuse-lite": "^1.0.30001640",
- "electron-to-chromium": "^1.4.820",
- "node-releases": "^2.0.14",
+ "caniuse-lite": "^1.0.30001646",
+ "electron-to-chromium": "^1.5.4",
+ "node-releases": "^2.0.18",
"update-browserslist-db": "^1.1.0"
},
"bin": {
@@ -1748,9 +1791,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001643",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001643.tgz",
- "integrity": "sha512-ERgWGNleEilSrHM6iUz/zJNSQTP8Mr21wDWpdgvRwcTXGAq6jMtOUPP4dqFPTdKqZ2wKTdtB+uucZ3MRpAUSmg==",
+ "version": "1.0.30001647",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001647.tgz",
+ "integrity": "sha512-n83xdNiyeNcHpzWY+1aFbqCK7LuLfBricc4+alSQL2Xb6OR3XpnQAmlDG+pQcdTfiHRuLcQ96VOfrPSGiNJYSg==",
"dev": true,
"funding": [
{
@@ -1927,9 +1970,9 @@
"license": "MIT"
},
"node_modules/debug": {
- "version": "4.3.5",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz",
- "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==",
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
+ "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
"license": "MIT",
"dependencies": {
"ms": "2.1.2"
@@ -2016,9 +2059,9 @@
"license": "MIT"
},
"node_modules/electron-to-chromium": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.0.tgz",
- "integrity": "sha512-Vb3xHHYnLseK8vlMJQKJYXJ++t4u1/qJ3vykuVrVjvdiOEhYyT1AuP4x03G8EnPmYvYOhe9T+dADTmthjRQMkA==",
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.4.tgz",
+ "integrity": "sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==",
"dev": true,
"license": "ISC"
},
@@ -2907,12 +2950,12 @@
"license": "ISC"
},
"node_modules/magic-string": {
- "version": "0.30.10",
- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz",
- "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==",
+ "version": "0.30.11",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz",
+ "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==",
"license": "MIT",
"dependencies": {
- "@jridgewell/sourcemap-codec": "^1.4.15"
+ "@jridgewell/sourcemap-codec": "^1.5.0"
}
},
"node_modules/merge2": {
@@ -2999,9 +3042,9 @@
"license": "MIT"
},
"node_modules/muggle-string": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.3.1.tgz",
- "integrity": "sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==",
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz",
+ "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==",
"dev": true,
"license": "MIT"
},
@@ -3269,13 +3312,13 @@
}
},
"node_modules/pinia": {
- "version": "2.1.7",
- "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.1.7.tgz",
- "integrity": "sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.2.0.tgz",
+ "integrity": "sha512-iPrIh26GMqfpUlMOGyxuDowGmYousTecbTHFwT0xZ1zJvh23oQ+Cj99ZoPQA1TnUPhU6AuRPv6/drkTCJ0VHQA==",
"license": "MIT",
"dependencies": {
- "@vue/devtools-api": "^6.5.0",
- "vue-demi": ">=0.14.5"
+ "@vue/devtools-api": "^6.6.3",
+ "vue-demi": "^0.14.8"
},
"funding": {
"url": "https://github.com/sponsors/posva"
@@ -3295,9 +3338,9 @@
}
},
"node_modules/pinia/node_modules/vue-demi": {
- "version": "0.14.9",
- "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.9.tgz",
- "integrity": "sha512-dC1TJMODGM8lxhP6wLToncaDPPNB3biVxxRDuNCYpuXwi70ou7NsGd97KVTJ2omepGId429JZt8oaZKeXbqxwg==",
+ "version": "0.14.10",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz",
+ "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
"hasInstallScript": true,
"license": "MIT",
"bin": {
@@ -3625,9 +3668,9 @@
}
},
"node_modules/rollup": {
- "version": "4.19.0",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.19.0.tgz",
- "integrity": "sha512-5r7EYSQIowHsK4eTZ0Y81qpZuJz+MUuYeqmmYmRMl1nwhdmbiYqt5jwzf6u7wyOzJgYqtCRMtVRKOtHANBz7rA==",
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.20.0.tgz",
+ "integrity": "sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==",
"devOptional": true,
"license": "MIT",
"dependencies": {
@@ -3641,22 +3684,22 @@
"npm": ">=8.0.0"
},
"optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.19.0",
- "@rollup/rollup-android-arm64": "4.19.0",
- "@rollup/rollup-darwin-arm64": "4.19.0",
- "@rollup/rollup-darwin-x64": "4.19.0",
- "@rollup/rollup-linux-arm-gnueabihf": "4.19.0",
- "@rollup/rollup-linux-arm-musleabihf": "4.19.0",
- "@rollup/rollup-linux-arm64-gnu": "4.19.0",
- "@rollup/rollup-linux-arm64-musl": "4.19.0",
- "@rollup/rollup-linux-powerpc64le-gnu": "4.19.0",
- "@rollup/rollup-linux-riscv64-gnu": "4.19.0",
- "@rollup/rollup-linux-s390x-gnu": "4.19.0",
- "@rollup/rollup-linux-x64-gnu": "4.19.0",
- "@rollup/rollup-linux-x64-musl": "4.19.0",
- "@rollup/rollup-win32-arm64-msvc": "4.19.0",
- "@rollup/rollup-win32-ia32-msvc": "4.19.0",
- "@rollup/rollup-win32-x64-msvc": "4.19.0",
+ "@rollup/rollup-android-arm-eabi": "4.20.0",
+ "@rollup/rollup-android-arm64": "4.20.0",
+ "@rollup/rollup-darwin-arm64": "4.20.0",
+ "@rollup/rollup-darwin-x64": "4.20.0",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.20.0",
+ "@rollup/rollup-linux-arm-musleabihf": "4.20.0",
+ "@rollup/rollup-linux-arm64-gnu": "4.20.0",
+ "@rollup/rollup-linux-arm64-musl": "4.20.0",
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.20.0",
+ "@rollup/rollup-linux-riscv64-gnu": "4.20.0",
+ "@rollup/rollup-linux-s390x-gnu": "4.20.0",
+ "@rollup/rollup-linux-x64-gnu": "4.20.0",
+ "@rollup/rollup-linux-x64-musl": "4.20.0",
+ "@rollup/rollup-win32-arm64-msvc": "4.20.0",
+ "@rollup/rollup-win32-ia32-msvc": "4.20.0",
+ "@rollup/rollup-win32-x64-msvc": "4.20.0",
"fsevents": "~2.3.2"
}
},
@@ -3962,9 +4005,9 @@
}
},
"node_modules/tailwindcss": {
- "version": "3.4.6",
- "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.6.tgz",
- "integrity": "sha512-1uRHzPB+Vzu57ocybfZ4jh5Q3SdlH7XW23J5sQoM9LhE9eIOlzxer/3XPSsycvih3rboRsvt0QCmzSrqyOYUIA==",
+ "version": "3.4.7",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.7.tgz",
+ "integrity": "sha512-rxWZbe87YJb4OcSopb7up2Ba4U82BoiSGUdoDr3Ydrg9ckxFS/YWsvhN323GMcddgU65QRy7JndC7ahhInhvlQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4038,6 +4081,15 @@
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
}
},
+ "node_modules/to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -4157,9 +4209,9 @@
"license": "MIT"
},
"node_modules/vite": {
- "version": "5.3.4",
- "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.4.tgz",
- "integrity": "sha512-Cw+7zL3ZG9/NZBB8C+8QbQZmR54GwqIz+WMI4b3JgdYJvX+ny9AjJXqkGQlDXSXRP9rP0B4tbciRMOVEKulVOA==",
+ "version": "5.3.5",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.5.tgz",
+ "integrity": "sha512-MdjglKR6AQXQb9JGiS7Rc2wC6uMjcm7Go/NHNO63EwiJXfuk9PgqiP/n5IDJCziMkfw9n4Ubp7lttNwz+8ZVKA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4212,17 +4264,24 @@
}
}
},
+ "node_modules/vscode-uri": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz",
+ "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/vue": {
- "version": "3.4.34",
- "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.34.tgz",
- "integrity": "sha512-VZze05HWlA3ItreQ/ka7Sx7PoD0/3St8FEiSlSTVgb6l4hL+RjtP2/8g5WQBzZgyf8WG2f+g1bXzC7zggLhAJA==",
+ "version": "3.4.35",
+ "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.35.tgz",
+ "integrity": "sha512-+fl/GLmI4GPileHftVlCdB7fUL4aziPcqTudpTGXCT8s+iZWuOCeNEB5haX6Uz2IpRrbEXOgIFbe+XciCuGbNQ==",
"license": "MIT",
"dependencies": {
- "@vue/compiler-dom": "3.4.34",
- "@vue/compiler-sfc": "3.4.34",
- "@vue/runtime-dom": "3.4.34",
- "@vue/server-renderer": "3.4.34",
- "@vue/shared": "3.4.34"
+ "@vue/compiler-dom": "3.4.35",
+ "@vue/compiler-sfc": "3.4.35",
+ "@vue/runtime-dom": "3.4.35",
+ "@vue/server-renderer": "3.4.35",
+ "@vue/shared": "3.4.35"
},
"peerDependencies": {
"typescript": "*"
@@ -4258,33 +4317,22 @@
"eslint": ">=6.0.0"
}
},
- "node_modules/vue-template-compiler": {
- "version": "2.7.16",
- "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz",
- "integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "de-indent": "^1.0.2",
- "he": "^1.2.0"
- }
- },
"node_modules/vue-tsc": {
- "version": "1.8.27",
- "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.27.tgz",
- "integrity": "sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==",
+ "version": "2.0.29",
+ "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.0.29.tgz",
+ "integrity": "sha512-MHhsfyxO3mYShZCGYNziSbc63x7cQ5g9kvijV7dRe1TTXBRLxXyL0FnXWpUF1xII2mJ86mwYpYsUmMwkmerq7Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@volar/typescript": "~1.11.1",
- "@vue/language-core": "1.8.27",
+ "@volar/typescript": "~2.4.0-alpha.18",
+ "@vue/language-core": "2.0.29",
"semver": "^7.5.4"
},
"bin": {
"vue-tsc": "bin/vue-tsc.js"
},
"peerDependencies": {
- "typescript": "*"
+ "typescript": ">=5.0.0"
}
},
"node_modules/vue3-otp-input": {