oc-codex-multi-auth 6.9.1 → 6.10.1

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 (43) hide show
  1. package/README.md +45 -14
  2. package/config/README.md +71 -22
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +35 -7
  5. package/dist/index.js.map +1 -1
  6. package/dist/lib/auth/server.d.ts.map +1 -1
  7. package/dist/lib/auth/server.js +7 -3
  8. package/dist/lib/auth/server.js.map +1 -1
  9. package/dist/lib/config.d.ts +6 -0
  10. package/dist/lib/config.d.ts.map +1 -1
  11. package/dist/lib/config.js +9 -0
  12. package/dist/lib/config.js.map +1 -1
  13. package/dist/lib/oauth-success.d.ts +1 -0
  14. package/dist/lib/oauth-success.d.ts.map +1 -1
  15. package/dist/lib/oauth-success.html +198 -707
  16. package/dist/lib/oauth-success.js +202 -708
  17. package/dist/lib/oauth-success.js.map +1 -1
  18. package/dist/lib/schemas.d.ts +1 -0
  19. package/dist/lib/schemas.d.ts.map +1 -1
  20. package/dist/lib/schemas.js +1 -0
  21. package/dist/lib/schemas.js.map +1 -1
  22. package/dist/lib/tools/codex-doctor.d.ts.map +1 -1
  23. package/dist/lib/tools/codex-doctor.js +168 -142
  24. package/dist/lib/tools/codex-doctor.js.map +1 -1
  25. package/dist/lib/tools/codex-health.d.ts.map +1 -1
  26. package/dist/lib/tools/codex-health.js +41 -38
  27. package/dist/lib/tools/codex-health.js.map +1 -1
  28. package/dist/lib/tools/codex-refresh.d.ts.map +1 -1
  29. package/dist/lib/tools/codex-refresh.js +24 -103
  30. package/dist/lib/tools/codex-refresh.js.map +1 -1
  31. package/dist/lib/tools/index.d.ts +1 -0
  32. package/dist/lib/tools/index.d.ts.map +1 -1
  33. package/dist/lib/tools/index.js.map +1 -1
  34. package/dist/lib/tools/refresh-account.d.ts +63 -0
  35. package/dist/lib/tools/refresh-account.d.ts.map +1 -0
  36. package/dist/lib/tools/refresh-account.js +159 -0
  37. package/dist/lib/tools/refresh-account.js.map +1 -0
  38. package/dist/lib/ui/beginner.d.ts +1 -0
  39. package/dist/lib/ui/beginner.d.ts.map +1 -1
  40. package/dist/lib/ui/beginner.js +12 -1
  41. package/dist/lib/ui/beginner.js.map +1 -1
  42. package/package.json +155 -155
  43. package/scripts/install-oc-codex-multi-auth-core.js +6 -6
@@ -4,12 +4,12 @@
4
4
  */
5
5
  import { tool } from "@opencode-ai/plugin/tool";
6
6
  import { loadAccounts } from "../storage.js";
7
- import { queuedRefresh } from "../refresh-queue.js";
8
7
  import { findDisabledAccountsWithFreshCredential, findDisabledTokenSourceDuplicates, findStaleRecoverableAccounts, } from "../accounts/stale-state.js";
9
8
  import { formatUiHeader, formatUiItem, paintUiText } from "../ui/format.js";
10
9
  import { normalizeToolOutputFormat, renderJsonOutput } from "../runtime.js";
10
+ import { buildRefreshInputs, refreshAndPersistAccount, } from "./refresh-account.js";
11
11
  export function createCodexHealthTool(ctx) {
12
- const { resolveUiRuntime, formatCommandAccountLabel, resolveMaskEmail, getStatusMarker, buildJsonAccountIdentity, } = ctx;
12
+ const { resolveUiRuntime, formatCommandAccountLabel, resolveMaskEmail, getStatusMarker, buildJsonAccountIdentity, reloadCachedAccountManager, } = ctx;
13
13
  return tool({
14
14
  description: "Check health of all Codex accounts by validating refresh tokens.",
15
15
  args: {
@@ -35,6 +35,7 @@ export function createCodexHealthTool(ctx) {
35
35
  totalAccounts: 0,
36
36
  healthyCount: 0,
37
37
  unhealthyCount: 0,
38
+ skippedCount: 0,
38
39
  accounts: [],
39
40
  });
40
41
  }
@@ -54,42 +55,42 @@ export function createCodexHealthTool(ctx) {
54
55
  const jsonAccounts = [];
55
56
  let healthyCount = 0;
56
57
  let unhealthyCount = 0;
57
- for (let i = 0; i < storage.accounts.length; i++) {
58
+ let skippedCount = 0;
59
+ const inputs = buildRefreshInputs(storage.accounts);
60
+ for (let i = 0; i < inputs.length; i++) {
61
+ const input = inputs[i];
58
62
  const account = storage.accounts[i];
59
- if (!account)
63
+ if (!input || !account)
60
64
  continue;
61
65
  const label = formatCommandAccountLabel(account, i);
62
66
  const displayLabel = formatCommandAccountLabel(account, i, { maskEmail });
63
- try {
64
- const refreshResult = await queuedRefresh(account.refreshToken);
65
- if (refreshResult.type === "success") {
66
- jsonAccounts.push({
67
- ...buildJsonAccountIdentity(i, {
68
- includeSensitive: includeSensitiveOutput,
69
- account,
70
- label,
71
- }),
72
- status: "healthy",
73
- });
74
- results.push(` ${getStatusMarker(ui, "ok")} ${displayLabel}: Healthy`);
75
- healthyCount++;
76
- }
77
- else {
78
- jsonAccounts.push({
79
- ...buildJsonAccountIdentity(i, {
80
- includeSensitive: includeSensitiveOutput,
81
- account,
82
- label,
83
- }),
84
- status: "unhealthy",
85
- error: refreshResult.message ?? refreshResult.reason,
86
- });
87
- results.push(` ${getStatusMarker(ui, "error")} ${displayLabel}: Token refresh failed`);
88
- unhealthyCount++;
89
- }
67
+ const outcome = await refreshAndPersistAccount(input);
68
+ if (outcome.status === "refreshed") {
69
+ jsonAccounts.push({
70
+ ...buildJsonAccountIdentity(i, {
71
+ includeSensitive: includeSensitiveOutput,
72
+ account,
73
+ label,
74
+ }),
75
+ status: "healthy",
76
+ });
77
+ results.push(` ${getStatusMarker(ui, "ok")} ${displayLabel}: Healthy`);
78
+ healthyCount++;
79
+ }
80
+ else if (outcome.status === "skipped") {
81
+ jsonAccounts.push({
82
+ ...buildJsonAccountIdentity(i, {
83
+ includeSensitive: includeSensitiveOutput,
84
+ account,
85
+ label,
86
+ }),
87
+ status: "skipped",
88
+ error: "Account is disabled",
89
+ });
90
+ results.push(` ${getStatusMarker(ui, "warning")} ${displayLabel}: Skipped (disabled)`);
91
+ skippedCount++;
90
92
  }
91
- catch (error) {
92
- const errorMsg = error instanceof Error ? error.message : String(error);
93
+ else {
93
94
  jsonAccounts.push({
94
95
  ...buildJsonAccountIdentity(i, {
95
96
  includeSensitive: includeSensitiveOutput,
@@ -97,17 +98,18 @@ export function createCodexHealthTool(ctx) {
97
98
  label,
98
99
  }),
99
100
  status: "unhealthy",
100
- error: errorMsg.slice(0, 120),
101
+ error: outcome.error,
101
102
  });
102
- results.push(` ${getStatusMarker(ui, "error")} ${displayLabel}: Error - ${errorMsg.slice(0, 120)}`);
103
+ results.push(` ${getStatusMarker(ui, "error")} ${displayLabel}: ${outcome.error}`);
103
104
  unhealthyCount++;
104
105
  }
105
106
  }
107
+ await reloadCachedAccountManager();
106
108
  results.push("");
107
- results.push(`Summary: ${healthyCount} healthy, ${unhealthyCount} unhealthy`);
109
+ results.push(`Summary: ${healthyCount} healthy, ${unhealthyCount} unhealthy, ${skippedCount} skipped`);
108
110
  // Surface recoverable stale state and disabled token-source duplicates
109
- // (issue #171). codex-health is read-only, so it points the user at the
110
- // repair (`codex-doctor --fix` / `codex-remove`) rather than mutating.
111
+ // (issue #171). Token verification is destructive to single-use refresh
112
+ // tokens, but this tool persists rotations before reporting health.
111
113
  const staleRecoverable = findStaleRecoverableAccounts(storage.accounts);
112
114
  const duplicateSlots = findDisabledTokenSourceDuplicates(storage.accounts);
113
115
  const staleSlots = staleRecoverable.map((index) => index + 1);
@@ -127,6 +129,7 @@ export function createCodexHealthTool(ctx) {
127
129
  totalAccounts: storage.accounts.length,
128
130
  healthyCount,
129
131
  unhealthyCount,
132
+ skippedCount,
130
133
  staleRecoverableSlots: staleSlots,
131
134
  disabledDuplicateSlots: dupSlots,
132
135
  disabledWithFreshCredentialSlots: absorbedSlots,
@@ -1 +1 @@
1
- {"version":3,"file":"codex-health.js","sourceRoot":"","sources":["../../../lib/tools/codex-health.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAuB,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EACN,uCAAuC,EACvC,iCAAiC,EACjC,4BAA4B,GAC5B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAG5E,MAAM,UAAU,qBAAqB,CAAC,GAAgB;IACrD,MAAM,EACL,gBAAgB,EAChB,yBAAyB,EACzB,gBAAgB,EAChB,eAAe,EACf,wBAAwB,GACxB,GAAG,GAAG,CAAC;IACR,OAAO,IAAI,CAAC;QACX,WAAW,EACV,kEAAkE;QACnE,IAAI,EAAE;YACL,MAAM,EAAE,IAAI,CAAC,MAAM;iBACjB,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,4CAA4C,CAAC;YACxD,gBAAgB,EAAE,IAAI,CAAC,MAAM;iBAC3B,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CACR,wFAAwF,CACxF;SACF;QACD,KAAK,CAAC,OAAO,CAAC,EACb,MAAM,EACN,gBAAgB,MAIb,EAAE;YACL,MAAM,EAAE,GAAG,gBAAgB,EAAE,CAAC;YAC9B,MAAM,SAAS,GAAG,gBAAgB,EAAE,CAAC;YACrC,MAAM,YAAY,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;YACvD,MAAM,sBAAsB,GAAG,gBAAgB,KAAK,IAAI,CAAC;YACzD,MAAM,OAAO,GAAG,MAAM,YAAY,EAAE,CAAC;YACrC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/C,IAAI,YAAY,KAAK,MAAM,EAAE,CAAC;oBAC7B,OAAO,gBAAgB,CAAC;wBACvB,OAAO,EACN,wDAAwD;wBACzD,aAAa,EAAE,CAAC;wBAChB,YAAY,EAAE,CAAC;wBACf,cAAc,EAAE,CAAC;wBACjB,QAAQ,EAAE,EAAE;qBACZ,CAAC,CAAC;gBACJ,CAAC;gBACD,IAAI,EAAE,CAAC,SAAS,EAAE,CAAC;oBAClB,OAAO;wBACN,GAAG,cAAc,CAAC,EAAE,EAAE,cAAc,CAAC;wBACrC,EAAE;wBACF,YAAY,CAAC,EAAE,EAAE,yBAAyB,EAAE,SAAS,CAAC;wBACtD,YAAY,CAAC,EAAE,EAAE,0BAA0B,EAAE,QAAQ,CAAC;qBACtD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACd,CAAC;gBACD,OAAO,wDAAwD,CAAC;YACjE,CAAC;YAED,MAAM,OAAO,GAAa,EAAE,CAAC,SAAS;gBACrC,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,CAAC,iBAAiB,OAAO,CAAC,QAAQ,CAAC,MAAM,aAAa,EAAE,EAAE,CAAC,CAAC;YAC/D,MAAM,YAAY,GAAmC,EAAE,CAAC;YAExD,IAAI,YAAY,GAAG,CAAC,CAAC;YACrB,IAAI,cAAc,GAAG,CAAC,CAAC;YAEvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAClD,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACpC,IAAI,CAAC,OAAO;oBAAE,SAAS;gBAEvB,MAAM,KAAK,GAAG,yBAAyB,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBACpD,MAAM,YAAY,GAAG,yBAAyB,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;gBAC1E,IAAI,CAAC;oBACJ,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;oBAChE,IAAI,aAAa,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;wBACtC,YAAY,CAAC,IAAI,CAAC;4BACjB,GAAG,wBAAwB,CAAC,CAAC,EAAE;gCAC9B,gBAAgB,EAAE,sBAAsB;gCACxC,OAAO;gCACP,KAAK;6BACL,CAAC;4BACF,MAAM,EAAE,SAAS;yBACjB,CAAC,CAAC;wBACH,OAAO,CAAC,IAAI,CACX,KAAK,eAAe,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,YAAY,WAAW,CACzD,CAAC;wBACF,YAAY,EAAE,CAAC;oBAChB,CAAC;yBAAM,CAAC;wBACP,YAAY,CAAC,IAAI,CAAC;4BACjB,GAAG,wBAAwB,CAAC,CAAC,EAAE;gCAC9B,gBAAgB,EAAE,sBAAsB;gCACxC,OAAO;gCACP,KAAK;6BACL,CAAC;4BACF,MAAM,EAAE,WAAW;4BACnB,KAAK,EAAE,aAAa,CAAC,OAAO,IAAI,aAAa,CAAC,MAAM;yBACpD,CAAC,CAAC;wBACH,OAAO,CAAC,IAAI,CACX,KAAK,eAAe,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,YAAY,wBAAwB,CACzE,CAAC;wBACF,cAAc,EAAE,CAAC;oBAClB,CAAC;gBACF,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,MAAM,QAAQ,GACb,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBACxD,YAAY,CAAC,IAAI,CAAC;wBACjB,GAAG,wBAAwB,CAAC,CAAC,EAAE;4BAC9B,gBAAgB,EAAE,sBAAsB;4BACxC,OAAO;4BACP,KAAK;yBACL,CAAC;wBACF,MAAM,EAAE,WAAW;wBACnB,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;qBAC7B,CAAC,CAAC;oBACH,OAAO,CAAC,IAAI,CACX,KAAK,eAAe,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,YAAY,aAAa,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CACtF,CAAC;oBACF,cAAc,EAAE,CAAC;gBAClB,CAAC;YACF,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,OAAO,CAAC,IAAI,CACX,YAAY,YAAY,aAAa,cAAc,YAAY,CAC/D,CAAC;YAEF,uEAAuE;YACvE,wEAAwE;YACxE,uEAAuE;YACvE,MAAM,gBAAgB,GAAG,4BAA4B,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACxE,MAAM,cAAc,GAAG,iCAAiC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC3E,MAAM,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAC9D,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAC1D,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,OAAO,CAAC,IAAI,CACX,gBAAgB,UAAU,CAAC,MAAM,8DAA8D,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,gCAAgC,CACpJ,CAAC;YACH,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,CACX,eAAe,QAAQ,CAAC,MAAM,gEAAgE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,kCAAkC,CACnJ,CAAC;YACH,CAAC;YACD,MAAM,aAAa,GAAG,uCAAuC,CAC5D,OAAO,CAAC,QAAQ,CAChB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAC5B,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,OAAO,CAAC,IAAI,CACX,4BAA4B,aAAa,CAAC,MAAM,wDAAwD,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,8GAA8G,CAC9O,CAAC;YACH,CAAC;YACD,IAAI,YAAY,KAAK,MAAM,EAAE,CAAC;gBAC7B,OAAO,gBAAgB,CAAC;oBACvB,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM;oBACtC,YAAY;oBACZ,cAAc;oBACd,qBAAqB,EAAE,UAAU;oBACjC,sBAAsB,EAAE,QAAQ;oBAChC,gCAAgC,EAAE,aAAa;oBAC/C,QAAQ,EAAE,YAAY;iBACtB,CAAC,CAAC;YACJ,CAAC;YAED,IAAI,EAAE,CAAC,SAAS,EAAE,CAAC;gBAClB,OAAO;oBACN,GAAG,cAAc,CAAC,EAAE,EAAE,cAAc,CAAC;oBACrC,EAAE;oBACF,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;iBACzD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,CAAC;YAED,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;KACD,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"codex-health.js","sourceRoot":"","sources":["../../../lib/tools/codex-health.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"codex-refresh.d.ts","sourceRoot":"","sources":["../../../lib/tools/codex-refresh.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAKrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAoE9C,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,WAAW,GAAG,cAAc,CAoIvE"}
1
+ {"version":3,"file":"codex-refresh.d.ts","sourceRoot":"","sources":["../../../lib/tools/codex-refresh.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAOrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,WAAW,GAAG,cAAc,CAiFvE"}
@@ -3,40 +3,11 @@
3
3
  * Extracted from `index.ts` per RC-1 Phase 2.
4
4
  */
5
5
  import { tool } from "@opencode-ai/plugin/tool";
6
- import { loadAccounts, withAccountStorageTransaction } from "../storage.js";
7
- import { AccountManager } from "../accounts.js";
8
- import { queuedRefresh } from "../refresh-queue.js";
6
+ import { loadAccounts } from "../storage.js";
9
7
  import { formatUiHeader, formatUiItem, paintUiText } from "../ui/format.js";
10
- /**
11
- * Finds the index of the account matching `identity` in `accounts`, using
12
- * the same organizationId -> accountId -> refreshToken priority order the
13
- * storage layer's dedup/identity helpers use elsewhere (see
14
- * `lib/storage/identity.ts`). Kept local rather than importing the shared
15
- * helper because the barrel does not currently re-export it.
16
- */
17
- function findAccountIndexByIdentity(accounts, identity) {
18
- const organizationId = identity.organizationId?.trim();
19
- if (organizationId) {
20
- const idx = accounts.findIndex((a) => a.organizationId?.trim() === organizationId);
21
- if (idx >= 0)
22
- return idx;
23
- }
24
- const accountId = identity.accountId?.trim();
25
- if (accountId) {
26
- const idx = accounts.findIndex((a) => a.accountId?.trim() === accountId);
27
- if (idx >= 0)
28
- return idx;
29
- }
30
- const refreshToken = identity.refreshToken?.trim();
31
- if (refreshToken) {
32
- const idx = accounts.findIndex((a) => a.refreshToken?.trim() === refreshToken);
33
- if (idx >= 0)
34
- return idx;
35
- }
36
- return -1;
37
- }
8
+ import { buildRefreshInputs, refreshAndPersistAccount, } from "./refresh-account.js";
38
9
  export function createCodexRefreshTool(ctx) {
39
- const { resolveUiRuntime, formatCommandAccountLabel, resolveMaskEmail, getStatusMarker, cachedAccountManagerRef, accountManagerPromiseRef, } = ctx;
10
+ const { resolveUiRuntime, formatCommandAccountLabel, resolveMaskEmail, getStatusMarker, reloadCachedAccountManager, } = ctx;
40
11
  return tool({
41
12
  description: "Manually refresh OAuth tokens for all accounts to verify they're still valid.",
42
13
  args: {},
@@ -60,86 +31,36 @@ export function createCodexRefreshTool(ctx) {
60
31
  : [`Refreshing ${storage.accounts.length} account(s):`, ""];
61
32
  let refreshedCount = 0;
62
33
  let failedCount = 0;
63
- // Collected here, applied to a freshly re-read snapshot in a single
64
- // transaction after all (network-bound, multi-second) refreshes
65
- // complete -- see the module doc comment on RefreshOutcome. Holding
66
- // the storage lock across queuedRefresh calls would block every
67
- // other tool/rotation for the full duration of this loop, and
68
- // mutating `storage` in place and saving it at the end (the old
69
- // behavior) silently clobbered any rate-limit/cooldown/activeIndex
70
- // state a concurrent rotation persisted while this loop was running.
71
- const refreshedAccounts = [];
72
- for (let i = 0; i < storage.accounts.length; i++) {
34
+ let skippedCount = 0;
35
+ const inputs = buildRefreshInputs(storage.accounts);
36
+ for (let i = 0; i < inputs.length; i++) {
37
+ const input = inputs[i];
73
38
  const account = storage.accounts[i];
74
- if (!account)
39
+ if (!input || !account)
75
40
  continue;
76
41
  const label = formatCommandAccountLabel(account, i, { maskEmail });
77
- const identity = {
78
- organizationId: account.organizationId,
79
- accountId: account.accountId,
80
- refreshToken: account.refreshToken,
81
- };
82
- try {
83
- const refreshResult = await queuedRefresh(account.refreshToken);
84
- if (refreshResult.type === "success") {
85
- const rotated = refreshResult.refresh !== account.refreshToken;
86
- refreshedAccounts.push({
87
- identity,
88
- refreshToken: refreshResult.refresh,
89
- accessToken: refreshResult.access,
90
- expiresAt: refreshResult.expires,
91
- rotatedAt: rotated ? Date.now() : undefined,
92
- });
93
- results.push(` ${getStatusMarker(ui, "ok")} ${label}: Refreshed`);
94
- refreshedCount++;
95
- }
96
- else {
97
- results.push(` ${getStatusMarker(ui, "error")} ${label}: Failed - ${refreshResult.message ?? refreshResult.reason}`);
98
- failedCount++;
99
- }
42
+ const outcome = await refreshAndPersistAccount(input);
43
+ if (outcome.status === "refreshed") {
44
+ results.push(` ${getStatusMarker(ui, "ok")} ${label}: Refreshed`);
45
+ refreshedCount++;
100
46
  }
101
- catch (error) {
102
- const errorMsg = error instanceof Error ? error.message : String(error);
103
- results.push(` ${getStatusMarker(ui, "error")} ${label}: Error - ${errorMsg.slice(0, 120)}`);
47
+ else if (outcome.status === "skipped") {
48
+ results.push(` ${getStatusMarker(ui, "warning")} ${label}: Skipped (disabled)`);
49
+ skippedCount++;
50
+ }
51
+ else {
52
+ results.push(` ${getStatusMarker(ui, "error")} ${label}: Failed - ${outcome.error}`);
104
53
  failedCount++;
105
54
  }
106
55
  }
107
- if (refreshedAccounts.length > 0) {
108
- await withAccountStorageTransaction(async (current, persist) => {
109
- if (!current)
110
- return;
111
- for (const outcome of refreshedAccounts) {
112
- const idx = findAccountIndexByIdentity(current.accounts, outcome.identity);
113
- if (idx < 0)
114
- continue; // Account removed concurrently; nothing to apply.
115
- const target = current.accounts[idx];
116
- if (!target)
117
- continue;
118
- // The refresh was keyed off `outcome.identity.refreshToken` (the
119
- // pre-refresh value). If the on-disk refreshToken no longer
120
- // matches it, another process rotated this account mid-flight
121
- // while our (network-bound) refresh was in progress -- we
122
- // cannot know which resulting chain is the live one, so skip
123
- // rather than clobber whatever that other process wrote.
124
- if (target.refreshToken !== outcome.identity.refreshToken)
125
- continue;
126
- target.refreshToken = outcome.refreshToken;
127
- target.accessToken = outcome.accessToken;
128
- target.expiresAt = outcome.expiresAt;
129
- if (outcome.rotatedAt !== undefined) {
130
- target.tokenRotatedAt = outcome.rotatedAt;
131
- }
132
- }
133
- await persist(current);
134
- });
56
+ await reloadCachedAccountManager();
57
+ results.push("");
58
+ if (skippedCount > 0) {
59
+ results.push(`Summary: ${refreshedCount} refreshed, ${failedCount} failed, ${skippedCount} skipped`);
135
60
  }
136
- if (cachedAccountManagerRef.current) {
137
- const reloadedManager = await AccountManager.loadFromDisk();
138
- cachedAccountManagerRef.current = reloadedManager;
139
- accountManagerPromiseRef.current = Promise.resolve(reloadedManager);
61
+ else {
62
+ results.push(`Summary: ${refreshedCount} refreshed, ${failedCount} failed`);
140
63
  }
141
- results.push("");
142
- results.push(`Summary: ${refreshedCount} refreshed, ${failedCount} failed`);
143
64
  if (ui.v2Enabled) {
144
65
  return [
145
66
  ...formatUiHeader(ui, "Refresh accounts"),
@@ -1 +1 @@
1
- {"version":3,"file":"codex-refresh.js","sourceRoot":"","sources":["../../../lib/tools/codex-refresh.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codex-refresh.js","sourceRoot":"","sources":["../../../lib/tools/codex-refresh.ts"],"names":[],"mappings":"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"}
@@ -54,6 +54,7 @@ export type MutableRef<T> = {
54
54
  export interface ToolContext {
55
55
  cachedAccountManagerRef: MutableRef<AccountManager | null>;
56
56
  accountManagerPromiseRef: MutableRef<Promise<AccountManager> | null>;
57
+ reloadCachedAccountManager: () => Promise<void>;
57
58
  runtimeMetrics: RuntimeMetrics;
58
59
  beginnerSafeModeRef: {
59
60
  readonly current: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/tools/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/tools/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/tools/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/tools/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Shared token refresh persistence for the account-management tools.
3
+ *
4
+ * OpenAI refresh tokens are single-use and rotate on exchange. Any tool that
5
+ * calls `queuedRefresh()` must persist the rotated credential immediately;
6
+ * otherwise the on-disk refresh token is already consumed and the next load
7
+ * reports `refresh_token_reused` for every account.
8
+ */
9
+ import { type AccountMetadataV3 } from "../storage.js";
10
+ import type { TokenResult } from "../types.js";
11
+ export interface RefreshAccountIdentity {
12
+ organizationId?: string;
13
+ accountId?: string;
14
+ refreshToken: string;
15
+ }
16
+ export interface RefreshAccountInput {
17
+ index: number;
18
+ identity: RefreshAccountIdentity;
19
+ enabled?: boolean;
20
+ }
21
+ export interface PersistedRefreshResult {
22
+ index: number;
23
+ identity: RefreshAccountIdentity;
24
+ refreshToken: string;
25
+ accessToken: string;
26
+ expiresAt: number;
27
+ rotatedAt?: number;
28
+ persisted: boolean;
29
+ persistError?: string;
30
+ }
31
+ export type AccountRefreshOutcome = {
32
+ status: "skipped";
33
+ index: number;
34
+ identity: RefreshAccountIdentity;
35
+ } | {
36
+ status: "failed";
37
+ index: number;
38
+ identity: RefreshAccountIdentity;
39
+ error: string;
40
+ } | {
41
+ status: "refreshed";
42
+ index: number;
43
+ result: PersistedRefreshResult;
44
+ };
45
+ export declare function findAccountIndexByIdentity(accounts: RefreshAccountIdentity[], identity: RefreshAccountIdentity): number;
46
+ /**
47
+ * Persists one successful refresh in a short storage transaction. The account
48
+ * is re-located from a freshly re-read snapshot, and sibling accounts that
49
+ * share the consumed single-use refresh token are rotated atomically with it.
50
+ */
51
+ export declare function persistRefreshResult(index: number, identity: RefreshAccountIdentity, refreshResult: Extract<TokenResult, {
52
+ type: "success";
53
+ }>): Promise<PersistedRefreshResult>;
54
+ /**
55
+ * Refreshes one account and persists the rotated credential before reporting
56
+ * success. Disabled standalone accounts are skipped: refreshing them is wrong
57
+ * (they may intentionally retain a dead duplicate credential), while disabled
58
+ * siblings sharing an enabled account's consumed token are still updated by
59
+ * `persistRefreshResult()` so the shared credential remains consistent.
60
+ */
61
+ export declare function refreshAndPersistAccount(account: RefreshAccountInput): Promise<AccountRefreshOutcome>;
62
+ export declare function buildRefreshInputs(accounts: AccountMetadataV3[]): RefreshAccountInput[];
63
+ //# sourceMappingURL=refresh-account.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refresh-account.d.ts","sourceRoot":"","sources":["../../../lib/tools/refresh-account.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAEN,KAAK,iBAAiB,EACtB,MAAM,eAAe,CAAC;AAKvB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,WAAW,sBAAsB;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,sBAAsB,CAAC;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,sBAAsB,CAAC;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,qBAAqB,GAC9B;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,sBAAsB,CAAA;CAAE,GACtE;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,sBAAsB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACpF;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,sBAAsB,CAAA;CAAE,CAAC;AAE1E,wBAAgB,0BAA0B,CACzC,QAAQ,EAAE,sBAAsB,EAAE,EAClC,QAAQ,EAAE,sBAAsB,GAC9B,MAAM,CAER;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACzC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,sBAAsB,EAChC,aAAa,EAAE,OAAO,CAAC,WAAW,EAAE;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC,GACtD,OAAO,CAAC,sBAAsB,CAAC,CAoFjC;AAED;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAC7C,OAAO,EAAE,mBAAmB,GAC1B,OAAO,CAAC,qBAAqB,CAAC,CAsChC;AAED,wBAAgB,kBAAkB,CACjC,QAAQ,EAAE,iBAAiB,EAAE,GAC3B,mBAAmB,EAAE,CAUvB"}
@@ -0,0 +1,159 @@
1
+ /**
2
+ * Shared token refresh persistence for the account-management tools.
3
+ *
4
+ * OpenAI refresh tokens are single-use and rotate on exchange. Any tool that
5
+ * calls `queuedRefresh()` must persist the rotated credential immediately;
6
+ * otherwise the on-disk refresh token is already consumed and the next load
7
+ * reports `refresh_token_reused` for every account.
8
+ */
9
+ import { queuedRefresh } from "../refresh-queue.js";
10
+ import { withAccountStorageTransaction, } from "../storage.js";
11
+ import { findAccountIndexByIdentityKeys, toAccountIdentityKeys, } from "../storage/identity.js";
12
+ export function findAccountIndexByIdentity(accounts, identity) {
13
+ return findAccountIndexByIdentityKeys(accounts, toAccountIdentityKeys(identity));
14
+ }
15
+ /**
16
+ * Persists one successful refresh in a short storage transaction. The account
17
+ * is re-located from a freshly re-read snapshot, and sibling accounts that
18
+ * share the consumed single-use refresh token are rotated atomically with it.
19
+ */
20
+ export async function persistRefreshResult(index, identity, refreshResult) {
21
+ const rotated = refreshResult.refresh !== identity.refreshToken;
22
+ const rotatedAt = rotated ? Date.now() : undefined;
23
+ try {
24
+ return await withAccountStorageTransaction(async (current, persist) => {
25
+ if (!current) {
26
+ throw new Error("Account storage is unavailable");
27
+ }
28
+ const idx = findAccountIndexByIdentity(current.accounts, identity);
29
+ if (idx < 0) {
30
+ throw new Error("Account was removed while its token was refreshing");
31
+ }
32
+ const target = current.accounts[idx];
33
+ if (!target) {
34
+ throw new Error("Account was removed while its token was refreshing");
35
+ }
36
+ if (target.refreshToken === identity.refreshToken) {
37
+ if (rotated) {
38
+ // A login can produce sibling org/workspace records sharing one
39
+ // single-use refresh token. Mirror the account-state propagation used
40
+ // by request-time refresh: update those records with the new token and
41
+ // expire their workspace-specific access tokens so they refresh cleanly.
42
+ // Do this before assigning the target, since siblings are matched by
43
+ // the consumed token and the target starts with that token too.
44
+ for (const sibling of current.accounts) {
45
+ if (sibling === target)
46
+ continue;
47
+ if (sibling.refreshToken !== identity.refreshToken)
48
+ continue;
49
+ sibling.refreshToken = refreshResult.refresh;
50
+ sibling.expiresAt = 0;
51
+ if (rotatedAt !== undefined) {
52
+ sibling.tokenRotatedAt = rotatedAt;
53
+ }
54
+ }
55
+ }
56
+ target.refreshToken = refreshResult.refresh;
57
+ target.accessToken = refreshResult.access;
58
+ target.expiresAt = refreshResult.expires;
59
+ if (rotatedAt !== undefined) {
60
+ target.tokenRotatedAt = rotatedAt;
61
+ }
62
+ }
63
+ else if (target.refreshToken === refreshResult.refresh) {
64
+ // A sibling account in this process just persisted the same rotation
65
+ // and propagated the new token to this workspace record. Apply only
66
+ // this workspace's freshly returned access token; do not overwrite
67
+ // non-credential state in the fresh snapshot.
68
+ target.accessToken = refreshResult.access;
69
+ target.expiresAt = refreshResult.expires;
70
+ }
71
+ else {
72
+ // The refresh was keyed off `identity.refreshToken` (the consumed,
73
+ // pre-rotation value). If storage carries neither that token nor the
74
+ // exact rotation returned by this refresh, another process rotated
75
+ // this credential while this network-bound refresh was in flight. We
76
+ // cannot know which resulting chain is live, so fail this
77
+ // verification rather than clobber whatever the other process wrote.
78
+ throw new Error("Refresh token changed concurrently while verification was in progress");
79
+ }
80
+ await persist(current);
81
+ return {
82
+ index,
83
+ identity,
84
+ refreshToken: refreshResult.refresh,
85
+ accessToken: refreshResult.access,
86
+ expiresAt: refreshResult.expires,
87
+ rotatedAt,
88
+ persisted: true,
89
+ };
90
+ });
91
+ }
92
+ catch (error) {
93
+ return {
94
+ index,
95
+ identity,
96
+ refreshToken: refreshResult.refresh,
97
+ accessToken: refreshResult.access,
98
+ expiresAt: refreshResult.expires,
99
+ rotatedAt,
100
+ persisted: false,
101
+ persistError: error instanceof Error ? error.message : String(error),
102
+ };
103
+ }
104
+ }
105
+ /**
106
+ * Refreshes one account and persists the rotated credential before reporting
107
+ * success. Disabled standalone accounts are skipped: refreshing them is wrong
108
+ * (they may intentionally retain a dead duplicate credential), while disabled
109
+ * siblings sharing an enabled account's consumed token are still updated by
110
+ * `persistRefreshResult()` so the shared credential remains consistent.
111
+ */
112
+ export async function refreshAndPersistAccount(account) {
113
+ const { index, identity } = account;
114
+ if (account.enabled === false) {
115
+ return { status: "skipped", index, identity };
116
+ }
117
+ let refreshResult;
118
+ try {
119
+ refreshResult = await queuedRefresh(identity.refreshToken);
120
+ }
121
+ catch (error) {
122
+ return {
123
+ status: "failed",
124
+ index,
125
+ identity,
126
+ error: error instanceof Error ? error.message : String(error),
127
+ };
128
+ }
129
+ if (refreshResult.type !== "success") {
130
+ return {
131
+ status: "failed",
132
+ index,
133
+ identity,
134
+ error: refreshResult.message ?? refreshResult.reason ?? "token refresh failed",
135
+ };
136
+ }
137
+ const persisted = await persistRefreshResult(index, identity, refreshResult);
138
+ if (!persisted.persisted) {
139
+ return {
140
+ status: "failed",
141
+ index,
142
+ identity,
143
+ error: persisted.persistError ?? "Failed to persist rotated credential",
144
+ };
145
+ }
146
+ return { status: "refreshed", index, result: persisted };
147
+ }
148
+ export function buildRefreshInputs(accounts) {
149
+ return accounts.map((account, index) => ({
150
+ index,
151
+ enabled: account.enabled,
152
+ identity: {
153
+ organizationId: account.organizationId,
154
+ accountId: account.accountId,
155
+ refreshToken: account.refreshToken,
156
+ },
157
+ }));
158
+ }
159
+ //# sourceMappingURL=refresh-account.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refresh-account.js","sourceRoot":"","sources":["../../../lib/tools/refresh-account.ts"],"names":[],"mappings":"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"}