diff --git a/QUICKSTART.md b/QUICKSTART.md index 82f5c3f..0d82e04 100644 --- a/QUICKSTART.md +++ b/QUICKSTART.md @@ -13,8 +13,8 @@ ### 1. 快速启动 ```bash -# 拉取最新镜像(当前镜像沿用上游命名空间) -docker pull ghcr.io/senshinya/moontv:latest +# 拉取最新镜像 +docker pull ghcr.io/katelya77/katelyatv:latest # 启动容器 docker run -d \ @@ -22,7 +22,7 @@ docker run -d \ -p 3000:3000 \ --env PASSWORD=your_password \ --restart unless-stopped \ - ghcr.io/senshinya/moontv:latest + ghcr.io/katelya77/katelyatv:latest ``` ### 2. 访问应用 diff --git a/README.md b/README.md index 9156188..8dda023 100644 --- a/README.md +++ b/README.md @@ -176,11 +176,11 @@ ```bash # 拉取预构建镜像 -docker pull ghcr.io/senshinya/moontv:latest +docker pull ghcr.io/katelya77/katelyatv:latest # 运行容器 # -d: 后台运行 -p: 映射端口 3000 -> 3000 -docker run -d --name katelyatv -p 3000:3000 --env PASSWORD=your_password ghcr.io/senshinya/moontv:latest +docker run -d --name katelyatv -p 3000:3000 --env PASSWORD=your_password ghcr.io/katelya77/katelyatv:latest ``` 访问 `http://服务器 IP:3000` 即可。(需自行到服务器控制台放通 `3000` 端口) @@ -194,7 +194,7 @@ docker run -d --name katelyatv -p 3000:3000 --env PASSWORD=your_password ghcr.io ```yaml services: katelyatv: - image: ghcr.io/senshinya/moontv:latest + image: ghcr.io/katelya77/katelyatv:latest container_name: katelyatv restart: unless-stopped ports: @@ -211,7 +211,7 @@ services: ```yaml services: katelyatv-core: - image: ghcr.io/senshinya/moontv:latest + image: ghcr.io/katelya77/katelyatv:latest container_name: katelyatv restart: unless-stopped ports: diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index a62cb62..bb1d3ae 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -20,15 +20,15 @@ ## 安装与升级 - 首次安装(Docker 推荐) ```bash -# 拉取镜像(当前仍沿用上游命名空间) -docker pull ghcr.io/senshinya/moontv:latest +# 拉取镜像 +docker pull ghcr.io/katelya77/katelyatv:latest # 启动示例 docker run -d --name katelyatv \ -p 3000:3000 \ --env PASSWORD=your_password \ --restart unless-stopped \ - ghcr.io/senshinya/moontv:latest + ghcr.io/katelya77/katelyatv:latest ``` - 或使用 README 中的 Docker Compose 示例 diff --git a/RELEASE_NOTES_V0.2.0.md b/RELEASE_NOTES_V0.2.0.md new file mode 100644 index 0000000..6101a2d --- /dev/null +++ b/RELEASE_NOTES_V0.2.0.md @@ -0,0 +1,157 @@ +# KatelyaTV v0.2.0 发布说明 + +> 本版本主要修复了 Docker 部署配置问题,确保用户能够正确使用 KatelyaTV 的 Docker 镜像进行部署。 + +## 🚀 重要更新 + +### Docker 部署修复 +- **修复镜像路径**:将所有文档中的 Docker 镜像路径从 `ghcr.io/senshinya/moontv:latest` 更新为 `ghcr.io/katelya77/katelyatv:latest` +- **统一部署说明**:确保 README.md、QUICKSTART.md 和发布说明中的 Docker 部署指令一致 +- **验证部署流程**:确认所有 Docker Compose 配置文件使用正确的镜像路径 + +### 代码兼容性验证 +- **构建验证**:通过完整的构建测试,确保所有 KatelyaTV 品牌更改不影响功能 +- **向后兼容**:保持与 MoonTV v0.1.0 的完全兼容性 +- **环境变量支持**:支持通过 `SITE_NAME` 等环境变量自定义配置 + +## 🐳 Docker 部署指南 + +### 快速启动 +```bash +# 拉取最新镜像 +docker pull ghcr.io/katelya77/katelyatv:latest + +# 启动容器 +docker run -d \ + --name katelyatv \ + -p 3000:3000 \ + --env PASSWORD=your_password \ + --restart unless-stopped \ + ghcr.io/katelya77/katelyatv:latest +``` + +### Docker Compose 部署 + +#### 基础版本(localStorage) +```yaml +services: + katelyatv: + image: ghcr.io/katelya77/katelyatv:latest + container_name: katelyatv + restart: unless-stopped + ports: + - '3000:3000' + environment: + - PASSWORD=your_password +``` + +#### Redis 版本(推荐,支持多用户) +```yaml +services: + katelyatv-core: + image: ghcr.io/katelya77/katelyatv:latest + container_name: katelyatv + restart: unless-stopped + ports: + - '3000:3000' + environment: + - USERNAME=admin + - PASSWORD=admin_password + - NEXT_PUBLIC_STORAGE_TYPE=redis + - REDIS_URL=redis://katelyatv-redis:6379 + - NEXT_PUBLIC_ENABLE_REGISTER=true + networks: + - katelyatv-network + depends_on: + - katelyatv-redis + + katelyatv-redis: + image: redis + container_name: katelyatv-redis + restart: unless-stopped + networks: + - katelyatv-network + volumes: + - ./data:/data + +networks: + katelyatv-network: + driver: bridge +``` + +## 📋 环境变量配置 + +| 变量名 | 说明 | 默认值 | 示例 | +|--------|------|--------|------| +| `PASSWORD` | 访问密码(localStorage 模式)或管理员密码 | - | `your_password` | +| `USERNAME` | 管理员用户名(非 localStorage 模式) | - | `admin` | +| `SITE_NAME` | 站点名称 | `KatelyaTV` | `我的影视站` | +| `NEXT_PUBLIC_STORAGE_TYPE` | 存储类型 | `localstorage` | `redis`, `d1`, `upstash` | +| `REDIS_URL` | Redis 连接地址 | - | `redis://localhost:6379` | +| `NEXT_PUBLIC_ENABLE_REGISTER` | 是否开放注册 | `false` | `true` | + +## 🔧 部署验证 + +部署完成后,请验证以下功能: + +1. **基础访问**:浏览器访问 `http://localhost:3000` 能正常打开 +2. **密码验证**:使用设置的密码能正常登录 +3. **搜索功能**:能正常搜索和播放视频 +4. **数据持久化**:重启容器后数据保持(Redis 模式) + +## 🐛 已知问题 + +- 部分第三方资源站可用性受其自身状态影响 +- Android TV 端收藏与网页端暂未完全互通(计划在后续版本优化) + +## 📝 变更日志 + +### 修复 +- 修复 README.md 中 Docker 镜像路径错误 +- 修复 QUICKSTART.md 中 Docker 部署说明 +- 修复 Docker Compose 配置示例中的镜像路径 + +### 改进 +- 统一所有文档中的 Docker 部署说明 +- 完善环境变量配置说明 +- 添加部署验证步骤 + +### 兼容性 +- 保持与 MoonTV v0.1.0 完全兼容 +- 支持从旧版本无缝升级 +- 保留所有现有功能和配置选项 + +## 🔄 升级指南 + +### 从 v0.1.0-katelya 升级 +```bash +# 停止旧容器 +docker stop katelyatv +docker rm katelyatv + +# 拉取新镜像 +docker pull ghcr.io/katelya77/katelyatv:latest + +# 使用新镜像启动 +docker run -d \ + --name katelyatv \ + -p 3000:3000 \ + --env PASSWORD=your_password \ + --restart unless-stopped \ + ghcr.io/katelya77/katelyatv:latest +``` + +### 从 MoonTV 迁移 +如果您之前使用的是 MoonTV,只需将 Docker 镜像路径更改为 `ghcr.io/katelya77/katelyatv:latest`,其他配置保持不变。 + +## 🙏 鸣谢 + +- 感谢社区用户反馈的 Docker 部署问题 +- 感谢原始项目 MoonTV 及其作者与社区 +- 感谢所有为本项目提供反馈和建议的开发者 + +--- + +**完整部署文档**:请参考 [README.md](README.md) 和 [QUICKSTART.md](QUICKSTART.md) + +— Katelya \ No newline at end of file diff --git a/public/sw.js b/public/sw.js index 716bd2d..64c53ad 100644 --- a/public/sw.js +++ b/public/sw.js @@ -1 +1 @@ -if(!self.define){let e,s={};const n=(n,t)=>(n=new URL(n+".js",t).href,s[n]||new Promise(s=>{if("document"in self){const e=document.createElement("script");e.src=n,e.onload=s,document.head.appendChild(e)}else e=n,importScripts(n),s()}).then(()=>{let e=s[n];if(!e)throw new Error(`Module ${n} didn’t register its module`);return e}));self.define=(t,a)=>{const i=e||("document"in self?document.currentScript.src:"")||location.href;if(s[i])return;let c={};const r=e=>n(e,i),o={module:{uri:i},exports:c,require:r};s[i]=Promise.all(t.map(e=>o[e]||r(e))).then(e=>(a(...e),c))}}define(["./workbox-e9849328"],function(e){"use strict";importScripts(),self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"/_next/app-build-manifest.json",revision:"1f7f5a2aec7f945336c0ae43e2e57c47"},{url:"/_next/static/6qB3epXmqsAy-GeVOS_bt/_buildManifest.js",revision:"85aecd8a55db42fc901f52386fd2a680"},{url:"/_next/static/6qB3epXmqsAy-GeVOS_bt/_ssgManifest.js",revision:"b6652df95db52feb4daf4eca35380933"},{url:"/_next/static/chunks/151-467740e7dc8a9501.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/242-3804d87f50553b94.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/402-0111ac7d0edfee14.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/484-4de9b8ccd6b187b0.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/609-bd706105e16d4e38.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/78-2f748e0c099ee9b7.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/866-d2269a3038f10b5a.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/887-3888edb42bd5ac06.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/app/_not-found/page-d6cb5fee19b812f4.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/app/admin/page-02699fb3c7542f31.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/app/douban/page-6cadcedaf8538fd6.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/app/layout-f2be6b03f6eb1026.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/app/login/page-9a89981161d4a992.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/app/page-fd24f7135fef556d.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/app/play/page-648b8b5fd8c19287.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/app/search/page-89eb23c28fc11ef5.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/app/warning/page-e6b20b93b37dc516.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/b145b63a-b7e49c063d2fa255.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/c72274ce-909438a8a5dd87a5.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/da9543df-c2ce5269243dd748.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/framework-6e06c675866dc992.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/main-app-0cf6afdd74694b9f.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/main-e84422daeb8eaf88.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/pages/_app-3fcac1a2c632f1ef.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/pages/_error-d3fe151bf402c134.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/polyfills-42372ed130431b0a.js",revision:"846118c33b2c0e922d7b3a7676f81f6f"},{url:"/_next/static/chunks/webpack-4a57793b45c0f940.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/css/23100062f5d4aac0.css",revision:"23100062f5d4aac0"},{url:"/_next/static/css/a7b7a98490e311ff.css",revision:"a7b7a98490e311ff"},{url:"/_next/static/media/26a46d62cd723877-s.woff2",revision:"befd9c0fdfa3d8a645d5f95717ed6420"},{url:"/_next/static/media/55c55f0601d81cf3-s.woff2",revision:"43828e14271c77b87e3ed582dbff9f74"},{url:"/_next/static/media/581909926a08bbc8-s.woff2",revision:"f0b86e7c24f455280b8df606b89af891"},{url:"/_next/static/media/8e9860b6e62d6359-s.woff2",revision:"01ba6c2a184b8cba08b0d57167664d75"},{url:"/_next/static/media/97e0cb1ae144a2a9-s.woff2",revision:"e360c61c5bd8d90639fd4503c829c2dc"},{url:"/_next/static/media/df0a9ae256c0569c-s.woff2",revision:"d54db44de5ccb18886ece2fda72bdfe0"},{url:"/_next/static/media/e4af272ccee01ff0-s.p.woff2",revision:"65850a373e258f1c897a2b3d75eb74de"},{url:"/favicon.ico",revision:"c5de6e56c5664adda146825f75ea6ecf"},{url:"/icons/icon-192x192.png",revision:"4a56c090828a1ad254c903c7aec0389d"},{url:"/icons/icon-256x256.png",revision:"f6409eb1a001f754121e3a8281c0319c"},{url:"/icons/icon-384x384.png",revision:"f6efc3e357b9ffdf4e0d8c14b2ed0ac1"},{url:"/icons/icon-512x512.png",revision:"9c008cbbeb6a576fe07bb1284a83f4d2"},{url:"/logo.png",revision:"40de611b143c47c6291c7bdad2c959ca"},{url:"/manifest.json",revision:"7bd3dabc1cfbfe40f09577efca223d31"},{url:"/robots.txt",revision:"0483b37fb6cf7455cefe516197e39241"},{url:"/screenshot.png",revision:"05a86e8d4faae6b384d19f02173ea87f"},{url:"/screenshot1.png",revision:"d7de3a25686c5b9c9d8c8675bc6109fc"},{url:"/screenshot2.png",revision:"b0b715a3018d2f02aba5d94762473bb6"},{url:"/screenshot3.png",revision:"7e454c28e110e291ee12f494fb3cf40c"}],{ignoreURLParametersMatching:[]}),e.cleanupOutdatedCaches(),e.registerRoute("/",new e.NetworkFirst({cacheName:"start-url",plugins:[{cacheWillUpdate:async({request:e,response:s,event:n,state:t})=>s&&"opaqueredirect"===s.type?new Response(s.body,{status:200,statusText:"OK",headers:s.headers}):s}]}),"GET"),e.registerRoute(/^https:\/\/fonts\.(?:gstatic)\.com\/.*/i,new e.CacheFirst({cacheName:"google-fonts-webfonts",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:31536e3})]}),"GET"),e.registerRoute(/^https:\/\/fonts\.(?:googleapis)\.com\/.*/i,new e.StaleWhileRevalidate({cacheName:"google-fonts-stylesheets",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:604800})]}),"GET"),e.registerRoute(/\.(?:eot|otf|ttc|ttf|woff|woff2|font.css)$/i,new e.StaleWhileRevalidate({cacheName:"static-font-assets",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:604800})]}),"GET"),e.registerRoute(/\.(?:jpg|jpeg|gif|png|svg|ico|webp)$/i,new e.StaleWhileRevalidate({cacheName:"static-image-assets",plugins:[new e.ExpirationPlugin({maxEntries:64,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\/_next\/image\?url=.+$/i,new e.StaleWhileRevalidate({cacheName:"next-image",plugins:[new e.ExpirationPlugin({maxEntries:64,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:mp3|wav|ogg)$/i,new e.CacheFirst({cacheName:"static-audio-assets",plugins:[new e.RangeRequestsPlugin,new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:mp4)$/i,new e.CacheFirst({cacheName:"static-video-assets",plugins:[new e.RangeRequestsPlugin,new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:js)$/i,new e.StaleWhileRevalidate({cacheName:"static-js-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:css|less)$/i,new e.StaleWhileRevalidate({cacheName:"static-style-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\/_next\/data\/.+\/.+\.json$/i,new e.StaleWhileRevalidate({cacheName:"next-data",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:json|xml|csv)$/i,new e.NetworkFirst({cacheName:"static-data-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(({url:e})=>{if(!(self.origin===e.origin))return!1;const s=e.pathname;return!s.startsWith("/api/auth/")&&!!s.startsWith("/api/")},new e.NetworkFirst({cacheName:"apis",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:16,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(({url:e})=>{if(!(self.origin===e.origin))return!1;return!e.pathname.startsWith("/api/")},new e.NetworkFirst({cacheName:"others",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(({url:e})=>!(self.origin===e.origin),new e.NetworkFirst({cacheName:"cross-origin",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:3600})]}),"GET")}); +if(!self.define){let e,s={};const n=(n,a)=>(n=new URL(n+".js",a).href,s[n]||new Promise(s=>{if("document"in self){const e=document.createElement("script");e.src=n,e.onload=s,document.head.appendChild(e)}else e=n,importScripts(n),s()}).then(()=>{let e=s[n];if(!e)throw new Error(`Module ${n} didn’t register its module`);return e}));self.define=(a,i)=>{const c=e||("document"in self?document.currentScript.src:"")||location.href;if(s[c])return;let t={};const r=e=>n(e,c),o={module:{uri:c},exports:t,require:r};s[c]=Promise.all(a.map(e=>o[e]||r(e))).then(e=>(i(...e),t))}}define(["./workbox-e9849328"],function(e){"use strict";importScripts(),self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"/_next/app-build-manifest.json",revision:"e835516f55e089231cd3a13c3d1bfcfb"},{url:"/_next/static/I621_uJyyXyq0s9YsYe1C/_buildManifest.js",revision:"85aecd8a55db42fc901f52386fd2a680"},{url:"/_next/static/I621_uJyyXyq0s9YsYe1C/_ssgManifest.js",revision:"b6652df95db52feb4daf4eca35380933"},{url:"/_next/static/chunks/151-467740e7dc8a9501.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/242-3804d87f50553b94.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/402-0111ac7d0edfee14.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/484-4de9b8ccd6b187b0.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/609-bd706105e16d4e38.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/78-2f748e0c099ee9b7.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/866-d2269a3038f10b5a.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/887-3888edb42bd5ac06.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/app/_not-found/page-d6cb5fee19b812f4.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/app/admin/page-02699fb3c7542f31.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/app/douban/page-6cadcedaf8538fd6.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/app/layout-f2be6b03f6eb1026.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/app/login/page-9a89981161d4a992.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/app/page-fd24f7135fef556d.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/app/play/page-648b8b5fd8c19287.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/app/search/page-89eb23c28fc11ef5.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/app/warning/page-e6b20b93b37dc516.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/b145b63a-b7e49c063d2fa255.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/c72274ce-909438a8a5dd87a5.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/da9543df-c2ce5269243dd748.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/framework-6e06c675866dc992.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/main-app-0cf6afdd74694b9f.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/main-e84422daeb8eaf88.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/pages/_app-3fcac1a2c632f1ef.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/pages/_error-d3fe151bf402c134.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/polyfills-42372ed130431b0a.js",revision:"846118c33b2c0e922d7b3a7676f81f6f"},{url:"/_next/static/chunks/webpack-4a57793b45c0f940.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/css/23100062f5d4aac0.css",revision:"23100062f5d4aac0"},{url:"/_next/static/css/a7b7a98490e311ff.css",revision:"a7b7a98490e311ff"},{url:"/_next/static/media/26a46d62cd723877-s.woff2",revision:"befd9c0fdfa3d8a645d5f95717ed6420"},{url:"/_next/static/media/55c55f0601d81cf3-s.woff2",revision:"43828e14271c77b87e3ed582dbff9f74"},{url:"/_next/static/media/581909926a08bbc8-s.woff2",revision:"f0b86e7c24f455280b8df606b89af891"},{url:"/_next/static/media/8e9860b6e62d6359-s.woff2",revision:"01ba6c2a184b8cba08b0d57167664d75"},{url:"/_next/static/media/97e0cb1ae144a2a9-s.woff2",revision:"e360c61c5bd8d90639fd4503c829c2dc"},{url:"/_next/static/media/df0a9ae256c0569c-s.woff2",revision:"d54db44de5ccb18886ece2fda72bdfe0"},{url:"/_next/static/media/e4af272ccee01ff0-s.p.woff2",revision:"65850a373e258f1c897a2b3d75eb74de"},{url:"/favicon.ico",revision:"c5de6e56c5664adda146825f75ea6ecf"},{url:"/icons/icon-192x192.png",revision:"4a56c090828a1ad254c903c7aec0389d"},{url:"/icons/icon-256x256.png",revision:"f6409eb1a001f754121e3a8281c0319c"},{url:"/icons/icon-384x384.png",revision:"f6efc3e357b9ffdf4e0d8c14b2ed0ac1"},{url:"/icons/icon-512x512.png",revision:"9c008cbbeb6a576fe07bb1284a83f4d2"},{url:"/logo.png",revision:"40de611b143c47c6291c7bdad2c959ca"},{url:"/manifest.json",revision:"7bd3dabc1cfbfe40f09577efca223d31"},{url:"/robots.txt",revision:"0483b37fb6cf7455cefe516197e39241"},{url:"/screenshot.png",revision:"05a86e8d4faae6b384d19f02173ea87f"},{url:"/screenshot1.png",revision:"d7de3a25686c5b9c9d8c8675bc6109fc"},{url:"/screenshot2.png",revision:"b0b715a3018d2f02aba5d94762473bb6"},{url:"/screenshot3.png",revision:"7e454c28e110e291ee12f494fb3cf40c"}],{ignoreURLParametersMatching:[]}),e.cleanupOutdatedCaches(),e.registerRoute("/",new e.NetworkFirst({cacheName:"start-url",plugins:[{cacheWillUpdate:async({request:e,response:s,event:n,state:a})=>s&&"opaqueredirect"===s.type?new Response(s.body,{status:200,statusText:"OK",headers:s.headers}):s}]}),"GET"),e.registerRoute(/^https:\/\/fonts\.(?:gstatic)\.com\/.*/i,new e.CacheFirst({cacheName:"google-fonts-webfonts",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:31536e3})]}),"GET"),e.registerRoute(/^https:\/\/fonts\.(?:googleapis)\.com\/.*/i,new e.StaleWhileRevalidate({cacheName:"google-fonts-stylesheets",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:604800})]}),"GET"),e.registerRoute(/\.(?:eot|otf|ttc|ttf|woff|woff2|font.css)$/i,new e.StaleWhileRevalidate({cacheName:"static-font-assets",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:604800})]}),"GET"),e.registerRoute(/\.(?:jpg|jpeg|gif|png|svg|ico|webp)$/i,new e.StaleWhileRevalidate({cacheName:"static-image-assets",plugins:[new e.ExpirationPlugin({maxEntries:64,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\/_next\/image\?url=.+$/i,new e.StaleWhileRevalidate({cacheName:"next-image",plugins:[new e.ExpirationPlugin({maxEntries:64,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:mp3|wav|ogg)$/i,new e.CacheFirst({cacheName:"static-audio-assets",plugins:[new e.RangeRequestsPlugin,new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:mp4)$/i,new e.CacheFirst({cacheName:"static-video-assets",plugins:[new e.RangeRequestsPlugin,new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:js)$/i,new e.StaleWhileRevalidate({cacheName:"static-js-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:css|less)$/i,new e.StaleWhileRevalidate({cacheName:"static-style-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\/_next\/data\/.+\/.+\.json$/i,new e.StaleWhileRevalidate({cacheName:"next-data",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:json|xml|csv)$/i,new e.NetworkFirst({cacheName:"static-data-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(({url:e})=>{if(!(self.origin===e.origin))return!1;const s=e.pathname;return!s.startsWith("/api/auth/")&&!!s.startsWith("/api/")},new e.NetworkFirst({cacheName:"apis",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:16,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(({url:e})=>{if(!(self.origin===e.origin))return!1;return!e.pathname.startsWith("/api/")},new e.NetworkFirst({cacheName:"others",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(({url:e})=>!(self.origin===e.origin),new e.NetworkFirst({cacheName:"cross-origin",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:3600})]}),"GET")});