{"_id":"@bluboks/langchain-codex-oauth-js","name":"@bluboks/langchain-codex-oauth-js","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@bluboks/langchain-codex-oauth-js","version":"0.1.0","description":"Unofficial LangChain JS chat model for OpenAI Codex OAuth in Node.js and TypeScript","license":"MIT","repository":{"type":"git","url":"git+https://github.com/Bluboks/langchain-codex-oauth-js.git"},"homepage":"https://github.com/Bluboks/langchain-codex-oauth-js#readme","bugs":{"url":"https://github.com/Bluboks/langchain-codex-oauth-js/issues"},"keywords":["langchain","langchainjs","langchain-js","codex","openai-codex","oauth","openai","chatgpt","oauth2","pkce","chat-model","responses-api","llm","typescript","node","nodejs"],"type":"module","main":"dist/index.js","types":"dist/index.d.ts","sideEffects":false,"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"build":"tsc -p tsconfig.json","test":"vitest run","smoke":"tsx examples/smoke-test.ts"},"engines":{"node":">=20"},"publishConfig":{"access":"public"},"peerDependencies":{"@langchain/core":"^0.3.0"},"devDependencies":{"@langchain/core":"^0.3.0","@types/node":"^24.0.0","tsx":"^4.19.0","typescript":"^5.8.0","vitest":"^3.2.0"},"gitHead":"1469576dd19db224cd5dd4e915adb657c4a576af","_id":"@bluboks/langchain-codex-oauth-js@0.1.0","_nodeVersion":"24.13.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-wRgzRxZI6D8aZqbl8TdO9KIrIcGHGNJhzltMfsXY9heg34XDG1kbLirQMgl0zqAu/bXaR4mV4TPtas5MGam08w==","shasum":"b853990cd930c60199d8ac0d9db716286cf421fa","tarball":"https://registry.npmjs.org/@bluboks/langchain-codex-oauth-js/-/langchain-codex-oauth-js-0.1.0.tgz","fileCount":17,"unpackedSize":56680,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDMnBEARNX0Qn7MJ5NBnSOBYIoJ6dxAhbzdS4TMe2HK9AIhAMlZfHVzM6Bv4s1fq54NMVdn5fcDoBlxS9LoJQvngUPQ"}]},"_npmUser":{"name":"bluboks","email":"t831@naver.com"},"directories":{},"maintainers":[{"name":"bluboks","email":"t831@naver.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/langchain-codex-oauth-js_0.1.0_1772899664519_0.5978531591209049"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-07T16:07:44.405Z","0.1.0":"2026-03-07T16:07:44.665Z","modified":"2026-03-07T16:07:44.901Z"},"maintainers":[{"name":"bluboks","email":"t831@naver.com"}],"description":"Unofficial LangChain JS chat model for OpenAI Codex OAuth in Node.js and TypeScript","homepage":"https://github.com/Bluboks/langchain-codex-oauth-js#readme","keywords":["langchain","langchainjs","langchain-js","codex","openai-codex","oauth","openai","chatgpt","oauth2","pkce","chat-model","responses-api","llm","typescript","node","nodejs"],"repository":{"type":"git","url":"git+https://github.com/Bluboks/langchain-codex-oauth-js.git"},"bugs":{"url":"https://github.com/Bluboks/langchain-codex-oauth-js/issues"},"license":"MIT","readme":"# `@bluboks/langchain-codex-oauth-js`\n\nCommunity-maintained LangChain JS chat model for OpenAI Codex OAuth in Node.js and TypeScript.\n\nThis package provides a LangChain `BaseChatModel` implementation for Node.js and TypeScript projects that want to authenticate with OpenAI Codex via OAuth, reuse stored tokens, list available models, and send chat requests through LangChain.\n\nThis is not an official OpenAI or LangChain package.\n\n## Features\n\n- OAuth PKCE login flow with automatic browser launch or manual copy/paste login.\n- Token persistence and refresh support for repeat usage.\n- LangChain-compatible chat model with streaming support.\n- Model catalog helpers for discovering available Codex models.\n- Node.js-first defaults, including WSL-friendly browser launching.\n\n## Requirements\n\n- Node.js 20 or newer.\n- A project that already uses `@langchain/core`.\n\n## Install\n\n```bash\nnpm install @bluboks/langchain-codex-oauth-js @langchain/core\n```\n\n## Quick Start\n\n```ts\nimport { CodexOAuthChat } from \"@bluboks/langchain-codex-oauth-js\";\n\nconst llm = new CodexOAuthChat({\n  modelName: \"gpt-5.4\",\n  autoAuth: false,\n});\n\nconst loginUrl = await llm.startLogin({ openBrowser: false });\nconsole.log(\"Open this URL and approve access:\", loginUrl);\n\nawait llm.completeLogin();\n\nconst message = await llm.invoke(\"Write one sentence about TypeScript.\");\nconsole.log(message.content);\n```\n\nBy default, tokens are stored at `~/.langchain_codex_oauth/token.json` and reused on later runs.\n\n## Automatic Authentication\n\nIf you want the package to open the browser on demand when no valid token is available, leave `autoAuth` enabled.\n\n```ts\nimport { CodexOAuthChat } from \"@bluboks/langchain-codex-oauth-js\";\n\nconst llm = new CodexOAuthChat({\n  modelName: \"gpt-5.4\",\n});\n\nconst message = await llm.invoke(\"Summarize the benefits of strong typing.\");\nconsole.log(message.content);\n```\n\n## Manual Login Flow\n\nUse manual login when you do not want the package to launch a browser automatically.\n\n```ts\nimport { CodexOAuthChat } from \"@bluboks/langchain-codex-oauth-js\";\n\nconst llm = new CodexOAuthChat({ autoAuth: false });\n\nconst loginUrl = await llm.startLogin({ openBrowser: false });\nconsole.log(loginUrl);\n\nawait llm.completeLogin();\n```\n\n## List Available Models\n\n```ts\nimport { CodexOAuthChat } from \"@bluboks/langchain-codex-oauth-js\";\n\nconst llm = new CodexOAuthChat();\nconst models = await llm.listModels({ visibleOnly: true });\n\nconsole.log(models.map((model) => model.slug));\n```\n\n## Common Configuration\n\nYou can configure the client either through constructor fields or environment variables.\n\n| Purpose | Constructor field | Environment variable | Default |\n| --- | --- | --- | --- |\n| Model name | `modelName` | `CODEX_MODEL` | `gpt-5.4` |\n| Codex responses endpoint | `apiUrl` | `CODEX_API_URL` | `https://chatgpt.com/backend-api/codex/responses` |\n| Codex models endpoint | `modelsUrl` | `CODEX_MODELS_URL` | Derived from `apiUrl` |\n| Token file path | `tokenPath` | `CODEX_TOKEN_PATH` | `~/.langchain_codex_oauth/token.json` |\n| OAuth client id | `clientId` | `OPENAI_OAUTH_CLIENT_ID` | Built-in public default |\n| OAuth authorize URL | `authUrl` | `OPENAI_OAUTH_AUTHORIZE_URL` | `https://auth.openai.com/oauth/authorize` |\n| OAuth token URL | `tokenUrl` | `OPENAI_OAUTH_TOKEN_URL` | `https://auth.openai.com/oauth/token` |\n| OAuth scopes | `scopes` | `OPENAI_OAUTH_SCOPES` | Built-in Codex scopes |\n| Browser auto-open | `openBrowser` | - | `true` |\n| Automatic login fallback | `autoAuth` | - | `true` |\n\nAdditional OAuth query parameters can be supplied with `authorizeExtraParams`, or through `OPENAI_OAUTH_ORIGINATOR` and `OPENAI_OAUTH_ALLOWED_WORKSPACE_ID`.\n\n## WSL Notes\n\n- Browser auto-open is best effort and tries `wslview`, `explorer.exe`, `powershell.exe`, and `cmd.exe` before generic Linux launchers.\n- If browser integration is unreliable in your environment, prefer `startLogin({ openBrowser: false })` and open the URL yourself.\n\n## Local Development\n\n```bash\nnpm install\nnpm run build\nnpm test\nnpm run smoke -- --manual\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md","_rev":"1-057e2679727d24ff9ec2c652bf25f72b"}