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.
- package/README.md +7 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +28 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/server-start.d.ts +14 -1
- package/dist/cli/server-start.d.ts.map +1 -1
- package/dist/cli/server-start.js +207 -5
- package/dist/cli/server-start.js.map +1 -1
- package/dist/personal-server/local/config.d.ts +5 -0
- package/dist/personal-server/local/config.d.ts.map +1 -1
- package/dist/personal-server/local/config.js +4 -2
- package/dist/personal-server/local/config.js.map +1 -1
- package/dist/personal-server/local/detach.d.ts +29 -0
- package/dist/personal-server/local/detach.d.ts.map +1 -0
- package/dist/personal-server/local/detach.js +134 -0
- package/dist/personal-server/local/detach.js.map +1 -0
- package/dist/personal-server/local/frpc.d.ts +59 -0
- package/dist/personal-server/local/frpc.d.ts.map +1 -0
- package/dist/personal-server/local/frpc.js +191 -0
- package/dist/personal-server/local/frpc.js.map +1 -0
- package/dist/personal-server/local/owner-binding.d.ts +22 -2
- package/dist/personal-server/local/owner-binding.d.ts.map +1 -1
- package/dist/personal-server/local/owner-binding.js +23 -14
- package/dist/personal-server/local/owner-binding.js.map +1 -1
- package/dist/personal-server/local/registration.d.ts +42 -0
- package/dist/personal-server/local/registration.d.ts.map +1 -0
- package/dist/personal-server/local/registration.js +81 -0
- package/dist/personal-server/local/registration.js.map +1 -0
- package/dist/personal-server/local/runtime-pkg/entry.mjs +138 -20
- package/dist/personal-server/local/server.d.ts +25 -0
- package/dist/personal-server/local/server.d.ts.map +1 -1
- package/dist/personal-server/local/server.js +80 -4
- package/dist/personal-server/local/server.js.map +1 -1
- 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,
|
|
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
|
-
*
|
|
62
|
-
*
|
|
63
|
-
* and
|
|
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
|
|
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:
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
-
|
|
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":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,oBAAoB,CAAC;AAC1D,MAAM,CAAC,MAAM,oBAAoB,GAAG,kCAAkC,CAAC;AAoBvE,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAEzC,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,SAAS,GAAG;8HAC4G,CAAC;AAC/H,MAAM,WAAW,GAAG;4HACwG,CAAC;AAE7H;;;;GAIG;AACH,KAAK,UAAU,qBAAqB,CAAC,aAAqB;IAKxD,IAAI,MAAM,GAGC,IAAI,CAAC;IAChB,MAAM,IAAI,GAAG,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACnD,MAAM,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE;QACrD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,EAAE,kBAAkB,CAAC,CAAC;QAC5D,IAAI,GAAG,CAAC,QAAQ,KAAK,mBAAmB,EAAE,CAAC;YACzC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;YAC9B,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,KAAK,KAAK,aAAa,EAAE,CAAC;YAC5B,gDAAgD;YAChD,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAC1E,OAAO;QACT,CAAC;QACD,IAAI,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;YACvB,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAC1E,MAAM,EAAE,MAAM,CACZ,IAAI,KAAK,CACP,KAAK,KAAK,eAAe;gBACvB,CAAC,CAAC,0CAA0C;gBAC5C,CAAC,CAAC,oBAAoB,KAAK,IAAI,SAAS,GAAG,CAC9C,CACF,CAAC;YACF,OAAO;QACT,CAAC;QACD,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACxE,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IACH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;IAC7E,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,OAAO,EAAiB,CAAC;IACjD,OAAO;QACL,WAAW,EAAE,oBAAoB,IAAI,mBAAmB;QACxD,IAAI;QACJ,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE;KAC5B,CAAC;AACJ,CAAC;
|
|
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":"AAAA,OAAO,EACL,eAAe,EACf,kBAAkB,GAEnB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,CAAC,MAAM,0BAA0B,GACrC,wCAAwC,CAAC;AAC3C,MAAM,SAAS,GAAG,mDAAmD,CAAC;AActE,qFAAqF;AACrF,MAAM,OAAO,6BAA8B,SAAQ,KAAK;IACjC;IAArB,YAAqB,IAAY;QAC/B,KAAK,CACH,kDAAkD,IAAI,4BAA4B,CACnF,CAAC;QAHiB,SAAI,GAAJ,IAAI,CAAQ;IAIjC,CAAC;CACF;AAQD,4EAA4E;AAC5E,MAAM,UAAU,mBAAmB,CACjC,OAA4B;IAE5B,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC;IAC3C,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;IACzC,IAAI,CAAC,CAAC,OAAO,EAAE,aAAa,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,OAAO;QACL,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,eAAe,EAAE,OAAO,CAAC,SAAS;QAClC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,GAAG,CAAC,OAAO,MAAM,EAAE,iBAAiB,KAAK,QAAQ;YAC/C,CAAC,CAAC,EAAE,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,EAAE;YACjD,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,KAMC,EACD,IAAsB;IAEtB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC;IAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAEnD,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,OAAO,GAAG,SAAS,EAAE,EAAE;QACzD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,KAAK,CAAC,WAAW,EAAE;YAC5C,GAAG,CAAC,KAAK,CAAC,UAAU;gBAClB,CAAC,CAAC,EAAE,4BAA4B,EAAE,KAAK,CAAC,UAAU,EAAE;gBACpD,CAAC,CAAC,EAAE,CAAC;SACR;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,0BAA0B,EAAE,GAAG,OAAO,EAAE,CAAC;KACzE,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,MAAM,eAAe,CAAC,uBAAuB,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAKlC,CAAC;IACF,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/C,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,IAAI;YACzC,GAAG,EAAE,QAAQ;SACd,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,uBAAuB,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CACb,0CAA0C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,SAAS,IAAI,CACpF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;QACxB,MAAM,IAAI,6BAA6B,CACrC,IAAI,CAAC,IAAI,IAAI,uBAAuB,CACrC,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CACvC;QACE,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,MAAM,EAAE,0BAA0B;QAClC,OAAO;QACP,IAAI,EAAE,cAAc;KACrB,EACD,IAAI,CACL,CAAC;IACF,OAAO;QACL,SAAS,EAAE,QAAQ,CAAC,SAAmB;QACvC,aAAa,EAAE,QAAQ,CAAC,aAAa,IAAI,IAAI;QAC7C,GAAG,EAAE,SAAS;KACf,CAAC;AACJ,CAAC"}
|