diff --git a/.github/workflows/backend-tests.yml b/.github/no_workflow/backend-tests.yml similarity index 97% rename from .github/workflows/backend-tests.yml rename to .github/no_workflow/backend-tests.yml index 3c6e63bb4..a1d8be074 100644 --- a/.github/workflows/backend-tests.yml +++ b/.github/no_workflow/backend-tests.yml @@ -36,7 +36,7 @@ jobs: - uses: pnpm/action-setup@v4 name: Install pnpm with: - version: 9.0.4 + version: 10 run_install: false - name: Get pnpm store directory shell: bash @@ -53,7 +53,7 @@ jobs: run: pnpm config set auto-install-peers false - name: Install libreoffice - uses: awalsh128/cache-apt-pkgs-action@v1.5.0 + uses: awalsh128/cache-apt-pkgs-action@v1.5.1 with: packages: libreoffice libreoffice-pdfimport version: 1.0 @@ -96,7 +96,7 @@ jobs: - uses: pnpm/action-setup@v4 name: Install pnpm with: - version: 9.0.4 + version: 10 run_install: false - name: Get pnpm store directory shell: bash @@ -113,7 +113,7 @@ jobs: run: pnpm config set auto-install-peers false - name: Install libreoffice - uses: awalsh128/cache-apt-pkgs-action@v1.5.0 + uses: awalsh128/cache-apt-pkgs-action@v1.5.1 with: packages: libreoffice libreoffice-pdfimport version: 1.0 @@ -168,7 +168,7 @@ jobs: - uses: pnpm/action-setup@v4 name: Install pnpm with: - version: 9.0.4 + version: 10 run_install: false - name: Get pnpm store directory shell: bash @@ -225,7 +225,7 @@ jobs: - uses: pnpm/action-setup@v4 name: Install pnpm with: - version: 9.0.4 + version: 10 run_install: false - name: Get pnpm store directory shell: bash diff --git a/.github/workflows/build-and-deploy-docs.yml b/.github/no_workflow/build-and-deploy-docs.yml similarity index 98% rename from .github/workflows/build-and-deploy-docs.yml rename to .github/no_workflow/build-and-deploy-docs.yml index 3134de22a..eab0eec43 100644 --- a/.github/workflows/build-and-deploy-docs.yml +++ b/.github/no_workflow/build-and-deploy-docs.yml @@ -38,7 +38,7 @@ jobs: - uses: pnpm/action-setup@v4 name: Install pnpm with: - version: 9.0.4 + version: 10 run_install: false - name: Get pnpm store directory shell: bash diff --git a/.github/workflows/codeql-analysis.yml b/.github/no_workflow/codeql-analysis.yml similarity index 100% rename from .github/workflows/codeql-analysis.yml rename to .github/no_workflow/codeql-analysis.yml diff --git a/.github/workflows/dependency-review.yml b/.github/no_workflow/dependency-review.yml similarity index 100% rename from .github/workflows/dependency-review.yml rename to .github/no_workflow/dependency-review.yml diff --git a/.github/workflows/docker.yml b/.github/no_workflow/docker.yml similarity index 99% rename from .github/workflows/docker.yml rename to .github/no_workflow/docker.yml index 313d48fc6..81be50e4f 100644 --- a/.github/workflows/docker.yml +++ b/.github/no_workflow/docker.yml @@ -50,7 +50,7 @@ jobs: - uses: pnpm/action-setup@v4 name: Install pnpm with: - version: 9.0.4 + version: 10 run_install: false - name: Get pnpm store directory shell: bash diff --git a/.github/workflows/frontend-admin-tests.yml b/.github/no_workflow/frontend-admin-tests.yml similarity index 99% rename from .github/workflows/frontend-admin-tests.yml rename to .github/no_workflow/frontend-admin-tests.yml index 4963fac24..94f790efa 100644 --- a/.github/workflows/frontend-admin-tests.yml +++ b/.github/no_workflow/frontend-admin-tests.yml @@ -36,7 +36,7 @@ jobs: - uses: pnpm/action-setup@v4 name: Install pnpm with: - version: 9.0.4 + version: 10 run_install: false - name: Get pnpm store directory shell: bash diff --git a/.github/workflows/frontend-tests.yml b/.github/no_workflow/frontend-tests.yml similarity index 99% rename from .github/workflows/frontend-tests.yml rename to .github/no_workflow/frontend-tests.yml index c11058b24..d6238ed1f 100644 --- a/.github/workflows/frontend-tests.yml +++ b/.github/no_workflow/frontend-tests.yml @@ -30,7 +30,7 @@ jobs: - uses: pnpm/action-setup@v4 name: Install pnpm with: - version: 9.0.4 + version: 10 run_install: false - name: Get pnpm store directory shell: bash @@ -103,7 +103,7 @@ jobs: - uses: pnpm/action-setup@v4 name: Install pnpm with: - version: 9.0.4 + version: 10 run_install: false - name: Get pnpm store directory shell: bash @@ -184,7 +184,7 @@ jobs: - uses: pnpm/action-setup@v4 name: Install pnpm with: - version: 9.0.4 + version: 10 run_install: false - name: Get pnpm store directory shell: bash diff --git a/.github/workflows/load-test.yml b/.github/no_workflow/load-test.yml similarity index 98% rename from .github/workflows/load-test.yml rename to .github/no_workflow/load-test.yml index 50847cd9a..16a783b18 100644 --- a/.github/workflows/load-test.yml +++ b/.github/no_workflow/load-test.yml @@ -32,7 +32,7 @@ jobs: - uses: pnpm/action-setup@v4 name: Install pnpm with: - version: 9.0.4 + version: 10 run_install: false - name: Get pnpm store directory shell: bash @@ -76,7 +76,7 @@ jobs: - uses: pnpm/action-setup@v4 name: Install pnpm with: - version: 9.0.4 + version: 10 run_install: false - name: Get pnpm store directory shell: bash @@ -147,7 +147,7 @@ jobs: - uses: pnpm/action-setup@v4 name: Install pnpm with: - version: 9.0.4 + version: 10 run_install: false - name: Get pnpm store directory shell: bash diff --git a/.github/workflows/perform-type-check.yml b/.github/no_workflow/perform-type-check.yml similarity index 98% rename from .github/workflows/perform-type-check.yml rename to .github/no_workflow/perform-type-check.yml index ba35dec32..fb5f6d3c8 100644 --- a/.github/workflows/perform-type-check.yml +++ b/.github/no_workflow/perform-type-check.yml @@ -29,7 +29,7 @@ jobs: - uses: pnpm/action-setup@v4 name: Install pnpm with: - version: 9.0.4 + version: 10 run_install: false - name: Get pnpm store directory shell: bash diff --git a/.github/workflows/rate-limit.yml b/.github/no_workflow/rate-limit.yml similarity index 98% rename from .github/workflows/rate-limit.yml rename to .github/no_workflow/rate-limit.yml index 003a10000..3b3417864 100644 --- a/.github/workflows/rate-limit.yml +++ b/.github/no_workflow/rate-limit.yml @@ -32,7 +32,7 @@ jobs: - uses: pnpm/action-setup@v4 name: Install pnpm with: - version: 9.0.4 + version: 10 run_install: false - name: Get pnpm store directory shell: bash diff --git a/.github/workflows/upgrade-from-latest-release.yml b/.github/no_workflow/upgrade-from-latest-release.yml similarity index 96% rename from .github/workflows/upgrade-from-latest-release.yml rename to .github/no_workflow/upgrade-from-latest-release.yml index 08421e7ec..66df392ef 100644 --- a/.github/workflows/upgrade-from-latest-release.yml +++ b/.github/no_workflow/upgrade-from-latest-release.yml @@ -38,12 +38,12 @@ jobs: - uses: pnpm/action-setup@v4 name: Install pnpm with: - version: 9.0.4 + version: 10 run_install: false - name: Only install direct dependencies run: pnpm config set auto-install-peers false - name: Install libreoffice - uses: awalsh128/cache-apt-pkgs-action@v1.5.0 + uses: awalsh128/cache-apt-pkgs-action@v1.5.1 with: packages: libreoffice libreoffice-pdfimport version: 1.0 @@ -62,7 +62,7 @@ jobs: run: pnpm config set auto-install-peers false - name: Install libreoffice - uses: awalsh128/cache-apt-pkgs-action@v1.5.0 + uses: awalsh128/cache-apt-pkgs-action@v1.5.1 with: packages: libreoffice libreoffice-pdfimport version: 1.0 diff --git a/.github/workflows/windows.yml b/.github/no_workflow/windows.yml similarity index 99% rename from .github/workflows/windows.yml rename to .github/no_workflow/windows.yml index c0ce8b8bd..3b56b8452 100644 --- a/.github/workflows/windows.yml +++ b/.github/no_workflow/windows.yml @@ -39,7 +39,7 @@ jobs: - uses: pnpm/action-setup@v4 name: Install pnpm with: - version: 9.0.4 + version: 10 run_install: false - name: Get pnpm store directory shell: bash diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 000000000..9ec1cbdae --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,83 @@ +name: Release etherpad +on: + workflow_dispatch: + inputs: + release_type: + description: 'Choose the type of release to create' + required: true + default: 'patch' + type: choice + options: + - patch + - minor + - major + +jobs: + releases: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + repository: ether/etherpad-lite + path: etherpad + token: '${{ secrets.ETHER_RELEASE_TOKEN }}' + fetch-depth: '0' + fetch-tags: 'true' + - name: Checkout master + working-directory: etherpad + run: | + git fetch origin master + git checkout master + git reset --hard origin/master + - name: Checkout develop + working-directory: etherpad + run: | + git fetch origin develop + git checkout develop + git reset --hard origin/develop + - name: Checkout repository + uses: actions/checkout@v4 + with: + repository: ether/ether.github.com + path: ether.github.com + token: '${{ secrets.ETHER_RELEASE_TOKEN }}' + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + - uses: pnpm/action-setup@v4 + name: Install pnpm + with: + version: 10 + run_install: false + - name: Get pnpm store directory + shell: bash + run: | + echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV + - name: Install dependencies etherpad + run: pnpm install --frozen-lockfile + working-directory: etherpad + - name: Install dependencies ether.github.com + run: pnpm install --frozen-lockfile + working-directory: ether.github.com + - name: Set git user + run: | + git config --global user.name "Etherpad Release Bot" + git config --global user.email "noreply@etherpad.org" + - uses: ruby/setup-ruby@v1 + with: + ruby-version: 2.7 + + - uses: reitzig/actions-asciidoctor@v2.0.2 + with: + version: 2.0.18 + - name: Prepare release + working-directory: etherpad + run: | + cd bin + pnpm run release ${{ inputs.release_type }} + - name: Push after release + working-directory: etherpad + run: | + ./bin/push-after-release.sh diff --git a/CHANGELOG.md b/CHANGELOG.md index ffd618492..43f55526f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ +# 2.4.0 + +### Notable enhancements and fixes +- Added home button to the pad panel. To show it in your current instance, please copy the updated "toolbar" settings from the `settings.json.template` file to your `settings.json` file. +- Added more current design for the default collibri theme. +- Added handling of recent visited pads in the collibri theme. You can now access the most recent three pads you visited in the pad panel. +- Disable stats endpoints if enableMetrics is set to false. This allows you to disable the metrics endpoints if you don't want to use them. +- Use Node LTS instead of always latest Node version. + + # 2.3.2 ### Notable enhancements and fixes diff --git a/Dockerfile b/Dockerfile index eccecab90..9e4a0dfb7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,7 +5,7 @@ # Author: muxator ARG BUILD_ENV=git -FROM node:alpine AS adminbuild +FROM node:lts-alpine AS adminbuild RUN npm install -g pnpm@latest WORKDIR /opt/etherpad-lite COPY . . @@ -13,7 +13,7 @@ RUN pnpm install RUN pnpm run build:ui -FROM node:alpine AS build +FROM node:lts-alpine AS build LABEL maintainer="Etherpad team, https://github.com/ether/etherpad-lite" # Set these arguments when building the image from behind a proxy diff --git a/admin/package.json b/admin/package.json index d7c21392c..276b17323 100644 --- a/admin/package.json +++ b/admin/package.json @@ -1,7 +1,7 @@ { "name": "admin", "private": true, - "version": "2.3.2", + "version": "2.4.0", "type": "module", "scripts": { "dev": "vite", @@ -18,25 +18,25 @@ "@radix-ui/react-toast": "^1.2.14", "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", - "@typescript-eslint/eslint-plugin": "^8.34.0", - "@typescript-eslint/parser": "^8.34.0", + "@typescript-eslint/eslint-plugin": "^8.37.0", + "@typescript-eslint/parser": "^8.37.0", "@vitejs/plugin-react-swc": "^3.10.2", - "eslint": "^9.28.0", + "eslint": "^9.31.0", "eslint-plugin-react-hooks": "^5.2.0", "eslint-plugin-react-refresh": "^0.4.20", - "i18next": "^25.2.1", + "i18next": "^25.3.2", "i18next-browser-languagedetector": "^8.2.0", - "lucide-react": "^0.515.0", + "lucide-react": "^0.525.0", "react": "^19.1.0", "react-dom": "^19.1.0", - "react-hook-form": "^7.57.0", - "react-i18next": "^15.5.3", - "react-router-dom": "^7.6.2", + "react-hook-form": "^7.60.0", + "react-i18next": "^15.6.0", + "react-router-dom": "^7.6.3", "socket.io-client": "^4.8.1", "typescript": "^5.8.2", - "vite": "^6.3.5", - "vite-plugin-static-copy": "^3.0.0", + "vite": "^7.0.4", + "vite-plugin-static-copy": "^3.1.1", "vite-plugin-svgr": "^4.3.0", - "zustand": "^5.0.5" + "zustand": "^5.0.6" } } diff --git a/admin/src/pages/ShoutPage.tsx b/admin/src/pages/ShoutPage.tsx index 8348e18fa..d598d54d7 100644 --- a/admin/src/pages/ShoutPage.tsx +++ b/admin/src/pages/ShoutPage.tsx @@ -9,22 +9,29 @@ export const ShoutPage = ()=>{ const [message, setMessage] = useState(""); const [sticky, setSticky] = useState(false); const socket = useStore(state => state.settingsSocket); + const pluginSocket = useStore(state => state.pluginsSocket); const [shouts, setShouts] = useState([]); - useEffect(() => { - fetch('/stats') - .then(response => response.json()) - .then(data => setTotalUsers(data.totalUsers)); - }, []); - useEffect(() => { - if(socket) { + if(socket && pluginSocket) { + console.log('Socket connected', socket.id); socket.on('shout', (shout) => { setShouts([...shouts, shout]) }) + pluginSocket.on('results:stats', (statData) => { + console.log('Shoutdata', statData); + setTotalUsers(statData.totalUsers); + }) } - }, [socket, shouts]) + }, [socket, shouts, pluginSocket]) + + + useEffect(() => { + if (pluginSocket) { + pluginSocket.emit('getStats', {}); + } + }, [pluginSocket]); const sendMessage = () => { socket?.emit('shout', { diff --git a/admin/vite.config.ts b/admin/vite.config.ts index 23921ca85..7b63c9e20 100644 --- a/admin/vite.config.ts +++ b/admin/vite.config.ts @@ -28,10 +28,6 @@ export default defineConfig({ '/admin-auth/': { target: 'http://localhost:9001', changeOrigin: true, - }, - '/stats': { - target: 'http://localhost:9001', - changeOrigin: true, } } } diff --git a/bin/package.json b/bin/package.json index 01464c2a4..f684e84e0 100644 --- a/bin/package.json +++ b/bin/package.json @@ -1,13 +1,13 @@ { "name": "bin", - "version": "2.3.2", + "version": "2.4.0", "description": "", "main": "checkAllPads.js", "directories": { "doc": "doc" }, "dependencies": { - "axios": "^1.8.4", + "axios": "^1.10.0", "ep_etherpad-lite": "workspace:../src", "log4js": "^6.9.1", "semver": "^7.7.2", @@ -15,7 +15,7 @@ "ueberdb2": "^5.0.14" }, "devDependencies": { - "@types/node": "^24.0.1", + "@types/node": "^24.0.14", "@types/semver": "^7.7.0", "typescript": "^5.8.2" }, diff --git a/bin/plugins/lib/backend-tests.yml b/bin/plugins/lib/backend-tests.yml index 79ffc6f88..e38c2e902 100644 --- a/bin/plugins/lib/backend-tests.yml +++ b/bin/plugins/lib/backend-tests.yml @@ -29,7 +29,7 @@ jobs: - uses: pnpm/action-setup@v3 name: Install pnpm with: - version: 8 + version: 10 run_install: false - name: Get pnpm store directory shell: bash diff --git a/bin/plugins/lib/frontend-tests.yml b/bin/plugins/lib/frontend-tests.yml index 053ce180d..ca9ca965c 100644 --- a/bin/plugins/lib/frontend-tests.yml +++ b/bin/plugins/lib/frontend-tests.yml @@ -18,7 +18,7 @@ jobs: - uses: pnpm/action-setup@v3 name: Install pnpm with: - version: 8 + version: 10 run_install: false - name: Get pnpm store directory shell: bash diff --git a/bin/plugins/lib/npmpublish.yml b/bin/plugins/lib/npmpublish.yml index 6c2712cc4..efa341c2c 100644 --- a/bin/plugins/lib/npmpublish.yml +++ b/bin/plugins/lib/npmpublish.yml @@ -21,7 +21,7 @@ jobs: - uses: pnpm/action-setup@v3 name: Install pnpm with: - version: 8 + version: 10 run_install: false - name: Get pnpm store directory shell: bash diff --git a/bin/release.ts b/bin/release.ts index 5c2b1b4e9..5de3a826d 100644 --- a/bin/release.ts +++ b/bin/release.ts @@ -56,6 +56,8 @@ const readJson = (filename: string) => JSON.parse(fs.readFileSync(filename, {enc const assertWorkDirClean = (opts:{ cwd?: string; } = {}) => { + // Stash any changes in the working directory so that we can check for modifications. + runc('git stash') opts.cwd = runc('git rev-parse --show-cdup', opts) || cwd; const m = runc('git diff-files --name-status', opts); console.log(">"+m.trim()+"<") @@ -172,8 +174,8 @@ try { console.log('Merging develop into master...'); run('git merge --no-ff --no-edit develop'); console.log(`Creating ${newVersion} tag...`); - run(`git tag -s '${newVersion}' -m '${newVersion}'`); - run(`git tag -s 'v${newVersion}' -m 'v${newVersion}'`); + run(`git tag -a '${newVersion}' -m '${newVersion}'`); + run(`git tag -a 'v${newVersion}' -m 'v${newVersion}'`); console.log('Switching back to develop...'); run('git checkout develop'); console.log('Merging master into develop...'); diff --git a/doc/package.json b/doc/package.json index adc5a6ca3..50bb14a74 100644 --- a/doc/package.json +++ b/doc/package.json @@ -1,10 +1,13 @@ { "devDependencies": { - "vitepress": "^1.6.3" + "vitepress": "^2.0.0-alpha.9" }, "scripts": { "docs:dev": "vitepress dev", "docs:build": "vitepress build", "docs:preview": "vitepress preview" + }, + "peerDependencies": { + "search-insights": "^2.17.3" } } diff --git a/doc/skins.md b/doc/skins.md index 90a786f84..954179f78 100644 --- a/doc/skins.md +++ b/doc/skins.md @@ -15,5 +15,5 @@ You can choose a skin changing the parameter `skinName` in `settings.json`. Since Etherpad **1.7.5**, two skins are included: -* `no-skin`: an empty skin, leaving the default Etherpad appearance unchanged, that you can use as a guidance to develop your own. +* `no-skin`: an empty skin, leaving the default Etherpad appearance unchanged, that you can use as guidance to develop your own. * `colibris`: a new, experimental skin, that will become the default in Etherpad 2.0. diff --git a/package.json b/package.json index 57aa9f73a..9760a751e 100644 --- a/package.json +++ b/package.json @@ -50,6 +50,6 @@ "type": "git", "url": "https://github.com/ether/etherpad-lite.git" }, - "version": "2.3.2", + "version": "2.4.0", "license": "Apache-2.0" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 989549452..798131ad8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -41,32 +41,32 @@ importers: specifier: ^19.1.6 version: 19.1.6(@types/react@19.1.8) '@typescript-eslint/eslint-plugin': - specifier: ^8.34.0 - version: 8.34.0(@typescript-eslint/parser@8.34.0(eslint@9.28.0)(typescript@5.8.3))(eslint@9.28.0)(typescript@5.8.3) + specifier: ^8.37.0 + version: 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.8.3))(eslint@9.32.0)(typescript@5.8.3) '@typescript-eslint/parser': - specifier: ^8.34.0 - version: 8.34.0(eslint@9.28.0)(typescript@5.8.3) + specifier: ^8.37.0 + version: 8.38.0(eslint@9.32.0)(typescript@5.8.3) '@vitejs/plugin-react-swc': specifier: ^3.10.2 - version: 3.10.2(vite@6.3.5(@types/node@24.0.1)(tsx@4.20.3)) + version: 3.10.2(vite@7.0.6(@types/node@24.1.0)(tsx@4.20.3)) eslint: - specifier: ^9.28.0 - version: 9.28.0 + specifier: ^9.31.0 + version: 9.32.0 eslint-plugin-react-hooks: specifier: ^5.2.0 - version: 5.2.0(eslint@9.28.0) + version: 5.2.0(eslint@9.32.0) eslint-plugin-react-refresh: specifier: ^0.4.20 - version: 0.4.20(eslint@9.28.0) + version: 0.4.20(eslint@9.32.0) i18next: - specifier: ^25.2.1 - version: 25.2.1(typescript@5.8.3) + specifier: ^25.3.2 + version: 25.3.2(typescript@5.8.3) i18next-browser-languagedetector: specifier: ^8.2.0 version: 8.2.0 lucide-react: - specifier: ^0.515.0 - version: 0.515.0(react@19.1.0) + specifier: ^0.525.0 + version: 0.525.0(react@19.1.0) react: specifier: ^19.1.0 version: 19.1.0 @@ -74,14 +74,14 @@ importers: specifier: ^19.1.0 version: 19.1.0(react@19.1.0) react-hook-form: - specifier: ^7.57.0 - version: 7.57.0(react@19.1.0) + specifier: ^7.60.0 + version: 7.61.1(react@19.1.0) react-i18next: - specifier: ^15.5.3 - version: 15.5.3(i18next@25.2.1(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + specifier: ^15.6.0 + version: 15.6.1(i18next@25.3.2(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) react-router-dom: - specifier: ^7.6.2 - version: 7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^7.6.3 + version: 7.7.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) socket.io-client: specifier: ^4.8.1 version: 4.8.1 @@ -89,23 +89,23 @@ importers: specifier: ^5.8.2 version: 5.8.3 vite: - specifier: ^6.3.5 - version: 6.3.5(@types/node@24.0.1)(tsx@4.20.3) + specifier: ^7.0.4 + version: 7.0.6(@types/node@24.1.0)(tsx@4.20.3) vite-plugin-static-copy: - specifier: ^3.0.0 - version: 3.0.0(vite@6.3.5(@types/node@24.0.1)(tsx@4.20.3)) + specifier: ^3.1.1 + version: 3.1.1(vite@7.0.6(@types/node@24.1.0)(tsx@4.20.3)) vite-plugin-svgr: specifier: ^4.3.0 - version: 4.3.0(rollup@4.40.1)(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.1)(tsx@4.20.3)) + version: 4.3.0(rollup@4.40.1)(typescript@5.8.3)(vite@7.0.6(@types/node@24.1.0)(tsx@4.20.3)) zustand: - specifier: ^5.0.5 - version: 5.0.5(@types/react@19.1.8)(react@19.1.0) + specifier: ^5.0.6 + version: 5.0.6(@types/react@19.1.8)(react@19.1.0) bin: dependencies: axios: - specifier: ^1.8.4 - version: 1.8.4 + specifier: ^1.10.0 + version: 1.10.0 ep_etherpad-lite: specifier: workspace:../src version: link:../src @@ -123,8 +123,8 @@ importers: version: 5.0.14 devDependencies: '@types/node': - specifier: ^24.0.1 - version: 24.0.1 + specifier: ^24.0.14 + version: 24.1.0 '@types/semver': specifier: ^7.7.0 version: 7.7.0 @@ -135,20 +135,17 @@ importers: doc: devDependencies: vitepress: - specifier: ^1.6.3 - version: 1.6.3(@algolia/client-search@5.23.2)(@types/node@24.0.1)(axios@1.8.4)(jwt-decode@4.0.0)(postcss@8.5.3)(typescript@5.8.3) + specifier: ^2.0.0-alpha.9 + version: 2.0.0-alpha.9(@types/node@24.1.0)(axios@1.10.0)(jwt-decode@4.0.0)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.3) src: dependencies: - '@etherpad/express-session': - specifier: ^1.18.4 - version: 1.18.4 async: specifier: ^3.2.6 version: 3.2.6 axios: - specifier: ^1.8.4 - version: 1.8.4 + specifier: ^1.10.0 + version: 1.10.0 cookie-parser: specifier: ^1.4.7 version: 1.4.7 @@ -162,14 +159,17 @@ importers: specifier: ^3.1.10 version: 3.1.10 esbuild: - specifier: ^0.25.5 - version: 0.25.5 + specifier: ^0.25.8 + version: 0.25.8 express: specifier: 4.21.2 version: 4.21.2 express-rate-limit: - specifier: ^7.5.0 - version: 7.5.0(express@4.21.2) + specifier: ^8.0.0 + version: 8.0.1(express@4.21.2) + express-session: + specifier: ^1.18.2 + version: 1.18.2 fast-deep-equal: specifier: ^3.1.3 version: 3.1.3 @@ -189,8 +189,8 @@ importers: specifier: ^3.0.5 version: 3.0.5 jsdom: - specifier: ^26.0.0 - version: 26.0.0 + specifier: ^26.1.0 + version: 26.1.0 jsonminify: specifier: 0.4.2 version: 0.4.2 @@ -222,11 +222,11 @@ importers: specifier: ^3.0.1 version: 3.0.1 oidc-provider: - specifier: ^9.1.3 - version: 9.1.3 + specifier: ^9.3.0 + version: 9.3.0 openapi-backend: - specifier: ^5.12.0 - version: 5.12.0 + specifier: ^5.13.0 + version: 5.13.0 proxy-addr: specifier: ^2.0.7 version: 2.0.7 @@ -258,8 +258,8 @@ importers: specifier: ^4.8.1 version: 4.8.1 superagent: - specifier: 10.2.1 - version: 10.2.1 + specifier: 10.2.2 + version: 10.2.2 swagger-ui-express: specifier: ^5.0.1 version: 5.0.1(express@4.21.2) @@ -283,14 +283,20 @@ importers: version: 0.10.0 devDependencies: '@playwright/test': - specifier: ^1.53.0 - version: 1.53.0 + specifier: ^1.54.1 + version: 1.54.1 '@types/async': specifier: ^3.2.24 version: 3.2.24 + '@types/cookie-parser': + specifier: ^1.4.9 + version: 1.4.9(@types/express@4.17.21) '@types/express': specifier: ^4.17.21 version: 4.17.21 + '@types/express-session': + specifier: ^1.18.2 + version: 1.18.2 '@types/formidable': specifier: ^3.4.5 version: 3.4.5 @@ -307,8 +313,8 @@ importers: specifier: ^21.1.7 version: 21.1.7 '@types/jsonwebtoken': - specifier: ^9.0.9 - version: 9.0.9 + specifier: ^9.0.10 + version: 9.0.10 '@types/mime-types': specifier: ^3.0.1 version: 3.0.1 @@ -316,11 +322,11 @@ importers: specifier: ^10.0.9 version: 10.0.10 '@types/node': - specifier: ^24.0.1 - version: 24.0.1 + specifier: ^24.0.14 + version: 24.1.0 '@types/oidc-provider': - specifier: ^9.1.0 - version: 9.1.0 + specifier: ^9.1.1 + version: 9.1.1 '@types/semver': specifier: ^7.7.0 version: 7.7.0 @@ -343,17 +349,17 @@ importers: specifier: ^4.0.3 version: 4.0.3 eslint: - specifier: ^9.28.0 - version: 9.28.0 + specifier: ^9.31.0 + version: 9.32.0 eslint-config-etherpad: specifier: ^4.0.4 - version: 4.0.4(eslint@9.28.0)(typescript@5.8.3) + version: 4.0.4(eslint@9.32.0)(typescript@5.8.3) etherpad-cli-client: - specifier: ^3.0.2 - version: 3.0.2 + specifier: ^3.0.4 + version: 3.0.4 mocha: - specifier: ^11.6.0 - version: 11.6.0 + specifier: ^11.7.1 + version: 11.7.1 mocha-froth: specifier: ^0.2.10 version: 0.2.10 @@ -373,14 +379,14 @@ importers: specifier: ^1.0.11 version: 1.0.11 supertest: - specifier: ^7.1.1 - version: 7.1.1 + specifier: ^7.1.3 + version: 7.1.4 typescript: specifier: ^5.8.2 version: 5.8.3 vitest: - specifier: ^3.2.3 - version: 3.2.3(@types/debug@4.1.12)(@types/node@24.0.1)(jsdom@26.0.0)(tsx@4.20.3) + specifier: ^3.2.4 + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.1.0)(jsdom@26.1.0)(tsx@4.20.3) ui: devDependencies: @@ -391,83 +397,11 @@ importers: specifier: ^5.8.2 version: 5.8.3 vite: - specifier: ^6.3.5 - version: 6.3.5(@types/node@24.0.1)(tsx@4.20.3) + specifier: ^7.0.4 + version: 7.0.6(@types/node@24.1.0)(tsx@4.20.3) packages: - '@algolia/autocomplete-core@1.17.7': - resolution: {integrity: sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==} - - '@algolia/autocomplete-plugin-algolia-insights@1.17.7': - resolution: {integrity: sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==} - peerDependencies: - search-insights: '>= 1 < 3' - - '@algolia/autocomplete-preset-algolia@1.17.7': - resolution: {integrity: sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==} - peerDependencies: - '@algolia/client-search': '>= 4.9.1 < 6' - algoliasearch: '>= 4.9.1 < 6' - - '@algolia/autocomplete-shared@1.17.7': - resolution: {integrity: sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==} - peerDependencies: - '@algolia/client-search': '>= 4.9.1 < 6' - algoliasearch: '>= 4.9.1 < 6' - - '@algolia/client-abtesting@5.23.2': - resolution: {integrity: sha512-EudQGeYEzviwqPH8WoqP5VTQssE/PW6sEdL0zzOyKt2bWnWoUp5Rnm67sCbxYDR44JpUchbkul0PfWrSYsBPjQ==} - engines: {node: '>= 14.0.0'} - - '@algolia/client-analytics@5.23.2': - resolution: {integrity: sha512-zmJrkZqWFu+ft+VRcttZZJhw5ElkhBtOArRzQOu9sRnrSSodBOdPRhAfvu8tG93Hv67wh5qQaTBwLxM58AxuMg==} - engines: {node: '>= 14.0.0'} - - '@algolia/client-common@5.23.2': - resolution: {integrity: sha512-xaE6o4BMdqYBe0iB7JjX6G9/Qeqx6TSs9T4d6VJ0JHPsEyklSwIbKRiomPeYD7vzt2P4t45Io6QBhifOUP+0qg==} - engines: {node: '>= 14.0.0'} - - '@algolia/client-insights@5.23.2': - resolution: {integrity: sha512-F85hpMszbr5ZGt8gFdl7WOugELRF4z3R1nD9n3t7PZ/2alV7IR75UQY8/jMQDwij/lrnVaKbLeIvKKy6K7ncZw==} - engines: {node: '>= 14.0.0'} - - '@algolia/client-personalization@5.23.2': - resolution: {integrity: sha512-TuGaGKiQvQqFNR4c3Vdl+JBe6dkEPmRzVyIdWLrurOPEmFmVCKRxtSnLr0TVFl6de/JfDAXuchvtvLHFxv9P2A==} - engines: {node: '>= 14.0.0'} - - '@algolia/client-query-suggestions@5.23.2': - resolution: {integrity: sha512-fg2tZf7Sf51Icjfrea0dnfbfwlJ7kXMcRsWSJN3DZhEi/Y4mMmK9L0Cq8sby6HDzxy5T8xEWNWC3TMx5FvrJ6w==} - engines: {node: '>= 14.0.0'} - - '@algolia/client-search@5.23.2': - resolution: {integrity: sha512-XiTjt0qgsJk9OqvDpMwTgUaPAYNSQcMILRfSYiorgiyc71yYM7Lq1vRSVxhB0m51mrViWj4rIR6kSiJRXebqvQ==} - engines: {node: '>= 14.0.0'} - - '@algolia/ingestion@1.23.2': - resolution: {integrity: sha512-7ClIghvUFZTomBipD8Kor9Z5llcAM3lHUBG3VFOvUsOxOJcaMMONlBXyoFDfI1na+u14lVaGehY2oIEfY1eB0w==} - engines: {node: '>= 14.0.0'} - - '@algolia/monitoring@1.23.2': - resolution: {integrity: sha512-kF7KKd0iIIlaD70flFS+8+DNxRvIzrG9A22iWG5LDX225Kl6pITroq+qIUweqqyyoqJBYuIXKZGDGtnahEwQxw==} - engines: {node: '>= 14.0.0'} - - '@algolia/recommend@5.23.2': - resolution: {integrity: sha512-nAgS2O5ww8J4fgW6GAiybAdr0uH7MV74srPdx51cPJRpQBEge4WnYBaOWx1/a53qI0xwNtQudnEyBGUzsSYaAw==} - engines: {node: '>= 14.0.0'} - - '@algolia/requester-browser-xhr@5.23.2': - resolution: {integrity: sha512-yw6IzgQcwr4cZuoQCEoQui9G0rhVRGCyhPhW+gmrXe6oVr4qB50FV6mWGLA170+iqGVjPn/DVuOhExjBzcViTQ==} - engines: {node: '>= 14.0.0'} - - '@algolia/requester-fetch@5.23.2': - resolution: {integrity: sha512-8rmSybTwIqmGx3P0qkOEUkkyeIewglaKq6yUnxnVkBJbd4USfIZsw9cME1YUEHeZI7aOhTQg9QteUHSKXclF5A==} - engines: {node: '>= 14.0.0'} - - '@algolia/requester-node-http@5.23.2': - resolution: {integrity: sha512-IHpUiW3d3oVE5tCYqQN7X71/EbXI7f8WxU85eWW1UYEWEknqW3csdGctyIW7+qMHFfxeDymI1Wln/gGHHIXLIw==} - engines: {node: '>= 14.0.0'} - '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} @@ -476,8 +410,8 @@ packages: resolution: {integrity: sha512-60vepv88RwcJtSHrD6MjIL6Ta3SOYbgfnkHb+ppAVK+o9mXprRtulx7VlRl3lN3bbvysAfCS7WMVfhUYemB0IQ==} engines: {node: '>= 16'} - '@asamuzakjp/css-color@3.1.1': - resolution: {integrity: sha512-hpRD68SV2OMcZCsrbdkccTw5FXjNDLo5OuqSHyHZfwweGsDWZwDJ2+gONyNAbazZclobMirACLw0lk8WVxIqxA==} + '@asamuzakjp/css-color@3.2.0': + resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==} '@babel/code-frame@7.26.2': resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} @@ -513,10 +447,18 @@ packages: resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.25.9': resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.27.1': + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.25.9': resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} engines: {node: '>=6.9.0'} @@ -530,6 +472,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.28.0': + resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/runtime@7.27.6': resolution: {integrity: sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==} engines: {node: '>=6.9.0'} @@ -546,56 +493,43 @@ packages: resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==} engines: {node: '>=6.9.0'} + '@babel/types@7.28.2': + resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} + engines: {node: '>=6.9.0'} + '@csstools/color-helpers@5.0.2': resolution: {integrity: sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==} engines: {node: '>=18'} - '@csstools/css-calc@2.1.2': - resolution: {integrity: sha512-TklMyb3uBB28b5uQdxjReG4L80NxAqgrECqLZFQbyLekwwlcDDS8r3f07DKqeo8C4926Br0gf/ZDe17Zv4wIuw==} + '@csstools/css-calc@2.1.4': + resolution: {integrity: sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==} engines: {node: '>=18'} peerDependencies: - '@csstools/css-parser-algorithms': ^3.0.4 - '@csstools/css-tokenizer': ^3.0.3 + '@csstools/css-parser-algorithms': ^3.0.5 + '@csstools/css-tokenizer': ^3.0.4 - '@csstools/css-color-parser@3.0.8': - resolution: {integrity: sha512-pdwotQjCCnRPuNi06jFuP68cykU1f3ZWExLe/8MQ1LOs8Xq+fTkYgd+2V8mWUWMrOn9iS2HftPVaMZDaXzGbhQ==} + '@csstools/css-color-parser@3.0.10': + resolution: {integrity: sha512-TiJ5Ajr6WRd1r8HSiwJvZBiJOqtH86aHpUjq5aEKWHiII2Qfjqd/HCWKPOW8EP4vcspXbHnXrwIDlu5savQipg==} engines: {node: '>=18'} peerDependencies: - '@csstools/css-parser-algorithms': ^3.0.4 - '@csstools/css-tokenizer': ^3.0.3 + '@csstools/css-parser-algorithms': ^3.0.5 + '@csstools/css-tokenizer': ^3.0.4 - '@csstools/css-parser-algorithms@3.0.4': - resolution: {integrity: sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==} + '@csstools/css-parser-algorithms@3.0.5': + resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==} engines: {node: '>=18'} peerDependencies: - '@csstools/css-tokenizer': ^3.0.3 + '@csstools/css-tokenizer': ^3.0.4 - '@csstools/css-tokenizer@3.0.3': - resolution: {integrity: sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==} + '@csstools/css-tokenizer@3.0.4': + resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==} engines: {node: '>=18'} - '@docsearch/css@3.8.2': - resolution: {integrity: sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==} + '@docsearch/css@4.0.0-beta.5': + resolution: {integrity: sha512-bZy+gIXRZch0KNPC7MLoj4wkEcNVeEHBXOKJtonoJ2EaLw2vbO1PLGIXxtPgW7Ab7TvI0StkrmGuEQqE2q/1QA==} - '@docsearch/js@3.8.2': - resolution: {integrity: sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ==} - - '@docsearch/react@3.8.2': - resolution: {integrity: sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==} - peerDependencies: - '@types/react': '>= 16.8.0 < 19.0.0' - react: '>= 16.8.0 < 19.0.0' - react-dom: '>= 16.8.0 < 19.0.0' - search-insights: '>= 1 < 3' - peerDependenciesMeta: - '@types/react': - optional: true - react: - optional: true - react-dom: - optional: true - search-insights: - optional: true + '@docsearch/js@4.0.0-beta.5': + resolution: {integrity: sha512-FEtkwdblZDrTkd0mYwmfR94Vo/jgkXVIbS6vD2FcKazK/L5RmgNb7KAUDUWW11V/fIcS5XHvHprIxEnoB9gllQ==} '@emnapi/core@1.4.0': resolution: {integrity: sha512-H+N/FqT07NmLmt6OFFtDfwe8PNygprzBikrEMyQfgqSmT0vzE515Pz7R8izwB9q/zsH/MA64AKoul3sA6/CzVg==} @@ -606,35 +540,17 @@ packages: '@emnapi/wasi-threads@1.0.1': resolution: {integrity: sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==} - '@esbuild/aix-ppc64@0.21.5': - resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - - '@esbuild/aix-ppc64@0.25.3': - resolution: {integrity: sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - '@esbuild/aix-ppc64@0.25.5': resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.21.5': - resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm64@0.25.3': - resolution: {integrity: sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ==} + '@esbuild/aix-ppc64@0.25.8': + resolution: {integrity: sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==} engines: {node: '>=18'} - cpu: [arm64] - os: [android] + cpu: [ppc64] + os: [aix] '@esbuild/android-arm64@0.25.5': resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==} @@ -642,16 +558,10 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm@0.21.5': - resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - - '@esbuild/android-arm@0.25.3': - resolution: {integrity: sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A==} + '@esbuild/android-arm64@0.25.8': + resolution: {integrity: sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==} engines: {node: '>=18'} - cpu: [arm] + cpu: [arm64] os: [android] '@esbuild/android-arm@0.25.5': @@ -660,16 +570,10 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-x64@0.21.5': - resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - - '@esbuild/android-x64@0.25.3': - resolution: {integrity: sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ==} + '@esbuild/android-arm@0.25.8': + resolution: {integrity: sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==} engines: {node: '>=18'} - cpu: [x64] + cpu: [arm] os: [android] '@esbuild/android-x64@0.25.5': @@ -678,17 +582,11 @@ packages: cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.21.5': - resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-arm64@0.25.3': - resolution: {integrity: sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w==} + '@esbuild/android-x64@0.25.8': + resolution: {integrity: sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==} engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] + cpu: [x64] + os: [android] '@esbuild/darwin-arm64@0.25.5': resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==} @@ -696,16 +594,10 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.21.5': - resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - - '@esbuild/darwin-x64@0.25.3': - resolution: {integrity: sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A==} + '@esbuild/darwin-arm64@0.25.8': + resolution: {integrity: sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==} engines: {node: '>=18'} - cpu: [x64] + cpu: [arm64] os: [darwin] '@esbuild/darwin-x64@0.25.5': @@ -714,17 +606,11 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.21.5': - resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-arm64@0.25.3': - resolution: {integrity: sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw==} + '@esbuild/darwin-x64@0.25.8': + resolution: {integrity: sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==} engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] + cpu: [x64] + os: [darwin] '@esbuild/freebsd-arm64@0.25.5': resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==} @@ -732,16 +618,10 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.21.5': - resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.25.3': - resolution: {integrity: sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q==} + '@esbuild/freebsd-arm64@0.25.8': + resolution: {integrity: sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==} engines: {node: '>=18'} - cpu: [x64] + cpu: [arm64] os: [freebsd] '@esbuild/freebsd-x64@0.25.5': @@ -750,17 +630,11 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.21.5': - resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm64@0.25.3': - resolution: {integrity: sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A==} + '@esbuild/freebsd-x64@0.25.8': + resolution: {integrity: sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==} engines: {node: '>=18'} - cpu: [arm64] - os: [linux] + cpu: [x64] + os: [freebsd] '@esbuild/linux-arm64@0.25.5': resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==} @@ -768,16 +642,10 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.21.5': - resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-arm@0.25.3': - resolution: {integrity: sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ==} + '@esbuild/linux-arm64@0.25.8': + resolution: {integrity: sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==} engines: {node: '>=18'} - cpu: [arm] + cpu: [arm64] os: [linux] '@esbuild/linux-arm@0.25.5': @@ -786,16 +654,10 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.21.5': - resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-ia32@0.25.3': - resolution: {integrity: sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw==} + '@esbuild/linux-arm@0.25.8': + resolution: {integrity: sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==} engines: {node: '>=18'} - cpu: [ia32] + cpu: [arm] os: [linux] '@esbuild/linux-ia32@0.25.5': @@ -804,16 +666,10 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.21.5': - resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-loong64@0.25.3': - resolution: {integrity: sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g==} + '@esbuild/linux-ia32@0.25.8': + resolution: {integrity: sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==} engines: {node: '>=18'} - cpu: [loong64] + cpu: [ia32] os: [linux] '@esbuild/linux-loong64@0.25.5': @@ -822,16 +678,10 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.21.5': - resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-mips64el@0.25.3': - resolution: {integrity: sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag==} + '@esbuild/linux-loong64@0.25.8': + resolution: {integrity: sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==} engines: {node: '>=18'} - cpu: [mips64el] + cpu: [loong64] os: [linux] '@esbuild/linux-mips64el@0.25.5': @@ -840,16 +690,10 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.21.5': - resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-ppc64@0.25.3': - resolution: {integrity: sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg==} + '@esbuild/linux-mips64el@0.25.8': + resolution: {integrity: sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==} engines: {node: '>=18'} - cpu: [ppc64] + cpu: [mips64el] os: [linux] '@esbuild/linux-ppc64@0.25.5': @@ -858,16 +702,10 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.21.5': - resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-riscv64@0.25.3': - resolution: {integrity: sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA==} + '@esbuild/linux-ppc64@0.25.8': + resolution: {integrity: sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==} engines: {node: '>=18'} - cpu: [riscv64] + cpu: [ppc64] os: [linux] '@esbuild/linux-riscv64@0.25.5': @@ -876,16 +714,10 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.21.5': - resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-s390x@0.25.3': - resolution: {integrity: sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ==} + '@esbuild/linux-riscv64@0.25.8': + resolution: {integrity: sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==} engines: {node: '>=18'} - cpu: [s390x] + cpu: [riscv64] os: [linux] '@esbuild/linux-s390x@0.25.5': @@ -894,16 +726,10 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.21.5': - resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - - '@esbuild/linux-x64@0.25.3': - resolution: {integrity: sha512-nQHDz4pXjSDC6UfOE1Fw9Q8d6GCAd9KdvMZpfVGWSJztYCarRgSDfOVBY5xwhQXseiyxapkiSJi/5/ja8mRFFA==} + '@esbuild/linux-s390x@0.25.8': + resolution: {integrity: sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==} engines: {node: '>=18'} - cpu: [x64] + cpu: [s390x] os: [linux] '@esbuild/linux-x64@0.25.5': @@ -912,11 +738,11 @@ packages: cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.3': - resolution: {integrity: sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA==} + '@esbuild/linux-x64@0.25.8': + resolution: {integrity: sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==} engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] + cpu: [x64] + os: [linux] '@esbuild/netbsd-arm64@0.25.5': resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==} @@ -924,16 +750,10 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.21.5': - resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.25.3': - resolution: {integrity: sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g==} + '@esbuild/netbsd-arm64@0.25.8': + resolution: {integrity: sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==} engines: {node: '>=18'} - cpu: [x64] + cpu: [arm64] os: [netbsd] '@esbuild/netbsd-x64@0.25.5': @@ -942,11 +762,11 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.3': - resolution: {integrity: sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ==} + '@esbuild/netbsd-x64@0.25.8': + resolution: {integrity: sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==} engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] + cpu: [x64] + os: [netbsd] '@esbuild/openbsd-arm64@0.25.5': resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==} @@ -954,16 +774,10 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.21.5': - resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.25.3': - resolution: {integrity: sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w==} + '@esbuild/openbsd-arm64@0.25.8': + resolution: {integrity: sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==} engines: {node: '>=18'} - cpu: [x64] + cpu: [arm64] os: [openbsd] '@esbuild/openbsd-x64@0.25.5': @@ -972,17 +786,17 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.21.5': - resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - - '@esbuild/sunos-x64@0.25.3': - resolution: {integrity: sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA==} + '@esbuild/openbsd-x64@0.25.8': + resolution: {integrity: sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==} engines: {node: '>=18'} cpu: [x64] - os: [sunos] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.25.8': + resolution: {integrity: sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] '@esbuild/sunos-x64@0.25.5': resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==} @@ -990,17 +804,11 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.21.5': - resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-arm64@0.25.3': - resolution: {integrity: sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ==} + '@esbuild/sunos-x64@0.25.8': + resolution: {integrity: sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==} engines: {node: '>=18'} - cpu: [arm64] - os: [win32] + cpu: [x64] + os: [sunos] '@esbuild/win32-arm64@0.25.5': resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==} @@ -1008,16 +816,10 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.21.5': - resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-ia32@0.25.3': - resolution: {integrity: sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew==} + '@esbuild/win32-arm64@0.25.8': + resolution: {integrity: sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==} engines: {node: '>=18'} - cpu: [ia32] + cpu: [arm64] os: [win32] '@esbuild/win32-ia32@0.25.5': @@ -1026,16 +828,10 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.21.5': - resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - - '@esbuild/win32-x64@0.25.3': - resolution: {integrity: sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg==} + '@esbuild/win32-ia32@0.25.8': + resolution: {integrity: sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==} engines: {node: '>=18'} - cpu: [x64] + cpu: [ia32] os: [win32] '@esbuild/win32-x64@0.25.5': @@ -1044,6 +840,12 @@ packages: cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.25.8': + resolution: {integrity: sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@eslint-community/eslint-utils@4.7.0': resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1054,42 +856,38 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.20.1': - resolution: {integrity: sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==} + '@eslint/config-array@0.21.0': + resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/config-helpers@0.2.3': - resolution: {integrity: sha512-u180qk2Um1le4yf0ruXH3PYFeEZeYC3p/4wCTKrr2U1CmGdzGi3KtY0nuPDH48UJxlKCC5RDzbcbh4X0XlqgHg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/core@0.14.0': - resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==} + '@eslint/config-helpers@0.3.0': + resolution: {integrity: sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/core@0.15.0': resolution: {integrity: sha512-b7ePw78tEWWkpgZCDYkbqDOP8dmM6qe+AOC6iuJqlq1R/0ahMAeH3qynpnqKFGkMltrp44ohV4ubGyvLX28tzw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/core@0.15.1': + resolution: {integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/eslintrc@3.3.1': resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.28.0': - resolution: {integrity: sha512-fnqSjGWd/CoIp4EXIxWVK/sHA6DOHN4+8Ix2cX5ycOY7LG0UY8nHCU5pIp2eaE1Mc7Qd8kHspYNzYXT2ojPLzg==} + '@eslint/js@9.32.0': + resolution: {integrity: sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.6': resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.3.2': - resolution: {integrity: sha512-4SaFZCNfJqvk/kenHpI8xvN42DMaoycy4PzKc5otHxRswww1kAt82OlBuwRVLofCACCTZEcla2Ydxv8scMXaTg==} + '@eslint/plugin-kit@0.3.4': + resolution: {integrity: sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@etherpad/express-session@1.18.4': - resolution: {integrity: sha512-uiUtcfv0hyEA+Lur00V6yINaa/qe09HiFqmc+DzSXYChILFLgOV3G4p4XJkIRrUOGmqaJRiliB1BoQIiY3Tnjw==} - engines: {node: '>= 0.8.0'} - '@humanfs/core@0.19.1': resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} engines: {node: '>=18.18.0'} @@ -1110,8 +908,8 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} - '@iconify-json/simple-icons@1.2.30': - resolution: {integrity: sha512-KiVViMvnohpS5Q9WMP+4ksOhF3Dnq73Ba9hxBhUIIhp1r6RJ6edMZ8QGKZcFZp/B0/PZC4jAIhXcKKq73WZckQ==} + '@iconify-json/simple-icons@1.2.45': + resolution: {integrity: sha512-POOz+NjYQDy2fy1u+sIZi05N6r6oSooIGBaBcZLh7w8QOmLgJAZ6mBt+7Messp7ku9ucRua61if33BPoOZCwRQ==} '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} @@ -1145,8 +943,8 @@ packages: resolution: {integrity: sha512-x/iUDjcS90W69PryLDIMgFyV21YLTnG9zOpPXS7Bkt2b8AsY3zZsIpOLBkYr9fBcF3HbkKaER5hOBZLfpLgYNw==} engines: {node: '>= 14.0.0'} - '@koa/router@13.1.0': - resolution: {integrity: sha512-mNVu1nvkpSd8Q8gMebGbCkDWJ51ODetrFvLKYusej+V0ByD4btqHYnPIzTBLXnQMVUlm/oxVwqmWBY3zQfZilw==} + '@koa/router@13.1.1': + resolution: {integrity: sha512-JQEuMANYRVHs7lm7KY9PCIjkgJk73h4m4J+g2mkw2Vo1ugPZ17UJVqEH8F+HeAdjKz5do1OaLe7ArDz+z308gw==} engines: {node: '>= 18'} '@napi-rs/wasm-runtime@0.2.8': @@ -1179,8 +977,8 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@playwright/test@1.53.0': - resolution: {integrity: sha512-15hjKreZDcp7t6TL/7jkAo6Df5STZN09jGiv5dbP9A6vMVncXRqE7/B2SncsyOwrkZRBH2i6/TPOL8BVmm3c7w==} + '@playwright/test@1.54.1': + resolution: {integrity: sha512-FS8hQ12acieG2dYSksmLOF7BNxnVf2afRJdCuM1eMSxj6QTSE6G4InGF7oApGgDb65MX7AwMVlIkpru0yZA4Xw==} engines: {node: '>=18'} hasBin: true @@ -1428,6 +1226,9 @@ packages: '@rolldown/pluginutils@1.0.0-beta.11': resolution: {integrity: sha512-L/gAA/hyCSuzTF1ftlzUSI/IKr2POHsv1Dd78GfqkR83KMNuswWD61JxGV2L7nRwBBBSDr6R1gCkdTmoN7W4ag==} + '@rolldown/pluginutils@1.0.0-beta.29': + resolution: {integrity: sha512-NIJgOsMjbxAXvoGq/X0gD7VPMQ8j9g0BiDaNjVNVjvl+iKXxL3Jre0v31RmBYeLEmkbj2s02v8vFTbUXi5XS2Q==} + '@rollup/pluginutils@5.1.4': resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} engines: {node: '>=14.0.0'} @@ -1546,26 +1347,26 @@ packages: '@scarf/scarf@1.4.0': resolution: {integrity: sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==} - '@shikijs/core@2.5.0': - resolution: {integrity: sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==} + '@shikijs/core@3.9.1': + resolution: {integrity: sha512-W5Vwen0KJCtR7KFRo+3JLGAqLUPsfW7e+wZ4yaRBGIogwI9ZlnkpRm9ZV8JtfzMxOkIwZwMmmN0hNErLtm3AYg==} - '@shikijs/engine-javascript@2.5.0': - resolution: {integrity: sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w==} + '@shikijs/engine-javascript@3.9.1': + resolution: {integrity: sha512-4hGenxYpAmtALryKsdli2K58F0s7RBYpj/RSDcAAGfRM6eTEGI5cZnt86mr+d9/4BaZ5sH5s4p3VU5irIdhj9Q==} - '@shikijs/engine-oniguruma@2.5.0': - resolution: {integrity: sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw==} + '@shikijs/engine-oniguruma@3.9.1': + resolution: {integrity: sha512-WPlL/xqviwS3te4unSGGGfflKsuHLMI6tPdNYvgz/IygcBT6UiwDFSzjBKyebwi5GGSlXsjjdoJLIBnAplmEZw==} - '@shikijs/langs@2.5.0': - resolution: {integrity: sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w==} + '@shikijs/langs@3.9.1': + resolution: {integrity: sha512-Vyy2Yv9PP3Veh3VSsIvNncOR+O93wFsNYgN2B6cCCJlS7H9SKFYc55edsqernsg8WT/zam1cfB6llJsQWLnVhA==} - '@shikijs/themes@2.5.0': - resolution: {integrity: sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw==} + '@shikijs/themes@3.9.1': + resolution: {integrity: sha512-zAykkGECNICCMXpKeVvq04yqwaSuAIvrf8MjsU5bzskfg4XreU+O0B5wdNCYRixoB9snd3YlZ373WV5E/g5T9A==} - '@shikijs/transformers@2.5.0': - resolution: {integrity: sha512-SI494W5X60CaUwgi8u4q4m4s3YAFSxln3tzNjOSYqq54wlVgz0/NbbXEb3mdLbqMBztcmS7bVTaEd2w0qMmfeg==} + '@shikijs/transformers@3.9.1': + resolution: {integrity: sha512-QI4Bh565EhKGaefiDAyn5o7S8rQIUGXcOjZANSiQHa/KSGCyJTZP9UUiRbvdovVpaI/nagODX6mspFk/vcYOQQ==} - '@shikijs/types@2.5.0': - resolution: {integrity: sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==} + '@shikijs/types@3.9.1': + resolution: {integrity: sha512-rqM3T7a0iM1oPKz9iaH/cVgNX9Vz1HERcUcXJ94/fulgVdwqfnhXzGxO4bLrAnh/o5CPLy3IcYedogfV+Ns0Qg==} '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} @@ -1749,6 +1550,11 @@ packages: '@types/content-disposition@0.5.9': resolution: {integrity: sha512-8uYXI3Gw35MhiVYhG3s295oihrxRyytcRHjSjqnqZVDDy/xcGBRny7+Xj1Wgfhv5QzRtN2hB2dVRBUX9XW3UcQ==} + '@types/cookie-parser@1.4.9': + resolution: {integrity: sha512-tGZiZ2Gtc4m3wIdLkZ8mkj1T6CEHb35+VApbL2T14Dew8HA7c+04dmKqsKRNC+8RJPm16JEK0tFSwdZqubfc4g==} + peerDependencies: + '@types/express': '*' + '@types/cookiejar@2.1.5': resolution: {integrity: sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==} @@ -1773,6 +1579,9 @@ packages: '@types/express-serve-static-core@4.19.6': resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==} + '@types/express-session@1.18.2': + resolution: {integrity: sha512-k+I0BxwVXsnEU2hV77cCobC08kIsn4y44C3gC0b46uxZVMaXA04lSPgRLR/bSL2w0t0ShJiG8o4jPzRG/nscFg==} + '@types/express@4.17.21': resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} @@ -1806,8 +1615,8 @@ packages: '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - '@types/jsonwebtoken@9.0.9': - resolution: {integrity: sha512-uoe+GxEuHbvy12OUQct2X9JenKM3qAscquYymuQN4fMWG9DBQtykrQEFcAbVACF7qaLw9BePSodUL0kquqBJpQ==} + '@types/jsonwebtoken@9.0.10': + resolution: {integrity: sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==} '@types/keygrip@1.0.6': resolution: {integrity: sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ==} @@ -1818,21 +1627,12 @@ packages: '@types/koa@2.15.0': resolution: {integrity: sha512-7QFsywoE5URbuVnG3loe03QXuGajrnotr3gQkXcEBShORai23MePfFYdhz90FEtBBpkyIYQbVD+evKtloCgX3g==} - '@types/linkify-it@5.0.0': - resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} - '@types/lockfile@1.0.4': resolution: {integrity: sha512-Q8oFIHJHr+htLrTXN2FuZfg+WXVHQRwU/hC2GpUu+Q8e3FUM9EDkS2pE3R2AO1ZGu56f479ybdMCNF1DAu8cAQ==} - '@types/markdown-it@14.1.2': - resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} - '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} - '@types/mdurl@2.0.0': - resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} - '@types/methods@1.1.4': resolution: {integrity: sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==} @@ -1851,11 +1651,11 @@ packages: '@types/node-fetch@2.6.12': resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} - '@types/node@24.0.1': - resolution: {integrity: sha512-MX4Zioh39chHlDJbKmEgydJDS3tspMP/lnQC67G3SWsTnb9NeYVWOjkxpOSy4oMfPs4StcWHwBrvUb4ybfnuaw==} + '@types/node@24.1.0': + resolution: {integrity: sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w==} - '@types/oidc-provider@9.1.0': - resolution: {integrity: sha512-UoC3ZQur+TtVL5hiUN8LoCbXocS2WI2eAPBtZtv1Y5F3vW0QTBawFAgDoctPqCQF73kah/Nzb5Gd3m5GtxFxiA==} + '@types/oidc-provider@9.1.1': + resolution: {integrity: sha512-sG4UcE4AbUwAsEpyrcyoqZ383wJiQObZU+gTa1Iv288+l09HwSr88hBZE2IBLlXS+RKmLId0i4B430PBFO/XRA==} '@types/qs@6.9.18': resolution: {integrity: sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==} @@ -1930,11 +1730,11 @@ packages: typescript: optional: true - '@typescript-eslint/eslint-plugin@8.34.0': - resolution: {integrity: sha512-QXwAlHlbcAwNlEEMKQS2RCgJsgXrTJdjXT08xEgbPFa2yYQgVjBymxP5DrfrE7X7iodSzd9qBUHUycdyVJTW1w==} + '@typescript-eslint/eslint-plugin@8.38.0': + resolution: {integrity: sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.34.0 + '@typescript-eslint/parser': ^8.38.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' @@ -1948,15 +1748,15 @@ packages: typescript: optional: true - '@typescript-eslint/parser@8.34.0': - resolution: {integrity: sha512-vxXJV1hVFx3IXz/oy2sICsJukaBrtDEQSBiV48/YIV5KWjX1dO+bcIr/kCPrW6weKXvsaGKFNlwH0v2eYdRRbA==} + '@typescript-eslint/parser@8.38.0': + resolution: {integrity: sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/project-service@8.34.0': - resolution: {integrity: sha512-iEgDALRf970/B2YExmtPMPF54NenZUf4xpL3wsCRx/lgjz6ul/l13R81ozP/ZNuXfnLCS+oPmG7JIxfdNYKELw==} + '@typescript-eslint/project-service@8.38.0': + resolution: {integrity: sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' @@ -1965,12 +1765,12 @@ packages: resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/scope-manager@8.34.0': - resolution: {integrity: sha512-9Ac0X8WiLykl0aj1oYQNcLZjHgBojT6cW68yAgZ19letYu+Hxd0rE0veI1XznSSst1X5lwnxhPbVdwjDRIomRw==} + '@typescript-eslint/scope-manager@8.38.0': + resolution: {integrity: sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.34.0': - resolution: {integrity: sha512-+W9VYHKFIzA5cBeooqQxqNriAP0QeQ7xTiDuIOr71hzgffm3EL2hxwWBIIj4GuofIbKxGNarpKqIq6Q6YrShOA==} + '@typescript-eslint/tsconfig-utils@8.38.0': + resolution: {integrity: sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' @@ -1985,8 +1785,8 @@ packages: typescript: optional: true - '@typescript-eslint/type-utils@8.34.0': - resolution: {integrity: sha512-n7zSmOcUVhcRYC75W2pnPpbO1iwhJY3NLoHEtbJwJSNlVAZuwqu05zY3f3s2SDWWDSo9FdN5szqc73DCtDObAg==} + '@typescript-eslint/type-utils@8.38.0': + resolution: {integrity: sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -1996,8 +1796,8 @@ packages: resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/types@8.34.0': - resolution: {integrity: sha512-9V24k/paICYPniajHfJ4cuAWETnt7Ssy+R0Rbcqo5sSFr3QEZ/8TSoUi9XeXVBGXCaLtwTOKSLGcInCAvyZeMA==} + '@typescript-eslint/types@8.38.0': + resolution: {integrity: sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@7.18.0': @@ -2009,8 +1809,8 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@8.34.0': - resolution: {integrity: sha512-rOi4KZxI7E0+BMqG7emPSK1bB4RICCpF7QD3KCLXn9ZvWoESsOMlHyZPAHyG04ujVplPaHbmEvs34m+wjgtVtg==} + '@typescript-eslint/typescript-estree@8.38.0': + resolution: {integrity: sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' @@ -2021,8 +1821,8 @@ packages: peerDependencies: eslint: ^8.56.0 - '@typescript-eslint/utils@8.34.0': - resolution: {integrity: sha512-8L4tWatGchV9A1cKbjaavS6mwYwp39jql8xUmIIKJdm+qiaeHy5KMKlBrf30akXAWBzn2SqKsNOtSENWUwg7XQ==} + '@typescript-eslint/utils@8.38.0': + resolution: {integrity: sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -2032,8 +1832,8 @@ packages: resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/visitor-keys@8.34.0': - resolution: {integrity: sha512-qHV7pW7E85A0x6qyrFn+O+q1k1p3tQCsqIZ1KZ5ESLXY57aTvUd3/a4rdPTeXisvhXn2VQG0VSKUqs8KHF2zcA==} + '@typescript-eslint/visitor-keys@8.38.0': + resolution: {integrity: sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.3.0': @@ -2119,18 +1919,18 @@ packages: peerDependencies: vite: ^4 || ^5 || ^6 || ^7.0.0-beta.0 - '@vitejs/plugin-vue@5.2.3': - resolution: {integrity: sha512-IYSLEQj4LgZZuoVpdSUCw3dIynTWQgPlaRP6iAvMle4My0HdYwr5g5wQAfwOeHQBmYwEkqF70nRpSilr6PoUDg==} - engines: {node: ^18.0.0 || >=20.0.0} + '@vitejs/plugin-vue@6.0.1': + resolution: {integrity: sha512-+MaE752hU0wfPFJEUAIxqw18+20euHHdxVtMvbFcOEpjEyfqXH/5DCoTHiVJ0J29EhTJdoTkjEv5YBKU9dnoTw==} + engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: - vite: ^5.0.0 || ^6.0.0 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 vue: ^3.2.25 - '@vitest/expect@3.2.3': - resolution: {integrity: sha512-W2RH2TPWVHA1o7UmaFKISPvdicFJH+mjykctJFoAkUw+SPTJTGjUNdKscFBrqM7IPnCVu6zihtKYa7TkZS1dkQ==} + '@vitest/expect@3.2.4': + resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} - '@vitest/mocker@3.2.3': - resolution: {integrity: sha512-cP6fIun+Zx8he4rbWvi+Oya6goKQDZK+Yq4hhlggwQBbrlOQ4qtZ+G4nxB6ZnzI9lyIb+JnvyiJnPC2AGbKSPA==} + '@vitest/mocker@3.2.4': + resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} peerDependencies: msw: ^2.4.9 vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 @@ -2140,64 +1940,66 @@ packages: vite: optional: true - '@vitest/pretty-format@3.2.3': - resolution: {integrity: sha512-yFglXGkr9hW/yEXngO+IKMhP0jxyFw2/qys/CK4fFUZnSltD+MU7dVYGrH8rvPcK/O6feXQA+EU33gjaBBbAng==} + '@vitest/pretty-format@3.2.4': + resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} - '@vitest/runner@3.2.3': - resolution: {integrity: sha512-83HWYisT3IpMaU9LN+VN+/nLHVBCSIUKJzGxC5RWUOsK1h3USg7ojL+UXQR3b4o4UBIWCYdD2fxuzM7PQQ1u8w==} + '@vitest/runner@3.2.4': + resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} - '@vitest/snapshot@3.2.3': - resolution: {integrity: sha512-9gIVWx2+tysDqUmmM1L0hwadyumqssOL1r8KJipwLx5JVYyxvVRfxvMq7DaWbZZsCqZnu/dZedaZQh4iYTtneA==} + '@vitest/snapshot@3.2.4': + resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} - '@vitest/spy@3.2.3': - resolution: {integrity: sha512-JHu9Wl+7bf6FEejTCREy+DmgWe+rQKbK+y32C/k5f4TBIAlijhJbRBIRIOCEpVevgRsCQR2iHRUH2/qKVM/plw==} + '@vitest/spy@3.2.4': + resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} - '@vitest/utils@3.2.3': - resolution: {integrity: sha512-4zFBCU5Pf+4Z6v+rwnZ1HU1yzOKKvDkMXZrymE2PBlbjKJRlrOxbvpfPSvJTGRIwGoahaOGvp+kbCoxifhzJ1Q==} + '@vitest/utils@3.2.4': + resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} - '@vue/compiler-core@3.5.13': - resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} + '@vue/compiler-core@3.5.18': + resolution: {integrity: sha512-3slwjQrrV1TO8MoXgy3aynDQ7lslj5UqDxuHnrzHtpON5CBinhWjJETciPngpin/T3OuW3tXUf86tEurusnztw==} - '@vue/compiler-dom@3.5.13': - resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==} + '@vue/compiler-dom@3.5.18': + resolution: {integrity: sha512-RMbU6NTU70++B1JyVJbNbeFkK+A+Q7y9XKE2EM4NLGm2WFR8x9MbAtWxPPLdm0wUkuZv9trpwfSlL6tjdIa1+A==} - '@vue/compiler-sfc@3.5.13': - resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==} + '@vue/compiler-sfc@3.5.18': + resolution: {integrity: sha512-5aBjvGqsWs+MoxswZPoTB9nSDb3dhd1x30xrrltKujlCxo48j8HGDNj3QPhF4VIS0VQDUrA1xUfp2hEa+FNyXA==} - '@vue/compiler-ssr@3.5.13': - resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==} + '@vue/compiler-ssr@3.5.18': + resolution: {integrity: sha512-xM16Ak7rSWHkM3m22NlmcdIM+K4BMyFARAfV9hYFl+SFuRzrZ3uGMNW05kA5pmeMa0X9X963Kgou7ufdbpOP9g==} - '@vue/devtools-api@7.7.2': - resolution: {integrity: sha512-1syn558KhyN+chO5SjlZIwJ8bV/bQ1nOVTG66t2RbG66ZGekyiYNmRO7X9BJCXQqPsFHlnksqvPhce2qpzxFnA==} + '@vue/devtools-api@7.7.7': + resolution: {integrity: sha512-lwOnNBH2e7x1fIIbVT7yF5D+YWhqELm55/4ZKf45R9T8r9dE2AIOy8HKjfqzGsoTHFbWbr337O4E0A0QADnjBg==} - '@vue/devtools-kit@7.7.2': - resolution: {integrity: sha512-CY0I1JH3Z8PECbn6k3TqM1Bk9ASWxeMtTCvZr7vb+CHi+X/QwQm5F1/fPagraamKMAHVfuuCbdcnNg1A4CYVWQ==} + '@vue/devtools-kit@7.7.7': + resolution: {integrity: sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA==} - '@vue/devtools-shared@7.7.2': - resolution: {integrity: sha512-uBFxnp8gwW2vD6FrJB8JZLUzVb6PNRG0B0jBnHsOH8uKyva2qINY8PTF5Te4QlTbMDqU5K6qtJDr6cNsKWhbOA==} + '@vue/devtools-shared@7.7.7': + resolution: {integrity: sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==} - '@vue/reactivity@3.5.13': - resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==} + '@vue/reactivity@3.5.18': + resolution: {integrity: sha512-x0vPO5Imw+3sChLM5Y+B6G1zPjwdOri9e8V21NnTnlEvkxatHEH5B5KEAJcjuzQ7BsjGrKtfzuQ5eQwXh8HXBg==} - '@vue/runtime-core@3.5.13': - resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==} + '@vue/runtime-core@3.5.18': + resolution: {integrity: sha512-DUpHa1HpeOQEt6+3nheUfqVXRog2kivkXHUhoqJiKR33SO4x+a5uNOMkV487WPerQkL0vUuRvq/7JhRgLW3S+w==} - '@vue/runtime-dom@3.5.13': - resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==} + '@vue/runtime-dom@3.5.18': + resolution: {integrity: sha512-YwDj71iV05j4RnzZnZtGaXwPoUWeRsqinblgVJwR8XTXYZ9D5PbahHQgsbmzUvCWNF6x7siQ89HgnX5eWkr3mw==} - '@vue/server-renderer@3.5.13': - resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==} + '@vue/server-renderer@3.5.18': + resolution: {integrity: sha512-PvIHLUoWgSbDG7zLHqSqaCoZvHi6NNmfVFOqO+OnwvqMz/tqQr3FuGWS8ufluNddk7ZLBJYMrjcw1c6XzR12mA==} peerDependencies: - vue: 3.5.13 + vue: 3.5.18 - '@vue/shared@3.5.13': - resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} + '@vue/shared@3.5.18': + resolution: {integrity: sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA==} - '@vueuse/core@12.8.2': - resolution: {integrity: sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==} + '@vueuse/core@13.6.0': + resolution: {integrity: sha512-DJbD5fV86muVmBgS9QQPddVX7d9hWYswzlf4bIyUD2dj8GC46R1uNClZhVAmsdVts4xb2jwp1PbpuiA50Qee1A==} + peerDependencies: + vue: ^3.5.0 - '@vueuse/integrations@12.8.2': - resolution: {integrity: sha512-fbGYivgK5uBTRt7p5F3zy6VrETlV9RtZjBqd1/HxGdjdckBgBM4ugP8LHpjolqTj14TXTxSK1ZfgPbHYyGuH7g==} + '@vueuse/integrations@13.6.0': + resolution: {integrity: sha512-dVFdgwYvkYjdizRL3ESdUW+Hg84i9Yhuzs+Ec3kEcuzJmT5xhiL/IGdw4z394qSBngUQvFi+wbHwhHX3EGbAxQ==} peerDependencies: async-validator: ^4 axios: ^1 @@ -2210,7 +2012,8 @@ packages: nprogress: ^0.2 qrcode: ^1.5 sortablejs: ^1 - universal-cookie: ^7 + universal-cookie: ^7 || ^8 + vue: ^3.5.0 peerDependenciesMeta: async-validator: optional: true @@ -2237,11 +2040,13 @@ packages: universal-cookie: optional: true - '@vueuse/metadata@12.8.2': - resolution: {integrity: sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==} + '@vueuse/metadata@13.6.0': + resolution: {integrity: sha512-rnIH7JvU7NjrpexTsl2Iwv0V0yAx9cw7+clymjKuLSXG0QMcLD0LDgdNmXic+qL0SGvgSVPEpM9IDO/wqo1vkQ==} - '@vueuse/shared@12.8.2': - resolution: {integrity: sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==} + '@vueuse/shared@13.6.0': + resolution: {integrity: sha512-pDykCSoS2T3fsQrYqf9SyF0QXWHmcGPQ+qiOVjlYSzlWd9dgppB2bFSM1GgKKkt7uzn0BBMV3IbJsUfHG2+BCg==} + peerDependencies: + vue: ^3.5.0 accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} @@ -2261,6 +2066,10 @@ packages: resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} engines: {node: '>= 14'} + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} + engines: {node: '>= 14'} + ajv-formats@2.1.1: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: @@ -2275,10 +2084,6 @@ packages: ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} - algoliasearch@5.23.2: - resolution: {integrity: sha512-IhKP22Czzg8Y9HaF6aIb5aAHK2HBj4VAzLLnKEPUnxqDwxpryH9sXbm0NkeY7Cby9GlF81wF+AG/VulKDFBphg==} - engines: {node: '>= 14.0.0'} - ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -2362,8 +2167,8 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - axios@1.8.4: - resolution: {integrity: sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==} + axios@1.10.0: + resolution: {integrity: sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==} bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} @@ -2389,8 +2194,8 @@ packages: binary-search@1.3.6: resolution: {integrity: sha512-nbE1WxOTTrUWIfsfZ4aHGYu5DOuNkbxGokjV6Z2kxfJK3uaAb8zNK1muzOeipoLHZjInT4Br88BHpzevc681xA==} - birpc@0.2.19: - resolution: {integrity: sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==} + birpc@2.5.0: + resolution: {integrity: sha512-VSWO/W6nNQdyP520F1mhf+Lc2f8pjGQOtoHHm7Ze8Go1kX7akpVIrtTa0fn+HB0QJEDVacl6aO08YE0PgXfdnQ==} body-parser@1.20.3: resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} @@ -2534,9 +2339,8 @@ packages: cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - cookie@0.4.2: - resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} - engines: {node: '>= 0.6'} + cookie-signature@1.0.7: + resolution: {integrity: sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==} cookie@0.7.1: resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} @@ -2583,8 +2387,8 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - cssstyle@4.3.0: - resolution: {integrity: sha512-6r0NiY0xizYqfBvWp1G7WXJ06/bZyrk7Dc6PHql82C/pKGUTKu4yAX4Y8JPamb1ob9nBKuxWzCGTRuGwU3yxJQ==} + cssstyle@4.6.0: + resolution: {integrity: sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==} engines: {node: '>=18'} csstype@3.1.3: @@ -2661,8 +2465,8 @@ packages: resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} engines: {node: '>=10'} - decimal.js@10.5.0: - resolution: {integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==} + decimal.js@10.6.0: + resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} deep-eql@5.0.2: resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} @@ -2757,9 +2561,6 @@ packages: electron-to-chromium@1.5.132: resolution: {integrity: sha512-QgX9EBvWGmvSRa74zqfnG7+Eno0Ak0vftBll0Pt2/z5b3bEGYL6OUXLgKPtvx73dn3dvwrlyVkjPKRRlhLYTEg==} - emoji-regex-xs@1.0.0: - resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} - emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2789,6 +2590,10 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} + entities@6.0.1: + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} + engines: {node: '>=0.12'} + error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} @@ -2823,18 +2628,13 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} - esbuild@0.21.5: - resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} - engines: {node: '>=12'} - hasBin: true - - esbuild@0.25.3: - resolution: {integrity: sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q==} + esbuild@0.25.5: + resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==} engines: {node: '>=18'} hasBin: true - esbuild@0.25.5: - resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==} + esbuild@0.25.8: + resolution: {integrity: sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==} engines: {node: '>=18'} hasBin: true @@ -2992,8 +2792,8 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.28.0: - resolution: {integrity: sha512-ocgh41VhRlf9+fVpe7QKzwLj9c92fDiqOj8Y3Sd4/ZmVA4Btx4PlUYPq4pp9JDyupkf1upbEXecxL2mwNV7jPQ==} + eslint@9.32.0: + resolution: {integrity: sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -3041,8 +2841,8 @@ packages: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} - etherpad-cli-client@3.0.2: - resolution: {integrity: sha512-3uJxz8cx1WSVAPe7haqfwQj4N4wWDrei5BXBjH+e1BLPiEpqWtnMX29Qo9jWhqO9ctyPPHO0nZ1x/ZCNxMVCqA==} + etherpad-cli-client@3.0.4: + resolution: {integrity: sha512-0CgNY84Ox0fgRblOr0qlm03pRtr/qt6DCFNTh2m/EYOsu8KO8QWrGAUiCr53ny8/gtQJ4BhNxSiohaSH+Vhykw==} engines: {node: '>=18.0.0'} hasBin: true @@ -3050,11 +2850,15 @@ packages: resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==} engines: {node: '>=12.0.0'} - express-rate-limit@7.5.0: - resolution: {integrity: sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==} + express-rate-limit@8.0.1: + resolution: {integrity: sha512-aZVCnybn7TVmxO4BtlmnvX+nuz8qHW124KKJ8dumsBsmv5ZLxE0pYu7S2nwyRBGHHCAzdmnGyrc5U/rksSPO7Q==} engines: {node: '>= 16'} peerDependencies: - express: ^4.11 || 5 || ^5.0.0-beta.1 + express: '>= 4.11' + + express-session@1.18.2: + resolution: {integrity: sha512-SZjssGQC7TzTs9rpPDuUrR23GNZ9+2+IkA/+IJWmvQilTr5OSliEHGF+D9scbIpdC6yGtTI0/VhaHoVes2AN/A==} + engines: {node: '>= 0.8.0'} express@4.21.2: resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} @@ -3085,14 +2889,6 @@ packages: fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} - fdir@6.4.4: - resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - fdir@6.4.6: resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} peerDependencies: @@ -3142,8 +2938,8 @@ packages: flatted@3.3.3: resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} - focus-trap@7.6.4: - resolution: {integrity: sha512-xx560wGBk7seZ6y933idtjJQc1l+ck+pI3sKvhKozdBV1dRZoKhkW5xoCaFv9tQiX5RH1xfSxjuNu6g+lmN/gw==} + focus-trap@7.6.5: + resolution: {integrity: sha512-7Ke1jyybbbPZyZXFxEftUtxFGLMpE2n6A+z//m4CRDlj0hW+o3iYSmh8nFlYMurOiJVDmJRilUQtJr08KfIxlg==} follow-redirects@1.15.9: resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} @@ -3162,21 +2958,18 @@ packages: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} - form-data@4.0.2: - resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} - engines: {node: '>= 6'} - form-data@4.0.3: resolution: {integrity: sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==} engines: {node: '>= 6'} + form-data@4.0.4: + resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} + engines: {node: '>= 6'} + formdata-polyfill@4.0.10: resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} engines: {node: '>=12.20.0'} - formidable@2.1.5: - resolution: {integrity: sha512-Oz5Hwvwak/DCaXVVUtPn4oLMLLy1CdclLKO1LFgU7XzDpVMUU5UjlSLpGMocyQNNk8F6IJW9M/YdooSn2MRI+Q==} - formidable@3.5.4: resolution: {integrity: sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==} engines: {node: '>=14.0.0'} @@ -3392,8 +3185,8 @@ packages: i18next-browser-languagedetector@8.2.0: resolution: {integrity: sha512-P+3zEKLnOF0qmiesW383vsLdtQVyKtCNA9cjSoKCppTKPQVfKd2W8hbVo5ZhNJKDqeM7BOcvNoKJOjpHh4Js9g==} - i18next@25.2.1: - resolution: {integrity: sha512-+UoXK5wh+VlE1Zy5p6MjcvctHXAhRwQKCxiJD8noKZzIXmnAX8gdHX5fLPA3MEVxEN4vbZkQFy8N0LyD9tUqPw==} + i18next@25.3.2: + resolution: {integrity: sha512-JSnbZDxRVbphc5jiptxr3o2zocy5dEqpVm9qCGdJwRNO+9saUJS0/u4LnM/13C23fUEWxAylPqKU/NpMV/IjqA==} peerDependencies: typescript: ^5 peerDependenciesMeta: @@ -3431,6 +3224,10 @@ packages: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} + ip-address@10.0.1: + resolution: {integrity: sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==} + engines: {node: '>= 12'} + ip-address@9.0.5: resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} engines: {node: '>= 12'} @@ -3592,8 +3389,8 @@ packages: jose@5.10.0: resolution: {integrity: sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==} - jose@6.0.11: - resolution: {integrity: sha512-QxG7EaliDARm1O1S8BGakqncGT9s25bKL1WSf6/oa17Tkqwi8D2ZNglqCF+DsYF88/rV66Q/Q2mFAy697E1DUg==} + jose@6.0.12: + resolution: {integrity: sha512-T8xypXs8CpmiIi78k0E+Lk7T2zlK4zDyg+o1CZ4AkOHgDg98ogdP2BeZ61lTFKFyoEwJ9RgAgN+SdM3iPgNonQ==} js-cookie@3.0.5: resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==} @@ -3612,8 +3409,8 @@ packages: jsbn@1.1.0: resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} - jsdom@26.0.0: - resolution: {integrity: sha512-BZYDGVAIriBWTpIxYzrXjv3E/4u8+/pSG5bQdIYCbNCGOvsPkDQfTVLAIXAf9ETdCpduCVTkDe2NNZ8NIwUVzw==} + jsdom@26.1.0: + resolution: {integrity: sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==} engines: {node: '>=18'} peerDependencies: canvas: ^3.0.0 @@ -3762,6 +3559,9 @@ packages: loupe@3.1.3: resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} + loupe@3.2.0: + resolution: {integrity: sha512-2NCfZcT5VGVNX9mSZIxLRkEAegDGBpuQZBy13desuHeVORmBDyAET4TkJr4SjqQy3A8JDofMN6LpkK8Xcm/dlw==} + lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} @@ -3779,8 +3579,8 @@ packages: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} - lucide-react@0.515.0: - resolution: {integrity: sha512-Sy7bY0MeicRm2pzrnoHm2h6C1iVoeHyBU2fjdQDsXGP51fhkhau1/ZV/dzrcxEmAKsxYb6bGaIsMnGHuQ5s0dw==} + lucide-react@0.525.0: + resolution: {integrity: sha512-Tm1txJ2OkymCGkvwoHt33Y2JpN5xucVq1slHcgE6Lk0WjDfjgKWor5CdVER8U6DvcfMwh4M8XxmpTiyzfmfDYQ==} peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -3913,8 +3713,8 @@ packages: mocha-froth@0.2.10: resolution: {integrity: sha512-xyJqAYtm2zjrkG870hjeSVvGgS4Dc9tRokmN6R7XLgBKhdtAJ1ytU6zL045djblfHaPyTkSerQU4wqcjsv7Aew==} - mocha@11.6.0: - resolution: {integrity: sha512-i0JVb+OUBqw63X/1pC3jCyJsqYisgxySBbsQa8TKvefpA1oEnw7JXxXnftfMHRsw7bEEVGRtVlHcDYXBa7FzVw==} + mocha@11.7.1: + resolution: {integrity: sha512-5EK+Cty6KheMS/YLPPMJC64g5V61gIR25KsRItHw6x4hEKT6Njp1n9LOlH4gpevuwMVS66SXaBBpg+RWZkza4A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true @@ -3970,8 +3770,8 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - nwsapi@2.2.20: - resolution: {integrity: sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==} + nwsapi@2.2.21: + resolution: {integrity: sha512-o6nIY3qwiSXl7/LuOU0Dmuctd34Yay0yeuZRLFmDPrrdHpXKFndPj3hM+YEPVHYC5fx2otBx4Ilc/gyYSAUaIA==} object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} @@ -4001,8 +3801,8 @@ packages: resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} engines: {node: '>= 0.4'} - oidc-provider@9.1.3: - resolution: {integrity: sha512-DaiiCllAr+y33M2HzTRRpV7/jmcZBSfIXaDv0eHURIV85N0O+QUqtjVtPY+viCwHKBRGWwfShWWFKddPUxpAWw==} + oidc-provider@9.3.0: + resolution: {integrity: sha512-JVocwYM+Fs76nOCED2hMf3iMfrzhN4jISmCYVuFhBEnZiFk3QlODzQXkO1XS/Spw8VwRlKxwIl3otkiintFIjw==} oidc-token-hash@5.1.0: resolution: {integrity: sha512-y0W+X7Ppo7oZX6eovsRkuzcSM40Bicg2JEJkDJ4irIt1wsYAP5MLSNv+QAogO8xivMffw/9OvV3um1pxXgt1uA==} @@ -4012,18 +3812,21 @@ packages: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} - on-headers@1.0.2: - resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + on-headers@1.1.0: + resolution: {integrity: sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==} engines: {node: '>= 0.8'} once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - oniguruma-to-es@3.1.1: - resolution: {integrity: sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==} + oniguruma-parser@0.12.1: + resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==} - openapi-backend@5.12.0: - resolution: {integrity: sha512-tD4Ak8w5XBlGVi4gso/QNbxcfrj3j6ypuKg9bx7l6hQaeMVxEdf5Ro8M/SVoNg7L8VptzIkwE8Lp3H+Ba88hWA==} + oniguruma-to-es@4.3.3: + resolution: {integrity: sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==} + + openapi-backend@5.13.0: + resolution: {integrity: sha512-dE2f0MCpL2ZKctVG4w+Nl+1C4GQput5dQ4QYy6XeblGvM2Z1b3JcP2FzL6DrLzzDYEKTLgAaQM3jD7yhftwKSg==} engines: {node: '>=12.0.0'} openapi-schema-validation@0.4.2: @@ -4080,6 +3883,9 @@ packages: parse5@7.2.1: resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} + parse5@7.3.0: + resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -4130,13 +3936,17 @@ packages: resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} engines: {node: '>=12'} - playwright-core@1.53.0: - resolution: {integrity: sha512-mGLg8m0pm4+mmtB7M89Xw/GSqoNC+twivl8ITteqvAndachozYe2ZA7srU6uleV1vEdAHYqjq+SV8SNxRRFYBw==} + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + + playwright-core@1.54.1: + resolution: {integrity: sha512-Nbjs2zjj0htNhzgiy5wu+3w09YetDx5pkrpI/kZotDlDUaYk0HVA5xrBVPdow4SAUIlhgKcJeJg4GRKW6xHusA==} engines: {node: '>=18'} hasBin: true - playwright@1.53.0: - resolution: {integrity: sha512-ghGNnIEYZC4E+YtclRn4/p6oYbdPiASELBIYkBXfaTVKreQUYbMUYQDwS12a8F0/HtIjr/CkGjtwABeFPGcS4Q==} + playwright@1.54.1: + resolution: {integrity: sha512-peWpSwIBmSLi6aW2auvrUtf2DqY16YYcCMO8rTVx486jKmDTJg7UAhyrraP98GB8BoPURZP8+nxO7TSd4cPr5g==} engines: {node: '>=18'} hasBin: true @@ -4144,13 +3954,10 @@ packages: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} - postcss@8.5.3: - resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} - preact@10.26.4: - resolution: {integrity: sha512-KJhO7LBFTjP71d83trW+Ilnjbo+ySsaAgCfXOXUlmGzJ4ygYPWmysm77yg4emwfmoz3b22yvH5IsVFHbhUaH5w==} - prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -4221,14 +4028,14 @@ packages: peerDependencies: react: ^19.1.0 - react-hook-form@7.57.0: - resolution: {integrity: sha512-RbEks3+cbvTP84l/VXGUZ+JMrKOS8ykQCRYdm5aYsxnDquL0vspsyNhGRO7pcH6hsZqWlPOjLye7rJqdtdAmlg==} + react-hook-form@7.61.1: + resolution: {integrity: sha512-2vbXUFDYgqEgM2RcXcAT2PwDW/80QARi+PKmHy5q2KhuKvOlG8iIYgf7eIlIANR5trW9fJbP4r5aub3a4egsew==} engines: {node: '>=18.0.0'} peerDependencies: react: ^16.8.0 || ^17 || ^18 || ^19 - react-i18next@15.5.3: - resolution: {integrity: sha512-ypYmOKOnjqPEJZO4m1BI0kS8kWqkBNsKYyhVUfij0gvjy9xJNoG/VcGkxq5dRlVwzmrmY1BQMAmpbbUBLwC4Kw==} + react-i18next@15.6.1: + resolution: {integrity: sha512-uGrzSsOUUe2sDBG/+FJq2J1MM+Y4368/QW8OLEKSFvnDflHBbZhSd1u3UkW0Z06rMhZmnB/AQrhCpYfE5/5XNg==} peerDependencies: i18next: '>= 23.2.3' react: '>= 16.8.0' @@ -4263,15 +4070,15 @@ packages: '@types/react': optional: true - react-router-dom@7.6.2: - resolution: {integrity: sha512-Q8zb6VlTbdYKK5JJBLQEN06oTUa/RAbG/oQS1auK1I0TbJOXktqm+QENEVJU6QvWynlXPRBXI3fiOQcSEA78rA==} + react-router-dom@7.7.1: + resolution: {integrity: sha512-bavdk2BA5r3MYalGKZ01u8PGuDBloQmzpBZVhDLrOOv1N943Wq6dcM9GhB3x8b7AbqPMEezauv4PeGkAJfy7FQ==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' react-dom: '>=18' - react-router@7.6.2: - resolution: {integrity: sha512-U7Nv3y+bMimgWjhlT5CRdzHPu2/KVmqPwKUCChW8en5P3znxUqwlYFlbmyj8Rgp1SF6zs5X4+77kBVknkg6a0w==} + react-router@7.7.1: + resolution: {integrity: sha512-jVKHXoWRIsD/qS6lvGveckwb862EekvapdHJN/cGmzw40KnJH5gg53ujOJ4qX6EKIK9LSBfFed/xiQ5yeXNrUA==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' @@ -4507,8 +4314,8 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shiki@2.5.0: - resolution: {integrity: sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==} + shiki@3.9.1: + resolution: {integrity: sha512-HogZ8nMnv9VAQMrG+P7BleJFhrKHm3fi6CYyHRbUu61gJ0lpqLr6ecYEui31IYG1Cn9Bad7N2vf332iXHnn0bQ==} side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} @@ -4661,21 +4468,20 @@ packages: strip-literal@3.0.0: resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==} - superagent@10.2.1: - resolution: {integrity: sha512-O+PCv11lgTNJUzy49teNAWLjBZfc+A1enOwTpLlH6/rsvKcTwcdTT8m9azGkVqM7HBl5jpyZ7KTPhHweokBcdg==} + superagent@10.2.2: + resolution: {integrity: sha512-vWMq11OwWCC84pQaFPzF/VO3BrjkCeewuvJgt1jfV0499Z1QSAWN4EqfMM5WlFDDX9/oP8JjlDKpblrmEoyu4Q==} engines: {node: '>=14.18.0'} - superagent@8.1.2: - resolution: {integrity: sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==} - engines: {node: '>=6.4.0 <13 || >=14'} - deprecated: Please upgrade to v9.0.0+ as we have fixed a public vulnerability with formidable dependency. Note that v9.0.0+ requires Node.js v14.18.0+. See https://github.com/ladjs/superagent/pull/1800 for insight. This project is supported and maintained by the team at Forward Email @ https://forwardemail.net + superagent@10.2.3: + resolution: {integrity: sha512-y/hkYGeXAj7wUMjxRbB21g/l6aAEituGXM9Rwl4o20+SX3e8YOSV6BxFXl+dL3Uk0mjSL3kCbNkwURm8/gEDig==} + engines: {node: '>=14.18.0'} superjson@2.2.2: resolution: {integrity: sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==} engines: {node: '>=16'} - supertest@7.1.1: - resolution: {integrity: sha512-aI59HBTlG9e2wTjxGJV+DygfNLgnWbGdZxiA/sgrnNNikIW8lbDvCtF6RnhZoJ82nU7qv7ZLjrvWqCEm52fAmw==} + supertest@7.1.4: + resolution: {integrity: sha512-tjLPs7dVyqgItVFirHYqe2T+MfWc2VOBQ8QFKKbWTA3PU7liZR8zoSpAi/C1k1ilm9RsXIKYf197oap9wXGVYg==} engines: {node: '>=14.18.0'} supports-color@7.2.0: @@ -4724,16 +4530,12 @@ packages: tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - tinyglobby@0.2.13: - resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==} - engines: {node: '>=12.0.0'} - tinyglobby@0.2.14: resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} engines: {node: '>=12.0.0'} - tinypool@1.1.0: - resolution: {integrity: sha512-7CotroY9a8DKsKprEy/a14aCCm8jYVmR7aFy4fpkZM8sdpNJbKkixuNjgM50yCmip2ezc8z4N7k3oe2+rfRJCQ==} + tinypool@1.1.1: + resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} engines: {node: ^18.0.0 || >=20.0.0} tinyrainbow@2.0.0: @@ -4744,11 +4546,11 @@ packages: resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==} engines: {node: '>=14.0.0'} - tldts-core@6.1.85: - resolution: {integrity: sha512-DTjUVvxckL1fIoPSb3KE7ISNtkWSawZdpfxGxwiIrZoO6EbHVDXXUIlIuWympPaeS+BLGyggozX/HTMsRAdsoA==} + tldts-core@6.1.86: + resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==} - tldts@6.1.85: - resolution: {integrity: sha512-gBdZ1RjCSevRPFix/hpaUWeak2/RNUZB4/8frF1r5uYMHjFptkiT0JXIebWvgI/0ZHXvxaUDDJshiA0j6GdL3w==} + tldts@6.1.86: + resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==} hasBin: true to-regex-range@5.0.1: @@ -4763,8 +4565,8 @@ packages: resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} engines: {node: '>=16'} - tr46@5.1.0: - resolution: {integrity: sha512-IUWnUK7ADYR5Sl1fZlO1INDUhVhatWl7BtJWsIhwJ0UAK7ilzzIa8uIqOO/aYVWHZPJkKbEL+362wrzoeRF7bw==} + tr46@5.1.1: + resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==} engines: {node: '>=18'} trim-lines@3.0.1: @@ -4949,66 +4751,35 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vite-node@3.2.3: - resolution: {integrity: sha512-gc8aAifGuDIpZHrPjuHyP4dpQmYXqWw7D1GmDnWeNWP654UEXzVfQ5IHPSK5HaHkwB/+p1atpYpSdw/2kOv8iQ==} + vite-node@3.2.4: + resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true - vite-plugin-static-copy@3.0.0: - resolution: {integrity: sha512-Uki9pPUQ4ZnoMEdIFabvoh9h6Bh9Q1m3iF7BrZvoiF30reREpJh2gZb4jOnW1/uYFzyRiLCmFSkM+8hwiq1vWQ==} + vite-plugin-static-copy@3.1.1: + resolution: {integrity: sha512-oR53SkL5cX4KT1t18E/xU50vJDo0N8oaHza4EMk0Fm+2/u6nQivxavOfrDk3udWj+dizRizB/QnBvJOOQrTTAQ==} engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: - vite: ^5.0.0 || ^6.0.0 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 vite-plugin-svgr@4.3.0: resolution: {integrity: sha512-Jy9qLB2/PyWklpYy0xk0UU3TlU0t2UMpJXZvf+hWII1lAmRHrOUKi11Uw8N3rxoNk7atZNYO3pR3vI1f7oi+6w==} peerDependencies: vite: '>=2.6.0' - vite@5.4.19: - resolution: {integrity: sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==} - engines: {node: ^18.0.0 || >=20.0.0} + vite@7.0.6: + resolution: {integrity: sha512-MHFiOENNBd+Bd9uvc8GEsIzdkn1JxMmEeYX35tI3fv0sJBUTfW5tQsoaOwuY4KhBI09A3dUJ/DXf2yxPVPUceg==} + engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 - less: '*' - lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - - vite@6.3.5: - resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@types/node': ^20.19.0 || >=22.12.0 jiti: '>=1.21.0' - less: '*' + less: ^4.0.0 lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 terser: ^5.16.0 tsx: ^4.8.1 yaml: ^2.4.2 @@ -5036,28 +4807,31 @@ packages: yaml: optional: true - vitepress@1.6.3: - resolution: {integrity: sha512-fCkfdOk8yRZT8GD9BFqusW3+GggWYZ/rYncOfmgcDtP3ualNHCAg+Robxp2/6xfH1WwPHtGpPwv7mbA3qomtBw==} + vitepress@2.0.0-alpha.9: + resolution: {integrity: sha512-oUdZiT8ZCLf80Nw02Ha+v25aaabwik6iSMTEBXg46bMypNS/5i6AfMgFqpTuR5l3qG9XfNmau/SLT0sRiks2Zg==} hasBin: true peerDependencies: markdown-it-mathjax3: ^4 + oxc-minify: ^0.78.0 postcss: ^8 peerDependenciesMeta: markdown-it-mathjax3: optional: true + oxc-minify: + optional: true postcss: optional: true - vitest@3.2.3: - resolution: {integrity: sha512-E6U2ZFXe3N/t4f5BwUaVCKRLHqUpk1CBWeMh78UT4VaTPH/2dyvH6ALl29JTovEPu9dVKr/K/J4PkXgrMbw4Ww==} + vitest@3.2.4: + resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/debug': ^4.1.12 '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.2.3 - '@vitest/ui': 3.2.3 + '@vitest/browser': 3.2.4 + '@vitest/ui': 3.2.4 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -5080,8 +4854,8 @@ packages: resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} engines: {node: '>=0.10.0'} - vue@3.5.13: - resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==} + vue@3.5.18: + resolution: {integrity: sha512-7W4Y4ZbMiQ3SEo+m9lnoNpV9xG7QVMLa+/0RFwwiAVkeYoyGXqWE85jabU4pllJNUzqfLShJ5YLptewhCWUgNA==} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -5171,8 +4945,8 @@ packages: utf-8-validate: optional: true - ws@8.18.1: - resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==} + ws@8.18.3: + resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -5229,8 +5003,8 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - zustand@5.0.5: - resolution: {integrity: sha512-mILtRfKW9xM47hqxGIxCv12gXusoY/xTSHBYApXozR0HmQv299whhBeeAcRy+KrPPybzosvJBCOmVjq6x12fCg==} + zustand@5.0.6: + resolution: {integrity: sha512-ihAqNeUVhe0MAD+X8M5UzqyZ9k3FFZLBTtqo6JLPwV53cbRB/mJwBI0PxcIgqhBBHlEs8G45OTDTMq3gNcLq3A==} engines: {node: '>=12.20.0'} peerDependencies: '@types/react': '>=18.0.0' @@ -5252,110 +5026,6 @@ packages: snapshots: - '@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.23.2)(algoliasearch@5.23.2)': - dependencies: - '@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.23.2)(algoliasearch@5.23.2) - '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.23.2)(algoliasearch@5.23.2) - transitivePeerDependencies: - - '@algolia/client-search' - - algoliasearch - - search-insights - - '@algolia/autocomplete-plugin-algolia-insights@1.17.7(@algolia/client-search@5.23.2)(algoliasearch@5.23.2)': - dependencies: - '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.23.2)(algoliasearch@5.23.2) - transitivePeerDependencies: - - '@algolia/client-search' - - algoliasearch - - '@algolia/autocomplete-preset-algolia@1.17.7(@algolia/client-search@5.23.2)(algoliasearch@5.23.2)': - dependencies: - '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.23.2)(algoliasearch@5.23.2) - '@algolia/client-search': 5.23.2 - algoliasearch: 5.23.2 - - '@algolia/autocomplete-shared@1.17.7(@algolia/client-search@5.23.2)(algoliasearch@5.23.2)': - dependencies: - '@algolia/client-search': 5.23.2 - algoliasearch: 5.23.2 - - '@algolia/client-abtesting@5.23.2': - dependencies: - '@algolia/client-common': 5.23.2 - '@algolia/requester-browser-xhr': 5.23.2 - '@algolia/requester-fetch': 5.23.2 - '@algolia/requester-node-http': 5.23.2 - - '@algolia/client-analytics@5.23.2': - dependencies: - '@algolia/client-common': 5.23.2 - '@algolia/requester-browser-xhr': 5.23.2 - '@algolia/requester-fetch': 5.23.2 - '@algolia/requester-node-http': 5.23.2 - - '@algolia/client-common@5.23.2': {} - - '@algolia/client-insights@5.23.2': - dependencies: - '@algolia/client-common': 5.23.2 - '@algolia/requester-browser-xhr': 5.23.2 - '@algolia/requester-fetch': 5.23.2 - '@algolia/requester-node-http': 5.23.2 - - '@algolia/client-personalization@5.23.2': - dependencies: - '@algolia/client-common': 5.23.2 - '@algolia/requester-browser-xhr': 5.23.2 - '@algolia/requester-fetch': 5.23.2 - '@algolia/requester-node-http': 5.23.2 - - '@algolia/client-query-suggestions@5.23.2': - dependencies: - '@algolia/client-common': 5.23.2 - '@algolia/requester-browser-xhr': 5.23.2 - '@algolia/requester-fetch': 5.23.2 - '@algolia/requester-node-http': 5.23.2 - - '@algolia/client-search@5.23.2': - dependencies: - '@algolia/client-common': 5.23.2 - '@algolia/requester-browser-xhr': 5.23.2 - '@algolia/requester-fetch': 5.23.2 - '@algolia/requester-node-http': 5.23.2 - - '@algolia/ingestion@1.23.2': - dependencies: - '@algolia/client-common': 5.23.2 - '@algolia/requester-browser-xhr': 5.23.2 - '@algolia/requester-fetch': 5.23.2 - '@algolia/requester-node-http': 5.23.2 - - '@algolia/monitoring@1.23.2': - dependencies: - '@algolia/client-common': 5.23.2 - '@algolia/requester-browser-xhr': 5.23.2 - '@algolia/requester-fetch': 5.23.2 - '@algolia/requester-node-http': 5.23.2 - - '@algolia/recommend@5.23.2': - dependencies: - '@algolia/client-common': 5.23.2 - '@algolia/requester-browser-xhr': 5.23.2 - '@algolia/requester-fetch': 5.23.2 - '@algolia/requester-node-http': 5.23.2 - - '@algolia/requester-browser-xhr@5.23.2': - dependencies: - '@algolia/client-common': 5.23.2 - - '@algolia/requester-fetch@5.23.2': - dependencies: - '@algolia/client-common': 5.23.2 - - '@algolia/requester-node-http@5.23.2': - dependencies: - '@algolia/client-common': 5.23.2 - '@ampproject/remapping@2.3.0': dependencies: '@jridgewell/gen-mapping': 0.3.8 @@ -5367,12 +5037,12 @@ snapshots: '@types/json-schema': 7.0.15 js-yaml: 4.1.0 - '@asamuzakjp/css-color@3.1.1': + '@asamuzakjp/css-color@3.2.0': dependencies: - '@csstools/css-calc': 2.1.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) - '@csstools/css-color-parser': 3.0.8(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) - '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) - '@csstools/css-tokenizer': 3.0.3 + '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-color-parser': 3.0.10(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 lru-cache: 10.4.3 '@babel/code-frame@7.26.2': @@ -5437,8 +5107,12 @@ snapshots: '@babel/helper-string-parser@7.25.9': {} + '@babel/helper-string-parser@7.27.1': {} + '@babel/helper-validator-identifier@7.25.9': {} + '@babel/helper-validator-identifier@7.27.1': {} + '@babel/helper-validator-option@7.25.9': {} '@babel/helpers@7.27.0': @@ -5450,6 +5124,10 @@ snapshots: dependencies: '@babel/types': 7.27.0 + '@babel/parser@7.28.0': + dependencies: + '@babel/types': 7.28.2 + '@babel/runtime@7.27.6': {} '@babel/template@7.27.0': @@ -5475,47 +5153,34 @@ snapshots: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 + '@babel/types@7.28.2': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@csstools/color-helpers@5.0.2': {} - '@csstools/css-calc@2.1.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)': + '@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': dependencies: - '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) - '@csstools/css-tokenizer': 3.0.3 + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 - '@csstools/css-color-parser@3.0.8(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)': + '@csstools/css-color-parser@3.0.10(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': dependencies: '@csstools/color-helpers': 5.0.2 - '@csstools/css-calc': 2.1.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) - '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) - '@csstools/css-tokenizer': 3.0.3 + '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 - '@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3)': + '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)': dependencies: - '@csstools/css-tokenizer': 3.0.3 + '@csstools/css-tokenizer': 3.0.4 - '@csstools/css-tokenizer@3.0.3': {} + '@csstools/css-tokenizer@3.0.4': {} - '@docsearch/css@3.8.2': {} + '@docsearch/css@4.0.0-beta.5': {} - '@docsearch/js@3.8.2(@algolia/client-search@5.23.2)': - dependencies: - '@docsearch/react': 3.8.2(@algolia/client-search@5.23.2) - preact: 10.26.4 - transitivePeerDependencies: - - '@algolia/client-search' - - '@types/react' - - react - - react-dom - - search-insights - - '@docsearch/react@3.8.2(@algolia/client-search@5.23.2)': - dependencies: - '@algolia/autocomplete-core': 1.17.7(@algolia/client-search@5.23.2)(algoliasearch@5.23.2) - '@algolia/autocomplete-preset-algolia': 1.17.7(@algolia/client-search@5.23.2)(algoliasearch@5.23.2) - '@docsearch/css': 3.8.2 - algoliasearch: 5.23.2 - transitivePeerDependencies: - - '@algolia/client-search' + '@docsearch/js@4.0.0-beta.5': {} '@emnapi/core@1.4.0': dependencies: @@ -5533,233 +5198,167 @@ snapshots: tslib: 2.8.1 optional: true - '@esbuild/aix-ppc64@0.21.5': - optional: true - - '@esbuild/aix-ppc64@0.25.3': - optional: true - '@esbuild/aix-ppc64@0.25.5': optional: true - '@esbuild/android-arm64@0.21.5': - optional: true - - '@esbuild/android-arm64@0.25.3': + '@esbuild/aix-ppc64@0.25.8': optional: true '@esbuild/android-arm64@0.25.5': optional: true - '@esbuild/android-arm@0.21.5': - optional: true - - '@esbuild/android-arm@0.25.3': + '@esbuild/android-arm64@0.25.8': optional: true '@esbuild/android-arm@0.25.5': optional: true - '@esbuild/android-x64@0.21.5': - optional: true - - '@esbuild/android-x64@0.25.3': + '@esbuild/android-arm@0.25.8': optional: true '@esbuild/android-x64@0.25.5': optional: true - '@esbuild/darwin-arm64@0.21.5': - optional: true - - '@esbuild/darwin-arm64@0.25.3': + '@esbuild/android-x64@0.25.8': optional: true '@esbuild/darwin-arm64@0.25.5': optional: true - '@esbuild/darwin-x64@0.21.5': - optional: true - - '@esbuild/darwin-x64@0.25.3': + '@esbuild/darwin-arm64@0.25.8': optional: true '@esbuild/darwin-x64@0.25.5': optional: true - '@esbuild/freebsd-arm64@0.21.5': - optional: true - - '@esbuild/freebsd-arm64@0.25.3': + '@esbuild/darwin-x64@0.25.8': optional: true '@esbuild/freebsd-arm64@0.25.5': optional: true - '@esbuild/freebsd-x64@0.21.5': - optional: true - - '@esbuild/freebsd-x64@0.25.3': + '@esbuild/freebsd-arm64@0.25.8': optional: true '@esbuild/freebsd-x64@0.25.5': optional: true - '@esbuild/linux-arm64@0.21.5': - optional: true - - '@esbuild/linux-arm64@0.25.3': + '@esbuild/freebsd-x64@0.25.8': optional: true '@esbuild/linux-arm64@0.25.5': optional: true - '@esbuild/linux-arm@0.21.5': - optional: true - - '@esbuild/linux-arm@0.25.3': + '@esbuild/linux-arm64@0.25.8': optional: true '@esbuild/linux-arm@0.25.5': optional: true - '@esbuild/linux-ia32@0.21.5': - optional: true - - '@esbuild/linux-ia32@0.25.3': + '@esbuild/linux-arm@0.25.8': optional: true '@esbuild/linux-ia32@0.25.5': optional: true - '@esbuild/linux-loong64@0.21.5': - optional: true - - '@esbuild/linux-loong64@0.25.3': + '@esbuild/linux-ia32@0.25.8': optional: true '@esbuild/linux-loong64@0.25.5': optional: true - '@esbuild/linux-mips64el@0.21.5': - optional: true - - '@esbuild/linux-mips64el@0.25.3': + '@esbuild/linux-loong64@0.25.8': optional: true '@esbuild/linux-mips64el@0.25.5': optional: true - '@esbuild/linux-ppc64@0.21.5': - optional: true - - '@esbuild/linux-ppc64@0.25.3': + '@esbuild/linux-mips64el@0.25.8': optional: true '@esbuild/linux-ppc64@0.25.5': optional: true - '@esbuild/linux-riscv64@0.21.5': - optional: true - - '@esbuild/linux-riscv64@0.25.3': + '@esbuild/linux-ppc64@0.25.8': optional: true '@esbuild/linux-riscv64@0.25.5': optional: true - '@esbuild/linux-s390x@0.21.5': - optional: true - - '@esbuild/linux-s390x@0.25.3': + '@esbuild/linux-riscv64@0.25.8': optional: true '@esbuild/linux-s390x@0.25.5': optional: true - '@esbuild/linux-x64@0.21.5': - optional: true - - '@esbuild/linux-x64@0.25.3': + '@esbuild/linux-s390x@0.25.8': optional: true '@esbuild/linux-x64@0.25.5': optional: true - '@esbuild/netbsd-arm64@0.25.3': + '@esbuild/linux-x64@0.25.8': optional: true '@esbuild/netbsd-arm64@0.25.5': optional: true - '@esbuild/netbsd-x64@0.21.5': - optional: true - - '@esbuild/netbsd-x64@0.25.3': + '@esbuild/netbsd-arm64@0.25.8': optional: true '@esbuild/netbsd-x64@0.25.5': optional: true - '@esbuild/openbsd-arm64@0.25.3': + '@esbuild/netbsd-x64@0.25.8': optional: true '@esbuild/openbsd-arm64@0.25.5': optional: true - '@esbuild/openbsd-x64@0.21.5': - optional: true - - '@esbuild/openbsd-x64@0.25.3': + '@esbuild/openbsd-arm64@0.25.8': optional: true '@esbuild/openbsd-x64@0.25.5': optional: true - '@esbuild/sunos-x64@0.21.5': + '@esbuild/openbsd-x64@0.25.8': optional: true - '@esbuild/sunos-x64@0.25.3': + '@esbuild/openharmony-arm64@0.25.8': optional: true '@esbuild/sunos-x64@0.25.5': optional: true - '@esbuild/win32-arm64@0.21.5': - optional: true - - '@esbuild/win32-arm64@0.25.3': + '@esbuild/sunos-x64@0.25.8': optional: true '@esbuild/win32-arm64@0.25.5': optional: true - '@esbuild/win32-ia32@0.21.5': - optional: true - - '@esbuild/win32-ia32@0.25.3': + '@esbuild/win32-arm64@0.25.8': optional: true '@esbuild/win32-ia32@0.25.5': optional: true - '@esbuild/win32-x64@0.21.5': - optional: true - - '@esbuild/win32-x64@0.25.3': + '@esbuild/win32-ia32@0.25.8': optional: true '@esbuild/win32-x64@0.25.5': optional: true - '@eslint-community/eslint-utils@4.7.0(eslint@9.28.0)': + '@esbuild/win32-x64@0.25.8': + optional: true + + '@eslint-community/eslint-utils@4.7.0(eslint@9.32.0)': dependencies: - eslint: 9.28.0 + eslint: 9.32.0 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} - '@eslint/config-array@0.20.1': + '@eslint/config-array@0.21.0': dependencies: '@eslint/object-schema': 2.1.6 debug: 4.4.1(supports-color@8.1.1) @@ -5767,13 +5366,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.2.3': {} + '@eslint/config-helpers@0.3.0': {} - '@eslint/core@0.14.0': + '@eslint/core@0.15.0': dependencies: '@types/json-schema': 7.0.15 - '@eslint/core@0.15.0': + '@eslint/core@0.15.1': dependencies: '@types/json-schema': 7.0.15 @@ -5791,28 +5390,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.28.0': {} + '@eslint/js@9.32.0': {} '@eslint/object-schema@2.1.6': {} - '@eslint/plugin-kit@0.3.2': + '@eslint/plugin-kit@0.3.4': dependencies: - '@eslint/core': 0.15.0 + '@eslint/core': 0.15.1 levn: 0.4.1 - '@etherpad/express-session@1.18.4': - dependencies: - cookie: 0.4.2 - cookie-signature: 1.0.6 - debug: 4.4.0 - depd: 2.0.0 - on-headers: 1.0.2 - parseurl: 1.3.3 - safe-buffer: 5.2.1 - uid-safe: 2.1.5 - transitivePeerDependencies: - - supports-color - '@humanfs/core@0.19.1': {} '@humanfs/node@0.16.6': @@ -5826,7 +5412,7 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} - '@iconify-json/simple-icons@1.2.30': + '@iconify-json/simple-icons@1.2.45': dependencies: '@iconify/types': 2.0.0 @@ -5864,11 +5450,14 @@ snapshots: dependencies: vary: 1.1.2 - '@koa/router@13.1.0': + '@koa/router@13.1.1': dependencies: + debug: 4.4.1(supports-color@8.1.1) http-errors: 2.0.0 koa-compose: 4.1.0 path-to-regexp: 6.3.0 + transitivePeerDependencies: + - supports-color '@napi-rs/wasm-runtime@0.2.8': dependencies: @@ -5900,9 +5489,9 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@playwright/test@1.53.0': + '@playwright/test@1.54.1': dependencies: - playwright: 1.53.0 + playwright: 1.54.1 '@radix-ui/primitive@1.1.2': {} @@ -6118,6 +5707,8 @@ snapshots: '@rolldown/pluginutils@1.0.0-beta.11': {} + '@rolldown/pluginutils@1.0.0-beta.29': {} + '@rollup/pluginutils@5.1.4(rollup@4.40.1)': dependencies: '@types/estree': 1.0.8 @@ -6192,40 +5783,38 @@ snapshots: '@scarf/scarf@1.4.0': {} - '@shikijs/core@2.5.0': + '@shikijs/core@3.9.1': dependencies: - '@shikijs/engine-javascript': 2.5.0 - '@shikijs/engine-oniguruma': 2.5.0 - '@shikijs/types': 2.5.0 + '@shikijs/types': 3.9.1 '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 hast-util-to-html: 9.0.5 - '@shikijs/engine-javascript@2.5.0': + '@shikijs/engine-javascript@3.9.1': dependencies: - '@shikijs/types': 2.5.0 + '@shikijs/types': 3.9.1 '@shikijs/vscode-textmate': 10.0.2 - oniguruma-to-es: 3.1.1 + oniguruma-to-es: 4.3.3 - '@shikijs/engine-oniguruma@2.5.0': + '@shikijs/engine-oniguruma@3.9.1': dependencies: - '@shikijs/types': 2.5.0 + '@shikijs/types': 3.9.1 '@shikijs/vscode-textmate': 10.0.2 - '@shikijs/langs@2.5.0': + '@shikijs/langs@3.9.1': dependencies: - '@shikijs/types': 2.5.0 + '@shikijs/types': 3.9.1 - '@shikijs/themes@2.5.0': + '@shikijs/themes@3.9.1': dependencies: - '@shikijs/types': 2.5.0 + '@shikijs/types': 3.9.1 - '@shikijs/transformers@2.5.0': + '@shikijs/transformers@3.9.1': dependencies: - '@shikijs/core': 2.5.0 - '@shikijs/types': 2.5.0 + '@shikijs/core': 3.9.1 + '@shikijs/types': 3.9.1 - '@shikijs/types@2.5.0': + '@shikijs/types@3.9.1': dependencies: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 @@ -6379,14 +5968,14 @@ snapshots: '@types/accepts@1.3.7': dependencies: - '@types/node': 24.0.1 + '@types/node': 24.1.0 '@types/async@3.2.24': {} '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 24.0.1 + '@types/node': 24.1.0 '@types/chai@5.2.2': dependencies: @@ -6394,10 +5983,14 @@ snapshots: '@types/connect@3.4.38': dependencies: - '@types/node': 24.0.1 + '@types/node': 24.1.0 '@types/content-disposition@0.5.9': {} + '@types/cookie-parser@1.4.9(@types/express@4.17.21)': + dependencies: + '@types/express': 4.17.21 + '@types/cookiejar@2.1.5': {} '@types/cookies@0.9.1': @@ -6405,11 +5998,11 @@ snapshots: '@types/connect': 3.4.38 '@types/express': 4.17.21 '@types/keygrip': 1.0.6 - '@types/node': 24.0.1 + '@types/node': 24.1.0 '@types/cors@2.8.17': dependencies: - '@types/node': 24.0.1 + '@types/node': 24.1.0 '@types/debug@4.1.12': dependencies: @@ -6423,11 +6016,15 @@ snapshots: '@types/express-serve-static-core@4.19.6': dependencies: - '@types/node': 24.0.1 + '@types/node': 24.1.0 '@types/qs': 6.9.18 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 + '@types/express-session@1.18.2': + dependencies: + '@types/express': 4.17.21 + '@types/express@4.17.21': dependencies: '@types/body-parser': 1.19.5 @@ -6437,11 +6034,11 @@ snapshots: '@types/formidable@3.4.5': dependencies: - '@types/node': 24.0.1 + '@types/node': 24.1.0 '@types/fs-extra@9.0.13': dependencies: - '@types/node': 24.0.1 + '@types/node': 24.1.0 '@types/hast@3.0.4': dependencies: @@ -6459,7 +6056,7 @@ snapshots: '@types/jsdom@21.1.7': dependencies: - '@types/node': 24.0.1 + '@types/node': 24.1.0 '@types/tough-cookie': 4.0.5 parse5: 7.2.1 @@ -6467,10 +6064,10 @@ snapshots: '@types/json5@0.0.29': {} - '@types/jsonwebtoken@9.0.9': + '@types/jsonwebtoken@9.0.10': dependencies: '@types/ms': 2.1.0 - '@types/node': 24.0.1 + '@types/node': 24.1.0 '@types/keygrip@1.0.6': {} @@ -6487,23 +6084,14 @@ snapshots: '@types/http-errors': 2.0.5 '@types/keygrip': 1.0.6 '@types/koa-compose': 3.2.8 - '@types/node': 24.0.1 - - '@types/linkify-it@5.0.0': {} + '@types/node': 24.1.0 '@types/lockfile@1.0.4': {} - '@types/markdown-it@14.1.2': - dependencies: - '@types/linkify-it': 5.0.0 - '@types/mdurl': 2.0.0 - '@types/mdast@4.0.4': dependencies: '@types/unist': 3.0.3 - '@types/mdurl@2.0.0': {} - '@types/methods@1.1.4': {} '@types/mime-types@3.0.1': {} @@ -6516,18 +6104,18 @@ snapshots: '@types/node-fetch@2.6.12': dependencies: - '@types/node': 24.0.1 + '@types/node': 24.1.0 form-data: 4.0.3 - '@types/node@24.0.1': + '@types/node@24.1.0': dependencies: undici-types: 7.8.0 - '@types/oidc-provider@9.1.0': + '@types/oidc-provider@9.1.1': dependencies: '@types/keygrip': 1.0.6 '@types/koa': 2.15.0 - '@types/node': 24.0.1 + '@types/node': 24.1.0 '@types/qs@6.9.18': {} @@ -6546,12 +6134,12 @@ snapshots: '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 24.0.1 + '@types/node': 24.1.0 '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 24.0.1 + '@types/node': 24.1.0 '@types/send': 0.17.4 '@types/sinon@17.0.4': @@ -6566,8 +6154,8 @@ snapshots: dependencies: '@types/cookiejar': 2.1.5 '@types/methods': 1.1.4 - '@types/node': 24.0.1 - form-data: 4.0.2 + '@types/node': 24.1.0 + form-data: 4.0.3 '@types/supertest@6.0.3': dependencies: @@ -6581,7 +6169,7 @@ snapshots: '@types/tar@6.1.13': dependencies: - '@types/node': 24.0.1 + '@types/node': 24.1.0 minipass: 4.2.8 '@types/tough-cookie@4.0.5': {} @@ -6596,15 +6184,15 @@ snapshots: '@types/whatwg-mimetype@3.0.2': {} - '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.28.0)(typescript@5.8.3))(eslint@9.28.0)(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.32.0)(typescript@5.8.3))(eslint@9.32.0)(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 7.18.0(eslint@9.28.0)(typescript@5.8.3) + '@typescript-eslint/parser': 7.18.0(eslint@9.32.0)(typescript@5.8.3) '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/type-utils': 7.18.0(eslint@9.28.0)(typescript@5.8.3) - '@typescript-eslint/utils': 7.18.0(eslint@9.28.0)(typescript@5.8.3) + '@typescript-eslint/type-utils': 7.18.0(eslint@9.32.0)(typescript@5.8.3) + '@typescript-eslint/utils': 7.18.0(eslint@9.32.0)(typescript@5.8.3) '@typescript-eslint/visitor-keys': 7.18.0 - eslint: 9.28.0 + eslint: 9.32.0 graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 @@ -6614,15 +6202,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.34.0(@typescript-eslint/parser@8.34.0(eslint@9.28.0)(typescript@5.8.3))(eslint@9.28.0)(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.8.3))(eslint@9.32.0)(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.34.0(eslint@9.28.0)(typescript@5.8.3) - '@typescript-eslint/scope-manager': 8.34.0 - '@typescript-eslint/type-utils': 8.34.0(eslint@9.28.0)(typescript@5.8.3) - '@typescript-eslint/utils': 8.34.0(eslint@9.28.0)(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.34.0 - eslint: 9.28.0 + '@typescript-eslint/parser': 8.38.0(eslint@9.32.0)(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.38.0 + '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0)(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0)(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.38.0 + eslint: 9.32.0 graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -6631,35 +6219,35 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.18.0(eslint@9.28.0)(typescript@5.8.3)': + '@typescript-eslint/parser@7.18.0(eslint@9.32.0)(typescript@5.8.3)': dependencies: '@typescript-eslint/scope-manager': 7.18.0 '@typescript-eslint/types': 7.18.0 '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.8.3) '@typescript-eslint/visitor-keys': 7.18.0 debug: 4.4.1(supports-color@8.1.1) - eslint: 9.28.0 + eslint: 9.32.0 optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.34.0(eslint@9.28.0)(typescript@5.8.3)': + '@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.8.3)': dependencies: - '@typescript-eslint/scope-manager': 8.34.0 - '@typescript-eslint/types': 8.34.0 - '@typescript-eslint/typescript-estree': 8.34.0(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.34.0 + '@typescript-eslint/scope-manager': 8.38.0 + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.38.0 debug: 4.4.1(supports-color@8.1.1) - eslint: 9.28.0 + eslint: 9.32.0 typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.34.0(typescript@5.8.3)': + '@typescript-eslint/project-service@8.38.0(typescript@5.8.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.34.0(typescript@5.8.3) - '@typescript-eslint/types': 8.34.0 + '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3) + '@typescript-eslint/types': 8.38.0 debug: 4.4.1(supports-color@8.1.1) typescript: 5.8.3 transitivePeerDependencies: @@ -6670,33 +6258,34 @@ snapshots: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 - '@typescript-eslint/scope-manager@8.34.0': + '@typescript-eslint/scope-manager@8.38.0': dependencies: - '@typescript-eslint/types': 8.34.0 - '@typescript-eslint/visitor-keys': 8.34.0 + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/visitor-keys': 8.38.0 - '@typescript-eslint/tsconfig-utils@8.34.0(typescript@5.8.3)': + '@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.8.3)': dependencies: typescript: 5.8.3 - '@typescript-eslint/type-utils@7.18.0(eslint@9.28.0)(typescript@5.8.3)': + '@typescript-eslint/type-utils@7.18.0(eslint@9.32.0)(typescript@5.8.3)': dependencies: '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.8.3) - '@typescript-eslint/utils': 7.18.0(eslint@9.28.0)(typescript@5.8.3) + '@typescript-eslint/utils': 7.18.0(eslint@9.32.0)(typescript@5.8.3) debug: 4.4.1(supports-color@8.1.1) - eslint: 9.28.0 + eslint: 9.32.0 ts-api-utils: 1.4.3(typescript@5.8.3) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.34.0(eslint@9.28.0)(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.38.0(eslint@9.32.0)(typescript@5.8.3)': dependencies: - '@typescript-eslint/typescript-estree': 8.34.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.34.0(eslint@9.28.0)(typescript@5.8.3) + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0)(typescript@5.8.3) debug: 4.4.1(supports-color@8.1.1) - eslint: 9.28.0 + eslint: 9.32.0 ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: @@ -6704,7 +6293,7 @@ snapshots: '@typescript-eslint/types@7.18.0': {} - '@typescript-eslint/types@8.34.0': {} + '@typescript-eslint/types@8.38.0': {} '@typescript-eslint/typescript-estree@7.18.0(typescript@5.8.3)': dependencies: @@ -6721,12 +6310,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.34.0(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@8.38.0(typescript@5.8.3)': dependencies: - '@typescript-eslint/project-service': 8.34.0(typescript@5.8.3) - '@typescript-eslint/tsconfig-utils': 8.34.0(typescript@5.8.3) - '@typescript-eslint/types': 8.34.0 - '@typescript-eslint/visitor-keys': 8.34.0 + '@typescript-eslint/project-service': 8.38.0(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3) + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/visitor-keys': 8.38.0 debug: 4.4.1(supports-color@8.1.1) fast-glob: 3.3.3 is-glob: 4.0.3 @@ -6737,24 +6326,24 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@7.18.0(eslint@9.28.0)(typescript@5.8.3)': + '@typescript-eslint/utils@7.18.0(eslint@9.32.0)(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0) '@typescript-eslint/scope-manager': 7.18.0 '@typescript-eslint/types': 7.18.0 '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.8.3) - eslint: 9.28.0 + eslint: 9.32.0 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/utils@8.34.0(eslint@9.28.0)(typescript@5.8.3)': + '@typescript-eslint/utils@8.38.0(eslint@9.32.0)(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0) - '@typescript-eslint/scope-manager': 8.34.0 - '@typescript-eslint/types': 8.34.0 - '@typescript-eslint/typescript-estree': 8.34.0(typescript@5.8.3) - eslint: 9.28.0 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0) + '@typescript-eslint/scope-manager': 8.38.0 + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) + eslint: 9.32.0 typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -6764,9 +6353,9 @@ snapshots: '@typescript-eslint/types': 7.18.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@8.34.0': + '@typescript-eslint/visitor-keys@8.38.0': dependencies: - '@typescript-eslint/types': 8.34.0 + '@typescript-eslint/types': 8.38.0 eslint-visitor-keys: 4.2.1 '@ungap/structured-clone@1.3.0': {} @@ -6818,161 +6407,156 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.3.3': optional: true - '@vitejs/plugin-react-swc@3.10.2(vite@6.3.5(@types/node@24.0.1)(tsx@4.20.3))': + '@vitejs/plugin-react-swc@3.10.2(vite@7.0.6(@types/node@24.1.0)(tsx@4.20.3))': dependencies: '@rolldown/pluginutils': 1.0.0-beta.11 '@swc/core': 1.12.1 - vite: 6.3.5(@types/node@24.0.1)(tsx@4.20.3) + vite: 7.0.6(@types/node@24.1.0)(tsx@4.20.3) transitivePeerDependencies: - '@swc/helpers' - '@vitejs/plugin-vue@5.2.3(vite@5.4.19(@types/node@24.0.1))(vue@3.5.13(typescript@5.8.3))': + '@vitejs/plugin-vue@6.0.1(vite@7.0.6(@types/node@24.1.0)(tsx@4.20.3))(vue@3.5.18(typescript@5.8.3))': dependencies: - vite: 5.4.19(@types/node@24.0.1) - vue: 3.5.13(typescript@5.8.3) + '@rolldown/pluginutils': 1.0.0-beta.29 + vite: 7.0.6(@types/node@24.1.0)(tsx@4.20.3) + vue: 3.5.18(typescript@5.8.3) - '@vitest/expect@3.2.3': + '@vitest/expect@3.2.4': dependencies: '@types/chai': 5.2.2 - '@vitest/spy': 3.2.3 - '@vitest/utils': 3.2.3 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.3(vite@6.3.5(@types/node@24.0.1)(tsx@4.20.3))': + '@vitest/mocker@3.2.4(vite@7.0.6(@types/node@24.1.0)(tsx@4.20.3))': dependencies: - '@vitest/spy': 3.2.3 + '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.3.5(@types/node@24.0.1)(tsx@4.20.3) + vite: 7.0.6(@types/node@24.1.0)(tsx@4.20.3) - '@vitest/pretty-format@3.2.3': + '@vitest/pretty-format@3.2.4': dependencies: tinyrainbow: 2.0.0 - '@vitest/runner@3.2.3': + '@vitest/runner@3.2.4': dependencies: - '@vitest/utils': 3.2.3 + '@vitest/utils': 3.2.4 pathe: 2.0.3 strip-literal: 3.0.0 - '@vitest/snapshot@3.2.3': + '@vitest/snapshot@3.2.4': dependencies: - '@vitest/pretty-format': 3.2.3 + '@vitest/pretty-format': 3.2.4 magic-string: 0.30.17 pathe: 2.0.3 - '@vitest/spy@3.2.3': + '@vitest/spy@3.2.4': dependencies: tinyspy: 4.0.3 - '@vitest/utils@3.2.3': + '@vitest/utils@3.2.4': dependencies: - '@vitest/pretty-format': 3.2.3 - loupe: 3.1.3 + '@vitest/pretty-format': 3.2.4 + loupe: 3.2.0 tinyrainbow: 2.0.0 - '@vue/compiler-core@3.5.13': + '@vue/compiler-core@3.5.18': dependencies: - '@babel/parser': 7.27.0 - '@vue/shared': 3.5.13 + '@babel/parser': 7.28.0 + '@vue/shared': 3.5.18 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.2.1 - '@vue/compiler-dom@3.5.13': + '@vue/compiler-dom@3.5.18': dependencies: - '@vue/compiler-core': 3.5.13 - '@vue/shared': 3.5.13 + '@vue/compiler-core': 3.5.18 + '@vue/shared': 3.5.18 - '@vue/compiler-sfc@3.5.13': + '@vue/compiler-sfc@3.5.18': dependencies: - '@babel/parser': 7.27.0 - '@vue/compiler-core': 3.5.13 - '@vue/compiler-dom': 3.5.13 - '@vue/compiler-ssr': 3.5.13 - '@vue/shared': 3.5.13 + '@babel/parser': 7.28.0 + '@vue/compiler-core': 3.5.18 + '@vue/compiler-dom': 3.5.18 + '@vue/compiler-ssr': 3.5.18 + '@vue/shared': 3.5.18 estree-walker: 2.0.2 magic-string: 0.30.17 - postcss: 8.5.3 + postcss: 8.5.6 source-map-js: 1.2.1 - '@vue/compiler-ssr@3.5.13': + '@vue/compiler-ssr@3.5.18': dependencies: - '@vue/compiler-dom': 3.5.13 - '@vue/shared': 3.5.13 + '@vue/compiler-dom': 3.5.18 + '@vue/shared': 3.5.18 - '@vue/devtools-api@7.7.2': + '@vue/devtools-api@7.7.7': dependencies: - '@vue/devtools-kit': 7.7.2 + '@vue/devtools-kit': 7.7.7 - '@vue/devtools-kit@7.7.2': + '@vue/devtools-kit@7.7.7': dependencies: - '@vue/devtools-shared': 7.7.2 - birpc: 0.2.19 + '@vue/devtools-shared': 7.7.7 + birpc: 2.5.0 hookable: 5.5.3 mitt: 3.0.1 perfect-debounce: 1.0.0 speakingurl: 14.0.1 superjson: 2.2.2 - '@vue/devtools-shared@7.7.2': + '@vue/devtools-shared@7.7.7': dependencies: rfdc: 1.4.1 - '@vue/reactivity@3.5.13': + '@vue/reactivity@3.5.18': dependencies: - '@vue/shared': 3.5.13 + '@vue/shared': 3.5.18 - '@vue/runtime-core@3.5.13': + '@vue/runtime-core@3.5.18': dependencies: - '@vue/reactivity': 3.5.13 - '@vue/shared': 3.5.13 + '@vue/reactivity': 3.5.18 + '@vue/shared': 3.5.18 - '@vue/runtime-dom@3.5.13': + '@vue/runtime-dom@3.5.18': dependencies: - '@vue/reactivity': 3.5.13 - '@vue/runtime-core': 3.5.13 - '@vue/shared': 3.5.13 + '@vue/reactivity': 3.5.18 + '@vue/runtime-core': 3.5.18 + '@vue/shared': 3.5.18 csstype: 3.1.3 - '@vue/server-renderer@3.5.13(vue@3.5.13(typescript@5.8.3))': + '@vue/server-renderer@3.5.18(vue@3.5.18(typescript@5.8.3))': dependencies: - '@vue/compiler-ssr': 3.5.13 - '@vue/shared': 3.5.13 - vue: 3.5.13(typescript@5.8.3) + '@vue/compiler-ssr': 3.5.18 + '@vue/shared': 3.5.18 + vue: 3.5.18(typescript@5.8.3) - '@vue/shared@3.5.13': {} + '@vue/shared@3.5.18': {} - '@vueuse/core@12.8.2(typescript@5.8.3)': + '@vueuse/core@13.6.0(vue@3.5.18(typescript@5.8.3))': dependencies: '@types/web-bluetooth': 0.0.21 - '@vueuse/metadata': 12.8.2 - '@vueuse/shared': 12.8.2(typescript@5.8.3) - vue: 3.5.13(typescript@5.8.3) - transitivePeerDependencies: - - typescript + '@vueuse/metadata': 13.6.0 + '@vueuse/shared': 13.6.0(vue@3.5.18(typescript@5.8.3)) + vue: 3.5.18(typescript@5.8.3) - '@vueuse/integrations@12.8.2(axios@1.8.4)(focus-trap@7.6.4)(jwt-decode@4.0.0)(typescript@5.8.3)': + '@vueuse/integrations@13.6.0(axios@1.10.0)(focus-trap@7.6.5)(jwt-decode@4.0.0)(vue@3.5.18(typescript@5.8.3))': dependencies: - '@vueuse/core': 12.8.2(typescript@5.8.3) - '@vueuse/shared': 12.8.2(typescript@5.8.3) - vue: 3.5.13(typescript@5.8.3) + '@vueuse/core': 13.6.0(vue@3.5.18(typescript@5.8.3)) + '@vueuse/shared': 13.6.0(vue@3.5.18(typescript@5.8.3)) + vue: 3.5.18(typescript@5.8.3) optionalDependencies: - axios: 1.8.4 - focus-trap: 7.6.4 + axios: 1.10.0 + focus-trap: 7.6.5 jwt-decode: 4.0.0 - transitivePeerDependencies: - - typescript - '@vueuse/metadata@12.8.2': {} + '@vueuse/metadata@13.6.0': {} - '@vueuse/shared@12.8.2(typescript@5.8.3)': + '@vueuse/shared@13.6.0(vue@3.5.18(typescript@5.8.3))': dependencies: - vue: 3.5.13(typescript@5.8.3) - transitivePeerDependencies: - - typescript + vue: 3.5.18(typescript@5.8.3) accepts@1.3.8: dependencies: @@ -6987,6 +6571,8 @@ snapshots: agent-base@7.1.3: {} + agent-base@7.1.4: {} + ajv-formats@2.1.1(ajv@8.17.1): optionalDependencies: ajv: 8.17.1 @@ -7005,22 +6591,6 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - algoliasearch@5.23.2: - dependencies: - '@algolia/client-abtesting': 5.23.2 - '@algolia/client-analytics': 5.23.2 - '@algolia/client-common': 5.23.2 - '@algolia/client-insights': 5.23.2 - '@algolia/client-personalization': 5.23.2 - '@algolia/client-query-suggestions': 5.23.2 - '@algolia/client-search': 5.23.2 - '@algolia/ingestion': 1.23.2 - '@algolia/monitoring': 1.23.2 - '@algolia/recommend': 5.23.2 - '@algolia/requester-browser-xhr': 5.23.2 - '@algolia/requester-fetch': 5.23.2 - '@algolia/requester-node-http': 5.23.2 - ansi-regex@5.0.1: {} ansi-regex@6.1.0: {} @@ -7112,10 +6682,10 @@ snapshots: dependencies: possible-typed-array-names: 1.1.0 - axios@1.8.4: + axios@1.10.0: dependencies: follow-redirects: 1.15.9 - form-data: 4.0.2 + form-data: 4.0.3 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug @@ -7134,7 +6704,7 @@ snapshots: binary-search@1.3.6: {} - birpc@0.2.19: {} + birpc@2.5.0: {} body-parser@1.20.3: dependencies: @@ -7291,7 +6861,7 @@ snapshots: cookie-signature@1.0.6: {} - cookie@0.4.2: {} + cookie-signature@1.0.7: {} cookie@0.7.1: {} @@ -7334,9 +6904,9 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - cssstyle@4.3.0: + cssstyle@4.6.0: dependencies: - '@asamuzakjp/css-color': 3.1.1 + '@asamuzakjp/css-color': 3.2.0 rrweb-cssom: 0.8.0 csstype@3.1.3: {} @@ -7392,7 +6962,7 @@ snapshots: decamelize@4.0.0: {} - decimal.js@10.5.0: {} + decimal.js@10.6.0: {} deep-eql@5.0.2: {} @@ -7478,8 +7048,6 @@ snapshots: electron-to-chromium@1.5.132: {} - emoji-regex-xs@1.0.0: {} - emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} @@ -7505,7 +7073,7 @@ snapshots: engine.io@6.6.4: dependencies: '@types/cors': 2.8.17 - '@types/node': 24.0.1 + '@types/node': 24.1.0 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.7.2 @@ -7520,6 +7088,8 @@ snapshots: entities@4.5.0: {} + entities@6.0.1: {} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 @@ -7605,60 +7175,6 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 - esbuild@0.21.5: - optionalDependencies: - '@esbuild/aix-ppc64': 0.21.5 - '@esbuild/android-arm': 0.21.5 - '@esbuild/android-arm64': 0.21.5 - '@esbuild/android-x64': 0.21.5 - '@esbuild/darwin-arm64': 0.21.5 - '@esbuild/darwin-x64': 0.21.5 - '@esbuild/freebsd-arm64': 0.21.5 - '@esbuild/freebsd-x64': 0.21.5 - '@esbuild/linux-arm': 0.21.5 - '@esbuild/linux-arm64': 0.21.5 - '@esbuild/linux-ia32': 0.21.5 - '@esbuild/linux-loong64': 0.21.5 - '@esbuild/linux-mips64el': 0.21.5 - '@esbuild/linux-ppc64': 0.21.5 - '@esbuild/linux-riscv64': 0.21.5 - '@esbuild/linux-s390x': 0.21.5 - '@esbuild/linux-x64': 0.21.5 - '@esbuild/netbsd-x64': 0.21.5 - '@esbuild/openbsd-x64': 0.21.5 - '@esbuild/sunos-x64': 0.21.5 - '@esbuild/win32-arm64': 0.21.5 - '@esbuild/win32-ia32': 0.21.5 - '@esbuild/win32-x64': 0.21.5 - - esbuild@0.25.3: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.3 - '@esbuild/android-arm': 0.25.3 - '@esbuild/android-arm64': 0.25.3 - '@esbuild/android-x64': 0.25.3 - '@esbuild/darwin-arm64': 0.25.3 - '@esbuild/darwin-x64': 0.25.3 - '@esbuild/freebsd-arm64': 0.25.3 - '@esbuild/freebsd-x64': 0.25.3 - '@esbuild/linux-arm': 0.25.3 - '@esbuild/linux-arm64': 0.25.3 - '@esbuild/linux-ia32': 0.25.3 - '@esbuild/linux-loong64': 0.25.3 - '@esbuild/linux-mips64el': 0.25.3 - '@esbuild/linux-ppc64': 0.25.3 - '@esbuild/linux-riscv64': 0.25.3 - '@esbuild/linux-s390x': 0.25.3 - '@esbuild/linux-x64': 0.25.3 - '@esbuild/netbsd-arm64': 0.25.3 - '@esbuild/netbsd-x64': 0.25.3 - '@esbuild/openbsd-arm64': 0.25.3 - '@esbuild/openbsd-x64': 0.25.3 - '@esbuild/sunos-x64': 0.25.3 - '@esbuild/win32-arm64': 0.25.3 - '@esbuild/win32-ia32': 0.25.3 - '@esbuild/win32-x64': 0.25.3 - esbuild@0.25.5: optionalDependencies: '@esbuild/aix-ppc64': 0.25.5 @@ -7687,6 +7203,35 @@ snapshots: '@esbuild/win32-ia32': 0.25.5 '@esbuild/win32-x64': 0.25.5 + esbuild@0.25.8: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.8 + '@esbuild/android-arm': 0.25.8 + '@esbuild/android-arm64': 0.25.8 + '@esbuild/android-x64': 0.25.8 + '@esbuild/darwin-arm64': 0.25.8 + '@esbuild/darwin-x64': 0.25.8 + '@esbuild/freebsd-arm64': 0.25.8 + '@esbuild/freebsd-x64': 0.25.8 + '@esbuild/linux-arm': 0.25.8 + '@esbuild/linux-arm64': 0.25.8 + '@esbuild/linux-ia32': 0.25.8 + '@esbuild/linux-loong64': 0.25.8 + '@esbuild/linux-mips64el': 0.25.8 + '@esbuild/linux-ppc64': 0.25.8 + '@esbuild/linux-riscv64': 0.25.8 + '@esbuild/linux-s390x': 0.25.8 + '@esbuild/linux-x64': 0.25.8 + '@esbuild/netbsd-arm64': 0.25.8 + '@esbuild/netbsd-x64': 0.25.8 + '@esbuild/openbsd-arm64': 0.25.8 + '@esbuild/openbsd-x64': 0.25.8 + '@esbuild/openharmony-arm64': 0.25.8 + '@esbuild/sunos-x64': 0.25.8 + '@esbuild/win32-arm64': 0.25.8 + '@esbuild/win32-ia32': 0.25.8 + '@esbuild/win32-x64': 0.25.8 + escalade@3.2.0: {} escape-html@1.0.3: {} @@ -7703,24 +7248,24 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-compat-utils@0.5.1(eslint@9.28.0): + eslint-compat-utils@0.5.1(eslint@9.32.0): dependencies: - eslint: 9.28.0 + eslint: 9.32.0 semver: 7.7.2 - eslint-config-etherpad@4.0.4(eslint@9.28.0)(typescript@5.8.3): + eslint-config-etherpad@4.0.4(eslint@9.32.0)(typescript@5.8.3): dependencies: '@rushstack/eslint-patch': 1.11.0 - '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.28.0)(typescript@5.8.3))(eslint@9.28.0)(typescript@5.8.3) - '@typescript-eslint/parser': 7.18.0(eslint@9.28.0)(typescript@5.8.3) - eslint-import-resolver-typescript: 3.10.0(eslint-plugin-import@2.31.0)(eslint@9.28.0) - eslint-plugin-cypress: 2.15.2(eslint@9.28.0) - eslint-plugin-eslint-comments: 3.2.0(eslint@9.28.0) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.28.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.0)(eslint@9.28.0) - eslint-plugin-mocha: 10.5.0(eslint@9.28.0) - eslint-plugin-n: 16.6.2(eslint@9.28.0) - eslint-plugin-prefer-arrow: 1.2.3(eslint@9.28.0) - eslint-plugin-promise: 6.6.0(eslint@9.28.0) + '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.32.0)(typescript@5.8.3))(eslint@9.32.0)(typescript@5.8.3) + '@typescript-eslint/parser': 7.18.0(eslint@9.32.0)(typescript@5.8.3) + eslint-import-resolver-typescript: 3.10.0(eslint-plugin-import@2.31.0)(eslint@9.32.0) + eslint-plugin-cypress: 2.15.2(eslint@9.32.0) + eslint-plugin-eslint-comments: 3.2.0(eslint@9.32.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.32.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.0)(eslint@9.32.0) + eslint-plugin-mocha: 10.5.0(eslint@9.32.0) + eslint-plugin-n: 16.6.2(eslint@9.32.0) + eslint-plugin-prefer-arrow: 1.2.3(eslint@9.32.0) + eslint-plugin-promise: 6.6.0(eslint@9.32.0) eslint-plugin-you-dont-need-lodash-underscore: 6.14.0 transitivePeerDependencies: - eslint @@ -7737,51 +7282,51 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.10.0(eslint-plugin-import@2.31.0)(eslint@9.28.0): + eslint-import-resolver-typescript@3.10.0(eslint-plugin-import@2.31.0)(eslint@9.32.0): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.1(supports-color@8.1.1) - eslint: 9.28.0 + eslint: 9.32.0 get-tsconfig: 4.10.1 is-bun-module: 2.0.0 stable-hash: 0.0.5 tinyglobby: 0.2.14 unrs-resolver: 1.3.3 optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.28.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.0)(eslint@9.28.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.32.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.0)(eslint@9.32.0) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@9.28.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.0)(eslint@9.28.0): + eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@9.32.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.0)(eslint@9.32.0): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 7.18.0(eslint@9.28.0)(typescript@5.8.3) - eslint: 9.28.0 + '@typescript-eslint/parser': 7.18.0(eslint@9.32.0)(typescript@5.8.3) + eslint: 9.32.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.0(eslint-plugin-import@2.31.0)(eslint@9.28.0) + eslint-import-resolver-typescript: 3.10.0(eslint-plugin-import@2.31.0)(eslint@9.32.0) transitivePeerDependencies: - supports-color - eslint-plugin-cypress@2.15.2(eslint@9.28.0): + eslint-plugin-cypress@2.15.2(eslint@9.32.0): dependencies: - eslint: 9.28.0 + eslint: 9.32.0 globals: 13.24.0 - eslint-plugin-es-x@7.8.0(eslint@9.28.0): + eslint-plugin-es-x@7.8.0(eslint@9.32.0): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0) '@eslint-community/regexpp': 4.12.1 - eslint: 9.28.0 - eslint-compat-utils: 0.5.1(eslint@9.28.0) + eslint: 9.32.0 + eslint-compat-utils: 0.5.1(eslint@9.32.0) - eslint-plugin-eslint-comments@3.2.0(eslint@9.28.0): + eslint-plugin-eslint-comments@3.2.0(eslint@9.32.0): dependencies: escape-string-regexp: 1.0.5 - eslint: 9.28.0 + eslint: 9.32.0 ignore: 5.3.2 - eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.28.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.0)(eslint@9.28.0): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.32.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.0)(eslint@9.32.0): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -7790,9 +7335,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.28.0 + eslint: 9.32.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@9.28.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.0)(eslint@9.28.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@9.32.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.0)(eslint@9.32.0) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -7804,25 +7349,25 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 7.18.0(eslint@9.28.0)(typescript@5.8.3) + '@typescript-eslint/parser': 7.18.0(eslint@9.32.0)(typescript@5.8.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-mocha@10.5.0(eslint@9.28.0): + eslint-plugin-mocha@10.5.0(eslint@9.32.0): dependencies: - eslint: 9.28.0 - eslint-utils: 3.0.0(eslint@9.28.0) + eslint: 9.32.0 + eslint-utils: 3.0.0(eslint@9.32.0) globals: 13.24.0 rambda: 7.5.0 - eslint-plugin-n@16.6.2(eslint@9.28.0): + eslint-plugin-n@16.6.2(eslint@9.32.0): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0) builtins: 5.1.0 - eslint: 9.28.0 - eslint-plugin-es-x: 7.8.0(eslint@9.28.0) + eslint: 9.32.0 + eslint-plugin-es-x: 7.8.0(eslint@9.32.0) get-tsconfig: 4.10.1 globals: 13.24.0 ignore: 5.3.2 @@ -7832,21 +7377,21 @@ snapshots: resolve: 1.22.10 semver: 7.7.2 - eslint-plugin-prefer-arrow@1.2.3(eslint@9.28.0): + eslint-plugin-prefer-arrow@1.2.3(eslint@9.32.0): dependencies: - eslint: 9.28.0 + eslint: 9.32.0 - eslint-plugin-promise@6.6.0(eslint@9.28.0): + eslint-plugin-promise@6.6.0(eslint@9.32.0): dependencies: - eslint: 9.28.0 + eslint: 9.32.0 - eslint-plugin-react-hooks@5.2.0(eslint@9.28.0): + eslint-plugin-react-hooks@5.2.0(eslint@9.32.0): dependencies: - eslint: 9.28.0 + eslint: 9.32.0 - eslint-plugin-react-refresh@0.4.20(eslint@9.28.0): + eslint-plugin-react-refresh@0.4.20(eslint@9.32.0): dependencies: - eslint: 9.28.0 + eslint: 9.32.0 eslint-plugin-you-dont-need-lodash-underscore@6.14.0: dependencies: @@ -7857,9 +7402,9 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-utils@3.0.0(eslint@9.28.0): + eslint-utils@3.0.0(eslint@9.32.0): dependencies: - eslint: 9.28.0 + eslint: 9.32.0 eslint-visitor-keys: 2.1.0 eslint-visitor-keys@2.1.0: {} @@ -7868,16 +7413,16 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.28.0: + eslint@9.32.0: dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0) '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.20.1 - '@eslint/config-helpers': 0.2.3 - '@eslint/core': 0.14.0 + '@eslint/config-array': 0.21.0 + '@eslint/config-helpers': 0.3.0 + '@eslint/core': 0.15.0 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.28.0 - '@eslint/plugin-kit': 0.3.2 + '@eslint/js': 9.32.0 + '@eslint/plugin-kit': 0.3.4 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 @@ -7938,11 +7483,11 @@ snapshots: etag@1.8.1: {} - etherpad-cli-client@3.0.2: + etherpad-cli-client@3.0.4: dependencies: async: 3.2.6 socket.io-client: 4.8.1 - superagent: 8.1.2 + superagent: 10.2.3 transitivePeerDependencies: - bufferutil - supports-color @@ -7950,9 +7495,23 @@ snapshots: expect-type@1.2.1: {} - express-rate-limit@7.5.0(express@4.21.2): + express-rate-limit@8.0.1(express@4.21.2): dependencies: express: 4.21.2 + ip-address: 10.0.1 + + express-session@1.18.2: + dependencies: + cookie: 0.7.2 + cookie-signature: 1.0.7 + debug: 2.6.9 + depd: 2.0.0 + on-headers: 1.1.0 + parseurl: 1.3.3 + safe-buffer: 5.2.1 + uid-safe: 2.1.5 + transitivePeerDependencies: + - supports-color express@4.21.2: dependencies: @@ -8014,13 +7573,9 @@ snapshots: dependencies: reusify: 1.1.0 - fdir@6.4.4(picomatch@4.0.2): + fdir@6.4.6(picomatch@4.0.3): optionalDependencies: - picomatch: 4.0.2 - - fdir@6.4.6(picomatch@4.0.2): - optionalDependencies: - picomatch: 4.0.2 + picomatch: 4.0.3 fetch-blob@3.2.0: dependencies: @@ -8071,7 +7626,7 @@ snapshots: flatted@3.3.3: {} - focus-trap@7.6.4: + focus-trap@7.6.5: dependencies: tabbable: 6.2.0 @@ -8086,14 +7641,15 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 - form-data@4.0.2: + form-data@4.0.3: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 es-set-tostringtag: 2.1.0 + hasown: 2.0.2 mime-types: 2.1.35 - form-data@4.0.3: + form-data@4.0.4: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 @@ -8105,13 +7661,6 @@ snapshots: dependencies: fetch-blob: 3.2.0 - formidable@2.1.5: - dependencies: - '@paralleldrive/cuid2': 2.2.2 - dezalgo: 1.0.4 - once: 1.4.0 - qs: 6.14.0 - formidable@3.5.4: dependencies: '@paralleldrive/cuid2': 2.2.2 @@ -8282,7 +7831,7 @@ snapshots: '@types/hast': 3.0.4 devlop: 1.1.0 hast-util-from-parse5: 8.0.3 - parse5: 7.2.1 + parse5: 7.3.0 vfile: 6.0.3 vfile-message: 4.0.2 @@ -8376,14 +7925,14 @@ snapshots: http-proxy-agent@7.0.2: dependencies: - agent-base: 7.1.3 + agent-base: 7.1.4 debug: 4.4.1(supports-color@8.1.1) transitivePeerDependencies: - supports-color https-proxy-agent@7.0.6: dependencies: - agent-base: 7.1.3 + agent-base: 7.1.4 debug: 4.4.1(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -8392,7 +7941,7 @@ snapshots: dependencies: '@babel/runtime': 7.27.6 - i18next@25.2.1(typescript@5.8.3): + i18next@25.3.2(typescript@5.8.3): dependencies: '@babel/runtime': 7.27.6 optionalDependencies: @@ -8425,6 +7974,8 @@ snapshots: hasown: 2.0.2 side-channel: 1.1.0 + ip-address@10.0.1: {} + ip-address@9.0.5: dependencies: jsbn: 1.1.0 @@ -8584,7 +8135,7 @@ snapshots: jose@5.10.0: {} - jose@6.0.11: {} + jose@6.0.12: {} js-cookie@3.0.5: {} @@ -8598,18 +8149,17 @@ snapshots: jsbn@1.1.0: {} - jsdom@26.0.0: + jsdom@26.1.0: dependencies: - cssstyle: 4.3.0 + cssstyle: 4.6.0 data-urls: 5.0.0 - decimal.js: 10.5.0 - form-data: 4.0.2 + decimal.js: 10.6.0 html-encoding-sniffer: 4.0.0 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.20 - parse5: 7.2.1 + nwsapi: 2.2.21 + parse5: 7.3.0 rrweb-cssom: 0.8.0 saxes: 6.0.0 symbol-tree: 3.2.4 @@ -8619,7 +8169,7 @@ snapshots: whatwg-encoding: 3.1.1 whatwg-mimetype: 4.0.0 whatwg-url: 14.2.0 - ws: 8.18.1 + ws: 8.18.3 xml-name-validator: 5.0.0 transitivePeerDependencies: - bufferutil @@ -8800,6 +8350,8 @@ snapshots: loupe@3.1.3: {} + loupe@3.2.0: {} + lower-case@2.0.2: dependencies: tslib: 2.8.1 @@ -8814,7 +8366,7 @@ snapshots: lru-cache@7.18.3: {} - lucide-react@0.515.0(react@19.1.0): + lucide-react@0.525.0(react@19.1.0): dependencies: react: 19.1.0 @@ -8928,7 +8480,7 @@ snapshots: mocha-froth@0.2.10: {} - mocha@11.6.0: + mocha@11.7.1: dependencies: browser-stdout: 1.3.1 chokidar: 4.0.3 @@ -8990,7 +8542,7 @@ snapshots: normalize-path@3.0.0: {} - nwsapi@2.2.20: {} + nwsapi@2.2.21: {} object-assign@4.1.1: {} @@ -9027,13 +8579,13 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.1.1 - oidc-provider@9.1.3: + oidc-provider@9.3.0: dependencies: '@koa/cors': 5.0.0 - '@koa/router': 13.1.0 + '@koa/router': 13.1.1 debug: 4.4.1(supports-color@8.1.1) eta: 3.5.0 - jose: 6.0.11 + jose: 6.0.12 jsesc: 3.1.0 koa: 3.0.0 nanoid: 5.1.5 @@ -9049,19 +8601,21 @@ snapshots: dependencies: ee-first: 1.1.1 - on-headers@1.0.2: {} + on-headers@1.1.0: {} once@1.4.0: dependencies: wrappy: 1.0.2 - oniguruma-to-es@3.1.1: + oniguruma-parser@0.12.1: {} + + oniguruma-to-es@4.3.3: dependencies: - emoji-regex-xs: 1.0.0 + oniguruma-parser: 0.12.1 regex: 6.0.1 regex-recursion: 6.0.2 - openapi-backend@5.12.0: + openapi-backend@5.13.0: dependencies: '@apidevtools/json-schema-ref-parser': 11.9.3 ajv: 8.17.1 @@ -9119,7 +8673,7 @@ snapshots: pac-proxy-agent@7.2.0: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 - agent-base: 7.1.3 + agent-base: 7.1.4 debug: 4.4.1(supports-color@8.1.1) get-uri: 6.0.4 http-proxy-agent: 7.0.2 @@ -9151,6 +8705,10 @@ snapshots: dependencies: entities: 4.5.0 + parse5@7.3.0: + dependencies: + entities: 6.0.1 + parseurl@1.3.3: {} path-exists@4.0.0: {} @@ -9182,24 +8740,24 @@ snapshots: picomatch@4.0.2: {} - playwright-core@1.53.0: {} + picomatch@4.0.3: {} - playwright@1.53.0: + playwright-core@1.54.1: {} + + playwright@1.54.1: dependencies: - playwright-core: 1.53.0 + playwright-core: 1.54.1 optionalDependencies: fsevents: 2.3.2 possible-typed-array-names@1.1.0: {} - postcss@8.5.3: + postcss@8.5.6: dependencies: nanoid: 3.3.11 picocolors: 1.1.1 source-map-js: 1.2.1 - preact@10.26.4: {} - prelude-ls@1.2.1: {} promise@1.3.0: @@ -9216,7 +8774,7 @@ snapshots: proxy-agent@6.5.0: dependencies: agent-base: 7.1.3 - debug: 4.4.0 + debug: 4.4.1(supports-color@8.1.1) http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 lru-cache: 7.18.3 @@ -9273,15 +8831,15 @@ snapshots: react: 19.1.0 scheduler: 0.26.0 - react-hook-form@7.57.0(react@19.1.0): + react-hook-form@7.61.1(react@19.1.0): dependencies: react: 19.1.0 - react-i18next@15.5.3(i18next@25.2.1(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3): + react-i18next@15.6.1(i18next@25.3.2(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3): dependencies: '@babel/runtime': 7.27.6 html-parse-stringify: 3.0.1 - i18next: 25.2.1(typescript@5.8.3) + i18next: 25.3.2(typescript@5.8.3) react: 19.1.0 optionalDependencies: react-dom: 19.1.0(react@19.1.0) @@ -9306,13 +8864,13 @@ snapshots: optionalDependencies: '@types/react': 19.1.8 - react-router-dom@7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-router-dom@7.7.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - react-router: 7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react-router: 7.7.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react-router@7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-router@7.7.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: cookie: 1.0.2 react: 19.1.0 @@ -9581,14 +9139,14 @@ snapshots: shebang-regex@3.0.0: {} - shiki@2.5.0: + shiki@3.9.1: dependencies: - '@shikijs/core': 2.5.0 - '@shikijs/engine-javascript': 2.5.0 - '@shikijs/engine-oniguruma': 2.5.0 - '@shikijs/langs': 2.5.0 - '@shikijs/themes': 2.5.0 - '@shikijs/types': 2.5.0 + '@shikijs/core': 3.9.1 + '@shikijs/engine-javascript': 3.9.1 + '@shikijs/engine-oniguruma': 3.9.1 + '@shikijs/langs': 3.9.1 + '@shikijs/themes': 3.9.1 + '@shikijs/types': 3.9.1 '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 @@ -9686,7 +9244,7 @@ snapshots: socks-proxy-agent@8.0.5: dependencies: - agent-base: 7.1.3 + agent-base: 7.1.4 debug: 4.4.1(supports-color@8.1.1) socks: 2.8.5 transitivePeerDependencies: @@ -9786,13 +9344,13 @@ snapshots: dependencies: js-tokens: 9.0.1 - superagent@10.2.1: + superagent@10.2.2: dependencies: component-emitter: 1.3.1 cookiejar: 2.1.4 - debug: 4.4.0 + debug: 4.4.1(supports-color@8.1.1) fast-safe-stringify: 2.1.1 - form-data: 4.0.2 + form-data: 4.0.3 formidable: 3.5.4 methods: 1.1.2 mime: 2.6.0 @@ -9800,18 +9358,17 @@ snapshots: transitivePeerDependencies: - supports-color - superagent@8.1.2: + superagent@10.2.3: dependencies: component-emitter: 1.3.1 cookiejar: 2.1.4 debug: 4.4.1(supports-color@8.1.1) fast-safe-stringify: 2.1.1 - form-data: 4.0.2 - formidable: 2.1.5 + form-data: 4.0.4 + formidable: 3.5.4 methods: 1.1.2 mime: 2.6.0 qs: 6.14.0 - semver: 7.7.2 transitivePeerDependencies: - supports-color @@ -9819,10 +9376,10 @@ snapshots: dependencies: copy-anything: 3.0.5 - supertest@7.1.1: + supertest@7.1.4: dependencies: methods: 1.1.2 - superagent: 10.2.1 + superagent: 10.2.3 transitivePeerDependencies: - supports-color @@ -9868,27 +9425,22 @@ snapshots: tinyexec@0.3.2: {} - tinyglobby@0.2.13: - dependencies: - fdir: 6.4.4(picomatch@4.0.2) - picomatch: 4.0.2 - tinyglobby@0.2.14: dependencies: - fdir: 6.4.6(picomatch@4.0.2) - picomatch: 4.0.2 + fdir: 6.4.6(picomatch@4.0.3) + picomatch: 4.0.3 - tinypool@1.1.0: {} + tinypool@1.1.1: {} tinyrainbow@2.0.0: {} tinyspy@4.0.3: {} - tldts-core@6.1.85: {} + tldts-core@6.1.86: {} - tldts@6.1.85: + tldts@6.1.86: dependencies: - tldts-core: 6.1.85 + tldts-core: 6.1.86 to-regex-range@5.0.1: dependencies: @@ -9898,9 +9450,9 @@ snapshots: tough-cookie@5.1.2: dependencies: - tldts: 6.1.85 + tldts: 6.1.86 - tr46@5.1.0: + tr46@5.1.1: dependencies: punycode: 2.3.1 @@ -10112,13 +9664,13 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-node@3.2.3(@types/node@24.0.1)(tsx@4.20.3): + vite-node@3.2.4(@types/node@24.1.0)(tsx@4.20.3): dependencies: cac: 6.7.14 debug: 4.4.1(supports-color@8.1.1) es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 6.3.5(@types/node@24.0.1)(tsx@4.20.3) + vite: 7.0.6(@types/node@24.1.0)(tsx@4.20.3) transitivePeerDependencies: - '@types/node' - jiti @@ -10133,107 +9685,95 @@ snapshots: - tsx - yaml - vite-plugin-static-copy@3.0.0(vite@6.3.5(@types/node@24.0.1)(tsx@4.20.3)): + vite-plugin-static-copy@3.1.1(vite@7.0.6(@types/node@24.1.0)(tsx@4.20.3)): dependencies: chokidar: 3.6.0 fs-extra: 11.3.0 p-map: 7.0.3 picocolors: 1.1.1 tinyglobby: 0.2.14 - vite: 6.3.5(@types/node@24.0.1)(tsx@4.20.3) + vite: 7.0.6(@types/node@24.1.0)(tsx@4.20.3) - vite-plugin-svgr@4.3.0(rollup@4.40.1)(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.1)(tsx@4.20.3)): + vite-plugin-svgr@4.3.0(rollup@4.40.1)(typescript@5.8.3)(vite@7.0.6(@types/node@24.1.0)(tsx@4.20.3)): dependencies: '@rollup/pluginutils': 5.1.4(rollup@4.40.1) '@svgr/core': 8.1.0(typescript@5.8.3) '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.8.3)) - vite: 6.3.5(@types/node@24.0.1)(tsx@4.20.3) + vite: 7.0.6(@types/node@24.1.0)(tsx@4.20.3) transitivePeerDependencies: - rollup - supports-color - typescript - vite@5.4.19(@types/node@24.0.1): + vite@7.0.6(@types/node@24.1.0)(tsx@4.20.3): dependencies: - esbuild: 0.21.5 - postcss: 8.5.3 + esbuild: 0.25.5 + fdir: 6.4.6(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 rollup: 4.40.1 + tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 24.0.1 - fsevents: 2.3.3 - - vite@6.3.5(@types/node@24.0.1)(tsx@4.20.3): - dependencies: - esbuild: 0.25.3 - fdir: 6.4.4(picomatch@4.0.2) - picomatch: 4.0.2 - postcss: 8.5.3 - rollup: 4.40.1 - tinyglobby: 0.2.13 - optionalDependencies: - '@types/node': 24.0.1 + '@types/node': 24.1.0 fsevents: 2.3.3 tsx: 4.20.3 - vitepress@1.6.3(@algolia/client-search@5.23.2)(@types/node@24.0.1)(axios@1.8.4)(jwt-decode@4.0.0)(postcss@8.5.3)(typescript@5.8.3): + vitepress@2.0.0-alpha.9(@types/node@24.1.0)(axios@1.10.0)(jwt-decode@4.0.0)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.3): dependencies: - '@docsearch/css': 3.8.2 - '@docsearch/js': 3.8.2(@algolia/client-search@5.23.2) - '@iconify-json/simple-icons': 1.2.30 - '@shikijs/core': 2.5.0 - '@shikijs/transformers': 2.5.0 - '@shikijs/types': 2.5.0 - '@types/markdown-it': 14.1.2 - '@vitejs/plugin-vue': 5.2.3(vite@5.4.19(@types/node@24.0.1))(vue@3.5.13(typescript@5.8.3)) - '@vue/devtools-api': 7.7.2 - '@vue/shared': 3.5.13 - '@vueuse/core': 12.8.2(typescript@5.8.3) - '@vueuse/integrations': 12.8.2(axios@1.8.4)(focus-trap@7.6.4)(jwt-decode@4.0.0)(typescript@5.8.3) - focus-trap: 7.6.4 + '@docsearch/css': 4.0.0-beta.5 + '@docsearch/js': 4.0.0-beta.5 + '@iconify-json/simple-icons': 1.2.45 + '@shikijs/core': 3.9.1 + '@shikijs/transformers': 3.9.1 + '@shikijs/types': 3.9.1 + '@vitejs/plugin-vue': 6.0.1(vite@7.0.6(@types/node@24.1.0)(tsx@4.20.3))(vue@3.5.18(typescript@5.8.3)) + '@vue/devtools-api': 7.7.7 + '@vue/shared': 3.5.18 + '@vueuse/core': 13.6.0(vue@3.5.18(typescript@5.8.3)) + '@vueuse/integrations': 13.6.0(axios@1.10.0)(focus-trap@7.6.5)(jwt-decode@4.0.0)(vue@3.5.18(typescript@5.8.3)) + focus-trap: 7.6.5 mark.js: 8.11.1 minisearch: 7.1.2 - shiki: 2.5.0 - vite: 5.4.19(@types/node@24.0.1) - vue: 3.5.13(typescript@5.8.3) + shiki: 3.9.1 + vite: 7.0.6(@types/node@24.1.0)(tsx@4.20.3) + vue: 3.5.18(typescript@5.8.3) optionalDependencies: - postcss: 8.5.3 + postcss: 8.5.6 transitivePeerDependencies: - - '@algolia/client-search' - '@types/node' - - '@types/react' - async-validator - axios - change-case - drauu - fuse.js - idb-keyval + - jiti - jwt-decode - less - lightningcss - nprogress - qrcode - - react - - react-dom - sass - sass-embedded - - search-insights - sortablejs - stylus - sugarss - terser + - tsx - typescript - universal-cookie + - yaml - vitest@3.2.3(@types/debug@4.1.12)(@types/node@24.0.1)(jsdom@26.0.0)(tsx@4.20.3): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.1.0)(jsdom@26.1.0)(tsx@4.20.3): dependencies: '@types/chai': 5.2.2 - '@vitest/expect': 3.2.3 - '@vitest/mocker': 3.2.3(vite@6.3.5(@types/node@24.0.1)(tsx@4.20.3)) - '@vitest/pretty-format': 3.2.3 - '@vitest/runner': 3.2.3 - '@vitest/snapshot': 3.2.3 - '@vitest/spy': 3.2.3 - '@vitest/utils': 3.2.3 + '@vitest/expect': 3.2.4 + '@vitest/mocker': 3.2.4(vite@7.0.6(@types/node@24.1.0)(tsx@4.20.3)) + '@vitest/pretty-format': 3.2.4 + '@vitest/runner': 3.2.4 + '@vitest/snapshot': 3.2.4 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 chai: 5.2.0 debug: 4.4.1(supports-color@8.1.1) expect-type: 1.2.1 @@ -10244,15 +9784,15 @@ snapshots: tinybench: 2.9.0 tinyexec: 0.3.2 tinyglobby: 0.2.14 - tinypool: 1.1.0 + tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 6.3.5(@types/node@24.0.1)(tsx@4.20.3) - vite-node: 3.2.3(@types/node@24.0.1)(tsx@4.20.3) + vite: 7.0.6(@types/node@24.1.0)(tsx@4.20.3) + vite-node: 3.2.4(@types/node@24.1.0)(tsx@4.20.3) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 24.0.1 - jsdom: 26.0.0 + '@types/node': 24.1.0 + jsdom: 26.1.0 transitivePeerDependencies: - jiti - less @@ -10269,13 +9809,13 @@ snapshots: void-elements@3.1.0: {} - vue@3.5.13(typescript@5.8.3): + vue@3.5.18(typescript@5.8.3): dependencies: - '@vue/compiler-dom': 3.5.13 - '@vue/compiler-sfc': 3.5.13 - '@vue/runtime-dom': 3.5.13 - '@vue/server-renderer': 3.5.13(vue@3.5.13(typescript@5.8.3)) - '@vue/shared': 3.5.13 + '@vue/compiler-dom': 3.5.18 + '@vue/compiler-sfc': 3.5.18 + '@vue/runtime-dom': 3.5.18 + '@vue/server-renderer': 3.5.18(vue@3.5.18(typescript@5.8.3)) + '@vue/shared': 3.5.18 optionalDependencies: typescript: 5.8.3 @@ -10297,7 +9837,7 @@ snapshots: whatwg-url@14.2.0: dependencies: - tr46: 5.1.0 + tr46: 5.1.1 webidl-conversions: 7.0.0 which-boxed-primitive@1.1.1: @@ -10370,7 +9910,7 @@ snapshots: ws@8.17.1: {} - ws@8.18.1: {} + ws@8.18.3: {} wtfnode@0.10.0: {} @@ -10409,7 +9949,7 @@ snapshots: yocto-queue@0.1.0: {} - zustand@5.0.5(@types/react@19.1.8)(react@19.1.0): + zustand@5.0.6(@types/react@19.1.8)(react@19.1.0): optionalDependencies: '@types/react': 19.1.8 react: 19.1.0 diff --git a/settings.json.docker b/settings.json.docker index 6b4b32426..be83e0062 100644 --- a/settings.json.docker +++ b/settings.json.docker @@ -171,6 +171,14 @@ */ "showSettingsInAdminPage": "${SHOW_SETTINGS_IN_ADMIN_PAGE:true}", + /* + * Enable/disable the metrics endpoint. + * + * This is used by the monitoring plugins to collect metrics about Etherpad. + * If you do not use any monitoring plugins, you can disable this. + */ + "enableMetrics": "${ENABLE_METRICS:true}", + /* * Settings for cleanup of pads */ @@ -642,7 +650,7 @@ ], "right": [ ["importexport", "timeslider", "savedrevision"], - ["settings", "embed"], + ["settings", "embed", "home"], ["showusers"] ], "timeslider": [ diff --git a/settings.json.template b/settings.json.template index e6293d87f..93026dece 100644 --- a/settings.json.template +++ b/settings.json.template @@ -162,6 +162,14 @@ */ "showSettingsInAdminPage": true, + /* + * Enable/disable the metrics endpoint. + * + * This is used by the monitoring plugins to collect metrics about Etherpad. + * If you do not use any monitoring plugins, you can disable this. + */ + "enableMetrics": "${ENABLE_METRICS:true}", + /* * Settings for cleanup of pads */ @@ -641,7 +649,7 @@ ], "right": [ ["importexport", "timeslider", "savedrevision"], - ["settings", "embed"], + ["settings", "embed", "home"], ["showusers"] ], "timeslider": [ diff --git a/src/locales/de.json b/src/locales/de.json index 4cb8eb6d1..4ef7e68c4 100644 --- a/src/locales/de.json +++ b/src/locales/de.json @@ -52,9 +52,16 @@ "admin_settings.current_save.value": "Einstellungen speichern", "admin_settings.page-title": "Einstellungen - Etherpad", "index.newPad": "Neues Pad", - "index.createOpenPad": "oder ein Pad mit folgendem Namen erstellen/öffnen:", + "index.createOpenPad": "Pad öffnen", "index.openPad": "Öffne ein vorhandenes Pad mit folgendem Namen:", - "pad.toolbar.bold.title": "Fett (Strg-B)", + "index.recentPads": "Zuletzt bearbeitete Pads", + "index.recentPadsEmpty": "Keine kürzlich bearbeiteten Pads gefunden.", + "index.generateNewPad": "Neues Pad generieren", + "index.labelPad": "Padname (optional)", + "index.placeholderPadEnter": "Gib den Namen des Pads ein...", + "index.createAndShareDocuments": "Erstelle und teile Dokumente in Echtzeit", + "index.createAndShareDocumentsDescription": "Etherpad ermöglicht die gemeinsame Bearbeitung von Dokumenten in Echtzeit, ähnlich wie ein Live-Multiplayer-Editor, der in Ihrem Browser läuft.", + "pad.toolbar.bold.title": "Fett (Strg-B)", "pad.toolbar.italic.title": "Kursiv (Strg-I)", "pad.toolbar.underline.title": "Unterstrichen (Strg-U)", "pad.toolbar.strikethrough.title": "Durchgestrichen (Strg+5)", @@ -70,6 +77,7 @@ "pad.toolbar.savedRevision.title": "Version speichern", "pad.toolbar.settings.title": "Einstellungen", "pad.toolbar.embed.title": "Dieses Pad teilen oder einbetten", + "pad.toolbar.home.title": "Zurück zur Startseite", "pad.toolbar.showusers.title": "Benutzer dieses Pads anzeigen", "pad.colorpicker.save": "Speichern", "pad.colorpicker.cancel": "Abbrechen", diff --git a/src/locales/en.json b/src/locales/en.json index 5305a7025..ec6a11a4f 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -34,8 +34,16 @@ "admin_settings.page-title": "Settings - Etherpad", "index.newPad": "New Pad", - "index.createOpenPad": "or create/open a Pad with the name:", + "index.createOpenPad": "Open pad by name", "index.openPad": "open an existing Pad with the name:", + "index.recentPads": "Recent Pads", + "index.recentPadsEmpty": "No recent pads found.", + "index.generateNewPad": "Generate random pad name", + "index.labelPad": "Pad name (optional)", + "index.placeholderPadEnter": "Gib den Namen des Pads ein...", + "index.createAndShareDocuments": "Create and share documents in real time", + "index.createAndShareDocumentsDescription": "Etherpad allows you to edit documents collaboratively in real-time, much like a live multi-player editor that runs in your browser.", + "pad.toolbar.bold.title": "Bold (Ctrl+B)", "pad.toolbar.italic.title": "Italic (Ctrl+I)", @@ -53,6 +61,7 @@ "pad.toolbar.savedRevision.title": "Save Revision", "pad.toolbar.settings.title": "Settings", "pad.toolbar.embed.title": "Share and Embed this pad", + "pad.toolbar.home.title": "Back to home", "pad.toolbar.showusers.title": "Show the users on this pad", "pad.colorpicker.save": "Save", diff --git a/src/locales/es.json b/src/locales/es.json index bd71603af..85153d0cb 100644 --- a/src/locales/es.json +++ b/src/locales/es.json @@ -14,6 +14,7 @@ "Macofe", "MartaEgea", "Mklehr", + "Ovruni", "Rubenwap", "Tiberius1701", "VegaDark", @@ -50,11 +51,13 @@ "admin_settings": "Configuración", "admin_settings.current": "Configuración actual", "admin_settings.current_example-devel": "Plantilla de ejemplo de configuración de desarrollo", + "admin_settings.current_example-prod": "Ejemplo de plantilla de configuración de producción", "admin_settings.current_restart.value": "Reiniciar Etherpad", "admin_settings.current_save.value": "Guardar configuración", "admin_settings.page-title": "Configuración. Etherpad", "index.newPad": "Nuevo pad", "index.createOpenPad": "o crea/abre un pad con el nombre:", + "index.openPad": "abrir un pad existente con el nombre:", "pad.toolbar.bold.title": "Negrita (Ctrl-B)", "pad.toolbar.italic.title": "Cursiva (Ctrl-I)", "pad.toolbar.underline.title": "Subrayado (Ctrl-U)", @@ -87,6 +90,8 @@ "pad.settings.fontType": "Tipografía:", "pad.settings.fontType.normal": "Normal", "pad.settings.language": "Idioma:", + "pad.settings.deletePad": "Eliminar pad", + "pad.delete.confirm": "¿De verdad quieres borrar este pad?", "pad.settings.about": "Acerca de", "pad.settings.poweredBy": "Funciona con", "pad.importExport.import_export": "Importar/Exportar", @@ -123,6 +128,10 @@ "pad.modals.corruptPad.cause": "Esto puede deberse a una mala configuración del servidor o algún otro comportamiento inesperado. Contacta con el administrador del servicio.", "pad.modals.deleted": "Borrado.", "pad.modals.deleted.explanation": "Este pad ha sido borrado.", + "pad.modals.rateLimited": "Límite de solicitudes.", + "pad.modals.rateLimited.explanation": "Enviaste demasiados mensajes a este pad por lo que te desconectó.", + "pad.modals.rejected.explanation": "El servidor rechazó un mensaje que envió tu navegador.", + "pad.modals.rejected.cause": "Es posible que el servidor se haya actualizado mientras veías el panel, o que haya un error en Etherpad. Intenta recargar la página.", "pad.modals.disconnected": "Te has desconectado.", "pad.modals.disconnected.explanation": "Se perdió la conexión con el servidor", "pad.modals.disconnected.cause": "El servidor podría no estar disponible. Contacta con el administrador del servicio si esto continúa sucediendo.", @@ -135,6 +144,7 @@ "pad.chat.loadmessages": "Cargar más mensajes", "pad.chat.stick.title": "Ampliar", "pad.chat.writeMessage.placeholder": "Enviar un mensaje", + "timeslider.followContents": "Sigue las actualizaciones de contenido del pad", "timeslider.pageTitle": "{{appTitle}} Línea de tiempo", "timeslider.toolbar.returnbutton": "Volver al pad", "timeslider.toolbar.authors": "Autores:", @@ -173,5 +183,6 @@ "pad.impexp.uploadFailed": "El envío falló. Inténtalo de nuevo.", "pad.impexp.importfailed": "Fallo al importar", "pad.impexp.copypaste": "Intenta copiar y pegar", - "pad.impexp.exportdisabled": "La exportación al formato {{type}} está desactivada. Contacta con tu administrador del sistema." + "pad.impexp.exportdisabled": "La exportación al formato {{type}} está desactivada. Contacta con tu administrador del sistema.", + "pad.impexp.maxFileSize": "El archivo es demasiado grande. Contacte al administrador del sitio para aumentar el tamaño de archivo permitido para la importación." } diff --git a/src/locales/fa.json b/src/locales/fa.json index 6be60fa79..567ed0e43 100644 --- a/src/locales/fa.json +++ b/src/locales/fa.json @@ -4,6 +4,7 @@ "BMRG14", "Beginneruser", "Dalba", + "Darafsh", "Ebrahim", "Ebraminio", "FarsiNevis", @@ -66,6 +67,7 @@ "pad.toolbar.savedRevision.title": "ذخیره‌سازی نسخه", "pad.toolbar.settings.title": "تنظیمات", "pad.toolbar.embed.title": "اشتراک و جاسازی این دفترچه یادداشت", + "pad.toolbar.home.title": "بازگشت به صفحهٔ اصلی", "pad.toolbar.showusers.title": "نمایش کاربران در این دفترچه یادداشت", "pad.colorpicker.save": "ذخیره", "pad.colorpicker.cancel": "لغو", diff --git a/src/locales/fi.json b/src/locales/fi.json index c51be0ac6..d05404e2d 100644 --- a/src/locales/fi.json +++ b/src/locales/fi.json @@ -50,11 +50,13 @@ "admin_settings": "Asetukset", "admin_settings.current": "Nykyinen kokoonpano", "admin_settings.current_example-devel": "Esimerkki kehitysasetusten mallista", + "admin_settings.current_example-prod": "Esimerkkipohja tuotantoasetuksille", "admin_settings.current_restart.value": "Käynnistä Etherpad uudelleen", "admin_settings.current_save.value": "Tallenna asetukset", "admin_settings.page-title": "asetukset - Etherpad", "index.newPad": "Uusi muistio", "index.createOpenPad": "tai luo tai avaa muistio nimellä:", + "index.openPad": "avaa olemassa oleva muistio nimellä:", "pad.toolbar.bold.title": "Lihavointi (Ctrl-B)", "pad.toolbar.italic.title": "Kursivointi (Ctrl-I)", "pad.toolbar.underline.title": "Alleviivaus (Ctrl-U)", @@ -71,6 +73,7 @@ "pad.toolbar.savedRevision.title": "Tallenna muutos", "pad.toolbar.settings.title": "Asetukset", "pad.toolbar.embed.title": "Jaa ja upota muistio", + "pad.toolbar.home.title": "Takaisin kotiin", "pad.toolbar.showusers.title": "Näytä muistion käyttäjät", "pad.colorpicker.save": "Tallenna", "pad.colorpicker.cancel": "Peru", @@ -137,6 +140,7 @@ "pad.chat.loadmessages": "Lataa lisää viestejä", "pad.chat.stick.title": "Liimaa chatti ruutuun", "pad.chat.writeMessage.placeholder": "Kirjoita viestisi tähän", + "timeslider.followContents": "Seuraa muistion sisällön päivityksiä", "timeslider.pageTitle": "{{appTitle}} -aikajana", "timeslider.toolbar.returnbutton": "Palaa muistioon", "timeslider.toolbar.authors": "Tekijät:", @@ -175,5 +179,6 @@ "pad.impexp.uploadFailed": "Lähetys epäonnistui. Yritä uudelleen.", "pad.impexp.importfailed": "Tuonti epäonnistui", "pad.impexp.copypaste": "Kopioi ja liitä", - "pad.impexp.exportdisabled": "Vienti muotoon \"{{type}}\" ei ole käytössä. Ota yhteys ylläpitäjään saadaksesi lisätietoja." + "pad.impexp.exportdisabled": "Vienti muotoon \"{{type}}\" ei ole käytössä. Ota yhteys ylläpitäjään saadaksesi lisätietoja.", + "pad.impexp.maxFileSize": "Tiedosto on liian suuri. Ota yhteyttä sivustosi ylläpitäjään ja pyydä heitä korottomaan suurinta sallittua tiedostokokoa." } diff --git a/src/locales/fr.json b/src/locales/fr.json index 96e5a3b98..997560977 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -5,6 +5,7 @@ "C13m3n7", "Cquoi", "Crochet.david", + "Derugon", "Envlh", "Framafan", "Fylip22", @@ -83,6 +84,7 @@ "pad.toolbar.savedRevision.title": "Enregistrer la révision", "pad.toolbar.settings.title": "Paramètres", "pad.toolbar.embed.title": "Partager et intégrer ce bloc-notes", + "pad.toolbar.home.title": "Retour à l’accueil", "pad.toolbar.showusers.title": "Afficher les utilisateurs du bloc-notes", "pad.colorpicker.save": "Enregistrer", "pad.colorpicker.cancel": "Annuler", diff --git a/src/locales/gl.json b/src/locales/gl.json index 341857d91..b878f165b 100644 --- a/src/locales/gl.json +++ b/src/locales/gl.json @@ -58,6 +58,7 @@ "pad.toolbar.savedRevision.title": "Gardar a revisión", "pad.toolbar.settings.title": "Axustes", "pad.toolbar.embed.title": "Compartir e incorporar este documento", + "pad.toolbar.home.title": "Volver ao inicio", "pad.toolbar.showusers.title": "Mostrar as usuarias deste documento", "pad.colorpicker.save": "Gardar", "pad.colorpicker.cancel": "Cancelar", @@ -120,7 +121,7 @@ "pad.modals.disconnected.explanation": "Perdeuse a conexión co servidor", "pad.modals.disconnected.cause": "O servidor non está dispoñible. Póñase en contacto co administrador do servizo se o problema continúa.", "pad.share": "Compartir este documento", - "pad.share.readonly": "Só lectura", + "pad.share.readonly": "Lectura só", "pad.share.link": "Ligazón", "pad.share.emebdcode": "Incorporar o URL", "pad.chat": "Chat", diff --git a/src/locales/hu.json b/src/locales/hu.json index 46f111903..377672b17 100644 --- a/src/locales/hu.json +++ b/src/locales/hu.json @@ -10,7 +10,8 @@ "Notramo", "Ovari", "R-Joe", - "Tgr" + "Tgr", + "Urbalazs" ] }, "admin.page-title": "Admin irányítópult - Etherpad", @@ -67,7 +68,7 @@ "pad.toolbar.embed.title": "Jegyzetfüzet beágyazása és megosztása", "pad.toolbar.showusers.title": "Jegyzetfüzet felhasználóinak megmutatása", "pad.colorpicker.save": "Mentés", - "pad.colorpicker.cancel": "Mégsem", + "pad.colorpicker.cancel": "Mégse", "pad.loading": "Betöltés…", "pad.noCookie": "Nem található a süti. Engedélyezd a böngésződben a sütik használatát! A munkamenet és a beállítások nem kerülnek mentésre a látogatások között. Ennek oka lehet az, hogy az Etherpad egyes böngészőkben szerepel az iFrame-ben. Ellenőrizze, hogy az Etherpad ugyanabban az altartomány / tartományban van-e, mint a szülő iFrame", "pad.permissionDenied": "Nincs engedélyed ezen jegyzetfüzet eléréséhez", diff --git a/src/locales/ia.json b/src/locales/ia.json index a593f42a9..86773cc09 100644 --- a/src/locales/ia.json +++ b/src/locales/ia.json @@ -56,6 +56,7 @@ "pad.toolbar.savedRevision.title": "Version salveguardate", "pad.toolbar.settings.title": "Configuration", "pad.toolbar.embed.title": "Condivider e incorporar iste pad", + "pad.toolbar.home.title": "Retro al initio", "pad.toolbar.showusers.title": "Monstrar le usatores de iste pad", "pad.colorpicker.save": "Salveguardar", "pad.colorpicker.cancel": "Cancellar", diff --git a/src/locales/it.json b/src/locales/it.json index 0774f6ad5..81a51b297 100644 --- a/src/locales/it.json +++ b/src/locales/it.json @@ -42,6 +42,7 @@ "pad.toolbar.savedRevision.title": "Versione salvata", "pad.toolbar.settings.title": "Impostazioni", "pad.toolbar.embed.title": "Condividi ed incorpora questo Pad", + "pad.toolbar.home.title": "Torna alla pagina principale", "pad.toolbar.showusers.title": "Visualizza gli utenti su questo Pad", "pad.colorpicker.save": "Salva", "pad.colorpicker.cancel": "Annulla", diff --git a/src/locales/mk.json b/src/locales/mk.json index 059ccda33..dc14015c5 100644 --- a/src/locales/mk.json +++ b/src/locales/mk.json @@ -58,6 +58,7 @@ "pad.toolbar.savedRevision.title": "Зачувај преработка", "pad.toolbar.settings.title": "Поставки", "pad.toolbar.embed.title": "Споделете и вметнете ја тетраткава", + "pad.toolbar.home.title": "Назад на Почетна", "pad.toolbar.showusers.title": "Прикажи корисниците на тетраткава", "pad.colorpicker.save": "Зачувај", "pad.colorpicker.cancel": "Откажи", diff --git a/src/locales/ms.json b/src/locales/ms.json index 8fe029802..767d283e3 100644 --- a/src/locales/ms.json +++ b/src/locales/ms.json @@ -112,7 +112,7 @@ "pad.savedrevs.marked": "Semakan ini telah ditandai sebagai semakan tersimpan", "pad.savedrevs.timeslider": "Anda boleh melihat semakan yang tersimpan dengan melawat gelangsar masa", "pad.userlist.entername": "Taipkan nama anda", - "pad.userlist.unnamed": "tanpa nama", + "pad.userlist.unnamed": "tidak bernama", "pad.editbar.clearcolors": "Padamkan warna pengarang pada seluruh dokumen?", "pad.impexp.importbutton": "Import Sekarang", "pad.impexp.importing": "Sedang mengimport...", diff --git a/src/locales/ne.json b/src/locales/ne.json index 17bb951ac..29515c7ff 100644 --- a/src/locales/ne.json +++ b/src/locales/ne.json @@ -12,6 +12,7 @@ ] }, "admin_plugins.description": "विवरण", + "admin_plugins.name": "नाम", "index.newPad": "नयाँ प्याड", "index.createOpenPad": "नाम सहितको नयाँ प्याड सिर्जना गर्ने / खोल्ने :", "pad.toolbar.bold.title": "मोटो (Ctrl-B)", diff --git a/src/locales/pms.json b/src/locales/pms.json index 220a3380a..d3270f81d 100644 --- a/src/locales/pms.json +++ b/src/locales/pms.json @@ -56,6 +56,7 @@ "pad.toolbar.savedRevision.title": "Argistré la revision", "pad.toolbar.settings.title": "Paràmeter", "pad.toolbar.embed.title": "Partagé e antëgré ës feuj", + "pad.toolbar.home.title": "Artorn a l'intrada", "pad.toolbar.showusers.title": "Smon-e j'utent ansima a 's feuj", "pad.colorpicker.save": "Argistré", "pad.colorpicker.cancel": "Anulé", diff --git a/src/locales/ps.json b/src/locales/ps.json index 7413c41e2..59ee52f10 100644 --- a/src/locales/ps.json +++ b/src/locales/ps.json @@ -1,11 +1,12 @@ { "@metadata": { "authors": [ - "Ahmed-Najib-Biabani-Ibrahimkhel" + "Ahmed-Najib-Biabani-Ibrahimkhel", + "شاه زمان پټان" ] }, "index.newPad": "نوې ليکچه", - "index.createOpenPad": "يا په همدې نوم يوه نوې ليکچه جوړول/پرانيستل:", + "index.createOpenPad": "يا په همدې نوم يوه نوې ليکچه جوړول/پرانېستل:", "pad.toolbar.bold.title": "زغرد (Ctrl-B)", "pad.toolbar.italic.title": "رېوند (Ctrl-I)", "pad.toolbar.underline.title": "لرکرښن (Ctrl+U)", @@ -16,11 +17,12 @@ "pad.toolbar.redo.title": "بياکړل (Ctrl-Y)", "pad.toolbar.clearAuthorship.title": "د ليکوالۍ رنگونه سپينول (Ctrl+Shift+C)", "pad.toolbar.savedRevision.title": "مخکتنه خوندي کول", - "pad.toolbar.settings.title": "امستنې", + "pad.toolbar.settings.title": "اوڼنې", + "pad.toolbar.home.title": "بېرته کور ته", "pad.colorpicker.save": "خوندي کول", "pad.colorpicker.cancel": "ناگارل", "pad.loading": "رابرسېرېږي...", - "pad.settings.padSettings": "د ليکچې امستنې", + "pad.settings.padSettings": "د ليکچې اوڼنې", "pad.settings.myView": "زما کتنه", "pad.settings.stickychat": "تل په پردې بانډار کول", "pad.settings.chatandusers": "کارنان او بانډار ښکاره کول", diff --git a/src/locales/ru.json b/src/locales/ru.json index 457f17864..92e9b8352 100644 --- a/src/locales/ru.json +++ b/src/locales/ru.json @@ -71,6 +71,7 @@ "pad.toolbar.savedRevision.title": "Сохранить версию", "pad.toolbar.settings.title": "Настройки", "pad.toolbar.embed.title": "Поделиться и встроить этот документ", + "pad.toolbar.home.title": "Вернуться в начало", "pad.toolbar.showusers.title": "Показать пользователей в документе", "pad.colorpicker.save": "Сохранить", "pad.colorpicker.cancel": "Отмена", diff --git a/src/locales/sh.json b/src/locales/sh-latn.json similarity index 99% rename from src/locales/sh.json rename to src/locales/sh-latn.json index f5c045c55..e09c64dd4 100644 --- a/src/locales/sh.json +++ b/src/locales/sh-latn.json @@ -1,8 +1,7 @@ { "@metadata": { "authors": [ - "Conquistador", - "Vlad5250" + "Winston Sung" ] }, "admin_plugins.available_not-found": "Nijedan plugin nije pronađen.", diff --git a/src/locales/uk.json b/src/locales/uk.json index 314e3219d..5a8e06888 100644 --- a/src/locales/uk.json +++ b/src/locales/uk.json @@ -84,6 +84,8 @@ "pad.settings.fontType": "Тип шрифту:", "pad.settings.fontType.normal": "Звичайний", "pad.settings.language": "Мова:", + "pad.settings.deletePad": "Вилучити документ", + "pad.delete.confirm": "Ви дійсно хочете вилучити цей документ?", "pad.settings.about": "Про програму", "pad.settings.poweredBy": "Працює на", "pad.importExport.import_export": "Імпорт/Експорт", diff --git a/src/locales/zh-hant.json b/src/locales/zh-hant.json index 4933b5a18..6bb3a1f05 100644 --- a/src/locales/zh-hant.json +++ b/src/locales/zh-hant.json @@ -66,6 +66,7 @@ "pad.toolbar.savedRevision.title": "儲存修訂版", "pad.toolbar.settings.title": "設定", "pad.toolbar.embed.title": "分享和嵌入此記事本", + "pad.toolbar.home.title": "返回首頁", "pad.toolbar.showusers.title": "顯示此記事本的使用者", "pad.colorpicker.save": "儲存", "pad.colorpicker.cancel": "取消", diff --git a/src/node/db/SessionStore.ts b/src/node/db/SessionStore.ts index 0b398efad..15eb5a971 100644 --- a/src/node/db/SessionStore.ts +++ b/src/node/db/SessionStore.ts @@ -1,13 +1,15 @@ -'use strict'; +// @ts-nocheck + const DB = require('./DB'); -const Store = require('@etherpad/express-session').Store; +import expressSession from 'express-session' + const log4js = require('log4js'); const util = require('util'); const logger = log4js.getLogger('SessionStore'); -class SessionStore extends Store { +class SessionStore extends expressSession.Store { /** * @param {?number} [refresh] - How often (in milliseconds) `touch()` will update a session's * database record with the cookie's latest expiration time. If the difference between the @@ -19,7 +21,7 @@ class SessionStore extends Store { * Etherpad is restarted. Use `null` to prevent `touch()` from ever updating the record. * Ignored if the cookie does not expire. */ - constructor(refresh = null) { + constructor(refresh: number | null = null) { super(); this._refresh = refresh; // Maps session ID to an object with the following properties: diff --git a/src/node/hooks/express.ts b/src/node/hooks/express.ts index d4e92dd35..633a85ae8 100644 --- a/src/node/hooks/express.ts +++ b/src/node/hooks/express.ts @@ -4,12 +4,10 @@ import {Socket} from "node:net"; import type {MapArrayType} from "../types/MapType"; import _ from 'underscore'; -// @ts-ignore import cookieParser from 'cookie-parser'; import events from 'events'; import express from 'express'; -// @ts-ignore -import expressSession from '@etherpad/express-session'; +import expressSession, {Store} from 'express-session'; import fs from 'fs'; const hooks = require('../../static/js/pluginfw/hooks'); import log4js from 'log4js'; @@ -24,7 +22,7 @@ import SecretRotator from '../security/SecretRotator'; let secretRotator: SecretRotator|null = null; const logger = log4js.getLogger('http'); let serverName:string; -let sessionStore: { shutdown: () => void; } | null; +let sessionStore: Store | null; const sockets:Set = new Set(); const socketsEvents = new events.EventEmitter(); const startTime = stats.settableGauge('httpStartTime'); @@ -59,6 +57,7 @@ const closeServer = async () => { startTime.setValue(0); logger.info('HTTP server closed'); } + // @ts-ignore if (sessionStore) sessionStore.shutdown(); sessionStore = null; if (secretRotator) secretRotator.stop(); @@ -198,10 +197,9 @@ exports.restartServer = async () => { sessionStore = new SessionStore(settings.cookie.sessionRefreshInterval); exports.sessionMiddleware = expressSession({ - propagateTouch: true, rolling: true, secret, - store: sessionStore, + store: sessionStore ?? undefined, resave: false, saveUninitialized: false, // Set the cookie name to a javascript identifier compatible string. Makes code handling it @@ -234,7 +232,7 @@ exports.restartServer = async () => { // Give plugins an opportunity to install handlers/middleware before the express-session // middleware. This allows plugins to avoid creating an express-session record in the database // when it is not needed (e.g., public static content). - await hooks.aCallAll('expressPreSession', {app}); + await hooks.aCallAll('expressPreSession', {app, settings}); app.use(exports.sessionMiddleware); app.use(webaccess.checkAccess); diff --git a/src/node/hooks/express/adminplugins.ts b/src/node/hooks/express/adminplugins.ts index 178e6187f..47f06c513 100644 --- a/src/node/hooks/express/adminplugins.ts +++ b/src/node/hooks/express/adminplugins.ts @@ -39,6 +39,11 @@ exports.socketio = (hookName:string, args:ArgsExpressType, cb:Function) => { }) } + socket.on('getStats', ()=>{ + console.log("Getting stats for admin plugins"); + socket.emit('results:stats', require('../../stats').toJSON()); + }) + socket.on('getInstalled', async (query: string) => { // send currently installed plugins const installed = @@ -53,6 +58,7 @@ exports.socketio = (hookName:string, args:ArgsExpressType, cb:Function) => { socket.emit('results:installed', {installed}); }); + socket.on('checkUpdates', async () => { // Check plugins for updates try { diff --git a/src/node/hooks/express/apicalls.ts b/src/node/hooks/express/apicalls.ts index 91c44e389..946e86549 100644 --- a/src/node/hooks/express/apicalls.ts +++ b/src/node/hooks/express/apicalls.ts @@ -1,16 +1,39 @@ 'use strict'; +import express from "express"; + const log4js = require('log4js'); const clientLogger = log4js.getLogger('client'); const {Formidable} = require('formidable'); const apiHandler = require('../../handler/APIHandler'); const util = require('util'); + +function objectAsString(obj: any): string { + let output = ''; + for (const property in obj) { + if(obj.hasOwnProperty(property) && typeof obj[property] !== 'function') { + let value = obj[property]; + if(typeof value === 'object' && !Array.isArray(value) && value !== null) { + value = '{' + objectAsString(value) + '}'; + } + output += property + ': ' + value +'; '; + } + } + return output; +} + exports.expressPreSession = async (hookName:string, {app}:any) => { + app.use(express.json()); // The Etherpad client side sends information about how a disconnect happened app.post('/ep/pad/connection-diagnostic-info', async (req:any, res:any) => { - const [fields, files] = await (new Formidable({})).parse(req); - clientLogger.info(`DIAGNOSTIC-INFO: ${fields.diagnosticInfo}`); + if (!req.body ||!req.body.diagnosticInfo || typeof req.body.diagnosticInfo !== 'object') { + clientLogger.warn('DIAGNOSTIC-INFO: No diagnostic info provided'); + res.status(400).end('No diagnostic info provided'); + return; + } + + clientLogger.info(`DIAGNOSTIC-INFO: ${objectAsString(req.body.diagnosticInfo)}`); res.end('OK'); }); diff --git a/src/node/hooks/express/specialpages.ts b/src/node/hooks/express/specialpages.ts index dca63b9ae..4184789d3 100644 --- a/src/node/hooks/express/specialpages.ts +++ b/src/node/hooks/express/specialpages.ts @@ -20,7 +20,7 @@ exports.socketio = (hookName: string, {io}: any) => { } -exports.expressPreSession = async (hookName:string, {app}:ArgsExpressType) => { +exports.expressPreSession = async (hookName:string, {app, settings}:ArgsExpressType) => { // This endpoint is intended to conform to: // https://www.ietf.org/archive/id/draft-inadarei-api-health-check-06.html app.get('/health', (req:any, res:any) => { @@ -31,9 +31,12 @@ exports.expressPreSession = async (hookName:string, {app}:ArgsExpressType) => { }); }); - app.get('/stats', (req:any, res:any) => { - res.json(require('../../stats').toJSON()); - }); + if (settings.enableMetrics) { + app.get('/stats', (req:any, res:any) => { + res.json(require('../../stats').toJSON()); + }); + } + app.get('/javascript', (req:any, res:any) => { res.send(eejs.require('ep_etherpad-lite/templates/javascript.html', {req})); diff --git a/src/node/types/ArgsExpressType.ts b/src/node/types/ArgsExpressType.ts index d8dc700be..cc409c033 100644 --- a/src/node/types/ArgsExpressType.ts +++ b/src/node/types/ArgsExpressType.ts @@ -1,7 +1,9 @@ import {Express} from "express"; +import {MapArrayType} from "./MapType"; export type ArgsExpressType = { app:Express, io: any, server:any + settings: MapArrayType } diff --git a/src/node/utils/Settings.ts b/src/node/utils/Settings.ts index 4d7b421e1..de21727f0 100644 --- a/src/node/utils/Settings.ts +++ b/src/node/utils/Settings.ts @@ -205,6 +205,12 @@ exports.padOptions = { lang: null, }; + +/** + * Wether to enable the /stats endpoint. The functionality in the admin menu is untouched for this. + */ +exports.enableMetrics = true + /** * Whether certain shortcut keys are enabled for a user in the pad */ @@ -245,7 +251,7 @@ exports.toolbar = { ], right: [ ['importexport', 'timeslider', 'savedrevision'], - ['settings', 'embed'], + ['settings', 'embed', 'home'], ['showusers'], ], timeslider: [ diff --git a/src/node/utils/toolbar.ts b/src/node/utils/toolbar.ts index f0ef45479..461ede049 100644 --- a/src/node/utils/toolbar.ts +++ b/src/node/utils/toolbar.ts @@ -240,6 +240,7 @@ module.exports = { settings: defaultButtonAttributes('settings'), embed: defaultButtonAttributes('embed'), showusers: defaultButtonAttributes('showusers'), + home: defaultButtonAttributes('home'), timeslider_export: { command: 'import_export', diff --git a/src/package.json b/src/package.json index 6d827911d..a14a99443 100644 --- a/src/package.json +++ b/src/package.json @@ -30,23 +30,23 @@ } ], "dependencies": { - "@etherpad/express-session": "^1.18.4", "async": "^3.2.6", - "axios": "^1.8.4", + "axios": "^1.10.0", "cookie-parser": "^1.4.7", "cross-env": "^7.0.3", "cross-spawn": "^7.0.6", "ejs": "^3.1.10", - "esbuild": "^0.25.5", + "esbuild": "^0.25.8", "express": "4.21.2", - "express-rate-limit": "^7.5.0", + "express-rate-limit": "^8.0.0", + "express-session": "^1.18.2", "fast-deep-equal": "^3.1.3", "find-root": "1.1.0", "formidable": "^3.5.4", "http-errors": "^2.0.0", "jose": "^5.10.0", "js-cookie": "^3.0.5", - "jsdom": "^26.0.0", + "jsdom": "^26.1.0", "jsonminify": "0.4.2", "jsonwebtoken": "^9.0.2", "jwt-decode": "^4.0.0", @@ -57,8 +57,8 @@ "lru-cache": "^11.1.0", "measured-core": "^2.0.0", "mime-types": "^3.0.1", - "oidc-provider": "^9.1.3", - "openapi-backend": "^5.12.0", + "oidc-provider": "^9.3.0", + "openapi-backend": "^5.13.0", "proxy-addr": "^2.0.7", "rate-limiter-flexible": "^7.1.1", "rehype": "^13.0.2", @@ -69,7 +69,7 @@ "semver": "^7.7.2", "socket.io": "^4.8.1", "socket.io-client": "^4.8.1", - "superagent": "10.2.1", + "superagent": "10.2.2", "swagger-ui-express": "^5.0.1", "tinycon": "0.6.8", "tsx": "4.20.3", @@ -83,19 +83,21 @@ "etherpad-lite": "node/server.ts" }, "devDependencies": { - "@playwright/test": "^1.53.0", + "@playwright/test": "^1.54.1", "@types/async": "^3.2.24", + "@types/cookie-parser": "^1.4.9", "@types/express": "^4.17.21", + "@types/express-session": "^1.18.2", "@types/formidable": "^3.4.5", "@types/http-errors": "^2.0.5", "@types/jquery": "^3.5.32", "@types/js-cookie": "^3.0.6", "@types/jsdom": "^21.1.7", - "@types/jsonwebtoken": "^9.0.9", + "@types/jsonwebtoken": "^9.0.10", "@types/mime-types": "^3.0.1", "@types/mocha": "^10.0.9", - "@types/node": "^24.0.1", - "@types/oidc-provider": "^9.1.0", + "@types/node": "^24.0.14", + "@types/oidc-provider": "^9.1.1", "@types/semver": "^7.7.0", "@types/sinon": "^17.0.3", "@types/supertest": "^6.0.2", @@ -103,19 +105,19 @@ "@types/underscore": "^1.13.0", "@types/whatwg-mimetype": "^3.0.2", "chokidar": "^4.0.3", - "eslint": "^9.28.0", + "eslint": "^9.31.0", "eslint-config-etherpad": "^4.0.4", - "etherpad-cli-client": "^3.0.2", - "mocha": "^11.6.0", + "etherpad-cli-client": "^3.0.4", + "mocha": "^11.7.1", "mocha-froth": "^0.2.10", "nodeify": "^1.0.1", "openapi-schema-validation": "^0.4.2", "set-cookie-parser": "^2.7.1", "sinon": "^21.0.0", "split-grid": "^1.0.11", - "supertest": "^7.1.1", + "supertest": "^7.1.3", "typescript": "^5.8.2", - "vitest": "^3.2.3" + "vitest": "^3.2.4" }, "engines": { "node": ">=18.18.2", @@ -142,6 +144,6 @@ "debug:socketio": "cross-env DEBUG=socket.io* node --require tsx/cjs node/server.ts", "test:vitest": "vitest" }, - "version": "2.3.2", + "version": "2.4.0", "license": "Apache-2.0" } diff --git a/src/static/css/pad/icons.css b/src/static/css/pad/icons.css index eb1016dca..f93eff98e 100644 --- a/src/static/css/pad/icons.css +++ b/src/static/css/pad/icons.css @@ -101,7 +101,7 @@ .buttonicon-pencil-alt:before { content: '\e808'; } /* '' */ .buttonicon-file-code:before { content: '\e809'; } /* '' */ .buttonicon-mail:before { content: '\e80a'; } /* '' */ -.buttonicon-home:before { content: '\e80b'; } /* '' */ +.buttonicon-home:before { content: '\e80b'; font-size: 20px } /* '' */ .buttonicon-trash:before { content: '\e80e'; } /* '' */ .buttonicon-times:before { content: '\e826'; } /* '' */ .buttonicon-pause:before { content: '\e829'; } /* '' */ diff --git a/src/static/js/ace2_inner.ts b/src/static/js/ace2_inner.ts index 709840f80..654042d69 100644 --- a/src/static/js/ace2_inner.ts +++ b/src/static/js/ace2_inner.ts @@ -2526,7 +2526,15 @@ function Ace2Inner(editorInfo, cssManagers) { const handleKeyEvent = (evt) => { if (!isEditable) return; - const {type, charCode, keyCode, which, altKey, shiftKey} = evt; + const {type, charCode, keyCode, which, shiftKey} = evt; + + // If DOM3 support exists, ensure that the left ALT key was pressed. This + // allows keyboard layouts with special meaning for right-alt-char to + // continue working on Firefox / macOS. + let altKey = evt.altKey; + if (evt.originalEvent.location !== undefined) { + altKey = altKey && evt.originalEvent.location === evt.originalEvent.DOM_KEY_LOCATION_LEFT; + } // Don't take action based on modifier keys going up and down. // Modifier keys do not generate "keypress" events. diff --git a/src/static/js/l10n.ts b/src/static/js/l10n.ts index 2211318c0..929708b40 100644 --- a/src/static/js/l10n.ts +++ b/src/static/js/l10n.ts @@ -7,8 +7,6 @@ let language = document.cookie.match(/language=((\w{2,3})(-\w+)?)/); if (language) regexpLang = language[1]; html10n.mt.bind('indexed', () => { - console.log('Navigator language', navigator.language) - console.log('Localizing things', [regexpLang, navigator.language, 'en']) html10n.localize([regexpLang, navigator.language, 'en']); }); diff --git a/src/static/js/pad.ts b/src/static/js/pad.ts index e94611fcd..5edcb1119 100644 --- a/src/static/js/pad.ts +++ b/src/static/js/pad.ts @@ -725,18 +725,18 @@ const pad = { } }, asyncSendDiagnosticInfo: () => { - window.setTimeout(() => { - $.ajax( - { - type: 'post', - url: '../ep/pad/connection-diagnostic-info', - data: { - diagnosticInfo: JSON.stringify(pad.diagnosticInfo), - }, - success: () => {}, - error: () => {}, - }); - }, 0); + const currentUrl = window.location.href; + fetch('../ep/pad/connection-diagnostic-info', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + diagnosticInfo: pad.diagnosticInfo, + }), + }).catch((error) => { + console.error('Error sending diagnostic info:', error); + }) }, forceReconnect: () => { $('form#reconnectform input.padId').val(pad.getPadId()); diff --git a/src/static/js/pad_editbar.ts b/src/static/js/pad_editbar.ts index d98174fe5..810a9caac 100644 --- a/src/static/js/pad_editbar.ts +++ b/src/static/js/pad_editbar.ts @@ -364,6 +364,9 @@ exports.padeditbar = new class { this.registerDropdownCommand('connectivity'); this.registerDropdownCommand('import_export'); this.registerDropdownCommand('embed'); + this.registerCommand('home', ()=>{ + window.location.href = window.location.href + "/../.." + }) this.registerCommand('settings', () => { this.toggleDropDown('settings'); diff --git a/src/static/js/pad_userlist.ts b/src/static/js/pad_userlist.ts index 4a665d10e..3bed27ab3 100644 --- a/src/static/js/pad_userlist.ts +++ b/src/static/js/pad_userlist.ts @@ -489,6 +489,15 @@ const paduserlist = (() => { online++; } } + const recentPadsList = JSON.parse(localStorage.getItem('recentPads')); + const pathSegments = window.location.pathname.split('/'); + const padName = pathSegments[pathSegments.length - 1]; + const existingPad = recentPadsList.find((pad) => pad.name === padName); + if (existingPad) { + existingPad.members = online; + } + localStorage.setItem('recentPads', JSON.stringify(recentPadsList)); + $('#online_count').text(online); diff --git a/src/static/js/scroll.ts b/src/static/js/scroll.ts index 74c246243..d4fe5a5d3 100644 --- a/src/static/js/scroll.ts +++ b/src/static/js/scroll.ts @@ -16,7 +16,6 @@ class Scroll { this.outerWin = outerWin; this.doc = this.outerWin.contentDocument!; this.rootDocument = document; - console.log(this.rootDocument) } scrollWhenCaretIsInTheLastLineOfViewportWhenNecessary(rep: RepModel, isScrollableEvent: boolean, innerHeight: number) { diff --git a/src/static/js/vendors/html10n.ts b/src/static/js/vendors/html10n.ts index 6f86a79b1..156ab75f6 100644 --- a/src/static/js/vendors/html10n.ts +++ b/src/static/js/vendors/html10n.ts @@ -472,7 +472,6 @@ export class Html10n { } localize(langs: (string|undefined)[]|string) { - console.log('Available langs ', langs) if ('string' === typeof langs) { langs = [langs]; } diff --git a/src/static/skins/colibris/images/Designlayout.png b/src/static/skins/colibris/images/Designlayout.png new file mode 100644 index 000000000..399bd6df7 Binary files /dev/null and b/src/static/skins/colibris/images/Designlayout.png differ diff --git a/src/static/skins/colibris/index.css b/src/static/skins/colibris/index.css index 5129c43a8..fc4a87f61 100644 --- a/src/static/skins/colibris/index.css +++ b/src/static/skins/colibris/index.css @@ -1,88 +1,258 @@ -#button, -body, -form { - border: none +:root { + --etherpad-color: #64d29b; + --etherpad-color-dark: #4a5d5c; + --etherpad-border: oklch(92.8% 0.006 264.531); + --muted-text: oklch(44.6% 0.03 256.802); + --muted-border: oklch(87.2% 0.01 258.338); + --muted-background: hsl(240 4.8% 95.9%); + --ep-color: rgb(22 163 74); + --warm-green-olive: #7c9a3e; + --warm-green-moss: #8fae4a; + --warm-green-lime: #b7c96c; + --warm-green-avocado: #6e8b3d; + --warm-green-spring: #a3c85a; } + body { - background: url(images/fond.jpg) center center no-repeat fixed #fff; - font-family: Quicksand, Cantarell, "Open Sans", "Helvetica Neue", sans-serif; - font-size: 16px; - line-height: 1.42857143; - color: #333; + border-top: 0; + background: oklch(98.5% 0.002 247.839); display: flex; - align-items: center; - justify-content: center; - background-size: cover; + flex-direction: column; } -#wrapper { - border-top: none; - margin-top: 0; - padding: 0; - background: 0 0; - box-shadow: none +h1 { + margin: auto 0 0; + font-size: 26px; } -input { - color: #4a5d5c; -} - -#inner { - background: transparent; - padding-top: 0; - width: 350px; - max-width: 350px; - text-align: center; - color:#FFF; -} - -#label { - text-shadow: none; - color: #FFF; - font-weight: normal; - text-align: center; -} - -#button { - margin: 0 auto; - text-align: center; - width: 100%; - text-shadow: none; - font-size: 23px; - line-height: 1.8; - color: #64d29b; - background: #586a69; - border-radius: 3px; - box-shadow: none; - height: 53px; - border: none; +.mission-statement, .pad-datalist { display: block; } - -button[type=submit] { - border-top-right-radius: 3px; - border-bottom-right-radius: 3px; - left: 305px; - color: #64d29b; - background: #586a69; - border: none; - top: 0; - opacity: 1; - transition: .2s background; +.mission-statement h2 { + font-weight: 700; + font-size: 2.25rem; + text-align: center; + margin: 0; + padding-top: 4rem; } -#button:hover, -button[type=submit]:hover { - cursor: pointer; - background: #4a5d5c; - color: #64d29b; +.mission-statement p { + color: var(--muted-text); + font-size: 20px; + text-align: center; + max-width: 40%; + margin: auto; +} + +#wrapper { + border-top: 0; + margin-top: 0; + padding: 0; + background: unset; + box-shadow: none; +} + +#inner { + display: flex; + flex-direction: column; + position: relative; + margin-top: 20px; + margin-bottom: 20px; + max-width: 80%; +} + +#label { + font-size: 0.875rem; + line-height: 1.25rem; + font-weight: 700; + color: rgb(55 65 81); + margin-bottom: 0.5rem; + margin-top: 0; +} + +#go2Name { + order: 1; +} + +#padname, #go2Name, #go2Name [type="submit"], #button, #button:hover { + all: unset; +} + + +#padname { + width: 100%; + padding: 0.5rem 0.75rem; + border: 1px solid #d1d5db; + border-radius: 0.375rem; + font-size: 1rem; + margin-bottom: 0.5rem; + outline: none; + transition: border 0.2s; } #padname { - height: 38px; - max-width: 350px; - padding: 0 12px; + box-sizing: border-box; + width: 100%; + color: var(--muted-text); + border: 1px solid var(--muted-border); + border-radius: 5px; +} + +#button, #button:hover, #go2Name [type="submit"] { + order: 2; + margin-top: 0.5rem; + line-height: 1.25rem; + background: white; + border: 1px solid var(--muted-border); + text-align: center; + padding-top: 0.5rem; + padding-bottom: 0.5rem; + font-size: 14px; + font-weight: 700; + border-radius: 5px; + cursor: pointer; +} + +#go2Name [type="submit"]:hover { + background-color: oklch(52.7% 0.154 150.069) +} + +#button, #button:hover { + order: 2; +} + +#button:hover { + background-color: var(--muted-background); +} + +#go2Name input { + width: 100%; +} + + +#go2Name [type="submit"] { + display: block; + background-color: var(--ep-color); + color: white; + width: 100%; +} + + +body nav { + display: flex; + border-bottom-width: 1px; + border-bottom-style: solid; + border-bottom-color: var(--etherpad-border); + padding: 1rem 1.5rem; +} + +.logo-box svg { + width: 1.25rem; + height: 1.25rem; + color: #fff; +} + +.logo-box { + width: 2rem; + height: 2rem; + background: #16a34a; + display: flex; + align-items: center; + justify-content: center; + margin-right: 1rem; +} + + +#wrapper, .pad-datalist { + width: 100%; + max-width: 28rem; + background: #fff; + border: 1px solid #e5e7eb; + border-radius: 0.75rem; + box-shadow: 0 1px 2px 0 #0001; + margin: 2rem auto auto; +} + +.pad-datalist { + max-width: 56rem; + margin-bottom: 1rem; +} + +.break-column { + flex-basis: 100%; + width: 0; +} + +ul { + list-style-type: none; +} + +.recent-pad { + padding: 0.75rem 1.5rem; + display: flex; position: relative; -} \ No newline at end of file + flex-direction: column; +} + +.body { + flex-grow: 1; + background: linear-gradient( + to bottom right, + #d1fae5, /* emerald-100 */ + #f0fdfa, /* teal-50 */ + #dbeafe, /* blue-100 */ + #c7d2fe /* indigo-200 */ + ); +} + +.recent-pad:hover a { + color: var(--ep-color); +} + +.recent-pad-arrow { + position: absolute; + right: 1rem; +} + +.recent-pad a { + font-size: 0.875rem; + line-height: 1.25rem; + font-weight: 800; +} + +a, a:visited, a:hover, a:active { + color: inherit; +} + +.pad-datalist h2 { + border-bottom: 1px solid var(--muted-border); + padding: 1rem 1.5rem; + border-bottom-width: 1px; + border-bottom-style: solid; + border-bottom-color: #e5e7eb; +} + +.card-content { + padding: 1.5rem; +} + +@media (max-width: 640px) { + #inner { + max-width: 100%; + padding: 0 1rem; + } + + .mission-statement p { + max-width: 100%; + } + + .pad-datalist { + max-width: 90%; + } + + .mission-statement h2 { + font-size: 1.5rem; + } +} diff --git a/src/static/skins/colibris/index.js b/src/static/skins/colibris/index.js index 633db7267..3001fa5f8 100644 --- a/src/static/skins/colibris/index.js +++ b/src/static/skins/colibris/index.js @@ -1,7 +1,137 @@ 'use strict'; +window.addEventListener('pageshow', (event) => { + if (event.persisted) { + if (document.readyState === 'complete' || document.readyState === 'interactive') { + window.customStart(); + } else { + window.addEventListener('DOMContentLoaded', window.customStart, {once: true}); + } + } +}); + window.customStart = () => { + document.getElementById('recent-pads').replaceChildren() // define your javascript here // jquery is available - except index.js // you can load extra scripts with $.getScript http://api.jquery.com/jQuery.getScript/ + const divHoldingPlaceHolderLabel = document + .querySelector('[data-l10n-id="index.placeholderPadEnter"]'); + + const observer = new MutationObserver(() => { + document.querySelector('#go2Name input') + .setAttribute('placeholder', divHoldingPlaceHolderLabel.textContent); + }); + + observer + .observe(divHoldingPlaceHolderLabel, {childList: true, subtree: true, characterData: true}); + + + const recentPadList = document.getElementById('recent-pads'); + const parentStyle = recentPadList.parentElement.style; + const recentPadListHeading = document.querySelector('[data-l10n-id="index.recentPads"]'); + const recentPadsFromLocalStorage = localStorage.getItem('recentPads'); + let recentPadListData = []; + if (recentPadsFromLocalStorage != null) { + recentPadListData = JSON.parse(recentPadsFromLocalStorage); + } + + // Remove duplicates based on pad name and sort by timestamp + recentPadListData = recentPadListData.filter( + (pad, index, self) => + index === self.findIndex((p) => p.name === pad.name) + ).sort((a, b) => new Date(a.timestamp) > new Date(b.timestamp) ? -1 : 1); + + if (recentPadListData.length === 0) { + recentPadListHeading.setAttribute('data-l10n-id', 'index.recentPadsEmpty'); + parentStyle.display = 'flex'; + parentStyle.justifyContent = 'center'; + parentStyle.alignItems = 'center'; + parentStyle.maxHeight = '100%'; + recentPadList.remove(); + } else { + /** + * @typedef {Object} Pad + * @property {string} name + */ + + /** + * @param {Pad} pad + */ + + const arrowIcon = ''; + const clockIcon = ''; + const personalIcon = ''; + recentPadListData.forEach((pad) => { + const li = document.createElement('li'); + + + li.style.cursor = 'pointer'; + + li.className = 'recent-pad'; + const padPath = `${window.location.href}p/${pad.name}`; + const link = document.createElement('a'); + link.style.textDecoration = 'none'; + + link.href = padPath; + link.innerText = pad.name; + li.appendChild(link); + + + const arrowIconElement = document.createElement('span'); + arrowIconElement.className = 'recent-pad-arrow'; + arrowIconElement.innerHTML = arrowIcon; + li.appendChild(arrowIconElement); + + const nextRow = document.createElement('div'); + + nextRow.style.display = 'flex'; + nextRow.style.gap = '10px'; + nextRow.style.marginTop = '10px'; + + const clockIconElement = document.createElement('span'); + clockIconElement.className = 'recent-pad-clock'; + clockIconElement.innerHTML = clockIcon; + + nextRow.appendChild(clockIconElement); + + const time = new Date(pad.timestamp); + const userLocale = navigator.language || 'en-US'; + + const formattedTime = time.toLocaleDateString(userLocale, { + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + }); + const timeElement = document.createElement('span'); + timeElement.className = 'recent-pad-time'; + timeElement.innerText = formattedTime; + + nextRow.appendChild(timeElement); + + const personalIconElement = document.createElement('span'); + personalIconElement.className = 'recent-pad-personal'; + personalIconElement.innerHTML = personalIcon; + + personalIconElement.style.marginLeft = '5px'; + + const members = document.createElement('span'); + members.className = 'recent-pad-members'; + members.innerText = pad.members; + + + nextRow.appendChild(personalIconElement); + nextRow.appendChild(members); + li.appendChild(nextRow); + + li.addEventListener('click', () => { + window.location.href = padPath; + }); + + // https://v0.dev/chat/etherpad-design-clone-qZnwOrVRXxH + recentPadList.appendChild(li); + }); + } }; diff --git a/src/static/skins/colibris/pad.js b/src/static/skins/colibris/pad.js index 3a2af8508..1e7a85b3f 100644 --- a/src/static/skins/colibris/pad.js +++ b/src/static/skins/colibris/pad.js @@ -1,7 +1,35 @@ 'use strict'; +const MAX_PADS_IN_HISTORY = 3; + window.customStart = () => { $('#pad_title').show(); $('.buttonicon').on('mousedown', function () { $(this).parent().addClass('pressed'); }); $('.buttonicon').on('mouseup', function () { $(this).parent().removeClass('pressed'); }); + + const pathSegments = window.location.pathname.split('/'); + const padName = pathSegments[pathSegments.length - 1]; + const recentPads = localStorage.getItem('recentPads'); + if (recentPads == null) { + localStorage.setItem('recentPads', JSON.stringify([])); + } + const recentPadsList = JSON.parse(localStorage.getItem('recentPads')); + if (!recentPadsList.some((pad) => pad.name === padName)) { + if (recentPadsList.length >= MAX_PADS_IN_HISTORY) { + recentPadsList.shift(); // Remove the oldest pad if we have more than 10 + } + recentPadsList.push({ + name: padName, + timestamp: new Date().toISOString(), // Store the timestamp for sorting + members: 1, + }); + localStorage.setItem('recentPads', JSON.stringify(recentPadsList)); + } else { + // Update the timestamp if the pad already exists + const existingPad = recentPadsList.find((pad) => pad.name === padName); + if (existingPad) { + existingPad.timestamp = new Date().toISOString(); + } + localStorage.setItem('recentPads', JSON.stringify(recentPadsList)); + } }; diff --git a/src/templates/index.html b/src/templates/index.html index f7d1a2c62..d46bd3405 100644 --- a/src/templates/index.html +++ b/src/templates/index.html @@ -109,6 +109,10 @@ width: 45px; height: 38px; } + nav, .mission-statement, .pad-datalist { + display: none; + } + @media only screen and (min-device-width: 320px) and (max-device-width: 800px) { body { background: #bbb; @@ -131,24 +135,45 @@ <% e.end_block(); %> + + + +
+
+

+

+
+
<% e.begin_block("indexWrapper"); %>
<% if (!settings.requireSession) { %> <% if (settings.editOnly) { %> - + <% } else {%> - - + <% } %>
- - + + +
<% } %>
<% e.end_block(); %>
+
+
+

+
    +
+
+
<% e.begin_block("indexCustomScripts"); %> diff --git a/src/templates/pad.html b/src/templates/pad.html index 6dd9a0ef8..abc9b7a7d 100644 --- a/src/templates/pad.html +++ b/src/templates/pad.html @@ -164,7 +164,7 @@

<% e.end_block(); %> - +

About

Powered by Etherpad diff --git a/src/tests/frontend-new/admin-spec/adminupdateplugins.spec.ts b/src/tests/frontend-new/admin-spec/adminupdateplugins.spec.ts index 214202350..5b5b87d65 100644 --- a/src/tests/frontend-new/admin-spec/adminupdateplugins.spec.ts +++ b/src/tests/frontend-new/admin-spec/adminupdateplugins.spec.ts @@ -13,7 +13,6 @@ test.describe('Plugins page', ()=> { await page.waitForSelector('.search-field'); const pluginTable = page.locator('table tbody').nth(1); await expect(pluginTable).not.toBeEmpty() - await expect(pluginTable.locator('tr')).toHaveCount(190) }) test('Searches for a plugin', async ({page}) => { @@ -33,8 +32,6 @@ test.describe('Plugins page', ()=> { await expect(pluginTable).not.toBeEmpty({ timeout: 15000 }) - const plugins = await pluginTable.locator('tr').count() - await expect(pluginTable.locator('tr')).toHaveCount(190) // Now everything is loaded, lets install a plugin diff --git a/src/tests/frontend-new/specs/editbar.spec.ts b/src/tests/frontend-new/specs/editbar.spec.ts new file mode 100644 index 000000000..c2dc56fda --- /dev/null +++ b/src/tests/frontend-new/specs/editbar.spec.ts @@ -0,0 +1,17 @@ +import {expect, test} from "@playwright/test"; +import {clearPadContent, getPadBody, goToNewPad} from "../helper/padHelper"; + +test.beforeEach(async ({ page })=>{ + // create a new pad before each test run + await goToNewPad(page); +}) + +test('should go to home on pad', async ({page}) => { + const homeButton = page.locator('.buttonicon.buttonicon-home') + const attribute = await homeButton.getAttribute('data-l10n-id') + expect(attribute).toBe('pad.toolbar.home.title'); + + await homeButton.click(); + const url = page.url(); + expect(url).not.toContain('/p/'); +}) diff --git a/src/tests/frontend-new/specs/indentation.spec.ts b/src/tests/frontend-new/specs/indentation.spec.ts index 3e94dbad3..1979a095d 100644 --- a/src/tests/frontend-new/specs/indentation.spec.ts +++ b/src/tests/frontend-new/specs/indentation.spec.ts @@ -38,7 +38,7 @@ test.describe('indentation button', function () { await page.locator('.buttonicon-indent').click() // type a bit, make a line break and type again - await padBody.locator('div').first().focus() + await padBody.focus() await page.keyboard.type('line 1') await page.keyboard.press('Enter'); await page.keyboard.type('line 2') diff --git a/ui/package.json b/ui/package.json index f5cb300e7..788475036 100644 --- a/ui/package.json +++ b/ui/package.json @@ -12,6 +12,6 @@ "devDependencies": { "ep_etherpad-lite": "workspace:../src", "typescript": "^5.8.2", - "vite": "^6.3.5" + "vite": "^7.0.4" } }