@forjio/storlaunch-cli 0.4.0 → 0.6.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 payouts: Command;
3
+ export { payouts };
4
+ //# sourceMappingURL=payouts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payouts.d.ts","sourceRoot":"","sources":["../../src/commands/payouts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+EpC,QAAA,MAAM,OAAO,SAAgE,CAAC;AA8H9E,OAAO,EAAE,OAAO,EAAE,CAAC"}
@@ -0,0 +1,208 @@
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 payouts` — withdraw funds to the merchant bank. Manual mode for
7
+ * now (platform operator wires money + marks paid). Commands mirror the
8
+ * REST routes at /api/v1/payouts/*.
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
+ }
17
+ return 1;
18
+ }
19
+ function handleError(err, json) {
20
+ if (json && err instanceof ApiClientError) {
21
+ console.error(JSON.stringify({ data: null, error: { code: err.code, message: err.message } }, null, 2));
22
+ }
23
+ else {
24
+ console.error(chalk.red(`Error: ${err instanceof Error ? err.message : String(err)}`));
25
+ }
26
+ process.exit(getExitCode(err));
27
+ }
28
+ // ─── Bank account ────────────────────────────────────────────
29
+ const bankAccount = new Command("bank-account").description("Default payout bank account");
30
+ bankAccount
31
+ .command("get")
32
+ .description("Show the current default bank account")
33
+ .action(async (_opts, cmd) => {
34
+ const g = cmd.optsWithGlobals();
35
+ try {
36
+ const result = await apiRequest("/payouts/bank-account", {
37
+ sandbox: g.sandbox,
38
+ });
39
+ output(result, { json: g.json });
40
+ }
41
+ catch (err) {
42
+ handleError(err, g.json);
43
+ }
44
+ });
45
+ bankAccount
46
+ .command("set")
47
+ .description("Set the default bank account")
48
+ .requiredOption("--name <name>", "Bank name (e.g. 'Bank Central Asia')")
49
+ .requiredOption("--number <number>", "Bank account number")
50
+ .requiredOption("--holder <name>", "Account holder name (as on passbook)")
51
+ .option("--code <code>", "Bank code (e.g. BCA, MANDIRI, BNI)")
52
+ .action(async (opts, cmd) => {
53
+ const g = cmd.optsWithGlobals();
54
+ try {
55
+ const result = await apiRequest("/payouts/bank-account", {
56
+ method: "PATCH",
57
+ body: {
58
+ bankName: opts.name,
59
+ bankAccountNumber: opts.number,
60
+ bankAccountHolder: opts.holder,
61
+ bankCode: opts.code ?? null,
62
+ },
63
+ sandbox: g.sandbox,
64
+ });
65
+ if (g.json) {
66
+ output(result, { json: true });
67
+ }
68
+ else {
69
+ console.log(chalk.green(`Bank account saved: ${opts.name} · ${opts.number} · ${opts.holder}`));
70
+ }
71
+ }
72
+ catch (err) {
73
+ handleError(err, g.json);
74
+ }
75
+ });
76
+ // ─── Payouts ─────────────────────────────────────────────────
77
+ const payouts = new Command("payouts").description("Manage merchant payouts");
78
+ payouts.addCommand(bankAccount);
79
+ payouts
80
+ .command("balance")
81
+ .description("Show available payout balance (ledger − in-flight)")
82
+ .action(async (_opts, cmd) => {
83
+ const g = cmd.optsWithGlobals();
84
+ try {
85
+ const result = await apiRequest("/payouts/balance", {
86
+ sandbox: g.sandbox,
87
+ });
88
+ output(result, { json: g.json });
89
+ }
90
+ catch (err) {
91
+ handleError(err, g.json);
92
+ }
93
+ });
94
+ payouts
95
+ .command("list")
96
+ .description("List payouts")
97
+ .option("--status <status>", "Filter: pending | in_transit | paid | failed | cancelled")
98
+ .option("--limit <n>", "Items per page", parseInt)
99
+ .option("--cursor <cursor>", "Pagination cursor")
100
+ .action(async (opts, cmd) => {
101
+ const g = cmd.optsWithGlobals();
102
+ try {
103
+ const result = await apiRequest("/payouts", {
104
+ query: { status: opts.status, limit: opts.limit, cursor: opts.cursor },
105
+ sandbox: g.sandbox,
106
+ });
107
+ if (g.json) {
108
+ output(result, { json: true });
109
+ }
110
+ else {
111
+ const cols = [
112
+ { key: "id", header: "ID", width: 24 },
113
+ { key: "requestedAt", header: "Requested", width: 20 },
114
+ { key: "amount", header: "Amount" },
115
+ { key: "currency", header: "Ccy" },
116
+ { key: "status", header: "Status", width: 12 },
117
+ { key: "bankName", header: "Bank", width: 16 },
118
+ { key: "reference", header: "Ref", width: 16 },
119
+ ];
120
+ output((result["data"] ?? result), { columns: cols });
121
+ }
122
+ }
123
+ catch (err) {
124
+ handleError(err, g.json);
125
+ }
126
+ });
127
+ payouts
128
+ .command("get <id>")
129
+ .description("Get a single payout")
130
+ .action(async (id, _opts, cmd) => {
131
+ const g = cmd.optsWithGlobals();
132
+ try {
133
+ const result = await apiRequest(`/payouts/${id}`, {
134
+ sandbox: g.sandbox,
135
+ });
136
+ output(result, { json: g.json });
137
+ }
138
+ catch (err) {
139
+ handleError(err, g.json);
140
+ }
141
+ });
142
+ payouts
143
+ .command("create")
144
+ .description("Request a new payout (uses default bank unless override passed)")
145
+ .requiredOption("--amount <n>", "Amount in smallest currency unit", parseInt)
146
+ .requiredOption("--currency <code>", "Currency code (IDR, USD)")
147
+ .option("--note <text>", "Free-text note on the payout")
148
+ .option("--bank-name <name>", "Override default bank name for this payout")
149
+ .option("--bank-number <number>", "Override default bank account number")
150
+ .option("--bank-holder <name>", "Override default account holder")
151
+ .option("--bank-code <code>", "Override default bank code")
152
+ .action(async (opts, cmd) => {
153
+ const g = cmd.optsWithGlobals();
154
+ try {
155
+ const body = {
156
+ amount: opts.amount,
157
+ currency: opts.currency,
158
+ };
159
+ if (opts.note)
160
+ body["note"] = opts.note;
161
+ if (opts.bankName)
162
+ body["bankName"] = opts.bankName;
163
+ if (opts.bankNumber)
164
+ body["bankAccountNumber"] = opts.bankNumber;
165
+ if (opts.bankHolder)
166
+ body["bankAccountHolder"] = opts.bankHolder;
167
+ if (opts.bankCode)
168
+ body["bankCode"] = opts.bankCode;
169
+ const result = await apiRequest("/payouts", {
170
+ method: "POST",
171
+ body,
172
+ sandbox: g.sandbox,
173
+ });
174
+ if (g.json) {
175
+ output(result, { json: true });
176
+ }
177
+ else {
178
+ const d = (result["data"] ?? result);
179
+ console.log(chalk.green(`Payout requested: ${String(d["id"])} (status: ${d["status"]})`));
180
+ }
181
+ }
182
+ catch (err) {
183
+ handleError(err, g.json);
184
+ }
185
+ });
186
+ payouts
187
+ .command("cancel <id>")
188
+ .description("Cancel a pending payout (fails if already processing)")
189
+ .action(async (id, _opts, cmd) => {
190
+ const g = cmd.optsWithGlobals();
191
+ try {
192
+ const result = await apiRequest(`/payouts/${id}/cancel`, {
193
+ method: "POST",
194
+ sandbox: g.sandbox,
195
+ });
196
+ if (g.json) {
197
+ output(result, { json: true });
198
+ }
199
+ else {
200
+ console.log(chalk.green(`Payout ${id} cancelled.`));
201
+ }
202
+ }
203
+ catch (err) {
204
+ handleError(err, g.json);
205
+ }
206
+ });
207
+ export { payouts };
208
+ //# sourceMappingURL=payouts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payouts.js","sourceRoot":"","sources":["../../src/commands/payouts.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":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C;;;GAGG;AAEH,SAAS,WAAW,CAAC,GAAY;IAC/B,IAAI,GAAG,YAAY,cAAc,EAAE,CAAC;QAClC,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,CAAC,CAAC;QACvD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,WAAW,CAAC,GAAY,EAAE,IAAc;IAC/C,IAAI,IAAI,IAAI,GAAG,YAAY,cAAc,EAAE,CAAC;QAC1C,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1G,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACzF,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,gDAAgD,CAAC,CAAC;AAErG,OAAO;KACJ,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,4BAA4B,CAAC;KACzC,cAAc,CAAC,cAAc,EAAE,yBAAyB,CAAC;KACzD,cAAc,CAAC,YAAY,EAAE,uBAAuB,CAAC;KACrD,MAAM,CAAC,mBAAmB,EAAE,oCAAoC,CAAC;KACjE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,GAAY,EAAE,EAAE;IACnC,MAAM,CAAC,GAAG,GAAG,CAAC,eAAe,EAAyC,CAAC;IACvE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAA0B,cAAc,EAAE;YACvE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;YAChE,OAAO,EAAE,CAAC,CAAC,OAAO;SACnB,CAAC,CAAC;QAEH,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YACX,MAAM,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAA4B,CAAC;YAChE,MAAM,GAAG,GAAG,CAAC,CAAC,SAAS,CAA2B,CAAC;YACnD,MAAM,GAAG,GAAG,CAAC,CAAC,UAAU,CAA2B,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YAChG,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1E,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,wBAAwB,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC7E,OAAO,CAAC,GAAG,CAAC,wBAAwB,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC5E,OAAO,CAAC,GAAG,CAAC,wBAAwB,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC9E,IAAI,GAAG,CAAC,eAAe,GAAG,CAAC,EAAE,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,wBAAwB,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAClF,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,wBAAwB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YAClF,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;YACzC,MAAM,WAAW,GAAG,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,2DAA2D,CAAC;KACxE,cAAc,CAAC,cAAc,EAAE,yBAAyB,CAAC;KACzD,cAAc,CAAC,YAAY,EAAE,uBAAuB,CAAC;KACrD,MAAM,CAAC,mBAAmB,EAAE,oBAAoB,CAAC;KACjD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,GAAY,EAAE,EAAE;IACnC,MAAM,CAAC,GAAG,GAAG,CAAC,eAAe,EAAyC,CAAC;IACvE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAA0B,oBAAoB,EAAE;YAC7E,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;YAChE,OAAO,EAAE,CAAC,CAAC,OAAO;SACnB,CAAC,CAAC;QAEH,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YACX,MAAM,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAA4B,CAAC;YAChE,MAAM,OAAO,GAAG,CAAC,CAAC,SAAS,CAA2B,CAAC;YACvD,MAAM,QAAQ,GAAG,CAAC,CAAC,UAAU,CAA2B,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YAChG,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC7E,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACpF,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC7E,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;YACnE,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACzG,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;YAClE,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5G,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,6CAA6C,CAAC;KAC1D,cAAc,CAAC,cAAc,EAAE,yBAAyB,CAAC;KACzD,cAAc,CAAC,YAAY,EAAE,uBAAuB,CAAC;KACrD,MAAM,CAAC,mBAAmB,EAAE,oBAAoB,CAAC;KACjD,MAAM,CAAC,cAAc,EAAE,0CAA0C,CAAC;KAClE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,GAAY,EAAE,EAAE;IACnC,MAAM,CAAC,GAAG,GAAG,CAAC,eAAe,EAAyC,CAAC;IACvE,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,cAAc,CAAC;gBACvB,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,4EAA4E;gBACrF,IAAI,EAAE,eAAe;aACtB,CAAC,CAAC;QACL,CAAC;QACD,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,qBAAqB,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC;QAC5F,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QACpC,IAAI,IAAI,CAAC,QAAQ;YAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEnE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;YAC3C,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;SAClE,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,IAAI,SAAS,GAAwC,EAAE,CAAC;YACxD,IAAI,CAAC;gBAAC,SAAS,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAwC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YAC1G,MAAM,IAAI,cAAc,CAAC;gBACvB,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,OAAO,EAAE,SAAS,CAAC,OAAO,IAAI,mCAAmC,QAAQ,CAAC,MAAM,EAAE;gBAClF,IAAI,EAAE,SAAS,CAAC,IAAI;aACrB,CAAC,CAAC;QACL,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAClC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;YACrC,IAAI,CAAC,CAAC,CAAC,IAAI;gBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,kBAAkB,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,MAAM,SAAS,CAAC,CAAC,CAAC;QAC5F,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,EAAE,OAAO,EAAE,CAAC"}
@@ -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;AAUpC;;;;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;AAYpC;;;;GAIG;AACH,eAAO,MAAM,IAAI,SAAoF,CAAC"}
@@ -7,6 +7,8 @@ import { config } from "./config.js";
7
7
  import { inventory } from "./inventory.js";
8
8
  import { shipping } from "./shipping.js";
9
9
  import { ledger } from "./ledger.js";
10
+ import { reports } from "./reports.js";
11
+ import { payouts } from "./payouts.js";
10
12
  /**
11
13
  * `sell` — seller-side commands. Wraps existing command modules as
12
14
  * subcommands. 0.3.0 adds inventory (variants/warehouses/stock) and
@@ -19,6 +21,8 @@ sell.addCommand(storefront);
19
21
  sell.addCommand(inventory);
20
22
  sell.addCommand(shipping);
21
23
  sell.addCommand(ledger);
24
+ sell.addCommand(reports);
25
+ sell.addCommand(payouts);
22
26
  sell.addCommand(webhook);
23
27
  sell.addCommand(config);
24
28
  //# 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;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC;;;;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,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;AACvC,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,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.4.0",
4
- "description": "Storlaunch CLI — seller tools (storefronts, inventory, shipping, ledger, payments, webhooks) and buyer tools (shop, orders, subs, invoices) in one CLI",
3
+ "version": "0.6.0",
4
+ "description": "Storlaunch CLI — seller tools (storefronts, inventory, shipping, ledger, reports, payouts, 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": {