pleumrouter 0.5.15 → 0.5.16
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 +1 -1
- package/package.json +1 -1
- package/src/config.mjs +8 -1
- package/src/login.mjs +2 -2
package/README.md
CHANGED
|
@@ -80,7 +80,7 @@ env(또는 격리된 `CODEX_HOME`/임시 설정 문자열)만 세팅하고 바
|
|
|
80
80
|
|
|
81
81
|
## 환경변수
|
|
82
82
|
|
|
83
|
-
- `PLEUM_BASE_URL` — 게이트웨이 루트 덮어쓰기(기본 `https://router.pleum.ai`). 셀프호스트/스테이징용.
|
|
83
|
+
- `PLEUM_BASE_URL` — 게이트웨이 루트 덮어쓰기(API 호출용 기본 `https://apirouter.pleum.ai`, 브라우저 로그인 URL용 기본 `https://router.pleum.ai` 둘 다에 적용됨). 셀프호스트/스테이징용.
|
|
84
84
|
|
|
85
85
|
## 개발
|
|
86
86
|
|
package/package.json
CHANGED
package/src/config.mjs
CHANGED
|
@@ -6,11 +6,18 @@ import { t } from "./i18n.mjs";
|
|
|
6
6
|
// 공개 게이트웨이 루트(canonical API). /v1/* 를 Next.js Route Handler 가 프록시하는
|
|
7
7
|
// router.pleum.ai 와 달리, 이 도메인은 백엔드에 직접 붙는다 — /v1beta/* (Gemini native)
|
|
8
8
|
// 경로도 라우팅된다. 셀프호스트/스테이징은 PLEUM_BASE_URL로 덮어쓴다.
|
|
9
|
-
|
|
9
|
+
const overrideBase = process.env.PLEUM_BASE_URL;
|
|
10
|
+
export const ROOT = (overrideBase ?? "https://apirouter.pleum.ai")
|
|
10
11
|
.replace(/\/+$/, "")
|
|
11
12
|
.replace(/\/v1$/, ""); // 사용자가 실수로 /v1까지 붙여도 V1이 /v1/v1 이중 경로가 되지 않게 정리(L12)
|
|
12
13
|
// OpenAI 호환 엔드포인트는 /v1. (Claude Code만 루트를 쓴다 — recipes 참고)
|
|
13
14
|
export const V1 = `${ROOT}/v1`;
|
|
15
|
+
// 브라우저가 여는 /cli-auth 는 Next.js 프론트 도메인에만 존재한다 — API 도메인(ROOT)과 분리해야
|
|
16
|
+
// 한다(과거 ROOT를 공유해서 쓰다가 apirouter로 기본값이 바뀌며 로그인이 깨진 적 있음).
|
|
17
|
+
// 셀프호스트(PLEUM_BASE_URL 지정)는 같은 도메인이 프론트도 서빙한다고 가정해 ROOT를 재사용한다.
|
|
18
|
+
export const SITE_ROOT = (overrideBase ?? "https://router.pleum.ai")
|
|
19
|
+
.replace(/\/+$/, "")
|
|
20
|
+
.replace(/\/v1$/, "");
|
|
14
21
|
|
|
15
22
|
const DIR = join(homedir(), ".pleum");
|
|
16
23
|
const FILE = join(DIR, "config.json");
|
package/src/login.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createServer } from "node:http";
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
3
|
import { spawn } from "node:child_process";
|
|
4
|
-
import { ROOT, V1, readConfig, writeConfig, mergeLoginConfig } from "./config.mjs";
|
|
4
|
+
import { ROOT, SITE_ROOT, V1, readConfig, writeConfig, mergeLoginConfig } from "./config.mjs";
|
|
5
5
|
import { t } from "./i18n.mjs";
|
|
6
6
|
import { sanitizeTerminalText } from "./ansi.mjs";
|
|
7
7
|
|
|
@@ -92,7 +92,7 @@ export async function login() {
|
|
|
92
92
|
server.on("error", reject);
|
|
93
93
|
server.listen(0, "127.0.0.1", () => {
|
|
94
94
|
const { port } = server.address();
|
|
95
|
-
const authUrl = `${
|
|
95
|
+
const authUrl = `${SITE_ROOT}/cli-auth?port=${port}&state=${state}`;
|
|
96
96
|
console.log(`${t("Log in from your browser. If it doesn't open automatically, open this URL:")}\n ${sanitizeTerminalText(authUrl)}\n`);
|
|
97
97
|
openBrowser(authUrl);
|
|
98
98
|
});
|