@vonpay/checkout-cli 0.12.0 → 0.14.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.
Files changed (113) hide show
  1. package/dist/index.js +2397 -12
  2. package/package.json +6 -4
  3. package/dist/app-info.d.ts +0 -5
  4. package/dist/app-info.d.ts.map +0 -1
  5. package/dist/app-info.js +0 -11
  6. package/dist/app-info.js.map +0 -1
  7. package/dist/client-factory.d.ts +0 -10
  8. package/dist/client-factory.d.ts.map +0 -1
  9. package/dist/client-factory.js +0 -31
  10. package/dist/client-factory.js.map +0 -1
  11. package/dist/commands/capabilities.d.ts +0 -15
  12. package/dist/commands/capabilities.d.ts.map +0 -1
  13. package/dist/commands/capabilities.js +0 -99
  14. package/dist/commands/capabilities.js.map +0 -1
  15. package/dist/commands/checkout.d.ts +0 -3
  16. package/dist/commands/checkout.d.ts.map +0 -1
  17. package/dist/commands/checkout.js +0 -39
  18. package/dist/commands/checkout.js.map +0 -1
  19. package/dist/commands/doctor.d.ts +0 -59
  20. package/dist/commands/doctor.d.ts.map +0 -1
  21. package/dist/commands/doctor.js +0 -366
  22. package/dist/commands/doctor.js.map +0 -1
  23. package/dist/commands/health.d.ts +0 -3
  24. package/dist/commands/health.d.ts.map +0 -1
  25. package/dist/commands/health.js +0 -52
  26. package/dist/commands/health.js.map +0 -1
  27. package/dist/commands/init.d.ts +0 -10
  28. package/dist/commands/init.d.ts.map +0 -1
  29. package/dist/commands/init.js +0 -112
  30. package/dist/commands/init.js.map +0 -1
  31. package/dist/commands/listen.d.ts +0 -19
  32. package/dist/commands/listen.d.ts.map +0 -1
  33. package/dist/commands/listen.js +0 -249
  34. package/dist/commands/listen.js.map +0 -1
  35. package/dist/commands/login.d.ts +0 -27
  36. package/dist/commands/login.d.ts.map +0 -1
  37. package/dist/commands/login.js +0 -75
  38. package/dist/commands/login.js.map +0 -1
  39. package/dist/commands/logout.d.ts +0 -3
  40. package/dist/commands/logout.d.ts.map +0 -1
  41. package/dist/commands/logout.js +0 -23
  42. package/dist/commands/logout.js.map +0 -1
  43. package/dist/commands/payment-intents.d.ts +0 -62
  44. package/dist/commands/payment-intents.d.ts.map +0 -1
  45. package/dist/commands/payment-intents.js +0 -271
  46. package/dist/commands/payment-intents.js.map +0 -1
  47. package/dist/commands/refunds.d.ts +0 -40
  48. package/dist/commands/refunds.d.ts.map +0 -1
  49. package/dist/commands/refunds.js +0 -142
  50. package/dist/commands/refunds.js.map +0 -1
  51. package/dist/commands/sessions.d.ts +0 -16
  52. package/dist/commands/sessions.d.ts.map +0 -1
  53. package/dist/commands/sessions.js +0 -152
  54. package/dist/commands/sessions.js.map +0 -1
  55. package/dist/commands/tokens.d.ts +0 -3
  56. package/dist/commands/tokens.d.ts.map +0 -1
  57. package/dist/commands/tokens.js +0 -73
  58. package/dist/commands/tokens.js.map +0 -1
  59. package/dist/commands/trigger.d.ts +0 -38
  60. package/dist/commands/trigger.d.ts.map +0 -1
  61. package/dist/commands/trigger.js +0 -246
  62. package/dist/commands/trigger.js.map +0 -1
  63. package/dist/config.d.ts +0 -22
  64. package/dist/config.d.ts.map +0 -1
  65. package/dist/config.js +0 -72
  66. package/dist/config.js.map +0 -1
  67. package/dist/index.d.ts +0 -3
  68. package/dist/index.d.ts.map +0 -1
  69. package/dist/index.js.map +0 -1
  70. package/dist/utils/errors.d.ts +0 -80
  71. package/dist/utils/errors.d.ts.map +0 -1
  72. package/dist/utils/errors.js +0 -179
  73. package/dist/utils/errors.js.map +0 -1
  74. package/dist/utils/forward-to.d.ts +0 -38
  75. package/dist/utils/forward-to.d.ts.map +0 -1
  76. package/dist/utils/forward-to.js +0 -92
  77. package/dist/utils/forward-to.js.map +0 -1
  78. package/dist/utils/json-errors.d.ts +0 -16
  79. package/dist/utils/json-errors.d.ts.map +0 -1
  80. package/dist/utils/json-errors.js +0 -41
  81. package/dist/utils/json-errors.js.map +0 -1
  82. package/dist/utils/listen-forward.d.ts +0 -49
  83. package/dist/utils/listen-forward.d.ts.map +0 -1
  84. package/dist/utils/listen-forward.js +0 -113
  85. package/dist/utils/listen-forward.js.map +0 -1
  86. package/dist/utils/listen-output.d.ts +0 -52
  87. package/dist/utils/listen-output.d.ts.map +0 -1
  88. package/dist/utils/listen-output.js +0 -85
  89. package/dist/utils/listen-output.js.map +0 -1
  90. package/dist/utils/live-key.d.ts +0 -22
  91. package/dist/utils/live-key.d.ts.map +0 -1
  92. package/dist/utils/live-key.js +0 -37
  93. package/dist/utils/live-key.js.map +0 -1
  94. package/dist/utils/metadata.d.ts +0 -2
  95. package/dist/utils/metadata.d.ts.map +0 -1
  96. package/dist/utils/metadata.js +0 -31
  97. package/dist/utils/metadata.js.map +0 -1
  98. package/dist/utils/sanitize.d.ts +0 -4
  99. package/dist/utils/sanitize.d.ts.map +0 -1
  100. package/dist/utils/sanitize.js +0 -18
  101. package/dist/utils/sanitize.js.map +0 -1
  102. package/dist/utils/spinner.d.ts +0 -15
  103. package/dist/utils/spinner.d.ts.map +0 -1
  104. package/dist/utils/spinner.js +0 -18
  105. package/dist/utils/spinner.js.map +0 -1
  106. package/dist/utils/sse-consumer.d.ts +0 -81
  107. package/dist/utils/sse-consumer.d.ts.map +0 -1
  108. package/dist/utils/sse-consumer.js +0 -172
  109. package/dist/utils/sse-consumer.js.map +0 -1
  110. package/dist/utils/sse-parser.d.ts +0 -63
  111. package/dist/utils/sse-parser.d.ts.map +0 -1
  112. package/dist/utils/sse-parser.js +0 -149
  113. package/dist/utils/sse-parser.js.map +0 -1
@@ -1,366 +0,0 @@
1
- // `vonpay checkout doctor` — diagnostic bundle for support tickets and LLM agents.
2
- //
3
- // Captures the integrator's environment + a live health probe + (if a key is
4
- // available) a sessions.validate round-trip, formats it as either:
5
- // - human-readable (default) — coloured table for paste into chat
6
- // - JSON (--json) — machine-parseable for tooling
7
- // - LLM-friendly markdown (--for-llm) — structured so an agent can read it
8
- // and decide next steps without further prompting
9
- //
10
- // PII posture: API keys are NEVER printed (only the prefix); env-var values
11
- // are NEVER printed (only the names that are present). The bundle is safe to
12
- // paste into a public support thread or hand to an LLM agent.
13
- import { Command } from "commander";
14
- import chalk from "chalk";
15
- import ora from "ora";
16
- import { homedir } from "node:os";
17
- import { readFileSync, existsSync } from "node:fs";
18
- import { dirname, join } from "node:path";
19
- import { fileURLToPath } from "node:url";
20
- import { VonPayCheckout, VonPayError, helpFor, } from "@vonpay/checkout-node";
21
- import { loadConfig } from "../config.js";
22
- import { CLI_APP_INFO } from "../app-info.js";
23
- const __dirname = dirname(fileURLToPath(import.meta.url));
24
- const pkgPath = join(__dirname, "..", "..", "package.json");
25
- const cliPkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
26
- const RELEVANT_ENV_VARS = [
27
- "VON_PAY_SECRET_KEY",
28
- "VON_PAY_PUBLISHABLE_KEY",
29
- "VON_PAY_SESSION_SECRET",
30
- "VONPAY_BASE_URL",
31
- "VONPAY_QUIET",
32
- "NEXT_PUBLIC_BASE_URL",
33
- ];
34
- /** Replace the user's home-directory prefix with `~` so paths in the bundle don't leak username/filesystem layout when pasted publicly. */
35
- function redactHome(p) {
36
- const home = homedir();
37
- if (home && p.startsWith(home)) {
38
- return "~" + p.slice(home.length);
39
- }
40
- return p;
41
- }
42
- function maskPrefix(key) {
43
- if (!key)
44
- return undefined;
45
- // Show prefix + first 4 chars of payload so support can correlate, never
46
- // the full secret. Example: "vp_sk_test_abcd…"
47
- const m = key.match(/^(vp_[ps]k_(test|live)_)([A-Za-z0-9_-]{0,4})/);
48
- if (!m)
49
- return undefined;
50
- return `${m[1]}${m[3]}…`;
51
- }
52
- function keyMode(key) {
53
- if (!key)
54
- return undefined;
55
- // Only API keys (vp_sk_* / vp_pk_*) carry mode in their prefix. Session
56
- // signing secrets (ss_*) and webhook secrets (whsec_*) don't.
57
- if (!/^vp_[ps]k_/.test(key))
58
- return undefined;
59
- if (key.includes("_test_"))
60
- return "test";
61
- if (key.includes("_live_"))
62
- return "live";
63
- return undefined;
64
- }
65
- async function gather() {
66
- const config = loadConfig();
67
- const apiKey = process.env.VON_PAY_SECRET_KEY ??
68
- config.checkout?.apiKey;
69
- const baseUrl = process.env.VONPAY_BASE_URL ?? "https://checkout.vonpay.com";
70
- const envVarsPresent = RELEVANT_ENV_VARS.filter((n) => process.env[n] && process.env[n] !== "");
71
- const report = {
72
- generatedAt: new Date().toISOString(),
73
- cli: { version: cliPkg.version },
74
- runtime: {
75
- node: process.version,
76
- platform: process.platform,
77
- arch: process.arch,
78
- cwd: redactHome(process.cwd()),
79
- },
80
- envVarsPresent,
81
- configFile: {
82
- path: `${process.env.HOME ?? process.env.USERPROFILE ?? "~"}/.vonpay/config.json`,
83
- present: existsSync(`${process.env.HOME ?? process.env.USERPROFILE ?? ""}/.vonpay/config.json`),
84
- keyType: config.checkout?.apiKey ? keyMode(config.checkout?.apiKey) : undefined,
85
- },
86
- apiKeyPrefix: maskPrefix(apiKey),
87
- apiKeyMode: keyMode(apiKey),
88
- health: { baseUrl, reachable: false },
89
- hints: [],
90
- };
91
- if (!apiKey) {
92
- report.hints.push("No API key found. Set VON_PAY_SECRET_KEY in env, or run `vonpay checkout login` to save one. Without a key the health probe still runs but sessions.validate is skipped.");
93
- }
94
- // Health probe — public endpoint, requires no auth. Uses bare fetch to avoid
95
- // constructing a VonPayCheckout with a placeholder key (which would transmit
96
- // a placeholder string as Bearer). The /api/health endpoint is documented as public.
97
- const start = Date.now();
98
- try {
99
- const controller = new AbortController();
100
- const timer = setTimeout(() => controller.abort(), 10_000);
101
- const res = await fetch(`${baseUrl}/api/health`, {
102
- method: "GET",
103
- headers: {
104
- Accept: "application/json",
105
- "User-Agent": `vonpay-cli/${cliPkg.version} (doctor)`,
106
- },
107
- signal: controller.signal,
108
- });
109
- clearTimeout(timer);
110
- report.health.latencyMs = Date.now() - start;
111
- if (res.ok) {
112
- const body = (await res.json().catch(() => ({})));
113
- report.health.reachable = true;
114
- report.health.status = body.status ?? "ok";
115
- }
116
- else {
117
- report.health.reachable = false;
118
- report.health.status = `http_${res.status}`;
119
- report.health.error = `HTTP ${res.status}`;
120
- report.hints.push(`Health endpoint returned HTTP ${res.status}. Either the API is having an incident or your baseUrl override is wrong.`);
121
- }
122
- }
123
- catch (err) {
124
- report.health.error = err instanceof Error ? err.message : String(err);
125
- report.health.latencyMs = Date.now() - start;
126
- report.hints.push("Health probe could not reach the API. Check network / DNS / firewall — vonpay-checkout requires outbound HTTPS to checkout.vonpay.com.");
127
- }
128
- // sessions.validate probe — only if we have a key
129
- if (apiKey && report.health.reachable) {
130
- try {
131
- const probeClient = new VonPayCheckout({
132
- apiKey,
133
- baseUrl,
134
- timeout: 10_000,
135
- maxRetries: 0,
136
- errorReporter: () => { }, // suppress default warn during the probe
137
- appInfo: CLI_APP_INFO,
138
- });
139
- const result = await probeClient.sessions.validate({
140
- amount: 1499,
141
- currency: "USD",
142
- });
143
- report.validateProbe = {
144
- ok: result.valid,
145
- warnings: result.warnings,
146
- };
147
- if (!result.valid) {
148
- report.hints.push(`sessions.validate returned valid=false with warnings: ${(result.warnings ?? []).join("; ")}.`);
149
- }
150
- else if (result.warnings && result.warnings.length > 0) {
151
- report.hints.push(`sessions.validate succeeded but with warnings: ${result.warnings.join("; ")}.`);
152
- }
153
- }
154
- catch (err) {
155
- if (err instanceof VonPayError) {
156
- const help = helpFor(err.code);
157
- report.validateProbe = {
158
- ok: false,
159
- error: {
160
- code: err.code,
161
- status: err.status,
162
- nextAction: help.nextAction,
163
- llmHint: help.llmHint,
164
- },
165
- };
166
- report.hints.push(`sessions.validate failed: ${err.code}. ${help.llmHint}`);
167
- }
168
- else {
169
- report.validateProbe = {
170
- ok: false,
171
- error: {
172
- code: "internal_error",
173
- status: 0,
174
- nextAction: "contact_support",
175
- llmHint: err instanceof Error ? err.message : String(err),
176
- },
177
- };
178
- }
179
- }
180
- }
181
- return report;
182
- }
183
- function renderHuman(r) {
184
- const lines = [];
185
- lines.push(chalk.bold.blue("vonpay doctor — diagnostic report"));
186
- lines.push(chalk.dim(`generated ${r.generatedAt}`));
187
- lines.push("");
188
- lines.push(chalk.bold("Runtime"));
189
- lines.push(` CLI: ${r.cli.version}`);
190
- lines.push(` Node: ${r.runtime.node}`);
191
- lines.push(` Platform: ${r.runtime.platform} (${r.runtime.arch})`);
192
- lines.push(` CWD: ${r.runtime.cwd}`);
193
- lines.push("");
194
- lines.push(chalk.bold("API key"));
195
- if (r.apiKeyPrefix) {
196
- lines.push(` Prefix: ${r.apiKeyPrefix}`);
197
- lines.push(` Mode: ${r.apiKeyMode}`);
198
- }
199
- else {
200
- lines.push(chalk.dim(" (no key found in env or ~/.vonpay/config.json)"));
201
- }
202
- lines.push("");
203
- lines.push(chalk.bold("Env vars present (names only)"));
204
- if (r.envVarsPresent.length === 0) {
205
- lines.push(chalk.dim(" (none of the expected vonpay env vars are set)"));
206
- }
207
- else {
208
- for (const n of r.envVarsPresent)
209
- lines.push(` ✓ ${n}`);
210
- }
211
- lines.push("");
212
- lines.push(chalk.bold("Health probe"));
213
- if (r.health.reachable) {
214
- const statusColor = r.health.status === "ok"
215
- ? chalk.green
216
- : r.health.status === "degraded"
217
- ? chalk.yellow
218
- : chalk.red;
219
- lines.push(` Reachable: ${chalk.green("yes")}`);
220
- lines.push(` Status: ${statusColor(r.health.status ?? "?")}`);
221
- lines.push(` Latency: ${r.health.latencyMs}ms`);
222
- }
223
- else {
224
- lines.push(` Reachable: ${chalk.red("no")}`);
225
- lines.push(` Error: ${r.health.error}`);
226
- }
227
- lines.push("");
228
- if (r.validateProbe) {
229
- lines.push(chalk.bold("sessions.validate probe ($14.99 USD dry-run)"));
230
- if (r.validateProbe.ok) {
231
- lines.push(` Result: ${chalk.green("valid")}`);
232
- }
233
- else {
234
- lines.push(` Result: ${chalk.red("invalid")}`);
235
- if (r.validateProbe.error) {
236
- lines.push(` Code: ${r.validateProbe.error.code}`);
237
- lines.push(` Action: ${r.validateProbe.error.nextAction}`);
238
- }
239
- }
240
- if (r.validateProbe.warnings && r.validateProbe.warnings.length > 0) {
241
- lines.push(` Warnings:`);
242
- for (const w of r.validateProbe.warnings)
243
- lines.push(` - ${w}`);
244
- }
245
- lines.push("");
246
- }
247
- if (r.hints.length > 0) {
248
- lines.push(chalk.bold("Hints"));
249
- for (const h of r.hints)
250
- lines.push(` • ${h}`);
251
- lines.push("");
252
- }
253
- return lines.join("\n");
254
- }
255
- function renderForLlm(r) {
256
- const out = [];
257
- out.push("# vonpay doctor — diagnostic report (LLM-readable)");
258
- out.push("");
259
- out.push("This is a structured environment + live-API diagnostic from the");
260
- out.push("Von Payments CLI. An LLM agent reading this should determine the");
261
- out.push("most-likely root cause of the integrator's problem and produce");
262
- out.push("specific next-step instructions.");
263
- out.push("");
264
- out.push(`generated_at: ${r.generatedAt}`);
265
- out.push("");
266
- out.push("## Runtime");
267
- out.push(`- vonpay-cli: ${r.cli.version}`);
268
- out.push(`- node: ${r.runtime.node}`);
269
- out.push(`- platform: ${r.runtime.platform} (${r.runtime.arch})`);
270
- out.push("");
271
- out.push("## API key");
272
- if (r.apiKeyPrefix) {
273
- out.push(`- prefix: \`${r.apiKeyPrefix}\` (first 4 chars of payload only — full key never printed)`);
274
- out.push(`- mode: ${r.apiKeyMode}`);
275
- }
276
- else {
277
- out.push("- no key found in env or `~/.vonpay/config.json`");
278
- out.push("- LLM-action: ask the human to set `VON_PAY_SECRET_KEY` or run `vonpay checkout login`");
279
- }
280
- out.push("");
281
- out.push("## Env vars present (names only — values never printed)");
282
- if (r.envVarsPresent.length === 0) {
283
- out.push("- (none of the expected vonpay env vars are set)");
284
- }
285
- else {
286
- for (const n of r.envVarsPresent)
287
- out.push(`- \`${n}\``);
288
- }
289
- out.push("");
290
- out.push("## Health probe");
291
- out.push(`- base_url: ${r.health.baseUrl}`);
292
- out.push(`- reachable: ${r.health.reachable}`);
293
- if (r.health.latencyMs !== undefined) {
294
- out.push(`- latency_ms: ${r.health.latencyMs}`);
295
- }
296
- if (r.health.status)
297
- out.push(`- status: ${r.health.status}`);
298
- if (r.health.error)
299
- out.push(`- error: ${r.health.error}`);
300
- out.push("");
301
- if (r.validateProbe) {
302
- out.push("## sessions.validate probe ($14.99 USD dry-run)");
303
- out.push(`- ok: ${r.validateProbe.ok}`);
304
- if (r.validateProbe.warnings && r.validateProbe.warnings.length > 0) {
305
- out.push("- warnings:");
306
- for (const w of r.validateProbe.warnings)
307
- out.push(` - ${w}`);
308
- }
309
- if (r.validateProbe.error) {
310
- out.push("- error:");
311
- out.push(` - code: \`${r.validateProbe.error.code}\``);
312
- out.push(` - status: ${r.validateProbe.error.status}`);
313
- out.push(` - next_action: \`${r.validateProbe.error.nextAction}\``);
314
- out.push(` - llm_hint: ${r.validateProbe.error.llmHint}`);
315
- }
316
- out.push("");
317
- }
318
- if (r.hints.length > 0) {
319
- out.push("## Hints (in priority order)");
320
- for (const h of r.hints)
321
- out.push(`- ${h}`);
322
- out.push("");
323
- }
324
- out.push("## Suggested LLM next steps");
325
- out.push("1. Determine which of the three categories applies: missing-config / unreachable-api / failing-validation.");
326
- out.push("2. For each hint above, propose ONE specific code or env change to the human.");
327
- out.push("3. Suggest the human re-run `vonpay checkout doctor --for-llm` after applying changes and paste the new output.");
328
- out.push("4. If the report shows everything healthy but the integrator still has a problem, the issue is likely in their own code (not vonpay) — ask them to share the failing call site.");
329
- out.push("");
330
- return out.join("\n");
331
- }
332
- // Internals exposed for unit tests. Not part of the public CLI surface.
333
- export const __test__ = {
334
- maskPrefix,
335
- keyMode,
336
- redactHome,
337
- renderHuman,
338
- renderForLlm,
339
- gather,
340
- };
341
- export function doctorCommand() {
342
- return new Command("doctor")
343
- .description("Diagnose your Von Payments environment — runtime, env vars, live API probe; outputs human / JSON / LLM-readable formats")
344
- .option("--json", "Output JSON (machine-parseable)")
345
- .option("--for-llm", "Output LLM-friendly markdown (paste into Claude, ChatGPT, Cursor)")
346
- .action(async (opts) => {
347
- const spinner = ora({
348
- text: "Running diagnostics...",
349
- // suppress spinner output when emitting JSON / LLM markdown so the
350
- // output remains pipeable
351
- isSilent: opts.json || opts.forLlm,
352
- }).start();
353
- const report = await gather();
354
- spinner.stop();
355
- if (opts.json) {
356
- console.log(JSON.stringify(report, null, 2));
357
- }
358
- else if (opts.forLlm) {
359
- console.log(renderForLlm(report));
360
- }
361
- else {
362
- console.log(renderHuman(report));
363
- }
364
- });
365
- }
366
- //# sourceMappingURL=doctor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { Command } from "commander";
2
- export declare function healthCommand(): Command;
3
- //# sourceMappingURL=health.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/commands/health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,aAAa,IAAI,OAAO,CA+CvC"}
@@ -1,52 +0,0 @@
1
- import { Command } from "commander";
2
- import chalk from "chalk";
3
- import { startSpinner } from "../utils/spinner.js";
4
- import { VonPayError } from "@vonpay/checkout-node";
5
- import { makeCheckoutClient } from "../client-factory.js";
6
- import { handleError, scrubSecrets } from "../utils/errors.js";
7
- import { jsonErrorsEnabled } from "../utils/json-errors.js";
8
- export function healthCommand() {
9
- return new Command("health")
10
- .description("Check checkout API health")
11
- .option("--json", "Output raw JSON")
12
- .action(async (opts) => {
13
- const client = makeCheckoutClient();
14
- const spinner = startSpinner("Checking API health...");
15
- try {
16
- const health = await client.health();
17
- spinner.stop();
18
- if (opts.json) {
19
- console.log(JSON.stringify(health, null, 2));
20
- }
21
- else {
22
- const statusColor = health.status === "ok"
23
- ? chalk.green
24
- : health.status === "degraded"
25
- ? chalk.yellow
26
- : chalk.red;
27
- console.log(` Status: ${statusColor(health.status)}`);
28
- console.log(` Latency: ${health.latencyMs}ms`);
29
- if (health.version) {
30
- console.log(` Version: ${health.version}`);
31
- }
32
- }
33
- }
34
- catch (err) {
35
- spinner.stop();
36
- // `--json`: the same one-line JSON error every other command prints.
37
- // The text below is this command's own wording; it now goes through
38
- // the same secret redaction as every other command's error output.
39
- if (jsonErrorsEnabled())
40
- handleError(err);
41
- if (err instanceof VonPayError) {
42
- console.error(chalk.red(`API error: ${scrubSecrets(err.message)}`));
43
- console.error(chalk.dim(` Code: ${err.code}`));
44
- }
45
- else {
46
- console.error(chalk.red(`Cannot reach API: ${scrubSecrets(err instanceof Error ? err.message : String(err))}`));
47
- }
48
- process.exit(1);
49
- }
50
- });
51
- }
52
- //# sourceMappingURL=health.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/commands/health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,MAAM,UAAU,aAAa;IAC3B,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC;SACzB,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,QAAQ,EAAE,iBAAiB,CAAC;SACnC,MAAM,CAAC,KAAK,EAAE,IAAwB,EAAE,EAAE;QACzC,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,YAAY,CAAC,wBAAwB,CAAC,CAAC;QAEvD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;YACrC,OAAO,CAAC,IAAI,EAAE,CAAC;YAEf,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,MAAM,WAAW,GACf,MAAM,CAAC,MAAM,KAAK,IAAI;oBACpB,CAAC,CAAC,KAAK,CAAC,KAAK;oBACb,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU;wBAC5B,CAAC,CAAC,KAAK,CAAC,MAAM;wBACd,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;gBAElB,OAAO,CAAC,GAAG,CAAC,eAAe,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACzD,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;gBACjD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACnB,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC/C,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,qEAAqE;YACrE,oEAAoE;YACpE,mEAAmE;YACnE,IAAI,iBAAiB,EAAE;gBAAE,WAAW,CAAC,GAAG,CAAC,CAAC;YAC1C,IAAI,GAAG,YAAY,WAAW,EAAE,CAAC;gBAC/B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;gBACpE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAClD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,qBAAqB,YAAY,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CACtF,CACF,CAAC;YACJ,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,10 +0,0 @@
1
- import { Command } from "commander";
2
- /**
3
- * Git applies patterns in order; later patterns override earlier ones. So
4
- * `*.env` followed by `!.env` leaves .env un-ignored. We walk the file and
5
- * track the current state, returning the final effective ignore status for
6
- * a repo-root .env file.
7
- */
8
- export declare function envAlreadyIgnoredFromText(gitignoreText: string): boolean;
9
- export declare function initCommand(): Command;
10
- //# sourceMappingURL=init.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8CpC;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAYxE;AAMD,wBAAgB,WAAW,IAAI,OAAO,CAmErC"}
@@ -1,112 +0,0 @@
1
- import { Command } from "commander";
2
- import { appendFileSync, existsSync, readFileSync, writeFileSync } from "node:fs";
3
- import { resolve } from "node:path";
4
- import chalk from "chalk";
5
- import { getApiKey } from "../config.js";
6
- function ensureGitignoreBlocksEnv() {
7
- if (!existsSync(".gitignore"))
8
- return "no-repo";
9
- if (envAlreadyIgnored(".gitignore")) {
10
- return "already";
11
- }
12
- appendFileSync(".gitignore", "\n# Added by vonpay checkout init\n.env\n");
13
- return "added";
14
- }
15
- /**
16
- * Returns true if .env (at repo root) is covered by any .gitignore rule:
17
- * - literal ".env" or "/.env" — anchored match
18
- * - "**\/.env" — doublestar match
19
- * - ".env*" / "**\/.env*" — glob prefixes
20
- * - "*.env" — suffix glob
21
- *
22
- * Intentionally NOT matched:
23
- * - ".env/" — directory-only pattern does not protect the file, so let
24
- * init append the anchored rule (safe).
25
- * - Any pattern that starts with "!" — a negation explicitly un-ignores
26
- * .env, which means the file is NOT protected. We return false for
27
- * those lines so init adds the safety net.
28
- */
29
- const POSITIVE_ENV_PATTERNS = new Set([
30
- ".env",
31
- "/.env",
32
- "**/.env",
33
- "*.env",
34
- "**/.env*",
35
- ".env*",
36
- ]);
37
- const NEGATION_ENV_PATTERNS = new Set([
38
- "!.env",
39
- "!/.env",
40
- "!**/.env",
41
- "!*.env",
42
- "!**/.env*",
43
- "!.env*",
44
- ]);
45
- /**
46
- * Git applies patterns in order; later patterns override earlier ones. So
47
- * `*.env` followed by `!.env` leaves .env un-ignored. We walk the file and
48
- * track the current state, returning the final effective ignore status for
49
- * a repo-root .env file.
50
- */
51
- export function envAlreadyIgnoredFromText(gitignoreText) {
52
- const lines = gitignoreText
53
- .split(/\r?\n/)
54
- .map((l) => l.trim())
55
- .filter((l) => l && !l.startsWith("#"));
56
- let ignored = false;
57
- for (const p of lines) {
58
- if (POSITIVE_ENV_PATTERNS.has(p))
59
- ignored = true;
60
- else if (NEGATION_ENV_PATTERNS.has(p))
61
- ignored = false;
62
- }
63
- return ignored;
64
- }
65
- function envAlreadyIgnored(rootIgnorePath) {
66
- return envAlreadyIgnoredFromText(readFileSync(rootIgnorePath, "utf-8"));
67
- }
68
- export function initCommand() {
69
- return new Command("init")
70
- .description("Initialize a project with Von Payments checkout")
71
- .option("-f, --force", "Overwrite existing .env file")
72
- .action(async (opts) => {
73
- const apiKey = getApiKey();
74
- if (!apiKey) {
75
- console.error(chalk.red("No API key found. Run `vonpay checkout login` first or set VON_PAY_SECRET_KEY."));
76
- process.exit(1);
77
- }
78
- const envFile = ".env";
79
- const absPath = resolve(envFile);
80
- if (existsSync(envFile) && !opts.force) {
81
- console.error(chalk.yellow(`.env already exists at ${absPath}. Use --force to overwrite.`));
82
- process.exit(1);
83
- }
84
- const mode = apiKey.includes("_test_") ? "test" : "live";
85
- if (mode === "live") {
86
- console.warn(chalk.yellow(`⚠ About to write a LIVE API key to ${absPath}.\n Confirm this is the intended directory, then re-run with --force if you're sure.`));
87
- if (!opts.force) {
88
- console.error(chalk.red("Refusing to write live key without --force."));
89
- process.exit(1);
90
- }
91
- }
92
- const content = [
93
- "# Von Payments Checkout",
94
- `# Mode: ${mode}`,
95
- `VON_PAY_SECRET_KEY=${apiKey}`,
96
- "",
97
- ].join("\n");
98
- writeFileSync(envFile, content, { encoding: "utf-8", mode: 0o600 });
99
- console.log(chalk.green(`✓ .env created (${mode} mode) → ${absPath}`));
100
- const gitignoreState = ensureGitignoreBlocksEnv();
101
- if (gitignoreState === "added") {
102
- console.log(chalk.dim(" Added .env to .gitignore"));
103
- }
104
- else if (gitignoreState === "already") {
105
- console.log(chalk.dim(" .env already listed in .gitignore ✓"));
106
- }
107
- else {
108
- console.log(chalk.yellow(" No .gitignore found. If this is a git repo, add .env to your .gitignore before committing."));
109
- }
110
- });
111
- }
112
- //# sourceMappingURL=init.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -1,19 +0,0 @@
1
- import { Command } from "commander";
2
- /**
3
- * `vonpay checkout listen` — long-lived SSE consumer for the merchant's
4
- * webhook delivery attempts.
5
- *
6
- * Industry conventions followed: WHATWG SSE spec for parsing,
7
- * Last-Event-ID for reconnect dedupe, exponential backoff, loopback-only
8
- * forward-to (Stripe CLI posture), refuse-live gate (mirrors
9
- * `vonpay checkout login --confirm-cli-exposure`), kubectl/gh-style
10
- * default human output with `--json` opt-in for machine consumption.
11
- *
12
- * Output channels:
13
- * stdout — attempt events (one per delivery), formatted per --json
14
- * stderr — lifecycle (connecting, reconnecting, shutdown summary)
15
- *
16
- * Stdout stays parseable in JSON mode regardless of reconnects.
17
- */
18
- export declare function listenCommand(): Command;
19
- //# sourceMappingURL=listen.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"listen.d.ts","sourceRoot":"","sources":["../../src/commands/listen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+BpC;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAqOvC"}