@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 +109 -14
- package/dist/adapters/__tests__/indexedDbAdapter.spec.d.ts +2 -0
- package/dist/adapters/__tests__/indexedDbAdapter.spec.d.ts.map +1 -0
- package/dist/adapters/__tests__/indexedDbAdapter.spec.js +137 -0
- package/dist/adapters/__tests__/indexedDbAdapter.spec.js.map +1 -0
- package/dist/adapters/betterSqliteAdapter.d.ts.map +1 -1
- package/dist/adapters/betterSqliteAdapter.js +15 -3
- package/dist/adapters/betterSqliteAdapter.js.map +1 -1
- package/dist/adapters/indexedDbAdapter.d.ts +189 -0
- package/dist/adapters/indexedDbAdapter.d.ts.map +1 -0
- package/dist/adapters/indexedDbAdapter.js +367 -0
- package/dist/adapters/indexedDbAdapter.js.map +1 -0
- package/dist/agentos/AgentOSStorageAdapter.d.ts +320 -0
- package/dist/agentos/AgentOSStorageAdapter.d.ts.map +1 -0
- package/dist/agentos/AgentOSStorageAdapter.js +406 -0
- package/dist/agentos/AgentOSStorageAdapter.js.map +1 -0
- package/dist/agentos/index.d.ts +7 -0
- package/dist/agentos/index.d.ts.map +1 -0
- package/dist/agentos/index.js +7 -0
- package/dist/agentos/index.js.map +1 -0
- package/dist/core/contracts/context.d.ts +1 -1
- package/dist/core/contracts/context.d.ts.map +1 -1
- package/dist/core/resolver.d.ts.map +1 -1
- package/dist/core/resolver.js +19 -3
- package/dist/core/resolver.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/package.json +12 -2
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
|
-
|
|
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: ['
|
|
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
|
-
|
|
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 @@
|
|
|
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;
|
|
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
|
-
|
|
160
|
-
|
|
161
|
-
|
|
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"}
|