useclaudeproxy 1.0.0 → 1.1.1
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 +34 -11
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +5 -28
- package/dist/app.js.map +1 -1
- package/dist/config.d.ts +0 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +0 -5
- package/dist/config.js.map +1 -1
- package/dist/index.js +2 -7
- package/dist/index.js.map +1 -1
- package/dist/install-cli-proxy.d.ts +1 -0
- package/dist/install-cli-proxy.d.ts.map +1 -1
- package/dist/install-cli-proxy.js +5 -6
- package/dist/install-cli-proxy.js.map +1 -1
- package/dist/providers/hermes.d.ts +11 -2
- package/dist/providers/hermes.d.ts.map +1 -1
- package/dist/providers/hermes.js +63 -5
- package/dist/providers/hermes.js.map +1 -1
- package/dist/providers/types.d.ts +3 -3
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/types.d.ts +0 -26
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -16
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -27,24 +27,47 @@ npm link # exposes `useclaudeproxy` on your PATH
|
|
|
27
27
|
|
|
28
28
|
After linking you can run `useclaudeproxy` from anywhere.
|
|
29
29
|
|
|
30
|
+
## Run without installing (npx)
|
|
31
|
+
|
|
32
|
+
You can also run it directly from npm without cloning — published as
|
|
33
|
+
[`useclaudeproxy`](https://npmjs.com/package/useclaudeproxy):
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
npx useclaudeproxy --model stealth/ox-alpha
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
⚠️ **Use a fixed working directory.** Tokens and config persist in the
|
|
40
|
+
current directory (default `data/` and `tools/config.yaml`). Each `npx`
|
|
41
|
+
invocation starts from wherever you ran it, so to reuse your saved login next
|
|
42
|
+
time, run it from the **same directory** every time. To keep data elsewhere,
|
|
43
|
+
pass `--data-dir`.
|
|
44
|
+
|
|
30
45
|
## How it works
|
|
31
46
|
|
|
32
47
|
```
|
|
33
48
|
useclaudeproxy --model <model>
|
|
34
49
|
│
|
|
35
|
-
├─
|
|
36
|
-
├─
|
|
37
|
-
│
|
|
38
|
-
│
|
|
39
|
-
├─
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
50
|
+
├─ app() (src/app.ts) — high-level orchestrator, provider-agnostic
|
|
51
|
+
│ ├─ getProvider(--provider) resolve hermes (default)
|
|
52
|
+
│ ├─ --renew → provider.clearStoredToken()
|
|
53
|
+
│ ├─ provider.getValidToken() delegate auth to the provider
|
|
54
|
+
│ ├─ setProxyUrl() apply --proxy to tools/config.yaml
|
|
55
|
+
│ └─ runCliProxy() spawn cli-proxy-api -config tools/config.yaml
|
|
56
|
+
│ + provider.startTokenWatcher() validate + renew token while running
|
|
57
|
+
│
|
|
58
|
+
└─ HermesProvider owns the full token lifecycle (src/providers/hermes.ts)
|
|
59
|
+
├─ readStoredToken() ─► fetchAccountInfo() validate stored token
|
|
60
|
+
├─ refreshToken() renew when refresh token valid
|
|
61
|
+
├─ requestDeviceCode()/pollForToken() re-authenticate via device flow
|
|
62
|
+
└─ saveTokens() persist (mode 0o600) at data/hermes-tokens.json
|
|
43
63
|
```
|
|
44
64
|
|
|
45
|
-
Tokens are persisted
|
|
46
|
-
|
|
47
|
-
|
|
65
|
+
Tokens are persisted inside the provider's own file — Hermes uses
|
|
66
|
+
`data/hermes-tokens.json` (mode `0o600`). The token path is **provider-specific**,
|
|
67
|
+
not a shared global: a future provider can use a completely different location or
|
|
68
|
+
format without affecting others. On every refresh the provider token is
|
|
69
|
+
re-injected into `tools/config.yaml` so the proxy keeps working without manual
|
|
70
|
+
re-entry.
|
|
48
71
|
|
|
49
72
|
## Requirements
|
|
50
73
|
|
package/dist/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AASA,wBAAsB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAkBzC"}
|
package/dist/app.js
CHANGED
|
@@ -1,47 +1,24 @@
|
|
|
1
1
|
import Debug from "debug";
|
|
2
|
-
import fs from "node:fs";
|
|
3
2
|
import { args } from "./args.js";
|
|
4
3
|
import { setProxyUrl } from "./config-yaml.js";
|
|
5
|
-
import { TOKENS_PATH, WATCH_INTERVAL_MS } from "./config.js";
|
|
6
|
-
import { ensureCliProxy } from "./install-cli-proxy.js";
|
|
7
4
|
import { getProvider } from "./providers/index.js";
|
|
8
5
|
import { runCliProxy } from "./run-cli-proxy.js";
|
|
9
6
|
const log = Debug("useclaudeproxy:oauth");
|
|
10
7
|
const errorLog = Debug("useclaudeproxy:oauth:error");
|
|
11
|
-
function sleep(ms) {
|
|
12
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
13
|
-
}
|
|
14
|
-
// Clear the stored token so the next getValidToken() re-runs the device flow.
|
|
15
|
-
function clearStoredToken() {
|
|
16
|
-
if (fs.existsSync(TOKENS_PATH)) {
|
|
17
|
-
fs.rmSync(TOKENS_PATH, { force: true });
|
|
18
|
-
log("--renew: cleared stored token");
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
8
|
export async function app() {
|
|
22
9
|
const provider = getProvider(args.activeProvider);
|
|
23
|
-
|
|
24
|
-
await ensureCliProxy();
|
|
25
|
-
// if (args.renew) clearStoredToken();
|
|
26
|
-
const token = await provider.getValidToken();
|
|
27
|
-
const account = await provider.getAccountInfo(token.access_token);
|
|
28
|
-
log("Account Information:\n" + JSON.stringify(account, null, 2));
|
|
10
|
+
await provider.getValidToken();
|
|
29
11
|
setProxyUrl(args.proxy);
|
|
30
12
|
runCliProxy()
|
|
31
13
|
.then((code) => process.exit(code))
|
|
32
14
|
.catch((err) => {
|
|
33
15
|
errorLog("Failed to run CLIProxyAPI: %o", err);
|
|
34
|
-
console.error(err);
|
|
35
16
|
process.exit(1);
|
|
36
17
|
});
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
await sleep(WATCH_INTERVAL_MS);
|
|
41
|
-
const refreshed = await provider.getValidToken();
|
|
42
|
-
const renewed = refreshed.access_token !== current;
|
|
43
|
-
current = refreshed.access_token;
|
|
44
|
-
log(`Token ${renewed ? "RENEWED" : "valid"} (expires_in=${refreshed.expires_in})`);
|
|
18
|
+
const shutdown = new AbortController();
|
|
19
|
+
for (const sig of ["SIGINT", "SIGTERM"]) {
|
|
20
|
+
process.on(sig, () => shutdown.abort());
|
|
45
21
|
}
|
|
22
|
+
await provider.startTokenWatcher(shutdown.signal);
|
|
46
23
|
}
|
|
47
24
|
//# sourceMappingURL=app.js.map
|
package/dist/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAiB,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,GAAG,GAAG,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAC1C,MAAM,QAAQ,GAAG,KAAK,CAAC,4BAA4B,CAAC,CAAC;AAErD,MAAM,CAAC,KAAK,UAAU,GAAG;IACvB,MAAM,QAAQ,GAAa,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAE5D,MAAM,QAAQ,CAAC,aAAa,EAAE,CAAC;IAE/B,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxB,WAAW,EAAE;SACV,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAClC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACb,QAAQ,CAAC,+BAA+B,EAAE,GAAG,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEL,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;IACvC,KAAK,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAU,EAAE,CAAC;QACjD,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACpD,CAAC"}
|
package/dist/config.d.ts
CHANGED
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAyBA,eAAO,MAAM,MAAM;;;;EAAgC,CAAC;AACpD,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC"}
|
package/dist/config.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
|
-
import path from "node:path";
|
|
3
2
|
import { z } from "zod";
|
|
4
3
|
import { args } from "./args.js";
|
|
5
4
|
// All config is supplied via CLI flags (see args.ts). Validated with zod and
|
|
@@ -22,8 +21,4 @@ if (!parsedEnv.success) {
|
|
|
22
21
|
}
|
|
23
22
|
export const config = Object.freeze(parsedEnv.data);
|
|
24
23
|
fs.mkdirSync(config.DATA_DIR, { recursive: true });
|
|
25
|
-
// Shared token-storage path. Which provider wrote it is the provider's concern;
|
|
26
|
-
// where it lives on disk is core infra.
|
|
27
|
-
export const TOKENS_PATH = path.join(config.DATA_DIR, "tokens.json");
|
|
28
|
-
export const WATCH_INTERVAL_MS = 7000;
|
|
29
24
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,6EAA6E;AAC7E,uDAAuD;AACvD,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;IACzB,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;IACtE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;IACpC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAE5B,QAAQ;CACT,CAAC,CAAC;AAEH,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;IACpC,QAAQ,EAAE,IAAI,CAAC,OAAO;IACtB,QAAQ,EAAE,IAAI,CAAC,OAAO;IACtB,KAAK,EAAE,IAAI,CAAC,KAAK;CAClB,CAAC,CAAC;AACH,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IACvB,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACtC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAEpD,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,22 +2,17 @@
|
|
|
2
2
|
import Debug from "debug";
|
|
3
3
|
import { app } from "./app.js";
|
|
4
4
|
import { config } from "./config.js";
|
|
5
|
-
import { AccessDeniedError
|
|
5
|
+
import { AccessDeniedError } from "./types.js";
|
|
6
6
|
const log = Debug("useclaudeproxy:oauth");
|
|
7
7
|
const errorLog = Debug("useclaudeproxy:oauth:error");
|
|
8
8
|
log("Enviroment: %s", config.NODE_ENV);
|
|
9
9
|
if (config.NODE_ENV === "development" && config.DEBUG)
|
|
10
10
|
Debug.enable(config.DEBUG);
|
|
11
11
|
app().catch((err) => {
|
|
12
|
-
if (err instanceof
|
|
13
|
-
err instanceof AccessDeniedError) {
|
|
12
|
+
if (err instanceof AccessDeniedError) {
|
|
14
13
|
errorLog(err.message);
|
|
15
14
|
console.error(err.message);
|
|
16
15
|
}
|
|
17
|
-
else if (err instanceof OAuthHttpError) {
|
|
18
|
-
errorLog("OAuth request failed: %s (status=%d) body=%o", err.message, err.statusCode, err.body);
|
|
19
|
-
console.error(err.message);
|
|
20
|
-
}
|
|
21
16
|
else {
|
|
22
17
|
errorLog("Fatal error: %o", err);
|
|
23
18
|
console.error(err);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,GAAG,GAAG,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAC1C,MAAM,QAAQ,GAAG,KAAK,CAAC,4BAA4B,CAAC,CAAC;AAErD,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;AACvC,IAAI,MAAM,CAAC,QAAQ,KAAK,aAAa,IAAI,MAAM,CAAC,KAAK;IACnD,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAE7B,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAClB,IAAI,GAAG,YAAY,iBAAiB,EAAE,CAAC;QACrC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;QACjC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-cli-proxy.d.ts","sourceRoot":"","sources":["../src/install-cli-proxy.ts"],"names":[],"mappings":"AA8EA,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CA0CpD"}
|
|
1
|
+
{"version":3,"file":"install-cli-proxy.d.ts","sourceRoot":"","sources":["../src/install-cli-proxy.ts"],"names":[],"mappings":"AA8EA,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CA0CpD;AAsBD,wBAAgB,YAAY,IAAI,IAAI,CASnC"}
|
|
@@ -7,7 +7,7 @@ import path from "node:path";
|
|
|
7
7
|
import { pipeline } from "node:stream/promises";
|
|
8
8
|
import { args } from "./args.js";
|
|
9
9
|
import { CONFIG_PATH } from "./config-yaml.js";
|
|
10
|
-
import {
|
|
10
|
+
import { getProvider } from "./providers/index.js";
|
|
11
11
|
const log = Debug("app:install");
|
|
12
12
|
const VERSION = "7.2.142";
|
|
13
13
|
const RELEASE_BASE = `https://github.com/router-for-me/CLIProxyAPI/releases/download/v${VERSION}`;
|
|
@@ -75,10 +75,10 @@ export async function ensureCliProxy() {
|
|
|
75
75
|
const asset = pickAsset();
|
|
76
76
|
const url = `${RELEASE_BASE}/${asset}`;
|
|
77
77
|
const archivePath = path.join(TOOLS_DIR, asset);
|
|
78
|
-
|
|
78
|
+
const provider = getProvider(args.activeProvider);
|
|
79
79
|
if (args.renew) {
|
|
80
|
-
if (fs.existsSync(
|
|
81
|
-
fs.rmSync(
|
|
80
|
+
if (fs.existsSync(provider.tokenPath)) {
|
|
81
|
+
fs.rmSync(provider.tokenPath, { force: true });
|
|
82
82
|
log("--renew: cleared stored token, will re-run device flow");
|
|
83
83
|
}
|
|
84
84
|
renewFromArchive(archivePath);
|
|
@@ -125,8 +125,7 @@ function renewFromArchive(archivePath) {
|
|
|
125
125
|
createConfig();
|
|
126
126
|
args.renew = false;
|
|
127
127
|
}
|
|
128
|
-
|
|
129
|
-
function createConfig() {
|
|
128
|
+
export function createConfig() {
|
|
130
129
|
const example = path.join(TOOLS_DIR, "config.example.yaml");
|
|
131
130
|
if (!fs.existsSync(example)) {
|
|
132
131
|
console.error(`❌ Missing template: ${example}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-cli-proxy.js","sourceRoot":"","sources":["../src/install-cli-proxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,MAAM,oBAAoB,CAAC;AACpC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,
|
|
1
|
+
{"version":3,"file":"install-cli-proxy.js","sourceRoot":"","sources":["../src/install-cli-proxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,24 @@
|
|
|
1
|
-
import { type TokenResponse } from "../types.ts";
|
|
2
1
|
import type { Provider } from "./types.ts";
|
|
2
|
+
type TokenResponse = {
|
|
3
|
+
access_token: string;
|
|
4
|
+
refresh_token?: string;
|
|
5
|
+
token_type: string;
|
|
6
|
+
expires_in?: number;
|
|
7
|
+
};
|
|
3
8
|
export declare class HermesProvider implements Provider {
|
|
4
9
|
readonly name = "hermes";
|
|
10
|
+
readonly tokenPath: string;
|
|
5
11
|
private readonly client;
|
|
6
12
|
getValidToken(): Promise<TokenResponse>;
|
|
7
|
-
|
|
13
|
+
startTokenWatcher(signal?: AbortSignal): Promise<void>;
|
|
14
|
+
private getAccountInfo;
|
|
8
15
|
private runDeviceFlow;
|
|
16
|
+
clearStoredToken(): void;
|
|
9
17
|
private readStoredToken;
|
|
10
18
|
private saveTokens;
|
|
11
19
|
private initConfig;
|
|
12
20
|
private setApiKey;
|
|
13
21
|
}
|
|
14
22
|
export declare const hermesProvider: HermesProvider;
|
|
23
|
+
export {};
|
|
15
24
|
//# sourceMappingURL=hermes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hermes.d.ts","sourceRoot":"","sources":["../../src/providers/hermes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hermes.d.ts","sourceRoot":"","sources":["../../src/providers/hermes.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AA8B3C,KAAK,aAAa,GAAG;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAmJF,qBAAa,cAAe,YAAW,QAAQ;IAC7C,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,SAAS,SAAe;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IAEjD,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC,CAwB5C;IAEK,iBAAiB,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB3D;YAEa,cAAc;YAMd,aAAa;IAqB3B,gBAAgB,IAAI,IAAI,CAKvB;IAED,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,UAAU;IAiDlB,OAAO,CAAC,SAAS;CASlB;AAED,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
|
package/dist/providers/hermes.js
CHANGED
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
import Debug from "debug";
|
|
2
2
|
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
3
4
|
import open from "open";
|
|
4
5
|
import { args } from "../args.js";
|
|
5
6
|
import { readConfig, writeConfig } from "../config-yaml.js";
|
|
6
|
-
import {
|
|
7
|
+
import { config } from "../config.js";
|
|
7
8
|
import { createOAuthHttpClient } from "../http-client.js";
|
|
8
|
-
import {
|
|
9
|
+
import { createConfig } from "../install-cli-proxy.js";
|
|
10
|
+
import { AccessDeniedError } from "../types.js";
|
|
9
11
|
const log = Debug("useclaudeproxy:oauth");
|
|
10
12
|
const errorLog = Debug("useclaudeproxy:oauth:error");
|
|
11
13
|
const POLL_INTERVAL_MS = 7000;
|
|
14
|
+
const WATCH_INTERVAL_MS = 7000;
|
|
15
|
+
const TOKENS_PATH = path.join(config.DATA_DIR, "hermes-tokens.json");
|
|
12
16
|
const FORM_HEADERS = {
|
|
13
17
|
"Content-Type": "application/x-www-form-urlencoded",
|
|
14
18
|
Accept: "application/json",
|
|
@@ -20,7 +24,22 @@ const OAUTH = {
|
|
|
20
24
|
grantType: "urn:ietf:params:oauth:grant-type:device_code",
|
|
21
25
|
refreshTokenHeader: "X-Nous-Refresh-Token",
|
|
22
26
|
};
|
|
23
|
-
|
|
27
|
+
class OAuthHttpError extends Error {
|
|
28
|
+
statusCode;
|
|
29
|
+
body;
|
|
30
|
+
constructor(message, statusCode, body) {
|
|
31
|
+
super(message);
|
|
32
|
+
this.statusCode = statusCode;
|
|
33
|
+
this.body = body;
|
|
34
|
+
this.name = "OAuthHttpError";
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
class DeviceCodeExpiredError extends Error {
|
|
38
|
+
constructor() {
|
|
39
|
+
super("Device code expired before authorization completed");
|
|
40
|
+
this.name = "DeviceCodeExpiredError";
|
|
41
|
+
}
|
|
42
|
+
}
|
|
24
43
|
class HermesDeviceFlowClient {
|
|
25
44
|
http;
|
|
26
45
|
constructor(http = createOAuthHttpClient()) {
|
|
@@ -94,11 +113,20 @@ function parseBody(response) {
|
|
|
94
113
|
? JSON.parse(response.body)
|
|
95
114
|
: response.body;
|
|
96
115
|
}
|
|
97
|
-
function sleep(ms) {
|
|
98
|
-
return new Promise((resolve) =>
|
|
116
|
+
function sleep(ms, signal) {
|
|
117
|
+
return new Promise((resolve) => {
|
|
118
|
+
if (signal?.aborted)
|
|
119
|
+
return resolve();
|
|
120
|
+
const t = setTimeout(resolve, ms);
|
|
121
|
+
signal?.addEventListener("abort", () => {
|
|
122
|
+
clearTimeout(t);
|
|
123
|
+
resolve();
|
|
124
|
+
}, { once: true });
|
|
125
|
+
});
|
|
99
126
|
}
|
|
100
127
|
export class HermesProvider {
|
|
101
128
|
name = "hermes";
|
|
129
|
+
tokenPath = TOKENS_PATH;
|
|
102
130
|
client = new HermesDeviceFlowClient();
|
|
103
131
|
async getValidToken() {
|
|
104
132
|
const stored = this.readStoredToken();
|
|
@@ -125,6 +153,29 @@ export class HermesProvider {
|
|
|
125
153
|
}
|
|
126
154
|
return this.runDeviceFlow();
|
|
127
155
|
}
|
|
156
|
+
async startTokenWatcher(signal) {
|
|
157
|
+
log("Watching token every %dms", WATCH_INTERVAL_MS);
|
|
158
|
+
let current = (await this.getValidToken()).access_token;
|
|
159
|
+
let printed = false;
|
|
160
|
+
while (!signal?.aborted) {
|
|
161
|
+
try {
|
|
162
|
+
const account = await this.getAccountInfo(current);
|
|
163
|
+
if (!printed) {
|
|
164
|
+
printed = true;
|
|
165
|
+
log("Account Information:\n" + JSON.stringify(account, null, 2));
|
|
166
|
+
}
|
|
167
|
+
log("Token valid");
|
|
168
|
+
}
|
|
169
|
+
catch (err) {
|
|
170
|
+
errorLog("Token invalid, renewing: %o", err);
|
|
171
|
+
const refreshed = await this.getValidToken();
|
|
172
|
+
current = refreshed.access_token;
|
|
173
|
+
printed = false;
|
|
174
|
+
log(`Token RENEWED (expires_in=${refreshed.expires_in})`);
|
|
175
|
+
}
|
|
176
|
+
await sleep(WATCH_INTERVAL_MS, signal);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
128
179
|
async getAccountInfo(accessToken) {
|
|
129
180
|
return this.client.fetchAccountInfo(accessToken);
|
|
130
181
|
}
|
|
@@ -136,10 +187,17 @@ export class HermesProvider {
|
|
|
136
187
|
console.log(`Opened ${verificationUrl}. If it didn't open, enter code ${deviceCode.user_code} there.`);
|
|
137
188
|
const token = await this.client.pollForToken(deviceCode.device_code);
|
|
138
189
|
log("Authorization successful");
|
|
190
|
+
createConfig();
|
|
139
191
|
this.initConfig(args.model);
|
|
140
192
|
this.saveTokens(token);
|
|
141
193
|
return token;
|
|
142
194
|
}
|
|
195
|
+
clearStoredToken() {
|
|
196
|
+
if (fs.existsSync(TOKENS_PATH)) {
|
|
197
|
+
fs.rmSync(TOKENS_PATH, { force: true });
|
|
198
|
+
log("Cleared stored token");
|
|
199
|
+
}
|
|
200
|
+
}
|
|
143
201
|
readStoredToken() {
|
|
144
202
|
if (!fs.existsSync(TOKENS_PATH))
|
|
145
203
|
return undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hermes.js","sourceRoot":"","sources":["../../src/providers/hermes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"hermes.js","sourceRoot":"","sources":["../../src/providers/hermes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { TokenResponse } from "../types.ts";
|
|
2
1
|
export interface Provider {
|
|
3
2
|
readonly name: string;
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
readonly tokenPath: string;
|
|
4
|
+
getValidToken(): Promise<unknown>;
|
|
5
|
+
startTokenWatcher(signal?: AbortSignal): Promise<void>;
|
|
6
6
|
}
|
|
7
7
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,iBAAiB,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxD"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,30 +1,4 @@
|
|
|
1
|
-
export type DeviceCodeResponse = {
|
|
2
|
-
device_code: string;
|
|
3
|
-
user_code: string;
|
|
4
|
-
verification_uri: string;
|
|
5
|
-
verification_uri_complete?: string;
|
|
6
|
-
expires_in: number;
|
|
7
|
-
interval: number;
|
|
8
|
-
};
|
|
9
|
-
export type TokenResponse = {
|
|
10
|
-
access_token: string;
|
|
11
|
-
refresh_token?: string;
|
|
12
|
-
token_type: string;
|
|
13
|
-
expires_in?: number;
|
|
14
|
-
};
|
|
15
|
-
export type TokenErrorResponse = {
|
|
16
|
-
error: "authorization_pending" | "slow_down" | "expired_token" | "access_denied" | string;
|
|
17
|
-
error_description?: string;
|
|
18
|
-
};
|
|
19
1
|
export type AccountInfo = Record<string, unknown>;
|
|
20
|
-
export declare class OAuthHttpError extends Error {
|
|
21
|
-
readonly statusCode: number;
|
|
22
|
-
readonly body: unknown;
|
|
23
|
-
constructor(message: string, statusCode: number, body: unknown);
|
|
24
|
-
}
|
|
25
|
-
export declare class DeviceCodeExpiredError extends Error {
|
|
26
|
-
constructor();
|
|
27
|
-
}
|
|
28
2
|
export declare class AccessDeniedError extends Error {
|
|
29
3
|
constructor();
|
|
30
4
|
}
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAElD,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,cAGC;CACF"}
|
package/dist/types.js
CHANGED
|
@@ -1,19 +1,3 @@
|
|
|
1
|
-
export class OAuthHttpError extends Error {
|
|
2
|
-
statusCode;
|
|
3
|
-
body;
|
|
4
|
-
constructor(message, statusCode, body) {
|
|
5
|
-
super(message);
|
|
6
|
-
this.statusCode = statusCode;
|
|
7
|
-
this.body = body;
|
|
8
|
-
this.name = "OAuthHttpError";
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
export class DeviceCodeExpiredError extends Error {
|
|
12
|
-
constructor() {
|
|
13
|
-
super("Device code expired before authorization completed");
|
|
14
|
-
this.name = "DeviceCodeExpiredError";
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
1
|
export class AccessDeniedError extends Error {
|
|
18
2
|
constructor() {
|
|
19
3
|
super("User denied the authorization request");
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C;QACE,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "useclaudeproxy",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.1",
|
|
4
4
|
"author": "maanimeisam",
|
|
5
5
|
"description": "useclaudeproxy — OAuth device-flow CLI that authenticates the Hermes CLI and runs CLIProxyAPI as a local OpenAI/Claude/Gemini/Codex proxy.",
|
|
6
6
|
"main": "./dist/index.js",
|