@tokensrc/codex 1.14.15 → 1.14.17

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 (39) hide show
  1. package/README.md +95 -2
  2. package/dist/client.d.ts +22 -1
  3. package/dist/client.js +228 -5
  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.js +575 -21
  8. package/dist/commands.js.map +1 -1
  9. package/dist/errors.d.ts +1 -1
  10. package/dist/errors.js.map +1 -1
  11. package/dist/index.d.ts +2 -0
  12. package/dist/index.js +2 -0
  13. package/dist/index.js.map +1 -1
  14. package/dist/managed-credential-v3-envelope.d.ts +40 -1
  15. package/dist/managed-credential-v3-envelope.js +118 -1
  16. package/dist/managed-credential-v3-envelope.js.map +1 -1
  17. package/dist/managed-credential-v3-flow.js +105 -21
  18. package/dist/managed-credential-v3-flow.js.map +1 -1
  19. package/dist/profile.d.ts +2 -0
  20. package/dist/profile.js +26 -1
  21. package/dist/profile.js.map +1 -1
  22. package/dist/protocol.d.ts +1228 -0
  23. package/dist/protocol.js +516 -2
  24. package/dist/protocol.js.map +1 -1
  25. package/dist/request-bound-device-v6-flow.d.ts +42 -0
  26. package/dist/request-bound-device-v6-flow.js +403 -0
  27. package/dist/request-bound-device-v6-flow.js.map +1 -0
  28. package/dist/request-bound-device-v6-state.d.ts +397 -0
  29. package/dist/request-bound-device-v6-state.js +221 -0
  30. package/dist/request-bound-device-v6-state.js.map +1 -0
  31. package/dist/selection.d.ts +5 -0
  32. package/dist/selection.js +20 -2
  33. package/dist/selection.js.map +1 -1
  34. package/dist/token-pool-v4-upload-flow.js +5 -1
  35. package/dist/token-pool-v4-upload-flow.js.map +1 -1
  36. package/dist/tui.d.ts +7 -2
  37. package/dist/tui.js +21 -6
  38. package/dist/tui.js.map +1 -1
  39. package/package.json +2 -2
@@ -0,0 +1,403 @@
1
+ import { createHash, randomUUID } from "node:crypto";
2
+ import { hostname } from "node:os";
3
+ import { CodexServiceError } from "./errors.js";
4
+ import { codexV3CredentialDigests, commitManagedCodexV3GenerationReport, installManagedCodexV3Credentials, markManagedCodexV3DeliveryAcknowledged, readManagedCodexV3State, withManagedCodexV3CredentialObservation } from "./managed-credential-v3.js";
5
+ import { createCodexV3DeliveryKeyPair, openCodexV6FullCredentialDelivery, sealCodexV6GenerationReport } from "./managed-credential-v3-envelope.js";
6
+ import { exportCodexV5PrivateKey, getOrCreateCodexInstallationId } from "./multi-device-v5-state.js";
7
+ import { clearCodexV6DeliveryJournal, clearCodexV6ReportJournal, openCodexV6DeliveryJournalKey, readCodexV6BindingState, readCodexV6DeliveryJournal, readCodexV6ReportJournal, updateCodexV6DeliveryJournalResponse, writeCodexV6BindingState, writeCodexV6DeliveryJournal, writeCodexV6ReportJournal } from "./request-bound-device-v6-state.js";
8
+ export async function reconcileCodexV6DeviceAccess(input) {
9
+ const env = input.env ?? process.env;
10
+ const now = input.now ?? Date.now;
11
+ const newId = input.newId ?? randomUUID;
12
+ const subject = await input.client.getCurrentActorSubject();
13
+ const installationId = await getOrCreateCodexInstallationId(env, now(), newId);
14
+ const currentBinding = await readCodexV6BindingState(env);
15
+ if (currentBinding && (currentBinding.tenantId !== input.tenantId
16
+ || currentBinding.subject !== subject
17
+ || currentBinding.installationId !== installationId)) {
18
+ throw new CodexServiceError("This Codex home is already bound to another request actor or installation; reset it before switching users.", "codex_request_device_actor_conflict", 409);
19
+ }
20
+ const local = await readManagedCodexV3State(env);
21
+ const legacy = !currentBinding && local?.phase === "INSTALLED" ? {
22
+ assignmentId: local.assignmentId,
23
+ managedAccountId: local.managedAccountId,
24
+ providerAccountId: local.providerAccountId,
25
+ lineageId: local.lineageId,
26
+ generationVersion: local.generationVersion
27
+ } : null;
28
+ const stableMigrationId = legacy ? migrationOperationId({
29
+ tenantId: input.tenantId, subject, installationId, assignmentId: legacy.assignmentId
30
+ }) : newId();
31
+ const response = await input.client.reconcileV6DeviceAccess({
32
+ schemaVersion: 6,
33
+ clientRequestId: `reconcile-${stableMigrationId}`,
34
+ device: {
35
+ installationId,
36
+ label: normalizeDeviceLabel(input.deviceLabel),
37
+ platform: supportedPlatform(process.platform)
38
+ },
39
+ legacy
40
+ }, `reconcile-${stableMigrationId}`);
41
+ if (response.request && response.request.userSubject !== subject
42
+ || response.binding && (response.binding.userSubject !== subject
43
+ || response.binding.installationId !== installationId)
44
+ || response.replacementBinding && (response.replacementBinding.userSubject !== subject
45
+ || response.replacementBinding.installationId !== installationId)) {
46
+ throw new CodexServiceError("Codex v6 device access belongs to another user or installation.", "invalid_codex_service_response");
47
+ }
48
+ if (response.accessStatus === "AVAILABLE" && response.request && response.binding) {
49
+ await adoptAvailableBinding({
50
+ tenantId: input.tenantId, subject, installationId,
51
+ requestId: response.request.id, binding: response.binding, local, env, now: now()
52
+ });
53
+ }
54
+ return { installationId, response };
55
+ }
56
+ export function requireAvailableCodexV6DeviceAccess(result) {
57
+ const { response, installationId } = result;
58
+ if (response.accessStatus === "AVAILABLE" && response.request && response.binding) {
59
+ return { request: response.request, binding: response.binding };
60
+ }
61
+ if (response.accessStatus === "DEVICE_BINDING_REQUIRED") {
62
+ throw new CodexServiceError(`当前设备 ${installationId} 尚未绑定独立 Token Set。请联系管理员为该申请绑定新设备;系统不会复制其他设备的 Refresh Token。`, "codex_device_binding_required", 409);
63
+ }
64
+ if (response.accessStatus === "REQUEST_REQUIRED") {
65
+ throw new CodexServiceError("当前用户尚未提交 ChatGPT/Codex 账号申请。请运行 numa codex request create。", "codex_account_request_required", 409);
66
+ }
67
+ if (response.accessStatus === "REQUEST_PENDING") {
68
+ throw new CodexServiceError("ChatGPT/Codex 账号申请仍在等待审批。", "codex_account_request_pending", 409);
69
+ }
70
+ if (response.accessStatus === "TOKEN_PENDING") {
71
+ throw new CodexServiceError("当前设备绑定正在等待独立 Token Set。", "codex_device_token_pending", 409);
72
+ }
73
+ if (response.accessStatus === "REQUEST_EXPIRED") {
74
+ throw new CodexServiceError("ChatGPT/Codex 账号申请已到期,请续期后再使用。", "codex_account_request_expired", 409);
75
+ }
76
+ throw new CodexServiceError("当前申请或设备绑定暂不可用。", "codex_request_device_unavailable", 409);
77
+ }
78
+ export async function ensureCodexV6DeviceCredentials(input) {
79
+ const env = input.env ?? process.env;
80
+ const now = input.now ?? Date.now;
81
+ const newId = input.newId ?? randomUUID;
82
+ const access = await reconcileCodexV6DeviceAccess(input);
83
+ const { request, binding: currentBinding } = requireAvailableCodexV6DeviceAccess(access);
84
+ const binding = access.response.replacementBinding ?? currentBinding;
85
+ requireCompleteBinding(binding);
86
+ const subject = await input.client.getCurrentActorSubject();
87
+ const existing = await readCodexV6BindingState(env);
88
+ const local = await readManagedCodexV3State(env);
89
+ const bindingInstalled = existing && local?.phase === "INSTALLED"
90
+ && local.authorityMode === "CLIENT_MANAGED"
91
+ && existing.bindingId === binding.id && existing.requestId === request.id
92
+ && existing.installationId === access.installationId
93
+ && existing.credentialLineageId === binding.credentialLineageId
94
+ && existing.generationVersion === binding.generationVersion
95
+ && local.assignmentId === existing.localAssignmentId
96
+ && local.lineageId === existing.credentialLineageId
97
+ && local.generationVersion === existing.generationVersion
98
+ && local.providerAccountId === binding.providerAccountId;
99
+ if (bindingInstalled) {
100
+ return { credentialExpiresAt: local.credentialExpiresAt, binding };
101
+ }
102
+ const currentBindingInstalled = access.response.replacementBinding !== null
103
+ && existing && local?.phase === "INSTALLED" && local.authorityMode === "CLIENT_MANAGED"
104
+ && existing.bindingId === currentBinding.id && existing.requestId === request.id
105
+ && existing.installationId === access.installationId
106
+ && existing.credentialLineageId === currentBinding.credentialLineageId
107
+ && existing.generationVersion === currentBinding.generationVersion
108
+ && local.assignmentId === existing.localAssignmentId
109
+ && local.lineageId === existing.credentialLineageId
110
+ && local.generationVersion === existing.generationVersion
111
+ && local.providerAccountId === currentBinding.providerAccountId;
112
+ try {
113
+ let journal = await readCodexV6DeliveryJournal(env);
114
+ if (!journal) {
115
+ const pair = createCodexV3DeliveryKeyPair();
116
+ const timestamp = new Date(now()).toISOString();
117
+ journal = await writeCodexV6DeliveryJournal({
118
+ schemaVersion: 1, tenantId: input.tenantId, subject,
119
+ requestId: request.id, bindingId: binding.id, installationId: access.installationId,
120
+ expectedManagedAccountId: binding.managedAccountId,
121
+ expectedProviderAccountId: binding.providerAccountId,
122
+ expectedPoolEntryId: binding.poolEntryId,
123
+ expectedCredentialLineageId: binding.credentialLineageId,
124
+ clientRequestId: newId(), idempotencyKey: newId(), ackIdempotencyKey: newId(),
125
+ clientKey: pair.clientKey, privateKeyPkcs8: exportCodexV5PrivateKey(pair.privateKey),
126
+ response: null, createdAt: timestamp, updatedAt: timestamp
127
+ }, env);
128
+ }
129
+ assertDeliveryJournal(journal, input.tenantId, subject, request.id, binding, access.installationId);
130
+ let response = journal.response;
131
+ if (!response) {
132
+ response = await postResolveReplay(() => input.client.createV6FullCredentialDelivery(binding.id, {
133
+ schemaVersion: 6, clientRequestId: journal.clientRequestId,
134
+ installationId: journal.installationId, clientKey: journal.clientKey
135
+ }, journal.idempotencyKey), () => input.client.resolveV6FullCredentialDelivery(binding.id, journal.clientRequestId, journal.installationId));
136
+ journal = await updateCodexV6DeliveryJournalResponse(journal, response, now(), env);
137
+ }
138
+ const bundle = openCodexV6FullCredentialDelivery({
139
+ tenantId: input.tenantId, subject, response,
140
+ privateKey: openCodexV6DeliveryJournalKey(journal), now: now()
141
+ });
142
+ await installManagedCodexV3Credentials({
143
+ tenantId: input.tenantId, enrollmentId: request.id,
144
+ assignmentId: binding.id, managedAccountId: bundle.managedAccountId,
145
+ providerAccountId: bundle.providerAccountId, lineageId: bundle.credentialLineageId,
146
+ generationVersion: bundle.generationVersion, deliveryId: bundle.deliveryId,
147
+ ackIdempotencyKey: journal.ackIdempotencyKey,
148
+ refreshToken: bundle.refreshToken, accessToken: bundle.accessToken, idToken: bundle.idToken,
149
+ credentialExpiresAt: bundle.expiresAt, ackExpiresAt: response.delivery.ackExpiresAt
150
+ }, now(), env, { allowSameGenerationRedelivery: true });
151
+ const ack = await replayExact(() => input.client.acknowledgeV6FullCredentialDelivery(bundle.deliveryId, { schemaVersion: 6, installationId: access.installationId,
152
+ credentialLineageId: bundle.credentialLineageId,
153
+ generationVersion: bundle.generationVersion, installed: true }, journal.ackIdempotencyKey));
154
+ await markManagedCodexV3DeliveryAcknowledged({
155
+ deliveryId: bundle.deliveryId, generationVersion: bundle.generationVersion,
156
+ authorityEpoch: 1, ackedAt: ack.delivery.ackedAt
157
+ }, env);
158
+ await writeCodexV6BindingState({
159
+ schemaVersion: 1, tenantId: input.tenantId, subject,
160
+ requestId: request.id, bindingId: binding.id,
161
+ predecessorBindingId: binding.predecessorBindingId,
162
+ installationId: access.installationId,
163
+ managedAccountId: bundle.managedAccountId, providerAccountId: bundle.providerAccountId,
164
+ poolEntryId: binding.poolEntryId, credentialLineageId: bundle.credentialLineageId,
165
+ generationVersion: bundle.generationVersion, accountExpiresAt: binding.accountExpiresAt,
166
+ localAssignmentId: binding.id,
167
+ source: binding.source, status: "ACTIVE", updatedAt: ack.delivery.ackedAt
168
+ }, env);
169
+ await clearCodexV6DeliveryJournal(journal, env);
170
+ return { credentialExpiresAt: bundle.expiresAt, binding };
171
+ }
172
+ catch (error) {
173
+ const afterFailure = await readManagedCodexV3State(env);
174
+ const currentStillInstalled = currentBindingInstalled
175
+ && afterFailure?.phase === "INSTALLED"
176
+ && afterFailure.assignmentId === currentBinding.id
177
+ && afterFailure.lineageId === currentBinding.credentialLineageId
178
+ && afterFailure.generationVersion === currentBinding.generationVersion;
179
+ if (access.response.replacementBinding !== null && currentStillInstalled
180
+ && currentBinding.replacementReason !== "CREDENTIAL_UNHEALTHY"
181
+ && (currentBinding.accountExpiresAt === null
182
+ || Date.parse(currentBinding.accountExpiresAt) > now())
183
+ && replacementMayBeDeferred(error)) {
184
+ return {
185
+ credentialExpiresAt: afterFailure.credentialExpiresAt,
186
+ binding: currentBinding,
187
+ replacementDeferredWarningCode: "request_device_replacement_deferred"
188
+ };
189
+ }
190
+ throw error;
191
+ }
192
+ }
193
+ export async function reportCodexV6DeviceCredentials(input) {
194
+ const env = input.env ?? process.env;
195
+ const now = input.now ?? Date.now;
196
+ const newId = input.newId ?? randomUUID;
197
+ const binding = await readCodexV6BindingState(env);
198
+ if (!binding || binding.status !== "ACTIVE")
199
+ return { reported: false };
200
+ try {
201
+ let journal = await readCodexV6ReportJournal(env);
202
+ if (journal) {
203
+ assertReportJournal(journal, binding);
204
+ await completeReport(input.client, journal, binding, env);
205
+ return { reported: true };
206
+ }
207
+ const subject = await input.client.getCurrentActorSubject();
208
+ if (subject !== binding.subject)
209
+ throw stateConflict();
210
+ const configuration = await input.client.getTokenPoolV4EnrollmentConfiguration();
211
+ const result = await withManagedCodexV3CredentialObservation(env, now(), async (observation) => {
212
+ if (observation.state.assignmentId !== binding.localAssignmentId
213
+ || observation.state.lineageId !== binding.credentialLineageId
214
+ || observation.state.generationVersion !== binding.generationVersion)
215
+ throw stateConflict();
216
+ const digests = codexV3CredentialDigests(observation.credentials);
217
+ const changed = digests.accessTokenDigest !== observation.state.accessTokenDigest
218
+ || digests.refreshTokenDigest !== observation.state.refreshTokenDigest
219
+ || digests.idTokenDigest !== observation.state.idTokenDigest;
220
+ if (!changed)
221
+ return false;
222
+ const timestamp = new Date(now()).toISOString();
223
+ const clientRequestId = newId();
224
+ const idempotencyKey = newId();
225
+ const envelope = sealCodexV6GenerationReport({
226
+ tenantId: input.tenantId, subject, requestId: binding.requestId,
227
+ bindingId: binding.bindingId, installationId: binding.installationId,
228
+ credentialLineageId: binding.credentialLineageId,
229
+ clientRequestId, idempotencyKey,
230
+ expectedGenerationVersion: binding.generationVersion,
231
+ rotationMode: observation.rotationMode, ingress: configuration.ingress,
232
+ credentials: { ...observation.credentials, expiresAt: observation.credentialExpiresAt }
233
+ });
234
+ journal = await writeCodexV6ReportJournal({
235
+ schemaVersion: 1, tenantId: input.tenantId, subject,
236
+ requestId: binding.requestId, bindingId: binding.bindingId,
237
+ installationId: binding.installationId,
238
+ credentialLineageId: binding.credentialLineageId,
239
+ clientRequestId, idempotencyKey,
240
+ expectedGenerationVersion: binding.generationVersion,
241
+ rotationMode: observation.rotationMode, envelope,
242
+ accessTokenHealth: observation.accessTokenHealth,
243
+ refreshTokenHealth: observation.refreshTokenHealth,
244
+ observedAt: observation.observedAt, credentialExpiresAt: observation.credentialExpiresAt,
245
+ ...digests, createdAt: timestamp, updatedAt: timestamp
246
+ }, env);
247
+ await completeReport(input.client, journal, binding, env);
248
+ return true;
249
+ });
250
+ return { reported: result === true };
251
+ }
252
+ catch (error) {
253
+ return { reported: false,
254
+ warningCode: String(error.code ?? "request_device_generation_report_failed") };
255
+ }
256
+ }
257
+ async function completeReport(client, journal, binding, env) {
258
+ const response = await postResolveReplay(() => client.reportV6Generation(binding.bindingId, {
259
+ schemaVersion: 6, clientRequestId: journal.clientRequestId,
260
+ bindingId: binding.bindingId, installationId: binding.installationId,
261
+ expectedGenerationVersion: journal.expectedGenerationVersion,
262
+ rotationMode: journal.rotationMode, envelope: journal.envelope,
263
+ accessTokenHealth: journal.accessTokenHealth,
264
+ refreshTokenHealth: journal.refreshTokenHealth, observedAt: journal.observedAt
265
+ }, journal.idempotencyKey), () => client.resolveV6GenerationReport(binding.bindingId, journal));
266
+ if (response.report.requestId !== binding.requestId
267
+ || response.report.credentialLineageId !== binding.credentialLineageId
268
+ || response.report.credentialExpiresAt !== journal.credentialExpiresAt) {
269
+ throw new CodexServiceError("The v6 report does not match its request-bound device credential.", "invalid_codex_service_response");
270
+ }
271
+ const local = await readManagedCodexV3State(env);
272
+ await commitManagedCodexV3GenerationReport({
273
+ lineageId: response.report.credentialLineageId,
274
+ previousGenerationVersion: response.report.previousGenerationVersion,
275
+ generationVersion: response.report.generationVersion,
276
+ authorityEpoch: local?.authorityEpoch ?? 1,
277
+ credentialExpiresAt: response.report.credentialExpiresAt,
278
+ observedAt: response.report.observedAt,
279
+ allowNewerLocalCredentials: true,
280
+ tokenDigests: { accessTokenDigest: journal.accessTokenDigest,
281
+ refreshTokenDigest: journal.refreshTokenDigest, idTokenDigest: journal.idTokenDigest }
282
+ }, env);
283
+ await writeCodexV6BindingState({ ...binding,
284
+ generationVersion: response.report.generationVersion,
285
+ updatedAt: response.report.observedAt }, env);
286
+ await clearCodexV6ReportJournal(journal, env);
287
+ }
288
+ async function adoptAvailableBinding(input) {
289
+ const { binding, local } = input;
290
+ if (!local || local.phase !== "INSTALLED" || !completeBinding(binding)
291
+ || local.managedAccountId !== binding.managedAccountId
292
+ || local.providerAccountId !== binding.providerAccountId
293
+ || local.lineageId !== binding.credentialLineageId
294
+ || local.generationVersion !== binding.generationVersion)
295
+ return;
296
+ if (binding.source === "LEGACY_AUTO_MIGRATED"
297
+ && binding.legacyAssignmentId !== local.assignmentId)
298
+ throw stateConflict();
299
+ await writeCodexV6BindingState({
300
+ schemaVersion: 1, tenantId: input.tenantId, subject: input.subject,
301
+ requestId: input.requestId, bindingId: binding.id,
302
+ predecessorBindingId: binding.predecessorBindingId,
303
+ installationId: input.installationId,
304
+ managedAccountId: binding.managedAccountId, providerAccountId: binding.providerAccountId,
305
+ poolEntryId: binding.poolEntryId, credentialLineageId: binding.credentialLineageId,
306
+ generationVersion: binding.generationVersion, accountExpiresAt: binding.accountExpiresAt,
307
+ localAssignmentId: local.assignmentId,
308
+ source: binding.source, status: binding.status === "NEEDS_REAUTH" ? "NEEDS_REAUTH" : "ACTIVE",
309
+ updatedAt: new Date(input.now).toISOString()
310
+ }, input.env);
311
+ }
312
+ function assertDeliveryJournal(journal, tenantId, subject, requestId, binding, installationId) {
313
+ requireCompleteBinding(binding);
314
+ if (journal.tenantId !== tenantId || journal.subject !== subject
315
+ || journal.requestId !== requestId || journal.bindingId !== binding.id
316
+ || journal.installationId !== installationId
317
+ || journal.expectedManagedAccountId !== binding.managedAccountId
318
+ || journal.expectedProviderAccountId !== binding.providerAccountId
319
+ || journal.expectedPoolEntryId !== binding.poolEntryId
320
+ || journal.expectedCredentialLineageId !== binding.credentialLineageId)
321
+ throw stateConflict();
322
+ }
323
+ function assertReportJournal(journal, binding) {
324
+ if (journal.tenantId !== binding.tenantId || journal.subject !== binding.subject
325
+ || journal.requestId !== binding.requestId || journal.bindingId !== binding.bindingId
326
+ || journal.installationId !== binding.installationId
327
+ || journal.credentialLineageId !== binding.credentialLineageId
328
+ || journal.expectedGenerationVersion !== binding.generationVersion)
329
+ throw stateConflict();
330
+ }
331
+ function requireCompleteBinding(binding) {
332
+ if (!completeBinding(binding))
333
+ throw new CodexServiceError("The request-bound device is still waiting for an independent token set.", "codex_device_token_pending", 409);
334
+ }
335
+ function completeBinding(binding) {
336
+ return binding.managedAccountId !== null && binding.providerAccountId !== null
337
+ && binding.poolEntryId !== null && binding.credentialLineageId !== null
338
+ && binding.generationVersion !== null && binding.credentialExpiresAt !== null;
339
+ }
340
+ function migrationOperationId(input) {
341
+ return createHash("sha256").update([
342
+ input.tenantId, input.subject, input.installationId, input.assignmentId
343
+ ].join("\0")).digest("hex").slice(0, 32);
344
+ }
345
+ function normalizeDeviceLabel(value) {
346
+ const label = value?.trim() || hostname().trim() || "Codex device";
347
+ return label.slice(0, 128);
348
+ }
349
+ function supportedPlatform(value) {
350
+ return ["darwin", "linux", "win32"].includes(value)
351
+ ? value : "unknown";
352
+ }
353
+ async function postResolveReplay(post, resolve) {
354
+ try {
355
+ return await post();
356
+ }
357
+ catch (error) {
358
+ if (!resultMayBeUnknown(error))
359
+ throw error;
360
+ try {
361
+ return await resolve();
362
+ }
363
+ catch (resolveError) {
364
+ if (resolveError instanceof CodexServiceError && resolveError.status === 404) {
365
+ return post();
366
+ }
367
+ throw error;
368
+ }
369
+ }
370
+ }
371
+ async function replayExact(operation, attempts = 3) {
372
+ let last;
373
+ for (let attempt = 0; attempt < attempts; attempt += 1) {
374
+ try {
375
+ return await operation();
376
+ }
377
+ catch (error) {
378
+ last = error;
379
+ if (!resultMayBeUnknown(error))
380
+ throw error;
381
+ }
382
+ }
383
+ throw last;
384
+ }
385
+ function resultMayBeUnknown(error) {
386
+ if (!(error instanceof CodexServiceError))
387
+ return true;
388
+ return error.status === undefined || error.status >= 500
389
+ || error.code === "invalid_codex_service_response";
390
+ }
391
+ function replacementMayBeDeferred(error) {
392
+ if (!(error instanceof CodexServiceError))
393
+ return true;
394
+ if (["request_bound_device_v6_state_conflict", "invalid_codex_service_response",
395
+ "codex_request_device_actor_conflict"].includes(error.code))
396
+ return false;
397
+ return error.status === undefined || error.status === 408 || error.status === 409
398
+ || error.status === 429 || error.status >= 500;
399
+ }
400
+ function stateConflict() {
401
+ return new CodexServiceError("The local credential does not match its request-bound device binding.", "request_bound_device_v6_state_conflict", 409);
402
+ }
403
+ //# sourceMappingURL=request-bound-device-v6-flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-bound-device-v6-flow.js","sourceRoot":"","sources":["../src/request-bound-device-v6-flow.ts"],"names":[],"mappings":"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"}