opencode-openai-codex-auth-multi 4.3.0-multiaccount.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 (90) hide show
  1. package/LICENSE +37 -0
  2. package/README.md +107 -0
  3. package/assets/opencode-logo-ornate-dark.svg +18 -0
  4. package/assets/readme-hero.svg +31 -0
  5. package/config/README.md +110 -0
  6. package/config/minimal-opencode.json +13 -0
  7. package/config/opencode-legacy.json +572 -0
  8. package/config/opencode-modern.json +240 -0
  9. package/dist/index.d.ts +44 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +666 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/lib/accounts.d.ts +48 -0
  14. package/dist/lib/accounts.d.ts.map +1 -0
  15. package/dist/lib/accounts.js +282 -0
  16. package/dist/lib/accounts.js.map +1 -0
  17. package/dist/lib/auth/auth.d.ts +43 -0
  18. package/dist/lib/auth/auth.d.ts.map +1 -0
  19. package/dist/lib/auth/auth.js +163 -0
  20. package/dist/lib/auth/auth.js.map +1 -0
  21. package/dist/lib/auth/browser.d.ts +17 -0
  22. package/dist/lib/auth/browser.d.ts.map +1 -0
  23. package/dist/lib/auth/browser.js +76 -0
  24. package/dist/lib/auth/browser.js.map +1 -0
  25. package/dist/lib/auth/server.d.ts +10 -0
  26. package/dist/lib/auth/server.d.ts.map +1 -0
  27. package/dist/lib/auth/server.js +78 -0
  28. package/dist/lib/auth/server.js.map +1 -0
  29. package/dist/lib/cli.d.ts +8 -0
  30. package/dist/lib/cli.d.ts.map +1 -0
  31. package/dist/lib/cli.js +44 -0
  32. package/dist/lib/cli.js.map +1 -0
  33. package/dist/lib/config.d.ts +17 -0
  34. package/dist/lib/config.d.ts.map +1 -0
  35. package/dist/lib/config.js +51 -0
  36. package/dist/lib/config.js.map +1 -0
  37. package/dist/lib/constants.d.ts +67 -0
  38. package/dist/lib/constants.d.ts.map +1 -0
  39. package/dist/lib/constants.js +67 -0
  40. package/dist/lib/constants.js.map +1 -0
  41. package/dist/lib/logger.d.ts +26 -0
  42. package/dist/lib/logger.d.ts.map +1 -0
  43. package/dist/lib/logger.js +110 -0
  44. package/dist/lib/logger.js.map +1 -0
  45. package/dist/lib/oauth-success.html +712 -0
  46. package/dist/lib/prompts/codex-opencode-bridge.d.ts +19 -0
  47. package/dist/lib/prompts/codex-opencode-bridge.d.ts.map +1 -0
  48. package/dist/lib/prompts/codex-opencode-bridge.js +152 -0
  49. package/dist/lib/prompts/codex-opencode-bridge.js.map +1 -0
  50. package/dist/lib/prompts/codex.d.ts +27 -0
  51. package/dist/lib/prompts/codex.d.ts.map +1 -0
  52. package/dist/lib/prompts/codex.js +241 -0
  53. package/dist/lib/prompts/codex.js.map +1 -0
  54. package/dist/lib/prompts/opencode-codex.d.ts +21 -0
  55. package/dist/lib/prompts/opencode-codex.d.ts.map +1 -0
  56. package/dist/lib/prompts/opencode-codex.js +91 -0
  57. package/dist/lib/prompts/opencode-codex.js.map +1 -0
  58. package/dist/lib/request/fetch-helpers.d.ts +81 -0
  59. package/dist/lib/request/fetch-helpers.d.ts.map +1 -0
  60. package/dist/lib/request/fetch-helpers.js +321 -0
  61. package/dist/lib/request/fetch-helpers.js.map +1 -0
  62. package/dist/lib/request/helpers/input-utils.d.ts +6 -0
  63. package/dist/lib/request/helpers/input-utils.d.ts.map +1 -0
  64. package/dist/lib/request/helpers/input-utils.js +174 -0
  65. package/dist/lib/request/helpers/input-utils.js.map +1 -0
  66. package/dist/lib/request/helpers/model-map.d.ts +28 -0
  67. package/dist/lib/request/helpers/model-map.d.ts.map +1 -0
  68. package/dist/lib/request/helpers/model-map.js +109 -0
  69. package/dist/lib/request/helpers/model-map.js.map +1 -0
  70. package/dist/lib/request/request-transformer.d.ts +93 -0
  71. package/dist/lib/request/request-transformer.d.ts.map +1 -0
  72. package/dist/lib/request/request-transformer.js +403 -0
  73. package/dist/lib/request/request-transformer.js.map +1 -0
  74. package/dist/lib/request/response-handler.d.ts +14 -0
  75. package/dist/lib/request/response-handler.d.ts.map +1 -0
  76. package/dist/lib/request/response-handler.js +90 -0
  77. package/dist/lib/request/response-handler.js.map +1 -0
  78. package/dist/lib/storage.d.ts +23 -0
  79. package/dist/lib/storage.d.ts.map +1 -0
  80. package/dist/lib/storage.js +153 -0
  81. package/dist/lib/storage.js.map +1 -0
  82. package/dist/lib/types.d.ts +170 -0
  83. package/dist/lib/types.d.ts.map +1 -0
  84. package/dist/lib/types.js +2 -0
  85. package/dist/lib/types.js.map +1 -0
  86. package/package.json +71 -0
  87. package/scripts/copy-oauth-success.js +37 -0
  88. package/scripts/install-opencode-codex-auth.js +193 -0
  89. package/scripts/test-all-models.sh +260 -0
  90. package/scripts/validate-model-map.sh +97 -0
@@ -0,0 +1,90 @@
1
+ import { createLogger, logRequest, LOGGING_ENABLED } from "../logger.js";
2
+ const log = createLogger("response-handler");
3
+ /**
4
+
5
+ * Parse SSE stream to extract final response
6
+ * @param sseText - Complete SSE stream text
7
+ * @returns Final response object or null if not found
8
+ */
9
+ function parseSseStream(sseText) {
10
+ const lines = sseText.split('\n');
11
+ for (const line of lines) {
12
+ if (line.startsWith('data: ')) {
13
+ try {
14
+ const data = JSON.parse(line.substring(6));
15
+ // Look for response.done event with final data
16
+ if (data.type === 'response.done' || data.type === 'response.completed') {
17
+ return data.response;
18
+ }
19
+ }
20
+ catch (e) {
21
+ // Skip malformed JSON
22
+ }
23
+ }
24
+ }
25
+ return null;
26
+ }
27
+ /**
28
+ * Convert SSE stream response to JSON for generateText()
29
+ * @param response - Fetch response with SSE stream
30
+ * @param headers - Response headers
31
+ * @returns Response with JSON body
32
+ */
33
+ export async function convertSseToJson(response, headers) {
34
+ if (!response.body) {
35
+ throw new Error('[openai-codex-plugin] Response has no body');
36
+ }
37
+ const reader = response.body.getReader();
38
+ const decoder = new TextDecoder();
39
+ let fullText = '';
40
+ try {
41
+ // Consume the entire stream
42
+ while (true) {
43
+ const { done, value } = await reader.read();
44
+ if (done)
45
+ break;
46
+ fullText += decoder.decode(value, { stream: true });
47
+ }
48
+ if (LOGGING_ENABLED) {
49
+ logRequest("stream-full", { fullContent: fullText });
50
+ }
51
+ // Parse SSE events to extract the final response
52
+ const finalResponse = parseSseStream(fullText);
53
+ if (!finalResponse) {
54
+ log.warn("Could not find final response in SSE stream");
55
+ logRequest("stream-error", { error: "No response.done event found" });
56
+ // Return original stream if we can't parse
57
+ return new Response(fullText, {
58
+ status: response.status,
59
+ statusText: response.statusText,
60
+ headers: headers,
61
+ });
62
+ }
63
+ // Return as plain JSON (not SSE)
64
+ const jsonHeaders = new Headers(headers);
65
+ jsonHeaders.set('content-type', 'application/json; charset=utf-8');
66
+ return new Response(JSON.stringify(finalResponse), {
67
+ status: response.status,
68
+ statusText: response.statusText,
69
+ headers: jsonHeaders,
70
+ });
71
+ }
72
+ catch (error) {
73
+ log.error("Error converting stream", { error: String(error) });
74
+ logRequest("stream-error", { error: String(error) });
75
+ throw error;
76
+ }
77
+ }
78
+ /**
79
+ * Ensure response has content-type header
80
+ * @param headers - Response headers
81
+ * @returns Headers with content-type set
82
+ */
83
+ export function ensureContentType(headers) {
84
+ const responseHeaders = new Headers(headers);
85
+ if (!responseHeaders.has('content-type')) {
86
+ responseHeaders.set('content-type', 'text/event-stream; charset=utf-8');
87
+ }
88
+ return responseHeaders;
89
+ }
90
+ //# sourceMappingURL=response-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-handler.js","sourceRoot":"","sources":["../../../lib/request/response-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export type CooldownReason = "auth-failure" | "network-error";
2
+ export interface AccountMetadataV1 {
3
+ accountId?: string;
4
+ refreshToken: string;
5
+ addedAt: number;
6
+ lastUsed: number;
7
+ lastSwitchReason?: "rate-limit" | "initial" | "rotation";
8
+ rateLimitResetTime?: number;
9
+ coolingDownUntil?: number;
10
+ cooldownReason?: CooldownReason;
11
+ }
12
+ export interface AccountStorageV1 {
13
+ version: 1;
14
+ accounts: AccountMetadataV1[];
15
+ activeIndex: number;
16
+ }
17
+ export declare function getStoragePath(): string;
18
+ export declare function deduplicateAccounts(accounts: AccountMetadataV1[]): AccountMetadataV1[];
19
+ export declare function normalizeAccountStorage(data: unknown): AccountStorageV1 | null;
20
+ export declare function loadAccounts(): Promise<AccountStorageV1 | null>;
21
+ export declare function saveAccounts(storage: AccountStorageV1): Promise<void>;
22
+ export declare function clearAccounts(): Promise<void>;
23
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../lib/storage.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG,eAAe,CAAC;AAE9D,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,YAAY,GAAG,SAAS,GAAG,UAAU,CAAC;IACzD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,CAAC,CAAC;IACX,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;CACrB;AAQD,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAgBD,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,iBAAiB,EAAE,GAC5B,iBAAiB,EAAE,CAiCrB;AAiCD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,GAAG,IAAI,CAoD9E;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAerE;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAK3E;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAUnD"}
@@ -0,0 +1,153 @@
1
+ import { promises as fs } from "node:fs";
2
+ import { dirname, join } from "node:path";
3
+ import { homedir } from "node:os";
4
+ import { createLogger } from "./logger.js";
5
+ const log = createLogger("storage");
6
+ function getConfigDir() {
7
+ return join(homedir(), ".opencode");
8
+ }
9
+ export function getStoragePath() {
10
+ return join(getConfigDir(), "openai-codex-accounts.json");
11
+ }
12
+ function selectNewestAccount(current, candidate) {
13
+ if (!current)
14
+ return candidate;
15
+ const currentLastUsed = current.lastUsed || 0;
16
+ const candidateLastUsed = candidate.lastUsed || 0;
17
+ if (candidateLastUsed > currentLastUsed)
18
+ return candidate;
19
+ if (candidateLastUsed < currentLastUsed)
20
+ return current;
21
+ const currentAddedAt = current.addedAt || 0;
22
+ const candidateAddedAt = candidate.addedAt || 0;
23
+ return candidateAddedAt >= currentAddedAt ? candidate : current;
24
+ }
25
+ export function deduplicateAccounts(accounts) {
26
+ const keyToIndex = new Map();
27
+ const indicesToKeep = new Set();
28
+ for (let i = 0; i < accounts.length; i += 1) {
29
+ const account = accounts[i];
30
+ if (!account)
31
+ continue;
32
+ const key = account.accountId || account.refreshToken;
33
+ if (!key)
34
+ continue;
35
+ const existingIndex = keyToIndex.get(key);
36
+ if (existingIndex === undefined) {
37
+ keyToIndex.set(key, i);
38
+ continue;
39
+ }
40
+ const existing = accounts[existingIndex];
41
+ const newest = selectNewestAccount(existing, account);
42
+ keyToIndex.set(key, newest === account ? i : existingIndex);
43
+ }
44
+ for (const idx of keyToIndex.values()) {
45
+ indicesToKeep.add(idx);
46
+ }
47
+ const result = [];
48
+ for (let i = 0; i < accounts.length; i += 1) {
49
+ if (indicesToKeep.has(i)) {
50
+ const account = accounts[i];
51
+ if (account)
52
+ result.push(account);
53
+ }
54
+ }
55
+ return result;
56
+ }
57
+ function isRecord(value) {
58
+ return !!value && typeof value === "object" && !Array.isArray(value);
59
+ }
60
+ function clampIndex(index, length) {
61
+ if (length <= 0)
62
+ return 0;
63
+ return Math.max(0, Math.min(index, length - 1));
64
+ }
65
+ function toAccountKey(account) {
66
+ return account.accountId || account.refreshToken;
67
+ }
68
+ function extractActiveKey(accounts, activeIndex) {
69
+ const candidate = accounts[activeIndex];
70
+ if (!isRecord(candidate))
71
+ return undefined;
72
+ const accountId = typeof candidate.accountId === "string" && candidate.accountId.trim()
73
+ ? candidate.accountId
74
+ : undefined;
75
+ const refreshToken = typeof candidate.refreshToken === "string" && candidate.refreshToken.trim()
76
+ ? candidate.refreshToken
77
+ : undefined;
78
+ return accountId || refreshToken;
79
+ }
80
+ export function normalizeAccountStorage(data) {
81
+ if (!isRecord(data)) {
82
+ log.warn("Invalid storage format, ignoring");
83
+ return null;
84
+ }
85
+ if (data.version !== 1) {
86
+ log.warn("Unknown storage version, ignoring", {
87
+ version: data.version,
88
+ });
89
+ return null;
90
+ }
91
+ const rawAccounts = data.accounts;
92
+ if (!Array.isArray(rawAccounts)) {
93
+ log.warn("Invalid storage format, ignoring");
94
+ return null;
95
+ }
96
+ const activeIndexValue = typeof data.activeIndex === "number" && Number.isFinite(data.activeIndex)
97
+ ? data.activeIndex
98
+ : 0;
99
+ const rawActiveIndex = clampIndex(activeIndexValue, rawAccounts.length);
100
+ const activeKey = extractActiveKey(rawAccounts, rawActiveIndex);
101
+ const validAccounts = rawAccounts.filter((account) => isRecord(account) && typeof account.refreshToken === "string");
102
+ const deduplicatedAccounts = deduplicateAccounts(validAccounts);
103
+ const activeIndex = (() => {
104
+ if (deduplicatedAccounts.length === 0)
105
+ return 0;
106
+ if (activeKey) {
107
+ const mappedIndex = deduplicatedAccounts.findIndex((account) => toAccountKey(account) === activeKey);
108
+ if (mappedIndex >= 0)
109
+ return mappedIndex;
110
+ }
111
+ return clampIndex(rawActiveIndex, deduplicatedAccounts.length);
112
+ })();
113
+ return {
114
+ version: 1,
115
+ accounts: deduplicatedAccounts,
116
+ activeIndex,
117
+ };
118
+ }
119
+ export async function loadAccounts() {
120
+ try {
121
+ const path = getStoragePath();
122
+ const content = await fs.readFile(path, "utf-8");
123
+ const data = JSON.parse(content);
124
+ return normalizeAccountStorage(data);
125
+ }
126
+ catch (error) {
127
+ const code = error.code;
128
+ if (code === "ENOENT") {
129
+ return null;
130
+ }
131
+ log.error("Failed to load account storage", { error: String(error) });
132
+ return null;
133
+ }
134
+ }
135
+ export async function saveAccounts(storage) {
136
+ const path = getStoragePath();
137
+ await fs.mkdir(dirname(path), { recursive: true });
138
+ const content = JSON.stringify(storage, null, 2);
139
+ await fs.writeFile(path, content, "utf-8");
140
+ }
141
+ export async function clearAccounts() {
142
+ try {
143
+ const path = getStoragePath();
144
+ await fs.unlink(path);
145
+ }
146
+ catch (error) {
147
+ const code = error.code;
148
+ if (code !== "ENOENT") {
149
+ log.error("Failed to clear account storage", { error: String(error) });
150
+ }
151
+ }
152
+ }
153
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../lib/storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,170 @@
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
+ /**
13
+ * User configuration structure from opencode.json
14
+ */
15
+ export interface UserConfig {
16
+ global: ConfigOptions;
17
+ models: {
18
+ [modelName: string]: {
19
+ options?: ConfigOptions;
20
+ variants?: Record<string, (ConfigOptions & {
21
+ disabled?: boolean;
22
+ }) | undefined>;
23
+ [key: string]: unknown;
24
+ };
25
+ };
26
+ }
27
+ /**
28
+ * Configuration options for reasoning and text settings
29
+ */
30
+ export interface ConfigOptions {
31
+ reasoningEffort?: "none" | "minimal" | "low" | "medium" | "high" | "xhigh";
32
+ reasoningSummary?: "auto" | "concise" | "detailed" | "off" | "on";
33
+ textVerbosity?: "low" | "medium" | "high";
34
+ include?: string[];
35
+ }
36
+ /**
37
+ * Reasoning configuration for requests
38
+ */
39
+ export interface ReasoningConfig {
40
+ effort: "none" | "minimal" | "low" | "medium" | "high" | "xhigh";
41
+ summary: "auto" | "concise" | "detailed" | "off" | "on";
42
+ }
43
+ /**
44
+ * OAuth server information
45
+ */
46
+ export interface OAuthServerInfo {
47
+ port: number;
48
+ ready: boolean;
49
+ close: () => void;
50
+ waitForCode: (state: string) => Promise<{
51
+ code: string;
52
+ } | null>;
53
+ }
54
+ /**
55
+ * PKCE challenge and verifier
56
+ */
57
+ export interface PKCEPair {
58
+ challenge: string;
59
+ verifier: string;
60
+ }
61
+ /**
62
+ * Authorization flow result
63
+ */
64
+ export interface AuthorizationFlow {
65
+ pkce: PKCEPair;
66
+ state: string;
67
+ url: string;
68
+ }
69
+ /**
70
+ * Token exchange success result
71
+ */
72
+ export interface TokenSuccess {
73
+ type: "success";
74
+ access: string;
75
+ refresh: string;
76
+ expires: number;
77
+ }
78
+ /**
79
+ * Token exchange failure result
80
+ */
81
+ export interface TokenFailure {
82
+ type: "failed";
83
+ }
84
+ /**
85
+ * Token exchange result
86
+ */
87
+ export type TokenResult = TokenSuccess | TokenFailure;
88
+ /**
89
+ * Parsed authorization input
90
+ */
91
+ export interface ParsedAuthInput {
92
+ code?: string;
93
+ state?: string;
94
+ }
95
+ /**
96
+ * JWT payload with ChatGPT account info
97
+ */
98
+ export interface JWTPayload {
99
+ "https://api.openai.com/auth"?: {
100
+ chatgpt_account_id?: string;
101
+ };
102
+ [key: string]: unknown;
103
+ }
104
+ /**
105
+ * Message input item
106
+ */
107
+ export interface InputItem {
108
+ id?: string;
109
+ type: string;
110
+ role: string;
111
+ content?: unknown;
112
+ [key: string]: unknown;
113
+ }
114
+ /**
115
+ * Request body structure
116
+ */
117
+ export interface RequestBody {
118
+ model: string;
119
+ store?: boolean;
120
+ stream?: boolean;
121
+ instructions?: string;
122
+ input?: InputItem[];
123
+ tools?: unknown;
124
+ reasoning?: Partial<ReasoningConfig>;
125
+ text?: {
126
+ verbosity?: "low" | "medium" | "high";
127
+ };
128
+ include?: string[];
129
+ providerOptions?: {
130
+ openai?: Partial<ConfigOptions> & {
131
+ store?: boolean;
132
+ include?: string[];
133
+ };
134
+ [key: string]: unknown;
135
+ };
136
+ /** Stable key to enable prompt-token caching on Codex backend */
137
+ prompt_cache_key?: string;
138
+ max_output_tokens?: number;
139
+ max_completion_tokens?: number;
140
+ [key: string]: unknown;
141
+ }
142
+ /**
143
+ * SSE event data structure
144
+ */
145
+ export interface SSEEventData {
146
+ type: string;
147
+ response?: unknown;
148
+ [key: string]: unknown;
149
+ }
150
+ /**
151
+ * Cache metadata for Codex instructions
152
+ */
153
+ export interface CacheMetadata {
154
+ etag: string | null;
155
+ tag: string;
156
+ lastChecked: number;
157
+ url: string;
158
+ }
159
+ /**
160
+ * GitHub release data
161
+ */
162
+ export interface GitHubRelease {
163
+ tag_name: string;
164
+ [key: string]: unknown;
165
+ }
166
+ export type { Auth, Provider, Model };
167
+ export type OAuthAuthDetails = Extract<Auth, {
168
+ type: "oauth";
169
+ }>;
170
+ //# 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,71 @@
1
+ {
2
+ "name": "opencode-openai-codex-auth-multi",
3
+ "version": "4.3.0-multiaccount.1",
4
+ "description": "Fork of opencode-openai-codex-auth with multi-account rotation (ChatGPT OAuth / Codex backend)",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "type": "module",
8
+ "license": "MIT",
9
+ "author": "Numman Ali",
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "git+https://github.com/ndycode/opencode-openai-codex-auth-multi.git"
13
+ },
14
+ "keywords": [
15
+ "opencode",
16
+ "openai",
17
+ "codex",
18
+ "chatgpt",
19
+ "oauth",
20
+ "gpt-5",
21
+ "plugin",
22
+ "auth",
23
+ "chatgpt-plus",
24
+ "chatgpt-pro"
25
+ ],
26
+ "homepage": "https://github.com/ndycode/opencode-openai-codex-auth-multi#readme",
27
+ "bugs": {
28
+ "url": "https://github.com/ndycode/opencode-openai-codex-auth-multi/issues"
29
+ },
30
+ "scripts": {
31
+ "build": "tsc && node scripts/copy-oauth-success.js",
32
+ "typecheck": "tsc --noEmit",
33
+ "test": "vitest run",
34
+ "test:watch": "vitest",
35
+ "test:ui": "vitest --ui",
36
+ "test:coverage": "vitest run --coverage"
37
+ },
38
+ "bin": {
39
+ "opencode-openai-codex-auth-multi": "scripts/install-opencode-codex-auth.js"
40
+ },
41
+ "files": [
42
+ "dist/",
43
+ "assets/",
44
+ "config/",
45
+ "scripts/",
46
+ "README.md",
47
+ "LICENSE"
48
+ ],
49
+ "engines": {
50
+ "node": ">=20.0.0"
51
+ },
52
+ "peerDependencies": {
53
+ "@opencode-ai/plugin": "^1.0.150"
54
+ },
55
+ "devDependencies": {
56
+ "@opencode-ai/plugin": "^1.0.150",
57
+ "@opencode-ai/sdk": "^1.0.150",
58
+ "@types/node": "^24.6.2",
59
+ "@vitest/ui": "^3.2.4",
60
+ "typescript": "^5.9.3",
61
+ "vitest": "^3.2.4"
62
+ },
63
+ "dependencies": {
64
+ "@openauthjs/openauth": "^0.4.3",
65
+ "hono": "^4.10.4"
66
+ },
67
+ "overrides": {
68
+ "hono": "^4.10.4",
69
+ "vite": "^7.1.12"
70
+ }
71
+ }
@@ -0,0 +1,37 @@
1
+ import { promises as fs } from "node:fs";
2
+ import { dirname, join, resolve } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+
5
+ const __filename = fileURLToPath(import.meta.url);
6
+ const __dirname = dirname(__filename);
7
+
8
+ function normalizePathForCompare(path) {
9
+ const resolved = resolve(path);
10
+ return process.platform === "win32" ? resolved.toLowerCase() : resolved;
11
+ }
12
+
13
+ function getDefaultPaths() {
14
+ const src = join(__dirname, "..", "lib", "oauth-success.html");
15
+ const dest = join(__dirname, "..", "dist", "lib", "oauth-success.html");
16
+ return { src, dest };
17
+ }
18
+
19
+ export async function copyOAuthSuccessHtml(options = {}) {
20
+ const defaults = getDefaultPaths();
21
+ const src = options.src ?? defaults.src;
22
+ const dest = options.dest ?? defaults.dest;
23
+
24
+ await fs.mkdir(dirname(dest), { recursive: true });
25
+ await fs.copyFile(src, dest);
26
+
27
+ return { src, dest };
28
+ }
29
+
30
+ const isDirectRun = (() => {
31
+ if (!process.argv[1]) return false;
32
+ return normalizePathForCompare(process.argv[1]) === normalizePathForCompare(__filename);
33
+ })();
34
+
35
+ if (isDirectRun) {
36
+ await copyOAuthSuccessHtml();
37
+ }