codex-multi-auth 2.0.1 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/README.md +22 -8
  2. package/config/README.md +4 -4
  3. package/config/codex-legacy.json +571 -571
  4. package/config/codex-modern.json +258 -258
  5. package/config/minimal-codex.json +1 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +91 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/lib/account-policy.d.ts +22 -0
  10. package/dist/lib/account-policy.d.ts.map +1 -0
  11. package/dist/lib/account-policy.js +159 -0
  12. package/dist/lib/account-policy.js.map +1 -0
  13. package/dist/lib/accounts.d.ts.map +1 -1
  14. package/dist/lib/accounts.js +2 -1
  15. package/dist/lib/accounts.js.map +1 -1
  16. package/dist/lib/auth/device-auth.d.ts +46 -0
  17. package/dist/lib/auth/device-auth.d.ts.map +1 -0
  18. package/dist/lib/auth/device-auth.js +325 -0
  19. package/dist/lib/auth/device-auth.js.map +1 -0
  20. package/dist/lib/auth/index.d.ts +2 -0
  21. package/dist/lib/auth/index.d.ts.map +1 -1
  22. package/dist/lib/auth/index.js +1 -0
  23. package/dist/lib/auth/index.js.map +1 -1
  24. package/dist/lib/budget-guard.d.ts +39 -0
  25. package/dist/lib/budget-guard.d.ts.map +1 -0
  26. package/dist/lib/budget-guard.js +201 -0
  27. package/dist/lib/budget-guard.js.map +1 -0
  28. package/dist/lib/codex-manager/commands/account.d.ts +13 -0
  29. package/dist/lib/codex-manager/commands/account.d.ts.map +1 -0
  30. package/dist/lib/codex-manager/commands/account.js +156 -0
  31. package/dist/lib/codex-manager/commands/account.js.map +1 -0
  32. package/dist/lib/codex-manager/commands/bridge.d.ts +6 -0
  33. package/dist/lib/codex-manager/commands/bridge.d.ts.map +1 -0
  34. package/dist/lib/codex-manager/commands/bridge.js +100 -0
  35. package/dist/lib/codex-manager/commands/bridge.js.map +1 -0
  36. package/dist/lib/codex-manager/commands/budget.d.ts +12 -0
  37. package/dist/lib/codex-manager/commands/budget.d.ts.map +1 -0
  38. package/dist/lib/codex-manager/commands/budget.js +123 -0
  39. package/dist/lib/codex-manager/commands/budget.js.map +1 -0
  40. package/dist/lib/codex-manager/commands/integrations.d.ts +6 -0
  41. package/dist/lib/codex-manager/commands/integrations.d.ts.map +1 -0
  42. package/dist/lib/codex-manager/commands/integrations.js +78 -0
  43. package/dist/lib/codex-manager/commands/integrations.js.map +1 -0
  44. package/dist/lib/codex-manager/commands/models.d.ts +14 -0
  45. package/dist/lib/codex-manager/commands/models.d.ts.map +1 -0
  46. package/dist/lib/codex-manager/commands/models.js +74 -0
  47. package/dist/lib/codex-manager/commands/models.js.map +1 -0
  48. package/dist/lib/codex-manager/commands/monitor.d.ts +22 -0
  49. package/dist/lib/codex-manager/commands/monitor.d.ts.map +1 -0
  50. package/dist/lib/codex-manager/commands/monitor.js +94 -0
  51. package/dist/lib/codex-manager/commands/monitor.js.map +1 -0
  52. package/dist/lib/codex-manager/commands/rotation.d.ts +1 -0
  53. package/dist/lib/codex-manager/commands/rotation.d.ts.map +1 -1
  54. package/dist/lib/codex-manager/commands/rotation.js +293 -10
  55. package/dist/lib/codex-manager/commands/rotation.js.map +1 -1
  56. package/dist/lib/codex-manager/commands/usage.d.ts +13 -0
  57. package/dist/lib/codex-manager/commands/usage.d.ts.map +1 -0
  58. package/dist/lib/codex-manager/commands/usage.js +347 -0
  59. package/dist/lib/codex-manager/commands/usage.js.map +1 -0
  60. package/dist/lib/codex-manager/help.d.ts +1 -0
  61. package/dist/lib/codex-manager/help.d.ts.map +1 -1
  62. package/dist/lib/codex-manager/help.js +26 -1
  63. package/dist/lib/codex-manager/help.js.map +1 -1
  64. package/dist/lib/codex-manager.d.ts.map +1 -1
  65. package/dist/lib/codex-manager.js +64 -7
  66. package/dist/lib/codex-manager.js.map +1 -1
  67. package/dist/lib/config.d.ts.map +1 -1
  68. package/dist/lib/config.js +2 -22
  69. package/dist/lib/config.js.map +1 -1
  70. package/dist/lib/constants.d.ts +1 -0
  71. package/dist/lib/constants.d.ts.map +1 -1
  72. package/dist/lib/constants.js +1 -0
  73. package/dist/lib/constants.js.map +1 -1
  74. package/dist/lib/env-parsing.d.ts +21 -0
  75. package/dist/lib/env-parsing.d.ts.map +1 -0
  76. package/dist/lib/env-parsing.js +34 -0
  77. package/dist/lib/env-parsing.js.map +1 -0
  78. package/dist/lib/index.d.ts +9 -0
  79. package/dist/lib/index.d.ts.map +1 -1
  80. package/dist/lib/index.js +9 -0
  81. package/dist/lib/index.js.map +1 -1
  82. package/dist/lib/integration-generators.d.ts +14 -0
  83. package/dist/lib/integration-generators.d.ts.map +1 -0
  84. package/dist/lib/integration-generators.js +93 -0
  85. package/dist/lib/integration-generators.js.map +1 -0
  86. package/dist/lib/local-bridge.d.ts +17 -0
  87. package/dist/lib/local-bridge.d.ts.map +1 -0
  88. package/dist/lib/local-bridge.js +249 -0
  89. package/dist/lib/local-bridge.js.map +1 -0
  90. package/dist/lib/local-client-tokens.d.ts +37 -0
  91. package/dist/lib/local-client-tokens.d.ts.map +1 -0
  92. package/dist/lib/local-client-tokens.js +200 -0
  93. package/dist/lib/local-client-tokens.js.map +1 -0
  94. package/dist/lib/model-capability-matrix.d.ts +38 -0
  95. package/dist/lib/model-capability-matrix.d.ts.map +1 -0
  96. package/dist/lib/model-capability-matrix.js +89 -0
  97. package/dist/lib/model-capability-matrix.js.map +1 -0
  98. package/dist/lib/policy/runtime-policy.d.ts +59 -0
  99. package/dist/lib/policy/runtime-policy.d.ts.map +1 -0
  100. package/dist/lib/policy/runtime-policy.js +156 -0
  101. package/dist/lib/policy/runtime-policy.js.map +1 -0
  102. package/dist/lib/proactive-refresh.js +4 -4
  103. package/dist/lib/proactive-refresh.js.map +1 -1
  104. package/dist/lib/refresh-lease.d.ts.map +1 -1
  105. package/dist/lib/refresh-lease.js +1 -10
  106. package/dist/lib/refresh-lease.js.map +1 -1
  107. package/dist/lib/routing-profiles.d.ts +36 -0
  108. package/dist/lib/routing-profiles.d.ts.map +1 -0
  109. package/dist/lib/routing-profiles.js +203 -0
  110. package/dist/lib/routing-profiles.js.map +1 -0
  111. package/dist/lib/runtime-rotation-proxy.d.ts.map +1 -1
  112. package/dist/lib/runtime-rotation-proxy.js +96 -6
  113. package/dist/lib/runtime-rotation-proxy.js.map +1 -1
  114. package/dist/lib/schemas.d.ts +3 -0
  115. package/dist/lib/schemas.d.ts.map +1 -1
  116. package/dist/lib/schemas.js +1 -0
  117. package/dist/lib/schemas.js.map +1 -1
  118. package/dist/lib/usage/index.d.ts +5 -0
  119. package/dist/lib/usage/index.d.ts.map +1 -0
  120. package/dist/lib/usage/index.js +5 -0
  121. package/dist/lib/usage/index.js.map +1 -0
  122. package/dist/lib/usage/ledger.d.ts +12 -0
  123. package/dist/lib/usage/ledger.d.ts.map +1 -0
  124. package/dist/lib/usage/ledger.js +493 -0
  125. package/dist/lib/usage/ledger.js.map +1 -0
  126. package/dist/lib/usage/pricing.d.ts +11 -0
  127. package/dist/lib/usage/pricing.d.ts.map +1 -0
  128. package/dist/lib/usage/pricing.js +67 -0
  129. package/dist/lib/usage/pricing.js.map +1 -0
  130. package/dist/lib/usage/redaction.d.ts +10 -0
  131. package/dist/lib/usage/redaction.d.ts.map +1 -0
  132. package/dist/lib/usage/redaction.js +129 -0
  133. package/dist/lib/usage/redaction.js.map +1 -0
  134. package/dist/lib/usage/types.d.ts +89 -0
  135. package/dist/lib/usage/types.d.ts.map +1 -0
  136. package/dist/lib/usage/types.js +2 -0
  137. package/dist/lib/usage/types.js.map +1 -0
  138. package/package.json +1 -1
  139. package/scripts/bench-format/codex-host.mjs +142 -142
  140. package/scripts/bench-format/models.mjs +23 -23
  141. package/scripts/benchmark-edit-formats.mjs +9 -9
  142. package/scripts/codex-app-router.js +121 -121
  143. package/scripts/codex.js +165 -165
@@ -0,0 +1,325 @@
1
+ import { CLIENT_ID, exchangeAuthorizationCode, sanitizeOAuthResponseBodyForLog, } from "./auth.js";
2
+ export const DEVICE_AUTH_BASE_URL = "https://auth.openai.com";
3
+ export const DEVICE_AUTH_API_BASE_URL = `${DEVICE_AUTH_BASE_URL}/api/accounts`;
4
+ export const DEVICE_AUTH_VERIFICATION_URL = `${DEVICE_AUTH_BASE_URL}/codex/device`;
5
+ export const DEVICE_AUTH_REDIRECT_URI = `${DEVICE_AUTH_BASE_URL}/deviceauth/callback`;
6
+ export const DEVICE_AUTH_TIMEOUT_MS = 15 * 60 * 1000;
7
+ export const DEVICE_AUTH_DEFAULT_INTERVAL_MS = 5_000;
8
+ const DEVICE_AUTH_ABORTED_MESSAGE = "aborted";
9
+ const DEVICE_AUTH_TRANSIENT_PENDING_STATUSES = new Set([
10
+ 408,
11
+ 429,
12
+ 502,
13
+ 503,
14
+ 504,
15
+ ]);
16
+ function getFetch(options) {
17
+ return options.fetchImpl ?? fetch;
18
+ }
19
+ function getNow(options) {
20
+ return options.now ?? Date.now;
21
+ }
22
+ function unrefTimer(timer) {
23
+ timer.unref?.();
24
+ }
25
+ function getSleep(options) {
26
+ return (options.sleep ??
27
+ ((ms) => new Promise((resolve) => {
28
+ const timeout = setTimeout(resolve, ms);
29
+ unrefTimer(timeout);
30
+ })));
31
+ }
32
+ function getRandom(options) {
33
+ return options.random ?? Math.random;
34
+ }
35
+ function failedResult(reason, message, statusCode) {
36
+ return {
37
+ type: "failed",
38
+ reason,
39
+ statusCode,
40
+ message,
41
+ };
42
+ }
43
+ function createAbortError() {
44
+ const error = new Error(DEVICE_AUTH_ABORTED_MESSAGE);
45
+ error.name = "AbortError";
46
+ return error;
47
+ }
48
+ function isAbortError(error) {
49
+ return error instanceof Error && error.name === "AbortError";
50
+ }
51
+ function abortedResult() {
52
+ return failedResult("network_error", DEVICE_AUTH_ABORTED_MESSAGE);
53
+ }
54
+ function sleepWithAbort(ms, options) {
55
+ const signal = options.signal;
56
+ if (!signal) {
57
+ return getSleep(options)(ms);
58
+ }
59
+ if (signal.aborted) {
60
+ return Promise.reject(createAbortError());
61
+ }
62
+ const customSleep = options.sleep;
63
+ if (customSleep) {
64
+ let removeAbortListener = () => { };
65
+ const abortPromise = new Promise((_resolve, reject) => {
66
+ const onAbort = () => reject(createAbortError());
67
+ signal.addEventListener("abort", onAbort, { once: true });
68
+ removeAbortListener = () => signal.removeEventListener("abort", onAbort);
69
+ });
70
+ return Promise.race([customSleep(ms), abortPromise]).finally(removeAbortListener);
71
+ }
72
+ return new Promise((resolve, reject) => {
73
+ const onAbort = () => {
74
+ clearTimeout(timeout);
75
+ cleanup();
76
+ reject(createAbortError());
77
+ };
78
+ const cleanup = () => signal.removeEventListener("abort", onAbort);
79
+ const timeout = setTimeout(() => {
80
+ cleanup();
81
+ resolve();
82
+ }, ms);
83
+ unrefTimer(timeout);
84
+ signal.addEventListener("abort", onAbort, { once: true });
85
+ });
86
+ }
87
+ function formatWaitBudget(timeoutMs) {
88
+ const totalSeconds = Math.max(1, Math.ceil(timeoutMs / 1000));
89
+ if (totalSeconds < 60) {
90
+ return `${totalSeconds} second${totalSeconds === 1 ? "" : "s"}`;
91
+ }
92
+ const totalMinutes = Math.ceil(totalSeconds / 60);
93
+ return `${totalMinutes} minute${totalMinutes === 1 ? "" : "s"}`;
94
+ }
95
+ function isPendingStatus(status) {
96
+ return (status === 403 ||
97
+ status === 404 ||
98
+ DEVICE_AUTH_TRANSIENT_PENDING_STATUSES.has(status));
99
+ }
100
+ function parseRetryAfterMs(value, nowMs) {
101
+ if (!value)
102
+ return null;
103
+ const trimmed = value.trim();
104
+ if (!trimmed)
105
+ return null;
106
+ const seconds = Number(trimmed);
107
+ if (Number.isFinite(seconds) && seconds >= 0) {
108
+ return Math.ceil(seconds * 1000);
109
+ }
110
+ const dateMs = Date.parse(trimmed);
111
+ if (Number.isFinite(dateMs)) {
112
+ return Math.max(0, dateMs - nowMs);
113
+ }
114
+ return null;
115
+ }
116
+ function applyLightJitter(delayMs, options) {
117
+ const jitterRatio = 1 + (getRandom(options)() - 0.5) * 0.2;
118
+ return Math.max(1_000, Math.round(delayMs * jitterRatio));
119
+ }
120
+ function resolvePollDelayMs(response, deviceCode, nowMs, options) {
121
+ const retryAfterMs = parseRetryAfterMs(response.headers.get("retry-after"), nowMs);
122
+ if (retryAfterMs !== null) {
123
+ return Math.max(1_000, retryAfterMs);
124
+ }
125
+ if (response.status === 403 || response.status === 404) {
126
+ return deviceCode.intervalMs;
127
+ }
128
+ return applyLightJitter(deviceCode.intervalMs, options);
129
+ }
130
+ function asRecord(value) {
131
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
132
+ return null;
133
+ }
134
+ return value;
135
+ }
136
+ async function readJsonRecord(response) {
137
+ const text = await response.text().catch(() => "");
138
+ if (!text.trim()) {
139
+ return null;
140
+ }
141
+ try {
142
+ return asRecord(JSON.parse(text));
143
+ }
144
+ catch {
145
+ return null;
146
+ }
147
+ }
148
+ function parseIntervalMs(value) {
149
+ if (typeof value === "number" && Number.isFinite(value) && value > 0) {
150
+ return Math.trunc(value * 1000);
151
+ }
152
+ if (typeof value === "string") {
153
+ const parsed = Number.parseFloat(value.trim());
154
+ if (Number.isFinite(parsed) && parsed > 0) {
155
+ return Math.trunc(parsed * 1000);
156
+ }
157
+ }
158
+ return DEVICE_AUTH_DEFAULT_INTERVAL_MS;
159
+ }
160
+ function parseExpirationMs(value, nowMs) {
161
+ if (typeof value === "number" && Number.isFinite(value) && value > 0) {
162
+ return nowMs + Math.trunc(value * 1000);
163
+ }
164
+ if (typeof value === "string") {
165
+ const trimmed = value.trim();
166
+ if (/^\d+(?:\.\d+)?$/.test(trimmed)) {
167
+ const seconds = Number.parseFloat(trimmed);
168
+ return nowMs + Math.trunc(seconds * 1000);
169
+ }
170
+ const dateMs = Date.parse(trimmed);
171
+ if (Number.isFinite(dateMs)) {
172
+ return dateMs;
173
+ }
174
+ }
175
+ return null;
176
+ }
177
+ function parseNonEmptyString(value) {
178
+ if (typeof value !== "string") {
179
+ return null;
180
+ }
181
+ const trimmed = value.trim();
182
+ return trimmed.length > 0 ? trimmed : null;
183
+ }
184
+ function parseDeviceCodePayload(payload, nowMs) {
185
+ const deviceAuthId = parseNonEmptyString(payload.device_auth_id);
186
+ const userCode = parseNonEmptyString(payload.user_code) ??
187
+ parseNonEmptyString(payload.usercode);
188
+ if (!deviceAuthId || !userCode) {
189
+ return null;
190
+ }
191
+ const expiresAtMs = parseExpirationMs(payload.expires_at, nowMs) ??
192
+ parseExpirationMs(payload.expires_in, nowMs);
193
+ return {
194
+ verificationUrl: DEVICE_AUTH_VERIFICATION_URL,
195
+ userCode,
196
+ deviceAuthId,
197
+ intervalMs: parseIntervalMs(payload.interval),
198
+ ...(expiresAtMs === null ? {} : { expiresAtMs }),
199
+ };
200
+ }
201
+ function parseCompletionPayload(payload) {
202
+ const authorizationCode = parseNonEmptyString(payload.authorization_code);
203
+ const codeVerifier = parseNonEmptyString(payload.code_verifier);
204
+ if (!authorizationCode || !codeVerifier) {
205
+ return null;
206
+ }
207
+ // OpenAI Codex's device-code endpoint intentionally returns the PKCE
208
+ // verifier with the issued authorization code. This mirrors the upstream
209
+ // Codex CLI flow. The verifier is never persisted to account storage; keep
210
+ // this poll response out of logs and only hand it directly to the token
211
+ // exchange.
212
+ return { authorizationCode, codeVerifier };
213
+ }
214
+ async function readFailureText(response) {
215
+ const text = await response.text().catch(() => "");
216
+ return sanitizeOAuthResponseBodyForLog(text);
217
+ }
218
+ export async function requestDeviceAuthorization(options = {}) {
219
+ if (options.signal?.aborted) {
220
+ return abortedResult();
221
+ }
222
+ try {
223
+ const response = await getFetch(options)(`${DEVICE_AUTH_API_BASE_URL}/deviceauth/usercode`, {
224
+ method: "POST",
225
+ headers: { "Content-Type": "application/json" },
226
+ signal: options.signal,
227
+ body: JSON.stringify({ client_id: CLIENT_ID }),
228
+ });
229
+ if (!response.ok) {
230
+ if (response.status === 404) {
231
+ return failedResult("http_error", "Device auth login is not enabled for this Codex server. Use browser login or --manual.", response.status);
232
+ }
233
+ const safeText = await readFailureText(response);
234
+ return failedResult("http_error", safeText || `Device code request failed with status ${response.status}`, response.status);
235
+ }
236
+ const payload = await readJsonRecord(response);
237
+ const deviceCode = payload
238
+ ? parseDeviceCodePayload(payload, getNow(options)())
239
+ : null;
240
+ if (!deviceCode) {
241
+ return failedResult("invalid_response", "Device code request response failed schema validation");
242
+ }
243
+ return { type: "success", deviceCode };
244
+ }
245
+ catch (error) {
246
+ if (isAbortError(error) || options.signal?.aborted) {
247
+ return abortedResult();
248
+ }
249
+ return failedResult("network_error", error instanceof Error ? error.message : String(error));
250
+ }
251
+ }
252
+ export function printDeviceAuthorizationPrompt(deviceCode, log = console.log, timeoutMs = DEVICE_AUTH_TIMEOUT_MS, nowMs = Date.now()) {
253
+ const effectiveTimeoutMs = deviceCode.expiresAtMs === undefined
254
+ ? timeoutMs
255
+ : Math.min(timeoutMs, Math.max(0, deviceCode.expiresAtMs - nowMs));
256
+ log("Device auth login");
257
+ log(`Open: ${deviceCode.verificationUrl}`);
258
+ log(`Code: ${deviceCode.userCode}`);
259
+ log(`This code expires in ${formatWaitBudget(effectiveTimeoutMs)}. Never share it.`);
260
+ }
261
+ export async function pollDeviceAuthorization(deviceCode, options = {}) {
262
+ const now = getNow(options);
263
+ const startMs = now();
264
+ const timeoutMs = options.timeoutMs ?? DEVICE_AUTH_TIMEOUT_MS;
265
+ const deadline = Math.min(startMs + timeoutMs, deviceCode.expiresAtMs ?? Number.POSITIVE_INFINITY);
266
+ const effectiveTimeoutMs = Math.max(0, deadline - startMs);
267
+ try {
268
+ while (true) {
269
+ if (options.signal?.aborted) {
270
+ return abortedResult();
271
+ }
272
+ const response = await getFetch(options)(`${DEVICE_AUTH_API_BASE_URL}/deviceauth/token`, {
273
+ method: "POST",
274
+ headers: { "Content-Type": "application/json" },
275
+ signal: options.signal,
276
+ body: JSON.stringify({
277
+ device_auth_id: deviceCode.deviceAuthId,
278
+ user_code: deviceCode.userCode,
279
+ }),
280
+ });
281
+ if (response.ok) {
282
+ const payload = await readJsonRecord(response);
283
+ const completion = payload ? parseCompletionPayload(payload) : null;
284
+ if (!completion) {
285
+ return failedResult("invalid_response", "Device auth token response failed schema validation");
286
+ }
287
+ return { type: "success", completion };
288
+ }
289
+ if (isPendingStatus(response.status)) {
290
+ const nowMs = now();
291
+ const remainingMs = deadline - nowMs;
292
+ if (remainingMs <= 0) {
293
+ return failedResult("timeout", `Device auth timed out after ${formatWaitBudget(effectiveTimeoutMs)}`);
294
+ }
295
+ const delayMs = resolvePollDelayMs(response, deviceCode, nowMs, options);
296
+ await sleepWithAbort(Math.min(delayMs, remainingMs), options);
297
+ continue;
298
+ }
299
+ const safeText = await readFailureText(response);
300
+ return failedResult("http_error", safeText || `Device auth failed with status ${response.status}`, response.status);
301
+ }
302
+ }
303
+ catch (error) {
304
+ if (isAbortError(error) || options.signal?.aborted) {
305
+ return abortedResult();
306
+ }
307
+ return failedResult("network_error", error instanceof Error ? error.message : String(error));
308
+ }
309
+ }
310
+ export async function runDeviceAuthFlow(options = {}) {
311
+ const deviceCodeResult = await requestDeviceAuthorization(options);
312
+ if (deviceCodeResult.type !== "success") {
313
+ return deviceCodeResult;
314
+ }
315
+ if (options.signal?.aborted) {
316
+ return abortedResult();
317
+ }
318
+ printDeviceAuthorizationPrompt(deviceCodeResult.deviceCode, options.log ?? console.log, options.timeoutMs ?? DEVICE_AUTH_TIMEOUT_MS, getNow(options)());
319
+ const completionResult = await pollDeviceAuthorization(deviceCodeResult.deviceCode, options);
320
+ if (completionResult.type !== "success") {
321
+ return completionResult;
322
+ }
323
+ return exchangeAuthorizationCode(completionResult.completion.authorizationCode, completionResult.completion.codeVerifier, DEVICE_AUTH_REDIRECT_URI);
324
+ }
325
+ //# sourceMappingURL=device-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-auth.js","sourceRoot":"","sources":["../../../lib/auth/device-auth.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,4 @@
1
1
  export * from "./auth.js";
2
+ export { runDeviceAuthFlow } from "./device-auth.js";
3
+ export type { DeviceAuthFlowOptions } from "./device-auth.js";
2
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/auth/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/auth/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,YAAY,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -1,2 +1,3 @@
1
1
  export * from "./auth.js";
2
+ export { runDeviceAuthFlow } from "./device-auth.js";
2
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/auth/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/auth/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,39 @@
1
+ import type { UsageSummary } from "./usage/index.js";
2
+ export type BudgetWindow = "hour" | "day" | "week" | "month";
3
+ export interface BudgetLimit {
4
+ key: string;
5
+ window: BudgetWindow;
6
+ maxRequests?: number;
7
+ maxTokens?: number;
8
+ maxCostUsd?: number;
9
+ updatedAt: number;
10
+ }
11
+ export interface BudgetGuardStore {
12
+ version: 1;
13
+ limits: Record<string, BudgetLimit>;
14
+ }
15
+ export interface BudgetGuardEvaluation {
16
+ key: string;
17
+ window: BudgetWindow;
18
+ allowed: boolean;
19
+ reasons: string[];
20
+ usage: {
21
+ requests: number;
22
+ totalTokens: number;
23
+ costUsd: number;
24
+ };
25
+ limits: {
26
+ maxRequests: number | null;
27
+ maxTokens: number | null;
28
+ maxCostUsd: number | null;
29
+ };
30
+ }
31
+ export declare function getBudgetGuardPath(): string;
32
+ export declare function normalizeBudgetKey(value: string): string | null;
33
+ export declare function loadBudgetGuardStore(): Promise<BudgetGuardStore>;
34
+ export declare function saveBudgetGuardStore(store: BudgetGuardStore): Promise<void>;
35
+ export declare function upsertBudgetLimit(store: BudgetGuardStore, limit: Omit<BudgetLimit, "updatedAt">, now?: number): BudgetLimit;
36
+ export declare function getBudgetWindowStart(window: BudgetWindow, now?: number): number;
37
+ export declare function evaluateBudgetGuard(limit: BudgetLimit, summary: UsageSummary): BudgetGuardEvaluation;
38
+ export declare function resetBudgetGuardWriteQueueForTests(): void;
39
+ //# sourceMappingURL=budget-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"budget-guard.d.ts","sourceRoot":"","sources":["../../lib/budget-guard.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGrD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;AAE7D,MAAM,WAAW,WAAW;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,YAAY,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAChC,OAAO,EAAE,CAAC,CAAC;IACX,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,qBAAqB;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE;QACN,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,MAAM,EAAE;QACP,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;KAC1B,CAAC;CACF;AA6ED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE/D;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAatE;AAED,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsCjF;AAED,wBAAgB,iBAAiB,CAChC,KAAK,EAAE,gBAAgB,EACvB,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,EACrC,GAAG,SAAa,GACd,WAAW,CAOb;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,SAAa,GAAG,MAAM,CAoBnF;AAED,wBAAgB,mBAAmB,CAClC,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,YAAY,GACnB,qBAAqB,CAsCvB;AAED,wBAAgB,kCAAkC,IAAI,IAAI,CAEzD"}
@@ -0,0 +1,201 @@
1
+ import { existsSync, promises as fs } from "node:fs";
2
+ import { basename, join } from "node:path";
3
+ import { logWarn } from "./logger.js";
4
+ import { getCodexMultiAuthDir } from "./runtime-paths.js";
5
+ import { isRecord, sleep } from "./utils.js";
6
+ const BUDGET_GUARD_FILE_NAME = "budget-guards.json";
7
+ const RETRYABLE_FS_CODES = new Set(["EBUSY", "EPERM"]);
8
+ const VALID_WINDOWS = new Set(["hour", "day", "week", "month"]);
9
+ let writeQueue = Promise.resolve();
10
+ function isRetryableFsError(error) {
11
+ const code = error?.code;
12
+ return typeof code === "string" && RETRYABLE_FS_CODES.has(code);
13
+ }
14
+ function normalizeKey(value) {
15
+ const normalized = value.trim().toLowerCase().replace(/[^a-z0-9._:-]+/g, "-");
16
+ return normalized.length > 0 ? normalized.slice(0, 100) : null;
17
+ }
18
+ function normalizePositiveNumber(value) {
19
+ return typeof value === "number" && Number.isFinite(value) && value > 0
20
+ ? value
21
+ : undefined;
22
+ }
23
+ function normalizeLimit(key, value) {
24
+ if (!isRecord(value))
25
+ return null;
26
+ const window = typeof value.window === "string" && VALID_WINDOWS.has(value.window)
27
+ ? value.window
28
+ : null;
29
+ if (!window)
30
+ return null;
31
+ return {
32
+ key,
33
+ window,
34
+ maxRequests: normalizePositiveNumber(value.maxRequests),
35
+ maxTokens: normalizePositiveNumber(value.maxTokens),
36
+ maxCostUsd: normalizePositiveNumber(value.maxCostUsd),
37
+ updatedAt: typeof value.updatedAt === "number" && Number.isFinite(value.updatedAt)
38
+ ? value.updatedAt
39
+ : 0,
40
+ };
41
+ }
42
+ function emptyStore() {
43
+ return { version: 1, limits: {} };
44
+ }
45
+ function normalizeStore(value) {
46
+ if (!isRecord(value) || value.version !== 1)
47
+ return emptyStore();
48
+ const limits = {};
49
+ if (isRecord(value.limits)) {
50
+ for (const [rawKey, raw] of Object.entries(value.limits)) {
51
+ const key = normalizeKey(rawKey);
52
+ if (!key)
53
+ continue;
54
+ const limit = normalizeLimit(key, raw);
55
+ if (limit)
56
+ limits[key] = limit;
57
+ }
58
+ }
59
+ return { version: 1, limits };
60
+ }
61
+ async function readFileWithRetry(path) {
62
+ let lastError;
63
+ for (let attempt = 0; attempt < 5; attempt += 1) {
64
+ try {
65
+ return await fs.readFile(path, "utf8");
66
+ }
67
+ catch (error) {
68
+ lastError = error;
69
+ if (!isRetryableFsError(error) || attempt >= 4)
70
+ throw error;
71
+ await sleep(10 * 2 ** attempt);
72
+ }
73
+ }
74
+ throw lastError instanceof Error
75
+ ? lastError
76
+ : new Error("budget guard read retry exhausted");
77
+ }
78
+ export function getBudgetGuardPath() {
79
+ return join(getCodexMultiAuthDir(), BUDGET_GUARD_FILE_NAME);
80
+ }
81
+ export function normalizeBudgetKey(value) {
82
+ return normalizeKey(value);
83
+ }
84
+ export async function loadBudgetGuardStore() {
85
+ const path = getBudgetGuardPath();
86
+ if (!existsSync(path))
87
+ return emptyStore();
88
+ try {
89
+ return normalizeStore(JSON.parse(await readFileWithRetry(path)));
90
+ }
91
+ catch (error) {
92
+ logWarn(`Failed to load budget guards from ${basename(path)}: ${error instanceof Error ? error.message : String(error)}`);
93
+ return emptyStore();
94
+ }
95
+ }
96
+ export async function saveBudgetGuardStore(store) {
97
+ const path = getBudgetGuardPath();
98
+ const payload = normalizeStore(store);
99
+ const task = async () => {
100
+ await fs.mkdir(getCodexMultiAuthDir(), { recursive: true, mode: 0o700 });
101
+ const tempPath = `${path}.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2, 8)}.tmp`;
102
+ let moved = false;
103
+ try {
104
+ await fs.writeFile(tempPath, `${JSON.stringify(payload, null, 2)}\n`, {
105
+ encoding: "utf8",
106
+ mode: 0o600,
107
+ });
108
+ for (let attempt = 0; attempt < 5; attempt += 1) {
109
+ try {
110
+ await fs.rename(tempPath, path);
111
+ moved = true;
112
+ return;
113
+ }
114
+ catch (error) {
115
+ if (!isRetryableFsError(error) || attempt >= 4)
116
+ throw error;
117
+ await sleep(10 * 2 ** attempt);
118
+ }
119
+ }
120
+ }
121
+ finally {
122
+ if (!moved) {
123
+ try {
124
+ await fs.unlink(tempPath);
125
+ }
126
+ catch {
127
+ // Best-effort temp cleanup.
128
+ }
129
+ }
130
+ }
131
+ };
132
+ const queued = writeQueue.catch(() => undefined).then(task);
133
+ writeQueue = queued.then(() => undefined, () => undefined);
134
+ await queued;
135
+ }
136
+ export function upsertBudgetLimit(store, limit, now = Date.now()) {
137
+ const key = normalizeKey(limit.key);
138
+ if (!key)
139
+ throw new Error("Budget key is required");
140
+ const next = normalizeLimit(key, { ...limit, key, updatedAt: now });
141
+ if (!next)
142
+ throw new Error("Invalid budget limit");
143
+ store.limits[key] = next;
144
+ return next;
145
+ }
146
+ export function getBudgetWindowStart(window, now = Date.now()) {
147
+ const date = new Date(now);
148
+ if (window === "hour") {
149
+ date.setUTCMinutes(0, 0, 0);
150
+ return date.getTime();
151
+ }
152
+ if (window === "day") {
153
+ date.setUTCHours(0, 0, 0, 0);
154
+ return date.getTime();
155
+ }
156
+ if (window === "week") {
157
+ date.setUTCHours(0, 0, 0, 0);
158
+ const day = date.getUTCDay();
159
+ const mondayOffset = day === 0 ? 6 : day - 1;
160
+ date.setUTCDate(date.getUTCDate() - mondayOffset);
161
+ return date.getTime();
162
+ }
163
+ date.setUTCDate(1);
164
+ date.setUTCHours(0, 0, 0, 0);
165
+ return date.getTime();
166
+ }
167
+ export function evaluateBudgetGuard(limit, summary) {
168
+ const reasons = [];
169
+ if (typeof limit.maxRequests === "number" &&
170
+ summary.totals.requests >= limit.maxRequests) {
171
+ reasons.push(`request limit reached (${summary.totals.requests}/${limit.maxRequests})`);
172
+ }
173
+ if (typeof limit.maxTokens === "number" &&
174
+ summary.totals.totalTokens >= limit.maxTokens) {
175
+ reasons.push(`token limit reached (${summary.totals.totalTokens}/${limit.maxTokens})`);
176
+ }
177
+ if (typeof limit.maxCostUsd === "number" &&
178
+ summary.totals.costUsd >= limit.maxCostUsd) {
179
+ reasons.push(`cost limit reached (${summary.totals.costUsd.toFixed(6)}/${limit.maxCostUsd.toFixed(6)})`);
180
+ }
181
+ return {
182
+ key: limit.key,
183
+ window: limit.window,
184
+ allowed: reasons.length === 0,
185
+ reasons,
186
+ usage: {
187
+ requests: summary.totals.requests,
188
+ totalTokens: summary.totals.totalTokens,
189
+ costUsd: summary.totals.costUsd,
190
+ },
191
+ limits: {
192
+ maxRequests: limit.maxRequests ?? null,
193
+ maxTokens: limit.maxTokens ?? null,
194
+ maxCostUsd: limit.maxCostUsd ?? null,
195
+ },
196
+ };
197
+ }
198
+ export function resetBudgetGuardWriteQueueForTests() {
199
+ writeQueue = Promise.resolve();
200
+ }
201
+ //# sourceMappingURL=budget-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"budget-guard.js","sourceRoot":"","sources":["../../lib/budget-guard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { loadAccountPolicyStore, saveAccountPolicyStore } from "../../account-policy.js";
2
+ import type { AccountStorageV3 } from "../../storage.js";
3
+ export interface AccountCommandDeps {
4
+ setStoragePath: (path: string | null) => void;
5
+ loadAccounts: () => Promise<AccountStorageV3 | null>;
6
+ loadPolicyStore?: typeof loadAccountPolicyStore;
7
+ savePolicyStore?: typeof saveAccountPolicyStore;
8
+ logInfo?: (message: string) => void;
9
+ logError?: (message: string) => void;
10
+ getNow?: () => number;
11
+ }
12
+ export declare function runAccountCommand(args: string[], deps: AccountCommandDeps): Promise<number>;
13
+ //# sourceMappingURL=account.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../../lib/codex-manager/commands/account.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,sBAAsB,EAEtB,sBAAsB,EAGtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAqB,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAE5E,MAAM,WAAW,kBAAkB;IAClC,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC9C,YAAY,EAAE,MAAM,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IACrD,eAAe,CAAC,EAAE,OAAO,sBAAsB,CAAC;IAChD,eAAe,CAAC,EAAE,OAAO,sBAAsB,CAAC;IAChD,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC;CACtB;AAkDD,wBAAsB,iBAAiB,CACtC,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,EAAE,kBAAkB,GACtB,OAAO,CAAC,MAAM,CAAC,CA2HjB"}