@tokensrc/codex 1.12.1
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 +74 -0
- package/assets/codex-shortcut-icon.icns +0 -0
- package/assets/codex-shortcut-icon.ico +0 -0
- package/dist/account-display.d.ts +16 -0
- package/dist/account-display.js +35 -0
- package/dist/account-display.js.map +1 -0
- package/dist/bin-app.d.ts +2 -0
- package/dist/bin-app.js +12 -0
- package/dist/bin-app.js.map +1 -0
- package/dist/bin-run.d.ts +2 -0
- package/dist/bin-run.js +12 -0
- package/dist/bin-run.js.map +1 -0
- package/dist/branding.d.ts +2 -0
- package/dist/branding.js +8 -0
- package/dist/branding.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +69 -0
- package/dist/cli.js.map +1 -0
- package/dist/client.d.ts +27 -0
- package/dist/client.js +177 -0
- package/dist/client.js.map +1 -0
- package/dist/command-directory.d.ts +15 -0
- package/dist/command-directory.js +28 -0
- package/dist/command-directory.js.map +1 -0
- package/dist/commands.d.ts +25 -0
- package/dist/commands.js +507 -0
- package/dist/commands.js.map +1 -0
- package/dist/config.d.ts +36 -0
- package/dist/config.js +272 -0
- package/dist/config.js.map +1 -0
- package/dist/console-status.d.ts +58 -0
- package/dist/console-status.js +84 -0
- package/dist/console-status.js.map +1 -0
- package/dist/credentials.d.ts +52 -0
- package/dist/credentials.js +130 -0
- package/dist/credentials.js.map +1 -0
- package/dist/errors.d.ts +19 -0
- package/dist/errors.js +40 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.js +67 -0
- package/dist/index.js.map +1 -0
- package/dist/legacy-cleanup.d.ts +5 -0
- package/dist/legacy-cleanup.js +36 -0
- package/dist/legacy-cleanup.js.map +1 -0
- package/dist/oidc.d.ts +26 -0
- package/dist/oidc.js +154 -0
- package/dist/oidc.js.map +1 -0
- package/dist/private-file.d.ts +3 -0
- package/dist/private-file.js +30 -0
- package/dist/private-file.js.map +1 -0
- package/dist/profile.d.ts +29 -0
- package/dist/profile.js +253 -0
- package/dist/profile.js.map +1 -0
- package/dist/protocol.d.ts +752 -0
- package/dist/protocol.js +235 -0
- package/dist/protocol.js.map +1 -0
- package/dist/quota-cache.d.ts +18 -0
- package/dist/quota-cache.js +66 -0
- package/dist/quota-cache.js.map +1 -0
- package/dist/runtime.d.ts +16 -0
- package/dist/runtime.js +144 -0
- package/dist/runtime.js.map +1 -0
- package/dist/selection.d.ts +18 -0
- package/dist/selection.js +42 -0
- package/dist/selection.js.map +1 -0
- package/dist/shortcuts.d.ts +30 -0
- package/dist/shortcuts.js +122 -0
- package/dist/shortcuts.js.map +1 -0
- package/dist/tui.d.ts +29 -0
- package/dist/tui.js +278 -0
- package/dist/tui.js.map +1 -0
- package/dist/types.d.ts +104 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +92 -0
package/dist/commands.js
ADDED
|
@@ -0,0 +1,507 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { hostname } from "node:os";
|
|
3
|
+
import { getStoragePath, loadAccounts, setStoragePath, setStoragePathDirect } from "codex-multi-auth/storage";
|
|
4
|
+
import { CodexServiceError } from "./errors.js";
|
|
5
|
+
import { backupCodexFileCredentials, codexFileCredentialsMatchAccount, inspectLocalCodexCredentialStatus, resetManagedCodexFileCredentials, restoreCodexFileCredentials, writeCodexChatgptFileCredentials } from "./credentials.js";
|
|
6
|
+
import { CODEX_DISTRIBUTION_SCHEMA_VERSION } from "./protocol.js";
|
|
7
|
+
import { formatCodexAccountDisplayIdentity, resolveCodexAdminAccount, resolveCodexAccountDisplayName } from "./account-display.js";
|
|
8
|
+
import { loadCodexQuotaUploads } from "./quota-cache.js";
|
|
9
|
+
import { cleanupLegacyCodexProvider } from "./legacy-cleanup.js";
|
|
10
|
+
import { clearCodexSelection, loadCodexSelection, saveCodexSelection } from "./selection.js";
|
|
11
|
+
import { installCodexShortcuts, removeCodexShortcuts } from "./shortcuts.js";
|
|
12
|
+
import { isCodexAccountAvailable, renderCodexAccountDashboard, selectCodexAccount } from "./tui.js";
|
|
13
|
+
export const NO_AVAILABLE_CHATGPT_ACCOUNT_MESSAGE = "当前用户没有绑定可用的 ChatGPT 账号。请前往 OA 系统提交 IT11 工单,申请独享或共享的 ChatGPT 个人账号。";
|
|
14
|
+
async function json(command, deps) {
|
|
15
|
+
if (command.optsWithGlobals().json)
|
|
16
|
+
return true;
|
|
17
|
+
return Boolean(await deps.jsonEnabled?.(command));
|
|
18
|
+
}
|
|
19
|
+
function print(output, value) {
|
|
20
|
+
output.write(`${JSON.stringify(value, null, 2)}\n`);
|
|
21
|
+
}
|
|
22
|
+
function success(value) {
|
|
23
|
+
return {
|
|
24
|
+
schemaVersion: CODEX_DISTRIBUTION_SCHEMA_VERSION,
|
|
25
|
+
ok: true,
|
|
26
|
+
...(value ?? {})
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function importFailures(credentials) {
|
|
30
|
+
return credentials.filter(({ status }) => status === "REJECTED" || status === "UNKNOWN");
|
|
31
|
+
}
|
|
32
|
+
function serviceConnection(options = {}) {
|
|
33
|
+
return {
|
|
34
|
+
...(options.server ? { serverUrl: options.server } : {}),
|
|
35
|
+
...((options.insecurePoc || options.insecureHttp) ? { allowInsecureHttp: true } : {})
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function serviceOptions(command) {
|
|
39
|
+
return command
|
|
40
|
+
.option("-u, --server <url>", "Codex account service URL")
|
|
41
|
+
.option("--insecure-poc", "allow non-loopback HTTP for isolated testing")
|
|
42
|
+
.option("--insecure-http", "allow non-loopback HTTP");
|
|
43
|
+
}
|
|
44
|
+
async function resolveAdminAccount(client, requested) {
|
|
45
|
+
const { accounts } = await client.listAdminAccounts();
|
|
46
|
+
return resolveCodexAdminAccount(accounts, requested);
|
|
47
|
+
}
|
|
48
|
+
function formatAdminAccount(account) {
|
|
49
|
+
return `${resolveCodexAccountDisplayName({
|
|
50
|
+
accountId: account.id,
|
|
51
|
+
label: account.label,
|
|
52
|
+
email: account.email,
|
|
53
|
+
providerAccountId: account.providerAccountId
|
|
54
|
+
})} (${account.id})`;
|
|
55
|
+
}
|
|
56
|
+
async function loadAccountData(deps, options = {}) {
|
|
57
|
+
const response = await deps.clientFor(serviceConnection(options)).listAccounts();
|
|
58
|
+
const previous = await loadCodexSelection(deps.config.persistence.configDirectory);
|
|
59
|
+
return {
|
|
60
|
+
response,
|
|
61
|
+
selectedAccountId: previous?.account.id ?? response.defaultAccountId ?? undefined
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
async function chooseAccount(deps, requested, options = {}) {
|
|
65
|
+
const { response, selectedAccountId } = await loadAccountData(deps, options);
|
|
66
|
+
const cli = deps.config.branding.cliName === "numa"
|
|
67
|
+
? "numa codex use"
|
|
68
|
+
: `${deps.config.branding.cliName} use`;
|
|
69
|
+
const account = await selectCodexAccount(response.accounts, {
|
|
70
|
+
requested,
|
|
71
|
+
selectedAccountId,
|
|
72
|
+
nonInteractiveCommand: cli,
|
|
73
|
+
noAvailableMessage: `【需要申请 ChatGPT 账号】\n${NO_AVAILABLE_CHATGPT_ACCOUNT_MESSAGE}`,
|
|
74
|
+
output: deps.errorOutput
|
|
75
|
+
});
|
|
76
|
+
const accountLabel = resolveCodexAccountDisplayName({
|
|
77
|
+
accountId: account.id,
|
|
78
|
+
label: account.label,
|
|
79
|
+
providerAccountId: account.accountId
|
|
80
|
+
});
|
|
81
|
+
const selection = await saveCodexSelection(deps.config.persistence.configDirectory, {
|
|
82
|
+
serviceUrl: options.server ?? deps.config.connection.serverUrl,
|
|
83
|
+
allowInsecurePoc: Boolean(options.insecurePoc || options.insecureHttp || deps.config.connection.allowInsecureHttp),
|
|
84
|
+
account: { id: account.id, accountId: account.accountId, label: accountLabel }
|
|
85
|
+
});
|
|
86
|
+
return { account, selection };
|
|
87
|
+
}
|
|
88
|
+
async function installCredentials(deps, accountId, service) {
|
|
89
|
+
const response = await deps.clientFor(service).getLoginCredentials(accountId);
|
|
90
|
+
await cleanupLegacyCodexProvider();
|
|
91
|
+
await backupCodexFileCredentials();
|
|
92
|
+
await writeCodexChatgptFileCredentials({
|
|
93
|
+
accessToken: response.accessToken,
|
|
94
|
+
idToken: response.idToken,
|
|
95
|
+
accountId: response.account.accountId
|
|
96
|
+
});
|
|
97
|
+
return { expiresAt: response.expiresAt };
|
|
98
|
+
}
|
|
99
|
+
async function selectedCredentials(deps, requested, options = {}) {
|
|
100
|
+
let selection = await loadCodexSelection(deps.config.persistence.configDirectory);
|
|
101
|
+
if (!selection || options.server || requested && selection.account.id !== requested) {
|
|
102
|
+
selection = (await chooseAccount(deps, requested, options)).selection;
|
|
103
|
+
}
|
|
104
|
+
if (!(await codexFileCredentialsMatchAccount(selection.account.accountId))) {
|
|
105
|
+
await installCredentials(deps, selection.account.id, {
|
|
106
|
+
serverUrl: selection.serviceUrl,
|
|
107
|
+
allowInsecureHttp: selection.allowInsecurePoc
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
return selection;
|
|
111
|
+
}
|
|
112
|
+
export function registerCodexCommands(program, deps, options = {}) {
|
|
113
|
+
const codex = options.nested === false
|
|
114
|
+
? program
|
|
115
|
+
: program.command("codex").description("Select an account and launch the official Codex client");
|
|
116
|
+
const includeAuthCommands = options.includeAuthCommands ?? options.nested === false;
|
|
117
|
+
if (includeAuthCommands)
|
|
118
|
+
codex.command("login").description("Log in with OIDC").action(async (_options, command) => {
|
|
119
|
+
if (!deps.auth.login)
|
|
120
|
+
throw new Error("The injected authentication provider does not expose login.");
|
|
121
|
+
const result = await deps.auth.login();
|
|
122
|
+
if (await json(command, deps))
|
|
123
|
+
print(deps.output, success(result));
|
|
124
|
+
else
|
|
125
|
+
deps.output.write(`Login complete; token expires at ${new Date(result.expiresAt * 1000).toISOString()}.\n`);
|
|
126
|
+
});
|
|
127
|
+
if (includeAuthCommands)
|
|
128
|
+
codex.command("logout").description("Remove the standalone OIDC login").action(async (_options, command) => {
|
|
129
|
+
if (!deps.auth.logout)
|
|
130
|
+
throw new Error("The injected authentication provider does not expose logout.");
|
|
131
|
+
await deps.auth.logout();
|
|
132
|
+
if (await json(command, deps))
|
|
133
|
+
print(deps.output, success());
|
|
134
|
+
else
|
|
135
|
+
deps.output.write("Logged out.\n");
|
|
136
|
+
});
|
|
137
|
+
serviceOptions(codex.command("list").description("List available Codex accounts without downloading credentials"))
|
|
138
|
+
.action(async (opts, command) => {
|
|
139
|
+
const { response: result, selectedAccountId } = await loadAccountData(deps, opts);
|
|
140
|
+
const hasAvailableAccount = result.accounts.some(isCodexAccountAvailable);
|
|
141
|
+
if (await json(command, deps))
|
|
142
|
+
print(deps.output, success({
|
|
143
|
+
...result,
|
|
144
|
+
...(hasAvailableAccount ? {} : { guidance: { code: "chatgpt_account_request_required", ticket_template: "IT11", message: NO_AVAILABLE_CHATGPT_ACCOUNT_MESSAGE } })
|
|
145
|
+
}));
|
|
146
|
+
else if (result.accounts.length === 0) {
|
|
147
|
+
deps.output.write(`【需要申请 ChatGPT 账号】\n${NO_AVAILABLE_CHATGPT_ACCOUNT_MESSAGE}\n`);
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
deps.output.write(renderCodexAccountDashboard(result.accounts, selectedAccountId));
|
|
151
|
+
if (!hasAvailableAccount) {
|
|
152
|
+
deps.output.write(`【需要申请 ChatGPT 账号】\n${NO_AVAILABLE_CHATGPT_ACCOUNT_MESSAGE}\n`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
serviceOptions(codex.command("use [account]").description("Select an account and update the official Codex auth.json"))
|
|
157
|
+
.action(async (account, opts, command) => {
|
|
158
|
+
const result = await chooseAccount(deps, account, opts);
|
|
159
|
+
await installCredentials(deps, result.account.id, serviceConnection(opts));
|
|
160
|
+
if (await json(command, deps))
|
|
161
|
+
print(deps.output, success({ account: result.account, auth_mode: "chatgpt" }));
|
|
162
|
+
else
|
|
163
|
+
deps.output.write(`已选择: ${result.account.label} (${result.account.id})\n官方 Codex ChatGPT 登录凭据已更新。\n`);
|
|
164
|
+
});
|
|
165
|
+
serviceOptions(codex.command("run [codexArgs...]").description("Launch the official Codex CLI"))
|
|
166
|
+
.option("-a, --account <id>", "account id")
|
|
167
|
+
.option("-s, --select-account", "select an account before launch")
|
|
168
|
+
.allowUnknownOption(true)
|
|
169
|
+
.action(async (args, opts) => {
|
|
170
|
+
if (opts.selectAccount)
|
|
171
|
+
await clearCodexSelection(deps.config.persistence.configDirectory);
|
|
172
|
+
const selected = await selectedCredentials(deps, opts.account, opts);
|
|
173
|
+
deps.errorOutput.write(`Using ChatGPT account: ${selected.account.label} (${selected.account.id})\n`);
|
|
174
|
+
process.exitCode = await deps.run(args);
|
|
175
|
+
});
|
|
176
|
+
serviceOptions(codex.command("app [workspace]").description("Launch the official Codex desktop app"))
|
|
177
|
+
.option("-a, --account <id>", "account id")
|
|
178
|
+
.option("-s, --select-account", "select an account before launch")
|
|
179
|
+
.action(async (workspace, opts) => {
|
|
180
|
+
if (process.platform !== "darwin" && process.platform !== "win32")
|
|
181
|
+
throw new Error("官方 Codex 桌面 App 仅支持 macOS 和 Windows。");
|
|
182
|
+
if (opts.selectAccount)
|
|
183
|
+
await clearCodexSelection(deps.config.persistence.configDirectory);
|
|
184
|
+
const selected = await selectedCredentials(deps, opts.account, opts);
|
|
185
|
+
deps.errorOutput.write(`Using ChatGPT account: ${selected.account.label} (${selected.account.id})\n`);
|
|
186
|
+
process.exitCode = await deps.app(workspace);
|
|
187
|
+
});
|
|
188
|
+
codex.command("status").description("Show selection and official auth.json status")
|
|
189
|
+
.option("--remote", "include remote accounts")
|
|
190
|
+
.action(async (opts, command) => {
|
|
191
|
+
const local = await deps.status.loadLocal();
|
|
192
|
+
if (await json(command, deps))
|
|
193
|
+
print(deps.output, success({
|
|
194
|
+
configured: local.configured,
|
|
195
|
+
official_auth_matches_selection: local.officialAuthMatchesSelection,
|
|
196
|
+
official_auth: {
|
|
197
|
+
state: local.officialAuth.state,
|
|
198
|
+
account_id: local.officialAuth.accountId ?? null,
|
|
199
|
+
expires_at: local.officialAuth.expiresAt ? new Date(local.officialAuth.expiresAt).toISOString() : null,
|
|
200
|
+
usable: local.officialAuth.usable
|
|
201
|
+
},
|
|
202
|
+
selection: local.selection ? {
|
|
203
|
+
account: local.selection.account,
|
|
204
|
+
insecure_poc: local.selection.allowInsecurePoc,
|
|
205
|
+
updated_at: local.selection.updatedAt
|
|
206
|
+
} : null,
|
|
207
|
+
...(opts.remote ? { remote: await deps.status.loadRemote() } : {})
|
|
208
|
+
}));
|
|
209
|
+
else {
|
|
210
|
+
deps.output.write(`Account selection: ${local.selection?.account.label ?? "not configured"}\n`);
|
|
211
|
+
deps.output.write(`Official ChatGPT login: ${local.officialAuthMatchesSelection ? "matched" : "not matched"}\n`);
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
codex.command("reset").description("Reset selection and managed official credentials")
|
|
215
|
+
.action(async (_options, command) => {
|
|
216
|
+
const selection = await loadCodexSelection(deps.config.persistence.configDirectory);
|
|
217
|
+
const cleanup = await cleanupLegacyCodexProvider();
|
|
218
|
+
const auth = await resetManagedCodexFileCredentials(selection?.account.accountId);
|
|
219
|
+
await clearCodexSelection(deps.config.persistence.configDirectory);
|
|
220
|
+
if (await json(command, deps))
|
|
221
|
+
print(deps.output, success({ reset: true, auth_action: auth.action, legacy_provider_removed: cleanup.changed }));
|
|
222
|
+
else
|
|
223
|
+
deps.output.write(`已重置 Codex 配置;登录处理=${auth.action}。\n`);
|
|
224
|
+
});
|
|
225
|
+
serviceOptions(codex.command("auth-agent [account]").description("Continuously renew official Codex credentials"))
|
|
226
|
+
.option("-o, --once", "refresh once")
|
|
227
|
+
.option("--restore", "restore prior auth.json")
|
|
228
|
+
.option("-i, --interval <seconds>", "refresh interval", "60")
|
|
229
|
+
.option("-r, --refresh-before <seconds>", "refresh before expiry", "3600")
|
|
230
|
+
.option("--credential-store <mode>", "file|keyring|auto", "file")
|
|
231
|
+
.option("--replace-login", "confirm replacement")
|
|
232
|
+
.action(async (account, opts, command) => {
|
|
233
|
+
if (opts.restore) {
|
|
234
|
+
const result = await restoreCodexFileCredentials();
|
|
235
|
+
if (await json(command, deps))
|
|
236
|
+
print(deps.output, success({ action: result.action }));
|
|
237
|
+
else
|
|
238
|
+
deps.output.write(`Restored ${result.authPath}.\n`);
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
if (!opts.replaceLogin)
|
|
242
|
+
throw new Error("auth-agent replaces the current login; add --replace-login to confirm.");
|
|
243
|
+
if (opts.credentialStore !== "file")
|
|
244
|
+
throw new Error("ChatGPT auth.json 同步目前仅支持 --credential-store file。");
|
|
245
|
+
const selection = (await chooseAccount(deps, account, opts)).selection;
|
|
246
|
+
const interval = Number(opts.interval) * 1_000;
|
|
247
|
+
const refreshBefore = Number(opts.refreshBefore) * 1_000;
|
|
248
|
+
if (!Number.isFinite(interval) || interval <= 0)
|
|
249
|
+
throw new Error("--interval must be positive.");
|
|
250
|
+
if (!Number.isFinite(refreshBefore) || refreshBefore <= 0)
|
|
251
|
+
throw new Error("--refresh-before must be positive.");
|
|
252
|
+
const local = await inspectLocalCodexCredentialStatus(selection.account.accountId);
|
|
253
|
+
let expiresAt = local.state === "installed" && local.matchesExpectedAccount === true
|
|
254
|
+
? local.expiresAt
|
|
255
|
+
: undefined;
|
|
256
|
+
do {
|
|
257
|
+
const timestamp = Date.now();
|
|
258
|
+
if (expiresAt === undefined || expiresAt <= timestamp + refreshBefore) {
|
|
259
|
+
expiresAt = (await installCredentials(deps, selection.account.id, serviceConnection(opts))).expiresAt;
|
|
260
|
+
const event = {
|
|
261
|
+
level: "INFO",
|
|
262
|
+
event: "credentials.installed",
|
|
263
|
+
at: new Date(timestamp).toISOString(),
|
|
264
|
+
account: selection.account.id,
|
|
265
|
+
expiresAt
|
|
266
|
+
};
|
|
267
|
+
if (await json(command, deps))
|
|
268
|
+
print(deps.output, success(event));
|
|
269
|
+
else
|
|
270
|
+
deps.output.write(`${event.at} INFO credentials.installed ${selection.account.label}\n`);
|
|
271
|
+
}
|
|
272
|
+
else {
|
|
273
|
+
const event = {
|
|
274
|
+
level: "INFO",
|
|
275
|
+
event: "credentials.current",
|
|
276
|
+
at: new Date(timestamp).toISOString(),
|
|
277
|
+
account: selection.account.id,
|
|
278
|
+
expiresAt,
|
|
279
|
+
refreshAt: expiresAt - refreshBefore
|
|
280
|
+
};
|
|
281
|
+
if (await json(command, deps))
|
|
282
|
+
print(deps.output, success(event));
|
|
283
|
+
else
|
|
284
|
+
deps.output.write(`${event.at} INFO credentials.current ${selection.account.label}; refresh not due\n`);
|
|
285
|
+
}
|
|
286
|
+
if (opts.once)
|
|
287
|
+
break;
|
|
288
|
+
await new Promise((resolve) => setTimeout(resolve, interval));
|
|
289
|
+
} while (true);
|
|
290
|
+
});
|
|
291
|
+
serviceOptions(codex.command("upload").description("Upload the local codex-multi-auth account pool"))
|
|
292
|
+
.option("--storage <path>", "account storage path")
|
|
293
|
+
.option("--source <name>", "upload source")
|
|
294
|
+
.action(async (opts, command) => {
|
|
295
|
+
if (opts.storage)
|
|
296
|
+
setStoragePathDirect(opts.storage);
|
|
297
|
+
else
|
|
298
|
+
setStoragePath(null);
|
|
299
|
+
const storage = await loadAccounts();
|
|
300
|
+
if (!storage?.accounts.length)
|
|
301
|
+
throw new Error(`codex-multi-auth account pool is empty: ${getStoragePath()}`);
|
|
302
|
+
const quotas = await loadCodexQuotaUploads(getStoragePath(), storage.accounts);
|
|
303
|
+
const accounts = storage.accounts.map((item, index) => {
|
|
304
|
+
if (!item.refreshToken?.trim())
|
|
305
|
+
throw new Error(`Account ${index + 1} has no refresh token.`);
|
|
306
|
+
return {
|
|
307
|
+
sourceKey: createHash("sha256").update(`${item.accountId ?? ""}\0${item.email ?? ""}\0${item.addedAt}`).digest("hex"),
|
|
308
|
+
...(item.accountId ? { accountId: item.accountId } : {}),
|
|
309
|
+
label: item.email?.trim() || item.accountLabel?.trim() || `Codex account ${index + 1}`,
|
|
310
|
+
...(item.email ? { email: item.email } : {}),
|
|
311
|
+
refreshToken: item.refreshToken,
|
|
312
|
+
...(item.accessToken ? { accessToken: item.accessToken } : {}),
|
|
313
|
+
...(item.expiresAt ? { expiresAt: item.expiresAt } : {}),
|
|
314
|
+
...(quotas[index] ? { quota: quotas[index] } : {}),
|
|
315
|
+
enabled: item.enabled !== false
|
|
316
|
+
};
|
|
317
|
+
});
|
|
318
|
+
const result = await deps.clientFor(serviceConnection(opts)).uploadAccounts({ source: opts.source?.trim() || hostname(), accounts });
|
|
319
|
+
const credentials = result.credentials.map((credential, index) => ({
|
|
320
|
+
...credential,
|
|
321
|
+
label: resolveCodexAccountDisplayName({
|
|
322
|
+
accountId: credential.accountId,
|
|
323
|
+
label: credential.label ?? accounts[index]?.label,
|
|
324
|
+
email: accounts[index]?.email,
|
|
325
|
+
providerAccountId: accounts[index]?.accountId
|
|
326
|
+
})
|
|
327
|
+
}));
|
|
328
|
+
const response = { ...result, credentials };
|
|
329
|
+
const failures = importFailures(credentials);
|
|
330
|
+
if (await json(command, deps)) {
|
|
331
|
+
print(deps.output, {
|
|
332
|
+
...response,
|
|
333
|
+
ok: failures.length === 0,
|
|
334
|
+
targetTenantId: deps.config.connection.tenantId,
|
|
335
|
+
storage_path: getStoragePath(),
|
|
336
|
+
uploaded: accounts.length
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
else {
|
|
340
|
+
const accepted = credentials.length - failures.length;
|
|
341
|
+
deps.output.write(`目标租户:${deps.config.connection.tenantId}(由已验证的 client profile 决定)。\n`);
|
|
342
|
+
deps.output.write(`已处理 ${accounts.length} 个账号:新建 ${result.created},更新 ${result.updated},凭据成功 ${accepted},失败 ${failures.length}。\n`);
|
|
343
|
+
for (const item of credentials) {
|
|
344
|
+
deps.output.write(`- ${formatCodexAccountDisplayIdentity(item)}: ${item.status}`
|
|
345
|
+
+ `${item.errorCode ? ` (${item.errorCode})` : ""}\n`);
|
|
346
|
+
}
|
|
347
|
+
deps.output.write("refresh token 已通过认证连接发送,客户端输出和日志均不包含令牌。\n");
|
|
348
|
+
}
|
|
349
|
+
if (failures.length > 0)
|
|
350
|
+
process.exitCode = 1;
|
|
351
|
+
});
|
|
352
|
+
const admin = codex.command("admin")
|
|
353
|
+
.description("Administer server-managed Codex accounts and assignments");
|
|
354
|
+
const adminAccounts = admin.command("accounts")
|
|
355
|
+
.description("Inspect accounts, credential history, and refresh state");
|
|
356
|
+
serviceOptions(adminAccounts.command("list").description("List all tenant Codex accounts"))
|
|
357
|
+
.action(async (opts, command) => {
|
|
358
|
+
const result = await deps.clientFor(serviceConnection(opts)).listAdminAccounts();
|
|
359
|
+
if (await json(command, deps)) {
|
|
360
|
+
print(deps.output, success(result));
|
|
361
|
+
return;
|
|
362
|
+
}
|
|
363
|
+
if (result.accounts.length === 0) {
|
|
364
|
+
deps.output.write("当前租户没有 ChatGPT/Codex 管理账号。\n");
|
|
365
|
+
return;
|
|
366
|
+
}
|
|
367
|
+
for (const account of result.accounts) {
|
|
368
|
+
deps.output.write(`${formatAdminAccount(account)} ${account.status}/${account.credentialStatus}`
|
|
369
|
+
+ ` assignments=${account.activeAssignmentCount ?? 0}`
|
|
370
|
+
+ `${account.lastRefreshErrorCode ? ` error=${account.lastRefreshErrorCode}` : ""}\n`);
|
|
371
|
+
}
|
|
372
|
+
});
|
|
373
|
+
serviceOptions(adminAccounts.command("credential-versions <account>")
|
|
374
|
+
.description("Show redacted credential version diagnostics"))
|
|
375
|
+
.action(async (account, opts, command) => {
|
|
376
|
+
const client = deps.clientFor(serviceConnection(opts));
|
|
377
|
+
const resolved = await resolveAdminAccount(client, account);
|
|
378
|
+
const result = await client.listCredentialVersions(resolved.id);
|
|
379
|
+
if (await json(command, deps)) {
|
|
380
|
+
print(deps.output, success(result));
|
|
381
|
+
return;
|
|
382
|
+
}
|
|
383
|
+
deps.output.write(`${formatAdminAccount(resolved)}\n`);
|
|
384
|
+
for (const credential of result.credentials) {
|
|
385
|
+
deps.output.write(`- v${credential.version} ${credential.status}`
|
|
386
|
+
+ `${credential.lastRefreshAttemptReason ? ` reason=${credential.lastRefreshAttemptReason}` : ""}`
|
|
387
|
+
+ `${credential.lastRefreshAttemptOutcome ? ` outcome=${credential.lastRefreshAttemptOutcome}` : ""}`
|
|
388
|
+
+ `${credential.lastRefreshAttemptErrorCode ? ` error=${credential.lastRefreshAttemptErrorCode}` : ""}`
|
|
389
|
+
+ `${credential.lastRefreshAttemptAt ? ` at=${new Date(credential.lastRefreshAttemptAt).toISOString()}` : ""}\n`);
|
|
390
|
+
}
|
|
391
|
+
});
|
|
392
|
+
serviceOptions(adminAccounts.command("refresh <account>")
|
|
393
|
+
.description("Request one server-side refresh-token exchange"))
|
|
394
|
+
.action(async (account, opts, command) => {
|
|
395
|
+
const client = deps.clientFor(serviceConnection(opts));
|
|
396
|
+
const resolved = await resolveAdminAccount(client, account);
|
|
397
|
+
const result = await client.refreshAdminAccount(resolved.id);
|
|
398
|
+
const ok = result.outcome === "SUCCESS";
|
|
399
|
+
if (await json(command, deps)) {
|
|
400
|
+
print(deps.output, { ...result, ok });
|
|
401
|
+
}
|
|
402
|
+
else {
|
|
403
|
+
deps.output.write(`${formatAdminAccount(resolved)}: ${result.outcome}`
|
|
404
|
+
+ `${result.errorCode ? ` (${result.errorCode})` : ""}`
|
|
405
|
+
+ `${result.expiresAt ? ` expires=${new Date(result.expiresAt).toISOString()}` : ""}\n`);
|
|
406
|
+
}
|
|
407
|
+
if (!ok)
|
|
408
|
+
process.exitCode = 1;
|
|
409
|
+
});
|
|
410
|
+
const adminAssignments = admin.command("assignments")
|
|
411
|
+
.description("List, bind, or unbind tenant Codex account assignments");
|
|
412
|
+
serviceOptions(adminAssignments.command("list").description("List tenant Codex account assignments"))
|
|
413
|
+
.action(async (opts, command) => {
|
|
414
|
+
const client = deps.clientFor(serviceConnection(opts));
|
|
415
|
+
const result = await client.listAdminAssignments();
|
|
416
|
+
if (await json(command, deps)) {
|
|
417
|
+
print(deps.output, success(result));
|
|
418
|
+
return;
|
|
419
|
+
}
|
|
420
|
+
if (result.assignments.length === 0) {
|
|
421
|
+
deps.output.write("当前租户没有 ChatGPT/Codex 账号绑定。\n");
|
|
422
|
+
return;
|
|
423
|
+
}
|
|
424
|
+
const { accounts } = await client.listAdminAccounts();
|
|
425
|
+
const accountById = new Map(accounts.map((account) => [account.id, account]));
|
|
426
|
+
for (const assignment of result.assignments) {
|
|
427
|
+
const account = accountById.get(assignment.accountId);
|
|
428
|
+
const accountText = account ? formatAdminAccount(account) : assignment.accountId;
|
|
429
|
+
deps.output.write(`${assignment.id} ${accountText} user=${assignment.username}`
|
|
430
|
+
+ ` (${assignment.userSubject}) ${assignment.status}`
|
|
431
|
+
+ `${assignment.isDefault ? " default" : ""}\n`);
|
|
432
|
+
}
|
|
433
|
+
});
|
|
434
|
+
serviceOptions(adminAssignments.command("bind <account> <subject>")
|
|
435
|
+
.description("Bind a ChatGPT/Codex account to a Keycloak user"))
|
|
436
|
+
.option("--default", "make this the user's default Codex account")
|
|
437
|
+
.action(async (account, subject, opts, command) => {
|
|
438
|
+
const client = deps.clientFor(serviceConnection(opts));
|
|
439
|
+
const resolved = await resolveAdminAccount(client, account);
|
|
440
|
+
const result = await client.bindAdminAssignment({
|
|
441
|
+
accountId: resolved.id,
|
|
442
|
+
userSubject: subject,
|
|
443
|
+
isDefault: Boolean(opts.default)
|
|
444
|
+
});
|
|
445
|
+
if (await json(command, deps))
|
|
446
|
+
print(deps.output, success(result));
|
|
447
|
+
else
|
|
448
|
+
deps.output.write(`已绑定 ${result.assignment.username} (${result.assignment.userSubject})`
|
|
449
|
+
+ ` -> ${formatAdminAccount(resolved)}${result.assignment.isDefault ? " [default]" : ""}\n`);
|
|
450
|
+
});
|
|
451
|
+
serviceOptions(adminAssignments.command("unbind <assignment>")
|
|
452
|
+
.description("Remove a ChatGPT/Codex account assignment"))
|
|
453
|
+
.action(async (assignment, opts, command) => {
|
|
454
|
+
const client = deps.clientFor(serviceConnection(opts));
|
|
455
|
+
const assignmentList = await client.listAdminAssignments();
|
|
456
|
+
const target = assignmentList.assignments.find((item) => item.id === assignment);
|
|
457
|
+
if (!target) {
|
|
458
|
+
throw new CodexServiceError(`未找到 Codex 账号绑定: ${assignment}`, "codex_assignment_not_found", 404);
|
|
459
|
+
}
|
|
460
|
+
const resolved = await resolveAdminAccount(client, target.accountId);
|
|
461
|
+
const result = await client.unbindAdminAssignment(assignment);
|
|
462
|
+
if (await json(command, deps))
|
|
463
|
+
print(deps.output, success(result));
|
|
464
|
+
else
|
|
465
|
+
deps.output.write(`已解除 ${formatAdminAccount(resolved)} 与 ${target.username} 的绑定:${result.assignmentId}\n`);
|
|
466
|
+
});
|
|
467
|
+
serviceOptions(codex.command("shortcut [action]").description("Install or remove Codex shortcuts"))
|
|
468
|
+
.option("-t, --target <target>", "run|app|both", "both")
|
|
469
|
+
.option("--command-name <name>", "shortcut command base name")
|
|
470
|
+
.option("--app-name <name>", "desktop application name")
|
|
471
|
+
.option("--scope <scope>", "auto|system|user", "auto")
|
|
472
|
+
.option("-r, --registry-url <url>", "npm registry used by shortcuts")
|
|
473
|
+
.option("-w, --workspace <path>", "default workspace")
|
|
474
|
+
.option("-a, --account <id>", "fixed account id")
|
|
475
|
+
.option("-s, --select-account", "select account on every launch")
|
|
476
|
+
.option("-f, --force", "overwrite unmanaged target")
|
|
477
|
+
.action(async (action, opts, command) => {
|
|
478
|
+
if (action && action !== "install" && action !== "remove")
|
|
479
|
+
throw new Error("shortcut action must be install or remove.");
|
|
480
|
+
const shortcutConfig = {
|
|
481
|
+
...deps.config,
|
|
482
|
+
branding: { ...deps.config.branding, ...(opts.appName ? { appName: opts.appName } : {}) },
|
|
483
|
+
launcher: {
|
|
484
|
+
...deps.config.launcher,
|
|
485
|
+
...(opts.commandName ? { runCommandName: opts.commandName, appCommandName: `${opts.commandName}-app` } : {})
|
|
486
|
+
}
|
|
487
|
+
};
|
|
488
|
+
const shortcutOptions = { ...opts, registryUrl: opts.registryUrl ?? deps.config.branding.registryUrl };
|
|
489
|
+
const result = action === "remove"
|
|
490
|
+
? await removeCodexShortcuts(shortcutConfig, shortcutOptions)
|
|
491
|
+
: await installCodexShortcuts(shortcutConfig, shortcutOptions);
|
|
492
|
+
if (await json(command, deps))
|
|
493
|
+
print(deps.output, success({
|
|
494
|
+
action: result.action,
|
|
495
|
+
platform: result.platform,
|
|
496
|
+
command_directory: result.commandDirectory,
|
|
497
|
+
scope: result.scope,
|
|
498
|
+
path_ready: result.pathReady,
|
|
499
|
+
path_hint: result.pathHint ?? null,
|
|
500
|
+
artifacts: result.artifacts
|
|
501
|
+
}));
|
|
502
|
+
else
|
|
503
|
+
deps.output.write(`${result.action} ${result.artifacts.length} shortcut artifacts.\n`);
|
|
504
|
+
});
|
|
505
|
+
return codex;
|
|
506
|
+
}
|
|
507
|
+
//# sourceMappingURL=commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAG9G,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EACL,0BAA0B,EAC1B,gCAAgC,EAChC,iCAAiC,EACjC,gCAAgC,EAChC,2BAA2B,EAC3B,gCAAgC,EACjC,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,iCAAiC,EAIlC,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,iCAAiC,EACjC,wBAAwB,EACxB,8BAA8B,EAC/B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAC7F,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAA4B,MAAM,gBAAgB,CAAC;AACvG,OAAO,EACL,uBAAuB,EACvB,2BAA2B,EAC3B,kBAAkB,EACnB,MAAM,UAAU,CAAC;AAgBlB,MAAM,CAAC,MAAM,oCAAoC,GAC/C,mEAAmE,CAAC;AAEtE,KAAK,UAAU,IAAI,CAAC,OAAgB,EAAE,IAA8B;IAClE,IAAI,OAAO,CAAC,eAAe,EAAsB,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACpE,OAAO,OAAO,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,KAAK,CAAC,MAA6B,EAAE,KAAc;IAC1D,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,OAAO,CAAmB,KAAS;IAC1C,OAAO;QACL,aAAa,EAAE,iCAAiC;QAChD,EAAE,EAAE,IAAI;QACR,GAAG,CAAC,KAAK,IAAI,EAAO,CAAC;KACtB,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,WAA0C;IAChE,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,SAAS,CAAC,CAAC;AAC3F,CAAC;AAaD,SAAS,iBAAiB,CAAC,OAAO,GAA0B,EAAE;IAC5D,OAAO;QACL,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtF,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAoB,OAAU;IACnD,OAAO,OAAO;SACX,MAAM,CAAC,oBAAoB,EAAE,2BAA2B,CAAC;SACzD,MAAM,CAAC,gBAAgB,EAAE,8CAA8C,CAAC;SACxE,MAAM,CAAC,iBAAiB,EAAE,yBAAyB,CAAC,CAAC;AAC1D,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,MAA0B,EAC1B,SAAiB;IAEjB,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,EAAE,CAAC;IACtD,OAAO,wBAAwB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,kBAAkB,CAAC,OAA0B;IACpD,OAAO,GAAG,8BAA8B,CAAC;QACvC,SAAS,EAAE,OAAO,CAAC,EAAE;QACrB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;KAC7C,CAAC,KAAK,OAAO,CAAC,EAAE,GAAG,CAAC;AACvB,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,IAA8B,EAC9B,OAAO,GAA0B,EAAE;IAEnC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC;IACjF,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;IACnF,OAAO;QACL,QAAQ;QACR,iBAAiB,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,IAAI,QAAQ,CAAC,gBAAgB,IAAI,SAAS;KAClF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,IAA8B,EAAE,SAAkB,EAAE,OAAO,GAA0B,EAAE;IAClH,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7E,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,KAAK,MAAM;QACjD,CAAC,CAAC,gBAAgB;QAClB,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,MAAM,CAAC;IAC1C,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,EAAE;QAC1D,SAAS;QACT,iBAAiB;QACjB,qBAAqB,EAAE,GAAG;QAC1B,kBAAkB,EAAE,sBAAsB,oCAAoC,EAAE;QAChF,MAAM,EAAE,IAAI,CAAC,WAAW;KACzB,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,8BAA8B,CAAC;QAClD,SAAS,EAAE,OAAO,CAAC,EAAE;QACrB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,iBAAiB,EAAE,OAAO,CAAC,SAAS;KACrC,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,eAAe,EAAE;QAClF,UAAU,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS;QAC9D,gBAAgB,EAAE,OAAO,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,iBAAiB,CAAC;QAClH,OAAO,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE;KAC/E,CAAC,CAAC;IACH,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAChC,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,IAA8B,EAC9B,SAAiB,EACjB,OAA6D;IAE7D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAC9E,MAAM,0BAA0B,EAAE,CAAC;IACnC,MAAM,0BAA0B,EAAE,CAAC;IACnC,MAAM,gCAAgC,CAAC;QACrC,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,SAAS;KACtC,CAAC,CAAC;IACH,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC;AAC3C,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,IAA8B,EAAE,SAAkB,EAAE,OAAO,GAA0B,EAAE;IACxH,IAAI,SAAS,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;IAClF,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,MAAM,IAAI,SAAS,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;QACpF,SAAS,GAAG,CAAC,MAAM,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACxE,CAAC;IACD,IAAI,CAAC,CAAC,MAAM,gCAAgC,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;QAC3E,MAAM,kBAAkB,CAAC,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE;YACnD,SAAS,EAAE,SAAS,CAAC,UAAU;YAC/B,iBAAiB,EAAE,SAAS,CAAC,gBAAgB;SAC9C,CAAC,CAAC;IACL,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,OAAgB,EAChB,IAA8B,EAC9B,OAAO,GAAwD,EAAE;IAEjE,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,KAAK,KAAK;QACpC,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,wDAAwD,CAAC,CAAC;IAEnG,MAAM,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC;IACpF,IAAI,mBAAmB;QAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;YACjH,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;YACrG,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACvC,IAAI,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;;gBAC9D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QACnH,CAAC,CAAC,CAAC;IACH,IAAI,mBAAmB;QAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,kCAAkC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;YAClI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;YACvG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACzB,IAAI,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;;gBAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QACxG,CAAC,CAAC,CAAC;IACH,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,+DAA+D,CAAC,CAAC;SAC/G,MAAM,CAAC,KAAK,EAAE,IAA2B,EAAE,OAAO,EAAE,EAAE;QACrD,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAClF,MAAM,mBAAmB,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAC1E,IAAI,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;gBACxD,GAAG,MAAM;gBACT,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,kCAAkC,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,oCAAoC,EAAE,EAAE,CAAC;aACnK,CAAC,CAAC,CAAC;aACC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,oCAAoC,IAAI,CAAC,CAAC;QACpF,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAC3C,MAAM,CAAC,QAAQ,EACf,iBAAiB,CAClB,CAAC,CAAC;YACH,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBACzB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,oCAAoC,IAAI,CAAC,CAAC;YACpF,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IACL,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,WAAW,CAAC,2DAA2D,CAAC,CAAC;SACpH,MAAM,CAAC,KAAK,EAAE,OAA2B,EAAE,IAA2B,EAAE,OAAO,EAAE,EAAE;QAClF,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACxD,MAAM,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3E,IAAI,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;;YACzG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,MAAM,CAAC,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,OAAO,CAAC,EAAE,gCAAgC,CAAC,CAAC;IAC7G,CAAC,CAAC,CAAC;IACL,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,WAAW,CAAC,+BAA+B,CAAC,CAAC;SAC7F,MAAM,CAAC,oBAAoB,EAAE,YAAY,CAAC;SAC1C,MAAM,CAAC,sBAAsB,EAAE,iCAAiC,CAAC;SACjE,kBAAkB,CAAC,IAAI,CAAC;SACxB,MAAM,CAAC,KAAK,EAAE,IAAc,EAAE,IAA2E,EAAE,EAAE;QAC5G,IAAI,IAAI,CAAC,aAAa;YAAE,MAAM,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;QAC3F,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACrE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,0BAA0B,QAAQ,CAAC,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;QACtG,OAAO,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IACL,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,uCAAuC,CAAC,CAAC;SAClG,MAAM,CAAC,oBAAoB,EAAE,YAAY,CAAC;SAC1C,MAAM,CAAC,sBAAsB,EAAE,iCAAiC,CAAC;SACjE,MAAM,CAAC,KAAK,EAAE,SAA6B,EAAE,IAA2E,EAAE,EAAE;QAC3H,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC3H,IAAI,IAAI,CAAC,aAAa;YAAE,MAAM,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;QAC3F,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACrE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,0BAA0B,QAAQ,CAAC,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;QACtG,OAAO,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IACL,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,8CAA8C,CAAC;SAChF,MAAM,CAAC,UAAU,EAAE,yBAAyB,CAAC;SAC7C,MAAM,CAAC,KAAK,EAAE,IAA0B,EAAE,OAAO,EAAE,EAAE;QACpD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QAC5C,IAAI,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;gBACxD,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,+BAA+B,EAAE,KAAK,CAAC,4BAA4B;gBACnE,aAAa,EAAE;oBACb,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK;oBAC/B,UAAU,EAAE,KAAK,CAAC,YAAY,CAAC,SAAS,IAAI,IAAI;oBAChD,UAAU,EAAE,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI;oBACtG,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,MAAM;iBAClC;gBACD,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;oBAC3B,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO;oBAChC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB;oBAC9C,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS;iBACtC,CAAC,CAAC,CAAC,IAAI;gBACR,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACnE,CAAC,CAAC,CAAC;aACC,CAAC;YACJ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,IAAI,gBAAgB,IAAI,CAAC,CAAC;YAChG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC;QACnH,CAAC;IACH,CAAC,CAAC,CAAC;IACL,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,kDAAkD,CAAC;SACnF,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;QAClC,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;QACpF,MAAM,OAAO,GAAG,MAAM,0BAA0B,EAAE,CAAC;QACnD,MAAM,IAAI,GAAG,MAAM,gCAAgC,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAClF,MAAM,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;QACnE,IAAI,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,uBAAuB,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;;YAC3I,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IACL,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,WAAW,CAAC,+CAA+C,CAAC,CAAC;SAC/G,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC;SACpC,MAAM,CAAC,WAAW,EAAE,yBAAyB,CAAC;SAC9C,MAAM,CAAC,0BAA0B,EAAE,kBAAkB,EAAE,IAAI,CAAC;SAC5D,MAAM,CAAC,gCAAgC,EAAE,uBAAuB,EAAE,MAAM,CAAC;SACzE,MAAM,CAAC,2BAA2B,EAAE,mBAAmB,EAAE,MAAM,CAAC;SAChE,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,CAAC;SAChD,MAAM,CAAC,KAAK,EAAE,OAA2B,EAAE,IAA6J,EAAE,OAAO,EAAE,EAAE;QACpN,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,MAAM,2BAA2B,EAAE,CAAC;YACnD,IAAI,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;;gBACjF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC;YACzD,OAAO;QACT,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;QAClH,IAAI,IAAI,CAAC,eAAe,KAAK,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QAC3G,MAAM,SAAS,GAAG,CAAC,MAAM,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACvE,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;QAC/C,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC;QACzD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACjG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,aAAa,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACjH,MAAM,KAAK,GAAG,MAAM,iCAAiC,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACnF,IAAI,SAAS,GAAG,KAAK,CAAC,KAAK,KAAK,WAAW,IAAI,KAAK,CAAC,sBAAsB,KAAK,IAAI;YAClF,CAAC,CAAC,KAAK,CAAC,SAAS;YACjB,CAAC,CAAC,SAAS,CAAC;QACd,GAAG,CAAC;YACF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7B,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,IAAI,SAAS,GAAG,aAAa,EAAE,CAAC;gBACtE,SAAS,GAAG,CAAC,MAAM,kBAAkB,CAAC,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBACtG,MAAM,KAAK,GAAG;oBACZ,KAAK,EAAE,MAAM;oBACb,KAAK,EAAE,uBAAuB;oBAC9B,EAAE,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;oBACrC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE;oBAC7B,SAAS;iBACV,CAAC;gBACF,IAAI,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;oBAAE,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;;oBAC7D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,EAAE,+BAA+B,SAAS,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;YAChG,CAAC;iBAAM,CAAC;gBACN,MAAM,KAAK,GAAG;oBACZ,KAAK,EAAE,MAAM;oBACb,KAAK,EAAE,qBAAqB;oBAC5B,EAAE,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;oBACrC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE;oBAC7B,SAAS;oBACT,SAAS,EAAE,SAAS,GAAG,aAAa;iBACrC,CAAC;gBACF,IAAI,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;oBAAE,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;;oBAC7D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,EAAE,6BAA6B,SAAS,CAAC,OAAO,CAAC,KAAK,qBAAqB,CAAC,CAAC;YAC/G,CAAC;YACD,IAAI,IAAI,CAAC,IAAI;gBAAE,MAAM;YACrB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;QAChE,CAAC,QAAQ,IAAI,EAAE;IACjB,CAAC,CAAC,CAAC;IACL,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,gDAAgD,CAAC,CAAC;SAClG,MAAM,CAAC,kBAAkB,EAAE,sBAAsB,CAAC;SAClD,MAAM,CAAC,iBAAiB,EAAE,eAAe,CAAC;SAC1C,MAAM,CAAC,KAAK,EAAE,IAAmE,EAAE,OAAO,EAAE,EAAE;QAC7F,IAAI,IAAI,CAAC,OAAO;YAAE,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;;YAAM,cAAc,CAAC,IAAI,CAAC,CAAC;QAChF,MAAM,OAAO,GAAG,MAAM,YAAY,EAAE,CAAC;QACrC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,cAAc,EAAE,EAAE,CAAC,CAAC;QAC9G,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,cAAc,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC/E,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACpD,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,WAAW,KAAK,GAAG,CAAC,wBAAwB,CAAC,CAAC;YAC9F,OAAO;gBACL,SAAS,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE,KAAK,IAAI,CAAC,KAAK,IAAI,EAAE,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBACrH,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxD,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,iBAAiB,KAAK,GAAG,CAAC,EAAE;gBACtF,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5C,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9D,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxD,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClD,OAAO,EAAE,IAAI,CAAC,OAAO,KAAK,KAAK;aAChC,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QACrI,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YACjE,GAAG,UAAU;YACb,KAAK,EAAE,8BAA8B,CAAC;gBACpC,SAAS,EAAE,UAAU,CAAC,SAAS;gBAC/B,KAAK,EAAE,UAAU,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK;gBACjD,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK;gBAC7B,iBAAiB,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS;aAC9C,CAAC;SACH,CAAC,CAAC,CAAC;QACJ,MAAM,QAAQ,GAAG,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;QAC7C,IAAI,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE;gBACjB,GAAG,QAAQ;gBACX,EAAE,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC;gBACzB,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ;gBAC/C,YAAY,EAAE,cAAc,EAAE;gBAC9B,QAAQ,EAAE,QAAQ,CAAC,MAAM;aAC1B,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;YACtD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,8BAA8B,CAAC,CAAC;YACzF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,MAAM,WAAW,MAAM,CAAC,OAAO,OAAO,MAAM,CAAC,OAAO,SAAS,QAAQ,OAAO,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;YACpI,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;gBAC/B,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,KAAK,iCAAiC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE;sBAC5D,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CACtD,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IACL,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;SACjC,WAAW,CAAC,0DAA0D,CAAC,CAAC;IAC3E,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;SAC5C,WAAW,CAAC,yDAAyD,CAAC,CAAC;IAC1E,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,gCAAgC,CAAC,CAAC;SACxF,MAAM,CAAC,KAAK,EAAE,IAA2B,EAAE,OAAO,EAAE,EAAE;QACrD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC;QACjF,IAAI,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YACpC,OAAO;QACT,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAClD,OAAO;QACT,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,GAAG,kBAAkB,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,gBAAgB,EAAE;kBAC7E,iBAAiB,OAAO,CAAC,qBAAqB,IAAI,CAAC,EAAE;kBACrD,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,WAAW,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CACvF,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IACL,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,+BAA+B,CAAC;SAClE,WAAW,CAAC,8CAA8C,CAAC,CAAC;SAC5D,MAAM,CAAC,KAAK,EAAE,OAAe,EAAE,IAA2B,EAAE,OAAO,EAAE,EAAE;QACtE,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;QACvD,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAChE,IAAI,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YACpC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACvD,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YAC5C,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,MAAM,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC,MAAM,EAAE;kBAC7C,GAAG,UAAU,CAAC,wBAAwB,CAAC,CAAC,CAAC,WAAW,UAAU,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;kBAChG,GAAG,UAAU,CAAC,yBAAyB,CAAC,CAAC,CAAC,YAAY,UAAU,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;kBACnG,GAAG,UAAU,CAAC,2BAA2B,CAAC,CAAC,CAAC,UAAU,UAAU,CAAC,2BAA2B,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;kBACrG,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CACjH,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IACL,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,mBAAmB,CAAC;SACtD,WAAW,CAAC,gDAAgD,CAAC,CAAC;SAC9D,MAAM,CAAC,KAAK,EAAE,OAAe,EAAE,IAA2B,EAAE,OAAO,EAAE,EAAE;QACtE,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;QACvD,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC7D,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC;QACxC,IAAI,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,GAAG,kBAAkB,CAAC,QAAQ,CAAC,KAAK,MAAM,CAAC,OAAO,EAAE;kBAClD,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;kBACrD,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CACxF,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,EAAE;YAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IACL,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC;SAClD,WAAW,CAAC,wDAAwD,CAAC,CAAC;IACzE,cAAc,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,uCAAuC,CAAC,CAAC;SAClG,MAAM,CAAC,KAAK,EAAE,IAA2B,EAAE,OAAO,EAAE,EAAE;QACrD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,oBAAoB,EAAE,CAAC;QACnD,IAAI,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YACpC,OAAO;QACT,CAAC;QACD,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAClD,OAAO;QACT,CAAC;QACD,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,EAAE,CAAC;QACtD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QAC9E,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YAC5C,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YACtD,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC;YACjF,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,GAAG,UAAU,CAAC,EAAE,KAAK,WAAW,UAAU,UAAU,CAAC,QAAQ,EAAE;kBAC7D,KAAK,UAAU,CAAC,WAAW,MAAM,UAAU,CAAC,MAAM,EAAE;kBACpD,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,CACjD,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IACL,cAAc,CAAC,gBAAgB,CAAC,OAAO,CAAC,0BAA0B,CAAC;SAChE,WAAW,CAAC,iDAAiD,CAAC,CAAC;SAC/D,MAAM,CAAC,WAAW,EAAE,4CAA4C,CAAC;SACjE,MAAM,CAAC,KAAK,EACX,OAAe,EACf,OAAe,EACf,IAAmD,EACnD,OAAO,EACP,EAAE;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;QACvD,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC;YAC9C,SAAS,EAAE,QAAQ,CAAC,EAAE;YACtB,WAAW,EAAE,OAAO;YACpB,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;SACjC,CAAC,CAAC;QACH,IAAI,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;;YAC9D,IAAI,CAAC,MAAM,CAAC,KAAK,CACpB,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,KAAK,MAAM,CAAC,UAAU,CAAC,WAAW,GAAG;kBACpE,OAAO,kBAAkB,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,IAAI,CAC5F,CAAC;IACJ,CAAC,CAAC,CAAC;IACL,cAAc,CAAC,gBAAgB,CAAC,OAAO,CAAC,qBAAqB,CAAC;SAC3D,WAAW,CAAC,2CAA2C,CAAC,CAAC;SACzD,MAAM,CAAC,KAAK,EAAE,UAAkB,EAAE,IAA2B,EAAE,OAAO,EAAE,EAAE;QACzE,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;QACvD,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,oBAAoB,EAAE,CAAC;QAC3D,MAAM,MAAM,GAAG,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;QACjF,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,iBAAiB,CACzB,mBAAmB,UAAU,EAAE,EAC/B,4BAA4B,EAC5B,GAAG,CACJ,CAAC;QACJ,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;QAC9D,IAAI,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;;YAC9D,IAAI,CAAC,MAAM,CAAC,KAAK,CACpB,OAAO,kBAAkB,CAAC,QAAQ,CAAC,MAAM,MAAM,CAAC,QAAQ,QAAQ,MAAM,CAAC,YAAY,IAAI,CACxF,CAAC;IACJ,CAAC,CAAC,CAAC;IACL,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,WAAW,CAAC,mCAAmC,CAAC,CAAC;SAChG,MAAM,CAAC,uBAAuB,EAAE,cAAc,EAAE,MAAM,CAAC;SACvD,MAAM,CAAC,uBAAuB,EAAE,4BAA4B,CAAC;SAC7D,MAAM,CAAC,mBAAmB,EAAE,0BAA0B,CAAC;SACvD,MAAM,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,CAAC;SACrD,MAAM,CAAC,0BAA0B,EAAE,gCAAgC,CAAC;SACpE,MAAM,CAAC,wBAAwB,EAAE,mBAAmB,CAAC;SACrD,MAAM,CAAC,oBAAoB,EAAE,kBAAkB,CAAC;SAChD,MAAM,CAAC,sBAAsB,EAAE,gCAAgC,CAAC;SAChE,MAAM,CAAC,aAAa,EAAE,4BAA4B,CAAC;SACnD,MAAM,CAAC,KAAK,EAAE,MAA0B,EAAE,IAA8O,EAAE,OAAO,EAAE,EAAE;QACpS,IAAI,MAAM,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QACzH,MAAM,cAAc,GAAG;YACrB,GAAG,IAAI,CAAC,MAAM;YACd,QAAQ,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;YACzF,QAAQ,EAAE;gBACR,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ;gBACvB,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC7G;SACF,CAAC;QACF,MAAM,eAAe,GAAG,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QACvG,MAAM,MAAM,GAAG,MAAM,KAAK,QAAQ;YAChC,CAAC,CAAC,MAAM,oBAAoB,CAAC,cAAc,EAAE,eAAe,CAAC;YAC7D,CAAC,CAAC,MAAM,qBAAqB,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;QACjE,IAAI,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;gBACxD,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,iBAAiB,EAAE,MAAM,CAAC,gBAAgB;gBAC1C,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,UAAU,EAAE,MAAM,CAAC,SAAS;gBAC5B,SAAS,EAAE,MAAM,CAAC,QAAQ,IAAI,IAAI;gBAClC,SAAS,EAAE,MAAM,CAAC,SAAS;aAC5B,CAAC,CAAC,CAAC;;YACC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,wBAAwB,CAAC,CAAC;IAC9F,CAAC,CAAC,CAAC;IACL,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { CodexModuleOptions, ResolvedCodexConfig } from "./types.js";
|
|
3
|
+
export declare const DEFAULT_CODEX_SERVER_URL = "https://mail.tokensource.top/api";
|
|
4
|
+
export declare const DEFAULT_TENANT_ID = "numa-realm";
|
|
5
|
+
export declare const DEFAULT_TENANT_HEADER_NAME = "X-Tenant-Id";
|
|
6
|
+
export declare const DEFAULT_OIDC_DISCOVERY_URL = "https://auth.tokensource.top/realms/numa-realm/.well-known/openid-configuration";
|
|
7
|
+
export declare const DEFAULT_OIDC_CLIENT_ID = "mcp-client";
|
|
8
|
+
export declare const DEFAULT_OIDC_SCOPE = "openid profile email offline_access";
|
|
9
|
+
export declare const DEFAULT_REGISTRY_URL = "https://registry.npmjs.org/";
|
|
10
|
+
declare const StoredConfigSchema: z.ZodObject<{
|
|
11
|
+
schemaVersion: z.ZodDefault<z.ZodLiteral<1>>;
|
|
12
|
+
profileUrl: z.ZodOptional<z.ZodString>;
|
|
13
|
+
serverUrl: z.ZodOptional<z.ZodString>;
|
|
14
|
+
tenantId: z.ZodOptional<z.ZodString>;
|
|
15
|
+
tenantHeaderName: z.ZodOptional<z.ZodString>;
|
|
16
|
+
allowInsecureHttp: z.ZodOptional<z.ZodBoolean>;
|
|
17
|
+
requestTimeoutMs: z.ZodOptional<z.ZodNumber>;
|
|
18
|
+
registryUrl: z.ZodOptional<z.ZodString>;
|
|
19
|
+
oidc: z.ZodOptional<z.ZodObject<{
|
|
20
|
+
discoveryUrl: z.ZodOptional<z.ZodString>;
|
|
21
|
+
issuerUrl: z.ZodOptional<z.ZodString>;
|
|
22
|
+
clientId: z.ZodOptional<z.ZodString>;
|
|
23
|
+
scope: z.ZodOptional<z.ZodString>;
|
|
24
|
+
redirectHost: z.ZodOptional<z.ZodString>;
|
|
25
|
+
redirectPort: z.ZodOptional<z.ZodNumber>;
|
|
26
|
+
redirectPath: z.ZodOptional<z.ZodString>;
|
|
27
|
+
openBrowser: z.ZodOptional<z.ZodBoolean>;
|
|
28
|
+
}, z.core.$strip>>;
|
|
29
|
+
}, z.core.$strip>;
|
|
30
|
+
export type StoredCodexConfig = z.infer<typeof StoredConfigSchema>;
|
|
31
|
+
export declare function defaultCodexConfigDirectory(env?: NodeJS.ProcessEnv, platform?: NodeJS.Platform, home?: string): string;
|
|
32
|
+
export declare function codexConfigPath(configDirectory: string): string;
|
|
33
|
+
export declare function loadStoredCodexConfig(configDirectory: string, settingsFile?: string): Promise<StoredCodexConfig>;
|
|
34
|
+
export declare function saveStoredCodexConfig(configDirectory: string, value: StoredCodexConfig, settingsFile?: string): Promise<StoredCodexConfig>;
|
|
35
|
+
export declare function resolveCodexConfig(options?: CodexModuleOptions): Promise<ResolvedCodexConfig>;
|
|
36
|
+
export {};
|