@jeffusion/bungee-core 6.8.2 → 6.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6874,6 +6874,10 @@ function validateGlobalPolicies(object, context) {
6874
6874
  if (object.body_parser_limit !== undefined && (typeof object.body_parser_limit !== "string" || !isBodyParserLimit(object.body_parser_limit))) {
6875
6875
  context.add(typeof object.body_parser_limit === "string" ? "invalid_value" : "invalid_type", "body_parser_limit", "Invalid body parser limit");
6876
6876
  }
6877
+ const maxConnections = object.websocket_max_connections;
6878
+ if (maxConnections !== undefined && maxConnections !== null && (!Number.isSafeInteger(maxConnections) || maxConnections < 1 || maxConnections > 2147483647)) {
6879
+ context.add("invalid_value", "websocket_max_connections", "Expected null or an integer between 1 and 2147483647");
6880
+ }
6877
6881
  validateAuth(object.auth, "auth", context);
6878
6882
  if (object.publication !== undefined) {
6879
6883
  for (const error of validatePublicationPolicy(object.publication)) {
@@ -7243,7 +7247,7 @@ function validatePluginOptions(name, options, path, catalog, context) {
7243
7247
  }
7244
7248
 
7245
7249
  // src/config-storage/compiler.ts
7246
- var GLOBAL_KEYS = ["log_level", "body_parser_limit", "auth", "logging", "publication"];
7250
+ var GLOBAL_KEYS = ["log_level", "body_parser_limit", "auth", "logging", "publication", "websocket_max_connections"];
7247
7251
  var SERVICE_KEYS = ["health_check", "failover", "load_balancing"];
7248
7252
  var ROUTE_KEYS = [
7249
7253
  "request",
@@ -8776,13 +8780,15 @@ function replaceActiveMaterialization(db, aggregate) {
8776
8780
  const settingsColumns = new Set(db.query("PRAGMA table_info(settings)").all().map(({ name }) => name));
8777
8781
  const publicationColumn = settingsColumns.has("publication_json") ? ",publication_json" : "";
8778
8782
  const publicationValue = settingsColumns.has("publication_json") ? ",?" : "";
8783
+ const hasWebSocketLimit = settingsColumns.has("websocket_max_connections_json");
8779
8784
  db.run(`INSERT INTO settings
8780
- (id,log_level,body_parser_limit,auth_json,logging_json${publicationColumn}) VALUES (1,?,?,?,?${publicationValue})`, [
8785
+ (id,log_level,body_parser_limit,auth_json,logging_json${publicationColumn}${hasWebSocketLimit ? ",websocket_max_connections_json" : ""}) VALUES (1,?,?,?,?${publicationValue}${hasWebSocketLimit ? ",?" : ""})`, [
8781
8786
  logical.log_level ?? null,
8782
8787
  logical.body_parser_limit ?? null,
8783
8788
  logical.auth === undefined ? null : canonicalJson(logical.auth),
8784
8789
  logical.logging === undefined ? null : canonicalJson(logical.logging),
8785
- ...settingsColumns.has("publication_json") ? [logical.publication === undefined ? null : canonicalJson(logical.publication)] : []
8790
+ ...settingsColumns.has("publication_json") ? [logical.publication === undefined ? null : canonicalJson(logical.publication)] : [],
8791
+ ...hasWebSocketLimit ? [logical.websocket_max_connections === undefined ? null : canonicalJson(logical.websocket_max_connections)] : []
8786
8792
  ]);
8787
8793
  writeServices(db, logical.services);
8788
8794
  writeRoutes(db, logical.routes);
@@ -9437,11 +9443,23 @@ var SERVICE_RESERVED = new Set(["id", "position", "name", "endpoints", "service_
9437
9443
  var ROUTE_RESERVED = new Set(["id", "position", "path", "service_id", "service", "service_references", "endpoints", "plugins"]);
9438
9444
  function readSettings(db) {
9439
9445
  const hasPublication = sqliteAll(db, "PRAGMA table_info(settings)").some(({ name }) => name === "publication_json");
9440
- const rows = sqliteAll(db, `SELECT log_level,body_parser_limit,auth_json,logging_json${hasPublication ? ",publication_json" : ",NULL AS publication_json"} FROM settings`);
9446
+ const rows = sqliteAll(db, `SELECT log_level,body_parser_limit,auth_json,logging_json${hasPublication ? ",publication_json" : ",NULL AS publication_json"},websocket_max_connections_json FROM settings`);
9441
9447
  const row = rows[0];
9442
9448
  if (rows.length !== 1 || row === undefined)
9443
9449
  throw new ConfigRepositoryError("schema_corrupt", "settings singleton is broken");
9450
+ let websocketLimit;
9451
+ if (row.websocket_max_connections_json !== null) {
9452
+ try {
9453
+ websocketLimit = JSON.parse(row.websocket_max_connections_json);
9454
+ } catch {
9455
+ throw new ConfigRepositoryError("schema_corrupt", "WebSocket connection limit is invalid");
9456
+ }
9457
+ if (JSON.stringify(websocketLimit) !== row.websocket_max_connections_json) {
9458
+ throw new ConfigRepositoryError("schema_corrupt", "WebSocket connection limit is not canonical");
9459
+ }
9460
+ }
9444
9461
  return {
9462
+ ...row.websocket_max_connections_json === null ? {} : { websocket_max_connections: websocketLimit },
9445
9463
  ...row.log_level === null ? {} : { log_level: requireOptionalGlobalScalar(row.log_level, "log_level") },
9446
9464
  ...row.body_parser_limit === null ? {} : {
9447
9465
  body_parser_limit: requireOptionalGlobalScalar(row.body_parser_limit, "body_parser_limit")
@@ -9844,6 +9862,20 @@ function databaseSchemaDescriptor(db) {
9844
9862
  });
9845
9863
  }
9846
9864
 
9865
+ // src/config-storage/migrations/websocket-connections.ts
9866
+ var WEBSOCKET_CONNECTIONS_MIGRATION = {
9867
+ version: 6,
9868
+ name: "websocket_connections",
9869
+ up(db) {
9870
+ db.run(`ALTER TABLE settings ADD COLUMN websocket_max_connections_json TEXT
9871
+ CHECK(websocket_max_connections_json IS NULL OR websocket_max_connections_json='null'
9872
+ OR (json_valid(websocket_max_connections_json)
9873
+ AND json_type(websocket_max_connections_json)='integer'
9874
+ AND json_extract(websocket_max_connections_json,'$') BETWEEN 1 AND 2147483647
9875
+ AND websocket_max_connections_json=CAST(json_extract(websocket_max_connections_json,'$') AS TEXT)))`);
9876
+ }
9877
+ };
9878
+
9847
9879
  // src/config-storage/migrations/service-references.ts
9848
9880
  var SERVICE_REFERENCES_MIGRATION = {
9849
9881
  version: 5,
@@ -10265,7 +10297,7 @@ var PUBLICATION_RETIREMENT_MIGRATION = {
10265
10297
  };
10266
10298
 
10267
10299
  // src/config-storage/migrations/plan.ts
10268
- var CONFIG_MIGRATIONS = [CONFIG_BASELINE, PUBLICATION_RETIREMENT_MIGRATION, UI_MENUS_MIGRATION, MANAGEMENT_PROTECTION_MIGRATION, SERVICE_REFERENCES_MIGRATION];
10300
+ var CONFIG_MIGRATIONS = [CONFIG_BASELINE, PUBLICATION_RETIREMENT_MIGRATION, UI_MENUS_MIGRATION, MANAGEMENT_PROTECTION_MIGRATION, SERVICE_REFERENCES_MIGRATION, WEBSOCKET_CONNECTIONS_MIGRATION];
10269
10301
  var CONFIG_SCHEMA_VERSION = CONFIG_MIGRATIONS.at(-1).version;
10270
10302
 
10271
10303
  // src/config-storage/schema-fingerprint.ts