(backend): trying to have a working backend.

Did I manage to achieve this task: NO.
This commit is contained in:
apetitco 2025-12-21 02:58:15 +01:00
parent b873ec390f
commit 8debc57559
14 changed files with 327 additions and 241 deletions

View file

@ -17,6 +17,7 @@
DOCKER_SERVICE= \ DOCKER_SERVICE= \
auth \ auth \
chat \ chat \
tic-tac-toe \
frontend \ frontend \
nginx \ nginx \
user \ user \

View file

@ -76,9 +76,8 @@ services:
context: ./src/ context: ./src/
args: args:
- SERVICE=tic-tac-toe - SERVICE=tic-tac-toe
- EXTRA_FILES=tic-tac-toe/extra container_name: app-tic-tac-toe
container_name: tic-tac-toe restart: always
restart: unless-stopped
networks: networks:
- app - app
volumes: volumes:
@ -87,6 +86,11 @@ services:
environment: environment:
- JWT_SECRET=KRUGKIDROVUWG2ZAMJZG653OEBTG66BANJ2W24DTEBXXMZLSEB2GQZJANRQXU6JA - JWT_SECRET=KRUGKIDROVUWG2ZAMJZG653OEBTG66BANJ2W24DTEBXXMZLSEB2GQZJANRQXU6JA
- DATABASE_DIR=/volumes/database - DATABASE_DIR=/volumes/database
logging:
driver: gelf
options:
gelf-address: "udp://127.0.0.1:12201"
tag: "{{.Name}}"
############### ###############
# CHAT # # CHAT #

184
frontend/pnpm-lock.yaml generated
View file

@ -214,113 +214,113 @@ packages:
'@jridgewell/trace-mapping@0.3.31': '@jridgewell/trace-mapping@0.3.31':
resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
'@rollup/rollup-android-arm-eabi@4.53.5': '@rollup/rollup-android-arm-eabi@4.54.0':
resolution: {integrity: sha512-iDGS/h7D8t7tvZ1t6+WPK04KD0MwzLZrG0se1hzBjSi5fyxlsiggoJHwh18PCFNn7tG43OWb6pdZ6Y+rMlmyNQ==} resolution: {integrity: sha512-OywsdRHrFvCdvsewAInDKCNyR3laPA2mc9bRYJ6LBp5IyvF3fvXbbNR0bSzHlZVFtn6E0xw2oZlyjg4rKCVcng==}
cpu: [arm] cpu: [arm]
os: [android] os: [android]
'@rollup/rollup-android-arm64@4.53.5': '@rollup/rollup-android-arm64@4.54.0':
resolution: {integrity: sha512-wrSAViWvZHBMMlWk6EJhvg8/rjxzyEhEdgfMMjREHEq11EtJ6IP6yfcCH57YAEca2Oe3FNCE9DSTgU70EIGmVw==} resolution: {integrity: sha512-Skx39Uv+u7H224Af+bDgNinitlmHyQX1K/atIA32JP3JQw6hVODX5tkbi2zof/E69M1qH2UoN3Xdxgs90mmNYw==}
cpu: [arm64] cpu: [arm64]
os: [android] os: [android]
'@rollup/rollup-darwin-arm64@4.53.5': '@rollup/rollup-darwin-arm64@4.54.0':
resolution: {integrity: sha512-S87zZPBmRO6u1YXQLwpveZm4JfPpAa6oHBX7/ghSiGH3rz/KDgAu1rKdGutV+WUI6tKDMbaBJomhnT30Y2t4VQ==} resolution: {integrity: sha512-k43D4qta/+6Fq+nCDhhv9yP2HdeKeP56QrUUTW7E6PhZP1US6NDqpJj4MY0jBHlJivVJD5P8NxrjuobZBJTCRw==}
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
'@rollup/rollup-darwin-x64@4.53.5': '@rollup/rollup-darwin-x64@4.54.0':
resolution: {integrity: sha512-YTbnsAaHo6VrAczISxgpTva8EkfQus0VPEVJCEaboHtZRIb6h6j0BNxRBOwnDciFTZLDPW5r+ZBmhL/+YpTZgA==} resolution: {integrity: sha512-cOo7biqwkpawslEfox5Vs8/qj83M/aZCSSNIWpVzfU2CYHa2G3P1UN5WF01RdTHSgCkri7XOlTdtk17BezlV3A==}
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
'@rollup/rollup-freebsd-arm64@4.53.5': '@rollup/rollup-freebsd-arm64@4.54.0':
resolution: {integrity: sha512-1T8eY2J8rKJWzaznV7zedfdhD1BqVs1iqILhmHDq/bqCUZsrMt+j8VCTHhP0vdfbHK3e1IQ7VYx3jlKqwlf+vw==} resolution: {integrity: sha512-miSvuFkmvFbgJ1BevMa4CPCFt5MPGw094knM64W9I0giUIMMmRYcGW/JWZDriaw/k1kOBtsWh1z6nIFV1vPNtA==}
cpu: [arm64] cpu: [arm64]
os: [freebsd] os: [freebsd]
'@rollup/rollup-freebsd-x64@4.53.5': '@rollup/rollup-freebsd-x64@4.54.0':
resolution: {integrity: sha512-sHTiuXyBJApxRn+VFMaw1U+Qsz4kcNlxQ742snICYPrY+DDL8/ZbaC4DVIB7vgZmp3jiDaKA0WpBdP0aqPJoBQ==} resolution: {integrity: sha512-KGXIs55+b/ZfZsq9aR026tmr/+7tq6VG6MsnrvF4H8VhwflTIuYh+LFUlIsRdQSgrgmtM3fVATzEAj4hBQlaqQ==}
cpu: [x64] cpu: [x64]
os: [freebsd] os: [freebsd]
'@rollup/rollup-linux-arm-gnueabihf@4.53.5': '@rollup/rollup-linux-arm-gnueabihf@4.54.0':
resolution: {integrity: sha512-dV3T9MyAf0w8zPVLVBptVlzaXxka6xg1f16VAQmjg+4KMSTWDvhimI/Y6mp8oHwNrmnmVl9XxJ/w/mO4uIQONA==} resolution: {integrity: sha512-EHMUcDwhtdRGlXZsGSIuXSYwD5kOT9NVnx9sqzYiwAc91wfYOE1g1djOEDseZJKKqtHAHGwnGPQu3kytmfaXLQ==}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
'@rollup/rollup-linux-arm-musleabihf@4.53.5': '@rollup/rollup-linux-arm-musleabihf@4.54.0':
resolution: {integrity: sha512-wIGYC1x/hyjP+KAu9+ewDI+fi5XSNiUi9Bvg6KGAh2TsNMA3tSEs+Sh6jJ/r4BV/bx/CyWu2ue9kDnIdRyafcQ==} resolution: {integrity: sha512-+pBrqEjaakN2ySv5RVrj/qLytYhPKEUwk+e3SFU5jTLHIcAtqh2rLrd/OkbNuHJpsBgxsD8ccJt5ga/SeG0JmA==}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
'@rollup/rollup-linux-arm64-gnu@4.53.5': '@rollup/rollup-linux-arm64-gnu@4.54.0':
resolution: {integrity: sha512-Y+qVA0D9d0y2FRNiG9oM3Hut/DgODZbU9I8pLLPwAsU0tUKZ49cyV1tzmB/qRbSzGvY8lpgGkJuMyuhH7Ma+Vg==} resolution: {integrity: sha512-NSqc7rE9wuUaRBsBp5ckQ5CVz5aIRKCwsoa6WMF7G01sX3/qHUw/z4pv+D+ahL1EIKy6Enpcnz1RY8pf7bjwng==}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@rollup/rollup-linux-arm64-musl@4.53.5': '@rollup/rollup-linux-arm64-musl@4.54.0':
resolution: {integrity: sha512-juaC4bEgJsyFVfqhtGLz8mbopaWD+WeSOYr5E16y+1of6KQjc0BpwZLuxkClqY1i8sco+MdyoXPNiCkQou09+g==} resolution: {integrity: sha512-gr5vDbg3Bakga5kbdpqx81m2n9IX8M6gIMlQQIXiLTNeQW6CucvuInJ91EuCJ/JYvc+rcLLsDFcfAD1K7fMofg==}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@rollup/rollup-linux-loong64-gnu@4.53.5': '@rollup/rollup-linux-loong64-gnu@4.54.0':
resolution: {integrity: sha512-rIEC0hZ17A42iXtHX+EPJVL/CakHo+tT7W0pbzdAGuWOt2jxDFh7A/lRhsNHBcqL4T36+UiAgwO8pbmn3dE8wA==} resolution: {integrity: sha512-gsrtB1NA3ZYj2vq0Rzkylo9ylCtW/PhpLEivlgWe0bpgtX5+9j9EZa0wtZiCjgu6zmSeZWyI/e2YRX1URozpIw==}
cpu: [loong64] cpu: [loong64]
os: [linux] os: [linux]
'@rollup/rollup-linux-ppc64-gnu@4.53.5': '@rollup/rollup-linux-ppc64-gnu@4.54.0':
resolution: {integrity: sha512-T7l409NhUE552RcAOcmJHj3xyZ2h7vMWzcwQI0hvn5tqHh3oSoclf9WgTl+0QqffWFG8MEVZZP1/OBglKZx52Q==} resolution: {integrity: sha512-y3qNOfTBStmFNq+t4s7Tmc9hW2ENtPg8FeUD/VShI7rKxNW7O4fFeaYbMsd3tpFlIg1Q8IapFgy7Q9i2BqeBvA==}
cpu: [ppc64] cpu: [ppc64]
os: [linux] os: [linux]
'@rollup/rollup-linux-riscv64-gnu@4.53.5': '@rollup/rollup-linux-riscv64-gnu@4.54.0':
resolution: {integrity: sha512-7OK5/GhxbnrMcxIFoYfhV/TkknarkYC1hqUw1wU2xUN3TVRLNT5FmBv4KkheSG2xZ6IEbRAhTooTV2+R5Tk0lQ==} resolution: {integrity: sha512-89sepv7h2lIVPsFma8iwmccN7Yjjtgz0Rj/Ou6fEqg3HDhpCa+Et+YSufy27i6b0Wav69Qv4WBNl3Rs6pwhebQ==}
cpu: [riscv64] cpu: [riscv64]
os: [linux] os: [linux]
'@rollup/rollup-linux-riscv64-musl@4.53.5': '@rollup/rollup-linux-riscv64-musl@4.54.0':
resolution: {integrity: sha512-GwuDBE/PsXaTa76lO5eLJTyr2k8QkPipAyOrs4V/KJufHCZBJ495VCGJol35grx9xryk4V+2zd3Ri+3v7NPh+w==} resolution: {integrity: sha512-ZcU77ieh0M2Q8Ur7D5X7KvK+UxbXeDHwiOt/CPSBTI1fBmeDMivW0dPkdqkT4rOgDjrDDBUed9x4EgraIKoR2A==}
cpu: [riscv64] cpu: [riscv64]
os: [linux] os: [linux]
'@rollup/rollup-linux-s390x-gnu@4.53.5': '@rollup/rollup-linux-s390x-gnu@4.54.0':
resolution: {integrity: sha512-IAE1Ziyr1qNfnmiQLHBURAD+eh/zH1pIeJjeShleII7Vj8kyEm2PF77o+lf3WTHDpNJcu4IXJxNO0Zluro8bOw==} resolution: {integrity: sha512-2AdWy5RdDF5+4YfG/YesGDDtbyJlC9LHmL6rZw6FurBJ5n4vFGupsOBGfwMRjBYH7qRQowT8D/U4LoSvVwOhSQ==}
cpu: [s390x] cpu: [s390x]
os: [linux] os: [linux]
'@rollup/rollup-linux-x64-gnu@4.53.5': '@rollup/rollup-linux-x64-gnu@4.54.0':
resolution: {integrity: sha512-Pg6E+oP7GvZ4XwgRJBuSXZjcqpIW3yCBhK4BcsANvb47qMvAbCjR6E+1a/U2WXz1JJxp9/4Dno3/iSJLcm5auw==} resolution: {integrity: sha512-WGt5J8Ij/rvyqpFexxk3ffKqqbLf9AqrTBbWDk7ApGUzaIs6V+s2s84kAxklFwmMF/vBNGrVdYgbblCOFFezMQ==}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@rollup/rollup-linux-x64-musl@4.53.5': '@rollup/rollup-linux-x64-musl@4.54.0':
resolution: {integrity: sha512-txGtluxDKTxaMDzUduGP0wdfng24y1rygUMnmlUJ88fzCCULCLn7oE5kb2+tRB+MWq1QDZT6ObT5RrR8HFRKqg==} resolution: {integrity: sha512-JzQmb38ATzHjxlPHuTH6tE7ojnMKM2kYNzt44LO/jJi8BpceEC8QuXYA908n8r3CNuG/B3BV8VR3Hi1rYtmPiw==}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@rollup/rollup-openharmony-arm64@4.53.5': '@rollup/rollup-openharmony-arm64@4.54.0':
resolution: {integrity: sha512-3DFiLPnTxiOQV993fMc+KO8zXHTcIjgaInrqlG8zDp1TlhYl6WgrOHuJkJQ6M8zHEcntSJsUp1XFZSY8C1DYbg==} resolution: {integrity: sha512-huT3fd0iC7jigGh7n3q/+lfPcXxBi+om/Rs3yiFxjvSxbSB6aohDFXbWvlspaqjeOh+hx7DDHS+5Es5qRkWkZg==}
cpu: [arm64] cpu: [arm64]
os: [openharmony] os: [openharmony]
'@rollup/rollup-win32-arm64-msvc@4.53.5': '@rollup/rollup-win32-arm64-msvc@4.54.0':
resolution: {integrity: sha512-nggc/wPpNTgjGg75hu+Q/3i32R00Lq1B6N1DO7MCU340MRKL3WZJMjA9U4K4gzy3dkZPXm9E1Nc81FItBVGRlA==} resolution: {integrity: sha512-c2V0W1bsKIKfbLMBu/WGBz6Yci8nJ/ZJdheE0EwB73N3MvHYKiKGs3mVilX4Gs70eGeDaMqEob25Tw2Gb9Nqyw==}
cpu: [arm64] cpu: [arm64]
os: [win32] os: [win32]
'@rollup/rollup-win32-ia32-msvc@4.53.5': '@rollup/rollup-win32-ia32-msvc@4.54.0':
resolution: {integrity: sha512-U/54pTbdQpPLBdEzCT6NBCFAfSZMvmjr0twhnD9f4EIvlm9wy3jjQ38yQj1AGznrNO65EWQMgm/QUjuIVrYF9w==} resolution: {integrity: sha512-woEHgqQqDCkAzrDhvDipnSirm5vxUXtSKDYTVpZG3nUdW/VVB5VdCYA2iReSj/u3yCZzXID4kuKG7OynPnB3WQ==}
cpu: [ia32] cpu: [ia32]
os: [win32] os: [win32]
'@rollup/rollup-win32-x64-gnu@4.53.5': '@rollup/rollup-win32-x64-gnu@4.54.0':
resolution: {integrity: sha512-2NqKgZSuLH9SXBBV2dWNRCZmocgSOx8OJSdpRaEcRlIfX8YrKxUT6z0F1NpvDVhOsl190UFTRh2F2WDWWCYp3A==} resolution: {integrity: sha512-dzAc53LOuFvHwbCEOS0rPbXp6SIhAf2txMP5p6mGyOXXw5mWY8NGGbPMPrs4P1WItkfApDathBj/NzMLUZ9rtQ==}
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
'@rollup/rollup-win32-x64-msvc@4.53.5': '@rollup/rollup-win32-x64-msvc@4.54.0':
resolution: {integrity: sha512-JRpZUhCfhZ4keB5v0fe02gQJy05GqboPOaxvjugW04RLSYYoB/9t2lx2u/tMs/Na/1NXfY8QYjgRljRpN+MjTQ==} resolution: {integrity: sha512-hYT5d3YNdSh3mbCU1gwQyPgQd3T2ne0A3KG8KSBdav5TiBg6eInVmV+TeR5uHufiIgSFg0XsOWGW5/RhNcSvPg==}
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
@ -667,8 +667,8 @@ packages:
require-main-filename@2.0.0: require-main-filename@2.0.0:
resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==}
rollup@4.53.5: rollup@4.54.0:
resolution: {integrity: sha512-iTNAbFSlRpcHeeWu73ywU/8KuU/LZmNCSxp6fjQkJBD3ivUb8tpDrXhIxEzA05HlYMEwmtaUnb3RP+YNv162OQ==} resolution: {integrity: sha512-3nk8Y3a9Ea8szgKhinMlGMhGMw89mqule3KWczxhIzqudyHdCIOHw8WJlj/r329fACjKLEh13ZSk7oE22kyeIw==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'} engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true hasBin: true
@ -905,70 +905,70 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2 '@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.5 '@jridgewell/sourcemap-codec': 1.5.5
'@rollup/rollup-android-arm-eabi@4.53.5': '@rollup/rollup-android-arm-eabi@4.54.0':
optional: true optional: true
'@rollup/rollup-android-arm64@4.53.5': '@rollup/rollup-android-arm64@4.54.0':
optional: true optional: true
'@rollup/rollup-darwin-arm64@4.53.5': '@rollup/rollup-darwin-arm64@4.54.0':
optional: true optional: true
'@rollup/rollup-darwin-x64@4.53.5': '@rollup/rollup-darwin-x64@4.54.0':
optional: true optional: true
'@rollup/rollup-freebsd-arm64@4.53.5': '@rollup/rollup-freebsd-arm64@4.54.0':
optional: true optional: true
'@rollup/rollup-freebsd-x64@4.53.5': '@rollup/rollup-freebsd-x64@4.54.0':
optional: true optional: true
'@rollup/rollup-linux-arm-gnueabihf@4.53.5': '@rollup/rollup-linux-arm-gnueabihf@4.54.0':
optional: true optional: true
'@rollup/rollup-linux-arm-musleabihf@4.53.5': '@rollup/rollup-linux-arm-musleabihf@4.54.0':
optional: true optional: true
'@rollup/rollup-linux-arm64-gnu@4.53.5': '@rollup/rollup-linux-arm64-gnu@4.54.0':
optional: true optional: true
'@rollup/rollup-linux-arm64-musl@4.53.5': '@rollup/rollup-linux-arm64-musl@4.54.0':
optional: true optional: true
'@rollup/rollup-linux-loong64-gnu@4.53.5': '@rollup/rollup-linux-loong64-gnu@4.54.0':
optional: true optional: true
'@rollup/rollup-linux-ppc64-gnu@4.53.5': '@rollup/rollup-linux-ppc64-gnu@4.54.0':
optional: true optional: true
'@rollup/rollup-linux-riscv64-gnu@4.53.5': '@rollup/rollup-linux-riscv64-gnu@4.54.0':
optional: true optional: true
'@rollup/rollup-linux-riscv64-musl@4.53.5': '@rollup/rollup-linux-riscv64-musl@4.54.0':
optional: true optional: true
'@rollup/rollup-linux-s390x-gnu@4.53.5': '@rollup/rollup-linux-s390x-gnu@4.54.0':
optional: true optional: true
'@rollup/rollup-linux-x64-gnu@4.53.5': '@rollup/rollup-linux-x64-gnu@4.54.0':
optional: true optional: true
'@rollup/rollup-linux-x64-musl@4.53.5': '@rollup/rollup-linux-x64-musl@4.54.0':
optional: true optional: true
'@rollup/rollup-openharmony-arm64@4.53.5': '@rollup/rollup-openharmony-arm64@4.54.0':
optional: true optional: true
'@rollup/rollup-win32-arm64-msvc@4.53.5': '@rollup/rollup-win32-arm64-msvc@4.54.0':
optional: true optional: true
'@rollup/rollup-win32-ia32-msvc@4.53.5': '@rollup/rollup-win32-ia32-msvc@4.54.0':
optional: true optional: true
'@rollup/rollup-win32-x64-gnu@4.53.5': '@rollup/rollup-win32-x64-gnu@4.54.0':
optional: true optional: true
'@rollup/rollup-win32-x64-msvc@4.53.5': '@rollup/rollup-win32-x64-msvc@4.54.0':
optional: true optional: true
'@socket.io/component-emitter@3.1.2': {} '@socket.io/component-emitter@3.1.2': {}
@ -1256,32 +1256,32 @@ snapshots:
require-main-filename@2.0.0: {} require-main-filename@2.0.0: {}
rollup@4.53.5: rollup@4.54.0:
dependencies: dependencies:
'@types/estree': 1.0.8 '@types/estree': 1.0.8
optionalDependencies: optionalDependencies:
'@rollup/rollup-android-arm-eabi': 4.53.5 '@rollup/rollup-android-arm-eabi': 4.54.0
'@rollup/rollup-android-arm64': 4.53.5 '@rollup/rollup-android-arm64': 4.54.0
'@rollup/rollup-darwin-arm64': 4.53.5 '@rollup/rollup-darwin-arm64': 4.54.0
'@rollup/rollup-darwin-x64': 4.53.5 '@rollup/rollup-darwin-x64': 4.54.0
'@rollup/rollup-freebsd-arm64': 4.53.5 '@rollup/rollup-freebsd-arm64': 4.54.0
'@rollup/rollup-freebsd-x64': 4.53.5 '@rollup/rollup-freebsd-x64': 4.54.0
'@rollup/rollup-linux-arm-gnueabihf': 4.53.5 '@rollup/rollup-linux-arm-gnueabihf': 4.54.0
'@rollup/rollup-linux-arm-musleabihf': 4.53.5 '@rollup/rollup-linux-arm-musleabihf': 4.54.0
'@rollup/rollup-linux-arm64-gnu': 4.53.5 '@rollup/rollup-linux-arm64-gnu': 4.54.0
'@rollup/rollup-linux-arm64-musl': 4.53.5 '@rollup/rollup-linux-arm64-musl': 4.54.0
'@rollup/rollup-linux-loong64-gnu': 4.53.5 '@rollup/rollup-linux-loong64-gnu': 4.54.0
'@rollup/rollup-linux-ppc64-gnu': 4.53.5 '@rollup/rollup-linux-ppc64-gnu': 4.54.0
'@rollup/rollup-linux-riscv64-gnu': 4.53.5 '@rollup/rollup-linux-riscv64-gnu': 4.54.0
'@rollup/rollup-linux-riscv64-musl': 4.53.5 '@rollup/rollup-linux-riscv64-musl': 4.54.0
'@rollup/rollup-linux-s390x-gnu': 4.53.5 '@rollup/rollup-linux-s390x-gnu': 4.54.0
'@rollup/rollup-linux-x64-gnu': 4.53.5 '@rollup/rollup-linux-x64-gnu': 4.54.0
'@rollup/rollup-linux-x64-musl': 4.53.5 '@rollup/rollup-linux-x64-musl': 4.54.0
'@rollup/rollup-openharmony-arm64': 4.53.5 '@rollup/rollup-openharmony-arm64': 4.54.0
'@rollup/rollup-win32-arm64-msvc': 4.53.5 '@rollup/rollup-win32-arm64-msvc': 4.54.0
'@rollup/rollup-win32-ia32-msvc': 4.53.5 '@rollup/rollup-win32-ia32-msvc': 4.54.0
'@rollup/rollup-win32-x64-gnu': 4.53.5 '@rollup/rollup-win32-x64-gnu': 4.54.0
'@rollup/rollup-win32-x64-msvc': 4.53.5 '@rollup/rollup-win32-x64-msvc': 4.54.0
fsevents: 2.3.3 fsevents: 2.3.3
set-blocking@2.0.0: {} set-blocking@2.0.0: {}
@ -1350,7 +1350,7 @@ snapshots:
fdir: 6.5.0(picomatch@4.0.3) fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3 picomatch: 4.0.3
postcss: 8.5.6 postcss: 8.5.6
rollup: 4.53.5 rollup: 4.54.0
tinyglobby: 0.2.15 tinyglobby: 0.2.15
optionalDependencies: optionalDependencies:
'@types/node': 25.0.3 '@types/node': 25.0.3

View file

@ -20,7 +20,7 @@
"fastify-plugin": "^5.1.0", "fastify-plugin": "^5.1.0",
"joi": "^18.0.2", "joi": "^18.0.2",
"otp": "^1.1.2", "otp": "^1.1.2",
"typebox": "^1.0.64", "typebox": "^1.0.65",
"uuidv7": "^1.1.0" "uuidv7": "^1.1.0"
}, },
"devDependencies": { "devDependencies": {

View file

@ -27,7 +27,7 @@
"fastify": "^5.6.2", "fastify": "^5.6.2",
"fastify-cli": "^7.4.1", "fastify-cli": "^7.4.1",
"fastify-plugin": "^5.1.0", "fastify-plugin": "^5.1.0",
"typebox": "^1.0.64" "typebox": "^1.0.65"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^22.19.3", "@types/node": "^22.19.3",

View file

@ -27,7 +27,7 @@
"fastify": "^5.6.2", "fastify": "^5.6.2",
"fastify-plugin": "^5.1.0", "fastify-plugin": "^5.1.0",
"socket.io": "^4.8.1", "socket.io": "^4.8.1",
"typebox": "^1.0.64" "typebox": "^1.0.65"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^22.19.3", "@types/node": "^22.19.3",

View file

@ -33,7 +33,7 @@
"vite": "^7.3.0" "vite": "^7.3.0"
}, },
"dependencies": { "dependencies": {
"@redocly/cli": "^2.13.0", "@redocly/cli": "^2.14.0",
"bindings": "^1.5.0" "bindings": "^1.5.0"
} }
} }

260
src/pnpm-lock.yaml generated
View file

@ -9,8 +9,8 @@ importers:
.: .:
dependencies: dependencies:
'@redocly/cli': '@redocly/cli':
specifier: ^2.13.0 specifier: ^2.14.0
version: 2.13.0(@opentelemetry/api@1.9.0)(ajv@8.17.1)(core-js@3.47.0) version: 2.14.0(@opentelemetry/api@1.9.0)(ajv@8.17.1)(core-js@3.47.0)
bindings: bindings:
specifier: ^1.5.0 specifier: ^1.5.0
version: 1.5.0 version: 1.5.0
@ -79,8 +79,8 @@ importers:
specifier: ^1.1.2 specifier: ^1.1.2
version: 1.1.2 version: 1.1.2
typebox: typebox:
specifier: ^1.0.64 specifier: ^1.0.65
version: 1.0.64 version: 1.0.65
uuidv7: uuidv7:
specifier: ^1.1.0 specifier: ^1.1.0
version: 1.1.0 version: 1.1.0
@ -122,15 +122,15 @@ importers:
specifier: ^5.1.0 specifier: ^5.1.0
version: 5.1.0 version: 5.1.0
typebox: typebox:
specifier: ^1.0.64 specifier: ^1.0.65
version: 1.0.64 version: 1.0.65
devDependencies: devDependencies:
'@types/node': '@types/node':
specifier: ^22.19.3 specifier: ^22.19.3
version: 22.19.3 version: 22.19.3
rollup-plugin-node-externals: rollup-plugin-node-externals:
specifier: ^8.1.2 specifier: ^8.1.2
version: 8.1.2(rollup@4.53.5) version: 8.1.2(rollup@4.54.0)
vite: vite:
specifier: ^7.3.0 specifier: ^7.3.0
version: 7.3.0(@types/node@22.19.3)(yaml@2.8.2) version: 7.3.0(@types/node@22.19.3)(yaml@2.8.2)
@ -168,15 +168,15 @@ importers:
specifier: ^4.8.1 specifier: ^4.8.1
version: 4.8.1 version: 4.8.1
typebox: typebox:
specifier: ^1.0.64 specifier: ^1.0.65
version: 1.0.64 version: 1.0.65
devDependencies: devDependencies:
'@types/node': '@types/node':
specifier: ^22.19.3 specifier: ^22.19.3
version: 22.19.3 version: 22.19.3
rollup-plugin-node-externals: rollup-plugin-node-externals:
specifier: ^8.1.2 specifier: ^8.1.2
version: 8.1.2(rollup@4.53.5) version: 8.1.2(rollup@4.54.0)
vite: vite:
specifier: ^7.3.0 specifier: ^7.3.0
version: 7.3.0(@types/node@22.19.3)(yaml@2.8.2) version: 7.3.0(@types/node@22.19.3)(yaml@2.8.2)
@ -214,8 +214,8 @@ importers:
specifier: ^4.8.1 specifier: ^4.8.1
version: 4.8.1 version: 4.8.1
typebox: typebox:
specifier: ^1.0.64 specifier: ^1.0.65
version: 1.0.64 version: 1.0.65
devDependencies: devDependencies:
'@types/node': '@types/node':
specifier: ^22.19.3 specifier: ^22.19.3
@ -225,7 +225,7 @@ importers:
version: 5.1.0(fastify@5.6.2)(socket.io@4.8.1) version: 5.1.0(fastify@5.6.2)(socket.io@4.8.1)
rollup-plugin-node-externals: rollup-plugin-node-externals:
specifier: ^8.1.2 specifier: ^8.1.2
version: 8.1.2(rollup@4.53.5) version: 8.1.2(rollup@4.54.0)
vite: vite:
specifier: ^7.3.0 specifier: ^7.3.0
version: 7.3.0(@types/node@22.19.3)(yaml@2.8.2) version: 7.3.0(@types/node@22.19.3)(yaml@2.8.2)
@ -260,15 +260,15 @@ importers:
specifier: ^5.1.0 specifier: ^5.1.0
version: 5.1.0 version: 5.1.0
typebox: typebox:
specifier: ^1.0.64 specifier: ^1.0.65
version: 1.0.64 version: 1.0.65
devDependencies: devDependencies:
'@types/node': '@types/node':
specifier: ^22.19.3 specifier: ^22.19.3
version: 22.19.3 version: 22.19.3
rollup-plugin-node-externals: rollup-plugin-node-externals:
specifier: ^8.1.2 specifier: ^8.1.2
version: 8.1.2(rollup@4.53.5) version: 8.1.2(rollup@4.54.0)
vite: vite:
specifier: ^7.3.0 specifier: ^7.3.0
version: 7.3.0(@types/node@22.19.3)(yaml@2.8.2) version: 7.3.0(@types/node@22.19.3)(yaml@2.8.2)
@ -728,136 +728,136 @@ packages:
'@redocly/ajv@8.17.1': '@redocly/ajv@8.17.1':
resolution: {integrity: sha512-EDtsGZS964mf9zAUXAl9Ew16eYbeyAFWhsPr0fX6oaJxgd8rApYlPBf0joyhnUHz88WxrigyFtTaqqzXNzPgqw==} resolution: {integrity: sha512-EDtsGZS964mf9zAUXAl9Ew16eYbeyAFWhsPr0fX6oaJxgd8rApYlPBf0joyhnUHz88WxrigyFtTaqqzXNzPgqw==}
'@redocly/cli@2.13.0': '@redocly/cli@2.14.0':
resolution: {integrity: sha512-VOGh8p5gKy+u94SbvMGaHvDM6TPw668D9iQkNSztoi4T5sj3ZwM7Y8Z3yZnMqC5s5epDcLAMq4jCO8UVn5ZWHg==} resolution: {integrity: sha512-LvVYV7KJGtVqltBc8Cbw2s4QpFOzend5nCsgR1JgWvHNt70f1AzqoHr5y7GO+3ThwumrTzPvjta+Ln+n3x5NmA==}
engines: {node: '>=22.12.0 || >=20.19.0 <21.0.0', npm: '>=10'} engines: {node: '>=22.12.0 || >=20.19.0 <21.0.0', npm: '>=10'}
hasBin: true hasBin: true
'@redocly/config@0.22.2': '@redocly/config@0.22.2':
resolution: {integrity: sha512-roRDai8/zr2S9YfmzUfNhKjOF0NdcOIqF7bhf4MVC5UxpjIysDjyudvlAiVbpPHp3eDRWbdzUgtkK1a7YiDNyQ==} resolution: {integrity: sha512-roRDai8/zr2S9YfmzUfNhKjOF0NdcOIqF7bhf4MVC5UxpjIysDjyudvlAiVbpPHp3eDRWbdzUgtkK1a7YiDNyQ==}
'@redocly/config@0.41.0': '@redocly/config@0.41.1':
resolution: {integrity: sha512-8yJ2e+ex8KVF25zijdpDbAEjyubk7NLfHsLI8h0MUnLEo2iEg6rTCDT9Qw71XDqd5UlXvfJb0Z0h6dd+Y6pWLw==} resolution: {integrity: sha512-LcMCzFbP/sqkCLSG3YswmeScP4fM5SjDCQizwa+psZ0PhYrKOMF7azZ6ZBkWs115uv5RfOk+jYAWLdKkZGGGXg==}
'@redocly/openapi-core@1.34.6': '@redocly/openapi-core@1.34.6':
resolution: {integrity: sha512-2+O+riuIUgVSuLl3Lyh5AplWZyVMNuG2F98/o6NrutKJfW4/GTZdPpZlIphS0HGgcOHgmWcCSHj+dWFlZaGSHw==} resolution: {integrity: sha512-2+O+riuIUgVSuLl3Lyh5AplWZyVMNuG2F98/o6NrutKJfW4/GTZdPpZlIphS0HGgcOHgmWcCSHj+dWFlZaGSHw==}
engines: {node: '>=18.17.0', npm: '>=9.5.0'} engines: {node: '>=18.17.0', npm: '>=9.5.0'}
'@redocly/openapi-core@2.13.0': '@redocly/openapi-core@2.14.0':
resolution: {integrity: sha512-xQ4z5tsrXbIa4EfCniHv1zZ4etmQ0lpRcxy750iOamV5A/+19mgbPtD+UQCoT18puDAjcnOgpX7x2ha72qKrnw==} resolution: {integrity: sha512-GeSIesfbh5TdqoWBu7wPzCAGUvKfLBnN60rKnhZCyxrs6M0tn7GYhtET+P5HsNlXmvW4vFNDBlLDoATW/dKrrQ==}
engines: {node: '>=22.12.0 || >=20.19.0 <21.0.0', npm: '>=10'} engines: {node: '>=22.12.0 || >=20.19.0 <21.0.0', npm: '>=10'}
'@redocly/respect-core@2.13.0': '@redocly/respect-core@2.14.0':
resolution: {integrity: sha512-35OidNXWkmmsJiwgX+tFw7FaU8usZVvZ/lFBFNJga65pivEvaDlfiwKxIRTzM4iuNbc2FRvP2q30dlGAztv0tg==} resolution: {integrity: sha512-7HYB66oNUOcBjBZpK/i5xPpXIYXt09a98WX0subaAQZJinLGq8D3hbgLAp+pXZgosHNeZ0QKahOExsZ25JZSHw==}
engines: {node: '>=22.12.0 || >=20.19.0 <21.0.0', npm: '>=10'} engines: {node: '>=22.12.0 || >=20.19.0 <21.0.0', npm: '>=10'}
'@rollup/rollup-android-arm-eabi@4.53.5': '@rollup/rollup-android-arm-eabi@4.54.0':
resolution: {integrity: sha512-iDGS/h7D8t7tvZ1t6+WPK04KD0MwzLZrG0se1hzBjSi5fyxlsiggoJHwh18PCFNn7tG43OWb6pdZ6Y+rMlmyNQ==} resolution: {integrity: sha512-OywsdRHrFvCdvsewAInDKCNyR3laPA2mc9bRYJ6LBp5IyvF3fvXbbNR0bSzHlZVFtn6E0xw2oZlyjg4rKCVcng==}
cpu: [arm] cpu: [arm]
os: [android] os: [android]
'@rollup/rollup-android-arm64@4.53.5': '@rollup/rollup-android-arm64@4.54.0':
resolution: {integrity: sha512-wrSAViWvZHBMMlWk6EJhvg8/rjxzyEhEdgfMMjREHEq11EtJ6IP6yfcCH57YAEca2Oe3FNCE9DSTgU70EIGmVw==} resolution: {integrity: sha512-Skx39Uv+u7H224Af+bDgNinitlmHyQX1K/atIA32JP3JQw6hVODX5tkbi2zof/E69M1qH2UoN3Xdxgs90mmNYw==}
cpu: [arm64] cpu: [arm64]
os: [android] os: [android]
'@rollup/rollup-darwin-arm64@4.53.5': '@rollup/rollup-darwin-arm64@4.54.0':
resolution: {integrity: sha512-S87zZPBmRO6u1YXQLwpveZm4JfPpAa6oHBX7/ghSiGH3rz/KDgAu1rKdGutV+WUI6tKDMbaBJomhnT30Y2t4VQ==} resolution: {integrity: sha512-k43D4qta/+6Fq+nCDhhv9yP2HdeKeP56QrUUTW7E6PhZP1US6NDqpJj4MY0jBHlJivVJD5P8NxrjuobZBJTCRw==}
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
'@rollup/rollup-darwin-x64@4.53.5': '@rollup/rollup-darwin-x64@4.54.0':
resolution: {integrity: sha512-YTbnsAaHo6VrAczISxgpTva8EkfQus0VPEVJCEaboHtZRIb6h6j0BNxRBOwnDciFTZLDPW5r+ZBmhL/+YpTZgA==} resolution: {integrity: sha512-cOo7biqwkpawslEfox5Vs8/qj83M/aZCSSNIWpVzfU2CYHa2G3P1UN5WF01RdTHSgCkri7XOlTdtk17BezlV3A==}
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
'@rollup/rollup-freebsd-arm64@4.53.5': '@rollup/rollup-freebsd-arm64@4.54.0':
resolution: {integrity: sha512-1T8eY2J8rKJWzaznV7zedfdhD1BqVs1iqILhmHDq/bqCUZsrMt+j8VCTHhP0vdfbHK3e1IQ7VYx3jlKqwlf+vw==} resolution: {integrity: sha512-miSvuFkmvFbgJ1BevMa4CPCFt5MPGw094knM64W9I0giUIMMmRYcGW/JWZDriaw/k1kOBtsWh1z6nIFV1vPNtA==}
cpu: [arm64] cpu: [arm64]
os: [freebsd] os: [freebsd]
'@rollup/rollup-freebsd-x64@4.53.5': '@rollup/rollup-freebsd-x64@4.54.0':
resolution: {integrity: sha512-sHTiuXyBJApxRn+VFMaw1U+Qsz4kcNlxQ742snICYPrY+DDL8/ZbaC4DVIB7vgZmp3jiDaKA0WpBdP0aqPJoBQ==} resolution: {integrity: sha512-KGXIs55+b/ZfZsq9aR026tmr/+7tq6VG6MsnrvF4H8VhwflTIuYh+LFUlIsRdQSgrgmtM3fVATzEAj4hBQlaqQ==}
cpu: [x64] cpu: [x64]
os: [freebsd] os: [freebsd]
'@rollup/rollup-linux-arm-gnueabihf@4.53.5': '@rollup/rollup-linux-arm-gnueabihf@4.54.0':
resolution: {integrity: sha512-dV3T9MyAf0w8zPVLVBptVlzaXxka6xg1f16VAQmjg+4KMSTWDvhimI/Y6mp8oHwNrmnmVl9XxJ/w/mO4uIQONA==} resolution: {integrity: sha512-EHMUcDwhtdRGlXZsGSIuXSYwD5kOT9NVnx9sqzYiwAc91wfYOE1g1djOEDseZJKKqtHAHGwnGPQu3kytmfaXLQ==}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
'@rollup/rollup-linux-arm-musleabihf@4.53.5': '@rollup/rollup-linux-arm-musleabihf@4.54.0':
resolution: {integrity: sha512-wIGYC1x/hyjP+KAu9+ewDI+fi5XSNiUi9Bvg6KGAh2TsNMA3tSEs+Sh6jJ/r4BV/bx/CyWu2ue9kDnIdRyafcQ==} resolution: {integrity: sha512-+pBrqEjaakN2ySv5RVrj/qLytYhPKEUwk+e3SFU5jTLHIcAtqh2rLrd/OkbNuHJpsBgxsD8ccJt5ga/SeG0JmA==}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
'@rollup/rollup-linux-arm64-gnu@4.53.5': '@rollup/rollup-linux-arm64-gnu@4.54.0':
resolution: {integrity: sha512-Y+qVA0D9d0y2FRNiG9oM3Hut/DgODZbU9I8pLLPwAsU0tUKZ49cyV1tzmB/qRbSzGvY8lpgGkJuMyuhH7Ma+Vg==} resolution: {integrity: sha512-NSqc7rE9wuUaRBsBp5ckQ5CVz5aIRKCwsoa6WMF7G01sX3/qHUw/z4pv+D+ahL1EIKy6Enpcnz1RY8pf7bjwng==}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@rollup/rollup-linux-arm64-musl@4.53.5': '@rollup/rollup-linux-arm64-musl@4.54.0':
resolution: {integrity: sha512-juaC4bEgJsyFVfqhtGLz8mbopaWD+WeSOYr5E16y+1of6KQjc0BpwZLuxkClqY1i8sco+MdyoXPNiCkQou09+g==} resolution: {integrity: sha512-gr5vDbg3Bakga5kbdpqx81m2n9IX8M6gIMlQQIXiLTNeQW6CucvuInJ91EuCJ/JYvc+rcLLsDFcfAD1K7fMofg==}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@rollup/rollup-linux-loong64-gnu@4.53.5': '@rollup/rollup-linux-loong64-gnu@4.54.0':
resolution: {integrity: sha512-rIEC0hZ17A42iXtHX+EPJVL/CakHo+tT7W0pbzdAGuWOt2jxDFh7A/lRhsNHBcqL4T36+UiAgwO8pbmn3dE8wA==} resolution: {integrity: sha512-gsrtB1NA3ZYj2vq0Rzkylo9ylCtW/PhpLEivlgWe0bpgtX5+9j9EZa0wtZiCjgu6zmSeZWyI/e2YRX1URozpIw==}
cpu: [loong64] cpu: [loong64]
os: [linux] os: [linux]
'@rollup/rollup-linux-ppc64-gnu@4.53.5': '@rollup/rollup-linux-ppc64-gnu@4.54.0':
resolution: {integrity: sha512-T7l409NhUE552RcAOcmJHj3xyZ2h7vMWzcwQI0hvn5tqHh3oSoclf9WgTl+0QqffWFG8MEVZZP1/OBglKZx52Q==} resolution: {integrity: sha512-y3qNOfTBStmFNq+t4s7Tmc9hW2ENtPg8FeUD/VShI7rKxNW7O4fFeaYbMsd3tpFlIg1Q8IapFgy7Q9i2BqeBvA==}
cpu: [ppc64] cpu: [ppc64]
os: [linux] os: [linux]
'@rollup/rollup-linux-riscv64-gnu@4.53.5': '@rollup/rollup-linux-riscv64-gnu@4.54.0':
resolution: {integrity: sha512-7OK5/GhxbnrMcxIFoYfhV/TkknarkYC1hqUw1wU2xUN3TVRLNT5FmBv4KkheSG2xZ6IEbRAhTooTV2+R5Tk0lQ==} resolution: {integrity: sha512-89sepv7h2lIVPsFma8iwmccN7Yjjtgz0Rj/Ou6fEqg3HDhpCa+Et+YSufy27i6b0Wav69Qv4WBNl3Rs6pwhebQ==}
cpu: [riscv64] cpu: [riscv64]
os: [linux] os: [linux]
'@rollup/rollup-linux-riscv64-musl@4.53.5': '@rollup/rollup-linux-riscv64-musl@4.54.0':
resolution: {integrity: sha512-GwuDBE/PsXaTa76lO5eLJTyr2k8QkPipAyOrs4V/KJufHCZBJ495VCGJol35grx9xryk4V+2zd3Ri+3v7NPh+w==} resolution: {integrity: sha512-ZcU77ieh0M2Q8Ur7D5X7KvK+UxbXeDHwiOt/CPSBTI1fBmeDMivW0dPkdqkT4rOgDjrDDBUed9x4EgraIKoR2A==}
cpu: [riscv64] cpu: [riscv64]
os: [linux] os: [linux]
'@rollup/rollup-linux-s390x-gnu@4.53.5': '@rollup/rollup-linux-s390x-gnu@4.54.0':
resolution: {integrity: sha512-IAE1Ziyr1qNfnmiQLHBURAD+eh/zH1pIeJjeShleII7Vj8kyEm2PF77o+lf3WTHDpNJcu4IXJxNO0Zluro8bOw==} resolution: {integrity: sha512-2AdWy5RdDF5+4YfG/YesGDDtbyJlC9LHmL6rZw6FurBJ5n4vFGupsOBGfwMRjBYH7qRQowT8D/U4LoSvVwOhSQ==}
cpu: [s390x] cpu: [s390x]
os: [linux] os: [linux]
'@rollup/rollup-linux-x64-gnu@4.53.5': '@rollup/rollup-linux-x64-gnu@4.54.0':
resolution: {integrity: sha512-Pg6E+oP7GvZ4XwgRJBuSXZjcqpIW3yCBhK4BcsANvb47qMvAbCjR6E+1a/U2WXz1JJxp9/4Dno3/iSJLcm5auw==} resolution: {integrity: sha512-WGt5J8Ij/rvyqpFexxk3ffKqqbLf9AqrTBbWDk7ApGUzaIs6V+s2s84kAxklFwmMF/vBNGrVdYgbblCOFFezMQ==}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@rollup/rollup-linux-x64-musl@4.53.5': '@rollup/rollup-linux-x64-musl@4.54.0':
resolution: {integrity: sha512-txGtluxDKTxaMDzUduGP0wdfng24y1rygUMnmlUJ88fzCCULCLn7oE5kb2+tRB+MWq1QDZT6ObT5RrR8HFRKqg==} resolution: {integrity: sha512-JzQmb38ATzHjxlPHuTH6tE7ojnMKM2kYNzt44LO/jJi8BpceEC8QuXYA908n8r3CNuG/B3BV8VR3Hi1rYtmPiw==}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@rollup/rollup-openharmony-arm64@4.53.5': '@rollup/rollup-openharmony-arm64@4.54.0':
resolution: {integrity: sha512-3DFiLPnTxiOQV993fMc+KO8zXHTcIjgaInrqlG8zDp1TlhYl6WgrOHuJkJQ6M8zHEcntSJsUp1XFZSY8C1DYbg==} resolution: {integrity: sha512-huT3fd0iC7jigGh7n3q/+lfPcXxBi+om/Rs3yiFxjvSxbSB6aohDFXbWvlspaqjeOh+hx7DDHS+5Es5qRkWkZg==}
cpu: [arm64] cpu: [arm64]
os: [openharmony] os: [openharmony]
'@rollup/rollup-win32-arm64-msvc@4.53.5': '@rollup/rollup-win32-arm64-msvc@4.54.0':
resolution: {integrity: sha512-nggc/wPpNTgjGg75hu+Q/3i32R00Lq1B6N1DO7MCU340MRKL3WZJMjA9U4K4gzy3dkZPXm9E1Nc81FItBVGRlA==} resolution: {integrity: sha512-c2V0W1bsKIKfbLMBu/WGBz6Yci8nJ/ZJdheE0EwB73N3MvHYKiKGs3mVilX4Gs70eGeDaMqEob25Tw2Gb9Nqyw==}
cpu: [arm64] cpu: [arm64]
os: [win32] os: [win32]
'@rollup/rollup-win32-ia32-msvc@4.53.5': '@rollup/rollup-win32-ia32-msvc@4.54.0':
resolution: {integrity: sha512-U/54pTbdQpPLBdEzCT6NBCFAfSZMvmjr0twhnD9f4EIvlm9wy3jjQ38yQj1AGznrNO65EWQMgm/QUjuIVrYF9w==} resolution: {integrity: sha512-woEHgqQqDCkAzrDhvDipnSirm5vxUXtSKDYTVpZG3nUdW/VVB5VdCYA2iReSj/u3yCZzXID4kuKG7OynPnB3WQ==}
cpu: [ia32] cpu: [ia32]
os: [win32] os: [win32]
'@rollup/rollup-win32-x64-gnu@4.53.5': '@rollup/rollup-win32-x64-gnu@4.54.0':
resolution: {integrity: sha512-2NqKgZSuLH9SXBBV2dWNRCZmocgSOx8OJSdpRaEcRlIfX8YrKxUT6z0F1NpvDVhOsl190UFTRh2F2WDWWCYp3A==} resolution: {integrity: sha512-dzAc53LOuFvHwbCEOS0rPbXp6SIhAf2txMP5p6mGyOXXw5mWY8NGGbPMPrs4P1WItkfApDathBj/NzMLUZ9rtQ==}
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
'@rollup/rollup-win32-x64-msvc@4.53.5': '@rollup/rollup-win32-x64-msvc@4.54.0':
resolution: {integrity: sha512-JRpZUhCfhZ4keB5v0fe02gQJy05GqboPOaxvjugW04RLSYYoB/9t2lx2u/tMs/Na/1NXfY8QYjgRljRpN+MjTQ==} resolution: {integrity: sha512-hYT5d3YNdSh3mbCU1gwQyPgQd3T2ne0A3KG8KSBdav5TiBg6eInVmV+TeR5uHufiIgSFg0XsOWGW5/RhNcSvPg==}
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
@ -2237,8 +2237,8 @@ packages:
peerDependencies: peerDependencies:
rollup: ^4.0.0 rollup: ^4.0.0
rollup@4.53.5: rollup@4.54.0:
resolution: {integrity: sha512-iTNAbFSlRpcHeeWu73ywU/8KuU/LZmNCSxp6fjQkJBD3ivUb8tpDrXhIxEzA05HlYMEwmtaUnb3RP+YNv162OQ==} resolution: {integrity: sha512-3nk8Y3a9Ea8szgKhinMlGMhGMw89mqule3KWczxhIzqudyHdCIOHw8WJlj/r329fACjKLEh13ZSk7oE22kyeIw==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'} engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true hasBin: true
@ -2499,8 +2499,8 @@ packages:
resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==}
engines: {node: '>= 0.6'} engines: {node: '>= 0.6'}
typebox@1.0.64: typebox@1.0.65:
resolution: {integrity: sha512-U6quDhQMzQRzBX8jvlE5mZlUnlMRTaZrG/QMAhOYVJ0D0rhq1iOXBQVSzBX0JgAh55jXQ7fWIv24i+lVimXcDw==} resolution: {integrity: sha512-3WaZ4QmfAxmelhi0dwusYDoZ+DLDoVrsc3aORzgtk1I8JfIf4wn+F8i1TtrnU2jJKM/hZgjJGfzXrwS4B31zZw==}
typescript-eslint@8.50.0: typescript-eslint@8.50.0:
resolution: {integrity: sha512-Q1/6yNUmCpH94fbgMUMg2/BSAr/6U7GBk61kZTv1/asghQOWOjTlp9K8mixS5NcJmm2creY+UFfGeW/+OcA64A==} resolution: {integrity: sha512-Q1/6yNUmCpH94fbgMUMg2/BSAr/6U7GBk61kZTv1/asghQOWOjTlp9K8mixS5NcJmm2creY+UFfGeW/+OcA64A==}
@ -3126,14 +3126,14 @@ snapshots:
json-schema-traverse: 1.0.0 json-schema-traverse: 1.0.0
require-from-string: 2.0.2 require-from-string: 2.0.2
'@redocly/cli@2.13.0(@opentelemetry/api@1.9.0)(ajv@8.17.1)(core-js@3.47.0)': '@redocly/cli@2.14.0(@opentelemetry/api@1.9.0)(ajv@8.17.1)(core-js@3.47.0)':
dependencies: dependencies:
'@opentelemetry/exporter-trace-otlp-http': 0.202.0(@opentelemetry/api@1.9.0) '@opentelemetry/exporter-trace-otlp-http': 0.202.0(@opentelemetry/api@1.9.0)
'@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0)
'@opentelemetry/sdk-trace-node': 2.0.1(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-node': 2.0.1(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.34.0 '@opentelemetry/semantic-conventions': 1.34.0
'@redocly/openapi-core': 2.13.0(ajv@8.17.1) '@redocly/openapi-core': 2.14.0(ajv@8.17.1)
'@redocly/respect-core': 2.13.0(ajv@8.17.1) '@redocly/respect-core': 2.14.0(ajv@8.17.1)
abort-controller: 3.0.0 abort-controller: 3.0.0
chokidar: 3.6.0 chokidar: 3.6.0
colorette: 1.4.0 colorette: 1.4.0
@ -3167,7 +3167,7 @@ snapshots:
'@redocly/config@0.22.2': {} '@redocly/config@0.22.2': {}
'@redocly/config@0.41.0': '@redocly/config@0.41.1':
dependencies: dependencies:
json-schema-to-ts: 2.7.2 json-schema-to-ts: 2.7.2
@ -3185,10 +3185,10 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@redocly/openapi-core@2.13.0(ajv@8.17.1)': '@redocly/openapi-core@2.14.0(ajv@8.17.1)':
dependencies: dependencies:
'@redocly/ajv': 8.17.1 '@redocly/ajv': 8.17.1
'@redocly/config': 0.41.0 '@redocly/config': 0.41.1
ajv-formats: 3.0.1(ajv@8.17.1) ajv-formats: 3.0.1(ajv@8.17.1)
colorette: 1.4.0 colorette: 1.4.0
js-levenshtein: 1.1.6 js-levenshtein: 1.1.6
@ -3199,12 +3199,12 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- ajv - ajv
'@redocly/respect-core@2.13.0(ajv@8.17.1)': '@redocly/respect-core@2.14.0(ajv@8.17.1)':
dependencies: dependencies:
'@faker-js/faker': 7.6.0 '@faker-js/faker': 7.6.0
'@noble/hashes': 1.8.0 '@noble/hashes': 1.8.0
'@redocly/ajv': 8.17.1 '@redocly/ajv': 8.17.1
'@redocly/openapi-core': 2.13.0(ajv@8.17.1) '@redocly/openapi-core': 2.14.0(ajv@8.17.1)
better-ajv-errors: 1.2.0(ajv@8.17.1) better-ajv-errors: 1.2.0(ajv@8.17.1)
colorette: 2.0.20 colorette: 2.0.20
json-pointer: 0.6.2 json-pointer: 0.6.2
@ -3214,70 +3214,70 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- ajv - ajv
'@rollup/rollup-android-arm-eabi@4.53.5': '@rollup/rollup-android-arm-eabi@4.54.0':
optional: true optional: true
'@rollup/rollup-android-arm64@4.53.5': '@rollup/rollup-android-arm64@4.54.0':
optional: true optional: true
'@rollup/rollup-darwin-arm64@4.53.5': '@rollup/rollup-darwin-arm64@4.54.0':
optional: true optional: true
'@rollup/rollup-darwin-x64@4.53.5': '@rollup/rollup-darwin-x64@4.54.0':
optional: true optional: true
'@rollup/rollup-freebsd-arm64@4.53.5': '@rollup/rollup-freebsd-arm64@4.54.0':
optional: true optional: true
'@rollup/rollup-freebsd-x64@4.53.5': '@rollup/rollup-freebsd-x64@4.54.0':
optional: true optional: true
'@rollup/rollup-linux-arm-gnueabihf@4.53.5': '@rollup/rollup-linux-arm-gnueabihf@4.54.0':
optional: true optional: true
'@rollup/rollup-linux-arm-musleabihf@4.53.5': '@rollup/rollup-linux-arm-musleabihf@4.54.0':
optional: true optional: true
'@rollup/rollup-linux-arm64-gnu@4.53.5': '@rollup/rollup-linux-arm64-gnu@4.54.0':
optional: true optional: true
'@rollup/rollup-linux-arm64-musl@4.53.5': '@rollup/rollup-linux-arm64-musl@4.54.0':
optional: true optional: true
'@rollup/rollup-linux-loong64-gnu@4.53.5': '@rollup/rollup-linux-loong64-gnu@4.54.0':
optional: true optional: true
'@rollup/rollup-linux-ppc64-gnu@4.53.5': '@rollup/rollup-linux-ppc64-gnu@4.54.0':
optional: true optional: true
'@rollup/rollup-linux-riscv64-gnu@4.53.5': '@rollup/rollup-linux-riscv64-gnu@4.54.0':
optional: true optional: true
'@rollup/rollup-linux-riscv64-musl@4.53.5': '@rollup/rollup-linux-riscv64-musl@4.54.0':
optional: true optional: true
'@rollup/rollup-linux-s390x-gnu@4.53.5': '@rollup/rollup-linux-s390x-gnu@4.54.0':
optional: true optional: true
'@rollup/rollup-linux-x64-gnu@4.53.5': '@rollup/rollup-linux-x64-gnu@4.54.0':
optional: true optional: true
'@rollup/rollup-linux-x64-musl@4.53.5': '@rollup/rollup-linux-x64-musl@4.54.0':
optional: true optional: true
'@rollup/rollup-openharmony-arm64@4.53.5': '@rollup/rollup-openharmony-arm64@4.54.0':
optional: true optional: true
'@rollup/rollup-win32-arm64-msvc@4.53.5': '@rollup/rollup-win32-arm64-msvc@4.54.0':
optional: true optional: true
'@rollup/rollup-win32-ia32-msvc@4.53.5': '@rollup/rollup-win32-ia32-msvc@4.54.0':
optional: true optional: true
'@rollup/rollup-win32-x64-gnu@4.53.5': '@rollup/rollup-win32-x64-gnu@4.54.0':
optional: true optional: true
'@rollup/rollup-win32-x64-msvc@4.53.5': '@rollup/rollup-win32-x64-msvc@4.54.0':
optional: true optional: true
'@socket.io/component-emitter@3.1.2': {} '@socket.io/component-emitter@3.1.2': {}
@ -4729,36 +4729,36 @@ snapshots:
rfdc@1.4.1: {} rfdc@1.4.1: {}
rollup-plugin-node-externals@8.1.2(rollup@4.53.5): rollup-plugin-node-externals@8.1.2(rollup@4.54.0):
dependencies: dependencies:
rollup: 4.53.5 rollup: 4.54.0
rollup@4.53.5: rollup@4.54.0:
dependencies: dependencies:
'@types/estree': 1.0.8 '@types/estree': 1.0.8
optionalDependencies: optionalDependencies:
'@rollup/rollup-android-arm-eabi': 4.53.5 '@rollup/rollup-android-arm-eabi': 4.54.0
'@rollup/rollup-android-arm64': 4.53.5 '@rollup/rollup-android-arm64': 4.54.0
'@rollup/rollup-darwin-arm64': 4.53.5 '@rollup/rollup-darwin-arm64': 4.54.0
'@rollup/rollup-darwin-x64': 4.53.5 '@rollup/rollup-darwin-x64': 4.54.0
'@rollup/rollup-freebsd-arm64': 4.53.5 '@rollup/rollup-freebsd-arm64': 4.54.0
'@rollup/rollup-freebsd-x64': 4.53.5 '@rollup/rollup-freebsd-x64': 4.54.0
'@rollup/rollup-linux-arm-gnueabihf': 4.53.5 '@rollup/rollup-linux-arm-gnueabihf': 4.54.0
'@rollup/rollup-linux-arm-musleabihf': 4.53.5 '@rollup/rollup-linux-arm-musleabihf': 4.54.0
'@rollup/rollup-linux-arm64-gnu': 4.53.5 '@rollup/rollup-linux-arm64-gnu': 4.54.0
'@rollup/rollup-linux-arm64-musl': 4.53.5 '@rollup/rollup-linux-arm64-musl': 4.54.0
'@rollup/rollup-linux-loong64-gnu': 4.53.5 '@rollup/rollup-linux-loong64-gnu': 4.54.0
'@rollup/rollup-linux-ppc64-gnu': 4.53.5 '@rollup/rollup-linux-ppc64-gnu': 4.54.0
'@rollup/rollup-linux-riscv64-gnu': 4.53.5 '@rollup/rollup-linux-riscv64-gnu': 4.54.0
'@rollup/rollup-linux-riscv64-musl': 4.53.5 '@rollup/rollup-linux-riscv64-musl': 4.54.0
'@rollup/rollup-linux-s390x-gnu': 4.53.5 '@rollup/rollup-linux-s390x-gnu': 4.54.0
'@rollup/rollup-linux-x64-gnu': 4.53.5 '@rollup/rollup-linux-x64-gnu': 4.54.0
'@rollup/rollup-linux-x64-musl': 4.53.5 '@rollup/rollup-linux-x64-musl': 4.54.0
'@rollup/rollup-openharmony-arm64': 4.53.5 '@rollup/rollup-openharmony-arm64': 4.54.0
'@rollup/rollup-win32-arm64-msvc': 4.53.5 '@rollup/rollup-win32-arm64-msvc': 4.54.0
'@rollup/rollup-win32-ia32-msvc': 4.53.5 '@rollup/rollup-win32-ia32-msvc': 4.54.0
'@rollup/rollup-win32-x64-gnu': 4.53.5 '@rollup/rollup-win32-x64-gnu': 4.54.0
'@rollup/rollup-win32-x64-msvc': 4.53.5 '@rollup/rollup-win32-x64-msvc': 4.54.0
fsevents: 2.3.3 fsevents: 2.3.3
safe-buffer@5.2.1: {} safe-buffer@5.2.1: {}
@ -5052,7 +5052,7 @@ snapshots:
media-typer: 1.1.0 media-typer: 1.1.0
mime-types: 3.0.2 mime-types: 3.0.2
typebox@1.0.64: {} typebox@1.0.65: {}
typescript-eslint@8.50.0(eslint@9.39.2)(typescript@5.9.3): typescript-eslint@8.50.0(eslint@9.39.2)(typescript@5.9.3):
dependencies: dependencies:
@ -5111,7 +5111,7 @@ snapshots:
fdir: 6.5.0(picomatch@4.0.3) fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3 picomatch: 4.0.3
postcss: 8.5.6 postcss: 8.5.6
rollup: 4.53.5 rollup: 4.54.0
tinyglobby: 0.2.15 tinyglobby: 0.2.15
optionalDependencies: optionalDependencies:
'@types/node': 22.19.3 '@types/node': 22.19.3
@ -5124,7 +5124,7 @@ snapshots:
fdir: 6.5.0(picomatch@4.0.3) fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3 picomatch: 4.0.3
postcss: 8.5.6 postcss: 8.5.6
rollup: 4.53.5 rollup: 4.54.0
tinyglobby: 0.2.15 tinyglobby: 0.2.15
optionalDependencies: optionalDependencies:
'@types/node': 25.0.3 '@types/node': 25.0.3

View file

@ -0,0 +1,7 @@
#!/bin/sh
set -e
# do anything here
# run the CMD [ ... ] from the dockerfile
exec "$@"

View file

@ -6,9 +6,8 @@
"scripts": { "scripts": {
"start": "npm run build && node dist/run.js", "start": "npm run build && node dist/run.js",
"build": "vite build", "build": "vite build",
"build:prod": "vite build --outDir=/dist --minify=true --sourcemap=false", "build:prod": "vite build --outDir=/dist --minify=true --sourcemap=false && mv /dist/run.js /dist/run.cjs",
"REMOVEME-build:openapi": "VITE_ENTRYPOINT=src/openapi.ts vite build && node dist/openapi.cjs >openapi.json", "build:openapi": "VITE_ENTRYPOINT=src/openapi.ts vite build && mv dist/openapi.js dist/openapi.cjs && node dist/openapi.cjs >openapi.json"
"test": "echo \"Error: no test specified\" && exit 1"
}, },
"keywords": [], "keywords": [],
"author": "", "author": "",
@ -24,7 +23,7 @@
"fastify": "^5.6.2", "fastify": "^5.6.2",
"fastify-plugin": "^5.1.0", "fastify-plugin": "^5.1.0",
"socket.io": "^4.8.1", "socket.io": "^4.8.1",
"typebox": "^1.0.64" "typebox": "^1.0.65"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^22.19.3", "@types/node": "^22.19.3",

View file

@ -0,0 +1,21 @@
import f, { FastifyPluginAsync } from 'fastify';
import * as swagger from '@shared/swagger';
import * as auth from '@shared/auth';
declare const __SERVICE_NAME: string;
// @ts-expect-error: import.meta.glob is a vite thing. Typescript doesn't know this...
const routes = import.meta.glob('./routes/**/*.ts', { eager: true });
async function start() {
const fastify = f({ logger: false });
await fastify.register(auth.authPlugin, { onlySchema: true });
await fastify.register(swagger.useSwagger, { service: __SERVICE_NAME });
for (const route of Object.values(routes)) {
await fastify.register(route as FastifyPluginAsync, {});
}
await fastify.ready();
console.log(JSON.stringify(fastify.swagger(), undefined, 4));
}
start();

View file

@ -6,13 +6,13 @@ import app from './app';
const start = async () => { const start = async () => {
const envToLogger = { const envToLogger = {
development: { development: {
transport: { // transport: {
target: 'pino', // target: 'pino',
options: { // options: {
translateTime: 'HH:MM:ss Z', // translateTime: 'HH:MM:ss Z',
ignore: 'pid,hostname', // ignore: 'pid,hostname',
}, // },
}, // },
}, },
production: true, production: true,
test: false, test: false,

View file

@ -0,0 +1,54 @@
import { defineConfig } from 'vite';
import tsconfigPaths from 'vite-tsconfig-paths';
import nodeExternals from 'rollup-plugin-node-externals';
import path from 'node:path';
import fs from 'node:fs';
function collectDeps(...pkgJsonPaths) {
const allDeps = new Set();
for (const pkgPath of pkgJsonPaths) {
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
for (const dep of Object.keys(pkg.dependencies || {})) {
allDeps.add(dep);
}
for (const peer of Object.keys(pkg.peerDependencies || {})) {
allDeps.add(peer);
}
}
return Array.from(allDeps);
}
const externals = collectDeps(
'./package.json',
'../@shared/package.json',
);
export default defineConfig({
root: __dirname,
define: {
__SERVICE_NAME: '"tic-tac-toe"',
},
// service root
plugins: [tsconfigPaths(), nodeExternals()],
build: {
ssr: true,
outDir: 'dist',
emptyOutDir: true,
lib: {
entry: path.resolve(__dirname, process.env.VITE_ENTRYPOINT ?? 'src/run.ts'),
// adjust main entry
formats: ['cjs'],
// CommonJS for Node.js
fileName: (format, entryName) => `${entryName}.cjs`,
},
rollupOptions: {
external: externals,
},
target: 'node22',
// or whatever Node version you use
sourcemap: true,
minify: false,
// for easier debugging
},
});

View file

@ -26,7 +26,7 @@
"fastify": "^5.6.2", "fastify": "^5.6.2",
"fastify-cli": "^7.4.1", "fastify-cli": "^7.4.1",
"fastify-plugin": "^5.1.0", "fastify-plugin": "^5.1.0",
"typebox": "^1.0.64" "typebox": "^1.0.65"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^22.19.3", "@types/node": "^22.19.3",