dsh-wechat-remote 1.7.5 → 1.7.8
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/README.md +16 -12
- package/assets/plugin.tgz +0 -0
- package/assets/release.json +8 -10
- package/bin/dsh-discovery.mjs +175 -0
- package/bin/native-control.mjs +4 -2
- package/bin/native-recovery.mjs +44 -0
- package/bin/release-selection.mjs +36 -33
- package/bin/setup.mjs +129 -61
- package/lib/install-control.js +1 -1
- package/lib/install-profile.js +113 -159
- package/lib/install-runtime.js +17 -0
- package/lib/native-recovery.js +7478 -0
- package/lib/update-policy.js +26 -27
- package/lib/update-worker.js +295 -176
- package/package.json +1 -1
package/lib/update-policy.js
CHANGED
|
@@ -41,8 +41,17 @@ function validateCatalog(value) {
|
|
|
41
41
|
if (!c || c.schemaVersion !== 1 || typeof c.revision !== "string" || !/^[\w.-]{1,80}$/.test(c.revision) || !Number.isSafeInteger(c.issuedAt) || !Number.isSafeInteger(c.expiresAt) || c.expiresAt <= c.issuedAt || c.expiresAt - c.issuedAt > 32 * 864e5 || !Array.isArray(c.releases) || c.releases.length > 100 || !Array.isArray(c.blocked) || c.blocked.length > 100 || !strings(c.retiredDsh)) throw new Error("Invalid update catalog");
|
|
42
42
|
const versions = /* @__PURE__ */ new Set();
|
|
43
43
|
for (const r of c.releases) {
|
|
44
|
-
if (!r || !validVersion(r.version) || versions.has(r.version) || !["stable", "preview"].includes(r.channel) || r.channel === "stable" && versionPattern.exec(r.version)[4] || !strings(r.dsh) || !r.dsh.length || !r.dsh.every(validVersion) || !strings(r.platforms, 3) || !r.platforms.length || !r.platforms.every((p) => ["windows", "macos", "linux"].includes(p)) || !strings(r.architectures,
|
|
44
|
+
if (!r || !validVersion(r.version) || versions.has(r.version) || !["stable", "preview"].includes(r.channel) || r.channel === "stable" && versionPattern.exec(r.version)[4] || !strings(r.dsh) || !r.dsh.length || !r.dsh.every(validVersion) || !strings(r.platforms, 3) || !r.platforms.length || !r.platforms.every((p) => ["windows", "macos", "linux"].includes(p)) || !strings(r.architectures, 32) || !r.architectures.length || !r.architectures.every((a) => /^[a-z0-9_-]{1,32}$/.test(a)) || r.asset && !trustedReleaseAsset(r.asset, r.version)) throw new Error("Invalid release entry");
|
|
45
45
|
versions.add(r.version);
|
|
46
|
+
if (r.targets !== void 0) {
|
|
47
|
+
if (!Array.isArray(r.targets) || !r.targets.length || r.targets.length > 12) throw new Error("Invalid release targets");
|
|
48
|
+
const seen = /* @__PURE__ */ new Set();
|
|
49
|
+
for (const target of r.targets) {
|
|
50
|
+
const key = `${target?.platform}:${target?.arch}`;
|
|
51
|
+
if (!target || !r.platforms.includes(target.platform) || !r.architectures.includes(target.arch) || !strings(target.dsh) || !target.dsh.length || !target.dsh.every((v) => r.dsh.includes(v)) || seen.has(key)) throw new Error("Invalid release target");
|
|
52
|
+
seen.add(key);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
46
55
|
}
|
|
47
56
|
for (const b of c.blocked) if (!b || !validVersion(b.pluginVersion) || typeof b.reason !== "string" || !b.reason || b.reason.length > 240 || b.dsh && !strings(b.dsh) || b.platforms && !strings(b.platforms, 3)) throw new Error("Invalid blocked entry");
|
|
48
57
|
if (!c.retiredDsh.every(validVersion)) throw new Error("Invalid retired DSH");
|
|
@@ -50,7 +59,7 @@ function validateCatalog(value) {
|
|
|
50
59
|
return c;
|
|
51
60
|
}
|
|
52
61
|
function releaseMatches(r, current) {
|
|
53
|
-
return r.dsh.includes(current.agentVersion) && r.platforms.includes(current.platform) && (
|
|
62
|
+
return r.dsh.includes(current.agentVersion) && r.platforms.includes(current.platform) && Boolean(current.arch && r.architectures.includes(current.arch)) && (!r.targets || r.targets.some((t) => t.platform === current.platform && (!current.arch || t.arch === current.arch) && t.dsh.includes(current.agentVersion)));
|
|
54
63
|
}
|
|
55
64
|
function assessUpdate(raw, current, now = Date.now(), preview = false) {
|
|
56
65
|
const base = {
|
|
@@ -79,23 +88,21 @@ function assessUpdate(raw, current, now = Date.now(), preview = false) {
|
|
|
79
88
|
const blocked = (version) => c.blocked.find((b) => b.pluginVersion === version && (!b.dsh || b.dsh.includes(current.agentVersion)) && (!b.platforms || b.platforms.includes(current.platform)));
|
|
80
89
|
const own = c.releases.find((r) => r.version === current.pluginVersion);
|
|
81
90
|
const compatible = Boolean(current.arch && own && releaseMatches(own, current) && !blocked(own.version));
|
|
82
|
-
|
|
91
|
+
if (c.retiredDsh.includes(current.agentVersion)) return {
|
|
92
|
+
...base,
|
|
93
|
+
severity: "required",
|
|
94
|
+
component: "agent",
|
|
95
|
+
code: "agent-retired",
|
|
96
|
+
label: "\u9700\u8981\u66F4\u65B0 DSH",
|
|
97
|
+
message: "\u6B64 DSH \u7248\u672C\u5DF2\u505C\u6B62\u652F\u6301\u3002\u8BF7\u5728\u4E3B\u673A\u4E0A\u6309\u53D1\u5E03\u8BF4\u660E\u5347\u7EA7 DSH\uFF1B\u4E0D\u4F1A\u81EA\u52A8\u4FEE\u6539 DSH\u3002",
|
|
98
|
+
releaseUrl: `${RELEASE_REPOSITORY}/releases`
|
|
99
|
+
};
|
|
100
|
+
const target = c.releases.filter((r) => (r.channel === "stable" || preview) && !blocked(r.version) && compareVersions(r.version, current.pluginVersion) > 0).sort((a, b) => compareVersions(b.version, a.version))[0];
|
|
83
101
|
const issue = blocked(current.pluginVersion);
|
|
84
102
|
if (target) {
|
|
85
103
|
const manual = c.manualUpgradePlugins?.includes(current.pluginVersion) ? {
|
|
86
104
|
manualUpdate: `\u6B64\u65E7\u63D2\u4EF6\u6CA1\u6709\u68C0\u67E5\u66F4\u65B0\u548C\u4E00\u952E\u66F4\u65B0\u529F\u80FD\u3002\u9996\u6B21\u9700\u5728\u8282\u70B9\u6240\u5728\u7535\u8111\uFF0C\u6309\u76EE\u6807\u7248\u672C ${target.version} \u7684\u53D1\u5E03\u8BF4\u660E\u624B\u5DE5\u5347\u7EA7\u63D2\u4EF6\uFF0C\u5E76\u4F7F\u7528\u539F\u6765\u7684 DSH_HOME \u548C profile \u91CD\u542F\u3002\u4E0D\u8981\u5220\u9664\u8282\u70B9\u6216\u91CD\u65B0\u914D\u5BF9\uFF1B\u5347\u7EA7\u540E\u624D\u53EF\u4F7F\u7528\u4E00\u952E\u66F4\u65B0\u3002`
|
|
87
105
|
} : {};
|
|
88
|
-
if (!current.arch) return {
|
|
89
|
-
...base,
|
|
90
|
-
...manual,
|
|
91
|
-
severity: "recommended",
|
|
92
|
-
component: "plugin",
|
|
93
|
-
code: "plugin-check-host",
|
|
94
|
-
label: "\u63D2\u4EF6\u53EF\u66F4\u65B0",
|
|
95
|
-
message: `\u63D2\u4EF6 ${target.version} \u7684\u7248\u672C\u6761\u4EF6\u4E0E\u5F53\u524D DSH \u5339\u914D\uFF0C\u4F46\u65E7\u8282\u70B9\u672A\u4E0A\u62A5\u4E3B\u673A\u67B6\u6784\u3002\u8BF7\u5230\u6B64\u4E3B\u673A WebUI \u68C0\u67E5\u786E\u8BA4\u540E\u66F4\u65B0\u63D2\u4EF6\uFF1B\u65E0\u9700\u5148\u66F4\u65B0 DSH\u3002`,
|
|
96
|
-
targetVersion: target.version,
|
|
97
|
-
releaseUrl: `${RELEASE_REPOSITORY}/releases/tag/v${target.version}`
|
|
98
|
-
};
|
|
99
106
|
const required = Boolean(issue);
|
|
100
107
|
return {
|
|
101
108
|
...base,
|
|
@@ -104,7 +111,7 @@ function assessUpdate(raw, current, now = Date.now(), preview = false) {
|
|
|
104
111
|
component: "plugin",
|
|
105
112
|
code: required ? "plugin-required" : "plugin-available",
|
|
106
113
|
label: required ? "\u5FC5\u987B\u66F4\u65B0\u63D2\u4EF6" : "\u63D2\u4EF6\u53EF\u66F4\u65B0",
|
|
107
|
-
message: (issue
|
|
114
|
+
message: (issue ? issue.reason + "\u3002" : "") + `\u53EF\u66F4\u65B0\u81F3\u63D2\u4EF6 ${target.version}\uFF1B\u66F4\u65B0\u524D\u4F1A\u68C0\u67E5\u5F53\u524D\u4E3B\u673A\u7684\u5B89\u88C5\u4E0E\u91CD\u542F\u6761\u4EF6\uFF0C\u4E0D\u4F1A\u66F4\u6362 DSH \u672C\u4F53\u3002`,
|
|
108
115
|
targetVersion: target.version,
|
|
109
116
|
releaseUrl: `${RELEASE_REPOSITORY}/releases/tag/v${target.version}`
|
|
110
117
|
};
|
|
@@ -119,20 +126,12 @@ function assessUpdate(raw, current, now = Date.now(), preview = false) {
|
|
|
119
126
|
releaseUrl: `${RELEASE_REPOSITORY}/releases`
|
|
120
127
|
};
|
|
121
128
|
if (compatible) return { ...base, severity: "none", code: "compatible", label: "\u6682\u65E0\u53EF\u7528\u66F4\u65B0", message: "\u5F53\u524D\u7EC4\u5408\u5DF2\u9A8C\u8BC1\uFF0C\u6682\u672A\u53D1\u73B0\u9002\u7528\u4E8E\u6B64 DSH \u548C\u4E3B\u673A\u7684\u66F4\u65B0\u3002" };
|
|
122
|
-
if (c.retiredDsh.includes(current.agentVersion)) return {
|
|
123
|
-
...base,
|
|
124
|
-
severity: "required",
|
|
125
|
-
component: "agent",
|
|
126
|
-
code: "agent-retired",
|
|
127
|
-
label: "\u9700\u8981\u66F4\u65B0 DSH",
|
|
128
|
-
message: "\u6B64 DSH \u7248\u672C\u5DF2\u505C\u6B62\u652F\u6301\u3002\u8BF7\u5728\u4E3B\u673A\u4E0A\u6309\u517C\u5BB9\u53D1\u5E03\u8BF4\u660E\u5347\u7EA7 DSH \u548C\u8FDE\u63A5\u63D2\u4EF6\uFF1B\u4E0D\u4F1A\u81EA\u52A8\u4FEE\u6539 DSH\u3002",
|
|
129
|
-
releaseUrl: `${RELEASE_REPOSITORY}/releases`
|
|
130
|
-
};
|
|
131
129
|
return {
|
|
132
130
|
...base,
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
131
|
+
severity: "none",
|
|
132
|
+
code: "no-update",
|
|
133
|
+
label: "\u6682\u65E0\u53EF\u7528\u66F4\u65B0",
|
|
134
|
+
message: "\u5F53\u524D\u901A\u9053\u6682\u65E0\u66F4\u9AD8\u7248\u672C\uFF0C\u4E0D\u5F71\u54CD\u7EE7\u7EED\u4F7F\u7528\u3002",
|
|
136
135
|
releaseUrl: `${RELEASE_REPOSITORY}/releases`
|
|
137
136
|
};
|
|
138
137
|
}
|