codex-multi-auth 2.1.4 → 2.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/README.md +50 -25
  2. package/config/README.md +2 -3
  3. package/dist/index.js +23 -23
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/auth/device-auth.d.ts.map +1 -1
  6. package/dist/lib/auth/device-auth.js +18 -1
  7. package/dist/lib/auth/device-auth.js.map +1 -1
  8. package/dist/lib/codex-manager/commands/account.js +6 -6
  9. package/dist/lib/codex-manager/commands/account.js.map +1 -1
  10. package/dist/lib/codex-manager/commands/best.js +1 -1
  11. package/dist/lib/codex-manager/commands/best.js.map +1 -1
  12. package/dist/lib/codex-manager/commands/bridge.js +5 -5
  13. package/dist/lib/codex-manager/commands/bridge.js.map +1 -1
  14. package/dist/lib/codex-manager/commands/budget.js +3 -3
  15. package/dist/lib/codex-manager/commands/budget.js.map +1 -1
  16. package/dist/lib/codex-manager/commands/forecast.d.ts.map +1 -1
  17. package/dist/lib/codex-manager/commands/forecast.js +18 -4
  18. package/dist/lib/codex-manager/commands/forecast.js.map +1 -1
  19. package/dist/lib/codex-manager/commands/integrations.js +1 -1
  20. package/dist/lib/codex-manager/commands/integrations.js.map +1 -1
  21. package/dist/lib/codex-manager/commands/models.js +1 -1
  22. package/dist/lib/codex-manager/commands/models.js.map +1 -1
  23. package/dist/lib/codex-manager/commands/monitor.js +1 -1
  24. package/dist/lib/codex-manager/commands/monitor.js.map +1 -1
  25. package/dist/lib/codex-manager/commands/report.js +1 -1
  26. package/dist/lib/codex-manager/commands/report.js.map +1 -1
  27. package/dist/lib/codex-manager/commands/rotation.d.ts.map +1 -1
  28. package/dist/lib/codex-manager/commands/rotation.js +23 -14
  29. package/dist/lib/codex-manager/commands/rotation.js.map +1 -1
  30. package/dist/lib/codex-manager/commands/switch.js +1 -1
  31. package/dist/lib/codex-manager/commands/switch.js.map +1 -1
  32. package/dist/lib/codex-manager/commands/uninstall.d.ts +36 -0
  33. package/dist/lib/codex-manager/commands/uninstall.d.ts.map +1 -0
  34. package/dist/lib/codex-manager/commands/uninstall.js +284 -0
  35. package/dist/lib/codex-manager/commands/uninstall.js.map +1 -0
  36. package/dist/lib/codex-manager/commands/usage.js +2 -2
  37. package/dist/lib/codex-manager/commands/usage.js.map +1 -1
  38. package/dist/lib/codex-manager/commands/verify.js +4 -4
  39. package/dist/lib/codex-manager/commands/verify.js.map +1 -1
  40. package/dist/lib/codex-manager/commands/why-selected.js +3 -3
  41. package/dist/lib/codex-manager/commands/why-selected.js.map +1 -1
  42. package/dist/lib/codex-manager/forecast-report-commands.js +3 -3
  43. package/dist/lib/codex-manager/forecast-report-commands.js.map +1 -1
  44. package/dist/lib/codex-manager/help.d.ts.map +1 -1
  45. package/dist/lib/codex-manager/help.js +27 -26
  46. package/dist/lib/codex-manager/help.js.map +1 -1
  47. package/dist/lib/codex-manager/repair-commands.d.ts.map +1 -1
  48. package/dist/lib/codex-manager/repair-commands.js +23 -11
  49. package/dist/lib/codex-manager/repair-commands.js.map +1 -1
  50. package/dist/lib/codex-manager.d.ts.map +1 -1
  51. package/dist/lib/codex-manager.js +47 -6
  52. package/dist/lib/codex-manager.js.map +1 -1
  53. package/dist/lib/forecast.js +1 -1
  54. package/dist/lib/forecast.js.map +1 -1
  55. package/dist/lib/request/fetch-helpers.d.ts +1 -1
  56. package/dist/lib/request/fetch-helpers.js +8 -8
  57. package/dist/lib/request/fetch-helpers.js.map +1 -1
  58. package/dist/lib/request/stream-failover.d.ts.map +1 -1
  59. package/dist/lib/request/stream-failover.js +12 -1
  60. package/dist/lib/request/stream-failover.js.map +1 -1
  61. package/dist/lib/rotation.d.ts +1 -1
  62. package/dist/lib/rotation.js +1 -1
  63. package/dist/lib/runtime/app-bind.d.ts.map +1 -1
  64. package/dist/lib/runtime/app-bind.js +28 -3
  65. package/dist/lib/runtime/app-bind.js.map +1 -1
  66. package/dist/lib/runtime/config-toml.d.ts.map +1 -1
  67. package/dist/lib/runtime/config-toml.js +29 -3
  68. package/dist/lib/runtime/config-toml.js.map +1 -1
  69. package/dist/lib/runtime/hydrate-emails.d.ts.map +1 -1
  70. package/dist/lib/runtime/hydrate-emails.js +6 -1
  71. package/dist/lib/runtime/hydrate-emails.js.map +1 -1
  72. package/dist/lib/runtime/runtime-current-account.d.ts.map +1 -1
  73. package/dist/lib/runtime/runtime-current-account.js +10 -1
  74. package/dist/lib/runtime/runtime-current-account.js.map +1 -1
  75. package/dist/lib/runtime/storage-scope.js +2 -2
  76. package/dist/lib/runtime/storage-scope.js.map +1 -1
  77. package/dist/lib/runtime-rotation-proxy.d.ts.map +1 -1
  78. package/dist/lib/runtime-rotation-proxy.js +44 -9
  79. package/dist/lib/runtime-rotation-proxy.js.map +1 -1
  80. package/dist/lib/storage/transactions.d.ts +2 -1
  81. package/dist/lib/storage/transactions.d.ts.map +1 -1
  82. package/dist/lib/storage/transactions.js +9 -3
  83. package/dist/lib/storage/transactions.js.map +1 -1
  84. package/dist/lib/update-notice.d.ts +12 -0
  85. package/dist/lib/update-notice.d.ts.map +1 -0
  86. package/dist/lib/update-notice.js +315 -0
  87. package/dist/lib/update-notice.js.map +1 -0
  88. package/package.json +26 -17
  89. package/scripts/codex.js +269 -65
  90. package/scripts/install-codex-auth-utils.js +48 -0
  91. package/scripts/preuninstall.js +254 -0
  92. package/dist/lib/auto-update-checker.d.ts +0 -32
  93. package/dist/lib/auto-update-checker.d.ts.map +0 -1
  94. package/dist/lib/auto-update-checker.js +0 -730
  95. package/dist/lib/auto-update-checker.js.map +0 -1
@@ -0,0 +1,315 @@
1
+ import { existsSync, mkdirSync, readFileSync, renameSync, unlinkSync, writeFileSync, } from "node:fs";
2
+ import { dirname, join } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { createLogger } from "./logger.js";
5
+ import { getCodexCacheDir } from "./runtime-paths.js";
6
+ const log = createLogger("update-notice");
7
+ const PACKAGE_NAME = "codex-multi-auth";
8
+ const NPM_REGISTRY_URL = `https://registry.npmjs.org/${PACKAGE_NAME}/latest`;
9
+ const CACHE_DIR = getCodexCacheDir();
10
+ const CACHE_FILE = join(CACHE_DIR, "update-check-cache.json");
11
+ const CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000;
12
+ const UPDATE_CHECK_TIMEOUT_MS = 5_000;
13
+ const RETRYABLE_WRITE_ERRORS = new Set(["EBUSY", "EPERM", "ENOTEMPTY"]);
14
+ let updateCacheWriteQueue = Promise.resolve();
15
+ let cachedPackageRoot;
16
+ function enqueueUpdateCacheWrite(writeTask) {
17
+ const queued = updateCacheWriteQueue.catch(() => undefined).then(writeTask);
18
+ updateCacheWriteQueue = queued.then(() => undefined, () => undefined);
19
+ return queued;
20
+ }
21
+ function delay(ms) {
22
+ const normalizedDelay = Math.max(0, Math.floor(ms));
23
+ if (normalizedDelay === 0)
24
+ return Promise.resolve();
25
+ return new Promise((resolve) => {
26
+ const timeout = setTimeout(resolve, normalizedDelay);
27
+ timeout.unref?.();
28
+ });
29
+ }
30
+ async function writeCacheContents(serialized) {
31
+ let tempPath = null;
32
+ let wroteTemp = false;
33
+ try {
34
+ if (!existsSync(CACHE_DIR)) {
35
+ mkdirSync(CACHE_DIR, { recursive: true });
36
+ }
37
+ tempPath = `${CACHE_FILE}.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2, 8)}.tmp`;
38
+ let lastError = null;
39
+ for (let attempt = 0; attempt < 4; attempt++) {
40
+ try {
41
+ writeFileSync(tempPath, serialized, "utf8");
42
+ renameSync(tempPath, CACHE_FILE);
43
+ wroteTemp = false;
44
+ return;
45
+ }
46
+ catch (error) {
47
+ const code = error.code ?? "";
48
+ lastError = error;
49
+ wroteTemp = true;
50
+ if (!RETRYABLE_WRITE_ERRORS.has(code) || attempt >= 3) {
51
+ throw error;
52
+ }
53
+ await delay(15 * (2 ** attempt));
54
+ }
55
+ }
56
+ if (lastError)
57
+ throw lastError;
58
+ }
59
+ finally {
60
+ if (wroteTemp && tempPath) {
61
+ try {
62
+ unlinkSync(tempPath);
63
+ }
64
+ catch {
65
+ // Best-effort temp cleanup.
66
+ }
67
+ }
68
+ }
69
+ }
70
+ function getModuleDir() {
71
+ return typeof import.meta.dirname === "string"
72
+ ? import.meta.dirname
73
+ : dirname(fileURLToPath(import.meta.url));
74
+ }
75
+ export function resolvePackageRootFromModuleDir(moduleDir) {
76
+ let current = moduleDir;
77
+ for (let depth = 0; depth < 8; depth++) {
78
+ const packageJsonPath = join(current, "package.json");
79
+ try {
80
+ if (existsSync(packageJsonPath)) {
81
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf8"));
82
+ if (packageJson.name === PACKAGE_NAME)
83
+ return current;
84
+ }
85
+ }
86
+ catch {
87
+ // Keep walking; malformed metadata should not break startup notices.
88
+ }
89
+ const parent = dirname(current);
90
+ if (parent === current)
91
+ break;
92
+ current = parent;
93
+ }
94
+ return join(moduleDir, "..");
95
+ }
96
+ function getPackageRoot() {
97
+ cachedPackageRoot ??= resolvePackageRootFromModuleDir(getModuleDir());
98
+ return cachedPackageRoot;
99
+ }
100
+ function getCurrentVersion() {
101
+ try {
102
+ const packageJsonPath = join(getPackageRoot(), "package.json");
103
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf8"));
104
+ return packageJson.version;
105
+ }
106
+ catch (error) {
107
+ log.debug("Failed to read current package version", {
108
+ error: error instanceof Error ? error.message : String(error),
109
+ });
110
+ return "0.0.0";
111
+ }
112
+ }
113
+ function loadCache() {
114
+ try {
115
+ if (!existsSync(CACHE_FILE))
116
+ return null;
117
+ const content = readFileSync(CACHE_FILE, "utf8");
118
+ return JSON.parse(content);
119
+ }
120
+ catch (error) {
121
+ log.debug("Failed to load update cache", {
122
+ error: error instanceof Error ? error.message : String(error),
123
+ });
124
+ return null;
125
+ }
126
+ }
127
+ async function saveCache(cache) {
128
+ await enqueueUpdateCacheWrite(async () => {
129
+ try {
130
+ await writeCacheContents(JSON.stringify(cache, null, 2));
131
+ }
132
+ catch (error) {
133
+ log.warn("Failed to save update cache", {
134
+ error: error instanceof Error ? error.message : String(error),
135
+ });
136
+ }
137
+ });
138
+ }
139
+ function parseSemver(version) {
140
+ const normalized = version.trim().replace(/^v/i, "");
141
+ const [withoutBuild] = normalized.split("+");
142
+ const [corePart = "0.0.0", prereleasePart] = (withoutBuild ?? "0.0.0").split("-", 2);
143
+ const [majorRaw = "0", minorRaw = "0", patchRaw = "0"] = corePart.split(".");
144
+ const toSafeInt = (value) => {
145
+ if (!/^\d+$/.test(value))
146
+ return 0;
147
+ const parsed = Number.parseInt(value, 10);
148
+ return Number.isFinite(parsed) ? parsed : 0;
149
+ };
150
+ return {
151
+ core: [toSafeInt(majorRaw), toSafeInt(minorRaw), toSafeInt(patchRaw)],
152
+ prerelease: prereleasePart && prereleasePart.trim().length > 0
153
+ ? prereleasePart.split(".").filter((segment) => segment.length > 0)
154
+ : [],
155
+ };
156
+ }
157
+ function comparePrerelease(current, latest) {
158
+ const maxLen = Math.max(current.length, latest.length);
159
+ for (let i = 0; i < maxLen; i++) {
160
+ const currentPart = current[i];
161
+ const latestPart = latest[i];
162
+ if (currentPart === undefined && latestPart === undefined)
163
+ return 0;
164
+ if (currentPart === undefined)
165
+ return 1;
166
+ if (latestPart === undefined)
167
+ return -1;
168
+ if (currentPart === latestPart)
169
+ continue;
170
+ const currentIsNumeric = /^\d+$/.test(currentPart);
171
+ const latestIsNumeric = /^\d+$/.test(latestPart);
172
+ if (currentIsNumeric && latestIsNumeric) {
173
+ const currentNum = Number.parseInt(currentPart, 10);
174
+ const latestNum = Number.parseInt(latestPart, 10);
175
+ if (latestNum > currentNum)
176
+ return 1;
177
+ if (latestNum < currentNum)
178
+ return -1;
179
+ continue;
180
+ }
181
+ if (currentIsNumeric && !latestIsNumeric)
182
+ return 1;
183
+ if (!currentIsNumeric && latestIsNumeric)
184
+ return -1;
185
+ const lexical = latestPart.localeCompare(currentPart, "en", {
186
+ sensitivity: "case",
187
+ });
188
+ if (lexical > 0)
189
+ return 1;
190
+ if (lexical < 0)
191
+ return -1;
192
+ }
193
+ return 0;
194
+ }
195
+ function compareVersions(current, latest) {
196
+ const parsedCurrent = parseSemver(current);
197
+ const parsedLatest = parseSemver(latest);
198
+ for (let i = 0; i < parsedCurrent.core.length; i++) {
199
+ const currentPart = parsedCurrent.core[i] ?? 0;
200
+ const latestPart = parsedLatest.core[i] ?? 0;
201
+ if (latestPart > currentPart)
202
+ return 1;
203
+ if (latestPart < currentPart)
204
+ return -1;
205
+ }
206
+ const currentHasPrerelease = parsedCurrent.prerelease.length > 0;
207
+ const latestHasPrerelease = parsedLatest.prerelease.length > 0;
208
+ if (!currentHasPrerelease && latestHasPrerelease)
209
+ return -1;
210
+ if (currentHasPrerelease && !latestHasPrerelease)
211
+ return 1;
212
+ return comparePrerelease(parsedCurrent.prerelease, parsedLatest.prerelease);
213
+ }
214
+ async function fetchLatestVersion(timeoutMs = UPDATE_CHECK_TIMEOUT_MS) {
215
+ try {
216
+ const controller = new AbortController();
217
+ const timeout = setTimeout(() => controller.abort(), timeoutMs);
218
+ try {
219
+ const response = await fetch(NPM_REGISTRY_URL, {
220
+ signal: controller.signal,
221
+ headers: { Accept: "application/json" },
222
+ });
223
+ if (!response.ok) {
224
+ log.debug("Failed to fetch npm registry", { status: response.status });
225
+ return null;
226
+ }
227
+ const data = (await response.json());
228
+ return data.name === PACKAGE_NAME ? data.version ?? null : null;
229
+ }
230
+ finally {
231
+ clearTimeout(timeout);
232
+ }
233
+ }
234
+ catch (error) {
235
+ log.debug("Failed to check for updates", {
236
+ error: error instanceof Error ? error.message : String(error),
237
+ });
238
+ return null;
239
+ }
240
+ }
241
+ function buildManualUpdateCommand() {
242
+ return `npm install -g ${PACKAGE_NAME}@latest`;
243
+ }
244
+ export function formatManualUpdateNotice(result) {
245
+ return [
246
+ `codex-multi-auth update available: v${result.latestVersion}`,
247
+ `current: v${result.currentVersion}`,
248
+ `run: ${result.updateCommand}`,
249
+ ].join("; ");
250
+ }
251
+ export async function checkForUpdates(force = false, fetchTimeoutMs = UPDATE_CHECK_TIMEOUT_MS) {
252
+ const currentVersion = getCurrentVersion();
253
+ const cache = loadCache();
254
+ const now = Date.now();
255
+ const updateCommand = buildManualUpdateCommand();
256
+ if (!force &&
257
+ cache &&
258
+ cache.currentVersion === currentVersion &&
259
+ now - cache.lastCheck < CHECK_INTERVAL_MS) {
260
+ const hasUpdate = cache.latestVersion
261
+ ? compareVersions(currentVersion, cache.latestVersion) > 0
262
+ : false;
263
+ return {
264
+ hasUpdate,
265
+ currentVersion,
266
+ latestVersion: cache.latestVersion,
267
+ updateCommand,
268
+ };
269
+ }
270
+ const latestVersion = await fetchLatestVersion(fetchTimeoutMs);
271
+ await saveCache({
272
+ lastCheck: now,
273
+ latestVersion,
274
+ currentVersion,
275
+ });
276
+ const hasUpdate = latestVersion
277
+ ? compareVersions(currentVersion, latestVersion) > 0
278
+ : false;
279
+ return {
280
+ hasUpdate,
281
+ currentVersion,
282
+ latestVersion,
283
+ updateCommand,
284
+ };
285
+ }
286
+ export async function checkAndNotify(showToast) {
287
+ try {
288
+ const result = await checkForUpdates();
289
+ if (result.hasUpdate && result.latestVersion) {
290
+ const message = formatManualUpdateNotice(result);
291
+ log.info(message);
292
+ if (showToast) {
293
+ await showToast(`Plugin update available: v${result.latestVersion}. Run: ${result.updateCommand}`, "info");
294
+ }
295
+ }
296
+ }
297
+ catch (error) {
298
+ log.debug("Update notice check failed", {
299
+ error: error instanceof Error ? error.message : String(error),
300
+ });
301
+ }
302
+ }
303
+ export function clearUpdateCache() {
304
+ void enqueueUpdateCacheWrite(async () => {
305
+ try {
306
+ if (existsSync(CACHE_FILE)) {
307
+ await writeCacheContents("{}");
308
+ }
309
+ }
310
+ catch {
311
+ // Ignore errors.
312
+ }
313
+ });
314
+ }
315
+ //# sourceMappingURL=update-notice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-notice.js","sourceRoot":"","sources":["../../lib/update-notice.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "codex-multi-auth",
3
- "version": "2.1.4",
4
- "description": "Multi-account OAuth manager and codex auth wrapper for the official @openai/codex CLI, with switching, health checks, and recovery tools",
3
+ "version": "2.1.6",
4
+ "description": "Codex CLI multi-account OAuth manager with account switching, health checks, runtime rotation, diagnostics, and recovery tools for @openai/codex",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
7
7
  "exports": {
@@ -48,12 +48,20 @@
48
48
  "openai",
49
49
  "codex",
50
50
  "codex-cli",
51
+ "codex-auth",
52
+ "codex-multi-account",
51
53
  "chatgpt",
54
+ "oauth",
52
55
  "oauth2",
53
56
  "pkce",
54
57
  "multi-account",
55
58
  "account-switching",
56
59
  "oauth-manager",
60
+ "runtime-rotation",
61
+ "responses-api",
62
+ "local-proxy",
63
+ "quota-management",
64
+ "diagnostics",
57
65
  "fault-tolerance",
58
66
  "terminal-ui",
59
67
  "cli-tool",
@@ -79,7 +87,7 @@
79
87
  "lint:fix": "npm run lint:ts:fix && npm run lint:scripts:fix",
80
88
  "lint:ts:fix": "eslint . --ext .ts --fix",
81
89
  "lint:scripts:fix": "eslint scripts --ext .js,.mjs --fix",
82
- "test": "vitest run --maxWorkers=1",
90
+ "test": "vitest run --maxWorkers=1",
83
91
  "test:watch": "vitest",
84
92
  "test:ui": "vitest --ui",
85
93
  "test:model-matrix": "node scripts/test-model-matrix.js",
@@ -93,23 +101,24 @@
93
101
  "bench:edit-formats:render": "node scripts/benchmark-render-dashboard.mjs",
94
102
  "bench:runtime-path": "npm run build && node scripts/benchmark-runtime-path.mjs",
95
103
  "bench:runtime-path:quick": "node scripts/benchmark-runtime-path.mjs",
96
- "test:coverage": "vitest run --coverage --maxWorkers=1",
97
- "coverage": "npm run build && vitest run --coverage --maxWorkers=1",
104
+ "test:coverage": "vitest run --coverage --maxWorkers=1",
105
+ "coverage": "npm run build && vitest run --coverage --maxWorkers=1",
98
106
  "audit:prod": "npm audit --omit=dev --audit-level=high",
99
107
  "audit:all": "npm audit --audit-level=high",
100
108
  "audit:dev:allowlist": "node scripts/audit-dev-allowlist.js",
101
- "audit:ci": "npm run audit:prod && npm run audit:dev:allowlist",
102
- "vendor:verify": "node scripts/verify-vendor-provenance.mjs",
103
- "vendor:update-manifest": "node scripts/update-vendor-provenance.mjs",
104
- "postinstall": "node scripts/postinstall.js",
105
- "prepublishOnly": "npm run build",
106
- "prepare": "husky"
107
- },
108
- "bin": {
109
- "codex-multi-auth-codex": "scripts/codex.js",
110
- "codex-multi-auth-app-launcher": "scripts/codex-app-launcher.js",
111
- "codex-multi-auth": "scripts/codex-multi-auth.js"
112
- },
109
+ "audit:ci": "npm run audit:prod && npm run audit:dev:allowlist",
110
+ "vendor:verify": "node scripts/verify-vendor-provenance.mjs",
111
+ "vendor:update-manifest": "node scripts/update-vendor-provenance.mjs",
112
+ "preuninstall": "node scripts/preuninstall.js",
113
+ "postinstall": "node scripts/postinstall.js",
114
+ "prepublishOnly": "npm run build",
115
+ "prepare": "husky"
116
+ },
117
+ "bin": {
118
+ "codex-multi-auth-codex": "scripts/codex.js",
119
+ "codex-multi-auth-app-launcher": "scripts/codex-app-launcher.js",
120
+ "codex-multi-auth": "scripts/codex-multi-auth.js"
121
+ },
113
122
  "files": [
114
123
  "dist/",
115
124
  "assets/",