codex-multi-auth 0.1.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 (327) hide show
  1. package/LICENSE +1 -0
  2. package/README.md +162 -0
  3. package/assets/opencode-logo-ornate-dark.svg +18 -0
  4. package/assets/readme-hero.svg +31 -0
  5. package/config/README.md +87 -0
  6. package/config/minimal-opencode.json +13 -0
  7. package/config/opencode-legacy.json +571 -0
  8. package/config/opencode-modern.json +239 -0
  9. package/dist/index.d.ts +45 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +3160 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/lib/accounts/rate-limits.d.ts +22 -0
  14. package/dist/lib/accounts/rate-limits.d.ts.map +1 -0
  15. package/dist/lib/accounts/rate-limits.js +63 -0
  16. package/dist/lib/accounts/rate-limits.js.map +1 -0
  17. package/dist/lib/accounts.d.ts +95 -0
  18. package/dist/lib/accounts.d.ts.map +1 -0
  19. package/dist/lib/accounts.js +668 -0
  20. package/dist/lib/accounts.js.map +1 -0
  21. package/dist/lib/audit.d.ts +45 -0
  22. package/dist/lib/audit.d.ts.map +1 -0
  23. package/dist/lib/audit.js +131 -0
  24. package/dist/lib/audit.js.map +1 -0
  25. package/dist/lib/auth/auth.d.ts +56 -0
  26. package/dist/lib/auth/auth.d.ts.map +1 -0
  27. package/dist/lib/auth/auth.js +214 -0
  28. package/dist/lib/auth/auth.js.map +1 -0
  29. package/dist/lib/auth/browser.d.ts +34 -0
  30. package/dist/lib/auth/browser.d.ts.map +1 -0
  31. package/dist/lib/auth/browser.js +185 -0
  32. package/dist/lib/auth/browser.js.map +1 -0
  33. package/dist/lib/auth/server.d.ts +24 -0
  34. package/dist/lib/auth/server.d.ts.map +1 -0
  35. package/dist/lib/auth/server.js +116 -0
  36. package/dist/lib/auth/server.js.map +1 -0
  37. package/dist/lib/auth/token-utils.d.ts +59 -0
  38. package/dist/lib/auth/token-utils.d.ts.map +1 -0
  39. package/dist/lib/auth/token-utils.js +331 -0
  40. package/dist/lib/auth/token-utils.js.map +1 -0
  41. package/dist/lib/auth-rate-limit.d.ts +20 -0
  42. package/dist/lib/auth-rate-limit.d.ts.map +1 -0
  43. package/dist/lib/auth-rate-limit.js +91 -0
  44. package/dist/lib/auth-rate-limit.js.map +1 -0
  45. package/dist/lib/auto-update-checker.d.ts +10 -0
  46. package/dist/lib/auto-update-checker.d.ts.map +1 -0
  47. package/dist/lib/auto-update-checker.js +216 -0
  48. package/dist/lib/auto-update-checker.js.map +1 -0
  49. package/dist/lib/capability-policy.d.ts +18 -0
  50. package/dist/lib/capability-policy.d.ts.map +1 -0
  51. package/dist/lib/capability-policy.js +150 -0
  52. package/dist/lib/capability-policy.js.map +1 -0
  53. package/dist/lib/circuit-breaker.d.ts +34 -0
  54. package/dist/lib/circuit-breaker.d.ts.map +1 -0
  55. package/dist/lib/circuit-breaker.js +124 -0
  56. package/dist/lib/circuit-breaker.js.map +1 -0
  57. package/dist/lib/cli.d.ts +64 -0
  58. package/dist/lib/cli.d.ts.map +1 -0
  59. package/dist/lib/cli.js +274 -0
  60. package/dist/lib/cli.js.map +1 -0
  61. package/dist/lib/codex-cli/observability.d.ts +22 -0
  62. package/dist/lib/codex-cli/observability.d.ts.map +1 -0
  63. package/dist/lib/codex-cli/observability.js +36 -0
  64. package/dist/lib/codex-cli/observability.js.map +1 -0
  65. package/dist/lib/codex-cli/state.d.ts +86 -0
  66. package/dist/lib/codex-cli/state.d.ts.map +1 -0
  67. package/dist/lib/codex-cli/state.js +470 -0
  68. package/dist/lib/codex-cli/state.js.map +1 -0
  69. package/dist/lib/codex-cli/sync.d.ts +27 -0
  70. package/dist/lib/codex-cli/sync.d.ts.map +1 -0
  71. package/dist/lib/codex-cli/sync.js +325 -0
  72. package/dist/lib/codex-cli/sync.js.map +1 -0
  73. package/dist/lib/codex-cli/writer.d.ts +12 -0
  74. package/dist/lib/codex-cli/writer.d.ts.map +1 -0
  75. package/dist/lib/codex-cli/writer.js +388 -0
  76. package/dist/lib/codex-cli/writer.js.map +1 -0
  77. package/dist/lib/codex-manager.d.ts +2 -0
  78. package/dist/lib/codex-manager.d.ts.map +1 -0
  79. package/dist/lib/codex-manager.js +4841 -0
  80. package/dist/lib/codex-manager.js.map +1 -0
  81. package/dist/lib/config.d.ts +269 -0
  82. package/dist/lib/config.d.ts.map +1 -0
  83. package/dist/lib/config.js +789 -0
  84. package/dist/lib/config.js.map +1 -0
  85. package/dist/lib/constants.d.ts +78 -0
  86. package/dist/lib/constants.d.ts.map +1 -0
  87. package/dist/lib/constants.js +78 -0
  88. package/dist/lib/constants.js.map +1 -0
  89. package/dist/lib/context-overflow.d.ts +27 -0
  90. package/dist/lib/context-overflow.d.ts.map +1 -0
  91. package/dist/lib/context-overflow.js +124 -0
  92. package/dist/lib/context-overflow.js.map +1 -0
  93. package/dist/lib/dashboard-settings.d.ts +90 -0
  94. package/dist/lib/dashboard-settings.d.ts.map +1 -0
  95. package/dist/lib/dashboard-settings.js +327 -0
  96. package/dist/lib/dashboard-settings.js.map +1 -0
  97. package/dist/lib/entitlement-cache.d.ts +41 -0
  98. package/dist/lib/entitlement-cache.d.ts.map +1 -0
  99. package/dist/lib/entitlement-cache.js +137 -0
  100. package/dist/lib/entitlement-cache.js.map +1 -0
  101. package/dist/lib/errors.d.ts +113 -0
  102. package/dist/lib/errors.d.ts.map +1 -0
  103. package/dist/lib/errors.js +103 -0
  104. package/dist/lib/errors.js.map +1 -0
  105. package/dist/lib/forecast.d.ts +42 -0
  106. package/dist/lib/forecast.d.ts.map +1 -0
  107. package/dist/lib/forecast.js +256 -0
  108. package/dist/lib/forecast.js.map +1 -0
  109. package/dist/lib/health.d.ts +33 -0
  110. package/dist/lib/health.d.ts.map +1 -0
  111. package/dist/lib/health.js +70 -0
  112. package/dist/lib/health.js.map +1 -0
  113. package/dist/lib/index.d.ts +32 -0
  114. package/dist/lib/index.d.ts.map +1 -0
  115. package/dist/lib/index.js +32 -0
  116. package/dist/lib/index.js.map +1 -0
  117. package/dist/lib/live-account-sync.d.ts +39 -0
  118. package/dist/lib/live-account-sync.d.ts.map +1 -0
  119. package/dist/lib/live-account-sync.js +196 -0
  120. package/dist/lib/live-account-sync.js.map +1 -0
  121. package/dist/lib/logger.d.ts +40 -0
  122. package/dist/lib/logger.d.ts.map +1 -0
  123. package/dist/lib/logger.js +364 -0
  124. package/dist/lib/logger.js.map +1 -0
  125. package/dist/lib/oauth-success.html +338 -0
  126. package/dist/lib/parallel-probe.d.ts +28 -0
  127. package/dist/lib/parallel-probe.d.ts.map +1 -0
  128. package/dist/lib/parallel-probe.js +97 -0
  129. package/dist/lib/parallel-probe.js.map +1 -0
  130. package/dist/lib/preemptive-quota-scheduler.d.ts +53 -0
  131. package/dist/lib/preemptive-quota-scheduler.d.ts.map +1 -0
  132. package/dist/lib/preemptive-quota-scheduler.js +220 -0
  133. package/dist/lib/preemptive-quota-scheduler.js.map +1 -0
  134. package/dist/lib/proactive-refresh.d.ts +66 -0
  135. package/dist/lib/proactive-refresh.d.ts.map +1 -0
  136. package/dist/lib/proactive-refresh.js +143 -0
  137. package/dist/lib/proactive-refresh.js.map +1 -0
  138. package/dist/lib/prompts/codex-opencode-bridge.d.ts +19 -0
  139. package/dist/lib/prompts/codex-opencode-bridge.d.ts.map +1 -0
  140. package/dist/lib/prompts/codex-opencode-bridge.js +169 -0
  141. package/dist/lib/prompts/codex-opencode-bridge.js.map +1 -0
  142. package/dist/lib/prompts/codex.d.ts +41 -0
  143. package/dist/lib/prompts/codex.d.ts.map +1 -0
  144. package/dist/lib/prompts/codex.js +383 -0
  145. package/dist/lib/prompts/codex.js.map +1 -0
  146. package/dist/lib/prompts/opencode-codex.d.ts +25 -0
  147. package/dist/lib/prompts/opencode-codex.d.ts.map +1 -0
  148. package/dist/lib/prompts/opencode-codex.js +270 -0
  149. package/dist/lib/prompts/opencode-codex.js.map +1 -0
  150. package/dist/lib/quota-cache.d.ts +68 -0
  151. package/dist/lib/quota-cache.d.ts.map +1 -0
  152. package/dist/lib/quota-cache.js +224 -0
  153. package/dist/lib/quota-cache.js.map +1 -0
  154. package/dist/lib/quota-probe.d.ts +49 -0
  155. package/dist/lib/quota-probe.d.ts.map +1 -0
  156. package/dist/lib/quota-probe.js +368 -0
  157. package/dist/lib/quota-probe.js.map +1 -0
  158. package/dist/lib/recovery/constants.d.ts +12 -0
  159. package/dist/lib/recovery/constants.d.ts.map +1 -0
  160. package/dist/lib/recovery/constants.js +31 -0
  161. package/dist/lib/recovery/constants.js.map +1 -0
  162. package/dist/lib/recovery/index.d.ts +12 -0
  163. package/dist/lib/recovery/index.d.ts.map +1 -0
  164. package/dist/lib/recovery/index.js +12 -0
  165. package/dist/lib/recovery/index.js.map +1 -0
  166. package/dist/lib/recovery/storage.d.ts +24 -0
  167. package/dist/lib/recovery/storage.d.ts.map +1 -0
  168. package/dist/lib/recovery/storage.js +362 -0
  169. package/dist/lib/recovery/storage.js.map +1 -0
  170. package/dist/lib/recovery/types.d.ts +116 -0
  171. package/dist/lib/recovery/types.d.ts.map +1 -0
  172. package/dist/lib/recovery/types.js +7 -0
  173. package/dist/lib/recovery/types.js.map +1 -0
  174. package/dist/lib/recovery.d.ts +31 -0
  175. package/dist/lib/recovery.d.ts.map +1 -0
  176. package/dist/lib/recovery.js +313 -0
  177. package/dist/lib/recovery.js.map +1 -0
  178. package/dist/lib/refresh-guardian.d.ts +31 -0
  179. package/dist/lib/refresh-guardian.d.ts.map +1 -0
  180. package/dist/lib/refresh-guardian.js +151 -0
  181. package/dist/lib/refresh-guardian.js.map +1 -0
  182. package/dist/lib/refresh-lease.d.ts +37 -0
  183. package/dist/lib/refresh-lease.d.ts.map +1 -0
  184. package/dist/lib/refresh-lease.js +335 -0
  185. package/dist/lib/refresh-lease.js.map +1 -0
  186. package/dist/lib/refresh-queue.d.ts +117 -0
  187. package/dist/lib/refresh-queue.d.ts.map +1 -0
  188. package/dist/lib/refresh-queue.js +297 -0
  189. package/dist/lib/refresh-queue.js.map +1 -0
  190. package/dist/lib/request/failure-policy.d.ts +42 -0
  191. package/dist/lib/request/failure-policy.d.ts.map +1 -0
  192. package/dist/lib/request/failure-policy.js +133 -0
  193. package/dist/lib/request/failure-policy.js.map +1 -0
  194. package/dist/lib/request/fetch-helpers.d.ts +152 -0
  195. package/dist/lib/request/fetch-helpers.d.ts.map +1 -0
  196. package/dist/lib/request/fetch-helpers.js +704 -0
  197. package/dist/lib/request/fetch-helpers.js.map +1 -0
  198. package/dist/lib/request/helpers/input-utils.d.ts +7 -0
  199. package/dist/lib/request/helpers/input-utils.d.ts.map +1 -0
  200. package/dist/lib/request/helpers/input-utils.js +214 -0
  201. package/dist/lib/request/helpers/input-utils.js.map +1 -0
  202. package/dist/lib/request/helpers/model-map.d.ts +28 -0
  203. package/dist/lib/request/helpers/model-map.d.ts.map +1 -0
  204. package/dist/lib/request/helpers/model-map.js +133 -0
  205. package/dist/lib/request/helpers/model-map.js.map +1 -0
  206. package/dist/lib/request/helpers/tool-utils.d.ts +29 -0
  207. package/dist/lib/request/helpers/tool-utils.d.ts.map +1 -0
  208. package/dist/lib/request/helpers/tool-utils.js +117 -0
  209. package/dist/lib/request/helpers/tool-utils.js.map +1 -0
  210. package/dist/lib/request/rate-limit-backoff.d.ts +17 -0
  211. package/dist/lib/request/rate-limit-backoff.d.ts.map +1 -0
  212. package/dist/lib/request/rate-limit-backoff.js +83 -0
  213. package/dist/lib/request/rate-limit-backoff.js.map +1 -0
  214. package/dist/lib/request/request-transformer.d.ts +107 -0
  215. package/dist/lib/request/request-transformer.d.ts.map +1 -0
  216. package/dist/lib/request/request-transformer.js +814 -0
  217. package/dist/lib/request/request-transformer.js.map +1 -0
  218. package/dist/lib/request/response-handler.d.ts +23 -0
  219. package/dist/lib/request/response-handler.d.ts.map +1 -0
  220. package/dist/lib/request/response-handler.js +155 -0
  221. package/dist/lib/request/response-handler.js.map +1 -0
  222. package/dist/lib/request/stream-failover.d.ts +21 -0
  223. package/dist/lib/request/stream-failover.d.ts.map +1 -0
  224. package/dist/lib/request/stream-failover.js +204 -0
  225. package/dist/lib/request/stream-failover.js.map +1 -0
  226. package/dist/lib/rotation.d.ts +146 -0
  227. package/dist/lib/rotation.d.ts.map +1 -0
  228. package/dist/lib/rotation.js +321 -0
  229. package/dist/lib/rotation.js.map +1 -0
  230. package/dist/lib/runtime-paths.d.ts +58 -0
  231. package/dist/lib/runtime-paths.d.ts.map +1 -0
  232. package/dist/lib/runtime-paths.js +164 -0
  233. package/dist/lib/runtime-paths.js.map +1 -0
  234. package/dist/lib/schemas.d.ts +435 -0
  235. package/dist/lib/schemas.d.ts.map +1 -0
  236. package/dist/lib/schemas.js +268 -0
  237. package/dist/lib/schemas.js.map +1 -0
  238. package/dist/lib/session-affinity.d.ts +23 -0
  239. package/dist/lib/session-affinity.d.ts.map +1 -0
  240. package/dist/lib/session-affinity.js +127 -0
  241. package/dist/lib/session-affinity.js.map +1 -0
  242. package/dist/lib/shutdown.d.ts +7 -0
  243. package/dist/lib/shutdown.d.ts.map +1 -0
  244. package/dist/lib/shutdown.js +43 -0
  245. package/dist/lib/shutdown.js.map +1 -0
  246. package/dist/lib/storage/migrations.d.ts +59 -0
  247. package/dist/lib/storage/migrations.d.ts.map +1 -0
  248. package/dist/lib/storage/migrations.js +41 -0
  249. package/dist/lib/storage/migrations.js.map +1 -0
  250. package/dist/lib/storage/paths.d.ts +51 -0
  251. package/dist/lib/storage/paths.d.ts.map +1 -0
  252. package/dist/lib/storage/paths.js +152 -0
  253. package/dist/lib/storage/paths.js.map +1 -0
  254. package/dist/lib/storage.d.ts +106 -0
  255. package/dist/lib/storage.d.ts.map +1 -0
  256. package/dist/lib/storage.js +896 -0
  257. package/dist/lib/storage.js.map +1 -0
  258. package/dist/lib/table-formatter.d.ts +32 -0
  259. package/dist/lib/table-formatter.d.ts.map +1 -0
  260. package/dist/lib/table-formatter.js +44 -0
  261. package/dist/lib/table-formatter.js.map +1 -0
  262. package/dist/lib/tools/hashline-tools.d.ts +51 -0
  263. package/dist/lib/tools/hashline-tools.d.ts.map +1 -0
  264. package/dist/lib/tools/hashline-tools.js +456 -0
  265. package/dist/lib/tools/hashline-tools.js.map +1 -0
  266. package/dist/lib/types.d.ts +130 -0
  267. package/dist/lib/types.d.ts.map +1 -0
  268. package/dist/lib/types.js +2 -0
  269. package/dist/lib/types.js.map +1 -0
  270. package/dist/lib/ui/ansi.d.ts +40 -0
  271. package/dist/lib/ui/ansi.d.ts.map +1 -0
  272. package/dist/lib/ui/ansi.js +68 -0
  273. package/dist/lib/ui/ansi.js.map +1 -0
  274. package/dist/lib/ui/auth-menu.d.ts +76 -0
  275. package/dist/lib/ui/auth-menu.d.ts.map +1 -0
  276. package/dist/lib/ui/auth-menu.js +590 -0
  277. package/dist/lib/ui/auth-menu.js.map +1 -0
  278. package/dist/lib/ui/confirm.d.ts +11 -0
  279. package/dist/lib/ui/confirm.d.ts.map +1 -0
  280. package/dist/lib/ui/confirm.js +29 -0
  281. package/dist/lib/ui/confirm.js.map +1 -0
  282. package/dist/lib/ui/copy.d.ts +123 -0
  283. package/dist/lib/ui/copy.d.ts.map +1 -0
  284. package/dist/lib/ui/copy.js +127 -0
  285. package/dist/lib/ui/copy.js.map +1 -0
  286. package/dist/lib/ui/format.d.ts +62 -0
  287. package/dist/lib/ui/format.d.ts.map +1 -0
  288. package/dist/lib/ui/format.js +205 -0
  289. package/dist/lib/ui/format.js.map +1 -0
  290. package/dist/lib/ui/runtime.d.ts +43 -0
  291. package/dist/lib/ui/runtime.d.ts.map +1 -0
  292. package/dist/lib/ui/runtime.js +69 -0
  293. package/dist/lib/ui/runtime.js.map +1 -0
  294. package/dist/lib/ui/select.d.ts +60 -0
  295. package/dist/lib/ui/select.d.ts.map +1 -0
  296. package/dist/lib/ui/select.js +467 -0
  297. package/dist/lib/ui/select.js.map +1 -0
  298. package/dist/lib/ui/theme.d.ts +56 -0
  299. package/dist/lib/ui/theme.d.ts.map +1 -0
  300. package/dist/lib/ui/theme.js +186 -0
  301. package/dist/lib/ui/theme.js.map +1 -0
  302. package/dist/lib/unified-settings.d.ts +71 -0
  303. package/dist/lib/unified-settings.d.ts.map +1 -0
  304. package/dist/lib/unified-settings.js +299 -0
  305. package/dist/lib/unified-settings.js.map +1 -0
  306. package/dist/lib/utils.d.ts +29 -0
  307. package/dist/lib/utils.d.ts.map +1 -0
  308. package/dist/lib/utils.js +54 -0
  309. package/dist/lib/utils.js.map +1 -0
  310. package/package.json +115 -0
  311. package/scripts/audit-dev-allowlist.js +128 -0
  312. package/scripts/bench-format/hashline-v2.mjs +642 -0
  313. package/scripts/bench-format/models.mjs +105 -0
  314. package/scripts/bench-format/opencode.mjs +205 -0
  315. package/scripts/bench-format/render.mjs +496 -0
  316. package/scripts/bench-format/stats.mjs +54 -0
  317. package/scripts/bench-format/tasks.mjs +151 -0
  318. package/scripts/benchmark-edit-formats.mjs +1161 -0
  319. package/scripts/benchmark-render-dashboard.mjs +49 -0
  320. package/scripts/codex-multi-auth.js +6 -0
  321. package/scripts/codex-routing.js +34 -0
  322. package/scripts/codex.js +122 -0
  323. package/scripts/copy-oauth-success.js +37 -0
  324. package/scripts/install-opencode-codex-auth.js +193 -0
  325. package/scripts/test-all-models.sh +7 -0
  326. package/scripts/test-model-matrix.js +424 -0
  327. package/scripts/validate-model-map.sh +7 -0
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Consolidated utility functions for the Codex plugin.
3
+ * Extracted from various modules to eliminate duplication.
4
+ */
5
+ /**
6
+ * Type guard for plain objects (not arrays, not null).
7
+ * @param value - The value to check
8
+ * @returns True if value is a plain object
9
+ */
10
+ export declare function isRecord(value: unknown): value is Record<string, unknown>;
11
+ /**
12
+ * Returns the current timestamp in milliseconds.
13
+ * Wrapper for Date.now() to enable testing with mocked time.
14
+ * @returns Current time in milliseconds since epoch
15
+ */
16
+ export declare function nowMs(): number;
17
+ /**
18
+ * Safely converts any value to a string representation.
19
+ * @param value - The value to convert
20
+ * @returns String representation of the value
21
+ */
22
+ export declare function toStringValue(value: unknown): string;
23
+ /**
24
+ * Promisified setTimeout for async/await usage.
25
+ * @param ms - Milliseconds to sleep
26
+ * @returns Promise that resolves after the specified time
27
+ */
28
+ export declare function sleep(ms: number): Promise<void>;
29
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../lib/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED;;;;GAIG;AACH,wBAAgB,KAAK,IAAI,MAAM,CAE9B;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAkBpD;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Consolidated utility functions for the Codex plugin.
3
+ * Extracted from various modules to eliminate duplication.
4
+ */
5
+ /**
6
+ * Type guard for plain objects (not arrays, not null).
7
+ * @param value - The value to check
8
+ * @returns True if value is a plain object
9
+ */
10
+ export function isRecord(value) {
11
+ return typeof value === "object" && value !== null && !Array.isArray(value);
12
+ }
13
+ /**
14
+ * Returns the current timestamp in milliseconds.
15
+ * Wrapper for Date.now() to enable testing with mocked time.
16
+ * @returns Current time in milliseconds since epoch
17
+ */
18
+ export function nowMs() {
19
+ return Date.now();
20
+ }
21
+ /**
22
+ * Safely converts any value to a string representation.
23
+ * @param value - The value to convert
24
+ * @returns String representation of the value
25
+ */
26
+ export function toStringValue(value) {
27
+ if (typeof value === "string") {
28
+ return value;
29
+ }
30
+ if (value === null) {
31
+ return "null";
32
+ }
33
+ if (value === undefined) {
34
+ return "undefined";
35
+ }
36
+ if (typeof value === "object") {
37
+ try {
38
+ return JSON.stringify(value);
39
+ }
40
+ catch {
41
+ return String(value);
42
+ }
43
+ }
44
+ return String(value);
45
+ }
46
+ /**
47
+ * Promisified setTimeout for async/await usage.
48
+ * @param ms - Milliseconds to sleep
49
+ * @returns Promise that resolves after the specified time
50
+ */
51
+ export function sleep(ms) {
52
+ return new Promise((resolve) => setTimeout(resolve, ms));
53
+ }
54
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../lib/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAc;IACtC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC7E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,KAAK;IACpB,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc;IAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC;IACd,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO,MAAM,CAAC;IACf,CAAC;IACD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,WAAW,CAAC;IACpB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC;YACJ,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACF,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,KAAK,CAAC,EAAU;IAC/B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC1D,CAAC"}
package/package.json ADDED
@@ -0,0 +1,115 @@
1
+ {
2
+ "name": "codex-multi-auth",
3
+ "version": "0.1.0",
4
+ "description": "Codex CLI-first multi-account OAuth rotation plugin for OpenCode",
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/codex-multi-auth.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
+ "multi-account"
26
+ ],
27
+ "homepage": "https://github.com/ndycode/codex-multi-auth#readme",
28
+ "bugs": {
29
+ "url": "https://github.com/ndycode/codex-multi-auth/issues"
30
+ },
31
+ "scripts": {
32
+ "build": "tsc && node scripts/copy-oauth-success.js",
33
+ "typecheck": "tsc --noEmit",
34
+ "lint": "npm run lint:ts && npm run lint:scripts",
35
+ "lint:ts": "eslint . --ext .ts",
36
+ "lint:scripts": "eslint scripts --ext .js",
37
+ "lint:fix": "npm run lint:ts:fix && npm run lint:scripts:fix",
38
+ "lint:ts:fix": "eslint . --ext .ts --fix",
39
+ "lint:scripts:fix": "eslint scripts --ext .js --fix",
40
+ "test": "vitest run",
41
+ "test:watch": "vitest",
42
+ "test:ui": "vitest --ui",
43
+ "test:model-matrix": "node scripts/test-model-matrix.js",
44
+ "test:model-matrix:smoke": "node scripts/test-model-matrix.js --smoke",
45
+ "test:model-matrix:report": "node scripts/test-model-matrix.js --smoke --report-json=.tmp/model-matrix-report.json",
46
+ "bench:edit-formats": "node scripts/benchmark-edit-formats.mjs --preset=codex-core",
47
+ "bench:edit-formats:smoke": "node scripts/benchmark-edit-formats.mjs --smoke --preset=codex-core",
48
+ "bench:edit-formats:render": "node scripts/benchmark-render-dashboard.mjs",
49
+ "test:coverage": "vitest run --coverage",
50
+ "coverage": "vitest run --coverage",
51
+ "audit:prod": "npm audit --omit=dev --audit-level=high",
52
+ "audit:all": "npm audit --audit-level=high",
53
+ "audit:dev:allowlist": "node scripts/audit-dev-allowlist.js",
54
+ "audit:ci": "npm run audit:prod && npm run audit:dev:allowlist",
55
+ "prepublishOnly": "npm run build",
56
+ "prepare": "husky"
57
+ },
58
+ "bin": {
59
+ "codex": "scripts/codex.js",
60
+ "codex-multi-auth": "scripts/codex-multi-auth.js",
61
+ "codex-multi-auth-opencode-install": "scripts/install-opencode-codex-auth.js"
62
+ },
63
+ "files": [
64
+ "dist/",
65
+ "assets/",
66
+ "config/",
67
+ "scripts/",
68
+ "README.md",
69
+ "LICENSE"
70
+ ],
71
+ "lint-staged": {
72
+ "*.ts": [
73
+ "eslint --max-warnings=0 --fix --no-warn-ignored"
74
+ ],
75
+ "scripts/**/*.js": [
76
+ "eslint --max-warnings=0 --fix --no-warn-ignored"
77
+ ]
78
+ },
79
+ "engines": {
80
+ "node": ">=18.0.0"
81
+ },
82
+ "peerDependencies": {
83
+ "typescript": "^5"
84
+ },
85
+ "devDependencies": {
86
+ "@fast-check/vitest": "^0.2.4",
87
+ "@opencode-ai/sdk": "^1.2.10",
88
+ "@types/node": "^25.3.0",
89
+ "@typescript-eslint/eslint-plugin": "^8.56.0",
90
+ "@typescript-eslint/parser": "^8.56.0",
91
+ "@vitest/coverage-v8": "^4.0.18",
92
+ "@vitest/ui": "^4.0.18",
93
+ "eslint": "^10.0.0",
94
+ "fast-check": "^4.5.3",
95
+ "husky": "^9.1.7",
96
+ "lint-staged": "^16.2.7",
97
+ "typescript": "^5.9.3",
98
+ "typescript-language-server": "^5.1.3",
99
+ "vitest": "^4.0.18"
100
+ },
101
+ "dependencies": {
102
+ "@openauthjs/openauth": "^0.4.3",
103
+ "@opencode-ai/plugin": "^1.2.10",
104
+ "hono": "^4.12.0",
105
+ "zod": "^4.3.6"
106
+ },
107
+ "overrides": {
108
+ "hono": "^4.12.0",
109
+ "vite": "^7.3.1",
110
+ "@typescript-eslint/typescript-estree": {
111
+ "minimatch": "^9.0.5"
112
+ }
113
+ }
114
+ }
115
+
@@ -0,0 +1,128 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { spawnSync } from "node:child_process";
4
+
5
+ const ALLOWED_HIGH_OR_CRITICAL_PACKAGES = new Set([
6
+ "eslint",
7
+ "ajv",
8
+ "@eslint-community/eslint-utils",
9
+ "@typescript-eslint/eslint-plugin",
10
+ "@typescript-eslint/parser",
11
+ "@typescript-eslint/type-utils",
12
+ "@typescript-eslint/typescript-estree",
13
+ "@typescript-eslint/utils",
14
+ "minimatch",
15
+ ]);
16
+
17
+ function summarizeVia(via) {
18
+ if (!Array.isArray(via)) return [];
19
+ return via
20
+ .map((item) => {
21
+ if (typeof item === "string") return item;
22
+ if (!item || typeof item !== "object") return "unknown";
23
+ const name = typeof item.name === "string" ? item.name : "unknown";
24
+ const range = typeof item.range === "string" ? item.range : "";
25
+ return range ? `${name}:${range}` : name;
26
+ })
27
+ .slice(0, 5);
28
+ }
29
+
30
+ const isWindows = process.platform === "win32";
31
+ const command = isWindows ? process.env.ComSpec || "cmd.exe" : "npm";
32
+ const commandArgs = isWindows
33
+ ? ["/d", "/s", "/c", "npm audit --json"]
34
+ : ["audit", "--json"];
35
+ const audit = spawnSync(command, commandArgs, {
36
+ encoding: "utf8",
37
+ stdio: ["ignore", "pipe", "pipe"],
38
+ env: {
39
+ ...process.env,
40
+ // npm run -s can suppress child npm JSON output; force a readable level.
41
+ npm_config_loglevel:
42
+ process.env.npm_config_loglevel === "silent"
43
+ ? "notice"
44
+ : process.env.npm_config_loglevel || "notice",
45
+ },
46
+ });
47
+
48
+ const stdout = (audit.stdout ?? "").trim();
49
+ const stderr = (audit.stderr ?? "").trim();
50
+ const combined = [stdout, stderr].filter(Boolean).join("\n");
51
+
52
+ if (!combined) {
53
+ if ((audit.status ?? 1) === 0) {
54
+ console.log("No vulnerabilities found in npm audit output.");
55
+ process.exit(0);
56
+ }
57
+ console.error("Failed to read npm audit output.");
58
+ process.exit(1);
59
+ }
60
+
61
+ // npm can emit human-readable success text (no JSON) on some versions/configs.
62
+ if (!combined.includes("{") && /found 0 vulnerabilities/i.test(combined)) {
63
+ console.log("No vulnerabilities found in npm audit output.");
64
+ process.exit(0);
65
+ }
66
+
67
+ let auditJson;
68
+ try {
69
+ const jsonCandidate =
70
+ (stdout.startsWith("{") ? stdout : "") ||
71
+ (stderr.startsWith("{") ? stderr : "") ||
72
+ combined.slice(combined.indexOf("{"));
73
+ auditJson = JSON.parse(jsonCandidate.replace(/^\uFEFF/, ""));
74
+ } catch (error) {
75
+ console.error("Failed to parse npm audit JSON output.");
76
+ if (stderr) {
77
+ console.error(stderr);
78
+ }
79
+ console.error(error instanceof Error ? error.message : String(error));
80
+ process.exit(1);
81
+ }
82
+
83
+ const vulnerabilities =
84
+ auditJson && typeof auditJson === "object" && auditJson.vulnerabilities && typeof auditJson.vulnerabilities === "object"
85
+ ? auditJson.vulnerabilities
86
+ : {};
87
+
88
+ const unexpected = [];
89
+ const allowlisted = [];
90
+
91
+ for (const [name, details] of Object.entries(vulnerabilities)) {
92
+ if (!details || typeof details !== "object") continue;
93
+ const severity = typeof details.severity === "string" ? details.severity : "unknown";
94
+ if (severity !== "high" && severity !== "critical") continue;
95
+
96
+ const entry = {
97
+ name,
98
+ severity,
99
+ via: summarizeVia(details.via),
100
+ fixAvailable: details.fixAvailable ?? false,
101
+ };
102
+
103
+ if (ALLOWED_HIGH_OR_CRITICAL_PACKAGES.has(name)) {
104
+ allowlisted.push(entry);
105
+ continue;
106
+ }
107
+ unexpected.push(entry);
108
+ }
109
+
110
+ if (unexpected.length > 0) {
111
+ console.error("Unexpected high/critical vulnerabilities detected in dev dependency audit:");
112
+ for (const entry of unexpected) {
113
+ console.error(
114
+ `- ${entry.name} (${entry.severity}) via ${entry.via.join(", ") || "unknown"} fixAvailable=${String(entry.fixAvailable)}`,
115
+ );
116
+ }
117
+ process.exit(1);
118
+ }
119
+
120
+ if (allowlisted.length > 0) {
121
+ console.warn("Allowlisted high/critical dev vulnerabilities detected:");
122
+ for (const entry of allowlisted) {
123
+ console.warn(
124
+ `- ${entry.name} (${entry.severity}) via ${entry.via.join(", ") || "unknown"} fixAvailable=${String(entry.fixAvailable)}`,
125
+ );
126
+ }
127
+ console.warn("No unexpected high/critical vulnerabilities found.");
128
+ }