@forjio/storlaunch-cli 0.10.1 → 0.12.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,9 @@
1
+ import { Command } from "commander";
2
+ /**
3
+ * `sell pixels` — merchant-side conversion-tracking config. Matches the
4
+ * dashboard page at /dashboard/marketing/pixels. Partial PATCH semantics:
5
+ * only flags you pass get sent in the body, so `sell pixels set --meta X`
6
+ * leaves Google + TikTok fields untouched.
7
+ */
8
+ export declare const pixels: Command;
9
+ //# sourceMappingURL=pixels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pixels.d.ts","sourceRoot":"","sources":["../../src/commands/pixels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC;;;;;GAKG;AAEH,eAAO,MAAM,MAAM,SAAmG,CAAC"}
@@ -0,0 +1,176 @@
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 pixels` — merchant-side conversion-tracking config. Matches the
7
+ * dashboard page at /dashboard/marketing/pixels. Partial PATCH semantics:
8
+ * only flags you pass get sent in the body, so `sell pixels set --meta X`
9
+ * leaves Google + TikTok fields untouched.
10
+ */
11
+ export const pixels = new Command("pixels").description("Configure Meta / Google / TikTok conversion tracking pixels");
12
+ function handleError(err, json) {
13
+ const msg = err instanceof Error ? err.message : String(err);
14
+ if (json) {
15
+ output({ error: { message: msg } }, { json: true });
16
+ }
17
+ else {
18
+ console.error(chalk.red(`Error: ${msg}`));
19
+ }
20
+ process.exit(1);
21
+ }
22
+ function render(row) {
23
+ const mask = (s) => (s ? `${s.slice(0, 6)}…${s.slice(-4)}` : chalk.dim("(not set)"));
24
+ const show = (s) => (s ? s : chalk.dim("(not set)"));
25
+ console.log(`Meta Pixel ID: ${show(row.metaPixelId)}`);
26
+ console.log(`Meta CAPI token: ${mask(row.metaCapiAccessToken)}`);
27
+ console.log(`Meta test event: ${show(row.metaTestEventCode)}`);
28
+ console.log(`GA4 measurement ID: ${show(row.googleAnalyticsId)}`);
29
+ console.log(`Google Ads ID: ${show(row.googleAdsConversionId)}`);
30
+ console.log(`Google Ads label: ${show(row.googleAdsPurchaseLabel)}`);
31
+ console.log(`TikTok Pixel ID: ${show(row.tiktokPixelId)}`);
32
+ console.log(`Enabled: ${row.enabled ? chalk.green("yes") : chalk.red("no")}`);
33
+ }
34
+ pixels
35
+ .command("get")
36
+ .description("Show the current pixel configuration")
37
+ .action(async (_opts, cmd) => {
38
+ const g = cmd.optsWithGlobals();
39
+ try {
40
+ const result = await apiRequest("/account/pixels", { sandbox: g.sandbox });
41
+ const data = result.data ?? result;
42
+ if (g.json)
43
+ output(result, { json: true });
44
+ else
45
+ render(data);
46
+ }
47
+ catch (err) {
48
+ handleError(err, g.json);
49
+ }
50
+ });
51
+ pixels
52
+ .command("set")
53
+ .description("Update pixel IDs (only supplied fields change)")
54
+ .option("--meta <id>", "Meta Pixel ID")
55
+ .option("--meta-capi-token <token>", "Meta Conversions API access token")
56
+ .option("--meta-test-event <code>", "Meta CAPI test event code")
57
+ .option("--google-analytics <id>", "Google Analytics 4 measurement ID (G-XXX)")
58
+ .option("--google-ads <id>", "Google Ads conversion ID (AW-XXX)")
59
+ .option("--google-ads-label <label>", "Google Ads purchase conversion label")
60
+ .option("--tiktok <id>", "TikTok Pixel ID")
61
+ .option("--enable", "Enable all pixel tracking")
62
+ .option("--disable", "Disable all pixel tracking without clearing IDs")
63
+ .action(async (opts, cmd) => {
64
+ const g = cmd.optsWithGlobals();
65
+ try {
66
+ const body = {};
67
+ if (opts.meta !== undefined)
68
+ body.metaPixelId = opts.meta;
69
+ if (opts.metaCapiToken !== undefined)
70
+ body.metaCapiAccessToken = opts.metaCapiToken;
71
+ if (opts.metaTestEvent !== undefined)
72
+ body.metaTestEventCode = opts.metaTestEvent;
73
+ if (opts.googleAnalytics !== undefined)
74
+ body.googleAnalyticsId = opts.googleAnalytics;
75
+ if (opts.googleAds !== undefined)
76
+ body.googleAdsConversionId = opts.googleAds;
77
+ if (opts.googleAdsLabel !== undefined)
78
+ body.googleAdsPurchaseLabel = opts.googleAdsLabel;
79
+ if (opts.tiktok !== undefined)
80
+ body.tiktokPixelId = opts.tiktok;
81
+ if (opts.enable)
82
+ body.enabled = true;
83
+ if (opts.disable)
84
+ body.enabled = false;
85
+ if (Object.keys(body).length === 0) {
86
+ console.error(chalk.yellow("No changes supplied. Pass at least one --meta/--google-analytics/--tiktok/… flag."));
87
+ process.exit(1);
88
+ }
89
+ const result = await apiRequest("/account/pixels", {
90
+ method: "PATCH",
91
+ body,
92
+ sandbox: g.sandbox,
93
+ });
94
+ const data = result.data ?? result;
95
+ if (g.json)
96
+ output(result, { json: true });
97
+ else {
98
+ console.log(chalk.green("Pixels updated."));
99
+ render(data);
100
+ }
101
+ }
102
+ catch (err) {
103
+ handleError(err, g.json);
104
+ }
105
+ });
106
+ pixels
107
+ .command("clear")
108
+ .description("Nullify one platform's fields (leaves the others intact)")
109
+ .requiredOption("--platform <platform>", "meta | google | tiktok")
110
+ .action(async (opts, cmd) => {
111
+ const g = cmd.optsWithGlobals();
112
+ try {
113
+ const body = {};
114
+ switch (opts.platform) {
115
+ case "meta":
116
+ body.metaPixelId = null;
117
+ body.metaCapiAccessToken = null;
118
+ body.metaTestEventCode = null;
119
+ break;
120
+ case "google":
121
+ body.googleAnalyticsId = null;
122
+ body.googleAdsConversionId = null;
123
+ body.googleAdsPurchaseLabel = null;
124
+ break;
125
+ case "tiktok":
126
+ body.tiktokPixelId = null;
127
+ break;
128
+ default:
129
+ console.error(chalk.red(`Unknown platform: ${opts.platform}. Expected meta | google | tiktok.`));
130
+ process.exit(1);
131
+ }
132
+ const result = await apiRequest("/account/pixels", {
133
+ method: "PATCH",
134
+ body,
135
+ sandbox: g.sandbox,
136
+ });
137
+ if (g.json)
138
+ output(result, { json: true });
139
+ else
140
+ console.log(chalk.green(`Cleared ${opts.platform} fields.`));
141
+ }
142
+ catch (err) {
143
+ handleError(err, g.json);
144
+ }
145
+ });
146
+ pixels
147
+ .command("test")
148
+ .description("Fire a test CAPI Purchase against an existing session (Meta Events Manager → Test Events)")
149
+ .requiredOption("--platform <platform>", "Currently only `meta` is supported")
150
+ .requiredOption("--session <id>", "A checkout session ID in your account to use as the test payload")
151
+ .action(async (opts, cmd) => {
152
+ const g = cmd.optsWithGlobals();
153
+ if (opts.platform !== "meta") {
154
+ console.error(chalk.yellow("Test events are currently Meta-only."));
155
+ process.exit(1);
156
+ }
157
+ try {
158
+ const result = await apiRequest("/account/pixels/test-capi", {
159
+ method: "POST",
160
+ body: { sessionId: opts.session },
161
+ sandbox: g.sandbox,
162
+ });
163
+ const data = result.data
164
+ ?? result;
165
+ if (g.json)
166
+ output(result, { json: true });
167
+ else if (data.sent)
168
+ console.log(chalk.green("Test Purchase delivered. Check Meta Events Manager → Test Events."));
169
+ else
170
+ console.log(chalk.yellow(`Not sent: ${data.reason ?? "unknown"}`));
171
+ }
172
+ catch (err) {
173
+ handleError(err, g.json);
174
+ }
175
+ });
176
+ //# sourceMappingURL=pixels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pixels.js","sourceRoot":"","sources":["../../src/commands/pixels.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;AAcpC;;;;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;AAgBpC;;;;GAIG;AACH,eAAO,MAAM,IAAI,SAAoF,CAAC"}
@@ -11,6 +11,8 @@ import { reports } from "./reports.js";
11
11
  import { payouts } from "./payouts.js";
12
12
  import { discountCodes } from "./discount-codes.js";
13
13
  import { seo } from "./seo.js";
14
+ import { pixels } from "./pixels.js";
15
+ import { abandonedCart } from "./abandoned-cart.js";
14
16
  /**
15
17
  * `sell` — seller-side commands. Wraps existing command modules as
16
18
  * subcommands. 0.3.0 adds inventory (variants/warehouses/stock) and
@@ -27,6 +29,8 @@ sell.addCommand(reports);
27
29
  sell.addCommand(payouts);
28
30
  sell.addCommand(discountCodes);
29
31
  sell.addCommand(seo);
32
+ sell.addCommand(pixels);
33
+ sell.addCommand(abandonedCart);
30
34
  sell.addCommand(webhook);
31
35
  sell.addCommand(config);
32
36
  //# 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;AAE/B;;;;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,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;AAEpD;;;;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,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.10.1",
3
+ "version": "0.12.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",