@meterapp/car-image 1.16.0 → 1.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/billing.js +30 -3
- package/dist/commands/billing.js.map +1 -1
- package/dist/commands/support.js +5 -2
- package/dist/commands/support.js.map +1 -1
- package/dist/commands/whoami.js +14 -2
- package/dist/commands/whoami.js.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +2 -2
package/dist/commands/billing.js
CHANGED
|
@@ -7,11 +7,12 @@ export const CREDIT_PACKS = [100, 500, 1000, 2500, 10000];
|
|
|
7
7
|
export const PAID_PLANS = ["pro", "business"];
|
|
8
8
|
export const billingCommand = {
|
|
9
9
|
name: "billing",
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
aliases: ["upgrade"],
|
|
11
|
+
summary: "Prepare a checkout or billing link (works before sign-in); confirm payment and plan changes in your browser",
|
|
12
|
+
usage: "car-image billing|upgrade [--plan pro|business [--yearly]] [--credits 100|500|1000|2500|10000] [--portal] [--no-browser] [--json]",
|
|
12
13
|
async run(ctx) {
|
|
13
14
|
const { io, clientContext } = ctx;
|
|
14
|
-
if (!clientContext.apiKey)
|
|
15
|
+
if (!clientContext.apiKey && ctx.args.flags.portal === true)
|
|
15
16
|
throw new CliError("Not signed in.", 1, "Run `car-image login` first.");
|
|
16
17
|
const selected = [ctx.args.flags.portal === true, ctx.args.flags.plan !== undefined, ctx.args.flags.credits !== undefined].filter(Boolean).length;
|
|
17
18
|
if (selected > 1 || (ctx.args.flags.yearly === true && ctx.args.flags.plan === undefined))
|
|
@@ -23,6 +24,8 @@ export const billingCommand = {
|
|
|
23
24
|
const credits = flagInteger(ctx.args.flags, "credits") ?? CREDIT_PACKS[0];
|
|
24
25
|
if (!plan && ctx.args.flags.portal !== true && !CREDIT_PACKS.includes(credits))
|
|
25
26
|
throw new CliError(`Unknown pack ${credits}. Choose one of: ${CREDIT_PACKS.join(", ")} credits ($${CREDIT_PACKS.map((pack) => pack / CREDITS_PER_DOLLAR).join(", $")})`, 2);
|
|
27
|
+
if (!clientContext.apiKey)
|
|
28
|
+
return publicCheckout(ctx, plan ?? null, interval, credits);
|
|
26
29
|
const result = ctx.args.flags.portal === true
|
|
27
30
|
? await clientContext.client.getBillingLink()
|
|
28
31
|
: await clientContext.client.createCheckoutLink(plan ? { plan, interval } : { credits: credits });
|
|
@@ -38,4 +41,28 @@ export const billingCommand = {
|
|
|
38
41
|
return 0;
|
|
39
42
|
},
|
|
40
43
|
};
|
|
44
|
+
/**
|
|
45
|
+
* Before sign-in: the pricing document's own link (GET /api/v1/pricing, no
|
|
46
|
+
* key), which signs the human in, or up, and then opens Stripe Checkout for
|
|
47
|
+
* the plan or pack. Nothing is charged until they pay there.
|
|
48
|
+
*/
|
|
49
|
+
async function publicCheckout(ctx, plan, interval, credits) {
|
|
50
|
+
const { io, clientContext } = ctx;
|
|
51
|
+
const pricing = await clientContext.client.pricing();
|
|
52
|
+
const entry = plan ? pricing.data.plans.find((candidate) => candidate.id === plan) : null;
|
|
53
|
+
const pack = plan ? null : pricing.data.add_ons.find((candidate) => candidate.credits === credits);
|
|
54
|
+
const url = entry ? (interval === "year" ? entry.checkout_url_yearly : entry.checkout_url) : pack?.checkout_url;
|
|
55
|
+
if (!url)
|
|
56
|
+
throw new CliError("This server's pricing has no checkout link for that choice.", 1, "Run `car-image login`, then try again.");
|
|
57
|
+
const amount = entry ? (interval === "year" ? entry.price.yearly : entry.price.monthly) : pack?.price;
|
|
58
|
+
const message = "Not signed in: this link signs you in (or up), then opens Stripe Checkout. Nothing is charged until you pay there.";
|
|
59
|
+
if (io.json) {
|
|
60
|
+
printJson(io, { data: { url, kind: "checkout", requires_confirmation: true, signed_in: false, ...(entry ? { plan, interval } : { credits }), amount_cents: Math.round((amount ?? 0) * 100), message } });
|
|
61
|
+
return 0;
|
|
62
|
+
}
|
|
63
|
+
io.stdout(`$${(amount ?? 0).toFixed(2)}${entry ? ` per ${interval}` : ` for ${credits} credits`}\n${message}\n ${url}\n`);
|
|
64
|
+
if (ctx.args.flags.browser !== false)
|
|
65
|
+
openBrowser(url);
|
|
66
|
+
return 0;
|
|
67
|
+
}
|
|
41
68
|
//# sourceMappingURL=billing.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billing.js","sourceRoot":"","sources":["../../src/commands/billing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAU,CAAC;AACnE,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,UAAU,CAAU,CAAC;AACvD,MAAM,CAAC,MAAM,cAAc,GAAsB;IAC/C,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"billing.js","sourceRoot":"","sources":["../../src/commands/billing.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/support.js
CHANGED
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import { CliError } from "../errors.js";
|
|
2
2
|
import { printJson, table } from "../output.js";
|
|
3
3
|
export const pricingCommand = {
|
|
4
|
-
name: "pricing", summary: "
|
|
4
|
+
name: "pricing", summary: "Plans, limits per tier, credit packs, 3D cost and checkout links (free, no key needed)", usage: "car-image pricing [--json]",
|
|
5
5
|
async run(ctx) {
|
|
6
6
|
const result = await ctx.clientContext.client.pricing();
|
|
7
7
|
if (ctx.io.json)
|
|
8
8
|
printJson(ctx.io, result);
|
|
9
9
|
else {
|
|
10
|
-
ctx.io.stdout(table(result.data.plans.map((plan) => [plan.name, plan.monthly_cents === null ? "custom" : `$${plan.monthly_cents / 100}`, plan.yearly_cents === null ? "custom" : `$${plan.yearly_cents / 100}`, String(plan.included_credits), plan.license]), ["Plan", "Monthly", "Yearly", "Monthly credits", "License"]) + "\n");
|
|
10
|
+
ctx.io.stdout(table(result.data.plans.map((plan) => [plan.name, plan.monthly_cents === null ? "custom" : `$${plan.monthly_cents / 100}`, plan.yearly_cents === null ? "custom" : `$${plan.yearly_cents / 100}`, String(plan.included_credits), plan.vehicles_per_month === null ? "no cap" : String(plan.vehicles_per_month), plan.license]), ["Plan", "Monthly", "Yearly", "Monthly credits", "Vehicles/month", "License"]) + "\n");
|
|
11
11
|
ctx.io.stdout(`\n${result.data.free_signup_credits} signup credits · ${result.data.credits_per_image} credit/image · ${result.data.credits_per_model} credits/3D model · $1/${result.data.credits_per_dollar} credits\n`);
|
|
12
12
|
ctx.io.stdout(`Packs: ${result.data.packs.map((pack) => `${pack.credits} credits ($${pack.cents / 100})`).join(", ")}\n${result.data.notes.join("\n")}\n`);
|
|
13
|
+
const links = (result.data.plans ?? []).filter((plan) => plan.checkout_url && (plan.id === "pro" || plan.id === "business"));
|
|
14
|
+
if (links.length)
|
|
15
|
+
ctx.io.stdout(`\nBuy (works before sign-in; nothing is charged until you pay in Stripe Checkout): car-image upgrade --plan pro|business [--yearly] or --credits 500\n${links.map((plan) => ` ${plan.name}: ${plan.checkout_url}`).join("\n")}\n`);
|
|
13
16
|
}
|
|
14
17
|
return 0;
|
|
15
18
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"support.js","sourceRoot":"","sources":["../../src/commands/support.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAChD,MAAM,CAAC,MAAM,cAAc,GAAsB;IAC/C,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"support.js","sourceRoot":"","sources":["../../src/commands/support.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/whoami.js
CHANGED
|
@@ -10,7 +10,7 @@ const LICENSE_LINES = {
|
|
|
10
10
|
};
|
|
11
11
|
export const whoamiCommand = {
|
|
12
12
|
name: "whoami",
|
|
13
|
-
aliases: ["status"],
|
|
13
|
+
aliases: ["status", "account"],
|
|
14
14
|
summary: "Show credits, plan and license, usage, key and base URL for the current account",
|
|
15
15
|
usage: "car-image whoami [--json]",
|
|
16
16
|
async run(ctx) {
|
|
@@ -33,6 +33,14 @@ export const whoamiCommand = {
|
|
|
33
33
|
];
|
|
34
34
|
if (data.plan)
|
|
35
35
|
rows.push(["Plan", `${data.plan.name}${data.plan.active ? "" : " (inactive)"} (${LICENSE_LINES[data.plan.license] ?? data.plan.license})`]);
|
|
36
|
+
const limits = data.limits_usage;
|
|
37
|
+
if (limits) {
|
|
38
|
+
const vehicles = limits.distinct_vehicles_this_month;
|
|
39
|
+
rows.push(["Vehicles", `${formatInteger(vehicles.used)}${vehicles.limit === null ? " distinct this month (no cap)" : ` of ${formatInteger(vehicles.limit)} distinct this month`} (resets ${limits.period.resets_at.slice(0, 10)})`]);
|
|
40
|
+
rows.push(["Keys", `${formatInteger(limits.api_keys.used)} of ${formatInteger(limits.api_keys.limit ?? 0)} · ${formatInteger(limits.requests_per_minute_per_key)} requests/min per key`]);
|
|
41
|
+
}
|
|
42
|
+
if (data.renews_at)
|
|
43
|
+
rows.push(["Renews", data.renews_at.slice(0, 10)]);
|
|
36
44
|
if (usage) {
|
|
37
45
|
const hitRate = Number.isFinite(usage.cache_hit_rate) ? `${Math.round(usage.cache_hit_rate * (usage.cache_hit_rate <= 1 ? 100 : 1))}% cache hits` : "";
|
|
38
46
|
rows.push(["Usage (30d)", `${formatInteger(usage.requests)} requests, ${formatInteger(usage.images)} images${hitRate ? `, ${hitRate}` : ""}`]);
|
|
@@ -41,8 +49,12 @@ export const whoamiCommand = {
|
|
|
41
49
|
rows.push(["Base URL", clientContext.baseUrl]);
|
|
42
50
|
rows.push(["Config", ctx.configPath]);
|
|
43
51
|
io.stdout(`${keyValues(io, rows)}\n`);
|
|
52
|
+
if (data.next_plan) {
|
|
53
|
+
const price = data.next_plan.price.monthly === null ? "custom pricing" : `$${data.next_plan.price.monthly}/month`;
|
|
54
|
+
io.stdout(`\nNext plan: ${data.next_plan.name} (${price}): ${data.next_plan.adds.join("; ")}. car-image upgrade --plan ${data.next_plan.id}\n`);
|
|
55
|
+
}
|
|
44
56
|
if (data.credits < 10) {
|
|
45
|
-
io.stdout(`\nLow balance. Buy credits: car-image
|
|
57
|
+
io.stdout(`\nLow balance. Buy credits: car-image upgrade --credits 500 (${clientContext.baseUrl}/dashboard?ref=cli#billing)\n`);
|
|
46
58
|
}
|
|
47
59
|
return 0;
|
|
48
60
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEjF,6IAA6I;AAC7I,MAAM,aAAa,GAA2B;IAC5C,UAAU,EAAE,8EAA8E;IAC1F,UAAU,EAAE,+EAA+E;IAC3F,mBAAmB,EAAE,wEAAwE;CAC9F,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAsB;IAC9C,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,CAAC,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"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"}
|
package/dist/version.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** Kept in sync with package.json by `src/version.test.ts`. */
|
|
2
|
-
export const CLI_VERSION = "1.
|
|
2
|
+
export const CLI_VERSION = "1.17.0";
|
|
3
3
|
export const PACKAGE_NAME = "@meterapp/car-image";
|
|
4
4
|
export const BIN_NAME = "car-image";
|
|
5
5
|
//# sourceMappingURL=version.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@meterapp/car-image",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.17.0",
|
|
4
4
|
"description": "CLI and MCP server for the Car Image API by Meter: studio-quality, transparent-background vehicle renders for agents, apps and browsers. Login, fetch images in any paint color and make logos, mint signed URLs, decode VINs, build 3D models, request missing vehicles, run diagnostics, configure agents.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Meter <support@carimage.dev> (https://meterapp.co)",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"test": "vitest run"
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@meterapp/car-image-sdk": "^1.
|
|
46
|
+
"@meterapp/car-image-sdk": "^1.24.0",
|
|
47
47
|
"@modelcontextprotocol/server": "^2.2.0",
|
|
48
48
|
"zod": "^4.6.5"
|
|
49
49
|
},
|