@framers/sql-storage-adapter 0.2.0 → 0.3.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 CHANGED
@@ -18,26 +18,31 @@
18
18
 
19
19
  > Cross-platform SQL access for Node.js, web, and native runtimes with automatic adapter selection and consistent APIs.
20
20
 
21
- The SQL Storage Adapter provides a single, ergonomic interface over SQLite (native and WASM), PostgreSQL, Capacitor, and in-memory stores. It handles adapter discovery, capability detection, and advanced features like cloud backups so you can focus on your application logic.
21
+ The SQL Storage Adapter provides a single, ergonomic interface over SQLite (native and WASM), PostgreSQL, Capacitor, IndexedDB, and in-memory stores. It handles adapter discovery, capability detection, and advanced features like cloud backups so you can focus on your application logic.
22
+
23
+ **🆕 NEW:** Full IndexedDB support for browser-native, offline-first web apps!
22
24
 
23
25
  ---
24
26
 
25
27
  - [Features](#features)
26
28
  - [Installation](#installation)
27
29
  - [Quick Start](#quick-start)
30
+ - [AgentOS Integration](#agentos-integration)
28
31
  - [Adapter Matrix](#adapter-matrix)
29
32
  - [Configuration & Resolution](#configuration--resolution)
33
+ - [Platform Strategy](#platform-strategy)
30
34
  - [CI, Releases, and Badges](#ci-releases-and-badges)
31
- - [Troubleshooting](#troubleshooting)
32
35
  - [Contributing](#contributing)
33
36
  - [License](#license)
34
37
 
35
38
  ## Features
36
39
 
37
- - **Auto-detected adapters** – `createDatabase()` inspects environment signals and picks the best backend (native SQLite, PostgreSQL, Capacitor, sql.js, memory, etc.).
40
+ - **Auto-detected adapters** – `createDatabase()` inspects environment signals and picks the best backend (native SQLite, PostgreSQL, Capacitor, sql.js, **IndexedDB**, memory, etc.).
38
41
  - **Capability-aware API** – consistent CRUD, transactions, batching, and event hooks across adapters with runtime capability introspection.
42
+ - **🆕 IndexedDB** – Browser-native persistence with sql.js for full SQL support in PWAs and offline-first apps.
39
43
  - **Cloud backups & migrations** – built-in backup manager with compression, retention policies, and restore helpers plus migration utilities.
40
44
  - **Portable packaging** – optional native dependencies; falls back to pure TypeScript/WASM adapters when native modules are unavailable.
45
+ - **AgentOS-first** – Pre-configured schema, typed queries, and auto-detection for AgentOS deployments.
41
46
  - **CI-first design** – Vitest coverage, Codecov integration, and GitHub Actions workflows for linting, testing, releasing, and npm publish/tag automation.
42
47
 
43
48
  ## Installation
@@ -50,11 +55,14 @@ npm install @framers/sql-storage-adapter
50
55
  npm install better-sqlite3 # Native SQLite for Node/Electron
51
56
  npm install pg # PostgreSQL
52
57
  npm install @capacitor-community/sqlite # Capacitor / mobile
53
- # sql.js ships with the package (no extra install)
58
+ npm install sql.js # WASM SQLite (auto-included for IndexedDB)
59
+ # IndexedDB uses sql.js (no extra install needed)
54
60
  ```
55
61
 
56
62
  > Windows users: ensure the Visual Studio Build Tools (C++ workload) are installed before adding `better-sqlite3`. On Linux, install `python3`, `build-essential`, and `libssl-dev` prior to `npm install`.
57
63
 
64
+ > Note: If `better-sqlite3` cannot be required, install native build tools before `npm install`, ensure your Node version matches available prebuilt binaries, or fall back to `sql.js` or `indexeddb` by setting `STORAGE_ADAPTER=sqljs` or `STORAGE_ADAPTER=indexeddb`.
65
+
58
66
  ## Quick Start
59
67
 
60
68
  ```typescript
@@ -85,26 +93,119 @@ main().catch((error) => {
85
93
  });
86
94
  ```
87
95
 
96
+ ## AgentOS Integration
97
+
98
+ ### Recommended: `createAgentOSStorage()`
99
+
100
+ The easiest way to use sql-storage-adapter with AgentOS is the **AgentOS-first API**:
101
+
102
+ ```typescript
103
+ import { createAgentOSStorage } from '@framers/sql-storage-adapter/agentos';
104
+ import { AgentOS } from '@agentos/core';
105
+
106
+ // Auto-detects platform (web, electron, capacitor, node, cloud)
107
+ const storage = await createAgentOSStorage({
108
+ platform: 'auto', // Detects best adapter
109
+ persistence: true,
110
+ });
111
+
112
+ const agentos = new AgentOS();
113
+ await agentos.initialize({
114
+ storageAdapter: storage.getAdapter(), // 🆕 New field in AgentOSConfig
115
+ // ... other config
116
+ });
117
+ ```
118
+
119
+ **Features:**
120
+ - ✅ Auto-creates AgentOS tables (conversations, sessions, personas, telemetry)
121
+ - ✅ Platform detection (web → IndexedDB, electron → better-sqlite3, etc.)
122
+ - ✅ Typed query builders for common operations
123
+ - ✅ Graceful degradation (e.g., IndexedDB → sql.js fallback)
124
+
125
+ ### Platform-Specific Examples
126
+
127
+ ```typescript
128
+ // Web (Browser): Uses IndexedDB
129
+ const webStorage = await createAgentOSStorage({ platform: 'web' });
130
+
131
+ // Desktop (Electron): Uses better-sqlite3
132
+ const desktopStorage = await createAgentOSStorage({ platform: 'electron' });
133
+
134
+ // Mobile (Capacitor): Uses native SQLite
135
+ const mobileStorage = await createAgentOSStorage({ platform: 'capacitor' });
136
+
137
+ // Cloud (Node): Uses PostgreSQL
138
+ const cloudStorage = await createAgentOSStorage({
139
+ platform: 'cloud',
140
+ postgres: { connectionString: process.env.DATABASE_URL }
141
+ });
142
+ ```
143
+
144
+ See [Platform Strategy Guide](./docs/PLATFORM_STRATEGY.md) for detailed pros/cons and architecture.
145
+
88
146
  ## Adapter Matrix
89
147
 
90
148
  | Adapter | Package | Ideal for | Pros | Considerations |
91
149
  | --- | --- | --- | --- | --- |
150
+ | **🆕 `indexeddb`** | bundled | **Browsers, PWAs** | Browser-native, async, 50MB-1GB+ quota, SQL via sql.js, offline-first | IndexedDB quotas vary, WASM overhead for SQL |
92
151
  | `better-sqlite3` | `better-sqlite3` | Node/Electron, CLI, CI | Native performance, transactional semantics, WAL support | Needs native toolchain; version must match Node ABI |
93
152
  | `postgres` | `pg` | Hosted or on-prem PostgreSQL | Connection pooling, rich SQL features, cloud friendly | Requires `DATABASE_URL`/credentials |
94
153
  | `sqljs` | bundled | Browsers, serverless edge, native fallback | Pure WASM, no native deps | Write performance limited vs native, optional persistence |
95
- | `capacitor` | `@capacitor-community/sqlite` | Mobile (iOS/Android, Capacitor) | Native SQLite on mobile | Requires Capacitor runtime |
154
+ | `capacitor` | `@capacitor-community/sqlite` | Mobile (iOS/Android, Capacitor) | Native SQLite on mobile, encryption | Requires Capacitor runtime |
96
155
  | `memory` | built-in | Unit tests, storybooks, constrained sandboxes | Zero dependencies, instant startup | Non-durable, single-process only |
97
156
 
157
+ ### Platform Priorities
158
+
159
+ | Platform | Primary Adapter | Fallback | Use Case |
160
+ |----------|----------------|----------|----------|
161
+ | **Web (Browser)** | IndexedDB | sql.js | PWAs, offline-first web apps |
162
+ | **Electron (Desktop)** | better-sqlite3 | sql.js | Desktop apps, dev tools |
163
+ | **Capacitor (Mobile)** | capacitor | IndexedDB | iOS/Android native apps |
164
+ | **Node.js** | better-sqlite3 | Postgres, sql.js | CLI tools, local servers |
165
+ | **Cloud (Serverless)** | Postgres | better-sqlite3 | Multi-tenant SaaS, APIs |
166
+
98
167
  ## Configuration & Resolution
99
168
 
100
169
  - `resolveStorageAdapter` inspects:
101
170
  - explicit options (`priority`, `type`, adapter configs),
102
171
  - environment variables (`STORAGE_ADAPTER`, `DATABASE_URL`),
103
- - runtime hints (Capacitor detection, browser globals).
172
+ - runtime hints (Capacitor detection, browser globals, IndexedDB availability).
104
173
  - Adapters are attempted in priority order until one opens successfully; a `StorageResolutionError` includes the full failure chain.
105
- - Provide `priority: ['memory', 'sqljs']` for browser bundles or tests where native modules shouldnt load.
174
+ - Provide `priority: ['indexeddb', 'sqljs']` for browser bundles or tests where native modules shouldn't load.
106
175
  - Use `createCloudBackupManager` for S3-compatible backups with gzip compression and retention limits.
107
176
 
177
+ ### IndexedDB-Specific Config
178
+
179
+ ```typescript
180
+ import { IndexedDbAdapter } from '@framers/sql-storage-adapter';
181
+
182
+ const adapter = new IndexedDbAdapter({
183
+ dbName: 'my-app-db', // IndexedDB database name
184
+ storeName: 'sqliteDb', // Object store name
185
+ autoSave: true, // Auto-save to IndexedDB after writes
186
+ saveIntervalMs: 5000, // Batch writes every 5s
187
+ });
188
+
189
+ await adapter.open();
190
+ ```
191
+
192
+ **Key Features:**
193
+ - ✅ Transactions (via sql.js)
194
+ - ✅ Persistence (IndexedDB)
195
+ - ✅ Export/import (Uint8Array SQLite file format)
196
+ - ✅ Auto-save with batching (reduce IDB overhead)
197
+
198
+ ## Platform Strategy
199
+
200
+ See [**PLATFORM_STRATEGY.md**](./docs/PLATFORM_STRATEGY.md) for a comprehensive guide on:
201
+ - Graceful degradation patterns
202
+ - Platform-specific pros/cons
203
+ - Performance benchmarks
204
+ - Offline-first architectures
205
+ - AgentOS-specific recommendations
206
+
207
+ **TL;DR:** Use IndexedDB for web, better-sqlite3 for desktop, capacitor for mobile, Postgres for cloud.
208
+
108
209
  ## CI, Releases, and Badges
109
210
 
110
211
  - GitHub Actions workflows:
@@ -122,13 +223,7 @@ main().catch((error) => {
122
223
  ```
123
224
  - See [RELEASING.md](./RELEASING.md) for the automated release flow, required secrets (`NPM_TOKEN`), and manual fallback steps.
124
225
 
125
- ## Troubleshooting
126
-
127
- - **`better-sqlite3` cannot be required** – install native build tools before `npm install`, ensure Node version matches prebuilt binaries, or fall back to sql.js by setting `STORAGE_ADAPTER=sqljs`.
128
- - **Adapter resolution picks the wrong backend** – set `priority` or `STORAGE_ADAPTER` explicitly; register new adapters in `src/core/resolver.ts`.
129
- - **Cloud backup tests lock the database** – call `await db.close()` in test teardown; use the in-memory/sql.js fallback on runners without native SQLite.
130
- - **GitHub release missing** – confirm `release.yml` succeeded, `NPM_TOKEN` is configured, and the version bump is committed. Rerun the workflow if needed.
131
- - **Missing lock file in subtree mirror** – keep `pnpm-lock.yaml` committed so CI caches dependencies correctly when this package is mirrored out of a monorepo.
226
+
132
227
 
133
228
  ## Contributing
134
229
 
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=indexedDbAdapter.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexedDbAdapter.spec.d.ts","sourceRoot":"","sources":["../../../src/adapters/__tests__/indexedDbAdapter.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,137 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
+ import { IndexedDbAdapter } from '../indexedDbAdapter';
3
+ // Mock IndexedDB for Node.js tests
4
+ const setupIndexedDbMock = () => {
5
+ const stores = new Map();
6
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
7
+ global.indexedDB = {
8
+ open: (_name, _version) => {
9
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
+ const req = {
11
+ result: {
12
+ objectStoreNames: { contains: () => false },
13
+ createObjectStore: (_storeName) => {
14
+ stores.set(_storeName, new Map());
15
+ },
16
+ transaction: (_storeName, _mode) => ({
17
+ objectStore: (name) => {
18
+ const store = stores.get(name) || new Map();
19
+ return {
20
+ get: (key) => ({
21
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
22
+ onsuccess: null,
23
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
24
+ onerror: null,
25
+ result: store.get(key),
26
+ }),
27
+ put: (value, key) => {
28
+ store.set(key, value);
29
+ return {
30
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
31
+ onsuccess: null,
32
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
33
+ onerror: null,
34
+ };
35
+ },
36
+ };
37
+ },
38
+ }),
39
+ close: () => { },
40
+ },
41
+ };
42
+ setTimeout(() => {
43
+ if (req.onupgradeneeded)
44
+ req.onupgradeneeded();
45
+ if (req.onsuccess)
46
+ req.onsuccess();
47
+ }, 0);
48
+ return req;
49
+ },
50
+ };
51
+ };
52
+ describe('IndexedDbAdapter', () => {
53
+ let adapter;
54
+ beforeEach(async () => {
55
+ setupIndexedDbMock();
56
+ adapter = new IndexedDbAdapter({
57
+ dbName: 'test-db',
58
+ autoSave: false, // Disable for tests
59
+ });
60
+ });
61
+ afterEach(async () => {
62
+ if (adapter) {
63
+ await adapter.close();
64
+ }
65
+ });
66
+ it('should initialize with correct capabilities', () => {
67
+ expect(adapter.kind).toBe('indexeddb');
68
+ expect(adapter.capabilities.has('transactions')).toBe(true);
69
+ expect(adapter.capabilities.has('persistence')).toBe(true);
70
+ });
71
+ it('should open database successfully', async () => {
72
+ await adapter.open();
73
+ // No error means success
74
+ expect(true).toBe(true);
75
+ });
76
+ it('should create table and insert data', async () => {
77
+ await adapter.open();
78
+ await adapter.run('CREATE TABLE test (id INTEGER PRIMARY KEY, name TEXT)');
79
+ const result = await adapter.run('INSERT INTO test (name) VALUES (?)', ['Alice']);
80
+ expect(result.changes).toBe(1);
81
+ expect(result.lastInsertRowid).toBeDefined();
82
+ });
83
+ it('should retrieve inserted data', async () => {
84
+ await adapter.open();
85
+ await adapter.run('CREATE TABLE test (id INTEGER PRIMARY KEY, name TEXT)');
86
+ await adapter.run('INSERT INTO test (name) VALUES (?)', ['Bob']);
87
+ const row = await adapter.get('SELECT * FROM test WHERE name = ?', ['Bob']);
88
+ expect(row).toBeDefined();
89
+ expect(row?.name).toBe('Bob');
90
+ });
91
+ it('should return all rows', async () => {
92
+ await adapter.open();
93
+ await adapter.run('CREATE TABLE test (id INTEGER PRIMARY KEY, name TEXT)');
94
+ await adapter.run('INSERT INTO test (name) VALUES (?)', ['Alice']);
95
+ await adapter.run('INSERT INTO test (name) VALUES (?)', ['Bob']);
96
+ const rows = await adapter.all('SELECT * FROM test');
97
+ expect(rows.length).toBe(2);
98
+ expect(rows.map(r => r.name)).toContain('Alice');
99
+ expect(rows.map(r => r.name)).toContain('Bob');
100
+ });
101
+ it('should support transactions', async () => {
102
+ await adapter.open();
103
+ await adapter.run('CREATE TABLE test (id INTEGER PRIMARY KEY, value INTEGER)');
104
+ await adapter.beginTransaction();
105
+ await adapter.run('INSERT INTO test (value) VALUES (?)', [100]);
106
+ await adapter.run('INSERT INTO test (value) VALUES (?)', [200]);
107
+ await adapter.commit();
108
+ const rows = await adapter.all('SELECT value FROM test');
109
+ expect(rows.length).toBe(2);
110
+ expect(rows.map(r => r.value)).toEqual([100, 200]);
111
+ });
112
+ it('should rollback transactions', async () => {
113
+ await adapter.open();
114
+ await adapter.run('CREATE TABLE test (id INTEGER PRIMARY KEY, value INTEGER)');
115
+ await adapter.beginTransaction();
116
+ await adapter.run('INSERT INTO test (value) VALUES (?)', [100]);
117
+ await adapter.rollback();
118
+ const rows = await adapter.all('SELECT * FROM test');
119
+ expect(rows.length).toBe(0);
120
+ });
121
+ it('should export and import database', async () => {
122
+ await adapter.open();
123
+ await adapter.run('CREATE TABLE test (id INTEGER PRIMARY KEY, name TEXT)');
124
+ await adapter.run('INSERT INTO test (name) VALUES (?)', ['Export Test']);
125
+ const exported = adapter.exportDatabase();
126
+ expect(exported).toBeInstanceOf(Uint8Array);
127
+ expect(exported.length).toBeGreaterThan(0);
128
+ // Create new adapter and import
129
+ const adapter2 = new IndexedDbAdapter({ dbName: 'test-db-2', autoSave: false });
130
+ await adapter2.open();
131
+ await adapter2.importDatabase(exported);
132
+ const row = await adapter2.get('SELECT * FROM test WHERE name = ?', ['Export Test']);
133
+ expect(row?.name).toBe('Export Test');
134
+ await adapter2.close();
135
+ });
136
+ });
137
+ //# sourceMappingURL=indexedDbAdapter.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexedDbAdapter.spec.js","sourceRoot":"","sources":["../../../src/adapters/__tests__/indexedDbAdapter.spec.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"betterSqliteAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/betterSqliteAdapter.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAiDjK;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH;;;;;;;;;;;GAWG;AACH,qBAAa,mBAAoB,YAAW,cAAc;IAsB5C,OAAO,CAAC,QAAQ,CAAC,eAAe;IArB5C,SAAgB,IAAI,oBAAoB;IACxC,SAAgB,YAAY,EAAE,WAAW,CAAC,iBAAiB,CAAC,CAQzD;IAEH,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,EAAE,CAAqC;IAC/C,OAAO,CAAC,kBAAkB,CAA4C;IAEtE;;;;;OAKG;gBAC0B,eAAe,EAAE,MAAM;IAEpD;;;;OAIG;IACU,IAAI,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBjD,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAOjF,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAOtF,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAOvE,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKnC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAOnE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IASnC;;;;;;;;OAQG;IACU,KAAK,CAAC,UAAU,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IA+CtE,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,UAAU;CAKnB;AAED;;GAEG;AACH;;;;;;;;GAQG;AACH,eAAO,MAAM,yBAAyB,aAAc,MAAM,KAAG,cAQ5D,CAAC"}
1
+ {"version":3,"file":"betterSqliteAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/betterSqliteAdapter.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAiDjK;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH;;;;;;;;;;;GAWG;AACH,qBAAa,mBAAoB,YAAW,cAAc;IAsB5C,OAAO,CAAC,QAAQ,CAAC,eAAe;IArB5C,SAAgB,IAAI,oBAAoB;IACxC,SAAgB,YAAY,EAAE,WAAW,CAAC,iBAAiB,CAAC,CAQzD;IAEH,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,EAAE,CAAqC;IAC/C,OAAO,CAAC,kBAAkB,CAA4C;IAEtE;;;;;OAKG;gBAC0B,eAAe,EAAE,MAAM;IAEpD;;;;OAIG;IACU,IAAI,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBjD,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAOjF,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAOtF,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAOvE,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKnC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAenE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IASnC;;;;;;;;OAQG;IACU,KAAK,CAAC,UAAU,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IA+CtE,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,UAAU;CAKnB;AAED;;GAEG;AACH;;;;;;;;GAQG;AACH,eAAO,MAAM,yBAAyB,aAAc,MAAM,KAAG,cAQ5D,CAAC"}
@@ -156,9 +156,21 @@ export class BetterSqliteAdapter {
156
156
  }
157
157
  async transaction(fn) {
158
158
  this.ensureOpen();
159
- const db = this.db;
160
- const wrap = db.transaction(async () => fn(this));
161
- return wrap();
159
+ // Manual transactional control to support async callback semantics
160
+ // without violating better-sqlite3's sync transaction callback contract.
161
+ this.db.exec('BEGIN');
162
+ try {
163
+ const result = await fn(this);
164
+ this.db.exec('COMMIT');
165
+ return result;
166
+ }
167
+ catch (error) {
168
+ try {
169
+ this.db.exec('ROLLBACK');
170
+ }
171
+ catch { /* ignore rollback errors */ }
172
+ throw error;
173
+ }
162
174
  }
163
175
  async close() {
164
176
  if (this.db) {
@@ -1 +1 @@
1
- {"version":3,"file":"betterSqliteAdapter.js","sourceRoot":"","sources":["../../src/adapters/betterSqliteAdapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"betterSqliteAdapter.js","sourceRoot":"","sources":["../../src/adapters/betterSqliteAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,189 @@
1
+ /**
2
+ * @fileoverview IndexedDB Storage Adapter for AgentOS
3
+ * @description Browser-native SQL storage using IndexedDB with sql.js for full client-side operation.
4
+ * Supports transactions, persistence to IndexedDB, and offline-first workflows.
5
+ *
6
+ * **Use cases:**
7
+ * - Fully client-side AgentOS (no backend needed)
8
+ * - Progressive Web Apps (PWAs)
9
+ * - Offline-capable agents
10
+ * - Privacy-first applications (data never leaves browser)
11
+ *
12
+ * **Architecture:**
13
+ * - Uses sql.js (SQLite compiled to WebAssembly) for SQL execution
14
+ * - Persists database to IndexedDB for durability across sessions
15
+ * - Auto-saves after each transaction
16
+ * - Supports import/export for data portability
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * import { IndexedDbAdapter } from '../adapters/indexedDbAdapter';
21
+ *
22
+ * const adapter = new IndexedDbAdapter({
23
+ * dbName: 'agentos-client-db',
24
+ * autoSave: true,
25
+ * saveIntervalMs: 5000,
26
+ * });
27
+ *
28
+ * await adapter.open();
29
+ * await adapter.run('CREATE TABLE sessions (id TEXT PRIMARY KEY, data TEXT)');
30
+ * await adapter.run('INSERT INTO sessions VALUES (?, ?)', ['session-1', '{"events": []}']);
31
+ *
32
+ * const session = await adapter.get('SELECT * FROM sessions WHERE id = ?', ['session-1']);
33
+ * console.log(session);
34
+ * ```
35
+ */
36
+ import type { StorageAdapter, StorageCapability, StorageOpenOptions, StorageParameters, StorageRunResult } from '../core/contracts';
37
+ /**
38
+ * Configuration for IndexedDB adapter.
39
+ */
40
+ export interface IndexedDbAdapterOptions {
41
+ /** IndexedDB database name (default: 'agentos-db') */
42
+ dbName?: string;
43
+ /** IndexedDB object store name (default: 'sqliteDb') */
44
+ storeName?: string;
45
+ /** Auto-save to IndexedDB after each write (default: true) */
46
+ autoSave?: boolean;
47
+ /** Save interval in milliseconds for batched writes (default: 5000) */
48
+ saveIntervalMs?: number;
49
+ /** sql.js configuration (e.g., locateFile for wasm) */
50
+ sqlJsConfig?: any;
51
+ }
52
+ /**
53
+ * Storage adapter using IndexedDB + sql.js for client-side SQL persistence.
54
+ *
55
+ * **Capabilities:**
56
+ * - ✅ Transactions
57
+ * - ✅ Persistence (IndexedDB)
58
+ * - ✅ Full SQL support (via sql.js)
59
+ * - ✅ Export/import
60
+ * - ❌ Concurrent writes (single-threaded)
61
+ * - ❌ Server-side (browser only)
62
+ *
63
+ * **Performance:**
64
+ * - Fast reads (in-memory SQL)
65
+ * - Moderate writes (IndexedDB persistence)
66
+ * - Auto-save batching reduces IDB overhead
67
+ *
68
+ * @example Client-side AgentOS
69
+ * ```typescript
70
+ * const adapter = new IndexedDbAdapter({ dbName: 'my-app-db' });
71
+ * const agentos = new AgentOS();
72
+ * await agentos.initialize({
73
+ * storageAdapter: adapter,
74
+ * // ... other config
75
+ * });
76
+ * ```
77
+ */
78
+ export declare class IndexedDbAdapter implements StorageAdapter {
79
+ readonly kind = "indexeddb";
80
+ readonly capabilities: ReadonlySet<StorageCapability>;
81
+ private SQL;
82
+ private db;
83
+ private idb;
84
+ private saveTimer;
85
+ private dirty;
86
+ private readonly dbName;
87
+ private readonly storeName;
88
+ private readonly autoSave;
89
+ private readonly saveIntervalMs;
90
+ private readonly sqlJsConfig;
91
+ constructor(options?: IndexedDbAdapterOptions);
92
+ /**
93
+ * Opens IndexedDB and initializes sql.js database.
94
+ * Loads existing database from IndexedDB if present.
95
+ */
96
+ open(_options?: StorageOpenOptions): Promise<void>;
97
+ /**
98
+ * Executes a SQL statement that doesn't return rows (INSERT, UPDATE, DELETE, CREATE, etc.).
99
+ * @param statement SQL statement with ? or :name placeholders
100
+ * @param parameters Positional array or named object
101
+ * @returns Result with changes count and last insert row ID
102
+ */
103
+ run(statement: string, parameters?: StorageParameters): Promise<StorageRunResult>;
104
+ /**
105
+ * Executes a SQL query and returns the first row.
106
+ * @param statement SELECT statement
107
+ * @param parameters Query parameters
108
+ * @returns First row as object or null if no results
109
+ */
110
+ get<T>(statement: string, parameters?: StorageParameters): Promise<T | null>;
111
+ /**
112
+ * Executes a SQL query and returns all matching rows.
113
+ * @param statement SELECT statement
114
+ * @param parameters Query parameters
115
+ * @returns Array of result rows as objects
116
+ */
117
+ all<T>(statement: string, parameters?: StorageParameters): Promise<T[]>;
118
+ /**
119
+ * Executes a script containing multiple SQL statements.
120
+ */
121
+ exec(script: string): Promise<void>;
122
+ /**
123
+ * Executes a callback within a database transaction.
124
+ */
125
+ transaction<T>(fn: (trx: StorageAdapter) => Promise<T>): Promise<T>;
126
+ /**
127
+ * Begins a transaction. sql.js executes all statements in implicit transactions,
128
+ * so this is a no-op for compatibility.
129
+ */
130
+ beginTransaction(): Promise<void>;
131
+ /**
132
+ * Commits the current transaction.
133
+ */
134
+ commit(): Promise<void>;
135
+ /**
136
+ * Rolls back the current transaction.
137
+ */
138
+ rollback(): Promise<void>;
139
+ /**
140
+ * Closes the database and persists final state to IndexedDB.
141
+ */
142
+ close(): Promise<void>;
143
+ /**
144
+ * Exports the database as a Uint8Array (SQLite file format).
145
+ * Can be downloaded or stored externally.
146
+ * @returns SQLite database file as binary
147
+ */
148
+ exportDatabase(): Uint8Array;
149
+ /**
150
+ * Imports a database from a Uint8Array (SQLite file).
151
+ * Replaces the current database.
152
+ * @param data SQLite database file
153
+ */
154
+ importDatabase(data: Uint8Array): Promise<void>;
155
+ /**
156
+ * Opens or creates the IndexedDB database.
157
+ */
158
+ private openIndexedDb;
159
+ /**
160
+ * Loads the SQLite database from IndexedDB.
161
+ * @returns Binary database or null if not found
162
+ */
163
+ private loadFromIndexedDb;
164
+ /**
165
+ * Saves the SQLite database to IndexedDB.
166
+ */
167
+ private saveToIndexedDb;
168
+ /**
169
+ * Persists to IndexedDB if auto-save is enabled.
170
+ */
171
+ private persistIfNeeded;
172
+ /**
173
+ * Starts auto-save interval.
174
+ */
175
+ private startAutoSave;
176
+ /**
177
+ * Ensures the database is open.
178
+ */
179
+ private ensureOpen;
180
+ /**
181
+ * Normalizes last insert row ID to string or number.
182
+ */
183
+ private normaliseRowId;
184
+ /**
185
+ * Prepares a SQL statement for execution.
186
+ */
187
+ private prepareInternal;
188
+ }
189
+ //# sourceMappingURL=indexedDbAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexedDbAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/indexedDbAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAIH,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,mBAAmB,CAAC;AAG3B;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uEAAuE;IACvE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uDAAuD;IAEvD,WAAW,CAAC,EAAE,GAAG,CAAC;CACnB;AAID;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,gBAAiB,YAAW,cAAc;IACrD,SAAgB,IAAI,eAAe;IACnC,SAAgB,YAAY,EAAE,WAAW,CAAC,iBAAiB,CAAC,CAA4C;IAExG,OAAO,CAAC,GAAG,CAA4B;IACvC,OAAO,CAAC,EAAE,CAA8B;IACxC,OAAO,CAAC,GAAG,CAA4B;IACvC,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,KAAK,CAAS;IAEtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IAExC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAM;gBAEtB,OAAO,GAAE,uBAA4B;IAQjD;;;OAGG;IACU,IAAI,CAAC,QAAQ,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAyB/D;;;;;OAKG;IACU,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA4B9F;;;;;OAKG;IACU,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAKzF;;;;;OAKG;IACU,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IA8BpF;;OAEG;IACU,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOhD;;OAEG;IACU,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAehF;;;OAGG;IACU,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9C;;OAEG;IACU,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAMpC;;OAEG;IACU,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAItC;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBnC;;;;OAIG;IACI,cAAc,IAAI,UAAU;IAKnC;;;;OAIG;IACU,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ5D;;OAEG;IACH,OAAO,CAAC,aAAa;IAgBrB;;;OAGG;YACW,iBAAiB;IAa/B;;OAEG;YACW,eAAe;IAkB7B;;OAEG;YACW,eAAe;IAO7B;;OAEG;IACH,OAAO,CAAC,aAAa;IAQrB;;OAEG;IACH,OAAO,CAAC,UAAU;IAMlB;;OAEG;IACH,OAAO,CAAC,cAAc;IAUtB;;OAEG;IACH,OAAO,CAAC,eAAe;CAIxB"}