@slkiser/opencode-quota 4.10.1 → 4.10.3
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 -7
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/{qwen-local-quota.d.ts → alibaba-coding-plan-local-quota.d.ts} +2 -34
- package/dist/lib/alibaba-coding-plan-local-quota.d.ts.map +1 -0
- package/dist/lib/{qwen-local-quota.js → alibaba-coding-plan-local-quota.js} +1 -110
- package/dist/lib/alibaba-coding-plan-local-quota.js.map +1 -0
- package/dist/lib/api-key-resolver.d.ts +7 -0
- package/dist/lib/api-key-resolver.d.ts.map +1 -1
- package/dist/lib/api-key-resolver.js +30 -21
- package/dist/lib/api-key-resolver.js.map +1 -1
- package/dist/lib/cli-show.d.ts.map +1 -1
- package/dist/lib/cli-show.js +6 -5
- package/dist/lib/cli-show.js.map +1 -1
- package/dist/lib/command-parsing.d.ts +2 -12
- package/dist/lib/command-parsing.d.ts.map +1 -1
- package/dist/lib/command-parsing.js +2 -20
- package/dist/lib/command-parsing.js.map +1 -1
- package/dist/lib/config.d.ts +1 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +0 -25
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/entries.d.ts +0 -1
- package/dist/lib/entries.d.ts.map +1 -1
- package/dist/lib/google-agy.js +1 -1
- package/dist/lib/google-agy.js.map +1 -1
- package/dist/lib/grouped-entry-normalization.d.ts.map +1 -1
- package/dist/lib/grouped-entry-normalization.js +0 -29
- package/dist/lib/grouped-entry-normalization.js.map +1 -1
- package/dist/lib/kimi-auth.d.ts +41 -7
- package/dist/lib/kimi-auth.d.ts.map +1 -1
- package/dist/lib/kimi-auth.js +72 -27
- package/dist/lib/kimi-auth.js.map +1 -1
- package/dist/lib/kimi-endpoints.d.ts +10 -0
- package/dist/lib/kimi-endpoints.d.ts.map +1 -0
- package/dist/lib/kimi-endpoints.js +18 -0
- package/dist/lib/kimi-endpoints.js.map +1 -0
- package/dist/lib/kimi.d.ts +5 -1
- package/dist/lib/kimi.d.ts.map +1 -1
- package/dist/lib/kimi.js +5 -11
- package/dist/lib/kimi.js.map +1 -1
- package/dist/lib/maintainer-announcements.d.ts.map +1 -1
- package/dist/lib/maintainer-announcements.js +9 -2
- package/dist/lib/maintainer-announcements.js.map +1 -1
- package/dist/lib/ollama-cloud.d.ts +2 -2
- package/dist/lib/ollama-cloud.d.ts.map +1 -1
- package/dist/lib/ollama-cloud.js +8 -3
- package/dist/lib/ollama-cloud.js.map +1 -1
- package/dist/lib/opencode-config-providers.d.ts.map +1 -1
- package/dist/lib/opencode-config-providers.js +0 -2
- package/dist/lib/opencode-config-providers.js.map +1 -1
- package/dist/lib/opencode-zen-config.d.ts +1 -1
- package/dist/lib/opencode-zen-config.d.ts.map +1 -1
- package/dist/lib/opencode-zen-config.js +10 -4
- package/dist/lib/opencode-zen-config.js.map +1 -1
- package/dist/lib/opencode-zen.d.ts +12 -11
- package/dist/lib/opencode-zen.d.ts.map +1 -1
- package/dist/lib/opencode-zen.js +120 -195
- package/dist/lib/opencode-zen.js.map +1 -1
- package/dist/lib/provider-metadata.d.ts +0 -1
- package/dist/lib/provider-metadata.d.ts.map +1 -1
- package/dist/lib/provider-metadata.js.map +1 -1
- package/dist/lib/provider-registration.d.ts +16 -30
- package/dist/lib/provider-registration.d.ts.map +1 -1
- package/dist/lib/provider-registration.js +17 -31
- package/dist/lib/provider-registration.js.map +1 -1
- package/dist/lib/quota-dialog-commands.d.ts +0 -3
- package/dist/lib/quota-dialog-commands.d.ts.map +1 -1
- package/dist/lib/quota-dialog-commands.js +1 -25
- package/dist/lib/quota-dialog-commands.js.map +1 -1
- package/dist/lib/quota-providers.d.ts +1 -1
- package/dist/lib/quota-providers.d.ts.map +1 -1
- package/dist/lib/quota-providers.js +7 -14
- package/dist/lib/quota-providers.js.map +1 -1
- package/dist/lib/quota-runtime-context.d.ts.map +1 -1
- package/dist/lib/quota-runtime-context.js +0 -2
- package/dist/lib/quota-runtime-context.js.map +1 -1
- package/dist/lib/quota-state.d.ts.map +1 -1
- package/dist/lib/quota-state.js +1 -2
- package/dist/lib/quota-state.js.map +1 -1
- package/dist/lib/quota-stats.d.ts.map +1 -1
- package/dist/lib/quota-stats.js +4 -0
- package/dist/lib/quota-stats.js.map +1 -1
- package/dist/lib/quota-status.d.ts +0 -10
- package/dist/lib/quota-status.d.ts.map +1 -1
- package/dist/lib/quota-status.js +18 -66
- package/dist/lib/quota-status.js.map +1 -1
- package/dist/lib/quota-toast-runtime.d.ts.map +1 -1
- package/dist/lib/quota-toast-runtime.js +0 -8
- package/dist/lib/quota-toast-runtime.js.map +1 -1
- package/dist/lib/types.d.ts +7 -68
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/types.js +0 -29
- package/dist/lib/types.js.map +1 -1
- package/dist/plugin.d.ts +0 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +2 -23
- package/dist/plugin.js.map +1 -1
- package/dist/providers/alibaba-coding-plan.d.ts.map +1 -1
- package/dist/providers/alibaba-coding-plan.js +1 -1
- package/dist/providers/alibaba-coding-plan.js.map +1 -1
- package/dist/providers/cache-policies.d.ts +2 -8
- package/dist/providers/cache-policies.d.ts.map +1 -1
- package/dist/providers/cache-policies.js +16 -10
- package/dist/providers/cache-policies.js.map +1 -1
- package/dist/providers/kimi-code.d.ts +2 -1
- package/dist/providers/kimi-code.d.ts.map +1 -1
- package/dist/providers/kimi-code.js +99 -75
- package/dist/providers/kimi-code.js.map +1 -1
- package/dist/providers/ollama-cloud.d.ts +1 -1
- package/dist/providers/ollama-cloud.d.ts.map +1 -1
- package/dist/providers/ollama-cloud.js +14 -1
- package/dist/providers/ollama-cloud.js.map +1 -1
- package/dist/providers/opencode-zen.d.ts.map +1 -1
- package/dist/providers/opencode-zen.js +23 -14
- package/dist/providers/opencode-zen.js.map +1 -1
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +3 -6
- package/dist/providers/registry.js.map +1 -1
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +0 -6
- package/dist/tui.tsx +0 -6
- package/package.json +2 -3
- package/dist/lib/google-antigravity-companion.d.ts +0 -8
- package/dist/lib/google-antigravity-companion.d.ts.map +0 -1
- package/dist/lib/google-antigravity-companion.js +0 -61
- package/dist/lib/google-antigravity-companion.js.map +0 -1
- package/dist/lib/google.d.ts +0 -58
- package/dist/lib/google.d.ts.map +0 -1
- package/dist/lib/google.js +0 -566
- package/dist/lib/google.js.map +0 -1
- package/dist/lib/qwen-auth.d.ts +0 -22
- package/dist/lib/qwen-auth.d.ts.map +0 -1
- package/dist/lib/qwen-auth.js +0 -42
- package/dist/lib/qwen-auth.js.map +0 -1
- package/dist/lib/qwen-local-quota.d.ts.map +0 -1
- package/dist/lib/qwen-local-quota.js.map +0 -1
- package/dist/providers/google-antigravity.d.ts +0 -6
- package/dist/providers/google-antigravity.d.ts.map +0 -1
- package/dist/providers/google-antigravity.js +0 -114
- package/dist/providers/google-antigravity.js.map +0 -1
- package/dist/providers/qwen-code.d.ts +0 -3
- package/dist/providers/qwen-code.d.ts.map +0 -1
- package/dist/providers/qwen-code.js +0 -84
- package/dist/providers/qwen-code.js.map +0 -1
|
@@ -1,32 +1,33 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* The OpenCode Console reports amounts in micro-cents:
|
|
3
|
+
* one US dollar is 100,000,000 micro-cents (billing units).
|
|
4
4
|
*/
|
|
5
5
|
export declare const OPENCODE_ZEN_BILLING_UNITS_PER_DOLLAR = 100000000;
|
|
6
6
|
export interface OpenCodeZenBillingData {
|
|
7
7
|
balance: number;
|
|
8
|
+
/** Credit limit in USD; null when the account has no limit or billing/account failed. */
|
|
8
9
|
monthlyLimit: number | null;
|
|
10
|
+
/** Current-month usage in billing units; null when usage/cost-by-day failed. */
|
|
9
11
|
monthlyUsage: number | null;
|
|
10
12
|
lastPayment: number | null;
|
|
11
|
-
reload
|
|
13
|
+
/** Auto-reload state; null (unknown) when billing/auto-recharge failed. */
|
|
14
|
+
reload: boolean | null;
|
|
12
15
|
reloadAmount: number | null;
|
|
13
16
|
reloadTrigger: number | null;
|
|
14
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* billing/status (balance) is required. The other routes are optional: when one fails,
|
|
20
|
+
* its fields are null and its error is listed in `errors`.
|
|
21
|
+
*/
|
|
15
22
|
export type OpenCodeZenResult = {
|
|
16
23
|
success: true;
|
|
17
24
|
data: OpenCodeZenBillingData;
|
|
25
|
+
errors: string[];
|
|
18
26
|
} | {
|
|
19
27
|
success: false;
|
|
20
28
|
error: string;
|
|
21
29
|
};
|
|
22
|
-
declare function
|
|
23
|
-
declare function parseNewSsrBillingData(html: string): OpenCodeZenBillingData | null;
|
|
24
|
-
declare function parseNewSsrPaymentData(html: string): number | null;
|
|
25
|
-
declare function parseDataSlotBillingData(html: string): OpenCodeZenBillingData | null;
|
|
26
|
-
declare function parseSsrPaymentData(html: string): number | null;
|
|
27
|
-
declare function parseDataSlotPaymentData(html: string): number | null;
|
|
28
|
-
export declare function queryOpenCodeZenQuota(workspaceId: string, authCookie: string, options?: {
|
|
30
|
+
export declare function queryOpenCodeZenQuota(workspaceId: string, consoleSessionCookie: string, options?: {
|
|
29
31
|
requestTimeoutMs?: number;
|
|
30
32
|
}): Promise<OpenCodeZenResult>;
|
|
31
|
-
export { parseDataSlotBillingData as _parseDataSlotBillingData, parseDataSlotPaymentData as _parseDataSlotPaymentData, parseNewSsrBillingData as _parseNewSsrBillingData, parseNewSsrPaymentData as _parseNewSsrPaymentData, parseSsrBillingData as _parseSsrBillingData, parseSsrPaymentData as _parseSsrPaymentData, };
|
|
32
33
|
//# sourceMappingURL=opencode-zen.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-zen.d.ts","sourceRoot":"","sources":["../../src/lib/opencode-zen.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"opencode-zen.d.ts","sourceRoot":"","sources":["../../src/lib/opencode-zen.ts"],"names":[],"mappings":"AASA;;;GAGG;AACH,eAAO,MAAM,qCAAqC,YAAc,CAAC;AAEjE,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,yFAAyF;IACzF,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,gFAAgF;IAChF,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,2EAA2E;IAC3E,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACvB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GACzB;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,sBAAsB,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,GACjE;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAoJtC,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,oBAAoB,EAAE,MAAM,EAC5B,OAAO,GAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAO,GAC1C,OAAO,CAAC,iBAAiB,CAAC,CAqC5B"}
|
package/dist/lib/opencode-zen.js
CHANGED
|
@@ -1,192 +1,79 @@
|
|
|
1
1
|
import { sanitizeDisplayText } from "./display-sanitize.js";
|
|
2
2
|
import { fetchWithTimeout } from "./http.js";
|
|
3
|
-
const
|
|
4
|
-
const BILLING_URL_SUFFIX = "/billing";
|
|
3
|
+
const CONSOLE_API_URL = "https://opencode.ai/console/api";
|
|
5
4
|
const USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) Gecko/20100101 Firefox/148.0";
|
|
6
|
-
const
|
|
5
|
+
const CONSOLE_TIMEOUT_MS = 10_000;
|
|
6
|
+
const SESSION_ERROR = "OpenCode Console session expired or invalid — paste a fresh __Host-console_session cookie as consoleSessionCookie";
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
8
|
+
* The OpenCode Console reports amounts in micro-cents:
|
|
9
|
+
* one US dollar is 100,000,000 micro-cents (billing units).
|
|
10
10
|
*/
|
|
11
11
|
export const OPENCODE_ZEN_BILLING_UNITS_PER_DOLLAR = 100_000_000;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
fields[match[1]] = Number(match[2]);
|
|
17
|
-
}
|
|
18
|
-
if (!Number.isFinite(fields.balance) || fields.balance < 0)
|
|
19
|
-
return null;
|
|
20
|
-
return {
|
|
21
|
-
balance: fields.balance,
|
|
22
|
-
monthlyLimit: Number.isFinite(fields.monthlyLimit) && fields.monthlyLimit >= 0 ? fields.monthlyLimit : null,
|
|
23
|
-
monthlyUsage: Number.isFinite(fields.monthlyUsage) && fields.monthlyUsage >= 0 ? fields.monthlyUsage : null,
|
|
24
|
-
lastPayment: null,
|
|
25
|
-
reload: false,
|
|
26
|
-
reloadAmount: null,
|
|
27
|
-
reloadTrigger: null,
|
|
28
|
-
};
|
|
12
|
+
function asRecord(value) {
|
|
13
|
+
return value && typeof value === "object" && !Array.isArray(value)
|
|
14
|
+
? value
|
|
15
|
+
: null;
|
|
29
16
|
}
|
|
30
|
-
/**
|
|
31
|
-
function
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
let quote = null;
|
|
38
|
-
let escaped = false;
|
|
39
|
-
for (let i = start; i < source.length; i++) {
|
|
40
|
-
const ch = source[i];
|
|
41
|
-
if (quote !== null) {
|
|
42
|
-
if (escaped) {
|
|
43
|
-
escaped = false;
|
|
44
|
-
}
|
|
45
|
-
else if (ch === "\\") {
|
|
46
|
-
escaped = true;
|
|
47
|
-
}
|
|
48
|
-
else if (ch === quote) {
|
|
49
|
-
quote = null;
|
|
50
|
-
}
|
|
51
|
-
continue;
|
|
52
|
-
}
|
|
53
|
-
if (ch === '"' || ch === "'" || ch === "`") {
|
|
54
|
-
quote = ch;
|
|
55
|
-
}
|
|
56
|
-
else if (ch === open) {
|
|
57
|
-
depth++;
|
|
58
|
-
}
|
|
59
|
-
else if (ch === close && --depth === 0) {
|
|
60
|
-
return { value: source.slice(start, i + 1), end: i };
|
|
61
|
-
}
|
|
17
|
+
/** Console micro-cent amounts arrive as decimal strings; numbers are accepted too. */
|
|
18
|
+
function parseMicroCents(value) {
|
|
19
|
+
if (typeof value === "number")
|
|
20
|
+
return Number.isFinite(value) ? value : null;
|
|
21
|
+
if (typeof value === "string" && /^-?\d+(?:\.\d+)?$/.test(value)) {
|
|
22
|
+
const parsed = Number(value);
|
|
23
|
+
return Number.isFinite(parsed) ? parsed : null;
|
|
62
24
|
}
|
|
63
25
|
return null;
|
|
64
26
|
}
|
|
65
|
-
function
|
|
66
|
-
|
|
67
|
-
`[\\s\\S]*?\\$R\\[\\d+\\]\\(\\$R\\[\\1\\],\\$R\\[\\d+\\]=`).exec(html);
|
|
68
|
-
if (!match)
|
|
69
|
-
return null;
|
|
70
|
-
const start = match.index + match[0].length;
|
|
71
|
-
return extractBalancedValue(html, start)?.value ?? null;
|
|
27
|
+
function invalidResponse() {
|
|
28
|
+
throw new Error("Unexpected OpenCode Console response");
|
|
72
29
|
}
|
|
73
|
-
function
|
|
74
|
-
|
|
75
|
-
if (!object)
|
|
76
|
-
return null;
|
|
77
|
-
const balanceMatch = object.match(/\bbalance\s*:\s*(-?\d+)/);
|
|
78
|
-
const limitMatch = object.match(/\bmonthlyLimit\s*:\s*(\d+)/);
|
|
79
|
-
const usageMatch = object.match(/\bmonthlyUsage\s*:\s*(\d+)/);
|
|
80
|
-
const reloadMatch = object.match(/\breload\s*:\s*(!0|!1|true|false)/);
|
|
81
|
-
const reloadAmountMatch = object.match(/\breloadAmount\s*:\s*(\d+)/);
|
|
82
|
-
const reloadTriggerMatch = object.match(/\breloadTrigger\s*:\s*(\d+)/);
|
|
83
|
-
if (!balanceMatch)
|
|
30
|
+
function parseDollars(value) {
|
|
31
|
+
if (value === null)
|
|
84
32
|
return null;
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
monthlyUsage: usageMatch ? Number(usageMatch[1]) : null,
|
|
89
|
-
lastPayment: null,
|
|
90
|
-
reload: reloadMatch ? reloadMatch[1] === "true" || reloadMatch[1] === "!0" : false,
|
|
91
|
-
reloadAmount: reloadAmountMatch ? Number(reloadAmountMatch[1]) : null,
|
|
92
|
-
reloadTrigger: reloadTriggerMatch ? Number(reloadTriggerMatch[1]) : null,
|
|
93
|
-
};
|
|
33
|
+
if (typeof value === "number" && Number.isFinite(value))
|
|
34
|
+
return value;
|
|
35
|
+
return invalidResponse();
|
|
94
36
|
}
|
|
95
|
-
function
|
|
96
|
-
const
|
|
97
|
-
|
|
98
|
-
return null;
|
|
99
|
-
for (let i = 1; i < array.length - 1; i++) {
|
|
100
|
-
if (array[i] !== "{")
|
|
101
|
-
continue;
|
|
102
|
-
const extracted = extractBalancedValue(array, i);
|
|
103
|
-
if (!extracted)
|
|
104
|
-
return null;
|
|
105
|
-
i = extracted.end;
|
|
106
|
-
const amountMatch = extracted.value.match(/\bamount\s*:\s*(-?\d+(?:\.\d+)?)/);
|
|
107
|
-
const amount = amountMatch ? Number(amountMatch[1]) : Number.NaN;
|
|
108
|
-
if (!Number.isFinite(amount) || amount <= 0)
|
|
109
|
-
continue;
|
|
110
|
-
const timeRefunded = extracted.value.match(/\btimeRefunded\s*:\s*([^,}]+)/)?.[1].trim();
|
|
111
|
-
const explicitlyRefunded = /\brefunded\s*:\s*true\b/.test(extracted.value) ||
|
|
112
|
-
(timeRefunded !== undefined && timeRefunded !== "null");
|
|
113
|
-
if (!explicitlyRefunded) {
|
|
114
|
-
return amount / OPENCODE_ZEN_BILLING_UNITS_PER_DOLLAR;
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
return null;
|
|
37
|
+
function parseBalance(json) {
|
|
38
|
+
const balance = parseMicroCents(asRecord(json)?.balanceMicroCents);
|
|
39
|
+
return balance === null ? invalidResponse() : Math.max(0, balance);
|
|
118
40
|
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
const items = html.split(/data-slot="billing-item"/);
|
|
124
|
-
for (let index = 1; index < items.length; index++) {
|
|
125
|
-
const content = items[index];
|
|
126
|
-
const labelMatch = content.match(/data-slot="billing-label">([^<]+)</);
|
|
127
|
-
if (!labelMatch)
|
|
128
|
-
continue;
|
|
129
|
-
const valueMatch = content.match(/data-slot="billing-value">[^$]*\$?(\d+(?:,\d{3})*(?:\.\d+)?)/);
|
|
130
|
-
if (!valueMatch)
|
|
131
|
-
continue;
|
|
132
|
-
const dollarAmount = Number.parseFloat(valueMatch[1].replace(/,/g, ""));
|
|
133
|
-
if (!Number.isFinite(dollarAmount) || dollarAmount < 0)
|
|
134
|
-
continue;
|
|
135
|
-
const label = labelMatch[1].trim().toLowerCase();
|
|
136
|
-
if (label.includes("balance")) {
|
|
137
|
-
balance = dollarAmount * OPENCODE_ZEN_BILLING_UNITS_PER_DOLLAR;
|
|
138
|
-
}
|
|
139
|
-
else if (label.includes("monthly") && label.includes("limit")) {
|
|
140
|
-
monthlyLimit = dollarAmount;
|
|
141
|
-
}
|
|
142
|
-
else if (label.includes("monthly") && label.includes("usage")) {
|
|
143
|
-
monthlyUsage = dollarAmount * OPENCODE_ZEN_BILLING_UNITS_PER_DOLLAR;
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
if (balance === null)
|
|
41
|
+
/** Returns the credit limit in USD, or null when the account has no limit. */
|
|
42
|
+
function parseCreditLimit(json) {
|
|
43
|
+
const value = asRecord(json)?.creditLimitMicroCents;
|
|
44
|
+
if (value === null)
|
|
147
45
|
return null;
|
|
46
|
+
const limit = parseMicroCents(value);
|
|
47
|
+
return limit === null ? invalidResponse() : limit / OPENCODE_ZEN_BILLING_UNITS_PER_DOLLAR;
|
|
48
|
+
}
|
|
49
|
+
function parseAutoRecharge(json) {
|
|
50
|
+
const autoRecharge = asRecord(json);
|
|
51
|
+
if (!autoRecharge || typeof autoRecharge.enabled !== "boolean")
|
|
52
|
+
return invalidResponse();
|
|
148
53
|
return {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
lastPayment: null,
|
|
153
|
-
reload: false,
|
|
154
|
-
reloadAmount: null,
|
|
155
|
-
reloadTrigger: null,
|
|
54
|
+
reload: autoRecharge.enabled,
|
|
55
|
+
reloadAmount: parseDollars(autoRecharge.rechargeAmountDollars),
|
|
56
|
+
reloadTrigger: parseDollars(autoRecharge.thresholdDollars),
|
|
156
57
|
};
|
|
157
58
|
}
|
|
158
|
-
function
|
|
159
|
-
|
|
160
|
-
/"payment\.list"\]\s*=\s*\[\s*\{[\s\S]*?"amount":\s*(\d+)/,
|
|
161
|
-
/"payment\.list"\s*:\s*\[[\s\S]*?"amount":\s*(\d+)/,
|
|
162
|
-
/__\$S\["payment\.list"\][\s\S]*?"amount":\s*(\d+)/,
|
|
163
|
-
];
|
|
164
|
-
for (const pattern of patterns) {
|
|
165
|
-
const match = pattern.exec(html);
|
|
166
|
-
if (!match)
|
|
167
|
-
continue;
|
|
168
|
-
const amount = Number(match[1]);
|
|
169
|
-
if (Number.isFinite(amount) && amount > 0) {
|
|
170
|
-
return amount / OPENCODE_ZEN_BILLING_UNITS_PER_DOLLAR;
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
return null;
|
|
59
|
+
function currentUtcMonth(now) {
|
|
60
|
+
return `${now.getUTCFullYear()}-${String(now.getUTCMonth() + 1).padStart(2, "0")}`;
|
|
174
61
|
}
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
const
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
if (
|
|
187
|
-
|
|
62
|
+
/** Sums the current UTC month's daily costs in micro-cents; an empty list means no usage. */
|
|
63
|
+
function parseMonthlyUsage(json, now) {
|
|
64
|
+
if (!Array.isArray(json))
|
|
65
|
+
return invalidResponse();
|
|
66
|
+
const month = currentUtcMonth(now);
|
|
67
|
+
let total = 0;
|
|
68
|
+
for (const item of json) {
|
|
69
|
+
const day = asRecord(item);
|
|
70
|
+
const cost = parseMicroCents(day?.totalCostMicroCents);
|
|
71
|
+
if (typeof day?.date !== "string" || cost === null)
|
|
72
|
+
return invalidResponse();
|
|
73
|
+
if (day.date.slice(0, 7) === month)
|
|
74
|
+
total += cost;
|
|
188
75
|
}
|
|
189
|
-
return
|
|
76
|
+
return Number.isFinite(total) ? total : invalidResponse();
|
|
190
77
|
}
|
|
191
78
|
function sanitizeMessage(text, secrets = [], maxLength = 120) {
|
|
192
79
|
let sanitized = sanitizeDisplayText(text).replace(/\s+/g, " ").trim();
|
|
@@ -196,53 +83,91 @@ function sanitizeMessage(text, secrets = [], maxLength = 120) {
|
|
|
196
83
|
}
|
|
197
84
|
return (sanitized || "unknown").slice(0, maxLength);
|
|
198
85
|
}
|
|
199
|
-
|
|
86
|
+
async function fetchConsoleRoute(params) {
|
|
200
87
|
try {
|
|
201
|
-
|
|
202
|
-
return await fetchWithTimeout(url, {
|
|
88
|
+
return await fetchWithTimeout(`${CONSOLE_API_URL}/${params.route}`, {
|
|
203
89
|
request: {
|
|
204
90
|
method: "GET",
|
|
91
|
+
redirect: "manual",
|
|
205
92
|
headers: {
|
|
206
93
|
"User-Agent": USER_AGENT,
|
|
207
|
-
Accept: "
|
|
208
|
-
Cookie: `
|
|
94
|
+
Accept: "application/json",
|
|
95
|
+
Cookie: `__Host-console_session=${params.consoleSessionCookie}`,
|
|
96
|
+
"x-org-id": params.workspaceId,
|
|
209
97
|
},
|
|
210
98
|
},
|
|
211
|
-
timeoutMs:
|
|
99
|
+
timeoutMs: params.timeoutMs,
|
|
212
100
|
consume: async (response) => {
|
|
101
|
+
if ((response.status >= 300 && response.status < 400) ||
|
|
102
|
+
response.status === 401 ||
|
|
103
|
+
response.status === 403) {
|
|
104
|
+
return { success: false, error: SESSION_ERROR };
|
|
105
|
+
}
|
|
213
106
|
if (!response.ok) {
|
|
214
107
|
return {
|
|
215
108
|
success: false,
|
|
216
|
-
error: `OpenCode
|
|
109
|
+
error: `OpenCode Console ${params.route} error ${response.status}`,
|
|
217
110
|
};
|
|
218
111
|
}
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
112
|
+
if (response.headers.get("content-type")?.includes("text/html")) {
|
|
113
|
+
return { success: false, error: SESSION_ERROR };
|
|
114
|
+
}
|
|
115
|
+
const text = await response.text();
|
|
116
|
+
try {
|
|
117
|
+
return { success: true, data: params.parse(JSON.parse(text)) };
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
224
120
|
return {
|
|
225
121
|
success: false,
|
|
226
|
-
error:
|
|
122
|
+
error: `Could not parse OpenCode Console ${params.route} response`,
|
|
227
123
|
};
|
|
228
124
|
}
|
|
229
|
-
data.lastPayment =
|
|
230
|
-
parseNewSsrPaymentData(html) ??
|
|
231
|
-
parseSsrPaymentData(html) ??
|
|
232
|
-
parseDataSlotPaymentData(html);
|
|
233
|
-
return { success: true, data };
|
|
234
125
|
},
|
|
235
126
|
});
|
|
236
127
|
}
|
|
237
128
|
catch (error) {
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
129
|
+
const message = sanitizeMessage(error instanceof Error ? error.message : String(error), [
|
|
130
|
+
params.consoleSessionCookie,
|
|
131
|
+
params.workspaceId,
|
|
132
|
+
]);
|
|
133
|
+
return { success: false, error: `OpenCode Console ${params.route} request failed: ${message}` };
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
export async function queryOpenCodeZenQuota(workspaceId, consoleSessionCookie, options = {}) {
|
|
137
|
+
const request = {
|
|
138
|
+
workspaceId,
|
|
139
|
+
consoleSessionCookie,
|
|
140
|
+
timeoutMs: options.requestTimeoutMs ?? CONSOLE_TIMEOUT_MS,
|
|
141
|
+
};
|
|
142
|
+
const now = new Date();
|
|
143
|
+
const [balance, creditLimit, autoRecharge, monthlyUsage] = await Promise.all([
|
|
144
|
+
fetchConsoleRoute({ ...request, route: "billing/status", parse: parseBalance }),
|
|
145
|
+
fetchConsoleRoute({ ...request, route: "billing/account", parse: parseCreditLimit }),
|
|
146
|
+
fetchConsoleRoute({ ...request, route: "billing/auto-recharge", parse: parseAutoRecharge }),
|
|
147
|
+
fetchConsoleRoute({
|
|
148
|
+
...request,
|
|
149
|
+
route: "usage/cost-by-day",
|
|
150
|
+
parse: (json) => parseMonthlyUsage(json, now),
|
|
151
|
+
}),
|
|
152
|
+
]);
|
|
153
|
+
const optional = [creditLimit, autoRecharge, monthlyUsage];
|
|
154
|
+
if ([balance, ...optional].some((result) => !result.success && result.error === SESSION_ERROR)) {
|
|
155
|
+
return { success: false, error: SESSION_ERROR };
|
|
245
156
|
}
|
|
157
|
+
if (!balance.success)
|
|
158
|
+
return balance;
|
|
159
|
+
return {
|
|
160
|
+
success: true,
|
|
161
|
+
data: {
|
|
162
|
+
balance: balance.data,
|
|
163
|
+
monthlyLimit: creditLimit.success ? creditLimit.data : null,
|
|
164
|
+
monthlyUsage: monthlyUsage.success ? monthlyUsage.data : null,
|
|
165
|
+
lastPayment: null,
|
|
166
|
+
...(autoRecharge.success
|
|
167
|
+
? autoRecharge.data
|
|
168
|
+
: { reload: null, reloadAmount: null, reloadTrigger: null }),
|
|
169
|
+
},
|
|
170
|
+
errors: optional.flatMap((result) => (result.success ? [] : [result.error])),
|
|
171
|
+
};
|
|
246
172
|
}
|
|
247
|
-
export { parseDataSlotBillingData as _parseDataSlotBillingData, parseDataSlotPaymentData as _parseDataSlotPaymentData, parseNewSsrBillingData as _parseNewSsrBillingData, parseNewSsrPaymentData as _parseNewSsrPaymentData, parseSsrBillingData as _parseSsrBillingData, parseSsrPaymentData as _parseSsrPaymentData, };
|
|
248
173
|
//# sourceMappingURL=opencode-zen.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-zen.js","sourceRoot":"","sources":["../../src/lib/opencode-zen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,MAAM,
|
|
1
|
+
{"version":3,"file":"opencode-zen.js","sourceRoot":"","sources":["../../src/lib/opencode-zen.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,6 @@ import { type CanonicalQuotaProviderId, type QuotaProviderAuthentication, type Q
|
|
|
2
2
|
export type { CanonicalQuotaProviderId, QuotaProviderAuthentication, QuotaProviderAuthFallback, QuotaProviderAutoSetup, QuotaProviderQuotaSource, } from "./provider-registration.js";
|
|
3
3
|
export interface QuotaProviderShape {
|
|
4
4
|
id: CanonicalQuotaProviderId;
|
|
5
|
-
lifecycle?: "deprecated";
|
|
6
5
|
recommendedReplacementId?: CanonicalQuotaProviderId;
|
|
7
6
|
autoSetup: QuotaProviderAutoSetup;
|
|
8
7
|
authentication: QuotaProviderAuthentication;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-metadata.d.ts","sourceRoot":"","sources":["../../src/lib/provider-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,wBAAwB,EAE7B,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAE9B,MAAM,4BAA4B,CAAC;AAEpC,YAAY,EACV,wBAAwB,EACxB,2BAA2B,EAC3B,yBAAyB,EACzB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,wBAAwB,CAAC;IAC7B,
|
|
1
|
+
{"version":3,"file":"provider-metadata.d.ts","sourceRoot":"","sources":["../../src/lib/provider-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,wBAAwB,EAE7B,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAE9B,MAAM,4BAA4B,CAAC;AAEpC,YAAY,EACV,wBAAwB,EACxB,2BAA2B,EAC3B,yBAAyB,EACzB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,wBAAwB,CAAC;IAC7B,wBAAwB,CAAC,EAAE,wBAAwB,CAAC;IACpD,SAAS,EAAE,sBAAsB,CAAC;IAClC,cAAc,EAAE,2BAA2B,CAAC;IAC5C,aAAa,CAAC,EAAE,yBAAyB,EAAE,CAAC;IAC5C,KAAK,EAAE,wBAAwB,CAAC;IAChC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,KAAK,EAAE,kBAAkB,CAAC;CAC3B;AAED,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAAC,MAAM,CAAC,wBAAwB,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;AAoDpG,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAC3C,MAAM,CAAC,wBAAwB,EAAE,yBAAyB,CAAC,CAe5D,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAKlE,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAIvE,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,uBAExC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,SAAS,kBAAkB,EAE9D,CAAC;AASF,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAG3D;AAED,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAKhF;AAED,wBAAgB,4BAA4B,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAG/D;AAED,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAOxE;AAED,wBAAgB,+BAA+B,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,wBAAwB,EAAE,CAK/F;AAED,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAE9D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-metadata.js","sourceRoot":"","sources":["../../src/lib/provider-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,kCAAkC,GAMnC,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"provider-metadata.js","sourceRoot":"","sources":["../../src/lib/provider-metadata.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,6 @@ export type QuotaProviderAuthentication = "opencode_auth_oauth_token" | "opencod
|
|
|
3
3
|
export type QuotaProviderAuthFallback = "env_api_key" | "global_opencode_config";
|
|
4
4
|
export type QuotaProviderQuotaSource = "remote_api" | "local_estimation" | "local_runtime_accounting" | "local_cli_report";
|
|
5
5
|
export interface QuotaProviderShapeSource {
|
|
6
|
-
lifecycle?: "deprecated";
|
|
7
6
|
recommendedReplacementId?: string;
|
|
8
7
|
autoSetup: QuotaProviderAutoSetup;
|
|
9
8
|
authentication: QuotaProviderAuthentication;
|
|
@@ -89,18 +88,6 @@ export declare const QUOTA_PROVIDER_REGISTRATION_SOURCE: readonly [{
|
|
|
89
88
|
readonly quickSetupAnchor: "cursor";
|
|
90
89
|
readonly notes: "companion runtime/plugin integration plus local usage accounting";
|
|
91
90
|
};
|
|
92
|
-
}, {
|
|
93
|
-
readonly id: "qwen-code";
|
|
94
|
-
readonly label: "Qwen";
|
|
95
|
-
readonly runtimeIds: readonly ["qwen-code"];
|
|
96
|
-
readonly synonyms: readonly ["qwen"];
|
|
97
|
-
readonly liveLocalUsage: true;
|
|
98
|
-
readonly shape: {
|
|
99
|
-
readonly autoSetup: "needs_quick_setup";
|
|
100
|
-
readonly authentication: "companion_auth_oauth_token";
|
|
101
|
-
readonly quota: "local_estimation";
|
|
102
|
-
readonly quickSetupAnchor: "qwen-code";
|
|
103
|
-
};
|
|
104
91
|
}, {
|
|
105
92
|
readonly id: "alibaba-coding-plan";
|
|
106
93
|
readonly label: "Alibaba Coding Plan";
|
|
@@ -146,24 +133,12 @@ export declare const QUOTA_PROVIDER_REGISTRATION_SOURCE: readonly [{
|
|
|
146
133
|
readonly authFallbacks: readonly ["env_api_key", "global_opencode_config"];
|
|
147
134
|
readonly quota: "remote_api";
|
|
148
135
|
};
|
|
149
|
-
}, {
|
|
150
|
-
readonly id: "google-antigravity";
|
|
151
|
-
readonly label: "Google";
|
|
152
|
-
readonly runtimeIds: readonly ["google-antigravity", "google", "antigravity"];
|
|
153
|
-
readonly synonyms: readonly [];
|
|
154
|
-
readonly shape: {
|
|
155
|
-
readonly autoSetup: "needs_quick_setup";
|
|
156
|
-
readonly authentication: "companion_auth_oauth_token";
|
|
157
|
-
readonly quota: "remote_api";
|
|
158
|
-
readonly quickSetupAnchor: "google-antigravity";
|
|
159
|
-
};
|
|
160
136
|
}, {
|
|
161
137
|
readonly id: "google-gemini-cli";
|
|
162
138
|
readonly label: "Gemini CLI";
|
|
163
139
|
readonly runtimeIds: readonly ["google-gemini-cli", "gemini-cli", "gemini", "opencode-gemini-auth", "google"];
|
|
164
140
|
readonly synonyms: readonly ["gemini-cli", "google-gemini", "opencode-gemini-auth", "gemini"];
|
|
165
141
|
readonly shape: {
|
|
166
|
-
readonly lifecycle: "deprecated";
|
|
167
142
|
readonly recommendedReplacementId: "google-agy";
|
|
168
143
|
readonly autoSetup: "needs_quick_setup";
|
|
169
144
|
readonly authentication: "companion_auth_oauth_token";
|
|
@@ -238,11 +213,22 @@ export declare const QUOTA_PROVIDER_REGISTRATION_SOURCE: readonly [{
|
|
|
238
213
|
readonly quota: "remote_api";
|
|
239
214
|
};
|
|
240
215
|
}, {
|
|
241
|
-
readonly id: "kimi-
|
|
216
|
+
readonly id: "kimi-code-plan-global";
|
|
242
217
|
readonly label: "Kimi Code";
|
|
218
|
+
readonly runtimeIds: readonly ["kimi-code-plan-global"];
|
|
219
|
+
readonly synonyms: readonly [];
|
|
220
|
+
readonly shape: {
|
|
221
|
+
readonly autoSetup: "yes";
|
|
222
|
+
readonly authentication: "opencode_auth_api_key";
|
|
223
|
+
readonly authFallbacks: readonly ["env_api_key", "global_opencode_config"];
|
|
224
|
+
readonly quota: "remote_api";
|
|
225
|
+
};
|
|
226
|
+
}, {
|
|
227
|
+
readonly id: "kimi-code-plan-cn";
|
|
228
|
+
readonly label: "Kimi Code (CN)";
|
|
243
229
|
readonly labelAliases: readonly ["kimi-code"];
|
|
244
|
-
readonly runtimeIds: readonly ["kimi-for-coding", "kimi", "kimi-code"];
|
|
245
|
-
readonly synonyms: readonly ["kimi", "kimi-for-code", "kimi-code"];
|
|
230
|
+
readonly runtimeIds: readonly ["kimi-code-plan-cn", "kimi-for-coding", "kimi", "kimi-code"];
|
|
231
|
+
readonly synonyms: readonly ["kimi", "kimi-for-code", "kimi-code", "kimi-for-coding"];
|
|
246
232
|
readonly shape: {
|
|
247
233
|
readonly autoSetup: "yes";
|
|
248
234
|
readonly authentication: "opencode_auth_api_key";
|
|
@@ -305,7 +291,7 @@ export declare const QUOTA_PROVIDER_REGISTRATION_SOURCE: readonly [{
|
|
|
305
291
|
readonly authentication: "state_only";
|
|
306
292
|
readonly quota: "remote_api";
|
|
307
293
|
readonly quickSetupAnchor: "opencode-zen";
|
|
308
|
-
readonly notes: "
|
|
294
|
+
readonly notes: "Reads the OpenCode Console billing API; requires workspaceId and consoleSessionCookie";
|
|
309
295
|
};
|
|
310
296
|
}, {
|
|
311
297
|
readonly id: "ollama-cloud";
|
|
@@ -317,7 +303,7 @@ export declare const QUOTA_PROVIDER_REGISTRATION_SOURCE: readonly [{
|
|
|
317
303
|
readonly authentication: "opencode_auth_api_key";
|
|
318
304
|
readonly authFallbacks: readonly ["env_api_key", "global_opencode_config"];
|
|
319
305
|
readonly quota: "remote_api";
|
|
320
|
-
readonly notes: "Queries the Ollama Cloud usage API; reports session
|
|
306
|
+
readonly notes: "Queries the Ollama Cloud usage API; reports session, weekly, or monthly usage fractions";
|
|
321
307
|
};
|
|
322
308
|
}, {
|
|
323
309
|
readonly id: "quota-providers";
|