@slkiser/opencode-quota 4.0.0 → 4.1.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 +37 -25
- package/dist/bin/opencode-quota.d.ts.map +1 -1
- package/dist/bin/opencode-quota.js +8 -0
- package/dist/bin/opencode-quota.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/lib/anthropic.d.ts.map +1 -1
- package/dist/lib/anthropic.js +78 -72
- package/dist/lib/anthropic.js.map +1 -1
- package/dist/lib/api-key-resolver.d.ts.map +1 -1
- package/dist/lib/api-key-resolver.js +14 -24
- package/dist/lib/api-key-resolver.js.map +1 -1
- package/dist/lib/atomic-json.d.ts +3 -1
- package/dist/lib/atomic-json.d.ts.map +1 -1
- package/dist/lib/atomic-json.js +23 -9
- package/dist/lib/atomic-json.js.map +1 -1
- package/dist/lib/chutes.d.ts.map +1 -1
- package/dist/lib/chutes.js +28 -23
- package/dist/lib/chutes.js.map +1 -1
- package/dist/lib/cli-show.d.ts +9 -0
- package/dist/lib/cli-show.d.ts.map +1 -1
- package/dist/lib/cli-show.js +34 -5
- package/dist/lib/cli-show.js.map +1 -1
- package/dist/lib/cli-status.d.ts +8 -0
- package/dist/lib/cli-status.d.ts.map +1 -0
- package/dist/lib/cli-status.js +125 -0
- package/dist/lib/cli-status.js.map +1 -0
- package/dist/lib/config.d.ts +1 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +47 -12
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/copilot.d.ts +11 -5
- package/dist/lib/copilot.d.ts.map +1 -1
- package/dist/lib/copilot.js +300 -52
- package/dist/lib/copilot.js.map +1 -1
- package/dist/lib/deepseek.d.ts.map +1 -1
- package/dist/lib/deepseek.js +22 -17
- package/dist/lib/deepseek.js.map +1 -1
- package/dist/lib/display-sanitize.d.ts.map +1 -1
- package/dist/lib/display-sanitize.js +8 -0
- package/dist/lib/display-sanitize.js.map +1 -1
- package/dist/lib/entries.d.ts +14 -1
- package/dist/lib/entries.d.ts.map +1 -1
- package/dist/lib/entries.js.map +1 -1
- package/dist/lib/format-utils.d.ts +7 -0
- package/dist/lib/format-utils.d.ts.map +1 -1
- package/dist/lib/format-utils.js +18 -0
- package/dist/lib/format-utils.js.map +1 -1
- package/dist/lib/format.d.ts +1 -0
- package/dist/lib/format.d.ts.map +1 -1
- package/dist/lib/format.js +22 -7
- package/dist/lib/format.js.map +1 -1
- package/dist/lib/google-agy.d.ts.map +1 -1
- package/dist/lib/google-agy.js +203 -92
- package/dist/lib/google-agy.js.map +1 -1
- package/dist/lib/google-gemini-cli.d.ts.map +1 -1
- package/dist/lib/google-gemini-cli.js +53 -41
- package/dist/lib/google-gemini-cli.js.map +1 -1
- package/dist/lib/google-token-cache.d.ts.map +1 -1
- package/dist/lib/google-token-cache.js +87 -34
- package/dist/lib/google-token-cache.js.map +1 -1
- package/dist/lib/google.d.ts.map +1 -1
- package/dist/lib/google.js +57 -39
- package/dist/lib/google.js.map +1 -1
- package/dist/lib/grouped-entry-normalization.d.ts.map +1 -1
- package/dist/lib/grouped-entry-normalization.js +7 -1
- package/dist/lib/grouped-entry-normalization.js.map +1 -1
- package/dist/lib/http.d.ts +12 -7
- package/dist/lib/http.d.ts.map +1 -1
- package/dist/lib/http.js +28 -15
- package/dist/lib/http.js.map +1 -1
- package/dist/lib/init-installer.d.ts +2 -1
- package/dist/lib/init-installer.d.ts.map +1 -1
- package/dist/lib/init-installer.js +29 -2
- package/dist/lib/init-installer.js.map +1 -1
- package/dist/lib/kimi.d.ts.map +1 -1
- package/dist/lib/kimi.js +20 -15
- package/dist/lib/kimi.js.map +1 -1
- package/dist/lib/maintainer-announcements.d.ts.map +1 -1
- package/dist/lib/maintainer-announcements.js +10 -13
- package/dist/lib/maintainer-announcements.js.map +1 -1
- package/dist/lib/mimo-config.d.ts +29 -0
- package/dist/lib/mimo-config.d.ts.map +1 -0
- package/dist/lib/mimo-config.js +147 -0
- package/dist/lib/mimo-config.js.map +1 -0
- package/dist/lib/mimo.d.ts +35 -0
- package/dist/lib/mimo.d.ts.map +1 -0
- package/dist/lib/mimo.js +236 -0
- package/dist/lib/mimo.js.map +1 -0
- package/dist/lib/modelsdev-pricing.d.ts.map +1 -1
- package/dist/lib/modelsdev-pricing.js +39 -27
- package/dist/lib/modelsdev-pricing.js.map +1 -1
- package/dist/lib/nanogpt.d.ts.map +1 -1
- package/dist/lib/nanogpt.js +40 -30
- package/dist/lib/nanogpt.js.map +1 -1
- package/dist/lib/ollama-cloud.d.ts +1 -1
- package/dist/lib/ollama-cloud.d.ts.map +1 -1
- package/dist/lib/ollama-cloud.js +73 -68
- package/dist/lib/ollama-cloud.js.map +1 -1
- package/dist/lib/openai.d.ts.map +1 -1
- package/dist/lib/openai.js +65 -45
- package/dist/lib/openai.js.map +1 -1
- package/dist/lib/opencode-config-editor.d.ts +6 -0
- package/dist/lib/opencode-config-editor.d.ts.map +1 -1
- package/dist/lib/opencode-config-editor.js +47 -1
- package/dist/lib/opencode-config-editor.js.map +1 -1
- package/dist/lib/opencode-config-providers.d.ts.map +1 -1
- package/dist/lib/opencode-config-providers.js +13 -16
- package/dist/lib/opencode-config-providers.js.map +1 -1
- package/dist/lib/opencode-config-read.d.ts +23 -0
- package/dist/lib/opencode-config-read.d.ts.map +1 -0
- package/dist/lib/opencode-config-read.js +30 -0
- package/dist/lib/opencode-config-read.js.map +1 -0
- package/dist/lib/opencode-go.d.ts.map +1 -1
- package/dist/lib/opencode-go.js +44 -39
- package/dist/lib/opencode-go.js.map +1 -1
- package/dist/lib/opencode-zen-config.d.ts +34 -0
- package/dist/lib/opencode-zen-config.d.ts.map +1 -0
- package/dist/lib/opencode-zen-config.js +103 -0
- package/dist/lib/opencode-zen-config.js.map +1 -0
- package/dist/lib/opencode-zen.d.ts +27 -0
- package/dist/lib/opencode-zen.d.ts.map +1 -0
- package/dist/lib/opencode-zen.js +143 -0
- package/dist/lib/opencode-zen.js.map +1 -0
- package/dist/lib/provider-add-command.d.ts.map +1 -1
- package/dist/lib/provider-add-command.js +21 -2
- package/dist/lib/provider-add-command.js.map +1 -1
- package/dist/lib/provider-add-json-v1-questionnaire.d.ts +32 -0
- package/dist/lib/provider-add-json-v1-questionnaire.d.ts.map +1 -0
- package/dist/lib/provider-add-json-v1-questionnaire.js +336 -0
- package/dist/lib/provider-add-json-v1-questionnaire.js.map +1 -0
- package/dist/lib/provider-add.d.ts.map +1 -1
- package/dist/lib/provider-add.js +11 -2
- package/dist/lib/provider-add.js.map +1 -1
- package/dist/lib/provider-availability.d.ts +2 -2
- package/dist/lib/provider-availability.d.ts.map +1 -1
- package/dist/lib/provider-availability.js +2 -3
- package/dist/lib/provider-availability.js.map +1 -1
- package/dist/lib/provider-metadata.d.ts +289 -1
- package/dist/lib/provider-metadata.d.ts.map +1 -1
- package/dist/lib/provider-metadata.js +321 -227
- package/dist/lib/provider-metadata.js.map +1 -1
- package/dist/lib/quota-command-format.d.ts.map +1 -1
- package/dist/lib/quota-command-format.js +12 -16
- package/dist/lib/quota-command-format.js.map +1 -1
- package/dist/lib/quota-dialog-commands.d.ts +59 -2
- package/dist/lib/quota-dialog-commands.d.ts.map +1 -1
- package/dist/lib/quota-dialog-commands.js +71 -30
- package/dist/lib/quota-dialog-commands.js.map +1 -1
- package/dist/lib/quota-entry-display.d.ts +2 -0
- package/dist/lib/quota-entry-display.d.ts.map +1 -1
- package/dist/lib/quota-entry-display.js +27 -13
- package/dist/lib/quota-entry-display.js.map +1 -1
- package/dist/lib/quota-providers-remote.d.ts +6 -1
- package/dist/lib/quota-providers-remote.d.ts.map +1 -1
- package/dist/lib/quota-providers-remote.js +376 -12
- package/dist/lib/quota-providers-remote.js.map +1 -1
- package/dist/lib/quota-providers.d.ts +84 -3
- package/dist/lib/quota-providers.d.ts.map +1 -1
- package/dist/lib/quota-providers.js +561 -24
- package/dist/lib/quota-providers.js.map +1 -1
- package/dist/lib/quota-render-data.d.ts +4 -0
- package/dist/lib/quota-render-data.d.ts.map +1 -1
- package/dist/lib/quota-render-data.js +101 -121
- package/dist/lib/quota-render-data.js.map +1 -1
- package/dist/lib/quota-runtime-context.d.ts +9 -1
- package/dist/lib/quota-runtime-context.d.ts.map +1 -1
- package/dist/lib/quota-runtime-context.js +5 -0
- 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 +26 -2
- package/dist/lib/quota-state.js.map +1 -1
- package/dist/lib/quota-stats.d.ts +1 -0
- package/dist/lib/quota-stats.d.ts.map +1 -1
- package/dist/lib/quota-stats.js +14 -4
- package/dist/lib/quota-stats.js.map +1 -1
- package/dist/lib/quota-status.d.ts.map +1 -1
- package/dist/lib/quota-status.js +96 -1
- package/dist/lib/quota-status.js.map +1 -1
- package/dist/lib/runtime-provider-ids.d.ts +4 -0
- package/dist/lib/runtime-provider-ids.d.ts.map +1 -0
- package/dist/lib/runtime-provider-ids.js +10 -0
- package/dist/lib/runtime-provider-ids.js.map +1 -0
- package/dist/lib/session-tokens.d.ts +2 -0
- package/dist/lib/session-tokens.d.ts.map +1 -1
- package/dist/lib/session-tokens.js +4 -2
- package/dist/lib/session-tokens.js.map +1 -1
- package/dist/lib/synthetic.d.ts.map +1 -1
- package/dist/lib/synthetic.js +37 -32
- package/dist/lib/synthetic.js.map +1 -1
- package/dist/lib/toast-format-grouped.d.ts +1 -0
- package/dist/lib/toast-format-grouped.d.ts.map +1 -1
- package/dist/lib/toast-format-grouped.js +33 -29
- package/dist/lib/toast-format-grouped.js.map +1 -1
- package/dist/lib/tui-refresh-lifecycle.d.ts +17 -0
- package/dist/lib/tui-refresh-lifecycle.d.ts.map +1 -0
- package/dist/lib/tui-refresh-lifecycle.js +83 -0
- package/dist/lib/tui-refresh-lifecycle.js.map +1 -0
- package/dist/lib/tui-runtime.d.ts +0 -5
- package/dist/lib/tui-runtime.d.ts.map +1 -1
- package/dist/lib/tui-runtime.js +1 -6
- package/dist/lib/tui-runtime.js.map +1 -1
- package/dist/lib/tui-sidebar-format.d.ts +1 -1
- package/dist/lib/tui-sidebar-format.d.ts.map +1 -1
- package/dist/lib/tui-sidebar-format.js +1 -0
- package/dist/lib/tui-sidebar-format.js.map +1 -1
- package/dist/lib/types.d.ts +61 -7
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/types.js +2 -0
- package/dist/lib/types.js.map +1 -1
- package/dist/lib/xai.d.ts +39 -0
- package/dist/lib/xai.d.ts.map +1 -0
- package/dist/lib/xai.js +153 -0
- package/dist/lib/xai.js.map +1 -0
- package/dist/lib/zai.d.ts.map +1 -1
- package/dist/lib/zai.js +62 -56
- package/dist/lib/zai.js.map +1 -1
- package/dist/lib/zhipu.d.ts.map +1 -1
- package/dist/lib/zhipu.js +55 -50
- package/dist/lib/zhipu.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +36 -157
- package/dist/plugin.js.map +1 -1
- package/dist/providers/copilot.d.ts.map +1 -1
- package/dist/providers/copilot.js +24 -3
- package/dist/providers/copilot.js.map +1 -1
- package/dist/providers/glm-coding-plan-provider.d.ts +35 -0
- package/dist/providers/glm-coding-plan-provider.d.ts.map +1 -0
- package/dist/providers/glm-coding-plan-provider.js +40 -0
- package/dist/providers/glm-coding-plan-provider.js.map +1 -0
- package/dist/providers/google-agy.d.ts.map +1 -1
- package/dist/providers/google-agy.js +60 -36
- package/dist/providers/google-agy.js.map +1 -1
- package/dist/providers/mimo.d.ts +3 -0
- package/dist/providers/mimo.d.ts.map +1 -0
- package/dist/providers/mimo.js +120 -0
- package/dist/providers/mimo.js.map +1 -0
- package/dist/providers/minimax-coding-plan.d.ts.map +1 -1
- package/dist/providers/minimax-coding-plan.js +60 -37
- package/dist/providers/minimax-coding-plan.js.map +1 -1
- package/dist/providers/opencode-zen.d.ts +3 -0
- package/dist/providers/opencode-zen.d.ts.map +1 -0
- package/dist/providers/opencode-zen.js +94 -0
- package/dist/providers/opencode-zen.js.map +1 -0
- package/dist/providers/quota-providers.d.ts.map +1 -1
- package/dist/providers/quota-providers.js +5 -3
- package/dist/providers/quota-providers.js.map +1 -1
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +6 -0
- package/dist/providers/registry.js.map +1 -1
- package/dist/providers/xai.d.ts +6 -0
- package/dist/providers/xai.d.ts.map +1 -0
- package/dist/providers/xai.js +51 -0
- package/dist/providers/xai.js.map +1 -0
- package/dist/providers/zai.d.ts +1 -7
- package/dist/providers/zai.d.ts.map +1 -1
- package/dist/providers/zai.js +9 -45
- package/dist/providers/zai.js.map +1 -1
- package/dist/providers/zhipu.d.ts +1 -7
- package/dist/providers/zhipu.d.ts.map +1 -1
- package/dist/providers/zhipu.js +9 -45
- package/dist/providers/zhipu.js.map +1 -1
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +47 -136
- package/dist/tui.tsx +62 -179
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode-zen-config.js","sourceRoot":"","sources":["../../src/lib/opencode-zen-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conversion used by the OpenCode billing-page values in PR #140.
|
|
3
|
+
* The source represents one US dollar as 100,000,000 billing units.
|
|
4
|
+
*/
|
|
5
|
+
export declare const OPENCODE_ZEN_BILLING_UNITS_PER_DOLLAR = 100000000;
|
|
6
|
+
export interface OpenCodeZenBillingData {
|
|
7
|
+
balance: number;
|
|
8
|
+
monthlyLimit: number | null;
|
|
9
|
+
monthlyUsage: number | null;
|
|
10
|
+
lastPayment: number | null;
|
|
11
|
+
}
|
|
12
|
+
export type OpenCodeZenResult = {
|
|
13
|
+
success: true;
|
|
14
|
+
data: OpenCodeZenBillingData;
|
|
15
|
+
} | {
|
|
16
|
+
success: false;
|
|
17
|
+
error: string;
|
|
18
|
+
};
|
|
19
|
+
declare function parseSsrBillingData(html: string): OpenCodeZenBillingData | null;
|
|
20
|
+
declare function parseDataSlotBillingData(html: string): OpenCodeZenBillingData | null;
|
|
21
|
+
declare function parseSsrPaymentData(html: string): number | null;
|
|
22
|
+
declare function parseDataSlotPaymentData(html: string): number | null;
|
|
23
|
+
export declare function queryOpenCodeZenQuota(workspaceId: string, authCookie: string, options?: {
|
|
24
|
+
requestTimeoutMs?: number;
|
|
25
|
+
}): Promise<OpenCodeZenResult>;
|
|
26
|
+
export { parseDataSlotBillingData as _parseDataSlotBillingData, parseDataSlotPaymentData as _parseDataSlotPaymentData, parseSsrBillingData as _parseSsrBillingData, parseSsrPaymentData as _parseSsrPaymentData, };
|
|
27
|
+
//# sourceMappingURL=opencode-zen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode-zen.d.ts","sourceRoot":"","sources":["../../src/lib/opencode-zen.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,eAAO,MAAM,qCAAqC,YAAc,CAAC;AAIjE,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,MAAM,iBAAiB,GACzB;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,sBAAsB,CAAA;CAAE,GAC/C;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtC,iBAAS,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI,CAgBxE;AAED,iBAAS,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI,CA+B7E;AAED,iBAAS,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAkBxD;AAED,iBAAS,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAkB7D;AAUD,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAO,GAC1C,OAAO,CAAC,iBAAiB,CAAC,CA4C5B;AAED,OAAO,EACL,wBAAwB,IAAI,yBAAyB,EACrD,wBAAwB,IAAI,yBAAyB,EACrD,mBAAmB,IAAI,oBAAoB,EAC3C,mBAAmB,IAAI,oBAAoB,GAC5C,CAAC"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { sanitizeDisplayText } from "./display-sanitize.js";
|
|
2
|
+
import { fetchWithTimeout } from "./http.js";
|
|
3
|
+
const BILLING_URL_PREFIX = "https://opencode.ai/workspace/";
|
|
4
|
+
const BILLING_URL_SUFFIX = "/billing";
|
|
5
|
+
const USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) Gecko/20100101 Firefox/148.0";
|
|
6
|
+
const SCRAPE_TIMEOUT_MS = 10_000;
|
|
7
|
+
/**
|
|
8
|
+
* Conversion used by the OpenCode billing-page values in PR #140.
|
|
9
|
+
* The source represents one US dollar as 100,000,000 billing units.
|
|
10
|
+
*/
|
|
11
|
+
export const OPENCODE_ZEN_BILLING_UNITS_PER_DOLLAR = 100_000_000;
|
|
12
|
+
const SSR_FIELD_RE = /\b(balance|monthlyLimit|monthlyUsage)\s*:\s*(\d+(?:\.\d+)?)\b/g;
|
|
13
|
+
function parseSsrBillingData(html) {
|
|
14
|
+
const fields = {};
|
|
15
|
+
for (const match of html.matchAll(SSR_FIELD_RE)) {
|
|
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
|
+
};
|
|
26
|
+
}
|
|
27
|
+
function parseDataSlotBillingData(html) {
|
|
28
|
+
let balance = null;
|
|
29
|
+
let monthlyLimit = null;
|
|
30
|
+
let monthlyUsage = null;
|
|
31
|
+
const items = html.split(/data-slot="billing-item"/);
|
|
32
|
+
for (let index = 1; index < items.length; index++) {
|
|
33
|
+
const content = items[index];
|
|
34
|
+
const labelMatch = content.match(/data-slot="billing-label">([^<]+)</);
|
|
35
|
+
if (!labelMatch)
|
|
36
|
+
continue;
|
|
37
|
+
const valueMatch = content.match(/data-slot="billing-value">[^$]*\$?(\d+(?:,\d{3})*(?:\.\d+)?)/);
|
|
38
|
+
if (!valueMatch)
|
|
39
|
+
continue;
|
|
40
|
+
const dollarAmount = Number.parseFloat(valueMatch[1].replace(/,/g, ""));
|
|
41
|
+
if (!Number.isFinite(dollarAmount) || dollarAmount < 0)
|
|
42
|
+
continue;
|
|
43
|
+
const label = labelMatch[1].trim().toLowerCase();
|
|
44
|
+
if (label.includes("balance")) {
|
|
45
|
+
balance = dollarAmount * OPENCODE_ZEN_BILLING_UNITS_PER_DOLLAR;
|
|
46
|
+
}
|
|
47
|
+
else if (label.includes("monthly") && label.includes("limit")) {
|
|
48
|
+
monthlyLimit = dollarAmount;
|
|
49
|
+
}
|
|
50
|
+
else if (label.includes("monthly") && label.includes("usage")) {
|
|
51
|
+
monthlyUsage = dollarAmount * OPENCODE_ZEN_BILLING_UNITS_PER_DOLLAR;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (balance === null)
|
|
55
|
+
return null;
|
|
56
|
+
return { balance, monthlyLimit, monthlyUsage, lastPayment: null };
|
|
57
|
+
}
|
|
58
|
+
function parseSsrPaymentData(html) {
|
|
59
|
+
const patterns = [
|
|
60
|
+
/"payment\.list"\]\s*=\s*\[\s*\{[\s\S]*?"amount":\s*(\d+)/,
|
|
61
|
+
/"payment\.list"\s*:\s*\[[\s\S]*?"amount":\s*(\d+)/,
|
|
62
|
+
/__\$S\["payment\.list"\][\s\S]*?"amount":\s*(\d+)/,
|
|
63
|
+
];
|
|
64
|
+
for (const pattern of patterns) {
|
|
65
|
+
const match = pattern.exec(html);
|
|
66
|
+
if (!match)
|
|
67
|
+
continue;
|
|
68
|
+
const amount = Number(match[1]);
|
|
69
|
+
if (Number.isFinite(amount) && amount > 0) {
|
|
70
|
+
return amount / OPENCODE_ZEN_BILLING_UNITS_PER_DOLLAR;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
function parseDataSlotPaymentData(html) {
|
|
76
|
+
const tableMatch = html.match(/<table[\s\S]*?data-slot="payments-table-element"[\s\S]*?<\/table>/i);
|
|
77
|
+
const tableHtml = tableMatch?.[0] ?? html;
|
|
78
|
+
const amountCellRe = /<td[\s\S]*?data-slot="payment-amount"([^>]*)>([\s\S]*?)<\/td>/gi;
|
|
79
|
+
for (const match of tableHtml.matchAll(amountCellRe)) {
|
|
80
|
+
if (/data-refunded="true"/.test(match[1]))
|
|
81
|
+
continue;
|
|
82
|
+
const dollarMatch = match[2].match(/\$?(\d+(?:,\d{3})*(?:\.\d{1,2})?)/);
|
|
83
|
+
if (!dollarMatch)
|
|
84
|
+
continue;
|
|
85
|
+
const amount = Number.parseFloat(dollarMatch[1].replace(/,/g, ""));
|
|
86
|
+
if (Number.isFinite(amount) && amount > 0)
|
|
87
|
+
return amount;
|
|
88
|
+
}
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
function sanitizeMessage(text, secrets = [], maxLength = 120) {
|
|
92
|
+
let sanitized = sanitizeDisplayText(text).replace(/\s+/g, " ").trim();
|
|
93
|
+
for (const secret of secrets) {
|
|
94
|
+
if (secret)
|
|
95
|
+
sanitized = sanitized.split(secret).join("[redacted]");
|
|
96
|
+
}
|
|
97
|
+
return (sanitized || "unknown").slice(0, maxLength);
|
|
98
|
+
}
|
|
99
|
+
export async function queryOpenCodeZenQuota(workspaceId, authCookie, options = {}) {
|
|
100
|
+
try {
|
|
101
|
+
const url = `${BILLING_URL_PREFIX}${encodeURIComponent(workspaceId)}${BILLING_URL_SUFFIX}`;
|
|
102
|
+
return await fetchWithTimeout(url, {
|
|
103
|
+
request: {
|
|
104
|
+
method: "GET",
|
|
105
|
+
headers: {
|
|
106
|
+
"User-Agent": USER_AGENT,
|
|
107
|
+
Accept: "text/html",
|
|
108
|
+
Cookie: `auth=${authCookie}`,
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
timeoutMs: options.requestTimeoutMs ?? SCRAPE_TIMEOUT_MS,
|
|
112
|
+
consume: async (response) => {
|
|
113
|
+
if (!response.ok) {
|
|
114
|
+
return {
|
|
115
|
+
success: false,
|
|
116
|
+
error: `OpenCode Zen billing error ${response.status}`,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
const html = await response.text();
|
|
120
|
+
const data = parseSsrBillingData(html) ?? parseDataSlotBillingData(html);
|
|
121
|
+
if (!data) {
|
|
122
|
+
return {
|
|
123
|
+
success: false,
|
|
124
|
+
error: "Could not parse OpenCode Zen billing data (balance, monthlyLimit, monthlyUsage) from the billing page",
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
data.lastPayment = parseSsrPaymentData(html) ?? parseDataSlotPaymentData(html);
|
|
128
|
+
return { success: true, data };
|
|
129
|
+
},
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
return {
|
|
134
|
+
success: false,
|
|
135
|
+
error: sanitizeMessage(error instanceof Error ? error.message : String(error), [
|
|
136
|
+
authCookie,
|
|
137
|
+
workspaceId,
|
|
138
|
+
]),
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
export { parseDataSlotBillingData as _parseDataSlotBillingData, parseDataSlotPaymentData as _parseDataSlotPaymentData, parseSsrBillingData as _parseSsrBillingData, parseSsrPaymentData as _parseSsrPaymentData, };
|
|
143
|
+
//# sourceMappingURL=opencode-zen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode-zen.js","sourceRoot":"","sources":["../../src/lib/opencode-zen.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-add-command.d.ts","sourceRoot":"","sources":["../../src/lib/provider-add-command.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"provider-add-command.d.ts","sourceRoot":"","sources":["../../src/lib/provider-add-command.ts"],"names":[],"mappings":"AAKA,KAAK,aAAa,GAAG;IACnB,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,MAAM,EAAE,CAAC,OAAO,EAAE;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAChE,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACvB,IAAI,EAAE,CAAC,OAAO,EAAE;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACvB,OAAO,EAAE,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACpF,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;IACtC,GAAG,EAAE;QACH,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;QAChC,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;QACnC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;QACjC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;KAClC,CAAC;CACH,CAAC;AAsFF,wBAAsB,qBAAqB,CACzC,MAAM,GAAE;IACN,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,aAAa,CAAC;CACpB,GACL,OAAO,CAAC,MAAM,CAAC,CA0IjB"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { promptJsonV1Adapter } from "./provider-add-json-v1-questionnaire.js";
|
|
1
2
|
import { applyProviderAddPlan, planProviderAdd } from "./provider-add.js";
|
|
3
|
+
const INVALID_JSON_V1_ADAPTER_MESSAGE = "Invalid json-v1 adapter JSON.";
|
|
2
4
|
function requiredText(value, prompts) {
|
|
3
5
|
if (prompts.isCancel(value))
|
|
4
6
|
return null;
|
|
@@ -129,18 +131,35 @@ export async function runProviderAddCommand(params = {}) {
|
|
|
129
131
|
const format = await prompts.select({
|
|
130
132
|
message: "Safe response format",
|
|
131
133
|
options: [
|
|
132
|
-
{ label: "
|
|
134
|
+
{ label: "quota-v1", value: "quota-v1" },
|
|
135
|
+
{ label: "json-v1", value: "json-v1" },
|
|
133
136
|
{ label: "openrouter-key-v1", value: "openrouter-key-v1" },
|
|
134
137
|
],
|
|
135
138
|
});
|
|
136
139
|
if (prompts.isCancel(format))
|
|
137
140
|
return 1;
|
|
141
|
+
let adapter;
|
|
142
|
+
if (format === "json-v1") {
|
|
143
|
+
const result = await promptJsonV1Adapter(prompts);
|
|
144
|
+
if (result.state === "cancelled") {
|
|
145
|
+
prompts.log.error(INVALID_JSON_V1_ADAPTER_MESSAGE);
|
|
146
|
+
return 1;
|
|
147
|
+
}
|
|
148
|
+
adapter = result.adapter;
|
|
149
|
+
}
|
|
138
150
|
const apiKeyEnv = optionalText(await prompts.text({
|
|
139
151
|
message: "API key environment variable name (optional; never the secret)",
|
|
140
152
|
}), prompts);
|
|
141
153
|
if (apiKeyEnv === null)
|
|
142
154
|
return 1;
|
|
143
|
-
definition = {
|
|
155
|
+
definition = {
|
|
156
|
+
...base,
|
|
157
|
+
mode,
|
|
158
|
+
url,
|
|
159
|
+
format,
|
|
160
|
+
...(format === "json-v1" ? { adapter } : {}),
|
|
161
|
+
...(apiKeyEnv ? { apiKeyEnv } : {}),
|
|
162
|
+
};
|
|
144
163
|
}
|
|
145
164
|
else {
|
|
146
165
|
const windows = await promptWindows(prompts);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-add-command.js","sourceRoot":"","sources":["../../src/lib/provider-add-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"provider-add-command.js","sourceRoot":"","sources":["../../src/lib/provider-add-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type JsonV1Adapter } from "./quota-providers.js";
|
|
2
|
+
type PromptOption<T extends string> = {
|
|
3
|
+
label: string;
|
|
4
|
+
value: T;
|
|
5
|
+
hint?: string;
|
|
6
|
+
};
|
|
7
|
+
export interface JsonV1QuestionnairePrompts {
|
|
8
|
+
select: (options: {
|
|
9
|
+
message: string;
|
|
10
|
+
options: Array<PromptOption<string>>;
|
|
11
|
+
initialValue?: string;
|
|
12
|
+
}) => Promise<unknown>;
|
|
13
|
+
text: (options: {
|
|
14
|
+
message: string;
|
|
15
|
+
placeholder?: string;
|
|
16
|
+
initialValue?: string;
|
|
17
|
+
}) => Promise<unknown>;
|
|
18
|
+
confirm: (options: {
|
|
19
|
+
message: string;
|
|
20
|
+
initialValue?: boolean;
|
|
21
|
+
}) => Promise<unknown>;
|
|
22
|
+
isCancel: (value: unknown) => boolean;
|
|
23
|
+
}
|
|
24
|
+
export type JsonV1QuestionnaireResult = {
|
|
25
|
+
state: "complete";
|
|
26
|
+
adapter: JsonV1Adapter;
|
|
27
|
+
} | {
|
|
28
|
+
state: "cancelled";
|
|
29
|
+
};
|
|
30
|
+
export declare function promptJsonV1Adapter(prompts: JsonV1QuestionnairePrompts): Promise<JsonV1QuestionnaireResult>;
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=provider-add-json-v1-questionnaire.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-add-json-v1-questionnaire.d.ts","sourceRoot":"","sources":["../../src/lib/provider-add-json-v1-questionnaire.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,aAAa,EAQnB,MAAM,sBAAsB,CAAC;AAE9B,KAAK,YAAY,CAAC,CAAC,SAAS,MAAM,IAAI;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,CAAC,CAAC;IACT,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,CAAC,OAAO,EAAE;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;QACrC,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACvB,IAAI,EAAE,CAAC,OAAO,EAAE;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACvB,OAAO,EAAE,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACpF,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;CACvC;AAED,MAAM,MAAM,yBAAyB,GACjC;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,aAAa,CAAA;CAAE,GAC7C;IAAE,KAAK,EAAE,WAAW,CAAA;CAAE,CAAC;AAsX3B,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,yBAAyB,CAAC,CA8BpC"}
|
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
import { JSON_V1_MAX_MAPPINGS, JSON_V1_MAX_PATH_SEGMENTS, } from "./quota-providers.js";
|
|
2
|
+
const RESULT_TYPE_OPTIONS = [
|
|
3
|
+
{ label: "Quota", value: "quota" },
|
|
4
|
+
{ label: "Rate limit", value: "rate_limit" },
|
|
5
|
+
{ label: "Usage", value: "usage" },
|
|
6
|
+
{ label: "Spend", value: "spend" },
|
|
7
|
+
{ label: "Budget", value: "budget" },
|
|
8
|
+
{ label: "Balance", value: "balance" },
|
|
9
|
+
{ label: "Status", value: "status" },
|
|
10
|
+
];
|
|
11
|
+
const TIMESTAMP_ENCODING_OPTIONS = [
|
|
12
|
+
{ label: "ISO 8601", value: "iso-8601", hint: "Example: 2026-07-23T12:00:00Z" },
|
|
13
|
+
{ label: "Unix seconds", value: "unix-seconds" },
|
|
14
|
+
{ label: "Unix milliseconds", value: "unix-milliseconds" },
|
|
15
|
+
];
|
|
16
|
+
function requiredText(value, prompts) {
|
|
17
|
+
if (prompts.isCancel(value))
|
|
18
|
+
return null;
|
|
19
|
+
const normalized = typeof value === "string" ? value.trim() : "";
|
|
20
|
+
return normalized || null;
|
|
21
|
+
}
|
|
22
|
+
function optionalText(value, prompts) {
|
|
23
|
+
if (prompts.isCancel(value))
|
|
24
|
+
return null;
|
|
25
|
+
if (typeof value !== "string" || value.trim() === "")
|
|
26
|
+
return undefined;
|
|
27
|
+
return value.trim();
|
|
28
|
+
}
|
|
29
|
+
async function selectChoice(prompts, options) {
|
|
30
|
+
const value = await prompts.select(options);
|
|
31
|
+
if (prompts.isCancel(value) ||
|
|
32
|
+
typeof value !== "string" ||
|
|
33
|
+
!options.options.some((option) => option.value === value)) {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
return value;
|
|
37
|
+
}
|
|
38
|
+
async function confirmChoice(prompts, message, initialValue) {
|
|
39
|
+
const value = await prompts.confirm({ message, initialValue });
|
|
40
|
+
return prompts.isCancel(value) || typeof value !== "boolean" ? null : value;
|
|
41
|
+
}
|
|
42
|
+
async function promptPath(prompts, purpose) {
|
|
43
|
+
const path = [];
|
|
44
|
+
while (path.length < JSON_V1_MAX_PATH_SEGMENTS) {
|
|
45
|
+
const ordinal = path.length + 1;
|
|
46
|
+
const segment = requiredText(await prompts.text({
|
|
47
|
+
message: `${purpose}: property segment ${ordinal}`,
|
|
48
|
+
placeholder: ordinal === 1 ? "data" : "items",
|
|
49
|
+
}), prompts);
|
|
50
|
+
if (!segment)
|
|
51
|
+
return null;
|
|
52
|
+
path.push(segment);
|
|
53
|
+
if (path.length === JSON_V1_MAX_PATH_SEGMENTS)
|
|
54
|
+
return path;
|
|
55
|
+
const addSegment = await confirmChoice(prompts, `Add another property segment to ${purpose}?`, false);
|
|
56
|
+
if (addSegment === null)
|
|
57
|
+
return null;
|
|
58
|
+
if (!addSegment)
|
|
59
|
+
return path;
|
|
60
|
+
}
|
|
61
|
+
return path;
|
|
62
|
+
}
|
|
63
|
+
async function promptNumberSource(prompts, name) {
|
|
64
|
+
const sourceType = await selectChoice(prompts, {
|
|
65
|
+
message: `${name} source`,
|
|
66
|
+
options: [
|
|
67
|
+
{ label: "Response field", value: "path", hint: "Choose property segments" },
|
|
68
|
+
{ label: "Fixed number", value: "literal", hint: "Saved in the config preview" },
|
|
69
|
+
],
|
|
70
|
+
initialValue: "path",
|
|
71
|
+
});
|
|
72
|
+
if (!sourceType)
|
|
73
|
+
return null;
|
|
74
|
+
if (sourceType === "literal") {
|
|
75
|
+
const literal = requiredText(await prompts.text({ message: `${name} fixed number`, placeholder: "0" }), prompts);
|
|
76
|
+
return literal === null ? null : { literal: Number(literal) };
|
|
77
|
+
}
|
|
78
|
+
const path = await promptPath(prompts, `${name} response field`);
|
|
79
|
+
if (!path)
|
|
80
|
+
return null;
|
|
81
|
+
const divideBy = await selectChoice(prompts, {
|
|
82
|
+
message: `Scale ${name} after reading it?`,
|
|
83
|
+
options: [
|
|
84
|
+
{ label: "Do not scale", value: "none" },
|
|
85
|
+
{ label: "Divide by 100", value: "100" },
|
|
86
|
+
{ label: "Divide by 1,000", value: "1000" },
|
|
87
|
+
{ label: "Divide by 1,000,000", value: "1000000" },
|
|
88
|
+
],
|
|
89
|
+
initialValue: "none",
|
|
90
|
+
});
|
|
91
|
+
if (!divideBy)
|
|
92
|
+
return null;
|
|
93
|
+
if (divideBy === "none")
|
|
94
|
+
return { path };
|
|
95
|
+
return { path, divideBy: Number(divideBy) };
|
|
96
|
+
}
|
|
97
|
+
async function promptTextSource(prompts, name) {
|
|
98
|
+
const sourceType = await selectChoice(prompts, {
|
|
99
|
+
message: `${name} source`,
|
|
100
|
+
options: [
|
|
101
|
+
{ label: "Response field", value: "path", hint: "Choose property segments" },
|
|
102
|
+
{ label: "Fixed text", value: "literal", hint: "Saved in the config preview" },
|
|
103
|
+
],
|
|
104
|
+
initialValue: "path",
|
|
105
|
+
});
|
|
106
|
+
if (!sourceType)
|
|
107
|
+
return null;
|
|
108
|
+
if (sourceType === "literal") {
|
|
109
|
+
const literal = requiredText(await prompts.text({ message: `${name} fixed text`, placeholder: "Available" }), prompts);
|
|
110
|
+
return literal === null ? null : { literal };
|
|
111
|
+
}
|
|
112
|
+
const path = await promptPath(prompts, `${name} response field`);
|
|
113
|
+
return path ? { path } : null;
|
|
114
|
+
}
|
|
115
|
+
async function promptTimestampSource(prompts, name) {
|
|
116
|
+
const sourceType = await selectChoice(prompts, {
|
|
117
|
+
message: `${name} source`,
|
|
118
|
+
options: [
|
|
119
|
+
{ label: "Response field", value: "path", hint: "Choose property segments" },
|
|
120
|
+
{ label: "Fixed timestamp", value: "literal", hint: "Saved in the config preview" },
|
|
121
|
+
],
|
|
122
|
+
initialValue: "path",
|
|
123
|
+
});
|
|
124
|
+
if (!sourceType)
|
|
125
|
+
return null;
|
|
126
|
+
const encoding = await selectChoice(prompts, {
|
|
127
|
+
message: `${name} format`,
|
|
128
|
+
options: TIMESTAMP_ENCODING_OPTIONS,
|
|
129
|
+
initialValue: "iso-8601",
|
|
130
|
+
});
|
|
131
|
+
if (!encoding)
|
|
132
|
+
return null;
|
|
133
|
+
if (sourceType === "path") {
|
|
134
|
+
const path = await promptPath(prompts, `${name} response field`);
|
|
135
|
+
return path ? { path, encoding } : null;
|
|
136
|
+
}
|
|
137
|
+
const literal = requiredText(await prompts.text({
|
|
138
|
+
message: `${name} fixed value`,
|
|
139
|
+
placeholder: encoding === "iso-8601" ? "2026-07-23T12:00:00Z" : "1784808000",
|
|
140
|
+
}), prompts);
|
|
141
|
+
if (literal === null)
|
|
142
|
+
return null;
|
|
143
|
+
return {
|
|
144
|
+
literal: encoding === "iso-8601" ? literal : Number(literal),
|
|
145
|
+
encoding,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
async function promptOptionalTimestamp(prompts, name) {
|
|
149
|
+
const include = await confirmChoice(prompts, `Add ${name}?`, false);
|
|
150
|
+
if (include === null)
|
|
151
|
+
return null;
|
|
152
|
+
if (!include)
|
|
153
|
+
return undefined;
|
|
154
|
+
return promptTimestampSource(prompts, name);
|
|
155
|
+
}
|
|
156
|
+
function metricOptions(resultType) {
|
|
157
|
+
if (resultType === "quota" || resultType === "rate_limit") {
|
|
158
|
+
return [
|
|
159
|
+
{ label: "Percentage", value: "percentage" },
|
|
160
|
+
{ label: "Used and limit", value: "used-limit" },
|
|
161
|
+
{ label: "Remaining and limit", value: "remaining-limit" },
|
|
162
|
+
{ label: "Used value", value: "value-used" },
|
|
163
|
+
{ label: "Limit value", value: "value-limit" },
|
|
164
|
+
{ label: "Remaining value", value: "value-remaining" },
|
|
165
|
+
];
|
|
166
|
+
}
|
|
167
|
+
if (resultType === "budget") {
|
|
168
|
+
return [
|
|
169
|
+
{ label: "Percentage", value: "percentage" },
|
|
170
|
+
{ label: "Spend and budget", value: "spend-budget" },
|
|
171
|
+
{ label: "Remaining and budget", value: "remaining-budget" },
|
|
172
|
+
{ label: "Budget value", value: "value-budget" },
|
|
173
|
+
];
|
|
174
|
+
}
|
|
175
|
+
return undefined;
|
|
176
|
+
}
|
|
177
|
+
async function promptMetric(prompts, resultType) {
|
|
178
|
+
let metricType;
|
|
179
|
+
const options = metricOptions(resultType);
|
|
180
|
+
if (options) {
|
|
181
|
+
const selected = await selectChoice(prompts, {
|
|
182
|
+
message: "How should this result be calculated?",
|
|
183
|
+
options,
|
|
184
|
+
initialValue: options[0].value,
|
|
185
|
+
});
|
|
186
|
+
if (!selected)
|
|
187
|
+
return null;
|
|
188
|
+
metricType = selected;
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
metricType =
|
|
192
|
+
resultType === "usage"
|
|
193
|
+
? "value-used"
|
|
194
|
+
: resultType === "spend"
|
|
195
|
+
? "value-spend"
|
|
196
|
+
: resultType === "balance"
|
|
197
|
+
? "value-balance"
|
|
198
|
+
: "status";
|
|
199
|
+
}
|
|
200
|
+
if (metricType === "percentage") {
|
|
201
|
+
const meaning = await selectChoice(prompts, {
|
|
202
|
+
message: "What does the percentage mean?",
|
|
203
|
+
options: [
|
|
204
|
+
{ label: "Remaining", value: "remaining" },
|
|
205
|
+
{ label: "Used", value: "used" },
|
|
206
|
+
],
|
|
207
|
+
initialValue: "remaining",
|
|
208
|
+
});
|
|
209
|
+
if (!meaning)
|
|
210
|
+
return null;
|
|
211
|
+
const percentage = await promptNumberSource(prompts, "Percentage");
|
|
212
|
+
return percentage ? { type: "percentage", percentage, meaning } : null;
|
|
213
|
+
}
|
|
214
|
+
if (metricType === "used-limit") {
|
|
215
|
+
const used = await promptNumberSource(prompts, "Used");
|
|
216
|
+
if (!used)
|
|
217
|
+
return null;
|
|
218
|
+
const limit = await promptNumberSource(prompts, "Limit");
|
|
219
|
+
return limit ? { type: "used-limit", used, limit } : null;
|
|
220
|
+
}
|
|
221
|
+
if (metricType === "remaining-limit") {
|
|
222
|
+
const remaining = await promptNumberSource(prompts, "Remaining");
|
|
223
|
+
if (!remaining)
|
|
224
|
+
return null;
|
|
225
|
+
const limit = await promptNumberSource(prompts, "Limit");
|
|
226
|
+
return limit ? { type: "remaining-limit", remaining, limit } : null;
|
|
227
|
+
}
|
|
228
|
+
if (metricType === "spend-budget") {
|
|
229
|
+
const spend = await promptNumberSource(prompts, "Spend");
|
|
230
|
+
if (!spend)
|
|
231
|
+
return null;
|
|
232
|
+
const budget = await promptNumberSource(prompts, "Budget");
|
|
233
|
+
return budget ? { type: "spend-budget", spend, budget } : null;
|
|
234
|
+
}
|
|
235
|
+
if (metricType === "remaining-budget") {
|
|
236
|
+
const remaining = await promptNumberSource(prompts, "Remaining");
|
|
237
|
+
if (!remaining)
|
|
238
|
+
return null;
|
|
239
|
+
const budget = await promptNumberSource(prompts, "Budget");
|
|
240
|
+
return budget ? { type: "remaining-budget", remaining, budget } : null;
|
|
241
|
+
}
|
|
242
|
+
if (metricType === "status") {
|
|
243
|
+
const value = await promptTextSource(prompts, "Status");
|
|
244
|
+
return value ? { type: "status", value } : null;
|
|
245
|
+
}
|
|
246
|
+
const valueType = metricType.slice("value-".length);
|
|
247
|
+
const value = await promptNumberSource(prompts, "Value");
|
|
248
|
+
return value ? { type: "value", valueType, value } : null;
|
|
249
|
+
}
|
|
250
|
+
async function promptMapping(prompts, ordinal) {
|
|
251
|
+
const resultType = await selectChoice(prompts, {
|
|
252
|
+
message: `Mapping ${ordinal} result type`,
|
|
253
|
+
options: RESULT_TYPE_OPTIONS,
|
|
254
|
+
initialValue: "quota",
|
|
255
|
+
});
|
|
256
|
+
if (!resultType)
|
|
257
|
+
return null;
|
|
258
|
+
const name = requiredText(await prompts.text({ message: `Mapping ${ordinal} name`, placeholder: "Requests" }), prompts);
|
|
259
|
+
if (!name)
|
|
260
|
+
return null;
|
|
261
|
+
const label = optionalText(await prompts.text({ message: `Mapping ${ordinal} display label (optional)` }), prompts);
|
|
262
|
+
if (label === null)
|
|
263
|
+
return null;
|
|
264
|
+
const metric = await promptMetric(prompts, resultType);
|
|
265
|
+
if (!metric)
|
|
266
|
+
return null;
|
|
267
|
+
let unit;
|
|
268
|
+
let unitPosition;
|
|
269
|
+
if (metric.type !== "percentage" && metric.type !== "status") {
|
|
270
|
+
const unitAnswer = optionalText(await prompts.text({
|
|
271
|
+
message: `Mapping ${ordinal} unit (optional; saved in config)`,
|
|
272
|
+
placeholder: "requests",
|
|
273
|
+
}), prompts);
|
|
274
|
+
if (unitAnswer === null)
|
|
275
|
+
return null;
|
|
276
|
+
unit = unitAnswer;
|
|
277
|
+
if (unit) {
|
|
278
|
+
const position = await selectChoice(prompts, {
|
|
279
|
+
message: `Mapping ${ordinal} unit position`,
|
|
280
|
+
options: [
|
|
281
|
+
{ label: "Before the value", value: "prefix" },
|
|
282
|
+
{ label: "After the value", value: "suffix" },
|
|
283
|
+
],
|
|
284
|
+
initialValue: "suffix",
|
|
285
|
+
});
|
|
286
|
+
if (!position)
|
|
287
|
+
return null;
|
|
288
|
+
unitPosition = position;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
const resetTime = await promptOptionalTimestamp(prompts, "reset time");
|
|
292
|
+
if (resetTime === null)
|
|
293
|
+
return null;
|
|
294
|
+
const observedTime = await promptOptionalTimestamp(prompts, "observed time");
|
|
295
|
+
if (observedTime === null)
|
|
296
|
+
return null;
|
|
297
|
+
return {
|
|
298
|
+
resultType,
|
|
299
|
+
name,
|
|
300
|
+
...(label ? { label } : {}),
|
|
301
|
+
...(unit ? { unit, unitPosition } : {}),
|
|
302
|
+
...(resetTime ? { resetTime } : {}),
|
|
303
|
+
...(observedTime ? { observedTime } : {}),
|
|
304
|
+
metric,
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
export async function promptJsonV1Adapter(prompts) {
|
|
308
|
+
const nestedRows = await confirmChoice(prompts, "Are response rows inside a nested property?", false);
|
|
309
|
+
if (nestedRows === null)
|
|
310
|
+
return { state: "cancelled" };
|
|
311
|
+
const rowsPath = nestedRows ? await promptPath(prompts, "Rows path") : undefined;
|
|
312
|
+
if (rowsPath === null)
|
|
313
|
+
return { state: "cancelled" };
|
|
314
|
+
const mappings = [];
|
|
315
|
+
while (mappings.length < JSON_V1_MAX_MAPPINGS) {
|
|
316
|
+
const mapping = await promptMapping(prompts, mappings.length + 1);
|
|
317
|
+
if (!mapping)
|
|
318
|
+
return { state: "cancelled" };
|
|
319
|
+
mappings.push(mapping);
|
|
320
|
+
if (mappings.length === JSON_V1_MAX_MAPPINGS)
|
|
321
|
+
break;
|
|
322
|
+
const addAnother = await confirmChoice(prompts, "Add another response mapping?", false);
|
|
323
|
+
if (addAnother === null)
|
|
324
|
+
return { state: "cancelled" };
|
|
325
|
+
if (!addAnother)
|
|
326
|
+
break;
|
|
327
|
+
}
|
|
328
|
+
return {
|
|
329
|
+
state: "complete",
|
|
330
|
+
adapter: {
|
|
331
|
+
...(rowsPath ? { rowsPath } : {}),
|
|
332
|
+
mappings,
|
|
333
|
+
},
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
//# sourceMappingURL=provider-add-json-v1-questionnaire.js.map
|