@merchbase/cli 1.0.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.
- package/CHANGELOG.md +20 -0
- package/README.md +28 -0
- package/dist/base-url.d.ts +2 -0
- package/dist/base-url.d.ts.map +1 -0
- package/dist/base-url.js +8 -0
- package/dist/base-url.js.map +1 -0
- package/dist/changelog.d.ts +19 -0
- package/dist/changelog.d.ts.map +1 -0
- package/dist/changelog.js +62 -0
- package/dist/changelog.js.map +1 -0
- package/dist/cli.d.ts +4 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +505 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +22 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +70 -0
- package/dist/config.js.map +1 -0
- package/dist/help.d.ts +4 -0
- package/dist/help.d.ts.map +1 -0
- package/dist/help.js +191 -0
- package/dist/help.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/output.d.ts +3 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +70 -0
- package/dist/output.js.map +1 -0
- package/package.json +43 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# MerchBase CLI Changelog
|
|
2
|
+
|
|
3
|
+
## v1.0.0 - 2026-04-01
|
|
4
|
+
|
|
5
|
+
- MerchBase CLI is here as a stable `mb` command for reading MerchBase Core data and kicking off sync workflows from the terminal.
|
|
6
|
+
- Save your base URL, default account, marketplace, and default date range once, then reuse that context across everyday CLI commands.
|
|
7
|
+
- Trigger merch account, product, and sales syncs directly from the CLI when your ingestion client is connected.
|
|
8
|
+
- Inspect account data, merch account metadata, product listings, product catalog details, design facets, sales summaries, sales records, sales series, and grouped sales breakdowns without leaving the shell.
|
|
9
|
+
- Pull dashboard-shaped KPI, sales-table, and product-chart reads when you want quick operator snapshots in a scriptable format.
|
|
10
|
+
- Built-in help topics, setup guidance, and packaged release notes make the CLI easier to install, learn, and troubleshoot.
|
|
11
|
+
- Setup failures now point to the next step more directly, including missing `MERCHBASE_API_KEY` config and cases where you need to run `mb merch-account sync` before dataset syncs.
|
|
12
|
+
|
|
13
|
+
## v0.1.0 - 2026-03-31
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
|
|
17
|
+
- Initial MerchBase CLI package with config, sync, and data access commands.
|
|
18
|
+
- Env-only API key auth using `MERCHBASE_API_KEY`.
|
|
19
|
+
- Product metadata and catalog access commands.
|
|
20
|
+
- Setup guidance in help output and setup-aware command error messages.
|
package/README.md
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# @merchbase/cli
|
|
2
|
+
|
|
3
|
+
MerchBase CLI for MerchBase Core public APIs.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g @merchbase/cli
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Setup
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
export MERCHBASE_API_KEY=mb_live_xxx
|
|
15
|
+
mb config set base-url https://app.merchbase.co
|
|
16
|
+
mb config set account <accountId> us
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Usage
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
mb help
|
|
23
|
+
mb products list
|
|
24
|
+
mb sales summary --range 30d
|
|
25
|
+
mb changelog
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
The CLI reads release notes from the packaged `CHANGELOG.md`, so installed users can inspect the current shipped notes with `mb changelog`.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-url.d.ts","sourceRoot":"","sources":["../src/base-url.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,gBAAgB,GAAI,OAAO,MAAM,WAI7C,CAAC"}
|
package/dist/base-url.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
const TRAILING_SLASHES_REGEX = /\/+$/;
|
|
2
|
+
const TRAILING_API_PATH_REGEX = /\/api\/?$/;
|
|
3
|
+
export const normalizeBaseUrl = (value) => {
|
|
4
|
+
return value
|
|
5
|
+
.replace(TRAILING_SLASHES_REGEX, "")
|
|
6
|
+
.replace(TRAILING_API_PATH_REGEX, "");
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=base-url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-url.js","sourceRoot":"","sources":["../src/base-url.ts"],"names":[],"mappings":"AAAA,MAAM,sBAAsB,GAAG,MAAM,CAAC;AACtC,MAAM,uBAAuB,GAAG,WAAW,CAAC;AAE5C,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAa,EAAE,EAAE;IAC9C,OAAO,KAAK;SACP,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC;SACnC,OAAO,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC;AAC9C,CAAC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface CliChangelogSection {
|
|
2
|
+
changes: string[];
|
|
3
|
+
title: string;
|
|
4
|
+
}
|
|
5
|
+
export interface CliChangelogEntry {
|
|
6
|
+
date: string;
|
|
7
|
+
sections: CliChangelogSection[];
|
|
8
|
+
version: string;
|
|
9
|
+
}
|
|
10
|
+
export declare const loadCliChangelog: () => Promise<CliChangelogEntry[]>;
|
|
11
|
+
export declare const loadCliVersion: () => Promise<string>;
|
|
12
|
+
export declare const normalizeChangelogVersion: (value: string) => string;
|
|
13
|
+
export declare const selectCliChangelogEntry: (input: {
|
|
14
|
+
entries: CliChangelogEntry[];
|
|
15
|
+
currentVersion: string;
|
|
16
|
+
requestedVersion?: string;
|
|
17
|
+
}) => CliChangelogEntry | undefined;
|
|
18
|
+
export declare const parseCliChangelog: (raw: string) => CliChangelogEntry[];
|
|
19
|
+
//# sourceMappingURL=changelog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"changelog.d.ts","sourceRoot":"","sources":["../src/changelog.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,mBAAmB;IAChC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;CACnB;AAWD,eAAO,MAAM,gBAAgB,oCAG5B,CAAC;AAEF,eAAO,MAAM,cAAc,uBAI1B,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAAI,OAAO,MAAM,WAEtD,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,OAAO;IAC3C,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B,kCAYA,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,KAAK,MAAM,wBAoC5C,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
const CHANGELOG_URL = new URL("../CHANGELOG.md", import.meta.url);
|
|
3
|
+
const CHANGELOG_LINE_SPLIT_REGEX = /\r?\n/;
|
|
4
|
+
const CHANGELOG_ENTRY_REGEX = /^##\s+v?([0-9][^\s]*)\s+-\s+([0-9]{4}-[0-9]{2}-[0-9]{2})\s*$/;
|
|
5
|
+
const CHANGELOG_SECTION_REGEX = /^###\s+(.+?)\s*$/;
|
|
6
|
+
const CHANGELOG_BULLET_REGEX = /^-\s+(.+?)\s*$/;
|
|
7
|
+
const CHANGELOG_VERSION_PREFIX_REGEX = /^v/i;
|
|
8
|
+
const PACKAGE_JSON_URL = new URL("../package.json", import.meta.url);
|
|
9
|
+
export const loadCliChangelog = async () => {
|
|
10
|
+
const raw = await readFile(CHANGELOG_URL, "utf8");
|
|
11
|
+
return parseCliChangelog(raw);
|
|
12
|
+
};
|
|
13
|
+
export const loadCliVersion = async () => {
|
|
14
|
+
const raw = await readFile(PACKAGE_JSON_URL, "utf8");
|
|
15
|
+
const parsed = JSON.parse(raw);
|
|
16
|
+
return parsed.version ?? "0.0.0";
|
|
17
|
+
};
|
|
18
|
+
export const normalizeChangelogVersion = (value) => {
|
|
19
|
+
return value.trim().replace(CHANGELOG_VERSION_PREFIX_REGEX, "");
|
|
20
|
+
};
|
|
21
|
+
export const selectCliChangelogEntry = (input) => {
|
|
22
|
+
if (input.requestedVersion) {
|
|
23
|
+
return input.entries.find((entry) => entry.version === input.requestedVersion);
|
|
24
|
+
}
|
|
25
|
+
return (input.entries.find((entry) => entry.version === input.currentVersion) ??
|
|
26
|
+
input.entries[0] ??
|
|
27
|
+
null);
|
|
28
|
+
};
|
|
29
|
+
export const parseCliChangelog = (raw) => {
|
|
30
|
+
const lines = raw.split(CHANGELOG_LINE_SPLIT_REGEX);
|
|
31
|
+
const entries = [];
|
|
32
|
+
let currentEntry = null;
|
|
33
|
+
let currentSection = null;
|
|
34
|
+
for (const line of lines) {
|
|
35
|
+
const entryMatch = line.match(CHANGELOG_ENTRY_REGEX);
|
|
36
|
+
if (entryMatch) {
|
|
37
|
+
currentEntry = {
|
|
38
|
+
version: entryMatch[1] ?? "",
|
|
39
|
+
date: entryMatch[2] ?? "",
|
|
40
|
+
sections: [],
|
|
41
|
+
};
|
|
42
|
+
entries.push(currentEntry);
|
|
43
|
+
currentSection = null;
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
const sectionMatch = line.match(CHANGELOG_SECTION_REGEX);
|
|
47
|
+
if (sectionMatch && currentEntry) {
|
|
48
|
+
currentSection = {
|
|
49
|
+
title: sectionMatch[1] ?? "",
|
|
50
|
+
changes: [],
|
|
51
|
+
};
|
|
52
|
+
currentEntry.sections.push(currentSection);
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
const bulletMatch = line.match(CHANGELOG_BULLET_REGEX);
|
|
56
|
+
if (bulletMatch && currentSection) {
|
|
57
|
+
currentSection.changes.push(bulletMatch[1] ?? "");
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return entries;
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=changelog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"changelog.js","sourceRoot":"","sources":["../src/changelog.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6CpC,eAAO,MAAM,aAAa,eAikBzB,CAAC;AAEF,eAAO,MAAM,MAAM,GAAU,eAAmB,kBAG/C,CAAC"}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,505 @@
|
|
|
1
|
+
import { createRequire } from "node:module";
|
|
2
|
+
import { createMerchbaseClient, } from "@merchbase/http-client";
|
|
3
|
+
import { Command } from "commander";
|
|
4
|
+
import { normalizeBaseUrl } from "./base-url.js";
|
|
5
|
+
import { loadCliChangelog, loadCliVersion, normalizeChangelogVersion, selectCliChangelogEntry, } from "./changelog.js";
|
|
6
|
+
import { clearConfig, getConfigPath, loadConfig, updateConfig, } from "./config.js";
|
|
7
|
+
import { renderHelp, resolveHelpTopicKey } from "./help.js";
|
|
8
|
+
import { printError, printSuccess } from "./output.js";
|
|
9
|
+
const API_KEY_ENV_VAR = "MERCHBASE_API_KEY";
|
|
10
|
+
const GLOBAL_SETUP_HELP = [
|
|
11
|
+
"Setup:",
|
|
12
|
+
" Set MERCHBASE_API_KEY in your environment.",
|
|
13
|
+
" Set the default account with `mb config set account <accountId> [marketplace]`.",
|
|
14
|
+
" `mb merch-account sync` requires an active ingestion client connection.",
|
|
15
|
+
" Run `mb merch-account sync` before `mb products sync` or `mb sales sync`.",
|
|
16
|
+
].join("\n");
|
|
17
|
+
const MERCH_ACCOUNT_GET_HELP = [
|
|
18
|
+
"Setup:",
|
|
19
|
+
" This reads previously synced merch account metadata.",
|
|
20
|
+
" If metadata has not been fetched yet, run `mb merch-account sync` first.",
|
|
21
|
+
].join("\n");
|
|
22
|
+
const MERCH_ACCOUNT_SYNC_HELP = [
|
|
23
|
+
"Setup:",
|
|
24
|
+
" Requires an active ingestion client connection for the selected account.",
|
|
25
|
+
].join("\n");
|
|
26
|
+
const DATASET_SYNC_HELP = [
|
|
27
|
+
"Setup:",
|
|
28
|
+
" Requires an active ingestion client connection.",
|
|
29
|
+
" Requires merch account metadata.",
|
|
30
|
+
" Run `mb merch-account sync` first if setup has not been completed yet.",
|
|
31
|
+
].join("\n");
|
|
32
|
+
const require = createRequire(import.meta.url);
|
|
33
|
+
const CLI_PACKAGE = require("../package.json");
|
|
34
|
+
const CLI_VERSION = CLI_PACKAGE.version ?? "0.0.0";
|
|
35
|
+
export const createProgram = () => {
|
|
36
|
+
const program = new Command();
|
|
37
|
+
program.name("mb").description("MerchBase CLI").version(CLI_VERSION);
|
|
38
|
+
program.helpCommand(false);
|
|
39
|
+
program.showHelpAfterError();
|
|
40
|
+
program.addHelpText("after", `\n${GLOBAL_SETUP_HELP}\n`);
|
|
41
|
+
program
|
|
42
|
+
.command("help [topic...]")
|
|
43
|
+
.description("Show command help topics")
|
|
44
|
+
.action((topic) => {
|
|
45
|
+
let segments = [];
|
|
46
|
+
if (Array.isArray(topic)) {
|
|
47
|
+
segments = topic;
|
|
48
|
+
}
|
|
49
|
+
else if (topic) {
|
|
50
|
+
segments = [topic];
|
|
51
|
+
}
|
|
52
|
+
process.stdout.write(renderHelp(resolveHelpTopicKey(segments)));
|
|
53
|
+
});
|
|
54
|
+
program
|
|
55
|
+
.command("changelog [version]")
|
|
56
|
+
.description("Show packaged CLI release notes")
|
|
57
|
+
.option("--all", "Show every packaged changelog entry")
|
|
58
|
+
.action(wrap(async (version, options) => {
|
|
59
|
+
if (options.all && version) {
|
|
60
|
+
throw new Error("Use either a version arg or --all, not both.");
|
|
61
|
+
}
|
|
62
|
+
const currentVersion = await loadCliVersion();
|
|
63
|
+
const entries = await loadCliChangelog();
|
|
64
|
+
if (options.all) {
|
|
65
|
+
return {
|
|
66
|
+
currentVersion,
|
|
67
|
+
latestVersion: entries[0]?.version ?? null,
|
|
68
|
+
entries,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
const requestedVersion = version
|
|
72
|
+
? normalizeChangelogVersion(version)
|
|
73
|
+
: undefined;
|
|
74
|
+
const entry = selectCliChangelogEntry({
|
|
75
|
+
entries,
|
|
76
|
+
currentVersion,
|
|
77
|
+
requestedVersion,
|
|
78
|
+
});
|
|
79
|
+
if (!entry) {
|
|
80
|
+
const availableVersions = entries.map((item) => `v${item.version}`);
|
|
81
|
+
throw new Error(`Unknown changelog version: v${requestedVersion}. Available versions: ${availableVersions.join(", ")}.`);
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
currentVersion,
|
|
85
|
+
latestVersion: entries[0]?.version ?? null,
|
|
86
|
+
requestedVersion: requestedVersion ?? null,
|
|
87
|
+
selectedVersion: entry.version,
|
|
88
|
+
entry,
|
|
89
|
+
};
|
|
90
|
+
}));
|
|
91
|
+
const configCommand = program
|
|
92
|
+
.command("config")
|
|
93
|
+
.description("Manage CLI config");
|
|
94
|
+
configCommand
|
|
95
|
+
.command("show")
|
|
96
|
+
.description("Show current config")
|
|
97
|
+
.action(wrap(async () => {
|
|
98
|
+
const config = await loadConfig();
|
|
99
|
+
return {
|
|
100
|
+
path: getConfigPath(),
|
|
101
|
+
config,
|
|
102
|
+
};
|
|
103
|
+
}));
|
|
104
|
+
configCommand
|
|
105
|
+
.command("clear")
|
|
106
|
+
.description("Clear local config")
|
|
107
|
+
.action(wrap(async () => {
|
|
108
|
+
const config = await clearConfig();
|
|
109
|
+
return {
|
|
110
|
+
path: getConfigPath(),
|
|
111
|
+
config,
|
|
112
|
+
};
|
|
113
|
+
}));
|
|
114
|
+
const configSet = configCommand
|
|
115
|
+
.command("set")
|
|
116
|
+
.description("Set config values");
|
|
117
|
+
configSet
|
|
118
|
+
.command("base-url <value>")
|
|
119
|
+
.description("Set API base URL")
|
|
120
|
+
.action(wrap(async (value) => updateConfig({ baseUrl: normalizeBaseUrl(value) })));
|
|
121
|
+
configSet
|
|
122
|
+
.command("account <accountId> [marketplace]")
|
|
123
|
+
.description("Set default account and optional marketplace")
|
|
124
|
+
.action(wrap(async (accountId, marketplace) => updateConfig({ account: accountId, marketplace })));
|
|
125
|
+
configSet
|
|
126
|
+
.command("range <value>")
|
|
127
|
+
.description("Set default range alias or date interval")
|
|
128
|
+
.action(wrap(async (value) => updateConfig({ range: value })));
|
|
129
|
+
const accountsCommand = program
|
|
130
|
+
.command("accounts")
|
|
131
|
+
.description("Accounts API commands");
|
|
132
|
+
accountsCommand
|
|
133
|
+
.command("get")
|
|
134
|
+
.description("Get account details")
|
|
135
|
+
.action(wrapWithClient(async (client) => client.accounts.get.query()));
|
|
136
|
+
const merchAccountCommand = program
|
|
137
|
+
.command("merch-account")
|
|
138
|
+
.description("Amazon Merch account API commands");
|
|
139
|
+
const merchAccountGetCommand = merchAccountCommand
|
|
140
|
+
.command("get")
|
|
141
|
+
.description("Get Amazon Merch account details")
|
|
142
|
+
.action(wrapWithClient(async (client) => {
|
|
143
|
+
const merchAccount = await client.merchAccount.get.query();
|
|
144
|
+
if (merchAccount) {
|
|
145
|
+
return merchAccount;
|
|
146
|
+
}
|
|
147
|
+
throw createCliError("PRECONDITION_FAILED", "Merch account metadata is not available for this account. Run `mb merch-account sync` first.");
|
|
148
|
+
}));
|
|
149
|
+
merchAccountGetCommand.addHelpText("after", `\n${MERCH_ACCOUNT_GET_HELP}\n`);
|
|
150
|
+
const merchAccountSyncCommand = merchAccountCommand
|
|
151
|
+
.command("sync")
|
|
152
|
+
.description("Start an Amazon Merch account metadata sync")
|
|
153
|
+
.action(wrapWithClient(async (client) => client.merchAccount.sync.mutate()));
|
|
154
|
+
merchAccountSyncCommand.addHelpText("after", `\n${MERCH_ACCOUNT_SYNC_HELP}\n`);
|
|
155
|
+
const productsCommand = program
|
|
156
|
+
.command("products")
|
|
157
|
+
.description("Products API commands");
|
|
158
|
+
productsCommand
|
|
159
|
+
.command("list")
|
|
160
|
+
.description("List products")
|
|
161
|
+
.option("--marketplace <marketplace>")
|
|
162
|
+
.option("--status <status>")
|
|
163
|
+
.option("--limit <limit>", "Maximum items to return", "25")
|
|
164
|
+
.option("--offset <offset>", "Result offset", "0")
|
|
165
|
+
.action(wrapWithClient(async (client, _config, options) => client.products.list.query({
|
|
166
|
+
marketplace: options.marketplace,
|
|
167
|
+
status: options.status,
|
|
168
|
+
limit: options.limit,
|
|
169
|
+
offset: options.offset,
|
|
170
|
+
})));
|
|
171
|
+
productsCommand
|
|
172
|
+
.command("search")
|
|
173
|
+
.description("Search products")
|
|
174
|
+
.option("--query <query>")
|
|
175
|
+
.option("--marketplace <marketplace>")
|
|
176
|
+
.option("--facet <facet>")
|
|
177
|
+
.option("--facet-name <facetName>")
|
|
178
|
+
.option("--limit <limit>", "Maximum items to return", "25")
|
|
179
|
+
.option("--offset <offset>", "Result offset", "0")
|
|
180
|
+
.action(wrapWithClient(async (client, _config, options) => client.products.search.query({
|
|
181
|
+
query: options.query,
|
|
182
|
+
marketplace: options.marketplace,
|
|
183
|
+
facet: options.facet,
|
|
184
|
+
facetName: options.facetName,
|
|
185
|
+
limit: options.limit,
|
|
186
|
+
offset: options.offset,
|
|
187
|
+
})));
|
|
188
|
+
productsCommand
|
|
189
|
+
.command("get <asin>")
|
|
190
|
+
.description("Get product details")
|
|
191
|
+
.option("--marketplace <marketplace>")
|
|
192
|
+
.action(wrapWithClient(async (client, _config, asin, options) => client.products.get.query({
|
|
193
|
+
asin,
|
|
194
|
+
marketplace: options.marketplace,
|
|
195
|
+
})));
|
|
196
|
+
productsCommand
|
|
197
|
+
.command("metadata")
|
|
198
|
+
.description("Get product dataset metadata")
|
|
199
|
+
.option("--marketplace <marketplace>")
|
|
200
|
+
.option("--asin <asin>")
|
|
201
|
+
.action(wrapWithClient(async (client, _config, options) => client.products.metadata.query({
|
|
202
|
+
marketplace: options.marketplace,
|
|
203
|
+
asin: options.asin,
|
|
204
|
+
})));
|
|
205
|
+
const productCatalogCommand = productsCommand
|
|
206
|
+
.command("catalog")
|
|
207
|
+
.description("Product catalog commands");
|
|
208
|
+
productCatalogCommand
|
|
209
|
+
.command("get")
|
|
210
|
+
.description("Get the product catalog")
|
|
211
|
+
.action(wrapWithClient(async (client) => client.products.catalog.get.query()));
|
|
212
|
+
productCatalogCommand
|
|
213
|
+
.command("options")
|
|
214
|
+
.description("Get product catalog option lists")
|
|
215
|
+
.option("--product-type <productType>")
|
|
216
|
+
.action(wrapWithClient(async (client, _config, options) => client.products.catalog.options.query({
|
|
217
|
+
productType: options.productType,
|
|
218
|
+
})));
|
|
219
|
+
productCatalogCommand
|
|
220
|
+
.command("product <productType>")
|
|
221
|
+
.description("Get one catalog product type")
|
|
222
|
+
.action(wrapWithClient(async (client, _config, productType) => client.products.catalog.product.query({
|
|
223
|
+
productType,
|
|
224
|
+
})));
|
|
225
|
+
const productsSyncCommand = productsCommand
|
|
226
|
+
.command("sync")
|
|
227
|
+
.description("Start a products sync")
|
|
228
|
+
.option("--range <range>", "1d|3d|7d|30d|90d", "7d")
|
|
229
|
+
.action(wrapWithClient(async (client, _config, options) => client.products.sync.mutate({
|
|
230
|
+
rangePreset: options.range,
|
|
231
|
+
})));
|
|
232
|
+
productsSyncCommand.addHelpText("after", `\n${DATASET_SYNC_HELP}\n`);
|
|
233
|
+
const designsCommand = program
|
|
234
|
+
.command("designs")
|
|
235
|
+
.description("Designs API commands");
|
|
236
|
+
designsCommand
|
|
237
|
+
.command("list")
|
|
238
|
+
.description("List designs")
|
|
239
|
+
.option("--query <query>")
|
|
240
|
+
.option("--facet <facet>")
|
|
241
|
+
.option("--facet-name <facetName>")
|
|
242
|
+
.option("--limit <limit>", "Maximum items to return", "25")
|
|
243
|
+
.option("--offset <offset>", "Result offset", "0")
|
|
244
|
+
.action(wrapWithClient(async (client, _config, options) => client.designs.list.query({
|
|
245
|
+
query: options.query,
|
|
246
|
+
facet: options.facet,
|
|
247
|
+
facetName: options.facetName,
|
|
248
|
+
limit: options.limit,
|
|
249
|
+
offset: options.offset,
|
|
250
|
+
})));
|
|
251
|
+
designsCommand
|
|
252
|
+
.command("get <designId>")
|
|
253
|
+
.description("Get design details")
|
|
254
|
+
.action(wrapWithClient(async (client, _config, designId) => client.designs.get.query({ designId })));
|
|
255
|
+
const designFacetsCommand = designsCommand
|
|
256
|
+
.command("facets")
|
|
257
|
+
.description("Design facets commands");
|
|
258
|
+
designFacetsCommand
|
|
259
|
+
.command("get <designId>")
|
|
260
|
+
.description("Get design facets")
|
|
261
|
+
.action(wrapWithClient(async (client, _config, designId) => client.designs.facets.get.query({ designId })));
|
|
262
|
+
designFacetsCommand
|
|
263
|
+
.command("update <designId>")
|
|
264
|
+
.description("Replace design facets")
|
|
265
|
+
.requiredOption("--facet <facetValue...>", "Facet value in the form facet:name. Repeat flag for multiple values.")
|
|
266
|
+
.action(wrapWithClient(async (client, _config, designId, options) => client.designs.facets.update.mutate({
|
|
267
|
+
designId,
|
|
268
|
+
facets: options.facet.map(parseFacetValue),
|
|
269
|
+
})));
|
|
270
|
+
designFacetsCommand
|
|
271
|
+
.command("classify")
|
|
272
|
+
.description("Queue facet classification")
|
|
273
|
+
.requiredOption("--design-id <designIds...>")
|
|
274
|
+
.action(wrapWithClient(async (client, _config, options) => client.designs.facets.classify.mutate({
|
|
275
|
+
designIds: options.designId,
|
|
276
|
+
})));
|
|
277
|
+
designFacetsCommand
|
|
278
|
+
.command("status <jobId>")
|
|
279
|
+
.description("Get classify job status")
|
|
280
|
+
.action(wrapWithClient(async (client, _config, jobId) => client.designs.facets.status.query({ jobId })));
|
|
281
|
+
const salesCommand = program
|
|
282
|
+
.command("sales")
|
|
283
|
+
.description("Sales API commands");
|
|
284
|
+
const salesSyncCommand = salesCommand
|
|
285
|
+
.command("sync")
|
|
286
|
+
.description("Start a sales sync")
|
|
287
|
+
.option("--range <range>", "1d|3d|7d|30d|90d", "7d")
|
|
288
|
+
.action(wrapWithClient(async (client, _config, options) => client.sales.sync.mutate({
|
|
289
|
+
rangePreset: options.range,
|
|
290
|
+
})));
|
|
291
|
+
salesSyncCommand.addHelpText("after", `\n${DATASET_SYNC_HELP}\n`);
|
|
292
|
+
salesCommand
|
|
293
|
+
.command("summary")
|
|
294
|
+
.description("Get sales summary")
|
|
295
|
+
.option("--range <range>")
|
|
296
|
+
.option("--marketplace <marketplace>")
|
|
297
|
+
.option("--asin <asin>")
|
|
298
|
+
.option("--product-type <productType>")
|
|
299
|
+
.option("--fit <fit>")
|
|
300
|
+
.option("--color <color>")
|
|
301
|
+
.option("--facet <facet>")
|
|
302
|
+
.option("--facet-name <facetName>")
|
|
303
|
+
.action(wrapWithClient(async (client, config, options) => client.sales.summary.query({
|
|
304
|
+
range: resolveRange(config, options.range),
|
|
305
|
+
marketplace: options.marketplace,
|
|
306
|
+
asin: options.asin,
|
|
307
|
+
productType: options.productType,
|
|
308
|
+
fit: options.fit,
|
|
309
|
+
color: options.color,
|
|
310
|
+
facet: options.facet,
|
|
311
|
+
facetName: options.facetName,
|
|
312
|
+
})));
|
|
313
|
+
salesCommand
|
|
314
|
+
.command("records")
|
|
315
|
+
.description("Get sales records")
|
|
316
|
+
.option("--range <range>")
|
|
317
|
+
.option("--marketplace <marketplace>")
|
|
318
|
+
.option("--asin <asin>")
|
|
319
|
+
.option("--product-type <productType>")
|
|
320
|
+
.option("--fit <fit>")
|
|
321
|
+
.option("--color <color>")
|
|
322
|
+
.option("--facet <facet>")
|
|
323
|
+
.option("--facet-name <facetName>")
|
|
324
|
+
.option("--limit <limit>", "Maximum items to return", "25")
|
|
325
|
+
.option("--offset <offset>", "Result offset", "0")
|
|
326
|
+
.action(wrapWithClient(async (client, config, options) => client.sales.records.query({
|
|
327
|
+
range: resolveRange(config, options.range),
|
|
328
|
+
marketplace: options.marketplace,
|
|
329
|
+
asin: options.asin,
|
|
330
|
+
productType: options.productType,
|
|
331
|
+
fit: options.fit,
|
|
332
|
+
color: options.color,
|
|
333
|
+
facet: options.facet,
|
|
334
|
+
facetName: options.facetName,
|
|
335
|
+
limit: options.limit,
|
|
336
|
+
offset: options.offset,
|
|
337
|
+
})));
|
|
338
|
+
salesCommand
|
|
339
|
+
.command("series")
|
|
340
|
+
.description("Get sales series")
|
|
341
|
+
.option("--range <range>")
|
|
342
|
+
.option("--marketplace <marketplace>")
|
|
343
|
+
.option("--asin <asin>")
|
|
344
|
+
.option("--product-type <productType>")
|
|
345
|
+
.option("--facet <facet>")
|
|
346
|
+
.option("--facet-name <facetName>")
|
|
347
|
+
.option("--bucket <bucket>", "day|week|month", "day")
|
|
348
|
+
.action(wrapWithClient(async (client, config, options) => client.sales.series.query({
|
|
349
|
+
range: resolveRange(config, options.range),
|
|
350
|
+
marketplace: options.marketplace,
|
|
351
|
+
asin: options.asin,
|
|
352
|
+
productType: options.productType,
|
|
353
|
+
facet: options.facet,
|
|
354
|
+
facetName: options.facetName,
|
|
355
|
+
bucket: options.bucket,
|
|
356
|
+
})));
|
|
357
|
+
salesCommand
|
|
358
|
+
.command("breakdown")
|
|
359
|
+
.description("Get sales breakdown by dimension")
|
|
360
|
+
.requiredOption("--group-by <groupBy>")
|
|
361
|
+
.option("--range <range>")
|
|
362
|
+
.option("--marketplace <marketplace>")
|
|
363
|
+
.option("--asin <asin>")
|
|
364
|
+
.option("--product-type <productType>")
|
|
365
|
+
.option("--fit <fit>")
|
|
366
|
+
.option("--color <color>")
|
|
367
|
+
.option("--facet <facet>")
|
|
368
|
+
.option("--facet-name <facetName>")
|
|
369
|
+
.option("--sort <sort>")
|
|
370
|
+
.option("--direction <direction>", "asc|desc", "desc")
|
|
371
|
+
.option("--limit <limit>", "Maximum items to return", "25")
|
|
372
|
+
.option("--offset <offset>", "Result offset", "0")
|
|
373
|
+
.action(wrapWithClient(async (client, config, options) => client.sales.breakdown.query({
|
|
374
|
+
groupBy: options.groupBy,
|
|
375
|
+
range: resolveRange(config, options.range),
|
|
376
|
+
marketplace: options.marketplace,
|
|
377
|
+
asin: options.asin,
|
|
378
|
+
productType: options.productType,
|
|
379
|
+
fit: options.fit,
|
|
380
|
+
color: options.color,
|
|
381
|
+
facet: options.facet,
|
|
382
|
+
facetName: options.facetName,
|
|
383
|
+
sort: options.sort,
|
|
384
|
+
direction: options.direction,
|
|
385
|
+
limit: options.limit,
|
|
386
|
+
offset: options.offset,
|
|
387
|
+
})));
|
|
388
|
+
const dashboardCommand = program
|
|
389
|
+
.command("dashboard")
|
|
390
|
+
.description("Dashboard API commands");
|
|
391
|
+
dashboardCommand
|
|
392
|
+
.command("kpis")
|
|
393
|
+
.description("Get dashboard KPI stats")
|
|
394
|
+
.option("--range <range>")
|
|
395
|
+
.option("--marketplace <marketplace>")
|
|
396
|
+
.option("--asin <asin>")
|
|
397
|
+
.option("--facet <facet>")
|
|
398
|
+
.option("--facet-name <facetName>")
|
|
399
|
+
.action(wrapWithClient(async (client, config, options) => client.dashboard.kpis.query({
|
|
400
|
+
range: resolveRange(config, options.range),
|
|
401
|
+
marketplace: options.marketplace,
|
|
402
|
+
asin: options.asin,
|
|
403
|
+
facet: options.facet,
|
|
404
|
+
facetName: options.facetName,
|
|
405
|
+
})));
|
|
406
|
+
dashboardCommand
|
|
407
|
+
.command("sales-table")
|
|
408
|
+
.description("Get dashboard sales table")
|
|
409
|
+
.option("--range <range>")
|
|
410
|
+
.option("--marketplace <marketplace>")
|
|
411
|
+
.option("--asin <asin>")
|
|
412
|
+
.option("--facet <facet>")
|
|
413
|
+
.option("--facet-name <facetName>")
|
|
414
|
+
.option("--limit <limit>", "Maximum items to return", "25")
|
|
415
|
+
.option("--offset <offset>", "Result offset", "0")
|
|
416
|
+
.action(wrapWithClient(async (client, config, options) => client.dashboard.salesTable.query({
|
|
417
|
+
range: resolveRange(config, options.range),
|
|
418
|
+
marketplace: options.marketplace,
|
|
419
|
+
asin: options.asin,
|
|
420
|
+
facet: options.facet,
|
|
421
|
+
facetName: options.facetName,
|
|
422
|
+
limit: options.limit,
|
|
423
|
+
offset: options.offset,
|
|
424
|
+
})));
|
|
425
|
+
dashboardCommand
|
|
426
|
+
.command("product-chart")
|
|
427
|
+
.description("Get dashboard product chart")
|
|
428
|
+
.option("--range <range>")
|
|
429
|
+
.option("--marketplace <marketplace>")
|
|
430
|
+
.option("--asin <asin>")
|
|
431
|
+
.option("--facet <facet>")
|
|
432
|
+
.option("--facet-name <facetName>")
|
|
433
|
+
.action(wrapWithClient(async (client, config, options) => client.dashboard.productChart.query({
|
|
434
|
+
range: resolveRange(config, options.range),
|
|
435
|
+
marketplace: options.marketplace,
|
|
436
|
+
asin: options.asin,
|
|
437
|
+
facet: options.facet,
|
|
438
|
+
facetName: options.facetName,
|
|
439
|
+
})));
|
|
440
|
+
return program;
|
|
441
|
+
};
|
|
442
|
+
export const runCli = async (argv = process.argv) => {
|
|
443
|
+
const program = createProgram();
|
|
444
|
+
await program.parseAsync(argv);
|
|
445
|
+
};
|
|
446
|
+
function wrap(handler) {
|
|
447
|
+
return async (...args) => {
|
|
448
|
+
try {
|
|
449
|
+
const data = await handler(...args);
|
|
450
|
+
printSuccess(data);
|
|
451
|
+
}
|
|
452
|
+
catch (error) {
|
|
453
|
+
printError(error);
|
|
454
|
+
process.exitCode = 1;
|
|
455
|
+
}
|
|
456
|
+
};
|
|
457
|
+
}
|
|
458
|
+
function wrapWithClient(handler) {
|
|
459
|
+
return wrap(async (...args) => {
|
|
460
|
+
const config = await loadConfig();
|
|
461
|
+
const apiKey = resolveApiKey();
|
|
462
|
+
if (!apiKey) {
|
|
463
|
+
throw new Error(`Missing API key. Set ${API_KEY_ENV_VAR} in your environment.`);
|
|
464
|
+
}
|
|
465
|
+
const headers = {};
|
|
466
|
+
if (config.account) {
|
|
467
|
+
headers["x-merchbase-account"] = config.account;
|
|
468
|
+
}
|
|
469
|
+
if (config.marketplace) {
|
|
470
|
+
headers["x-merchbase-marketplace"] = config.marketplace;
|
|
471
|
+
}
|
|
472
|
+
const client = createMerchbaseClient({
|
|
473
|
+
baseUrl: config.baseUrl,
|
|
474
|
+
apiKey,
|
|
475
|
+
headers,
|
|
476
|
+
});
|
|
477
|
+
return handler(client, config, ...args);
|
|
478
|
+
});
|
|
479
|
+
}
|
|
480
|
+
function parseFacetValue(value) {
|
|
481
|
+
const separator = value.indexOf(":");
|
|
482
|
+
if (separator < 1 || separator === value.length - 1) {
|
|
483
|
+
throw new Error(`Invalid facet value "${value}". Expected <facet>:<name>.`);
|
|
484
|
+
}
|
|
485
|
+
return {
|
|
486
|
+
facet: value.slice(0, separator),
|
|
487
|
+
name: value.slice(separator + 1),
|
|
488
|
+
};
|
|
489
|
+
}
|
|
490
|
+
function resolveRange(config, range) {
|
|
491
|
+
return range ?? config.range;
|
|
492
|
+
}
|
|
493
|
+
function resolveApiKey() {
|
|
494
|
+
const apiKey = process.env[API_KEY_ENV_VAR]?.trim();
|
|
495
|
+
if (!apiKey || apiKey === "null" || apiKey === "undefined") {
|
|
496
|
+
return undefined;
|
|
497
|
+
}
|
|
498
|
+
return apiKey;
|
|
499
|
+
}
|
|
500
|
+
const createCliError = (code, message) => {
|
|
501
|
+
const error = new Error(message);
|
|
502
|
+
error.code = code;
|
|
503
|
+
return error;
|
|
504
|
+
};
|
|
505
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface MerchbaseCliConfig {
|
|
2
|
+
account?: string;
|
|
3
|
+
baseUrl: string;
|
|
4
|
+
marketplace?: string;
|
|
5
|
+
range?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare const getConfigPath: () => string;
|
|
8
|
+
export declare const loadConfig: () => Promise<MerchbaseCliConfig>;
|
|
9
|
+
export declare const saveConfig: (config: MerchbaseCliConfig) => Promise<void>;
|
|
10
|
+
export declare const updateConfig: (patch: Partial<MerchbaseCliConfig>) => Promise<{
|
|
11
|
+
account?: string;
|
|
12
|
+
baseUrl: string;
|
|
13
|
+
marketplace?: string;
|
|
14
|
+
range?: string;
|
|
15
|
+
}>;
|
|
16
|
+
export declare const clearConfig: () => Promise<{
|
|
17
|
+
account?: string;
|
|
18
|
+
baseUrl: string;
|
|
19
|
+
marketplace?: string;
|
|
20
|
+
range?: string;
|
|
21
|
+
}>;
|
|
22
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,kBAAkB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD,eAAO,MAAM,aAAa,cAAoB,CAAC;AAE/C,eAAO,MAAM,UAAU,QAAa,OAAO,CAAC,kBAAkB,CAgB7D,CAAC;AAEF,eAAO,MAAM,UAAU,GAAU,QAAQ,kBAAkB,kBAO1D,CAAC;AAEF,eAAO,MAAM,YAAY,GAAU,OAAO,OAAO,CAAC,kBAAkB,CAAC;cAvCvD,MAAM;aACP,MAAM;kBACD,MAAM;YACZ,MAAM;EA6CjB,CAAC;AAEF,eAAO,MAAM,WAAW;cAlDV,MAAM;aACP,MAAM;kBACD,MAAM;YACZ,MAAM;EAoDjB,CAAC"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { mkdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { DEFAULT_API_BASE_URL } from "@merchbase/http-client";
|
|
5
|
+
const CONFIG_DIR = join(homedir(), ".merchbase");
|
|
6
|
+
const CONFIG_PATH = join(CONFIG_DIR, "config.json");
|
|
7
|
+
const DEFAULT_CONFIG = {
|
|
8
|
+
baseUrl: process.env.MERCHBASE_API_BASE_URL ?? DEFAULT_API_BASE_URL,
|
|
9
|
+
};
|
|
10
|
+
export const getConfigPath = () => CONFIG_PATH;
|
|
11
|
+
export const loadConfig = async () => {
|
|
12
|
+
try {
|
|
13
|
+
const raw = await readFile(CONFIG_PATH, "utf-8");
|
|
14
|
+
const parsed = sanitizeCliConfig(JSON.parse(raw));
|
|
15
|
+
return {
|
|
16
|
+
...DEFAULT_CONFIG,
|
|
17
|
+
...parsed,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
if (isNotFound(error)) {
|
|
22
|
+
return { ...DEFAULT_CONFIG };
|
|
23
|
+
}
|
|
24
|
+
throw error;
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
export const saveConfig = async (config) => {
|
|
28
|
+
await mkdir(CONFIG_DIR, { recursive: true });
|
|
29
|
+
await writeFile(CONFIG_PATH, `${JSON.stringify(config, null, 2)}\n`, "utf-8");
|
|
30
|
+
};
|
|
31
|
+
export const updateConfig = async (patch) => {
|
|
32
|
+
const current = await loadConfig();
|
|
33
|
+
const next = {
|
|
34
|
+
...current,
|
|
35
|
+
...patch,
|
|
36
|
+
};
|
|
37
|
+
await saveConfig(next);
|
|
38
|
+
return next;
|
|
39
|
+
};
|
|
40
|
+
export const clearConfig = async () => {
|
|
41
|
+
await rm(CONFIG_PATH, { force: true });
|
|
42
|
+
return {
|
|
43
|
+
...DEFAULT_CONFIG,
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
const sanitizeCliConfig = (value) => {
|
|
47
|
+
if (!value || typeof value !== "object") {
|
|
48
|
+
return {};
|
|
49
|
+
}
|
|
50
|
+
const candidate = value;
|
|
51
|
+
return {
|
|
52
|
+
account: typeof candidate.account === "string"
|
|
53
|
+
? candidate.account
|
|
54
|
+
: undefined,
|
|
55
|
+
baseUrl: typeof candidate.baseUrl === "string"
|
|
56
|
+
? candidate.baseUrl
|
|
57
|
+
: undefined,
|
|
58
|
+
marketplace: typeof candidate.marketplace === "string"
|
|
59
|
+
? candidate.marketplace
|
|
60
|
+
: undefined,
|
|
61
|
+
range: typeof candidate.range === "string" ? candidate.range : undefined,
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
const isNotFound = (error) => {
|
|
65
|
+
return (typeof error === "object" &&
|
|
66
|
+
error !== null &&
|
|
67
|
+
"code" in error &&
|
|
68
|
+
error.code === "ENOENT");
|
|
69
|
+
};
|
|
70
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/help.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export type HelpTopicKey = "global" | "config" | "accounts" | "merch-account" | "products" | "sales" | "dashboard" | "changelog";
|
|
2
|
+
export declare const resolveHelpTopicKey: (segments?: string[]) => HelpTopicKey;
|
|
3
|
+
export declare const renderHelp: (topicKey: HelpTopicKey) => string;
|
|
4
|
+
//# sourceMappingURL=help.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,YAAY,GAClB,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,eAAe,GACf,UAAU,GACV,OAAO,GACP,WAAW,GACX,WAAW,CAAC;AA0KlB,eAAO,MAAM,mBAAmB,GAAI,WAAU,MAAM,EAAO,KAAG,YAW7D,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,UAAU,YAAY,WAuBhD,CAAC"}
|
package/dist/help.js
ADDED
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
const TOPICS = {
|
|
2
|
+
global: {
|
|
3
|
+
key: "global",
|
|
4
|
+
usage: "mb [options] [command]",
|
|
5
|
+
summary: "MerchBase CLI",
|
|
6
|
+
commands: [
|
|
7
|
+
{
|
|
8
|
+
left: "config",
|
|
9
|
+
right: "Manage base URL, default account, and default range",
|
|
10
|
+
},
|
|
11
|
+
{ left: "accounts", right: "Inspect the current account context" },
|
|
12
|
+
{
|
|
13
|
+
left: "merch-account",
|
|
14
|
+
right: "Fetch or sync merch account metadata",
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
left: "products",
|
|
18
|
+
right: "Read product data, metadata, and catalog info",
|
|
19
|
+
},
|
|
20
|
+
{ left: "designs", right: "Read designs and manage design facets" },
|
|
21
|
+
{ left: "sales", right: "Read sales data and trigger sales syncs" },
|
|
22
|
+
{
|
|
23
|
+
left: "dashboard",
|
|
24
|
+
right: "Read dashboard-shaped summary endpoints",
|
|
25
|
+
},
|
|
26
|
+
{ left: "changelog", right: "Show packaged CLI release notes" },
|
|
27
|
+
],
|
|
28
|
+
notes: [
|
|
29
|
+
"Set `MERCHBASE_API_KEY` in your environment before using API commands.",
|
|
30
|
+
"Set the default account with `mb config set account <accountId> [marketplace]`.",
|
|
31
|
+
"`mb merch-account sync` requires an active ingestion client connection.",
|
|
32
|
+
"Run `mb merch-account sync` before `mb products sync` or `mb sales sync`.",
|
|
33
|
+
],
|
|
34
|
+
},
|
|
35
|
+
config: {
|
|
36
|
+
key: "config",
|
|
37
|
+
usage: "mb config [command]",
|
|
38
|
+
summary: "Manage local CLI configuration",
|
|
39
|
+
commands: [
|
|
40
|
+
{ left: "show", right: "Print config path and current config" },
|
|
41
|
+
{ left: "clear", right: "Clear local config" },
|
|
42
|
+
{ left: "set base-url <value>", right: "Set API base URL" },
|
|
43
|
+
{
|
|
44
|
+
left: "set account <accountId> [marketplace]",
|
|
45
|
+
right: "Set default account and optional marketplace",
|
|
46
|
+
},
|
|
47
|
+
{ left: "set range <value>", right: "Set default range" },
|
|
48
|
+
],
|
|
49
|
+
notes: [
|
|
50
|
+
"API keys are not stored in config. Use `MERCHBASE_API_KEY`.",
|
|
51
|
+
"`MERCHBASE_API_BASE_URL` is used as the default base URL when set.",
|
|
52
|
+
],
|
|
53
|
+
},
|
|
54
|
+
accounts: {
|
|
55
|
+
key: "accounts",
|
|
56
|
+
usage: "mb accounts [command]",
|
|
57
|
+
summary: "Inspect the current account context",
|
|
58
|
+
commands: [{ left: "get", right: "Get account details" }],
|
|
59
|
+
},
|
|
60
|
+
"merch-account": {
|
|
61
|
+
key: "merch-account",
|
|
62
|
+
usage: "mb merch-account [command]",
|
|
63
|
+
summary: "Fetch or sync merch account metadata",
|
|
64
|
+
commands: [
|
|
65
|
+
{ left: "get", right: "Read previously synced merch account data" },
|
|
66
|
+
{
|
|
67
|
+
left: "sync",
|
|
68
|
+
right: "Trigger a merch account metadata sync",
|
|
69
|
+
},
|
|
70
|
+
],
|
|
71
|
+
notes: [
|
|
72
|
+
"`get` reads stored metadata and will direct you to `mb merch-account sync` when missing.",
|
|
73
|
+
"`sync` requires an active ingestion client connection.",
|
|
74
|
+
],
|
|
75
|
+
},
|
|
76
|
+
products: {
|
|
77
|
+
key: "products",
|
|
78
|
+
usage: "mb products [command]",
|
|
79
|
+
summary: "Read product data and trigger product syncs",
|
|
80
|
+
commands: [
|
|
81
|
+
{ left: "list", right: "List products" },
|
|
82
|
+
{ left: "search", right: "Search products" },
|
|
83
|
+
{ left: "get <asin>", right: "Get one product" },
|
|
84
|
+
{
|
|
85
|
+
left: "metadata",
|
|
86
|
+
right: "Get product dataset metadata for the account",
|
|
87
|
+
},
|
|
88
|
+
{ left: "catalog get", right: "Get the product catalog" },
|
|
89
|
+
{
|
|
90
|
+
left: "catalog options",
|
|
91
|
+
right: "Get product type, marketplace, fit, and color options",
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
left: "catalog product <productType>",
|
|
95
|
+
right: "Get one product catalog definition",
|
|
96
|
+
},
|
|
97
|
+
{ left: "sync", right: "Trigger a products sync" },
|
|
98
|
+
],
|
|
99
|
+
notes: [
|
|
100
|
+
"`sync` requires an active ingestion client connection and merch account metadata.",
|
|
101
|
+
"Run `mb merch-account sync` first if dataset sync setup has not been completed yet.",
|
|
102
|
+
],
|
|
103
|
+
},
|
|
104
|
+
sales: {
|
|
105
|
+
key: "sales",
|
|
106
|
+
usage: "mb sales [command]",
|
|
107
|
+
summary: "Read sales data and trigger sales syncs",
|
|
108
|
+
commands: [
|
|
109
|
+
{ left: "summary", right: "Get sales summary" },
|
|
110
|
+
{ left: "records", right: "Get sales records" },
|
|
111
|
+
{ left: "series", right: "Get sales series" },
|
|
112
|
+
{ left: "breakdown", right: "Get grouped sales breakdowns" },
|
|
113
|
+
{ left: "sync", right: "Trigger a sales sync" },
|
|
114
|
+
],
|
|
115
|
+
notes: [
|
|
116
|
+
"`sync` requires an active ingestion client connection and merch account metadata.",
|
|
117
|
+
"Use `--range` to override the saved default range on read commands.",
|
|
118
|
+
],
|
|
119
|
+
},
|
|
120
|
+
dashboard: {
|
|
121
|
+
key: "dashboard",
|
|
122
|
+
usage: "mb dashboard [command]",
|
|
123
|
+
summary: "Read dashboard-shaped summary endpoints",
|
|
124
|
+
commands: [
|
|
125
|
+
{ left: "kpis", right: "Get dashboard KPI stats" },
|
|
126
|
+
{ left: "sales-table", right: "Get dashboard sales table" },
|
|
127
|
+
{ left: "product-chart", right: "Get dashboard product chart" },
|
|
128
|
+
],
|
|
129
|
+
notes: [
|
|
130
|
+
"These commands expose existing public dashboard-shaped reads and may be revisited later.",
|
|
131
|
+
],
|
|
132
|
+
},
|
|
133
|
+
changelog: {
|
|
134
|
+
key: "changelog",
|
|
135
|
+
usage: "mb changelog [version] [--all]",
|
|
136
|
+
summary: "Show packaged CLI release notes",
|
|
137
|
+
options: [
|
|
138
|
+
{ left: "--all", right: "Show every packaged changelog entry" },
|
|
139
|
+
],
|
|
140
|
+
notes: [
|
|
141
|
+
"The version arg accepts `1.2.3` or `v1.2.3`.",
|
|
142
|
+
"Default output returns the current CLI version entry when available.",
|
|
143
|
+
],
|
|
144
|
+
},
|
|
145
|
+
};
|
|
146
|
+
const TOPIC_ALIASES = {
|
|
147
|
+
account: "accounts",
|
|
148
|
+
accounts: "accounts",
|
|
149
|
+
changelog: "changelog",
|
|
150
|
+
config: "config",
|
|
151
|
+
dashboard: "dashboard",
|
|
152
|
+
global: "global",
|
|
153
|
+
merch: "merch-account",
|
|
154
|
+
"merch-account": "merch-account",
|
|
155
|
+
products: "products",
|
|
156
|
+
sales: "sales",
|
|
157
|
+
};
|
|
158
|
+
export const resolveHelpTopicKey = (segments = []) => {
|
|
159
|
+
const normalized = segments
|
|
160
|
+
.map((segment) => segment.trim().toLowerCase())
|
|
161
|
+
.filter(Boolean);
|
|
162
|
+
const joined = normalized.join(" ");
|
|
163
|
+
if (!joined) {
|
|
164
|
+
return "global";
|
|
165
|
+
}
|
|
166
|
+
return TOPIC_ALIASES[joined] ?? "global";
|
|
167
|
+
};
|
|
168
|
+
export const renderHelp = (topicKey) => {
|
|
169
|
+
const topic = TOPICS[topicKey];
|
|
170
|
+
const lines = [`Usage: ${topic.usage}`, "", topic.summary, ""];
|
|
171
|
+
if (topic.options?.length) {
|
|
172
|
+
lines.push("Options:");
|
|
173
|
+
lines.push(...topic.options.map(formatRow));
|
|
174
|
+
lines.push("");
|
|
175
|
+
}
|
|
176
|
+
if (topic.commands?.length) {
|
|
177
|
+
lines.push("Commands:");
|
|
178
|
+
lines.push(...topic.commands.map(formatRow));
|
|
179
|
+
lines.push("");
|
|
180
|
+
}
|
|
181
|
+
if (topic.notes?.length) {
|
|
182
|
+
lines.push("Notes:");
|
|
183
|
+
lines.push(...topic.notes.map((note) => ` ${note}`));
|
|
184
|
+
lines.push("");
|
|
185
|
+
}
|
|
186
|
+
return `${lines.join("\n").trimEnd()}\n`;
|
|
187
|
+
};
|
|
188
|
+
const formatRow = (row) => {
|
|
189
|
+
return ` ${row.left.padEnd(32)}${row.right}`;
|
|
190
|
+
};
|
|
191
|
+
//# sourceMappingURL=help.js.map
|
package/dist/help.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.js","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
package/dist/output.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAqBA,eAAO,MAAM,YAAY,GAAI,MAAM,OAAO,SAEzC,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,OAAO,OAAO,SAOxC,CAAC"}
|
package/dist/output.js
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
const SETUP_HINTS = [
|
|
2
|
+
{
|
|
3
|
+
code: "PRECONDITION_FAILED",
|
|
4
|
+
message: "No active ingestion client websocket is connected for this account.",
|
|
5
|
+
hint: "Connect an ingestion client, then rerun the setup or sync command.",
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
code: "PRECONDITION_FAILED",
|
|
9
|
+
message: "Sync merch account metadata before syncing products or sales.",
|
|
10
|
+
hint: "Run `mb merch-account sync` first, then retry the products or sales sync.",
|
|
11
|
+
},
|
|
12
|
+
];
|
|
13
|
+
export const printSuccess = (data) => {
|
|
14
|
+
process.stdout.write(`${JSON.stringify({ ok: true, data }, null, 2)}\n`);
|
|
15
|
+
};
|
|
16
|
+
export const printError = (error) => {
|
|
17
|
+
const envelope = {
|
|
18
|
+
ok: false,
|
|
19
|
+
error: normalizeError(error),
|
|
20
|
+
};
|
|
21
|
+
process.stderr.write(`${JSON.stringify(envelope, null, 2)}\n`);
|
|
22
|
+
};
|
|
23
|
+
const normalizeError = (error) => {
|
|
24
|
+
if (isObject(error)) {
|
|
25
|
+
const message = getString(error, "message") ??
|
|
26
|
+
getString(error, "shape.message") ??
|
|
27
|
+
"Unexpected error";
|
|
28
|
+
const code = getString(error, "data.code") ??
|
|
29
|
+
getString(error, "shape.data.code") ??
|
|
30
|
+
getString(error, "code") ??
|
|
31
|
+
"INTERNAL_ERROR";
|
|
32
|
+
const details = getValue(error, "shape") ?? getValue(error, "data") ?? undefined;
|
|
33
|
+
return {
|
|
34
|
+
code,
|
|
35
|
+
details,
|
|
36
|
+
message: applySetupHint({ code, message }),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
if (typeof error === "string") {
|
|
40
|
+
return {
|
|
41
|
+
code: "INTERNAL_ERROR",
|
|
42
|
+
message: error,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
code: "INTERNAL_ERROR",
|
|
47
|
+
message: "Unexpected error",
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
const applySetupHint = (input) => {
|
|
51
|
+
const match = SETUP_HINTS.find((candidate) => candidate.code === input.code && candidate.message === input.message);
|
|
52
|
+
if (!match) {
|
|
53
|
+
return input.message;
|
|
54
|
+
}
|
|
55
|
+
return `${input.message} ${match.hint}`;
|
|
56
|
+
};
|
|
57
|
+
const isObject = (value) => typeof value === "object" && value !== null;
|
|
58
|
+
const getValue = (source, path) => {
|
|
59
|
+
return path.split(".").reduce((value, key) => {
|
|
60
|
+
if (!isObject(value)) {
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
return value[key];
|
|
64
|
+
}, source);
|
|
65
|
+
};
|
|
66
|
+
const getString = (source, path) => {
|
|
67
|
+
const value = getValue(source, path);
|
|
68
|
+
return typeof value === "string" ? value : undefined;
|
|
69
|
+
};
|
|
70
|
+
//# sourceMappingURL=output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@merchbase/cli",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "MerchBase CLI for MerchBase Core APIs",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"mb": "./dist/index.js"
|
|
8
|
+
},
|
|
9
|
+
"main": "./dist/index.js",
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"repository": {
|
|
12
|
+
"type": "git",
|
|
13
|
+
"url": "git+https://github.com/merchbaseco/merchbase-core.git"
|
|
14
|
+
},
|
|
15
|
+
"homepage": "https://github.com/merchbaseco/merchbase-core/tree/main/packages/merchbase-cli",
|
|
16
|
+
"bugs": {
|
|
17
|
+
"url": "https://github.com/merchbaseco/merchbase-core/issues"
|
|
18
|
+
},
|
|
19
|
+
"files": [
|
|
20
|
+
"dist",
|
|
21
|
+
"CHANGELOG.md",
|
|
22
|
+
"README.md"
|
|
23
|
+
],
|
|
24
|
+
"publishConfig": {
|
|
25
|
+
"access": "public"
|
|
26
|
+
},
|
|
27
|
+
"scripts": {
|
|
28
|
+
"build": "rm -rf dist && tsc -p tsconfig.json",
|
|
29
|
+
"dev": "tsx src/index.ts",
|
|
30
|
+
"prepack": "bun run --cwd ../.. http-client:build && bun run build",
|
|
31
|
+
"start": "node dist/index.js",
|
|
32
|
+
"test": "vitest run --config vitest.config.ts"
|
|
33
|
+
},
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"@merchbase/http-client": "1.0.0",
|
|
36
|
+
"commander": "^12.1.0"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"@types/node": "^24.3.0",
|
|
40
|
+
"tsx": "^4.20.4"
|
|
41
|
+
},
|
|
42
|
+
"packageManager": "bun@1.1.27"
|
|
43
|
+
}
|