useclaudeproxy 2.0.1 → 3.0.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.
- package/README.md +13 -1
- package/dist/args.d.ts +2 -0
- package/dist/args.d.ts.map +1 -1
- package/dist/args.js +19 -0
- package/dist/args.js.map +1 -1
- package/dist/providers/custom.d.ts +17 -0
- package/dist/providers/custom.d.ts.map +1 -0
- package/dist/providers/custom.js +83 -0
- package/dist/providers/custom.js.map +1 -0
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +2 -0
- package/dist/providers/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -80,10 +80,20 @@ differ only in how they authenticate upstream.
|
|
|
80
80
|
browser login, then auto-refreshes the token.
|
|
81
81
|
- **`opencode`** — authenticates against `https://opencode.ai/zen/v1` with a key
|
|
82
82
|
(no device flow). Tokens persist in `data/opencode-tokens.json`.
|
|
83
|
+
- **`custom`** — point the proxy at any OpenAI-compatible API. No login: supply
|
|
84
|
+
`--url`, `--api`, and `--model`; the given key is sent as a `Bearer` header
|
|
85
|
+
upstream. Token persists in `data/custom-tokens.json`.
|
|
83
86
|
|
|
84
87
|
```bash
|
|
85
88
|
# Use the opencode provider, routing its upstream traffic through a proxy:
|
|
86
89
|
useclaudeproxy --proxy http://127.0.0.1:2080 --provider opencode --model hy3-free
|
|
90
|
+
|
|
91
|
+
# Point the proxy at any OpenAI-compatible API — no device flow.
|
|
92
|
+
# --url, --api and --model are all required for the custom provider.
|
|
93
|
+
useclaudeproxy --provider custom \
|
|
94
|
+
--url http://1.1.1.1:20128/v1 \
|
|
95
|
+
--api sk-123123123 \
|
|
96
|
+
--model XX
|
|
87
97
|
```
|
|
88
98
|
|
|
89
99
|
On success the CLI prints the env vars to point Claude Code at the local proxy:
|
|
@@ -101,7 +111,9 @@ These work in **any position** — before or after the command.
|
|
|
101
111
|
| Flag | Default | Notes |
|
|
102
112
|
| ------------------- | ------------------ | ------------------------------------------------------------- |
|
|
103
113
|
| `--model <model>` | _(required)_ | Model name to expose in OpenAI compatibility. |
|
|
104
|
-
| `--provider <name>` | `hermes` | OAuth provider to use (`hermes` \| `opencode`).
|
|
114
|
+
| `--provider <name>` | `hermes` | OAuth provider to use (`hermes` \| `opencode` \| `custom`). |
|
|
115
|
+
| `--url <url>` | `""` | OpenAI-compatible API base URL (required when `custom`). |
|
|
116
|
+
| `--api <key>` | `""` | API key for the custom API (required when `custom`). |
|
|
105
117
|
| `--node-env <env>` | `development` | `development` \| `production`. |
|
|
106
118
|
| `--debug <ns>` | `useclaudeproxy:*` | `debug` namespaces, e.g. `useclaudeproxy:oauth`. |
|
|
107
119
|
| `--data-dir <dir>` | `data` | Token storage directory. |
|
package/dist/args.d.ts
CHANGED
package/dist/args.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS,UAAgC,CAAC;AAEvD,UAAU,OAAO;IACf,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS,UAAgC,CAAC;AAEvD,UAAU,OAAO;IACf,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AA2FD,eAAO,MAAM,IAAI,SAAM,CAAC"}
|
package/dist/args.js
CHANGED
|
@@ -8,6 +8,8 @@ program
|
|
|
8
8
|
.option("--model <model>", "model name to expose in openai-compatibility")
|
|
9
9
|
.option("--proxy <url>", 'CLIProxyAPI outbound proxy (omit for "", or ""|direct|none to clear)')
|
|
10
10
|
.option("--provider <name>", "OAuth provider to use (default: hermes)", "hermes")
|
|
11
|
+
.option("--url <url>", "OpenAI-compatible API base URL (provider: custom)")
|
|
12
|
+
.option("--api <key>", "API key for the OpenAI-compatible API (provider: custom)")
|
|
11
13
|
.option("--force", "re-download CLIProxyAPI even if already installed")
|
|
12
14
|
.option("--renew", "re-extract from the kept archive and re-run device flow")
|
|
13
15
|
.parse();
|
|
@@ -15,6 +17,19 @@ if (!program.opts().renew &&
|
|
|
15
17
|
!program.opts().model) {
|
|
16
18
|
program.error("required option '--model <model>' not specified");
|
|
17
19
|
}
|
|
20
|
+
if (program.opts().provider === "custom") {
|
|
21
|
+
const o = program.opts();
|
|
22
|
+
const missing = [];
|
|
23
|
+
if (!o.url)
|
|
24
|
+
missing.push("--url <url>");
|
|
25
|
+
if (!o.api)
|
|
26
|
+
missing.push("--api <key>");
|
|
27
|
+
if (!o.model)
|
|
28
|
+
missing.push("--model <model>");
|
|
29
|
+
if (missing.length) {
|
|
30
|
+
program.error(`provider 'custom' requires: ${missing.join(", ")}`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
18
33
|
program.addHelpText("after", `
|
|
19
34
|
Environment variables:
|
|
20
35
|
NODE_ENV development | production
|
|
@@ -30,6 +45,8 @@ const cli = {
|
|
|
30
45
|
renew: false,
|
|
31
46
|
activeProvider: "hermes",
|
|
32
47
|
model: "",
|
|
48
|
+
url: "",
|
|
49
|
+
api: "",
|
|
33
50
|
};
|
|
34
51
|
const opts = program.opts();
|
|
35
52
|
process.env.DEBUG ??= "useclaudeproxy:*";
|
|
@@ -39,5 +56,7 @@ cli.model = opts.model;
|
|
|
39
56
|
cli.force = opts.force;
|
|
40
57
|
cli.renew = opts.renew;
|
|
41
58
|
cli.activeProvider = opts.provider;
|
|
59
|
+
cli.url = opts.url ?? "";
|
|
60
|
+
cli.api = opts.api ?? "";
|
|
42
61
|
export const args = cli;
|
|
43
62
|
//# sourceMappingURL=args.js.map
|
package/dist/args.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAgBvD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,gBAAgB,CAAC;KACtB,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,CAAC;KAC7D,MAAM,CAAC,iBAAiB,EAAE,8CAA8C,CAAC;KACzE,MAAM,CACL,eAAe,EACf,sEAAsE,CACvE;KACA,MAAM,CACL,mBAAmB,EACnB,yCAAyC,EACzC,QAAQ,CACT;KACA,MAAM,CAAC,aAAa,EAAE,mDAAmD,CAAC;KAC1E,MAAM,CACL,aAAa,EACb,0DAA0D,CAC3D;KACA,MAAM,CAAC,SAAS,EAAE,mDAAmD,CAAC;KACtE,MAAM,CAAC,SAAS,EAAE,yDAAyD,CAAC;KAC5E,KAAK,EAAE,CAAC;AAEX,IACE,CAAC,OAAO,CAAC,IAAI,EAAsC,CAAC,KAAK;IACzD,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,EACrB,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;AACnE,CAAC;AAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;IACzC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,EAAkD,CAAC;IACzE,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,CAAC,CAAC,CAAC,GAAG;QAAE,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACxC,IAAI,CAAC,CAAC,CAAC,GAAG;QAAE,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACxC,IAAI,CAAC,CAAC,CAAC,KAAK;QAAE,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC9C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,+BAA+B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED,OAAO,CAAC,WAAW,CACjB,OAAO,EACP;;;;;;;CAOD,CACA,CAAC;AAEF,MAAM,GAAG,GAAY;IACnB,KAAK,EAAE,KAAK;IACZ,OAAO,EAAE,MAAM;IACf,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,KAAK;IACZ,cAAc,EAAE,QAAQ;IACxB,KAAK,EAAE,EAAE;IACT,GAAG,EAAE,EAAE;IACP,GAAG,EAAE,EAAE;CACR,CAAC;AAEF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAWxB,CAAC;AAEF,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,kBAAkB,CAAC;AACzC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAC3B,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;AAC7B,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACvB,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACvB,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACvB,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;AACnC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;AACzB,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;AAEzB,MAAM,CAAC,MAAM,IAAI,GAAG,GAAG,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { BaseProvider } from "./base-provider.ts";
|
|
2
|
+
type Token = {
|
|
3
|
+
key: string;
|
|
4
|
+
};
|
|
5
|
+
export declare class CustomProvider extends BaseProvider {
|
|
6
|
+
readonly name = "custom";
|
|
7
|
+
readonly baseUrl: string;
|
|
8
|
+
readonly tokenPath: string;
|
|
9
|
+
private readonly http;
|
|
10
|
+
initConfig(): Promise<void>;
|
|
11
|
+
getValidToken(): Promise<Token>;
|
|
12
|
+
saveTokens(token: Token): void;
|
|
13
|
+
startTokenWatcher(signal?: AbortSignal): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
export declare const customProvider: CustomProvider;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=custom.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom.d.ts","sourceRoot":"","sources":["../../src/providers/custom.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAMlD,KAAK,KAAK,GAAG;IACX,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,qBAAa,cAAe,SAAQ,YAAY;IAC9C,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,OAAO,SAAY;IAC5B,QAAQ,CAAC,SAAS,SAAoD;IACtE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA2B;IAE1C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAqBhC;IAEK,aAAa,IAAI,OAAO,CAAC,KAAK,CAAC,CASpC;IAEQ,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAGtC;IAEK,iBAAiB,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAmC3D;CACF;AAED,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import Debug from "debug";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { args } from "../args.js";
|
|
5
|
+
import { readConfig, writeConfig } from "../config-yaml.js";
|
|
6
|
+
import { config } from "../config.js";
|
|
7
|
+
import { createOAuthHttpClient } from "../http-client.js";
|
|
8
|
+
import { sleep } from "../utils.js";
|
|
9
|
+
import { BaseProvider } from "./base-provider.js";
|
|
10
|
+
const log = Debug("useclaudeproxy:custom");
|
|
11
|
+
const errorLog = Debug("useclaudeproxy:custom:error");
|
|
12
|
+
const WATCH_INTERVAL_MS = 7000;
|
|
13
|
+
export class CustomProvider extends BaseProvider {
|
|
14
|
+
name = "custom";
|
|
15
|
+
baseUrl = args.url;
|
|
16
|
+
tokenPath = path.join(config.DATA_DIR, "custom-tokens.json");
|
|
17
|
+
http = createOAuthHttpClient();
|
|
18
|
+
async initConfig() {
|
|
19
|
+
const config = readConfig();
|
|
20
|
+
config["host"] = "127.0.0.1";
|
|
21
|
+
config["api-keys"] = ["456789"];
|
|
22
|
+
config["openai-compatibility"] = [{ name: this.name }];
|
|
23
|
+
const api = config["openai-compatibility"][0];
|
|
24
|
+
api["base-url"] = this.baseUrl;
|
|
25
|
+
api["models"] = [
|
|
26
|
+
{ name: args.model, alias: "claude-opus-5" },
|
|
27
|
+
{ name: args.model, alias: "" },
|
|
28
|
+
];
|
|
29
|
+
api["disable-cooling"] = true;
|
|
30
|
+
api["headers"] = {};
|
|
31
|
+
const token = await this.getValidToken();
|
|
32
|
+
this.setApiKey(token.key);
|
|
33
|
+
writeConfig(config);
|
|
34
|
+
}
|
|
35
|
+
async getValidToken() {
|
|
36
|
+
if (fs.existsSync(this.tokenPath)) {
|
|
37
|
+
const token = this.readStoredToken();
|
|
38
|
+
if (token)
|
|
39
|
+
return token;
|
|
40
|
+
}
|
|
41
|
+
const token = { key: args.api };
|
|
42
|
+
this.saveTokens(token);
|
|
43
|
+
return token;
|
|
44
|
+
}
|
|
45
|
+
saveTokens(token) {
|
|
46
|
+
super.saveTokens(token);
|
|
47
|
+
this.setApiKey(token.key);
|
|
48
|
+
}
|
|
49
|
+
async startTokenWatcher(signal) {
|
|
50
|
+
const token = await this.getValidToken();
|
|
51
|
+
log("Watching custom provider at %s every %dms", this.baseUrl, WATCH_INTERVAL_MS);
|
|
52
|
+
while (!signal?.aborted) {
|
|
53
|
+
try {
|
|
54
|
+
const res = await this.http.post(`${this.baseUrl}/chat/completions`, {
|
|
55
|
+
headers: {
|
|
56
|
+
"Content-Type": "application/json",
|
|
57
|
+
Authorization: `Bearer ${token.key}`,
|
|
58
|
+
},
|
|
59
|
+
json: {
|
|
60
|
+
model: args.model,
|
|
61
|
+
messages: [{ role: "user", content: "ping" }],
|
|
62
|
+
stream: false,
|
|
63
|
+
max_tokens: 1,
|
|
64
|
+
},
|
|
65
|
+
throwHttpErrors: false,
|
|
66
|
+
retry: { limit: 0 },
|
|
67
|
+
timeout: { request: 30_000 },
|
|
68
|
+
https: { rejectUnauthorized: false },
|
|
69
|
+
});
|
|
70
|
+
if (res.statusCode !== 200) {
|
|
71
|
+
throw new Error(`StatusCode: ${res.statusCode}`);
|
|
72
|
+
}
|
|
73
|
+
log("Custom provider reachable");
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
errorLog("Custom provider unavailable: %o", err);
|
|
77
|
+
}
|
|
78
|
+
await sleep(WATCH_INTERVAL_MS, signal);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
export const customProvider = new CustomProvider();
|
|
83
|
+
//# sourceMappingURL=custom.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom.js","sourceRoot":"","sources":["../../src/providers/custom.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAWvD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAQtD;AAED,eAAO,MAAM,cAAc,UAAuB,CAAC"}
|
package/dist/providers/index.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { hermesProvider } from "./hermes.js";
|
|
2
2
|
import { openCodeProvider } from "./opencode.js";
|
|
3
|
+
import { customProvider } from "./custom.js";
|
|
3
4
|
const registry = new Map([
|
|
4
5
|
["hermes", hermesProvider],
|
|
5
6
|
["opencode", openCodeProvider],
|
|
7
|
+
["custom", customProvider],
|
|
6
8
|
]);
|
|
7
9
|
export function getProvider(name) {
|
|
8
10
|
const provider = registry.get(name.toLowerCase());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAuB;IAC7C,CAAC,QAAQ,EAAE,cAAc,CAAC;IAC1B,CAAC,UAAU,EAAE,gBAAgB,CAAC;IAC9B,CAAC,QAAQ,EAAE,cAAc,CAAC;CAC3B,CAAC,CAAC;AAEH,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAClD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACb,qBAAqB,IAAI,kBAAkB,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC7E,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "useclaudeproxy",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
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",
|