diff --git a/extra/admin-api/Spacebar.UApi/Program.cs b/extra/admin-api/Spacebar.UApi/Program.cs
index 0a2a1b32..326d0a9c 100644
--- a/extra/admin-api/Spacebar.UApi/Program.cs
+++ b/extra/admin-api/Spacebar.UApi/Program.cs
@@ -11,8 +11,10 @@ using Spacebar.Models.Db.Contexts;
using Spacebar.UApi.Services;
var builder = WebApplication.CreateBuilder(args);
-if (!string.IsNullOrWhiteSpace(Environment.GetEnvironmentVariable("APPSETTINGS_PATH")))
+if (!string.IsNullOrWhiteSpace(Environment.GetEnvironmentVariable("APPSETTINGS_PATH"))) {
+ Console.WriteLine("Loading appsettings from path: " + Environment.GetEnvironmentVariable("APPSETTINGS_PATH"));
builder.Configuration.AddJsonFile(Environment.GetEnvironmentVariable("APPSETTINGS_PATH")!);
+}
// Add services to the container.
@@ -70,9 +72,23 @@ app.UseAuthorization();
app.MapControllers();
StreamingHttpClient.LogRequests = false;
app.Use((context, next) => {
- context.Response.Headers["Access-Control-Allow-Origin"] = "*";
- context.Response.Headers["Access-Control-Allow-Methods"] = "GET, POST, PUT, DELETE, OPTIONS";
- context.Response.Headers["Access-Control-Allow-Headers"] = "*, Authorization";
+ context.Response.Headers["Access-Control-Allow-Origin"] =
+ string.IsNullOrWhiteSpace(context.Request.Headers.Origin)
+ ? "*"
+ : context.Request.Headers.Origin;
+
+ context.Response.Headers["Access-Control-Allow-Methods"] =
+ string.IsNullOrWhiteSpace(context.Request.Headers.AccessControlRequestMethod)
+ ? "GET, POST, PUT, DELETE, OPTIONS"
+ : context.Request.Headers.AccessControlRequestMethod.ToString();
+
+ context.Response.Headers["Access-Control-Allow-Headers"] =
+ string.IsNullOrWhiteSpace(context.Request.Headers.AccessControlRequestHeaders)
+ ? "*, Authorization"
+ : context.Request.Headers.AccessControlRequestHeaders.ToString();
+
+ context.Response.Headers.AccessControlAllowCredentials = "true";
+
if (context.Request.Method == "OPTIONS") {
context.Response.StatusCode = 200;
return Task.CompletedTask;
diff --git a/extra/admin-api/Utilities/Spacebar.AdminApi.TestClient/Pages/GuildDiscovery.razor b/extra/admin-api/Utilities/Spacebar.AdminApi.TestClient/Pages/GuildDiscovery.razor
index 7e388fbc..ff233731 100644
--- a/extra/admin-api/Utilities/Spacebar.AdminApi.TestClient/Pages/GuildDiscovery.razor
+++ b/extra/admin-api/Utilities/Spacebar.AdminApi.TestClient/Pages/GuildDiscovery.razor
@@ -16,8 +16,7 @@
<div class="@("guild-card " + (guild.DiscoveryExcluded ? "excluded" : ""))">
<img class="guild-icon" src="@(guild.Icon is null ? $"{Config.CdnUrl}/embed/avatars/0.png" : $"{Config.CdnUrl}/icons/{guild.Id}/{guild.Icon}")" alt="@guild.Name"/>
@if (guild.Banner is not null) {
- <img class="guild-banner" src="@($"{Config.CdnUrl}/banners/{guild.Id}/{guild.Banner}")"
- alt="@guild.Name"/>
+ <img class="guild-banner" src="@($"{Config.CdnUrl}/banners/{guild.Id}/{guild.Banner}")" alt="@guild.Name"/>
}
<h4>@guild.Name</h4>
<p>@guild.Description</p>
diff --git a/flake.lock b/flake.lock
index 3c3a5a85..abb78335 100644
--- a/flake.lock
+++ b/flake.lock
@@ -20,16 +20,16 @@
},
"nixpkgs": {
"locked": {
- "lastModified": 1771369470,
- "narHash": "sha256-0NBlEBKkN3lufyvFegY4TYv5mCNHbi5OmBDrzihbBMQ=",
+ "lastModified": 1771807909,
+ "narHash": "sha256-EIBJlDXxqYpmUDvZ/H13BZwRtMbaKqJYDbrYNGkKGfk=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "0182a361324364ae3f436a63005877674cf45efb",
+ "rev": "e2e54a67c07f3dcc70ffbb769dc5cb011a28fcc6",
"type": "github"
},
"original": {
"owner": "NixOS",
- "ref": "nixos-unstable",
+ "ref": "master",
"repo": "nixpkgs",
"type": "github"
}
diff --git a/flake.nix b/flake.nix
index 2ad5e94f..59bae244 100644
--- a/flake.nix
+++ b/flake.nix
@@ -2,7 +2,7 @@
description = "Spacebar server, written in Typescript.";
inputs = {
- nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
+ nixpkgs.url = "github:NixOS/nixpkgs/master"; # temp hack because unstable is frozen
flake-utils.url = "github:numtide/flake-utils";
};
@@ -118,4 +118,4 @@
inherit self nixpkgs flake-utils;
}
);
-}
+}
\ No newline at end of file
diff --git a/nix/modules/default/cs/admin-api.nix b/nix/modules/default/cs/admin-api.nix
index 132a746c..a7b7ca05 100644
--- a/nix/modules/default/cs/admin-api.nix
+++ b/nix/modules/default/cs/admin-api.nix
@@ -119,16 +119,7 @@ in
in
{
assertions = [
- {
- assertion =
- cfg.adminApi.extraConfiguration ? ConnectionStrings
- && cfg.adminApi.extraConfiguration.ConnectionStrings ? Spacebar
- && cfg.adminApi.extraConfiguration.ConnectionStrings.Spacebar != null;
- message = ''
- Admin API: Setting a database connection string in extraConfiguration (`extraConfiguration.ConnectionStrings.Spacebar`) is required when using C# services.
- Example: Host=127.0.0.1; Username=Spacebar; Password=SuperSecurePassword12; Database=spacebar; Port=5432; Include Error Detail=true; Maximum Pool Size=1000; Command Timeout=6000; Timeout=600;
- '';
- }
+ (import ./assert-has-connection-string.nix "Admin API" cfg.adminApi.extraConfiguration)
];
services.spacebarchat-server.settings.admin = {
diff --git a/nix/modules/default/cs/assert-has-connection-string.nix b/nix/modules/default/cs/assert-has-connection-string.nix
new file mode 100644
index 00000000..4066c893
--- /dev/null
+++ b/nix/modules/default/cs/assert-has-connection-string.nix
@@ -0,0 +1,7 @@
+name: extraConfig: {
+ assertion = extraConfig ? ConnectionStrings && extraConfig.ConnectionStrings ? Spacebar && extraConfig.ConnectionStrings.Spacebar != null;
+ message = ''
+ ${name}: Setting a database connection string in extraConfiguration (`extraConfiguration.ConnectionStrings.Spacebar`) is required when using C# services.
+ Example: Host=127.0.0.1; Username=Spacebar; Password=SuperSecurePassword12; Database=spacebar; Port=5432; Include Error Detail=true; Maximum Pool Size=1000; Command Timeout=6000; Timeout=600;
+ '';
+}
diff --git a/nix/modules/default/cs/gateway-offload-cs.nix b/nix/modules/default/cs/gateway-offload-cs.nix
index 28def43a..4e56a566 100644
--- a/nix/modules/default/cs/gateway-offload-cs.nix
+++ b/nix/modules/default/cs/gateway-offload-cs.nix
@@ -127,16 +127,7 @@ in
in
{
assertions = [
- {
- assertion =
- cfg.gatewayOffload.extraConfiguration ? ConnectionStrings
- && cfg.gatewayOffload.extraConfiguration.ConnectionStrings ? Spacebar
- && cfg.gatewayOffload.extraConfiguration.ConnectionStrings.Spacebar != null;
- message = ''
- Gateway Offload: Setting a database connection string in extraConfiguration (`extraConfiguration.ConnectionStrings.Spacebar`) is required when using C# services.
- Example: Host=127.0.0.1; Username=Spacebar; Password=SuperSecurePassword12; Database=spacebar; Port=5432; Include Error Detail=true; Maximum Pool Size=1000; Command Timeout=6000; Timeout=600;
- '';
- }
+ (import ./assert-has-connection-string.nix "Gateway Offload" cfg.gatewayOffload.extraConfiguration)
];
services.spacebarchat-server.settings.offload = {
@@ -162,7 +153,9 @@ in
CONFIG_READONLY = 1;
ASPNETCORE_URLS = "http://0.0.0.0:${toString cfg.gatewayOffload.listenPort}";
STORAGE_LOCATION = cfg.cdnPath;
- APPSETTINGS_PATH = jsonFormat.generate "appsettings.spacebar-gateway-offload.json" (lib.recursiveUpdate (import ./default-appsettings-json.nix) cfg.gatewayOffload.extraConfiguration);
+ APPSETTINGS_PATH = jsonFormat.generate "appsettings.spacebar-gateway-offload.json" (
+ lib.recursiveUpdate (import ./default-appsettings-json.nix) cfg.gatewayOffload.extraConfiguration
+ );
}
);
serviceConfig = {
diff --git a/nix/modules/default/cs/uapi.nix b/nix/modules/default/cs/uapi.nix
index 262ce6ba..1486ef26 100644
--- a/nix/modules/default/cs/uapi.nix
+++ b/nix/modules/default/cs/uapi.nix
@@ -20,6 +20,11 @@ in
type = lib.types.submodule {
options = {
enable = lib.mkEnableOption "Enable C# API overlay.";
+ listenPort = lib.mkOption {
+ type = lib.types.port;
+ default = 3012;
+ description = "Port for the gateway offload daemon to listen on.";
+ };
extraConfiguration = lib.mkOption {
type = jsonFormat.type;
default = import ./default-appsettings-json.nix;
@@ -119,25 +124,11 @@ in
in
{
assertions = [
- {
- assertion =
- cfg.adminApi.extraConfiguration ? ConnectionStrings
- && cfg.adminApi.extraConfiguration.ConnectionStrings ? Spacebar
- && cfg.adminApi.extraConfiguration.ConnectionStrings.Spacebar != null;
- message = ''
- Admin API: Setting a database connection string in extraConfiguration (`extraConfiguration.ConnectionStrings.Spacebar`) is required when using C# services.
- Example: Host=127.0.0.1; Username=Spacebar; Password=SuperSecurePassword12; Database=spacebar; Port=5432; Include Error Detail=true; Maximum Pool Size=1000; Command Timeout=6000; Timeout=600;
- '';
- }
+ (import ./assert-has-connection-string.nix "uAPI" cfg.uApi.extraConfiguration)
];
- services.spacebarchat-server.settings.admin = {
- endpointPublic = "http${if cfg.adminApiEndpoint.useSsl then "s" else ""}://${cfg.adminApiEndpoint.host}:${toString cfg.adminApiEndpoint.publicPort}";
- endpointPrivate = "http://127.0.0.1:${builtins.toString cfg.adminApiEndpoint.localPort}";
- };
-
- systemd.services.spacebar-admin-api = makeServerTsService {
- description = "Spacebar Server - Admin API";
+ systemd.services.spacebar-uapi = makeServerTsService {
+ description = "Spacebar Server - C# API overlay";
environment = builtins.mapAttrs (_: val: builtins.toString val) (
{
# things we set by default...
@@ -149,7 +140,7 @@ in
# things we force...
# CONFIG_PATH = configFile;
CONFIG_READONLY = 1;
- ASPNETCORE_URLS = "http://0.0.0.0:${toString cfg.uApi.localPort}";
+ ASPNETCORE_URLS = "http://0.0.0.0:${toString cfg.uApi.listenPort}";
STORAGE_LOCATION = cfg.cdnPath;
APPSETTINGS_PATH = jsonFormat.generate "appsettings.spacebar-uapi.json" (lib.recursiveUpdate (import ./default-appsettings-json.nix) cfg.uApi.extraConfiguration);
}
diff --git a/nix/modules/default/default.nix b/nix/modules/default/default.nix
index 8306aba6..07cb7d2e 100644
--- a/nix/modules/default/default.nix
+++ b/nix/modules/default/default.nix
@@ -212,6 +212,7 @@ in
# message = "You cannot set CONFIG_PATH, CONFIG_READONLY, PORT or STORAGE_LOCATION in extraEnvironment, these are managed by the NixOS module.";
# }
];
+ services.spacebarchat-server.uApi.extraConfiguration.Spacebar.UApi.FallbackApiEndpoint = "http://127.0.0.1:${toString cfg.apiEndpoint.localPort}";
systemd.services.spacebar-api = makeServerTsService {
description = "Spacebar Server - API";
diff --git a/nix/modules/default/integration-nginx.nix b/nix/modules/default/integration-nginx.nix
index 718e5728..d80016bf 100644
--- a/nix/modules/default/integration-nginx.nix
+++ b/nix/modules/default/integration-nginx.nix
@@ -15,12 +15,13 @@ in
config = lib.mkIf (cfg.enable && cfg.nginx.enable) {
services.nginx = {
+ recommendedProxySettings = true;
virtualHosts = lib.mkIf cfg.enable {
"${cfg.apiEndpoint.host}" = {
enableACME = cfg.apiEndpoint.useSsl;
forceSSL = cfg.apiEndpoint.useSsl;
locations."/" = {
- proxyPass = "http://127.0.0.1:${toString cfg.apiEndpoint.localPort}/";
+ proxyPass = if cfg.uApi.enable then "http://127.0.0.1:${toString cfg.uApi.listenPort}/" else "http://127.0.0.1:${toString cfg.apiEndpoint.localPort}/";
};
};
"${cfg.gatewayEndpoint.host}" = {
diff --git a/nix/testVm/configuration.nix b/nix/testVm/configuration.nix
index 71c2451f..e8de371a 100644
--- a/nix/testVm/configuration.nix
+++ b/nix/testVm/configuration.nix
@@ -57,6 +57,10 @@ in
enable = true;
extraConfiguration.ConnectionStrings.Spacebar = csConnectionString;
};
+ uApi = {
+ enable = true;
+ extraConfiguration.ConnectionStrings.Spacebar = csConnectionString;
+ };
extraEnvironment = {
DATABASE = "postgres://postgres:postgres@127.0.0.1/spacebar";
#WEBRTC_PORT_RANGE=60000-61000;
diff --git a/package-lock.json b/package-lock.json
index 286a0778..c4869bfa 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -10,9 +10,9 @@
"hasInstallScript": true,
"license": "AGPL-3.0-only",
"dependencies": {
- "@spacebarchat/medooze-webrtc": "^1.0.10",
+ "@spacebarchat/medooze-webrtc": "^1.0.11",
"@toondepauw/node-zstd": "^1.2.0",
- "ajv": "^8.17.1",
+ "ajv": "^8.18.0",
"ajv-formats": "^3.0.1",
"amqplib": "^0.10.9",
"badge-maker": "^5.0.2",
@@ -22,15 +22,15 @@
"cheerio": "^1.2.0",
"cookie-parser": "^1.4.7",
"discord-protos": "^1.2.102",
- "dotenv": "^17.2.4",
+ "dotenv": "^17.3.1",
"email-providers": "^2.21.0",
"exif-be-gone": "^1.5.1",
"express": "^5.2.1",
"fast-zlib": "^2.0.1",
- "fido2-lib": "^3.5.6",
+ "fido2-lib": "^3.5.7",
"file-type": "^21.3.0",
"form-data": "^4.0.5",
- "i18next": "^25.8.6",
+ "i18next": "^25.8.13",
"i18next-fs-backend": "^2.6.1",
"i18next-http-middleware": "^3.9.2",
"image-size": "^2.0.2",
@@ -69,14 +69,14 @@
"@types/multer": "^2.0.0",
"@types/murmurhash-js": "^1.0.6",
"@types/node": "^24.10.13",
- "@types/nodemailer": "^7.0.9",
+ "@types/nodemailer": "^7.0.11",
"@types/probe-image-size": "^7.2.5",
"@types/sharp": "^0.31.1",
"@types/ws": "^8.18.1",
- "@typescript-eslint/eslint-plugin": "^8.55.0",
- "@typescript-eslint/parser": "^8.55.0",
+ "@typescript-eslint/eslint-plugin": "^8.56.0",
+ "@typescript-eslint/parser": "^8.56.0",
"@typescript/native-preview": "^7.0.0-dev.20260119.1",
- "eslint": "^9.39.2",
+ "eslint": "^9.39.3",
"globals": "^16.5.0",
"husky": "^9.1.7",
"patch-package": "^8.0.1",
@@ -306,9 +306,9 @@
}
},
"node_modules/@eslint/eslintrc/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz",
+ "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -343,9 +343,9 @@
"license": "MIT"
},
"node_modules/@eslint/js": {
- "version": "9.39.2",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz",
- "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==",
+ "version": "9.39.3",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.3.tgz",
+ "integrity": "sha512-1B1VkCq6FuUNlQvlBYb+1jDu/gV297TIs/OeiaSR9l1H27SVW55ONE1e1Vp16NqP683+xEGzxYtv4XCiDPaQiw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1198,9 +1198,9 @@
}
},
"node_modules/@spacebarchat/medooze-media-server": {
- "version": "1.156.9",
- "resolved": "https://registry.npmjs.org/@spacebarchat/medooze-media-server/-/medooze-media-server-1.156.9.tgz",
- "integrity": "sha512-mfwtgy7zhVGdFwjwpHuXyVGcJfkHggMjWs3e/FISakfHWZtGe2JM8vDYMoQELbmOjDm0keMN+pf3BNQexqmzmA==",
+ "version": "1.156.10",
+ "resolved": "https://registry.npmjs.org/@spacebarchat/medooze-media-server/-/medooze-media-server-1.156.10.tgz",
+ "integrity": "sha512-RCuQUk2GNM4xJtbNR/6y7BA9jfqDGiZGa1Uq54tpAjWQFZ4LAuP57gtjbipGEUmAgkCf1EVHLUQNa3cyDWHUmg==",
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
@@ -1217,26 +1217,13 @@
"@dank074/medooze-media-server-src": "^3.1.2"
}
},
- "node_modules/@spacebarchat/medooze-media-server/node_modules/uuid": {
- "version": "13.0.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-13.0.0.tgz",
- "integrity": "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==",
- "funding": [
- "https://github.com/sponsors/broofa",
- "https://github.com/sponsors/ctavan"
- ],
- "license": "MIT",
- "bin": {
- "uuid": "dist-node/bin/uuid"
- }
- },
"node_modules/@spacebarchat/medooze-webrtc": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/@spacebarchat/medooze-webrtc/-/medooze-webrtc-1.0.10.tgz",
- "integrity": "sha512-FOzDmmlaCfVNkjVv8xWkaC3mylgtGmyRGro8v/0v6y3uaD4mp4+zwTItO0hze1cPGZIfnBrheNRzBnPh/wbfBw==",
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/@spacebarchat/medooze-webrtc/-/medooze-webrtc-1.0.11.tgz",
+ "integrity": "sha512-AswiF/+mDpN3cAg+iOK1iibX0Gu01CVtRd14prXrq92EWniL4JU5rdKTcGpeuOex0Z0VpELyZvxZoKtXmDCrww==",
"license": "AGPL-3.0-only",
"dependencies": {
- "@spacebarchat/medooze-media-server": "^1.156.9",
+ "@spacebarchat/medooze-media-server": "^1.156.10",
"semantic-sdp": "^3.31.1"
},
"peerDependencies": {
@@ -1642,9 +1629,9 @@
}
},
"node_modules/@types/nodemailer": {
- "version": "7.0.9",
- "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-7.0.9.tgz",
- "integrity": "sha512-vI8oF1M+8JvQhsId0Pc38BdUP2evenIIys7c7p+9OZXSPOH5c1dyINP1jT8xQ2xPuBUXmIC87s+91IZMDjH8Ow==",
+ "version": "7.0.11",
+ "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-7.0.11.tgz",
+ "integrity": "sha512-E+U4RzR2dKrx+u3N4DlsmLaDC6mMZOM/TPROxA0UAPiTgI0y4CEFBmZE+coGWTjakDriRsXG368lNk1u9Q0a2g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1727,17 +1714,17 @@
}
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.55.0.tgz",
- "integrity": "sha512-1y/MVSz0NglV1ijHC8OT49mPJ4qhPYjiK08YUQVbIOyu+5k862LKUHFkpKHWu//zmr7hDR2rhwUm6gnCGNmGBQ==",
+ "version": "8.56.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.56.0.tgz",
+ "integrity": "sha512-lRyPDLzNCuae71A3t9NEINBiTn7swyOhvUj3MyUOxb8x6g6vPEFoOU+ZRmGMusNC3X3YMhqMIX7i8ShqhT74Pw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/regexpp": "^4.12.2",
- "@typescript-eslint/scope-manager": "8.55.0",
- "@typescript-eslint/type-utils": "8.55.0",
- "@typescript-eslint/utils": "8.55.0",
- "@typescript-eslint/visitor-keys": "8.55.0",
+ "@typescript-eslint/scope-manager": "8.56.0",
+ "@typescript-eslint/type-utils": "8.56.0",
+ "@typescript-eslint/utils": "8.56.0",
+ "@typescript-eslint/visitor-keys": "8.56.0",
"ignore": "^7.0.5",
"natural-compare": "^1.4.0",
"ts-api-utils": "^2.4.0"
@@ -1750,8 +1737,8 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "@typescript-eslint/parser": "^8.55.0",
- "eslint": "^8.57.0 || ^9.0.0",
+ "@typescript-eslint/parser": "^8.56.0",
+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
"typescript": ">=4.8.4 <6.0.0"
}
},
@@ -1766,17 +1753,17 @@
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.55.0.tgz",
- "integrity": "sha512-4z2nCSBfVIMnbuu8uinj+f0o4qOeggYJLbjpPHka3KH1om7e+H9yLKTYgksTaHcGco+NClhhY2vyO3HsMH1RGw==",
+ "version": "8.56.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.56.0.tgz",
+ "integrity": "sha512-IgSWvLobTDOjnaxAfDTIHaECbkNlAlKv2j5SjpB2v7QHKv1FIfjwMy8FsDbVfDX/KjmCmYICcw7uGaXLhtsLNg==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
- "@typescript-eslint/scope-manager": "8.55.0",
- "@typescript-eslint/types": "8.55.0",
- "@typescript-eslint/typescript-estree": "8.55.0",
- "@typescript-eslint/visitor-keys": "8.55.0",
+ "@typescript-eslint/scope-manager": "8.56.0",
+ "@typescript-eslint/types": "8.56.0",
+ "@typescript-eslint/typescript-estree": "8.56.0",
+ "@typescript-eslint/visitor-keys": "8.56.0",
"debug": "^4.4.3"
},
"engines": {
@@ -1787,19 +1774,19 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "eslint": "^8.57.0 || ^9.0.0",
+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
"typescript": ">=4.8.4 <6.0.0"
}
},
"node_modules/@typescript-eslint/project-service": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.55.0.tgz",
- "integrity": "sha512-zRcVVPFUYWa3kNnjaZGXSu3xkKV1zXy8M4nO/pElzQhFweb7PPtluDLQtKArEOGmjXoRjnUZ29NjOiF0eCDkcQ==",
+ "version": "8.56.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.56.0.tgz",
+ "integrity": "sha512-M3rnyL1vIQOMeWxTWIW096/TtVP+8W3p/XnaFflhmcFp+U4zlxUxWj4XwNs6HbDeTtN4yun0GNTTDBw/SvufKg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/tsconfig-utils": "^8.55.0",
- "@typescript-eslint/types": "^8.55.0",
+ "@typescript-eslint/tsconfig-utils": "^8.56.0",
+ "@typescript-eslint/types": "^8.56.0",
"debug": "^4.4.3"
},
"engines": {
@@ -1814,14 +1801,14 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.55.0.tgz",
- "integrity": "sha512-fVu5Omrd3jeqeQLiB9f1YsuK/iHFOwb04bCtY4BSCLgjNbOD33ZdV6KyEqplHr+IlpgT0QTZ/iJ+wT7hvTx49Q==",
+ "version": "8.56.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.56.0.tgz",
+ "integrity": "sha512-7UiO/XwMHquH+ZzfVCfUNkIXlp/yQjjnlYUyYz7pfvlK3/EyyN6BK+emDmGNyQLBtLGaYrTAI6KOw8tFucWL2w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.55.0",
- "@typescript-eslint/visitor-keys": "8.55.0"
+ "@typescript-eslint/types": "8.56.0",
+ "@typescript-eslint/visitor-keys": "8.56.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1832,9 +1819,9 @@
}
},
"node_modules/@typescript-eslint/tsconfig-utils": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.55.0.tgz",
- "integrity": "sha512-1R9cXqY7RQd7WuqSN47PK9EDpgFUK3VqdmbYrvWJZYDd0cavROGn+74ktWBlmJ13NXUQKlZ/iAEQHI/V0kKe0Q==",
+ "version": "8.56.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.56.0.tgz",
+ "integrity": "sha512-bSJoIIt4o3lKXD3xmDh9chZcjCz5Lk8xS7Rxn+6l5/pKrDpkCwtQNQQwZ2qRPk7TkUYhrq3WPIHXOXlbXP0itg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1849,15 +1836,15 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.55.0.tgz",
- "integrity": "sha512-x1iH2unH4qAt6I37I2CGlsNs+B9WGxurP2uyZLRz6UJoZWDBx9cJL1xVN/FiOmHEONEg6RIufdvyT0TEYIgC5g==",
+ "version": "8.56.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.56.0.tgz",
+ "integrity": "sha512-qX2L3HWOU2nuDs6GzglBeuFXviDODreS58tLY/BALPC7iu3Fa+J7EOTwnX9PdNBxUI7Uh0ntP0YWGnxCkXzmfA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.55.0",
- "@typescript-eslint/typescript-estree": "8.55.0",
- "@typescript-eslint/utils": "8.55.0",
+ "@typescript-eslint/types": "8.56.0",
+ "@typescript-eslint/typescript-estree": "8.56.0",
+ "@typescript-eslint/utils": "8.56.0",
"debug": "^4.4.3",
"ts-api-utils": "^2.4.0"
},
@@ -1869,14 +1856,14 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "eslint": "^8.57.0 || ^9.0.0",
+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
"typescript": ">=4.8.4 <6.0.0"
}
},
"node_modules/@typescript-eslint/types": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.55.0.tgz",
- "integrity": "sha512-ujT0Je8GI5BJWi+/mMoR0wxwVEQaxM+pi30xuMiJETlX80OPovb2p9E8ss87gnSVtYXtJoU9U1Cowcr6w2FE0w==",
+ "version": "8.56.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.56.0.tgz",
+ "integrity": "sha512-DBsLPs3GsWhX5HylbP9HNG15U0bnwut55Lx12bHB9MpXxQ+R5GC8MwQe+N1UFXxAeQDvEsEDY6ZYwX03K7Z6HQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1888,16 +1875,16 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.55.0.tgz",
- "integrity": "sha512-EwrH67bSWdx/3aRQhCoxDaHM+CrZjotc2UCCpEDVqfCE+7OjKAGWNY2HsCSTEVvWH2clYQK8pdeLp42EVs+xQw==",
+ "version": "8.56.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.56.0.tgz",
+ "integrity": "sha512-ex1nTUMWrseMltXUHmR2GAQ4d+WjkZCT4f+4bVsps8QEdh0vlBsaCokKTPlnqBFqqGaxilDNJG7b8dolW2m43Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/project-service": "8.55.0",
- "@typescript-eslint/tsconfig-utils": "8.55.0",
- "@typescript-eslint/types": "8.55.0",
- "@typescript-eslint/visitor-keys": "8.55.0",
+ "@typescript-eslint/project-service": "8.56.0",
+ "@typescript-eslint/tsconfig-utils": "8.56.0",
+ "@typescript-eslint/types": "8.56.0",
+ "@typescript-eslint/visitor-keys": "8.56.0",
"debug": "^4.4.3",
"minimatch": "^9.0.5",
"semver": "^7.7.3",
@@ -1915,24 +1902,37 @@
"typescript": ">=4.8.4 <6.0.0"
}
},
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/balanced-match": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
+ "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "18 || 20 || >=22"
+ }
+ },
"node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
- "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz",
+ "integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "balanced-match": "^1.0.0"
+ "balanced-match": "^4.0.2"
+ },
+ "engines": {
+ "node": "18 || 20 || >=22"
}
},
"node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "version": "9.0.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.6.tgz",
+ "integrity": "sha512-kQAVowdR33euIqeA0+VZTDqU+qo1IeVY+hrKYtZMio3Pg0P0vuh/kwRylLUddJhB6pf3q/botcOvRtx4IN1wqQ==",
"dev": true,
"license": "ISC",
"dependencies": {
- "brace-expansion": "^2.0.1"
+ "brace-expansion": "^5.0.2"
},
"engines": {
"node": ">=16 || 14 >=14.17"
@@ -1942,16 +1942,16 @@
}
},
"node_modules/@typescript-eslint/utils": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.55.0.tgz",
- "integrity": "sha512-BqZEsnPGdYpgyEIkDC1BadNY8oMwckftxBT+C8W0g1iKPdeqKZBtTfnvcq0nf60u7MkjFO8RBvpRGZBPw4L2ow==",
+ "version": "8.56.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.56.0.tgz",
+ "integrity": "sha512-RZ3Qsmi2nFGsS+n+kjLAYDPVlrzf7UhTffrDIKr+h2yzAlYP/y5ZulU0yeDEPItos2Ph46JAL5P/On3pe7kDIQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.9.1",
- "@typescript-eslint/scope-manager": "8.55.0",
- "@typescript-eslint/types": "8.55.0",
- "@typescript-eslint/typescript-estree": "8.55.0"
+ "@typescript-eslint/scope-manager": "8.56.0",
+ "@typescript-eslint/types": "8.56.0",
+ "@typescript-eslint/typescript-estree": "8.56.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1961,19 +1961,19 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "eslint": "^8.57.0 || ^9.0.0",
+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
"typescript": ">=4.8.4 <6.0.0"
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.55.0.tgz",
- "integrity": "sha512-AxNRwEie8Nn4eFS1FzDMJWIISMGoXMb037sgCBJ3UR6o0fQTzr2tqN9WT+DkWJPhIdQCfV7T6D387566VtnCJA==",
+ "version": "8.56.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.56.0.tgz",
+ "integrity": "sha512-q+SL+b+05Ud6LbEE35qe4A99P+htKTKVbyiNEe45eCbJFyh/HVK9QXwlrbz+Q4L8SOW4roxSVwXYj4DMBT7Ieg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.55.0",
- "eslint-visitor-keys": "^4.2.1"
+ "@typescript-eslint/types": "8.56.0",
+ "eslint-visitor-keys": "^5.0.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1984,41 +1984,41 @@
}
},
"node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
- "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz",
+ "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==",
"dev": true,
"license": "Apache-2.0",
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ "node": "^20.19.0 || ^22.13.0 || >=24"
},
"funding": {
"url": "https://opencollective.com/eslint"
}
},
"node_modules/@typescript/native-preview": {
- "version": "7.0.0-dev.20260212.1",
- "resolved": "https://registry.npmjs.org/@typescript/native-preview/-/native-preview-7.0.0-dev.20260212.1.tgz",
- "integrity": "sha512-VHAVbp8d2VGm90EK//brKIYvT3iPrLXMq4/LApCdkKww/Hfn33zPRVmig4rswNaJiVu8XhcdHld5yfMw6d5A9Q==",
+ "version": "7.0.0-dev.20260222.1",
+ "resolved": "https://registry.npmjs.org/@typescript/native-preview/-/native-preview-7.0.0-dev.20260222.1.tgz",
+ "integrity": "sha512-Uxon0iNhNqH/HkWvKmTmr7d5TJp6yomoyFHNpLIEghy91/DNWEtKMuLjNDYPFcoNxWpuJW9vuWTWeu3mcqT94Q==",
"dev": true,
"license": "Apache-2.0",
"bin": {
"tsgo": "bin/tsgo.js"
},
"optionalDependencies": {
- "@typescript/native-preview-darwin-arm64": "7.0.0-dev.20260212.1",
- "@typescript/native-preview-darwin-x64": "7.0.0-dev.20260212.1",
- "@typescript/native-preview-linux-arm": "7.0.0-dev.20260212.1",
- "@typescript/native-preview-linux-arm64": "7.0.0-dev.20260212.1",
- "@typescript/native-preview-linux-x64": "7.0.0-dev.20260212.1",
- "@typescript/native-preview-win32-arm64": "7.0.0-dev.20260212.1",
- "@typescript/native-preview-win32-x64": "7.0.0-dev.20260212.1"
+ "@typescript/native-preview-darwin-arm64": "7.0.0-dev.20260222.1",
+ "@typescript/native-preview-darwin-x64": "7.0.0-dev.20260222.1",
+ "@typescript/native-preview-linux-arm": "7.0.0-dev.20260222.1",
+ "@typescript/native-preview-linux-arm64": "7.0.0-dev.20260222.1",
+ "@typescript/native-preview-linux-x64": "7.0.0-dev.20260222.1",
+ "@typescript/native-preview-win32-arm64": "7.0.0-dev.20260222.1",
+ "@typescript/native-preview-win32-x64": "7.0.0-dev.20260222.1"
}
},
"node_modules/@typescript/native-preview-darwin-arm64": {
- "version": "7.0.0-dev.20260212.1",
- "resolved": "https://registry.npmjs.org/@typescript/native-preview-darwin-arm64/-/native-preview-darwin-arm64-7.0.0-dev.20260212.1.tgz",
- "integrity": "sha512-HH4bOVbNW6ITv00VSaE3aZjCuU2d+amgFZKdhbq7NpcJDxFvxyy9GT9gkKV0D1DXz5qoxZIcyBEIbwrhABb9vg==",
+ "version": "7.0.0-dev.20260222.1",
+ "resolved": "https://registry.npmjs.org/@typescript/native-preview-darwin-arm64/-/native-preview-darwin-arm64-7.0.0-dev.20260222.1.tgz",
+ "integrity": "sha512-aXfK/s3QlbzXvZoFQ07KJDNx86q61nCITSreqLytnqjhjsXUUuMACsxjy/YsReLG2bdii+mHTA2WB2IB0LKKGA==",
"cpu": [
"arm64"
],
@@ -2030,9 +2030,9 @@
]
},
"node_modules/@typescript/native-preview-darwin-x64": {
- "version": "7.0.0-dev.20260212.1",
- "resolved": "https://registry.npmjs.org/@typescript/native-preview-darwin-x64/-/native-preview-darwin-x64-7.0.0-dev.20260212.1.tgz",
- "integrity": "sha512-vnQ2xRJscbtyS/jHO5QY2xAZ3c11Yn1ZAor/XODDrxd7N7jIrm0Vtc2CIwsi51oncLS1SZtUd9cHZmJg5zUJrQ==",
+ "version": "7.0.0-dev.20260222.1",
+ "resolved": "https://registry.npmjs.org/@typescript/native-preview-darwin-x64/-/native-preview-darwin-x64-7.0.0-dev.20260222.1.tgz",
+ "integrity": "sha512-+bHnCeONX47pmVXTt6kuwxiLayDVqkLtshjqpqthXMWFFGk+1K/5ASbFEb2FumSABgB9hQ/xqkjj5QHUgGmbPg==",
"cpu": [
"x64"
],
@@ -2044,9 +2044,9 @@
]
},
"node_modules/@typescript/native-preview-linux-arm": {
- "version": "7.0.0-dev.20260212.1",
- "resolved": "https://registry.npmjs.org/@typescript/native-preview-linux-arm/-/native-preview-linux-arm-7.0.0-dev.20260212.1.tgz",
- "integrity": "sha512-T8sF3YtYtODhWnFNhVuL/GABCHpKJs6ZxTtSC1LtXoM/CE0Ai06k5WKOxJG5rJrBtLIW+Dempk7qKPfhNliDTA==",
+ "version": "7.0.0-dev.20260222.1",
+ "resolved": "https://registry.npmjs.org/@typescript/native-preview-linux-arm/-/native-preview-linux-arm-7.0.0-dev.20260222.1.tgz",
+ "integrity": "sha512-bavfJlI3JNH2F/7BX0drZ4JCSjLsCc2Dy5e2s6pc2wuLIzJ6hIjFaXIeB9TDbVYJE+MlLf6rtQF9nP9iSsgk9g==",
"cpu": [
"arm"
],
@@ -2058,9 +2058,9 @@
]
},
"node_modules/@typescript/native-preview-linux-arm64": {
- "version": "7.0.0-dev.20260212.1",
- "resolved": "https://registry.npmjs.org/@typescript/native-preview-linux-arm64/-/native-preview-linux-arm64-7.0.0-dev.20260212.1.tgz",
- "integrity": "sha512-suA5OryrhL/tE7AiQXiNNV88XwKEOfO0sypJQj+cfg/fpQ2trFyDZcsdMLYVZ7J0zirDai6H3TDETYYoNFE1/g==",
+ "version": "7.0.0-dev.20260222.1",
+ "resolved": "https://registry.npmjs.org/@typescript/native-preview-linux-arm64/-/native-preview-linux-arm64-7.0.0-dev.20260222.1.tgz",
+ "integrity": "sha512-Usm9oJzLPqK7Z7echSSaHnmTXhr3knLXycoyVZwRrmWC33aX2efZb+XrdaV/SMhdYjYHCZ6mE60qcK4nEaXdng==",
"cpu": [
"arm64"
],
@@ -2072,9 +2072,9 @@
]
},
"node_modules/@typescript/native-preview-linux-x64": {
- "version": "7.0.0-dev.20260212.1",
- "resolved": "https://registry.npmjs.org/@typescript/native-preview-linux-x64/-/native-preview-linux-x64-7.0.0-dev.20260212.1.tgz",
- "integrity": "sha512-w687rpZKJM0Lev0ya0GYJlnFCITTUmN8jDpwLXn60jrNEZzL2J4F7biA6papr2sMdKRfWvRklhjB1TKHbJ6FKA==",
+ "version": "7.0.0-dev.20260222.1",
+ "resolved": "https://registry.npmjs.org/@typescript/native-preview-linux-x64/-/native-preview-linux-x64-7.0.0-dev.20260222.1.tgz",
+ "integrity": "sha512-JaOwNBJ2nA0C/MBfMXilrVNv+hUpIzs7JtpSgpOsXa3Hq7BL2rnoO6WMuCo8IHz7v8+Lr+MPJufXVEHfrOtf5A==",
"cpu": [
"x64"
],
@@ -2086,9 +2086,9 @@
]
},
"node_modules/@typescript/native-preview-win32-arm64": {
- "version": "7.0.0-dev.20260212.1",
- "resolved": "https://registry.npmjs.org/@typescript/native-preview-win32-arm64/-/native-preview-win32-arm64-7.0.0-dev.20260212.1.tgz",
- "integrity": "sha512-NhCXPQF6OTNEZl8iwRE1ef/zHiqit5p3m7hdT2vfAOi1iA2eoazX0zTSdhgjX83o9cLjen3V1R7nbSYehFHaqw==",
+ "version": "7.0.0-dev.20260222.1",
+ "resolved": "https://registry.npmjs.org/@typescript/native-preview-win32-arm64/-/native-preview-win32-arm64-7.0.0-dev.20260222.1.tgz",
+ "integrity": "sha512-Mngr3qdeO7Ey3DtsHe4oqIghXYcjOr9pVQtKXbijfT0slRtVPeF1TmEb/eH+Z+LsY1SOW8c/Cig1G4NDXZnghw==",
"cpu": [
"arm64"
],
@@ -2100,9 +2100,9 @@
]
},
"node_modules/@typescript/native-preview-win32-x64": {
- "version": "7.0.0-dev.20260212.1",
- "resolved": "https://registry.npmjs.org/@typescript/native-preview-win32-x64/-/native-preview-win32-x64-7.0.0-dev.20260212.1.tgz",
- "integrity": "sha512-0yqSBlASRx9rqM12QvaWc227w+bIsuI2EwAiNsoB1ybRbCXoXMah1RQlfjjTpD02eWCe/029vwrNhq+FLn7Z8A==",
+ "version": "7.0.0-dev.20260222.1",
+ "resolved": "https://registry.npmjs.org/@typescript/native-preview-win32-x64/-/native-preview-win32-x64-7.0.0-dev.20260222.1.tgz",
+ "integrity": "sha512-8Gps/FPcQiyoHeDhRY3RXhJSJwQQuUIP5lepYO3+2xvCPPeeNBoOueiLoGKxno4CYbS4O2fPdVmymboX0ApjZA==",
"cpu": [
"x64"
],
@@ -2166,9 +2166,9 @@
}
},
"node_modules/acorn": {
- "version": "8.15.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
- "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz",
+ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
"devOptional": true,
"license": "MIT",
"peer": true,
@@ -2190,9 +2190,9 @@
}
},
"node_modules/acorn-walk": {
- "version": "8.3.4",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz",
- "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==",
+ "version": "8.3.5",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz",
+ "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==",
"devOptional": true,
"license": "MIT",
"dependencies": {
@@ -2216,9 +2216,9 @@
}
},
"node_modules/ajv": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
- "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+ "version": "8.18.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz",
+ "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==",
"license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.3",
@@ -2450,6 +2450,7 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "devOptional": true,
"license": "MIT"
},
"node_modules/base-64": {
@@ -3217,9 +3218,9 @@
}
},
"node_modules/dotenv": {
- "version": "17.2.4",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.4.tgz",
- "integrity": "sha512-mudtfb4zRB4bVvdj0xRo+e6duH1csJRM8IukBqfTRvHotn9+LBXB8ynAidP9zHqoRC/fsllXgk4kCKlR21fIhw==",
+ "version": "17.3.1",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.3.1.tgz",
+ "integrity": "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==",
"license": "BSD-2-Clause",
"engines": {
"node": ">=12"
@@ -3404,9 +3405,9 @@
}
},
"node_modules/eslint": {
- "version": "9.39.2",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz",
- "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==",
+ "version": "9.39.3",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.3.tgz",
+ "integrity": "sha512-VmQ+sifHUbI/IcSopBCF/HO3YiHQx/AVd3UVyYL6weuwW+HvON9VYn5l6Zl1WZzPWXPNZrSQpxwkkZ/VuvJZzg==",
"dev": true,
"license": "MIT",
"peer": true,
@@ -3417,7 +3418,7 @@
"@eslint/config-helpers": "^0.4.2",
"@eslint/core": "^0.17.0",
"@eslint/eslintrc": "^3.3.1",
- "@eslint/js": "9.39.2",
+ "@eslint/js": "9.39.3",
"@eslint/plugin-kit": "^0.4.1",
"@humanfs/node": "^0.16.6",
"@humanwhocodes/module-importer": "^1.0.1",
@@ -3495,9 +3496,9 @@
}
},
"node_modules/eslint/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz",
+ "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3768,9 +3769,9 @@
}
},
"node_modules/fido2-lib": {
- "version": "3.5.6",
- "resolved": "https://registry.npmjs.org/fido2-lib/-/fido2-lib-3.5.6.tgz",
- "integrity": "sha512-uYJjMxO/odAelhdm2SMtiGJWZMRmbccev10c+Jw9FM2yYMS+3IOZfnGItrQiBiMoCt2t3lYqSF8DA85lBzVylg==",
+ "version": "3.5.7",
+ "resolved": "https://registry.npmjs.org/fido2-lib/-/fido2-lib-3.5.7.tgz",
+ "integrity": "sha512-WcbaXbT0vW840pUn0N+YuShz0QXR3UnlF/sChdaxf7gKz8LWxXHv4s2OKxlUEn5Lhapb2JcnP4gyE90O1d/YCg==",
"license": "MIT",
"dependencies": {
"@hexagon/base64": "^2.0.4",
@@ -4371,9 +4372,9 @@
}
},
"node_modules/i18next": {
- "version": "25.8.6",
- "resolved": "https://registry.npmjs.org/i18next/-/i18next-25.8.6.tgz",
- "integrity": "sha512-HsS6p2yr/Vo5EPljWuBJ9OxKVFok2Q/Oa6PvFTpv2bMcDt2sQMOnKDQ7FTDDdME+3d1YULQjKj7aVSZP1bCouQ==",
+ "version": "25.8.13",
+ "resolved": "https://registry.npmjs.org/i18next/-/i18next-25.8.13.tgz",
+ "integrity": "sha512-E0vzjBY1yM+nsFrtgkjLhST2NBkirkvOVoQa0MSldhsuZ3jUge7ZNpuwG0Cfc74zwo5ZwRzg3uOgT+McBn32iA==",
"funding": [
{
"type": "individual",
@@ -5103,9 +5104,9 @@
}
},
"node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.3.tgz",
+ "integrity": "sha512-M2GCs7Vk83NxkUyQV1bkABc4yxgz9kILhHImZiBPAZ9ybuvCb0/H7lEl5XvIg3g+9d4eNotkZA5IWwYl0tibaA==",
"devOptional": true,
"license": "ISC",
"dependencies": {
@@ -6282,9 +6283,9 @@
}
},
"node_modules/qs": {
- "version": "6.14.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz",
- "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==",
+ "version": "6.15.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz",
+ "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==",
"license": "BSD-3-Clause",
"dependencies": {
"side-channel": "^1.1.0"
@@ -7324,13 +7325,25 @@
}
}
},
+ "node_modules/typeorm/node_modules/balanced-match": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
+ "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
+ "license": "MIT",
+ "engines": {
+ "node": "18 || 20 || >=22"
+ }
+ },
"node_modules/typeorm/node_modules/brace-expansion": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
- "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz",
+ "integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==",
"license": "MIT",
"dependencies": {
- "balanced-match": "^1.0.0"
+ "balanced-match": "^4.0.2"
+ },
+ "engines": {
+ "node": "18 || 20 || >=22"
}
},
"node_modules/typeorm/node_modules/dotenv": {
@@ -7367,12 +7380,12 @@
}
},
"node_modules/typeorm/node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "version": "9.0.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.6.tgz",
+ "integrity": "sha512-kQAVowdR33euIqeA0+VZTDqU+qo1IeVY+hrKYtZMio3Pg0P0vuh/kwRylLUddJhB6pf3q/botcOvRtx4IN1wqQ==",
"license": "ISC",
"dependencies": {
- "brace-expansion": "^2.0.1"
+ "brace-expansion": "^5.0.2"
},
"engines": {
"node": ">=16 || 14 >=14.17"
@@ -7382,14 +7395,27 @@
}
},
"node_modules/typeorm/node_modules/minipass": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
- "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
- "license": "ISC",
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz",
+ "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==",
+ "license": "BlueOak-1.0.0",
"engines": {
"node": ">=16 || 14 >=14.17"
}
},
+ "node_modules/typeorm/node_modules/uuid": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz",
+ "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==",
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/esm/bin/uuid"
+ }
+ },
"node_modules/typescript": {
"version": "5.9.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
@@ -7469,9 +7495,9 @@
}
},
"node_modules/undici": {
- "version": "7.21.0",
- "resolved": "https://registry.npmjs.org/undici/-/undici-7.21.0.tgz",
- "integrity": "sha512-Hn2tCQpoDt1wv23a68Ctc8Cr/BHpUSfaPYrkajTXOS9IKpxVRx/X5m1K2YkbK2ipgZgxXSgsUinl3x+2YdSSfg==",
+ "version": "7.22.0",
+ "resolved": "https://registry.npmjs.org/undici/-/undici-7.22.0.tgz",
+ "integrity": "sha512-RqslV2Us5BrllB+JeiZnK4peryVTndy9Dnqq62S3yYRRTj0tFQCwEniUy2167skdGOy3vqRzEvl1Dm4sV2ReDg==",
"license": "MIT",
"engines": {
"node": ">=20.18.1"
@@ -7546,16 +7572,16 @@
"license": "MIT"
},
"node_modules/uuid": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz",
- "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==",
+ "version": "13.0.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-13.0.0.tgz",
+ "integrity": "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==",
"funding": [
"https://github.com/sponsors/broofa",
"https://github.com/sponsors/ctavan"
],
"license": "MIT",
"bin": {
- "uuid": "dist/esm/bin/uuid"
+ "uuid": "dist-node/bin/uuid"
}
},
"node_modules/v8-compile-cache-lib": {
diff --git a/package.json b/package.json
index e3bc55e2..c86c976a 100644
--- a/package.json
+++ b/package.json
@@ -60,14 +60,14 @@
"@types/multer": "^2.0.0",
"@types/murmurhash-js": "^1.0.6",
"@types/node": "^24.10.13",
- "@types/nodemailer": "^7.0.9",
+ "@types/nodemailer": "^7.0.11",
"@types/probe-image-size": "^7.2.5",
"@types/sharp": "^0.31.1",
"@types/ws": "^8.18.1",
- "@typescript-eslint/eslint-plugin": "^8.55.0",
- "@typescript-eslint/parser": "^8.55.0",
+ "@typescript-eslint/eslint-plugin": "^8.56.0",
+ "@typescript-eslint/parser": "^8.56.0",
"@typescript/native-preview": "^7.0.0-dev.20260119.1",
- "eslint": "^9.39.2",
+ "eslint": "^9.39.3",
"globals": "^16.5.0",
"husky": "^9.1.7",
"patch-package": "^8.0.1",
@@ -78,9 +78,9 @@
"typescript-json-schema": "^0.65.1"
},
"dependencies": {
- "@spacebarchat/medooze-webrtc": "^1.0.10",
+ "@spacebarchat/medooze-webrtc": "^1.0.11",
"@toondepauw/node-zstd": "^1.2.0",
- "ajv": "^8.17.1",
+ "ajv": "^8.18.0",
"ajv-formats": "^3.0.1",
"amqplib": "^0.10.9",
"badge-maker": "^5.0.2",
@@ -90,15 +90,15 @@
"cheerio": "^1.2.0",
"cookie-parser": "^1.4.7",
"discord-protos": "^1.2.102",
- "dotenv": "^17.2.4",
+ "dotenv": "^17.3.1",
"email-providers": "^2.21.0",
"exif-be-gone": "^1.5.1",
"express": "^5.2.1",
"fast-zlib": "^2.0.1",
- "fido2-lib": "^3.5.6",
+ "fido2-lib": "^3.5.7",
"file-type": "^21.3.0",
"form-data": "^4.0.5",
- "i18next": "^25.8.6",
+ "i18next": "^25.8.13",
"i18next-fs-backend": "^2.6.1",
"i18next-http-middleware": "^3.9.2",
"image-size": "^2.0.2",
diff --git a/src/api/routes/discoverable-guilds.ts b/src/api/routes/discoverable-guilds.ts
index 87de37a3..2df44c16 100644
--- a/src/api/routes/discoverable-guilds.ts
+++ b/src/api/routes/discoverable-guilds.ts
@@ -21,6 +21,7 @@ import { Config, Guild, Member } from "@spacebar/util";
import { route } from "@spacebar/api";
import { Request, Response, Router } from "express";
import { In, Like, Not } from "typeorm";
+import { DiscoverableGuildsResponse } from "@spacebar/schemas";
const router = Router({ mergeParams: true });
@@ -64,7 +65,11 @@ router.get(
res.send({
total: total,
- guilds: guilds,
+ guilds: guilds.map((g) => ({
+ ...g,
+ discovery_weight: undefined,
+ discovery_splash: undefined,
+ })),
offset: Number(offset || Config.get().guild.discovery.offset),
limit: Number(limit || configLimit),
});
|