@nodetool-ai/websocket 0.7.0-rc.11
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/agent/agent-runtime.d.ts +47 -0
- package/dist/agent/agent-runtime.d.ts.map +1 -0
- package/dist/agent/agent-runtime.js +577 -0
- package/dist/agent/agent-runtime.js.map +1 -0
- package/dist/agent/codex-agent.d.ts +41 -0
- package/dist/agent/codex-agent.d.ts.map +1 -0
- package/dist/agent/codex-agent.js +334 -0
- package/dist/agent/codex-agent.js.map +1 -0
- package/dist/agent/index.d.ts +6 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +4 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/llm-agent.d.ts +51 -0
- package/dist/agent/llm-agent.d.ts.map +1 -0
- package/dist/agent/llm-agent.js +526 -0
- package/dist/agent/llm-agent.js.map +1 -0
- package/dist/agent/mcp-tool-server.d.ts +33 -0
- package/dist/agent/mcp-tool-server.d.ts.map +1 -0
- package/dist/agent/mcp-tool-server.js +292 -0
- package/dist/agent/mcp-tool-server.js.map +1 -0
- package/dist/agent/opencode-agent.d.ts +32 -0
- package/dist/agent/opencode-agent.d.ts.map +1 -0
- package/dist/agent/opencode-agent.js +332 -0
- package/dist/agent/opencode-agent.js.map +1 -0
- package/dist/agent/pi-agent.d.ts +42 -0
- package/dist/agent/pi-agent.d.ts.map +1 -0
- package/dist/agent/pi-agent.js +429 -0
- package/dist/agent/pi-agent.js.map +1 -0
- package/dist/agent/sdk-provider.d.ts +46 -0
- package/dist/agent/sdk-provider.d.ts.map +1 -0
- package/dist/agent/sdk-provider.js +50 -0
- package/dist/agent/sdk-provider.js.map +1 -0
- package/dist/agent/socket-route.d.ts +11 -0
- package/dist/agent/socket-route.d.ts.map +1 -0
- package/dist/agent/socket-route.js +262 -0
- package/dist/agent/socket-route.js.map +1 -0
- package/dist/agent/transport.d.ts +39 -0
- package/dist/agent/transport.d.ts.map +1 -0
- package/dist/agent/transport.js +17 -0
- package/dist/agent/transport.js.map +1 -0
- package/dist/agent/types.d.ts +11 -0
- package/dist/agent/types.d.ts.map +1 -0
- package/dist/agent/types.js +10 -0
- package/dist/agent/types.js.map +1 -0
- package/dist/collection-api.d.ts +14 -0
- package/dist/collection-api.d.ts.map +1 -0
- package/dist/collection-api.js +75 -0
- package/dist/collection-api.js.map +1 -0
- package/dist/error-codes.d.ts +3 -0
- package/dist/error-codes.d.ts.map +1 -0
- package/dist/error-codes.js +2 -0
- package/dist/error-codes.js.map +1 -0
- package/dist/file-api.d.ts +12 -0
- package/dist/file-api.d.ts.map +1 -0
- package/dist/file-api.js +76 -0
- package/dist/file-api.js.map +1 -0
- package/dist/http-api.d.ts +94 -0
- package/dist/http-api.d.ts.map +1 -0
- package/dist/http-api.js +1472 -0
- package/dist/http-api.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/asset-paths.d.ts +10 -0
- package/dist/lib/asset-paths.d.ts.map +1 -0
- package/dist/lib/asset-paths.js +45 -0
- package/dist/lib/asset-paths.js.map +1 -0
- package/dist/lib/bridge.d.ts +8 -0
- package/dist/lib/bridge.d.ts.map +1 -0
- package/dist/lib/bridge.js +70 -0
- package/dist/lib/bridge.js.map +1 -0
- package/dist/mcp-server.d.ts +32 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +842 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/models-api.d.ts +12 -0
- package/dist/models-api.d.ts.map +1 -0
- package/dist/models-api.js +730 -0
- package/dist/models-api.js.map +1 -0
- package/dist/oauth-api.d.ts +28 -0
- package/dist/oauth-api.d.ts.map +1 -0
- package/dist/oauth-api.js +681 -0
- package/dist/oauth-api.js.map +1 -0
- package/dist/openai-api.d.ts +63 -0
- package/dist/openai-api.d.ts.map +1 -0
- package/dist/openai-api.js +359 -0
- package/dist/openai-api.js.map +1 -0
- package/dist/plugins/websocket.d.ts +14 -0
- package/dist/plugins/websocket.d.ts.map +1 -0
- package/dist/plugins/websocket.js +431 -0
- package/dist/plugins/websocket.js.map +1 -0
- package/dist/resolve-media-urls.d.ts +19 -0
- package/dist/resolve-media-urls.d.ts.map +1 -0
- package/dist/resolve-media-urls.js +109 -0
- package/dist/resolve-media-urls.js.map +1 -0
- package/dist/routes/assets.d.ts +22 -0
- package/dist/routes/assets.d.ts.map +1 -0
- package/dist/routes/assets.js +168 -0
- package/dist/routes/assets.js.map +1 -0
- package/dist/routes/collections.d.ts +16 -0
- package/dist/routes/collections.d.ts.map +1 -0
- package/dist/routes/collections.js +32 -0
- package/dist/routes/collections.js.map +1 -0
- package/dist/routes/files.d.ts +12 -0
- package/dist/routes/files.d.ts.map +1 -0
- package/dist/routes/files.js +11 -0
- package/dist/routes/files.js.map +1 -0
- package/dist/routes/health.d.ts +4 -0
- package/dist/routes/health.d.ts.map +1 -0
- package/dist/routes/health.js +41 -0
- package/dist/routes/health.js.map +1 -0
- package/dist/routes/jobs.d.ts +16 -0
- package/dist/routes/jobs.d.ts.map +1 -0
- package/dist/routes/jobs.js +25 -0
- package/dist/routes/jobs.js.map +1 -0
- package/dist/routes/nodes.d.ts +8 -0
- package/dist/routes/nodes.d.ts.map +1 -0
- package/dist/routes/nodes.js +124 -0
- package/dist/routes/nodes.js.map +1 -0
- package/dist/routes/oauth.d.ts +8 -0
- package/dist/routes/oauth.d.ts.map +1 -0
- package/dist/routes/oauth.js +19 -0
- package/dist/routes/oauth.js.map +1 -0
- package/dist/routes/openai.d.ts +8 -0
- package/dist/routes/openai.d.ts.map +1 -0
- package/dist/routes/openai.js +20 -0
- package/dist/routes/openai.js.map +1 -0
- package/dist/routes/storage.d.ts +12 -0
- package/dist/routes/storage.d.ts.map +1 -0
- package/dist/routes/storage.js +13 -0
- package/dist/routes/storage.js.map +1 -0
- package/dist/routes/workflows.d.ts +18 -0
- package/dist/routes/workflows.d.ts.map +1 -0
- package/dist/routes/workflows.js +25 -0
- package/dist/routes/workflows.js.map +1 -0
- package/dist/routes/workspace.d.ts +15 -0
- package/dist/routes/workspace.d.ts.map +1 -0
- package/dist/routes/workspace.js +24 -0
- package/dist/routes/workspace.js.map +1 -0
- package/dist/screenshot-server.d.ts +21 -0
- package/dist/screenshot-server.d.ts.map +1 -0
- package/dist/screenshot-server.js +222 -0
- package/dist/screenshot-server.js.map +1 -0
- package/dist/server.d.ts +10 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +783 -0
- package/dist/server.js.map +1 -0
- package/dist/settings-registry.d.ts +29 -0
- package/dist/settings-registry.d.ts.map +1 -0
- package/dist/settings-registry.js +117 -0
- package/dist/settings-registry.js.map +1 -0
- package/dist/storage-api.d.ts +5 -0
- package/dist/storage-api.d.ts.map +1 -0
- package/dist/storage-api.js +221 -0
- package/dist/storage-api.js.map +1 -0
- package/dist/test-ui-server.d.ts +19 -0
- package/dist/test-ui-server.d.ts.map +1 -0
- package/dist/test-ui-server.js +1256 -0
- package/dist/test-ui-server.js.map +1 -0
- package/dist/trpc/context.d.ts +21 -0
- package/dist/trpc/context.d.ts.map +1 -0
- package/dist/trpc/context.js +10 -0
- package/dist/trpc/context.js.map +1 -0
- package/dist/trpc/error-formatter.d.ts +18 -0
- package/dist/trpc/error-formatter.d.ts.map +1 -0
- package/dist/trpc/error-formatter.js +41 -0
- package/dist/trpc/error-formatter.js.map +1 -0
- package/dist/trpc/index.d.ts +18 -0
- package/dist/trpc/index.d.ts.map +1 -0
- package/dist/trpc/index.js +13 -0
- package/dist/trpc/index.js.map +1 -0
- package/dist/trpc/middleware.d.ts +8 -0
- package/dist/trpc/middleware.d.ts.map +1 -0
- package/dist/trpc/middleware.js +12 -0
- package/dist/trpc/middleware.js.map +1 -0
- package/dist/trpc/router.d.ts +2543 -0
- package/dist/trpc/router.d.ts.map +1 -0
- package/dist/trpc/router.js +43 -0
- package/dist/trpc/router.js.map +1 -0
- package/dist/trpc/routers/assets.d.ts +229 -0
- package/dist/trpc/routers/assets.d.ts.map +1 -0
- package/dist/trpc/routers/assets.js +263 -0
- package/dist/trpc/routers/assets.js.map +1 -0
- package/dist/trpc/routers/collections.d.ts +88 -0
- package/dist/trpc/routers/collections.d.ts.map +1 -0
- package/dist/trpc/routers/collections.js +166 -0
- package/dist/trpc/routers/collections.js.map +1 -0
- package/dist/trpc/routers/costs.d.ts +129 -0
- package/dist/trpc/routers/costs.d.ts.map +1 -0
- package/dist/trpc/routers/costs.js +95 -0
- package/dist/trpc/routers/costs.js.map +1 -0
- package/dist/trpc/routers/files.d.ts +34 -0
- package/dist/trpc/routers/files.d.ts.map +1 -0
- package/dist/trpc/routers/files.js +92 -0
- package/dist/trpc/routers/files.js.map +1 -0
- package/dist/trpc/routers/jobs.d.ts +92 -0
- package/dist/trpc/routers/jobs.d.ts.map +1 -0
- package/dist/trpc/routers/jobs.js +100 -0
- package/dist/trpc/routers/jobs.js.map +1 -0
- package/dist/trpc/routers/mcp-config.d.ts +69 -0
- package/dist/trpc/routers/mcp-config.d.ts.map +1 -0
- package/dist/trpc/routers/mcp-config.js +290 -0
- package/dist/trpc/routers/mcp-config.js.map +1 -0
- package/dist/trpc/routers/messages.d.ts +121 -0
- package/dist/trpc/routers/messages.d.ts.map +1 -0
- package/dist/trpc/routers/messages.js +113 -0
- package/dist/trpc/routers/messages.js.map +1 -0
- package/dist/trpc/routers/models.d.ts +748 -0
- package/dist/trpc/routers/models.d.ts.map +1 -0
- package/dist/trpc/routers/models.js +1107 -0
- package/dist/trpc/routers/models.js.map +1 -0
- package/dist/trpc/routers/nodes.d.ts +48 -0
- package/dist/trpc/routers/nodes.d.ts.map +1 -0
- package/dist/trpc/routers/nodes.js +57 -0
- package/dist/trpc/routers/nodes.js.map +1 -0
- package/dist/trpc/routers/sandboxes.d.ts +64 -0
- package/dist/trpc/routers/sandboxes.d.ts.map +1 -0
- package/dist/trpc/routers/sandboxes.js +327 -0
- package/dist/trpc/routers/sandboxes.js.map +1 -0
- package/dist/trpc/routers/settings.d.ts +113 -0
- package/dist/trpc/routers/settings.d.ts.map +1 -0
- package/dist/trpc/routers/settings.js +193 -0
- package/dist/trpc/routers/settings.js.map +1 -0
- package/dist/trpc/routers/skills.d.ts +41 -0
- package/dist/trpc/routers/skills.d.ts.map +1 -0
- package/dist/trpc/routers/skills.js +194 -0
- package/dist/trpc/routers/skills.js.map +1 -0
- package/dist/trpc/routers/storage.d.ts +44 -0
- package/dist/trpc/routers/storage.d.ts.map +1 -0
- package/dist/trpc/routers/storage.js +153 -0
- package/dist/trpc/routers/storage.js.map +1 -0
- package/dist/trpc/routers/threads.d.ts +95 -0
- package/dist/trpc/routers/threads.d.ts.map +1 -0
- package/dist/trpc/routers/threads.js +150 -0
- package/dist/trpc/routers/threads.js.map +1 -0
- package/dist/trpc/routers/users.d.ts +79 -0
- package/dist/trpc/routers/users.d.ts.map +1 -0
- package/dist/trpc/routers/users.js +125 -0
- package/dist/trpc/routers/users.js.map +1 -0
- package/dist/trpc/routers/workflows.d.ts +681 -0
- package/dist/trpc/routers/workflows.d.ts.map +1 -0
- package/dist/trpc/routers/workflows.js +725 -0
- package/dist/trpc/routers/workflows.js.map +1 -0
- package/dist/trpc/routers/workspace.d.ts +127 -0
- package/dist/trpc/routers/workspace.d.ts.map +1 -0
- package/dist/trpc/routers/workspace.js +203 -0
- package/dist/trpc/routers/workspace.js.map +1 -0
- package/dist/unified-websocket-runner.d.ts +280 -0
- package/dist/unified-websocket-runner.d.ts.map +1 -0
- package/dist/unified-websocket-runner.js +3840 -0
- package/dist/unified-websocket-runner.js.map +1 -0
- package/dist/workspace-api.d.ts +14 -0
- package/dist/workspace-api.d.ts.map +1 -0
- package/dist/workspace-api.js +104 -0
- package/dist/workspace-api.js.map +1 -0
- package/dist/ws-adapter.d.ts +25 -0
- package/dist/ws-adapter.d.ts.map +1 -0
- package/dist/ws-adapter.js +63 -0
- package/dist/ws-adapter.js.map +1 -0
- package/package.json +92 -0
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { bridge } from "../lib/bridge.js";
|
|
2
|
+
import { handleAssetsRoot, handleAssetThumbnail } from "../http-api.js";
|
|
3
|
+
import { loadPythonPackageMetadata } from "@nodetool-ai/node-sdk";
|
|
4
|
+
import { ApiErrorCode, apiError } from "../error-codes.js";
|
|
5
|
+
/**
|
|
6
|
+
* Assets REST plugin — only binary + multipart endpoints remain here.
|
|
7
|
+
* JSON CRUD + list + search + by-filename + children + recursive moved to
|
|
8
|
+
* the tRPC `assets` router.
|
|
9
|
+
*
|
|
10
|
+
* Still served via REST:
|
|
11
|
+
* - POST /api/assets — multipart file upload
|
|
12
|
+
* - GET /api/assets/:id/thumbnail — binary thumbnail
|
|
13
|
+
* - POST /api/assets/:id/thumbnail — 501 stub
|
|
14
|
+
* - POST /api/assets/download — 501 stub (ZIP download)
|
|
15
|
+
* - GET /api/assets/packages — empty list stub
|
|
16
|
+
* - GET /api/assets/packages/:package — empty list stub
|
|
17
|
+
* - GET /api/assets/packages/:package/:asset — binary asset file stream
|
|
18
|
+
*/
|
|
19
|
+
const assetsRoutes = async (app, opts) => {
|
|
20
|
+
const { apiOptions } = opts;
|
|
21
|
+
// Stub: no package listing in standalone mode.
|
|
22
|
+
app.get("/api/assets/packages", async (_req, reply) => {
|
|
23
|
+
reply.send({ assets: [], next: null });
|
|
24
|
+
});
|
|
25
|
+
// Stub: ZIP download not available in standalone mode.
|
|
26
|
+
app.post("/api/assets/download", async (_req, reply) => {
|
|
27
|
+
reply
|
|
28
|
+
.status(501)
|
|
29
|
+
.send(apiError(ApiErrorCode.SERVICE_UNAVAILABLE, "ZIP download not available in standalone mode"));
|
|
30
|
+
});
|
|
31
|
+
// Per-package asset listing (stub) and binary file streaming.
|
|
32
|
+
app.get("/api/assets/packages/:packageName", async (_req, reply) => {
|
|
33
|
+
reply.send({ assets: [], next: null });
|
|
34
|
+
});
|
|
35
|
+
app.get("/api/assets/packages/:packageName/:assetName", async (req, reply) => {
|
|
36
|
+
const { packageName, assetName } = req.params;
|
|
37
|
+
await bridge(req, reply, async (_request) => {
|
|
38
|
+
let pkgName;
|
|
39
|
+
let aName;
|
|
40
|
+
try {
|
|
41
|
+
pkgName = decodeURIComponent(packageName);
|
|
42
|
+
aName = decodeURIComponent(assetName);
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return new Response(JSON.stringify(apiError(ApiErrorCode.INVALID_INPUT, "Invalid URL encoding")), {
|
|
46
|
+
status: 400,
|
|
47
|
+
headers: { "content-type": "application/json" }
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
if (!pkgName ||
|
|
51
|
+
!aName ||
|
|
52
|
+
pkgName.includes("..") ||
|
|
53
|
+
aName.includes("..") ||
|
|
54
|
+
pkgName.includes("/") ||
|
|
55
|
+
aName.includes("/") ||
|
|
56
|
+
pkgName.includes("\\") ||
|
|
57
|
+
aName.includes("\\")) {
|
|
58
|
+
return new Response(JSON.stringify(apiError(ApiErrorCode.ASSET_NOT_FOUND, "Not found")), {
|
|
59
|
+
status: 404,
|
|
60
|
+
headers: { "content-type": "application/json" }
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
const loaded = loadPythonPackageMetadata({
|
|
64
|
+
roots: apiOptions.metadataRoots,
|
|
65
|
+
maxDepth: apiOptions.metadataMaxDepth
|
|
66
|
+
});
|
|
67
|
+
const pkg = loaded.packages.find((p) => p.name === pkgName);
|
|
68
|
+
if (!pkg || !pkg.sourceFolder) {
|
|
69
|
+
return new Response(JSON.stringify(apiError(ApiErrorCode.NOT_FOUND, `Package '${pkgName}' not found`)), {
|
|
70
|
+
status: 404,
|
|
71
|
+
headers: { "content-type": "application/json" }
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
const { createReadStream, statSync } = await import("node:fs");
|
|
75
|
+
const { extname, resolve } = await import("node:path");
|
|
76
|
+
const mimeTypes = {
|
|
77
|
+
".jpg": "image/jpeg",
|
|
78
|
+
".jpeg": "image/jpeg",
|
|
79
|
+
".png": "image/png",
|
|
80
|
+
".gif": "image/gif",
|
|
81
|
+
".webp": "image/webp",
|
|
82
|
+
".svg": "image/svg+xml",
|
|
83
|
+
".mp3": "audio/mpeg",
|
|
84
|
+
".mp4": "video/mp4",
|
|
85
|
+
".webm": "video/webm",
|
|
86
|
+
".json": "application/json",
|
|
87
|
+
".txt": "text/plain"
|
|
88
|
+
};
|
|
89
|
+
const baseDir = resolve(`${pkg.sourceFolder}/nodetool/assets/${pkgName}`);
|
|
90
|
+
const assetPath = resolve(baseDir, aName);
|
|
91
|
+
// Prevent path traversal.
|
|
92
|
+
if (!assetPath.startsWith(baseDir + "/") && assetPath !== baseDir) {
|
|
93
|
+
return new Response(JSON.stringify(apiError(ApiErrorCode.ASSET_NOT_FOUND, "Not found")), {
|
|
94
|
+
status: 404,
|
|
95
|
+
headers: { "content-type": "application/json" }
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
let fileStat;
|
|
99
|
+
try {
|
|
100
|
+
fileStat = statSync(assetPath);
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
return new Response(JSON.stringify(apiError(ApiErrorCode.ASSET_NOT_FOUND, `Asset '${aName}' not found in package '${pkgName}'`)), {
|
|
104
|
+
status: 404,
|
|
105
|
+
headers: { "content-type": "application/json" }
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
const contentType = mimeTypes[extname(aName).toLowerCase()] ?? "application/octet-stream";
|
|
109
|
+
const stream = createReadStream(assetPath);
|
|
110
|
+
const webStream = new ReadableStream({
|
|
111
|
+
start(controller) {
|
|
112
|
+
stream.on("data", (chunk) => {
|
|
113
|
+
try {
|
|
114
|
+
controller.enqueue(chunk);
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
stream.destroy();
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
stream.on("end", () => {
|
|
121
|
+
try {
|
|
122
|
+
controller.close();
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
/* already closed */
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
stream.on("error", (err) => {
|
|
129
|
+
try {
|
|
130
|
+
controller.error(err);
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
/* already errored */
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
},
|
|
137
|
+
cancel() {
|
|
138
|
+
stream.destroy();
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
return new Response(webStream, {
|
|
142
|
+
status: 200,
|
|
143
|
+
headers: {
|
|
144
|
+
"content-type": contentType,
|
|
145
|
+
"content-length": String(fileStat.size),
|
|
146
|
+
"cache-control": "public, max-age=31536000, immutable",
|
|
147
|
+
etag: `"${pkgName}-${aName}-${fileStat.size}-${fileStat.mtimeMs}"`
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
// Binary thumbnail serving + POST stub.
|
|
153
|
+
app.get("/api/assets/:id/thumbnail", async (req, reply) => {
|
|
154
|
+
const { id } = req.params;
|
|
155
|
+
await bridge(req, reply, (request) => handleAssetThumbnail(request, decodeURIComponent(id), apiOptions));
|
|
156
|
+
});
|
|
157
|
+
app.post("/api/assets/:id/thumbnail", async (req, reply) => {
|
|
158
|
+
const { id } = req.params;
|
|
159
|
+
await bridge(req, reply, (request) => handleAssetThumbnail(request, decodeURIComponent(id), apiOptions));
|
|
160
|
+
});
|
|
161
|
+
// Multipart asset upload (file POST). The handler also accepts JSON bodies,
|
|
162
|
+
// but the tRPC `assets.create` procedure is the preferred path for JSON.
|
|
163
|
+
app.post("/api/assets", async (req, reply) => {
|
|
164
|
+
await bridge(req, reply, (request) => handleAssetsRoot(request, apiOptions));
|
|
165
|
+
});
|
|
166
|
+
};
|
|
167
|
+
export default assetsRoutes;
|
|
168
|
+
//# sourceMappingURL=assets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/routes/assets.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAM3D;;;;;;;;;;;;;GAaG;AACH,MAAM,YAAY,GAAqC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IACzE,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IAE5B,+CAA+C;IAC/C,GAAG,CAAC,GAAG,CAAC,sBAAsB,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACpD,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,uDAAuD;IACvD,GAAG,CAAC,IAAI,CAAC,sBAAsB,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACrD,KAAK;aACF,MAAM,CAAC,GAAG,CAAC;aACX,IAAI,CACH,QAAQ,CACN,YAAY,CAAC,mBAAmB,EAChC,+CAA+C,CAChD,CACF,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,8DAA8D;IAC9D,GAAG,CAAC,GAAG,CAAC,mCAAmC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACjE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CACL,8CAA8C,EAC9C,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACnB,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,MAGtC,CAAC;QACF,MAAM,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;YAC1C,IAAI,OAAe,CAAC;YACpB,IAAI,KAAa,CAAC;YAClB,IAAI,CAAC;gBACH,OAAO,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;gBAC1C,KAAK,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;YACxC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,QAAQ,CACjB,IAAI,CAAC,SAAS,CACZ,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE,sBAAsB,CAAC,CAC7D,EACD;oBACE,MAAM,EAAE,GAAG;oBACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;iBAChD,CACF,CAAC;YACJ,CAAC;YACD,IACE,CAAC,OAAO;gBACR,CAAC,KAAK;gBACN,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACtB,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACpB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;gBACrB,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;gBACnB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACtB,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EACpB,CAAC;gBACD,OAAO,IAAI,QAAQ,CACjB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC,EACnE;oBACE,MAAM,EAAE,GAAG;oBACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;iBAChD,CACF,CAAC;YACJ,CAAC;YACD,MAAM,MAAM,GAAG,yBAAyB,CAAC;gBACvC,KAAK,EAAE,UAAU,CAAC,aAAa;gBAC/B,QAAQ,EAAE,UAAU,CAAC,gBAAgB;aACtC,CAAC,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;YAC5D,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;gBAC9B,OAAO,IAAI,QAAQ,CACjB,IAAI,CAAC,SAAS,CACZ,QAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,YAAY,OAAO,aAAa,CAAC,CACnE,EACD;oBACE,MAAM,EAAE,GAAG;oBACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;iBAChD,CACF,CAAC;YACJ,CAAC;YACD,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;YAC/D,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;YACvD,MAAM,SAAS,GAA2B;gBACxC,MAAM,EAAE,YAAY;gBACpB,OAAO,EAAE,YAAY;gBACrB,MAAM,EAAE,WAAW;gBACnB,MAAM,EAAE,WAAW;gBACnB,OAAO,EAAE,YAAY;gBACrB,MAAM,EAAE,eAAe;gBACvB,MAAM,EAAE,YAAY;gBACpB,MAAM,EAAE,WAAW;gBACnB,OAAO,EAAE,YAAY;gBACrB,OAAO,EAAE,kBAAkB;gBAC3B,MAAM,EAAE,YAAY;aACrB,CAAC;YACF,MAAM,OAAO,GAAG,OAAO,CACrB,GAAG,GAAG,CAAC,YAAY,oBAAoB,OAAO,EAAE,CACjD,CAAC;YACF,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC1C,0BAA0B;YAC1B,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG,CAAC,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;gBAClE,OAAO,IAAI,QAAQ,CACjB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC,EACnE;oBACE,MAAM,EAAE,GAAG;oBACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;iBAChD,CACF,CAAC;YACJ,CAAC;YACD,IAAI,QAA2C,CAAC;YAChD,IAAI,CAAC;gBACH,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;YACjC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,QAAQ,CACjB,IAAI,CAAC,SAAS,CACZ,QAAQ,CACN,YAAY,CAAC,eAAe,EAC5B,UAAU,KAAK,2BAA2B,OAAO,GAAG,CACrD,CACF,EACD;oBACE,MAAM,EAAE,GAAG;oBACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;iBAChD,CACF,CAAC;YACJ,CAAC;YACD,MAAM,WAAW,GACf,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,0BAA0B,CAAC;YACxE,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;YAC3C,MAAM,SAAS,GAAG,IAAI,cAAc,CAAC;gBACnC,KAAK,CAAC,UAAU;oBACd,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;wBAC1B,IAAI,CAAC;4BACH,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;wBAC5B,CAAC;wBAAC,MAAM,CAAC;4BACP,MAAM,CAAC,OAAO,EAAE,CAAC;wBACnB,CAAC;oBACH,CAAC,CAAC,CAAC;oBACH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;wBACpB,IAAI,CAAC;4BACH,UAAU,CAAC,KAAK,EAAE,CAAC;wBACrB,CAAC;wBAAC,MAAM,CAAC;4BACP,oBAAoB;wBACtB,CAAC;oBACH,CAAC,CAAC,CAAC;oBACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;wBACzB,IAAI,CAAC;4BACH,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;wBACxB,CAAC;wBAAC,MAAM,CAAC;4BACP,qBAAqB;wBACvB,CAAC;oBACH,CAAC,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM;oBACJ,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,CAAC;aACF,CAAC,CAAC;YACH,OAAO,IAAI,QAAQ,CAAC,SAAS,EAAE;gBAC7B,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE;oBACP,cAAc,EAAE,WAAW;oBAC3B,gBAAgB,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACvC,eAAe,EAAE,qCAAqC;oBACtD,IAAI,EAAE,IAAI,OAAO,IAAI,KAAK,IAAI,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,OAAO,GAAG;iBACnE;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CACF,CAAC;IAEF,wCAAwC;IACxC,GAAG,CAAC,GAAG,CAAC,2BAA2B,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACxD,MAAM,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,MAAwB,CAAC;QAC5C,MAAM,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CACnC,oBAAoB,CAAC,OAAO,EAAE,kBAAkB,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAClE,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,IAAI,CAAC,2BAA2B,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACzD,MAAM,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,MAAwB,CAAC;QAC5C,MAAM,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CACnC,oBAAoB,CAAC,OAAO,EAAE,kBAAkB,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAClE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,4EAA4E;IAC5E,yEAAyE;IACzE,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QAC3C,MAAM,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CACnC,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,CACtC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { FastifyPluginAsync } from "fastify";
|
|
2
|
+
import type { HttpApiOptions } from "../http-api.js";
|
|
3
|
+
interface RouteOptions {
|
|
4
|
+
apiOptions: HttpApiOptions;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Collections REST plugin — only the multipart file-upload endpoint remains.
|
|
8
|
+
* CRUD + query operations moved to the tRPC `collections` router.
|
|
9
|
+
*
|
|
10
|
+
* The wildcard route intentionally forwards all /api/collections/*
|
|
11
|
+
* paths so the handler can decide whether to respond (for /index) or return
|
|
12
|
+
* null (so we can 404).
|
|
13
|
+
*/
|
|
14
|
+
declare const collectionsRoutes: FastifyPluginAsync<RouteOptions>;
|
|
15
|
+
export default collectionsRoutes;
|
|
16
|
+
//# sourceMappingURL=collections.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collections.d.ts","sourceRoot":"","sources":["../../src/routes/collections.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGrD,UAAU,YAAY;IACpB,UAAU,EAAE,cAAc,CAAC;CAC5B;AAED;;;;;;;GAOG;AACH,QAAA,MAAM,iBAAiB,EAAE,kBAAkB,CAAC,YAAY,CA8BvD,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { bridge } from "../lib/bridge.js";
|
|
2
|
+
import { handleCollectionRequest } from "../collection-api.js";
|
|
3
|
+
/**
|
|
4
|
+
* Collections REST plugin — only the multipart file-upload endpoint remains.
|
|
5
|
+
* CRUD + query operations moved to the tRPC `collections` router.
|
|
6
|
+
*
|
|
7
|
+
* The wildcard route intentionally forwards all /api/collections/*
|
|
8
|
+
* paths so the handler can decide whether to respond (for /index) or return
|
|
9
|
+
* null (so we can 404).
|
|
10
|
+
*/
|
|
11
|
+
const collectionsRoutes = async (app, opts) => {
|
|
12
|
+
const { apiOptions } = opts;
|
|
13
|
+
app.all("/api/collections/*", async (req, reply) => {
|
|
14
|
+
const url = new URL(req.url, "http://localhost");
|
|
15
|
+
await bridge(req, reply, async (request) => {
|
|
16
|
+
const res = await handleCollectionRequest(request, url.pathname, apiOptions);
|
|
17
|
+
return (res ??
|
|
18
|
+
new Response(JSON.stringify({ detail: "Not found" }), {
|
|
19
|
+
status: 404,
|
|
20
|
+
headers: { "content-type": "application/json" }
|
|
21
|
+
}));
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
// Admin endpoints (stubs)
|
|
25
|
+
app.post("/admin/secrets/import", async (_req, reply) => {
|
|
26
|
+
reply
|
|
27
|
+
.status(501)
|
|
28
|
+
.send({ detail: "Secrets import not available in standalone mode" });
|
|
29
|
+
});
|
|
30
|
+
};
|
|
31
|
+
export default collectionsRoutes;
|
|
32
|
+
//# sourceMappingURL=collections.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collections.js","sourceRoot":"","sources":["../../src/routes/collections.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAM/D;;;;;;;GAOG;AACH,MAAM,iBAAiB,GAAqC,KAAK,EAC/D,GAAG,EACH,IAAI,EACJ,EAAE;IACF,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IAE5B,GAAG,CAAC,GAAG,CAAC,oBAAoB,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACjD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;QACjD,MAAM,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACzC,MAAM,GAAG,GAAG,MAAM,uBAAuB,CACvC,OAAO,EACP,GAAG,CAAC,QAAQ,EACZ,UAAU,CACX,CAAC;YACF,OAAO,CACL,GAAG;gBACH,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE;oBACpD,MAAM,EAAE,GAAG;oBACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;iBAChD,CAAC,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,0BAA0B;IAC1B,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACtD,KAAK;aACF,MAAM,CAAC,GAAG,CAAC;aACX,IAAI,CAAC,EAAE,MAAM,EAAE,iDAAiD,EAAE,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Binary-only REST routes for the file browser.
|
|
3
|
+
* JSON ops (list, info) have moved to the tRPC `files` router.
|
|
4
|
+
*/
|
|
5
|
+
import type { FastifyPluginAsync } from "fastify";
|
|
6
|
+
import type { HttpApiOptions } from "../http-api.js";
|
|
7
|
+
interface RouteOptions {
|
|
8
|
+
apiOptions: HttpApiOptions;
|
|
9
|
+
}
|
|
10
|
+
declare const filesRoutes: FastifyPluginAsync<RouteOptions>;
|
|
11
|
+
export default filesRoutes;
|
|
12
|
+
//# sourceMappingURL=files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/routes/files.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGrD,UAAU,YAAY;IACpB,UAAU,EAAE,cAAc,CAAC;CAC5B;AAED,QAAA,MAAM,WAAW,EAAE,kBAAkB,CAAC,YAAY,CAMjD,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { bridge } from "../lib/bridge.js";
|
|
2
|
+
import { handleFileRequest } from "../file-api.js";
|
|
3
|
+
const filesRoutes = async (app, _opts) => {
|
|
4
|
+
// Register all methods so unsupported verbs reach the handler and get the
|
|
5
|
+
// explicit 405 response instead of Fastify's default 404.
|
|
6
|
+
app.all("/api/files/download", async (req, reply) => {
|
|
7
|
+
await bridge(req, reply, (request) => handleFileRequest(request));
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
export default filesRoutes;
|
|
11
|
+
//# sourceMappingURL=files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/routes/files.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAMnD,MAAM,WAAW,GAAqC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;IACzE,0EAA0E;IAC1E,0DAA0D;IAC1D,GAAG,CAAC,GAAG,CAAC,qBAAqB,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QAClD,MAAM,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/routes/health.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAKlD,QAAA,MAAM,WAAW,EAAE,kBAwClB,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { getRawDb } from "@nodetool-ai/models";
|
|
2
|
+
const serverStartTime = Date.now();
|
|
3
|
+
const healthRoute = async (app) => {
|
|
4
|
+
/**
|
|
5
|
+
* GET /health — detailed health check.
|
|
6
|
+
* Returns 200 when all services are healthy, 503 when degraded.
|
|
7
|
+
* No authentication required.
|
|
8
|
+
*/
|
|
9
|
+
app.get("/health", async (_req, reply) => {
|
|
10
|
+
let dbStatus = "ok";
|
|
11
|
+
try {
|
|
12
|
+
const raw = getRawDb();
|
|
13
|
+
// Fast integrity check — just verifies the connection is alive
|
|
14
|
+
raw.pragma("quick_check(1)");
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
dbStatus = "error";
|
|
18
|
+
}
|
|
19
|
+
const allOk = dbStatus === "ok";
|
|
20
|
+
const payload = {
|
|
21
|
+
status: allOk ? "ok" : "degraded",
|
|
22
|
+
timestamp: new Date().toISOString(),
|
|
23
|
+
uptime: Math.floor((Date.now() - serverStartTime) / 1000),
|
|
24
|
+
services: {
|
|
25
|
+
database: dbStatus,
|
|
26
|
+
server: "ok"
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
return reply.status(allOk ? 200 : 503).send(payload);
|
|
30
|
+
});
|
|
31
|
+
/**
|
|
32
|
+
* GET /ready — simple liveness probe.
|
|
33
|
+
* Always returns 200 if the server is accepting requests.
|
|
34
|
+
* No authentication required.
|
|
35
|
+
*/
|
|
36
|
+
app.get("/ready", async (_req, reply) => {
|
|
37
|
+
return reply.status(200).send({ status: "ok" });
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
export default healthRoute;
|
|
41
|
+
//# sourceMappingURL=health.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/routes/health.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAEnC,MAAM,WAAW,GAAuB,KAAK,EAAE,GAAG,EAAE,EAAE;IACpD;;;;OAIG;IACH,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACvC,IAAI,QAAQ,GAAmB,IAAI,CAAC;QAEpC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,QAAQ,EAAE,CAAC;YACvB,+DAA+D;YAC/D,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,GAAG,OAAO,CAAC;QACrB,CAAC;QAED,MAAM,KAAK,GAAG,QAAQ,KAAK,IAAI,CAAC;QAEhC,MAAM,OAAO,GAAG;YACd,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU;YACjC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,eAAe,CAAC,GAAG,IAAI,CAAC;YACzD,QAAQ,EAAE;gBACR,QAAQ,EAAE,QAAQ;gBAClB,MAAM,EAAE,IAAa;aACtB;SACF,CAAC;QAEF,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH;;;;OAIG;IACH,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACtC,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { FastifyPluginAsync } from "fastify";
|
|
2
|
+
import type { HttpApiOptions } from "../http-api.js";
|
|
3
|
+
interface RouteOptions {
|
|
4
|
+
apiOptions: HttpApiOptions;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Jobs REST plugin — only the trigger-job stub routes remain here.
|
|
8
|
+
* CRUD + cancel + running-all moved to the tRPC `jobs` router.
|
|
9
|
+
*
|
|
10
|
+
* Trigger workflows aren't available in standalone mode — these endpoints
|
|
11
|
+
* return empty lists / 501s and are kept on REST to avoid polluting the
|
|
12
|
+
* tRPC type surface with stub-only procedures.
|
|
13
|
+
*/
|
|
14
|
+
declare const jobsRoutes: FastifyPluginAsync<RouteOptions>;
|
|
15
|
+
export default jobsRoutes;
|
|
16
|
+
//# sourceMappingURL=jobs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../../src/routes/jobs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAOrD,UAAU,YAAY;IACpB,UAAU,EAAE,cAAc,CAAC;CAC5B;AAED;;;;;;;GAOG;AACH,QAAA,MAAM,UAAU,EAAE,kBAAkB,CAAC,YAAY,CAchD,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { bridge } from "../lib/bridge.js";
|
|
2
|
+
import { handleTriggersRunning, handleTriggerStart, handleTriggerStop } from "../http-api.js";
|
|
3
|
+
/**
|
|
4
|
+
* Jobs REST plugin — only the trigger-job stub routes remain here.
|
|
5
|
+
* CRUD + cancel + running-all moved to the tRPC `jobs` router.
|
|
6
|
+
*
|
|
7
|
+
* Trigger workflows aren't available in standalone mode — these endpoints
|
|
8
|
+
* return empty lists / 501s and are kept on REST to avoid polluting the
|
|
9
|
+
* tRPC type surface with stub-only procedures.
|
|
10
|
+
*/
|
|
11
|
+
const jobsRoutes = async (app) => {
|
|
12
|
+
app.get("/api/jobs/triggers/running", async (req, reply) => {
|
|
13
|
+
await bridge(req, reply, (request) => handleTriggersRunning(request));
|
|
14
|
+
});
|
|
15
|
+
app.post("/api/jobs/triggers/:id/start", async (req, reply) => {
|
|
16
|
+
const { id } = req.params;
|
|
17
|
+
await bridge(req, reply, (request) => handleTriggerStart(request, id));
|
|
18
|
+
});
|
|
19
|
+
app.post("/api/jobs/triggers/:id/stop", async (req, reply) => {
|
|
20
|
+
const { id } = req.params;
|
|
21
|
+
await bridge(req, reply, (request) => handleTriggerStop(request, id));
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
export default jobsRoutes;
|
|
25
|
+
//# sourceMappingURL=jobs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../src/routes/jobs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AAMxB;;;;;;;GAOG;AACH,MAAM,UAAU,GAAqC,KAAK,EAAE,GAAG,EAAE,EAAE;IACjE,GAAG,CAAC,GAAG,CAAC,4BAA4B,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACzD,MAAM,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,8BAA8B,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QAC5D,MAAM,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,MAAwB,CAAC;QAC5C,MAAM,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,6BAA6B,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QAC3D,MAAM,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,MAAwB,CAAC;QAC5C,MAAM,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { FastifyPluginAsync } from "fastify";
|
|
2
|
+
import type { HttpApiOptions } from "../http-api.js";
|
|
3
|
+
interface RouteOptions {
|
|
4
|
+
apiOptions: HttpApiOptions;
|
|
5
|
+
}
|
|
6
|
+
declare const nodesRoutes: FastifyPluginAsync<RouteOptions>;
|
|
7
|
+
export default nodesRoutes;
|
|
8
|
+
//# sourceMappingURL=nodes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../../src/routes/nodes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAKrD,UAAU,YAAY;IACpB,UAAU,EAAE,cAAc,CAAC;CAC5B;AAED,QAAA,MAAM,WAAW,EAAE,kBAAkB,CAAC,YAAY,CAyGjD,CAAC;AAqCF,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { bridge } from "../lib/bridge.js";
|
|
2
|
+
import { handleNodeMetadata } from "../http-api.js";
|
|
3
|
+
import { resolveKieDynamicSchema } from "@nodetool-ai/base-nodes";
|
|
4
|
+
import { ApiErrorCode, apiError } from "../error-codes.js";
|
|
5
|
+
const nodesRoutes = async (app, opts) => {
|
|
6
|
+
const { apiOptions } = opts;
|
|
7
|
+
/**
|
|
8
|
+
* /api/nodes/metadata — stays as REST (public, consumed at client boot).
|
|
9
|
+
* Must NOT require authentication — the frontend calls this before auth.
|
|
10
|
+
*/
|
|
11
|
+
app.get("/api/nodes/metadata", async (req, reply) => {
|
|
12
|
+
await bridge(req, reply, (request) => handleNodeMetadata(request, apiOptions));
|
|
13
|
+
});
|
|
14
|
+
/**
|
|
15
|
+
* Legacy alias for /api/nodes/metadata.
|
|
16
|
+
*/
|
|
17
|
+
app.get("/api/node/metadata", async (req, reply) => {
|
|
18
|
+
await bridge(req, reply, (request) => handleNodeMetadata(request, apiOptions));
|
|
19
|
+
});
|
|
20
|
+
/**
|
|
21
|
+
* KIE dynamic schema resolution — stays as REST (fast, stateless, no auth needed).
|
|
22
|
+
*/
|
|
23
|
+
app.post("/api/kie/resolve-dynamic-schema", async (req, reply) => {
|
|
24
|
+
const body = req.body;
|
|
25
|
+
const modelInfo = extractKieModelInfo(body);
|
|
26
|
+
if (typeof modelInfo !== "string" || !modelInfo.trim()) {
|
|
27
|
+
reply
|
|
28
|
+
.status(400)
|
|
29
|
+
.send(apiError(ApiErrorCode.INVALID_INPUT, "model_info must be a non-empty string"));
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
reply.send(resolveKieDynamicSchema(modelInfo.trim()));
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
reply
|
|
37
|
+
.status(400)
|
|
38
|
+
.send(apiError(ApiErrorCode.INVALID_INPUT, error instanceof Error ? error.message : String(error)));
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
/**
|
|
42
|
+
* Proxy ComfyUI /object_info through the backend to avoid CORS issues
|
|
43
|
+
* with remote hosts (e.g. RunPod Pods).
|
|
44
|
+
*/
|
|
45
|
+
app.get("/api/comfy/object_info", async (req, reply) => {
|
|
46
|
+
const host = req.query["host"]?.trim();
|
|
47
|
+
if (!host) {
|
|
48
|
+
reply.status(400).send({ error: "host query parameter is required" });
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
// Validate and normalise the host into a safe URL (prevents SSRF via
|
|
52
|
+
// non-HTTP schemes such as file://, ftp://, etc.).
|
|
53
|
+
let parsedUrl;
|
|
54
|
+
try {
|
|
55
|
+
const raw = host.startsWith("http") ? host : `http://${host}`;
|
|
56
|
+
parsedUrl = new URL(raw);
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
reply.status(400).send({ error: "Invalid host URL" });
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
if (parsedUrl.protocol !== "http:" && parsedUrl.protocol !== "https:") {
|
|
63
|
+
reply
|
|
64
|
+
.status(400)
|
|
65
|
+
.send({ error: "Only http and https hosts are supported" });
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
// Trim any trailing slashes without backtracking regex (avoids ReDoS).
|
|
69
|
+
let base = parsedUrl.origin + parsedUrl.pathname;
|
|
70
|
+
let end = base.length;
|
|
71
|
+
while (end > 0 && base[end - 1] === "/")
|
|
72
|
+
end--;
|
|
73
|
+
base = base.slice(0, end);
|
|
74
|
+
try {
|
|
75
|
+
const resp = await fetch(`${base}/object_info`);
|
|
76
|
+
if (!resp.ok) {
|
|
77
|
+
reply
|
|
78
|
+
.status(resp.status)
|
|
79
|
+
.send({ error: `ComfyUI returned ${resp.status}` });
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
const data = await resp.json();
|
|
83
|
+
reply.send(data);
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
reply.status(502).send({
|
|
87
|
+
error: `Cannot reach ComfyUI at ${base}: ${err instanceof Error ? err.message : String(err)}`
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
};
|
|
92
|
+
function extractKieModelInfo(body) {
|
|
93
|
+
if (Buffer.isBuffer(body)) {
|
|
94
|
+
const text = body.toString("utf8").trim();
|
|
95
|
+
if (!text) {
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
try {
|
|
99
|
+
return extractKieModelInfo(JSON.parse(text));
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return text;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
if (typeof body === "string") {
|
|
106
|
+
try {
|
|
107
|
+
const parsed = JSON.parse(body);
|
|
108
|
+
return extractKieModelInfo(parsed);
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
return body;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (!body || typeof body !== "object") {
|
|
115
|
+
return undefined;
|
|
116
|
+
}
|
|
117
|
+
const record = body;
|
|
118
|
+
return (record.model_info ??
|
|
119
|
+
record.modelInfo ??
|
|
120
|
+
extractKieModelInfo(record.properties) ??
|
|
121
|
+
extractKieModelInfo(record.body));
|
|
122
|
+
}
|
|
123
|
+
export default nodesRoutes;
|
|
124
|
+
//# sourceMappingURL=nodes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodes.js","sourceRoot":"","sources":["../../src/routes/nodes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { FastifyPluginAsync } from "fastify";
|
|
2
|
+
import type { HttpApiOptions } from "../http-api.js";
|
|
3
|
+
interface RouteOptions {
|
|
4
|
+
apiOptions: HttpApiOptions;
|
|
5
|
+
}
|
|
6
|
+
declare const oauthRoutes: FastifyPluginAsync<RouteOptions>;
|
|
7
|
+
export default oauthRoutes;
|
|
8
|
+
//# sourceMappingURL=oauth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../src/routes/oauth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAIrD,UAAU,YAAY;IACpB,UAAU,EAAE,cAAc,CAAC;CAC5B;AAED,QAAA,MAAM,WAAW,EAAE,kBAAkB,CAAC,YAAY,CAkBjD,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { bridge } from "../lib/bridge.js";
|
|
2
|
+
import { handleOAuthRequest } from "../oauth-api.js";
|
|
3
|
+
import { getUserId } from "../http-api.js";
|
|
4
|
+
const oauthRoutes = async (app, opts) => {
|
|
5
|
+
const { apiOptions } = opts;
|
|
6
|
+
app.all("/api/oauth/*", async (req, reply) => {
|
|
7
|
+
const url = new URL(req.url, "http://localhost");
|
|
8
|
+
await bridge(req, reply, async (request) => {
|
|
9
|
+
const res = await handleOAuthRequest(request, url.pathname, () => getUserId(request, apiOptions.userIdHeader ?? "x-user-id"));
|
|
10
|
+
return (res ??
|
|
11
|
+
new Response(JSON.stringify({ detail: "Not found" }), {
|
|
12
|
+
status: 404,
|
|
13
|
+
headers: { "content-type": "application/json" }
|
|
14
|
+
}));
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
export default oauthRoutes;
|
|
19
|
+
//# sourceMappingURL=oauth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/routes/oauth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAM3C,MAAM,WAAW,GAAqC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IACxE,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IAE5B,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QAC3C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;QACjD,MAAM,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACzC,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,OAAO,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,CAC/D,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,YAAY,IAAI,WAAW,CAAC,CAC3D,CAAC;YACF,OAAO,CACL,GAAG;gBACH,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE;oBACpD,MAAM,EAAE,GAAG;oBACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;iBAChD,CAAC,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { FastifyPluginAsync } from "fastify";
|
|
2
|
+
import type { HttpApiOptions } from "../http-api.js";
|
|
3
|
+
interface RouteOptions {
|
|
4
|
+
apiOptions: HttpApiOptions;
|
|
5
|
+
}
|
|
6
|
+
declare const openaiRoutes: FastifyPluginAsync<RouteOptions>;
|
|
7
|
+
export default openaiRoutes;
|
|
8
|
+
//# sourceMappingURL=openai.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/routes/openai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAIrD,UAAU,YAAY;IACpB,UAAU,EAAE,cAAc,CAAC;CAC5B;AAED,QAAA,MAAM,YAAY,EAAE,kBAAkB,CAAC,YAAY,CAsBlD,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { bridge } from "../lib/bridge.js";
|
|
2
|
+
import { handleOpenAIRequest } from "../openai-api.js";
|
|
3
|
+
import { getUserId } from "../http-api.js";
|
|
4
|
+
const openaiRoutes = async (app, opts) => {
|
|
5
|
+
const { apiOptions } = opts;
|
|
6
|
+
app.all("/v1/*", async (req, reply) => {
|
|
7
|
+
const url = new URL(req.url, "http://localhost");
|
|
8
|
+
await bridge(req, reply, async (request) => {
|
|
9
|
+
const userId = getUserId(request, apiOptions.userIdHeader ?? "x-user-id");
|
|
10
|
+
const res = await handleOpenAIRequest(request, url.pathname, userId, apiOptions.openai);
|
|
11
|
+
return (res ??
|
|
12
|
+
new Response(JSON.stringify({ detail: "Not found" }), {
|
|
13
|
+
status: 404,
|
|
14
|
+
headers: { "content-type": "application/json" }
|
|
15
|
+
}));
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
export default openaiRoutes;
|
|
20
|
+
//# sourceMappingURL=openai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/routes/openai.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAM3C,MAAM,YAAY,GAAqC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IACzE,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IAE5B,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACpC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;QACjD,MAAM,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACzC,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,YAAY,IAAI,WAAW,CAAC,CAAC;YAC1E,MAAM,GAAG,GAAG,MAAM,mBAAmB,CACnC,OAAO,EACP,GAAG,CAAC,QAAQ,EACZ,MAAM,EACN,UAAU,CAAC,MAAM,CAClB,CAAC;YACF,OAAO,CACL,GAAG;gBACH,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE;oBACpD,MAAM,EAAE,GAAG;oBACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;iBAChD,CAAC,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Binary-only REST routes for storage.
|
|
3
|
+
* JSON ops (list, metadata, delete) have moved to the tRPC `storage` router.
|
|
4
|
+
*/
|
|
5
|
+
import type { FastifyPluginAsync } from "fastify";
|
|
6
|
+
import type { HttpApiOptions } from "../http-api.js";
|
|
7
|
+
interface RouteOptions {
|
|
8
|
+
apiOptions: HttpApiOptions;
|
|
9
|
+
}
|
|
10
|
+
declare const storageRoutes: FastifyPluginAsync<RouteOptions>;
|
|
11
|
+
export default storageRoutes;
|
|
12
|
+
//# sourceMappingURL=storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/routes/storage.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGrD,UAAU,YAAY;IACpB,UAAU,EAAE,cAAc,CAAC;CAC5B;AAED,QAAA,MAAM,aAAa,EAAE,kBAAkB,CAAC,YAAY,CASnD,CAAC;AAEF,eAAe,aAAa,CAAC"}
|