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.
Files changed (48) hide show
  1. package/README.md +24 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +27 -22
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/account-pool.d.ts.map +1 -1
  6. package/dist/lib/account-pool.js +6 -2
  7. package/dist/lib/account-pool.js.map +1 -1
  8. package/dist/lib/auth/auth.d.ts.map +1 -1
  9. package/dist/lib/auth/auth.js +12 -7
  10. package/dist/lib/auth/auth.js.map +1 -1
  11. package/dist/lib/auth/server.d.ts.map +1 -1
  12. package/dist/lib/auth/server.js +12 -8
  13. package/dist/lib/auth/server.js.map +1 -1
  14. package/dist/lib/config.d.ts.map +1 -1
  15. package/dist/lib/config.js +13 -4
  16. package/dist/lib/config.js.map +1 -1
  17. package/dist/lib/constants.d.ts +25 -0
  18. package/dist/lib/constants.d.ts.map +1 -1
  19. package/dist/lib/constants.js +25 -0
  20. package/dist/lib/constants.js.map +1 -1
  21. package/dist/lib/logger.d.ts +6 -0
  22. package/dist/lib/logger.d.ts.map +1 -1
  23. package/dist/lib/logger.js +11 -2
  24. package/dist/lib/logger.js.map +1 -1
  25. package/dist/lib/prompts/codex.d.ts +1 -1
  26. package/dist/lib/prompts/codex.d.ts.map +1 -1
  27. package/dist/lib/prompts/codex.js +15 -2
  28. package/dist/lib/prompts/codex.js.map +1 -1
  29. package/dist/lib/request/fetch-helpers.d.ts.map +1 -1
  30. package/dist/lib/request/fetch-helpers.js +2 -2
  31. package/dist/lib/request/fetch-helpers.js.map +1 -1
  32. package/dist/lib/request/helpers/input-utils.d.ts.map +1 -1
  33. package/dist/lib/request/helpers/input-utils.js +12 -10
  34. package/dist/lib/request/helpers/input-utils.js.map +1 -1
  35. package/dist/lib/request/helpers/model-map.d.ts.map +1 -1
  36. package/dist/lib/request/helpers/model-map.js +14 -1
  37. package/dist/lib/request/helpers/model-map.js.map +1 -1
  38. package/dist/lib/request/request-transformer.d.ts.map +1 -1
  39. package/dist/lib/request/request-transformer.js +33 -29
  40. package/dist/lib/request/request-transformer.js.map +1 -1
  41. package/dist/lib/request/response-handler.d.ts.map +1 -1
  42. package/dist/lib/request/response-handler.js +17 -13
  43. package/dist/lib/request/response-handler.js.map +1 -1
  44. package/dist/lib/schemas.d.ts +85 -0
  45. package/dist/lib/schemas.d.ts.map +1 -0
  46. package/dist/lib/schemas.js +93 -0
  47. package/dist/lib/schemas.js.map +1 -0
  48. 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.0",
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.0.150",
59
- "@opencode-ai/sdk": "^1.0.150",
60
- "@types/node": "^25.3.3",
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.3",
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
  }