@clappstore/connect 0.8.1 → 0.8.2
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/index.js +95 -126
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +267 -287
- package/dist/server.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { resolve, dirname } from "node:path";
|
|
3
3
|
import { homedir, networkInterfaces } from "node:os";
|
|
4
|
+
import { writeFile } from "node:fs/promises";
|
|
4
5
|
import QRCode from "qrcode";
|
|
5
6
|
import { mkdirSync, existsSync, statSync, chownSync, writeFileSync } from "node:fs";
|
|
6
7
|
import { spawnSync } from "node:child_process";
|
|
@@ -31,36 +32,98 @@ function parseArgs(args) {
|
|
|
31
32
|
}
|
|
32
33
|
return { opts, flags };
|
|
33
34
|
}
|
|
35
|
+
// --- Agent session helpers ---
|
|
36
|
+
function createAgentClient(session, agentToken, label = "acp") {
|
|
37
|
+
return new AgentClient({
|
|
38
|
+
session,
|
|
39
|
+
agentToken,
|
|
40
|
+
onError: (err) => console.error(`[${label}]`, err.message),
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
async function startAgentClients(clients) {
|
|
44
|
+
try {
|
|
45
|
+
await Promise.all(clients.map((c) => c.start()));
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
console.error(`⚠️ ACP failed to start: ${err instanceof Error ? err.message : err}`);
|
|
50
|
+
console.error(" Intent processing will not work until ACP is available.");
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// --- QR code / connection info ---
|
|
55
|
+
async function generateConnectAssets(port, accessToken, openclawHome) {
|
|
56
|
+
const localIP = getLocalIP();
|
|
57
|
+
const serverURL = `http://${localIP}:${port}`;
|
|
58
|
+
const qrPayload = JSON.stringify({ url: serverURL, token: accessToken ?? "" });
|
|
59
|
+
// Terminal QR
|
|
60
|
+
const qr = await QRCode.toString(qrPayload, { type: "terminal", small: true });
|
|
61
|
+
console.log(`\n📱 Scan to connect the Clapps app:\n${qr}`);
|
|
62
|
+
console.log(` Or visit ${serverURL}/connect in a browser\n`);
|
|
63
|
+
// Save PNG + connection info for the agent
|
|
64
|
+
const uiDir = resolve(openclawHome, ".openclaw", "workspace", "ui");
|
|
65
|
+
const qrPngPath = resolve(uiDir, "connect-qr.png");
|
|
66
|
+
await QRCode.toFile(qrPngPath, qrPayload, { width: 400, margin: 2 });
|
|
67
|
+
await writeFile(resolve(uiDir, "connect-info.json"), JSON.stringify({
|
|
68
|
+
url: serverURL,
|
|
69
|
+
token: accessToken ? formatToken(accessToken) : null,
|
|
70
|
+
connectPage: `${serverURL}/connect`,
|
|
71
|
+
qrCodePath: qrPngPath,
|
|
72
|
+
}, null, 2));
|
|
73
|
+
}
|
|
74
|
+
function getLocalIP() {
|
|
75
|
+
const nets = networkInterfaces();
|
|
76
|
+
for (const name of Object.keys(nets)) {
|
|
77
|
+
for (const net of nets[name] ?? []) {
|
|
78
|
+
if (net.family === "IPv4" && !net.internal) {
|
|
79
|
+
return net.address;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return "localhost";
|
|
84
|
+
}
|
|
85
|
+
// --- Startup info ---
|
|
86
|
+
function printStartupInfo(stateDir, viewsDir, templatesDir, openclawHome, accessToken) {
|
|
87
|
+
console.log(`📁 State dir: ${stateDir}`);
|
|
88
|
+
console.log(`📄 Views dir: ${viewsDir}`);
|
|
89
|
+
console.log(`📦 Templates dir: ${templatesDir}`);
|
|
90
|
+
if (openclawHome !== homedir()) {
|
|
91
|
+
console.log(`🏠 OpenClaw home: ${openclawHome}`);
|
|
92
|
+
}
|
|
93
|
+
if (accessToken) {
|
|
94
|
+
console.log(`🔐 Access code: ${formatToken(accessToken)}`);
|
|
95
|
+
console.log(` Saved to ~/.openclaw/workspace/ui/.access-token`);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
console.log(`⚠️ Auth disabled (--no-auth). Server is open to all.`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// --- Main ---
|
|
34
102
|
async function main() {
|
|
35
103
|
const { opts, flags } = parseArgs(process.argv.slice(2));
|
|
36
104
|
const port = parseInt(opts.port ?? "3080", 10);
|
|
37
105
|
const agentToken = opts["agent-token"];
|
|
38
106
|
const session = opts.session ?? "agent:main:main";
|
|
39
|
-
// openclaw home: where openclaw config lives (may differ from process homedir
|
|
40
|
-
// when clapps-connect runs as root but the gateway runs as a different user)
|
|
41
107
|
const openclawHome = opts["openclaw-home"] ?? process.env.OPENCLAW_HOME ?? homedir();
|
|
42
|
-
// Initialize access token for auth
|
|
43
108
|
const accessToken = initAccessToken({
|
|
44
109
|
token: opts.token,
|
|
45
110
|
noAuth: flags["no-auth"],
|
|
46
111
|
});
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
const viewsDir = opts["views-dir"] ??
|
|
50
|
-
resolve(openclawHome, ".openclaw", "workspace", "ui", "views");
|
|
112
|
+
// Directories
|
|
113
|
+
const stateDir = opts["state-dir"] ?? resolve(openclawHome, ".openclaw", "workspace", "ui", "state");
|
|
114
|
+
const viewsDir = opts["views-dir"] ?? resolve(openclawHome, ".openclaw", "workspace", "ui", "views");
|
|
51
115
|
const templatesDir = resolve(openclawHome, ".openclaw", "workspace", "ui", "templates");
|
|
52
|
-
// Ensure directories exist
|
|
53
116
|
mkdirSync(stateDir, { recursive: true });
|
|
54
117
|
mkdirSync(viewsDir, { recursive: true });
|
|
55
118
|
mkdirSync(templatesDir, { recursive: true });
|
|
56
|
-
//
|
|
119
|
+
// State store + disk defaults
|
|
57
120
|
const store = new StateStore();
|
|
58
|
-
|
|
121
|
+
const authPath = resolve(openclawHome, ".openclaw", "agents", "main", "agent", "auth-profiles.json");
|
|
59
122
|
seedDefaults(viewsDir, stateDir);
|
|
60
|
-
checkAuthStatus(stateDir,
|
|
123
|
+
checkAuthStatus(stateDir, authPath);
|
|
124
|
+
// Settings handler
|
|
61
125
|
const needsOwnershipFix = openclawHome !== homedir();
|
|
62
126
|
const configPath = resolve(openclawHome, ".openclaw", "openclaw.json");
|
|
63
|
-
const authPath = resolve(openclawHome, ".openclaw", "agents", "main", "agent", "auth-profiles.json");
|
|
64
127
|
const settingsHandler = new SettingsHandler({
|
|
65
128
|
stateDir,
|
|
66
129
|
store,
|
|
@@ -76,66 +139,23 @@ async function main() {
|
|
|
76
139
|
catch { /* best effort */ }
|
|
77
140
|
} : undefined,
|
|
78
141
|
onModelDefaultChanged: needsOwnershipFix ? () => {
|
|
79
|
-
spawnSync("systemctl", ["restart", "openclaw"], {
|
|
80
|
-
encoding: "utf-8",
|
|
81
|
-
timeout: 15_000,
|
|
82
|
-
});
|
|
83
|
-
// Wait for gateway to come back
|
|
142
|
+
spawnSync("systemctl", ["restart", "openclaw"], { encoding: "utf-8", timeout: 15_000 });
|
|
84
143
|
spawnSync("sleep", ["3"]);
|
|
85
144
|
} : undefined,
|
|
86
145
|
});
|
|
87
146
|
settingsHandler.writeSettingsState();
|
|
88
|
-
//
|
|
89
|
-
const agentClient =
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
// 4. Start separate ACP subprocess for chat (dedicated session)
|
|
95
|
-
const chatSession = "agent:main:clapps-chat";
|
|
96
|
-
const chatAgentClient = new AgentClient({
|
|
97
|
-
session: chatSession,
|
|
98
|
-
agentToken,
|
|
99
|
-
onError: (err) => console.error("[acp:chat]", err.message),
|
|
100
|
-
});
|
|
101
|
-
// 5. Start separate ACP subprocess for title generation (isolated session)
|
|
102
|
-
const titleSession = "agent:main:clapps-title";
|
|
103
|
-
const titleAgentClient = new AgentClient({
|
|
104
|
-
session: titleSession,
|
|
105
|
-
agentToken,
|
|
106
|
-
onError: (err) => console.error("[acp:title]", err.message),
|
|
107
|
-
});
|
|
108
|
-
let agentStarted = false;
|
|
109
|
-
try {
|
|
110
|
-
await agentClient.start();
|
|
111
|
-
await chatAgentClient.start();
|
|
112
|
-
await titleAgentClient.start();
|
|
113
|
-
agentStarted = true;
|
|
114
|
-
}
|
|
115
|
-
catch (err) {
|
|
116
|
-
console.error(`⚠️ ACP failed to start: ${err instanceof Error ? err.message : err}`);
|
|
117
|
-
console.error(" Intent processing will not work until ACP is available.");
|
|
118
|
-
}
|
|
119
|
-
// Create chat handler (uses dedicated chat and title sessions)
|
|
147
|
+
// ACP agent sessions
|
|
148
|
+
const agentClient = createAgentClient(session, agentToken, "acp");
|
|
149
|
+
const chatAgentClient = createAgentClient("agent:main:clapps-chat", agentToken, "acp:chat");
|
|
150
|
+
const titleAgentClient = createAgentClient("agent:main:clapps-title", agentToken, "acp:title");
|
|
151
|
+
const agentStarted = await startAgentClients([agentClient, chatAgentClient, titleAgentClient]);
|
|
152
|
+
// Handlers
|
|
120
153
|
const chatHandler = new ChatHandler({ stateDir, store, agentClient: chatAgentClient, titleAgentClient });
|
|
121
|
-
|
|
122
|
-
const
|
|
123
|
-
|
|
124
|
-
store,
|
|
125
|
-
openclawHome,
|
|
126
|
-
});
|
|
127
|
-
// Create OAuth handler (uses openclawHome for auth-profiles.json)
|
|
128
|
-
const oauthHandler = new OAuthHandler(resolve(openclawHome, ".openclaw", "agents", "main", "agent", "auth-profiles.json"));
|
|
129
|
-
// 4. Create agent handler (syncs disk → store after intents)
|
|
130
|
-
const agentHandler = new AgentHandler({
|
|
131
|
-
agentClient,
|
|
132
|
-
store,
|
|
133
|
-
stateDir,
|
|
134
|
-
viewsDir,
|
|
135
|
-
});
|
|
136
|
-
// 5. Initial sync: load all disk state into the store
|
|
154
|
+
const slackHandler = new SlackHandler({ stateDir, store, openclawHome });
|
|
155
|
+
const oauthHandler = new OAuthHandler(authPath);
|
|
156
|
+
const agentHandler = new AgentHandler({ agentClient, store, stateDir, viewsDir });
|
|
137
157
|
await agentHandler.syncToStore();
|
|
138
|
-
//
|
|
158
|
+
// Clapp handlers (deterministic intent handlers from disk)
|
|
139
159
|
const clappsDir = resolve(openclawHome, ".openclaw", "clapps");
|
|
140
160
|
const clappHandlerCtx = {
|
|
141
161
|
stateDir,
|
|
@@ -146,33 +166,26 @@ async function main() {
|
|
|
146
166
|
checkAuthStatus: () => checkAuthStatus(stateDir, authPath),
|
|
147
167
|
};
|
|
148
168
|
let clappHandlers = await loadClappHandlers(clappsDir, clappHandlerCtx);
|
|
149
|
-
//
|
|
169
|
+
// HTTP + WebSocket server
|
|
150
170
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
151
|
-
const staticDir = resolve(__dirname, "..", "web-app");
|
|
152
|
-
// 8. Start HTTP + WebSocket server
|
|
153
171
|
const server = startServer({
|
|
154
172
|
port,
|
|
155
173
|
store,
|
|
156
|
-
staticDir,
|
|
174
|
+
staticDir: resolve(__dirname, "..", "web-app"),
|
|
157
175
|
accessToken,
|
|
158
176
|
oauthHandler,
|
|
159
177
|
openclawHome,
|
|
160
178
|
templatesDir,
|
|
161
179
|
stateDir,
|
|
162
180
|
agentConnected: () => agentStarted,
|
|
163
|
-
onConnect: () =>
|
|
164
|
-
// Refresh settings state when a client connects (catches external changes)
|
|
165
|
-
settingsHandler.refreshSettingsState();
|
|
166
|
-
},
|
|
181
|
+
onConnect: () => settingsHandler.refreshSettingsState(),
|
|
167
182
|
onIntent: (intent, _context) => {
|
|
168
|
-
// Let handlers intercept first
|
|
169
183
|
if (settingsHandler.handleIntent(intent))
|
|
170
184
|
return;
|
|
171
185
|
if (chatHandler.handleIntent(intent))
|
|
172
186
|
return;
|
|
173
187
|
if (slackHandler.handleIntent(intent))
|
|
174
188
|
return;
|
|
175
|
-
// Handle handler reload
|
|
176
189
|
if (intent.intent === "system.reloadHandlers") {
|
|
177
190
|
loadClappHandlers(clappsDir, clappHandlerCtx).then((handlers) => {
|
|
178
191
|
clappHandlers = handlers;
|
|
@@ -180,56 +193,23 @@ async function main() {
|
|
|
180
193
|
});
|
|
181
194
|
return;
|
|
182
195
|
}
|
|
183
|
-
// Try clapp handlers
|
|
184
196
|
for (const handler of clappHandlers) {
|
|
185
197
|
if (handler.handleIntent(intent))
|
|
186
198
|
return;
|
|
187
199
|
}
|
|
188
|
-
// Forward to agent
|
|
189
200
|
agentHandler.handleIntent(intent).catch((err) => {
|
|
190
201
|
console.error(`[intent] ${err.message}`);
|
|
191
202
|
});
|
|
192
203
|
},
|
|
193
204
|
});
|
|
194
|
-
//
|
|
195
|
-
const refreshInterval = setInterval(() =>
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
console.log(`📁 State dir: ${stateDir}`);
|
|
199
|
-
console.log(`📄 Views dir: ${viewsDir}`);
|
|
200
|
-
console.log(`📦 Templates dir: ${templatesDir}`);
|
|
201
|
-
if (openclawHome !== homedir()) {
|
|
202
|
-
console.log(`🏠 OpenClaw home: ${openclawHome}`);
|
|
203
|
-
}
|
|
204
|
-
if (accessToken) {
|
|
205
|
-
console.log(`🔐 Access code: ${formatToken(accessToken)}`);
|
|
206
|
-
console.log(` Saved to ~/.openclaw/workspace/ui/.access-token`);
|
|
207
|
-
}
|
|
208
|
-
else {
|
|
209
|
-
console.log(`⚠️ Auth disabled (--no-auth). Server is open to all.`);
|
|
210
|
-
}
|
|
211
|
-
// Generate QR code for mobile app setup
|
|
212
|
-
const localIP = getLocalIP();
|
|
213
|
-
const serverURL = `http://${localIP}:${port}`;
|
|
214
|
-
const qrPayload = JSON.stringify({ url: serverURL, token: accessToken ?? "" });
|
|
205
|
+
// Periodic settings refresh
|
|
206
|
+
const refreshInterval = setInterval(() => settingsHandler.refreshSettingsState(), 60_000);
|
|
207
|
+
// Startup output
|
|
208
|
+
printStartupInfo(stateDir, viewsDir, templatesDir, openclawHome, accessToken);
|
|
215
209
|
try {
|
|
216
|
-
|
|
217
|
-
const qr = await QRCode.toString(qrPayload, { type: "terminal", small: true });
|
|
218
|
-
console.log(`\n📱 Scan to connect the Clapps app:\n${qr}`);
|
|
219
|
-
console.log(` Or visit ${serverURL}/connect in a browser\n`);
|
|
220
|
-
// Save QR code as PNG + connection info for the agent to send
|
|
221
|
-
const uiDir = resolve(openclawHome, ".openclaw", "workspace", "ui");
|
|
222
|
-
const qrPngPath = resolve(uiDir, "connect-qr.png");
|
|
223
|
-
await QRCode.toFile(qrPngPath, qrPayload, { width: 400, margin: 2 });
|
|
224
|
-
const { writeFile: writeFileAsync } = await import("node:fs/promises");
|
|
225
|
-
await writeFileAsync(resolve(uiDir, "connect-info.json"), JSON.stringify({
|
|
226
|
-
url: serverURL,
|
|
227
|
-
token: accessToken ? formatToken(accessToken) : null,
|
|
228
|
-
connectPage: `${serverURL}/connect`,
|
|
229
|
-
qrCodePath: qrPngPath,
|
|
230
|
-
}, null, 2));
|
|
210
|
+
await generateConnectAssets(port, accessToken, openclawHome);
|
|
231
211
|
}
|
|
232
|
-
catch { /*
|
|
212
|
+
catch { /* QR generation failed, not critical */ }
|
|
233
213
|
// Graceful shutdown
|
|
234
214
|
process.on("SIGINT", () => {
|
|
235
215
|
console.log("\nShutting down...");
|
|
@@ -241,17 +221,6 @@ async function main() {
|
|
|
241
221
|
process.exit(0);
|
|
242
222
|
});
|
|
243
223
|
}
|
|
244
|
-
function getLocalIP() {
|
|
245
|
-
const nets = networkInterfaces();
|
|
246
|
-
for (const name of Object.keys(nets)) {
|
|
247
|
-
for (const net of nets[name] ?? []) {
|
|
248
|
-
if (net.family === "IPv4" && !net.internal) {
|
|
249
|
-
return net.address;
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
return "localhost";
|
|
254
|
-
}
|
|
255
224
|
main().catch((err) => {
|
|
256
225
|
console.error(err);
|
|
257
226
|
process.exit(1);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACpF,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAGtD,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,IAAI,GAA2B,EAAE,CAAC;IACxC,MAAM,KAAK,GAA4B,EAAE,CAAC;IAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YACxB,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;QAC1B,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACvD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACjC,CAAC,EAAE,CAAC;QACN,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACzB,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,KAAK,aAAa,EAAkB,MAAM,kBAAkB,CAAC;AAQlF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,KAAK,aAAa,EAAkB,MAAM,kBAAkB,CAAC;AAQlF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAKlD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,UAAU,CAAC;IAClB,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AA0DD,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG;IAAE,KAAK,EAAE,MAAM,IAAI,CAAA;CAAE,CA4DzE"}
|
package/dist/server.js
CHANGED
|
@@ -7,6 +7,24 @@ import { StateStore } from "./state-store.js";
|
|
|
7
7
|
import { authenticateRequest, authenticateWsUpgrade, checkRateLimit, setSessionCookie, getLoginPageHtml, } from "./auth.js";
|
|
8
8
|
import { OAuthHandler } from "./oauth-handler.js";
|
|
9
9
|
import QRCode from "qrcode";
|
|
10
|
+
// --- Response helpers ---
|
|
11
|
+
function json(res, data) {
|
|
12
|
+
res.writeHead(200, { "Content-Type": "application/json" });
|
|
13
|
+
res.end(JSON.stringify(data));
|
|
14
|
+
}
|
|
15
|
+
function jsonError(res, status, error) {
|
|
16
|
+
res.writeHead(status, { "Content-Type": "application/json" });
|
|
17
|
+
res.end(JSON.stringify({ error }));
|
|
18
|
+
}
|
|
19
|
+
function readBody(req) {
|
|
20
|
+
return new Promise((resolve, reject) => {
|
|
21
|
+
const chunks = [];
|
|
22
|
+
req.on("data", (chunk) => chunks.push(chunk));
|
|
23
|
+
req.on("end", () => resolve(Buffer.concat(chunks).toString()));
|
|
24
|
+
req.on("error", reject);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
// --- Server entrypoint ---
|
|
10
28
|
const MIME_TYPES = {
|
|
11
29
|
".html": "text/html",
|
|
12
30
|
".js": "text/javascript",
|
|
@@ -27,14 +45,24 @@ const MIME_TYPES = {
|
|
|
27
45
|
".woff2": "font/woff2",
|
|
28
46
|
};
|
|
29
47
|
export function startServer(options) {
|
|
30
|
-
const { port, store, onIntent,
|
|
48
|
+
const { port, store, onIntent, onConnect, accessToken, oauthHandler } = options;
|
|
49
|
+
const ctx = {
|
|
50
|
+
store,
|
|
51
|
+
onIntent,
|
|
52
|
+
agentConnected: options.agentConnected,
|
|
53
|
+
accessToken: accessToken ?? null,
|
|
54
|
+
oauthHandler,
|
|
55
|
+
openclawHome: options.openclawHome,
|
|
56
|
+
templatesDir: options.templatesDir,
|
|
57
|
+
stateDir: options.stateDir,
|
|
58
|
+
staticDir: options.staticDir,
|
|
59
|
+
};
|
|
31
60
|
const server = createServer((req, res) => {
|
|
32
|
-
handleRequest(req, res,
|
|
61
|
+
handleRequest(req, res, ctx);
|
|
33
62
|
});
|
|
34
|
-
// Use noServer mode so we can authenticate WS upgrades
|
|
35
63
|
const wss = new WebSocketServer({ noServer: true });
|
|
36
64
|
server.on("upgrade", (req, socket, head) => {
|
|
37
|
-
if (!authenticateWsUpgrade(req, accessToken
|
|
65
|
+
if (!authenticateWsUpgrade(req, ctx.accessToken)) {
|
|
38
66
|
socket.write("HTTP/1.1 401 Unauthorized\r\n\r\n");
|
|
39
67
|
socket.destroy();
|
|
40
68
|
return;
|
|
@@ -45,7 +73,6 @@ export function startServer(options) {
|
|
|
45
73
|
});
|
|
46
74
|
wss.on("connection", (ws) => {
|
|
47
75
|
const client = store.addClient(ws);
|
|
48
|
-
// Notify that a client connected (for state refresh)
|
|
49
76
|
onConnect?.();
|
|
50
77
|
ws.on("message", (raw) => {
|
|
51
78
|
try {
|
|
@@ -97,12 +124,12 @@ function handleWsMessage(msg, client, store, onIntent) {
|
|
|
97
124
|
}
|
|
98
125
|
}
|
|
99
126
|
}
|
|
100
|
-
|
|
127
|
+
// --- Request router ---
|
|
128
|
+
async function handleRequest(req, res, ctx) {
|
|
101
129
|
const url = new URL(req.url ?? "/", `http://${req.headers.host}`);
|
|
102
130
|
const path = url.pathname;
|
|
103
|
-
// CORS
|
|
104
|
-
if (accessToken != null) {
|
|
105
|
-
// With auth: reflect origin and allow credentials
|
|
131
|
+
// CORS
|
|
132
|
+
if (ctx.accessToken != null) {
|
|
106
133
|
const origin = req.headers.origin;
|
|
107
134
|
if (origin)
|
|
108
135
|
res.setHeader("Access-Control-Allow-Origin", origin);
|
|
@@ -120,9 +147,8 @@ async function handleRequest(req, res, store, onIntent, staticDir, agentConnecte
|
|
|
120
147
|
}
|
|
121
148
|
// Auth-exempt routes
|
|
122
149
|
if (path === "/api/health") {
|
|
123
|
-
return
|
|
150
|
+
return handleHealth(res, ctx);
|
|
124
151
|
}
|
|
125
|
-
// Login routes
|
|
126
152
|
if (path === "/auth/login") {
|
|
127
153
|
if (req.method === "GET") {
|
|
128
154
|
res.writeHead(200, { "Content-Type": "text/html" });
|
|
@@ -130,326 +156,302 @@ async function handleRequest(req, res, store, onIntent, staticDir, agentConnecte
|
|
|
130
156
|
return;
|
|
131
157
|
}
|
|
132
158
|
if (req.method === "POST") {
|
|
133
|
-
return handleLogin(req, res, accessToken);
|
|
159
|
+
return handleLogin(req, res, ctx.accessToken);
|
|
134
160
|
}
|
|
135
161
|
}
|
|
136
|
-
// Auth check
|
|
137
|
-
if (accessToken != null) {
|
|
138
|
-
const { authenticated } = authenticateRequest(req, accessToken);
|
|
162
|
+
// Auth check
|
|
163
|
+
if (ctx.accessToken != null) {
|
|
164
|
+
const { authenticated } = authenticateRequest(req, ctx.accessToken);
|
|
139
165
|
if (!authenticated) {
|
|
140
166
|
if (path.startsWith("/api/")) {
|
|
141
|
-
res
|
|
142
|
-
res.end(JSON.stringify({ error: "unauthorized" }));
|
|
167
|
+
jsonError(res, 401, "unauthorized");
|
|
143
168
|
return;
|
|
144
169
|
}
|
|
145
|
-
// Browser routes → show login page
|
|
146
170
|
res.writeHead(401, { "Content-Type": "text/html" });
|
|
147
171
|
res.end(getLoginPageHtml());
|
|
148
172
|
return;
|
|
149
173
|
}
|
|
150
174
|
}
|
|
151
|
-
//
|
|
152
|
-
if (path === "/api/oauth/init" && oauthHandler) {
|
|
153
|
-
return handleOAuthInit(req, res, oauthHandler);
|
|
175
|
+
// Authenticated routes
|
|
176
|
+
if (path === "/api/oauth/init" && ctx.oauthHandler) {
|
|
177
|
+
return handleOAuthInit(req, res, ctx.oauthHandler);
|
|
154
178
|
}
|
|
155
|
-
if (path === "/api/oauth/callback" && oauthHandler) {
|
|
156
|
-
return handleOAuthCallback(req, res, oauthHandler);
|
|
179
|
+
if (path === "/api/oauth/callback" && ctx.oauthHandler) {
|
|
180
|
+
return handleOAuthCallback(req, res, ctx.oauthHandler);
|
|
157
181
|
}
|
|
158
|
-
// Connect page (QR code for mobile app setup)
|
|
159
182
|
if (path === "/connect") {
|
|
160
|
-
return handleConnectPage(req, res, accessToken);
|
|
183
|
+
return handleConnectPage(req, res, ctx.accessToken);
|
|
161
184
|
}
|
|
162
185
|
// API routes
|
|
163
186
|
if (path.startsWith("/api/")) {
|
|
164
|
-
return
|
|
187
|
+
return routeApi(req, res, path, ctx);
|
|
165
188
|
}
|
|
166
|
-
//
|
|
167
|
-
if (staticDir) {
|
|
168
|
-
return serveStatic(
|
|
189
|
+
// Static SPA
|
|
190
|
+
if (ctx.staticDir) {
|
|
191
|
+
return serveStatic(res, path, ctx.staticDir);
|
|
169
192
|
}
|
|
170
193
|
res.writeHead(404, { "Content-Type": "text/plain" });
|
|
171
194
|
res.end("Not Found");
|
|
172
195
|
}
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
if (
|
|
176
|
-
res
|
|
177
|
-
res.end();
|
|
178
|
-
return;
|
|
196
|
+
// --- API router (dispatches to individual handlers) ---
|
|
197
|
+
async function routeApi(req, res, path, ctx) {
|
|
198
|
+
if (path === "/api/apps" && req.method === "GET") {
|
|
199
|
+
return handleApps(res, ctx);
|
|
179
200
|
}
|
|
180
|
-
const
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
if (!checkRateLimit(ip)) {
|
|
184
|
-
res.writeHead(429, { "Content-Type": "text/html" });
|
|
185
|
-
res.end(getLoginPageHtml("Too many attempts. Please wait a minute."));
|
|
186
|
-
return;
|
|
201
|
+
const stateMatch = path.match(/^\/api\/state\/([^/]+)$/);
|
|
202
|
+
if (stateMatch && req.method === "GET") {
|
|
203
|
+
return handleState(res, ctx, stateMatch[1]);
|
|
187
204
|
}
|
|
188
|
-
const
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
const remember = params.get("remember") === "1";
|
|
192
|
-
// Normalize: strip dashes for comparison (user may paste formatted code)
|
|
193
|
-
const normalized = password.replace(/-/g, "");
|
|
194
|
-
if (normalized !== accessToken) {
|
|
195
|
-
res.writeHead(401, { "Content-Type": "text/html" });
|
|
196
|
-
res.end(getLoginPageHtml("Invalid access code."));
|
|
197
|
-
return;
|
|
205
|
+
const viewMatch = path.match(/^\/api\/views\/([^/]+)$/);
|
|
206
|
+
if (viewMatch && req.method === "GET") {
|
|
207
|
+
return handleView(res, ctx, viewMatch[1]);
|
|
198
208
|
}
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
209
|
+
if (path === "/api/templates" && req.method === "POST") {
|
|
210
|
+
return handleTemplates(req, res, ctx);
|
|
211
|
+
}
|
|
212
|
+
if (path === "/api/intent" && req.method === "POST") {
|
|
213
|
+
return handleIntentRoute(req, res, ctx);
|
|
214
|
+
}
|
|
215
|
+
if (path === "/api/health" && req.method === "GET") {
|
|
216
|
+
return handleHealth(res, ctx);
|
|
217
|
+
}
|
|
218
|
+
const assetMatch = path.match(/^\/api\/chat-assets\/([^/]+)\/([^/]+)$/);
|
|
219
|
+
if (assetMatch && req.method === "GET") {
|
|
220
|
+
return handleChatAsset(res, ctx, decodeURIComponent(assetMatch[1]), decodeURIComponent(assetMatch[2]));
|
|
221
|
+
}
|
|
222
|
+
jsonError(res, 404, "not found");
|
|
202
223
|
}
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
allApps.push({ id: m.id, name: m.name, icon: m.icon, color: m.color });
|
|
224
|
-
}
|
|
225
|
-
catch { /* skip invalid manifests */ }
|
|
224
|
+
// --- Individual API route handlers ---
|
|
225
|
+
async function handleApps(res, ctx) {
|
|
226
|
+
const storeApps = ctx.store.getApps();
|
|
227
|
+
if (!ctx.templatesDir || !existsSync(ctx.templatesDir)) {
|
|
228
|
+
json(res, storeApps);
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
try {
|
|
232
|
+
const dirs = await readdir(ctx.templatesDir, { withFileTypes: true });
|
|
233
|
+
const storeIds = new Set(storeApps.map((a) => a.id));
|
|
234
|
+
const allApps = [...storeApps];
|
|
235
|
+
for (const dir of dirs) {
|
|
236
|
+
if (!dir.isDirectory() || storeIds.has(dir.name))
|
|
237
|
+
continue;
|
|
238
|
+
const mPath = resolve(ctx.templatesDir, dir.name, "manifest.json");
|
|
239
|
+
if (!existsSync(mPath))
|
|
240
|
+
continue;
|
|
241
|
+
try {
|
|
242
|
+
const m = JSON.parse(await readFile(mPath, "utf-8"));
|
|
243
|
+
allApps.push({ id: m.id, name: m.name, icon: m.icon, color: m.color });
|
|
226
244
|
}
|
|
227
|
-
|
|
228
|
-
}
|
|
229
|
-
catch {
|
|
230
|
-
json(res, storeApps);
|
|
245
|
+
catch { /* skip invalid manifests */ }
|
|
231
246
|
}
|
|
247
|
+
json(res, allApps);
|
|
248
|
+
}
|
|
249
|
+
catch {
|
|
250
|
+
json(res, storeApps);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
async function handleState(res, ctx, clappId) {
|
|
254
|
+
const state = ctx.store.getState(clappId);
|
|
255
|
+
if (!state) {
|
|
256
|
+
jsonError(res, 404, "not found");
|
|
232
257
|
return;
|
|
233
258
|
}
|
|
234
|
-
//
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
const views = {};
|
|
251
|
-
for (const file of viewFiles) {
|
|
252
|
-
if (!file.endsWith(".json"))
|
|
253
|
-
continue;
|
|
254
|
-
const content = await readFile(resolve(viewsPath, file), "utf-8");
|
|
255
|
-
views[file.replace(/\.json$/, "")] = JSON.parse(content);
|
|
256
|
-
}
|
|
257
|
-
if (Object.keys(views).length > 0) {
|
|
258
|
-
json(res, { ...state, _views: views });
|
|
259
|
-
return;
|
|
260
|
-
}
|
|
259
|
+
// Inject _views from templates if available
|
|
260
|
+
if (ctx.templatesDir) {
|
|
261
|
+
const viewsPath = resolve(ctx.templatesDir, clappId, "views");
|
|
262
|
+
if (existsSync(viewsPath)) {
|
|
263
|
+
try {
|
|
264
|
+
const viewFiles = await readdir(viewsPath);
|
|
265
|
+
const views = {};
|
|
266
|
+
for (const file of viewFiles) {
|
|
267
|
+
if (!file.endsWith(".json"))
|
|
268
|
+
continue;
|
|
269
|
+
const content = await readFile(resolve(viewsPath, file), "utf-8");
|
|
270
|
+
views[file.replace(/\.json$/, "")] = JSON.parse(content);
|
|
271
|
+
}
|
|
272
|
+
if (Object.keys(views).length > 0) {
|
|
273
|
+
json(res, { ...state, _views: views });
|
|
274
|
+
return;
|
|
261
275
|
}
|
|
262
|
-
catch { /* fall through to normal response */ }
|
|
263
276
|
}
|
|
277
|
+
catch { /* fall through */ }
|
|
264
278
|
}
|
|
265
|
-
|
|
279
|
+
}
|
|
280
|
+
json(res, state);
|
|
281
|
+
}
|
|
282
|
+
function handleView(res, ctx, viewId) {
|
|
283
|
+
const content = ctx.store.getView(viewId);
|
|
284
|
+
if (!content) {
|
|
285
|
+
res.writeHead(404, { "Content-Type": "text/plain" });
|
|
286
|
+
res.end("not found");
|
|
266
287
|
return;
|
|
267
288
|
}
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
res.end("not found");
|
|
275
|
-
return;
|
|
276
|
-
}
|
|
277
|
-
res.writeHead(200, { "Content-Type": "text/plain" });
|
|
278
|
-
res.end(content);
|
|
289
|
+
res.writeHead(200, { "Content-Type": "text/plain" });
|
|
290
|
+
res.end(content);
|
|
291
|
+
}
|
|
292
|
+
async function handleTemplates(req, res, ctx) {
|
|
293
|
+
if (!ctx.templatesDir || !ctx.stateDir) {
|
|
294
|
+
jsonError(res, 500, "templates not configured");
|
|
279
295
|
return;
|
|
280
296
|
}
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
297
|
+
const body = await readBody(req);
|
|
298
|
+
try {
|
|
299
|
+
const data = JSON.parse(body);
|
|
300
|
+
const { id, name, version, icon, color, entryView, contract, views, initialState } = data;
|
|
301
|
+
if (!id || !version) {
|
|
302
|
+
jsonError(res, 400, "id and version required");
|
|
286
303
|
return;
|
|
287
304
|
}
|
|
288
|
-
const
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
const templateDir = resolve(templatesDir, id);
|
|
298
|
-
const manifestPath = resolve(templateDir, "manifest.json");
|
|
299
|
-
// Check if same version already stored
|
|
300
|
-
if (existsSync(manifestPath)) {
|
|
301
|
-
try {
|
|
302
|
-
const existing = JSON.parse(await readFile(manifestPath, "utf-8"));
|
|
303
|
-
if (existing.version === version) {
|
|
304
|
-
json(res, { status: "unchanged" });
|
|
305
|
-
return;
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
catch { /* proceed with overwrite */ }
|
|
309
|
-
}
|
|
310
|
-
const isNew = !existsSync(templateDir);
|
|
311
|
-
// Create directory structure
|
|
312
|
-
const viewsPath = resolve(templateDir, "views");
|
|
313
|
-
await mkdir(viewsPath, { recursive: true });
|
|
314
|
-
// Write manifest
|
|
315
|
-
await writeFile(manifestPath, JSON.stringify({ id, name, version, icon, color, entryView }, null, 2));
|
|
316
|
-
// Write contract
|
|
317
|
-
if (contract) {
|
|
318
|
-
await writeFile(resolve(templateDir, "contract.json"), JSON.stringify(contract, null, 2));
|
|
319
|
-
}
|
|
320
|
-
// Write views
|
|
321
|
-
if (views && typeof views === "object") {
|
|
322
|
-
for (const [viewName, viewData] of Object.entries(views)) {
|
|
323
|
-
await writeFile(resolve(viewsPath, `${viewName}.json`), JSON.stringify(viewData, null, 2));
|
|
305
|
+
const templateDir = resolve(ctx.templatesDir, id);
|
|
306
|
+
const manifestPath = resolve(templateDir, "manifest.json");
|
|
307
|
+
// Check if same version already stored
|
|
308
|
+
if (existsSync(manifestPath)) {
|
|
309
|
+
try {
|
|
310
|
+
const existing = JSON.parse(await readFile(manifestPath, "utf-8"));
|
|
311
|
+
if (existing.version === version) {
|
|
312
|
+
json(res, { status: "unchanged" });
|
|
313
|
+
return;
|
|
324
314
|
}
|
|
325
315
|
}
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
316
|
+
catch { /* proceed with overwrite */ }
|
|
317
|
+
}
|
|
318
|
+
const isNew = !existsSync(templateDir);
|
|
319
|
+
// Create directory structure and write files
|
|
320
|
+
const viewsPath = resolve(templateDir, "views");
|
|
321
|
+
await mkdir(viewsPath, { recursive: true });
|
|
322
|
+
await writeFile(manifestPath, JSON.stringify({ id, name, version, icon, color, entryView }, null, 2));
|
|
323
|
+
if (contract) {
|
|
324
|
+
await writeFile(resolve(templateDir, "contract.json"), JSON.stringify(contract, null, 2));
|
|
325
|
+
}
|
|
326
|
+
if (views && typeof views === "object") {
|
|
327
|
+
for (const [viewName, viewData] of Object.entries(views)) {
|
|
328
|
+
await writeFile(resolve(viewsPath, `${viewName}.json`), JSON.stringify(viewData, null, 2));
|
|
333
329
|
}
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
payload: {
|
|
342
|
-
name: name ?? id,
|
|
343
|
-
contractPath: resolve(templateDir, "contract.json"),
|
|
344
|
-
},
|
|
345
|
-
timestamp: new Date().toISOString(),
|
|
346
|
-
};
|
|
347
|
-
onIntent(installIntent);
|
|
330
|
+
}
|
|
331
|
+
// Write initial state if none exists on disk
|
|
332
|
+
if (initialState) {
|
|
333
|
+
const statePath = resolve(ctx.stateDir, `${id}.json`);
|
|
334
|
+
if (!existsSync(statePath)) {
|
|
335
|
+
await writeFile(statePath, JSON.stringify(initialState, null, 2));
|
|
336
|
+
ctx.store.setState(id, initialState);
|
|
348
337
|
}
|
|
349
|
-
json(res, { status: "provisioned" });
|
|
350
338
|
}
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
339
|
+
// Notify agent on first provision
|
|
340
|
+
if (isNew) {
|
|
341
|
+
ctx.onIntent({
|
|
342
|
+
id: crypto.randomUUID(),
|
|
343
|
+
agentId: "system",
|
|
344
|
+
clappId: id,
|
|
345
|
+
intent: "system.templateInstalled",
|
|
346
|
+
payload: { name: name ?? id, contractPath: resolve(templateDir, "contract.json") },
|
|
347
|
+
timestamp: new Date().toISOString(),
|
|
348
|
+
});
|
|
354
349
|
}
|
|
350
|
+
json(res, { status: "provisioned" });
|
|
351
|
+
}
|
|
352
|
+
catch {
|
|
353
|
+
jsonError(res, 400, "invalid JSON");
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
async function handleIntentRoute(req, res, ctx) {
|
|
357
|
+
const body = await readBody(req);
|
|
358
|
+
try {
|
|
359
|
+
const data = JSON.parse(body);
|
|
360
|
+
ctx.onIntent({
|
|
361
|
+
id: data.id ?? crypto.randomUUID(),
|
|
362
|
+
agentId: data.agentId ?? "local",
|
|
363
|
+
clappId: data.clappId ?? "",
|
|
364
|
+
intent: data.intent,
|
|
365
|
+
payload: data.payload ?? {},
|
|
366
|
+
timestamp: data.timestamp ?? new Date().toISOString(),
|
|
367
|
+
});
|
|
368
|
+
json(res, { ok: true });
|
|
369
|
+
}
|
|
370
|
+
catch {
|
|
371
|
+
jsonError(res, 400, "invalid JSON");
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
function handleHealth(res, ctx) {
|
|
375
|
+
json(res, {
|
|
376
|
+
status: "ok",
|
|
377
|
+
agent: ctx.agentConnected ? ctx.agentConnected() : false,
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
async function handleChatAsset(res, ctx, sessionKey, fileName) {
|
|
381
|
+
if (!/^session-\d+$/.test(sessionKey) || fileName.includes("..") || fileName.includes("/")) {
|
|
382
|
+
jsonError(res, 400, "invalid asset path");
|
|
355
383
|
return;
|
|
356
384
|
}
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
const intent = {
|
|
363
|
-
id: data.id ?? crypto.randomUUID(),
|
|
364
|
-
agentId: data.agentId ?? "local",
|
|
365
|
-
clappId: data.clappId ?? "",
|
|
366
|
-
intent: data.intent,
|
|
367
|
-
payload: data.payload ?? {},
|
|
368
|
-
timestamp: data.timestamp ?? new Date().toISOString(),
|
|
369
|
-
};
|
|
370
|
-
onIntent(intent);
|
|
371
|
-
json(res, { ok: true });
|
|
372
|
-
}
|
|
373
|
-
catch {
|
|
374
|
-
res.writeHead(400, { "Content-Type": "application/json" });
|
|
375
|
-
res.end(JSON.stringify({ error: "invalid JSON" }));
|
|
376
|
-
}
|
|
385
|
+
const { homedir } = await import("node:os");
|
|
386
|
+
const home = ctx.openclawHome ?? homedir();
|
|
387
|
+
const assetPath = resolve(home, ".openclaw", "workspace", "chat-sessions", "assets", sessionKey, fileName);
|
|
388
|
+
if (!existsSync(assetPath)) {
|
|
389
|
+
jsonError(res, 404, "asset not found");
|
|
377
390
|
return;
|
|
378
391
|
}
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
392
|
+
try {
|
|
393
|
+
const content = await readFile(assetPath);
|
|
394
|
+
const ext = extname(assetPath);
|
|
395
|
+
const mime = MIME_TYPES[ext] ?? "application/octet-stream";
|
|
396
|
+
res.writeHead(200, { "Content-Type": mime, "Cache-Control": "private, max-age=31536000, immutable" });
|
|
397
|
+
res.end(content);
|
|
398
|
+
}
|
|
399
|
+
catch {
|
|
400
|
+
jsonError(res, 500, "failed to read asset");
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
// --- Non-API route handlers ---
|
|
404
|
+
async function handleLogin(req, res, accessToken) {
|
|
405
|
+
if (accessToken === null) {
|
|
406
|
+
res.writeHead(302, { Location: "/" });
|
|
407
|
+
res.end();
|
|
385
408
|
return;
|
|
386
409
|
}
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
res.end(JSON.stringify({ error: "invalid asset path" }));
|
|
395
|
-
return;
|
|
396
|
-
}
|
|
397
|
-
const { homedir } = await import("node:os");
|
|
398
|
-
const home = openclawHome ?? homedir();
|
|
399
|
-
const assetPath = resolve(home, ".openclaw", "workspace", "chat-sessions", "assets", sessionKey, fileName);
|
|
400
|
-
if (!existsSync(assetPath)) {
|
|
401
|
-
res.writeHead(404, { "Content-Type": "application/json" });
|
|
402
|
-
res.end(JSON.stringify({ error: "asset not found" }));
|
|
403
|
-
return;
|
|
404
|
-
}
|
|
405
|
-
try {
|
|
406
|
-
const content = await readFile(assetPath);
|
|
407
|
-
const ext = extname(assetPath);
|
|
408
|
-
const mime = MIME_TYPES[ext] ?? "application/octet-stream";
|
|
409
|
-
res.writeHead(200, { "Content-Type": mime, "Cache-Control": "private, max-age=31536000, immutable" });
|
|
410
|
-
res.end(content);
|
|
411
|
-
return;
|
|
412
|
-
}
|
|
413
|
-
catch {
|
|
414
|
-
res.writeHead(500, { "Content-Type": "application/json" });
|
|
415
|
-
res.end(JSON.stringify({ error: "failed to read asset" }));
|
|
416
|
-
return;
|
|
417
|
-
}
|
|
410
|
+
const ip = req.headers["x-forwarded-for"]?.split(",")[0]?.trim() ??
|
|
411
|
+
req.socket.remoteAddress ??
|
|
412
|
+
"unknown";
|
|
413
|
+
if (!checkRateLimit(ip)) {
|
|
414
|
+
res.writeHead(429, { "Content-Type": "text/html" });
|
|
415
|
+
res.end(getLoginPageHtml("Too many attempts. Please wait a minute."));
|
|
416
|
+
return;
|
|
418
417
|
}
|
|
419
|
-
|
|
420
|
-
|
|
418
|
+
const body = await readBody(req);
|
|
419
|
+
const params = new URLSearchParams(body);
|
|
420
|
+
const password = params.get("password")?.trim() ?? "";
|
|
421
|
+
const remember = params.get("remember") === "1";
|
|
422
|
+
const normalized = password.replace(/-/g, "");
|
|
423
|
+
if (normalized !== accessToken) {
|
|
424
|
+
res.writeHead(401, { "Content-Type": "text/html" });
|
|
425
|
+
res.end(getLoginPageHtml("Invalid access code."));
|
|
426
|
+
return;
|
|
427
|
+
}
|
|
428
|
+
setSessionCookie(res, accessToken, req, remember);
|
|
429
|
+
res.writeHead(302, { Location: "/" });
|
|
430
|
+
res.end();
|
|
421
431
|
}
|
|
422
432
|
async function handleOAuthInit(req, res, oauthHandler) {
|
|
423
433
|
if (req.method !== "POST") {
|
|
424
|
-
res
|
|
425
|
-
res.end(JSON.stringify({ error: "method not allowed" }));
|
|
434
|
+
jsonError(res, 405, "method not allowed");
|
|
426
435
|
return;
|
|
427
436
|
}
|
|
428
437
|
try {
|
|
429
438
|
const body = await readBody(req);
|
|
430
439
|
const data = JSON.parse(body);
|
|
431
440
|
const provider = data.provider;
|
|
432
|
-
const customName = data.customName;
|
|
433
441
|
if (!provider) {
|
|
434
|
-
res
|
|
435
|
-
res.end(JSON.stringify({ error: "provider is required" }));
|
|
442
|
+
jsonError(res, 400, "provider is required");
|
|
436
443
|
return;
|
|
437
444
|
}
|
|
438
|
-
|
|
439
|
-
json(res, result);
|
|
445
|
+
json(res, oauthHandler.initOAuth(provider, data.customName));
|
|
440
446
|
}
|
|
441
447
|
catch (error) {
|
|
442
448
|
console.error("[oauth] Init failed:", error);
|
|
443
|
-
res
|
|
444
|
-
res.end(JSON.stringify({
|
|
445
|
-
error: error instanceof Error ? error.message : "OAuth init failed"
|
|
446
|
-
}));
|
|
449
|
+
jsonError(res, 500, error instanceof Error ? error.message : "OAuth init failed");
|
|
447
450
|
}
|
|
448
451
|
}
|
|
449
452
|
async function handleOAuthCallback(req, res, oauthHandler) {
|
|
450
453
|
if (req.method !== "POST") {
|
|
451
|
-
res
|
|
452
|
-
res.end(JSON.stringify({ error: "method not allowed" }));
|
|
454
|
+
jsonError(res, 405, "method not allowed");
|
|
453
455
|
return;
|
|
454
456
|
}
|
|
455
457
|
try {
|
|
@@ -457,31 +459,24 @@ async function handleOAuthCallback(req, res, oauthHandler) {
|
|
|
457
459
|
const data = JSON.parse(body);
|
|
458
460
|
const callbackUrl = data.callbackUrl;
|
|
459
461
|
if (!callbackUrl) {
|
|
460
|
-
res
|
|
461
|
-
res.end(JSON.stringify({ error: "callbackUrl is required" }));
|
|
462
|
+
jsonError(res, 400, "callbackUrl is required");
|
|
462
463
|
return;
|
|
463
464
|
}
|
|
464
465
|
const parsed = new URL(callbackUrl);
|
|
465
466
|
const code = parsed.searchParams.get("code");
|
|
466
467
|
const state = parsed.searchParams.get("state");
|
|
467
468
|
if (!code || !state) {
|
|
468
|
-
res
|
|
469
|
-
res.end(JSON.stringify({ error: "URL must contain code and state parameters" }));
|
|
469
|
+
jsonError(res, 400, "URL must contain code and state parameters");
|
|
470
470
|
return;
|
|
471
471
|
}
|
|
472
|
-
|
|
473
|
-
json(res, result);
|
|
472
|
+
json(res, await oauthHandler.handleCallback(code, state));
|
|
474
473
|
}
|
|
475
474
|
catch (error) {
|
|
476
475
|
console.error("[oauth] Callback failed:", error);
|
|
477
|
-
res
|
|
478
|
-
res.end(JSON.stringify({
|
|
479
|
-
error: error instanceof Error ? error.message : "OAuth callback failed",
|
|
480
|
-
}));
|
|
476
|
+
jsonError(res, 500, error instanceof Error ? error.message : "OAuth callback failed");
|
|
481
477
|
}
|
|
482
478
|
}
|
|
483
479
|
async function handleConnectPage(req, res, accessToken) {
|
|
484
|
-
// Derive server URL from the request Host header
|
|
485
480
|
const host = req.headers.host ?? "localhost";
|
|
486
481
|
const protocol = req.headers["x-forwarded-proto"] ?? "http";
|
|
487
482
|
const serverURL = `${protocol}://${host}`;
|
|
@@ -534,17 +529,14 @@ async function handleConnectPage(req, res, accessToken) {
|
|
|
534
529
|
res.writeHead(200, { "Content-Type": "text/html" });
|
|
535
530
|
res.end(html);
|
|
536
531
|
}
|
|
537
|
-
async function serveStatic(
|
|
538
|
-
// Normalize path
|
|
532
|
+
async function serveStatic(res, path, staticDir) {
|
|
539
533
|
let filePath = path === "/" ? "/index.html" : path;
|
|
540
|
-
// Security: prevent directory traversal
|
|
541
534
|
const resolved = resolve(staticDir, filePath.slice(1));
|
|
542
535
|
if (!resolved.startsWith(resolve(staticDir))) {
|
|
543
536
|
res.writeHead(403);
|
|
544
537
|
res.end("Forbidden");
|
|
545
538
|
return;
|
|
546
539
|
}
|
|
547
|
-
// Try the exact file, then fall back to index.html (SPA routing)
|
|
548
540
|
let target = resolved;
|
|
549
541
|
if (!existsSync(target)) {
|
|
550
542
|
target = resolve(staticDir, "index.html");
|
|
@@ -561,16 +553,4 @@ async function serveStatic(_req, res, path, staticDir) {
|
|
|
561
553
|
res.end("Not Found");
|
|
562
554
|
}
|
|
563
555
|
}
|
|
564
|
-
function json(res, data) {
|
|
565
|
-
res.writeHead(200, { "Content-Type": "application/json" });
|
|
566
|
-
res.end(JSON.stringify(data));
|
|
567
|
-
}
|
|
568
|
-
function readBody(req) {
|
|
569
|
-
return new Promise((resolve, reject) => {
|
|
570
|
-
const chunks = [];
|
|
571
|
-
req.on("data", (chunk) => chunks.push(chunk));
|
|
572
|
-
req.on("end", () => resolve(Buffer.concat(chunks).toString()));
|
|
573
|
-
req.on("error", reject);
|
|
574
|
-
});
|
|
575
|
-
}
|
|
576
556
|
//# sourceMappingURL=server.js.map
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|