@lobehub/market-cli 0.0.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.
package/dist/cli.js ADDED
@@ -0,0 +1,223 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/cli.ts
4
+ import { createRequire } from "module";
5
+ import { Command } from "commander";
6
+
7
+ // src/commands/auth.ts
8
+ import { MarketSDK } from "@lobehub/market-sdk";
9
+
10
+ // src/utils/config.ts
11
+ import { existsSync, readFileSync } from "fs";
12
+ import { homedir } from "os";
13
+ import { join } from "path";
14
+ function resolveConfig() {
15
+ const envClientId = process.env.MARKET_CLIENT_ID;
16
+ const envClientSecret = process.env.MARKET_CLIENT_SECRET;
17
+ const envBaseUrl = process.env.MARKET_BASE_URL;
18
+ let fileCredentials = null;
19
+ try {
20
+ const filePath = join(homedir(), ".lobehub-market", "credentials.json");
21
+ if (existsSync(filePath)) {
22
+ const content = readFileSync(filePath, "utf-8");
23
+ fileCredentials = JSON.parse(content);
24
+ }
25
+ } catch {
26
+ }
27
+ const clientId = envClientId || fileCredentials?.clientId;
28
+ const clientSecret = envClientSecret || fileCredentials?.clientSecret;
29
+ const baseUrl = envBaseUrl || fileCredentials?.baseUrl || "https://market.lobehub.com";
30
+ let source = "none";
31
+ if (clientId && clientSecret) {
32
+ const idFromEnv = !!envClientId;
33
+ const secretFromEnv = !!envClientSecret;
34
+ if (idFromEnv && secretFromEnv) {
35
+ source = "env";
36
+ } else if (!idFromEnv && !secretFromEnv) {
37
+ source = "file";
38
+ } else {
39
+ source = "mixed";
40
+ }
41
+ }
42
+ return { baseUrl, clientId, clientSecret, source };
43
+ }
44
+
45
+ // src/utils/credentials.ts
46
+ import { existsSync as existsSync2 } from "fs";
47
+ import { mkdir, readFile, rm, writeFile } from "fs/promises";
48
+ import { homedir as homedir2 } from "os";
49
+ import { join as join2 } from "path";
50
+ var CREDENTIALS_DIR = join2(homedir2(), ".lobehub-market");
51
+ var CREDENTIALS_FILE = join2(CREDENTIALS_DIR, "credentials.json");
52
+ async function saveCredentials(credentials) {
53
+ if (!existsSync2(CREDENTIALS_DIR)) {
54
+ await mkdir(CREDENTIALS_DIR, { mode: 448, recursive: true });
55
+ }
56
+ const content = JSON.stringify(credentials, null, 2);
57
+ await writeFile(CREDENTIALS_FILE, content, { encoding: "utf-8", mode: 384 });
58
+ }
59
+ async function deleteCredentials() {
60
+ if (!existsSync2(CREDENTIALS_FILE)) {
61
+ return false;
62
+ }
63
+ await rm(CREDENTIALS_FILE);
64
+ return true;
65
+ }
66
+ function getCredentialsPath() {
67
+ return CREDENTIALS_FILE;
68
+ }
69
+
70
+ // src/utils/output.ts
71
+ function formatOutput(format, data) {
72
+ if (format === "json") {
73
+ console.log(JSON.stringify(data, null, 2));
74
+ return;
75
+ }
76
+ for (const [key, value] of Object.entries(data)) {
77
+ const label = key.replaceAll(/([A-Z])/g, " $1").replace(/^./, (s) => s.toUpperCase()).trim();
78
+ console.log(` ${label}: ${value}`);
79
+ }
80
+ }
81
+
82
+ // src/commands/auth.ts
83
+ function registerAuthCommand(program2) {
84
+ const auth = program2.command("auth").description("Manage authentication credentials and tokens");
85
+ auth.command("status").description("Show credential and token status").option("--output <format>", "Output format (text|json)", "text").action(async (options) => {
86
+ try {
87
+ const config = resolveConfig();
88
+ if (!config.clientId || !config.clientSecret) {
89
+ console.error(
90
+ "No credentials found. Run `lobehub-market register` first or set MARKET_CLIENT_ID and MARKET_CLIENT_SECRET."
91
+ );
92
+ process.exit(1);
93
+ }
94
+ const sdk = new MarketSDK({
95
+ baseURL: config.baseUrl,
96
+ clientId: config.clientId,
97
+ clientSecret: config.clientSecret
98
+ });
99
+ const tokenInfo = await sdk.fetchM2MToken();
100
+ formatOutput(options.output, {
101
+ baseUrl: config.baseUrl,
102
+ clientId: config.clientId,
103
+ expiresIn: `${tokenInfo.expiresIn}s`,
104
+ source: config.source,
105
+ status: "authenticated",
106
+ tokenPreview: `${tokenInfo.accessToken.slice(0, 12)}...`
107
+ });
108
+ } catch (error) {
109
+ console.error(`Auth status check failed: ${error.message}`);
110
+ process.exit(1);
111
+ }
112
+ });
113
+ auth.command("refresh").description("Force refresh the M2M access token").option("--output <format>", "Output format (text|json)", "text").action(async (options) => {
114
+ try {
115
+ const config = resolveConfig();
116
+ if (!config.clientId || !config.clientSecret) {
117
+ console.error(
118
+ "No credentials found. Run `lobehub-market register` first or set MARKET_CLIENT_ID and MARKET_CLIENT_SECRET."
119
+ );
120
+ process.exit(1);
121
+ }
122
+ const sdk = new MarketSDK({
123
+ baseURL: config.baseUrl,
124
+ clientId: config.clientId,
125
+ clientSecret: config.clientSecret
126
+ });
127
+ const tokenInfo = await sdk.fetchM2MToken();
128
+ formatOutput(options.output, {
129
+ accessToken: tokenInfo.accessToken,
130
+ expiresIn: tokenInfo.expiresIn,
131
+ message: "Token refreshed successfully"
132
+ });
133
+ } catch (error) {
134
+ console.error(`Token refresh failed: ${error.message}`);
135
+ process.exit(1);
136
+ }
137
+ });
138
+ auth.command("logout").description("Clear local credentials").action(async () => {
139
+ try {
140
+ const deleted = await deleteCredentials();
141
+ if (deleted) {
142
+ console.log("Credentials cleared successfully.");
143
+ } else {
144
+ console.log("No credentials file found.");
145
+ }
146
+ } catch (error) {
147
+ console.error(`Logout failed: ${error.message}`);
148
+ process.exit(1);
149
+ }
150
+ });
151
+ }
152
+
153
+ // src/commands/register.ts
154
+ import { MarketSDK as MarketSDK2 } from "@lobehub/market-sdk";
155
+
156
+ // src/utils/deviceId.ts
157
+ import { createHash } from "crypto";
158
+ import { hostname, networkInterfaces } from "os";
159
+ function generateDeviceId() {
160
+ const host = hostname();
161
+ const mac = getPrimaryMacAddress();
162
+ const input = mac ? `${host}:${mac}` : host;
163
+ const hash = createHash("sha256").update(input).digest("hex").slice(0, 16);
164
+ return `device-${hash}`;
165
+ }
166
+ function getPrimaryMacAddress() {
167
+ const interfaces = networkInterfaces();
168
+ for (const name of Object.keys(interfaces).sort()) {
169
+ const entries = interfaces[name];
170
+ if (!entries) continue;
171
+ for (const entry of entries) {
172
+ if (entry.internal) continue;
173
+ if (entry.mac === "00:00:00:00:00:00") continue;
174
+ return entry.mac;
175
+ }
176
+ }
177
+ return void 0;
178
+ }
179
+
180
+ // src/commands/register.ts
181
+ function registerRegisterCommand(program2) {
182
+ program2.command("register").description("Register this device as an M2M client and save credentials locally").requiredOption("--name <name>", "Client name for registration").option("--type <type>", "Client type (desktop|mobile|web|server|docker)", "desktop").option("--device-id <id>", "Device identifier (auto-generated if omitted)").option("--base-url <url>", "Market API base URL", "https://market.lobehub.com").option("--output <format>", "Output format (text|json)", "text").action(async (options) => {
183
+ try {
184
+ const deviceId = options.deviceId || generateDeviceId();
185
+ const baseURL = process.env.MARKET_BASE_URL || options.baseUrl;
186
+ const sdk = new MarketSDK2({ baseURL });
187
+ const result = await sdk.auth.registerClient({
188
+ clientName: options.name,
189
+ clientType: options.type,
190
+ deviceId,
191
+ platform: process.arch,
192
+ version: process.version
193
+ });
194
+ await saveCredentials({
195
+ baseUrl: baseURL,
196
+ clientId: result.client_id,
197
+ clientSecret: result.client_secret,
198
+ clientType: options.type,
199
+ deviceId,
200
+ name: options.name,
201
+ registeredAt: (/* @__PURE__ */ new Date()).toISOString()
202
+ });
203
+ formatOutput(options.output, {
204
+ clientId: result.client_id,
205
+ credentialsPath: getCredentialsPath(),
206
+ message: result.message || "Client registered successfully"
207
+ });
208
+ } catch (error) {
209
+ console.error(`Registration failed: ${error.message}`);
210
+ process.exit(1);
211
+ }
212
+ });
213
+ }
214
+
215
+ // src/cli.ts
216
+ var require2 = createRequire(import.meta.url);
217
+ var pkg = require2("../package.json");
218
+ var program = new Command();
219
+ program.name("lobehub-market").description("LobeHub Market CLI - Device registration and auth management").version(pkg.version);
220
+ registerRegisterCommand(program);
221
+ registerAuthCommand(program);
222
+ program.parse();
223
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli.ts","../src/commands/auth.ts","../src/utils/config.ts","../src/utils/credentials.ts","../src/utils/output.ts","../src/commands/register.ts","../src/utils/deviceId.ts"],"sourcesContent":["import { createRequire } from 'node:module';\n\nimport { Command } from 'commander';\n\nimport { registerAuthCommand } from './commands/auth';\nimport { registerRegisterCommand } from './commands/register';\n\nconst require = createRequire(import.meta.url);\nconst pkg = require('../package.json');\n\nconst program = new Command();\n\nprogram\n .name('lobehub-market')\n .description('LobeHub Market CLI - Device registration and auth management')\n .version(pkg.version);\n\nregisterRegisterCommand(program);\nregisterAuthCommand(program);\n\nprogram.parse();\n","import type { Command } from 'commander';\nimport { MarketSDK } from '@lobehub/market-sdk';\n\nimport { resolveConfig } from '../utils/config';\nimport { deleteCredentials } from '../utils/credentials';\nimport { formatOutput } from '../utils/output';\n\nexport function registerAuthCommand(program: Command): void {\n const auth = program\n .command('auth')\n .description('Manage authentication credentials and tokens');\n\n auth\n .command('status')\n .description('Show credential and token status')\n .option('--output <format>', 'Output format (text|json)', 'text')\n .action(async (options) => {\n try {\n const config = resolveConfig();\n\n if (!config.clientId || !config.clientSecret) {\n console.error(\n 'No credentials found. Run `lobehub-market register` first or set MARKET_CLIENT_ID and MARKET_CLIENT_SECRET.',\n );\n process.exit(1);\n }\n\n const sdk = new MarketSDK({\n baseURL: config.baseUrl,\n clientId: config.clientId,\n clientSecret: config.clientSecret,\n });\n\n const tokenInfo = await sdk.fetchM2MToken();\n\n formatOutput(options.output, {\n baseUrl: config.baseUrl,\n clientId: config.clientId,\n expiresIn: `${tokenInfo.expiresIn}s`,\n source: config.source,\n status: 'authenticated',\n tokenPreview: `${tokenInfo.accessToken.slice(0, 12)}...`,\n });\n } catch (error: any) {\n console.error(`Auth status check failed: ${error.message}`);\n process.exit(1);\n }\n });\n\n auth\n .command('refresh')\n .description('Force refresh the M2M access token')\n .option('--output <format>', 'Output format (text|json)', 'text')\n .action(async (options) => {\n try {\n const config = resolveConfig();\n\n if (!config.clientId || !config.clientSecret) {\n console.error(\n 'No credentials found. Run `lobehub-market register` first or set MARKET_CLIENT_ID and MARKET_CLIENT_SECRET.',\n );\n process.exit(1);\n }\n\n const sdk = new MarketSDK({\n baseURL: config.baseUrl,\n clientId: config.clientId,\n clientSecret: config.clientSecret,\n });\n\n const tokenInfo = await sdk.fetchM2MToken();\n\n formatOutput(options.output, {\n accessToken: tokenInfo.accessToken,\n expiresIn: tokenInfo.expiresIn,\n message: 'Token refreshed successfully',\n });\n } catch (error: any) {\n console.error(`Token refresh failed: ${error.message}`);\n process.exit(1);\n }\n });\n\n auth\n .command('logout')\n .description('Clear local credentials')\n .action(async () => {\n try {\n const deleted = await deleteCredentials();\n if (deleted) {\n console.log('Credentials cleared successfully.');\n } else {\n console.log('No credentials file found.');\n }\n } catch (error: any) {\n console.error(`Logout failed: ${error.message}`);\n process.exit(1);\n }\n });\n}\n","import { existsSync, readFileSync } from 'node:fs';\nimport { homedir } from 'node:os';\nimport { join } from 'node:path';\n\nexport interface ResolvedConfig {\n baseUrl: string;\n clientId: string | undefined;\n clientSecret: string | undefined;\n source: 'env' | 'file' | 'mixed' | 'none';\n}\n\nexport function resolveConfig(): ResolvedConfig {\n const envClientId = process.env.MARKET_CLIENT_ID;\n const envClientSecret = process.env.MARKET_CLIENT_SECRET;\n const envBaseUrl = process.env.MARKET_BASE_URL;\n\n let fileCredentials: { baseUrl?: string; clientId?: string; clientSecret?: string } | null = null;\n\n try {\n const filePath = join(homedir(), '.lobehub-market', 'credentials.json');\n if (existsSync(filePath)) {\n const content = readFileSync(filePath, 'utf-8');\n fileCredentials = JSON.parse(content);\n }\n } catch {\n // Ignore file read errors\n }\n\n const clientId = envClientId || fileCredentials?.clientId;\n const clientSecret = envClientSecret || fileCredentials?.clientSecret;\n const baseUrl = envBaseUrl || fileCredentials?.baseUrl || 'https://market.lobehub.com';\n\n let source: ResolvedConfig['source'] = 'none';\n if (clientId && clientSecret) {\n const idFromEnv = !!envClientId;\n const secretFromEnv = !!envClientSecret;\n\n if (idFromEnv && secretFromEnv) {\n source = 'env';\n } else if (!idFromEnv && !secretFromEnv) {\n source = 'file';\n } else {\n source = 'mixed';\n }\n }\n\n return { baseUrl, clientId, clientSecret, source };\n}\n","import { existsSync } from 'node:fs';\nimport { mkdir, readFile, rm, writeFile } from 'node:fs/promises';\nimport { homedir } from 'node:os';\nimport { join } from 'node:path';\n\nexport interface StoredCredentials {\n baseUrl: string;\n clientId: string;\n clientSecret: string;\n clientType: string;\n deviceId: string;\n name: string;\n registeredAt: string;\n}\n\nconst CREDENTIALS_DIR = join(homedir(), '.lobehub-market');\nconst CREDENTIALS_FILE = join(CREDENTIALS_DIR, 'credentials.json');\n\nexport async function saveCredentials(credentials: StoredCredentials): Promise<void> {\n if (!existsSync(CREDENTIALS_DIR)) {\n await mkdir(CREDENTIALS_DIR, { mode: 0o700, recursive: true });\n }\n\n const content = JSON.stringify(credentials, null, 2);\n await writeFile(CREDENTIALS_FILE, content, { encoding: 'utf-8', mode: 0o600 });\n}\n\nexport async function loadCredentials(): Promise<StoredCredentials | null> {\n if (!existsSync(CREDENTIALS_FILE)) {\n return null;\n }\n\n const content = await readFile(CREDENTIALS_FILE, 'utf-8');\n return JSON.parse(content) as StoredCredentials;\n}\n\nexport async function deleteCredentials(): Promise<boolean> {\n if (!existsSync(CREDENTIALS_FILE)) {\n return false;\n }\n\n await rm(CREDENTIALS_FILE);\n return true;\n}\n\nexport function getCredentialsPath(): string {\n return CREDENTIALS_FILE;\n}\n","export function formatOutput(format: string, data: Record<string, unknown>): void {\n if (format === 'json') {\n console.log(JSON.stringify(data, null, 2));\n return;\n }\n\n for (const [key, value] of Object.entries(data)) {\n const label = key\n .replaceAll(/([A-Z])/g, ' $1')\n .replace(/^./, (s) => s.toUpperCase())\n .trim();\n console.log(` ${label}: ${value}`);\n }\n}\n","import type { Command } from 'commander';\nimport { MarketSDK } from '@lobehub/market-sdk';\n\nimport { getCredentialsPath, saveCredentials } from '../utils/credentials';\nimport { generateDeviceId } from '../utils/deviceId';\nimport { formatOutput } from '../utils/output';\n\nexport function registerRegisterCommand(program: Command): void {\n program\n .command('register')\n .description('Register this device as an M2M client and save credentials locally')\n .requiredOption('--name <name>', 'Client name for registration')\n .option('--type <type>', 'Client type (desktop|mobile|web|server|docker)', 'desktop')\n .option('--device-id <id>', 'Device identifier (auto-generated if omitted)')\n .option('--base-url <url>', 'Market API base URL', 'https://market.lobehub.com')\n .option('--output <format>', 'Output format (text|json)', 'text')\n .action(async (options) => {\n try {\n const deviceId = options.deviceId || generateDeviceId();\n const baseURL = process.env.MARKET_BASE_URL || options.baseUrl;\n\n const sdk = new MarketSDK({ baseURL });\n\n const result = await sdk.auth.registerClient({\n clientName: options.name,\n clientType: options.type,\n deviceId,\n platform: process.arch,\n version: process.version,\n });\n\n await saveCredentials({\n baseUrl: baseURL,\n clientId: result.client_id,\n clientSecret: result.client_secret,\n clientType: options.type,\n deviceId,\n name: options.name,\n registeredAt: new Date().toISOString(),\n });\n\n formatOutput(options.output, {\n clientId: result.client_id,\n credentialsPath: getCredentialsPath(),\n message: result.message || 'Client registered successfully',\n });\n } catch (error: any) {\n console.error(`Registration failed: ${error.message}`);\n process.exit(1);\n }\n });\n}\n","import { createHash } from 'node:crypto';\nimport { hostname, networkInterfaces } from 'node:os';\n\nexport function generateDeviceId(): string {\n const host = hostname();\n const mac = getPrimaryMacAddress();\n\n const input = mac ? `${host}:${mac}` : host;\n const hash = createHash('sha256').update(input).digest('hex').slice(0, 16);\n\n return `device-${hash}`;\n}\n\nfunction getPrimaryMacAddress(): string | undefined {\n const interfaces = networkInterfaces();\n\n for (const name of Object.keys(interfaces).sort()) {\n const entries = interfaces[name];\n if (!entries) continue;\n\n for (const entry of entries) {\n if (entry.internal) continue;\n if (entry.mac === '00:00:00:00:00:00') continue;\n\n return entry.mac;\n }\n }\n\n return undefined;\n}\n"],"mappings":"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","names":["existsSync","homedir","join","existsSync","program","MarketSDK","program","MarketSDK","require"]}
package/package.json ADDED
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "@lobehub/market-cli",
3
+ "version": "0.0.1",
4
+ "description": "LobeHub Market CLI - Device registration and auth management",
5
+ "keywords": [
6
+ "lobehub",
7
+ "market",
8
+ "cli"
9
+ ],
10
+ "homepage": "https://github.com/lobehub/lobehub-market",
11
+ "bugs": {
12
+ "url": "https://github.com/lobehub/lobehub-market/issues/new/choose"
13
+ },
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "https://github.com/lobehub/lobehub-market.git"
17
+ },
18
+ "license": "MIT",
19
+ "author": "LobeHub <i@lobehub.com>",
20
+ "type": "module",
21
+ "bin": {
22
+ "lobehub-market": "./dist/cli.js"
23
+ },
24
+ "files": [
25
+ "dist"
26
+ ],
27
+ "dependencies": {
28
+ "@lobehub/market-sdk": "workspace:*",
29
+ "commander": "^13.1.0"
30
+ },
31
+ "engines": {
32
+ "node": ">=22.0.0"
33
+ }
34
+ }