@karinjs/plugin-basic 1.2.0 → 1.3.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.
@@ -1,7 +1,16 @@
1
+ import {
2
+ cfg,
3
+ sendToFirstAdmin
4
+ } from "../chunk-PHDIUMOH.js";
5
+ import {
6
+ render
7
+ } from "../chunk-QUWYQJAF.js";
8
+
1
9
  // src/apps/update.ts
2
- import fs from "node:fs";
3
- import path from "node:path";
4
- import { changelog, checkGitPluginUpdate, checkPkgUpdate, getCommit, getPlugins, getPkgVersion, karin, updateAllGitPlugin, updateAllPkg, updateGitPlugin, updatePkg } from "node-karin";
10
+ import fs from "fs";
11
+ import path from "path";
12
+ import { changelog, checkGitPluginUpdate, checkPkgUpdate, getCommit, getPlugins, getPkgVersion, karin, updateAllGitPlugin, updateAllPkg, updateGitPlugin, updatePkg, segment, restartDirect, db, logger, getPluginInfo } from "node-karin";
13
+ var NODE_KARIN_UPDATE_KEY = "basic:update:node-karin";
5
14
  var cache = [];
6
15
  var getAll = async () => {
7
16
  if (cache.length) return cache;
@@ -19,19 +28,119 @@ var getAll = async () => {
19
28
  return list;
20
29
  };
21
30
  var plugins = karin.command(/^#插件列表$/, async (e) => {
22
- const list = await getAll();
23
- list.forEach((item, index) => {
24
- item += `${index + 1}. ${item}`;
25
- });
26
- await e.reply([
27
- "\n\u63D2\u4EF6\u5217\u8868\uFF1A",
28
- "\u66F4\u65B0\uFF1A#\u66F4\u65B0\u63D2\u4EF6 \u5E8F\u53F7\u6216\u540D\u79F0",
29
- "\u68C0\u67E5\u66F4\u65B0\uFF1A#\u68C0\u67E5\u66F4\u65B0 \u5E8F\u53F7\u6216\u540D\u79F0",
30
- "\u65E5\u5FD7\uFF1A#\u66F4\u65B0\u65E5\u5FD7 \u6761\u6570 \u5E8F\u53F7\u6216\u540D\u79F0",
31
- ...list
32
- ].join("\n"), { at: true });
33
- return true;
31
+ try {
32
+ const allPlugins = await getPlugins("all", true);
33
+ const pluginsData = [];
34
+ let index = 1;
35
+ for (const plugin of allPlugins) {
36
+ if (plugin.type === "app") {
37
+ const apps = plugin.apps || [];
38
+ for (const appPath of apps) {
39
+ const fileName = path.basename(appPath, path.extname(appPath));
40
+ pluginsData.push({
41
+ index: index++,
42
+ name: fileName,
43
+ type: "app",
44
+ typeIcon: "\u{1F50C}",
45
+ version: "",
46
+ description: "",
47
+ author: "\u672A\u77E5",
48
+ dir: appPath
49
+ });
50
+ }
51
+ } else {
52
+ const pkgData = plugin.pkgData || {};
53
+ let author = "\u672A\u77E5";
54
+ if (typeof pkgData.author === "string") {
55
+ author = pkgData.author;
56
+ } else if (pkgData.author && typeof pkgData.author === "object" && "name" in pkgData.author) {
57
+ author = pkgData.author.name || "\u672A\u77E5";
58
+ }
59
+ const description = pkgData.description || "";
60
+ const version = pkgData.version || "";
61
+ const typeIcon = plugin.type === "npm" ? "\u{1F4E6}" : "\u{1F527}";
62
+ pluginsData.push({
63
+ index: index++,
64
+ name: plugin.name,
65
+ type: plugin.type,
66
+ typeIcon,
67
+ version,
68
+ description,
69
+ author,
70
+ dir: plugin.dir
71
+ });
72
+ }
73
+ }
74
+ if (pluginsData.length === 0) {
75
+ await e.reply("\n\u6682\u65E0\u63D2\u4EF6", { at: true });
76
+ return true;
77
+ }
78
+ const img = await render("plugins/index", {
79
+ plugins: pluginsData,
80
+ total: pluginsData.length,
81
+ date: (/* @__PURE__ */ new Date()).toLocaleString("zh-CN")
82
+ });
83
+ await e.reply(img);
84
+ return true;
85
+ } catch (error) {
86
+ logger.error("\u6E32\u67D3\u63D2\u4EF6\u5217\u8868\u5931\u8D25:", error);
87
+ try {
88
+ const list = await getAll();
89
+ const textList = list.map((item, index) => `${index + 1}. ${item}`);
90
+ await e.reply([
91
+ "\n\u63D2\u4EF6\u5217\u8868\uFF1A",
92
+ "\u66F4\u65B0\uFF1A#\u66F4\u65B0\u63D2\u4EF6 \u540D\u79F0",
93
+ "\u68C0\u67E5\u66F4\u65B0\uFF1A#\u68C0\u67E5\u66F4\u65B0 \u5E8F\u53F7\u6216\u540D\u79F0",
94
+ "\u65E5\u5FD7\uFF1A#\u66F4\u65B0\u65E5\u5FD7 \u6761\u6570 \u5E8F\u53F7\u6216\u540D\u79F0",
95
+ ...textList
96
+ ].join("\n"), { at: true });
97
+ } catch (fallbackError) {
98
+ logger.error("\u53D1\u9001\u6587\u672C\u63D2\u4EF6\u5217\u8868\u5931\u8D25:", fallbackError);
99
+ await e.reply("\n\u83B7\u53D6\u63D2\u4EF6\u5217\u8868\u5931\u8D25\uFF0C\u8BF7\u67E5\u770B\u65E5\u5FD7", { at: true });
100
+ }
101
+ return true;
102
+ }
34
103
  }, { name: "\u63D2\u4EF6\u5217\u8868", perm: "admin" });
104
+ var updatePlugin = karin.command(/^#(全部)?(强制)?更新(.*)?$/, async (e) => {
105
+ const [, all, force, name = "node-karin"] = e.msg.match(/^#(全部)?(强制)?更新(.*)?$/);
106
+ const cmd = force ? "git reset --hard && git pull --allow-unrelated-histories" : "git pull";
107
+ if (all) {
108
+ try {
109
+ const git = await updateAllGitPlugin(cmd);
110
+ const npm = await updateAllPkg();
111
+ await e.reply([
112
+ "\n\u5168\u90E8\u66F4\u65B0\u5B8C\u6210",
113
+ "-----",
114
+ git,
115
+ "-----",
116
+ npm
117
+ ].join("\n"), { at: true });
118
+ } catch (error) {
119
+ await e.reply(`
120
+ \u66F4\u65B0\u5168\u90E8\u63D2\u4EF6\u5931\u8D25: ${error.message || "\u672A\u77E5\u9519\u8BEF"}`, { at: true });
121
+ }
122
+ } else {
123
+ let res;
124
+ if (name !== "node-karin") {
125
+ const info = getPluginInfo(name.trim());
126
+ if (!info) return await e.reply("\u63D2\u4EF6\u672A\u5B89\u88C5~", { reply: true });
127
+ if (info.type === "app") return await e.reply("\u5E94\u7528\u63D2\u4EF6\u4E0D\u652F\u6301\u66F4\u65B0~", { reply: true });
128
+ res = info.type === "git" ? await updateGitPlugin(info.dir, cmd, 120) : await updatePkg(info.name);
129
+ } else {
130
+ res = await updatePkg("node-karin");
131
+ }
132
+ if (res.status === "failed") {
133
+ const { data } = res;
134
+ const msg = typeof data === "string" ? data : `\u83B7\u53D6\u66F4\u65B0\u4FE1\u606F\u5931\u8D25: ${data.message || "\u672A\u77E5\u9519\u8BEF"}`;
135
+ await e.reply(`
136
+ ${msg}`, { at: true });
137
+ return true;
138
+ }
139
+ return await e.reply(`
140
+ \u66F4\u65B0\u6210\u529F
141
+ ${res.data}`, { at: true });
142
+ }
143
+ });
35
144
  var check = karin.command(/^#检查更新/, async (e) => {
36
145
  let name = e.msg.replace(/^#检查更新/, "").trim();
37
146
  const index = Number(name);
@@ -94,54 +203,6 @@ ${tips}`, { at: true });
94
203
  await e.reply("\n\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u63D2\u4EF6\u540D\u79F0\u6216\u5E8F\u53F7~", { at: true });
95
204
  return true;
96
205
  }, { name: "\u68C0\u67E5\u66F4\u65B0", perm: "admin" });
97
- var update = karin.command(/^#(强制)?更新(插件)?(?!列表|日志)/, async (e) => {
98
- let name = e.msg.replace(/^#(强制)?更新(插件)?(?!列表|日志)/, "").trim();
99
- const index = Number(name);
100
- if (index && typeof index === "number") {
101
- const list = await getAll();
102
- name = list[index - 1];
103
- }
104
- if (!name) {
105
- await e.reply("\n\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u63D2\u4EF6\u540D\u79F0\u6216\u5E8F\u53F7~", { at: true });
106
- return true;
107
- }
108
- if (name.includes("git:")) {
109
- name = name.replace("git:", "");
110
- const file = path.join(process.cwd(), "plugins", name.replace("git:", ""));
111
- let cmd = "git pull";
112
- if (e.msg.includes("\u5F3A\u5236")) cmd = "git reset --hard && git pull --allow-unrelated-histories";
113
- const result = await updateGitPlugin(file, cmd, 120);
114
- if (result.status === "failed") {
115
- const { data } = result;
116
- const msg = typeof data === "string" ? data : `\u83B7\u53D6\u66F4\u65B0\u4FE1\u606F\u5931\u8D25: ${data.message || "\u672A\u77E5\u9519\u8BEF"}`;
117
- await e.reply(msg, { at: true });
118
- return true;
119
- }
120
- await e.reply(`
121
- ${result.data}`, { at: true });
122
- return true;
123
- }
124
- if (name.includes("npm:")) {
125
- name = name.replace("npm:", "");
126
- const result = await updatePkg(name);
127
- if (result.status === "failed") {
128
- const { data } = result;
129
- const msg = typeof data === "string" ? data : `\u83B7\u53D6\u66F4\u65B0\u4FE1\u606F\u5931\u8D25: ${data.message || "\u672A\u77E5\u9519\u8BEF"}`;
130
- await e.reply(`
131
- ${msg}`, { at: true });
132
- return true;
133
- }
134
- const log2 = parseLog(name, result.local, result.remote);
135
- await e.reply(`
136
- \u66F4\u65B0\u6210\u529F
137
- \u5F53\u524D\u7248\u672C: ${result.remote}
138
- \u66F4\u65B0\u65E5\u5FD7:
139
- ${log2}`, { at: true });
140
- return true;
141
- }
142
- await e.reply("\n\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u63D2\u4EF6\u540D\u79F0\u6216\u5E8F\u53F7~", { at: true });
143
- return true;
144
- }, { name: "\u66F4\u65B0\u63D2\u4EF6", perm: "admin" });
145
206
  var log = karin.command(/^#更新日志/, async (e) => {
146
207
  const [index, num] = e.msg.replace(/^#更新日志/, "").trim().split(" ");
147
208
  if (!index || !num) {
@@ -181,24 +242,6 @@ ${result}`, { at: true });
181
242
  await e.reply("\n\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u63D2\u4EF6\u540D\u79F0\u6216\u5E8F\u53F7~", { at: true });
182
243
  return true;
183
244
  }, { name: "\u66F4\u65B0\u65E5\u5FD7", perm: "admin" });
184
- var updateAll = karin.command(/^#全部(强制)?更新$/, async (e) => {
185
- const cmd = e.msg.includes("\u5F3A\u5236") ? "git reset --hard && git pull --allow-unrelated-histories" : "git pull";
186
- try {
187
- const git = await updateAllGitPlugin(cmd);
188
- const npm = await updateAllPkg();
189
- await e.reply([
190
- "\n\u5168\u90E8\u66F4\u65B0\u5B8C\u6210",
191
- "-----",
192
- git,
193
- "-----",
194
- npm
195
- ].join("\n"), { at: true });
196
- } catch (error) {
197
- await e.reply(`
198
- \u5168\u90E8\u66F4\u65B0\u5931\u8D25: ${error.message || "\u672A\u77E5\u9519\u8BEF"}`, { at: true });
199
- }
200
- return true;
201
- }, { name: "\u5168\u90E8\u66F4\u65B0", perm: "admin" });
202
245
  var parseLog = (pkg, local, count) => {
203
246
  const file = path.join(process.cwd(), "node_modules", pkg, "CHANGELOG.md");
204
247
  if (!fs.existsSync(file)) return "\u63D2\u4EF6\u672A\u63D0\u4F9B`CHANGELOG.md`\u6587\u4EF6";
@@ -208,10 +251,51 @@ var parseLog = (pkg, local, count) => {
208
251
  }
209
252
  return changelog.range(data, local, count) || "\u672A\u627E\u5230\u5BF9\u5E94\u7684\u66F4\u65B0\u65E5\u5FD7";
210
253
  };
254
+ var TaskUpdate = karin.task("Karin-\u5B9A\u65F6\u66F4\u65B0\u68C0\u67E5", "*/10 * * * *", async () => {
255
+ if (process.env.NODE_ENV === "development") return true;
256
+ const res = await checkPkgUpdate("node-karin");
257
+ if (res.status !== "yes") return true;
258
+ const botIds = karin.getAllBotID();
259
+ const selfId = botIds.find((id) => id.toString() !== "console");
260
+ if (!selfId) return true;
261
+ const config = cfg.get();
262
+ if (config.autoupdate) {
263
+ const up = await updatePkg("node-karin");
264
+ if (up.status === "failed") {
265
+ await sendToFirstAdmin(selfId, [segment.text(`\u81EA\u52A8\u66F4\u65B0 node-karin \u5931\u8D25: ${String(up.data)}`)]);
266
+ return true;
267
+ }
268
+ await sendToFirstAdmin(selfId, [
269
+ segment.text(
270
+ `\u68C0\u6D4B\u5230\u63D2\u4EF6 [node-karin] \u6709\u65B0\u7248\u672C~
271
+ \u5DF2\u81EA\u52A8\u66F4\u65B0 (v${up.local} \u2192 v${up.remote})\uFF0C\u5373\u5C06\u91CD\u542F\u4EE5\u5E94\u7528\u66F4\u65B0`
272
+ )
273
+ ]);
274
+ await restartDirect({ isPm2: false, reloadDeps: true });
275
+ return true;
276
+ }
277
+ const last = await db.get(NODE_KARIN_UPDATE_KEY);
278
+ if (last && last.lastRemote === res.remote) return true;
279
+ const msg = [
280
+ segment.text(
281
+ `\u68C0\u6D4B\u5230\u63D2\u4EF6 [node-karin] \u6709\u65B0\u7248\u672C~
282
+ \u5F53\u524D\u7248\u672C: v${res.local}
283
+ \u6700\u65B0\u7248\u672C: v${res.remote}
284
+ \u8BF7\u53D1\u9001 #\u66F4\u65B0 \u8FDB\u884C\u66F4\u65B0\u3002`
285
+ )
286
+ ];
287
+ const messageId = await sendToFirstAdmin(selfId, msg);
288
+ if (!messageId) return false;
289
+ await db.set(NODE_KARIN_UPDATE_KEY, {
290
+ lastRemote: res.remote,
291
+ lastLocal: res.local
292
+ });
293
+ return true;
294
+ }, { name: "Karin-\u5B9A\u65F6\u66F4\u65B0\u68C0\u67E5", log: false });
211
295
  export {
296
+ TaskUpdate,
212
297
  check,
213
298
  log,
214
299
  plugins,
215
- update,
216
- updateAll
300
+ updatePlugin
217
301
  };
@@ -0,0 +1,127 @@
1
+ import {
2
+ plugin
3
+ } from "./chunk-QUWYQJAF.js";
4
+
5
+ // src/utils/utils.ts
6
+ import karin, { config, logger } from "node-karin";
7
+ var sendToFirstAdmin = async (selfId, message) => {
8
+ const list = config.master();
9
+ let master = list[0];
10
+ if (master === "console") {
11
+ master = list[1];
12
+ }
13
+ try {
14
+ if (!master) return false;
15
+ const a = await karin.sendMaster(selfId, master, message);
16
+ return a.messageId;
17
+ } catch (error) {
18
+ logger.bot("info", selfId, `[${master}] \u53D1\u9001\u4E3B\u52A8\u6D88\u606F\u5931\u8D25:`);
19
+ logger.error(error);
20
+ }
21
+ };
22
+
23
+ // src/config/config.ts
24
+ import fs from "fs";
25
+ import path from "path";
26
+ import { watch, filesByExt, requireFileSync, logger as logger2 } from "node-karin";
27
+ var Config = class {
28
+ /** 配置缓存 */
29
+ cache;
30
+ /** 用户配置目录 */
31
+ dir = plugin.ConfigDir;
32
+ /** 配置文件路径 */
33
+ configPath = path.join(this.dir, "config.json");
34
+ /** 默认配置 */
35
+ defaultConfig = {
36
+ status: true,
37
+ forward: true,
38
+ restartMode: true,
39
+ restart: true,
40
+ domain: "",
41
+ autoupdate: false,
42
+ autorestart: 0
43
+ };
44
+ constructor() {
45
+ this.init();
46
+ this.watchConfig();
47
+ }
48
+ /**
49
+ * 初始化配置文件
50
+ */
51
+ init() {
52
+ if (!fs.existsSync(this.dir)) {
53
+ fs.mkdirSync(this.dir, { recursive: true });
54
+ }
55
+ if (!fs.existsSync(this.configPath)) {
56
+ fs.writeFileSync(
57
+ this.configPath,
58
+ JSON.stringify(this.defaultConfig, null, 2)
59
+ );
60
+ }
61
+ }
62
+ /**
63
+ * 监听配置文件变化
64
+ */
65
+ watchConfig() {
66
+ setTimeout(() => {
67
+ const list = filesByExt(this.dir, ".json", "abs");
68
+ list.forEach((file) => {
69
+ watch(file, () => {
70
+ this.cache = void 0;
71
+ });
72
+ });
73
+ }, 2e3);
74
+ }
75
+ /**
76
+ * 获取配置
77
+ * @returns 配置对象
78
+ */
79
+ get() {
80
+ if (this.cache) {
81
+ return this.cache;
82
+ }
83
+ try {
84
+ const userConfig = requireFileSync(this.configPath);
85
+ const result = { ...this.defaultConfig, ...userConfig };
86
+ this.cache = result;
87
+ return result;
88
+ } catch (error) {
89
+ logger2.error("\u8BFB\u53D6\u914D\u7F6E\u6587\u4EF6\u5931\u8D25\uFF0C\u4F7F\u7528\u9ED8\u8BA4\u914D\u7F6E:", error);
90
+ return { ...this.defaultConfig };
91
+ }
92
+ }
93
+ /**
94
+ * 写入配置
95
+ * @param config 配置对象
96
+ */
97
+ write(config2) {
98
+ try {
99
+ const result = { ...this.defaultConfig, ...config2 };
100
+ this.cache = result;
101
+ fs.writeFileSync(this.configPath, JSON.stringify(result, null, 2));
102
+ } catch (error) {
103
+ logger2.error("\u5199\u5165\u914D\u7F6E\u6587\u4EF6\u5931\u8D25:", error);
104
+ throw error;
105
+ }
106
+ }
107
+ /**
108
+ * 更新配置(合并现有配置)
109
+ * @param config 要更新的配置项
110
+ */
111
+ update(config2) {
112
+ const current = this.get();
113
+ this.write({ ...current, ...config2 });
114
+ }
115
+ /**
116
+ * 重置为默认配置
117
+ */
118
+ reset() {
119
+ this.write(this.defaultConfig);
120
+ }
121
+ };
122
+ var cfg = new Config();
123
+
124
+ export {
125
+ sendToFirstAdmin,
126
+ cfg
127
+ };
@@ -0,0 +1,131 @@
1
+ // src/utils/dir.ts
2
+ import path from "path";
3
+ import fs from "fs";
4
+ import { fileURLToPath } from "url";
5
+ import { karinPathBase } from "node-karin";
6
+
7
+ // package.json
8
+ var package_default = {
9
+ name: "@karinjs/plugin-basic",
10
+ version: "1.3.1",
11
+ description: "Karin\u7684\u57FA\u7840\u63D2\u4EF6,\u63D0\u4F9B\u6700\u57FA\u7840\u7684\u529F\u80FD",
12
+ homepage: "https://github.com/KarinJS/karin-plugin-basic",
13
+ bugs: {
14
+ url: "https://github.com/KarinJS/karin-plugin-basic/issues"
15
+ },
16
+ repository: {
17
+ type: "git",
18
+ url: "git+https://github.com/KarinJS/karin-plugin-basic.git"
19
+ },
20
+ author: "shijin",
21
+ type: "module",
22
+ main: "dist/index.js",
23
+ files: [
24
+ "dist",
25
+ "config",
26
+ "resources",
27
+ "LICENSE",
28
+ "package.json",
29
+ "README.md"
30
+ ],
31
+ scripts: {
32
+ build: "tsc && tsup",
33
+ pub: "npm publish --access public",
34
+ sort: "npx sort-package-json",
35
+ dev: "tsx src/app.ts",
36
+ watch: "tsx watch src/index.ts",
37
+ karin: "karin"
38
+ },
39
+ devDependencies: {
40
+ "@karinjs/plugin-puppeteer": "^1.1.2",
41
+ "@types/node": "^25.0.3",
42
+ eslint: "^9.39.2",
43
+ neostandard: "^0.12.2",
44
+ "node-karin": "^1.14.1",
45
+ tsup: "^8.5.1",
46
+ tsx: "^4.21.0",
47
+ typescript: "^5.9.3"
48
+ },
49
+ publishConfig: {
50
+ access: "public",
51
+ registry: "https://registry.npmjs.org"
52
+ },
53
+ karin: {
54
+ main: "src/index.ts",
55
+ apps: [
56
+ "dist/apps"
57
+ ],
58
+ "ts-apps": [
59
+ "src/apps"
60
+ ],
61
+ static: [
62
+ "resources"
63
+ ],
64
+ files: [
65
+ "config"
66
+ ],
67
+ "ts-web": "src/web.config.ts",
68
+ web: "dist/web.config.js"
69
+ },
70
+ dependencies: {
71
+ "internal-ip": "^8.0.1"
72
+ }
73
+ };
74
+
75
+ // src/utils/dir.ts
76
+ var __filename = fileURLToPath(import.meta.url);
77
+ var filePath = path.resolve(__filename.replace(/\\/g, "/"), "../../..");
78
+ if (!fs.existsSync(path.join(filePath, "package.json"))) {
79
+ filePath = path.resolve(__filename.replace(/\\/g, "/"), "../..");
80
+ }
81
+ var plugin = {
82
+ /** 插件名 */
83
+ name: package_default.name.replace(/\//g, "-"),
84
+ /** 插件版本 */
85
+ version: package_default.version,
86
+ /** 插件绝对路径 */
87
+ dir: filePath,
88
+ /** 插件 package.json */
89
+ pkg: package_default,
90
+ /** 插件在 @karinjs 中的目录 */
91
+ get BaseDir() {
92
+ return path.join(karinPathBase, this.name);
93
+ },
94
+ /** 配置文件路径 */
95
+ get ConfigDir() {
96
+ return path.join(this.BaseDir, "config");
97
+ }
98
+ };
99
+
100
+ // src/utils/render.ts
101
+ import path2 from "path";
102
+ import { segment, karin, config } from "node-karin";
103
+ var copyright = `${plugin.name} ${plugin.pkg.version} - Copyright \xA9 2025 KarinJS | Powered by Karin v${config.pkg().version}`;
104
+ var render = async (name, params) => {
105
+ name = name.replace(/.html$/, "");
106
+ const root = path2.join(plugin.dir, "resources");
107
+ const img = await karin.render({
108
+ name: path2.basename(name),
109
+ type: "png",
110
+ file: path2.join(root, `${name}.html`),
111
+ data: {
112
+ pluResPath: `${root}/`,
113
+ sys: {
114
+ copyright
115
+ },
116
+ ...params
117
+ },
118
+ pageGotoParams: {
119
+ waitUntil: "networkidle0"
120
+ },
121
+ setViewport: {
122
+ deviceScaleFactor: 3
123
+ }
124
+ });
125
+ return segment.image(`${img.includes("base64://") ? img : `base64://${img}`}`);
126
+ };
127
+
128
+ export {
129
+ plugin,
130
+ render
131
+ };
package/dist/index.js CHANGED
@@ -7,6 +7,23 @@ import {
7
7
  initStat,
8
8
  uptime
9
9
  } from "./chunk-ODFXVVIE.js";
10
+ import {
11
+ cfg
12
+ } from "./chunk-PHDIUMOH.js";
13
+ import {
14
+ plugin
15
+ } from "./chunk-QUWYQJAF.js";
16
+
17
+ // src/index.ts
18
+ import { logger, restartDirect } from "node-karin";
19
+ var autorestart = +cfg.get().autorestart;
20
+ if (autorestart && typeof autorestart === "number" && autorestart > 0) {
21
+ setTimeout(() => {
22
+ logger.info(`${logger.violet(`[\u63D2\u4EF6:${plugin.name}]`)} \u5F00\u59CB\u81EA\u52A8\u91CD\u542F...`);
23
+ restartDirect();
24
+ }, autorestart * 1e3);
25
+ }
26
+ logger.info(`${logger.violet(`[\u63D2\u4EF6:${plugin.name}]`)} ${logger.green(plugin.version)} \u521D\u59CB\u5316\u5B8C\u6210~`);
10
27
  export {
11
28
  MB,
12
29
  createKey,
@@ -12,6 +12,10 @@ interface Config {
12
12
  restart: boolean;
13
13
  /** 自定义登录域名 */
14
14
  domain: string;
15
+ /** 是否自动更新 */
16
+ autoupdate: boolean;
17
+ /** 自动重启延迟时间,单位秒,0表示不自动重启 */
18
+ autorestart: number | string;
15
19
  }
16
20
 
17
21
  declare const _default: node_karin.DefineConfig<Config>;
@@ -1,65 +1,78 @@
1
1
  import {
2
- config,
3
- info,
4
- writeConfig
5
- } from "./chunk-BJBUGOWQ.js";
2
+ cfg
3
+ } from "./chunk-PHDIUMOH.js";
4
+ import {
5
+ plugin
6
+ } from "./chunk-QUWYQJAF.js";
6
7
 
7
8
  // src/web.config.ts
8
9
  import { components, defineConfig } from "node-karin";
9
10
  var web_config_default = defineConfig({
10
11
  info: {
11
- id: info.name,
12
+ id: plugin.name,
12
13
  name: "\u57FA\u7840\u63D2\u4EF6",
13
- version: info.version,
14
- description: info.pkg.description,
14
+ version: plugin.version,
15
+ description: plugin.pkg.description,
15
16
  author: [
16
17
  {
17
- name: info.pkg.author,
18
+ name: plugin.pkg.author,
18
19
  avatar: "https://github.com/sj817.png"
19
20
  }
20
21
  ]
21
22
  },
22
23
  /** 动态渲染的组件 */
23
24
  components: () => {
24
- const cfg = config();
25
+ const config = cfg.get();
25
26
  const list = [
26
27
  components.switch.create("status", {
27
28
  color: "success",
28
29
  label: "\u7EDF\u8BA1\u72B6\u6001",
29
30
  description: "\u5173\u95ED\u540E\u53EF\u964D\u4F4Eredis\u538B\u529B...",
30
- defaultSelected: cfg.status
31
+ defaultSelected: config.status
31
32
  }),
32
33
  components.switch.create("forward", {
33
34
  color: "success",
34
35
  label: "\u66F4\u65B0\u8F6C\u53D1",
35
36
  description: "\u5168\u90E8\u66F4\u65B0\u662F\u5426\u4F7F\u7528\u8F6C\u53D1",
36
- defaultSelected: cfg.forward
37
+ defaultSelected: config.forward
37
38
  }),
38
39
  components.switch.create("restartMode", {
39
40
  color: "success",
40
41
  label: "\u91CD\u542F\u65B9\u5F0F",
41
42
  description: "\u6253\u5F00\u4E3A\u524D\u53F0\u91CD\u542F \u5173\u95ED\u4E3A\u540E\u53F0\u91CD\u542F",
42
- defaultSelected: cfg.restartMode
43
+ defaultSelected: config.restartMode
43
44
  }),
44
45
  components.switch.create("restart", {
45
46
  color: "success",
46
47
  label: "\u81EA\u52A8\u91CD\u542F",
47
48
  description: "\u66F4\u65B0\u5B8C\u6210\u662F\u5426\u81EA\u52A8\u91CD\u542F",
48
- defaultSelected: cfg.restart
49
+ defaultSelected: config.restart
49
50
  }),
50
51
  components.input.string("domain", {
51
52
  color: "success",
52
53
  label: "\u81EA\u5B9A\u4E49\u57DF\u540D",
53
54
  description: "Web\u767B\u5F55\u53D1\u9001\u7684\u81EA\u5B9A\u4E49\u57DF\u540D",
54
- defaultValue: cfg.domain,
55
+ defaultValue: config.domain,
55
56
  isRequired: false
57
+ }),
58
+ components.switch.create("autoupdate", {
59
+ color: "success",
60
+ label: "\u81EA\u52A8\u66F4\u65B0",
61
+ description: "\u662F\u5426\u542F\u7528\u81EA\u52A8\u66F4\u65B0",
62
+ defaultSelected: config.autoupdate
63
+ }),
64
+ components.input.number("autorestart", {
65
+ color: "success",
66
+ label: "\u81EA\u52A8\u91CD\u542F\u5EF6\u8FDF\u65F6\u95F4",
67
+ description: "\u81EA\u52A8\u91CD\u542F\u5EF6\u8FDF\u65F6\u95F4\uFF0C\u5355\u4F4D\u79D2\uFF0C0\u8868\u793A\u4E0D\u81EA\u52A8\u91CD\u542F",
68
+ defaultValue: config.autorestart + ""
56
69
  })
57
70
  ];
58
71
  return list;
59
72
  },
60
73
  /** 前端点击保存之后调用的方法 */
61
- save: (config2) => {
62
- writeConfig(config2);
74
+ save: (config) => {
75
+ cfg.write(config);
63
76
  return {
64
77
  success: true,
65
78
  message: "\u4FDD\u5B58\u6210\u529F"