@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,224 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { sealCodexEnrollmentCandidate } from "./enrollment-envelope.js";
3
+ import { withOneShotCodexLogin } from "./enrollment-login.js";
4
+ import { CodexServiceError } from "./errors.js";
5
+ /**
6
+ * Claims one server-created intent, runs an isolated official login, and sends
7
+ * only an authenticated encrypted refresh-token envelope to that exact intent.
8
+ */
9
+ export async function executeCodexEnrollmentLogin(input) {
10
+ const randomId = input.randomId ?? randomUUID;
11
+ const oneShotLogin = input.oneShotLogin ?? withOneShotCodexLogin;
12
+ let current = await input.client.getEnrollmentIntent(input.intentId);
13
+ const ingress = current.capabilities.candidateIngress;
14
+ if (!current.capabilities.candidateUpload || !ingress) {
15
+ throw new CodexServiceError("服务端尚未启用加密候选上传;为避免生成无法安全接收的 RT,本次不会启动 OpenAI 登录。", "capability_not_enabled", 409);
16
+ }
17
+ const resumableClaim = input.resumeClaimedIntent === true
18
+ && ["CLAIMED", "LOGIN_IN_PROGRESS"].includes(current.intent.status)
19
+ && current.intent.allowedActions.includes("HEARTBEAT");
20
+ if (input.requireInitialAwaitingCli
21
+ && !resumableClaim
22
+ && (current.intent.status !== "AWAITING_CLI" || !current.intent.allowedActions.includes("CLAIM"))) {
23
+ throw stateConflict(current);
24
+ }
25
+ if (current.intent.allowedActions.includes("CLAIM") || resumableClaim) {
26
+ current = await input.client.claimEnrollmentIntent(input.intentId, {
27
+ idempotencyKey: randomId(),
28
+ revision: current.intent.revision
29
+ });
30
+ }
31
+ if (!["CLAIMED", "LOGIN_IN_PROGRESS"].includes(current.intent.status)
32
+ || !current.intent.allowedActions.includes("HEARTBEAT")) {
33
+ throw stateConflict(current);
34
+ }
35
+ current = await input.client.heartbeatEnrollmentIntent(input.intentId, {
36
+ idempotencyKey: randomId(),
37
+ revision: current.intent.revision,
38
+ phase: "LOGIN_IN_PROGRESS"
39
+ });
40
+ const keepalive = createLoginKeepalive({
41
+ client: input.client,
42
+ intentId: input.intentId,
43
+ current,
44
+ randomId,
45
+ intervalMs: input.heartbeatIntervalMs ?? 30_000
46
+ });
47
+ try {
48
+ return await oneShotLogin({
49
+ ...input.loginOptions,
50
+ mode: input.deviceAuth ? "device" : "browser"
51
+ }, async (credentials) => {
52
+ try {
53
+ current = await keepalive.stop();
54
+ const candidateRetryDelays = input.candidateRetryDelaysMs ?? [1_000, 3_000];
55
+ const transportRetryDelays = input.candidateTransportRetryDelaysMs ?? [250, 1_000];
56
+ const wait = input.wait ?? defaultWait;
57
+ for (let candidateAttempt = 0;; candidateAttempt += 1) {
58
+ current = await input.client.heartbeatEnrollmentIntent(input.intentId, {
59
+ idempotencyKey: randomId(),
60
+ revision: current.intent.revision,
61
+ phase: "UPLOADING"
62
+ });
63
+ const revision = current.intent.revision;
64
+ const idempotencyKey = randomId();
65
+ const candidate = {
66
+ schemaVersion: 2,
67
+ revision,
68
+ envelope: sealCodexEnrollmentCandidate({
69
+ tenantId: input.tenantId,
70
+ intentId: input.intentId,
71
+ revision,
72
+ idempotencyKey,
73
+ refreshToken: credentials.refreshToken,
74
+ ingress
75
+ })
76
+ };
77
+ const result = await uploadCandidateWithRetry({
78
+ client: input.client,
79
+ intentId: input.intentId,
80
+ candidate,
81
+ idempotencyKey,
82
+ retryDelays: transportRetryDelays,
83
+ wait
84
+ });
85
+ if (result.result.outcome !== "TEMPORARILY_UNAVAILABLE")
86
+ return result;
87
+ const delay = candidateRetryDelays[candidateAttempt];
88
+ if (delay === undefined)
89
+ return result;
90
+ current = result;
91
+ await wait(delay);
92
+ }
93
+ }
94
+ finally {
95
+ credentials.refreshToken = "";
96
+ credentials.accessToken = "";
97
+ credentials.idToken = "";
98
+ delete credentials.providerAccountId;
99
+ delete credentials.lastRefresh;
100
+ }
101
+ });
102
+ }
103
+ finally {
104
+ await keepalive.stop();
105
+ }
106
+ }
107
+ async function uploadCandidateWithRetry(input) {
108
+ let priorAttemptWasUncertain = false;
109
+ for (let attempt = 0;; attempt += 1) {
110
+ try {
111
+ return await input.client.uploadEnrollmentCandidate(input.intentId, input.candidate, input.idempotencyKey);
112
+ }
113
+ catch (error) {
114
+ if (!isUncertainCandidateUpload(error)) {
115
+ if (priorAttemptWasUncertain) {
116
+ return reconcileCandidateUpload(input.client, input.intentId);
117
+ }
118
+ throw error;
119
+ }
120
+ priorAttemptWasUncertain = true;
121
+ const delay = input.retryDelays[attempt];
122
+ if (!isRetryableCandidateUpload(error) || delay === undefined) {
123
+ return reconcileCandidateUpload(input.client, input.intentId);
124
+ }
125
+ await input.wait(delay);
126
+ }
127
+ }
128
+ }
129
+ function createLoginKeepalive(input) {
130
+ let current = input.current;
131
+ let stopped = false;
132
+ let timer;
133
+ let pending = Promise.resolve();
134
+ let failure;
135
+ const schedule = () => {
136
+ if (stopped || input.intervalMs <= 0)
137
+ return;
138
+ timer = setTimeout(() => {
139
+ pending = input.client.heartbeatEnrollmentIntent(input.intentId, {
140
+ idempotencyKey: input.randomId(),
141
+ revision: current.intent.revision,
142
+ phase: "LOGIN_IN_PROGRESS"
143
+ }).then((response) => {
144
+ current = response;
145
+ schedule();
146
+ }).catch((error) => {
147
+ failure = error;
148
+ });
149
+ }, input.intervalMs);
150
+ timer.unref();
151
+ };
152
+ schedule();
153
+ return {
154
+ async stop() {
155
+ stopped = true;
156
+ if (timer)
157
+ clearTimeout(timer);
158
+ await pending;
159
+ if (failure)
160
+ throw failure;
161
+ return current;
162
+ }
163
+ };
164
+ }
165
+ function stateConflict(current) {
166
+ if (current.intent.status === "TEMPORARILY_UNAVAILABLE") {
167
+ return new CodexServiceError("This intent retains a prior undispatched candidate that a new login cannot reproduce. Cancel it and create a new enrollment intent.", "enrollment_intent_state_conflict", 409);
168
+ }
169
+ return new CodexServiceError(`Enrollment intent cannot start a new official login from status ${current.intent.status}. Check status before retrying.`, "enrollment_intent_state_conflict", 409);
170
+ }
171
+ function isRetryableCandidateUpload(error) {
172
+ const value = error;
173
+ return value?.code === "codex_service_unavailable"
174
+ || typeof value?.status === "number" && value.status >= 500 && value.status <= 599
175
+ || value?.name === "AbortError"
176
+ || value?.name === "TimeoutError"
177
+ || error instanceof TypeError;
178
+ }
179
+ function isUncertainCandidateUpload(error) {
180
+ const code = error?.code;
181
+ return isRetryableCandidateUpload(error) || code === "invalid_codex_service_response";
182
+ }
183
+ async function reconcileCandidateUpload(client, intentId) {
184
+ let observed;
185
+ try {
186
+ observed = await client.getEnrollmentIntent(intentId);
187
+ }
188
+ catch {
189
+ throw ambiguousCandidateUpload();
190
+ }
191
+ const outcome = candidateOutcomeForStatus(observed.intent.status);
192
+ if (outcome) {
193
+ return {
194
+ ...observed,
195
+ result: {
196
+ outcome,
197
+ managedAccountId: observed.intent.resultManagedAccountId,
198
+ lineageId: observed.intent.resultLineageId,
199
+ generationVersion: observed.intent.currentGenerationVersion,
200
+ replayed: true
201
+ }
202
+ };
203
+ }
204
+ if (["EXPIRED", "CANCELLED"].includes(observed.intent.status)) {
205
+ throw new CodexServiceError(`Enrollment candidate ended in terminal status ${observed.intent.status}; do not reuse its login or upload key.`, `enrollment_candidate_${observed.intent.status.toLowerCase()}`, 409);
206
+ }
207
+ throw ambiguousCandidateUpload();
208
+ }
209
+ function candidateOutcomeForStatus(status) {
210
+ return [
211
+ "READY",
212
+ "ACCOUNT_MISMATCH",
213
+ "IDENTITY_UNVERIFIABLE",
214
+ "TEMPORARILY_UNAVAILABLE",
215
+ "OUTCOME_AMBIGUOUS"
216
+ ].includes(status) ? status : undefined;
217
+ }
218
+ function ambiguousCandidateUpload() {
219
+ return new CodexServiceError("The enrollment candidate upload result is not safely known. Do not start another login or submit a new key; inspect this same intent and resume only from a terminal Server result.", "enrollment_candidate_upload_ambiguous", 409);
220
+ }
221
+ function defaultWait(milliseconds) {
222
+ return new Promise((resolve) => setTimeout(resolve, milliseconds));
223
+ }
224
+ //# sourceMappingURL=enrollment-flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enrollment-flow.js","sourceRoot":"","sources":["../src/enrollment-flow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { type CodexRuntimeOptions } from "./runtime.js";
2
+ export interface OneShotCodexCredentials {
3
+ idToken: string;
4
+ accessToken: string;
5
+ refreshToken: string;
6
+ providerAccountId?: string;
7
+ lastRefresh?: string;
8
+ }
9
+ export interface OneShotCodexLoginContext {
10
+ codexHome: string;
11
+ args: string[];
12
+ env: NodeJS.ProcessEnv;
13
+ }
14
+ export interface OneShotCodexLoginOptions {
15
+ mode?: "browser" | "device";
16
+ env?: NodeJS.ProcessEnv;
17
+ temporaryRoot?: string;
18
+ runtime?: Omit<CodexRuntimeOptions, "env">;
19
+ runner?: (context: OneShotCodexLoginContext) => Promise<number>;
20
+ }
21
+ /**
22
+ * Runs one isolated official Codex login without touching the normal Codex home
23
+ * or the codex-multi-auth account pool. Credentials exist only for the duration
24
+ * of `consume`; the isolated home is removed on success, failure, or cancellation.
25
+ */
26
+ export declare function withOneShotCodexLogin<T>(options: OneShotCodexLoginOptions, consume: (credentials: OneShotCodexCredentials) => Promise<T>): Promise<T>;
@@ -0,0 +1,104 @@
1
+ import { lstat, mkdtemp, readFile, rm } from "node:fs/promises";
2
+ import { tmpdir } from "node:os";
3
+ import { join, resolve } from "node:path";
4
+ import { z } from "zod";
5
+ import { CodexRuntimeError } from "./errors.js";
6
+ import { resolveCodexRuntime, runCodexLaunch } from "./runtime.js";
7
+ const MAX_AUTH_FILE_BYTES = 1024 * 1024;
8
+ const OneShotAuthFileSchema = z.strictObject({
9
+ auth_mode: z.literal("chatgpt"),
10
+ OPENAI_API_KEY: z.unknown().optional(),
11
+ tokens: z.strictObject({
12
+ id_token: z.string().min(1),
13
+ access_token: z.string().min(1),
14
+ refresh_token: z.string().min(1),
15
+ account_id: z.string().min(1).optional()
16
+ }),
17
+ last_refresh: z.string().datetime({ offset: true }).optional()
18
+ });
19
+ async function runOfficialLogin(context, runtime) {
20
+ const launch = await resolveCodexRuntime(context.args, {
21
+ ...runtime,
22
+ env: context.env
23
+ });
24
+ return runCodexLaunch(launch, context.env, runtime?.binaryEnvNames?.[0]);
25
+ }
26
+ async function readOneShotCredentials(codexHome) {
27
+ const authPath = join(codexHome, "auth.json");
28
+ const file = await lstat(authPath).catch((error) => {
29
+ if (error.code === "ENOENT") {
30
+ throw new CodexRuntimeError("Official Codex login completed without creating auth.json.");
31
+ }
32
+ throw error;
33
+ });
34
+ if (!file.isFile() || file.isSymbolicLink() || file.size > MAX_AUTH_FILE_BYTES) {
35
+ throw new CodexRuntimeError("Official Codex login produced an invalid auth.json file.");
36
+ }
37
+ let decoded;
38
+ let encoded;
39
+ try {
40
+ encoded = await readFile(authPath);
41
+ decoded = JSON.parse(encoded.toString("utf8"));
42
+ }
43
+ catch (error) {
44
+ throw new CodexRuntimeError("Official Codex login produced unreadable auth.json data.", {
45
+ cause: error
46
+ });
47
+ }
48
+ finally {
49
+ encoded?.fill(0);
50
+ }
51
+ const parsed = OneShotAuthFileSchema.safeParse(decoded);
52
+ if (!parsed.success) {
53
+ throw new CodexRuntimeError("Official Codex login did not produce complete ChatGPT credentials.");
54
+ }
55
+ return {
56
+ idToken: parsed.data.tokens.id_token,
57
+ accessToken: parsed.data.tokens.access_token,
58
+ refreshToken: parsed.data.tokens.refresh_token,
59
+ ...(parsed.data.tokens.account_id
60
+ ? { providerAccountId: parsed.data.tokens.account_id }
61
+ : {}),
62
+ ...(parsed.data.last_refresh ? { lastRefresh: parsed.data.last_refresh } : {})
63
+ };
64
+ }
65
+ /**
66
+ * Runs one isolated official Codex login without touching the normal Codex home
67
+ * or the codex-multi-auth account pool. Credentials exist only for the duration
68
+ * of `consume`; the isolated home is removed on success, failure, or cancellation.
69
+ */
70
+ export async function withOneShotCodexLogin(options, consume) {
71
+ const baseEnv = options.env ?? process.env;
72
+ const temporaryRoot = resolve(options.temporaryRoot ?? tmpdir());
73
+ const codexHome = await mkdtemp(join(temporaryRoot, "numa-codex-enrollment-"));
74
+ const args = ["login", ...(options.mode === "device" ? ["--device-auth"] : [])];
75
+ const env = { ...baseEnv, CODEX_HOME: codexHome };
76
+ try {
77
+ const exitCode = await (options.runner
78
+ ? options.runner({ codexHome, args, env })
79
+ : runOfficialLogin({ codexHome, args, env }, options.runtime));
80
+ if (exitCode !== 0) {
81
+ throw new CodexRuntimeError(`Official Codex login exited with code ${exitCode}.`);
82
+ }
83
+ const credentials = await readOneShotCredentials(codexHome);
84
+ try {
85
+ return await consume(credentials);
86
+ }
87
+ finally {
88
+ credentials.refreshToken = "";
89
+ credentials.accessToken = "";
90
+ credentials.idToken = "";
91
+ delete credentials.providerAccountId;
92
+ delete credentials.lastRefresh;
93
+ }
94
+ }
95
+ finally {
96
+ try {
97
+ await rm(codexHome, { recursive: true, force: true });
98
+ }
99
+ catch (error) {
100
+ throw new CodexRuntimeError("Unable to remove the isolated Codex login directory; remove it before retrying enrollment.", { cause: error });
101
+ }
102
+ }
103
+ }
104
+ //# sourceMappingURL=enrollment-login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enrollment-login.js","sourceRoot":"","sources":["../src/enrollment-login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EACL,mBAAmB,EACnB,cAAc,EAEf,MAAM,cAAc,CAAC;AAEtB,MAAM,mBAAmB,GAAG,IAAI,GAAG,IAAI,CAAC;AAExC,MAAM,qBAAqB,GAAG,CAAC,CAAC,YAAY,CAAC;IAC3C,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IAC/B,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACtC,MAAM,EAAE,CAAC,CAAC,YAAY,CAAC;QACrB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAChC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;KACzC,CAAC;IACF,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC/D,CAAC,CAAC;AAwBH,KAAK,UAAU,gBAAgB,CAC7B,OAAiC,EACjC,OAAqD;IAErD,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,IAAI,EAAE;QACrD,GAAG,OAAO;QACV,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CAAC,CAAC;IACH,OAAO,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,KAAK,UAAU,sBAAsB,CAAC,SAAiB;IACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QAC1D,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,MAAM,IAAI,iBAAiB,CAAC,4DAA4D,CAAC,CAAC;QAC5F,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,IAAI,GAAG,mBAAmB,EAAE,CAAC;QAC/E,MAAM,IAAI,iBAAiB,CAAC,0DAA0D,CAAC,CAAC;IAC1F,CAAC;IAED,IAAI,OAAgB,CAAC;IACrB,IAAI,OAA2B,CAAC;IAChC,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAY,CAAC;IAC5D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,iBAAiB,CAAC,0DAA0D,EAAE;YACtF,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IACD,MAAM,MAAM,GAAG,qBAAqB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACxD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,iBAAiB,CAAC,oEAAoE,CAAC,CAAC;IACpG,CAAC;IACD,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ;QACpC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY;QAC5C,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa;QAC9C,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU;YAC/B,CAAC,CAAC,EAAE,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;YACtD,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC/E,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAAiC,EACjC,OAA6D;IAE7D,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IAC3C,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,IAAI,MAAM,EAAE,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,wBAAwB,CAAC,CAAC,CAAC;IAC/E,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChF,MAAM,GAAG,GAAG,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;IAElD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM;YACpC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;YAC1C,CAAC,CAAC,gBAAgB,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QACjE,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACnB,MAAM,IAAI,iBAAiB,CAAC,yCAAyC,QAAQ,GAAG,CAAC,CAAC;QACpF,CAAC;QACD,MAAM,WAAW,GAAG,MAAM,sBAAsB,CAAC,SAAS,CAAC,CAAC;QAC5D,IAAI,CAAC;YACH,OAAO,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;QACpC,CAAC;gBAAS,CAAC;YACT,WAAW,CAAC,YAAY,GAAG,EAAE,CAAC;YAC9B,WAAW,CAAC,WAAW,GAAG,EAAE,CAAC;YAC7B,WAAW,CAAC,OAAO,GAAG,EAAE,CAAC;YACzB,OAAO,WAAW,CAAC,iBAAiB,CAAC;YACrC,OAAO,WAAW,CAAC,WAAW,CAAC;QACjC,CAAC;IACH,CAAC;YAAS,CAAC;QACT,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,iBAAiB,CACzB,4FAA4F,EAC5F,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}
package/dist/index.d.ts CHANGED
@@ -15,4 +15,17 @@ export * from "./config.js";
15
15
  export * from "./quota-cache.js";
16
16
  export * from "./legacy-cleanup.js";
17
17
  export * from "./profile.js";
18
+ export * from "./enrollment-login.js";
19
+ export * from "./enrollment-envelope.js";
20
+ export * from "./enrollment-flow.js";
21
+ export * from "./migration-login-batch.js";
22
+ export * from "./short-lived-delivery.js";
23
+ export * from "./short-lived-delivery-flow.js";
24
+ export * from "./short-lived-delivery-journal.js";
25
+ export * from "./credential-supervisor.js";
26
+ export * from "./managed-credential-v3.js";
27
+ export * from "./managed-credential-v3-envelope.js";
28
+ export * from "./managed-credential-v3-flow.js";
29
+ export * from "./managed-credential-v3-journal.js";
30
+ export * from "./retirement-flow.js";
18
31
  export { registerCodexCommands } from "./commands.js";
package/dist/index.js CHANGED
@@ -24,10 +24,10 @@ export async function createCodexModule(options = {}) {
24
24
  launchMode: config.launcher.launchMode,
25
25
  packageName: "@openai/codex"
26
26
  });
27
- const run = async (args = []) => runCodexLaunch(await resolveRuntime(args), env, config.launcher.binaryEnvNames[0]);
28
- const app = async (workspace = ".") => {
27
+ const run = async (args = [], launchOptions = {}) => runCodexLaunch(await resolveRuntime(args), env, config.launcher.binaryEnvNames[0], launchOptions);
28
+ const app = async (workspace = ".", launchOptions = {}) => {
29
29
  await options.desktopApp?.prepare?.();
30
- return run(["app", workspace]);
30
+ return run(["app", workspace], launchOptions);
31
31
  };
32
32
  const module = {
33
33
  config,
@@ -42,6 +42,7 @@ export async function createCodexModule(options = {}) {
42
42
  status,
43
43
  run,
44
44
  app,
45
+ env,
45
46
  output: options.output ?? process.stdout,
46
47
  errorOutput: options.errorOutput ?? process.stderr,
47
48
  jsonEnabled: options.jsonEnabled
@@ -68,5 +69,18 @@ export * from "./config.js";
68
69
  export * from "./quota-cache.js";
69
70
  export * from "./legacy-cleanup.js";
70
71
  export * from "./profile.js";
72
+ export * from "./enrollment-login.js";
73
+ export * from "./enrollment-envelope.js";
74
+ export * from "./enrollment-flow.js";
75
+ export * from "./migration-login-batch.js";
76
+ export * from "./short-lived-delivery.js";
77
+ export * from "./short-lived-delivery-flow.js";
78
+ export * from "./short-lived-delivery-journal.js";
79
+ export * from "./credential-supervisor.js";
80
+ export * from "./managed-credential-v3.js";
81
+ export * from "./managed-credential-v3-envelope.js";
82
+ export * from "./managed-credential-v3-flow.js";
83
+ export * from "./managed-credential-v3-journal.js";
84
+ export * from "./retirement-flow.js";
71
85
  export { registerCodexCommands } from "./commands.js";
72
86
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ import { type KeyObject } from "node:crypto";
2
+ import { type CodexV3CredentialEnvelope, type CodexV3CredentialIngress, type CodexV3FullCredentialDeliveryResponse, type CodexV3FullCredentialBundle, type CodexShortLivedDeliveryClientKey } from "./protocol.js";
3
+ export interface CodexV3FullCredentialInput {
4
+ refreshToken: string;
5
+ accessToken: string;
6
+ idToken: string;
7
+ providerAccountId: string;
8
+ expiresAt: string;
9
+ }
10
+ export interface CodexV3DeliveryKeyPair {
11
+ clientKey: CodexShortLivedDeliveryClientKey;
12
+ privateKey: KeyObject;
13
+ }
14
+ export declare function codexV3EnrollmentAad(input: {
15
+ tenantId: string;
16
+ subject: string;
17
+ clientRequestId: string;
18
+ idempotencyKey: string;
19
+ keyId: string;
20
+ }): Buffer;
21
+ export declare function codexV3GenerationReportAad(input: {
22
+ tenantId: string;
23
+ subject: string;
24
+ lineageId: string;
25
+ clientRequestId: string;
26
+ idempotencyKey: string;
27
+ expectedGenerationVersion: number;
28
+ rotationMode: "ROTATED" | "RETAINED";
29
+ keyId: string;
30
+ }): Buffer;
31
+ export declare function sealCodexV3Enrollment(input: {
32
+ tenantId: string;
33
+ subject: string;
34
+ clientRequestId: string;
35
+ idempotencyKey: string;
36
+ ingress: CodexV3CredentialIngress;
37
+ credentials: CodexV3FullCredentialInput;
38
+ }): CodexV3CredentialEnvelope;
39
+ export declare function sealCodexV3GenerationReport(input: {
40
+ tenantId: string;
41
+ subject: string;
42
+ lineageId: string;
43
+ clientRequestId: string;
44
+ idempotencyKey: string;
45
+ expectedGenerationVersion: number;
46
+ rotationMode: "ROTATED" | "RETAINED";
47
+ ingress: CodexV3CredentialIngress;
48
+ credentials: CodexV3FullCredentialInput;
49
+ }): CodexV3CredentialEnvelope;
50
+ export declare function createCodexV3DeliveryKeyPair(): CodexV3DeliveryKeyPair;
51
+ export declare function codexV3FullDeliveryAad(input: {
52
+ tenantId: string;
53
+ delivery: CodexV3FullCredentialDeliveryResponse["delivery"];
54
+ }): Buffer;
55
+ export declare function openCodexV3FullCredentialDelivery(input: {
56
+ tenantId: string;
57
+ response: CodexV3FullCredentialDeliveryResponse;
58
+ privateKey: KeyObject;
59
+ now?: number;
60
+ }): CodexV3FullCredentialBundle;