@ozyman42/ozy-cli 0.4.7 → 0.4.8-darwin-x64.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/multi-call-binary +0 -0
- package/package.json +11 -52
- package/bin/ozy +0 -191
- package/bin/ozy-signing-agent +0 -191
- package/bin/ozy-ssh-keygen +0 -191
- package/bin/ozy-virtual-security-key +0 -191
- package/dist/commands/git/hosts.js +0 -18
- package/dist/commands/git/hosts.js.map +0 -1
- package/dist/commands/git/index.js +0 -8
- package/dist/commands/git/index.js.map +0 -1
- package/dist/commands/git/setup.js +0 -145
- package/dist/commands/git/setup.js.map +0 -1
- package/dist/commands/index.js +0 -13
- package/dist/commands/index.js.map +0 -1
- package/dist/commands/npm/index.js +0 -7
- package/dist/commands/npm/index.js.map +0 -1
- package/dist/commands/npm/setup/git-remote.js +0 -66
- package/dist/commands/npm/setup/git-remote.js.map +0 -1
- package/dist/commands/npm/setup/index.js +0 -168
- package/dist/commands/npm/setup/index.js.map +0 -1
- package/dist/commands/npm/setup/npm-auth.js +0 -62
- package/dist/commands/npm/setup/npm-auth.js.map +0 -1
- package/dist/commands/npm/setup/package-json-validate.js +0 -47
- package/dist/commands/npm/setup/package-json-validate.js.map +0 -1
- package/dist/commands/npm/setup/package-registry.js +0 -20
- package/dist/commands/npm/setup/package-registry.js.map +0 -1
- package/dist/commands/npm/setup/setup.test.js +0 -95
- package/dist/commands/npm/setup/setup.test.js.map +0 -1
- package/dist/commands/npm/setup/trusted-publishing.js +0 -84
- package/dist/commands/npm/setup/trusted-publishing.js.map +0 -1
- package/dist/commands/npm/setup/workflow.js +0 -19
- package/dist/commands/npm/setup/workflow.js.map +0 -1
- package/dist/commands/ssh/get-sk-credential.js +0 -104
- package/dist/commands/ssh/get-sk-credential.js.map +0 -1
- package/dist/commands/ssh/index.js +0 -7
- package/dist/commands/ssh/index.js.map +0 -1
- package/dist/commands/upgrade.js +0 -199
- package/dist/commands/upgrade.js.map +0 -1
- package/dist/common/command.js +0 -15
- package/dist/common/command.js.map +0 -1
- package/dist/common/constants.js +0 -25
- package/dist/common/constants.js.map +0 -1
- package/dist/common/effective-modules-extensions.js +0 -13
- package/dist/common/effective-modules-extensions.js.map +0 -1
- package/dist/common/log.js +0 -4
- package/dist/common/log.js.map +0 -1
- package/dist/common/render-caller-tree.js +0 -20
- package/dist/common/render-caller-tree.js.map +0 -1
- package/dist/entrypoints/ozy-signing-agent.js +0 -48
- package/dist/entrypoints/ozy-signing-agent.js.map +0 -1
- package/dist/entrypoints/ozy-ssh-keygen.js +0 -9
- package/dist/entrypoints/ozy-ssh-keygen.js.map +0 -1
- package/dist/entrypoints/ozy-virtual-security-key.js +0 -18
- package/dist/entrypoints/ozy-virtual-security-key.js.map +0 -1
- package/dist/entrypoints/ozy.js +0 -3
- package/dist/entrypoints/ozy.js.map +0 -1
- package/dist/index.js +0 -2
- package/dist/index.js.map +0 -1
- package/dist/internal/thing.js +0 -4
- package/dist/internal/thing.js.map +0 -1
- package/dist/modules/cli/agent-client/impl.js +0 -109
- package/dist/modules/cli/agent-client/impl.js.map +0 -1
- package/dist/modules/cli/agent-client/interface.js +0 -11
- package/dist/modules/cli/agent-client/interface.js.map +0 -1
- package/dist/modules/cli/git/impl.js +0 -124
- package/dist/modules/cli/git/impl.js.map +0 -1
- package/dist/modules/cli/git/interface.js +0 -3
- package/dist/modules/cli/git/interface.js.map +0 -1
- package/dist/modules/cli/git/submodule/fix.js +0 -257
- package/dist/modules/cli/git/submodule/fix.js.map +0 -1
- package/dist/modules/cli/git/submodule/git-state.js +0 -154
- package/dist/modules/cli/git/submodule/git-state.js.map +0 -1
- package/dist/modules/cli/git/submodule/gitmodules.js +0 -113
- package/dist/modules/cli/git/submodule/gitmodules.js.map +0 -1
- package/dist/modules/cli/git/submodule/printer.js +0 -232
- package/dist/modules/cli/git/submodule/printer.js.map +0 -1
- package/dist/modules/cli/git/submodule/resolve-git-dir.js +0 -16
- package/dist/modules/cli/git/submodule/resolve-git-dir.js.map +0 -1
- package/dist/modules/cli/github/impl.js +0 -137
- package/dist/modules/cli/github/impl.js.map +0 -1
- package/dist/modules/cli/github/interface.js +0 -2
- package/dist/modules/cli/github/interface.js.map +0 -1
- package/dist/modules/cli/index.js +0 -9
- package/dist/modules/cli/index.js.map +0 -1
- package/dist/modules/common/crypto/impl.js +0 -133
- package/dist/modules/common/crypto/impl.js.map +0 -1
- package/dist/modules/common/crypto/interface.js +0 -2
- package/dist/modules/common/crypto/interface.js.map +0 -1
- package/dist/modules/common/index.js +0 -10
- package/dist/modules/common/index.js.map +0 -1
- package/dist/modules/common/kep-map-store/impl.js +0 -42
- package/dist/modules/common/kep-map-store/impl.js.map +0 -1
- package/dist/modules/common/kep-map-store/interface.js +0 -2
- package/dist/modules/common/kep-map-store/interface.js.map +0 -1
- package/dist/modules/common/os-platform/caller-info.js +0 -132
- package/dist/modules/common/os-platform/caller-info.js.map +0 -1
- package/dist/modules/common/os-platform/impl.js +0 -87
- package/dist/modules/common/os-platform/impl.js.map +0 -1
- package/dist/modules/common/os-platform/interface.js +0 -2
- package/dist/modules/common/os-platform/interface.js.map +0 -1
- package/dist/modules/common/os-platform/virtual-hid/index.js +0 -12
- package/dist/modules/common/os-platform/virtual-hid/index.js.map +0 -1
- package/dist/modules/common/os-platform/virtual-hid/linux.js +0 -5
- package/dist/modules/common/os-platform/virtual-hid/linux.js.map +0 -1
- package/dist/modules/common/os-platform/virtual-hid/mac.js +0 -119
- package/dist/modules/common/os-platform/virtual-hid/mac.js.map +0 -1
- package/dist/modules/common/os-platform/virtual-hid/windows.js +0 -5
- package/dist/modules/common/os-platform/virtual-hid/windows.js.map +0 -1
- package/dist/modules/common/ssh-config/impl.js +0 -116
- package/dist/modules/common/ssh-config/impl.js.map +0 -1
- package/dist/modules/common/ssh-config/interface.js +0 -10
- package/dist/modules/common/ssh-config/interface.js.map +0 -1
- package/dist/modules/ssh-agent/index.js +0 -8
- package/dist/modules/ssh-agent/index.js.map +0 -1
- package/dist/modules/ssh-agent/session/impl.js +0 -265
- package/dist/modules/ssh-agent/session/impl.js.map +0 -1
- package/dist/modules/ssh-agent/session/interface-rpc.js +0 -20
- package/dist/modules/ssh-agent/session/interface-rpc.js.map +0 -1
- package/dist/modules/ssh-agent/session/interface.js +0 -32
- package/dist/modules/ssh-agent/session/interface.js.map +0 -1
- package/dist/modules/ssh-agent/session/passkey-prf-page.js +0 -204
- package/dist/modules/ssh-agent/session/passkey-prf-page.js.map +0 -1
- package/dist/modules/ssh-agent/session/prf-flow.js +0 -103
- package/dist/modules/ssh-agent/session/prf-flow.js.map +0 -1
- package/dist/modules/ssh-agent/ssh-agent/impl.js +0 -117
- package/dist/modules/ssh-agent/ssh-agent/impl.js.map +0 -1
- package/dist/modules/ssh-agent/ssh-agent/interface.js +0 -2
- package/dist/modules/ssh-agent/ssh-agent/interface.js.map +0 -1
- package/dist/scripts/build.js +0 -410
- package/dist/scripts/build.js.map +0 -1
- package/dist/scripts/check-npm-version.js +0 -8
- package/dist/scripts/check-npm-version.js.map +0 -1
- package/dist/scripts/kill-existing-agent.js +0 -21
- package/dist/scripts/kill-existing-agent.js.map +0 -1
- package/dist/scripts/publish.js +0 -46
- package/dist/scripts/publish.js.map +0 -1
- package/src/commands/git/hosts.ts +0 -20
- package/src/commands/git/index.ts +0 -9
- package/src/commands/git/setup.ts +0 -182
- package/src/commands/index.ts +0 -15
- package/src/commands/npm/index.ts +0 -8
- package/src/commands/npm/setup/git-remote.ts +0 -78
- package/src/commands/npm/setup/index.ts +0 -189
- package/src/commands/npm/setup/npm-auth.ts +0 -58
- package/src/commands/npm/setup/package-json-validate.ts +0 -68
- package/src/commands/npm/setup/package-registry.ts +0 -24
- package/src/commands/npm/setup/publish-workflow.yml +0 -35
- package/src/commands/npm/setup/setup.test.ts +0 -117
- package/src/commands/npm/setup/trusted-publishing.ts +0 -106
- package/src/commands/npm/setup/workflow.ts +0 -20
- package/src/commands/ssh/get-sk-credential.ts +0 -110
- package/src/commands/ssh/index.ts +0 -8
- package/src/commands/upgrade.ts +0 -220
- package/src/common/command.ts +0 -16
- package/src/common/constants.ts +0 -26
- package/src/common/effective-modules-extensions.ts +0 -24
- package/src/common/log.ts +0 -3
- package/src/common/render-caller-tree.ts +0 -22
- package/src/entrypoints/ozy-signing-agent.ts +0 -48
- package/src/entrypoints/ozy-ssh-keygen.ts +0 -10
- package/src/entrypoints/ozy-virtual-security-key.ts +0 -21
- package/src/entrypoints/ozy.ts +0 -2
- package/src/index.ts +0 -1
- package/src/internal/thing.ts +0 -3
- package/src/modules/cli/agent-client/impl.ts +0 -152
- package/src/modules/cli/agent-client/interface.ts +0 -17
- package/src/modules/cli/git/impl.ts +0 -133
- package/src/modules/cli/git/interface.ts +0 -23
- package/src/modules/cli/git/submodule/fix.ts +0 -298
- package/src/modules/cli/git/submodule/git-state.ts +0 -217
- package/src/modules/cli/git/submodule/gitmodules.ts +0 -126
- package/src/modules/cli/git/submodule/printer.ts +0 -256
- package/src/modules/cli/git/submodule/resolve-git-dir.ts +0 -14
- package/src/modules/cli/github/impl.ts +0 -169
- package/src/modules/cli/github/interface.ts +0 -29
- package/src/modules/cli/index.ts +0 -16
- package/src/modules/common/crypto/impl.ts +0 -173
- package/src/modules/common/crypto/interface.ts +0 -20
- package/src/modules/common/index.ts +0 -19
- package/src/modules/common/kep-map-store/impl.ts +0 -47
- package/src/modules/common/kep-map-store/interface.ts +0 -9
- package/src/modules/common/os-platform/caller-info.ts +0 -152
- package/src/modules/common/os-platform/impl.ts +0 -86
- package/src/modules/common/os-platform/interface.ts +0 -16
- package/src/modules/common/os-platform/virtual-hid/index.ts +0 -12
- package/src/modules/common/os-platform/virtual-hid/linux.ts +0 -7
- package/src/modules/common/os-platform/virtual-hid/mac.ts +0 -150
- package/src/modules/common/os-platform/virtual-hid/windows.ts +0 -7
- package/src/modules/common/ssh-config/impl.ts +0 -130
- package/src/modules/common/ssh-config/interface.ts +0 -33
- package/src/modules/ssh-agent/index.ts +0 -13
- package/src/modules/ssh-agent/session/agent-notes.md +0 -210
- package/src/modules/ssh-agent/session/design.md +0 -2
- package/src/modules/ssh-agent/session/html-refactor.md +0 -23
- package/src/modules/ssh-agent/session/impl.ts +0 -328
- package/src/modules/ssh-agent/session/interface-rpc.ts +0 -24
- package/src/modules/ssh-agent/session/interface.ts +0 -62
- package/src/modules/ssh-agent/session/passkey-prf-page.ts +0 -224
- package/src/modules/ssh-agent/session/prf-flow.ts +0 -152
- package/src/modules/ssh-agent/ssh-agent/impl.ts +0 -136
- package/src/modules/ssh-agent/ssh-agent/interface.ts +0 -9
- package/src/scripts/build.ts +0 -504
- package/src/scripts/check-npm-version.ts +0 -7
- package/src/scripts/command-launcher.js.ejs +0 -168
- package/src/scripts/kill-existing-agent.ts +0 -22
- package/src/scripts/publish.ts +0 -47
- package/src/scripts/windows-bin-shims.md +0 -1104
|
@@ -1,191 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { createRequire } from "node:module";
|
|
3
|
-
import { spawnSync } from "node:child_process";
|
|
4
|
-
import {
|
|
5
|
-
chmodSync,
|
|
6
|
-
copyFileSync,
|
|
7
|
-
existsSync,
|
|
8
|
-
linkSync,
|
|
9
|
-
mkdirSync,
|
|
10
|
-
readFileSync,
|
|
11
|
-
renameSync,
|
|
12
|
-
rmSync,
|
|
13
|
-
writeFileSync,
|
|
14
|
-
} from "node:fs";
|
|
15
|
-
import { basename, dirname, join } from "node:path";
|
|
16
|
-
import { fileURLToPath } from "node:url";
|
|
17
|
-
|
|
18
|
-
const PLATFORM_MAP = {
|
|
19
|
-
"darwin-arm64": "darwin-arm64",
|
|
20
|
-
"darwin-x64": "darwin-x64",
|
|
21
|
-
"linux-arm64": "linux-arm64",
|
|
22
|
-
"linux-x64": "linux-x64",
|
|
23
|
-
"win32-x64": "windows-x64"
|
|
24
|
-
};
|
|
25
|
-
const PLATFORM_PACKAGES = {
|
|
26
|
-
"darwin-arm64": "@ozyman42/ozy-cli-darwin-arm64",
|
|
27
|
-
"darwin-x64": "@ozyman42/ozy-cli-darwin-x64",
|
|
28
|
-
"linux-arm64": "@ozyman42/ozy-cli-linux-arm64",
|
|
29
|
-
"linux-x64": "@ozyman42/ozy-cli-linux-x64",
|
|
30
|
-
"windows-x64": "@ozyman42/ozy-cli-windows-x64"
|
|
31
|
-
};
|
|
32
|
-
const PLATFORM_BINARIES = {
|
|
33
|
-
"darwin-arm64": "multi-call-binary",
|
|
34
|
-
"darwin-x64": "multi-call-binary",
|
|
35
|
-
"linux-arm64": "multi-call-binary",
|
|
36
|
-
"linux-x64": "multi-call-binary",
|
|
37
|
-
"windows-x64": "multi-call-binary.exe"
|
|
38
|
-
};
|
|
39
|
-
const COMMANDS = [
|
|
40
|
-
"ozy",
|
|
41
|
-
"ozy-signing-agent",
|
|
42
|
-
"ozy-ssh-keygen",
|
|
43
|
-
"ozy-virtual-security-key"
|
|
44
|
-
];
|
|
45
|
-
const WINDOWS_EXECUTABLE_SUFFIX = ".exe";
|
|
46
|
-
const INSTALLED_JSON = "installed.json";
|
|
47
|
-
|
|
48
|
-
const require = createRequire(import.meta.url);
|
|
49
|
-
const launcherPath = fileURLToPath(import.meta.url);
|
|
50
|
-
const launcherDir = dirname(launcherPath);
|
|
51
|
-
const commandName = basename(launcherPath);
|
|
52
|
-
|
|
53
|
-
function fail(message) {
|
|
54
|
-
console.error(message);
|
|
55
|
-
process.exit(1);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
function currentPlatformKey() {
|
|
59
|
-
const platformKey = PLATFORM_MAP[`${process.platform}-${process.arch}`];
|
|
60
|
-
if (!platformKey) {
|
|
61
|
-
fail(`Unsupported platform: ${process.platform}-${process.arch}`);
|
|
62
|
-
}
|
|
63
|
-
return platformKey;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
function currentPlatformPackageName() {
|
|
67
|
-
const platformKey = currentPlatformKey();
|
|
68
|
-
const packageName = PLATFORM_PACKAGES[platformKey];
|
|
69
|
-
if (!packageName) {
|
|
70
|
-
fail(`No platform package is configured for ${platformKey}`);
|
|
71
|
-
}
|
|
72
|
-
return packageName;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* When a Jive library contains any number of CLIs (entrypoints or agents), then the base package
|
|
77
|
-
* will have an optional dependency for each possible architecture, with those platform-specific
|
|
78
|
-
* packages containing a platform build of the CLI.
|
|
79
|
-
* @returns the path to the platform binary and the exact version of the platform package.
|
|
80
|
-
*/
|
|
81
|
-
function currentPlatformPackage() {
|
|
82
|
-
const platformKey = currentPlatformKey();
|
|
83
|
-
const binaryFile = PLATFORM_BINARIES[platformKey];
|
|
84
|
-
if (!binaryFile) {
|
|
85
|
-
fail(`No platform binary is configured for ${platformKey}`);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
const packageName = currentPlatformPackageName();
|
|
89
|
-
try {
|
|
90
|
-
const packageJsonPath = require.resolve(`${packageName}/package.json`);
|
|
91
|
-
const packageDir = dirname(packageJsonPath);
|
|
92
|
-
const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
|
|
93
|
-
return {
|
|
94
|
-
binaryPath: join(packageDir, binaryFile),
|
|
95
|
-
version: packageJson.version,
|
|
96
|
-
};
|
|
97
|
-
} catch (error) {
|
|
98
|
-
fail(`Could not resolve optional platform package ${packageName}. Reinstall dependencies for ${process.platform}-${process.arch}.`);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
function targetPathFor(command) {
|
|
103
|
-
const suffix = process.platform === "win32" ? WINDOWS_EXECUTABLE_SUFFIX : "";
|
|
104
|
-
return join(launcherDir, `${command}${suffix}`);
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
function installedJsonPath() {
|
|
108
|
-
return join(launcherDir, INSTALLED_JSON);
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
function windowsTargetsAreCurrent(version) {
|
|
112
|
-
if (process.platform !== "win32") return false;
|
|
113
|
-
if (!COMMANDS.every((command) => existsSync(targetPathFor(command)))) return false;
|
|
114
|
-
|
|
115
|
-
try {
|
|
116
|
-
const installed = JSON.parse(readFileSync(installedJsonPath(), "utf-8"));
|
|
117
|
-
return installed.version === version;
|
|
118
|
-
} catch {
|
|
119
|
-
return false;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
function linkOrCopyFirstExecutable(sourcePath, targetPath) {
|
|
124
|
-
mkdirSync(dirname(targetPath), { recursive: true });
|
|
125
|
-
const tempPath = `${targetPath}.${process.pid}.${Date.now()}.tmp${process.platform === "win32" ? WINDOWS_EXECUTABLE_SUFFIX : ""}`;
|
|
126
|
-
rmSync(tempPath, { force: true });
|
|
127
|
-
|
|
128
|
-
try {
|
|
129
|
-
try {
|
|
130
|
-
linkSync(sourcePath, tempPath);
|
|
131
|
-
} catch {
|
|
132
|
-
copyFileSync(sourcePath, tempPath);
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
chmodSync(tempPath, 0o755);
|
|
136
|
-
rmSync(targetPath, { force: true });
|
|
137
|
-
renameSync(tempPath, targetPath);
|
|
138
|
-
} finally {
|
|
139
|
-
rmSync(tempPath, { force: true });
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
function hardLinkCommandTarget(sourcePath, targetPath) {
|
|
144
|
-
if (sourcePath === targetPath) return;
|
|
145
|
-
|
|
146
|
-
const tempPath = `${targetPath}.${process.pid}.${Date.now()}.tmp${process.platform === "win32" ? WINDOWS_EXECUTABLE_SUFFIX : ""}`;
|
|
147
|
-
rmSync(tempPath, { force: true });
|
|
148
|
-
|
|
149
|
-
try {
|
|
150
|
-
linkSync(sourcePath, tempPath);
|
|
151
|
-
chmodSync(tempPath, 0o755);
|
|
152
|
-
rmSync(targetPath, { force: true });
|
|
153
|
-
renameSync(tempPath, targetPath);
|
|
154
|
-
} finally {
|
|
155
|
-
rmSync(tempPath, { force: true });
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
function repairCommandTargets() {
|
|
160
|
-
const platformPackage = currentPlatformPackage();
|
|
161
|
-
|
|
162
|
-
if (windowsTargetsAreCurrent(platformPackage.version)) {
|
|
163
|
-
return targetPathFor(commandName);
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
const firstTargetPath = targetPathFor(COMMANDS[0]);
|
|
167
|
-
linkOrCopyFirstExecutable(platformPackage.binaryPath, firstTargetPath);
|
|
168
|
-
|
|
169
|
-
for (const command of COMMANDS.slice(1)) {
|
|
170
|
-
hardLinkCommandTarget(firstTargetPath, targetPathFor(command));
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
if (process.platform === "win32") {
|
|
174
|
-
writeFileSync(installedJsonPath(), `${JSON.stringify({ version: platformPackage.version }, null, 2)}\n`);
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
return targetPathFor(commandName);
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
function runExecutable(executablePath) {
|
|
181
|
-
const result = spawnSync(executablePath, process.argv.slice(2), { stdio: "inherit" });
|
|
182
|
-
|
|
183
|
-
if (result.error) {
|
|
184
|
-
fail(result.error.message);
|
|
185
|
-
}
|
|
186
|
-
if (result.status !== 0) {
|
|
187
|
-
process.exit(result.status ?? 1);
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
runExecutable(repairCommandTargets());
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { Effect } from "effect";
|
|
2
|
-
import { makeCommand } from "@/common/command";
|
|
3
|
-
import { log } from "@/common/log";
|
|
4
|
-
import { commonModules } from "@/modules/common";
|
|
5
|
-
import { SSHConfigImpl } from "@/modules/common/ssh-config/impl";
|
|
6
|
-
export const hosts = makeCommand('hosts', 'show all configured github.com SSH hosts', () => Effect.gen(function* () {
|
|
7
|
-
const sshConfig = yield* commonModules.SSHConfig;
|
|
8
|
-
const config = yield* sshConfig.getSSHConfig();
|
|
9
|
-
const gitHosts = [];
|
|
10
|
-
for (const host in config) {
|
|
11
|
-
if (config[host].HostName === 'github.com') {
|
|
12
|
-
gitHosts.push(host);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
log('Available hosts:');
|
|
16
|
-
gitHosts.forEach(host => { log(` - ${host}`); });
|
|
17
|
-
}).pipe(Effect.provide(SSHConfigImpl.Layer)));
|
|
18
|
-
//# sourceMappingURL=hosts.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hosts.js","sourceRoot":"","sources":["../../../../../../src/commands/git/hosts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAEjE,MAAM,CAAC,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,EAAE,0CAA0C,EAAE,GAAG,EAAE,CACzF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC;IACjD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;IAC/C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,IAAI,MAAM,CAAC,IAAI,CAAE,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC5C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IACD,GAAG,CAAC,kBAAkB,CAAC,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAC7C,CAAC"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import { setup } from './setup';
|
|
3
|
-
import { hosts } from './hosts';
|
|
4
|
-
export const git = new Command('git')
|
|
5
|
-
.summary('setup git in repo for verified commits');
|
|
6
|
-
[setup, hosts]
|
|
7
|
-
.forEach(cmd => { git.addCommand(cmd); });
|
|
8
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/commands/git/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,MAAM,CAAC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC;KAClC,OAAO,CAAC,wCAAwC,CAAC,CAAC;AAErD,CAAC,KAAK,EAAE,KAAK,CAAC;KACX,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import { Effect, Layer, Option, pipe } from 'effect';
|
|
3
|
-
import { log } from '@/common/log';
|
|
4
|
-
import { cliModules } from '@/modules/cli';
|
|
5
|
-
import { commonModules, CommonModules } from '@/modules/common';
|
|
6
|
-
import { effunct } from 'effective-modules';
|
|
7
|
-
import { GitImpl } from '@/modules/cli/git/impl';
|
|
8
|
-
import { GitHubImpl } from '@/modules/cli/github/impl';
|
|
9
|
-
import { AgentClientImpl } from '@/modules/cli/agent-client/impl';
|
|
10
|
-
import { OSPlatformImpl } from '@/modules/common/os-platform/impl';
|
|
11
|
-
import { SSHConfigImpl } from '@/modules/common/ssh-config/impl';
|
|
12
|
-
import { AGENT_SOCK_FILE_PATH, FUTURE_TOOL_NAME, STANDARD_REMOTE_PREFIX } from '../../common/constants';
|
|
13
|
-
import { CredentialId } from '@/modules/common/crypto/impl';
|
|
14
|
-
import { BunFileSystem } from "@effect/platform-bun";
|
|
15
|
-
const GITHUB_CLIENT_ID = 'Ov23liKYxk1Ag7SsNhbP';
|
|
16
|
-
const GITHUB_CLIENT_SECRET = 'e2901fbe93c591e7a53a903e70490ff87e998159';
|
|
17
|
-
const OAUTH_SCOPES = 'read:user user:email write:ssh_signing_key write:public_key';
|
|
18
|
-
const KEY_PREFIX = `${FUTURE_TOOL_NAME}-`;
|
|
19
|
-
function parseCredentialIdFromTitle(title) {
|
|
20
|
-
const match = title.match(/\(([^)]+)\)$/);
|
|
21
|
-
if (!match)
|
|
22
|
-
return Option.none();
|
|
23
|
-
return Option.some(match[1]);
|
|
24
|
-
}
|
|
25
|
-
function baseKey(pubkey) {
|
|
26
|
-
return pubkey.split(' ').slice(0, 2).join(' ');
|
|
27
|
-
}
|
|
28
|
-
export var GitSetupError;
|
|
29
|
-
(function (GitSetupError) {
|
|
30
|
-
GitSetupError["NotInGitRepositoryError"] = "NotInGitRepositoryError";
|
|
31
|
-
GitSetupError["NoRemoteOriginError"] = "NoRemoteOriginError";
|
|
32
|
-
GitSetupError["OAuthFailedError"] = "OAuthFailedError";
|
|
33
|
-
GitSetupError["GitHubUserFetchFailedError"] = "GitHubUserFetchFailedError";
|
|
34
|
-
GitSetupError["RepoAccessDeniedError"] = "RepoAccessDeniedError";
|
|
35
|
-
GitSetupError["MultipleJiveSigningKeysError"] = "MultipleJiveSigningKeysError";
|
|
36
|
-
GitSetupError["MultipleJiveAuthnKeysError"] = "MultipleJiveAuthnKeysError";
|
|
37
|
-
GitSetupError["MissingCredentialIdError"] = "MissingCredentialIdError";
|
|
38
|
-
GitSetupError["SigningAuthnKeyMismatchError"] = "SigningAuthnKeyMismatchError";
|
|
39
|
-
GitSetupError["AgentStartFailedError"] = "AgentStartFailedError";
|
|
40
|
-
GitSetupError["AgentProcedureFailedError"] = "AgentProcedureFailedError";
|
|
41
|
-
GitSetupError["GitCloneFailedError"] = "GitCloneFailedError";
|
|
42
|
-
GitSetupError["GitConfigFailedError"] = "GitConfigFailedError";
|
|
43
|
-
})(GitSetupError || (GitSetupError = {}));
|
|
44
|
-
function* gitSetup(ownerRepoArg) {
|
|
45
|
-
const git = yield* cliModules.Git;
|
|
46
|
-
const github = yield* cliModules.GitHub;
|
|
47
|
-
const agentClient = yield* cliModules.AgentClient;
|
|
48
|
-
const sshConfig = yield* commonModules.SSHConfig;
|
|
49
|
-
const isCloneMode = ownerRepoArg !== undefined;
|
|
50
|
-
// 1. Parse owner/repo
|
|
51
|
-
const { owner, repo } = yield* git.resolveOwnerAndRepo(Option.fromNullishOr(ownerRepoArg));
|
|
52
|
-
log(`Setting up ${owner}/${repo}`);
|
|
53
|
-
// 2. GitHub OAuth
|
|
54
|
-
const token = yield* github.authorize(GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET, OAUTH_SCOPES);
|
|
55
|
-
log('✓ Authorized with GitHub');
|
|
56
|
-
// 3. Fetch user info
|
|
57
|
-
const { login, email } = yield* github.getUser(token);
|
|
58
|
-
const gitUser = { name: login, email: email };
|
|
59
|
-
log(` Logged in as: ${gitUser.name} <${gitUser.email}>`);
|
|
60
|
-
// 4. Check GitHub signing keys for <tool name>: prefix
|
|
61
|
-
const signingKeys = yield* github.getSigningKeys(token);
|
|
62
|
-
const toolKeys = signingKeys.filter(k => k.title.startsWith(KEY_PREFIX));
|
|
63
|
-
if (toolKeys.length > 1)
|
|
64
|
-
return yield* Effect.fail(`${GitSetupError.MultipleJiveSigningKeysError}: Found ${toolKeys.length} signing keys with "${KEY_PREFIX}" prefix — expected at most 1`);
|
|
65
|
-
let maybeKey = Option.none();
|
|
66
|
-
if (toolKeys[0]) {
|
|
67
|
-
const credentialId = parseCredentialIdFromTitle(toolKeys[0].title);
|
|
68
|
-
if (Option.isNone(credentialId))
|
|
69
|
-
return yield* Effect.fail(`${GitSetupError.MissingCredentialIdError}: signing key title "${toolKeys[0].title}" has no credentialId`);
|
|
70
|
-
maybeKey = Option.some({ credentialId: credentialId.value, pubkey: baseKey(toolKeys[0].key) });
|
|
71
|
-
}
|
|
72
|
-
// 5. Check authn keys too — must match signing key if both present.
|
|
73
|
-
const authnKeys = yield* github.getAuthnKeys(token);
|
|
74
|
-
const toolAuthnKeys = authnKeys.filter(k => k.title.startsWith(KEY_PREFIX));
|
|
75
|
-
if (toolAuthnKeys.length > 1)
|
|
76
|
-
return yield* Effect.fail(`${GitSetupError.MultipleJiveAuthnKeysError}: Found ${toolAuthnKeys.length} authn keys with "${KEY_PREFIX}" prefix — expected at most 1`);
|
|
77
|
-
let maybeAuthnKey = Option.none();
|
|
78
|
-
if (toolAuthnKeys[0]) {
|
|
79
|
-
const credentialId = parseCredentialIdFromTitle(toolAuthnKeys[0].title);
|
|
80
|
-
if (Option.isNone(credentialId))
|
|
81
|
-
return yield* Effect.fail(`${GitSetupError.MissingCredentialIdError}: authn key title "${toolAuthnKeys[0].title}" has no credentialId`);
|
|
82
|
-
maybeAuthnKey = Option.some({ credentialId: credentialId.value, pubkey: baseKey(toolAuthnKeys[0].key) });
|
|
83
|
-
}
|
|
84
|
-
if (Option.isSome(maybeKey) && Option.isSome(maybeAuthnKey) && maybeKey.value.pubkey !== maybeAuthnKey.value.pubkey)
|
|
85
|
-
return yield* Effect.fail(`${GitSetupError.SigningAuthnKeyMismatchError}: signing key and authn key pubkeys don't match — GitHub account is in an inconsistent state`);
|
|
86
|
-
// 6. Call agent to get/create/verify key (starts agent if not running)
|
|
87
|
-
const { credentialId, pubkey } = yield* pipe(Effect.gen(() => agentClient.usingClient(function* (client) {
|
|
88
|
-
return yield* pipe(client.Setup({
|
|
89
|
-
pubkey: Option.map(maybeKey, k => k.pubkey),
|
|
90
|
-
credentialId: Option.map(maybeKey, k => k.credentialId),
|
|
91
|
-
username: login,
|
|
92
|
-
}), Effect.mapError(e => `${GitSetupError.AgentProcedureFailedError}: ${String(e)}`));
|
|
93
|
-
})), Effect.catchTag("AgentClientError", err => Effect.fail(err.reason)), Effect.catchTag("AgentClientUsageError", err => Effect.fail(err.cause)));
|
|
94
|
-
const credentialFriendlyName = new CredentialId(credentialId).humanReadableName;
|
|
95
|
-
const keyTitle = `${credentialFriendlyName} (${credentialId})`;
|
|
96
|
-
// 8. Register signing key on GitHub if not already present
|
|
97
|
-
if (Option.isNone(maybeKey)) {
|
|
98
|
-
yield* github.addSigningKey(token, keyTitle, pubkey);
|
|
99
|
-
log(`✓ Registered GitHub signing key: ${keyTitle}`);
|
|
100
|
-
}
|
|
101
|
-
// 9. Register key as authn key on GitHub account if not already present
|
|
102
|
-
if (Option.isNone(maybeAuthnKey)) {
|
|
103
|
-
yield* github.addAuthnKey(token, keyTitle, pubkey);
|
|
104
|
-
log(`✓ Registered authn key on GitHub account`);
|
|
105
|
-
}
|
|
106
|
-
// 10. Write ssh config (pubkey file written by agent via KeyMapStore.addKey)
|
|
107
|
-
const pubkeyPath = sshConfig.getPubkeyPath(credentialFriendlyName);
|
|
108
|
-
yield* sshConfig.writeHost({
|
|
109
|
-
section: {
|
|
110
|
-
HostName: "github.com",
|
|
111
|
-
User: "git",
|
|
112
|
-
IdentityFile: pubkeyPath,
|
|
113
|
-
IdentitiesOnly: "yes",
|
|
114
|
-
IdentityAgent: AGENT_SOCK_FILE_PATH,
|
|
115
|
-
},
|
|
116
|
-
});
|
|
117
|
-
// 11. Clone if in clone mode
|
|
118
|
-
if (isCloneMode) {
|
|
119
|
-
yield* git.clone(owner, repo);
|
|
120
|
-
log(`✓ Cloned into ${repo}/`);
|
|
121
|
-
}
|
|
122
|
-
// 12. Set repo config plus any submodules' config
|
|
123
|
-
log('\nSetting git config:');
|
|
124
|
-
yield* git.setupRepo({
|
|
125
|
-
dir: process.cwd(),
|
|
126
|
-
remoteURL: `${STANDARD_REMOTE_PREFIX}${owner}/${repo}.git`,
|
|
127
|
-
user: gitUser,
|
|
128
|
-
pubkeyPath,
|
|
129
|
-
});
|
|
130
|
-
log(`\n✓ Setup complete for ${owner}/${repo}`);
|
|
131
|
-
}
|
|
132
|
-
const layerLive = pipe(GitImpl.Layer, Layer.provideMerge(GitHubImpl.Layer), Layer.provideMerge(AgentClientImpl.Layer), Layer.provideMerge(OSPlatformImpl.Layer), Layer.provideMerge(SSHConfigImpl.Layer), Layer.provideMerge(BunFileSystem.layer));
|
|
133
|
-
export const setup = new Command('setup')
|
|
134
|
-
.description('setup verified git commits for current repo')
|
|
135
|
-
.argument('[owner/repo]', 'GitHub repo to clone and set up (omit if already in a repo with a remote)')
|
|
136
|
-
.action(async (ownerRepo) => {
|
|
137
|
-
function* program() {
|
|
138
|
-
yield* pipe(effunct(gitSetup)(ownerRepo), Effect.provide(layerLive), Effect.catch(err => Effect.gen(function* () {
|
|
139
|
-
log(`✗ ${err}`);
|
|
140
|
-
})));
|
|
141
|
-
}
|
|
142
|
-
await Effect.runPromise(Effect.gen(program));
|
|
143
|
-
process.exit();
|
|
144
|
-
});
|
|
145
|
-
//# sourceMappingURL=setup.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../../../../src/commands/git/setup.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/index.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { program } from 'commander';
|
|
2
|
-
import { git } from './git';
|
|
3
|
-
import { npm } from './npm';
|
|
4
|
-
import { upgrade } from './upgrade';
|
|
5
|
-
import { ssh } from "./ssh";
|
|
6
|
-
import { CLI_CMD_NAME, CURRENT_VERSION } from '@/common/constants';
|
|
7
|
-
program.name(CLI_CMD_NAME).version(CURRENT_VERSION);
|
|
8
|
-
[git, npm, ssh, upgrade]
|
|
9
|
-
.forEach(cmd => { program.addCommand(cmd); });
|
|
10
|
-
program.parse();
|
|
11
|
-
if (process.argv.length <= 2)
|
|
12
|
-
program.help();
|
|
13
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEnE,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;AAEpD,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC;KACrB,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA,CAAC,CAAC,CAAC,CAAC;AAE/C,OAAO,CAAC,KAAK,EAAE,CAAC;AAEhB,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC;IAAE,OAAO,CAAC,IAAI,EAAE,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/commands/npm/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,MAAM,CAAC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC;KAClC,OAAO,CAAC,kCAAkC,CAAC,CAAC;AAE/C,CAAC,KAAK,CAAC;KACJ,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { $ } from 'bun';
|
|
2
|
-
import { Effect, Option } from 'effect';
|
|
3
|
-
// Handles https://github.com/owner/repo.git, git@github.com:owner/repo.git,
|
|
4
|
-
// and SSH aliases like github-ozyman42:owner/repo.git
|
|
5
|
-
export function parseGithubOwnerRepo(url) {
|
|
6
|
-
const https = url.match(/github\.com[/:]([^/]+)\/([^/]+?)(?:\.git)?$/);
|
|
7
|
-
if (https)
|
|
8
|
-
return Option.some({ owner: https[1], repo: https[2] });
|
|
9
|
-
const alias = url.match(/^[^:]+:([^/]+)\/([^/]+?)(?:\.git)?$/);
|
|
10
|
-
if (alias)
|
|
11
|
-
return Option.some({ owner: alias[1], repo: alias[2] });
|
|
12
|
-
return Option.none();
|
|
13
|
-
}
|
|
14
|
-
async function viewRepo(nameWithOwner) {
|
|
15
|
-
const view = await $ `gh repo view ${nameWithOwner} --json name,owner,url,sshUrl`.quiet().nothrow();
|
|
16
|
-
if (view.exitCode !== 0)
|
|
17
|
-
return Option.none();
|
|
18
|
-
try {
|
|
19
|
-
const data = JSON.parse(view.stdout.toString());
|
|
20
|
-
return Option.some({ owner: data.owner.login, repo: data.name, url: data.url, sshUrl: data.sshUrl });
|
|
21
|
-
}
|
|
22
|
-
catch {
|
|
23
|
-
return Option.none();
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
export function ensureGitHubRepo(name, isPrivate = false) {
|
|
27
|
-
return Effect.tryPromise({
|
|
28
|
-
try: async () => {
|
|
29
|
-
const whoami = await $ `gh api user --jq .login`.quiet().nothrow();
|
|
30
|
-
const owner = whoami.exitCode === 0 ? whoami.stdout.toString().trim() : null;
|
|
31
|
-
if (owner) {
|
|
32
|
-
const existingOption = await viewRepo(`${owner}/${name}`);
|
|
33
|
-
if (Option.isSome(existingOption))
|
|
34
|
-
return { repo: existingOption.value, created: false };
|
|
35
|
-
}
|
|
36
|
-
const visibility = isPrivate ? '--private' : '--public';
|
|
37
|
-
const create = await $ `gh repo create ${name} ${visibility}`.quiet().nothrow();
|
|
38
|
-
if (create.exitCode !== 0) {
|
|
39
|
-
throw new Error(`gh repo create failed: ${create.stderr.toString().trim()}`);
|
|
40
|
-
}
|
|
41
|
-
const createdOption = await viewRepo(name);
|
|
42
|
-
if (Option.isNone(createdOption))
|
|
43
|
-
throw new Error(`repo created but could not retrieve details for "${name}"`);
|
|
44
|
-
return { repo: createdOption.value, created: true };
|
|
45
|
-
},
|
|
46
|
-
catch: (e) => e instanceof Error ? e.message : String(e),
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
export async function checkGitHubAccess(remoteUrl) {
|
|
50
|
-
const parsedOption = parseGithubOwnerRepo(remoteUrl);
|
|
51
|
-
if (Option.isNone(parsedOption))
|
|
52
|
-
return Option.none();
|
|
53
|
-
const { owner, repo } = parsedOption.value;
|
|
54
|
-
const result = await $ `gh api repos/${owner}/${repo}`.quiet().nothrow();
|
|
55
|
-
if (result.exitCode !== 0)
|
|
56
|
-
return Option.none();
|
|
57
|
-
let data;
|
|
58
|
-
try {
|
|
59
|
-
data = JSON.parse(result.stdout.toString());
|
|
60
|
-
}
|
|
61
|
-
catch {
|
|
62
|
-
return Option.none();
|
|
63
|
-
}
|
|
64
|
-
return Option.some({ owner, repo, canPush: data?.permissions?.push === true });
|
|
65
|
-
}
|
|
66
|
-
//# sourceMappingURL=git-remote.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"git-remote.js","sourceRoot":"","sources":["../../../../../../../src/commands/npm/setup/git-remote.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAexC,4EAA4E;AAC5E,sDAAsD;AACtD,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACvE,IAAI,KAAK;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC;IACrE,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;IAC/D,IAAI,KAAK;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC;IACrE,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,aAAqB;IAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,CAAA,gBAAgB,aAAa,+BAA+B,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC;IACnG,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChD,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACvG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,SAAS,GAAG,KAAK;IAC9D,OAAO,MAAM,CAAC,UAAU,CAAC;QACvB,GAAG,EAAE,KAAK,IAAI,EAAE;YACd,MAAM,MAAM,GAAG,MAAM,CAAC,CAAA,yBAAyB,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC;YAClE,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAE7E,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,GAAG,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC;gBAC1D,IAAI,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;oBAAE,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YAC3F,CAAC;YAED,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;YACxD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAA,kBAAkB,IAAI,IAAI,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC;YAC/E,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CAAC,0BAA0B,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC/E,CAAC;YACD,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,oDAAoD,IAAI,GAAG,CAAC,CAAC;YAC/G,OAAO,EAAE,IAAI,EAAE,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACtD,CAAC;QACD,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;KACzD,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,SAAiB;IACvD,MAAM,YAAY,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACrD,IAAI,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;QAAE,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACtD,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC;IAE3C,MAAM,MAAM,GAAG,MAAM,CAAC,CAAA,gBAAgB,KAAK,IAAI,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC;IACxE,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IAEhD,IAAI,IAAS,CAAC;IACd,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC;AACjF,CAAC"}
|