@dotdo/postgres 0.1.1 → 0.1.3

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.
Files changed (111) hide show
  1. package/README.md +73 -1
  2. package/dist/client/index.d.ts +47 -0
  3. package/dist/client/index.d.ts.map +1 -0
  4. package/dist/client/index.js +47 -0
  5. package/dist/client/index.js.map +1 -0
  6. package/dist/client/postgres-client.d.ts +273 -0
  7. package/dist/client/postgres-client.d.ts.map +1 -0
  8. package/dist/client/postgres-client.js +389 -0
  9. package/dist/client/postgres-client.js.map +1 -0
  10. package/dist/client/types.d.ts +167 -0
  11. package/dist/client/types.d.ts.map +1 -0
  12. package/dist/client/types.js +7 -0
  13. package/dist/client/types.js.map +1 -0
  14. package/dist/do/index.d.ts +18 -0
  15. package/dist/do/index.d.ts.map +1 -0
  16. package/dist/do/index.js +18 -0
  17. package/dist/do/index.js.map +1 -0
  18. package/dist/do/postgres.d.ts +110 -0
  19. package/dist/do/postgres.d.ts.map +1 -0
  20. package/dist/do/postgres.js +266 -0
  21. package/dist/do/postgres.js.map +1 -0
  22. package/dist/do/sql.d.ts +92 -0
  23. package/dist/do/sql.d.ts.map +1 -0
  24. package/dist/do/sql.js +204 -0
  25. package/dist/do/sql.js.map +1 -0
  26. package/dist/index.d.ts +25 -30
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +29 -30
  29. package/dist/index.js.map +1 -1
  30. package/dist/mcp/binding.d.ts +47 -0
  31. package/dist/mcp/binding.d.ts.map +1 -0
  32. package/dist/mcp/binding.js +183 -0
  33. package/dist/mcp/binding.js.map +1 -0
  34. package/dist/mcp/index.d.ts +92 -0
  35. package/dist/mcp/index.d.ts.map +1 -0
  36. package/dist/mcp/index.js +91 -0
  37. package/dist/mcp/index.js.map +1 -0
  38. package/dist/mcp/server.d.ts +62 -0
  39. package/dist/mcp/server.d.ts.map +1 -0
  40. package/dist/mcp/server.js +278 -0
  41. package/dist/mcp/server.js.map +1 -0
  42. package/dist/mcp/tools.d.ts +58 -0
  43. package/dist/mcp/tools.d.ts.map +1 -0
  44. package/dist/mcp/tools.js +356 -0
  45. package/dist/mcp/tools.js.map +1 -0
  46. package/dist/mcp/types.d.ts +139 -0
  47. package/dist/mcp/types.d.ts.map +1 -0
  48. package/dist/mcp/types.js +7 -0
  49. package/dist/mcp/types.js.map +1 -0
  50. package/dist/pglite/workers-pglite.d.ts +13 -4
  51. package/dist/pglite/workers-pglite.d.ts.map +1 -1
  52. package/dist/pglite/workers-pglite.js +110 -5
  53. package/dist/pglite/workers-pglite.js.map +1 -1
  54. package/dist/pglite-assets/pglite.data +0 -0
  55. package/dist/pglite-assets/pglite.wasm +0 -0
  56. package/dist/worker/auth.d.ts.map +1 -1
  57. package/dist/worker/auth.js +16 -6
  58. package/dist/worker/auth.js.map +1 -1
  59. package/dist/worker/background-pglite-manager.d.ts +243 -0
  60. package/dist/worker/background-pglite-manager.d.ts.map +1 -0
  61. package/dist/worker/background-pglite-manager.js +528 -0
  62. package/dist/worker/background-pglite-manager.js.map +1 -0
  63. package/dist/worker/do-pglite-manager.d.ts +77 -0
  64. package/dist/worker/do-pglite-manager.d.ts.map +1 -1
  65. package/dist/worker/do-pglite-manager.js +189 -12
  66. package/dist/worker/do-pglite-manager.js.map +1 -1
  67. package/dist/worker/entry.d.ts.map +1 -1
  68. package/dist/worker/entry.js +108 -26
  69. package/dist/worker/entry.js.map +1 -1
  70. package/dist/worker/index.d.ts +7 -1
  71. package/dist/worker/index.d.ts.map +1 -1
  72. package/dist/worker/index.js +19 -1
  73. package/dist/worker/index.js.map +1 -1
  74. package/dist/worker/lazy-pglite-manager.d.ts +242 -0
  75. package/dist/worker/lazy-pglite-manager.d.ts.map +1 -0
  76. package/dist/worker/lazy-pglite-manager.js +463 -0
  77. package/dist/worker/lazy-pglite-manager.js.map +1 -0
  78. package/package.json +20 -6
  79. package/src/client/index.ts +61 -0
  80. package/src/client/postgres-client.ts +442 -0
  81. package/src/client/types.ts +211 -0
  82. package/src/do/index.ts +18 -0
  83. package/src/do/postgres.ts +367 -0
  84. package/src/do/sql.ts +280 -0
  85. package/src/index.ts +50 -30
  86. package/src/mcp/binding.ts +236 -0
  87. package/src/mcp/index.ts +122 -0
  88. package/src/mcp/server.ts +361 -0
  89. package/src/mcp/tools.ts +464 -0
  90. package/src/mcp/types.ts +148 -0
  91. package/src/pglite/workers-pglite.ts +141 -12
  92. package/src/pglite-assets/pglite.data +0 -0
  93. package/src/pglite-assets/pglite.wasm +0 -0
  94. package/src/worker/auth.ts +17 -6
  95. package/src/worker/background-pglite-manager.ts +680 -0
  96. package/src/worker/do-pglite-manager.ts +235 -19
  97. package/src/worker/entry.ts +112 -30
  98. package/src/worker/index.ts +71 -1
  99. package/src/worker/lazy-pglite-manager.ts +595 -0
  100. package/dist/iceberg/duckdb-wasm.d.ts +0 -447
  101. package/dist/iceberg/duckdb-wasm.d.ts.map +0 -1
  102. package/dist/iceberg/duckdb-wasm.js +0 -600
  103. package/dist/iceberg/duckdb-wasm.js.map +0 -1
  104. package/dist/iceberg/test-fixtures.d.ts +0 -151
  105. package/dist/iceberg/test-fixtures.d.ts.map +0 -1
  106. package/dist/iceberg/test-fixtures.js +0 -446
  107. package/dist/iceberg/test-fixtures.js.map +0 -1
  108. package/dist/worker/__mocks__/cloudflare-workers.d.ts +0 -31
  109. package/dist/worker/__mocks__/cloudflare-workers.d.ts.map +0 -1
  110. package/dist/worker/__mocks__/cloudflare-workers.js +0 -33
  111. package/dist/worker/__mocks__/cloudflare-workers.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lazy-pglite-manager.js","sourceRoot":"","sources":["../../src/worker/lazy-pglite-manager.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dotdo/postgres",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "PostgreSQL server for Cloudflare Workers/DOs with PGLite WASM and tiered storage",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -10,6 +10,10 @@
10
10
  "types": "./dist/index.d.ts",
11
11
  "import": "./dist/index.js"
12
12
  },
13
+ "./do": {
14
+ "types": "./dist/do/index.d.ts",
15
+ "import": "./dist/do/index.js"
16
+ },
13
17
  "./pglite": {
14
18
  "types": "./dist/pglite/index.d.ts",
15
19
  "import": "./dist/pglite/index.js"
@@ -41,6 +45,14 @@
41
45
  "./migration-tooling": {
42
46
  "types": "./dist/migration-tooling/index.d.ts",
43
47
  "import": "./dist/migration-tooling/index.js"
48
+ },
49
+ "./mcp": {
50
+ "types": "./dist/mcp/index.d.ts",
51
+ "import": "./dist/mcp/index.js"
52
+ },
53
+ "./client": {
54
+ "types": "./dist/client/index.d.ts",
55
+ "import": "./dist/client/index.js"
44
56
  }
45
57
  },
46
58
  "files": [
@@ -50,10 +62,11 @@
50
62
  "scripts": {
51
63
  "build": "tsc && pnpm copy-assets",
52
64
  "copy-assets": "mkdir -p dist/pglite-assets && cp src/pglite-assets/* dist/pglite-assets/",
65
+ "sync-pglite": "cp ../pglite/packages/pglite/dist/pglite.wasm src/pglite-assets/ && cp ../pglite/packages/pglite/dist/pglite.data src/pglite-assets/",
53
66
  "dev": "tsc --watch",
54
67
  "dev:worker": "wrangler dev",
55
- "deploy": "pnpm build && wrangler deploy",
56
- "deploy:dry-run": "pnpm build && wrangler deploy --dry-run",
68
+ "deploy": "pnpm sync-pglite && pnpm build && wrangler deploy",
69
+ "deploy:dry-run": "pnpm sync-pglite && pnpm build && wrangler deploy --dry-run",
57
70
  "tail": "wrangler tail",
58
71
  "test": "vitest run",
59
72
  "test:unit": "vitest run --config vitest.config.ts",
@@ -64,11 +77,12 @@
64
77
  "clean": "rm -rf dist"
65
78
  },
66
79
  "dependencies": {
67
- "@dotdo/pglite": "^0.1.1",
68
- "@dotdo/postgres-shared": "^0.1.1",
80
+ "@dotdo/pglite": "^0.1.4",
81
+ "@dotdo/postgres-shared": "^0.1.2",
69
82
  "capnweb": "^0.4.0",
70
83
  "hono": "^4.0.0",
71
- "postgres.do": "^0.1.1"
84
+ "postgres.do": "^0.1.2",
85
+ "rpc.do": "^0.2.1"
72
86
  },
73
87
  "devDependencies": {
74
88
  "@cloudflare/vitest-pool-workers": "^0.8.0",
@@ -0,0 +1,61 @@
1
+ /**
2
+ * PostgresDO WebSocket Client
3
+ *
4
+ * A typed WebSocket client for PostgresDO with rpc.do integration.
5
+ * Provides automatic reconnection, heartbeat, and first-message authentication.
6
+ *
7
+ * @module client
8
+ *
9
+ * @example Basic usage
10
+ * ```typescript
11
+ * import { createPostgresClient } from '@dotdo/postgres/client'
12
+ *
13
+ * const client = createPostgresClient({
14
+ * url: 'wss://postgres.example.com/ws',
15
+ * auth: 'your-api-key',
16
+ * })
17
+ *
18
+ * // Execute queries
19
+ * const users = await client.query('SELECT * FROM users')
20
+ * const user = await client.queryOne('SELECT * FROM users WHERE id = $1', [1])
21
+ * const count = await client.queryScalar<number>('SELECT COUNT(*) FROM users')
22
+ *
23
+ * // Transactions
24
+ * const tx = await client.transaction()
25
+ * await tx.execute('INSERT INTO users (name) VALUES ($1)', ['Alice'])
26
+ * await tx.commit()
27
+ *
28
+ * // Clean up
29
+ * await client.close()
30
+ * ```
31
+ *
32
+ * @example With oauth.do authentication
33
+ * ```typescript
34
+ * import { createPostgresClient } from '@dotdo/postgres/client'
35
+ * import { oauthProvider } from 'rpc.do/auth'
36
+ *
37
+ * const client = createPostgresClient({
38
+ * url: 'wss://postgres.example.com/ws',
39
+ * auth: oauthProvider(),
40
+ * onConnect: () => console.log('Connected!'),
41
+ * onReconnecting: (attempt) => console.log(`Reconnecting (${attempt})...`),
42
+ * })
43
+ * ```
44
+ */
45
+
46
+ // Main client export
47
+ export { PostgresClient, createPostgresClient } from './postgres-client'
48
+
49
+ // Type exports
50
+ export type {
51
+ PostgresClientConfig,
52
+ PostgresDORpcApi,
53
+ RpcQueryResult,
54
+ RpcBatchQuery,
55
+ RpcBatchResult,
56
+ RpcTransactionOptions,
57
+ TransactionApi,
58
+ ColumnInfo,
59
+ DatabaseStats,
60
+ ConnectionState,
61
+ } from './types'
@@ -0,0 +1,442 @@
1
+ /**
2
+ * PostgresClient - WebSocket client for PostgresDO with rpc.do integration
3
+ *
4
+ * Provides typed access to PostgresDO's RPC methods over WebSocket with:
5
+ * - Automatic reconnection with exponential backoff
6
+ * - Heartbeat ping/pong for connection health
7
+ * - First-message authentication
8
+ * - Full TypeScript support
9
+ *
10
+ * @module client/postgres-client
11
+ *
12
+ * @example Basic usage
13
+ * ```typescript
14
+ * import { createPostgresClient } from '@dotdo/postgres/client'
15
+ *
16
+ * const client = createPostgresClient({
17
+ * url: 'wss://postgres.example.com/ws',
18
+ * auth: 'your-api-key',
19
+ * })
20
+ *
21
+ * // Execute queries
22
+ * const users = await client.query('SELECT * FROM users')
23
+ * console.log(users.rows)
24
+ *
25
+ * // Single row
26
+ * const user = await client.queryOne('SELECT * FROM users WHERE id = $1', [1])
27
+ *
28
+ * // Scalar value
29
+ * const count = await client.queryScalar<number>('SELECT COUNT(*) FROM users')
30
+ *
31
+ * // Clean up
32
+ * await client.close()
33
+ * ```
34
+ *
35
+ * @example With rpc.do transport
36
+ * ```typescript
37
+ * import { createPostgresClient } from '@dotdo/postgres/client'
38
+ * import { capnweb } from 'rpc.do/transports'
39
+ *
40
+ * // Using capnweb transport with reconnection
41
+ * const client = createPostgresClient({
42
+ * url: 'wss://postgres.example.com/ws',
43
+ * auth: () => localStorage.getItem('token'),
44
+ * autoReconnect: true,
45
+ * onConnect: () => console.log('Connected!'),
46
+ * onReconnecting: (attempt) => console.log(`Reconnecting... (${attempt})`),
47
+ * })
48
+ * ```
49
+ */
50
+
51
+ import type {
52
+ PostgresClientConfig,
53
+ PostgresDORpcApi,
54
+ RpcQueryResult,
55
+ RpcBatchQuery,
56
+ RpcBatchResult,
57
+ RpcTransactionOptions,
58
+ TransactionApi,
59
+ ColumnInfo,
60
+ DatabaseStats,
61
+ ConnectionState,
62
+ } from './types'
63
+ import type { QueryResultRow } from '../worker/types'
64
+
65
+ /**
66
+ * PostgresClient - typed WebSocket client for PostgresDO
67
+ *
68
+ * Uses rpc.do's capnweb transport for efficient RPC communication
69
+ * with automatic reconnection and hibernation support.
70
+ */
71
+ export class PostgresClient {
72
+ private config: PostgresClientConfig
73
+ private rpcClient: PostgresDORpcApi | null = null
74
+ private transport: { close: () => void } | null = null
75
+ private connectionPromise: Promise<void> | null = null
76
+ private state: ConnectionState = 'disconnected'
77
+
78
+ constructor(config: PostgresClientConfig) {
79
+ this.config = {
80
+ autoReconnect: true,
81
+ maxReconnectAttempts: Infinity,
82
+ reconnectBackoff: 1000,
83
+ maxReconnectBackoff: 30000,
84
+ heartbeatInterval: 30000,
85
+ allowInsecureAuth: false,
86
+ debug: false,
87
+ ...config,
88
+ }
89
+ }
90
+
91
+ /**
92
+ * Connect to the PostgresDO WebSocket endpoint
93
+ */
94
+ private async connect(): Promise<void> {
95
+ if (this.connectionPromise) {
96
+ return this.connectionPromise
97
+ }
98
+
99
+ if (this.state === 'connected' && this.rpcClient) {
100
+ return
101
+ }
102
+
103
+ this.state = 'connecting'
104
+
105
+ this.connectionPromise = this.establishConnection()
106
+
107
+ try {
108
+ await this.connectionPromise
109
+ } finally {
110
+ this.connectionPromise = null
111
+ }
112
+ }
113
+
114
+ /**
115
+ * Establish the WebSocket connection using rpc.do
116
+ */
117
+ private async establishConnection(): Promise<void> {
118
+ try {
119
+ // Dynamic import of rpc.do modules to avoid bundling issues
120
+ const [{ RPC }, { ws }] = await Promise.all([
121
+ import('rpc.do'),
122
+ import('rpc.do/transports'),
123
+ ])
124
+
125
+ // Create WebSocket transport
126
+ // Note: For basic authentication and WebSocket connection
127
+ // Advanced reconnection can be added in future rpc.do versions
128
+ const transport = ws(this.config.url, {
129
+ auth: this.config.auth,
130
+ })
131
+
132
+ this.transport = transport as { close: () => void }
133
+
134
+ // Create typed RPC client - use 'any' to avoid complex generic inference issues
135
+ // The PostgresDORpcApi interface ensures proper typing at the API surface
136
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
137
+ this.rpcClient = RPC<any>(transport) as unknown as PostgresDORpcApi
138
+
139
+ this.state = 'connected'
140
+ this.config.onConnect?.()
141
+ } catch (error) {
142
+ this.state = 'disconnected'
143
+ this.config.onError?.(error instanceof Error ? error : new Error(String(error)))
144
+ throw error
145
+ }
146
+ }
147
+
148
+ /**
149
+ * Ensure we're connected before making RPC calls
150
+ */
151
+ private async ensureConnected(): Promise<PostgresDORpcApi> {
152
+ if (!this.rpcClient || this.state !== 'connected') {
153
+ await this.connect()
154
+ }
155
+
156
+ if (!this.rpcClient) {
157
+ throw new Error('Failed to establish connection')
158
+ }
159
+
160
+ return this.rpcClient
161
+ }
162
+
163
+ // ===========================================================================
164
+ // Query Methods
165
+ // ===========================================================================
166
+
167
+ /**
168
+ * Execute a SQL query and return full results
169
+ *
170
+ * @example
171
+ * ```typescript
172
+ * const result = await client.query('SELECT * FROM users WHERE active = $1', [true])
173
+ * console.log(result.rows)
174
+ * console.log(`${result.rowCount} rows returned in ${result.durationMs}ms`)
175
+ * ```
176
+ */
177
+ async query<T extends QueryResultRow = QueryResultRow>(
178
+ sql: string,
179
+ params?: unknown[]
180
+ ): Promise<RpcQueryResult<T>> {
181
+ const rpc = await this.ensureConnected()
182
+ return rpc.rpcQuery<T>(sql, params)
183
+ }
184
+
185
+ /**
186
+ * Execute a query and return only the first row
187
+ *
188
+ * @example
189
+ * ```typescript
190
+ * const user = await client.queryOne('SELECT * FROM users WHERE id = $1', [1])
191
+ * if (user) {
192
+ * console.log(user.name)
193
+ * }
194
+ * ```
195
+ */
196
+ async queryOne<T extends QueryResultRow = QueryResultRow>(
197
+ sql: string,
198
+ params?: unknown[]
199
+ ): Promise<T | null> {
200
+ const rpc = await this.ensureConnected()
201
+ return rpc.rpcQueryOne<T>(sql, params)
202
+ }
203
+
204
+ /**
205
+ * Execute a query and return a scalar value (first column of first row)
206
+ *
207
+ * @example
208
+ * ```typescript
209
+ * const count = await client.queryScalar<number>('SELECT COUNT(*) FROM users')
210
+ * console.log(`Total users: ${count}`)
211
+ * ```
212
+ */
213
+ async queryScalar<T = unknown>(sql: string, params?: unknown[]): Promise<T | null> {
214
+ const rpc = await this.ensureConnected()
215
+ return rpc.rpcQueryScalar<T>(sql, params)
216
+ }
217
+
218
+ /**
219
+ * Execute a statement that doesn't return rows
220
+ *
221
+ * @example
222
+ * ```typescript
223
+ * const { rowCount } = await client.execute('DELETE FROM users WHERE inactive = true')
224
+ * console.log(`Deleted ${rowCount} inactive users`)
225
+ * ```
226
+ */
227
+ async execute(sql: string, params?: unknown[]): Promise<{ rowCount: number; durationMs: number }> {
228
+ const rpc = await this.ensureConnected()
229
+ return rpc.rpcExecute(sql, params)
230
+ }
231
+
232
+ // ===========================================================================
233
+ // Batch Methods
234
+ // ===========================================================================
235
+
236
+ /**
237
+ * Execute multiple queries in a single round trip
238
+ *
239
+ * @example
240
+ * ```typescript
241
+ * const result = await client.batch([
242
+ * { sql: 'SELECT * FROM users' },
243
+ * { sql: 'SELECT * FROM orders' },
244
+ * { sql: 'SELECT * FROM products' },
245
+ * ])
246
+ * const [users, orders, products] = result.results
247
+ * ```
248
+ */
249
+ async batch(queries: RpcBatchQuery[]): Promise<RpcBatchResult> {
250
+ const rpc = await this.ensureConnected()
251
+ return rpc.rpcBatch(queries)
252
+ }
253
+
254
+ /**
255
+ * Execute multiple queries within a transaction
256
+ *
257
+ * @example
258
+ * ```typescript
259
+ * const result = await client.batchTransaction([
260
+ * { sql: 'INSERT INTO users (name) VALUES ($1)', params: ['Alice'] },
261
+ * { sql: 'INSERT INTO audit_log (action) VALUES ($1)', params: ['user_created'] },
262
+ * ])
263
+ * ```
264
+ */
265
+ async batchTransaction(queries: RpcBatchQuery[]): Promise<RpcBatchResult> {
266
+ const rpc = await this.ensureConnected()
267
+ return rpc.rpcBatchTransaction(queries)
268
+ }
269
+
270
+ // ===========================================================================
271
+ // Transaction Methods
272
+ // ===========================================================================
273
+
274
+ /**
275
+ * Start a transaction and return a transaction API
276
+ *
277
+ * @example
278
+ * ```typescript
279
+ * const tx = await client.transaction()
280
+ * try {
281
+ * await tx.execute('INSERT INTO users (name) VALUES ($1)', ['Alice'])
282
+ * await tx.execute('INSERT INTO audit_log (action) VALUES ($1)', ['user_created'])
283
+ * await tx.commit()
284
+ * } catch (error) {
285
+ * await tx.rollback()
286
+ * throw error
287
+ * }
288
+ * ```
289
+ *
290
+ * @example With isolation level
291
+ * ```typescript
292
+ * const tx = await client.transaction({ isolationLevel: 'SERIALIZABLE' })
293
+ * // ... perform queries
294
+ * await tx.commit()
295
+ * ```
296
+ */
297
+ async transaction(options?: RpcTransactionOptions): Promise<TransactionApi> {
298
+ const rpc = await this.ensureConnected()
299
+ return rpc.rpcTransaction(options)
300
+ }
301
+
302
+ // ===========================================================================
303
+ // Utility Methods
304
+ // ===========================================================================
305
+
306
+ /**
307
+ * Health check - verify the database is responsive
308
+ *
309
+ * @example
310
+ * ```typescript
311
+ * const { ok, durationMs } = await client.ping()
312
+ * console.log(`Database responded in ${durationMs}ms`)
313
+ * ```
314
+ */
315
+ async ping(): Promise<{ ok: true; durationMs: number }> {
316
+ const rpc = await this.ensureConnected()
317
+ return rpc.rpcPing()
318
+ }
319
+
320
+ /**
321
+ * Get the PostgreSQL version
322
+ *
323
+ * @example
324
+ * ```typescript
325
+ * const version = await client.version()
326
+ * console.log(`PostgreSQL version: ${version}`)
327
+ * ```
328
+ */
329
+ async version(): Promise<string> {
330
+ const rpc = await this.ensureConnected()
331
+ return rpc.rpcVersion()
332
+ }
333
+
334
+ /**
335
+ * List all tables in the public schema
336
+ *
337
+ * @example
338
+ * ```typescript
339
+ * const tables = await client.listTables()
340
+ * console.log('Tables:', tables)
341
+ * ```
342
+ */
343
+ async listTables(): Promise<string[]> {
344
+ const rpc = await this.ensureConnected()
345
+ return rpc.rpcListTables()
346
+ }
347
+
348
+ /**
349
+ * Get schema information for a table
350
+ *
351
+ * @example
352
+ * ```typescript
353
+ * const columns = await client.describeTable('users')
354
+ * for (const col of columns) {
355
+ * console.log(`${col.column_name}: ${col.data_type}`)
356
+ * }
357
+ * ```
358
+ */
359
+ async describeTable(tableName: string): Promise<ColumnInfo[]> {
360
+ const rpc = await this.ensureConnected()
361
+ return rpc.rpcDescribeTable(tableName)
362
+ }
363
+
364
+ /**
365
+ * Get database statistics
366
+ *
367
+ * @example
368
+ * ```typescript
369
+ * const stats = await client.getStats()
370
+ * console.log(`Queries: ${stats.queryCount}, Avg: ${stats.avgDurationMs}ms`)
371
+ * ```
372
+ */
373
+ async getStats(): Promise<DatabaseStats> {
374
+ const rpc = await this.ensureConnected()
375
+ return rpc.rpcGetStats()
376
+ }
377
+
378
+ // ===========================================================================
379
+ // Connection Management
380
+ // ===========================================================================
381
+
382
+ /**
383
+ * Get current connection state
384
+ */
385
+ getConnectionState(): ConnectionState {
386
+ return this.state
387
+ }
388
+
389
+ /**
390
+ * Check if currently connected
391
+ */
392
+ isConnected(): boolean {
393
+ return this.state === 'connected'
394
+ }
395
+
396
+ /**
397
+ * Close the connection
398
+ *
399
+ * @example
400
+ * ```typescript
401
+ * await client.close()
402
+ * ```
403
+ */
404
+ async close(): Promise<void> {
405
+ if (this.transport) {
406
+ this.transport.close()
407
+ this.transport = null
408
+ }
409
+ this.rpcClient = null
410
+ this.state = 'closed'
411
+ }
412
+ }
413
+
414
+ /**
415
+ * Create a PostgresClient instance
416
+ *
417
+ * @example Basic usage
418
+ * ```typescript
419
+ * import { createPostgresClient } from '@dotdo/postgres/client'
420
+ *
421
+ * const client = createPostgresClient({
422
+ * url: 'wss://postgres.example.com/ws',
423
+ * auth: 'your-api-key',
424
+ * })
425
+ *
426
+ * const users = await client.query('SELECT * FROM users')
427
+ * ```
428
+ *
429
+ * @example With reconnection callbacks
430
+ * ```typescript
431
+ * const client = createPostgresClient({
432
+ * url: 'wss://postgres.example.com/ws',
433
+ * auth: () => getAuthToken(),
434
+ * onConnect: () => console.log('Connected!'),
435
+ * onDisconnect: (reason) => console.log('Disconnected:', reason),
436
+ * onReconnecting: (attempt) => console.log(`Reconnecting (${attempt})...`),
437
+ * })
438
+ * ```
439
+ */
440
+ export function createPostgresClient(config: PostgresClientConfig): PostgresClient {
441
+ return new PostgresClient(config)
442
+ }