@pwa-platform/sw-runtime 0.2.0 → 0.2.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/README.md
CHANGED
|
@@ -69,7 +69,7 @@ const worker = injectWorkerConfig(workerTemplate, platformConfig);
|
|
|
69
69
|
|
|
70
70
|
`SKIP_WAITING_MESSAGE` 是页面确认更新时发送的唯一接管消息。`isSkipWaitingMessage()`、`isOfflineWriteMessage()`、`isRuntimeCacheServedMessage()` 等守卫只接受闭合的纯数据对象,避免调用不可信 accessor。
|
|
71
71
|
|
|
72
|
-
`checkPushPayload()`/`checkPushPayloadText()`/`validatePushPayload()` 只验证 payload 契约;它们不代表 `@pwa-platform/push` 已公开。当前正式版(0.2.
|
|
72
|
+
`checkPushPayload()`/`checkPushPayloadText()`/`validatePushPayload()` 只验证 payload 契约;它们不代表 `@pwa-platform/push` 已公开。当前正式版(0.2.1)的公开接入面不包含 Push 订阅与后端发送服务。
|
|
73
73
|
|
|
74
74
|
## 安全边界
|
|
75
75
|
|
|
@@ -29,14 +29,24 @@ export function registerRecoveryWorker({ scope, config }) {
|
|
|
29
29
|
* identity-derived queue database, cancels this registration's push subscription (if any), then claims the open
|
|
30
30
|
* clients so they stop being controlled by the broken worker. Cancelling the subscription never blocks deletion or
|
|
31
31
|
* takeover: it runs after deletion and before claim, and its own failure is swallowed.
|
|
32
|
+
*
|
|
33
|
+
* One failed deletion never stops the others (review #15): the activate event runs once, so whatever is skipped here
|
|
34
|
+
* would stay behind until the next deployment. After every deletion was attempted, any failure rejects before the
|
|
35
|
+
* push step and the claim, so recovery still fails closed.
|
|
32
36
|
*/
|
|
33
37
|
async function recover(scope, appCachePrefix, offlineWriteDatabaseName) {
|
|
38
|
+
const failures = [];
|
|
39
|
+
const record = (error) => {
|
|
40
|
+
failures.push(error);
|
|
41
|
+
};
|
|
34
42
|
for (const name of await scope.caches.keys()) {
|
|
35
43
|
if (name.startsWith(appCachePrefix))
|
|
36
|
-
await scope.caches.delete(name);
|
|
44
|
+
await scope.caches.delete(name).catch(record);
|
|
37
45
|
}
|
|
38
46
|
await deleteExpirationRecordsBestEffort(appCachePrefix);
|
|
39
|
-
await deleteOfflineWriteDatabase(offlineWriteDatabaseName);
|
|
47
|
+
await deleteOfflineWriteDatabase(offlineWriteDatabaseName).catch(record);
|
|
48
|
+
if (failures.length > 0)
|
|
49
|
+
throw failures[0];
|
|
40
50
|
await cancelPushSubscription(scope);
|
|
41
51
|
await scope.clients.claim();
|
|
42
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/recovery-worker/index.ts"],"names":[],"mappings":"AAAA,+GAA+G;AAC/G,yGAAyG;AACzG,2GAA2G;AAC3G,+DAA+D;AAC/D,OAAO,EAAE,4BAA4B,EAAgC,MAAM,qBAAqB,CAAC;AACjG,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAQ1E;;;;;;;;;GASG;AACH,MAAM,UAAU,sBAAsB,CAAC,EAAE,KAAK,EAAE,MAAM,EAA4B;IAChF,MAAM,EAAE,cAAc,EAAE,wBAAwB,EAAE,GAAG,4BAA4B,CAAC,MAAM,CAAC,CAAC;IAE1F,KAAK,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;QAC1C,wGAAwG;QACxG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE;QAC3C,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,EAAE,wBAAwB,CAAC,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;AACL,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/recovery-worker/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pwa-platform/sw-runtime",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "Service worker and recovery runtime for PWA Platform.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -38,15 +38,15 @@
|
|
|
38
38
|
"dist"
|
|
39
39
|
],
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@pwa-platform/
|
|
42
|
-
"@pwa-platform/
|
|
41
|
+
"@pwa-platform/engine-workbox": "0.2.1",
|
|
42
|
+
"@pwa-platform/contracts": "0.2.1"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"@playwright/test": "1.63.0",
|
|
46
46
|
"@types/node": "24.13.4",
|
|
47
47
|
"vite": "8.3.0",
|
|
48
48
|
"@pwa-platform/browser-test-harness": "0.0.0",
|
|
49
|
-
"@pwa-platform/core": "0.2.
|
|
49
|
+
"@pwa-platform/core": "0.2.1"
|
|
50
50
|
},
|
|
51
51
|
"engines": {
|
|
52
52
|
"node": ">=22.0.0"
|