@forjio/storlaunch-cli 0.11.0 → 0.13.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,7 @@
1
+ import { Command } from "commander";
2
+ /**
3
+ * `sell abandoned-cart` — manage abandoned-cart recovery automation.
4
+ * Matches /dashboard/marketing/abandoned-cart 1:1.
5
+ */
6
+ export declare const abandonedCart: Command;
7
+ //# sourceMappingURL=abandoned-cart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abandoned-cart.d.ts","sourceRoot":"","sources":["../../src/commands/abandoned-cart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC;;;GAGG;AAEH,eAAO,MAAM,aAAa,SAEzB,CAAC"}
@@ -0,0 +1,162 @@
1
+ import { Command } from "commander";
2
+ import chalk from "chalk";
3
+ import { apiRequest } from "../lib/api.js";
4
+ import { output } from "../lib/output.js";
5
+ /**
6
+ * `sell abandoned-cart` — manage abandoned-cart recovery automation.
7
+ * Matches /dashboard/marketing/abandoned-cart 1:1.
8
+ */
9
+ export const abandonedCart = new Command("abandoned-cart").description("Configure abandoned-cart recovery emails + inspect reminders / recovery stats");
10
+ function handleError(err, json) {
11
+ const msg = err instanceof Error ? err.message : String(err);
12
+ if (json)
13
+ output({ error: { message: msg } }, { json: true });
14
+ else
15
+ console.error(chalk.red(`Error: ${msg}`));
16
+ process.exit(1);
17
+ }
18
+ const config = new Command("config").description("Get / update config");
19
+ config
20
+ .command("get")
21
+ .description("Show current abandoned-cart config")
22
+ .action(async (_opts, cmd) => {
23
+ const g = cmd.optsWithGlobals();
24
+ try {
25
+ const result = await apiRequest("/account/abandoned-cart", { sandbox: g.sandbox });
26
+ const data = result.data ?? result;
27
+ if (g.json)
28
+ output(result, { json: true });
29
+ else {
30
+ console.log(`Enabled: ${data.enabled ? chalk.green("yes") : chalk.red("no")}`);
31
+ console.log(`Delay: ${data.delayHours}h`);
32
+ console.log(`Subject: ${data.emailSubject}`);
33
+ console.log(`Preview: ${data.emailPreview}`);
34
+ console.log(`Discount: ${data.discountCodeId ?? chalk.dim("(none)")}`);
35
+ }
36
+ }
37
+ catch (err) {
38
+ handleError(err, g.json);
39
+ }
40
+ });
41
+ config
42
+ .command("set")
43
+ .description("Update config fields (only flags you pass are changed)")
44
+ .option("--enable", "Enable reminders")
45
+ .option("--disable", "Disable reminders")
46
+ .option("--delay-hours <n>", "Hours after last activity before a reminder is sent", (v) => parseInt(v, 10))
47
+ .option("--subject <text>", "Email subject")
48
+ .option("--preview <text>", "Email preview text")
49
+ .option("--discount-code <code>", "Attach a discount code (friendly code string, not id)")
50
+ .option("--no-discount-code", "Clear the attached discount code")
51
+ .action(async (opts, cmd) => {
52
+ const g = cmd.optsWithGlobals();
53
+ try {
54
+ const body = {};
55
+ if (opts.enable)
56
+ body.enabled = true;
57
+ if (opts.disable)
58
+ body.enabled = false;
59
+ if (opts.delayHours !== undefined)
60
+ body.delayHours = opts.delayHours;
61
+ if (opts.subject !== undefined)
62
+ body.emailSubject = opts.subject;
63
+ if (opts.preview !== undefined)
64
+ body.emailPreview = opts.preview;
65
+ if (opts.discountCode === false) {
66
+ // Commander sets option to `false` when --no-discount-code is passed.
67
+ body.discountCodeId = null;
68
+ }
69
+ else if (typeof opts.discountCode === "string") {
70
+ // Resolve friendly code → id via the existing list endpoint.
71
+ const norm = opts.discountCode.trim().toUpperCase();
72
+ const search = await apiRequest("/discount-codes", {
73
+ query: { limit: 100 },
74
+ sandbox: g.sandbox,
75
+ });
76
+ const codes = search.data ?? [];
77
+ const match = codes.find((c) => c.code.toUpperCase() === norm);
78
+ if (!match) {
79
+ console.error(chalk.red(`Discount code not found: ${opts.discountCode}`));
80
+ process.exit(1);
81
+ }
82
+ body.discountCodeId = match.id;
83
+ }
84
+ if (Object.keys(body).length === 0) {
85
+ console.error(chalk.yellow("No changes supplied."));
86
+ process.exit(1);
87
+ }
88
+ const result = await apiRequest("/account/abandoned-cart", {
89
+ method: "PATCH",
90
+ body,
91
+ sandbox: g.sandbox,
92
+ });
93
+ if (g.json)
94
+ output(result, { json: true });
95
+ else
96
+ console.log(chalk.green("Config saved."));
97
+ }
98
+ catch (err) {
99
+ handleError(err, g.json);
100
+ }
101
+ });
102
+ abandonedCart.addCommand(config);
103
+ abandonedCart
104
+ .command("list")
105
+ .description("Recent reminders (newest first)")
106
+ .option("--limit <n>", "How many to show (max 200)", (v) => parseInt(v, 10), 20)
107
+ .action(async (opts, cmd) => {
108
+ const g = cmd.optsWithGlobals();
109
+ try {
110
+ const result = await apiRequest("/account/abandoned-cart/reminders", {
111
+ query: { limit: String(opts.limit) },
112
+ sandbox: g.sandbox,
113
+ });
114
+ const list = result.data ?? [];
115
+ if (g.json)
116
+ output(result, { json: true });
117
+ else if (list.length === 0)
118
+ console.log(chalk.dim("No reminders yet."));
119
+ else {
120
+ console.log(chalk.bold("sent email items value status"));
121
+ for (const r of list) {
122
+ const sent = new Date(r.sentAt).toISOString().slice(0, 16).replace("T", " ");
123
+ const value = new Intl.NumberFormat(r.currencyAtSend === "USD" ? "en-US" : "id-ID", {
124
+ style: "currency", currency: r.currencyAtSend, minimumFractionDigits: 0,
125
+ }).format(r.valueAtSend);
126
+ const status = r.recoveredAt ? chalk.green("recovered") : chalk.dim("pending");
127
+ console.log(`${sent} ${r.email.padEnd(34).slice(0, 34)} ${String(r.cartSnapshot?.length ?? 0).padStart(5)} ${value.padStart(10)} ${status}`);
128
+ }
129
+ }
130
+ }
131
+ catch (err) {
132
+ handleError(err, g.json);
133
+ }
134
+ });
135
+ abandonedCart
136
+ .command("stats")
137
+ .description("Recovery stats over a window (7d / 30d / 90d / 365d)")
138
+ .option("--window <window>", "Window: 7d | 30d | 90d | 365d", "30d")
139
+ .action(async (opts, cmd) => {
140
+ const g = cmd.optsWithGlobals();
141
+ const days = parseInt(String(opts.window).replace("d", ""), 10) || 30;
142
+ try {
143
+ const result = await apiRequest("/account/abandoned-cart/stats", {
144
+ query: { windowDays: String(days) },
145
+ sandbox: g.sandbox,
146
+ });
147
+ const stats = result.data ?? result;
148
+ if (g.json)
149
+ output(result, { json: true });
150
+ else {
151
+ console.log(chalk.dim(`Window: last ${days} days`));
152
+ console.log(`Reminders sent: ${chalk.bold(stats.remindersSent)}`);
153
+ console.log(`Carts recovered: ${chalk.bold(stats.cartsRecovered)}`);
154
+ console.log(`Recovery rate: ${chalk.bold((stats.recoveryRate * 100).toFixed(1))}%`);
155
+ console.log(`Recovered revenue: ${stats.currency ? new Intl.NumberFormat("id-ID", { style: "currency", currency: stats.currency, minimumFractionDigits: 0 }).format(stats.recoveredRevenue) : chalk.dim("—")}`);
156
+ }
157
+ }
158
+ catch (err) {
159
+ handleError(err, g.json);
160
+ }
161
+ });
162
+ //# sourceMappingURL=abandoned-cart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abandoned-cart.js","sourceRoot":"","sources":["../../src/commands/abandoned-cart.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { Command } from "commander";
2
+ /**
3
+ * `sell feeds` — product-feed config + inspection.
4
+ * Public commands (urls, inspect) hit the storefront origin; config
5
+ * commands hit the authed account API.
6
+ */
7
+ export declare const feeds: Command;
8
+ //# sourceMappingURL=feeds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feeds.d.ts","sourceRoot":"","sources":["../../src/commands/feeds.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC;;;;GAIG;AAEH,eAAO,MAAM,KAAK,SAEjB,CAAC"}
@@ -0,0 +1,153 @@
1
+ import { Command } from "commander";
2
+ import chalk from "chalk";
3
+ import { apiRequest } from "../lib/api.js";
4
+ import { output } from "../lib/output.js";
5
+ /**
6
+ * `sell feeds` — product-feed config + inspection.
7
+ * Public commands (urls, inspect) hit the storefront origin; config
8
+ * commands hit the authed account API.
9
+ */
10
+ export const feeds = new Command("feeds").description("Configure + inspect product-catalog feeds (Google Shopping / Meta / TikTok)");
11
+ function defaultBase() {
12
+ return process.env.STORLAUNCH_PUBLIC_URL ?? "https://storlaunch.forjio.com";
13
+ }
14
+ function handleError(err, json) {
15
+ const msg = err instanceof Error ? err.message : String(err);
16
+ if (json)
17
+ output({ error: { message: msg } }, { json: true });
18
+ else
19
+ console.error(chalk.red(`Error: ${msg}`));
20
+ process.exit(1);
21
+ }
22
+ feeds
23
+ .command("urls")
24
+ .description("Print the three feed URLs for a merchant — paste into Google/Meta/TikTok dashboards")
25
+ .requiredOption("--merchant <slug>", "Merchant slug")
26
+ .option("--base-url <url>", "Override the storefront base URL")
27
+ .action(async (opts, cmd) => {
28
+ const g = cmd.optsWithGlobals();
29
+ const base = (opts.baseUrl ?? defaultBase()).replace(/\/$/, "");
30
+ const slug = encodeURIComponent(opts.merchant);
31
+ const urls = {
32
+ google: `${base}/api/v1/storefront/public/${slug}/feeds/google.xml`,
33
+ meta: `${base}/api/v1/storefront/public/${slug}/feeds/meta.xml`,
34
+ tiktok: `${base}/api/v1/storefront/public/${slug}/feeds/tiktok.xml`,
35
+ };
36
+ if (g.json)
37
+ output(urls, { json: true });
38
+ else {
39
+ console.log(chalk.bold("Google Shopping:") + " " + urls.google);
40
+ console.log(chalk.bold("Meta Catalog: ") + " " + urls.meta);
41
+ console.log(chalk.bold("TikTok Catalog: ") + " " + urls.tiktok);
42
+ }
43
+ });
44
+ feeds
45
+ .command("inspect")
46
+ .description("Fetch a merchant's feed and report item count + missing-field warnings")
47
+ .requiredOption("--merchant <slug>", "Merchant slug")
48
+ .option("--format <format>", "google | meta | tiktok", "google")
49
+ .option("--base-url <url>", "Override the storefront base URL")
50
+ .action(async (opts, cmd) => {
51
+ const g = cmd.optsWithGlobals();
52
+ const base = (opts.baseUrl ?? defaultBase()).replace(/\/$/, "");
53
+ const url = `${base}/api/v1/storefront/public/${encodeURIComponent(opts.merchant)}/feeds/${opts.format}.xml`;
54
+ try {
55
+ const res = await fetch(url);
56
+ if (!res.ok) {
57
+ console.error(chalk.red(`Failed: ${res.status} ${res.statusText} ← ${url}`));
58
+ process.exit(1);
59
+ }
60
+ const xml = await res.text();
61
+ const items = [...xml.matchAll(/<item>/g)].length;
62
+ const missingGtin = items - [...xml.matchAll(/<g:gtin>/g)].length;
63
+ const missingImage = items - [...xml.matchAll(/<g:image_link>/g)].length;
64
+ const zeroPrice = [...xml.matchAll(/<g:price>0(?:\.0+)? /g)].length;
65
+ const summary = { url, format: opts.format, items, missingGtin, missingImage, zeroPrice };
66
+ if (g.json)
67
+ output(summary, { json: true });
68
+ else {
69
+ console.log(chalk.dim(url));
70
+ console.log(`${chalk.bold(items)} items`);
71
+ if (missingGtin > 0)
72
+ console.log(chalk.yellow(`⚠ ${missingGtin} items without g:gtin (Google identifier_exists=no will be set)`));
73
+ if (missingImage > 0)
74
+ console.log(chalk.red(`✗ ${missingImage} items without g:image_link (will be rejected by Google Shopping)`));
75
+ if (zeroPrice > 0)
76
+ console.log(chalk.red(`✗ ${zeroPrice} items with zero price`));
77
+ if (missingGtin === 0 && missingImage === 0 && zeroPrice === 0)
78
+ console.log(chalk.green("All checks passed"));
79
+ }
80
+ }
81
+ catch (err) {
82
+ handleError(err, g.json);
83
+ }
84
+ });
85
+ const config = new Command("config").description("Get / update merchant feed config");
86
+ config
87
+ .command("get")
88
+ .description("Show the merchant's feed config + computed URLs")
89
+ .action(async (_opts, cmd) => {
90
+ const g = cmd.optsWithGlobals();
91
+ try {
92
+ const result = await apiRequest("/account/feeds", { sandbox: g.sandbox });
93
+ const data = result.data ?? result;
94
+ if (g.json)
95
+ output(result, { json: true });
96
+ else {
97
+ console.log(`Enabled: ${data.enabled ? chalk.green("yes") : chalk.red("no")}`);
98
+ console.log(`Default category: ${data.defaultGoogleProductCategory ?? chalk.dim("(none)")}`);
99
+ console.log(`Include drafts: ${data.includeUnpublished ? chalk.yellow("yes") : "no"}`);
100
+ console.log("");
101
+ console.log(chalk.bold("Feed URLs (submit these to ad-network dashboards):"));
102
+ console.log(` Google: ${data.urls.google}`);
103
+ console.log(` Meta: ${data.urls.meta}`);
104
+ console.log(` TikTok: ${data.urls.tiktok}`);
105
+ }
106
+ }
107
+ catch (err) {
108
+ handleError(err, g.json);
109
+ }
110
+ });
111
+ config
112
+ .command("set")
113
+ .description("Update fields (only flags you pass are changed)")
114
+ .option("--enable", "Enable feeds")
115
+ .option("--disable", "Disable feeds (returns 404 from public endpoints)")
116
+ .option("--default-category <text>", "Default Google product category (path or taxonomy ID)")
117
+ .option("--include-unpublished", "Include draft products")
118
+ .option("--no-include-unpublished", "Exclude draft products")
119
+ .action(async (opts, cmd) => {
120
+ const g = cmd.optsWithGlobals();
121
+ try {
122
+ const body = {};
123
+ if (opts.enable)
124
+ body.enabled = true;
125
+ if (opts.disable)
126
+ body.enabled = false;
127
+ if (opts.defaultCategory !== undefined)
128
+ body.defaultGoogleProductCategory = opts.defaultCategory;
129
+ // Commander turns --include-unpublished into true and --no-include-unpublished into false.
130
+ if (opts.includeUnpublished === true)
131
+ body.includeUnpublished = true;
132
+ else if (opts.includeUnpublished === false)
133
+ body.includeUnpublished = false;
134
+ if (Object.keys(body).length === 0) {
135
+ console.error(chalk.yellow("No changes supplied."));
136
+ process.exit(1);
137
+ }
138
+ const result = await apiRequest("/account/feeds", {
139
+ method: "PATCH",
140
+ body,
141
+ sandbox: g.sandbox,
142
+ });
143
+ if (g.json)
144
+ output(result, { json: true });
145
+ else
146
+ console.log(chalk.green("Config saved."));
147
+ }
148
+ catch (err) {
149
+ handleError(err, g.json);
150
+ }
151
+ });
152
+ feeds.addCommand(config);
153
+ //# sourceMappingURL=feeds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feeds.js","sourceRoot":"","sources":["../../src/commands/feeds.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;AAepC;;;;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;AAiBpC;;;;GAIG;AACH,eAAO,MAAM,IAAI,SAAoF,CAAC"}
@@ -12,6 +12,8 @@ import { payouts } from "./payouts.js";
12
12
  import { discountCodes } from "./discount-codes.js";
13
13
  import { seo } from "./seo.js";
14
14
  import { pixels } from "./pixels.js";
15
+ import { abandonedCart } from "./abandoned-cart.js";
16
+ import { feeds } from "./feeds.js";
15
17
  /**
16
18
  * `sell` — seller-side commands. Wraps existing command modules as
17
19
  * subcommands. 0.3.0 adds inventory (variants/warehouses/stock) and
@@ -29,6 +31,8 @@ sell.addCommand(payouts);
29
31
  sell.addCommand(discountCodes);
30
32
  sell.addCommand(seo);
31
33
  sell.addCommand(pixels);
34
+ sell.addCommand(abandonedCart);
35
+ sell.addCommand(feeds);
32
36
  sell.addCommand(webhook);
33
37
  sell.addCommand(config);
34
38
  //# 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;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,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,OAAO,CAAC,CAAC;AACzB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAC/B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AACrB,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;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC;;;;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,aAAa,CAAC,CAAC;AAC/B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AACrB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AACxB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAC/B,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACvB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACzB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forjio/storlaunch-cli",
3
- "version": "0.11.0",
3
+ "version": "0.13.0",
4
4
  "description": "Storlaunch CLI — seller tools (storefronts, inventory, shipping, ledger, reports, payouts, discount-codes, payments, webhooks) and buyer tools (shop, cart, orders, subs, invoices) in one CLI",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",