/** * CLI 入口:开发环境生成 lewan 领取 mock。 * 推荐使用后台「开发 Mock」页面。 */ import process from 'node:process' import { closeDb } from '../src/db/client.js' import { createLewanMockClaim, isDevMockEnabled, } from '../src/services/dev-mock/dev-mock-service.js' type JsonObject = Record const args = parseArgs(process.argv.slice(2)) if (args.help) { printHelp() process.exit(0) } if (!isDevMockEnabled() && args.force !== true) { console.error( '当前是生产环境,已拒绝生成 mock 数据。如确实要执行,请追加 --force,或设置 ENABLE_DEV_MOCK=1。', ) process.exit(1) } if (args.force === true) { process.env.ENABLE_DEV_MOCK = '1' } try { const result = await createLewanMockClaim({ step: args.step, orderNo: args.orderNo, productNo: args.productNo, uid: args.uid, items: args.items, frontendBaseUrl: args.frontendBaseUrl, }) console.log('已生成 kuaishou-lewan 领取 mock 数据:') console.log(` 91订单号:${result.orderNo}`) console.log(` 商品:${result.productName}`) console.log(` 当前步骤:${result.step}`) console.log(` 期望 UID:${result.expectedUid}`) console.log(` 领取链接:${result.claimUrl}`) console.log(` 前端本地链接:${result.frontendClaimUrl}`) console.log('') for (const tip of result.tips) { console.log(` · ${tip}`) } console.log(` ${result.open91QueryHint}`) } catch (error) { console.error(error instanceof Error ? error.message : error) process.exitCode = 1 } finally { await closeDb() } function parseArgs(rawArgs: string[]) { const parsed: JsonObject = {} for (const rawArg of rawArgs) { const arg = String(rawArg || '').trim() if (!arg) continue if (arg === '--help' || arg === '-h') { parsed.help = true continue } if (arg === '--force') { parsed.force = true continue } const normalized = arg.startsWith('--') ? arg.slice(2) : arg const separatorIndex = normalized.indexOf('=') if (separatorIndex < 0) { parsed[normalized] = true continue } const key = normalized.slice(0, separatorIndex).trim() const value = normalized.slice(separatorIndex + 1).trim() if (key) parsed[key] = value } return parsed } function printHelp() { console.log(` 生成 lewan 领取 mock(CLI)。推荐使用后台 /admin/dev-mock。 npm run mock:claim -- --step=binding --uid=10001 参数: --step uid | binding | confirm | result(默认 uid) --uid 游戏 UID(binding 起默认 10001) --orderNo 订单号,默认自动生成 --productNo 91 商品名,默认 套餐_1----3676797936 --frontendBaseUrl 前端 base,用于打印本地 claim 链接 --force 允许在 production 执行(仍需 ENABLE_DEV_MOCK 或 force 打开开关) `) }