@tokensrc/codex 1.14.16 → 1.14.18

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 (66) hide show
  1. package/README.md +73 -71
  2. package/dist/client.d.ts +21 -16
  3. package/dist/client.js +198 -116
  4. package/dist/client.js.map +1 -1
  5. package/dist/command-directory.js +3 -2
  6. package/dist/command-directory.js.map +1 -1
  7. package/dist/commands.d.ts +0 -1
  8. package/dist/commands.js +479 -273
  9. package/dist/commands.js.map +1 -1
  10. package/dist/credentials.d.ts +3 -75
  11. package/dist/credentials.js +2 -338
  12. package/dist/credentials.js.map +1 -1
  13. package/dist/index.d.ts +2 -8
  14. package/dist/index.js +2 -8
  15. package/dist/index.js.map +1 -1
  16. package/dist/managed-credential-v3-envelope.d.ts +38 -14
  17. package/dist/managed-credential-v3-envelope.js +116 -25
  18. package/dist/managed-credential-v3-envelope.js.map +1 -1
  19. package/dist/managed-credential-v3-flow.d.ts +0 -17
  20. package/dist/managed-credential-v3-flow.js +107 -110
  21. package/dist/managed-credential-v3-flow.js.map +1 -1
  22. package/dist/managed-credential-v3.d.ts +0 -8
  23. package/dist/managed-credential-v3.js +0 -23
  24. package/dist/managed-credential-v3.js.map +1 -1
  25. package/dist/profile.d.ts +2 -6
  26. package/dist/profile.js +26 -23
  27. package/dist/profile.js.map +1 -1
  28. package/dist/protocol.d.ts +1284 -799
  29. package/dist/protocol.js +494 -277
  30. package/dist/protocol.js.map +1 -1
  31. package/dist/request-bound-device-v6-flow.d.ts +42 -0
  32. package/dist/request-bound-device-v6-flow.js +403 -0
  33. package/dist/request-bound-device-v6-flow.js.map +1 -0
  34. package/dist/request-bound-device-v6-state.d.ts +397 -0
  35. package/dist/request-bound-device-v6-state.js +221 -0
  36. package/dist/request-bound-device-v6-state.js.map +1 -0
  37. package/dist/selection.d.ts +5 -0
  38. package/dist/selection.js +20 -2
  39. package/dist/selection.js.map +1 -1
  40. package/dist/token-pool-v4-upload-flow.js +5 -1
  41. package/dist/token-pool-v4-upload-flow.js.map +1 -1
  42. package/package.json +2 -2
  43. package/dist/credential-supervisor.d.ts +0 -17
  44. package/dist/credential-supervisor.js +0 -84
  45. package/dist/credential-supervisor.js.map +0 -1
  46. package/dist/enrollment-envelope.d.ts +0 -18
  47. package/dist/enrollment-envelope.js +0 -112
  48. package/dist/enrollment-envelope.js.map +0 -1
  49. package/dist/enrollment-flow.d.ts +0 -27
  50. package/dist/enrollment-flow.js +0 -224
  51. package/dist/enrollment-flow.js.map +0 -1
  52. package/dist/migration-login-batch.d.ts +0 -66
  53. package/dist/migration-login-batch.js +0 -202
  54. package/dist/migration-login-batch.js.map +0 -1
  55. package/dist/retirement-flow.d.ts +0 -38
  56. package/dist/retirement-flow.js +0 -78
  57. package/dist/retirement-flow.js.map +0 -1
  58. package/dist/short-lived-delivery-flow.d.ts +0 -41
  59. package/dist/short-lived-delivery-flow.js +0 -141
  60. package/dist/short-lived-delivery-flow.js.map +0 -1
  61. package/dist/short-lived-delivery-journal.d.ts +0 -34
  62. package/dist/short-lived-delivery-journal.js +0 -137
  63. package/dist/short-lived-delivery-journal.js.map +0 -1
  64. package/dist/short-lived-delivery.d.ts +0 -26
  65. package/dist/short-lived-delivery.js +0 -139
  66. package/dist/short-lived-delivery.js.map +0 -1
@@ -1,66 +0,0 @@
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 {};
@@ -1,202 +0,0 @@
1
- import { executeCodexEnrollmentLogin } from "./enrollment-flow.js";
2
- import { CodexServiceError } from "./errors.js";
3
- import { CODEX_MIGRATION_CAPACITY } from "./protocol.js";
4
- /** Loads all pages and rejects a mixed-revision snapshot instead of reordering targets. */
5
- export async function loadCodexMigrationLoginQueueSnapshot(input) {
6
- const pageSize = input.pageSize ?? 100;
7
- const maxAttempts = input.maxSnapshotAttempts ?? 3;
8
- for (let attempt = 0; attempt < maxAttempts; attempt += 1) {
9
- const first = await input.client.listMigrationLoginQueue(input.planId, { page: 1, pageSize });
10
- if (first.plan.status !== "ACTIVE" || first.total <= first.items.length) {
11
- return { plan: first.plan, items: uniqueQueueItems(first.items, first.total) };
12
- }
13
- const items = [...first.items];
14
- let stable = true;
15
- const pageCount = Math.ceil(first.total / pageSize);
16
- for (let page = 2; page <= pageCount; page += 1) {
17
- const next = await input.client.listMigrationLoginQueue(input.planId, { page, pageSize });
18
- if (!samePlanProjection(first.plan, next.plan) || next.total !== first.total) {
19
- stable = false;
20
- break;
21
- }
22
- items.push(...next.items);
23
- }
24
- if (stable && items.length === first.total) {
25
- return { plan: first.plan, items: uniqueQueueItems(items, first.total) };
26
- }
27
- }
28
- throw new CodexServiceError("Migration login queue changed while it was being paged; retry from a fresh snapshot.", "migration_queue_changed", 409);
29
- }
30
- /**
31
- * Executes at most one isolated official login at a time. The queue is fetched
32
- * again after every handled target so pause/cancel/completion takes effect before
33
- * another refresh token can be generated.
34
- */
35
- export async function executeCodexMigrationLoginBatch(input) {
36
- const executeEnrollment = input.executeEnrollment ?? executeCodexEnrollmentLogin;
37
- const handledTargets = new Set();
38
- const items = [];
39
- let latest = await loadCodexMigrationLoginQueueSnapshot(input);
40
- if (input.dryRun) {
41
- if (latest.plan.status === "ACTIVE") {
42
- for (const target of latest.items)
43
- items.push(dryRunItem(target));
44
- }
45
- return result(latest.plan, true, latest.plan.status === "ACTIVE"
46
- ? "DRY_RUN" : planStopReason(latest.plan.status), items);
47
- }
48
- while (true) {
49
- const stopped = planStopReason(latest.plan.status);
50
- if (stopped !== "QUEUE_EXHAUSTED")
51
- return result(latest.plan, false, stopped, items);
52
- const target = latest.items.find((candidate) => !handledTargets.has(candidate.id));
53
- if (!target)
54
- return result(latest.plan, false, "QUEUE_EXHAUSTED", items);
55
- handledTargets.add(target.id);
56
- const resumableClaim = target.allowedAction === "VIEW_ENROLLMENT"
57
- && target.enrollmentIntent !== null
58
- && ["CLAIMED", "LOGIN_IN_PROGRESS"].includes(target.enrollmentIntent.status);
59
- if (target.allowedAction !== "LOGIN" && !resumableClaim) {
60
- items.push(skippedItem(target));
61
- latest = await loadCodexMigrationLoginQueueSnapshot(input);
62
- continue;
63
- }
64
- if (!target.enrollmentIntent || (!resumableClaim && target.enrollmentIntent.status !== "AWAITING_CLI")) {
65
- items.push({
66
- ...baseItem(target),
67
- action: "LOGIN",
68
- status: "FAILED",
69
- safeErrorCode: "invalid_migration_login_target"
70
- });
71
- return result(latest.plan, false, "SERVICE_ERROR", items);
72
- }
73
- try {
74
- const response = await executeEnrollment({
75
- client: input.client,
76
- tenantId: input.tenantId,
77
- intentId: target.enrollmentIntent.id,
78
- deviceAuth: input.deviceAuth,
79
- requireInitialAwaitingCli: true,
80
- resumeClaimedIntent: resumableClaim
81
- });
82
- items.push({
83
- ...baseItem(target),
84
- action: "LOGIN",
85
- status: response.result.outcome === "READY" ? "COMPLETED" : "FAILED",
86
- outcome: response.result.outcome,
87
- intentStatus: response.intent.status,
88
- safeErrorCode: response.intent.safeErrorCode
89
- });
90
- if (!["READY", "ACCOUNT_MISMATCH", "IDENTITY_UNVERIFIABLE"].includes(response.result.outcome)) {
91
- latest = await loadCodexMigrationLoginQueueSnapshot(input);
92
- const planStopped = planStopReason(latest.plan.status);
93
- return result(latest.plan, false, planStopped === "QUEUE_EXHAUSTED" ? "TARGET_UNCERTAIN" : planStopped, items);
94
- }
95
- }
96
- catch (error) {
97
- latest = await safeReload(input, latest);
98
- const refreshedTarget = latest.items.find(({ id }) => id === target.id);
99
- if (["enrollment_intent_state_conflict", "enrollment_intent_claimed"].includes(String(error.code ?? ""))
100
- && refreshedTarget && refreshedTarget.allowedAction !== "LOGIN") {
101
- items.push(skippedItem(refreshedTarget));
102
- continue;
103
- }
104
- const classified = classifyBatchError(error);
105
- items.push({
106
- ...baseItem(target),
107
- action: "LOGIN",
108
- status: "FAILED",
109
- safeErrorCode: classified.safeErrorCode
110
- });
111
- const planStopped = planStopReason(latest.plan.status);
112
- return result(latest.plan, false, planStopped === "QUEUE_EXHAUSTED" ? classified.stopReason : planStopped, items);
113
- }
114
- latest = await loadCodexMigrationLoginQueueSnapshot(input);
115
- }
116
- }
117
- function samePlanProjection(left, right) {
118
- return left.id === right.id && left.status === right.status && left.revision === right.revision
119
- && left.accountId === right.accountId && right.sequentialRequired === true;
120
- }
121
- function uniqueQueueItems(items, total) {
122
- if (items.length !== total || new Set(items.map(({ id }) => id)).size !== items.length
123
- || new Set(items.map(({ assignmentId }) => assignmentId)).size !== items.length) {
124
- throw new CodexServiceError("Migration login queue contains duplicate or incomplete targets.", "invalid_codex_service_response");
125
- }
126
- return items;
127
- }
128
- function baseItem(target) {
129
- return {
130
- targetId: target.id,
131
- assignmentId: target.assignmentId,
132
- intentId: target.enrollmentIntent?.id ?? null,
133
- requestedAction: target.allowedAction
134
- };
135
- }
136
- function dryRunItem(target) {
137
- if (target.allowedAction === "LOGIN" && target.enrollmentIntent?.status === "AWAITING_CLI") {
138
- return { ...baseItem(target), action: "LOGIN", status: "PLANNED" };
139
- }
140
- return { ...skippedItem(target), status: "PLANNED" };
141
- }
142
- function skippedItem(target) {
143
- return {
144
- ...baseItem(target),
145
- action: "SKIP",
146
- status: "SKIPPED",
147
- intentStatus: target.enrollmentIntent?.status,
148
- safeErrorCode: target.enrollmentIntent?.safeErrorCode,
149
- skipReason: target.allowedAction === "VIEW_ENROLLMENT"
150
- ? "VIEW_ENROLLMENT"
151
- : target.distributionMode === "USER_BOUND" && target.projectedStatus === "ACTIVE"
152
- ? "ALREADY_USER_BOUND"
153
- : "NO_ACTION"
154
- };
155
- }
156
- function planStopReason(status) {
157
- return status === "ACTIVE" ? "QUEUE_EXHAUSTED" : status;
158
- }
159
- function classifyBatchError(error) {
160
- const value = error;
161
- const code = typeof value?.code === "string" && /^[a-z][a-z0-9_.-]{0,127}$/iu.test(value.code)
162
- ? value.code
163
- : "official_login_failed";
164
- const status = typeof value?.status === "number" ? value.status : undefined;
165
- if (["auth_error", "login_required", "http_error", "issuer_mismatch", "codex_access_denied"]
166
- .includes(code) || status === 401 || status === 403) {
167
- return { stopReason: "AUTHENTICATION_ERROR", safeErrorCode: code };
168
- }
169
- if (["codex_service_unavailable", "invalid_codex_service_response", "codex_service_error",
170
- "migration_queue_changed"].includes(code) || status !== undefined && status >= 500) {
171
- return { stopReason: "SERVICE_ERROR", safeErrorCode: code };
172
- }
173
- return { stopReason: "LOGIN_ERROR", safeErrorCode: code };
174
- }
175
- async function safeReload(input, fallback) {
176
- try {
177
- return await loadCodexMigrationLoginQueueSnapshot(input);
178
- }
179
- catch {
180
- return fallback;
181
- }
182
- }
183
- function result(plan, dryRun, stopReason, items) {
184
- return {
185
- schemaVersion: 2,
186
- plan,
187
- capacity: CODEX_MIGRATION_CAPACITY,
188
- dryRun,
189
- stopReason,
190
- counts: {
191
- observed: items.length,
192
- plannedLogins: items.filter(({ action }) => action === "LOGIN").length,
193
- attempted: items.filter(({ action, status }) => action === "LOGIN"
194
- && status !== "PLANNED").length,
195
- completed: items.filter(({ status }) => status === "COMPLETED").length,
196
- failed: items.filter(({ status }) => status === "FAILED").length,
197
- skipped: items.filter(({ action }) => action === "SKIP").length
198
- },
199
- items
200
- };
201
- }
202
- //# sourceMappingURL=migration-login-batch.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migration-login-batch.js","sourceRoot":"","sources":["../src/migration-login-batch.ts"],"names":[],"mappings":"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"}
@@ -1,38 +0,0 @@
1
- import type { CodexServiceClient } from "./client.js";
2
- interface RetirementClient {
3
- getAssignmentRetirement: CodexServiceClient["getAssignmentRetirement"];
4
- acknowledgeAssignmentRetirementLocalDelete: CodexServiceClient["acknowledgeAssignmentRetirementLocalDelete"];
5
- }
6
- export declare function executeCodexAssignmentRetirementLocalDelete(input: {
7
- client: RetirementClient;
8
- retirementId: string;
9
- expectedRevision?: number;
10
- idempotencyKey?: string;
11
- env?: NodeJS.ProcessEnv;
12
- now?: () => number;
13
- }): Promise<{
14
- schemaVersion: 2;
15
- retirement: {
16
- id: string;
17
- assignmentId: string;
18
- revision: number;
19
- reason: "COMPROMISED" | "REPLACED" | "UNASSIGN";
20
- status: "COMPROMISED" | "FINALIZED" | "READY_TO_FINALIZE" | "RETIREMENT_PENDING";
21
- requestedAt: string;
22
- serverRefreshStoppedAt: string;
23
- shortLivedCredentialsExpireAt: string;
24
- localDeleteStatus: "ACKNOWLEDGED" | "EXPIRED" | "NOT_REQUIRED" | "PENDING";
25
- localDeleteAcknowledgedAt: string | null;
26
- serverSecretsShreddedAt: string | null;
27
- upstreamRevocationStatus: "UNKNOWN";
28
- safeToFinalizeAt: string;
29
- };
30
- replayed: boolean;
31
- local: {
32
- assignmentId: string;
33
- lineageId: string;
34
- generationVersion: number;
35
- deletedAt: string;
36
- };
37
- }>;
38
- export {};
@@ -1,78 +0,0 @@
1
- import { randomUUID } from "node:crypto";
2
- import { markManagedCodexRetirementAcknowledged, prepareManagedCodexLineageRetirement, readManagedCodexLineageState, readManagedCodexRetirementTombstone } from "./credentials.js";
3
- import { CodexServiceError } from "./errors.js";
4
- export async function executeCodexAssignmentRetirementLocalDelete(input) {
5
- const env = input.env ?? process.env;
6
- const now = input.now ?? Date.now;
7
- const existing = await readManagedCodexRetirementTombstone(env);
8
- const localState = await readManagedCodexLineageState(env);
9
- const localTarget = existing?.retirementId === input.retirementId ? {
10
- assignmentId: existing.assignmentId,
11
- lineageId: existing.lineageId,
12
- generationVersion: existing.generationVersion
13
- } : localState ? {
14
- assignmentId: localState.assignmentId,
15
- lineageId: localState.lineageId,
16
- generationVersion: localState.generationVersion
17
- } : undefined;
18
- if (!localTarget) {
19
- throw new CodexServiceError("No local managed lineage matches this retirement request.", "assignment_retirement_local_state_not_found");
20
- }
21
- const preflight = await input.client.getAssignmentRetirement(input.retirementId);
22
- const targetMatches = preflight.retirement.assignmentId === localTarget.assignmentId
23
- && preflight.allowedLocalDeleteTargets.some((target) => target.lineageId === localTarget.lineageId
24
- && target.generationVersion === localTarget.generationVersion);
25
- if (!targetMatches) {
26
- throw new CodexServiceError("The Server retirement does not authorize deletion of the locally installed lineage.", "assignment_retirement_local_delete_target_mismatch");
27
- }
28
- if (existing?.retirementId === input.retirementId
29
- && existing.acknowledgedAt === null
30
- && preflight.retirement.localDeleteAcknowledgedAt !== null) {
31
- const recovered = await markManagedCodexRetirementAcknowledged(existing.retirementId, preflight.retirement.localDeleteAcknowledgedAt, env);
32
- return {
33
- schemaVersion: 2,
34
- retirement: preflight.retirement,
35
- replayed: true,
36
- local: {
37
- assignmentId: recovered.assignmentId,
38
- lineageId: recovered.lineageId,
39
- generationVersion: recovered.generationVersion,
40
- deletedAt: recovered.deletedAt
41
- }
42
- };
43
- }
44
- if (input.expectedRevision !== undefined && input.expectedRevision !== preflight.retirement.revision) {
45
- throw new CodexServiceError("The retirement revision changed before local deletion.", "assignment_retirement_revision_conflict");
46
- }
47
- if (!preflight.allowedActions.includes("ACKNOWLEDGE_LOCAL_DELETE")) {
48
- throw new CodexServiceError("The Server retirement is not accepting local deletion evidence.", "assignment_retirement_local_delete_not_allowed");
49
- }
50
- const prepared = await prepareManagedCodexLineageRetirement({
51
- retirementId: input.retirementId,
52
- expectedRevision: preflight.retirement.revision,
53
- idempotencyKey: input.idempotencyKey ?? randomUUID()
54
- }, now(), env);
55
- const response = await input.client.acknowledgeAssignmentRetirementLocalDelete(prepared.retirementId, {
56
- schemaVersion: 2,
57
- expectedRevision: prepared.expectedRevision,
58
- targets: [{
59
- lineageId: prepared.lineageId,
60
- generationVersion: prepared.generationVersion
61
- }]
62
- }, prepared.idempotencyKey);
63
- const acknowledgedAt = response.retirement.localDeleteAcknowledgedAt;
64
- if (!acknowledgedAt) {
65
- throw new CodexServiceError("Server accepted a local deletion ACK without acknowledgement metadata.", "invalid_codex_service_response");
66
- }
67
- await markManagedCodexRetirementAcknowledged(prepared.retirementId, acknowledgedAt, env);
68
- return {
69
- ...response,
70
- local: {
71
- assignmentId: prepared.assignmentId,
72
- lineageId: prepared.lineageId,
73
- generationVersion: prepared.generationVersion,
74
- deletedAt: prepared.deletedAt
75
- }
76
- };
77
- }
78
- //# sourceMappingURL=retirement-flow.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"retirement-flow.js","sourceRoot":"","sources":["../src/retirement-flow.ts"],"names":[],"mappings":"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"}
@@ -1,41 +0,0 @@
1
- import type { CodexServiceClient } from "./client.js";
2
- import { installManagedCodexLineageCredentials } from "./credentials.js";
3
- interface ShortLivedDeliveryClient {
4
- createShortLivedCredentialDelivery: CodexServiceClient["createShortLivedCredentialDelivery"];
5
- acknowledgeShortLivedCredentialDelivery: CodexServiceClient["acknowledgeShortLivedCredentialDelivery"];
6
- }
7
- export interface CodexShortLivedDeliveryFlowResult {
8
- deliveryId: string;
9
- assignmentId: string;
10
- managedAccountId: string;
11
- providerAccountId: string;
12
- lineageId: string;
13
- generationVersion: number;
14
- credentialExpiresAt: string;
15
- installAction: "INSTALLED" | "UNCHANGED" | "RECOVERED";
16
- issueReplayed: boolean;
17
- ackReplayed: boolean;
18
- resumed: boolean;
19
- }
20
- export declare function executeCodexShortLivedCredentialDelivery(input: {
21
- client: ShortLivedDeliveryClient;
22
- tenantId: string;
23
- assignmentId: string;
24
- env?: NodeJS.ProcessEnv;
25
- now?: () => number;
26
- newId?: () => string;
27
- installHooks?: Parameters<typeof installManagedCodexLineageCredentials>[3];
28
- allowNewDelivery?: boolean;
29
- }): Promise<CodexShortLivedDeliveryFlowResult>;
30
- export declare function resumePendingCodexShortLivedDeliveryAck(input: {
31
- client: Pick<ShortLivedDeliveryClient, "acknowledgeShortLivedCredentialDelivery">;
32
- tenantId: string;
33
- assignmentId: string;
34
- env?: NodeJS.ProcessEnv;
35
- now?: number;
36
- idempotencyKey?: string;
37
- }): Promise<{
38
- deliveryId: string;
39
- replayed: boolean;
40
- } | undefined>;
41
- export {};
@@ -1,141 +0,0 @@
1
- import { randomUUID } from "node:crypto";
2
- import { installManagedCodexLineageCredentials, markManagedCodexLineageDeliveryAcknowledged, readManagedCodexLineageState } from "./credentials.js";
3
- import { CodexServiceError } from "./errors.js";
4
- import { createCodexShortLivedDeliveryKeyPair, openCodexShortLivedCredentialDelivery } from "./short-lived-delivery.js";
5
- import { clearCodexShortLivedDeliveryJournal, loadOrCreateCodexShortLivedDeliveryJournal, markCodexShortLivedDeliveryJournalIssued, openCodexShortLivedDeliveryJournalPrivateKey, readCodexShortLivedDeliveryJournal } from "./short-lived-delivery-journal.js";
6
- export async function executeCodexShortLivedCredentialDelivery(input) {
7
- const now = input.now ?? Date.now;
8
- const newId = input.newId ?? randomUUID;
9
- const env = input.env ?? process.env;
10
- const pending = await readManagedCodexLineageState(env);
11
- const existingJournal = await readCodexShortLivedDeliveryJournal(env);
12
- const pendingMatchesRequest = pending !== undefined && pending.assignmentId === input.assignmentId
13
- && (pending.tenantId === input.tenantId || pending.tenantId === null);
14
- if (pending && pendingMatchesRequest && pending.phase === "INSTALLED_PENDING_ACK"
15
- && Date.parse(pending.ackExpiresAt) > now()) {
16
- const resumed = await acknowledgeInstalledDelivery(input.client, pending, newId(), env);
17
- const journal = await readCodexShortLivedDeliveryJournal(env);
18
- if (journal?.deliveryId === pending.deliveryId) {
19
- await clearCodexShortLivedDeliveryJournal(journal.idempotencyKey, env);
20
- }
21
- if (Date.parse(pending.credentialExpiresAt) > now()) {
22
- return {
23
- deliveryId: pending.deliveryId,
24
- assignmentId: pending.assignmentId,
25
- managedAccountId: pending.managedAccountId,
26
- providerAccountId: pending.providerAccountId,
27
- lineageId: pending.lineageId,
28
- generationVersion: pending.generationVersion,
29
- credentialExpiresAt: pending.credentialExpiresAt,
30
- installAction: "UNCHANGED",
31
- issueReplayed: true,
32
- ackReplayed: resumed.replayed,
33
- resumed: true
34
- };
35
- }
36
- }
37
- const journalMatchesRequest = existingJournal?.tenantId === input.tenantId
38
- && existingJournal.assignmentId === input.assignmentId;
39
- if (input.allowNewDelivery === false && !journalMatchesRequest) {
40
- throw new CodexServiceError("The assignment is not eligible for a new short-lived credential delivery.", "short_lived_credential_lineage_not_ready", 409);
41
- }
42
- for (let journalAttempt = 0; journalAttempt < 2; journalAttempt += 1) {
43
- const generated = createCodexShortLivedDeliveryKeyPair();
44
- const journal = await loadOrCreateCodexShortLivedDeliveryJournal({
45
- tenantId: input.tenantId,
46
- assignmentId: input.assignmentId,
47
- idempotencyKey: newId(),
48
- clientKey: generated.clientKey,
49
- privateKey: generated.privateKey,
50
- now: now(),
51
- env
52
- });
53
- const privateKey = openCodexShortLivedDeliveryJournalPrivateKey(journal);
54
- let issue;
55
- try {
56
- issue = await input.client.createShortLivedCredentialDelivery(input.assignmentId, {
57
- schemaVersion: 2,
58
- clientKey: journal.clientKey
59
- }, journal.idempotencyKey);
60
- }
61
- catch (error) {
62
- if (journalAttempt === 0 && error instanceof CodexServiceError
63
- && [
64
- "short_lived_credential_delivery_expired",
65
- "short_lived_credential_delivery_already_acked",
66
- "lineage_version_conflict"
67
- ].includes(error.code)) {
68
- await clearCodexShortLivedDeliveryJournal(journal.idempotencyKey, env);
69
- if (input.allowNewDelivery === false)
70
- throw error;
71
- continue;
72
- }
73
- throw error;
74
- }
75
- const issuedJournal = await markCodexShortLivedDeliveryJournalIssued(journal, issue.delivery.id, issue.delivery.ackExpiresAt, now(), env);
76
- const bundle = openCodexShortLivedCredentialDelivery({
77
- tenantId: input.tenantId,
78
- response: issue,
79
- privateKey,
80
- now: now()
81
- });
82
- const installed = await installManagedCodexLineageCredentials({
83
- tenantId: input.tenantId,
84
- deliveryId: bundle.deliveryId,
85
- assignmentId: issue.delivery.assignmentId,
86
- managedAccountId: bundle.managedAccountId,
87
- lineageId: bundle.lineageId,
88
- generationVersion: bundle.generationVersion,
89
- providerAccountId: bundle.providerAccountId,
90
- accessToken: bundle.accessToken,
91
- idToken: bundle.idToken,
92
- credentialExpiresAt: bundle.expiresAt,
93
- ackExpiresAt: issue.delivery.ackExpiresAt,
94
- lastRefresh: issue.delivery.issuedAt
95
- }, now(), env, input.installHooks);
96
- const acknowledged = await input.client.acknowledgeShortLivedCredentialDelivery(bundle.deliveryId, {
97
- schemaVersion: 2,
98
- lineageId: bundle.lineageId,
99
- generationVersion: bundle.generationVersion
100
- }, newId());
101
- await markManagedCodexLineageDeliveryAcknowledged(bundle.deliveryId, acknowledged.delivery.ackedAt, env);
102
- await clearCodexShortLivedDeliveryJournal(issuedJournal.idempotencyKey, env);
103
- return {
104
- deliveryId: bundle.deliveryId,
105
- assignmentId: issue.delivery.assignmentId,
106
- managedAccountId: bundle.managedAccountId,
107
- providerAccountId: bundle.providerAccountId,
108
- lineageId: bundle.lineageId,
109
- generationVersion: bundle.generationVersion,
110
- credentialExpiresAt: bundle.expiresAt,
111
- installAction: installed.action,
112
- issueReplayed: issue.replayed,
113
- ackReplayed: acknowledged.replayed,
114
- resumed: false
115
- };
116
- }
117
- throw new CodexServiceError("Unable to replace the expired short-lived credential delivery journal.", "short_lived_delivery_state_conflict");
118
- }
119
- export async function resumePendingCodexShortLivedDeliveryAck(input) {
120
- const env = input.env ?? process.env;
121
- const state = await readManagedCodexLineageState(env);
122
- const stateMatchesRequest = state !== undefined && state.assignmentId === input.assignmentId
123
- && (state.tenantId === input.tenantId || state.tenantId === null);
124
- if (!state || !stateMatchesRequest || state.phase !== "INSTALLED_PENDING_ACK")
125
- return undefined;
126
- if (Date.parse(state.ackExpiresAt) <= (input.now ?? Date.now())) {
127
- throw new CodexServiceError("The pending short-lived credential ACK has expired; request a new delivery.", "short_lived_credential_delivery_expired");
128
- }
129
- const result = await acknowledgeInstalledDelivery(input.client, state, input.idempotencyKey ?? randomUUID(), env);
130
- return { deliveryId: state.deliveryId, replayed: result.replayed };
131
- }
132
- async function acknowledgeInstalledDelivery(client, state, idempotencyKey, env) {
133
- const acknowledged = await client.acknowledgeShortLivedCredentialDelivery(state.deliveryId, {
134
- schemaVersion: 2,
135
- lineageId: state.lineageId,
136
- generationVersion: state.generationVersion
137
- }, idempotencyKey);
138
- await markManagedCodexLineageDeliveryAcknowledged(state.deliveryId, acknowledged.delivery.ackedAt, env);
139
- return { replayed: acknowledged.replayed };
140
- }
141
- //# sourceMappingURL=short-lived-delivery-flow.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"short-lived-delivery-flow.js","sourceRoot":"","sources":["../src/short-lived-delivery-flow.ts"],"names":[],"mappings":"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"}
@@ -1,34 +0,0 @@
1
- import { type KeyObject } from "node:crypto";
2
- import { z } from "zod";
3
- import type { CodexShortLivedDeliveryClientKey } from "./protocol.js";
4
- declare const JournalSchema: z.ZodObject<{
5
- schemaVersion: z.ZodLiteral<2>;
6
- tenantId: z.ZodString;
7
- assignmentId: z.ZodString;
8
- idempotencyKey: z.ZodString;
9
- clientKey: z.ZodObject<{
10
- version: z.ZodLiteral<1>;
11
- algorithm: z.ZodLiteral<"X25519-HKDF-SHA256-AES-256-GCM">;
12
- publicKey: z.ZodString;
13
- }, z.core.$strict>;
14
- privateKeyPkcs8: z.ZodString;
15
- deliveryId: z.ZodNullable<z.ZodString>;
16
- ackExpiresAt: z.ZodNullable<z.ZodString>;
17
- createdAt: z.ZodString;
18
- updatedAt: z.ZodString;
19
- }, z.core.$strict>;
20
- export type CodexShortLivedDeliveryJournal = z.infer<typeof JournalSchema>;
21
- export declare function readCodexShortLivedDeliveryJournal(env?: NodeJS.ProcessEnv): Promise<CodexShortLivedDeliveryJournal | undefined>;
22
- export declare function loadOrCreateCodexShortLivedDeliveryJournal(input: {
23
- tenantId: string;
24
- assignmentId: string;
25
- idempotencyKey: string;
26
- clientKey: CodexShortLivedDeliveryClientKey;
27
- privateKey: KeyObject;
28
- now: number;
29
- env?: NodeJS.ProcessEnv;
30
- }): Promise<CodexShortLivedDeliveryJournal>;
31
- export declare function openCodexShortLivedDeliveryJournalPrivateKey(journal: CodexShortLivedDeliveryJournal): KeyObject;
32
- export declare function markCodexShortLivedDeliveryJournalIssued(expected: CodexShortLivedDeliveryJournal, deliveryId: string, ackExpiresAt: string, now: number, env?: NodeJS.ProcessEnv): Promise<CodexShortLivedDeliveryJournal>;
33
- export declare function clearCodexShortLivedDeliveryJournal(expectedIdempotencyKey: string, env?: NodeJS.ProcessEnv): Promise<void>;
34
- export {};