2
0
Эх сурвалжийг харах

chore: various fixes + updates

NGPixel 10 сар өмнө
parent
commit
5fb12c1e34

+ 5 - 5
.devcontainer/Dockerfile

@@ -1,7 +1,7 @@
 # Based of https://github.com/microsoft/vscode-dev-containers/blob/main/containers/javascript-node/.devcontainer/base.Dockerfile
 
 # [Choice] Node.js version (use -bullseye variants on local arm64/Apple Silicon): 16, 14, 12, 16-bullseye, 14-bullseye, 12-bullseye, 16-buster, 14-buster, 12-buster
-ARG VARIANT=18-bullseye
+ARG VARIANT=20-bullseye
 FROM node:${VARIANT}
 
 ENV DEBIAN_FRONTEND=noninteractive
@@ -62,9 +62,9 @@ RUN curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /
 RUN echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
     $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
 
-# Add ngrok Source
-RUN curl -s https://ngrok-agent.s3.amazonaws.com/ngrok.asc | sudo tee /etc/apt/trusted.gpg.d/ngrok.asc > /dev/null && \
-    echo "deb https://ngrok-agent.s3.amazonaws.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ngrok.list
+# Add cloudflared Source
+RUN curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null && \
+    echo "deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflared.list
 
 # Add Localazy Source
 RUN curl -sS https://dist.localazy.com/debian/pubkey.gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/localazy.gpg && \
@@ -74,6 +74,7 @@ RUN curl -sS https://dist.localazy.com/debian/pubkey.gpg | sudo gpg --dearmor -o
 RUN apt-get update && export DEBIAN_FRONTEND=noninteractive && apt-get install -qy \
     bash \
     build-essential \
+    cloudflared \
     curl \
     docker-ce-cli \
     jq \
@@ -83,7 +84,6 @@ RUN apt-get update && export DEBIAN_FRONTEND=noninteractive && apt-get install -
     localazy \
     nano \
     netcat \
-    ngrok \
     pandoc \
     unzip \
     wget

+ 1 - 3
.github/workflows/build.yml

@@ -10,6 +10,7 @@ jobs:
     name: Build
     runs-on: ubuntu-latest
     permissions:
+      contents: read
       packages: write
 
     steps:
@@ -76,10 +77,7 @@ jobs:
       with:
         context: .
         file: dev/build/Dockerfile
-        provenance: true
         push: true
-        # cache-from: type=gha
-        # cache-to: type=gha,mode=max
         platforms: linux/amd64,linux/arm64
         tags: |
           ghcr.io/requarks/wiki:3.0.0-alpha

+ 2 - 2
README.md

@@ -117,8 +117,8 @@ The server **dev** should already be available under **Servers**. If that's not
 
 ### Requirements
 
-- PostgreSQL **11** or later *(**16** or later recommended)*
-- Node.js **18.x** or later
+- PostgreSQL **12** or later *(**16** or later recommended)*
+- Node.js **20.x** or later
 - [pnpm](https://pnpm.io/installation#using-corepack)
 
 ### Usage

+ 425 - 338
blocks/pnpm-lock.yaml

@@ -1,110 +1,78 @@
-lockfileVersion: '6.0'
+lockfileVersion: '9.0'
 
 settings:
   autoInstallPeers: true
   excludeLinksFromLockfile: false
 
-dependencies:
-  lit:
-    specifier: 2.8.0
-    version: 2.8.0
-
-devDependencies:
-  '@rollup/plugin-graphql':
-    specifier: 2.0.4
-    version: 2.0.4(graphql@16.8.1)(rollup@3.29.4)
-  '@rollup/plugin-node-resolve':
-    specifier: 15.2.2
-    version: 15.2.2(rollup@3.29.4)
-  '@rollup/plugin-terser':
-    specifier: 0.4.4
-    version: 0.4.4(rollup@3.29.4)
-  glob:
-    specifier: 10.3.10
-    version: 10.3.10
-  rollup:
-    specifier: 3.29.4
-    version: 3.29.4
-  rollup-plugin-summary:
-    specifier: 2.0.0
-    version: 2.0.0(rollup@3.29.4)
+importers:
+
+  .:
+    dependencies:
+      lit:
+        specifier: 2.8.0
+        version: 2.8.0
+    devDependencies:
+      '@rollup/plugin-graphql':
+        specifier: 2.0.4
+        version: 2.0.4(graphql@16.8.1)(rollup@3.29.4)
+      '@rollup/plugin-node-resolve':
+        specifier: 15.2.2
+        version: 15.2.2(rollup@3.29.4)
+      '@rollup/plugin-terser':
+        specifier: 0.4.4
+        version: 0.4.4(rollup@3.29.4)
+      glob:
+        specifier: 10.3.10
+        version: 10.3.10
+      rollup:
+        specifier: 3.29.4
+        version: 3.29.4
+      rollup-plugin-summary:
+        specifier: 2.0.0
+        version: 2.0.0(rollup@3.29.4)
 
 packages:
 
-  /@colors/colors@1.5.0:
+  '@colors/colors@1.5.0':
     resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==}
     engines: {node: '>=0.1.90'}
-    requiresBuild: true
-    dev: true
-    optional: true
 
-  /@isaacs/cliui@8.0.2:
+  '@isaacs/cliui@8.0.2':
     resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
     engines: {node: '>=12'}
-    dependencies:
-      string-width: 5.1.2
-      string-width-cjs: /string-width@4.2.3
-      strip-ansi: 7.1.0
-      strip-ansi-cjs: /strip-ansi@6.0.1
-      wrap-ansi: 8.1.0
-      wrap-ansi-cjs: /wrap-ansi@7.0.0
-    dev: true
 
-  /@jridgewell/gen-mapping@0.3.3:
+  '@jridgewell/gen-mapping@0.3.3':
     resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==}
     engines: {node: '>=6.0.0'}
-    dependencies:
-      '@jridgewell/set-array': 1.1.2
-      '@jridgewell/sourcemap-codec': 1.4.15
-      '@jridgewell/trace-mapping': 0.3.19
-    dev: true
 
-  /@jridgewell/resolve-uri@3.1.1:
+  '@jridgewell/resolve-uri@3.1.1':
     resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==}
     engines: {node: '>=6.0.0'}
-    dev: true
 
-  /@jridgewell/set-array@1.1.2:
+  '@jridgewell/set-array@1.1.2':
     resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
     engines: {node: '>=6.0.0'}
-    dev: true
 
-  /@jridgewell/source-map@0.3.5:
+  '@jridgewell/source-map@0.3.5':
     resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==}
-    dependencies:
-      '@jridgewell/gen-mapping': 0.3.3
-      '@jridgewell/trace-mapping': 0.3.19
-    dev: true
 
-  /@jridgewell/sourcemap-codec@1.4.15:
+  '@jridgewell/sourcemap-codec@1.4.15':
     resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
-    dev: true
 
-  /@jridgewell/trace-mapping@0.3.19:
+  '@jridgewell/trace-mapping@0.3.19':
     resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==}
-    dependencies:
-      '@jridgewell/resolve-uri': 3.1.1
-      '@jridgewell/sourcemap-codec': 1.4.15
-    dev: true
 
-  /@lit-labs/ssr-dom-shim@1.1.1:
+  '@lit-labs/ssr-dom-shim@1.1.1':
     resolution: {integrity: sha512-kXOeFbfCm4fFf2A3WwVEeQj55tMZa8c8/f9AKHMobQMkzNUfUj+antR3fRPaZJawsa1aZiP/Da3ndpZrwEe4rQ==}
-    dev: false
 
-  /@lit/reactive-element@1.6.3:
+  '@lit/reactive-element@1.6.3':
     resolution: {integrity: sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==}
-    dependencies:
-      '@lit-labs/ssr-dom-shim': 1.1.1
-    dev: false
 
-  /@pkgjs/parseargs@0.11.0:
+  '@pkgjs/parseargs@0.11.0':
     resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
     engines: {node: '>=14'}
-    requiresBuild: true
-    dev: true
-    optional: true
 
-  /@rollup/plugin-graphql@2.0.4(graphql@16.8.1)(rollup@3.29.4):
+  '@rollup/plugin-graphql@2.0.4':
     resolution: {integrity: sha512-TfaqbbK71VHodCDCoRbPnv2+Tsnlvad2OsGEviURHFl+ZBUyf5wfXgXc9RqZ+xKxSl87Z3YbPhD0z6eWYjuByw==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
@@ -113,14 +81,8 @@ packages:
     peerDependenciesMeta:
       rollup:
         optional: true
-    dependencies:
-      '@rollup/pluginutils': 5.0.5(rollup@3.29.4)
-      graphql: 16.8.1
-      graphql-tag: 2.12.6(graphql@16.8.1)
-      rollup: 3.29.4
-    dev: true
 
-  /@rollup/plugin-node-resolve@15.2.2(rollup@3.29.4):
+  '@rollup/plugin-node-resolve@15.2.2':
     resolution: {integrity: sha512-f64bU4OKqV0yihtxFemmuf0oj37pToCFMISCA+sJbbIAl5wcpbRO9XgWNWb1tDiWQJUcPxo6V0l59hcuZOQ3kw==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
@@ -128,17 +90,8 @@ packages:
     peerDependenciesMeta:
       rollup:
         optional: true
-    dependencies:
-      '@rollup/pluginutils': 5.0.5(rollup@3.29.4)
-      '@types/resolve': 1.20.2
-      deepmerge: 4.3.1
-      is-builtin-module: 3.2.1
-      is-module: 1.0.0
-      resolve: 1.22.6
-      rollup: 3.29.4
-    dev: true
 
-  /@rollup/plugin-terser@0.4.4(rollup@3.29.4):
+  '@rollup/plugin-terser@0.4.4':
     resolution: {integrity: sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
@@ -146,14 +99,8 @@ packages:
     peerDependenciesMeta:
       rollup:
         optional: true
-    dependencies:
-      rollup: 3.29.4
-      serialize-javascript: 6.0.1
-      smob: 1.4.1
-      terser: 5.21.0
-    dev: true
 
-  /@rollup/pluginutils@5.0.5(rollup@3.29.4):
+  '@rollup/pluginutils@5.0.5':
     resolution: {integrity: sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
@@ -161,317 +108,513 @@ packages:
     peerDependenciesMeta:
       rollup:
         optional: true
-    dependencies:
-      '@types/estree': 1.0.2
-      estree-walker: 2.0.2
-      picomatch: 2.3.1
-      rollup: 3.29.4
-    dev: true
 
-  /@types/estree@1.0.2:
+  '@types/estree@1.0.2':
     resolution: {integrity: sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==}
-    dev: true
 
-  /@types/resolve@1.20.2:
+  '@types/resolve@1.20.2':
     resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
-    dev: true
 
-  /@types/trusted-types@2.0.4:
+  '@types/trusted-types@2.0.4':
     resolution: {integrity: sha512-IDaobHimLQhjwsQ/NMwRVfa/yL7L/wriQPMhw1ZJall0KX6E1oxk29XMDeilW5qTIg5aoiqf5Udy8U/51aNoQQ==}
-    dev: false
 
-  /acorn@8.10.0:
+  acorn@8.10.0:
     resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==}
     engines: {node: '>=0.4.0'}
     hasBin: true
-    dev: true
 
-  /ansi-regex@5.0.1:
+  ansi-regex@5.0.1:
     resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
     engines: {node: '>=8'}
-    dev: true
 
-  /ansi-regex@6.0.1:
+  ansi-regex@6.0.1:
     resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
     engines: {node: '>=12'}
-    dev: true
 
-  /ansi-styles@4.3.0:
+  ansi-styles@4.3.0:
     resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
     engines: {node: '>=8'}
-    dependencies:
-      color-convert: 2.0.1
-    dev: true
 
-  /ansi-styles@6.2.1:
+  ansi-styles@6.2.1:
     resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
     engines: {node: '>=12'}
-    dev: true
 
-  /balanced-match@1.0.2:
+  balanced-match@1.0.2:
     resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
-    dev: true
 
-  /brace-expansion@2.0.1:
+  brace-expansion@2.0.1:
     resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
-    dependencies:
-      balanced-match: 1.0.2
-    dev: true
 
-  /brotli-size@4.0.0:
+  brotli-size@4.0.0:
     resolution: {integrity: sha512-uA9fOtlTRC0iqKfzff1W34DXUA3GyVqbUaeo3Rw3d4gd1eavKVCETXrn3NzO74W+UVkG3UHu8WxUi+XvKI/huA==}
     engines: {node: '>= 10.16.0'}
-    dependencies:
-      duplexer: 0.1.1
-    dev: true
 
-  /buffer-from@1.1.2:
+  buffer-from@1.1.2:
     resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
-    dev: true
 
-  /builtin-modules@3.3.0:
+  builtin-modules@3.3.0:
     resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==}
     engines: {node: '>=6'}
-    dev: true
 
-  /cli-table3@0.6.3:
+  cli-table3@0.6.3:
     resolution: {integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==}
     engines: {node: 10.* || >= 12.*}
-    dependencies:
-      string-width: 4.2.3
-    optionalDependencies:
-      '@colors/colors': 1.5.0
-    dev: true
 
-  /color-convert@2.0.1:
+  color-convert@2.0.1:
     resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
     engines: {node: '>=7.0.0'}
-    dependencies:
-      color-name: 1.1.4
-    dev: true
 
-  /color-name@1.1.4:
+  color-name@1.1.4:
     resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
-    dev: true
 
-  /commander@2.20.3:
+  commander@2.20.3:
     resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
-    dev: true
 
-  /cross-spawn@7.0.3:
+  cross-spawn@7.0.3:
     resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
     engines: {node: '>= 8'}
-    dependencies:
-      path-key: 3.1.1
-      shebang-command: 2.0.0
-      which: 2.0.2
-    dev: true
 
-  /deepmerge@4.3.1:
+  deepmerge@4.3.1:
     resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
     engines: {node: '>=0.10.0'}
-    dev: true
 
-  /duplexer@0.1.1:
+  duplexer@0.1.1:
     resolution: {integrity: sha512-sxNZ+ljy+RA1maXoUReeqBBpBC6RLKmg5ewzV+x+mSETmWNoKdZN6vcQjpFROemza23hGFskJtFNoUWUaQ+R4Q==}
-    dev: true
 
-  /duplexer@0.1.2:
+  duplexer@0.1.2:
     resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==}
-    dev: true
 
-  /eastasianwidth@0.2.0:
+  eastasianwidth@0.2.0:
     resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
-    dev: true
 
-  /emoji-regex@8.0.0:
+  emoji-regex@8.0.0:
     resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
-    dev: true
 
-  /emoji-regex@9.2.2:
+  emoji-regex@9.2.2:
     resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
-    dev: true
 
-  /estree-walker@2.0.2:
+  estree-walker@2.0.2:
     resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
-    dev: true
 
-  /filesize@10.1.0:
+  filesize@10.1.0:
     resolution: {integrity: sha512-GTLKYyBSDz3nPhlLVPjPWZCnhkd9TrrRArNcy8Z+J2cqScB7h2McAzR6NBX6nYOoWafql0roY8hrocxnZBv9CQ==}
     engines: {node: '>= 10.4.0'}
-    dev: true
 
-  /foreground-child@3.1.1:
+  foreground-child@3.1.1:
     resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==}
     engines: {node: '>=14'}
-    dependencies:
-      cross-spawn: 7.0.3
-      signal-exit: 4.1.0
-    dev: true
 
-  /fsevents@2.3.3:
+  fsevents@2.3.3:
     resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
     engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
     os: [darwin]
-    requiresBuild: true
-    dev: true
-    optional: true
 
-  /glob@10.3.10:
+  glob@10.3.10:
     resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==}
     engines: {node: '>=16 || 14 >=14.17'}
     hasBin: true
-    dependencies:
-      foreground-child: 3.1.1
-      jackspeak: 2.3.6
-      minimatch: 9.0.3
-      minipass: 7.0.4
-      path-scurry: 1.10.1
-    dev: true
 
-  /graphql-tag@2.12.6(graphql@16.8.1):
+  graphql-tag@2.12.6:
     resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==}
     engines: {node: '>=10'}
     peerDependencies:
       graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
-    dependencies:
-      graphql: 16.8.1
-      tslib: 2.6.2
-    dev: true
 
-  /graphql@16.8.1:
+  graphql@16.8.1:
     resolution: {integrity: sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==}
     engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0}
-    dev: true
 
-  /gzip-size@7.0.0:
+  gzip-size@7.0.0:
     resolution: {integrity: sha512-O1Ld7Dr+nqPnmGpdhzLmMTQ4vAsD+rHwMm1NLUmoUFFymBOMKxCCrtDxqdBRYXdeEPEi3SyoR4TizJLQrnKBNA==}
     engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-    dependencies:
-      duplexer: 0.1.2
-    dev: true
 
-  /has@1.0.4:
+  has@1.0.4:
     resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==}
     engines: {node: '>= 0.4.0'}
-    dev: true
 
-  /is-builtin-module@3.2.1:
+  is-builtin-module@3.2.1:
     resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==}
     engines: {node: '>=6'}
-    dependencies:
-      builtin-modules: 3.3.0
-    dev: true
 
-  /is-core-module@2.13.0:
+  is-core-module@2.13.0:
     resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==}
-    dependencies:
-      has: 1.0.4
-    dev: true
 
-  /is-fullwidth-code-point@3.0.0:
+  is-fullwidth-code-point@3.0.0:
     resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
     engines: {node: '>=8'}
-    dev: true
 
-  /is-module@1.0.0:
+  is-module@1.0.0:
     resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==}
-    dev: true
 
-  /isexe@2.0.0:
+  isexe@2.0.0:
     resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
-    dev: true
 
-  /jackspeak@2.3.6:
+  jackspeak@2.3.6:
     resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==}
     engines: {node: '>=14'}
+
+  lit-element@3.3.3:
+    resolution: {integrity: sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==}
+
+  lit-html@2.8.0:
+    resolution: {integrity: sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==}
+
+  lit@2.8.0:
+    resolution: {integrity: sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==}
+
+  lru-cache@10.0.1:
+    resolution: {integrity: sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==}
+    engines: {node: 14 || >=16.14}
+
+  minimatch@9.0.3:
+    resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==}
+    engines: {node: '>=16 || 14 >=14.17'}
+
+  minipass@7.0.4:
+    resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==}
+    engines: {node: '>=16 || 14 >=14.17'}
+
+  path-key@3.1.1:
+    resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+    engines: {node: '>=8'}
+
+  path-parse@1.0.7:
+    resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+
+  path-scurry@1.10.1:
+    resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==}
+    engines: {node: '>=16 || 14 >=14.17'}
+
+  picomatch@2.3.1:
+    resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+    engines: {node: '>=8.6'}
+
+  randombytes@2.1.0:
+    resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+  resolve@1.22.6:
+    resolution: {integrity: sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==}
+    hasBin: true
+
+  rollup-plugin-summary@2.0.0:
+    resolution: {integrity: sha512-7Av6DQeCmVNpFmCdkkbMya1CneeGWhjSXXQ3B4yDO+BvN/Kbohqi3IEYXAvgHP3iIafSfMyOw+PBLFUlvf1ViA==}
+    engines: {node: '>=14.0.0'}
+    peerDependencies:
+      rollup: ^2.68.0||^3.0.0
+
+  rollup@3.29.4:
+    resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==}
+    engines: {node: '>=14.18.0', npm: '>=8.0.0'}
+    hasBin: true
+
+  safe-buffer@5.2.1:
+    resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+  serialize-javascript@6.0.1:
+    resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==}
+
+  shebang-command@2.0.0:
+    resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+    engines: {node: '>=8'}
+
+  shebang-regex@3.0.0:
+    resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+    engines: {node: '>=8'}
+
+  signal-exit@4.1.0:
+    resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
+    engines: {node: '>=14'}
+
+  smob@1.4.1:
+    resolution: {integrity: sha512-9LK+E7Hv5R9u4g4C3p+jjLstaLe11MDsL21UpYaCNmapvMkYhqCV4A/f/3gyH8QjMyh6l68q9xC85vihY9ahMQ==}
+
+  source-map-support@0.5.21:
+    resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+  source-map@0.6.1:
+    resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+    engines: {node: '>=0.10.0'}
+
+  string-width@4.2.3:
+    resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+    engines: {node: '>=8'}
+
+  string-width@5.1.2:
+    resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
+    engines: {node: '>=12'}
+
+  strip-ansi@6.0.1:
+    resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+    engines: {node: '>=8'}
+
+  strip-ansi@7.1.0:
+    resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
+    engines: {node: '>=12'}
+
+  supports-preserve-symlinks-flag@1.0.0:
+    resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+    engines: {node: '>= 0.4'}
+
+  terser@5.21.0:
+    resolution: {integrity: sha512-WtnFKrxu9kaoXuiZFSGrcAvvBqAdmKx0SFNmVNYdJamMu9yyN3I/QF0FbH4QcqJQ+y1CJnzxGIKH0cSj+FGYRw==}
+    engines: {node: '>=10'}
+    hasBin: true
+
+  tslib@2.6.2:
+    resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
+
+  which@2.0.2:
+    resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+    engines: {node: '>= 8'}
+    hasBin: true
+
+  wrap-ansi@7.0.0:
+    resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+    engines: {node: '>=10'}
+
+  wrap-ansi@8.1.0:
+    resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
+    engines: {node: '>=12'}
+
+snapshots:
+
+  '@colors/colors@1.5.0':
+    optional: true
+
+  '@isaacs/cliui@8.0.2':
+    dependencies:
+      string-width: 5.1.2
+      string-width-cjs: string-width@4.2.3
+      strip-ansi: 7.1.0
+      strip-ansi-cjs: strip-ansi@6.0.1
+      wrap-ansi: 8.1.0
+      wrap-ansi-cjs: wrap-ansi@7.0.0
+
+  '@jridgewell/gen-mapping@0.3.3':
+    dependencies:
+      '@jridgewell/set-array': 1.1.2
+      '@jridgewell/sourcemap-codec': 1.4.15
+      '@jridgewell/trace-mapping': 0.3.19
+
+  '@jridgewell/resolve-uri@3.1.1': {}
+
+  '@jridgewell/set-array@1.1.2': {}
+
+  '@jridgewell/source-map@0.3.5':
+    dependencies:
+      '@jridgewell/gen-mapping': 0.3.3
+      '@jridgewell/trace-mapping': 0.3.19
+
+  '@jridgewell/sourcemap-codec@1.4.15': {}
+
+  '@jridgewell/trace-mapping@0.3.19':
+    dependencies:
+      '@jridgewell/resolve-uri': 3.1.1
+      '@jridgewell/sourcemap-codec': 1.4.15
+
+  '@lit-labs/ssr-dom-shim@1.1.1': {}
+
+  '@lit/reactive-element@1.6.3':
+    dependencies:
+      '@lit-labs/ssr-dom-shim': 1.1.1
+
+  '@pkgjs/parseargs@0.11.0':
+    optional: true
+
+  '@rollup/plugin-graphql@2.0.4(graphql@16.8.1)(rollup@3.29.4)':
+    dependencies:
+      '@rollup/pluginutils': 5.0.5(rollup@3.29.4)
+      graphql: 16.8.1
+      graphql-tag: 2.12.6(graphql@16.8.1)
+      rollup: 3.29.4
+
+  '@rollup/plugin-node-resolve@15.2.2(rollup@3.29.4)':
+    dependencies:
+      '@rollup/pluginutils': 5.0.5(rollup@3.29.4)
+      '@types/resolve': 1.20.2
+      deepmerge: 4.3.1
+      is-builtin-module: 3.2.1
+      is-module: 1.0.0
+      resolve: 1.22.6
+      rollup: 3.29.4
+
+  '@rollup/plugin-terser@0.4.4(rollup@3.29.4)':
+    dependencies:
+      rollup: 3.29.4
+      serialize-javascript: 6.0.1
+      smob: 1.4.1
+      terser: 5.21.0
+
+  '@rollup/pluginutils@5.0.5(rollup@3.29.4)':
+    dependencies:
+      '@types/estree': 1.0.2
+      estree-walker: 2.0.2
+      picomatch: 2.3.1
+      rollup: 3.29.4
+
+  '@types/estree@1.0.2': {}
+
+  '@types/resolve@1.20.2': {}
+
+  '@types/trusted-types@2.0.4': {}
+
+  acorn@8.10.0: {}
+
+  ansi-regex@5.0.1: {}
+
+  ansi-regex@6.0.1: {}
+
+  ansi-styles@4.3.0:
+    dependencies:
+      color-convert: 2.0.1
+
+  ansi-styles@6.2.1: {}
+
+  balanced-match@1.0.2: {}
+
+  brace-expansion@2.0.1:
+    dependencies:
+      balanced-match: 1.0.2
+
+  brotli-size@4.0.0:
+    dependencies:
+      duplexer: 0.1.1
+
+  buffer-from@1.1.2: {}
+
+  builtin-modules@3.3.0: {}
+
+  cli-table3@0.6.3:
+    dependencies:
+      string-width: 4.2.3
+    optionalDependencies:
+      '@colors/colors': 1.5.0
+
+  color-convert@2.0.1:
+    dependencies:
+      color-name: 1.1.4
+
+  color-name@1.1.4: {}
+
+  commander@2.20.3: {}
+
+  cross-spawn@7.0.3:
+    dependencies:
+      path-key: 3.1.1
+      shebang-command: 2.0.0
+      which: 2.0.2
+
+  deepmerge@4.3.1: {}
+
+  duplexer@0.1.1: {}
+
+  duplexer@0.1.2: {}
+
+  eastasianwidth@0.2.0: {}
+
+  emoji-regex@8.0.0: {}
+
+  emoji-regex@9.2.2: {}
+
+  estree-walker@2.0.2: {}
+
+  filesize@10.1.0: {}
+
+  foreground-child@3.1.1:
+    dependencies:
+      cross-spawn: 7.0.3
+      signal-exit: 4.1.0
+
+  fsevents@2.3.3:
+    optional: true
+
+  glob@10.3.10:
+    dependencies:
+      foreground-child: 3.1.1
+      jackspeak: 2.3.6
+      minimatch: 9.0.3
+      minipass: 7.0.4
+      path-scurry: 1.10.1
+
+  graphql-tag@2.12.6(graphql@16.8.1):
+    dependencies:
+      graphql: 16.8.1
+      tslib: 2.6.2
+
+  graphql@16.8.1: {}
+
+  gzip-size@7.0.0:
+    dependencies:
+      duplexer: 0.1.2
+
+  has@1.0.4: {}
+
+  is-builtin-module@3.2.1:
+    dependencies:
+      builtin-modules: 3.3.0
+
+  is-core-module@2.13.0:
+    dependencies:
+      has: 1.0.4
+
+  is-fullwidth-code-point@3.0.0: {}
+
+  is-module@1.0.0: {}
+
+  isexe@2.0.0: {}
+
+  jackspeak@2.3.6:
     dependencies:
       '@isaacs/cliui': 8.0.2
     optionalDependencies:
       '@pkgjs/parseargs': 0.11.0
-    dev: true
 
-  /lit-element@3.3.3:
-    resolution: {integrity: sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==}
+  lit-element@3.3.3:
     dependencies:
       '@lit-labs/ssr-dom-shim': 1.1.1
       '@lit/reactive-element': 1.6.3
       lit-html: 2.8.0
-    dev: false
 
-  /lit-html@2.8.0:
-    resolution: {integrity: sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==}
+  lit-html@2.8.0:
     dependencies:
       '@types/trusted-types': 2.0.4
-    dev: false
 
-  /lit@2.8.0:
-    resolution: {integrity: sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==}
+  lit@2.8.0:
     dependencies:
       '@lit/reactive-element': 1.6.3
       lit-element: 3.3.3
       lit-html: 2.8.0
-    dev: false
 
-  /lru-cache@10.0.1:
-    resolution: {integrity: sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==}
-    engines: {node: 14 || >=16.14}
-    dev: true
+  lru-cache@10.0.1: {}
 
-  /minimatch@9.0.3:
-    resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==}
-    engines: {node: '>=16 || 14 >=14.17'}
+  minimatch@9.0.3:
     dependencies:
       brace-expansion: 2.0.1
-    dev: true
 
-  /minipass@7.0.4:
-    resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==}
-    engines: {node: '>=16 || 14 >=14.17'}
-    dev: true
+  minipass@7.0.4: {}
 
-  /path-key@3.1.1:
-    resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
-    engines: {node: '>=8'}
-    dev: true
+  path-key@3.1.1: {}
 
-  /path-parse@1.0.7:
-    resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
-    dev: true
+  path-parse@1.0.7: {}
 
-  /path-scurry@1.10.1:
-    resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==}
-    engines: {node: '>=16 || 14 >=14.17'}
+  path-scurry@1.10.1:
     dependencies:
       lru-cache: 10.0.1
       minipass: 7.0.4
-    dev: true
 
-  /picomatch@2.3.1:
-    resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
-    engines: {node: '>=8.6'}
-    dev: true
+  picomatch@2.3.1: {}
 
-  /randombytes@2.1.0:
-    resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+  randombytes@2.1.0:
     dependencies:
       safe-buffer: 5.2.1
-    dev: true
 
-  /resolve@1.22.6:
-    resolution: {integrity: sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==}
-    hasBin: true
+  resolve@1.22.6:
     dependencies:
       is-core-module: 2.13.0
       path-parse: 1.0.7
       supports-preserve-symlinks-flag: 1.0.0
-    dev: true
 
-  /rollup-plugin-summary@2.0.0(rollup@3.29.4):
-    resolution: {integrity: sha512-7Av6DQeCmVNpFmCdkkbMya1CneeGWhjSXXQ3B4yDO+BvN/Kbohqi3IEYXAvgHP3iIafSfMyOw+PBLFUlvf1ViA==}
-    engines: {node: '>=14.0.0'}
-    peerDependencies:
-      rollup: ^2.68.0||^3.0.0
+  rollup-plugin-summary@2.0.0(rollup@3.29.4):
     dependencies:
       brotli-size: 4.0.0
       cli-table3: 0.6.3
@@ -479,133 +622,77 @@ packages:
       gzip-size: 7.0.0
       rollup: 3.29.4
       terser: 5.21.0
-    dev: true
 
-  /rollup@3.29.4:
-    resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==}
-    engines: {node: '>=14.18.0', npm: '>=8.0.0'}
-    hasBin: true
+  rollup@3.29.4:
     optionalDependencies:
       fsevents: 2.3.3
-    dev: true
 
-  /safe-buffer@5.2.1:
-    resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
-    dev: true
+  safe-buffer@5.2.1: {}
 
-  /serialize-javascript@6.0.1:
-    resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==}
+  serialize-javascript@6.0.1:
     dependencies:
       randombytes: 2.1.0
-    dev: true
 
-  /shebang-command@2.0.0:
-    resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
-    engines: {node: '>=8'}
+  shebang-command@2.0.0:
     dependencies:
       shebang-regex: 3.0.0
-    dev: true
 
-  /shebang-regex@3.0.0:
-    resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
-    engines: {node: '>=8'}
-    dev: true
+  shebang-regex@3.0.0: {}
 
-  /signal-exit@4.1.0:
-    resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
-    engines: {node: '>=14'}
-    dev: true
+  signal-exit@4.1.0: {}
 
-  /smob@1.4.1:
-    resolution: {integrity: sha512-9LK+E7Hv5R9u4g4C3p+jjLstaLe11MDsL21UpYaCNmapvMkYhqCV4A/f/3gyH8QjMyh6l68q9xC85vihY9ahMQ==}
-    dev: true
+  smob@1.4.1: {}
 
-  /source-map-support@0.5.21:
-    resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+  source-map-support@0.5.21:
     dependencies:
       buffer-from: 1.1.2
       source-map: 0.6.1
-    dev: true
 
-  /source-map@0.6.1:
-    resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
-    engines: {node: '>=0.10.0'}
-    dev: true
+  source-map@0.6.1: {}
 
-  /string-width@4.2.3:
-    resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
-    engines: {node: '>=8'}
+  string-width@4.2.3:
     dependencies:
       emoji-regex: 8.0.0
       is-fullwidth-code-point: 3.0.0
       strip-ansi: 6.0.1
-    dev: true
 
-  /string-width@5.1.2:
-    resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
-    engines: {node: '>=12'}
+  string-width@5.1.2:
     dependencies:
       eastasianwidth: 0.2.0
       emoji-regex: 9.2.2
       strip-ansi: 7.1.0
-    dev: true
 
-  /strip-ansi@6.0.1:
-    resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
-    engines: {node: '>=8'}
+  strip-ansi@6.0.1:
     dependencies:
       ansi-regex: 5.0.1
-    dev: true
 
-  /strip-ansi@7.1.0:
-    resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
-    engines: {node: '>=12'}
+  strip-ansi@7.1.0:
     dependencies:
       ansi-regex: 6.0.1
-    dev: true
 
-  /supports-preserve-symlinks-flag@1.0.0:
-    resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
-    engines: {node: '>= 0.4'}
-    dev: true
+  supports-preserve-symlinks-flag@1.0.0: {}
 
-  /terser@5.21.0:
-    resolution: {integrity: sha512-WtnFKrxu9kaoXuiZFSGrcAvvBqAdmKx0SFNmVNYdJamMu9yyN3I/QF0FbH4QcqJQ+y1CJnzxGIKH0cSj+FGYRw==}
-    engines: {node: '>=10'}
-    hasBin: true
+  terser@5.21.0:
     dependencies:
       '@jridgewell/source-map': 0.3.5
       acorn: 8.10.0
       commander: 2.20.3
       source-map-support: 0.5.21
-    dev: true
 
-  /tslib@2.6.2:
-    resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
-    dev: true
+  tslib@2.6.2: {}
 
-  /which@2.0.2:
-    resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
-    engines: {node: '>= 8'}
-    hasBin: true
+  which@2.0.2:
     dependencies:
       isexe: 2.0.0
-    dev: true
 
-  /wrap-ansi@7.0.0:
-    resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
-    engines: {node: '>=10'}
+  wrap-ansi@7.0.0:
     dependencies:
       ansi-styles: 4.3.0
       string-width: 4.2.3
       strip-ansi: 6.0.1
-    dev: true
 
-  /wrap-ansi@8.1.0:
-    resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
-    engines: {node: '>=12'}
+  wrap-ansi@8.1.0:
     dependencies:
       ansi-styles: 6.2.1
       string-width: 5.1.2
       strip-ansi: 7.1.0
-    dev: true

+ 3 - 4
server/controllers/common.mjs

@@ -438,11 +438,10 @@ export default function () {
    * Metrics (Prometheus)
    */
   router.get('/metrics', async (req, res, next) => {
-    if (!WIKI.auth.checkAccess(req.user, ['read:metrics'])) {
-      return res.sendStatus(403)
-    }
-
     if (WIKI.config.metrics.isEnabled) {
+      if (!WIKI.auth.checkAccess(req.user, ['read:metrics'])) {
+        return res.sendStatus(403)
+      }
       WIKI.metrics.render(res)
     } else {
       next()

+ 2 - 1
server/graph/resolvers/authentication.mjs

@@ -10,6 +10,7 @@ import {
   generateAuthenticationOptions,
   verifyAuthenticationResponse
 } from '@simplewebauthn/server'
+import { isoBase64URL } from '@simplewebauthn/server/helpers'
 
 export default {
   Query: {
@@ -264,7 +265,7 @@ export default {
             userVerification: 'preferred'
           },
           excludeCredentials: usr.passkeys.authenticators?.map(authenticator => ({
-            id: new Uint8Array(authenticator.credentialID),
+            id: isoBase64URL.fromBuffer(new Uint8Array(authenticator.credentialID)),
             type: 'public-key',
             transports: authenticator.transports
           })) ?? []

+ 1 - 3
server/helpers/page.mjs

@@ -22,8 +22,6 @@ export function parsePath (rawPath, opts = {}) {
     // TODO: use site base lang
     locale: 'en', // WIKI.config.lang.code,
     path: 'home',
-    private: false,
-    privateNS: '',
     explicitLocale: false
   }
 
@@ -40,7 +38,7 @@ export function parsePath (rawPath, opts = {}) {
     p = p.trim()
     return !isEmpty(p) && p !== '..' && p !== '.'
   })
-  if (pathParts[0].startsWith('_')) {
+  if (pathParts.length > 1 && pathParts[0].startsWith('_')) {
     pathParts.shift()
   }
   if (localeSegmentRegex.test(pathParts[0])) {

+ 42 - 42
server/package.json

@@ -36,26 +36,26 @@
     "node": ">=18.0"
   },
   "dependencies": {
-    "@apollo/server": "4.10.0",
+    "@apollo/server": "4.10.4",
     "@azure/storage-blob": "12.17.0",
     "@exlinc/keycloak-passport": "1.0.2",
-    "@graphql-tools/schema": "10.0.2",
-    "@graphql-tools/utils": "10.0.13",
+    "@graphql-tools/schema": "10.0.3",
+    "@graphql-tools/utils": "10.1.3",
     "@hexagon/base64": "1.1.28",
-    "@joplin/turndown-plugin-gfm": "1.0.54",
-    "@node-saml/passport-saml": "4.0.4",
+    "@joplin/turndown-plugin-gfm": "1.0.55",
+    "@node-saml/passport-saml": "5.0.0",
     "@root/csr": "0.8.1",
     "@root/keypairs": "0.10.3",
     "@root/pem": "1.0.4",
-    "@simplewebauthn/server": "9.0.1",
-    "@vue-email/compiler": "0.8.9",
+    "@simplewebauthn/server": "10.0.0",
+    "@vue-email/compiler": "0.8.14",
     "acme": "3.0.3",
     "akismet-api": "6.0.0",
-    "aws-sdk": "2.1550.0",
+    "aws-sdk": "2.1603.0",
     "bcryptjs": "2.4.3",
     "chalk": "5.3.0",
     "cheerio": "1.0.0-rc.12",
-    "chokidar": "3.5.3",
+    "chokidar": "3.6.0",
     "chromium-pickle-js": "0.2.0",
     "clean-css": "5.3.3",
     "command-exists": "1.2.9",
@@ -67,40 +67,40 @@
     "cuint": "0.2.2",
     "custom-error-instance": "2.1.2",
     "dependency-graph": "1.0.0",
-    "diff": "5.1.0",
-    "diff2html": "3.4.47",
-    "dompurify": "3.0.8",
+    "diff": "5.2.0",
+    "diff2html": "3.4.48",
+    "dompurify": "3.1.0",
     "dotize": "0.3.0",
     "emoji-regex": "10.3.0",
     "eventemitter2": "6.4.9",
-    "express": "4.18.2",
+    "express": "4.19.2",
     "express-brute": "1.0.1",
     "express-session": "1.18.0",
     "file-type": "19.0.0",
-    "filesize": "10.1.0",
+    "filesize": "10.1.1",
     "fs-extra": "11.2.0",
     "getos": "3.2.1",
     "graphql": "16.8.1",
-    "graphql-list-fields": "2.0.3",
+    "graphql-list-fields": "2.0.4",
     "graphql-rate-limit-directive": "2.0.5",
-    "graphql-tools": "9.0.0",
+    "graphql-tools": "9.0.1",
     "graphql-upload": "16.0.2",
     "gray-matter": "4.0.3",
     "he": "1.2.0",
     "highlight.js": "11.9.0",
     "image-size": "1.1.1",
-    "js-base64": "3.7.6",
+    "js-base64": "3.7.7",
     "js-binary": "1.2.0",
     "js-yaml": "4.1.0",
     "jsdom": "24.0.0",
     "jsonwebtoken": "9.0.2",
-    "katex": "0.16.9",
+    "katex": "0.16.10",
     "klaw": "4.1.0",
     "knex": "3.1.0",
     "lodash": "4.17.21",
     "lodash-es": "4.17.21",
     "luxon": "3.4.4",
-    "markdown-it": "14.0.0",
+    "markdown-it": "14.1.0",
     "markdown-it-abbr": "2.0.0",
     "markdown-it-attrs": "4.1.6",
     "markdown-it-decorate": "1.2.2",
@@ -109,7 +109,7 @@
     "markdown-it-footnote": "4.0.0",
     "markdown-it-imsize": "2.0.1",
     "markdown-it-mark": "4.0.0",
-    "markdown-it-mdc": "0.2.1",
+    "markdown-it-mdc": "0.2.3",
     "markdown-it-multimd-table": "4.2.3",
     "markdown-it-sub": "2.0.0",
     "markdown-it-sup": "2.0.0",
@@ -118,12 +118,12 @@
     "mime-types": "2.1.35",
     "ms": "2.1.3",
     "multer": "1.4.5-lts.1",
-    "nanoid": "5.0.5",
+    "nanoid": "5.0.7",
     "node-2fa": "2.0.3",
     "node-cache": "5.1.2",
-    "nodemailer": "6.9.9",
-    "objection": "3.1.3",
-    "octokit": "3.1.2",
+    "nodemailer": "6.9.13",
+    "objection": "3.1.4",
+    "octokit": "3.2.0",
     "passport": "0.7.0",
     "passport-auth0": "1.4.4",
     "passport-azure-ad": "4.3.5",
@@ -137,42 +137,42 @@
     "passport-jwt": "4.0.1",
     "passport-ldapauth": "3.0.1",
     "passport-local": "1.0.0",
-    "passport-microsoft": "1.0.0",
+    "passport-microsoft": "2.0.0",
     "passport-oauth2": "1.8.0",
     "passport-okta-oauth": "0.0.1",
-    "passport-openidconnect": "0.1.1",
+    "passport-openidconnect": "0.1.2",
     "passport-slack-oauth2": "1.2.0",
     "passport-twitch-strategy": "2.2.0",
     "pem-jwk": "2.0.0",
-    "pg": "8.11.3",
+    "pg": "8.11.5",
     "pg-hstore": "2.3.4",
     "pg-pubsub": "0.8.1",
-    "pg-query-stream": "4.5.3",
+    "pg-query-stream": "4.5.5",
     "pg-tsquery": "8.4.2",
-    "poolifier": "3.1.19",
-    "prom-client": "15.1.0",
+    "poolifier": "3.1.29",
+    "prom-client": "15.1.2",
     "punycode": "2.3.1",
-    "puppeteer-core": "21.11.0",
+    "puppeteer-core": "22.6.5",
     "qr-image": "3.2.0",
     "remove-markdown": "0.5.0",
     "safe-regex": "2.1.1",
     "sanitize-filename": "1.6.3",
     "scim-query-filter-parser": "2.0.4",
-    "semver": "7.5.4",
+    "semver": "7.6.0",
     "serve-favicon": "2.5.0",
-    "sharp": "0.33.2",
-    "simple-git": "3.22.0",
-    "socket.io": "4.7.4",
+    "sharp": "0.33.3",
+    "simple-git": "3.24.0",
+    "socket.io": "4.7.5",
     "striptags": "3.2.0",
-    "tar-fs": "3.0.4",
-    "turndown": "7.1.2",
+    "tar-fs": "3.0.5",
+    "turndown": "7.1.3",
     "twemoji": "14.0.2",
-    "ufo": "1.3.2",
+    "ufo": "1.5.3",
     "uslug": "1.0.4",
     "uuid": "9.0.1",
     "validate.js": "0.13.1",
-    "vue": "3.4.15",
-    "xss": "1.0.14",
+    "vue": "3.4.23",
+    "xss": "1.0.15",
     "yargs": "17.7.2"
   },
   "devDependencies": {
@@ -182,10 +182,10 @@
     "eslint-plugin-import": "2.29.1",
     "eslint-plugin-node": "11.1.0",
     "eslint-plugin-promise": "6.1.1",
-    "nodemon": "3.0.3"
+    "nodemon": "3.1.0"
   },
   "overrides": {
-    "@graphql-tools/utils": "10.0.1"
+    "@graphql-tools/utils": "10.1.3"
   },
   "collective": {
     "type": "opencollective",

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 4659 - 478
server/pnpm-lock.yaml


+ 39 - 39
ux/package.json

@@ -11,37 +11,38 @@
     "build": "NODE_OPTIONS=--max-old-space-size=8192 vite build --emptyOutDir"
   },
   "dependencies": {
-    "@apollo/client": "3.9.9",
+    "@apollo/client": "3.9.11",
     "@lezer/common": "1.2.1",
     "@mdi/font": "7.4.47",
     "@quasar/extras": "1.16.11",
-    "@simplewebauthn/browser": "9.0.1",
-    "@tiptap/core": "2.2.4",
-    "@tiptap/extension-code-block": "2.2.4",
-    "@tiptap/extension-code-block-lowlight": "2.2.4",
-    "@tiptap/extension-color": "2.2.4",
-    "@tiptap/extension-dropcursor": "2.2.4",
-    "@tiptap/extension-font-family": "2.2.4",
-    "@tiptap/extension-gapcursor": "2.2.4",
-    "@tiptap/extension-hard-break": "2.2.4",
-    "@tiptap/extension-highlight": "2.2.4",
-    "@tiptap/extension-history": "2.2.4",
-    "@tiptap/extension-image": "2.2.4",
-    "@tiptap/extension-mention": "2.2.4",
-    "@tiptap/extension-placeholder": "2.2.4",
-    "@tiptap/extension-table": "2.2.4",
-    "@tiptap/extension-table-cell": "2.2.4",
-    "@tiptap/extension-table-header": "2.2.4",
-    "@tiptap/extension-table-row": "2.2.4",
-    "@tiptap/extension-task-item": "2.2.4",
-    "@tiptap/extension-task-list": "2.2.4",
-    "@tiptap/extension-text-align": "2.2.4",
-    "@tiptap/extension-text-style": "2.2.4",
-    "@tiptap/extension-typography": "2.2.4",
-    "@tiptap/pm": "2.2.4",
-    "@tiptap/starter-kit": "2.2.4",
-    "@tiptap/vue-3": "2.2.4",
+    "@simplewebauthn/browser": "10.0.0",
+    "@tiptap/core": "2.3.0",
+    "@tiptap/extension-code-block": "2.3.0",
+    "@tiptap/extension-code-block-lowlight": "2.3.0",
+    "@tiptap/extension-color": "2.3.0",
+    "@tiptap/extension-dropcursor": "2.3.0",
+    "@tiptap/extension-font-family": "2.3.0",
+    "@tiptap/extension-gapcursor": "2.3.0",
+    "@tiptap/extension-hard-break": "2.3.0",
+    "@tiptap/extension-highlight": "2.3.0",
+    "@tiptap/extension-history": "2.3.0",
+    "@tiptap/extension-image": "2.3.0",
+    "@tiptap/extension-mention": "2.3.0",
+    "@tiptap/extension-placeholder": "2.3.0",
+    "@tiptap/extension-table": "2.3.0",
+    "@tiptap/extension-table-cell": "2.3.0",
+    "@tiptap/extension-table-header": "2.3.0",
+    "@tiptap/extension-table-row": "2.3.0",
+    "@tiptap/extension-task-item": "2.3.0",
+    "@tiptap/extension-task-list": "2.3.0",
+    "@tiptap/extension-text-align": "2.3.0",
+    "@tiptap/extension-text-style": "2.3.0",
+    "@tiptap/extension-typography": "2.3.0",
+    "@tiptap/pm": "2.3.0",
+    "@tiptap/starter-kit": "2.3.0",
+    "@tiptap/vue-3": "2.3.0",
     "@vue/repl": "3.4.0",
+    "@xterm/xterm": "5.5.0",
     "apollo-upload-client": "18.0.1",
     "browser-fs-access": "0.35.0",
     "clipboard": "2.0.11",
@@ -81,13 +82,13 @@
     "prosemirror-commands": "1.5.2",
     "prosemirror-history": "1.4.0",
     "prosemirror-keymap": "1.2.2",
-    "prosemirror-model": "1.19.4",
+    "prosemirror-model": "1.20.0",
     "prosemirror-schema-list": "1.3.0",
     "prosemirror-state": "1.4.3",
     "prosemirror-transform": "1.8.0",
-    "prosemirror-view": "1.33.3",
+    "prosemirror-view": "1.33.4",
     "pug": "3.0.2",
-    "quasar": "2.15.2",
+    "quasar": "2.15.3",
     "slugify": "1.6.6",
     "socket.io-client": "4.7.5",
     "sortablejs": "1.15.2",
@@ -95,15 +96,14 @@
     "tabulator-tables": "6.2.0",
     "tippy.js": "6.3.7",
     "twemoji": "14.0.2",
-    "typescript": "5.4.3",
+    "typescript": "5.4.5",
     "uuid": "9.0.1",
     "v-network-graph": "0.9.15",
-    "vue": "3.4.21",
-    "vue-i18n": "9.10.2",
-    "vue-router": "4.3.0",
+    "vue": "3.4.23",
+    "vue-i18n": "9.13.1",
+    "vue-router": "4.3.2",
     "vue3-otp-input": "0.4.4",
     "vuedraggable": "4.1.0",
-    "xterm": "5.3.0",
     "zxcvbn": "4.4.2"
   },
   "devDependencies": {
@@ -112,8 +112,8 @@
     "@quasar/app-vite": "2.0.0-beta.5",
     "@quasar/vite-plugin": "1.6.0",
     "@types/lodash": "4.17.0",
-    "@vue/devtools": "7.0.25",
-    "@vue/language-plugin-pug": "2.0.7",
+    "@vue/devtools": "7.0.27",
+    "@vue/language-plugin-pug": "2.0.13",
     "autoprefixer": "10.4.19",
     "browserlist": "latest",
     "eslint": "8.57.0",
@@ -121,9 +121,9 @@
     "eslint-plugin-import": "2.29.1",
     "eslint-plugin-n": "16.6.2",
     "eslint-plugin-promise": "6.1.1",
-    "eslint-plugin-vue": "9.24.0",
+    "eslint-plugin-vue": "9.25.0",
     "eslint-plugin-vue-pug": "0.6.2",
-    "sass": "1.72.0"
+    "sass": "1.75.0"
   },
   "engines": {
     "node": ">= 18.0",

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 388 - 530
ux/pnpm-lock.yaml


+ 32 - 29
ux/src/pages/AdminAuth.vue

@@ -45,14 +45,15 @@ q-page.admin-mail
             q-item-section(side)
               q-icon(:name='`img:` + str.strategy.icon')
             q-item-section
-              q-item-label {{str.displayName}}
-              q-item-label(caption) {{str.strategy.title}}
+              q-item-label {{ str.displayName }}
+              q-item-label(caption) {{ str.strategy.title }}
             q-item-section(side)
               status-light(:color='str.isEnabled ? `positive` : `negative`', :pulse='str.isEnabled')
       q-btn.q-mt-sm.full-width(
         color='primary'
         icon='las la-plus'
         :label='t(`admin.auth.addStrategy`)'
+        v-if='flagsStore.experimental'
         )
         q-menu(auto-close, fit, max-width='300px')
           q-list(separator)
@@ -72,17 +73,17 @@ q-page.admin-mail
                     :name='`img:` + str.icon'
                   )
               q-item-section
-                q-item-label: strong {{str.title}}
+                q-item-label: strong {{ str.title }}
                 q-item-label(caption, lines='2') {{str.description}}
     .col
       q-card.q-pb-sm
         q-card-section
-          .text-subtitle1 {{t('admin.auth.info')}}
+          .text-subtitle1 {{ t('admin.auth.info') }}
         q-item
           blueprint-icon(icon='information')
           q-item-section
-            q-item-label {{t(`admin.auth.infoName`)}}
-            q-item-label(caption) {{t(`admin.auth.infoNameHint`)}}
+            q-item-label {{ t(`admin.auth.infoName`) }}
+            q-item-label(caption) {{ t(`admin.auth.infoNameHint`) }}
           q-item-section
             q-input(
               outlined
@@ -95,9 +96,9 @@ q-page.admin-mail
         q-item(tag='label')
           blueprint-icon(icon='shutdown')
           q-item-section
-            q-item-label {{t(`admin.auth.enabled`)}}
-            q-item-label(caption) {{t(`admin.auth.enabledHint`)}}
-            q-item-label.text-deep-orange(v-if='state.strategy.strategy.key === `local`', caption) {{t(`admin.auth.enabledForced`)}}
+            q-item-label {{ t(`admin.auth.enabled`) }}
+            q-item-label(caption) {{ t(`admin.auth.enabledHint`) }}
+            q-item-label.text-deep-orange(v-if='state.strategy.strategy.key === `local`', caption) {{ t(`admin.auth.enabledForced`) }}
           q-item-section(avatar)
             q-toggle(
               v-model='state.strategy.isEnabled'
@@ -111,8 +112,8 @@ q-page.admin-mail
         q-item(tag='label')
           blueprint-icon(icon='register')
           q-item-section
-            q-item-label {{t(`admin.auth.registration`)}}
-            q-item-label(caption) {{state.strategy.strategy.key === `local` ? t(`admin.auth.registrationLocalHint`) : t(`admin.auth.registrationHint`)}}
+            q-item-label {{ t(`admin.auth.registration`) }}
+            q-item-label(caption) {{ state.strategy.strategy.key === `local` ? t(`admin.auth.registrationLocalHint`) : t(`admin.auth.registrationHint`) }}
           q-item-section(avatar)
             q-toggle(
               v-model='state.strategy.registration'
@@ -126,8 +127,8 @@ q-page.admin-mail
           q-item
             blueprint-icon(icon='team')
             q-item-section
-              q-item-label {{t(`admin.auth.autoEnrollGroups`)}}
-              q-item-label(caption) {{t(`admin.auth.autoEnrollGroupsHint`)}}
+              q-item-label {{ t(`admin.auth.autoEnrollGroups`) }}
+              q-item-label(caption) {{ t(`admin.auth.autoEnrollGroupsHint`) }}
             q-item-section
               q-select(
                 outlined
@@ -144,7 +145,7 @@ q-page.admin-mail
                 :aria-label='t(`admin.users.groups`)'
                 :loading='state.loadingGroups'
                 )
-                template(v-slot:selected)
+                template(#selected)
                   .text-caption(v-if='state.strategy.autoEnrollGroups?.length > 1')
                     i18n-t(keypath='admin.users.groupsSelected')
                       template(#count)
@@ -154,7 +155,7 @@ q-page.admin-mail
                       template(#group)
                         strong {{ selectedGroupName }}
                   span(v-else)
-                template(v-slot:option='{ itemProps, opt, selected, toggleOption }')
+                template(#option='{ itemProps, opt, selected, toggleOption }')
                   q-item(
                     v-bind='itemProps'
                     )
@@ -171,8 +172,8 @@ q-page.admin-mail
           q-item
             blueprint-icon(icon='private')
             q-item-section
-              q-item-label {{t(`admin.auth.allowedEmailRegex`)}}
-              q-item-label(caption) {{t(`admin.auth.allowedEmailRegexHint`)}}
+              q-item-label {{ t(`admin.auth.allowedEmailRegex`) }}
+              q-item-label(caption) {{ t(`admin.auth.allowedEmailRegexHint`) }}
             q-item-section
               q-input(
                 outlined
@@ -189,12 +190,12 @@ q-page.admin-mail
       //- -----------------------
       q-card.q-pb-sm.q-mt-md
         q-card-section
-          .text-subtitle1 {{t('admin.auth.strategyConfiguration')}}
+          .text-subtitle1 {{ t('admin.auth.strategyConfiguration') }}
           q-banner.q-mt-md(
             v-if='!state.strategy.config || Object.keys(state.strategy.config).length < 1'
             rounded
             :class='$q.dark.isActive ? `bg-dark-4 text-grey-5` : `bg-grey-2 text-grey-7`'
-            ): em {{t('admin.auth.noConfigOption')}}
+            ): em {{ t('admin.auth.noConfigOption') }}
         template(
           v-for='(cfg, cfgKey, idx) in state.strategy.config'
           )
@@ -205,8 +206,8 @@ q-page.admin-mail
             q-item(v-if='cfg.type === `boolean`', tag='label')
               blueprint-icon(:icon='cfg.icon', :hue-rotate='cfg.readOnly ? -45 : 0')
               q-item-section
-                q-item-label {{cfg.title}}
-                q-item-label(caption) {{cfg.hint}}
+                q-item-label {{ cfg.title }}
+                q-item-label(caption) {{ cfg.hint }}
               q-item-section(avatar)
                 q-toggle(
                   v-model='cfg.value'
@@ -219,8 +220,8 @@ q-page.admin-mail
             q-item(v-else)
               blueprint-icon(:icon='cfg.icon', :hue-rotate='cfg.readOnly ? -45 : 0')
               q-item-section
-                q-item-label {{cfg.title}}
-                q-item-label(caption) {{cfg.hint}}
+                q-item-label {{ cfg.title }}
+                q-item-label(caption) {{ cfg.hint }}
               q-item-section(
                 :style='cfg.type === `number` ? `flex: 0 0 150px;` : ``'
                 :class='{ "col-auto": cfg.enum && cfg.enumDisplay === `buttons` }'
@@ -262,12 +263,12 @@ q-page.admin-mail
       //- -----------------------
       q-card.q-pb-sm.q-mt-md(v-if='strategyRefs.length > 0')
         q-card-section
-          .text-subtitle1 {{t('admin.auth.configReference')}}
+          .text-subtitle1 {{ t('admin.auth.configReference') }}
         q-item(v-for='strRef of strategyRefs', :key='strRef.key')
           blueprint-icon(:icon='strRef.icon', :hue-rotate='-45')
           q-item-section
-            q-item-label {{strRef.title}}
-            q-item-label(caption) {{strRef.hint}}
+            q-item-label {{ strRef.title }}
+            q-item-label(caption) {{ strRef.hint }}
           q-item-section
             q-input(
               outlined
@@ -287,9 +288,9 @@ q-page.admin-mail
             no-spinner
             style='height: 100px; max-width: 300px;'
           )
-          .text-subtitle2.q-mt-sm {{state.strategy.strategy.title}}
-          .text-caption.q-mt-sm {{state.strategy.strategy.description}}
-          .text-caption.q-mt-sm: strong {{state.strategy.strategy.vendor}}
+          .text-subtitle2.q-mt-sm {{ state.strategy.strategy.title }}
+          .text-caption.q-mt-sm {{ state.strategy.strategy.description }}
+          .text-caption.q-mt-sm: strong {{ state.strategy.strategy.vendor }}
           .text-caption: a(:href='state.strategy.strategy.website', target='_blank', rel='noreferrer') {{state.strategy.strategy.website}}
 
       .flex.q-mt-md
@@ -315,6 +316,7 @@ import { useMeta, useQuasar } from 'quasar'
 import { computed, onMounted, reactive, watch, nextTick } from 'vue'
 
 import { useAdminStore } from '@/stores/admin'
+import { useFlagsStore } from '@/stores/flags'
 import { useSiteStore } from '@/stores/site'
 
 // QUASAR
@@ -324,6 +326,7 @@ const $q = useQuasar()
 // STORES
 
 const adminStore = useAdminStore()
+const flagsStore = useFlagsStore()
 const siteStore = useSiteStore()
 
 // I18N

+ 3 - 2
ux/src/pages/AdminBlocks.vue

@@ -50,8 +50,8 @@ q-page.admin-flags
         q-item(v-for='block of state.blocks', :key='block.id')
           blueprint-icon(:icon='block.isCustom ? `plugin` : block.icon')
           q-item-section
-            q-item-label: strong {{block.name}}
-            q-item-label(caption) {{ block.description}}
+            q-item-label: strong {{ block.name }}
+            q-item-label(caption) {{ block.description }}
             q-item-label.flex.items-center(caption)
               q-chip.q-ma-none(square, dense, :color='$q.dark.isActive ? `pink-8` : `pink-1`', :text-color='$q.dark.isActive ? `white` : `pink-9`'): span.text-caption &lt;block-{{ block.block }}&gt;
               q-separator.q-mx-sm.q-my-xs(vertical)
@@ -79,6 +79,7 @@ q-page.admin-flags
               unchecked-icon='las la-times'
               :label='t(`admin.blocks.isEnabled`)'
               :aria-label='t(`admin.blocks.isEnabled`)'
+              disable
               )
 </template>
 

+ 24 - 22
ux/src/pages/AdminDashboard.vue

@@ -85,30 +85,30 @@ q-page.admin-dashboard
             :disable='!userStore.can(`manage:users`)'
             to='/_admin/users'
             )
-    .col-12.col-sm-6.col-lg-3
-      q-card
-        q-card-section.admin-dashboard-card
-          img(src='/_assets/icons/fluent-tag.svg')
-          div
-            strong {{ t('admin.tags.title') }}
-            span {{adminStore.info.tagsTotal}}
-        q-separator
-        q-card-actions(align='right')
-          q-btn(
-            flat
-            color='primary'
-            icon='las la-tags'
-            :label='t(`common.actions.manage`)'
-            :disable='!userStore.can(`manage:sites`)'
-            :to='`/_admin/` + adminStore.currentSiteId + `/tags`'
-            )
+    //- .col-12.col-sm-6.col-lg-3
+    //-   q-card
+    //-     q-card-section.admin-dashboard-card
+    //-       img(src='/_assets/icons/fluent-tag.svg')
+    //-       div
+    //-         strong {{ t('admin.tags.title') }}
+    //-         span {{adminStore.info.tagsTotal}}
+    //-     q-separator
+    //-     q-card-actions(align='right')
+    //-       q-btn(
+    //-         flat
+    //-         color='primary'
+    //-         icon='las la-tags'
+    //-         :label='t(`common.actions.manage`)'
+    //-         :disable='!userStore.can(`manage:sites`)'
+    //-         :to='`/_admin/` + adminStore.currentSiteId + `/tags`'
+    //-         )
     .col-12.col-sm-6.col-lg-3
       q-card
         q-card-section.admin-dashboard-card
           img(src='/_assets/icons/fluent-female-working-with-a-laptop.svg')
           div
             strong Logins
-            small {{adminStore.info.loginsPastDay}} #[i / past 24h]
+            small {{ adminStore.info.loginsPastDay }} #[i / past 24h]
         q-separator
         q-card-actions(align='right')
           q-btn(
@@ -116,12 +116,12 @@ q-page.admin-dashboard
             color='primary'
             icon='las la-chart-area'
             :label='t(`admin.analytics.title`)'
-            :disable='!userStore.can(`manage:sites`)'
+            :disable='!userStore.can(`manage:sites`) || flagsStore.experimental'
             :to='`/_admin/` + adminStore.currentSiteId + `/analytics`'
             )
-    .col-12.col-lg-9
-      q-card
-        q-card-section ---
+    //- .col-12.col-lg-9
+    //-   q-card
+    //-     q-card-section ---
 
     .col-12
       q-banner.bg-positive.text-white(
@@ -152,6 +152,7 @@ import { useI18n } from 'vue-i18n'
 import { useRouter } from 'vue-router'
 
 import { useAdminStore } from '../stores/admin'
+import { useFlagsStore } from '@/stores/flags'
 import { useUserStore } from '@/stores/user'
 
 // COMPONENTS
@@ -168,6 +169,7 @@ const $q = useQuasar()
 // STORES
 
 const adminStore = useAdminStore()
+const flagsStore = useFlagsStore()
 const userStore = useUserStore()
 
 // ROUTER

+ 2 - 2
ux/src/pages/AdminTerminal.vue

@@ -55,8 +55,8 @@ import { onBeforeUnmount, onMounted, reactive, ref } from 'vue'
 import { useMeta, useQuasar } from 'quasar'
 import { useI18n } from 'vue-i18n'
 import { io } from 'socket.io-client'
-import { Terminal } from 'xterm'
-import 'xterm/css/xterm.css'
+import { Terminal } from '@xterm/xterm'
+import '@xterm/xterm/css/xterm.css'
 
 import { useSiteStore } from '@/stores/site'
 

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно