@forjio/storlaunch-cli 0.9.0 → 0.10.1

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.
@@ -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;AAapC;;;;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;AAcpC;;;;GAIG;AACH,eAAO,MAAM,IAAI,SAAoF,CAAC"}
@@ -10,6 +10,7 @@ import { ledger } from "./ledger.js";
10
10
  import { reports } from "./reports.js";
11
11
  import { payouts } from "./payouts.js";
12
12
  import { discountCodes } from "./discount-codes.js";
13
+ import { seo } from "./seo.js";
13
14
  /**
14
15
  * `sell` — seller-side commands. Wraps existing command modules as
15
16
  * subcommands. 0.3.0 adds inventory (variants/warehouses/stock) and
@@ -25,6 +26,7 @@ sell.addCommand(ledger);
25
26
  sell.addCommand(reports);
26
27
  sell.addCommand(payouts);
27
28
  sell.addCommand(discountCodes);
29
+ sell.addCommand(seo);
28
30
  sell.addCommand(webhook);
29
31
  sell.addCommand(config);
30
32
  //# 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;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,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;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"}
@@ -0,0 +1,11 @@
1
+ import { Command } from "commander";
2
+ /**
3
+ * `sell seo` — inspect a merchant's storefront SEO on the public web.
4
+ *
5
+ * These commands are unauthenticated — they hit the live storefront HTML
6
+ * directly (default https://storlaunch.forjio.com, override with
7
+ * --base-url) and grep for the expected SEO artifacts. Useful after a
8
+ * product launch or when debugging why Google isn't picking up a listing.
9
+ */
10
+ export declare const seo: Command;
11
+ //# sourceMappingURL=seo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seo.d.ts","sourceRoot":"","sources":["../../src/commands/seo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC;;;;;;;GAOG;AAEH,eAAO,MAAM,GAAG,SAA+F,CAAC"}
@@ -0,0 +1,269 @@
1
+ import { Command } from "commander";
2
+ import chalk from "chalk";
3
+ import { output } from "../lib/output.js";
4
+ /**
5
+ * `sell seo` — inspect a merchant's storefront SEO on the public web.
6
+ *
7
+ * These commands are unauthenticated — they hit the live storefront HTML
8
+ * directly (default https://storlaunch.forjio.com, override with
9
+ * --base-url) and grep for the expected SEO artifacts. Useful after a
10
+ * product launch or when debugging why Google isn't picking up a listing.
11
+ */
12
+ export const seo = new Command("seo").description("Inspect storefront SEO (title, metadata, JSON-LD, sitemap)");
13
+ function defaultBase() {
14
+ return process.env.STORLAUNCH_PUBLIC_URL ?? "https://storlaunch.forjio.com";
15
+ }
16
+ async function fetchText(url) {
17
+ const res = await fetch(url);
18
+ if (!res.ok)
19
+ throw new Error(`${res.status} ${res.statusText} ← ${url}`);
20
+ return res.text();
21
+ }
22
+ function extractJsonLdWithSource(html) {
23
+ const blobs = extractJsonLd(html);
24
+ if (blobs.length === 0)
25
+ return { blobs: [], source: "none" };
26
+ // Heuristic: if the raw HTML has a visible <script type="application/ld+json">
27
+ // tag, we're serving real HTML. Otherwise it's RSC flight.
28
+ const source = /<script type="application\/ld\+json">/.test(html) ? "html" : "flight";
29
+ return { blobs, source };
30
+ }
31
+ function extractJsonLd(html) {
32
+ const out = [];
33
+ // 1. Regular <script type="application/ld+json">...</script> tags (ideal).
34
+ const re = /<script type="application\/ld\+json">([\s\S]*?)<\/script>/g;
35
+ let m;
36
+ while ((m = re.exec(html)) !== null) {
37
+ out.push(m[1].replace(/\\u003c/g, "<").replace(/\\u2028/g, "\u2028").replace(/\\u2029/g, "\u2029"));
38
+ }
39
+ if (out.length > 0)
40
+ return out;
41
+ // 2. Fallback: React Server Component flight payload. Next 15 streams server
42
+ // component output inside <script>self.__next_f.push([1, "..."])</script>.
43
+ // Decode each flight string and look for the JSON-LD <script> element shape
44
+ // inside.
45
+ const pushRe = /self\.__next_f\.push\(\[\s*\d+\s*,\s*"((?:[^"\\]|\\.)*)"\s*\]\)/g;
46
+ while ((m = pushRe.exec(html)) !== null) {
47
+ let payload;
48
+ try {
49
+ payload = JSON.parse(`"${m[1]}"`);
50
+ }
51
+ catch {
52
+ continue;
53
+ }
54
+ // Inside the decoded flight, JSON-LD scripts look like:
55
+ // "type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"<escaped JSON>"}
56
+ const innerRe = /"type":"application\/ld\+json","dangerouslySetInnerHTML":\{"__html":"((?:[^"\\]|\\.)*)"\}/g;
57
+ let inner;
58
+ while ((inner = innerRe.exec(payload)) !== null) {
59
+ try {
60
+ const obj = JSON.parse(`"${inner[1]}"`);
61
+ out.push(obj.replace(/\\u003c/g, "<").replace(/\\u2028/g, "\u2028").replace(/\\u2029/g, "\u2029"));
62
+ }
63
+ catch {
64
+ /* skip */
65
+ }
66
+ }
67
+ }
68
+ return out;
69
+ }
70
+ function pickH1FromFlight(html) {
71
+ // Decode each __next_f flight string and look for ["$","h1",...].
72
+ const pushRe = /self\.__next_f\.push\(\[\s*\d+\s*,\s*"((?:[^"\\]|\\.)*)"\s*\]\)/g;
73
+ let m;
74
+ while ((m = pushRe.exec(html)) !== null) {
75
+ let payload;
76
+ try {
77
+ payload = JSON.parse(`"${m[1]}"`);
78
+ }
79
+ catch {
80
+ continue;
81
+ }
82
+ const inner = payload.match(/"\$","h1",[^{]*\{[^}]*?"children":"((?:[^"\\]|\\.)*)"/);
83
+ if (inner) {
84
+ try {
85
+ return JSON.parse(`"${inner[1]}"`);
86
+ }
87
+ catch {
88
+ /* skip */
89
+ }
90
+ }
91
+ }
92
+ return null;
93
+ }
94
+ function pickMeta(html, attr, value) {
95
+ const re = new RegExp(`<meta\\s+${attr}=["']${value}["']\\s+content=["']([^"']*)["']`, "i");
96
+ const m = html.match(re);
97
+ return m ? m[1] : null;
98
+ }
99
+ function pickCanonical(html) {
100
+ const m = html.match(/<link\s+rel=["']canonical["']\s+href=["']([^"']*)["']/i);
101
+ return m ? m[1] : null;
102
+ }
103
+ function pickH1(html) {
104
+ const m = html.match(/<h1[^>]*>([\s\S]*?)<\/h1>/i);
105
+ return m ? m[1].replace(/<[^>]+>/g, "").trim() : null;
106
+ }
107
+ function pickTitle(html) {
108
+ const m = html.match(/<title[^>]*>([\s\S]*?)<\/title>/i);
109
+ return m ? m[1].trim() : null;
110
+ }
111
+ seo
112
+ .command("inspect")
113
+ .description("Check a merchant storefront for title, description, OG tags, and JSON-LD")
114
+ .requiredOption("--merchant <slug>", "Merchant slug")
115
+ .option("--base-url <url>", "Override the storefront base URL")
116
+ .action(async (opts, cmd) => {
117
+ const g = cmd.optsWithGlobals();
118
+ const base = opts.baseUrl ?? defaultBase();
119
+ const url = `${base}/s/${encodeURIComponent(opts.merchant)}`;
120
+ try {
121
+ const html = await fetchText(url);
122
+ const checks = [];
123
+ const title = pickTitle(html);
124
+ checks.push({ name: "<title>", ok: !!title, detail: title ?? "missing" });
125
+ const desc = pickMeta(html, "name", "description");
126
+ checks.push({ name: 'meta description', ok: !!desc, detail: desc ?? "missing" });
127
+ const ogTitle = pickMeta(html, "property", "og:title");
128
+ checks.push({ name: "og:title", ok: !!ogTitle, detail: ogTitle ?? "missing" });
129
+ const ogImage = pickMeta(html, "property", "og:image");
130
+ checks.push({ name: "og:image", ok: !!ogImage, detail: ogImage ?? "missing" });
131
+ const twitter = pickMeta(html, "name", "twitter:card");
132
+ checks.push({ name: "twitter:card", ok: !!twitter, detail: twitter ?? "missing" });
133
+ const canonical = pickCanonical(html);
134
+ checks.push({ name: "canonical", ok: !!canonical, detail: canonical ?? "missing" });
135
+ const h1 = pickH1(html) ?? pickH1FromFlight(html);
136
+ checks.push({ name: "<h1>", ok: !!h1, detail: h1 ?? "missing" });
137
+ const { blobs: ldBlobs, source: ldSource } = extractJsonLdWithSource(html);
138
+ const ldTypes = ldBlobs
139
+ .map((b) => { try {
140
+ return JSON.parse(b)["@type"] ?? "?";
141
+ }
142
+ catch {
143
+ return "invalid-json";
144
+ } });
145
+ checks.push({
146
+ name: "JSON-LD",
147
+ ok: ldBlobs.length > 0 && !ldTypes.includes("invalid-json"),
148
+ detail: ldBlobs.length === 0
149
+ ? "no <script type=\"application/ld+json\"> blocks found"
150
+ : `${ldTypes.join(", ")}${ldSource === "flight" ? " (served via RSC flight — Google renders it, non-JS crawlers may miss it)" : ""}`,
151
+ });
152
+ const failed = checks.filter((c) => !c.ok);
153
+ if (g.json) {
154
+ output({ url, checks, passed: checks.length - failed.length, failed: failed.length }, { json: true });
155
+ }
156
+ else {
157
+ console.log(chalk.dim(url));
158
+ for (const c of checks) {
159
+ const mark = c.ok ? chalk.green("✓") : chalk.red("✗");
160
+ console.log(`${mark} ${c.name}: ${chalk.dim(c.detail.slice(0, 120))}`);
161
+ }
162
+ if (failed.length > 0) {
163
+ console.log();
164
+ console.log(chalk.red(`${failed.length} check${failed.length === 1 ? "" : "s"} failed`));
165
+ }
166
+ else {
167
+ console.log();
168
+ console.log(chalk.green("All checks passed"));
169
+ }
170
+ }
171
+ if (failed.length > 0)
172
+ process.exit(1);
173
+ }
174
+ catch (err) {
175
+ const msg = err instanceof Error ? err.message : String(err);
176
+ if (g.json)
177
+ output({ error: { message: msg } }, { json: true });
178
+ else
179
+ console.error(chalk.red(`Failed: ${msg}`));
180
+ process.exit(1);
181
+ }
182
+ });
183
+ seo
184
+ .command("sitemap")
185
+ .description("Summarize a merchant sitemap: product count, oldest/newest entries")
186
+ .requiredOption("--merchant <slug>", "Merchant slug")
187
+ .option("--base-url <url>", "Override the storefront base URL")
188
+ .action(async (opts, cmd) => {
189
+ const g = cmd.optsWithGlobals();
190
+ const base = opts.baseUrl ?? defaultBase();
191
+ const url = `${base}/s/${encodeURIComponent(opts.merchant)}/sitemap.xml`;
192
+ try {
193
+ const xml = await fetchText(url);
194
+ // Lightweight parse — we don't need a full XML parser for
195
+ // <lastmod>...</lastmod> + <loc>...</loc> extraction.
196
+ const urls = [...xml.matchAll(/<loc>([^<]*)<\/loc>/g)].map((m) => m[1]);
197
+ const modifieds = [...xml.matchAll(/<lastmod>([^<]*)<\/lastmod>/g)]
198
+ .map((m) => m[1])
199
+ .filter((s) => !Number.isNaN(new Date(s).getTime()));
200
+ const sorted = [...modifieds].sort();
201
+ const result = {
202
+ url,
203
+ urlCount: urls.length,
204
+ oldest: sorted[0] ?? null,
205
+ newest: sorted[sorted.length - 1] ?? null,
206
+ };
207
+ if (g.json)
208
+ output(result, { json: true });
209
+ else {
210
+ console.log(chalk.dim(url));
211
+ console.log(`${chalk.bold(result.urlCount)} URLs`);
212
+ console.log(`Oldest: ${chalk.dim(result.oldest ?? "(none)")}`);
213
+ console.log(`Newest: ${chalk.dim(result.newest ?? "(none)")}`);
214
+ }
215
+ }
216
+ catch (err) {
217
+ const msg = err instanceof Error ? err.message : String(err);
218
+ if (g.json)
219
+ output({ error: { message: msg } }, { json: true });
220
+ else
221
+ console.error(chalk.red(`Failed: ${msg}`));
222
+ process.exit(1);
223
+ }
224
+ });
225
+ seo
226
+ .command("product-schema")
227
+ .description("Extract and pretty-print the Product JSON-LD from a product page")
228
+ .requiredOption("--merchant <slug>", "Merchant slug")
229
+ .requiredOption("--product <slug>", "Product slug")
230
+ .option("--base-url <url>", "Override the storefront base URL")
231
+ .action(async (opts, cmd) => {
232
+ const g = cmd.optsWithGlobals();
233
+ const base = opts.baseUrl ?? defaultBase();
234
+ const url = `${base}/s/${encodeURIComponent(opts.merchant)}/${encodeURIComponent(opts.product)}`;
235
+ try {
236
+ const html = await fetchText(url);
237
+ const blobs = extractJsonLd(html);
238
+ const parsed = blobs
239
+ .map((b) => { try {
240
+ return JSON.parse(b);
241
+ }
242
+ catch {
243
+ return null;
244
+ } })
245
+ .filter((p) => p !== null);
246
+ const product = parsed.find((p) => p["@type"] === "Product");
247
+ if (!product) {
248
+ if (g.json)
249
+ output({ error: { message: "No Product JSON-LD found" } }, { json: true });
250
+ else
251
+ console.error(chalk.red("No Product JSON-LD found on page"));
252
+ process.exit(1);
253
+ return;
254
+ }
255
+ if (g.json)
256
+ output(product, { json: true });
257
+ else
258
+ console.log(JSON.stringify(product, null, 2));
259
+ }
260
+ catch (err) {
261
+ const msg = err instanceof Error ? err.message : String(err);
262
+ if (g.json)
263
+ output({ error: { message: msg } }, { json: true });
264
+ else
265
+ console.error(chalk.red(`Failed: ${msg}`));
266
+ process.exit(1);
267
+ }
268
+ });
269
+ //# sourceMappingURL=seo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seo.js","sourceRoot":"","sources":["../../src/commands/seo.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forjio/storlaunch-cli",
3
- "version": "0.9.0",
3
+ "version": "0.10.1",
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",