zip-peek 0.7.1 → 0.7.3-beta

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
@@ -101,7 +101,7 @@ type InitZipPeekOptions = {
101
101
  zipAssetCacheName?: string;
102
102
  assetCacheTtlMs?: number;
103
103
  logPrefix?: string;
104
- onError?: (error: Error, info?: string) => void;
104
+ onError?: (error: Error, info: string | undefined, level: "error" | "warn") => void;
105
105
  };
106
106
 
107
107
  type ZipCacheClearingStrategy = "keep-all" | "keep-allowed-urls" | "clear-all";
@@ -188,10 +188,10 @@ When fallback resolution succeeds, the asset is still served normally, but `onEr
188
188
 
189
189
  `onError`
190
190
 
191
- Optional error handler for zip-peek failures and informational reports from the service worker. Receives `(error, info?)`.
191
+ Optional error handler for zip-peek failures and informational reports from the service worker. Receives `(error, info, level)`. `level` is `"warn"` for a thrown network fetch, a file missing from the manifest, and a successful zip-basename fallback. Every other report is `"error"`.
192
192
 
193
193
  - `error.message` is a **stable title** for telemetry grouping, always prefixed with `[zip-peek-error]`. Unique presigned query strings are not included in the title.
194
- - `info` holds request-specific details (`path=… zipPath=… reason=… status=… cause=…`).
194
+ - `info` holds request-specific details (`path=… zipPath=… reason=… status=… cause=… zipSW=… zipPeek=…`). `zipSW` is the service-worker build version (the package version baked into `zipServiceWorker.js`). `zipPeek` is the zip-peek package version running on the page. They match on a fresh install and differ when a cached worker is older than the page. Manifest preload and manifest fetch failures also include `phase` (`tail` or `cd`) and `online`. The init step label is kept in front of those fields.
195
195
 
196
196
  Service-worker fetch failures post `ZIP_SW_ERROR` so `onError` runs (allow-list 403, missing manifest/file 404, renew 502, origin/handler 500). A thrown `fetch()` (offline, DNS, CORS) uses `[zip-peek-error] [NetworkError] ZIP asset fetch failed` or `[zip-peek-error] [NetworkError] ZIP manifest fetch failed`. An HTTP error response from origin is not tagged `[NetworkError]`.
197
197
 
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import type { InitZipPeekOptions, InitZipPeekResult, RenewPresignedUrlOptions } from "./types";
2
2
  import { isZipPackage } from "./zip-utils";
3
- export type { InitZipPeekOptions, InitZipPeekResult, RenewPresignedUrlOptions, ZipCacheClearingStrategy, ZipPeekErrorHandler, ZipPeekUrlExpiryHandler, ZipWorkerConfig, } from "./types";
3
+ export type { InitZipPeekOptions, InitZipPeekResult, RenewPresignedUrlOptions, ZipCacheClearingStrategy, ZipPeekErrorHandler, ZipPeekLogLevel, ZipPeekUrlExpiryHandler, ZipWorkerConfig, } from "./types";
4
4
  export { getPresignedUrlExpiryMs, isPresignedUrlExpired } from "./zip-utils";
5
5
  /**
6
6
  * Registers the zip-peek service worker and configures lazy ZIP asset loading.
package/dist/index.js CHANGED
@@ -4,11 +4,21 @@ exports.isZipPackage = exports.isPresignedUrlExpired = exports.getPresignedUrlEx
4
4
  exports.initZipPeek = initZipPeek;
5
5
  exports.renewPresignedUrl = renewPresignedUrl;
6
6
  const types_1 = require("./types");
7
+ const version_1 = require("./version");
7
8
  const zip_utils_1 = require("./zip-utils");
8
9
  Object.defineProperty(exports, "isZipPackage", { enumerable: true, get: function () { return zip_utils_1.isZipPackage; } });
9
10
  var zip_utils_2 = require("./zip-utils");
10
11
  Object.defineProperty(exports, "getPresignedUrlExpiryMs", { enumerable: true, get: function () { return zip_utils_2.getPresignedUrlExpiryMs; } });
11
12
  Object.defineProperty(exports, "isPresignedUrlExpired", { enumerable: true, get: function () { return zip_utils_2.isPresignedUrlExpired; } });
13
+ const ZIP_PEEK_VERSION_FIELD = `zipPeek=${version_1.ZIP_PEEK_VERSION}`;
14
+ /** Append the page package version. Kept off error.message so titles stay stable. */
15
+ function withPackageVersion(info) {
16
+ if (!info)
17
+ return ZIP_PEEK_VERSION_FIELD;
18
+ if (info.includes("zipPeek="))
19
+ return info;
20
+ return `${info} ${ZIP_PEEK_VERSION_FIELD}`;
21
+ }
12
22
  /** Default lead time before presigned URL expiry when scheduling renewal. */
13
23
  const URL_EXPIRY_LEAD_MS = 10000;
14
24
  /** Retry delay when onUrlExpiry runs but the URL is still tracked (renew failed / skipped). */
@@ -79,7 +89,7 @@ async function unregisterMismatchedScopeZipServiceWorkerIfNeeded(expectedWorkerU
79
89
  const regScopePath = normalizeScopePath(reg.scope);
80
90
  if (regScopePath !== wantScopePath) {
81
91
  await reg.unregister();
82
- console.log(`Unregistered zip service worker (scope ${reg.scope}); re-registering with ${expectedScopeUrl}`);
92
+ console.log(ZIP_PEEK_VERSION_FIELD, `Unregistered zip service worker (scope ${reg.scope}); re-registering with ${expectedScopeUrl}`);
83
93
  }
84
94
  }
85
95
  }
@@ -97,16 +107,16 @@ async function ensureZipServiceWorkerRegistered({ workerUrl, scopeUrl, reloadOnF
97
107
  if (!alreadyRegistered) {
98
108
  try {
99
109
  await navigator.serviceWorker.register(workerUrl, { scope: scopeUrl });
100
- console.log("Zip service worker registered successfully");
110
+ console.log(ZIP_PEEK_VERSION_FIELD, "Zip service worker registered successfully");
101
111
  }
102
112
  catch (error) {
103
113
  const context = describeRegistrationFailureContext();
104
- console.error("zip-peek: service worker registration failed", context, error);
114
+ console.error(ZIP_PEEK_VERSION_FIELD, "zip-peek: service worker registration failed", context, error);
105
115
  throw attachZipPeekInfo(error, `Service worker registration failed (${context})`);
106
116
  }
107
117
  }
108
118
  else {
109
- console.log("Zip service worker already registered; skipping register().");
119
+ console.log(ZIP_PEEK_VERSION_FIELD, "Zip service worker already registered; skipping register().");
110
120
  }
111
121
  await navigator.serviceWorker.ready;
112
122
  if (reloadOnFirstInstall && !navigator.serviceWorker.controller) {
@@ -138,21 +148,26 @@ function describeRegistrationFailureContext() {
138
148
  }
139
149
  function attachZipPeekInfo(error, info) {
140
150
  const err = (0, types_1.toZipPeekError)(error);
141
- if (info) {
142
- err.zipPeekInfo = (0, types_1.formatZipPeekError)(info);
143
- }
151
+ if (!info)
152
+ return err;
153
+ const step = (0, types_1.formatZipPeekError)(info);
154
+ err.zipPeekInfo = err.zipPeekInfo ? `${step} ${err.zipPeekInfo}` : step;
144
155
  return err;
145
156
  }
146
157
  function reportZipPeekError(onError, error, info) {
147
158
  const err = (0, types_1.toZipPeekError)(error);
148
- onError === null || onError === void 0 ? void 0 : onError(err, info !== null && info !== void 0 ? info : err.zipPeekInfo);
159
+ onError === null || onError === void 0 ? void 0 : onError(err, withPackageVersion(info !== null && info !== void 0 ? info : err.zipPeekInfo), err.zipPeekLevel);
149
160
  }
150
161
  function errorFromWorkerResponse(response) {
151
- var _a;
162
+ var _a, _b;
152
163
  const error = new Error((_a = response.error) !== null && _a !== void 0 ? _a : (0, types_1.formatZipPeekError)("Service worker did not acknowledge the message."));
153
164
  if (response.errorStack) {
154
165
  error.stack = response.errorStack;
155
166
  }
167
+ if (response.info) {
168
+ error.zipPeekInfo = response.info;
169
+ }
170
+ error.zipPeekLevel = (_b = response.level) !== null && _b !== void 0 ? _b : "error";
156
171
  return error;
157
172
  }
158
173
  function clearUrlExpiryTimer(normalizedZipUrl) {
@@ -312,7 +327,7 @@ function ensureClientMessageListener() {
312
327
  }
313
328
  clientMessageListenerInstalled = true;
314
329
  navigator.serviceWorker.addEventListener("message", (event) => {
315
- var _a, _b, _c;
330
+ var _a, _b, _c, _d;
316
331
  const data = event.data;
317
332
  if (!data) {
318
333
  return;
@@ -364,7 +379,7 @@ function ensureClientMessageListener() {
364
379
  if ((_c = data.error) === null || _c === void 0 ? void 0 : _c.stack) {
365
380
  error.stack = data.error.stack;
366
381
  }
367
- currentOnError(error, data.info ? (0, types_1.formatZipPeekError)(data.info) : undefined);
382
+ currentOnError(error, withPackageVersion(data.info ? (0, types_1.formatZipPeekError)(data.info) : undefined), (_d = data.level) !== null && _d !== void 0 ? _d : "error");
368
383
  });
369
384
  }
370
385
  function normalizeAllowedZipUrls(allowedZipUrls) {
@@ -372,22 +387,23 @@ function normalizeAllowedZipUrls(allowedZipUrls) {
372
387
  return undefined;
373
388
  }
374
389
  if (allowedZipUrls.length === 0) {
375
- throw (0, types_1.createZipPeekError)("allowedZipUrls must contain at least one ZIP URL when provided.");
390
+ throw (0, types_1.createZipPeekError)("allowedZipUrls must contain at least one ZIP URL when provided.", "error");
376
391
  }
377
392
  const normalized = new Set();
378
393
  for (const zipUrl of allowedZipUrls) {
379
394
  const resolvedZipUrl = new URL(zipUrl, window.location.href).href;
380
395
  if (!(0, zip_utils_1.isZipPackage)(resolvedZipUrl)) {
381
- throw (0, types_1.createZipPeekError)(`allowedZipUrls contains a non-ZIP URL: ${zipUrl}`);
396
+ throw (0, types_1.createZipPeekError)(`allowedZipUrls contains a non-ZIP URL: ${zipUrl}`, "error");
382
397
  }
383
398
  normalized.add((0, zip_utils_1.normalizeZipUrl)(resolvedZipUrl));
384
399
  }
385
400
  return Array.from(normalized);
386
401
  }
387
- function postWorkerMessage(message) {
388
- const controller = navigator.serviceWorker.controller;
389
- if (!controller) {
390
- return Promise.reject((0, types_1.createZipPeekError)("No active service worker controller. Reload the page after first install, or pass reloadOnFirstInstall: true."));
402
+ async function postWorkerMessage(message) {
403
+ var _a;
404
+ const worker = (_a = navigator.serviceWorker.controller) !== null && _a !== void 0 ? _a : (await navigator.serviceWorker.ready).active;
405
+ if (!worker) {
406
+ throw (0, types_1.createZipPeekError)("No active service worker.", "error");
391
407
  }
392
408
  return new Promise((resolve, reject) => {
393
409
  const channel = new MessageChannel();
@@ -403,9 +419,9 @@ function postWorkerMessage(message) {
403
419
  };
404
420
  channel.port1.onmessageerror = () => {
405
421
  channel.port1.close();
406
- reject((0, types_1.createZipPeekError)("Failed to deserialize the service worker response on MessageChannel."));
422
+ reject((0, types_1.createZipPeekError)("Failed to deserialize the service worker response on MessageChannel.", "error"));
407
423
  };
408
- controller.postMessage(message, [channel.port2]);
424
+ worker.postMessage(message, [channel.port2]);
409
425
  });
410
426
  }
411
427
  async function postWorkerMessageOrThrow(message, info) {
@@ -447,11 +463,11 @@ async function initZipPeek({ workerUrl, scopeUrl, reloadOnFirstInstall = true, c
447
463
  try {
448
464
  const normalizedAllowedZipUrls = normalizeAllowedZipUrls(allowedZipUrls);
449
465
  if (cacheClearingStrategy === "keep-allowed-urls" && !normalizedAllowedZipUrls) {
450
- throw (0, types_1.createZipPeekError)('cacheClearingStrategy "keep-allowed-urls" requires a non-empty allowedZipUrls allow-list.');
466
+ throw (0, types_1.createZipPeekError)('cacheClearingStrategy "keep-allowed-urls" requires a non-empty allowedZipUrls allow-list.', "error");
451
467
  }
452
468
  if (!("serviceWorker" in navigator)) {
453
469
  // Usually happens in the built in Facebook/Messenger browser.
454
- console.warn("zip-peek: Service Worker API not supported in this browser.");
470
+ console.warn(ZIP_PEEK_VERSION_FIELD, "zip-peek: Service Worker API not supported in this browser.");
455
471
  alert("Browser not supported. Please try a different browser.");
456
472
  return { reloaded: false, initialized: false };
457
473
  }
@@ -539,7 +555,7 @@ async function renewPresignedUrl({ previousUrl, nextUrl }) {
539
555
  if (!("serviceWorker" in navigator)) {
540
556
  // Usually happens in the built in Facebook/Messenger browser.
541
557
  alert("Browser not supported. Please try a different browser.");
542
- throw (0, types_1.createZipPeekError)("Service Worker API not supported in this browser.");
558
+ throw (0, types_1.createZipPeekError)("Service Worker API not supported in this browser.", "error");
543
559
  }
544
560
  // Prefer the host-provided absolute strings as-is so SigV4 query encoding is
545
561
  // preserved; only resolve relative URLs against the page location.
@@ -550,7 +566,7 @@ async function renewPresignedUrl({ previousUrl, nextUrl }) {
550
566
  ? nextUrl
551
567
  : new URL(nextUrl, window.location.href).href;
552
568
  if (!(0, zip_utils_1.isZipPackage)(resolvedPrevious) || !(0, zip_utils_1.isZipPackage)(resolvedNext)) {
553
- throw (0, types_1.createZipPeekError)("renewPresignedUrl requires both previousUrl and nextUrl to be ZIP package URLs.");
569
+ throw (0, types_1.createZipPeekError)("renewPresignedUrl requires both previousUrl and nextUrl to be ZIP package URLs.", "error");
554
570
  }
555
571
  const previous = (0, zip_utils_1.normalizeZipUrl)(resolvedPrevious);
556
572
  const next = (0, zip_utils_1.normalizeZipUrl)(resolvedNext);
package/dist/types.d.ts CHANGED
@@ -9,7 +9,8 @@ export type ZipCacheClearingStrategy = "keep-all" | "keep-allowed-urls" | "clear
9
9
  * client claims** (all tabs under the same service worker scope that have
10
10
  * configured `allowedZipUrls`), not only the calling tab's list.
11
11
  */
12
- export type ZipPeekErrorHandler = (error: Error, info?: string) => void;
12
+ export type ZipPeekLogLevel = "error" | "warn";
13
+ export type ZipPeekErrorHandler = (error: Error, info: string | undefined, level: ZipPeekLogLevel) => void;
13
14
  /**
14
15
  * Invoked shortly before a tracked presigned ZIP URL expires.
15
16
  */
@@ -51,6 +52,9 @@ export type WorkerMessageResponse = {
51
52
  ok: boolean;
52
53
  error?: string;
53
54
  errorStack?: string;
55
+ /** `key=value` diagnostics (`phase`, `zipPath`, `online`, `reason`, `status`, `cause`). */
56
+ info?: string;
57
+ level?: ZipPeekLogLevel;
54
58
  };
55
59
  export declare const ZIP_PEEK_ERROR_PREFIX = "[zip-peek-error]";
56
60
  export declare const NETWORK_ERROR_PREFIX = "[NetworkError]";
@@ -59,8 +63,13 @@ export declare function formatZipPeekError(message: string): string;
59
63
  export declare function zipErrorInfo(fields: Record<string, string | number | boolean | null | undefined>): string;
60
64
  export type ZipPeekError = Error & {
61
65
  zipPeekInfo?: string;
66
+ /** HTTP status to return for this failure. Unset means the fetch-handler default (500). */
67
+ httpStatus?: number;
68
+ /** Origin status when the response status was remapped (for example 200 → 502). */
69
+ upstreamStatus?: number;
70
+ zipPeekLevel: ZipPeekLogLevel;
62
71
  };
63
- export declare function createZipPeekError(message: string, info?: string): Error;
72
+ export declare function createZipPeekError(message: string, level: ZipPeekLogLevel, info?: string): ZipPeekError;
64
73
  export declare function toZipPeekError(error: unknown): ZipPeekError;
65
74
  export declare function zipPeekErrorInfo(error: unknown): string | undefined;
66
75
  export declare function errorMessage(error: unknown): string;
package/dist/types.js CHANGED
@@ -26,8 +26,9 @@ function zipErrorInfo(fields) {
26
26
  .map(([key, value]) => `${key}=${String(value)}`)
27
27
  .join(" ");
28
28
  }
29
- function createZipPeekError(message, info) {
29
+ function createZipPeekError(message, level, info) {
30
30
  const err = new Error(formatZipPeekError(message));
31
+ err.zipPeekLevel = level;
31
32
  if (info) {
32
33
  err.zipPeekInfo = info;
33
34
  }
@@ -38,6 +39,9 @@ function toZipPeekError(error) {
38
39
  if (!err.message.startsWith(exports.ZIP_PEEK_ERROR_PREFIX)) {
39
40
  err.message = formatZipPeekError(err.message);
40
41
  }
42
+ if (!err.zipPeekLevel) {
43
+ err.zipPeekLevel = "error";
44
+ }
41
45
  return err;
42
46
  }
43
47
  function zipPeekErrorInfo(error) {
@@ -0,0 +1,2 @@
1
+ /** Package version. The page reads the installed package; the worker build inlines this number. */
2
+ export declare const ZIP_PEEK_VERSION: string;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ZIP_PEEK_VERSION = void 0;
4
+ /** Package version. The page reads the installed package; the worker build inlines this number. */
5
+ exports.ZIP_PEEK_VERSION = require("../package.json").version;
@@ -1,2 +1,2 @@
1
- (()=>{"use strict";var e={553(e,t){function n(e){const n=e.trim();return n.startsWith(t.ZIP_PEEK_ERROR_PREFIX)?n:`${t.ZIP_PEEK_ERROR_PREFIX} ${n}`}t.NETWORK_ERROR_PREFIX=t.ZIP_PEEK_ERROR_PREFIX=void 0,t.formatZipPeekError=n,t.zipErrorInfo=function(e){return Object.entries(e).filter(e=>{const t=e[1];return null!=t&&""!==t}).map(([e,t])=>`${e}=${String(t)}`).join(" ")},t.createZipPeekError=function(e,t){const r=new Error(n(e));return t&&(r.zipPeekInfo=t),r},t.toZipPeekError=function(e){const r=e instanceof Error?e:new Error(String(e));return r.message.startsWith(t.ZIP_PEEK_ERROR_PREFIX)||(r.message=n(r.message)),r},t.zipPeekErrorInfo=function(e){if(e&&"object"==typeof e&&"zipPeekInfo"in e){return e.zipPeekInfo||void 0}},t.errorMessage=function(e){return e instanceof Error?e.message:String(e)},t.ZIP_PEEK_ERROR_PREFIX="[zip-peek-error]",t.NETWORK_ERROR_PREFIX="[NetworkError]"},314(e,t,n){t.clearAllClientClaims=void 0,t.persistAllowListState=a,t.ensureAllowedZipUrlsLoaded=async function(){if(i.allowedZipUrlsLoaded)return i.allowedZipUrlsLoaded;const e=(async()=>{try{const e=await caches.open(i.CONFIG_CACHE_NAME),t=await e.match(i.CONFIG_CACHE_KEY);if(!t)return;const n=await t.json();if(Array.isArray(n.allowedZipUrls)){const e=new Set(n.allowedZipUrls.filter(e=>"string"==typeof e).map(e=>(0,r.normalizeZipUrl)(e)));(0,i.setAllowListRestricted)(!1!==n.restricted),(0,i.setPersistedAllowUnion)(e)}else(0,i.setAllowListRestricted)(!1),(0,i.setPersistedAllowUnion)(null)}catch(e){(0,s.warn)("failed to load runtime config",e)}})();return(0,i.setAllowedZipUrlsLoaded)(e),e},t.clearZipAssetsExceptLiveClaims=async function(e){if(await l(),!i.allowListRestricted)return;if(await async function(){const e=await self.clients.matchAll({type:"window",includeUncontrolled:!0});await Promise.all(e.map(e=>async function(e){await new Promise(t=>{const n=new MessageChannel,a=setTimeout(()=>{n.port1.onmessage=null,n.port1.close(),t()},400);n.port1.onmessage=s=>{clearTimeout(a);const o=s.data;o&&"allowedZipUrls"in o&&(Array.isArray(o.allowedZipUrls)?(0,i.setClientAllowedZipUrls)(e.id,o.allowedZipUrls.map(e=>(0,r.normalizeZipUrl)(e))):null===o.allowedZipUrls&&i.clientAllowedZipUrls.delete(e.id)),n.port1.onmessage=null,n.port1.close(),t()};try{e.postMessage({type:"ZIP_SW_CLAIM_REQUEST"},[n.port2])}catch(e){clearTimeout(a),n.port1.close(),(0,s.warn)("failed to post ZIP_SW_CLAIM_REQUEST",e),t()}})}(e))),i.clientAllowedZipUrls.size>0?((0,i.setAllowListRestricted)(!0),await a()):e.length>0&&((0,i.setAllowListRestricted)(!1),(0,i.setPersistedAllowUnion)(null),await o(null,!1))}(),await l(),!i.allowListRestricted)return;const t=(0,i.getClaimsUnion)();await e(Array.from(t)),await a()},t.applyRuntimeConfig=async function(e,t){if(!e)return;let n=Object.assign({},i.runtimeConfig),s=!1;if("string"==typeof e.zipAssetCacheName&&e.zipAssetCacheName.trim()&&(n.zipAssetCacheName=e.zipAssetCacheName,s=!0),"number"==typeof e.assetCacheTtlMs&&Number.isFinite(e.assetCacheTtlMs)&&(n.assetCacheTtlMs=e.assetCacheTtlMs,s=!0),"string"==typeof e.logPrefix&&e.logPrefix.trim()&&(n.logPrefix=e.logPrefix,s=!0),"boolean"==typeof e.requireExactManifestPath&&(n.requireExactManifestPath=e.requireExactManifestPath,s=!0),s&&(0,i.setRuntimeConfig)(n),"allowedZipUrls"in e){const n=Array.isArray(e.allowedZipUrls)?e.allowedZipUrls.map(e=>(0,r.normalizeZipUrl)(e)):null;if(!t)return null===n?((0,i.clearAllClientClaims)(),(0,i.setAllowedZipUrlsLoaded)(Promise.resolve()),void await o(null,!1)):((0,i.setAllowListRestricted)(!0),(0,i.setPersistedAllowUnion)(new Set(n)),(0,i.setAllowedZipUrlsLoaded)(Promise.resolve()),void await o(n,!0));if(null===n){if(i.clientAllowedZipUrls.delete(t),await l(),0===i.clientAllowedZipUrls.size)return(0,i.setAllowListRestricted)(!1),(0,i.setPersistedAllowUnion)(null),(0,i.setAllowedZipUrlsLoaded)(Promise.resolve()),void await o(null,!1)}else(0,i.setClientAllowedZipUrls)(t,n);await l(),(0,i.setAllowedZipUrlsLoaded)(Promise.resolve()),await a()}},t.renewAllowedZipUrlClaims=function(e,t){let n=!1;for(const r of i.clientAllowedZipUrls.values())r.has(e)&&(r.delete(e),r.add(t),n=!0);if(!n)for(const e of i.clientAllowedZipUrls.values())e.add(t);const r=new Set(null!==i.persistedAllowUnion&&void 0!==i.persistedAllowUnion?i.persistedAllowUnion:[]);r.delete(e),r.add(t),(0,i.setPersistedAllowUnion)(r)},t.isZipUrlAllowed=function(e){const t=(0,i.getAllowedZipUrlsUnion)();return null===t||t.has(e)};const r=n(343),i=n(262);Object.defineProperty(t,"clearAllClientClaims",{enumerable:!0,get:function(){return i.clearAllClientClaims}});const s=n(266);async function a(){if(!i.allowListRestricted)return(0,i.setPersistedAllowUnion)(null),void await o(null,!1);const e=(0,i.getClaimsUnion)(),t=e.size>0?Array.from(e):Array.from(null!==i.persistedAllowUnion&&void 0!==i.persistedAllowUnion?i.persistedAllowUnion:[]);(0,i.setPersistedAllowUnion)(new Set(t)),await o(t,!0)}async function o(e,t=null!==e){try{const n=await caches.open(i.CONFIG_CACHE_NAME);await n.put(new Request(i.CONFIG_CACHE_KEY),new Response(JSON.stringify({allowedZipUrls:e,restricted:t}),{headers:{"Content-Type":"application/json"}}))}catch(e){(0,s.warn)("failed to persist runtime config",e)}}async function l(){const e=await self.clients.matchAll({type:"window",includeUncontrolled:!0}),t=new Set(e.map(e=>e.id));for(const e of[...i.clientAllowedZipUrls.keys()])t.has(e)||i.clientAllowedZipUrls.delete(e);0===i.clientAllowedZipUrls.size&&i.allowListRestricted?((0,i.setPersistedAllowUnion)(null),await o([],!0)):i.clientAllowedZipUrls.size>0&&await a()}},800(e,t,n){t.canonicalAssetRequest=function(e,t){return new Request((0,i.canonicalZipAssetRequestUrl)(e,t),{method:"GET"})},t.clearAllZipAssets=async function(){const e=await caches.open(o.runtimeConfig.zipAssetCacheName),t=await e.keys();await Promise.all(t.map(t=>e.delete(t))),await caches.delete(o.CONFIG_CACHE_NAME),o.zipManifests.clear(),o.pendingManifestLoads.clear(),o.inFlightZipAssets.clear(),(0,s.clearAllClientClaims)(),(0,o.setAllowedZipUrlsLoaded)(Promise.resolve())},t.clearZipAssetsExceptAllowed=async function(e){try{const t=new Set(e),n=await caches.open(o.runtimeConfig.zipAssetCacheName),r=await n.keys();for(const e of r){const r=e.url,s=(0,i.parseZipAssetRequest)(r);s&&!t.has(s.zipUrl)&&await n.delete(e)}for(const e of o.zipManifests.keys())t.has(e)||o.zipManifests.delete(e)}catch(e){throw(0,r.createZipPeekError)(`Failed to clear zip assets except allowed URLs: ${(0,r.errorMessage)(e)}`)}},t.putCachedFullAssetIfAbsent=async function(e,t){var n;try{const r=await caches.open(o.runtimeConfig.zipAssetCacheName),i=await r.match(e);if(i&&!c(i))return void await(null===(n=t.body)||void 0===n?void 0:n.cancel());const s=new Headers(t.headers);s.set(o.ASSET_CACHED_AT_HEADER,String(Date.now())),s.set("Access-Control-Allow-Origin","*"),await r.put(e,new Response(t.body,{status:t.status,statusText:t.statusText,headers:s}))}catch(e){t.body&&!t.body.locked&&await t.body.cancel(e),(0,l.warn)("asset cache put failed",e)}},t.readCachedZipAssetIfFresh=async function(e){let t=null,n="network";try{const r=await caches.open(o.runtimeConfig.zipAssetCacheName),i=await r.match(e);if(i)if(c(i))try{await r.delete(e)}catch(e){(0,l.warn)("asset cache delete expired failed",e)}else t=i,n="cache-api"}catch(e){(0,l.warn)("asset cache read failed",e)}return{response:t,assetSource:n}},t.renewZipUrl=async function(e,t){const n=(0,i.normalizeZipUrl)(e),l=(0,i.normalizeZipUrl)(t);if(n===l)return;await(0,s.ensureAllowedZipUrlsLoaded)(),o.allowListRestricted&&((0,s.renewAllowedZipUrlClaims)(n,l),(0,o.setAllowedZipUrlsLoaded)(Promise.resolve()),await(0,s.persistAllowListState)());const c=o.zipManifests.get(n);c&&(o.zipManifests.set(l,c),o.zipManifests.delete(n));const p=o.pendingManifestLoads.get(n);p&&(o.pendingManifestLoads.set(l,p),o.pendingManifestLoads.delete(n)),(0,a.remapInFlightZipAssetsForRenewal)(n,l);try{const e=await caches.open(o.runtimeConfig.zipAssetCacheName),t=await e.keys();for(const r of t){const t=r.url,s=(0,i.parseZipAssetRequest)(t);s&&(0,i.normalizeZipUrl)(s.zipUrl)===n&&await e.delete(r)}}catch(e){throw(0,r.createZipPeekError)(`Failed to clear cached assets for renewed ZIP URL: ${(0,r.errorMessage)(e)}`)}};const r=n(553),i=n(343),s=n(314),a=n(30),o=n(262),l=n(266);function c(e){const t=e.headers.get(o.ASSET_CACHED_AT_HEADER);if(!t)return!0;const n=parseInt(t,10);return!Number.isFinite(n)||Date.now()-n>o.runtimeConfig.assetCacheTtlMs}},30(e,t,n){t.getOrStartInFlightAsset=function(e,t){const n=e.url,r=i.inFlightZipAssets.get(n);if(r)return r;let a,o;const l=new Promise((e,t)=>{a=e,o=t}),c={resultPromise:t(),cacheFillPromise:l,leaderClaimed:!1,resolveCacheFill:a,rejectCacheFill:o};return l.finally(()=>{!function(e){for(const[t,n]of i.inFlightZipAssets)n===e&&i.inFlightZipAssets.delete(t)}(c)}).catch(()=>{}),c.resultPromise.then(e=>{e.ok||s(c)},e=>{s(c,e)}),i.inFlightZipAssets.set(n,c),c},t.completeInFlightAssetLoad=function(e,t){const n=i.inFlightZipAssets.get(e);n&&s(n,t)},t.remapInFlightZipAssetsForRenewal=function(e,t){const n=(0,r.normalizeZipUrl)(e),s=(0,r.normalizeZipUrl)(t);for(const[e,t]of[...i.inFlightZipAssets]){const a=(0,r.parseZipAssetRequest)(e);if(a&&(0,r.normalizeZipUrl)(a.zipUrl)===n){const n=(0,r.canonicalZipAssetRequestUrl)(s,a.internalPath);i.inFlightZipAssets.delete(e),i.inFlightZipAssets.set(n,t)}}};const r=n(343),i=n(262);function s(e,t){void 0!==t?e.rejectCacheFill(t):e.resolveCacheFill()}},982(e,t,n){t.installFetchHandler=function(){self.addEventListener("fetch",e=>{const t=e.request.method;if("GET"!==t&&"HEAD"!==t)return;if(!(0,i.parseZipAssetRequest)(e.request.url))return;const n=async function(e,t){var n;const h="HEAD"===e.method,m=(0,i.parseZipAssetRequest)(e.url);let E=(0,i.normalizeZipUrl)(m.zipUrl);const A=m.internalPath,y=(0,i.normalizeZipEntryPath)(A);let U;try{let m;if(await(0,s.ensureAllowedZipUrlsLoaded)(),E=(0,u.resolveAllowedZipUrlByPathname)(E),!(0,s.isZipUrlAllowed)(E)&&(0,i.isPresignedUrlExpired)(E)){const e=await(0,u.requestClientRenewal)(E,t);e.ok?E=e.nextUrl:m=e.reason}if(!(0,s.isZipUrlAllowed)(E))return(0,c.warn)("zip URL not allowed",{requestedZipUrl:E}),d("ZIP URL not allowed",403,(0,r.zipErrorInfo)({zipPath:(0,i.zipPackagePathname)(E),reason:m}));let P=l.zipManifests.get(E);if(P&&!h){const t=(0,p.resolveManifestEntry)(P,y,E,l.runtimeConfig.requireExactManifestPath);if(t){const n=(0,a.canonicalAssetRequest)(E,t.key),r=await(0,a.readCachedZipAssetIfFresh)(n);if(r.response){const n=(0,p.entryUncompressedSize)(t.info);return{response:w(r.response.body,(0,f.getMimeType)(t.key),n,r.assetSource,e.headers.get("range"))}}}}if((0,i.isPresignedUrlExpired)(E)&&(!h||!P)){const e=await(0,u.requestClientRenewal)(E,t);if(!e.ok)return d("Failed to renew expired presigned ZIP URL",502,(0,r.zipErrorInfo)({zipPath:(0,i.zipPackagePathname)(E),reason:e.reason}));E=e.nextUrl,P=l.zipManifests.get(E)}if(P||(P=null!==(n=await(0,p.ensureManifestAvailable)(E,t))&&void 0!==n?n:void 0),!P){const e=Array.from(l.zipManifests.keys());return(0,c.warn)("manifest missing for zipUrl",{requestedZipUrl:E,knownZipUrls:e}),d("ZIP manifest not loaded",404,(0,r.zipErrorInfo)({zipPath:(0,i.zipPackagePathname)(E)}))}const R=(0,p.resolveManifestEntry)(P,y,E,l.runtimeConfig.requireExactManifestPath);if(!R){const e=Array.from(P.keys()).slice(0,50);return(0,c.warn)("file not in manifest",{zipUrl:E,internalPathRaw:A,internalPathNormalized:y,requireExactManifestPath:l.runtimeConfig.requireExactManifestPath,manifestSize:P.size,sampleKeys:e}),d("File not found in ZIP manifest",404,(0,r.zipErrorInfo)({path:y,zipPath:(0,i.zipPackagePathname)(E)}))}const{key:Z,info:z,matchKind:C}=R;if("zipBasenameFallback"===C&&((0,c.log)("resolved via zip-basename folder fallback",{requested:y,manifestKey:Z}),(0,c.reportClientError)(new Error((0,r.formatZipPeekError)("Exact manifest path not found; resolved via zip-basename folder fallback")),`Exact manifest key "${y}" not found in ${E}; resolved using "${Z}"`)),h)return{response:g(e,Z,z)};const v=(0,a.canonicalAssetRequest)(E,Z),S=await(0,a.readCachedZipAssetIfFresh)(v),_=(0,p.entryUncompressedSize)(z),b=(0,f.getMimeType)(Z);if(S.response)return{response:w(S.response.body,b,_,S.assetSource,e.headers.get("range"))};const I=(0,o.getOrStartInFlightAsset)(v,()=>(0,f.fetchUncompressedZipEntryFromNetwork)(E,Z,z));U=v.url;const M=await I.resultPromise;if(!M.ok)return(0,o.completeInFlightAssetLoad)(v.url),{response:M.response};const k=!I.leaderClaimed&&(I.leaderClaimed=!0),L=8===z.compression?null:e.headers.get("range");if(!k){await I.cacheFillPromise;const t=await(0,a.readCachedZipAssetIfFresh)(v);return t.response?{response:w(t.response.body,b,_,t.assetSource,e.headers.get("range"))}:d("Asset cache was not ready after in-flight load",500,(0,r.zipErrorInfo)({path:Z,zipPath:(0,i.zipPackagePathname)(E)}))}const[T,F]=M.stream.tee(),x={"Content-Type":M.contentType};null!==M.contentLength&&(x["Content-Length"]=String(M.contentLength));const O=v.url,N=(0,a.putCachedFullAssetIfAbsent)(v,new Response(F,{status:200,headers:x})).then(()=>{(0,o.completeInFlightAssetLoad)(O)}).catch(e=>{throw(0,o.completeInFlightAssetLoad)(O,e),e});return{response:w(T,M.contentType,M.contentLength,"network",L),background:N}}catch(e){U&&(0,o.completeInFlightAssetLoad)(U,e),(0,c.error)("fetch handler failed",{zipUrl:E,internalPath:A,message:(0,r.errorMessage)(e)});const t=(0,r.errorMessage)(e),n=t.includes(r.NETWORK_ERROR_PREFIX)?t.startsWith(r.ZIP_PEEK_ERROR_PREFIX)?t.slice(r.ZIP_PEEK_ERROR_PREFIX.length).trim():t:"ZIP asset request failed",s=(0,r.zipPeekErrorInfo)(e);return d(n,500,[(0,r.zipErrorInfo)({path:A,zipPath:(0,i.zipPackagePathname)(E),cause:s?void 0:(0,r.errorMessage)(e)}),s].filter(Boolean).join(" "))}}(e.request,e.clientId||void 0);e.respondWith(n.then(({response:e})=>e)),e.waitUntil(n.then(({background:e})=>e).catch(e=>{(0,c.warn)("background asset cache failed",(0,r.errorMessage)(e))}))})};const r=n(553),i=n(343),s=n(314),a=n(800),o=n(30),l=n(262),c=n(266),p=n(346),u=n(933),f=n(254);function d(e,t,n,i){return(0,c.reportClientError)((0,r.createZipPeekError)(e),n),{response:(0,f.corsErrorResponse)(e,t,i)}}function h(e){return{"Access-Control-Allow-Origin":"*","Access-Control-Expose-Headers":l.ASSET_SOURCE_HEADER,[l.ASSET_SOURCE_HEADER]:e}}function w(e,t,n,r,i){if(i){if(null===n)return null==e||e.cancel(),new Response(null,{status:416,headers:h(r)});const s=i.replace(/^bytes=/,"");if(s.includes(","))return null==e||e.cancel(),new Response(null,{status:416,headers:Object.assign({"Content-Range":`bytes */${n}`},h(r))});const[a,o]=s.split("-"),l=""!==a?parseInt(a,10):NaN,c=""!==o?parseInt(o,10):n-1;if(isNaN(l)||isNaN(c)||l<0||c<l||l>=n)return null==e||e.cancel(),new Response(null,{status:416,headers:Object.assign({"Content-Range":`bytes */${n}`},h(r))});const p=Math.min(c,n-1),u=p-l+1,f=null===e?null:function(e,t,n){const r=e.getReader();let i=0,s=!1;return new ReadableStream({async pull(e){for(;!s;){const{done:a,value:o}=await r.read();if(a)return s=!0,void e.close();const l=o,c=i,p=i+l.byteLength-1;if(i+=l.byteLength,p<t)continue;if(c>n)return s=!0,void e.close();const u=Math.max(0,t-c),f=Math.min(l.byteLength,n-c+1);if(f>u&&e.enqueue(l.subarray(u,f)),p>=n)return s=!0,void e.close()}},cancel:e=>r.cancel(e)})}(e,l,p);return new Response(f,{status:206,headers:Object.assign({"Content-Type":t,"Content-Range":`bytes ${l}-${p}/${n}`,"Content-Length":u.toString(),"Accept-Ranges":"bytes"},h(r))})}const s=Object.assign({"Content-Type":t},h(r));return null!==n&&(s["Content-Length"]=n.toString(),s["Accept-Ranges"]="bytes"),new Response(e,{status:200,headers:s})}function g(e,t,n){const r=(0,f.getMimeType)(t),i=(0,p.entryUncompressedSize)(n),s=e.headers.get("range");if(null!==i&&s)return w(null,r,i,"manifest",s);const a=Object.assign({"Content-Type":r},h("manifest"));return null!==i&&(a["Content-Length"]=i.toString(),a["Accept-Ranges"]="bytes"),new Response(null,{status:200,headers:a})}},262(e,t){function n(){const e=new Set;for(const n of t.clientAllowedZipUrls.values())for(const t of n)e.add(t);return e}t.CONFIG_CACHE_KEY=t.allowedZipUrlsLoaded=t.persistedAllowUnion=t.allowListRestricted=t.clientAllowedZipUrls=t.runtimeConfig=t.inFlightZipAssets=t.pendingManifestLoads=t.zipManifests=t.LOCAL_FILE_HEADER_SIG=t.MIME_TYPES=t.ASSET_UPSTREAM_STATUS_HEADER=t.ASSET_ERROR_HEADER=t.ASSET_SOURCE_HEADER=t.ASSET_CACHED_AT_HEADER=t.CONFIG_CACHE_NAME=t.kF=t.o2=void 0,t.setRuntimeConfig=function(e){t.runtimeConfig=e},t.setAllowListRestricted=function(e){t.allowListRestricted=e},t.setPersistedAllowUnion=function(e){t.persistedAllowUnion=e},t.setAllowedZipUrlsLoaded=function(e){t.allowedZipUrlsLoaded=e},t.getClaimsUnion=n,t.getAllowedZipUrlsUnion=function(){return t.allowListRestricted?t.clientAllowedZipUrls.size>0?n():null!==t.persistedAllowUnion&&void 0!==t.persistedAllowUnion?t.persistedAllowUnion:new Set:null},t.setClientAllowedZipUrls=function(e,n){if(null===n)return void t.clientAllowedZipUrls.delete(e);t.allowListRestricted=!0;const r=t.clientAllowedZipUrls.get(e);if(r)for(const e of n)r.add(e);else t.clientAllowedZipUrls.set(e,new Set(n))},t.clearAllClientClaims=function(){t.clientAllowedZipUrls.clear(),t.allowListRestricted=!1,t.persistedAllowUnion=null},t.o2="zip-cache-v1",t.kF=72e5,t.CONFIG_CACHE_NAME="zip-peek-config-v1",t.o2,t.CONFIG_CACHE_NAME,t.ASSET_CACHED_AT_HEADER="X-ZipSW-Cached-At",t.ASSET_SOURCE_HEADER="X-ZipSW-Asset-Source",t.ASSET_ERROR_HEADER="X-ZipSW-Error",t.ASSET_UPSTREAM_STATUS_HEADER="X-ZipSW-Upstream-Status",t.MIME_TYPES={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp",svg:"image/svg+xml",json:"application/json",js:"application/javascript",css:"text/css; charset=utf-8",html:"text/html; charset=utf-8",txt:"text/plain; charset=utf-8",mp4:"video/mp4",webm:"video/webm",mp3:"audio/mpeg",wav:"audio/wav",oga:"audio/ogg",ogg:"audio/ogg",xml:"application/xml",wasm:"application/wasm"},t.LOCAL_FILE_HEADER_SIG=67324752,t.zipManifests=new Map,t.pendingManifestLoads=new Map,t.inFlightZipAssets=new Map,t.runtimeConfig={zipAssetCacheName:t.o2,assetCacheTtlMs:t.kF,logPrefix:"[zipSW]",requireExactManifestPath:!1},t.clientAllowedZipUrls=new Map,t.allowListRestricted=!1,t.persistedAllowUnion=null,t.allowedZipUrlsLoaded=null,t.CONFIG_CACHE_KEY=new URL("__zip_peek_runtime_config__",self.registration.scope).href},266(e,t,n){t.log=function(...e){console.log(i.runtimeConfig.logPrefix,...e)},t.warn=function(...e){console.warn(i.runtimeConfig.logPrefix,...e)},t.error=function(...e){console.error(i.runtimeConfig.logPrefix,r.ZIP_PEEK_ERROR_PREFIX,...e)},t.reportClientError=s,t.installClientErrorReporting=function(){self.addEventListener("error",e=>{var t;s(null!==(t=e.error)&&void 0!==t?t:e.message,"Service worker uncaught error")}),self.addEventListener("unhandledrejection",e=>{s(e.reason,"Service worker unhandled promise rejection")})};const r=n(553),i=n(262);function s(e,t){const n=(0,r.toZipPeekError)(e);self.clients.matchAll({type:"window",includeUncontrolled:!0}).then(e=>{const i={type:"ZIP_SW_ERROR",error:{message:n.message,stack:n.stack},info:t?(0,r.formatZipPeekError)(t):void 0};for(const t of e)t.postMessage(i)})}},346(e,t,n){t.manifestFilesToMap=o,t.sendManifestToClientId=c,t.ensureManifestAvailable=function(e,t){const n=s.zipManifests.get(e);if(n)return Promise.resolve(n);let p=s.pendingManifestLoads.get(e);return p||(p=(async()=>{const n=await async function(e,t){const n=await l(t);return n?function(e,t){return new Promise(n=>{const r=new MessageChannel,i=setTimeout(()=>{r.port1.close(),n(null)},500);r.port1.onmessage=e=>{clearTimeout(i),r.port1.close();const t=e.data;(null==t?void 0:t.ok)&&Array.isArray(t.files)?n(o(t.files)):n(null)},r.port1.onmessageerror=()=>{clearTimeout(i),r.port1.close(),n(null)};try{e.postMessage({type:"ZIP_SW_MANIFEST_REQUEST",zipUrl:t},[r.port2])}catch(e){clearTimeout(i),r.port1.close(),(0,a.warn)("failed to request manifest from client",e),n(null)}})}(n,e):null}(e,t);if(n)return s.zipManifests.set(e,n),(0,a.log)("restored manifest from client memory",{zipUrl:e,entryCount:n.size}),n;const p=await async function(e){let t;try{t=await fetch(e,{headers:{Range:"bytes=-65536"}})}catch(t){throw(0,r.createZipPeekError)(`${r.NETWORK_ERROR_PREFIX} ZIP manifest fetch failed`,(0,r.zipErrorInfo)({zipPath:(0,i.zipPackagePathname)(e),cause:(0,r.errorMessage)(t)}))}if(206!==t.status)return(0,a.error)("range requests not supported for ZIP manifest",{zipUrl:e,status:t.status}),null;const n=await t.arrayBuffer(),s=new DataView(n);let o=-1;for(let e=n.byteLength-22;e>=0;e--)if(101010256===s.getUint32(e,!0)){o=e;break}if(-1===o)return(0,a.error)("EOCD not found in last 64KB of ZIP file",e),null;const l=s.getUint32(o+16,!0),c=s.getUint32(o+12,!0);let p=n,u=-1;const f=t.headers.get("Content-Range");let d=0;if(f){const e=f.match(/\/(\d+)$/);e&&(d=parseInt(e[1],10))}if(d<=0)return(0,a.error)("could not determine ZIP file size from Content-Range header",{zipUrl:e,contentRange:f}),null;const h=d-n.byteLength;if(l>=h)u=l-h;else{let t;try{t=await fetch(e,{headers:{Range:`bytes=${l}-${l+c-1}`}})}catch(t){throw(0,r.createZipPeekError)(`${r.NETWORK_ERROR_PREFIX} ZIP manifest fetch failed`,(0,r.zipErrorInfo)({zipPath:(0,i.zipPackagePathname)(e),cause:(0,r.errorMessage)(t)}))}if(206!==t.status)return(0,a.error)("failed to fetch ZIP central directory",{zipUrl:e,status:t.status,cdOffset:l,cdSize:c}),null;p=await t.arrayBuffer(),u=0}return function(e,t,n,r){const s=new DataView(e);let o=t;const l=[];for(;o+46<=e.byteLength&&33639248===s.getUint32(o,!0);){const t=s.getUint16(o+10,!0),n=s.getUint32(o+20,!0),r=s.getUint32(o+24,!0),a=s.getUint16(o+28,!0),c=s.getUint16(o+30,!0),p=s.getUint16(o+32,!0),u=s.getUint32(o+42,!0),f=new TextDecoder;if(o+46+a>e.byteLength)break;const d=new Uint8Array(e,o+46,a),h=f.decode(d),w=(0,i.normalizeZipEntryPath)(h);""!==w&&l.push({filename:w,offset:u,compressedSize:n,uncompressedSize:r,compression:t}),o+=46+a+c+p}if(0===l.length)return(0,a.error)("no files parsed from central directory",r),null;l.sort((e,t)=>e.offset-t.offset);const c=new Map;for(let e=0;e<l.length;e++){const t=l[e],r=(0,i.normalizeZipEntryPath)(t.filename);""!==r&&(c.has(r)&&(0,a.warn)("duplicate manifest key after normalize; overwriting",r),c.set(r,{filename:t.filename,offset:t.offset,compressedSize:t.compressedSize,uncompressedSize:t.uncompressedSize,compression:t.compression,nextOffset:e<l.length-1?l[e+1].offset:n}))}return c.size>0?c:null}(p,u,l,e)}(e);return p&&(s.zipManifests.set(e,p),await c(e,p,t),(0,a.log)("manifest fetched and stored in memory",{zipUrl:e,entryCount:p.size})),p})().finally(()=>{s.pendingManifestLoads.delete(e)}),s.pendingManifestLoads.set(e,p),p)},t.entryUncompressedSize=function(e){return void 0!==e.uncompressedSize?e.uncompressedSize:0===e.compression?e.compressedSize:null},t.resolveManifestEntry=function(e,t,n,r){if(e.has(t))return{key:t,info:e.get(t),matchKind:"exact"};if(r)return null;const s=(0,i.zipBasenameWithoutExtension)(n);if(!s)return null;const a=`${s}/${t}`;return e.has(a)?{key:a,info:e.get(a),matchKind:"zipBasenameFallback"}:null};const r=n(553),i=n(343),s=n(262),a=n(266);function o(e){const t=new Map;for(const n of e){const e=(0,i.normalizeZipEntryPath)(n.filename);""!==e&&(t.has(e)&&(0,a.warn)("duplicate manifest key after normalize; overwriting",e),t.set(e,n))}return t.size>0?t:null}async function l(e){if(!e)return null;const t=await self.clients.get(e);return"window"===(null==t?void 0:t.type)?t:null}async function c(e,t,n){const r=await l(n);if(!r)return;const i=Array.from(t.values());try{r.postMessage({type:"ZIP_SW_MANIFEST_CREATED",zipUrl:e,files:i})}catch(e){(0,a.warn)("failed to send manifest to client",e)}}},993(e,t,n){t.installMessageHandler=function(){self.addEventListener("message",e=>{if(!e.data)return;const{type:t,zipUrl:n,files:f,config:d,allowedZipUrls:h,previousUrl:w,nextUrl:g}=e.data,m=function(e){if(!e||!("id"in e))return;const t=e.id;return"string"==typeof t?t:void 0}(e.source);if("ZIP_SW_CONFIG"===t){const t=(0,s.applyRuntimeConfig)(d,m).then(()=>u(e,{ok:!0})).catch(t=>u(e,p(t)));return void e.waitUntil(t)}if("ZIP_MANIFEST"===t){if(n&&f){const t=(0,i.normalizeZipUrl)(n),r=(0,c.manifestFilesToMap)(f),s=o.zipManifests.get(t);if(!r)return void(0,l.warn)("rejecting empty manifest; keeping existing",{zipUrl:t,existingSize:s?s.size:0});if(s&&s.size>r.size)return void(0,l.warn)("rejecting smaller manifest; keeping existing",{zipUrl:t,incomingSize:r.size,existingSize:s.size});o.zipManifests.set(t,r),e.waitUntil((0,c.sendManifestToClientId)(t,r,m));const a=Array.from(r.keys()).slice(0,40);(0,l.log)("ZIP_MANIFEST loaded",{zipUrl:t,entryCount:r.size,sampleKeys:a,replacedExistingSize:s?s.size:0})}}else if("CLEAR_ZIP_ASSETS_EXCEPT_ALLOWED"===t){const t=(0,s.clearZipAssetsExceptLiveClaims)(a.clearZipAssetsExceptAllowed).then(()=>u(e,{ok:!0})).catch(t=>u(e,p(t)));e.waitUntil(t)}else if("CLEAR_ALL_ZIP_ASSETS"===t){const t=(0,a.clearAllZipAssets)().then(()=>u(e,{ok:!0})).catch(t=>u(e,p(t)));e.waitUntil(t)}else if("PRELOAD_ZIP_MANIFESTS"===t&&h){const t=async function(e,t){const n=await Promise.all(e.map(async e=>({zipUrl:e,manifest:await(0,c.ensureManifestAvailable)(e,t)}))),i=n.filter(e=>!e.manifest).map(e=>e.zipUrl);if(i.length>0)throw(0,r.createZipPeekError)(`Failed to preload ZIP manifest(s): ${i.join(", ")}`)}(h,m).then(()=>u(e,{ok:!0})).catch(t=>u(e,p(t)));e.waitUntil(t)}else if("RENEW_ZIP_URL"===t&&w&&g){const t=(0,a.renewZipUrl)(w,g).then(()=>u(e,{ok:!0})).catch(t=>u(e,p(t)));e.waitUntil(t)}})};const r=n(553),i=n(343),s=n(314),a=n(800),o=n(262),l=n(266),c=n(346);function p(e){const t=(0,r.toZipPeekError)(e);return{ok:!1,error:t.message,errorStack:t.stack}}function u(e,t){var n;null===(n=e.ports[0])||void 0===n||n.postMessage(t)}},933(e,t,n){t.resolveAllowedZipUrlByPathname=function(e){const t=(0,i.getAllowedZipUrlsUnion)();if(null===t||t.has(e))return e;const n=(0,r.zipPackagePathname)(e);for(const e of t)if((0,r.zipPackagePathname)(e)===n)return e;return e},t.requestClientRenewal=function(e,t){if(null==(0,r.getPresignedUrlExpiryMs)(e))return Promise.resolve({ok:!1,reason:"not-presigned"});const n=(0,r.zipPackagePathname)(e)||(0,r.normalizeZipUrl)(e),i=a.get(n);if(i)return i;const o=async function(e,t){var n;let i=await async function(e){if(!e)return null;const t=await self.clients.get(e);return"window"===(null==t?void 0:t.type)?t:null}(t);if(!i){const e=await self.clients.matchAll({type:"window"});i=null!==(n=e[0])&&void 0!==n?n:null}return i?new Promise(t=>{const n=new MessageChannel;let a=!1;const o=e=>{a||(a=!0,n.port1.onmessage=null,n.port1.onmessageerror=null,n.port1.close(),t(e))};n.port1.onmessage=e=>{const t=e.data;if(!(null==t?void 0:t.ok)||"string"!=typeof t.nextUrl||""===t.nextUrl)return void o({ok:!1,reason:"page-rejected"});const n=(0,r.normalizeZipUrl)(t.nextUrl);(0,r.isPresignedUrlExpired)(n)?o({ok:!1,reason:"still-expired"}):o({ok:!0,nextUrl:n})},n.port1.onmessageerror=()=>{o({ok:!1,reason:"page-rejected"})};try{i.postMessage({type:"ZIP_SW_RENEW_REQUEST",zipUrl:e},[n.port2])}catch(e){(0,s.warn)("failed to post ZIP_SW_RENEW_REQUEST",e),o({ok:!1,reason:"page-rejected"})}}):{ok:!1,reason:"no-window-client"}}(e,t).finally(()=>{a.delete(n)});return a.set(n,o),o};const r=n(343),i=n(262),s=n(266),a=new Map},254(e,t,n){t.corsErrorResponse=p,t.getMimeType=f,t.fetchUncompressedZipEntryFromNetwork=async function(e,t,n){var l;const c=n.offset,p=n.nextOffset-1,h=(0,s.zipPackagePathname)(e);let w;(0,o.log)("fetching zip chunk from",{zipUrl:e,rangeStart:c,rangeEnd:p});try{w=await fetch(e,{headers:{Range:`bytes=${c}-${p}`}})}catch(e){return u(`${i.NETWORK_ERROR_PREFIX} ZIP asset fetch failed`,500,(0,i.zipErrorInfo)({path:t,zipPath:h,cause:(0,i.errorMessage)(e)}))}if(206!==w.status)return u("ZIP origin fetch failed",w.status>=400?w.status:502,(0,i.zipErrorInfo)({path:t,zipPath:h,status:w.status}),{upstreamStatus:w.status});if(!w.body)return u("ZIP origin fetch failed",502,(0,i.zipErrorInfo)({path:t,zipPath:h,reason:"empty-body"}));const g=w.body.getReader();let m,E;try{({headerAndPayload:m,dataStart:E}=await async function(e){let t=new Uint8Array(0);for(;t.byteLength<30;){const{done:n,value:r}=await e.read();if(n)throw new Error("ZIP entry ended before its local file header was complete");t=d(t,r)}const n=new DataView(t.buffer,t.byteOffset,t.byteLength);if(n.getUint32(0,!0)!==a.LOCAL_FILE_HEADER_SIG)throw new Error("Invalid local file header (expected ZIP signature 0x04034b50)");const r=30+n.getUint16(26,!0)+n.getUint16(28,!0);for(;t.byteLength<r;){const{done:n,value:r}=await e.read();if(n)throw new Error("ZIP entry ended before its local file header fields were complete");t=d(t,r)}return{headerAndPayload:t,dataStart:r}}(g))}catch(e){return await g.cancel(e),u("ZIP asset request failed",500,(0,i.zipErrorInfo)({path:t,zipPath:h,cause:(0,i.errorMessage)(e)}))}const A=function(e,t,n){let r=t,i=0;return new ReadableStream({async pull(t){if(i>=n)return await e.cancel(),void t.close();let s;if(r.byteLength>0)s=r,r=new Uint8Array(0);else{const{done:r,value:a}=await e.read();if(r)return void t.error(new Error(`ZIP entry ended after ${i} of ${n} compressed bytes`));s=a}const a=n-i,o=s.byteLength>a?s.subarray(0,a):s;i+=o.byteLength,t.enqueue(o),i>=n&&(await e.cancel(),t.close())},cancel:t=>e.cancel(t)})}(g,m.subarray(E),n.compressedSize),y=null!==(l=n.uncompressedSize)&&void 0!==l?l:0===n.compression?n.compressedSize:null;let U;if(8===n.compression)U=function(e,t){const n=e.getReader();let i,s=0,a=!1;return new ReadableStream({start(e){i=new r.Inflate(t=>{s+=t.byteLength,e.enqueue(t)})},async pull(e){for(;!a;){const{done:r,value:o}=await n.read();if(r)return a=!0,i.push(new Uint8Array(0),!0),null!==t&&s!==t?void e.error(new Error(`Inflated ZIP entry size mismatch: expected ${t}, received ${s}`)):void e.close();i.push(o)}},cancel:e=>n.cancel(e)})}(A,y);else{if(0!==n.compression)return await g.cancel(),u("ZIP asset request failed",500,(0,i.zipErrorInfo)({path:t,zipPath:h,reason:"unsupported-compression",method:n.compression}));U=A}return{ok:!0,stream:U,contentLength:y,contentType:f(t)}};const r=n(612),i=n(553),s=n(343),a=n(262),o=n(266);function l(e){return e.replace(/[\r\n]+/g," ").trim()}function c(e,t){const n=[a.ASSET_ERROR_HEADER],r={"Access-Control-Allow-Origin":"*",[a.ASSET_ERROR_HEADER]:l(e)},i=null==t?void 0:t.upstreamStatus;return void 0!==i&&(r[a.ASSET_UPSTREAM_STATUS_HEADER]=String(i),n.push(a.ASSET_UPSTREAM_STATUS_HEADER)),r["Access-Control-Expose-Headers"]=n.join(", "),r}function p(e,t,n){const r=(0,i.formatZipPeekError)(e);return new Response(r,{status:t,headers:c(r,n)})}function u(e,t,n,r){return(0,o.reportClientError)((0,i.createZipPeekError)(e),n),{ok:!1,response:p(e,t,r)}}function f(e){var t,n;const r=null===(t=e.split(".").pop())||void 0===t?void 0:t.toLowerCase();return r&&null!==(n=a.MIME_TYPES[r])&&void 0!==n?n:"application/octet-stream"}function d(e,t){const n=new Uint8Array(e.byteLength+t.byteLength);return n.set(e),n.set(t,e.byteLength),n}},343(e,t){function n(e){try{return decodeURIComponent(e)}catch(t){return e}}function r(e){const t=t=>function(e,t,n={}){const{stopAtPathSeparator:r=!0}=n,i=e.indexOf("?");if(-1===i)return null;const s=e.indexOf("#",i),a=-1===s?e.substring(i+1):e.substring(i+1,s),o=r?a.indexOf("/"):-1,l=-1===o?a:a.substring(0,o);for(const e of l.split("&")){const n=e.indexOf("=");if((-1===n?e:e.substring(0,n))===t)return-1===n?"":e.substring(n+1)}return null}(e,t,{stopAtPathSeparator:!1}),n=t("Expires");if(null!=n&&""!==n){const e=Number(n);if(Number.isFinite(e)&&e>0)return 1e3*e}const r=t("X-Amz-Date"),i=t("X-Amz-Expires");if(r&&i){const e=/^(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})Z$/.exec(r);if(!e)return null;const[,t,n,s,a,o,l]=e,c=Date.UTC(Number(t),Number(n)-1,Number(s),Number(a),Number(o),Number(l)),p=Number(i);return!Number.isFinite(c)||!Number.isFinite(p)||p<=0?null:c+1e3*p}return null}t.normalizeZipUrl=function(e,t={}){const{stripCacheBuster:n=!0,stripHash:r=!0}=t,i=e=>r?e.split("#")[0]:e;if(!n)return i(e);const s=e.indexOf("?");if(-1===s)return i(e);const a=e.indexOf("#",s),o=e.substring(0,s),l=-1===a?e.substring(s+1):e.substring(s+1,a),c=r||-1===a?"":e.substring(a),p=l.split("&").filter(e=>{const t=e.indexOf("=");return"t"!==(-1===t?e:e.substring(0,t))});return 0===p.length?o+c:o+"?"+p.join("&")+c},t.zipPackagePathname=function(e){try{return new URL(e).pathname}catch(t){return e.split("?")[0].split("#")[0]}},t.isPresignedUrlExpired=function(e){const t=r(e);return null!=t&&t<=Date.now()},t.zipBasenameWithoutExtension=function(e){var t,n;try{const n=null!==(t=new URL(e,"http://local").pathname.split("/").pop())&&void 0!==t?t:"";return n.endsWith(".zip")?n.slice(0,-4):n}catch(t){const r=null!==(n=e.split("?")[0].split("#")[0].split("/").pop())&&void 0!==n?n:"";return r.endsWith(".zip")?r.slice(0,-4):r}},t.normalizeZipEntryPath=function(e){let t=e.replace(/\\/g,"/");for(;t.startsWith("/");)t=t.slice(1);return t},t.parseZipAssetRequest=function(e){const t=/\.zip([/?])/.exec(e);if(!t)return null;const r=t.index+4,i=t[1],s=e.substring(0,r);if("/"===i){const t=e.substring(r+1),i=t.indexOf("?"),a=-1===i?t:t.substring(0,i);return""===a?null:{zipUrl:s,internalPath:n(a)}}const a=e.substring(r),o=a.indexOf("/");if(-1===o)return null;const l=a.substring(0,o),c=a.substring(o+1),p=c.indexOf("?"),u=-1===p?c:c.substring(0,p);return""===u?null:{zipUrl:s+l,internalPath:n(u)}},t.canonicalZipAssetRequestUrl=function(e,t){return e+"/"+encodeURIComponent(t)},t.getPresignedUrlExpiryMs=r},612(e,t){var n=Uint8Array,r=Uint16Array,i=Int32Array,s=new n([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),a=new n([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new n([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),l=function(e,t){for(var n=new r(31),s=0;s<31;++s)n[s]=t+=1<<e[s-1];var a=new i(n[30]);for(s=1;s<30;++s)for(var o=n[s];o<n[s+1];++o)a[o]=o-n[s]<<5|s;return{b:n,r:a}},c=l(s,2),p=c.b,u=c.r;p[28]=258,u[258]=28;for(var f=l(a,0),d=f.b,h=(f.r,new r(32768)),w=0;w<32768;++w){var g=(43690&w)>>1|(21845&w)<<1;g=(61680&(g=(52428&g)>>2|(13107&g)<<2))>>4|(3855&g)<<4,h[w]=((65280&g)>>8|(255&g)<<8)>>1}var m=function(e,t,n){for(var i=e.length,s=0,a=new r(t);s<i;++s)e[s]&&++a[e[s]-1];var o,l=new r(t);for(s=1;s<t;++s)l[s]=l[s-1]+a[s-1]<<1;if(n){o=new r(1<<t);var c=15-t;for(s=0;s<i;++s)if(e[s])for(var p=s<<4|e[s],u=t-e[s],f=l[e[s]-1]++<<u,d=f|(1<<u)-1;f<=d;++f)o[h[f]>>c]=p}else for(o=new r(i),s=0;s<i;++s)e[s]&&(o[s]=h[l[e[s]-1]++]>>15-e[s]);return o},E=new n(288);for(w=0;w<144;++w)E[w]=8;for(w=144;w<256;++w)E[w]=9;for(w=256;w<280;++w)E[w]=7;for(w=280;w<288;++w)E[w]=8;var A=new n(32);for(w=0;w<32;++w)A[w]=5;var y=m(E,9,1),U=m(A,5,1),P=function(e){for(var t=e[0],n=1;n<e.length;++n)e[n]>t&&(t=e[n]);return t},R=function(e,t,n){var r=t/8|0;return(e[r]|e[r+1]<<8)>>(7&t)&n},Z=function(e,t){var n=t/8|0;return(e[n]|e[n+1]<<8|e[n+2]<<16)>>(7&t)},z=function(e){return(e+7)/8|0},C=function(e,t,r){return(null==t||t<0)&&(t=0),(null==r||r>e.length)&&(r=e.length),new n(e.subarray(t,r))},v=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],S=function(e,t,n){var r=new Error(t||v[e]);if(r.code=e,Error.captureStackTrace&&Error.captureStackTrace(r,S),!n)throw r;return r},_=function(e,t,r,i){var l=e.length,c=i?i.length:0;if(!l||t.f&&!t.l)return r||new n(0);var u=!r,f=u||2!=t.i,h=t.i;u&&(r=new n(3*l));var w=function(e){var t=r.length;if(e>t){var i=new n(Math.max(2*t,e));i.set(r),r=i}},g=t.f||0,E=t.p||0,A=t.b||0,v=t.l,_=t.d,b=t.m,I=t.n,M=8*l;do{if(!v){g=R(e,E,1);var k=R(e,E+1,3);if(E+=3,!k){var L=e[($=z(E)+4)-4]|e[$-3]<<8,T=$+L;if(T>l){h&&S(0);break}f&&w(A+L),r.set(e.subarray($,T),A),t.b=A+=L,t.p=E=8*T,t.f=g;continue}if(1==k)v=y,_=U,b=9,I=5;else if(2==k){var F=R(e,E,31)+257,x=R(e,E+10,15)+4,O=F+R(e,E+5,31)+1;E+=14;for(var N=new n(O),H=new n(19),q=0;q<x;++q)H[o[q]]=R(e,E+3*q,7);E+=3*x;var D=P(H),j=(1<<D)-1,W=m(H,D,1);for(q=0;q<O;){var $,K=W[R(e,E,j)];if(E+=15&K,($=K>>4)<16)N[q++]=$;else{var X=0,G=0;for(16==$?(G=3+R(e,E,3),E+=2,X=N[q-1]):17==$?(G=3+R(e,E,7),E+=3):18==$&&(G=11+R(e,E,127),E+=7);G--;)N[q++]=X}}var B=N.subarray(0,F),Y=N.subarray(F);b=P(B),I=P(Y),v=m(B,b,1),_=m(Y,I,1)}else S(1);if(E>M){h&&S(0);break}}f&&w(A+131072);for(var Q=(1<<b)-1,V=(1<<I)-1,J=E;;J=E){var ee=(X=v[Z(e,E)&Q])>>4;if((E+=15&X)>M){h&&S(0);break}if(X||S(2),ee<256)r[A++]=ee;else{if(256==ee){J=E,v=null;break}var te=ee-254;if(ee>264){var ne=s[q=ee-257];te=R(e,E,(1<<ne)-1)+p[q],E+=ne}var re=_[Z(e,E)&V],ie=re>>4;if(re||S(3),E+=15&re,Y=d[ie],ie>3&&(ne=a[ie],Y+=Z(e,E)&(1<<ne)-1,E+=ne),E>M){h&&S(0);break}f&&w(A+131072);var se=A+te;if(A<Y){var ae=c-Y,oe=Math.min(Y,se);for(ae+A<0&&S(3);A<oe;++A)r[A]=i[ae+A]}for(;A<se;++A)r[A]=r[A-Y]}}t.l=v,t.p=J,t.b=A,t.f=g,v&&(g=1,t.m=b,t.d=_,t.n=I)}while(!g);return A!=r.length&&u?C(r,0,A):r.subarray(0,A)},b=new n(0);var I=function(){function e(e,t){"function"==typeof e&&(t=e,e={}),this.ondata=t;var r=e&&e.dictionary&&e.dictionary.subarray(-32768);this.s={i:0,b:r?r.length:0},this.o=new n(32768),this.p=new n(0),r&&this.o.set(r)}return e.prototype.e=function(e){if(this.ondata||S(5),this.d&&S(4),this.p.length){if(e.length){var t=new n(this.p.length+e.length);t.set(this.p),t.set(e,this.p.length),this.p=t}}else this.p=e},e.prototype.c=function(e){this.s.i=+(this.d=e||!1);var t=this.s.b,n=_(this.p,this.s,this.o);this.ondata(C(n,t,this.s.b),this.d),this.o=C(n,this.s.b-32768),this.s.b=this.o.length,this.p=C(this.p,this.s.p/8|0),this.s.p&=7},e.prototype.push=function(e,t){this.e(e),this.c(t)},e}();t.Inflate=I;var M="undefined"!=typeof TextDecoder&&new TextDecoder;try{M.decode(b,{stream:!0})}catch(e){}"function"==typeof queueMicrotask?queueMicrotask:"function"==typeof setTimeout&&setTimeout}};const t={};function n(r){const i=t[r];if(void 0!==i)return i.exports;const s=t[r]={exports:{}};return e[r](s,s.exports,n),s.exports}(()=>{const e=n(266),t=n(982),r=n(993);self.addEventListener("install",()=>{self.skipWaiting()}),self.addEventListener("activate",e=>{e.waitUntil(self.clients.claim())}),(0,e.installClientErrorReporting)(),(0,r.installMessageHandler)(),(0,t.installFetchHandler)()})()})();
1
+ (()=>{"use strict";var e={616(e,t){function n(e){const n=e.trim();return n.startsWith(t.ZIP_PEEK_ERROR_PREFIX)?n:`${t.ZIP_PEEK_ERROR_PREFIX} ${n}`}t.NETWORK_ERROR_PREFIX=t.ZIP_PEEK_ERROR_PREFIX=void 0,t.formatZipPeekError=n,t.zipErrorInfo=function(e){return Object.entries(e).filter(e=>{const t=e[1];return null!=t&&""!==t}).map(([e,t])=>`${e}=${String(t)}`).join(" ")},t.createZipPeekError=function(e,t,r){const s=new Error(n(e));return s.zipPeekLevel=t,r&&(s.zipPeekInfo=r),s},t.toZipPeekError=function(e){const r=e instanceof Error?e:new Error(String(e));return r.message.startsWith(t.ZIP_PEEK_ERROR_PREFIX)||(r.message=n(r.message)),r.zipPeekLevel||(r.zipPeekLevel="error"),r},t.zipPeekErrorInfo=function(e){if(e&&"object"==typeof e&&"zipPeekInfo"in e){return e.zipPeekInfo||void 0}},t.errorMessage=function(e){return e instanceof Error?e.message:String(e)},t.ZIP_PEEK_ERROR_PREFIX="[zip-peek-error]",t.NETWORK_ERROR_PREFIX="[NetworkError]"},285(e,t,n){t.ZIP_PEEK_VERSION=void 0,t.ZIP_PEEK_VERSION=n(330).version},887(e,t,n){t.clearAllClientClaims=void 0,t.persistAllowListState=o,t.ensureAllowedZipUrlsLoaded=async function(){if(s.allowedZipUrlsLoaded)return s.allowedZipUrlsLoaded;const e=(async()=>{try{const e=await caches.open(s.CONFIG_CACHE_NAME),t=await e.match(s.CONFIG_CACHE_KEY);if(!t)return;const n=await t.json();if(Array.isArray(n.allowedZipUrls)){const e=new Set(n.allowedZipUrls.filter(e=>"string"==typeof e).map(e=>(0,r.normalizeZipUrl)(e)));(0,s.setAllowListRestricted)(!1!==n.restricted),(0,s.setPersistedAllowUnion)(e)}else(0,s.setAllowListRestricted)(!1),(0,s.setPersistedAllowUnion)(null)}catch(e){(0,i.warn)("failed to load runtime config",e)}})();return(0,s.setAllowedZipUrlsLoaded)(e),e},t.clearZipAssetsExceptLiveClaims=async function(e){if(await l(),!s.allowListRestricted)return;if(await async function(){const e=await self.clients.matchAll({type:"window",includeUncontrolled:!0});await Promise.all(e.map(e=>async function(e){await new Promise(t=>{const n=new MessageChannel,o=setTimeout(()=>{n.port1.onmessage=null,n.port1.close(),t()},400);n.port1.onmessage=i=>{clearTimeout(o);const a=i.data;a&&"allowedZipUrls"in a&&(Array.isArray(a.allowedZipUrls)?(0,s.setClientAllowedZipUrls)(e.id,a.allowedZipUrls.map(e=>(0,r.normalizeZipUrl)(e))):null===a.allowedZipUrls&&s.clientAllowedZipUrls.delete(e.id)),n.port1.onmessage=null,n.port1.close(),t()};try{e.postMessage({type:"ZIP_SW_CLAIM_REQUEST"},[n.port2])}catch(e){clearTimeout(o),n.port1.close(),(0,i.warn)("failed to post ZIP_SW_CLAIM_REQUEST",e),t()}})}(e))),s.clientAllowedZipUrls.size>0?((0,s.setAllowListRestricted)(!0),await o()):e.length>0&&((0,s.setAllowListRestricted)(!1),(0,s.setPersistedAllowUnion)(null),await a(null,!1))}(),await l(),!s.allowListRestricted)return;const t=(0,s.getClaimsUnion)();await e(Array.from(t)),await o()},t.applyRuntimeConfig=async function(e,t){if(!e)return;let n=Object.assign({},s.runtimeConfig),i=!1;if("string"==typeof e.zipAssetCacheName&&e.zipAssetCacheName.trim()&&(n.zipAssetCacheName=e.zipAssetCacheName,i=!0),"number"==typeof e.assetCacheTtlMs&&Number.isFinite(e.assetCacheTtlMs)&&(n.assetCacheTtlMs=e.assetCacheTtlMs,i=!0),"string"==typeof e.logPrefix&&e.logPrefix.trim()&&(n.logPrefix=e.logPrefix,i=!0),"boolean"==typeof e.requireExactManifestPath&&(n.requireExactManifestPath=e.requireExactManifestPath,i=!0),i&&(0,s.setRuntimeConfig)(n),"allowedZipUrls"in e){const n=Array.isArray(e.allowedZipUrls)?e.allowedZipUrls.map(e=>(0,r.normalizeZipUrl)(e)):null;if(!t)return null===n?((0,s.clearAllClientClaims)(),(0,s.setAllowedZipUrlsLoaded)(Promise.resolve()),void await a(null,!1)):((0,s.setAllowListRestricted)(!0),(0,s.setPersistedAllowUnion)(new Set(n)),(0,s.setAllowedZipUrlsLoaded)(Promise.resolve()),void await a(n,!0));if(null===n){if(s.clientAllowedZipUrls.delete(t),await l(),0===s.clientAllowedZipUrls.size)return(0,s.setAllowListRestricted)(!1),(0,s.setPersistedAllowUnion)(null),(0,s.setAllowedZipUrlsLoaded)(Promise.resolve()),void await a(null,!1)}else(0,s.setClientAllowedZipUrls)(t,n);await l(),(0,s.setAllowedZipUrlsLoaded)(Promise.resolve()),await o()}},t.renewAllowedZipUrlClaims=function(e,t){let n=!1;for(const r of s.clientAllowedZipUrls.values())r.has(e)&&(r.delete(e),r.add(t),n=!0);if(!n)for(const e of s.clientAllowedZipUrls.values())e.add(t);const r=new Set(null!==s.persistedAllowUnion&&void 0!==s.persistedAllowUnion?s.persistedAllowUnion:[]);r.delete(e),r.add(t),(0,s.setPersistedAllowUnion)(r)},t.isZipUrlAllowed=function(e){const t=(0,s.getAllowedZipUrlsUnion)();return null===t||t.has(e)};const r=n(602),s=n(803);Object.defineProperty(t,"clearAllClientClaims",{enumerable:!0,get:function(){return s.clearAllClientClaims}});const i=n(997);async function o(){if(!s.allowListRestricted)return(0,s.setPersistedAllowUnion)(null),void await a(null,!1);const e=(0,s.getClaimsUnion)(),t=e.size>0?Array.from(e):Array.from(null!==s.persistedAllowUnion&&void 0!==s.persistedAllowUnion?s.persistedAllowUnion:[]);(0,s.setPersistedAllowUnion)(new Set(t)),await a(t,!0)}async function a(e,t=null!==e){try{const n=await caches.open(s.CONFIG_CACHE_NAME);await n.put(new Request(s.CONFIG_CACHE_KEY),new Response(JSON.stringify({allowedZipUrls:e,restricted:t}),{headers:{"Content-Type":"application/json"}}))}catch(e){(0,i.warn)("failed to persist runtime config",e)}}async function l(){const e=await self.clients.matchAll({type:"window",includeUncontrolled:!0}),t=new Set(e.map(e=>e.id));for(const e of[...s.clientAllowedZipUrls.keys()])t.has(e)||s.clientAllowedZipUrls.delete(e);0===s.clientAllowedZipUrls.size&&s.allowListRestricted?((0,s.setPersistedAllowUnion)(null),await a([],!0)):s.clientAllowedZipUrls.size>0&&await o()}},531(e,t,n){t.canonicalAssetRequest=function(e,t){return new Request((0,s.canonicalZipAssetRequestUrl)(e,t),{method:"GET"})},t.clearAllZipAssets=async function(){const e=await caches.open(a.runtimeConfig.zipAssetCacheName),t=await e.keys();await Promise.all(t.map(t=>e.delete(t))),await caches.delete(a.CONFIG_CACHE_NAME),a.zipManifests.clear(),a.pendingManifestLoads.clear(),a.inFlightZipAssets.clear(),(0,i.clearAllClientClaims)(),(0,a.setAllowedZipUrlsLoaded)(Promise.resolve())},t.clearZipAssetsExceptAllowed=async function(e){try{const t=new Set(e),n=await caches.open(a.runtimeConfig.zipAssetCacheName),r=await n.keys();for(const e of r){const r=e.url,i=(0,s.parseZipAssetRequest)(r);i&&!t.has(i.zipUrl)&&await n.delete(e)}for(const e of a.zipManifests.keys())t.has(e)||a.zipManifests.delete(e)}catch(e){throw(0,r.createZipPeekError)(`Failed to clear zip assets except allowed URLs: ${(0,r.errorMessage)(e)}`,"error")}},t.putCachedFullAssetIfAbsent=async function(e,t){var n;try{const r=await caches.open(a.runtimeConfig.zipAssetCacheName),s=await r.match(e);if(s&&!c(s))return void await(null===(n=t.body)||void 0===n?void 0:n.cancel());const i=new Headers(t.headers);i.set(a.ASSET_CACHED_AT_HEADER,String(Date.now())),i.set("Access-Control-Allow-Origin","*"),await r.put(e,new Response(t.body,{status:t.status,statusText:t.statusText,headers:i}))}catch(e){t.body&&!t.body.locked&&await t.body.cancel(e),(0,l.warn)("asset cache put failed",e)}},t.readCachedZipAssetIfFresh=async function(e){let t=null,n="network";try{const r=await caches.open(a.runtimeConfig.zipAssetCacheName),s=await r.match(e);if(s)if(c(s))try{await r.delete(e)}catch(e){(0,l.warn)("asset cache delete expired failed",e)}else t=s,n="cache-api"}catch(e){(0,l.warn)("asset cache read failed",e)}return{response:t,assetSource:n}},t.renewZipUrl=async function(e,t){const n=(0,s.normalizeZipUrl)(e),l=(0,s.normalizeZipUrl)(t);if(n===l)return;await(0,i.ensureAllowedZipUrlsLoaded)(),a.allowListRestricted&&((0,i.renewAllowedZipUrlClaims)(n,l),(0,a.setAllowedZipUrlsLoaded)(Promise.resolve()),await(0,i.persistAllowListState)());const c=a.zipManifests.get(n);c&&(a.zipManifests.set(l,c),a.zipManifests.delete(n));const u=a.pendingManifestLoads.get(n);u&&(a.pendingManifestLoads.set(l,u),a.pendingManifestLoads.delete(n)),(0,o.remapInFlightZipAssetsForRenewal)(n,l);try{const e=await caches.open(a.runtimeConfig.zipAssetCacheName),t=await e.keys();for(const r of t){const t=r.url,i=(0,s.parseZipAssetRequest)(t);i&&(0,s.normalizeZipUrl)(i.zipUrl)===n&&await e.delete(r)}}catch(e){throw(0,r.createZipPeekError)(`Failed to clear cached assets for renewed ZIP URL: ${(0,r.errorMessage)(e)}`,"error")}};const r=n(616),s=n(602),i=n(887),o=n(489),a=n(803),l=n(997);function c(e){const t=e.headers.get(a.ASSET_CACHED_AT_HEADER);if(!t)return!0;const n=parseInt(t,10);return!Number.isFinite(n)||Date.now()-n>a.runtimeConfig.assetCacheTtlMs}},489(e,t,n){t.getOrStartInFlightAsset=function(e,t){const n=e.url,r=s.inFlightZipAssets.get(n);if(r)return r;let o,a;const l=new Promise((e,t)=>{o=e,a=t}),c={resultPromise:t(),cacheFillPromise:l,leaderClaimed:!1,resolveCacheFill:o,rejectCacheFill:a};return l.finally(()=>{!function(e){for(const[t,n]of s.inFlightZipAssets)n===e&&s.inFlightZipAssets.delete(t)}(c)}).catch(()=>{}),c.resultPromise.then(e=>{e.ok||i(c)},e=>{i(c,e)}),s.inFlightZipAssets.set(n,c),c},t.completeInFlightAssetLoad=function(e,t){const n=s.inFlightZipAssets.get(e);n&&i(n,t)},t.remapInFlightZipAssetsForRenewal=function(e,t){const n=(0,r.normalizeZipUrl)(e),i=(0,r.normalizeZipUrl)(t);for(const[e,t]of[...s.inFlightZipAssets]){const o=(0,r.parseZipAssetRequest)(e);if(o&&(0,r.normalizeZipUrl)(o.zipUrl)===n){const n=(0,r.canonicalZipAssetRequestUrl)(i,o.internalPath);s.inFlightZipAssets.delete(e),s.inFlightZipAssets.set(n,t)}}};const r=n(602),s=n(803);function i(e,t){void 0!==t?e.rejectCacheFill(t):e.resolveCacheFill()}},629(e,t,n){t.installFetchHandler=function(){self.addEventListener("fetch",e=>{const t=e.request.method;if("GET"!==t&&"HEAD"!==t)return;if(!(0,s.parseZipAssetRequest)(e.request.url))return;const n=async function(e,t){var n,w,m;const E="HEAD"===e.method,A=(0,s.parseZipAssetRequest)(e.url);let y=(0,s.normalizeZipUrl)(A.zipUrl);const P=A.internalPath,U=(0,s.normalizeZipEntryPath)(P);let R;try{let w;if(await(0,i.ensureAllowedZipUrlsLoaded)(),y=(0,p.resolveAllowedZipUrlByPathname)(y),!(0,i.isZipUrlAllowed)(y)&&(0,s.isPresignedUrlExpired)(y)){const e=await(0,p.requestClientRenewal)(y,t);e.ok?y=e.nextUrl:w=e.reason}if(!(0,i.isZipUrlAllowed)(y))return(0,c.warn)("zip URL not allowed",{requestedZipUrl:y}),d("ZIP URL not allowed",403,(0,r.zipErrorInfo)({zipPath:(0,s.zipPackagePathname)(y),reason:w}),"error");let m=l.zipManifests.get(y);if(m&&!E){const t=(0,u.resolveManifestEntry)(m,U,y,l.runtimeConfig.requireExactManifestPath);if(t){const n=(0,o.canonicalAssetRequest)(y,t.key),r=await(0,o.readCachedZipAssetIfFresh)(n);if(r.response){const n=(0,u.entryUncompressedSize)(t.info);return{response:h(r.response.body,(0,f.getMimeType)(t.key),n,r.assetSource,e.headers.get("range"))}}}}if((0,s.isPresignedUrlExpired)(y)&&(!E||!m)){const e=await(0,p.requestClientRenewal)(y,t);if(!e.ok)return d("Failed to renew expired presigned ZIP URL",502,(0,r.zipErrorInfo)({zipPath:(0,s.zipPackagePathname)(y),reason:e.reason}),"error");y=e.nextUrl,m=l.zipManifests.get(y)}if(m||(m=null!==(n=await(0,u.ensureManifestAvailable)(y,t))&&void 0!==n?n:void 0),!m){const e=Array.from(l.zipManifests.keys());return(0,c.warn)("manifest missing for zipUrl",{requestedZipUrl:y,knownZipUrls:e}),d("ZIP manifest not loaded",404,(0,r.zipErrorInfo)({zipPath:(0,s.zipPackagePathname)(y)}),"error")}const A=(0,u.resolveManifestEntry)(m,U,y,l.runtimeConfig.requireExactManifestPath);if(!A){const e=Array.from(m.keys()).slice(0,50);return(0,c.warn)("file not in manifest",{zipUrl:y,internalPathRaw:P,internalPathNormalized:U,requireExactManifestPath:l.runtimeConfig.requireExactManifestPath,manifestSize:m.size,sampleKeys:e}),d("File not found in ZIP manifest",404,(0,r.zipErrorInfo)({path:U,zipPath:(0,s.zipPackagePathname)(y)}),"warn")}const{key:v,info:Z,matchKind:z}=A;if("zipBasenameFallback"===z&&((0,c.log)("resolved via zip-basename folder fallback",{requested:U,manifestKey:v}),(0,c.reportClientError)((0,r.createZipPeekError)("Exact manifest path not found; resolved via zip-basename folder fallback","warn"),`Exact manifest key "${U}" not found in ${y}; resolved using "${v}"`)),E)return{response:g(e,v,Z)};const S=(0,o.canonicalAssetRequest)(y,v),C=await(0,o.readCachedZipAssetIfFresh)(S),_=(0,u.entryUncompressedSize)(Z),b=(0,f.getMimeType)(v);if(C.response)return{response:h(C.response.body,b,_,C.assetSource,e.headers.get("range"))};const I=(0,a.getOrStartInFlightAsset)(S,()=>(0,f.fetchUncompressedZipEntryFromNetwork)(y,v,Z));R=S.url;const k=await I.resultPromise;if(!k.ok)return(0,a.completeInFlightAssetLoad)(S.url),{response:k.response};const L=!I.leaderClaimed&&(I.leaderClaimed=!0),M=8===Z.compression?null:e.headers.get("range");if(!L){await I.cacheFillPromise;const t=await(0,o.readCachedZipAssetIfFresh)(S);return t.response?{response:h(t.response.body,b,_,t.assetSource,e.headers.get("range"))}:d("Asset cache was not ready after in-flight load",500,(0,r.zipErrorInfo)({path:v,zipPath:(0,s.zipPackagePathname)(y)}),"error")}const[T,x]=k.stream.tee(),F={"Content-Type":k.contentType};null!==k.contentLength&&(F["Content-Length"]=String(k.contentLength));const O=S.url,N=(0,o.putCachedFullAssetIfAbsent)(S,new Response(x,{status:200,headers:F})).then(()=>{(0,a.completeInFlightAssetLoad)(O)}).catch(e=>{throw(0,a.completeInFlightAssetLoad)(O,e),e});return{response:h(T,k.contentType,k.contentLength,"network",M),background:N}}catch(e){R&&(0,a.completeInFlightAssetLoad)(R,e),(0,c.error)("fetch handler failed",{zipUrl:y,internalPath:P,message:(0,r.errorMessage)(e)});const t=(0,r.errorMessage)(e),n=t.startsWith(r.ZIP_PEEK_ERROR_PREFIX)?t.slice(r.ZIP_PEEK_ERROR_PREFIX.length).trim():t.includes(r.NETWORK_ERROR_PREFIX)?t:"ZIP asset request failed",i=(0,r.zipPeekErrorInfo)(e),o=e;return d(n,null!==(w=o.httpStatus)&&void 0!==w?w:500,[(0,r.zipErrorInfo)({path:P,zipPath:(0,s.zipPackagePathname)(y),cause:i?void 0:(0,r.errorMessage)(e)}),i].filter(Boolean).join(" "),null!==(m=o.zipPeekLevel)&&void 0!==m?m:"error",void 0!==o.upstreamStatus?{upstreamStatus:o.upstreamStatus}:void 0)}}(e.request,e.clientId||void 0);e.respondWith(n.then(({response:e})=>e)),e.waitUntil(n.then(({background:e})=>e).catch(e=>{(0,c.warn)("background asset cache failed",(0,r.errorMessage)(e))}))})};const r=n(616),s=n(602),i=n(887),o=n(531),a=n(489),l=n(803),c=n(997),u=n(479),p=n(965),f=n(321);function d(e,t,n,s,i){return(0,c.reportClientError)((0,r.createZipPeekError)(e,s),n),{response:(0,f.corsErrorResponse)(e,t,i)}}function w(e){return{"Access-Control-Allow-Origin":"*","Access-Control-Expose-Headers":l.ASSET_SOURCE_HEADER,[l.ASSET_SOURCE_HEADER]:e}}function h(e,t,n,r,s){if(s){if(null===n)return null==e||e.cancel(),new Response(null,{status:416,headers:w(r)});const i=s.replace(/^bytes=/,"");if(i.includes(","))return null==e||e.cancel(),new Response(null,{status:416,headers:Object.assign({"Content-Range":`bytes */${n}`},w(r))});const[o,a]=i.split("-"),l=""!==o?parseInt(o,10):NaN,c=""!==a?parseInt(a,10):n-1;if(isNaN(l)||isNaN(c)||l<0||c<l||l>=n)return null==e||e.cancel(),new Response(null,{status:416,headers:Object.assign({"Content-Range":`bytes */${n}`},w(r))});const u=Math.min(c,n-1),p=u-l+1,f=null===e?null:function(e,t,n){const r=e.getReader();let s=0,i=!1;return new ReadableStream({async pull(e){for(;!i;){const{done:o,value:a}=await r.read();if(o)return i=!0,void e.close();const l=a,c=s,u=s+l.byteLength-1;if(s+=l.byteLength,u<t)continue;if(c>n)return i=!0,void e.close();const p=Math.max(0,t-c),f=Math.min(l.byteLength,n-c+1);if(f>p&&e.enqueue(l.subarray(p,f)),u>=n)return i=!0,void e.close()}},cancel:e=>r.cancel(e)})}(e,l,u);return new Response(f,{status:206,headers:Object.assign({"Content-Type":t,"Content-Range":`bytes ${l}-${u}/${n}`,"Content-Length":p.toString(),"Accept-Ranges":"bytes"},w(r))})}const i=Object.assign({"Content-Type":t},w(r));return null!==n&&(i["Content-Length"]=n.toString(),i["Accept-Ranges"]="bytes"),new Response(e,{status:200,headers:i})}function g(e,t,n){const r=(0,f.getMimeType)(t),s=(0,u.entryUncompressedSize)(n),i=e.headers.get("range");if(null!==s&&i)return h(null,r,s,"manifest",i);const o=Object.assign({"Content-Type":r},w("manifest"));return null!==s&&(o["Content-Length"]=s.toString(),o["Accept-Ranges"]="bytes"),new Response(null,{status:200,headers:o})}},803(e,t){function n(){const e=new Set;for(const n of t.clientAllowedZipUrls.values())for(const t of n)e.add(t);return e}t.CONFIG_CACHE_KEY=t.allowedZipUrlsLoaded=t.persistedAllowUnion=t.allowListRestricted=t.clientAllowedZipUrls=t.runtimeConfig=t.inFlightZipAssets=t.pendingManifestLoads=t.zipManifests=t.LOCAL_FILE_HEADER_SIG=t.MIME_TYPES=t.ASSET_UPSTREAM_STATUS_HEADER=t.ASSET_ERROR_HEADER=t.ASSET_SOURCE_HEADER=t.ASSET_CACHED_AT_HEADER=t.CONFIG_CACHE_NAME=t.kF=t.o2=void 0,t.setRuntimeConfig=function(e){t.runtimeConfig=e},t.setAllowListRestricted=function(e){t.allowListRestricted=e},t.setPersistedAllowUnion=function(e){t.persistedAllowUnion=e},t.setAllowedZipUrlsLoaded=function(e){t.allowedZipUrlsLoaded=e},t.getClaimsUnion=n,t.getAllowedZipUrlsUnion=function(){return t.allowListRestricted?t.clientAllowedZipUrls.size>0?n():null!==t.persistedAllowUnion&&void 0!==t.persistedAllowUnion?t.persistedAllowUnion:new Set:null},t.setClientAllowedZipUrls=function(e,n){if(null===n)return void t.clientAllowedZipUrls.delete(e);t.allowListRestricted=!0;const r=t.clientAllowedZipUrls.get(e);if(r)for(const e of n)r.add(e);else t.clientAllowedZipUrls.set(e,new Set(n))},t.clearAllClientClaims=function(){t.clientAllowedZipUrls.clear(),t.allowListRestricted=!1,t.persistedAllowUnion=null},t.o2="zip-cache-v1",t.kF=72e5,t.CONFIG_CACHE_NAME="zip-peek-config-v1",t.o2,t.CONFIG_CACHE_NAME,t.ASSET_CACHED_AT_HEADER="X-ZipSW-Cached-At",t.ASSET_SOURCE_HEADER="X-ZipSW-Asset-Source",t.ASSET_ERROR_HEADER="X-ZipSW-Error",t.ASSET_UPSTREAM_STATUS_HEADER="X-ZipSW-Upstream-Status",t.MIME_TYPES={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp",svg:"image/svg+xml",json:"application/json",js:"application/javascript",css:"text/css; charset=utf-8",html:"text/html; charset=utf-8",txt:"text/plain; charset=utf-8",mp4:"video/mp4",webm:"video/webm",mp3:"audio/mpeg",wav:"audio/wav",oga:"audio/ogg",ogg:"audio/ogg",xml:"application/xml",wasm:"application/wasm"},t.LOCAL_FILE_HEADER_SIG=67324752,t.zipManifests=new Map,t.pendingManifestLoads=new Map,t.inFlightZipAssets=new Map,t.runtimeConfig={zipAssetCacheName:t.o2,assetCacheTtlMs:t.kF,logPrefix:"[zipSW]",requireExactManifestPath:!1},t.clientAllowedZipUrls=new Map,t.allowListRestricted=!1,t.persistedAllowUnion=null,t.allowedZipUrlsLoaded=null,t.CONFIG_CACHE_KEY=new URL("__zip_peek_runtime_config__",self.registration.scope).href},997(e,t,n){t.withVersion=a,t.log=function(...e){console.log(i.runtimeConfig.logPrefix,o,...e)},t.warn=function(...e){console.warn(i.runtimeConfig.logPrefix,o,...e)},t.error=function(...e){console.error(i.runtimeConfig.logPrefix,o,r.ZIP_PEEK_ERROR_PREFIX,...e)},t.reportClientError=l,t.installClientErrorReporting=function(){self.addEventListener("error",e=>{var t;l(null!==(t=e.error)&&void 0!==t?t:e.message,"Service worker uncaught error")}),self.addEventListener("unhandledrejection",e=>{l(e.reason,"Service worker unhandled promise rejection")})};const r=n(616),s=n(285),i=n(803),o=`zipSW=${s.ZIP_PEEK_VERSION}`;function a(e){return e?e.includes("zipSW=")?e:`${e} ${o}`:o}function l(e,t){const n=(0,r.toZipPeekError)(e);self.clients.matchAll({type:"window",includeUncontrolled:!0}).then(e=>{const s={type:"ZIP_SW_ERROR",error:{message:n.message,stack:n.stack},info:(0,r.formatZipPeekError)(a(t)),level:n.zipPeekLevel};for(const t of e)t.postMessage(s)})}},479(e,t,n){t.manifestFilesToMap=a,t.sendManifestToClientId=c,t.ensureManifestAvailable=function(e,t){const n=i.zipManifests.get(e);if(n)return Promise.resolve(n);let r=i.pendingManifestLoads.get(e);return r||(r=(async()=>{const n=await async function(e,t){const n=await l(t);return n?function(e,t){return new Promise(n=>{const r=new MessageChannel,s=setTimeout(()=>{r.port1.close(),n(null)},500);r.port1.onmessage=e=>{clearTimeout(s),r.port1.close();const t=e.data;(null==t?void 0:t.ok)&&Array.isArray(t.files)?n(a(t.files)):n(null)},r.port1.onmessageerror=()=>{clearTimeout(s),r.port1.close(),n(null)};try{e.postMessage({type:"ZIP_SW_MANIFEST_REQUEST",zipUrl:t},[r.port2])}catch(e){clearTimeout(s),r.port1.close(),(0,o.warn)("failed to request manifest from client",e),n(null)}})}(n,e):null}(e,t);if(n)return i.zipManifests.set(e,n),(0,o.log)("restored manifest from client memory",{zipUrl:e,entryCount:n.size}),n;const r=await async function(e){const{response:t,buffer:n}=await f(e,"bytes=-65536","tail"),r=new DataView(n);let i=-1;for(let e=n.byteLength-22;e>=0;e--)if(101010256===r.getUint32(e,!0)){i=e;break}if(-1===i)throw p(e,"tail",{network:!1,reason:"no-eocd"});const a=r.getUint32(i+16,!0),l=r.getUint32(i+12,!0);let c=n,u=-1,d="tail";const w=t.headers.get("Content-Range");let h=0;if(w){const e=w.match(/\/(\d+)$/);e&&(h=parseInt(e[1],10))}if(h<=0)throw p(e,"tail",{network:!1,reason:"no-content-range"});const g=h-n.byteLength;a>=g?u=a-g:(d="cd",c=(await f(e,`bytes=${a}-${a+l-1}`,d)).buffer,u=0);const m=function(e,t,n,r){const i=new DataView(e);let a=t;const l=[];for(;a+46<=e.byteLength&&33639248===i.getUint32(a,!0);){const t=i.getUint16(a+10,!0),n=i.getUint32(a+20,!0),r=i.getUint32(a+24,!0),o=i.getUint16(a+28,!0),c=i.getUint16(a+30,!0),u=i.getUint16(a+32,!0),p=i.getUint32(a+42,!0),f=new TextDecoder;if(a+46+o>e.byteLength)break;const d=new Uint8Array(e,a+46,o),w=f.decode(d),h=(0,s.normalizeZipEntryPath)(w);""!==h&&l.push({filename:h,offset:p,compressedSize:n,uncompressedSize:r,compression:t}),a+=46+o+c+u}if(0===l.length)return(0,o.error)("no files parsed from central directory",r),null;l.sort((e,t)=>e.offset-t.offset);const c=new Map;for(let e=0;e<l.length;e++){const t=l[e],r=(0,s.normalizeZipEntryPath)(t.filename);""!==r&&(c.has(r)&&(0,o.warn)("duplicate manifest key after normalize; overwriting",r),c.set(r,{filename:t.filename,offset:t.offset,compressedSize:t.compressedSize,uncompressedSize:t.uncompressedSize,compression:t.compression,nextOffset:e<l.length-1?l[e+1].offset:n}))}return c.size>0?c:null}(c,u,a,e);if(!m)throw p(e,d,{network:!1,reason:"empty-manifest"});return m}(e);return i.zipManifests.set(e,r),await c(e,r,t),(0,o.log)("manifest fetched and stored in memory",{zipUrl:e,entryCount:r.size}),r})().finally(()=>{i.pendingManifestLoads.delete(e)}),i.pendingManifestLoads.set(e,r),r)},t.entryUncompressedSize=function(e){return void 0!==e.uncompressedSize?e.uncompressedSize:0===e.compression?e.compressedSize:null},t.resolveManifestEntry=function(e,t,n,r){if(e.has(t))return{key:t,info:e.get(t),matchKind:"exact"};if(r)return null;const i=(0,s.zipBasenameWithoutExtension)(n);if(!i)return null;const o=`${i}/${t}`;return e.has(o)?{key:o,info:e.get(o),matchKind:"zipBasenameFallback"}:null};const r=n(616),s=n(602),i=n(803),o=n(997);function a(e){const t=new Map;for(const n of e){const e=(0,s.normalizeZipEntryPath)(n.filename);""!==e&&(t.has(e)&&(0,o.warn)("duplicate manifest key after normalize; overwriting",e),t.set(e,n))}return t.size>0?t:null}async function l(e){if(!e)return null;const t=await self.clients.get(e);return"window"===(null==t?void 0:t.type)?t:null}async function c(e,t,n){const r=await l(n);if(!r)return;const s=Array.from(t.values());try{r.postMessage({type:"ZIP_SW_MANIFEST_CREATED",zipUrl:e,files:s})}catch(e){(0,o.warn)("failed to send manifest to client",e)}}function u(e){return e instanceof Error?e.name&&"Error"!==e.name?`${e.name}: ${e.message}`:e.message:String(e)}function p(e,t,n){const i=(0,r.zipErrorInfo)({phase:t,zipPath:(0,s.zipPackagePathname)(e),online:navigator.onLine,status:n.status,reason:n.reason,cause:n.cause});(0,o.error)("ZIP manifest fetch failed",i);const a=(0,r.createZipPeekError)(n.network?`${r.NETWORK_ERROR_PREFIX} ZIP manifest fetch failed`:"ZIP manifest fetch failed",n.network?"warn":"error",i);return n.network?a.httpStatus=500:null!=n.status&&n.status>=400?(a.httpStatus=n.status,a.upstreamStatus=n.status):(a.httpStatus=502,null!=n.status&&(a.upstreamStatus=n.status)),a}async function f(e,t,n){let r;try{r=await fetch(e,{headers:{Range:t}})}catch(t){throw p(e,n,{network:!0,cause:u(t)})}if(206!==r.status)throw p(e,n,{network:!1,status:r.status});try{const e=await r.arrayBuffer();return{response:r,buffer:e}}catch(t){throw p(e,n,{network:!0,reason:"body",status:r.status,cause:u(t)})}}},866(e,t,n){t.installMessageHandler=function(){self.addEventListener("message",e=>{if(!e.data)return;const{type:t,zipUrl:n,files:u,config:f,allowedZipUrls:d,previousUrl:w,nextUrl:h}=e.data,g=function(e){if(!e||!("id"in e))return;const t=e.id;return"string"==typeof t?t:void 0}(e.source);if("ZIP_SW_CONFIG"!==t)if("ZIP_MANIFEST"===t){if(n&&u){const t=(0,s.normalizeZipUrl)(n),r=(0,c.manifestFilesToMap)(u),i=a.zipManifests.get(t);if(!r)return void(0,l.warn)("rejecting empty manifest; keeping existing",{zipUrl:t,existingSize:i?i.size:0});if(i&&i.size>r.size)return void(0,l.warn)("rejecting smaller manifest; keeping existing",{zipUrl:t,incomingSize:r.size,existingSize:i.size});a.zipManifests.set(t,r),e.waitUntil((0,c.sendManifestToClientId)(t,r,g));const o=Array.from(r.keys()).slice(0,40);(0,l.log)("ZIP_MANIFEST loaded",{zipUrl:t,entryCount:r.size,sampleKeys:o,replacedExistingSize:i?i.size:0})}}else"CLEAR_ZIP_ASSETS_EXCEPT_ALLOWED"===t?p(e,()=>(0,i.clearZipAssetsExceptLiveClaims)(o.clearZipAssetsExceptAllowed)):"CLEAR_ALL_ZIP_ASSETS"===t?p(e,()=>(0,o.clearAllZipAssets)()):"PRELOAD_ZIP_MANIFESTS"===t&&d?p(e,()=>async function(e,t){const n=[];if(await Promise.all(e.map(async e=>{try{await(0,c.ensureManifestAvailable)(e,t)}catch(e){n.push(e)}})),1===n.length)throw n[0];if(n.length>1){const e=n.map(e=>(0,r.toZipPeekError)(e));throw(0,r.createZipPeekError)("ZIP manifest fetch failed",e.every(e=>"warn"===e.zipPeekLevel)?"warn":"error",e.map(e=>{var t;return null!==(t=(0,r.zipPeekErrorInfo)(e))&&void 0!==t?t:e.message}).join(" | "))}}(d,g)):"RENEW_ZIP_URL"===t&&w&&h&&p(e,()=>(0,o.renewZipUrl)(w,h));else p(e,()=>(0,i.applyRuntimeConfig)(f,g))})};const r=n(616),s=n(602),i=n(887),o=n(531),a=n(803),l=n(997),c=n(479);function u(e,t){var n;null===(n=e.ports[0])||void 0===n||n.postMessage(t)}function p(e,t){e.waitUntil(self.clients.claim().then(t).then(()=>u(e,{ok:!0})).catch(t=>u(e,function(e){const t=(0,r.toZipPeekError)(e);return{ok:!1,error:t.message,errorStack:t.stack,info:(0,l.withVersion)((0,r.zipPeekErrorInfo)(t)),level:t.zipPeekLevel}}(t))))}},965(e,t,n){t.resolveAllowedZipUrlByPathname=function(e){const t=(0,s.getAllowedZipUrlsUnion)();if(null===t||t.has(e))return e;const n=(0,r.zipPackagePathname)(e);for(const e of t)if((0,r.zipPackagePathname)(e)===n)return e;return e},t.requestClientRenewal=function(e,t){if(null==(0,r.getPresignedUrlExpiryMs)(e))return Promise.resolve({ok:!1,reason:"not-presigned"});const n=(0,r.zipPackagePathname)(e)||(0,r.normalizeZipUrl)(e),s=o.get(n);if(s)return s;const a=async function(e,t){var n;let s=await async function(e){if(!e)return null;const t=await self.clients.get(e);return"window"===(null==t?void 0:t.type)?t:null}(t);if(!s){const e=await self.clients.matchAll({type:"window"});s=null!==(n=e[0])&&void 0!==n?n:null}return s?new Promise(t=>{const n=new MessageChannel;let o=!1;const a=e=>{o||(o=!0,n.port1.onmessage=null,n.port1.onmessageerror=null,n.port1.close(),t(e))};n.port1.onmessage=e=>{const t=e.data;if(!(null==t?void 0:t.ok)||"string"!=typeof t.nextUrl||""===t.nextUrl)return void a({ok:!1,reason:"page-rejected"});const n=(0,r.normalizeZipUrl)(t.nextUrl);(0,r.isPresignedUrlExpired)(n)?a({ok:!1,reason:"still-expired"}):a({ok:!0,nextUrl:n})},n.port1.onmessageerror=()=>{a({ok:!1,reason:"page-rejected"})};try{s.postMessage({type:"ZIP_SW_RENEW_REQUEST",zipUrl:e},[n.port2])}catch(e){(0,i.warn)("failed to post ZIP_SW_RENEW_REQUEST",e),a({ok:!1,reason:"page-rejected"})}}):{ok:!1,reason:"no-window-client"}}(e,t).finally(()=>{o.delete(n)});return o.set(n,a),a};const r=n(602),s=n(803),i=n(997),o=new Map},321(e,t,n){t.corsErrorResponse=u,t.getMimeType=f,t.fetchUncompressedZipEntryFromNetwork=async function(e,t,n){var l;const c=n.offset,u=n.nextOffset-1,w=(0,i.zipPackagePathname)(e);let h;(0,a.log)("fetching zip chunk from",{zipUrl:e,rangeStart:c,rangeEnd:u});try{h=await fetch(e,{headers:{Range:`bytes=${c}-${u}`}})}catch(e){return p(`${s.NETWORK_ERROR_PREFIX} ZIP asset fetch failed`,500,(0,s.zipErrorInfo)({path:t,zipPath:w,cause:(0,s.errorMessage)(e)}),"warn")}if(206!==h.status)return p("ZIP origin fetch failed",h.status>=400?h.status:502,(0,s.zipErrorInfo)({path:t,zipPath:w,status:h.status}),"error",{upstreamStatus:h.status});if(!h.body)return p("ZIP origin fetch failed",502,(0,s.zipErrorInfo)({path:t,zipPath:w,reason:"empty-body"}),"error");const g=h.body.getReader();let m,E;try{({headerAndPayload:m,dataStart:E}=await async function(e){let t=new Uint8Array(0);for(;t.byteLength<30;){const{done:n,value:r}=await e.read();if(n)throw new Error("ZIP entry ended before its local file header was complete");t=d(t,r)}const n=new DataView(t.buffer,t.byteOffset,t.byteLength);if(n.getUint32(0,!0)!==o.LOCAL_FILE_HEADER_SIG)throw new Error("Invalid local file header (expected ZIP signature 0x04034b50)");const r=30+n.getUint16(26,!0)+n.getUint16(28,!0);for(;t.byteLength<r;){const{done:n,value:r}=await e.read();if(n)throw new Error("ZIP entry ended before its local file header fields were complete");t=d(t,r)}return{headerAndPayload:t,dataStart:r}}(g))}catch(e){return await g.cancel(e),p("ZIP asset request failed",500,(0,s.zipErrorInfo)({path:t,zipPath:w,cause:(0,s.errorMessage)(e)}),"error")}const A=function(e,t,n){let r=t,s=0;return new ReadableStream({async pull(t){if(s>=n)return await e.cancel(),void t.close();let i;if(r.byteLength>0)i=r,r=new Uint8Array(0);else{const{done:r,value:o}=await e.read();if(r)return void t.error(new Error(`ZIP entry ended after ${s} of ${n} compressed bytes`));i=o}const o=n-s,a=i.byteLength>o?i.subarray(0,o):i;s+=a.byteLength,t.enqueue(a),s>=n&&(await e.cancel(),t.close())},cancel:t=>e.cancel(t)})}(g,m.subarray(E),n.compressedSize),y=null!==(l=n.uncompressedSize)&&void 0!==l?l:0===n.compression?n.compressedSize:null;let P;if(8===n.compression)P=function(e,t){const n=e.getReader();let s,i=0,o=!1;return new ReadableStream({start(e){s=new r.Inflate(t=>{i+=t.byteLength,e.enqueue(t)})},async pull(e){for(;!o;){const{done:r,value:a}=await n.read();if(r)return o=!0,s.push(new Uint8Array(0),!0),null!==t&&i!==t?void e.error(new Error(`Inflated ZIP entry size mismatch: expected ${t}, received ${i}`)):void e.close();s.push(a)}},cancel:e=>n.cancel(e)})}(A,y);else{if(0!==n.compression)return await g.cancel(),p("ZIP asset request failed",500,(0,s.zipErrorInfo)({path:t,zipPath:w,reason:"unsupported-compression",method:n.compression}),"error");P=A}return{ok:!0,stream:P,contentLength:y,contentType:f(t)}};const r=n(612),s=n(616),i=n(602),o=n(803),a=n(997);function l(e){return e.replace(/[\r\n]+/g," ").trim()}function c(e,t){const n=[o.ASSET_ERROR_HEADER],r={"Access-Control-Allow-Origin":"*",[o.ASSET_ERROR_HEADER]:l(e)},s=null==t?void 0:t.upstreamStatus;return void 0!==s&&(r[o.ASSET_UPSTREAM_STATUS_HEADER]=String(s),n.push(o.ASSET_UPSTREAM_STATUS_HEADER)),r["Access-Control-Expose-Headers"]=n.join(", "),r}function u(e,t,n){const r=(0,s.formatZipPeekError)(e);return new Response(r,{status:t,headers:c(r,n)})}function p(e,t,n,r,i){return(0,a.reportClientError)((0,s.createZipPeekError)(e,r),n),{ok:!1,response:u(e,t,i)}}function f(e){var t,n;const r=null===(t=e.split(".").pop())||void 0===t?void 0:t.toLowerCase();return r&&null!==(n=o.MIME_TYPES[r])&&void 0!==n?n:"application/octet-stream"}function d(e,t){const n=new Uint8Array(e.byteLength+t.byteLength);return n.set(e),n.set(t,e.byteLength),n}},602(e,t){function n(e){try{return decodeURIComponent(e)}catch(t){return e}}function r(e){const t=t=>function(e,t,n={}){const{stopAtPathSeparator:r=!0}=n,s=e.indexOf("?");if(-1===s)return null;const i=e.indexOf("#",s),o=-1===i?e.substring(s+1):e.substring(s+1,i),a=r?o.indexOf("/"):-1,l=-1===a?o:o.substring(0,a);for(const e of l.split("&")){const n=e.indexOf("=");if((-1===n?e:e.substring(0,n))===t)return-1===n?"":e.substring(n+1)}return null}(e,t,{stopAtPathSeparator:!1}),n=t("Expires");if(null!=n&&""!==n){const e=Number(n);if(Number.isFinite(e)&&e>0)return 1e3*e}const r=t("X-Amz-Date"),s=t("X-Amz-Expires");if(r&&s){const e=/^(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})Z$/.exec(r);if(!e)return null;const[,t,n,i,o,a,l]=e,c=Date.UTC(Number(t),Number(n)-1,Number(i),Number(o),Number(a),Number(l)),u=Number(s);return!Number.isFinite(c)||!Number.isFinite(u)||u<=0?null:c+1e3*u}return null}t.normalizeZipUrl=function(e,t={}){const{stripCacheBuster:n=!0,stripHash:r=!0}=t,s=e=>r?e.split("#")[0]:e;if(!n)return s(e);const i=e.indexOf("?");if(-1===i)return s(e);const o=e.indexOf("#",i),a=e.substring(0,i),l=-1===o?e.substring(i+1):e.substring(i+1,o),c=r||-1===o?"":e.substring(o),u=l.split("&").filter(e=>{const t=e.indexOf("=");return"t"!==(-1===t?e:e.substring(0,t))});return 0===u.length?a+c:a+"?"+u.join("&")+c},t.zipPackagePathname=function(e){try{return new URL(e).pathname}catch(t){return e.split("?")[0].split("#")[0]}},t.isPresignedUrlExpired=function(e){const t=r(e);return null!=t&&t<=Date.now()},t.zipBasenameWithoutExtension=function(e){var t,n;try{const n=null!==(t=new URL(e,"http://local").pathname.split("/").pop())&&void 0!==t?t:"";return n.endsWith(".zip")?n.slice(0,-4):n}catch(t){const r=null!==(n=e.split("?")[0].split("#")[0].split("/").pop())&&void 0!==n?n:"";return r.endsWith(".zip")?r.slice(0,-4):r}},t.normalizeZipEntryPath=function(e){let t=e.replace(/\\/g,"/");for(;t.startsWith("/");)t=t.slice(1);return t},t.parseZipAssetRequest=function(e){const t=/\.zip([/?])/.exec(e);if(!t)return null;const r=t.index+4,s=t[1],i=e.substring(0,r);if("/"===s){const t=e.substring(r+1),s=t.indexOf("?"),o=-1===s?t:t.substring(0,s);return""===o?null:{zipUrl:i,internalPath:n(o)}}const o=e.substring(r),a=o.indexOf("/");if(-1===a)return null;const l=o.substring(0,a),c=o.substring(a+1),u=c.indexOf("?"),p=-1===u?c:c.substring(0,u);return""===p?null:{zipUrl:i+l,internalPath:n(p)}},t.canonicalZipAssetRequestUrl=function(e,t){return e+"/"+encodeURIComponent(t)},t.getPresignedUrlExpiryMs=r},612(e,t){var n=Uint8Array,r=Uint16Array,s=Int32Array,i=new n([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),o=new n([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),a=new n([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),l=function(e,t){for(var n=new r(31),i=0;i<31;++i)n[i]=t+=1<<e[i-1];var o=new s(n[30]);for(i=1;i<30;++i)for(var a=n[i];a<n[i+1];++a)o[a]=a-n[i]<<5|i;return{b:n,r:o}},c=l(i,2),u=c.b,p=c.r;u[28]=258,p[258]=28;for(var f=l(o,0),d=f.b,w=(f.r,new r(32768)),h=0;h<32768;++h){var g=(43690&h)>>1|(21845&h)<<1;g=(61680&(g=(52428&g)>>2|(13107&g)<<2))>>4|(3855&g)<<4,w[h]=((65280&g)>>8|(255&g)<<8)>>1}var m=function(e,t,n){for(var s=e.length,i=0,o=new r(t);i<s;++i)e[i]&&++o[e[i]-1];var a,l=new r(t);for(i=1;i<t;++i)l[i]=l[i-1]+o[i-1]<<1;if(n){a=new r(1<<t);var c=15-t;for(i=0;i<s;++i)if(e[i])for(var u=i<<4|e[i],p=t-e[i],f=l[e[i]-1]++<<p,d=f|(1<<p)-1;f<=d;++f)a[w[f]>>c]=u}else for(a=new r(s),i=0;i<s;++i)e[i]&&(a[i]=w[l[e[i]-1]++]>>15-e[i]);return a},E=new n(288);for(h=0;h<144;++h)E[h]=8;for(h=144;h<256;++h)E[h]=9;for(h=256;h<280;++h)E[h]=7;for(h=280;h<288;++h)E[h]=8;var A=new n(32);for(h=0;h<32;++h)A[h]=5;var y=m(E,9,1),P=m(A,5,1),U=function(e){for(var t=e[0],n=1;n<e.length;++n)e[n]>t&&(t=e[n]);return t},R=function(e,t,n){var r=t/8|0;return(e[r]|e[r+1]<<8)>>(7&t)&n},v=function(e,t){var n=t/8|0;return(e[n]|e[n+1]<<8|e[n+2]<<16)>>(7&t)},Z=function(e){return(e+7)/8|0},z=function(e,t,r){return(null==t||t<0)&&(t=0),(null==r||r>e.length)&&(r=e.length),new n(e.subarray(t,r))},S=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],C=function(e,t,n){var r=new Error(t||S[e]);if(r.code=e,Error.captureStackTrace&&Error.captureStackTrace(r,C),!n)throw r;return r},_=function(e,t,r,s){var l=e.length,c=s?s.length:0;if(!l||t.f&&!t.l)return r||new n(0);var p=!r,f=p||2!=t.i,w=t.i;p&&(r=new n(3*l));var h=function(e){var t=r.length;if(e>t){var s=new n(Math.max(2*t,e));s.set(r),r=s}},g=t.f||0,E=t.p||0,A=t.b||0,S=t.l,_=t.d,b=t.m,I=t.n,k=8*l;do{if(!S){g=R(e,E,1);var L=R(e,E+1,3);if(E+=3,!L){var M=e[($=Z(E)+4)-4]|e[$-3]<<8,T=$+M;if(T>l){w&&C(0);break}f&&h(A+M),r.set(e.subarray($,T),A),t.b=A+=M,t.p=E=8*T,t.f=g;continue}if(1==L)S=y,_=P,b=9,I=5;else if(2==L){var x=R(e,E,31)+257,F=R(e,E+10,15)+4,O=x+R(e,E+5,31)+1;E+=14;for(var N=new n(O),H=new n(19),q=0;q<F;++q)H[a[q]]=R(e,E+3*q,7);E+=3*F;var D=U(H),W=(1<<D)-1,j=m(H,D,1);for(q=0;q<O;){var $,K=j[R(e,E,W)];if(E+=15&K,($=K>>4)<16)N[q++]=$;else{var X=0,G=0;for(16==$?(G=3+R(e,E,3),E+=2,X=N[q-1]):17==$?(G=3+R(e,E,7),E+=3):18==$&&(G=11+R(e,E,127),E+=7);G--;)N[q++]=X}}var B=N.subarray(0,x),V=N.subarray(x);b=U(B),I=U(V),S=m(B,b,1),_=m(V,I,1)}else C(1);if(E>k){w&&C(0);break}}f&&h(A+131072);for(var Y=(1<<b)-1,Q=(1<<I)-1,J=E;;J=E){var ee=(X=S[v(e,E)&Y])>>4;if((E+=15&X)>k){w&&C(0);break}if(X||C(2),ee<256)r[A++]=ee;else{if(256==ee){J=E,S=null;break}var te=ee-254;if(ee>264){var ne=i[q=ee-257];te=R(e,E,(1<<ne)-1)+u[q],E+=ne}var re=_[v(e,E)&Q],se=re>>4;if(re||C(3),E+=15&re,V=d[se],se>3&&(ne=o[se],V+=v(e,E)&(1<<ne)-1,E+=ne),E>k){w&&C(0);break}f&&h(A+131072);var ie=A+te;if(A<V){var oe=c-V,ae=Math.min(V,ie);for(oe+A<0&&C(3);A<ae;++A)r[A]=s[oe+A]}for(;A<ie;++A)r[A]=r[A-V]}}t.l=S,t.p=J,t.b=A,t.f=g,S&&(g=1,t.m=b,t.d=_,t.n=I)}while(!g);return A!=r.length&&p?z(r,0,A):r.subarray(0,A)},b=new n(0);var I=function(){function e(e,t){"function"==typeof e&&(t=e,e={}),this.ondata=t;var r=e&&e.dictionary&&e.dictionary.subarray(-32768);this.s={i:0,b:r?r.length:0},this.o=new n(32768),this.p=new n(0),r&&this.o.set(r)}return e.prototype.e=function(e){if(this.ondata||C(5),this.d&&C(4),this.p.length){if(e.length){var t=new n(this.p.length+e.length);t.set(this.p),t.set(e,this.p.length),this.p=t}}else this.p=e},e.prototype.c=function(e){this.s.i=+(this.d=e||!1);var t=this.s.b,n=_(this.p,this.s,this.o);this.ondata(z(n,t,this.s.b),this.d),this.o=z(n,this.s.b-32768),this.s.b=this.o.length,this.p=z(this.p,this.s.p/8|0),this.s.p&=7},e.prototype.push=function(e,t){this.e(e),this.c(t)},e}();t.Inflate=I;var k="undefined"!=typeof TextDecoder&&new TextDecoder;try{k.decode(b,{stream:!0})}catch(e){}"function"==typeof queueMicrotask?queueMicrotask:"function"==typeof setTimeout&&setTimeout},330(e){e.exports=JSON.parse('{"version":"0.7.3-beta"}')}};const t={};function n(r){const s=t[r];if(void 0!==s)return s.exports;const i=t[r]={exports:{}};return e[r](i,i.exports,n),i.exports}(()=>{const e=n(997),t=n(629),r=n(866);self.addEventListener("install",()=>{self.skipWaiting()}),self.addEventListener("activate",e=>{e.waitUntil(self.clients.claim())}),(0,e.installClientErrorReporting)(),(0,r.installMessageHandler)(),(0,t.installFetchHandler)()})()})();
2
2
  //# sourceMappingURL=zipServiceWorker.js.map