@revealui/db 0.3.6 → 0.4.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/README.md +4 -4
- package/dist/audit-store.d.ts +1 -1
- package/dist/audit-store.js +1 -1
- package/dist/cleanup/rag-site-cleanup.d.ts +2 -2
- package/dist/cleanup/rag-site-cleanup.js +2 -2
- package/dist/cleanup/stale-tokens.d.ts +6 -6
- package/dist/cleanup/stale-tokens.js +6 -6
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +20 -8
- package/dist/client/index.js.map +1 -1
- package/dist/crypto.d.ts +23 -1
- package/dist/crypto.d.ts.map +1 -1
- package/dist/crypto.js +67 -3
- package/dist/crypto.js.map +1 -1
- package/dist/log-transport.d.ts +1 -1
- package/dist/log-transport.js +2 -2
- package/dist/log-transport.js.map +1 -1
- package/dist/pool.d.ts +0 -5
- package/dist/pool.d.ts.map +1 -1
- package/dist/pool.js +15 -24
- package/dist/pool.js.map +1 -1
- package/dist/queries/boards.d.ts +1 -1
- package/dist/queries/boards.js +1 -1
- package/dist/queries/conversations.js +1 -1
- package/dist/queries/conversations.js.map +1 -1
- package/dist/queries/media.d.ts +6 -1
- package/dist/queries/media.d.ts.map +1 -1
- package/dist/queries/media.js +16 -2
- package/dist/queries/media.js.map +1 -1
- package/dist/queries/orders.d.ts +5 -0
- package/dist/queries/orders.d.ts.map +1 -1
- package/dist/queries/orders.js +14 -1
- package/dist/queries/orders.js.map +1 -1
- package/dist/queries/pages.d.ts +1 -1
- package/dist/queries/posts.d.ts +8 -3
- package/dist/queries/posts.d.ts.map +1 -1
- package/dist/queries/posts.js +16 -2
- package/dist/queries/posts.js.map +1 -1
- package/dist/queries/products.d.ts +6 -1
- package/dist/queries/products.d.ts.map +1 -1
- package/dist/queries/products.js +15 -1
- package/dist/queries/products.js.map +1 -1
- package/dist/queries/sites.d.ts +7 -1
- package/dist/queries/sites.d.ts.map +1 -1
- package/dist/queries/sites.js +15 -1
- package/dist/queries/sites.js.map +1 -1
- package/dist/queries/ticket-comments.js +2 -2
- package/dist/queries/ticket-comments.js.map +1 -1
- package/dist/queries/tickets.d.ts +1 -1
- package/dist/queries/tickets.js +1 -1
- package/dist/queries/tickets.js.map +1 -1
- package/dist/queries/users.d.ts +57 -0
- package/dist/queries/users.d.ts.map +1 -1
- package/dist/queries/users.js +65 -0
- package/dist/queries/users.js.map +1 -1
- package/dist/saga/crdt-resolver.d.ts +4 -4
- package/dist/saga/crdt-resolver.js +10 -10
- package/dist/saga/crdt-resolver.js.map +1 -1
- package/dist/saga/idempotent-operation.d.ts +1 -1
- package/dist/saga/idempotent-operation.js +2 -2
- package/dist/saga/idempotent-operation.js.map +1 -1
- package/dist/saga/index.d.ts +1 -1
- package/dist/saga/index.js +1 -1
- package/dist/saga/neon-saga.d.ts +2 -2
- package/dist/saga/neon-saga.js +9 -9
- package/dist/saga/neon-saga.js.map +1 -1
- package/dist/saga/recovery.d.ts +2 -2
- package/dist/saga/recovery.js +2 -2
- package/dist/saga/resilient-step.d.ts +1 -1
- package/dist/saga/resilient-step.js +2 -2
- package/dist/saga/resilient-step.js.map +1 -1
- package/dist/saga/types.d.ts +2 -2
- package/dist/schema/accounts.d.ts.map +1 -1
- package/dist/schema/accounts.js +25 -5
- package/dist/schema/accounts.js.map +1 -1
- package/dist/schema/{cms.d.ts → admin.d.ts} +3 -3
- package/dist/schema/admin.d.ts.map +1 -0
- package/dist/schema/{cms.js → admin.js} +29 -12
- package/dist/schema/admin.js.map +1 -0
- package/dist/schema/agents.d.ts +1 -1
- package/dist/schema/agents.d.ts.map +1 -1
- package/dist/schema/agents.js +40 -14
- package/dist/schema/agents.js.map +1 -1
- package/dist/schema/api-keys.d.ts +1 -1
- package/dist/schema/api-keys.d.ts.map +1 -1
- package/dist/schema/api-keys.js +13 -5
- package/dist/schema/api-keys.js.map +1 -1
- package/dist/schema/app-logs.d.ts +1 -1
- package/dist/schema/app-logs.d.ts.map +1 -1
- package/dist/schema/app-logs.js +6 -3
- package/dist/schema/app-logs.js.map +1 -1
- package/dist/schema/audit-log.d.ts +17 -0
- package/dist/schema/audit-log.d.ts.map +1 -1
- package/dist/schema/audit-log.js +5 -1
- package/dist/schema/audit-log.js.map +1 -1
- package/dist/schema/circuit-breaker.d.ts.map +1 -1
- package/dist/schema/circuit-breaker.js +10 -3
- package/dist/schema/circuit-breaker.js.map +1 -1
- package/dist/schema/code-provenance.d.ts.map +1 -1
- package/dist/schema/code-provenance.js +14 -4
- package/dist/schema/code-provenance.js.map +1 -1
- package/dist/schema/coordination.d.ts +2 -2
- package/dist/schema/coordination.d.ts.map +1 -1
- package/dist/schema/coordination.js +14 -5
- package/dist/schema/coordination.js.map +1 -1
- package/dist/schema/crdt-operations.d.ts.map +1 -1
- package/dist/schema/crdt-operations.js +4 -1
- package/dist/schema/crdt-operations.js.map +1 -1
- package/dist/schema/error-events.d.ts +2 -2
- package/dist/schema/error-events.d.ts.map +1 -1
- package/dist/schema/error-events.js +10 -6
- package/dist/schema/error-events.js.map +1 -1
- package/dist/schema/gdpr.d.ts.map +1 -1
- package/dist/schema/gdpr.js +6 -1
- package/dist/schema/gdpr.js.map +1 -1
- package/dist/schema/index.js +6 -6
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/jobs.d.ts +1 -1
- package/dist/schema/jobs.d.ts.map +1 -1
- package/dist/schema/jobs.js +4 -2
- package/dist/schema/jobs.js.map +1 -1
- package/dist/schema/licenses.d.ts.map +1 -1
- package/dist/schema/licenses.js +6 -3
- package/dist/schema/licenses.js.map +1 -1
- package/dist/schema/marketplace.d.ts +1 -1
- package/dist/schema/marketplace.d.ts.map +1 -1
- package/dist/schema/marketplace.js +14 -7
- package/dist/schema/marketplace.js.map +1 -1
- package/dist/schema/node-ids.d.ts.map +1 -1
- package/dist/schema/node-ids.js +7 -3
- package/dist/schema/node-ids.js.map +1 -1
- package/dist/schema/oauth-accounts.d.ts +1 -1
- package/dist/schema/oauth-accounts.d.ts.map +1 -1
- package/dist/schema/oauth-accounts.js +5 -2
- package/dist/schema/oauth-accounts.js.map +1 -1
- package/dist/schema/pages.d.ts.map +1 -1
- package/dist/schema/pages.js +8 -3
- package/dist/schema/pages.js.map +1 -1
- package/dist/schema/products.d.ts.map +1 -1
- package/dist/schema/products.js +13 -4
- package/dist/schema/products.js.map +1 -1
- package/dist/schema/rag.d.ts +1 -1
- package/dist/schema/rag.d.ts.map +1 -1
- package/dist/schema/rag.js +19 -12
- package/dist/schema/rag.js.map +1 -1
- package/dist/schema/rate-limits.d.ts.map +1 -1
- package/dist/schema/rate-limits.js +8 -2
- package/dist/schema/rate-limits.js.map +1 -1
- package/dist/schema/rest.d.ts +2 -2
- package/dist/schema/rest.d.ts.map +1 -1
- package/dist/schema/rest.js +4 -4
- package/dist/schema/rest.js.map +1 -1
- package/dist/schema/revealcoin.d.ts.map +1 -1
- package/dist/schema/revealcoin.js +7 -3
- package/dist/schema/revealcoin.js.map +1 -1
- package/dist/schema/revmarket.d.ts +1 -1
- package/dist/schema/revmarket.d.ts.map +1 -1
- package/dist/schema/revmarket.js +20 -9
- package/dist/schema/revmarket.js.map +1 -1
- package/dist/schema/sites.d.ts.map +1 -1
- package/dist/schema/sites.js +11 -4
- package/dist/schema/sites.js.map +1 -1
- package/dist/schema/tenants.d.ts.map +1 -1
- package/dist/schema/tenants.js +4 -1
- package/dist/schema/tenants.js.map +1 -1
- package/dist/schema/tickets.d.ts.map +1 -1
- package/dist/schema/tickets.js +25 -6
- package/dist/schema/tickets.js.map +1 -1
- package/dist/schema/users.d.ts.map +1 -1
- package/dist/schema/users.js +12 -6
- package/dist/schema/users.js.map +1 -1
- package/dist/schema/webhook-events.js +1 -1
- package/dist/schema/webhook-events.js.map +1 -1
- package/dist/schema/yjs-documents.d.ts.map +1 -1
- package/dist/schema/yjs-documents.js +4 -1
- package/dist/schema/yjs-documents.js.map +1 -1
- package/dist/scripts/cleanup-expired.d.ts +3 -3
- package/dist/scripts/cleanup-expired.js +4 -4
- package/dist/scripts/cleanup-expired.js.map +1 -1
- package/dist/types/discover.js +1 -1
- package/dist/types/discover.js.map +1 -1
- package/dist/validation/cross-db.d.ts +1 -1
- package/dist/validation/cross-db.js +3 -3
- package/dist/validation/cross-db.js.map +1 -1
- package/package.json +52 -6
- package/dist/schema/cms.d.ts.map +0 -1
- package/dist/schema/cms.js.map +0 -1
package/README.md
CHANGED
|
@@ -127,14 +127,14 @@ await db.insert(users).values({
|
|
|
127
127
|
- You need type-safe database queries against the RevealUI schema (users, posts, agents, vectors)
|
|
128
128
|
- You're running migrations or generating types from the Drizzle schema
|
|
129
129
|
- You want a pre-configured client for Neon, Supabase, or Vercel Postgres
|
|
130
|
-
- **Not** for validation logic
|
|
131
|
-
- **Not** for direct SQL
|
|
130
|
+
- **Not** for validation logic - use `@revealui/contracts` for Zod schemas
|
|
131
|
+
- **Not** for direct SQL - use Drizzle's query builder or `db.execute()` for raw queries
|
|
132
132
|
|
|
133
133
|
## JOSHUA Alignment
|
|
134
134
|
|
|
135
|
-
- **Unified**: One schema definition (
|
|
135
|
+
- **Unified**: One schema definition (81 tables) drives types, queries, and migrations across all apps
|
|
136
136
|
- **Orthogonal**: Schema files are cleanly separated by domain (cms, users, agents, vector, crdt) with no cross-domain entanglement
|
|
137
|
-
- **Sovereign**: Your database, your schema, your migrations
|
|
137
|
+
- **Sovereign**: Your database, your schema, your migrations - no hosted schema service in the loop
|
|
138
138
|
|
|
139
139
|
## Related Documentation
|
|
140
140
|
|
package/dist/audit-store.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Persistent implementation of the AuditStore interface from @revealui/ai.
|
|
5
5
|
* Stores audit entries in the audit_log PostgreSQL table via Drizzle ORM.
|
|
6
|
-
* Append-only
|
|
6
|
+
* Append-only - no update or delete operations.
|
|
7
7
|
*
|
|
8
8
|
* Types are defined locally to avoid a circular dependency on @revealui/ai.
|
|
9
9
|
* They mirror AuditEntry and AuditFilter from @revealui/ai/audit/types.
|
package/dist/audit-store.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Persistent implementation of the AuditStore interface from @revealui/ai.
|
|
5
5
|
* Stores audit entries in the audit_log PostgreSQL table via Drizzle ORM.
|
|
6
|
-
* Append-only
|
|
6
|
+
* Append-only - no update or delete operations.
|
|
7
7
|
*
|
|
8
8
|
* Types are defined locally to avoid a circular dependency on @revealui/ai.
|
|
9
9
|
* They mirror AuditEntry and AuditFilter from @revealui/ai/audit/types.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* RAG Site Cleanup
|
|
2
|
+
* RAG Site Cleanup - Cascade delete for a single site
|
|
3
3
|
*
|
|
4
4
|
* When a site is deleted from NeonDB, the cross-database FK cascades to
|
|
5
5
|
* Supabase are NOT enforced at the DB level. This function immediately
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* 3. rag_workspaces (id = sites.id)
|
|
12
12
|
*
|
|
13
13
|
* Designed to be called fire-and-forget from the site DELETE route.
|
|
14
|
-
* Errors are caught and logged
|
|
14
|
+
* Errors are caught and logged - they never block the site deletion response.
|
|
15
15
|
*/
|
|
16
16
|
import type { NeonHttpDatabase } from 'drizzle-orm/neon-http';
|
|
17
17
|
import type { NodePgDatabase } from 'drizzle-orm/node-postgres';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* RAG Site Cleanup
|
|
2
|
+
* RAG Site Cleanup - Cascade delete for a single site
|
|
3
3
|
*
|
|
4
4
|
* When a site is deleted from NeonDB, the cross-database FK cascades to
|
|
5
5
|
* Supabase are NOT enforced at the DB level. This function immediately
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* 3. rag_workspaces (id = sites.id)
|
|
12
12
|
*
|
|
13
13
|
* Designed to be called fire-and-forget from the site DELETE route.
|
|
14
|
-
* Errors are caught and logged
|
|
14
|
+
* Errors are caught and logged - they never block the site deletion response.
|
|
15
15
|
*/
|
|
16
16
|
import { eq } from 'drizzle-orm';
|
|
17
17
|
import { ragChunks, ragDocuments, ragWorkspaces } from '../schema/rag.js';
|
|
@@ -6,13 +6,13 @@
|
|
|
6
6
|
* via `revealui db cleanup` when crons are unavailable (e.g. Hobby plan).
|
|
7
7
|
*
|
|
8
8
|
* Tables:
|
|
9
|
-
* - sessions
|
|
10
|
-
* - rate_limits
|
|
11
|
-
* - password_reset_tokens
|
|
12
|
-
* - magic_links
|
|
13
|
-
* - pages (scheduled)
|
|
9
|
+
* - sessions - expiresAt < now OR deletedAt IS NOT NULL
|
|
10
|
+
* - rate_limits - resetAt < now
|
|
11
|
+
* - password_reset_tokens - expiresAt < now
|
|
12
|
+
* - magic_links - expiresAt < now
|
|
13
|
+
* - pages (scheduled) - status = 'scheduled' AND scheduledAt <= now
|
|
14
14
|
*
|
|
15
|
-
* Idempotent
|
|
15
|
+
* Idempotent - safe to run multiple times.
|
|
16
16
|
*/
|
|
17
17
|
export type CleanupTable = 'sessions' | 'rateLimits' | 'passwordResetTokens' | 'magicLinks' | 'scheduledPages';
|
|
18
18
|
export interface StaleTokenCleanupOptions {
|
|
@@ -6,13 +6,13 @@
|
|
|
6
6
|
* via `revealui db cleanup` when crons are unavailable (e.g. Hobby plan).
|
|
7
7
|
*
|
|
8
8
|
* Tables:
|
|
9
|
-
* - sessions
|
|
10
|
-
* - rate_limits
|
|
11
|
-
* - password_reset_tokens
|
|
12
|
-
* - magic_links
|
|
13
|
-
* - pages (scheduled)
|
|
9
|
+
* - sessions - expiresAt < now OR deletedAt IS NOT NULL
|
|
10
|
+
* - rate_limits - resetAt < now
|
|
11
|
+
* - password_reset_tokens - expiresAt < now
|
|
12
|
+
* - magic_links - expiresAt < now
|
|
13
|
+
* - pages (scheduled) - status = 'scheduled' AND scheduledAt <= now
|
|
14
14
|
*
|
|
15
|
-
* Idempotent
|
|
15
|
+
* Idempotent - safe to run multiple times.
|
|
16
16
|
*/
|
|
17
17
|
import { and, eq, isNotNull, lt, lte, or } from 'drizzle-orm';
|
|
18
18
|
import { getClient } from '../client/index.js';
|
package/dist/client/index.d.ts
CHANGED
|
@@ -222,7 +222,7 @@ export declare function closeAllPools(): Promise<void>;
|
|
|
222
222
|
export declare function requiresTransactions(dbType?: DatabaseType): void;
|
|
223
223
|
export declare function withTransaction<T>(db: Database, fn: (tx: Database) => Promise<T>): Promise<T>;
|
|
224
224
|
/**
|
|
225
|
-
* Execute a saga
|
|
225
|
+
* Execute a saga - a NeonDB-safe alternative to withTransaction.
|
|
226
226
|
*
|
|
227
227
|
* Unlike withTransaction (which requires a pg Pool driver), withSaga works
|
|
228
228
|
* with the NeonDB HTTP driver by modeling multi-step writes as individually
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAQH,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEtF,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,YAAY,MAAM,qBAAqB,CAAC;AAOpD,MAAM,WAAW,WAAW;IAC1B,gCAAgC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,uBAAuB;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,uBAAuB;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd;AAaD;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE7C;;;;;;;;GAQG;AACH,MAAM,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,MAAM,CAAC,GAAG,cAAc,CAAC,OAAO,MAAM,CAAC,CAAC;AAEvF,MAAM,WAAW,cAAc;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
|
package/dist/client/index.js
CHANGED
|
@@ -66,10 +66,22 @@ let vectorSupportsTransactions = false;
|
|
|
66
66
|
* Localhost connections are used for testing and development.
|
|
67
67
|
*/
|
|
68
68
|
function isSupabaseConnection(connectionString) {
|
|
69
|
-
|
|
70
|
-
connectionString.
|
|
71
|
-
|
|
72
|
-
|
|
69
|
+
try {
|
|
70
|
+
const host = new URL(connectionString).hostname;
|
|
71
|
+
return (host.endsWith('.supabase.co') ||
|
|
72
|
+
host === 'supabase.co' ||
|
|
73
|
+
host.endsWith('.supabase.com') ||
|
|
74
|
+
host === 'supabase.com' ||
|
|
75
|
+
host === 'localhost' ||
|
|
76
|
+
host === '127.0.0.1');
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
// Fallback for non-URL connection strings (e.g., plain host:port format)
|
|
80
|
+
return (connectionString.includes('.supabase.co') ||
|
|
81
|
+
connectionString.includes('pooler.supabase.com') ||
|
|
82
|
+
connectionString.includes('localhost') ||
|
|
83
|
+
connectionString.includes('127.0.0.1'));
|
|
84
|
+
}
|
|
73
85
|
}
|
|
74
86
|
/**
|
|
75
87
|
* Creates a Drizzle database client, automatically selecting the appropriate driver:
|
|
@@ -411,17 +423,17 @@ export async function withTransaction(db, fn) {
|
|
|
411
423
|
// Early check: fail fast with clear message based on tracked driver type
|
|
412
424
|
if (db === restClient && !restSupportsTransactions) {
|
|
413
425
|
throw new Error('Transaction not supported: REST database is using Neon HTTP driver. ' +
|
|
414
|
-
'
|
|
426
|
+
'Use withSaga() for NeonDB-safe multi-step writes, or switch to Supabase pooler / pg driver for transaction support.');
|
|
415
427
|
}
|
|
416
428
|
if (db === vectorClient && !vectorSupportsTransactions) {
|
|
417
429
|
throw new Error('Transaction not supported: Vector database is using Neon HTTP driver. ' +
|
|
418
|
-
'
|
|
430
|
+
'Use withSaga() for NeonDB-safe multi-step writes, or switch to Supabase pooler / pg driver for transaction support.');
|
|
419
431
|
}
|
|
420
432
|
// Fallback: Check if this is a pg Pool-based client (supports transactions)
|
|
421
433
|
const hasPgTransaction = 'transaction' in db && typeof db.transaction === 'function';
|
|
422
434
|
if (!hasPgTransaction) {
|
|
423
435
|
throw new Error('Transaction not supported: Database client is using Neon HTTP driver which does not support transactions. ' +
|
|
424
|
-
'
|
|
436
|
+
'Use withSaga() for NeonDB-safe multi-step writes, or configure your database with Supabase / localhost connection string. ' +
|
|
425
437
|
'Neon HTTP driver uses stateless requests and cannot maintain transaction state.');
|
|
426
438
|
}
|
|
427
439
|
// Use Drizzle's built-in transaction API
|
|
@@ -432,7 +444,7 @@ export async function withTransaction(db, fn) {
|
|
|
432
444
|
// Saga Helper (NeonDB-safe alternative to withTransaction)
|
|
433
445
|
// =============================================================================
|
|
434
446
|
/**
|
|
435
|
-
* Execute a saga
|
|
447
|
+
* Execute a saga - a NeonDB-safe alternative to withTransaction.
|
|
436
448
|
*
|
|
437
449
|
* Unlike withTransaction (which requires a pg Pool driver), withSaga works
|
|
438
450
|
* with the NeonDB HTTP driver by modeling multi-step writes as individually
|
package/dist/client/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,6BAA6B;AAC7B,qGAAqG;AACrG,2FAA2F;AAC3F,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAyB,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,OAAO,IAAI,SAAS,EAAuB,MAAM,2BAA2B,CAAC;AACtF,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC,CAAC,yCAAyC;AACvF,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,YAAY,MAAM,qBAAqB,CAAC;AAkBpD,gFAAgF;AAChF,+BAA+B;AAC/B,gFAAgF;AAEhF,IAAI,wBAAwB,GAAG,KAAK,CAAC;AACrC,IAAI,0BAA0B,GAAG,KAAK,CAAC;AA6BvC,gFAAgF;AAChF,kBAAkB;AAClB,gFAAgF;AAEhF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH;;;;;GAKG;AACH,SAAS,oBAAoB,CAAC,gBAAwB;IACpD,OAAO,CACL,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
|
package/dist/crypto.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @revealui/db/crypto
|
|
2
|
+
* @revealui/db/crypto - AES-256-GCM envelope encryption for stored API keys
|
|
3
3
|
*
|
|
4
4
|
* Uses a Key Encryption Key (KEK) sourced from the REVEALUI_KEK environment
|
|
5
5
|
* variable (64 hex chars = 32 bytes). Each key is encrypted with a random
|
|
@@ -19,6 +19,28 @@ export declare function encryptApiKey(plaintext: string): string;
|
|
|
19
19
|
* Throws if tampered (GCM auth tag mismatch) or if KEK is wrong.
|
|
20
20
|
*/
|
|
21
21
|
export declare function decryptApiKey(encrypted: string): string;
|
|
22
|
+
/**
|
|
23
|
+
* Encrypt an arbitrary string field using AES-256-GCM.
|
|
24
|
+
* Same algorithm as `encryptApiKey`; use for TOTP secrets, tokens, etc.
|
|
25
|
+
*/
|
|
26
|
+
export declare function encryptField(plaintext: string): string;
|
|
27
|
+
/**
|
|
28
|
+
* Decrypt a field encrypted by `encryptField`.
|
|
29
|
+
* Throws on tamper (GCM auth tag mismatch) or wrong KEK.
|
|
30
|
+
*/
|
|
31
|
+
export declare function decryptField(encrypted: string): string;
|
|
32
|
+
/**
|
|
33
|
+
* Detect whether a stored value is in the encrypted envelope format.
|
|
34
|
+
* Returns true for `<base64url>.<base64url>.<base64url>` with correct lengths.
|
|
35
|
+
* Useful for rolling migration: read plaintext or encrypted transparently.
|
|
36
|
+
*/
|
|
37
|
+
export declare function isEncryptedField(value: string): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Decrypt a field that may be plaintext (legacy) or encrypted (new).
|
|
40
|
+
* If the value looks like an encrypted envelope, decrypts it.
|
|
41
|
+
* Otherwise returns the plaintext as-is (for rolling migration).
|
|
42
|
+
*/
|
|
43
|
+
export declare function decryptFieldOrPassthrough(value: string): string;
|
|
22
44
|
/**
|
|
23
45
|
* Return a redacted hint showing only the last 4 characters of an API key.
|
|
24
46
|
* Safe to store in plaintext and display in the UI.
|
package/dist/crypto.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAkBH;;;GAGG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAWvD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAmBvD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAGtD"}
|
|
1
|
+
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAkBH;;;GAGG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAWvD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAmBvD;AAMD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAWtD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAmBtD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAMvD;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAGtD"}
|
package/dist/crypto.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @revealui/db/crypto
|
|
2
|
+
* @revealui/db/crypto - AES-256-GCM envelope encryption for stored API keys
|
|
3
3
|
*
|
|
4
4
|
* Uses a Key Encryption Key (KEK) sourced from the REVEALUI_KEK environment
|
|
5
5
|
* variable (64 hex chars = 32 bytes). Each key is encrypted with a random
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
*/
|
|
12
12
|
import { createCipheriv, createDecipheriv, randomBytes } from 'node:crypto';
|
|
13
13
|
const ALGORITHM = 'aes-256-gcm';
|
|
14
|
-
const IV_LENGTH = 12; // 96-bit IV
|
|
14
|
+
const IV_LENGTH = 12; // 96-bit IV - recommended for AES-GCM
|
|
15
15
|
function getKek() {
|
|
16
16
|
const kekHex = process.env.REVEALUI_KEK;
|
|
17
17
|
if (!kekHex) {
|
|
@@ -46,7 +46,7 @@ export function decryptApiKey(encrypted) {
|
|
|
46
46
|
const kek = getKek();
|
|
47
47
|
const parts = encrypted.split('.');
|
|
48
48
|
if (parts.length !== 3) {
|
|
49
|
-
throw new Error('Invalid encrypted key format
|
|
49
|
+
throw new Error('Invalid encrypted key format - expected <iv>.<authTag>.<ciphertext>');
|
|
50
50
|
}
|
|
51
51
|
const [ivB64, authTagB64, ciphertextB64] = parts;
|
|
52
52
|
const iv = Buffer.from(ivB64, 'base64url');
|
|
@@ -62,6 +62,70 @@ export function decryptApiKey(encrypted) {
|
|
|
62
62
|
decipher.setAuthTag(authTag);
|
|
63
63
|
return Buffer.concat([decipher.update(ciphertext), decipher.final()]).toString('utf8');
|
|
64
64
|
}
|
|
65
|
+
// =============================================================================
|
|
66
|
+
// Generic Field Encryption (reusable for any sensitive column)
|
|
67
|
+
// =============================================================================
|
|
68
|
+
/**
|
|
69
|
+
* Encrypt an arbitrary string field using AES-256-GCM.
|
|
70
|
+
* Same algorithm as `encryptApiKey`; use for TOTP secrets, tokens, etc.
|
|
71
|
+
*/
|
|
72
|
+
export function encryptField(plaintext) {
|
|
73
|
+
const kek = getKek();
|
|
74
|
+
const iv = randomBytes(IV_LENGTH);
|
|
75
|
+
const cipher = createCipheriv(ALGORITHM, kek, iv);
|
|
76
|
+
const ciphertext = Buffer.concat([cipher.update(plaintext, 'utf8'), cipher.final()]);
|
|
77
|
+
const authTag = cipher.getAuthTag();
|
|
78
|
+
return [
|
|
79
|
+
iv.toString('base64url'),
|
|
80
|
+
authTag.toString('base64url'),
|
|
81
|
+
ciphertext.toString('base64url'),
|
|
82
|
+
].join('.');
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Decrypt a field encrypted by `encryptField`.
|
|
86
|
+
* Throws on tamper (GCM auth tag mismatch) or wrong KEK.
|
|
87
|
+
*/
|
|
88
|
+
export function decryptField(encrypted) {
|
|
89
|
+
const kek = getKek();
|
|
90
|
+
const parts = encrypted.split('.');
|
|
91
|
+
if (parts.length !== 3) {
|
|
92
|
+
throw new Error('Invalid encrypted field format — expected <iv>.<authTag>.<ciphertext>');
|
|
93
|
+
}
|
|
94
|
+
const [ivB64, authTagB64, ciphertextB64] = parts;
|
|
95
|
+
const iv = Buffer.from(ivB64, 'base64url');
|
|
96
|
+
const authTag = Buffer.from(authTagB64, 'base64url');
|
|
97
|
+
const ciphertext = Buffer.from(ciphertextB64, 'base64url');
|
|
98
|
+
if (iv.length !== IV_LENGTH) {
|
|
99
|
+
throw new Error(`Invalid IV length: expected ${IV_LENGTH} bytes, got ${iv.length}`);
|
|
100
|
+
}
|
|
101
|
+
if (authTag.length !== 16) {
|
|
102
|
+
throw new Error(`Invalid auth tag length: expected 16 bytes, got ${authTag.length}`);
|
|
103
|
+
}
|
|
104
|
+
const decipher = createDecipheriv(ALGORITHM, kek, iv);
|
|
105
|
+
decipher.setAuthTag(authTag);
|
|
106
|
+
return Buffer.concat([decipher.update(ciphertext), decipher.final()]).toString('utf8');
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Detect whether a stored value is in the encrypted envelope format.
|
|
110
|
+
* Returns true for `<base64url>.<base64url>.<base64url>` with correct lengths.
|
|
111
|
+
* Useful for rolling migration: read plaintext or encrypted transparently.
|
|
112
|
+
*/
|
|
113
|
+
export function isEncryptedField(value) {
|
|
114
|
+
const parts = value.split('.');
|
|
115
|
+
if (parts.length !== 3)
|
|
116
|
+
return false;
|
|
117
|
+
// Validate that each part is valid base64url (non-empty, correct chars)
|
|
118
|
+
const b64urlPattern = /^[A-Za-z0-9_-]+$/;
|
|
119
|
+
return parts.every((p) => p !== undefined && p.length > 0 && b64urlPattern.test(p));
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Decrypt a field that may be plaintext (legacy) or encrypted (new).
|
|
123
|
+
* If the value looks like an encrypted envelope, decrypts it.
|
|
124
|
+
* Otherwise returns the plaintext as-is (for rolling migration).
|
|
125
|
+
*/
|
|
126
|
+
export function decryptFieldOrPassthrough(value) {
|
|
127
|
+
return isEncryptedField(value) ? decryptField(value) : value;
|
|
128
|
+
}
|
|
65
129
|
/**
|
|
66
130
|
* Return a redacted hint showing only the last 4 characters of an API key.
|
|
67
131
|
* Safe to store in plaintext and display in the UI.
|
package/dist/crypto.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE5E,MAAM,SAAS,GAAG,aAAa,CAAC;AAChC,MAAM,SAAS,GAAG,EAAE,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"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"}
|
package/dist/log-transport.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Persists warn/error/fatal entries to the `app_logs` NeonDB table.
|
|
6
6
|
*
|
|
7
7
|
* Only writes in production (NODE_ENV=production). All writes are fire-and-forget
|
|
8
|
-
*
|
|
8
|
+
* - the handler never throws or blocks the caller.
|
|
9
9
|
*
|
|
10
10
|
* Usage (call once at app startup):
|
|
11
11
|
* import { createDbLogHandler } from '@revealui/db/log-transport'
|
package/dist/log-transport.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Persists warn/error/fatal entries to the `app_logs` NeonDB table.
|
|
6
6
|
*
|
|
7
7
|
* Only writes in production (NODE_ENV=production). All writes are fire-and-forget
|
|
8
|
-
*
|
|
8
|
+
* - the handler never throws or blocks the caller.
|
|
9
9
|
*
|
|
10
10
|
* Usage (call once at app startup):
|
|
11
11
|
* import { createDbLogHandler } from '@revealui/db/log-transport'
|
|
@@ -44,7 +44,7 @@ export function createDbLogHandler(app) {
|
|
|
44
44
|
data: Object.keys(data).length > 0 ? data : null,
|
|
45
45
|
})
|
|
46
46
|
.catch(() => {
|
|
47
|
-
// Intentionally empty
|
|
47
|
+
// Intentionally empty - never throw back to the logger
|
|
48
48
|
});
|
|
49
49
|
};
|
|
50
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log-transport.js","sourceRoot":"","sources":["../src/log-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AAExD,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,OAAO,CAAC,KAAe,EAAQ,EAAE;QAC/B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;YAAE,OAAO;QAC1C,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;YAAE,OAAO;QAElD,kDAAkD;QAClD,MAAM,IAAI,GAA4B,EAAE,CAAC;QACzC,IAAI,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3D,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC3B,CAAC;QAED,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;QACvB,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;aACf,MAAM,CAAC;YACN,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,GAAG;YACH,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,YAAY;YACjD,SAAS,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,IAAI,IAAI;YAC3C,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,IAAI,IAAI;YACrC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;SACjD,CAAC;aACD,KAAK,CAAC,GAAG,EAAE;YACV,
|
|
1
|
+
{"version":3,"file":"log-transport.js","sourceRoot":"","sources":["../src/log-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AAExD,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,OAAO,CAAC,KAAe,EAAQ,EAAE;QAC/B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;YAAE,OAAO;QAC1C,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;YAAE,OAAO;QAElD,kDAAkD;QAClD,MAAM,IAAI,GAA4B,EAAE,CAAC;QACzC,IAAI,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3D,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC3B,CAAC;QAED,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;QACvB,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;aACf,MAAM,CAAC;YACN,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,GAAG;YACH,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,YAAY;YACjD,SAAS,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,IAAI,IAAI;YAC3C,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,IAAI,IAAI;YACrC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;SACjD,CAAC;aACD,KAAK,CAAC,GAAG,EAAE;YACV,yDAAyD;QAC3D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/pool.d.ts
CHANGED
|
@@ -5,10 +5,6 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { Pool } from 'pg';
|
|
7
7
|
export declare function getPool(): Pool;
|
|
8
|
-
/**
|
|
9
|
-
* @deprecated Use getPool() instead. Eager pool creation risks crashes at module parse time.
|
|
10
|
-
*/
|
|
11
|
-
export declare const pool: Pool;
|
|
12
8
|
export declare function checkDatabaseHealth(): Promise<{
|
|
13
9
|
healthy: boolean;
|
|
14
10
|
stats: {
|
|
@@ -33,5 +29,4 @@ export declare function startPoolMonitoring(intervalMs?: number): ReturnType<typ
|
|
|
33
29
|
* Pre-warm the connection pool
|
|
34
30
|
*/
|
|
35
31
|
export declare function warmupPool(): Promise<void>;
|
|
36
|
-
export default pool;
|
|
37
32
|
//# sourceMappingURL=pool.d.ts.map
|
package/dist/pool.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../src/pool.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,IAAI,EAAoC,MAAM,IAAI,CAAC;AAoG5D,wBAAgB,OAAO,IAAI,IAAI,CAW9B;
|
|
1
|
+
{"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../src/pool.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,IAAI,EAAoC,MAAM,IAAI,CAAC;AAoG5D,wBAAgB,OAAO,IAAI,IAAI,CAW9B;AA6ED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC;IACnD,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE;QACL,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH,CAAC,CAiCD;AAMD,wBAAgB,YAAY,IAAI;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC;CACrB,CAUA;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,GAAE,MAAc,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAqB9F;AAMD;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAiChD"}
|
package/dist/pool.js
CHANGED
|
@@ -92,14 +92,6 @@ export function getPool() {
|
|
|
92
92
|
}
|
|
93
93
|
return _pool;
|
|
94
94
|
}
|
|
95
|
-
/**
|
|
96
|
-
* @deprecated Use getPool() instead. Eager pool creation risks crashes at module parse time.
|
|
97
|
-
*/
|
|
98
|
-
export const pool = new Proxy({}, {
|
|
99
|
-
get(_target, prop, receiver) {
|
|
100
|
-
return Reflect.get(getPool(), prop, receiver);
|
|
101
|
-
},
|
|
102
|
-
});
|
|
103
95
|
// ===========================================================================
|
|
104
96
|
// ERROR HANDLING
|
|
105
97
|
// ===========================================================================
|
|
@@ -158,16 +150,17 @@ function registerShutdown() {
|
|
|
158
150
|
// HEALTH CHECK
|
|
159
151
|
// ===========================================================================
|
|
160
152
|
export async function checkDatabaseHealth() {
|
|
153
|
+
const p = getPool();
|
|
161
154
|
try {
|
|
162
155
|
// Test connection
|
|
163
|
-
const client = await
|
|
156
|
+
const client = await p.connect();
|
|
164
157
|
await client.query('SELECT 1');
|
|
165
158
|
client.release();
|
|
166
159
|
// Get pool stats
|
|
167
160
|
const stats = {
|
|
168
|
-
totalCount:
|
|
169
|
-
idleCount:
|
|
170
|
-
waitingCount:
|
|
161
|
+
totalCount: p.totalCount,
|
|
162
|
+
idleCount: p.idleCount,
|
|
163
|
+
waitingCount: p.waitingCount,
|
|
171
164
|
};
|
|
172
165
|
return {
|
|
173
166
|
healthy: true,
|
|
@@ -179,9 +172,9 @@ export async function checkDatabaseHealth() {
|
|
|
179
172
|
return {
|
|
180
173
|
healthy: false,
|
|
181
174
|
stats: {
|
|
182
|
-
totalCount:
|
|
183
|
-
idleCount:
|
|
184
|
-
waitingCount:
|
|
175
|
+
totalCount: p.totalCount,
|
|
176
|
+
idleCount: p.idleCount,
|
|
177
|
+
waitingCount: p.waitingCount,
|
|
185
178
|
},
|
|
186
179
|
};
|
|
187
180
|
}
|
|
@@ -190,13 +183,14 @@ export async function checkDatabaseHealth() {
|
|
|
190
183
|
// POOL MONITORING
|
|
191
184
|
// ===========================================================================
|
|
192
185
|
export function getPoolStats() {
|
|
186
|
+
const p = getPool();
|
|
193
187
|
return {
|
|
194
|
-
totalCount:
|
|
195
|
-
idleCount:
|
|
196
|
-
waitingCount:
|
|
188
|
+
totalCount: p.totalCount, // Total clients
|
|
189
|
+
idleCount: p.idleCount, // Idle clients
|
|
190
|
+
waitingCount: p.waitingCount, // Waiting requests
|
|
197
191
|
maxConnections: poolConfig.max,
|
|
198
192
|
minConnections: poolConfig.min,
|
|
199
|
-
utilization: ((
|
|
193
|
+
utilization: ((p.totalCount - p.idleCount) / (poolConfig.max || 20)) * 100,
|
|
200
194
|
};
|
|
201
195
|
}
|
|
202
196
|
/**
|
|
@@ -232,10 +226,11 @@ export async function warmupPool() {
|
|
|
232
226
|
logger.info('Warming up database pool');
|
|
233
227
|
const warmupConnections = Math.min(poolConfig.min || 5, poolConfig.max || 20);
|
|
234
228
|
const clients = [];
|
|
229
|
+
const p = getPool();
|
|
235
230
|
try {
|
|
236
231
|
// Acquire minimum connections
|
|
237
232
|
for (let i = 0; i < warmupConnections; i++) {
|
|
238
|
-
const client = await
|
|
233
|
+
const client = await p.connect();
|
|
239
234
|
clients.push(client);
|
|
240
235
|
}
|
|
241
236
|
logger.info(`Warmed up ${warmupConnections} database connections`);
|
|
@@ -253,8 +248,4 @@ export async function warmupPool() {
|
|
|
253
248
|
throw error;
|
|
254
249
|
}
|
|
255
250
|
}
|
|
256
|
-
// ===========================================================================
|
|
257
|
-
// EXPORTS
|
|
258
|
-
// ===========================================================================
|
|
259
|
-
export default pool;
|
|
260
251
|
//# sourceMappingURL=pool.js.map
|
package/dist/pool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pool.js","sourceRoot":"","sources":["../src/pool.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"pool.js","sourceRoot":"","sources":["../src/pool.ts"],"names":[],"mappings":"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"}
|
package/dist/queries/boards.d.ts
CHANGED
|
@@ -45,7 +45,7 @@ export declare function getBoardBySlug(db: Database, slug: string, tenantId?: st
|
|
|
45
45
|
* Create a board with default kanban columns.
|
|
46
46
|
*
|
|
47
47
|
* NOTE: NeonDB HTTP driver does not support transactions. The board insert and
|
|
48
|
-
* column insert below are not atomic
|
|
48
|
+
* column insert below are not atomic - a failure after the board is created but
|
|
49
49
|
* before columns are inserted will leave a board without its default columns.
|
|
50
50
|
*/
|
|
51
51
|
export declare function createBoard(db: Database, data: {
|
package/dist/queries/boards.js
CHANGED
|
@@ -35,7 +35,7 @@ export async function getBoardBySlug(db, slug, tenantId) {
|
|
|
35
35
|
* Create a board with default kanban columns.
|
|
36
36
|
*
|
|
37
37
|
* NOTE: NeonDB HTTP driver does not support transactions. The board insert and
|
|
38
|
-
* column insert below are not atomic
|
|
38
|
+
* column insert below are not atomic - a failure after the board is created but
|
|
39
39
|
* before columns are inserted will leave a board without its default columns.
|
|
40
40
|
*/
|
|
41
41
|
export async function createBoard(db, data) {
|
|
@@ -61,7 +61,7 @@ export async function getMessages(db, conversationId, options = {}) {
|
|
|
61
61
|
.offset(offset);
|
|
62
62
|
}
|
|
63
63
|
// NOTE: NeonDB HTTP driver does not support transactions. The message insert
|
|
64
|
-
// and conversation timestamp update below are not atomic
|
|
64
|
+
// and conversation timestamp update below are not atomic - a failure between
|
|
65
65
|
// them can leave the conversation's updatedAt stale.
|
|
66
66
|
export async function addMessage(db, data) {
|
|
67
67
|
const result = await db
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversations.js","sourceRoot":"","sources":["../../src/queries/conversations.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAM9D,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,EAAS,EACT,MAAc,EACd,UAA+C,EAAE;IAEjD,MAAM,EAAE,KAAK,GAAG,EAAE,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC;IAC3C,OAAO,EAAE;SACN,MAAM,EAAE;SACR,IAAI,CAAC,aAAa,CAAC;SACnB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;SAChF,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;SACtC,KAAK,CAAC,KAAK,CAAC;SACZ,MAAM,CAAC,MAAM,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,EAAS,EAAE,EAAU,EAAE,MAAc;IAC7E,MAAM,MAAM,GAAG,MAAM,EAAE;SACpB,MAAM,EAAE;SACR,IAAI,CAAC,aAAa,CAAC;SACnB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;SACtE,KAAK,CAAC,CAAC,CAAC,CAAC;IACZ,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,EAAS,EACT,IAAqE;IAErE,MAAM,MAAM,GAAG,MAAM,EAAE;SACpB,MAAM,CAAC,aAAa,CAAC;SACrB,MAAM,CAAC;QACN,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,kBAAkB;QACvC,MAAM,EAAE,QAAQ;KACjB,CAAC;SACD,SAAS,EAAE,CAAC;IACf,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,EAAS,EACT,EAAU,EACV,MAAc,EACd,KAAa;IAEb,MAAM,MAAM,GAAG,MAAM,EAAE;SACpB,MAAM,CAAC,aAAa,CAAC;SACrB,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;SACrC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;SACtE,SAAS,EAAE,CAAC;IACf,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,EAAS,EAAE,EAAU,EAAE,MAAc;IAC5E,iCAAiC;IACjC,MAAM,MAAM,GAAG,MAAM,EAAE;SACpB,MAAM,CAAC,aAAa,CAAC;SACrB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;SACtE,SAAS,EAAE,CAAC;IACf,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,EAAS,EACT,cAAsB,EACtB,UAA+C,EAAE;IAEjD,MAAM,EAAE,KAAK,GAAG,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC;IAC5C,OAAO,EAAE;SACN,MAAM,EAAE;SACR,IAAI,CAAC,QAAQ,CAAC;SACd,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;SAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;SAC3B,KAAK,CAAC,KAAK,CAAC;SACZ,MAAM,CAAC,MAAM,CAAC,CAAC;AACpB,CAAC;AAED,6EAA6E;AAC7E
|
|
1
|
+
{"version":3,"file":"conversations.js","sourceRoot":"","sources":["../../src/queries/conversations.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAM9D,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,EAAS,EACT,MAAc,EACd,UAA+C,EAAE;IAEjD,MAAM,EAAE,KAAK,GAAG,EAAE,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC;IAC3C,OAAO,EAAE;SACN,MAAM,EAAE;SACR,IAAI,CAAC,aAAa,CAAC;SACnB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;SAChF,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;SACtC,KAAK,CAAC,KAAK,CAAC;SACZ,MAAM,CAAC,MAAM,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,EAAS,EAAE,EAAU,EAAE,MAAc;IAC7E,MAAM,MAAM,GAAG,MAAM,EAAE;SACpB,MAAM,EAAE;SACR,IAAI,CAAC,aAAa,CAAC;SACnB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;SACtE,KAAK,CAAC,CAAC,CAAC,CAAC;IACZ,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,EAAS,EACT,IAAqE;IAErE,MAAM,MAAM,GAAG,MAAM,EAAE;SACpB,MAAM,CAAC,aAAa,CAAC;SACrB,MAAM,CAAC;QACN,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,kBAAkB;QACvC,MAAM,EAAE,QAAQ;KACjB,CAAC;SACD,SAAS,EAAE,CAAC;IACf,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,EAAS,EACT,EAAU,EACV,MAAc,EACd,KAAa;IAEb,MAAM,MAAM,GAAG,MAAM,EAAE;SACpB,MAAM,CAAC,aAAa,CAAC;SACrB,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;SACrC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;SACtE,SAAS,EAAE,CAAC;IACf,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,EAAS,EAAE,EAAU,EAAE,MAAc;IAC5E,iCAAiC;IACjC,MAAM,MAAM,GAAG,MAAM,EAAE;SACpB,MAAM,CAAC,aAAa,CAAC;SACrB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;SACtE,SAAS,EAAE,CAAC;IACf,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,EAAS,EACT,cAAsB,EACtB,UAA+C,EAAE;IAEjD,MAAM,EAAE,KAAK,GAAG,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC;IAC5C,OAAO,EAAE;SACN,MAAM,EAAE;SACR,IAAI,CAAC,QAAQ,CAAC;SACd,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;SAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;SAC3B,KAAK,CAAC,KAAK,CAAC;SACZ,MAAM,CAAC,MAAM,CAAC,CAAC;AACpB,CAAC;AAED,6EAA6E;AAC7E,+EAA+E;AAC/E,qDAAqD;AACrD,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,EAAS,EACT,IAA2E;IAE3E,MAAM,MAAM,GAAG,MAAM,EAAE;SACpB,MAAM,CAAC,QAAQ,CAAC;SAChB,MAAM,CAAC;QACN,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC;SACD,SAAS,EAAE,CAAC;IAEf,+BAA+B;IAC/B,MAAM,EAAE;SACL,MAAM,CAAC,aAAa,CAAC;SACrB,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;SAC9B,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;IAEpD,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC3B,CAAC"}
|