oc-codex-multi-auth 6.21.0 → 6.22.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.
- package/LICENSE +21 -21
- package/README.md +729 -571
- package/assets/icon.svg +7 -7
- package/assets/opencode-logo-ornate-dark.svg +18 -18
- package/assets/readme-hero.svg +31 -31
- package/config/README.md +177 -177
- package/config/minimal-opencode.json +14 -14
- package/config/opencode-legacy.json +1496 -1496
- package/config/opencode-modern.json +555 -555
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +291 -53
- package/dist/index.js.map +1 -1
- package/dist/lib/account-display.d.ts +46 -0
- package/dist/lib/account-display.d.ts.map +1 -1
- package/dist/lib/account-display.js +260 -0
- package/dist/lib/account-display.js.map +1 -1
- package/dist/lib/accounts.d.ts +4 -0
- package/dist/lib/accounts.d.ts.map +1 -1
- package/dist/lib/accounts.js +20 -15
- package/dist/lib/accounts.js.map +1 -1
- package/dist/lib/auth/login-runner.d.ts.map +1 -1
- package/dist/lib/auth/login-runner.js +79 -2
- package/dist/lib/auth/login-runner.js.map +1 -1
- package/dist/lib/auto-update-checker.d.ts +17 -1
- package/dist/lib/auto-update-checker.d.ts.map +1 -1
- package/dist/lib/auto-update-checker.js +49 -3
- package/dist/lib/auto-update-checker.js.map +1 -1
- package/dist/lib/cli.d.ts +1 -0
- package/dist/lib/cli.d.ts.map +1 -1
- package/dist/lib/cli.js +9 -3
- package/dist/lib/cli.js.map +1 -1
- package/dist/lib/codex-usage.d.ts +4 -3
- package/dist/lib/codex-usage.d.ts.map +1 -1
- package/dist/lib/codex-usage.js +13 -11
- package/dist/lib/codex-usage.js.map +1 -1
- package/dist/lib/config.d.ts +75 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +152 -1
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/context-overflow.js +10 -10
- package/dist/lib/desktop-notifications.js +6 -6
- package/dist/lib/oauth-success.js +202 -202
- package/dist/lib/plan-allotment.d.ts +72 -0
- package/dist/lib/plan-allotment.d.ts.map +1 -0
- package/dist/lib/plan-allotment.js +142 -0
- package/dist/lib/plan-allotment.js.map +1 -0
- package/dist/lib/plugin-origin.d.ts +77 -0
- package/dist/lib/plugin-origin.d.ts.map +1 -0
- package/dist/lib/plugin-origin.js +301 -0
- package/dist/lib/plugin-origin.js.map +1 -0
- package/dist/lib/prompts/codex-opencode-bridge.js +67 -67
- package/dist/lib/prompts/codex.js +75 -75
- package/dist/lib/quota-display.d.ts +40 -0
- package/dist/lib/quota-display.d.ts.map +1 -0
- package/dist/lib/quota-display.js +45 -0
- package/dist/lib/quota-display.js.map +1 -0
- package/dist/lib/quota-notifications.d.ts +2 -1
- package/dist/lib/quota-notifications.d.ts.map +1 -1
- package/dist/lib/quota-notifications.js +34 -14
- package/dist/lib/quota-notifications.js.map +1 -1
- package/dist/lib/quota-overview.d.ts +253 -0
- package/dist/lib/quota-overview.d.ts.map +1 -0
- package/dist/lib/quota-overview.js +707 -0
- package/dist/lib/quota-overview.js.map +1 -0
- package/dist/lib/request/retry-budget.d.ts +26 -0
- package/dist/lib/request/retry-budget.d.ts.map +1 -1
- package/dist/lib/request/retry-budget.js +43 -0
- package/dist/lib/request/retry-budget.js.map +1 -1
- package/dist/lib/schemas.d.ts +67 -0
- package/dist/lib/schemas.d.ts.map +1 -1
- package/dist/lib/schemas.js +53 -0
- package/dist/lib/schemas.js.map +1 -1
- package/dist/lib/storage/backup.d.ts +33 -0
- package/dist/lib/storage/backup.d.ts.map +1 -1
- package/dist/lib/storage/backup.js +43 -7
- package/dist/lib/storage/backup.js.map +1 -1
- package/dist/lib/storage/credential-snapshots.d.ts +78 -0
- package/dist/lib/storage/credential-snapshots.d.ts.map +1 -0
- package/dist/lib/storage/credential-snapshots.js +302 -0
- package/dist/lib/storage/credential-snapshots.js.map +1 -0
- package/dist/lib/storage/export-import.d.ts.map +1 -1
- package/dist/lib/storage/export-import.js +7 -0
- package/dist/lib/storage/export-import.js.map +1 -1
- package/dist/lib/storage/flagged.d.ts.map +1 -1
- package/dist/lib/storage/flagged.js +23 -1
- package/dist/lib/storage/flagged.js.map +1 -1
- package/dist/lib/storage/load-save.d.ts +4 -0
- package/dist/lib/storage/load-save.d.ts.map +1 -1
- package/dist/lib/storage/load-save.js +50 -0
- package/dist/lib/storage/load-save.js.map +1 -1
- package/dist/lib/storage/paths.d.ts +1 -0
- package/dist/lib/storage/paths.d.ts.map +1 -1
- package/dist/lib/storage/paths.js +1 -1
- package/dist/lib/storage/paths.js.map +1 -1
- package/dist/lib/storage/test-home-guard.d.ts +35 -0
- package/dist/lib/storage/test-home-guard.d.ts.map +1 -0
- package/dist/lib/storage/test-home-guard.js +59 -0
- package/dist/lib/storage/test-home-guard.js.map +1 -0
- package/dist/lib/tools/codex-dashboard.d.ts.map +1 -1
- package/dist/lib/tools/codex-dashboard.js +3 -2
- package/dist/lib/tools/codex-dashboard.js.map +1 -1
- package/dist/lib/tools/codex-doctor.d.ts.map +1 -1
- package/dist/lib/tools/codex-doctor.js +16 -0
- package/dist/lib/tools/codex-doctor.js.map +1 -1
- package/dist/lib/tools/codex-health.d.ts.map +1 -1
- package/dist/lib/tools/codex-health.js +10 -2
- package/dist/lib/tools/codex-health.js.map +1 -1
- package/dist/lib/tools/codex-label.d.ts.map +1 -1
- package/dist/lib/tools/codex-label.js +1 -0
- package/dist/lib/tools/codex-label.js.map +1 -1
- package/dist/lib/tools/codex-limits.d.ts.map +1 -1
- package/dist/lib/tools/codex-limits.js +13 -9
- package/dist/lib/tools/codex-limits.js.map +1 -1
- package/dist/lib/tools/codex-list.d.ts.map +1 -1
- package/dist/lib/tools/codex-list.js +28 -3
- package/dist/lib/tools/codex-list.js.map +1 -1
- package/dist/lib/tools/codex-note.d.ts.map +1 -1
- package/dist/lib/tools/codex-note.js +4 -1
- package/dist/lib/tools/codex-note.js.map +1 -1
- package/dist/lib/tools/codex-pool.d.ts.map +1 -1
- package/dist/lib/tools/codex-pool.js +6 -2
- package/dist/lib/tools/codex-pool.js.map +1 -1
- package/dist/lib/tools/codex-refresh.d.ts.map +1 -1
- package/dist/lib/tools/codex-refresh.js +4 -1
- package/dist/lib/tools/codex-refresh.js.map +1 -1
- package/dist/lib/tools/codex-remove.d.ts.map +1 -1
- package/dist/lib/tools/codex-remove.js +1 -0
- package/dist/lib/tools/codex-remove.js.map +1 -1
- package/dist/lib/tools/codex-reset.d.ts.map +1 -1
- package/dist/lib/tools/codex-reset.js +13 -7
- package/dist/lib/tools/codex-reset.js.map +1 -1
- package/dist/lib/tools/codex-status.d.ts.map +1 -1
- package/dist/lib/tools/codex-status.js +25 -2
- package/dist/lib/tools/codex-status.js.map +1 -1
- package/dist/lib/tools/codex-switch.d.ts.map +1 -1
- package/dist/lib/tools/codex-switch.js +1 -0
- package/dist/lib/tools/codex-switch.js.map +1 -1
- package/dist/lib/tools/codex-tag.d.ts.map +1 -1
- package/dist/lib/tools/codex-tag.js +4 -1
- package/dist/lib/tools/codex-tag.js.map +1 -1
- package/dist/lib/tools/codex-warm.d.ts.map +1 -1
- package/dist/lib/tools/codex-warm.js +1 -0
- package/dist/lib/tools/codex-warm.js.map +1 -1
- package/dist/lib/tools/index.d.ts +9 -0
- package/dist/lib/tools/index.d.ts.map +1 -1
- package/dist/lib/tools/index.js.map +1 -1
- package/dist/lib/tui-quota-cache.d.ts +35 -0
- package/dist/lib/tui-quota-cache.d.ts.map +1 -1
- package/dist/lib/tui-quota-cache.js +76 -11
- package/dist/lib/tui-quota-cache.js.map +1 -1
- package/dist/lib/tui-quota-overview.d.ts +55 -0
- package/dist/lib/tui-quota-overview.d.ts.map +1 -0
- package/dist/lib/tui-quota-overview.js +209 -0
- package/dist/lib/tui-quota-overview.js.map +1 -0
- package/dist/lib/tui-status.d.ts +55 -0
- package/dist/lib/tui-status.d.ts.map +1 -1
- package/dist/lib/tui-status.js +155 -14
- package/dist/lib/tui-status.js.map +1 -1
- package/dist/lib/ui/auth-menu.d.ts +2 -0
- package/dist/lib/ui/auth-menu.d.ts.map +1 -1
- package/dist/lib/ui/auth-menu.js +10 -6
- package/dist/lib/ui/auth-menu.js.map +1 -1
- package/dist/tui.d.ts +55 -0
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +511 -29
- package/dist/tui.js.map +1 -1
- package/package.json +155 -155
- package/scripts/audit-dev-allowlist.js +114 -114
- package/scripts/clean-dist.js +27 -27
- package/scripts/copy-oauth-success.js +47 -47
- package/scripts/install-oc-codex-multi-auth-core.js +2003 -1499
- package/scripts/install-oc-codex-multi-auth.js +37 -37
- package/scripts/test-all-models.sh +260 -260
- package/scripts/validate-model-map.sh +97 -97
|
@@ -28,4 +28,50 @@ export declare function maskEmailForDisplay(email: string | undefined): string |
|
|
|
28
28
|
* requested. Returns `undefined` when there is no email to show.
|
|
29
29
|
*/
|
|
30
30
|
export declare function resolveDisplayEmail(email: string | undefined, maskEmail: boolean): string | undefined;
|
|
31
|
+
export declare function maskIdentityValue(value: string | undefined, includeSensitive: boolean): string | undefined;
|
|
32
|
+
/**
|
|
33
|
+
* Render the short seat suffix that separates two accounts sharing one
|
|
34
|
+
* workspace `accountId`.
|
|
35
|
+
*
|
|
36
|
+
* A ChatGPT Business workspace is a single `accountId` shared by every member
|
|
37
|
+
* of it; `accountUserId` is that member's own id and the only stored field
|
|
38
|
+
* that tells their seats apart. Upstream meters each seat separately - its own
|
|
39
|
+
* quota, its own weekly reset - so seats sharing a workspace are distinct
|
|
40
|
+
* accounts, not copies of one.
|
|
41
|
+
*
|
|
42
|
+
* Every display surface used to render `accountId` alone, so four members of
|
|
43
|
+
* one Business workspace printed an identical `id:` string and read as the
|
|
44
|
+
* same account duplicated four times. Appending this suffix is what makes the
|
|
45
|
+
* rendered rows match the accounts they describe.
|
|
46
|
+
*
|
|
47
|
+
* A six-character tail by default, matching what the surfaces already print
|
|
48
|
+
* for `accountId`. Six characters are not an identity on their own - member
|
|
49
|
+
* ids sharing a six-character tail were observed, which is the same false
|
|
50
|
+
* "these are duplicates" reading this suffix exists to prevent - so pass
|
|
51
|
+
* `peerAccountUserIds` (the other accounts rendered alongside this one) and
|
|
52
|
+
* {@link resolveSeatRenderer} picks a rendering that separates them inside
|
|
53
|
+
* {@link SEAT_RENDER_MAX_LENGTH}: a wider or relocated excerpt of the id
|
|
54
|
+
* where one fits, and an opaque hash prefix where none does.
|
|
55
|
+
*
|
|
56
|
+
* Returns `undefined` when there is no member id, so a token-only record
|
|
57
|
+
* renders exactly as it did before.
|
|
58
|
+
*/
|
|
59
|
+
export declare function formatSeatSuffix(accountUserId: string | undefined, peerAccountUserIds?: readonly (string | undefined)[]): string | undefined;
|
|
60
|
+
/**
|
|
61
|
+
* Seat suffixes for a whole rendered set, all built the same way so the rows
|
|
62
|
+
* line up and no two distinct member ids share a rendering. Entries without a
|
|
63
|
+
* member id come back `undefined`, holding their position.
|
|
64
|
+
*/
|
|
65
|
+
export declare function resolveSeatSuffixes(accountUserIds: readonly (string | undefined)[]): (string | undefined)[];
|
|
66
|
+
/**
|
|
67
|
+
* Whether a member id may be shown as a seat suffix next to masked fields.
|
|
68
|
+
* The suffix is a bounded excerpt of the id, so on a short id it could be
|
|
69
|
+
* most of the id itself - more than `maskIdentityValue` discloses of the same
|
|
70
|
+
* value. Masked output shows the seat only when the id is long enough that
|
|
71
|
+
* {@link SEAT_RENDER_MAX_LENGTH} characters cannot be the whole thing.
|
|
72
|
+
*
|
|
73
|
+
* The standalone CLI keeps its own copy as `seatIsDisclosable`; keep the two
|
|
74
|
+
* in step.
|
|
75
|
+
*/
|
|
76
|
+
export declare function seatIsDisclosable(accountUserId: string | undefined, includeSensitive: boolean): boolean;
|
|
31
77
|
//# sourceMappingURL=account-display.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account-display.d.ts","sourceRoot":"","sources":["../../lib/account-display.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
1
|
+
{"version":3,"file":"account-display.d.ts","sourceRoot":"","sources":["../../lib/account-display.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAUjF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAClC,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,SAAS,EAAE,OAAO,GAChB,MAAM,GAAG,SAAS,CAIpB;AAiBD,wBAAgB,iBAAiB,CAChC,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,gBAAgB,EAAE,OAAO,GACvB,MAAM,GAAG,SAAS,CAMpB;AAqLD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,gBAAgB,CAC/B,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,kBAAkB,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,GAClD,MAAM,GAAG,SAAS,CAQpB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAClC,cAAc,EAAE,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,GAC7C,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAMxB;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAChC,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,gBAAgB,EAAE,OAAO,GACvB,OAAO,CAGT"}
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
* masks the email consistently when `maskEmail` is enabled, while preferring a
|
|
12
12
|
* user-defined account label when one exists.
|
|
13
13
|
*/
|
|
14
|
+
import { createHash } from "node:crypto";
|
|
14
15
|
/**
|
|
15
16
|
* Mask an email for display while preserving the domain so collisions between
|
|
16
17
|
* accounts on the same provider remain distinguishable.
|
|
@@ -45,4 +46,263 @@ export function resolveDisplayEmail(email, maskEmail) {
|
|
|
45
46
|
return undefined;
|
|
46
47
|
return maskEmail ? maskEmailForDisplay(trimmed) : trimmed;
|
|
47
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Head/tail mask for a stored identity value that is not an email, so a JSON
|
|
51
|
+
* surface can carry a member id without disclosing more of it than the
|
|
52
|
+
* `accountId` field beside it. Eight characters stay visible, which conceals
|
|
53
|
+
* nothing below thirteen - `"me@x.io12"` would print all but its middle
|
|
54
|
+
* character - so anything shorter is replaced outright. Input is trimmed
|
|
55
|
+
* first, or `" abc "` would clear the cutoff on padding alone.
|
|
56
|
+
*
|
|
57
|
+
* The standalone CLI keeps its own copy as `maskValue` in
|
|
58
|
+
* `scripts/install-oc-codex-multi-auth-core.js`; both surfaces disclose the
|
|
59
|
+
* same fields, so keep the two in step.
|
|
60
|
+
*/
|
|
61
|
+
const IDENTITY_MASK_MIN_LENGTH = 13;
|
|
62
|
+
const IDENTITY_MASKED_VALUE = "*****";
|
|
63
|
+
export function maskIdentityValue(value, includeSensitive) {
|
|
64
|
+
if (includeSensitive)
|
|
65
|
+
return value;
|
|
66
|
+
const trimmed = value?.trim();
|
|
67
|
+
if (!trimmed)
|
|
68
|
+
return trimmed;
|
|
69
|
+
if (trimmed.length < IDENTITY_MASK_MIN_LENGTH)
|
|
70
|
+
return IDENTITY_MASKED_VALUE;
|
|
71
|
+
return `${trimmed.slice(0, 4)}...${trimmed.slice(-4)}`;
|
|
72
|
+
}
|
|
73
|
+
const SEAT_SUFFIX_MIN_LENGTH = 6;
|
|
74
|
+
/**
|
|
75
|
+
* Hard ceiling on a rendered seat, independent of how long the member id is.
|
|
76
|
+
*
|
|
77
|
+
* A seat sits in a table column beside the account, so its width may not be a
|
|
78
|
+
* function of how long the backend's ids happen to be. Member ids measured in
|
|
79
|
+
* a real multi-seat Business pool are 67 characters with no shared tail, so a
|
|
80
|
+
* search that stops when the ids are separated rather than when it runs out of
|
|
81
|
+
* room prints most of the id in every row.
|
|
82
|
+
*/
|
|
83
|
+
const SEAT_RENDER_MAX_LENGTH = 12;
|
|
84
|
+
/**
|
|
85
|
+
* Hash prefix lengths for the last-resort renderer. 32 hex characters is 128
|
|
86
|
+
* bits of SHA-256, so the list is exhausted only by a collision that cannot be
|
|
87
|
+
* reached with ids a backend hands out.
|
|
88
|
+
*/
|
|
89
|
+
const SEAT_HASH_LENGTHS = [8, 12, 16, 24, 32];
|
|
90
|
+
/** Marks the gap between two excerpts, as `accountId` already elides with `...`. */
|
|
91
|
+
const SEAT_WINDOW_SEPARATOR = "..";
|
|
92
|
+
function normalizeSeatIdentity(accountUserId) {
|
|
93
|
+
const trimmed = accountUserId?.trim();
|
|
94
|
+
return trimmed && trimmed.length > 0 ? trimmed : undefined;
|
|
95
|
+
}
|
|
96
|
+
function sliceSeatSuffix(accountUserId, length) {
|
|
97
|
+
return accountUserId.length > length ? accountUserId.slice(-length) : accountUserId;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* `length` characters starting at `start`, slid left when the id is too short
|
|
101
|
+
* to hold that window whole. Never padded: a short id renders as itself.
|
|
102
|
+
*/
|
|
103
|
+
function sliceSeatWindow(accountUserId, start, length) {
|
|
104
|
+
if (accountUserId.length <= length)
|
|
105
|
+
return accountUserId;
|
|
106
|
+
const begin = Math.max(0, Math.min(start, accountUserId.length - length));
|
|
107
|
+
return accountUserId.slice(begin, begin + length);
|
|
108
|
+
}
|
|
109
|
+
function hashSeatIdentity(accountUserId, length) {
|
|
110
|
+
return createHash("sha256").update(accountUserId).digest("hex").slice(0, length);
|
|
111
|
+
}
|
|
112
|
+
/** Index of the first character at which the given ids are not all equal. */
|
|
113
|
+
function commonPrefixLength(values) {
|
|
114
|
+
const [first] = values;
|
|
115
|
+
if (first === undefined)
|
|
116
|
+
return 0;
|
|
117
|
+
let shared = first.length;
|
|
118
|
+
for (const value of values) {
|
|
119
|
+
let index = 0;
|
|
120
|
+
while (index < shared && index < value.length && first[index] === value[index]) {
|
|
121
|
+
index += 1;
|
|
122
|
+
}
|
|
123
|
+
shared = index;
|
|
124
|
+
if (shared === 0)
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
return shared;
|
|
128
|
+
}
|
|
129
|
+
/** First index at which two ids differ, or their shared length if one prefixes the other. */
|
|
130
|
+
function firstDivergence(left, right) {
|
|
131
|
+
const limit = Math.min(left.length, right.length);
|
|
132
|
+
let index = 0;
|
|
133
|
+
while (index < limit && left[index] === right[index])
|
|
134
|
+
index += 1;
|
|
135
|
+
return index;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* For every pair of ids, the first index at which that pair differs.
|
|
139
|
+
*
|
|
140
|
+
* Deliberately not "every index where the ids disagree": across a handful of
|
|
141
|
+
* random-looking ids that is nearly every index, which localizes nothing. A
|
|
142
|
+
* pair is told apart by any excerpt covering its first divergence, so an
|
|
143
|
+
* excerpt covering all of these positions tells every pair apart.
|
|
144
|
+
*/
|
|
145
|
+
function divergenceAnchors(values) {
|
|
146
|
+
const anchors = new Set();
|
|
147
|
+
for (let left = 0; left < values.length; left += 1) {
|
|
148
|
+
for (let right = left + 1; right < values.length; right += 1) {
|
|
149
|
+
const leftValue = values[left];
|
|
150
|
+
const rightValue = values[right];
|
|
151
|
+
if (leftValue === undefined || rightValue === undefined)
|
|
152
|
+
continue;
|
|
153
|
+
anchors.add(firstDivergence(leftValue, rightValue));
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return [...anchors].sort((left, right) => left - right);
|
|
157
|
+
}
|
|
158
|
+
/** Starts of `width`-wide windows covering `anchors`, dropping those an earlier window already spans. */
|
|
159
|
+
function anchorWindowStarts(anchors, width) {
|
|
160
|
+
const starts = [];
|
|
161
|
+
for (const anchor of anchors) {
|
|
162
|
+
const last = starts[starts.length - 1];
|
|
163
|
+
if (last !== undefined && anchor < last + width)
|
|
164
|
+
continue;
|
|
165
|
+
starts.push(anchor);
|
|
166
|
+
}
|
|
167
|
+
return starts;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* A renderer that gives every distinct member id in `accountUserIds` a
|
|
171
|
+
* different string, short enough to sit in a column beside the account.
|
|
172
|
+
*
|
|
173
|
+
* Four strategies, each capped, tried in order:
|
|
174
|
+
*
|
|
175
|
+
* 1. A tail. This is what the surfaces already print for `accountId`, so it
|
|
176
|
+
* is preferred wherever it works, which is wherever the ids differ near
|
|
177
|
+
* their end.
|
|
178
|
+
* 2. One window anchored where the ids first diverge, for ids that share a
|
|
179
|
+
* long tail.
|
|
180
|
+
* 3. Short windows at each position where some pair first differs, joined by
|
|
181
|
+
* `..`. Member ids in the one real multi-seat Business pool this was
|
|
182
|
+
* measured against diverge in more than one place - clusters 26 characters
|
|
183
|
+
* apart - so no single capped window separates them, and joining excerpts
|
|
184
|
+
* is what keeps the seat both bounded and readable off the id.
|
|
185
|
+
* 4. A SHA-256 prefix. This is NOT an unreachable branch kept for tidiness:
|
|
186
|
+
* it is what remains when the divergences are too many or too spread out
|
|
187
|
+
* for (3) to cover inside the cap. What it prints is opaque - it cannot be
|
|
188
|
+
* matched against the id by eye - so any surface documenting the seat has
|
|
189
|
+
* to say this outcome exists.
|
|
190
|
+
*
|
|
191
|
+
* Returning the id whole is kept as the final fallback so two distinct ids can
|
|
192
|
+
* never render alike; reaching it needs a 128-bit SHA-256 prefix collision.
|
|
193
|
+
*/
|
|
194
|
+
function resolveSeatRenderer(accountUserIds) {
|
|
195
|
+
const distinct = [];
|
|
196
|
+
const seen = new Set();
|
|
197
|
+
for (const accountUserId of accountUserIds) {
|
|
198
|
+
const normalized = normalizeSeatIdentity(accountUserId);
|
|
199
|
+
if (!normalized || seen.has(normalized))
|
|
200
|
+
continue;
|
|
201
|
+
seen.add(normalized);
|
|
202
|
+
distinct.push(normalized);
|
|
203
|
+
}
|
|
204
|
+
const tailAtMinLength = (accountUserId) => sliceSeatSuffix(accountUserId, SEAT_SUFFIX_MIN_LENGTH);
|
|
205
|
+
if (distinct.length <= 1)
|
|
206
|
+
return tailAtMinLength;
|
|
207
|
+
const separates = (render) => new Set(distinct.map(render)).size === distinct.length;
|
|
208
|
+
for (let length = SEAT_SUFFIX_MIN_LENGTH; length <= SEAT_RENDER_MAX_LENGTH; length += 1) {
|
|
209
|
+
const render = (accountUserId) => sliceSeatSuffix(accountUserId, length);
|
|
210
|
+
if (separates(render))
|
|
211
|
+
return render;
|
|
212
|
+
}
|
|
213
|
+
const start = commonPrefixLength(distinct);
|
|
214
|
+
for (let length = SEAT_SUFFIX_MIN_LENGTH; length <= SEAT_RENDER_MAX_LENGTH; length += 1) {
|
|
215
|
+
const render = (accountUserId) => sliceSeatWindow(accountUserId, start, length);
|
|
216
|
+
if (separates(render))
|
|
217
|
+
return render;
|
|
218
|
+
}
|
|
219
|
+
const anchors = divergenceAnchors(distinct);
|
|
220
|
+
for (let width = 2; width <= SEAT_RENDER_MAX_LENGTH; width += 1) {
|
|
221
|
+
const starts = anchorWindowStarts(anchors, width);
|
|
222
|
+
const rendered = starts.length * width + (starts.length - 1) * SEAT_WINDOW_SEPARATOR.length;
|
|
223
|
+
// Skipped, not abandoned: a wider window can span two nearby anchors
|
|
224
|
+
// that needed one window each, so the cost falls as the window count
|
|
225
|
+
// does. Anchors at {5,6,7,31,32,33} cost 14 at width 2 (four windows)
|
|
226
|
+
// and 8 at width 3 (two), so giving up at the first overflow loses a
|
|
227
|
+
// rendering that fits comfortably.
|
|
228
|
+
if (rendered > SEAT_RENDER_MAX_LENGTH)
|
|
229
|
+
continue;
|
|
230
|
+
const render = (accountUserId) => starts
|
|
231
|
+
.map((windowStart) => accountUserId.slice(windowStart, windowStart + width))
|
|
232
|
+
.join(SEAT_WINDOW_SEPARATOR);
|
|
233
|
+
if (separates(render))
|
|
234
|
+
return render;
|
|
235
|
+
}
|
|
236
|
+
for (const length of SEAT_HASH_LENGTHS) {
|
|
237
|
+
const render = (accountUserId) => hashSeatIdentity(accountUserId, length);
|
|
238
|
+
if (separates(render))
|
|
239
|
+
return render;
|
|
240
|
+
}
|
|
241
|
+
return (accountUserId) => accountUserId;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Render the short seat suffix that separates two accounts sharing one
|
|
245
|
+
* workspace `accountId`.
|
|
246
|
+
*
|
|
247
|
+
* A ChatGPT Business workspace is a single `accountId` shared by every member
|
|
248
|
+
* of it; `accountUserId` is that member's own id and the only stored field
|
|
249
|
+
* that tells their seats apart. Upstream meters each seat separately - its own
|
|
250
|
+
* quota, its own weekly reset - so seats sharing a workspace are distinct
|
|
251
|
+
* accounts, not copies of one.
|
|
252
|
+
*
|
|
253
|
+
* Every display surface used to render `accountId` alone, so four members of
|
|
254
|
+
* one Business workspace printed an identical `id:` string and read as the
|
|
255
|
+
* same account duplicated four times. Appending this suffix is what makes the
|
|
256
|
+
* rendered rows match the accounts they describe.
|
|
257
|
+
*
|
|
258
|
+
* A six-character tail by default, matching what the surfaces already print
|
|
259
|
+
* for `accountId`. Six characters are not an identity on their own - member
|
|
260
|
+
* ids sharing a six-character tail were observed, which is the same false
|
|
261
|
+
* "these are duplicates" reading this suffix exists to prevent - so pass
|
|
262
|
+
* `peerAccountUserIds` (the other accounts rendered alongside this one) and
|
|
263
|
+
* {@link resolveSeatRenderer} picks a rendering that separates them inside
|
|
264
|
+
* {@link SEAT_RENDER_MAX_LENGTH}: a wider or relocated excerpt of the id
|
|
265
|
+
* where one fits, and an opaque hash prefix where none does.
|
|
266
|
+
*
|
|
267
|
+
* Returns `undefined` when there is no member id, so a token-only record
|
|
268
|
+
* renders exactly as it did before.
|
|
269
|
+
*/
|
|
270
|
+
export function formatSeatSuffix(accountUserId, peerAccountUserIds) {
|
|
271
|
+
const trimmed = normalizeSeatIdentity(accountUserId);
|
|
272
|
+
if (!trimmed)
|
|
273
|
+
return undefined;
|
|
274
|
+
if (!peerAccountUserIds)
|
|
275
|
+
return sliceSeatSuffix(trimmed, SEAT_SUFFIX_MIN_LENGTH);
|
|
276
|
+
// This id joins the set the rendering is chosen against, so the guarantee
|
|
277
|
+
// holds even for a caller whose peer list is the OTHER accounts rather than
|
|
278
|
+
// all of them. Already being there makes it a no-op.
|
|
279
|
+
return resolveSeatRenderer([...peerAccountUserIds, trimmed])(trimmed);
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Seat suffixes for a whole rendered set, all built the same way so the rows
|
|
283
|
+
* line up and no two distinct member ids share a rendering. Entries without a
|
|
284
|
+
* member id come back `undefined`, holding their position.
|
|
285
|
+
*/
|
|
286
|
+
export function resolveSeatSuffixes(accountUserIds) {
|
|
287
|
+
const render = resolveSeatRenderer(accountUserIds);
|
|
288
|
+
return accountUserIds.map((accountUserId) => {
|
|
289
|
+
const trimmed = normalizeSeatIdentity(accountUserId);
|
|
290
|
+
return trimmed ? render(trimmed) : undefined;
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Whether a member id may be shown as a seat suffix next to masked fields.
|
|
295
|
+
* The suffix is a bounded excerpt of the id, so on a short id it could be
|
|
296
|
+
* most of the id itself - more than `maskIdentityValue` discloses of the same
|
|
297
|
+
* value. Masked output shows the seat only when the id is long enough that
|
|
298
|
+
* {@link SEAT_RENDER_MAX_LENGTH} characters cannot be the whole thing.
|
|
299
|
+
*
|
|
300
|
+
* The standalone CLI keeps its own copy as `seatIsDisclosable`; keep the two
|
|
301
|
+
* in step.
|
|
302
|
+
*/
|
|
303
|
+
export function seatIsDisclosable(accountUserId, includeSensitive) {
|
|
304
|
+
if (!accountUserId)
|
|
305
|
+
return false;
|
|
306
|
+
return includeSensitive || accountUserId.length >= IDENTITY_MASK_MIN_LENGTH;
|
|
307
|
+
}
|
|
48
308
|
//# sourceMappingURL=account-display.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account-display.js","sourceRoot":"","sources":["../../lib/account-display.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;;;;;;;;;GAUG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAyB;IAC5D,MAAM,OAAO,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,OAAO,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC;IACjC,qEAAqE;IACrE,wDAAwD;IACxD,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1E,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtC,OAAO,GAAG,MAAM,MAAM,MAAM,EAAE,CAAC;AAChC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAClC,KAAyB,EACzB,SAAkB;IAElB,MAAM,OAAO,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,OAAO,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AAC3D,CAAC"}
|
|
1
|
+
{"version":3,"file":"account-display.js","sourceRoot":"","sources":["../../lib/account-display.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/accounts.d.ts
CHANGED
|
@@ -99,9 +99,13 @@ export declare class AccountManager {
|
|
|
99
99
|
export declare function formatAccountLabel(account: {
|
|
100
100
|
email?: string;
|
|
101
101
|
accountId?: string;
|
|
102
|
+
accountUserId?: string;
|
|
102
103
|
accountLabel?: string;
|
|
103
104
|
} | undefined, index: number, options?: {
|
|
104
105
|
maskEmail?: boolean;
|
|
106
|
+
peerAccounts?: readonly ({
|
|
107
|
+
accountUserId?: string;
|
|
108
|
+
} | undefined)[];
|
|
105
109
|
}): string;
|
|
106
110
|
export declare function formatCooldown(account: {
|
|
107
111
|
coolingDownUntil?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../lib/accounts.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../lib/accounts.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/accounts.js
CHANGED
|
@@ -19,7 +19,7 @@ import { AccountState, } from "./accounts/state.js";
|
|
|
19
19
|
import { formatWaitTime } from "./accounts/rate-limits.js";
|
|
20
20
|
import { nowMs } from "./utils.js";
|
|
21
21
|
import { logWarn } from "./logger.js";
|
|
22
|
-
import { resolveDisplayEmail } from "./account-display.js";
|
|
22
|
+
import { formatSeatSuffix, resolveDisplayEmail } from "./account-display.js";
|
|
23
23
|
export { extractAccountId, extractAccountEmail, getAccountIdCandidates, selectBestAccountCandidate, shouldUpdateAccountIdFromToken, resolveRequestAccountId, sanitizeEmail, } from "./auth/token-utils.js";
|
|
24
24
|
export { parseRateLimitReason, getQuotaKey, clampNonNegativeInt, clearExpiredRateLimits, isRateLimitedForQuotaKey, isRateLimitedForFamily, formatWaitTime, } from "./accounts/rate-limits.js";
|
|
25
25
|
export { lookupCodexCliTokensByEmail, } from "./accounts/recovery.js";
|
|
@@ -235,22 +235,27 @@ export function formatAccountLabel(account, index, options = {}) {
|
|
|
235
235
|
? accountId.slice(-6)
|
|
236
236
|
: accountId
|
|
237
237
|
: null;
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
if (accountLabel && idSuffix)
|
|
244
|
-
return `Account ${index + 1} (${accountLabel}, id:${idSuffix})`;
|
|
238
|
+
// `accountId` names the workspace, which every member of a Business
|
|
239
|
+
// workspace shares. Without the seat, four distinct members printed one
|
|
240
|
+
// identical `id:` string (see `formatSeatSuffix`).
|
|
241
|
+
const seatSuffix = formatSeatSuffix(account?.accountUserId, options.peerAccounts?.map((peer) => peer?.accountUserId));
|
|
242
|
+
const details = [];
|
|
245
243
|
if (accountLabel)
|
|
246
|
-
|
|
247
|
-
if (email && idSuffix)
|
|
248
|
-
return `Account ${index + 1} (${email}, id:${idSuffix})`;
|
|
244
|
+
details.push(accountLabel);
|
|
249
245
|
if (email)
|
|
250
|
-
|
|
251
|
-
if (idSuffix)
|
|
252
|
-
|
|
253
|
-
|
|
246
|
+
details.push(email);
|
|
247
|
+
if (idSuffix) {
|
|
248
|
+
// The id has always rendered bare when it is the only thing known about
|
|
249
|
+
// an account. Once a seat sits beside it, an unprefixed pair of suffixes
|
|
250
|
+
// would not say which is which, so the prefix goes back on.
|
|
251
|
+
const idIsOnlyDetail = !accountLabel && !email && !seatSuffix;
|
|
252
|
+
details.push(idIsOnlyDetail ? idSuffix : `id:${idSuffix}`);
|
|
253
|
+
}
|
|
254
|
+
if (seatSuffix)
|
|
255
|
+
details.push(`seat:${seatSuffix}`);
|
|
256
|
+
if (details.length === 0)
|
|
257
|
+
return `Account ${index + 1}`;
|
|
258
|
+
return `Account ${index + 1} (${details.join(", ")})`;
|
|
254
259
|
}
|
|
255
260
|
export function formatCooldown(account, now = nowMs()) {
|
|
256
261
|
if (typeof account.coolingDownUntil !== "number")
|
package/dist/lib/accounts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../lib/accounts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,YAAY,EAA8C,MAAM,cAAc,CAAC;AAKxF,OAAO,EACN,kBAAkB,GAClB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EACN,YAAY,GAGZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAwB,MAAM,2BAA2B,CAAC;AACjF,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../lib/accounts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login-runner.d.ts","sourceRoot":"","sources":["../../../lib/auth/login-runner.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"login-runner.d.ts","sourceRoot":"","sources":["../../../lib/auth/login-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -295,6 +295,12 @@ export async function resolveAndPersistAccountSelection(tokens, options) {
|
|
|
295
295
|
}
|
|
296
296
|
return persistResolvedAccountSelection(selection, options);
|
|
297
297
|
}
|
|
298
|
+
function formatIdentitySuffix(value) {
|
|
299
|
+
const trimmed = value?.trim();
|
|
300
|
+
if (!trimmed)
|
|
301
|
+
return undefined;
|
|
302
|
+
return trimmed.length > 6 ? trimmed.slice(-6) : trimmed;
|
|
303
|
+
}
|
|
298
304
|
/**
|
|
299
305
|
* Persists login results through the shared storage transaction so overlapping
|
|
300
306
|
* login retries serialize their read-modify-write cycle instead of racing stale
|
|
@@ -550,6 +556,12 @@ export async function persistAccountPool(results, replaceAll = false) {
|
|
|
550
556
|
};
|
|
551
557
|
};
|
|
552
558
|
let identityIndexes = buildIdentityIndexes();
|
|
559
|
+
// Whether a login landed on an existing record or appended a new one is
|
|
560
|
+
// only knowable here, but the slot it ends up in is only final after the
|
|
561
|
+
// prune below, so the decision is recorded now and reported there. Keyed
|
|
562
|
+
// by refresh token: the login just wrote it, and a merge keeps the newest
|
|
563
|
+
// record's token, so the key still finds the row that survived.
|
|
564
|
+
const loginOutcomes = [];
|
|
553
565
|
for (const result of results) {
|
|
554
566
|
const accountId = result.accountIdOverride ?? extractAccountId(result.access);
|
|
555
567
|
const normalizedAccountId = accountId?.trim() || undefined;
|
|
@@ -639,6 +651,7 @@ export async function persistAccountPool(results, replaceAll = false) {
|
|
|
639
651
|
addedAt: now,
|
|
640
652
|
lastUsed: now,
|
|
641
653
|
});
|
|
654
|
+
loginOutcomes.push({ refreshToken: result.refresh, added: true });
|
|
642
655
|
identityIndexes = buildIdentityIndexes();
|
|
643
656
|
continue;
|
|
644
657
|
}
|
|
@@ -684,6 +697,7 @@ export async function persistAccountPool(results, replaceAll = false) {
|
|
|
684
697
|
oauthScope: normalizedScope ?? existing.oauthScope,
|
|
685
698
|
lastUsed: now,
|
|
686
699
|
};
|
|
700
|
+
loginOutcomes.push({ refreshToken: result.refresh, added: false });
|
|
687
701
|
identityIndexes = buildIdentityIndexes();
|
|
688
702
|
}
|
|
689
703
|
const pruneRefreshTokenCollisions = () => {
|
|
@@ -692,10 +706,23 @@ export async function persistAccountPool(results, replaceAll = false) {
|
|
|
692
706
|
const getExactIdentityKey = (account) => {
|
|
693
707
|
const organizationId = account?.organizationId?.trim() ?? "";
|
|
694
708
|
const accountId = normalizeStoredAccountId(account) ?? "";
|
|
695
|
-
const accountUserId = account
|
|
709
|
+
const accountUserId = normalizeStoredAccountUserId(account) ?? "";
|
|
696
710
|
const email = account?.email?.trim().toLowerCase() ?? "";
|
|
697
711
|
const refreshToken = account?.refreshToken?.trim() ?? "";
|
|
698
|
-
|
|
712
|
+
// A member id pins one seat of one workspace, so two records
|
|
713
|
+
// carrying it are the same seat and the newer one supersedes the
|
|
714
|
+
// older. The refresh token is left out because a re-login mints a
|
|
715
|
+
// new one: keying on it meant the single case this prune exists
|
|
716
|
+
// to collapse was the one case that could never collide.
|
|
717
|
+
if (accountUserId) {
|
|
718
|
+
return `org:${organizationId}|account:${accountId}|member:${accountUserId}`;
|
|
719
|
+
}
|
|
720
|
+
// No member id, so the seat is unknown. Two records under one
|
|
721
|
+
// workspace id, like two sharing only an email, can be two
|
|
722
|
+
// different members whose seat was never recorded - so both keep
|
|
723
|
+
// the token that tells them apart rather than risk merging two
|
|
724
|
+
// live accounts into one.
|
|
725
|
+
if (organizationId || accountId) {
|
|
699
726
|
return `org:${organizationId}|account:${accountId}|member:${accountUserId}|refresh:${refreshToken}`;
|
|
700
727
|
}
|
|
701
728
|
return `email:${email}|refresh:${refreshToken}`;
|
|
@@ -762,6 +789,56 @@ export async function persistAccountPool(results, replaceAll = false) {
|
|
|
762
789
|
pruneRefreshTokenCollisions();
|
|
763
790
|
if (accounts.length === 0)
|
|
764
791
|
return;
|
|
792
|
+
// A login that lands on a seat the store never held is indistinguishable
|
|
793
|
+
// from one that repaired an existing seat unless it says which it did.
|
|
794
|
+
// The workspace/email neighbours are named because that is the line that
|
|
795
|
+
// distinguishes "this replaced your exhausted account" from "this added a
|
|
796
|
+
// ninth account beside it". Slots only - an email is never printed here,
|
|
797
|
+
// matching every other identity surface.
|
|
798
|
+
const describeSlots = (indexes) => indexes.map((slot) => `Account ${slot + 1}`).join(", ");
|
|
799
|
+
for (const outcome of loginOutcomes) {
|
|
800
|
+
const index = accounts.findIndex((account) => account?.refreshToken === outcome.refreshToken);
|
|
801
|
+
if (index < 0)
|
|
802
|
+
continue;
|
|
803
|
+
const account = accounts[index];
|
|
804
|
+
if (!account)
|
|
805
|
+
continue;
|
|
806
|
+
const identityParts = [];
|
|
807
|
+
const idSuffix = formatIdentitySuffix(account.accountId);
|
|
808
|
+
const seatSuffix = formatIdentitySuffix(account.accountUserId);
|
|
809
|
+
if (idSuffix)
|
|
810
|
+
identityParts.push(`id:${idSuffix}`);
|
|
811
|
+
if (seatSuffix)
|
|
812
|
+
identityParts.push(`seat:${seatSuffix}`);
|
|
813
|
+
const identity = identityParts.length > 0 ? ` (${identityParts.join(", ")})` : "";
|
|
814
|
+
if (!outcome.added) {
|
|
815
|
+
logInfo(`Login updated Account ${index + 1}${identity} in place - an account already in the store.`);
|
|
816
|
+
continue;
|
|
817
|
+
}
|
|
818
|
+
const workspaceId = account.accountId?.trim();
|
|
819
|
+
const email = sanitizeEmail(account.email);
|
|
820
|
+
const sameWorkspace = [];
|
|
821
|
+
const sameEmail = [];
|
|
822
|
+
for (let i = 0; i < accounts.length; i += 1) {
|
|
823
|
+
if (i === index)
|
|
824
|
+
continue;
|
|
825
|
+
const other = accounts[i];
|
|
826
|
+
if (!other)
|
|
827
|
+
continue;
|
|
828
|
+
if (workspaceId && other.accountId?.trim() === workspaceId)
|
|
829
|
+
sameWorkspace.push(i);
|
|
830
|
+
if (email && sanitizeEmail(other.email) === email)
|
|
831
|
+
sameEmail.push(i);
|
|
832
|
+
}
|
|
833
|
+
const notes = [];
|
|
834
|
+
if (sameWorkspace.length > 0) {
|
|
835
|
+
notes.push(`Same workspace id as ${describeSlots(sameWorkspace)}.`);
|
|
836
|
+
}
|
|
837
|
+
if (sameEmail.length > 0) {
|
|
838
|
+
notes.push(`Same email as ${describeSlots(sameEmail)}.`);
|
|
839
|
+
}
|
|
840
|
+
logInfo(`Login added Account ${index + 1}${identity} as a NEW account - it was not in the store, so it repaired no existing account.${notes.length > 0 ? ` ${notes.join(" ")}` : ""}`);
|
|
841
|
+
}
|
|
765
842
|
const resolveIndexByIdentityKeys = (identityKeys) => {
|
|
766
843
|
if (!identityKeys || identityKeys.length === 0)
|
|
767
844
|
return undefined;
|