@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
package/dist/protocol.js CHANGED
@@ -5,6 +5,25 @@ export const CODEX_ACCOUNTS_LIST_PATH = CODEX_ACCOUNTS_PATH;
5
5
  export const CODEX_ACCOUNTS_IMPORT_PATH = "/v1/admin/codex/accounts/import";
6
6
  export const CODEX_ADMIN_ACCOUNTS_PATH = "/v1/admin/codex/accounts";
7
7
  export const CODEX_ADMIN_ASSIGNMENTS_PATH = "/v1/admin/codex/assignments";
8
+ export const CODEX_ENROLLMENT_SCHEMA_VERSION = 2;
9
+ export const CODEX_ADMIN_ENROLLMENT_INTENTS_PATH = "/v2/admin/codex/enrollment-intents";
10
+ export const CODEX_CREDENTIAL_ASSIGNMENTS_PATH = "/v2/codex/credential-assignments";
11
+ export const CODEX_SHORT_LIVED_DELIVERIES_PATH = "/v2/codex/short-lived-credential-deliveries";
12
+ export const CODEX_ASSIGNMENT_RETIREMENTS_PATH = "/v2/codex/assignment-retirements";
13
+ export const CODEX_ADMIN_MIGRATION_PLANS_PATH = "/v2/admin/codex/migration-plans";
14
+ export const CODEX_MANAGED_CREDENTIALS_V3_SCHEMA_VERSION = 3;
15
+ // The configured service URL already includes the public `/api` prefix.
16
+ export const CODEX_MANAGED_CREDENTIALS_V3_PATH = "/v3/codex";
17
+ export const CODEX_V3_ENROLLMENT_CONFIGURATION_PATH = `${CODEX_MANAGED_CREDENTIALS_V3_PATH}/enrollment-configuration`;
18
+ export const CODEX_V3_ENROLLMENTS_PATH = `${CODEX_MANAGED_CREDENTIALS_V3_PATH}/enrollments`;
19
+ export const CODEX_V3_CREDENTIAL_ASSIGNMENTS_PATH = `${CODEX_MANAGED_CREDENTIALS_V3_PATH}/credential-assignments`;
20
+ export const CODEX_V3_FULL_CREDENTIAL_DELIVERIES_PATH = `${CODEX_MANAGED_CREDENTIALS_V3_PATH}/full-credential-deliveries`;
21
+ export const CODEX_V3_CREDENTIAL_LINEAGES_PATH = `${CODEX_MANAGED_CREDENTIALS_V3_PATH}/credential-lineages`;
22
+ export const CODEX_MIGRATION_CAPACITY = {
23
+ verifiedMinimum: 2,
24
+ verifiedLimit: null,
25
+ sequentialRequired: true
26
+ };
8
27
  const CodexCompatibilityLabelSchema = z.string().max(256)
9
28
  .transform((label) => label.trim() ? label : undefined)
10
29
  .optional();
@@ -43,6 +62,19 @@ export const CodexAccountSummarySchema = z.object({
43
62
  isDefault: z.boolean(),
44
63
  accessExpiresAt: z.number().int().positive().optional(),
45
64
  credentialStatus: z.enum(["AVAILABLE", "NEEDS_REAUTH", "TEMPORARILY_UNAVAILABLE"]).optional(),
65
+ lineageStatus: z.enum([
66
+ "ENROLLING",
67
+ "READY",
68
+ "DELIVERY_UNKNOWN",
69
+ "ACTIVE",
70
+ "SYNC_LAGGING",
71
+ "DIVERGED",
72
+ "LOST",
73
+ "NEEDS_REAUTH",
74
+ "RETIREMENT_PENDING",
75
+ "RETIRED",
76
+ "COMPROMISED"
77
+ ]).optional(),
46
78
  quota: CodexQuotaSnapshotViewSchema.nullable().optional()
47
79
  });
48
80
  export const CodexAccountListResponseSchema = z.object({
@@ -220,6 +252,491 @@ export const CodexAdminAssignmentDeleteResponseSchema = z.strictObject({
220
252
  schemaVersion: z.literal(CODEX_DISTRIBUTION_SCHEMA_VERSION),
221
253
  assignmentId: z.string().min(1).max(128)
222
254
  });
255
+ export const CodexEnrollmentIntentReasonSchema = z.enum([
256
+ "NEW",
257
+ "REPLACE_LOST",
258
+ "REPLACE_REJECTED",
259
+ "REPLACE_DIVERGED",
260
+ "REPLACE_ADMIN"
261
+ ]);
262
+ export const CodexEnrollmentIntentStatusSchema = z.enum([
263
+ "AWAITING_CLI",
264
+ "CLAIMED",
265
+ "LOGIN_IN_PROGRESS",
266
+ "UPLOADING",
267
+ "VALIDATING",
268
+ "READY",
269
+ "ACCOUNT_MISMATCH",
270
+ "IDENTITY_UNVERIFIABLE",
271
+ "TEMPORARILY_UNAVAILABLE",
272
+ "OUTCOME_AMBIGUOUS",
273
+ "EXPIRED",
274
+ "CANCELLED"
275
+ ]);
276
+ const EnrollmentInstantSchema = z.string().datetime({ offset: true });
277
+ export const CodexEnrollmentIntentSchema = z.strictObject({
278
+ id: z.string().min(1).max(128),
279
+ type: z.enum(["ACCOUNT_DISCOVERY", "ASSIGNMENT_ENROLLMENT"]),
280
+ status: CodexEnrollmentIntentStatusSchema,
281
+ revision: z.number().int().nonnegative(),
282
+ reason: CodexEnrollmentIntentReasonSchema,
283
+ assignmentId: z.string().min(1).max(128).nullable(),
284
+ managedAccountId: z.string().min(1).max(128).nullable(),
285
+ userSubject: z.string().min(1).max(255).nullable(),
286
+ createdAt: EnrollmentInstantSchema,
287
+ expiresAt: EnrollmentInstantSchema,
288
+ claimedAt: EnrollmentInstantSchema.nullable(),
289
+ lastHeartbeatAt: EnrollmentInstantSchema.nullable(),
290
+ cancelledAt: EnrollmentInstantSchema.nullable(),
291
+ updatedAt: EnrollmentInstantSchema,
292
+ safeErrorCode: z.string().min(1).max(128).regex(/^[a-z][a-z0-9_.-]*$/i).nullable(),
293
+ resultManagedAccountId: z.string().min(1).max(128).nullable(),
294
+ resultLineageId: z.string().min(1).max(128).nullable(),
295
+ currentGenerationVersion: z.number().int().positive().nullable(),
296
+ allowedActions: z.array(z.string().min(1).max(64).regex(/^[A-Z][A-Z0-9_]*$/)).max(32)
297
+ });
298
+ export const CodexEnrollmentCandidateIngressSchema = z.strictObject({
299
+ envelopeVersion: z.literal(1),
300
+ algorithm: z.literal("X25519-HKDF-SHA256-AES-256-GCM"),
301
+ keyId: z.string().min(1).max(128).regex(/^[A-Za-z0-9._:-]+$/),
302
+ publicKey: z.string().length(43).regex(/^[A-Za-z0-9_-]+$/),
303
+ maxRequestBytes: z.number().int().min(1_024).max(196_608),
304
+ maxCiphertextBytes: z.number().int().min(256).max(131_072)
305
+ });
306
+ export const CodexEnrollmentCapabilitiesSchema = z.strictObject({
307
+ enrollmentIntents: z.boolean(),
308
+ candidateUpload: z.boolean(),
309
+ delivery: z.boolean(),
310
+ rotationSync: z.boolean(),
311
+ candidateIngress: CodexEnrollmentCandidateIngressSchema.optional()
312
+ }).superRefine((capabilities, context) => {
313
+ if (capabilities.candidateUpload && !capabilities.candidateIngress) {
314
+ context.addIssue({
315
+ code: "custom",
316
+ path: ["candidateIngress"],
317
+ message: "candidateIngress is required when candidateUpload is enabled."
318
+ });
319
+ }
320
+ });
321
+ export const CodexEnrollmentIntentResponseSchema = z.strictObject({
322
+ schemaVersion: z.literal(CODEX_ENROLLMENT_SCHEMA_VERSION),
323
+ intent: CodexEnrollmentIntentSchema,
324
+ capabilities: CodexEnrollmentCapabilitiesSchema
325
+ });
326
+ export const CodexEnrollmentMutationInputSchema = z.strictObject({
327
+ idempotencyKey: z.string().min(8).max(255),
328
+ revision: z.number().int().nonnegative()
329
+ });
330
+ export const CodexEnrollmentHeartbeatInputSchema = CodexEnrollmentMutationInputSchema.extend({
331
+ phase: z.enum(["LOGIN_IN_PROGRESS", "UPLOADING"])
332
+ });
333
+ export const CodexEnrollmentCandidateEnvelopeSchema = z.strictObject({
334
+ version: z.literal(1),
335
+ algorithm: z.literal("X25519-HKDF-SHA256-AES-256-GCM"),
336
+ keyId: z.string().min(1).max(128).regex(/^[A-Za-z0-9._:-]+$/),
337
+ ephemeralPublicKey: z.string().length(43).regex(/^[A-Za-z0-9_-]+$/),
338
+ salt: z.string().length(43).regex(/^[A-Za-z0-9_-]+$/),
339
+ nonce: z.string().length(16).regex(/^[A-Za-z0-9_-]+$/),
340
+ ciphertext: z.string().min(1).max(174_764).regex(/^[A-Za-z0-9_-]+$/),
341
+ authenticationTag: z.string().length(22).regex(/^[A-Za-z0-9_-]+$/)
342
+ });
343
+ export const CodexEnrollmentCandidateInputSchema = z.strictObject({
344
+ schemaVersion: z.literal(CODEX_ENROLLMENT_SCHEMA_VERSION),
345
+ revision: z.number().int().nonnegative(),
346
+ envelope: CodexEnrollmentCandidateEnvelopeSchema
347
+ });
348
+ export const CodexEnrollmentCandidateResultSchema = z.strictObject({
349
+ outcome: z.enum([
350
+ "READY",
351
+ "ACCOUNT_MISMATCH",
352
+ "IDENTITY_UNVERIFIABLE",
353
+ "TEMPORARILY_UNAVAILABLE",
354
+ "OUTCOME_AMBIGUOUS"
355
+ ]),
356
+ managedAccountId: z.string().min(1).max(128).nullable(),
357
+ lineageId: z.string().min(1).max(128).nullable(),
358
+ generationVersion: z.number().int().positive().nullable(),
359
+ replayed: z.boolean()
360
+ });
361
+ export const CodexEnrollmentCandidateResponseSchema = CodexEnrollmentIntentResponseSchema.extend({
362
+ result: CodexEnrollmentCandidateResultSchema
363
+ });
364
+ export const CodexMigrationPlanStatusSchema = z.enum([
365
+ "ACTIVE",
366
+ "PAUSED",
367
+ "CANCELLED",
368
+ "COMPLETED"
369
+ ]);
370
+ export const CodexMigrationTargetSchema = z.strictObject({
371
+ id: z.string().min(1).max(255),
372
+ assignmentId: z.string().min(1).max(255),
373
+ userSubject: z.string().min(1).max(255),
374
+ distributionMode: z.enum(["LEGACY", "MIGRATING", "USER_BOUND"]),
375
+ projectedStatus: z.enum([
376
+ "UNENROLLED",
377
+ "AWAITING_CLI",
378
+ "ENROLLING",
379
+ "VALIDATING",
380
+ "READY",
381
+ "DELIVERY_UNKNOWN",
382
+ "ACTIVE",
383
+ "SYNC_LAGGING",
384
+ "DIVERGED",
385
+ "LOST",
386
+ "NEEDS_REAUTH",
387
+ "RETIREMENT_PENDING",
388
+ "RETIRED",
389
+ "COMPROMISED",
390
+ "LEGACY_V1"
391
+ ]),
392
+ enrollmentAttachment: z.enum(["CREATED", "REUSED", "NONE"]),
393
+ enrollmentIntent: z.strictObject({
394
+ id: z.string().min(1).max(255),
395
+ status: CodexEnrollmentIntentStatusSchema,
396
+ revision: z.number().int().nonnegative(),
397
+ expiresAt: EnrollmentInstantSchema,
398
+ updatedAt: EnrollmentInstantSchema,
399
+ safeErrorCode: z.string().min(1).max(128).regex(/^[a-z][a-z0-9_.-]*$/i).nullable()
400
+ }).nullable(),
401
+ allowedAction: z.enum(["LOGIN", "VIEW_ENROLLMENT", "NONE"])
402
+ });
403
+ export const CodexMigrationLoginQueueResponseSchema = z.strictObject({
404
+ schemaVersion: z.literal(CODEX_ENROLLMENT_SCHEMA_VERSION),
405
+ plan: z.strictObject({
406
+ id: z.string().min(1).max(255),
407
+ status: CodexMigrationPlanStatusSchema,
408
+ revision: z.number().int().nonnegative(),
409
+ accountId: z.string().min(1).max(255),
410
+ sequentialRequired: z.literal(true)
411
+ }),
412
+ items: z.array(CodexMigrationTargetSchema).max(100),
413
+ total: z.number().int().nonnegative(),
414
+ page: z.number().int().min(1).max(1_000_000),
415
+ pageSize: z.number().int().min(1).max(100)
416
+ }).superRefine((value, context) => {
417
+ if (value.items.length > value.pageSize || value.items.length > value.total) {
418
+ context.addIssue({
419
+ code: "custom",
420
+ path: ["items"],
421
+ message: "Migration login queue pagination is inconsistent."
422
+ });
423
+ }
424
+ });
425
+ export const CodexUserCredentialAssignmentSchema = z.strictObject({
426
+ assignmentId: z.string().min(1).max(128),
427
+ managedAccountId: z.string().min(1).max(128),
428
+ label: z.string().min(1).max(256),
429
+ distributionMode: z.literal("SERVER_MANAGED_SHORT_LIVED"),
430
+ lineageStatus: z.enum([
431
+ "ENROLLING",
432
+ "READY",
433
+ "DELIVERY_UNKNOWN",
434
+ "ACTIVE",
435
+ "SYNC_LAGGING",
436
+ "DIVERGED",
437
+ "LOST",
438
+ "NEEDS_REAUTH",
439
+ "RETIREMENT_PENDING",
440
+ "RETIRED",
441
+ "COMPROMISED"
442
+ ]).nullable(),
443
+ generationVersion: z.number().int().positive().nullable(),
444
+ credentialExpiresAt: EnrollmentInstantSchema.nullable(),
445
+ deliveryEligible: z.boolean()
446
+ });
447
+ export const CodexUserCredentialAssignmentListResponseSchema = z.strictObject({
448
+ schemaVersion: z.literal(CODEX_ENROLLMENT_SCHEMA_VERSION),
449
+ items: z.array(CodexUserCredentialAssignmentSchema),
450
+ total: z.number().int().nonnegative()
451
+ }).superRefine((value, context) => {
452
+ if (value.total !== value.items.length) {
453
+ context.addIssue({
454
+ code: "custom",
455
+ path: ["total"],
456
+ message: "Credential assignment total must match the unpaged item count."
457
+ });
458
+ }
459
+ });
460
+ export const CodexShortLivedDeliveryClientKeySchema = z.strictObject({
461
+ version: z.literal(1),
462
+ algorithm: z.literal("X25519-HKDF-SHA256-AES-256-GCM"),
463
+ publicKey: z.string().length(43).regex(/^[A-Za-z0-9_-]+$/)
464
+ });
465
+ export const CodexShortLivedDeliveryRequestSchema = z.strictObject({
466
+ schemaVersion: z.literal(CODEX_ENROLLMENT_SCHEMA_VERSION),
467
+ clientKey: CodexShortLivedDeliveryClientKeySchema
468
+ });
469
+ export const CodexShortLivedDeliveryEnvelopeSchema = z.strictObject({
470
+ version: z.literal(1),
471
+ algorithm: z.literal("X25519-HKDF-SHA256-AES-256-GCM"),
472
+ ephemeralPublicKey: z.string().length(43).regex(/^[A-Za-z0-9_-]+$/),
473
+ salt: z.string().length(43).regex(/^[A-Za-z0-9_-]+$/),
474
+ nonce: z.string().length(16).regex(/^[A-Za-z0-9_-]+$/),
475
+ ciphertext: z.string().min(1).max(174_764).regex(/^[A-Za-z0-9_-]+$/),
476
+ authenticationTag: z.string().length(22).regex(/^[A-Za-z0-9_-]+$/)
477
+ });
478
+ const CodexShortLivedDeliveryMetadataSchema = z.strictObject({
479
+ id: z.string().min(1).max(128),
480
+ credentialKind: z.literal("SHORT_LIVED"),
481
+ assignmentId: z.string().min(1).max(128),
482
+ managedAccountId: z.string().min(1).max(128),
483
+ lineageId: z.string().min(1).max(128),
484
+ generationVersion: z.number().int().positive(),
485
+ status: z.enum(["AWAITING_ACK", "ACKED", "EXPIRED"]),
486
+ issuedAt: EnrollmentInstantSchema,
487
+ credentialExpiresAt: EnrollmentInstantSchema,
488
+ ackExpiresAt: EnrollmentInstantSchema,
489
+ ackedAt: EnrollmentInstantSchema.nullable()
490
+ });
491
+ export const CodexShortLivedDeliveryResponseSchema = z.strictObject({
492
+ schemaVersion: z.literal(CODEX_ENROLLMENT_SCHEMA_VERSION),
493
+ delivery: CodexShortLivedDeliveryMetadataSchema.extend({
494
+ providerAccountId: z.string().min(1).max(512),
495
+ subject: z.string().min(1).max(255),
496
+ envelope: CodexShortLivedDeliveryEnvelopeSchema
497
+ }),
498
+ replayed: z.boolean()
499
+ });
500
+ export const CodexShortLivedDeliveryAckInputSchema = z.strictObject({
501
+ schemaVersion: z.literal(CODEX_ENROLLMENT_SCHEMA_VERSION),
502
+ lineageId: z.string().min(1).max(128),
503
+ generationVersion: z.number().int().positive()
504
+ });
505
+ export const CodexShortLivedDeliveryAckResponseSchema = z.strictObject({
506
+ schemaVersion: z.literal(CODEX_ENROLLMENT_SCHEMA_VERSION),
507
+ delivery: CodexShortLivedDeliveryMetadataSchema.extend({
508
+ status: z.literal("ACKED"),
509
+ ackedAt: EnrollmentInstantSchema
510
+ }),
511
+ replayed: z.boolean()
512
+ });
513
+ export const CodexShortLivedCredentialBundleSchema = z.strictObject({
514
+ schemaVersion: z.literal(CODEX_ENROLLMENT_SCHEMA_VERSION),
515
+ deliveryId: z.string().min(1).max(128),
516
+ managedAccountId: z.string().min(1).max(128),
517
+ providerAccountId: z.string().min(1).max(512),
518
+ lineageId: z.string().min(1).max(128),
519
+ generationVersion: z.number().int().positive(),
520
+ accessToken: z.string().min(1).max(65_536),
521
+ idToken: z.string().min(1).max(65_536),
522
+ expiresAt: EnrollmentInstantSchema
523
+ });
524
+ export const CodexAssignmentRetirementSchema = z.strictObject({
525
+ id: z.string().min(1).max(200),
526
+ assignmentId: z.string().min(1).max(200),
527
+ revision: z.number().int().positive(),
528
+ reason: z.enum(["UNASSIGN", "COMPROMISED", "REPLACED"]),
529
+ status: z.enum(["RETIREMENT_PENDING", "COMPROMISED", "READY_TO_FINALIZE", "FINALIZED"]),
530
+ requestedAt: EnrollmentInstantSchema,
531
+ serverRefreshStoppedAt: EnrollmentInstantSchema,
532
+ shortLivedCredentialsExpireAt: EnrollmentInstantSchema,
533
+ localDeleteStatus: z.enum(["NOT_REQUIRED", "PENDING", "ACKNOWLEDGED", "EXPIRED"]),
534
+ localDeleteAcknowledgedAt: EnrollmentInstantSchema.nullable(),
535
+ serverSecretsShreddedAt: EnrollmentInstantSchema.nullable(),
536
+ upstreamRevocationStatus: z.literal("UNKNOWN"),
537
+ safeToFinalizeAt: EnrollmentInstantSchema
538
+ });
539
+ export const CodexAssignmentRetirementLocalDeleteAckInputSchema = z.strictObject({
540
+ schemaVersion: z.literal(CODEX_ENROLLMENT_SCHEMA_VERSION),
541
+ expectedRevision: z.number().int().positive(),
542
+ targets: z.array(z.strictObject({
543
+ lineageId: z.string().min(1).max(200),
544
+ generationVersion: z.number().int().positive()
545
+ })).min(1).max(1_000)
546
+ });
547
+ const CodexAssignmentRetirementLocalDeleteTargetSchema = z.strictObject({
548
+ lineageId: z.string().min(1).max(200),
549
+ generationVersion: z.number().int().positive()
550
+ });
551
+ export const CodexAssignmentRetirementPreflightResponseSchema = z.strictObject({
552
+ schemaVersion: z.literal(CODEX_ENROLLMENT_SCHEMA_VERSION),
553
+ retirement: CodexAssignmentRetirementSchema,
554
+ allowedLocalDeleteTargets: z.array(CodexAssignmentRetirementLocalDeleteTargetSchema).max(1_000),
555
+ allowedActions: z.array(z.literal("ACKNOWLEDGE_LOCAL_DELETE")).max(1)
556
+ });
557
+ export const CodexAssignmentRetirementLocalDeleteAckResponseSchema = z.strictObject({
558
+ schemaVersion: z.literal(CODEX_ENROLLMENT_SCHEMA_VERSION),
559
+ retirement: CodexAssignmentRetirementSchema,
560
+ replayed: z.boolean()
561
+ });
562
+ const CodexV3InstantSchema = z.string().datetime({ offset: true });
563
+ const CodexV3IdSchema = z.string().min(1).max(255);
564
+ const CodexV3ClientRequestIdSchema = z.string().min(8).max(255)
565
+ .regex(/^[A-Za-z0-9][A-Za-z0-9._:-]*$/);
566
+ export const CodexV3CredentialIngressSchema = z.strictObject({
567
+ envelopeVersion: z.literal(1),
568
+ algorithm: z.literal("X25519-HKDF-SHA256-AES-256-GCM"),
569
+ keyId: z.string().min(1).max(128).regex(/^[A-Za-z0-9._:-]+$/),
570
+ publicKey: z.string().length(43).regex(/^[A-Za-z0-9_-]+$/),
571
+ maxRequestBytes: z.number().int().min(1_024).max(196_608),
572
+ maxCiphertextBytes: z.number().int().min(256).max(131_072)
573
+ });
574
+ export const CodexV3CredentialEnvelopeSchema = CodexEnrollmentCandidateEnvelopeSchema;
575
+ export const CodexV3EnrollmentConfigurationSchema = z.strictObject({
576
+ schemaVersion: z.literal(CODEX_MANAGED_CREDENTIALS_V3_SCHEMA_VERSION),
577
+ ingress: CodexV3CredentialIngressSchema
578
+ });
579
+ export const CodexV3EnrollmentInputSchema = z.strictObject({
580
+ clientRequestId: CodexV3ClientRequestIdSchema,
581
+ envelope: CodexV3CredentialEnvelopeSchema
582
+ });
583
+ export const CodexV3EnrollmentSchema = z.strictObject({
584
+ id: CodexV3IdSchema,
585
+ clientRequestId: CodexV3ClientRequestIdSchema,
586
+ status: z.enum([
587
+ "VALIDATING",
588
+ "READY",
589
+ "TEMPORARILY_UNAVAILABLE",
590
+ "NEEDS_REAUTH",
591
+ "OUTCOME_AMBIGUOUS"
592
+ ]),
593
+ assignmentId: CodexV3IdSchema.nullable(),
594
+ managedAccountId: CodexV3IdSchema.nullable(),
595
+ providerAccountId: z.string().min(1).max(512).nullable(),
596
+ lineageId: CodexV3IdSchema.nullable(),
597
+ generationVersion: z.number().int().positive().nullable(),
598
+ authorityMode: z.literal("SERVER_VALIDATING"),
599
+ createdAt: CodexV3InstantSchema,
600
+ completedAt: CodexV3InstantSchema.nullable(),
601
+ safeErrorCode: z.string().min(1).max(128).regex(/^[A-Za-z][A-Za-z0-9_.-]*$/).nullable()
602
+ }).superRefine((value, context) => {
603
+ const target = [
604
+ value.assignmentId,
605
+ value.managedAccountId,
606
+ value.providerAccountId,
607
+ value.lineageId,
608
+ value.generationVersion
609
+ ];
610
+ if (value.status === "READY") {
611
+ if (target.some((item) => item == null) || value.completedAt == null || value.safeErrorCode != null) {
612
+ context.addIssue({ code: "custom", message: "READY enrollment evidence is incomplete." });
613
+ }
614
+ }
615
+ else if (target.some((item) => item != null)) {
616
+ context.addIssue({ code: "custom", message: "Non-READY enrollment cannot expose a target tuple." });
617
+ }
618
+ });
619
+ export const CodexV3EnrollmentResponseSchema = z.strictObject({
620
+ schemaVersion: z.literal(CODEX_MANAGED_CREDENTIALS_V3_SCHEMA_VERSION),
621
+ enrollment: CodexV3EnrollmentSchema,
622
+ replayed: z.boolean()
623
+ });
624
+ export const CodexV3AccessTokenHealthSchema = z.enum(["HEALTHY", "EXPIRED", "REJECTED", "UNKNOWN"]);
625
+ export const CodexV3RefreshTokenHealthSchema = z.enum(["HEALTHY", "REJECTED", "UNKNOWN"]);
626
+ export const CodexV3CredentialAssignmentSchema = z.strictObject({
627
+ assignmentId: CodexV3IdSchema,
628
+ managedAccountId: CodexV3IdSchema,
629
+ label: z.string().min(1).max(256),
630
+ providerAccountId: z.string().min(1).max(512),
631
+ lineageId: CodexV3IdSchema,
632
+ lineageStatus: z.enum(["READY", "ACTIVE", "STALE", "NEEDS_REAUTH"]),
633
+ authorityMode: z.enum(["SERVER_VALIDATING", "DELIVERY_PENDING", "CLIENT_MANAGED"]),
634
+ authorityEpoch: z.number().int().nonnegative(),
635
+ currentGenerationVersion: z.number().int().positive(),
636
+ accessTokenHealth: CodexV3AccessTokenHealthSchema,
637
+ refreshTokenHealth: CodexV3RefreshTokenHealthSchema,
638
+ credentialExpiresAt: CodexV3InstantSchema,
639
+ lastObservedAt: CodexV3InstantSchema,
640
+ deliveryEligible: z.boolean()
641
+ });
642
+ export const CodexV3CredentialAssignmentListResponseSchema = z.strictObject({
643
+ schemaVersion: z.literal(CODEX_MANAGED_CREDENTIALS_V3_SCHEMA_VERSION),
644
+ items: z.array(CodexV3CredentialAssignmentSchema).max(1),
645
+ total: z.number().int().min(0).max(1)
646
+ }).superRefine((value, context) => {
647
+ if (value.total !== value.items.length) {
648
+ context.addIssue({ code: "custom", path: ["total"], message: "Assignment total is inconsistent." });
649
+ }
650
+ });
651
+ export const CodexV3FullCredentialDeliveryRequestSchema = z.strictObject({
652
+ schemaVersion: z.literal(CODEX_MANAGED_CREDENTIALS_V3_SCHEMA_VERSION),
653
+ clientRequestId: CodexV3ClientRequestIdSchema,
654
+ clientKey: CodexShortLivedDeliveryClientKeySchema
655
+ });
656
+ const CodexV3FullCredentialDeliveryMetadataSchema = z.strictObject({
657
+ id: CodexV3IdSchema,
658
+ credentialKind: z.literal("FULL"),
659
+ clientRequestId: CodexV3ClientRequestIdSchema,
660
+ assignmentId: CodexV3IdSchema,
661
+ managedAccountId: CodexV3IdSchema,
662
+ providerAccountId: z.string().min(1).max(512),
663
+ subject: z.string().min(1).max(255),
664
+ lineageId: CodexV3IdSchema,
665
+ generationVersion: z.number().int().positive(),
666
+ status: z.enum(["AWAITING_ACK", "ACKED", "EXPIRED"]),
667
+ authorityMode: z.enum(["DELIVERY_PENDING", "CLIENT_MANAGED"]),
668
+ issuedAt: CodexV3InstantSchema,
669
+ credentialExpiresAt: CodexV3InstantSchema,
670
+ ackExpiresAt: CodexV3InstantSchema,
671
+ ackedAt: CodexV3InstantSchema.nullable()
672
+ });
673
+ export const CodexV3FullCredentialDeliveryResponseSchema = z.strictObject({
674
+ schemaVersion: z.literal(CODEX_MANAGED_CREDENTIALS_V3_SCHEMA_VERSION),
675
+ delivery: CodexV3FullCredentialDeliveryMetadataSchema.extend({
676
+ status: z.literal("AWAITING_ACK"),
677
+ authorityMode: z.literal("DELIVERY_PENDING"),
678
+ envelope: CodexShortLivedDeliveryEnvelopeSchema
679
+ }),
680
+ replayed: z.boolean()
681
+ });
682
+ export const CodexV3FullCredentialDeliveryAckInputSchema = z.strictObject({
683
+ generationVersion: z.number().int().positive(),
684
+ installed: z.literal(true)
685
+ });
686
+ export const CodexV3FullCredentialDeliveryAckResponseSchema = z.strictObject({
687
+ schemaVersion: z.literal(CODEX_MANAGED_CREDENTIALS_V3_SCHEMA_VERSION),
688
+ delivery: CodexV3FullCredentialDeliveryMetadataSchema.extend({
689
+ status: z.literal("ACKED"),
690
+ authorityMode: z.literal("CLIENT_MANAGED"),
691
+ authorityEpoch: z.number().int().positive(),
692
+ ackedAt: CodexV3InstantSchema
693
+ }),
694
+ replayed: z.boolean()
695
+ });
696
+ export const CodexV3FullCredentialBundleSchema = z.strictObject({
697
+ schemaVersion: z.literal(CODEX_MANAGED_CREDENTIALS_V3_SCHEMA_VERSION),
698
+ deliveryId: CodexV3IdSchema,
699
+ managedAccountId: CodexV3IdSchema,
700
+ providerAccountId: z.string().min(1).max(512),
701
+ lineageId: CodexV3IdSchema,
702
+ generationVersion: z.number().int().positive(),
703
+ refreshToken: z.string().min(1).max(65_536),
704
+ accessToken: z.string().min(1).max(65_536),
705
+ idToken: z.string().min(1).max(65_536),
706
+ expiresAt: CodexV3InstantSchema
707
+ });
708
+ export const CodexV3GenerationReportInputSchema = z.strictObject({
709
+ clientRequestId: CodexV3ClientRequestIdSchema,
710
+ expectedGenerationVersion: z.number().int().positive(),
711
+ rotationMode: z.enum(["ROTATED", "RETAINED"]),
712
+ envelope: CodexV3CredentialEnvelopeSchema,
713
+ accessTokenHealth: CodexV3AccessTokenHealthSchema,
714
+ refreshTokenHealth: CodexV3RefreshTokenHealthSchema,
715
+ observedAt: CodexV3InstantSchema
716
+ });
717
+ export const CodexV3GenerationReportResponseSchema = z.strictObject({
718
+ schemaVersion: z.literal(CODEX_MANAGED_CREDENTIALS_V3_SCHEMA_VERSION),
719
+ report: z.strictObject({
720
+ id: CodexV3IdSchema,
721
+ clientRequestId: CodexV3ClientRequestIdSchema,
722
+ lineageId: CodexV3IdSchema,
723
+ previousGenerationVersion: z.number().int().positive(),
724
+ generationVersion: z.number().int().positive(),
725
+ rotationMode: z.enum(["ROTATED", "RETAINED"]),
726
+ accessTokenHealth: CodexV3AccessTokenHealthSchema,
727
+ refreshTokenHealth: CodexV3RefreshTokenHealthSchema,
728
+ credentialExpiresAt: CodexV3InstantSchema,
729
+ observedAt: CodexV3InstantSchema,
730
+ status: z.literal("APPLIED"),
731
+ authorityMode: z.literal("CLIENT_MANAGED"),
732
+ authorityEpoch: z.number().int().positive()
733
+ }),
734
+ replayed: z.boolean()
735
+ }).superRefine((value, context) => {
736
+ if (value.report.generationVersion !== value.report.previousGenerationVersion + 1) {
737
+ context.addIssue({ code: "custom", path: ["report", "generationVersion"], message: "Generation did not advance exactly once." });
738
+ }
739
+ });
223
740
  export function codexAccountLoginCredentialsPath(accountId) {
224
741
  return `${CODEX_ACCOUNTS_PATH}/${encodeURIComponent(accountId)}/login-credentials`;
225
742
  }
@@ -232,4 +749,47 @@ export function codexAdminRefreshPath(accountId) {
232
749
  export function codexAdminAssignmentPath(assignmentId) {
233
750
  return `${CODEX_ADMIN_ASSIGNMENTS_PATH}/${encodeURIComponent(assignmentId)}`;
234
751
  }
752
+ export function codexAdminEnrollmentIntentPath(intentId) {
753
+ return `${CODEX_ADMIN_ENROLLMENT_INTENTS_PATH}/${encodeURIComponent(intentId)}`;
754
+ }
755
+ export function codexAdminEnrollmentIntentActionPath(intentId, action) {
756
+ return `${codexAdminEnrollmentIntentPath(intentId)}/${action}`;
757
+ }
758
+ export function codexAdminMigrationLoginQueuePath(planId, query) {
759
+ return `${CODEX_ADMIN_MIGRATION_PLANS_PATH}/${encodeURIComponent(planId)}`
760
+ + `/login-queue?page=${query.page}&pageSize=${query.pageSize}`;
761
+ }
762
+ export function codexAssignmentShortLivedDeliveriesPath(assignmentId) {
763
+ return `${CODEX_CREDENTIAL_ASSIGNMENTS_PATH}/${encodeURIComponent(assignmentId)}/short-lived-credential-deliveries`;
764
+ }
765
+ export function codexShortLivedDeliveryAckPath(deliveryId) {
766
+ return `${CODEX_SHORT_LIVED_DELIVERIES_PATH}/${encodeURIComponent(deliveryId)}/ack`;
767
+ }
768
+ export function codexAssignmentRetirementLocalDeleteAckPath(retirementId) {
769
+ return `${CODEX_ASSIGNMENT_RETIREMENTS_PATH}/${encodeURIComponent(retirementId)}/local-delete-ack`;
770
+ }
771
+ export function codexAssignmentRetirementPath(retirementId) {
772
+ return `${CODEX_ASSIGNMENT_RETIREMENTS_PATH}/${encodeURIComponent(retirementId)}`;
773
+ }
774
+ export function codexV3EnrollmentResolvePath(clientRequestId) {
775
+ return `${CODEX_V3_ENROLLMENTS_PATH}/resolve?clientRequestId=${encodeURIComponent(clientRequestId)}`;
776
+ }
777
+ export function codexV3AssignmentFullCredentialDeliveriesPath(assignmentId) {
778
+ return `${CODEX_V3_CREDENTIAL_ASSIGNMENTS_PATH}/${encodeURIComponent(assignmentId)}`
779
+ + "/full-credential-deliveries";
780
+ }
781
+ export function codexV3AssignmentFullCredentialDeliveryResolvePath(assignmentId, clientRequestId) {
782
+ return `${codexV3AssignmentFullCredentialDeliveriesPath(assignmentId)}`
783
+ + `/resolve?clientRequestId=${encodeURIComponent(clientRequestId)}`;
784
+ }
785
+ export function codexV3FullCredentialDeliveryAckPath(deliveryId) {
786
+ return `${CODEX_V3_FULL_CREDENTIAL_DELIVERIES_PATH}/${encodeURIComponent(deliveryId)}/ack`;
787
+ }
788
+ export function codexV3LineageGenerationReportsPath(lineageId) {
789
+ return `${CODEX_V3_CREDENTIAL_LINEAGES_PATH}/${encodeURIComponent(lineageId)}/generations/report`;
790
+ }
791
+ export function codexV3LineageGenerationReportResolvePath(lineageId, clientRequestId) {
792
+ return `${CODEX_V3_CREDENTIAL_LINEAGES_PATH}/${encodeURIComponent(lineageId)}`
793
+ + `/generations/resolve?clientRequestId=${encodeURIComponent(clientRequestId)}`;
794
+ }
235
795
  //# sourceMappingURL=protocol.js.map