diff --git a/Makefile b/Makefile index ba00eaec..3d4d0058 100644 --- a/Makefile +++ b/Makefile @@ -1,40 +1,24 @@ DOCKERCOMPOSEPATH=./srcs/docker-compose.yml #dev allow hot reload. -dev: +up: + @bash ./make_env.sh docker compose -f ${DOCKERCOMPOSEPATH} up -d --build @make start @docker ps - -#prod only the needed files ares presents inside the container -prod: - docker compose -f ${DOCKERCOMPOSEPATH} up -d --build prod - @make start_prod - @docker ps - start: docker compose -f ${DOCKERCOMPOSEPATH} start - docker logs --follow srcs-backend_dev-1 + docker logs --follow nestjs -start_dev: - docker compose -f ${DOCKERCOMPOSEPATH} start dev - docker logs --follow srcs-backend_dev-1 +all : up -start_prod: - docker compose -f ${DOCKERCOMPOSEPATH} start prod - -restart:stop - @make up +re: down up down: docker compose -f ${DOCKERCOMPOSEPATH} -v down destroy: - # rm -rf ./srcs/requirements/nestjs/api_back/node_modules/ - # rm -rf ./srcs/requirements/nestjs/api_back/dist - # rm -rf ./srcs/requirements/svelte/api_front/node_modules/ - # rm -rf ./srcs/requirements/svelte/api_front/public/build docker compose -f ${DOCKERCOMPOSEPATH} down -v --rmi all --remove-orphans docker ps -aq | xargs --no-run-if-empty docker rm -f docker images -aq | xargs --no-run-if-empty docker rmi -f diff --git a/README.md b/README.md index 6d06f1fb..fa49b455 100644 --- a/README.md +++ b/README.md @@ -15,14 +15,14 @@ - [x] Utilisateur : faire la base pour un utilisateur - [x] Utilisateur : faire le système de requêtes amis -- [ ] Utilisateur : mettre en place le système de session (voire de statut ?) -- [ ] Utilisateur : mettre en place le système d'avatar -- [ ] Utilisateur : mettre en place la double authentification -- [ ] Utilisateur : mettre en place le système d'Oauth -- [ ] Utilisateur : mettre en place la hashage de mot de passe (avec Oauth) -- [ ] Utilisateur : mettre en place le système de statut -- [ ] Utilisateur : mettre en place le système de stats -- [ ] Utilisateur : mettre en place l'historique des matches +- [x] Utilisateur : mettre en place le système de session (voire de statut ?) +- [x] Utilisateur : mettre en place le système d'avatar +- [x] Utilisateur : mettre en place la double authentification +- [x] Utilisateur : mettre en place le système d'Oauth +- [x] Utilisateur : mettre en place la hashage de mot de passe (avec Oauth) +- [x] Utilisateur : mettre en place le système de statut +- [x] Utilisateur : mettre en place le système de stats +- [x] Utilisateur : mettre en place l'historique des matches ### TODO List : Docker édition. diff --git a/make_env.sh b/make_env.sh new file mode 100644 index 00000000..55da918f --- /dev/null +++ b/make_env.sh @@ -0,0 +1,86 @@ +#! /usr/bin/env bash + +# This script is used to create a new environment for the project. + +# Create a new environment for docker +ENV_FILE_DOCKER=./srcs/.env +ENV_FILE_NESTJS=./srcs/requirements/nestjs/api_back/.env + +# Create a new environment for docker +if [ -f "$ENV_FILE_DOCKER" ] && [ -f "$ENV_FILE_NESTJS" ]; then + echo "The file $ENV_FILE_DOCKER and $ENV_FILE_NESTJS already exists. Do you want to overwrite them ? (y/n)" + read -p "Enter your choice : " OVERWRITE + if [ "$OVERWRITE" = "y" ]; then + rm "$ENV_FILE_DOCKER" && rm "$ENV_FILE_NESTJS" + else + echo "The file $ENV_FILE_DOCKER and $ENV_FILE_NESTJS will not be overwritten. The script will exit." + exit 0 + fi +fi + +echo "Creating a new environment for docker" +read -p "Enter the env configuration for nestjs : \"1\" for development OR \"2\" for production : " NODE_ENV + +if [ "$NODE_ENV" = "1" ]; then + echo "NODE_ENV=development" > "$ENV_FILE_DOCKER" +elif [ "$NODE_ENV" = "2" ]; then + echo "NODE_ENV=production" > "$ENV_FILE_DOCKER" +else + echo "You entered a wrong value. The default value will be used (development)." + echo "NODE_ENV=development" > "$ENV_FILE_DOCKER" +fi +read -p "Enter the name of the host like \"localhost\" : " PROJECT_HOST +echo "WEBSITE_HOST=$PROJECT_HOST" >> "$ENV_FILE_DOCKER" +echo "WEBSITE_PORT=8080" >> "$ENV_FILE_DOCKER" +echo "POSTGRES_USER=postgres" >> "$ENV_FILE_DOCKER" +echo "POSTGRES_PASSWORD=$(openssl rand -base64 32)" >> "$ENV_FILE_DOCKER" +echo "POSTGRES_DB=transcendance_db" >> "$ENV_FILE_DOCKER" +echo "POSTGRES_HOST=postgresql" >> "$ENV_FILE_DOCKER" +echo "POSTGRES_PORT=5432" >> "$ENV_FILE_DOCKER" +echo "REDIS_HOST=redis" >> "$ENV_FILE_DOCKER" +echo "REDIS_PORT=6379" >> "$ENV_FILE_DOCKER" +echo "REDIS_PASSWORD=$(openssl rand -base64 32)" >> "$ENV_FILE_DOCKER" + +# Create a new environment for nestjs +echo "Creating a new environment for nestjs" + +if [ "$NODE_ENV" = "1" ]; then + echo "NODE_ENV=development" > "$ENV_FILE_NESTJS" +elif [ "$NODE_ENV" = "2" ]; then + echo "NODE_ENV=production" > "$ENV_FILE_NESTJS" +else + echo "NODE_ENV=development" > "$ENV_FILE_NESTJS" +fi + + +echo "WEBSITE_HOST=$PROJECT_HOST" >> "$ENV_FILE_NESTJS" +echo "WEBSITE_PORT=8080" >> "$ENV_FILE_NESTJS" +echo "POSTGRES_USER=postgres" >> "$ENV_FILE_NESTJS" +echo "POSTGRES_PASSWORD=$POSTGRES_PASSSWORD" >> "$ENV_FILE_NESTJS" +echo "POSTGRES_DB=transcendance_db" >> "$ENV_FILE_NESTJS" +echo "POSTGRES_HOST=postgresql" >> "$ENV_FILE_NESTJS" +echo "POSTGRES_PORT=5432" >> "$ENV_FILE_NESTJS" + +echo "In the next steps, we'll need to enter the client secret and client id of the 42 api" + +read -p "Enter the client id of the 42 api : " CLIENT_ID +echo "FORTYTWO_CLIENT_ID=$CLIENT_ID" >> "$ENV_FILE_NESTJS" + + +read -p "Enter the client secret of the 42 api : " CLIENT_SECRET +echo "FORTYTWO_CLIENT_SECRET=$CLIENT_SECRET" >> "$ENV_FILE_NESTJS" +echo "FORTYTWO_CALLBACK_URL=http://$PROJECT_HOST:8080/api/v2/auth/redirect" >> "$ENV_FILE_NESTJS" + +echo "COOKIE_SECRET=$(openssl rand -base64 32)" >> "$ENV_FILE_NESTJS" + +echo "PORT=3000" >> "$ENV_FILE_NESTJS" + +echo "REDIS_HOST=redis" >> "$ENV_FILE_DOCKER" +echo "REDIS_PORT=6379" >> "$ENV_FILE_DOCKER" +echo "REDIS_PASSWORD=$REDIS_PASSWORD" >> "$ENV_FILE_DOCKER" + +echo "TWO_FACTOR_AUTHENTICATION_APP_NAME=Transcendance" >> "$ENV_FILE_NESTJS" + +echo "TICKET_FOR_PLAYING_GAME_SECRET=$(openssl rand -base64 32)" >> "$ENV_FILE_NESTJS" + +echo "The environment has been created successfully. You can now wait for the docker to build the project." diff --git a/srcs/.env b/srcs/.env index a8fbadb8..c63e1cc3 100644 --- a/srcs/.env +++ b/srcs/.env @@ -1,9 +1,13 @@ NODE_ENV=development +WEBSITE_HOST=transcendance POSTGRES_USER=postgres -POSTGRES_PASSWORD=9pKpKEgiamxwk5P7Ggsz +POSTGRES_PASSWORD=unPCFsMxZwwCguGFMTmKgCySt6o5uX76QsKyabKS89I= POSTGRES_DB=transcendance_db POSTGRES_HOST=postgresql POSTGRES_PORT=5432 REDIS_HOST=redis REDIS_PORT=6379 -REDIS_PASSWORD=1a5e04138b91b3d683c708e4689454c2 +REDIS_PASSWORD=yiCFcBSrFv7DXVBmydtwL9unzNA2MjbB70XspflHHPc= +REDIS_HOST=redis +REDIS_PORT=6379 +REDIS_PASSWORD= diff --git a/srcs/docker-compose.yml b/srcs/docker-compose.yml index 6412f3bf..6eb0b483 100644 --- a/srcs/docker-compose.yml +++ b/srcs/docker-compose.yml @@ -1,5 +1,6 @@ services: backend_dev: + container_name: nestjs build: context: ./requirements/nestjs target: development @@ -7,6 +8,7 @@ services: volumes: - ./requirements/nestjs/api_back/src:/usr/app/src - ./requirements/nestjs/api_back/test:/usr/app/test/ + - nestjs_photos_volume:/usr/app/src/uploads/avatars env_file: - .env environment: @@ -16,7 +18,21 @@ services: - postgresql - redis + game_server: + container_name: game_server + build: + context: ./requirements/game_server + dockerfile: Dockerfile + environment: + NODE_ENV: "${NODE_ENV}" + restart: unless-stopped + ports: + - "8042:8042" + depends_on: + - backend_dev + frontend_dev: + container_name: svelte build: context: ./requirements/svelte target: development @@ -38,6 +54,7 @@ services: # t'embete pas a gerer ton propre container nginx nginx: + container_name: nginx image: nginx:alpine restart: unless-stopped volumes: @@ -53,7 +70,7 @@ services: - redis postgresql: - container_name: nestjs_postgresql + container_name: postgresql image: postgres volumes: - data_nest_postgresql:/var/lib/postgresql/data @@ -67,10 +84,8 @@ services: # Je connais pas redis, mais si t'en a besoin que a l'interieur de tes containers, je pense pas que t'as besoin d'un expose. redis: - container_name: nestjs_redis + container_name: redis image: redis:alpine - expose: - - "6379" restart: unless-stopped environment: REDIS_HOST: "${REDIS_HOST}" @@ -78,3 +93,4 @@ services: volumes: data_nest_postgresql: + nestjs_photos_volume: diff --git a/srcs/requirements/game_server/Dockerfile b/srcs/requirements/game_server/Dockerfile new file mode 100644 index 00000000..72857a78 --- /dev/null +++ b/srcs/requirements/game_server/Dockerfile @@ -0,0 +1,15 @@ +FROM node:alpine AS build + +WORKDIR /usr/app + +COPY ./game_back ./ + +RUN npm install typescript + +RUN npx tsc + +WORKDIR /usr/app/src/server + +EXPOSE 8042 + +CMD [ "node", "wsServer.js"] diff --git a/srcs/requirements/game_server/game_back/jsconfig.json b/srcs/requirements/game_server/game_back/jsconfig.json new file mode 100644 index 00000000..347bf03f --- /dev/null +++ b/srcs/requirements/game_server/game_back/jsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "module": "ESNext", + "moduleResolution": "Node", + "target": "ES2020", + "strictNullChecks": true, + "strictFunctionTypes": true + }, + "exclude": [ + "node_modules", + "**/node_modules/*" + ] +} \ No newline at end of file diff --git a/srcs/requirements/game_server/game_back/package-lock.json b/srcs/requirements/game_server/game_back/package-lock.json new file mode 100644 index 00000000..414d8d22 --- /dev/null +++ b/srcs/requirements/game_server/game_back/package-lock.json @@ -0,0 +1,121 @@ +{ + "name": "game_back", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "dependencies": { + "uuid": "^9.0.0", + "ws": "^8.10.0" + }, + "devDependencies": { + "@types/node": "^18.11.5", + "@types/uuid": "^8.3.4", + "@types/ws": "^8.5.3", + "typescript": "^4.9.4" + } + }, + "node_modules/@types/node": { + "version": "18.11.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.5.tgz", + "integrity": "sha512-3JRwhbjI+cHLAkUorhf8RnqUbFXajvzX4q6fMn5JwkgtuwfYtRQYI3u4V92vI6NJuTsbBQWWh3RZjFsuevyMGQ==", + "dev": true + }, + "node_modules/@types/uuid": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", + "dev": true + }, + "node_modules/@types/ws": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", + "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/typescript": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", + "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/ws": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.10.0.tgz", + "integrity": "sha512-+s49uSmZpvtAsd2h37vIPy1RBusaLawVe8of+GyEPsaJTCMpj/2v8NpeK1SHXjBlQ95lQTmQofOJnFiLoaN3yw==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + } + }, + "dependencies": { + "@types/node": { + "version": "18.11.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.5.tgz", + "integrity": "sha512-3JRwhbjI+cHLAkUorhf8RnqUbFXajvzX4q6fMn5JwkgtuwfYtRQYI3u4V92vI6NJuTsbBQWWh3RZjFsuevyMGQ==", + "dev": true + }, + "@types/uuid": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", + "dev": true + }, + "@types/ws": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", + "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "typescript": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", + "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", + "dev": true + }, + "uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" + }, + "ws": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.10.0.tgz", + "integrity": "sha512-+s49uSmZpvtAsd2h37vIPy1RBusaLawVe8of+GyEPsaJTCMpj/2v8NpeK1SHXjBlQ95lQTmQofOJnFiLoaN3yw==", + "requires": {} + } + } +} diff --git a/srcs/requirements/game_server/game_back/package.json b/srcs/requirements/game_server/game_back/package.json new file mode 100644 index 00000000..b9702186 --- /dev/null +++ b/srcs/requirements/game_server/game_back/package.json @@ -0,0 +1,13 @@ +{ + "type": "module", + "devDependencies": { + "@types/node": "^18.11.5", + "@types/uuid": "^8.3.4", + "@types/ws": "^8.5.3", + "typescript": "^4.9.4" + }, + "dependencies": { + "uuid": "^9.0.0", + "ws": "^8.10.0" + } +} diff --git a/srcs/requirements/game_server/game_back/src/server/class/Client.ts b/srcs/requirements/game_server/game_back/src/server/class/Client.ts new file mode 100644 index 00000000..864472ec --- /dev/null +++ b/srcs/requirements/game_server/game_back/src/server/class/Client.ts @@ -0,0 +1,36 @@ + +import { WebSocket } from "../wsServer.js"; +import { Racket } from "../../shared_js/class/Rectangle.js"; +import { GameSession } from "./GameSession.js"; +import * as ev from "../../shared_js/class/Event.js" +import * as en from "../../shared_js/enums.js" + +export class Client { + socket: WebSocket; + id: string; // same as "socket.id" + isAlive: boolean = true; + gameSession: GameSession = null; + constructor(socket: WebSocket, id: string) { + this.socket = socket; + this.id = id; + } +} + +export class ClientPlayer extends Client { + token: string; + username: string; + matchOptions: en.MatchOptions = 0; + inputBuffer: ev.EventInput = new ev.EventInput(); + lastInputId: number = 0; + racket: Racket; + constructor(socket: WebSocket, id: string, racket: Racket) { + super(socket, id); + this.racket = racket; + } +} + +export class ClientSpectator extends Client { + constructor(socket: WebSocket, id: string) { + super(socket, id); + } +} diff --git a/srcs/requirements/game_server/game_back/src/server/class/GameComponentsServer.ts b/srcs/requirements/game_server/game_back/src/server/class/GameComponentsServer.ts new file mode 100644 index 00000000..691a3991 --- /dev/null +++ b/srcs/requirements/game_server/game_back/src/server/class/GameComponentsServer.ts @@ -0,0 +1,12 @@ + +import * as en from "../../shared_js/enums.js" +import { GameComponents } from "../../shared_js/class/GameComponents.js"; + +export class GameComponentsServer extends GameComponents { + scoreLeft: number = 0; + scoreRight: number = 0; + constructor(options: en.MatchOptions) + { + super(options); + } +} diff --git a/srcs/requirements/game_server/game_back/src/server/class/GameSession.ts b/srcs/requirements/game_server/game_back/src/server/class/GameSession.ts new file mode 100644 index 00000000..322b845d --- /dev/null +++ b/srcs/requirements/game_server/game_back/src/server/class/GameSession.ts @@ -0,0 +1,267 @@ + +import * as en from "../../shared_js/enums.js" +import * as ev from "../../shared_js/class/Event.js" +import * as c from "../constants.js" +import { ClientPlayer, ClientSpectator } from "./Client"; +import { GameComponentsServer } from "./GameComponentsServer.js"; +import { clientInputListener, clientTerminate } from "../wsServer.js"; +import { random } from "../utils.js"; +import { Ball } from "../../shared_js/class/Rectangle.js"; +import { wallsMovements } from "../../shared_js/wallsMovement.js"; + +/* + multiples methods of GameSession have parameter "s: GameSession". + its used with calls to setTimeout(), + because "this" is not equal to the GameSession but to "this: Timeout" +*/ +export class GameSession { + id: string; // url ? + playersMap: Map = new Map(); + unreadyPlayersMap: Map = new Map(); + spectatorsMap: Map = new Map(); + gameLoopInterval: NodeJS.Timer | number = 0; + playersUpdateInterval: NodeJS.Timer | number = 0; + spectatorsUpdateInterval: NodeJS.Timer | number = 0; + components: GameComponentsServer; + matchOptions: en.MatchOptions; + isPrivateMatch: boolean; // WIP: could be used to separate leaderboards for example. + matchEnded: boolean = false; + lastStateSnapshot: ev.EventGameUpdate; + + actual_time: number; + last_time: number; + delta_time: number; + + constructor(id: string, matchOptions: en.MatchOptions, isPrivateMatch: boolean = false) { + this.id = id; + this.matchOptions = matchOptions; + this.isPrivateMatch = isPrivateMatch; + this.components = new GameComponentsServer(this.matchOptions); + } + start() { + const gc = this.components; + setTimeout(this.resume, c.matchStartDelay, this); + + let timeout = c.matchStartDelay + c.newRoundDelay; + gc.ballsArr.forEach((ball) => { + setTimeout(this._newRound, timeout, this, ball); + timeout += c.newRoundDelay*0.5; + }); + } + resume(s: GameSession) { + s.playersMap.forEach( (client) => { + client.socket.on("message", clientInputListener); + }); + + s.actual_time = Date.now(); + s.lastStateSnapshot = s._gameStateSnapshot(); + s.gameLoopInterval = setInterval(s._gameLoop, c.serverGameLoopIntervalMS, s); + s.playersUpdateInterval = setInterval(s._playersUpdate, c.playersUpdateIntervalMS, s); + s.spectatorsUpdateInterval = setInterval(s._spectatorsUpdate, c.spectatorsUpdateIntervalMS, s); + } + pause(s: GameSession) { + s.playersMap.forEach( (client) => { + client.socket.off("message", clientInputListener); + }); + + clearInterval(s.gameLoopInterval); + clearInterval(s.playersUpdateInterval); + clearInterval(s.spectatorsUpdateInterval); + } + instantInputDebug(client: ClientPlayer) { + this._handleInput(c.fixedDeltaTime, client); + } + private _handleInput(delta: number, client: ClientPlayer) { + // if (client.inputBuffer === null) {return;} + const gc = this.components; + const input = client.inputBuffer.input; + + if (input === en.InputEnum.up) { + client.racket.dir.y = -1; + } + else if (input === en.InputEnum.down) { + client.racket.dir.y = 1; + } + + if (input !== en.InputEnum.noInput) { + client.racket.moveAndCollide(delta, [gc.wallTop, gc.wallBottom]); + } + + client.lastInputId = client.inputBuffer.id; + // client.inputBuffer = null; + } + private _gameLoop(s: GameSession) { + /* s.last_time = s.actual_time; + s.actual_time = Date.now(); + s.delta_time = (s.actual_time - s.last_time) / 1000; */ + s.delta_time = c.fixedDeltaTime; + + // WIP, replaced by instantInputDebug() to prevent desynchro + /* s.playersMap.forEach( (client) => { + s._handleInput(s.delta_time, client); + }); */ + + const gc = s.components; + gc.ballsArr.forEach((ball) => { + s._ballMovement(s.delta_time, ball); + }); + + if (s.matchOptions & en.MatchOptions.movingWalls) { + wallsMovements(s.delta_time, gc); + } + } + private _ballMovement(delta: number, ball: Ball) { + const gc = this.components; + if (ball.ballInPlay) + { + ball.moveAndBounce(delta, [gc.wallTop, gc.wallBottom, gc.playerLeft, gc.playerRight]); + if (ball.pos.x > c.w + || ball.pos.x < 0 - ball.width) + { + ball.ballInPlay = false; + if (this.matchEnded) { + return; + } + this._scoreUpdate(ball); + setTimeout(this._newRound, c.newRoundDelay, this, ball); + } + } + } + private _scoreUpdate(ball: Ball) { + const gc = this.components; + if (ball.pos.x > c.w) { + ++gc.scoreLeft; + } + else if (ball.pos.x < 0 - ball.width) { + ++gc.scoreRight; + } + this.playersMap.forEach( (client) => { + client.socket.send(JSON.stringify(new ev.EventScoreUpdate(gc.scoreLeft, gc.scoreRight))); + }); + this.spectatorsMap.forEach( (client) => { + client.socket.send(JSON.stringify(new ev.EventScoreUpdate(gc.scoreLeft, gc.scoreRight))); + }); + } + private _playersUpdate(s: GameSession) { + s.lastStateSnapshot = s._gameStateSnapshot(); + s.playersMap.forEach( (client) => { + s.lastStateSnapshot.lastInputId = client.lastInputId; + client.socket.send(JSON.stringify(s.lastStateSnapshot)); + }); + } + private _spectatorsUpdate(s: GameSession) { + s.lastStateSnapshot.lastInputId = 0; + s.spectatorsMap.forEach( (client) => { + client.socket.send(JSON.stringify(s.lastStateSnapshot)); + }); + } + private _gameStateSnapshot() : ev.EventGameUpdate { + const gc = this.components; + const snapshot = new ev.EventGameUpdate(); + snapshot.playerLeft.y = gc.playerLeft.pos.y; + snapshot.playerRight.y = gc.playerRight.pos.y; + gc.ballsArr.forEach((ball) => { + snapshot.ballsArr.push({ + x: ball.pos.x, + y: ball.pos.y, + dirX: ball.dir.x, + dirY: ball.dir.y, + speed: ball.speed + }); + }); + if (this.matchOptions & en.MatchOptions.movingWalls) { + snapshot.wallTop.y = gc.wallTop.pos.y; + snapshot.wallBottom.y = gc.wallBottom.pos.y; + } + return (snapshot); + } + private _newRound(s: GameSession, ball: Ball) { + if (s._checkDisconnexions()) { + return; + } + // https://fr.wikipedia.org/wiki/Tennis_de_table#Nombre_de_manches + const gc = s.components; + const minScore = 11;// can be changed for testing + if (gc.scoreLeft >= minScore || gc.scoreRight >= minScore) + { + if (Math.abs(gc.scoreLeft - gc.scoreRight) >= 2) + { + if (gc.scoreLeft > gc.scoreRight) { + s._matchEnd(en.PlayerSide.left); + } + else { + s._matchEnd(en.PlayerSide.right); + } + return; + } + } + ball.pos.x = c.w_mid; + ball.pos.y = random(c.h*0.3, c.h*0.7); + ball.speed = ball.baseSpeed; + ball.ballInPlay = true; + } + private _checkDisconnexions() { + if (this.playersMap.size !== 2) + { + this.matchEnded = true; + if (this.playersMap.size != 0) + { + console.log("Forfeit Ending"); + const gc = this.components; + const luckyWinner: ClientPlayer = this.playersMap.values().next().value; + if (luckyWinner.racket === gc.playerLeft) { + this._matchEnd(en.PlayerSide.left, true); + } + else { + this._matchEnd(en.PlayerSide.right, true); + } + } + return true; + } + return false; + } + private async _matchEnd(winner: en.PlayerSide, forfeit_flag: boolean = false) + { + this.matchEnded = true; + let eventEnd: ev.EventMatchEnd; + eventEnd = new ev.EventMatchEnd(winner, forfeit_flag); + this.playersMap.forEach( (client) => { + client.socket.send(JSON.stringify(eventEnd)); + }); + this.spectatorsMap.forEach( (client) => { + client.socket.send(JSON.stringify(eventEnd)); + }); + + const gc = this.components; + await fetch(c.addressBackEnd + "/game/gameserver/updategame", + { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + gameServerIdOfTheMatch: this.id, + playerOneUsernameResult: gc.scoreLeft, + playerTwoUsernameResult: gc.scoreRight, + }) + }); + + const gameSession = this; + setTimeout(function kickRemainingClients() { + gameSession.spectatorsMap.forEach((client) => { + clientTerminate(client); + }); + gameSession.playersMap.forEach((client) => { + clientTerminate(client); + }); + }, 15000); + + // logs + if (winner === en.PlayerSide.left) { + console.log("Player Left WIN"); + } + else { + console.log("Player Right WIN"); + } + } +} diff --git a/srcs/requirements/game_server/game_back/src/server/constants.ts b/srcs/requirements/game_server/game_back/src/server/constants.ts new file mode 100644 index 00000000..3ae3e722 --- /dev/null +++ b/srcs/requirements/game_server/game_back/src/server/constants.ts @@ -0,0 +1,12 @@ + +export * from "../shared_js/constants.js" + +// 15ms == 1000/66.666 +export const serverGameLoopIntervalMS = 15; // millisecond +export const fixedDeltaTime = serverGameLoopIntervalMS/1000; // second + +// 33.333ms == 1000/30 +export const playersUpdateIntervalMS = 1000/30; // millisecond +export const spectatorsUpdateIntervalMS = 1000/30; // millisecond + +export const addressBackEnd = "http://backend_dev:3000/api/v2"; diff --git a/srcs/requirements/game_server/game_back/src/server/utils.ts b/srcs/requirements/game_server/game_back/src/server/utils.ts new file mode 100644 index 00000000..3cd0a4a5 --- /dev/null +++ b/srcs/requirements/game_server/game_back/src/server/utils.ts @@ -0,0 +1,6 @@ + +export * from "../shared_js/utils.js" + +export function shortId(id: string): string { + return id.substring(0, id.indexOf("-")); +} diff --git a/srcs/requirements/game_server/game_back/src/server/wsServer.ts b/srcs/requirements/game_server/game_back/src/server/wsServer.ts new file mode 100644 index 00000000..d28fcff9 --- /dev/null +++ b/srcs/requirements/game_server/game_back/src/server/wsServer.ts @@ -0,0 +1,393 @@ + +import { WebSocketServer, WebSocket as BaseLibWebSocket } from "ws"; + +export class WebSocket extends BaseLibWebSocket { + id?: string; +} + +import { IncomingMessage } from "http"; +import { v4 as uuidv4 } from 'uuid'; + +import * as en from "../shared_js/enums.js" +import * as ev from "../shared_js/class/Event.js" +import * as c from "./constants.js" +import { Client, ClientPlayer, ClientSpectator } from "./class/Client.js" +import { GameSession } from "./class/GameSession.js" +import { shortId } from "./utils.js"; +import { gameSessionIdPLACEHOLDER } from "./constants.js"; + +const wsPort = 8042; +export const wsServer = new WebSocketServer({host: "0.0.0.0", port: wsPort, path: "/pong"}); +const clientsMap: Map = new Map; // socket.id/Client +const matchmakingMap: Map = new Map; // socket.id/ClientPlayer (duplicates with clientsMap) +const privateMatchmakingMap: Map = new Map; // socket.id/ClientPlayer (duplicates with clientsMap) +const gameSessionsMap: Map = new Map; // GameSession.id(url)/GameSession + +wsServer.on("connection", connectionListener); +wsServer.on("error", errorListener); +wsServer.on("close", closeListener); + + +function connectionListener(socket: WebSocket, request: IncomingMessage) +{ + const id = uuidv4(); + const client = new Client(socket, id); + clientsMap.set(id, client); + socket.id = id; + + socket.on("pong", function heartbeat() { + client.isAlive = true; + console.log(`client ${shortId(client.id)} is alive`); + }); + + socket.on("message", function log(data: string) { + try { + const event: ev.ClientEvent = JSON.parse(data); + if (event.type === en.EventTypes.clientInput) { + return; + } + } + catch (e) {} + console.log("data: " + data); + }); + + socket.once("message", clientAnnounceListener); +} + + +async function clientAnnounceListener(this: WebSocket, data: string) +{ + try { + const msg : ev.ClientAnnounce = JSON.parse(data); + if (msg.type === en.EventTypes.clientAnnounce) + { + // TODO: reconnection with msg.clientId ? + // "/pong" to play, "/pong?ID_OF_A_GAMESESSION" to spectate (or something like that) + if (msg.role === en.ClientRole.player) + { + const announce: ev.ClientAnnouncePlayer = msg; + + // WIP nest, fetch token validation + const body = { + playerOneUsername: announce.username, + playerTwoUsername: "", + gameOptions: announce.matchOptions, + isGameIsWithInvitation: announce.privateMatch, + token: announce.token, + }; + if (announce.privateMatch) { + body.playerTwoUsername = announce.playerTwoUsername; + } + const response = await fetch(c.addressBackEnd + "/game/gameserver/validate", + { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(body) + }); + if (!response.ok) + { + this.send(JSON.stringify( new ev.EventError((await response.json()).message))); + clientTerminate(clientsMap.get(this.id)); + return; + } + + const player = clientsMap.get(this.id) as ClientPlayer; + player.matchOptions = announce.matchOptions; + player.token = announce.token; + announce.isInvitedPerson ? player.username = announce.playerTwoUsername : player.username = announce.username; + this.send(JSON.stringify( new ev.EventAssignId(this.id) )); // unused + this.send(JSON.stringify( new ev.ServerEvent(en.EventTypes.matchmakingInProgress) )); + if (announce.privateMatch) { + privateMatchmaking(player); + } + else { + publicMatchmaking(player); + } + } + else if (msg.role === en.ClientRole.spectator) + { + const announce: ev.ClientAnnounceSpectator = msg; + const gameSession = gameSessionsMap.get(announce.gameSessionId); + if (!gameSession) { + this.send(JSON.stringify( new ev.EventError("invalid gameSessionId"))); + clientTerminate(clientsMap.get(this.id)); + return; + } + const spectator = clientsMap.get(this.id) as ClientSpectator; + spectator.gameSession = gameSession; + gameSession.spectatorsMap.set(spectator.id, spectator); + this.send(JSON.stringify( new ev.ServerEvent(en.EventTypes.matchStart) )); + } + } + else { + console.log("Invalid ClientAnnounce"); + } + return; + } + catch (e) { + console.log("Invalid JSON (clientAnnounceListener)"); + } + this.once("message", clientAnnounceListener); +} + + +function publicMatchmaking(player: ClientPlayer) +{ + const minPlayersNumber = 2; + const maxPlayersNumber = 2; + matchmakingMap.set(player.id, player); + const matchOptions = player.matchOptions; + + const compatiblePlayers: ClientPlayer[] = []; + for (const [id, client] of matchmakingMap) + { + if (client.matchOptions === matchOptions) + { + compatiblePlayers.push(client); + if (compatiblePlayers.length === maxPlayersNumber) { + break; + } + } + } + + if (compatiblePlayers.length >= minPlayersNumber) { + compatiblePlayers.forEach((client) => { + matchmakingMap.delete(client.id); + }); + createGameSession(compatiblePlayers, matchOptions); + } +} + + +function privateMatchmaking(player: ClientPlayer) +{ + const minPlayersNumber = 2; + const maxPlayersNumber = 2; + privateMatchmakingMap.set(player.id, player); + const matchOptions = player.matchOptions; + + const token = player.token; + const compatiblePlayers: ClientPlayer[] = []; + for (const [id, client] of privateMatchmakingMap) + { + if (client.token === token) + { + compatiblePlayers.push(client); + if (compatiblePlayers.length === maxPlayersNumber) { + break; + } + } + } + + if (compatiblePlayers.length >= minPlayersNumber) { + compatiblePlayers.forEach((client) => { + privateMatchmakingMap.delete(client.id); + }); + createGameSession(compatiblePlayers, matchOptions); + } + else + { + setTimeout(async function abortMatch() { + if (!player.gameSession) + { + if (player.socket.OPEN) { + player.socket.send(JSON.stringify( new ev.EventMatchAbort() )); + } + const response = await fetch(c.addressBackEnd + "/game/gameserver/destroysession",{ + method: "POST", + headers : {"Content-Type": "application/json"}, + body : JSON.stringify({ + token : player.token + }) + }) + .then(x => x.json()) + .catch(error => console.log("ERROR : " + error)); + clientTerminate(player); + } + }, 60000); + } +} + + +function createGameSession(playersArr: ClientPlayer[], matchOptions: en.MatchOptions) +{ + // const id = gameSessionIdPLACEHOLDER; // Force ID, TESTING SPECTATOR + const id = uuidv4(); + const gameSession = new GameSession(id, matchOptions); + gameSessionsMap.set(id, gameSession); + + playersArr.forEach((client) => { + client.gameSession = gameSession; + gameSession.playersMap.set(client.id, client); + gameSession.unreadyPlayersMap.set(client.id, client); + client.socket.once("message", playerReadyConfirmationListener); + }); + + // REFACTORING: Not pretty, hardcoded two players. + // Could be done in gameSession maybe ? + const gameSessionPlayersIterator = gameSession.playersMap.values(); + let player: ClientPlayer; + player = (gameSessionPlayersIterator.next().value); + player.racket = gameSession.components.playerLeft; + player.socket.send(JSON.stringify( new ev.EventMatchmakingComplete(en.PlayerSide.left) )); + + player = (gameSessionPlayersIterator.next().value); + player.racket = gameSession.components.playerRight; + player.socket.send(JSON.stringify( new ev.EventMatchmakingComplete(en.PlayerSide.right) )); + // REFACTORING + + setTimeout(function abortMatch() { + if (gameSession.unreadyPlayersMap.size !== 0) + { + gameSessionsMap.delete(gameSession.id); + gameSession.playersMap.forEach((client) => { + client.socket.send(JSON.stringify( new ev.EventMatchAbort() )); + client.gameSession = null; + clientTerminate(client); + }); + } + }, 5000); +} + + +async function playerReadyConfirmationListener(this: WebSocket, data: string) +{ + try { + const msg : ev.ClientEvent = JSON.parse(data); + if (msg.type === en.EventTypes.clientPlayerReady) + { + const client = clientsMap.get(this.id); + const gameSession = client.gameSession; + gameSession.unreadyPlayersMap.delete(this.id); + if (gameSession.unreadyPlayersMap.size === 0) + { + // WIP nest , send gameSession.id + const gameSessionPlayersIterator = gameSession.playersMap.values(); + const body = { + gameServerIdOfTheMatch : gameSession.id, + gameOptions: gameSession.matchOptions, + playerOneUsername: (gameSessionPlayersIterator.next().value).username, + playerTwoUsername: (gameSessionPlayersIterator.next().value).username, + playerOneUsernameResult : 0, + playerTwoUsernameResult : 0 + }; + const response = await fetch(c.addressBackEnd + "/game/gameserver/creategame", + { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(body) + }); + if (!response.ok) + { + gameSessionsMap.delete(gameSession.id); + gameSession.playersMap.forEach((client) => { + client.socket.send(JSON.stringify( new ev.EventMatchAbort() )); + client.gameSession = null; + clientTerminate(client); + }); + return; + } + + gameSession.playersMap.forEach( (client) => { + client.socket.send(JSON.stringify( new ev.ServerEvent(en.EventTypes.matchStart) )); + }); + gameSession.start(); + } + } + else { + console.log("Invalid playerReadyConfirmation"); + } + return; + } + catch (e) { + console.log("Invalid JSON (playerReadyConfirmationListener)"); + } + this.once("message", playerReadyConfirmationListener); +} + + +export function clientInputListener(this: WebSocket, data: string) +{ + try { + // const input: ev.ClientEvent = JSON.parse(data); + const input: ev.EventInput = JSON.parse(data); + if (input.type === en.EventTypes.clientInput) + { + const client = clientsMap.get(this.id) as ClientPlayer; + client.inputBuffer = input; + client.gameSession.instantInputDebug(client); // wip + } + else { + console.log("Invalid clientInput"); + } + } + catch (e) { + console.log("Invalid JSON (clientInputListener)"); + } +} + +//////////// +//////////// + +const pingInterval = setInterval( () => { + let deleteLog = ""; + clientsMap.forEach( (client) => { + if (!client.isAlive) { + clientTerminate(client); + deleteLog += ` ${shortId(client.id)} |`; + } + else { + client.isAlive = false; + client.socket.ping(); + } + }); + + if (deleteLog) { + console.log(`Disconnected:${deleteLog}`); + } + console.log("gameSessionMap size: " + gameSessionsMap.size); + console.log("clientsMap size: " + clientsMap.size); + console.log("matchmakingMap size: " + matchmakingMap.size); + console.log("privateMatchmakingMap size: " + privateMatchmakingMap.size); + console.log(""); +}, 4200); + + +export function clientTerminate(client: Client) +{ + client.socket.terminate(); + if (client.gameSession) + { + client.gameSession.playersMap.delete(client.id); + if (client.gameSession.playersMap.size === 0) + { + clearInterval(client.gameSession.playersUpdateInterval); + clearInterval(client.gameSession.spectatorsUpdateInterval); + clearInterval(client.gameSession.gameLoopInterval); + gameSessionsMap.delete(client.gameSession.id); + } + } + clientsMap.delete(client.id); + if (matchmakingMap.has(client.id)) { + matchmakingMap.delete(client.id); + } + else if (privateMatchmakingMap.has(client.id)) { + privateMatchmakingMap.delete(client.id); + } +} + + +function closeListener() +{ + clearInterval(pingInterval); +} + + +function errorListener(error: Error) +{ + console.log("Error: " + JSON.stringify(error)); +} diff --git a/srcs/requirements/game_server/game_back/src/shared_js/class/Event.ts b/srcs/requirements/game_server/game_back/src/shared_js/class/Event.ts new file mode 100644 index 00000000..0147ead8 --- /dev/null +++ b/srcs/requirements/game_server/game_back/src/shared_js/class/Event.ts @@ -0,0 +1,144 @@ + +import * as en from "../enums.js" + +/* From Server */ +export class ServerEvent { + type: en.EventTypes; + constructor(type: en.EventTypes = 0) { + this.type = type; + } +} + +export class EventAssignId extends ServerEvent { + id: string; + constructor(id: string) { + super(en.EventTypes.assignId); + this.id = id; + } +} + +export class EventMatchmakingComplete extends ServerEvent { + side: en.PlayerSide; + constructor(side: en.PlayerSide) { + super(en.EventTypes.matchmakingComplete); + this.side = side; + } +} + +export class EventGameUpdate extends ServerEvent { + playerLeft = { + y: 0 + }; + playerRight = { + y: 0 + }; + ballsArr: { + x: number, + y: number, + dirX: number, + dirY: number, + speed: number + }[] = []; + wallTop? = { + y: 0 + }; + wallBottom? = { + y: 0 + }; + lastInputId = 0; + constructor() { // TODO: constructor that take GameComponentsServer maybe ? + super(en.EventTypes.gameUpdate); + } +} + +export class EventScoreUpdate extends ServerEvent { + scoreLeft: number; + scoreRight: number; + constructor(scoreLeft: number, scoreRight: number) { + super(en.EventTypes.scoreUpdate); + this.scoreLeft = scoreLeft; + this.scoreRight = scoreRight; + } +} + +export class EventMatchEnd extends ServerEvent { + winner: en.PlayerSide; + forfeit: boolean; + constructor(winner: en.PlayerSide, forfeit = false) { + super(en.EventTypes.matchEnd); + this.winner = winner; + this.forfeit = forfeit; + } +} + +export class EventMatchAbort extends ServerEvent { + constructor() { + super(en.EventTypes.matchAbort); + } +} + +export class EventError extends ServerEvent { + message: string; + constructor(message: string) { + super(en.EventTypes.error); + this.message = message; + } +} + + +/* From Client */ +export class ClientEvent { + type: en.EventTypes; // readonly ? + constructor(type: en.EventTypes = 0) { + this.type = type; + } +} + +export class ClientAnnounce extends ClientEvent { + role: en.ClientRole; + constructor(role: en.ClientRole) { + super(en.EventTypes.clientAnnounce); + this.role = role; + } +} + +export class ClientAnnouncePlayer extends ClientAnnounce { + clientId: string; // unused + matchOptions: en.MatchOptions; + token: string; + username: string; + privateMatch: boolean; + playerTwoUsername?: string; + isInvitedPerson? : boolean; + constructor(matchOptions: en.MatchOptions, token: string, username: string, privateMatch: boolean = false, playerTwoUsername?: string, isInvitedPerson? : boolean) { + super(en.ClientRole.player); + this.matchOptions = matchOptions; + this.token = token; + this.username = username; + this.privateMatch = privateMatch; + if (isInvitedPerson) { + this.isInvitedPerson = isInvitedPerson; + } + if (playerTwoUsername) { + this.playerTwoUsername = playerTwoUsername; + } + } +} + +export class ClientAnnounceSpectator extends ClientAnnounce { + gameSessionId: string; + constructor(gameSessionId: string) { + super(en.ClientRole.spectator); + this.gameSessionId = gameSessionId; + } +} + +export class EventInput extends ClientEvent { + input: en.InputEnum; + id: number; + constructor(input: en.InputEnum = en.InputEnum.noInput, id: number = 0) { + super(en.EventTypes.clientInput); + this.input = input; + this.id = id; + } +} diff --git a/srcs/requirements/svelte/api_front/public/game/class/GameComponents.ts b/srcs/requirements/game_server/game_back/src/shared_js/class/GameComponents.ts similarity index 97% rename from srcs/requirements/svelte/api_front/public/game/class/GameComponents.ts rename to srcs/requirements/game_server/game_back/src/shared_js/class/GameComponents.ts index 10e60932..ec36f15f 100644 --- a/srcs/requirements/svelte/api_front/public/game/class/GameComponents.ts +++ b/srcs/requirements/game_server/game_back/src/shared_js/class/GameComponents.ts @@ -5,7 +5,7 @@ import { VectorInteger } from "./Vector.js"; import { Rectangle, MovingRectangle, Racket, Ball } from "./Rectangle.js"; import { random } from "../utils.js"; -class GameComponents { +export class GameComponents { wallTop: Rectangle | MovingRectangle; wallBottom: Rectangle | MovingRectangle; playerLeft: Racket; @@ -61,5 +61,3 @@ class GameComponents { } } } - -export {GameComponents} diff --git a/srcs/requirements/svelte/api_front/public/game/class/Rectangle.ts b/srcs/requirements/game_server/game_back/src/shared_js/class/Rectangle.ts similarity index 93% rename from srcs/requirements/svelte/api_front/public/game/class/Rectangle.ts rename to srcs/requirements/game_server/game_back/src/shared_js/class/Rectangle.ts index fff71dc9..d258c553 100644 --- a/srcs/requirements/svelte/api_front/public/game/class/Rectangle.ts +++ b/srcs/requirements/game_server/game_back/src/shared_js/class/Rectangle.ts @@ -1,9 +1,9 @@ import { Vector, VectorInteger } from "./Vector.js"; -import { Component, Moving } from "./interface.js"; +import type { Component, Moving } from "./interface.js"; import * as c from "../constants.js" -class Rectangle implements Component { +export class Rectangle implements Component { pos: VectorInteger; width: number; height: number; @@ -33,7 +33,7 @@ class Rectangle implements Component { } } -class MovingRectangle extends Rectangle implements Moving { +export class MovingRectangle extends Rectangle implements Moving { dir: Vector = new Vector(0,0); speed: number; readonly baseSpeed: number; @@ -61,7 +61,7 @@ class MovingRectangle extends Rectangle implements Moving { } } -class Racket extends MovingRectangle { +export class Racket extends MovingRectangle { constructor(pos: VectorInteger, width: number, height: number, baseSpeed: number) { super(pos, width, height, baseSpeed); } @@ -72,13 +72,22 @@ class Racket extends MovingRectangle { } } -class Ball extends MovingRectangle { +export class Ball extends MovingRectangle { readonly speedIncrease: number; ballInPlay: boolean = false; constructor(pos: VectorInteger, size: number, baseSpeed: number, speedIncrease: number) { super(pos, size, size, baseSpeed); this.speedIncrease = speedIncrease; } + moveAndBounce(delta: number, colliderArr: Rectangle[]) { + this.move(delta); + let i = colliderArr.findIndex(this.collision, this); + if (i != -1) + { + this.bounce(colliderArr[i]); + this.move(delta); + } + } bounce(collider?: Rectangle) { this._bounceAlgo(collider); } @@ -92,15 +101,6 @@ class Ball extends MovingRectangle { this._bounceWall(); } } - moveAndBounce(delta: number, colliderArr: Rectangle[]) { - this.move(delta); - let i = colliderArr.findIndex(this.collision, this); - if (i != -1) - { - this.bounce(colliderArr[i]); - this.move(delta); - } - } protected _bounceWall() { // Should be enough for Wall this.dir.y = this.dir.y * -1; } @@ -140,5 +140,3 @@ class Ball extends MovingRectangle { // console.log(`x: ${this.dir.x}, y: ${this.dir.y}`); } } - -export {Rectangle, MovingRectangle, Racket, Ball} diff --git a/srcs/requirements/svelte/api_front/public/game/class/Vector.ts b/srcs/requirements/game_server/game_back/src/shared_js/class/Vector.ts similarity index 88% rename from srcs/requirements/svelte/api_front/public/game/class/Vector.ts rename to srcs/requirements/game_server/game_back/src/shared_js/class/Vector.ts index 025bca36..fbe121e5 100644 --- a/srcs/requirements/svelte/api_front/public/game/class/Vector.ts +++ b/srcs/requirements/game_server/game_back/src/shared_js/class/Vector.ts @@ -1,5 +1,5 @@ -class Vector { +export class Vector { x: number; y: number; constructor(x: number = 0, y: number = 0) { @@ -16,13 +16,13 @@ class Vector { } } -class VectorInteger extends Vector { +export class VectorInteger extends Vector { // PLACEHOLDER // VectorInteger with set/get dont work (No draw on the screen). Why ? } /* -class VectorInteger { +export class VectorInteger { // private _x: number = 0; // private _y: number = 0; // constructor(x: number = 0, y: number = 0) { @@ -45,5 +45,3 @@ class VectorInteger { // } } */ - -export {Vector, VectorInteger} diff --git a/srcs/requirements/svelte/api_front/public/game/class/interface.ts b/srcs/requirements/game_server/game_back/src/shared_js/class/interface.ts similarity index 53% rename from srcs/requirements/svelte/api_front/public/game/class/interface.ts rename to srcs/requirements/game_server/game_back/src/shared_js/class/interface.ts index 39753de1..0f484da3 100644 --- a/srcs/requirements/svelte/api_front/public/game/class/interface.ts +++ b/srcs/requirements/game_server/game_back/src/shared_js/class/interface.ts @@ -1,21 +1,19 @@ -import { Vector, VectorInteger } from "./Vector.js"; +import type { Vector, VectorInteger } from "./Vector.js"; -interface Component { +export interface Component { pos: VectorInteger; } -interface GraphicComponent extends Component { +export interface GraphicComponent extends Component { ctx: CanvasRenderingContext2D; color: string; update: () => void; clear: (pos?: VectorInteger) => void; } -interface Moving { +export interface Moving { dir: Vector; speed: number; // pixel per second move(delta: number): void; } - -export {Component, GraphicComponent, Moving} diff --git a/srcs/requirements/svelte/api_front/public/game/constants copy.ts b/srcs/requirements/game_server/game_back/src/shared_js/constants.ts similarity index 74% rename from srcs/requirements/svelte/api_front/public/game/constants copy.ts rename to srcs/requirements/game_server/game_back/src/shared_js/constants.ts index ae3320e5..44c282c2 100644 --- a/srcs/requirements/svelte/api_front/public/game/constants copy.ts +++ b/srcs/requirements/game_server/game_back/src/shared_js/constants.ts @@ -11,8 +11,8 @@ export const pw = Math.floor(w*0.017); export const ph = pw*6; export const ballSize = pw; export const wallSize = Math.floor(w*0.01); -export const racketSpeed = Math.floor(w*0.66); // pixel per second -export const ballSpeed = Math.floor(w*0.66); // pixel per second +export const racketSpeed = Math.floor(w*0.60); // pixel per second +export const ballSpeed = Math.floor(w*0.55); // pixel per second export const ballSpeedIncrease = Math.floor(ballSpeed*0.05); // pixel per second export const normalizedSpeed = false; // for consistency in speed independent of direction @@ -24,3 +24,7 @@ export const newRoundDelay = 1500; // millisecond export const multiBallsCount = 3; export const movingWallPosMax = Math.floor(w*0.12); export const movingWallSpeed = Math.floor(w*0.08); + + +export const gameSessionIdPLACEHOLDER = "42"; // TESTING SPECTATOR PLACEHOLDER +// for testing, force gameSession.id in wsServer.ts->matchmaking() \ No newline at end of file diff --git a/srcs/requirements/svelte/api_front/public/game/enums.ts b/srcs/requirements/game_server/game_back/src/shared_js/enums.ts similarity index 74% rename from srcs/requirements/svelte/api_front/public/game/enums.ts rename to srcs/requirements/game_server/game_back/src/shared_js/enums.ts index dfba2aa3..b86571e5 100644 --- a/srcs/requirements/svelte/api_front/public/game/enums.ts +++ b/srcs/requirements/game_server/game_back/src/shared_js/enums.ts @@ -1,15 +1,17 @@ -enum EventTypes { +export enum EventTypes { // Class Implemented gameUpdate = 1, scoreUpdate, matchEnd, assignId, matchmakingComplete, + error, // Generic matchmakingInProgress, matchStart, + matchAbort, matchNewRound, // unused matchPause, // unused matchResume, // unused @@ -21,27 +23,25 @@ enum EventTypes { } -enum InputEnum { +export enum InputEnum { noInput = 0, up = 1, down, } -enum PlayerSide { +export enum PlayerSide { left = 1, right } -enum ClientRole { +export enum ClientRole { player = 1, spectator } -enum MatchOptions { +export enum MatchOptions { // binary flags, can be mixed noOption = 0b0, multiBalls = 1 << 0, movingWalls = 1 << 1 } - -export {EventTypes, InputEnum, PlayerSide, ClientRole, MatchOptions} diff --git a/srcs/requirements/game_server/game_back/src/shared_js/utils.ts b/srcs/requirements/game_server/game_back/src/shared_js/utils.ts new file mode 100644 index 00000000..dd3d40d0 --- /dev/null +++ b/srcs/requirements/game_server/game_back/src/shared_js/utils.ts @@ -0,0 +1,25 @@ + +import type { MovingRectangle } from "./class/Rectangle.js"; + +export function random(min: number = 0, max: number = 1) { + return Math.random() * (max - min) + min; +} + +export function sleep (ms: number) { + return new Promise((resolve) => setTimeout(resolve, ms)); +} + +export function clamp(n: number, min: number, max: number) : number +{ + if (n < min) + n = min; + else if (n > max) + n = max; + return (n); +} + +// Typescript hack, unused +export function assertMovingRectangle(value: unknown): asserts value is MovingRectangle { + // if (value !== MovingRectangle) throw new Error("Not a MovingRectangle"); + return; +} diff --git a/srcs/requirements/svelte/api_front/public/game/wallsMovement.ts b/srcs/requirements/game_server/game_back/src/shared_js/wallsMovement.ts similarity index 69% rename from srcs/requirements/svelte/api_front/public/game/wallsMovement.ts rename to srcs/requirements/game_server/game_back/src/shared_js/wallsMovement.ts index dbf3f558..b2c2b581 100644 --- a/srcs/requirements/svelte/api_front/public/game/wallsMovement.ts +++ b/srcs/requirements/game_server/game_back/src/shared_js/wallsMovement.ts @@ -1,9 +1,9 @@ import * as c from "./constants.js"; -import { MovingRectangle } from "../shared_js/class/Rectangle.js"; -import { GameComponents } from "./class/GameComponents.js"; +import type { MovingRectangle } from "../shared_js/class/Rectangle.js"; +import type { GameComponents } from "./class/GameComponents.js"; -function wallsMovements(delta: number, gc: GameComponents) +export function wallsMovements(delta: number, gc: GameComponents) { const wallTop = gc.wallTop; const wallBottom = gc.wallBottom; @@ -16,5 +16,3 @@ function wallsMovements(delta: number, gc: GameComponents) wallTop.moveAndCollide(delta, [gc.playerLeft, gc.playerRight]); wallBottom.moveAndCollide(delta, [gc.playerLeft, gc.playerRight]); } - -export {wallsMovements} diff --git a/srcs/requirements/game_server/game_back/tsconfig.json b/srcs/requirements/game_server/game_back/tsconfig.json new file mode 100644 index 00000000..9344b2b4 --- /dev/null +++ b/srcs/requirements/game_server/game_back/tsconfig.json @@ -0,0 +1,103 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "ES6", /* Specify what module code is generated. */ + // "rootDir": "./", /* Specify the root folder within your source files. */ + "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + // "outDir": "./", /* Specify an output folder for all emitted files. */ + // "removeComments": true, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + "strictNullChecks": false, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } + } diff --git a/srcs/requirements/nestjs/Dockerfile b/srcs/requirements/nestjs/Dockerfile index 7b7b7e7c..f64878ff 100644 --- a/srcs/requirements/nestjs/Dockerfile +++ b/srcs/requirements/nestjs/Dockerfile @@ -5,7 +5,7 @@ WORKDIR /usr/app COPY ./api_back ./ COPY ./api_back/.env ./.env COPY ./api_back/src/uploads/avatars/default.png ./uploads/avatars/default.png - +RUN npm install RUN npm ci diff --git a/srcs/requirements/nestjs/api_back/.env b/srcs/requirements/nestjs/api_back/.env index ed44998b..e1dc7bcd 100644 --- a/srcs/requirements/nestjs/api_back/.env +++ b/srcs/requirements/nestjs/api_back/.env @@ -1,22 +1,13 @@ NODE_ENV=development +POSTGRES_USER=postgres +POSTGRES_PASSWORD= +POSTGRES_DB=transcendance_db POSTGRES_HOST=postgresql POSTGRES_PORT=5432 -POSTGRES_USERNAME=postgres -POSTGRES_PASSWORD=9pKpKEgiamxwk5P7Ggsz -POSTGRES_DATABASE=transcendance_db - -# OAUTH2 42 API FORTYTWO_CLIENT_ID=u-s4t2ud-49dc7b539bcfe1acb48b928b2b281671c99fc5bfab1faca57a536ab7e0075500 FORTYTWO_CLIENT_SECRET=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 FORTYTWO_CALLBACK_URL=http://transcendance:8080/api/v2/auth/redirect -COOKIE_SECRET=248cdc831110eec8796d7c1edbf79835 -# JWT -JWT_SECRET=442d774798979fcc14a4a2b6b7535902 -# Misc +COOKIE_SECRET=JsqrZopdOb3zuAkZd+8xDkPHOhEMmbz4eAlJ+liEo0U= PORT=3000 -#Redis -REDIS_HOST=redis -REDIS_PORT=6379 -REDIS_PASSWORD=1a5e04138b91b3d683c708e4689454c2 -#2fa TWO_FACTOR_AUTHENTICATION_APP_NAME=Transcendance +TICKET_FOR_PLAYING_GAME_SECRET=5MkACVi80PE+7XGrG3Tij3+BE3RJk0h0v7NI0uFJswg= diff --git a/srcs/requirements/nestjs/api_back/package-lock.json b/srcs/requirements/nestjs/api_back/package-lock.json index e4f00af0..2085d3b6 100644 --- a/srcs/requirements/nestjs/api_back/package-lock.json +++ b/srcs/requirements/nestjs/api_back/package-lock.json @@ -12,7 +12,6 @@ "@nestjs/common": "^9.0.0", "@nestjs/config": "^2.2.0", "@nestjs/core": "^9.0.0", - "@nestjs/jwt": "^9.0.0", "@nestjs/mapped-types": "^1.2.0", "@nestjs/passport": "^9.0.0", "@nestjs/platform-express": "^9.0.0", @@ -31,7 +30,6 @@ "otplib": "^12.0.1", "passport": "^0.6.0", "passport-42": "^1.2.6", - "passport-jwt": "^4.0.0", "passport-local": "^1.0.0", "pg": "^8.8.0", "qrcode": "^1.5.1", @@ -51,7 +49,6 @@ "@types/jest": "28.1.8", "@types/multer": "^1.4.7", "@types/node": "^16.0.0", - "@types/passport-jwt": "^3.0.7", "@types/passport-local": "^1.0.34", "@types/supertest": "^2.0.11", "@typescript-eslint/eslint-plugin": "^5.0.0", @@ -240,30 +237,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.4.tgz", - "integrity": "sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.5.tgz", + "integrity": "sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.6.tgz", - "integrity": "sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.5.tgz", + "integrity": "sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.6", - "@babel/helper-compilation-targets": "^7.19.3", - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helpers": "^7.19.4", - "@babel/parser": "^7.19.6", + "@babel/generator": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-module-transforms": "^7.20.2", + "@babel/helpers": "^7.20.5", + "@babel/parser": "^7.20.5", "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.6", - "@babel/types": "^7.19.4", + "@babel/traverse": "^7.20.5", + "@babel/types": "^7.20.5", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -288,12 +285,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.6.tgz", - "integrity": "sha512-oHGRUQeoX1QrKeJIKVe0hwjGqNnVYsM5Nep5zo0uE0m42sLH+Fsd2pStJ5sRM1bNyTUUoz0pe2lTeMJrb/taTA==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz", + "integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==", "dev": true, "dependencies": { - "@babel/types": "^7.19.4", + "@babel/types": "^7.20.5", "@jridgewell/gen-mapping": "^0.3.2", "jsesc": "^2.5.1" }, @@ -316,12 +313,12 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz", - "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", + "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.19.3", + "@babel/compat-data": "^7.20.0", "@babel/helper-validator-option": "^7.18.6", "browserslist": "^4.21.3", "semver": "^6.3.0" @@ -389,40 +386,40 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz", - "integrity": "sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", + "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.19.4", + "@babel/helper-simple-access": "^7.20.2", "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.19.1", "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.6", - "@babel/types": "^7.19.4" + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", - "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", - "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", "dev": true, "dependencies": { - "@babel/types": "^7.19.4" + "@babel/types": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -468,14 +465,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.4.tgz", - "integrity": "sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==", + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz", + "integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==", "dev": true, "dependencies": { "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.4", - "@babel/types": "^7.19.4" + "@babel/traverse": "^7.20.5", + "@babel/types": "^7.20.5" }, "engines": { "node": ">=6.9.0" @@ -567,9 +564,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.6.tgz", - "integrity": "sha512-h1IUp81s2JYJ3mRkdxJgs4UvmSsRvDrx5ICSJbPvtWYv5i1nTBGcBpnog+89rAFMwvvru6E5NUHdBe01UeSzYA==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz", + "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -726,12 +723,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", - "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", + "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.19.0" }, "engines": { "node": ">=6.9.0" @@ -755,19 +752,19 @@ } }, "node_modules/@babel/traverse": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.6.tgz", - "integrity": "sha512-6l5HrUCzFM04mfbG09AagtYyR2P0B71B1wN7PfSPiksDPz2k5H9CBC1tcZpz2M8OxbKTPccByoOJ22rUKbpmQQ==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz", + "integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.6", + "@babel/generator": "^7.20.5", "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-function-name": "^7.19.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.19.6", - "@babel/types": "^7.19.4", + "@babel/parser": "^7.20.5", + "@babel/types": "^7.20.5", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -785,9 +782,9 @@ } }, "node_modules/@babel/types": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.4.tgz", - "integrity": "sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz", + "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.19.4", @@ -837,15 +834,15 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", - "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.0.tgz", + "integrity": "sha512-7yfvXy6MWLgWSFsLhz5yH3iQ52St8cdUY6FoGieKkRDVxuxmrNuUetIuu6cmjNWwniUHiWXjxCr5tTXDrbYS5A==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.4.0", - "globals": "^13.15.0", + "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -882,14 +879,14 @@ "dev": true }, "node_modules/@humanwhocodes/config-array": { - "version": "0.10.7", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz", - "integrity": "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==", + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" @@ -914,6 +911,13 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "node_modules/@ioredis/commands": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", + "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==", + "optional": true, + "peer": true + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -1453,9 +1457,9 @@ } }, "node_modules/@nestjs/cli": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-9.1.4.tgz", - "integrity": "sha512-cvN4DcLzaqFzKRmpU3tOeLmw7+1p4XXsFLyWgteId0Szf6cAk5KJpD5jl2Kw7f39vNw9Pss8yiJ1q1CD/fcbwQ==", + "version": "9.1.5", + "resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-9.1.5.tgz", + "integrity": "sha512-rSp26+Nv7PFtYrRSP18Gv5ZK8rRSc2SCCF5wh4SdZaVGgkxShpNq9YEfI+ik/uziN3KC5o74ppYRXGj+aHGVsA==", "dev": true, "dependencies": { "@angular-devkit/core": "14.2.2", @@ -1477,7 +1481,7 @@ "tree-kill": "1.2.2", "tsconfig-paths": "4.1.0", "tsconfig-paths-webpack-plugin": "4.0.0", - "typescript": "4.8.3", + "typescript": "4.8.4", "webpack": "5.74.0", "webpack-node-externals": "3.0.0" }, @@ -1489,9 +1493,9 @@ } }, "node_modules/@nestjs/cli/node_modules/typescript": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz", - "integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==", + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", + "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -1501,13 +1505,60 @@ "node": ">=4.2.0" } }, + "node_modules/@nestjs/cli/node_modules/webpack": { + "version": "5.74.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", + "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, "node_modules/@nestjs/common": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-9.1.4.tgz", - "integrity": "sha512-hmGTZ8ShKFDqqlU02uU8e/8PNE4bnES4pcFa6s/T1pLDYWjyf/75Klunro1W4aQPHcxnnohBmB27WxMqFTPEfw==", + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-9.2.1.tgz", + "integrity": "sha512-nZuo3oDsSSlC5mti/M2aCWTEIfHPGDXmBwWgPeCpRbrNz3IWd109rkajll+yxgidVjznAdBS9y00JkAVJblNYw==", "dependencies": { "iterare": "1.2.1", - "tslib": "2.4.0", + "tslib": "2.4.1", "uuid": "9.0.0" }, "funding": { @@ -1549,14 +1600,6 @@ "rxjs": "^6.0.0 || ^7.2.0" } }, - "node_modules/@nestjs/config/node_modules/dotenv": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz", - "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==", - "engines": { - "node": ">=12" - } - }, "node_modules/@nestjs/config/node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", @@ -1566,9 +1609,9 @@ } }, "node_modules/@nestjs/core": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-9.1.4.tgz", - "integrity": "sha512-S6KpGeKotPYh126hhRqYLhvg9lxSbAmGfEbK8m09crIK7CYP05t32KtT6n12xl5/iva1G4Ch87Z/3rYP76etUg==", + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-9.2.1.tgz", + "integrity": "sha512-a9GkXuu8uXgNgCVW+17iI8kLCltO+HwHpU2IhR+32JKnN2WEQ1YEWU4t3GJ2MNq44YkjIw9zrKvFkjJBlYrNbQ==", "hasInstallScript": true, "dependencies": { "@nuxtjs/opencollective": "0.3.2", @@ -1576,7 +1619,7 @@ "iterare": "1.2.1", "object-hash": "3.0.0", "path-to-regexp": "3.2.0", - "tslib": "2.4.0", + "tslib": "2.4.1", "uuid": "9.0.0" }, "funding": { @@ -1603,26 +1646,6 @@ } } }, - "node_modules/@nestjs/jwt": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@nestjs/jwt/-/jwt-9.0.0.tgz", - "integrity": "sha512-ZsXGY/wMYKzEhymw2+dxiwrHTRKIKrGszx6r2EjQqNLypdXMQu0QrujwZJ8k3+XQV4snmuJwwNakQoA2ILfq8w==", - "dependencies": { - "@types/jsonwebtoken": "8.5.8", - "jsonwebtoken": "8.5.1" - }, - "peerDependencies": { - "@nestjs/common": "^8.0.0 || ^9.0.0" - } - }, - "node_modules/@nestjs/jwt/node_modules/@types/jsonwebtoken": { - "version": "8.5.8", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.8.tgz", - "integrity": "sha512-zm6xBQpFDIDM6o9r6HSgDeIcLy82TKWctCXEPbJJcXb5AKmi5BNNdLXneixK4lplX3PqIVcwLBCGE/kAGnlD4A==", - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@nestjs/mapped-types": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-1.2.0.tgz", @@ -1652,15 +1675,15 @@ } }, "node_modules/@nestjs/platform-express": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-9.1.4.tgz", - "integrity": "sha512-SLJWDa6V54QrUvzKI4Eyt7gyrjV7F9FY1uHFihshjmQfpf0ebCGacR9jzNwf01aHl0BJX3DUn/KYteBjz6DJXw==", + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-9.2.1.tgz", + "integrity": "sha512-7PecaXt8lrdS1p6Vb1X/am3GGv+EO1VahyDzaEGOK6C0zwhc0VPfLtwihkjjfhS6BjpRIXXgviwEjONUvxVZnA==", "dependencies": { - "body-parser": "1.20.0", + "body-parser": "1.20.1", "cors": "2.8.5", - "express": "4.18.1", + "express": "4.18.2", "multer": "1.4.4-lts.1", - "tslib": "2.4.0" + "tslib": "2.4.1" }, "funding": { "type": "opencollective", @@ -1866,12 +1889,12 @@ "dev": true }, "node_modules/@nestjs/testing": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-9.1.4.tgz", - "integrity": "sha512-gO6b9QJyUajh38DNdss9gSE0UO7x60Jh10W4SwHEjQT1W+yxaEWr3aLyuQItTvUVY6C28XKFLTykMpr8GO28Ug==", + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-9.2.1.tgz", + "integrity": "sha512-lemXZdRSuqoZ87l0orCrS/c7gqwxeduIFOd21g9g2RUeQ4qlWPegbQDKASzbfC28klPyrgJLW4MNq7uv2JwV8w==", "dev": true, "dependencies": { - "tslib": "2.4.0" + "tslib": "2.4.1" }, "funding": { "type": "opencollective", @@ -2060,9 +2083,9 @@ } }, "node_modules/@redis/client": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@redis/client/-/client-1.3.1.tgz", - "integrity": "sha512-FKEHpOu7Q4+cuM6VWjA54988K5jkqOxvhvj2hEGSx086lvKwXyjzO7Lya7hcirZ0/Db8FLBJN7UXsJuyoNWPJg==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@redis/client/-/client-1.4.2.tgz", + "integrity": "sha512-oUdEjE0I7JS5AyaAjkD3aOXn9NhO7XKyPyXEyrgFDu++VrVBHUPnV6dgEya9TcMuj5nIJRuCzCm8ZP+c9zCHPw==", "dependencies": { "cluster-key-slot": "1.1.1", "generic-pool": "3.9.0", @@ -2097,23 +2120,23 @@ } }, "node_modules/@redis/time-series": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-1.0.3.tgz", - "integrity": "sha512-OFp0q4SGrTH0Mruf6oFsHGea58u8vS/iI5+NpYdicaM+7BgqBZH8FFvNZ8rYYLrUO/QRqMq72NpXmxLVNcdmjA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-1.0.4.tgz", + "integrity": "sha512-ThUIgo2U/g7cCuZavucQTQzA9g9JbDDY2f64u3AbAoz/8vE2lt2U37LamDUVChhaDA3IRT9R6VvJwqnUfTJzng==", "peerDependencies": { "@redis/client": "^1.0.0" } }, "node_modules/@sinclair/typebox": { - "version": "0.24.47", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.47.tgz", - "integrity": "sha512-J4Xw0xYK4h7eC34MNOPQi6IkNxGRck6n4VJpWDzXIFVTW8I/D43Gf+NfWz/v/7NHlzWOPd3+T4PJ4OqklQ2u7A==", + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", "dev": true }, "node_modules/@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", "dev": true, "dependencies": { "type-detect": "4.0.8" @@ -2163,9 +2186,9 @@ "devOptional": true }, "node_modules/@types/babel__core": { - "version": "7.1.19", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", - "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", + "version": "7.1.20", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.20.tgz", + "integrity": "sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==", "dev": true, "dependencies": { "@babel/parser": "^7.1.0", @@ -2195,9 +2218,9 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.2.tgz", - "integrity": "sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==", + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", + "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", "dev": true, "dependencies": { "@babel/types": "^7.3.0" @@ -2240,9 +2263,9 @@ } }, "node_modules/@types/eslint": { - "version": "8.4.7", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.7.tgz", - "integrity": "sha512-ehM7cCt2RSFs42mb+lcmhFT9ouIlV92PuaeRGn8N8c98oMjG4Z5pJHA9b1QiCcuqnbPSHcyfiD3mlhqMaHsQIw==", + "version": "8.4.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", + "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", "dev": true, "dependencies": { "@types/estree": "*", @@ -2266,12 +2289,12 @@ "dev": true }, "node_modules/@types/express": { - "version": "4.17.14", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", - "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.15.tgz", + "integrity": "sha512-Yv0k4bXGOH+8a+7bELd2PqHQsuiANB+A8a4gnQrkRWzrkKlb6KHaVvyXhqs04sVW/OWlbPyYxRgYlIXLfrufMQ==", "dependencies": { "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", + "@types/express-serve-static-core": "^4.17.31", "@types/qs": "*", "@types/serve-static": "*" } @@ -2343,15 +2366,6 @@ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, - "node_modules/@types/jsonwebtoken": { - "version": "8.5.9", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.9.tgz", - "integrity": "sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/mime": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", @@ -2367,9 +2381,9 @@ } }, "node_modules/@types/node": { - "version": "16.11.68", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.68.tgz", - "integrity": "sha512-JkRpuVz3xCNCWaeQ5EHLR/6woMbHZz/jZ7Kmc63AkU+1HxnoUugzSWMck7dsR4DvNYX8jp9wTi9K7WvnxOIQZQ==" + "version": "16.18.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.10.tgz", + "integrity": "sha512-XU1+v7h81p7145ddPfjv7jtWvkSilpcnON3mQ+bDi9Yuf7OI56efOglXRyXWgQ57xH3fEQgh7WOJMncRHVew5w==" }, "node_modules/@types/parse-json": { "version": "4.0.0", @@ -2386,17 +2400,6 @@ "@types/express": "*" } }, - "node_modules/@types/passport-jwt": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@types/passport-jwt/-/passport-jwt-3.0.7.tgz", - "integrity": "sha512-qRQ4qlww1Yhs3IaioDKrsDNmKy6gLDLgFsGwpCnc2YqWovO2Oxu9yCQdWHMJafQ7UIuOba4C4/TNXcGkQfEjlQ==", - "dev": true, - "dependencies": { - "@types/express": "*", - "@types/jsonwebtoken": "*", - "@types/passport-strategy": "*" - } - }, "node_modules/@types/passport-local": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/@types/passport-local/-/passport-local-1.0.34.tgz", @@ -2444,9 +2447,9 @@ } }, "node_modules/@types/semver": { - "version": "7.3.12", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.12.tgz", - "integrity": "sha512-WwA1MW0++RfXmCr12xeYOOC5baSC9mSb0ZqCquFzKhcoF4TvHu5MKOuXsncgZcpVFhB1pXd5hZmM0ryAoCp12A==", + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", "dev": true }, "node_modules/@types/serve-static": { @@ -2465,9 +2468,9 @@ "dev": true }, "node_modules/@types/superagent": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.15.tgz", - "integrity": "sha512-mu/N4uvfDN2zVQQ5AYJI/g4qxn2bHB6521t1UuH09ShNWjebTqN0ZFuYK9uYjcgmI0dTQEs+Owi1EO6U0OkOZQ==", + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.16.tgz", + "integrity": "sha512-tLfnlJf6A5mB6ddqF159GqcDizfzbMUB1/DeT59/wBNqzRTNNKsaw79A/1TZ84X+f/EwWH8FeuSkjlCLyqS/zQ==", "dev": true, "dependencies": { "@types/cookiejar": "*", @@ -2484,14 +2487,14 @@ } }, "node_modules/@types/validator": { - "version": "13.7.9", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.9.tgz", - "integrity": "sha512-y5KJ1PjGXPpU4CZ7lThDu31s+FqvzhqwMOR6Go/x6xaQMFjgzwfzfOvCwABsylr/5n8sB1qFQm1Vi7TaCB8P+A==" + "version": "13.7.10", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.10.tgz", + "integrity": "sha512-t1yxFAR2n0+VO6hd/FJ9F2uezAZVWHLmpmlJzm1eX03+H7+HsuTAp7L8QJs+2pQCfWkP1+EXsGK9Z9v7o/qPVQ==" }, "node_modules/@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", + "version": "17.0.17", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.17.tgz", + "integrity": "sha512-72bWxFKTK6uwWJAVT+3rF6Jo6RTojiJ27FQo8Rf60AL+VZbzoVPnMFhKsUnbjR8A3BTCYQ7Mv3hnl8T0A+CX9g==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -2504,16 +2507,17 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.40.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.40.1.tgz", - "integrity": "sha512-FsWboKkWdytGiXT5O1/R9j37YgcjO8MKHSUmWnIEjVaz0krHkplPnYi7mwdb+5+cs0toFNQb0HIrN7zONdIEWg==", + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.46.1.tgz", + "integrity": "sha512-YpzNv3aayRBwjs4J3oz65eVLXc9xx0PDbIRisHj+dYhvBn02MjYOD96P8YGiWEIFBrojaUjxvkaUpakD82phsA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.40.1", - "@typescript-eslint/type-utils": "5.40.1", - "@typescript-eslint/utils": "5.40.1", + "@typescript-eslint/scope-manager": "5.46.1", + "@typescript-eslint/type-utils": "5.46.1", + "@typescript-eslint/utils": "5.46.1", "debug": "^4.3.4", "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", "regexpp": "^3.2.0", "semver": "^7.3.7", "tsutils": "^3.21.0" @@ -2536,14 +2540,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.40.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.40.1.tgz", - "integrity": "sha512-IK6x55va5w4YvXd4b3VrXQPldV9vQTxi5ov+g4pMANsXPTXOcfjx08CRR1Dfrcc51syPtXHF5bgLlMHYFrvQtg==", + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.46.1.tgz", + "integrity": "sha512-RelQ5cGypPh4ySAtfIMBzBGyrNerQcmfA1oJvPj5f+H4jI59rl9xxpn4bonC0tQvUKOEN7eGBFWxFLK3Xepneg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.40.1", - "@typescript-eslint/types": "5.40.1", - "@typescript-eslint/typescript-estree": "5.40.1", + "@typescript-eslint/scope-manager": "5.46.1", + "@typescript-eslint/types": "5.46.1", + "@typescript-eslint/typescript-estree": "5.46.1", "debug": "^4.3.4" }, "engines": { @@ -2563,13 +2567,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.40.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.40.1.tgz", - "integrity": "sha512-jkn4xsJiUQucI16OLCXrLRXDZ3afKhOIqXs4R3O+M00hdQLKR58WuyXPZZjhKLFCEP2g+TXdBRtLQ33UfAdRUg==", + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.46.1.tgz", + "integrity": "sha512-iOChVivo4jpwUdrJZyXSMrEIM/PvsbbDOX1y3UCKjSgWn+W89skxWaYXACQfxmIGhPVpRWK/VWPYc+bad6smIA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.40.1", - "@typescript-eslint/visitor-keys": "5.40.1" + "@typescript-eslint/types": "5.46.1", + "@typescript-eslint/visitor-keys": "5.46.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2580,13 +2584,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.40.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.40.1.tgz", - "integrity": "sha512-DLAs+AHQOe6n5LRraXiv27IYPhleF0ldEmx6yBqBgBLaNRKTkffhV1RPsjoJBhVup2zHxfaRtan8/YRBgYhU9Q==", + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.46.1.tgz", + "integrity": "sha512-V/zMyfI+jDmL1ADxfDxjZ0EMbtiVqj8LUGPAGyBkXXStWmCUErMpW873zEHsyguWCuq2iN4BrlWUkmuVj84yng==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.40.1", - "@typescript-eslint/utils": "5.40.1", + "@typescript-eslint/typescript-estree": "5.46.1", + "@typescript-eslint/utils": "5.46.1", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -2607,9 +2611,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.40.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.40.1.tgz", - "integrity": "sha512-Icg9kiuVJSwdzSQvtdGspOlWNjVDnF3qVIKXdJ103o36yRprdl3Ge5cABQx+csx960nuMF21v8qvO31v9t3OHw==", + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.46.1.tgz", + "integrity": "sha512-Z5pvlCaZgU+93ryiYUwGwLl9AQVB/PQ1TsJ9NZ/gHzZjN7g9IAn6RSDkpCV8hqTwAiaj6fmCcKSQeBPlIpW28w==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2620,13 +2624,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.40.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.40.1.tgz", - "integrity": "sha512-5QTP/nW5+60jBcEPfXy/EZL01qrl9GZtbgDZtDPlfW5zj/zjNrdI2B5zMUHmOsfvOr2cWqwVdWjobCiHcedmQA==", + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.46.1.tgz", + "integrity": "sha512-j9W4t67QiNp90kh5Nbr1w92wzt+toiIsaVPnEblB2Ih2U9fqBTyqV9T3pYWZBRt6QoMh/zVWP59EpuCjc4VRBg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.40.1", - "@typescript-eslint/visitor-keys": "5.40.1", + "@typescript-eslint/types": "5.46.1", + "@typescript-eslint/visitor-keys": "5.46.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -2647,16 +2651,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.40.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.40.1.tgz", - "integrity": "sha512-a2TAVScoX9fjryNrW6BZRnreDUszxqm9eQ9Esv8n5nXApMW0zeANUYlwh/DED04SC/ifuBvXgZpIK5xeJHQ3aw==", + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.46.1.tgz", + "integrity": "sha512-RBdBAGv3oEpFojaCYT4Ghn4775pdjvwfDOfQ2P6qzNVgQOVrnSPe5/Pb88kv7xzYQjoio0eKHKB9GJ16ieSxvA==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.40.1", - "@typescript-eslint/types": "5.40.1", - "@typescript-eslint/typescript-estree": "5.40.1", + "@typescript-eslint/scope-manager": "5.46.1", + "@typescript-eslint/types": "5.46.1", + "@typescript-eslint/typescript-estree": "5.46.1", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0", "semver": "^7.3.7" @@ -2673,12 +2677,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.40.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.40.1.tgz", - "integrity": "sha512-A2DGmeZ+FMja0geX5rww+DpvILpwo1OsiQs0M+joPWJYsiEFBLsH0y1oFymPNul6Z5okSmHpP4ivkc2N0Cgfkw==", + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.46.1.tgz", + "integrity": "sha512-jczZ9noovXwy59KjRTk1OftT78pwygdcmCuBf8yMoWt/8O8l+6x2LSEze0E4TeepXK4MezW3zGSyoDRZK7Y9cg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.40.1", + "@typescript-eslint/types": "5.46.1", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -2860,9 +2864,9 @@ } }, "node_modules/acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", "devOptional": true, "bin": { "acorn": "bin/acorn" @@ -2995,9 +2999,9 @@ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" }, "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "dependencies": { "normalize-path": "^3.0.0", @@ -3239,9 +3243,9 @@ } }, "node_modules/body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.4", @@ -3251,7 +3255,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.10.3", + "qs": "6.11.0", "raw-body": "2.5.1", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -3435,9 +3439,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001422", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001422.tgz", - "integrity": "sha512-hSesn02u1QacQHhaxl/kNMZwqVG35Sz/8DgvmgedxSH8z9UUpcDYSPYgsj3x5dQNRcNp6BwpSfQfVzYUTm+fog==", + "version": "1.0.30001439", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001439.tgz", + "integrity": "sha512-1MgUzEkoMO6gKfXflStpYgZDlFM7M/ck/bgfVCACO5vnAf0fXoNVHdWtqGU+MYca+4bL9Z5bpOVmR33cWW9G2A==", "dev": true, "funding": [ { @@ -3515,10 +3519,13 @@ } }, "node_modules/ci-info": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.5.0.tgz", - "integrity": "sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw==", - "dev": true + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.0.tgz", + "integrity": "sha512-2CpRNYmImPx+RXKLq6jko/L07phmS9I02TyqkcNU20GCF/GgaWvc58hPtjxDX8lPpkdwc9sNh72V9k00S7ezog==", + "dev": true, + "engines": { + "node": ">=8" + } }, "node_modules/cjs-module-lexer": { "version": "1.2.2", @@ -3841,9 +3848,9 @@ } }, "node_modules/cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dev": true, "dependencies": { "@types/parse-json": "^4.0.0", @@ -3954,6 +3961,16 @@ "node": ">=0.4.0" } }, + "node_modules/denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10" + } + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -4038,9 +4055,9 @@ } }, "node_modules/dotenv": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", - "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz", + "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==", "engines": { "node": ">=12" } @@ -4148,9 +4165,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", - "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", + "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -4201,14 +4218,15 @@ } }, "node_modules/eslint": { - "version": "8.25.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.25.0.tgz", - "integrity": "sha512-DVlJOZ4Pn50zcKW5bYH7GQK/9MsoQG2d5eDH0ebEkE8PbgzTTmtt/VTH9GGJ4BfeZCpBLqFfvsjX35UacUL83A==", + "version": "8.30.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.30.0.tgz", + "integrity": "sha512-MGADB39QqYuzEGov+F/qb18r4i7DohCDOfatHaxI2iGlPuC65bwG2gxgO+7DkyL38dRFaRH7RaRAgU6JKL9rMQ==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.3.3", - "@humanwhocodes/config-array": "^0.10.5", + "@eslint/eslintrc": "^1.4.0", + "@humanwhocodes/config-array": "^0.11.8", "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -4224,14 +4242,14 @@ "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "globby": "^11.1.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", @@ -4410,9 +4428,9 @@ "dev": true }, "node_modules/espree": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", - "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", "dev": true, "dependencies": { "acorn": "^8.8.0", @@ -4644,29 +4662,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/express/node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, "node_modules/express/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -4685,20 +4680,6 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, - "node_modules/express/node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -4759,9 +4740,9 @@ "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" }, "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.14.0.tgz", + "integrity": "sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -4968,21 +4949,6 @@ "url": "https://ko-fi.com/tunnckoCore/commissions" } }, - "node_modules/formidable/node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -5140,9 +5106,9 @@ "dev": true }, "node_modules/globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "version": "13.19.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", + "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -5294,9 +5260,9 @@ ] }, "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz", + "integrity": "sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==", "dev": true, "engines": { "node": ">= 4" @@ -5427,6 +5393,31 @@ "node": ">= 0.10" } }, + "node_modules/ioredis": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.2.4.tgz", + "integrity": "sha512-qIpuAEt32lZJQ0XyrloCRdlEdUUNGG9i0UOk6zgzK6igyudNWqEBxfH6OlbnOOoBBvr1WB02mm8fR55CnikRng==", + "optional": true, + "peer": true, + "dependencies": { + "@ioredis/commands": "^1.1.1", + "cluster-key-slot": "^1.1.0", + "debug": "^4.3.4", + "denque": "^2.0.1", + "lodash.defaults": "^4.2.0", + "lodash.isarguments": "^3.1.0", + "redis-errors": "^1.2.0", + "redis-parser": "^3.0.0", + "standard-as-callback": "^2.1.0" + }, + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ioredis" + } + }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -5521,6 +5512,15 @@ "node": ">=0.12.0" } }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -6064,9 +6064,9 @@ } }, "node_modules/jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, "engines": { "node": ">=6" @@ -6447,10 +6447,14 @@ } }, "node_modules/js-sdsl": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", - "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", - "dev": true + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", + "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } }, "node_modules/js-tokens": { "version": "4.0.0", @@ -6500,9 +6504,9 @@ "dev": true }, "node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.2.tgz", + "integrity": "sha512-46Tk9JiOL2z7ytNQWFLpj99RZkVgeHf87yGQKsIkaPz1qSH9UczKH1rO7K3wgRselo0tYMUNfecYpm/p1vC7tQ==", "dev": true, "bin": { "json5": "lib/cli.js" @@ -6529,35 +6533,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/jsonwebtoken": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", - "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", - "dependencies": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=4", - "npm": ">=1.4.28" - } - }, - "node_modules/jsonwebtoken/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, "node_modules/jwa": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", @@ -6609,9 +6584,9 @@ } }, "node_modules/libphonenumber-js": { - "version": "1.10.14", - "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.14.tgz", - "integrity": "sha512-McGS7GV/WjJ2KjfOGhJU1oJn29RYeo7Q+RpANRbUNMQ9gj5XArpbjurSuyYPTejFwbaUojstQ4XyWCrAzGOUXw==" + "version": "1.10.15", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.15.tgz", + "integrity": "sha512-sLeVLmWX17VCKKulc+aDIRHS95TxoTsKMRJi5s5gJdwlqNzMWcBCtSHHruVyXjqfi67daXM2SnLf2juSrdx5Sg==" }, "node_modules/lines-and-columns": { "version": "1.2.4", @@ -6648,11 +6623,25 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "optional": true, + "peer": true + }, "node_modules/lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" }, + "node_modules/lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", + "optional": true, + "peer": true + }, "node_modules/lodash.isboolean": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", @@ -6731,7 +6720,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -6811,9 +6799,9 @@ } }, "node_modules/memfs": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.7.tgz", - "integrity": "sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw==", + "version": "3.4.12", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.12.tgz", + "integrity": "sha512-BcjuQn6vfqP+k100e0E9m61Hyqa//Brp+I3f0OBmN0ATHlFA8vx3Lt8z57R3u2bPqe3WGDBC+nF72fTH7isyEw==", "dev": true, "dependencies": { "fs-monkey": "^1.0.3" @@ -6976,6 +6964,12 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -7036,9 +7030,9 @@ "dev": true }, "node_modules/node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz", + "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==", "dev": true }, "node_modules/normalize-path": { @@ -7351,15 +7345,6 @@ "node": ">= 6.0.0" } }, - "node_modules/passport-jwt": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/passport-jwt/-/passport-jwt-4.0.0.tgz", - "integrity": "sha512-BwC0n2GP/1hMVjR4QpnvqA61TxenUMlmfNjYNgK0ZAs0HK4SOQkHcSv4L328blNTLtHq7DbmvyNJiH+bn6C5Mg==", - "dependencies": { - "jsonwebtoken": "^8.2.0", - "passport-strategy": "^1.0.0" - } - }, "node_modules/passport-local": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/passport-local/-/passport-local-1.0.0.tgz", @@ -7675,9 +7660,9 @@ } }, "node_modules/prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz", + "integrity": "sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==", "dev": true, "bin": { "prettier": "bin-prettier.js" @@ -7904,9 +7889,9 @@ } }, "node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dependencies": { "side-channel": "^1.0.4" }, @@ -8026,16 +8011,39 @@ } }, "node_modules/redis": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/redis/-/redis-4.4.0.tgz", - "integrity": "sha512-tQyFG6O9iewLxxHYRyirJNklhe2QI7M/0o8q0jk7D9Z/Cxh/7oZrQyHKyjWz0TkkCls8ool/xvhL9K8zRnkaYQ==", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/redis/-/redis-4.5.1.tgz", + "integrity": "sha512-oxXSoIqMJCQVBTfxP6BNTCtDMyh9G6Vi5wjdPdV/sRKkufyZslDqCScSGcOr6XGR/reAWZefz7E4leM31RgdBA==", "dependencies": { "@redis/bloom": "1.1.0", - "@redis/client": "1.3.1", + "@redis/client": "1.4.2", "@redis/graph": "1.1.0", "@redis/json": "1.0.4", "@redis/search": "1.1.0", - "@redis/time-series": "1.0.3" + "@redis/time-series": "1.0.4" + } + }, + "node_modules/redis-errors": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", + "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==", + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/redis-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", + "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", + "optional": true, + "peer": true, + "dependencies": { + "redis-errors": "^1.0.0" + }, + "engines": { + "node": ">=4" } }, "node_modules/reflect-metadata": { @@ -8203,9 +8211,9 @@ } }, "node_modules/rxjs": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz", - "integrity": "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", + "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", "dependencies": { "tslib": "^2.1.0" } @@ -8292,7 +8300,6 @@ "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -8526,6 +8533,7 @@ "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", "dev": true }, "node_modules/split2": { @@ -8543,9 +8551,9 @@ "dev": true }, "node_modules/stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, "dependencies": { "escape-string-regexp": "^2.0.0" @@ -8563,6 +8571,13 @@ "node": ">=8" } }, + "node_modules/standard-as-callback": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", + "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==", + "optional": true, + "peer": true + }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -8660,10 +8675,9 @@ } }, "node_modules/superagent": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.2.tgz", - "integrity": "sha512-QtYZ9uaNAMexI7XWl2vAXAh0j4q9H7T0WVEI/y5qaUB3QLwxo+voUgCQ217AokJzUTIVOp0RTo7fhZrwhD7A2Q==", - "deprecated": "Please use v8.0.0 until https://github.com/visionmedia/superagent/issues/1743 is resolved", + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.6.tgz", + "integrity": "sha512-HqSe6DSIh3hEn6cJvCkaM1BLi466f1LHi4yubR0tpewlMpk4RUFFy35bKz8SsPBwYfIIJy5eclp+3tCYAuX0bw==", "dev": true, "dependencies": { "component-emitter": "^1.3.0", @@ -8671,11 +8685,11 @@ "debug": "^4.3.4", "fast-safe-stringify": "^2.1.1", "form-data": "^4.0.0", - "formidable": "^2.0.1", + "formidable": "^2.1.1", "methods": "^1.1.2", "mime": "2.6.0", "qs": "^6.11.0", - "semver": "^7.3.7" + "semver": "^7.3.8" }, "engines": { "node": ">=6.4.0 <13 || >=14" @@ -8693,29 +8707,14 @@ "node": ">=4.0.0" } }, - "node_modules/superagent/node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/supertest": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.0.tgz", - "integrity": "sha512-QgWju1cNoacP81Rv88NKkQ4oXTzGg0eNZtOoxp1ROpbS4OHY/eK5b8meShuFtdni161o5X0VQvgo7ErVyKK+Ow==", + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.3.tgz", + "integrity": "sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA==", "dev": true, "dependencies": { "methods": "^1.1.2", - "superagent": "^8.0.0" + "superagent": "^8.0.5" }, "engines": { "node": ">=6.4.0" @@ -8792,9 +8791,9 @@ } }, "node_modules/terser": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", - "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz", + "integrity": "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.2", @@ -9036,9 +9035,9 @@ } }, "node_modules/ts-loader": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.1.tgz", - "integrity": "sha512-384TYAqGs70rn9F0VBnh6BPTfhga7yFNdC5gXbQpDrBj9/KsT4iRkGqKXhziofHOlE2j6YEaiTYVGKKvPhGWvw==", + "version": "9.4.2", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.2.tgz", + "integrity": "sha512-OmlC4WVmFv5I0PpaxYb+qGeGOdm5giHU7HwDDUjw59emP2UYMHy9fFSDcYgSNoH8sXcj4hGCSEhlDZ9ULeDraA==", "dev": true, "dependencies": { "chalk": "^4.1.0", @@ -9167,9 +9166,9 @@ } }, "node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" }, "node_modules/tsutils": { "version": "3.21.0", @@ -9243,9 +9242,9 @@ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" }, "node_modules/typeorm": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.3.10.tgz", - "integrity": "sha512-VMKiM84EpJQ+Mz9xDIPqnfplWhyUy1d8ccaKdMY9obifxJOTFnv8GYVyPsGwG8Lk7Nb8MlttHyHWENGAhBA3WA==", + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.3.11.tgz", + "integrity": "sha512-pzdOyWbVuz/z8Ww6gqvBW4nylsM0KLdUCDExr2gR20/x1khGSVxQkjNV/3YqliG90jrWzrknYbYscpk8yxFJVg==", "dependencies": { "@sqltools/formatter": "^1.2.2", "app-root-path": "^3.0.0", @@ -9279,7 +9278,7 @@ "peerDependencies": { "@google-cloud/spanner": "^5.18.0", "@sap/hana-client": "^2.12.25", - "better-sqlite3": "^7.1.2", + "better-sqlite3": "^7.1.2 || ^8.0.0", "hdb-pool": "^0.1.6", "ioredis": "^5.0.4", "mongodb": "^3.6.0", @@ -9407,9 +9406,9 @@ } }, "node_modules/typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", + "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", "devOptional": true, "bin": { "tsc": "bin/tsc", @@ -9581,10 +9580,11 @@ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/webpack": { - "version": "5.74.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", - "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", + "version": "5.75.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", + "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", "dev": true, + "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^0.0.51", @@ -9850,9 +9850,9 @@ } }, "node_modules/yargs": { - "version": "17.6.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.0.tgz", - "integrity": "sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g==", + "version": "17.6.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", + "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -9860,7 +9860,7 @@ "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" + "yargs-parser": "^21.1.1" }, "engines": { "node": ">=12" @@ -10026,27 +10026,27 @@ } }, "@babel/compat-data": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.4.tgz", - "integrity": "sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.5.tgz", + "integrity": "sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==", "dev": true }, "@babel/core": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.6.tgz", - "integrity": "sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.5.tgz", + "integrity": "sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==", "dev": true, "requires": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.6", - "@babel/helper-compilation-targets": "^7.19.3", - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helpers": "^7.19.4", - "@babel/parser": "^7.19.6", + "@babel/generator": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-module-transforms": "^7.20.2", + "@babel/helpers": "^7.20.5", + "@babel/parser": "^7.20.5", "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.6", - "@babel/types": "^7.19.4", + "@babel/traverse": "^7.20.5", + "@babel/types": "^7.20.5", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -10063,12 +10063,12 @@ } }, "@babel/generator": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.6.tgz", - "integrity": "sha512-oHGRUQeoX1QrKeJIKVe0hwjGqNnVYsM5Nep5zo0uE0m42sLH+Fsd2pStJ5sRM1bNyTUUoz0pe2lTeMJrb/taTA==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz", + "integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==", "dev": true, "requires": { - "@babel/types": "^7.19.4", + "@babel/types": "^7.20.5", "@jridgewell/gen-mapping": "^0.3.2", "jsesc": "^2.5.1" }, @@ -10087,12 +10087,12 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz", - "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", + "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", "dev": true, "requires": { - "@babel/compat-data": "^7.19.3", + "@babel/compat-data": "^7.20.0", "@babel/helper-validator-option": "^7.18.6", "browserslist": "^4.21.3", "semver": "^6.3.0" @@ -10141,34 +10141,34 @@ } }, "@babel/helper-module-transforms": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz", - "integrity": "sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", + "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.19.4", + "@babel/helper-simple-access": "^7.20.2", "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.19.1", "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.6", - "@babel/types": "^7.19.4" + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.2" } }, "@babel/helper-plugin-utils": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", - "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", "dev": true }, "@babel/helper-simple-access": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", - "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", "dev": true, "requires": { - "@babel/types": "^7.19.4" + "@babel/types": "^7.20.2" } }, "@babel/helper-split-export-declaration": { @@ -10199,14 +10199,14 @@ "dev": true }, "@babel/helpers": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.4.tgz", - "integrity": "sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==", + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz", + "integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==", "dev": true, "requires": { "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.4", - "@babel/types": "^7.19.4" + "@babel/traverse": "^7.20.5", + "@babel/types": "^7.20.5" } }, "@babel/highlight": { @@ -10279,9 +10279,9 @@ } }, "@babel/parser": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.6.tgz", - "integrity": "sha512-h1IUp81s2JYJ3mRkdxJgs4UvmSsRvDrx5ICSJbPvtWYv5i1nTBGcBpnog+89rAFMwvvru6E5NUHdBe01UeSzYA==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz", + "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==", "dev": true }, "@babel/plugin-syntax-async-generators": { @@ -10393,12 +10393,12 @@ } }, "@babel/plugin-syntax-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", - "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", + "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.19.0" } }, "@babel/template": { @@ -10413,19 +10413,19 @@ } }, "@babel/traverse": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.6.tgz", - "integrity": "sha512-6l5HrUCzFM04mfbG09AagtYyR2P0B71B1wN7PfSPiksDPz2k5H9CBC1tcZpz2M8OxbKTPccByoOJ22rUKbpmQQ==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz", + "integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==", "dev": true, "requires": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.6", + "@babel/generator": "^7.20.5", "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-function-name": "^7.19.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.19.6", - "@babel/types": "^7.19.4", + "@babel/parser": "^7.20.5", + "@babel/types": "^7.20.5", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -10439,9 +10439,9 @@ } }, "@babel/types": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.4.tgz", - "integrity": "sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz", + "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", "dev": true, "requires": { "@babel/helper-string-parser": "^7.19.4", @@ -10484,15 +10484,15 @@ } }, "@eslint/eslintrc": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", - "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.0.tgz", + "integrity": "sha512-7yfvXy6MWLgWSFsLhz5yH3iQ52St8cdUY6FoGieKkRDVxuxmrNuUetIuu6cmjNWwniUHiWXjxCr5tTXDrbYS5A==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.4.0", - "globals": "^13.15.0", + "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -10521,14 +10521,14 @@ } }, "@humanwhocodes/config-array": { - "version": "0.10.7", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz", - "integrity": "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==", + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" } }, "@humanwhocodes/module-importer": { @@ -10543,6 +10543,13 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "@ioredis/commands": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", + "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==", + "optional": true, + "peer": true + }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -10969,9 +10976,9 @@ } }, "@nestjs/cli": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-9.1.4.tgz", - "integrity": "sha512-cvN4DcLzaqFzKRmpU3tOeLmw7+1p4XXsFLyWgteId0Szf6cAk5KJpD5jl2Kw7f39vNw9Pss8yiJ1q1CD/fcbwQ==", + "version": "9.1.5", + "resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-9.1.5.tgz", + "integrity": "sha512-rSp26+Nv7PFtYrRSP18Gv5ZK8rRSc2SCCF5wh4SdZaVGgkxShpNq9YEfI+ik/uziN3KC5o74ppYRXGj+aHGVsA==", "dev": true, "requires": { "@angular-devkit/core": "14.2.2", @@ -10993,26 +11000,58 @@ "tree-kill": "1.2.2", "tsconfig-paths": "4.1.0", "tsconfig-paths-webpack-plugin": "4.0.0", - "typescript": "4.8.3", + "typescript": "4.8.4", "webpack": "5.74.0", "webpack-node-externals": "3.0.0" }, "dependencies": { "typescript": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz", - "integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==", + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", + "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", "dev": true + }, + "webpack": { + "version": "5.74.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", + "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + } } } }, "@nestjs/common": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-9.1.4.tgz", - "integrity": "sha512-hmGTZ8ShKFDqqlU02uU8e/8PNE4bnES4pcFa6s/T1pLDYWjyf/75Klunro1W4aQPHcxnnohBmB27WxMqFTPEfw==", + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-9.2.1.tgz", + "integrity": "sha512-nZuo3oDsSSlC5mti/M2aCWTEIfHPGDXmBwWgPeCpRbrNz3IWd109rkajll+yxgidVjznAdBS9y00JkAVJblNYw==", "requires": { "iterare": "1.2.1", - "tslib": "2.4.0", + "tslib": "2.4.1", "uuid": "9.0.0" } }, @@ -11027,11 +11066,6 @@ "uuid": "8.3.2" }, "dependencies": { - "dotenv": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz", - "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==" - }, "uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", @@ -11040,38 +11074,19 @@ } }, "@nestjs/core": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-9.1.4.tgz", - "integrity": "sha512-S6KpGeKotPYh126hhRqYLhvg9lxSbAmGfEbK8m09crIK7CYP05t32KtT6n12xl5/iva1G4Ch87Z/3rYP76etUg==", + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-9.2.1.tgz", + "integrity": "sha512-a9GkXuu8uXgNgCVW+17iI8kLCltO+HwHpU2IhR+32JKnN2WEQ1YEWU4t3GJ2MNq44YkjIw9zrKvFkjJBlYrNbQ==", "requires": { "@nuxtjs/opencollective": "0.3.2", "fast-safe-stringify": "2.1.1", "iterare": "1.2.1", "object-hash": "3.0.0", "path-to-regexp": "3.2.0", - "tslib": "2.4.0", + "tslib": "2.4.1", "uuid": "9.0.0" } }, - "@nestjs/jwt": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@nestjs/jwt/-/jwt-9.0.0.tgz", - "integrity": "sha512-ZsXGY/wMYKzEhymw2+dxiwrHTRKIKrGszx6r2EjQqNLypdXMQu0QrujwZJ8k3+XQV4snmuJwwNakQoA2ILfq8w==", - "requires": { - "@types/jsonwebtoken": "8.5.8", - "jsonwebtoken": "8.5.1" - }, - "dependencies": { - "@types/jsonwebtoken": { - "version": "8.5.8", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.8.tgz", - "integrity": "sha512-zm6xBQpFDIDM6o9r6HSgDeIcLy82TKWctCXEPbJJcXb5AKmi5BNNdLXneixK4lplX3PqIVcwLBCGE/kAGnlD4A==", - "requires": { - "@types/node": "*" - } - } - } - }, "@nestjs/mapped-types": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-1.2.0.tgz", @@ -11085,73 +11100,15 @@ "requires": {} }, "@nestjs/platform-express": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-9.1.4.tgz", - "integrity": "sha512-SLJWDa6V54QrUvzKI4Eyt7gyrjV7F9FY1uHFihshjmQfpf0ebCGacR9jzNwf01aHl0BJX3DUn/KYteBjz6DJXw==", + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-9.2.1.tgz", + "integrity": "sha512-7PecaXt8lrdS1p6Vb1X/am3GGv+EO1VahyDzaEGOK6C0zwhc0VPfLtwihkjjfhS6BjpRIXXgviwEjONUvxVZnA==", "requires": { - "body-parser": "1.20.0", + "body-parser": "1.20.1", "cors": "2.8.5", - "express": "4.18.1", + "express": "4.18.2", "multer": "1.4.4-lts.1", - "tslib": "2.4.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.0", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.10.3", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - } + "tslib": "2.4.1" } }, "@nestjs/platform-socket.io": { @@ -11262,12 +11219,12 @@ } }, "@nestjs/testing": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-9.1.4.tgz", - "integrity": "sha512-gO6b9QJyUajh38DNdss9gSE0UO7x60Jh10W4SwHEjQT1W+yxaEWr3aLyuQItTvUVY6C28XKFLTykMpr8GO28Ug==", + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-9.2.1.tgz", + "integrity": "sha512-lemXZdRSuqoZ87l0orCrS/c7gqwxeduIFOd21g9g2RUeQ4qlWPegbQDKASzbfC28klPyrgJLW4MNq7uv2JwV8w==", "dev": true, "requires": { - "tslib": "2.4.0" + "tslib": "2.4.1" } }, "@nestjs/typeorm": { @@ -11398,9 +11355,9 @@ "requires": {} }, "@redis/client": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@redis/client/-/client-1.3.1.tgz", - "integrity": "sha512-FKEHpOu7Q4+cuM6VWjA54988K5jkqOxvhvj2hEGSx086lvKwXyjzO7Lya7hcirZ0/Db8FLBJN7UXsJuyoNWPJg==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@redis/client/-/client-1.4.2.tgz", + "integrity": "sha512-oUdEjE0I7JS5AyaAjkD3aOXn9NhO7XKyPyXEyrgFDu++VrVBHUPnV6dgEya9TcMuj5nIJRuCzCm8ZP+c9zCHPw==", "requires": { "cluster-key-slot": "1.1.1", "generic-pool": "3.9.0", @@ -11426,21 +11383,21 @@ "requires": {} }, "@redis/time-series": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-1.0.3.tgz", - "integrity": "sha512-OFp0q4SGrTH0Mruf6oFsHGea58u8vS/iI5+NpYdicaM+7BgqBZH8FFvNZ8rYYLrUO/QRqMq72NpXmxLVNcdmjA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-1.0.4.tgz", + "integrity": "sha512-ThUIgo2U/g7cCuZavucQTQzA9g9JbDDY2f64u3AbAoz/8vE2lt2U37LamDUVChhaDA3IRT9R6VvJwqnUfTJzng==", "requires": {} }, "@sinclair/typebox": { - "version": "0.24.47", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.47.tgz", - "integrity": "sha512-J4Xw0xYK4h7eC34MNOPQi6IkNxGRck6n4VJpWDzXIFVTW8I/D43Gf+NfWz/v/7NHlzWOPd3+T4PJ4OqklQ2u7A==", + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", "dev": true }, "@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", "dev": true, "requires": { "type-detect": "4.0.8" @@ -11490,9 +11447,9 @@ "devOptional": true }, "@types/babel__core": { - "version": "7.1.19", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", - "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", + "version": "7.1.20", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.20.tgz", + "integrity": "sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -11522,9 +11479,9 @@ } }, "@types/babel__traverse": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.2.tgz", - "integrity": "sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==", + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", + "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", "dev": true, "requires": { "@babel/types": "^7.3.0" @@ -11567,9 +11524,9 @@ } }, "@types/eslint": { - "version": "8.4.7", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.7.tgz", - "integrity": "sha512-ehM7cCt2RSFs42mb+lcmhFT9ouIlV92PuaeRGn8N8c98oMjG4Z5pJHA9b1QiCcuqnbPSHcyfiD3mlhqMaHsQIw==", + "version": "8.4.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", + "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", "dev": true, "requires": { "@types/estree": "*", @@ -11593,12 +11550,12 @@ "dev": true }, "@types/express": { - "version": "4.17.14", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", - "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.15.tgz", + "integrity": "sha512-Yv0k4bXGOH+8a+7bELd2PqHQsuiANB+A8a4gnQrkRWzrkKlb6KHaVvyXhqs04sVW/OWlbPyYxRgYlIXLfrufMQ==", "requires": { "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", + "@types/express-serve-static-core": "^4.17.31", "@types/qs": "*", "@types/serve-static": "*" } @@ -11670,15 +11627,6 @@ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, - "@types/jsonwebtoken": { - "version": "8.5.9", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.9.tgz", - "integrity": "sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, "@types/mime": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", @@ -11694,9 +11642,9 @@ } }, "@types/node": { - "version": "16.11.68", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.68.tgz", - "integrity": "sha512-JkRpuVz3xCNCWaeQ5EHLR/6woMbHZz/jZ7Kmc63AkU+1HxnoUugzSWMck7dsR4DvNYX8jp9wTi9K7WvnxOIQZQ==" + "version": "16.18.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.10.tgz", + "integrity": "sha512-XU1+v7h81p7145ddPfjv7jtWvkSilpcnON3mQ+bDi9Yuf7OI56efOglXRyXWgQ57xH3fEQgh7WOJMncRHVew5w==" }, "@types/parse-json": { "version": "4.0.0", @@ -11713,17 +11661,6 @@ "@types/express": "*" } }, - "@types/passport-jwt": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@types/passport-jwt/-/passport-jwt-3.0.7.tgz", - "integrity": "sha512-qRQ4qlww1Yhs3IaioDKrsDNmKy6gLDLgFsGwpCnc2YqWovO2Oxu9yCQdWHMJafQ7UIuOba4C4/TNXcGkQfEjlQ==", - "dev": true, - "requires": { - "@types/express": "*", - "@types/jsonwebtoken": "*", - "@types/passport-strategy": "*" - } - }, "@types/passport-local": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/@types/passport-local/-/passport-local-1.0.34.tgz", @@ -11770,9 +11707,9 @@ } }, "@types/semver": { - "version": "7.3.12", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.12.tgz", - "integrity": "sha512-WwA1MW0++RfXmCr12xeYOOC5baSC9mSb0ZqCquFzKhcoF4TvHu5MKOuXsncgZcpVFhB1pXd5hZmM0ryAoCp12A==", + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", "dev": true }, "@types/serve-static": { @@ -11791,9 +11728,9 @@ "dev": true }, "@types/superagent": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.15.tgz", - "integrity": "sha512-mu/N4uvfDN2zVQQ5AYJI/g4qxn2bHB6521t1UuH09ShNWjebTqN0ZFuYK9uYjcgmI0dTQEs+Owi1EO6U0OkOZQ==", + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.16.tgz", + "integrity": "sha512-tLfnlJf6A5mB6ddqF159GqcDizfzbMUB1/DeT59/wBNqzRTNNKsaw79A/1TZ84X+f/EwWH8FeuSkjlCLyqS/zQ==", "dev": true, "requires": { "@types/cookiejar": "*", @@ -11810,14 +11747,14 @@ } }, "@types/validator": { - "version": "13.7.9", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.9.tgz", - "integrity": "sha512-y5KJ1PjGXPpU4CZ7lThDu31s+FqvzhqwMOR6Go/x6xaQMFjgzwfzfOvCwABsylr/5n8sB1qFQm1Vi7TaCB8P+A==" + "version": "13.7.10", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.10.tgz", + "integrity": "sha512-t1yxFAR2n0+VO6hd/FJ9F2uezAZVWHLmpmlJzm1eX03+H7+HsuTAp7L8QJs+2pQCfWkP1+EXsGK9Z9v7o/qPVQ==" }, "@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", + "version": "17.0.17", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.17.tgz", + "integrity": "sha512-72bWxFKTK6uwWJAVT+3rF6Jo6RTojiJ27FQo8Rf60AL+VZbzoVPnMFhKsUnbjR8A3BTCYQ7Mv3hnl8T0A+CX9g==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -11830,69 +11767,70 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "5.40.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.40.1.tgz", - "integrity": "sha512-FsWboKkWdytGiXT5O1/R9j37YgcjO8MKHSUmWnIEjVaz0krHkplPnYi7mwdb+5+cs0toFNQb0HIrN7zONdIEWg==", + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.46.1.tgz", + "integrity": "sha512-YpzNv3aayRBwjs4J3oz65eVLXc9xx0PDbIRisHj+dYhvBn02MjYOD96P8YGiWEIFBrojaUjxvkaUpakD82phsA==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.40.1", - "@typescript-eslint/type-utils": "5.40.1", - "@typescript-eslint/utils": "5.40.1", + "@typescript-eslint/scope-manager": "5.46.1", + "@typescript-eslint/type-utils": "5.46.1", + "@typescript-eslint/utils": "5.46.1", "debug": "^4.3.4", "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", "regexpp": "^3.2.0", "semver": "^7.3.7", "tsutils": "^3.21.0" } }, "@typescript-eslint/parser": { - "version": "5.40.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.40.1.tgz", - "integrity": "sha512-IK6x55va5w4YvXd4b3VrXQPldV9vQTxi5ov+g4pMANsXPTXOcfjx08CRR1Dfrcc51syPtXHF5bgLlMHYFrvQtg==", + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.46.1.tgz", + "integrity": "sha512-RelQ5cGypPh4ySAtfIMBzBGyrNerQcmfA1oJvPj5f+H4jI59rl9xxpn4bonC0tQvUKOEN7eGBFWxFLK3Xepneg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.40.1", - "@typescript-eslint/types": "5.40.1", - "@typescript-eslint/typescript-estree": "5.40.1", + "@typescript-eslint/scope-manager": "5.46.1", + "@typescript-eslint/types": "5.46.1", + "@typescript-eslint/typescript-estree": "5.46.1", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "5.40.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.40.1.tgz", - "integrity": "sha512-jkn4xsJiUQucI16OLCXrLRXDZ3afKhOIqXs4R3O+M00hdQLKR58WuyXPZZjhKLFCEP2g+TXdBRtLQ33UfAdRUg==", + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.46.1.tgz", + "integrity": "sha512-iOChVivo4jpwUdrJZyXSMrEIM/PvsbbDOX1y3UCKjSgWn+W89skxWaYXACQfxmIGhPVpRWK/VWPYc+bad6smIA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.40.1", - "@typescript-eslint/visitor-keys": "5.40.1" + "@typescript-eslint/types": "5.46.1", + "@typescript-eslint/visitor-keys": "5.46.1" } }, "@typescript-eslint/type-utils": { - "version": "5.40.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.40.1.tgz", - "integrity": "sha512-DLAs+AHQOe6n5LRraXiv27IYPhleF0ldEmx6yBqBgBLaNRKTkffhV1RPsjoJBhVup2zHxfaRtan8/YRBgYhU9Q==", + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.46.1.tgz", + "integrity": "sha512-V/zMyfI+jDmL1ADxfDxjZ0EMbtiVqj8LUGPAGyBkXXStWmCUErMpW873zEHsyguWCuq2iN4BrlWUkmuVj84yng==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "5.40.1", - "@typescript-eslint/utils": "5.40.1", + "@typescript-eslint/typescript-estree": "5.46.1", + "@typescript-eslint/utils": "5.46.1", "debug": "^4.3.4", "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { - "version": "5.40.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.40.1.tgz", - "integrity": "sha512-Icg9kiuVJSwdzSQvtdGspOlWNjVDnF3qVIKXdJ103o36yRprdl3Ge5cABQx+csx960nuMF21v8qvO31v9t3OHw==", + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.46.1.tgz", + "integrity": "sha512-Z5pvlCaZgU+93ryiYUwGwLl9AQVB/PQ1TsJ9NZ/gHzZjN7g9IAn6RSDkpCV8hqTwAiaj6fmCcKSQeBPlIpW28w==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.40.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.40.1.tgz", - "integrity": "sha512-5QTP/nW5+60jBcEPfXy/EZL01qrl9GZtbgDZtDPlfW5zj/zjNrdI2B5zMUHmOsfvOr2cWqwVdWjobCiHcedmQA==", + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.46.1.tgz", + "integrity": "sha512-j9W4t67QiNp90kh5Nbr1w92wzt+toiIsaVPnEblB2Ih2U9fqBTyqV9T3pYWZBRt6QoMh/zVWP59EpuCjc4VRBg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.40.1", - "@typescript-eslint/visitor-keys": "5.40.1", + "@typescript-eslint/types": "5.46.1", + "@typescript-eslint/visitor-keys": "5.46.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -11901,28 +11839,28 @@ } }, "@typescript-eslint/utils": { - "version": "5.40.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.40.1.tgz", - "integrity": "sha512-a2TAVScoX9fjryNrW6BZRnreDUszxqm9eQ9Esv8n5nXApMW0zeANUYlwh/DED04SC/ifuBvXgZpIK5xeJHQ3aw==", + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.46.1.tgz", + "integrity": "sha512-RBdBAGv3oEpFojaCYT4Ghn4775pdjvwfDOfQ2P6qzNVgQOVrnSPe5/Pb88kv7xzYQjoio0eKHKB9GJ16ieSxvA==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.40.1", - "@typescript-eslint/types": "5.40.1", - "@typescript-eslint/typescript-estree": "5.40.1", + "@typescript-eslint/scope-manager": "5.46.1", + "@typescript-eslint/types": "5.46.1", + "@typescript-eslint/typescript-estree": "5.46.1", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0", "semver": "^7.3.7" } }, "@typescript-eslint/visitor-keys": { - "version": "5.40.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.40.1.tgz", - "integrity": "sha512-A2DGmeZ+FMja0geX5rww+DpvILpwo1OsiQs0M+joPWJYsiEFBLsH0y1oFymPNul6Z5okSmHpP4ivkc2N0Cgfkw==", + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.46.1.tgz", + "integrity": "sha512-jczZ9noovXwy59KjRTk1OftT78pwygdcmCuBf8yMoWt/8O8l+6x2LSEze0E4TeepXK4MezW3zGSyoDRZK7Y9cg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.40.1", + "@typescript-eslint/types": "5.46.1", "eslint-visitor-keys": "^3.3.0" } }, @@ -12094,9 +12032,9 @@ } }, "acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", "devOptional": true }, "acorn-import-assertions": { @@ -12182,9 +12120,9 @@ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" }, "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "requires": { "normalize-path": "^3.0.0", @@ -12368,9 +12306,9 @@ } }, "body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "requires": { "bytes": "3.1.2", "content-type": "~1.0.4", @@ -12380,7 +12318,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.10.3", + "qs": "6.11.0", "raw-body": "2.5.1", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -12508,9 +12446,9 @@ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, "caniuse-lite": { - "version": "1.0.30001422", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001422.tgz", - "integrity": "sha512-hSesn02u1QacQHhaxl/kNMZwqVG35Sz/8DgvmgedxSH8z9UUpcDYSPYgsj3x5dQNRcNp6BwpSfQfVzYUTm+fog==", + "version": "1.0.30001439", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001439.tgz", + "integrity": "sha512-1MgUzEkoMO6gKfXflStpYgZDlFM7M/ck/bgfVCACO5vnAf0fXoNVHdWtqGU+MYca+4bL9Z5bpOVmR33cWW9G2A==", "dev": true }, "chalk": { @@ -12558,9 +12496,9 @@ "dev": true }, "ci-info": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.5.0.tgz", - "integrity": "sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.0.tgz", + "integrity": "sha512-2CpRNYmImPx+RXKLq6jko/L07phmS9I02TyqkcNU20GCF/GgaWvc58hPtjxDX8lPpkdwc9sNh72V9k00S7ezog==", "dev": true }, "cjs-module-lexer": { @@ -12810,9 +12748,9 @@ } }, "cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dev": true, "requires": { "@types/parse-json": "^4.0.0", @@ -12890,6 +12828,13 @@ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true }, + "denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "optional": true, + "peer": true + }, "depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -12952,9 +12897,9 @@ } }, "dotenv": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", - "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==" + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz", + "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==" }, "dotenv-expand": { "version": "8.0.3", @@ -13040,9 +12985,9 @@ "integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==" }, "enhanced-resolve": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", - "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", + "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", "dev": true, "requires": { "graceful-fs": "^4.2.4", @@ -13081,14 +13026,15 @@ "dev": true }, "eslint": { - "version": "8.25.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.25.0.tgz", - "integrity": "sha512-DVlJOZ4Pn50zcKW5bYH7GQK/9MsoQG2d5eDH0ebEkE8PbgzTTmtt/VTH9GGJ4BfeZCpBLqFfvsjX35UacUL83A==", + "version": "8.30.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.30.0.tgz", + "integrity": "sha512-MGADB39QqYuzEGov+F/qb18r4i7DohCDOfatHaxI2iGlPuC65bwG2gxgO+7DkyL38dRFaRH7RaRAgU6JKL9rMQ==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.3.3", - "@humanwhocodes/config-array": "^0.10.5", + "@eslint/eslintrc": "^1.4.0", + "@humanwhocodes/config-array": "^0.11.8", "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -13104,14 +13050,14 @@ "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "globby": "^11.1.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", @@ -13231,9 +13177,9 @@ "dev": true }, "espree": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", - "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", "dev": true, "requires": { "acorn": "^8.8.0", @@ -13378,25 +13324,6 @@ "vary": "~1.1.2" }, "dependencies": { - "body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - } - }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -13414,14 +13341,6 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "requires": { - "side-channel": "^1.0.4" - } } } }, @@ -13514,9 +13433,9 @@ "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" }, "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.14.0.tgz", + "integrity": "sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==", "dev": true, "requires": { "reusify": "^1.0.4" @@ -13674,17 +13593,6 @@ "hexoid": "^1.0.0", "once": "^1.4.0", "qs": "^6.11.0" - }, - "dependencies": { - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - } } }, "forwarded": { @@ -13798,9 +13706,9 @@ "dev": true }, "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "version": "13.19.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", + "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -13899,9 +13807,9 @@ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz", + "integrity": "sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==", "dev": true }, "import-fresh": { @@ -13998,6 +13906,24 @@ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", "dev": true }, + "ioredis": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.2.4.tgz", + "integrity": "sha512-qIpuAEt32lZJQ0XyrloCRdlEdUUNGG9i0UOk6zgzK6igyudNWqEBxfH6OlbnOOoBBvr1WB02mm8fR55CnikRng==", + "optional": true, + "peer": true, + "requires": { + "@ioredis/commands": "^1.1.1", + "cluster-key-slot": "^1.1.0", + "debug": "^4.3.4", + "denque": "^2.0.1", + "lodash.defaults": "^4.2.0", + "lodash.isarguments": "^3.1.0", + "redis-errors": "^1.2.0", + "redis-parser": "^3.0.0", + "standard-as-callback": "^2.1.0" + } + }, "ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -14065,6 +13991,12 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -14467,9 +14399,9 @@ } }, "jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, "requires": {} }, @@ -14769,9 +14701,9 @@ } }, "js-sdsl": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", - "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", + "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", "dev": true }, "js-tokens": { @@ -14813,9 +14745,9 @@ "dev": true }, "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.2.tgz", + "integrity": "sha512-46Tk9JiOL2z7ytNQWFLpj99RZkVgeHf87yGQKsIkaPz1qSH9UczKH1rO7K3wgRselo0tYMUNfecYpm/p1vC7tQ==", "dev": true }, "jsonc-parser": { @@ -14834,30 +14766,6 @@ "universalify": "^2.0.0" } }, - "jsonwebtoken": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", - "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", - "requires": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^5.6.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, "jwa": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", @@ -14900,9 +14808,9 @@ } }, "libphonenumber-js": { - "version": "1.10.14", - "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.14.tgz", - "integrity": "sha512-McGS7GV/WjJ2KjfOGhJU1oJn29RYeo7Q+RpANRbUNMQ9gj5XArpbjurSuyYPTejFwbaUojstQ4XyWCrAzGOUXw==" + "version": "1.10.15", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.15.tgz", + "integrity": "sha512-sLeVLmWX17VCKKulc+aDIRHS95TxoTsKMRJi5s5gJdwlqNzMWcBCtSHHruVyXjqfi67daXM2SnLf2juSrdx5Sg==" }, "lines-and-columns": { "version": "1.2.4", @@ -14930,11 +14838,25 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "optional": true, + "peer": true + }, "lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" }, + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", + "optional": true, + "peer": true + }, "lodash.isboolean": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", @@ -15003,7 +14925,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "requires": { "yallist": "^4.0.0" } @@ -15061,9 +14982,9 @@ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" }, "memfs": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.7.tgz", - "integrity": "sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw==", + "version": "3.4.12", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.12.tgz", + "integrity": "sha512-BcjuQn6vfqP+k100e0E9m61Hyqa//Brp+I3f0OBmN0ATHlFA8vx3Lt8z57R3u2bPqe3WGDBC+nF72fTH7isyEw==", "dev": true, "requires": { "fs-monkey": "^1.0.3" @@ -15187,6 +15108,12 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, "negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -15233,9 +15160,9 @@ "dev": true }, "node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz", + "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==", "dev": true }, "normalize-path": { @@ -15464,15 +15391,6 @@ "passport-oauth2": "^1.4.0" } }, - "passport-jwt": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/passport-jwt/-/passport-jwt-4.0.0.tgz", - "integrity": "sha512-BwC0n2GP/1hMVjR4QpnvqA61TxenUMlmfNjYNgK0ZAs0HK4SOQkHcSv4L328blNTLtHq7DbmvyNJiH+bn6C5Mg==", - "requires": { - "jsonwebtoken": "^8.2.0", - "passport-strategy": "^1.0.0" - } - }, "passport-local": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/passport-local/-/passport-local-1.0.0.tgz", @@ -15698,9 +15616,9 @@ "dev": true }, "prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz", + "integrity": "sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==", "dev": true }, "prettier-linter-helpers": { @@ -15871,9 +15789,9 @@ } }, "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "requires": { "side-channel": "^1.0.4" } @@ -15960,16 +15878,33 @@ } }, "redis": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/redis/-/redis-4.4.0.tgz", - "integrity": "sha512-tQyFG6O9iewLxxHYRyirJNklhe2QI7M/0o8q0jk7D9Z/Cxh/7oZrQyHKyjWz0TkkCls8ool/xvhL9K8zRnkaYQ==", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/redis/-/redis-4.5.1.tgz", + "integrity": "sha512-oxXSoIqMJCQVBTfxP6BNTCtDMyh9G6Vi5wjdPdV/sRKkufyZslDqCScSGcOr6XGR/reAWZefz7E4leM31RgdBA==", "requires": { "@redis/bloom": "1.1.0", - "@redis/client": "1.3.1", + "@redis/client": "1.4.2", "@redis/graph": "1.1.0", "@redis/json": "1.0.4", "@redis/search": "1.1.0", - "@redis/time-series": "1.0.3" + "@redis/time-series": "1.0.4" + } + }, + "redis-errors": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", + "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==", + "optional": true, + "peer": true + }, + "redis-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", + "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", + "optional": true, + "peer": true, + "requires": { + "redis-errors": "^1.0.0" } }, "reflect-metadata": { @@ -16079,9 +16014,9 @@ } }, "rxjs": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz", - "integrity": "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", + "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", "requires": { "tslib": "^2.1.0" } @@ -16143,7 +16078,6 @@ "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, "requires": { "lru-cache": "^6.0.0" } @@ -16352,9 +16286,9 @@ "dev": true }, "stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, "requires": { "escape-string-regexp": "^2.0.0" @@ -16368,6 +16302,13 @@ } } }, + "standard-as-callback": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", + "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==", + "optional": true, + "peer": true + }, "statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -16440,9 +16381,9 @@ "dev": true }, "superagent": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.2.tgz", - "integrity": "sha512-QtYZ9uaNAMexI7XWl2vAXAh0j4q9H7T0WVEI/y5qaUB3QLwxo+voUgCQ217AokJzUTIVOp0RTo7fhZrwhD7A2Q==", + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.6.tgz", + "integrity": "sha512-HqSe6DSIh3hEn6cJvCkaM1BLi466f1LHi4yubR0tpewlMpk4RUFFy35bKz8SsPBwYfIIJy5eclp+3tCYAuX0bw==", "dev": true, "requires": { "component-emitter": "^1.3.0", @@ -16450,11 +16391,11 @@ "debug": "^4.3.4", "fast-safe-stringify": "^2.1.1", "form-data": "^4.0.0", - "formidable": "^2.0.1", + "formidable": "^2.1.1", "methods": "^1.1.2", "mime": "2.6.0", "qs": "^6.11.0", - "semver": "^7.3.7" + "semver": "^7.3.8" }, "dependencies": { "mime": { @@ -16462,26 +16403,17 @@ "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } } } }, "supertest": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.0.tgz", - "integrity": "sha512-QgWju1cNoacP81Rv88NKkQ4oXTzGg0eNZtOoxp1ROpbS4OHY/eK5b8meShuFtdni161o5X0VQvgo7ErVyKK+Ow==", + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.3.tgz", + "integrity": "sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA==", "dev": true, "requires": { "methods": "^1.1.2", - "superagent": "^8.0.0" + "superagent": "^8.0.5" } }, "supports-color": { @@ -16531,9 +16463,9 @@ } }, "terser": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", - "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz", + "integrity": "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==", "dev": true, "requires": { "@jridgewell/source-map": "^0.3.2", @@ -16692,9 +16624,9 @@ } }, "ts-loader": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.1.tgz", - "integrity": "sha512-384TYAqGs70rn9F0VBnh6BPTfhga7yFNdC5gXbQpDrBj9/KsT4iRkGqKXhziofHOlE2j6YEaiTYVGKKvPhGWvw==", + "version": "9.4.2", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.2.tgz", + "integrity": "sha512-OmlC4WVmFv5I0PpaxYb+qGeGOdm5giHU7HwDDUjw59emP2UYMHy9fFSDcYgSNoH8sXcj4hGCSEhlDZ9ULeDraA==", "dev": true, "requires": { "chalk": "^4.1.0", @@ -16779,9 +16711,9 @@ } }, "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" }, "tsutils": { "version": "3.21.0", @@ -16836,9 +16768,9 @@ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" }, "typeorm": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.3.10.tgz", - "integrity": "sha512-VMKiM84EpJQ+Mz9xDIPqnfplWhyUy1d8ccaKdMY9obifxJOTFnv8GYVyPsGwG8Lk7Nb8MlttHyHWENGAhBA3WA==", + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.3.11.tgz", + "integrity": "sha512-pzdOyWbVuz/z8Ww6gqvBW4nylsM0KLdUCDExr2gR20/x1khGSVxQkjNV/3YqliG90jrWzrknYbYscpk8yxFJVg==", "requires": { "@sqltools/formatter": "^1.2.2", "app-root-path": "^3.0.0", @@ -16890,9 +16822,9 @@ } }, "typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", + "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", "devOptional": true }, "uid-safe": { @@ -17014,10 +16946,11 @@ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "webpack": { - "version": "5.74.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", - "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", + "version": "5.75.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", + "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", "dev": true, + "peer": true, "requires": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^0.0.51", @@ -17196,9 +17129,9 @@ "dev": true }, "yargs": { - "version": "17.6.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.0.tgz", - "integrity": "sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g==", + "version": "17.6.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", + "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", "requires": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -17206,7 +17139,7 @@ "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" + "yargs-parser": "^21.1.1" } }, "yargs-parser": { diff --git a/srcs/requirements/nestjs/api_back/package.json b/srcs/requirements/nestjs/api_back/package.json index cb6550fb..a75c646c 100644 --- a/srcs/requirements/nestjs/api_back/package.json +++ b/srcs/requirements/nestjs/api_back/package.json @@ -24,7 +24,6 @@ "@nestjs/common": "^9.0.0", "@nestjs/config": "^2.2.0", "@nestjs/core": "^9.0.0", - "@nestjs/jwt": "^9.0.0", "@nestjs/mapped-types": "^1.2.0", "@nestjs/passport": "^9.0.0", "@nestjs/platform-express": "^9.0.0", @@ -32,7 +31,6 @@ "@nestjs/typeorm": "^9.0.1", "@nestjs/websockets": "^9.2.1", "@types/express-session": "^1.17.5", - "@types/redis": "^4.0.11", "@types/validator": "^13.7.9", "class-transformer": "^0.5.1", "class-validator": "^0.13.2", @@ -43,7 +41,6 @@ "otplib": "^12.0.1", "passport": "^0.6.0", "passport-42": "^1.2.6", - "passport-jwt": "^4.0.0", "passport-local": "^1.0.0", "pg": "^8.8.0", "qrcode": "^1.5.1", @@ -63,7 +60,6 @@ "@types/jest": "28.1.8", "@types/multer": "^1.4.7", "@types/node": "^16.0.0", - "@types/passport-jwt": "^3.0.7", "@types/passport-local": "^1.0.34", "@types/supertest": "^2.0.11", "@typescript-eslint/eslint-plugin": "^5.0.0", diff --git a/srcs/requirements/nestjs/api_back/src/app.module.ts b/srcs/requirements/nestjs/api_back/src/app.module.ts index e69653fe..a0e5bc5e 100644 --- a/srcs/requirements/nestjs/api_back/src/app.module.ts +++ b/srcs/requirements/nestjs/api_back/src/app.module.ts @@ -7,7 +7,7 @@ import { ConfigModule } from '@nestjs/config'; import { FriendshipsModule } from './friendship/friendships.module'; import { AuthenticationModule } from './auth/42/authentication.module'; import { PassportModule } from '@nestjs/passport'; -// import { GameModule } from './game/game/game.module'; +import { GameModule } from './game/game.module'; import { ChatGateway } from './chat/chat.gateway'; @Module({ @@ -16,6 +16,7 @@ import { ChatGateway } from './chat/chat.gateway'; AuthenticationModule, PassportModule.register({ session: true }), FriendshipsModule, + GameModule, ConfigModule.forRoot(), TypeOrmModule.forRoot({ type: 'postgres', diff --git a/srcs/requirements/nestjs/api_back/src/auth/42/strategy/42strategy.ts b/srcs/requirements/nestjs/api_back/src/auth/42/strategy/42strategy.ts index 6b43659c..6670477a 100644 --- a/srcs/requirements/nestjs/api_back/src/auth/42/strategy/42strategy.ts +++ b/srcs/requirements/nestjs/api_back/src/auth/42/strategy/42strategy.ts @@ -18,7 +18,7 @@ import { CreateUsersDto } from "src/users/dto/create-users.dto"; async validate(accessToken: string, refreshToken: string, profile: Profile, callbackURL: string) { console.log("Validate inside strategy.ts"); console.log(profile.id, profile.username, profile.phoneNumbers[0].value, profile.emails[0].value, profile.photos[0].value); - const userDTO: CreateUsersDto = { fortyTwoId: profile.id, username: profile.username, email: profile.emails[0].value, image_url: 'default.png', isEnabledTwoFactorAuth: false , status: "connected" }; + const userDTO: CreateUsersDto = { fortyTwoId: profile.id, username: profile.username, email: profile.emails[0].value, image_url: 'default.png', isEnabledTwoFactorAuth: false , status: "Connected" }; const user = await this.authenticationService.validateUser(userDTO); if (!user) throw new UnauthorizedException(); diff --git a/srcs/requirements/nestjs/api_back/src/common/constants/constants.ts b/srcs/requirements/nestjs/api_back/src/common/constants/constants.ts index b10583b0..bd208814 100644 --- a/srcs/requirements/nestjs/api_back/src/common/constants/constants.ts +++ b/srcs/requirements/nestjs/api_back/src/common/constants/constants.ts @@ -8,6 +8,12 @@ const MIME_TYPES = { 'image/png': 'png' }; +export enum STATUS { + CONNECTED = 'Connected', + DISCONNECTED = 'Disconnected', + IN_GAME = 'In Game', + IN_POOL = 'In Pool', +} export const storageForAvatar = { storage: diskStorage({ diff --git a/srcs/requirements/nestjs/api_back/src/game/dto/create-party.dto.ts b/srcs/requirements/nestjs/api_back/src/game/dto/create-party.dto.ts deleted file mode 100644 index 14d2e14c..00000000 --- a/srcs/requirements/nestjs/api_back/src/game/dto/create-party.dto.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { IsBoolean, IsEmail, IsNotEmpty, IsString } from 'class-validator'; - -export class CreateUsersDto { - @IsString() - @IsNotEmpty() - readonly username: string; - readonly fortyTwoId: string; - @IsEmail() - readonly email: string; - @IsString() - readonly image_url: string; - @IsString() - readonly status: string; - @IsBoolean() - readonly isEnabledTwoFactorAuth: boolean; -} diff --git a/srcs/requirements/nestjs/api_back/src/game/dto/createGame.dto.ts b/srcs/requirements/nestjs/api_back/src/game/dto/createGame.dto.ts new file mode 100644 index 00000000..ddce81b3 --- /dev/null +++ b/srcs/requirements/nestjs/api_back/src/game/dto/createGame.dto.ts @@ -0,0 +1,19 @@ +import { IsBoolean, IsNotEmpty, IsNumber, IsString } from "class-validator"; + +export class CreateGameDto { + @IsString() + @IsNotEmpty() + gameServerIdOfTheMatch : string + @IsNumber() + @IsNotEmpty() + gameOptions: number + @IsString() + @IsNotEmpty() + playerOneUsername : string + @IsString() + playerTwoUsername : string + @IsNumber() + playerTwoUsernameResult : number + @IsNumber() + playerOneUsernameResult : number +} diff --git a/srcs/requirements/nestjs/api_back/src/game/dto/grantTicket.dto.ts b/srcs/requirements/nestjs/api_back/src/game/dto/grantTicket.dto.ts new file mode 100644 index 00000000..c010fc11 --- /dev/null +++ b/srcs/requirements/nestjs/api_back/src/game/dto/grantTicket.dto.ts @@ -0,0 +1,14 @@ +import { IsBoolean, IsEmpty, IsInt, IsNotEmpty, IsNumber, IsString } from "class-validator"; +import { IsNull } from "typeorm"; + +export class GrantTicketDto { + @IsString() + @IsNotEmpty() + playerOneUsername : string + @IsString() + playerTwoUsername : string + @IsNumber() + gameOptions : number + @IsBoolean() + isGameIsWithInvitation : boolean +} diff --git a/srcs/requirements/nestjs/api_back/src/game/dto/updateGame.dto.ts b/srcs/requirements/nestjs/api_back/src/game/dto/updateGame.dto.ts new file mode 100644 index 00000000..29f55473 --- /dev/null +++ b/srcs/requirements/nestjs/api_back/src/game/dto/updateGame.dto.ts @@ -0,0 +1,5 @@ +import { OmitType } from "@nestjs/mapped-types"; +import { IsBoolean, IsNotEmpty, IsNumber, IsString } from "class-validator"; +import { CreateGameDto } from "./createGame.dto"; + +export class UpdateGameDto extends OmitType(CreateGameDto, ['playerOneUsername', 'playerTwoUsername', 'gameOptions'] as const){} diff --git a/srcs/requirements/nestjs/api_back/src/game/dto/validateTicket.dto.ts b/srcs/requirements/nestjs/api_back/src/game/dto/validateTicket.dto.ts new file mode 100644 index 00000000..8c594dda --- /dev/null +++ b/srcs/requirements/nestjs/api_back/src/game/dto/validateTicket.dto.ts @@ -0,0 +1,16 @@ +import { IsBase64, IsBoolean, IsEmpty, IsNotEmpty, IsNumber, IsString } from "class-validator"; + +export class ValidateTicketDto { + @IsString() + @IsNotEmpty() + playerOneUsername : string + @IsString() + playerTwoUsername : string + @IsNumber() + gameOptions : number + @IsBoolean() + isGameIsWithInvitation : boolean + @IsBase64() + @IsNotEmpty() + token : string +} diff --git a/srcs/requirements/nestjs/api_back/src/game/entity/game.entity.ts b/srcs/requirements/nestjs/api_back/src/game/entity/game.entity.ts new file mode 100644 index 00000000..1af581b0 --- /dev/null +++ b/srcs/requirements/nestjs/api_back/src/game/entity/game.entity.ts @@ -0,0 +1,25 @@ +import { Column, Entity, PrimaryGeneratedColumn } from "typeorm"; + +@Entity('game') +export class Game { + @PrimaryGeneratedColumn() + id: number; + + @Column() + playerOneUsername: string + + @Column() + playerTwoUsername: string + + @Column({default : 0, nullable : true}) + playerOneUsernameResult : number + + @Column({default : 0, nullable : true}) + playerTwoUsernameResult : number + + @Column({unique : true}) + gameServerIdOfTheMatch: string + + @Column({default: false, nullable : true}) //éric pourra trouver un meilleur mot : ongoing ? + isMatchIsFinished: boolean +} diff --git a/srcs/requirements/nestjs/api_back/src/game/entity/tokenGame.entity.ts b/srcs/requirements/nestjs/api_back/src/game/entity/tokenGame.entity.ts new file mode 100644 index 00000000..9481b32e --- /dev/null +++ b/srcs/requirements/nestjs/api_back/src/game/entity/tokenGame.entity.ts @@ -0,0 +1,22 @@ +import { Column, Entity, PrimaryGeneratedColumn } from "typeorm"; + +@Entity('tokenGame') +export class TokenGame { + + @PrimaryGeneratedColumn() + id: number; + @Column() + playerOneUsername : string + @Column({nullable: true}) + playerTwoUsername : string + @Column() + gameOptions : number + @Column() + isGameIsWithInvitation : boolean + @Column({default: 0, nullable: true}) + numberOfRegisteredUser : number + @Column({default : false}) + isSecondUserAcceptedRequest : boolean + @Column() + token : string +} diff --git a/srcs/requirements/nestjs/api_back/src/game/entity/user.entity.ts b/srcs/requirements/nestjs/api_back/src/game/entity/user.entity.ts deleted file mode 100644 index 6c45d3a5..00000000 --- a/srcs/requirements/nestjs/api_back/src/game/entity/user.entity.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Column, Entity, PrimaryGeneratedColumn } from "typeorm"; - - - -@Entity('gameParty') -export class gameParty { - - @PrimaryGeneratedColumn() - id: number; - - @Column() - playerOne: string - - @Column() - playerTwo: string - - @Column() - resultOfTheMatch: string - - @Column() - gameServerIdOfTheMatch: string -} diff --git a/srcs/requirements/nestjs/api_back/src/game/game.controller.ts b/srcs/requirements/nestjs/api_back/src/game/game.controller.ts index d86df072..b6b3770b 100644 --- a/srcs/requirements/nestjs/api_back/src/game/game.controller.ts +++ b/srcs/requirements/nestjs/api_back/src/game/game.controller.ts @@ -1,4 +1,96 @@ -import { Controller } from '@nestjs/common'; +import { Body, Controller, Get, HttpException, HttpStatus, Post, Req, Res, UseGuards } from '@nestjs/common'; +import { AuthenticateGuard, TwoFactorGuard } from 'src/auth/42/guards/42guards'; +import { User } from 'src/users/entities/user.entity'; +import { Response } from 'express'; +import { CreateGameDto } from './dto/createGame.dto'; +import { GrantTicketDto } from './dto/grantTicket.dto'; +import { UpdateGameDto } from './dto/updateGame.dto'; +import { ValidateTicketDto } from './dto/validateTicket.dto'; +import { GameService } from './game.service'; @Controller('game') -export class GameController {} +export class GameController { + constructor (private readonly gameService : GameService) { } + + + @Get('ranking') + @UseGuards(AuthenticateGuard) + @UseGuards(TwoFactorGuard) + async getRankingForAllUsers(@Req() req) + { + const currentUser : User = req.user + return this.gameService.getRankingForAllUsers(currentUser); + } + + @Post('ticket') + @UseGuards(AuthenticateGuard) + @UseGuards(TwoFactorGuard) + async grantTicket(@Req() req, @Body() grantTicketDto : GrantTicketDto, @Res() res : Response) + { + const user : User = req.user + if (grantTicketDto.playerOneUsername != user.username) + return res.status(HttpStatus.BAD_REQUEST).json({message : 'You can\'t grant a ticket to another user'}); + return this.gameService.generateToken(user, grantTicketDto, res); + } + + @Post('decline') + @UseGuards(AuthenticateGuard) + @UseGuards(TwoFactorGuard) + async declineInvitation(@Body('token') token, @Req() req, @Res() res : Response) + { + const user : User = req.user; + return this.gameService.declineInvitation(user, token, res); + } + + @Post('accept') + @UseGuards(AuthenticateGuard) + @UseGuards(TwoFactorGuard) + async acceptInvitation(@Body('token') token, @Req() req, @Res() res : Response) + { + const user : User = req.user; + return this.gameService.acceptInvitation(user, token, res); + } + + + @Get('invitations') + @UseGuards(AuthenticateGuard) + @UseGuards(TwoFactorGuard) + async findInvitations(@Req() request, @Res() res : Response) + { + const user : User = request.user; + return this.gameService.findInvitations(user, res); + } + + // + //N'est valable que pour le game-serveur. + @Post('gameserver/validate') + async validateTicket(@Body() validateTicketDto : ValidateTicketDto, @Req() request) + { + if (await this.gameService.validateToken(validateTicketDto) === false) + return new HttpException("The token is not valid", HttpStatus.NOT_FOUND); + console.log("200 retourné côté nest") + return HttpStatus.OK; + } + + @Post('gameserver/creategame') + async createGame(@Body() creategameDto : CreateGameDto) + { + console.log("On est dans create game") + console.log(creategameDto) + return this.gameService.createGame(creategameDto); + } + + @Post('gameserver/updategame') + async updateGame(@Body() updateGameDto : UpdateGameDto) + { + console.log("On est dans update game") + console.log(updateGameDto) + return this.gameService.updateGame(updateGameDto); + } + + @Post('gameserver/destroysession') + async destroySession(@Body('token') token) + { + return this.gameService.destroySession(token); + } +} diff --git a/srcs/requirements/nestjs/api_back/src/game/game.module.ts b/srcs/requirements/nestjs/api_back/src/game/game.module.ts index 17a50c06..e834599f 100644 --- a/srcs/requirements/nestjs/api_back/src/game/game.module.ts +++ b/srcs/requirements/nestjs/api_back/src/game/game.module.ts @@ -1,9 +1,17 @@ import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { Friendship } from 'src/friendship/entities/friendship.entity'; +import { FriendshipService } from 'src/friendship/friendship.service'; +import { User } from 'src/users/entities/user.entity'; +import { UsersService } from 'src/users/users.service'; +import { Game } from './entity/game.entity'; +import { TokenGame } from './entity/tokenGame.entity'; import { GameController } from './game.controller'; import { GameService } from './game.service'; @Module({ - controllers: [GameController], - providers: [GameService] + imports: [TypeOrmModule.forFeature([TokenGame, User, Game, Friendship])], + controllers: [GameController], + providers: [GameService, UsersService, FriendshipService] }) export class GameModule {} diff --git a/srcs/requirements/nestjs/api_back/src/game/game.service.spec.ts b/srcs/requirements/nestjs/api_back/src/game/game.service.spec.ts index f4a1db7e..d91fa17d 100644 --- a/srcs/requirements/nestjs/api_back/src/game/game.service.spec.ts +++ b/srcs/requirements/nestjs/api_back/src/game/game.service.spec.ts @@ -1,18 +1,18 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { GameService } from './game.service'; +// import { Test, TestingModule } from '@nestjs/testing'; +// // import { GameService } from './game.service'; -describe('GameService', () => { - let service: GameService; +// describe('GameService', () => { +// let service: GameService; - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - providers: [GameService], - }).compile(); +// beforeEach(async () => { +// const module: TestingModule = await Test.createTestingModule({ +// providers: [GameService], +// }).compile(); - service = module.get(GameService); - }); +// service = module.get(GameService); +// }); - it('should be defined', () => { - expect(service).toBeDefined(); - }); -}); +// it('should be defined', () => { +// expect(service).toBeDefined(); +// }); +// }); diff --git a/srcs/requirements/nestjs/api_back/src/game/game.service.ts b/srcs/requirements/nestjs/api_back/src/game/game.service.ts index 18ca270d..f00c941d 100644 --- a/srcs/requirements/nestjs/api_back/src/game/game.service.ts +++ b/srcs/requirements/nestjs/api_back/src/game/game.service.ts @@ -1,4 +1,282 @@ -import { Injectable } from '@nestjs/common'; +import { HttpException, HttpStatus, Injectable, Res } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { createCipheriv, randomBytes, scrypt } from 'crypto'; +import { User } from 'src/users/entities/user.entity'; +import { Repository } from 'typeorm'; +import { promisify } from 'util'; +import { Response } from 'express'; +import { GrantTicketDto } from './dto/grantTicket.dto'; +import { Game } from './entity/game.entity'; +import { ValidateTicketDto } from './dto/validateTicket.dto'; +import { TokenGame } from './entity/tokenGame.entity'; +import { UsersService } from 'src/users/users.service'; +import { CreateGameDto } from './dto/createGame.dto'; +import { UpdateGameDto } from './dto/updateGame.dto'; +import { FriendshipService } from 'src/friendship/friendship.service'; +import { STATUS } from 'src/common/constants/constants'; @Injectable() -export class GameService {} +export class GameService { + constructor ( + @InjectRepository(Game) + private readonly gameRepository : Repository, + @InjectRepository(User) + private readonly userRepository : Repository, + @InjectRepository(TokenGame) + private readonly tokenGameRepository : Repository, + private readonly userService : UsersService, + private readonly friendShipService : FriendshipService + ) { } + + async getRankingForAllUsers(currentUser : User) { + const users = await this.userRepository.createQueryBuilder("user") + .leftJoinAndSelect("user.stats", "stats") + .orderBy('stats.winGame', "DESC") + .getMany(); + const partialUser : Partial[] = [] + for (const user of users) + { + if (await this.friendShipService.findIfUserIsBlockedOrHasBlocked(currentUser.id.toString(), user.id.toString()) === false) + partialUser.push({username : user.username, stats : user.stats }) + } + console.log(...partialUser) + return partialUser; + } + + + async encryptToken(toEncrypt : string) : Promise { + const iv = randomBytes(16); + const password = process.env.TICKET_FOR_PLAYING_GAME_SECRET + new Date(); + const key = (await promisify(scrypt)(password, 'salt', 32)) as Buffer; + const cipher = createCipheriv('aes-256-ctr', key, iv); + const encryptedText = Buffer.concat([ + cipher.update(toEncrypt), + cipher.final(), + ]); + const encryptedTextToReturn = encryptedText.toString('base64'); + return encryptedTextToReturn + } + + async deleteToken(user : User){ + const tokenGame = await this.tokenGameRepository.createQueryBuilder('tokengame') + .where('tokengame.playerTwoUsername = :playerTwoUsername', {playerTwoUsername : user.username}) + .orWhere('tokengame.playerOneUsername = :playerOneUsername', {playerOneUsername : user.username}) + .getMany(); + if (tokenGame) + return this.tokenGameRepository.remove(tokenGame); + } + + async generateToken(user : User, grantTicketDto : GrantTicketDto, @Res() res : Response) + { + console.log(user.status); + if (user.status === STATUS.IN_POOL || user.status === STATUS.IN_GAME) + { + await this.deleteToken(user); + user.status = STATUS.CONNECTED; + this.userRepository.save(user); + } + if (grantTicketDto.isGameIsWithInvitation === true) + { + const secondUser : Partial = await this.userService.findOneByUsername(user.id.toString(), grantTicketDto.playerTwoUsername) + if (!secondUser || secondUser.username === user.username) + return res.status(HttpStatus.NOT_FOUND).json({message : "User not found OR you want to play with yourself."}); + const encryptedTextToReturn = await this.encryptToken(user.username + '_' + secondUser.username + '_' + + grantTicketDto.gameOptions + '_' + grantTicketDto.isGameIsWithInvitation + '_' + new Date()) + const tok = this.tokenGameRepository.create(grantTicketDto); + tok.isSecondUserAcceptedRequest = false; + tok.numberOfRegisteredUser = 0; + tok.token = encryptedTextToReturn; + this.tokenGameRepository.save(tok); + this.userService.updateStatus(user.id, "In Pool") + return res.status(HttpStatus.OK).json({ token : encryptedTextToReturn }); + } + else if (grantTicketDto.isGameIsWithInvitation === false) { + const encryptedTextToReturn = await this.encryptToken(user.username + '_' + + grantTicketDto.gameOptions + '_' + grantTicketDto.isGameIsWithInvitation + '_' + new Date()) + const tok = this.tokenGameRepository.create(grantTicketDto); + tok.numberOfRegisteredUser = 0; + tok.token = encryptedTextToReturn; + this.tokenGameRepository.save(tok); + this.userService.updateStatus(user.id, "In Pool") + return res.status(HttpStatus.OK).json({ token : encryptedTextToReturn }); + } + return res.status(HttpStatus.INTERNAL_SERVER_ERROR).json({message : "Internal Server Error"}); + } + + async validateToken(validateTicketDto : ValidateTicketDto) { + if (validateTicketDto.isGameIsWithInvitation === true) + { + const tokenGame : TokenGame = await this.tokenGameRepository.createQueryBuilder('tokengame') + .where('tokengame.playerOneUsername = :playerOneUsername', {playerOneUsername : validateTicketDto.playerOneUsername}) + .andWhere('tokengame.playerTwoUsername = :playerTwoUsername', {playerTwoUsername : validateTicketDto.playerTwoUsername}) + .andWhere('tokengame.gameOptions = :gameOption', {gameOption : validateTicketDto.gameOptions}) + .andWhere('tokengame.isGameIsWithInvitation = :isGameIsWithInvitation', {isGameIsWithInvitation: true}) + .andWhere('tokengame.isSecondUserAcceptedRequest = :choice', {choice : true}) + .andWhere('tokengame.token = :token', {token : validateTicketDto.token}) + .getOne(); + if (tokenGame) + { + tokenGame.numberOfRegisteredUser++; + if (tokenGame.numberOfRegisteredUser === 2) + { + this.tokenGameRepository.remove(tokenGame) + const userOne : User = await this.userRepository.createQueryBuilder('user') + .where("user.username = :username", {username : tokenGame.playerOneUsername}) + .getOne(); + this.userService.updateStatus(userOne.id, "In Game") + const userTwo : User = await this.userRepository.createQueryBuilder('user') + .where("user.username = :username", {username : tokenGame.playerTwoUsername}) + .getOne(); + this.deleteToken(userOne) + this.deleteToken(userTwo) + this.userService.updateStatus(userTwo.id, "In Game") + } + return true; + } + } + else if (validateTicketDto.isGameIsWithInvitation === false) + { + const tokenGame : TokenGame = await this.tokenGameRepository.createQueryBuilder('tokengame') + .where('tokengame.playerOneUsername = :playerOneUsername', {playerOneUsername : validateTicketDto.playerOneUsername}) + .andWhere('tokengame.gameOptions = :gameOption', {gameOption : validateTicketDto.gameOptions}) + .andWhere('tokengame.isGameIsWithInvitation = :isGameIsWithInvitation', {isGameIsWithInvitation: false}) + .andWhere('tokengame.token = :token', {token : validateTicketDto.token}) + .getOne(); + if (tokenGame) + { + this.tokenGameRepository.remove(tokenGame) + console.log("USERNAME : " + tokenGame.playerOneUsername) + const user : User = await this.userRepository.createQueryBuilder('user') + .where("user.username = :username", {username : tokenGame.playerOneUsername}) + .getOne(); + this.userService.updateStatus(user.id, "In Game") + this.deleteToken(user) + return true; + } + } + return false; + } + + async findInvitations(user : User, @Res() res : Response) { + const game = await this.tokenGameRepository.createQueryBuilder('tokengame') + .where('tokengame.playerTwoUsername = :playerTwoUsername', {playerTwoUsername : user.username}) + .andWhere('tokengame.isGameIsWithInvitation = :invit', {invit : true}) + .andWhere('tokengame.isSecondUserAcceptedRequest = :choice', {choice : false}) + .getMany(); + if (!game) + return res.status(HttpStatus.NOT_FOUND).send({message : "No invitation found"}); + let partialGame : Partial[] = []; + for (const gameToken of game) { + partialGame.push({ + playerOneUsername : gameToken.playerOneUsername, + playerTwoUsername : gameToken.playerTwoUsername, + gameOptions : gameToken.gameOptions, + token : gameToken.token, + }); + } + return res.status(HttpStatus.OK).json(partialGame); + } + + async declineInvitation(user : User, token : string, @Res() res : Response) + { + if (user.status !== "Connected") + return res.status(HttpStatus.FORBIDDEN).json({message : "You must not be in game to decline an invitation"}); + console.log("On décline l'invitation") + const tokenGame = await this.tokenGameRepository.createQueryBuilder('tokengame') + .andWhere('tokengame.playerTwoUsername = :playerTwoUsername', {playerTwoUsername : user.username}) + .andWhere('tokengame.token = :token', {token : token}) + .getOne(); + if (tokenGame) + { + this.tokenGameRepository.remove(tokenGame); + return res.status(HttpStatus.OK).json({message : "Invitation declined."}); + } + return res.status(HttpStatus.NOT_FOUND).json({message : "No invitation found !"}); + } + + async destroySession(token : string) + { + console.log("On détruit le token et la session qui va avec") + const tokenGame = await this.tokenGameRepository.createQueryBuilder('tokengame') + .where('tokengame.token = :token', {token : token}) + .getOne(); + if (tokenGame) + { + const playerOne = await this.userRepository.findOneBy({username : tokenGame.playerOneUsername}) + const playerTwo = await this.userRepository.findOneBy({username : tokenGame.playerTwoUsername}) + if (playerOne.status !== "Disconnected") + this.userService.updateStatus(playerOne.id, "Connected") + if (playerTwo.status !== "Disconnected") + this.userService.updateStatus(playerTwo.id, "Connected") + return this.tokenGameRepository.remove(tokenGame); + } + return new HttpException("Token not found !", HttpStatus.NOT_FOUND) + } + + async acceptInvitation(user : User, token : string, @Res() res : Response) + { + if (user.status !== "Connected") + return res.status(HttpStatus.FORBIDDEN).send("") + const tokenGame = await this.tokenGameRepository.createQueryBuilder('tokenGame') + .andWhere('tokenGame.playerTwoUsername = :playerTwoUsername', {playerTwoUsername : user.username}) + .andWhere('tokenGame.token = :token', {token : token}) + .getOne(); + if (tokenGame) + { + tokenGame.isSecondUserAcceptedRequest = true; + this.tokenGameRepository.save(tokenGame) + return res.status(HttpStatus.OK).json({message : "Invitation accepted."}); + } + return res.status(HttpStatus.NOT_FOUND).json({message : "No invitation found !"}); + } + + async createGame(creategameDto : CreateGameDto) + { + if (creategameDto.playerOneUsername === "" || creategameDto.playerTwoUsername === "" + || creategameDto.playerOneUsername === creategameDto.playerTwoUsername) + return HttpStatus.INTERNAL_SERVER_ERROR + const game = this.gameRepository.create(creategameDto) + game.isMatchIsFinished = false; + this.gameRepository.save(game); + if (!game) + return HttpStatus.INTERNAL_SERVER_ERROR + console.log("200 retourné pour la création de partie") + return HttpStatus.OK + } + + async updateGame(updateGameDto : UpdateGameDto) { + console.log("Updata game" + updateGameDto) + const game = await this.gameRepository.createQueryBuilder('game') + .where("game.gameServerIdOfTheMatch = :gameServerIdOfTheMatch", {gameServerIdOfTheMatch : updateGameDto.gameServerIdOfTheMatch}) + .getOne(); + if (!game) + throw new HttpException(`The game could not be updated.`,HttpStatus.NOT_FOUND); + game.isMatchIsFinished = true; + game.playerOneUsernameResult = updateGameDto.playerOneUsernameResult + game.playerTwoUsernameResult = updateGameDto.playerTwoUsernameResult + this.gameRepository.save(game); + const playerOne = await this.userRepository.findOneBy({username : game.playerOneUsername}) + const playerTwo = await this.userRepository.findOneBy({username : game.playerTwoUsername}) + if (!playerOne || !playerTwo) + return new HttpException("Internal Server Error. Impossible to update the database", HttpStatus.INTERNAL_SERVER_ERROR); + if (game.playerOneUsernameResult === game.playerTwoUsernameResult) + { + this.userService.incrementDraws(playerOne.id) + this.userService.incrementDraws(playerTwo.id) + } + else if (game.playerOneUsernameResult < game.playerTwoUsernameResult) + { + this.userService.incrementDefeats(playerOne.id) + this.userService.incrementVictories(playerTwo.id) + } + else + { + this.userService.incrementVictories(playerOne.id) + this.userService.incrementDefeats(playerTwo.id) + } + this.userService.updateStatus(playerOne.id, "Connected") + this.userService.updateStatus(playerTwo.id, "Connected") + return HttpStatus.OK + } +} + diff --git a/srcs/requirements/nestjs/api_back/src/users/dto/update-users.dto.ts b/srcs/requirements/nestjs/api_back/src/users/dto/update-users.dto.ts index 53e00fb3..eaad2c5b 100644 --- a/srcs/requirements/nestjs/api_back/src/users/dto/update-users.dto.ts +++ b/srcs/requirements/nestjs/api_back/src/users/dto/update-users.dto.ts @@ -2,7 +2,7 @@ // et de les mettre comme optionnelles. De plus on peut hériter // des décorateurs de la classe parente (par exemple @IsString()). -import { OmitType, PartialType } from "@nestjs/mapped-types"; +import { OmitType } from "@nestjs/mapped-types"; import { CreateUsersDto } from "./create-users.dto"; export class UpdateUsersDto extends OmitType(CreateUsersDto, ['fortyTwoId', 'email', 'image_url', 'status'] as const){} diff --git a/srcs/requirements/nestjs/api_back/src/users/entities/user.entity.ts b/srcs/requirements/nestjs/api_back/src/users/entities/user.entity.ts index c00427b3..b7ed9f65 100644 --- a/srcs/requirements/nestjs/api_back/src/users/entities/user.entity.ts +++ b/srcs/requirements/nestjs/api_back/src/users/entities/user.entity.ts @@ -28,7 +28,7 @@ export class User { @Column({ nullable: true }) phone: string; - @Column({ default: 'disconnected' }) + @Column({ default: 'Disconnected' }) status: string; // @Column() diff --git a/srcs/requirements/nestjs/api_back/src/users/users.controller.ts b/srcs/requirements/nestjs/api_back/src/users/users.controller.ts index 181b9ac5..9b44bc88 100644 --- a/srcs/requirements/nestjs/api_back/src/users/users.controller.ts +++ b/srcs/requirements/nestjs/api_back/src/users/users.controller.ts @@ -49,11 +49,9 @@ export class UsersController { @Get() findOne(@Query('username') username: string, @Req() req) { if (username === undefined) { - console.log("Backend Getting current user"); return this.usersService.findOne(req.user.id); } else { const user : User = req.user; - console.log('we have a query: ' + username) return this.usersService.findOneByUsername(user.id.toString(),username); } } @@ -64,7 +62,6 @@ export class UsersController { @Get('search') findOneByUsername(@Query('username') username: string, @Req() req) { const user : User = req.user; - console.log('searching for user' + user.username); return this.usersService.findOneByUsername(user.id.toString(),username); } @@ -81,12 +78,9 @@ export class UsersController { @UseGuards(TwoFactorGuard) @Patch() async update(@Req() req, @Body(new ValidationPipe()) usersUpdateDto: UpdateUsersDto, @Res() response : Response) { - console.log("DANS PATCH USERS"); const user = await this.usersService.update(req.user.id, usersUpdateDto); - // const user : User = req.user; if (user.isEnabledTwoFactorAuth === false && user.isTwoFactorAuthenticated === true) this.usersService.setIsTwoFactorAuthenticatedWhenLogout(user.id); - console.log ("Enbale 2FA " + user.isEnabledTwoFactorAuth + " Is authenticated " + user.isTwoFactorAuthenticated); if (user.isEnabledTwoFactorAuth === true && user.isTwoFactorAuthenticated === false) { response.status(201).send('2FA redirect') diff --git a/srcs/requirements/nestjs/api_back/src/users/users.service.ts b/srcs/requirements/nestjs/api_back/src/users/users.service.ts index 929d93d9..be1c19b2 100644 --- a/srcs/requirements/nestjs/api_back/src/users/users.service.ts +++ b/srcs/requirements/nestjs/api_back/src/users/users.service.ts @@ -4,12 +4,9 @@ import { User } from './entities/user.entity'; import { Repository } from 'typeorm'; import { CreateUsersDto } from './dto/create-users.dto'; import { UpdateUsersDto } from './dto/update-users.dto'; -import { Friendship } from '../friendship/entities/friendship.entity'; import { PaginationQueryDto } from 'src/common/dto/pagination-query.dto'; import { UserStats } from './entities/userStat.entities'; import { FriendshipService } from 'src/friendship/friendship.service'; -import { stringify } from 'querystring'; - // On va devoir sûrement trouver un moyen plus simple pour passer l'id, sûrement via des pipes // ou des interceptors, mais pour l'instant on va faire comme ça. @Injectable() diff --git a/srcs/requirements/nginx/conf/default.conf b/srcs/requirements/nginx/conf/default.conf index 9b1c1694..92c95f34 100644 --- a/srcs/requirements/nginx/conf/default.conf +++ b/srcs/requirements/nginx/conf/default.conf @@ -11,6 +11,7 @@ server { proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://backend_dev:3000; } + location /chat { proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; @@ -19,6 +20,19 @@ server { proxy_set_header Connection "upgrade"; proxy_pass http://backend_dev:5000/chat; } + + location /api/v2/game/gameserver { + deny all; + } + + location /pong { + proxy_pass http://game_server:8042/pong; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + proxy_set_header Host $host; + } + location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; diff --git a/srcs/requirements/svelte/api_front/public/build/bundle.css b/srcs/requirements/svelte/api_front/public/build/bundle.css index 536f89d5..ec9ffc64 100644 --- a/srcs/requirements/svelte/api_front/public/build/bundle.css +++ b/srcs/requirements/svelte/api_front/public/build/bundle.css @@ -1,14 +1,14 @@ header.svelte-7t4byu.svelte-7t4byu{overflow-y:hidden}.grid-container.svelte-7t4byu.svelte-7t4byu{position:absolute;left:0;top:0;box-sizing:border-box;width:100%;height:100%;white-space:nowrap;margin-bottom:0px;overflow:hidden;padding:20px 40px;margin:0px;display:grid;grid-template-columns:repeat(12, 1fr);grid-template-rows:1fr 1fr 1fr 1fr 1fr;align-items:center}header.svelte-7t4byu h1.svelte-7t4byu{grid-column:1 / 7;grid-row:1;padding:20px;border:1px solid bisque}header.svelte-7t4byu nav.svelte-7t4byu{grid-column:7 / 13;grid-row:1;justify-self:end;padding:20px;border:1px solid bisque}header.svelte-7t4byu h2.svelte-7t4byu{grid-row:3;grid-column:5 / span 4;justify-self:center;border:1px solid black;z-index:3}header.svelte-7t4byu h2 div.svelte-7t4byu{font-size:2em}nav.svelte-7t4byu div.svelte-7t4byu{display:inline;color:bisque;font-weight:bold}nav.svelte-7t4byu>div.svelte-7t4byu{padding-left:1em}nav.svelte-7t4byu div.svelte-7t4byu:hover{text-decoration:underline;cursor:pointer}main.svelte-1cznfcz.svelte-1cznfcz{text-align:center;padding-top:40px;padding-bottom:40px}form.svelte-1cznfcz.svelte-1cznfcz{padding-top:15px}form.svelte-1cznfcz input.svelte-1cznfcz{max-width:330px}.error.svelte-1cznfcz.svelte-1cznfcz{font-weight:bold;font-size:0.8em;color:red}div.wrapper.svelte-1q8uute{display:flexbox;align-items:center}div.wrapper.svelte-1q8uute{display:flexbox;align-items:center}canvas.svelte-1bstsd0{width:100%;height:100%;background-color:#666}@font-face{font-family:'Bondi';src:url('/fonts/Bondi.ttf.woff') format('woff'), url('/fonts/Bondi.ttf.svg#Bondi') format('svg'), url('/fonts/Bondi.ttf.eot'), - url('/fonts/Bondi.ttf.eot?#iefix') format('embedded-opentype');font-weight:normal;font-style:normal}header.svelte-1gjmpio.svelte-1gjmpio{background:#618174;margin:0}header.svelte-1gjmpio.svelte-1gjmpio{position:sticky;display:grid;grid-template-columns:1fr 1fr 1fr}h1.svelte-1gjmpio.svelte-1gjmpio{font-family:'Bondi'}h1.svelte-1gjmpio.svelte-1gjmpio{margin:0;text-align:left;display:flex;justify-self:center;align-self:center}img.svelte-1gjmpio.svelte-1gjmpio{cursor:pointer;max-width:40px;padding:7px 20px;justify-self:left}nav.svelte-1gjmpio.svelte-1gjmpio{display:flex;justify-content:right}nav.svelte-1gjmpio button.svelte-1gjmpio{margin:7px 20px;border-radius:4px}div.outer.svelte-16aefqu{max-width:960px;margin:40px auto}:root{--purple:rgb(123, 31, 162);--violet:rgb(103, 58, 183);--pink:rgb(244, 143, 177)}@keyframes svelte-16aefqu-background-pan{from{background-position:0% center}to{background-position:-200% center}}@keyframes svelte-16aefqu-scale{from,to{transform:scale(0)}50%{transform:scale(1)}}@keyframes svelte-16aefqu-rotate{from{transform:rotate(0deg)}to{transform:rotate(180deg)}}main.svelte-qtbld7{text-align:center}div.cards.svelte-qtbld7{display:grid;grid-template-columns:1fr 1fr;grid-gap:20px}img.svelte-qtbld7{width:60px}form.svelte-qtbld7{text-align:center}.form-field.svelte-qtbld7{padding:10px}.label.svelte-qtbld7{font-weight:bold}.inline-check.svelte-qtbld7{display:inline}.error.svelte-qtbld7{font-size:0.8em;font-weight:bold;color:red}.success.svelte-qtbld7{font-size:0.8em;font-weight:bold;color:green}div.top-grid.svelte-55f7si{display:grid;grid-template-columns:repeat(12, 1fr);height:85vh}div.all-users-sidebar.svelte-55f7si{grid-column:1 / span 2;background:white}div.a-user.svelte-55f7si{display:inline-block}div.status.svelte-55f7si{font-size:0.6em;font-weight:bold}div[class^="a-user"].svelte-55f7si:hover{text-decoration:underline;font-weight:bold;cursor:pointer}div.main-display.svelte-55f7si{grid-column:3 / span 10}.error.svelte-55f7si{font-size:0.8em;font-weight:bold;color:red}div.outer.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu{max-width:960px;margin:40px auto}main.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu{max-width:960px;margin:40px auto;text-align:center}.avatar.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu{max-width:150px}section.main-stats.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu{max-width:600px;margin:40px auto;text-align:center;display:grid;grid-template-columns:repeat(3, 1fr);grid-template-rows:repeat(3, 1fr)}section.main-stats.svelte-16aefqu h4.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu{grid-column:1 / span 3}div.username.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu{font-size:1.5em;font-weight:bold;padding-bottom:5px}div.rank.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu{font-size:1.2em;font-weight:bold}:root{--purple:rgb(123, 31, 162);--violet:rgb(103, 58, 183);--pink:rgb(244, 143, 177)}@keyframes svelte-16aefqu-background-pan{from{background-position:0% center}to{background-position:-200% center}}@keyframes svelte-16aefqu-scale{from,to{transform:scale(0)}50%{transform:scale(1)}}@keyframes svelte-16aefqu-rotate{from{transform:rotate(0deg)}to{transform:rotate(180deg)}}div.svelte-16aefqu>.glitter.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu{display:inline-block;position:relative}div.svelte-16aefqu>.glitter.svelte-16aefqu>.glitter-star.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu{--size:clamp(20px, 1.5vw, 30px);animation:svelte-16aefqu-scale 700ms ease forwards;display:block;height:var(--size);left:var(--star-left);position:absolute;top:var(--star-top);width:var(--size)}div.svelte-16aefqu>.glitter.svelte-16aefqu>.glitter-star.svelte-16aefqu>svg.svelte-16aefqu.svelte-16aefqu{animation:svelte-16aefqu-rotate 1000ms linear infinite;display:block;opacity:0.7}div.svelte-16aefqu>.glitter.svelte-16aefqu>.glitter-star.svelte-16aefqu>svg.svelte-16aefqu>path.svelte-16aefqu{fill:var(--violet)}div.svelte-16aefqu>.glitter.svelte-16aefqu>.glitter-text.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu{animation:svelte-16aefqu-background-pan 3s linear infinite;background:linear-gradient( + url('/fonts/Bondi.ttf.eot?#iefix') format('embedded-opentype');font-weight:normal;font-style:normal}header.svelte-1aisfio.svelte-1aisfio{background:#618174;margin:0}header.svelte-1aisfio.svelte-1aisfio{position:sticky;display:grid;grid-template-columns:1fr 1fr 1fr}h1.svelte-1aisfio.svelte-1aisfio{font-family:'Bondi'}h1.svelte-1aisfio.svelte-1aisfio{margin:0;text-align:left;display:flex;justify-self:center;align-self:center}img.svelte-1aisfio.svelte-1aisfio{cursor:pointer;max-width:40px;padding:7px 20px;justify-self:left}nav.svelte-1aisfio.svelte-1aisfio{display:flex;justify-content:right}nav.svelte-1aisfio button.svelte-1aisfio{margin:7px 20px;border-radius:4px}div.outer.svelte-1tyjf3q{max-width:960px;margin:40px auto}:root{--purple:rgb(123, 31, 162);--violet:rgb(103, 58, 183);--pink:rgb(244, 143, 177)}@keyframes svelte-1tyjf3q-background-pan{from{background-position:0% center}to{background-position:-200% center}}@keyframes svelte-1tyjf3q-scale{from,to{transform:scale(0)}50%{transform:scale(1)}}@keyframes svelte-1tyjf3q-rotate{from{transform:rotate(0deg)}to{transform:rotate(180deg)}}main.svelte-qtbld7{text-align:center}div.cards.svelte-qtbld7{display:grid;grid-template-columns:1fr 1fr;grid-gap:20px}img.svelte-qtbld7{width:60px}form.svelte-qtbld7{text-align:center}.form-field.svelte-qtbld7{padding:10px}.label.svelte-qtbld7{font-weight:bold}.inline-check.svelte-qtbld7{display:inline}.error.svelte-qtbld7{font-size:0.8em;font-weight:bold;color:red}.success.svelte-qtbld7{font-size:0.8em;font-weight:bold;color:green}div.top-grid.svelte-55f7si{display:grid;grid-template-columns:repeat(12, 1fr);height:85vh}div.all-users-sidebar.svelte-55f7si{grid-column:1 / span 2;background:white}div.a-user.svelte-55f7si{display:inline-block}div.status.svelte-55f7si{font-size:0.6em;font-weight:bold}div[class^="a-user"].svelte-55f7si:hover{text-decoration:underline;font-weight:bold;cursor:pointer}div.main-display.svelte-55f7si{grid-column:3 / span 10}.error.svelte-55f7si{font-size:0.8em;font-weight:bold;color:red}div.outer.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu{max-width:960px;margin:40px auto}main.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu{max-width:960px;margin:40px auto;text-align:center}.avatar.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu{max-width:150px}section.main-stats.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu{max-width:600px;margin:40px auto;text-align:center;display:grid;grid-template-columns:repeat(3, 1fr);grid-template-rows:repeat(3, 1fr)}section.main-stats.svelte-16aefqu h4.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu{grid-column:1 / span 3}div.username.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu{font-size:1.5em;font-weight:bold;padding-bottom:5px}div.rank.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu{font-size:1.2em;font-weight:bold}:root{--purple:rgb(123, 31, 162);--violet:rgb(103, 58, 183);--pink:rgb(244, 143, 177)}@keyframes svelte-16aefqu-background-pan{from{background-position:0% center}to{background-position:-200% center}}@keyframes svelte-16aefqu-scale{from,to{transform:scale(0)}50%{transform:scale(1)}}@keyframes svelte-16aefqu-rotate{from{transform:rotate(0deg)}to{transform:rotate(180deg)}}div.svelte-16aefqu>.glitter.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu{display:inline-block;position:relative}div.svelte-16aefqu>.glitter.svelte-16aefqu>.glitter-star.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu{--size:clamp(20px, 1.5vw, 30px);animation:svelte-16aefqu-scale 700ms ease forwards;display:block;height:var(--size);left:var(--star-left);position:absolute;top:var(--star-top);width:var(--size)}div.svelte-16aefqu>.glitter.svelte-16aefqu>.glitter-star.svelte-16aefqu>svg.svelte-16aefqu.svelte-16aefqu{animation:svelte-16aefqu-rotate 1000ms linear infinite;display:block;opacity:0.7}div.svelte-16aefqu>.glitter.svelte-16aefqu>.glitter-star.svelte-16aefqu>svg.svelte-16aefqu>path.svelte-16aefqu{fill:var(--violet)}div.svelte-16aefqu>.glitter.svelte-16aefqu>.glitter-text.svelte-16aefqu.svelte-16aefqu.svelte-16aefqu{animation:svelte-16aefqu-background-pan 3s linear infinite;background:linear-gradient( to right, var(--purple), var(--violet), var(--pink), var(--purple) - );background-size:200%;-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;color:transparent;white-space:nowrap}.card.svelte-8smyff{background:white;padding:20px;border-radius:6px;box-shadow:0px 2px 4px rgba(0,0,0,0.1)}button.svelte-1u0z9cq{border:0;cursor:pointer;border-radius:6px;padding:8px 12px;font-weight:bold;box-shadow:1px 2px 3px rgba(0,0,0,0.2)}.primary.svelte-1u0z9cq{background:#d91b42;color:white}.secondary.svelte-1u0z9cq{background:#45c496;color:white}.flat.svelte-1u0z9cq{box-shadow:none}.primary.inverse.svelte-1u0z9cq{color:#d91b42;background:white;border:2px solid #d91b42}.secondary.inverse.svelte-1u0z9cq{color:#45c496;background:white;border:2px solid #45c496}.chat_box.svelte-zxenra.svelte-zxenra{display:flex;position:fixed;bottom:20px;right:20px;padding:5px;width:300px;height:400px;border:1px solid black}.chat.svelte-zxenra.svelte-zxenra{grid-area:chat}.chat_box.close.svelte-zxenra .grid_box.svelte-zxenra{gap:0px;grid:' chat ' auto - / auto }.chat_box.close.svelte-zxenra.svelte-zxenra{padding:0px;width:auto;height:auto}.chat_box.svelte-zxenra *{-ms-overflow-style:none;scrollbar-width:none}.chat_box.svelte-zxenra *::-webkit-scrollbar{display:none}.chat_box.svelte-zxenra .grid_box{display:grid;margin:0px;gap:5px;width:100%;height:100%}.chat_box.svelte-zxenra .grid_box *{display:flex;flex-direction:column;position:relative;box-sizing:border-box}.chat_box.svelte-zxenra .grid_box p{padding:10px;font-size:15px}.chat_box.svelte-zxenra .panel{overflow-y:scroll}.chat_box.svelte-zxenra .panel > *{margin-top:10px;margin-bottom:10px}.chat_box.svelte-zxenra .__show_if_only_child{display:none}.chat_box.svelte-zxenra .__show_if_only_child:only-child{display:flex;color:rgb(100, 100, 100)}.chat_box.svelte-zxenra .__center{margin-left:auto;margin-right:auto}.chat_box.svelte-zxenra .__border_top{border-top:1px solid black}.chat_box.svelte-zxenra .__check_change_next:checked ~ .__to_show{display:flex}.chat_box.svelte-zxenra .__check_change_next:checked ~ .__to_block,.chat_box.svelte-zxenra .__check_change_next:checked ~ .__to_block *{pointer-events:none;color:rgb(100, 100, 100)}.chat_box.svelte-zxenra .__to_show{display:none}button.svelte-j5z24r.svelte-j5z24r{display:flex;padding:0px;margin:auto;width:100%;cursor:pointer;outline:none;border:none;background-color:rgb(220, 220, 220)}button.svelte-j5z24r p.svelte-j5z24r{width:100%;margin:auto;text-align:center}button.svelte-j5z24r.svelte-j5z24r:hover{background-color:rgb(200, 200, 200)}button.svelte-j5z24r.svelte-j5z24r:active{background-color:rgb(190, 190, 190)}.list.svelte-j5z24r.svelte-j5z24r:not(:hover){background-color:rgb(240, 240, 240)}.list.svelte-j5z24r p.svelte-j5z24r{text-align:left}.transparent.svelte-j5z24r.svelte-j5z24r:not(:hover){background-color:transparent}.deactivate.svelte-j5z24r.svelte-j5z24r{background-color:transparent;pointer-events:none}.icon.svelte-j5z24r p.svelte-j5z24r{display:none}.icon.svelte-j5z24r.svelte-j5z24r:not(:hover){background-color:transparent}.icon.svelte-j5z24r.svelte-j5z24r{width:30px;height:100%;padding:0px}.dots.svelte-j5z24r.svelte-j5z24r::after{content:'\2807';font-size:20px;position:absolute;top:50%;left:0px;width:100%;height:auto;text-align:center;transform:translateY(-50%);cursor:pointer}.close.svelte-j5z24r.svelte-j5z24r::before{content:"";position:absolute;top:calc(50% - 1px);left:5px;width:20px;height:2px;background-color:black}.back.svelte-j5z24r.svelte-j5z24r::before{content:"";position:absolute;top:calc(50% - 6px - 1px);left:6px;width:14px;height:14px;border-left:1px solid black;border-bottom:1px solid black;transform:rotate(45deg)}.blocked.svelte-j5z24r.svelte-j5z24r{padding-left:30px}.blocked.svelte-j5z24r.svelte-j5z24r::before{content:"";position:absolute;top:calc(50% - 2px);left:10px;cursor:pointer;width:13px;height:10px;border-radius:2px;background-color:rgb(110, 110, 110)}.blocked.svelte-j5z24r.svelte-j5z24r::after{content:"";position:absolute;top:calc(50% - 9px);left:12px;cursor:pointer;width:9px;height:13px;border-radius:5px;box-sizing:border-box;border:3px solid rgb(110, 110, 110)}.grid_box.svelte-1jygwt2 .settings {grid-area:settings}.grid_box.svelte-1jygwt2 .close {grid-area:close}.grid_box.svelte-1jygwt2 .new {grid-area:new}.grid_box.svelte-1jygwt2 .panel_home{grid-area:panel_home}.grid_box.svelte-1jygwt2.svelte-1jygwt2{grid:' settings new close ' auto + );background-size:200%;-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;color:transparent;white-space:nowrap}.card.svelte-8smyff{background:white;padding:20px;border-radius:6px;box-shadow:0px 2px 4px rgba(0,0,0,0.1)}button.svelte-1u0z9cq{border:0;cursor:pointer;border-radius:6px;padding:8px 12px;font-weight:bold;box-shadow:1px 2px 3px rgba(0,0,0,0.2)}.primary.svelte-1u0z9cq{background:#d91b42;color:white}.secondary.svelte-1u0z9cq{background:#45c496;color:white}.flat.svelte-1u0z9cq{box-shadow:none}.primary.inverse.svelte-1u0z9cq{color:#d91b42;background:white;border:2px solid #d91b42}.secondary.inverse.svelte-1u0z9cq{color:#45c496;background:white;border:2px solid #45c496}.chat_box.svelte-auy6qm{display:flex;position:fixed;bottom:20px;right:20px;padding:0px;width:auto;height:auto;border:1px solid black}.chat_box.svelte-auy6qm *{-ms-overflow-style:none;scrollbar-width:none}.chat_box.svelte-auy6qm *::-webkit-scrollbar{display:none}.chat_box.svelte-auy6qm .grid_box{display:grid;margin:5px;gap:5px;width:300px;height:400px}.chat_box.svelte-auy6qm .grid_box *{display:flex;flex-direction:column;position:relative;box-sizing:border-box}.chat_box.svelte-auy6qm .grid_box p{padding:10px;font-size:15px}.chat_box.svelte-auy6qm .panel{overflow-y:scroll}.chat_box.svelte-auy6qm .panel > *{margin-top:10px;margin-bottom:10px}.chat_box.svelte-auy6qm .__show_if_only_child{display:none}.chat_box.svelte-auy6qm .__show_if_only_child:only-child{display:flex;color:rgb(100, 100, 100)}.chat_box.svelte-auy6qm .__center{margin-left:auto;margin-right:auto}.chat_box.svelte-auy6qm .__border_top{border-top:1px solid black}.chat_box.svelte-auy6qm .__check_change_next:checked ~ .__to_show{display:flex}.chat_box.svelte-auy6qm .__check_change_next:checked ~ .__to_block,.chat_box.svelte-auy6qm .__check_change_next:checked ~ .__to_block *{pointer-events:none;color:rgb(100, 100, 100)}.chat_box.svelte-auy6qm .__to_show{display:none}.grid_box.svelte-fc4a40 .chat{grid-area:chat}.grid_box.svelte-fc4a40{gap:0px;grid:' chat ' auto + / auto }.chat_box.close .grid_box.svelte-fc4a40{margin:0px;width:auto;height:auto}.grid_box.svelte-1jygwt2 .settings {grid-area:settings}.grid_box.svelte-1jygwt2 .close {grid-area:close}.grid_box.svelte-1jygwt2 .new {grid-area:new}.grid_box.svelte-1jygwt2 .panel_home{grid-area:panel_home}.grid_box.svelte-1jygwt2.svelte-1jygwt2{grid:' settings new close ' auto ' panel_home panel_home panel_home ' 1fr / auto 1fr auto }.panel_home.svelte-1jygwt2 p.title.svelte-1jygwt2{margin:10px auto 0px auto}.grid_box.svelte-rmdfjs .back {grid-area:back}.grid_box.svelte-rmdfjs .room_name {grid-area:room_name}.grid_box.svelte-rmdfjs .close {grid-area:close}.grid_box.svelte-rmdfjs .panel_msg {grid-area:panel_msg}.grid_box.svelte-rmdfjs .send {grid-area:send}.grid_box.svelte-rmdfjs .panel_write{grid-area:panel_write}.grid_box.svelte-rmdfjs.svelte-rmdfjs{grid:' back room_name room_name close ' auto ' panel_msg panel_msg panel_msg panel_msg ' 1fr @@ -28,5 +28,6 @@ header.svelte-7t4byu.svelte-7t4byu{overflow-y:hidden}.grid-container.svelte-7t4b / auto 1fr auto }form.svelte-yo0any input[type=checkbox].svelte-yo0any.svelte-yo0any{display:none}form.svelte-yo0any label._checkbox.svelte-yo0any.svelte-yo0any{margin:0px auto 0px 10px;padding-left:10px;cursor:pointer}form.svelte-yo0any label._checkbox.svelte-yo0any.svelte-yo0any::after{content:"";position:absolute;top:calc(50% - 6px);left:0px;width:12px;height:12px;border:2px solid rgb(150, 150, 150);box-sizing:border-box;cursor:pointer}form.svelte-yo0any input[type=checkbox].svelte-yo0any:checked+label._checkbox.svelte-yo0any::after{background-color:rgb(200, 200, 200)}form.svelte-yo0any label._select.svelte-yo0any.svelte-yo0any{flex-direction:row}form.svelte-yo0any label._select p.svelte-yo0any.svelte-yo0any{margin:0px}form.svelte-yo0any select.svelte-yo0any.svelte-yo0any{margin:auto auto auto 10px;background-color:rgb(220, 220, 220);border:none;padding:5px;cursor:pointer}form.svelte-yo0any select.svelte-yo0any.svelte-yo0any:hover{background-color:rgb(200, 200, 200)}form.svelte-yo0any input[type=submit].svelte-yo0any.svelte-yo0any{margin-top:20px}.grid_box.svelte-1fj8iha .back {grid-area:back}.grid_box.svelte-1fj8iha .user {grid-area:user}.grid_box.svelte-1fj8iha .close {grid-area:close}.grid_box.svelte-1fj8iha .room_name {grid-area:room_name}.grid_box.svelte-1fj8iha .panel_user{grid-area:panel_user}.grid_box.svelte-1fj8iha{grid:' back user close ' auto ' room_name room_name room_name ' auto ' panel_user panel_user panel_user ' 1fr - / auto 1fr auto }.panel_user.svelte-1fj8iha{margin-top:-5px}.chat_msg.svelte-14xxpbz.svelte-14xxpbz{margin:5px auto;padding:5px;border-radius:5px}.chat_msg.svelte-14xxpbz.svelte-14xxpbz{margin-left:0px;background-color:rgb(210, 210, 210);max-width:80%}.chat_msg.svelte-14xxpbz p.svelte-14xxpbz{padding:0px}.chat_msg.svelte-14xxpbz p.name.svelte-14xxpbz{margin:0px;font-size:12px;color:rgb(100, 100, 100)}.chat_msg.svelte-14xxpbz p.msg.svelte-14xxpbz{margin:5px 0px}.chat_msg.svelte-14xxpbz p.msg.svelte-14xxpbz *{display:inline}.chat_msg.me.svelte-14xxpbz.svelte-14xxpbz{margin-right:0px;margin-left:auto;background-color:rgb(210, 110, 10)}.chat_msg.me.svelte-14xxpbz p.name.svelte-14xxpbz{display:none}.chat_msg.SERVER.svelte-14xxpbz.svelte-14xxpbz{margin-left:auto;background-color:transparent}.chat_msg.SERVER.svelte-14xxpbz p.name.svelte-14xxpbz{display:none}.chat_msg.SERVER.svelte-14xxpbz p.msg.svelte-14xxpbz{margin:0px auto;font-size:12px;color:rgb(100, 100, 100)}.chat_box.svelte-auy6qm{display:flex;position:fixed;bottom:20px;right:20px;padding:0px;width:auto;height:auto;border:1px solid black}.chat_box.svelte-auy6qm *{-ms-overflow-style:none;scrollbar-width:none}.chat_box.svelte-auy6qm *::-webkit-scrollbar{display:none}.chat_box.svelte-auy6qm .grid_box{display:grid;margin:5px;gap:5px;width:300px;height:400px}.chat_box.svelte-auy6qm .grid_box *{display:flex;flex-direction:column;position:relative;box-sizing:border-box}.chat_box.svelte-auy6qm .grid_box p{padding:10px;font-size:15px}.chat_box.svelte-auy6qm .panel{overflow-y:scroll}.chat_box.svelte-auy6qm .panel > *{margin-top:10px;margin-bottom:10px}.chat_box.svelte-auy6qm .__show_if_only_child{display:none}.chat_box.svelte-auy6qm .__show_if_only_child:only-child{display:flex;color:rgb(100, 100, 100)}.chat_box.svelte-auy6qm .__center{margin-left:auto;margin-right:auto}.chat_box.svelte-auy6qm .__border_top{border-top:1px solid black}.chat_box.svelte-auy6qm .__check_change_next:checked ~ .__to_show{display:flex}.chat_box.svelte-auy6qm .__check_change_next:checked ~ .__to_block,.chat_box.svelte-auy6qm .__check_change_next:checked ~ .__to_block *{pointer-events:none;color:rgb(100, 100, 100)}.chat_box.svelte-auy6qm .__to_show{display:none}.grid_box.svelte-fc4a40 .chat{grid-area:chat}.grid_box.svelte-fc4a40{gap:0px;grid:' chat ' auto - / auto }.chat_box.close .grid_box.svelte-fc4a40{margin:0px;width:auto;height:auto}.chat_box.svelte-auy6qm{display:flex;position:fixed;bottom:20px;right:20px;padding:0px;width:auto;height:auto;border:1px solid black}.chat_box.svelte-auy6qm *{-ms-overflow-style:none;scrollbar-width:none}.chat_box.svelte-auy6qm *::-webkit-scrollbar{display:none}.chat_box.svelte-auy6qm .grid_box{display:grid;margin:5px;gap:5px;width:300px;height:400px}.chat_box.svelte-auy6qm .grid_box *{display:flex;flex-direction:column;position:relative;box-sizing:border-box}.chat_box.svelte-auy6qm .grid_box p{padding:10px;font-size:15px}.chat_box.svelte-auy6qm .panel{overflow-y:scroll}.chat_box.svelte-auy6qm .panel > *{margin-top:10px;margin-bottom:10px}.chat_box.svelte-auy6qm .__show_if_only_child{display:none}.chat_box.svelte-auy6qm .__show_if_only_child:only-child{display:flex;color:rgb(100, 100, 100)}.chat_box.svelte-auy6qm .__center{margin-left:auto;margin-right:auto}.chat_box.svelte-auy6qm .__border_top{border-top:1px solid black}.chat_box.svelte-auy6qm .__check_change_next:checked ~ .__to_show{display:flex}.chat_box.svelte-auy6qm .__check_change_next:checked ~ .__to_block,.chat_box.svelte-auy6qm .__check_change_next:checked ~ .__to_block *{pointer-events:none;color:rgb(100, 100, 100)}.chat_box.svelte-auy6qm .__to_show{display:none} \ No newline at end of file + / auto 1fr auto }.panel_user.svelte-1fj8iha{margin-top:-5px}button.svelte-j5z24r.svelte-j5z24r{display:flex;padding:0px;margin:auto;width:100%;cursor:pointer;outline:none;border:none;background-color:rgb(220, 220, 220)}button.svelte-j5z24r p.svelte-j5z24r{width:100%;margin:auto;text-align:center}button.svelte-j5z24r.svelte-j5z24r:hover{background-color:rgb(200, 200, 200)}button.svelte-j5z24r.svelte-j5z24r:active{background-color:rgb(190, 190, 190)}.list.svelte-j5z24r.svelte-j5z24r:not(:hover){background-color:rgb(240, 240, 240)}.list.svelte-j5z24r p.svelte-j5z24r{text-align:left}.transparent.svelte-j5z24r.svelte-j5z24r:not(:hover){background-color:transparent}.deactivate.svelte-j5z24r.svelte-j5z24r{background-color:transparent;pointer-events:none}.icon.svelte-j5z24r p.svelte-j5z24r{display:none}.icon.svelte-j5z24r.svelte-j5z24r:not(:hover){background-color:transparent}.icon.svelte-j5z24r.svelte-j5z24r{width:30px;height:100%;padding:0px}.dots.svelte-j5z24r.svelte-j5z24r::after{content:'\2807';font-size:20px;position:absolute;top:50%;left:0px;width:100%;height:auto;text-align:center;transform:translateY(-50%);cursor:pointer}.close.svelte-j5z24r.svelte-j5z24r::before{content:"";position:absolute;top:calc(50% - 1px);left:5px;width:20px;height:2px;background-color:black}.back.svelte-j5z24r.svelte-j5z24r::before{content:"";position:absolute;top:calc(50% - 6px - 1px);left:6px;width:14px;height:14px;border-left:1px solid black;border-bottom:1px solid black;transform:rotate(45deg)}.blocked.svelte-j5z24r.svelte-j5z24r{padding-left:30px}.blocked.svelte-j5z24r.svelte-j5z24r::before{content:"";position:absolute;top:calc(50% - 2px);left:10px;cursor:pointer;width:13px;height:10px;border-radius:2px;background-color:rgb(110, 110, 110)}.blocked.svelte-j5z24r.svelte-j5z24r::after{content:"";position:absolute;top:calc(50% - 9px);left:12px;cursor:pointer;width:9px;height:13px;border-radius:5px;box-sizing:border-box;border:3px solid rgb(110, 110, 110)}.chat_msg.svelte-14xxpbz.svelte-14xxpbz{margin:5px auto;padding:5px;border-radius:5px}.chat_msg.svelte-14xxpbz.svelte-14xxpbz{margin-left:0px;background-color:rgb(210, 210, 210);max-width:80%}.chat_msg.svelte-14xxpbz p.svelte-14xxpbz{padding:0px}.chat_msg.svelte-14xxpbz p.name.svelte-14xxpbz{margin:0px;font-size:12px;color:rgb(100, 100, 100)}.chat_msg.svelte-14xxpbz p.msg.svelte-14xxpbz{margin:5px 0px}.chat_msg.svelte-14xxpbz p.msg.svelte-14xxpbz *{display:inline}.chat_msg.me.svelte-14xxpbz.svelte-14xxpbz{margin-right:0px;margin-left:auto;background-color:rgb(210, 110, 10)}.chat_msg.me.svelte-14xxpbz p.name.svelte-14xxpbz{display:none}.chat_msg.SERVER.svelte-14xxpbz.svelte-14xxpbz{margin-left:auto;background-color:transparent}.chat_msg.SERVER.svelte-14xxpbz p.name.svelte-14xxpbz{display:none}.chat_msg.SERVER.svelte-14xxpbz p.msg.svelte-14xxpbz{margin:0px auto;font-size:12px;color:rgb(100, 100, 100)}@font-face{font-family:"Bit5x3";src:url("/fonts/Bit5x3.woff2") format("woff2"), + local("Bit5x3"), + url("/fonts/Bit5x3.woff") format("woff");font-weight:normal;font-style:normal;font-display:swap}#game_page.svelte-y455cj.svelte-y455cj{margin:0;background-color:#222425;position:relative;width:100%;height:100%}#canvas_container.svelte-y455cj.svelte-y455cj{margin-top:20px;text-align:center}#users_name.svelte-y455cj.svelte-y455cj{text-align:center;font-family:"Bit5x3";color:rgb(245, 245, 245);font-size:x-large}#div_game.svelte-y455cj.svelte-y455cj{margin-top:20px;text-align:center;font-family:"Bit5x3";color:rgb(245, 245, 245);font-size:x-large}#error_notification.svelte-y455cj.svelte-y455cj{text-align:center;display:block;font-family:"Bit5x3";color:rgb(143, 19, 19);font-size:x-large}#div_game.svelte-y455cj fieldset.svelte-y455cj{max-width:50vw;width:auto;margin:0 auto}#div_game.svelte-y455cj fieldset div.svelte-y455cj{padding:10px}#pong_button.svelte-y455cj.svelte-y455cj{font-family:"Bit5x3";color:rgb(245, 245, 245);background-color:#333333;font-size:x-large;padding:10px}canvas.svelte-y455cj.svelte-y455cj{background-color:#333333;max-width:75vw;width:80%} \ No newline at end of file diff --git a/srcs/requirements/svelte/api_front/public/build/bundle.js b/srcs/requirements/svelte/api_front/public/build/bundle.js index 3e471222..90c658b5 100644 --- a/srcs/requirements/svelte/api_front/public/build/bundle.js +++ b/srcs/requirements/svelte/api_front/public/build/bundle.js @@ -4,6 +4,7 @@ var app = (function () { 'use strict'; function noop() { } + const identity = x => x; function assign(tar, src) { // @ts-ignore for (const k in src) @@ -111,9 +112,62 @@ var app = (function () { function action_destroyer(action_result) { return action_result && is_function(action_result.destroy) ? action_result.destroy : noop; } + + const is_client = typeof window !== 'undefined'; + let now = is_client + ? () => window.performance.now() + : () => Date.now(); + let raf = is_client ? cb => requestAnimationFrame(cb) : noop; + + const tasks = new Set(); + function run_tasks(now) { + tasks.forEach(task => { + if (!task.c(now)) { + tasks.delete(task); + task.f(); + } + }); + if (tasks.size !== 0) + raf(run_tasks); + } + /** + * Creates a new task that runs on each raf frame + * until it returns a falsy value or is aborted + */ + function loop(callback) { + let task; + if (tasks.size === 0) + raf(run_tasks); + return { + promise: new Promise(fulfill => { + tasks.add(task = { c: callback, f: fulfill }); + }), + abort() { + tasks.delete(task); + } + }; + } function append(target, node) { target.appendChild(node); } + function get_root_for_style(node) { + if (!node) + return document; + const root = node.getRootNode ? node.getRootNode() : node.ownerDocument; + if (root && root.host) { + return root; + } + return node.ownerDocument; + } + function append_empty_stylesheet(node) { + const style_element = element('style'); + append_stylesheet(get_root_for_style(node), style_element); + return style_element.sheet; + } + function append_stylesheet(node, style) { + append(node.head || node, style); + return style.sheet; + } function insert(target, node, anchor) { target.insertBefore(node, anchor || null); } @@ -174,6 +228,20 @@ var app = (function () { node.style.setProperty(key, value, important ? 'important' : ''); } } + function select_option(select, value) { + for (let i = 0; i < select.options.length; i += 1) { + const option = select.options[i]; + if (option.__value === value) { + option.selected = true; + return; + } + } + select.selectedIndex = -1; // no option should be selected + } + function select_value(select) { + const selected_option = select.querySelector(':checked') || select.options[0]; + return selected_option && selected_option.__value; + } function toggle_class(element, name, toggle) { element.classList[toggle ? 'add' : 'remove'](name); } @@ -221,6 +289,71 @@ var app = (function () { } } + // we need to store the information for multiple documents because a Svelte application could also contain iframes + // https://github.com/sveltejs/svelte/issues/3624 + const managed_styles = new Map(); + let active = 0; + // https://github.com/darkskyapp/string-hash/blob/master/index.js + function hash(str) { + let hash = 5381; + let i = str.length; + while (i--) + hash = ((hash << 5) - hash) ^ str.charCodeAt(i); + return hash >>> 0; + } + function create_style_information(doc, node) { + const info = { stylesheet: append_empty_stylesheet(node), rules: {} }; + managed_styles.set(doc, info); + return info; + } + function create_rule(node, a, b, duration, delay, ease, fn, uid = 0) { + const step = 16.666 / duration; + let keyframes = '{\n'; + for (let p = 0; p <= 1; p += step) { + const t = a + (b - a) * ease(p); + keyframes += p * 100 + `%{${fn(t, 1 - t)}}\n`; + } + const rule = keyframes + `100% {${fn(b, 1 - b)}}\n}`; + const name = `__svelte_${hash(rule)}_${uid}`; + const doc = get_root_for_style(node); + const { stylesheet, rules } = managed_styles.get(doc) || create_style_information(doc, node); + if (!rules[name]) { + rules[name] = true; + stylesheet.insertRule(`@keyframes ${name} ${rule}`, stylesheet.cssRules.length); + } + const animation = node.style.animation || ''; + node.style.animation = `${animation ? `${animation}, ` : ''}${name} ${duration}ms linear ${delay}ms 1 both`; + active += 1; + return name; + } + function delete_rule(node, name) { + const previous = (node.style.animation || '').split(', '); + const next = previous.filter(name + ? anim => anim.indexOf(name) < 0 // remove specific animation + : anim => anim.indexOf('__svelte') === -1 // remove all Svelte animations + ); + const deleted = previous.length - next.length; + if (deleted) { + node.style.animation = next.join(', '); + active -= deleted; + if (!active) + clear_rules(); + } + } + function clear_rules() { + raf(() => { + if (active) + return; + managed_styles.forEach(info => { + const { ownerNode } = info.stylesheet; + // there is no ownerNode if it runs on jsdom. + if (ownerNode) + detach(ownerNode); + }); + managed_styles.clear(); + }); + } + let current_component; function set_current_component(component) { current_component = component; @@ -388,6 +521,20 @@ var app = (function () { $$.after_update.forEach(add_render_callback); } } + + let promise; + function wait() { + if (!promise) { + promise = Promise.resolve(); + promise.then(() => { + promise = null; + }); + } + return promise; + } + function dispatch(node, direction, kind) { + node.dispatchEvent(custom_event(`${direction ? 'intro' : 'outro'}${kind}`)); + } const outroing = new Set(); let outros; function group_outros() { @@ -428,6 +575,70 @@ var app = (function () { callback(); } } + const null_transition = { duration: 0 }; + function create_in_transition(node, fn, params) { + let config = fn(node, params); + let running = false; + let animation_name; + let task; + let uid = 0; + function cleanup() { + if (animation_name) + delete_rule(node, animation_name); + } + function go() { + const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition; + if (css) + animation_name = create_rule(node, 0, 1, duration, delay, easing, css, uid++); + tick(0, 1); + const start_time = now() + delay; + const end_time = start_time + duration; + if (task) + task.abort(); + running = true; + add_render_callback(() => dispatch(node, true, 'start')); + task = loop(now => { + if (running) { + if (now >= end_time) { + tick(1, 0); + dispatch(node, true, 'end'); + cleanup(); + return running = false; + } + if (now >= start_time) { + const t = easing((now - start_time) / duration); + tick(t, 1 - t); + } + } + return running; + }); + } + let started = false; + return { + start() { + if (started) + return; + started = true; + delete_rule(node); + if (is_function(config)) { + config = config(); + wait().then(go); + } + else { + go(); + } + }, + invalidate() { + started = false; + }, + end() { + if (running) { + cleanup(); + running = false; + } + } + }; + } function handle_promise(promise, info) { const token = info.token = {}; @@ -696,7 +907,7 @@ var app = (function () { } component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31)); } - function init(component, options, instance, create_fragment, not_equal, props, append_styles, dirty = [-1]) { + function init$1(component, options, instance, create_fragment, not_equal, props, append_styles, dirty = [-1]) { const parent_component = current_component; set_current_component(component); const $$ = component.$$ = { @@ -821,6 +1032,10 @@ var app = (function () { else dispatch_dev('SvelteDOMSetAttribute', { node, attribute, value }); } + function prop_dev(node, property, value) { + node[property] = value; + dispatch_dev('SvelteDOMSetProperty', { node, property, value }); + } function set_data_dev(text, data) { data = '' + data; if (text.wholeText === data) @@ -1103,10 +1318,10 @@ var app = (function () { /* node_modules/svelte-spa-router/Router.svelte generated by Svelte v3.53.1 */ - const { Error: Error_1, Object: Object_1, console: console_1$7 } = globals; + const { Error: Error_1, Object: Object_1, console: console_1$8 } = globals; // (267:0) {:else} - function create_else_block$4(ctx) { + function create_else_block$5(ctx) { let switch_instance; let switch_instance_anchor; let current; @@ -1188,7 +1403,7 @@ var app = (function () { dispatch_dev("SvelteRegisterBlock", { block, - id: create_else_block$4.name, + id: create_else_block$5.name, type: "else", source: "(267:0) {:else}", ctx @@ -1198,7 +1413,7 @@ var app = (function () { } // (260:0) {#if componentParams} - function create_if_block$a(ctx) { + function create_if_block$c(ctx) { let switch_instance; let switch_instance_anchor; let current; @@ -1283,7 +1498,7 @@ var app = (function () { dispatch_dev("SvelteRegisterBlock", { block, - id: create_if_block$a.name, + id: create_if_block$c.name, type: "if", source: "(260:0) {#if componentParams}", ctx @@ -1292,12 +1507,12 @@ var app = (function () { return block; } - function create_fragment$w(ctx) { + function create_fragment$z(ctx) { let current_block_type_index; let if_block; let if_block_anchor; let current; - const if_block_creators = [create_if_block$a, create_else_block$4]; + const if_block_creators = [create_if_block$c, create_else_block$5]; const if_blocks = []; function select_block_type(ctx, dirty) { @@ -1365,7 +1580,7 @@ var app = (function () { dispatch_dev("SvelteRegisterBlock", { block, - id: create_fragment$w.name, + id: create_fragment$z.name, type: "component", source: "", ctx @@ -1566,7 +1781,7 @@ var app = (function () { window.location.hash = href; } - function instance$w($$self, $$props, $$invalidate) { + function instance$z($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; validate_slots('Router', slots, []); let { routes = {} } = $$props; @@ -1883,7 +2098,7 @@ var app = (function () { const writable_props = ['routes', 'prefix', 'restoreScrollState']; Object_1.keys($$props).forEach(key => { - if (!~writable_props.indexOf(key) && key.slice(0, 2) !== '$$' && key !== 'slot') console_1$7.warn(` was created with unknown prop '${key}'`); + if (!~writable_props.indexOf(key) && key.slice(0, 2) !== '$$' && key !== 'slot') console_1$8.warn(` was created with unknown prop '${key}'`); }); function routeEvent_handler(event) { @@ -1981,7 +2196,7 @@ var app = (function () { constructor(options) { super(options); - init(this, options, instance$w, create_fragment$w, safe_not_equal, { + init$1(this, options, instance$z, create_fragment$z, safe_not_equal, { routes: 3, prefix: 4, restoreScrollState: 5 @@ -1991,7 +2206,7 @@ var app = (function () { component: this, tagName: "Router", options, - id: create_fragment$w.name + id: create_fragment$z.name }); } @@ -2021,9 +2236,9 @@ var app = (function () { } /* src/pages/NotFound.svelte generated by Svelte v3.53.1 */ - const file$s = "src/pages/NotFound.svelte"; + const file$v = "src/pages/NotFound.svelte"; - function create_fragment$v(ctx) { + function create_fragment$y(ctx) { let h1; let t1; let p0; @@ -2049,12 +2264,12 @@ var app = (function () { a = element("a"); h2 = element("h2"); h2.textContent = "Take me home →"; - add_location(h1, file$s, 4, 0, 64); - add_location(p0, file$s, 5, 0, 87); - add_location(p1, file$s, 7, 0, 192); - add_location(h2, file$s, 9, 4, 247); + add_location(h1, file$v, 4, 0, 64); + add_location(p0, file$v, 5, 0, 87); + add_location(p1, file$v, 7, 0, 192); + add_location(h2, file$v, 9, 4, 247); attr_dev(a, "href", "/"); - add_location(a, file$s, 8, 0, 221); + add_location(a, file$v, 8, 0, 221); }, l: function claim(nodes) { throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option"); @@ -2092,7 +2307,7 @@ var app = (function () { dispatch_dev("SvelteRegisterBlock", { block, - id: create_fragment$v.name, + id: create_fragment$y.name, type: "component", source: "", ctx @@ -2101,7 +2316,7 @@ var app = (function () { return block; } - function instance$v($$self, $$props, $$invalidate) { + function instance$y($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; validate_slots('NotFound', slots, []); const writable_props = []; @@ -2117,13 +2332,13 @@ var app = (function () { class NotFound extends SvelteComponentDev { constructor(options) { super(options); - init(this, options, instance$v, create_fragment$v, safe_not_equal, {}); + init$1(this, options, instance$y, create_fragment$y, safe_not_equal, {}); dispatch_dev("SvelteRegisterComponent", { component: this, tagName: "NotFound", options, - id: create_fragment$v.name + id: create_fragment$y.name }); } } @@ -2167,11 +2382,11 @@ var app = (function () { /* src/pieces/Header.svelte generated by Svelte v3.53.1 */ - const { console: console_1$6 } = globals; - const file$r = "src/pieces/Header.svelte"; + const { console: console_1$7 } = globals; + const file$u = "src/pieces/Header.svelte"; - // (24:39) - function create_if_block_1$3(ctx) { + // (27:39) + function create_if_block_1$4(ctx) { let button; let mounted; let dispose; @@ -2180,14 +2395,14 @@ var app = (function () { c: function create() { button = element("button"); button.textContent = "Settings"; - attr_dev(button, "class", "svelte-1gjmpio"); - add_location(button, file$r, 24, 6, 927); + attr_dev(button, "class", "svelte-1aisfio"); + add_location(button, file$u, 27, 6, 1112); }, m: function mount(target, anchor) { insert_dev(target, button, anchor); if (!mounted) { - dispose = listen_dev(button, "click", /*click_handler_2*/ ctx[4], false, false, false); + dispose = listen_dev(button, "click", /*click_handler_5*/ ctx[7], false, false, false); mounted = true; } }, @@ -2201,17 +2416,17 @@ var app = (function () { dispatch_dev("SvelteRegisterBlock", { block, - id: create_if_block_1$3.name, + id: create_if_block_1$4.name, type: "if", - source: "(24:39) ", + source: "(27:39) ", ctx }); return block; } - // (22:4) {#if $location !== '/profile'} - function create_if_block$9(ctx) { + // (25:4) {#if $location !== '/profile'} + function create_if_block$b(ctx) { let button; let mounted; let dispose; @@ -2220,14 +2435,14 @@ var app = (function () { c: function create() { button = element("button"); button.textContent = "My Profile"; - attr_dev(button, "class", "svelte-1gjmpio"); - add_location(button, file$r, 22, 6, 817); + attr_dev(button, "class", "svelte-1aisfio"); + add_location(button, file$u, 25, 6, 1002); }, m: function mount(target, anchor) { insert_dev(target, button, anchor); if (!mounted) { - dispose = listen_dev(button, "click", /*click_handler_1*/ ctx[3], false, false, false); + dispose = listen_dev(button, "click", /*click_handler_4*/ ctx[6], false, false, false); mounted = true; } }, @@ -2241,16 +2456,16 @@ var app = (function () { dispatch_dev("SvelteRegisterBlock", { block, - id: create_if_block$9.name, + id: create_if_block$b.name, type: "if", - source: "(22:4) {#if $location !== '/profile'}", + source: "(25:4) {#if $location !== '/profile'}", ctx }); return block; } - function create_fragment$u(ctx) { + function create_fragment$x(ctx) { let header; let img; let img_src_value; @@ -2258,18 +2473,24 @@ var app = (function () { let h1; let t2; let nav; - let t3; let button0; - let t5; + let t4; let button1; - let t7; + let t6; let button2; + let t8; + let t9; + let button3; + let t11; + let button4; + let t13; + let button5; let mounted; let dispose; function select_block_type(ctx, dirty) { - if (/*$location*/ ctx[0] !== '/profile') return create_if_block$9; - if (/*$location*/ ctx[0] === '/profile') return create_if_block_1$3; + if (/*$location*/ ctx[0] !== '/profile') return create_if_block$b; + if (/*$location*/ ctx[0] === '/profile') return create_if_block_1$4; } let current_block_type = select_block_type(ctx); @@ -2284,32 +2505,47 @@ var app = (function () { h1.textContent = "Potato Pong"; t2 = space(); nav = element("nav"); - if (if_block) if_block.c(); - t3 = space(); button0 = element("button"); - button0.textContent = "Friends"; - t5 = space(); + button0.textContent = "Game"; + t4 = space(); button1 = element("button"); - button1.textContent = "test"; - t7 = space(); + button1.textContent = "Match List"; + t6 = space(); button2 = element("button"); - button2.textContent = "Log Out"; + button2.textContent = "Ranking"; + t8 = space(); + if (if_block) if_block.c(); + t9 = space(); + button3 = element("button"); + button3.textContent = "Friends"; + t11 = space(); + button4 = element("button"); + button4.textContent = "test"; + t13 = space(); + button5 = element("button"); + button5.textContent = "Log Out"; if (!src_url_equal(img.src, img_src_value = "/img/potato_logo.png")) attr_dev(img, "src", img_src_value); attr_dev(img, "alt", "Potato Pong Logo"); - attr_dev(img, "class", "svelte-1gjmpio"); - add_location(img, file$r, 18, 2, 660); - attr_dev(h1, "class", "svelte-1gjmpio"); - add_location(h1, file$r, 19, 2, 747); - attr_dev(button0, "class", "svelte-1gjmpio"); - add_location(button0, file$r, 31, 4, 1171); - attr_dev(button1, "class", "svelte-1gjmpio"); - add_location(button1, file$r, 32, 4, 1244); - attr_dev(button2, "class", "svelte-1gjmpio"); - add_location(button2, file$r, 33, 4, 1303); - attr_dev(nav, "class", "svelte-1gjmpio"); - add_location(nav, file$r, 20, 2, 770); - attr_dev(header, "class", "svelte-1gjmpio"); - add_location(header, file$r, 17, 0, 649); + attr_dev(img, "class", "svelte-1aisfio"); + add_location(img, file$u, 18, 2, 660); + attr_dev(h1, "class", "svelte-1aisfio"); + add_location(h1, file$u, 19, 2, 747); + attr_dev(button0, "class", "svelte-1aisfio"); + add_location(button0, file$u, 21, 1, 777); + attr_dev(button1, "class", "svelte-1aisfio"); + add_location(button1, file$u, 22, 1, 833); + attr_dev(button2, "class", "svelte-1aisfio"); + add_location(button2, file$u, 23, 1, 900); + attr_dev(button3, "class", "svelte-1aisfio"); + add_location(button3, file$u, 34, 4, 1356); + attr_dev(button4, "class", "svelte-1aisfio"); + add_location(button4, file$u, 35, 4, 1429); + attr_dev(button5, "class", "svelte-1aisfio"); + add_location(button5, file$u, 36, 4, 1488); + attr_dev(nav, "class", "svelte-1aisfio"); + add_location(nav, file$u, 20, 2, 770); + attr_dev(header, "class", "svelte-1aisfio"); + add_location(header, file$u, 17, 0, 649); }, l: function claim(nodes) { throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option"); @@ -2321,20 +2557,29 @@ var app = (function () { append_dev(header, h1); append_dev(header, t2); append_dev(header, nav); - if (if_block) if_block.m(nav, null); - append_dev(nav, t3); append_dev(nav, button0); - append_dev(nav, t5); + append_dev(nav, t4); append_dev(nav, button1); - append_dev(nav, t7); + append_dev(nav, t6); append_dev(nav, button2); + append_dev(nav, t8); + if (if_block) if_block.m(nav, null); + append_dev(nav, t9); + append_dev(nav, button3); + append_dev(nav, t11); + append_dev(nav, button4); + append_dev(nav, t13); + append_dev(nav, button5); if (!mounted) { dispose = [ listen_dev(img, "click", /*click_handler*/ ctx[2], false, false, false), - listen_dev(button0, "click", /*click_handler_3*/ ctx[5], false, false, false), - listen_dev(button1, "click", /*click_handler_4*/ ctx[6], false, false, false), - listen_dev(button2, "click", /*handleClickLogout*/ ctx[1], false, false, false) + listen_dev(button0, "click", /*click_handler_1*/ ctx[3], false, false, false), + listen_dev(button1, "click", /*click_handler_2*/ ctx[4], false, false, false), + listen_dev(button2, "click", /*click_handler_3*/ ctx[5], false, false, false), + listen_dev(button3, "click", /*click_handler_6*/ ctx[8], false, false, false), + listen_dev(button4, "click", /*click_handler_7*/ ctx[9], false, false, false), + listen_dev(button5, "click", /*handleClickLogout*/ ctx[1], false, false, false) ]; mounted = true; @@ -2349,7 +2594,7 @@ var app = (function () { if (if_block) { if_block.c(); - if_block.m(nav, t3); + if_block.m(nav, t9); } } }, @@ -2369,7 +2614,7 @@ var app = (function () { dispatch_dev("SvelteRegisterBlock", { block, - id: create_fragment$u.name, + id: create_fragment$x.name, type: "component", source: "", ctx @@ -2378,7 +2623,7 @@ var app = (function () { return block; } - function instance$u($$self, $$props, $$invalidate) { + function instance$x($$self, $$props, $$invalidate) { let $location; validate_store(location$2, 'location'); component_subscribe($$self, location$2, $$value => $$invalidate(0, $location = $$value)); @@ -2396,14 +2641,17 @@ var app = (function () { const writable_props = []; Object.keys($$props).forEach(key => { - if (!~writable_props.indexOf(key) && key.slice(0, 2) !== '$$' && key !== 'slot') console_1$6.warn(`
was created with unknown prop '${key}'`); + if (!~writable_props.indexOf(key) && key.slice(0, 2) !== '$$' && key !== 'slot') console_1$7.warn(`
was created with unknown prop '${key}'`); }); const click_handler = () => push('/'); - const click_handler_1 = () => push('/profile'); - const click_handler_2 = () => push('/profile/settings'); - const click_handler_3 = () => push('/profile/friends'); - const click_handler_4 = () => push('/test'); + const click_handler_1 = () => push('/game'); + const click_handler_2 = () => push('/matchlist'); + const click_handler_3 = () => push('/ranking'); + const click_handler_4 = () => push('/profile'); + const click_handler_5 = () => push('/profile/settings'); + const click_handler_6 = () => push('/profile/friends'); + const click_handler_7 = () => push('/test'); $$self.$capture_state = () => ({ push, @@ -2427,29 +2675,32 @@ var app = (function () { click_handler_1, click_handler_2, click_handler_3, - click_handler_4 + click_handler_4, + click_handler_5, + click_handler_6, + click_handler_7 ]; } class Header extends SvelteComponentDev { constructor(options) { super(options); - init(this, options, instance$u, create_fragment$u, safe_not_equal, {}); + init$1(this, options, instance$x, create_fragment$x, safe_not_equal, {}); dispatch_dev("SvelteRegisterComponent", { component: this, tagName: "Header", options, - id: create_fragment$u.name + id: create_fragment$x.name }); } } /* src/pieces/GenerateUserDisplay.svelte generated by Svelte v3.53.1 */ - const file$q = "src/pieces/GenerateUserDisplay.svelte"; + const file$t = "src/pieces/GenerateUserDisplay.svelte"; // (58:2) {#if user !== undefined} - function create_if_block$8(ctx) { + function create_if_block$a(ctx) { let main; let img; let img_src_value; @@ -2547,49 +2798,49 @@ var app = (function () { attr_dev(img, "class", "avatar svelte-16aefqu"); if (!src_url_equal(img.src, img_src_value = /*avatar*/ ctx[2])) attr_dev(img, "src", img_src_value); attr_dev(img, "alt", "default user icon"); - add_location(img, file$q, 61, 4, 1964); + add_location(img, file$t, 61, 4, 1964); attr_dev(div0, "class", "username svelte-16aefqu"); - add_location(div0, file$q, 62, 4, 2028); + add_location(div0, file$t, 62, 4, 2028); attr_dev(path0, "d", "M512 255.1c0 11.34-7.406 20.86-18.44 23.64l-171.3 42.78l-42.78 171.1C276.7 504.6 267.2 512 255.9 512s-20.84-7.406-23.62-18.44l-42.66-171.2L18.47 279.6C7.406 276.8 0 267.3 0 255.1c0-11.34 7.406-20.83 18.44-23.61l171.2-42.78l42.78-171.1C235.2 7.406 244.7 0 256 0s20.84 7.406 23.62 18.44l42.78 171.2l171.2 42.78C504.6 235.2 512 244.6 512 255.1z"); attr_dev(path0, "class", "svelte-16aefqu"); - add_location(path0, file$q, 67, 10, 2235); + add_location(path0, file$t, 67, 10, 2235); attr_dev(svg0, "viewBox", "0 0 512 512"); attr_dev(svg0, "class", "svelte-16aefqu"); - add_location(svg0, file$q, 66, 10, 2197); + add_location(svg0, file$t, 66, 10, 2197); attr_dev(span0, "class", "glitter-star svelte-16aefqu"); - add_location(span0, file$q, 65, 8, 2138); + add_location(span0, file$t, 65, 8, 2138); attr_dev(path1, "d", "M512 255.1c0 11.34-7.406 20.86-18.44 23.64l-171.3 42.78l-42.78 171.1C276.7 504.6 267.2 512 255.9 512s-20.84-7.406-23.62-18.44l-42.66-171.2L18.47 279.6C7.406 276.8 0 267.3 0 255.1c0-11.34 7.406-20.83 18.44-23.61l171.2-42.78l42.78-171.1C235.2 7.406 244.7 0 256 0s20.84 7.406 23.62 18.44l42.78 171.2l171.2 42.78C504.6 235.2 512 244.6 512 255.1z"); attr_dev(path1, "class", "svelte-16aefqu"); - add_location(path1, file$q, 72, 10, 2728); + add_location(path1, file$t, 72, 10, 2728); attr_dev(svg1, "viewBox", "0 0 512 512"); attr_dev(svg1, "class", "svelte-16aefqu"); - add_location(svg1, file$q, 71, 10, 2690); + add_location(svg1, file$t, 71, 10, 2690); attr_dev(span1, "class", "glitter-star svelte-16aefqu"); - add_location(span1, file$q, 70, 8, 2631); + add_location(span1, file$t, 70, 8, 2631); attr_dev(path2, "d", "M512 255.1c0 11.34-7.406 20.86-18.44 23.64l-171.3 42.78l-42.78 171.1C276.7 504.6 267.2 512 255.9 512s-20.84-7.406-23.62-18.44l-42.66-171.2L18.47 279.6C7.406 276.8 0 267.3 0 255.1c0-11.34 7.406-20.83 18.44-23.61l171.2-42.78l42.78-171.1C235.2 7.406 244.7 0 256 0s20.84 7.406 23.62 18.44l42.78 171.2l171.2 42.78C504.6 235.2 512 244.6 512 255.1z"); attr_dev(path2, "class", "svelte-16aefqu"); - add_location(path2, file$q, 77, 10, 3221); + add_location(path2, file$t, 77, 10, 3221); attr_dev(svg2, "viewBox", "0 0 512 512"); attr_dev(svg2, "class", "svelte-16aefqu"); - add_location(svg2, file$q, 76, 10, 3183); + add_location(svg2, file$t, 76, 10, 3183); attr_dev(span2, "class", "glitter-star svelte-16aefqu"); - add_location(span2, file$q, 75, 8, 3124); + add_location(span2, file$t, 75, 8, 3124); attr_dev(span3, "class", "glitter-text svelte-16aefqu"); - add_location(span3, file$q, 80, 8, 3617); + add_location(span3, file$t, 80, 8, 3617); attr_dev(span4, "class", "glitter svelte-16aefqu"); - add_location(span4, file$q, 64, 6, 2107); + add_location(span4, file$t, 64, 6, 2107); attr_dev(div1, "class", "rank svelte-16aefqu"); - add_location(div1, file$q, 63, 4, 2076); + add_location(div1, file$t, 63, 4, 2076); attr_dev(h4, "class", "svelte-16aefqu"); - add_location(h4, file$q, 84, 6, 3722); - add_location(p0, file$q, 85, 6, 3754); - add_location(p1, file$q, 86, 6, 3797); - add_location(p2, file$q, 87, 6, 3842); - add_location(p3, file$q, 88, 6, 3885); + add_location(h4, file$t, 84, 6, 3722); + add_location(p0, file$t, 85, 6, 3754); + add_location(p1, file$t, 86, 6, 3797); + add_location(p2, file$t, 87, 6, 3842); + add_location(p3, file$t, 88, 6, 3885); attr_dev(section, "class", "main-stats svelte-16aefqu"); - add_location(section, file$q, 83, 4, 3687); + add_location(section, file$t, 83, 4, 3687); attr_dev(main, "class", "svelte-16aefqu"); - add_location(main, file$q, 58, 2, 1786); + add_location(main, file$t, 58, 2, 1786); }, m: function mount(target, anchor) { insert_dev(target, main, anchor); @@ -2660,7 +2911,7 @@ var app = (function () { dispatch_dev("SvelteRegisterBlock", { block, - id: create_if_block$8.name, + id: create_if_block$a.name, type: "if", source: "(58:2) {#if user !== undefined}", ctx @@ -2669,16 +2920,16 @@ var app = (function () { return block; } - function create_fragment$t(ctx) { + function create_fragment$w(ctx) { let div; - let if_block = /*user*/ ctx[0] !== undefined && create_if_block$8(ctx); + let if_block = /*user*/ ctx[0] !== undefined && create_if_block$a(ctx); const block = { c: function create() { div = element("div"); if (if_block) if_block.c(); attr_dev(div, "class", "outer svelte-16aefqu"); - add_location(div, file$q, 56, 0, 1737); + add_location(div, file$t, 56, 0, 1737); }, l: function claim(nodes) { throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option"); @@ -2692,7 +2943,7 @@ var app = (function () { if (if_block) { if_block.p(ctx, dirty); } else { - if_block = create_if_block$8(ctx); + if_block = create_if_block$a(ctx); if_block.c(); if_block.m(div, null); } @@ -2711,7 +2962,7 @@ var app = (function () { dispatch_dev("SvelteRegisterBlock", { block, - id: create_fragment$t.name, + id: create_fragment$w.name, type: "component", source: "", ctx @@ -2720,7 +2971,7 @@ var app = (function () { return block; } - function instance$t($$self, $$props, $$invalidate) { + function instance$w($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; validate_slots('GenerateUserDisplay', slots, []); let { user } = $$props; @@ -2867,13 +3118,13 @@ var app = (function () { class GenerateUserDisplay extends SvelteComponentDev { constructor(options) { super(options); - init(this, options, instance$t, create_fragment$t, safe_not_equal, { user: 0, primary: 4 }); + init$1(this, options, instance$w, create_fragment$w, safe_not_equal, { user: 0, primary: 4 }); dispatch_dev("SvelteRegisterComponent", { component: this, tagName: "GenerateUserDisplay", options, - id: create_fragment$t.name + id: create_fragment$w.name }); } @@ -2896,9 +3147,9 @@ var app = (function () { /* src/pieces/chat/tmp_debug.svelte generated by Svelte v3.53.1 */ - const file$p = "src/pieces/chat/tmp_debug.svelte"; + const file$s = "src/pieces/chat/tmp_debug.svelte"; - function create_fragment$s(ctx) { + function create_fragment$v(ctx) { let div; let p; let t1; @@ -2964,18 +3215,18 @@ var app = (function () { t21 = space(); button10 = element("button"); button10.textContent = "user from room_set"; - add_location(p, file$p, 8, 1, 209); - add_location(button0, file$p, 9, 1, 237); - add_location(button1, file$p, 10, 1, 305); - add_location(button2, file$p, 11, 1, 372); - add_location(button3, file$p, 12, 1, 439); - add_location(button4, file$p, 13, 1, 505); - add_location(button5, file$p, 14, 1, 576); - add_location(button6, file$p, 15, 1, 647); - add_location(button7, file$p, 16, 1, 719); - add_location(button8, file$p, 17, 1, 788); - add_location(button9, file$p, 18, 1, 855); - add_location(button10, file$p, 22, 1, 975); + add_location(p, file$s, 8, 1, 209); + add_location(button0, file$s, 9, 1, 237); + add_location(button1, file$s, 10, 1, 305); + add_location(button2, file$s, 11, 1, 372); + add_location(button3, file$s, 12, 1, 439); + add_location(button4, file$s, 13, 1, 505); + add_location(button5, file$s, 14, 1, 576); + add_location(button6, file$s, 15, 1, 647); + add_location(button7, file$s, 16, 1, 719); + add_location(button8, file$s, 17, 1, 788); + add_location(button9, file$s, 18, 1, 855); + add_location(button10, file$s, 22, 1, 975); set_style(div, "display", "flex"); set_style(div, "flex-direction", "column"); set_style(div, "font-size", "12px"); @@ -2983,7 +3234,7 @@ var app = (function () { set_style(div, "top", "20px"); set_style(div, "left", "20px"); set_style(div, "background-color", "white"); - add_location(div, file$p, 7, 0, 73); + add_location(div, file$s, 7, 0, 73); }, l: function claim(nodes) { throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option"); @@ -3044,7 +3295,7 @@ var app = (function () { dispatch_dev("SvelteRegisterBlock", { block, - id: create_fragment$s.name, + id: create_fragment$v.name, type: "component", source: "", ctx @@ -3053,7 +3304,7 @@ var app = (function () { return block; } - function instance$s($$self, $$props, $$invalidate) { + function instance$v($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; validate_slots('Tmp_debug', slots, []); let { layout = "" } = $$props; @@ -3146,13 +3397,13 @@ var app = (function () { class Tmp_debug extends SvelteComponentDev { constructor(options) { super(options); - init(this, options, instance$s, create_fragment$s, safe_not_equal, { layout: 0, layouts: 1 }); + init$1(this, options, instance$v, create_fragment$v, safe_not_equal, { layout: 0, layouts: 1 }); dispatch_dev("SvelteRegisterComponent", { component: this, tagName: "Tmp_debug", options, - id: create_fragment$s.name + id: create_fragment$v.name }); } @@ -3175,9 +3426,9 @@ var app = (function () { /* src/pieces/chat/Chat_box_css.svelte generated by Svelte v3.53.1 */ - const file$o = "src/pieces/chat/Chat_box_css.svelte"; + const file$r = "src/pieces/chat/Chat_box_css.svelte"; - function create_fragment$r(ctx) { + function create_fragment$u(ctx) { let div; let div_class_value; let current; @@ -3190,7 +3441,7 @@ var app = (function () { if (default_slot) default_slot.c(); attr_dev(div, "class", div_class_value = "" + (/*layout*/ ctx[1] + " chat_box" + " svelte-auy6qm")); set_style(div, "background-color", /*color*/ ctx[0]); - add_location(div, file$o, 5, 0, 67); + add_location(div, file$r, 5, 0, 67); }, l: function claim(nodes) { throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option"); @@ -3245,7 +3496,7 @@ var app = (function () { dispatch_dev("SvelteRegisterBlock", { block, - id: create_fragment$r.name, + id: create_fragment$u.name, type: "component", source: "", ctx @@ -3254,7 +3505,7 @@ var app = (function () { return block; } - function instance$r($$self, $$props, $$invalidate) { + function instance$u($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; validate_slots('Chat_box_css', slots, ['default']); let { color } = $$props; @@ -3299,13 +3550,13 @@ var app = (function () { class Chat_box_css extends SvelteComponentDev { constructor(options) { super(options); - init(this, options, instance$r, create_fragment$r, safe_not_equal, { color: 0, layout: 1 }); + init$1(this, options, instance$u, create_fragment$u, safe_not_equal, { color: 0, layout: 1 }); dispatch_dev("SvelteRegisterComponent", { component: this, tagName: "Chat_box_css", options, - id: create_fragment$r.name + id: create_fragment$u.name }); } @@ -3328,9 +3579,9 @@ var app = (function () { /* src/pieces/chat/Chat_button.svelte generated by Svelte v3.53.1 */ - const file$n = "src/pieces/chat/Chat_button.svelte"; + const file$q = "src/pieces/chat/Chat_button.svelte"; - function create_fragment$q(ctx) { + function create_fragment$t(ctx) { let button; let p; let button_class_value; @@ -3346,10 +3597,10 @@ var app = (function () { p = element("p"); if (default_slot) default_slot.c(); attr_dev(p, "class", "svelte-j5z24r"); - add_location(p, file$n, 24, 1, 416); + add_location(p, file$q, 24, 1, 416); attr_dev(button, "title", /*my_title*/ ctx[1]); attr_dev(button, "class", button_class_value = "" + (null_to_empty(/*my_class*/ ctx[0]) + " svelte-j5z24r")); - add_location(button, file$n, 23, 0, 327); + add_location(button, file$q, 23, 0, 327); }, l: function claim(nodes) { throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option"); @@ -3427,7 +3678,7 @@ var app = (function () { dispatch_dev("SvelteRegisterBlock", { block, - id: create_fragment$q.name, + id: create_fragment$t.name, type: "component", source: "", ctx @@ -3436,7 +3687,7 @@ var app = (function () { return block; } - function instance$q($$self, $$props, $$invalidate) { + function instance$t($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; validate_slots('Chat_button', slots, ['default']); let { my_class = "" } = $$props; @@ -3501,7 +3752,7 @@ var app = (function () { constructor(options) { super(options); - init(this, options, instance$q, create_fragment$q, safe_not_equal, { + init$1(this, options, instance$t, create_fragment$t, safe_not_equal, { my_class: 0, my_title: 1, layout: 4, @@ -3513,7 +3764,7 @@ var app = (function () { component: this, tagName: "Chat_button", options, - id: create_fragment$q.name + id: create_fragment$t.name }); } @@ -3559,7 +3810,7 @@ var app = (function () { } /* src/pieces/chat/Layout_close.svelte generated by Svelte v3.53.1 */ - const file$m = "src/pieces/chat/Layout_close.svelte"; + const file$p = "src/pieces/chat/Layout_close.svelte"; // (10:1) \n {:else if $location === '/profile'}\n \n {/if}\n\n \n \n\n \n \n \n \n \n
\n\n\n\n\n\n\n\n","\n\n\n
\n {#if user !== undefined}\n
\n \n \n \"default\n
{user.username}
\n
Rank: \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {rank}\n \n
\n
\n

Match Statistics

\n

Total: {user.stats.totalGame}

\n

Victories: {user.stats.winGame}

\n

Losses: {user.stats.loseGame}

\n

Draws: {user.stats.drawGame}

\n
\n
\n {/if}\n
\n\n\n\n","\n\n
\n\t

temp, for testing :

\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n
\n","\n\n\n
\n\t\n
\n\n\n\n","\n\n\n\n\n\n\n\n\n","\n\n\n
\n\t\n
\n\n\n\n\n","\n\n\n
\n\n\t\n\t\n\n\t\n\t\n\n\t\n\t\n\n\t\n\t
\n\t\t

list of your rooms :

\n\t\t
\n\t\t\t
\n\t\t\t\t

/ you have no chat room yet /

\n\t\t\t
\n\t\t\t\n\t\t\t\n\t\t
\n\t
\n\n
\n\n\n\n","\n\n
\n\t

{name}

\n\t

\n
\n\n\n\n","const PACKET_TYPES = Object.create(null); // no Map = no polyfill\nPACKET_TYPES[\"open\"] = \"0\";\nPACKET_TYPES[\"close\"] = \"1\";\nPACKET_TYPES[\"ping\"] = \"2\";\nPACKET_TYPES[\"pong\"] = \"3\";\nPACKET_TYPES[\"message\"] = \"4\";\nPACKET_TYPES[\"upgrade\"] = \"5\";\nPACKET_TYPES[\"noop\"] = \"6\";\nconst PACKET_TYPES_REVERSE = Object.create(null);\nObject.keys(PACKET_TYPES).forEach(key => {\n PACKET_TYPES_REVERSE[PACKET_TYPES[key]] = key;\n});\nconst ERROR_PACKET = { type: \"error\", data: \"parser error\" };\nexport { PACKET_TYPES, PACKET_TYPES_REVERSE, ERROR_PACKET };\n","import { PACKET_TYPES } from \"./commons.js\";\nconst withNativeBlob = typeof Blob === \"function\" ||\n (typeof Blob !== \"undefined\" &&\n Object.prototype.toString.call(Blob) === \"[object BlobConstructor]\");\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\n// ArrayBuffer.isView method is not defined in IE10\nconst isView = obj => {\n return typeof ArrayBuffer.isView === \"function\"\n ? ArrayBuffer.isView(obj)\n : obj && obj.buffer instanceof ArrayBuffer;\n};\nconst encodePacket = ({ type, data }, supportsBinary, callback) => {\n if (withNativeBlob && data instanceof Blob) {\n if (supportsBinary) {\n return callback(data);\n }\n else {\n return encodeBlobAsBase64(data, callback);\n }\n }\n else if (withNativeArrayBuffer &&\n (data instanceof ArrayBuffer || isView(data))) {\n if (supportsBinary) {\n return callback(data);\n }\n else {\n return encodeBlobAsBase64(new Blob([data]), callback);\n }\n }\n // plain string\n return callback(PACKET_TYPES[type] + (data || \"\"));\n};\nconst encodeBlobAsBase64 = (data, callback) => {\n const fileReader = new FileReader();\n fileReader.onload = function () {\n const content = fileReader.result.split(\",\")[1];\n callback(\"b\" + content);\n };\n return fileReader.readAsDataURL(data);\n};\nexport default encodePacket;\n","const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nconst lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (let i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\nexport const encode = (arraybuffer) => {\n let bytes = new Uint8Array(arraybuffer), i, len = bytes.length, base64 = '';\n for (i = 0; i < len; i += 3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += chars[bytes[i + 2] & 63];\n }\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + '=';\n }\n else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + '==';\n }\n return base64;\n};\nexport const decode = (base64) => {\n let bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;\n if (base64[base64.length - 1] === '=') {\n bufferLength--;\n if (base64[base64.length - 2] === '=') {\n bufferLength--;\n }\n }\n const arraybuffer = new ArrayBuffer(bufferLength), bytes = new Uint8Array(arraybuffer);\n for (i = 0; i < len; i += 4) {\n encoded1 = lookup[base64.charCodeAt(i)];\n encoded2 = lookup[base64.charCodeAt(i + 1)];\n encoded3 = lookup[base64.charCodeAt(i + 2)];\n encoded4 = lookup[base64.charCodeAt(i + 3)];\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n return arraybuffer;\n};\n","import { ERROR_PACKET, PACKET_TYPES_REVERSE } from \"./commons.js\";\nimport { decode } from \"./contrib/base64-arraybuffer.js\";\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst decodePacket = (encodedPacket, binaryType) => {\n if (typeof encodedPacket !== \"string\") {\n return {\n type: \"message\",\n data: mapBinary(encodedPacket, binaryType)\n };\n }\n const type = encodedPacket.charAt(0);\n if (type === \"b\") {\n return {\n type: \"message\",\n data: decodeBase64Packet(encodedPacket.substring(1), binaryType)\n };\n }\n const packetType = PACKET_TYPES_REVERSE[type];\n if (!packetType) {\n return ERROR_PACKET;\n }\n return encodedPacket.length > 1\n ? {\n type: PACKET_TYPES_REVERSE[type],\n data: encodedPacket.substring(1)\n }\n : {\n type: PACKET_TYPES_REVERSE[type]\n };\n};\nconst decodeBase64Packet = (data, binaryType) => {\n if (withNativeArrayBuffer) {\n const decoded = decode(data);\n return mapBinary(decoded, binaryType);\n }\n else {\n return { base64: true, data }; // fallback for old browsers\n }\n};\nconst mapBinary = (data, binaryType) => {\n switch (binaryType) {\n case \"blob\":\n return data instanceof ArrayBuffer ? new Blob([data]) : data;\n case \"arraybuffer\":\n default:\n return data; // assuming the data is already an ArrayBuffer\n }\n};\nexport default decodePacket;\n","import encodePacket from \"./encodePacket.js\";\nimport decodePacket from \"./decodePacket.js\";\nconst SEPARATOR = String.fromCharCode(30); // see https://en.wikipedia.org/wiki/Delimiter#ASCII_delimited_text\nconst encodePayload = (packets, callback) => {\n // some packets may be added to the array while encoding, so the initial length must be saved\n const length = packets.length;\n const encodedPackets = new Array(length);\n let count = 0;\n packets.forEach((packet, i) => {\n // force base64 encoding for binary packets\n encodePacket(packet, false, encodedPacket => {\n encodedPackets[i] = encodedPacket;\n if (++count === length) {\n callback(encodedPackets.join(SEPARATOR));\n }\n });\n });\n};\nconst decodePayload = (encodedPayload, binaryType) => {\n const encodedPackets = encodedPayload.split(SEPARATOR);\n const packets = [];\n for (let i = 0; i < encodedPackets.length; i++) {\n const decodedPacket = decodePacket(encodedPackets[i], binaryType);\n packets.push(decodedPacket);\n if (decodedPacket.type === \"error\") {\n break;\n }\n }\n return packets;\n};\nexport const protocol = 4;\nexport { encodePacket, encodePayload, decodePacket, decodePayload };\n","/**\n * Initialize a new `Emitter`.\n *\n * @api public\n */\n\nexport function Emitter(obj) {\n if (obj) return mixin(obj);\n}\n\n/**\n * Mixin the emitter properties.\n *\n * @param {Object} obj\n * @return {Object}\n * @api private\n */\n\nfunction mixin(obj) {\n for (var key in Emitter.prototype) {\n obj[key] = Emitter.prototype[key];\n }\n return obj;\n}\n\n/**\n * Listen on the given `event` with `fn`.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.on =\nEmitter.prototype.addEventListener = function(event, fn){\n this._callbacks = this._callbacks || {};\n (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\n .push(fn);\n return this;\n};\n\n/**\n * Adds an `event` listener that will be invoked a single\n * time then automatically removed.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.once = function(event, fn){\n function on() {\n this.off(event, on);\n fn.apply(this, arguments);\n }\n\n on.fn = fn;\n this.on(event, on);\n return this;\n};\n\n/**\n * Remove the given callback for `event` or all\n * registered callbacks.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.off =\nEmitter.prototype.removeListener =\nEmitter.prototype.removeAllListeners =\nEmitter.prototype.removeEventListener = function(event, fn){\n this._callbacks = this._callbacks || {};\n\n // all\n if (0 == arguments.length) {\n this._callbacks = {};\n return this;\n }\n\n // specific event\n var callbacks = this._callbacks['$' + event];\n if (!callbacks) return this;\n\n // remove all handlers\n if (1 == arguments.length) {\n delete this._callbacks['$' + event];\n return this;\n }\n\n // remove specific handler\n var cb;\n for (var i = 0; i < callbacks.length; i++) {\n cb = callbacks[i];\n if (cb === fn || cb.fn === fn) {\n callbacks.splice(i, 1);\n break;\n }\n }\n\n // Remove event specific arrays for event types that no\n // one is subscribed for to avoid memory leak.\n if (callbacks.length === 0) {\n delete this._callbacks['$' + event];\n }\n\n return this;\n};\n\n/**\n * Emit `event` with the given args.\n *\n * @param {String} event\n * @param {Mixed} ...\n * @return {Emitter}\n */\n\nEmitter.prototype.emit = function(event){\n this._callbacks = this._callbacks || {};\n\n var args = new Array(arguments.length - 1)\n , callbacks = this._callbacks['$' + event];\n\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n\n if (callbacks) {\n callbacks = callbacks.slice(0);\n for (var i = 0, len = callbacks.length; i < len; ++i) {\n callbacks[i].apply(this, args);\n }\n }\n\n return this;\n};\n\n// alias used for reserved events (protected method)\nEmitter.prototype.emitReserved = Emitter.prototype.emit;\n\n/**\n * Return array of callbacks for `event`.\n *\n * @param {String} event\n * @return {Array}\n * @api public\n */\n\nEmitter.prototype.listeners = function(event){\n this._callbacks = this._callbacks || {};\n return this._callbacks['$' + event] || [];\n};\n\n/**\n * Check if this emitter has `event` handlers.\n *\n * @param {String} event\n * @return {Boolean}\n * @api public\n */\n\nEmitter.prototype.hasListeners = function(event){\n return !! this.listeners(event).length;\n};\n","export const globalThisShim = (() => {\n if (typeof self !== \"undefined\") {\n return self;\n }\n else if (typeof window !== \"undefined\") {\n return window;\n }\n else {\n return Function(\"return this\")();\n }\n})();\n","import { globalThisShim as globalThis } from \"./globalThis.js\";\nexport function pick(obj, ...attr) {\n return attr.reduce((acc, k) => {\n if (obj.hasOwnProperty(k)) {\n acc[k] = obj[k];\n }\n return acc;\n }, {});\n}\n// Keep a reference to the real timeout functions so they can be used when overridden\nconst NATIVE_SET_TIMEOUT = setTimeout;\nconst NATIVE_CLEAR_TIMEOUT = clearTimeout;\nexport function installTimerFunctions(obj, opts) {\n if (opts.useNativeTimers) {\n obj.setTimeoutFn = NATIVE_SET_TIMEOUT.bind(globalThis);\n obj.clearTimeoutFn = NATIVE_CLEAR_TIMEOUT.bind(globalThis);\n }\n else {\n obj.setTimeoutFn = setTimeout.bind(globalThis);\n obj.clearTimeoutFn = clearTimeout.bind(globalThis);\n }\n}\n// base64 encoded buffers are about 33% bigger (https://en.wikipedia.org/wiki/Base64)\nconst BASE64_OVERHEAD = 1.33;\n// we could also have used `new Blob([obj]).size`, but it isn't supported in IE9\nexport function byteLength(obj) {\n if (typeof obj === \"string\") {\n return utf8Length(obj);\n }\n // arraybuffer or blob\n return Math.ceil((obj.byteLength || obj.size) * BASE64_OVERHEAD);\n}\nfunction utf8Length(str) {\n let c = 0, length = 0;\n for (let i = 0, l = str.length; i < l; i++) {\n c = str.charCodeAt(i);\n if (c < 0x80) {\n length += 1;\n }\n else if (c < 0x800) {\n length += 2;\n }\n else if (c < 0xd800 || c >= 0xe000) {\n length += 3;\n }\n else {\n i++;\n length += 4;\n }\n }\n return length;\n}\n","import { decodePacket } from \"engine.io-parser\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions } from \"./util.js\";\nclass TransportError extends Error {\n constructor(reason, description, context) {\n super(reason);\n this.description = description;\n this.context = context;\n this.type = \"TransportError\";\n }\n}\nexport class Transport extends Emitter {\n /**\n * Transport abstract constructor.\n *\n * @param {Object} options.\n * @api private\n */\n constructor(opts) {\n super();\n this.writable = false;\n installTimerFunctions(this, opts);\n this.opts = opts;\n this.query = opts.query;\n this.readyState = \"\";\n this.socket = opts.socket;\n }\n /**\n * Emits an error.\n *\n * @param {String} reason\n * @param description\n * @param context - the error context\n * @return {Transport} for chaining\n * @api protected\n */\n onError(reason, description, context) {\n super.emitReserved(\"error\", new TransportError(reason, description, context));\n return this;\n }\n /**\n * Opens the transport.\n *\n * @api public\n */\n open() {\n if (\"closed\" === this.readyState || \"\" === this.readyState) {\n this.readyState = \"opening\";\n this.doOpen();\n }\n return this;\n }\n /**\n * Closes the transport.\n *\n * @api public\n */\n close() {\n if (\"opening\" === this.readyState || \"open\" === this.readyState) {\n this.doClose();\n this.onClose();\n }\n return this;\n }\n /**\n * Sends multiple packets.\n *\n * @param {Array} packets\n * @api public\n */\n send(packets) {\n if (\"open\" === this.readyState) {\n this.write(packets);\n }\n else {\n // this might happen if the transport was silently closed in the beforeunload event handler\n }\n }\n /**\n * Called upon open\n *\n * @api protected\n */\n onOpen() {\n this.readyState = \"open\";\n this.writable = true;\n super.emitReserved(\"open\");\n }\n /**\n * Called with data.\n *\n * @param {String} data\n * @api protected\n */\n onData(data) {\n const packet = decodePacket(data, this.socket.binaryType);\n this.onPacket(packet);\n }\n /**\n * Called with a decoded packet.\n *\n * @api protected\n */\n onPacket(packet) {\n super.emitReserved(\"packet\", packet);\n }\n /**\n * Called upon close.\n *\n * @api protected\n */\n onClose(details) {\n this.readyState = \"closed\";\n super.emitReserved(\"close\", details);\n }\n}\n","// imported from https://github.com/unshiftio/yeast\n'use strict';\nconst alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split(''), length = 64, map = {};\nlet seed = 0, i = 0, prev;\n/**\n * Return a string representing the specified number.\n *\n * @param {Number} num The number to convert.\n * @returns {String} The string representation of the number.\n * @api public\n */\nexport function encode(num) {\n let encoded = '';\n do {\n encoded = alphabet[num % length] + encoded;\n num = Math.floor(num / length);\n } while (num > 0);\n return encoded;\n}\n/**\n * Return the integer value specified by the given string.\n *\n * @param {String} str The string to convert.\n * @returns {Number} The integer value represented by the string.\n * @api public\n */\nexport function decode(str) {\n let decoded = 0;\n for (i = 0; i < str.length; i++) {\n decoded = decoded * length + map[str.charAt(i)];\n }\n return decoded;\n}\n/**\n * Yeast: A tiny growing id generator.\n *\n * @returns {String} A unique id.\n * @api public\n */\nexport function yeast() {\n const now = encode(+new Date());\n if (now !== prev)\n return seed = 0, prev = now;\n return now + '.' + encode(seed++);\n}\n//\n// Map each character to its index.\n//\nfor (; i < length; i++)\n map[alphabet[i]] = i;\n","// imported from https://github.com/galkn/querystring\n/**\n * Compiles a querystring\n * Returns string representation of the object\n *\n * @param {Object}\n * @api private\n */\nexport function encode(obj) {\n let str = '';\n for (let i in obj) {\n if (obj.hasOwnProperty(i)) {\n if (str.length)\n str += '&';\n str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\n }\n }\n return str;\n}\n/**\n * Parses a simple querystring into an object\n *\n * @param {String} qs\n * @api private\n */\nexport function decode(qs) {\n let qry = {};\n let pairs = qs.split('&');\n for (let i = 0, l = pairs.length; i < l; i++) {\n let pair = pairs[i].split('=');\n qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n }\n return qry;\n}\n","// imported from https://github.com/component/has-cors\nlet value = false;\ntry {\n value = typeof XMLHttpRequest !== 'undefined' &&\n 'withCredentials' in new XMLHttpRequest();\n}\ncatch (err) {\n // if XMLHttp support is disabled in IE then it will throw\n // when trying to create\n}\nexport const hasCORS = value;\n","// browser shim for xmlhttprequest module\nimport { hasCORS } from \"../contrib/has-cors.js\";\nimport { globalThisShim as globalThis } from \"../globalThis.js\";\nexport function XHR(opts) {\n const xdomain = opts.xdomain;\n // XMLHttpRequest can be disabled on IE\n try {\n if (\"undefined\" !== typeof XMLHttpRequest && (!xdomain || hasCORS)) {\n return new XMLHttpRequest();\n }\n }\n catch (e) { }\n if (!xdomain) {\n try {\n return new globalThis[[\"Active\"].concat(\"Object\").join(\"X\")](\"Microsoft.XMLHTTP\");\n }\n catch (e) { }\n }\n}\n","import { Transport } from \"../transport.js\";\nimport { yeast } from \"../contrib/yeast.js\";\nimport { encode } from \"../contrib/parseqs.js\";\nimport { encodePayload, decodePayload } from \"engine.io-parser\";\nimport { XHR as XMLHttpRequest } from \"./xmlhttprequest.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions, pick } from \"../util.js\";\nimport { globalThisShim as globalThis } from \"../globalThis.js\";\nfunction empty() { }\nconst hasXHR2 = (function () {\n const xhr = new XMLHttpRequest({\n xdomain: false\n });\n return null != xhr.responseType;\n})();\nexport class Polling extends Transport {\n /**\n * XHR Polling constructor.\n *\n * @param {Object} opts\n * @api public\n */\n constructor(opts) {\n super(opts);\n this.polling = false;\n if (typeof location !== \"undefined\") {\n const isSSL = \"https:\" === location.protocol;\n let port = location.port;\n // some user agents have empty `location.port`\n if (!port) {\n port = isSSL ? \"443\" : \"80\";\n }\n this.xd =\n (typeof location !== \"undefined\" &&\n opts.hostname !== location.hostname) ||\n port !== opts.port;\n this.xs = opts.secure !== isSSL;\n }\n /**\n * XHR supports binary\n */\n const forceBase64 = opts && opts.forceBase64;\n this.supportsBinary = hasXHR2 && !forceBase64;\n }\n /**\n * Transport name.\n */\n get name() {\n return \"polling\";\n }\n /**\n * Opens the socket (triggers polling). We write a PING message to determine\n * when the transport is open.\n *\n * @api private\n */\n doOpen() {\n this.poll();\n }\n /**\n * Pauses polling.\n *\n * @param {Function} callback upon buffers are flushed and transport is paused\n * @api private\n */\n pause(onPause) {\n this.readyState = \"pausing\";\n const pause = () => {\n this.readyState = \"paused\";\n onPause();\n };\n if (this.polling || !this.writable) {\n let total = 0;\n if (this.polling) {\n total++;\n this.once(\"pollComplete\", function () {\n --total || pause();\n });\n }\n if (!this.writable) {\n total++;\n this.once(\"drain\", function () {\n --total || pause();\n });\n }\n }\n else {\n pause();\n }\n }\n /**\n * Starts polling cycle.\n *\n * @api public\n */\n poll() {\n this.polling = true;\n this.doPoll();\n this.emitReserved(\"poll\");\n }\n /**\n * Overloads onData to detect payloads.\n *\n * @api private\n */\n onData(data) {\n const callback = packet => {\n // if its the first message we consider the transport open\n if (\"opening\" === this.readyState && packet.type === \"open\") {\n this.onOpen();\n }\n // if its a close packet, we close the ongoing requests\n if (\"close\" === packet.type) {\n this.onClose({ description: \"transport closed by the server\" });\n return false;\n }\n // otherwise bypass onData and handle the message\n this.onPacket(packet);\n };\n // decode payload\n decodePayload(data, this.socket.binaryType).forEach(callback);\n // if an event did not trigger closing\n if (\"closed\" !== this.readyState) {\n // if we got data we're not polling\n this.polling = false;\n this.emitReserved(\"pollComplete\");\n if (\"open\" === this.readyState) {\n this.poll();\n }\n else {\n }\n }\n }\n /**\n * For polling, send a close packet.\n *\n * @api private\n */\n doClose() {\n const close = () => {\n this.write([{ type: \"close\" }]);\n };\n if (\"open\" === this.readyState) {\n close();\n }\n else {\n // in case we're trying to close while\n // handshaking is in progress (GH-164)\n this.once(\"open\", close);\n }\n }\n /**\n * Writes a packets payload.\n *\n * @param {Array} data packets\n * @param {Function} drain callback\n * @api private\n */\n write(packets) {\n this.writable = false;\n encodePayload(packets, data => {\n this.doWrite(data, () => {\n this.writable = true;\n this.emitReserved(\"drain\");\n });\n });\n }\n /**\n * Generates uri for connection.\n *\n * @api private\n */\n uri() {\n let query = this.query || {};\n const schema = this.opts.secure ? \"https\" : \"http\";\n let port = \"\";\n // cache busting is forced\n if (false !== this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n if (!this.supportsBinary && !query.sid) {\n query.b64 = 1;\n }\n // avoid port if default for schema\n if (this.opts.port &&\n ((\"https\" === schema && Number(this.opts.port) !== 443) ||\n (\"http\" === schema && Number(this.opts.port) !== 80))) {\n port = \":\" + this.opts.port;\n }\n const encodedQuery = encode(query);\n const ipv6 = this.opts.hostname.indexOf(\":\") !== -1;\n return (schema +\n \"://\" +\n (ipv6 ? \"[\" + this.opts.hostname + \"]\" : this.opts.hostname) +\n port +\n this.opts.path +\n (encodedQuery.length ? \"?\" + encodedQuery : \"\"));\n }\n /**\n * Creates a request.\n *\n * @param {String} method\n * @api private\n */\n request(opts = {}) {\n Object.assign(opts, { xd: this.xd, xs: this.xs }, this.opts);\n return new Request(this.uri(), opts);\n }\n /**\n * Sends data.\n *\n * @param {String} data to send.\n * @param {Function} called upon flush.\n * @api private\n */\n doWrite(data, fn) {\n const req = this.request({\n method: \"POST\",\n data: data\n });\n req.on(\"success\", fn);\n req.on(\"error\", (xhrStatus, context) => {\n this.onError(\"xhr post error\", xhrStatus, context);\n });\n }\n /**\n * Starts a poll cycle.\n *\n * @api private\n */\n doPoll() {\n const req = this.request();\n req.on(\"data\", this.onData.bind(this));\n req.on(\"error\", (xhrStatus, context) => {\n this.onError(\"xhr poll error\", xhrStatus, context);\n });\n this.pollXhr = req;\n }\n}\nexport class Request extends Emitter {\n /**\n * Request constructor\n *\n * @param {Object} options\n * @api public\n */\n constructor(uri, opts) {\n super();\n installTimerFunctions(this, opts);\n this.opts = opts;\n this.method = opts.method || \"GET\";\n this.uri = uri;\n this.async = false !== opts.async;\n this.data = undefined !== opts.data ? opts.data : null;\n this.create();\n }\n /**\n * Creates the XHR object and sends the request.\n *\n * @api private\n */\n create() {\n const opts = pick(this.opts, \"agent\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"autoUnref\");\n opts.xdomain = !!this.opts.xd;\n opts.xscheme = !!this.opts.xs;\n const xhr = (this.xhr = new XMLHttpRequest(opts));\n try {\n xhr.open(this.method, this.uri, this.async);\n try {\n if (this.opts.extraHeaders) {\n xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);\n for (let i in this.opts.extraHeaders) {\n if (this.opts.extraHeaders.hasOwnProperty(i)) {\n xhr.setRequestHeader(i, this.opts.extraHeaders[i]);\n }\n }\n }\n }\n catch (e) { }\n if (\"POST\" === this.method) {\n try {\n xhr.setRequestHeader(\"Content-type\", \"text/plain;charset=UTF-8\");\n }\n catch (e) { }\n }\n try {\n xhr.setRequestHeader(\"Accept\", \"*/*\");\n }\n catch (e) { }\n // ie6 check\n if (\"withCredentials\" in xhr) {\n xhr.withCredentials = this.opts.withCredentials;\n }\n if (this.opts.requestTimeout) {\n xhr.timeout = this.opts.requestTimeout;\n }\n xhr.onreadystatechange = () => {\n if (4 !== xhr.readyState)\n return;\n if (200 === xhr.status || 1223 === xhr.status) {\n this.onLoad();\n }\n else {\n // make sure the `error` event handler that's user-set\n // does not throw in the same tick and gets caught here\n this.setTimeoutFn(() => {\n this.onError(typeof xhr.status === \"number\" ? xhr.status : 0);\n }, 0);\n }\n };\n xhr.send(this.data);\n }\n catch (e) {\n // Need to defer since .create() is called directly from the constructor\n // and thus the 'error' event can only be only bound *after* this exception\n // occurs. Therefore, also, we cannot throw here at all.\n this.setTimeoutFn(() => {\n this.onError(e);\n }, 0);\n return;\n }\n if (typeof document !== \"undefined\") {\n this.index = Request.requestsCount++;\n Request.requests[this.index] = this;\n }\n }\n /**\n * Called upon error.\n *\n * @api private\n */\n onError(err) {\n this.emitReserved(\"error\", err, this.xhr);\n this.cleanup(true);\n }\n /**\n * Cleans up house.\n *\n * @api private\n */\n cleanup(fromError) {\n if (\"undefined\" === typeof this.xhr || null === this.xhr) {\n return;\n }\n this.xhr.onreadystatechange = empty;\n if (fromError) {\n try {\n this.xhr.abort();\n }\n catch (e) { }\n }\n if (typeof document !== \"undefined\") {\n delete Request.requests[this.index];\n }\n this.xhr = null;\n }\n /**\n * Called upon load.\n *\n * @api private\n */\n onLoad() {\n const data = this.xhr.responseText;\n if (data !== null) {\n this.emitReserved(\"data\", data);\n this.emitReserved(\"success\");\n this.cleanup();\n }\n }\n /**\n * Aborts the request.\n *\n * @api public\n */\n abort() {\n this.cleanup();\n }\n}\nRequest.requestsCount = 0;\nRequest.requests = {};\n/**\n * Aborts pending requests when unloading the window. This is needed to prevent\n * memory leaks (e.g. when using IE) and to ensure that no spurious error is\n * emitted.\n */\nif (typeof document !== \"undefined\") {\n // @ts-ignore\n if (typeof attachEvent === \"function\") {\n // @ts-ignore\n attachEvent(\"onunload\", unloadHandler);\n }\n else if (typeof addEventListener === \"function\") {\n const terminationEvent = \"onpagehide\" in globalThis ? \"pagehide\" : \"unload\";\n addEventListener(terminationEvent, unloadHandler, false);\n }\n}\nfunction unloadHandler() {\n for (let i in Request.requests) {\n if (Request.requests.hasOwnProperty(i)) {\n Request.requests[i].abort();\n }\n }\n}\n","import { globalThisShim as globalThis } from \"../globalThis.js\";\nexport const nextTick = (() => {\n const isPromiseAvailable = typeof Promise === \"function\" && typeof Promise.resolve === \"function\";\n if (isPromiseAvailable) {\n return cb => Promise.resolve().then(cb);\n }\n else {\n return (cb, setTimeoutFn) => setTimeoutFn(cb, 0);\n }\n})();\nexport const WebSocket = globalThis.WebSocket || globalThis.MozWebSocket;\nexport const usingBrowserWebSocket = true;\nexport const defaultBinaryType = \"arraybuffer\";\n","import { Transport } from \"../transport.js\";\nimport { encode } from \"../contrib/parseqs.js\";\nimport { yeast } from \"../contrib/yeast.js\";\nimport { pick } from \"../util.js\";\nimport { defaultBinaryType, nextTick, usingBrowserWebSocket, WebSocket } from \"./websocket-constructor.js\";\nimport { encodePacket } from \"engine.io-parser\";\n// detect ReactNative environment\nconst isReactNative = typeof navigator !== \"undefined\" &&\n typeof navigator.product === \"string\" &&\n navigator.product.toLowerCase() === \"reactnative\";\nexport class WS extends Transport {\n /**\n * WebSocket transport constructor.\n *\n * @api {Object} connection options\n * @api public\n */\n constructor(opts) {\n super(opts);\n this.supportsBinary = !opts.forceBase64;\n }\n /**\n * Transport name.\n *\n * @api public\n */\n get name() {\n return \"websocket\";\n }\n /**\n * Opens socket.\n *\n * @api private\n */\n doOpen() {\n if (!this.check()) {\n // let probe timeout\n return;\n }\n const uri = this.uri();\n const protocols = this.opts.protocols;\n // React Native only supports the 'headers' option, and will print a warning if anything else is passed\n const opts = isReactNative\n ? {}\n : pick(this.opts, \"agent\", \"perMessageDeflate\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"localAddress\", \"protocolVersion\", \"origin\", \"maxPayload\", \"family\", \"checkServerIdentity\");\n if (this.opts.extraHeaders) {\n opts.headers = this.opts.extraHeaders;\n }\n try {\n this.ws =\n usingBrowserWebSocket && !isReactNative\n ? protocols\n ? new WebSocket(uri, protocols)\n : new WebSocket(uri)\n : new WebSocket(uri, protocols, opts);\n }\n catch (err) {\n return this.emitReserved(\"error\", err);\n }\n this.ws.binaryType = this.socket.binaryType || defaultBinaryType;\n this.addEventListeners();\n }\n /**\n * Adds event listeners to the socket\n *\n * @api private\n */\n addEventListeners() {\n this.ws.onopen = () => {\n if (this.opts.autoUnref) {\n this.ws._socket.unref();\n }\n this.onOpen();\n };\n this.ws.onclose = closeEvent => this.onClose({\n description: \"websocket connection closed\",\n context: closeEvent\n });\n this.ws.onmessage = ev => this.onData(ev.data);\n this.ws.onerror = e => this.onError(\"websocket error\", e);\n }\n /**\n * Writes data to socket.\n *\n * @param {Array} array of packets.\n * @api private\n */\n write(packets) {\n this.writable = false;\n // encodePacket efficient as it uses WS framing\n // no need for encodePayload\n for (let i = 0; i < packets.length; i++) {\n const packet = packets[i];\n const lastPacket = i === packets.length - 1;\n encodePacket(packet, this.supportsBinary, data => {\n // always create a new object (GH-437)\n const opts = {};\n if (!usingBrowserWebSocket) {\n if (packet.options) {\n opts.compress = packet.options.compress;\n }\n if (this.opts.perMessageDeflate) {\n const len = \n // @ts-ignore\n \"string\" === typeof data ? Buffer.byteLength(data) : data.length;\n if (len < this.opts.perMessageDeflate.threshold) {\n opts.compress = false;\n }\n }\n }\n // Sometimes the websocket has already been closed but the browser didn't\n // have a chance of informing us about it yet, in that case send will\n // throw an error\n try {\n if (usingBrowserWebSocket) {\n // TypeError is thrown when passing the second argument on Safari\n this.ws.send(data);\n }\n else {\n this.ws.send(data, opts);\n }\n }\n catch (e) {\n }\n if (lastPacket) {\n // fake drain\n // defer to next tick to allow Socket to clear writeBuffer\n nextTick(() => {\n this.writable = true;\n this.emitReserved(\"drain\");\n }, this.setTimeoutFn);\n }\n });\n }\n }\n /**\n * Closes socket.\n *\n * @api private\n */\n doClose() {\n if (typeof this.ws !== \"undefined\") {\n this.ws.close();\n this.ws = null;\n }\n }\n /**\n * Generates uri for connection.\n *\n * @api private\n */\n uri() {\n let query = this.query || {};\n const schema = this.opts.secure ? \"wss\" : \"ws\";\n let port = \"\";\n // avoid port if default for schema\n if (this.opts.port &&\n ((\"wss\" === schema && Number(this.opts.port) !== 443) ||\n (\"ws\" === schema && Number(this.opts.port) !== 80))) {\n port = \":\" + this.opts.port;\n }\n // append timestamp to URI\n if (this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n // communicate binary support capabilities\n if (!this.supportsBinary) {\n query.b64 = 1;\n }\n const encodedQuery = encode(query);\n const ipv6 = this.opts.hostname.indexOf(\":\") !== -1;\n return (schema +\n \"://\" +\n (ipv6 ? \"[\" + this.opts.hostname + \"]\" : this.opts.hostname) +\n port +\n this.opts.path +\n (encodedQuery.length ? \"?\" + encodedQuery : \"\"));\n }\n /**\n * Feature detection for WebSocket.\n *\n * @return {Boolean} whether this transport is available.\n * @api public\n */\n check() {\n return !!WebSocket;\n }\n}\n","import { Polling } from \"./polling.js\";\nimport { WS } from \"./websocket.js\";\nexport const transports = {\n websocket: WS,\n polling: Polling\n};\n","// imported from https://github.com/galkn/parseuri\n/**\n * Parses an URI\n *\n * @author Steven Levithan (MIT license)\n * @api private\n */\nconst re = /^(?:(?![^:@]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\nconst parts = [\n 'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\n];\nexport function parse(str) {\n const src = str, b = str.indexOf('['), e = str.indexOf(']');\n if (b != -1 && e != -1) {\n str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\n }\n let m = re.exec(str || ''), uri = {}, i = 14;\n while (i--) {\n uri[parts[i]] = m[i] || '';\n }\n if (b != -1 && e != -1) {\n uri.source = src;\n uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\n uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\n uri.ipv6uri = true;\n }\n uri.pathNames = pathNames(uri, uri['path']);\n uri.queryKey = queryKey(uri, uri['query']);\n return uri;\n}\nfunction pathNames(obj, path) {\n const regx = /\\/{2,9}/g, names = path.replace(regx, \"/\").split(\"/\");\n if (path.slice(0, 1) == '/' || path.length === 0) {\n names.splice(0, 1);\n }\n if (path.slice(-1) == '/') {\n names.splice(names.length - 1, 1);\n }\n return names;\n}\nfunction queryKey(uri, query) {\n const data = {};\n query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) {\n if ($1) {\n data[$1] = $2;\n }\n });\n return data;\n}\n","import { transports } from \"./transports/index.js\";\nimport { installTimerFunctions, byteLength } from \"./util.js\";\nimport { decode } from \"./contrib/parseqs.js\";\nimport { parse } from \"./contrib/parseuri.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { protocol } from \"engine.io-parser\";\nexport class Socket extends Emitter {\n /**\n * Socket constructor.\n *\n * @param {String|Object} uri or options\n * @param {Object} opts - options\n * @api public\n */\n constructor(uri, opts = {}) {\n super();\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = null;\n }\n if (uri) {\n uri = parse(uri);\n opts.hostname = uri.host;\n opts.secure = uri.protocol === \"https\" || uri.protocol === \"wss\";\n opts.port = uri.port;\n if (uri.query)\n opts.query = uri.query;\n }\n else if (opts.host) {\n opts.hostname = parse(opts.host).host;\n }\n installTimerFunctions(this, opts);\n this.secure =\n null != opts.secure\n ? opts.secure\n : typeof location !== \"undefined\" && \"https:\" === location.protocol;\n if (opts.hostname && !opts.port) {\n // if no port is specified manually, use the protocol default\n opts.port = this.secure ? \"443\" : \"80\";\n }\n this.hostname =\n opts.hostname ||\n (typeof location !== \"undefined\" ? location.hostname : \"localhost\");\n this.port =\n opts.port ||\n (typeof location !== \"undefined\" && location.port\n ? location.port\n : this.secure\n ? \"443\"\n : \"80\");\n this.transports = opts.transports || [\"polling\", \"websocket\"];\n this.readyState = \"\";\n this.writeBuffer = [];\n this.prevBufferLen = 0;\n this.opts = Object.assign({\n path: \"/engine.io\",\n agent: false,\n withCredentials: false,\n upgrade: true,\n timestampParam: \"t\",\n rememberUpgrade: false,\n rejectUnauthorized: true,\n perMessageDeflate: {\n threshold: 1024\n },\n transportOptions: {},\n closeOnBeforeunload: true\n }, opts);\n this.opts.path = this.opts.path.replace(/\\/$/, \"\") + \"/\";\n if (typeof this.opts.query === \"string\") {\n this.opts.query = decode(this.opts.query);\n }\n // set on handshake\n this.id = null;\n this.upgrades = null;\n this.pingInterval = null;\n this.pingTimeout = null;\n // set on heartbeat\n this.pingTimeoutTimer = null;\n if (typeof addEventListener === \"function\") {\n if (this.opts.closeOnBeforeunload) {\n // Firefox closes the connection when the \"beforeunload\" event is emitted but not Chrome. This event listener\n // ensures every browser behaves the same (no \"disconnect\" event at the Socket.IO level when the page is\n // closed/reloaded)\n this.beforeunloadEventListener = () => {\n if (this.transport) {\n // silently close the transport\n this.transport.removeAllListeners();\n this.transport.close();\n }\n };\n addEventListener(\"beforeunload\", this.beforeunloadEventListener, false);\n }\n if (this.hostname !== \"localhost\") {\n this.offlineEventListener = () => {\n this.onClose(\"transport close\", {\n description: \"network connection lost\"\n });\n };\n addEventListener(\"offline\", this.offlineEventListener, false);\n }\n }\n this.open();\n }\n /**\n * Creates transport of the given type.\n *\n * @param {String} transport name\n * @return {Transport}\n * @api private\n */\n createTransport(name) {\n const query = Object.assign({}, this.opts.query);\n // append engine.io protocol identifier\n query.EIO = protocol;\n // transport name\n query.transport = name;\n // session id if we already have one\n if (this.id)\n query.sid = this.id;\n const opts = Object.assign({}, this.opts.transportOptions[name], this.opts, {\n query,\n socket: this,\n hostname: this.hostname,\n secure: this.secure,\n port: this.port\n });\n return new transports[name](opts);\n }\n /**\n * Initializes transport to use and starts probe.\n *\n * @api private\n */\n open() {\n let transport;\n if (this.opts.rememberUpgrade &&\n Socket.priorWebsocketSuccess &&\n this.transports.indexOf(\"websocket\") !== -1) {\n transport = \"websocket\";\n }\n else if (0 === this.transports.length) {\n // Emit error on next tick so it can be listened to\n this.setTimeoutFn(() => {\n this.emitReserved(\"error\", \"No transports available\");\n }, 0);\n return;\n }\n else {\n transport = this.transports[0];\n }\n this.readyState = \"opening\";\n // Retry with the next transport if the transport is disabled (jsonp: false)\n try {\n transport = this.createTransport(transport);\n }\n catch (e) {\n this.transports.shift();\n this.open();\n return;\n }\n transport.open();\n this.setTransport(transport);\n }\n /**\n * Sets the current transport. Disables the existing one (if any).\n *\n * @api private\n */\n setTransport(transport) {\n if (this.transport) {\n this.transport.removeAllListeners();\n }\n // set up transport\n this.transport = transport;\n // set up transport listeners\n transport\n .on(\"drain\", this.onDrain.bind(this))\n .on(\"packet\", this.onPacket.bind(this))\n .on(\"error\", this.onError.bind(this))\n .on(\"close\", reason => this.onClose(\"transport close\", reason));\n }\n /**\n * Probes a transport.\n *\n * @param {String} transport name\n * @api private\n */\n probe(name) {\n let transport = this.createTransport(name);\n let failed = false;\n Socket.priorWebsocketSuccess = false;\n const onTransportOpen = () => {\n if (failed)\n return;\n transport.send([{ type: \"ping\", data: \"probe\" }]);\n transport.once(\"packet\", msg => {\n if (failed)\n return;\n if (\"pong\" === msg.type && \"probe\" === msg.data) {\n this.upgrading = true;\n this.emitReserved(\"upgrading\", transport);\n if (!transport)\n return;\n Socket.priorWebsocketSuccess = \"websocket\" === transport.name;\n this.transport.pause(() => {\n if (failed)\n return;\n if (\"closed\" === this.readyState)\n return;\n cleanup();\n this.setTransport(transport);\n transport.send([{ type: \"upgrade\" }]);\n this.emitReserved(\"upgrade\", transport);\n transport = null;\n this.upgrading = false;\n this.flush();\n });\n }\n else {\n const err = new Error(\"probe error\");\n // @ts-ignore\n err.transport = transport.name;\n this.emitReserved(\"upgradeError\", err);\n }\n });\n };\n function freezeTransport() {\n if (failed)\n return;\n // Any callback called by transport should be ignored since now\n failed = true;\n cleanup();\n transport.close();\n transport = null;\n }\n // Handle any error that happens while probing\n const onerror = err => {\n const error = new Error(\"probe error: \" + err);\n // @ts-ignore\n error.transport = transport.name;\n freezeTransport();\n this.emitReserved(\"upgradeError\", error);\n };\n function onTransportClose() {\n onerror(\"transport closed\");\n }\n // When the socket is closed while we're probing\n function onclose() {\n onerror(\"socket closed\");\n }\n // When the socket is upgraded while we're probing\n function onupgrade(to) {\n if (transport && to.name !== transport.name) {\n freezeTransport();\n }\n }\n // Remove all listeners on the transport and on self\n const cleanup = () => {\n transport.removeListener(\"open\", onTransportOpen);\n transport.removeListener(\"error\", onerror);\n transport.removeListener(\"close\", onTransportClose);\n this.off(\"close\", onclose);\n this.off(\"upgrading\", onupgrade);\n };\n transport.once(\"open\", onTransportOpen);\n transport.once(\"error\", onerror);\n transport.once(\"close\", onTransportClose);\n this.once(\"close\", onclose);\n this.once(\"upgrading\", onupgrade);\n transport.open();\n }\n /**\n * Called when connection is deemed open.\n *\n * @api private\n */\n onOpen() {\n this.readyState = \"open\";\n Socket.priorWebsocketSuccess = \"websocket\" === this.transport.name;\n this.emitReserved(\"open\");\n this.flush();\n // we check for `readyState` in case an `open`\n // listener already closed the socket\n if (\"open\" === this.readyState &&\n this.opts.upgrade &&\n this.transport.pause) {\n let i = 0;\n const l = this.upgrades.length;\n for (; i < l; i++) {\n this.probe(this.upgrades[i]);\n }\n }\n }\n /**\n * Handles a packet.\n *\n * @api private\n */\n onPacket(packet) {\n if (\"opening\" === this.readyState ||\n \"open\" === this.readyState ||\n \"closing\" === this.readyState) {\n this.emitReserved(\"packet\", packet);\n // Socket is live - any packet counts\n this.emitReserved(\"heartbeat\");\n switch (packet.type) {\n case \"open\":\n this.onHandshake(JSON.parse(packet.data));\n break;\n case \"ping\":\n this.resetPingTimeout();\n this.sendPacket(\"pong\");\n this.emitReserved(\"ping\");\n this.emitReserved(\"pong\");\n break;\n case \"error\":\n const err = new Error(\"server error\");\n // @ts-ignore\n err.code = packet.data;\n this.onError(err);\n break;\n case \"message\":\n this.emitReserved(\"data\", packet.data);\n this.emitReserved(\"message\", packet.data);\n break;\n }\n }\n else {\n }\n }\n /**\n * Called upon handshake completion.\n *\n * @param {Object} data - handshake obj\n * @api private\n */\n onHandshake(data) {\n this.emitReserved(\"handshake\", data);\n this.id = data.sid;\n this.transport.query.sid = data.sid;\n this.upgrades = this.filterUpgrades(data.upgrades);\n this.pingInterval = data.pingInterval;\n this.pingTimeout = data.pingTimeout;\n this.maxPayload = data.maxPayload;\n this.onOpen();\n // In case open handler closes socket\n if (\"closed\" === this.readyState)\n return;\n this.resetPingTimeout();\n }\n /**\n * Sets and resets ping timeout timer based on server pings.\n *\n * @api private\n */\n resetPingTimeout() {\n this.clearTimeoutFn(this.pingTimeoutTimer);\n this.pingTimeoutTimer = this.setTimeoutFn(() => {\n this.onClose(\"ping timeout\");\n }, this.pingInterval + this.pingTimeout);\n if (this.opts.autoUnref) {\n this.pingTimeoutTimer.unref();\n }\n }\n /**\n * Called on `drain` event\n *\n * @api private\n */\n onDrain() {\n this.writeBuffer.splice(0, this.prevBufferLen);\n // setting prevBufferLen = 0 is very important\n // for example, when upgrading, upgrade packet is sent over,\n // and a nonzero prevBufferLen could cause problems on `drain`\n this.prevBufferLen = 0;\n if (0 === this.writeBuffer.length) {\n this.emitReserved(\"drain\");\n }\n else {\n this.flush();\n }\n }\n /**\n * Flush write buffers.\n *\n * @api private\n */\n flush() {\n if (\"closed\" !== this.readyState &&\n this.transport.writable &&\n !this.upgrading &&\n this.writeBuffer.length) {\n const packets = this.getWritablePackets();\n this.transport.send(packets);\n // keep track of current length of writeBuffer\n // splice writeBuffer and callbackBuffer on `drain`\n this.prevBufferLen = packets.length;\n this.emitReserved(\"flush\");\n }\n }\n /**\n * Ensure the encoded size of the writeBuffer is below the maxPayload value sent by the server (only for HTTP\n * long-polling)\n *\n * @private\n */\n getWritablePackets() {\n const shouldCheckPayloadSize = this.maxPayload &&\n this.transport.name === \"polling\" &&\n this.writeBuffer.length > 1;\n if (!shouldCheckPayloadSize) {\n return this.writeBuffer;\n }\n let payloadSize = 1; // first packet type\n for (let i = 0; i < this.writeBuffer.length; i++) {\n const data = this.writeBuffer[i].data;\n if (data) {\n payloadSize += byteLength(data);\n }\n if (i > 0 && payloadSize > this.maxPayload) {\n return this.writeBuffer.slice(0, i);\n }\n payloadSize += 2; // separator + packet type\n }\n return this.writeBuffer;\n }\n /**\n * Sends a message.\n *\n * @param {String} message.\n * @param {Function} callback function.\n * @param {Object} options.\n * @return {Socket} for chaining.\n * @api public\n */\n write(msg, options, fn) {\n this.sendPacket(\"message\", msg, options, fn);\n return this;\n }\n send(msg, options, fn) {\n this.sendPacket(\"message\", msg, options, fn);\n return this;\n }\n /**\n * Sends a packet.\n *\n * @param {String} packet type.\n * @param {String} data.\n * @param {Object} options.\n * @param {Function} callback function.\n * @api private\n */\n sendPacket(type, data, options, fn) {\n if (\"function\" === typeof data) {\n fn = data;\n data = undefined;\n }\n if (\"function\" === typeof options) {\n fn = options;\n options = null;\n }\n if (\"closing\" === this.readyState || \"closed\" === this.readyState) {\n return;\n }\n options = options || {};\n options.compress = false !== options.compress;\n const packet = {\n type: type,\n data: data,\n options: options\n };\n this.emitReserved(\"packetCreate\", packet);\n this.writeBuffer.push(packet);\n if (fn)\n this.once(\"flush\", fn);\n this.flush();\n }\n /**\n * Closes the connection.\n *\n * @api public\n */\n close() {\n const close = () => {\n this.onClose(\"forced close\");\n this.transport.close();\n };\n const cleanupAndClose = () => {\n this.off(\"upgrade\", cleanupAndClose);\n this.off(\"upgradeError\", cleanupAndClose);\n close();\n };\n const waitForUpgrade = () => {\n // wait for upgrade to finish since we can't send packets while pausing a transport\n this.once(\"upgrade\", cleanupAndClose);\n this.once(\"upgradeError\", cleanupAndClose);\n };\n if (\"opening\" === this.readyState || \"open\" === this.readyState) {\n this.readyState = \"closing\";\n if (this.writeBuffer.length) {\n this.once(\"drain\", () => {\n if (this.upgrading) {\n waitForUpgrade();\n }\n else {\n close();\n }\n });\n }\n else if (this.upgrading) {\n waitForUpgrade();\n }\n else {\n close();\n }\n }\n return this;\n }\n /**\n * Called upon transport error\n *\n * @api private\n */\n onError(err) {\n Socket.priorWebsocketSuccess = false;\n this.emitReserved(\"error\", err);\n this.onClose(\"transport error\", err);\n }\n /**\n * Called upon transport close.\n *\n * @api private\n */\n onClose(reason, description) {\n if (\"opening\" === this.readyState ||\n \"open\" === this.readyState ||\n \"closing\" === this.readyState) {\n // clear timers\n this.clearTimeoutFn(this.pingTimeoutTimer);\n // stop event from firing again for transport\n this.transport.removeAllListeners(\"close\");\n // ensure transport won't stay open\n this.transport.close();\n // ignore further transport communication\n this.transport.removeAllListeners();\n if (typeof removeEventListener === \"function\") {\n removeEventListener(\"beforeunload\", this.beforeunloadEventListener, false);\n removeEventListener(\"offline\", this.offlineEventListener, false);\n }\n // set ready state\n this.readyState = \"closed\";\n // clear session id\n this.id = null;\n // emit close event\n this.emitReserved(\"close\", reason, description);\n // clean buffers after, so users can still\n // grab the buffers on `close` event\n this.writeBuffer = [];\n this.prevBufferLen = 0;\n }\n }\n /**\n * Filters upgrades, returning only those matching client transports.\n *\n * @param {Array} server upgrades\n * @api private\n *\n */\n filterUpgrades(upgrades) {\n const filteredUpgrades = [];\n let i = 0;\n const j = upgrades.length;\n for (; i < j; i++) {\n if (~this.transports.indexOf(upgrades[i]))\n filteredUpgrades.push(upgrades[i]);\n }\n return filteredUpgrades;\n }\n}\nSocket.protocol = protocol;\n","import { parse } from \"engine.io-client\";\n/**\n * URL parser.\n *\n * @param uri - url\n * @param path - the request path of the connection\n * @param loc - An object meant to mimic window.location.\n * Defaults to window.location.\n * @public\n */\nexport function url(uri, path = \"\", loc) {\n let obj = uri;\n // default to window.location\n loc = loc || (typeof location !== \"undefined\" && location);\n if (null == uri)\n uri = loc.protocol + \"//\" + loc.host;\n // relative path support\n if (typeof uri === \"string\") {\n if (\"/\" === uri.charAt(0)) {\n if (\"/\" === uri.charAt(1)) {\n uri = loc.protocol + uri;\n }\n else {\n uri = loc.host + uri;\n }\n }\n if (!/^(https?|wss?):\\/\\//.test(uri)) {\n if (\"undefined\" !== typeof loc) {\n uri = loc.protocol + \"//\" + uri;\n }\n else {\n uri = \"https://\" + uri;\n }\n }\n // parse\n obj = parse(uri);\n }\n // make sure we treat `localhost:80` and `localhost` equally\n if (!obj.port) {\n if (/^(http|ws)$/.test(obj.protocol)) {\n obj.port = \"80\";\n }\n else if (/^(http|ws)s$/.test(obj.protocol)) {\n obj.port = \"443\";\n }\n }\n obj.path = obj.path || \"/\";\n const ipv6 = obj.host.indexOf(\":\") !== -1;\n const host = ipv6 ? \"[\" + obj.host + \"]\" : obj.host;\n // define unique id\n obj.id = obj.protocol + \"://\" + host + \":\" + obj.port + path;\n // define href\n obj.href =\n obj.protocol +\n \"://\" +\n host +\n (loc && loc.port === obj.port ? \"\" : \":\" + obj.port);\n return obj;\n}\n","const withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst isView = (obj) => {\n return typeof ArrayBuffer.isView === \"function\"\n ? ArrayBuffer.isView(obj)\n : obj.buffer instanceof ArrayBuffer;\n};\nconst toString = Object.prototype.toString;\nconst withNativeBlob = typeof Blob === \"function\" ||\n (typeof Blob !== \"undefined\" &&\n toString.call(Blob) === \"[object BlobConstructor]\");\nconst withNativeFile = typeof File === \"function\" ||\n (typeof File !== \"undefined\" &&\n toString.call(File) === \"[object FileConstructor]\");\n/**\n * Returns true if obj is a Buffer, an ArrayBuffer, a Blob or a File.\n *\n * @private\n */\nexport function isBinary(obj) {\n return ((withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj))) ||\n (withNativeBlob && obj instanceof Blob) ||\n (withNativeFile && obj instanceof File));\n}\nexport function hasBinary(obj, toJSON) {\n if (!obj || typeof obj !== \"object\") {\n return false;\n }\n if (Array.isArray(obj)) {\n for (let i = 0, l = obj.length; i < l; i++) {\n if (hasBinary(obj[i])) {\n return true;\n }\n }\n return false;\n }\n if (isBinary(obj)) {\n return true;\n }\n if (obj.toJSON &&\n typeof obj.toJSON === \"function\" &&\n arguments.length === 1) {\n return hasBinary(obj.toJSON(), true);\n }\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {\n return true;\n }\n }\n return false;\n}\n","import { isBinary } from \"./is-binary.js\";\n/**\n * Replaces every Buffer | ArrayBuffer | Blob | File in packet with a numbered placeholder.\n *\n * @param {Object} packet - socket.io event packet\n * @return {Object} with deconstructed packet and list of buffers\n * @public\n */\nexport function deconstructPacket(packet) {\n const buffers = [];\n const packetData = packet.data;\n const pack = packet;\n pack.data = _deconstructPacket(packetData, buffers);\n pack.attachments = buffers.length; // number of binary 'attachments'\n return { packet: pack, buffers: buffers };\n}\nfunction _deconstructPacket(data, buffers) {\n if (!data)\n return data;\n if (isBinary(data)) {\n const placeholder = { _placeholder: true, num: buffers.length };\n buffers.push(data);\n return placeholder;\n }\n else if (Array.isArray(data)) {\n const newData = new Array(data.length);\n for (let i = 0; i < data.length; i++) {\n newData[i] = _deconstructPacket(data[i], buffers);\n }\n return newData;\n }\n else if (typeof data === \"object\" && !(data instanceof Date)) {\n const newData = {};\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n newData[key] = _deconstructPacket(data[key], buffers);\n }\n }\n return newData;\n }\n return data;\n}\n/**\n * Reconstructs a binary packet from its placeholder packet and buffers\n *\n * @param {Object} packet - event packet with placeholders\n * @param {Array} buffers - binary buffers to put in placeholder positions\n * @return {Object} reconstructed packet\n * @public\n */\nexport function reconstructPacket(packet, buffers) {\n packet.data = _reconstructPacket(packet.data, buffers);\n packet.attachments = undefined; // no longer useful\n return packet;\n}\nfunction _reconstructPacket(data, buffers) {\n if (!data)\n return data;\n if (data && data._placeholder === true) {\n const isIndexValid = typeof data.num === \"number\" &&\n data.num >= 0 &&\n data.num < buffers.length;\n if (isIndexValid) {\n return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n }\n else {\n throw new Error(\"illegal attachments\");\n }\n }\n else if (Array.isArray(data)) {\n for (let i = 0; i < data.length; i++) {\n data[i] = _reconstructPacket(data[i], buffers);\n }\n }\n else if (typeof data === \"object\") {\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n data[key] = _reconstructPacket(data[key], buffers);\n }\n }\n }\n return data;\n}\n","import { Emitter } from \"@socket.io/component-emitter\";\nimport { deconstructPacket, reconstructPacket } from \"./binary.js\";\nimport { isBinary, hasBinary } from \"./is-binary.js\";\n/**\n * Protocol version.\n *\n * @public\n */\nexport const protocol = 5;\nexport var PacketType;\n(function (PacketType) {\n PacketType[PacketType[\"CONNECT\"] = 0] = \"CONNECT\";\n PacketType[PacketType[\"DISCONNECT\"] = 1] = \"DISCONNECT\";\n PacketType[PacketType[\"EVENT\"] = 2] = \"EVENT\";\n PacketType[PacketType[\"ACK\"] = 3] = \"ACK\";\n PacketType[PacketType[\"CONNECT_ERROR\"] = 4] = \"CONNECT_ERROR\";\n PacketType[PacketType[\"BINARY_EVENT\"] = 5] = \"BINARY_EVENT\";\n PacketType[PacketType[\"BINARY_ACK\"] = 6] = \"BINARY_ACK\";\n})(PacketType || (PacketType = {}));\n/**\n * A socket.io Encoder instance\n */\nexport class Encoder {\n /**\n * Encoder constructor\n *\n * @param {function} replacer - custom replacer to pass down to JSON.parse\n */\n constructor(replacer) {\n this.replacer = replacer;\n }\n /**\n * Encode a packet as a single string if non-binary, or as a\n * buffer sequence, depending on packet type.\n *\n * @param {Object} obj - packet object\n */\n encode(obj) {\n if (obj.type === PacketType.EVENT || obj.type === PacketType.ACK) {\n if (hasBinary(obj)) {\n obj.type =\n obj.type === PacketType.EVENT\n ? PacketType.BINARY_EVENT\n : PacketType.BINARY_ACK;\n return this.encodeAsBinary(obj);\n }\n }\n return [this.encodeAsString(obj)];\n }\n /**\n * Encode packet as string.\n */\n encodeAsString(obj) {\n // first is type\n let str = \"\" + obj.type;\n // attachments if we have them\n if (obj.type === PacketType.BINARY_EVENT ||\n obj.type === PacketType.BINARY_ACK) {\n str += obj.attachments + \"-\";\n }\n // if we have a namespace other than `/`\n // we append it followed by a comma `,`\n if (obj.nsp && \"/\" !== obj.nsp) {\n str += obj.nsp + \",\";\n }\n // immediately followed by the id\n if (null != obj.id) {\n str += obj.id;\n }\n // json data\n if (null != obj.data) {\n str += JSON.stringify(obj.data, this.replacer);\n }\n return str;\n }\n /**\n * Encode packet as 'buffer sequence' by removing blobs, and\n * deconstructing packet into object with placeholders and\n * a list of buffers.\n */\n encodeAsBinary(obj) {\n const deconstruction = deconstructPacket(obj);\n const pack = this.encodeAsString(deconstruction.packet);\n const buffers = deconstruction.buffers;\n buffers.unshift(pack); // add packet info to beginning of data list\n return buffers; // write all the buffers\n }\n}\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n */\nexport class Decoder extends Emitter {\n /**\n * Decoder constructor\n *\n * @param {function} reviver - custom reviver to pass down to JSON.stringify\n */\n constructor(reviver) {\n super();\n this.reviver = reviver;\n }\n /**\n * Decodes an encoded packet string into packet JSON.\n *\n * @param {String} obj - encoded packet\n */\n add(obj) {\n let packet;\n if (typeof obj === \"string\") {\n if (this.reconstructor) {\n throw new Error(\"got plaintext data when reconstructing a packet\");\n }\n packet = this.decodeString(obj);\n if (packet.type === PacketType.BINARY_EVENT ||\n packet.type === PacketType.BINARY_ACK) {\n // binary packet's json\n this.reconstructor = new BinaryReconstructor(packet);\n // no attachments, labeled binary but no binary data to follow\n if (packet.attachments === 0) {\n super.emitReserved(\"decoded\", packet);\n }\n }\n else {\n // non-binary full packet\n super.emitReserved(\"decoded\", packet);\n }\n }\n else if (isBinary(obj) || obj.base64) {\n // raw binary data\n if (!this.reconstructor) {\n throw new Error(\"got binary data when not reconstructing a packet\");\n }\n else {\n packet = this.reconstructor.takeBinaryData(obj);\n if (packet) {\n // received final buffer\n this.reconstructor = null;\n super.emitReserved(\"decoded\", packet);\n }\n }\n }\n else {\n throw new Error(\"Unknown type: \" + obj);\n }\n }\n /**\n * Decode a packet String (JSON data)\n *\n * @param {String} str\n * @return {Object} packet\n */\n decodeString(str) {\n let i = 0;\n // look up type\n const p = {\n type: Number(str.charAt(0)),\n };\n if (PacketType[p.type] === undefined) {\n throw new Error(\"unknown packet type \" + p.type);\n }\n // look up attachments if type binary\n if (p.type === PacketType.BINARY_EVENT ||\n p.type === PacketType.BINARY_ACK) {\n const start = i + 1;\n while (str.charAt(++i) !== \"-\" && i != str.length) { }\n const buf = str.substring(start, i);\n if (buf != Number(buf) || str.charAt(i) !== \"-\") {\n throw new Error(\"Illegal attachments\");\n }\n p.attachments = Number(buf);\n }\n // look up namespace (if any)\n if (\"/\" === str.charAt(i + 1)) {\n const start = i + 1;\n while (++i) {\n const c = str.charAt(i);\n if (\",\" === c)\n break;\n if (i === str.length)\n break;\n }\n p.nsp = str.substring(start, i);\n }\n else {\n p.nsp = \"/\";\n }\n // look up id\n const next = str.charAt(i + 1);\n if (\"\" !== next && Number(next) == next) {\n const start = i + 1;\n while (++i) {\n const c = str.charAt(i);\n if (null == c || Number(c) != c) {\n --i;\n break;\n }\n if (i === str.length)\n break;\n }\n p.id = Number(str.substring(start, i + 1));\n }\n // look up json data\n if (str.charAt(++i)) {\n const payload = this.tryParse(str.substr(i));\n if (Decoder.isPayloadValid(p.type, payload)) {\n p.data = payload;\n }\n else {\n throw new Error(\"invalid payload\");\n }\n }\n return p;\n }\n tryParse(str) {\n try {\n return JSON.parse(str, this.reviver);\n }\n catch (e) {\n return false;\n }\n }\n static isPayloadValid(type, payload) {\n switch (type) {\n case PacketType.CONNECT:\n return typeof payload === \"object\";\n case PacketType.DISCONNECT:\n return payload === undefined;\n case PacketType.CONNECT_ERROR:\n return typeof payload === \"string\" || typeof payload === \"object\";\n case PacketType.EVENT:\n case PacketType.BINARY_EVENT:\n return Array.isArray(payload) && payload.length > 0;\n case PacketType.ACK:\n case PacketType.BINARY_ACK:\n return Array.isArray(payload);\n }\n }\n /**\n * Deallocates a parser's resources\n */\n destroy() {\n if (this.reconstructor) {\n this.reconstructor.finishedReconstruction();\n }\n }\n}\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n */\nclass BinaryReconstructor {\n constructor(packet) {\n this.packet = packet;\n this.buffers = [];\n this.reconPack = packet;\n }\n /**\n * Method to be called when binary data received from connection\n * after a BINARY_EVENT packet.\n *\n * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n * @return {null | Object} returns null if more binary data is expected or\n * a reconstructed packet object if all buffers have been received.\n */\n takeBinaryData(binData) {\n this.buffers.push(binData);\n if (this.buffers.length === this.reconPack.attachments) {\n // done with buffer list\n const packet = reconstructPacket(this.reconPack, this.buffers);\n this.finishedReconstruction();\n return packet;\n }\n return null;\n }\n /**\n * Cleans up binary packet reconstruction variables.\n */\n finishedReconstruction() {\n this.reconPack = null;\n this.buffers = [];\n }\n}\n","export function on(obj, ev, fn) {\n obj.on(ev, fn);\n return function subDestroy() {\n obj.off(ev, fn);\n };\n}\n","import { PacketType } from \"socket.io-parser\";\nimport { on } from \"./on.js\";\nimport { Emitter, } from \"@socket.io/component-emitter\";\n/**\n * Internal events.\n * These events can't be emitted by the user.\n */\nconst RESERVED_EVENTS = Object.freeze({\n connect: 1,\n connect_error: 1,\n disconnect: 1,\n disconnecting: 1,\n // EventEmitter reserved events: https://nodejs.org/api/events.html#events_event_newlistener\n newListener: 1,\n removeListener: 1,\n});\n/**\n * A Socket is the fundamental class for interacting with the server.\n *\n * A Socket belongs to a certain Namespace (by default /) and uses an underlying {@link Manager} to communicate.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(\"connected\");\n * });\n *\n * // send an event to the server\n * socket.emit(\"foo\", \"bar\");\n *\n * socket.on(\"foobar\", () => {\n * // an event was received from the server\n * });\n *\n * // upon disconnection\n * socket.on(\"disconnect\", (reason) => {\n * console.log(`disconnected due to ${reason}`);\n * });\n */\nexport class Socket extends Emitter {\n /**\n * `Socket` constructor.\n */\n constructor(io, nsp, opts) {\n super();\n /**\n * Whether the socket is currently connected to the server.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(socket.connected); // true\n * });\n *\n * socket.on(\"disconnect\", () => {\n * console.log(socket.connected); // false\n * });\n */\n this.connected = false;\n /**\n * Buffer for packets received before the CONNECT packet\n */\n this.receiveBuffer = [];\n /**\n * Buffer for packets that will be sent once the socket is connected\n */\n this.sendBuffer = [];\n this.ids = 0;\n this.acks = {};\n this.flags = {};\n this.io = io;\n this.nsp = nsp;\n if (opts && opts.auth) {\n this.auth = opts.auth;\n }\n if (this.io._autoConnect)\n this.open();\n }\n /**\n * Whether the socket is currently disconnected\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(socket.disconnected); // false\n * });\n *\n * socket.on(\"disconnect\", () => {\n * console.log(socket.disconnected); // true\n * });\n */\n get disconnected() {\n return !this.connected;\n }\n /**\n * Subscribe to open, close and packet events\n *\n * @private\n */\n subEvents() {\n if (this.subs)\n return;\n const io = this.io;\n this.subs = [\n on(io, \"open\", this.onopen.bind(this)),\n on(io, \"packet\", this.onpacket.bind(this)),\n on(io, \"error\", this.onerror.bind(this)),\n on(io, \"close\", this.onclose.bind(this)),\n ];\n }\n /**\n * Whether the Socket will try to reconnect when its Manager connects or reconnects.\n *\n * @example\n * const socket = io();\n *\n * console.log(socket.active); // true\n *\n * socket.on(\"disconnect\", (reason) => {\n * if (reason === \"io server disconnect\") {\n * // the disconnection was initiated by the server, you need to manually reconnect\n * console.log(socket.active); // false\n * }\n * // else the socket will automatically try to reconnect\n * console.log(socket.active); // true\n * });\n */\n get active() {\n return !!this.subs;\n }\n /**\n * \"Opens\" the socket.\n *\n * @example\n * const socket = io({\n * autoConnect: false\n * });\n *\n * socket.connect();\n */\n connect() {\n if (this.connected)\n return this;\n this.subEvents();\n if (!this.io[\"_reconnecting\"])\n this.io.open(); // ensure open\n if (\"open\" === this.io._readyState)\n this.onopen();\n return this;\n }\n /**\n * Alias for {@link connect()}.\n */\n open() {\n return this.connect();\n }\n /**\n * Sends a `message` event.\n *\n * This method mimics the WebSocket.send() method.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/send\n *\n * @example\n * socket.send(\"hello\");\n *\n * // this is equivalent to\n * socket.emit(\"message\", \"hello\");\n *\n * @return self\n */\n send(...args) {\n args.unshift(\"message\");\n this.emit.apply(this, args);\n return this;\n }\n /**\n * Override `emit`.\n * If the event is in `events`, it's emitted normally.\n *\n * @example\n * socket.emit(\"hello\", \"world\");\n *\n * // all serializable datastructures are supported (no need to call JSON.stringify)\n * socket.emit(\"hello\", 1, \"2\", { 3: [\"4\"], 5: Uint8Array.from([6]) });\n *\n * // with an acknowledgement from the server\n * socket.emit(\"hello\", \"world\", (val) => {\n * // ...\n * });\n *\n * @return self\n */\n emit(ev, ...args) {\n if (RESERVED_EVENTS.hasOwnProperty(ev)) {\n throw new Error('\"' + ev.toString() + '\" is a reserved event name');\n }\n args.unshift(ev);\n const packet = {\n type: PacketType.EVENT,\n data: args,\n };\n packet.options = {};\n packet.options.compress = this.flags.compress !== false;\n // event ack callback\n if (\"function\" === typeof args[args.length - 1]) {\n const id = this.ids++;\n const ack = args.pop();\n this._registerAckCallback(id, ack);\n packet.id = id;\n }\n const isTransportWritable = this.io.engine &&\n this.io.engine.transport &&\n this.io.engine.transport.writable;\n const discardPacket = this.flags.volatile && (!isTransportWritable || !this.connected);\n if (discardPacket) {\n }\n else if (this.connected) {\n this.notifyOutgoingListeners(packet);\n this.packet(packet);\n }\n else {\n this.sendBuffer.push(packet);\n }\n this.flags = {};\n return this;\n }\n /**\n * @private\n */\n _registerAckCallback(id, ack) {\n const timeout = this.flags.timeout;\n if (timeout === undefined) {\n this.acks[id] = ack;\n return;\n }\n // @ts-ignore\n const timer = this.io.setTimeoutFn(() => {\n delete this.acks[id];\n for (let i = 0; i < this.sendBuffer.length; i++) {\n if (this.sendBuffer[i].id === id) {\n this.sendBuffer.splice(i, 1);\n }\n }\n ack.call(this, new Error(\"operation has timed out\"));\n }, timeout);\n this.acks[id] = (...args) => {\n // @ts-ignore\n this.io.clearTimeoutFn(timer);\n ack.apply(this, [null, ...args]);\n };\n }\n /**\n * Sends a packet.\n *\n * @param packet\n * @private\n */\n packet(packet) {\n packet.nsp = this.nsp;\n this.io._packet(packet);\n }\n /**\n * Called upon engine `open`.\n *\n * @private\n */\n onopen() {\n if (typeof this.auth == \"function\") {\n this.auth((data) => {\n this.packet({ type: PacketType.CONNECT, data });\n });\n }\n else {\n this.packet({ type: PacketType.CONNECT, data: this.auth });\n }\n }\n /**\n * Called upon engine or manager `error`.\n *\n * @param err\n * @private\n */\n onerror(err) {\n if (!this.connected) {\n this.emitReserved(\"connect_error\", err);\n }\n }\n /**\n * Called upon engine `close`.\n *\n * @param reason\n * @param description\n * @private\n */\n onclose(reason, description) {\n this.connected = false;\n delete this.id;\n this.emitReserved(\"disconnect\", reason, description);\n }\n /**\n * Called with socket packet.\n *\n * @param packet\n * @private\n */\n onpacket(packet) {\n const sameNamespace = packet.nsp === this.nsp;\n if (!sameNamespace)\n return;\n switch (packet.type) {\n case PacketType.CONNECT:\n if (packet.data && packet.data.sid) {\n const id = packet.data.sid;\n this.onconnect(id);\n }\n else {\n this.emitReserved(\"connect_error\", new Error(\"It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)\"));\n }\n break;\n case PacketType.EVENT:\n case PacketType.BINARY_EVENT:\n this.onevent(packet);\n break;\n case PacketType.ACK:\n case PacketType.BINARY_ACK:\n this.onack(packet);\n break;\n case PacketType.DISCONNECT:\n this.ondisconnect();\n break;\n case PacketType.CONNECT_ERROR:\n this.destroy();\n const err = new Error(packet.data.message);\n // @ts-ignore\n err.data = packet.data.data;\n this.emitReserved(\"connect_error\", err);\n break;\n }\n }\n /**\n * Called upon a server event.\n *\n * @param packet\n * @private\n */\n onevent(packet) {\n const args = packet.data || [];\n if (null != packet.id) {\n args.push(this.ack(packet.id));\n }\n if (this.connected) {\n this.emitEvent(args);\n }\n else {\n this.receiveBuffer.push(Object.freeze(args));\n }\n }\n emitEvent(args) {\n if (this._anyListeners && this._anyListeners.length) {\n const listeners = this._anyListeners.slice();\n for (const listener of listeners) {\n listener.apply(this, args);\n }\n }\n super.emit.apply(this, args);\n }\n /**\n * Produces an ack callback to emit with an event.\n *\n * @private\n */\n ack(id) {\n const self = this;\n let sent = false;\n return function (...args) {\n // prevent double callbacks\n if (sent)\n return;\n sent = true;\n self.packet({\n type: PacketType.ACK,\n id: id,\n data: args,\n });\n };\n }\n /**\n * Called upon a server acknowlegement.\n *\n * @param packet\n * @private\n */\n onack(packet) {\n const ack = this.acks[packet.id];\n if (\"function\" === typeof ack) {\n ack.apply(this, packet.data);\n delete this.acks[packet.id];\n }\n else {\n }\n }\n /**\n * Called upon server connect.\n *\n * @private\n */\n onconnect(id) {\n this.id = id;\n this.connected = true;\n this.emitBuffered();\n this.emitReserved(\"connect\");\n }\n /**\n * Emit buffered events (received and emitted).\n *\n * @private\n */\n emitBuffered() {\n this.receiveBuffer.forEach((args) => this.emitEvent(args));\n this.receiveBuffer = [];\n this.sendBuffer.forEach((packet) => {\n this.notifyOutgoingListeners(packet);\n this.packet(packet);\n });\n this.sendBuffer = [];\n }\n /**\n * Called upon server disconnect.\n *\n * @private\n */\n ondisconnect() {\n this.destroy();\n this.onclose(\"io server disconnect\");\n }\n /**\n * Called upon forced client/server side disconnections,\n * this method ensures the manager stops tracking us and\n * that reconnections don't get triggered for this.\n *\n * @private\n */\n destroy() {\n if (this.subs) {\n // clean subscriptions to avoid reconnections\n this.subs.forEach((subDestroy) => subDestroy());\n this.subs = undefined;\n }\n this.io[\"_destroy\"](this);\n }\n /**\n * Disconnects the socket manually. In that case, the socket will not try to reconnect.\n *\n * If this is the last active Socket instance of the {@link Manager}, the low-level connection will be closed.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"disconnect\", (reason) => {\n * // console.log(reason); prints \"io client disconnect\"\n * });\n *\n * socket.disconnect();\n *\n * @return self\n */\n disconnect() {\n if (this.connected) {\n this.packet({ type: PacketType.DISCONNECT });\n }\n // remove socket from pool\n this.destroy();\n if (this.connected) {\n // fire events\n this.onclose(\"io client disconnect\");\n }\n return this;\n }\n /**\n * Alias for {@link disconnect()}.\n *\n * @return self\n */\n close() {\n return this.disconnect();\n }\n /**\n * Sets the compress flag.\n *\n * @example\n * socket.compress(false).emit(\"hello\");\n *\n * @param compress - if `true`, compresses the sending data\n * @return self\n */\n compress(compress) {\n this.flags.compress = compress;\n return this;\n }\n /**\n * Sets a modifier for a subsequent event emission that the event message will be dropped when this socket is not\n * ready to send messages.\n *\n * @example\n * socket.volatile.emit(\"hello\"); // the server may or may not receive it\n *\n * @returns self\n */\n get volatile() {\n this.flags.volatile = true;\n return this;\n }\n /**\n * Sets a modifier for a subsequent event emission that the callback will be called with an error when the\n * given number of milliseconds have elapsed without an acknowledgement from the server:\n *\n * @example\n * socket.timeout(5000).emit(\"my-event\", (err) => {\n * if (err) {\n * // the server did not acknowledge the event in the given delay\n * }\n * });\n *\n * @returns self\n */\n timeout(timeout) {\n this.flags.timeout = timeout;\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback.\n *\n * @example\n * socket.onAny((event, ...args) => {\n * console.log(`got ${event}`);\n * });\n *\n * @param listener\n */\n onAny(listener) {\n this._anyListeners = this._anyListeners || [];\n this._anyListeners.push(listener);\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback. The listener is added to the beginning of the listeners array.\n *\n * @example\n * socket.prependAny((event, ...args) => {\n * console.log(`got event ${event}`);\n * });\n *\n * @param listener\n */\n prependAny(listener) {\n this._anyListeners = this._anyListeners || [];\n this._anyListeners.unshift(listener);\n return this;\n }\n /**\n * Removes the listener that will be fired when any event is emitted.\n *\n * @example\n * const catchAllListener = (event, ...args) => {\n * console.log(`got event ${event}`);\n * }\n *\n * socket.onAny(catchAllListener);\n *\n * // remove a specific listener\n * socket.offAny(catchAllListener);\n *\n * // or remove all listeners\n * socket.offAny();\n *\n * @param listener\n */\n offAny(listener) {\n if (!this._anyListeners) {\n return this;\n }\n if (listener) {\n const listeners = this._anyListeners;\n for (let i = 0; i < listeners.length; i++) {\n if (listener === listeners[i]) {\n listeners.splice(i, 1);\n return this;\n }\n }\n }\n else {\n this._anyListeners = [];\n }\n return this;\n }\n /**\n * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated,\n * e.g. to remove listeners.\n */\n listenersAny() {\n return this._anyListeners || [];\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback.\n *\n * Note: acknowledgements sent to the server are not included.\n *\n * @example\n * socket.onAnyOutgoing((event, ...args) => {\n * console.log(`sent event ${event}`);\n * });\n *\n * @param listener\n */\n onAnyOutgoing(listener) {\n this._anyOutgoingListeners = this._anyOutgoingListeners || [];\n this._anyOutgoingListeners.push(listener);\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback. The listener is added to the beginning of the listeners array.\n *\n * Note: acknowledgements sent to the server are not included.\n *\n * @example\n * socket.prependAnyOutgoing((event, ...args) => {\n * console.log(`sent event ${event}`);\n * });\n *\n * @param listener\n */\n prependAnyOutgoing(listener) {\n this._anyOutgoingListeners = this._anyOutgoingListeners || [];\n this._anyOutgoingListeners.unshift(listener);\n return this;\n }\n /**\n * Removes the listener that will be fired when any event is emitted.\n *\n * @example\n * const catchAllListener = (event, ...args) => {\n * console.log(`sent event ${event}`);\n * }\n *\n * socket.onAnyOutgoing(catchAllListener);\n *\n * // remove a specific listener\n * socket.offAnyOutgoing(catchAllListener);\n *\n * // or remove all listeners\n * socket.offAnyOutgoing();\n *\n * @param [listener] - the catch-all listener (optional)\n */\n offAnyOutgoing(listener) {\n if (!this._anyOutgoingListeners) {\n return this;\n }\n if (listener) {\n const listeners = this._anyOutgoingListeners;\n for (let i = 0; i < listeners.length; i++) {\n if (listener === listeners[i]) {\n listeners.splice(i, 1);\n return this;\n }\n }\n }\n else {\n this._anyOutgoingListeners = [];\n }\n return this;\n }\n /**\n * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated,\n * e.g. to remove listeners.\n */\n listenersAnyOutgoing() {\n return this._anyOutgoingListeners || [];\n }\n /**\n * Notify the listeners for each packet sent\n *\n * @param packet\n *\n * @private\n */\n notifyOutgoingListeners(packet) {\n if (this._anyOutgoingListeners && this._anyOutgoingListeners.length) {\n const listeners = this._anyOutgoingListeners.slice();\n for (const listener of listeners) {\n listener.apply(this, packet.data);\n }\n }\n }\n}\n","/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\nexport function Backoff(opts) {\n opts = opts || {};\n this.ms = opts.min || 100;\n this.max = opts.max || 10000;\n this.factor = opts.factor || 2;\n this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n this.attempts = 0;\n}\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\nBackoff.prototype.duration = function () {\n var ms = this.ms * Math.pow(this.factor, this.attempts++);\n if (this.jitter) {\n var rand = Math.random();\n var deviation = Math.floor(rand * this.jitter * ms);\n ms = (Math.floor(rand * 10) & 1) == 0 ? ms - deviation : ms + deviation;\n }\n return Math.min(ms, this.max) | 0;\n};\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\nBackoff.prototype.reset = function () {\n this.attempts = 0;\n};\n/**\n * Set the minimum duration\n *\n * @api public\n */\nBackoff.prototype.setMin = function (min) {\n this.ms = min;\n};\n/**\n * Set the maximum duration\n *\n * @api public\n */\nBackoff.prototype.setMax = function (max) {\n this.max = max;\n};\n/**\n * Set the jitter\n *\n * @api public\n */\nBackoff.prototype.setJitter = function (jitter) {\n this.jitter = jitter;\n};\n","import { Socket as Engine, installTimerFunctions, nextTick, } from \"engine.io-client\";\nimport { Socket } from \"./socket.js\";\nimport * as parser from \"socket.io-parser\";\nimport { on } from \"./on.js\";\nimport { Backoff } from \"./contrib/backo2.js\";\nimport { Emitter, } from \"@socket.io/component-emitter\";\nexport class Manager extends Emitter {\n constructor(uri, opts) {\n var _a;\n super();\n this.nsps = {};\n this.subs = [];\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n opts.path = opts.path || \"/socket.io\";\n this.opts = opts;\n installTimerFunctions(this, opts);\n this.reconnection(opts.reconnection !== false);\n this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n this.reconnectionDelay(opts.reconnectionDelay || 1000);\n this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n this.randomizationFactor((_a = opts.randomizationFactor) !== null && _a !== void 0 ? _a : 0.5);\n this.backoff = new Backoff({\n min: this.reconnectionDelay(),\n max: this.reconnectionDelayMax(),\n jitter: this.randomizationFactor(),\n });\n this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n this._readyState = \"closed\";\n this.uri = uri;\n const _parser = opts.parser || parser;\n this.encoder = new _parser.Encoder();\n this.decoder = new _parser.Decoder();\n this._autoConnect = opts.autoConnect !== false;\n if (this._autoConnect)\n this.open();\n }\n reconnection(v) {\n if (!arguments.length)\n return this._reconnection;\n this._reconnection = !!v;\n return this;\n }\n reconnectionAttempts(v) {\n if (v === undefined)\n return this._reconnectionAttempts;\n this._reconnectionAttempts = v;\n return this;\n }\n reconnectionDelay(v) {\n var _a;\n if (v === undefined)\n return this._reconnectionDelay;\n this._reconnectionDelay = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMin(v);\n return this;\n }\n randomizationFactor(v) {\n var _a;\n if (v === undefined)\n return this._randomizationFactor;\n this._randomizationFactor = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setJitter(v);\n return this;\n }\n reconnectionDelayMax(v) {\n var _a;\n if (v === undefined)\n return this._reconnectionDelayMax;\n this._reconnectionDelayMax = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMax(v);\n return this;\n }\n timeout(v) {\n if (!arguments.length)\n return this._timeout;\n this._timeout = v;\n return this;\n }\n /**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @private\n */\n maybeReconnectOnOpen() {\n // Only try to reconnect if it's the first time we're connecting\n if (!this._reconnecting &&\n this._reconnection &&\n this.backoff.attempts === 0) {\n // keeps reconnection from firing twice for the same reconnection loop\n this.reconnect();\n }\n }\n /**\n * Sets the current transport `socket`.\n *\n * @param {Function} fn - optional, callback\n * @return self\n * @public\n */\n open(fn) {\n if (~this._readyState.indexOf(\"open\"))\n return this;\n this.engine = new Engine(this.uri, this.opts);\n const socket = this.engine;\n const self = this;\n this._readyState = \"opening\";\n this.skipReconnect = false;\n // emit `open`\n const openSubDestroy = on(socket, \"open\", function () {\n self.onopen();\n fn && fn();\n });\n // emit `error`\n const errorSub = on(socket, \"error\", (err) => {\n self.cleanup();\n self._readyState = \"closed\";\n this.emitReserved(\"error\", err);\n if (fn) {\n fn(err);\n }\n else {\n // Only do this if there is no fn to handle the error\n self.maybeReconnectOnOpen();\n }\n });\n if (false !== this._timeout) {\n const timeout = this._timeout;\n if (timeout === 0) {\n openSubDestroy(); // prevents a race condition with the 'open' event\n }\n // set timer\n const timer = this.setTimeoutFn(() => {\n openSubDestroy();\n socket.close();\n // @ts-ignore\n socket.emit(\"error\", new Error(\"timeout\"));\n }, timeout);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(function subDestroy() {\n clearTimeout(timer);\n });\n }\n this.subs.push(openSubDestroy);\n this.subs.push(errorSub);\n return this;\n }\n /**\n * Alias for open()\n *\n * @return self\n * @public\n */\n connect(fn) {\n return this.open(fn);\n }\n /**\n * Called upon transport open.\n *\n * @private\n */\n onopen() {\n // clear old subs\n this.cleanup();\n // mark as open\n this._readyState = \"open\";\n this.emitReserved(\"open\");\n // add new subs\n const socket = this.engine;\n this.subs.push(on(socket, \"ping\", this.onping.bind(this)), on(socket, \"data\", this.ondata.bind(this)), on(socket, \"error\", this.onerror.bind(this)), on(socket, \"close\", this.onclose.bind(this)), on(this.decoder, \"decoded\", this.ondecoded.bind(this)));\n }\n /**\n * Called upon a ping.\n *\n * @private\n */\n onping() {\n this.emitReserved(\"ping\");\n }\n /**\n * Called with data.\n *\n * @private\n */\n ondata(data) {\n try {\n this.decoder.add(data);\n }\n catch (e) {\n this.onclose(\"parse error\", e);\n }\n }\n /**\n * Called when parser fully decodes a packet.\n *\n * @private\n */\n ondecoded(packet) {\n // the nextTick call prevents an exception in a user-provided event listener from triggering a disconnection due to a \"parse error\"\n nextTick(() => {\n this.emitReserved(\"packet\", packet);\n }, this.setTimeoutFn);\n }\n /**\n * Called upon socket error.\n *\n * @private\n */\n onerror(err) {\n this.emitReserved(\"error\", err);\n }\n /**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @public\n */\n socket(nsp, opts) {\n let socket = this.nsps[nsp];\n if (!socket) {\n socket = new Socket(this, nsp, opts);\n this.nsps[nsp] = socket;\n }\n return socket;\n }\n /**\n * Called upon a socket close.\n *\n * @param socket\n * @private\n */\n _destroy(socket) {\n const nsps = Object.keys(this.nsps);\n for (const nsp of nsps) {\n const socket = this.nsps[nsp];\n if (socket.active) {\n return;\n }\n }\n this._close();\n }\n /**\n * Writes a packet.\n *\n * @param packet\n * @private\n */\n _packet(packet) {\n const encodedPackets = this.encoder.encode(packet);\n for (let i = 0; i < encodedPackets.length; i++) {\n this.engine.write(encodedPackets[i], packet.options);\n }\n }\n /**\n * Clean up transport subscriptions and packet buffer.\n *\n * @private\n */\n cleanup() {\n this.subs.forEach((subDestroy) => subDestroy());\n this.subs.length = 0;\n this.decoder.destroy();\n }\n /**\n * Close the current socket.\n *\n * @private\n */\n _close() {\n this.skipReconnect = true;\n this._reconnecting = false;\n this.onclose(\"forced close\");\n if (this.engine)\n this.engine.close();\n }\n /**\n * Alias for close()\n *\n * @private\n */\n disconnect() {\n return this._close();\n }\n /**\n * Called upon engine close.\n *\n * @private\n */\n onclose(reason, description) {\n this.cleanup();\n this.backoff.reset();\n this._readyState = \"closed\";\n this.emitReserved(\"close\", reason, description);\n if (this._reconnection && !this.skipReconnect) {\n this.reconnect();\n }\n }\n /**\n * Attempt a reconnection.\n *\n * @private\n */\n reconnect() {\n if (this._reconnecting || this.skipReconnect)\n return this;\n const self = this;\n if (this.backoff.attempts >= this._reconnectionAttempts) {\n this.backoff.reset();\n this.emitReserved(\"reconnect_failed\");\n this._reconnecting = false;\n }\n else {\n const delay = this.backoff.duration();\n this._reconnecting = true;\n const timer = this.setTimeoutFn(() => {\n if (self.skipReconnect)\n return;\n this.emitReserved(\"reconnect_attempt\", self.backoff.attempts);\n // check again for the case socket closed in above events\n if (self.skipReconnect)\n return;\n self.open((err) => {\n if (err) {\n self._reconnecting = false;\n self.reconnect();\n this.emitReserved(\"reconnect_error\", err);\n }\n else {\n self.onreconnect();\n }\n });\n }, delay);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(function subDestroy() {\n clearTimeout(timer);\n });\n }\n }\n /**\n * Called upon successful reconnect.\n *\n * @private\n */\n onreconnect() {\n const attempt = this.backoff.attempts;\n this._reconnecting = false;\n this.backoff.reset();\n this.emitReserved(\"reconnect\", attempt);\n }\n}\n","import { url } from \"./url.js\";\nimport { Manager } from \"./manager.js\";\nimport { Socket } from \"./socket.js\";\n/**\n * Managers cache.\n */\nconst cache = {};\nfunction lookup(uri, opts) {\n if (typeof uri === \"object\") {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n const parsed = url(uri, opts.path || \"/socket.io\");\n const source = parsed.source;\n const id = parsed.id;\n const path = parsed.path;\n const sameNamespace = cache[id] && path in cache[id][\"nsps\"];\n const newConnection = opts.forceNew ||\n opts[\"force new connection\"] ||\n false === opts.multiplex ||\n sameNamespace;\n let io;\n if (newConnection) {\n io = new Manager(source, opts);\n }\n else {\n if (!cache[id]) {\n cache[id] = new Manager(source, opts);\n }\n io = cache[id];\n }\n if (parsed.query && !opts.query) {\n opts.query = parsed.queryKey;\n }\n return io.socket(parsed.path, opts);\n}\n// so that \"lookup\" can be used both as a function (e.g. `io(...)`) and as a\n// namespace (e.g. `io.connect(...)`), for backward compatibility\nObject.assign(lookup, {\n Manager,\n Socket,\n io: lookup,\n connect: lookup,\n});\n/**\n * Protocol version.\n *\n * @public\n */\nexport { protocol } from \"socket.io-parser\";\n/**\n * Expose constructors for standalone build.\n *\n * @public\n */\nexport { Manager, Socket, lookup as io, lookup as connect, lookup as default, };\n","\n\n\n
\n\n\t\n\t\n\n\t\n\t\n\n\t\n\t\n\n\t\n\t
\n\t\t
\n\t\t\t{#each msgs as msg (msg.id)}\n\t\t\t\t{@html msg.content}\n\t\t\t{/each}\n\t\t
\n\t
\n\n\t\n\t
\n\t\t
\n\t
\n\n\t\n\t\n\n\n\n\n\n\n","\n\n\n
\n\n\t\n\t\n\n\t\n\t\n\n\t\n\t\n\n\t\n\t
\n\t\t\n\t\t

join room :

\n\t\t
\n\t\t\t
\n\t\t\t\t

/ there are no public rooms yet /

\n\t\t\t
\n\t\t\t\n\t\t\t\n\t\t
\n\t
\n\n
\n\n\n\n","\n\n\n
\n\n\t\n\t\n\n\t\n\t\n\n\t\n\t\n\n\t\n\t
\n\t\t

blocked users :

\n\t\t
\n\t\t\t
\n\t\t\t\t

/ you have blocked no one /

\n\t\t\t
\n\t\t\t\n\t\t\t\n\t\t
\n\t
\n\n
\n\n\n\n\n","\n\n\n
\n\n\t\n\t\n\n\t\n\t\n\n\t\n\t\n\n\t\n\t
\n\t\t\n\t\t

room users :

\n\t\t
\n\t\t\t
\n\t\t\t\t

/ there are no public rooms yet /

\n\t\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
\n\t
\n\n\n
\n\n\n\n\n","\n\n\n
\n\n\t\n\t\n\n\t\n\t\n\n\t\n\t\n\n\t\n\t
\n\t\t

this room is protected

\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
\n\t
\n\n\n
\n\n\n\n\n","\n\n\n
\n\n\t\n\t\n\n\t\n\t\n\n\t\n\t\n\n\t\n\t
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t

confirm password :

\n\t\t\t\t\n\t\t\t
\n\t\t\t\n\t\t
\n\t
\n\n\n
\n\n\n\n\n","\n\n\n
\n\n\t\n\t\n\n\t\n\t\n\n\t\n\t\n\n\t\n\n\t\n\t
\n\t\t

mute this user for a time :

\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t\t\n\t\t
\n\t
\n\n\n
\n\n\n\n\n","\n\n\n
\n\n\t\n\t\n\n\t\n\t\n\n\t\n\t\n\n\t\n\t{#if back === \"room_set\"}\n\t\t\n\t{/if}\n\n\t\n\t
\n\t\t

user options :

\n\t\t\n\t\t\n\t\t\n\n\t\t{#if back === \"room_set\"}\n\t\t\t\n\t\t\t\n\t\t{/if}\n\n\t
\n\n
\n\n\n\n\n","\n\n\n\n\n\t{#if layout === \"home\"}\n\t\t\n\n\t{:else if layout === \"close\"}\n\t\t\n\n\t{:else if layout === \"room\"}\n\t\t\n\n\t{:else if layout === \"new\"}\n\t\t\n\n\t{:else if layout === \"settings\"}\n\t\t\n\n\t{:else if layout === \"room_set\"}\n\t\t\n\n\t{:else if layout === \"protected\"}\n\t\t\n\n\t{:else if layout === \"create\"}\n\t\t\n\n\t{:else if layout === \"mute\"}\n\t\t\n\n\t{:else if layout === \"user\"}\n\t\t\n\n\t{/if}\n\n\n\n\n\n\n\n\n","\n\n\n\n\n\n\n","\n\n\n\n\n
\n \n {#if user !== undefined}\n \n {:else}\n \n

Sorry

\n
Failed to load current
\n {/if}\n
\n\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n\n\n\n\n\n","
\n \n
\n\n","\n\n\n\n\n\n\n\n","\n\n\n
\n

Look! You can change stuff

\n
\n \n
\n
\n
New Username
\n \n \n \n\t\t
{success.username}
\n
{errors.username}
\n
\n
\n
Set Two Factor Authentication
\n \n
{errors.checkbox}
\n
\n \n
\n
\n\n \n \n {#if avatar !== undefined}\n \"your\n {/if}\n
\n \n \n
\n
Pick a new Avatar
\n \n
{errors.avatar}
\n
\n \n
\n
\n
\n\n
\n\n\n\n\n","\n\n\n\n{#if user !== undefined}\n \n \n{:else}\n

Sorry

\n
Failed to load user {aUsername}
\n{/if}\n\n\n","\n\n\n\n
\n\n
\n

All Users

\n {#if allUsers === undefined}\n
Failed to load all users
\n {:else}\n \n \n\n \n \n {#each allUsers as aUser }\n \n
viewAUser(aUser)}>{aUser.username}
\n \n
{aUser.status}
\n
\n {/each}\n {/if}\n\n
\n\n\n
\n\n

Main Display

\n\n \n \n \n \n {#if userBeingViewed}\n
{userBeingViewed.username}
\n \n \n\n \n \n \n {/if}\n\n \n\n \n\n\n\n \n\n \n\n\n \n \n\n \n\n \n \n\n \n\n
\n
\n\n\n","\nimport NotFound from \"../pages/NotFound.svelte\";\nimport ProfileDisplay from '../pages/profile/ProfileDisplay.svelte';\nimport ProfileSettings from '../pages/profile/ProfileSettings.svelte';\nimport ProfileFriends from '../pages/profile/ProfileFriends.svelte';\nimport { wrap } from 'svelte-spa-router/wrap'\n\n// establishing the prefix here very clearly so we can have a coherent repeatable structure\nexport const prefix = '/profile';\n\nexport const profileRoutes = {\n '/': ProfileDisplay,\n '/settings': ProfileSettings,\n '/friends': ProfileFriends,\n '*': NotFound\n};\n\n// I think the conditions of access like are you authenticated work best when they are on the parent routes not the nested routes cuz i don't want my header showing up\n\n// export const profileRoutes = {\n// '/': wrap({\n// component: ProfileDisplay,\n// conditions: [\n// (detail) => {\n// const { fortyTwo, tfa } = get(loginStatus);\n// console.log(fortyTwo);\n// console.log(tfa);\n// console.log('in Profile Display');\n// // return true;\n// return (fortyTwo && tfa);\n// }\n// ]\n// }),\n// '/settings': wrap({\n// component: ProfileSettings,\n// conditions: [\n// (detail) => {\n// const { fortyTwo, tfa } = get(loginStatus);\n// // console.log(fortyTwo);\n// // console.log(tfa);\n// // return true;\n// return (fortyTwo && tfa);\n// }\n// ]\n// }),\n// '*': NotFound\n// };\n\n// what if i did /#/profile/:id for like not the user? and then based on that did a fetch?","\n\n\n
\n\n\n\n\n
\n \n
\n\n\n\n\n\n","\n\n\n\n\n","\n\n\n
\n

Potato Pong

\n \n

\n
Welcome to
\n
Potato Pong
\n

\n
\n\n\n\n\n\n\n\n","\n\n\n
\n

2FA Sign In

\n

use google authenticator

\n {#await fetchQrCodeImg}\n

Please Wait...

\n {:then data}\n \n \"A\n
\n \n \n
\n {#if wrongCode}\n \n
\n {wrongCode}\n
\n {/if}\n {:catch}\n

Unable to get QrCodeImg

\n {/await}\n
\n\n\n","\n\n
\n

You're not supposed to be here...

\n \n
\n\n","\n\n
\n

You made it to Test

\n \n
{user}
\n
\n\n","import NotFound from \"../pages/NotFound.svelte\";\nimport ProfilePage from \"../pages/profile/ProfilePage.svelte\";\nimport SplashPage from \"../pages/SplashPage.svelte\";\nimport TwoFactorAuthentication from '../pages/TwoFactorAuthentication.svelte';\nimport UnauthorizedAccessPage from '../pages/UnauthorizedAccessPage.svelte';\nimport { wrap } from 'svelte-spa-router/wrap'\nimport { get } from 'svelte/store';\nimport TestPage from '../pages/TmpTestPage.svelte';\n\n\n\n// \"/article/:title\": Article, // this is how you would do parameters!\n// \"/\": LoginPage,\n\n// TMP not using this cuz need to work out how to authentical both 42 and 2FA from the backend\n\n// export const primaryRoutes = {\n// '/': SplashPage,\n// // '/2fa': TwoFactorAuthentication,\n// '/2fa': wrap({\n// component: TwoFactorAuthentication,\n// conditions: [\n// (detail) => {\n// // let loggedIn;\n// // loginStatus.subscribe(value => {\n// // loggedIn = value;\n// // });\n\n// const { fortyTwo, tfa } = get(loginStatus);\n\n// console.log('condition in /2fa');\n// // return (loginStatus.fortyTwo && loginStatus.tfa);\n// // console.log($loginStatus.fortyTwo)\n// console.log(fortyTwo);\n// console.log(tfa);\n// return true;\n// }\n// ]\n// }),\n// '/profile': wrap({\n// component: ProfilePage,\n// conditions: [\n// (detail) => {\n// const { fortyTwo, tfa } = get(loginStatus);\n// // console.log(fortyTwo);\n// // console.log(tfa);\n// // return true;\n// return (fortyTwo && tfa);\n// }\n// ]\n// }),\n// '/profile/*': wrap({\n// component: ProfilePage,\n// conditions: [\n// (detail) => {\n// const { fortyTwo, tfa } = get(loginStatus);\n// // console.log(fortyTwo);\n// // console.log(tfa);\n// // return true;\n// return (fortyTwo && tfa);\n// }\n// ]\n// }),\n// '/profile': wrap({\n// // Use a dynamically-loaded component for this\n// asyncComponent: () => import('./ProfilePage.svelte'),\n// // Adding one pre-condition that's an async function\n// conditions: [\n// async (detail) => {\n// // Make a network request, which are async operations\n// const response = await fetch('http://transcendance:8080/api/v2/user')\n// const data = await response.json()\n// // Return true to continue loading the component, or false otherwise\n// if (data.isAdmin) {\n// return true\n// }\n// else {\n// return false\n// }\n// }\n// ]\n// }),\n// '/unauthorized-access': UnauthorizedAccessPage,\n// '*': NotFound\n// };\n\nexport const primaryRoutes = {\n '/': SplashPage,\n '/2fa': TwoFactorAuthentication,\n // '/test': wrap({\n // component: TestPage,\n // conditions: [\n // (detail) => {\n // const user = get(userStore); // seems like get(store) is not an option\n // // // const user = userStore;\n // // // console.log(fortyTwo);\n // // // console.log(tfa);\n // // console.log('in /test what is in user')\n // // console.log(user)\n\n // // you moron $userStore is a Svelte Abreviation, this is .JS, duh\n // // let user = $userStore;\n // // let user;\n // // const unsub = userStore.subscribe(value => {\n // // console.log(value);\n // // user = value;\n // // });\n // console.log('in /test what is in userStore directly')\n // console.log(user)\n\n // // return true;\n // // obvi this doesn't work cuz skips to true after no user...\n // // you gotta make the condition the true and the everything else false\n // // if (user && user.statusCode && user.statusCode === 403)\n // // if (user && user.username) {\n // if (user !== null) {\n // unsub();\n // return true;\n // } else {\n // unsub();\n // return false;\n // }\n // }\n // ]\n // }),\n '/test': wrap({\n component: TestPage,\n conditions: [\n async(detail) => {\n // THIS SHIT TOTALLY WORKS\n // Yea in the end this might be the best thing, like also from a Security point of view\n const user = await fetch('http://transcendance:8080/api/v2/user')\n .then((resp) => resp.json())\n\n console.log('in /test what is in user')\n console.log(user)\n\n if (user && user.username)\n return true;\n else\n return false;\n }\n ],\n // props: {\n // user: user\n // }\n }),\n '/profile': wrap({\n component: ProfilePage,\n conditions: [\n async(detail) => {\n const user = await fetch('http://transcendance:8080/api/v2/user')\n .then((resp) => resp.json())\n\n console.log('in /profile what is in user')\n console.log(user)\n\n if (user && user.username)\n return true;\n else\n return false;\n }\n ]\n }),\n '/profile/*': wrap({\n component: ProfilePage,\n conditions: [\n async(detail) => {\n const user = await fetch('http://transcendance:8080/api/v2/user')\n .then((resp) => resp.json())\n\n console.log('in /profile/* what is in user')\n console.log(user)\n\n if (user && user.username)\n return true;\n else\n return false;\n }\n ]\n }),\n // '/game': wrap({\n // component: ProfilePage,\n // conditions: [\n // async(detail) => {\n // const user = await fetch('http://transcendance:8080/api/v2/user')\n // .then((resp) => resp.json())\n\n // console.log('in /test what is in user')\n // console.log(user)\n\n // if (user && user.username)\n // return true;\n // else\n // return false;\n // }\n // ]\n // }),\n // '/spectate': wrap({\n // component: ProfilePage,\n // conditions: [\n // async(detail) => {\n // const user = await fetch('http://transcendance:8080/api/v2/user')\n // .then((resp) => resp.json())\n\n // console.log('in /test what is in user')\n // console.log(user)\n\n // if (user && user.username)\n // return true;\n // else\n // return false;\n // }\n // ]\n // }),\n // '/chat': wrap({\n // component: ProfilePage,\n // conditions: [\n // async(detail) => {\n // const user = await fetch('http://transcendance:8080/api/v2/user')\n // .then((resp) => resp.json())\n\n // console.log('in /test what is in user')\n // console.log(user)\n\n // if (user && user.username)\n // return true;\n // else\n // return false;\n // }\n // ]\n // }),\n '/unauthorized-access': UnauthorizedAccessPage,\n '*': NotFound\n};\n\n// export const primaryRoutes = {\n// \"/\": SplashPage,\n// \"/profile\": ProfilePage,\n// \"/game\": GamePage,\n// \"/chat\": ChatPage,\n// \"*\": NotFound\n// };\n\n\n// i might need to add /profile/* and such to make the nested routers work\n\n// ok maybe these need to be in their own files?\n\n\n\n// export const gameRoutes = {\n// \"/\": GamePage,\n// \"*\": NotFound\n// };\n\n// export const chatRoutes = {\n// \"/\": ChatPage,\n// \"*\": NotFound\n// };\n","\n\n\n\n\n\n\n\n\n","import App from './App.svelte';\n\nconst app = new App({\n\ttarget: document.body,\n\tprops: {\n\t\t// name: 'world'\n\t}\n});\n\nexport default app;"],"names":["empty","wrap","parse","_wrap","location","create_if_block","create_if_block_1","withNativeBlob","withNativeArrayBuffer","isView","lookup","decode","protocol","globalThis","encode","XMLHttpRequest","Socket","Engine","io","TestPage"],"mappings":"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OAAA,EAAA,OAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,OAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,OAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,OAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,OAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;;OAI/B,UAqDO,CAAA,IAAA,EAAA,MAAA,CAAA,CAAA;OApDN,UAAa,CAAA,MAAA,EAAA,EAAA,CAAA,CAAA;;OACb,UAkDQ,CAAA,MAAA,EAAA,OAAA,CAAA,CAAA;OAjDP,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B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"} \ No newline at end of file +{"version":3,"file":"bundle.js","sources":["../../node_modules/svelte/internal/index.mjs","../../node_modules/svelte-spa-router/wrap.js","../../node_modules/svelte/store/index.mjs","../../node_modules/regexparam/dist/index.mjs","../../node_modules/svelte-spa-router/Router.svelte","../../src/pages/NotFound.svelte","../../node_modules/svelte-spa-router/active.js","../../src/pieces/Header.svelte","../../src/pieces/GenerateUserDisplay.svelte","../../src/pieces/chat/tmp_debug.svelte","../../src/pieces/chat/Chat_box_css.svelte","../../src/pieces/chat/Chat_button.svelte","../../src/pieces/chat/Layout_close.svelte","../../src/pieces/chat/Layout_home.svelte","../../src/pieces/chat/Chat_msg.svelte","../../node_modules/engine.io-parser/build/esm/commons.js","../../node_modules/engine.io-parser/build/esm/encodePacket.browser.js","../../node_modules/engine.io-parser/build/esm/contrib/base64-arraybuffer.js","../../node_modules/engine.io-parser/build/esm/decodePacket.browser.js","../../node_modules/engine.io-parser/build/esm/index.js","../../node_modules/@socket.io/component-emitter/index.mjs","../../node_modules/engine.io-client/build/esm/globalThis.browser.js","../../node_modules/engine.io-client/build/esm/util.js","../../node_modules/engine.io-client/build/esm/transport.js","../../node_modules/engine.io-client/build/esm/contrib/yeast.js","../../node_modules/engine.io-client/build/esm/contrib/parseqs.js","../../node_modules/engine.io-client/build/esm/contrib/has-cors.js","../../node_modules/engine.io-client/build/esm/transports/xmlhttprequest.browser.js","../../node_modules/engine.io-client/build/esm/transports/polling.js","../../node_modules/engine.io-client/build/esm/transports/websocket-constructor.browser.js","../../node_modules/engine.io-client/build/esm/transports/websocket.js","../../node_modules/engine.io-client/build/esm/transports/index.js","../../node_modules/engine.io-client/build/esm/contrib/parseuri.js","../../node_modules/engine.io-client/build/esm/socket.js","../../node_modules/socket.io-client/build/esm/url.js","../../node_modules/socket.io-parser/build/esm/is-binary.js","../../node_modules/socket.io-parser/build/esm/binary.js","../../node_modules/socket.io-parser/build/esm/index.js","../../node_modules/socket.io-client/build/esm/on.js","../../node_modules/socket.io-client/build/esm/socket.js","../../node_modules/socket.io-client/build/esm/contrib/backo2.js","../../node_modules/socket.io-client/build/esm/manager.js","../../node_modules/socket.io-client/build/esm/index.js","../../src/pieces/chat/Layout_room.svelte","../../src/pieces/chat/Layout_new.svelte","../../src/pieces/chat/Layout_settings.svelte","../../src/pieces/chat/Layout_room_set.svelte","../../src/pieces/chat/Layout_protected.svelte","../../src/pieces/chat/Layout_create.svelte","../../src/pieces/chat/Layout_mute.svelte","../../src/pieces/chat/Layout_user.svelte","../../src/pieces/chat/Chat_layouts.svelte","../../src/pieces/chat/Chat.svelte","../../src/pages/profile/ProfileDisplay.svelte","../../src/pieces/Card.svelte","../../src/pieces/Button.svelte","../../src/pages/profile/ProfileSettings.svelte","../../src/pieces/DisplayAUser.svelte","../../src/pages/profile/ProfileFriends.svelte","../../src/routes/profileRoutes.js","../../src/pages/profile/ProfilePage.svelte","../../src/pieces/Canvas.svelte","../../src/pages/SplashPage.svelte","../../src/pages/TwoFactorAuthentication.svelte","../../src/pages/UnauthorizedAccessPage.svelte","../../node_modules/svelte/easing/index.mjs","../../node_modules/svelte/transition/index.mjs","../../src/pages/game/shared_js/constants.ts","../../src/pages/game/client/constants.ts","../../src/pages/game/shared_js/enums.ts","../../src/pages/game/shared_js/class/Event.ts","../../src/pages/game/client/message.ts","../../src/pages/game/client/audio.ts","../../src/pages/game/shared_js/utils.ts","../../src/pages/game/client/utils.ts","../../src/pages/game/shared_js/class/Vector.ts","../../src/pages/game/client/ws.ts","../../src/pages/game/client/global.ts","../../src/pages/game/client/class/InputHistory.ts","../../src/pages/game/client/handleInput.ts","../../src/pages/game/shared_js/wallsMovement.ts","../../src/pages/game/client/gameLoop.ts","../../src/pages/game/client/draw.ts","../../src/pages/game/client/class/InitOptions.ts","../../src/pages/game/client/class/GameArea.ts","../../src/pages/game/client/class/Text.ts","../../src/pages/game/shared_js/class/Rectangle.ts","../../src/pages/game/client/class/RectangleClient.ts","../../src/pages/game/shared_js/class/GameComponents.ts","../../src/pages/game/client/class/GameComponentsClient.ts","../../src/pages/game/client/init.ts","../../src/pages/game/client/pong.ts","../../src/pages/game/Game.svelte","../../src/pages/game/Ranking.svelte","../../src/pieces/MatchListElem.svelte","../../src/pages/SpectatorMatchList.svelte","../../src/routes/primaryRoutes.js","../../src/App.svelte","../../src/main.ts"],"sourcesContent":["function noop() { }\nconst identity = x => x;\nfunction assign(tar, src) {\n // @ts-ignore\n for (const k in src)\n tar[k] = src[k];\n return tar;\n}\nfunction is_promise(value) {\n return value && typeof value === 'object' && typeof value.then === 'function';\n}\nfunction add_location(element, file, line, column, char) {\n element.__svelte_meta = {\n loc: { file, line, column, char }\n };\n}\nfunction run(fn) {\n return fn();\n}\nfunction blank_object() {\n return Object.create(null);\n}\nfunction run_all(fns) {\n fns.forEach(run);\n}\nfunction is_function(thing) {\n return typeof thing === 'function';\n}\nfunction safe_not_equal(a, b) {\n return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');\n}\nlet src_url_equal_anchor;\nfunction src_url_equal(element_src, url) {\n if (!src_url_equal_anchor) {\n src_url_equal_anchor = document.createElement('a');\n }\n src_url_equal_anchor.href = url;\n return element_src === src_url_equal_anchor.href;\n}\nfunction not_equal(a, b) {\n return a != a ? b == b : a !== b;\n}\nfunction is_empty(obj) {\n return Object.keys(obj).length === 0;\n}\nfunction validate_store(store, name) {\n if (store != null && typeof store.subscribe !== 'function') {\n throw new Error(`'${name}' is not a store with a 'subscribe' method`);\n }\n}\nfunction subscribe(store, ...callbacks) {\n if (store == null) {\n return noop;\n }\n const unsub = store.subscribe(...callbacks);\n return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;\n}\nfunction get_store_value(store) {\n let value;\n subscribe(store, _ => value = _)();\n return value;\n}\nfunction component_subscribe(component, store, callback) {\n component.$$.on_destroy.push(subscribe(store, callback));\n}\nfunction create_slot(definition, ctx, $$scope, fn) {\n if (definition) {\n const slot_ctx = get_slot_context(definition, ctx, $$scope, fn);\n return definition[0](slot_ctx);\n }\n}\nfunction get_slot_context(definition, ctx, $$scope, fn) {\n return definition[1] && fn\n ? assign($$scope.ctx.slice(), definition[1](fn(ctx)))\n : $$scope.ctx;\n}\nfunction get_slot_changes(definition, $$scope, dirty, fn) {\n if (definition[2] && fn) {\n const lets = definition[2](fn(dirty));\n if ($$scope.dirty === undefined) {\n return lets;\n }\n if (typeof lets === 'object') {\n const merged = [];\n const len = Math.max($$scope.dirty.length, lets.length);\n for (let i = 0; i < len; i += 1) {\n merged[i] = $$scope.dirty[i] | lets[i];\n }\n return merged;\n }\n return $$scope.dirty | lets;\n }\n return $$scope.dirty;\n}\nfunction update_slot_base(slot, slot_definition, ctx, $$scope, slot_changes, get_slot_context_fn) {\n if (slot_changes) {\n const slot_context = get_slot_context(slot_definition, ctx, $$scope, get_slot_context_fn);\n slot.p(slot_context, slot_changes);\n }\n}\nfunction update_slot(slot, slot_definition, ctx, $$scope, dirty, get_slot_changes_fn, get_slot_context_fn) {\n const slot_changes = get_slot_changes(slot_definition, $$scope, dirty, get_slot_changes_fn);\n update_slot_base(slot, slot_definition, ctx, $$scope, slot_changes, get_slot_context_fn);\n}\nfunction get_all_dirty_from_scope($$scope) {\n if ($$scope.ctx.length > 32) {\n const dirty = [];\n const length = $$scope.ctx.length / 32;\n for (let i = 0; i < length; i++) {\n dirty[i] = -1;\n }\n return dirty;\n }\n return -1;\n}\nfunction exclude_internal_props(props) {\n const result = {};\n for (const k in props)\n if (k[0] !== '$')\n result[k] = props[k];\n return result;\n}\nfunction compute_rest_props(props, keys) {\n const rest = {};\n keys = new Set(keys);\n for (const k in props)\n if (!keys.has(k) && k[0] !== '$')\n rest[k] = props[k];\n return rest;\n}\nfunction compute_slots(slots) {\n const result = {};\n for (const key in slots) {\n result[key] = true;\n }\n return result;\n}\nfunction once(fn) {\n let ran = false;\n return function (...args) {\n if (ran)\n return;\n ran = true;\n fn.call(this, ...args);\n };\n}\nfunction null_to_empty(value) {\n return value == null ? '' : value;\n}\nfunction set_store_value(store, ret, value) {\n store.set(value);\n return ret;\n}\nconst has_prop = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);\nfunction action_destroyer(action_result) {\n return action_result && is_function(action_result.destroy) ? action_result.destroy : noop;\n}\n\nconst is_client = typeof window !== 'undefined';\nlet now = is_client\n ? () => window.performance.now()\n : () => Date.now();\nlet raf = is_client ? cb => requestAnimationFrame(cb) : noop;\n// used internally for testing\nfunction set_now(fn) {\n now = fn;\n}\nfunction set_raf(fn) {\n raf = fn;\n}\n\nconst tasks = new Set();\nfunction run_tasks(now) {\n tasks.forEach(task => {\n if (!task.c(now)) {\n tasks.delete(task);\n task.f();\n }\n });\n if (tasks.size !== 0)\n raf(run_tasks);\n}\n/**\n * For testing purposes only!\n */\nfunction clear_loops() {\n tasks.clear();\n}\n/**\n * Creates a new task that runs on each raf frame\n * until it returns a falsy value or is aborted\n */\nfunction loop(callback) {\n let task;\n if (tasks.size === 0)\n raf(run_tasks);\n return {\n promise: new Promise(fulfill => {\n tasks.add(task = { c: callback, f: fulfill });\n }),\n abort() {\n tasks.delete(task);\n }\n };\n}\n\n// Track which nodes are claimed during hydration. Unclaimed nodes can then be removed from the DOM\n// at the end of hydration without touching the remaining nodes.\nlet is_hydrating = false;\nfunction start_hydrating() {\n is_hydrating = true;\n}\nfunction end_hydrating() {\n is_hydrating = false;\n}\nfunction upper_bound(low, high, key, value) {\n // Return first index of value larger than input value in the range [low, high)\n while (low < high) {\n const mid = low + ((high - low) >> 1);\n if (key(mid) <= value) {\n low = mid + 1;\n }\n else {\n high = mid;\n }\n }\n return low;\n}\nfunction init_hydrate(target) {\n if (target.hydrate_init)\n return;\n target.hydrate_init = true;\n // We know that all children have claim_order values since the unclaimed have been detached if target is not \n let children = target.childNodes;\n // If target is , there may be children without claim_order\n if (target.nodeName === 'HEAD') {\n const myChildren = [];\n for (let i = 0; i < children.length; i++) {\n const node = children[i];\n if (node.claim_order !== undefined) {\n myChildren.push(node);\n }\n }\n children = myChildren;\n }\n /*\n * Reorder claimed children optimally.\n * We can reorder claimed children optimally by finding the longest subsequence of\n * nodes that are already claimed in order and only moving the rest. The longest\n * subsequence of nodes that are claimed in order can be found by\n * computing the longest increasing subsequence of .claim_order values.\n *\n * This algorithm is optimal in generating the least amount of reorder operations\n * possible.\n *\n * Proof:\n * We know that, given a set of reordering operations, the nodes that do not move\n * always form an increasing subsequence, since they do not move among each other\n * meaning that they must be already ordered among each other. Thus, the maximal\n * set of nodes that do not move form a longest increasing subsequence.\n */\n // Compute longest increasing subsequence\n // m: subsequence length j => index k of smallest value that ends an increasing subsequence of length j\n const m = new Int32Array(children.length + 1);\n // Predecessor indices + 1\n const p = new Int32Array(children.length);\n m[0] = -1;\n let longest = 0;\n for (let i = 0; i < children.length; i++) {\n const current = children[i].claim_order;\n // Find the largest subsequence length such that it ends in a value less than our current value\n // upper_bound returns first greater value, so we subtract one\n // with fast path for when we are on the current longest subsequence\n const seqLen = ((longest > 0 && children[m[longest]].claim_order <= current) ? longest + 1 : upper_bound(1, longest, idx => children[m[idx]].claim_order, current)) - 1;\n p[i] = m[seqLen] + 1;\n const newLen = seqLen + 1;\n // We can guarantee that current is the smallest value. Otherwise, we would have generated a longer sequence.\n m[newLen] = i;\n longest = Math.max(newLen, longest);\n }\n // The longest increasing subsequence of nodes (initially reversed)\n const lis = [];\n // The rest of the nodes, nodes that will be moved\n const toMove = [];\n let last = children.length - 1;\n for (let cur = m[longest] + 1; cur != 0; cur = p[cur - 1]) {\n lis.push(children[cur - 1]);\n for (; last >= cur; last--) {\n toMove.push(children[last]);\n }\n last--;\n }\n for (; last >= 0; last--) {\n toMove.push(children[last]);\n }\n lis.reverse();\n // We sort the nodes being moved to guarantee that their insertion order matches the claim order\n toMove.sort((a, b) => a.claim_order - b.claim_order);\n // Finally, we move the nodes\n for (let i = 0, j = 0; i < toMove.length; i++) {\n while (j < lis.length && toMove[i].claim_order >= lis[j].claim_order) {\n j++;\n }\n const anchor = j < lis.length ? lis[j] : null;\n target.insertBefore(toMove[i], anchor);\n }\n}\nfunction append(target, node) {\n target.appendChild(node);\n}\nfunction append_styles(target, style_sheet_id, styles) {\n const append_styles_to = get_root_for_style(target);\n if (!append_styles_to.getElementById(style_sheet_id)) {\n const style = element('style');\n style.id = style_sheet_id;\n style.textContent = styles;\n append_stylesheet(append_styles_to, style);\n }\n}\nfunction get_root_for_style(node) {\n if (!node)\n return document;\n const root = node.getRootNode ? node.getRootNode() : node.ownerDocument;\n if (root && root.host) {\n return root;\n }\n return node.ownerDocument;\n}\nfunction append_empty_stylesheet(node) {\n const style_element = element('style');\n append_stylesheet(get_root_for_style(node), style_element);\n return style_element.sheet;\n}\nfunction append_stylesheet(node, style) {\n append(node.head || node, style);\n return style.sheet;\n}\nfunction append_hydration(target, node) {\n if (is_hydrating) {\n init_hydrate(target);\n if ((target.actual_end_child === undefined) || ((target.actual_end_child !== null) && (target.actual_end_child.parentNode !== target))) {\n target.actual_end_child = target.firstChild;\n }\n // Skip nodes of undefined ordering\n while ((target.actual_end_child !== null) && (target.actual_end_child.claim_order === undefined)) {\n target.actual_end_child = target.actual_end_child.nextSibling;\n }\n if (node !== target.actual_end_child) {\n // We only insert if the ordering of this node should be modified or the parent node is not target\n if (node.claim_order !== undefined || node.parentNode !== target) {\n target.insertBefore(node, target.actual_end_child);\n }\n }\n else {\n target.actual_end_child = node.nextSibling;\n }\n }\n else if (node.parentNode !== target || node.nextSibling !== null) {\n target.appendChild(node);\n }\n}\nfunction insert(target, node, anchor) {\n target.insertBefore(node, anchor || null);\n}\nfunction insert_hydration(target, node, anchor) {\n if (is_hydrating && !anchor) {\n append_hydration(target, node);\n }\n else if (node.parentNode !== target || node.nextSibling != anchor) {\n target.insertBefore(node, anchor || null);\n }\n}\nfunction detach(node) {\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n}\nfunction destroy_each(iterations, detaching) {\n for (let i = 0; i < iterations.length; i += 1) {\n if (iterations[i])\n iterations[i].d(detaching);\n }\n}\nfunction element(name) {\n return document.createElement(name);\n}\nfunction element_is(name, is) {\n return document.createElement(name, { is });\n}\nfunction object_without_properties(obj, exclude) {\n const target = {};\n for (const k in obj) {\n if (has_prop(obj, k)\n // @ts-ignore\n && exclude.indexOf(k) === -1) {\n // @ts-ignore\n target[k] = obj[k];\n }\n }\n return target;\n}\nfunction svg_element(name) {\n return document.createElementNS('http://www.w3.org/2000/svg', name);\n}\nfunction text(data) {\n return document.createTextNode(data);\n}\nfunction space() {\n return text(' ');\n}\nfunction empty() {\n return text('');\n}\nfunction listen(node, event, handler, options) {\n node.addEventListener(event, handler, options);\n return () => node.removeEventListener(event, handler, options);\n}\nfunction prevent_default(fn) {\n return function (event) {\n event.preventDefault();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction stop_propagation(fn) {\n return function (event) {\n event.stopPropagation();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction self(fn) {\n return function (event) {\n // @ts-ignore\n if (event.target === this)\n fn.call(this, event);\n };\n}\nfunction trusted(fn) {\n return function (event) {\n // @ts-ignore\n if (event.isTrusted)\n fn.call(this, event);\n };\n}\nfunction attr(node, attribute, value) {\n if (value == null)\n node.removeAttribute(attribute);\n else if (node.getAttribute(attribute) !== value)\n node.setAttribute(attribute, value);\n}\nfunction set_attributes(node, attributes) {\n // @ts-ignore\n const descriptors = Object.getOwnPropertyDescriptors(node.__proto__);\n for (const key in attributes) {\n if (attributes[key] == null) {\n node.removeAttribute(key);\n }\n else if (key === 'style') {\n node.style.cssText = attributes[key];\n }\n else if (key === '__value') {\n node.value = node[key] = attributes[key];\n }\n else if (descriptors[key] && descriptors[key].set) {\n node[key] = attributes[key];\n }\n else {\n attr(node, key, attributes[key]);\n }\n }\n}\nfunction set_svg_attributes(node, attributes) {\n for (const key in attributes) {\n attr(node, key, attributes[key]);\n }\n}\nfunction set_custom_element_data_map(node, data_map) {\n Object.keys(data_map).forEach((key) => {\n set_custom_element_data(node, key, data_map[key]);\n });\n}\nfunction set_custom_element_data(node, prop, value) {\n if (prop in node) {\n node[prop] = typeof node[prop] === 'boolean' && value === '' ? true : value;\n }\n else {\n attr(node, prop, value);\n }\n}\nfunction xlink_attr(node, attribute, value) {\n node.setAttributeNS('http://www.w3.org/1999/xlink', attribute, value);\n}\nfunction get_binding_group_value(group, __value, checked) {\n const value = new Set();\n for (let i = 0; i < group.length; i += 1) {\n if (group[i].checked)\n value.add(group[i].__value);\n }\n if (!checked) {\n value.delete(__value);\n }\n return Array.from(value);\n}\nfunction to_number(value) {\n return value === '' ? null : +value;\n}\nfunction time_ranges_to_array(ranges) {\n const array = [];\n for (let i = 0; i < ranges.length; i += 1) {\n array.push({ start: ranges.start(i), end: ranges.end(i) });\n }\n return array;\n}\nfunction children(element) {\n return Array.from(element.childNodes);\n}\nfunction init_claim_info(nodes) {\n if (nodes.claim_info === undefined) {\n nodes.claim_info = { last_index: 0, total_claimed: 0 };\n }\n}\nfunction claim_node(nodes, predicate, processNode, createNode, dontUpdateLastIndex = false) {\n // Try to find nodes in an order such that we lengthen the longest increasing subsequence\n init_claim_info(nodes);\n const resultNode = (() => {\n // We first try to find an element after the previous one\n for (let i = nodes.claim_info.last_index; i < nodes.length; i++) {\n const node = nodes[i];\n if (predicate(node)) {\n const replacement = processNode(node);\n if (replacement === undefined) {\n nodes.splice(i, 1);\n }\n else {\n nodes[i] = replacement;\n }\n if (!dontUpdateLastIndex) {\n nodes.claim_info.last_index = i;\n }\n return node;\n }\n }\n // Otherwise, we try to find one before\n // We iterate in reverse so that we don't go too far back\n for (let i = nodes.claim_info.last_index - 1; i >= 0; i--) {\n const node = nodes[i];\n if (predicate(node)) {\n const replacement = processNode(node);\n if (replacement === undefined) {\n nodes.splice(i, 1);\n }\n else {\n nodes[i] = replacement;\n }\n if (!dontUpdateLastIndex) {\n nodes.claim_info.last_index = i;\n }\n else if (replacement === undefined) {\n // Since we spliced before the last_index, we decrease it\n nodes.claim_info.last_index--;\n }\n return node;\n }\n }\n // If we can't find any matching node, we create a new one\n return createNode();\n })();\n resultNode.claim_order = nodes.claim_info.total_claimed;\n nodes.claim_info.total_claimed += 1;\n return resultNode;\n}\nfunction claim_element_base(nodes, name, attributes, create_element) {\n return claim_node(nodes, (node) => node.nodeName === name, (node) => {\n const remove = [];\n for (let j = 0; j < node.attributes.length; j++) {\n const attribute = node.attributes[j];\n if (!attributes[attribute.name]) {\n remove.push(attribute.name);\n }\n }\n remove.forEach(v => node.removeAttribute(v));\n return undefined;\n }, () => create_element(name));\n}\nfunction claim_element(nodes, name, attributes) {\n return claim_element_base(nodes, name, attributes, element);\n}\nfunction claim_svg_element(nodes, name, attributes) {\n return claim_element_base(nodes, name, attributes, svg_element);\n}\nfunction claim_text(nodes, data) {\n return claim_node(nodes, (node) => node.nodeType === 3, (node) => {\n const dataStr = '' + data;\n if (node.data.startsWith(dataStr)) {\n if (node.data.length !== dataStr.length) {\n return node.splitText(dataStr.length);\n }\n }\n else {\n node.data = dataStr;\n }\n }, () => text(data), true // Text nodes should not update last index since it is likely not worth it to eliminate an increasing subsequence of actual elements\n );\n}\nfunction claim_space(nodes) {\n return claim_text(nodes, ' ');\n}\nfunction find_comment(nodes, text, start) {\n for (let i = start; i < nodes.length; i += 1) {\n const node = nodes[i];\n if (node.nodeType === 8 /* comment node */ && node.textContent.trim() === text) {\n return i;\n }\n }\n return nodes.length;\n}\nfunction claim_html_tag(nodes, is_svg) {\n // find html opening tag\n const start_index = find_comment(nodes, 'HTML_TAG_START', 0);\n const end_index = find_comment(nodes, 'HTML_TAG_END', start_index);\n if (start_index === end_index) {\n return new HtmlTagHydration(undefined, is_svg);\n }\n init_claim_info(nodes);\n const html_tag_nodes = nodes.splice(start_index, end_index - start_index + 1);\n detach(html_tag_nodes[0]);\n detach(html_tag_nodes[html_tag_nodes.length - 1]);\n const claimed_nodes = html_tag_nodes.slice(1, html_tag_nodes.length - 1);\n for (const n of claimed_nodes) {\n n.claim_order = nodes.claim_info.total_claimed;\n nodes.claim_info.total_claimed += 1;\n }\n return new HtmlTagHydration(claimed_nodes, is_svg);\n}\nfunction set_data(text, data) {\n data = '' + data;\n if (text.wholeText !== data)\n text.data = data;\n}\nfunction set_input_value(input, value) {\n input.value = value == null ? '' : value;\n}\nfunction set_input_type(input, type) {\n try {\n input.type = type;\n }\n catch (e) {\n // do nothing\n }\n}\nfunction set_style(node, key, value, important) {\n if (value === null) {\n node.style.removeProperty(key);\n }\n else {\n node.style.setProperty(key, value, important ? 'important' : '');\n }\n}\nfunction select_option(select, value) {\n for (let i = 0; i < select.options.length; i += 1) {\n const option = select.options[i];\n if (option.__value === value) {\n option.selected = true;\n return;\n }\n }\n select.selectedIndex = -1; // no option should be selected\n}\nfunction select_options(select, value) {\n for (let i = 0; i < select.options.length; i += 1) {\n const option = select.options[i];\n option.selected = ~value.indexOf(option.__value);\n }\n}\nfunction select_value(select) {\n const selected_option = select.querySelector(':checked') || select.options[0];\n return selected_option && selected_option.__value;\n}\nfunction select_multiple_value(select) {\n return [].map.call(select.querySelectorAll(':checked'), option => option.__value);\n}\n// unfortunately this can't be a constant as that wouldn't be tree-shakeable\n// so we cache the result instead\nlet crossorigin;\nfunction is_crossorigin() {\n if (crossorigin === undefined) {\n crossorigin = false;\n try {\n if (typeof window !== 'undefined' && window.parent) {\n void window.parent.document;\n }\n }\n catch (error) {\n crossorigin = true;\n }\n }\n return crossorigin;\n}\nfunction add_resize_listener(node, fn) {\n const computed_style = getComputedStyle(node);\n if (computed_style.position === 'static') {\n node.style.position = 'relative';\n }\n const iframe = element('iframe');\n iframe.setAttribute('style', 'display: block; position: absolute; top: 0; left: 0; width: 100%; height: 100%; ' +\n 'overflow: hidden; border: 0; opacity: 0; pointer-events: none; z-index: -1;');\n iframe.setAttribute('aria-hidden', 'true');\n iframe.tabIndex = -1;\n const crossorigin = is_crossorigin();\n let unsubscribe;\n if (crossorigin) {\n iframe.src = \"data:text/html,\";\n unsubscribe = listen(window, 'message', (event) => {\n if (event.source === iframe.contentWindow)\n fn();\n });\n }\n else {\n iframe.src = 'about:blank';\n iframe.onload = () => {\n unsubscribe = listen(iframe.contentWindow, 'resize', fn);\n };\n }\n append(node, iframe);\n return () => {\n if (crossorigin) {\n unsubscribe();\n }\n else if (unsubscribe && iframe.contentWindow) {\n unsubscribe();\n }\n detach(iframe);\n };\n}\nfunction toggle_class(element, name, toggle) {\n element.classList[toggle ? 'add' : 'remove'](name);\n}\nfunction custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {\n const e = document.createEvent('CustomEvent');\n e.initCustomEvent(type, bubbles, cancelable, detail);\n return e;\n}\nfunction query_selector_all(selector, parent = document.body) {\n return Array.from(parent.querySelectorAll(selector));\n}\nfunction head_selector(nodeId, head) {\n const result = [];\n let started = 0;\n for (const node of head.childNodes) {\n if (node.nodeType === 8 /* comment node */) {\n const comment = node.textContent.trim();\n if (comment === `HEAD_${nodeId}_END`) {\n started -= 1;\n result.push(node);\n }\n else if (comment === `HEAD_${nodeId}_START`) {\n started += 1;\n result.push(node);\n }\n }\n else if (started > 0) {\n result.push(node);\n }\n }\n return result;\n}\nclass HtmlTag {\n constructor(is_svg = false) {\n this.is_svg = false;\n this.is_svg = is_svg;\n this.e = this.n = null;\n }\n c(html) {\n this.h(html);\n }\n m(html, target, anchor = null) {\n if (!this.e) {\n if (this.is_svg)\n this.e = svg_element(target.nodeName);\n else\n this.e = element(target.nodeName);\n this.t = target;\n this.c(html);\n }\n this.i(anchor);\n }\n h(html) {\n this.e.innerHTML = html;\n this.n = Array.from(this.e.childNodes);\n }\n i(anchor) {\n for (let i = 0; i < this.n.length; i += 1) {\n insert(this.t, this.n[i], anchor);\n }\n }\n p(html) {\n this.d();\n this.h(html);\n this.i(this.a);\n }\n d() {\n this.n.forEach(detach);\n }\n}\nclass HtmlTagHydration extends HtmlTag {\n constructor(claimed_nodes, is_svg = false) {\n super(is_svg);\n this.e = this.n = null;\n this.l = claimed_nodes;\n }\n c(html) {\n if (this.l) {\n this.n = this.l;\n }\n else {\n super.c(html);\n }\n }\n i(anchor) {\n for (let i = 0; i < this.n.length; i += 1) {\n insert_hydration(this.t, this.n[i], anchor);\n }\n }\n}\nfunction attribute_to_object(attributes) {\n const result = {};\n for (const attribute of attributes) {\n result[attribute.name] = attribute.value;\n }\n return result;\n}\nfunction get_custom_elements_slots(element) {\n const result = {};\n element.childNodes.forEach((node) => {\n result[node.slot || 'default'] = true;\n });\n return result;\n}\nfunction construct_svelte_component(component, props) {\n return new component(props);\n}\n\n// we need to store the information for multiple documents because a Svelte application could also contain iframes\n// https://github.com/sveltejs/svelte/issues/3624\nconst managed_styles = new Map();\nlet active = 0;\n// https://github.com/darkskyapp/string-hash/blob/master/index.js\nfunction hash(str) {\n let hash = 5381;\n let i = str.length;\n while (i--)\n hash = ((hash << 5) - hash) ^ str.charCodeAt(i);\n return hash >>> 0;\n}\nfunction create_style_information(doc, node) {\n const info = { stylesheet: append_empty_stylesheet(node), rules: {} };\n managed_styles.set(doc, info);\n return info;\n}\nfunction create_rule(node, a, b, duration, delay, ease, fn, uid = 0) {\n const step = 16.666 / duration;\n let keyframes = '{\\n';\n for (let p = 0; p <= 1; p += step) {\n const t = a + (b - a) * ease(p);\n keyframes += p * 100 + `%{${fn(t, 1 - t)}}\\n`;\n }\n const rule = keyframes + `100% {${fn(b, 1 - b)}}\\n}`;\n const name = `__svelte_${hash(rule)}_${uid}`;\n const doc = get_root_for_style(node);\n const { stylesheet, rules } = managed_styles.get(doc) || create_style_information(doc, node);\n if (!rules[name]) {\n rules[name] = true;\n stylesheet.insertRule(`@keyframes ${name} ${rule}`, stylesheet.cssRules.length);\n }\n const animation = node.style.animation || '';\n node.style.animation = `${animation ? `${animation}, ` : ''}${name} ${duration}ms linear ${delay}ms 1 both`;\n active += 1;\n return name;\n}\nfunction delete_rule(node, name) {\n const previous = (node.style.animation || '').split(', ');\n const next = previous.filter(name\n ? anim => anim.indexOf(name) < 0 // remove specific animation\n : anim => anim.indexOf('__svelte') === -1 // remove all Svelte animations\n );\n const deleted = previous.length - next.length;\n if (deleted) {\n node.style.animation = next.join(', ');\n active -= deleted;\n if (!active)\n clear_rules();\n }\n}\nfunction clear_rules() {\n raf(() => {\n if (active)\n return;\n managed_styles.forEach(info => {\n const { ownerNode } = info.stylesheet;\n // there is no ownerNode if it runs on jsdom.\n if (ownerNode)\n detach(ownerNode);\n });\n managed_styles.clear();\n });\n}\n\nfunction create_animation(node, from, fn, params) {\n if (!from)\n return noop;\n const to = node.getBoundingClientRect();\n if (from.left === to.left && from.right === to.right && from.top === to.top && from.bottom === to.bottom)\n return noop;\n const { delay = 0, duration = 300, easing = identity, \n // @ts-ignore todo: should this be separated from destructuring? Or start/end added to public api and documentation?\n start: start_time = now() + delay, \n // @ts-ignore todo:\n end = start_time + duration, tick = noop, css } = fn(node, { from, to }, params);\n let running = true;\n let started = false;\n let name;\n function start() {\n if (css) {\n name = create_rule(node, 0, 1, duration, delay, easing, css);\n }\n if (!delay) {\n started = true;\n }\n }\n function stop() {\n if (css)\n delete_rule(node, name);\n running = false;\n }\n loop(now => {\n if (!started && now >= start_time) {\n started = true;\n }\n if (started && now >= end) {\n tick(1, 0);\n stop();\n }\n if (!running) {\n return false;\n }\n if (started) {\n const p = now - start_time;\n const t = 0 + 1 * easing(p / duration);\n tick(t, 1 - t);\n }\n return true;\n });\n start();\n tick(0, 1);\n return stop;\n}\nfunction fix_position(node) {\n const style = getComputedStyle(node);\n if (style.position !== 'absolute' && style.position !== 'fixed') {\n const { width, height } = style;\n const a = node.getBoundingClientRect();\n node.style.position = 'absolute';\n node.style.width = width;\n node.style.height = height;\n add_transform(node, a);\n }\n}\nfunction add_transform(node, a) {\n const b = node.getBoundingClientRect();\n if (a.left !== b.left || a.top !== b.top) {\n const style = getComputedStyle(node);\n const transform = style.transform === 'none' ? '' : style.transform;\n node.style.transform = `${transform} translate(${a.left - b.left}px, ${a.top - b.top}px)`;\n }\n}\n\nlet current_component;\nfunction set_current_component(component) {\n current_component = component;\n}\nfunction get_current_component() {\n if (!current_component)\n throw new Error('Function called outside component initialization');\n return current_component;\n}\n/**\n * Schedules a callback to run immediately before the component is updated after any state change.\n *\n * The first time the callback runs will be before the initial `onMount`\n *\n * https://svelte.dev/docs#run-time-svelte-beforeupdate\n */\nfunction beforeUpdate(fn) {\n get_current_component().$$.before_update.push(fn);\n}\n/**\n * The `onMount` function schedules a callback to run as soon as the component has been mounted to the DOM.\n * It must be called during the component's initialisation (but doesn't need to live *inside* the component;\n * it can be called from an external module).\n *\n * `onMount` does not run inside a [server-side component](/docs#run-time-server-side-component-api).\n *\n * https://svelte.dev/docs#run-time-svelte-onmount\n */\nfunction onMount(fn) {\n get_current_component().$$.on_mount.push(fn);\n}\n/**\n * Schedules a callback to run immediately after the component has been updated.\n *\n * The first time the callback runs will be after the initial `onMount`\n */\nfunction afterUpdate(fn) {\n get_current_component().$$.after_update.push(fn);\n}\n/**\n * Schedules a callback to run immediately before the component is unmounted.\n *\n * Out of `onMount`, `beforeUpdate`, `afterUpdate` and `onDestroy`, this is the\n * only one that runs inside a server-side component.\n *\n * https://svelte.dev/docs#run-time-svelte-ondestroy\n */\nfunction onDestroy(fn) {\n get_current_component().$$.on_destroy.push(fn);\n}\n/**\n * Creates an event dispatcher that can be used to dispatch [component events](/docs#template-syntax-component-directives-on-eventname).\n * Event dispatchers are functions that can take two arguments: `name` and `detail`.\n *\n * Component events created with `createEventDispatcher` create a\n * [CustomEvent](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent).\n * These events do not [bubble](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/Events#Event_bubbling_and_capture).\n * The `detail` argument corresponds to the [CustomEvent.detail](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/detail)\n * property and can contain any type of data.\n *\n * https://svelte.dev/docs#run-time-svelte-createeventdispatcher\n */\nfunction createEventDispatcher() {\n const component = get_current_component();\n return (type, detail, { cancelable = false } = {}) => {\n const callbacks = component.$$.callbacks[type];\n if (callbacks) {\n // TODO are there situations where events could be dispatched\n // in a server (non-DOM) environment?\n const event = custom_event(type, detail, { cancelable });\n callbacks.slice().forEach(fn => {\n fn.call(component, event);\n });\n return !event.defaultPrevented;\n }\n return true;\n };\n}\n/**\n * Associates an arbitrary `context` object with the current component and the specified `key`\n * and returns that object. The context is then available to children of the component\n * (including slotted content) with `getContext`.\n *\n * Like lifecycle functions, this must be called during component initialisation.\n *\n * https://svelte.dev/docs#run-time-svelte-setcontext\n */\nfunction setContext(key, context) {\n get_current_component().$$.context.set(key, context);\n return context;\n}\n/**\n * Retrieves the context that belongs to the closest parent component with the specified `key`.\n * Must be called during component initialisation.\n *\n * https://svelte.dev/docs#run-time-svelte-getcontext\n */\nfunction getContext(key) {\n return get_current_component().$$.context.get(key);\n}\n/**\n * Retrieves the whole context map that belongs to the closest parent component.\n * Must be called during component initialisation. Useful, for example, if you\n * programmatically create a component and want to pass the existing context to it.\n *\n * https://svelte.dev/docs#run-time-svelte-getallcontexts\n */\nfunction getAllContexts() {\n return get_current_component().$$.context;\n}\n/**\n * Checks whether a given `key` has been set in the context of a parent component.\n * Must be called during component initialisation.\n *\n * https://svelte.dev/docs#run-time-svelte-hascontext\n */\nfunction hasContext(key) {\n return get_current_component().$$.context.has(key);\n}\n// TODO figure out if we still want to support\n// shorthand events, or if we want to implement\n// a real bubbling mechanism\nfunction bubble(component, event) {\n const callbacks = component.$$.callbacks[event.type];\n if (callbacks) {\n // @ts-ignore\n callbacks.slice().forEach(fn => fn.call(this, event));\n }\n}\n\nconst dirty_components = [];\nconst intros = { enabled: false };\nconst binding_callbacks = [];\nconst render_callbacks = [];\nconst flush_callbacks = [];\nconst resolved_promise = Promise.resolve();\nlet update_scheduled = false;\nfunction schedule_update() {\n if (!update_scheduled) {\n update_scheduled = true;\n resolved_promise.then(flush);\n }\n}\nfunction tick() {\n schedule_update();\n return resolved_promise;\n}\nfunction add_render_callback(fn) {\n render_callbacks.push(fn);\n}\nfunction add_flush_callback(fn) {\n flush_callbacks.push(fn);\n}\n// flush() calls callbacks in this order:\n// 1. All beforeUpdate callbacks, in order: parents before children\n// 2. All bind:this callbacks, in reverse order: children before parents.\n// 3. All afterUpdate callbacks, in order: parents before children. EXCEPT\n// for afterUpdates called during the initial onMount, which are called in\n// reverse order: children before parents.\n// Since callbacks might update component values, which could trigger another\n// call to flush(), the following steps guard against this:\n// 1. During beforeUpdate, any updated components will be added to the\n// dirty_components array and will cause a reentrant call to flush(). Because\n// the flush index is kept outside the function, the reentrant call will pick\n// up where the earlier call left off and go through all dirty components. The\n// current_component value is saved and restored so that the reentrant call will\n// not interfere with the \"parent\" flush() call.\n// 2. bind:this callbacks cannot trigger new flush() calls.\n// 3. During afterUpdate, any updated components will NOT have their afterUpdate\n// callback called a second time; the seen_callbacks set, outside the flush()\n// function, guarantees this behavior.\nconst seen_callbacks = new Set();\nlet flushidx = 0; // Do *not* move this inside the flush() function\nfunction flush() {\n const saved_component = current_component;\n do {\n // first, call beforeUpdate functions\n // and update components\n while (flushidx < dirty_components.length) {\n const component = dirty_components[flushidx];\n flushidx++;\n set_current_component(component);\n update(component.$$);\n }\n set_current_component(null);\n dirty_components.length = 0;\n flushidx = 0;\n while (binding_callbacks.length)\n binding_callbacks.pop()();\n // then, once components are updated, call\n // afterUpdate functions. This may cause\n // subsequent updates...\n for (let i = 0; i < render_callbacks.length; i += 1) {\n const callback = render_callbacks[i];\n if (!seen_callbacks.has(callback)) {\n // ...so guard against infinite loops\n seen_callbacks.add(callback);\n callback();\n }\n }\n render_callbacks.length = 0;\n } while (dirty_components.length);\n while (flush_callbacks.length) {\n flush_callbacks.pop()();\n }\n update_scheduled = false;\n seen_callbacks.clear();\n set_current_component(saved_component);\n}\nfunction update($$) {\n if ($$.fragment !== null) {\n $$.update();\n run_all($$.before_update);\n const dirty = $$.dirty;\n $$.dirty = [-1];\n $$.fragment && $$.fragment.p($$.ctx, dirty);\n $$.after_update.forEach(add_render_callback);\n }\n}\n\nlet promise;\nfunction wait() {\n if (!promise) {\n promise = Promise.resolve();\n promise.then(() => {\n promise = null;\n });\n }\n return promise;\n}\nfunction dispatch(node, direction, kind) {\n node.dispatchEvent(custom_event(`${direction ? 'intro' : 'outro'}${kind}`));\n}\nconst outroing = new Set();\nlet outros;\nfunction group_outros() {\n outros = {\n r: 0,\n c: [],\n p: outros // parent group\n };\n}\nfunction check_outros() {\n if (!outros.r) {\n run_all(outros.c);\n }\n outros = outros.p;\n}\nfunction transition_in(block, local) {\n if (block && block.i) {\n outroing.delete(block);\n block.i(local);\n }\n}\nfunction transition_out(block, local, detach, callback) {\n if (block && block.o) {\n if (outroing.has(block))\n return;\n outroing.add(block);\n outros.c.push(() => {\n outroing.delete(block);\n if (callback) {\n if (detach)\n block.d(1);\n callback();\n }\n });\n block.o(local);\n }\n else if (callback) {\n callback();\n }\n}\nconst null_transition = { duration: 0 };\nfunction create_in_transition(node, fn, params) {\n let config = fn(node, params);\n let running = false;\n let animation_name;\n let task;\n let uid = 0;\n function cleanup() {\n if (animation_name)\n delete_rule(node, animation_name);\n }\n function go() {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n if (css)\n animation_name = create_rule(node, 0, 1, duration, delay, easing, css, uid++);\n tick(0, 1);\n const start_time = now() + delay;\n const end_time = start_time + duration;\n if (task)\n task.abort();\n running = true;\n add_render_callback(() => dispatch(node, true, 'start'));\n task = loop(now => {\n if (running) {\n if (now >= end_time) {\n tick(1, 0);\n dispatch(node, true, 'end');\n cleanup();\n return running = false;\n }\n if (now >= start_time) {\n const t = easing((now - start_time) / duration);\n tick(t, 1 - t);\n }\n }\n return running;\n });\n }\n let started = false;\n return {\n start() {\n if (started)\n return;\n started = true;\n delete_rule(node);\n if (is_function(config)) {\n config = config();\n wait().then(go);\n }\n else {\n go();\n }\n },\n invalidate() {\n started = false;\n },\n end() {\n if (running) {\n cleanup();\n running = false;\n }\n }\n };\n}\nfunction create_out_transition(node, fn, params) {\n let config = fn(node, params);\n let running = true;\n let animation_name;\n const group = outros;\n group.r += 1;\n function go() {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n if (css)\n animation_name = create_rule(node, 1, 0, duration, delay, easing, css);\n const start_time = now() + delay;\n const end_time = start_time + duration;\n add_render_callback(() => dispatch(node, false, 'start'));\n loop(now => {\n if (running) {\n if (now >= end_time) {\n tick(0, 1);\n dispatch(node, false, 'end');\n if (!--group.r) {\n // this will result in `end()` being called,\n // so we don't need to clean up here\n run_all(group.c);\n }\n return false;\n }\n if (now >= start_time) {\n const t = easing((now - start_time) / duration);\n tick(1 - t, t);\n }\n }\n return running;\n });\n }\n if (is_function(config)) {\n wait().then(() => {\n // @ts-ignore\n config = config();\n go();\n });\n }\n else {\n go();\n }\n return {\n end(reset) {\n if (reset && config.tick) {\n config.tick(1, 0);\n }\n if (running) {\n if (animation_name)\n delete_rule(node, animation_name);\n running = false;\n }\n }\n };\n}\nfunction create_bidirectional_transition(node, fn, params, intro) {\n let config = fn(node, params);\n let t = intro ? 0 : 1;\n let running_program = null;\n let pending_program = null;\n let animation_name = null;\n function clear_animation() {\n if (animation_name)\n delete_rule(node, animation_name);\n }\n function init(program, duration) {\n const d = (program.b - t);\n duration *= Math.abs(d);\n return {\n a: t,\n b: program.b,\n d,\n duration,\n start: program.start,\n end: program.start + duration,\n group: program.group\n };\n }\n function go(b) {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n const program = {\n start: now() + delay,\n b\n };\n if (!b) {\n // @ts-ignore todo: improve typings\n program.group = outros;\n outros.r += 1;\n }\n if (running_program || pending_program) {\n pending_program = program;\n }\n else {\n // if this is an intro, and there's a delay, we need to do\n // an initial tick and/or apply CSS animation immediately\n if (css) {\n clear_animation();\n animation_name = create_rule(node, t, b, duration, delay, easing, css);\n }\n if (b)\n tick(0, 1);\n running_program = init(program, duration);\n add_render_callback(() => dispatch(node, b, 'start'));\n loop(now => {\n if (pending_program && now > pending_program.start) {\n running_program = init(pending_program, duration);\n pending_program = null;\n dispatch(node, running_program.b, 'start');\n if (css) {\n clear_animation();\n animation_name = create_rule(node, t, running_program.b, running_program.duration, 0, easing, config.css);\n }\n }\n if (running_program) {\n if (now >= running_program.end) {\n tick(t = running_program.b, 1 - t);\n dispatch(node, running_program.b, 'end');\n if (!pending_program) {\n // we're done\n if (running_program.b) {\n // intro — we can tidy up immediately\n clear_animation();\n }\n else {\n // outro — needs to be coordinated\n if (!--running_program.group.r)\n run_all(running_program.group.c);\n }\n }\n running_program = null;\n }\n else if (now >= running_program.start) {\n const p = now - running_program.start;\n t = running_program.a + running_program.d * easing(p / running_program.duration);\n tick(t, 1 - t);\n }\n }\n return !!(running_program || pending_program);\n });\n }\n }\n return {\n run(b) {\n if (is_function(config)) {\n wait().then(() => {\n // @ts-ignore\n config = config();\n go(b);\n });\n }\n else {\n go(b);\n }\n },\n end() {\n clear_animation();\n running_program = pending_program = null;\n }\n };\n}\n\nfunction handle_promise(promise, info) {\n const token = info.token = {};\n function update(type, index, key, value) {\n if (info.token !== token)\n return;\n info.resolved = value;\n let child_ctx = info.ctx;\n if (key !== undefined) {\n child_ctx = child_ctx.slice();\n child_ctx[key] = value;\n }\n const block = type && (info.current = type)(child_ctx);\n let needs_flush = false;\n if (info.block) {\n if (info.blocks) {\n info.blocks.forEach((block, i) => {\n if (i !== index && block) {\n group_outros();\n transition_out(block, 1, 1, () => {\n if (info.blocks[i] === block) {\n info.blocks[i] = null;\n }\n });\n check_outros();\n }\n });\n }\n else {\n info.block.d(1);\n }\n block.c();\n transition_in(block, 1);\n block.m(info.mount(), info.anchor);\n needs_flush = true;\n }\n info.block = block;\n if (info.blocks)\n info.blocks[index] = block;\n if (needs_flush) {\n flush();\n }\n }\n if (is_promise(promise)) {\n const current_component = get_current_component();\n promise.then(value => {\n set_current_component(current_component);\n update(info.then, 1, info.value, value);\n set_current_component(null);\n }, error => {\n set_current_component(current_component);\n update(info.catch, 2, info.error, error);\n set_current_component(null);\n if (!info.hasCatch) {\n throw error;\n }\n });\n // if we previously had a then/catch block, destroy it\n if (info.current !== info.pending) {\n update(info.pending, 0);\n return true;\n }\n }\n else {\n if (info.current !== info.then) {\n update(info.then, 1, info.value, promise);\n return true;\n }\n info.resolved = promise;\n }\n}\nfunction update_await_block_branch(info, ctx, dirty) {\n const child_ctx = ctx.slice();\n const { resolved } = info;\n if (info.current === info.then) {\n child_ctx[info.value] = resolved;\n }\n if (info.current === info.catch) {\n child_ctx[info.error] = resolved;\n }\n info.block.p(child_ctx, dirty);\n}\n\nconst globals = (typeof window !== 'undefined'\n ? window\n : typeof globalThis !== 'undefined'\n ? globalThis\n : global);\n\nfunction destroy_block(block, lookup) {\n block.d(1);\n lookup.delete(block.key);\n}\nfunction outro_and_destroy_block(block, lookup) {\n transition_out(block, 1, 1, () => {\n lookup.delete(block.key);\n });\n}\nfunction fix_and_destroy_block(block, lookup) {\n block.f();\n destroy_block(block, lookup);\n}\nfunction fix_and_outro_and_destroy_block(block, lookup) {\n block.f();\n outro_and_destroy_block(block, lookup);\n}\nfunction update_keyed_each(old_blocks, dirty, get_key, dynamic, ctx, list, lookup, node, destroy, create_each_block, next, get_context) {\n let o = old_blocks.length;\n let n = list.length;\n let i = o;\n const old_indexes = {};\n while (i--)\n old_indexes[old_blocks[i].key] = i;\n const new_blocks = [];\n const new_lookup = new Map();\n const deltas = new Map();\n i = n;\n while (i--) {\n const child_ctx = get_context(ctx, list, i);\n const key = get_key(child_ctx);\n let block = lookup.get(key);\n if (!block) {\n block = create_each_block(key, child_ctx);\n block.c();\n }\n else if (dynamic) {\n block.p(child_ctx, dirty);\n }\n new_lookup.set(key, new_blocks[i] = block);\n if (key in old_indexes)\n deltas.set(key, Math.abs(i - old_indexes[key]));\n }\n const will_move = new Set();\n const did_move = new Set();\n function insert(block) {\n transition_in(block, 1);\n block.m(node, next);\n lookup.set(block.key, block);\n next = block.first;\n n--;\n }\n while (o && n) {\n const new_block = new_blocks[n - 1];\n const old_block = old_blocks[o - 1];\n const new_key = new_block.key;\n const old_key = old_block.key;\n if (new_block === old_block) {\n // do nothing\n next = new_block.first;\n o--;\n n--;\n }\n else if (!new_lookup.has(old_key)) {\n // remove old block\n destroy(old_block, lookup);\n o--;\n }\n else if (!lookup.has(new_key) || will_move.has(new_key)) {\n insert(new_block);\n }\n else if (did_move.has(old_key)) {\n o--;\n }\n else if (deltas.get(new_key) > deltas.get(old_key)) {\n did_move.add(new_key);\n insert(new_block);\n }\n else {\n will_move.add(old_key);\n o--;\n }\n }\n while (o--) {\n const old_block = old_blocks[o];\n if (!new_lookup.has(old_block.key))\n destroy(old_block, lookup);\n }\n while (n)\n insert(new_blocks[n - 1]);\n return new_blocks;\n}\nfunction validate_each_keys(ctx, list, get_context, get_key) {\n const keys = new Set();\n for (let i = 0; i < list.length; i++) {\n const key = get_key(get_context(ctx, list, i));\n if (keys.has(key)) {\n throw new Error('Cannot have duplicate keys in a keyed each');\n }\n keys.add(key);\n }\n}\n\nfunction get_spread_update(levels, updates) {\n const update = {};\n const to_null_out = {};\n const accounted_for = { $$scope: 1 };\n let i = levels.length;\n while (i--) {\n const o = levels[i];\n const n = updates[i];\n if (n) {\n for (const key in o) {\n if (!(key in n))\n to_null_out[key] = 1;\n }\n for (const key in n) {\n if (!accounted_for[key]) {\n update[key] = n[key];\n accounted_for[key] = 1;\n }\n }\n levels[i] = n;\n }\n else {\n for (const key in o) {\n accounted_for[key] = 1;\n }\n }\n }\n for (const key in to_null_out) {\n if (!(key in update))\n update[key] = undefined;\n }\n return update;\n}\nfunction get_spread_object(spread_props) {\n return typeof spread_props === 'object' && spread_props !== null ? spread_props : {};\n}\n\n// source: https://html.spec.whatwg.org/multipage/indices.html\nconst boolean_attributes = new Set([\n 'allowfullscreen',\n 'allowpaymentrequest',\n 'async',\n 'autofocus',\n 'autoplay',\n 'checked',\n 'controls',\n 'default',\n 'defer',\n 'disabled',\n 'formnovalidate',\n 'hidden',\n 'inert',\n 'ismap',\n 'itemscope',\n 'loop',\n 'multiple',\n 'muted',\n 'nomodule',\n 'novalidate',\n 'open',\n 'playsinline',\n 'readonly',\n 'required',\n 'reversed',\n 'selected'\n]);\n\n/** regex of all html void element names */\nconst void_element_names = /^(?:area|base|br|col|command|embed|hr|img|input|keygen|link|meta|param|source|track|wbr)$/;\nfunction is_void(name) {\n return void_element_names.test(name) || name.toLowerCase() === '!doctype';\n}\n\nconst invalid_attribute_name_character = /[\\s'\">/=\\u{FDD0}-\\u{FDEF}\\u{FFFE}\\u{FFFF}\\u{1FFFE}\\u{1FFFF}\\u{2FFFE}\\u{2FFFF}\\u{3FFFE}\\u{3FFFF}\\u{4FFFE}\\u{4FFFF}\\u{5FFFE}\\u{5FFFF}\\u{6FFFE}\\u{6FFFF}\\u{7FFFE}\\u{7FFFF}\\u{8FFFE}\\u{8FFFF}\\u{9FFFE}\\u{9FFFF}\\u{AFFFE}\\u{AFFFF}\\u{BFFFE}\\u{BFFFF}\\u{CFFFE}\\u{CFFFF}\\u{DFFFE}\\u{DFFFF}\\u{EFFFE}\\u{EFFFF}\\u{FFFFE}\\u{FFFFF}\\u{10FFFE}\\u{10FFFF}]/u;\n// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n// https://infra.spec.whatwg.org/#noncharacter\nfunction spread(args, attrs_to_add) {\n const attributes = Object.assign({}, ...args);\n if (attrs_to_add) {\n const classes_to_add = attrs_to_add.classes;\n const styles_to_add = attrs_to_add.styles;\n if (classes_to_add) {\n if (attributes.class == null) {\n attributes.class = classes_to_add;\n }\n else {\n attributes.class += ' ' + classes_to_add;\n }\n }\n if (styles_to_add) {\n if (attributes.style == null) {\n attributes.style = style_object_to_string(styles_to_add);\n }\n else {\n attributes.style = style_object_to_string(merge_ssr_styles(attributes.style, styles_to_add));\n }\n }\n }\n let str = '';\n Object.keys(attributes).forEach(name => {\n if (invalid_attribute_name_character.test(name))\n return;\n const value = attributes[name];\n if (value === true)\n str += ' ' + name;\n else if (boolean_attributes.has(name.toLowerCase())) {\n if (value)\n str += ' ' + name;\n }\n else if (value != null) {\n str += ` ${name}=\"${value}\"`;\n }\n });\n return str;\n}\nfunction merge_ssr_styles(style_attribute, style_directive) {\n const style_object = {};\n for (const individual_style of style_attribute.split(';')) {\n const colon_index = individual_style.indexOf(':');\n const name = individual_style.slice(0, colon_index).trim();\n const value = individual_style.slice(colon_index + 1).trim();\n if (!name)\n continue;\n style_object[name] = value;\n }\n for (const name in style_directive) {\n const value = style_directive[name];\n if (value) {\n style_object[name] = value;\n }\n else {\n delete style_object[name];\n }\n }\n return style_object;\n}\nconst ATTR_REGEX = /[&\"]/g;\nconst CONTENT_REGEX = /[&<]/g;\n/**\n * Note: this method is performance sensitive and has been optimized\n * https://github.com/sveltejs/svelte/pull/5701\n */\nfunction escape(value, is_attr = false) {\n const str = String(value);\n const pattern = is_attr ? ATTR_REGEX : CONTENT_REGEX;\n pattern.lastIndex = 0;\n let escaped = '';\n let last = 0;\n while (pattern.test(str)) {\n const i = pattern.lastIndex - 1;\n const ch = str[i];\n escaped += str.substring(last, i) + (ch === '&' ? '&' : (ch === '\"' ? '"' : '<'));\n last = i + 1;\n }\n return escaped + str.substring(last);\n}\nfunction escape_attribute_value(value) {\n // keep booleans, null, and undefined for the sake of `spread`\n const should_escape = typeof value === 'string' || (value && typeof value === 'object');\n return should_escape ? escape(value, true) : value;\n}\nfunction escape_object(obj) {\n const result = {};\n for (const key in obj) {\n result[key] = escape_attribute_value(obj[key]);\n }\n return result;\n}\nfunction each(items, fn) {\n let str = '';\n for (let i = 0; i < items.length; i += 1) {\n str += fn(items[i], i);\n }\n return str;\n}\nconst missing_component = {\n $$render: () => ''\n};\nfunction validate_component(component, name) {\n if (!component || !component.$$render) {\n if (name === 'svelte:component')\n name += ' this={...}';\n throw new Error(`<${name}> is not a valid SSR component. You may need to review your build config to ensure that dependencies are compiled, rather than imported as pre-compiled modules. Otherwise you may need to fix a <${name}>.`);\n }\n return component;\n}\nfunction debug(file, line, column, values) {\n console.log(`{@debug} ${file ? file + ' ' : ''}(${line}:${column})`); // eslint-disable-line no-console\n console.log(values); // eslint-disable-line no-console\n return '';\n}\nlet on_destroy;\nfunction create_ssr_component(fn) {\n function $$render(result, props, bindings, slots, context) {\n const parent_component = current_component;\n const $$ = {\n on_destroy,\n context: new Map(context || (parent_component ? parent_component.$$.context : [])),\n // these will be immediately discarded\n on_mount: [],\n before_update: [],\n after_update: [],\n callbacks: blank_object()\n };\n set_current_component({ $$ });\n const html = fn(result, props, bindings, slots);\n set_current_component(parent_component);\n return html;\n }\n return {\n render: (props = {}, { $$slots = {}, context = new Map() } = {}) => {\n on_destroy = [];\n const result = { title: '', head: '', css: new Set() };\n const html = $$render(result, props, {}, $$slots, context);\n run_all(on_destroy);\n return {\n html,\n css: {\n code: Array.from(result.css).map(css => css.code).join('\\n'),\n map: null // TODO\n },\n head: result.title + result.head\n };\n },\n $$render\n };\n}\nfunction add_attribute(name, value, boolean) {\n if (value == null || (boolean && !value))\n return '';\n const assignment = (boolean && value === true) ? '' : `=\"${escape(value, true)}\"`;\n return ` ${name}${assignment}`;\n}\nfunction add_classes(classes) {\n return classes ? ` class=\"${classes}\"` : '';\n}\nfunction style_object_to_string(style_object) {\n return Object.keys(style_object)\n .filter(key => style_object[key])\n .map(key => `${key}: ${style_object[key]};`)\n .join(' ');\n}\nfunction add_styles(style_object) {\n const styles = style_object_to_string(style_object);\n return styles ? ` style=\"${styles}\"` : '';\n}\n\nfunction bind(component, name, callback) {\n const index = component.$$.props[name];\n if (index !== undefined) {\n component.$$.bound[index] = callback;\n callback(component.$$.ctx[index]);\n }\n}\nfunction create_component(block) {\n block && block.c();\n}\nfunction claim_component(block, parent_nodes) {\n block && block.l(parent_nodes);\n}\nfunction mount_component(component, target, anchor, customElement) {\n const { fragment, after_update } = component.$$;\n fragment && fragment.m(target, anchor);\n if (!customElement) {\n // onMount happens before the initial afterUpdate\n add_render_callback(() => {\n const new_on_destroy = component.$$.on_mount.map(run).filter(is_function);\n // if the component was destroyed immediately\n // it will update the `$$.on_destroy` reference to `null`.\n // the destructured on_destroy may still reference to the old array\n if (component.$$.on_destroy) {\n component.$$.on_destroy.push(...new_on_destroy);\n }\n else {\n // Edge case - component was destroyed immediately,\n // most likely as a result of a binding initialising\n run_all(new_on_destroy);\n }\n component.$$.on_mount = [];\n });\n }\n after_update.forEach(add_render_callback);\n}\nfunction destroy_component(component, detaching) {\n const $$ = component.$$;\n if ($$.fragment !== null) {\n run_all($$.on_destroy);\n $$.fragment && $$.fragment.d(detaching);\n // TODO null out other refs, including component.$$ (but need to\n // preserve final state?)\n $$.on_destroy = $$.fragment = null;\n $$.ctx = [];\n }\n}\nfunction make_dirty(component, i) {\n if (component.$$.dirty[0] === -1) {\n dirty_components.push(component);\n schedule_update();\n component.$$.dirty.fill(0);\n }\n component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31));\n}\nfunction init(component, options, instance, create_fragment, not_equal, props, append_styles, dirty = [-1]) {\n const parent_component = current_component;\n set_current_component(component);\n const $$ = component.$$ = {\n fragment: null,\n ctx: [],\n // state\n props,\n update: noop,\n not_equal,\n bound: blank_object(),\n // lifecycle\n on_mount: [],\n on_destroy: [],\n on_disconnect: [],\n before_update: [],\n after_update: [],\n context: new Map(options.context || (parent_component ? parent_component.$$.context : [])),\n // everything else\n callbacks: blank_object(),\n dirty,\n skip_bound: false,\n root: options.target || parent_component.$$.root\n };\n append_styles && append_styles($$.root);\n let ready = false;\n $$.ctx = instance\n ? instance(component, options.props || {}, (i, ret, ...rest) => {\n const value = rest.length ? rest[0] : ret;\n if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) {\n if (!$$.skip_bound && $$.bound[i])\n $$.bound[i](value);\n if (ready)\n make_dirty(component, i);\n }\n return ret;\n })\n : [];\n $$.update();\n ready = true;\n run_all($$.before_update);\n // `false` as a special case of no DOM component\n $$.fragment = create_fragment ? create_fragment($$.ctx) : false;\n if (options.target) {\n if (options.hydrate) {\n start_hydrating();\n const nodes = children(options.target);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n $$.fragment && $$.fragment.l(nodes);\n nodes.forEach(detach);\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n $$.fragment && $$.fragment.c();\n }\n if (options.intro)\n transition_in(component.$$.fragment);\n mount_component(component, options.target, options.anchor, options.customElement);\n end_hydrating();\n flush();\n }\n set_current_component(parent_component);\n}\nlet SvelteElement;\nif (typeof HTMLElement === 'function') {\n SvelteElement = class extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n connectedCallback() {\n const { on_mount } = this.$$;\n this.$$.on_disconnect = on_mount.map(run).filter(is_function);\n // @ts-ignore todo: improve typings\n for (const key in this.$$.slotted) {\n // @ts-ignore todo: improve typings\n this.appendChild(this.$$.slotted[key]);\n }\n }\n attributeChangedCallback(attr, _oldValue, newValue) {\n this[attr] = newValue;\n }\n disconnectedCallback() {\n run_all(this.$$.on_disconnect);\n }\n $destroy() {\n destroy_component(this, 1);\n this.$destroy = noop;\n }\n $on(type, callback) {\n // TODO should this delegate to addEventListener?\n if (!is_function(callback)) {\n return noop;\n }\n const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n callbacks.push(callback);\n return () => {\n const index = callbacks.indexOf(callback);\n if (index !== -1)\n callbacks.splice(index, 1);\n };\n }\n $set($$props) {\n if (this.$$set && !is_empty($$props)) {\n this.$$.skip_bound = true;\n this.$$set($$props);\n this.$$.skip_bound = false;\n }\n }\n };\n}\n/**\n * Base class for Svelte components. Used when dev=false.\n */\nclass SvelteComponent {\n $destroy() {\n destroy_component(this, 1);\n this.$destroy = noop;\n }\n $on(type, callback) {\n if (!is_function(callback)) {\n return noop;\n }\n const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n callbacks.push(callback);\n return () => {\n const index = callbacks.indexOf(callback);\n if (index !== -1)\n callbacks.splice(index, 1);\n };\n }\n $set($$props) {\n if (this.$$set && !is_empty($$props)) {\n this.$$.skip_bound = true;\n this.$$set($$props);\n this.$$.skip_bound = false;\n }\n }\n}\n\nfunction dispatch_dev(type, detail) {\n document.dispatchEvent(custom_event(type, Object.assign({ version: '3.53.1' }, detail), { bubbles: true }));\n}\nfunction append_dev(target, node) {\n dispatch_dev('SvelteDOMInsert', { target, node });\n append(target, node);\n}\nfunction append_hydration_dev(target, node) {\n dispatch_dev('SvelteDOMInsert', { target, node });\n append_hydration(target, node);\n}\nfunction insert_dev(target, node, anchor) {\n dispatch_dev('SvelteDOMInsert', { target, node, anchor });\n insert(target, node, anchor);\n}\nfunction insert_hydration_dev(target, node, anchor) {\n dispatch_dev('SvelteDOMInsert', { target, node, anchor });\n insert_hydration(target, node, anchor);\n}\nfunction detach_dev(node) {\n dispatch_dev('SvelteDOMRemove', { node });\n detach(node);\n}\nfunction detach_between_dev(before, after) {\n while (before.nextSibling && before.nextSibling !== after) {\n detach_dev(before.nextSibling);\n }\n}\nfunction detach_before_dev(after) {\n while (after.previousSibling) {\n detach_dev(after.previousSibling);\n }\n}\nfunction detach_after_dev(before) {\n while (before.nextSibling) {\n detach_dev(before.nextSibling);\n }\n}\nfunction listen_dev(node, event, handler, options, has_prevent_default, has_stop_propagation) {\n const modifiers = options === true ? ['capture'] : options ? Array.from(Object.keys(options)) : [];\n if (has_prevent_default)\n modifiers.push('preventDefault');\n if (has_stop_propagation)\n modifiers.push('stopPropagation');\n dispatch_dev('SvelteDOMAddEventListener', { node, event, handler, modifiers });\n const dispose = listen(node, event, handler, options);\n return () => {\n dispatch_dev('SvelteDOMRemoveEventListener', { node, event, handler, modifiers });\n dispose();\n };\n}\nfunction attr_dev(node, attribute, value) {\n attr(node, attribute, value);\n if (value == null)\n dispatch_dev('SvelteDOMRemoveAttribute', { node, attribute });\n else\n dispatch_dev('SvelteDOMSetAttribute', { node, attribute, value });\n}\nfunction prop_dev(node, property, value) {\n node[property] = value;\n dispatch_dev('SvelteDOMSetProperty', { node, property, value });\n}\nfunction dataset_dev(node, property, value) {\n node.dataset[property] = value;\n dispatch_dev('SvelteDOMSetDataset', { node, property, value });\n}\nfunction set_data_dev(text, data) {\n data = '' + data;\n if (text.wholeText === data)\n return;\n dispatch_dev('SvelteDOMSetData', { node: text, data });\n text.data = data;\n}\nfunction validate_each_argument(arg) {\n if (typeof arg !== 'string' && !(arg && typeof arg === 'object' && 'length' in arg)) {\n let msg = '{#each} only iterates over array-like objects.';\n if (typeof Symbol === 'function' && arg && Symbol.iterator in arg) {\n msg += ' You can use a spread to convert this iterable into an array.';\n }\n throw new Error(msg);\n }\n}\nfunction validate_slots(name, slot, keys) {\n for (const slot_key of Object.keys(slot)) {\n if (!~keys.indexOf(slot_key)) {\n console.warn(`<${name}> received an unexpected slot \"${slot_key}\".`);\n }\n }\n}\nfunction validate_dynamic_element(tag) {\n const is_string = typeof tag === 'string';\n if (tag && !is_string) {\n throw new Error(' expects \"this\" attribute to be a string.');\n }\n}\nfunction validate_void_dynamic_element(tag) {\n if (tag && is_void(tag)) {\n console.warn(` is self-closing and cannot have content.`);\n }\n}\nfunction construct_svelte_component_dev(component, props) {\n const error_message = 'this={...} of should specify a Svelte component.';\n try {\n const instance = new component(props);\n if (!instance.$$ || !instance.$set || !instance.$on || !instance.$destroy) {\n throw new Error(error_message);\n }\n return instance;\n }\n catch (err) {\n const { message } = err;\n if (typeof message === 'string' && message.indexOf('is not a constructor') !== -1) {\n throw new Error(error_message);\n }\n else {\n throw err;\n }\n }\n}\n/**\n * Base class for Svelte components with some minor dev-enhancements. Used when dev=true.\n */\nclass SvelteComponentDev extends SvelteComponent {\n constructor(options) {\n if (!options || (!options.target && !options.$$inline)) {\n throw new Error(\"'target' is a required option\");\n }\n super();\n }\n $destroy() {\n super.$destroy();\n this.$destroy = () => {\n console.warn('Component was already destroyed'); // eslint-disable-line no-console\n };\n }\n $capture_state() { }\n $inject_state() { }\n}\n/**\n * Base class to create strongly typed Svelte components.\n * This only exists for typing purposes and should be used in `.d.ts` files.\n *\n * ### Example:\n *\n * You have component library on npm called `component-library`, from which\n * you export a component called `MyComponent`. For Svelte+TypeScript users,\n * you want to provide typings. Therefore you create a `index.d.ts`:\n * ```ts\n * import { SvelteComponentTyped } from \"svelte\";\n * export class MyComponent extends SvelteComponentTyped<{foo: string}> {}\n * ```\n * Typing this makes it possible for IDEs like VS Code with the Svelte extension\n * to provide intellisense and to use the component like this in a Svelte file\n * with TypeScript:\n * ```svelte\n * \n * \n * ```\n *\n * #### Why not make this part of `SvelteComponent(Dev)`?\n * Because\n * ```ts\n * class ASubclassOfSvelteComponent extends SvelteComponent<{foo: string}> {}\n * const component: typeof SvelteComponent = ASubclassOfSvelteComponent;\n * ```\n * will throw a type error, so we need to separate the more strictly typed class.\n */\nclass SvelteComponentTyped extends SvelteComponentDev {\n constructor(options) {\n super(options);\n }\n}\nfunction loop_guard(timeout) {\n const start = Date.now();\n return () => {\n if (Date.now() - start > timeout) {\n throw new Error('Infinite loop detected');\n }\n };\n}\n\nexport { HtmlTag, HtmlTagHydration, SvelteComponent, SvelteComponentDev, SvelteComponentTyped, SvelteElement, action_destroyer, add_attribute, add_classes, add_flush_callback, add_location, add_render_callback, add_resize_listener, add_styles, add_transform, afterUpdate, append, append_dev, append_empty_stylesheet, append_hydration, append_hydration_dev, append_styles, assign, attr, attr_dev, attribute_to_object, beforeUpdate, bind, binding_callbacks, blank_object, bubble, check_outros, children, claim_component, claim_element, claim_html_tag, claim_space, claim_svg_element, claim_text, clear_loops, component_subscribe, compute_rest_props, compute_slots, construct_svelte_component, construct_svelte_component_dev, createEventDispatcher, create_animation, create_bidirectional_transition, create_component, create_in_transition, create_out_transition, create_slot, create_ssr_component, current_component, custom_event, dataset_dev, debug, destroy_block, destroy_component, destroy_each, detach, detach_after_dev, detach_before_dev, detach_between_dev, detach_dev, dirty_components, dispatch_dev, each, element, element_is, empty, end_hydrating, escape, escape_attribute_value, escape_object, exclude_internal_props, fix_and_destroy_block, fix_and_outro_and_destroy_block, fix_position, flush, getAllContexts, getContext, get_all_dirty_from_scope, get_binding_group_value, get_current_component, get_custom_elements_slots, get_root_for_style, get_slot_changes, get_spread_object, get_spread_update, get_store_value, globals, group_outros, handle_promise, hasContext, has_prop, head_selector, identity, init, insert, insert_dev, insert_hydration, insert_hydration_dev, intros, invalid_attribute_name_character, is_client, is_crossorigin, is_empty, is_function, is_promise, is_void, listen, listen_dev, loop, loop_guard, merge_ssr_styles, missing_component, mount_component, noop, not_equal, now, null_to_empty, object_without_properties, onDestroy, onMount, once, outro_and_destroy_block, prevent_default, prop_dev, query_selector_all, raf, run, run_all, safe_not_equal, schedule_update, select_multiple_value, select_option, select_options, select_value, self, setContext, set_attributes, set_current_component, set_custom_element_data, set_custom_element_data_map, set_data, set_data_dev, set_input_type, set_input_value, set_now, set_raf, set_store_value, set_style, set_svg_attributes, space, spread, src_url_equal, start_hydrating, stop_propagation, subscribe, svg_element, text, tick, time_ranges_to_array, to_number, toggle_class, transition_in, transition_out, trusted, update_await_block_branch, update_keyed_each, update_slot, update_slot_base, validate_component, validate_dynamic_element, validate_each_argument, validate_each_keys, validate_slots, validate_store, validate_void_dynamic_element, xlink_attr };\n","/**\n * @typedef {Object} WrappedComponent Object returned by the `wrap` method\n * @property {SvelteComponent} component - Component to load (this is always asynchronous)\n * @property {RoutePrecondition[]} [conditions] - Route pre-conditions to validate\n * @property {Object} [props] - Optional dictionary of static props\n * @property {Object} [userData] - Optional user data dictionary\n * @property {bool} _sveltesparouter - Internal flag; always set to true\n */\n\n/**\n * @callback AsyncSvelteComponent\n * @returns {Promise} Returns a Promise that resolves with a Svelte component\n */\n\n/**\n * @callback RoutePrecondition\n * @param {RouteDetail} detail - Route detail object\n * @returns {boolean|Promise} If the callback returns a false-y value, it's interpreted as the precondition failed, so it aborts loading the component (and won't process other pre-condition callbacks)\n */\n\n/**\n * @typedef {Object} WrapOptions Options object for the call to `wrap`\n * @property {SvelteComponent} [component] - Svelte component to load (this is incompatible with `asyncComponent`)\n * @property {AsyncSvelteComponent} [asyncComponent] - Function that returns a Promise that fulfills with a Svelte component (e.g. `{asyncComponent: () => import('Foo.svelte')}`)\n * @property {SvelteComponent} [loadingComponent] - Svelte component to be displayed while the async route is loading (as a placeholder); when unset or false-y, no component is shown while component\n * @property {object} [loadingParams] - Optional dictionary passed to the `loadingComponent` component as params (for an exported prop called `params`)\n * @property {object} [userData] - Optional object that will be passed to events such as `routeLoading`, `routeLoaded`, `conditionsFailed`\n * @property {object} [props] - Optional key-value dictionary of static props that will be passed to the component. The props are expanded with {...props}, so the key in the dictionary becomes the name of the prop.\n * @property {RoutePrecondition[]|RoutePrecondition} [conditions] - Route pre-conditions to add, which will be executed in order\n */\n\n/**\n * Wraps a component to enable multiple capabilities:\n * 1. Using dynamically-imported component, with (e.g. `{asyncComponent: () => import('Foo.svelte')}`), which also allows bundlers to do code-splitting.\n * 2. Adding route pre-conditions (e.g. `{conditions: [...]}`)\n * 3. Adding static props that are passed to the component\n * 4. Adding custom userData, which is passed to route events (e.g. route loaded events) or to route pre-conditions (e.g. `{userData: {foo: 'bar}}`)\n * \n * @param {WrapOptions} args - Arguments object\n * @returns {WrappedComponent} Wrapped component\n */\nexport function wrap(args) {\n if (!args) {\n throw Error('Parameter args is required')\n }\n\n // We need to have one and only one of component and asyncComponent\n // This does a \"XNOR\"\n if (!args.component == !args.asyncComponent) {\n throw Error('One and only one of component and asyncComponent is required')\n }\n\n // If the component is not async, wrap it into a function returning a Promise\n if (args.component) {\n args.asyncComponent = () => Promise.resolve(args.component)\n }\n\n // Parameter asyncComponent and each item of conditions must be functions\n if (typeof args.asyncComponent != 'function') {\n throw Error('Parameter asyncComponent must be a function')\n }\n if (args.conditions) {\n // Ensure it's an array\n if (!Array.isArray(args.conditions)) {\n args.conditions = [args.conditions]\n }\n for (let i = 0; i < args.conditions.length; i++) {\n if (!args.conditions[i] || typeof args.conditions[i] != 'function') {\n throw Error('Invalid parameter conditions[' + i + ']')\n }\n }\n }\n\n // Check if we have a placeholder component\n if (args.loadingComponent) {\n args.asyncComponent.loading = args.loadingComponent\n args.asyncComponent.loadingParams = args.loadingParams || undefined\n }\n\n // Returns an object that contains all the functions to execute too\n // The _sveltesparouter flag is to confirm the object was created by this router\n const obj = {\n component: args.asyncComponent,\n userData: args.userData,\n conditions: (args.conditions && args.conditions.length) ? args.conditions : undefined,\n props: (args.props && Object.keys(args.props).length) ? args.props : {},\n _sveltesparouter: true\n }\n\n return obj\n}\n\nexport default wrap\n","import { noop, safe_not_equal, subscribe, run_all, is_function } from '../internal/index.mjs';\nexport { get_store_value as get } from '../internal/index.mjs';\n\nconst subscriber_queue = [];\n/**\n * Creates a `Readable` store that allows reading by subscription.\n * @param value initial value\n * @param {StartStopNotifier}start start and stop notifications for subscriptions\n */\nfunction readable(value, start) {\n return {\n subscribe: writable(value, start).subscribe\n };\n}\n/**\n * Create a `Writable` store that allows both updating and reading by subscription.\n * @param {*=}value initial value\n * @param {StartStopNotifier=}start start and stop notifications for subscriptions\n */\nfunction writable(value, start = noop) {\n let stop;\n const subscribers = new Set();\n function set(new_value) {\n if (safe_not_equal(value, new_value)) {\n value = new_value;\n if (stop) { // store is ready\n const run_queue = !subscriber_queue.length;\n for (const subscriber of subscribers) {\n subscriber[1]();\n subscriber_queue.push(subscriber, value);\n }\n if (run_queue) {\n for (let i = 0; i < subscriber_queue.length; i += 2) {\n subscriber_queue[i][0](subscriber_queue[i + 1]);\n }\n subscriber_queue.length = 0;\n }\n }\n }\n }\n function update(fn) {\n set(fn(value));\n }\n function subscribe(run, invalidate = noop) {\n const subscriber = [run, invalidate];\n subscribers.add(subscriber);\n if (subscribers.size === 1) {\n stop = start(set) || noop;\n }\n run(value);\n return () => {\n subscribers.delete(subscriber);\n if (subscribers.size === 0) {\n stop();\n stop = null;\n }\n };\n }\n return { set, update, subscribe };\n}\nfunction derived(stores, fn, initial_value) {\n const single = !Array.isArray(stores);\n const stores_array = single\n ? [stores]\n : stores;\n const auto = fn.length < 2;\n return readable(initial_value, (set) => {\n let inited = false;\n const values = [];\n let pending = 0;\n let cleanup = noop;\n const sync = () => {\n if (pending) {\n return;\n }\n cleanup();\n const result = fn(single ? values[0] : values, set);\n if (auto) {\n set(result);\n }\n else {\n cleanup = is_function(result) ? result : noop;\n }\n };\n const unsubscribers = stores_array.map((store, i) => subscribe(store, (value) => {\n values[i] = value;\n pending &= ~(1 << i);\n if (inited) {\n sync();\n }\n }, () => {\n pending |= (1 << i);\n }));\n inited = true;\n sync();\n return function stop() {\n run_all(unsubscribers);\n cleanup();\n };\n });\n}\n\nexport { derived, readable, writable };\n","export function parse(str, loose) {\n\tif (str instanceof RegExp) return { keys:false, pattern:str };\n\tvar c, o, tmp, ext, keys=[], pattern='', arr = str.split('/');\n\tarr[0] || arr.shift();\n\n\twhile (tmp = arr.shift()) {\n\t\tc = tmp[0];\n\t\tif (c === '*') {\n\t\t\tkeys.push('wild');\n\t\t\tpattern += '/(.*)';\n\t\t} else if (c === ':') {\n\t\t\to = tmp.indexOf('?', 1);\n\t\t\text = tmp.indexOf('.', 1);\n\t\t\tkeys.push( tmp.substring(1, !!~o ? o : !!~ext ? ext : tmp.length) );\n\t\t\tpattern += !!~o && !~ext ? '(?:/([^/]+?))?' : '/([^/]+?)';\n\t\t\tif (!!~ext) pattern += (!!~o ? '?' : '') + '\\\\' + tmp.substring(ext);\n\t\t} else {\n\t\t\tpattern += '/' + tmp;\n\t\t}\n\t}\n\n\treturn {\n\t\tkeys: keys,\n\t\tpattern: new RegExp('^' + pattern + (loose ? '(?=$|\\/)' : '\\/?$'), 'i')\n\t};\n}\n\nvar RGX = /*#__PURE__*/ /(\\/|^)([:*][^/]*?)(\\?)?(?=[/.]|$)/g;\n\n// error if key missing?\nexport function inject(route, values) {\n\treturn route.replace(RGX, (x, lead, key, optional) => {\n\t\tx = values[key=='*' ? 'wild' : key.substring(1)];\n\t\treturn x ? '/'+x : (optional || key=='*') ? '' : '/' + key;\n\t});\n}\n","\n\n{#if componentParams}\n \n{:else}\n \n{/if}\n\n\n","\n\n

We are sorry!

\n

This isn't a url that we use.

\n\n

Go home you're drunk.

\n\n

Take me home →

\n
\n\n","import {parse} from 'regexparam'\nimport {loc} from './Router.svelte'\n\n// List of nodes to update\nconst nodes = []\n\n// Current location\nlet location\n\n// Function that updates all nodes marking the active ones\nfunction checkActive(el) {\n const matchesLocation = el.pattern.test(location)\n toggleClasses(el, el.className, matchesLocation)\n toggleClasses(el, el.inactiveClassName, !matchesLocation)\n}\n\nfunction toggleClasses(el, className, shouldAdd) {\n (className || '').split(' ').forEach((cls) => {\n if (!cls) {\n return\n }\n // Remove the class firsts\n el.node.classList.remove(cls)\n\n // If the pattern doesn't match, then set the class\n if (shouldAdd) {\n el.node.classList.add(cls)\n }\n })\n}\n\n// Listen to changes in the location\nloc.subscribe((value) => {\n // Update the location\n location = value.location + (value.querystring ? '?' + value.querystring : '')\n\n // Update all nodes\n nodes.map(checkActive)\n})\n\n/**\n * @typedef {Object} ActiveOptions\n * @property {string|RegExp} [path] - Path expression that makes the link active when matched (must start with '/' or '*'); default is the link's href\n * @property {string} [className] - CSS class to apply to the element when active; default value is \"active\"\n */\n\n/**\n * Svelte Action for automatically adding the \"active\" class to elements (links, or any other DOM element) when the current location matches a certain path.\n * \n * @param {HTMLElement} node - The target node (automatically set by Svelte)\n * @param {ActiveOptions|string|RegExp} [opts] - Can be an object of type ActiveOptions, or a string (or regular expressions) representing ActiveOptions.path.\n * @returns {{destroy: function(): void}} Destroy function\n */\nexport default function active(node, opts) {\n // Check options\n if (opts && (typeof opts == 'string' || (typeof opts == 'object' && opts instanceof RegExp))) {\n // Interpret strings and regular expressions as opts.path\n opts = {\n path: opts\n }\n }\n else {\n // Ensure opts is a dictionary\n opts = opts || {}\n }\n\n // Path defaults to link target\n if (!opts.path && node.hasAttribute('href')) {\n opts.path = node.getAttribute('href')\n if (opts.path && opts.path.length > 1 && opts.path.charAt(0) == '#') {\n opts.path = opts.path.substring(1)\n }\n }\n\n // Default class name\n if (!opts.className) {\n opts.className = 'active'\n }\n\n // If path is a string, it must start with '/' or '*'\n if (!opts.path || \n typeof opts.path == 'string' && (opts.path.length < 1 || (opts.path.charAt(0) != '/' && opts.path.charAt(0) != '*'))\n ) {\n throw Error('Invalid value for \"path\" argument')\n }\n\n // If path is not a regular expression already, make it\n const {pattern} = typeof opts.path == 'string' ?\n parse(opts.path) :\n {pattern: opts.path}\n\n // Add the node to the list\n const el = {\n node,\n className: opts.className,\n inactiveClassName: opts.inactiveClassName,\n pattern\n }\n nodes.push(el)\n\n // Trigger the action right away\n checkActive(el)\n\n return {\n // When the element is destroyed, remove it from the list\n destroy() {\n nodes.splice(nodes.indexOf(el), 1)\n }\n }\n}\n","\n\n\n\n
\n \"Potato (push('/'))}>\n

Potato Pong

\n \n
\n\n\n\n\n\n\n\n","\n\n\n
\n {#if user !== undefined}\n
\n \n \n \"default\n
{user.username}
\n
Rank: \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {rank}\n \n
\n
\n

Match Statistics

\n

Total: {user.stats.totalGame}

\n

Victories: {user.stats.winGame}

\n

Losses: {user.stats.loseGame}

\n

Draws: {user.stats.drawGame}

\n
\n
\n {/if}\n
\n\n\n\n","\n\n
\n\t

temp, for testing :

\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n
\n","\n\n\n
\n\t\n
\n\n\n\n","\n\n\n\n\n\n\n\n\n","\n\n\n
\n\t\n
\n\n\n\n\n","\n\n\n
\n\n\t\n\t\n\n\t\n\t\n\n\t\n\t\n\n\t\n\t
\n\t\t

list of your rooms :

\n\t\t
\n\t\t\t
\n\t\t\t\t

/ you have no chat room yet /

\n\t\t\t
\n\t\t\t\n\t\t\t\n\t\t
\n\t
\n\n
\n\n\n\n","\n\n
\n\t

{name}

\n\t

\n
\n\n\n\n","const PACKET_TYPES = Object.create(null); // no Map = no polyfill\nPACKET_TYPES[\"open\"] = \"0\";\nPACKET_TYPES[\"close\"] = \"1\";\nPACKET_TYPES[\"ping\"] = \"2\";\nPACKET_TYPES[\"pong\"] = \"3\";\nPACKET_TYPES[\"message\"] = \"4\";\nPACKET_TYPES[\"upgrade\"] = \"5\";\nPACKET_TYPES[\"noop\"] = \"6\";\nconst PACKET_TYPES_REVERSE = Object.create(null);\nObject.keys(PACKET_TYPES).forEach(key => {\n PACKET_TYPES_REVERSE[PACKET_TYPES[key]] = key;\n});\nconst ERROR_PACKET = { type: \"error\", data: \"parser error\" };\nexport { PACKET_TYPES, PACKET_TYPES_REVERSE, ERROR_PACKET };\n","import { PACKET_TYPES } from \"./commons.js\";\nconst withNativeBlob = typeof Blob === \"function\" ||\n (typeof Blob !== \"undefined\" &&\n Object.prototype.toString.call(Blob) === \"[object BlobConstructor]\");\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\n// ArrayBuffer.isView method is not defined in IE10\nconst isView = obj => {\n return typeof ArrayBuffer.isView === \"function\"\n ? ArrayBuffer.isView(obj)\n : obj && obj.buffer instanceof ArrayBuffer;\n};\nconst encodePacket = ({ type, data }, supportsBinary, callback) => {\n if (withNativeBlob && data instanceof Blob) {\n if (supportsBinary) {\n return callback(data);\n }\n else {\n return encodeBlobAsBase64(data, callback);\n }\n }\n else if (withNativeArrayBuffer &&\n (data instanceof ArrayBuffer || isView(data))) {\n if (supportsBinary) {\n return callback(data);\n }\n else {\n return encodeBlobAsBase64(new Blob([data]), callback);\n }\n }\n // plain string\n return callback(PACKET_TYPES[type] + (data || \"\"));\n};\nconst encodeBlobAsBase64 = (data, callback) => {\n const fileReader = new FileReader();\n fileReader.onload = function () {\n const content = fileReader.result.split(\",\")[1];\n callback(\"b\" + content);\n };\n return fileReader.readAsDataURL(data);\n};\nexport default encodePacket;\n","const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nconst lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (let i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\nexport const encode = (arraybuffer) => {\n let bytes = new Uint8Array(arraybuffer), i, len = bytes.length, base64 = '';\n for (i = 0; i < len; i += 3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += chars[bytes[i + 2] & 63];\n }\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + '=';\n }\n else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + '==';\n }\n return base64;\n};\nexport const decode = (base64) => {\n let bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;\n if (base64[base64.length - 1] === '=') {\n bufferLength--;\n if (base64[base64.length - 2] === '=') {\n bufferLength--;\n }\n }\n const arraybuffer = new ArrayBuffer(bufferLength), bytes = new Uint8Array(arraybuffer);\n for (i = 0; i < len; i += 4) {\n encoded1 = lookup[base64.charCodeAt(i)];\n encoded2 = lookup[base64.charCodeAt(i + 1)];\n encoded3 = lookup[base64.charCodeAt(i + 2)];\n encoded4 = lookup[base64.charCodeAt(i + 3)];\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n return arraybuffer;\n};\n","import { ERROR_PACKET, PACKET_TYPES_REVERSE } from \"./commons.js\";\nimport { decode } from \"./contrib/base64-arraybuffer.js\";\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst decodePacket = (encodedPacket, binaryType) => {\n if (typeof encodedPacket !== \"string\") {\n return {\n type: \"message\",\n data: mapBinary(encodedPacket, binaryType)\n };\n }\n const type = encodedPacket.charAt(0);\n if (type === \"b\") {\n return {\n type: \"message\",\n data: decodeBase64Packet(encodedPacket.substring(1), binaryType)\n };\n }\n const packetType = PACKET_TYPES_REVERSE[type];\n if (!packetType) {\n return ERROR_PACKET;\n }\n return encodedPacket.length > 1\n ? {\n type: PACKET_TYPES_REVERSE[type],\n data: encodedPacket.substring(1)\n }\n : {\n type: PACKET_TYPES_REVERSE[type]\n };\n};\nconst decodeBase64Packet = (data, binaryType) => {\n if (withNativeArrayBuffer) {\n const decoded = decode(data);\n return mapBinary(decoded, binaryType);\n }\n else {\n return { base64: true, data }; // fallback for old browsers\n }\n};\nconst mapBinary = (data, binaryType) => {\n switch (binaryType) {\n case \"blob\":\n return data instanceof ArrayBuffer ? new Blob([data]) : data;\n case \"arraybuffer\":\n default:\n return data; // assuming the data is already an ArrayBuffer\n }\n};\nexport default decodePacket;\n","import encodePacket from \"./encodePacket.js\";\nimport decodePacket from \"./decodePacket.js\";\nconst SEPARATOR = String.fromCharCode(30); // see https://en.wikipedia.org/wiki/Delimiter#ASCII_delimited_text\nconst encodePayload = (packets, callback) => {\n // some packets may be added to the array while encoding, so the initial length must be saved\n const length = packets.length;\n const encodedPackets = new Array(length);\n let count = 0;\n packets.forEach((packet, i) => {\n // force base64 encoding for binary packets\n encodePacket(packet, false, encodedPacket => {\n encodedPackets[i] = encodedPacket;\n if (++count === length) {\n callback(encodedPackets.join(SEPARATOR));\n }\n });\n });\n};\nconst decodePayload = (encodedPayload, binaryType) => {\n const encodedPackets = encodedPayload.split(SEPARATOR);\n const packets = [];\n for (let i = 0; i < encodedPackets.length; i++) {\n const decodedPacket = decodePacket(encodedPackets[i], binaryType);\n packets.push(decodedPacket);\n if (decodedPacket.type === \"error\") {\n break;\n }\n }\n return packets;\n};\nexport const protocol = 4;\nexport { encodePacket, encodePayload, decodePacket, decodePayload };\n","/**\n * Initialize a new `Emitter`.\n *\n * @api public\n */\n\nexport function Emitter(obj) {\n if (obj) return mixin(obj);\n}\n\n/**\n * Mixin the emitter properties.\n *\n * @param {Object} obj\n * @return {Object}\n * @api private\n */\n\nfunction mixin(obj) {\n for (var key in Emitter.prototype) {\n obj[key] = Emitter.prototype[key];\n }\n return obj;\n}\n\n/**\n * Listen on the given `event` with `fn`.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.on =\nEmitter.prototype.addEventListener = function(event, fn){\n this._callbacks = this._callbacks || {};\n (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\n .push(fn);\n return this;\n};\n\n/**\n * Adds an `event` listener that will be invoked a single\n * time then automatically removed.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.once = function(event, fn){\n function on() {\n this.off(event, on);\n fn.apply(this, arguments);\n }\n\n on.fn = fn;\n this.on(event, on);\n return this;\n};\n\n/**\n * Remove the given callback for `event` or all\n * registered callbacks.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.off =\nEmitter.prototype.removeListener =\nEmitter.prototype.removeAllListeners =\nEmitter.prototype.removeEventListener = function(event, fn){\n this._callbacks = this._callbacks || {};\n\n // all\n if (0 == arguments.length) {\n this._callbacks = {};\n return this;\n }\n\n // specific event\n var callbacks = this._callbacks['$' + event];\n if (!callbacks) return this;\n\n // remove all handlers\n if (1 == arguments.length) {\n delete this._callbacks['$' + event];\n return this;\n }\n\n // remove specific handler\n var cb;\n for (var i = 0; i < callbacks.length; i++) {\n cb = callbacks[i];\n if (cb === fn || cb.fn === fn) {\n callbacks.splice(i, 1);\n break;\n }\n }\n\n // Remove event specific arrays for event types that no\n // one is subscribed for to avoid memory leak.\n if (callbacks.length === 0) {\n delete this._callbacks['$' + event];\n }\n\n return this;\n};\n\n/**\n * Emit `event` with the given args.\n *\n * @param {String} event\n * @param {Mixed} ...\n * @return {Emitter}\n */\n\nEmitter.prototype.emit = function(event){\n this._callbacks = this._callbacks || {};\n\n var args = new Array(arguments.length - 1)\n , callbacks = this._callbacks['$' + event];\n\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n\n if (callbacks) {\n callbacks = callbacks.slice(0);\n for (var i = 0, len = callbacks.length; i < len; ++i) {\n callbacks[i].apply(this, args);\n }\n }\n\n return this;\n};\n\n// alias used for reserved events (protected method)\nEmitter.prototype.emitReserved = Emitter.prototype.emit;\n\n/**\n * Return array of callbacks for `event`.\n *\n * @param {String} event\n * @return {Array}\n * @api public\n */\n\nEmitter.prototype.listeners = function(event){\n this._callbacks = this._callbacks || {};\n return this._callbacks['$' + event] || [];\n};\n\n/**\n * Check if this emitter has `event` handlers.\n *\n * @param {String} event\n * @return {Boolean}\n * @api public\n */\n\nEmitter.prototype.hasListeners = function(event){\n return !! this.listeners(event).length;\n};\n","export const globalThisShim = (() => {\n if (typeof self !== \"undefined\") {\n return self;\n }\n else if (typeof window !== \"undefined\") {\n return window;\n }\n else {\n return Function(\"return this\")();\n }\n})();\n","import { globalThisShim as globalThis } from \"./globalThis.js\";\nexport function pick(obj, ...attr) {\n return attr.reduce((acc, k) => {\n if (obj.hasOwnProperty(k)) {\n acc[k] = obj[k];\n }\n return acc;\n }, {});\n}\n// Keep a reference to the real timeout functions so they can be used when overridden\nconst NATIVE_SET_TIMEOUT = setTimeout;\nconst NATIVE_CLEAR_TIMEOUT = clearTimeout;\nexport function installTimerFunctions(obj, opts) {\n if (opts.useNativeTimers) {\n obj.setTimeoutFn = NATIVE_SET_TIMEOUT.bind(globalThis);\n obj.clearTimeoutFn = NATIVE_CLEAR_TIMEOUT.bind(globalThis);\n }\n else {\n obj.setTimeoutFn = setTimeout.bind(globalThis);\n obj.clearTimeoutFn = clearTimeout.bind(globalThis);\n }\n}\n// base64 encoded buffers are about 33% bigger (https://en.wikipedia.org/wiki/Base64)\nconst BASE64_OVERHEAD = 1.33;\n// we could also have used `new Blob([obj]).size`, but it isn't supported in IE9\nexport function byteLength(obj) {\n if (typeof obj === \"string\") {\n return utf8Length(obj);\n }\n // arraybuffer or blob\n return Math.ceil((obj.byteLength || obj.size) * BASE64_OVERHEAD);\n}\nfunction utf8Length(str) {\n let c = 0, length = 0;\n for (let i = 0, l = str.length; i < l; i++) {\n c = str.charCodeAt(i);\n if (c < 0x80) {\n length += 1;\n }\n else if (c < 0x800) {\n length += 2;\n }\n else if (c < 0xd800 || c >= 0xe000) {\n length += 3;\n }\n else {\n i++;\n length += 4;\n }\n }\n return length;\n}\n","import { decodePacket } from \"engine.io-parser\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions } from \"./util.js\";\nclass TransportError extends Error {\n constructor(reason, description, context) {\n super(reason);\n this.description = description;\n this.context = context;\n this.type = \"TransportError\";\n }\n}\nexport class Transport extends Emitter {\n /**\n * Transport abstract constructor.\n *\n * @param {Object} options.\n * @api private\n */\n constructor(opts) {\n super();\n this.writable = false;\n installTimerFunctions(this, opts);\n this.opts = opts;\n this.query = opts.query;\n this.readyState = \"\";\n this.socket = opts.socket;\n }\n /**\n * Emits an error.\n *\n * @param {String} reason\n * @param description\n * @param context - the error context\n * @return {Transport} for chaining\n * @api protected\n */\n onError(reason, description, context) {\n super.emitReserved(\"error\", new TransportError(reason, description, context));\n return this;\n }\n /**\n * Opens the transport.\n *\n * @api public\n */\n open() {\n if (\"closed\" === this.readyState || \"\" === this.readyState) {\n this.readyState = \"opening\";\n this.doOpen();\n }\n return this;\n }\n /**\n * Closes the transport.\n *\n * @api public\n */\n close() {\n if (\"opening\" === this.readyState || \"open\" === this.readyState) {\n this.doClose();\n this.onClose();\n }\n return this;\n }\n /**\n * Sends multiple packets.\n *\n * @param {Array} packets\n * @api public\n */\n send(packets) {\n if (\"open\" === this.readyState) {\n this.write(packets);\n }\n else {\n // this might happen if the transport was silently closed in the beforeunload event handler\n }\n }\n /**\n * Called upon open\n *\n * @api protected\n */\n onOpen() {\n this.readyState = \"open\";\n this.writable = true;\n super.emitReserved(\"open\");\n }\n /**\n * Called with data.\n *\n * @param {String} data\n * @api protected\n */\n onData(data) {\n const packet = decodePacket(data, this.socket.binaryType);\n this.onPacket(packet);\n }\n /**\n * Called with a decoded packet.\n *\n * @api protected\n */\n onPacket(packet) {\n super.emitReserved(\"packet\", packet);\n }\n /**\n * Called upon close.\n *\n * @api protected\n */\n onClose(details) {\n this.readyState = \"closed\";\n super.emitReserved(\"close\", details);\n }\n}\n","// imported from https://github.com/unshiftio/yeast\n'use strict';\nconst alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split(''), length = 64, map = {};\nlet seed = 0, i = 0, prev;\n/**\n * Return a string representing the specified number.\n *\n * @param {Number} num The number to convert.\n * @returns {String} The string representation of the number.\n * @api public\n */\nexport function encode(num) {\n let encoded = '';\n do {\n encoded = alphabet[num % length] + encoded;\n num = Math.floor(num / length);\n } while (num > 0);\n return encoded;\n}\n/**\n * Return the integer value specified by the given string.\n *\n * @param {String} str The string to convert.\n * @returns {Number} The integer value represented by the string.\n * @api public\n */\nexport function decode(str) {\n let decoded = 0;\n for (i = 0; i < str.length; i++) {\n decoded = decoded * length + map[str.charAt(i)];\n }\n return decoded;\n}\n/**\n * Yeast: A tiny growing id generator.\n *\n * @returns {String} A unique id.\n * @api public\n */\nexport function yeast() {\n const now = encode(+new Date());\n if (now !== prev)\n return seed = 0, prev = now;\n return now + '.' + encode(seed++);\n}\n//\n// Map each character to its index.\n//\nfor (; i < length; i++)\n map[alphabet[i]] = i;\n","// imported from https://github.com/galkn/querystring\n/**\n * Compiles a querystring\n * Returns string representation of the object\n *\n * @param {Object}\n * @api private\n */\nexport function encode(obj) {\n let str = '';\n for (let i in obj) {\n if (obj.hasOwnProperty(i)) {\n if (str.length)\n str += '&';\n str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\n }\n }\n return str;\n}\n/**\n * Parses a simple querystring into an object\n *\n * @param {String} qs\n * @api private\n */\nexport function decode(qs) {\n let qry = {};\n let pairs = qs.split('&');\n for (let i = 0, l = pairs.length; i < l; i++) {\n let pair = pairs[i].split('=');\n qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n }\n return qry;\n}\n","// imported from https://github.com/component/has-cors\nlet value = false;\ntry {\n value = typeof XMLHttpRequest !== 'undefined' &&\n 'withCredentials' in new XMLHttpRequest();\n}\ncatch (err) {\n // if XMLHttp support is disabled in IE then it will throw\n // when trying to create\n}\nexport const hasCORS = value;\n","// browser shim for xmlhttprequest module\nimport { hasCORS } from \"../contrib/has-cors.js\";\nimport { globalThisShim as globalThis } from \"../globalThis.js\";\nexport function XHR(opts) {\n const xdomain = opts.xdomain;\n // XMLHttpRequest can be disabled on IE\n try {\n if (\"undefined\" !== typeof XMLHttpRequest && (!xdomain || hasCORS)) {\n return new XMLHttpRequest();\n }\n }\n catch (e) { }\n if (!xdomain) {\n try {\n return new globalThis[[\"Active\"].concat(\"Object\").join(\"X\")](\"Microsoft.XMLHTTP\");\n }\n catch (e) { }\n }\n}\n","import { Transport } from \"../transport.js\";\nimport { yeast } from \"../contrib/yeast.js\";\nimport { encode } from \"../contrib/parseqs.js\";\nimport { encodePayload, decodePayload } from \"engine.io-parser\";\nimport { XHR as XMLHttpRequest } from \"./xmlhttprequest.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions, pick } from \"../util.js\";\nimport { globalThisShim as globalThis } from \"../globalThis.js\";\nfunction empty() { }\nconst hasXHR2 = (function () {\n const xhr = new XMLHttpRequest({\n xdomain: false\n });\n return null != xhr.responseType;\n})();\nexport class Polling extends Transport {\n /**\n * XHR Polling constructor.\n *\n * @param {Object} opts\n * @api public\n */\n constructor(opts) {\n super(opts);\n this.polling = false;\n if (typeof location !== \"undefined\") {\n const isSSL = \"https:\" === location.protocol;\n let port = location.port;\n // some user agents have empty `location.port`\n if (!port) {\n port = isSSL ? \"443\" : \"80\";\n }\n this.xd =\n (typeof location !== \"undefined\" &&\n opts.hostname !== location.hostname) ||\n port !== opts.port;\n this.xs = opts.secure !== isSSL;\n }\n /**\n * XHR supports binary\n */\n const forceBase64 = opts && opts.forceBase64;\n this.supportsBinary = hasXHR2 && !forceBase64;\n }\n /**\n * Transport name.\n */\n get name() {\n return \"polling\";\n }\n /**\n * Opens the socket (triggers polling). We write a PING message to determine\n * when the transport is open.\n *\n * @api private\n */\n doOpen() {\n this.poll();\n }\n /**\n * Pauses polling.\n *\n * @param {Function} callback upon buffers are flushed and transport is paused\n * @api private\n */\n pause(onPause) {\n this.readyState = \"pausing\";\n const pause = () => {\n this.readyState = \"paused\";\n onPause();\n };\n if (this.polling || !this.writable) {\n let total = 0;\n if (this.polling) {\n total++;\n this.once(\"pollComplete\", function () {\n --total || pause();\n });\n }\n if (!this.writable) {\n total++;\n this.once(\"drain\", function () {\n --total || pause();\n });\n }\n }\n else {\n pause();\n }\n }\n /**\n * Starts polling cycle.\n *\n * @api public\n */\n poll() {\n this.polling = true;\n this.doPoll();\n this.emitReserved(\"poll\");\n }\n /**\n * Overloads onData to detect payloads.\n *\n * @api private\n */\n onData(data) {\n const callback = packet => {\n // if its the first message we consider the transport open\n if (\"opening\" === this.readyState && packet.type === \"open\") {\n this.onOpen();\n }\n // if its a close packet, we close the ongoing requests\n if (\"close\" === packet.type) {\n this.onClose({ description: \"transport closed by the server\" });\n return false;\n }\n // otherwise bypass onData and handle the message\n this.onPacket(packet);\n };\n // decode payload\n decodePayload(data, this.socket.binaryType).forEach(callback);\n // if an event did not trigger closing\n if (\"closed\" !== this.readyState) {\n // if we got data we're not polling\n this.polling = false;\n this.emitReserved(\"pollComplete\");\n if (\"open\" === this.readyState) {\n this.poll();\n }\n else {\n }\n }\n }\n /**\n * For polling, send a close packet.\n *\n * @api private\n */\n doClose() {\n const close = () => {\n this.write([{ type: \"close\" }]);\n };\n if (\"open\" === this.readyState) {\n close();\n }\n else {\n // in case we're trying to close while\n // handshaking is in progress (GH-164)\n this.once(\"open\", close);\n }\n }\n /**\n * Writes a packets payload.\n *\n * @param {Array} data packets\n * @param {Function} drain callback\n * @api private\n */\n write(packets) {\n this.writable = false;\n encodePayload(packets, data => {\n this.doWrite(data, () => {\n this.writable = true;\n this.emitReserved(\"drain\");\n });\n });\n }\n /**\n * Generates uri for connection.\n *\n * @api private\n */\n uri() {\n let query = this.query || {};\n const schema = this.opts.secure ? \"https\" : \"http\";\n let port = \"\";\n // cache busting is forced\n if (false !== this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n if (!this.supportsBinary && !query.sid) {\n query.b64 = 1;\n }\n // avoid port if default for schema\n if (this.opts.port &&\n ((\"https\" === schema && Number(this.opts.port) !== 443) ||\n (\"http\" === schema && Number(this.opts.port) !== 80))) {\n port = \":\" + this.opts.port;\n }\n const encodedQuery = encode(query);\n const ipv6 = this.opts.hostname.indexOf(\":\") !== -1;\n return (schema +\n \"://\" +\n (ipv6 ? \"[\" + this.opts.hostname + \"]\" : this.opts.hostname) +\n port +\n this.opts.path +\n (encodedQuery.length ? \"?\" + encodedQuery : \"\"));\n }\n /**\n * Creates a request.\n *\n * @param {String} method\n * @api private\n */\n request(opts = {}) {\n Object.assign(opts, { xd: this.xd, xs: this.xs }, this.opts);\n return new Request(this.uri(), opts);\n }\n /**\n * Sends data.\n *\n * @param {String} data to send.\n * @param {Function} called upon flush.\n * @api private\n */\n doWrite(data, fn) {\n const req = this.request({\n method: \"POST\",\n data: data\n });\n req.on(\"success\", fn);\n req.on(\"error\", (xhrStatus, context) => {\n this.onError(\"xhr post error\", xhrStatus, context);\n });\n }\n /**\n * Starts a poll cycle.\n *\n * @api private\n */\n doPoll() {\n const req = this.request();\n req.on(\"data\", this.onData.bind(this));\n req.on(\"error\", (xhrStatus, context) => {\n this.onError(\"xhr poll error\", xhrStatus, context);\n });\n this.pollXhr = req;\n }\n}\nexport class Request extends Emitter {\n /**\n * Request constructor\n *\n * @param {Object} options\n * @api public\n */\n constructor(uri, opts) {\n super();\n installTimerFunctions(this, opts);\n this.opts = opts;\n this.method = opts.method || \"GET\";\n this.uri = uri;\n this.async = false !== opts.async;\n this.data = undefined !== opts.data ? opts.data : null;\n this.create();\n }\n /**\n * Creates the XHR object and sends the request.\n *\n * @api private\n */\n create() {\n const opts = pick(this.opts, \"agent\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"autoUnref\");\n opts.xdomain = !!this.opts.xd;\n opts.xscheme = !!this.opts.xs;\n const xhr = (this.xhr = new XMLHttpRequest(opts));\n try {\n xhr.open(this.method, this.uri, this.async);\n try {\n if (this.opts.extraHeaders) {\n xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);\n for (let i in this.opts.extraHeaders) {\n if (this.opts.extraHeaders.hasOwnProperty(i)) {\n xhr.setRequestHeader(i, this.opts.extraHeaders[i]);\n }\n }\n }\n }\n catch (e) { }\n if (\"POST\" === this.method) {\n try {\n xhr.setRequestHeader(\"Content-type\", \"text/plain;charset=UTF-8\");\n }\n catch (e) { }\n }\n try {\n xhr.setRequestHeader(\"Accept\", \"*/*\");\n }\n catch (e) { }\n // ie6 check\n if (\"withCredentials\" in xhr) {\n xhr.withCredentials = this.opts.withCredentials;\n }\n if (this.opts.requestTimeout) {\n xhr.timeout = this.opts.requestTimeout;\n }\n xhr.onreadystatechange = () => {\n if (4 !== xhr.readyState)\n return;\n if (200 === xhr.status || 1223 === xhr.status) {\n this.onLoad();\n }\n else {\n // make sure the `error` event handler that's user-set\n // does not throw in the same tick and gets caught here\n this.setTimeoutFn(() => {\n this.onError(typeof xhr.status === \"number\" ? xhr.status : 0);\n }, 0);\n }\n };\n xhr.send(this.data);\n }\n catch (e) {\n // Need to defer since .create() is called directly from the constructor\n // and thus the 'error' event can only be only bound *after* this exception\n // occurs. Therefore, also, we cannot throw here at all.\n this.setTimeoutFn(() => {\n this.onError(e);\n }, 0);\n return;\n }\n if (typeof document !== \"undefined\") {\n this.index = Request.requestsCount++;\n Request.requests[this.index] = this;\n }\n }\n /**\n * Called upon error.\n *\n * @api private\n */\n onError(err) {\n this.emitReserved(\"error\", err, this.xhr);\n this.cleanup(true);\n }\n /**\n * Cleans up house.\n *\n * @api private\n */\n cleanup(fromError) {\n if (\"undefined\" === typeof this.xhr || null === this.xhr) {\n return;\n }\n this.xhr.onreadystatechange = empty;\n if (fromError) {\n try {\n this.xhr.abort();\n }\n catch (e) { }\n }\n if (typeof document !== \"undefined\") {\n delete Request.requests[this.index];\n }\n this.xhr = null;\n }\n /**\n * Called upon load.\n *\n * @api private\n */\n onLoad() {\n const data = this.xhr.responseText;\n if (data !== null) {\n this.emitReserved(\"data\", data);\n this.emitReserved(\"success\");\n this.cleanup();\n }\n }\n /**\n * Aborts the request.\n *\n * @api public\n */\n abort() {\n this.cleanup();\n }\n}\nRequest.requestsCount = 0;\nRequest.requests = {};\n/**\n * Aborts pending requests when unloading the window. This is needed to prevent\n * memory leaks (e.g. when using IE) and to ensure that no spurious error is\n * emitted.\n */\nif (typeof document !== \"undefined\") {\n // @ts-ignore\n if (typeof attachEvent === \"function\") {\n // @ts-ignore\n attachEvent(\"onunload\", unloadHandler);\n }\n else if (typeof addEventListener === \"function\") {\n const terminationEvent = \"onpagehide\" in globalThis ? \"pagehide\" : \"unload\";\n addEventListener(terminationEvent, unloadHandler, false);\n }\n}\nfunction unloadHandler() {\n for (let i in Request.requests) {\n if (Request.requests.hasOwnProperty(i)) {\n Request.requests[i].abort();\n }\n }\n}\n","import { globalThisShim as globalThis } from \"../globalThis.js\";\nexport const nextTick = (() => {\n const isPromiseAvailable = typeof Promise === \"function\" && typeof Promise.resolve === \"function\";\n if (isPromiseAvailable) {\n return cb => Promise.resolve().then(cb);\n }\n else {\n return (cb, setTimeoutFn) => setTimeoutFn(cb, 0);\n }\n})();\nexport const WebSocket = globalThis.WebSocket || globalThis.MozWebSocket;\nexport const usingBrowserWebSocket = true;\nexport const defaultBinaryType = \"arraybuffer\";\n","import { Transport } from \"../transport.js\";\nimport { encode } from \"../contrib/parseqs.js\";\nimport { yeast } from \"../contrib/yeast.js\";\nimport { pick } from \"../util.js\";\nimport { defaultBinaryType, nextTick, usingBrowserWebSocket, WebSocket } from \"./websocket-constructor.js\";\nimport { encodePacket } from \"engine.io-parser\";\n// detect ReactNative environment\nconst isReactNative = typeof navigator !== \"undefined\" &&\n typeof navigator.product === \"string\" &&\n navigator.product.toLowerCase() === \"reactnative\";\nexport class WS extends Transport {\n /**\n * WebSocket transport constructor.\n *\n * @api {Object} connection options\n * @api public\n */\n constructor(opts) {\n super(opts);\n this.supportsBinary = !opts.forceBase64;\n }\n /**\n * Transport name.\n *\n * @api public\n */\n get name() {\n return \"websocket\";\n }\n /**\n * Opens socket.\n *\n * @api private\n */\n doOpen() {\n if (!this.check()) {\n // let probe timeout\n return;\n }\n const uri = this.uri();\n const protocols = this.opts.protocols;\n // React Native only supports the 'headers' option, and will print a warning if anything else is passed\n const opts = isReactNative\n ? {}\n : pick(this.opts, \"agent\", \"perMessageDeflate\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"localAddress\", \"protocolVersion\", \"origin\", \"maxPayload\", \"family\", \"checkServerIdentity\");\n if (this.opts.extraHeaders) {\n opts.headers = this.opts.extraHeaders;\n }\n try {\n this.ws =\n usingBrowserWebSocket && !isReactNative\n ? protocols\n ? new WebSocket(uri, protocols)\n : new WebSocket(uri)\n : new WebSocket(uri, protocols, opts);\n }\n catch (err) {\n return this.emitReserved(\"error\", err);\n }\n this.ws.binaryType = this.socket.binaryType || defaultBinaryType;\n this.addEventListeners();\n }\n /**\n * Adds event listeners to the socket\n *\n * @api private\n */\n addEventListeners() {\n this.ws.onopen = () => {\n if (this.opts.autoUnref) {\n this.ws._socket.unref();\n }\n this.onOpen();\n };\n this.ws.onclose = closeEvent => this.onClose({\n description: \"websocket connection closed\",\n context: closeEvent\n });\n this.ws.onmessage = ev => this.onData(ev.data);\n this.ws.onerror = e => this.onError(\"websocket error\", e);\n }\n /**\n * Writes data to socket.\n *\n * @param {Array} array of packets.\n * @api private\n */\n write(packets) {\n this.writable = false;\n // encodePacket efficient as it uses WS framing\n // no need for encodePayload\n for (let i = 0; i < packets.length; i++) {\n const packet = packets[i];\n const lastPacket = i === packets.length - 1;\n encodePacket(packet, this.supportsBinary, data => {\n // always create a new object (GH-437)\n const opts = {};\n if (!usingBrowserWebSocket) {\n if (packet.options) {\n opts.compress = packet.options.compress;\n }\n if (this.opts.perMessageDeflate) {\n const len = \n // @ts-ignore\n \"string\" === typeof data ? Buffer.byteLength(data) : data.length;\n if (len < this.opts.perMessageDeflate.threshold) {\n opts.compress = false;\n }\n }\n }\n // Sometimes the websocket has already been closed but the browser didn't\n // have a chance of informing us about it yet, in that case send will\n // throw an error\n try {\n if (usingBrowserWebSocket) {\n // TypeError is thrown when passing the second argument on Safari\n this.ws.send(data);\n }\n else {\n this.ws.send(data, opts);\n }\n }\n catch (e) {\n }\n if (lastPacket) {\n // fake drain\n // defer to next tick to allow Socket to clear writeBuffer\n nextTick(() => {\n this.writable = true;\n this.emitReserved(\"drain\");\n }, this.setTimeoutFn);\n }\n });\n }\n }\n /**\n * Closes socket.\n *\n * @api private\n */\n doClose() {\n if (typeof this.ws !== \"undefined\") {\n this.ws.close();\n this.ws = null;\n }\n }\n /**\n * Generates uri for connection.\n *\n * @api private\n */\n uri() {\n let query = this.query || {};\n const schema = this.opts.secure ? \"wss\" : \"ws\";\n let port = \"\";\n // avoid port if default for schema\n if (this.opts.port &&\n ((\"wss\" === schema && Number(this.opts.port) !== 443) ||\n (\"ws\" === schema && Number(this.opts.port) !== 80))) {\n port = \":\" + this.opts.port;\n }\n // append timestamp to URI\n if (this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n // communicate binary support capabilities\n if (!this.supportsBinary) {\n query.b64 = 1;\n }\n const encodedQuery = encode(query);\n const ipv6 = this.opts.hostname.indexOf(\":\") !== -1;\n return (schema +\n \"://\" +\n (ipv6 ? \"[\" + this.opts.hostname + \"]\" : this.opts.hostname) +\n port +\n this.opts.path +\n (encodedQuery.length ? \"?\" + encodedQuery : \"\"));\n }\n /**\n * Feature detection for WebSocket.\n *\n * @return {Boolean} whether this transport is available.\n * @api public\n */\n check() {\n return !!WebSocket;\n }\n}\n","import { Polling } from \"./polling.js\";\nimport { WS } from \"./websocket.js\";\nexport const transports = {\n websocket: WS,\n polling: Polling\n};\n","// imported from https://github.com/galkn/parseuri\n/**\n * Parses an URI\n *\n * @author Steven Levithan (MIT license)\n * @api private\n */\nconst re = /^(?:(?![^:@]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\nconst parts = [\n 'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\n];\nexport function parse(str) {\n const src = str, b = str.indexOf('['), e = str.indexOf(']');\n if (b != -1 && e != -1) {\n str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\n }\n let m = re.exec(str || ''), uri = {}, i = 14;\n while (i--) {\n uri[parts[i]] = m[i] || '';\n }\n if (b != -1 && e != -1) {\n uri.source = src;\n uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\n uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\n uri.ipv6uri = true;\n }\n uri.pathNames = pathNames(uri, uri['path']);\n uri.queryKey = queryKey(uri, uri['query']);\n return uri;\n}\nfunction pathNames(obj, path) {\n const regx = /\\/{2,9}/g, names = path.replace(regx, \"/\").split(\"/\");\n if (path.slice(0, 1) == '/' || path.length === 0) {\n names.splice(0, 1);\n }\n if (path.slice(-1) == '/') {\n names.splice(names.length - 1, 1);\n }\n return names;\n}\nfunction queryKey(uri, query) {\n const data = {};\n query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) {\n if ($1) {\n data[$1] = $2;\n }\n });\n return data;\n}\n","import { transports } from \"./transports/index.js\";\nimport { installTimerFunctions, byteLength } from \"./util.js\";\nimport { decode } from \"./contrib/parseqs.js\";\nimport { parse } from \"./contrib/parseuri.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { protocol } from \"engine.io-parser\";\nexport class Socket extends Emitter {\n /**\n * Socket constructor.\n *\n * @param {String|Object} uri or options\n * @param {Object} opts - options\n * @api public\n */\n constructor(uri, opts = {}) {\n super();\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = null;\n }\n if (uri) {\n uri = parse(uri);\n opts.hostname = uri.host;\n opts.secure = uri.protocol === \"https\" || uri.protocol === \"wss\";\n opts.port = uri.port;\n if (uri.query)\n opts.query = uri.query;\n }\n else if (opts.host) {\n opts.hostname = parse(opts.host).host;\n }\n installTimerFunctions(this, opts);\n this.secure =\n null != opts.secure\n ? opts.secure\n : typeof location !== \"undefined\" && \"https:\" === location.protocol;\n if (opts.hostname && !opts.port) {\n // if no port is specified manually, use the protocol default\n opts.port = this.secure ? \"443\" : \"80\";\n }\n this.hostname =\n opts.hostname ||\n (typeof location !== \"undefined\" ? location.hostname : \"localhost\");\n this.port =\n opts.port ||\n (typeof location !== \"undefined\" && location.port\n ? location.port\n : this.secure\n ? \"443\"\n : \"80\");\n this.transports = opts.transports || [\"polling\", \"websocket\"];\n this.readyState = \"\";\n this.writeBuffer = [];\n this.prevBufferLen = 0;\n this.opts = Object.assign({\n path: \"/engine.io\",\n agent: false,\n withCredentials: false,\n upgrade: true,\n timestampParam: \"t\",\n rememberUpgrade: false,\n rejectUnauthorized: true,\n perMessageDeflate: {\n threshold: 1024\n },\n transportOptions: {},\n closeOnBeforeunload: true\n }, opts);\n this.opts.path = this.opts.path.replace(/\\/$/, \"\") + \"/\";\n if (typeof this.opts.query === \"string\") {\n this.opts.query = decode(this.opts.query);\n }\n // set on handshake\n this.id = null;\n this.upgrades = null;\n this.pingInterval = null;\n this.pingTimeout = null;\n // set on heartbeat\n this.pingTimeoutTimer = null;\n if (typeof addEventListener === \"function\") {\n if (this.opts.closeOnBeforeunload) {\n // Firefox closes the connection when the \"beforeunload\" event is emitted but not Chrome. This event listener\n // ensures every browser behaves the same (no \"disconnect\" event at the Socket.IO level when the page is\n // closed/reloaded)\n this.beforeunloadEventListener = () => {\n if (this.transport) {\n // silently close the transport\n this.transport.removeAllListeners();\n this.transport.close();\n }\n };\n addEventListener(\"beforeunload\", this.beforeunloadEventListener, false);\n }\n if (this.hostname !== \"localhost\") {\n this.offlineEventListener = () => {\n this.onClose(\"transport close\", {\n description: \"network connection lost\"\n });\n };\n addEventListener(\"offline\", this.offlineEventListener, false);\n }\n }\n this.open();\n }\n /**\n * Creates transport of the given type.\n *\n * @param {String} transport name\n * @return {Transport}\n * @api private\n */\n createTransport(name) {\n const query = Object.assign({}, this.opts.query);\n // append engine.io protocol identifier\n query.EIO = protocol;\n // transport name\n query.transport = name;\n // session id if we already have one\n if (this.id)\n query.sid = this.id;\n const opts = Object.assign({}, this.opts.transportOptions[name], this.opts, {\n query,\n socket: this,\n hostname: this.hostname,\n secure: this.secure,\n port: this.port\n });\n return new transports[name](opts);\n }\n /**\n * Initializes transport to use and starts probe.\n *\n * @api private\n */\n open() {\n let transport;\n if (this.opts.rememberUpgrade &&\n Socket.priorWebsocketSuccess &&\n this.transports.indexOf(\"websocket\") !== -1) {\n transport = \"websocket\";\n }\n else if (0 === this.transports.length) {\n // Emit error on next tick so it can be listened to\n this.setTimeoutFn(() => {\n this.emitReserved(\"error\", \"No transports available\");\n }, 0);\n return;\n }\n else {\n transport = this.transports[0];\n }\n this.readyState = \"opening\";\n // Retry with the next transport if the transport is disabled (jsonp: false)\n try {\n transport = this.createTransport(transport);\n }\n catch (e) {\n this.transports.shift();\n this.open();\n return;\n }\n transport.open();\n this.setTransport(transport);\n }\n /**\n * Sets the current transport. Disables the existing one (if any).\n *\n * @api private\n */\n setTransport(transport) {\n if (this.transport) {\n this.transport.removeAllListeners();\n }\n // set up transport\n this.transport = transport;\n // set up transport listeners\n transport\n .on(\"drain\", this.onDrain.bind(this))\n .on(\"packet\", this.onPacket.bind(this))\n .on(\"error\", this.onError.bind(this))\n .on(\"close\", reason => this.onClose(\"transport close\", reason));\n }\n /**\n * Probes a transport.\n *\n * @param {String} transport name\n * @api private\n */\n probe(name) {\n let transport = this.createTransport(name);\n let failed = false;\n Socket.priorWebsocketSuccess = false;\n const onTransportOpen = () => {\n if (failed)\n return;\n transport.send([{ type: \"ping\", data: \"probe\" }]);\n transport.once(\"packet\", msg => {\n if (failed)\n return;\n if (\"pong\" === msg.type && \"probe\" === msg.data) {\n this.upgrading = true;\n this.emitReserved(\"upgrading\", transport);\n if (!transport)\n return;\n Socket.priorWebsocketSuccess = \"websocket\" === transport.name;\n this.transport.pause(() => {\n if (failed)\n return;\n if (\"closed\" === this.readyState)\n return;\n cleanup();\n this.setTransport(transport);\n transport.send([{ type: \"upgrade\" }]);\n this.emitReserved(\"upgrade\", transport);\n transport = null;\n this.upgrading = false;\n this.flush();\n });\n }\n else {\n const err = new Error(\"probe error\");\n // @ts-ignore\n err.transport = transport.name;\n this.emitReserved(\"upgradeError\", err);\n }\n });\n };\n function freezeTransport() {\n if (failed)\n return;\n // Any callback called by transport should be ignored since now\n failed = true;\n cleanup();\n transport.close();\n transport = null;\n }\n // Handle any error that happens while probing\n const onerror = err => {\n const error = new Error(\"probe error: \" + err);\n // @ts-ignore\n error.transport = transport.name;\n freezeTransport();\n this.emitReserved(\"upgradeError\", error);\n };\n function onTransportClose() {\n onerror(\"transport closed\");\n }\n // When the socket is closed while we're probing\n function onclose() {\n onerror(\"socket closed\");\n }\n // When the socket is upgraded while we're probing\n function onupgrade(to) {\n if (transport && to.name !== transport.name) {\n freezeTransport();\n }\n }\n // Remove all listeners on the transport and on self\n const cleanup = () => {\n transport.removeListener(\"open\", onTransportOpen);\n transport.removeListener(\"error\", onerror);\n transport.removeListener(\"close\", onTransportClose);\n this.off(\"close\", onclose);\n this.off(\"upgrading\", onupgrade);\n };\n transport.once(\"open\", onTransportOpen);\n transport.once(\"error\", onerror);\n transport.once(\"close\", onTransportClose);\n this.once(\"close\", onclose);\n this.once(\"upgrading\", onupgrade);\n transport.open();\n }\n /**\n * Called when connection is deemed open.\n *\n * @api private\n */\n onOpen() {\n this.readyState = \"open\";\n Socket.priorWebsocketSuccess = \"websocket\" === this.transport.name;\n this.emitReserved(\"open\");\n this.flush();\n // we check for `readyState` in case an `open`\n // listener already closed the socket\n if (\"open\" === this.readyState &&\n this.opts.upgrade &&\n this.transport.pause) {\n let i = 0;\n const l = this.upgrades.length;\n for (; i < l; i++) {\n this.probe(this.upgrades[i]);\n }\n }\n }\n /**\n * Handles a packet.\n *\n * @api private\n */\n onPacket(packet) {\n if (\"opening\" === this.readyState ||\n \"open\" === this.readyState ||\n \"closing\" === this.readyState) {\n this.emitReserved(\"packet\", packet);\n // Socket is live - any packet counts\n this.emitReserved(\"heartbeat\");\n switch (packet.type) {\n case \"open\":\n this.onHandshake(JSON.parse(packet.data));\n break;\n case \"ping\":\n this.resetPingTimeout();\n this.sendPacket(\"pong\");\n this.emitReserved(\"ping\");\n this.emitReserved(\"pong\");\n break;\n case \"error\":\n const err = new Error(\"server error\");\n // @ts-ignore\n err.code = packet.data;\n this.onError(err);\n break;\n case \"message\":\n this.emitReserved(\"data\", packet.data);\n this.emitReserved(\"message\", packet.data);\n break;\n }\n }\n else {\n }\n }\n /**\n * Called upon handshake completion.\n *\n * @param {Object} data - handshake obj\n * @api private\n */\n onHandshake(data) {\n this.emitReserved(\"handshake\", data);\n this.id = data.sid;\n this.transport.query.sid = data.sid;\n this.upgrades = this.filterUpgrades(data.upgrades);\n this.pingInterval = data.pingInterval;\n this.pingTimeout = data.pingTimeout;\n this.maxPayload = data.maxPayload;\n this.onOpen();\n // In case open handler closes socket\n if (\"closed\" === this.readyState)\n return;\n this.resetPingTimeout();\n }\n /**\n * Sets and resets ping timeout timer based on server pings.\n *\n * @api private\n */\n resetPingTimeout() {\n this.clearTimeoutFn(this.pingTimeoutTimer);\n this.pingTimeoutTimer = this.setTimeoutFn(() => {\n this.onClose(\"ping timeout\");\n }, this.pingInterval + this.pingTimeout);\n if (this.opts.autoUnref) {\n this.pingTimeoutTimer.unref();\n }\n }\n /**\n * Called on `drain` event\n *\n * @api private\n */\n onDrain() {\n this.writeBuffer.splice(0, this.prevBufferLen);\n // setting prevBufferLen = 0 is very important\n // for example, when upgrading, upgrade packet is sent over,\n // and a nonzero prevBufferLen could cause problems on `drain`\n this.prevBufferLen = 0;\n if (0 === this.writeBuffer.length) {\n this.emitReserved(\"drain\");\n }\n else {\n this.flush();\n }\n }\n /**\n * Flush write buffers.\n *\n * @api private\n */\n flush() {\n if (\"closed\" !== this.readyState &&\n this.transport.writable &&\n !this.upgrading &&\n this.writeBuffer.length) {\n const packets = this.getWritablePackets();\n this.transport.send(packets);\n // keep track of current length of writeBuffer\n // splice writeBuffer and callbackBuffer on `drain`\n this.prevBufferLen = packets.length;\n this.emitReserved(\"flush\");\n }\n }\n /**\n * Ensure the encoded size of the writeBuffer is below the maxPayload value sent by the server (only for HTTP\n * long-polling)\n *\n * @private\n */\n getWritablePackets() {\n const shouldCheckPayloadSize = this.maxPayload &&\n this.transport.name === \"polling\" &&\n this.writeBuffer.length > 1;\n if (!shouldCheckPayloadSize) {\n return this.writeBuffer;\n }\n let payloadSize = 1; // first packet type\n for (let i = 0; i < this.writeBuffer.length; i++) {\n const data = this.writeBuffer[i].data;\n if (data) {\n payloadSize += byteLength(data);\n }\n if (i > 0 && payloadSize > this.maxPayload) {\n return this.writeBuffer.slice(0, i);\n }\n payloadSize += 2; // separator + packet type\n }\n return this.writeBuffer;\n }\n /**\n * Sends a message.\n *\n * @param {String} message.\n * @param {Function} callback function.\n * @param {Object} options.\n * @return {Socket} for chaining.\n * @api public\n */\n write(msg, options, fn) {\n this.sendPacket(\"message\", msg, options, fn);\n return this;\n }\n send(msg, options, fn) {\n this.sendPacket(\"message\", msg, options, fn);\n return this;\n }\n /**\n * Sends a packet.\n *\n * @param {String} packet type.\n * @param {String} data.\n * @param {Object} options.\n * @param {Function} callback function.\n * @api private\n */\n sendPacket(type, data, options, fn) {\n if (\"function\" === typeof data) {\n fn = data;\n data = undefined;\n }\n if (\"function\" === typeof options) {\n fn = options;\n options = null;\n }\n if (\"closing\" === this.readyState || \"closed\" === this.readyState) {\n return;\n }\n options = options || {};\n options.compress = false !== options.compress;\n const packet = {\n type: type,\n data: data,\n options: options\n };\n this.emitReserved(\"packetCreate\", packet);\n this.writeBuffer.push(packet);\n if (fn)\n this.once(\"flush\", fn);\n this.flush();\n }\n /**\n * Closes the connection.\n *\n * @api public\n */\n close() {\n const close = () => {\n this.onClose(\"forced close\");\n this.transport.close();\n };\n const cleanupAndClose = () => {\n this.off(\"upgrade\", cleanupAndClose);\n this.off(\"upgradeError\", cleanupAndClose);\n close();\n };\n const waitForUpgrade = () => {\n // wait for upgrade to finish since we can't send packets while pausing a transport\n this.once(\"upgrade\", cleanupAndClose);\n this.once(\"upgradeError\", cleanupAndClose);\n };\n if (\"opening\" === this.readyState || \"open\" === this.readyState) {\n this.readyState = \"closing\";\n if (this.writeBuffer.length) {\n this.once(\"drain\", () => {\n if (this.upgrading) {\n waitForUpgrade();\n }\n else {\n close();\n }\n });\n }\n else if (this.upgrading) {\n waitForUpgrade();\n }\n else {\n close();\n }\n }\n return this;\n }\n /**\n * Called upon transport error\n *\n * @api private\n */\n onError(err) {\n Socket.priorWebsocketSuccess = false;\n this.emitReserved(\"error\", err);\n this.onClose(\"transport error\", err);\n }\n /**\n * Called upon transport close.\n *\n * @api private\n */\n onClose(reason, description) {\n if (\"opening\" === this.readyState ||\n \"open\" === this.readyState ||\n \"closing\" === this.readyState) {\n // clear timers\n this.clearTimeoutFn(this.pingTimeoutTimer);\n // stop event from firing again for transport\n this.transport.removeAllListeners(\"close\");\n // ensure transport won't stay open\n this.transport.close();\n // ignore further transport communication\n this.transport.removeAllListeners();\n if (typeof removeEventListener === \"function\") {\n removeEventListener(\"beforeunload\", this.beforeunloadEventListener, false);\n removeEventListener(\"offline\", this.offlineEventListener, false);\n }\n // set ready state\n this.readyState = \"closed\";\n // clear session id\n this.id = null;\n // emit close event\n this.emitReserved(\"close\", reason, description);\n // clean buffers after, so users can still\n // grab the buffers on `close` event\n this.writeBuffer = [];\n this.prevBufferLen = 0;\n }\n }\n /**\n * Filters upgrades, returning only those matching client transports.\n *\n * @param {Array} server upgrades\n * @api private\n *\n */\n filterUpgrades(upgrades) {\n const filteredUpgrades = [];\n let i = 0;\n const j = upgrades.length;\n for (; i < j; i++) {\n if (~this.transports.indexOf(upgrades[i]))\n filteredUpgrades.push(upgrades[i]);\n }\n return filteredUpgrades;\n }\n}\nSocket.protocol = protocol;\n","import { parse } from \"engine.io-client\";\n/**\n * URL parser.\n *\n * @param uri - url\n * @param path - the request path of the connection\n * @param loc - An object meant to mimic window.location.\n * Defaults to window.location.\n * @public\n */\nexport function url(uri, path = \"\", loc) {\n let obj = uri;\n // default to window.location\n loc = loc || (typeof location !== \"undefined\" && location);\n if (null == uri)\n uri = loc.protocol + \"//\" + loc.host;\n // relative path support\n if (typeof uri === \"string\") {\n if (\"/\" === uri.charAt(0)) {\n if (\"/\" === uri.charAt(1)) {\n uri = loc.protocol + uri;\n }\n else {\n uri = loc.host + uri;\n }\n }\n if (!/^(https?|wss?):\\/\\//.test(uri)) {\n if (\"undefined\" !== typeof loc) {\n uri = loc.protocol + \"//\" + uri;\n }\n else {\n uri = \"https://\" + uri;\n }\n }\n // parse\n obj = parse(uri);\n }\n // make sure we treat `localhost:80` and `localhost` equally\n if (!obj.port) {\n if (/^(http|ws)$/.test(obj.protocol)) {\n obj.port = \"80\";\n }\n else if (/^(http|ws)s$/.test(obj.protocol)) {\n obj.port = \"443\";\n }\n }\n obj.path = obj.path || \"/\";\n const ipv6 = obj.host.indexOf(\":\") !== -1;\n const host = ipv6 ? \"[\" + obj.host + \"]\" : obj.host;\n // define unique id\n obj.id = obj.protocol + \"://\" + host + \":\" + obj.port + path;\n // define href\n obj.href =\n obj.protocol +\n \"://\" +\n host +\n (loc && loc.port === obj.port ? \"\" : \":\" + obj.port);\n return obj;\n}\n","const withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst isView = (obj) => {\n return typeof ArrayBuffer.isView === \"function\"\n ? ArrayBuffer.isView(obj)\n : obj.buffer instanceof ArrayBuffer;\n};\nconst toString = Object.prototype.toString;\nconst withNativeBlob = typeof Blob === \"function\" ||\n (typeof Blob !== \"undefined\" &&\n toString.call(Blob) === \"[object BlobConstructor]\");\nconst withNativeFile = typeof File === \"function\" ||\n (typeof File !== \"undefined\" &&\n toString.call(File) === \"[object FileConstructor]\");\n/**\n * Returns true if obj is a Buffer, an ArrayBuffer, a Blob or a File.\n *\n * @private\n */\nexport function isBinary(obj) {\n return ((withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj))) ||\n (withNativeBlob && obj instanceof Blob) ||\n (withNativeFile && obj instanceof File));\n}\nexport function hasBinary(obj, toJSON) {\n if (!obj || typeof obj !== \"object\") {\n return false;\n }\n if (Array.isArray(obj)) {\n for (let i = 0, l = obj.length; i < l; i++) {\n if (hasBinary(obj[i])) {\n return true;\n }\n }\n return false;\n }\n if (isBinary(obj)) {\n return true;\n }\n if (obj.toJSON &&\n typeof obj.toJSON === \"function\" &&\n arguments.length === 1) {\n return hasBinary(obj.toJSON(), true);\n }\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {\n return true;\n }\n }\n return false;\n}\n","import { isBinary } from \"./is-binary.js\";\n/**\n * Replaces every Buffer | ArrayBuffer | Blob | File in packet with a numbered placeholder.\n *\n * @param {Object} packet - socket.io event packet\n * @return {Object} with deconstructed packet and list of buffers\n * @public\n */\nexport function deconstructPacket(packet) {\n const buffers = [];\n const packetData = packet.data;\n const pack = packet;\n pack.data = _deconstructPacket(packetData, buffers);\n pack.attachments = buffers.length; // number of binary 'attachments'\n return { packet: pack, buffers: buffers };\n}\nfunction _deconstructPacket(data, buffers) {\n if (!data)\n return data;\n if (isBinary(data)) {\n const placeholder = { _placeholder: true, num: buffers.length };\n buffers.push(data);\n return placeholder;\n }\n else if (Array.isArray(data)) {\n const newData = new Array(data.length);\n for (let i = 0; i < data.length; i++) {\n newData[i] = _deconstructPacket(data[i], buffers);\n }\n return newData;\n }\n else if (typeof data === \"object\" && !(data instanceof Date)) {\n const newData = {};\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n newData[key] = _deconstructPacket(data[key], buffers);\n }\n }\n return newData;\n }\n return data;\n}\n/**\n * Reconstructs a binary packet from its placeholder packet and buffers\n *\n * @param {Object} packet - event packet with placeholders\n * @param {Array} buffers - binary buffers to put in placeholder positions\n * @return {Object} reconstructed packet\n * @public\n */\nexport function reconstructPacket(packet, buffers) {\n packet.data = _reconstructPacket(packet.data, buffers);\n packet.attachments = undefined; // no longer useful\n return packet;\n}\nfunction _reconstructPacket(data, buffers) {\n if (!data)\n return data;\n if (data && data._placeholder === true) {\n const isIndexValid = typeof data.num === \"number\" &&\n data.num >= 0 &&\n data.num < buffers.length;\n if (isIndexValid) {\n return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n }\n else {\n throw new Error(\"illegal attachments\");\n }\n }\n else if (Array.isArray(data)) {\n for (let i = 0; i < data.length; i++) {\n data[i] = _reconstructPacket(data[i], buffers);\n }\n }\n else if (typeof data === \"object\") {\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n data[key] = _reconstructPacket(data[key], buffers);\n }\n }\n }\n return data;\n}\n","import { Emitter } from \"@socket.io/component-emitter\";\nimport { deconstructPacket, reconstructPacket } from \"./binary.js\";\nimport { isBinary, hasBinary } from \"./is-binary.js\";\n/**\n * Protocol version.\n *\n * @public\n */\nexport const protocol = 5;\nexport var PacketType;\n(function (PacketType) {\n PacketType[PacketType[\"CONNECT\"] = 0] = \"CONNECT\";\n PacketType[PacketType[\"DISCONNECT\"] = 1] = \"DISCONNECT\";\n PacketType[PacketType[\"EVENT\"] = 2] = \"EVENT\";\n PacketType[PacketType[\"ACK\"] = 3] = \"ACK\";\n PacketType[PacketType[\"CONNECT_ERROR\"] = 4] = \"CONNECT_ERROR\";\n PacketType[PacketType[\"BINARY_EVENT\"] = 5] = \"BINARY_EVENT\";\n PacketType[PacketType[\"BINARY_ACK\"] = 6] = \"BINARY_ACK\";\n})(PacketType || (PacketType = {}));\n/**\n * A socket.io Encoder instance\n */\nexport class Encoder {\n /**\n * Encoder constructor\n *\n * @param {function} replacer - custom replacer to pass down to JSON.parse\n */\n constructor(replacer) {\n this.replacer = replacer;\n }\n /**\n * Encode a packet as a single string if non-binary, or as a\n * buffer sequence, depending on packet type.\n *\n * @param {Object} obj - packet object\n */\n encode(obj) {\n if (obj.type === PacketType.EVENT || obj.type === PacketType.ACK) {\n if (hasBinary(obj)) {\n obj.type =\n obj.type === PacketType.EVENT\n ? PacketType.BINARY_EVENT\n : PacketType.BINARY_ACK;\n return this.encodeAsBinary(obj);\n }\n }\n return [this.encodeAsString(obj)];\n }\n /**\n * Encode packet as string.\n */\n encodeAsString(obj) {\n // first is type\n let str = \"\" + obj.type;\n // attachments if we have them\n if (obj.type === PacketType.BINARY_EVENT ||\n obj.type === PacketType.BINARY_ACK) {\n str += obj.attachments + \"-\";\n }\n // if we have a namespace other than `/`\n // we append it followed by a comma `,`\n if (obj.nsp && \"/\" !== obj.nsp) {\n str += obj.nsp + \",\";\n }\n // immediately followed by the id\n if (null != obj.id) {\n str += obj.id;\n }\n // json data\n if (null != obj.data) {\n str += JSON.stringify(obj.data, this.replacer);\n }\n return str;\n }\n /**\n * Encode packet as 'buffer sequence' by removing blobs, and\n * deconstructing packet into object with placeholders and\n * a list of buffers.\n */\n encodeAsBinary(obj) {\n const deconstruction = deconstructPacket(obj);\n const pack = this.encodeAsString(deconstruction.packet);\n const buffers = deconstruction.buffers;\n buffers.unshift(pack); // add packet info to beginning of data list\n return buffers; // write all the buffers\n }\n}\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n */\nexport class Decoder extends Emitter {\n /**\n * Decoder constructor\n *\n * @param {function} reviver - custom reviver to pass down to JSON.stringify\n */\n constructor(reviver) {\n super();\n this.reviver = reviver;\n }\n /**\n * Decodes an encoded packet string into packet JSON.\n *\n * @param {String} obj - encoded packet\n */\n add(obj) {\n let packet;\n if (typeof obj === \"string\") {\n if (this.reconstructor) {\n throw new Error(\"got plaintext data when reconstructing a packet\");\n }\n packet = this.decodeString(obj);\n if (packet.type === PacketType.BINARY_EVENT ||\n packet.type === PacketType.BINARY_ACK) {\n // binary packet's json\n this.reconstructor = new BinaryReconstructor(packet);\n // no attachments, labeled binary but no binary data to follow\n if (packet.attachments === 0) {\n super.emitReserved(\"decoded\", packet);\n }\n }\n else {\n // non-binary full packet\n super.emitReserved(\"decoded\", packet);\n }\n }\n else if (isBinary(obj) || obj.base64) {\n // raw binary data\n if (!this.reconstructor) {\n throw new Error(\"got binary data when not reconstructing a packet\");\n }\n else {\n packet = this.reconstructor.takeBinaryData(obj);\n if (packet) {\n // received final buffer\n this.reconstructor = null;\n super.emitReserved(\"decoded\", packet);\n }\n }\n }\n else {\n throw new Error(\"Unknown type: \" + obj);\n }\n }\n /**\n * Decode a packet String (JSON data)\n *\n * @param {String} str\n * @return {Object} packet\n */\n decodeString(str) {\n let i = 0;\n // look up type\n const p = {\n type: Number(str.charAt(0)),\n };\n if (PacketType[p.type] === undefined) {\n throw new Error(\"unknown packet type \" + p.type);\n }\n // look up attachments if type binary\n if (p.type === PacketType.BINARY_EVENT ||\n p.type === PacketType.BINARY_ACK) {\n const start = i + 1;\n while (str.charAt(++i) !== \"-\" && i != str.length) { }\n const buf = str.substring(start, i);\n if (buf != Number(buf) || str.charAt(i) !== \"-\") {\n throw new Error(\"Illegal attachments\");\n }\n p.attachments = Number(buf);\n }\n // look up namespace (if any)\n if (\"/\" === str.charAt(i + 1)) {\n const start = i + 1;\n while (++i) {\n const c = str.charAt(i);\n if (\",\" === c)\n break;\n if (i === str.length)\n break;\n }\n p.nsp = str.substring(start, i);\n }\n else {\n p.nsp = \"/\";\n }\n // look up id\n const next = str.charAt(i + 1);\n if (\"\" !== next && Number(next) == next) {\n const start = i + 1;\n while (++i) {\n const c = str.charAt(i);\n if (null == c || Number(c) != c) {\n --i;\n break;\n }\n if (i === str.length)\n break;\n }\n p.id = Number(str.substring(start, i + 1));\n }\n // look up json data\n if (str.charAt(++i)) {\n const payload = this.tryParse(str.substr(i));\n if (Decoder.isPayloadValid(p.type, payload)) {\n p.data = payload;\n }\n else {\n throw new Error(\"invalid payload\");\n }\n }\n return p;\n }\n tryParse(str) {\n try {\n return JSON.parse(str, this.reviver);\n }\n catch (e) {\n return false;\n }\n }\n static isPayloadValid(type, payload) {\n switch (type) {\n case PacketType.CONNECT:\n return typeof payload === \"object\";\n case PacketType.DISCONNECT:\n return payload === undefined;\n case PacketType.CONNECT_ERROR:\n return typeof payload === \"string\" || typeof payload === \"object\";\n case PacketType.EVENT:\n case PacketType.BINARY_EVENT:\n return Array.isArray(payload) && payload.length > 0;\n case PacketType.ACK:\n case PacketType.BINARY_ACK:\n return Array.isArray(payload);\n }\n }\n /**\n * Deallocates a parser's resources\n */\n destroy() {\n if (this.reconstructor) {\n this.reconstructor.finishedReconstruction();\n }\n }\n}\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n */\nclass BinaryReconstructor {\n constructor(packet) {\n this.packet = packet;\n this.buffers = [];\n this.reconPack = packet;\n }\n /**\n * Method to be called when binary data received from connection\n * after a BINARY_EVENT packet.\n *\n * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n * @return {null | Object} returns null if more binary data is expected or\n * a reconstructed packet object if all buffers have been received.\n */\n takeBinaryData(binData) {\n this.buffers.push(binData);\n if (this.buffers.length === this.reconPack.attachments) {\n // done with buffer list\n const packet = reconstructPacket(this.reconPack, this.buffers);\n this.finishedReconstruction();\n return packet;\n }\n return null;\n }\n /**\n * Cleans up binary packet reconstruction variables.\n */\n finishedReconstruction() {\n this.reconPack = null;\n this.buffers = [];\n }\n}\n","export function on(obj, ev, fn) {\n obj.on(ev, fn);\n return function subDestroy() {\n obj.off(ev, fn);\n };\n}\n","import { PacketType } from \"socket.io-parser\";\nimport { on } from \"./on.js\";\nimport { Emitter, } from \"@socket.io/component-emitter\";\n/**\n * Internal events.\n * These events can't be emitted by the user.\n */\nconst RESERVED_EVENTS = Object.freeze({\n connect: 1,\n connect_error: 1,\n disconnect: 1,\n disconnecting: 1,\n // EventEmitter reserved events: https://nodejs.org/api/events.html#events_event_newlistener\n newListener: 1,\n removeListener: 1,\n});\n/**\n * A Socket is the fundamental class for interacting with the server.\n *\n * A Socket belongs to a certain Namespace (by default /) and uses an underlying {@link Manager} to communicate.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(\"connected\");\n * });\n *\n * // send an event to the server\n * socket.emit(\"foo\", \"bar\");\n *\n * socket.on(\"foobar\", () => {\n * // an event was received from the server\n * });\n *\n * // upon disconnection\n * socket.on(\"disconnect\", (reason) => {\n * console.log(`disconnected due to ${reason}`);\n * });\n */\nexport class Socket extends Emitter {\n /**\n * `Socket` constructor.\n */\n constructor(io, nsp, opts) {\n super();\n /**\n * Whether the socket is currently connected to the server.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(socket.connected); // true\n * });\n *\n * socket.on(\"disconnect\", () => {\n * console.log(socket.connected); // false\n * });\n */\n this.connected = false;\n /**\n * Buffer for packets received before the CONNECT packet\n */\n this.receiveBuffer = [];\n /**\n * Buffer for packets that will be sent once the socket is connected\n */\n this.sendBuffer = [];\n this.ids = 0;\n this.acks = {};\n this.flags = {};\n this.io = io;\n this.nsp = nsp;\n if (opts && opts.auth) {\n this.auth = opts.auth;\n }\n if (this.io._autoConnect)\n this.open();\n }\n /**\n * Whether the socket is currently disconnected\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(socket.disconnected); // false\n * });\n *\n * socket.on(\"disconnect\", () => {\n * console.log(socket.disconnected); // true\n * });\n */\n get disconnected() {\n return !this.connected;\n }\n /**\n * Subscribe to open, close and packet events\n *\n * @private\n */\n subEvents() {\n if (this.subs)\n return;\n const io = this.io;\n this.subs = [\n on(io, \"open\", this.onopen.bind(this)),\n on(io, \"packet\", this.onpacket.bind(this)),\n on(io, \"error\", this.onerror.bind(this)),\n on(io, \"close\", this.onclose.bind(this)),\n ];\n }\n /**\n * Whether the Socket will try to reconnect when its Manager connects or reconnects.\n *\n * @example\n * const socket = io();\n *\n * console.log(socket.active); // true\n *\n * socket.on(\"disconnect\", (reason) => {\n * if (reason === \"io server disconnect\") {\n * // the disconnection was initiated by the server, you need to manually reconnect\n * console.log(socket.active); // false\n * }\n * // else the socket will automatically try to reconnect\n * console.log(socket.active); // true\n * });\n */\n get active() {\n return !!this.subs;\n }\n /**\n * \"Opens\" the socket.\n *\n * @example\n * const socket = io({\n * autoConnect: false\n * });\n *\n * socket.connect();\n */\n connect() {\n if (this.connected)\n return this;\n this.subEvents();\n if (!this.io[\"_reconnecting\"])\n this.io.open(); // ensure open\n if (\"open\" === this.io._readyState)\n this.onopen();\n return this;\n }\n /**\n * Alias for {@link connect()}.\n */\n open() {\n return this.connect();\n }\n /**\n * Sends a `message` event.\n *\n * This method mimics the WebSocket.send() method.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/send\n *\n * @example\n * socket.send(\"hello\");\n *\n * // this is equivalent to\n * socket.emit(\"message\", \"hello\");\n *\n * @return self\n */\n send(...args) {\n args.unshift(\"message\");\n this.emit.apply(this, args);\n return this;\n }\n /**\n * Override `emit`.\n * If the event is in `events`, it's emitted normally.\n *\n * @example\n * socket.emit(\"hello\", \"world\");\n *\n * // all serializable datastructures are supported (no need to call JSON.stringify)\n * socket.emit(\"hello\", 1, \"2\", { 3: [\"4\"], 5: Uint8Array.from([6]) });\n *\n * // with an acknowledgement from the server\n * socket.emit(\"hello\", \"world\", (val) => {\n * // ...\n * });\n *\n * @return self\n */\n emit(ev, ...args) {\n if (RESERVED_EVENTS.hasOwnProperty(ev)) {\n throw new Error('\"' + ev.toString() + '\" is a reserved event name');\n }\n args.unshift(ev);\n const packet = {\n type: PacketType.EVENT,\n data: args,\n };\n packet.options = {};\n packet.options.compress = this.flags.compress !== false;\n // event ack callback\n if (\"function\" === typeof args[args.length - 1]) {\n const id = this.ids++;\n const ack = args.pop();\n this._registerAckCallback(id, ack);\n packet.id = id;\n }\n const isTransportWritable = this.io.engine &&\n this.io.engine.transport &&\n this.io.engine.transport.writable;\n const discardPacket = this.flags.volatile && (!isTransportWritable || !this.connected);\n if (discardPacket) {\n }\n else if (this.connected) {\n this.notifyOutgoingListeners(packet);\n this.packet(packet);\n }\n else {\n this.sendBuffer.push(packet);\n }\n this.flags = {};\n return this;\n }\n /**\n * @private\n */\n _registerAckCallback(id, ack) {\n const timeout = this.flags.timeout;\n if (timeout === undefined) {\n this.acks[id] = ack;\n return;\n }\n // @ts-ignore\n const timer = this.io.setTimeoutFn(() => {\n delete this.acks[id];\n for (let i = 0; i < this.sendBuffer.length; i++) {\n if (this.sendBuffer[i].id === id) {\n this.sendBuffer.splice(i, 1);\n }\n }\n ack.call(this, new Error(\"operation has timed out\"));\n }, timeout);\n this.acks[id] = (...args) => {\n // @ts-ignore\n this.io.clearTimeoutFn(timer);\n ack.apply(this, [null, ...args]);\n };\n }\n /**\n * Sends a packet.\n *\n * @param packet\n * @private\n */\n packet(packet) {\n packet.nsp = this.nsp;\n this.io._packet(packet);\n }\n /**\n * Called upon engine `open`.\n *\n * @private\n */\n onopen() {\n if (typeof this.auth == \"function\") {\n this.auth((data) => {\n this.packet({ type: PacketType.CONNECT, data });\n });\n }\n else {\n this.packet({ type: PacketType.CONNECT, data: this.auth });\n }\n }\n /**\n * Called upon engine or manager `error`.\n *\n * @param err\n * @private\n */\n onerror(err) {\n if (!this.connected) {\n this.emitReserved(\"connect_error\", err);\n }\n }\n /**\n * Called upon engine `close`.\n *\n * @param reason\n * @param description\n * @private\n */\n onclose(reason, description) {\n this.connected = false;\n delete this.id;\n this.emitReserved(\"disconnect\", reason, description);\n }\n /**\n * Called with socket packet.\n *\n * @param packet\n * @private\n */\n onpacket(packet) {\n const sameNamespace = packet.nsp === this.nsp;\n if (!sameNamespace)\n return;\n switch (packet.type) {\n case PacketType.CONNECT:\n if (packet.data && packet.data.sid) {\n const id = packet.data.sid;\n this.onconnect(id);\n }\n else {\n this.emitReserved(\"connect_error\", new Error(\"It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)\"));\n }\n break;\n case PacketType.EVENT:\n case PacketType.BINARY_EVENT:\n this.onevent(packet);\n break;\n case PacketType.ACK:\n case PacketType.BINARY_ACK:\n this.onack(packet);\n break;\n case PacketType.DISCONNECT:\n this.ondisconnect();\n break;\n case PacketType.CONNECT_ERROR:\n this.destroy();\n const err = new Error(packet.data.message);\n // @ts-ignore\n err.data = packet.data.data;\n this.emitReserved(\"connect_error\", err);\n break;\n }\n }\n /**\n * Called upon a server event.\n *\n * @param packet\n * @private\n */\n onevent(packet) {\n const args = packet.data || [];\n if (null != packet.id) {\n args.push(this.ack(packet.id));\n }\n if (this.connected) {\n this.emitEvent(args);\n }\n else {\n this.receiveBuffer.push(Object.freeze(args));\n }\n }\n emitEvent(args) {\n if (this._anyListeners && this._anyListeners.length) {\n const listeners = this._anyListeners.slice();\n for (const listener of listeners) {\n listener.apply(this, args);\n }\n }\n super.emit.apply(this, args);\n }\n /**\n * Produces an ack callback to emit with an event.\n *\n * @private\n */\n ack(id) {\n const self = this;\n let sent = false;\n return function (...args) {\n // prevent double callbacks\n if (sent)\n return;\n sent = true;\n self.packet({\n type: PacketType.ACK,\n id: id,\n data: args,\n });\n };\n }\n /**\n * Called upon a server acknowlegement.\n *\n * @param packet\n * @private\n */\n onack(packet) {\n const ack = this.acks[packet.id];\n if (\"function\" === typeof ack) {\n ack.apply(this, packet.data);\n delete this.acks[packet.id];\n }\n else {\n }\n }\n /**\n * Called upon server connect.\n *\n * @private\n */\n onconnect(id) {\n this.id = id;\n this.connected = true;\n this.emitBuffered();\n this.emitReserved(\"connect\");\n }\n /**\n * Emit buffered events (received and emitted).\n *\n * @private\n */\n emitBuffered() {\n this.receiveBuffer.forEach((args) => this.emitEvent(args));\n this.receiveBuffer = [];\n this.sendBuffer.forEach((packet) => {\n this.notifyOutgoingListeners(packet);\n this.packet(packet);\n });\n this.sendBuffer = [];\n }\n /**\n * Called upon server disconnect.\n *\n * @private\n */\n ondisconnect() {\n this.destroy();\n this.onclose(\"io server disconnect\");\n }\n /**\n * Called upon forced client/server side disconnections,\n * this method ensures the manager stops tracking us and\n * that reconnections don't get triggered for this.\n *\n * @private\n */\n destroy() {\n if (this.subs) {\n // clean subscriptions to avoid reconnections\n this.subs.forEach((subDestroy) => subDestroy());\n this.subs = undefined;\n }\n this.io[\"_destroy\"](this);\n }\n /**\n * Disconnects the socket manually. In that case, the socket will not try to reconnect.\n *\n * If this is the last active Socket instance of the {@link Manager}, the low-level connection will be closed.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"disconnect\", (reason) => {\n * // console.log(reason); prints \"io client disconnect\"\n * });\n *\n * socket.disconnect();\n *\n * @return self\n */\n disconnect() {\n if (this.connected) {\n this.packet({ type: PacketType.DISCONNECT });\n }\n // remove socket from pool\n this.destroy();\n if (this.connected) {\n // fire events\n this.onclose(\"io client disconnect\");\n }\n return this;\n }\n /**\n * Alias for {@link disconnect()}.\n *\n * @return self\n */\n close() {\n return this.disconnect();\n }\n /**\n * Sets the compress flag.\n *\n * @example\n * socket.compress(false).emit(\"hello\");\n *\n * @param compress - if `true`, compresses the sending data\n * @return self\n */\n compress(compress) {\n this.flags.compress = compress;\n return this;\n }\n /**\n * Sets a modifier for a subsequent event emission that the event message will be dropped when this socket is not\n * ready to send messages.\n *\n * @example\n * socket.volatile.emit(\"hello\"); // the server may or may not receive it\n *\n * @returns self\n */\n get volatile() {\n this.flags.volatile = true;\n return this;\n }\n /**\n * Sets a modifier for a subsequent event emission that the callback will be called with an error when the\n * given number of milliseconds have elapsed without an acknowledgement from the server:\n *\n * @example\n * socket.timeout(5000).emit(\"my-event\", (err) => {\n * if (err) {\n * // the server did not acknowledge the event in the given delay\n * }\n * });\n *\n * @returns self\n */\n timeout(timeout) {\n this.flags.timeout = timeout;\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback.\n *\n * @example\n * socket.onAny((event, ...args) => {\n * console.log(`got ${event}`);\n * });\n *\n * @param listener\n */\n onAny(listener) {\n this._anyListeners = this._anyListeners || [];\n this._anyListeners.push(listener);\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback. The listener is added to the beginning of the listeners array.\n *\n * @example\n * socket.prependAny((event, ...args) => {\n * console.log(`got event ${event}`);\n * });\n *\n * @param listener\n */\n prependAny(listener) {\n this._anyListeners = this._anyListeners || [];\n this._anyListeners.unshift(listener);\n return this;\n }\n /**\n * Removes the listener that will be fired when any event is emitted.\n *\n * @example\n * const catchAllListener = (event, ...args) => {\n * console.log(`got event ${event}`);\n * }\n *\n * socket.onAny(catchAllListener);\n *\n * // remove a specific listener\n * socket.offAny(catchAllListener);\n *\n * // or remove all listeners\n * socket.offAny();\n *\n * @param listener\n */\n offAny(listener) {\n if (!this._anyListeners) {\n return this;\n }\n if (listener) {\n const listeners = this._anyListeners;\n for (let i = 0; i < listeners.length; i++) {\n if (listener === listeners[i]) {\n listeners.splice(i, 1);\n return this;\n }\n }\n }\n else {\n this._anyListeners = [];\n }\n return this;\n }\n /**\n * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated,\n * e.g. to remove listeners.\n */\n listenersAny() {\n return this._anyListeners || [];\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback.\n *\n * Note: acknowledgements sent to the server are not included.\n *\n * @example\n * socket.onAnyOutgoing((event, ...args) => {\n * console.log(`sent event ${event}`);\n * });\n *\n * @param listener\n */\n onAnyOutgoing(listener) {\n this._anyOutgoingListeners = this._anyOutgoingListeners || [];\n this._anyOutgoingListeners.push(listener);\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback. The listener is added to the beginning of the listeners array.\n *\n * Note: acknowledgements sent to the server are not included.\n *\n * @example\n * socket.prependAnyOutgoing((event, ...args) => {\n * console.log(`sent event ${event}`);\n * });\n *\n * @param listener\n */\n prependAnyOutgoing(listener) {\n this._anyOutgoingListeners = this._anyOutgoingListeners || [];\n this._anyOutgoingListeners.unshift(listener);\n return this;\n }\n /**\n * Removes the listener that will be fired when any event is emitted.\n *\n * @example\n * const catchAllListener = (event, ...args) => {\n * console.log(`sent event ${event}`);\n * }\n *\n * socket.onAnyOutgoing(catchAllListener);\n *\n * // remove a specific listener\n * socket.offAnyOutgoing(catchAllListener);\n *\n * // or remove all listeners\n * socket.offAnyOutgoing();\n *\n * @param [listener] - the catch-all listener (optional)\n */\n offAnyOutgoing(listener) {\n if (!this._anyOutgoingListeners) {\n return this;\n }\n if (listener) {\n const listeners = this._anyOutgoingListeners;\n for (let i = 0; i < listeners.length; i++) {\n if (listener === listeners[i]) {\n listeners.splice(i, 1);\n return this;\n }\n }\n }\n else {\n this._anyOutgoingListeners = [];\n }\n return this;\n }\n /**\n * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated,\n * e.g. to remove listeners.\n */\n listenersAnyOutgoing() {\n return this._anyOutgoingListeners || [];\n }\n /**\n * Notify the listeners for each packet sent\n *\n * @param packet\n *\n * @private\n */\n notifyOutgoingListeners(packet) {\n if (this._anyOutgoingListeners && this._anyOutgoingListeners.length) {\n const listeners = this._anyOutgoingListeners.slice();\n for (const listener of listeners) {\n listener.apply(this, packet.data);\n }\n }\n }\n}\n","/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\nexport function Backoff(opts) {\n opts = opts || {};\n this.ms = opts.min || 100;\n this.max = opts.max || 10000;\n this.factor = opts.factor || 2;\n this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n this.attempts = 0;\n}\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\nBackoff.prototype.duration = function () {\n var ms = this.ms * Math.pow(this.factor, this.attempts++);\n if (this.jitter) {\n var rand = Math.random();\n var deviation = Math.floor(rand * this.jitter * ms);\n ms = (Math.floor(rand * 10) & 1) == 0 ? ms - deviation : ms + deviation;\n }\n return Math.min(ms, this.max) | 0;\n};\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\nBackoff.prototype.reset = function () {\n this.attempts = 0;\n};\n/**\n * Set the minimum duration\n *\n * @api public\n */\nBackoff.prototype.setMin = function (min) {\n this.ms = min;\n};\n/**\n * Set the maximum duration\n *\n * @api public\n */\nBackoff.prototype.setMax = function (max) {\n this.max = max;\n};\n/**\n * Set the jitter\n *\n * @api public\n */\nBackoff.prototype.setJitter = function (jitter) {\n this.jitter = jitter;\n};\n","import { Socket as Engine, installTimerFunctions, nextTick, } from \"engine.io-client\";\nimport { Socket } from \"./socket.js\";\nimport * as parser from \"socket.io-parser\";\nimport { on } from \"./on.js\";\nimport { Backoff } from \"./contrib/backo2.js\";\nimport { Emitter, } from \"@socket.io/component-emitter\";\nexport class Manager extends Emitter {\n constructor(uri, opts) {\n var _a;\n super();\n this.nsps = {};\n this.subs = [];\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n opts.path = opts.path || \"/socket.io\";\n this.opts = opts;\n installTimerFunctions(this, opts);\n this.reconnection(opts.reconnection !== false);\n this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n this.reconnectionDelay(opts.reconnectionDelay || 1000);\n this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n this.randomizationFactor((_a = opts.randomizationFactor) !== null && _a !== void 0 ? _a : 0.5);\n this.backoff = new Backoff({\n min: this.reconnectionDelay(),\n max: this.reconnectionDelayMax(),\n jitter: this.randomizationFactor(),\n });\n this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n this._readyState = \"closed\";\n this.uri = uri;\n const _parser = opts.parser || parser;\n this.encoder = new _parser.Encoder();\n this.decoder = new _parser.Decoder();\n this._autoConnect = opts.autoConnect !== false;\n if (this._autoConnect)\n this.open();\n }\n reconnection(v) {\n if (!arguments.length)\n return this._reconnection;\n this._reconnection = !!v;\n return this;\n }\n reconnectionAttempts(v) {\n if (v === undefined)\n return this._reconnectionAttempts;\n this._reconnectionAttempts = v;\n return this;\n }\n reconnectionDelay(v) {\n var _a;\n if (v === undefined)\n return this._reconnectionDelay;\n this._reconnectionDelay = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMin(v);\n return this;\n }\n randomizationFactor(v) {\n var _a;\n if (v === undefined)\n return this._randomizationFactor;\n this._randomizationFactor = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setJitter(v);\n return this;\n }\n reconnectionDelayMax(v) {\n var _a;\n if (v === undefined)\n return this._reconnectionDelayMax;\n this._reconnectionDelayMax = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMax(v);\n return this;\n }\n timeout(v) {\n if (!arguments.length)\n return this._timeout;\n this._timeout = v;\n return this;\n }\n /**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @private\n */\n maybeReconnectOnOpen() {\n // Only try to reconnect if it's the first time we're connecting\n if (!this._reconnecting &&\n this._reconnection &&\n this.backoff.attempts === 0) {\n // keeps reconnection from firing twice for the same reconnection loop\n this.reconnect();\n }\n }\n /**\n * Sets the current transport `socket`.\n *\n * @param {Function} fn - optional, callback\n * @return self\n * @public\n */\n open(fn) {\n if (~this._readyState.indexOf(\"open\"))\n return this;\n this.engine = new Engine(this.uri, this.opts);\n const socket = this.engine;\n const self = this;\n this._readyState = \"opening\";\n this.skipReconnect = false;\n // emit `open`\n const openSubDestroy = on(socket, \"open\", function () {\n self.onopen();\n fn && fn();\n });\n // emit `error`\n const errorSub = on(socket, \"error\", (err) => {\n self.cleanup();\n self._readyState = \"closed\";\n this.emitReserved(\"error\", err);\n if (fn) {\n fn(err);\n }\n else {\n // Only do this if there is no fn to handle the error\n self.maybeReconnectOnOpen();\n }\n });\n if (false !== this._timeout) {\n const timeout = this._timeout;\n if (timeout === 0) {\n openSubDestroy(); // prevents a race condition with the 'open' event\n }\n // set timer\n const timer = this.setTimeoutFn(() => {\n openSubDestroy();\n socket.close();\n // @ts-ignore\n socket.emit(\"error\", new Error(\"timeout\"));\n }, timeout);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(function subDestroy() {\n clearTimeout(timer);\n });\n }\n this.subs.push(openSubDestroy);\n this.subs.push(errorSub);\n return this;\n }\n /**\n * Alias for open()\n *\n * @return self\n * @public\n */\n connect(fn) {\n return this.open(fn);\n }\n /**\n * Called upon transport open.\n *\n * @private\n */\n onopen() {\n // clear old subs\n this.cleanup();\n // mark as open\n this._readyState = \"open\";\n this.emitReserved(\"open\");\n // add new subs\n const socket = this.engine;\n this.subs.push(on(socket, \"ping\", this.onping.bind(this)), on(socket, \"data\", this.ondata.bind(this)), on(socket, \"error\", this.onerror.bind(this)), on(socket, \"close\", this.onclose.bind(this)), on(this.decoder, \"decoded\", this.ondecoded.bind(this)));\n }\n /**\n * Called upon a ping.\n *\n * @private\n */\n onping() {\n this.emitReserved(\"ping\");\n }\n /**\n * Called with data.\n *\n * @private\n */\n ondata(data) {\n try {\n this.decoder.add(data);\n }\n catch (e) {\n this.onclose(\"parse error\", e);\n }\n }\n /**\n * Called when parser fully decodes a packet.\n *\n * @private\n */\n ondecoded(packet) {\n // the nextTick call prevents an exception in a user-provided event listener from triggering a disconnection due to a \"parse error\"\n nextTick(() => {\n this.emitReserved(\"packet\", packet);\n }, this.setTimeoutFn);\n }\n /**\n * Called upon socket error.\n *\n * @private\n */\n onerror(err) {\n this.emitReserved(\"error\", err);\n }\n /**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @public\n */\n socket(nsp, opts) {\n let socket = this.nsps[nsp];\n if (!socket) {\n socket = new Socket(this, nsp, opts);\n this.nsps[nsp] = socket;\n }\n return socket;\n }\n /**\n * Called upon a socket close.\n *\n * @param socket\n * @private\n */\n _destroy(socket) {\n const nsps = Object.keys(this.nsps);\n for (const nsp of nsps) {\n const socket = this.nsps[nsp];\n if (socket.active) {\n return;\n }\n }\n this._close();\n }\n /**\n * Writes a packet.\n *\n * @param packet\n * @private\n */\n _packet(packet) {\n const encodedPackets = this.encoder.encode(packet);\n for (let i = 0; i < encodedPackets.length; i++) {\n this.engine.write(encodedPackets[i], packet.options);\n }\n }\n /**\n * Clean up transport subscriptions and packet buffer.\n *\n * @private\n */\n cleanup() {\n this.subs.forEach((subDestroy) => subDestroy());\n this.subs.length = 0;\n this.decoder.destroy();\n }\n /**\n * Close the current socket.\n *\n * @private\n */\n _close() {\n this.skipReconnect = true;\n this._reconnecting = false;\n this.onclose(\"forced close\");\n if (this.engine)\n this.engine.close();\n }\n /**\n * Alias for close()\n *\n * @private\n */\n disconnect() {\n return this._close();\n }\n /**\n * Called upon engine close.\n *\n * @private\n */\n onclose(reason, description) {\n this.cleanup();\n this.backoff.reset();\n this._readyState = \"closed\";\n this.emitReserved(\"close\", reason, description);\n if (this._reconnection && !this.skipReconnect) {\n this.reconnect();\n }\n }\n /**\n * Attempt a reconnection.\n *\n * @private\n */\n reconnect() {\n if (this._reconnecting || this.skipReconnect)\n return this;\n const self = this;\n if (this.backoff.attempts >= this._reconnectionAttempts) {\n this.backoff.reset();\n this.emitReserved(\"reconnect_failed\");\n this._reconnecting = false;\n }\n else {\n const delay = this.backoff.duration();\n this._reconnecting = true;\n const timer = this.setTimeoutFn(() => {\n if (self.skipReconnect)\n return;\n this.emitReserved(\"reconnect_attempt\", self.backoff.attempts);\n // check again for the case socket closed in above events\n if (self.skipReconnect)\n return;\n self.open((err) => {\n if (err) {\n self._reconnecting = false;\n self.reconnect();\n this.emitReserved(\"reconnect_error\", err);\n }\n else {\n self.onreconnect();\n }\n });\n }, delay);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(function subDestroy() {\n clearTimeout(timer);\n });\n }\n }\n /**\n * Called upon successful reconnect.\n *\n * @private\n */\n onreconnect() {\n const attempt = this.backoff.attempts;\n this._reconnecting = false;\n this.backoff.reset();\n this.emitReserved(\"reconnect\", attempt);\n }\n}\n","import { url } from \"./url.js\";\nimport { Manager } from \"./manager.js\";\nimport { Socket } from \"./socket.js\";\n/**\n * Managers cache.\n */\nconst cache = {};\nfunction lookup(uri, opts) {\n if (typeof uri === \"object\") {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n const parsed = url(uri, opts.path || \"/socket.io\");\n const source = parsed.source;\n const id = parsed.id;\n const path = parsed.path;\n const sameNamespace = cache[id] && path in cache[id][\"nsps\"];\n const newConnection = opts.forceNew ||\n opts[\"force new connection\"] ||\n false === opts.multiplex ||\n sameNamespace;\n let io;\n if (newConnection) {\n io = new Manager(source, opts);\n }\n else {\n if (!cache[id]) {\n cache[id] = new Manager(source, opts);\n }\n io = cache[id];\n }\n if (parsed.query && !opts.query) {\n opts.query = parsed.queryKey;\n }\n return io.socket(parsed.path, opts);\n}\n// so that \"lookup\" can be used both as a function (e.g. `io(...)`) and as a\n// namespace (e.g. `io.connect(...)`), for backward compatibility\nObject.assign(lookup, {\n Manager,\n Socket,\n io: lookup,\n connect: lookup,\n});\n/**\n * Protocol version.\n *\n * @public\n */\nexport { protocol } from \"socket.io-parser\";\n/**\n * Expose constructors for standalone build.\n *\n * @public\n */\nexport { Manager, Socket, lookup as io, lookup as connect, lookup as default, };\n","\n\n\n
\n\n\t\n\t\n\n\t\n\t\n\n\t\n\t\n\n\t\n\t
\n\t\t
\n\t\t\t{#each msgs as msg (msg.id)}\n\t\t\t\t{@html msg.content}\n\t\t\t{/each}\n\t\t
\n\t
\n\n\t\n\t
\n\t\t
\n\t
\n\n\t\n\t\n\n\n\n\n\n\n","\n\n\n
\n\n\t\n\t\n\n\t\n\t\n\n\t\n\t\n\n\t\n\t
\n\t\t\n\t\t

join room :

\n\t\t
\n\t\t\t
\n\t\t\t\t

/ there are no public rooms yet /

\n\t\t\t
\n\t\t\t\n\t\t\t\n\t\t
\n\t
\n\n
\n\n\n\n","\n\n\n
\n\n\t\n\t\n\n\t\n\t\n\n\t\n\t\n\n\t\n\t
\n\t\t

blocked users :

\n\t\t
\n\t\t\t
\n\t\t\t\t

/ you have blocked no one /

\n\t\t\t
\n\t\t\t\n\t\t\t\n\t\t
\n\t
\n\n
\n\n\n\n\n","\n\n\n
\n\n\t\n\t\n\n\t\n\t\n\n\t\n\t\n\n\t\n\t
\n\t\t\n\t\t

room users :

\n\t\t
\n\t\t\t
\n\t\t\t\t

/ there are no public rooms yet /

\n\t\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
\n\t
\n\n\n
\n\n\n\n\n","\n\n\n
\n\n\t\n\t\n\n\t\n\t\n\n\t\n\t\n\n\t\n\t
\n\t\t

this room is protected

\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
\n\t
\n\n\n
\n\n\n\n\n","\n\n\n
\n\n\t\n\t\n\n\t\n\t\n\n\t\n\t\n\n\t\n\t
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t

confirm password :

\n\t\t\t\t\n\t\t\t
\n\t\t\t\n\t\t
\n\t
\n\n\n
\n\n\n\n\n","\n\n\n
\n\n\t\n\t\n\n\t\n\t\n\n\t\n\t\n\n\t\n\n\t\n\t
\n\t\t

mute this user for a time :

\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t\t\n\t\t
\n\t
\n\n\n
\n\n\n\n\n","\n\n\n
\n\n\t\n\t\n\n\t\n\t\n\n\t\n\t\n\n\t\n\t{#if back === \"room_set\"}\n\t\t\n\t{/if}\n\n\t\n\t
\n\t\t

user options :

\n\t\t\n\t\t\n\t\t\n\n\t\t{#if back === \"room_set\"}\n\t\t\t\n\t\t\t\n\t\t{/if}\n\n\t
\n\n
\n\n\n\n\n","\n\n\n\n\n\t{#if layout === \"home\"}\n\t\t\n\n\t{:else if layout === \"close\"}\n\t\t\n\n\t{:else if layout === \"room\"}\n\t\t\n\n\t{:else if layout === \"new\"}\n\t\t\n\n\t{:else if layout === \"settings\"}\n\t\t\n\n\t{:else if layout === \"room_set\"}\n\t\t\n\n\t{:else if layout === \"protected\"}\n\t\t\n\n\t{:else if layout === \"create\"}\n\t\t\n\n\t{:else if layout === \"mute\"}\n\t\t\n\n\t{:else if layout === \"user\"}\n\t\t\n\n\t{/if}\n\n\n\n\n\n\n\n\n","\n\n\n\n\n\n\n","\n\n\n\n\n
\n \n {#if user !== undefined}\n \n {:else}\n \n

Sorry

\n
Failed to load current
\n {/if}\n
\n\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n
testing when there's tons of stuff
\n\n\n\n\n\n","
\n \n
\n\n","\n\n\n\n\n\n\n\n","\n\n\n
\n

Look! You can change stuff

\n
\n \n
\n
\n
New Username
\n \n \n \n\t\t
{success.username}
\n
{errors.username}
\n
\n
\n
Set Two Factor Authentication
\n \n
{errors.checkbox}
\n
\n \n
\n
\n\n \n \n {#if avatar !== undefined}\n \"your\n {/if}\n
\n \n \n
\n
Pick a new Avatar
\n \n
{errors.avatar}
\n
\n \n
\n
\n
\n\n
\n\n\n\n\n","\n\n\n\n{#if user !== undefined}\n \n \n{:else}\n

Sorry

\n
Failed to load user {aUsername}
\n{/if}\n\n\n","\n\n\n\n
\n\n
\n

All Users

\n {#if allUsers === undefined}\n
Failed to load all users
\n {:else}\n \n \n\n \n \n {#each allUsers as aUser }\n \n
viewAUser(aUser)}>{aUser.username}
\n \n
{aUser.status}
\n
\n {/each}\n {/if}\n\n
\n\n\n
\n\n

Main Display

\n\n \n \n \n \n {#if userBeingViewed}\n
{userBeingViewed.username}
\n \n \n\n \n \n \n {/if}\n\n \n\n \n\n\n\n \n\n \n\n\n \n \n\n \n\n \n \n\n \n\n
\n
\n\n\n","\nimport NotFound from \"../pages/NotFound.svelte\";\nimport ProfileDisplay from '../pages/profile/ProfileDisplay.svelte';\nimport ProfileSettings from '../pages/profile/ProfileSettings.svelte';\nimport ProfileFriends from '../pages/profile/ProfileFriends.svelte';\nimport { wrap } from 'svelte-spa-router/wrap'\n\n// establishing the prefix here very clearly so we can have a coherent repeatable structure\nexport const prefix = '/profile';\n\nexport const profileRoutes = {\n '/': ProfileDisplay,\n '/settings': ProfileSettings,\n '/friends': ProfileFriends,\n '*': NotFound\n};\n\n// I think the conditions of access like are you authenticated work best when they are on the parent routes not the nested routes cuz i don't want my header showing up\n\n// export const profileRoutes = {\n// '/': wrap({\n// component: ProfileDisplay,\n// conditions: [\n// (detail) => {\n// const { fortyTwo, tfa } = get(loginStatus);\n// console.log(fortyTwo);\n// console.log(tfa);\n// console.log('in Profile Display');\n// // return true;\n// return (fortyTwo && tfa);\n// }\n// ]\n// }),\n// '/settings': wrap({\n// component: ProfileSettings,\n// conditions: [\n// (detail) => {\n// const { fortyTwo, tfa } = get(loginStatus);\n// // console.log(fortyTwo);\n// // console.log(tfa);\n// // return true;\n// return (fortyTwo && tfa);\n// }\n// ]\n// }),\n// '*': NotFound\n// };\n\n// what if i did /#/profile/:id for like not the user? and then based on that did a fetch?","\n\n\n
\n\n\n\n\n
\n \n
\n\n\n\n\n\n","\n\n\n\n\n","\n\n\n
\n

Potato Pong

\n \n

\n
Welcome to
\n
Potato Pong
\n

\n
\n\n\n\n\n\n\n\n","\n\n\n
\n

2FA Sign In

\n

use google authenticator

\n {#await fetchQrCodeImg}\n

Please Wait...

\n {:then data}\n \n \"A\n
\n \n \n
\n {#if wrongCode}\n \n
\n {wrongCode}\n
\n {/if}\n {:catch}\n

Unable to get QrCodeImg

\n {/await}\n
\n\n\n","\n\n
\n

You're not supposed to be here...

\n \n
\n\n","export { identity as linear } from '../internal/index.mjs';\n\n/*\nAdapted from https://github.com/mattdesl\nDistributed under MIT License https://github.com/mattdesl/eases/blob/master/LICENSE.md\n*/\nfunction backInOut(t) {\n const s = 1.70158 * 1.525;\n if ((t *= 2) < 1)\n return 0.5 * (t * t * ((s + 1) * t - s));\n return 0.5 * ((t -= 2) * t * ((s + 1) * t + s) + 2);\n}\nfunction backIn(t) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n}\nfunction backOut(t) {\n const s = 1.70158;\n return --t * t * ((s + 1) * t + s) + 1;\n}\nfunction bounceOut(t) {\n const a = 4.0 / 11.0;\n const b = 8.0 / 11.0;\n const c = 9.0 / 10.0;\n const ca = 4356.0 / 361.0;\n const cb = 35442.0 / 1805.0;\n const cc = 16061.0 / 1805.0;\n const t2 = t * t;\n return t < a\n ? 7.5625 * t2\n : t < b\n ? 9.075 * t2 - 9.9 * t + 3.4\n : t < c\n ? ca * t2 - cb * t + cc\n : 10.8 * t * t - 20.52 * t + 10.72;\n}\nfunction bounceInOut(t) {\n return t < 0.5\n ? 0.5 * (1.0 - bounceOut(1.0 - t * 2.0))\n : 0.5 * bounceOut(t * 2.0 - 1.0) + 0.5;\n}\nfunction bounceIn(t) {\n return 1.0 - bounceOut(1.0 - t);\n}\nfunction circInOut(t) {\n if ((t *= 2) < 1)\n return -0.5 * (Math.sqrt(1 - t * t) - 1);\n return 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);\n}\nfunction circIn(t) {\n return 1.0 - Math.sqrt(1.0 - t * t);\n}\nfunction circOut(t) {\n return Math.sqrt(1 - --t * t);\n}\nfunction cubicInOut(t) {\n return t < 0.5 ? 4.0 * t * t * t : 0.5 * Math.pow(2.0 * t - 2.0, 3.0) + 1.0;\n}\nfunction cubicIn(t) {\n return t * t * t;\n}\nfunction cubicOut(t) {\n const f = t - 1.0;\n return f * f * f + 1.0;\n}\nfunction elasticInOut(t) {\n return t < 0.5\n ? 0.5 *\n Math.sin(((+13.0 * Math.PI) / 2) * 2.0 * t) *\n Math.pow(2.0, 10.0 * (2.0 * t - 1.0))\n : 0.5 *\n Math.sin(((-13.0 * Math.PI) / 2) * (2.0 * t - 1.0 + 1.0)) *\n Math.pow(2.0, -10.0 * (2.0 * t - 1.0)) +\n 1.0;\n}\nfunction elasticIn(t) {\n return Math.sin((13.0 * t * Math.PI) / 2) * Math.pow(2.0, 10.0 * (t - 1.0));\n}\nfunction elasticOut(t) {\n return (Math.sin((-13.0 * (t + 1.0) * Math.PI) / 2) * Math.pow(2.0, -10.0 * t) + 1.0);\n}\nfunction expoInOut(t) {\n return t === 0.0 || t === 1.0\n ? t\n : t < 0.5\n ? +0.5 * Math.pow(2.0, 20.0 * t - 10.0)\n : -0.5 * Math.pow(2.0, 10.0 - t * 20.0) + 1.0;\n}\nfunction expoIn(t) {\n return t === 0.0 ? t : Math.pow(2.0, 10.0 * (t - 1.0));\n}\nfunction expoOut(t) {\n return t === 1.0 ? t : 1.0 - Math.pow(2.0, -10.0 * t);\n}\nfunction quadInOut(t) {\n t /= 0.5;\n if (t < 1)\n return 0.5 * t * t;\n t--;\n return -0.5 * (t * (t - 2) - 1);\n}\nfunction quadIn(t) {\n return t * t;\n}\nfunction quadOut(t) {\n return -t * (t - 2.0);\n}\nfunction quartInOut(t) {\n return t < 0.5\n ? +8.0 * Math.pow(t, 4.0)\n : -8.0 * Math.pow(t - 1.0, 4.0) + 1.0;\n}\nfunction quartIn(t) {\n return Math.pow(t, 4.0);\n}\nfunction quartOut(t) {\n return Math.pow(t - 1.0, 3.0) * (1.0 - t) + 1.0;\n}\nfunction quintInOut(t) {\n if ((t *= 2) < 1)\n return 0.5 * t * t * t * t * t;\n return 0.5 * ((t -= 2) * t * t * t * t + 2);\n}\nfunction quintIn(t) {\n return t * t * t * t * t;\n}\nfunction quintOut(t) {\n return --t * t * t * t * t + 1;\n}\nfunction sineInOut(t) {\n return -0.5 * (Math.cos(Math.PI * t) - 1);\n}\nfunction sineIn(t) {\n const v = Math.cos(t * Math.PI * 0.5);\n if (Math.abs(v) < 1e-14)\n return 1;\n else\n return 1 - v;\n}\nfunction sineOut(t) {\n return Math.sin((t * Math.PI) / 2);\n}\n\nexport { backIn, backInOut, backOut, bounceIn, bounceInOut, bounceOut, circIn, circInOut, circOut, cubicIn, cubicInOut, cubicOut, elasticIn, elasticInOut, elasticOut, expoIn, expoInOut, expoOut, quadIn, quadInOut, quadOut, quartIn, quartInOut, quartOut, quintIn, quintInOut, quintOut, sineIn, sineInOut, sineOut };\n","import { cubicInOut, linear, cubicOut } from '../easing/index.mjs';\nimport { is_function, assign } from '../internal/index.mjs';\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\n\nfunction blur(node, { delay = 0, duration = 400, easing = cubicInOut, amount = 5, opacity = 0 } = {}) {\n const style = getComputedStyle(node);\n const target_opacity = +style.opacity;\n const f = style.filter === 'none' ? '' : style.filter;\n const od = target_opacity * (1 - opacity);\n return {\n delay,\n duration,\n easing,\n css: (_t, u) => `opacity: ${target_opacity - (od * u)}; filter: ${f} blur(${u * amount}px);`\n };\n}\nfunction fade(node, { delay = 0, duration = 400, easing = linear } = {}) {\n const o = +getComputedStyle(node).opacity;\n return {\n delay,\n duration,\n easing,\n css: t => `opacity: ${t * o}`\n };\n}\nfunction fly(node, { delay = 0, duration = 400, easing = cubicOut, x = 0, y = 0, opacity = 0 } = {}) {\n const style = getComputedStyle(node);\n const target_opacity = +style.opacity;\n const transform = style.transform === 'none' ? '' : style.transform;\n const od = target_opacity * (1 - opacity);\n return {\n delay,\n duration,\n easing,\n css: (t, u) => `\n\t\t\ttransform: ${transform} translate(${(1 - t) * x}px, ${(1 - t) * y}px);\n\t\t\topacity: ${target_opacity - (od * u)}`\n };\n}\nfunction slide(node, { delay = 0, duration = 400, easing = cubicOut } = {}) {\n const style = getComputedStyle(node);\n const opacity = +style.opacity;\n const height = parseFloat(style.height);\n const padding_top = parseFloat(style.paddingTop);\n const padding_bottom = parseFloat(style.paddingBottom);\n const margin_top = parseFloat(style.marginTop);\n const margin_bottom = parseFloat(style.marginBottom);\n const border_top_width = parseFloat(style.borderTopWidth);\n const border_bottom_width = parseFloat(style.borderBottomWidth);\n return {\n delay,\n duration,\n easing,\n css: t => 'overflow: hidden;' +\n `opacity: ${Math.min(t * 20, 1) * opacity};` +\n `height: ${t * height}px;` +\n `padding-top: ${t * padding_top}px;` +\n `padding-bottom: ${t * padding_bottom}px;` +\n `margin-top: ${t * margin_top}px;` +\n `margin-bottom: ${t * margin_bottom}px;` +\n `border-top-width: ${t * border_top_width}px;` +\n `border-bottom-width: ${t * border_bottom_width}px;`\n };\n}\nfunction scale(node, { delay = 0, duration = 400, easing = cubicOut, start = 0, opacity = 0 } = {}) {\n const style = getComputedStyle(node);\n const target_opacity = +style.opacity;\n const transform = style.transform === 'none' ? '' : style.transform;\n const sd = 1 - start;\n const od = target_opacity * (1 - opacity);\n return {\n delay,\n duration,\n easing,\n css: (_t, u) => `\n\t\t\ttransform: ${transform} scale(${1 - (sd * u)});\n\t\t\topacity: ${target_opacity - (od * u)}\n\t\t`\n };\n}\nfunction draw(node, { delay = 0, speed, duration, easing = cubicInOut } = {}) {\n let len = node.getTotalLength();\n const style = getComputedStyle(node);\n if (style.strokeLinecap !== 'butt') {\n len += parseInt(style.strokeWidth);\n }\n if (duration === undefined) {\n if (speed === undefined) {\n duration = 800;\n }\n else {\n duration = len / speed;\n }\n }\n else if (typeof duration === 'function') {\n duration = duration(len);\n }\n return {\n delay,\n duration,\n easing,\n css: (t, u) => `stroke-dasharray: ${t * len} ${u * len}`\n };\n}\nfunction crossfade(_a) {\n var { fallback } = _a, defaults = __rest(_a, [\"fallback\"]);\n const to_receive = new Map();\n const to_send = new Map();\n function crossfade(from, node, params) {\n const { delay = 0, duration = d => Math.sqrt(d) * 30, easing = cubicOut } = assign(assign({}, defaults), params);\n const to = node.getBoundingClientRect();\n const dx = from.left - to.left;\n const dy = from.top - to.top;\n const dw = from.width / to.width;\n const dh = from.height / to.height;\n const d = Math.sqrt(dx * dx + dy * dy);\n const style = getComputedStyle(node);\n const transform = style.transform === 'none' ? '' : style.transform;\n const opacity = +style.opacity;\n return {\n delay,\n duration: is_function(duration) ? duration(d) : duration,\n easing,\n css: (t, u) => `\n\t\t\t\topacity: ${t * opacity};\n\t\t\t\ttransform-origin: top left;\n\t\t\t\ttransform: ${transform} translate(${u * dx}px,${u * dy}px) scale(${t + (1 - t) * dw}, ${t + (1 - t) * dh});\n\t\t\t`\n };\n }\n function transition(items, counterparts, intro) {\n return (node, params) => {\n items.set(params.key, {\n rect: node.getBoundingClientRect()\n });\n return () => {\n if (counterparts.has(params.key)) {\n const { rect } = counterparts.get(params.key);\n counterparts.delete(params.key);\n return crossfade(rect, node, params);\n }\n // if the node is disappearing altogether\n // (i.e. wasn't claimed by the other list)\n // then we need to supply an outro\n items.delete(params.key);\n return fallback && fallback(node, params, intro);\n };\n };\n }\n return [\n transition(to_send, to_receive, false),\n transition(to_receive, to_send, true)\n ];\n}\n\nexport { blur, crossfade, draw, fade, fly, scale, slide };\n","\nexport\tconst CanvasWidth = 1500;\nexport\tconst CanvasRatio = 1.66666;\n/* ratio 5/3 (1.66) */\n\nexport\tconst w = CanvasWidth;\nexport\tconst h = CanvasWidth / CanvasRatio;\nexport\tconst w_mid = Math.floor(w/2);\nexport\tconst h_mid = Math.floor(h/2);\nexport\tconst pw = Math.floor(w*0.017);\nexport\tconst ph = pw*6;\nexport\tconst ballSize = pw;\nexport\tconst wallSize = Math.floor(w*0.01);\nexport\tconst racketSpeed = Math.floor(w*0.60); // pixel per second\nexport\tconst ballSpeed = Math.floor(w*0.55); // pixel per second\nexport\tconst ballSpeedIncrease = Math.floor(ballSpeed*0.05); // pixel per second\n\nexport\tconst normalizedSpeed = false; // for consistency in speed independent of direction\n\nexport\tconst matchStartDelay = 3000; // millisecond\nexport\tconst newRoundDelay = 1500; // millisecond\n\n// Game Variantes\nexport\tconst multiBallsCount = 3;\nexport\tconst movingWallPosMax = Math.floor(w*0.12);\nexport\tconst movingWallSpeed = Math.floor(w*0.08);\n\n\nexport\tconst gameSessionIdPLACEHOLDER = \"42\"; // TESTING SPECTATOR PLACEHOLDER\n// for testing, force gameSession.id in wsServer.ts->matchmaking()","\nimport { w } from \"../shared_js/constants.js\"\nexport * from \"../shared_js/constants.js\"\n\nexport\tconst midLineSize = Math.floor(w/150);\nexport\tconst scoreSize = Math.floor(w/16); \nexport\tconst gridSize = Math.floor(w/500);\n\n// min interval on Firefox seems to be 15. Chrome can go lower.\nexport\tconst handleInputIntervalMS = 15; // millisecond\nexport\tconst sendLoopIntervalMS = 15; // millisecond // unused\nexport\tconst gameLoopIntervalMS = 15; // millisecond\nexport\tconst drawLoopIntervalMS = 15; // millisecond\n\nexport\tconst fixedDeltaTime = gameLoopIntervalMS/1000; // second\n\nexport\tconst soundRobloxVolume = 0.3; // between 0 and 1\nexport\tconst soundPongVolume = 0.3; // between 0 and 1\n","\nexport enum EventTypes {\n\t// Class Implemented\n\tgameUpdate = 1,\n\tscoreUpdate,\n\tmatchEnd,\n\tassignId,\n\tmatchmakingComplete,\n\terror,\n\n\t// Generic\n\tmatchmakingInProgress,\n\tmatchStart,\n\tmatchAbort,\n\tmatchNewRound, // unused\n\tmatchPause, // unused\n\tmatchResume, // unused\n\n\t// Client\n\tclientAnnounce,\n\tclientPlayerReady,\n\tclientInput,\n\n}\n\nexport enum InputEnum {\n\tnoInput = 0,\n\tup = 1,\n\tdown,\n}\n\nexport enum PlayerSide {\n\tleft = 1,\n\tright\n}\n\nexport enum ClientRole {\n\tplayer = 1,\n\tspectator\n}\n\nexport enum MatchOptions {\n\t// binary flags, can be mixed\n\tnoOption = 0b0,\n\tmultiBalls = 1 << 0,\n\tmovingWalls = 1 << 1\n}\n","\nimport * as en from \"../enums.js\"\n\n/* From Server */\nexport class ServerEvent {\n\ttype: en.EventTypes;\n\tconstructor(type: en.EventTypes = 0) {\n\t\tthis.type = type;\n\t}\n}\n\nexport class EventAssignId extends ServerEvent {\n\tid: string;\n\tconstructor(id: string) {\n\t\tsuper(en.EventTypes.assignId);\n\t\tthis.id = id;\n\t}\n}\n\nexport class EventMatchmakingComplete extends ServerEvent {\n\tside: en.PlayerSide;\n\tconstructor(side: en.PlayerSide) {\n\t\tsuper(en.EventTypes.matchmakingComplete);\n\t\tthis.side = side;\n\t}\n}\n\nexport class EventGameUpdate extends ServerEvent {\n\tplayerLeft = {\n\t\ty: 0\n\t};\n\tplayerRight = {\n\t\ty: 0\n\t};\n\tballsArr: {\n\t\tx: number,\n\t\ty: number,\n\t\tdirX: number,\n\t\tdirY: number,\n\t\tspeed: number\n\t}[] = [];\n\twallTop? = {\n\t\ty: 0\n\t};\n\twallBottom? = {\n\t\ty: 0\n\t};\n\tlastInputId = 0;\n\tconstructor() { // TODO: constructor that take GameComponentsServer maybe ?\n\t\tsuper(en.EventTypes.gameUpdate);\n\t}\n}\n\nexport class EventScoreUpdate extends ServerEvent {\n\tscoreLeft: number;\n\tscoreRight: number;\n\tconstructor(scoreLeft: number, scoreRight: number) {\n\t\tsuper(en.EventTypes.scoreUpdate);\n\t\tthis.scoreLeft = scoreLeft;\n\t\tthis.scoreRight = scoreRight;\n\t}\n}\n\nexport class EventMatchEnd extends ServerEvent {\n\twinner: en.PlayerSide;\n\tforfeit: boolean;\n\tconstructor(winner: en.PlayerSide, forfeit = false) {\n\t\tsuper(en.EventTypes.matchEnd);\n\t\tthis.winner = winner;\n\t\tthis.forfeit = forfeit;\n\t}\n}\n\nexport class EventMatchAbort extends ServerEvent {\n\tconstructor() {\n\t\tsuper(en.EventTypes.matchAbort);\n\t}\n}\n\nexport class EventError extends ServerEvent {\n\tmessage: string;\n\tconstructor(message: string) {\n\t\tsuper(en.EventTypes.error);\n\t\tthis.message = message;\n\t}\n}\n\n\n/* From Client */\nexport class ClientEvent {\n\ttype: en.EventTypes; // readonly ?\n\tconstructor(type: en.EventTypes = 0) {\n\t\tthis.type = type;\n\t}\n}\n\nexport class ClientAnnounce extends ClientEvent {\n\trole: en.ClientRole;\n\tconstructor(role: en.ClientRole) {\n\t\tsuper(en.EventTypes.clientAnnounce);\n\t\tthis.role = role;\n\t}\n}\n\nexport class ClientAnnouncePlayer extends ClientAnnounce {\n\tclientId: string; // unused\n\tmatchOptions: en.MatchOptions;\n\ttoken: string;\n\tusername: string;\n\tprivateMatch: boolean;\n\tplayerTwoUsername?: string;\n\tisInvitedPerson? : boolean;\n\tconstructor(matchOptions: en.MatchOptions, token: string, username: string, privateMatch: boolean = false, playerTwoUsername?: string, isInvitedPerson? : boolean) {\n\t\tsuper(en.ClientRole.player);\n\t\tthis.matchOptions = matchOptions;\n\t\tthis.token = token;\n\t\tthis.username = username;\n\t\tthis.privateMatch = privateMatch;\n\t\tif (isInvitedPerson) {\n\t\t\tthis.isInvitedPerson = isInvitedPerson;\n\t\t}\n\t\tif (playerTwoUsername) {\n\t\t\tthis.playerTwoUsername = playerTwoUsername;\n\t\t}\n\t}\n}\n\nexport class ClientAnnounceSpectator extends ClientAnnounce {\n\tgameSessionId: string;\n\tconstructor(gameSessionId: string) {\n\t\tsuper(en.ClientRole.spectator);\n\t\tthis.gameSessionId = gameSessionId;\n\t}\n}\n\nexport class EventInput extends ClientEvent {\n\tinput: en.InputEnum;\n\tid: number;\n\tconstructor(input: en.InputEnum = en.InputEnum.noInput, id: number = 0) {\n\t\tsuper(en.EventTypes.clientInput);\n\t\tthis.input = input;\n\t\tthis.id = id;\n\t}\n}\n","\nimport * as c from \"./constants.js\"\nimport { gc, pong } from \"./global.js\"\nimport * as en from \"../shared_js/enums.js\"\n\n/*\n\tbefore game\n*/\nexport function error(message: string)\n{\n\tconsole.log(\"msg.error()\");\n\tpong.clear();\n\tconst text = \"error: \" + message;\n\tconsole.log(text);\n\tgc.text2.clear();\n\tgc.text2.pos.assign(c.w*0.2, c.h*0.5);\n\tgc.text2.text = text;\n\tgc.text2.update();\n}\n\nexport function matchmaking()\n{\n\tconst text = \"searching...\";\n\tconsole.log(text);\n\tgc.text1.clear();\n\tgc.text1.pos.assign(c.w*0.2, c.h*0.5);\n\tgc.text1.text = text;\n\tgc.text1.update();\n}\n\nexport function matchmakingComplete()\n{\n\tconst text = \"match found !\";\n\tconsole.log(text);\n\tgc.text1.clear();\n\tgc.text1.pos.assign(c.w*0.15, c.h*0.5);\n\tgc.text1.text = text;\n\tgc.text1.update();\n}\n\nexport function matchAbort()\n{\n\tconst text = \"match abort\";\n\tconsole.log(text);\n\tgc.text1.clear();\n\tgc.text1.pos.assign(c.w*0.15, c.h*0.5);\n\tgc.text1.text = text;\n\tgc.text1.update();\n\n\tsetTimeout(() => {\n\t\tgc.text2.pos.assign(c.w*0.44, c.h*0.6);\n\t\tgc.text2.text = \"pardon =(\";\n\t\tconst oriSize = gc.text2.size;\n\t\tgc.text2.size = c.w*0.025;\n\t\tgc.text2.update();\n\t\tgc.text2.size = oriSize;\n\t}, 2500);\n}\n\n\n/*\n\tin game\n*/\nexport function win()\n{\n\tgc.text1.pos.assign(c.w*0.415, c.h*0.5);\n\tgc.text1.text = \"WIN\";\n}\n\nexport function lose()\n{\n\tgc.text1.pos.assign(c.w*0.383, c.h*0.5);\n\tgc.text1.text = \"LOSE\";\n}\n\nexport function forfeit(playerSide: en.PlayerSide)\n{\n\tif (playerSide === en.PlayerSide.left) {\n\t\tgc.text2.pos.assign(c.w*0.65, c.h*0.42);\n\t\tgc.text3.pos.assign(c.w*0.65, c.h*0.52);\n\t}\n\telse {\n\t\tgc.text2.pos.assign(c.w*0.09, c.h*0.42);\n\t\tgc.text3.pos.assign(c.w*0.09, c.h*0.52);\n\t}\n\tsetTimeout(() => {\n\t\tgc.text2.text = \"par forfait\";\n\t}, 1500);\n\tsetTimeout(() => {\n\t\tgc.text3.text = \"calme ta joie\";\n\t}, 3500);\t\n}\n","\nimport * as c from \"./constants.js\"\n\nexport const soundPongArr: HTMLAudioElement[] = [];\nexport const soundRoblox = new Audio(\"http://transcendance:8080/sound/roblox-oof.ogg\");\n\nexport function initAudio(sound: string)\n{\n\tlet muteFlag = true;\n\tif (sound === \"on\") {\n\t\tmuteFlag = false;\n\t}\n\n\tfor\t(let i = 0; i <= 32; i++) {\n\t\tsoundPongArr.push(new Audio(\"http://transcendance:8080/sound/pong/\"+i+\".ogg\"));\n\t\tsoundPongArr[i].volume = c.soundPongVolume;\n\t\tsoundPongArr[i].muted = muteFlag;\n\t}\n\tsoundRoblox.volume = c.soundRobloxVolume;\n\tsoundRoblox.muted = muteFlag;\n}\n","\nimport type { MovingRectangle } from \"./class/Rectangle.js\";\n\nexport function random(min: number = 0, max: number = 1) {\n\treturn Math.random() * (max - min) + min;\n}\n\nexport function sleep (ms: number) {\n\treturn new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport function clamp(n: number, min: number, max: number) : number\n{\n\tif (n < min)\n\t\tn = min;\n\telse if (n > max)\n\t\tn = max;\n\treturn (n);\n}\n\n// Typescript hack, unused\nexport function assertMovingRectangle(value: unknown): asserts value is MovingRectangle {\n\t// if (value !== MovingRectangle) throw new Error(\"Not a MovingRectangle\");\n\treturn;\n}\n","\nexport * from \"../shared_js/utils.js\"\n\nexport function countdown(count: number, callback?: (count: number) => void, endCallback?: () => void)\n{\n\tconsole.log(\"countdown \", count);\n\tif (count > 0) {\n\t\tif (callback) {\n\t\t\tcallback(count);\n\t\t}\n\t\tsetTimeout(countdown, 1000, --count, callback, endCallback);\n\t}\n\telse if (endCallback) {\n\t\tendCallback();\n\t}\n}\n","\nexport class Vector {\n\tx: number;\n\ty: number;\n\tconstructor(x: number = 0, y: number = 0) {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t}\n\tassign(x: number, y: number) {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t}\n\tnormalized() : Vector {\n\t\tconst normalizationFactor = Math.abs(this.x) + Math.abs(this.y);\n\t\treturn new Vector(this.x/normalizationFactor, this.y/normalizationFactor);\n\t}\n}\n\nexport class VectorInteger extends Vector {\n\t// PLACEHOLDER\n\t// VectorInteger with set/get dont work (No draw on the screen). Why ?\n}\n\n/* \nexport class VectorInteger {\n\t// private _x: number = 0;\n\t// private _y: number = 0;\n\t// constructor(x: number = 0, y: number = 0) {\n\t// \tthis._x = x;\n\t// \tthis._y = y;\n\t// }\n\t// get x(): number {\n\t// \treturn this._x;\n\t// }\n\t// set x(v: number) {\n\t// \t// this._x = Math.floor(v);\n\t// \tthis._x = v;\n\t// }\n\t// get y(): number {\n\t// \treturn this._y;\n\t// }\n\t// set y(v: number) {\n\t// \t// this._y = Math.floor(v);\n\t// \tthis._y = v;\n\t// }\n}\n*/\n","\nimport * as c from \"./constants.js\"\nimport { gc, matchOptions, startFunction } from \"./global.js\"\nimport * as ev from \"../shared_js/class/Event.js\"\nimport * as en from \"../shared_js/enums.js\"\nimport * as msg from \"./message.js\";\nimport type { RacketClient } from \"./class/RectangleClient.js\";\nimport { repeatInput } from \"./handleInput.js\";\nimport { soundRoblox } from \"./audio.js\"\nimport { sleep } from \"./utils.js\";\nimport { Vector, VectorInteger } from \"../shared_js/class/Vector.js\";\n\nexport let matchEnded = false;\nexport let matchAbort = false;\n\nclass ClientInfo {\n\tid = \"\";\n\tside: en.PlayerSide;\n\tracket: RacketClient;\n\topponent: RacketClient;\n\topponentNextPos: VectorInteger;\n}\n\nclass ClientInfoSpectator {\n\t// side: en.PlayerSide;\n\t/* WIP: playerLeftNextPos and playerRightNextPos could be in clientInfo for simplicity */\n\tplayerLeftNextPos: VectorInteger;\n\tplayerRightNextPos: VectorInteger;\n}\n\nconst wsUrl = \"ws://transcendance:8080/pong\";\nexport let socket: WebSocket; /* TODO: A way to still use \"const\" not \"let\" ? */\nexport const clientInfo = new ClientInfo();\nexport const clientInfoSpectator = new ClientInfoSpectator(); // WIP, could refactor this\n\n\nexport function initWebSocket(options: en.MatchOptions, token: string, username: string, privateMatch = false, playerTwoUsername?: string, isInvitedPerson? : boolean)\n{\n\tsocket = new WebSocket(wsUrl, \"json\");\n\tconsole.log(\"Infos from ws.ts : options => \" + options + \" token => \" + token + \" username => \" + username + \" priavte match => \" + privateMatch\n\t + \" player two => \" + playerTwoUsername)\n\tsocket.addEventListener(\"open\", (event) => {\n\t\tif (privateMatch) {\n\t\t\tsocket.send(JSON.stringify( new ev.ClientAnnouncePlayer(options, token, username, privateMatch, playerTwoUsername, isInvitedPerson) ));\n\t\t}\n\t\telse {\n\t\t\tsocket.send(JSON.stringify( new ev.ClientAnnouncePlayer(options, token, username) ));\n\t\t}\n\t});\n\t// socket.addEventListener(\"message\", logListener); // for testing purpose\n\tsocket.addEventListener(\"message\", errorListener);\n\tsocket.addEventListener(\"message\", preMatchListener);\n}\n\nfunction logListener(this: WebSocket, event: MessageEvent) {\n\tconsole.log(\"%i: \" + event.data, Date.now());\n}\n\nfunction errorListener(this: WebSocket, event: MessageEvent) {\n\tconsole.log(\"errorListener\");\n\tconst data: ev.ServerEvent = JSON.parse(event.data);\n\tif (data.type === en.EventTypes.error) {\n\t\tconsole.log(\"actual Error\");\n\t\tmsg.error((data as ev.EventError).message);\n\t}\n}\n\nfunction preMatchListener(this: WebSocket, event: MessageEvent)\n{\n\tconst data: ev.ServerEvent = JSON.parse(event.data);\n\tswitch (data.type) {\n\t\tcase en.EventTypes.assignId:\n\t\t\tclientInfo.id = (data).id;\n\t\t\tbreak;\n\t\tcase en.EventTypes.matchmakingInProgress:\n\t\t\tmsg.matchmaking();\n\t\t\tbreak;\n\t\tcase en.EventTypes.matchmakingComplete:\n\t\t\tclientInfo.side = (data).side;\n\t\t\tif (clientInfo.side === en.PlayerSide.left)\n\t\t\t{\n\t\t\t\tclientInfo.racket = gc.playerLeft;\n\t\t\t\tclientInfo.opponent = gc.playerRight;\n\t\t\t}\n\t\t\telse if (clientInfo.side === en.PlayerSide.right)\n\t\t\t{\n\t\t\t\tclientInfo.racket = gc.playerRight;\n\t\t\t\tclientInfo.opponent = gc.playerLeft;\n\t\t\t}\n\t\t\tclientInfo.opponentNextPos = new VectorInteger(clientInfo.opponent.pos.x, clientInfo.opponent.pos.y);\n\t\t\tclientInfo.racket.color = \"darkgreen\"; // for testing purpose\n\t\t\tsocket.send(JSON.stringify( new ev.ClientEvent(en.EventTypes.clientPlayerReady) )); // TODO: set an interval/timeout to resend until matchStart response (in case of network problem)\n\t\t\tmsg.matchmakingComplete();\n\t\t\tbreak;\n\t\tcase en.EventTypes.matchStart:\n\t\t\tsocket.removeEventListener(\"message\", preMatchListener);\n\t\t\tsocket.addEventListener(\"message\", inGameListener);\n\t\t\tstartFunction();\n\t\t\tbreak;\n\t\tcase en.EventTypes.matchAbort:\n\t\t\tmatchAbort = true;\n\t\t\tsocket.removeEventListener(\"message\", preMatchListener);\n\t\t\tmsg.matchAbort();\n\t\t\tsetTimeout(() => {\n\t\t\t\tmatchAbort = false;\n\t\t\t}, 1000);\n\t\t\tbreak;\n\t}\n}\n\nfunction inGameListener(this: WebSocket, event: MessageEvent)\n{\n\tconst data: ev.ServerEvent = JSON.parse(event.data);\n\tswitch (data.type) {\n\t\tcase en.EventTypes.gameUpdate:\n\t\t\t// setTimeout(gameUpdate, 500, data as ev.EventGameUpdate); // artificial latency for testing purpose\n\t\t\tgameUpdate(data as ev.EventGameUpdate);\n\t\t\tbreak;\n\t\tcase en.EventTypes.scoreUpdate:\n\t\t\tscoreUpdate(data as ev.EventScoreUpdate);\n\t\t\tbreak;\n\t\tcase en.EventTypes.matchEnd:\n\t\t\tmatchEnd(data as ev.EventMatchEnd);\n\t\t\tbreak;\n\t}\n}\n\nfunction gameUpdate(data: ev.EventGameUpdate)\n{\n\tconsole.log(\"gameUpdate\");\n\n\tif (matchOptions & en.MatchOptions.movingWalls) {\n\t\tgc.wallTop.pos.y = data.wallTop.y;\n\t\tgc.wallBottom.pos.y = data.wallBottom.y;\n\t}\n\n\tdata.ballsArr.forEach((ball, i) => {\n\t\tgc.ballsArr[i].pos.assign(ball.x, ball.y);\n\t\tgc.ballsArr[i].dir.assign(ball.dirX, ball.dirY);\n\t\tgc.ballsArr[i].speed = ball.speed;\n\t});\n\t/* // Equivalent to\n\tgc.ballsArr.forEach((ball, i) => {\n\t\tball.pos.assign(data.ballsArr[i].x, data.ballsArr[i].y);\n\t\tball.dir.assign(data.ballsArr[i].dirX, data.ballsArr[i].dirY);\n\t\tball.speed = data.ballsArr[i].speed;\n\t}); */\n\n\tconst predictionPos = new VectorInteger(clientInfo.racket.pos.x, clientInfo.racket.pos.y); // debug\n\n\tif (clientInfo.side === en.PlayerSide.left) {\n\t\tclientInfo.racket.pos.assign(clientInfo.racket.pos.x, data.playerLeft.y);\n\t}\n\telse if (clientInfo.side === en.PlayerSide.right) {\n\t\tclientInfo.racket.pos.assign(clientInfo.racket.pos.x, data.playerRight.y);\n\t}\n\n\t// interpolation\n\tclientInfo.opponent.pos.assign(clientInfo.opponentNextPos.x, clientInfo.opponentNextPos.y);\n\tif (clientInfo.side === en.PlayerSide.left) {\n\t\tclientInfo.opponentNextPos.assign(clientInfo.opponent.pos.x, data.playerRight.y);\n\t}\n\telse if (clientInfo.side === en.PlayerSide.right) {\n\t\tclientInfo.opponentNextPos.assign(clientInfo.opponent.pos.x, data.playerLeft.y);\n\t}\n\n\tclientInfo.opponent.dir = new Vector(\n\t\tclientInfo.opponentNextPos.x - clientInfo.opponent.pos.x,\n\t\tclientInfo.opponentNextPos.y - clientInfo.opponent.pos.y\n\t);\n\n\tif (Math.abs(clientInfo.opponent.dir.x) + Math.abs(clientInfo.opponent.dir.y) !== 0) {\n\t\tclientInfo.opponent.dir = clientInfo.opponent.dir.normalized();\n\t}\n\n\t// server reconciliation\n\trepeatInput(data.lastInputId);\n\n\t// debug\n\tif (clientInfo.racket.pos.y > predictionPos.y + 1\n\t|| clientInfo.racket.pos.y < predictionPos.y - 1)\n\t{\n\t\tconsole.log(\n\t\t\t`Reconciliation error:\n\t\t\tserver y: ${data.playerLeft.y}\n\t\t\treconciliation y: ${clientInfo.racket.pos.y}\n\t\t\tprediction y: ${predictionPos.y}`\n\t\t\t);\n\t}\n}\n\nfunction scoreUpdate(data: ev.EventScoreUpdate)\n{\n\t// console.log(\"scoreUpdate\");\n\tif (clientInfo.side === en.PlayerSide.left && data.scoreRight > gc.scoreRight.value) {\n\t\tsoundRoblox.play();\n\t}\n\telse if (clientInfo.side === en.PlayerSide.right && data.scoreLeft > gc.scoreLeft.value) {\n\t\tsoundRoblox.play();\n\t}\n\tgc.scoreLeft.value = data.scoreLeft;\n\tgc.scoreRight.value = data.scoreRight;\n}\n\nfunction matchEnd(data: ev.EventMatchEnd)\n{\n\tmatchEnded = true;\n\tsocket.close();\n\tif (data.winner === clientInfo.side) {\n\t\tmsg.win();\n\t\tif (data.forfeit) {\n\t\t\tmsg.forfeit(clientInfo.side);\n\t\t}\n\t}\n\telse {\n\t\tmsg.lose();\n\t}\n\tsetTimeout(() => {\n\t\tmatchEnded = false;\n\t}, 1000);\n}\n\n/* Spectator */\n\nexport function initWebSocketSpectator(gameSessionId: string)\n{\n\tsocket = new WebSocket(wsUrl, \"json\");\n\tsocket.addEventListener(\"open\", (event) => {\n\t\tsocket.send(JSON.stringify( new ev.ClientAnnounceSpectator(gameSessionId) ));\n\t});\n\t// socket.addEventListener(\"message\", logListener); // for testing purpose\n\tsocket.addEventListener(\"message\", preMatchListenerSpectator);\n\n\tclientInfoSpectator.playerLeftNextPos = new VectorInteger(gc.playerLeft.pos.x, gc.playerLeft.pos.y);\n\tclientInfoSpectator.playerRightNextPos = new VectorInteger(gc.playerRight.pos.x, gc.playerRight.pos.y);\n\n}\n\nexport function preMatchListenerSpectator(this: WebSocket, event: MessageEvent)\n{\n\tconst data: ev.ServerEvent = JSON.parse(event.data);\n\tif (data.type === en.EventTypes.matchStart)\n\t{\n\t\tsocket.removeEventListener(\"message\", preMatchListenerSpectator);\n\t\tsocket.addEventListener(\"message\", inGameListenerSpectator);\n\t\tstartFunction();\n\t}\n}\n\nfunction inGameListenerSpectator(this: WebSocket, event: MessageEvent)\n{\n\tconst data: ev.ServerEvent = JSON.parse(event.data);\n\tswitch (data.type) {\n\t\tcase en.EventTypes.gameUpdate:\n\t\t\tgameUpdateSpectator(data as ev.EventGameUpdate);\n\t\t\tbreak;\n\t\tcase en.EventTypes.scoreUpdate:\n\t\t\tscoreUpdateSpectator(data as ev.EventScoreUpdate);\n\t\t\tbreak;\n\t\tcase en.EventTypes.matchEnd:\n\t\t\tmatchEndSpectator(data as ev.EventMatchEnd);\n\t\t\tbreak;\n\t}\n}\n\nfunction gameUpdateSpectator(data: ev.EventGameUpdate)\n{\n\tconsole.log(\"gameUpdateSpectator\");\n\n\tif (matchOptions & en.MatchOptions.movingWalls) {\n\t\tgc.wallTop.pos.y = data.wallTop.y;\n\t\tgc.wallBottom.pos.y = data.wallBottom.y;\n\t}\n\n\tdata.ballsArr.forEach((ball, i) => {\n\t\tgc.ballsArr[i].pos.assign(ball.x, ball.y);\n\t\tgc.ballsArr[i].dir.assign(ball.dirX, ball.dirY);\n\t\tgc.ballsArr[i].speed = ball.speed;\n\t});\n\n\t// interpolation\n\tfor (const racket of [gc.playerLeft, gc.playerRight])\n\t{\n\t\tlet nextPos: VectorInteger;\n\t\tif (racket === gc.playerLeft) {\n\t\t\tnextPos = clientInfoSpectator.playerLeftNextPos;\n\t\t}\n\t\telse {\n\t\t\tnextPos = clientInfoSpectator.playerRightNextPos;\n\t\t}\n\n\t\tracket.pos.assign(nextPos.x, nextPos.y);\n\t\tif (racket === gc.playerLeft) {\n\t\t\tnextPos.assign(racket.pos.x, data.playerLeft.y);\n\t\t}\n\t\telse {\n\t\t\tnextPos.assign(racket.pos.x, data.playerRight.y);\n\t\t}\n\n\t\tracket.dir = new Vector(\n\t\t\tnextPos.x - racket.pos.x,\n\t\t\tnextPos.y - racket.pos.y\n\t\t);\n\n\t\tif (Math.abs(racket.dir.x) + Math.abs(racket.dir.y) !== 0) {\n\t\t\tracket.dir = racket.dir.normalized();\n\t\t}\n\t}\n}\n\nfunction scoreUpdateSpectator(data: ev.EventScoreUpdate)\n{\n\tconsole.log(\"scoreUpdateSpectator\");\n\tgc.scoreLeft.value = data.scoreLeft;\n\tgc.scoreRight.value = data.scoreRight;\n}\n\nfunction matchEndSpectator(data: ev.EventMatchEnd)\n{\n\tconsole.log(\"matchEndSpectator\");\n\tmatchEnded = true;\n\tsocket.close();\n\t// WIP\n\t/* msg.win();\n\tif (data.forfeit) {\n\t\tmsg.forfeit(clientInfo.side);\n\t} */\n}\n\n","\nimport * as en from \"../shared_js/enums.js\";\nimport type { GameArea } from \"./class/GameArea.js\";\nimport type { GameComponentsClient } from \"./class/GameComponentsClient.js\";\n\n// export {pong, gc, matchOptions} from \"./pong.js\"\nexport {socket, clientInfo, clientInfoSpectator} from \"./ws.js\"\n\nexport let pong: GameArea;\nexport let gc: GameComponentsClient;\nexport let matchOptions: en.MatchOptions = en.MatchOptions.noOption;\n\nexport function initPong(value: GameArea) {\n\tpong = value;\n}\n\nexport function initGc(value: GameComponentsClient) {\n\tgc = value;\n}\n\nexport function initMatchOptions(value: en.MatchOptions) {\n\tmatchOptions = value;\n}\n\nexport let startFunction: () => void;\n\nexport function initStartFunction(value: () => void) {\n\tstartFunction = value;\n}\n","\nimport type * as en from \"../../shared_js/enums.js\"\nimport type * as ev from \"../../shared_js/class/Event.js\"\n\nexport class InputHistory {\n\tinput: en.InputEnum;\n\tid: number;\n\tdeltaTime: number;\n\tconstructor(inputState: ev.EventInput, deltaTime: number) {\n\t\tthis.input = inputState.input;\n\t\tthis.id = inputState.id;\n\t\tthis.deltaTime = deltaTime;\n\t}\n}\n","\nimport { pong, gc, socket, clientInfo } from \"./global.js\"\nimport * as ev from \"../shared_js/class/Event.js\"\nimport * as en from \"../shared_js/enums.js\"\nimport { InputHistory } from \"./class/InputHistory.js\"\nimport * as c from \"./constants.js\";\nimport { matchEnded } from \"./ws.js\";\n\nexport let gridDisplay = false;\n\nlet actual_time: number = Date.now();\nlet last_time: number;\nlet delta_time: number;\n\nconst inputState: ev.EventInput = new ev.EventInput();\nconst inputHistoryArr: InputHistory[] = [];\n\n// test\n/* export function sendLoop()\n{\n\tsocket.send(JSON.stringify(inputState));\n} */\n\nexport function handleInput()\n{\n\t/* last_time = actual_time;\n\tactual_time = Date.now();\n\tdelta_time = (actual_time - last_time) / 1000; */\n\n\tdelta_time = c.fixedDeltaTime;\n\t// console.log(`delta_time: ${delta_time}`);\n\n\tinputState.id = Date.now();\n\tinputState.input = en.InputEnum.noInput;\n\n\tconst keys = pong.keys;\n\tif (keys.length !== 0)\n\t{\n\t\tif (keys.indexOf(\"g\") != -1)\n\t\t{\n\t\t\tgridDisplay = !gridDisplay;\n\t\t\tpong.deleteKey(\"g\");\n\t\t}\n\t\tplayerMovements(delta_time, keys);\n\t}\n\n\tif (!matchEnded) {\n\t\tsocket.send(JSON.stringify(inputState));\n\t}\n\t// setTimeout(testInputDelay, 100);\n\tinputHistoryArr.push(new InputHistory(inputState, delta_time));\n\n\t// client prediction\n\tif (inputState.input !== en.InputEnum.noInput) {\n\t\t// TODO: peut-etre le mettre dans game loop ?\n\t\t// Attention au delta time dans ce cas !\n\t\tplayerMovePrediction(delta_time, inputState.input);\n\t}\n}\n\nfunction playerMovements(delta: number, keys: string[])\n{\n\tif (keys.indexOf(\"w\") !== -1 || keys.indexOf(\"ArrowUp\".toLowerCase()) !== -1)\n\t{\n\t\tif (keys.indexOf(\"s\") === -1 && keys.indexOf(\"ArrowDown\".toLowerCase()) === -1) {\n\t\t\tinputState.input = en.InputEnum.up;\n\t\t}\n\t}\n\telse if (keys.indexOf(\"s\") !== -1 || keys.indexOf(\"ArrowDown\".toLowerCase()) !== -1) {\n\t\tinputState.input = en.InputEnum.down;\n\t}\n}\n\nfunction testInputDelay() {\n\tsocket.send(JSON.stringify(inputState));\n}\n\n\nfunction playerMovePrediction(delta: number, input: en.InputEnum)\n{\n\t// client prediction\n\tconst racket = clientInfo.racket;\n\tif (input === en.InputEnum.up) {\n\t\tracket.dir.y = -1;\n\t}\n\telse if (input === en.InputEnum.down) {\n\t\tracket.dir.y = 1;\n\t}\n\tracket.moveAndCollide(delta, [gc.wallTop, gc.wallBottom]);\n}\n\nexport function repeatInput(lastInputId: number)\n{\n\t// server reconciliation\n\tlet i = inputHistoryArr.findIndex((value: InputHistory) => {\n\t\tif (value.id === lastInputId) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t});\n\n\t// console.log(`inputHistory total: ${inputHistoryArr.length}` );\n\tinputHistoryArr.splice(0, i+1);\n\t// console.log(`inputHistory left: ${inputHistoryArr.length}` );\n\t\n\tinputHistoryArr.forEach((value: InputHistory) => {\n\t\tif (value.input !== en.InputEnum.noInput) {\n\t\t\tplayerMovePrediction(value.deltaTime, value.input);\n\t\t}\n\t});\n}\n","\nimport * as c from \"./constants.js\";\nimport type { MovingRectangle } from \"../shared_js/class/Rectangle.js\";\nimport type { GameComponents } from \"./class/GameComponents.js\";\n\nexport function wallsMovements(delta: number, gc: GameComponents)\n{\n\tconst wallTop = gc.wallTop;\n\tconst wallBottom = gc.wallBottom;\n\tif (wallTop.pos.y <= 0 || wallTop.pos.y >= c.movingWallPosMax) {\n\t\twallTop.dir.y *= -1;\n\t}\n\tif (wallBottom.pos.y >= c.h-c.wallSize || wallBottom.pos.y <= c.h-c.movingWallPosMax) {\n\t\twallBottom.dir.y *= -1;\n\t}\n\twallTop.moveAndCollide(delta, [gc.playerLeft, gc.playerRight]);\n\twallBottom.moveAndCollide(delta, [gc.playerLeft, gc.playerRight]);\n}\n","\nimport * as c from \"./constants.js\";\nimport * as en from \"../shared_js/enums.js\"\nimport { gc, matchOptions, clientInfo, clientInfoSpectator} from \"./global.js\";\nimport { wallsMovements } from \"../shared_js/wallsMovement.js\";\nimport type { RacketClient } from \"./class/RectangleClient.js\";\nimport type { VectorInteger } from \"../shared_js/class/Vector.js\";\n\nlet actual_time: number = Date.now();\nlet last_time: number;\nlet delta_time: number;\n\nexport function gameLoop()\n{\n\t/* last_time = actual_time;\n\tactual_time = Date.now();\n\tdelta_time = (actual_time - last_time) / 1000; */\n\n\tdelta_time = c.fixedDeltaTime;\n\t// console.log(`delta_gameLoop: ${delta_time}`);\n\n\t// interpolation\n\t// console.log(`dir.y: ${clientInfo.opponent.dir.y}, pos.y: ${clientInfo.opponent.pos.y}, opponentNextPos.y: ${clientInfo.opponentNextPos.y}`);\n\tif (clientInfo.opponent.dir.y != 0 ) {\n\t\tracketInterpolation(delta_time, clientInfo.opponent, clientInfo.opponentNextPos);\n\t}\n\n\t// client prediction\n\tgc.ballsArr.forEach((ball) => {\n\t\tball.moveAndBounce(delta_time, [gc.wallTop, gc.wallBottom, gc.playerLeft, gc.playerRight]);\n\t});\n\n\tif (matchOptions & en.MatchOptions.movingWalls) {\n\t\twallsMovements(delta_time, gc);\n\t}\n}\n\nexport function gameLoopSpectator()\n{\n\tdelta_time = c.fixedDeltaTime;\n\n\t// interpolation\n\tif (gc.playerLeft.dir.y != 0 ) {\n\t\tracketInterpolation(delta_time, gc.playerLeft, clientInfoSpectator.playerLeftNextPos);\n\t}\n\tif (gc.playerRight.dir.y != 0 ) {\n\t\tracketInterpolation(delta_time, gc.playerRight, clientInfoSpectator.playerRightNextPos);\n\t}\n\n\t// client prediction\n\tgc.ballsArr.forEach((ball) => {\n\t\tball.moveAndBounce(delta_time, [gc.wallTop, gc.wallBottom, gc.playerLeft, gc.playerRight]);\n\t});\n\n\tif (matchOptions & en.MatchOptions.movingWalls) {\n\t\twallsMovements(delta_time, gc);\n\t}\n}\n\nfunction racketInterpolation(delta: number, racket: RacketClient, nextPos: VectorInteger)\n{\n\t// interpolation\n\tracket.moveAndCollide(delta, [gc.wallTop, gc.wallBottom]);\n\n\tif ((racket.dir.y > 0 && racket.pos.y > nextPos.y)\n\t|| (racket.dir.y < 0 && racket.pos.y < nextPos.y))\n\t{\n\t\tracket.dir.y = 0;\n\t\tracket.pos.y = nextPos.y;\n\t}\n}\n","\nimport { pong, gc } from \"./global.js\"\nimport { gridDisplay } from \"./handleInput.js\";\n\nexport function drawLoop()\n{\n\tpong.clear();\n\t\n\tif (gridDisplay) {\n\t\tdrawGrid();\n\t}\n\n\tdrawStatic();\n\n\tgc.text1.update();\n\tgc.text2.update();\n\tgc.text3.update();\n\n\tdrawDynamic();\n}\n\nfunction drawDynamic()\n{\n\tgc.scoreLeft.update();\n\tgc.scoreRight.update();\n\tgc.playerLeft.update();\n\tgc.playerRight.update();\n\tgc.ballsArr.forEach((ball) => {\n\t\tball.update();\n\t});\n}\n\nfunction drawStatic()\n{\n\tgc.midLine.update();\n\tgc.wallTop.update();\n\tgc.wallBottom.update();\n}\n\nfunction drawGrid()\n{\n\tgc.w_grid_mid.update();\n\tgc.w_grid_u1.update();\n\tgc.w_grid_d1.update();\n\t\n\tgc.h_grid_mid.update();\n\tgc.h_grid_u1.update();\n\tgc.h_grid_d1.update();\n}\n","\nexport class InitOptions {\n\tsound = \"off\";\n\tmulti_balls = false;\n\tmoving_walls = false;\n\tisSomeoneIsInvited = false;\n\tisInvitedPerson = false;\n\tplayerOneUsername = \"\";\n\tplayerTwoUsername = \"\";\n}\n","\nimport * as c from \".././constants.js\"\n\nexport class GameArea {\n\tkeys: string[] = [];\n\thandleInputInterval: number = 0;\n\tgameLoopInterval: number = 0;\n\tdrawLoopInterval: number = 0;\n\tcanvas: HTMLCanvasElement;\n\tctx: CanvasRenderingContext2D;\n\tconstructor(canvas_id: string) {\n\t\tconst canvas = document.getElementById(\"game_area\");\n\t\tif (canvas && canvas instanceof HTMLCanvasElement) {\n\t\t\tthis.canvas = canvas;\n\t\t}\n\t\telse {\n\t\t\tconsole.log(\"GameArea init error, invalid canvas_id\");\n\t\t\treturn;\n\t\t}\n\t\tthis.ctx = this.canvas.getContext(\"2d\") as CanvasRenderingContext2D;\n\t\tthis.canvas.width = c.CanvasWidth;\n\t\tthis.canvas.height = c.CanvasWidth / c.CanvasRatio;\n\t}\n\taddKey(key: string) {\n\t\tkey = key.toLowerCase();\n\t\tvar i = this.keys.indexOf(key);\n\t\tif (i == -1)\n\t\t\tthis.keys.push(key);\n\t}\n\tdeleteKey(key: string) {\n\t\tkey = key.toLowerCase();\n\t\tvar i = this.keys.indexOf(key);\n\t\tif (i != -1) {\n\t\t\tthis.keys.splice(i, 1);\n\t\t}\n\t}\n\tclear() {\n\t\tthis.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n\t}\n}\n","\nimport { Vector, VectorInteger } from \"../../shared_js/class/Vector.js\";\nimport type { Component } from \"../../shared_js/class/interface.js\";\n\n// conflict with Text\nexport class TextElem implements Component {\n\tctx: CanvasRenderingContext2D;\n\tpos: VectorInteger;\n\tcolor: string;\n\tsize: number;\n\tfont: string;\n\ttext: string = \"\";\n\tconstructor(pos: VectorInteger, size: number,\n\t\t\tctx: CanvasRenderingContext2D, color: string, font: string = \"Bit5x3\")\n\t{\n\t\t// this.pos = Object.assign({}, pos); // create bug, Uncaught TypeError: X is not a function\n\t\tthis.pos = new VectorInteger(pos.x, pos.y);\n\t\tthis.size = size;\n\t\tthis.ctx = ctx;\n\t\tthis.color = color;\n\t\tthis.font = font;\n\t}\n\tupdate() {\n\t\tthis.ctx.font = this.size + \"px\" + \" \" + this.font;\n\t\tthis.ctx.fillStyle = this.color;\n\t\tthis.ctx.fillText(this.text, this.pos.x, this.pos.y);\n\t}\n\tclear() {\n\t\t// clear no very accurate for Text \n\t\t// https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics\n\t\tlet textMetric = this.ctx.measureText(this.text);\n\t\t// console.log(\"textMetric.width = \"+textMetric.width);\n\t\t// console.log(\"size = \"+this.size);\n\t\t// console.log(\"x = \"+this.pos.x);\n\t\t// console.log(\"y = \"+this.pos.y);\n\t\tthis.ctx.clearRect(this.pos.x - 1, this.pos.y-this.size + 1, textMetric.width, this.size);\n\t\t// +1 and -1 because float imprecision (and Math.floor() with VectorInteger dont work for the moment)\n\t\t// (or maybe its textMetric imprecision ?)\n\t}\n}\n\nexport class TextNumericValue extends TextElem {\n\tprivate _value: number = 0;\n\tconstructor(pos: VectorInteger, size: number,\n\t\t\tctx: CanvasRenderingContext2D, color: string, font?: string)\n\t{\n\t\tsuper(pos, size, ctx, color, font);\n\t}\n\tget value() {\n\t\treturn this._value;\n\t}\n\tset value(v: number) {\n\t\tthis._value = v;\n\t\tthis.text = v.toString();\n\t}\n}\n","\nimport { Vector, VectorInteger } from \"./Vector.js\";\nimport type { Component, Moving } from \"./interface.js\";\nimport * as c from \"../constants.js\"\n\nexport class Rectangle implements Component {\n\tpos: VectorInteger;\n\twidth: number;\n\theight: number;\n\tconstructor(pos: VectorInteger, width: number, height: number) {\n\t\tthis.pos = new VectorInteger(pos.x, pos.y);\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t}\n\tcollision(collider: Rectangle): boolean {\n\t\tconst thisLeft = this.pos.x;\n\t\tconst thisRight = this.pos.x + this.width;\n\t\tconst thisTop = this.pos.y;\n\t\tconst thisBottom = this.pos.y + this.height;\n\t\tconst colliderLeft = collider.pos.x;\n\t\tconst colliderRight = collider.pos.x + collider.width;\n\t\tconst colliderTop = collider.pos.y;\n\t\tconst colliderBottom = collider.pos.y + collider.height;\n\t\tif ((thisBottom < colliderTop)\n\t\t|| (thisTop > colliderBottom)\n\t\t|| (thisRight < colliderLeft)\n\t\t|| (thisLeft > colliderRight)) {\n\t\t\treturn false;\n\t\t}\n\t\telse {\n\t\t\treturn true;\n\t\t}\n\t}\n}\n\nexport class MovingRectangle extends Rectangle implements Moving {\n\tdir: Vector = new Vector(0,0);\n\tspeed: number;\n\treadonly baseSpeed: number;\n\tconstructor(pos: VectorInteger, width: number, height: number, baseSpeed: number) {\n\t\tsuper(pos, width, height);\n\t\tthis.baseSpeed = baseSpeed;\n\t\tthis.speed = baseSpeed;\n\t}\n\tmove(delta: number) { // Math.floor WIP until VectorInteger debug\n\t\t// console.log(`delta: ${delta}, speed: ${this.speed}, speed*delta: ${this.speed * delta}`);\n\t\t// this.pos.x += Math.floor(this.dir.x * this.speed * delta);\n\t\t// this.pos.y += Math.floor(this.dir.y * this.speed * delta);\n\t\tthis.pos.x += this.dir.x * this.speed * delta;\n\t\tthis.pos.y += this.dir.y * this.speed * delta;\n\t}\n\tmoveAndCollide(delta: number, colliderArr: Rectangle[]) {\n\t\tthis._moveAndCollideAlgo(delta, colliderArr);\n\t}\n\tprotected _moveAndCollideAlgo(delta: number, colliderArr: Rectangle[]) {\n\t\tlet oldPos = new VectorInteger(this.pos.x, this.pos.y);\n\t\tthis.move(delta);\n\t\tif (colliderArr.some(this.collision, this)) {\n\t\t\tthis.pos = oldPos;\n\t\t}\n\t}\n}\n\nexport class Racket extends MovingRectangle {\n\tconstructor(pos: VectorInteger, width: number, height: number, baseSpeed: number) {\n\t\tsuper(pos, width, height, baseSpeed);\n\t}\n\tmoveAndCollide(delta: number, colliderArr: Rectangle[]) {\n\t\t// let oldPos = new VectorInteger(this.pos.x, this.pos.y); // debug\n\t\tthis._moveAndCollideAlgo(delta, colliderArr);\n\t\t// console.log(`y change: ${this.pos.y - oldPos.y}`);\n\t}\n}\n\nexport class Ball extends MovingRectangle {\n\treadonly speedIncrease: number;\n\tballInPlay: boolean = false;\n\tconstructor(pos: VectorInteger, size: number, baseSpeed: number, speedIncrease: number) {\n\t\tsuper(pos, size, size, baseSpeed);\n\t\tthis.speedIncrease = speedIncrease;\n\t}\n\tmoveAndBounce(delta: number, colliderArr: Rectangle[]) {\n\t\tthis.move(delta);\n\t\tlet i = colliderArr.findIndex(this.collision, this);\n\t\tif (i != -1)\n\t\t{\n\t\t\tthis.bounce(colliderArr[i]);\n\t\t\tthis.move(delta);\n\t\t}\n\t}\n\tbounce(collider?: Rectangle) {\n\t\tthis._bounceAlgo(collider);\n\t}\n\tprotected _bounceAlgo(collider?: Rectangle) {\n\t\t/* Could be more generic, but testing only Racket is enough,\n\t\tbecause in Pong collider can only be Racket or Wall. */\n\t\tif (collider instanceof Racket) {\n\t\t\tthis._bounceRacket(collider);\n\t\t}\n\t\telse {\n\t\t\tthis._bounceWall();\n\t\t}\n\t}\n\tprotected _bounceWall() { // Should be enough for Wall\n\t\tthis.dir.y = this.dir.y * -1;\n\t}\n\tprotected _bounceRacket(racket: Racket) {\n\t\tthis._bounceRacketAlgo(racket);\n\t}\n\tprotected _bounceRacketAlgo(racket: Racket) {\n\t\tthis.speed += this.speedIncrease;\n\n\t\tlet x = this.dir.x * -1;\n\n\t\tconst angleFactorDegree = 60;\n\t\tconst angleFactor = angleFactorDegree / 90;\n\t\tconst racketHalf = racket.height/2;\n\t\tconst ballMid = this.pos.y + this.height/2;\n\t\tconst racketMid = racket.pos.y + racketHalf;\n\n\t\tlet impact = ballMid - racketMid;\n\t\tconst horizontalMargin = racketHalf * 0.15;\n\t\tif (impact < horizontalMargin && impact > -horizontalMargin) {\n\t\t\timpact = 0;\n\t\t}\n\t\telse if (impact > 0) {\n\t\t\timpact = impact - horizontalMargin;\n\t\t}\n\t\telse if (impact < 0) {\n\t\t\timpact = impact + horizontalMargin;\n\t\t}\n\n\t\tlet y = impact / (racketHalf - horizontalMargin) * angleFactor;\n\n\t\tthis.dir.assign(x, y);\n\t\t// Normalize Vector (for consistency in speed independent of direction)\n\t\tif (c.normalizedSpeed) {\n\t\t\tthis.dir = this.dir.normalized();\n\t\t}\n\t\t// console.log(`x: ${this.dir.x}, y: ${this.dir.y}`);\n\t}\n}\n","\nimport { Vector, VectorInteger } from \"../../shared_js/class/Vector.js\";\nimport type { GraphicComponent } from \"../../shared_js/class/interface.js\";\nimport { Rectangle, MovingRectangle, Racket, Ball } from \"../../shared_js/class/Rectangle.js\";\nimport { soundPongArr } from \"../audio.js\"\nimport { random } from \"../utils.js\";\n\nfunction updateRectangle(this: RectangleClient) {\n\tthis.ctx.fillStyle = this.color;\n\tthis.ctx.fillRect(this.pos.x, this.pos.y, this.width, this.height);\n}\n\nfunction clearRectangle(this: RectangleClient, pos?: VectorInteger) {\n\tif (pos)\n\t\tthis.ctx.clearRect(pos.x, pos.y, this.width, this.height);\n\telse\n\t\tthis.ctx.clearRect(this.pos.x, this.pos.y, this.width, this.height);\n}\n\nexport class RectangleClient extends Rectangle implements GraphicComponent {\n\tctx: CanvasRenderingContext2D;\n\tcolor: string;\n\tupdate: () => void;\n\tclear: (pos?: VectorInteger) => void;\n\tconstructor(pos: VectorInteger, width: number, height: number,\n\t\t\tctx: CanvasRenderingContext2D, color: string)\n\t{\n\t\tsuper(pos, width, height);\n\t\tthis.ctx = ctx;\n\t\tthis.color = color;\n\t\tthis.update = updateRectangle;\n\t\tthis.clear = clearRectangle;\n\t}\n}\n\nexport class MovingRectangleClient extends MovingRectangle implements GraphicComponent {\n\tctx: CanvasRenderingContext2D;\n\tcolor: string;\n\tupdate: () => void;\n\tclear: (pos?: VectorInteger) => void;\n\tconstructor(pos: VectorInteger, width: number, height: number, baseSpeed: number,\n\t\t\tctx: CanvasRenderingContext2D, color: string)\n\t{\n\t\tsuper(pos, width, height, baseSpeed);\n\t\tthis.ctx = ctx;\n\t\tthis.color = color;\n\t\tthis.update = updateRectangle;\n\t\tthis.clear = clearRectangle;\n\t}\n}\n\nexport class RacketClient extends Racket implements GraphicComponent {\n\tctx: CanvasRenderingContext2D;\n\tcolor: string;\n\tupdate: () => void;\n\tclear: (pos?: VectorInteger) => void;\n\tconstructor(pos: VectorInteger, width: number, height: number, baseSpeed: number,\n\t\t\tctx: CanvasRenderingContext2D, color: string)\n\t{\n\t\tsuper(pos, width, height, baseSpeed);\n\t\tthis.ctx = ctx;\n\t\tthis.color = color;\n\t\tthis.update = updateRectangle;\n\t\tthis.clear = clearRectangle;\n\t}\n}\n\nexport class BallClient extends Ball implements GraphicComponent {\n\tctx: CanvasRenderingContext2D;\n\tcolor: string;\n\tupdate: () => void;\n\tclear: (pos?: VectorInteger) => void;\n\tconstructor(pos: VectorInteger, size: number, baseSpeed: number, speedIncrease: number,\n\t\tctx: CanvasRenderingContext2D, color: string)\n\t{\n\t\tsuper(pos, size, baseSpeed, speedIncrease);\n\t\tthis.ctx = ctx;\n\t\tthis.color = color;\n\t\tthis.update = updateRectangle;\n\t\tthis.clear = clearRectangle;\n\t}\n\tbounce(collider?: Rectangle) {\n\t\tthis._bounceAlgo(collider);\n\t\tlet i = Math.floor(random(0, soundPongArr.length));\n\t\tsoundPongArr[ i ].play();\n\t\tconsole.log(`sound_i=${i}`); // debug log\n\t}\n}\n\nfunction updateLine(this: Line) {\n\tthis.ctx.fillStyle = this.color;\n\tlet pos: VectorInteger = new VectorInteger;\n\tlet i = 0;\n\twhile (i < this.segmentCount)\n\t{\n\t\t/* Horizontal Line */\n\t\t// pos.y = this.pos.y;\n\t\t// pos.x = this.pos.x + this.segmentWidth * i;\n\n\t\t/* Vertical Line */\n\t\tpos.x = this.pos.x;\n\t\tpos.y = this.pos.y + this.segmentHeight * i;\n\n\t\tthis.ctx.fillRect(pos.x, pos.y, this.segmentWidth, this.segmentHeight);\n\t\ti += 2;\n\t}\n}\n\nexport class Line extends RectangleClient {\n\tgapeCount: number = 0;\n\tsegmentCount: number;\n\tsegmentWidth: number;\n\tsegmentHeight: number;\n\tconstructor(pos: VectorInteger, width: number, height: number,\n\t\t\tctx: CanvasRenderingContext2D, color: string, gapeCount?: number)\n\t{\n\t\tsuper(pos, width, height, ctx, color);\n\t\tthis.update = updateLine;\n\t\tif (gapeCount)\n\t\t\tthis.gapeCount = gapeCount;\n\t\tthis.segmentCount = this.gapeCount * 2 + 1;\n\n\t\t/* Vertical Line */\n\t\tthis.segmentWidth = this.width;\n\t\tthis.segmentHeight = this.height / this.segmentCount;\n\n\t\t/* Horizontal Line */\n\t\t// this.segmentWidth = this.width / this.segmentCount;\n\t\t// this.segmentHeight = this.height;\n\t}\n}\n","\nimport * as c from \"../constants.js\"\nimport * as en from \"../../shared_js/enums.js\"\nimport { VectorInteger } from \"./Vector.js\";\nimport { Rectangle, MovingRectangle, Racket, Ball } from \"./Rectangle.js\";\nimport { random } from \"../utils.js\";\n\nexport class GameComponents {\n\twallTop: Rectangle | MovingRectangle;\n\twallBottom: Rectangle | MovingRectangle;\n\tplayerLeft: Racket;\n\tplayerRight: Racket;\n\tballsArr: Ball[] = [];\n\tconstructor(options: en.MatchOptions)\n\t{\n\t\tconst pos = new VectorInteger;\n\n\t\t// Rackets\n\t\tpos.assign(0+c.pw, c.h_mid-c.ph/2);\n\t\tthis.playerLeft = new Racket(pos, c.pw, c.ph, c.racketSpeed);\n\t\tpos.assign(c.w-c.pw-c.pw, c.h_mid-c.ph/2);\n\t\tthis.playerRight = new Racket(pos, c.pw, c.ph, c.racketSpeed);\n\t\n\t\t// Balls\n\t\tlet ballsCount = 1;\n\t\tif (options & en.MatchOptions.multiBalls) {\n\t\t\tballsCount = c.multiBallsCount;\n\t\t}\n\t\tpos.assign(-c.ballSize, -c.ballSize); // ball out =)\n\t\twhile (this.ballsArr.length < ballsCount) {\n\t\t\tthis.ballsArr.push(new Ball(pos, c.ballSize, c.ballSpeed, c.ballSpeedIncrease))\n\t\t}\n\t\tthis.ballsArr.forEach((ball) => {\n\t\t\tball.dir.x = 1;\n\t\t\tif (random() > 0.5) {\n\t\t\t\tball.dir.x *= -1;\n\t\t\t}\n\n\t\t\tball.dir.y = random(0, 0.2);\n\t\t\tif (random() > 0.5) {\n\t\t\t\tball.dir.y *= -1;\n\t\t\t}\n\n\t\t\tball.dir = ball.dir.normalized();\n\t\t});\n\n\t\t// Walls\n\t\tif (options & en.MatchOptions.movingWalls) {\n\t\t\tpos.assign(0, 0);\n\t\t\tthis.wallTop = new MovingRectangle(pos, c.w, c.wallSize, c.movingWallSpeed);\n\t\t\t(this.wallTop).dir.y = -1;\n\t\t\tpos.assign(0, c.h-c.wallSize);\n\t\t\tthis.wallBottom = new MovingRectangle(pos, c.w, c.wallSize, c.movingWallSpeed);\n\t\t\t(this.wallBottom).dir.y = 1;\n\t\t}\n\t\telse {\n\t\t\tpos.assign(0, 0);\n\t\t\tthis.wallTop = new Rectangle(pos, c.w, c.wallSize);\n\t\t\tpos.assign(0, c.h-c.wallSize);\n\t\t\tthis.wallBottom = new Rectangle(pos, c.w, c.wallSize);\n\t\t}\n\t}\n}\n","\nimport * as c from \"../constants.js\"\nimport * as en from \"../../shared_js/enums.js\"\nimport { Vector, VectorInteger } from \"../../shared_js/class/Vector.js\";\nimport { TextElem, TextNumericValue } from \"./Text.js\";\nimport { RectangleClient, MovingRectangleClient, RacketClient, BallClient, Line } from \"./RectangleClient.js\";\nimport { GameComponents } from \"../../shared_js/class/GameComponents.js\";\nimport type { MovingRectangle } from \"../../shared_js/class/Rectangle.js\";\n\nclass GameComponentsExtensionForClient extends GameComponents {\n\twallTop: RectangleClient | MovingRectangleClient;\n\twallBottom: RectangleClient | MovingRectangleClient;\n\tplayerLeft: RacketClient;\n\tplayerRight: RacketClient;\n\tballsArr: BallClient[];\n\tconstructor(options: en.MatchOptions, ctx: CanvasRenderingContext2D)\n\t{\n\t\tsuper(options);\n\n\t\t// Rackets\n\t\tconst basePL = this.playerLeft;\n\t\tconst basePR = this.playerRight;\n\t\tthis.playerLeft = new RacketClient(\n\t\tbasePL.pos, basePL.width, basePL.height, basePL.baseSpeed,\n\t\tctx, \"white\");\n\t\tthis.playerRight = new RacketClient(\n\t\tbasePR.pos, basePR.width, basePR.height, basePR.baseSpeed,\n\t\tctx, \"white\");\n\n\t\t// Balls\n\t\tconst newBallsArr: BallClient[] = [];\n\t\tthis.ballsArr.forEach((ball) => {\n\t\t\tnewBallsArr.push(new BallClient(ball.pos, ball.width, ball.baseSpeed, ball.speedIncrease,\n\t\t\tctx, \"white\")\n\t\t\t);\n\t\t});\n\t\tthis.ballsArr = newBallsArr;\n\n\t\t// Walls\n\t\tif (options & en.MatchOptions.movingWalls)\n\t\t{\n\t\t\tconst baseWT = this.wallTop;\n\t\t\tconst baseWB = this.wallBottom;\n\n\t\t\tthis.wallTop = new MovingRectangleClient(baseWT.pos, baseWT.width, baseWT.height, baseWT.baseSpeed,\n\t\t\tctx, \"grey\");\n\t\t\t(this.wallTop).dir.assign(baseWT.dir.x, baseWT.dir.y);\n\t\t\t\n\t\t\tthis.wallBottom = new MovingRectangleClient(baseWB.pos, baseWB.width, baseWB.height, baseWB.baseSpeed,\n\t\t\tctx, \"grey\");\n\t\t\t(this.wallBottom).dir.assign(baseWB.dir.x, baseWB.dir.y);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tconst baseWT = this.wallTop;\n\t\t\tconst baseWB = this.wallBottom;\n\t\t\tthis.wallTop = new RectangleClient(baseWT.pos, baseWT.width, baseWT.height,\n\t\t\tctx, \"grey\");\n\t\t\tthis.wallBottom = new RectangleClient(baseWB.pos, baseWB.width, baseWB.height,\n\t\t\tctx, \"grey\");\n\t\t}\n\t}\n}\n\nexport class GameComponentsClient extends GameComponentsExtensionForClient {\n\tmidLine: Line;\n\tscoreLeft: TextNumericValue;\n\tscoreRight: TextNumericValue;\n\ttext1: TextElem;\n\ttext2: TextElem;\n\ttext3: TextElem;\n\n\tw_grid_mid: RectangleClient;\n\tw_grid_u1: RectangleClient;\n\tw_grid_d1: RectangleClient;\n\th_grid_mid: RectangleClient;\n\th_grid_u1: RectangleClient;\n\th_grid_d1: RectangleClient;\n\tconstructor(options: en.MatchOptions, ctx: CanvasRenderingContext2D)\n\t{\n\t\tsuper(options, ctx);\n\t\tlet pos = new VectorInteger;\n\t\t// Scores\n\t\tpos.assign(c.w_mid-c.scoreSize*1.6, c.scoreSize*1.5);\n\t\tthis.scoreLeft = new TextNumericValue(pos, c.scoreSize, ctx, \"white\");\n\t\tpos.assign(c.w_mid+c.scoreSize*1.1, c.scoreSize*1.5);\n\t\tthis.scoreRight = new TextNumericValue(pos, c.scoreSize, ctx, \"white\");\n\t\tthis.scoreLeft.value = 0;\n\t\tthis.scoreRight.value = 0;\n\t\t\n\t\t// Text\n\t\tpos.assign(0, c.h_mid);\n\t\tthis.text1 = new TextElem(pos, Math.floor(c.w/8), ctx, \"white\");\n\t\tthis.text2 = new TextElem(pos, Math.floor(c.w/24), ctx, \"white\");\n\t\tthis.text3 = new TextElem(pos, Math.floor(c.w/24), ctx, \"white\");\n\t\n\t\t// Dotted Midline\n\t\tpos.assign(c.w_mid-c.midLineSize/2, 0+c.wallSize);\n\t\tthis.midLine = new Line(pos, c.midLineSize, c.h-c.wallSize*2, ctx, \"white\", 15);\n\t\n\t\t// Grid\n\t\tpos.assign(0, c.h_mid);\n\t\tthis.w_grid_mid = new RectangleClient(pos, c.w, c.gridSize, ctx, \"darkgreen\");\n\t\tpos.assign(0, c.h/4);\n\t\tthis.w_grid_u1 = new RectangleClient(pos, c.w, c.gridSize, ctx, \"darkgreen\");\n\t\tpos.assign(0, c.h-c.h/4);\n\t\tthis.w_grid_d1 = new RectangleClient(pos, c.w, c.gridSize, ctx, \"darkgreen\");\n\t\tpos.assign(c.w_mid, 0);\n\t\tthis.h_grid_mid = new RectangleClient(pos, c.gridSize, c.h, ctx, \"darkgreen\");\n\t\tpos.assign(c.w/4, 0);\n\t\tthis.h_grid_u1 = new RectangleClient(pos, c.gridSize, c.h, ctx, \"darkgreen\");\n\t\tpos.assign(c.w-c.w/4, 0);\n\t\tthis.h_grid_d1 = new RectangleClient(pos, c.gridSize, c.h, ctx, \"darkgreen\");\n\t}\n}\n","\nimport * as c from \"./constants.js\"\nimport * as en from \"../shared_js/enums.js\"\nimport { GameArea } from \"./class/GameArea.js\";\nimport { GameComponentsClient } from \"./class/GameComponentsClient.js\";\nimport { socket } from \"./ws.js\";\nimport { initAudio } from \"./audio.js\";\nimport type { InitOptions } from \"./class/InitOptions.js\";\n\nimport { pong } from \"./global.js\"\nimport { initPong, initGc, initMatchOptions } from \"./global.js\"\n\nexport function computeMatchOptions(options: InitOptions)\n{\n\tlet matchOptions = en.MatchOptions.noOption;\n\n\tif (options.multi_balls === true) {\n\t\tmatchOptions |= en.MatchOptions.multiBalls\n\t}\n\tif (options.moving_walls === true) {\n\t\tmatchOptions |= en.MatchOptions.movingWalls\n\t}\n\n\treturn matchOptions;\n}\n\nexport function initBase(matchOptions: en.MatchOptions, sound: string, gameAreaId: string)\n{\n\tinitMatchOptions(matchOptions);\n\tinitAudio(sound);\n\tinitPong(new GameArea(gameAreaId));\n\tinitGc(new GameComponentsClient(matchOptions, pong.ctx));\n}\n\nexport function destroyBase()\n{\n\tif (pong)\n\t{\n\t\tclearInterval(pong.handleInputInterval);\n\t\tclearInterval(pong.gameLoopInterval);\n\t\tclearInterval(pong.drawLoopInterval);\n\t\tinitPong(null);\n\t}\n\tif (socket && socket.OPEN) {\n\t\tsocket.close();\n\t}\n}\n","\nimport * as c from \"./constants.js\"\nimport { handleInput } from \"./handleInput.js\";\nimport { gameLoop } from \"./gameLoop.js\"\nimport { drawLoop } from \"./draw.js\";\nimport { countdown } from \"./utils.js\";\nimport { initWebSocket } from \"./ws.js\";\nimport type { InitOptions } from \"./class/InitOptions.js\";\nexport { InitOptions } from \"./class/InitOptions.js\";\nimport { initBase, destroyBase, computeMatchOptions } from \"./init.js\";\nexport { computeMatchOptions } from \"./init.js\";\n\n/* TODO: A way to delay the init of variables, but still use \"const\" not \"let\" ? */\nimport { pong, gc } from \"./global.js\"\nimport { initStartFunction } from \"./global.js\"\n\n\nexport function init(options: InitOptions, gameAreaId: string, token: string)\n{\n\tconst matchOptions = computeMatchOptions(options);\n\tinitBase(matchOptions, options.sound, gameAreaId);\n\n\tinitStartFunction(start);\n\tif (options.isSomeoneIsInvited) {\n\t\tinitWebSocket(matchOptions, token, options.playerOneUsername, true, options.playerTwoUsername, options.isInvitedPerson);\n\t}\n\telse {\n\t\tinitWebSocket(matchOptions, token, options.playerOneUsername);\n\t}\n}\n\nexport function destroy()\n{\n\tdestroyBase();\n}\n\nfunction start()\n{\n\tgc.text1.pos.assign(c.w*0.5, c.h*0.75);\n\tcountdown(c.matchStartDelay/1000, (count: number) => {\n\t\tgc.text1.clear();\n\t\tgc.text1.text = `${count}`;\n\t\tgc.text1.update();\n\t}, resume);\n}\n\nfunction resume()\n{\n\tgc.text1.text = \"\";\n\twindow.addEventListener('keydown', function (e) {\n\t\tpong.addKey(e.key);\n\t});\n\twindow.addEventListener('keyup', function (e) {\n\t\tpong.deleteKey(e.key);\n\t});\n\tpong.handleInputInterval = window.setInterval(handleInput, c.handleInputIntervalMS);\n\t// pong.handleInputInterval = window.setInterval(sendLoop, c.sendLoopIntervalMS);\n\tpong.gameLoopInterval = window.setInterval(gameLoop, c.gameLoopIntervalMS);\n\tpong.drawLoopInterval = window.setInterval(drawLoop, c.drawLoopIntervalMS);\n}\n","\n\n\n
\n\n
\n\n\t{#if showMatchEnded === true}\n\t\t
\n\t\t\t

{errorMessageWhenAttemptingToGetATicket}

\n\t\t
\n\t{/if}\n\t{#if showError === true}\n\t\t
\n\t\t\t
\n\t\t\t\tError\n\t\t\t\t\t\t

{errorMessageWhenAttemptingToGetATicket}

\n\t\t\t
\n\t\t
\n\t{/if}\n\t\n\n\t{#if showWaitPage === true}\n\t\t
\n\t\t\t
\n\t\t\t\tConnecting to the game...\n\t\t\t\t\t\t

{waitingMessage}

\n\t\t\t
\n\t\t
\n\t{/if}\n\n\n\n\t{#if optionsAreNotSet}\n\t\t{#if showGameOption === true}\n\t\t\t
\n\t\t\t\t
initGame()}>\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\tgame options\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t

sound :

\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{#if options.isSomeoneIsInvited === true}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t
\n\t\t{/if}\n\n\t\t{#if showInvitations}\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\tCurrent invitation(s)\n\t\t\t\t\t\t{#if isThereAnyInvitation}\n\t\t\t\t\t\t\t\t{#each invitations as invitation }\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t{invitation.playerOneUsername} has invited you to play a pong !\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t{#if isThereAnyInvitation === false}\n\t\t\t\t\t\t\t

Currently, no one asked to play with you.

\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t{/if}\n\t{/if}\n\n
\n\n\n","\n\n
\n\n
\n\t
\n\t\t
\n\t\t\t

Ranking

\n\t\t
\n\t
\n\t
\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{#each allUsers as user, i}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{#if user.username === currentUser.username}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t{/each}\n\t\t\t\t\n\t\t\t
#UsernameWinLoseDrawGames Played
{i + 1}You ({user.username}){user.username}{user.stats.winGame}{user.stats.loseGame}{user.stats.drawGame}{user.stats.totalGame}
\n\t\t
\n\t
\n
\n\n\n\n","\n\n\n
  • \n\t{match.id} \"{match.playerOneUsername}\" VS \"{match.playerTwoUsername}\"\n
  • \n\n\n\n\n","\n\n\n
    \n\n\t{#each arr as match}\n\t\t\n\t{/each}\n\n\n\n\n\n","import NotFound from \"../pages/NotFound.svelte\";\nimport ProfilePage from \"../pages/profile/ProfilePage.svelte\";\nimport SplashPage from \"../pages/SplashPage.svelte\";\nimport TwoFactorAuthentication from '../pages/TwoFactorAuthentication.svelte';\nimport UnauthorizedAccessPage from '../pages/UnauthorizedAccessPage.svelte';\nimport { wrap } from 'svelte-spa-router/wrap'\nimport TestPage from '../pages/TmpTestPage.svelte';\nimport Game from '../pages/game/Game.svelte';\nimport Ranking from '../pages/game/Ranking.svelte';\nimport SpectatorMatchList from '../pages/SpectatorMatchList.svelte';\n\n\n\nexport const primaryRoutes = {\n '/': SplashPage,\n '/2fa': TwoFactorAuthentication,\n '/game': Game,\n '/matchlist': SpectatorMatchList,\n '/ranking' : Ranking,\n '/profile': wrap({\n component: ProfilePage,\n conditions: [\n async(detail) => {\n const user = await fetch('http://transcendance:8080/api/v2/user')\n .then((resp) => resp.json())\n\n console.log('in /profile what is in user')\n console.log(user)\n\n if (user && user.username)\n return true;\n else\n return false;\n }\n ]\n }),\n '/profile/*': wrap({\n component: ProfilePage,\n conditions: [\n async(detail) => {\n const user = await fetch('http://transcendance:8080/api/v2/user')\n .then((resp) => resp.json())\n\n console.log('in /profile/* what is in user')\n console.log(user)\n\n if (user && user.username)\n return true;\n else\n return false;\n }\n ]\n }),\n\n '/unauthorized-access': UnauthorizedAccessPage,\n '*': NotFound\n};\n","\n\n\n\n\n\n\n\n\n","import App from './App.svelte';\n\nconst app = new App({\n\ttarget: document.body,\n\tprops: {\n\t\t// name: 'world'\n\t}\n});\n\nexport default app;"],"names":["empty","init","wrap","parse","_wrap","location","create_if_block","create_if_block_1","withNativeBlob","withNativeArrayBuffer","isView","lookup","decode","protocol","globalThis","encode","XMLHttpRequest","WebSocket","Socket","Engine","io","en.EventTypes","en.ClientRole","en.InputEnum","pong","c.w","c.h","matchAbort","en.PlayerSide","c.soundPongVolume","c.soundRobloxVolume","ev.ClientAnnouncePlayer","msg.error","msg.matchmaking","ev.ClientEvent","msg.matchmakingComplete","msg.matchAbort","en.MatchOptions","msg.win","msg.forfeit","msg.lose","delta_time","ev.EventInput","c.fixedDeltaTime","c.movingWallPosMax","c.wallSize","c.CanvasWidth","c.CanvasRatio","c.pw","c.h_mid","c.ph","c.racketSpeed","c.multiBallsCount","c.ballSize","c.ballSpeed","c.ballSpeedIncrease","c.movingWallSpeed","c.w_mid","c.scoreSize","c.midLineSize","c.gridSize","c.matchStartDelay","c.handleInputIntervalMS","c.gameLoopIntervalMS","c.drawLoopIntervalMS","pong.InitOptions","pong.destroy","pong.computeMatchOptions","pong.init"],"mappings":"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,OAAA,EAAA,OAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,OAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,OAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;;OAI/B,UAqDO,CAAA,IAAA,EAAA,MAAA,CAAA,CAAA;OApDN,UAAa,CAAA,MAAA,EAAA,EAAA,CAAA,CAAA;;OACb,UAkDQ,CAAA,MAAA,EAAA,OAAA,CAAA,CAAA;OAjDP,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7B,UAA6B,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;OAC7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"} \ No newline at end of file diff --git a/srcs/requirements/svelte/api_front/public/favicon.ico b/srcs/requirements/svelte/api_front/public/favicon.ico new file mode 100644 index 00000000..b7e7e5ca Binary files /dev/null and b/srcs/requirements/svelte/api_front/public/favicon.ico differ diff --git a/srcs/requirements/svelte/api_front/public/favicon.png b/srcs/requirements/svelte/api_front/public/favicon.png deleted file mode 100644 index 7e6f5eb5..00000000 Binary files a/srcs/requirements/svelte/api_front/public/favicon.png and /dev/null differ diff --git a/srcs/requirements/svelte/api_front/public/game/class/Event.ts b/srcs/requirements/svelte/api_front/public/game/class/Event.ts deleted file mode 100644 index 3f0d440a..00000000 --- a/srcs/requirements/svelte/api_front/public/game/class/Event.ts +++ /dev/null @@ -1,107 +0,0 @@ - -import * as en from "../enums.js" - -/* From Server */ -class ServerEvent { - type: en.EventTypes; - constructor(type: en.EventTypes = 0) { - this.type = type; - } -} - -class EventAssignId extends ServerEvent { - id: string; - constructor(id: string) { - super(en.EventTypes.assignId); - this.id = id; - } -} - -class EventMatchmakingComplete extends ServerEvent { - side: en.PlayerSide; - constructor(side: en.PlayerSide) { - super(en.EventTypes.matchmakingComplete); - this.side = side; - } -} - -class EventGameUpdate extends ServerEvent { - playerLeft = { - y: 0 - }; - playerRight = { - y: 0 - }; - ballsArr: { - x: number, - y: number, - dirX: number, - dirY: number, - speed: number - }[] = []; - wallTop? = { - y: 0 - }; - wallBottom? = { - y: 0 - }; - lastInputId = 0; - constructor() { // TODO: constructor that take GameComponentsServer maybe ? - super(en.EventTypes.gameUpdate); - } -} - -class EventScoreUpdate extends ServerEvent { - scoreLeft: number; - scoreRight: number; - constructor(scoreLeft: number, scoreRight: number) { - super(en.EventTypes.scoreUpdate); - this.scoreLeft = scoreLeft; - this.scoreRight = scoreRight; - } -} - -class EventMatchEnd extends ServerEvent { - winner: en.PlayerSide; - constructor(winner: en.PlayerSide) { - super(en.EventTypes.matchEnd); - this.winner = winner; - } -} - - -/* From Client */ -class ClientEvent { - type: en.EventTypes; // readonly ? - constructor(type: en.EventTypes = 0) { - this.type = type; - } -} - -class ClientAnnounce extends ClientEvent { - role: en.ClientRole; - clientId: string; - matchOptions: en.MatchOptions; - constructor(role: en.ClientRole, matchOptions: en.MatchOptions, clientId: string = "") { - super(en.EventTypes.clientAnnounce); - this.role = role; - this.clientId = clientId; - this.matchOptions = matchOptions; - } -} - -class EventInput extends ClientEvent { - input: en.InputEnum; - id: number; - constructor(input: en.InputEnum = en.InputEnum.noInput, id: number = 0) { - super(en.EventTypes.clientInput); - this.input = input; - this.id = id; - } -} - -export { - ServerEvent, EventAssignId, EventMatchmakingComplete, - EventGameUpdate, EventScoreUpdate, EventMatchEnd, - ClientEvent, ClientAnnounce, EventInput -} diff --git a/srcs/requirements/svelte/api_front/public/game/gameLoop.ts b/srcs/requirements/svelte/api_front/public/game/gameLoop.ts deleted file mode 100644 index 593d1eaa..00000000 --- a/srcs/requirements/svelte/api_front/public/game/gameLoop.ts +++ /dev/null @@ -1,49 +0,0 @@ - -import * as c from "./constants.js"; -import * as en from "../shared_js/enums.js" -import { gc, matchOptions, clientInfo } from "./global.js"; -import { wallsMovements } from "../shared_js/wallsMovement.js"; - -let actual_time: number = Date.now(); -let last_time: number; -let delta_time: number; - -function gameLoop() -{ - /* last_time = actual_time; - actual_time = Date.now(); - delta_time = (actual_time - last_time) / 1000; */ - - delta_time = c.fixedDeltaTime; - // console.log(`delta_gameLoop: ${delta_time}`); - - // interpolation - // console.log(`dir.y: ${clientInfo.opponent.dir.y}, pos.y: ${clientInfo.opponent.pos.y}, opponentNextPos.y: ${clientInfo.opponentNextPos.y}`); - if (clientInfo.opponent.dir.y != 0 ) { - opponentInterpolation(delta_time); - } - - // client prediction - gc.ballsArr.forEach((ball) => { - ball.moveAndBounce(delta_time, [gc.wallTop, gc.wallBottom, gc.playerLeft, gc.playerRight]); - }); - - if (matchOptions & en.MatchOptions.movingWalls) { - wallsMovements(delta_time, gc); - } -} - -function opponentInterpolation(delta: number) -{ - // interpolation - clientInfo.opponent.moveAndCollide(delta, [gc.wallTop, gc.wallBottom]); - - if ((clientInfo.opponent.dir.y > 0 && clientInfo.opponent.pos.y > clientInfo.opponentNextPos.y) - || (clientInfo.opponent.dir.y < 0 && clientInfo.opponent.pos.y < clientInfo.opponentNextPos.y)) - { - clientInfo.opponent.dir.y = 0; - clientInfo.opponent.pos.y = clientInfo.opponentNextPos.y; - } -} - -export {gameLoop} diff --git a/srcs/requirements/svelte/api_front/public/game/global.ts b/srcs/requirements/svelte/api_front/public/game/global.ts deleted file mode 100644 index 7d0a7126..00000000 --- a/srcs/requirements/svelte/api_front/public/game/global.ts +++ /dev/null @@ -1,3 +0,0 @@ - -export {pong, gc, matchOptions} from "./pong.js" -export {socket, clientInfo} from "./ws.js" diff --git a/srcs/requirements/svelte/api_front/public/game/pong.ts b/srcs/requirements/svelte/api_front/public/game/pong.ts deleted file mode 100644 index 5c9dcce0..00000000 --- a/srcs/requirements/svelte/api_front/public/game/pong.ts +++ /dev/null @@ -1,99 +0,0 @@ - -initDom(); -function initDom() { - document.getElementById("play_pong_button").addEventListener("click", init); -} - -import * as c from "./constants.js" -import * as en from "../shared_js/enums.js" -import { GameArea } from "./class/GameArea.js"; -import { GameComponentsClient } from "./class/GameComponentsClient.js"; -import { handleInput } from "./handleInput.js"; -// import { sendLoop } from "./handleInput.js"; -import { gameLoop } from "./gameLoop.js" -import { drawLoop } from "./draw.js"; -import { countdown } from "./utils.js"; -import { initWebSocket } from "./ws.js"; -import { initAudio } from "./audio.js"; - - -/* Keys - Racket: W/S OR Up/Down - Grid On-Off: G -*/ - -/* TODO: A way to delay the init of variables, but still use "const" not "let" ? */ -export let pong: GameArea; -export let gc: GameComponentsClient; -export let matchOptions: en.MatchOptions = en.MatchOptions.noOption; - -function init() -{ - console.log("multi_balls:"+(document.getElementById("multi_balls")).checked); - console.log("moving_walls:"+(document.getElementById("moving_walls")).checked); - console.log("sound_on:"+(document.getElementById("sound_on")).checked); - - let soundMutedFlag = false; - if ( (document.getElementById("sound_off")).checked ) { - soundMutedFlag = true; - } - initAudio(soundMutedFlag); - - if ( (document.getElementById("multi_balls")).checked ) { - matchOptions |= en.MatchOptions.multiBalls; - } - if ( (document.getElementById("moving_walls")).checked ) { - matchOptions |= en.MatchOptions.movingWalls; - } - - document.getElementById("div_game_options").hidden = true; - - pong = new GameArea(); - gc = new GameComponentsClient(matchOptions, pong.ctx); - initWebSocket(matchOptions); -} - -function matchmaking() -{ - console.log("Searching an opponent..."); - gc.text1.clear(); - gc.text1.pos.assign(c.w/5, c.h_mid); - gc.text1.text = "Searching..."; - gc.text1.update(); -} - -function matchmakingComplete() -{ - console.log("Match Found !"); - gc.text1.clear(); - gc.text1.pos.assign(c.w/8, c.h_mid); - gc.text1.text = "Match Found !"; - gc.text1.update(); -} - -function startGame() { - gc.text1.pos.assign(c.w_mid, c.h_mid+c.h/4); - countdown(c.matchStartDelay/1000, (count: number) => { - gc.text1.clear(); - gc.text1.text = `${count}`; - gc.text1.update(); - }, resumeGame); -} - -function resumeGame() -{ - gc.text1.text = ""; - window.addEventListener('keydown', function (e) { - pong.addKey(e.key); - }); - window.addEventListener('keyup', function (e) { - pong.deleteKey(e.key); - }); - pong.handleInputInterval = window.setInterval(handleInput, c.handleInputIntervalMS); - // pong.handleInputInterval = window.setInterval(sendLoop, c.sendLoopIntervalMS); - pong.gameLoopInterval = window.setInterval(gameLoop, c.gameLoopIntervalMS); - pong.drawLoopInterval = window.setInterval(drawLoop, c.drawLoopIntervalMS); -} - - -export {matchmaking, matchmakingComplete, startGame} diff --git a/srcs/requirements/svelte/api_front/public/game/utils copy.ts b/srcs/requirements/svelte/api_front/public/game/utils copy.ts deleted file mode 100644 index e8f7bca3..00000000 --- a/srcs/requirements/svelte/api_front/public/game/utils copy.ts +++ /dev/null @@ -1,27 +0,0 @@ - -import { MovingRectangle } from "./class/Rectangle.js"; - -function random(min: number = 0, max: number = 1) { - return Math.random() * (max - min) + min; -} - -function sleep (ms: number) { - return new Promise((resolve) => setTimeout(resolve, ms)); -} - -function clamp(n: number, min: number, max: number) : number -{ - if (n < min) - n = min; - else if (n > max) - n = max; - return (n); -} - -// Typescript hack, unused -function assertMovingRectangle(value: unknown): asserts value is MovingRectangle { - // if (value !== MovingRectangle) throw new Error("Not a MovingRectangle"); - return; -} - -export {random, sleep, clamp, assertMovingRectangle} diff --git a/srcs/requirements/svelte/api_front/public/index.html b/srcs/requirements/svelte/api_front/public/index.html index 5da7ed3e..786ea3ad 100644 --- a/srcs/requirements/svelte/api_front/public/index.html +++ b/srcs/requirements/svelte/api_front/public/index.html @@ -4,9 +4,9 @@ - Svelte app + Potato Pong - + diff --git a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/0.ogg b/srcs/requirements/svelte/api_front/public/sounds/sound/pong/0.ogg deleted file mode 100644 index 93d05409..00000000 Binary files a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/0.ogg and /dev/null differ diff --git a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/1.ogg b/srcs/requirements/svelte/api_front/public/sounds/sound/pong/1.ogg deleted file mode 100644 index 3a268b34..00000000 Binary files a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/1.ogg and /dev/null differ diff --git a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/10.ogg b/srcs/requirements/svelte/api_front/public/sounds/sound/pong/10.ogg deleted file mode 100644 index 855ad78b..00000000 Binary files a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/10.ogg and /dev/null differ diff --git a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/11.ogg b/srcs/requirements/svelte/api_front/public/sounds/sound/pong/11.ogg deleted file mode 100644 index 655917b5..00000000 Binary files a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/11.ogg and /dev/null differ diff --git a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/12.ogg b/srcs/requirements/svelte/api_front/public/sounds/sound/pong/12.ogg deleted file mode 100644 index 11336a76..00000000 Binary files a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/12.ogg and /dev/null differ diff --git a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/13.ogg b/srcs/requirements/svelte/api_front/public/sounds/sound/pong/13.ogg deleted file mode 100644 index 71cfead6..00000000 Binary files a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/13.ogg and /dev/null differ diff --git a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/14.ogg b/srcs/requirements/svelte/api_front/public/sounds/sound/pong/14.ogg deleted file mode 100644 index 066fff69..00000000 Binary files a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/14.ogg and /dev/null differ diff --git a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/15.ogg b/srcs/requirements/svelte/api_front/public/sounds/sound/pong/15.ogg deleted file mode 100644 index 011f139c..00000000 Binary files a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/15.ogg and /dev/null differ diff --git a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/16.ogg b/srcs/requirements/svelte/api_front/public/sounds/sound/pong/16.ogg deleted file mode 100644 index 7e852275..00000000 Binary files a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/16.ogg and /dev/null differ diff --git a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/17.ogg b/srcs/requirements/svelte/api_front/public/sounds/sound/pong/17.ogg deleted file mode 100644 index 9860139d..00000000 Binary files a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/17.ogg and /dev/null differ diff --git a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/18.ogg b/srcs/requirements/svelte/api_front/public/sounds/sound/pong/18.ogg deleted file mode 100644 index 6ad25391..00000000 Binary files a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/18.ogg and /dev/null differ diff --git a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/19.ogg b/srcs/requirements/svelte/api_front/public/sounds/sound/pong/19.ogg deleted file mode 100644 index f6fc42d6..00000000 Binary files a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/19.ogg and /dev/null differ diff --git a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/2.ogg b/srcs/requirements/svelte/api_front/public/sounds/sound/pong/2.ogg deleted file mode 100644 index 0f09bb30..00000000 Binary files a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/2.ogg and /dev/null differ diff --git a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/20.ogg b/srcs/requirements/svelte/api_front/public/sounds/sound/pong/20.ogg deleted file mode 100644 index 11ac780e..00000000 Binary files a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/20.ogg and /dev/null differ diff --git a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/21.ogg b/srcs/requirements/svelte/api_front/public/sounds/sound/pong/21.ogg deleted file mode 100644 index 7c724dd4..00000000 Binary files a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/21.ogg and /dev/null differ diff --git a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/22.ogg b/srcs/requirements/svelte/api_front/public/sounds/sound/pong/22.ogg deleted file mode 100644 index b2ca9758..00000000 Binary files a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/22.ogg and /dev/null differ diff --git a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/23.ogg b/srcs/requirements/svelte/api_front/public/sounds/sound/pong/23.ogg deleted file mode 100644 index f57724b9..00000000 Binary files a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/23.ogg and /dev/null differ diff --git a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/24.ogg b/srcs/requirements/svelte/api_front/public/sounds/sound/pong/24.ogg deleted file mode 100644 index 90093efc..00000000 Binary files a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/24.ogg and /dev/null differ diff --git a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/25.ogg b/srcs/requirements/svelte/api_front/public/sounds/sound/pong/25.ogg deleted file mode 100644 index 27dfe8eb..00000000 Binary files a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/25.ogg and /dev/null differ diff --git a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/26.ogg b/srcs/requirements/svelte/api_front/public/sounds/sound/pong/26.ogg deleted file mode 100644 index 80cb60fa..00000000 Binary files a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/26.ogg and /dev/null differ diff --git a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/27.ogg b/srcs/requirements/svelte/api_front/public/sounds/sound/pong/27.ogg deleted file mode 100644 index 13332de6..00000000 Binary files a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/27.ogg and /dev/null differ diff --git a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/28.ogg b/srcs/requirements/svelte/api_front/public/sounds/sound/pong/28.ogg deleted file mode 100644 index 29615795..00000000 Binary files a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/28.ogg and /dev/null differ diff --git a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/29.ogg b/srcs/requirements/svelte/api_front/public/sounds/sound/pong/29.ogg deleted file mode 100644 index 41f95343..00000000 Binary files a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/29.ogg and /dev/null differ diff --git a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/3.ogg b/srcs/requirements/svelte/api_front/public/sounds/sound/pong/3.ogg deleted file mode 100644 index 12448222..00000000 Binary files a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/3.ogg and /dev/null differ diff --git a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/30.ogg b/srcs/requirements/svelte/api_front/public/sounds/sound/pong/30.ogg deleted file mode 100644 index bd4e4ffd..00000000 Binary files a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/30.ogg and /dev/null differ diff --git a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/31.ogg b/srcs/requirements/svelte/api_front/public/sounds/sound/pong/31.ogg deleted file mode 100644 index 4447b52a..00000000 Binary files a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/31.ogg and /dev/null differ diff --git a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/32.ogg b/srcs/requirements/svelte/api_front/public/sounds/sound/pong/32.ogg deleted file mode 100644 index a58240a1..00000000 Binary files a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/32.ogg and /dev/null differ diff --git a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/4.ogg b/srcs/requirements/svelte/api_front/public/sounds/sound/pong/4.ogg deleted file mode 100644 index 688b1f81..00000000 Binary files a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/4.ogg and /dev/null differ diff --git a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/5.ogg b/srcs/requirements/svelte/api_front/public/sounds/sound/pong/5.ogg deleted file mode 100644 index d2163268..00000000 Binary files a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/5.ogg and /dev/null differ diff --git a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/6.ogg b/srcs/requirements/svelte/api_front/public/sounds/sound/pong/6.ogg deleted file mode 100644 index 34bdd117..00000000 Binary files a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/6.ogg and /dev/null differ diff --git a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/7.ogg b/srcs/requirements/svelte/api_front/public/sounds/sound/pong/7.ogg deleted file mode 100644 index 9c9c994f..00000000 Binary files a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/7.ogg and /dev/null differ diff --git a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/8.ogg b/srcs/requirements/svelte/api_front/public/sounds/sound/pong/8.ogg deleted file mode 100644 index 0f9acf99..00000000 Binary files a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/8.ogg and /dev/null differ diff --git a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/9.ogg b/srcs/requirements/svelte/api_front/public/sounds/sound/pong/9.ogg deleted file mode 100644 index 15d82091..00000000 Binary files a/srcs/requirements/svelte/api_front/public/sounds/sound/pong/9.ogg and /dev/null differ diff --git a/srcs/requirements/svelte/api_front/public/sounds/sound/roblox-oof.ogg b/srcs/requirements/svelte/api_front/public/sounds/sound/roblox-oof.ogg deleted file mode 100644 index 689946ed..00000000 Binary files a/srcs/requirements/svelte/api_front/public/sounds/sound/roblox-oof.ogg and /dev/null differ diff --git a/srcs/requirements/svelte/api_front/src/App.svelte b/srcs/requirements/svelte/api_front/src/App.svelte index 7a383eb1..5f293b5e 100644 --- a/srcs/requirements/svelte/api_front/src/App.svelte +++ b/srcs/requirements/svelte/api_front/src/App.svelte @@ -2,7 +2,7 @@ // routing // may not need {link} here import Router, { link, replace } from "svelte-spa-router"; - import { primaryRoutes } from "./routes/primaryRoutes.js"; + import { primaryRoutes } from "./routes/primaryRoutes.js"; // import primaryRoutes from "./routes/primaryRoutes.svelte"; const conditionsFailed = (event) => { diff --git a/srcs/requirements/svelte/api_front/src/main.js b/srcs/requirements/svelte/api_front/src/main.js new file mode 100644 index 00000000..34f779eb --- /dev/null +++ b/srcs/requirements/svelte/api_front/src/main.js @@ -0,0 +1,9 @@ +import App from './App.svelte'; +const app = new App({ + target: document.body, + props: { + // name: 'world' + } +}); +export default app; +//# sourceMappingURL=main.js.map \ No newline at end of file diff --git a/srcs/requirements/svelte/api_front/src/main.js.map b/srcs/requirements/svelte/api_front/src/main.js.map new file mode 100644 index 00000000..3bd45e8b --- /dev/null +++ b/srcs/requirements/svelte/api_front/src/main.js.map @@ -0,0 +1 @@ +{"version":3,"file":"main.js","sourceRoot":"","sources":["main.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,cAAc,CAAC;AAE/B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC;IACnB,MAAM,EAAE,QAAQ,CAAC,IAAI;IACrB,KAAK,EAAE;IACN,gBAAgB;KAChB;CACD,CAAC,CAAC;AAEH,eAAe,GAAG,CAAC"} \ No newline at end of file diff --git a/srcs/requirements/svelte/api_front/src/pages/GamePage.svelte b/srcs/requirements/svelte/api_front/src/pages/GamePage.svelte deleted file mode 100644 index 5e08c6f4..00000000 --- a/srcs/requirements/svelte/api_front/src/pages/GamePage.svelte +++ /dev/null @@ -1,106 +0,0 @@ - - - -
    -
    - game options -
    - - -
    -
    - - -
    -
    - - - - - -
    -
    - -
    -
    -
    - -
    -

    --- keys ---

    -

    move up: 'w' or 'up arrow'

    -

    move down: 's' OR 'down arrow'

    -

    grid on/off: 'g'

    -
    - -
    - -
    - - - - - \ No newline at end of file diff --git a/srcs/requirements/svelte/api_front/src/pages/SpectatorMatchList.svelte b/srcs/requirements/svelte/api_front/src/pages/SpectatorMatchList.svelte new file mode 100644 index 00000000..9807f136 --- /dev/null +++ b/srcs/requirements/svelte/api_front/src/pages/SpectatorMatchList.svelte @@ -0,0 +1,35 @@ + + + +
    + + {#each arr as match} + + {/each} + + + + + diff --git a/srcs/requirements/svelte/api_front/src/pages/game/Game.svelte b/srcs/requirements/svelte/api_front/src/pages/game/Game.svelte index 4a4741b1..d9b37fe3 100644 --- a/srcs/requirements/svelte/api_front/src/pages/game/Game.svelte +++ b/srcs/requirements/svelte/api_front/src/pages/game/Game.svelte @@ -1,88 +1,381 @@ - +
    + +
    - - - - - -
    .
    - -
    + {#if showMatchEnded === true} +
    +

    {errorMessageWhenAttemptingToGetATicket}

    +
    + {/if} + {#if showError === true} +
    - game options -
    - - -
    -
    - - -
    -
    - - - - - -
    -
    - -
    + Error +

    {errorMessageWhenAttemptingToGetATicket}

    +
    + {/if} + -
    - -
    + {#if showWaitPage === true} +
    +
    + Connecting to the game... +

    {waitingMessage}

    +
    +
    + {/if} - - + + + {#if optionsAreNotSet} + {#if showGameOption === true} +
    +
    initGame()}> +
    + +
    + game options +
    + + +
    +
    + + +
    +
    +

    sound :

    + + + + +
    +
    + + +
    + {#if options.isSomeoneIsInvited === true} + + {/if} +
    + +
    +
    +
    + +
    +
    + {/if} + + {#if showInvitations} +
    +
    + +
    + Current invitation(s) + {#if isThereAnyInvitation} + {#each invitations as invitation } +
    + {invitation.playerOneUsername} has invited you to play a pong ! + + +
    + {/each} + {/if} + {#if isThereAnyInvitation === false} +

    Currently, no one asked to play with you.

    + + {/if} +
    +
    +
    + {/if} + {/if} + +
    diff --git a/srcs/requirements/svelte/api_front/src/pages/game/Ranking.svelte b/srcs/requirements/svelte/api_front/src/pages/game/Ranking.svelte new file mode 100644 index 00000000..cb5ea123 --- /dev/null +++ b/srcs/requirements/svelte/api_front/src/pages/game/Ranking.svelte @@ -0,0 +1,73 @@ + + +
    + +
    +
    +
    +

    Ranking

    +
    +
    +
    +
    + + + + + + + + + + + + + {#each allUsers as user, i} + + + {#if user.username === currentUser.username} + + {:else} + + {/if} + + + + + + {/each} + +
    #UsernameWinLoseDrawGames Played
    {i + 1}You ({user.username}){user.username}{user.stats.winGame}{user.stats.loseGame}{user.stats.drawGame}{user.stats.totalGame}
    +
    +
    +
    + + + diff --git a/srcs/requirements/svelte/api_front/public/game/audio.ts b/srcs/requirements/svelte/api_front/src/pages/game/client/audio.ts similarity index 50% rename from srcs/requirements/svelte/api_front/public/game/audio.ts rename to srcs/requirements/svelte/api_front/src/pages/game/client/audio.ts index 74c73336..07b846d2 100644 --- a/srcs/requirements/svelte/api_front/public/game/audio.ts +++ b/srcs/requirements/svelte/api_front/src/pages/game/client/audio.ts @@ -2,12 +2,17 @@ import * as c from "./constants.js" export const soundPongArr: HTMLAudioElement[] = []; -export const soundRoblox = new Audio("http://localhost:8080/sound/roblox-oof.ogg"); +export const soundRoblox = new Audio("http://transcendance:8080/sound/roblox-oof.ogg"); -export function initAudio(muteFlag: boolean) +export function initAudio(sound: string) { + let muteFlag = true; + if (sound === "on") { + muteFlag = false; + } + for (let i = 0; i <= 32; i++) { - soundPongArr.push(new Audio("http://localhost:8080/sound/pong/"+i+".ogg")); + soundPongArr.push(new Audio("http://transcendance:8080/sound/pong/"+i+".ogg")); soundPongArr[i].volume = c.soundPongVolume; soundPongArr[i].muted = muteFlag; } diff --git a/srcs/requirements/svelte/api_front/public/game/class/GameArea.ts b/srcs/requirements/svelte/api_front/src/pages/game/client/class/GameArea.ts similarity index 72% rename from srcs/requirements/svelte/api_front/public/game/class/GameArea.ts rename to srcs/requirements/svelte/api_front/src/pages/game/client/class/GameArea.ts index e6921e4e..9b90d4e5 100644 --- a/srcs/requirements/svelte/api_front/public/game/class/GameArea.ts +++ b/srcs/requirements/svelte/api_front/src/pages/game/client/class/GameArea.ts @@ -1,21 +1,25 @@ import * as c from ".././constants.js" -class GameArea { +export class GameArea { keys: string[] = []; handleInputInterval: number = 0; gameLoopInterval: number = 0; drawLoopInterval: number = 0; canvas: HTMLCanvasElement; ctx: CanvasRenderingContext2D; - constructor() { - this.canvas = document.createElement("canvas"); + constructor(canvas_id: string) { + const canvas = document.getElementById("game_area"); + if (canvas && canvas instanceof HTMLCanvasElement) { + this.canvas = canvas; + } + else { + console.log("GameArea init error, invalid canvas_id"); + return; + } this.ctx = this.canvas.getContext("2d") as CanvasRenderingContext2D; this.canvas.width = c.CanvasWidth; this.canvas.height = c.CanvasWidth / c.CanvasRatio; - let container = document.getElementById("canvas_container"); - if (container) - container.insertBefore(this.canvas, container.childNodes[0]); } addKey(key: string) { key = key.toLowerCase(); @@ -34,5 +38,3 @@ class GameArea { this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height); } } - -export {GameArea} diff --git a/srcs/requirements/svelte/api_front/public/game/class/GameComponentsClient.ts b/srcs/requirements/svelte/api_front/src/pages/game/client/class/GameComponentsClient.ts similarity index 92% rename from srcs/requirements/svelte/api_front/public/game/class/GameComponentsClient.ts rename to srcs/requirements/svelte/api_front/src/pages/game/client/class/GameComponentsClient.ts index bf90f66f..63797971 100644 --- a/srcs/requirements/svelte/api_front/public/game/class/GameComponentsClient.ts +++ b/srcs/requirements/svelte/api_front/src/pages/game/client/class/GameComponentsClient.ts @@ -5,7 +5,7 @@ import { Vector, VectorInteger } from "../../shared_js/class/Vector.js"; import { TextElem, TextNumericValue } from "./Text.js"; import { RectangleClient, MovingRectangleClient, RacketClient, BallClient, Line } from "./RectangleClient.js"; import { GameComponents } from "../../shared_js/class/GameComponents.js"; -import { MovingRectangle } from "../../shared_js/class/Rectangle.js"; +import type { MovingRectangle } from "../../shared_js/class/Rectangle.js"; class GameComponentsExtensionForClient extends GameComponents { wallTop: RectangleClient | MovingRectangleClient; @@ -62,12 +62,13 @@ class GameComponentsExtensionForClient extends GameComponents { } } - -class GameComponentsClient extends GameComponentsExtensionForClient { +export class GameComponentsClient extends GameComponentsExtensionForClient { midLine: Line; scoreLeft: TextNumericValue; scoreRight: TextNumericValue; text1: TextElem; + text2: TextElem; + text3: TextElem; w_grid_mid: RectangleClient; w_grid_u1: RectangleClient; @@ -90,6 +91,8 @@ class GameComponentsClient extends GameComponentsExtensionForClient { // Text pos.assign(0, c.h_mid); this.text1 = new TextElem(pos, Math.floor(c.w/8), ctx, "white"); + this.text2 = new TextElem(pos, Math.floor(c.w/24), ctx, "white"); + this.text3 = new TextElem(pos, Math.floor(c.w/24), ctx, "white"); // Dotted Midline pos.assign(c.w_mid-c.midLineSize/2, 0+c.wallSize); @@ -110,5 +113,3 @@ class GameComponentsClient extends GameComponentsExtensionForClient { this.h_grid_d1 = new RectangleClient(pos, c.gridSize, c.h, ctx, "darkgreen"); } } - -export {GameComponentsClient} diff --git a/srcs/requirements/svelte/api_front/src/pages/game/client/class/InitOptions.ts b/srcs/requirements/svelte/api_front/src/pages/game/client/class/InitOptions.ts new file mode 100644 index 00000000..acefe9c8 --- /dev/null +++ b/srcs/requirements/svelte/api_front/src/pages/game/client/class/InitOptions.ts @@ -0,0 +1,10 @@ + +export class InitOptions { + sound = "off"; + multi_balls = false; + moving_walls = false; + isSomeoneIsInvited = false; + isInvitedPerson = false; + playerOneUsername = ""; + playerTwoUsername = ""; +} diff --git a/srcs/requirements/svelte/api_front/public/game/class/InputHistory.ts b/srcs/requirements/svelte/api_front/src/pages/game/client/class/InputHistory.ts similarity index 59% rename from srcs/requirements/svelte/api_front/public/game/class/InputHistory.ts rename to srcs/requirements/svelte/api_front/src/pages/game/client/class/InputHistory.ts index e4d3b8f1..f8a7fe4f 100644 --- a/srcs/requirements/svelte/api_front/public/game/class/InputHistory.ts +++ b/srcs/requirements/svelte/api_front/src/pages/game/client/class/InputHistory.ts @@ -1,8 +1,8 @@ -import * as en from "../../shared_js/enums.js" -import * as ev from "../../shared_js/class/Event.js" +import type * as en from "../../shared_js/enums.js" +import type * as ev from "../../shared_js/class/Event.js" -class InputHistory { +export class InputHistory { input: en.InputEnum; id: number; deltaTime: number; @@ -12,5 +12,3 @@ class InputHistory { this.deltaTime = deltaTime; } } - -export {InputHistory} diff --git a/srcs/requirements/svelte/api_front/public/game/class/RectangleClient.ts b/srcs/requirements/svelte/api_front/src/pages/game/client/class/RectangleClient.ts similarity index 75% rename from srcs/requirements/svelte/api_front/public/game/class/RectangleClient.ts rename to srcs/requirements/svelte/api_front/src/pages/game/client/class/RectangleClient.ts index 5c251704..e671fb3f 100644 --- a/srcs/requirements/svelte/api_front/public/game/class/RectangleClient.ts +++ b/srcs/requirements/svelte/api_front/src/pages/game/client/class/RectangleClient.ts @@ -1,6 +1,6 @@ import { Vector, VectorInteger } from "../../shared_js/class/Vector.js"; -import { Component, GraphicComponent, Moving } from "../../shared_js/class/interface.js"; +import type { GraphicComponent } from "../../shared_js/class/interface.js"; import { Rectangle, MovingRectangle, Racket, Ball } from "../../shared_js/class/Rectangle.js"; import { soundPongArr } from "../audio.js" import { random } from "../utils.js"; @@ -17,7 +17,7 @@ function clearRectangle(this: RectangleClient, pos?: VectorInteger) { this.ctx.clearRect(this.pos.x, this.pos.y, this.width, this.height); } -class RectangleClient extends Rectangle implements GraphicComponent { +export class RectangleClient extends Rectangle implements GraphicComponent { ctx: CanvasRenderingContext2D; color: string; update: () => void; @@ -31,19 +31,9 @@ class RectangleClient extends Rectangle implements GraphicComponent { this.update = updateRectangle; this.clear = clearRectangle; } - // update() { - // this.ctx.fillStyle = this.color; - // this.ctx.fillRect(this.pos.x, this.pos.y, this.width, this.height); - // } - // clear(pos?: VectorInteger) { - // if (pos) - // this.ctx.clearRect(pos.x, pos.y, this.width, this.height); - // else - // this.ctx.clearRect(this.pos.x, this.pos.y, this.width, this.height); - // } } -class MovingRectangleClient extends MovingRectangle implements GraphicComponent { +export class MovingRectangleClient extends MovingRectangle implements GraphicComponent { ctx: CanvasRenderingContext2D; color: string; update: () => void; @@ -59,7 +49,7 @@ class MovingRectangleClient extends MovingRectangle implements GraphicComponent } } -class RacketClient extends Racket implements GraphicComponent { +export class RacketClient extends Racket implements GraphicComponent { ctx: CanvasRenderingContext2D; color: string; update: () => void; @@ -75,7 +65,7 @@ class RacketClient extends Racket implements GraphicComponent { } } -class BallClient extends Ball implements GraphicComponent { +export class BallClient extends Ball implements GraphicComponent { ctx: CanvasRenderingContext2D; color: string; update: () => void; @@ -91,12 +81,10 @@ class BallClient extends Ball implements GraphicComponent { } bounce(collider?: Rectangle) { this._bounceAlgo(collider); - soundPongArr[ Math.floor(random(0, soundPongArr.length)) ].play(); + let i = Math.floor(random(0, soundPongArr.length)); + soundPongArr[ i ].play(); + console.log(`sound_i=${i}`); // debug log } - /* protected _bounceRacket(collider: Racket) { - this._bounceRacketAlgo(collider); - soundRoblox.play(); - } */ } function updateLine(this: Line) { @@ -105,17 +93,20 @@ function updateLine(this: Line) { let i = 0; while (i < this.segmentCount) { - // for Horizontal Line + /* Horizontal Line */ // pos.y = this.pos.y; // pos.x = this.pos.x + this.segmentWidth * i; + + /* Vertical Line */ pos.x = this.pos.x; pos.y = this.pos.y + this.segmentHeight * i; + this.ctx.fillRect(pos.x, pos.y, this.segmentWidth, this.segmentHeight); i += 2; } } -class Line extends RectangleClient { +export class Line extends RectangleClient { gapeCount: number = 0; segmentCount: number; segmentWidth: number; @@ -129,13 +120,12 @@ class Line extends RectangleClient { this.gapeCount = gapeCount; this.segmentCount = this.gapeCount * 2 + 1; + /* Vertical Line */ this.segmentWidth = this.width; this.segmentHeight = this.height / this.segmentCount; - // for Horizontal Line + /* Horizontal Line */ // this.segmentWidth = this.width / this.segmentCount; // this.segmentHeight = this.height; } } - -export {RectangleClient, MovingRectangleClient, RacketClient, BallClient, Line} diff --git a/srcs/requirements/svelte/api_front/public/game/class/Text.ts b/srcs/requirements/svelte/api_front/src/pages/game/client/class/Text.ts similarity index 89% rename from srcs/requirements/svelte/api_front/public/game/class/Text.ts rename to srcs/requirements/svelte/api_front/src/pages/game/client/class/Text.ts index 88111131..ccdfdc0c 100644 --- a/srcs/requirements/svelte/api_front/public/game/class/Text.ts +++ b/srcs/requirements/svelte/api_front/src/pages/game/client/class/Text.ts @@ -1,9 +1,9 @@ import { Vector, VectorInteger } from "../../shared_js/class/Vector.js"; -import { Component } from "../../shared_js/class/interface.js"; +import type { Component } from "../../shared_js/class/interface.js"; // conflict with Text -class TextElem implements Component { +export class TextElem implements Component { ctx: CanvasRenderingContext2D; pos: VectorInteger; color: string; @@ -39,7 +39,7 @@ class TextElem implements Component { } } -class TextNumericValue extends TextElem { +export class TextNumericValue extends TextElem { private _value: number = 0; constructor(pos: VectorInteger, size: number, ctx: CanvasRenderingContext2D, color: string, font?: string) @@ -54,5 +54,3 @@ class TextNumericValue extends TextElem { this.text = v.toString(); } } - -export {TextElem, TextNumericValue} diff --git a/srcs/requirements/svelte/api_front/public/game/constants.ts b/srcs/requirements/svelte/api_front/src/pages/game/client/constants.ts similarity index 100% rename from srcs/requirements/svelte/api_front/public/game/constants.ts rename to srcs/requirements/svelte/api_front/src/pages/game/client/constants.ts diff --git a/srcs/requirements/svelte/api_front/public/game/draw.ts b/srcs/requirements/svelte/api_front/src/pages/game/client/draw.ts similarity index 84% rename from srcs/requirements/svelte/api_front/public/game/draw.ts rename to srcs/requirements/svelte/api_front/src/pages/game/client/draw.ts index 984c2acb..204c55f5 100644 --- a/srcs/requirements/svelte/api_front/public/game/draw.ts +++ b/srcs/requirements/svelte/api_front/src/pages/game/client/draw.ts @@ -1,10 +1,8 @@ import { pong, gc } from "./global.js" -import * as c from "./constants.js" -import * as en from "../shared_js/enums.js" import { gridDisplay } from "./handleInput.js"; -function drawLoop() +export function drawLoop() { pong.clear(); @@ -15,6 +13,8 @@ function drawLoop() drawStatic(); gc.text1.update(); + gc.text2.update(); + gc.text3.update(); drawDynamic(); } @@ -47,5 +47,3 @@ function drawGrid() gc.h_grid_u1.update(); gc.h_grid_d1.update(); } - -export {drawLoop} diff --git a/srcs/requirements/svelte/api_front/src/pages/game/client/gameLoop.ts b/srcs/requirements/svelte/api_front/src/pages/game/client/gameLoop.ts new file mode 100644 index 00000000..2ba91739 --- /dev/null +++ b/srcs/requirements/svelte/api_front/src/pages/game/client/gameLoop.ts @@ -0,0 +1,71 @@ + +import * as c from "./constants.js"; +import * as en from "../shared_js/enums.js" +import { gc, matchOptions, clientInfo, clientInfoSpectator} from "./global.js"; +import { wallsMovements } from "../shared_js/wallsMovement.js"; +import type { RacketClient } from "./class/RectangleClient.js"; +import type { VectorInteger } from "../shared_js/class/Vector.js"; + +let actual_time: number = Date.now(); +let last_time: number; +let delta_time: number; + +export function gameLoop() +{ + /* last_time = actual_time; + actual_time = Date.now(); + delta_time = (actual_time - last_time) / 1000; */ + + delta_time = c.fixedDeltaTime; + // console.log(`delta_gameLoop: ${delta_time}`); + + // interpolation + // console.log(`dir.y: ${clientInfo.opponent.dir.y}, pos.y: ${clientInfo.opponent.pos.y}, opponentNextPos.y: ${clientInfo.opponentNextPos.y}`); + if (clientInfo.opponent.dir.y != 0 ) { + racketInterpolation(delta_time, clientInfo.opponent, clientInfo.opponentNextPos); + } + + // client prediction + gc.ballsArr.forEach((ball) => { + ball.moveAndBounce(delta_time, [gc.wallTop, gc.wallBottom, gc.playerLeft, gc.playerRight]); + }); + + if (matchOptions & en.MatchOptions.movingWalls) { + wallsMovements(delta_time, gc); + } +} + +export function gameLoopSpectator() +{ + delta_time = c.fixedDeltaTime; + + // interpolation + if (gc.playerLeft.dir.y != 0 ) { + racketInterpolation(delta_time, gc.playerLeft, clientInfoSpectator.playerLeftNextPos); + } + if (gc.playerRight.dir.y != 0 ) { + racketInterpolation(delta_time, gc.playerRight, clientInfoSpectator.playerRightNextPos); + } + + // client prediction + gc.ballsArr.forEach((ball) => { + ball.moveAndBounce(delta_time, [gc.wallTop, gc.wallBottom, gc.playerLeft, gc.playerRight]); + }); + + if (matchOptions & en.MatchOptions.movingWalls) { + wallsMovements(delta_time, gc); + } +} + +function racketInterpolation(delta: number, racket: RacketClient, nextPos: VectorInteger) +{ + // interpolation + racket.moveAndCollide(delta, [gc.wallTop, gc.wallBottom]); + + if ((racket.dir.y > 0 && racket.pos.y > nextPos.y) + || (racket.dir.y < 0 && racket.pos.y < nextPos.y)) + { + racket.dir.y = 0; + racket.pos.y = nextPos.y; + } +} diff --git a/srcs/requirements/svelte/api_front/src/pages/game/client/global.ts b/srcs/requirements/svelte/api_front/src/pages/game/client/global.ts new file mode 100644 index 00000000..146803aa --- /dev/null +++ b/srcs/requirements/svelte/api_front/src/pages/game/client/global.ts @@ -0,0 +1,29 @@ + +import * as en from "../shared_js/enums.js"; +import type { GameArea } from "./class/GameArea.js"; +import type { GameComponentsClient } from "./class/GameComponentsClient.js"; + +// export {pong, gc, matchOptions} from "./pong.js" +export {socket, clientInfo, clientInfoSpectator} from "./ws.js" + +export let pong: GameArea; +export let gc: GameComponentsClient; +export let matchOptions: en.MatchOptions = en.MatchOptions.noOption; + +export function initPong(value: GameArea) { + pong = value; +} + +export function initGc(value: GameComponentsClient) { + gc = value; +} + +export function initMatchOptions(value: en.MatchOptions) { + matchOptions = value; +} + +export let startFunction: () => void; + +export function initStartFunction(value: () => void) { + startFunction = value; +} diff --git a/srcs/requirements/svelte/api_front/public/game/handleInput.ts b/srcs/requirements/svelte/api_front/src/pages/game/client/handleInput.ts similarity index 93% rename from srcs/requirements/svelte/api_front/public/game/handleInput.ts rename to srcs/requirements/svelte/api_front/src/pages/game/client/handleInput.ts index 164680e1..78a2af47 100644 --- a/srcs/requirements/svelte/api_front/public/game/handleInput.ts +++ b/srcs/requirements/svelte/api_front/src/pages/game/client/handleInput.ts @@ -4,6 +4,7 @@ import * as ev from "../shared_js/class/Event.js" import * as en from "../shared_js/enums.js" import { InputHistory } from "./class/InputHistory.js" import * as c from "./constants.js"; +import { matchEnded } from "./ws.js"; export let gridDisplay = false; @@ -20,7 +21,7 @@ const inputHistoryArr: InputHistory[] = []; socket.send(JSON.stringify(inputState)); } */ -function handleInput() +export function handleInput() { /* last_time = actual_time; actual_time = Date.now(); @@ -43,7 +44,9 @@ function handleInput() playerMovements(delta_time, keys); } - socket.send(JSON.stringify(inputState)); + if (!matchEnded) { + socket.send(JSON.stringify(inputState)); + } // setTimeout(testInputDelay, 100); inputHistoryArr.push(new InputHistory(inputState, delta_time)); @@ -86,7 +89,7 @@ function playerMovePrediction(delta: number, input: en.InputEnum) racket.moveAndCollide(delta, [gc.wallTop, gc.wallBottom]); } -function repeatInput(lastInputId: number) +export function repeatInput(lastInputId: number) { // server reconciliation let i = inputHistoryArr.findIndex((value: InputHistory) => { @@ -106,5 +109,3 @@ function repeatInput(lastInputId: number) } }); } - -export {handleInput, repeatInput} diff --git a/srcs/requirements/svelte/api_front/src/pages/game/client/init.ts b/srcs/requirements/svelte/api_front/src/pages/game/client/init.ts new file mode 100644 index 00000000..ab832e93 --- /dev/null +++ b/srcs/requirements/svelte/api_front/src/pages/game/client/init.ts @@ -0,0 +1,47 @@ + +import * as c from "./constants.js" +import * as en from "../shared_js/enums.js" +import { GameArea } from "./class/GameArea.js"; +import { GameComponentsClient } from "./class/GameComponentsClient.js"; +import { socket } from "./ws.js"; +import { initAudio } from "./audio.js"; +import type { InitOptions } from "./class/InitOptions.js"; + +import { pong } from "./global.js" +import { initPong, initGc, initMatchOptions } from "./global.js" + +export function computeMatchOptions(options: InitOptions) +{ + let matchOptions = en.MatchOptions.noOption; + + if (options.multi_balls === true) { + matchOptions |= en.MatchOptions.multiBalls + } + if (options.moving_walls === true) { + matchOptions |= en.MatchOptions.movingWalls + } + + return matchOptions; +} + +export function initBase(matchOptions: en.MatchOptions, sound: string, gameAreaId: string) +{ + initMatchOptions(matchOptions); + initAudio(sound); + initPong(new GameArea(gameAreaId)); + initGc(new GameComponentsClient(matchOptions, pong.ctx)); +} + +export function destroyBase() +{ + if (pong) + { + clearInterval(pong.handleInputInterval); + clearInterval(pong.gameLoopInterval); + clearInterval(pong.drawLoopInterval); + initPong(null); + } + if (socket && socket.OPEN) { + socket.close(); + } +} diff --git a/srcs/requirements/svelte/api_front/src/pages/game/client/message.ts b/srcs/requirements/svelte/api_front/src/pages/game/client/message.ts new file mode 100644 index 00000000..c626543b --- /dev/null +++ b/srcs/requirements/svelte/api_front/src/pages/game/client/message.ts @@ -0,0 +1,92 @@ + +import * as c from "./constants.js" +import { gc, pong } from "./global.js" +import * as en from "../shared_js/enums.js" + +/* + before game +*/ +export function error(message: string) +{ + console.log("msg.error()"); + pong.clear(); + const text = "error: " + message; + console.log(text); + gc.text2.clear(); + gc.text2.pos.assign(c.w*0.2, c.h*0.5); + gc.text2.text = text; + gc.text2.update(); +} + +export function matchmaking() +{ + const text = "searching..."; + console.log(text); + gc.text1.clear(); + gc.text1.pos.assign(c.w*0.2, c.h*0.5); + gc.text1.text = text; + gc.text1.update(); +} + +export function matchmakingComplete() +{ + const text = "match found !"; + console.log(text); + gc.text1.clear(); + gc.text1.pos.assign(c.w*0.15, c.h*0.5); + gc.text1.text = text; + gc.text1.update(); +} + +export function matchAbort() +{ + const text = "match abort"; + console.log(text); + gc.text1.clear(); + gc.text1.pos.assign(c.w*0.15, c.h*0.5); + gc.text1.text = text; + gc.text1.update(); + + setTimeout(() => { + gc.text2.pos.assign(c.w*0.44, c.h*0.6); + gc.text2.text = "pardon =("; + const oriSize = gc.text2.size; + gc.text2.size = c.w*0.025; + gc.text2.update(); + gc.text2.size = oriSize; + }, 2500); +} + + +/* + in game +*/ +export function win() +{ + gc.text1.pos.assign(c.w*0.415, c.h*0.5); + gc.text1.text = "WIN"; +} + +export function lose() +{ + gc.text1.pos.assign(c.w*0.383, c.h*0.5); + gc.text1.text = "LOSE"; +} + +export function forfeit(playerSide: en.PlayerSide) +{ + if (playerSide === en.PlayerSide.left) { + gc.text2.pos.assign(c.w*0.65, c.h*0.42); + gc.text3.pos.assign(c.w*0.65, c.h*0.52); + } + else { + gc.text2.pos.assign(c.w*0.09, c.h*0.42); + gc.text3.pos.assign(c.w*0.09, c.h*0.52); + } + setTimeout(() => { + gc.text2.text = "par forfait"; + }, 1500); + setTimeout(() => { + gc.text3.text = "calme ta joie"; + }, 3500); +} diff --git a/srcs/requirements/svelte/api_front/src/pages/game/client/pong.ts b/srcs/requirements/svelte/api_front/src/pages/game/client/pong.ts new file mode 100644 index 00000000..cf15df25 --- /dev/null +++ b/srcs/requirements/svelte/api_front/src/pages/game/client/pong.ts @@ -0,0 +1,60 @@ + +import * as c from "./constants.js" +import { handleInput } from "./handleInput.js"; +import { gameLoop } from "./gameLoop.js" +import { drawLoop } from "./draw.js"; +import { countdown } from "./utils.js"; +import { initWebSocket } from "./ws.js"; +import type { InitOptions } from "./class/InitOptions.js"; +export { InitOptions } from "./class/InitOptions.js"; +import { initBase, destroyBase, computeMatchOptions } from "./init.js"; +export { computeMatchOptions } from "./init.js"; + +/* TODO: A way to delay the init of variables, but still use "const" not "let" ? */ +import { pong, gc } from "./global.js" +import { initStartFunction } from "./global.js" + + +export function init(options: InitOptions, gameAreaId: string, token: string) +{ + const matchOptions = computeMatchOptions(options); + initBase(matchOptions, options.sound, gameAreaId); + + initStartFunction(start); + if (options.isSomeoneIsInvited) { + initWebSocket(matchOptions, token, options.playerOneUsername, true, options.playerTwoUsername, options.isInvitedPerson); + } + else { + initWebSocket(matchOptions, token, options.playerOneUsername); + } +} + +export function destroy() +{ + destroyBase(); +} + +function start() +{ + gc.text1.pos.assign(c.w*0.5, c.h*0.75); + countdown(c.matchStartDelay/1000, (count: number) => { + gc.text1.clear(); + gc.text1.text = `${count}`; + gc.text1.update(); + }, resume); +} + +function resume() +{ + gc.text1.text = ""; + window.addEventListener('keydown', function (e) { + pong.addKey(e.key); + }); + window.addEventListener('keyup', function (e) { + pong.deleteKey(e.key); + }); + pong.handleInputInterval = window.setInterval(handleInput, c.handleInputIntervalMS); + // pong.handleInputInterval = window.setInterval(sendLoop, c.sendLoopIntervalMS); + pong.gameLoopInterval = window.setInterval(gameLoop, c.gameLoopIntervalMS); + pong.drawLoopInterval = window.setInterval(drawLoop, c.drawLoopIntervalMS); +} diff --git a/srcs/requirements/svelte/api_front/src/pages/game/client/pongSpectator.ts b/srcs/requirements/svelte/api_front/src/pages/game/client/pongSpectator.ts new file mode 100644 index 00000000..e02b776b --- /dev/null +++ b/srcs/requirements/svelte/api_front/src/pages/game/client/pongSpectator.ts @@ -0,0 +1,37 @@ + +import * as c from "./constants.js" +import type * as en from "../shared_js/enums.js" +import { gameLoopSpectator } from "./gameLoop.js" +import { drawLoop } from "./draw.js"; +import { initWebSocketSpectator } from "./ws.js"; +import { initBase, destroyBase, computeMatchOptions } from "./init.js"; +export { computeMatchOptions } from "./init.js"; + +/* TODO: A way to delay the init of variables, but still use "const" not "let" ? */ +import { pong, gc } from "./global.js" +import { initStartFunction } from "./global.js" + + +export function init(matchOptions: en.MatchOptions, sound: string, gameAreaId: string, gameSessionId: string) +{ + initBase(matchOptions, sound, gameAreaId); + + initStartFunction(start); + initWebSocketSpectator(gameSessionId); +} + +export function destroy() +{ + destroyBase(); +} + +function start() +{ + resume(); +} + +function resume() +{ + pong.gameLoopInterval = window.setInterval(gameLoopSpectator, c.gameLoopIntervalMS); + pong.drawLoopInterval = window.setInterval(drawLoop, c.drawLoopIntervalMS); +} diff --git a/srcs/requirements/svelte/api_front/public/game/utils.ts b/srcs/requirements/svelte/api_front/src/pages/game/client/utils.ts similarity index 68% rename from srcs/requirements/svelte/api_front/public/game/utils.ts rename to srcs/requirements/svelte/api_front/src/pages/game/client/utils.ts index db971447..ff45234d 100644 --- a/srcs/requirements/svelte/api_front/public/game/utils.ts +++ b/srcs/requirements/svelte/api_front/src/pages/game/client/utils.ts @@ -1,7 +1,7 @@ export * from "../shared_js/utils.js" -function countdown(count: number, callback?: (count: number) => void, endCallback?: () => void) +export function countdown(count: number, callback?: (count: number) => void, endCallback?: () => void) { console.log("countdown ", count); if (count > 0) { @@ -14,5 +14,3 @@ function countdown(count: number, callback?: (count: number) => void, endCallbac endCallback(); } } - -export {countdown} diff --git a/srcs/requirements/svelte/api_front/public/game/ws.ts b/srcs/requirements/svelte/api_front/src/pages/game/client/ws.ts similarity index 51% rename from srcs/requirements/svelte/api_front/public/game/ws.ts rename to srcs/requirements/svelte/api_front/src/pages/game/client/ws.ts index 60f1ab87..6f33f98d 100644 --- a/srcs/requirements/svelte/api_front/public/game/ws.ts +++ b/srcs/requirements/svelte/api_front/src/pages/game/client/ws.ts @@ -1,15 +1,18 @@ import * as c from "./constants.js" -import { gc, matchOptions } from "./global.js" +import { gc, matchOptions, startFunction } from "./global.js" import * as ev from "../shared_js/class/Event.js" import * as en from "../shared_js/enums.js" -import { matchmaking, matchmakingComplete, startGame } from "./pong.js"; -import { RacketClient } from "./class/RectangleClient.js"; +import * as msg from "./message.js"; +import type { RacketClient } from "./class/RectangleClient.js"; import { repeatInput } from "./handleInput.js"; import { soundRoblox } from "./audio.js" import { sleep } from "./utils.js"; import { Vector, VectorInteger } from "../shared_js/class/Vector.js"; +export let matchEnded = false; +export let matchAbort = false; + class ClientInfo { id = ""; side: en.PlayerSide; @@ -18,18 +21,34 @@ class ClientInfo { opponentNextPos: VectorInteger; } -const wsPort = 8042; -const wsUrl = "ws://" + document.location.hostname + ":" + wsPort + "/pong"; +class ClientInfoSpectator { + // side: en.PlayerSide; + /* WIP: playerLeftNextPos and playerRightNextPos could be in clientInfo for simplicity */ + playerLeftNextPos: VectorInteger; + playerRightNextPos: VectorInteger; +} + +const wsUrl = "ws://transcendance:8080/pong"; export let socket: WebSocket; /* TODO: A way to still use "const" not "let" ? */ export const clientInfo = new ClientInfo(); +export const clientInfoSpectator = new ClientInfoSpectator(); // WIP, could refactor this -export function initWebSocket(options: en.MatchOptions) + +export function initWebSocket(options: en.MatchOptions, token: string, username: string, privateMatch = false, playerTwoUsername?: string, isInvitedPerson? : boolean) { socket = new WebSocket(wsUrl, "json"); + console.log("Infos from ws.ts : options => " + options + " token => " + token + " username => " + username + " priavte match => " + privateMatch + + " player two => " + playerTwoUsername) socket.addEventListener("open", (event) => { - socket.send(JSON.stringify( new ev.ClientAnnounce(en.ClientRole.player, options, clientInfo.id) )); + if (privateMatch) { + socket.send(JSON.stringify( new ev.ClientAnnouncePlayer(options, token, username, privateMatch, playerTwoUsername, isInvitedPerson) )); + } + else { + socket.send(JSON.stringify( new ev.ClientAnnouncePlayer(options, token, username) )); + } }); // socket.addEventListener("message", logListener); // for testing purpose + socket.addEventListener("message", errorListener); socket.addEventListener("message", preMatchListener); } @@ -37,6 +56,15 @@ function logListener(this: WebSocket, event: MessageEvent) { console.log("%i: " + event.data, Date.now()); } +function errorListener(this: WebSocket, event: MessageEvent) { + console.log("errorListener"); + const data: ev.ServerEvent = JSON.parse(event.data); + if (data.type === en.EventTypes.error) { + console.log("actual Error"); + msg.error((data as ev.EventError).message); + } +} + function preMatchListener(this: WebSocket, event: MessageEvent) { const data: ev.ServerEvent = JSON.parse(event.data); @@ -45,7 +73,7 @@ function preMatchListener(this: WebSocket, event: MessageEvent) clientInfo.id = (data).id; break; case en.EventTypes.matchmakingInProgress: - matchmaking(); + msg.matchmaking(); break; case en.EventTypes.matchmakingComplete: clientInfo.side = (data).side; @@ -62,17 +90,25 @@ function preMatchListener(this: WebSocket, event: MessageEvent) clientInfo.opponentNextPos = new VectorInteger(clientInfo.opponent.pos.x, clientInfo.opponent.pos.y); clientInfo.racket.color = "darkgreen"; // for testing purpose socket.send(JSON.stringify( new ev.ClientEvent(en.EventTypes.clientPlayerReady) )); // TODO: set an interval/timeout to resend until matchStart response (in case of network problem) - matchmakingComplete(); + msg.matchmakingComplete(); break; case en.EventTypes.matchStart: socket.removeEventListener("message", preMatchListener); socket.addEventListener("message", inGameListener); - startGame(); + startFunction(); + break; + case en.EventTypes.matchAbort: + matchAbort = true; + socket.removeEventListener("message", preMatchListener); + msg.matchAbort(); + setTimeout(() => { + matchAbort = false; + }, 1000); break; } } -function inGameListener(event: MessageEvent) +function inGameListener(this: WebSocket, event: MessageEvent) { const data: ev.ServerEvent = JSON.parse(event.data); switch (data.type) { @@ -168,15 +204,126 @@ function scoreUpdate(data: ev.EventScoreUpdate) function matchEnd(data: ev.EventMatchEnd) { + matchEnded = true; + socket.close(); if (data.winner === clientInfo.side) { - gc.text1.pos.assign(c.w*0.415, c.h_mid); - gc.text1.text = "WIN"; + msg.win(); + if (data.forfeit) { + msg.forfeit(clientInfo.side); + } } else { - gc.text1.pos.assign(c.w*0.383, c.h_mid); - gc.text1.text = "LOSE"; + msg.lose(); } - // matchEnded = true; + setTimeout(() => { + matchEnded = false; + }, 1000); +} + +/* Spectator */ + +export function initWebSocketSpectator(gameSessionId: string) +{ + socket = new WebSocket(wsUrl, "json"); + socket.addEventListener("open", (event) => { + socket.send(JSON.stringify( new ev.ClientAnnounceSpectator(gameSessionId) )); + }); + // socket.addEventListener("message", logListener); // for testing purpose + socket.addEventListener("message", preMatchListenerSpectator); + + clientInfoSpectator.playerLeftNextPos = new VectorInteger(gc.playerLeft.pos.x, gc.playerLeft.pos.y); + clientInfoSpectator.playerRightNextPos = new VectorInteger(gc.playerRight.pos.x, gc.playerRight.pos.y); + +} + +export function preMatchListenerSpectator(this: WebSocket, event: MessageEvent) +{ + const data: ev.ServerEvent = JSON.parse(event.data); + if (data.type === en.EventTypes.matchStart) + { + socket.removeEventListener("message", preMatchListenerSpectator); + socket.addEventListener("message", inGameListenerSpectator); + startFunction(); + } +} + +function inGameListenerSpectator(this: WebSocket, event: MessageEvent) +{ + const data: ev.ServerEvent = JSON.parse(event.data); + switch (data.type) { + case en.EventTypes.gameUpdate: + gameUpdateSpectator(data as ev.EventGameUpdate); + break; + case en.EventTypes.scoreUpdate: + scoreUpdateSpectator(data as ev.EventScoreUpdate); + break; + case en.EventTypes.matchEnd: + matchEndSpectator(data as ev.EventMatchEnd); + break; + } +} + +function gameUpdateSpectator(data: ev.EventGameUpdate) +{ + console.log("gameUpdateSpectator"); + + if (matchOptions & en.MatchOptions.movingWalls) { + gc.wallTop.pos.y = data.wallTop.y; + gc.wallBottom.pos.y = data.wallBottom.y; + } + + data.ballsArr.forEach((ball, i) => { + gc.ballsArr[i].pos.assign(ball.x, ball.y); + gc.ballsArr[i].dir.assign(ball.dirX, ball.dirY); + gc.ballsArr[i].speed = ball.speed; + }); + + // interpolation + for (const racket of [gc.playerLeft, gc.playerRight]) + { + let nextPos: VectorInteger; + if (racket === gc.playerLeft) { + nextPos = clientInfoSpectator.playerLeftNextPos; + } + else { + nextPos = clientInfoSpectator.playerRightNextPos; + } + + racket.pos.assign(nextPos.x, nextPos.y); + if (racket === gc.playerLeft) { + nextPos.assign(racket.pos.x, data.playerLeft.y); + } + else { + nextPos.assign(racket.pos.x, data.playerRight.y); + } + + racket.dir = new Vector( + nextPos.x - racket.pos.x, + nextPos.y - racket.pos.y + ); + + if (Math.abs(racket.dir.x) + Math.abs(racket.dir.y) !== 0) { + racket.dir = racket.dir.normalized(); + } + } +} + +function scoreUpdateSpectator(data: ev.EventScoreUpdate) +{ + console.log("scoreUpdateSpectator"); + gc.scoreLeft.value = data.scoreLeft; + gc.scoreRight.value = data.scoreRight; +} + +function matchEndSpectator(data: ev.EventMatchEnd) +{ + console.log("matchEndSpectator"); + matchEnded = true; + socket.close(); + // WIP + /* msg.win(); + if (data.forfeit) { + msg.forfeit(clientInfo.side); + } */ } -// export let matchEnded = false; diff --git a/srcs/requirements/svelte/api_front/src/pages/game/shared_js/class/Event.ts b/srcs/requirements/svelte/api_front/src/pages/game/shared_js/class/Event.ts new file mode 100644 index 00000000..0147ead8 --- /dev/null +++ b/srcs/requirements/svelte/api_front/src/pages/game/shared_js/class/Event.ts @@ -0,0 +1,144 @@ + +import * as en from "../enums.js" + +/* From Server */ +export class ServerEvent { + type: en.EventTypes; + constructor(type: en.EventTypes = 0) { + this.type = type; + } +} + +export class EventAssignId extends ServerEvent { + id: string; + constructor(id: string) { + super(en.EventTypes.assignId); + this.id = id; + } +} + +export class EventMatchmakingComplete extends ServerEvent { + side: en.PlayerSide; + constructor(side: en.PlayerSide) { + super(en.EventTypes.matchmakingComplete); + this.side = side; + } +} + +export class EventGameUpdate extends ServerEvent { + playerLeft = { + y: 0 + }; + playerRight = { + y: 0 + }; + ballsArr: { + x: number, + y: number, + dirX: number, + dirY: number, + speed: number + }[] = []; + wallTop? = { + y: 0 + }; + wallBottom? = { + y: 0 + }; + lastInputId = 0; + constructor() { // TODO: constructor that take GameComponentsServer maybe ? + super(en.EventTypes.gameUpdate); + } +} + +export class EventScoreUpdate extends ServerEvent { + scoreLeft: number; + scoreRight: number; + constructor(scoreLeft: number, scoreRight: number) { + super(en.EventTypes.scoreUpdate); + this.scoreLeft = scoreLeft; + this.scoreRight = scoreRight; + } +} + +export class EventMatchEnd extends ServerEvent { + winner: en.PlayerSide; + forfeit: boolean; + constructor(winner: en.PlayerSide, forfeit = false) { + super(en.EventTypes.matchEnd); + this.winner = winner; + this.forfeit = forfeit; + } +} + +export class EventMatchAbort extends ServerEvent { + constructor() { + super(en.EventTypes.matchAbort); + } +} + +export class EventError extends ServerEvent { + message: string; + constructor(message: string) { + super(en.EventTypes.error); + this.message = message; + } +} + + +/* From Client */ +export class ClientEvent { + type: en.EventTypes; // readonly ? + constructor(type: en.EventTypes = 0) { + this.type = type; + } +} + +export class ClientAnnounce extends ClientEvent { + role: en.ClientRole; + constructor(role: en.ClientRole) { + super(en.EventTypes.clientAnnounce); + this.role = role; + } +} + +export class ClientAnnouncePlayer extends ClientAnnounce { + clientId: string; // unused + matchOptions: en.MatchOptions; + token: string; + username: string; + privateMatch: boolean; + playerTwoUsername?: string; + isInvitedPerson? : boolean; + constructor(matchOptions: en.MatchOptions, token: string, username: string, privateMatch: boolean = false, playerTwoUsername?: string, isInvitedPerson? : boolean) { + super(en.ClientRole.player); + this.matchOptions = matchOptions; + this.token = token; + this.username = username; + this.privateMatch = privateMatch; + if (isInvitedPerson) { + this.isInvitedPerson = isInvitedPerson; + } + if (playerTwoUsername) { + this.playerTwoUsername = playerTwoUsername; + } + } +} + +export class ClientAnnounceSpectator extends ClientAnnounce { + gameSessionId: string; + constructor(gameSessionId: string) { + super(en.ClientRole.spectator); + this.gameSessionId = gameSessionId; + } +} + +export class EventInput extends ClientEvent { + input: en.InputEnum; + id: number; + constructor(input: en.InputEnum = en.InputEnum.noInput, id: number = 0) { + super(en.EventTypes.clientInput); + this.input = input; + this.id = id; + } +} diff --git a/srcs/requirements/svelte/api_front/src/pages/game/shared_js/class/GameComponents.ts b/srcs/requirements/svelte/api_front/src/pages/game/shared_js/class/GameComponents.ts new file mode 100644 index 00000000..ec36f15f --- /dev/null +++ b/srcs/requirements/svelte/api_front/src/pages/game/shared_js/class/GameComponents.ts @@ -0,0 +1,63 @@ + +import * as c from "../constants.js" +import * as en from "../../shared_js/enums.js" +import { VectorInteger } from "./Vector.js"; +import { Rectangle, MovingRectangle, Racket, Ball } from "./Rectangle.js"; +import { random } from "../utils.js"; + +export class GameComponents { + wallTop: Rectangle | MovingRectangle; + wallBottom: Rectangle | MovingRectangle; + playerLeft: Racket; + playerRight: Racket; + ballsArr: Ball[] = []; + constructor(options: en.MatchOptions) + { + const pos = new VectorInteger; + + // Rackets + pos.assign(0+c.pw, c.h_mid-c.ph/2); + this.playerLeft = new Racket(pos, c.pw, c.ph, c.racketSpeed); + pos.assign(c.w-c.pw-c.pw, c.h_mid-c.ph/2); + this.playerRight = new Racket(pos, c.pw, c.ph, c.racketSpeed); + + // Balls + let ballsCount = 1; + if (options & en.MatchOptions.multiBalls) { + ballsCount = c.multiBallsCount; + } + pos.assign(-c.ballSize, -c.ballSize); // ball out =) + while (this.ballsArr.length < ballsCount) { + this.ballsArr.push(new Ball(pos, c.ballSize, c.ballSpeed, c.ballSpeedIncrease)) + } + this.ballsArr.forEach((ball) => { + ball.dir.x = 1; + if (random() > 0.5) { + ball.dir.x *= -1; + } + + ball.dir.y = random(0, 0.2); + if (random() > 0.5) { + ball.dir.y *= -1; + } + + ball.dir = ball.dir.normalized(); + }); + + // Walls + if (options & en.MatchOptions.movingWalls) { + pos.assign(0, 0); + this.wallTop = new MovingRectangle(pos, c.w, c.wallSize, c.movingWallSpeed); + (this.wallTop).dir.y = -1; + pos.assign(0, c.h-c.wallSize); + this.wallBottom = new MovingRectangle(pos, c.w, c.wallSize, c.movingWallSpeed); + (this.wallBottom).dir.y = 1; + } + else { + pos.assign(0, 0); + this.wallTop = new Rectangle(pos, c.w, c.wallSize); + pos.assign(0, c.h-c.wallSize); + this.wallBottom = new Rectangle(pos, c.w, c.wallSize); + } + } +} diff --git a/srcs/requirements/svelte/api_front/src/pages/game/shared_js/class/Rectangle.ts b/srcs/requirements/svelte/api_front/src/pages/game/shared_js/class/Rectangle.ts new file mode 100644 index 00000000..d258c553 --- /dev/null +++ b/srcs/requirements/svelte/api_front/src/pages/game/shared_js/class/Rectangle.ts @@ -0,0 +1,142 @@ + +import { Vector, VectorInteger } from "./Vector.js"; +import type { Component, Moving } from "./interface.js"; +import * as c from "../constants.js" + +export class Rectangle implements Component { + pos: VectorInteger; + width: number; + height: number; + constructor(pos: VectorInteger, width: number, height: number) { + this.pos = new VectorInteger(pos.x, pos.y); + this.width = width; + this.height = height; + } + collision(collider: Rectangle): boolean { + const thisLeft = this.pos.x; + const thisRight = this.pos.x + this.width; + const thisTop = this.pos.y; + const thisBottom = this.pos.y + this.height; + const colliderLeft = collider.pos.x; + const colliderRight = collider.pos.x + collider.width; + const colliderTop = collider.pos.y; + const colliderBottom = collider.pos.y + collider.height; + if ((thisBottom < colliderTop) + || (thisTop > colliderBottom) + || (thisRight < colliderLeft) + || (thisLeft > colliderRight)) { + return false; + } + else { + return true; + } + } +} + +export class MovingRectangle extends Rectangle implements Moving { + dir: Vector = new Vector(0,0); + speed: number; + readonly baseSpeed: number; + constructor(pos: VectorInteger, width: number, height: number, baseSpeed: number) { + super(pos, width, height); + this.baseSpeed = baseSpeed; + this.speed = baseSpeed; + } + move(delta: number) { // Math.floor WIP until VectorInteger debug + // console.log(`delta: ${delta}, speed: ${this.speed}, speed*delta: ${this.speed * delta}`); + // this.pos.x += Math.floor(this.dir.x * this.speed * delta); + // this.pos.y += Math.floor(this.dir.y * this.speed * delta); + this.pos.x += this.dir.x * this.speed * delta; + this.pos.y += this.dir.y * this.speed * delta; + } + moveAndCollide(delta: number, colliderArr: Rectangle[]) { + this._moveAndCollideAlgo(delta, colliderArr); + } + protected _moveAndCollideAlgo(delta: number, colliderArr: Rectangle[]) { + let oldPos = new VectorInteger(this.pos.x, this.pos.y); + this.move(delta); + if (colliderArr.some(this.collision, this)) { + this.pos = oldPos; + } + } +} + +export class Racket extends MovingRectangle { + constructor(pos: VectorInteger, width: number, height: number, baseSpeed: number) { + super(pos, width, height, baseSpeed); + } + moveAndCollide(delta: number, colliderArr: Rectangle[]) { + // let oldPos = new VectorInteger(this.pos.x, this.pos.y); // debug + this._moveAndCollideAlgo(delta, colliderArr); + // console.log(`y change: ${this.pos.y - oldPos.y}`); + } +} + +export class Ball extends MovingRectangle { + readonly speedIncrease: number; + ballInPlay: boolean = false; + constructor(pos: VectorInteger, size: number, baseSpeed: number, speedIncrease: number) { + super(pos, size, size, baseSpeed); + this.speedIncrease = speedIncrease; + } + moveAndBounce(delta: number, colliderArr: Rectangle[]) { + this.move(delta); + let i = colliderArr.findIndex(this.collision, this); + if (i != -1) + { + this.bounce(colliderArr[i]); + this.move(delta); + } + } + bounce(collider?: Rectangle) { + this._bounceAlgo(collider); + } + protected _bounceAlgo(collider?: Rectangle) { + /* Could be more generic, but testing only Racket is enough, + because in Pong collider can only be Racket or Wall. */ + if (collider instanceof Racket) { + this._bounceRacket(collider); + } + else { + this._bounceWall(); + } + } + protected _bounceWall() { // Should be enough for Wall + this.dir.y = this.dir.y * -1; + } + protected _bounceRacket(racket: Racket) { + this._bounceRacketAlgo(racket); + } + protected _bounceRacketAlgo(racket: Racket) { + this.speed += this.speedIncrease; + + let x = this.dir.x * -1; + + const angleFactorDegree = 60; + const angleFactor = angleFactorDegree / 90; + const racketHalf = racket.height/2; + const ballMid = this.pos.y + this.height/2; + const racketMid = racket.pos.y + racketHalf; + + let impact = ballMid - racketMid; + const horizontalMargin = racketHalf * 0.15; + if (impact < horizontalMargin && impact > -horizontalMargin) { + impact = 0; + } + else if (impact > 0) { + impact = impact - horizontalMargin; + } + else if (impact < 0) { + impact = impact + horizontalMargin; + } + + let y = impact / (racketHalf - horizontalMargin) * angleFactor; + + this.dir.assign(x, y); + // Normalize Vector (for consistency in speed independent of direction) + if (c.normalizedSpeed) { + this.dir = this.dir.normalized(); + } + // console.log(`x: ${this.dir.x}, y: ${this.dir.y}`); + } +} diff --git a/srcs/requirements/svelte/api_front/src/pages/game/shared_js/class/Vector.ts b/srcs/requirements/svelte/api_front/src/pages/game/shared_js/class/Vector.ts new file mode 100644 index 00000000..fbe121e5 --- /dev/null +++ b/srcs/requirements/svelte/api_front/src/pages/game/shared_js/class/Vector.ts @@ -0,0 +1,47 @@ + +export class Vector { + x: number; + y: number; + constructor(x: number = 0, y: number = 0) { + this.x = x; + this.y = y; + } + assign(x: number, y: number) { + this.x = x; + this.y = y; + } + normalized() : Vector { + const normalizationFactor = Math.abs(this.x) + Math.abs(this.y); + return new Vector(this.x/normalizationFactor, this.y/normalizationFactor); + } +} + +export class VectorInteger extends Vector { + // PLACEHOLDER + // VectorInteger with set/get dont work (No draw on the screen). Why ? +} + +/* +export class VectorInteger { + // private _x: number = 0; + // private _y: number = 0; + // constructor(x: number = 0, y: number = 0) { + // this._x = x; + // this._y = y; + // } + // get x(): number { + // return this._x; + // } + // set x(v: number) { + // // this._x = Math.floor(v); + // this._x = v; + // } + // get y(): number { + // return this._y; + // } + // set y(v: number) { + // // this._y = Math.floor(v); + // this._y = v; + // } +} +*/ diff --git a/srcs/requirements/svelte/api_front/src/pages/game/shared_js/class/interface.ts b/srcs/requirements/svelte/api_front/src/pages/game/shared_js/class/interface.ts new file mode 100644 index 00000000..0f484da3 --- /dev/null +++ b/srcs/requirements/svelte/api_front/src/pages/game/shared_js/class/interface.ts @@ -0,0 +1,19 @@ + +import type { Vector, VectorInteger } from "./Vector.js"; + +export interface Component { + pos: VectorInteger; +} + +export interface GraphicComponent extends Component { + ctx: CanvasRenderingContext2D; + color: string; + update: () => void; + clear: (pos?: VectorInteger) => void; +} + +export interface Moving { + dir: Vector; + speed: number; // pixel per second + move(delta: number): void; +} diff --git a/srcs/requirements/svelte/api_front/src/pages/game/shared_js/constants.ts b/srcs/requirements/svelte/api_front/src/pages/game/shared_js/constants.ts new file mode 100644 index 00000000..44c282c2 --- /dev/null +++ b/srcs/requirements/svelte/api_front/src/pages/game/shared_js/constants.ts @@ -0,0 +1,30 @@ + +export const CanvasWidth = 1500; +export const CanvasRatio = 1.66666; +/* ratio 5/3 (1.66) */ + +export const w = CanvasWidth; +export const h = CanvasWidth / CanvasRatio; +export const w_mid = Math.floor(w/2); +export const h_mid = Math.floor(h/2); +export const pw = Math.floor(w*0.017); +export const ph = pw*6; +export const ballSize = pw; +export const wallSize = Math.floor(w*0.01); +export const racketSpeed = Math.floor(w*0.60); // pixel per second +export const ballSpeed = Math.floor(w*0.55); // pixel per second +export const ballSpeedIncrease = Math.floor(ballSpeed*0.05); // pixel per second + +export const normalizedSpeed = false; // for consistency in speed independent of direction + +export const matchStartDelay = 3000; // millisecond +export const newRoundDelay = 1500; // millisecond + +// Game Variantes +export const multiBallsCount = 3; +export const movingWallPosMax = Math.floor(w*0.12); +export const movingWallSpeed = Math.floor(w*0.08); + + +export const gameSessionIdPLACEHOLDER = "42"; // TESTING SPECTATOR PLACEHOLDER +// for testing, force gameSession.id in wsServer.ts->matchmaking() \ No newline at end of file diff --git a/srcs/requirements/svelte/api_front/src/pages/game/shared_js/enums.ts b/srcs/requirements/svelte/api_front/src/pages/game/shared_js/enums.ts new file mode 100644 index 00000000..b86571e5 --- /dev/null +++ b/srcs/requirements/svelte/api_front/src/pages/game/shared_js/enums.ts @@ -0,0 +1,47 @@ + +export enum EventTypes { + // Class Implemented + gameUpdate = 1, + scoreUpdate, + matchEnd, + assignId, + matchmakingComplete, + error, + + // Generic + matchmakingInProgress, + matchStart, + matchAbort, + matchNewRound, // unused + matchPause, // unused + matchResume, // unused + + // Client + clientAnnounce, + clientPlayerReady, + clientInput, + +} + +export enum InputEnum { + noInput = 0, + up = 1, + down, +} + +export enum PlayerSide { + left = 1, + right +} + +export enum ClientRole { + player = 1, + spectator +} + +export enum MatchOptions { + // binary flags, can be mixed + noOption = 0b0, + multiBalls = 1 << 0, + movingWalls = 1 << 1 +} diff --git a/srcs/requirements/svelte/api_front/src/pages/game/shared_js/utils.ts b/srcs/requirements/svelte/api_front/src/pages/game/shared_js/utils.ts new file mode 100644 index 00000000..dd3d40d0 --- /dev/null +++ b/srcs/requirements/svelte/api_front/src/pages/game/shared_js/utils.ts @@ -0,0 +1,25 @@ + +import type { MovingRectangle } from "./class/Rectangle.js"; + +export function random(min: number = 0, max: number = 1) { + return Math.random() * (max - min) + min; +} + +export function sleep (ms: number) { + return new Promise((resolve) => setTimeout(resolve, ms)); +} + +export function clamp(n: number, min: number, max: number) : number +{ + if (n < min) + n = min; + else if (n > max) + n = max; + return (n); +} + +// Typescript hack, unused +export function assertMovingRectangle(value: unknown): asserts value is MovingRectangle { + // if (value !== MovingRectangle) throw new Error("Not a MovingRectangle"); + return; +} diff --git a/srcs/requirements/svelte/api_front/src/pages/game/shared_js/wallsMovement.ts b/srcs/requirements/svelte/api_front/src/pages/game/shared_js/wallsMovement.ts new file mode 100644 index 00000000..b2c2b581 --- /dev/null +++ b/srcs/requirements/svelte/api_front/src/pages/game/shared_js/wallsMovement.ts @@ -0,0 +1,18 @@ + +import * as c from "./constants.js"; +import type { MovingRectangle } from "../shared_js/class/Rectangle.js"; +import type { GameComponents } from "./class/GameComponents.js"; + +export function wallsMovements(delta: number, gc: GameComponents) +{ + const wallTop = gc.wallTop; + const wallBottom = gc.wallBottom; + if (wallTop.pos.y <= 0 || wallTop.pos.y >= c.movingWallPosMax) { + wallTop.dir.y *= -1; + } + if (wallBottom.pos.y >= c.h-c.wallSize || wallBottom.pos.y <= c.h-c.movingWallPosMax) { + wallBottom.dir.y *= -1; + } + wallTop.moveAndCollide(delta, [gc.playerLeft, gc.playerRight]); + wallBottom.moveAndCollide(delta, [gc.playerLeft, gc.playerRight]); +} diff --git a/srcs/requirements/svelte/api_front/src/pages/profile/ProfileDisplay.svelte b/srcs/requirements/svelte/api_front/src/pages/profile/ProfileDisplay.svelte index 11007928..694316d0 100644 --- a/srcs/requirements/svelte/api_front/src/pages/profile/ProfileDisplay.svelte +++ b/srcs/requirements/svelte/api_front/src/pages/profile/ProfileDisplay.svelte @@ -13,7 +13,7 @@ .then( (x) => x.json() ); }) - + @@ -117,7 +117,7 @@ /* Glittery Star Stuff */ - :root { + :root { --purple: rgb(123, 31, 162); --violet: rgb(103, 58, 183); --pink: rgb(244, 143, 177); @@ -128,7 +128,7 @@ from { background-position: 0% center; } - + to { background-position: -200% center; } @@ -138,7 +138,7 @@ from, to { transform: scale(0); } - + 50% { transform: scale(1); } @@ -148,7 +148,7 @@ from { transform: rotate(0deg); } - + to { transform: rotate(180deg); } @@ -193,7 +193,7 @@ var(--purple) ); background-size: 200%; - + /* Keep these for Safari and chrome */ -webkit-background-clip: text; -webkit-text-fill-color: transparent; diff --git a/srcs/requirements/svelte/api_front/src/pieces/Header.svelte b/srcs/requirements/svelte/api_front/src/pieces/Header.svelte index 2557bf9f..26e483c6 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/Header.svelte +++ b/srcs/requirements/svelte/api_front/src/pieces/Header.svelte @@ -24,6 +24,9 @@ Potato Pong Logo (push('/'))}>

    Potato Pong