swarm-mail 1.0.0 → 1.1.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/adapter.d.ts.map +1 -1
- package/dist/daemon.d.ts +8 -9
- package/dist/daemon.d.ts.map +1 -1
- package/dist/hive/adapter.d.ts.map +1 -1
- package/dist/hive/index.d.ts +1 -0
- package/dist/hive/index.d.ts.map +1 -1
- package/dist/hive/jsonl.d.ts +2 -0
- package/dist/hive/jsonl.d.ts.map +1 -1
- package/dist/hive/queries.d.ts +23 -0
- package/dist/hive/queries.d.ts.map +1 -1
- package/dist/index.js +1350 -860
- package/dist/pglite.d.ts +9 -7
- package/dist/pglite.d.ts.map +1 -1
- package/dist/test-server.d.ts +64 -0
- package/dist/test-server.d.ts.map +1 -0
- package/dist/types/adapter.d.ts +38 -1
- package/dist/types/adapter.d.ts.map +1 -1
- package/dist/types/database.d.ts +67 -0
- package/dist/types/database.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/pglite.d.ts
CHANGED
|
@@ -73,29 +73,31 @@ export declare function getDatabasePath(projectPath?: string): string;
|
|
|
73
73
|
* Uses singleton pattern - one instance per database path.
|
|
74
74
|
* Safe to call multiple times for the same project.
|
|
75
75
|
*
|
|
76
|
-
* **Socket Mode (
|
|
76
|
+
* **Socket Mode (default):**
|
|
77
77
|
* - Checks if daemon is running, starts if needed
|
|
78
78
|
* - Validates health before connecting
|
|
79
79
|
* - Falls back to embedded PGLite on any failure
|
|
80
|
+
* - Set `SWARM_MAIL_SOCKET=false` to opt out
|
|
80
81
|
*
|
|
81
|
-
* **Embedded Mode (
|
|
82
|
+
* **Embedded Mode (opt-out with SWARM_MAIL_SOCKET=false):**
|
|
82
83
|
* - Uses embedded PGLite database
|
|
83
84
|
* - No daemon required
|
|
85
|
+
* - Only use for single-process scenarios
|
|
84
86
|
*
|
|
85
87
|
* @param projectPath - Optional project root path (defaults to global)
|
|
86
88
|
* @returns SwarmMailAdapter instance
|
|
87
89
|
*
|
|
88
90
|
* @example
|
|
89
91
|
* ```typescript
|
|
90
|
-
* // Project-local database (
|
|
92
|
+
* // Project-local database (daemon mode by default)
|
|
93
|
+
* const swarmMail = await getSwarmMail('/path/to/project');
|
|
94
|
+
*
|
|
95
|
+
* // Opt out of daemon mode (embedded PGLite)
|
|
96
|
+
* process.env.SWARM_MAIL_SOCKET = 'false';
|
|
91
97
|
* const swarmMail = await getSwarmMail('/path/to/project');
|
|
92
98
|
*
|
|
93
99
|
* // Global database (shared across all projects)
|
|
94
100
|
* const swarmMail = await getSwarmMail();
|
|
95
|
-
*
|
|
96
|
-
* // Explicit socket mode
|
|
97
|
-
* process.env.SWARM_MAIL_SOCKET = 'true';
|
|
98
|
-
* const swarmMail = await getSwarmMail('/path/to/project');
|
|
99
101
|
* ```
|
|
100
102
|
*/
|
|
101
103
|
export declare function getSwarmMail(projectPath?: string): Promise<SwarmMailAdapter>;
|
package/dist/pglite.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pglite.d.ts","sourceRoot":"","sources":["../src/pglite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"pglite.d.ts","sourceRoot":"","sources":["../src/pglite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAS9C,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAqDjE;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAkC1D;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAQjE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAkB5D;AA0HD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAsB,YAAY,CAChC,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,gBAAgB,CAAC,CAqD3B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,gBAAgB,CAAC,CAS3B;AA0DD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,uBAAuB,CAC3C,UAAU,SAAS,GAClB,OAAO,CAAC,gBAAgB,CAAC,CAQ3B;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAYxE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAUvD;AAGD,OAAO,EAAE,MAAM,EAAE,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Test Database
|
|
3
|
+
*
|
|
4
|
+
* Provides a single shared PGlite instance for the entire test suite.
|
|
5
|
+
* Dramatically speeds up tests by avoiding WASM initialization per test.
|
|
6
|
+
*
|
|
7
|
+
* ## Performance Impact
|
|
8
|
+
* - Before: 50+ tests × 500ms init = 25+ seconds just for PGlite startup
|
|
9
|
+
* - After: 1 init (~500ms) + TRUNCATE between tests (~10ms each)
|
|
10
|
+
* - Expected: ~20x speedup
|
|
11
|
+
*
|
|
12
|
+
* ## Usage
|
|
13
|
+
* ```typescript
|
|
14
|
+
* import { startTestServer, resetTestDatabase, getTestDb } from './test-server';
|
|
15
|
+
*
|
|
16
|
+
* beforeAll(async () => {
|
|
17
|
+
* await startTestServer();
|
|
18
|
+
* });
|
|
19
|
+
*
|
|
20
|
+
* beforeEach(async () => {
|
|
21
|
+
* await resetTestDatabase();
|
|
22
|
+
* });
|
|
23
|
+
*
|
|
24
|
+
* afterAll(async () => {
|
|
25
|
+
* await stopTestServer();
|
|
26
|
+
* });
|
|
27
|
+
*
|
|
28
|
+
* test("my test", async () => {
|
|
29
|
+
* const db = getTestDb();
|
|
30
|
+
* await db.query("SELECT 1");
|
|
31
|
+
* });
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
import { PGlite } from "@electric-sql/pglite";
|
|
35
|
+
/**
|
|
36
|
+
* Start the shared test database.
|
|
37
|
+
* Safe to call multiple times - returns existing database if already initialized.
|
|
38
|
+
*
|
|
39
|
+
* @returns PGlite instance
|
|
40
|
+
*/
|
|
41
|
+
export declare function startTestServer(): Promise<{
|
|
42
|
+
db: PGlite;
|
|
43
|
+
}>;
|
|
44
|
+
/**
|
|
45
|
+
* Stop the test database.
|
|
46
|
+
* Safe to call multiple times.
|
|
47
|
+
*/
|
|
48
|
+
export declare function stopTestServer(): Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* Reset test database by truncating all tables.
|
|
51
|
+
* Much faster than recreating the entire database.
|
|
52
|
+
*
|
|
53
|
+
* @throws If test server not started
|
|
54
|
+
*/
|
|
55
|
+
export declare function resetTestDatabase(): Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* Get the PGlite instance for direct access.
|
|
58
|
+
* Useful for tests that need raw database access.
|
|
59
|
+
*
|
|
60
|
+
* @returns PGlite instance
|
|
61
|
+
* @throws If test server not started
|
|
62
|
+
*/
|
|
63
|
+
export declare function getTestDb(): PGlite;
|
|
64
|
+
//# sourceMappingURL=test-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-server.d.ts","sourceRoot":"","sources":["../src/test-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAS9C;;;;;GAKG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAY/D;AAED;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAOpD;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAuBvD;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAKlC"}
|
package/dist/types/adapter.d.ts
CHANGED
|
@@ -208,16 +208,53 @@ export interface SchemaAdapter {
|
|
|
208
208
|
runMigrations(projectPath?: string): Promise<void>;
|
|
209
209
|
/**
|
|
210
210
|
* Check if database is healthy
|
|
211
|
+
*
|
|
212
|
+
* Returns enhanced health object with connectivity status and optional WAL health.
|
|
213
|
+
* Supports custom WAL threshold via options.
|
|
214
|
+
*
|
|
215
|
+
* @param options - Optional health check options
|
|
216
|
+
* @param options.walThresholdMb - Custom WAL size warning threshold in MB (default: 100)
|
|
217
|
+
* @param projectPath - Optional project path
|
|
218
|
+
* @returns Health status object with connectivity and WAL health
|
|
219
|
+
*
|
|
220
|
+
* @example
|
|
221
|
+
* ```typescript
|
|
222
|
+
* const health = await adapter.healthCheck({ walThresholdMb: 50 });
|
|
223
|
+
* if (!health.connected) {
|
|
224
|
+
* console.error("Database not connected");
|
|
225
|
+
* }
|
|
226
|
+
* if (health.walHealth && !health.walHealth.healthy) {
|
|
227
|
+
* console.warn(health.walHealth.message);
|
|
228
|
+
* await adapter.checkpoint?.();
|
|
229
|
+
* }
|
|
230
|
+
* ```
|
|
211
231
|
*/
|
|
212
|
-
healthCheck(
|
|
232
|
+
healthCheck(options?: {
|
|
233
|
+
walThresholdMb?: number;
|
|
234
|
+
}, projectPath?: string): Promise<{
|
|
235
|
+
connected: boolean;
|
|
236
|
+
walHealth?: {
|
|
237
|
+
healthy: boolean;
|
|
238
|
+
message: string;
|
|
239
|
+
};
|
|
240
|
+
}>;
|
|
213
241
|
/**
|
|
214
242
|
* Get database statistics
|
|
243
|
+
*
|
|
244
|
+
* Returns counts of events, agents, messages, reservations, and optional WAL stats.
|
|
245
|
+
*
|
|
246
|
+
* @param projectPath - Optional project path
|
|
247
|
+
* @returns Statistics object including WAL size and file count (if available)
|
|
215
248
|
*/
|
|
216
249
|
getDatabaseStats(projectPath?: string): Promise<{
|
|
217
250
|
events: number;
|
|
218
251
|
agents: number;
|
|
219
252
|
messages: number;
|
|
220
253
|
reservations: number;
|
|
254
|
+
wal?: {
|
|
255
|
+
size: number;
|
|
256
|
+
fileCount: number;
|
|
257
|
+
};
|
|
221
258
|
}>;
|
|
222
259
|
/**
|
|
223
260
|
* Reset database for testing
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/types/adapter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/types/adapter.ts"],"names":[],"mappings":"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"}
|
package/dist/types/database.d.ts
CHANGED
|
@@ -89,6 +89,73 @@ export interface DatabaseAdapter {
|
|
|
89
89
|
* If not provided, swarm-mail assumes connection is managed externally.
|
|
90
90
|
*/
|
|
91
91
|
close?(): Promise<void>;
|
|
92
|
+
/**
|
|
93
|
+
* Force a checkpoint to flush WAL to data files (optional)
|
|
94
|
+
*
|
|
95
|
+
* PostgreSQL CHECKPOINT command forces write-ahead log (WAL) to be written
|
|
96
|
+
* to data files, allowing WAL to be recycled. Critical for preventing WAL
|
|
97
|
+
* bloat in embedded databases like PGLite.
|
|
98
|
+
*
|
|
99
|
+
* Root cause from pdf-brain: PGLite accumulated 930 WAL files (930MB) without
|
|
100
|
+
* explicit CHECKPOINT, causing WASM OOM crash.
|
|
101
|
+
*
|
|
102
|
+
* Call after batch operations:
|
|
103
|
+
* - Migration batches
|
|
104
|
+
* - Bulk event appends
|
|
105
|
+
* - Large projection updates
|
|
106
|
+
*
|
|
107
|
+
* @example
|
|
108
|
+
* ```typescript
|
|
109
|
+
* await db.exec("CREATE TABLE ...");
|
|
110
|
+
* await db.checkpoint?.(); // Force WAL flush
|
|
111
|
+
* ```
|
|
112
|
+
*/
|
|
113
|
+
checkpoint?(): Promise<void>;
|
|
114
|
+
/**
|
|
115
|
+
* Get WAL statistics (optional)
|
|
116
|
+
*
|
|
117
|
+
* Returns current size and file count of write-ahead log (WAL) files.
|
|
118
|
+
* Use for monitoring WAL bloat to prevent WASM OOM crashes in PGLite.
|
|
119
|
+
*
|
|
120
|
+
* For PGLite: checks pg_wal directory in dataDir
|
|
121
|
+
* For PostgreSQL: queries pg_stat_wal (if available)
|
|
122
|
+
*
|
|
123
|
+
* @returns WAL stats with size in bytes and file count
|
|
124
|
+
*
|
|
125
|
+
* @example
|
|
126
|
+
* ```typescript
|
|
127
|
+
* const stats = await db.getWalStats?.();
|
|
128
|
+
* console.log(`WAL: ${stats.walSize / 1024 / 1024}MB, ${stats.walFileCount} files`);
|
|
129
|
+
* ```
|
|
130
|
+
*/
|
|
131
|
+
getWalStats?(): Promise<{
|
|
132
|
+
walSize: number;
|
|
133
|
+
walFileCount: number;
|
|
134
|
+
}>;
|
|
135
|
+
/**
|
|
136
|
+
* Check WAL health against threshold (optional)
|
|
137
|
+
*
|
|
138
|
+
* Monitors WAL size and warns when it exceeds a configurable threshold.
|
|
139
|
+
* Default threshold: 100MB (warns before critical 930MB from pdf-brain crash).
|
|
140
|
+
*
|
|
141
|
+
* Returns health status with message describing current WAL state.
|
|
142
|
+
*
|
|
143
|
+
* @param thresholdMb - Warning threshold in megabytes (default: 100)
|
|
144
|
+
* @returns Health result with boolean status and descriptive message
|
|
145
|
+
*
|
|
146
|
+
* @example
|
|
147
|
+
* ```typescript
|
|
148
|
+
* const health = await db.checkWalHealth?.(100);
|
|
149
|
+
* if (!health.healthy) {
|
|
150
|
+
* console.warn(health.message);
|
|
151
|
+
* await db.checkpoint?.(); // Trigger checkpoint
|
|
152
|
+
* }
|
|
153
|
+
* ```
|
|
154
|
+
*/
|
|
155
|
+
checkWalHealth?(thresholdMb?: number): Promise<{
|
|
156
|
+
healthy: boolean;
|
|
157
|
+
message: string;
|
|
158
|
+
}>;
|
|
92
159
|
}
|
|
93
160
|
/**
|
|
94
161
|
* Database configuration options
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/types/database.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH;;;;GAIG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,OAAO;IACvC,2BAA2B;IAC3B,IAAI,EAAE,CAAC,EAAE,CAAC;CACV;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC/B;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7E;;;;;;;;;;;;;OAaG;IACH,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjC;;;;;;;;;;;;;;;;;;OAkBG;IACH,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,eAAe,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAErE;;;;;OAKG;IACH,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/types/database.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH;;;;GAIG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,OAAO;IACvC,2BAA2B;IAC3B,IAAI,EAAE,CAAC,EAAE,CAAC;CACV;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC/B;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7E;;;;;;;;;;;;;OAaG;IACH,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjC;;;;;;;;;;;;;;;;;;OAkBG;IACH,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,eAAe,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAErE;;;;;OAKG;IACH,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAExB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7B;;;;;;;;;;;;;;;;OAgBG;IACH,WAAW,CAAC,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAEnE;;;;;;;;;;;;;;;;;;;OAmBG;IACH,cAAc,CAAC,CACd,WAAW,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClD;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC9B,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,KAAK,CAAC,EAAE;QACP,0CAA0C;QAC1C,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,qCAAqC;QACrC,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,+BAA+B;QAC/B,GAAG,CAAC,EAAE,OAAO,CAAC;KACd,CAAC;CACF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CACnC,OAAO,EAAE,eAAe,GACtB,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC,GAAG,eAAe,CAE7E"}
|