@privateclaw/privateclaw-relay 0.1.3 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -29,6 +29,14 @@ privateclaw-relay
29
29
 
30
30
  If the default local port `8787` is already occupied, the CLI automatically retries the next free port and prints the final listening URL.
31
31
 
32
+ Start the relay and serve the bundled PrivateClaw website from the same process:
33
+
34
+ ```bash
35
+ privateclaw-relay --web
36
+ ```
37
+
38
+ With `--web`, the relay serves the marketing homepage at `/`, the web chat at `/chat/`, and keeps the relay WebSocket endpoints on `/ws/*` unchanged.
39
+
32
40
  Override the bind address or Redis URL:
33
41
 
34
42
  ```bash
@@ -48,8 +56,15 @@ Expose the local relay through a temporary Cloudflare quick tunnel:
48
56
  privateclaw-relay --public cloudflare
49
57
  ```
50
58
 
59
+ You can combine `--web` with public exposure so the public tunnel opens both the website and the relay on one origin:
60
+
61
+ ```bash
62
+ privateclaw-relay --web --public cloudflare
63
+ privateclaw-relay --web --public tailscale
64
+ ```
65
+
51
66
  If the required `tailscale` or `cloudflared` CLI is missing, `privateclaw-relay` prints platform-aware install commands. In an interactive terminal it can also offer to run the supported install/setup commands for you before retrying the tunnel startup.
52
- After the relay gets a public URL, it also prints the exact `openclaw` commands needed to point PrivateClaw at that relay. If `openclaw` is installed locally, the CLI can offer to run the local provider install/enable/config commands for you before reminding you to restart the gateway/service.
67
+ After the relay gets a public URL, it also prints the exact `openclaw` commands needed to point PrivateClaw at that relay. If `openclaw` is installed locally, the CLI can offer to run the local provider install/enable/config flow, restart the OpenClaw gateway, verify that `privateclaw` is now registered, and then optionally start a new group pairing. When `--web` is enabled, it can open the bundled web chat with the fresh invite prefilled.
53
68
 
54
69
  ## Tunnel notes
55
70
 
package/dist/config.d.ts CHANGED
@@ -3,6 +3,7 @@ export interface RelayServerConfig {
3
3
  port: number;
4
4
  sessionTtlMs: number;
5
5
  frameCacheSize: number;
6
+ webRootDir?: string;
6
7
  instanceId?: string;
7
8
  redisUrl?: string;
8
9
  fcmServiceAccountJson?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAaA,SAAS,oBAAoB,CAC3B,KAAyB,EACzB,QAAgB,EAChB,KAAa;IAEb,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAClC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,8BAA8B,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAyB,OAAO,CAAC,GAAG;IAClE,MAAM,IAAI,GAAG,GAAG,CAAC,sBAAsB,EAAE,IAAI,EAAE,IAAI,WAAW,CAAC;IAC/D,MAAM,IAAI,GAAG,oBAAoB,CAC/B,GAAG,CAAC,sBAAsB,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,EACtD,IAAI,EACJ,wBAAwB,CACzB,CAAC;IACF,MAAM,YAAY,GAAG,oBAAoB,CACvC,GAAG,CAAC,0BAA0B,EAC9B,EAAE,GAAG,EAAE,GAAG,IAAI,EACd,4BAA4B,CAC7B,CAAC;IACF,MAAM,cAAc,GAAG,oBAAoB,CACzC,GAAG,CAAC,4BAA4B,EAChC,EAAE,EACF,8BAA8B,CAC/B,CAAC;IACF,MAAM,UAAU,GACd,GAAG,CAAC,6BAA6B,EAAE,IAAI,EAAE;QACzC,GAAG,CAAC,kBAAkB,EAAE,IAAI,EAAE,CAAC;IACjC,MAAM,QAAQ,GAAG,GAAG,CAAC,qBAAqB,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC;IAC5E,MAAM,qBAAqB,GACzB,GAAG,CAAC,oCAAoC,EAAE,IAAI,EAAE,CAAC;IACnD,MAAM,YAAY,GAAG,GAAG,CAAC,0BAA0B,EAAE,IAAI,EAAE,CAAC;IAC5D,MAAM,cAAc,GAAG,GAAG,CAAC,4BAA4B,EAAE,IAAI,EAAE,CAAC;IAChE,MAAM,aAAa,GAAG,GAAG,CAAC,2BAA2B,EAAE,IAAI,EAAE,CAAC;IAE9D,OAAO;QACL,IAAI;QACJ,IAAI;QACJ,YAAY;QACZ,cAAc;QACd,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,qBAAqB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5C,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAcA,SAAS,oBAAoB,CAC3B,KAAyB,EACzB,QAAgB,EAChB,KAAa;IAEb,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAClC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,8BAA8B,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAyB,OAAO,CAAC,GAAG;IAClE,MAAM,IAAI,GAAG,GAAG,CAAC,sBAAsB,EAAE,IAAI,EAAE,IAAI,WAAW,CAAC;IAC/D,MAAM,IAAI,GAAG,oBAAoB,CAC/B,GAAG,CAAC,sBAAsB,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,EACtD,IAAI,EACJ,wBAAwB,CACzB,CAAC;IACF,MAAM,YAAY,GAAG,oBAAoB,CACvC,GAAG,CAAC,0BAA0B,EAC9B,EAAE,GAAG,EAAE,GAAG,IAAI,EACd,4BAA4B,CAC7B,CAAC;IACF,MAAM,cAAc,GAAG,oBAAoB,CACzC,GAAG,CAAC,4BAA4B,EAChC,EAAE,EACF,8BAA8B,CAC/B,CAAC;IACF,MAAM,UAAU,GACd,GAAG,CAAC,6BAA6B,EAAE,IAAI,EAAE;QACzC,GAAG,CAAC,kBAAkB,EAAE,IAAI,EAAE,CAAC;IACjC,MAAM,QAAQ,GAAG,GAAG,CAAC,qBAAqB,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC;IAC5E,MAAM,qBAAqB,GACzB,GAAG,CAAC,oCAAoC,EAAE,IAAI,EAAE,CAAC;IACnD,MAAM,YAAY,GAAG,GAAG,CAAC,0BAA0B,EAAE,IAAI,EAAE,CAAC;IAC5D,MAAM,cAAc,GAAG,GAAG,CAAC,4BAA4B,EAAE,IAAI,EAAE,CAAC;IAChE,MAAM,aAAa,GAAG,GAAG,CAAC,2BAA2B,EAAE,IAAI,EAAE,CAAC;IAE9D,OAAO;QACL,IAAI;QACJ,IAAI;QACJ,YAAY;QACZ,cAAc;QACd,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,qBAAqB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5C,CAAC;AACJ,CAAC"}
@@ -15,17 +15,28 @@ export interface RelayProviderSetupPlan {
15
15
  introduction: string;
16
16
  automaticSteps: RelayProviderSetupStep[];
17
17
  manualSteps: RelayProviderSetupStep[];
18
- restartNotes: string[];
19
- pairingNotes: string[];
18
+ verificationNotes: string[];
19
+ pairingCommand: RelayProviderSetupStep;
20
20
  }
21
21
  interface OfferRelayProviderSetupOptions {
22
22
  relayBaseUrl: string;
23
+ webChatUrl?: string;
23
24
  onLog?: (line: string) => void;
24
25
  isInteractive?: boolean;
25
26
  detectLocalOpenClawStatus?: () => Promise<LocalOpenClawStatus>;
26
27
  promptToContinue?: (question: string) => Promise<boolean>;
27
28
  runStep?: (step: RelayProviderSetupStep) => Promise<void>;
29
+ runPairingCommand?: (step: RelayProviderSetupStep) => Promise<RunOneShotCommandResult>;
30
+ openBrowser?: (target: string) => Promise<void>;
31
+ verificationTimeoutMs?: number;
32
+ verificationPollMs?: number;
28
33
  }
34
+ interface RunOneShotCommandResult {
35
+ stdout: string;
36
+ stderr: string;
37
+ combined: string;
38
+ }
39
+ export declare function openBrowserTarget(target: string): Promise<void>;
29
40
  export declare function detectLocalOpenClawStatus(): Promise<LocalOpenClawStatus>;
30
41
  export declare function buildRelayProviderSetupPlan(params: {
31
42
  relayBaseUrl: string;
@@ -21,6 +21,11 @@ function isInteractiveTerminal() {
21
21
  !process.stdin.destroyed &&
22
22
  !process.stdout.destroyed);
23
23
  }
24
+ function delay(ms) {
25
+ return new Promise((resolve) => {
26
+ setTimeout(resolve, ms);
27
+ });
28
+ }
24
29
  async function runOneShotCommand(command, args) {
25
30
  const child = spawn(command, args, {
26
31
  stdio: ["ignore", "pipe", "pipe"],
@@ -58,6 +63,48 @@ async function runOneShotCommand(command, args) {
58
63
  throw error;
59
64
  }
60
65
  }
66
+ async function runStreamingCommand(command, args) {
67
+ const child = spawn(command, args, {
68
+ stdio: ["ignore", "pipe", "pipe"],
69
+ });
70
+ let stdoutText = "";
71
+ let stderrText = "";
72
+ child.stdout.setEncoding("utf8");
73
+ child.stderr.setEncoding("utf8");
74
+ child.stdout.on("data", (chunk) => {
75
+ stdoutText += chunk;
76
+ process.stdout.write(chunk);
77
+ });
78
+ child.stderr.on("data", (chunk) => {
79
+ stderrText += chunk;
80
+ process.stderr.write(chunk);
81
+ });
82
+ const childError = once(child, "error").then(([error]) => {
83
+ throw error;
84
+ });
85
+ const childClose = once(child, "close").then(([code, signal]) => ({
86
+ code,
87
+ signal,
88
+ }));
89
+ try {
90
+ const { code, signal } = await Promise.race([childError, childClose]);
91
+ if (code !== 0) {
92
+ const combined = `${stdoutText}${stderrText}`.trim();
93
+ throw new RelayCliUserError(`Command \`${[command, ...args].join(" ")}\` exited with ${code == null ? `signal ${signal ?? "unknown"}` : `code ${code}`}${combined ? `: ${combined}` : "."}`);
94
+ }
95
+ return {
96
+ stdout: stdoutText,
97
+ stderr: stderrText,
98
+ combined: `${stdoutText}${stderrText}`,
99
+ };
100
+ }
101
+ catch (error) {
102
+ if (isUnavailableCommandError(error)) {
103
+ throw new RelayCliUserError(`Could not run \`${[command, ...args].join(" ")}\` because \`${command}\` is unavailable or not executable.`);
104
+ }
105
+ throw error;
106
+ }
107
+ }
61
108
  async function commandExists(command) {
62
109
  try {
63
110
  await runOneShotCommand(command, ["--version"]);
@@ -67,6 +114,17 @@ async function commandExists(command) {
67
114
  return !isUnavailableCommandError(error);
68
115
  }
69
116
  }
117
+ export async function openBrowserTarget(target) {
118
+ const command = process.platform === "win32"
119
+ ? {
120
+ file: "cmd.exe",
121
+ args: ["/d", "/s", "/c", `start "" "${target.replace(/"/gu, '""')}"`],
122
+ }
123
+ : process.platform === "darwin"
124
+ ? { file: "open", args: [target] }
125
+ : { file: "xdg-open", args: [target] };
126
+ await runOneShotCommand(command.file, command.args);
127
+ }
70
128
  export async function detectLocalOpenClawStatus() {
71
129
  if (!(await commandExists("openclaw"))) {
72
130
  return {
@@ -97,12 +155,11 @@ export function buildRelayProviderSetupPlan(params) {
97
155
  "plugins.entries.privateclaw.config.relayBaseUrl",
98
156
  params.relayBaseUrl,
99
157
  ], `openclaw config set plugins.entries.privateclaw.config.relayBaseUrl ${params.relayBaseUrl}`);
100
- const restartNotes = [
101
- "[privateclaw-relay] Restart the running OpenClaw gateway/service now so it reloads the plugin + relay config.",
158
+ const restartStep = createStep("Restart the OpenClaw gateway so the plugin + relay config are reloaded", "openclaw", ["gateway", "restart"], "openclaw gateway restart");
159
+ const pairingCommand = createStep("Start a group pairing request", "openclaw", ["privateclaw", "pair", "--group", "--relay", params.relayBaseUrl], `openclaw privateclaw pair --group --relay ${params.relayBaseUrl}`);
160
+ const verificationNotes = [
102
161
  "[privateclaw-relay] After restart, verify the command registration with: openclaw commands list",
103
- ];
104
- const pairingNotes = [
105
- "[privateclaw-relay] Then create a pairing QR either by sending `/privateclaw` in an existing OpenClaw-backed chat or by running: openclaw privateclaw pair",
162
+ `[privateclaw-relay] When the provider is ready, start a group pairing with: ${pairingCommand.display}`,
106
163
  ];
107
164
  if (!params.status.openClawAvailable) {
108
165
  return {
@@ -111,9 +168,9 @@ export function buildRelayProviderSetupPlan(params) {
111
168
  privateClawCommandAvailable: false,
112
169
  introduction: "[privateclaw-relay] To connect an OpenClaw machine to this relay, run these commands on the machine where `openclaw` is installed:",
113
170
  automaticSteps: [],
114
- manualSteps: [installStep, enableStep, configStep],
115
- restartNotes,
116
- pairingNotes,
171
+ manualSteps: [installStep, enableStep, configStep, restartStep],
172
+ verificationNotes,
173
+ pairingCommand,
117
174
  };
118
175
  }
119
176
  if (params.status.privateClawCommandAvailable) {
@@ -122,10 +179,10 @@ export function buildRelayProviderSetupPlan(params) {
122
179
  localOpenClaw: true,
123
180
  privateClawCommandAvailable: true,
124
181
  introduction: "[privateclaw-relay] OpenClaw + PrivateClaw are already available locally. Point the provider at this relay with:",
125
- automaticSteps: [configStep],
126
- manualSteps: [configStep],
127
- restartNotes,
128
- pairingNotes,
182
+ automaticSteps: [configStep, restartStep],
183
+ manualSteps: [configStep, restartStep],
184
+ verificationNotes,
185
+ pairingCommand,
129
186
  };
130
187
  }
131
188
  return {
@@ -133,18 +190,17 @@ export function buildRelayProviderSetupPlan(params) {
133
190
  localOpenClaw: true,
134
191
  privateClawCommandAvailable: false,
135
192
  introduction: "[privateclaw-relay] OpenClaw is available locally, but PrivateClaw is not active yet. Configure it with:",
136
- automaticSteps: [installStep, enableStep, configStep],
137
- manualSteps: [installStep, enableStep, configStep],
138
- restartNotes,
139
- pairingNotes,
193
+ automaticSteps: [installStep, enableStep, configStep, restartStep],
194
+ manualSteps: [installStep, enableStep, configStep, restartStep],
195
+ verificationNotes,
196
+ pairingCommand,
140
197
  };
141
198
  }
142
199
  export function renderRelayProviderSetupGuidance(plan) {
143
200
  const lines = [
144
201
  plan.introduction,
145
202
  ...plan.manualSteps.map((step) => `[privateclaw-relay] ${step.display}`),
146
- ...plan.restartNotes,
147
- ...plan.pairingNotes,
203
+ ...plan.verificationNotes,
148
204
  ];
149
205
  return lines.join("\n");
150
206
  }
@@ -186,6 +242,25 @@ async function runRelayProviderSetupStep(step) {
186
242
  throw error;
187
243
  }
188
244
  }
245
+ function extractPrivateClawInviteUri(output) {
246
+ return output.match(/privateclaw:\/\/connect\?payload=\S+/u)?.[0];
247
+ }
248
+ function buildRelayWebInviteUrl(webChatUrl, inviteUri) {
249
+ const url = new URL(webChatUrl);
250
+ url.searchParams.set("invite", inviteUri);
251
+ return url.toString();
252
+ }
253
+ async function waitForPrivateClawCommandAvailability(detectStatus, timeoutMs, pollMs) {
254
+ const deadline = Date.now() + timeoutMs;
255
+ let status = await detectStatus();
256
+ while (status.openClawAvailable &&
257
+ !status.privateClawCommandAvailable &&
258
+ Date.now() < deadline) {
259
+ await delay(pollMs);
260
+ status = await detectStatus();
261
+ }
262
+ return status;
263
+ }
189
264
  export async function offerRelayProviderSetup(options) {
190
265
  const detectStatus = options.detectLocalOpenClawStatus ?? detectLocalOpenClawStatus;
191
266
  const status = await detectStatus();
@@ -206,6 +281,10 @@ export async function offerRelayProviderSetup(options) {
206
281
  }
207
282
  const promptToContinue = options.promptToContinue ?? promptForConfirmation;
208
283
  const runStep = options.runStep ?? runRelayProviderSetupStep;
284
+ const runPairingCommand = options.runPairingCommand ?? ((step) => runStreamingCommand(step.command, step.args));
285
+ const openBrowser = options.openBrowser ?? openBrowserTarget;
286
+ const verificationTimeoutMs = options.verificationTimeoutMs ?? 15_000;
287
+ const verificationPollMs = options.verificationPollMs ?? 1_000;
209
288
  const configureNow = await promptToContinue(plan.privateClawCommandAvailable
210
289
  ? `OpenClaw is available locally. Configure the local PrivateClaw provider to use ${options.relayBaseUrl} now?`
211
290
  : `OpenClaw is available locally. Install/configure the local PrivateClaw provider for ${options.relayBaseUrl} now?`);
@@ -218,8 +297,37 @@ export async function offerRelayProviderSetup(options) {
218
297
  await runStep(step);
219
298
  }
220
299
  options.onLog?.("[privateclaw-relay] Local OpenClaw configuration commands completed.");
221
- for (const line of [...plan.restartNotes, ...plan.pairingNotes]) {
300
+ const refreshedStatus = await waitForPrivateClawCommandAvailability(detectStatus, verificationTimeoutMs, verificationPollMs);
301
+ if (!refreshedStatus.privateClawCommandAvailable) {
302
+ throw new RelayCliUserError("OpenClaw restarted, but `privateclaw` still does not appear in `openclaw commands list`. Confirm the gateway finished restarting cleanly, then rerun `privateclaw-relay`.");
303
+ }
304
+ options.onLog?.("[privateclaw-relay] Verified `privateclaw` is now available via `openclaw commands list`.");
305
+ for (const line of plan.verificationNotes) {
222
306
  options.onLog?.(line);
223
307
  }
308
+ const startGroupPairing = await promptToContinue("PrivateClaw is ready locally. Start a new group pairing now?");
309
+ if (!startGroupPairing) {
310
+ options.onLog?.("[privateclaw-relay] Skipping automatic group pairing for now.");
311
+ return;
312
+ }
313
+ options.onLog?.(`[privateclaw-relay] Running: ${plan.pairingCommand.display}`);
314
+ const pairingResult = await runPairingCommand(plan.pairingCommand);
315
+ const inviteUri = extractPrivateClawInviteUri(pairingResult.combined);
316
+ if (!inviteUri) {
317
+ options.onLog?.("[privateclaw-relay] Created the group pairing request, but could not extract the invite URI from the command output for automatic browser launch.");
318
+ return;
319
+ }
320
+ if (!options.webChatUrl) {
321
+ options.onLog?.("[privateclaw-relay] Group pairing is ready. Start the relay with `--web` next time if you want this CLI to open the web chat automatically with the invite prefilled.");
322
+ return;
323
+ }
324
+ const webInviteUrl = buildRelayWebInviteUrl(options.webChatUrl, inviteUri);
325
+ options.onLog?.(`[privateclaw-relay] Opening web chat with the new invite: ${webInviteUrl}`);
326
+ try {
327
+ await openBrowser(webInviteUrl);
328
+ }
329
+ catch (error) {
330
+ options.onLog?.(`[privateclaw-relay] Could not open the browser automatically: ${error instanceof Error ? error.message : String(error)}`);
331
+ }
224
332
  }
225
333
  //# sourceMappingURL=provider-setup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider-setup.js","sourceRoot":"","sources":["../src/provider-setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider-setup.js","sourceRoot":"","sources":["../src/provider-setup.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import { createRelayServer } from "./relay-server.js";
3
3
  import { type RelayTunnelProvider } from "./tunnel.js";
4
4
  export interface RelayCliOptions {
5
5
  showHelp: boolean;
6
+ serveWeb: boolean;
6
7
  configOverrides: Partial<RelayServerConfig>;
7
8
  publicTunnel?: RelayTunnelProvider;
8
9
  }
package/dist/relay-cli.js CHANGED
@@ -3,6 +3,7 @@ import { RelayCliUserError } from "./cli-error.js";
3
3
  import { loadRelayConfig } from "./config.js";
4
4
  import { offerRelayProviderSetup } from "./provider-setup.js";
5
5
  import { createRelayServer } from "./relay-server.js";
6
+ import { resolveRelayWebRootDir } from "./relay-web.js";
6
7
  import { ensureRelayTunnelDependencyAvailable, ensureRelayTunnelProviderConfigured, } from "./tunnel-installer.js";
7
8
  import { isRelayTunnelProvider, MissingRelayTunnelBinaryError, openRelayTunnel, RelayTunnelPrerequisiteError, } from "./tunnel.js";
8
9
  const DEFAULT_PORT_FALLBACK_ATTEMPTS = 50;
@@ -17,17 +18,19 @@ function parsePositiveIntegerFlag(value, label) {
17
18
  return parsed;
18
19
  }
19
20
  export function renderRelayCliHelp() {
20
- return `privateclaw-relay [serve] [--host <host>] [--port <port>] [--ttl-ms <ms>] [--frame-cache-size <count>] [--redis-url <url>] [--public <tailscale|cloudflare>]
21
+ return `privateclaw-relay [serve] [--host <host>] [--port <port>] [--ttl-ms <ms>] [--frame-cache-size <count>] [--redis-url <url>] [--web] [--public <tailscale|cloudflare>]
21
22
 
22
23
  Start the local PrivateClaw relay server.
23
24
 
24
25
  Examples:
25
26
  privateclaw-relay
27
+ privateclaw-relay --web
26
28
  privateclaw-relay --port 8787 --public tailscale
27
29
  privateclaw-relay serve --host 0.0.0.0 --redis-url redis://127.0.0.1:6379
28
30
 
29
31
  Notes:
30
32
  default local port automatically retries the next free port when 8787 is busy
33
+ --web also serves the bundled PrivateClaw website at / and /chat/
31
34
  --public tailscale enables Tailscale Funnel for the relay port
32
35
  --public cloudflare starts a temporary Cloudflare quick tunnel
33
36
  `;
@@ -42,6 +45,7 @@ export function parseRelayCliArgs(args) {
42
45
  "ttl-ms": { type: "string" },
43
46
  "frame-cache-size": { type: "string" },
44
47
  "redis-url": { type: "string" },
48
+ web: { type: "boolean" },
45
49
  public: { type: "string" },
46
50
  help: { type: "boolean", short: "h" },
47
51
  },
@@ -50,6 +54,7 @@ export function parseRelayCliArgs(args) {
50
54
  if (command === "help") {
51
55
  return {
52
56
  showHelp: true,
57
+ serveWeb: false,
53
58
  configOverrides: {},
54
59
  };
55
60
  }
@@ -62,6 +67,7 @@ export function parseRelayCliArgs(args) {
62
67
  if (parsed.values.help) {
63
68
  return {
64
69
  showHelp: true,
70
+ serveWeb: false,
65
71
  configOverrides: {},
66
72
  };
67
73
  }
@@ -77,6 +83,7 @@ export function parseRelayCliArgs(args) {
77
83
  const frameCacheSize = parsePositiveIntegerFlag(parsed.values["frame-cache-size"], "--frame-cache-size");
78
84
  return {
79
85
  showHelp: false,
86
+ serveWeb: parsed.values.web ?? false,
80
87
  configOverrides: {
81
88
  ...(parsed.values.host?.trim()
82
89
  ? { host: parsed.values.host.trim() }
@@ -163,6 +170,12 @@ export async function runRelayCli(args) {
163
170
  return;
164
171
  }
165
172
  const config = applyRelayCliOverrides(loadRelayConfig(), parsed.configOverrides);
173
+ const effectiveConfig = parsed.serveWeb
174
+ ? {
175
+ ...config,
176
+ webRootDir: resolveRelayWebRootDir(),
177
+ }
178
+ : config;
166
179
  const allowPortFallback = shouldAllowRelayCliPortFallback(parsed);
167
180
  let relayServer;
168
181
  let tunnel;
@@ -185,7 +198,7 @@ export async function runRelayCli(args) {
185
198
  });
186
199
  try {
187
200
  const startedRelay = await startRelayServerWithPortFallback({
188
- config,
201
+ config: effectiveConfig,
189
202
  allowPortFallback,
190
203
  onLog: (line) => {
191
204
  console.log(line);
@@ -194,6 +207,10 @@ export async function runRelayCli(args) {
194
207
  relayServer = startedRelay.relayServer;
195
208
  const { port, url } = startedRelay;
196
209
  console.log(`[privateclaw-relay] listening on ${url}`);
210
+ if (parsed.serveWeb) {
211
+ console.log(`[privateclaw-relay] web home: ${new URL("/", url).toString()}`);
212
+ console.log(`[privateclaw-relay] web chat: ${new URL("/chat/", url).toString()}`);
213
+ }
197
214
  if (!parsed.publicTunnel) {
198
215
  return;
199
216
  }
@@ -270,6 +287,10 @@ export async function runRelayCli(args) {
270
287
  }
271
288
  if (tunnel.publicUrl) {
272
289
  console.log(`[privateclaw-relay] public URL: ${tunnel.publicUrl}`);
290
+ if (parsed.serveWeb) {
291
+ console.log(`[privateclaw-relay] public web home: ${new URL("/", tunnel.publicUrl).toString()}`);
292
+ console.log(`[privateclaw-relay] public web chat: ${new URL("/chat/", tunnel.publicUrl).toString()}`);
293
+ }
273
294
  }
274
295
  for (const note of tunnel.notes) {
275
296
  console.log(`[privateclaw-relay] ${note}`);
@@ -277,6 +298,9 @@ export async function runRelayCli(args) {
277
298
  if (tunnel.publicUrl) {
278
299
  await offerRelayProviderSetup({
279
300
  relayBaseUrl: tunnel.publicUrl,
301
+ ...(parsed.serveWeb
302
+ ? { webChatUrl: new URL("/chat/", tunnel.publicUrl).toString() }
303
+ : {}),
280
304
  onLog: (line) => {
281
305
  console.log(line);
282
306
  },
@@ -1 +1 @@
1
- {"version":3,"file":"relay-cli.js","sourceRoot":"","sources":["../src/relay-cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"relay-cli.js","sourceRoot":"","sources":["../src/relay-cli.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,12 @@
1
1
  import { randomUUID } from "node:crypto";
2
- import { createServer } from "node:http";
2
+ import { createServer, } from "node:http";
3
3
  import { WebSocket, WebSocketServer } from "ws";
4
4
  import { createEncryptedFrameCache, } from "./frame-cache.js";
5
5
  import { createRelayPushRegistrationStore, } from "./push-registration-store.js";
6
6
  import { createRelayPushNotifier, } from "./push-notifier.js";
7
7
  import { createRedisRelayClusterClient, RelayClaimConflictError, } from "./relay-cluster.js";
8
8
  import { createRelaySessionStore, } from "./session-store.js";
9
+ import { serveRelayWebRequest } from "./relay-web.js";
9
10
  const HEARTBEAT_INTERVAL_MS = 15_000;
10
11
  const PUSH_WAKE_COOLDOWN_MS = 5_000;
11
12
  class RelayProtocolError extends Error {
@@ -721,27 +722,45 @@ export function createRelayServer(config, deps = {}) {
721
722
  let startedPort = config.port;
722
723
  let startedUrl = "";
723
724
  let started = false;
724
- const server = createServer((request, response) => {
725
+ async function handleHttpRequest(request, response) {
725
726
  const url = new URL(request.url ?? "/", `http://${request.headers.host ?? `${config.host}:${startedPort}`}`);
726
- if (request.method === "GET" &&
727
- (url.pathname === "/healthz" || url.pathname === "/api/health")) {
728
- void sessionHub
729
- .countSessions()
730
- .then((sessions) => {
727
+ try {
728
+ if (request.method === "GET" &&
729
+ (url.pathname === "/healthz" || url.pathname === "/api/health")) {
730
+ const sessions = await sessionHub.countSessions();
731
731
  response.writeHead(200, { "content-type": "application/json" });
732
732
  response.end(JSON.stringify({ ok: true, sessions, instanceId: clusterNodeId }));
733
- })
734
- .catch((error) => {
735
- response.writeHead(500, { "content-type": "application/json" });
736
- response.end(JSON.stringify({
737
- ok: false,
738
- error: error instanceof Error ? error.message : String(error),
739
- }));
740
- });
741
- return;
733
+ return;
734
+ }
735
+ if (config.webRootDir) {
736
+ const handled = await serveRelayWebRequest({
737
+ request,
738
+ response,
739
+ url,
740
+ webRootDir: config.webRootDir,
741
+ });
742
+ if (handled) {
743
+ return;
744
+ }
745
+ }
746
+ response.writeHead(404, { "content-type": "application/json" });
747
+ response.end(JSON.stringify({ error: "not_found" }));
748
+ }
749
+ catch (error) {
750
+ console.error("[privateclaw-relay] failed to handle HTTP request", error);
751
+ if (response.headersSent) {
752
+ response.end();
753
+ return;
754
+ }
755
+ response.writeHead(500, { "content-type": "application/json" });
756
+ response.end(JSON.stringify({
757
+ ok: false,
758
+ error: error instanceof Error ? error.message : String(error),
759
+ }));
742
760
  }
743
- response.writeHead(404, { "content-type": "application/json" });
744
- response.end(JSON.stringify({ error: "not_found" }));
761
+ }
762
+ const server = createServer((request, response) => {
763
+ void handleHttpRequest(request, response);
745
764
  });
746
765
  const providerWss = new WebSocketServer({ noServer: true });
747
766
  const appWss = new WebSocketServer({ noServer: true });