@kaitranntt/ccs 7.79.1-dev.5 → 7.79.1-dev.7
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 +29 -11
- package/dist/bin/ccsxp-runtime.d.ts.map +1 -1
- package/dist/bin/ccsxp-runtime.js +8 -0
- package/dist/bin/ccsxp-runtime.js.map +1 -1
- package/dist/bin/codex-runtime-router.d.ts +24 -0
- package/dist/bin/codex-runtime-router.d.ts.map +1 -0
- package/dist/bin/codex-runtime-router.js +91 -0
- package/dist/bin/codex-runtime-router.js.map +1 -0
- package/dist/bin/codex-runtime.d.ts +1 -0
- package/dist/bin/codex-runtime.js +7 -2
- package/dist/bin/codex-runtime.js.map +1 -1
- package/dist/codex-auth/codex-account-identity.d.ts +8 -0
- package/dist/codex-auth/codex-account-identity.d.ts.map +1 -0
- package/dist/codex-auth/codex-account-identity.js +53 -0
- package/dist/codex-auth/codex-account-identity.js.map +1 -0
- package/dist/codex-auth/codex-auth-dashboard-service.d.ts +46 -0
- package/dist/codex-auth/codex-auth-dashboard-service.d.ts.map +1 -0
- package/dist/codex-auth/codex-auth-dashboard-service.js +228 -0
- package/dist/codex-auth/codex-auth-dashboard-service.js.map +1 -0
- package/dist/codex-auth/codex-auth-help.d.ts +7 -0
- package/dist/codex-auth/codex-auth-help.d.ts.map +1 -0
- package/dist/codex-auth/codex-auth-help.js +87 -0
- package/dist/codex-auth/codex-auth-help.js.map +1 -0
- package/dist/codex-auth/codex-auth-router.d.ts +16 -0
- package/dist/codex-auth/codex-auth-router.d.ts.map +1 -0
- package/dist/codex-auth/codex-auth-router.js +77 -0
- package/dist/codex-auth/codex-auth-router.js.map +1 -0
- package/dist/codex-auth/codex-config-symlink.d.ts +14 -0
- package/dist/codex-auth/codex-config-symlink.d.ts.map +1 -0
- package/dist/codex-auth/codex-config-symlink.js +128 -0
- package/dist/codex-auth/codex-config-symlink.js.map +1 -0
- package/dist/codex-auth/codex-profile-paths.d.ts +5 -0
- package/dist/codex-auth/codex-profile-paths.d.ts.map +1 -0
- package/dist/codex-auth/codex-profile-paths.js +58 -0
- package/dist/codex-auth/codex-profile-paths.js.map +1 -0
- package/dist/codex-auth/codex-profile-registry.d.ts +34 -0
- package/dist/codex-auth/codex-profile-registry.d.ts.map +1 -0
- package/dist/codex-auth/codex-profile-registry.js +360 -0
- package/dist/codex-auth/codex-profile-registry.js.map +1 -0
- package/dist/codex-auth/commands/create-command.d.ts +9 -0
- package/dist/codex-auth/commands/create-command.d.ts.map +1 -0
- package/dist/codex-auth/commands/create-command.js +189 -0
- package/dist/codex-auth/commands/create-command.js.map +1 -0
- package/dist/codex-auth/commands/import-default-command.d.ts +18 -0
- package/dist/codex-auth/commands/import-default-command.d.ts.map +1 -0
- package/dist/codex-auth/commands/import-default-command.js +385 -0
- package/dist/codex-auth/commands/import-default-command.js.map +1 -0
- package/dist/codex-auth/commands/index.d.ts +13 -0
- package/dist/codex-auth/commands/index.d.ts.map +1 -0
- package/dist/codex-auth/commands/index.js +27 -0
- package/dist/codex-auth/commands/index.js.map +1 -0
- package/dist/codex-auth/commands/login-command.d.ts +9 -0
- package/dist/codex-auth/commands/login-command.d.ts.map +1 -0
- package/dist/codex-auth/commands/login-command.js +152 -0
- package/dist/codex-auth/commands/login-command.js.map +1 -0
- package/dist/codex-auth/commands/remove-command.d.ts +10 -0
- package/dist/codex-auth/commands/remove-command.d.ts.map +1 -0
- package/dist/codex-auth/commands/remove-command.js +230 -0
- package/dist/codex-auth/commands/remove-command.js.map +1 -0
- package/dist/codex-auth/commands/show-command.d.ts +10 -0
- package/dist/codex-auth/commands/show-command.d.ts.map +1 -0
- package/dist/codex-auth/commands/show-command.js +127 -0
- package/dist/codex-auth/commands/show-command.js.map +1 -0
- package/dist/codex-auth/commands/show-detail-view.d.ts +7 -0
- package/dist/codex-auth/commands/show-detail-view.d.ts.map +1 -0
- package/dist/codex-auth/commands/show-detail-view.js +134 -0
- package/dist/codex-auth/commands/show-detail-view.js.map +1 -0
- package/dist/codex-auth/commands/switch-command.d.ts +7 -0
- package/dist/codex-auth/commands/switch-command.d.ts.map +1 -0
- package/dist/codex-auth/commands/switch-command.js +48 -0
- package/dist/codex-auth/commands/switch-command.js.map +1 -0
- package/dist/codex-auth/commands/types.d.ts +45 -0
- package/dist/codex-auth/commands/types.d.ts.map +1 -0
- package/dist/codex-auth/commands/types.js +85 -0
- package/dist/codex-auth/commands/types.js.map +1 -0
- package/dist/codex-auth/commands/use-command.d.ts +16 -0
- package/dist/codex-auth/commands/use-command.d.ts.map +1 -0
- package/dist/codex-auth/commands/use-command.js +86 -0
- package/dist/codex-auth/commands/use-command.js.map +1 -0
- package/dist/codex-auth/decode-id-token.d.ts +12 -0
- package/dist/codex-auth/decode-id-token.d.ts.map +1 -0
- package/dist/codex-auth/decode-id-token.js +83 -0
- package/dist/codex-auth/decode-id-token.js.map +1 -0
- package/dist/codex-auth/index.d.ts +8 -0
- package/dist/codex-auth/index.d.ts.map +1 -0
- package/dist/codex-auth/index.js +19 -0
- package/dist/codex-auth/index.js.map +1 -0
- package/dist/codex-auth/resolve-active-profile.d.ts +13 -0
- package/dist/codex-auth/resolve-active-profile.d.ts.map +1 -0
- package/dist/codex-auth/resolve-active-profile.js +161 -0
- package/dist/codex-auth/resolve-active-profile.js.map +1 -0
- package/dist/codex-auth/shell-detect.d.ts +19 -0
- package/dist/codex-auth/shell-detect.d.ts.map +1 -0
- package/dist/codex-auth/shell-detect.js +129 -0
- package/dist/codex-auth/shell-detect.js.map +1 -0
- package/dist/codex-auth/types.d.ts +26 -0
- package/dist/codex-auth/types.d.ts.map +1 -0
- package/dist/codex-auth/types.js +34 -0
- package/dist/codex-auth/types.js.map +1 -0
- package/dist/dispatcher/pre-dispatch.d.ts.map +1 -1
- package/dist/dispatcher/pre-dispatch.js +7 -0
- package/dist/dispatcher/pre-dispatch.js.map +1 -1
- package/dist/ui/assets/Trans-J6qQqjkU.js +1 -0
- package/dist/ui/assets/{accounts-C-sOjvWS.js → accounts-B9Y9uOFl.js} +1 -1
- package/dist/ui/assets/{alert-dialog-BrOo6Lh3.js → alert-dialog-B7gsksZn.js} +1 -1
- package/dist/ui/assets/{api-CXdC3ABc.js → api-Cz8U6P7R.js} +1 -1
- package/dist/ui/assets/{auth-section-XJ5PohAT.js → auth-section-C8dzvYje.js} +1 -1
- package/dist/ui/assets/{backups-section-DjMi9NN5.js → backups-section-D0dn59k8.js} +1 -1
- package/dist/ui/assets/{channels-dD6o7KFj.js → channels-BEmwDrRW.js} +1 -1
- package/dist/ui/assets/{checkbox-CVS69doq.js → checkbox-DD0s2D_O.js} +1 -1
- package/dist/ui/assets/{claude-extension-D47wkgfq.js → claude-extension-DHVBsw6b.js} +1 -1
- package/dist/ui/assets/{cliproxy-CXgzAe6X.js → cliproxy-BMlbpAIO.js} +2 -2
- package/dist/ui/assets/{cliproxy-ai-providers-POOrpQVc.js → cliproxy-ai-providers-B440rPlH.js} +2 -2
- package/dist/ui/assets/{cliproxy-control-panel-BWa_KiNM.js → cliproxy-control-panel-Bo-Y41B_.js} +1 -1
- package/dist/ui/assets/codex-DPe04ol4.js +30 -0
- package/dist/ui/assets/{confirm-dialog-BuxHs897.js → confirm-dialog-MQNmqmha.js} +1 -1
- package/dist/ui/assets/{copilot-BQ4Cltbo.js → copilot-COZj29YU.js} +1 -1
- package/dist/ui/assets/{cursor-BVUNUVux.js → cursor-D0occhsH.js} +1 -1
- package/dist/ui/assets/{droid-Bw34FF6c.js → droid-CSaYFApd.js} +1 -1
- package/dist/ui/assets/{globalenv-section-B4UDGHiP.js → globalenv-section-BwuNrdbO.js} +1 -1
- package/dist/ui/assets/{health-30TwUdp_.js → health-DjNOO9K-.js} +1 -1
- package/dist/ui/assets/{index-BUBCzEHD.js → index-Bm_0r3qk.js} +1 -1
- package/dist/ui/assets/{index-BxIFAuoV.js → index-Bnzie_zG.js} +1 -1
- package/dist/ui/assets/{index-C6j8gpEb.js → index-CSlgRg0s.js} +27 -27
- package/dist/ui/assets/index-CjM3Ehb8.js +1 -0
- package/dist/ui/assets/{index-BjQ5PWH7.js → index-CmOBelFi.js} +1 -1
- package/dist/ui/assets/{index-DtiygQmg.js → index-D9HfyuQr.js} +1 -1
- package/dist/ui/assets/index-G3mgTfgR.css +1 -0
- package/dist/ui/assets/{index-ByGCSVsI.js → index-i2MPNni3.js} +1 -1
- package/dist/ui/assets/{logs-CDD_WQvt.js → logs-7bWvuc1l.js} +1 -1
- package/dist/ui/assets/{masked-input-DpM1vKP_.js → masked-input-D_amxi96.js} +1 -1
- package/dist/ui/assets/proxy-status-widget-BkC-wCtI.js +1 -0
- package/dist/ui/assets/{raw-json-settings-editor-panel-D-zQkcvr.js → raw-json-settings-editor-panel-CVP5Bjfm.js} +1 -1
- package/dist/ui/assets/{searchable-select-B8Kp0x8p.js → searchable-select-e5sY7o6g.js} +1 -1
- package/dist/ui/assets/{separator-DlXQBF83.js → separator-BR5bmtI7.js} +1 -1
- package/dist/ui/assets/{shared-D_h3QKy6.js → shared-CsqW2cFN.js} +1 -1
- package/dist/ui/assets/{table-Dyt0FuBK.js → table-DPheAd4c.js} +1 -1
- package/dist/ui/assets/{updates-DfIV0IC0.js → updates-D07RjKLJ.js} +1 -1
- package/dist/ui/assets/{use-accounts-Dy2ogHT-.js → use-accounts-CWVR2NXQ.js} +1 -1
- package/dist/ui/index.html +2 -2
- package/dist/web-server/routes/codex-routes.d.ts.map +1 -1
- package/dist/web-server/routes/codex-routes.js +14 -0
- package/dist/web-server/routes/codex-routes.js.map +1 -1
- package/package.json +1 -1
- package/scripts/run-test-bucket.js +1 -0
- package/dist/ui/assets/codex-CYyPdHS4.js +0 -30
- package/dist/ui/assets/index-nSsKQx8t.css +0 -1
- package/dist/ui/assets/index-s94_IKNx.js +0 -1
- package/dist/ui/assets/proxy-status-widget-7iMiOpQe.js +0 -1
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.CodexProfileRegistry = exports.validateCodexProfileRegistryData = exports.CodexProfileRegistryReadError = void 0;
|
|
27
|
+
const fs = __importStar(require("fs"));
|
|
28
|
+
const path = __importStar(require("path"));
|
|
29
|
+
const yaml = __importStar(require("js-yaml"));
|
|
30
|
+
const lockfile = __importStar(require("proper-lockfile"));
|
|
31
|
+
const logging_1 = require("../services/logging");
|
|
32
|
+
const codex_profile_paths_1 = require("./codex-profile-paths");
|
|
33
|
+
const config_manager_1 = require("../utils/config-manager");
|
|
34
|
+
const types_1 = require("./types");
|
|
35
|
+
const logger = (0, logging_1.createLogger)('codex-auth:registry');
|
|
36
|
+
const REGISTRY_LOCK_STALE_MS = 10000;
|
|
37
|
+
const REGISTRY_LOCK_RETRIES = 40;
|
|
38
|
+
const REGISTRY_LOCK_RETRY_DELAY_MS = 50;
|
|
39
|
+
function emptyRegistry() {
|
|
40
|
+
return { version: types_1.CODEX_PROFILE_SCHEMA_VERSION, default: null, profiles: {} };
|
|
41
|
+
}
|
|
42
|
+
class CodexProfileRegistryReadError extends Error {
|
|
43
|
+
constructor(message) {
|
|
44
|
+
super(message);
|
|
45
|
+
this.name = 'CodexProfileRegistryReadError';
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
exports.CodexProfileRegistryReadError = CodexProfileRegistryReadError;
|
|
49
|
+
function validateCodexProfileRegistryData(parsed) {
|
|
50
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
51
|
+
throw new Error('registry YAML root is not an object');
|
|
52
|
+
}
|
|
53
|
+
const data = parsed;
|
|
54
|
+
if (!data.profiles || typeof data.profiles !== 'object' || Array.isArray(data.profiles)) {
|
|
55
|
+
throw new Error('registry YAML is missing an object profiles map');
|
|
56
|
+
}
|
|
57
|
+
if (data.default !== undefined && data.default !== null && typeof data.default !== 'string') {
|
|
58
|
+
throw new Error('registry YAML default must be a string or null');
|
|
59
|
+
}
|
|
60
|
+
if (typeof data.default === 'string') {
|
|
61
|
+
assertValidProfileName(data.default);
|
|
62
|
+
}
|
|
63
|
+
const profiles = {};
|
|
64
|
+
for (const [name, profile] of Object.entries(data.profiles)) {
|
|
65
|
+
assertValidProfileName(name);
|
|
66
|
+
profiles[name] = validateProfileMetadata(name, profile);
|
|
67
|
+
}
|
|
68
|
+
if (typeof data.default === 'string' &&
|
|
69
|
+
!Object.prototype.hasOwnProperty.call(profiles, data.default)) {
|
|
70
|
+
throw new Error('registry YAML default profile is missing from profiles map');
|
|
71
|
+
}
|
|
72
|
+
return {
|
|
73
|
+
version: typeof data.version === 'string' ? data.version : types_1.CODEX_PROFILE_SCHEMA_VERSION,
|
|
74
|
+
default: data.default ?? null,
|
|
75
|
+
profiles,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
exports.validateCodexProfileRegistryData = validateCodexProfileRegistryData;
|
|
79
|
+
function assertValidProfileName(name) {
|
|
80
|
+
const nameError = (0, types_1.getCodexProfileNameError)(name);
|
|
81
|
+
if (nameError) {
|
|
82
|
+
throw new Error(`registry YAML contains invalid profile name "${name}": ${nameError}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
function validateProfileMetadata(name, profile) {
|
|
86
|
+
if (!profile || typeof profile !== 'object' || Array.isArray(profile)) {
|
|
87
|
+
throw new Error(`registry YAML profile "${name}" must be an object`);
|
|
88
|
+
}
|
|
89
|
+
const meta = profile;
|
|
90
|
+
if (meta.type !== 'codex') {
|
|
91
|
+
throw new Error(`registry YAML profile "${name}" must have type "codex"`);
|
|
92
|
+
}
|
|
93
|
+
if (typeof meta.created !== 'string') {
|
|
94
|
+
throw new Error(`registry YAML profile "${name}" must have a string created timestamp`);
|
|
95
|
+
}
|
|
96
|
+
if (meta.last_used !== null && typeof meta.last_used !== 'string') {
|
|
97
|
+
throw new Error(`registry YAML profile "${name}" must have a string or null last_used timestamp`);
|
|
98
|
+
}
|
|
99
|
+
if (meta.email !== undefined && typeof meta.email !== 'string') {
|
|
100
|
+
throw new Error(`registry YAML profile "${name}" email must be a string`);
|
|
101
|
+
}
|
|
102
|
+
if (meta.plan_type !== undefined &&
|
|
103
|
+
meta.plan_type !== null &&
|
|
104
|
+
typeof meta.plan_type !== 'string') {
|
|
105
|
+
throw new Error(`registry YAML profile "${name}" plan_type must be a string or null`);
|
|
106
|
+
}
|
|
107
|
+
if (meta.account_id !== undefined && typeof meta.account_id !== 'string') {
|
|
108
|
+
throw new Error(`registry YAML profile "${name}" account_id must be a string`);
|
|
109
|
+
}
|
|
110
|
+
return meta;
|
|
111
|
+
}
|
|
112
|
+
function registryDisplayPath(registryPath) {
|
|
113
|
+
const [source] = (0, config_manager_1.getCcsDirSource)();
|
|
114
|
+
const defaultRegistryPath = path.resolve((0, codex_profile_paths_1.getCodexAuthRegistryPath)());
|
|
115
|
+
if (path.resolve(registryPath) !== defaultRegistryPath) {
|
|
116
|
+
return path.basename(registryPath);
|
|
117
|
+
}
|
|
118
|
+
if (source === 'default') {
|
|
119
|
+
return process.platform === 'win32'
|
|
120
|
+
? '%USERPROFILE%\\.ccs\\codex-profiles.yaml'
|
|
121
|
+
: '~/.ccs/codex-profiles.yaml';
|
|
122
|
+
}
|
|
123
|
+
if (source === 'CCS_HOME' || source === 'scoped:CCS_HOME') {
|
|
124
|
+
return '$CCS_HOME/.ccs/codex-profiles.yaml';
|
|
125
|
+
}
|
|
126
|
+
if (source === 'CCS_DIR' || source === 'scoped:CCS_DIR') {
|
|
127
|
+
return '$CCS_DIR/codex-profiles.yaml';
|
|
128
|
+
}
|
|
129
|
+
return 'codex-profiles.yaml';
|
|
130
|
+
}
|
|
131
|
+
function safeRegistryReadMessage(err) {
|
|
132
|
+
if (err?.name === 'YAMLException') {
|
|
133
|
+
return 'registry YAML could not be parsed';
|
|
134
|
+
}
|
|
135
|
+
return err instanceof Error ? err.message : String(err);
|
|
136
|
+
}
|
|
137
|
+
function sleepSync(ms) {
|
|
138
|
+
try {
|
|
139
|
+
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
const end = Date.now() + ms;
|
|
143
|
+
while (Date.now() < end) {
|
|
144
|
+
// Fall back for runtimes without Atomics.wait.
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
function isLockContentionError(err) {
|
|
149
|
+
return err?.code === 'ELOCKED';
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Registry for codex auth profiles stored at ~/.ccs/codex-profiles.yaml.
|
|
153
|
+
*
|
|
154
|
+
* Writes are guarded by a registry-directory lock around the read-modify-write
|
|
155
|
+
* cycle, then persisted atomically with tmp file + POSIX rename.
|
|
156
|
+
*
|
|
157
|
+
* Constructor accepts an optional registryPath for test isolation.
|
|
158
|
+
*/
|
|
159
|
+
class CodexProfileRegistry {
|
|
160
|
+
constructor(registryPath) {
|
|
161
|
+
this.registryPath = registryPath ?? (0, codex_profile_paths_1.getCodexAuthRegistryPath)();
|
|
162
|
+
this._cleanOrphanTmpFiles();
|
|
163
|
+
}
|
|
164
|
+
// ── private read/write ──────────────────────────────────────────────────
|
|
165
|
+
_read() {
|
|
166
|
+
if (!fs.existsSync(this.registryPath)) {
|
|
167
|
+
return emptyRegistry();
|
|
168
|
+
}
|
|
169
|
+
try {
|
|
170
|
+
const raw = fs.readFileSync(this.registryPath, 'utf8');
|
|
171
|
+
return validateCodexProfileRegistryData(yaml.load(raw));
|
|
172
|
+
}
|
|
173
|
+
catch (err) {
|
|
174
|
+
const msg = safeRegistryReadMessage(err);
|
|
175
|
+
const displayPath = registryDisplayPath(this.registryPath);
|
|
176
|
+
logger.warn('codex-auth.registry.read-failed', `Registry at ${displayPath} could not be read safely; refusing empty-state rewrite: ${msg}`);
|
|
177
|
+
throw new CodexProfileRegistryReadError(`Codex profile registry at ${displayPath} could not be read safely: ${msg}. Refusing to rewrite it.`);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
_write(data) {
|
|
181
|
+
const dir = path.dirname(this.registryPath);
|
|
182
|
+
if (!fs.existsSync(dir)) {
|
|
183
|
+
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
184
|
+
}
|
|
185
|
+
// Unique tmp suffix avoids collisions on concurrent writes and orphan leaks
|
|
186
|
+
const tmpPath = `${this.registryPath}.tmp.${process.pid}.${Math.random().toString(36).slice(2)}`;
|
|
187
|
+
try {
|
|
188
|
+
fs.writeFileSync(tmpPath, yaml.dump(data, { indent: 2, lineWidth: -1 }), {
|
|
189
|
+
mode: 0o600,
|
|
190
|
+
});
|
|
191
|
+
fs.renameSync(tmpPath, this.registryPath);
|
|
192
|
+
}
|
|
193
|
+
catch (err) {
|
|
194
|
+
if (fs.existsSync(tmpPath)) {
|
|
195
|
+
try {
|
|
196
|
+
fs.unlinkSync(tmpPath);
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
// best-effort cleanup
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
203
|
+
throw new Error(`Failed to write codex profile registry: ${msg}`);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
_withRegistryWriteLock(callback) {
|
|
207
|
+
const dir = path.dirname(this.registryPath);
|
|
208
|
+
if (!fs.existsSync(dir)) {
|
|
209
|
+
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
210
|
+
}
|
|
211
|
+
let release;
|
|
212
|
+
let lastLockError;
|
|
213
|
+
for (let attempt = 0; attempt <= REGISTRY_LOCK_RETRIES; attempt++) {
|
|
214
|
+
try {
|
|
215
|
+
release = lockfile.lockSync(dir, { stale: REGISTRY_LOCK_STALE_MS });
|
|
216
|
+
break;
|
|
217
|
+
}
|
|
218
|
+
catch (err) {
|
|
219
|
+
if (!isLockContentionError(err) || attempt === REGISTRY_LOCK_RETRIES) {
|
|
220
|
+
throw err;
|
|
221
|
+
}
|
|
222
|
+
lastLockError = err;
|
|
223
|
+
sleepSync(REGISTRY_LOCK_RETRY_DELAY_MS);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
if (!release) {
|
|
227
|
+
const msg = lastLockError instanceof Error ? lastLockError.message : 'unknown lock error';
|
|
228
|
+
throw new Error(`Failed to acquire codex profile registry lock: ${msg}`);
|
|
229
|
+
}
|
|
230
|
+
try {
|
|
231
|
+
return callback();
|
|
232
|
+
}
|
|
233
|
+
finally {
|
|
234
|
+
try {
|
|
235
|
+
release();
|
|
236
|
+
}
|
|
237
|
+
catch {
|
|
238
|
+
// Best-effort release.
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
// Best-effort cleanup of orphan tmp files older than 1 hour (H3 mitigation).
|
|
243
|
+
_cleanOrphanTmpFiles() {
|
|
244
|
+
const dir = path.dirname(this.registryPath);
|
|
245
|
+
const base = path.basename(this.registryPath);
|
|
246
|
+
if (!fs.existsSync(dir))
|
|
247
|
+
return;
|
|
248
|
+
try {
|
|
249
|
+
const oneHourAgo = Date.now() - 60 * 60 * 1000;
|
|
250
|
+
for (const entry of fs.readdirSync(dir)) {
|
|
251
|
+
if (!entry.startsWith(`${base}.tmp.`))
|
|
252
|
+
continue;
|
|
253
|
+
const full = path.join(dir, entry);
|
|
254
|
+
try {
|
|
255
|
+
const stat = fs.statSync(full);
|
|
256
|
+
if (stat.mtimeMs < oneHourAgo) {
|
|
257
|
+
fs.unlinkSync(full);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
catch {
|
|
261
|
+
// ignore per-file errors
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
catch {
|
|
266
|
+
// ignore cleanup failure silently
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
// ── CRUD ────────────────────────────────────────────────────────────────
|
|
270
|
+
createProfile(name, meta = {}) {
|
|
271
|
+
assertValidProfileName(name);
|
|
272
|
+
this._withRegistryWriteLock(() => {
|
|
273
|
+
const data = this._read();
|
|
274
|
+
if (data.profiles[name]) {
|
|
275
|
+
throw new Error(`Profile already exists: ${name}`);
|
|
276
|
+
}
|
|
277
|
+
data.profiles[name] = {
|
|
278
|
+
type: 'codex',
|
|
279
|
+
created: new Date().toISOString(),
|
|
280
|
+
last_used: null,
|
|
281
|
+
...meta,
|
|
282
|
+
};
|
|
283
|
+
this._write(data);
|
|
284
|
+
logger.stage('route', 'codex-auth.profile.created', 'Codex profile created', { name });
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
getProfile(name) {
|
|
288
|
+
assertValidProfileName(name);
|
|
289
|
+
const data = this._read();
|
|
290
|
+
const profile = data.profiles[name];
|
|
291
|
+
if (!profile) {
|
|
292
|
+
throw new Error(`Profile not found: ${name}`);
|
|
293
|
+
}
|
|
294
|
+
return profile;
|
|
295
|
+
}
|
|
296
|
+
updateProfile(name, partial) {
|
|
297
|
+
assertValidProfileName(name);
|
|
298
|
+
this._withRegistryWriteLock(() => {
|
|
299
|
+
const data = this._read();
|
|
300
|
+
if (!data.profiles[name]) {
|
|
301
|
+
throw new Error(`Profile not found: ${name}`);
|
|
302
|
+
}
|
|
303
|
+
data.profiles[name] = { ...data.profiles[name], ...partial };
|
|
304
|
+
this._write(data);
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
removeProfile(name, options = {}) {
|
|
308
|
+
assertValidProfileName(name);
|
|
309
|
+
this._withRegistryWriteLock(() => {
|
|
310
|
+
const data = this._read();
|
|
311
|
+
if (!data.profiles[name]) {
|
|
312
|
+
throw new Error(`Profile not found: ${name}`);
|
|
313
|
+
}
|
|
314
|
+
if (data.default === name && Object.keys(data.profiles).length > 1 && !options.forceDefault) {
|
|
315
|
+
throw new Error('Cannot remove default profile while other profiles exist without --force');
|
|
316
|
+
}
|
|
317
|
+
delete data.profiles[name];
|
|
318
|
+
if (data.default === name) {
|
|
319
|
+
data.default = null;
|
|
320
|
+
}
|
|
321
|
+
this._write(data);
|
|
322
|
+
logger.stage('cleanup', 'codex-auth.profile.deleted', 'Codex profile removed', { name });
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
listProfiles() {
|
|
326
|
+
return Object.keys(this._read().profiles);
|
|
327
|
+
}
|
|
328
|
+
hasProfile(name) {
|
|
329
|
+
if ((0, types_1.getCodexProfileNameError)(name))
|
|
330
|
+
return false;
|
|
331
|
+
return Object.prototype.hasOwnProperty.call(this._read().profiles, name);
|
|
332
|
+
}
|
|
333
|
+
// ── Default pointer ──────────────────────────────────────────────────────
|
|
334
|
+
getDefault() {
|
|
335
|
+
return this._read().default;
|
|
336
|
+
}
|
|
337
|
+
setDefault(name) {
|
|
338
|
+
assertValidProfileName(name);
|
|
339
|
+
this._withRegistryWriteLock(() => {
|
|
340
|
+
const data = this._read();
|
|
341
|
+
if (!data.profiles[name]) {
|
|
342
|
+
throw new Error(`Profile not found: ${name}`);
|
|
343
|
+
}
|
|
344
|
+
data.default = name;
|
|
345
|
+
this._write(data);
|
|
346
|
+
});
|
|
347
|
+
}
|
|
348
|
+
clearDefault() {
|
|
349
|
+
this._withRegistryWriteLock(() => {
|
|
350
|
+
const data = this._read();
|
|
351
|
+
data.default = null;
|
|
352
|
+
this._write(data);
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
touchProfile(name) {
|
|
356
|
+
this.updateProfile(name, { last_used: new Date().toISOString() });
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
exports.CodexProfileRegistry = CodexProfileRegistry;
|
|
360
|
+
//# sourceMappingURL=codex-profile-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-profile-registry.js","sourceRoot":"","sources":["../../src/codex-auth/codex-profile-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* codex-auth create command.
|
|
3
|
+
* Creates a new profile dir + shared config.toml symlink.
|
|
4
|
+
* After creation, auto-spawns `codex login` with CODEX_HOME pinned (D11).
|
|
5
|
+
* --force: re-link config.toml only, preserve auth.json (D9).
|
|
6
|
+
*/
|
|
7
|
+
import type { CodexCommandContext } from './types';
|
|
8
|
+
export declare function handleCreateCodex(ctx: CodexCommandContext, args: string[]): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=create-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-command.d.ts","sourceRoot":"","sources":["../../../src/codex-auth/commands/create-command.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAaH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAInD,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsF/F"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* codex-auth create command.
|
|
4
|
+
* Creates a new profile dir + shared config.toml symlink.
|
|
5
|
+
* After creation, auto-spawns `codex login` with CODEX_HOME pinned (D11).
|
|
6
|
+
* --force: re-link config.toml only, preserve auth.json (D9).
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
25
|
+
if (mod && mod.__esModule) return mod;
|
|
26
|
+
var result = {};
|
|
27
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
28
|
+
__setModuleDefault(result, mod);
|
|
29
|
+
return result;
|
|
30
|
+
};
|
|
31
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
|
+
exports.handleCreateCodex = void 0;
|
|
33
|
+
const fs = __importStar(require("fs"));
|
|
34
|
+
const path = __importStar(require("path"));
|
|
35
|
+
const childProcess = __importStar(require("child_process"));
|
|
36
|
+
const logging_1 = require("../../services/logging");
|
|
37
|
+
const ui_1 = require("../../utils/ui");
|
|
38
|
+
const errors_1 = require("../../errors");
|
|
39
|
+
const exit_codes_1 = require("../../errors/exit-codes");
|
|
40
|
+
const index_1 = require("../index");
|
|
41
|
+
const codex_account_identity_1 = require("../codex-account-identity");
|
|
42
|
+
const codex_detector_1 = require("../../targets/codex-detector");
|
|
43
|
+
const types_1 = require("./types");
|
|
44
|
+
const logger = (0, logging_1.createLogger)('codex-auth:cmd:create');
|
|
45
|
+
async function handleCreateCodex(ctx, args) {
|
|
46
|
+
await (0, ui_1.initUI)();
|
|
47
|
+
const parsed = (0, types_1.parseArgs)(args);
|
|
48
|
+
(0, types_1.rejectUnsupportedOptions)(parsed, 'ccsx auth create <name> [--force]', { force: true });
|
|
49
|
+
const { profileName, force } = parsed;
|
|
50
|
+
if (!profileName) {
|
|
51
|
+
console.log(`Usage: ccsx auth create <name> [--force]`);
|
|
52
|
+
(0, errors_1.exitWithError)('Profile name required', exit_codes_1.ExitCode.PROFILE_ERROR);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const nameError = (0, types_1.getProfileNameError)(profileName);
|
|
56
|
+
if (nameError) {
|
|
57
|
+
(0, errors_1.exitWithError)(nameError, exit_codes_1.ExitCode.PROFILE_ERROR);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const { registry } = ctx;
|
|
61
|
+
const profileDir = (0, index_1.resolveCodexProfileDir)(profileName);
|
|
62
|
+
// Idempotent: profile already exists
|
|
63
|
+
if (registry.hasProfile(profileName)) {
|
|
64
|
+
if (force) {
|
|
65
|
+
// --force: only re-link config.toml, preserve auth.json
|
|
66
|
+
console.log((0, ui_1.info)(`Profile already exists: ${profileName} (re-linking config.toml)`));
|
|
67
|
+
_ensureSymlinkSafe(profileDir, true);
|
|
68
|
+
console.log((0, ui_1.ok)(`Profile config.toml re-linked.`));
|
|
69
|
+
console.log(` Profile dir: ${profileDir}`);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
_ensureSymlinkSafe(profileDir);
|
|
73
|
+
console.log((0, ui_1.info)(`Profile already exists: ${profileName}`));
|
|
74
|
+
console.log((0, ui_1.ok)(`Profile config.toml is ready.`));
|
|
75
|
+
console.log(` Profile dir: ${profileDir}`);
|
|
76
|
+
console.log(` Run: ccsx auth login ${profileName}`);
|
|
77
|
+
}
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
// Create profile dir + symlink FIRST (filesystem is more failure-prone than registry write).
|
|
81
|
+
// Avoids registry orphan if mkdir hits EACCES/ENOSPC.
|
|
82
|
+
try {
|
|
83
|
+
fs.mkdirSync(profileDir, { recursive: true, mode: 0o700 });
|
|
84
|
+
_ensureSymlinkSafe(profileDir);
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
88
|
+
if (err.code === 'EACCES') {
|
|
89
|
+
(0, errors_1.exitWithError)(msg, exit_codes_1.ExitCode.GENERAL_ERROR);
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
throw err;
|
|
93
|
+
}
|
|
94
|
+
// Now register in the profile registry
|
|
95
|
+
try {
|
|
96
|
+
registry.createProfile(profileName, {
|
|
97
|
+
created: new Date().toISOString(),
|
|
98
|
+
last_used: null,
|
|
99
|
+
email: undefined,
|
|
100
|
+
plan_type: undefined,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
105
|
+
if (msg.includes('corrupt') || msg.includes('Failed to write')) {
|
|
106
|
+
(0, errors_1.exitWithError)(`Profile registry is corrupt. Backup and remove the file to re-init.\n ${msg}`, exit_codes_1.ExitCode.GENERAL_ERROR);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
throw err;
|
|
110
|
+
}
|
|
111
|
+
const authJsonPath = path.join(profileDir, 'auth.json');
|
|
112
|
+
const authExists = fs.existsSync(authJsonPath);
|
|
113
|
+
console.log((0, ui_1.info)(`Creating Codex profile: ${profileName}`));
|
|
114
|
+
console.log('');
|
|
115
|
+
console.log(` Profile dir : ${profileDir}`);
|
|
116
|
+
console.log(` Auth state : ${authExists ? 'authenticated' : 'not authenticated'}`);
|
|
117
|
+
console.log('');
|
|
118
|
+
console.log((0, ui_1.ok)('Profile created.'));
|
|
119
|
+
// D11: auto-spawn codex login after creating the profile
|
|
120
|
+
await _spawnLogin(profileName, profileDir, ctx);
|
|
121
|
+
}
|
|
122
|
+
exports.handleCreateCodex = handleCreateCodex;
|
|
123
|
+
function _ensureSymlinkSafe(profileDir, overwriteRegularFile = false) {
|
|
124
|
+
try {
|
|
125
|
+
(0, index_1.ensureSharedConfigSymlink)(profileDir, undefined, { overwriteRegularFile });
|
|
126
|
+
}
|
|
127
|
+
catch (err) {
|
|
128
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
129
|
+
logger.warn('codex-auth.create.config-repair-failed', 'Config repair failed', {
|
|
130
|
+
profileDir,
|
|
131
|
+
error: msg,
|
|
132
|
+
});
|
|
133
|
+
(0, errors_1.exitWithError)(`Failed to prepare profile config.toml: ${msg}`, exit_codes_1.ExitCode.CONFIG_ERROR);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
async function _spawnLogin(profileName, profileDir, ctx) {
|
|
137
|
+
const codexCli = (0, codex_detector_1.detectCodexCli)();
|
|
138
|
+
if (!codexCli) {
|
|
139
|
+
process.stderr.write(`[!] codex CLI not found — skipping auto-login.\n`);
|
|
140
|
+
process.stderr.write(` Install: npm i -g @openai/codex\n`);
|
|
141
|
+
process.stderr.write(` Then run: ccsx auth login ${profileName}\n`);
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
console.log('');
|
|
145
|
+
console.log(`Next step: logging in to Codex...`);
|
|
146
|
+
console.log(` CODEX_HOME=${profileDir}`);
|
|
147
|
+
console.log('');
|
|
148
|
+
const loginResult = await new Promise((resolve) => {
|
|
149
|
+
const child = childProcess.spawn(codexCli, ['login'], {
|
|
150
|
+
stdio: 'inherit',
|
|
151
|
+
env: { ...process.env, CODEX_HOME: profileDir },
|
|
152
|
+
windowsHide: true,
|
|
153
|
+
});
|
|
154
|
+
child.on('error', (err) => {
|
|
155
|
+
process.stderr.write(`[X] Failed to execute codex: ${err.message}\n`);
|
|
156
|
+
resolve({ code: exit_codes_1.ExitCode.BINARY_ERROR, error: err.message });
|
|
157
|
+
});
|
|
158
|
+
child.on('exit', (code) => {
|
|
159
|
+
resolve({ code: code ?? 1 });
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
if (loginResult.error) {
|
|
163
|
+
(0, errors_1.exitWithError)(`codex login failed to start: ${loginResult.error}`, exit_codes_1.ExitCode.BINARY_ERROR);
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
const authJsonPath = path.join(profileDir, 'auth.json');
|
|
167
|
+
if (loginResult.code === 0 && fs.existsSync(authJsonPath)) {
|
|
168
|
+
const identity = (0, codex_account_identity_1.decodeAccountIdentity)(authJsonPath);
|
|
169
|
+
ctx.registry.updateProfile(profileName, {
|
|
170
|
+
last_used: new Date().toISOString(),
|
|
171
|
+
email: identity.email,
|
|
172
|
+
plan_type: identity.plan_type ?? null,
|
|
173
|
+
account_id: identity.account_id,
|
|
174
|
+
});
|
|
175
|
+
const emailStr = identity.email ? ` as ${identity.email}` : '';
|
|
176
|
+
const planStr = identity.plan_type ? ` (plan: ${identity.plan_type})` : '';
|
|
177
|
+
console.log((0, ui_1.ok)(`Logged in${emailStr}${planStr}`));
|
|
178
|
+
}
|
|
179
|
+
else if (loginResult.code === 0) {
|
|
180
|
+
process.stderr.write(`[!] codex login exited cleanly but no auth.json. Skipping registry update.\n`);
|
|
181
|
+
(0, errors_1.exitWithError)('codex login completed without auth.json', exit_codes_1.ExitCode.AUTH_ERROR);
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
process.stderr.write(`[!] Login cancelled or failed. Profile ${profileName} remains unauthenticated.\n`);
|
|
185
|
+
process.stderr.write(` Retry: ccsx auth login ${profileName}\n`);
|
|
186
|
+
(0, errors_1.exitWithError)('codex login failed', exit_codes_1.ExitCode.AUTH_ERROR);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=create-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-command.js","sourceRoot":"","sources":["../../../src/codex-auth/commands/create-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* codex-auth import-default command.
|
|
3
|
+
*
|
|
4
|
+
* Migrates legacy ~/.codex/auth.json into a named profile (non-destructive).
|
|
5
|
+
* Implements C3 torn-write protection: read-with-retry + JWT-shape validation
|
|
6
|
+
* + pgrep Codex-running detection + atomic write.
|
|
7
|
+
*
|
|
8
|
+
* Usage: ccsx auth import-default <name> [--with-history] [--force] [--force-while-running]
|
|
9
|
+
*/
|
|
10
|
+
import type { CodexCommandContext } from './types';
|
|
11
|
+
export interface ImportDefaultArgs {
|
|
12
|
+
name: string;
|
|
13
|
+
withHistory: boolean;
|
|
14
|
+
force: boolean;
|
|
15
|
+
forceWhileRunning: boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare function handleImportDefaultCodex(ctx: CodexCommandContext, rawArgs: string[]): Promise<void>;
|
|
18
|
+
//# sourceMappingURL=import-default-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-default-command.d.ts","sourceRoot":"","sources":["../../../src/codex-auth/commands/import-default-command.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAcH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AA6NnD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,OAAO,CAAC;IACf,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAuBD,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,mBAAmB,EACxB,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,IAAI,CAAC,CAuJf"}
|