leangraph 1.1.7 → 1.1.8
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/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +3 -6
- package/dist/auth.js.map +1 -1
- package/dist/db.d.ts +3 -1
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +38 -7
- package/dist/db.js.map +1 -1
- package/dist/executor.d.ts +1 -0
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +48 -36
- package/dist/executor.js.map +1 -1
- package/dist/parser.d.ts +2 -0
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +32 -12
- package/dist/parser.js.map +1 -1
- package/dist/routes.d.ts +1 -3
- package/dist/routes.d.ts.map +1 -1
- package/dist/routes.js +147 -102
- package/dist/routes.js.map +1 -1
- package/dist/translator.d.ts.map +1 -1
- package/dist/translator.js +105 -92
- package/dist/translator.js.map +1 -1
- package/package.json +1 -1
package/dist/routes.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Hono } from "hono";
|
|
2
2
|
import { DatabaseManager } from "./db.js";
|
|
3
|
-
import { BackupManager } from "./backup.js";
|
|
4
3
|
import { ApiKeyStore } from "./auth.js";
|
|
5
4
|
export interface QueryRequest {
|
|
6
5
|
cypher: string;
|
|
@@ -9,7 +8,7 @@ export interface QueryRequest {
|
|
|
9
8
|
export interface AppContext {
|
|
10
9
|
dbManager: DatabaseManager;
|
|
11
10
|
}
|
|
12
|
-
export declare function createApp(dbManager: DatabaseManager,
|
|
11
|
+
export declare function createApp(dbManager: DatabaseManager, apiKeyStore?: ApiKeyStore): Hono;
|
|
13
12
|
export interface ServerOptions {
|
|
14
13
|
port?: number;
|
|
15
14
|
dataPath?: string;
|
|
@@ -22,7 +21,6 @@ export interface ServerOptions {
|
|
|
22
21
|
export declare function createServer(options?: ServerOptions): {
|
|
23
22
|
app: Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
|
|
24
23
|
dbManager: DatabaseManager;
|
|
25
|
-
backupManager: BackupManager | undefined;
|
|
26
24
|
apiKeyStore: ApiKeyStore | undefined;
|
|
27
25
|
port: number;
|
|
28
26
|
fetch: (request: Request, Env?: unknown, executionCtx?: import("hono").ExecutionContext) => Response | Promise<Response>;
|
package/dist/routes.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAW,MAAM,MAAM,CAAC;AAErC,OAAO,EAAE,eAAe,EAAiB,MAAM,SAAS,CAAC;AAEzD,OAAO,EAAE,WAAW,EAAkB,MAAM,WAAW,CAAC;AAMxD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,eAAe,CAAC;CAC5B;AA8FD,wBAAgB,SAAS,CACvB,SAAS,EAAE,eAAe,EAC1B,WAAW,CAAC,EAAE,WAAW,GACxB,IAAI,CA6JN;AAMD,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACjE;AAED,wBAAgB,YAAY,CAAC,OAAO,GAAE,aAAkB;;;;;;EAqBvD"}
|
package/dist/routes.js
CHANGED
|
@@ -1,14 +1,113 @@
|
|
|
1
1
|
// HTTP Routes using Hono
|
|
2
2
|
import { Hono } from "hono";
|
|
3
|
+
import { cors } from "hono/cors";
|
|
3
4
|
import { DatabaseManager } from "./db.js";
|
|
4
5
|
import { Executor } from "./executor.js";
|
|
5
|
-
import { BackupManager } from "./backup.js";
|
|
6
6
|
import { ApiKeyStore, authMiddleware } from "./auth.js";
|
|
7
7
|
// ============================================================================
|
|
8
|
+
// Security: CORS Configuration
|
|
9
|
+
// ============================================================================
|
|
10
|
+
/**
|
|
11
|
+
* Default CORS configuration - restrictive by default.
|
|
12
|
+
* In production, configure with specific allowed origins.
|
|
13
|
+
*/
|
|
14
|
+
const DEFAULT_CORS_ORIGIN = process.env.CORS_ORIGIN || "http://localhost:3000";
|
|
15
|
+
const ALLOWED_ORIGINS = process.env.CORS_ORIGINS?.split(",") || [DEFAULT_CORS_ORIGIN];
|
|
16
|
+
// ============================================================================
|
|
17
|
+
// Security: Project Name Validation
|
|
18
|
+
// ============================================================================
|
|
19
|
+
/**
|
|
20
|
+
* Validate a project name to prevent path traversal and other attacks.
|
|
21
|
+
* Only allows alphanumeric characters, hyphens, underscores, and dots (not leading).
|
|
22
|
+
*/
|
|
23
|
+
const PROJECT_NAME_REGEX = /^[a-zA-Z0-9][a-zA-Z0-9._-]*$/;
|
|
24
|
+
const MAX_PROJECT_NAME_LENGTH = 64;
|
|
25
|
+
function isValidProjectName(name) {
|
|
26
|
+
if (!name || name.length > MAX_PROJECT_NAME_LENGTH)
|
|
27
|
+
return false;
|
|
28
|
+
if (!PROJECT_NAME_REGEX.test(name))
|
|
29
|
+
return false;
|
|
30
|
+
// Reject names that could be path traversal even if regex passes
|
|
31
|
+
if (name.includes("..") || name.includes("/") || name.includes("\\"))
|
|
32
|
+
return false;
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
const rateLimitMap = new Map();
|
|
36
|
+
const RATE_LIMIT_WINDOW_MS = 60_000; // 1 minute
|
|
37
|
+
const RATE_LIMIT_MAX_REQUESTS = parseInt(process.env.RATE_LIMIT_MAX || "10000", 10); // per minute
|
|
38
|
+
function checkRateLimit(identifier) {
|
|
39
|
+
const now = Date.now();
|
|
40
|
+
const entry = rateLimitMap.get(identifier);
|
|
41
|
+
if (!entry || now > entry.resetTime) {
|
|
42
|
+
// New window
|
|
43
|
+
rateLimitMap.set(identifier, {
|
|
44
|
+
count: 1,
|
|
45
|
+
resetTime: now + RATE_LIMIT_WINDOW_MS,
|
|
46
|
+
});
|
|
47
|
+
return { allowed: true };
|
|
48
|
+
}
|
|
49
|
+
if (entry.count >= RATE_LIMIT_MAX_REQUESTS) {
|
|
50
|
+
return { allowed: false, retryAfter: Math.ceil((entry.resetTime - now) / 1000) };
|
|
51
|
+
}
|
|
52
|
+
entry.count++;
|
|
53
|
+
return { allowed: true };
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Trust proxy headers only when TRUST_PROXY env var is set.
|
|
57
|
+
* Without a trusted proxy, X-Forwarded-For can be spoofed to bypass rate limits.
|
|
58
|
+
*/
|
|
59
|
+
const TRUST_PROXY = process.env.TRUST_PROXY === "true" || process.env.TRUST_PROXY === "1";
|
|
60
|
+
function getClientIdentifier(c) {
|
|
61
|
+
if (TRUST_PROXY) {
|
|
62
|
+
// Only trust proxy headers when explicitly configured
|
|
63
|
+
const forwardedFor = c.req.header("X-Forwarded-For");
|
|
64
|
+
if (forwardedFor) {
|
|
65
|
+
return forwardedFor.split(",")[0].trim();
|
|
66
|
+
}
|
|
67
|
+
const realIp = c.req.header("X-Real-Ip");
|
|
68
|
+
if (realIp)
|
|
69
|
+
return realIp;
|
|
70
|
+
}
|
|
71
|
+
// Default: use remote address from the connection
|
|
72
|
+
// Hono provides this via c.env or the underlying request
|
|
73
|
+
const connInfo = c.req.raw;
|
|
74
|
+
// @ts-ignore - Node.js socket info
|
|
75
|
+
const remoteAddr = connInfo?.socket?.remoteAddress;
|
|
76
|
+
return remoteAddr || "unknown";
|
|
77
|
+
}
|
|
78
|
+
// ============================================================================
|
|
8
79
|
// Create App
|
|
9
80
|
// ============================================================================
|
|
10
|
-
export function createApp(dbManager,
|
|
81
|
+
export function createApp(dbManager, apiKeyStore) {
|
|
11
82
|
const app = new Hono();
|
|
83
|
+
// CORS middleware - must be before other middleware
|
|
84
|
+
app.use("*", cors({
|
|
85
|
+
origin: (origin) => {
|
|
86
|
+
// Requests with no origin (curl, server-to-server) get no CORS header
|
|
87
|
+
// This prevents browsers from caching a wildcard Access-Control-Allow-Origin
|
|
88
|
+
if (!origin)
|
|
89
|
+
return DEFAULT_CORS_ORIGIN;
|
|
90
|
+
// Check if origin is in allowed list
|
|
91
|
+
if (ALLOWED_ORIGINS.includes(origin))
|
|
92
|
+
return origin;
|
|
93
|
+
// Default: deny
|
|
94
|
+
return null;
|
|
95
|
+
},
|
|
96
|
+
allowMethods: ["GET", "POST", "OPTIONS"],
|
|
97
|
+
allowHeaders: ["Content-Type", "Authorization"],
|
|
98
|
+
maxAge: 86400, // 24 hours
|
|
99
|
+
}));
|
|
100
|
+
// Security headers middleware
|
|
101
|
+
app.use("*", async (c, next) => {
|
|
102
|
+
await next();
|
|
103
|
+
c.header("X-Content-Type-Options", "nosniff");
|
|
104
|
+
c.header("X-Frame-Options", "DENY");
|
|
105
|
+
c.header("X-XSS-Protection", "0"); // Disabled in favor of CSP; legacy header can cause issues
|
|
106
|
+
c.header("Content-Security-Policy", "default-src 'none'; frame-ancestors 'none'");
|
|
107
|
+
c.header("Referrer-Policy", "no-referrer");
|
|
108
|
+
c.header("Cache-Control", "no-store");
|
|
109
|
+
c.header("Permissions-Policy", "camera=(), microphone=(), geolocation=()");
|
|
110
|
+
});
|
|
12
111
|
// Add auth middleware if API key store is provided
|
|
13
112
|
if (apiKeyStore && apiKeyStore.hasKeys()) {
|
|
14
113
|
app.use("*", authMiddleware(apiKeyStore));
|
|
@@ -26,7 +125,32 @@ export function createApp(dbManager, dataPath, backupManager, apiKeyStore) {
|
|
|
26
125
|
// Query Endpoint
|
|
27
126
|
// ============================================================================
|
|
28
127
|
app.post("/query/:project", async (c) => {
|
|
128
|
+
// Rate limiting check
|
|
129
|
+
const clientId = getClientIdentifier(c);
|
|
130
|
+
const rateLimit = checkRateLimit(clientId);
|
|
131
|
+
if (!rateLimit.allowed) {
|
|
132
|
+
c.header("Retry-After", String(rateLimit.retryAfter));
|
|
133
|
+
return c.json({
|
|
134
|
+
success: false,
|
|
135
|
+
error: { message: "Rate limit exceeded. Please try again later." },
|
|
136
|
+
}, 429);
|
|
137
|
+
}
|
|
138
|
+
// Content-Type validation
|
|
139
|
+
const contentType = c.req.header("Content-Type");
|
|
140
|
+
if (!contentType || !contentType.includes("application/json")) {
|
|
141
|
+
return c.json({
|
|
142
|
+
success: false,
|
|
143
|
+
error: { message: "Content-Type must be application/json" },
|
|
144
|
+
}, 415);
|
|
145
|
+
}
|
|
29
146
|
const project = c.req.param("project");
|
|
147
|
+
// Validate project name to prevent path traversal
|
|
148
|
+
if (!isValidProjectName(project)) {
|
|
149
|
+
return c.json({
|
|
150
|
+
success: false,
|
|
151
|
+
error: { message: "Invalid project name" },
|
|
152
|
+
}, 400);
|
|
153
|
+
}
|
|
30
154
|
// Parse request body
|
|
31
155
|
let body;
|
|
32
156
|
try {
|
|
@@ -45,131 +169,52 @@ export function createApp(dbManager, dataPath, backupManager, apiKeyStore) {
|
|
|
45
169
|
error: { message: "Missing or invalid 'cypher' field" },
|
|
46
170
|
}, 400);
|
|
47
171
|
}
|
|
172
|
+
// Limit query size to prevent stack overflow / resource exhaustion
|
|
173
|
+
const MAX_QUERY_LENGTH = 100_000;
|
|
174
|
+
if (body.cypher.length > MAX_QUERY_LENGTH) {
|
|
175
|
+
return c.json({
|
|
176
|
+
success: false,
|
|
177
|
+
error: { message: `Query exceeds maximum length of ${MAX_QUERY_LENGTH} characters` },
|
|
178
|
+
}, 400);
|
|
179
|
+
}
|
|
48
180
|
// Get database for this project
|
|
49
181
|
const db = dbManager.getDatabase(project);
|
|
50
182
|
// Execute query
|
|
51
183
|
const executor = new Executor(db);
|
|
52
184
|
const result = executor.execute(body.cypher, body.params || {});
|
|
53
185
|
if (!result.success) {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
// Admin Endpoints
|
|
60
|
-
// ============================================================================
|
|
61
|
-
app.get("/admin/list", (c) => {
|
|
62
|
-
const projects = dbManager.listDatabases();
|
|
63
|
-
return c.json({
|
|
64
|
-
success: true,
|
|
65
|
-
data: { projects },
|
|
66
|
-
});
|
|
67
|
-
});
|
|
68
|
-
app.post("/admin/projects/:project", (c) => {
|
|
69
|
-
const project = c.req.param("project");
|
|
70
|
-
// Creating a database just by accessing it
|
|
71
|
-
dbManager.getDatabase(project);
|
|
72
|
-
return c.json({
|
|
73
|
-
success: true,
|
|
74
|
-
message: `Created database for ${project}`,
|
|
75
|
-
});
|
|
76
|
-
});
|
|
77
|
-
app.post("/admin/wipe/:project", (c) => {
|
|
78
|
-
const project = c.req.param("project");
|
|
79
|
-
const db = dbManager.getDatabase(project);
|
|
80
|
-
// Clear all data
|
|
81
|
-
db.execute("DELETE FROM edges");
|
|
82
|
-
db.execute("DELETE FROM nodes");
|
|
83
|
-
return c.json({
|
|
84
|
-
success: true,
|
|
85
|
-
message: `Wiped database for ${project}`,
|
|
86
|
-
});
|
|
87
|
-
});
|
|
88
|
-
// ============================================================================
|
|
89
|
-
// Backup Endpoints
|
|
90
|
-
// ============================================================================
|
|
91
|
-
app.get("/admin/backup", (c) => {
|
|
92
|
-
if (!backupManager) {
|
|
93
|
-
return c.json({
|
|
94
|
-
success: false,
|
|
95
|
-
error: { message: "Backup not configured. Set backupPath in server options." },
|
|
96
|
-
}, 400);
|
|
97
|
-
}
|
|
98
|
-
const status = backupManager.getBackupStatus();
|
|
99
|
-
return c.json({
|
|
100
|
-
success: true,
|
|
101
|
-
data: status,
|
|
102
|
-
});
|
|
103
|
-
});
|
|
104
|
-
app.post("/admin/backup", async (c) => {
|
|
105
|
-
if (!backupManager || !dataPath) {
|
|
186
|
+
// Sanitize internal error messages to prevent information disclosure
|
|
187
|
+
const safeMessage = result.error.message
|
|
188
|
+
.replace(/Maximum call stack size exceeded/g, "Query too complex or deeply nested")
|
|
189
|
+
.replace(/SQLITE_ERROR: /g, "")
|
|
190
|
+
.replace(/at .+\(.+\)/g, ""); // Strip stack trace fragments
|
|
106
191
|
return c.json({
|
|
107
192
|
success: false,
|
|
108
|
-
error: {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
if (project) {
|
|
114
|
-
// Backup single project
|
|
115
|
-
const sourcePath = `${dataPath}/${project}.db`;
|
|
116
|
-
const result = await backupManager.backupDatabase(sourcePath, project);
|
|
117
|
-
if (!result.success) {
|
|
118
|
-
return c.json({
|
|
119
|
-
success: false,
|
|
120
|
-
error: { message: result.error },
|
|
121
|
-
}, 400);
|
|
122
|
-
}
|
|
123
|
-
return c.json({
|
|
124
|
-
success: true,
|
|
125
|
-
data: {
|
|
126
|
-
project: result.project,
|
|
127
|
-
backupPath: result.backupPath,
|
|
128
|
-
sizeBytes: result.sizeBytes,
|
|
129
|
-
durationMs: result.durationMs,
|
|
193
|
+
error: {
|
|
194
|
+
message: safeMessage,
|
|
195
|
+
...(result.error.position !== undefined && { position: result.error.position }),
|
|
196
|
+
...(result.error.line !== undefined && { line: result.error.line }),
|
|
197
|
+
...(result.error.column !== undefined && { column: result.error.column }),
|
|
130
198
|
},
|
|
131
|
-
});
|
|
199
|
+
}, 400);
|
|
132
200
|
}
|
|
133
|
-
|
|
134
|
-
const results = await backupManager.backupAll(dataPath);
|
|
135
|
-
const successful = results.filter(r => r.success);
|
|
136
|
-
const failed = results.filter(r => !r.success);
|
|
137
|
-
return c.json({
|
|
138
|
-
success: failed.length === 0,
|
|
139
|
-
data: {
|
|
140
|
-
total: results.length,
|
|
141
|
-
successful: successful.length,
|
|
142
|
-
failed: failed.length,
|
|
143
|
-
backups: successful.map(r => ({
|
|
144
|
-
project: r.project,
|
|
145
|
-
backupPath: r.backupPath,
|
|
146
|
-
sizeBytes: r.sizeBytes,
|
|
147
|
-
durationMs: r.durationMs,
|
|
148
|
-
})),
|
|
149
|
-
errors: failed.map(r => ({
|
|
150
|
-
project: r.project,
|
|
151
|
-
error: r.error,
|
|
152
|
-
})),
|
|
153
|
-
},
|
|
154
|
-
});
|
|
201
|
+
return c.json(result);
|
|
155
202
|
});
|
|
156
203
|
return app;
|
|
157
204
|
}
|
|
158
205
|
export function createServer(options = {}) {
|
|
159
206
|
const { port = 3000, dataPath = ":memory:", backupPath, apiKeys } = options;
|
|
160
207
|
const dbManager = new DatabaseManager(dataPath);
|
|
161
|
-
const backupManager = backupPath ? new BackupManager(backupPath) : undefined;
|
|
162
208
|
// Set up API key authentication if keys are provided
|
|
163
209
|
let apiKeyStore;
|
|
164
210
|
if (apiKeys) {
|
|
165
211
|
apiKeyStore = new ApiKeyStore();
|
|
166
212
|
apiKeyStore.loadKeys(apiKeys);
|
|
167
213
|
}
|
|
168
|
-
const app = createApp(dbManager,
|
|
214
|
+
const app = createApp(dbManager, apiKeyStore);
|
|
169
215
|
return {
|
|
170
216
|
app,
|
|
171
217
|
dbManager,
|
|
172
|
-
backupManager,
|
|
173
218
|
apiKeyStore,
|
|
174
219
|
port,
|
|
175
220
|
fetch: app.fetch,
|
package/dist/routes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AAAA,yBAAyB;AAEzB,OAAO,EAAE,IAAI,
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"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"}
|
package/dist/translator.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"translator.d.ts","sourceRoot":"","sources":["../src/translator.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,EASL,UAAU,EAqBX,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"translator.d.ts","sourceRoot":"","sources":["../src/translator.ts"],"names":[],"mappings":"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"}
|