openclaw-channel-xiaozhu 3.1.3 → 3.1.4

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.
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=postinstall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postinstall.d.ts","sourceRoot":"","sources":["../../src/cli/postinstall.ts"],"names":[],"mappings":""}
@@ -0,0 +1,111 @@
1
+ #!/usr/bin/env node
2
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
3
+ import { homedir } from "node:os";
4
+ import { dirname, join } from "node:path";
5
+ import { createInterface } from "node:readline/promises";
6
+ import { stdin, stdout } from "node:process";
7
+ import { applyNonInteractiveConfig } from "./init-config.js";
8
+ const CHANNEL_ID = "openclaw-channel-xiaozhu";
9
+ const DEFAULT_PLATFORM_BASE_URL = "https://xiaozhu.wxwyzn.com";
10
+ const DEFAULT_PORT = 18800;
11
+ function stripJsonComments(raw) {
12
+ return raw
13
+ .replace(/\/\*[\s\S]*?\*\//g, "")
14
+ .replace(/^\s*\/\/.*$/gm, "");
15
+ }
16
+ function loadConfig(configPath) {
17
+ if (!existsSync(configPath))
18
+ return {};
19
+ const raw = readFileSync(configPath, "utf8");
20
+ if (!raw.trim())
21
+ return {};
22
+ try {
23
+ return JSON.parse(raw);
24
+ }
25
+ catch {
26
+ return JSON.parse(stripJsonComments(raw));
27
+ }
28
+ }
29
+ function writeConfig(configPath, cfg) {
30
+ mkdirSync(dirname(configPath), { recursive: true });
31
+ writeFileSync(configPath, `${JSON.stringify(cfg, null, 2)}\n`, "utf8");
32
+ }
33
+ function parsePort(raw) {
34
+ const trimmed = raw.trim();
35
+ if (!trimmed)
36
+ return undefined;
37
+ const value = Number(trimmed);
38
+ if (!Number.isInteger(value) || value < 1 || value > 65535)
39
+ return undefined;
40
+ return value;
41
+ }
42
+ function normalizeSecretInput(raw) {
43
+ const trimmed = raw.trim();
44
+ return trimmed || undefined;
45
+ }
46
+ function shouldSkipPrompt() {
47
+ if (process.env.OPENCLAW_XIAOZHU_POSTINSTALL_PROMPT === "0")
48
+ return true;
49
+ if (process.env.CI === "true")
50
+ return true;
51
+ if (process.env.npm_config_global === "true")
52
+ return false;
53
+ return false;
54
+ }
55
+ async function runInteractiveSetup() {
56
+ if (!stdin.isTTY || !stdout.isTTY)
57
+ return;
58
+ const rl = createInterface({ input: stdin, output: stdout });
59
+ const configPath = process.env.OPENCLAW_CONFIG_PATH || join(homedir(), ".openclaw", "openclaw.json");
60
+ const defaultAccountId = "default";
61
+ try {
62
+ const enable = (await rl.question("[openclaw-channel-xiaozhu] 检测到安装完成,是否现在配置凭证?[Y/n] ")).trim().toLowerCase();
63
+ if (enable === "n" || enable === "no") {
64
+ stdout.write("[openclaw-channel-xiaozhu] 跳过配置。后续可运行 openclaw-xiaozhu-init 手动配置。\n");
65
+ return;
66
+ }
67
+ const accountIdInput = (await rl.question(`账号 ID(默认 ${defaultAccountId}):`)).trim();
68
+ const accountId = accountIdInput || defaultAccountId;
69
+ const clientId = normalizeSecretInput(await rl.question("clientId(可留空,后续补齐):"));
70
+ const clientSecret = normalizeSecretInput(await rl.question("clientSecret(可留空,后续补齐):"));
71
+ const portInput = await rl.question(`端口(默认 ${DEFAULT_PORT}):`);
72
+ const platformUrlInput = (await rl.question(`平台地址(默认 ${DEFAULT_PLATFORM_BASE_URL}):`)).trim();
73
+ const port = parsePort(portInput) ?? DEFAULT_PORT;
74
+ const platformBaseUrl = platformUrlInput || DEFAULT_PLATFORM_BASE_URL;
75
+ if ((clientId && !clientSecret) || (!clientId && clientSecret)) {
76
+ stdout.write("[openclaw-channel-xiaozhu] 仅输入了单边凭证,已忽略本次凭证写入。可后续使用 init 命令补齐。\n");
77
+ }
78
+ const currentCfg = loadConfig(configPath);
79
+ const applied = applyNonInteractiveConfig({
80
+ cfg: currentCfg,
81
+ channelId: CHANNEL_ID,
82
+ accountId,
83
+ ...(clientId && clientSecret ? { clientId, clientSecret } : {}),
84
+ port,
85
+ platformBaseUrl,
86
+ allowMissingCredentials: true,
87
+ });
88
+ if (applied.changed) {
89
+ writeConfig(configPath, applied.nextCfg);
90
+ stdout.write(`[openclaw-channel-xiaozhu] 配置已写入: ${configPath}\n`);
91
+ stdout.write("[openclaw-channel-xiaozhu] 请执行: openclaw gateway restart\n");
92
+ }
93
+ else {
94
+ stdout.write("[openclaw-channel-xiaozhu] 配置已是最新,无需修改。\n");
95
+ }
96
+ }
97
+ catch (error) {
98
+ const message = error instanceof Error ? error.message : String(error);
99
+ stdout.write(`[openclaw-channel-xiaozhu] 配置失败: ${message}\n`);
100
+ }
101
+ finally {
102
+ rl.close();
103
+ }
104
+ }
105
+ async function main() {
106
+ if (shouldSkipPrompt())
107
+ return;
108
+ await runInteractiveSetup();
109
+ }
110
+ void main();
111
+ //# sourceMappingURL=postinstall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postinstall.js","sourceRoot":"","sources":["../../src/cli/postinstall.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openclaw-channel-xiaozhu",
3
- "version": "3.1.3",
3
+ "version": "3.1.4",
4
4
  "description": "OpenClaw 小助渠道插件 — 通过 HTTP/SSE 接口接入 AI 对话",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -48,6 +48,7 @@
48
48
  "typecheck": "tsc --noEmit",
49
49
  "clean": "rm -rf dist",
50
50
  "init:help": "node ./dist/cli/init.js --help",
51
+ "postinstall": "node -e \"const fs=require('fs');const cp=require('child_process');if(fs.existsSync('./dist/cli/postinstall.js'))cp.spawnSync(process.execPath,['./dist/cli/postinstall.js'],{stdio:'inherit'})\"",
51
52
  "prepublishOnly": "npm run clean && npm run build"
52
53
  },
53
54
  "engines": {