@vm0/cli 9.249.1 → 9.249.2
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/{agent-PMWDKCSZ.js → agent-TOFXTWYP.js} +11 -10
- package/{agent-PMWDKCSZ.js.map → agent-TOFXTWYP.js.map} +1 -1
- package/{banking-S5RH46G5.js → banking-U7I6EJUO.js} +8 -7
- package/{banking-S5RH46G5.js.map → banking-U7I6EJUO.js.map} +1 -1
- package/{chat-2ZTZUIWC.js → chat-77EDGFMS.js} +9 -8
- package/{chat-2ZTZUIWC.js.map → chat-77EDGFMS.js.map} +1 -1
- package/{chunk-DIRAZ3YX.js → chunk-3VVCUQPB.js} +3 -3
- package/{chunk-DIRAZ3YX.js.map → chunk-3VVCUQPB.js.map} +1 -1
- package/{chunk-PLOJYRFL.js → chunk-4HN7U3JF.js} +40 -564
- package/chunk-4HN7U3JF.js.map +1 -0
- package/{chunk-FF5L22OE.js → chunk-5CZNUTFF.js} +3 -3
- package/chunk-A2NKQGRI.js +491 -0
- package/chunk-A2NKQGRI.js.map +1 -0
- package/{chunk-J2I5GYLR.js → chunk-AFNSFKAH.js} +5 -5
- package/{chunk-L63QVTYZ.js → chunk-BQOOTJNB.js} +27 -672
- package/chunk-BQOOTJNB.js.map +1 -0
- package/{chunk-KLIW3XK7.js → chunk-GPF7NSX7.js} +2 -2
- package/{chunk-HUMR2SA3.js → chunk-HSGQT7LT.js} +3 -3
- package/{chunk-SAW74AR6.js → chunk-JCLLQRCI.js} +3 -3
- package/{chunk-B3W2RUBP.js → chunk-LD4ZVU4O.js} +2 -2
- package/chunk-N6TDQYGF.js +678 -0
- package/chunk-N6TDQYGF.js.map +1 -0
- package/{chunk-KQN5YZZP.js → chunk-ROB3OE37.js} +10 -113
- package/chunk-ROB3OE37.js.map +1 -0
- package/{chunk-LTDQISD7.js → chunk-SB7EZ2ZO.js} +2 -2
- package/{chunk-RTYT3CSZ.js → chunk-UG5XA6KU.js} +2 -2
- package/{chunk-LKDE4AUC.js → chunk-UNQJRTJQ.js} +3 -3
- package/chunk-W75R7EZF.js +17 -0
- package/chunk-W75R7EZF.js.map +1 -0
- package/chunk-WDDZJGWL.js +32 -0
- package/chunk-WDDZJGWL.js.map +1 -0
- package/{chunk-JFY6GK7Y.js → chunk-X2545RBX.js} +2 -2
- package/{chunk-ZE2VIESK.js → chunk-X4DBCBU4.js} +2 -2
- package/{computer-use-GRK4TZYN.js → computer-use-BCGPVGWS.js} +7 -6
- package/{computer-use-GRK4TZYN.js.map → computer-use-BCGPVGWS.js.map} +1 -1
- package/{connector-2SVH4F2N.js → connector-CHZSI2LW.js} +14 -13
- package/{connector-2SVH4F2N.js.map → connector-CHZSI2LW.js.map} +1 -1
- package/credit-RWFBPKOS.js +166 -0
- package/credit-RWFBPKOS.js.map +1 -0
- package/{developer-support-RYTLIFUN.js → developer-support-IVR3HIP7.js} +8 -7
- package/{developer-support-RYTLIFUN.js.map → developer-support-IVR3HIP7.js.map} +1 -1
- package/{doctor-CS5TFE6A.js → doctor-KGWTXW2Q.js} +39 -13
- package/doctor-KGWTXW2Q.js.map +1 -0
- package/{esm-PZKPCIYJ.js → esm-GOCEMHJO.js} +3 -3
- package/{feishu-HFQIJDBU.js → feishu-PLF4P5OG.js} +8 -7
- package/{feishu-HFQIJDBU.js.map → feishu-PLF4P5OG.js.map} +1 -1
- package/{finance-56HIRALT.js → finance-LVFG3WWP.js} +8 -7
- package/{finance-56HIRALT.js.map → finance-LVFG3WWP.js.map} +1 -1
- package/{generate-4FEC4YVM.js → generate-4FIBMMJO.js} +77 -22
- package/generate-4FIBMMJO.js.map +1 -0
- package/{getMachineId-bsd-L73QENVB.js → getMachineId-bsd-SB7C44VX.js} +4 -4
- package/{getMachineId-darwin-TCCWKQ2S.js → getMachineId-darwin-R4BWY3CQ.js} +4 -4
- package/{getMachineId-linux-TJYYUZVM.js → getMachineId-linux-BR4HVNPW.js} +3 -3
- package/{getMachineId-unsupported-DPRVLH4Y.js → getMachineId-unsupported-FPGM635L.js} +3 -3
- package/{getMachineId-win-7EE436CJ.js → getMachineId-win-RB4JMF33.js} +4 -4
- package/{github-AALJ7IEM.js → github-WHNAVVG3.js} +8 -7
- package/{github-AALJ7IEM.js.map → github-WHNAVVG3.js.map} +1 -1
- package/{goal-CFSXEKHU.js → goal-G4J2BQ5Z.js} +8 -7
- package/{goal-CFSXEKHU.js.map → goal-G4J2BQ5Z.js.map} +1 -1
- package/{host-6NKXFQCO.js → host-3W6U2ZUP.js} +8 -7
- package/{host-6NKXFQCO.js.map → host-3W6U2ZUP.js.map} +1 -1
- package/{intro-MIVVJG7M.js → intro-PMHOBGDL.js} +3 -3
- package/{logs-F4KPELTF.js → logs-P7JLTGXY.js} +10 -9
- package/{logs-F4KPELTF.js.map → logs-P7JLTGXY.js.map} +1 -1
- package/{mail-RZTLZU3I.js → mail-LIAOXDD4.js} +12 -11
- package/{mail-RZTLZU3I.js.map → mail-LIAOXDD4.js.map} +1 -1
- package/{maps-QRHGR33R.js → maps-C4NOXSE7.js} +8 -7
- package/{maps-QRHGR33R.js.map → maps-C4NOXSE7.js.map} +1 -1
- package/{model-6N5VPIS5.js → model-I2MNQ5KC.js} +9 -8
- package/{model-6N5VPIS5.js.map → model-I2MNQ5KC.js.map} +1 -1
- package/{model-provider-UZO32ZTC.js → model-provider-AOCCHEMP.js} +9 -8
- package/{model-provider-UZO32ZTC.js.map → model-provider-AOCCHEMP.js.map} +1 -1
- package/{org-26ZL2W2U.js → org-MVBG3WXZ.js} +9 -8
- package/{org-26ZL2W2U.js.map → org-MVBG3WXZ.js.map} +1 -1
- package/package.json +1 -1
- package/{phone-QTRZLYIG.js → phone-4OZQFYHU.js} +8 -7
- package/{phone-QTRZLYIG.js.map → phone-4OZQFYHU.js.map} +1 -1
- package/{preference-JCFTTUBN.js → preference-H2A3WBGQ.js} +9 -8
- package/{preference-JCFTTUBN.js.map → preference-H2A3WBGQ.js.map} +1 -1
- package/{resource-64R7T4FF.js → resource-CPCQ6V6M.js} +9 -8
- package/{resource-64R7T4FF.js.map → resource-CPCQ6V6M.js.map} +1 -1
- package/{scrape-LVGJ56IS.js → scrape-6RMFDYAT.js} +8 -7
- package/{scrape-LVGJ56IS.js.map → scrape-6RMFDYAT.js.map} +1 -1
- package/{search-TRISF64L.js → search-HSQVSQZY.js} +10 -9
- package/{search-TRISF64L.js.map → search-HSQVSQZY.js.map} +1 -1
- package/{secret-UAJDU3SX.js → secret-S4D6CNOX.js} +9 -8
- package/{secret-UAJDU3SX.js.map → secret-S4D6CNOX.js.map} +1 -1
- package/{slack-PDOPNS5Z.js → slack-E3E2NIDZ.js} +50 -175
- package/slack-E3E2NIDZ.js.map +1 -0
- package/{teams-BL36IS5U.js → teams-CLEWT2LQ.js} +8 -7
- package/{teams-BL36IS5U.js.map → teams-CLEWT2LQ.js.map} +1 -1
- package/{telegram-X7YTUVNV.js → telegram-35FKKA4K.js} +8 -7
- package/{telegram-X7YTUVNV.js.map → telegram-35FKKA4K.js.map} +1 -1
- package/{undici-ZMFN7TNU.js → undici-YXSVPIYI.js} +2 -2
- package/upgrade-DNGUR42E.js +50 -0
- package/upgrade-DNGUR42E.js.map +1 -0
- package/{variable-EBCBNZSU.js → variable-C7RWUPV6.js} +9 -8
- package/{variable-EBCBNZSU.js.map → variable-C7RWUPV6.js.map} +1 -1
- package/{video-3HFJJJEE.js → video-JS5VOA2S.js} +9 -7
- package/{video-3HFJJJEE.js.map → video-JS5VOA2S.js.map} +1 -1
- package/{weather-Y37FKFKU.js → weather-5R2N5OX4.js} +8 -7
- package/{weather-Y37FKFKU.js.map → weather-5R2N5OX4.js.map} +1 -1
- package/{web-ZEWEVAI3.js → web-FXIIYCZ7.js} +10 -8
- package/{web-ZEWEVAI3.js.map → web-FXIIYCZ7.js.map} +1 -1
- package/{web-search-37SGCKB7.js → web-search-SZP7J4UM.js} +8 -7
- package/{web-search-37SGCKB7.js.map → web-search-SZP7J4UM.js.map} +1 -1
- package/{whoami-VZI6VS4C.js → whoami-J4FRN67A.js} +10 -9
- package/{whoami-VZI6VS4C.js.map → whoami-J4FRN67A.js.map} +1 -1
- package/{workflow-3WGBRMM5.js → workflow-HQHZKXB2.js} +9 -8
- package/{workflow-3WGBRMM5.js.map → workflow-HQHZKXB2.js.map} +1 -1
- package/zero.js +88 -61
- package/zero.js.map +1 -1
- package/chunk-KQN5YZZP.js.map +0 -1
- package/chunk-L63QVTYZ.js.map +0 -1
- package/chunk-LRHXR7JT.js +0 -33
- package/chunk-LRHXR7JT.js.map +0 -1
- package/chunk-PLOJYRFL.js.map +0 -1
- package/credit-LGMFDRFK.js +0 -128
- package/credit-LGMFDRFK.js.map +0 -1
- package/doctor-CS5TFE6A.js.map +0 -1
- package/generate-4FEC4YVM.js.map +0 -1
- package/slack-PDOPNS5Z.js.map +0 -1
- /package/{chunk-FF5L22OE.js.map → chunk-5CZNUTFF.js.map} +0 -0
- /package/{chunk-J2I5GYLR.js.map → chunk-AFNSFKAH.js.map} +0 -0
- /package/{chunk-KLIW3XK7.js.map → chunk-GPF7NSX7.js.map} +0 -0
- /package/{chunk-HUMR2SA3.js.map → chunk-HSGQT7LT.js.map} +0 -0
- /package/{chunk-SAW74AR6.js.map → chunk-JCLLQRCI.js.map} +0 -0
- /package/{chunk-B3W2RUBP.js.map → chunk-LD4ZVU4O.js.map} +0 -0
- /package/{chunk-LTDQISD7.js.map → chunk-SB7EZ2ZO.js.map} +0 -0
- /package/{chunk-RTYT3CSZ.js.map → chunk-UG5XA6KU.js.map} +0 -0
- /package/{chunk-LKDE4AUC.js.map → chunk-UNQJRTJQ.js.map} +0 -0
- /package/{chunk-JFY6GK7Y.js.map → chunk-X2545RBX.js.map} +0 -0
- /package/{chunk-ZE2VIESK.js.map → chunk-X4DBCBU4.js.map} +0 -0
- /package/{esm-PZKPCIYJ.js.map → esm-GOCEMHJO.js.map} +0 -0
- /package/{getMachineId-bsd-L73QENVB.js.map → getMachineId-bsd-SB7C44VX.js.map} +0 -0
- /package/{getMachineId-darwin-TCCWKQ2S.js.map → getMachineId-darwin-R4BWY3CQ.js.map} +0 -0
- /package/{getMachineId-linux-TJYYUZVM.js.map → getMachineId-linux-BR4HVNPW.js.map} +0 -0
- /package/{getMachineId-unsupported-DPRVLH4Y.js.map → getMachineId-unsupported-FPGM635L.js.map} +0 -0
- /package/{getMachineId-win-7EE436CJ.js.map → getMachineId-win-RB4JMF33.js.map} +0 -0
- /package/{intro-MIVVJG7M.js.map → intro-PMHOBGDL.js.map} +0 -0
- /package/{undici-ZMFN7TNU.js.map → undici-YXSVPIYI.js.map} +0 -0
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire as __createRequire } from "node:module";
|
|
3
|
+
const require = __createRequire(import.meta.url);
|
|
4
|
+
import {
|
|
5
|
+
currentPlanAllowsVideo,
|
|
6
|
+
currentPlanCanBuyCredits,
|
|
7
|
+
currentTokenCanReadBilling
|
|
8
|
+
} from "./chunk-WDDZJGWL.js";
|
|
9
|
+
import {
|
|
10
|
+
createZeroCreditCheckout,
|
|
11
|
+
getZeroBillingStatus,
|
|
12
|
+
getZeroOrgMembers
|
|
13
|
+
} from "./chunk-ROB3OE37.js";
|
|
14
|
+
import "./chunk-N6TDQYGF.js";
|
|
15
|
+
import {
|
|
16
|
+
planUpgradeUrl
|
|
17
|
+
} from "./chunk-W75R7EZF.js";
|
|
18
|
+
import {
|
|
19
|
+
getPlatformOrigin
|
|
20
|
+
} from "./chunk-JCLLQRCI.js";
|
|
21
|
+
import "./chunk-SB7EZ2ZO.js";
|
|
22
|
+
import {
|
|
23
|
+
source_default,
|
|
24
|
+
withErrorHandler
|
|
25
|
+
} from "./chunk-BQOOTJNB.js";
|
|
26
|
+
import {
|
|
27
|
+
decodeZeroTokenPayload
|
|
28
|
+
} from "./chunk-A2NKQGRI.js";
|
|
29
|
+
import {
|
|
30
|
+
Command,
|
|
31
|
+
Option
|
|
32
|
+
} from "./chunk-LD4ZVU4O.js";
|
|
33
|
+
import {
|
|
34
|
+
init_esm_shims
|
|
35
|
+
} from "./chunk-3VVCUQPB.js";
|
|
36
|
+
|
|
37
|
+
// src/commands/zero/credit.ts
|
|
38
|
+
init_esm_shims();
|
|
39
|
+
function parseCredits(value) {
|
|
40
|
+
const credits = Number(value.replaceAll(",", ""));
|
|
41
|
+
if (!Number.isInteger(credits) || credits <= 0) {
|
|
42
|
+
throw new Error("credits must be a positive integer");
|
|
43
|
+
}
|
|
44
|
+
return credits;
|
|
45
|
+
}
|
|
46
|
+
function requireZeroCapabilityForCreditAction(capability, message) {
|
|
47
|
+
const payload = decodeZeroTokenPayload();
|
|
48
|
+
if (payload && !payload.capabilities.includes(capability)) {
|
|
49
|
+
throw new Error(message);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function autoRechargeConfiguration(options) {
|
|
53
|
+
if (options.autoRecharge !== true && (options.autoRechargeThreshold !== void 0 || options.autoRechargeAmount !== void 0)) {
|
|
54
|
+
throw new Error(
|
|
55
|
+
"--auto-recharge-threshold and --auto-recharge-amount require --auto-recharge"
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
if (options.autoRecharge !== true) {
|
|
59
|
+
return void 0;
|
|
60
|
+
}
|
|
61
|
+
if (options.autoRechargeThreshold === void 0 || options.autoRechargeAmount === void 0) {
|
|
62
|
+
throw new Error(
|
|
63
|
+
"--auto-recharge requires --auto-recharge-threshold and --auto-recharge-amount"
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
enabled: true,
|
|
68
|
+
threshold: options.autoRechargeThreshold,
|
|
69
|
+
amount: options.autoRechargeAmount
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
function printCreditStatus(billing) {
|
|
73
|
+
console.log(source_default.bold("Credit status:"));
|
|
74
|
+
console.log(` Tier: ${source_default.cyan(billing.tier)}`);
|
|
75
|
+
console.log(
|
|
76
|
+
` Available credits: ${source_default.cyan(billing.credits.toLocaleString())}`
|
|
77
|
+
);
|
|
78
|
+
console.log(
|
|
79
|
+
` Can purchase credits: ${currentPlanCanBuyCredits(billing) ? source_default.green("yes") : source_default.yellow("no")}`
|
|
80
|
+
);
|
|
81
|
+
console.log(
|
|
82
|
+
` Built-in video generation: ${currentPlanAllowsVideo(billing) ? source_default.green("available") : source_default.yellow("unavailable")}`
|
|
83
|
+
);
|
|
84
|
+
console.log(
|
|
85
|
+
` Auto-recharge: ${billing.autoRecharge.enabled ? source_default.green("enabled") : "disabled"}`
|
|
86
|
+
);
|
|
87
|
+
if (billing.autoRecharge.enabled) {
|
|
88
|
+
console.log(
|
|
89
|
+
` Threshold: ${billing.autoRecharge.threshold?.toLocaleString() ?? "not set"}`
|
|
90
|
+
);
|
|
91
|
+
console.log(
|
|
92
|
+
` Amount: ${billing.autoRecharge.amount?.toLocaleString() ?? "not set"}`
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
async function showCreditStatus(options) {
|
|
97
|
+
requireZeroCapabilityForCreditAction(
|
|
98
|
+
"billing:read",
|
|
99
|
+
"checking credit status requires billing:read capability"
|
|
100
|
+
);
|
|
101
|
+
if (options.autoRecharge === true || options.autoRechargeThreshold !== void 0 || options.autoRechargeAmount !== void 0) {
|
|
102
|
+
throw new Error("auto-recharge options require a credit amount");
|
|
103
|
+
}
|
|
104
|
+
printCreditStatus(await getZeroBillingStatus());
|
|
105
|
+
}
|
|
106
|
+
async function buyCredits(credits, options) {
|
|
107
|
+
requireZeroCapabilityForCreditAction(
|
|
108
|
+
"billing:write",
|
|
109
|
+
"buying credits requires billing:write capability"
|
|
110
|
+
);
|
|
111
|
+
const autoRecharge = autoRechargeConfiguration(options);
|
|
112
|
+
const members = await getZeroOrgMembers();
|
|
113
|
+
if (members.role !== "admin") {
|
|
114
|
+
console.log(
|
|
115
|
+
source_default.yellow(
|
|
116
|
+
"Only organization admins can buy credits. Run `zero doctor credit` to see the current credit status and org admins."
|
|
117
|
+
)
|
|
118
|
+
);
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
const billing = currentTokenCanReadBilling() ? await getZeroBillingStatus() : null;
|
|
122
|
+
const origin = await getPlatformOrigin();
|
|
123
|
+
if (billing && !currentPlanCanBuyCredits(billing)) {
|
|
124
|
+
console.log(
|
|
125
|
+
source_default.yellow(
|
|
126
|
+
"Credit purchases are not available for this workspace plan."
|
|
127
|
+
)
|
|
128
|
+
);
|
|
129
|
+
console.log(source_default.bold("Plan upgrade link:"));
|
|
130
|
+
console.log(planUpgradeUrl(origin));
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
const result = await createZeroCreditCheckout({
|
|
134
|
+
credits,
|
|
135
|
+
successUrl: `${origin}/?settings=usage&credit=success`,
|
|
136
|
+
cancelUrl: `${origin}/?settings=usage&credit=canceled`,
|
|
137
|
+
...autoRecharge ? { autoRecharge } : {}
|
|
138
|
+
});
|
|
139
|
+
console.log(source_default.bold("Credit checkout link:"));
|
|
140
|
+
console.log(result.url);
|
|
141
|
+
}
|
|
142
|
+
var zeroCreditCommand = new Command().name("credit").description("View credit balance or create a checkout link to buy credits").argument("[credits]", "Number of credits to buy", parseCredits).addOption(
|
|
143
|
+
new Option("--auto-recharge", "Enable auto-recharge after checkout")
|
|
144
|
+
).option(
|
|
145
|
+
"--auto-recharge-threshold <credits>",
|
|
146
|
+
"Recharge when balance is at or below this number of credits",
|
|
147
|
+
parseCredits
|
|
148
|
+
).option(
|
|
149
|
+
"--auto-recharge-amount <credits>",
|
|
150
|
+
"Credits to buy for each auto-recharge",
|
|
151
|
+
parseCredits
|
|
152
|
+
).action(
|
|
153
|
+
withErrorHandler(
|
|
154
|
+
async (credits, options) => {
|
|
155
|
+
if (credits === void 0) {
|
|
156
|
+
await showCreditStatus(options);
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
await buyCredits(credits, options);
|
|
160
|
+
}
|
|
161
|
+
)
|
|
162
|
+
);
|
|
163
|
+
export {
|
|
164
|
+
zeroCreditCommand
|
|
165
|
+
};
|
|
166
|
+
//# sourceMappingURL=credit-RWFBPKOS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/zero/credit.ts"],"sourcesContent":["import { Command, Option } from \"commander\";\nimport chalk from \"chalk\";\nimport type { ZeroCapability } from \"@vm0/api-contracts/contracts/composes\";\nimport type { BillingStatusResponse } from \"@vm0/api-contracts/contracts/zero-billing\";\n\nimport {\n createZeroCreditCheckout,\n getZeroBillingStatus,\n getZeroOrgMembers,\n} from \"../../lib/api\";\nimport { withErrorHandler } from \"../../lib/command\";\nimport { decodeZeroTokenPayload } from \"../../lib/api/zero-token\";\nimport { getPlatformOrigin } from \"./doctor/platform-url\";\nimport {\n currentPlanAllowsVideo,\n currentPlanCanBuyCredits,\n currentTokenCanReadBilling,\n} from \"./shared/billing-capabilities\";\nimport { planUpgradeUrl } from \"./shared/billing-links\";\n\nfunction parseCredits(value: string): number {\n const credits = Number(value.replaceAll(\",\", \"\"));\n if (!Number.isInteger(credits) || credits <= 0) {\n throw new Error(\"credits must be a positive integer\");\n }\n return credits;\n}\n\nfunction requireZeroCapabilityForCreditAction(\n capability: ZeroCapability,\n message: string,\n): void {\n const payload = decodeZeroTokenPayload();\n if (payload && !payload.capabilities.includes(capability)) {\n throw new Error(message);\n }\n}\n\ninterface CreditOptions {\n readonly autoRecharge?: boolean;\n readonly autoRechargeThreshold?: number;\n readonly autoRechargeAmount?: number;\n}\n\nfunction autoRechargeConfiguration(options: CreditOptions):\n | {\n readonly enabled: true;\n readonly threshold: number;\n readonly amount: number;\n }\n | undefined {\n if (\n options.autoRecharge !== true &&\n (options.autoRechargeThreshold !== undefined ||\n options.autoRechargeAmount !== undefined)\n ) {\n throw new Error(\n \"--auto-recharge-threshold and --auto-recharge-amount require --auto-recharge\",\n );\n }\n\n if (options.autoRecharge !== true) {\n return undefined;\n }\n if (\n options.autoRechargeThreshold === undefined ||\n options.autoRechargeAmount === undefined\n ) {\n throw new Error(\n \"--auto-recharge requires --auto-recharge-threshold and --auto-recharge-amount\",\n );\n }\n return {\n enabled: true,\n threshold: options.autoRechargeThreshold,\n amount: options.autoRechargeAmount,\n };\n}\n\nfunction printCreditStatus(billing: BillingStatusResponse): void {\n console.log(chalk.bold(\"Credit status:\"));\n console.log(` Tier: ${chalk.cyan(billing.tier)}`);\n console.log(\n ` Available credits: ${chalk.cyan(billing.credits.toLocaleString())}`,\n );\n console.log(\n ` Can purchase credits: ${\n currentPlanCanBuyCredits(billing)\n ? chalk.green(\"yes\")\n : chalk.yellow(\"no\")\n }`,\n );\n console.log(\n ` Built-in video generation: ${\n currentPlanAllowsVideo(billing)\n ? chalk.green(\"available\")\n : chalk.yellow(\"unavailable\")\n }`,\n );\n console.log(\n ` Auto-recharge: ${\n billing.autoRecharge.enabled ? chalk.green(\"enabled\") : \"disabled\"\n }`,\n );\n if (billing.autoRecharge.enabled) {\n console.log(\n ` Threshold: ${billing.autoRecharge.threshold?.toLocaleString() ?? \"not set\"}`,\n );\n console.log(\n ` Amount: ${billing.autoRecharge.amount?.toLocaleString() ?? \"not set\"}`,\n );\n }\n}\n\nasync function showCreditStatus(options: CreditOptions): Promise<void> {\n requireZeroCapabilityForCreditAction(\n \"billing:read\",\n \"checking credit status requires billing:read capability\",\n );\n if (\n options.autoRecharge === true ||\n options.autoRechargeThreshold !== undefined ||\n options.autoRechargeAmount !== undefined\n ) {\n throw new Error(\"auto-recharge options require a credit amount\");\n }\n printCreditStatus(await getZeroBillingStatus());\n}\n\nasync function buyCredits(\n credits: number,\n options: CreditOptions,\n): Promise<void> {\n requireZeroCapabilityForCreditAction(\n \"billing:write\",\n \"buying credits requires billing:write capability\",\n );\n const autoRecharge = autoRechargeConfiguration(options);\n const members = await getZeroOrgMembers();\n if (members.role !== \"admin\") {\n console.log(\n chalk.yellow(\n \"Only organization admins can buy credits. Run `zero doctor credit` to see the current credit status and org admins.\",\n ),\n );\n return;\n }\n\n const billing = currentTokenCanReadBilling()\n ? await getZeroBillingStatus()\n : null;\n const origin = await getPlatformOrigin();\n if (billing && !currentPlanCanBuyCredits(billing)) {\n console.log(\n chalk.yellow(\n \"Credit purchases are not available for this workspace plan.\",\n ),\n );\n console.log(chalk.bold(\"Plan upgrade link:\"));\n console.log(planUpgradeUrl(origin));\n return;\n }\n\n const result = await createZeroCreditCheckout({\n credits,\n successUrl: `${origin}/?settings=usage&credit=success`,\n cancelUrl: `${origin}/?settings=usage&credit=canceled`,\n ...(autoRecharge ? { autoRecharge } : {}),\n });\n console.log(chalk.bold(\"Credit checkout link:\"));\n console.log(result.url);\n}\n\nexport const zeroCreditCommand = new Command()\n .name(\"credit\")\n .description(\"View credit balance or create a checkout link to buy credits\")\n .argument(\"[credits]\", \"Number of credits to buy\", parseCredits)\n .addOption(\n new Option(\"--auto-recharge\", \"Enable auto-recharge after checkout\"),\n )\n .option(\n \"--auto-recharge-threshold <credits>\",\n \"Recharge when balance is at or below this number of credits\",\n parseCredits,\n )\n .option(\n \"--auto-recharge-amount <credits>\",\n \"Credits to buy for each auto-recharge\",\n parseCredits,\n )\n .action(\n withErrorHandler(\n async (credits: number | undefined, options: CreditOptions) => {\n if (credits === undefined) {\n await showCreditStatus(options);\n return;\n }\n await buyCredits(credits, options);\n },\n ),\n );\n"],"mappings":"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","names":[]}
|
|
@@ -4,18 +4,19 @@ const require = __createRequire(import.meta.url);
|
|
|
4
4
|
import {
|
|
5
5
|
requestDeveloperSupportConsent,
|
|
6
6
|
submitDeveloperSupport
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
7
|
+
} from "./chunk-ROB3OE37.js";
|
|
8
|
+
import "./chunk-N6TDQYGF.js";
|
|
9
|
+
import "./chunk-SB7EZ2ZO.js";
|
|
9
10
|
import {
|
|
10
11
|
withErrorHandler
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
12
|
+
} from "./chunk-BQOOTJNB.js";
|
|
13
|
+
import "./chunk-A2NKQGRI.js";
|
|
13
14
|
import {
|
|
14
15
|
Command
|
|
15
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-LD4ZVU4O.js";
|
|
16
17
|
import {
|
|
17
18
|
init_esm_shims
|
|
18
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-3VVCUQPB.js";
|
|
19
20
|
|
|
20
21
|
// src/commands/zero/developer-support.ts
|
|
21
22
|
init_esm_shims();
|
|
@@ -60,4 +61,4 @@ Notes:
|
|
|
60
61
|
export {
|
|
61
62
|
zeroDeveloperSupportCommand
|
|
62
63
|
};
|
|
63
|
-
//# sourceMappingURL=developer-support-
|
|
64
|
+
//# sourceMappingURL=developer-support-IVR3HIP7.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/zero/developer-support.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport { withErrorHandler } from \"../../lib/command\";\nimport {\n requestDeveloperSupportConsent,\n submitDeveloperSupport,\n} from \"../../lib/api\";\n\nexport const zeroDeveloperSupportCommand = new Command()\n .name(\"developer-support\")\n .description(\"Submit a diagnostic report to the dev team\")\n .requiredOption(\"--title <text>\", \"Issue title\")\n .requiredOption(\"--description <text>\", \"Diagnostic description\")\n .option(\"--consent-code <code>\", \"User-provided verification code\")\n .addHelpText(\n \"after\",\n `\nExamples:\n Step 1 — Get consent code:\n zero developer-support --title \"GitHub 403 error\" --description \"Connector connected but API returns 403\"\n\n Step 2 — Submit with code:\n zero developer-support --title \"GitHub 403 error\" --description \"Connector connected but API returns 403\" --consent-code A7X3\n\nNotes:\n - The consent code must be provided by the user to confirm sharing their conversation\n - The dev team will receive a diagnostic bundle with conversation, environment, and connector info`,\n )\n .action(\n withErrorHandler(\n async (options: {\n title: string;\n description: string;\n consentCode?: string;\n }) => {\n if (!options.consentCode) {\n const { consentCode } = await requestDeveloperSupportConsent({\n title: options.title,\n description: options.description,\n });\n console.log(\n \"Consent required to share chat history with developers.\",\n );\n console.log(`Code: ${consentCode}`);\n console.log(\"Ask the user to confirm by providing this code.\");\n } else {\n const { reference } = await submitDeveloperSupport({\n title: options.title,\n description: options.description,\n consentCode: options.consentCode,\n });\n console.log(\"Developer support request submitted successfully.\");\n console.log(`Reference: ${reference}`);\n }\n },\n ),\n );\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/commands/zero/developer-support.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport { withErrorHandler } from \"../../lib/command\";\nimport {\n requestDeveloperSupportConsent,\n submitDeveloperSupport,\n} from \"../../lib/api\";\n\nexport const zeroDeveloperSupportCommand = new Command()\n .name(\"developer-support\")\n .description(\"Submit a diagnostic report to the dev team\")\n .requiredOption(\"--title <text>\", \"Issue title\")\n .requiredOption(\"--description <text>\", \"Diagnostic description\")\n .option(\"--consent-code <code>\", \"User-provided verification code\")\n .addHelpText(\n \"after\",\n `\nExamples:\n Step 1 — Get consent code:\n zero developer-support --title \"GitHub 403 error\" --description \"Connector connected but API returns 403\"\n\n Step 2 — Submit with code:\n zero developer-support --title \"GitHub 403 error\" --description \"Connector connected but API returns 403\" --consent-code A7X3\n\nNotes:\n - The consent code must be provided by the user to confirm sharing their conversation\n - The dev team will receive a diagnostic bundle with conversation, environment, and connector info`,\n )\n .action(\n withErrorHandler(\n async (options: {\n title: string;\n description: string;\n consentCode?: string;\n }) => {\n if (!options.consentCode) {\n const { consentCode } = await requestDeveloperSupportConsent({\n title: options.title,\n description: options.description,\n });\n console.log(\n \"Consent required to share chat history with developers.\",\n );\n console.log(`Code: ${consentCode}`);\n console.log(\"Ask the user to confirm by providing this code.\");\n } else {\n const { reference } = await submitDeveloperSupport({\n title: options.title,\n description: options.description,\n consentCode: options.consentCode,\n });\n console.log(\"Developer support request submitted successfully.\");\n console.log(`Reference: ${reference}`);\n }\n },\n ),\n );\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAOO,IAAM,8BAA8B,IAAI,QAAQ,EACpD,KAAK,mBAAmB,EACxB,YAAY,4CAA4C,EACxD,eAAe,kBAAkB,aAAa,EAC9C,eAAe,wBAAwB,wBAAwB,EAC/D,OAAO,yBAAyB,iCAAiC,EACjE;AAAA,EACC;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWF,EACC;AAAA,EACC;AAAA,IACE,OAAO,YAID;AACJ,UAAI,CAAC,QAAQ,aAAa;AACxB,cAAM,EAAE,YAAY,IAAI,MAAM,+BAA+B;AAAA,UAC3D,OAAO,QAAQ;AAAA,UACf,aAAa,QAAQ;AAAA,QACvB,CAAC;AACD,gBAAQ;AAAA,UACN;AAAA,QACF;AACA,gBAAQ,IAAI,SAAS,WAAW,EAAE;AAClC,gBAAQ,IAAI,iDAAiD;AAAA,MAC/D,OAAO;AACL,cAAM,EAAE,UAAU,IAAI,MAAM,uBAAuB;AAAA,UACjD,OAAO,QAAQ;AAAA,UACf,aAAa,QAAQ;AAAA,UACrB,aAAa,QAAQ;AAAA,QACvB,CAAC;AACD,gBAAQ,IAAI,mDAAmD;AAC/D,gBAAQ,IAAI,cAAc,SAAS,EAAE;AAAA,MACvC;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
|
|
@@ -1,23 +1,34 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire as __createRequire } from "node:module";
|
|
3
3
|
const require = __createRequire(import.meta.url);
|
|
4
|
+
import {
|
|
5
|
+
currentPlanAllowsVideo,
|
|
6
|
+
currentPlanCanBuyCredits
|
|
7
|
+
} from "./chunk-WDDZJGWL.js";
|
|
4
8
|
import {
|
|
5
9
|
getZeroBillingStatus,
|
|
6
10
|
getZeroOrg,
|
|
7
11
|
getZeroOrgMembers
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
12
|
+
} from "./chunk-ROB3OE37.js";
|
|
13
|
+
import "./chunk-N6TDQYGF.js";
|
|
14
|
+
import {
|
|
15
|
+
planUpgradeUrl
|
|
16
|
+
} from "./chunk-W75R7EZF.js";
|
|
17
|
+
import {
|
|
18
|
+
getPlatformOrigin
|
|
19
|
+
} from "./chunk-JCLLQRCI.js";
|
|
20
|
+
import "./chunk-SB7EZ2ZO.js";
|
|
10
21
|
import {
|
|
11
22
|
source_default,
|
|
12
23
|
withErrorHandler
|
|
13
|
-
} from "./chunk-
|
|
14
|
-
import "./chunk-
|
|
24
|
+
} from "./chunk-BQOOTJNB.js";
|
|
25
|
+
import "./chunk-A2NKQGRI.js";
|
|
15
26
|
import {
|
|
16
27
|
Command
|
|
17
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-LD4ZVU4O.js";
|
|
18
29
|
import {
|
|
19
30
|
init_esm_shims
|
|
20
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-3VVCUQPB.js";
|
|
21
32
|
|
|
22
33
|
// src/commands/zero/doctor/index.ts
|
|
23
34
|
init_esm_shims();
|
|
@@ -30,16 +41,18 @@ function memberName(member) {
|
|
|
30
41
|
}
|
|
31
42
|
var creditCommand = new Command().name("credit").description("Diagnose current organization credit and purchase access").action(
|
|
32
43
|
withErrorHandler(async () => {
|
|
33
|
-
const [org, billing, members] = await Promise.all([
|
|
44
|
+
const [org, billing, members, platformOrigin] = await Promise.all([
|
|
34
45
|
getZeroOrg(),
|
|
35
46
|
getZeroBillingStatus(),
|
|
36
|
-
getZeroOrgMembers()
|
|
47
|
+
getZeroOrgMembers(),
|
|
48
|
+
getPlatformOrigin()
|
|
37
49
|
]);
|
|
38
50
|
const admins = members.members.filter((member) => {
|
|
39
51
|
return member.role === "admin";
|
|
40
52
|
});
|
|
41
53
|
const isAdmin = members.role === "admin";
|
|
42
|
-
const
|
|
54
|
+
const planCanBuyCredits = currentPlanCanBuyCredits(billing);
|
|
55
|
+
const canPurchaseCredits = isAdmin && planCanBuyCredits;
|
|
43
56
|
console.log(source_default.bold("Credit diagnostics:"));
|
|
44
57
|
console.log(` Org: ${source_default.green(org.slug)}`);
|
|
45
58
|
console.log(` Tier: ${source_default.cyan(billing.tier)}`);
|
|
@@ -50,6 +63,9 @@ var creditCommand = new Command().name("credit").description("Diagnose current o
|
|
|
50
63
|
console.log(
|
|
51
64
|
` Can purchase credits: ${canPurchaseCredits ? source_default.green("yes") : source_default.yellow("no")}`
|
|
52
65
|
);
|
|
66
|
+
console.log(
|
|
67
|
+
` Built-in video generation: ${currentPlanAllowsVideo(billing) ? source_default.green("available") : source_default.yellow("unavailable")}`
|
|
68
|
+
);
|
|
53
69
|
console.log(
|
|
54
70
|
` Auto-recharge: ${billing.autoRecharge.enabled ? source_default.green("enabled") : "disabled"}`
|
|
55
71
|
);
|
|
@@ -66,11 +82,21 @@ var creditCommand = new Command().name("credit").description("Diagnose current o
|
|
|
66
82
|
for (const admin of admins) {
|
|
67
83
|
console.log(` - ${memberName(admin)}`);
|
|
68
84
|
}
|
|
85
|
+
if (planCanBuyCredits) {
|
|
86
|
+
console.log(
|
|
87
|
+
source_default.yellow("\nAsk an organization admin to buy credits.")
|
|
88
|
+
);
|
|
89
|
+
} else {
|
|
90
|
+
console.log(
|
|
91
|
+
source_default.yellow("\nAsk an organization admin to upgrade the plan:")
|
|
92
|
+
);
|
|
93
|
+
console.log(planUpgradeUrl(platformOrigin));
|
|
94
|
+
}
|
|
95
|
+
} else if (!planCanBuyCredits) {
|
|
69
96
|
console.log(
|
|
70
|
-
|
|
71
|
-
"\nAsk an organization admin to buy credits or upgrade the plan."
|
|
72
|
-
)
|
|
97
|
+
"\nThis workspace plan cannot buy credits. Upgrade the plan instead:"
|
|
73
98
|
);
|
|
99
|
+
console.log(planUpgradeUrl(platformOrigin));
|
|
74
100
|
} else if (billing.tier === "free") {
|
|
75
101
|
console.log(
|
|
76
102
|
"\nFree-tier admins can upgrade to Pro from billing or buy credits with `zero credit <credits>`."
|
|
@@ -96,4 +122,4 @@ Notes:
|
|
|
96
122
|
export {
|
|
97
123
|
zeroDoctorCommand
|
|
98
124
|
};
|
|
99
|
-
//# sourceMappingURL=doctor-
|
|
125
|
+
//# sourceMappingURL=doctor-KGWTXW2Q.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/zero/doctor/index.ts","../src/commands/zero/doctor/credit.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport { creditCommand } from \"./credit\";\n\nexport const zeroDoctorCommand = new Command()\n .name(\"doctor\")\n .description(\"Diagnose account and runtime issues\")\n .addCommand(creditCommand)\n .addHelpText(\n \"after\",\n `\nExamples:\n Check credits? zero doctor credit\n\nNotes:\n - Use zero doctor credit when a run or generation fails because the org has insufficient credits, when a user asks how to recharge, or before trying to buy credits\n - Use zero generate <type> (no --prompt) to see every provider available for a given generation type\n - Use zero connector check for connector and permission diagnostics`,\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\n\nimport {\n getZeroBillingStatus,\n getZeroOrg,\n getZeroOrgMembers,\n} from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { getPlatformOrigin } from \"./platform-url\";\nimport {\n currentPlanAllowsVideo,\n currentPlanCanBuyCredits,\n} from \"../shared/billing-capabilities\";\nimport { planUpgradeUrl } from \"../shared/billing-links\";\n\nfunction memberName(member: {\n readonly email: string;\n readonly firstName: string | null;\n readonly lastName: string | null;\n}): string {\n const name = [member.firstName, member.lastName].filter(Boolean).join(\" \");\n return name ? `${name} <${member.email}>` : member.email;\n}\n\nexport const creditCommand = new Command()\n .name(\"credit\")\n .description(\"Diagnose current organization credit and purchase access\")\n .action(\n withErrorHandler(async () => {\n const [org, billing, members, platformOrigin] = await Promise.all([\n getZeroOrg(),\n getZeroBillingStatus(),\n getZeroOrgMembers(),\n getPlatformOrigin(),\n ]);\n const admins = members.members.filter((member) => {\n return member.role === \"admin\";\n });\n const isAdmin = members.role === \"admin\";\n const planCanBuyCredits = currentPlanCanBuyCredits(billing);\n const canPurchaseCredits = isAdmin && planCanBuyCredits;\n\n console.log(chalk.bold(\"Credit diagnostics:\"));\n console.log(` Org: ${chalk.green(org.slug)}`);\n console.log(` Tier: ${chalk.cyan(billing.tier)}`);\n console.log(\n ` Available credits: ${chalk.cyan(billing.credits.toLocaleString())}`,\n );\n console.log(` Current user role: ${chalk.cyan(members.role)}`);\n console.log(\n ` Can purchase credits: ${\n canPurchaseCredits ? chalk.green(\"yes\") : chalk.yellow(\"no\")\n }`,\n );\n console.log(\n ` Built-in video generation: ${\n currentPlanAllowsVideo(billing)\n ? chalk.green(\"available\")\n : chalk.yellow(\"unavailable\")\n }`,\n );\n console.log(\n ` Auto-recharge: ${\n billing.autoRecharge.enabled ? chalk.green(\"enabled\") : \"disabled\"\n }`,\n );\n if (billing.autoRecharge.enabled) {\n console.log(\n ` Threshold: ${billing.autoRecharge.threshold?.toLocaleString() ?? \"not set\"}`,\n );\n console.log(\n ` Amount: ${billing.autoRecharge.amount?.toLocaleString() ?? \"not set\"}`,\n );\n }\n\n if (!isAdmin) {\n console.log(chalk.bold(\"\\nOrganization admins:\"));\n for (const admin of admins) {\n console.log(` - ${memberName(admin)}`);\n }\n if (planCanBuyCredits) {\n console.log(\n chalk.yellow(\"\\nAsk an organization admin to buy credits.\"),\n );\n } else {\n console.log(\n chalk.yellow(\"\\nAsk an organization admin to upgrade the plan:\"),\n );\n console.log(planUpgradeUrl(platformOrigin));\n }\n } else if (!planCanBuyCredits) {\n console.log(\n \"\\nThis workspace plan cannot buy credits. Upgrade the plan instead:\",\n );\n console.log(planUpgradeUrl(platformOrigin));\n } else if (billing.tier === \"free\") {\n console.log(\n \"\\nFree-tier admins can upgrade to Pro from billing or buy credits with `zero credit <credits>`.\",\n );\n } else {\n console.log(\"\\nUse `zero credit <credits>` to buy more credits.\");\n }\n }),\n );\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;ACAA;AAgBA,SAAS,WAAW,QAIT;AACT,QAAM,OAAO,CAAC,OAAO,WAAW,OAAO,QAAQ,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AACzE,SAAO,OAAO,GAAG,IAAI,KAAK,OAAO,KAAK,MAAM,OAAO;AACrD;AAEO,IAAM,gBAAgB,IAAI,QAAQ,EACtC,KAAK,QAAQ,EACb,YAAY,0DAA0D,EACtE;AAAA,EACC,iBAAiB,YAAY;AAC3B,UAAM,CAAC,KAAK,SAAS,SAAS,cAAc,IAAI,MAAM,QAAQ,IAAI;AAAA,MAChE,WAAW;AAAA,MACX,qBAAqB;AAAA,MACrB,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,IACpB,CAAC;AACD,UAAM,SAAS,QAAQ,QAAQ,OAAO,CAAC,WAAW;AAChD,aAAO,OAAO,SAAS;AAAA,IACzB,CAAC;AACD,UAAM,UAAU,QAAQ,SAAS;AACjC,UAAM,oBAAoB,yBAAyB,OAAO;AAC1D,UAAM,qBAAqB,WAAW;AAEtC,YAAQ,IAAI,eAAM,KAAK,qBAAqB,CAAC;AAC7C,YAAQ,IAAI,UAAU,eAAM,MAAM,IAAI,IAAI,CAAC,EAAE;AAC7C,YAAQ,IAAI,WAAW,eAAM,KAAK,QAAQ,IAAI,CAAC,EAAE;AACjD,YAAQ;AAAA,MACN,wBAAwB,eAAM,KAAK,QAAQ,QAAQ,eAAe,CAAC,CAAC;AAAA,IACtE;AACA,YAAQ,IAAI,wBAAwB,eAAM,KAAK,QAAQ,IAAI,CAAC,EAAE;AAC9D,YAAQ;AAAA,MACN,2BACE,qBAAqB,eAAM,MAAM,KAAK,IAAI,eAAM,OAAO,IAAI,CAC7D;AAAA,IACF;AACA,YAAQ;AAAA,MACN,gCACE,uBAAuB,OAAO,IAC1B,eAAM,MAAM,WAAW,IACvB,eAAM,OAAO,aAAa,CAChC;AAAA,IACF;AACA,YAAQ;AAAA,MACN,oBACE,QAAQ,aAAa,UAAU,eAAM,MAAM,SAAS,IAAI,UAC1D;AAAA,IACF;AACA,QAAI,QAAQ,aAAa,SAAS;AAChC,cAAQ;AAAA,QACN,kBAAkB,QAAQ,aAAa,WAAW,eAAe,KAAK,SAAS;AAAA,MACjF;AACA,cAAQ;AAAA,QACN,eAAe,QAAQ,aAAa,QAAQ,eAAe,KAAK,SAAS;AAAA,MAC3E;AAAA,IACF;AAEA,QAAI,CAAC,SAAS;AACZ,cAAQ,IAAI,eAAM,KAAK,wBAAwB,CAAC;AAChD,iBAAW,SAAS,QAAQ;AAC1B,gBAAQ,IAAI,OAAO,WAAW,KAAK,CAAC,EAAE;AAAA,MACxC;AACA,UAAI,mBAAmB;AACrB,gBAAQ;AAAA,UACN,eAAM,OAAO,6CAA6C;AAAA,QAC5D;AAAA,MACF,OAAO;AACL,gBAAQ;AAAA,UACN,eAAM,OAAO,kDAAkD;AAAA,QACjE;AACA,gBAAQ,IAAI,eAAe,cAAc,CAAC;AAAA,MAC5C;AAAA,IACF,WAAW,CAAC,mBAAmB;AAC7B,cAAQ;AAAA,QACN;AAAA,MACF;AACA,cAAQ,IAAI,eAAe,cAAc,CAAC;AAAA,IAC5C,WAAW,QAAQ,SAAS,QAAQ;AAClC,cAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF,OAAO;AACL,cAAQ,IAAI,oDAAoD;AAAA,IAClE;AAAA,EACF,CAAC;AACH;;;ADrGK,IAAM,oBAAoB,IAAI,QAAQ,EAC1C,KAAK,QAAQ,EACb,YAAY,qCAAqC,EACjD,WAAW,aAAa,EACxB;AAAA,EACC;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQF;","names":[]}
|
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
metrics,
|
|
24
24
|
propagation,
|
|
25
25
|
trace
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-X4DBCBU4.js";
|
|
27
27
|
import {
|
|
28
28
|
__commonJS,
|
|
29
29
|
__esm,
|
|
@@ -32,7 +32,7 @@ import {
|
|
|
32
32
|
__toCommonJS,
|
|
33
33
|
__toESM,
|
|
34
34
|
init_esm_shims
|
|
35
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-3VVCUQPB.js";
|
|
36
36
|
|
|
37
37
|
// ../../node_modules/.pnpm/@opentelemetry+core@2.8.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/core/build/esm/trace/suppress-tracing.js
|
|
38
38
|
function suppressTracing(context2) {
|
|
@@ -43686,4 +43686,4 @@ export {
|
|
|
43686
43686
|
wrapMcpServerWithSentry,
|
|
43687
43687
|
zodErrorsIntegration
|
|
43688
43688
|
};
|
|
43689
|
-
//# sourceMappingURL=esm-
|
|
43689
|
+
//# sourceMappingURL=esm-GOCEMHJO.js.map
|
|
@@ -3,19 +3,20 @@ import { createRequire as __createRequire } from "node:module";
|
|
|
3
3
|
const require = __createRequire(import.meta.url);
|
|
4
4
|
import {
|
|
5
5
|
sendFeishuMessage
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-ROB3OE37.js";
|
|
7
|
+
import "./chunk-N6TDQYGF.js";
|
|
8
|
+
import "./chunk-SB7EZ2ZO.js";
|
|
8
9
|
import {
|
|
9
10
|
source_default,
|
|
10
11
|
withErrorHandler
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
12
|
+
} from "./chunk-BQOOTJNB.js";
|
|
13
|
+
import "./chunk-A2NKQGRI.js";
|
|
13
14
|
import {
|
|
14
15
|
Command
|
|
15
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-LD4ZVU4O.js";
|
|
16
17
|
import {
|
|
17
18
|
init_esm_shims
|
|
18
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-3VVCUQPB.js";
|
|
19
20
|
|
|
20
21
|
// src/commands/zero/feishu/index.ts
|
|
21
22
|
init_esm_shims();
|
|
@@ -115,4 +116,4 @@ Examples:
|
|
|
115
116
|
export {
|
|
116
117
|
zeroFeishuCommand
|
|
117
118
|
};
|
|
118
|
-
//# sourceMappingURL=feishu-
|
|
119
|
+
//# sourceMappingURL=feishu-PLF4P5OG.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/zero/feishu/index.ts","../src/commands/zero/feishu/message/index.ts","../src/commands/zero/feishu/message/send.ts"],"sourcesContent":["import { Command } from \"commander\";\n\nimport { zeroFeishuMessageCommand } from \"./message\";\n\nexport const zeroFeishuCommand = new Command()\n .name(\"feishu\")\n .description(\"Send messages to Feishu as an organization bot\")\n .addCommand(zeroFeishuMessageCommand)\n .addHelpText(\n \"after\",\n `\nExamples:\n Send to a chat: zero feishu message send -c <chat-id> -t \"Hello!\"\n Send a DM: zero feishu message send -u <open-id> -t \"Hello!\"\n Reply in a thread: zero feishu message send -r <message-id> --thread -t \"Reply\"`,\n );\n","import { Command } from \"commander\";\n\nimport { sendCommand } from \"./send\";\n\nexport const zeroFeishuMessageCommand = new Command()\n .name(\"message\")\n .description(\"Send Feishu messages\")\n .addCommand(sendCommand);\n","import { readFileSync } from \"node:fs\";\n\nimport chalk from \"chalk\";\nimport { Command } from \"commander\";\n\nimport { sendFeishuMessage } from \"../../../../lib/api\";\nimport { withErrorHandler } from \"../../../../lib/command\";\n\ninterface SendFeishuOptions {\n readonly installation?: string;\n readonly chat?: string;\n readonly user?: string;\n readonly reply?: string;\n readonly thread?: boolean;\n readonly text?: string;\n readonly card?: string;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction parseCard(\n input: string | undefined,\n): Record<string, unknown> | undefined {\n if (!input) {\n return undefined;\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(input);\n } catch {\n throw new Error(\"Invalid JSON for --card flag\", {\n cause: new Error(\"Provide a valid Feishu card JSON object\"),\n });\n }\n if (!isRecord(parsed)) {\n throw new Error(\"Invalid JSON for --card\", {\n cause: new Error(\"Provide a Feishu card JSON object\"),\n });\n }\n return parsed;\n}\n\nexport const sendCommand = new Command()\n .name(\"send\")\n .description(\"Send a message to a Feishu chat or user\")\n .option(\"-i, --installation <id>\", \"Feishu installation ID\")\n .option(\"-c, --chat <id>\", \"Feishu chat ID\")\n .option(\"-u, --user <open-id>\", 'Feishu user open ID (use \"me\" for yourself)')\n .option(\"-r, --reply <message-id>\", \"Message ID to reply to\")\n .option(\"--thread\", \"Reply in a Feishu thread\")\n .option(\"-t, --text <message>\", \"Message text\")\n .option(\"--card <json>\", \"Feishu interactive card JSON\")\n .addHelpText(\n \"after\",\n `\nExamples:\n Chat message: zero feishu message send -c oc_xxx -t \"Hello!\"\n Direct message: zero feishu message send -u ou_xxx -t \"Hello!\"\n DM yourself: zero feishu message send -u me -t \"Hello!\"\n Thread reply: zero feishu message send -r om_xxx --thread -t \"Reply\"\n Interactive card: zero feishu message send -c oc_xxx --card '{\"schema\":\"2.0\",\"body\":{\"elements\":[]}}'\n Select a custom app: zero feishu message send -i <installation-id> -c oc_xxx -t \"Hello!\"\n\nNotes:\n - Exactly one of --chat, --user, or --reply is required\n - Exactly one of --text or --card is required\n - --installation is required when the organization has multiple Feishu bots`,\n )\n .action(\n withErrorHandler(async (options: SendFeishuOptions) => {\n const targets = [options.chat, options.user, options.reply].filter(\n Boolean,\n );\n if (targets.length !== 1) {\n throw new Error(\n \"Exactly one of --chat, --user, or --reply must be provided\",\n );\n }\n if (options.thread && !options.reply) {\n throw new Error(\"--thread requires --reply\");\n }\n\n let text = options.text;\n if (!text && !options.card && !process.stdin.isTTY) {\n try {\n text = readFileSync(\"/dev/stdin\", \"utf8\").trim();\n } catch {\n // stdin is not readable; fall through to normal input validation.\n }\n }\n const card = parseCard(options.card);\n if (Boolean(text) === Boolean(card)) {\n throw new Error(\"Exactly one of --text or --card must be provided\");\n }\n\n const result = await sendFeishuMessage({\n installationId: options.installation,\n chat: options.chat,\n user: options.user,\n replyToMessageId: options.reply,\n replyInThread: options.thread,\n text,\n card,\n });\n console.log(chalk.green(`✓ Message sent (message: ${result.messageId})`));\n }),\n );\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/commands/zero/feishu/index.ts","../src/commands/zero/feishu/message/index.ts","../src/commands/zero/feishu/message/send.ts"],"sourcesContent":["import { Command } from \"commander\";\n\nimport { zeroFeishuMessageCommand } from \"./message\";\n\nexport const zeroFeishuCommand = new Command()\n .name(\"feishu\")\n .description(\"Send messages to Feishu as an organization bot\")\n .addCommand(zeroFeishuMessageCommand)\n .addHelpText(\n \"after\",\n `\nExamples:\n Send to a chat: zero feishu message send -c <chat-id> -t \"Hello!\"\n Send a DM: zero feishu message send -u <open-id> -t \"Hello!\"\n Reply in a thread: zero feishu message send -r <message-id> --thread -t \"Reply\"`,\n );\n","import { Command } from \"commander\";\n\nimport { sendCommand } from \"./send\";\n\nexport const zeroFeishuMessageCommand = new Command()\n .name(\"message\")\n .description(\"Send Feishu messages\")\n .addCommand(sendCommand);\n","import { readFileSync } from \"node:fs\";\n\nimport chalk from \"chalk\";\nimport { Command } from \"commander\";\n\nimport { sendFeishuMessage } from \"../../../../lib/api\";\nimport { withErrorHandler } from \"../../../../lib/command\";\n\ninterface SendFeishuOptions {\n readonly installation?: string;\n readonly chat?: string;\n readonly user?: string;\n readonly reply?: string;\n readonly thread?: boolean;\n readonly text?: string;\n readonly card?: string;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction parseCard(\n input: string | undefined,\n): Record<string, unknown> | undefined {\n if (!input) {\n return undefined;\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(input);\n } catch {\n throw new Error(\"Invalid JSON for --card flag\", {\n cause: new Error(\"Provide a valid Feishu card JSON object\"),\n });\n }\n if (!isRecord(parsed)) {\n throw new Error(\"Invalid JSON for --card\", {\n cause: new Error(\"Provide a Feishu card JSON object\"),\n });\n }\n return parsed;\n}\n\nexport const sendCommand = new Command()\n .name(\"send\")\n .description(\"Send a message to a Feishu chat or user\")\n .option(\"-i, --installation <id>\", \"Feishu installation ID\")\n .option(\"-c, --chat <id>\", \"Feishu chat ID\")\n .option(\"-u, --user <open-id>\", 'Feishu user open ID (use \"me\" for yourself)')\n .option(\"-r, --reply <message-id>\", \"Message ID to reply to\")\n .option(\"--thread\", \"Reply in a Feishu thread\")\n .option(\"-t, --text <message>\", \"Message text\")\n .option(\"--card <json>\", \"Feishu interactive card JSON\")\n .addHelpText(\n \"after\",\n `\nExamples:\n Chat message: zero feishu message send -c oc_xxx -t \"Hello!\"\n Direct message: zero feishu message send -u ou_xxx -t \"Hello!\"\n DM yourself: zero feishu message send -u me -t \"Hello!\"\n Thread reply: zero feishu message send -r om_xxx --thread -t \"Reply\"\n Interactive card: zero feishu message send -c oc_xxx --card '{\"schema\":\"2.0\",\"body\":{\"elements\":[]}}'\n Select a custom app: zero feishu message send -i <installation-id> -c oc_xxx -t \"Hello!\"\n\nNotes:\n - Exactly one of --chat, --user, or --reply is required\n - Exactly one of --text or --card is required\n - --installation is required when the organization has multiple Feishu bots`,\n )\n .action(\n withErrorHandler(async (options: SendFeishuOptions) => {\n const targets = [options.chat, options.user, options.reply].filter(\n Boolean,\n );\n if (targets.length !== 1) {\n throw new Error(\n \"Exactly one of --chat, --user, or --reply must be provided\",\n );\n }\n if (options.thread && !options.reply) {\n throw new Error(\"--thread requires --reply\");\n }\n\n let text = options.text;\n if (!text && !options.card && !process.stdin.isTTY) {\n try {\n text = readFileSync(\"/dev/stdin\", \"utf8\").trim();\n } catch {\n // stdin is not readable; fall through to normal input validation.\n }\n }\n const card = parseCard(options.card);\n if (Boolean(text) === Boolean(card)) {\n throw new Error(\"Exactly one of --text or --card must be provided\");\n }\n\n const result = await sendFeishuMessage({\n installationId: options.installation,\n chat: options.chat,\n user: options.user,\n replyToMessageId: options.reply,\n replyInThread: options.thread,\n text,\n card,\n });\n console.log(chalk.green(`✓ Message sent (message: ${result.messageId})`));\n }),\n );\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;;ACAA;;;ACAA;AAAA,SAAS,oBAAoB;AAkB7B,SAAS,SAAS,OAAkD;AAClE,SAAO,QAAQ,KAAK,KAAK,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,UACP,OACqC;AACrC,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,EACT;AACA,MAAI;AACJ,MAAI;AACF,aAAS,KAAK,MAAM,KAAK;AAAA,EAC3B,QAAQ;AACN,UAAM,IAAI,MAAM,gCAAgC;AAAA,MAC9C,OAAO,IAAI,MAAM,yCAAyC;AAAA,IAC5D,CAAC;AAAA,EACH;AACA,MAAI,CAAC,SAAS,MAAM,GAAG;AACrB,UAAM,IAAI,MAAM,2BAA2B;AAAA,MACzC,OAAO,IAAI,MAAM,mCAAmC;AAAA,IACtD,CAAC;AAAA,EACH;AACA,SAAO;AACT;AAEO,IAAM,cAAc,IAAI,QAAQ,EACpC,KAAK,MAAM,EACX,YAAY,yCAAyC,EACrD,OAAO,2BAA2B,wBAAwB,EAC1D,OAAO,mBAAmB,gBAAgB,EAC1C,OAAO,wBAAwB,6CAA6C,EAC5E,OAAO,4BAA4B,wBAAwB,EAC3D,OAAO,YAAY,0BAA0B,EAC7C,OAAO,wBAAwB,cAAc,EAC7C,OAAO,iBAAiB,8BAA8B,EACtD;AAAA,EACC;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaF,EACC;AAAA,EACC,iBAAiB,OAAO,YAA+B;AACrD,UAAM,UAAU,CAAC,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,EAAE;AAAA,MAC1D;AAAA,IACF;AACA,QAAI,QAAQ,WAAW,GAAG;AACxB,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,QAAI,QAAQ,UAAU,CAAC,QAAQ,OAAO;AACpC,YAAM,IAAI,MAAM,2BAA2B;AAAA,IAC7C;AAEA,QAAI,OAAO,QAAQ;AACnB,QAAI,CAAC,QAAQ,CAAC,QAAQ,QAAQ,CAAC,QAAQ,MAAM,OAAO;AAClD,UAAI;AACF,eAAO,aAAa,cAAc,MAAM,EAAE,KAAK;AAAA,MACjD,QAAQ;AAAA,MAER;AAAA,IACF;AACA,UAAM,OAAO,UAAU,QAAQ,IAAI;AACnC,QAAI,QAAQ,IAAI,MAAM,QAAQ,IAAI,GAAG;AACnC,YAAM,IAAI,MAAM,kDAAkD;AAAA,IACpE;AAEA,UAAM,SAAS,MAAM,kBAAkB;AAAA,MACrC,gBAAgB,QAAQ;AAAA,MACxB,MAAM,QAAQ;AAAA,MACd,MAAM,QAAQ;AAAA,MACd,kBAAkB,QAAQ;AAAA,MAC1B,eAAe,QAAQ;AAAA,MACvB;AAAA,MACA;AAAA,IACF,CAAC;AACD,YAAQ,IAAI,eAAM,MAAM,iCAA4B,OAAO,SAAS,GAAG,CAAC;AAAA,EAC1E,CAAC;AACH;;;ADxGK,IAAM,2BAA2B,IAAI,QAAQ,EACjD,KAAK,SAAS,EACd,YAAY,sBAAsB,EAClC,WAAW,WAAW;;;ADHlB,IAAM,oBAAoB,IAAI,QAAQ,EAC1C,KAAK,QAAQ,EACb,YAAY,gDAAgD,EAC5D,WAAW,wBAAwB,EACnC;AAAA,EACC;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAKF;","names":[]}
|
|
@@ -14,21 +14,22 @@ import {
|
|
|
14
14
|
zeroFinanceQuoteRequestSchema,
|
|
15
15
|
zeroFinanceRangeSchema,
|
|
16
16
|
zeroFinanceSearchRequestSchema
|
|
17
|
-
} from "./chunk-
|
|
18
|
-
import "./chunk-
|
|
17
|
+
} from "./chunk-ROB3OE37.js";
|
|
18
|
+
import "./chunk-N6TDQYGF.js";
|
|
19
|
+
import "./chunk-SB7EZ2ZO.js";
|
|
19
20
|
import {
|
|
20
21
|
source_default,
|
|
21
22
|
withErrorHandler
|
|
22
|
-
} from "./chunk-
|
|
23
|
-
import "./chunk-
|
|
23
|
+
} from "./chunk-BQOOTJNB.js";
|
|
24
|
+
import "./chunk-A2NKQGRI.js";
|
|
24
25
|
import {
|
|
25
26
|
Command,
|
|
26
27
|
InvalidArgumentError,
|
|
27
28
|
Option
|
|
28
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-LD4ZVU4O.js";
|
|
29
30
|
import {
|
|
30
31
|
init_esm_shims
|
|
31
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-3VVCUQPB.js";
|
|
32
33
|
|
|
33
34
|
// src/commands/zero/finance/index.ts
|
|
34
35
|
init_esm_shims();
|
|
@@ -124,4 +125,4 @@ Notes:
|
|
|
124
125
|
export {
|
|
125
126
|
zeroFinanceCommand
|
|
126
127
|
};
|
|
127
|
-
//# sourceMappingURL=finance-
|
|
128
|
+
//# sourceMappingURL=finance-LVFG3WWP.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/zero/finance/index.ts"],"sourcesContent":["import { Command, InvalidArgumentError, Option } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n ZERO_FINANCE_DEFAULT_INTERVAL,\n ZERO_FINANCE_DEFAULT_RANGE,\n zeroFinanceChartRequestSchema,\n zeroFinanceIntervalSchema,\n zeroFinanceProfileRequestSchema,\n zeroFinanceQuoteRequestSchema,\n zeroFinanceRangeSchema,\n zeroFinanceSearchRequestSchema,\n type ZeroFinanceInterval,\n type ZeroFinanceRange,\n} from \"@vm0/api-contracts/contracts/zero-finance\";\n\nimport {\n callZeroFinanceChart,\n callZeroFinanceProfile,\n callZeroFinanceQuote,\n callZeroFinanceSearch,\n type ZeroFinanceResponse,\n} from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\ninterface JsonOption {\n readonly json?: boolean;\n}\n\ninterface ChartOptions extends JsonOption {\n readonly range: ZeroFinanceRange;\n readonly interval: ZeroFinanceInterval;\n}\n\nfunction firstIssueMessage(\n result:\n | ReturnType<typeof zeroFinanceSearchRequestSchema.safeParse>\n | ReturnType<typeof zeroFinanceProfileRequestSchema.safeParse>\n | ReturnType<typeof zeroFinanceQuoteRequestSchema.safeParse>\n | ReturnType<typeof zeroFinanceChartRequestSchema.safeParse>,\n): string {\n return result.success\n ? \"finance request is invalid\"\n : (result.error.issues[0]?.message ?? \"finance request is invalid\");\n}\n\nfunction parseRange(value: string): ZeroFinanceRange {\n const result = zeroFinanceRangeSchema.safeParse(value);\n if (result.success) {\n return result.data;\n }\n throw new InvalidArgumentError(\n `range must be one of: ${zeroFinanceRangeSchema.options.join(\", \")}`,\n );\n}\n\nfunction parseInterval(value: string): ZeroFinanceInterval {\n const result = zeroFinanceIntervalSchema.safeParse(value);\n if (result.success) {\n return result.data;\n }\n throw new InvalidArgumentError(\n `interval must be one of: ${zeroFinanceIntervalSchema.options.join(\", \")}`,\n );\n}\n\nfunction renderResponse(response: ZeroFinanceResponse, json?: boolean): void {\n if (json) {\n console.log(JSON.stringify(response));\n return;\n }\n\n console.log(chalk.green(`✓ Finance ${response.operation} completed`));\n console.log(JSON.stringify(response.result, null, 2));\n console.log(chalk.dim(`Provider: ${response.provider}`));\n console.log(chalk.dim(`Credits charged: ${response.creditsCharged}`));\n}\n\nconst searchCommand = new Command()\n .name(\"search\")\n .description(\"Search for a financial instrument\")\n .argument(\"<query>\", \"Company name, symbol, or instrument\")\n .option(\"--json\", \"Print the raw Zero Finance response as JSON\")\n .action(\n withErrorHandler(async (query: string, options: JsonOption) => {\n const request = zeroFinanceSearchRequestSchema.safeParse({ query });\n if (!request.success) {\n throw new InvalidArgumentError(firstIssueMessage(request));\n }\n renderResponse(await callZeroFinanceSearch(request.data), options.json);\n }),\n );\n\nconst profileCommand = new Command()\n .name(\"profile\")\n .description(\"Fetch a company profile\")\n .argument(\"<symbol>\", \"Yahoo Finance symbol, such as AAPL or 0700.HK\")\n .option(\"--json\", \"Print the raw Zero Finance response as JSON\")\n .action(\n withErrorHandler(async (symbol: string, options: JsonOption) => {\n const request = zeroFinanceProfileRequestSchema.safeParse({ symbol });\n if (!request.success) {\n throw new InvalidArgumentError(firstIssueMessage(request));\n }\n renderResponse(await callZeroFinanceProfile(request.data), options.json);\n }),\n );\n\nconst quoteCommand = new Command()\n .name(\"quote\")\n .description(\"Fetch the latest available market quote\")\n .argument(\"<symbol>\", \"Yahoo Finance symbol, such as AAPL or 0700.HK\")\n .option(\"--json\", \"Print the raw Zero Finance response as JSON\")\n .action(\n withErrorHandler(async (symbol: string, options: JsonOption) => {\n const request = zeroFinanceQuoteRequestSchema.safeParse({ symbol });\n if (!request.success) {\n throw new InvalidArgumentError(firstIssueMessage(request));\n }\n renderResponse(await callZeroFinanceQuote(request.data), options.json);\n }),\n );\n\nconst chartCommand = new Command()\n .name(\"chart\")\n .description(\"Fetch OHLCV chart data\")\n .argument(\"<symbol>\", \"Yahoo Finance symbol, such as AAPL or 0700.HK\")\n .addOption(\n new Option(\"--range <range>\", \"Chart time range\")\n .default(ZERO_FINANCE_DEFAULT_RANGE)\n .argParser(parseRange),\n )\n .addOption(\n new Option(\"--interval <interval>\", \"Chart interval\")\n .default(ZERO_FINANCE_DEFAULT_INTERVAL)\n .argParser(parseInterval),\n )\n .option(\"--json\", \"Print the raw Zero Finance response as JSON\")\n .action(\n withErrorHandler(async (symbol: string, options: ChartOptions) => {\n const request = zeroFinanceChartRequestSchema.safeParse({\n symbol,\n range: options.range,\n interval: options.interval,\n });\n if (!request.success) {\n throw new InvalidArgumentError(firstIssueMessage(request));\n }\n renderResponse(await callZeroFinanceChart(request.data), options.json);\n }),\n );\n\nexport const zeroFinanceCommand = new Command()\n .name(\"finance\")\n .description(\"Query financial instruments through managed Zero Finance\")\n .addCommand(searchCommand)\n .addCommand(profileCommand)\n .addCommand(quoteCommand)\n .addCommand(chartCommand)\n .addHelpText(\n \"after\",\n `\nExamples:\n Search instruments: zero finance search \"Tencent\"\n Company profile: zero finance profile AAPL\n Latest quote: zero finance quote 0700.HK --json\n Historical chart: zero finance chart AAPL --range 1y --interval 1d\n\nNotes:\n - Authenticates via ZERO_TOKEN (requires finance:read capability) or a CLI token\n - Each successful command consumes 1 credit\n - Data is returned from APIDojo's Yahoo Finance API on RapidAPI without Zero-side caching`,\n );\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/commands/zero/finance/index.ts"],"sourcesContent":["import { Command, InvalidArgumentError, Option } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n ZERO_FINANCE_DEFAULT_INTERVAL,\n ZERO_FINANCE_DEFAULT_RANGE,\n zeroFinanceChartRequestSchema,\n zeroFinanceIntervalSchema,\n zeroFinanceProfileRequestSchema,\n zeroFinanceQuoteRequestSchema,\n zeroFinanceRangeSchema,\n zeroFinanceSearchRequestSchema,\n type ZeroFinanceInterval,\n type ZeroFinanceRange,\n} from \"@vm0/api-contracts/contracts/zero-finance\";\n\nimport {\n callZeroFinanceChart,\n callZeroFinanceProfile,\n callZeroFinanceQuote,\n callZeroFinanceSearch,\n type ZeroFinanceResponse,\n} from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\ninterface JsonOption {\n readonly json?: boolean;\n}\n\ninterface ChartOptions extends JsonOption {\n readonly range: ZeroFinanceRange;\n readonly interval: ZeroFinanceInterval;\n}\n\nfunction firstIssueMessage(\n result:\n | ReturnType<typeof zeroFinanceSearchRequestSchema.safeParse>\n | ReturnType<typeof zeroFinanceProfileRequestSchema.safeParse>\n | ReturnType<typeof zeroFinanceQuoteRequestSchema.safeParse>\n | ReturnType<typeof zeroFinanceChartRequestSchema.safeParse>,\n): string {\n return result.success\n ? \"finance request is invalid\"\n : (result.error.issues[0]?.message ?? \"finance request is invalid\");\n}\n\nfunction parseRange(value: string): ZeroFinanceRange {\n const result = zeroFinanceRangeSchema.safeParse(value);\n if (result.success) {\n return result.data;\n }\n throw new InvalidArgumentError(\n `range must be one of: ${zeroFinanceRangeSchema.options.join(\", \")}`,\n );\n}\n\nfunction parseInterval(value: string): ZeroFinanceInterval {\n const result = zeroFinanceIntervalSchema.safeParse(value);\n if (result.success) {\n return result.data;\n }\n throw new InvalidArgumentError(\n `interval must be one of: ${zeroFinanceIntervalSchema.options.join(\", \")}`,\n );\n}\n\nfunction renderResponse(response: ZeroFinanceResponse, json?: boolean): void {\n if (json) {\n console.log(JSON.stringify(response));\n return;\n }\n\n console.log(chalk.green(`✓ Finance ${response.operation} completed`));\n console.log(JSON.stringify(response.result, null, 2));\n console.log(chalk.dim(`Provider: ${response.provider}`));\n console.log(chalk.dim(`Credits charged: ${response.creditsCharged}`));\n}\n\nconst searchCommand = new Command()\n .name(\"search\")\n .description(\"Search for a financial instrument\")\n .argument(\"<query>\", \"Company name, symbol, or instrument\")\n .option(\"--json\", \"Print the raw Zero Finance response as JSON\")\n .action(\n withErrorHandler(async (query: string, options: JsonOption) => {\n const request = zeroFinanceSearchRequestSchema.safeParse({ query });\n if (!request.success) {\n throw new InvalidArgumentError(firstIssueMessage(request));\n }\n renderResponse(await callZeroFinanceSearch(request.data), options.json);\n }),\n );\n\nconst profileCommand = new Command()\n .name(\"profile\")\n .description(\"Fetch a company profile\")\n .argument(\"<symbol>\", \"Yahoo Finance symbol, such as AAPL or 0700.HK\")\n .option(\"--json\", \"Print the raw Zero Finance response as JSON\")\n .action(\n withErrorHandler(async (symbol: string, options: JsonOption) => {\n const request = zeroFinanceProfileRequestSchema.safeParse({ symbol });\n if (!request.success) {\n throw new InvalidArgumentError(firstIssueMessage(request));\n }\n renderResponse(await callZeroFinanceProfile(request.data), options.json);\n }),\n );\n\nconst quoteCommand = new Command()\n .name(\"quote\")\n .description(\"Fetch the latest available market quote\")\n .argument(\"<symbol>\", \"Yahoo Finance symbol, such as AAPL or 0700.HK\")\n .option(\"--json\", \"Print the raw Zero Finance response as JSON\")\n .action(\n withErrorHandler(async (symbol: string, options: JsonOption) => {\n const request = zeroFinanceQuoteRequestSchema.safeParse({ symbol });\n if (!request.success) {\n throw new InvalidArgumentError(firstIssueMessage(request));\n }\n renderResponse(await callZeroFinanceQuote(request.data), options.json);\n }),\n );\n\nconst chartCommand = new Command()\n .name(\"chart\")\n .description(\"Fetch OHLCV chart data\")\n .argument(\"<symbol>\", \"Yahoo Finance symbol, such as AAPL or 0700.HK\")\n .addOption(\n new Option(\"--range <range>\", \"Chart time range\")\n .default(ZERO_FINANCE_DEFAULT_RANGE)\n .argParser(parseRange),\n )\n .addOption(\n new Option(\"--interval <interval>\", \"Chart interval\")\n .default(ZERO_FINANCE_DEFAULT_INTERVAL)\n .argParser(parseInterval),\n )\n .option(\"--json\", \"Print the raw Zero Finance response as JSON\")\n .action(\n withErrorHandler(async (symbol: string, options: ChartOptions) => {\n const request = zeroFinanceChartRequestSchema.safeParse({\n symbol,\n range: options.range,\n interval: options.interval,\n });\n if (!request.success) {\n throw new InvalidArgumentError(firstIssueMessage(request));\n }\n renderResponse(await callZeroFinanceChart(request.data), options.json);\n }),\n );\n\nexport const zeroFinanceCommand = new Command()\n .name(\"finance\")\n .description(\"Query financial instruments through managed Zero Finance\")\n .addCommand(searchCommand)\n .addCommand(profileCommand)\n .addCommand(quoteCommand)\n .addCommand(chartCommand)\n .addHelpText(\n \"after\",\n `\nExamples:\n Search instruments: zero finance search \"Tencent\"\n Company profile: zero finance profile AAPL\n Latest quote: zero finance quote 0700.HK --json\n Historical chart: zero finance chart AAPL --range 1y --interval 1d\n\nNotes:\n - Authenticates via ZERO_TOKEN (requires finance:read capability) or a CLI token\n - Each successful command consumes 1 credit\n - Data is returned from APIDojo's Yahoo Finance API on RapidAPI without Zero-side caching`,\n );\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAiCA,SAAS,kBACP,QAKQ;AACR,SAAO,OAAO,UACV,+BACC,OAAO,MAAM,OAAO,CAAC,GAAG,WAAW;AAC1C;AAEA,SAAS,WAAW,OAAiC;AACnD,QAAM,SAAS,uBAAuB,UAAU,KAAK;AACrD,MAAI,OAAO,SAAS;AAClB,WAAO,OAAO;AAAA,EAChB;AACA,QAAM,IAAI;AAAA,IACR,yBAAyB,uBAAuB,QAAQ,KAAK,IAAI,CAAC;AAAA,EACpE;AACF;AAEA,SAAS,cAAc,OAAoC;AACzD,QAAM,SAAS,0BAA0B,UAAU,KAAK;AACxD,MAAI,OAAO,SAAS;AAClB,WAAO,OAAO;AAAA,EAChB;AACA,QAAM,IAAI;AAAA,IACR,4BAA4B,0BAA0B,QAAQ,KAAK,IAAI,CAAC;AAAA,EAC1E;AACF;AAEA,SAAS,eAAe,UAA+B,MAAsB;AAC3E,MAAI,MAAM;AACR,YAAQ,IAAI,KAAK,UAAU,QAAQ,CAAC;AACpC;AAAA,EACF;AAEA,UAAQ,IAAI,eAAM,MAAM,kBAAa,SAAS,SAAS,YAAY,CAAC;AACpE,UAAQ,IAAI,KAAK,UAAU,SAAS,QAAQ,MAAM,CAAC,CAAC;AACpD,UAAQ,IAAI,eAAM,IAAI,aAAa,SAAS,QAAQ,EAAE,CAAC;AACvD,UAAQ,IAAI,eAAM,IAAI,oBAAoB,SAAS,cAAc,EAAE,CAAC;AACtE;AAEA,IAAM,gBAAgB,IAAI,QAAQ,EAC/B,KAAK,QAAQ,EACb,YAAY,mCAAmC,EAC/C,SAAS,WAAW,qCAAqC,EACzD,OAAO,UAAU,6CAA6C,EAC9D;AAAA,EACC,iBAAiB,OAAO,OAAe,YAAwB;AAC7D,UAAM,UAAU,+BAA+B,UAAU,EAAE,MAAM,CAAC;AAClE,QAAI,CAAC,QAAQ,SAAS;AACpB,YAAM,IAAI,qBAAqB,kBAAkB,OAAO,CAAC;AAAA,IAC3D;AACA,mBAAe,MAAM,sBAAsB,QAAQ,IAAI,GAAG,QAAQ,IAAI;AAAA,EACxE,CAAC;AACH;AAEF,IAAM,iBAAiB,IAAI,QAAQ,EAChC,KAAK,SAAS,EACd,YAAY,yBAAyB,EACrC,SAAS,YAAY,+CAA+C,EACpE,OAAO,UAAU,6CAA6C,EAC9D;AAAA,EACC,iBAAiB,OAAO,QAAgB,YAAwB;AAC9D,UAAM,UAAU,gCAAgC,UAAU,EAAE,OAAO,CAAC;AACpE,QAAI,CAAC,QAAQ,SAAS;AACpB,YAAM,IAAI,qBAAqB,kBAAkB,OAAO,CAAC;AAAA,IAC3D;AACA,mBAAe,MAAM,uBAAuB,QAAQ,IAAI,GAAG,QAAQ,IAAI;AAAA,EACzE,CAAC;AACH;AAEF,IAAM,eAAe,IAAI,QAAQ,EAC9B,KAAK,OAAO,EACZ,YAAY,yCAAyC,EACrD,SAAS,YAAY,+CAA+C,EACpE,OAAO,UAAU,6CAA6C,EAC9D;AAAA,EACC,iBAAiB,OAAO,QAAgB,YAAwB;AAC9D,UAAM,UAAU,8BAA8B,UAAU,EAAE,OAAO,CAAC;AAClE,QAAI,CAAC,QAAQ,SAAS;AACpB,YAAM,IAAI,qBAAqB,kBAAkB,OAAO,CAAC;AAAA,IAC3D;AACA,mBAAe,MAAM,qBAAqB,QAAQ,IAAI,GAAG,QAAQ,IAAI;AAAA,EACvE,CAAC;AACH;AAEF,IAAM,eAAe,IAAI,QAAQ,EAC9B,KAAK,OAAO,EACZ,YAAY,wBAAwB,EACpC,SAAS,YAAY,+CAA+C,EACpE;AAAA,EACC,IAAI,OAAO,mBAAmB,kBAAkB,EAC7C,QAAQ,0BAA0B,EAClC,UAAU,UAAU;AACzB,EACC;AAAA,EACC,IAAI,OAAO,yBAAyB,gBAAgB,EACjD,QAAQ,6BAA6B,EACrC,UAAU,aAAa;AAC5B,EACC,OAAO,UAAU,6CAA6C,EAC9D;AAAA,EACC,iBAAiB,OAAO,QAAgB,YAA0B;AAChE,UAAM,UAAU,8BAA8B,UAAU;AAAA,MACtD;AAAA,MACA,OAAO,QAAQ;AAAA,MACf,UAAU,QAAQ;AAAA,IACpB,CAAC;AACD,QAAI,CAAC,QAAQ,SAAS;AACpB,YAAM,IAAI,qBAAqB,kBAAkB,OAAO,CAAC;AAAA,IAC3D;AACA,mBAAe,MAAM,qBAAqB,QAAQ,IAAI,GAAG,QAAQ,IAAI;AAAA,EACvE,CAAC;AACH;AAEK,IAAM,qBAAqB,IAAI,QAAQ,EAC3C,KAAK,SAAS,EACd,YAAY,0DAA0D,EACtE,WAAW,aAAa,EACxB,WAAW,cAAc,EACzB,WAAW,YAAY,EACvB,WAAW,YAAY,EACvB;AAAA,EACC;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWF;","names":[]}
|