@jeffusion/bungee-core 6.8.1 → 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.
- package/dist/config-storage-worker.js +37 -5
- package/dist/main.js +173 -62
- package/dist/observability-worker.js +36 -4
- package/dist/plugins/codex-router/index.js.map +1 -1
- package/dist/plugins/llm-protocol-adapter/control.js +129 -42
- package/dist/plugins/llm-protocol-adapter/control.js.map +5 -5
- package/dist/plugins/llm-protocol-adapter/index.js +129 -42
- package/dist/plugins/llm-protocol-adapter/index.js.map +5 -5
- package/dist/plugins/token-metering/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -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
|