@cello-protocol/client 0.0.18 → 0.0.20

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.
@@ -4,12 +4,33 @@
4
4
  * PERSIST-009: Implements the ClientStore interface backed by SQLCipher-encrypted SQLite.
5
5
  * Used only by the composition root. Never exported from packages/client/src/index.ts.
6
6
  *
7
+ * CELLO-M6B-013: Replaced @journeyapps/sqlcipher (always compiles from source, 20-40s)
8
+ * with @signalapp/sqlcipher (ships prebuilt binaries for darwin-arm64, darwin-x64,
9
+ * linux-arm64, linux-x64, win32-arm64, win32-x64). The prebuilt binaries are bundled
10
+ * inside the npm tarball — no node-gyp invocation occurs on install.
11
+ *
12
+ * @signalapp/sqlcipher is a SQLCipher 4 binding with the same AES-256-CBC defaults
13
+ * as @journeyapps/sqlcipher. Databases created by @journeyapps/sqlcipher are readable
14
+ * by @signalapp/sqlcipher using the same PRAGMA key = "x'<hexkey>'" format. Verified
15
+ * by the cross-library compatibility test in m6b-013-sqlcipher-compat.test.ts (AC-002).
16
+ *
17
+ * API: @signalapp/sqlcipher uses a synchronous better-sqlite3-style API:
18
+ * db.prepare(sql).run([params]) / .get([params]) / .all([params])
19
+ * db.exec(sql)
20
+ * db.pragma(source, { simple: true })
21
+ * db.transaction(fn)
22
+ *
7
23
  * Security invariants (PERSIST-009):
8
24
  * SI-001: db_key is NEVER logged, serialized, or included in any error message.
9
25
  * SI-002: Constructor takes db_key (Uint8Array), NOT identity_key. The caller
10
26
  * must derive db_key via deriveDbKey() before constructing this store.
11
27
  * SI-003: No PRAGMA cipher_* commands that would weaken AES-256-CBC defaults.
12
28
  *
29
+ * Security invariants (CELLO-M6B-005):
30
+ * SI-001 (M6B-005): WAL mode PRAGMA is issued only AFTER key verification.
31
+ * Order: (1) PRAGMA key, (2) verify key, (3) PRAGMA journal_mode=WAL,
32
+ * (4) migrations. Ensures WAL files are encrypted at rest.
33
+ *
13
34
  * Degraded behavior (DB-001):
14
35
  * On corrupt file or wrong key, logs client.store.open.failed and throws.
15
36
  * Never creates a new empty database over a corrupt file.
@@ -1 +1 @@
1
- {"version":3,"file":"sqlcipher-client-store.d.ts","sourceRoot":"","sources":["../src/sqlcipher-client-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAkCtE,MAAM,WAAW,2BAA2B;IAC1C,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;CAChB;AAID;;;;;;;GAOG;AACH,qBAAa,oBAAqB,YAAW,WAAW;;IAWtD;;;;OAIG;gBACS,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,2BAA2B;IAkBnE;;;;;;;;;;;OAWG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAmD3B,oEAAoE;IAC9D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IActB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAIlD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAuOzC;;;OAGG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAW5F;;OAEG;IACG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAWtG;;OAEG;IACG,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAW7F;;OAEG;IACG,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtC;;OAEG;IACH,MAAM,IAAI,OAAO;CAGlB"}
1
+ {"version":3,"file":"sqlcipher-client-store.d.ts","sourceRoot":"","sources":["../src/sqlcipher-client-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAmCtE,MAAM,WAAW,2BAA2B;IAC1C,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;CAChB;AAID;;;;;;;GAOG;AACH,qBAAa,oBAAqB,YAAW,WAAW;;IAWtD;;;;OAIG;gBACS,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,2BAA2B;IAkBnE;;;;;;;;;;;OAWG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAkE3B,oEAAoE;IAC9D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAStB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAIlD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA6LzC;;;OAGG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAM5F;;OAEG;IACG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAKtG;;OAEG;IACG,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAK7F;;OAEG;IACG,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtC;;OAEG;IACH,MAAM,IAAI,OAAO;CAGlB"}
@@ -4,12 +4,33 @@
4
4
  * PERSIST-009: Implements the ClientStore interface backed by SQLCipher-encrypted SQLite.
5
5
  * Used only by the composition root. Never exported from packages/client/src/index.ts.
6
6
  *
7
+ * CELLO-M6B-013: Replaced @journeyapps/sqlcipher (always compiles from source, 20-40s)
8
+ * with @signalapp/sqlcipher (ships prebuilt binaries for darwin-arm64, darwin-x64,
9
+ * linux-arm64, linux-x64, win32-arm64, win32-x64). The prebuilt binaries are bundled
10
+ * inside the npm tarball — no node-gyp invocation occurs on install.
11
+ *
12
+ * @signalapp/sqlcipher is a SQLCipher 4 binding with the same AES-256-CBC defaults
13
+ * as @journeyapps/sqlcipher. Databases created by @journeyapps/sqlcipher are readable
14
+ * by @signalapp/sqlcipher using the same PRAGMA key = "x'<hexkey>'" format. Verified
15
+ * by the cross-library compatibility test in m6b-013-sqlcipher-compat.test.ts (AC-002).
16
+ *
17
+ * API: @signalapp/sqlcipher uses a synchronous better-sqlite3-style API:
18
+ * db.prepare(sql).run([params]) / .get([params]) / .all([params])
19
+ * db.exec(sql)
20
+ * db.pragma(source, { simple: true })
21
+ * db.transaction(fn)
22
+ *
7
23
  * Security invariants (PERSIST-009):
8
24
  * SI-001: db_key is NEVER logged, serialized, or included in any error message.
9
25
  * SI-002: Constructor takes db_key (Uint8Array), NOT identity_key. The caller
10
26
  * must derive db_key via deriveDbKey() before constructing this store.
11
27
  * SI-003: No PRAGMA cipher_* commands that would weaken AES-256-CBC defaults.
12
28
  *
29
+ * Security invariants (CELLO-M6B-005):
30
+ * SI-001 (M6B-005): WAL mode PRAGMA is issued only AFTER key verification.
31
+ * Order: (1) PRAGMA key, (2) verify key, (3) PRAGMA journal_mode=WAL,
32
+ * (4) migrations. Ensures WAL files are encrypted at rest.
33
+ *
13
34
  * Degraded behavior (DB-001):
14
35
  * On corrupt file or wrong key, logs client.store.open.failed and throws.
15
36
  * Never creates a new empty database over a corrupt file.
@@ -71,34 +92,51 @@ export class SQLCipherClientStore {
71
92
  * database over the corrupt file (DB-001).
72
93
  */
73
94
  async open() {
74
- // Load the native module. Using createRequire because @journeyapps/sqlcipher
95
+ // Load the native module. Using createRequire because @signalapp/sqlcipher
75
96
  // is a CJS module and this file is ESM.
76
97
  const require = createRequire(import.meta.url);
77
- let sqlite3Module;
98
+ let signalModule;
78
99
  try {
79
- sqlite3Module = require("@journeyapps/sqlcipher");
100
+ signalModule = require("@signalapp/sqlcipher");
80
101
  }
81
102
  catch (loadErr) {
82
103
  const reason = loadErr instanceof Error ? loadErr.message : String(loadErr);
83
104
  this.#logger.error("client.store.open.failed", { reason: `SQLCipher native module unavailable: ${reason}`, agentId: this.#agentId });
84
105
  throw new Error(`SQLCipher native module unavailable: ${reason}`);
85
106
  }
86
- const db = await this.#openDatabase(sqlite3Module);
107
+ // @signalapp/sqlcipher exports { default: Database, Database, setLogger }
108
+ // The Database constructor takes a file path.
109
+ const DatabaseCtor = signalModule.Database ?? signalModule.default;
110
+ let db;
111
+ try {
112
+ db = new DatabaseCtor(this.#dbPath);
113
+ }
114
+ catch (openErr) {
115
+ const reason = openErr instanceof Error ? openErr.message : String(openErr);
116
+ this.#logger.error("client.store.open.failed", { reason, agentId: this.#agentId });
117
+ throw openErr;
118
+ }
87
119
  // NOTE: do not assign this.#db yet — #applyKey and #verifyKey must succeed first.
88
120
  try {
89
121
  // Apply PRAGMA key (SI-003: only the key PRAGMA — no weakening cipher settings)
90
- await this.#applyKey(db);
122
+ this.#applyKey(db);
91
123
  // Verify the key is correct by reading the sqlite_master table.
92
- // If the key is wrong or the file is corrupt, this will fail.
93
- await this.#verifyKey(db);
124
+ // If the key is wrong or the file is corrupt, this will throw.
125
+ this.#verifyKey(db);
126
+ // SI-001 (M6B-005): WAL mode is set AFTER key verification and BEFORE migrations.
127
+ // Order: (1) PRAGMA key, (2) verify key, (3) PRAGMA journal_mode=WAL, (4) migrations.
128
+ // WAL mode is issued on a key-verified database — attackers with filesystem access
129
+ // see encrypted WAL files, not plaintext.
130
+ const journalMode = this.#setWalMode(db);
94
131
  // Key is verified — safe to make the database accessible to other methods.
95
132
  this.#db = db;
96
133
  // Run migration runner — applies pending V{n}__*.sql files
97
- await this.#runMigrations(db);
134
+ this.#runMigrations(db);
98
135
  this.#logger.info("client.store.opened", {
99
136
  env: this.#env,
100
137
  dbPath: this.#dbPath,
101
138
  agentId: this.#agentId,
139
+ journalMode,
102
140
  });
103
141
  }
104
142
  catch (err) {
@@ -109,9 +147,10 @@ export class SQLCipherClientStore {
109
147
  agentId: this.#agentId,
110
148
  });
111
149
  // Close the DB to release the file handle
112
- await new Promise((resolve) => {
113
- db.close(() => resolve());
114
- });
150
+ try {
151
+ db.close();
152
+ }
153
+ catch { /* ignore close error */ }
115
154
  this.#db = null;
116
155
  throw err;
117
156
  }
@@ -122,14 +161,7 @@ export class SQLCipherClientStore {
122
161
  return;
123
162
  const db = this.#db;
124
163
  this.#db = null;
125
- await new Promise((resolve, reject) => {
126
- db.close((err) => {
127
- if (err)
128
- reject(err);
129
- else
130
- resolve();
131
- });
132
- });
164
+ db.close();
133
165
  }
134
166
  // ─── ClientStore interface ─────────────────────────────────────────────────
135
167
  async set(_key, _value) {
@@ -150,41 +182,20 @@ export class SQLCipherClientStore {
150
182
  throw new Error("SQLCipherClientStore: database is not open. Call open() first.");
151
183
  }
152
184
  }
153
- /** Open the SQLite database file. Returns the Database instance on success. */
154
- async #openDatabase(sqlite3Module) {
155
- return new Promise((resolve, reject) => {
156
- // OPEN_CREATE creates the file if absent (first run). On an existing corrupt file,
157
- // SQLite opens it without error at the OS level; #verifyKey detects the corruption
158
- // and throws without writing to the file — satisfying DB-001 (never overwrite a
159
- // corrupt database).
160
- const mode = sqlite3Module.OPEN_READWRITE | sqlite3Module.OPEN_CREATE;
161
- const db = new sqlite3Module.Database(this.#dbPath, mode, (err) => {
162
- if (err)
163
- reject(err);
164
- else
165
- resolve(db);
166
- });
167
- });
168
- }
169
185
  /**
170
186
  * Apply the SQLCipher PRAGMA key using the raw hex format.
171
187
  * The key is passed as x'<hex>' which is the SQLCipher raw key format.
172
188
  * SI-001: The key hex is used only in the PRAGMA string and never logged.
173
189
  * SI-003: Only the `key` PRAGMA is set — no cipher_* weakening PRAGMAs.
190
+ *
191
+ * @signalapp/sqlcipher's synchronous pragma() throws on error — no callback needed.
174
192
  */
175
- async #applyKey(db) {
193
+ #applyKey(db) {
176
194
  const keyHex = Buffer.from(this.#dbKey).toString("hex");
177
- const pragmaSql = `PRAGMA key = "x'${keyHex}'"`;
195
+ const pragmaSource = `key = "x'${keyHex}'"`;
178
196
  // SI-001: keyHex is used only in the PRAGMA string and is never logged.
179
197
  // SI-003: only the `key` PRAGMA is issued — no cipher_* weakening PRAGMAs.
180
- return new Promise((resolve, reject) => {
181
- db.run(pragmaSql, [], function (err) {
182
- if (err)
183
- reject(err);
184
- else
185
- resolve();
186
- });
187
- });
198
+ db.pragma(pragmaSource);
188
199
  }
189
200
  /**
190
201
  * Verify the PRAGMA key is correct by executing a test query.
@@ -194,15 +205,27 @@ export class SQLCipherClientStore {
194
205
  * DB-001: We do NOT catch and recover here — the error propagates to open()
195
206
  * which logs client.store.open.failed and throws, halting the client.
196
207
  */
197
- async #verifyKey(db) {
198
- return new Promise((resolve, reject) => {
199
- db.get(`SELECT count(*) as c FROM sqlite_master`, [], (err, _row) => {
200
- if (err)
201
- reject(err);
202
- else
203
- resolve();
204
- });
205
- });
208
+ #verifyKey(db) {
209
+ db.prepare(`SELECT count(*) as c FROM sqlite_master`).get([]);
210
+ }
211
+ /**
212
+ * Enable WAL (Write-Ahead Log) journal mode on the database.
213
+ *
214
+ * @signalapp/sqlcipher's synchronous pragma() with { simple: true } returns
215
+ * the first column of the first result row directly.
216
+ *
217
+ * Implements SI-001 (M6B-005): Must only be called AFTER #verifyKey() succeeds.
218
+ * WAL mode on an unverified database would operate on plaintext; by calling this after
219
+ * key verification, we guarantee WAL files are encrypted at rest.
220
+ *
221
+ * Returns the active journal mode string (normally 'wal').
222
+ */
223
+ #setWalMode(db) {
224
+ const mode = db.pragma("journal_mode=WAL", { simple: true });
225
+ if (mode !== "wal") {
226
+ throw new Error(`WAL mode failed: expected 'wal', got '${mode}'. This may occur on network filesystems (NFS, SMB). Move your CELLO_DB_PATH to a local filesystem.`);
227
+ }
228
+ return mode;
206
229
  }
207
230
  /**
208
231
  * Run the custom migration runner.
@@ -215,18 +238,18 @@ export class SQLCipherClientStore {
215
238
  * 5. Record the version in schema_migrations.
216
239
  * 6. Log client.store.migration.applied for each applied migration.
217
240
  */
218
- async #runMigrations(db) {
241
+ #runMigrations(db) {
219
242
  // Bootstrap the migrations table before any migration runs — this is not a migration
220
243
  // itself and must not be inside a migration transaction.
221
244
  // Step 1: bootstrap the schema_migrations table itself
222
- await this.#execSql(db, `CREATE TABLE IF NOT EXISTS schema_migrations (
245
+ db.exec(`CREATE TABLE IF NOT EXISTS schema_migrations (
223
246
  version TEXT PRIMARY KEY,
224
247
  applied_at TEXT NOT NULL DEFAULT (datetime('now'))
225
248
  )`);
226
249
  // Step 2: read migration files
227
250
  const migrationFiles = this.#readMigrationFiles();
228
251
  // Step 3: find already-applied migrations
229
- const appliedVersions = await this.#queryAppliedVersions(db);
252
+ const appliedVersions = this.#queryAppliedVersions(db);
230
253
  // Step 4-6: apply pending migrations in order
231
254
  let v2Applied = false;
232
255
  const v2StartTime = Date.now();
@@ -236,7 +259,7 @@ export class SQLCipherClientStore {
236
259
  const sql = readFileSync(filename, "utf-8");
237
260
  const startTime = Date.now();
238
261
  try {
239
- await this.#applyMigration(db, sql, version);
262
+ this.#applyMigration(db, sql, version);
240
263
  const executionTime = Date.now() - startTime;
241
264
  this.#logger.info("client.store.migration.applied", {
242
265
  version,
@@ -303,59 +326,22 @@ export class SQLCipherClientStore {
303
326
  return migrations;
304
327
  }
305
328
  /** Query the schema_migrations table and return the set of applied version strings. */
306
- async #queryAppliedVersions(db) {
307
- return new Promise((resolve, reject) => {
308
- db.all(`SELECT version FROM schema_migrations`, [], (err, rows) => {
309
- if (err)
310
- return reject(err);
311
- const versions = new Set((rows ?? []).map((r) => String(r.version)));
312
- resolve(versions);
313
- });
314
- });
329
+ #queryAppliedVersions(db) {
330
+ const rows = db.prepare(`SELECT version FROM schema_migrations`).all([]);
331
+ return new Set(rows.map((r) => r.version));
315
332
  }
316
333
  /**
317
334
  * Apply a single migration SQL within a transaction and record it in schema_migrations.
318
335
  *
319
- * Implementation note: db.serialize() enqueues all db.run/db.exec calls synchronously
320
- * before any callbacks fire, so error recovery inside serialize() is broken the INSERT
321
- * and COMMIT are already queued when a ROLLBACK fires. This method uses a linear await
322
- * chain instead, which gives correct sequencing with real error propagation.
336
+ * @signalapp/sqlcipher's synchronous db.transaction(fn) wraps fn in a BEGIN/COMMIT pair.
337
+ * If fn throws, the transaction is automatically rolled back.
323
338
  */
324
- async #applyMigration(db, sql, version) {
325
- const run = (stmt, params = []) => new Promise((res, rej) => db.run(stmt, params, function (err) {
326
- if (err)
327
- rej(err);
328
- else
329
- res();
330
- }));
331
- const exec = (stmt) => new Promise((res, rej) => db.exec(stmt, (err) => {
332
- if (err)
333
- rej(err);
334
- else
335
- res();
336
- }));
337
- await run("BEGIN");
338
- try {
339
- await exec(sql);
340
- await run(`INSERT OR IGNORE INTO schema_migrations (version, applied_at) VALUES (?, datetime('now'))`, [version]);
341
- await run("COMMIT");
342
- }
343
- catch (err) {
344
- // Best-effort rollback — if ROLLBACK itself fails we still re-throw the original error.
345
- await run("ROLLBACK").catch(() => { });
346
- throw err;
347
- }
348
- }
349
- /** Execute a SQL statement with no parameters. */
350
- async #execSql(db, sql) {
351
- return new Promise((resolve, reject) => {
352
- db.exec(sql, (err) => {
353
- if (err)
354
- reject(err);
355
- else
356
- resolve();
357
- });
339
+ #applyMigration(db, sql, version) {
340
+ const applyFn = db.transaction(() => {
341
+ db.exec(sql);
342
+ db.prepare(`INSERT OR IGNORE INTO schema_migrations (version, applied_at) VALUES (?, datetime('now'))`).run([version]);
358
343
  });
344
+ applyFn();
359
345
  }
360
346
  // ─── Structured DB access (PERSIST-024) ───────────────────────────────────────
361
347
  /**
@@ -364,50 +350,29 @@ export class SQLCipherClientStore {
364
350
  */
365
351
  async run(sql, params = []) {
366
352
  this.#assertOpen();
367
- const db = this.#db;
368
- return new Promise((resolve, reject) => {
369
- db.run(sql, params, function (err) {
370
- if (err)
371
- reject(err);
372
- else
373
- resolve({ lastID: this.lastID, changes: this.changes });
374
- });
375
- });
353
+ const result = this.#db.prepare(sql).run(params);
354
+ return { lastID: result.lastInsertRowid, changes: result.changes };
376
355
  }
377
356
  /**
378
357
  * Execute a parameterized query returning a single row (or undefined).
379
358
  */
380
359
  async getRow(sql, params = []) {
381
360
  this.#assertOpen();
382
- const db = this.#db;
383
- return new Promise((resolve, reject) => {
384
- db.get(sql, params, (err, row) => {
385
- if (err)
386
- return reject(err);
387
- resolve(row);
388
- });
389
- });
361
+ return this.#db.prepare(sql).get(params);
390
362
  }
391
363
  /**
392
364
  * Execute a parameterized query returning all matching rows.
393
365
  */
394
366
  async allRows(sql, params = []) {
395
367
  this.#assertOpen();
396
- const db = this.#db;
397
- return new Promise((resolve, reject) => {
398
- db.all(sql, params, (err, rows) => {
399
- if (err)
400
- return reject(err);
401
- resolve((rows ?? []));
402
- });
403
- });
368
+ return this.#db.prepare(sql).all(params);
404
369
  }
405
370
  /**
406
371
  * Execute raw SQL without parameters (for multi-statement DDL or pragmas).
407
372
  */
408
373
  async exec(sql) {
409
374
  this.#assertOpen();
410
- return this.#execSql(this.#db, sql);
375
+ this.#db.exec(sql);
411
376
  }
412
377
  /**
413
378
  * Check if the database is open.
@@ -1 +1 @@
1
- {"version":3,"file":"sqlcipher-client-store.js","sourceRoot":"","sources":["../src/sqlcipher-client-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sqlcipher-client-store.js","sourceRoot":"","sources":["../src/sqlcipher-client-store.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cello-protocol/client",
3
- "version": "0.0.18",
3
+ "version": "0.0.20",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "engines": {
@@ -25,20 +25,21 @@
25
25
  "dependencies": {
26
26
  "@aws-sdk/client-s3": "3.1051.0",
27
27
  "@cello-protocol/interfaces": "0.0.3",
28
- "@journeyapps/sqlcipher": "^6.0.0",
29
28
  "@libp2p/interface": "^3.2.2",
30
29
  "@modelcontextprotocol/sdk": "^1.29.0",
31
30
  "@noble/curves": "^2.2.0",
31
+ "@signalapp/sqlcipher": "^3.3.5",
32
32
  "cbor-x": "^1.6.0",
33
33
  "it-length-prefixed": "^10.0.1",
34
34
  "it-pipe": "^3.0.1",
35
35
  "zod": "^4.4.2",
36
- "@cello-protocol/transport": "0.0.4",
37
36
  "@cello-protocol/crypto": "0.0.7",
37
+ "@cello-protocol/transport": "0.0.4",
38
38
  "@cello-protocol/protocol-types": "0.0.3"
39
39
  },
40
40
  "devDependencies": {
41
41
  "@claude-flow/testing": "3.0.0-alpha.6",
42
+ "@journeyapps/sqlcipher": "^6.0.0",
42
43
  "@types/node": "^25.6.2",
43
44
  "@cello-protocol/test-fixtures": "0.0.3"
44
45
  },