@forjio/storlaunch-cli 0.3.0 → 0.5.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.
@@ -0,0 +1,4 @@
1
+ import { Command } from "commander";
2
+ declare const ledger: Command;
3
+ export { ledger };
4
+ //# sourceMappingURL=ledger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../../src/commands/ledger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsLpC,QAAA,MAAM,MAAM,SAAwG,CAAC;AAMrH,OAAO,EAAE,MAAM,EAAE,CAAC"}
@@ -0,0 +1,178 @@
1
+ import { Command } from "commander";
2
+ import chalk from "chalk";
3
+ import { apiRequest, ApiClientError } from "../lib/api.js";
4
+ import { output } from "../lib/output.js";
5
+ /**
6
+ * `sell ledger` — per-merchant running money log. Fronts /ledger/*:
7
+ * entries list/get, account balance, per-customer balance, manual
8
+ * adjustments.
9
+ */
10
+ function getExitCode(err) {
11
+ if (err instanceof ApiClientError) {
12
+ if (err.status === 401 || err.status === 403)
13
+ return 2;
14
+ if (err.status === 429)
15
+ return 3;
16
+ if (err.code === "QUOTA_EXCEEDED")
17
+ return 4;
18
+ }
19
+ return 1;
20
+ }
21
+ function handleError(err, json) {
22
+ if (json && err instanceof ApiClientError) {
23
+ console.error(JSON.stringify({ data: null, error: { code: err.code, message: err.message } }, null, 2));
24
+ }
25
+ else {
26
+ console.error(chalk.red(`Error: ${err instanceof Error ? err.message : String(err)}`));
27
+ }
28
+ process.exit(getExitCode(err));
29
+ }
30
+ // ─── Entries ─────────────────────────────────────────────────
31
+ const entries = new Command("entries").description("List / inspect ledger entries");
32
+ entries
33
+ .command("list")
34
+ .description("List ledger entries (most recent first)")
35
+ .option("--type <type>", "Filter: credit | debit")
36
+ .option("--category <category>", "Filter: sale | refund | platform_fee | channel_fee | shipping_cost | shipping_refund | payout | adjustment")
37
+ .option("--customer <id>", "Filter by customer ID")
38
+ .option("--source-type <type>", "Filter by source (checkout_session, shipment, subscription, etc.)")
39
+ .option("--source-id <id>", "Filter by source record ID")
40
+ .option("--from <iso>", "Filter: entries on/after this datetime (ISO-8601)")
41
+ .option("--to <iso>", "Filter: entries on/before this datetime (ISO-8601)")
42
+ .option("--cursor <cursor>", "Pagination cursor")
43
+ .option("--limit <n>", "Items per page (max 100)", parseInt)
44
+ .action(async (opts, cmd) => {
45
+ const g = cmd.optsWithGlobals();
46
+ try {
47
+ const result = await apiRequest("/ledger/entries", {
48
+ query: {
49
+ type: opts.type,
50
+ category: opts.category,
51
+ customerId: opts.customer,
52
+ sourceType: opts.sourceType,
53
+ sourceId: opts.sourceId,
54
+ from: opts.from,
55
+ to: opts.to,
56
+ cursor: opts.cursor,
57
+ limit: opts.limit,
58
+ },
59
+ sandbox: g.sandbox,
60
+ });
61
+ if (g.json) {
62
+ output(result, { json: true });
63
+ }
64
+ else {
65
+ const cols = [
66
+ { key: "createdAt", header: "When", width: 20 },
67
+ { key: "category", header: "Category", width: 16 },
68
+ { key: "type", header: "Dir", width: 6 },
69
+ { key: "amount", header: "Amount" },
70
+ { key: "currency", header: "Ccy" },
71
+ { key: "balanceAfter", header: "Balance" },
72
+ { key: "description", header: "Description", width: 36 },
73
+ ];
74
+ output((result["data"] ?? result), { columns: cols });
75
+ }
76
+ }
77
+ catch (err) {
78
+ handleError(err, g.json);
79
+ }
80
+ });
81
+ entries
82
+ .command("get <id>")
83
+ .description("Get a single ledger entry by ID")
84
+ .action(async (id, _opts, cmd) => {
85
+ const g = cmd.optsWithGlobals();
86
+ try {
87
+ const result = await apiRequest(`/ledger/entries/${id}`, {
88
+ sandbox: g.sandbox,
89
+ });
90
+ output(result, { json: g.json });
91
+ }
92
+ catch (err) {
93
+ handleError(err, g.json);
94
+ }
95
+ });
96
+ // ─── Balance ─────────────────────────────────────────────────
97
+ const balance = new Command("balance").description("Running balance (account-wide or per customer)");
98
+ balance
99
+ .command("account")
100
+ .description("Current running balance for the merchant account")
101
+ .action(async (_opts, cmd) => {
102
+ const g = cmd.optsWithGlobals();
103
+ try {
104
+ const result = await apiRequest("/ledger/balance", {
105
+ sandbox: g.sandbox,
106
+ });
107
+ output(result, { json: g.json });
108
+ }
109
+ catch (err) {
110
+ handleError(err, g.json);
111
+ }
112
+ });
113
+ balance
114
+ .command("customer <customerId>")
115
+ .description("Running AR balance for a specific customer")
116
+ .action(async (customerId, _opts, cmd) => {
117
+ const g = cmd.optsWithGlobals();
118
+ try {
119
+ const result = await apiRequest(`/ledger/balance/customers/${customerId}`, { sandbox: g.sandbox });
120
+ output(result, { json: g.json });
121
+ }
122
+ catch (err) {
123
+ handleError(err, g.json);
124
+ }
125
+ });
126
+ // ─── Adjustments ─────────────────────────────────────────────
127
+ const adjustments = new Command("adjustments").description("Manual ledger adjustments (credits, debits, write-offs)");
128
+ adjustments
129
+ .command("create")
130
+ .description("Post a manual adjustment entry")
131
+ .requiredOption("--type <type>", "credit (incoming) or debit (outgoing)")
132
+ .requiredOption("--amount <n>", "Positive amount in smallest currency unit", parseInt)
133
+ .requiredOption("--currency <code>", "Currency code (IDR, USD)")
134
+ .requiredOption("--description <text>", "Free-text reason (audit trail)")
135
+ .option("--customer <id>", "Associate with a customer (AR)")
136
+ .option("--transaction-id <key>", "Custom idempotency key (auto-generated if omitted)")
137
+ .action(async (opts, cmd) => {
138
+ const g = cmd.optsWithGlobals();
139
+ try {
140
+ const body = {
141
+ type: opts.type,
142
+ amount: opts.amount,
143
+ currency: opts.currency,
144
+ description: opts.description,
145
+ };
146
+ if (opts.customer)
147
+ body["customerId"] = opts.customer;
148
+ if (opts.transactionId)
149
+ body["transactionId"] = opts.transactionId;
150
+ const result = await apiRequest("/ledger/adjustments", {
151
+ method: "POST",
152
+ body,
153
+ sandbox: g.sandbox,
154
+ });
155
+ if (g.json) {
156
+ output(result, { json: true });
157
+ }
158
+ else {
159
+ const data = (result["data"] ?? result);
160
+ const sign = opts.type === "credit" ? "+" : "-";
161
+ console.log(chalk.green(`Posted: ${sign}${opts.amount} ${opts.currency} — ${opts.description}`));
162
+ if (data["id"])
163
+ console.log(chalk.dim(`ID: ${String(data["id"])}`));
164
+ if (data["balanceAfter"] !== undefined)
165
+ console.log(chalk.dim(`Balance: ${data["balanceAfter"]} ${opts.currency}`));
166
+ }
167
+ }
168
+ catch (err) {
169
+ handleError(err, g.json);
170
+ }
171
+ });
172
+ // ─── Top-level ───────────────────────────────────────────────
173
+ const ledger = new Command("ledger").description("Per-merchant ledger — sales, refunds, fees, payouts, adjustments");
174
+ ledger.addCommand(entries);
175
+ ledger.addCommand(balance);
176
+ ledger.addCommand(adjustments);
177
+ export { ledger };
178
+ //# sourceMappingURL=ledger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../src/commands/ledger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Command } from "commander";
2
+ declare const reports: Command;
3
+ export { reports };
4
+ //# sourceMappingURL=reports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reports.d.ts","sourceRoot":"","sources":["../../src/commands/reports.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6BpC,QAAA,MAAM,OAAO,SAAuF,CAAC;AAsIrG,OAAO,EAAE,OAAO,EAAE,CAAC"}
@@ -0,0 +1,170 @@
1
+ import { Command } from "commander";
2
+ import chalk from "chalk";
3
+ import { writeFileSync } from "node:fs";
4
+ import { apiRequest, ApiClientError } from "../lib/api.js";
5
+ import { resolveApiKey, resolveApiUrl } from "../lib/config.js";
6
+ import { output } from "../lib/output.js";
7
+ /**
8
+ * `sell reports` — P&L, cash flow, and CSV ledger export. Reads from the
9
+ * Phase B ledger; no writes.
10
+ */
11
+ function getExitCode(err) {
12
+ if (err instanceof ApiClientError) {
13
+ if (err.status === 401 || err.status === 403)
14
+ return 2;
15
+ if (err.status === 429)
16
+ return 3;
17
+ }
18
+ return 1;
19
+ }
20
+ function handleError(err, json) {
21
+ if (json && err instanceof ApiClientError) {
22
+ console.error(JSON.stringify({ data: null, error: { code: err.code, message: err.message } }, null, 2));
23
+ }
24
+ else {
25
+ console.error(chalk.red(`Error: ${err instanceof Error ? err.message : String(err)}`));
26
+ }
27
+ process.exit(getExitCode(err));
28
+ }
29
+ const reports = new Command("reports").description("Financial reports — P&L, cash flow, CSV export");
30
+ reports
31
+ .command("pnl")
32
+ .description("Profit & loss for a period")
33
+ .requiredOption("--from <iso>", "Period start (ISO-8601)")
34
+ .requiredOption("--to <iso>", "Period end (ISO-8601)")
35
+ .option("--currency <code>", "Filter by currency (e.g. IDR, USD)")
36
+ .action(async (opts, cmd) => {
37
+ const g = cmd.optsWithGlobals();
38
+ try {
39
+ const result = await apiRequest("/reports/pnl", {
40
+ query: { from: opts.from, to: opts.to, currency: opts.currency },
41
+ sandbox: g.sandbox,
42
+ });
43
+ if (g.json) {
44
+ output(result, { json: true });
45
+ }
46
+ else {
47
+ const d = (result["data"] ?? result);
48
+ const rev = d["revenue"];
49
+ const exp = d["expenses"];
50
+ console.log(chalk.bold(`P&L ${opts.from} → ${opts.to}`));
51
+ console.log(chalk.dim(`Currency: ${d["currency"] ?? "—"} · ${d["entryCount"] ?? 0} entries`));
52
+ console.log();
53
+ console.log(chalk.bold("Revenue"));
54
+ console.log(` Sales ${String(rev.sales).padStart(14)}`);
55
+ console.log(` Refunds − ${String(rev.refunds).padStart(14)}`);
56
+ console.log(` Net revenue ${chalk.bold(String(rev.net).padStart(14))}`);
57
+ console.log();
58
+ console.log(chalk.bold("Expenses"));
59
+ console.log(` Platform fees ${String(exp.platformFees).padStart(14)}`);
60
+ console.log(` Channel fees ${String(exp.channelFees).padStart(14)}`);
61
+ console.log(` Shipping costs ${String(exp.shippingCosts).padStart(14)}`);
62
+ if (exp.shippingRefunds > 0) {
63
+ console.log(` Shipping refunds − ${String(exp.shippingRefunds).padStart(14)}`);
64
+ }
65
+ console.log(` Total expenses ${chalk.bold(String(exp.total).padStart(14))}`);
66
+ console.log();
67
+ const netProfit = Number(d["netProfit"]);
68
+ const profitColor = netProfit >= 0 ? chalk.green : chalk.red;
69
+ console.log(chalk.bold(`Net profit: ${profitColor(String(netProfit))}`));
70
+ }
71
+ }
72
+ catch (err) {
73
+ handleError(err, g.json);
74
+ }
75
+ });
76
+ reports
77
+ .command("cash-flow")
78
+ .description("Cash flow (opening + closing balance, category breakdown)")
79
+ .requiredOption("--from <iso>", "Period start (ISO-8601)")
80
+ .requiredOption("--to <iso>", "Period end (ISO-8601)")
81
+ .option("--currency <code>", "Filter by currency")
82
+ .action(async (opts, cmd) => {
83
+ const g = cmd.optsWithGlobals();
84
+ try {
85
+ const result = await apiRequest("/reports/cash-flow", {
86
+ query: { from: opts.from, to: opts.to, currency: opts.currency },
87
+ sandbox: g.sandbox,
88
+ });
89
+ if (g.json) {
90
+ output(result, { json: true });
91
+ }
92
+ else {
93
+ const d = (result["data"] ?? result);
94
+ const inflows = d["inflows"];
95
+ const outflows = d["outflows"];
96
+ console.log(chalk.bold(`Cash Flow ${opts.from} → ${opts.to}`));
97
+ console.log(chalk.dim(`Currency: ${d["currency"] ?? "—"} · ${d["entryCount"] ?? 0} entries`));
98
+ console.log();
99
+ console.log(`Opening balance ${String(d["openingBalance"]).padStart(14)}`);
100
+ console.log(`Net change ${chalk.bold(String(d["netChange"]).padStart(14))}`);
101
+ console.log(`Closing balance ${String(d["closingBalance"]).padStart(14)}`);
102
+ console.log();
103
+ console.log(chalk.green.bold(`Inflows (total: ${d["totalIn"]})`));
104
+ for (const [k, v] of Object.entries(inflows))
105
+ console.log(` ${k.padEnd(20)} ${String(v).padStart(12)}`);
106
+ console.log();
107
+ console.log(chalk.red.bold(`Outflows (total: ${d["totalOut"]})`));
108
+ for (const [k, v] of Object.entries(outflows))
109
+ console.log(` ${k.padEnd(20)} ${String(v).padStart(12)}`);
110
+ }
111
+ }
112
+ catch (err) {
113
+ handleError(err, g.json);
114
+ }
115
+ });
116
+ reports
117
+ .command("export-ledger")
118
+ .description("Download ledger entries as CSV for a period")
119
+ .requiredOption("--from <iso>", "Period start (ISO-8601)")
120
+ .requiredOption("--to <iso>", "Period end (ISO-8601)")
121
+ .option("--currency <code>", "Filter by currency")
122
+ .option("--out <path>", "Write CSV to this path (default: stdout)")
123
+ .action(async (opts, cmd) => {
124
+ const g = cmd.optsWithGlobals();
125
+ try {
126
+ const token = resolveApiKey({ sandbox: g.sandbox });
127
+ if (!token) {
128
+ throw new ApiClientError({
129
+ status: 401,
130
+ message: "Not authenticated. Run `storlaunch sell auth login --key <api-key>` first.",
131
+ code: "AUTH_REQUIRED",
132
+ });
133
+ }
134
+ const baseUrl = resolveApiUrl();
135
+ const url = new URL("/reports/ledger.csv", baseUrl.endsWith("/") ? baseUrl : baseUrl + "/");
136
+ url.searchParams.set("from", opts.from);
137
+ url.searchParams.set("to", opts.to);
138
+ if (opts.currency)
139
+ url.searchParams.set("currency", opts.currency);
140
+ const response = await fetch(url.toString(), {
141
+ headers: { Authorization: `Bearer ${token}`, Accept: "text/csv" },
142
+ });
143
+ if (!response.ok) {
144
+ let errorBody = {};
145
+ try {
146
+ errorBody = (await response.json());
147
+ }
148
+ catch { /* ignore */ }
149
+ throw new ApiClientError({
150
+ status: response.status,
151
+ message: errorBody.message ?? `CSV download failed with status ${response.status}`,
152
+ code: errorBody.code,
153
+ });
154
+ }
155
+ const csv = await response.text();
156
+ if (opts.out) {
157
+ writeFileSync(opts.out, csv, "utf8");
158
+ if (!g.json)
159
+ console.log(chalk.green(`CSV written to ${opts.out} (${csv.length} bytes)`));
160
+ }
161
+ else {
162
+ process.stdout.write(csv);
163
+ }
164
+ }
165
+ catch (err) {
166
+ handleError(err, g.json);
167
+ }
168
+ });
169
+ export { reports };
170
+ //# sourceMappingURL=reports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reports.js","sourceRoot":"","sources":["../../src/commands/reports.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sell.d.ts","sourceRoot":"","sources":["../../src/commands/sell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC;;;;GAIG;AACH,eAAO,MAAM,IAAI,SAAoF,CAAC"}
1
+ {"version":3,"file":"sell.d.ts","sourceRoot":"","sources":["../../src/commands/sell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC;;;;GAIG;AACH,eAAO,MAAM,IAAI,SAAoF,CAAC"}
@@ -6,6 +6,8 @@ import { webhook } from "./webhook.js";
6
6
  import { config } from "./config.js";
7
7
  import { inventory } from "./inventory.js";
8
8
  import { shipping } from "./shipping.js";
9
+ import { ledger } from "./ledger.js";
10
+ import { reports } from "./reports.js";
9
11
  /**
10
12
  * `sell` — seller-side commands. Wraps existing command modules as
11
13
  * subcommands. 0.3.0 adds inventory (variants/warehouses/stock) and
@@ -17,6 +19,8 @@ sell.addCommand(payment);
17
19
  sell.addCommand(storefront);
18
20
  sell.addCommand(inventory);
19
21
  sell.addCommand(shipping);
22
+ sell.addCommand(ledger);
23
+ sell.addCommand(reports);
20
24
  sell.addCommand(webhook);
21
25
  sell.addCommand(config);
22
26
  //# sourceMappingURL=sell.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sell.js","sourceRoot":"","sources":["../../src/commands/sell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;;;GAIG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,gDAAgD,CAAC,CAAC;AAEtG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACtB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACzB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC5B,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AAC3B,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACzB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC"}
1
+ {"version":3,"file":"sell.js","sourceRoot":"","sources":["../../src/commands/sell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC;;;;GAIG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,gDAAgD,CAAC,CAAC;AAEtG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACtB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACzB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC5B,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AAC3B,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AACxB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACzB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACzB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@forjio/storlaunch-cli",
3
- "version": "0.3.0",
4
- "description": "Storlaunch CLI — seller tools (storefronts, inventory, shipping, payments, webhooks) and buyer tools (shop, orders, subs, invoices) in one CLI",
3
+ "version": "0.5.0",
4
+ "description": "Storlaunch CLI — seller tools (storefronts, inventory, shipping, ledger, reports, payments, webhooks) and buyer tools (shop, orders, subs, invoices) in one CLI",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "bin": {