leangraph 1.0.1 → 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/README.md +198 -111
- package/dist/auth.d.ts +1 -4
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +3 -13
- package/dist/auth.js.map +1 -1
- package/dist/backup.d.ts +1 -3
- package/dist/backup.d.ts.map +1 -1
- package/dist/backup.js +10 -15
- package/dist/backup.js.map +1 -1
- package/dist/cli-helpers.d.ts +2 -3
- package/dist/cli-helpers.d.ts.map +1 -1
- package/dist/cli-helpers.js +11 -30
- package/dist/cli-helpers.js.map +1 -1
- package/dist/cli.js +82 -129
- package/dist/cli.js.map +1 -1
- package/dist/db.d.ts +8 -2
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +34 -8
- package/dist/db.js.map +1 -1
- package/dist/executor.d.ts +6 -0
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +92 -22
- package/dist/executor.js.map +1 -1
- package/dist/index.d.ts +8 -34
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -38
- package/dist/index.js.map +1 -1
- package/dist/local.d.ts +3 -3
- package/dist/local.d.ts.map +1 -1
- package/dist/local.js +13 -15
- package/dist/local.js.map +1 -1
- package/dist/remote.d.ts +3 -3
- package/dist/remote.d.ts.map +1 -1
- package/dist/remote.js +8 -10
- package/dist/remote.js.map +1 -1
- package/dist/routes.d.ts +0 -1
- package/dist/routes.d.ts.map +1 -1
- package/dist/routes.js +12 -39
- package/dist/routes.js.map +1 -1
- package/dist/server.js +1 -1
- package/dist/server.js.map +1 -1
- package/dist/translator.d.ts.map +1 -1
- package/dist/translator.js +85 -32
- package/dist/translator.js.map +1 -1
- package/dist/types.d.ts +24 -26
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -2
- package/dist/types.js.map +1 -1
- package/package.json +8 -2
package/README.md
CHANGED
|
@@ -8,33 +8,40 @@ A lightweight, embeddable graph database with **full Cypher query support**, pow
|
|
|
8
8
|
|
|
9
9
|
> **100% openCypher TCK Compliance** — LeanGraph passes all 2,684 test scenarios from the openCypher Technology Compatibility Kit (Neo4j 3.5 baseline). Every Cypher feature that Neo4j 3.5 supports, LeanGraph supports.
|
|
10
10
|
|
|
11
|
-
##
|
|
11
|
+
## Why LeanGraph?
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
| Feature | LeanGraph | Neo4j |
|
|
14
|
+
|---------|-----------|-------|
|
|
15
|
+
| **Startup time** | Instant | 30+ seconds |
|
|
16
|
+
| **Memory** | ~50MB | 1GB+ minimum |
|
|
17
|
+
| **Deployment** | Single npm package | JVM + complex setup |
|
|
18
|
+
| **Docker required** | No | Typically yes |
|
|
19
|
+
| **Works offline** | Yes | Server required |
|
|
20
|
+
| **Backup** | Copy the SQLite file | Enterprise license |
|
|
21
|
+
| **Cypher support** | Full (Neo4j 3.5 parity) | Full |
|
|
22
|
+
| **Cost** | Free, MIT license | Free tier limited |
|
|
14
23
|
|
|
15
|
-
|
|
24
|
+
LeanGraph is ideal for:
|
|
25
|
+
- Production graph workloads with zero infrastructure
|
|
26
|
+
- Neo4j-level queries without Neo4j-level complexity
|
|
27
|
+
- Self-hosted apps where simplicity is a feature
|
|
28
|
+
- Instant local databases for development and testing
|
|
29
|
+
|
|
30
|
+
## Installation
|
|
16
31
|
|
|
17
32
|
```bash
|
|
18
33
|
npm install leangraph
|
|
34
|
+
npm install -D better-sqlite3
|
|
19
35
|
```
|
|
20
36
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
For local embedded mode with SQLite, also install `better-sqlite3`:
|
|
24
|
-
|
|
25
|
-
```bash
|
|
26
|
-
npm install leangraph better-sqlite3
|
|
27
|
-
```
|
|
37
|
+
`better-sqlite3` is only needed for local and test modes. Production deployments using remote mode don't require it, keeping your `node_modules` lean and avoiding native rebuilds.
|
|
28
38
|
|
|
29
39
|
## Quick Start
|
|
30
40
|
|
|
31
41
|
```typescript
|
|
32
|
-
import {
|
|
42
|
+
import { LeanGraph } from 'leangraph';
|
|
33
43
|
|
|
34
|
-
const db = await
|
|
35
|
-
project: 'myapp', // or process.env.GRAPHDB_PROJECT
|
|
36
|
-
apiKey: 'lg_xxx', // or process.env.GRAPHDB_API_KEY
|
|
37
|
-
});
|
|
44
|
+
const db = await LeanGraph({ project: 'myapp' });
|
|
38
45
|
|
|
39
46
|
// Create nodes and relationships
|
|
40
47
|
await db.execute(`
|
|
@@ -48,89 +55,77 @@ console.log(users); // [{ name: 'Alice' }, { name: 'Bob' }]
|
|
|
48
55
|
db.close();
|
|
49
56
|
```
|
|
50
57
|
|
|
51
|
-
##
|
|
58
|
+
## Modes
|
|
52
59
|
|
|
53
|
-
|
|
60
|
+
| Mode | `LEANGRAPH_MODE` | Behavior |
|
|
61
|
+
|------|------------------|----------|
|
|
62
|
+
| **Local** | unset or `local` | Embedded SQLite at `./data/{project}.db` |
|
|
63
|
+
| **Remote** | `remote` | HTTP connection to LeanGraph server |
|
|
64
|
+
| **Test** | `test` | In-memory SQLite (resets on restart) |
|
|
54
65
|
|
|
55
|
-
|
|
56
|
-
|------|-----------|----------|
|
|
57
|
-
| **Development** | `development` | Uses local SQLite database. `url` and `apiKey` are ignored. |
|
|
58
|
-
| **Production** | `production` (or unset) | Connects to remote server via HTTP. `url` and `apiKey` are required. |
|
|
66
|
+
### Local Mode (default)
|
|
59
67
|
|
|
60
|
-
|
|
68
|
+
Uses an embedded SQLite database. No server required.
|
|
61
69
|
|
|
62
70
|
```typescript
|
|
63
|
-
|
|
64
|
-
|
|
71
|
+
const db = await LeanGraph({ project: 'myapp' });
|
|
72
|
+
// Data persists at ./data/myapp.db
|
|
65
73
|
```
|
|
66
74
|
|
|
67
|
-
###
|
|
75
|
+
### Remote Mode
|
|
68
76
|
|
|
69
|
-
|
|
70
|
-
- A local SQLite database is created automatically
|
|
71
|
-
- No server setup required
|
|
72
|
-
- `url` and `apiKey` parameters are ignored
|
|
73
|
-
- Data persists at `./data/{env}/{project}.db` by default
|
|
77
|
+
Your code can stay identical for local development and production. Just configure environment variables:
|
|
74
78
|
|
|
79
|
+
**.env**
|
|
75
80
|
```bash
|
|
76
|
-
|
|
77
|
-
|
|
81
|
+
LEANGRAPH_MODE=remote
|
|
82
|
+
LEANGRAPH_API_KEY=lg_xxx
|
|
78
83
|
```
|
|
79
84
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
- Connects to a remote GraphDB server via HTTP
|
|
84
|
-
- `url` and `apiKey` are required
|
|
85
|
-
|
|
86
|
-
```bash
|
|
87
|
-
# Run your app in production mode
|
|
88
|
-
NODE_ENV=production GRAPHDB_API_KEY=xxx node app.js
|
|
85
|
+
```typescript
|
|
86
|
+
// Same code works locally (dev) and remotely (production)
|
|
87
|
+
const db = await LeanGraph({ project: 'myapp' });
|
|
89
88
|
```
|
|
90
89
|
|
|
91
|
-
|
|
90
|
+
When `LEANGRAPH_MODE=remote` is set, LeanGraph automatically connects via HTTP instead of embedded LeanGraph.
|
|
92
91
|
|
|
93
|
-
|
|
94
|
-
|--------|------|----------|---------|-------------|
|
|
95
|
-
| `url` | `string` | No | `GRAPHDB_URL` or `https://leangraph.io` | Base URL of the GraphDB server (production only) |
|
|
96
|
-
| `project` | `string` | Yes | `GRAPHDB_PROJECT` | Project name |
|
|
97
|
-
| `apiKey` | `string` | No | `GRAPHDB_API_KEY` | API key for authentication (production only) |
|
|
98
|
-
| `env` | `string` | No | `NODE_ENV` or `production` | Environment (determines database isolation) |
|
|
99
|
-
| `dataPath` | `string` | No | `GRAPHDB_DATA_PATH` or `./data` | Path for local data storage (development only). Use `':memory:'` for in-memory database |
|
|
92
|
+
> **Tip:** Remote mode doesn't use `better-sqlite3`, so installing it as a dev dependency speeds up production deploys by skipping native module compilation.
|
|
100
93
|
|
|
101
|
-
###
|
|
94
|
+
### Test Mode
|
|
102
95
|
|
|
103
|
-
|
|
104
|
-
```typescript
|
|
105
|
-
const db = await GraphDB({
|
|
106
|
-
project: 'myapp', // or process.env.GRAPHDB_PROJECT
|
|
107
|
-
apiKey: 'lg_xxx', // or process.env.GRAPHDB_API_KEY
|
|
108
|
-
url: 'https://my-server', // or process.env.GRAPHDB_URL (default: leangraph.io)
|
|
109
|
-
});
|
|
110
|
-
```
|
|
96
|
+
Uses an in-memory SQLite database that resets when the process exits.
|
|
111
97
|
|
|
112
|
-
**Development** (when `NODE_ENV=development`):
|
|
113
98
|
```typescript
|
|
114
|
-
const db = await
|
|
115
|
-
project: 'myapp', // or process.env.GRAPHDB_PROJECT
|
|
116
|
-
dataPath: './local-data', // or process.env.GRAPHDB_DATA_PATH (default: ./data)
|
|
117
|
-
});
|
|
118
|
-
// url and apiKey are ignored - uses local SQLite
|
|
99
|
+
const db = await LeanGraph({ mode: 'test', project: 'myapp' });
|
|
119
100
|
```
|
|
120
101
|
|
|
121
|
-
|
|
102
|
+
## Configuration
|
|
103
|
+
|
|
122
104
|
```typescript
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
105
|
+
interface LeanGraphOptions {
|
|
106
|
+
mode?: "local" | "remote" | "test";
|
|
107
|
+
project?: string;
|
|
108
|
+
url?: string;
|
|
109
|
+
apiKey?: string;
|
|
110
|
+
dataPath?: string;
|
|
111
|
+
}
|
|
127
112
|
```
|
|
128
113
|
|
|
114
|
+
| Option | Environment Variable | Default | Description |
|
|
115
|
+
|--------|---------------------|---------|-------------|
|
|
116
|
+
| `mode` | `LEANGRAPH_MODE` | `"local"` | `local`, `remote`, or `test` |
|
|
117
|
+
| `project` | `LEANGRAPH_PROJECT` | — | Project name (required) |
|
|
118
|
+
| `url` | `LEANGRAPH_URL` | `"https://leangraph.io"` | Server URL (remote mode) |
|
|
119
|
+
| `apiKey` | `LEANGRAPH_API_KEY` | — | API key (remote mode) |
|
|
120
|
+
| `dataPath` | `LEANGRAPH_DATA_PATH` | `"./data"` | Data directory (local mode) |
|
|
121
|
+
|
|
122
|
+
Options passed to `LeanGraph()` take precedence over environment variables.
|
|
123
|
+
|
|
129
124
|
## API Reference
|
|
130
125
|
|
|
131
|
-
### `
|
|
126
|
+
### `LeanGraph(options): Promise<LeanGraphClient>`
|
|
132
127
|
|
|
133
|
-
Create a new
|
|
128
|
+
Create a new LeanGraph client. Returns a promise that resolves to a client instance.
|
|
134
129
|
|
|
135
130
|
### `db.query<T>(cypher, params?): Promise<T[]>`
|
|
136
131
|
|
|
@@ -166,66 +161,173 @@ console.log(response.meta.time_ms); // Query execution time in ms
|
|
|
166
161
|
console.log(response.data); // Array of results
|
|
167
162
|
```
|
|
168
163
|
|
|
169
|
-
###
|
|
164
|
+
### Convenience Methods
|
|
170
165
|
|
|
171
|
-
|
|
166
|
+
Thin wrappers around common Cypher operations:
|
|
172
167
|
|
|
173
168
|
```typescript
|
|
174
|
-
|
|
169
|
+
db.createNode(label, properties?): Promise<string>
|
|
170
|
+
db.getNode(label, filter): Promise<Record<string, unknown> | null>
|
|
171
|
+
db.updateNode(id, properties): Promise<void>
|
|
172
|
+
db.deleteNode(id): Promise<void>
|
|
173
|
+
db.createEdge(sourceId, type, targetId, properties?): Promise<void>
|
|
175
174
|
```
|
|
176
175
|
|
|
177
|
-
### `db.
|
|
176
|
+
### `db.health(): Promise<{ status: string; timestamp: string }>`
|
|
178
177
|
|
|
179
|
-
|
|
178
|
+
Check server health. In development mode, always returns `{ status: 'ok', ... }`.
|
|
179
|
+
|
|
180
|
+
### `db.close(): void`
|
|
181
|
+
|
|
182
|
+
Close the client and release resources. **Always call this when done.**
|
|
180
183
|
|
|
181
184
|
```typescript
|
|
182
|
-
const
|
|
183
|
-
|
|
184
|
-
|
|
185
|
+
const db = await LeanGraph({ ... });
|
|
186
|
+
try {
|
|
187
|
+
// ... use db
|
|
188
|
+
} finally {
|
|
189
|
+
db.close();
|
|
185
190
|
}
|
|
186
191
|
```
|
|
187
192
|
|
|
188
|
-
|
|
193
|
+
## Common Patterns
|
|
189
194
|
|
|
190
|
-
|
|
195
|
+
### CRUD Operations
|
|
191
196
|
|
|
192
197
|
```typescript
|
|
193
|
-
|
|
198
|
+
// Create
|
|
199
|
+
await db.execute(
|
|
200
|
+
'CREATE (u:User {name: $name, email: $email})',
|
|
201
|
+
{ name: 'Alice', email: 'alice@example.com' }
|
|
202
|
+
);
|
|
203
|
+
|
|
204
|
+
// Read
|
|
205
|
+
const [user] = await db.query<{ name: string; email: string }>(
|
|
206
|
+
'MATCH (u:User {email: $email}) RETURN u.name AS name, u.email AS email',
|
|
207
|
+
{ email: 'alice@example.com' }
|
|
208
|
+
);
|
|
209
|
+
|
|
210
|
+
// Update
|
|
211
|
+
await db.execute(
|
|
212
|
+
'MATCH (u:User {email: $email}) SET u.verified = true',
|
|
213
|
+
{ email: 'alice@example.com' }
|
|
214
|
+
);
|
|
215
|
+
|
|
216
|
+
// Delete
|
|
217
|
+
await db.execute(
|
|
218
|
+
'MATCH (u:User {email: $email}) DETACH DELETE u',
|
|
219
|
+
{ email: 'alice@example.com' }
|
|
220
|
+
);
|
|
194
221
|
```
|
|
195
222
|
|
|
196
|
-
###
|
|
223
|
+
### Parameterized Queries
|
|
197
224
|
|
|
198
|
-
|
|
225
|
+
Always use parameters for user input:
|
|
199
226
|
|
|
200
227
|
```typescript
|
|
201
|
-
|
|
228
|
+
// Good - parameterized
|
|
229
|
+
const users = await db.query(
|
|
230
|
+
'MATCH (u:User) WHERE u.email = $email RETURN u',
|
|
231
|
+
{ email: userInput }
|
|
232
|
+
);
|
|
233
|
+
|
|
234
|
+
// Bad - string interpolation (injection risk)
|
|
235
|
+
const users = await db.query(`MATCH (u:User) WHERE u.email = '${userInput}' RETURN u`);
|
|
202
236
|
```
|
|
203
237
|
|
|
204
|
-
###
|
|
238
|
+
### Typed Results
|
|
205
239
|
|
|
206
|
-
|
|
240
|
+
```typescript
|
|
241
|
+
interface User {
|
|
242
|
+
name: string;
|
|
243
|
+
email: string;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
const users = await db.query<User>(
|
|
247
|
+
'MATCH (u:User) RETURN u.name AS name, u.email AS email'
|
|
248
|
+
);
|
|
249
|
+
|
|
250
|
+
users[0].name; // TypeScript knows this is string
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
### Relationships
|
|
207
254
|
|
|
208
255
|
```typescript
|
|
209
|
-
|
|
256
|
+
// Create a relationship
|
|
257
|
+
await db.execute(`
|
|
258
|
+
MATCH (a:User {name: $from}), (b:User {name: $to})
|
|
259
|
+
CREATE (a)-[:FOLLOWS {since: $since}]->(b)
|
|
260
|
+
`, { from: 'Alice', to: 'Bob', since: '2024-01-01' });
|
|
261
|
+
|
|
262
|
+
// Query relationships
|
|
263
|
+
const following = await db.query<{ name: string }>(`
|
|
264
|
+
MATCH (:User {name: $name})-[:FOLLOWS]->(friend:User)
|
|
265
|
+
RETURN friend.name AS name
|
|
266
|
+
`, { name: 'Alice' });
|
|
267
|
+
|
|
268
|
+
// Variable-length paths (1-3 hops)
|
|
269
|
+
const connections = await db.query<{ name: string }>(`
|
|
270
|
+
MATCH (:User {name: $name})-[:FOLLOWS*1..3]->(connection:User)
|
|
271
|
+
RETURN DISTINCT connection.name AS name
|
|
272
|
+
`, { name: 'Alice' });
|
|
210
273
|
```
|
|
211
274
|
|
|
212
|
-
###
|
|
275
|
+
### Upsert with MERGE
|
|
213
276
|
|
|
214
|
-
|
|
277
|
+
```typescript
|
|
278
|
+
await db.execute(`
|
|
279
|
+
MERGE (u:User {email: $email})
|
|
280
|
+
ON CREATE SET u.name = $name, u.createdAt = datetime()
|
|
281
|
+
ON MATCH SET u.lastSeen = datetime()
|
|
282
|
+
`, { email: 'alice@example.com', name: 'Alice' });
|
|
283
|
+
```
|
|
215
284
|
|
|
216
|
-
###
|
|
285
|
+
### Batch Insert with UNWIND
|
|
217
286
|
|
|
218
|
-
|
|
287
|
+
```typescript
|
|
288
|
+
const users = [
|
|
289
|
+
{ name: 'Alice', email: 'alice@example.com' },
|
|
290
|
+
{ name: 'Bob', email: 'bob@example.com' },
|
|
291
|
+
];
|
|
292
|
+
|
|
293
|
+
await db.execute(`
|
|
294
|
+
UNWIND $users AS data
|
|
295
|
+
CREATE (u:User {name: data.name, email: data.email})
|
|
296
|
+
`, { users });
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
### Error Handling
|
|
219
300
|
|
|
220
301
|
```typescript
|
|
221
|
-
|
|
302
|
+
import { LeanGraph, LeanGraphError } from 'leangraph';
|
|
303
|
+
|
|
222
304
|
try {
|
|
223
|
-
//
|
|
224
|
-
}
|
|
225
|
-
|
|
305
|
+
await db.query('MATCH (n:User RETURN n'); // syntax error
|
|
306
|
+
} catch (err) {
|
|
307
|
+
if (err instanceof LeanGraphError) {
|
|
308
|
+
console.error(`Query failed: ${err.message}`);
|
|
309
|
+
console.error(`Position: line ${err.line}, column ${err.column}`);
|
|
310
|
+
}
|
|
226
311
|
}
|
|
227
312
|
```
|
|
228
313
|
|
|
314
|
+
### Testing
|
|
315
|
+
|
|
316
|
+
Use test mode for fast, isolated tests:
|
|
317
|
+
|
|
318
|
+
```typescript
|
|
319
|
+
import { LeanGraph } from 'leangraph';
|
|
320
|
+
|
|
321
|
+
const db = await LeanGraph({ mode: 'test', project: 'test' });
|
|
322
|
+
|
|
323
|
+
// Tests run against in-memory database
|
|
324
|
+
await db.execute('CREATE (u:User {name: $name})', { name: 'Test' });
|
|
325
|
+
const [user] = await db.query('MATCH (u:User) RETURN u.name AS name');
|
|
326
|
+
assert(user.name === 'Test');
|
|
327
|
+
|
|
328
|
+
db.close(); // In-memory DB is discarded
|
|
329
|
+
```
|
|
330
|
+
|
|
229
331
|
## Cypher Quick Reference
|
|
230
332
|
|
|
231
333
|
### Supported Clauses
|
|
@@ -356,22 +458,7 @@ leangraph apikey list
|
|
|
356
458
|
leangraph apikey remove <prefix>
|
|
357
459
|
```
|
|
358
460
|
|
|
359
|
-
## Why LeanGraph?
|
|
360
|
-
|
|
361
|
-
| Feature | LeanGraph | Neo4j |
|
|
362
|
-
|---------|-----------------|-------|
|
|
363
|
-
| **Deployment** | Single package, zero config | Complex setup, JVM required |
|
|
364
|
-
| **Development** | Local SQLite, no server needed | Server required |
|
|
365
|
-
| **Backup** | Just copy the SQLite file | Enterprise license required |
|
|
366
|
-
| **Resource usage** | ~50MB RAM | 1GB+ RAM minimum |
|
|
367
|
-
| **Cypher support** | Full (Neo4j 3.5 parity) | Full |
|
|
368
|
-
| **Cost** | Free, MIT license | Free tier limited |
|
|
369
461
|
|
|
370
|
-
LeanGraph is ideal for:
|
|
371
|
-
- Applications needing graph queries without ops burden
|
|
372
|
-
- Projects that outgrow JSON but don't need a full graph database
|
|
373
|
-
- Self-hosted deployments where simplicity matters
|
|
374
|
-
- Development and testing with instant local databases
|
|
375
462
|
|
|
376
463
|
## Advanced Usage
|
|
377
464
|
|
package/dist/auth.d.ts
CHANGED
|
@@ -1,19 +1,16 @@
|
|
|
1
1
|
import { Context, Next } from "hono";
|
|
2
2
|
export interface ApiKeyConfig {
|
|
3
3
|
project?: string;
|
|
4
|
-
env?: string;
|
|
5
4
|
admin?: boolean;
|
|
6
5
|
}
|
|
7
6
|
export interface ValidationResult {
|
|
8
7
|
valid: boolean;
|
|
9
8
|
project?: string;
|
|
10
|
-
env?: string;
|
|
11
9
|
admin?: boolean;
|
|
12
10
|
}
|
|
13
11
|
export interface KeyInfo {
|
|
14
12
|
prefix: string;
|
|
15
13
|
project?: string;
|
|
16
|
-
env?: string;
|
|
17
14
|
admin?: boolean;
|
|
18
15
|
}
|
|
19
16
|
export declare class ApiKeyStore {
|
|
@@ -48,7 +45,7 @@ export declare class ApiKeyStore {
|
|
|
48
45
|
*
|
|
49
46
|
* - Skips authentication for /health endpoint
|
|
50
47
|
* - Requires Bearer token in Authorization header
|
|
51
|
-
* - Checks project
|
|
48
|
+
* - Checks project restrictions for /query endpoints
|
|
52
49
|
* - Requires admin flag for /admin endpoints
|
|
53
50
|
*/
|
|
54
51
|
export declare function authMiddleware(store: ApiKeyStore): (c: Context, next: Next) => Promise<void | (Response & import("hono").TypedResponse<{
|
package/dist/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAMrC,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAMrC,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAMD,qBAAa,WAAW;IACtB,OAAO,CAAC,IAAI,CAAwC;IAEpD;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI;IAI/C;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI5B;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB;IAcvC;;OAEG;IACH,QAAQ,IAAI,OAAO,EAAE;IAcrB;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,IAAI;CAKnD;AAMD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,IACjC,GAAG,OAAO,EAAE,MAAM,IAAI;;;;;;;;;;kBA8ErC;AAMD,wBAAgB,cAAc,IAAI,MAAM,CASvC"}
|
package/dist/auth.js
CHANGED
|
@@ -27,7 +27,6 @@ export class ApiKeyStore {
|
|
|
27
27
|
return {
|
|
28
28
|
valid: true,
|
|
29
29
|
project: config.project,
|
|
30
|
-
env: config.env,
|
|
31
30
|
admin: config.admin,
|
|
32
31
|
};
|
|
33
32
|
}
|
|
@@ -40,7 +39,6 @@ export class ApiKeyStore {
|
|
|
40
39
|
result.push({
|
|
41
40
|
prefix: key.slice(0, 4) + "...",
|
|
42
41
|
project: config.project,
|
|
43
|
-
env: config.env,
|
|
44
42
|
admin: config.admin,
|
|
45
43
|
});
|
|
46
44
|
}
|
|
@@ -69,7 +67,7 @@ export class ApiKeyStore {
|
|
|
69
67
|
*
|
|
70
68
|
* - Skips authentication for /health endpoint
|
|
71
69
|
* - Requires Bearer token in Authorization header
|
|
72
|
-
* - Checks project
|
|
70
|
+
* - Checks project restrictions for /query endpoints
|
|
73
71
|
* - Requires admin flag for /admin endpoints
|
|
74
72
|
*/
|
|
75
73
|
export function authMiddleware(store) {
|
|
@@ -109,11 +107,10 @@ export function authMiddleware(store) {
|
|
|
109
107
|
error: { message: "Admin access required for this endpoint" },
|
|
110
108
|
}, 403);
|
|
111
109
|
}
|
|
112
|
-
// Check project
|
|
110
|
+
// Check project restrictions for query endpoints
|
|
113
111
|
if (path.startsWith("/query/")) {
|
|
114
112
|
const parts = path.split("/");
|
|
115
|
-
const
|
|
116
|
-
const project = parts[3];
|
|
113
|
+
const project = parts[2];
|
|
117
114
|
// Check project restriction
|
|
118
115
|
if (validation.project && validation.project !== project) {
|
|
119
116
|
return c.json({
|
|
@@ -121,13 +118,6 @@ export function authMiddleware(store) {
|
|
|
121
118
|
error: { message: `Access denied for project: ${project}` },
|
|
122
119
|
}, 403);
|
|
123
120
|
}
|
|
124
|
-
// Check environment restriction
|
|
125
|
-
if (validation.env && validation.env !== env) {
|
|
126
|
-
return c.json({
|
|
127
|
-
success: false,
|
|
128
|
-
error: { message: `Access denied for environment: ${env}` },
|
|
129
|
-
}, 403);
|
|
130
|
-
}
|
|
131
121
|
}
|
|
132
122
|
// Store validation result in context for later use
|
|
133
123
|
c.set("auth", validation);
|
package/dist/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,uCAAuC;
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/backup.d.ts
CHANGED
|
@@ -15,7 +15,6 @@ export interface BackupStatus {
|
|
|
15
15
|
newestBackup?: string;
|
|
16
16
|
}
|
|
17
17
|
export interface BackupAllOptions {
|
|
18
|
-
includeTest?: boolean;
|
|
19
18
|
}
|
|
20
19
|
export declare class BackupManager {
|
|
21
20
|
private backupDir;
|
|
@@ -27,9 +26,8 @@ export declare class BackupManager {
|
|
|
27
26
|
backupDatabase(sourcePath: string, project: string): Promise<BackupResult>;
|
|
28
27
|
/**
|
|
29
28
|
* Backup all databases in a data directory.
|
|
30
|
-
* By default, only backs up production databases.
|
|
31
29
|
*/
|
|
32
|
-
backupAll(dataDir: string,
|
|
30
|
+
backupAll(dataDir: string, _options?: BackupAllOptions): Promise<BackupResult[]>;
|
|
33
31
|
/**
|
|
34
32
|
* List all backups for a specific project, sorted by date (newest first).
|
|
35
33
|
*/
|
package/dist/backup.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../src/backup.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;
|
|
1
|
+
{"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../src/backup.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;CAEhC;AAMD,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAS;gBAEd,SAAS,EAAE,MAAM;IAI7B;;;OAGG;IACG,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAsDhF;;OAEG;IACG,SAAS,CACb,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,gBAAqB,GAC9B,OAAO,CAAC,YAAY,EAAE,CAAC;IAmB1B;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAYtC;;;OAGG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAuB3D;;OAEG;IACH,eAAe,IAAI,YAAY;IA4C/B;;OAEG;IACH,aAAa,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY;CAqCxE"}
|
package/dist/backup.js
CHANGED
|
@@ -64,23 +64,18 @@ export class BackupManager {
|
|
|
64
64
|
}
|
|
65
65
|
/**
|
|
66
66
|
* Backup all databases in a data directory.
|
|
67
|
-
* By default, only backs up production databases.
|
|
68
67
|
*/
|
|
69
|
-
async backupAll(dataDir,
|
|
68
|
+
async backupAll(dataDir, _options = {}) {
|
|
70
69
|
const results = [];
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
const sourcePath = path.join(envPath, file);
|
|
81
|
-
const result = await this.backupDatabase(sourcePath, project);
|
|
82
|
-
results.push(result);
|
|
83
|
-
}
|
|
70
|
+
if (!fs.existsSync(dataDir)) {
|
|
71
|
+
return results;
|
|
72
|
+
}
|
|
73
|
+
const files = fs.readdirSync(dataDir).filter((f) => f.endsWith(".db"));
|
|
74
|
+
for (const file of files) {
|
|
75
|
+
const project = file.replace(".db", "");
|
|
76
|
+
const sourcePath = path.join(dataDir, file);
|
|
77
|
+
const result = await this.backupDatabase(sourcePath, project);
|
|
78
|
+
results.push(result);
|
|
84
79
|
}
|
|
85
80
|
return results;
|
|
86
81
|
}
|
package/dist/backup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../src/backup.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,oDAAoD;AAEpD,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AA4B7B,+EAA+E;AAC/E,sBAAsB;AACtB,+EAA+E;AAE/E,MAAM,OAAO,aAAa;IAChB,SAAS,CAAS;IAE1B,YAAY,SAAiB;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,cAAc,CAAC,UAAkB,EAAE,OAAe;QACtD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,sBAAsB;QACtB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO;gBACP,UAAU;gBACV,KAAK,EAAE,8BAA8B,UAAU,EAAE;aAClD,CAAC;QACJ,CAAC;QAED,iCAAiC;QACjC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;QAED,kFAAkF;QAClF,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACvE,MAAM,EAAE,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC7D,MAAM,cAAc,GAAG,GAAG,OAAO,IAAI,SAAS,IAAI,EAAE,KAAK,CAAC;QAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;QAE7D,IAAI,CAAC;YACH,6CAA6C;YAC7C,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YAE9D,uDAAuD;YACvD,MAAM,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAClC,QAAQ,CAAC,KAAK,EAAE,CAAC;YAEjB,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YACtC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAE1C,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO;gBACP,UAAU;gBACV,UAAU;gBACV,UAAU;gBACV,SAAS,EAAE,KAAK,CAAC,IAAI;aACtB,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO;gBACP,UAAU;gBACV,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACxD,CAAC;QACJ,CAAC;IACH,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../src/backup.ts"],"names":[],"mappings":"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"}
|
package/dist/cli-helpers.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export interface ApiKeyConfig {
|
|
2
2
|
project?: string;
|
|
3
|
-
env?: string;
|
|
4
3
|
admin?: boolean;
|
|
5
4
|
}
|
|
6
5
|
export declare function formatBytes(bytes: number): string;
|
|
@@ -11,7 +10,7 @@ export declare function saveApiKeys(dataPath: string, keys: Record<string, ApiKe
|
|
|
11
10
|
export declare function ensureDataDir(dataPath: string): void;
|
|
12
11
|
export declare function formatTableRow(columns: string[], row: Record<string, unknown>, widths: Record<string, number>): string;
|
|
13
12
|
export declare function calculateColumnWidths(columns: string[], rows: Record<string, unknown>[], maxWidth?: number): Record<string, number>;
|
|
14
|
-
export declare function listProjects(dataPath: string):
|
|
15
|
-
export declare function projectExists(dataPath: string, project: string
|
|
13
|
+
export declare function listProjects(dataPath: string): string[];
|
|
14
|
+
export declare function projectExists(dataPath: string, project: string): boolean;
|
|
16
15
|
export declare function getProjectKeyCount(keys: Record<string, ApiKeyConfig>, project: string): number;
|
|
17
16
|
//# sourceMappingURL=cli-helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-helpers.d.ts","sourceRoot":"","sources":["../src/cli-helpers.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,
|
|
1
|
+
{"version":3,"file":"cli-helpers.d.ts","sourceRoot":"","sources":["../src/cli-helpers.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAMD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAKhD;AAMD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAU1E;AAED,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GACjC,IAAI,CAGN;AAMD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAIpD;AAMD,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EAAE,EACjB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,MAAM,CAOR;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EAAE,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAC/B,QAAQ,GAAE,MAAW,GACpB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAoBxB;AAMD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CASvD;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAGxE;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,EAClC,OAAO,EAAE,MAAM,GACd,MAAM,CAGR"}
|