@sfmc-bds/cli 0.4.5 → 0.5.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/daemon/client.d.ts +2 -2
- package/dist/daemon/client.d.ts.map +1 -1
- package/dist/daemon/client.js +7 -15
- package/dist/daemon/client.js.map +2 -2
- package/dist/daemon/host.d.ts +27 -0
- package/dist/daemon/host.d.ts.map +1 -0
- package/dist/daemon/host.js +178 -0
- package/dist/daemon/host.js.map +7 -0
- package/dist/daemon/server.d.ts.map +1 -1
- package/dist/daemon/server.js +2 -0
- package/dist/daemon/server.js.map +2 -2
- package/dist/management/metrics-read.d.ts +7 -0
- package/dist/management/metrics-read.d.ts.map +1 -0
- package/dist/management/metrics-read.js +80 -0
- package/dist/management/metrics-read.js.map +7 -0
- package/dist/management/platform-worker.js +20 -2
- package/dist/management/platform-worker.js.map +2 -2
- package/dist/management/server.d.ts.map +1 -1
- package/dist/management/server.js +7 -16
- package/dist/management/server.js.map +2 -2
- package/dist/management/stdio.d.ts.map +1 -1
- package/dist/management/stdio.js +10 -0
- package/dist/management/stdio.js.map +3 -3
- package/dist/module-commands.d.ts.map +1 -1
- package/dist/module-commands.js +9 -3
- package/dist/module-commands.js.map +2 -2
- package/dist/services.js +1 -1
- package/dist/services.js.map +2 -2
- package/dist/wizard.js +1 -1
- package/dist/wizard.js.map +2 -2
- package/package.json +7 -6
- package/scripts/module-install/fetch-module.mjs +6 -2
package/dist/wizard.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/wizard.ts"],
|
|
4
|
-
"sourcesContent": ["import { confirm, intro, isCancel, multiselect, note, outro, password, select, spinner, tasks, text } from \"@clack/prompts\";\nimport {\n configPath,\n ensureCoreConfigs,\n modulePath,\n patchJson as patchConfig,\n readJson,\n withConfigSchema,\n writeJson,\n type Catalog,\n type ConfigName,\n type ModuleLock,\n type QQBridgeConfig,\n} from \"@sfmc-bds/sdk/node/config\";\nimport { bdsExePath } from \"@sfmc-bds/bds-tools/host-platform\";\nimport { execFileSync } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { ensureDirectory, pickDirectory } from \"./interactive-prompts.js\";\nimport { persistLocale, t, type Locale } from \"./i18n/index.js\";\nimport { llbotExeName } from \"./llbot-launch.js\";\nimport { ROOT, isMonorepoLayout, isRuntimeInitialized, resolveFetchModule, spawnService } from \"./runtime.js\";\nimport { ensurePackUpdateConfigFile } from \"./pack-update/index.js\";\nimport { resolveRegistryIndex } from \"./registry.js\";\nimport { c } from \"./theme.js\";\n\n/** Shallow-merge write for top-level configs. Delegates to SDK; do not mkdir+writeFileSync here. */\nfunction patchJson<T extends object>(rootDir: string, name: ConfigName, updates: Partial<T>): void {\n patchConfig<T>(configPath(rootDir, name), updates);\n}\n\nasync function waitForHealth(port: number, ms = 15000): Promise<boolean> {\n const t = Date.now();\n while (Date.now() - t < ms) {\n try {\n if ((await fetch(`http://127.0.0.1:${port}/api/health`)).ok) return true;\n } catch {\n /* retry */\n }\n await new Promise((r) => setTimeout(r, 300));\n }\n return false;\n}\n\n/** \u8FD0\u884C\u65F6\u5FC5\u9700\u76EE\u5F55\u63A2\u6D4B(configs / modules) */\nconst RUNTIME_DIRS = [\n { target: \"configs\", npmTarget: \"configs\" },\n { target: \"modules\", npmTarget: \"modules\" },\n] as const;\n\nfunction missingRuntimeAssets(rootDir: string): string[] {\n return RUNTIME_DIRS.flatMap(({ target, npmTarget }) => {\n const directory = path.join(rootDir, npmTarget);\n try {\n return fs.statSync(directory).isDirectory() && fs.readdirSync(directory).length > 0 ? [] : [target];\n } catch {\n return [target];\n }\n });\n}\n\nasync function runBdsUpdate(rootDir: string, channel: string): Promise<{ code: number | null; output: string }> {\n const child = spawnService(\"update\", [`--channel=${channel}`, \"--force\", \"--no-start\"], {\n cwd: rootDir,\n stdio: \"pipe\",\n });\n const output: string[] = [];\n child.stdout?.on(\"data\", (data: Buffer) => output.push(data.toString()));\n child.stderr?.on(\"data\", (data: Buffer) => output.push(data.toString()));\n\n return new Promise((resolve) => {\n child.once(\"error\", (error) => resolve({ code: null, output: `${output.join(\"\")}${error.message}` }));\n child.once(\"close\", (code) => resolve({ code, output: output.join(\"\") }));\n });\n}\n\nasync function prepareRuntimeAssets(rootDir: string): Promise<void> {\n /* monorepo \u5E03\u5C40\uFF1Aconfigs/ modules/ \u5E94\u7531 pnpm workspace \u63D0\u4F9B */\n if (isMonorepoLayout(rootDir)) {\n const missing = missingRuntimeAssets(rootDir);\n if (missing.length > 0) {\n throw new Error(t(\"wizard.runtimeMissingAssets\", { list: missing.join(\", \") }));\n }\n return;\n }\n\n seedNpmRuntimeLayout(rootDir);\n}\n\n/** \u975E monorepo \u7684 npm \u5B89\u88C5\u5E03\u5C40\uFF1Aensure \u914D\u7F6E\u9AA8\u67B6 + \u7A7A modules */\nfunction seedNpmRuntimeLayout(rootDir: string): void {\n ensureCoreConfigs(rootDir, [\"db_config\", \"qq_config\", \"bds_updater\", \"permissions\"]);\n /* pack-update \u7684 ensure \u4F7F\u7528 runtime ROOT\uFF1Bnpm \u5E03\u5C40\u4E0B\u5E94\u4E0E rootDir \u4E00\u81F4 */\n if (path.resolve(rootDir) === path.resolve(ROOT)) {\n ensurePackUpdateConfigFile();\n void import(\"./module-update/index.js\")\n .then((mod) => mod.ensureModuleUpdateConfigFile())\n .catch(() => {\n /* \u7B56\u7565\u6587\u4EF6\u7A0D\u540E\u5728 mod update / \u5F00\u670D\u65F6\u8FD8\u4F1A\u518D\u786E\u4FDD\u4E00\u6B21 */\n });\n }\n\n const modulesRoot = path.join(rootDir, \"modules\");\n const packagesDir = path.join(modulesRoot, \"packages\");\n fs.mkdirSync(packagesDir, { recursive: true });\n\n const catalogPath = path.join(modulesRoot, \"catalog.json\");\n if (!fs.existsSync(catalogPath)) {\n writeJson(\n catalogPath,\n withConfigSchema({ version: 1, modules: [] }, \"module_catalog\", \"modules\")\n );\n }\n const lockPath = path.join(modulesRoot, \"module-lock.json\");\n if (!fs.existsSync(lockPath)) {\n writeJson(lockPath, { version: 1, modules: {} });\n }\n}\n\n/** \u66F4\u65B0\u65F6\u9ED8\u8BA4\u4FDD\u7559\u7684 BDS \u6587\u4EF6\uFF0C\u4E0E\u9010\u9879\u8BE2\u95EE\u65F6\u7684\u521D\u59CB\u52FE\u9009\u76F8\u540C\u3002 */\nconst DEFAULT_PRESERVE = [\n \"server.properties\",\n \"whitelist.json\",\n \"permissions.json\",\n \"allowlist.json\",\n \"worlds\",\n \"config\",\n] as const;\n\n/** \u5411\u5BFC\u5199\u8FDB db / bds_updater \u7684\u8DEF\u5F84\u4E0E\u7AEF\u53E3\u3002 */\ninterface RuntimeLayout {\n dbDir: string;\n dbPort: number;\n backupDir: string;\n preserve: string[];\n}\n\n/** \u5411\u5BFC\u6536\u96C6\u7684 QQ \u6865\u9009\u62E9\u3002\u53D6\u6D88\u9009\u62E9\u65F6\u4E0D\u4EA7\u751F\u8BE5\u5BF9\u8C61\u3002 */\ninterface QqWizardChoice {\n qqEnabled: boolean;\n qqBackend: \"official\" | \"llbot\";\n qqAppId: string;\n qqAppSecret: string;\n qqSandbox: boolean;\n qqGroupOpenid: string;\n llbotPath?: string;\n llbotEnabled: boolean;\n}\n\n/**\n * \u6570\u636E\u5E93\u3001\u5907\u4EFD\u76EE\u5F55\u548C\u66F4\u65B0\u4FDD\u7559\u9879\u3002\n * \u63A5\u53D7\u9ED8\u8BA4\u503C\u65F6\u4E0D\u518D\u9010\u9879\u63D0\u95EE\uFF1B\u62D2\u7EDD\u540E\u4ECD\u8BE2\u95EE\u76EE\u5F55\u3001\u7AEF\u53E3\u548C\u4FDD\u7559\u9879\u3002\u53D6\u6D88\u5355\u9879\u65F6\u6CBF\u7528\u8BE5\u9879\u9ED8\u8BA4\u3002\n */\nasync function askRuntimeLayout(rootDir: string, bdsResolved: string): Promise<RuntimeLayout> {\n const defaultDbDir = path.join(rootDir, \"data\");\n const defaultBackup = path.join(path.dirname(bdsResolved), \"backups\");\n const useDefaults = await confirm({\n message: t(\"wizard.useDefaults\"),\n initialValue: true,\n });\n if (isCancel(useDefaults) || useDefaults) {\n ensureDirectory(defaultDbDir);\n note(\n c.text(\n t(\"wizard.defaultsApplied\", {\n db: defaultDbDir,\n port: \"3001\",\n backup: defaultBackup,\n })\n ),\n t(\"common.tips\")\n );\n note(c.yellow(t(\"wizard.updaterTip\")), t(\"common.tips\"));\n return {\n dbDir: defaultDbDir,\n dbPort: 3001,\n backupDir: defaultBackup,\n preserve: [...DEFAULT_PRESERVE],\n };\n }\n\n const dbDirInput = await pickDirectory(t(\"wizard.dbDir\"), defaultDbDir);\n const dbDir = ensureDirectory(dbDirInput) ? dbDirInput : defaultDbDir;\n if (dbDir !== dbDirInput) {\n note(c.text(t(\"wizard.usingDefault\", { path: dbDir })), t(\"common.tips\"));\n }\n const dbPortRaw = await text({\n message: t(\"wizard.dbPort\"),\n initialValue: \"3001\",\n validate: (v: any): any => {\n const n = parseInt(v, 10);\n if (isNaN(n) || n < 1024 || n > 65535) return t(\"wizard.portRange\");\n if (v.length === 0) return t(\"wizard.valueRequired\");\n },\n });\n const dbPort = isCancel(dbPortRaw) ? 3001 : parseInt(dbPortRaw as string, 10);\n const backupDir = await pickDirectory(t(\"wizard.backupDir\"), defaultBackup);\n const preserveOptions = [\n { value: \"server.properties\", label: \"server.properties\", hint: t(\"wizard.preserve.serverProps\") },\n { value: \"whitelist.json\", label: \"whitelist.json\" },\n { value: \"permissions.json\", label: \"permissions.json\" },\n { value: \"allowlist.json\", label: \"allowlist.json\" },\n { value: \"worlds\", label: \"worlds/\", hint: t(\"wizard.preserve.worlds\") },\n { value: \"config\", label: \"config/\", hint: t(\"wizard.preserve.config\") },\n ] as const;\n const pr = await multiselect({\n message: t(\"wizard.preserve\"),\n options: [...preserveOptions],\n initialValues: [...DEFAULT_PRESERVE],\n required: false,\n });\n note(c.yellow(t(\"wizard.updaterTip\")), t(\"common.tips\"));\n return {\n dbDir,\n dbPort,\n backupDir,\n preserve: isCancel(pr) ? [] : (pr as string[]),\n };\n}\n\n/**\n * \u9009\u62E9 QQ \u6865\u540E\u7AEF\u3002\u9ED8\u8BA4\u4E0D\u542F\u7528\u3002\n * \u53D6\u6D88\u65F6\u8FD4\u56DE null\uFF0C\u8C03\u7528\u65B9\u7ED3\u675F\u5411\u5BFC\u4E14\u4E0D\u5199\u5165 initialized_at\u3002\n */\nasync function askQqBridge(rootDir: string): Promise<QqWizardChoice | null> {\n const qqBackendPick = await select({\n message: t(\"wizard.qqBackend\"),\n options: [\n { value: \"disabled\", label: t(\"wizard.qqBackend.disabled\"), hint: t(\"wizard.qqBackend.disabledHint\") },\n { value: \"official\", label: t(\"wizard.qqBackend.official\"), hint: t(\"wizard.qqBackend.officialHint\") },\n { value: \"llbot\", label: t(\"wizard.qqBackend.llbot\"), hint: t(\"wizard.qqBackend.llbotHint\") },\n ],\n initialValue: \"disabled\",\n });\n if (isCancel(qqBackendPick)) return null;\n\n const qqBackendChoice = String(qqBackendPick || \"disabled\");\n if (qqBackendChoice === \"disabled\") {\n return {\n qqEnabled: false,\n qqBackend: \"official\",\n qqAppId: \"\",\n qqAppSecret: \"\",\n qqSandbox: false,\n qqGroupOpenid: \"\",\n llbotEnabled: false,\n };\n }\n if (qqBackendChoice === \"llbot\") {\n const picked = await pickDirectory(t(\"wizard.llbotDir\"), path.join(rootDir, \"LLBOT\"));\n let llbotPath = picked;\n if (!ensureDirectory(picked)) {\n llbotPath = path.join(rootDir, \"LLBOT\");\n note(c.text(t(\"wizard.usingDefault\", { path: llbotPath })), t(\"common.tips\"));\n }\n return {\n qqEnabled: true,\n qqBackend: \"llbot\",\n qqAppId: \"\",\n qqAppSecret: \"\",\n qqSandbox: false,\n qqGroupOpenid: \"\",\n llbotPath,\n llbotEnabled: true,\n };\n }\n\n const appIdRaw = await text({\n message: t(\"wizard.qqAppId\"),\n placeholder: \"102xxxxx\",\n validate: (v: any): any => {\n if (!String(v ?? \"\").trim()) return t(\"wizard.valueRequired\");\n },\n });\n const secretRaw = await password({\n message: t(\"wizard.qqAppSecret\"),\n validate: (v: any): any => {\n if (!String(v ?? \"\").trim()) return t(\"wizard.valueRequired\");\n },\n });\n const sandboxPick = await confirm({\n message: t(\"wizard.qqSandbox\"),\n initialValue: false,\n });\n const openidRaw = await text({\n message: t(\"wizard.qqGroupOpenid\"),\n placeholder: t(\"wizard.qqGroupOpenidHint\"),\n });\n return {\n qqEnabled: true,\n qqBackend: \"official\",\n qqAppId: isCancel(appIdRaw) ? \"\" : String(appIdRaw).trim(),\n qqAppSecret: isCancel(secretRaw) ? \"\" : String(secretRaw).trim(),\n qqSandbox: isCancel(sandboxPick) ? false : !!sandboxPick,\n qqGroupOpenid: isCancel(openidRaw) ? \"\" : String(openidRaw).trim(),\n llbotEnabled: false,\n };\n}\n\n/**\n * \u9009\u62E9\u8981\u542F\u7528\u6216\u5B89\u88C5\u7684\u6A21\u5757\u3002\n * \u76EE\u5F55\u91CC\u5DF2\u6709\u6A21\u5757\u65F6\u53EA\u95EE\u542F\u505C\uFF1B\u7A7A\u76EE\u5F55\u624D\u8BFB\u5B98\u65B9\u7D22\u5F15\uFF0C\u907F\u514D\u628A\u542F\u7528\u548C\u5B89\u88C5\u6DF7\u6210\u540C\u4E00\u6B21\u9009\u62E9\u3002\n */\nasync function askModules(rootDir: string): Promise<string[]> {\n const catalog = readJson<Catalog>(modulePath(rootDir, \"catalog.json\")) ?? {\n version: 1,\n modules: [],\n };\n const catalogModules: Array<{ id: string; name?: string; description?: string; canDisable?: boolean }> = [];\n if (Array.isArray(catalog.modules)) {\n for (const m of catalog.modules) {\n catalogModules.push({\n id: String(m.id ?? \"\"),\n name: String(m.name ?? m.id ?? \"\"),\n description: String(m.description ?? \"\"),\n canDisable: m.canDisable !== false,\n });\n }\n }\n\n if (catalogModules.length > 0) {\n note(c.text(t(\"wizard.modulesFound\", { count: catalogModules.length })), t(\"wizard.step4\"));\n const lockedMd: Array<{ value: string; label: string; hint: string; disabled?: boolean }> = [];\n const optionalMd: Array<{ value: string; label: string; hint: string }> = [];\n for (const k of catalogModules) {\n const option = {\n value: k.id,\n label: String(k.name),\n hint: String(k.description ?? t(\"wizard.emptyHint\")),\n };\n if (k.canDisable === false) lockedMd.push({ ...option, disabled: true });\n else optionalMd.push(option);\n }\n const picked = await multiselect({\n message: t(\"wizard.enableModules\"),\n options: [...lockedMd, ...optionalMd],\n required: false,\n });\n return isCancel(picked) ? [] : (picked as string[]);\n }\n\n note(c.text(t(\"wizard.modulesNone\")), t(\"wizard.step4\"));\n const spin = spinner();\n spin.start(t(\"wizard.registryLoading\"));\n const { index } = await resolveRegistryIndex();\n const ids = Object.keys(index).sort((a, b) => a.localeCompare(b));\n if (ids.length === 0) {\n spin.stop(t(\"wizard.registryOffline\"));\n return [];\n }\n spin.stop(t(\"wizard.modulesFound\", { count: String(ids.length) }));\n const picked = await multiselect({\n message: t(\"wizard.installFromRegistry\"),\n options: ids.map((id) => ({ value: id, label: id })),\n required: false,\n });\n return isCancel(picked) ? [] : (picked as string[]);\n}\n\nexport async function runWizard(): Promise<void> {\n intro(c.bold(t(\"wizard.intro\")));\n\n const langPick = await select({\n message: t(\"locale.wizard\"),\n options: [\n { value: \"zh-CN\", label: t(\"locale.opt.zh\") },\n { value: \"en\", label: t(\"locale.opt.en\") },\n ],\n initialValue: \"zh-CN\",\n });\n if (!isCancel(langPick)) {\n persistLocale(ROOT, langPick as Locale);\n }\n\n // Already initialized only when runtime.json#initialized_at is set (empty db_config skeleton does not count).\n if (isRuntimeInitialized()) {\n const r = await confirm({ message: t(\"wizard.rerun\"), initialValue: false });\n if (isCancel(r) || !r) {\n outro(c.dim(t(\"wizard.skipped\")));\n return;\n }\n }\n // Step 1: Runtime Environment\uFF08\u53EA\u64AD\u79CD configs/modules\uFF0C\u4E0D\u5199 initialized_at\u3001\u4E0D\u5EFA data/\uFF09\n const rootDir = ROOT;\n note(c.text(t(\"wizard.runtimeRoot\", { root: rootDir })), t(\"wizard.step1\"));\n\n try {\n await prepareRuntimeAssets(rootDir);\n } catch (error) {\n outro(c.red(t(\"wizard.prepFailed\", { message: (error as Error).message })));\n return;\n }\n\n // Step 2: BDS \u76EE\u5F55\u3002\u6570\u636E\u5E93\u548C QQ \u653E\u5230\u540E\u9762\uFF0C\u80FD\u7528\u9ED8\u8BA4\u503C\u5C31\u4E0D\u518D\u9010\u9879\u95EE\u3002\n note(c.text(t(\"wizard.step2Note\")), t(\"wizard.step2\"));\n\n const bdsResolved = await pickDirectory(t(\"wizard.bdsDir\"), path.join(rootDir, \"BDS\"));\n if (!ensureDirectory(bdsResolved)) {\n outro(c.red(t(\"wizard.cannotCreateBds\", { dir: bdsResolved })));\n return;\n }\n\n // Step 3: \u5148\u786E\u8BA4\u53EF\u6267\u884C\u6587\u4EF6\u548C EULA\uFF0C\u518D\u51B3\u5B9A\u8981\u4E0D\u8981\u4E0B\u8F7D\u3002\n const bdsExe = bdsExePath(bdsResolved);\n const bdsExists = fs.existsSync(bdsExe);\n\n note(\n bdsExists\n ? c.green(t(\"wizard.bdsFound\", { path: bdsResolved }))\n : c.yellow(t(\"wizard.bdsNotFound\", { path: bdsResolved })),\n t(\"wizard.step3\")\n );\n\n const EULA = await confirm({\n message: t(\"wizard.eula\"),\n initialValue: false,\n });\n if (isCancel(EULA) || !EULA) {\n outro(c.yellow(t(\"wizard.disagreed\")));\n return;\n }\n\n let downloadBds = false;\n let bdsChannel = \"release\";\n\n if (!bdsExists) {\n const d = await confirm({ message: t(\"wizard.downloadBds\"), initialValue: true });\n if (!isCancel(d) && d) {\n const ch = await select({\n message: t(\"wizard.selectChannel\"),\n options: [\n { value: \"release\", label: t(\"wizard.channel.release\"), hint: t(\"wizard.channel.releaseHint\") },\n { value: \"preview\", label: t(\"wizard.channel.preview\"), hint: t(\"wizard.channel.previewHint\") },\n ],\n initialValue: \"release\",\n });\n if (!isCancel(ch)) {\n bdsChannel = ch as string;\n downloadBds = true;\n }\n }\n }\n\n const { dbDir, dbPort, backupDir, preserve } = await askRuntimeLayout(rootDir, bdsResolved);\n if (downloadBds && !ensureDirectory(backupDir)) {\n outro(c.red(t(\"wizard.cannotCreateBackup\", { dir: backupDir })));\n return;\n }\n\n const qq = await askQqBridge(rootDir);\n if (!qq) {\n outro(c.dim(t(\"wizard.skipped\")));\n return;\n }\n const { qqEnabled, qqBackend, qqAppId, qqAppSecret, qqSandbox, qqGroupOpenid, llbotPath, llbotEnabled } = qq;\n\n const selectedModules = await askModules(rootDir);\n\n const wizardTasks = [\n {\n title: t(\"wizard.updatingConfigs\"),\n task: () => {\n const slashPath = (value: string) => value.replace(/\\\\/g, \"/\");\n patchJson(rootDir, \"db_config.json\", {\n db_port: dbPort,\n dbDir: slashPath(path.relative(rootDir, path.join(dbDir, \"sfmc_data.db\"))),\n modulesDir: \"modules\",\n });\n\n const llbotOn = qqBackend === \"llbot\" && !!llbotEnabled && !!llbotPath;\n const qqNotify = qqEnabled && (qqBackend === \"official\" || llbotOn);\n const exeName = llbotExeName();\n const currentQq = readJson<QQBridgeConfig>(configPath(rootDir, \"qq_config.json\")) ?? {};\n patchJson(rootDir, \"qq_config.json\", {\n qq_enabled: qqEnabled,\n qq_backend: qqBackend,\n official: {\n ...currentQq.official,\n app_id: qqAppId,\n app_secret: qqAppSecret,\n sandbox: qqSandbox,\n group_openid: qqGroupOpenid,\n },\n llbot: {\n ...currentQq.llbot,\n enabled: llbotOn,\n // path = \u53EF\u6267\u884C\u6587\u4EF6\uFF1Bcwd = \u8FD0\u884C\u76EE\u5F55\uFF08\u5411\u5BFC\u9009\u7684\u662F\u76EE\u5F55\uFF09\n path: llbotPath ? slashPath(path.join(llbotPath, exeName)) : \"\",\n cwd: llbotPath ? slashPath(llbotPath) : \"\",\n },\n });\n patchJson(rootDir, \"bds_updater.json\", {\n bds_path: slashPath(bdsResolved),\n channel: bdsChannel,\n backup_dir: slashPath(backupDir),\n preserve,\n qq_notify: qqNotify,\n });\n /* \u8DEF\u5F84\u9009\u5B9A\u540E\u518D\u6807\u8BB0\u5DF2\u521D\u59CB\u5316\uFF0C\u907F\u514D\u534A\u9014\u53D6\u6D88\u4ECD\u7559\u4E0B data/ \u8BED\u4E49 */\n patchJson(rootDir, \"runtime.json\", {\n runtime_root: rootDir,\n initialized_at: new Date().toISOString(),\n locale: isCancel(langPick) ? undefined : (langPick as string),\n });\n return t(\"wizard.configsUpdated\");\n },\n },\n {\n title: t(\"wizard.updatingModules\"),\n task: async (): Promise<string> => {\n const lock = readJson<ModuleLock>(modulePath(rootDir, \"module-lock.json\")) ?? {\n version: 1,\n modules: {},\n };\n if (!lock.modules) lock.modules = {};\n const now = Date.now();\n for (const id of selectedModules) lock.modules[id] = { enabled: true, updatedAt: now };\n writeJson(modulePath(rootDir, \"module-lock.json\"), lock);\n return t(\"wizard.modulesUpdated\");\n },\n },\n {\n title: t(\"wizard.initDb\"),\n task: async (): Promise<string> => {\n const child = spawnService(\"db\", [], {\n cwd: rootDir,\n stdio: \"ignore\",\n env: { ...process.env, DB_PORT: String(dbPort) },\n });\n if (!(await waitForHealth(dbPort))) {\n child.kill(\"SIGTERM\");\n return t(\"wizard.dbTimeout\");\n }\n\n /* /api/health \u5728 listen \u4E4B\u540E\u624D\u8FD4\u56DE\uFF0C\u800C\u5EFA\u8868\u53D1\u751F\u5728 listen \u4E4B\u524D\uFF0C\u4E0D\u5FC5\u518D\u7A7A\u7B49\u3002 */\n child.kill(\"SIGTERM\");\n setTimeout(() => child.kill(\"SIGKILL\"), 3000).unref();\n return t(\"wizard.dbOk\");\n },\n },\n ];\n if (downloadBds) {\n wizardTasks.push({\n title: t(\"wizard.downloadingBds\"),\n task: async (): Promise<string> => {\n const result = await runBdsUpdate(rootDir, bdsChannel);\n if (result.code !== 0) {\n return t(\"wizard.downloadFail\");\n }\n return t(\"wizard.bdsDownloaded\");\n },\n });\n }\n try {\n await tasks(wizardTasks);\n } catch (e) {\n outro(c.red(t(\"common.error\", { message: (e as Error).message })));\n return;\n }\n\n /* install \u2192 build \u2192 deploy chain */\n await runInstallBuildDeploy(rootDir, selectedModules, bdsResolved);\n\n outro(c.green(t(\"wizard.done\")));\n}\n\nasync function runInstallBuildDeploy(rootDir: string, selectedModules: string[], bdsResolved: string): Promise<void> {\n if (selectedModules.length > 0) {\n const fetchScript = resolveFetchModule();\n if (fetchScript) {\n const installT = [\n {\n title: t(\"wizard.installing\", { count: selectedModules.length }),\n task: async (): Promise<string> => {\n /* \u5411\u5BFC\u91CC\u52FE\u9009\u7684\u542F\u505C\u5DF2\u7ECF\u5199\u5165 lock\uFF0C\u5B89\u88C5\u65F6\u4FDD\u7559\uFF0C\u4E0D\u7528\u6E05\u5355\u91CC\u7684\u9ED8\u8BA4\u503C\u8986\u76D6\u3002 */\n execFileSync(process.execPath, [fetchScript, \"install\", ...selectedModules, \"--preserve-lock\"], {\n cwd: rootDir,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n env: { ...process.env, SFMC_ROOT: rootDir },\n });\n return t(\"wizard.installed\", { count: selectedModules.length });\n },\n },\n ];\n try {\n await tasks(installT);\n } catch (e) {\n note(c.yellow(t(\"wizard.installFailed\", { message: (e as Error).message })));\n }\n } else {\n note(c.yellow(t(\"wizard.fetchMissing\", { list: selectedModules.join(\", \") })));\n }\n } else {\n note(c.dim(t(\"wizard.noModulesSelected\")));\n }\n\n const { cmdBehaviorPackBuild, cmdBehaviorPackDeploy } = await import(\"./commands-behavior-pack.js\");\n const buildT = [\n {\n title: t(\"wizard.buildingBp\"),\n task: async (): Promise<string> => {\n const r = await cmdBehaviorPackBuild([]);\n if (!r.ok) throw new Error(r.message);\n return r.message;\n },\n },\n ];\n try {\n await tasks(buildT);\n } catch (e) {\n note(c.yellow(t(\"wizard.buildFailed\", { message: (e as Error).message })));\n return;\n }\n\n const deployT = [\n {\n title: t(\"wizard.deploying\", { path: bdsResolved }),\n task: async (): Promise<string> => {\n const r = await cmdBehaviorPackDeploy([]);\n if (!r.ok) throw new Error(r.message);\n return r.message;\n },\n },\n ];\n try {\n await tasks(deployT);\n note(c.green(t(\"wizard.restartBds\")));\n } catch (e) {\n note(c.yellow(t(\"wizard.deployFailed\", { message: (e as Error).message })));\n }\n void rootDir;\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { confirm, intro, isCancel, multiselect, note, outro, password, select, spinner, tasks, text } from \"@clack/prompts\";\nimport {\n configPath,\n ensureCoreConfigs,\n modulePath,\n patchJson as patchConfig,\n readJson,\n withConfigSchema,\n writeJson,\n type Catalog,\n type ConfigName,\n type ModuleLock,\n type QQBridgeConfig,\n} from \"@sfmc-bds/sdk/node/config\";\nimport { bdsExePath } from \"@sfmc-bds/bds-tools/host-platform\";\nimport { execFileSync } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { ensureDirectory, pickDirectory } from \"./interactive-prompts.js\";\nimport { persistLocale, t, type Locale } from \"./i18n/index.js\";\nimport { llbotExeName } from \"./llbot-launch.js\";\nimport { ROOT, isMonorepoLayout, isRuntimeInitialized, resolveFetchModule, spawnService } from \"./runtime.js\";\nimport { ensurePackUpdateConfigFile } from \"./pack-update/index.js\";\nimport { resolveRegistryIndex } from \"./registry.js\";\nimport { c } from \"./theme.js\";\n\n/** Shallow-merge write for top-level configs. Delegates to SDK; do not mkdir+writeFileSync here. */\nfunction patchJson<T extends object>(rootDir: string, name: ConfigName, updates: Partial<T>): void {\n patchConfig<T>(configPath(rootDir, name), updates);\n}\n\nasync function waitForHealth(port: number, ms = 15000): Promise<boolean> {\n const t = Date.now();\n while (Date.now() - t < ms) {\n try {\n if ((await fetch(`http://127.0.0.1:${port}/api/health`)).ok) return true;\n } catch {\n /* retry */\n }\n await new Promise((r) => setTimeout(r, 300));\n }\n return false;\n}\n\n/** \u8FD0\u884C\u65F6\u5FC5\u9700\u76EE\u5F55\u63A2\u6D4B(configs / modules) */\nconst RUNTIME_DIRS = [\n { target: \"configs\", npmTarget: \"configs\" },\n { target: \"modules\", npmTarget: \"modules\" },\n] as const;\n\nfunction missingRuntimeAssets(rootDir: string): string[] {\n return RUNTIME_DIRS.flatMap(({ target, npmTarget }) => {\n const directory = path.join(rootDir, npmTarget);\n try {\n return fs.statSync(directory).isDirectory() && fs.readdirSync(directory).length > 0 ? [] : [target];\n } catch {\n return [target];\n }\n });\n}\n\nasync function runBdsUpdate(rootDir: string, channel: string): Promise<{ code: number | null; output: string }> {\n const child = spawnService(\"update\", [`--channel=${channel}`, \"--force\", \"--no-start\"], {\n cwd: rootDir,\n stdio: \"pipe\",\n });\n const output: string[] = [];\n child.stdout?.on(\"data\", (data: Buffer) => output.push(data.toString()));\n child.stderr?.on(\"data\", (data: Buffer) => output.push(data.toString()));\n\n return new Promise((resolve) => {\n child.once(\"error\", (error) => resolve({ code: null, output: `${output.join(\"\")}${error.message}` }));\n child.once(\"close\", (code) => resolve({ code, output: output.join(\"\") }));\n });\n}\n\nasync function prepareRuntimeAssets(rootDir: string): Promise<void> {\n /* monorepo \u5E03\u5C40\uFF1Aconfigs/ modules/ \u5E94\u7531 pnpm workspace \u63D0\u4F9B */\n if (isMonorepoLayout(rootDir)) {\n const missing = missingRuntimeAssets(rootDir);\n if (missing.length > 0) {\n throw new Error(t(\"wizard.runtimeMissingAssets\", { list: missing.join(\", \") }));\n }\n return;\n }\n\n seedNpmRuntimeLayout(rootDir);\n}\n\n/** \u975E monorepo \u7684 npm \u5B89\u88C5\u5E03\u5C40\uFF1Aensure \u914D\u7F6E\u9AA8\u67B6 + \u7A7A modules */\nfunction seedNpmRuntimeLayout(rootDir: string): void {\n ensureCoreConfigs(rootDir, [\"db_config\", \"qq_config\", \"bds_updater\", \"permissions\", \"qq_link\"]);\n /* pack-update \u7684 ensure \u4F7F\u7528 runtime ROOT\uFF1Bnpm \u5E03\u5C40\u4E0B\u5E94\u4E0E rootDir \u4E00\u81F4 */\n if (path.resolve(rootDir) === path.resolve(ROOT)) {\n ensurePackUpdateConfigFile();\n void import(\"./module-update/index.js\")\n .then((mod) => mod.ensureModuleUpdateConfigFile())\n .catch(() => {\n /* \u7B56\u7565\u6587\u4EF6\u7A0D\u540E\u5728 mod update / \u5F00\u670D\u65F6\u8FD8\u4F1A\u518D\u786E\u4FDD\u4E00\u6B21 */\n });\n }\n\n const modulesRoot = path.join(rootDir, \"modules\");\n const packagesDir = path.join(modulesRoot, \"packages\");\n fs.mkdirSync(packagesDir, { recursive: true });\n\n const catalogPath = path.join(modulesRoot, \"catalog.json\");\n if (!fs.existsSync(catalogPath)) {\n writeJson(\n catalogPath,\n withConfigSchema({ version: 1, modules: [] }, \"module_catalog\", \"modules\")\n );\n }\n const lockPath = path.join(modulesRoot, \"module-lock.json\");\n if (!fs.existsSync(lockPath)) {\n writeJson(lockPath, { version: 1, modules: {} });\n }\n}\n\n/** \u66F4\u65B0\u65F6\u9ED8\u8BA4\u4FDD\u7559\u7684 BDS \u6587\u4EF6\uFF0C\u4E0E\u9010\u9879\u8BE2\u95EE\u65F6\u7684\u521D\u59CB\u52FE\u9009\u76F8\u540C\u3002 */\nconst DEFAULT_PRESERVE = [\n \"server.properties\",\n \"whitelist.json\",\n \"permissions.json\",\n \"allowlist.json\",\n \"worlds\",\n \"config\",\n] as const;\n\n/** \u5411\u5BFC\u5199\u8FDB db / bds_updater \u7684\u8DEF\u5F84\u4E0E\u7AEF\u53E3\u3002 */\ninterface RuntimeLayout {\n dbDir: string;\n dbPort: number;\n backupDir: string;\n preserve: string[];\n}\n\n/** \u5411\u5BFC\u6536\u96C6\u7684 QQ \u6865\u9009\u62E9\u3002\u53D6\u6D88\u9009\u62E9\u65F6\u4E0D\u4EA7\u751F\u8BE5\u5BF9\u8C61\u3002 */\ninterface QqWizardChoice {\n qqEnabled: boolean;\n qqBackend: \"official\" | \"llbot\";\n qqAppId: string;\n qqAppSecret: string;\n qqSandbox: boolean;\n qqGroupOpenid: string;\n llbotPath?: string;\n llbotEnabled: boolean;\n}\n\n/**\n * \u6570\u636E\u5E93\u3001\u5907\u4EFD\u76EE\u5F55\u548C\u66F4\u65B0\u4FDD\u7559\u9879\u3002\n * \u63A5\u53D7\u9ED8\u8BA4\u503C\u65F6\u4E0D\u518D\u9010\u9879\u63D0\u95EE\uFF1B\u62D2\u7EDD\u540E\u4ECD\u8BE2\u95EE\u76EE\u5F55\u3001\u7AEF\u53E3\u548C\u4FDD\u7559\u9879\u3002\u53D6\u6D88\u5355\u9879\u65F6\u6CBF\u7528\u8BE5\u9879\u9ED8\u8BA4\u3002\n */\nasync function askRuntimeLayout(rootDir: string, bdsResolved: string): Promise<RuntimeLayout> {\n const defaultDbDir = path.join(rootDir, \"data\");\n const defaultBackup = path.join(path.dirname(bdsResolved), \"backups\");\n const useDefaults = await confirm({\n message: t(\"wizard.useDefaults\"),\n initialValue: true,\n });\n if (isCancel(useDefaults) || useDefaults) {\n ensureDirectory(defaultDbDir);\n note(\n c.text(\n t(\"wizard.defaultsApplied\", {\n db: defaultDbDir,\n port: \"3001\",\n backup: defaultBackup,\n })\n ),\n t(\"common.tips\")\n );\n note(c.yellow(t(\"wizard.updaterTip\")), t(\"common.tips\"));\n return {\n dbDir: defaultDbDir,\n dbPort: 3001,\n backupDir: defaultBackup,\n preserve: [...DEFAULT_PRESERVE],\n };\n }\n\n const dbDirInput = await pickDirectory(t(\"wizard.dbDir\"), defaultDbDir);\n const dbDir = ensureDirectory(dbDirInput) ? dbDirInput : defaultDbDir;\n if (dbDir !== dbDirInput) {\n note(c.text(t(\"wizard.usingDefault\", { path: dbDir })), t(\"common.tips\"));\n }\n const dbPortRaw = await text({\n message: t(\"wizard.dbPort\"),\n initialValue: \"3001\",\n validate: (v: any): any => {\n const n = parseInt(v, 10);\n if (isNaN(n) || n < 1024 || n > 65535) return t(\"wizard.portRange\");\n if (v.length === 0) return t(\"wizard.valueRequired\");\n },\n });\n const dbPort = isCancel(dbPortRaw) ? 3001 : parseInt(dbPortRaw as string, 10);\n const backupDir = await pickDirectory(t(\"wizard.backupDir\"), defaultBackup);\n const preserveOptions = [\n { value: \"server.properties\", label: \"server.properties\", hint: t(\"wizard.preserve.serverProps\") },\n { value: \"whitelist.json\", label: \"whitelist.json\" },\n { value: \"permissions.json\", label: \"permissions.json\" },\n { value: \"allowlist.json\", label: \"allowlist.json\" },\n { value: \"worlds\", label: \"worlds/\", hint: t(\"wizard.preserve.worlds\") },\n { value: \"config\", label: \"config/\", hint: t(\"wizard.preserve.config\") },\n ] as const;\n const pr = await multiselect({\n message: t(\"wizard.preserve\"),\n options: [...preserveOptions],\n initialValues: [...DEFAULT_PRESERVE],\n required: false,\n });\n note(c.yellow(t(\"wizard.updaterTip\")), t(\"common.tips\"));\n return {\n dbDir,\n dbPort,\n backupDir,\n preserve: isCancel(pr) ? [] : (pr as string[]),\n };\n}\n\n/**\n * \u9009\u62E9 QQ \u6865\u540E\u7AEF\u3002\u9ED8\u8BA4\u4E0D\u542F\u7528\u3002\n * \u53D6\u6D88\u65F6\u8FD4\u56DE null\uFF0C\u8C03\u7528\u65B9\u7ED3\u675F\u5411\u5BFC\u4E14\u4E0D\u5199\u5165 initialized_at\u3002\n */\nasync function askQqBridge(rootDir: string): Promise<QqWizardChoice | null> {\n const qqBackendPick = await select({\n message: t(\"wizard.qqBackend\"),\n options: [\n { value: \"disabled\", label: t(\"wizard.qqBackend.disabled\"), hint: t(\"wizard.qqBackend.disabledHint\") },\n { value: \"official\", label: t(\"wizard.qqBackend.official\"), hint: t(\"wizard.qqBackend.officialHint\") },\n { value: \"llbot\", label: t(\"wizard.qqBackend.llbot\"), hint: t(\"wizard.qqBackend.llbotHint\") },\n ],\n initialValue: \"disabled\",\n });\n if (isCancel(qqBackendPick)) return null;\n\n const qqBackendChoice = String(qqBackendPick || \"disabled\");\n if (qqBackendChoice === \"disabled\") {\n return {\n qqEnabled: false,\n qqBackend: \"official\",\n qqAppId: \"\",\n qqAppSecret: \"\",\n qqSandbox: false,\n qqGroupOpenid: \"\",\n llbotEnabled: false,\n };\n }\n if (qqBackendChoice === \"llbot\") {\n const picked = await pickDirectory(t(\"wizard.llbotDir\"), path.join(rootDir, \"LLBOT\"));\n let llbotPath = picked;\n if (!ensureDirectory(picked)) {\n llbotPath = path.join(rootDir, \"LLBOT\");\n note(c.text(t(\"wizard.usingDefault\", { path: llbotPath })), t(\"common.tips\"));\n }\n return {\n qqEnabled: true,\n qqBackend: \"llbot\",\n qqAppId: \"\",\n qqAppSecret: \"\",\n qqSandbox: false,\n qqGroupOpenid: \"\",\n llbotPath,\n llbotEnabled: true,\n };\n }\n\n const appIdRaw = await text({\n message: t(\"wizard.qqAppId\"),\n placeholder: \"102xxxxx\",\n validate: (v: any): any => {\n if (!String(v ?? \"\").trim()) return t(\"wizard.valueRequired\");\n },\n });\n const secretRaw = await password({\n message: t(\"wizard.qqAppSecret\"),\n validate: (v: any): any => {\n if (!String(v ?? \"\").trim()) return t(\"wizard.valueRequired\");\n },\n });\n const sandboxPick = await confirm({\n message: t(\"wizard.qqSandbox\"),\n initialValue: false,\n });\n const openidRaw = await text({\n message: t(\"wizard.qqGroupOpenid\"),\n placeholder: t(\"wizard.qqGroupOpenidHint\"),\n });\n return {\n qqEnabled: true,\n qqBackend: \"official\",\n qqAppId: isCancel(appIdRaw) ? \"\" : String(appIdRaw).trim(),\n qqAppSecret: isCancel(secretRaw) ? \"\" : String(secretRaw).trim(),\n qqSandbox: isCancel(sandboxPick) ? false : !!sandboxPick,\n qqGroupOpenid: isCancel(openidRaw) ? \"\" : String(openidRaw).trim(),\n llbotEnabled: false,\n };\n}\n\n/**\n * \u9009\u62E9\u8981\u542F\u7528\u6216\u5B89\u88C5\u7684\u6A21\u5757\u3002\n * \u76EE\u5F55\u91CC\u5DF2\u6709\u6A21\u5757\u65F6\u53EA\u95EE\u542F\u505C\uFF1B\u7A7A\u76EE\u5F55\u624D\u8BFB\u5B98\u65B9\u7D22\u5F15\uFF0C\u907F\u514D\u628A\u542F\u7528\u548C\u5B89\u88C5\u6DF7\u6210\u540C\u4E00\u6B21\u9009\u62E9\u3002\n */\nasync function askModules(rootDir: string): Promise<string[]> {\n const catalog = readJson<Catalog>(modulePath(rootDir, \"catalog.json\")) ?? {\n version: 1,\n modules: [],\n };\n const catalogModules: Array<{ id: string; name?: string; description?: string; canDisable?: boolean }> = [];\n if (Array.isArray(catalog.modules)) {\n for (const m of catalog.modules) {\n catalogModules.push({\n id: String(m.id ?? \"\"),\n name: String(m.name ?? m.id ?? \"\"),\n description: String(m.description ?? \"\"),\n canDisable: m.canDisable !== false,\n });\n }\n }\n\n if (catalogModules.length > 0) {\n note(c.text(t(\"wizard.modulesFound\", { count: catalogModules.length })), t(\"wizard.step4\"));\n const lockedMd: Array<{ value: string; label: string; hint: string; disabled?: boolean }> = [];\n const optionalMd: Array<{ value: string; label: string; hint: string }> = [];\n for (const k of catalogModules) {\n const option = {\n value: k.id,\n label: String(k.name),\n hint: String(k.description ?? t(\"wizard.emptyHint\")),\n };\n if (k.canDisable === false) lockedMd.push({ ...option, disabled: true });\n else optionalMd.push(option);\n }\n const picked = await multiselect({\n message: t(\"wizard.enableModules\"),\n options: [...lockedMd, ...optionalMd],\n required: false,\n });\n return isCancel(picked) ? [] : (picked as string[]);\n }\n\n note(c.text(t(\"wizard.modulesNone\")), t(\"wizard.step4\"));\n const spin = spinner();\n spin.start(t(\"wizard.registryLoading\"));\n const { index } = await resolveRegistryIndex();\n const ids = Object.keys(index).sort((a, b) => a.localeCompare(b));\n if (ids.length === 0) {\n spin.stop(t(\"wizard.registryOffline\"));\n return [];\n }\n spin.stop(t(\"wizard.modulesFound\", { count: String(ids.length) }));\n const picked = await multiselect({\n message: t(\"wizard.installFromRegistry\"),\n options: ids.map((id) => ({ value: id, label: id })),\n required: false,\n });\n return isCancel(picked) ? [] : (picked as string[]);\n}\n\nexport async function runWizard(): Promise<void> {\n intro(c.bold(t(\"wizard.intro\")));\n\n const langPick = await select({\n message: t(\"locale.wizard\"),\n options: [\n { value: \"zh-CN\", label: t(\"locale.opt.zh\") },\n { value: \"en\", label: t(\"locale.opt.en\") },\n ],\n initialValue: \"zh-CN\",\n });\n if (!isCancel(langPick)) {\n persistLocale(ROOT, langPick as Locale);\n }\n\n // Already initialized only when runtime.json#initialized_at is set (empty db_config skeleton does not count).\n if (isRuntimeInitialized()) {\n const r = await confirm({ message: t(\"wizard.rerun\"), initialValue: false });\n if (isCancel(r) || !r) {\n outro(c.dim(t(\"wizard.skipped\")));\n return;\n }\n }\n // Step 1: Runtime Environment\uFF08\u53EA\u64AD\u79CD configs/modules\uFF0C\u4E0D\u5199 initialized_at\u3001\u4E0D\u5EFA data/\uFF09\n const rootDir = ROOT;\n note(c.text(t(\"wizard.runtimeRoot\", { root: rootDir })), t(\"wizard.step1\"));\n\n try {\n await prepareRuntimeAssets(rootDir);\n } catch (error) {\n outro(c.red(t(\"wizard.prepFailed\", { message: (error as Error).message })));\n return;\n }\n\n // Step 2: BDS \u76EE\u5F55\u3002\u6570\u636E\u5E93\u548C QQ \u653E\u5230\u540E\u9762\uFF0C\u80FD\u7528\u9ED8\u8BA4\u503C\u5C31\u4E0D\u518D\u9010\u9879\u95EE\u3002\n note(c.text(t(\"wizard.step2Note\")), t(\"wizard.step2\"));\n\n const bdsResolved = await pickDirectory(t(\"wizard.bdsDir\"), path.join(rootDir, \"BDS\"));\n if (!ensureDirectory(bdsResolved)) {\n outro(c.red(t(\"wizard.cannotCreateBds\", { dir: bdsResolved })));\n return;\n }\n\n // Step 3: \u5148\u786E\u8BA4\u53EF\u6267\u884C\u6587\u4EF6\u548C EULA\uFF0C\u518D\u51B3\u5B9A\u8981\u4E0D\u8981\u4E0B\u8F7D\u3002\n const bdsExe = bdsExePath(bdsResolved);\n const bdsExists = fs.existsSync(bdsExe);\n\n note(\n bdsExists\n ? c.green(t(\"wizard.bdsFound\", { path: bdsResolved }))\n : c.yellow(t(\"wizard.bdsNotFound\", { path: bdsResolved })),\n t(\"wizard.step3\")\n );\n\n const EULA = await confirm({\n message: t(\"wizard.eula\"),\n initialValue: false,\n });\n if (isCancel(EULA) || !EULA) {\n outro(c.yellow(t(\"wizard.disagreed\")));\n return;\n }\n\n let downloadBds = false;\n let bdsChannel = \"release\";\n\n if (!bdsExists) {\n const d = await confirm({ message: t(\"wizard.downloadBds\"), initialValue: true });\n if (!isCancel(d) && d) {\n const ch = await select({\n message: t(\"wizard.selectChannel\"),\n options: [\n { value: \"release\", label: t(\"wizard.channel.release\"), hint: t(\"wizard.channel.releaseHint\") },\n { value: \"preview\", label: t(\"wizard.channel.preview\"), hint: t(\"wizard.channel.previewHint\") },\n ],\n initialValue: \"release\",\n });\n if (!isCancel(ch)) {\n bdsChannel = ch as string;\n downloadBds = true;\n }\n }\n }\n\n const { dbDir, dbPort, backupDir, preserve } = await askRuntimeLayout(rootDir, bdsResolved);\n if (downloadBds && !ensureDirectory(backupDir)) {\n outro(c.red(t(\"wizard.cannotCreateBackup\", { dir: backupDir })));\n return;\n }\n\n const qq = await askQqBridge(rootDir);\n if (!qq) {\n outro(c.dim(t(\"wizard.skipped\")));\n return;\n }\n const { qqEnabled, qqBackend, qqAppId, qqAppSecret, qqSandbox, qqGroupOpenid, llbotPath, llbotEnabled } = qq;\n\n const selectedModules = await askModules(rootDir);\n\n const wizardTasks = [\n {\n title: t(\"wizard.updatingConfigs\"),\n task: () => {\n const slashPath = (value: string) => value.replace(/\\\\/g, \"/\");\n patchJson(rootDir, \"db_config.json\", {\n db_port: dbPort,\n dbDir: slashPath(path.relative(rootDir, path.join(dbDir, \"sfmc_data.db\"))),\n modulesDir: \"modules\",\n });\n\n const llbotOn = qqBackend === \"llbot\" && !!llbotEnabled && !!llbotPath;\n const qqNotify = qqEnabled && (qqBackend === \"official\" || llbotOn);\n const exeName = llbotExeName();\n const currentQq = readJson<QQBridgeConfig>(configPath(rootDir, \"qq_config.json\")) ?? {};\n patchJson(rootDir, \"qq_config.json\", {\n qq_enabled: qqEnabled,\n qq_backend: qqBackend,\n official: {\n ...currentQq.official,\n app_id: qqAppId,\n app_secret: qqAppSecret,\n sandbox: qqSandbox,\n group_openid: qqGroupOpenid,\n },\n llbot: {\n ...currentQq.llbot,\n enabled: llbotOn,\n // path = \u53EF\u6267\u884C\u6587\u4EF6\uFF1Bcwd = \u8FD0\u884C\u76EE\u5F55\uFF08\u5411\u5BFC\u9009\u7684\u662F\u76EE\u5F55\uFF09\n path: llbotPath ? slashPath(path.join(llbotPath, exeName)) : \"\",\n cwd: llbotPath ? slashPath(llbotPath) : \"\",\n },\n });\n patchJson(rootDir, \"bds_updater.json\", {\n bds_path: slashPath(bdsResolved),\n channel: bdsChannel,\n backup_dir: slashPath(backupDir),\n preserve,\n qq_notify: qqNotify,\n });\n /* \u8DEF\u5F84\u9009\u5B9A\u540E\u518D\u6807\u8BB0\u5DF2\u521D\u59CB\u5316\uFF0C\u907F\u514D\u534A\u9014\u53D6\u6D88\u4ECD\u7559\u4E0B data/ \u8BED\u4E49 */\n patchJson(rootDir, \"runtime.json\", {\n runtime_root: rootDir,\n initialized_at: new Date().toISOString(),\n locale: isCancel(langPick) ? undefined : (langPick as string),\n });\n return t(\"wizard.configsUpdated\");\n },\n },\n {\n title: t(\"wizard.updatingModules\"),\n task: async (): Promise<string> => {\n const lock = readJson<ModuleLock>(modulePath(rootDir, \"module-lock.json\")) ?? {\n version: 1,\n modules: {},\n };\n if (!lock.modules) lock.modules = {};\n const now = Date.now();\n for (const id of selectedModules) lock.modules[id] = { enabled: true, updatedAt: now };\n writeJson(modulePath(rootDir, \"module-lock.json\"), lock);\n return t(\"wizard.modulesUpdated\");\n },\n },\n {\n title: t(\"wizard.initDb\"),\n task: async (): Promise<string> => {\n const child = spawnService(\"db\", [], {\n cwd: rootDir,\n stdio: \"ignore\",\n env: { ...process.env, DB_PORT: String(dbPort) },\n });\n if (!(await waitForHealth(dbPort))) {\n child.kill(\"SIGTERM\");\n return t(\"wizard.dbTimeout\");\n }\n\n /* /api/health \u5728 listen \u4E4B\u540E\u624D\u8FD4\u56DE\uFF0C\u800C\u5EFA\u8868\u53D1\u751F\u5728 listen \u4E4B\u524D\uFF0C\u4E0D\u5FC5\u518D\u7A7A\u7B49\u3002 */\n child.kill(\"SIGTERM\");\n setTimeout(() => child.kill(\"SIGKILL\"), 3000).unref();\n return t(\"wizard.dbOk\");\n },\n },\n ];\n if (downloadBds) {\n wizardTasks.push({\n title: t(\"wizard.downloadingBds\"),\n task: async (): Promise<string> => {\n const result = await runBdsUpdate(rootDir, bdsChannel);\n if (result.code !== 0) {\n return t(\"wizard.downloadFail\");\n }\n return t(\"wizard.bdsDownloaded\");\n },\n });\n }\n try {\n await tasks(wizardTasks);\n } catch (e) {\n outro(c.red(t(\"common.error\", { message: (e as Error).message })));\n return;\n }\n\n /* install \u2192 build \u2192 deploy chain */\n await runInstallBuildDeploy(rootDir, selectedModules, bdsResolved);\n\n outro(c.green(t(\"wizard.done\")));\n}\n\nasync function runInstallBuildDeploy(rootDir: string, selectedModules: string[], bdsResolved: string): Promise<void> {\n if (selectedModules.length > 0) {\n const fetchScript = resolveFetchModule();\n if (fetchScript) {\n const installT = [\n {\n title: t(\"wizard.installing\", { count: selectedModules.length }),\n task: async (): Promise<string> => {\n /* \u5411\u5BFC\u91CC\u52FE\u9009\u7684\u542F\u505C\u5DF2\u7ECF\u5199\u5165 lock\uFF0C\u5B89\u88C5\u65F6\u4FDD\u7559\uFF0C\u4E0D\u7528\u6E05\u5355\u91CC\u7684\u9ED8\u8BA4\u503C\u8986\u76D6\u3002 */\n execFileSync(process.execPath, [fetchScript, \"install\", ...selectedModules, \"--preserve-lock\"], {\n cwd: rootDir,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n env: { ...process.env, SFMC_ROOT: rootDir },\n });\n return t(\"wizard.installed\", { count: selectedModules.length });\n },\n },\n ];\n try {\n await tasks(installT);\n } catch (e) {\n note(c.yellow(t(\"wizard.installFailed\", { message: (e as Error).message })));\n }\n } else {\n note(c.yellow(t(\"wizard.fetchMissing\", { list: selectedModules.join(\", \") })));\n }\n } else {\n note(c.dim(t(\"wizard.noModulesSelected\")));\n }\n\n const { cmdBehaviorPackBuild, cmdBehaviorPackDeploy } = await import(\"./commands-behavior-pack.js\");\n const buildT = [\n {\n title: t(\"wizard.buildingBp\"),\n task: async (): Promise<string> => {\n const r = await cmdBehaviorPackBuild([]);\n if (!r.ok) throw new Error(r.message);\n return r.message;\n },\n },\n ];\n try {\n await tasks(buildT);\n } catch (e) {\n note(c.yellow(t(\"wizard.buildFailed\", { message: (e as Error).message })));\n return;\n }\n\n const deployT = [\n {\n title: t(\"wizard.deploying\", { path: bdsResolved }),\n task: async (): Promise<string> => {\n const r = await cmdBehaviorPackDeploy([]);\n if (!r.ok) throw new Error(r.message);\n return r.message;\n },\n },\n ];\n try {\n await tasks(deployT);\n note(c.green(t(\"wizard.restartBds\")));\n } catch (e) {\n note(c.yellow(t(\"wizard.deployFailed\", { message: (e as Error).message })));\n }\n void rootDir;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["t", "picked"]
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sfmc-bds/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"description": "SFMC management CLI — REPL, service supervisor, module install, behavior-pack build/deploy",
|
|
5
5
|
"author": "Shiroha7z",
|
|
6
6
|
"license": "AGPL-3.0-only",
|
|
@@ -55,13 +55,14 @@
|
|
|
55
55
|
"esbuild": "^0.28.1",
|
|
56
56
|
"ajv": "8.20.0",
|
|
57
57
|
"jsonc-parser": "3.3.1",
|
|
58
|
-
"@sfmc-bds/bds-tools": "0.2.
|
|
59
|
-
"@sfmc-bds/devkit": "2.0.
|
|
60
|
-
"@sfmc-bds/sdk": "0.
|
|
61
|
-
"@sfmc-bds/management": "0.3.
|
|
58
|
+
"@sfmc-bds/bds-tools": "0.2.8",
|
|
59
|
+
"@sfmc-bds/devkit": "2.0.4",
|
|
60
|
+
"@sfmc-bds/sdk": "0.4.0",
|
|
61
|
+
"@sfmc-bds/management": "0.3.3",
|
|
62
|
+
"@sfmc-bds/db-server": "0.5.1"
|
|
62
63
|
},
|
|
63
64
|
"devDependencies": {
|
|
64
|
-
"@sfmc-bds/tools": "0.2.
|
|
65
|
+
"@sfmc-bds/tools": "0.2.8"
|
|
65
66
|
},
|
|
66
67
|
"publishConfig": {
|
|
67
68
|
"access": "public",
|
|
@@ -261,7 +261,9 @@ function afterInstall(folder, opts = {}) {
|
|
|
261
261
|
const moduleRoot = path.join(TARGET, folder);
|
|
262
262
|
const preview = loadPackageCatalogEntry(folder);
|
|
263
263
|
if (!preview) throw new Error(`packages/${folder}: 无法读取 sapi/manifest.json`);
|
|
264
|
-
if (isRetiredPlatformModule(preview.id))
|
|
264
|
+
if (isRetiredPlatformModule(preview.id)) {
|
|
265
|
+
throw new Error(`${preview.id} 已收编至平台,无需安装;请更新平台行为包。`);
|
|
266
|
+
}
|
|
265
267
|
const seeded = seedModuleConfig({
|
|
266
268
|
moduleRoot,
|
|
267
269
|
projectRoot: ROOT,
|
|
@@ -896,7 +898,9 @@ async function copyDir(src, dst) {
|
|
|
896
898
|
* @param {{ from: any; sha256?: null; link: any; }} flags
|
|
897
899
|
*/
|
|
898
900
|
async function installOne(id, flags) {
|
|
899
|
-
if (isRetiredPlatformModule(id))
|
|
901
|
+
if (isRetiredPlatformModule(id)) {
|
|
902
|
+
throw new Error(`${id} 已收编至平台,无需安装;请更新平台行为包。`);
|
|
903
|
+
}
|
|
900
904
|
let from = flags.from;
|
|
901
905
|
if (!from) {
|
|
902
906
|
from = await defaultSourceFor(id);
|