leangraph 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +198 -118
- 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 +20 -37
- 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 +16 -3
package/README.md
CHANGED
|
@@ -8,40 +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
|
-
##
|
|
12
|
-
|
|
13
|
-
```bash
|
|
14
|
-
npm install leangraph
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
### Native Dependencies
|
|
11
|
+
## Why LeanGraph?
|
|
18
12
|
|
|
19
|
-
|
|
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 |
|
|
20
23
|
|
|
21
|
-
|
|
22
|
-
-
|
|
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
|
|
23
29
|
|
|
24
|
-
|
|
30
|
+
## Installation
|
|
25
31
|
|
|
26
32
|
```bash
|
|
27
|
-
npm install leangraph
|
|
33
|
+
npm install leangraph
|
|
34
|
+
npm install -D better-sqlite3
|
|
28
35
|
```
|
|
29
36
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
```bash
|
|
33
|
-
npm install leangraph better-sqlite3
|
|
34
|
-
```
|
|
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.
|
|
35
38
|
|
|
36
39
|
## Quick Start
|
|
37
40
|
|
|
38
41
|
```typescript
|
|
39
|
-
import {
|
|
42
|
+
import { LeanGraph } from 'leangraph';
|
|
40
43
|
|
|
41
|
-
const db = await
|
|
42
|
-
project: 'myapp', // or process.env.GRAPHDB_PROJECT
|
|
43
|
-
apiKey: 'lg_xxx', // or process.env.GRAPHDB_API_KEY
|
|
44
|
-
});
|
|
44
|
+
const db = await LeanGraph({ project: 'myapp' });
|
|
45
45
|
|
|
46
46
|
// Create nodes and relationships
|
|
47
47
|
await db.execute(`
|
|
@@ -55,89 +55,77 @@ console.log(users); // [{ name: 'Alice' }, { name: 'Bob' }]
|
|
|
55
55
|
db.close();
|
|
56
56
|
```
|
|
57
57
|
|
|
58
|
-
##
|
|
58
|
+
## Modes
|
|
59
59
|
|
|
60
|
-
|
|
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) |
|
|
61
65
|
|
|
62
|
-
|
|
63
|
-
|------|-----------|----------|
|
|
64
|
-
| **Development** | `development` | Uses local SQLite database. `url` and `apiKey` are ignored. |
|
|
65
|
-
| **Production** | `production` (or unset) | Connects to remote server via HTTP. `url` and `apiKey` are required. |
|
|
66
|
+
### Local Mode (default)
|
|
66
67
|
|
|
67
|
-
|
|
68
|
+
Uses an embedded SQLite database. No server required.
|
|
68
69
|
|
|
69
70
|
```typescript
|
|
70
|
-
|
|
71
|
-
|
|
71
|
+
const db = await LeanGraph({ project: 'myapp' });
|
|
72
|
+
// Data persists at ./data/myapp.db
|
|
72
73
|
```
|
|
73
74
|
|
|
74
|
-
###
|
|
75
|
+
### Remote Mode
|
|
75
76
|
|
|
76
|
-
|
|
77
|
-
- A local SQLite database is created automatically
|
|
78
|
-
- No server setup required
|
|
79
|
-
- `url` and `apiKey` parameters are ignored
|
|
80
|
-
- Data persists at `./data/{env}/{project}.db` by default
|
|
77
|
+
Your code can stay identical for local development and production. Just configure environment variables:
|
|
81
78
|
|
|
79
|
+
**.env**
|
|
82
80
|
```bash
|
|
83
|
-
|
|
84
|
-
|
|
81
|
+
LEANGRAPH_MODE=remote
|
|
82
|
+
LEANGRAPH_API_KEY=lg_xxx
|
|
85
83
|
```
|
|
86
84
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
- Connects to a remote GraphDB server via HTTP
|
|
91
|
-
- `url` and `apiKey` are required
|
|
92
|
-
|
|
93
|
-
```bash
|
|
94
|
-
# Run your app in production mode
|
|
95
|
-
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' });
|
|
96
88
|
```
|
|
97
89
|
|
|
98
|
-
|
|
90
|
+
When `LEANGRAPH_MODE=remote` is set, LeanGraph automatically connects via HTTP instead of embedded LeanGraph.
|
|
99
91
|
|
|
100
|
-
|
|
101
|
-
|--------|------|----------|---------|-------------|
|
|
102
|
-
| `url` | `string` | No | `GRAPHDB_URL` or `https://leangraph.io` | Base URL of the GraphDB server (production only) |
|
|
103
|
-
| `project` | `string` | Yes | `GRAPHDB_PROJECT` | Project name |
|
|
104
|
-
| `apiKey` | `string` | No | `GRAPHDB_API_KEY` | API key for authentication (production only) |
|
|
105
|
-
| `env` | `string` | No | `NODE_ENV` or `production` | Environment (determines database isolation) |
|
|
106
|
-
| `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.
|
|
107
93
|
|
|
108
|
-
###
|
|
94
|
+
### Test Mode
|
|
109
95
|
|
|
110
|
-
|
|
111
|
-
```typescript
|
|
112
|
-
const db = await GraphDB({
|
|
113
|
-
project: 'myapp', // or process.env.GRAPHDB_PROJECT
|
|
114
|
-
apiKey: 'lg_xxx', // or process.env.GRAPHDB_API_KEY
|
|
115
|
-
url: 'https://my-server', // or process.env.GRAPHDB_URL (default: leangraph.io)
|
|
116
|
-
});
|
|
117
|
-
```
|
|
96
|
+
Uses an in-memory SQLite database that resets when the process exits.
|
|
118
97
|
|
|
119
|
-
**Development** (when `NODE_ENV=development`):
|
|
120
98
|
```typescript
|
|
121
|
-
const db = await
|
|
122
|
-
project: 'myapp', // or process.env.GRAPHDB_PROJECT
|
|
123
|
-
dataPath: './local-data', // or process.env.GRAPHDB_DATA_PATH (default: ./data)
|
|
124
|
-
});
|
|
125
|
-
// url and apiKey are ignored - uses local SQLite
|
|
99
|
+
const db = await LeanGraph({ mode: 'test', project: 'myapp' });
|
|
126
100
|
```
|
|
127
101
|
|
|
128
|
-
|
|
102
|
+
## Configuration
|
|
103
|
+
|
|
129
104
|
```typescript
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
105
|
+
interface LeanGraphOptions {
|
|
106
|
+
mode?: "local" | "remote" | "test";
|
|
107
|
+
project?: string;
|
|
108
|
+
url?: string;
|
|
109
|
+
apiKey?: string;
|
|
110
|
+
dataPath?: string;
|
|
111
|
+
}
|
|
134
112
|
```
|
|
135
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
|
+
|
|
136
124
|
## API Reference
|
|
137
125
|
|
|
138
|
-
### `
|
|
126
|
+
### `LeanGraph(options): Promise<LeanGraphClient>`
|
|
139
127
|
|
|
140
|
-
Create a new
|
|
128
|
+
Create a new LeanGraph client. Returns a promise that resolves to a client instance.
|
|
141
129
|
|
|
142
130
|
### `db.query<T>(cypher, params?): Promise<T[]>`
|
|
143
131
|
|
|
@@ -173,66 +161,173 @@ console.log(response.meta.time_ms); // Query execution time in ms
|
|
|
173
161
|
console.log(response.data); // Array of results
|
|
174
162
|
```
|
|
175
163
|
|
|
176
|
-
###
|
|
164
|
+
### Convenience Methods
|
|
177
165
|
|
|
178
|
-
|
|
166
|
+
Thin wrappers around common Cypher operations:
|
|
179
167
|
|
|
180
168
|
```typescript
|
|
181
|
-
|
|
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>
|
|
182
174
|
```
|
|
183
175
|
|
|
184
|
-
### `db.
|
|
176
|
+
### `db.health(): Promise<{ status: string; timestamp: string }>`
|
|
177
|
+
|
|
178
|
+
Check server health. In development mode, always returns `{ status: 'ok', ... }`.
|
|
179
|
+
|
|
180
|
+
### `db.close(): void`
|
|
185
181
|
|
|
186
|
-
|
|
182
|
+
Close the client and release resources. **Always call this when done.**
|
|
187
183
|
|
|
188
184
|
```typescript
|
|
189
|
-
const
|
|
190
|
-
|
|
191
|
-
|
|
185
|
+
const db = await LeanGraph({ ... });
|
|
186
|
+
try {
|
|
187
|
+
// ... use db
|
|
188
|
+
} finally {
|
|
189
|
+
db.close();
|
|
192
190
|
}
|
|
193
191
|
```
|
|
194
192
|
|
|
195
|
-
|
|
193
|
+
## Common Patterns
|
|
196
194
|
|
|
197
|
-
|
|
195
|
+
### CRUD Operations
|
|
198
196
|
|
|
199
197
|
```typescript
|
|
200
|
-
|
|
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
|
+
);
|
|
201
221
|
```
|
|
202
222
|
|
|
203
|
-
###
|
|
223
|
+
### Parameterized Queries
|
|
204
224
|
|
|
205
|
-
|
|
225
|
+
Always use parameters for user input:
|
|
206
226
|
|
|
207
227
|
```typescript
|
|
208
|
-
|
|
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`);
|
|
209
236
|
```
|
|
210
237
|
|
|
211
|
-
###
|
|
238
|
+
### Typed Results
|
|
239
|
+
|
|
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
|
+
```
|
|
212
252
|
|
|
213
|
-
|
|
253
|
+
### Relationships
|
|
214
254
|
|
|
215
255
|
```typescript
|
|
216
|
-
|
|
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' });
|
|
217
273
|
```
|
|
218
274
|
|
|
219
|
-
###
|
|
275
|
+
### Upsert with MERGE
|
|
220
276
|
|
|
221
|
-
|
|
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
|
+
```
|
|
222
284
|
|
|
223
|
-
###
|
|
285
|
+
### Batch Insert with UNWIND
|
|
224
286
|
|
|
225
|
-
|
|
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
|
|
226
300
|
|
|
227
301
|
```typescript
|
|
228
|
-
|
|
302
|
+
import { LeanGraph, LeanGraphError } from 'leangraph';
|
|
303
|
+
|
|
229
304
|
try {
|
|
230
|
-
//
|
|
231
|
-
}
|
|
232
|
-
|
|
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
|
+
}
|
|
233
311
|
}
|
|
234
312
|
```
|
|
235
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
|
+
|
|
236
331
|
## Cypher Quick Reference
|
|
237
332
|
|
|
238
333
|
### Supported Clauses
|
|
@@ -363,22 +458,7 @@ leangraph apikey list
|
|
|
363
458
|
leangraph apikey remove <prefix>
|
|
364
459
|
```
|
|
365
460
|
|
|
366
|
-
## Why LeanGraph?
|
|
367
461
|
|
|
368
|
-
| Feature | LeanGraph | Neo4j |
|
|
369
|
-
|---------|-----------------|-------|
|
|
370
|
-
| **Deployment** | Single package, zero config | Complex setup, JVM required |
|
|
371
|
-
| **Development** | Local SQLite, no server needed | Server required |
|
|
372
|
-
| **Backup** | Just copy the SQLite file | Enterprise license required |
|
|
373
|
-
| **Resource usage** | ~50MB RAM | 1GB+ RAM minimum |
|
|
374
|
-
| **Cypher support** | Full (Neo4j 3.5 parity) | Full |
|
|
375
|
-
| **Cost** | Free, MIT license | Free tier limited |
|
|
376
|
-
|
|
377
|
-
LeanGraph is ideal for:
|
|
378
|
-
- Applications needing graph queries without ops burden
|
|
379
|
-
- Projects that outgrow JSON but don't need a full graph database
|
|
380
|
-
- Self-hosted deployments where simplicity matters
|
|
381
|
-
- Development and testing with instant local databases
|
|
382
462
|
|
|
383
463
|
## Advanced Usage
|
|
384
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"}
|