vana-cli 0.26.0 → 0.28.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 (34) hide show
  1. package/README.md +7 -0
  2. package/dist/cli/index.d.ts.map +1 -1
  3. package/dist/cli/index.js +28 -0
  4. package/dist/cli/index.js.map +1 -1
  5. package/dist/cli/server-start.d.ts +14 -1
  6. package/dist/cli/server-start.d.ts.map +1 -1
  7. package/dist/cli/server-start.js +207 -5
  8. package/dist/cli/server-start.js.map +1 -1
  9. package/dist/personal-server/local/config.d.ts +5 -0
  10. package/dist/personal-server/local/config.d.ts.map +1 -1
  11. package/dist/personal-server/local/config.js +4 -2
  12. package/dist/personal-server/local/config.js.map +1 -1
  13. package/dist/personal-server/local/detach.d.ts +29 -0
  14. package/dist/personal-server/local/detach.d.ts.map +1 -0
  15. package/dist/personal-server/local/detach.js +134 -0
  16. package/dist/personal-server/local/detach.js.map +1 -0
  17. package/dist/personal-server/local/frpc.d.ts +59 -0
  18. package/dist/personal-server/local/frpc.d.ts.map +1 -0
  19. package/dist/personal-server/local/frpc.js +191 -0
  20. package/dist/personal-server/local/frpc.js.map +1 -0
  21. package/dist/personal-server/local/owner-binding.d.ts +22 -2
  22. package/dist/personal-server/local/owner-binding.d.ts.map +1 -1
  23. package/dist/personal-server/local/owner-binding.js +23 -14
  24. package/dist/personal-server/local/owner-binding.js.map +1 -1
  25. package/dist/personal-server/local/registration.d.ts +42 -0
  26. package/dist/personal-server/local/registration.d.ts.map +1 -0
  27. package/dist/personal-server/local/registration.js +81 -0
  28. package/dist/personal-server/local/registration.js.map +1 -0
  29. package/dist/personal-server/local/runtime-pkg/entry.mjs +138 -20
  30. package/dist/personal-server/local/server.d.ts +25 -0
  31. package/dist/personal-server/local/server.d.ts.map +1 -1
  32. package/dist/personal-server/local/server.js +80 -4
  33. package/dist/personal-server/local/server.js.map +1 -1
  34. package/package.json +1 -1
@@ -0,0 +1,59 @@
1
+ /**
2
+ * The tunnel client the Personal Server runs to get its public URL. Same
3
+ * version the pinned server would download for itself.
4
+ */
5
+ export declare const FRPC_VERSION = "0.67.0";
6
+ /** The Apple team that signs the CLI and Vana Desktop. */
7
+ export declare const VANA_APPLE_TEAM_ID = "G7QNBSSW44";
8
+ interface FrpcArtifact {
9
+ url: string;
10
+ sha256: string;
11
+ /** The binary's path inside the archive. */
12
+ entry: string;
13
+ }
14
+ /**
15
+ * Pinned downloads per platform. A Mac never gets upstream's build: it is
16
+ * ad-hoc signed, and endpoint security on managed Macs treats an ad-hoc
17
+ * binary run from the home directory as persistence. Macs download the copy
18
+ * the sign-frpc workflow signed and notarized with Vana's Developer ID.
19
+ */
20
+ export declare const FRPC_ARTIFACTS: Record<string, FrpcArtifact>;
21
+ /** Where Vana Desktop ships its signed frpc. */
22
+ export declare const DESKTOP_FRPC_PATHS: string[];
23
+ export type FrpcResolution = {
24
+ kind: "ready";
25
+ path: string;
26
+ source: "env" | "managed" | "desktop";
27
+ } | {
28
+ kind: "installable";
29
+ } | {
30
+ kind: "unavailable";
31
+ reason: string;
32
+ };
33
+ export interface FrpcDeps {
34
+ env: NodeJS.ProcessEnv;
35
+ platform: NodeJS.Platform;
36
+ arch: string;
37
+ managedDir: string;
38
+ desktopPaths: string[];
39
+ /** True when `file` carries a valid signature from `teamId`. */
40
+ signedByTeam: (file: string, teamId: string) => Promise<boolean>;
41
+ }
42
+ export declare function managedFrpcDir(): string;
43
+ export declare function signedByTeam(file: string, teamId: string): Promise<boolean>;
44
+ /**
45
+ * Find a tunnel client this machine may run, without downloading anything.
46
+ * `VANA_FRPC_PATH` wins; then the CLI's own verified install; then, on a
47
+ * Mac, Vana Desktop's copy when it carries Vana's signature, which saves a
48
+ * download.
49
+ */
50
+ export declare function resolveFrpc(overrides?: Partial<FrpcDeps>): Promise<FrpcResolution>;
51
+ /**
52
+ * Download the pinned frpc for this platform, check its sha256, and install
53
+ * it under ~/.vana/cli/personal-server/frpc/<version>.
54
+ */
55
+ export declare function installFrpc(logPath: string, overrides?: Partial<FrpcDeps> & {
56
+ fetchImpl?: typeof fetch;
57
+ }): Promise<string>;
58
+ export {};
59
+ //# sourceMappingURL=frpc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frpc.d.ts","sourceRoot":"","sources":["../../../src/personal-server/local/frpc.ts"],"names":[],"mappings":"AAcA;;;GAGG;AACH,eAAO,MAAM,YAAY,WAAW,CAAC;AAErC,0DAA0D;AAC1D,eAAO,MAAM,kBAAkB,eAAe,CAAC;AAE/C,UAAU,YAAY;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;CACf;AAoBD;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAwBvD,CAAC;AAEF,gDAAgD;AAChD,eAAO,MAAM,kBAAkB,UAM9B,CAAC;AAEF,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,KAAK,GAAG,SAAS,GAAG,SAAS,CAAA;CAAE,GACtE;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5C,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,gEAAgE;IAChE,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAClE;AAMD,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC,CASlB;AAqBD;;;;;GAKG;AACH,wBAAsB,WAAW,CAC/B,SAAS,GAAE,OAAO,CAAC,QAAQ,CAAM,GAChC,OAAO,CAAC,cAAc,CAAC,CA2CzB;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,OAAO,CAAC,QAAQ,CAAC,GAAG;IAAE,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;CAAO,GAC/D,OAAO,CAAC,MAAM,CAAC,CAyDjB"}
@@ -0,0 +1,191 @@
1
+ import crypto from "node:crypto";
2
+ import { execFile } from "node:child_process";
3
+ import fs from "node:fs";
4
+ import fsp from "node:fs/promises";
5
+ import os from "node:os";
6
+ import path from "node:path";
7
+ import { promisify } from "node:util";
8
+ import * as tar from "tar";
9
+ import { localServerHome } from "./config.js";
10
+ const execFileAsync = promisify(execFile);
11
+ /**
12
+ * The tunnel client the Personal Server runs to get its public URL. Same
13
+ * version the pinned server would download for itself.
14
+ */
15
+ export const FRPC_VERSION = "0.67.0";
16
+ /** The Apple team that signs the CLI and Vana Desktop. */
17
+ export const VANA_APPLE_TEAM_ID = "G7QNBSSW44";
18
+ function upstream(name, ext, sha256) {
19
+ const base = `frp_${FRPC_VERSION}_${name}`;
20
+ return {
21
+ url: `https://github.com/fatedier/frp/releases/download/v${FRPC_VERSION}/${base}.${ext}`,
22
+ sha256,
23
+ entry: `${base}/${name.startsWith("windows") ? "frpc.exe" : "frpc"}`,
24
+ };
25
+ }
26
+ function signed(name, sha256) {
27
+ const base = `frp_${FRPC_VERSION}_${name}`;
28
+ return {
29
+ url: `https://github.com/vana-com/vana-cli/releases/download/frpc-v${FRPC_VERSION}/${base}.tar.gz`,
30
+ sha256,
31
+ entry: `${base}/frpc`,
32
+ };
33
+ }
34
+ /**
35
+ * Pinned downloads per platform. A Mac never gets upstream's build: it is
36
+ * ad-hoc signed, and endpoint security on managed Macs treats an ad-hoc
37
+ * binary run from the home directory as persistence. Macs download the copy
38
+ * the sign-frpc workflow signed and notarized with Vana's Developer ID.
39
+ */
40
+ export const FRPC_ARTIFACTS = {
41
+ "darwin-arm64": signed("darwin_arm64", "e0a45a02b8be7d2e0e3221b1e1deb242b490a1e6a685beeff04bcd96cb42a9f1"),
42
+ "darwin-x64": signed("darwin_amd64", "106f023c440b395cf7d21283536a87156c69f26ebf40fd0084f11fc01de8f6a4"),
43
+ "linux-x64": upstream("linux_amd64", "tar.gz", "f8629ca7ca56b8e7e7a9903779b8d5c47c56ad1b75b99b2d7138477acc4c7105"),
44
+ "linux-arm64": upstream("linux_arm64", "tar.gz", "0e9683226acdcbbb2ac8d073f35ba8be2a8b1e7584684d2073f39d337ebd6de7"),
45
+ "win32-x64": upstream("windows_amd64", "zip", "8baf23e3fbd486f6ba0913501372c5ff0053efa88a8b8d391f3605ced43d2af5"),
46
+ };
47
+ /** Where Vana Desktop ships its signed frpc. */
48
+ export const DESKTOP_FRPC_PATHS = [
49
+ "/Applications/Vana.app/Contents/Resources/personal-server/dist/frpc",
50
+ path.join(os.homedir(), "Applications/Vana.app/Contents/Resources/personal-server/dist/frpc"),
51
+ ];
52
+ function binaryName(platform) {
53
+ return platform === "win32" ? "frpc.exe" : "frpc";
54
+ }
55
+ export function managedFrpcDir() {
56
+ return path.join(localServerHome(), "frpc", FRPC_VERSION);
57
+ }
58
+ export async function signedByTeam(file, teamId) {
59
+ try {
60
+ await execFileAsync("codesign", ["--verify", "--strict", file]);
61
+ // `codesign -dv` reports on stderr.
62
+ const { stderr } = await execFileAsync("codesign", ["-dv", file]);
63
+ return new RegExp(`^TeamIdentifier=${teamId}$`, "m").test(stderr);
64
+ }
65
+ catch {
66
+ return false;
67
+ }
68
+ }
69
+ function defaultDeps() {
70
+ return {
71
+ env: process.env,
72
+ platform: process.platform,
73
+ arch: process.arch,
74
+ managedDir: managedFrpcDir(),
75
+ desktopPaths: DESKTOP_FRPC_PATHS,
76
+ signedByTeam,
77
+ };
78
+ }
79
+ function isFile(file) {
80
+ try {
81
+ return fs.statSync(file).isFile();
82
+ }
83
+ catch {
84
+ return false;
85
+ }
86
+ }
87
+ /**
88
+ * Find a tunnel client this machine may run, without downloading anything.
89
+ * `VANA_FRPC_PATH` wins; then the CLI's own verified install; then, on a
90
+ * Mac, Vana Desktop's copy when it carries Vana's signature, which saves a
91
+ * download.
92
+ */
93
+ export async function resolveFrpc(overrides = {}) {
94
+ const deps = { ...defaultDeps(), ...overrides };
95
+ const fromEnv = deps.env.VANA_FRPC_PATH;
96
+ if (fromEnv) {
97
+ return isFile(fromEnv)
98
+ ? { kind: "ready", path: fromEnv, source: "env" }
99
+ : {
100
+ kind: "unavailable",
101
+ reason: `VANA_FRPC_PATH (${fromEnv}) is not a file.`,
102
+ };
103
+ }
104
+ const artifact = FRPC_ARTIFACTS[`${deps.platform}-${deps.arch}`];
105
+ const managed = path.join(deps.managedDir, binaryName(deps.platform));
106
+ if (artifact && isFile(managed)) {
107
+ try {
108
+ const marker = fs
109
+ .readFileSync(path.join(deps.managedDir, ".installed"), "utf8")
110
+ .trim();
111
+ if (marker === artifact.sha256) {
112
+ return { kind: "ready", path: managed, source: "managed" };
113
+ }
114
+ }
115
+ catch {
116
+ // No marker: reinstall.
117
+ }
118
+ }
119
+ if (deps.platform === "darwin") {
120
+ for (const candidate of deps.desktopPaths) {
121
+ if (isFile(candidate) &&
122
+ (await deps.signedByTeam(candidate, VANA_APPLE_TEAM_ID))) {
123
+ return { kind: "ready", path: candidate, source: "desktop" };
124
+ }
125
+ }
126
+ }
127
+ if (artifact)
128
+ return { kind: "installable" };
129
+ return {
130
+ kind: "unavailable",
131
+ reason: `No tunnel client is pinned for ${deps.platform}-${deps.arch}. Set VANA_FRPC_PATH.`,
132
+ };
133
+ }
134
+ /**
135
+ * Download the pinned frpc for this platform, check its sha256, and install
136
+ * it under ~/.vana/cli/personal-server/frpc/<version>.
137
+ */
138
+ export async function installFrpc(logPath, overrides = {}) {
139
+ const deps = { ...defaultDeps(), ...overrides };
140
+ const key = `${deps.platform}-${deps.arch}`;
141
+ const artifact = FRPC_ARTIFACTS[key];
142
+ if (!artifact) {
143
+ throw new Error(`No tunnel client is pinned for ${key}.`);
144
+ }
145
+ await fsp.appendFile(logPath, `Downloading ${artifact.url}\n`, "utf8");
146
+ const response = await (overrides.fetchImpl ?? fetch)(artifact.url, {
147
+ headers: { "User-Agent": "vana-cli" },
148
+ });
149
+ if (!response.ok) {
150
+ throw new Error(`Could not download the tunnel client: ${response.status}`);
151
+ }
152
+ const archive = Buffer.from(await response.arrayBuffer());
153
+ const actual = crypto.createHash("sha256").update(archive).digest("hex");
154
+ if (actual !== artifact.sha256) {
155
+ throw new Error(`The tunnel client download failed its checksum (expected ${artifact.sha256}, got ${actual}).`);
156
+ }
157
+ const parent = path.dirname(deps.managedDir);
158
+ await fsp.mkdir(parent, { recursive: true });
159
+ const staging = await fsp.mkdtemp(path.join(parent, ".staging-"));
160
+ try {
161
+ const archivePath = path.join(staging, path.basename(artifact.url));
162
+ await fsp.writeFile(archivePath, archive);
163
+ if (artifact.url.endsWith(".zip")) {
164
+ // Windows 10+ ships a bsdtar that reads zip.
165
+ await execFileAsync("tar", ["-xf", archivePath, "-C", staging]);
166
+ }
167
+ else {
168
+ await tar.x({ file: archivePath, cwd: staging });
169
+ }
170
+ const installed = path.join(staging, "out");
171
+ await fsp.mkdir(installed);
172
+ const target = path.join(installed, binaryName(deps.platform));
173
+ await fsp.rename(path.join(staging, artifact.entry), target);
174
+ if (deps.platform !== "win32")
175
+ await fsp.chmod(target, 0o755);
176
+ // The hash already pins it; the signature check is what endpoint
177
+ // security will judge, so refuse anything it would flag.
178
+ if (deps.platform === "darwin" &&
179
+ !(await deps.signedByTeam(target, VANA_APPLE_TEAM_ID))) {
180
+ throw new Error("The tunnel client is not signed by Vana.");
181
+ }
182
+ await fsp.writeFile(path.join(installed, ".installed"), `${artifact.sha256}\n`);
183
+ await fsp.rm(deps.managedDir, { recursive: true, force: true });
184
+ await fsp.rename(installed, deps.managedDir);
185
+ return path.join(deps.managedDir, binaryName(deps.platform));
186
+ }
187
+ finally {
188
+ await fsp.rm(staging, { recursive: true, force: true });
189
+ }
190
+ }
191
+ //# sourceMappingURL=frpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frpc.js","sourceRoot":"","sources":["../../../src/personal-server/local/frpc.ts"],"names":[],"mappings":"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"}
@@ -21,13 +21,33 @@ export interface OwnerBindingDeps {
21
21
  onConfirmationUrl?: (url: string) => void;
22
22
  timeoutMs?: number;
23
23
  }
24
+ /** What Account returns when an exchange is redeemed. */
25
+ export interface RedeemedExchange {
26
+ status?: string;
27
+ signature?: string;
28
+ signerAddress?: string;
29
+ desktopSigningTrustToken?: string;
30
+ typedData?: unknown;
31
+ }
32
+ /**
33
+ * Run one Account signing exchange: the person confirms in the browser, and
34
+ * the result comes back to a one-time loopback listener, bound to this
35
+ * process by state and PKCE. `step` names the request in error messages.
36
+ */
37
+ export declare function runSigningExchange(input: {
38
+ accountUrl: string;
39
+ accessToken: string;
40
+ intent: string;
41
+ payload?: Record<string, unknown>;
42
+ step: string;
43
+ }, deps: OwnerBindingDeps): Promise<RedeemedExchange>;
24
44
  /**
25
45
  * 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.
46
+ * never signs it silently for the CLI, so the person confirms in the browser.
28
47
  */
29
48
  export declare function runOwnerBindingExchange(input: {
30
49
  accountUrl: string;
31
50
  accessToken: string;
32
51
  }, deps: OwnerBindingDeps): Promise<OwnerBinding>;
52
+ export declare function describeFailure(step: string, response: Response): Promise<string>;
33
53
  //# sourceMappingURL=owner-binding.d.ts.map
@@ -1 +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"}
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,yDAAyD;AACzD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE;IACL,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,IAAI,EAAE,MAAM,CAAC;CACd,EACD,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,gBAAgB,CAAC,CAqF3B;AAED;;;GAGG;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,CAUvB;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,MAAM,CAAC,CAkBjB"}
@@ -58,11 +58,11 @@ async function startLoopbackCallback(expectedState) {
58
58
  };
59
59
  }
60
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.
61
+ * Run one Account signing exchange: the person confirms in the browser, and
62
+ * the result comes back to a one-time loopback listener, bound to this
63
+ * process by state and PKCE. `step` names the request in error messages.
64
64
  */
65
- export async function runOwnerBindingExchange(input, deps) {
65
+ export async function runSigningExchange(input, deps) {
66
66
  const fetchImpl = deps.fetchImpl ?? fetch;
67
67
  const account = input.accountUrl.replace(/\/+$/, "");
68
68
  const state = base64url(crypto.randomBytes(32));
@@ -77,7 +77,8 @@ export async function runOwnerBindingExchange(input, deps) {
77
77
  authorization: `Bearer ${input.accessToken}`,
78
78
  },
79
79
  body: JSON.stringify({
80
- intent: OWNER_BINDING_INTENT,
80
+ intent: input.intent,
81
+ ...(input.payload ? { payload: input.payload } : {}),
81
82
  redirectUri: callback.redirectUri,
82
83
  state,
83
84
  codeChallenge,
@@ -85,7 +86,7 @@ export async function runOwnerBindingExchange(input, deps) {
85
86
  }),
86
87
  });
87
88
  if (!created.ok) {
88
- throw new Error(await describeFailure("start the owner confirmation", created));
89
+ throw new Error(await describeFailure(`start the ${input.step}`, created));
89
90
  }
90
91
  const { confirmationUrl } = (await created.json());
91
92
  if (!confirmationUrl) {
@@ -118,23 +119,31 @@ export async function runOwnerBindingExchange(input, deps) {
118
119
  }),
119
120
  });
120
121
  if (!redeemed.ok) {
121
- throw new Error(await describeFailure("finish the owner confirmation", redeemed));
122
+ throw new Error(await describeFailure(`finish the ${input.step}`, redeemed));
122
123
  }
123
124
  const body = (await redeemed.json());
124
125
  if (body.status !== "signed" || !body.signature || !body.signerAddress) {
125
- throw new Error("Account answered the owner confirmation without a signature.");
126
+ throw new Error(`Account answered the ${input.step} without a signature.`);
126
127
  }
127
- return {
128
- signature: body.signature,
129
- signerAddress: body.signerAddress,
130
- trustToken: body.desktopSigningTrustToken ?? null,
131
- };
128
+ return body;
132
129
  }
133
130
  finally {
134
131
  callback.close();
135
132
  }
136
133
  }
137
- async function describeFailure(step, response) {
134
+ /**
135
+ * Get the owner-binding signature through Account's signing exchange: Account
136
+ * never signs it silently for the CLI, so the person confirms in the browser.
137
+ */
138
+ export async function runOwnerBindingExchange(input, deps) {
139
+ const body = await runSigningExchange({ ...input, intent: OWNER_BINDING_INTENT, step: "owner confirmation" }, deps);
140
+ return {
141
+ signature: body.signature,
142
+ signerAddress: body.signerAddress,
143
+ trustToken: body.desktopSigningTrustToken ?? null,
144
+ };
145
+ }
146
+ export async function describeFailure(step, response) {
138
147
  let code = "";
139
148
  try {
140
149
  const body = (await response.json());
@@ -1 +1 @@
1
- {"version":3,"file":"owner-binding.js","sourceRoot":"","sources":["../../../src/personal-server/local/owner-binding.ts"],"names":[],"mappings":"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"}
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,42 @@
1
+ import { type OwnerBindingDeps } from "./owner-binding.js";
2
+ export declare const SERVER_REGISTRATION_INTENT = "personal_server.server_registration.v1";
3
+ /** What the server's prepareRegistration() returns; the CLI only reads the typed data. */
4
+ export interface RegistrationRequest {
5
+ typedData: {
6
+ domain?: {
7
+ chainId?: number | string;
8
+ verifyingContract?: string;
9
+ };
10
+ message?: {
11
+ serverAddress?: string;
12
+ publicKey?: string;
13
+ serverUrl?: string;
14
+ };
15
+ };
16
+ }
17
+ /** Account needs the browser: the silent path is closed for this owner or client. */
18
+ export declare class RegistrationNeedsBrowserError extends Error {
19
+ readonly code: string;
20
+ constructor(code: string);
21
+ }
22
+ export interface RegistrationSignature {
23
+ signature: string;
24
+ signerAddress: string | null;
25
+ via: "silent" | "browser";
26
+ }
27
+ /** The fields Account signs, from the server's own registration request. */
28
+ export declare function registrationPayload(request: RegistrationRequest): Record<string, unknown>;
29
+ /**
30
+ * Have Account sign the server's registration as its owner. Account signs
31
+ * silently when the owner's wallet lives in Account and the trust token from
32
+ * the owner confirmation is valid, as it does for Desktop; otherwise the
33
+ * person confirms in the browser.
34
+ */
35
+ export declare function signServerRegistration(input: {
36
+ accountUrl: string;
37
+ accessToken: string;
38
+ trustToken: string | null;
39
+ request: RegistrationRequest;
40
+ allowBrowser: boolean;
41
+ }, deps: OwnerBindingDeps): Promise<RegistrationSignature>;
42
+ //# sourceMappingURL=registration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registration.d.ts","sourceRoot":"","sources":["../../../src/personal-server/local/registration.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,oBAAoB,CAAC;AAE5B,eAAO,MAAM,0BAA0B,2CACG,CAAC;AAG3C,0FAA0F;AAC1F,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE;QACT,MAAM,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;YAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QACnE,OAAO,CAAC,EAAE;YACR,aAAa,CAAC,EAAE,MAAM,CAAC;YACvB,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,SAAS,CAAC,EAAE,MAAM,CAAC;SACpB,CAAC;KACH,CAAC;CACH;AAED,qFAAqF;AACrF,qBAAa,6BAA8B,SAAQ,KAAK;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM;CAKlC;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,GAAG,EAAE,QAAQ,GAAG,SAAS,CAAC;CAC3B;AAED,4EAA4E;AAC5E,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,mBAAmB,GAC3B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAgBzB;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE;IACL,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,mBAAmB,CAAC;IAC7B,YAAY,EAAE,OAAO,CAAC;CACvB,EACD,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,qBAAqB,CAAC,CAyDhC"}
@@ -0,0 +1,81 @@
1
+ import { describeFailure, runSigningExchange, } from "./owner-binding.js";
2
+ export const SERVER_REGISTRATION_INTENT = "personal_server.server_registration.v1";
3
+ const SIGN_PATH = "/api/v1/intents/personal-server-registration/sign";
4
+ /** Account needs the browser: the silent path is closed for this owner or client. */
5
+ export class RegistrationNeedsBrowserError extends Error {
6
+ code;
7
+ constructor(code) {
8
+ super(`Registering needs you to confirm in a browser (${code}). Run without --no-input.`);
9
+ this.code = code;
10
+ }
11
+ }
12
+ /** The fields Account signs, from the server's own registration request. */
13
+ export function registrationPayload(request) {
14
+ const message = request.typedData?.message;
15
+ const domain = request.typedData?.domain;
16
+ if (!(message?.serverAddress && message.publicKey && message.serverUrl)) {
17
+ throw new Error("The server's registration request is incomplete.");
18
+ }
19
+ const chainId = Number(domain?.chainId);
20
+ return {
21
+ serverAddress: message.serverAddress,
22
+ serverPublicKey: message.publicKey,
23
+ serverUrl: message.serverUrl,
24
+ ...(Number.isInteger(chainId) ? { chainId } : {}),
25
+ ...(typeof domain?.verifyingContract === "string"
26
+ ? { verifyingContract: domain.verifyingContract }
27
+ : {}),
28
+ };
29
+ }
30
+ /**
31
+ * Have Account sign the server's registration as its owner. Account signs
32
+ * silently when the owner's wallet lives in Account and the trust token from
33
+ * the owner confirmation is valid, as it does for Desktop; otherwise the
34
+ * person confirms in the browser.
35
+ */
36
+ export async function signServerRegistration(input, deps) {
37
+ const fetchImpl = deps.fetchImpl ?? fetch;
38
+ const account = input.accountUrl.replace(/\/+$/, "");
39
+ const payload = registrationPayload(input.request);
40
+ const response = await fetchImpl(`${account}${SIGN_PATH}`, {
41
+ method: "POST",
42
+ headers: {
43
+ "content-type": "application/json",
44
+ authorization: `Bearer ${input.accessToken}`,
45
+ ...(input.trustToken
46
+ ? { "x-vana-desktop-trust-token": input.trustToken }
47
+ : {}),
48
+ },
49
+ body: JSON.stringify({ intent: SERVER_REGISTRATION_INTENT, ...payload }),
50
+ });
51
+ if (!response.ok) {
52
+ throw new Error(await describeFailure("sign the registration", response));
53
+ }
54
+ const body = (await response.json());
55
+ if (body.status === "signed" && body.signature) {
56
+ return {
57
+ signature: body.signature,
58
+ signerAddress: body.signerAddress ?? null,
59
+ via: "silent",
60
+ };
61
+ }
62
+ if (body.status !== "confirmation_required") {
63
+ throw new Error(`Account did not sign the registration (${body.code ?? body.status ?? "unknown"}).`);
64
+ }
65
+ if (!input.allowBrowser) {
66
+ throw new RegistrationNeedsBrowserError(body.code ?? "confirmation_required");
67
+ }
68
+ const redeemed = await runSigningExchange({
69
+ accountUrl: input.accountUrl,
70
+ accessToken: input.accessToken,
71
+ intent: SERVER_REGISTRATION_INTENT,
72
+ payload,
73
+ step: "registration",
74
+ }, deps);
75
+ return {
76
+ signature: redeemed.signature,
77
+ signerAddress: redeemed.signerAddress ?? null,
78
+ via: "browser",
79
+ };
80
+ }
81
+ //# sourceMappingURL=registration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registration.js","sourceRoot":"","sources":["../../../src/personal-server/local/registration.ts"],"names":[],"mappings":"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"}