@tokensrc/codex 1.13.4 → 1.14.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 (76) hide show
  1. package/README.md +79 -3
  2. package/dist/client.d.ts +29 -1
  3. package/dist/client.js +221 -2
  4. package/dist/client.js.map +1 -1
  5. package/dist/command-directory.d.ts +1 -0
  6. package/dist/command-directory.js +3 -2
  7. package/dist/command-directory.js.map +1 -1
  8. package/dist/commands.d.ts +8 -2
  9. package/dist/commands.js +567 -40
  10. package/dist/commands.js.map +1 -1
  11. package/dist/console-status.js +1 -1
  12. package/dist/console-status.js.map +1 -1
  13. package/dist/credential-supervisor.d.ts +17 -0
  14. package/dist/credential-supervisor.js +84 -0
  15. package/dist/credential-supervisor.js.map +1 -0
  16. package/dist/credentials.d.ts +75 -3
  17. package/dist/credentials.js +357 -12
  18. package/dist/credentials.js.map +1 -1
  19. package/dist/enrollment-envelope.d.ts +18 -0
  20. package/dist/enrollment-envelope.js +112 -0
  21. package/dist/enrollment-envelope.js.map +1 -0
  22. package/dist/enrollment-flow.d.ts +27 -0
  23. package/dist/enrollment-flow.js +224 -0
  24. package/dist/enrollment-flow.js.map +1 -0
  25. package/dist/enrollment-login.d.ts +26 -0
  26. package/dist/enrollment-login.js +104 -0
  27. package/dist/enrollment-login.js.map +1 -0
  28. package/dist/index.d.ts +13 -0
  29. package/dist/index.js +17 -3
  30. package/dist/index.js.map +1 -1
  31. package/dist/managed-credential-v3-envelope.d.ts +60 -0
  32. package/dist/managed-credential-v3-envelope.js +234 -0
  33. package/dist/managed-credential-v3-envelope.js.map +1 -0
  34. package/dist/managed-credential-v3-flow.d.ts +45 -0
  35. package/dist/managed-credential-v3-flow.js +499 -0
  36. package/dist/managed-credential-v3-flow.js.map +1 -0
  37. package/dist/managed-credential-v3-journal.d.ts +192 -0
  38. package/dist/managed-credential-v3-journal.js +153 -0
  39. package/dist/managed-credential-v3-journal.js.map +1 -0
  40. package/dist/managed-credential-v3.d.ts +117 -0
  41. package/dist/managed-credential-v3.js +423 -0
  42. package/dist/managed-credential-v3.js.map +1 -0
  43. package/dist/migration-login-batch.d.ts +66 -0
  44. package/dist/migration-login-batch.js +202 -0
  45. package/dist/migration-login-batch.js.map +1 -0
  46. package/dist/private-file.d.ts +10 -0
  47. package/dist/private-file.js +77 -2
  48. package/dist/private-file.js.map +1 -1
  49. package/dist/profile.d.ts +10 -0
  50. package/dist/profile.js +55 -2
  51. package/dist/profile.js.map +1 -1
  52. package/dist/protocol.d.ts +1070 -0
  53. package/dist/protocol.js +560 -0
  54. package/dist/protocol.js.map +1 -1
  55. package/dist/retirement-flow.d.ts +38 -0
  56. package/dist/retirement-flow.js +78 -0
  57. package/dist/retirement-flow.js.map +1 -0
  58. package/dist/runtime.d.ts +4 -1
  59. package/dist/runtime.js +29 -4
  60. package/dist/runtime.js.map +1 -1
  61. package/dist/selection.d.ts +10 -1
  62. package/dist/selection.js +38 -2
  63. package/dist/selection.js.map +1 -1
  64. package/dist/short-lived-delivery-flow.d.ts +41 -0
  65. package/dist/short-lived-delivery-flow.js +141 -0
  66. package/dist/short-lived-delivery-flow.js.map +1 -0
  67. package/dist/short-lived-delivery-journal.d.ts +34 -0
  68. package/dist/short-lived-delivery-journal.js +137 -0
  69. package/dist/short-lived-delivery-journal.js.map +1 -0
  70. package/dist/short-lived-delivery.d.ts +26 -0
  71. package/dist/short-lived-delivery.js +139 -0
  72. package/dist/short-lived-delivery.js.map +1 -0
  73. package/dist/tui.js +23 -0
  74. package/dist/tui.js.map +1 -1
  75. package/dist/types.d.ts +6 -2
  76. package/package.json +2 -2
@@ -0,0 +1,423 @@
1
+ import { createHash } from "node:crypto";
2
+ import { lstat, readFile } from "node:fs/promises";
3
+ import { homedir } from "node:os";
4
+ import { join } from "node:path";
5
+ import { z } from "zod";
6
+ import { CodexServiceError } from "./errors.js";
7
+ import { readJsonIfExists, removePrivateFileDurably, withPrivateFileLock, writePrivateJson } from "./private-file.js";
8
+ const MAX_AUTH_FILE_BYTES = 1024 * 1024;
9
+ const TOKEN_MAX = 65_536;
10
+ const InstantSchema = z.string().datetime({ offset: true });
11
+ const DigestSchema = z.string().length(64).regex(/^[0-9a-f]{64}$/);
12
+ const PreviousLineageSchema = z.strictObject({
13
+ assignmentId: z.string().min(1).max(255),
14
+ lineageId: z.string().min(1).max(255),
15
+ generationVersion: z.number().int().positive(),
16
+ authorityEpoch: z.number().int().nonnegative().nullable()
17
+ });
18
+ export const ManagedCodexV3StateSchema = z.strictObject({
19
+ schemaVersion: z.literal(3),
20
+ tenantId: z.string().min(1).max(255),
21
+ enrollmentId: z.string().min(1).max(255),
22
+ assignmentId: z.string().min(1).max(255),
23
+ managedAccountId: z.string().min(1).max(255),
24
+ providerAccountId: z.string().min(1).max(512),
25
+ lineageId: z.string().min(1).max(255),
26
+ generationVersion: z.number().int().positive(),
27
+ authorityMode: z.enum(["DELIVERY_PENDING", "CLIENT_MANAGED"]),
28
+ authorityEpoch: z.number().int().nonnegative().nullable(),
29
+ deliveryId: z.string().min(1).max(255),
30
+ ackIdempotencyKey: z.string().min(8).max(255),
31
+ credentialExpiresAt: InstantSchema,
32
+ ackExpiresAt: InstantSchema,
33
+ ackedAt: InstantSchema.nullable(),
34
+ phase: z.enum(["INSTALLING", "INSTALLED_PENDING_ACK", "INSTALLED"]),
35
+ accessTokenDigest: DigestSchema,
36
+ refreshTokenDigest: DigestSchema,
37
+ idTokenDigest: DigestSchema,
38
+ updatedAt: InstantSchema,
39
+ lastReportedAt: InstantSchema.nullable(),
40
+ previous: PreviousLineageSchema.nullable()
41
+ }).superRefine((value, context) => {
42
+ const acknowledged = value.phase === "INSTALLED";
43
+ if (acknowledged !== (value.authorityMode === "CLIENT_MANAGED")
44
+ || acknowledged !== (value.authorityEpoch != null)
45
+ || acknowledged !== (value.ackedAt != null)) {
46
+ context.addIssue({ code: "custom", message: "Managed credential ACK state is inconsistent." });
47
+ }
48
+ });
49
+ const FullAuthSchema = z.strictObject({
50
+ auth_mode: z.literal("chatgpt"),
51
+ OPENAI_API_KEY: z.unknown().optional(),
52
+ tokens: z.strictObject({
53
+ id_token: z.string().min(1).max(TOKEN_MAX),
54
+ access_token: z.string().min(1).max(TOKEN_MAX),
55
+ refresh_token: z.string().min(1).max(TOKEN_MAX),
56
+ account_id: z.string().min(1).max(512)
57
+ }),
58
+ last_refresh: InstantSchema.optional()
59
+ });
60
+ function paths(env = process.env) {
61
+ const codexHome = env.CODEX_HOME?.trim() || join(homedir(), ".codex");
62
+ return {
63
+ authPath: join(codexHome, "auth.json"),
64
+ backupPath: join(codexHome, "auth.json.numa-backup"),
65
+ statePath: join(codexHome, ".numa-managed-lineage.json")
66
+ };
67
+ }
68
+ function required(value, name, maximum = 255) {
69
+ if (value !== value.trim() || value.length < 1 || value.length > maximum) {
70
+ throw invalidCredentials(`${name} is invalid.`);
71
+ }
72
+ return value;
73
+ }
74
+ function instant(value, name) {
75
+ if (value !== value.trim() || !Number.isFinite(Date.parse(value))) {
76
+ throw invalidCredentials(`${name} is invalid.`);
77
+ }
78
+ return value;
79
+ }
80
+ function token(value, name) {
81
+ return required(value, name, TOKEN_MAX);
82
+ }
83
+ function digest(value) {
84
+ return createHash("sha256").update(value, "utf8").digest("hex");
85
+ }
86
+ function jwtExpiry(value) {
87
+ const payload = value.split(".")[1];
88
+ if (!payload)
89
+ return undefined;
90
+ try {
91
+ const decoded = JSON.parse(Buffer.from(payload, "base64url").toString("utf8"));
92
+ return typeof decoded.exp === "number" && Number.isFinite(decoded.exp)
93
+ ? decoded.exp * 1_000
94
+ : undefined;
95
+ }
96
+ catch {
97
+ return undefined;
98
+ }
99
+ }
100
+ function validJwt(value) {
101
+ const payload = value.split(".")[1];
102
+ if (!payload)
103
+ return false;
104
+ try {
105
+ JSON.parse(Buffer.from(payload, "base64url").toString("utf8"));
106
+ return true;
107
+ }
108
+ catch {
109
+ return false;
110
+ }
111
+ }
112
+ function invalidCredentials(message) {
113
+ return new CodexServiceError(message, "invalid_managed_codex_v3_credentials");
114
+ }
115
+ async function readFullAuth(env) {
116
+ const authPath = paths(env).authPath;
117
+ const file = await lstat(authPath).catch((error) => {
118
+ if (error.code === "ENOENT") {
119
+ throw invalidCredentials("Official Codex auth.json does not exist.");
120
+ }
121
+ throw error;
122
+ });
123
+ if (!file.isFile() || file.isSymbolicLink() || file.size > MAX_AUTH_FILE_BYTES) {
124
+ throw invalidCredentials("Official Codex auth.json is not a safe credential file.");
125
+ }
126
+ const encoded = await readFile(authPath);
127
+ try {
128
+ const parsed = FullAuthSchema.safeParse(JSON.parse(encoded.toString("utf8")));
129
+ if (!parsed.success)
130
+ throw invalidCredentials("Official Codex auth.json is incomplete.");
131
+ return parsed.data;
132
+ }
133
+ catch (error) {
134
+ if (error instanceof CodexServiceError)
135
+ throw error;
136
+ throw invalidCredentials("Official Codex auth.json is unreadable.");
137
+ }
138
+ finally {
139
+ encoded.fill(0);
140
+ }
141
+ }
142
+ export async function readManagedCodexV3State(env = process.env) {
143
+ const raw = await readJsonIfExists(paths(env).statePath);
144
+ if (raw === undefined)
145
+ return undefined;
146
+ const parsed = ManagedCodexV3StateSchema.safeParse(raw);
147
+ if (!parsed.success && raw && typeof raw === "object"
148
+ && raw.schemaVersion === 3) {
149
+ throw new CodexServiceError("The local v3 managed credential state is invalid.", "managed_codex_v3_state_invalid");
150
+ }
151
+ return parsed.success ? parsed.data : undefined;
152
+ }
153
+ export async function managedCodexV3StateExists(env = process.env) {
154
+ return (await readManagedCodexV3State(env)) !== undefined;
155
+ }
156
+ export async function withCurrentCodexFullCredentials(env, consume) {
157
+ const auth = await readFullAuth(env);
158
+ const expiresAt = jwtExpiry(auth.tokens.access_token);
159
+ if (expiresAt === undefined)
160
+ throw invalidCredentials("Official Codex access_token has no usable expiry.");
161
+ const credentials = {
162
+ refreshToken: auth.tokens.refresh_token,
163
+ accessToken: auth.tokens.access_token,
164
+ idToken: auth.tokens.id_token,
165
+ providerAccountId: auth.tokens.account_id,
166
+ expiresAt: new Date(expiresAt).toISOString(),
167
+ ...(auth.last_refresh ? { lastRefresh: auth.last_refresh } : {})
168
+ };
169
+ try {
170
+ return await consume(credentials);
171
+ }
172
+ finally {
173
+ credentials.refreshToken = "";
174
+ credentials.accessToken = "";
175
+ credentials.idToken = "";
176
+ credentials.providerAccountId = "";
177
+ }
178
+ }
179
+ export async function installManagedCodexV3Credentials(raw, now = Date.now(), env = process.env, hooks = {}) {
180
+ const input = {
181
+ tenantId: required(raw.tenantId, "tenantId"),
182
+ enrollmentId: required(raw.enrollmentId, "enrollmentId"),
183
+ assignmentId: required(raw.assignmentId, "assignmentId"),
184
+ managedAccountId: required(raw.managedAccountId, "managedAccountId"),
185
+ providerAccountId: required(raw.providerAccountId, "providerAccountId", 512),
186
+ lineageId: required(raw.lineageId, "lineageId"),
187
+ generationVersion: raw.generationVersion,
188
+ deliveryId: required(raw.deliveryId, "deliveryId"),
189
+ ackIdempotencyKey: required(raw.ackIdempotencyKey, "ackIdempotencyKey"),
190
+ refreshToken: token(raw.refreshToken, "refreshToken"),
191
+ accessToken: token(raw.accessToken, "accessToken"),
192
+ idToken: token(raw.idToken, "idToken"),
193
+ credentialExpiresAt: instant(raw.credentialExpiresAt, "credentialExpiresAt"),
194
+ ackExpiresAt: instant(raw.ackExpiresAt, "ackExpiresAt"),
195
+ ...(raw.lastRefresh ? { lastRefresh: instant(raw.lastRefresh, "lastRefresh") } : {})
196
+ };
197
+ if (!Number.isInteger(input.generationVersion) || input.generationVersion <= 0) {
198
+ throw invalidCredentials("generationVersion must be positive.");
199
+ }
200
+ if (!validJwt(input.idToken) || !validJwt(input.accessToken)) {
201
+ throw invalidCredentials("The delivered access/id token is invalid.");
202
+ }
203
+ if (Date.parse(input.credentialExpiresAt) <= now || Date.parse(input.ackExpiresAt) <= now) {
204
+ throw new CodexServiceError("The full credential delivery has expired.", "full_credential_delivery_expired");
205
+ }
206
+ const value = paths(env);
207
+ return withPrivateFileLock(value.authPath, async () => {
208
+ await removePrivateFileDurably(value.backupPath);
209
+ const current = await readManagedCodexV3State(env);
210
+ const sameLineage = current?.tenantId === input.tenantId
211
+ && current.assignmentId === input.assignmentId
212
+ && current.lineageId === input.lineageId;
213
+ if (sameLineage && current.generationVersion > input.generationVersion) {
214
+ throw new CodexServiceError("Refusing a stale v3 credential generation.", "lineage_version_conflict");
215
+ }
216
+ const tokenDigests = {
217
+ accessTokenDigest: digest(input.accessToken),
218
+ refreshTokenDigest: digest(input.refreshToken),
219
+ idTokenDigest: digest(input.idToken)
220
+ };
221
+ if (sameLineage && current.generationVersion === input.generationVersion
222
+ && current.deliveryId === input.deliveryId) {
223
+ const auth = await readFullAuth(env).catch(() => undefined);
224
+ const matches = auth !== undefined && auth.tokens.account_id === input.providerAccountId
225
+ && digest(auth.tokens.access_token) === tokenDigests.accessTokenDigest
226
+ && digest(auth.tokens.refresh_token) === tokenDigests.refreshTokenDigest
227
+ && digest(auth.tokens.id_token) === tokenDigests.idTokenDigest;
228
+ if (current.phase !== "INSTALLING" && !matches)
229
+ throw new CodexServiceError("The same v3 generation has different local credentials.", "lineage_version_conflict");
230
+ if (current.phase === "INSTALLING" && auth !== undefined && !matches)
231
+ throw new CodexServiceError("The interrupted v3 installation has different local credentials.", "lineage_version_conflict");
232
+ if (current.phase !== "INSTALLING") {
233
+ return { action: "UNCHANGED", authPath: value.authPath, statePath: value.statePath, state: current };
234
+ }
235
+ }
236
+ else if (sameLineage && current?.generationVersion === input.generationVersion) {
237
+ throw new CodexServiceError("The same v3 generation has a different delivery.", "lineage_version_conflict");
238
+ }
239
+ const timestamp = new Date(now).toISOString();
240
+ const previous = current ? {
241
+ assignmentId: current.assignmentId,
242
+ lineageId: current.lineageId,
243
+ generationVersion: current.generationVersion,
244
+ authorityEpoch: current.authorityEpoch
245
+ } : null;
246
+ const installing = ManagedCodexV3StateSchema.parse({
247
+ schemaVersion: 3,
248
+ tenantId: input.tenantId,
249
+ enrollmentId: input.enrollmentId,
250
+ assignmentId: input.assignmentId,
251
+ managedAccountId: input.managedAccountId,
252
+ providerAccountId: input.providerAccountId,
253
+ lineageId: input.lineageId,
254
+ generationVersion: input.generationVersion,
255
+ authorityMode: "DELIVERY_PENDING",
256
+ authorityEpoch: null,
257
+ deliveryId: input.deliveryId,
258
+ ackIdempotencyKey: input.ackIdempotencyKey,
259
+ credentialExpiresAt: input.credentialExpiresAt,
260
+ ackExpiresAt: input.ackExpiresAt,
261
+ ackedAt: null,
262
+ phase: "INSTALLING",
263
+ ...tokenDigests,
264
+ updatedAt: timestamp,
265
+ lastReportedAt: null,
266
+ previous
267
+ });
268
+ await writePrivateJson(value.statePath, installing);
269
+ await hooks.afterInstallingState?.();
270
+ await writePrivateJson(value.authPath, {
271
+ auth_mode: "chatgpt",
272
+ OPENAI_API_KEY: null,
273
+ tokens: {
274
+ id_token: input.idToken,
275
+ access_token: input.accessToken,
276
+ refresh_token: input.refreshToken,
277
+ account_id: input.providerAccountId
278
+ },
279
+ last_refresh: input.lastRefresh ?? timestamp
280
+ });
281
+ await hooks.afterAuthWrite?.();
282
+ const installed = ManagedCodexV3StateSchema.parse({
283
+ ...installing,
284
+ phase: "INSTALLED_PENDING_ACK",
285
+ updatedAt: timestamp
286
+ });
287
+ await writePrivateJson(value.statePath, installed);
288
+ return {
289
+ action: current
290
+ ? (sameLineage && current.phase === "INSTALLING" ? "RECOVERED" : "REPLACED")
291
+ : "INSTALLED",
292
+ authPath: value.authPath,
293
+ statePath: value.statePath,
294
+ state: installed
295
+ };
296
+ });
297
+ }
298
+ export async function markManagedCodexV3DeliveryAcknowledged(input, env = process.env) {
299
+ const value = paths(env);
300
+ return withPrivateFileLock(value.authPath, async () => {
301
+ const current = await readManagedCodexV3State(env);
302
+ if (!current || current.deliveryId !== input.deliveryId
303
+ || current.generationVersion !== input.generationVersion) {
304
+ throw new CodexServiceError("The v3 ACK does not match local credentials.", "lineage_version_conflict");
305
+ }
306
+ if (!Number.isInteger(input.authorityEpoch) || input.authorityEpoch <= 0) {
307
+ throw invalidCredentials("authorityEpoch must be positive.");
308
+ }
309
+ const ackedAt = instant(input.ackedAt, "ackedAt");
310
+ if (current.phase === "INSTALLED") {
311
+ if (current.authorityEpoch !== input.authorityEpoch || current.ackedAt !== ackedAt) {
312
+ throw new CodexServiceError("The replayed v3 ACK differs from local state.", "lineage_version_conflict");
313
+ }
314
+ return current;
315
+ }
316
+ if (current.phase !== "INSTALLED_PENDING_ACK") {
317
+ throw new CodexServiceError("The v3 credentials are not ready for ACK.", "lineage_version_conflict");
318
+ }
319
+ const acknowledged = ManagedCodexV3StateSchema.parse({
320
+ ...current,
321
+ phase: "INSTALLED",
322
+ authorityMode: "CLIENT_MANAGED",
323
+ authorityEpoch: input.authorityEpoch,
324
+ ackedAt,
325
+ updatedAt: ackedAt
326
+ });
327
+ await writePrivateJson(value.statePath, acknowledged);
328
+ return acknowledged;
329
+ });
330
+ }
331
+ export async function withManagedCodexV3CredentialObservation(env, now, consume) {
332
+ const value = paths(env);
333
+ const observation = await withPrivateFileLock(value.authPath, async () => {
334
+ const state = await readManagedCodexV3State(env);
335
+ if (!state || state.phase !== "INSTALLED" || state.authorityMode !== "CLIENT_MANAGED")
336
+ return undefined;
337
+ const auth = await readFullAuth(env).catch(() => undefined);
338
+ if (!auth || auth.tokens.account_id !== state.providerAccountId)
339
+ return undefined;
340
+ const accessExpiresAt = jwtExpiry(auth.tokens.access_token);
341
+ const observedAt = new Date(now).toISOString();
342
+ return {
343
+ state,
344
+ rotationMode: digest(auth.tokens.refresh_token) === state.refreshTokenDigest ? "RETAINED" : "ROTATED",
345
+ accessTokenHealth: accessExpiresAt === undefined
346
+ ? "UNKNOWN"
347
+ : accessExpiresAt <= now ? "EXPIRED" : "HEALTHY",
348
+ refreshTokenHealth: auth.tokens.refresh_token ? "HEALTHY" : "UNKNOWN",
349
+ observedAt,
350
+ credentialExpiresAt: accessExpiresAt === undefined
351
+ ? state.credentialExpiresAt
352
+ : new Date(accessExpiresAt).toISOString(),
353
+ credentials: {
354
+ refreshToken: auth.tokens.refresh_token,
355
+ accessToken: auth.tokens.access_token,
356
+ idToken: auth.tokens.id_token,
357
+ providerAccountId: auth.tokens.account_id
358
+ }
359
+ };
360
+ });
361
+ if (!observation)
362
+ return undefined;
363
+ // Never hold the auth.json writer lock while a caller performs network I/O.
364
+ // The commit path below revalidates the exact observed credential digests.
365
+ try {
366
+ return await consume(observation);
367
+ }
368
+ finally {
369
+ observation.credentials.refreshToken = "";
370
+ observation.credentials.accessToken = "";
371
+ observation.credentials.idToken = "";
372
+ observation.credentials.providerAccountId = "";
373
+ }
374
+ }
375
+ export async function commitManagedCodexV3GenerationReport(input, env = process.env) {
376
+ const value = paths(env);
377
+ return withPrivateFileLock(value.authPath, async () => {
378
+ const current = await readManagedCodexV3State(env);
379
+ if (!current || current.phase !== "INSTALLED" || current.lineageId !== input.lineageId
380
+ || current.generationVersion !== input.previousGenerationVersion
381
+ || input.generationVersion !== input.previousGenerationVersion + 1
382
+ || !Number.isInteger(input.authorityEpoch) || input.authorityEpoch <= 0) {
383
+ throw new CodexServiceError("The v3 generation report does not match local state.", "lineage_version_conflict");
384
+ }
385
+ const expectedDigests = {
386
+ accessTokenDigest: DigestSchema.parse(input.tokenDigests.accessTokenDigest),
387
+ refreshTokenDigest: DigestSchema.parse(input.tokenDigests.refreshTokenDigest),
388
+ idTokenDigest: DigestSchema.parse(input.tokenDigests.idTokenDigest)
389
+ };
390
+ const auth = await readFullAuth(env).catch(() => undefined);
391
+ if (!auth || auth.tokens.account_id !== current.providerAccountId
392
+ || digest(auth.tokens.access_token) !== expectedDigests.accessTokenDigest
393
+ || digest(auth.tokens.refresh_token) !== expectedDigests.refreshTokenDigest
394
+ || digest(auth.tokens.id_token) !== expectedDigests.idTokenDigest) {
395
+ throw new CodexServiceError("Official Codex credentials changed while the generation report was in flight.", "lineage_version_conflict");
396
+ }
397
+ const updated = ManagedCodexV3StateSchema.parse({
398
+ ...current,
399
+ generationVersion: input.generationVersion,
400
+ authorityEpoch: input.authorityEpoch,
401
+ credentialExpiresAt: instant(input.credentialExpiresAt, "credentialExpiresAt"),
402
+ ...expectedDigests,
403
+ updatedAt: instant(input.observedAt, "observedAt"),
404
+ lastReportedAt: input.observedAt,
405
+ previous: {
406
+ assignmentId: current.assignmentId,
407
+ lineageId: current.lineageId,
408
+ generationVersion: current.generationVersion,
409
+ authorityEpoch: current.authorityEpoch
410
+ }
411
+ });
412
+ await writePrivateJson(value.statePath, updated);
413
+ return updated;
414
+ });
415
+ }
416
+ export function codexV3CredentialDigests(credentials) {
417
+ return {
418
+ accessTokenDigest: digest(credentials.accessToken),
419
+ refreshTokenDigest: digest(credentials.refreshToken),
420
+ idTokenDigest: digest(credentials.idToken)
421
+ };
422
+ }
423
+ //# sourceMappingURL=managed-credential-v3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"managed-credential-v3.js","sourceRoot":"","sources":["../src/managed-credential-v3.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ import type { CodexServiceClient } from "./client.js";
2
+ import { executeCodexEnrollmentLogin } from "./enrollment-flow.js";
3
+ import { CODEX_MIGRATION_CAPACITY, type CodexEnrollmentCandidateResponse, type CodexMigrationLoginQueueResponse, type CodexMigrationPlanStatus, type CodexMigrationTarget } from "./protocol.js";
4
+ type MigrationBatchClient = Pick<CodexServiceClient, "listMigrationLoginQueue" | "getEnrollmentIntent" | "claimEnrollmentIntent" | "heartbeatEnrollmentIntent" | "uploadEnrollmentCandidate">;
5
+ type EnrollmentExecutor = typeof executeCodexEnrollmentLogin;
6
+ export type CodexMigrationBatchStopReason = "DRY_RUN" | "QUEUE_EXHAUSTED" | "PAUSED" | "CANCELLED" | "COMPLETED" | "TARGET_UNCERTAIN" | "AUTHENTICATION_ERROR" | "SERVICE_ERROR" | "LOGIN_ERROR";
7
+ export interface CodexMigrationLoginBatchItemResult {
8
+ targetId: string;
9
+ assignmentId: string;
10
+ intentId: string | null;
11
+ requestedAction: "LOGIN" | "VIEW_ENROLLMENT" | "NONE";
12
+ action: "LOGIN" | "SKIP";
13
+ status: "PLANNED" | "COMPLETED" | "FAILED" | "SKIPPED";
14
+ outcome?: CodexEnrollmentCandidateResponse["result"]["outcome"];
15
+ intentStatus?: CodexEnrollmentCandidateResponse["intent"]["status"];
16
+ safeErrorCode?: string | null;
17
+ skipReason?: "VIEW_ENROLLMENT" | "ALREADY_USER_BOUND" | "NO_ACTION";
18
+ }
19
+ export interface CodexMigrationLoginBatchResult {
20
+ schemaVersion: 2;
21
+ plan: {
22
+ id: string;
23
+ status: CodexMigrationPlanStatus;
24
+ revision: number;
25
+ accountId: string;
26
+ sequentialRequired: true;
27
+ };
28
+ capacity: typeof CODEX_MIGRATION_CAPACITY;
29
+ dryRun: boolean;
30
+ stopReason: CodexMigrationBatchStopReason;
31
+ counts: {
32
+ observed: number;
33
+ plannedLogins: number;
34
+ attempted: number;
35
+ completed: number;
36
+ failed: number;
37
+ skipped: number;
38
+ };
39
+ items: CodexMigrationLoginBatchItemResult[];
40
+ }
41
+ interface QueueSnapshot {
42
+ plan: CodexMigrationLoginQueueResponse["plan"];
43
+ items: CodexMigrationTarget[];
44
+ }
45
+ /** Loads all pages and rejects a mixed-revision snapshot instead of reordering targets. */
46
+ export declare function loadCodexMigrationLoginQueueSnapshot(input: {
47
+ client: Pick<MigrationBatchClient, "listMigrationLoginQueue">;
48
+ planId: string;
49
+ pageSize?: number;
50
+ maxSnapshotAttempts?: number;
51
+ }): Promise<QueueSnapshot>;
52
+ /**
53
+ * Executes at most one isolated official login at a time. The queue is fetched
54
+ * again after every handled target so pause/cancel/completion takes effect before
55
+ * another refresh token can be generated.
56
+ */
57
+ export declare function executeCodexMigrationLoginBatch(input: {
58
+ client: MigrationBatchClient;
59
+ tenantId: string;
60
+ planId: string;
61
+ deviceAuth?: boolean;
62
+ dryRun?: boolean;
63
+ pageSize?: number;
64
+ executeEnrollment?: EnrollmentExecutor;
65
+ }): Promise<CodexMigrationLoginBatchResult>;
66
+ export {};