ueberdb2 6.1.7 → 6.1.9

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/README.md CHANGED
@@ -334,6 +334,65 @@ write to the database.
334
334
 
335
335
  You should create your database as utf8mb4_bin.
336
336
 
337
+ ## PostgreSQL Advice
338
+
339
+ The `postgres` driver uses a [`pg`](https://node-postgres.com/) connection
340
+ pool. The pool-related settings below are part of the `Settings` type; other
341
+ [`pg` pool options](https://node-postgres.com/apis/pool) are forwarded to the
342
+ pool at runtime as well, but aren't in the type yet (so TypeScript callers may
343
+ need a cast for those). The defaults applied by ueberDB2 are:
344
+
345
+ | Setting | Default | Notes |
346
+ | ----------------------------- | ------- | ------------------------------------------------------------- |
347
+ | `max` | `20` | Maximum connections in the pool. |
348
+ | `min` | `4` | Minimum warm connections kept open (honored by `pg` >= 8.16). |
349
+ | `idleTimeoutMillis` | `1000` | Idle reaping only applies to connections **above** `min`. |
350
+ | `keepAlive` | `true` | Enables TCP keep-alive on pooled sockets. |
351
+ | `keepAliveInitialDelayMillis` | `10000` | Delay before the first keep-alive probe (ms). |
352
+
353
+ ### Idle connections behind a proxy / load balancer / firewall
354
+
355
+ Because `min` connections are kept warm, those sockets can sit idle
356
+ indefinitely. Anything between your application and PostgreSQL that drops idle
357
+ connections will eventually close them, and the next use then fails with
358
+ `Connection terminated unexpectedly`. There are two distinct flavours of
359
+ "idle drop", and they need different handling:
360
+
361
+ - **Kernel / NAT / firewall / conntrack state expiry** — these expire idle
362
+ TCP flows when _no packets at all_ are seen. `keepAlive` (enabled by default,
363
+ 10s initial delay) fixes this: the OS emits periodic keep-alive probes so the
364
+ flow never looks dead. Lower `keepAliveInitialDelayMillis` if the idle window
365
+ is shorter than 10s.
366
+
367
+ - **Application-layer proxy idle timeouts** — e.g. HAProxy `timeout server` /
368
+ `timeout client`, pgbouncer, many cloud LBs. These count _data_ inactivity,
369
+ and TCP keep-alive probes are empty kernel-level segments that the proxy does
370
+ **not** see as activity. **`keepAlive` does not help here** — the proxy will
371
+ still close the connection on schedule. For these you must either raise the
372
+ proxy's idle timeout (for HAProxy in `mode tcp`, `timeout tunnel` is the knob
373
+ for long-lived connections), or rely on the pool recovering from the drop.
374
+
375
+ That recovery is the important part, and is always on regardless of proxy
376
+ config: **a pool `error` handler is attached**, so a dropped idle connection is
377
+ logged and discarded (the pool transparently reconnects on next use) instead of
378
+ being re-thrown as an uncaught EventEmitter `'error'` that crashes the host
379
+ process. The drop itself is harmless; what used to be fatal was the missing
380
+ handler.
381
+
382
+ ```javascript
383
+ const db = new ueberdb.Database("postgres", {
384
+ host: "127.0.0.1",
385
+ user: "ueberdb",
386
+ password: "ueberdb",
387
+ database: "ueberdb",
388
+ // Helps against kernel/NAT/firewall idle expiry. Does NOT defeat an
389
+ // application-layer proxy idle timeout (e.g. HAProxy timeout server) —
390
+ // raise the proxy timeout for that; the pool reconnects either way.
391
+ keepAlive: true,
392
+ keepAliveInitialDelayMillis: 5000,
393
+ });
394
+ ```
395
+
337
396
  ## Redis TLS communication
338
397
 
339
398
  If you enabled TLS on your Redis database (available since Redis 6.0) you will
@@ -1 +1 @@
1
- {"version":3,"file":"postgres_db.d.ts","sourceRoot":"","sources":["../../databases/postgres_db.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,gBAAgB,EAAE,EAAE,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAE1E,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,CAAC,OAAO,MAAO,SAAQ,gBAAgB;IACpC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC;IACZ,eAAe,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;gBACtC,QAAQ,EAAE,QAAQ,GAAG,MAAM;IAgBvC,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,EAAE;IA4EjC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE;IAYhE,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE;IA0BrF,aAAa,CACX,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACjC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAC1C,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI;IA2BxD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,WAAW,KAAK,IAAI;IAStF,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE;IAItC,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;IAyC7C,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE;CAGzB"}
1
+ {"version":3,"file":"postgres_db.d.ts","sourceRoot":"","sources":["../../databases/postgres_db.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,gBAAgB,EAAE,EAAE,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAE1E,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,CAAC,OAAO,MAAO,SAAQ,gBAAgB;IACpC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC;IACZ,eAAe,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;gBACtC,QAAQ,EAAE,QAAQ,GAAG,MAAM;IA0CvC,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,EAAE;IA4EjC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE;IAYhE,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE;IA0BrF,aAAa,CACX,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACjC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAC1C,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI;IA2BxD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,WAAW,KAAK,IAAI;IAStF,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE;IAItC,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;IAyC7C,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE;CAGzB"}
@@ -1 +1 @@
1
- {"version":3,"file":"redis_db.d.ts","sourceRoot":"","sources":["../../databases/redis_db.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,gBAAgB,EAAE,EAAE,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAG1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,gBAAgB;IAC5C,OAAO,EAAE,GAAG,CAAC;gBACR,QAAQ,EAAE,QAAQ;IAM9B,IAAI,OAAO,YAEV;IAEK,IAAI;IAwBJ,GAAG,CAAC,GAAG,EAAE,MAAM;IAKf,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAepC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAS9B,MAAM,CAAC,GAAG,EAAE,MAAM;IASlB,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBzC,KAAK;CAKZ"}
1
+ {"version":3,"file":"redis_db.d.ts","sourceRoot":"","sources":["../../databases/redis_db.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,gBAAgB,EAAE,EAAE,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAG1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,gBAAgB;IAC5C,OAAO,EAAE,GAAG,CAAC;gBACR,QAAQ,EAAE,QAAQ;IAM9B,IAAI,OAAO,YAEV;IAEK,IAAI;IAqCJ,GAAG,CAAC,GAAG,EAAE,MAAM;IAKf,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAepC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAS9B,MAAM,CAAC,GAAG,EAAE,MAAM;IASlB,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBzC,KAAK;CAKZ"}
@@ -1 +1 @@
1
- {"version":3,"file":"rethink_db.d.ts","sourceRoot":"","sources":["../../databases/rethink_db.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,gBAAgB,EAAE,EAAE,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,CAAC,MAAM,WAAW,CAAC;AAE1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,gBAAgB;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC;gBAC3B,QAAQ,EAAE,QAAQ;IAuB9B,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE;IAkB1C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,KAAK,EAAE;IAUrD,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE;IAWxD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE;IAMlD,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;IA2B7C,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE;IAKtC,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE;CAKzB"}
1
+ {"version":3,"file":"rethink_db.d.ts","sourceRoot":"","sources":["../../databases/rethink_db.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,gBAAgB,EAAE,EAAE,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,CAAC,MAAM,WAAW,CAAC;AAE1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,gBAAgB;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC;gBAC3B,QAAQ,EAAE,QAAQ;IAuB9B,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE;IA8B1C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,KAAK,EAAE;IAUrD,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE;IAWxD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE;IAMlD,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;IA2B7C,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE;IAKtC,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE;CAKzB"}
package/dist/index.js CHANGED
@@ -489,11 +489,11 @@ var Database = class {
489
489
  async initDB() {
490
490
  switch (this.type) {
491
491
  case "mysql": return new (await (import("./mysql_db-DIXEbML4.js"))).default(this.dbSettings);
492
- case "postgres": return new (await (import("./postgres_db-BzDKMRC5.js"))).default(this.dbSettings);
492
+ case "postgres": return new (await (import("./postgres_db-DFplUUa_.js"))).default(this.dbSettings);
493
493
  case "sqlite": return new (await (import("./sqlite_db-Bp4nZn-c.js"))).default(this.dbSettings);
494
494
  case "rustydb": return new (await (import("./rusty_db-90_S-z-w.js"))).default(this.dbSettings);
495
495
  case "mongodb": return new (await (import("./mongodb_db-DJVvvNTo.js"))).default(this.dbSettings);
496
- case "redis": return new (await (import("./redis_db-C8LRkRGe.js"))).default(this.dbSettings);
496
+ case "redis": return new (await (import("./redis_db-501GYkb7.js"))).default(this.dbSettings);
497
497
  case "cassandra": return new (await (import("./cassandra_db-B96_l9V7.js"))).default(this.dbSettings);
498
498
  case "dirty": return new (await (import("./dirty_db-BGvHB8ud.js"))).default(this.dbSettings);
499
499
  case "dirtygit": return new (await (import("./dirty_git_db-LJWW2YT6.js"))).default(this.dbSettings);
@@ -501,8 +501,8 @@ var Database = class {
501
501
  case "memory": return new (await (import("./memory_db-BQaHRpkv.js"))).default(this.dbSettings);
502
502
  case "mock": return new (await (import("./mock_db-CgEDPTpF.js"))).default(this.dbSettings);
503
503
  case "mssql": return new (await (import("./mssql_db-BqtTYXk9.js"))).default(this.dbSettings);
504
- case "postgrespool": return new (await (import("./postgrespool_db-B6FOhTY3.js"))).default(this.dbSettings);
505
- case "rethink": return new (await (import("./rethink_db-qv884MUM.js"))).default(this.dbSettings);
504
+ case "postgrespool": return new (await (import("./postgrespool_db-Kh9HhRsG.js"))).default(this.dbSettings);
505
+ case "rethink": return new (await (import("./rethink_db-BklcFMyp.js"))).default(this.dbSettings);
506
506
  case "couch": return new (await (import("./couch_db-DZ6MLt5j.js"))).default(this.dbSettings);
507
507
  case "surrealdb": return new (await (import("./surrealdb_db-K8QAySpG.js"))).default(this.dbSettings);
508
508
  default: throw new Error(`Invalid database type: ${this.type}`);
@@ -4,6 +4,8 @@ export type Settings = {
4
4
  table?: string;
5
5
  db?: string;
6
6
  idleTimeoutMillis?: number;
7
+ keepAlive?: boolean;
8
+ keepAliveInitialDelayMillis?: number;
7
9
  min?: number;
8
10
  max?: number;
9
11
  engine?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractDatabase.d.ts","sourceRoot":"","sources":["../../lib/AbstractDatabase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AAOzD,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,cAAM,gBAAgB;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,QAAQ,CAAC;gBAEd,QAAQ,EAAE,QAAQ;IAa9B,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IAarD,MAAM,CAAC,GAAG,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7C,IAAI,OAAO,IAAI,OAAO,CAErB;CACF;AAED,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"AbstractDatabase.d.ts","sourceRoot":"","sources":["../../lib/AbstractDatabase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AAOzD,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,cAAM,gBAAgB;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,QAAQ,CAAC;gBAEd,QAAQ,EAAE,QAAQ;IAa9B,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IAarD,MAAM,CAAC,GAAG,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7C,IAAI,OAAO,IAAI,OAAO,CAErB;CACF;AAED,eAAe,gBAAgB,CAAC"}
@@ -27,10 +27,15 @@ var postgres_db_default = class extends AbstractDatabase {
27
27
  this.settings.cache = settings.cache || 1e3;
28
28
  this.settings.writeInterval = 100;
29
29
  this.settings.json = true;
30
- this.settings.max = this.settings.max || 20;
31
- this.settings.min = this.settings.min || 4;
32
- this.settings.idleTimeoutMillis = this.settings.idleTimeoutMillis || 1e3;
30
+ this.settings.max = this.settings.max ?? 20;
31
+ this.settings.min = this.settings.min ?? 4;
32
+ this.settings.idleTimeoutMillis = this.settings.idleTimeoutMillis ?? 1e3;
33
+ this.settings.keepAlive = this.settings.keepAlive ?? true;
34
+ this.settings.keepAliveInitialDelayMillis = this.settings.keepAliveInitialDelayMillis ?? 1e4;
33
35
  this.db = new pg.Pool(this.settings);
36
+ this.db.on("error", (err) => {
37
+ this.logger.error(`Postgres idle client error (connection discarded): ${err.stack || err}`);
38
+ });
34
39
  }
35
40
  init(callback) {
36
41
  const testTableExists = "SELECT 1 as exists FROM pg_tables WHERE tablename = 'store'";
@@ -1,4 +1,4 @@
1
- import postgres_db_default from "./postgres_db-BzDKMRC5.js";
1
+ import postgres_db_default from "./postgres_db-DFplUUa_.js";
2
2
  //#region databases/postgrespool_db.ts
3
3
  var PostgresDB = class extends postgres_db_default {
4
4
  constructor(settings) {
@@ -38,6 +38,9 @@ var RedisDB = class extends AbstractDatabase {
38
38
  this._client = createClient(options);
39
39
  }
40
40
  if (this._client) {
41
+ this._client.on("error", (err) => {
42
+ this.logger.error(`Redis client error: ${err?.stack || err}`);
43
+ });
41
44
  await this._client.connect();
42
45
  await this._client.ping();
43
46
  }
@@ -40,6 +40,9 @@ var Rethink_db = class extends AbstractDatabase {
40
40
  r.connect(this, (err, conn) => {
41
41
  if (err) throw err;
42
42
  this.connection = conn;
43
+ this.connection.on("error", (connErr) => {
44
+ this.logger.error(`RethinkDB connection error: ${connErr.stack || connErr}`);
45
+ });
43
46
  r.table(this.table).run(this.connection, (err, cursor) => {
44
47
  if (err) r.tableCreate(this.table).run(this.connection, callback);
45
48
  else if (callback) callback(null, cursor);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ueberdb2",
3
- "version": "6.1.7",
3
+ "version": "6.1.9",
4
4
  "description": "Transform every database into a object key value store",
5
5
  "keywords": [
6
6
  "database",
@@ -53,28 +53,28 @@
53
53
  "@elastic/elasticsearch": "^9.4.2",
54
54
  "@types/async": "^3.2.25",
55
55
  "@types/mssql": "^12.3.0",
56
- "@types/node": "^25.9.1",
56
+ "@types/node": "^25.9.2",
57
57
  "@types/pg": "^8.20.0",
58
58
  "@types/rethinkdb": "^2.3.21",
59
59
  "@types/wtfnode": "^0.10.0",
60
60
  "cassandra-driver": "^4.9.0",
61
61
  "cli-table3": "^0.6.5",
62
62
  "mongodb": "^7.2.0",
63
- "mssql": "^12.5.4",
64
- "mysql2": "^3.22.4",
63
+ "mssql": "^12.5.5",
64
+ "mysql2": "^3.22.5",
65
65
  "nano": "^11.0.5",
66
- "oxfmt": "^0.52.0",
67
- "oxlint": "^1.67.0",
66
+ "oxfmt": "^0.53.0",
67
+ "oxlint": "^1.69.0",
68
68
  "pg": "^8.21.0",
69
69
  "randexp-ts": "^1.0.5",
70
70
  "redis": "^6.0.0",
71
71
  "rethinkdb": "^2.4.2",
72
- "rolldown": "^1.0.3",
73
- "semver": "^7.8.1",
72
+ "rolldown": "^1.1.0",
73
+ "semver": "^7.8.3",
74
74
  "surrealdb": "^2.0.3",
75
- "testcontainers": "^11.14.0",
75
+ "testcontainers": "^12.0.1",
76
76
  "typescript": "^6.0.3",
77
- "vitest": "^4.1.7",
77
+ "vitest": "^4.1.8",
78
78
  "wtfnode": "^0.10.1"
79
79
  },
80
80
  "peerDependencies": {