opencode-openai-codex-multi-auth 4.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/LICENSE +37 -0
  2. package/README.md +89 -0
  3. package/assets/openai-codex-auth-config.schema.json +63 -0
  4. package/assets/opencode-logo-ornate-dark.svg +18 -0
  5. package/assets/readme-hero.svg +31 -0
  6. package/config/README.md +103 -0
  7. package/config/minimal-opencode.json +12 -0
  8. package/config/opencode-legacy.json +571 -0
  9. package/config/opencode-modern.json +239 -0
  10. package/dist/index.d.ts +42 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +564 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/lib/accounts.d.ts +58 -0
  15. package/dist/lib/accounts.d.ts.map +1 -0
  16. package/dist/lib/accounts.js +405 -0
  17. package/dist/lib/accounts.js.map +1 -0
  18. package/dist/lib/auth/auth.d.ts +43 -0
  19. package/dist/lib/auth/auth.d.ts.map +1 -0
  20. package/dist/lib/auth/auth.js +163 -0
  21. package/dist/lib/auth/auth.js.map +1 -0
  22. package/dist/lib/auth/browser.d.ts +17 -0
  23. package/dist/lib/auth/browser.d.ts.map +1 -0
  24. package/dist/lib/auth/browser.js +76 -0
  25. package/dist/lib/auth/browser.js.map +1 -0
  26. package/dist/lib/auth/server.d.ts +10 -0
  27. package/dist/lib/auth/server.d.ts.map +1 -0
  28. package/dist/lib/auth/server.js +78 -0
  29. package/dist/lib/auth/server.js.map +1 -0
  30. package/dist/lib/cli.d.ts +8 -0
  31. package/dist/lib/cli.d.ts.map +1 -0
  32. package/dist/lib/cli.js +36 -0
  33. package/dist/lib/cli.js.map +1 -0
  34. package/dist/lib/config.d.ts +25 -0
  35. package/dist/lib/config.d.ts.map +1 -0
  36. package/dist/lib/config.js +112 -0
  37. package/dist/lib/config.js.map +1 -0
  38. package/dist/lib/constants.d.ts +67 -0
  39. package/dist/lib/constants.d.ts.map +1 -0
  40. package/dist/lib/constants.js +67 -0
  41. package/dist/lib/constants.js.map +1 -0
  42. package/dist/lib/logger.d.ts +21 -0
  43. package/dist/lib/logger.d.ts.map +1 -0
  44. package/dist/lib/logger.js +77 -0
  45. package/dist/lib/logger.js.map +1 -0
  46. package/dist/lib/oauth-success.html +712 -0
  47. package/dist/lib/prompts/codex-opencode-bridge.d.ts +19 -0
  48. package/dist/lib/prompts/codex-opencode-bridge.d.ts.map +1 -0
  49. package/dist/lib/prompts/codex-opencode-bridge.js +152 -0
  50. package/dist/lib/prompts/codex-opencode-bridge.js.map +1 -0
  51. package/dist/lib/prompts/codex.d.ts +28 -0
  52. package/dist/lib/prompts/codex.d.ts.map +1 -0
  53. package/dist/lib/prompts/codex.js +248 -0
  54. package/dist/lib/prompts/codex.js.map +1 -0
  55. package/dist/lib/prompts/opencode-codex.d.ts +21 -0
  56. package/dist/lib/prompts/opencode-codex.d.ts.map +1 -0
  57. package/dist/lib/prompts/opencode-codex.js +91 -0
  58. package/dist/lib/prompts/opencode-codex.js.map +1 -0
  59. package/dist/lib/request/fetch-helpers.d.ts +73 -0
  60. package/dist/lib/request/fetch-helpers.d.ts.map +1 -0
  61. package/dist/lib/request/fetch-helpers.js +221 -0
  62. package/dist/lib/request/fetch-helpers.js.map +1 -0
  63. package/dist/lib/request/helpers/input-utils.d.ts +6 -0
  64. package/dist/lib/request/helpers/input-utils.d.ts.map +1 -0
  65. package/dist/lib/request/helpers/input-utils.js +174 -0
  66. package/dist/lib/request/helpers/input-utils.js.map +1 -0
  67. package/dist/lib/request/helpers/model-map.d.ts +28 -0
  68. package/dist/lib/request/helpers/model-map.d.ts.map +1 -0
  69. package/dist/lib/request/helpers/model-map.js +109 -0
  70. package/dist/lib/request/helpers/model-map.js.map +1 -0
  71. package/dist/lib/request/request-transformer.d.ts +93 -0
  72. package/dist/lib/request/request-transformer.d.ts.map +1 -0
  73. package/dist/lib/request/request-transformer.js +403 -0
  74. package/dist/lib/request/request-transformer.js.map +1 -0
  75. package/dist/lib/request/response-handler.d.ts +14 -0
  76. package/dist/lib/request/response-handler.d.ts.map +1 -0
  77. package/dist/lib/request/response-handler.js +88 -0
  78. package/dist/lib/request/response-handler.js.map +1 -0
  79. package/dist/lib/storage.d.ts +5 -0
  80. package/dist/lib/storage.d.ts.map +1 -0
  81. package/dist/lib/storage.js +46 -0
  82. package/dist/lib/storage.js.map +1 -0
  83. package/dist/lib/types.d.ts +236 -0
  84. package/dist/lib/types.d.ts.map +1 -0
  85. package/dist/lib/types.js +2 -0
  86. package/dist/lib/types.js.map +1 -0
  87. package/package.json +77 -0
  88. package/scripts/install-opencode-codex-auth.js +450 -0
  89. package/scripts/test-all-models.sh +259 -0
  90. package/scripts/validate-model-map.sh +97 -0
@@ -0,0 +1,46 @@
1
+ import { existsSync } from "node:fs";
2
+ import { promises as fs } from "node:fs";
3
+ import { homedir } from "node:os";
4
+ import { dirname, join } from "node:path";
5
+ const STORAGE_DIR = join(homedir(), ".opencode");
6
+ const STORAGE_FILE = "openai-codex-accounts.json";
7
+ export function getStoragePath() {
8
+ return join(STORAGE_DIR, STORAGE_FILE);
9
+ }
10
+ export async function loadAccounts() {
11
+ const filePath = getStoragePath();
12
+ try {
13
+ if (!existsSync(filePath))
14
+ return null;
15
+ const raw = await fs.readFile(filePath, "utf-8");
16
+ const parsed = JSON.parse(raw);
17
+ if (!parsed || typeof parsed !== "object")
18
+ return null;
19
+ const storage = parsed;
20
+ if (storage.version !== 3)
21
+ return null;
22
+ if (!Array.isArray(storage.accounts))
23
+ return null;
24
+ const activeIndex = typeof storage.activeIndex === "number" && Number.isFinite(storage.activeIndex)
25
+ ? Math.max(0, Math.floor(storage.activeIndex))
26
+ : 0;
27
+ const clampedActiveIndex = storage.accounts.length > 0
28
+ ? Math.min(activeIndex, storage.accounts.length - 1)
29
+ : 0;
30
+ return {
31
+ version: 3,
32
+ accounts: storage.accounts,
33
+ activeIndex: clampedActiveIndex,
34
+ activeIndexByFamily: storage.activeIndexByFamily ?? {},
35
+ };
36
+ }
37
+ catch {
38
+ return null;
39
+ }
40
+ }
41
+ export async function saveAccounts(storage) {
42
+ const filePath = getStoragePath();
43
+ await fs.mkdir(dirname(filePath), { recursive: true });
44
+ await fs.writeFile(filePath, JSON.stringify(storage, null, 2), "utf-8");
45
+ }
46
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../lib/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAI1C,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AACjD,MAAM,YAAY,GAAG,4BAA4B,CAAC;AAElD,MAAM,UAAU,cAAc;IAC7B,OAAO,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY;IACjC,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAClC,IAAI,CAAC;QACJ,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;QACvC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;QAE1C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACvD,MAAM,OAAO,GAAG,MAAmC,CAAC;QACpD,IAAI,OAAO,CAAC,OAAO,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACvC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;QAElD,MAAM,WAAW,GAChB,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC;YAC9E,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAC9C,CAAC,CAAC,CAAC,CAAC;QACN,MAAM,kBAAkB,GACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YAC1B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YACpD,CAAC,CAAC,CAAC,CAAC;QAEN,OAAO;YACN,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,OAAO,CAAC,QAAwC;YAC1D,WAAW,EAAE,kBAAkB;YAC/B,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,IAAI,EAAE;SACtD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAyB;IAC3D,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAClC,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACzE,CAAC"}
@@ -0,0 +1,236 @@
1
+ import type { Auth, Provider, Model } from "@opencode-ai/sdk";
2
+ /**
3
+ * Plugin configuration from ~/.opencode/openai-codex-auth-config.json
4
+ */
5
+ export interface PluginConfig {
6
+ /**
7
+ * Enable CODEX_MODE (Codex-OpenCode bridge prompt instead of tool remap)
8
+ * @default true
9
+ */
10
+ codexMode?: boolean;
11
+ /**
12
+ * Account selection strategy when multiple accounts are configured.
13
+ * - sticky: keep the same account until rate-limited (best for caching)
14
+ * - round-robin: rotate accounts on every request (best for throughput)
15
+ * @default "sticky"
16
+ */
17
+ accountSelectionStrategy?: AccountSelectionStrategy;
18
+ /**
19
+ * Enable PID-based account offset for parallel agents.
20
+ * When enabled, each process chooses a different starting account but remains sticky.
21
+ *
22
+ * Note: This is only meaningful when 2+ accounts exist.
23
+ * @default true
24
+ */
25
+ pidOffsetEnabled?: boolean;
26
+ /**
27
+ * Suppress most toast notifications.
28
+ * @default false
29
+ */
30
+ quietMode?: boolean;
31
+ /**
32
+ * Milliseconds before token expiry to proactively refresh.
33
+ * @default 60000
34
+ */
35
+ tokenRefreshSkewMs?: number;
36
+ /**
37
+ * Debounce interval for account-related toasts.
38
+ * @default 60000
39
+ */
40
+ rateLimitToastDebounceMs?: number;
41
+ /**
42
+ * When all accounts are rate-limited, optionally wait and retry.
43
+ * @default false
44
+ */
45
+ retryAllAccountsRateLimited?: boolean;
46
+ /**
47
+ * Maximum time to wait when all accounts are rate-limited.
48
+ * Set to 0 to disable wait limit.
49
+ * @default 30000
50
+ */
51
+ retryAllAccountsMaxWaitMs?: number;
52
+ /**
53
+ * Maximum number of "all accounts rate-limited" waits.
54
+ * @default 1
55
+ */
56
+ retryAllAccountsMaxRetries?: number;
57
+ }
58
+ export type AccountSelectionStrategy = "sticky" | "round-robin";
59
+ export type OAuthAuthDetails = Extract<Auth, {
60
+ type: "oauth";
61
+ }>;
62
+ export type CooldownReason = "auth-failure";
63
+ export type RateLimitStateV3 = Record<string, number | undefined>;
64
+ export interface AccountRecordV3 {
65
+ refreshToken: string;
66
+ accountId?: string;
67
+ email?: string;
68
+ addedAt: number;
69
+ lastUsed: number;
70
+ lastSwitchReason?: "rate-limit" | "initial" | "rotation";
71
+ rateLimitResetTimes?: RateLimitStateV3;
72
+ coolingDownUntil?: number;
73
+ cooldownReason?: CooldownReason;
74
+ }
75
+ export interface AccountStorageV3 {
76
+ version: 3;
77
+ accounts: AccountRecordV3[];
78
+ activeIndex: number;
79
+ activeIndexByFamily?: Partial<Record<string, number>>;
80
+ }
81
+ /**
82
+ * User configuration structure from opencode.json
83
+ */
84
+ export interface UserConfig {
85
+ global: ConfigOptions;
86
+ models: {
87
+ [modelName: string]: {
88
+ options?: ConfigOptions;
89
+ variants?: Record<string, (ConfigOptions & {
90
+ disabled?: boolean;
91
+ }) | undefined>;
92
+ [key: string]: unknown;
93
+ };
94
+ };
95
+ }
96
+ /**
97
+ * Configuration options for reasoning and text settings
98
+ */
99
+ export interface ConfigOptions {
100
+ reasoningEffort?: "none" | "minimal" | "low" | "medium" | "high" | "xhigh";
101
+ reasoningSummary?: "auto" | "concise" | "detailed" | "off" | "on";
102
+ textVerbosity?: "low" | "medium" | "high";
103
+ include?: string[];
104
+ }
105
+ /**
106
+ * Reasoning configuration for requests
107
+ */
108
+ export interface ReasoningConfig {
109
+ effort: "none" | "minimal" | "low" | "medium" | "high" | "xhigh";
110
+ summary: "auto" | "concise" | "detailed" | "off" | "on";
111
+ }
112
+ /**
113
+ * OAuth server information
114
+ */
115
+ export interface OAuthServerInfo {
116
+ port: number;
117
+ ready: boolean;
118
+ close: () => void;
119
+ waitForCode: (state: string) => Promise<{
120
+ code: string;
121
+ } | null>;
122
+ }
123
+ /**
124
+ * PKCE challenge and verifier
125
+ */
126
+ export interface PKCEPair {
127
+ challenge: string;
128
+ verifier: string;
129
+ }
130
+ /**
131
+ * Authorization flow result
132
+ */
133
+ export interface AuthorizationFlow {
134
+ pkce: PKCEPair;
135
+ state: string;
136
+ url: string;
137
+ }
138
+ /**
139
+ * Token exchange success result
140
+ */
141
+ export interface TokenSuccess {
142
+ type: "success";
143
+ access: string;
144
+ refresh: string;
145
+ expires: number;
146
+ }
147
+ /**
148
+ * Token exchange failure result
149
+ */
150
+ export interface TokenFailure {
151
+ type: "failed";
152
+ }
153
+ /**
154
+ * Token exchange result
155
+ */
156
+ export type TokenResult = TokenSuccess | TokenFailure;
157
+ /**
158
+ * Parsed authorization input
159
+ */
160
+ export interface ParsedAuthInput {
161
+ code?: string;
162
+ state?: string;
163
+ }
164
+ /**
165
+ * JWT payload with ChatGPT account info
166
+ */
167
+ export interface JWTPayload {
168
+ "https://api.openai.com/auth"?: {
169
+ chatgpt_account_id?: string;
170
+ };
171
+ [key: string]: unknown;
172
+ }
173
+ /**
174
+ * Message input item
175
+ */
176
+ export interface InputItem {
177
+ id?: string;
178
+ type: string;
179
+ role: string;
180
+ content?: unknown;
181
+ [key: string]: unknown;
182
+ }
183
+ /**
184
+ * Request body structure
185
+ */
186
+ export interface RequestBody {
187
+ model: string;
188
+ store?: boolean;
189
+ stream?: boolean;
190
+ instructions?: string;
191
+ input?: InputItem[];
192
+ tools?: unknown;
193
+ reasoning?: Partial<ReasoningConfig>;
194
+ text?: {
195
+ verbosity?: "low" | "medium" | "high";
196
+ };
197
+ include?: string[];
198
+ providerOptions?: {
199
+ openai?: Partial<ConfigOptions> & {
200
+ store?: boolean;
201
+ include?: string[];
202
+ };
203
+ [key: string]: unknown;
204
+ };
205
+ /** Stable key to enable prompt-token caching on Codex backend */
206
+ prompt_cache_key?: string;
207
+ max_output_tokens?: number;
208
+ max_completion_tokens?: number;
209
+ [key: string]: unknown;
210
+ }
211
+ /**
212
+ * SSE event data structure
213
+ */
214
+ export interface SSEEventData {
215
+ type: string;
216
+ response?: unknown;
217
+ [key: string]: unknown;
218
+ }
219
+ /**
220
+ * Cache metadata for Codex instructions
221
+ */
222
+ export interface CacheMetadata {
223
+ etag: string | null;
224
+ tag: string;
225
+ lastChecked: number;
226
+ url: string;
227
+ }
228
+ /**
229
+ * GitHub release data
230
+ */
231
+ export interface GitHubRelease {
232
+ tag_name: string;
233
+ [key: string]: unknown;
234
+ }
235
+ export type { Auth, Provider, Model };
236
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../lib/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../lib/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,77 @@
1
+ {
2
+ "name": "opencode-openai-codex-multi-auth",
3
+ "version": "4.4.0",
4
+ "description": "OpenAI ChatGPT (Codex backend) OAuth auth plugin for opencode - use your ChatGPT Plus/Pro subscription instead of API credits",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "type": "module",
8
+ "license": "MIT",
9
+ "author": "Numman Ali",
10
+ "contributors": [
11
+ "iam-brain (https://github.com/iam-brain)"
12
+ ],
13
+ "repository": {
14
+ "type": "git",
15
+ "url": "git+https://github.com/iam-brain/opencode-openai-codex-multi-auth.git"
16
+ },
17
+ "keywords": [
18
+ "opencode",
19
+ "openai",
20
+ "codex",
21
+ "chatgpt",
22
+ "oauth",
23
+ "multi",
24
+ "gpt-5",
25
+ "plugin",
26
+ "auth",
27
+ "chatgpt-plus",
28
+ "chatgpt-pro"
29
+ ],
30
+ "homepage": "https://github.com/iam-brain/opencode-openai-codex-multi-auth#readme",
31
+ "bugs": {
32
+ "url": "https://github.com/iam-brain/opencode-openai-codex-multi-auth/issues"
33
+ },
34
+ "scripts": {
35
+ "build": "tsc && cp lib/oauth-success.html dist/lib/",
36
+ "typecheck": "tsc --noEmit",
37
+ "test": "vitest run",
38
+ "test:watch": "vitest",
39
+ "test:ui": "vitest --ui",
40
+ "test:coverage": "vitest run --coverage"
41
+ },
42
+ "bin": {
43
+ "opencode-openai-codex-multi-auth": "scripts/install-opencode-codex-auth.js",
44
+ "opencode-openai-codex-auth": "scripts/install-opencode-codex-auth.js"
45
+ },
46
+ "files": [
47
+ "dist/",
48
+ "assets/",
49
+ "config/",
50
+ "scripts/",
51
+ "README.md",
52
+ "LICENSE"
53
+ ],
54
+ "engines": {
55
+ "node": ">=20.0.0"
56
+ },
57
+ "peerDependencies": {
58
+ "@opencode-ai/plugin": "^1.0.150"
59
+ },
60
+ "devDependencies": {
61
+ "@opencode-ai/plugin": "^1.0.150",
62
+ "@opencode-ai/sdk": "^1.0.150",
63
+ "@types/node": "^24.6.2",
64
+ "@vitest/ui": "^3.2.4",
65
+ "typescript": "^5.9.3",
66
+ "vitest": "^3.2.4"
67
+ },
68
+ "dependencies": {
69
+ "@openauthjs/openauth": "^0.4.3",
70
+ "hono": "^4.10.4",
71
+ "jsonc-parser": "^3.3.1"
72
+ },
73
+ "overrides": {
74
+ "hono": "^4.10.4",
75
+ "vite": "^7.1.12"
76
+ }
77
+ }