codex-multi-auth 2.1.0 → 2.1.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.
package/README.md
CHANGED
|
@@ -359,9 +359,9 @@ codex auth doctor --json
|
|
|
359
359
|
|
|
360
360
|
## Release Notes
|
|
361
361
|
|
|
362
|
-
- Current stable: [docs/releases/v2.1.
|
|
363
|
-
- Previous stable: [docs/releases/v2.0.
|
|
364
|
-
- Earlier stable: [docs/releases/v2.0.
|
|
362
|
+
- Current stable: [docs/releases/v2.1.1.md](docs/releases/v2.1.1.md)
|
|
363
|
+
- Previous stable: [docs/releases/v2.1.0.md](docs/releases/v2.1.0.md)
|
|
364
|
+
- Earlier stable: [docs/releases/v2.0.2.md](docs/releases/v2.0.2.md)
|
|
365
365
|
- Earlier stable: [docs/releases/v1.3.2.md](docs/releases/v1.3.2.md)
|
|
366
366
|
- Stable archive: [docs/releases/v1.3.1.md](docs/releases/v1.3.1.md)
|
|
367
367
|
- Full release archive: [docs/README.md#release-history](docs/README.md#release-history)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../../../lib/codex-manager/commands/bridge.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../../../lib/codex-manager/commands/bridge.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,iBAAiB;IACjC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAiED,wBAAsB,gBAAgB,CACrC,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,GAAE,iBAAsB,GAC1B,OAAO,CAAC,MAAM,CAAC,CAmHjB"}
|
|
@@ -2,12 +2,32 @@ import { addLocalClientToken, loadLocalClientTokenStore, revokeLocalClientToken,
|
|
|
2
2
|
function printBridgeUsage(logInfo) {
|
|
3
3
|
logInfo([
|
|
4
4
|
"Usage:",
|
|
5
|
-
" codex auth bridge token create [--label <label>]",
|
|
6
|
-
" codex auth bridge token list",
|
|
7
|
-
" codex auth bridge token rotate <id>",
|
|
8
|
-
" codex auth bridge token revoke <id>",
|
|
5
|
+
" codex auth bridge token create [--label <label>] [--json]",
|
|
6
|
+
" codex auth bridge token list [--json]",
|
|
7
|
+
" codex auth bridge token rotate <id> [--json]",
|
|
8
|
+
" codex auth bridge token revoke <id> [--json]",
|
|
9
9
|
].join("\n"));
|
|
10
10
|
}
|
|
11
|
+
function printJson(logInfo, value) {
|
|
12
|
+
logInfo(JSON.stringify(value, null, 2));
|
|
13
|
+
}
|
|
14
|
+
function publicTokenRecord(token) {
|
|
15
|
+
return {
|
|
16
|
+
id: token.id,
|
|
17
|
+
label: token.label,
|
|
18
|
+
prefix: token.prefix,
|
|
19
|
+
createdAt: token.createdAt,
|
|
20
|
+
lastUsedAt: token.lastUsedAt,
|
|
21
|
+
revokedAt: token.revokedAt,
|
|
22
|
+
state: token.revokedAt === null ? "active" : "revoked",
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
function consumeJsonFlag(args) {
|
|
26
|
+
return {
|
|
27
|
+
json: args.includes("--json") || args.includes("-j"),
|
|
28
|
+
rest: args.filter((arg) => arg !== "--json" && arg !== "-j"),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
11
31
|
function parseLabel(args) {
|
|
12
32
|
let label;
|
|
13
33
|
for (let i = 0; i < args.length; i += 1) {
|
|
@@ -41,19 +61,40 @@ export async function runBridgeCommand(args, deps = {}) {
|
|
|
41
61
|
return 1;
|
|
42
62
|
}
|
|
43
63
|
if (action === "create") {
|
|
44
|
-
const
|
|
64
|
+
const { json, rest: actionArgs } = consumeJsonFlag(rest);
|
|
65
|
+
const parsed = parseLabel(actionArgs);
|
|
45
66
|
if (!parsed.ok) {
|
|
46
67
|
logError(parsed.message);
|
|
47
68
|
return 1;
|
|
48
69
|
}
|
|
49
70
|
const created = await addLocalClientToken({ label: parsed.label });
|
|
71
|
+
if (json) {
|
|
72
|
+
printJson(logInfo, {
|
|
73
|
+
command: "bridge token create",
|
|
74
|
+
token: publicTokenRecord(created.record),
|
|
75
|
+
plainToken: created.plainToken,
|
|
76
|
+
});
|
|
77
|
+
return 0;
|
|
78
|
+
}
|
|
50
79
|
logInfo(`Token id: ${created.record.id}`);
|
|
51
80
|
logInfo(`Token prefix: ${created.record.prefix}`);
|
|
52
81
|
logInfo(`Token: ${created.plainToken}`);
|
|
53
82
|
return 0;
|
|
54
83
|
}
|
|
55
84
|
if (action === "list") {
|
|
85
|
+
const { json, rest: actionArgs } = consumeJsonFlag(rest);
|
|
86
|
+
if (actionArgs.length > 0) {
|
|
87
|
+
logError(`Unknown bridge token list option: ${actionArgs[0] ?? ""}`);
|
|
88
|
+
return 1;
|
|
89
|
+
}
|
|
56
90
|
const store = await loadLocalClientTokenStore();
|
|
91
|
+
if (json) {
|
|
92
|
+
printJson(logInfo, {
|
|
93
|
+
command: "bridge token list",
|
|
94
|
+
tokens: store.tokens.map(publicTokenRecord),
|
|
95
|
+
});
|
|
96
|
+
return 0;
|
|
97
|
+
}
|
|
57
98
|
if (store.tokens.length === 0) {
|
|
58
99
|
logInfo("No local bridge tokens configured.");
|
|
59
100
|
return 0;
|
|
@@ -65,32 +106,58 @@ export async function runBridgeCommand(args, deps = {}) {
|
|
|
65
106
|
return 0;
|
|
66
107
|
}
|
|
67
108
|
if (action === "rotate") {
|
|
68
|
-
const
|
|
109
|
+
const { json, rest: actionArgs } = consumeJsonFlag(rest);
|
|
110
|
+
const id = actionArgs[0];
|
|
69
111
|
if (!id) {
|
|
70
112
|
logError("Missing token id");
|
|
71
113
|
return 1;
|
|
72
114
|
}
|
|
115
|
+
if (actionArgs.length > 1) {
|
|
116
|
+
logError(`Unknown bridge token rotate option: ${actionArgs[1] ?? ""}`);
|
|
117
|
+
return 1;
|
|
118
|
+
}
|
|
73
119
|
const rotated = await rotateLocalClientToken({ id });
|
|
74
120
|
if (!rotated) {
|
|
75
121
|
logError("Token not found or already revoked.");
|
|
76
122
|
return 1;
|
|
77
123
|
}
|
|
124
|
+
if (json) {
|
|
125
|
+
printJson(logInfo, {
|
|
126
|
+
command: "bridge token rotate",
|
|
127
|
+
token: publicTokenRecord(rotated.record),
|
|
128
|
+
plainToken: rotated.plainToken,
|
|
129
|
+
});
|
|
130
|
+
return 0;
|
|
131
|
+
}
|
|
78
132
|
logInfo(`Token id: ${rotated.record.id}`);
|
|
79
133
|
logInfo(`Token prefix: ${rotated.record.prefix}`);
|
|
80
134
|
logInfo(`Token: ${rotated.plainToken}`);
|
|
81
135
|
return 0;
|
|
82
136
|
}
|
|
83
137
|
if (action === "revoke") {
|
|
84
|
-
const
|
|
138
|
+
const { json, rest: actionArgs } = consumeJsonFlag(rest);
|
|
139
|
+
const id = actionArgs[0];
|
|
85
140
|
if (!id) {
|
|
86
141
|
logError("Missing token id");
|
|
87
142
|
return 1;
|
|
88
143
|
}
|
|
144
|
+
if (actionArgs.length > 1) {
|
|
145
|
+
logError(`Unknown bridge token revoke option: ${actionArgs[1] ?? ""}`);
|
|
146
|
+
return 1;
|
|
147
|
+
}
|
|
89
148
|
const revoked = await revokeLocalClientToken(id);
|
|
90
149
|
if (!revoked) {
|
|
91
150
|
logError("Token not found or already revoked.");
|
|
92
151
|
return 1;
|
|
93
152
|
}
|
|
153
|
+
if (json) {
|
|
154
|
+
printJson(logInfo, {
|
|
155
|
+
command: "bridge token revoke",
|
|
156
|
+
id,
|
|
157
|
+
revoked: true,
|
|
158
|
+
});
|
|
159
|
+
return 0;
|
|
160
|
+
}
|
|
94
161
|
logInfo("Token revoked.");
|
|
95
162
|
return 0;
|
|
96
163
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../../../lib/codex-manager/commands/bridge.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,mBAAmB,
|
|
1
|
+
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../../../lib/codex-manager/commands/bridge.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codex-multi-auth",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.1",
|
|
4
4
|
"description": "Multi-account OAuth manager and codex auth wrapper for the official @openai/codex CLI, with switching, health checks, and recovery tools",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
package/scripts/codex-routing.js
CHANGED
|
@@ -3,18 +3,25 @@ const AUTH_SUBCOMMANDS = new Set([
|
|
|
3
3
|
"list",
|
|
4
4
|
"status",
|
|
5
5
|
"switch",
|
|
6
|
-
"best",
|
|
7
|
-
"check",
|
|
8
|
-
"features",
|
|
9
|
-
"
|
|
10
|
-
"verify",
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
"
|
|
17
|
-
"
|
|
6
|
+
"best",
|
|
7
|
+
"check",
|
|
8
|
+
"features",
|
|
9
|
+
"usage",
|
|
10
|
+
"verify-flagged",
|
|
11
|
+
"verify",
|
|
12
|
+
"forecast",
|
|
13
|
+
"report",
|
|
14
|
+
"fix",
|
|
15
|
+
"doctor",
|
|
16
|
+
"account",
|
|
17
|
+
"budget",
|
|
18
|
+
"bridge",
|
|
19
|
+
"integrations",
|
|
20
|
+
"models",
|
|
21
|
+
"monitor",
|
|
22
|
+
"rotation",
|
|
23
|
+
"why-selected",
|
|
24
|
+
"config",
|
|
18
25
|
"init-config",
|
|
19
26
|
"debug",
|
|
20
27
|
]);
|