From dec24e08699c824a5d782e66923ccc2396791e74 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Aug 2026 00:36:51 +0000 Subject: [PATCH 1/6] chore(deps): bump the npm_and_yarn group across 1 directory with 3 updates Bumps the npm_and_yarn group with 3 updates in the / directory: [ip-address](https://github.com/beaugunderson/ip-address), [undici](https://github.com/nodejs/undici) and [postcss](https://github.com/postcss/postcss). Updates `ip-address` from 10.2.0 to 10.3.1 - [Release notes](https://github.com/beaugunderson/ip-address/releases) - [Commits](https://github.com/beaugunderson/ip-address/compare/v10.2.0...v10.3.1) Updates `undici` from 8.5.0 to 8.9.0 - [Release notes](https://github.com/nodejs/undici/releases) - [Commits](https://github.com/nodejs/undici/compare/v8.5.0...v8.9.0) Updates `postcss` from 8.5.18 to 8.5.23 - [Release notes](https://github.com/postcss/postcss/releases) - [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/postcss/postcss/compare/8.5.18...8.5.23) --- updated-dependencies: - dependency-name: ip-address dependency-version: 10.3.1 dependency-type: direct:production - dependency-name: postcss dependency-version: 8.5.23 dependency-type: direct:development - dependency-name: undici dependency-version: 8.9.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- package.json | 6 +- pnpm-lock.yaml | 278 +++++++++++++++++++++++++++++++------------------ 2 files changed, 182 insertions(+), 102 deletions(-) diff --git a/package.json b/package.json index 41080993f3..6d70a71951 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "http-proxy-agent": "^7.0.2", "https-proxy-agent": "^7.0.6", "humanize-duration": "^3.33.2", - "ip-address": "^10.2.0", + "ip-address": "^10.3.1", "js-yaml": "^4.3.0", "lodash": "4.18.1", "mime": "^4.1.0", @@ -105,7 +105,7 @@ "tailwind-merge": "^2.6.1", "typeorm": "0.3.31", "ua-parser-js": "^2.0.10", - "undici": "^8.5.0", + "undici": "^8.9.0", "validator": "^13.15.35", "web-push": "3.6.7", "wink-jaro-distance": "^2.0.0", @@ -170,7 +170,7 @@ "jiti": "^2.6.1", "lint-staged": "16.4.0", "nodemon": "3.1.14", - "postcss": "^8.5.18", + "postcss": "^8.5.23", "prettier": "3.8.2", "prettier-plugin-organize-imports": "4.3.0", "prettier-plugin-tailwindcss": "0.7.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d49afbff32..62a1faee89 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -114,8 +114,8 @@ importers: specifier: ^3.33.2 version: 3.33.2 ip-address: - specifier: ^10.2.0 - version: 10.2.0 + specifier: ^10.3.1 + version: 10.3.1 js-yaml: specifier: ^4.3.0 version: 4.3.0 @@ -222,8 +222,8 @@ importers: specifier: ^2.0.10 version: 2.0.10 undici: - specifier: ^8.5.0 - version: 8.5.0 + specifier: ^8.9.0 + version: 8.9.0 validator: specifier: ^13.15.35 version: 13.15.35 @@ -347,7 +347,7 @@ importers: version: 0.4.14 autoprefixer: specifier: ^10.5.0 - version: 10.5.0(postcss@8.5.18) + version: 10.5.0(postcss@8.5.23) baseline-browser-mapping: specifier: ^2.10.18 version: 2.10.23 @@ -412,8 +412,8 @@ importers: specifier: 3.1.14 version: 3.1.14 postcss: - specifier: ^8.5.18 - version: 8.5.18 + specifier: ^8.5.23 + version: 8.5.23 prettier: specifier: 3.8.2 version: 3.8.2 @@ -485,8 +485,8 @@ packages: resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} engines: {node: '>=6.9.0'} - '@babel/generator@7.29.7': - resolution: {integrity: sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==} + '@babel/generator@7.29.8': + resolution: {integrity: sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==} engines: {node: '>=6.9.0'} '@babel/helper-annotate-as-pure@7.27.3': @@ -631,8 +631,8 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@7.29.7': - resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} + '@babel/parser@7.29.8': + resolution: {integrity: sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==} engines: {node: '>=6.0.0'} hasBin: true @@ -1160,16 +1160,16 @@ packages: resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.29.7': - resolution: {integrity: sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==} + '@babel/traverse@7.29.8': + resolution: {integrity: sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==} engines: {node: '>=6.9.0'} '@babel/types@7.29.0': resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} - '@babel/types@7.29.7': - resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} + '@babel/types@7.29.8': + resolution: {integrity: sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==} engines: {node: '>=6.9.0'} '@bcoe/v8-coverage@0.2.3': @@ -1541,177 +1541,209 @@ packages: resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-arm64@1.3.0': resolution: {integrity: sha512-C0SqjoFKnszqa44EQ7xoaT48nnO0lOyXEULfXMWi8krrjOPGYkeK30Okzla6ATbBYsyZ0ySinK0FVkpv3DwzfQ==} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-arm@1.2.4': resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-arm@1.3.0': resolution: {integrity: sha512-A8UpHoUDW4DwnXoV6+q3C1s7QLRAHtPDEjWuNZjwHMyoCNZnm0GeNN8ls9f/bsEYTRQRW96C/n34XJQHJ2fT7A==} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-ppc64@1.2.4': resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-ppc64@1.3.0': resolution: {integrity: sha512-WOpkVxAjFd369iaIzEgNRreFD+gWdUMIGD5zplhNKNeqS6mm5dac3q2AFyCBmzYoAdouzZvRBgxy4z8QHZb4/A==} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-riscv64@1.2.4': resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-riscv64@1.3.0': resolution: {integrity: sha512-DRWw0mOHusrCCuw2rqP87oLg6PGlkomVDFqw2hIwsSfwWpu4k3XLcBPaKKl6ct/GtL/cwNkgwjV/tc0Mqht3VA==} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-s390x@1.2.4': resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-s390x@1.3.0': resolution: {integrity: sha512-9APy+nFWhHS+kzLgWZfLcyrUd7YqnAQVa4BPOo4xkoHpdoktOAPG4cEr9+Jpl0TtqfVmcMJimNL5qNTyyOHZNA==} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-x64@1.2.4': resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-x64@1.3.0': resolution: {integrity: sha512-y9RNUYDe2A1UAdhLyfeOodGRszQdaEoe4nfOpp/sNVPl2CWIcUyFaDoCh4vPLPxu19803j2naLqZup2WxDXCLA==} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linuxmusl-arm64@1.2.4': resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-libvips-linuxmusl-arm64@1.3.0': resolution: {integrity: sha512-cC1wkC0Mlucd0KSiGrLkJnB/ZqPvZCntc/Lk7ZnYO5ZSbF2euNek4Xvxafojq+wN1q/W0eprdpUIjUr/EV2PBg==} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-libvips-linuxmusl-x64@1.2.4': resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-libvips-linuxmusl-x64@1.3.0': resolution: {integrity: sha512-LiYMhUZicB1QG//+RvmYZpXJO8fYRENfp+MZUCnG9aw+AKvGAy9gPaCnuwsPcBFs8EV66M0NNxj9VHcNklE8zw==} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-linux-arm64@0.34.5': resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-linux-arm64@0.35.0': resolution: {integrity: sha512-4+4XHLNT5wDT0roYlHTEmH9lDKt0acf9Tv+3hM3iceOirkxrR404/3WjAYZ9F9CkHrxeRcGLJXbi4vluMZ9O+A==} engines: {node: '>=20.9.0'} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-linux-arm@0.34.5': resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-linux-arm@0.35.0': resolution: {integrity: sha512-VVlpEWwizEFIOom0zdoeKuO5nuTswzVE5uHcBNvHzmeHUpNFajY3HFfbQ+zIH4E2kVaZ/yVxmsShW56TtEy4uA==} engines: {node: '>=20.9.0'} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-linux-ppc64@0.34.5': resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-linux-ppc64@0.35.0': resolution: {integrity: sha512-N3hzbEpUTJC8pWpPVJvgzGxM+so/MAXc8O2s/53B0LL9ZGpfXpME7Wizkc5d/8fRBlBtkDjzoZGDCqqNDHqLEw==} engines: {node: '>=20.9.0'} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-linux-riscv64@0.34.5': resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-linux-riscv64@0.35.0': resolution: {integrity: sha512-l6vmKVPnbS0RhVMbyxP5meAARsbhCnBN4fy31qz0+3a6Rv4jEqfzDrT89y6ZPkCi0AJGnwp2En528yXo401Hpw==} engines: {node: '>=20.9.0'} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-linux-s390x@0.34.5': resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-linux-s390x@0.35.0': resolution: {integrity: sha512-MYlMiPFiv/EKPAHnp3yNZ9AAWFsxga9c5Bkc6wkar6bqzHLlkGVJHRm0u1ei+VXnZxp3Mz9MG9ZIsI8vSOf3sQ==} engines: {node: '>=20.9.0'} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-linux-x64@0.34.5': resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-linux-x64@0.35.0': resolution: {integrity: sha512-TYaItB5oj1ioXjhyn2xrR208vf+YuIIcHptQWRRaBmFhvIvL9D72DXN8w75xup0KXA8UdEAhQ9Qb2S49FD/9Cw==} engines: {node: '>=20.9.0'} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-linuxmusl-arm64@0.34.5': resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-linuxmusl-arm64@0.35.0': resolution: {integrity: sha512-DSTb6ijQzqe6DdAaOBVqJ/SYf1vO8EW5bK6X6LRXufEBebf2722VCdvBUtZ3rtV0x2ApfPNDy/p7LrrjaWjiyQ==} engines: {node: '>=20.9.0'} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-linuxmusl-x64@0.34.5': resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-linuxmusl-x64@0.35.0': resolution: {integrity: sha512-K7ykQ+26Rt6+4BTU80AuGgTPIYX86UxiAKT4rcXX/WNTo7k1ZxpKz+TguHnwVpCqQK3B5PK0vZ0ZBe6nz/ib1w==} engines: {node: '>=20.9.0'} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-wasm32@0.34.5': resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} @@ -2074,11 +2106,12 @@ packages: '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} - '@napi-rs/wasm-runtime@1.1.6': - resolution: {integrity: sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==} + '@napi-rs/wasm-runtime@1.2.3': + resolution: {integrity: sha512-UMduMbqO5s5zF2NkNacMT/yK5Y5QiKvWr2+50bzIIxFDwVJ2h49b+oyjaCGPhJxd2/gC2x39EHv/gHVuu36x2Q==} + engines: {node: ^20.19.0 || ^22.13.0 || >=23.5.0} peerDependencies: - '@emnapi/core': ^1.7.1 - '@emnapi/runtime': ^1.7.1 + '@emnapi/core': ^1.7.1 || ^2.0.0-alpha.4 + '@emnapi/runtime': ^1.7.1 || ^2.0.0-alpha.4 '@next/env@16.2.11': resolution: {integrity: sha512-0do5A3BJ2gxWr0ZCMcD6BhW+e595jyxdTl3rXTS6lOtD8ektMiW6CO+EPwt1Eca1DBnm90r/7GdiKWBKxH++DA==} @@ -2103,24 +2136,28 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@next/swc-linux-arm64-musl@16.2.11': resolution: {integrity: sha512-eIjcpx2fnnFSSkZDbTxy74KnokUXDjfoLClpWelfgHLf621aTqswhwXQ7GkD5K5rplrS6LZ/Bj+mVuvzluBOEg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@next/swc-linux-x64-gnu@16.2.11': resolution: {integrity: sha512-8WgzpaWMs46qJT9kiV47cje86L0x/Mu9t8/Gwj+pnbgW3rETVfCnaScPjlYUwNScpOozdcIMHWmAvuZJUonR2w==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@next/swc-linux-x64-musl@16.2.11': resolution: {integrity: sha512-I3UgPds7G4ZYnTb/H+5GBGuUT2DhAk6j0mL6A4s63RjFs74wB2hOWP0vaxsK+3NJraExt3eYEPQ/UtT0x/64Nw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@next/swc-win32-arm64-msvc@16.2.11': resolution: {integrity: sha512-n89CjtcThnjrwgJMAiI5xbqwLY51zvwC9tSlArmVndAJLYVl9T9UAdlkXTmZvE++idoXe8KdglQlhNRdUp1c6g==} @@ -2603,24 +2640,28 @@ packages: engines: {node: '>=10'} cpu: [arm64] os: [linux] + libc: [glibc] '@swc/core-linux-arm64-musl@1.6.5': resolution: {integrity: sha512-jyCKqoX50Fg8rJUQqh4u5PqnE7nqYKXHjVH2WcYr114/MU21zlsI+YL6aOQU1XP8bJQ2gPQ1rnlnGJdEHiKS/w==} engines: {node: '>=10'} cpu: [arm64] os: [linux] + libc: [musl] '@swc/core-linux-x64-gnu@1.6.5': resolution: {integrity: sha512-G6HmUn/RRIlXC0YYFfBz2qh6OZkHS/KUPkhoG4X9ADcgWXXjOFh6JrefwsYj8VBAJEnr5iewzjNfj+nztwHaeA==} engines: {node: '>=10'} cpu: [x64] os: [linux] + libc: [glibc] '@swc/core-linux-x64-musl@1.6.5': resolution: {integrity: sha512-AQpBjBnelQDSbeTJA50AXdS6+CP66LsXIMNTwhPSgUfE7Bx1ggZV11Fsi4Q5SGcs6a8Qw1cuYKN57ZfZC5QOuA==} engines: {node: '>=10'} cpu: [x64] os: [linux] + libc: [musl] '@swc/core-win32-arm64-msvc@1.6.5': resolution: {integrity: sha512-MZTWM8kUwS30pVrtbzSGEXtek46aXNb/mT9D6rsS7NvOuv2w+qZhjR1rzf4LNbbn5f8VnR4Nac1WIOYZmfC5ng==} @@ -2658,8 +2699,8 @@ packages: '@swc/helpers@0.5.23': resolution: {integrity: sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==} - '@swc/types@0.1.27': - resolution: {integrity: sha512-K6h3iUlqeM946U4sXFYeahefR1YBbXJvko+hv8WS8/0BNJ4OHiHRywMnQUJCqkR7Y9+hqQ1TvEpiKqUhz7NEFg==} + '@swc/types@0.1.28': + resolution: {integrity: sha512-V6Mnml8v09QALx6K0elJ7o9K/MkVDtW3t6L+7Ou/JcWtb3xwId2AH4FeOceySd2JaO87IMw4+6vSZxLm34LPbw==} '@tailwindcss/aspect-ratio@0.4.2': resolution: {integrity: sha512-8QPrypskfBa7QIMuKHg2TA7BqES6vhBrDLOv8Unb6FcFyd3TjKbc6lcmb9UPQHxfl24sXoJ41ux/H7qQQvfaSQ==} @@ -3069,91 +3110,109 @@ packages: resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==} cpu: [arm64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-arm64-gnu@1.12.2': resolution: {integrity: sha512-zJc0H99FEPoFfSrNpa91HYfxzfAJCr502oxNK1cfdC9hlaFI43RT+JFCann9JUgZmLzzntChHyn13Sgn9ljHNg==} cpu: [arm64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-arm64-musl@1.11.1': resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==} cpu: [arm64] os: [linux] + libc: [musl] '@unrs/resolver-binding-linux-arm64-musl@1.12.2': resolution: {integrity: sha512-KQ3Lki6l+Pz1k/eBipN41ES+YUK30beLGb9YqcB1O542cyLCNE6GaxrfcY3T6EezmGGk84wb5XyO9loTM9tkcA==} cpu: [arm64] os: [linux] + libc: [musl] '@unrs/resolver-binding-linux-loong64-gnu@1.12.2': resolution: {integrity: sha512-3SJGEh1DborhG6pyxvhPzCT4bbSIVihsvgJc13P1bHG7KLdNDaF9T3gsTwFc7Jw/5Y5/iWOjkEx7Zy0NvCGX3Q==} cpu: [loong64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-loong64-musl@1.12.2': resolution: {integrity: sha512-jiuG/Obbel7uw1PwHNFfrkiKhLAF6mnyZ6aWlOAVN9WqKm8v0OFGnciJIHu8+CMvXLQ8AD51LPzAoUfT21D5Ew==} cpu: [loong64] os: [linux] + libc: [musl] '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==} cpu: [ppc64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-ppc64-gnu@1.12.2': resolution: {integrity: sha512-q7xRvVpmcfeL+LlZg8Pbbo6QaTZwDU5BaGZbwfhkEsXJn3Was8xYfE0RBH266xZt0rM6B7i8xAYIvjthuUIWHg==} cpu: [ppc64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==} cpu: [riscv64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-riscv64-gnu@1.12.2': resolution: {integrity: sha512-0CVdx6lcnT3Q9inOH8tsMIOJ6ImndllMjqJHg8RLVdB7Vq4SfkEXl9mCSsVNuNA4MCYycRicCUxPCabVHJRr6A==} cpu: [riscv64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==} cpu: [riscv64] os: [linux] + libc: [musl] '@unrs/resolver-binding-linux-riscv64-musl@1.12.2': resolution: {integrity: sha512-iOwlRo9vnp6R6ohHQS11n0NnfdXx/omhkocmIfaPRpQhKZ+3BDMkkdRVh53qjkFkpPddf+FETA28NwGN7l5l+w==} cpu: [riscv64] os: [linux] + libc: [musl] '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==} cpu: [s390x] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-s390x-gnu@1.12.2': resolution: {integrity: sha512-HYJtLfXq94q8iZNFT1lknx258wlkkWhZeUXJRqzKBBUJ00CvZ+N33zgbCqimLjsyw5Va6uUxhVa12mI+kaveEw==} cpu: [s390x] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-x64-gnu@1.11.1': resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==} cpu: [x64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-x64-gnu@1.12.2': resolution: {integrity: sha512-mPsUhunKKDih5O96Y6enDQyHc1SqBPlY1E/SfMWDM3EdJ95Z9CArPeCVwCCqbP45ljvivdEk8Fxn+SIb1rDAJQ==} cpu: [x64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-x64-musl@1.11.1': resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==} cpu: [x64] os: [linux] + libc: [musl] '@unrs/resolver-binding-linux-x64-musl@1.12.2': resolution: {integrity: sha512-azrt6+5ydLd8Vt210AAFis/lZevSfPw93EJRIJG+xPu4WCJ8K0kppCTpMyLPcKT7H15M4Jnt2tMp5bOvCkRC6A==} cpu: [x64] os: [linux] + libc: [musl] '@unrs/resolver-binding-openharmony-arm64@1.12.2': resolution: {integrity: sha512-YZ9hP4O0X9PQb8eO980qmLNGH4zT3I9+SZTdt0Pr0YyuGQhYKoOZkV02VzrzyOZJ5xIJ3UFIenKkUkGg8GjgWQ==} @@ -3543,6 +3602,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + baseline-browser-mapping@2.11.13: + resolution: {integrity: sha512-k9HNuUVMlqVjQ9UHzfPjIqiDbWw7WqT1AoT7GL8VwvF3r0ZfArtgiSPAlmupyNquNgOJHTuH4CKYf8ttMTWBTQ==} + engines: {node: '>=6.0.0'} + hasBin: true + baseline-browser-mapping@2.11.3: resolution: {integrity: sha512-sbT0Ui/CZwyAyy7icT1Gw5P1LKRlFaHwaF6tDCW5YHq2X5SeeZFphBuIagopSfwSSZq3sQcbmEL072yphxm7ew==} engines: {node: '>=6.0.0'} @@ -3695,6 +3759,9 @@ packages: caniuse-lite@1.0.30001806: resolution: {integrity: sha512-72Cuvd95zbSYPKq6Fhg8eDJRlzgWDf7/mtoZv6Qe/DYNCEBdNxoA3+rZAU2ZhGCpZlns3EssFavaZomckT5Uuw==} + caniuse-lite@1.0.30001809: + resolution: {integrity: sha512-xxWVywk6a6Arlk+hymeycyn/VgqEfLDxupvhH/xiY5SJ/18kmi9o6MiO320DCUzypORHLtvh0I4i04tUhCNHNQ==} + caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} @@ -4056,6 +4123,7 @@ packages: cron-parser@4.9.0: resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==} engines: {node: '>=12.0.0'} + deprecated: v4 is no longer maintained, upgrade to v5 cronstrue@3.14.0: resolution: {integrity: sha512-XnW4vuK/jPJjmTyDWiej1Zq36Od7ITwxaV2O1pzHZuyMVvdy7NAvyvIBzybt+idqSpfqYuoDG7uf/ocGtJVWxA==} @@ -4339,8 +4407,8 @@ packages: electron-to-chromium@1.5.344: resolution: {integrity: sha512-4MxfbmNDm+KPh066EZy+eUnkcDPcZ35wNmOWzFuh/ijvHsve6kbLTLURy88uCNK5FbpN+yk2nQY6BYh1GEt+wg==} - electron-to-chromium@1.5.396: - resolution: {integrity: sha512-yHiw2Y3C3H9U6TMbOfoWK/BPreiOPXRfTWPBwQBoZG6/8TB6eOPnsy5oaRYuatR7Fw2SJ4kKforgufeo7fq0EQ==} + electron-to-chromium@1.5.405: + resolution: {integrity: sha512-bNglH7lPH5l+yHOes7Zr4VqxhOy4BQ9ZBUX4VdoFgxMpzJk7W1ZoO3Vgd9Pxa9PyjQ76sfm2aKH/nzEcCNRlew==} email-templates@13.0.1: resolution: {integrity: sha512-kIH40FwhiE20Fh5DR1wrVM0HETYPoqfihUAgUwZtZgPK6VJNTCdJzTo7yxcgYmvMmKgqGJFSXE8/pEkeVmjuDg==} @@ -5278,8 +5346,8 @@ packages: resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} engines: {node: '>= 12'} - ip-address@10.2.0: - resolution: {integrity: sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==} + ip-address@10.3.1: + resolution: {integrity: sha512-1e9d3kb97NHJTIJDZW9rKqW2h6+dFa50Dy0fpPSMQp2ADje5gvKsXmdiK6dwY5t76TaTt5+P5N1Y/LoToIxP6g==} engines: {node: '>= 12'} ip-address@9.0.5: @@ -5678,8 +5746,8 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-yaml@3.15.0: - resolution: {integrity: sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==} + js-yaml@3.15.1: + resolution: {integrity: sha512-S99WuO3HlhO3XN41EtYUNl9zzXjoJx7QvmipxsJVxtCBT0YHEFy+iOJhjSvrmV12nYhWpZaM8lPHkJm0yUMbag==} hasBin: true js-yaml@4.3.0: @@ -6280,8 +6348,8 @@ packages: mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - nanoid@3.3.16: - resolution: {integrity: sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==} + nanoid@3.3.18: + resolution: {integrity: sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true @@ -6387,8 +6455,8 @@ packages: node-releases@2.0.38: resolution: {integrity: sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==} - node-releases@2.0.51: - resolution: {integrity: sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==} + node-releases@2.0.53: + resolution: {integrity: sha512-D9UOmYG3UH1V+ENW56t5QXBwJw1YEY18ruVeus89Rw+SyIgjPkCO84bRzO3uNIYosJbNwiabWVn48o3uJLjxFQ==} engines: {node: '>=18'} node-schedule@2.1.1: @@ -6788,8 +6856,8 @@ packages: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} - postcss@8.5.18: - resolution: {integrity: sha512-xdB1oSLHbz1vRWgCDalrCqEFTWzFlhqFC5tIHLMOSUIjhm3XXQ1qrFy8S/ESr1JYRRXqM3c1QFiMZUJdUTqyMQ==} + postcss@8.5.23: + resolution: {integrity: sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg==} engines: {node: ^10 || ^12 || >=14} postgres-array@2.0.0: @@ -8112,8 +8180,8 @@ packages: resolution: {integrity: sha512-LIY910g9TI13YS95lrMFrs8Rm/u/irgHeTWoKCoteeJ04CUJ92eEfj0rVn+7VKMPBpUPiUoBKfhNyLI23EE/KA==} engines: {node: '>=18.17'} - undici@8.5.0: - resolution: {integrity: sha512-xamtWoB1EshgjpmlXd7GGm2VfdDtw1+rD8uhry8pSNW3If6S8E0m2T2+orSKeZXEn/aPJMviCpDBA65WJt8zhg==} + undici@8.9.0: + resolution: {integrity: sha512-aWZpUj7XoGonMClx4gdDRfgBjqeA+F473aDmROQQbM9n6PRfK/u1q/a0X4wMTgcHfT8H6fpbt98PFuDUwFg2YA==} engines: {node: '>=22.19.0'} unicode-canonical-property-names-ecmascript@2.0.0: @@ -8180,6 +8248,12 @@ packages: peerDependencies: browserslist: '>= 4.21.0' + update-browserslist-db@1.3.1: + resolution: {integrity: sha512-ZZ61DsRsOnakl74HAmp3oSN4aXUmEWXf+i/yv0h7tIBfICc3VdrFErQKUUKPgu3AMsTUMbcongALEN4l6GSUrQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -8499,14 +8573,14 @@ snapshots: '@babel/core@7.29.7': dependencies: '@babel/code-frame': 7.29.7 - '@babel/generator': 7.29.7 + '@babel/generator': 7.29.8 '@babel/helper-compilation-targets': 7.29.7 '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) '@babel/helpers': 7.29.7 - '@babel/parser': 7.29.7 + '@babel/parser': 7.29.8 '@babel/template': 7.29.7 - '@babel/traverse': 7.29.7 - '@babel/types': 7.29.7 + '@babel/traverse': 7.29.8 + '@babel/types': 7.29.8 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 debug: 4.4.3(supports-color@5.5.0) @@ -8525,10 +8599,10 @@ snapshots: '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 - '@babel/generator@7.29.7': + '@babel/generator@7.29.8': dependencies: - '@babel/parser': 7.29.7 - '@babel/types': 7.29.7 + '@babel/parser': 7.29.8 + '@babel/types': 7.29.8 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 @@ -8622,8 +8696,8 @@ snapshots: '@babel/helper-module-imports@7.29.7': dependencies: - '@babel/traverse': 7.29.7 - '@babel/types': 7.29.7 + '@babel/traverse': 7.29.8 + '@babel/types': 7.29.8 transitivePeerDependencies: - supports-color optional: true @@ -8642,7 +8716,7 @@ snapshots: '@babel/core': 7.29.7 '@babel/helper-module-imports': 7.29.7 '@babel/helper-validator-identifier': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.8 transitivePeerDependencies: - supports-color optional: true @@ -8712,16 +8786,16 @@ snapshots: '@babel/helpers@7.29.7': dependencies: '@babel/template': 7.29.7 - '@babel/types': 7.29.7 + '@babel/types': 7.29.8 optional: true '@babel/parser@7.29.2': dependencies: '@babel/types': 7.29.0 - '@babel/parser@7.29.7': + '@babel/parser@7.29.8': dependencies: - '@babel/types': 7.29.7 + '@babel/types': 7.29.8 optional: true '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.7(@babel/core@7.29.0)': @@ -9454,8 +9528,8 @@ snapshots: '@babel/template@7.29.7': dependencies: '@babel/code-frame': 7.29.7 - '@babel/parser': 7.29.7 - '@babel/types': 7.29.7 + '@babel/parser': 7.29.8 + '@babel/types': 7.29.8 optional: true '@babel/traverse@7.29.0': @@ -9470,14 +9544,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/traverse@7.29.7': + '@babel/traverse@7.29.8': dependencies: '@babel/code-frame': 7.29.7 - '@babel/generator': 7.29.7 + '@babel/generator': 7.29.8 '@babel/helper-globals': 7.29.7 - '@babel/parser': 7.29.7 + '@babel/parser': 7.29.8 '@babel/template': 7.29.7 - '@babel/types': 7.29.7 + '@babel/types': 7.29.8 debug: 4.4.3(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -9488,7 +9562,7 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 - '@babel/types@7.29.7': + '@babel/types@7.29.8': dependencies: '@babel/helper-string-parser': 7.29.7 '@babel/helper-validator-identifier': 7.29.7 @@ -10164,7 +10238,7 @@ snapshots: camelcase: 5.3.1 find-up: 4.1.0 get-package-type: 0.1.0 - js-yaml: 3.15.0 + js-yaml: 3.15.1 resolve-from: 5.0.0 optional: true @@ -10454,7 +10528,7 @@ snapshots: '@tybys/wasm-util': 0.10.1 optional: true - '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + '@napi-rs/wasm-runtime@1.2.3(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': dependencies: '@emnapi/core': 1.10.0 '@emnapi/runtime': 1.10.0 @@ -11041,7 +11115,7 @@ snapshots: '@swc/core@1.6.5(@swc/helpers@0.5.23)': dependencies: '@swc/counter': 0.1.3 - '@swc/types': 0.1.27 + '@swc/types': 0.1.28 optionalDependencies: '@swc/core-darwin-arm64': 1.6.5 '@swc/core-darwin-x64': 1.6.5 @@ -11067,7 +11141,7 @@ snapshots: dependencies: tslib: 2.8.1 - '@swc/types@0.1.27': + '@swc/types@0.1.28': dependencies: '@swc/counter': 0.1.3 optional: true @@ -11124,8 +11198,8 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.29.7 - '@babel/types': 7.29.7 + '@babel/parser': 7.29.8 + '@babel/types': 7.29.8 '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.28.0 @@ -11133,18 +11207,18 @@ snapshots: '@types/babel__generator@7.27.0': dependencies: - '@babel/types': 7.29.7 + '@babel/types': 7.29.8 optional: true '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.29.7 - '@babel/types': 7.29.7 + '@babel/parser': 7.29.8 + '@babel/types': 7.29.8 optional: true '@types/babel__traverse@7.28.0': dependencies: - '@babel/types': 7.29.7 + '@babel/types': 7.29.8 optional: true '@types/bcrypt@6.0.0': @@ -11577,7 +11651,7 @@ snapshots: dependencies: '@emnapi/core': 1.10.0 '@emnapi/runtime': 1.10.0 - '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@napi-rs/wasm-runtime': 1.2.3(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': @@ -11840,13 +11914,13 @@ snapshots: at-least-node@1.0.0: {} - autoprefixer@10.5.0(postcss@8.5.18): + autoprefixer@10.5.0(postcss@8.5.23): dependencies: browserslist: 4.28.2 caniuse-lite: 1.0.30001791 fraction.js: 5.3.4 picocolors: 1.1.1 - postcss: 8.5.18 + postcss: 8.5.23 postcss-value-parser: 4.2.0 available-typed-arrays@1.0.7: @@ -11976,6 +12050,9 @@ snapshots: baseline-browser-mapping@2.10.23: {} + baseline-browser-mapping@2.11.13: + optional: true + baseline-browser-mapping@2.11.3: {} bcrypt-pbkdf@1.0.2: @@ -12056,11 +12133,11 @@ snapshots: browserslist@4.28.7: dependencies: - baseline-browser-mapping: 2.11.3 - caniuse-lite: 1.0.30001806 - electron-to-chromium: 1.5.396 - node-releases: 2.0.51 - update-browserslist-db: 1.2.3(browserslist@4.28.7) + baseline-browser-mapping: 2.11.13 + caniuse-lite: 1.0.30001809 + electron-to-chromium: 1.5.405 + node-releases: 2.0.53 + update-browserslist-db: 1.3.1(browserslist@4.28.7) optional: true bs-logger@0.2.6: @@ -12166,6 +12243,9 @@ snapshots: caniuse-lite@1.0.30001806: {} + caniuse-lite@1.0.30001809: + optional: true + caseless@0.12.0: {} ccount@2.0.1: {} @@ -12880,7 +12960,7 @@ snapshots: electron-to-chromium@1.5.344: {} - electron-to-chromium@1.5.396: + electron-to-chromium@1.5.405: optional: true email-templates@13.0.1(@babel/core@7.29.7)(handlebars@4.7.8)(mustache@4.2.0)(pug@3.0.4)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(underscore@1.13.7): @@ -14186,7 +14266,7 @@ snapshots: ip-address@10.1.0: {} - ip-address@10.2.0: {} + ip-address@10.3.1: {} ip-address@9.0.5: dependencies: @@ -14391,7 +14471,7 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: '@babel/core': 7.29.7 - '@babel/parser': 7.29.7 + '@babel/parser': 7.29.8 '@istanbuljs/schema': 0.1.6 istanbul-lib-coverage: 3.2.2 semver: 7.7.4 @@ -14694,10 +14774,10 @@ snapshots: jest-snapshot@30.2.0: dependencies: '@babel/core': 7.29.7 - '@babel/generator': 7.29.7 + '@babel/generator': 7.29.8 '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7) '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7) - '@babel/types': 7.29.7 + '@babel/types': 7.29.8 '@jest/expect-utils': 30.2.0 '@jest/get-type': 30.1.0 '@jest/snapshot-utils': 30.2.0 @@ -14781,7 +14861,7 @@ snapshots: js-tokens@4.0.0: {} - js-yaml@3.15.0: + js-yaml@3.15.1: dependencies: argparse: 1.0.10 esprima: 4.0.1 @@ -15549,7 +15629,7 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 - nanoid@3.3.16: {} + nanoid@3.3.18: {} nanoid@5.1.11: {} @@ -15663,7 +15743,7 @@ snapshots: node-releases@2.0.38: {} - node-releases@2.0.51: + node-releases@2.0.53: optional: true node-schedule@2.1.1: @@ -16029,29 +16109,29 @@ snapshots: possible-typed-array-names@1.0.0: {} - postcss-import@15.1.0(postcss@8.5.18): + postcss-import@15.1.0(postcss@8.5.23): dependencies: - postcss: 8.5.18 + postcss: 8.5.23 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.11 - postcss-js@4.0.1(postcss@8.5.18): + postcss-js@4.0.1(postcss@8.5.23): dependencies: camelcase-css: 2.0.1 - postcss: 8.5.18 + postcss: 8.5.23 - postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.18)(yaml@2.8.3): + postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.23)(yaml@2.8.3): dependencies: lilconfig: 3.1.3 optionalDependencies: jiti: 1.21.7 - postcss: 8.5.18 + postcss: 8.5.23 yaml: 2.8.3 - postcss-nested@6.2.0(postcss@8.5.18): + postcss-nested@6.2.0(postcss@8.5.23): dependencies: - postcss: 8.5.18 + postcss: 8.5.23 postcss-selector-parser: 6.1.2 postcss-selector-parser@6.0.10: @@ -16068,13 +16148,13 @@ snapshots: postcss@8.4.31: dependencies: - nanoid: 3.3.16 + nanoid: 3.3.18 picocolors: 1.1.1 source-map-js: 1.2.1 - postcss@8.5.18: + postcss@8.5.23: dependencies: - nanoid: 3.3.16 + nanoid: 3.3.18 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -17273,11 +17353,11 @@ snapshots: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.1.1 - postcss: 8.5.18 - postcss-import: 15.1.0(postcss@8.5.18) - postcss-js: 4.0.1(postcss@8.5.18) - postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.18)(yaml@2.8.3) - postcss-nested: 6.2.0(postcss@8.5.18) + postcss: 8.5.23 + postcss-import: 15.1.0(postcss@8.5.23) + postcss-js: 4.0.1(postcss@8.5.23) + postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.23)(yaml@2.8.3) + postcss-nested: 6.2.0(postcss@8.5.23) postcss-selector-parser: 6.1.2 resolve: 1.22.11 sucrase: 3.35.1 @@ -17633,7 +17713,7 @@ snapshots: undici@6.28.0: {} - undici@8.5.0: {} + undici@8.9.0: {} unicode-canonical-property-names-ecmascript@2.0.0: {} @@ -17753,7 +17833,7 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 - update-browserslist-db@1.2.3(browserslist@4.28.7): + update-browserslist-db@1.3.1(browserslist@4.28.7): dependencies: browserslist: 4.28.7 escalade: 3.2.0 From ccfa24834504b9d762d93d537ca3f9c58342b1fe Mon Sep 17 00:00:00 2001 From: Selman Trabzon Date: Thu, 13 Aug 2026 16:27:17 +0300 Subject: [PATCH 2/6] fix(test): scope library browse search in Cypress The global header search also uses type=search, so the browse URL test must target the library-specific input after the toolbar refactor. Co-authored-by: Cursor --- cypress/e2e/library.cy.ts | 2 +- src/components/Library/LibraryBrowseToolbar.tsx | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/cypress/e2e/library.cy.ts b/cypress/e2e/library.cy.ts index 4153b0e0de..4a091443f8 100644 --- a/cypress/e2e/library.cy.ts +++ b/cypress/e2e/library.cy.ts @@ -172,7 +172,7 @@ describe('Library', () => { it('updates the browse URL from search and sort', () => { cy.visit('/library/browse'); cy.wait('@browse'); - cy.get('input[type=search]').type('dune'); + cy.get('[data-testid=library-browse-search]').type('dune'); cy.url().should('include', 'q=dune'); cy.contains('button', 'Movies').click(); cy.url().should('include', 'mediaType=movie'); diff --git a/src/components/Library/LibraryBrowseToolbar.tsx b/src/components/Library/LibraryBrowseToolbar.tsx index d64fb56cd3..0afa2c0d9e 100644 --- a/src/components/Library/LibraryBrowseToolbar.tsx +++ b/src/components/Library/LibraryBrowseToolbar.tsx @@ -72,6 +72,7 @@ const LibraryBrowseToolbar = ({
onQueryChange(event.target.value)} placeholder={intl.formatMessage(messages.searchPlaceholder)} From e250e741d815ed0d0ba84ab5bb01dbe813d75c0e Mon Sep 17 00:00:00 2001 From: Selman Trabzon Date: Thu, 13 Aug 2026 16:37:44 +0300 Subject: [PATCH 3/6] fix(test): stabilize TVDB Cypress episode request flows Tests were failing due to cached TV responses, missing capability mocks, and settings that keep episode requests disabled on discover cards. Co-authored-by: Cursor --- cypress/e2e/providers/tvdb.cy.ts | 233 ++++++++++++++++++------------- 1 file changed, 139 insertions(+), 94 deletions(-) diff --git a/cypress/e2e/providers/tvdb.cy.ts b/cypress/e2e/providers/tvdb.cy.ts index ba54574ddb..0e563d9d93 100644 --- a/cypress/e2e/providers/tvdb.cy.ts +++ b/cypress/e2e/providers/tvdb.cy.ts @@ -82,9 +82,54 @@ describe('TVDB Integration', () => { return cy.wait('@saveMetadata'); }; + const interceptMediaActionCapabilities = () => { + cy.intercept('GET', '/api/v1/media-actions/capabilities', { + movie: { watched: true, rating: true }, + tv: { watched: true, rating: true }, + episode: { watched: true, rating: false }, + providers: [ + { + id: 'trakt', + linked: true, + capabilities: { + readWatched: true, + writeWatched: true, + readRating: true, + writeRating: true, + }, + }, + ], + }).as('mediaActionCapabilities'); + }; + + const interceptEpisodeRequestsSettings = () => { + cy.intercept('GET', '/api/v1/settings/public', (req) => { + delete req.headers['if-none-match']; + req.continue((res) => { + const body = + typeof res.body === 'string' ? JSON.parse(res.body) : res.body; + res.send({ + ...body, + episodeRequestsEnabled: true, + }); + }); + }).as('publicSettings'); + }; + + const patchMonsterTv = (patch: (body: Record) => void) => { + cy.intercept('GET', '/api/v1/tv/225634', (req) => { + delete req.headers['if-none-match']; + req.continue((res) => { + patch(res.body as Record); + }); + }); + }; + beforeEach(() => { // Perform login cy.login(Cypress.env('ADMIN_EMAIL'), Cypress.env('ADMIN_PASSWORD')); + interceptMediaActionCapabilities(); + interceptEpisodeRequestsSettings(); // Navigate to Metadata settings navigateToMetadataSettings(); @@ -170,13 +215,13 @@ describe('TVDB Integration', () => { }); it('submits an inclusive cross-season TVDB episode range', () => { - cy.intercept('GET', '/api/v1/tv/225634', (req) => { - delete req.headers['if-none-match']; - req.continue((res) => { - res.body.externalIds.tvdbId = 999; - res.body.mediaInfo = undefined; - res.body.episodeRequestsEnabled = true; - }); + patchMonsterTv((body) => { + body.externalIds = { + ...((body.externalIds as object) ?? {}), + tvdbId: 999, + }; + body.mediaInfo = undefined; + body.episodeRequestsEnabled = true; }); cy.intercept('GET', '/api/v1/tv/225634/episodes', { statusCode: 200, @@ -241,13 +286,13 @@ describe('TVDB Integration', () => { }); it('submits an open-ended TVDB episode request', () => { - cy.intercept('GET', '/api/v1/tv/225634', (req) => { - delete req.headers['if-none-match']; - req.continue((res) => { - res.body.externalIds.tvdbId = 999; - res.body.mediaInfo = undefined; - res.body.episodeRequestsEnabled = true; - }); + patchMonsterTv((body) => { + body.externalIds = { + ...((body.externalIds as object) ?? {}), + tvdbId: 999, + }; + body.mediaInfo = undefined; + body.episodeRequestsEnabled = true; }); cy.intercept('GET', '/api/v1/tv/225634/episodes', { statusCode: 200, @@ -330,11 +375,9 @@ describe('TVDB Integration', () => { }); it('quick-requests one episode from the detail episode list', () => { - cy.intercept('GET', '/api/v1/tv/225634', (req) => { - req.continue((res) => { - res.body.mediaInfo = undefined; - res.body.episodeRequestsEnabled = true; - }); + patchMonsterTv((body) => { + body.mediaInfo = undefined; + body.episodeRequestsEnabled = true; }); cy.intercept('GET', '/api/v1/tv/225634/season/1', episodeSeason).as( 'season1' @@ -392,53 +435,53 @@ describe('TVDB Integration', () => { }, ], }; - cy.intercept('GET', '/api/v1/tv/225634', (req) => { - delete req.headers['if-none-match']; - req.continue((res) => { - res.body.externalIds.tvdbId = 999; - res.body.episodeRequestsEnabled = true; - res.body.seasons = [ - ...res.body.seasons, + patchMonsterTv((body) => { + body.externalIds = { + ...((body.externalIds as object) ?? {}), + tvdbId: 999, + }; + body.episodeRequestsEnabled = true; + body.seasons = [ + ...(body.seasons as object[]), + { + ...(body.seasons as object[])[0], + id: 2, + name: 'Season 2', + seasonNumber: 2, + }, + ]; + body.mediaInfo = { + ...(body.mediaInfo as object), + status: 3, + status4k: 1, + issues: [], + seasons: [], + requests: [ { - ...res.body.seasons[0], - id: 2, - name: 'Season 2', - seasonNumber: 2, + id: 100, + status: 2, + is4k: false, + createdAt: '2026-07-28T10:00:00.000Z', + seasons: [], + episodes: [ + { + tvdbId: 101, + seasonNumber: 1, + episodeNumber: 1, + status: 2, + }, + ], }, - ]; - res.body.mediaInfo = { - ...res.body.mediaInfo, - status: 3, - status4k: 1, - issues: [], - seasons: [], - requests: [ - { - id: 100, - status: 2, - is4k: false, - createdAt: '2026-07-28T10:00:00.000Z', - seasons: [], - episodes: [ - { - tvdbId: 101, - seasonNumber: 1, - episodeNumber: 1, - status: 2, - }, - ], - }, - { - id: 101, - status: 2, - is4k: false, - createdAt: '2026-07-28T11:00:00.000Z', - seasons: [{ seasonNumber: 1, status: 2 }], - episodes: [], - }, - ], - }; - }); + { + id: 101, + status: 2, + is4k: false, + createdAt: '2026-07-28T11:00:00.000Z', + seasons: [{ seasonNumber: 1, status: 2 }], + episodes: [], + }, + ], + }; }); cy.intercept( 'GET', @@ -484,36 +527,36 @@ describe('TVDB Integration', () => { }); it('allows a full-season request after requesting some episodes', () => { - cy.intercept('GET', '/api/v1/tv/225634', (req) => { - delete req.headers['if-none-match']; - req.continue((res) => { - res.body.externalIds.tvdbId = 999; - res.body.episodeRequestsEnabled = true; - res.body.mediaInfo = { - ...res.body.mediaInfo, - status: 3, - status4k: 1, - issues: [], - seasons: [{ seasonNumber: 1, status: 3, status4k: 1 }], - requests: [ - { - id: 100, - status: 2, - is4k: false, - createdAt: '2026-07-28T10:00:00.000Z', - seasons: [], - episodes: [ - { - tvdbId: 101, - seasonNumber: 1, - episodeNumber: 1, - status: 2, - }, - ], - }, - ], - }; - }); + patchMonsterTv((body) => { + body.externalIds = { + ...((body.externalIds as object) ?? {}), + tvdbId: 999, + }; + body.episodeRequestsEnabled = true; + body.mediaInfo = { + ...(body.mediaInfo as object), + status: 3, + status4k: 5, + issues: [], + seasons: [{ seasonNumber: 1, status: 3, status4k: 5 }], + requests: [ + { + id: 100, + status: 2, + is4k: false, + createdAt: '2026-07-28T10:00:00.000Z', + seasons: [], + episodes: [ + { + tvdbId: 101, + seasonNumber: 1, + episodeNumber: 1, + status: 2, + }, + ], + }, + ], + }; }); cy.intercept('POST', '/api/v1/request', (req) => { expect(req.body.seasons).to.deep.equal([1]); @@ -543,6 +586,7 @@ describe('TVDB Integration', () => { typeof res.body === 'string' ? JSON.parse(res.body) : res.body; res.send({ ...body, + episodeRequestsEnabled: true, traktConfigured: true, mediaActionsTraktEnabled: true, }); @@ -563,6 +607,7 @@ describe('TVDB Integration', () => { ); cy.visit(ROUTES.monsterTvShow); + cy.wait('@mediaActionCapabilities'); cy.wait('@publicSettings') .its('response.body.traktConfigured') .should('equal', true); From deeba0447d44aab7f0393694551b315912259f20 Mon Sep 17 00:00:00 2001 From: Selman Trabzon Date: Thu, 13 Aug 2026 16:51:36 +0300 Subject: [PATCH 4/6] fix(test): fix remaining TVDB Cypress state assumptions Discover cards need unrequested media, partial-season mocks should not mark the season complete, and Trakt settings come from beforeEach. Co-authored-by: Cursor --- cypress/e2e/providers/tvdb.cy.ts | 51 ++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 22 deletions(-) diff --git a/cypress/e2e/providers/tvdb.cy.ts b/cypress/e2e/providers/tvdb.cy.ts index 0e563d9d93..7cb198b49f 100644 --- a/cypress/e2e/providers/tvdb.cy.ts +++ b/cypress/e2e/providers/tvdb.cy.ts @@ -111,18 +111,23 @@ describe('TVDB Integration', () => { res.send({ ...body, episodeRequestsEnabled: true, + traktConfigured: true, + mediaActionsTraktEnabled: true, }); }); - }).as('publicSettings'); + }); }; - const patchMonsterTv = (patch: (body: Record) => void) => { + const patchMonsterTv = ( + patch: (body: Record) => void, + alias = 'monsterTv' + ) => { cy.intercept('GET', '/api/v1/tv/225634', (req) => { delete req.headers['if-none-match']; req.continue((res) => { patch(res.body as Record); }); - }); + }).as(alias); }; beforeEach(() => { @@ -348,7 +353,24 @@ describe('TVDB Integration', () => { }); it('offers episode requests from discover cards', () => { - cy.intercept('/api/v1/discover/tv*').as('getPopularTv'); + cy.intercept('GET', '/api/v1/discover/tv*', (req) => { + req.continue((res) => { + const body = + typeof res.body === 'string' ? JSON.parse(res.body) : res.body; + if (!body?.results?.length) { + return; + } + + body.results = [ + { + ...body.results[0], + mediaInfo: undefined, + }, + ...body.results.slice(1), + ]; + res.send(body); + }); + }).as('getPopularTv'); cy.visit(ROUTES.home); cy.wait('@getPopularTv'); @@ -538,7 +560,7 @@ describe('TVDB Integration', () => { status: 3, status4k: 5, issues: [], - seasons: [{ seasonNumber: 1, status: 3, status4k: 5 }], + seasons: [], requests: [ { id: 100, @@ -557,7 +579,7 @@ describe('TVDB Integration', () => { }, ], }; - }); + }, 'monsterTvShow'); cy.intercept('POST', '/api/v1/request', (req) => { expect(req.body.seasons).to.deep.equal([1]); expect(req.body.episodeSelection).to.equal(undefined); @@ -568,6 +590,7 @@ describe('TVDB Integration', () => { }).as('seasonRequest'); cy.visit(ROUTES.monsterTvShow); + cy.wait('@monsterTvShow'); cy.contains('button', 'Request More').click(); cy.get('[data-testid="season-request-toggle-1"]') .should('have.attr', 'aria-checked', 'false') @@ -579,19 +602,6 @@ describe('TVDB Integration', () => { }); it('shows season progress and toggles an episode watched on Trakt', () => { - cy.intercept('GET', '/api/v1/settings/public', (req) => { - delete req.headers['if-none-match']; - req.continue((res) => { - const body = - typeof res.body === 'string' ? JSON.parse(res.body) : res.body; - res.send({ - ...body, - episodeRequestsEnabled: true, - traktConfigured: true, - mediaActionsTraktEnabled: true, - }); - }); - }).as('publicSettings'); cy.intercept( 'GET', '/api/v1/media-actions/tv/225634/seasons/1/episodes/status', @@ -608,9 +618,6 @@ describe('TVDB Integration', () => { cy.visit(ROUTES.monsterTvShow); cy.wait('@mediaActionCapabilities'); - cy.wait('@publicSettings') - .its('response.body.traktConfigured') - .should('equal', true); cy.wait('@episodeWatchStatus'); cy.get('[data-testid="season-disclosure-1"]').should('contain', '0/'); cy.get('[data-testid="season-disclosure-1"]').scrollIntoView().click(); From 4719108e1645696ba0e3d7ee6a8c53b7a9630892 Mon Sep 17 00:00:00 2001 From: Selman Trabzon Date: Thu, 13 Aug 2026 16:59:15 +0300 Subject: [PATCH 5/6] fix(test): stub discover and Trakt watch responses in TVDB Cypress Live discover bodies can be empty, and the watch POST stub did not match MediaActionWriteResponse so the UI rolled the toggle back. Co-authored-by: Cursor --- cypress/e2e/providers/tvdb.cy.ts | 60 ++++++++++++++++++++++---------- 1 file changed, 41 insertions(+), 19 deletions(-) diff --git a/cypress/e2e/providers/tvdb.cy.ts b/cypress/e2e/providers/tvdb.cy.ts index 7cb198b49f..dc1da3b49b 100644 --- a/cypress/e2e/providers/tvdb.cy.ts +++ b/cypress/e2e/providers/tvdb.cy.ts @@ -353,23 +353,27 @@ describe('TVDB Integration', () => { }); it('offers episode requests from discover cards', () => { - cy.intercept('GET', '/api/v1/discover/tv*', (req) => { - req.continue((res) => { - const body = - typeof res.body === 'string' ? JSON.parse(res.body) : res.body; - if (!body?.results?.length) { - return; - } - - body.results = [ - { - ...body.results[0], - mediaInfo: undefined, - }, - ...body.results.slice(1), - ]; - res.send(body); - }); + cy.intercept('GET', '/api/v1/discover/tv*', { + page: 1, + totalPages: 1, + totalResults: 1, + results: [ + { + id: 225634, + mediaType: 'tv', + name: 'Monster', + originalName: 'Monster', + overview: 'Unrequested series for episode-request UI.', + posterPath: '/monster.jpg', + firstAirDate: '2024-01-01', + voteAverage: 8, + voteCount: 10, + popularity: 100, + genreIds: [], + originalLanguage: 'en', + originCountry: ['US'], + }, + ], }).as('getPopularTv'); cy.visit(ROUTES.home); cy.wait('@getPopularTv'); @@ -602,15 +606,33 @@ describe('TVDB Integration', () => { }); it('shows season progress and toggles an episode watched on Trakt', () => { + let watchedEpisodeNumbers: number[] = []; cy.intercept( 'GET', '/api/v1/media-actions/tv/225634/seasons/1/episodes/status', - { available: true, watchedEpisodeNumbers: [] } + (req) => { + req.reply({ available: true, watchedEpisodeNumbers }); + } ).as('episodeWatchStatus'); cy.intercept( 'POST', '/api/v1/media-actions/tv/225634/seasons/1/episodes/*/watched', - { provider: 'trakt', ok: true, watched: true } + (req) => { + watchedEpisodeNumbers = [1]; + req.reply({ + outcome: 'success', + watched: true, + providers: [ + { + provider: 'trakt', + ok: true, + watched: true, + rating: null, + ratingStars: null, + }, + ], + }); + } ).as('markEpisodeWatched'); cy.intercept('GET', '/api/v1/tv/225634/season/1', episodeSeason).as( 'season1' From 23293a12320e8404416f55dda41edae313f9885e Mon Sep 17 00:00:00 2001 From: Selman Trabzon Date: Thu, 13 Aug 2026 17:26:20 +0300 Subject: [PATCH 6/6] fix(test): make TVDB Cypress specs pass without hover or live discover Stub an unrequested series with no poster so the request overlay is always visible, open metadata settings by URL, and log in via cy.request. Co-authored-by: Cursor --- cypress/e2e/providers/tvdb.cy.ts | 77 +++++++++++++------------------- cypress/support/commands.ts | 17 +++---- 2 files changed, 37 insertions(+), 57 deletions(-) diff --git a/cypress/e2e/providers/tvdb.cy.ts b/cypress/e2e/providers/tvdb.cy.ts index dc1da3b49b..f3f1f22bb2 100644 --- a/cypress/e2e/providers/tvdb.cy.ts +++ b/cypress/e2e/providers/tvdb.cy.ts @@ -51,13 +51,9 @@ describe('TVDB Integration', () => { }; // Reusable commands - const navigateToMetadataSettings = () => { - cy.visit(ROUTES.home); - cy.get(SELECTORS.sidebarToggle).click(); - cy.get(SELECTORS.sidebarSettingsMobile).click(); - cy.get( - `${SELECTORS.settingsNavDesktop} a[href="${ROUTES.metadataSettings}"]` - ).click(); + const openMetadataSettings = () => { + cy.visit(ROUTES.metadataSettings); + cy.contains('h3', 'Metadata Providers').should('be.visible'); }; const testAndVerifyMetadataConnection = () => { @@ -102,22 +98,6 @@ describe('TVDB Integration', () => { }).as('mediaActionCapabilities'); }; - const interceptEpisodeRequestsSettings = () => { - cy.intercept('GET', '/api/v1/settings/public', (req) => { - delete req.headers['if-none-match']; - req.continue((res) => { - const body = - typeof res.body === 'string' ? JSON.parse(res.body) : res.body; - res.send({ - ...body, - episodeRequestsEnabled: true, - traktConfigured: true, - mediaActionsTraktEnabled: true, - }); - }); - }); - }; - const patchMonsterTv = ( patch: (body: Record) => void, alias = 'monsterTv' @@ -134,13 +114,8 @@ describe('TVDB Integration', () => { // Perform login cy.login(Cypress.env('ADMIN_EMAIL'), Cypress.env('ADMIN_PASSWORD')); interceptMediaActionCapabilities(); - interceptEpisodeRequestsSettings(); - - // Navigate to Metadata settings - navigateToMetadataSettings(); - // Verify we're on the correct settings page - cy.contains('h3', 'Metadata Providers').should('be.visible'); + openMetadataSettings(); // Configure TVDB as TV provider and test connection cy.get(SELECTORS.tvMetadataProviderSelector).click(); @@ -364,7 +339,6 @@ describe('TVDB Integration', () => { name: 'Monster', originalName: 'Monster', overview: 'Unrequested series for episode-request UI.', - posterPath: '/monster.jpg', firstAirDate: '2024-01-01', voteAverage: 8, voteCount: 10, @@ -382,22 +356,16 @@ describe('TVDB Integration', () => { .next('[data-testid="media-slider"]') .find('[data-testid="title-card"]') .first() - .trigger('mouseover') - .then(($card) => { - const menuButton = $card.find( - 'button[aria-label="More request options"]' - ); - if (menuButton.length) { - cy.wrap(menuButton).click(); - cy.get('[data-testid="title-card-request-episodes"]').should( - 'be.visible' - ); - } else { - cy.wrap($card) - .find('[data-testid="title-card-request-episodes"]') - .should('be.visible'); - } - }); + .as('discoverCard'); + + cy.get('@discoverCard') + .find('[data-testid="title-card-title"]') + .should('contain', 'Monster'); + cy.get('@discoverCard') + .find('button[aria-label="More request options"]') + .should('be.visible') + .click(); + cy.get('[data-testid="title-card-request-episodes"]').should('be.visible'); }); it('quick-requests one episode from the detail episode list', () => { @@ -606,6 +574,23 @@ describe('TVDB Integration', () => { }); it('shows season progress and toggles an episode watched on Trakt', () => { + cy.intercept('GET', '/api/v1/settings/public', (req) => { + delete req.headers['if-none-match']; + req.continue((res) => { + const raw = res.body; + const body = + typeof raw === 'string' && raw + ? JSON.parse(raw) + : raw && typeof raw === 'object' + ? raw + : {}; + res.send({ + ...body, + traktConfigured: true, + mediaActionsTraktEnabled: true, + }); + }); + }); let watchedEpisodeNumbers: number[] = []; cy.intercept( 'GET', diff --git a/cypress/support/commands.ts b/cypress/support/commands.ts index a23cb5e688..7418c658c7 100644 --- a/cypress/support/commands.ts +++ b/cypress/support/commands.ts @@ -5,17 +5,12 @@ Cypress.Commands.add('login', (email, password) => { cy.session( [email, password], () => { - cy.visit('/login'); - - cy.get('[data-testid=email]').type(email); - cy.get('[data-testid=password]').type(password); - - cy.intercept('/api/v1/auth/local').as('localLogin'); - cy.get('[data-testid=local-signin-button]').click(); - - cy.wait('@localLogin'); - - cy.url().should('contain', '/'); + cy.request('POST', '/api/v1/auth/local', { email, password }) + .its('status') + .should('eq', 200); + cy.getCookie('connect.sid').should('exist'); + cy.visit('/'); + cy.location('pathname').should('not.eq', '/login'); }, { validate() {