dsh-life-pack 0.3.17 → 0.3.19
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/client.js +10 -71
- package/dist/client.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/manager-version.d.ts +1 -7
- package/dist/manager-version.d.ts.map +1 -1
- package/dist/manager-version.js +10 -29
- package/dist/manager-version.js.map +1 -1
- package/dist/nav.d.ts +4 -4
- package/dist/nav.d.ts.map +1 -1
- package/dist/nav.js +4 -4
- package/dist/nav.js.map +1 -1
- package/dist/update-client.d.ts +0 -5
- package/dist/update-client.d.ts.map +1 -1
- package/dist/update-client.js +7 -16
- package/dist/update-client.js.map +1 -1
- package/dist/update-contract.d.ts +4 -12
- package/dist/update-contract.d.ts.map +1 -1
- package/dist/update-contract.js +3 -11
- package/dist/update-contract.js.map +1 -1
- package/dist/update-host.d.ts.map +1 -1
- package/dist/update-host.js +0 -4
- package/dist/update-host.js.map +1 -1
- package/package.json +1 -1
package/dist/client.js
CHANGED
|
@@ -174,12 +174,6 @@ window.__ModuleLoader__.load({
|
|
|
174
174
|
* 也不该把名字再写一份(写两份必然走散)。宿主把名字表连同版本行一起交出去,
|
|
175
175
|
* 面板一行字面量都不留。 */
|
|
176
176
|
targets: "ilife-manager.targets",
|
|
177
|
-
/** 总管自述版本(票 #737):入参 `{}`,回包 `{version}`。
|
|
178
|
-
*
|
|
179
|
-
* 宿主读**自己这份已安装包**的 `package.json`(`manager-version.ts`),面板只渲染读到的值。
|
|
180
|
-
* 为什么走电话:面板是浏览器产物,禁 node 内建(`test/client-bundle-48.test.mjs` 看门),
|
|
181
|
-
* 读盘只许在宿主半;与卡路里 #130 同一条路(host 读 → RPC → client 纯渲染)。 */
|
|
182
|
-
version: "ilife-manager.version",
|
|
183
177
|
/** 本机「根」清单(票 #744):入参 `{}`,回包 `{roots: [{path, kind}]}`。
|
|
184
178
|
*
|
|
185
179
|
* 为什么这条能力住在总管:浏览器里没有卷清单接口,而宿主那条目录选择接缝只有
|
|
@@ -188,15 +182,9 @@ window.__ModuleLoader__.load({
|
|
|
188
182
|
* 回包**恒成功**:列不出来是空清单,不是错误码(界面据此只是不画那一行)。 */
|
|
189
183
|
roots: "ilife-manager.roots"
|
|
190
184
|
};
|
|
191
|
-
/** 版本读不到时两侧共用的降级字面量(面板照原样显示,不假装知道版本)。
|
|
192
|
-
*
|
|
193
|
-
* 一处定义、两侧引用:宿主半 `manager-version.ts` 读失败时回它,面板半 `update-client.ts`
|
|
194
|
-
* 归一化时也认它——面板侧不许 import 宿主半(会把 node 内建带进浏览器束)。 */
|
|
195
|
-
const VERSION_UNKNOWN = "unknown";
|
|
196
185
|
/** 挂载取数失败的退避重试表(票 #982,更新目标表用)。
|
|
197
186
|
*
|
|
198
|
-
*
|
|
199
|
-
* (宿主路由尚未就绪)会使错误态常驻整个会话;单次直返是当时的缺口。
|
|
187
|
+
* 挂载时首次传输失败(宿主路由尚未就绪)会使错误态常驻整个会话;单次直返是当时的缺口。
|
|
200
188
|
* 次数有界、调用方负责卸载清理(见 `update-panel.ts` 的取数),不是无界轮询。 */
|
|
201
189
|
const LOAD_RETRY_MS = [
|
|
202
190
|
1e3,
|
|
@@ -237,15 +225,17 @@ window.__ModuleLoader__.load({
|
|
|
237
225
|
}
|
|
238
226
|
//#endregion
|
|
239
227
|
//#region src/update-client.ts
|
|
240
|
-
/**
|
|
228
|
+
/** 面板到宿主的三条流程(纯异步函数:无 DOM、无 react;传输口由调用方注入,便于单测)。
|
|
241
229
|
*
|
|
242
|
-
*
|
|
230
|
+
* 三条流程与更新包 README 的对应关系:
|
|
243
231
|
* - 检查更新:`updateCheck`(第 3 节第 3 步的 `host.call(UPD_CHECK, {})`);
|
|
244
232
|
* - 装上更新:`updateCheck` 拿凭证 → `updateInstall` 提交 → **按间隔轮询 `updateStatus`**
|
|
245
233
|
* 直到任务离开 `installing`/`verifying`(第 3 节第 3 步与第 9 节:安装是后台跑,
|
|
246
234
|
* 调用方不干等;凭证过期 `check-expired` 是正常错误码,重查一次再提交,见第 11 节);
|
|
247
|
-
* - 装上缺席的包:走总管自有的 `ilife-manager.install
|
|
248
|
-
*
|
|
235
|
+
* - 装上缺席的包:走总管自有的 `ilife-manager.install`(更新包的三个电话只管已装的包)。
|
|
236
|
+
*
|
|
237
|
+
* 版本号**不在这三条里**(票 #986):面板那行版本由构建期注入产物(见 `client.ts`),
|
|
238
|
+
* 不再经 `ilife-manager.version` 往返——标签的延迟不依赖宿主可用性。
|
|
249
239
|
*/
|
|
250
240
|
/** 轮询上限:1 秒一次、最多 900 次(覆盖更新包 15 分钟的安装时限)。 */
|
|
251
241
|
const MAX_POLL_TRIES = 900;
|
|
@@ -323,16 +313,6 @@ window.__ModuleLoader__.load({
|
|
|
323
313
|
}
|
|
324
314
|
};
|
|
325
315
|
}
|
|
326
|
-
/** 取总管自述版本(票 #737):宿主读**自己这份已安装包**的 `package.json`,面板只渲染读到的值。
|
|
327
|
-
*
|
|
328
|
-
* 单次、无轮询;宿主读不到会回 `unknown`,传输层失败也回同一个字面量——面板照原样显示,
|
|
329
|
-
* 不假装知道版本(与卡路里 #130 的降级口径一致)。 */
|
|
330
|
-
async function loadManagerVersion(call) {
|
|
331
|
-
const out = await callManager(call, MANAGER_ACTIONS.version, {});
|
|
332
|
-
if (!out.ok) return VERSION_UNKNOWN;
|
|
333
|
-
const raw = out.value?.version;
|
|
334
|
-
return typeof raw === "string" && raw.trim().length > 0 ? raw.trim() : VERSION_UNKNOWN;
|
|
335
|
-
}
|
|
336
316
|
/** 查一家:默认查新版(`updateCheck`,顺带回最新版本与凭证);给 `phoneName` 时查那个电话。 */
|
|
337
317
|
async function checkTarget(call, target, phoneName) {
|
|
338
318
|
const name = phoneName ?? target.phones?.check;
|
|
@@ -3069,48 +3049,8 @@ window.__ModuleLoader__.load({
|
|
|
3069
3049
|
style: S.moreRow
|
|
3070
3050
|
}, react.createElement("span", { style: S.morePkg }, row.pkg), react.createElement("span", { style: S.moreDesc }, row.desc), react.createElement("span", { style: S.moreIcon }, react.createElement(ExternalIcon, null)))));
|
|
3071
3051
|
}
|
|
3072
|
-
/**
|
|
3073
|
-
|
|
3074
|
-
* 三态(#937):`loading`(首帧就画胶囊占位 `…`)/`ready`(读到,画包名 · 版本)/`missing`(读不到,画「版本未知」)。
|
|
3075
|
-
* **失败要重试**:原先只取一次、一失败就永远停在未知(#937 查出来的真缺陷);这里按 1s/3s/8s 退避重试三次。
|
|
3076
|
-
* 与卡路里 #130 同一条路:面板是浏览器产物、禁 node 内建,读盘只许在宿主半。 */
|
|
3077
|
-
/** 读中 / 读不到 两种胶囊文案(#937:占位符用 `…`,读不到给人话,不把 `unknown` 印给人看)。 */
|
|
3078
|
-
const VERSION_PENDING_TEXT = "…";
|
|
3079
|
-
const VERSION_MISSING_TEXT = "版本未知";
|
|
3080
|
-
/** 重试间隔(#937):三次退避,之后不再打扰宿主。 */
|
|
3081
|
-
const VERSION_RETRY_MS = [
|
|
3082
|
-
1e3,
|
|
3083
|
-
3e3,
|
|
3084
|
-
8e3
|
|
3085
|
-
];
|
|
3086
|
-
function useManagerVersion(getCall) {
|
|
3087
|
-
const [state, setState] = react.useState({ kind: "loading" });
|
|
3088
|
-
react.useEffect(() => {
|
|
3089
|
-
let alive = true;
|
|
3090
|
-
const timers = [];
|
|
3091
|
-
const attempt = (index) => {
|
|
3092
|
-
loadManagerVersion(getCall()).then((next) => {
|
|
3093
|
-
if (!alive) return;
|
|
3094
|
-
if (next !== "unknown") {
|
|
3095
|
-
setState({
|
|
3096
|
-
kind: "ready",
|
|
3097
|
-
version: next
|
|
3098
|
-
});
|
|
3099
|
-
return;
|
|
3100
|
-
}
|
|
3101
|
-
setState({ kind: "missing" });
|
|
3102
|
-
const wait = VERSION_RETRY_MS[index];
|
|
3103
|
-
if (wait !== void 0) timers.push(setTimeout(() => attempt(index + 1), wait));
|
|
3104
|
-
});
|
|
3105
|
-
};
|
|
3106
|
-
attempt(0);
|
|
3107
|
-
return () => {
|
|
3108
|
-
alive = false;
|
|
3109
|
-
for (const id of timers) clearTimeout(id);
|
|
3110
|
-
};
|
|
3111
|
-
}, [getCall]);
|
|
3112
|
-
return state;
|
|
3113
|
-
}
|
|
3052
|
+
/** 版本胶囊那一行字:只在这里拼一次,屏上与用例读的是同一串。 */
|
|
3053
|
+
const MANAGER_VERSION_TEXT = "dsh-life-pack · 0.3.19";
|
|
3114
3054
|
/** 爱生活面板:总设置区 + 检查更新(七家)+ 爱生活页签条(slot 驱动)+ 技能设置页投影/缺席卡。 */
|
|
3115
3055
|
function LifePackSection(props) {
|
|
3116
3056
|
const tabsId = react.useId();
|
|
@@ -3118,7 +3058,6 @@ window.__ModuleLoader__.load({
|
|
|
3118
3058
|
const rows = props.useTabs((value) => value);
|
|
3119
3059
|
const present = new Set(rows.map((r) => r.id));
|
|
3120
3060
|
const face = useUpdateRows(props.getCall);
|
|
3121
|
-
const managerVersion = useManagerVersion(props.getCall);
|
|
3122
3061
|
const health = useHealthPanel(() => props.getCall(), react.useMemo(() => rows.filter((row) => row.channel.length > 0).map((row) => ({
|
|
3123
3062
|
id: row.id,
|
|
3124
3063
|
channel: row.channel
|
|
@@ -3192,7 +3131,7 @@ window.__ModuleLoader__.load({
|
|
|
3192
3131
|
return react.createElement("div", null, react.createElement("div", { style: S.headRow }, react.createElement("div", { style: S.head }, "爱生活"), react.createElement("span", {
|
|
3193
3132
|
style: S.versionCapsule,
|
|
3194
3133
|
"data-ilife-version": "capsule"
|
|
3195
|
-
},
|
|
3134
|
+
}, MANAGER_VERSION_TEXT), react.createElement("div", { style: S.headActions }, react.createElement(CheckUpdateButton, { face }), react.createElement(PanelActions, null))), react.createElement(UpdateResults, { face }), react.createElement(HealthSummaryLine, {
|
|
3196
3135
|
lights,
|
|
3197
3136
|
running: health.running,
|
|
3198
3137
|
error: summaryErrorOf(health),
|