vana-cli 0.25.0 → 0.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/README.md +1 -0
  2. package/dist/cli/auth.d.ts +2 -0
  3. package/dist/cli/auth.d.ts.map +1 -1
  4. package/dist/cli/auth.js +2 -1
  5. package/dist/cli/auth.js.map +1 -1
  6. package/dist/cli/index.d.ts.map +1 -1
  7. package/dist/cli/index.js +37 -1
  8. package/dist/cli/index.js.map +1 -1
  9. package/dist/cli/server-start.d.ts +42 -0
  10. package/dist/cli/server-start.d.ts.map +1 -0
  11. package/dist/cli/server-start.js +189 -0
  12. package/dist/cli/server-start.js.map +1 -0
  13. package/dist/personal-server/index.d.ts +1 -0
  14. package/dist/personal-server/index.d.ts.map +1 -1
  15. package/dist/personal-server/index.js +17 -2
  16. package/dist/personal-server/index.js.map +1 -1
  17. package/dist/personal-server/local/config.d.ts +23 -0
  18. package/dist/personal-server/local/config.d.ts.map +1 -0
  19. package/dist/personal-server/local/config.js +51 -0
  20. package/dist/personal-server/local/config.js.map +1 -0
  21. package/dist/personal-server/local/owner-binding.d.ts +33 -0
  22. package/dist/personal-server/local/owner-binding.d.ts.map +1 -0
  23. package/dist/personal-server/local/owner-binding.js +155 -0
  24. package/dist/personal-server/local/owner-binding.js.map +1 -0
  25. package/dist/personal-server/local/owner-secret.d.ts +17 -0
  26. package/dist/personal-server/local/owner-secret.d.ts.map +1 -0
  27. package/dist/personal-server/local/owner-secret.js +119 -0
  28. package/dist/personal-server/local/owner-secret.js.map +1 -0
  29. package/dist/personal-server/local/runtime-pkg/entry.mjs +153 -0
  30. package/dist/personal-server/local/runtime-pkg/package-lock.json +2342 -0
  31. package/dist/personal-server/local/runtime-pkg/package.json +13 -0
  32. package/dist/personal-server/local/runtime.d.ts +9 -0
  33. package/dist/personal-server/local/runtime.d.ts.map +1 -0
  34. package/dist/personal-server/local/runtime.js +66 -0
  35. package/dist/personal-server/local/runtime.js.map +1 -0
  36. package/dist/personal-server/local/server.d.ts +39 -0
  37. package/dist/personal-server/local/server.d.ts.map +1 -0
  38. package/dist/personal-server/local/server.js +203 -0
  39. package/dist/personal-server/local/server.js.map +1 -0
  40. package/package.json +1 -1
@@ -0,0 +1,42 @@
1
+ import type { VanaNetworkName } from "../core/network.js";
2
+ import { type ResolvedNode } from "../pdpp/host.js";
3
+ import { runOwnerBindingExchange } from "../personal-server/local/owner-binding.js";
4
+ import { type OwnerSecretStore } from "../personal-server/local/owner-secret.js";
5
+ import { startLocalServer, type LocalServerHandle, type RunningServer } from "../personal-server/local/server.js";
6
+ import { type VanaCredentials } from "./auth.js";
7
+ export interface ServerStartIo {
8
+ /** A line for a person; silent in --json mode. */
9
+ say(line: string): void;
10
+ /** One machine-readable state change; only in --json mode. */
11
+ event(event: Record<string, unknown>): void;
12
+ /** Ask before a one-time install; never called with --no-input or --yes. */
13
+ confirm(message: string): Promise<boolean>;
14
+ }
15
+ export interface ServerStartDeps {
16
+ findRunningServers: (fetchImpl?: typeof fetch) => Promise<RunningServer[]>;
17
+ loadCredentials: () => VanaCredentials | null;
18
+ saveCredentials: (credentials: VanaCredentials) => Promise<void>;
19
+ secrets: OwnerSecretStore;
20
+ exchange: typeof runOwnerBindingExchange;
21
+ openBrowser: (url: string) => void;
22
+ findNode: (range: string) => Promise<ResolvedNode | null>;
23
+ installNode: (logPath: string) => Promise<ResolvedNode>;
24
+ runtimeInstalled: () => boolean;
25
+ ensureRuntime: (node: ResolvedNode, logPath: string) => Promise<string>;
26
+ choosePort: (requested?: number) => Promise<number | null>;
27
+ start: typeof startLocalServer;
28
+ /** Resolves when the person asks the server to stop (Ctrl+C). */
29
+ waitForStop: (handle: LocalServerHandle) => Promise<"stopped" | "exited">;
30
+ }
31
+ export declare function defaultServerStartDeps(): ServerStartDeps;
32
+ /**
33
+ * `vana server start`: run a Personal Server owned by the signed-in account,
34
+ * in the foreground, when no server of theirs is already running.
35
+ */
36
+ export declare function runServerStart(options: {
37
+ network: VanaNetworkName;
38
+ port?: number;
39
+ noInput?: boolean;
40
+ yes?: boolean;
41
+ }, io: ServerStartIo, deps?: ServerStartDeps): Promise<number>;
42
+ //# sourceMappingURL=server-start.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-start.d.ts","sourceRoot":"","sources":["../../src/cli/server-start.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG1D,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,iBAAiB,CAAC;AAKzB,OAAO,EACL,uBAAuB,EAExB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAGL,gBAAgB,EAChB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EACnB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAML,KAAK,eAAe,EACrB,MAAM,WAAW,CAAC;AAKnB,MAAM,WAAW,aAAa;IAC5B,kDAAkD;IAClD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,8DAA8D;IAC9D,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5C,4EAA4E;IAC5E,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,eAAe;IAC9B,kBAAkB,EAAE,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAC3E,eAAe,EAAE,MAAM,eAAe,GAAG,IAAI,CAAC;IAC9C,eAAe,EAAE,CAAC,WAAW,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,OAAO,EAAE,gBAAgB,CAAC;IAC1B,QAAQ,EAAE,OAAO,uBAAuB,CAAC;IACzC,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAC1D,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IACxD,gBAAgB,EAAE,MAAM,OAAO,CAAC;IAChC,aAAa,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACxE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC3D,KAAK,EAAE,OAAO,gBAAgB,CAAC;IAC/B,iEAAiE;IACjE,WAAW,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,OAAO,CAAC,SAAS,GAAG,QAAQ,CAAC,CAAC;CAC3E;AAED,wBAAgB,sBAAsB,IAAI,eAAe,CAwBxD;AAMD;;;GAGG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE;IACP,OAAO,EAAE,eAAe,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf,EACD,EAAE,EAAE,aAAa,EACjB,IAAI,GAAE,eAA0C,GAC/C,OAAO,CAAC,MAAM,CAAC,CAsLjB"}
@@ -0,0 +1,189 @@
1
+ import { CliExitCode } from "../core/exit-codes.js";
2
+ import { getTimestampedLogPath } from "../core/paths.js";
3
+ import { ensureParentDir } from "../core/index.js";
4
+ import { canInstallNodeFor, findCompatibleNode, installManagedNode, } from "../pdpp/host.js";
5
+ import { isRuntimeInstalled, ensureRuntime, } from "../personal-server/local/runtime.js";
6
+ import { runOwnerBindingExchange, } from "../personal-server/local/owner-binding.js";
7
+ import { defaultOwnerSecretStore, ownerSecretKey, } from "../personal-server/local/owner-secret.js";
8
+ import { choosePort, findRunningServers, startLocalServer, } from "../personal-server/local/server.js";
9
+ import { getAccountUrl, isExpired, loadCredentials, openBrowser, saveCredentials, } from "./auth.js";
10
+ /** The server release needs the same Node range as the published connectors. */
11
+ const NODE_RANGE = ">=24.15.0 <25";
12
+ export function defaultServerStartDeps() {
13
+ return {
14
+ findRunningServers,
15
+ loadCredentials,
16
+ saveCredentials,
17
+ secrets: defaultOwnerSecretStore(),
18
+ exchange: runOwnerBindingExchange,
19
+ openBrowser,
20
+ findNode: findCompatibleNode,
21
+ installNode: installManagedNode,
22
+ runtimeInstalled: () => isRuntimeInstalled(),
23
+ ensureRuntime: (node, logPath) => ensureRuntime(node, logPath),
24
+ choosePort,
25
+ start: startLocalServer,
26
+ waitForStop: (handle) => new Promise((resolve) => {
27
+ // Stay subscribed until the process ends: a second Ctrl+C while the
28
+ // server shuts down must not kill the CLI before it cleans up.
29
+ const onSignal = () => resolve("stopped");
30
+ process.on("SIGINT", onSignal);
31
+ process.on("SIGTERM", onSignal);
32
+ void handle.exited.then(() => resolve("exited"));
33
+ }),
34
+ };
35
+ }
36
+ function isAddress(value) {
37
+ return /^0x[0-9a-fA-F]{40}$/.test(value);
38
+ }
39
+ /**
40
+ * `vana server start`: run a Personal Server owned by the signed-in account,
41
+ * in the foreground, when no server of theirs is already running.
42
+ */
43
+ export async function runServerStart(options, io, deps = defaultServerStartDeps()) {
44
+ const credentials = deps.loadCredentials();
45
+ const account = credentials?.account;
46
+ const signedIn = Boolean(credentials && account?.session_token && !isExpired(credentials));
47
+ if (!signedIn || !credentials || !account) {
48
+ io.say("Run `vana login` first: the server belongs to the account you sign in with.");
49
+ io.event({ type: "server-needs-login" });
50
+ return CliExitCode.CONFIRMATION_REQUIRED;
51
+ }
52
+ // One server per owner. If this account already has one (Desktop's, or an
53
+ // earlier `vana server start`), use it. Another identity's server can run
54
+ // beside ours: separate data dirs, and `vana connect` picks the one this
55
+ // account owns.
56
+ const running = await deps.findRunningServers();
57
+ const ours = running.find((server) => server.owner?.toLowerCase() === account.address.toLowerCase());
58
+ if (ours) {
59
+ io.say(`Your Personal Server is already running at ${ours.url}. Nothing to start.`);
60
+ io.event({
61
+ type: "server-already-running",
62
+ url: ours.url,
63
+ owner: ours.owner,
64
+ });
65
+ return CliExitCode.OK;
66
+ }
67
+ for (const other of running) {
68
+ io.say(other.owner
69
+ ? `${other.url} runs a Personal Server for ${other.owner}; yours will use another port.`
70
+ : `Something else answers at ${other.url}; yours will use another port.`);
71
+ }
72
+ const logPath = getTimestampedLogPath("server-start");
73
+ await ensureParentDir(logPath);
74
+ // Owner binding: once per account, then from the keychain.
75
+ const accountUrl = getAccountUrl();
76
+ const secretKey = ownerSecretKey(accountUrl, account.address);
77
+ let binding = deps.secrets.get(secretKey);
78
+ if (!binding) {
79
+ if (options.noInput) {
80
+ io.say("The first start needs you to confirm in a browser. Run it without --no-input.");
81
+ io.event({ type: "server-needs-owner-confirmation" });
82
+ return CliExitCode.CONFIRMATION_REQUIRED;
83
+ }
84
+ io.say("Confirm in your browser that this Personal Server is yours.");
85
+ try {
86
+ binding = await deps.exchange({ accountUrl, accessToken: account.session_token }, {
87
+ openBrowser: deps.openBrowser,
88
+ onConfirmationUrl: (url) => io.say(`If the browser did not open: ${url}`),
89
+ });
90
+ }
91
+ catch (error) {
92
+ io.say(error instanceof Error ? error.message : String(error));
93
+ io.event({ type: "server-owner-confirmation-failed" });
94
+ return CliExitCode.FAILURE;
95
+ }
96
+ if (isAddress(account.address) &&
97
+ binding.signerAddress.toLowerCase() !== account.address.toLowerCase()) {
98
+ io.say(`The confirmation came back signed by ${binding.signerAddress}, not ${account.address}. Nothing was saved.`);
99
+ return CliExitCode.FAILURE;
100
+ }
101
+ deps.secrets.set(secretKey, binding);
102
+ }
103
+ // One-time installs: Node 24 and the pinned server.
104
+ let node = await deps.findNode(NODE_RANGE);
105
+ const runtimeReady = deps.runtimeInstalled();
106
+ if (!node || !runtimeReady) {
107
+ const needs = [
108
+ ...(node ? [] : ["Node.js 24, which the server runs on"]),
109
+ ...(runtimeReady ? [] : ["the Personal Server itself (~175 MB)"]),
110
+ ];
111
+ if (options.noInput && !options.yes) {
112
+ io.say(`The first start installs ${needs.join(" and ")}. Run without --no-input, or add --yes.`);
113
+ io.event({ type: "server-setup-required", needs });
114
+ return CliExitCode.NOT_READY;
115
+ }
116
+ if (!options.yes &&
117
+ !(await io.confirm(`Install ${needs.join(" and ")} under ~/.vana?`))) {
118
+ io.say("Cancelled.");
119
+ return CliExitCode.FAILURE;
120
+ }
121
+ if (!node) {
122
+ if (!canInstallNodeFor(NODE_RANGE)) {
123
+ io.say(`This machine needs Node ${NODE_RANGE}; install it and set VANA_PDPP_NODE.`);
124
+ return CliExitCode.NOT_READY;
125
+ }
126
+ io.say("Installing Node.js...");
127
+ node = await deps.installNode(logPath);
128
+ }
129
+ }
130
+ if (!runtimeReady)
131
+ io.say("Installing the Personal Server (one time)...");
132
+ const runtimeDir = await deps.ensureRuntime(node, logPath);
133
+ const port = await deps.choosePort(options.port);
134
+ if (!port) {
135
+ io.say(options.port
136
+ ? `Port ${options.port} or ${options.port + 1} is taken.`
137
+ : "Ports 8080 to 8085 are taken; pass --port.");
138
+ return CliExitCode.FAILURE;
139
+ }
140
+ let handle;
141
+ try {
142
+ handle = await deps.start({
143
+ network: options.network,
144
+ node,
145
+ runtimeDir,
146
+ binding,
147
+ port,
148
+ logPath,
149
+ });
150
+ }
151
+ catch (error) {
152
+ io.say(error instanceof Error ? error.message : String(error));
153
+ io.event({ type: "server-failed", logPath });
154
+ return CliExitCode.FAILURE;
155
+ }
156
+ // `vana connect` finds the server by port scan; this token lets it write.
157
+ const url = `http://localhost:${handle.port}`;
158
+ await deps.saveCredentials({
159
+ ...credentials,
160
+ personal_server: {
161
+ url,
162
+ session_token: handle.accessToken,
163
+ expires_at: new Date(Date.now() + 30 * 24 * 60 * 60 * 1000).toISOString(),
164
+ },
165
+ });
166
+ io.say(`Personal Server running at ${url}`);
167
+ io.say(`Owner ${binding.signerAddress}, network ${options.network}.`);
168
+ io.say("Local only: not registered and not reachable from other devices yet.");
169
+ io.say("Collect into it with `vana connect <source>`. Press Ctrl+C to stop.");
170
+ io.event({
171
+ type: "server-ready",
172
+ url,
173
+ owner: binding.signerAddress,
174
+ network: options.network,
175
+ registered: false,
176
+ logPath,
177
+ });
178
+ const reason = await deps.waitForStop(handle);
179
+ await handle.stop();
180
+ if (reason === "exited") {
181
+ io.say(`The Personal Server stopped unexpectedly. See ${logPath}.`);
182
+ io.event({ type: "server-exited", logPath });
183
+ return CliExitCode.FAILURE;
184
+ }
185
+ io.say("Stopped.");
186
+ io.event({ type: "server-stopped" });
187
+ return CliExitCode.OK;
188
+ }
189
+ //# sourceMappingURL=server-start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-start.js","sourceRoot":"","sources":["../../src/cli/server-start.ts"],"names":[],"mappings":"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"}
@@ -36,4 +36,5 @@ export declare function personalServerOwnerMismatch(owner: string | null | undef
36
36
  export declare function detectPersonalServerTarget(): Promise<PersonalServerTarget>;
37
37
  export declare function ingestResult(source: string, resultPath: string, target: PersonalServerTarget, options?: IngestResultOptions): Promise<CliEvent[]>;
38
38
  export declare function resolvePersonalServerAuthConfig(serverUrl: string): PersonalServerAuthConfig;
39
+ export declare function urlsMatch(left: string, right: string): boolean;
39
40
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/personal-server/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAQ1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACzD,YAAY,EACV,oBAAoB,EACpB,iBAAiB,EACjB,YAAY,GACb,MAAM,aAAa,CAAC;AAIrB,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC;IAClD,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,MAAM,wBAAwB,GAChC;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB,SAAS,CAAC;AAEd,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAChC,cAAc,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACxC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAK3C;AAmBD,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAqDhF;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,oBAAoB,EAC5B,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,QAAQ,EAAE,CAAC,CA0ErB;AAED,wBAAgB,+BAA+B,CAC7C,SAAS,EAAE,MAAM,GAChB,wBAAwB,CAe1B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/personal-server/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAQ1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACzD,YAAY,EACV,oBAAoB,EACpB,iBAAiB,EACjB,YAAY,GACb,MAAM,aAAa,CAAC;AAIrB,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC;IAClD,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,MAAM,wBAAwB,GAChC;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB,SAAS,CAAC;AAEd,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAChC,cAAc,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACxC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAK3C;AAmBD,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAqDhF;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,oBAAoB,EAC5B,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,QAAQ,EAAE,CAAC,CA0ErB;AAED,wBAAgB,+BAA+B,CAC7C,SAAS,EAAE,MAAM,GAChB,wBAAwB,CAe1B;AAkBD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAE9D"}
@@ -162,8 +162,23 @@ export function resolvePersonalServerAuthConfig(serverUrl) {
162
162
  }
163
163
  return undefined;
164
164
  }
165
- function urlsMatch(left, right) {
166
- return left.replace(/\/+$/, "") === right.replace(/\/+$/, "");
165
+ // localhost, 127.0.0.1 and ::1 are the same server: a server reports one
166
+ // spelling and a port scan or a saved URL often uses another.
167
+ const LOOPBACK_HOSTS = new Set(["localhost", "127.0.0.1", "[::1]"]);
168
+ function normalizeServerUrl(value) {
169
+ try {
170
+ const url = new URL(value);
171
+ if (LOOPBACK_HOSTS.has(url.hostname)) {
172
+ url.hostname = "localhost";
173
+ }
174
+ return url.toString().replace(/\/+$/, "");
175
+ }
176
+ catch {
177
+ return value.replace(/\/+$/, "");
178
+ }
179
+ }
180
+ export function urlsMatch(left, right) {
181
+ return normalizeServerUrl(left) === normalizeServerUrl(right);
167
182
  }
168
183
  async function fetchHealth(baseUrl) {
169
184
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/personal-server/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/personal-server/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { VanaNetworkName } from "../../core/network.js";
2
+ /** What a Personal Server needs to know about the network it serves. */
3
+ export interface LocalServerNetwork {
4
+ name: VanaNetworkName;
5
+ chainId: number;
6
+ gatewayUrl: string;
7
+ storageApiUrl: string;
8
+ contracts: Record<string, string>;
9
+ }
10
+ export declare function localServerNetwork(name: VanaNetworkName): LocalServerNetwork;
11
+ /** The pinned server release, matching runtime-pkg/package.json. */
12
+ export declare const PERSONAL_SERVER_VERSION = "1.24.6";
13
+ export declare function localServerHome(): string;
14
+ /**
15
+ * The CLI's own data dir per network. Never Desktop's
16
+ * (`~/.vana/desktop/personal-server/...`): two processes on one index and one
17
+ * server key would corrupt both.
18
+ */
19
+ export declare function localServerDataDir(network: VanaNetworkName): string;
20
+ export declare function localServerRuntimeDir(): string;
21
+ /** Ports Desktop and the CLI both try first; the loopback approval page is port + 1. */
22
+ export declare const LOCAL_SERVER_PORTS: readonly [8080, 8082, 8084];
23
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/personal-server/local/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,wEAAwE;AACxE,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AA+BD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,eAAe,GAAG,kBAAkB,CAE5E;AAED,oEAAoE;AACpE,eAAO,MAAM,uBAAuB,WAAW,CAAC;AAEhD,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAEnE;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,wFAAwF;AACxF,eAAO,MAAM,kBAAkB,6BAA8B,CAAC"}
@@ -0,0 +1,51 @@
1
+ import path from "node:path";
2
+ import { getVanaHome } from "../../core/paths.js";
3
+ // Same deployment on both chains. Mirrors the `contracts` block of Vana
4
+ // Desktop's packages/app-runtime/src/personal-server/environments.json.
5
+ const CONTRACTS = {
6
+ dataPortabilityEscrow: "0x07d7769081adc3a3DBe91f5E4B98E9A5a6B292e3",
7
+ dataPortabilityGrantees: "0x8325C0A0948483EdA023A1A2Fd895e62C5131234",
8
+ dataPortabilityPermissions: "0x4d3FA76064D88e0454cFc4CaD7e5FeC3e3124011",
9
+ dataPortabilityServer: "0xCae2CE0e9caa6643ed28186cF57bd40Bd9E17Eab",
10
+ dataRefinerRegistry: "0x93c3EF89369fDcf08Be159D9DeF0F18AB6Be008c",
11
+ dataRegistry: "0x8f1eFCdff3d0d5BB535e32620721c7EBed151867",
12
+ feeRegistry: "0xb4FA18443E0FA6cdC0280D20b8cCDB2377D13Bf2",
13
+ };
14
+ const NETWORKS = {
15
+ moksha: {
16
+ name: "moksha",
17
+ chainId: 14800,
18
+ gatewayUrl: "https://dp-rpc.moksha.vana.org",
19
+ storageApiUrl: "https://storage-dev.vana.org",
20
+ contracts: CONTRACTS,
21
+ },
22
+ mainnet: {
23
+ name: "mainnet",
24
+ chainId: 1480,
25
+ gatewayUrl: "https://dp-rpc.vana.org",
26
+ storageApiUrl: "https://storage.vana.org",
27
+ contracts: CONTRACTS,
28
+ },
29
+ };
30
+ export function localServerNetwork(name) {
31
+ return NETWORKS[name];
32
+ }
33
+ /** The pinned server release, matching runtime-pkg/package.json. */
34
+ export const PERSONAL_SERVER_VERSION = "1.24.6";
35
+ export function localServerHome() {
36
+ return path.join(getVanaHome(), "cli", "personal-server");
37
+ }
38
+ /**
39
+ * The CLI's own data dir per network. Never Desktop's
40
+ * (`~/.vana/desktop/personal-server/...`): two processes on one index and one
41
+ * server key would corrupt both.
42
+ */
43
+ export function localServerDataDir(network) {
44
+ return path.join(localServerHome(), network);
45
+ }
46
+ export function localServerRuntimeDir() {
47
+ return path.join(localServerHome(), "runtime", PERSONAL_SERVER_VERSION);
48
+ }
49
+ /** Ports Desktop and the CLI both try first; the loopback approval page is port + 1. */
50
+ export const LOCAL_SERVER_PORTS = [8080, 8082, 8084];
51
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/personal-server/local/config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAYlD,wEAAwE;AACxE,wEAAwE;AACxE,MAAM,SAAS,GAA2B;IACxC,qBAAqB,EAAE,4CAA4C;IACnE,uBAAuB,EAAE,4CAA4C;IACrE,0BAA0B,EAAE,4CAA4C;IACxE,qBAAqB,EAAE,4CAA4C;IACnE,mBAAmB,EAAE,4CAA4C;IACjE,YAAY,EAAE,4CAA4C;IAC1D,WAAW,EAAE,4CAA4C;CAC1D,CAAC;AAEF,MAAM,QAAQ,GAAgD;IAC5D,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,KAAK;QACd,UAAU,EAAE,gCAAgC;QAC5C,aAAa,EAAE,8BAA8B;QAC7C,SAAS,EAAE,SAAS;KACrB;IACD,OAAO,EAAE;QACP,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,IAAI;QACb,UAAU,EAAE,yBAAyB;QACrC,aAAa,EAAE,0BAA0B;QACzC,SAAS,EAAE,SAAS;KACrB;CACF,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAAC,IAAqB;IACtD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AAED,oEAAoE;AACpE,MAAM,CAAC,MAAM,uBAAuB,GAAG,QAAQ,CAAC;AAEhD,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC;AAC5D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAwB;IACzD,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,OAAO,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,uBAAuB,CAAC,CAAC;AAC1E,CAAC;AAED,wFAAwF;AACxF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAU,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * The signature a Personal Server's owner makes over this exact message. The
3
+ * server recovers its owner from it and derives the data encryption key from
4
+ * it, so it is as sensitive as a key.
5
+ */
6
+ export declare const OWNER_BINDING_MESSAGE = "vana-master-key-v1";
7
+ export declare const OWNER_BINDING_INTENT = "personal_server.owner_binding.v1";
8
+ export interface OwnerBinding {
9
+ signature: string;
10
+ signerAddress: string;
11
+ /**
12
+ * Account's proof that this owner approved this client, needed later to
13
+ * register the server. Present for public native clients such as the CLI.
14
+ */
15
+ trustToken: string | null;
16
+ }
17
+ export interface OwnerBindingDeps {
18
+ fetchImpl?: typeof fetch;
19
+ openBrowser: (url: string) => void;
20
+ /** Called with the confirmation URL, so a person can open it by hand. */
21
+ onConfirmationUrl?: (url: string) => void;
22
+ timeoutMs?: number;
23
+ }
24
+ /**
25
+ * Get the owner-binding signature through Account's signing exchange: Account
26
+ * never signs silently for the CLI, so the person confirms in the browser,
27
+ * and the result comes back to a one-time loopback listener.
28
+ */
29
+ export declare function runOwnerBindingExchange(input: {
30
+ accountUrl: string;
31
+ accessToken: string;
32
+ }, deps: OwnerBindingDeps): Promise<OwnerBinding>;
33
+ //# sourceMappingURL=owner-binding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"owner-binding.d.ts","sourceRoot":"","sources":["../../../src/personal-server/local/owner-binding.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,uBAAuB,CAAC;AAC1D,eAAO,MAAM,oBAAoB,qCAAqC,CAAC;AAEvE,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,yEAAyE;IACzE,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAmED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,EAClD,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,YAAY,CAAC,CA6FvB"}
@@ -0,0 +1,155 @@
1
+ import crypto from "node:crypto";
2
+ import http from "node:http";
3
+ /**
4
+ * The signature a Personal Server's owner makes over this exact message. The
5
+ * server recovers its owner from it and derives the data encryption key from
6
+ * it, so it is as sensitive as a key.
7
+ */
8
+ export const OWNER_BINDING_MESSAGE = "vana-master-key-v1";
9
+ export const OWNER_BINDING_INTENT = "personal_server.owner_binding.v1";
10
+ const DEFAULT_TIMEOUT_MS = 5 * 60 * 1000;
11
+ function base64url(bytes) {
12
+ return bytes.toString("base64url");
13
+ }
14
+ const DONE_PAGE = `<!doctype html><meta charset="utf-8"><title>Vana CLI</title>
15
+ <body style="font-family:system-ui;margin:4rem"><h1>Done</h1><p>You can close this tab and return to the terminal.</p></body>`;
16
+ const FAILED_PAGE = `<!doctype html><meta charset="utf-8"><title>Vana CLI</title>
17
+ <body style="font-family:system-ui;margin:4rem"><h1>That did not work</h1><p>Return to the terminal for details.</p></body>`;
18
+ /**
19
+ * Wait for Account to send the browser back to this machine with the
20
+ * exchange's one-time code. Listens on 127.0.0.1 only, accepts exactly one
21
+ * request whose state matches, and closes.
22
+ */
23
+ async function startLoopbackCallback(expectedState) {
24
+ let settle = null;
25
+ const code = new Promise((resolve, reject) => {
26
+ settle = { resolve, reject };
27
+ });
28
+ const server = http.createServer((request, response) => {
29
+ const url = new URL(request.url ?? "/", "http://127.0.0.1");
30
+ if (url.pathname !== "/signing/callback") {
31
+ response.writeHead(404).end();
32
+ return;
33
+ }
34
+ const state = url.searchParams.get("state");
35
+ const received = url.searchParams.get("code");
36
+ const error = url.searchParams.get("error");
37
+ if (state !== expectedState) {
38
+ // Not ours; keep waiting for the real callback.
39
+ response.writeHead(400, { "content-type": "text/html" }).end(FAILED_PAGE);
40
+ return;
41
+ }
42
+ if (error || !received) {
43
+ response.writeHead(200, { "content-type": "text/html" }).end(FAILED_PAGE);
44
+ settle?.reject(new Error(error === "access_denied"
45
+ ? "The request was declined in the browser."
46
+ : `Account returned ${error ?? "no code"}.`));
47
+ return;
48
+ }
49
+ response.writeHead(200, { "content-type": "text/html" }).end(DONE_PAGE);
50
+ settle?.resolve(received);
51
+ });
52
+ await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve));
53
+ const { port } = server.address();
54
+ return {
55
+ redirectUri: `http://127.0.0.1:${port}/signing/callback`,
56
+ code,
57
+ close: () => server.close(),
58
+ };
59
+ }
60
+ /**
61
+ * Get the owner-binding signature through Account's signing exchange: Account
62
+ * never signs silently for the CLI, so the person confirms in the browser,
63
+ * and the result comes back to a one-time loopback listener.
64
+ */
65
+ export async function runOwnerBindingExchange(input, deps) {
66
+ const fetchImpl = deps.fetchImpl ?? fetch;
67
+ const account = input.accountUrl.replace(/\/+$/, "");
68
+ const state = base64url(crypto.randomBytes(32));
69
+ const codeVerifier = base64url(crypto.randomBytes(32));
70
+ const codeChallenge = base64url(crypto.createHash("sha256").update(codeVerifier).digest());
71
+ const callback = await startLoopbackCallback(state);
72
+ try {
73
+ const created = await fetchImpl(`${account}/api/v1/signing-exchanges`, {
74
+ method: "POST",
75
+ headers: {
76
+ "content-type": "application/json",
77
+ authorization: `Bearer ${input.accessToken}`,
78
+ },
79
+ body: JSON.stringify({
80
+ intent: OWNER_BINDING_INTENT,
81
+ redirectUri: callback.redirectUri,
82
+ state,
83
+ codeChallenge,
84
+ codeChallengeMethod: "S256",
85
+ }),
86
+ });
87
+ if (!created.ok) {
88
+ throw new Error(await describeFailure("start the owner confirmation", created));
89
+ }
90
+ const { confirmationUrl } = (await created.json());
91
+ if (!confirmationUrl) {
92
+ throw new Error("Account did not return a confirmation page.");
93
+ }
94
+ deps.onConfirmationUrl?.(confirmationUrl);
95
+ deps.openBrowser(confirmationUrl);
96
+ const timeoutMs = deps.timeoutMs ?? DEFAULT_TIMEOUT_MS;
97
+ let timer = null;
98
+ const code = await Promise.race([
99
+ callback.code,
100
+ new Promise((_, reject) => {
101
+ timer = setTimeout(() => reject(new Error("Nobody confirmed in the browser in time.")), timeoutMs);
102
+ }),
103
+ ]).finally(() => {
104
+ if (timer)
105
+ clearTimeout(timer);
106
+ });
107
+ const redeemed = await fetchImpl(`${account}/api/v1/signing-exchanges/redeem`, {
108
+ method: "POST",
109
+ headers: {
110
+ "content-type": "application/json",
111
+ authorization: `Bearer ${input.accessToken}`,
112
+ },
113
+ body: JSON.stringify({
114
+ code,
115
+ state,
116
+ codeVerifier,
117
+ redirectUri: callback.redirectUri,
118
+ }),
119
+ });
120
+ if (!redeemed.ok) {
121
+ throw new Error(await describeFailure("finish the owner confirmation", redeemed));
122
+ }
123
+ const body = (await redeemed.json());
124
+ if (body.status !== "signed" || !body.signature || !body.signerAddress) {
125
+ throw new Error("Account answered the owner confirmation without a signature.");
126
+ }
127
+ return {
128
+ signature: body.signature,
129
+ signerAddress: body.signerAddress,
130
+ trustToken: body.desktopSigningTrustToken ?? null,
131
+ };
132
+ }
133
+ finally {
134
+ callback.close();
135
+ }
136
+ }
137
+ async function describeFailure(step, response) {
138
+ let code = "";
139
+ try {
140
+ const body = (await response.json());
141
+ code = body.error?.code ?? "";
142
+ }
143
+ catch {
144
+ // Not JSON.
145
+ }
146
+ if (response.status === 401) {
147
+ return `Could not ${step}: your vana login is not accepted. Run \`vana login\` again.`;
148
+ }
149
+ if (code === "client_not_allowed" ||
150
+ code === "intent_not_allowed_for_client") {
151
+ return `Could not ${step}: this Vana Account does not let the CLI run a Personal Server yet (${code}).`;
152
+ }
153
+ return `Could not ${step} (HTTP ${response.status}${code ? `, ${code}` : ""}).`;
154
+ }
155
+ //# sourceMappingURL=owner-binding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"owner-binding.js","sourceRoot":"","sources":["../../../src/personal-server/local/owner-binding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { OwnerBinding } from "./owner-binding.js";
2
+ /**
3
+ * Where the owner-binding signature is kept between starts, so starting a
4
+ * server does not ask for a browser confirmation every time. It derives the
5
+ * server's encryption key, so on macOS it lives in the keychain; elsewhere in
6
+ * a 0600 file, as the app key does.
7
+ */
8
+ export interface OwnerSecretStore {
9
+ get(key: string): OwnerBinding | null;
10
+ set(key: string, binding: OwnerBinding): void;
11
+ delete(key: string): void;
12
+ }
13
+ export declare function ownerSecretKey(accountUrl: string, address: string): string;
14
+ declare function fileStore(file?: string): OwnerSecretStore;
15
+ export declare function defaultOwnerSecretStore(): OwnerSecretStore;
16
+ export { fileStore as fileOwnerSecretStore };
17
+ //# sourceMappingURL=owner-secret.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"owner-secret.d.ts","sourceRoot":"","sources":["../../../src/personal-server/local/owner-secret.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAAC;IACtC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;IAC9C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAID,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE1E;AAoED,iBAAS,SAAS,CAChB,IAAI,SAAsD,GACzD,gBAAgB,CA4BlB;AAiBD,wBAAgB,uBAAuB,IAAI,gBAAgB,CAI1D;AAED,OAAO,EAAE,SAAS,IAAI,oBAAoB,EAAE,CAAC"}