better-opencode-openai-codex-auth 0.1.0 → 0.1.2
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 +24 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +27 -22
- package/dist/index.js.map +1 -1
- package/dist/lib/account-pool.d.ts.map +1 -1
- package/dist/lib/account-pool.js +6 -2
- package/dist/lib/account-pool.js.map +1 -1
- package/dist/lib/auth/auth.d.ts.map +1 -1
- package/dist/lib/auth/auth.js +12 -7
- package/dist/lib/auth/auth.js.map +1 -1
- package/dist/lib/auth/server.d.ts.map +1 -1
- package/dist/lib/auth/server.js +12 -8
- package/dist/lib/auth/server.js.map +1 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +13 -4
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/constants.d.ts +25 -0
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +25 -0
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/logger.d.ts +6 -0
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js +11 -2
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/prompts/codex.d.ts +1 -1
- package/dist/lib/prompts/codex.d.ts.map +1 -1
- package/dist/lib/prompts/codex.js +15 -2
- package/dist/lib/prompts/codex.js.map +1 -1
- package/dist/lib/request/fetch-helpers.d.ts.map +1 -1
- package/dist/lib/request/fetch-helpers.js +2 -2
- package/dist/lib/request/fetch-helpers.js.map +1 -1
- package/dist/lib/request/helpers/input-utils.d.ts.map +1 -1
- package/dist/lib/request/helpers/input-utils.js +12 -10
- package/dist/lib/request/helpers/input-utils.js.map +1 -1
- package/dist/lib/request/helpers/model-map.d.ts.map +1 -1
- package/dist/lib/request/helpers/model-map.js +14 -1
- package/dist/lib/request/helpers/model-map.js.map +1 -1
- package/dist/lib/request/request-transformer.d.ts.map +1 -1
- package/dist/lib/request/request-transformer.js +33 -29
- package/dist/lib/request/request-transformer.js.map +1 -1
- package/dist/lib/request/response-handler.d.ts.map +1 -1
- package/dist/lib/request/response-handler.js +17 -13
- package/dist/lib/request/response-handler.js.map +1 -1
- package/dist/lib/schemas.d.ts +85 -0
- package/dist/lib/schemas.d.ts.map +1 -0
- package/dist/lib/schemas.js +93 -0
- package/dist/lib/schemas.js.map +1 -0
- package/package.json +7 -7
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zod schemas for runtime validation
|
|
3
|
+
* Replaces unsafe JSON.parse type assertions with validated parsing
|
|
4
|
+
*/
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
/**
|
|
7
|
+
* Plugin configuration schema
|
|
8
|
+
* Validates ~/.opencode/openai-codex-auth-config.json
|
|
9
|
+
*/
|
|
10
|
+
export declare const PluginConfigSchema: z.ZodObject<{
|
|
11
|
+
codexMode: z.ZodOptional<z.ZodBoolean>;
|
|
12
|
+
accountSelectionStrategy: z.ZodOptional<z.ZodEnum<{
|
|
13
|
+
sticky: "sticky";
|
|
14
|
+
"round-robin": "round-robin";
|
|
15
|
+
}>>;
|
|
16
|
+
rateLimitCooldownMs: z.ZodOptional<z.ZodNumber>;
|
|
17
|
+
}, z.core.$strip>;
|
|
18
|
+
export type ValidatedPluginConfig = z.infer<typeof PluginConfigSchema>;
|
|
19
|
+
/**
|
|
20
|
+
* Account pool entry schema
|
|
21
|
+
*/
|
|
22
|
+
export declare const AccountPoolEntrySchema: z.ZodObject<{
|
|
23
|
+
accountId: z.ZodString;
|
|
24
|
+
refresh: z.ZodString;
|
|
25
|
+
access: z.ZodString;
|
|
26
|
+
expires: z.ZodNumber;
|
|
27
|
+
email: z.ZodOptional<z.ZodString>;
|
|
28
|
+
lastUsed: z.ZodOptional<z.ZodNumber>;
|
|
29
|
+
rateLimitedUntil: z.ZodOptional<z.ZodNumber>;
|
|
30
|
+
}, z.core.$strip>;
|
|
31
|
+
export type ValidatedAccountPoolEntry = z.infer<typeof AccountPoolEntrySchema>;
|
|
32
|
+
/**
|
|
33
|
+
* Account pool storage schema
|
|
34
|
+
* Validates ~/.opencode/openai-codex-accounts.json
|
|
35
|
+
*/
|
|
36
|
+
export declare const AccountPoolStorageSchema: z.ZodObject<{
|
|
37
|
+
version: z.ZodLiteral<1>;
|
|
38
|
+
activeIndex: z.ZodNumber;
|
|
39
|
+
accounts: z.ZodArray<z.ZodObject<{
|
|
40
|
+
accountId: z.ZodString;
|
|
41
|
+
refresh: z.ZodString;
|
|
42
|
+
access: z.ZodString;
|
|
43
|
+
expires: z.ZodNumber;
|
|
44
|
+
email: z.ZodOptional<z.ZodString>;
|
|
45
|
+
lastUsed: z.ZodOptional<z.ZodNumber>;
|
|
46
|
+
rateLimitedUntil: z.ZodOptional<z.ZodNumber>;
|
|
47
|
+
}, z.core.$strip>>;
|
|
48
|
+
}, z.core.$strip>;
|
|
49
|
+
export type ValidatedAccountPoolStorage = z.infer<typeof AccountPoolStorageSchema>;
|
|
50
|
+
/**
|
|
51
|
+
* Cache metadata schema
|
|
52
|
+
* Validates cache metadata files
|
|
53
|
+
*/
|
|
54
|
+
export declare const CacheMetadataSchema: z.ZodObject<{
|
|
55
|
+
etag: z.ZodNullable<z.ZodString>;
|
|
56
|
+
tag: z.ZodString;
|
|
57
|
+
lastChecked: z.ZodNumber;
|
|
58
|
+
url: z.ZodString;
|
|
59
|
+
}, z.core.$strip>;
|
|
60
|
+
export type ValidatedCacheMetadata = z.infer<typeof CacheMetadataSchema>;
|
|
61
|
+
/**
|
|
62
|
+
* OpenCode cache metadata schema (extended)
|
|
63
|
+
*/
|
|
64
|
+
export declare const OpenCodeCacheMetaSchema: z.ZodObject<{
|
|
65
|
+
etag: z.ZodString;
|
|
66
|
+
lastFetch: z.ZodOptional<z.ZodString>;
|
|
67
|
+
lastChecked: z.ZodNumber;
|
|
68
|
+
}, z.core.$strip>;
|
|
69
|
+
export type ValidatedOpenCodeCacheMeta = z.infer<typeof OpenCodeCacheMetaSchema>;
|
|
70
|
+
/**
|
|
71
|
+
* Safe JSON parse with Zod validation
|
|
72
|
+
* @param jsonString - JSON string to parse
|
|
73
|
+
* @param schema - Zod schema to validate against
|
|
74
|
+
* @param fallback - Fallback value if parsing/validation fails
|
|
75
|
+
* @returns Parsed and validated data, or fallback
|
|
76
|
+
*/
|
|
77
|
+
export declare function safeParseJson<T>(jsonString: string, schema: z.ZodSchema<T>, fallback: T): T;
|
|
78
|
+
/**
|
|
79
|
+
* Safe JSON parse with Zod validation (null on failure)
|
|
80
|
+
* @param jsonString - JSON string to parse
|
|
81
|
+
* @param schema - Zod schema to validate against
|
|
82
|
+
* @returns Parsed and validated data, or null
|
|
83
|
+
*/
|
|
84
|
+
export declare function safeParseJsonOrNull<T>(jsonString: string, schema: z.ZodSchema<T>): T | null;
|
|
85
|
+
//# sourceMappingURL=schemas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../lib/schemas.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;;;;;iBAI7B,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEvE;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;iBAQjC,CAAC;AAEH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAE/E;;;GAGG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;iBAInC,CAAC;AAEH,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAEnF;;;GAGG;AACH,eAAO,MAAM,mBAAmB;;;;;iBAK9B,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEzE;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;iBAIlC,CAAC;AAEH,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAEjF;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAC9B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EACtB,QAAQ,EAAE,CAAC,GACT,CAAC,CAWH;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EACpC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GACpB,CAAC,GAAG,IAAI,CAWV"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zod schemas for runtime validation
|
|
3
|
+
* Replaces unsafe JSON.parse type assertions with validated parsing
|
|
4
|
+
*/
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
/**
|
|
7
|
+
* Plugin configuration schema
|
|
8
|
+
* Validates ~/.opencode/openai-codex-auth-config.json
|
|
9
|
+
*/
|
|
10
|
+
export const PluginConfigSchema = z.object({
|
|
11
|
+
codexMode: z.boolean().optional(),
|
|
12
|
+
accountSelectionStrategy: z.enum(["sticky", "round-robin"]).optional(),
|
|
13
|
+
rateLimitCooldownMs: z.number().optional(),
|
|
14
|
+
});
|
|
15
|
+
/**
|
|
16
|
+
* Account pool entry schema
|
|
17
|
+
*/
|
|
18
|
+
export const AccountPoolEntrySchema = z.object({
|
|
19
|
+
accountId: z.string(),
|
|
20
|
+
refresh: z.string(),
|
|
21
|
+
access: z.string(),
|
|
22
|
+
expires: z.number(),
|
|
23
|
+
email: z.string().optional(),
|
|
24
|
+
lastUsed: z.number().optional(),
|
|
25
|
+
rateLimitedUntil: z.number().optional(),
|
|
26
|
+
});
|
|
27
|
+
/**
|
|
28
|
+
* Account pool storage schema
|
|
29
|
+
* Validates ~/.opencode/openai-codex-accounts.json
|
|
30
|
+
*/
|
|
31
|
+
export const AccountPoolStorageSchema = z.object({
|
|
32
|
+
version: z.literal(1),
|
|
33
|
+
activeIndex: z.number(),
|
|
34
|
+
accounts: z.array(AccountPoolEntrySchema),
|
|
35
|
+
});
|
|
36
|
+
/**
|
|
37
|
+
* Cache metadata schema
|
|
38
|
+
* Validates cache metadata files
|
|
39
|
+
*/
|
|
40
|
+
export const CacheMetadataSchema = z.object({
|
|
41
|
+
etag: z.string().nullable(),
|
|
42
|
+
tag: z.string(),
|
|
43
|
+
lastChecked: z.number(),
|
|
44
|
+
url: z.string(),
|
|
45
|
+
});
|
|
46
|
+
/**
|
|
47
|
+
* OpenCode cache metadata schema (extended)
|
|
48
|
+
*/
|
|
49
|
+
export const OpenCodeCacheMetaSchema = z.object({
|
|
50
|
+
etag: z.string(),
|
|
51
|
+
lastFetch: z.string().optional(),
|
|
52
|
+
lastChecked: z.number(),
|
|
53
|
+
});
|
|
54
|
+
/**
|
|
55
|
+
* Safe JSON parse with Zod validation
|
|
56
|
+
* @param jsonString - JSON string to parse
|
|
57
|
+
* @param schema - Zod schema to validate against
|
|
58
|
+
* @param fallback - Fallback value if parsing/validation fails
|
|
59
|
+
* @returns Parsed and validated data, or fallback
|
|
60
|
+
*/
|
|
61
|
+
export function safeParseJson(jsonString, schema, fallback) {
|
|
62
|
+
try {
|
|
63
|
+
const parsed = JSON.parse(jsonString);
|
|
64
|
+
const result = schema.safeParse(parsed);
|
|
65
|
+
if (result.success) {
|
|
66
|
+
return result.data;
|
|
67
|
+
}
|
|
68
|
+
return fallback;
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return fallback;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Safe JSON parse with Zod validation (null on failure)
|
|
76
|
+
* @param jsonString - JSON string to parse
|
|
77
|
+
* @param schema - Zod schema to validate against
|
|
78
|
+
* @returns Parsed and validated data, or null
|
|
79
|
+
*/
|
|
80
|
+
export function safeParseJsonOrNull(jsonString, schema) {
|
|
81
|
+
try {
|
|
82
|
+
const parsed = JSON.parse(jsonString);
|
|
83
|
+
const result = schema.safeParse(parsed);
|
|
84
|
+
if (result.success) {
|
|
85
|
+
return result.data;
|
|
86
|
+
}
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../lib/schemas.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "better-opencode-openai-codex-auth",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "OpenAI ChatGPT (Codex backend) OAuth auth plugin for opencode - use your ChatGPT Plus/Pro subscription instead of API credits",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -55,20 +55,20 @@
|
|
|
55
55
|
"@opencode-ai/plugin": "^1.0.150"
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {
|
|
58
|
-
"@opencode-ai/plugin": "^1.
|
|
59
|
-
"@opencode-ai/sdk": "^1.
|
|
60
|
-
"@types/node": "^25.
|
|
58
|
+
"@opencode-ai/plugin": "^1.2.24",
|
|
59
|
+
"@opencode-ai/sdk": "^1.2.24",
|
|
60
|
+
"@types/node": "^25.4.0",
|
|
61
61
|
"@vitest/ui": "^4.0.18",
|
|
62
62
|
"typescript": "^5.9.3",
|
|
63
63
|
"vitest": "^4.0.18"
|
|
64
64
|
},
|
|
65
65
|
"dependencies": {
|
|
66
66
|
"@openauthjs/openauth": "^0.4.3",
|
|
67
|
-
"hono": "^4.12.
|
|
68
|
-
"jsonc-parser": "^3.3.1"
|
|
67
|
+
"hono": "^4.12.7",
|
|
68
|
+
"jsonc-parser": "^3.3.1",
|
|
69
|
+
"zod": "^4.3.6"
|
|
69
70
|
},
|
|
70
71
|
"overrides": {
|
|
71
|
-
"hono": "^4.12.3",
|
|
72
72
|
"vite": "^7.1.12"
|
|
73
73
|
}
|
|
74
74
|
}
|