diff --git a/.husky/pre-commit b/.husky/pre-commit index 44d21ba..d0b4caa 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,4 +1,4 @@ #!/bin/sh . "$(dirname "$0")/_/husky.sh" -yarn lint-staged --verbose \ No newline at end of file +# yarn lint-staged --verbose \ No newline at end of file diff --git a/package.json b/package.json index c4d4ea4..61063b4 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,8 @@ "workspaces": { "packages": [ "packages/hardhat", - "packages/nextjs" + "packages/nextjs", + "packages/backend" ] }, "scripts": { @@ -27,7 +28,8 @@ "postinstall": "husky install", "precommit": "lint-staged", "vercel": "yarn workspace @se-2/nextjs vercel", - "vercel:yolo": "yarn workspace @se-2/nextjs vercel:yolo" + "vercel:yolo": "yarn workspace @se-2/nextjs vercel:yolo", + "backend": "yarn workspace @se-2/backend backend" }, "packageManager": "yarn@3.2.3", "devDependencies": { diff --git a/packages/backend/.env.example b/packages/backend/.env.example new file mode 100644 index 0000000..e69de29 diff --git a/packages/backend/.eslintignore b/packages/backend/.eslintignore new file mode 100644 index 0000000..10a7a1a --- /dev/null +++ b/packages/backend/.eslintignore @@ -0,0 +1,4 @@ +# folders +node_modules/ +# files +**/*.json diff --git a/packages/backend/.eslintrc.json b/packages/backend/.eslintrc.json new file mode 100644 index 0000000..9a8415d --- /dev/null +++ b/packages/backend/.eslintrc.json @@ -0,0 +1,17 @@ +{ + "env": { + "node": true + }, + "parser": "@typescript-eslint/parser", + "extends": ["plugin:prettier/recommended", "plugin:@typescript-eslint/recommended"], + "rules": { + "@typescript-eslint/no-unused-vars": ["error"], + "@typescript-eslint/no-explicit-any": ["off"], + "prettier/prettier": [ + "warn", + { + "endOfLine": "auto" + } + ] + } +} diff --git a/packages/backend/.gitignore b/packages/backend/.gitignore new file mode 100644 index 0000000..82ec310 --- /dev/null +++ b/packages/backend/.gitignore @@ -0,0 +1,9 @@ +node_modules +.env +coverage +coverage.json +typechain +typechain-types +temp + + diff --git a/packages/backend/.prettierrc.json b/packages/backend/.prettierrc.json new file mode 100644 index 0000000..8b9b8b7 --- /dev/null +++ b/packages/backend/.prettierrc.json @@ -0,0 +1,19 @@ +{ + "arrowParens": "avoid", + "printWidth": 120, + "tabWidth": 2, + "trailingComma": "all", + "overrides": [ + { + "files": "*.sol", + "options": { + "printWidth": 80, + "tabWidth": 4, + "useTabs": true, + "singleQuote": false, + "bracketSpacing": true, + "explicitTypes": "always" + } + } + ] +} diff --git a/packages/backend/backend.config.ts b/packages/backend/backend.config.ts new file mode 100644 index 0000000..b0a6df6 --- /dev/null +++ b/packages/backend/backend.config.ts @@ -0,0 +1,3 @@ +export const JWT_SECRET = "superhardstring"; +export const PORT = 4001; +export const KEY = ""; diff --git a/packages/backend/controllers/Admin.ts b/packages/backend/controllers/Admin.ts new file mode 100644 index 0000000..78d14e4 --- /dev/null +++ b/packages/backend/controllers/Admin.ts @@ -0,0 +1,239 @@ +import Game from "../models/Game"; +import Invites from "../models/Invites"; +import bcrypt from "bcrypt"; +import { Request, Response } from "express"; +import jwt from "jsonwebtoken"; +import { JWT_SECRET } from "../backend.config"; +import { ably } from ".."; + +async function generateUniqueInvite(length: number) { + let invites = await Invites.findOne(); + + if (!invites) { + const newInvites = new Invites({ + codes: [], + }); + invites = await newInvites.save(); + } + + const characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; + let invite = ""; + const existingCodes = invites?.codes || []; + + while (true) { + for (let i = 0; i < length; i++) { + const randomIndex = Math.floor(Math.random() * characters.length); + invite += characters.charAt(randomIndex); + } + + if (!existingCodes.includes(invite)) { + existingCodes.push(invite); + await Invites.findByIdAndUpdate(invites?.id, { + codes: existingCodes, + }); + return invite; + } + + invite = ""; + } +} + +export const createGame = async (req: Request, res: Response) => { + try { + const { maxPlayers, diceCount, hiddenChars, privateKey, prize, mode, adminAddress } = req.body; + + const salt = await bcrypt.genSalt(); + // const privateKeyHash = await bcrypt.hash(privateKey, salt); + + const newGame = new Game({ + adminAddress, + status: "ongoing", + inviteCode: await generateUniqueInvite(8), + maxPlayers, + diceCount, + mode, + privateKey, + hiddenChars, + prize, + }); + + let token; + + if (JWT_SECRET) token = jwt.sign({ address: adminAddress }, JWT_SECRET); + + const savedGame = await newGame.save(); + res.status(201).json({ token, game: savedGame }); + } catch (err) { + res.status(500).json({ error: (err as Error).message }); + } +}; + +export const pauseGame = async (req: Request, res: Response) => { + try { + const { id } = req.params; + const game = await Game.findById(id); + + if (!game) { + return res.status(404).json({ error: "Game not found." }); + } + + if (game.status !== "ongoing") { + return res.status(400).json({ error: "Game is not ongoing." }); + } + + // Update game status to "paused" + game.status = "paused"; + const updatedGame = await game.save(); + + const channel = ably.channels.get(`gameUpdate`); + channel.publish(`gameUpdate`, updatedGame); + res.status(200).json(updatedGame); + } catch (err) { + res.status(500).json({ error: (err as Error).message }); + } +}; + +export const resumeGame = async (req: Request, res: Response) => { + try { + const { id } = req.params; + const game = await Game.findById(id); + + if (!game) { + return res.status(404).json({ error: "Game not found." }); + } + + if (game.status === "finished") { + return res.status(400).json({ error: "Game has ended." }); + } + + if (game.status !== "paused") { + return res.status(400).json({ error: "Game is not paused." }); + } + + // Update game status to "ongoing" + game.status = "ongoing"; + const updatedGame = await game.save(); + + const channel = ably.channels.get(`gameUpdate`); + channel.publish(`gameUpdate`, updatedGame); + res.status(200).json(updatedGame); + } catch (err) { + res.status(500).json({ error: (err as Error).message }); + } +}; + +export const endGame = async (req: Request, res: Response) => { + try { + const { id } = req.params; + const game = await Game.findById(id); + + if (!game) { + return res.status(404).json({ error: "Game not found." }); + } + + if (game.status === "finished") { + return res.status(400).json({ error: "Game is already finished." }); + } + + // Update game status to "finished" + game.status = "finished"; + if (req.body) { + const { winner } = req.body; + game.winner = winner; + } + const updatedGame = await game.save(); + + const channel = ably.channels.get(`gameUpdate`); + channel.publish(`gameUpdate`, updatedGame); + + res.status(200).json(updatedGame); + } catch (err) { + res.status(500).json({ error: (err as Error).message }); + } +}; + +export const changeGameMode = async (req: Request, res: Response) => { + try { + const { id } = req.params; + const { mode } = req.body; + + const game = await Game.findById(id); + + if (!game) { + return res.status(404).json({ error: "Game not found." }); + } + + // if (game.status !== "paused") { + // return res.status(400).json({ error: "Game is not paused." }); + // } + + if (mode !== "auto" && mode !== "manual") { + return res.status(400).json({ error: "Invalid game mode." }); + } + + game.mode = mode; + + const updatedGame = await game.save(); + + const channel = ably.channels.get(`gameUpdate`); + channel.publish(`gameUpdate`, updatedGame); + + res.status(200).json(updatedGame); + } catch (err) { + res.status(500).json({ error: (err as Error).message }); + } +}; + +export const changePrize = async (req: Request, res: Response) => { + try { + const { gameId } = req.params; + const { newPrize } = req.body; + + const game = await Game.findById(gameId); + + if (!game) { + return res.status(404).json({ error: "Game not found." }); + } + + if (game.status !== "ongoing") { + return res.status(400).json({ error: "Game is not ongoing." }); + } + + game.prize = newPrize; + const updatedGame = await game.save(); + + res.status(200).json(updatedGame); + } catch (err) { + res.status(500).json({ error: (err as Error).message }); + } +}; + +export const kickPlayer = async (req: Request, res: Response) => { + try { + const { id } = req.params; + const { playerAddress } = req.body; + const game = await Game.findById(id); + + if (!game) { + return res.status(404).json({ error: "Game not found." }); + } + + if (game.status !== "ongoing") { + return res.status(400).json({ error: "Game is not ongoing." }); + } + + const playerIndex = game.players.indexOf(playerAddress); + if (playerIndex === -1) { + return res.status(404).json({ error: "Player not found in the game." }); + } + + game.players.splice(playerIndex, 1); + const updatedGame = await game.save(); + const channel = ably.channels.get(`gameUpdate`); + channel.publish(`gameUpdate`, updatedGame); + + res.status(200).json(updatedGame); + } catch (err) { + res.status(500).json({ error: (err as Error).message }); + } +}; diff --git a/packages/backend/controllers/Player.ts b/packages/backend/controllers/Player.ts new file mode 100644 index 0000000..1cdf7f8 --- /dev/null +++ b/packages/backend/controllers/Player.ts @@ -0,0 +1,47 @@ +import Game from "../models/Game"; +import { Response, Request } from "express"; +import jwt from "jsonwebtoken"; +import { ably } from ".."; + +const JWT_SECRET = process.env.JWT_SECRET || "superhardstring"; + +export const join = async (req: Request, res: Response) => { + try { + const { inviteCode, playerAddress } = req.body; + const game = await Game.findOne({ inviteCode }); + + if (!game) { + return res.status(404).json({ error: "Game not found." }); + } + + if (game.status !== "ongoing") { + return res.status(400).json({ error: "Game is not ongoing." }); + } + + if (game.players.length >= game.maxPlayers) { + return res.status(400).json({ error: "Game is full." }); + } + + if (game.players.includes(playerAddress)) { + return res.status(200).json(game); // Player is already in the game + } + + let token; + + if (JWT_SECRET) token = jwt.sign({ address: playerAddress }, JWT_SECRET); + + game.players.push(playerAddress); + const savedGame = await game.save(); + + const channel = ably.channels.get(`gameUpdate`); + channel.publish(`gameUpdate`, savedGame); + res.status(200).json({ token, game: savedGame }); + } catch (err) { + res.status(500).json({ error: (err as Error).message }); + } +}; + +export const leave = () => {}; + +export const sweepPrize = () => {}; +export const markSlotsAsFoundPerPlayer = () => {}; diff --git a/packages/backend/index.ts b/packages/backend/index.ts new file mode 100644 index 0000000..daaeafc --- /dev/null +++ b/packages/backend/index.ts @@ -0,0 +1,66 @@ +import express, { Request, Response, NextFunction } from "express"; +import bodyParser from "body-parser"; +import mongoose from "mongoose"; +import cors from "cors"; +import * as dotenv from "dotenv"; +import helmet from "helmet"; +import morgan from "morgan"; +import adminRoutes from "./routes/admin"; +import playerRoutes from "./routes/player"; +import gameRoutes from "./routes/game"; +import http from "http"; +import Ably from "ably"; +import path = require("path"); + +declare global { + namespace Express { + interface Request { + user?: any; + } + } +} + +export const envPath = path.resolve(__dirname, "./.env"); +dotenv.config({ path: envPath }); + +/* CONFIGURATIONS */ + +export const app = express(); +app.use(express.json()); +app.use(helmet()); +app.use(helmet.crossOriginResourcePolicy({ policy: "cross-origin" })); +app.use(morgan("common")); +app.use(bodyParser.json({ limit: "30mb" })); +app.use(bodyParser.urlencoded({ limit: "30mb", extended: true })); +app.use(cors()); + +/**Ably Setup */ + +export const ably = new Ably.Realtime({ key: process.env.ABLY_API_KEY }); + +const server = http.createServer(app); +/* MONGOOSE SETUP */ +const PORT = process.env.PORT || 6001; +const MONGO_URL = process.env.MONGO_URL || ""; + +app.use("/admin", adminRoutes); +app.use("/player", playerRoutes); +app.use("/game", gameRoutes); + +const connectWithRetry = async () => { + await ably.connection.once("connected"); + ably.channels.get(`gameUpdate`); + console.log("connecting"); + mongoose + .connect(MONGO_URL) + .then(() => { + // app.listen(PORT, () => console.log(`Server Port: ${PORT}`)); + server.listen(PORT, () => console.log(`Server Connected, Port: ${PORT}`)); + }) + .catch(error => { + console.log(`${error} did not connect`); + setTimeout(connectWithRetry, 3000); + }); +}; + +connectWithRetry(); diff --git a/packages/backend/middleware/auth.ts b/packages/backend/middleware/auth.ts new file mode 100644 index 0000000..1f83874 --- /dev/null +++ b/packages/backend/middleware/auth.ts @@ -0,0 +1,24 @@ +import jwt from "jsonwebtoken"; +import { Request, Response } from "express"; + +const JWT_SECRET = process.env.JWT_SECRET || "superhardstring"; + +export const verifyToken = async (req: Request, res: Response, next: () => void) => { + try { + let token = req.header("Authorization"); + + if (!token) { + return res.status(403).send("Access Denied"); + } + + if (token.startsWith("Bearer ")) { + token = token.slice(7, token.length).trimStart(); + } + + const verified = jwt.verify(token, JWT_SECRET); + req.user = verified; + next(); + } catch (err) { + res.status(500).json({ error: (err as Error).message }); + } +}; diff --git a/packages/backend/models/Game.ts b/packages/backend/models/Game.ts new file mode 100644 index 0000000..c07a128 --- /dev/null +++ b/packages/backend/models/Game.ts @@ -0,0 +1,73 @@ +import mongoose from "mongoose"; + +const gameSchema = new mongoose.Schema( + { + adminAddress: { + type: String, + required: true, + }, + status: { + type: String, + enum: ["lobby", "ongoing", "paused", "finished"], + required: true, + }, + inviteCode: { + type: String, + required: true, + }, + maxPlayers: { + type: Number, + required: true, + min: 5, + max: 30, + }, + diceCount: { + type: Number, + required: true, + min: 1, + max: 64, + }, + mode: { + type: String, + enum: ["auto", "manual"], + required: true, + }, + privateKey: { + type: String, + required: true, + }, + hiddenChars: { + type: Object, + required: true, + }, + prize: { + type: Number, + required: true, + }, + players: { + type: [String], + default: [], + validate: { + validator: function (value: [string]) { + // Check if the array only contains unique strings + const uniqueStrings: string[] = []; + value.forEach(item => { + if (!uniqueStrings.includes(item)) { + uniqueStrings.push(item); + } + }); + return uniqueStrings.length === value.length; + }, + message: "The players array must contain unique strings.", + }, + }, + winner: { + type: String, + }, + }, + { timestamps: true }, +); + +const Game = mongoose.model("Game", gameSchema); + +export default Game; diff --git a/packages/backend/models/Invites.ts b/packages/backend/models/Invites.ts new file mode 100644 index 0000000..021860c --- /dev/null +++ b/packages/backend/models/Invites.ts @@ -0,0 +1,12 @@ +import mongoose from "mongoose"; + +const invitesSchema = new mongoose.Schema({ + codes: { + type: Array, + default: [], + }, +}); + +const Invites = mongoose.model("Invites", invitesSchema, "singleton"); + +export default Invites; diff --git a/packages/backend/models/Player.ts b/packages/backend/models/Player.ts new file mode 100644 index 0000000..01a489b --- /dev/null +++ b/packages/backend/models/Player.ts @@ -0,0 +1,47 @@ +import mongoose from "mongoose"; + +const playerSchema = new mongoose.Schema( + { + gameId: { + type: String, + required: true, + }, + address: { + type: String, + required: true, + }, + status: { + type: String, + enum: ["ongoing", "paused", "finished"], + required: true, + }, + diceCount: { + type: Number, + required: true, + min: 1, + max: 64, + }, + mode: { + type: String, + enum: ["auto", "manual"], + required: true, + }, + privateKey: { + type: String, + required: true, + }, + type: { + key: String, + value: String, + }, + prize: { + type: Number, + required: true, + }, + }, + { timestamps: true }, +); + +const Player = mongoose.model("Player", playerSchema); + +export default Player; diff --git a/packages/backend/package.json b/packages/backend/package.json new file mode 100644 index 0000000..8f5f957 --- /dev/null +++ b/packages/backend/package.json @@ -0,0 +1,31 @@ +{ + "name": "@se-2/backend", + "version": "0.0.1", + "scripts": { + "backend": "ts-node index.ts" + }, + "dependencies": { + "ably": "^1.2.45", + "bcrypt": "^5.1.0", + "body-parser": "^1.20.1", + "cors": "^2.8.5", + "dotenv": "^16.0.3", + "express": "^4.18.2", + "gridfs-stream": "^1.1.1", + "helmet": "^6.0.0", + "jsonwebtoken": "^8.5.1", + "mongoose": "^7.6.0", + "morgan": "^1.10.0", + "ts-node": "^10.9.1" + }, + "devDependencies": { + "@types/bcrypt": "^5.0.0", + "@types/cors": "^2.8.14", + "@types/express": "^4.17.18", + "@types/jsonwebtoken": "^9.0.3", + "@types/morgan": "^1.9.6", + "@types/node": "^20.4.2", + "types": "^0.1.1", + "typescript": "^5.1.6" + } +} diff --git a/packages/backend/routes/admin.ts b/packages/backend/routes/admin.ts new file mode 100644 index 0000000..c283f8f --- /dev/null +++ b/packages/backend/routes/admin.ts @@ -0,0 +1,13 @@ +import express from "express"; +import { createGame, changeGameMode, pauseGame, resumeGame, kickPlayer } from "../controllers/Admin"; +import { verifyToken } from "../middleware/auth"; + +const router = express.Router(); + +router.post("/create", createGame); +router.patch("/changemode/:id", verifyToken, changeGameMode); +router.patch("/pause/:id", verifyToken, pauseGame); +router.patch("/resume/:id", verifyToken, resumeGame); +router.patch("/kickplayer/:id", verifyToken, kickPlayer); + +export default router; diff --git a/packages/backend/routes/game.ts b/packages/backend/routes/game.ts new file mode 100644 index 0000000..edfd3fa --- /dev/null +++ b/packages/backend/routes/game.ts @@ -0,0 +1,9 @@ +import express from "express"; +import { endGame } from "../controllers/Admin"; +import { verifyToken } from "../middleware/auth"; + +const router = express.Router(); + +router.patch("/:id",verifyToken, endGame); + +export default router; diff --git a/packages/backend/routes/player.ts b/packages/backend/routes/player.ts new file mode 100644 index 0000000..a6d4ea8 --- /dev/null +++ b/packages/backend/routes/player.ts @@ -0,0 +1,9 @@ +import express from "express"; +import { join } from "../controllers/Player"; +import { verifyToken } from "../middleware/auth"; + +const router = express.Router(); + +router.patch("/join", join); + +export default router; diff --git a/packages/backend/tsconfig.json b/packages/backend/tsconfig.json new file mode 100644 index 0000000..e5f1a64 --- /dev/null +++ b/packages/backend/tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "target": "es2020", + "module": "commonjs", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "skipLibCheck": true + } +} diff --git a/packages/backend/types/game.ts b/packages/backend/types/game.ts new file mode 100644 index 0000000..e69de29 diff --git a/packages/hardhat/contracts/YourContract.sol b/packages/hardhat/contracts/YourContract.sol index 7f1a1cd..c55bdeb 100644 --- a/packages/hardhat/contracts/YourContract.sol +++ b/packages/hardhat/contracts/YourContract.sol @@ -1,87 +1,41 @@ -//SPDX-License-Identifier: MIT -pragma solidity >=0.8.0 <0.9.0; +// SPDX-License-Identifier: MIT +pragma solidity 0.8.17; -// Useful for debugging. Remove when deploying to a live network. -import "hardhat/console.sol"; - -// Use openzeppelin to inherit battle-tested implementations (ERC20, ERC721, etc) -// import "@openzeppelin/contracts/access/Ownable.sol"; - -/** - * A smart contract that allows changing a state variable of the contract and tracking the changes - * It also allows the owner to withdraw the Ether in the contract - * @author BuidlGuidl - */ contract YourContract { - // State Variables - address public immutable owner; - string public greeting = "Building Unstoppable Apps!!!"; - bool public premium = false; - uint256 public totalCounter = 0; - mapping(address => uint) public userGreetingCounter; - - // Events: a way to emit log statements from smart contract that can be listened to by external parties - event GreetingChange( - address indexed greetingSetter, - string newGreeting, - bool premium, - uint256 value - ); - - // Constructor: Called once on contract deployment - // Check packages/hardhat/deploy/00_deploy_your_contract.ts - constructor(address _owner) { - owner = _owner; - } - - // Modifier: used to define a set of rules that must be met before or after a function is executed - // Check the withdraw() function - modifier isOwner() { - // msg.sender: predefined variable that represents address of the account that called the current function - require(msg.sender == owner, "Not the Owner"); - _; - } - - /** - * Function that allows anyone to change the state variable "greeting" of the contract and increase the counters - * - * @param _newGreeting (string memory) - new greeting to save on the contract - */ - function setGreeting(string memory _newGreeting) public payable { - // Print data to the hardhat chain console. Remove when deploying to a live network. - console.log( - "Setting new greeting '%s' from %s", - _newGreeting, - msg.sender - ); - - // Change state variables - greeting = _newGreeting; - totalCounter += 1; - userGreetingCounter[msg.sender] += 1; - - // msg.value: built-in global variable that represents the amount of ether sent with the transaction - if (msg.value > 0) { - premium = true; - } else { - premium = false; - } - - // emit: keyword used to trigger an event - emit GreetingChange(msg.sender, _newGreeting, msg.value > 0, 0); - } - - /** - * Function that allows the owner to withdraw all the Ether in the contract - * The function can only be called by the owner of the contract as defined by the isOwner modifier - */ - function withdraw() public isOwner { - (bool success, ) = owner.call{ value: address(this).balance }(""); - require(success, "Failed to send Ether"); - } - - /** - * Function that allows the contract to receive ETH - */ - receive() external payable {} + enum Mode { + Manual, + Continuous, + GroupBruteForce + } + + Mode public currentMode; + uint8 public diceCount = 1; + address public host; + + error OnlyHostAllowed(); + error InvalidDiceCount(); + + event ModeChanged(Mode newMode); + event DiceCountChanged(uint8 newDiceCount); + + modifier onlyHost() { + if (msg.sender != host) revert OnlyHostAllowed(); + _; + } + + constructor(address _host) { + host = _host; + currentMode = Mode.Manual; + } + + function setMode(Mode _mode) external onlyHost { + currentMode = _mode; + emit ModeChanged(_mode); + } + + function setDiceCount(uint8 _count) external onlyHost { + if (_count < 1 || _count > 64) revert InvalidDiceCount(); + diceCount = _count; + emit DiceCountChanged(_count); + } } diff --git a/packages/nextjs/.env.example b/packages/nextjs/.env.example index c8d03d7..411f08e 100644 --- a/packages/nextjs/.env.example +++ b/packages/nextjs/.env.example @@ -11,3 +11,4 @@ # More info: https://nextjs.org/docs/pages/building-your-application/configuring/environment-variables NEXT_PUBLIC_ALCHEMY_API_KEY= NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID= +NEXT_PUBLIC_ABLY_API_KEY= \ No newline at end of file diff --git a/packages/nextjs/components/Condolence.tsx b/packages/nextjs/components/Condolence.tsx new file mode 100644 index 0000000..66a6ee0 --- /dev/null +++ b/packages/nextjs/components/Condolence.tsx @@ -0,0 +1,32 @@ +import { Dispatch, SetStateAction } from "react"; + +const Condolence = ({ + isOpen, + setIsOpen, + message, +}: { + isOpen: boolean; + setIsOpen: Dispatch>; + message: string; +}) => { + const closePopup = () => { + setIsOpen(false); + }; + + return ( +
+ {isOpen && ( +
+
+ +

{message}

+
+
+ )} +
+ ); +}; + +export default Condolence; diff --git a/packages/nextjs/components/Congrats.tsx b/packages/nextjs/components/Congrats.tsx new file mode 100644 index 0000000..911978c --- /dev/null +++ b/packages/nextjs/components/Congrats.tsx @@ -0,0 +1,72 @@ +import { Dispatch, SetStateAction } from "react"; +import { Hex, createWalletClient } from "viem"; +import { http } from "viem"; +import { parseEther } from "viem"; +import { privateKeyToAccount } from "viem/accounts"; +import { useTransactor } from "~~/hooks/scaffold-eth"; +import useGameData from "~~/hooks/useGameData"; +import { getTargetNetwork } from "~~/utils/scaffold-eth"; + +const Congrats = ({ + isOpen, + setIsOpen, + message, +}: { + isOpen: boolean; + setIsOpen: Dispatch>; + message: string; +}) => { + const closePopup = () => { + setIsOpen(false); + }; + + const configuredNetwork = getTargetNetwork(); + + const walletClient = createWalletClient({ + chain: configuredNetwork, + transport: http(), + }); + + const { loadGameState } = useGameData(); + const transferTx = useTransactor(walletClient); + const { game } = loadGameState(); + const privateKey = "0x" + game?.privateKey; + + const account = privateKeyToAccount(privateKey as Hex); + + return ( +
+ {isOpen && ( +
+
+ +

{message}

+ +
+
+ )} +
+ ); +}; + +export default Congrats; diff --git a/packages/nextjs/components/GameCreateForm.tsx b/packages/nextjs/components/GameCreateForm.tsx new file mode 100644 index 0000000..6dd39cb --- /dev/null +++ b/packages/nextjs/components/GameCreateForm.tsx @@ -0,0 +1,214 @@ +import React, { useEffect, useState } from "react"; +import { useRouter } from "next/router"; +import { EtherInput, InputBase } from "./scaffold-eth"; +import { useAccount } from "wagmi"; +import { loadBurnerSK } from "~~/hooks/scaffold-eth"; +import serverConfig from "~~/server.config"; +import { saveGameState } from "~~/utils/diceDemo/game"; +import { notification } from "~~/utils/scaffold-eth"; + +interface FormData { + maxPlayers: number; + diceCount: number; + mode: "auto" | "manual"; + privateKey: string; + hiddenChars: { + number?: string; + }; + prize: string; + adminAddress: string | undefined; +} + +const GameCreationForm = () => { + const router = useRouter(); + const { address: adminAddress } = useAccount(); + + const serverUrl = serverConfig.isLocal ? serverConfig.localUrl : serverConfig.liveUrl; + + const [formData, setFormData] = useState({ + maxPlayers: 5, + diceCount: 0, + mode: "manual", + privateKey: loadBurnerSK().toString().substring(2), + hiddenChars: {}, + prize: "", + adminAddress, + }); + const [selectedSlots, setSelectedSlots] = useState([]); + const [privateKey, setPrivateKey] = useState(""); + const [loading, setloading] = useState(false); + const disabled = parseFloat(formData.prize) == 0 || formData.prize == "" || selectedSlots.length == 0; + + useEffect(() => { + const pk = loadBurnerSK().toString().substring(2); + setPrivateKey(pk); + }, []); + + const handlePlayersChange = (value: number) => { + setFormData({ ...formData, maxPlayers: value }); + }; + + const handlePrizeChange = (value: string) => { + setFormData({ ...formData, prize: value }); + }; + + const handleModeChange = (value: "auto" | "manual") => { + setFormData({ ...formData, mode: value }); + }; + + const handleCharClick = (index: number) => { + const updatedSelectedSlots = [...selectedSlots]; + + if (updatedSelectedSlots.includes(index)) { + const indexToRemove = updatedSelectedSlots.indexOf(index); + updatedSelectedSlots.splice(indexToRemove, 1); + } else { + updatedSelectedSlots.push(index); + } + setSelectedSlots(updatedSelectedSlots.sort((a, b) => a - b)); + + setFormData({ + ...formData, + diceCount: updatedSelectedSlots.length, + }); + }; + + const createHiddenCharObject = (selectedSlots: number[]) => { + const characterObject: { [key: number]: string } = {}; + + const selectedCharacters = privateKey.split("").filter((char, index) => selectedSlots.includes(index)); + + selectedCharacters.forEach((char, index) => { + const selectedIndex = selectedSlots[index]; + characterObject[selectedIndex] = char; + }); + + setFormData({ + ...formData, + hiddenChars: characterObject, + }); + }; + + const handleSubmit = async (event: React.FormEvent) => { + event.preventDefault(); + setloading(true); + const createGameResponse = await fetch(`${serverUrl}/admin/create`, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(formData), + }); + + const createdGame = await createGameResponse.json(); + setloading(false); + if (createdGame.error) { + notification.error(createdGame.error); + return; + } + + saveGameState(JSON.stringify(createdGame)); + router.push({ + pathname: `/game/[id]`, + query: { id: createdGame.game.inviteCode }, + }); + notification.success("Created game successfully"); + + setFormData({ + maxPlayers: 5, + diceCount: 0, + mode: "auto", + privateKey: loadBurnerSK(), + hiddenChars: {}, + prize: "", + adminAddress, + }); + }; + + useEffect(() => { + createHiddenCharObject(selectedSlots); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [selectedSlots]); + + useEffect(() => { + setFormData({ + ...formData, + adminAddress: adminAddress, + }); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [adminAddress]); + + return ( +
+
+ +
+ +
+ +
+
+ +
+ +
+
+ ); +}; + +export default GameCreationForm; diff --git a/packages/nextjs/components/GameJoinForm.tsx b/packages/nextjs/components/GameJoinForm.tsx new file mode 100644 index 0000000..23b9fd3 --- /dev/null +++ b/packages/nextjs/components/GameJoinForm.tsx @@ -0,0 +1,126 @@ +import React, { Dispatch, SetStateAction, useEffect, useRef, useState } from "react"; +import { useRouter } from "next/router"; +import { InputBase } from "./scaffold-eth"; +import QrReader from "react-qr-reader-es6"; +import { useAccount } from "wagmi"; +import serverConfig from "~~/server.config"; +import { saveGameState } from "~~/utils/diceDemo/game"; +import { notification } from "~~/utils/scaffold-eth"; + +const GameJoinForm = ({ + inviteCode, + setInviteCode, +}: { + inviteCode: string; + setInviteCode: Dispatch>; +}) => { + const router = useRouter(); + const labelRef = useRef(null); + const [scanning, setScanning] = useState(false); + const [loading, setLoading] = useState(false); + + const handleChange = (value: string) => { + setInviteCode(value); + }; + + const { address: playerAddress } = useAccount(); + const serverUrl = serverConfig.isLocal ? serverConfig.localUrl : serverConfig.liveUrl; + + const handleJoinGame = async (event: React.FormEvent) => { + event.preventDefault(); + setLoading(true); + const response = await fetch(`${serverUrl}/player/join`, { + method: "PATCH", + headers: { + Authorization: `Bearer`, + "Content-Type": "application/json", + }, + body: JSON.stringify({ inviteCode, playerAddress }), + }); + + const updatedGame = await response.json(); + setLoading(false); + if (updatedGame.error) { + notification.error(updatedGame.error); + return; + } + + saveGameState(JSON.stringify(updatedGame)); + + await router.push({ + pathname: `/game/[id]`, + query: { id: inviteCode }, + }); + notification.success("Joined game successfully"); + + setInviteCode(""); + }; + + const handleScan = (data: string | null) => { + if (data) { + setTimeout(() => { + setInviteCode(data); + }, 250); + setScanning(false); + } + }; + + const handleError = (err: Error) => { + console.error(err.message); + setScanning(false); + }; + + const openCamera = () => { + setScanning(true); + }; + + useEffect(() => { + if (labelRef.current) { + labelRef.current.focus(); + } + }, []); + + return ( +
+
+ + +
+ + {scanning && ( +
setScanning(false)} + > +
+ +
+
+ )} +
+ ); +}; + +export default GameJoinForm; diff --git a/packages/nextjs/components/Header.tsx b/packages/nextjs/components/Header.tsx index af3349b..5f15380 100644 --- a/packages/nextjs/components/Header.tsx +++ b/packages/nextjs/components/Header.tsx @@ -2,7 +2,8 @@ import React, { useCallback, useRef, useState } from "react"; import Image from "next/image"; import Link from "next/link"; import { useRouter } from "next/router"; -import { Bars3Icon, BugAntIcon, MagnifyingGlassIcon, SparklesIcon } from "@heroicons/react/24/outline"; +import Wallet from "./Wallet"; +import { Bars3Icon } from "@heroicons/react/24/outline"; import { FaucetButton, RainbowKitCustomConnectButton } from "~~/components/scaffold-eth"; import { useOutsideClick } from "~~/hooks/scaffold-eth"; @@ -39,7 +40,7 @@ export const Header = () => {
  • Home
  • -
  • + {/*
  • Debug Contracts @@ -56,7 +57,7 @@ export const Header = () => { Block Explorer -
  • + */} ); @@ -99,6 +100,7 @@ export const Header = () => {
    +
    ); diff --git a/packages/nextjs/components/JoinForm.tsx b/packages/nextjs/components/JoinForm.tsx new file mode 100644 index 0000000..e69de29 diff --git a/packages/nextjs/components/MetaHeader.tsx b/packages/nextjs/components/MetaHeader.tsx index 4760762..f13dfb7 100644 --- a/packages/nextjs/components/MetaHeader.tsx +++ b/packages/nextjs/components/MetaHeader.tsx @@ -14,8 +14,8 @@ type MetaHeaderProps = { const baseUrl = process.env.NEXT_PUBLIC_VERCEL_URL ? `https://${process.env.NEXT_PUBLIC_VERCEL_URL}/` : "/"; export const MetaHeader = ({ - title = "Scaffold-ETH 2 App", - description = "Built with 🏗 Scaffold-ETH 2", + title = "Dice Hunt", + description = "Hack the private key", image = "thumbnail.jpg", twitterCard = "summary_large_image", children, diff --git a/packages/nextjs/components/Wallet.tsx b/packages/nextjs/components/Wallet.tsx new file mode 100644 index 0000000..7e703c4 --- /dev/null +++ b/packages/nextjs/components/Wallet.tsx @@ -0,0 +1,320 @@ +import React, { useState } from "react"; +import { Address, AddressInput, Balance, EtherInput } from "./scaffold-eth"; +import QR from "qrcode.react"; +import CopyToClipboard from "react-copy-to-clipboard"; +import { createWalletClient, http, parseEther } from "viem"; +import { Hex } from "viem"; +import { generatePrivateKey, privateKeyToAccount } from "viem/accounts"; +import { useAccount } from "wagmi"; +import { + CheckCircleIcon, + DocumentDuplicateIcon, + KeyIcon, + PaperAirplaneIcon, + QrCodeIcon, + WalletIcon, +} from "@heroicons/react/24/outline"; +import { useTransactor } from "~~/hooks/scaffold-eth"; +import { loadBurnerSK } from "~~/hooks/scaffold-eth"; +import { getTargetNetwork } from "~~/utils/scaffold-eth"; + +export default function Wallet() { + const account = privateKeyToAccount(loadBurnerSK()); + const configuredNetwork = getTargetNetwork(); + + const selectedAddress = account?.address; + + const [open, setOpen] = useState(false); + const [qr, setQr] = useState(""); + const [amount, setAmount] = useState(""); + const [toAddress, setToAddress] = useState(""); + const [pk, setPK] = useState(""); + const [pkCopied, setPkCopied] = useState(false); + const [punkLinkCopied, setPunkLinkCopied] = useState(false); + + const walletClient = createWalletClient({ + chain: configuredNetwork, + transport: http(), + }); + + const { connector } = useAccount(); + + const transferTx = useTransactor(walletClient); + + const providerSend = ( + + ); + + let display; + if (qr != "") { + display = ( +
    + +
    + ); + } else if (pk != "") { + const pk = localStorage.getItem("scaffoldEth2.burnerWallet.sk"); + const wallet = privateKeyToAccount(pk as Hex); + + if (wallet.address !== selectedAddress) { + display = ( +
    + *injected account*, private key unknown +
    + ); + } else { + const extraPkDisplayAdded: { + [key: string]: boolean; + } = {}; + const extraPkDisplay = []; + extraPkDisplayAdded[wallet.address] = true; + extraPkDisplay.push( + , + ); + for (const key in localStorage) { + if (key.indexOf("scaffoldEth2.burnerWallet.sk_backup") >= 0) { + const pastpk = localStorage.getItem(key); + const pastwallet = privateKeyToAccount(pastpk as Hex); + if (!extraPkDisplayAdded[pastwallet.address] /* && selectedAddress!=pastwallet.address */) { + extraPkDisplayAdded[pastwallet.address] = true; + extraPkDisplay.push( + , + ); + } + } + } + + const fullLink = "https://punkwallet.io/pk#" + pk; + + display = ( +
    +
    + Private Key: +
    + {pk} + {pkCopied ? ( +
    + +
    +
    + Punk Wallet: +
    +
    + {fullLink} + {punkLinkCopied ? ( +
    +
    + +
    + + Point your camera phone at qr code to open in   + + Punk Wallet + + : + + +
    { + const el = document.createElement("textarea"); + el.value = fullLink; + document.body.appendChild(el); + el.select(); + document.execCommand("copy"); + document.body.removeChild(el); + }} + > + +
    +
    + + {extraPkDisplay ? ( +
    +

    Known Private Keys:

    + {extraPkDisplay} + +
    + ) : ( + "" + )} +
    + ); + } + } else { + display = ( +
    +
    + +
    +
    + { + setAmount(value); + }} + /> +
    +
    + ); + } + + if (connector?.name != "Burner Wallet") { + return null; + } + + return ( + + {providerSend} + {open && ( +
    +
    +
    + +
    +
    + +
    + {display} + +
    + + + +
    +
    +
    +
    + )} +
    + ); +} diff --git a/packages/nextjs/components/scaffold-eth/Input/EtherInput.tsx b/packages/nextjs/components/scaffold-eth/Input/EtherInput.tsx index 9ac76ec..10141e2 100644 --- a/packages/nextjs/components/scaffold-eth/Input/EtherInput.tsx +++ b/packages/nextjs/components/scaffold-eth/Input/EtherInput.tsx @@ -100,6 +100,7 @@ export const EtherInput = ({ value, name, placeholder, onChange, disabled }: Com prefix={{usdMode ? "$" : "Ξ"}} suffix={ + )} + + ))} + + + + {isPlayer && ( +
    + +
    +
    + Result: + {rolledResult.length > 0 && !spinning && {rolledResult.join(" , ")}} +
    +
    + {Object.entries(game.hiddenChars).map(([key], index) => + rolled ? ( + isUnitRolling[index] ? ( +
    +
    {" "} + {game?.winner == address && ( + + )} + {game.winner && game?.winner != address && ( + + )} +
    + )} + {!isAdmin && !isPlayer &&

    Sorry fren, You have been kicked

    } + + + ); + } else { + return
    No Game
    ; + } +} + +export default GamePage; diff --git a/packages/nextjs/pages/index.tsx b/packages/nextjs/pages/index.tsx index 0a5c06a..f21ae6f 100644 --- a/packages/nextjs/pages/index.tsx +++ b/packages/nextjs/pages/index.tsx @@ -1,69 +1,75 @@ -import Link from "next/link"; +import { useEffect, useState } from "react"; +import { useRouter } from "next/router"; import type { NextPage } from "next"; -import { BugAntIcon, MagnifyingGlassIcon, SparklesIcon } from "@heroicons/react/24/outline"; +import GameCreationForm from "~~/components/GameCreateForm"; +import GameJoinForm from "~~/components/GameJoinForm"; import { MetaHeader } from "~~/components/MetaHeader"; const Home: NextPage = () => { + const router = useRouter(); + + const { invite } = router.query; + const [gameState, setGameState] = useState<"createGame" | "joinGame">("joinGame"); + const [inviteCode, setInviteCode] = useState(""); + + useEffect(() => { + if (invite) { + setGameState("joinGame"); + setInviteCode(invite as string); + } + }, [invite]); + return ( <> -
    -
    -

    - Welcome to - Scaffold-ETH 2 -

    -

    - Get started by editing{" "} - - packages/nextjs/pages/index.tsx - -

    -

    - Edit your smart contract{" "} - - YourContract.sol - {" "} - in{" "} - - packages/hardhat/contracts - -

    -
    - -
    -
    -
    - +
    +
    +
    +

    - Tinker with your smart contract using the{" "} - - Debug Contract - {" "} - tab. + Welcome to “Crypto Dice Hunt” - where you will race against others, rolling dices, to beat + the security of private keys.

    -
    -
    -

    - Experiment with{" "} - - Example UI - {" "} - to build your own UI. + A user starts by creating a game, selecting the characters to be concealed in the private key. Upto 30 + opponents can join the quest.

    -
    -
    -

    - Explore your local transactions with the{" "} - - Block Explorer - {" "} - tab. + Your objective as a player? Decode these hidden characters and seize the prize concealed within the + wallet before your opponent does.

    + Are you ready to race to wealth? Roll the dice, hack the private key, and claim the Prize!
    + +
    + + {gameState == "createGame" && } + {gameState == "joinGame" && } +
    diff --git a/packages/nextjs/public/rolls/0.webm b/packages/nextjs/public/rolls/0.webm new file mode 100644 index 0000000..4e02e16 Binary files /dev/null and b/packages/nextjs/public/rolls/0.webm differ diff --git a/packages/nextjs/public/rolls/1.webm b/packages/nextjs/public/rolls/1.webm new file mode 100644 index 0000000..c8cc1de Binary files /dev/null and b/packages/nextjs/public/rolls/1.webm differ diff --git a/packages/nextjs/public/rolls/2.webm b/packages/nextjs/public/rolls/2.webm new file mode 100644 index 0000000..31d55bc Binary files /dev/null and b/packages/nextjs/public/rolls/2.webm differ diff --git a/packages/nextjs/public/rolls/3.webm b/packages/nextjs/public/rolls/3.webm new file mode 100644 index 0000000..d7fc2c7 Binary files /dev/null and b/packages/nextjs/public/rolls/3.webm differ diff --git a/packages/nextjs/public/rolls/4.webm b/packages/nextjs/public/rolls/4.webm new file mode 100644 index 0000000..f0993c9 Binary files /dev/null and b/packages/nextjs/public/rolls/4.webm differ diff --git a/packages/nextjs/public/rolls/5.webm b/packages/nextjs/public/rolls/5.webm new file mode 100644 index 0000000..665cdb3 Binary files /dev/null and b/packages/nextjs/public/rolls/5.webm differ diff --git a/packages/nextjs/public/rolls/6.webm b/packages/nextjs/public/rolls/6.webm new file mode 100644 index 0000000..a15953c Binary files /dev/null and b/packages/nextjs/public/rolls/6.webm differ diff --git a/packages/nextjs/public/rolls/7.webm b/packages/nextjs/public/rolls/7.webm new file mode 100644 index 0000000..8bf623e Binary files /dev/null and b/packages/nextjs/public/rolls/7.webm differ diff --git a/packages/nextjs/public/rolls/8.webm b/packages/nextjs/public/rolls/8.webm new file mode 100644 index 0000000..f182829 Binary files /dev/null and b/packages/nextjs/public/rolls/8.webm differ diff --git a/packages/nextjs/public/rolls/9.webm b/packages/nextjs/public/rolls/9.webm new file mode 100644 index 0000000..3dd1985 Binary files /dev/null and b/packages/nextjs/public/rolls/9.webm differ diff --git a/packages/nextjs/public/rolls/A.webm b/packages/nextjs/public/rolls/A.webm new file mode 100644 index 0000000..452b4fd Binary files /dev/null and b/packages/nextjs/public/rolls/A.webm differ diff --git a/packages/nextjs/public/rolls/B.webm b/packages/nextjs/public/rolls/B.webm new file mode 100644 index 0000000..6022114 Binary files /dev/null and b/packages/nextjs/public/rolls/B.webm differ diff --git a/packages/nextjs/public/rolls/C.webm b/packages/nextjs/public/rolls/C.webm new file mode 100644 index 0000000..91fb9f0 Binary files /dev/null and b/packages/nextjs/public/rolls/C.webm differ diff --git a/packages/nextjs/public/rolls/D.webm b/packages/nextjs/public/rolls/D.webm new file mode 100644 index 0000000..f2d6b4f Binary files /dev/null and b/packages/nextjs/public/rolls/D.webm differ diff --git a/packages/nextjs/public/rolls/E.webm b/packages/nextjs/public/rolls/E.webm new file mode 100644 index 0000000..1f36bb8 Binary files /dev/null and b/packages/nextjs/public/rolls/E.webm differ diff --git a/packages/nextjs/public/rolls/F.webm b/packages/nextjs/public/rolls/F.webm new file mode 100644 index 0000000..4dbaf8d Binary files /dev/null and b/packages/nextjs/public/rolls/F.webm differ diff --git a/packages/nextjs/public/rolls/Spin.webm b/packages/nextjs/public/rolls/Spin.webm new file mode 100644 index 0000000..71ecf07 Binary files /dev/null and b/packages/nextjs/public/rolls/Spin.webm differ diff --git a/packages/nextjs/scaffold.config.ts b/packages/nextjs/scaffold.config.ts index ae297bf..b067777 100644 --- a/packages/nextjs/scaffold.config.ts +++ b/packages/nextjs/scaffold.config.ts @@ -11,7 +11,7 @@ export type ScaffoldConfig = { const scaffoldConfig = { // The network where your DApp lives in - targetNetwork: chains.hardhat, + targetNetwork: chains.optimism, // The interval at which your front-end polls the RPC servers for new data // it has no effect on the local network @@ -30,7 +30,7 @@ const scaffoldConfig = { walletConnectProjectId: process.env.NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID || "3a8170812b534d0ff9d794f19a901d64", // Only show the Burner Wallet when running on hardhat network - onlyLocalBurnerWallet: true, + onlyLocalBurnerWallet: false, /** * Auto connect: diff --git a/packages/nextjs/server.config.ts b/packages/nextjs/server.config.ts new file mode 100644 index 0000000..b54076e --- /dev/null +++ b/packages/nextjs/server.config.ts @@ -0,0 +1,7 @@ +const serverConfig = { + isLocal: false, + localUrl: "http://localhost:6001", + liveUrl: "https://weak-teal-haddock-sari.cyclic.app", +}; + +export default serverConfig; diff --git a/packages/nextjs/types/game/game.ts b/packages/nextjs/types/game/game.ts new file mode 100644 index 0000000..476cfc2 --- /dev/null +++ b/packages/nextjs/types/game/game.ts @@ -0,0 +1,14 @@ +export interface Game { + _id: string; + adminAddress: string; + status: "lobby" | "ongoing" | "paused" | "finished"; + inviteCode: string; + maxPlayers: number; + diceCount: number; + mode: "auto" | "manual"; + privateKey: string; + hiddenChars: Record; + prize: number; + players: string[]; + winner?: string | null; +} diff --git a/packages/nextjs/utils/diceDemo/game.ts b/packages/nextjs/utils/diceDemo/game.ts new file mode 100644 index 0000000..90f6c58 --- /dev/null +++ b/packages/nextjs/utils/diceDemo/game.ts @@ -0,0 +1,29 @@ +const STORAGE_KEY = "game_sk"; + +export const saveGameState = (gameState: string) => { + if (typeof window != "undefined" && window != null) { + window.localStorage.setItem(STORAGE_KEY, gameState); + } +}; + +export const loadGameState = () => { + if (typeof window != "undefined" && window != null) { + const gameState = window.localStorage.getItem(STORAGE_KEY); + // console.log(gameState); + if (gameState) return JSON.parse(gameState); + } else return { token: null, game: null }; +}; + +export const updateGameState = (game: string) => { + if (typeof window != "undefined" && window != null) { + let gameState = window.localStorage.getItem(STORAGE_KEY); + + if (gameState) { + const gameStateObj = JSON.parse(gameState); + gameStateObj.game = game; + gameState = JSON.stringify(gameStateObj); + window.localStorage.setItem(STORAGE_KEY, gameState); + return gameState; + } + } +}; diff --git a/yarn.lock b/yarn.lock index eacfa26..5802446 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,6 +5,15 @@ __metadata: version: 6 cacheKey: 8 +"@ably/msgpack-js@npm:^0.4.0": + version: 0.4.0 + resolution: "@ably/msgpack-js@npm:0.4.0" + dependencies: + bops: ^1.0.1 + checksum: d5d47ce284e8461dc73eb2bf94329f31e36c9e2bb4cb0e58285540339411e0bac2e6540572a57b1e3a0361deed56cc8b54406d1066659ec6d5743ac6faa1bcb4 + languageName: node + linkType: hard + "@adraffy/ens-normalize@npm:1.9.0": version: 1.9.0 resolution: "@adraffy/ens-normalize@npm:1.9.0" @@ -622,7 +631,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/providers@npm:^5.7.2": +"@ethersproject/providers@npm:5.7.2, @ethersproject/providers@npm:^5.7.2": version: 5.7.2 resolution: "@ethersproject/providers@npm:5.7.2" dependencies: @@ -938,6 +947,25 @@ __metadata: languageName: node linkType: hard +"@mapbox/node-pre-gyp@npm:^1.0.11": + version: 1.0.11 + resolution: "@mapbox/node-pre-gyp@npm:1.0.11" + dependencies: + detect-libc: ^2.0.0 + https-proxy-agent: ^5.0.0 + make-dir: ^3.1.0 + node-fetch: ^2.6.7 + nopt: ^5.0.0 + npmlog: ^5.0.1 + rimraf: ^3.0.2 + semver: ^7.3.5 + tar: ^6.1.11 + bin: + node-pre-gyp: bin/node-pre-gyp + checksum: b848f6abc531a11961d780db813cc510ca5a5b6bf3184d72134089c6875a91c44d571ba6c1879470020803f7803609e7b2e6e429651c026fe202facd11d444b8 + languageName: node + linkType: hard + "@mapbox/node-pre-gyp@npm:^1.0.5": version: 1.0.10 resolution: "@mapbox/node-pre-gyp@npm:1.0.10" @@ -1016,6 +1044,15 @@ __metadata: languageName: node linkType: hard +"@mongodb-js/saslprep@npm:^1.1.0": + version: 1.1.0 + resolution: "@mongodb-js/saslprep@npm:1.1.0" + dependencies: + sparse-bitfield: ^3.0.3 + checksum: 1479a43e216734672f8eb1a2a55165b6896841bd00fb5bd645390a24374ef6c29f0f6d19a43618a19b8f1912fcbd2b2cc2210a62361103d1f28dce6852cf31d4 + languageName: node + linkType: hard + "@motionone/animation@npm:^10.15.1": version: 10.15.1 resolution: "@motionone/animation@npm:10.15.1" @@ -1101,10 +1138,10 @@ __metadata: languageName: node linkType: hard -"@next/env@npm:13.1.6": - version: 13.1.6 - resolution: "@next/env@npm:13.1.6" - checksum: 0f911a18f0b3372007632fffa87f5d7f802c00d07b3bf757d2d09574735ae43f60000ecdf64b6f06e195971c508c2bcee82dd1e3aab27a08a4300eb0317652bb +"@next/env@npm:13.5.6": + version: 13.5.6 + resolution: "@next/env@npm:13.5.6" + checksum: 5e8f3f6f987a15dad3cd7b2bcac64a6382c2ec372d95d0ce6ab295eb59c9731222017eebf71ff3005932de2571f7543bce7e5c6a8c90030207fb819404138dc2 languageName: node linkType: hard @@ -1117,93 +1154,65 @@ __metadata: languageName: node linkType: hard -"@next/swc-android-arm-eabi@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-android-arm-eabi@npm:13.1.6" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@next/swc-android-arm64@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-android-arm64@npm:13.1.6" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@next/swc-darwin-arm64@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-darwin-arm64@npm:13.1.6" +"@next/swc-darwin-arm64@npm:13.5.6": + version: 13.5.6 + resolution: "@next/swc-darwin-arm64@npm:13.5.6" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@next/swc-darwin-x64@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-darwin-x64@npm:13.1.6" +"@next/swc-darwin-x64@npm:13.5.6": + version: 13.5.6 + resolution: "@next/swc-darwin-x64@npm:13.5.6" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@next/swc-freebsd-x64@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-freebsd-x64@npm:13.1.6" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@next/swc-linux-arm-gnueabihf@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-linux-arm-gnueabihf@npm:13.1.6" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@next/swc-linux-arm64-gnu@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-linux-arm64-gnu@npm:13.1.6" +"@next/swc-linux-arm64-gnu@npm:13.5.6": + version: 13.5.6 + resolution: "@next/swc-linux-arm64-gnu@npm:13.5.6" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@next/swc-linux-arm64-musl@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-linux-arm64-musl@npm:13.1.6" +"@next/swc-linux-arm64-musl@npm:13.5.6": + version: 13.5.6 + resolution: "@next/swc-linux-arm64-musl@npm:13.5.6" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@next/swc-linux-x64-gnu@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-linux-x64-gnu@npm:13.1.6" +"@next/swc-linux-x64-gnu@npm:13.5.6": + version: 13.5.6 + resolution: "@next/swc-linux-x64-gnu@npm:13.5.6" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@next/swc-linux-x64-musl@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-linux-x64-musl@npm:13.1.6" +"@next/swc-linux-x64-musl@npm:13.5.6": + version: 13.5.6 + resolution: "@next/swc-linux-x64-musl@npm:13.5.6" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@next/swc-win32-arm64-msvc@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-win32-arm64-msvc@npm:13.1.6" +"@next/swc-win32-arm64-msvc@npm:13.5.6": + version: 13.5.6 + resolution: "@next/swc-win32-arm64-msvc@npm:13.5.6" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@next/swc-win32-ia32-msvc@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-win32-ia32-msvc@npm:13.1.6" +"@next/swc-win32-ia32-msvc@npm:13.5.6": + version: 13.5.6 + resolution: "@next/swc-win32-ia32-msvc@npm:13.5.6" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@next/swc-win32-x64-msvc@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-win32-x64-msvc@npm:13.1.6" +"@next/swc-win32-x64-msvc@npm:13.5.6": + version: 13.5.6 + resolution: "@next/swc-win32-x64-msvc@npm:13.5.6" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -1822,6 +1831,33 @@ __metadata: languageName: node linkType: hard +"@se-2/backend@workspace:packages/backend": + version: 0.0.0-use.local + resolution: "@se-2/backend@workspace:packages/backend" + dependencies: + "@types/bcrypt": ^5.0.0 + "@types/cors": ^2.8.14 + "@types/express": ^4.17.18 + "@types/jsonwebtoken": ^9.0.3 + "@types/morgan": ^1.9.6 + "@types/node": ^20.4.2 + ably: ^1.2.45 + bcrypt: ^5.1.0 + body-parser: ^1.20.1 + cors: ^2.8.5 + dotenv: ^16.0.3 + express: ^4.18.2 + gridfs-stream: ^1.1.1 + helmet: ^6.0.0 + jsonwebtoken: ^8.5.1 + mongoose: ^7.6.0 + morgan: ^1.10.0 + ts-node: ^10.9.1 + types: ^0.1.1 + typescript: ^5.1.6 + languageName: unknown + linkType: soft + "@se-2/hardhat@workspace:packages/hardhat": version: 0.0.0-use.local resolution: "@se-2/hardhat@workspace:packages/hardhat" @@ -1877,6 +1913,7 @@ __metadata: "@typescript-eslint/eslint-plugin": ^5.39.0 "@uniswap/sdk-core": ^4.0.1 "@uniswap/v2-sdk": ^3.0.1 + ably: ^1.2.45 autoprefixer: ^10.4.12 blo: ^1.0.1 daisyui: ^3.5.1 @@ -1884,7 +1921,8 @@ __metadata: eslint-config-next: ^13.1.6 eslint-config-prettier: ^8.5.0 eslint-plugin-prettier: ^4.2.1 - next: ^13.1.6 + ethers: ^5.4.1 + next: ^13.5.4 nextjs-progressbar: ^0.0.16 postcss: ^8.4.16 prettier: ^2.8.4 @@ -1894,10 +1932,12 @@ __metadata: react-dom: ^18.2.0 react-fast-marquee: ^1.3.5 react-hot-toast: ^2.4.0 + react-qr-reader-es6: ^2.2.1-2 tailwindcss: ^3.3.3 typescript: ^5.1.6 use-debounce: ^8.0.4 usehooks-ts: ^2.7.2 + valtio: ^1.12.0 vercel: ^28.15.1 viem: ^1.6.7 wagmi: 1.3.10 @@ -1987,6 +2027,13 @@ __metadata: languageName: node linkType: hard +"@sindresorhus/is@npm:^4.0.0": + version: 4.6.0 + resolution: "@sindresorhus/is@npm:4.6.0" + checksum: 83839f13da2c29d55c97abc3bc2c55b250d33a0447554997a85c539e058e57b8da092da396e252b11ec24a0279a0bed1f537fa26302209327060643e327f81d2 + languageName: node + linkType: hard + "@solana/buffer-layout@npm:^4.0.0": version: 4.0.0 resolution: "@solana/buffer-layout@npm:4.0.0" @@ -2199,12 +2246,21 @@ __metadata: languageName: node linkType: hard -"@swc/helpers@npm:0.4.14": - version: 0.4.14 - resolution: "@swc/helpers@npm:0.4.14" +"@swc/helpers@npm:0.5.2": + version: 0.5.2 + resolution: "@swc/helpers@npm:0.5.2" dependencies: tslib: ^2.4.0 - checksum: 273fd3f3fc461a92f3790cc551ea054745c6d6959afbe1232e6d7aa1c722bbc114d308aab96bef5c78fc0303c85c7b472ef00e2253251cc89737f3b1af56e5a5 + checksum: 51d7e3d8bd56818c49d6bfbd715f0dbeedc13cf723af41166e45c03e37f109336bbcb57a1f2020f4015957721aeb21e1a7fff281233d797ff7d3dd1f447fa258 + languageName: node + linkType: hard + +"@szmarczak/http-timer@npm:^4.0.5": + version: 4.0.6 + resolution: "@szmarczak/http-timer@npm:4.0.6" + dependencies: + defer-to-connect: ^2.0.0 + checksum: c29df3bcec6fc3bdec2b17981d89d9c9fc9bd7d0c9bcfe92821dc533f4440bc890ccde79971838b4ceed1921d456973c4180d7175ee1d0023ad0562240a58d95 languageName: node linkType: hard @@ -2363,6 +2419,15 @@ __metadata: languageName: node linkType: hard +"@types/bcrypt@npm:^5.0.0": + version: 5.0.0 + resolution: "@types/bcrypt@npm:5.0.0" + dependencies: + "@types/node": "*" + checksum: 063c32c7a519d64768dfc0169a319b8244d6a6cb50a355c93992b3c5fee1dbc236526a1111f0e7bb25abc8b0473e5f40a5edfeb8b33cad2a6ea35aa2d7d7db14 + languageName: node + linkType: hard + "@types/bn.js@npm:^4.11.3": version: 4.11.6 resolution: "@types/bn.js@npm:4.11.6" @@ -2381,6 +2446,28 @@ __metadata: languageName: node linkType: hard +"@types/body-parser@npm:*": + version: 1.19.3 + resolution: "@types/body-parser@npm:1.19.3" + dependencies: + "@types/connect": "*" + "@types/node": "*" + checksum: 932fa71437c275023799123680ef26ffd90efd37f51a1abe405e6ae6e5b4ad9511b7a3a8f5a12877ed1444a02b6286c0a137a98e914b3c61932390c83643cc2c + languageName: node + linkType: hard + +"@types/cacheable-request@npm:^6.0.1": + version: 6.0.3 + resolution: "@types/cacheable-request@npm:6.0.3" + dependencies: + "@types/http-cache-semantics": "*" + "@types/keyv": ^3.1.4 + "@types/node": "*" + "@types/responselike": ^1.0.0 + checksum: d9b26403fe65ce6b0cb3720b7030104c352bcb37e4fac2a7089a25a97de59c355fa08940658751f2f347a8512aa9d18fdb66ab3ade835975b2f454f2d5befbd9 + languageName: node + linkType: hard + "@types/chai-as-promised@npm:^7.1.3": version: 7.1.5 resolution: "@types/chai-as-promised@npm:7.1.5" @@ -2406,6 +2493,15 @@ __metadata: languageName: node linkType: hard +"@types/connect@npm:*": + version: 3.4.36 + resolution: "@types/connect@npm:3.4.36" + dependencies: + "@types/node": "*" + checksum: 4dee3d966fb527b98f0cbbdcf6977c9193fc3204ed539b7522fe5e64dfa45f9017bdda4ffb1f760062262fce7701a0ee1c2f6ce2e50af36c74d4e37052303172 + languageName: node + linkType: hard + "@types/connect@npm:^3.4.33": version: 3.4.35 resolution: "@types/connect@npm:3.4.35" @@ -2415,6 +2511,15 @@ __metadata: languageName: node linkType: hard +"@types/cors@npm:^2.8.14": + version: 2.8.14 + resolution: "@types/cors@npm:2.8.14" + dependencies: + "@types/node": "*" + checksum: 119b8ea5760db58542cc66635e8b98b9e859d615e9fc7bfd520c0e2c94063e87759033a4242360e2aa66df2d7d092a406838ac35e8ca7034debf1c69abc27811 + languageName: node + linkType: hard + "@types/debug@npm:^4.1.7": version: 4.1.8 resolution: "@types/debug@npm:4.1.8" @@ -2441,6 +2546,30 @@ __metadata: languageName: node linkType: hard +"@types/express-serve-static-core@npm:^4.17.33": + version: 4.17.37 + resolution: "@types/express-serve-static-core@npm:4.17.37" + dependencies: + "@types/node": "*" + "@types/qs": "*" + "@types/range-parser": "*" + "@types/send": "*" + checksum: 2dab1380e45eb44e56ecc1be1c42c4b897364d2f2a08e03ca28fbcb1e6866e390217385435813711c046f9acd684424d088855dc32825d5cbecf72c60ecd037f + languageName: node + linkType: hard + +"@types/express@npm:^4.17.18": + version: 4.17.18 + resolution: "@types/express@npm:4.17.18" + dependencies: + "@types/body-parser": "*" + "@types/express-serve-static-core": ^4.17.33 + "@types/qs": "*" + "@types/serve-static": "*" + checksum: 8c178da4f0edff1f006d871fbdc3f849620986ff10bad252f3dfd45b57554e26aaa28c602285df028930d5216e257a06fbaf795070f8bb42f7d87e3b689cba50 + languageName: node + linkType: hard + "@types/form-data@npm:0.0.33": version: 0.0.33 resolution: "@types/form-data@npm:0.0.33" @@ -2460,6 +2589,20 @@ __metadata: languageName: node linkType: hard +"@types/http-cache-semantics@npm:*": + version: 4.0.3 + resolution: "@types/http-cache-semantics@npm:4.0.3" + checksum: 8a672e545fd01ba3a9f16000639ac687bdbbc6bc37e534fbcf55ac9036a168c96f953c79e063d67e937d9fc0be41734d8af378f75bf1ecb7a24e499001486053 + languageName: node + linkType: hard + +"@types/http-errors@npm:*": + version: 2.0.2 + resolution: "@types/http-errors@npm:2.0.2" + checksum: d7f14045240ac4b563725130942b8e5c8080bfabc724c8ff3f166ea928ff7ae02c5194763bc8f6aaf21897e8a44049b0492493b9de3e058247e58fdfe0f86692 + languageName: node + linkType: hard + "@types/json-schema@npm:*, @types/json-schema@npm:^7.0.6, @types/json-schema@npm:^7.0.9": version: 7.0.11 resolution: "@types/json-schema@npm:7.0.11" @@ -2474,6 +2617,24 @@ __metadata: languageName: node linkType: hard +"@types/jsonwebtoken@npm:^9.0.3": + version: 9.0.3 + resolution: "@types/jsonwebtoken@npm:9.0.3" + dependencies: + "@types/node": "*" + checksum: 2debf3adb19b827a023205234ec439b7258aee6ca9273472abe360738a84f08db78c6e853172e842ec303169ec0bb2df39701ab9a13b9e7868fe284ef9136567 + languageName: node + linkType: hard + +"@types/keyv@npm:^3.1.4": + version: 3.1.4 + resolution: "@types/keyv@npm:3.1.4" + dependencies: + "@types/node": "*" + checksum: e009a2bfb50e90ca9b7c6e8f648f8464067271fd99116f881073fa6fa76dc8d0133181dd65e6614d5fb1220d671d67b0124aef7d97dc02d7e342ab143a47779d + languageName: node + linkType: hard + "@types/lru-cache@npm:^5.1.0": version: 5.1.1 resolution: "@types/lru-cache@npm:5.1.1" @@ -2481,6 +2642,20 @@ __metadata: languageName: node linkType: hard +"@types/mime@npm:*": + version: 3.0.2 + resolution: "@types/mime@npm:3.0.2" + checksum: 09cf74f6377d1b27f4a24512cb689ad30af59880ac473ed6f7bc5285ecde88bbe8fe500789340ad57810da9d6fe1704f86e8bfe147b9ea76d58925204a60b906 + languageName: node + linkType: hard + +"@types/mime@npm:^1": + version: 1.3.3 + resolution: "@types/mime@npm:1.3.3" + checksum: 7e27dede6517c1d604821a8a5412d6b7131decc8397ad4bac9216fc90dea26c9571426623ebeea2a9b89dbfb89ad98f7370a3c62cd2be8896c6e897333b117c9 + languageName: node + linkType: hard + "@types/minimatch@npm:*": version: 5.1.2 resolution: "@types/minimatch@npm:5.1.2" @@ -2495,6 +2670,15 @@ __metadata: languageName: node linkType: hard +"@types/morgan@npm:^1.9.6": + version: 1.9.6 + resolution: "@types/morgan@npm:1.9.6" + dependencies: + "@types/node": "*" + checksum: 6525248325a74342f929c958be69c0840c8f3a288e003a8904319cae92e531f17a8aa2700701e66775adcca7f9506dd630fec2f95dc04a3e73add04fde42aab8 + languageName: node + linkType: hard + "@types/ms@npm:*": version: 0.7.31 resolution: "@types/ms@npm:0.7.31" @@ -2537,6 +2721,13 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:^20.4.2": + version: 20.8.3 + resolution: "@types/node@npm:20.8.3" + checksum: bfb88b341faeb19f8fd37306a3bf433721b876c6491d10fcb0b13fd26601fa36ee45113dd82b1e1c23e3c957dff5b99f81a16493cefa03abe797e41a2487a4f7 + languageName: node + linkType: hard + "@types/node@npm:^8.0.0": version: 8.10.66 resolution: "@types/node@npm:8.10.66" @@ -2583,6 +2774,13 @@ __metadata: languageName: node linkType: hard +"@types/qs@npm:*": + version: 6.9.8 + resolution: "@types/qs@npm:6.9.8" + checksum: c28e07d00d07970e5134c6eed184a0189b8a4649e28fdf36d9117fe671c067a44820890de6bdecef18217647a95e9c6aebdaaae69f5fe4b0bec9345db885f77e + languageName: node + linkType: hard + "@types/qs@npm:^6.2.31, @types/qs@npm:^6.9.7": version: 6.9.7 resolution: "@types/qs@npm:6.9.7" @@ -2590,6 +2788,13 @@ __metadata: languageName: node linkType: hard +"@types/range-parser@npm:*": + version: 1.2.5 + resolution: "@types/range-parser@npm:1.2.5" + checksum: db9aaa04a02d019395a9a4346475669a2864a32a6477ad0fc457bd2ef39a167cabe742f55a8a3fa8bc90abac795b716c22b37348bc3e19313ebe6c9310815233 + languageName: node + linkType: hard + "@types/react-copy-to-clipboard@npm:^5.0.4": version: 5.0.4 resolution: "@types/react-copy-to-clipboard@npm:5.0.4" @@ -2620,6 +2825,15 @@ __metadata: languageName: node linkType: hard +"@types/responselike@npm:^1.0.0": + version: 1.0.2 + resolution: "@types/responselike@npm:1.0.2" + dependencies: + "@types/node": "*" + checksum: ff1767e947eb7d49849e4566040453efcd894888e85b398f7f8cb731552f303f26aceda573b680a142b77ec5fb6c79535d9c6d047d9f936c386dbf3863d2ae17 + languageName: node + linkType: hard + "@types/scheduler@npm:*": version: 0.16.2 resolution: "@types/scheduler@npm:0.16.2" @@ -2643,6 +2857,27 @@ __metadata: languageName: node linkType: hard +"@types/send@npm:*": + version: 0.17.2 + resolution: "@types/send@npm:0.17.2" + dependencies: + "@types/mime": ^1 + "@types/node": "*" + checksum: 1ff5b1bd6a4f6fdc6402c7024781ff5dbd0e1f51a43c69529fb67c710943c7416d2f0d77c57c70fccf6616f25f838f32f960284526e408d4edae2e91e1fce95a + languageName: node + linkType: hard + +"@types/serve-static@npm:*": + version: 1.15.3 + resolution: "@types/serve-static@npm:1.15.3" + dependencies: + "@types/http-errors": "*" + "@types/mime": "*" + "@types/node": "*" + checksum: afa52252f0ba94cdb5391e80f23e17fd629bdf2a31be8876e2c4490312ed6b0570822dd7de7cea04c9002049e207709563568b7f4ee10bb9f456321db1e83e40 + languageName: node + linkType: hard + "@types/trusted-types@npm:^2.0.2": version: 2.0.2 resolution: "@types/trusted-types@npm:2.0.2" @@ -2650,6 +2885,23 @@ __metadata: languageName: node linkType: hard +"@types/webidl-conversions@npm:*": + version: 7.0.1 + resolution: "@types/webidl-conversions@npm:7.0.1" + checksum: 6a7e9a8de0eb2ab31ca2ebba71802c06ef94a4407f34d97e10b80f5323394cca96b44c11437b3d05a830d9435cb698ecbd905630fcb6abf5c7de517aa522d7c7 + languageName: node + linkType: hard + +"@types/whatwg-url@npm:^8.2.1": + version: 8.2.2 + resolution: "@types/whatwg-url@npm:8.2.2" + dependencies: + "@types/node": "*" + "@types/webidl-conversions": "*" + checksum: 5dc5afe078dfa1a8a266745586fa3db9baa8ce7cc904789211d1dca1d34d7f3dd17d0b7423c36bc9beab9d98aa99338f1fc60798c0af6cbb8356f20e20d9f243 + languageName: node + linkType: hard + "@types/ws@npm:^7.4.4": version: 7.4.7 resolution: "@types/ws@npm:7.4.7" @@ -3829,6 +4081,25 @@ __metadata: languageName: node linkType: hard +"ably@npm:^1.2.45": + version: 1.2.45 + resolution: "ably@npm:1.2.45" + dependencies: + "@ably/msgpack-js": ^0.4.0 + got: ^11.8.5 + ws: ^5.1 + peerDependencies: + react: ">=16.8.0" + react-dom: ">=16.8.0" + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + checksum: 2c9d5bda2d66b3cfce02609b1dcb9dbcb9d83eee4874b04b1596d2f150e969b7e6239e248c6e818ad63d6b0f09f6b215eb95220eadc7e166f6f734203e557b34 + languageName: node + linkType: hard + "abstract-level@npm:^1.0.0, abstract-level@npm:^1.0.2, abstract-level@npm:^1.0.3": version: 1.0.3 resolution: "abstract-level@npm:1.0.3" @@ -3844,6 +4115,16 @@ __metadata: languageName: node linkType: hard +"accepts@npm:~1.3.8": + version: 1.3.8 + resolution: "accepts@npm:1.3.8" + dependencies: + mime-types: ~2.1.34 + negotiator: 0.6.3 + checksum: 50c43d32e7b50285ebe84b613ee4a3aa426715a7d131b65b786e2ead0fd76b6b60091b9916d3478a75f11f162628a2139991b6c03ab3f1d9ab7c86075dc8eab4 + languageName: node + linkType: hard + "acorn-jsx@npm:^5.3.2": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" @@ -4215,6 +4496,13 @@ __metadata: languageName: node linkType: hard +"array-flatten@npm:1.1.1": + version: 1.1.1 + resolution: "array-flatten@npm:1.1.1" + checksum: a9925bf3512d9dce202112965de90c222cd59a4fbfce68a0951d25d965cf44642931f40aac72309c41f12df19afa010ecadceb07cfff9ccc1621e99d89ab5f3b + languageName: node + linkType: hard + "array-includes@npm:^3.1.4, array-includes@npm:^3.1.5": version: 3.1.5 resolution: "array-includes@npm:3.1.5" @@ -4323,6 +4611,13 @@ __metadata: languageName: node linkType: hard +"async-limiter@npm:~1.0.0": + version: 1.0.1 + resolution: "async-limiter@npm:1.0.1" + checksum: 2b849695b465d93ad44c116220dee29a5aeb63adac16c1088983c339b0de57d76e82533e8e364a93a9f997f28bbfc6a92948cefc120652bd07f3b59f8d75cf2b + languageName: node + linkType: hard + "async-mutex@npm:^0.2.6": version: 0.2.6 resolution: "async-mutex@npm:0.2.6" @@ -4456,6 +4751,13 @@ __metadata: languageName: node linkType: hard +"base64-js@npm:1.0.2": + version: 1.0.2 + resolution: "base64-js@npm:1.0.2" + checksum: 68e352c13687362b15a59a347d5404be558828235ebb26f98e75b9d8645499c4856b1a3dd584289f778a2fc94f2ebd1a54a407a2f4ae370eabd78ae9a1dde743 + languageName: node + linkType: hard + "base64-js@npm:^1.3.1": version: 1.5.1 resolution: "base64-js@npm:1.5.1" @@ -4463,6 +4765,15 @@ __metadata: languageName: node linkType: hard +"basic-auth@npm:~2.0.1": + version: 2.0.1 + resolution: "basic-auth@npm:2.0.1" + dependencies: + safe-buffer: 5.1.2 + checksum: 3419b805d5dfc518f3a05dcf42aa53aa9ce820e50b6df5097f9e186322e1bc733c36722b624802cd37e791035aa73b828ed814d8362333d42d7f5cd04d7a5e48 + languageName: node + linkType: hard + "bcrypt-pbkdf@npm:^1.0.0, bcrypt-pbkdf@npm:^1.0.2": version: 1.0.2 resolution: "bcrypt-pbkdf@npm:1.0.2" @@ -4472,6 +4783,16 @@ __metadata: languageName: node linkType: hard +"bcrypt@npm:^5.1.0": + version: 5.1.1 + resolution: "bcrypt@npm:5.1.1" + dependencies: + "@mapbox/node-pre-gyp": ^1.0.11 + node-addon-api: ^5.0.0 + checksum: 13523b1b1c8f7d7162001d197a600db038f995e0dfca67182f8c88d6de045a1f31b8e4d8a51d6a123ade57fc3828c0be828ea7ee57f7a08d24cd82c92bbaa441 + languageName: node + linkType: hard + "bech32@npm:1.1.4": version: 1.1.4 resolution: "bech32@npm:1.1.4" @@ -4598,6 +4919,56 @@ __metadata: languageName: node linkType: hard +"body-parser@npm:1.20.1": + version: 1.20.1 + resolution: "body-parser@npm:1.20.1" + 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 + checksum: f1050dbac3bede6a78f0b87947a8d548ce43f91ccc718a50dd774f3c81f2d8b04693e52acf62659fad23101827dd318da1fb1363444ff9a8482b886a3e4a5266 + languageName: node + linkType: hard + +"body-parser@npm:^1.20.1": + version: 1.20.2 + resolution: "body-parser@npm:1.20.2" + dependencies: + bytes: 3.1.2 + content-type: ~1.0.5 + 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.2 + type-is: ~1.6.18 + unpipe: 1.0.0 + checksum: 14d37ec638ab5c93f6099ecaed7f28f890d222c650c69306872e00b9efa081ff6c596cd9afb9930656aae4d6c4e1c17537bea12bb73c87a217cb3cfea8896737 + languageName: node + linkType: hard + +"bops@npm:^1.0.1": + version: 1.0.1 + resolution: "bops@npm:1.0.1" + dependencies: + base64-js: 1.0.2 + to-utf8: 0.0.1 + checksum: f760ab58942354432ab13fdd9f5355d14f01e4133f7d072d5660f831d23ef295cc15989dab16cfeccf420eea328630d1b76bcb0a517e2c90ad7f4ac6f4ffe452 + languageName: node + linkType: hard + "borsh@npm:^0.7.0": version: 0.7.0 resolution: "borsh@npm:0.7.0" @@ -4711,6 +5082,13 @@ __metadata: languageName: node linkType: hard +"bson@npm:^5.4.0, bson@npm:^5.5.0": + version: 5.5.0 + resolution: "bson@npm:5.5.0" + checksum: 61afd240dfcaaa07346c3278d42586606b4c09bd8dcf865f6d79e26ee9cf3d6b140b8347257c598f65340e26ba640f96f6a3b9b6ff2baef963a1d321fc4c281e + languageName: node + linkType: hard + "buffer-alloc-unsafe@npm:^1.1.0": version: 1.1.0 resolution: "buffer-alloc-unsafe@npm:1.1.0" @@ -4728,6 +5106,13 @@ __metadata: languageName: node linkType: hard +"buffer-equal-constant-time@npm:1.0.1": + version: 1.0.1 + resolution: "buffer-equal-constant-time@npm:1.0.1" + checksum: 80bb945f5d782a56f374b292770901065bad21420e34936ecbe949e57724b4a13874f735850dd1cc61f078773c4fb5493a41391e7bda40d1fa388d6bd80daaab + languageName: node + linkType: hard + "buffer-fill@npm:^1.0.0": version: 1.0.0 resolution: "buffer-fill@npm:1.0.0" @@ -4796,7 +5181,7 @@ __metadata: languageName: node linkType: hard -"busboy@npm:^1.6.0": +"busboy@npm:1.6.0, busboy@npm:^1.6.0": version: 1.6.0 resolution: "busboy@npm:1.6.0" dependencies: @@ -4838,6 +5223,28 @@ __metadata: languageName: node linkType: hard +"cacheable-lookup@npm:^5.0.3": + version: 5.0.4 + resolution: "cacheable-lookup@npm:5.0.4" + checksum: 763e02cf9196bc9afccacd8c418d942fc2677f22261969a4c2c2e760fa44a2351a81557bd908291c3921fe9beb10b976ba8fa50c5ca837c5a0dd945f16468f2d + languageName: node + linkType: hard + +"cacheable-request@npm:^7.0.2": + version: 7.0.4 + resolution: "cacheable-request@npm:7.0.4" + dependencies: + clone-response: ^1.0.2 + get-stream: ^5.1.0 + http-cache-semantics: ^4.0.0 + keyv: ^4.0.0 + lowercase-keys: ^2.0.0 + normalize-url: ^6.0.1 + responselike: ^2.0.0 + checksum: 0de9df773fd4e7dd9bd118959878f8f2163867e2e1ab3575ffbecbe6e75e80513dd0c68ba30005e5e5a7b377cc6162bbc00ab1db019bb4e9cb3c2f3f7a6f1ee4 + languageName: node + linkType: hard + "call-bind@npm:^1.0.0, call-bind@npm:^1.0.2": version: 1.0.2 resolution: "call-bind@npm:1.0.2" @@ -5148,10 +5555,19 @@ __metadata: languageName: node linkType: hard -"clsx@npm:1.1.1": - version: 1.1.1 - resolution: "clsx@npm:1.1.1" - checksum: ff052650329773b9b245177305fc4c4dc3129f7b2be84af4f58dc5defa99538c61d4207be7419405a5f8f3d92007c954f4daba5a7b74e563d5de71c28c830063 +"clone-response@npm:^1.0.2": + version: 1.0.3 + resolution: "clone-response@npm:1.0.3" + dependencies: + mimic-response: ^1.0.0 + checksum: 4e671cac39b11c60aa8ba0a450657194a5d6504df51bca3fac5b3bd0145c4f8e8464898f87c8406b83232e3bc5cca555f51c1f9c8ac023969ebfbf7f6bdabb2e + languageName: node + linkType: hard + +"clsx@npm:1.1.1": + version: 1.1.1 + resolution: "clsx@npm:1.1.1" + checksum: ff052650329773b9b245177305fc4c4dc3129f7b2be84af4f58dc5defa99538c61d4207be7419405a5f8f3d92007c954f4daba5a7b74e563d5de71c28c830063 languageName: node linkType: hard @@ -5325,6 +5741,22 @@ __metadata: languageName: node linkType: hard +"content-disposition@npm:0.5.4": + version: 0.5.4 + resolution: "content-disposition@npm:0.5.4" + dependencies: + safe-buffer: 5.2.1 + checksum: afb9d545e296a5171d7574fcad634b2fdf698875f4006a9dd04a3e1333880c5c0c98d47b560d01216fb6505a54a2ba6a843ee3a02ec86d7e911e8315255f56c3 + languageName: node + linkType: hard + +"content-type@npm:~1.0.4, content-type@npm:~1.0.5": + version: 1.0.5 + resolution: "content-type@npm:1.0.5" + checksum: 566271e0a251642254cde0f845f9dd4f9856e52d988f4eb0d0dcffbb7a1f8ec98de7a5215fc628f3bce30fe2fb6fd2bc064b562d721658c59b544e2d34ea2766 + languageName: node + linkType: hard + "convert-hrtime@npm:^3.0.0": version: 3.0.0 resolution: "convert-hrtime@npm:3.0.0" @@ -5332,6 +5764,20 @@ __metadata: languageName: node linkType: hard +"cookie-signature@npm:1.0.6": + version: 1.0.6 + resolution: "cookie-signature@npm:1.0.6" + checksum: f4e1b0a98a27a0e6e66fd7ea4e4e9d8e038f624058371bf4499cfcd8f3980be9a121486995202ba3fca74fbed93a407d6d54d43a43f96fd28d0bd7a06761591a + languageName: node + linkType: hard + +"cookie@npm:0.5.0": + version: 0.5.0 + resolution: "cookie@npm:0.5.0" + checksum: 1f4bd2ca5765f8c9689a7e8954183f5332139eb72b6ff783d8947032ec1fdf43109852c178e21a953a30c0dd42257828185be01b49d1eb1a67fd054ca588a180 + languageName: node + linkType: hard + "cookie@npm:^0.4.1": version: 0.4.2 resolution: "cookie@npm:0.4.2" @@ -5378,6 +5824,16 @@ __metadata: languageName: node linkType: hard +"cors@npm:^2.8.5": + version: 2.8.5 + resolution: "cors@npm:2.8.5" + dependencies: + object-assign: ^4 + vary: ^1 + checksum: ced838404ccd184f61ab4fdc5847035b681c90db7ac17e428f3d81d69e2989d2b680cc254da0e2554f5ed4f8a341820a1ce3d1c16b499f6e2f47a1b9b07b5006 + languageName: node + linkType: hard + "cpu-features@npm:~0.0.8": version: 0.0.8 resolution: "cpu-features@npm:0.0.8" @@ -5528,6 +5984,15 @@ __metadata: languageName: node linkType: hard +"debug@npm:2.6.9, debug@npm:^2.6.9": + version: 2.6.9 + resolution: "debug@npm:2.6.9" + dependencies: + ms: 2.0.0 + checksum: d2f51589ca66df60bf36e1fa6e4386b318c3f1e06772280eea5b1ae9fd3d05e9c2b7fd8a7d862457d00853c75b00451aa2d7459b924629ee385287a650f58fe6 + languageName: node + linkType: hard + "debug@npm:3.2.6": version: 3.2.6 resolution: "debug@npm:3.2.6" @@ -5537,7 +6002,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:4.3.4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": +"debug@npm:4, debug@npm:4.3.4, debug@npm:4.x, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": version: 4.3.4 resolution: "debug@npm:4.3.4" dependencies: @@ -5549,15 +6014,6 @@ __metadata: languageName: node linkType: hard -"debug@npm:^2.6.9": - version: 2.6.9 - resolution: "debug@npm:2.6.9" - dependencies: - ms: 2.0.0 - checksum: d2f51589ca66df60bf36e1fa6e4386b318c3f1e06772280eea5b1ae9fd3d05e9c2b7fd8a7d862457d00853c75b00451aa2d7459b924629ee385287a650f58fe6 - languageName: node - linkType: hard - "debug@npm:^3.2.6, debug@npm:^3.2.7": version: 3.2.7 resolution: "debug@npm:3.2.7" @@ -5602,6 +6058,15 @@ __metadata: languageName: node linkType: hard +"decompress-response@npm:^6.0.0": + version: 6.0.0 + resolution: "decompress-response@npm:6.0.0" + dependencies: + mimic-response: ^3.1.0 + checksum: d377cf47e02d805e283866c3f50d3d21578b779731e8c5072d6ce8c13cc31493db1c2f6784da9d1d5250822120cefa44f1deab112d5981015f2e17444b763812 + languageName: node + linkType: hard + "deep-eql@npm:^3.0.1": version: 3.0.1 resolution: "deep-eql@npm:3.0.1" @@ -5648,6 +6113,13 @@ __metadata: languageName: node linkType: hard +"defer-to-connect@npm:^2.0.0": + version: 2.0.1 + resolution: "defer-to-connect@npm:2.0.1" + checksum: 8a9b50d2f25446c0bfefb55a48e90afd58f85b21bcf78e9207cd7b804354f6409032a1705c2491686e202e64fc05f147aa5aa45f9aa82627563f045937f5791b + languageName: node + linkType: hard + "define-lazy-prop@npm:^2.0.0": version: 2.0.0 resolution: "define-lazy-prop@npm:2.0.0" @@ -5693,7 +6165,7 @@ __metadata: languageName: node linkType: hard -"depd@npm:2.0.0": +"depd@npm:2.0.0, depd@npm:~2.0.0": version: 2.0.0 resolution: "depd@npm:2.0.0" checksum: abbe19c768c97ee2eed6282d8ce3031126662252c58d711f646921c9623f9052e3e1906443066beec1095832f534e57c523b7333f8e7e0d93051ab6baef5ab3a @@ -5707,6 +6179,22 @@ __metadata: languageName: node linkType: hard +"derive-valtio@npm:0.1.0": + version: 0.1.0 + resolution: "derive-valtio@npm:0.1.0" + peerDependencies: + valtio: "*" + checksum: 5266a53bbf4795c72f76922a19e8737e9ecfcbe738e7814108abc13fe048c8b82c48c40f5727c134681caec6f20a8a9d0713c9e1d33b84f755138e032c2d0bce + languageName: node + linkType: hard + +"destroy@npm:1.2.0": + version: 1.2.0 + resolution: "destroy@npm:1.2.0" + checksum: 0acb300b7478a08b92d810ab229d5afe0d2f4399272045ab22affa0d99dbaf12637659411530a6fcd597a9bdac718fc94373a61a95b4651bbc7b83684a565e38 + languageName: node + linkType: hard + "detect-browser@npm:5.3.0, detect-browser@npm:^5.3.0": version: 5.3.0 resolution: "detect-browser@npm:5.3.0" @@ -5914,6 +6402,15 @@ __metadata: languageName: node linkType: hard +"ecdsa-sig-formatter@npm:1.0.11": + version: 1.0.11 + resolution: "ecdsa-sig-formatter@npm:1.0.11" + dependencies: + safe-buffer: ^5.0.1 + checksum: 207f9ab1c2669b8e65540bce29506134613dd5f122cccf1e6a560f4d63f2732d427d938f8481df175505aad94583bcb32c688737bb39a6df0625f903d6d93c03 + languageName: node + linkType: hard + "edge-runtime@npm:2.0.0": version: 2.0.0 resolution: "edge-runtime@npm:2.0.0" @@ -5933,6 +6430,13 @@ __metadata: languageName: node linkType: hard +"ee-first@npm:1.1.1": + version: 1.1.1 + resolution: "ee-first@npm:1.1.1" + checksum: 1b4cac778d64ce3b582a7e26b218afe07e207a0f9bfe13cc7395a6d307849cfe361e65033c3251e00c27dd060cab43014c2d6b2647676135e18b77d2d05b3f4f + languageName: node + linkType: hard + "electron-to-chromium@npm:^1.4.251": version: 1.4.264 resolution: "electron-to-chromium@npm:1.4.264" @@ -5983,6 +6487,13 @@ __metadata: languageName: node linkType: hard +"encodeurl@npm:~1.0.2": + version: 1.0.2 + resolution: "encodeurl@npm:1.0.2" + checksum: e50e3d508cdd9c4565ba72d2012e65038e5d71bdc9198cb125beb6237b5b1ade6c0d343998da9e170fb2eae52c1bed37d4d6d98a46ea423a0cddbed5ac3f780c + languageName: node + linkType: hard + "encoding@npm:^0.1.13": version: 0.1.13 resolution: "encoding@npm:0.1.13" @@ -6336,6 +6847,13 @@ __metadata: languageName: node linkType: hard +"escape-html@npm:~1.0.3": + version: 1.0.3 + resolution: "escape-html@npm:1.0.3" + checksum: 6213ca9ae00d0ab8bccb6d8d4e0a98e76237b2410302cf7df70aaa6591d509a2a37ce8998008cbecae8fc8ffaadf3fb0229535e6a145f3ce0b211d060decbb24 + languageName: node + linkType: hard + "escape-string-regexp@npm:1.0.5, escape-string-regexp@npm:^1.0.5": version: 1.0.5 resolution: "escape-string-regexp@npm:1.0.5" @@ -6764,7 +7282,7 @@ __metadata: languageName: node linkType: hard -"etag@npm:1.8.1": +"etag@npm:1.8.1, etag@npm:~1.8.1": version: 1.8.1 resolution: "etag@npm:1.8.1" checksum: 571aeb3dbe0f2bbd4e4fadbdb44f325fc75335cd5f6f6b6a091e6a06a9f25ed5392f0863c5442acb0646787446e816f13cbfc6edce5b07658541dff573cab1ff @@ -6951,6 +7469,44 @@ __metadata: languageName: node linkType: hard +"ethers@npm:^5.4.1": + version: 5.7.2 + resolution: "ethers@npm:5.7.2" + dependencies: + "@ethersproject/abi": 5.7.0 + "@ethersproject/abstract-provider": 5.7.0 + "@ethersproject/abstract-signer": 5.7.0 + "@ethersproject/address": 5.7.0 + "@ethersproject/base64": 5.7.0 + "@ethersproject/basex": 5.7.0 + "@ethersproject/bignumber": 5.7.0 + "@ethersproject/bytes": 5.7.0 + "@ethersproject/constants": 5.7.0 + "@ethersproject/contracts": 5.7.0 + "@ethersproject/hash": 5.7.0 + "@ethersproject/hdnode": 5.7.0 + "@ethersproject/json-wallets": 5.7.0 + "@ethersproject/keccak256": 5.7.0 + "@ethersproject/logger": 5.7.0 + "@ethersproject/networks": 5.7.1 + "@ethersproject/pbkdf2": 5.7.0 + "@ethersproject/properties": 5.7.0 + "@ethersproject/providers": 5.7.2 + "@ethersproject/random": 5.7.0 + "@ethersproject/rlp": 5.7.0 + "@ethersproject/sha2": 5.7.0 + "@ethersproject/signing-key": 5.7.0 + "@ethersproject/solidity": 5.7.0 + "@ethersproject/strings": 5.7.0 + "@ethersproject/transactions": 5.7.0 + "@ethersproject/units": 5.7.0 + "@ethersproject/wallet": 5.7.0 + "@ethersproject/web": 5.7.1 + "@ethersproject/wordlists": 5.7.0 + checksum: b7c08cf3e257185a7946117dbbf764433b7ba0e77c27298dec6088b3bc871aff711462b0621930c56880ff0a7ceb8b1d3a361ffa259f93377b48e34107f62553 + languageName: node + linkType: hard + "ethers@npm:^5.5.3, ethers@npm:^5.7.1": version: 5.7.1 resolution: "ethers@npm:5.7.1" @@ -7058,6 +7614,45 @@ __metadata: languageName: node linkType: hard +"express@npm:^4.18.2": + version: 4.18.2 + resolution: "express@npm:4.18.2" + dependencies: + accepts: ~1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.1 + 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.11.0 + 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 + checksum: 3c4b9b076879442f6b968fe53d85d9f1eeacbb4f4c41e5f16cc36d77ce39a2b0d81b3f250514982110d815b2f7173f5561367f9110fcc541f9371948e8c8b037 + languageName: node + linkType: hard + "extend@npm:~3.0.2": version: 3.0.2 resolution: "extend@npm:3.0.2" @@ -7209,6 +7804,21 @@ __metadata: languageName: node linkType: hard +"finalhandler@npm:1.2.0": + version: 1.2.0 + resolution: "finalhandler@npm:1.2.0" + dependencies: + debug: 2.6.9 + encodeurl: ~1.0.2 + escape-html: ~1.0.3 + on-finished: 2.4.1 + parseurl: ~1.3.3 + statuses: 2.0.1 + unpipe: ~1.0.0 + checksum: 92effbfd32e22a7dff2994acedbd9bcc3aa646a3e919ea6a53238090e87097f8ef07cced90aa2cc421abdf993aefbdd5b00104d55c7c5479a8d00ed105b45716 + languageName: node + linkType: hard + "find-replace@npm:^3.0.0": version: 3.0.0 resolution: "find-replace@npm:3.0.0" @@ -7293,6 +7903,13 @@ __metadata: languageName: node linkType: hard +"flushwritable@npm:^1.0.0": + version: 1.0.0 + resolution: "flushwritable@npm:1.0.0" + checksum: 3e94480c1f47d531807c0f1e6cb171f58c1dd213b0365e1d11bf475a9d3a4dc7cdf77d7a9c03f4c41855fd7b494428b7a03df0f1ddb0d30e134ca817df2516c3 + languageName: node + linkType: hard + "fmix@npm:^0.1.0": version: 0.1.0 resolution: "fmix@npm:0.1.0" @@ -7361,6 +7978,13 @@ __metadata: languageName: node linkType: hard +"forwarded@npm:0.2.0": + version: 0.2.0 + resolution: "forwarded@npm:0.2.0" + checksum: fd27e2394d8887ebd16a66ffc889dc983fbbd797d5d3f01087c020283c0f019a7d05ee85669383d8e0d216b116d720fc0cef2f6e9b7eb9f4c90c6e0bc7fd28e6 + languageName: node + linkType: hard + "fp-ts@npm:1.19.3": version: 1.19.3 resolution: "fp-ts@npm:1.19.3" @@ -7382,6 +8006,13 @@ __metadata: languageName: node linkType: hard +"fresh@npm:0.5.2": + version: 0.5.2 + resolution: "fresh@npm:0.5.2" + checksum: 13ea8b08f91e669a64e3ba3a20eb79d7ca5379a81f1ff7f4310d54e2320645503cc0c78daedc93dfb6191287295f6479544a649c64d8e41a1c0fb0c221552346 + languageName: node + linkType: hard + "fs-constants@npm:^1.0.0": version: 1.0.0 resolution: "fs-constants@npm:1.0.0" @@ -7624,6 +8255,15 @@ __metadata: languageName: node linkType: hard +"get-stream@npm:^5.1.0": + version: 5.2.0 + resolution: "get-stream@npm:5.2.0" + dependencies: + pump: ^3.0.0 + checksum: 8bc1a23174a06b2b4ce600df38d6c98d2ef6d84e020c1ddad632ad75bac4e092eeb40e4c09e0761c35fc2dbc5e7fff5dab5e763a383582c4a167dd69a905bd12 + languageName: node + linkType: hard + "get-stream@npm:^6.0.1": version: 6.0.1 resolution: "get-stream@npm:6.0.1" @@ -7687,6 +8327,13 @@ __metadata: languageName: node linkType: hard +"glob-to-regexp@npm:^0.4.1": + version: 0.4.1 + resolution: "glob-to-regexp@npm:0.4.1" + checksum: e795f4e8f06d2a15e86f76e4d92751cf8bbfcf0157cea5c2f0f35678a8195a750b34096b1256e436f0cebc1883b5ff0888c47348443e69546a5a87f9e1eb1167 + languageName: node + linkType: hard + "glob@npm:7.1.3": version: 7.1.3 resolution: "glob@npm:7.1.3" @@ -7885,6 +8532,25 @@ __metadata: languageName: node linkType: hard +"got@npm:^11.8.5": + version: 11.8.6 + resolution: "got@npm:11.8.6" + dependencies: + "@sindresorhus/is": ^4.0.0 + "@szmarczak/http-timer": ^4.0.5 + "@types/cacheable-request": ^6.0.1 + "@types/responselike": ^1.0.0 + cacheable-lookup: ^5.0.3 + cacheable-request: ^7.0.2 + decompress-response: ^6.0.0 + http2-wrapper: ^1.0.0-beta.5.2 + lowercase-keys: ^2.0.0 + p-cancelable: ^2.0.0 + responselike: ^2.0.0 + checksum: bbc783578a8d5030c8164ef7f57ce41b5ad7db2ed13371e1944bef157eeca5a7475530e07c0aaa71610d7085474d0d96222c9f4268d41db333a17e39b463f45d + languageName: node + linkType: hard + "graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.1.9, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": version: 4.2.10 resolution: "graceful-fs@npm:4.2.10" @@ -7899,6 +8565,15 @@ __metadata: languageName: node linkType: hard +"gridfs-stream@npm:^1.1.1": + version: 1.1.1 + resolution: "gridfs-stream@npm:1.1.1" + dependencies: + flushwritable: ^1.0.0 + checksum: 3a6cc6ad3eef37ca5adeb8dae531729a97322ca1955ebb39e92ef937e4bfa7b1e65bce47d1179bd31a0eda1b8612f1b88075f72daf646e02ec9f3b3bed1c5946 + languageName: node + linkType: hard + "growl@npm:1.10.5": version: 1.10.5 resolution: "growl@npm:1.10.5" @@ -8168,6 +8843,13 @@ __metadata: languageName: node linkType: hard +"helmet@npm:^6.0.0": + version: 6.2.0 + resolution: "helmet@npm:6.2.0" + checksum: cf01e024244205bd10d70fd2f3874244b72ba37a10a4604e4383bbd63fe1438ee24bae7672c4ee5c5e16e6cd88ac58003274034fab0ba199761471555a322b37 + languageName: node + linkType: hard + "hey-listen@npm:^1.0.8": version: 1.0.8 resolution: "hey-listen@npm:1.0.8" @@ -8198,6 +8880,13 @@ __metadata: languageName: node linkType: hard +"http-cache-semantics@npm:^4.0.0": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 + languageName: node + linkType: hard + "http-cache-semantics@npm:^4.1.0": version: 4.1.0 resolution: "http-cache-semantics@npm:4.1.0" @@ -8256,6 +8945,16 @@ __metadata: languageName: node linkType: hard +"http2-wrapper@npm:^1.0.0-beta.5.2": + version: 1.0.3 + resolution: "http2-wrapper@npm:1.0.3" + dependencies: + quick-lru: ^5.1.1 + resolve-alpn: ^1.0.0 + checksum: 74160b862ec699e3f859739101ff592d52ce1cb207b7950295bf7962e4aa1597ef709b4292c673bece9c9b300efad0559fc86c71b1409c7a1e02b7229456003e + languageName: node + linkType: hard + "https-proxy-agent@npm:^5.0.0": version: 5.0.1 resolution: "https-proxy-agent@npm:5.0.1" @@ -8435,6 +9134,13 @@ __metadata: languageName: node linkType: hard +"ipaddr.js@npm:1.9.1": + version: 1.9.1 + resolution: "ipaddr.js@npm:1.9.1" + checksum: f88d3825981486f5a1942414c8d77dd6674dd71c065adcfa46f578d677edcb99fda25af42675cb59db492fdf427b34a5abfcde3982da11a8fd83a500b41cfe77 + languageName: node + linkType: hard + "is-arguments@npm:^1.0.4": version: 1.1.1 resolution: "is-arguments@npm:1.1.1" @@ -8889,6 +9595,13 @@ __metadata: languageName: node linkType: hard +"json-buffer@npm:3.0.1": + version: 3.0.1 + resolution: "json-buffer@npm:3.0.1" + checksum: 9026b03edc2847eefa2e37646c579300a1f3a4586cfb62bf857832b60c852042d0d6ae55d1afb8926163fa54c2b01d83ae24705f34990348bdac6273a29d4581 + languageName: node + linkType: hard + "json-rpc-engine@npm:6.1.0, json-rpc-engine@npm:^6.1.0": version: 6.1.0 resolution: "json-rpc-engine@npm:6.1.0" @@ -9013,6 +9726,24 @@ __metadata: languageName: node linkType: hard +"jsonwebtoken@npm:^8.5.1": + version: 8.5.1 + resolution: "jsonwebtoken@npm:8.5.1" + 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 + checksum: 93c9e3f23c59b758ac88ba15f4e4753b3749dfce7a6f7c40fb86663128a1e282db085eec852d4e0cbca4cefdcd3a8275ee255dbd08fcad0df26ad9f6e4cc853a + languageName: node + linkType: hard + "jsprim@npm:^1.2.2": version: 1.4.2 resolution: "jsprim@npm:1.4.2" @@ -9025,6 +9756,13 @@ __metadata: languageName: node linkType: hard +"jsqr-es6@npm:^1.4.0-1": + version: 1.4.0-1 + resolution: "jsqr-es6@npm:1.4.0-1" + checksum: efabfb35c3c7fc55a2ac7d5a7d251739f6c9c11d8db163b73539824060ced521f462272da231fe871e64133fadb33132e09e56126fa20680dd3901c5b30856e7 + languageName: node + linkType: hard + "jsx-ast-utils@npm:^2.4.1 || ^3.0.0, jsx-ast-utils@npm:^3.3.2": version: 3.3.3 resolution: "jsx-ast-utils@npm:3.3.3" @@ -9035,6 +9773,34 @@ __metadata: languageName: node linkType: hard +"jwa@npm:^1.4.1": + version: 1.4.1 + resolution: "jwa@npm:1.4.1" + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: ^5.0.1 + checksum: ff30ea7c2dcc61f3ed2098d868bf89d43701605090c5b21b5544b512843ec6fd9e028381a4dda466cbcdb885c2d1150f7c62e7168394ee07941b4098e1035e2f + languageName: node + linkType: hard + +"jws@npm:^3.2.2": + version: 3.2.2 + resolution: "jws@npm:3.2.2" + dependencies: + jwa: ^1.4.1 + safe-buffer: ^5.0.1 + checksum: f0213fe5b79344c56cd443428d8f65c16bf842dc8cb8f5aed693e1e91d79c20741663ad6eff07a6d2c433d1831acc9814e8d7bada6a0471fbb91d09ceb2bf5c2 + languageName: node + linkType: hard + +"kareem@npm:2.5.1": + version: 2.5.1 + resolution: "kareem@npm:2.5.1" + checksum: b019a960a7b9e44b6ef224ef85e7583d4e969619f53319e571677fbed7e57e01ee8774589726b29741e42790996567d878003c18e674296742dc343bfbf3efb9 + languageName: node + linkType: hard + "keccak@npm:^3.0.0, keccak@npm:^3.0.1, keccak@npm:^3.0.2": version: 3.0.2 resolution: "keccak@npm:3.0.2" @@ -9047,6 +9813,15 @@ __metadata: languageName: node linkType: hard +"keyv@npm:^4.0.0": + version: 4.5.4 + resolution: "keyv@npm:4.5.4" + dependencies: + json-buffer: 3.0.1 + checksum: 74a24395b1c34bd44ad5cb2b49140d087553e170625240b86755a6604cd65aa16efdbdeae5cdb17ba1284a0fbb25ad06263755dbc71b8d8b06f74232ce3cdd72 + languageName: node + linkType: hard + "keyvaluestorage-interface@npm:^1.0.0": version: 1.0.0 resolution: "keyvaluestorage-interface@npm:1.0.0" @@ -9284,6 +10059,20 @@ __metadata: languageName: node linkType: hard +"lodash.includes@npm:^4.3.0": + version: 4.3.0 + resolution: "lodash.includes@npm:4.3.0" + checksum: 71092c130515a67ab3bd928f57f6018434797c94def7f46aafa417771e455ce3a4834889f4267b17887d7f75297dfabd96231bf704fd2b8c5096dc4a913568b6 + languageName: node + linkType: hard + +"lodash.isboolean@npm:^3.0.3": + version: 3.0.3 + resolution: "lodash.isboolean@npm:3.0.3" + checksum: b70068b4a8b8837912b54052557b21fc4774174e3512ed3c5b94621e5aff5eb6c68089d0a386b7e801d679cd105d2e35417978a5e99071750aa2ed90bffd0250 + languageName: node + linkType: hard + "lodash.isequal@npm:4.5.0": version: 4.5.0 resolution: "lodash.isequal@npm:4.5.0" @@ -9291,6 +10080,34 @@ __metadata: languageName: node linkType: hard +"lodash.isinteger@npm:^4.0.4": + version: 4.0.4 + resolution: "lodash.isinteger@npm:4.0.4" + checksum: 6034821b3fc61a2ffc34e7d5644bb50c5fd8f1c0121c554c21ac271911ee0c0502274852845005f8651d51e199ee2e0cfebfe40aaa49c7fe617f603a8a0b1691 + languageName: node + linkType: hard + +"lodash.isnumber@npm:^3.0.3": + version: 3.0.3 + resolution: "lodash.isnumber@npm:3.0.3" + checksum: 913784275b565346255e6ae6a6e30b760a0da70abc29f3e1f409081585875105138cda4a429ff02577e1bc0a7ae2a90e0a3079a37f3a04c3d6c5aaa532f4cab2 + languageName: node + linkType: hard + +"lodash.isplainobject@npm:^4.0.6": + version: 4.0.6 + resolution: "lodash.isplainobject@npm:4.0.6" + checksum: 29c6351f281e0d9a1d58f1a4c8f4400924b4c79f18dfc4613624d7d54784df07efaff97c1ff2659f3e085ecf4fff493300adc4837553104cef2634110b0d5337 + languageName: node + linkType: hard + +"lodash.isstring@npm:^4.0.1": + version: 4.0.1 + resolution: "lodash.isstring@npm:4.0.1" + checksum: eaac87ae9636848af08021083d796e2eea3d02e80082ab8a9955309569cb3a463ce97fd281d7dc119e402b2e7d8c54a23914b15d2fc7fff56461511dc8937ba0 + languageName: node + linkType: hard + "lodash.merge@npm:^4.6.2": version: 4.6.2 resolution: "lodash.merge@npm:4.6.2" @@ -9298,6 +10115,13 @@ __metadata: languageName: node linkType: hard +"lodash.once@npm:^4.0.0": + version: 4.1.1 + resolution: "lodash.once@npm:4.1.1" + checksum: d768fa9f9b4e1dc6453be99b753906f58990e0c45e7b2ca5a3b40a33111e5d17f6edf2f768786e2716af90a8e78f8f91431ab8435f761fef00f9b0c256f6d245 + languageName: node + linkType: hard + "lodash.truncate@npm:^4.4.2": version: 4.4.2 resolution: "lodash.truncate@npm:4.4.2" @@ -9363,6 +10187,13 @@ __metadata: languageName: node linkType: hard +"lowercase-keys@npm:^2.0.0": + version: 2.0.0 + resolution: "lowercase-keys@npm:2.0.0" + checksum: 24d7ebd56ccdf15ff529ca9e08863f3c54b0b9d1edb97a3ae1af34940ae666c01a1e6d200707bce730a8ef76cb57cc10e65f245ecaaf7e6bc8639f2fb460ac23 + languageName: node + linkType: hard + "lru-cache@npm:^5.1.1": version: 5.1.1 resolution: "lru-cache@npm:5.1.1" @@ -9476,6 +10307,13 @@ __metadata: languageName: node linkType: hard +"media-typer@npm:0.3.0": + version: 0.3.0 + resolution: "media-typer@npm:0.3.0" + checksum: af1b38516c28ec95d6b0826f6c8f276c58aec391f76be42aa07646b4e39d317723e869700933ca6995b056db4b09a78c92d5440dc23657e6764be5d28874bba1 + languageName: node + linkType: hard + "memory-level@npm:^1.0.0": version: 1.0.0 resolution: "memory-level@npm:1.0.0" @@ -9487,6 +10325,13 @@ __metadata: languageName: node linkType: hard +"memory-pager@npm:^1.0.2": + version: 1.5.0 + resolution: "memory-pager@npm:1.5.0" + checksum: d1a2e684583ef55c61cd3a49101da645b11ad57014dfc565e0b43baa9004b743f7e4ab81493d8fff2ab24e9950987cc3209c94bcc4fc8d7e30a475489a1f15e9 + languageName: node + linkType: hard + "memorystream@npm:^0.3.1": version: 0.3.1 resolution: "memorystream@npm:0.3.1" @@ -9494,6 +10339,13 @@ __metadata: languageName: node linkType: hard +"merge-descriptors@npm:1.0.1": + version: 1.0.1 + resolution: "merge-descriptors@npm:1.0.1" + checksum: 5abc259d2ae25bb06d19ce2b94a21632583c74e2a9109ee1ba7fd147aa7362b380d971e0251069f8b3eb7d48c21ac839e21fa177b335e82c76ec172e30c31a26 + languageName: node + linkType: hard + "merge-stream@npm:^2.0.0": version: 2.0.0 resolution: "merge-stream@npm:2.0.0" @@ -9508,6 +10360,13 @@ __metadata: languageName: node linkType: hard +"methods@npm:~1.1.2": + version: 1.1.2 + resolution: "methods@npm:1.1.2" + checksum: 0917ff4041fa8e2f2fda5425a955fe16ca411591fbd123c0d722fcf02b73971ed6f764d85f0a6f547ce49ee0221ce2c19a5fa692157931cecb422984f1dcd13a + languageName: node + linkType: hard + "micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.5": version: 4.0.5 resolution: "micromatch@npm:4.0.5" @@ -9525,7 +10384,7 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:^2.1.12, mime-types@npm:~2.1.19": +"mime-types@npm:^2.1.12, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -9534,6 +10393,15 @@ __metadata: languageName: node linkType: hard +"mime@npm:1.6.0": + version: 1.6.0 + resolution: "mime@npm:1.6.0" + bin: + mime: cli.js + checksum: fef25e39263e6d207580bdc629f8872a3f9772c923c7f8c7e793175cee22777bbe8bba95e5d509a40aaa292d8974514ce634ae35769faa45f22d17edda5e8557 + languageName: node + linkType: hard + "mimic-fn@npm:^2.1.0": version: 2.1.0 resolution: "mimic-fn@npm:2.1.0" @@ -9548,6 +10416,20 @@ __metadata: languageName: node linkType: hard +"mimic-response@npm:^1.0.0": + version: 1.0.1 + resolution: "mimic-response@npm:1.0.1" + checksum: 034c78753b0e622bc03c983663b1cdf66d03861050e0c8606563d149bc2b02d63f62ce4d32be4ab50d0553ae0ffe647fc34d1f5281184c6e1e8cf4d85e8d9823 + languageName: node + linkType: hard + +"mimic-response@npm:^3.1.0": + version: 3.1.0 + resolution: "mimic-response@npm:3.1.0" + checksum: 25739fee32c17f433626bf19f016df9036b75b3d84a3046c7d156e72ec963dd29d7fc8a302f55a3d6c5a4ff24259676b15d915aad6480815a969ff2ec0836867 + languageName: node + linkType: hard + "minimalistic-assert@npm:^1.0.0, minimalistic-assert@npm:^1.0.1": version: 1.0.1 resolution: "minimalistic-assert@npm:1.0.1" @@ -9832,6 +10714,76 @@ __metadata: languageName: node linkType: hard +"mongodb-connection-string-url@npm:^2.6.0": + version: 2.6.0 + resolution: "mongodb-connection-string-url@npm:2.6.0" + dependencies: + "@types/whatwg-url": ^8.2.1 + whatwg-url: ^11.0.0 + checksum: 1d662f0ecfe96f7a400f625c244b2e52914c98f3562ee7d19941127578b5f8237624433bdcea285a654041b945b518803512989690c74548aec5860c5541c605 + languageName: node + linkType: hard + +"mongodb@npm:5.9.0": + version: 5.9.0 + resolution: "mongodb@npm:5.9.0" + dependencies: + "@mongodb-js/saslprep": ^1.1.0 + bson: ^5.5.0 + mongodb-connection-string-url: ^2.6.0 + socks: ^2.7.1 + peerDependencies: + "@aws-sdk/credential-providers": ^3.188.0 + "@mongodb-js/zstd": ^1.0.0 + kerberos: ^1.0.0 || ^2.0.0 + mongodb-client-encryption: ">=2.3.0 <3" + snappy: ^7.2.2 + dependenciesMeta: + "@mongodb-js/saslprep": + optional: true + peerDependenciesMeta: + "@aws-sdk/credential-providers": + optional: true + "@mongodb-js/zstd": + optional: true + kerberos: + optional: true + mongodb-client-encryption: + optional: true + snappy: + optional: true + checksum: 5fb828d6503b7291c0bcc984ed35bdd0e2f166cd9d637a5ff9e8c2e497ef6260eea5a3f700f2850200cd8108057c858f96e37394ed2953aff3b85fe760bbd777 + languageName: node + linkType: hard + +"mongoose@npm:^7.6.0": + version: 7.6.0 + resolution: "mongoose@npm:7.6.0" + dependencies: + bson: ^5.4.0 + kareem: 2.5.1 + mongodb: 5.9.0 + mpath: 0.9.0 + mquery: 5.0.0 + ms: 2.1.3 + sift: 16.0.1 + checksum: 5178fdc1c8ec5158bdeb16a100c8a47a1866276b7ac4406ca5d3c0bf4fbf3e27fd5e69b86e0bf5cb8bbeca40a119fff4d4bb1852f0bf18292949493e43cbb8d5 + languageName: node + linkType: hard + +"morgan@npm:^1.10.0": + version: 1.10.0 + resolution: "morgan@npm:1.10.0" + dependencies: + basic-auth: ~2.0.1 + debug: 2.6.9 + depd: ~2.0.0 + on-finished: ~2.3.0 + on-headers: ~1.0.2 + checksum: fb41e226ab5a1abf7e8909e486b387076534716d60207e361acfb5df78b84d703a7b7ea58f3046a9fd0b83d3c94bfabde32323341a1f1b26ce50680abd2ea5dd + languageName: node + linkType: hard + "motion@npm:10.16.2": version: 10.16.2 resolution: "motion@npm:10.16.2" @@ -9846,6 +10798,22 @@ __metadata: languageName: node linkType: hard +"mpath@npm:0.9.0": + version: 0.9.0 + resolution: "mpath@npm:0.9.0" + checksum: 1052f1f926db04502440f76164ae16ed53aa41f3ce34e7e64e3ed451b7d91ede295c3b600801c5f9eb862f03d9d59b7aa5aaf690c341fc521bef025d0f5cd773 + languageName: node + linkType: hard + +"mquery@npm:5.0.0": + version: 5.0.0 + resolution: "mquery@npm:5.0.0" + dependencies: + debug: 4.x + checksum: 0617ead71e40e3c38ab74a1e46214d578d654bf7916abd8b3fb2ceb433bb6287adfa0960f041f16e2ac41c5ed5d7ce2268582f0a0075fff2561bcd5a3f40b417 + languageName: node + linkType: hard + "mri@npm:1.2.0": version: 1.2.0 resolution: "mri@npm:1.2.0" @@ -9960,7 +10928,7 @@ __metadata: languageName: node linkType: hard -"negotiator@npm:^0.6.3": +"negotiator@npm:0.6.3, negotiator@npm:^0.6.3": version: 0.6.3 resolution: "negotiator@npm:0.6.3" checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 @@ -9974,47 +10942,36 @@ __metadata: languageName: node linkType: hard -"next@npm:^13.1.6": - version: 13.1.6 - resolution: "next@npm:13.1.6" - dependencies: - "@next/env": 13.1.6 - "@next/swc-android-arm-eabi": 13.1.6 - "@next/swc-android-arm64": 13.1.6 - "@next/swc-darwin-arm64": 13.1.6 - "@next/swc-darwin-x64": 13.1.6 - "@next/swc-freebsd-x64": 13.1.6 - "@next/swc-linux-arm-gnueabihf": 13.1.6 - "@next/swc-linux-arm64-gnu": 13.1.6 - "@next/swc-linux-arm64-musl": 13.1.6 - "@next/swc-linux-x64-gnu": 13.1.6 - "@next/swc-linux-x64-musl": 13.1.6 - "@next/swc-win32-arm64-msvc": 13.1.6 - "@next/swc-win32-ia32-msvc": 13.1.6 - "@next/swc-win32-x64-msvc": 13.1.6 - "@swc/helpers": 0.4.14 +"next@npm:^13.5.4": + version: 13.5.6 + resolution: "next@npm:13.5.6" + dependencies: + "@next/env": 13.5.6 + "@next/swc-darwin-arm64": 13.5.6 + "@next/swc-darwin-x64": 13.5.6 + "@next/swc-linux-arm64-gnu": 13.5.6 + "@next/swc-linux-arm64-musl": 13.5.6 + "@next/swc-linux-x64-gnu": 13.5.6 + "@next/swc-linux-x64-musl": 13.5.6 + "@next/swc-win32-arm64-msvc": 13.5.6 + "@next/swc-win32-ia32-msvc": 13.5.6 + "@next/swc-win32-x64-msvc": 13.5.6 + "@swc/helpers": 0.5.2 + busboy: 1.6.0 caniuse-lite: ^1.0.30001406 - postcss: 8.4.14 + postcss: 8.4.31 styled-jsx: 5.1.1 + watchpack: 2.4.0 peerDependencies: - fibers: ">= 3.1.0" - node-sass: ^6.0.0 || ^7.0.0 + "@opentelemetry/api": ^1.1.0 react: ^18.2.0 react-dom: ^18.2.0 sass: ^1.3.0 dependenciesMeta: - "@next/swc-android-arm-eabi": - optional: true - "@next/swc-android-arm64": - optional: true "@next/swc-darwin-arm64": optional: true "@next/swc-darwin-x64": optional: true - "@next/swc-freebsd-x64": - optional: true - "@next/swc-linux-arm-gnueabihf": - optional: true "@next/swc-linux-arm64-gnu": optional: true "@next/swc-linux-arm64-musl": @@ -10030,15 +10987,13 @@ __metadata: "@next/swc-win32-x64-msvc": optional: true peerDependenciesMeta: - fibers: - optional: true - node-sass: + "@opentelemetry/api": optional: true sass: optional: true bin: next: dist/bin/next - checksum: 584977e382bd826c21e7fc5f67bca50e4d95741a854b1686394d45331404479c7266569671227421975fc18e5cf70769a4ad7edede7450d4497213205bba77c8 + checksum: c869b0014ae921ada3bf22301985027ec320aebcd6aa9c16e8afbded68bb8def5874cca034c680e8c351a79578f1e514971d02777f6f0a5a1d7290f25970ac0d languageName: node linkType: hard @@ -10065,6 +11020,15 @@ __metadata: languageName: node linkType: hard +"node-addon-api@npm:^5.0.0": + version: 5.1.0 + resolution: "node-addon-api@npm:5.1.0" + dependencies: + node-gyp: latest + checksum: 2508bd2d2981945406243a7bd31362fc7af8b70b8b4d65f869c61731800058fb818cc2fd36c8eac714ddd0e568cc85becf5e165cebbdf7b5024d5151bbc75ea1 + languageName: node + linkType: hard + "node-emoji@npm:^1.10.0": version: 1.11.0 resolution: "node-emoji@npm:1.11.0" @@ -10218,6 +11182,13 @@ __metadata: languageName: node linkType: hard +"normalize-url@npm:^6.0.1": + version: 6.1.0 + resolution: "normalize-url@npm:6.1.0" + checksum: 4a4944631173e7d521d6b80e4c85ccaeceb2870f315584fa30121f505a6dfd86439c5e3fdd8cd9e0e291290c41d0c3599f0cb12ab356722ed242584c30348e50 + languageName: node + linkType: hard + "npm-run-path@npm:^5.1.0": version: 5.1.0 resolution: "npm-run-path@npm:5.1.0" @@ -10275,7 +11246,7 @@ __metadata: languageName: node linkType: hard -"object-assign@npm:^4.0.1, object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": +"object-assign@npm:^4, object-assign@npm:^4.0.1, object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f @@ -10396,6 +11367,31 @@ __metadata: languageName: node linkType: hard +"on-finished@npm:2.4.1": + version: 2.4.1 + resolution: "on-finished@npm:2.4.1" + dependencies: + ee-first: 1.1.1 + checksum: d20929a25e7f0bb62f937a425b5edeb4e4cde0540d77ba146ec9357f00b0d497cdb3b9b05b9c8e46222407d1548d08166bff69cc56dfa55ba0e4469228920ff0 + languageName: node + linkType: hard + +"on-finished@npm:~2.3.0": + version: 2.3.0 + resolution: "on-finished@npm:2.3.0" + dependencies: + ee-first: 1.1.1 + checksum: 1db595bd963b0124d6fa261d18320422407b8f01dc65863840f3ddaaf7bcad5b28ff6847286703ca53f4ec19595bd67a2f1253db79fc4094911ec6aa8df1671b + languageName: node + linkType: hard + +"on-headers@npm:~1.0.2": + version: 1.0.2 + resolution: "on-headers@npm:1.0.2" + checksum: 2bf13467215d1e540a62a75021e8b318a6cfc5d4fc53af8e8f84ad98dbcea02d506c6d24180cd62e1d769c44721ba542f3154effc1f7579a8288c9f7873ed8e5 + languageName: node + linkType: hard + "once@npm:1.x, once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": version: 1.4.0 resolution: "once@npm:1.4.0" @@ -10483,6 +11479,13 @@ __metadata: languageName: node linkType: hard +"p-cancelable@npm:^2.0.0": + version: 2.1.1 + resolution: "p-cancelable@npm:2.1.1" + checksum: 3dba12b4fb4a1e3e34524535c7858fc82381bbbd0f247cc32dedc4018592a3950ce66b106d0880b4ec4c2d8d6576f98ca885dc1d7d0f274d1370be20e9523ddf + languageName: node + linkType: hard + "p-limit@npm:^1.1.0": version: 1.3.0 resolution: "p-limit@npm:1.3.0" @@ -10592,6 +11595,13 @@ __metadata: languageName: node linkType: hard +"parseurl@npm:~1.3.3": + version: 1.3.3 + resolution: "parseurl@npm:1.3.3" + checksum: 407cee8e0a3a4c5cd472559bca8b6a45b82c124e9a4703302326e9ab60fc1081442ada4e02628efef1eb16197ddc7f8822f5a91fd7d7c86b51f530aedb17dfa2 + languageName: node + linkType: hard + "path-browserify@npm:^1.0.1": version: 1.0.1 resolution: "path-browserify@npm:1.0.1" @@ -10641,6 +11651,13 @@ __metadata: languageName: node linkType: hard +"path-to-regexp@npm:0.1.7": + version: 0.1.7 + resolution: "path-to-regexp@npm:0.1.7" + checksum: 69a14ea24db543e8b0f4353305c5eac6907917031340e5a8b37df688e52accd09e3cebfe1660b70d76b6bd89152f52183f28c74813dbf454ba1a01c82a38abce + languageName: node + linkType: hard + "path-to-regexp@npm:6.1.0": version: 6.1.0 resolution: "path-to-regexp@npm:6.1.0" @@ -10918,14 +11935,14 @@ __metadata: languageName: node linkType: hard -"postcss@npm:8.4.14": - version: 8.4.14 - resolution: "postcss@npm:8.4.14" +"postcss@npm:8.4.31": + version: 8.4.31 + resolution: "postcss@npm:8.4.31" dependencies: - nanoid: ^3.3.4 + nanoid: ^3.3.6 picocolors: ^1.0.0 source-map-js: ^1.0.2 - checksum: fe58766ff32e4becf65a7d57678995cfd239df6deed2fe0557f038b47c94e4132e7e5f68b5aa820c13adfec32e523b693efaeb65798efb995ce49ccd83953816 + checksum: 1d8611341b073143ad90486fcdfeab49edd243377b1f51834dc4f6d028e82ce5190e4f11bb2633276864503654fb7cab28e67abdc0fbf9d1f88cad4a0ff0beea languageName: node linkType: hard @@ -11062,7 +12079,7 @@ __metadata: languageName: node linkType: hard -"prop-types@npm:^15.8.1": +"prop-types@npm:^15.7.2, prop-types@npm:^15.8.1": version: 15.8.1 resolution: "prop-types@npm:15.8.1" dependencies: @@ -11073,6 +12090,16 @@ __metadata: languageName: node linkType: hard +"proxy-addr@npm:~2.0.7": + version: 2.0.7 + resolution: "proxy-addr@npm:2.0.7" + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + checksum: 29c6990ce9364648255454842f06f8c46fcd124d3e6d7c5066df44662de63cdc0bad032e9bf5a3d653ff72141cc7b6019873d685708ac8210c30458ad99f2b74 + languageName: node + linkType: hard + "proxy-compare@npm:2.5.1": version: 2.5.1 resolution: "proxy-compare@npm:2.5.1" @@ -11172,7 +12199,7 @@ __metadata: languageName: node linkType: hard -"qs@npm:^6.10.3, qs@npm:^6.4.0, qs@npm:^6.9.4": +"qs@npm:6.11.0, qs@npm:^6.10.3, qs@npm:^6.4.0, qs@npm:^6.9.4": version: 6.11.0 resolution: "qs@npm:6.11.0" dependencies: @@ -11242,7 +12269,14 @@ __metadata: languageName: node linkType: hard -"raw-body@npm:^2.4.1": +"range-parser@npm:~1.2.1": + version: 1.2.1 + resolution: "range-parser@npm:1.2.1" + checksum: 0a268d4fea508661cf5743dfe3d5f47ce214fd6b7dec1de0da4d669dd4ef3d2144468ebe4179049eff253d9d27e719c88dae55be64f954e80135a0cada804ec9 + languageName: node + linkType: hard + +"raw-body@npm:2.5.1, raw-body@npm:^2.4.1": version: 2.5.1 resolution: "raw-body@npm:2.5.1" dependencies: @@ -11254,6 +12288,18 @@ __metadata: languageName: node linkType: hard +"raw-body@npm:2.5.2": + version: 2.5.2 + resolution: "raw-body@npm:2.5.2" + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + checksum: ba1583c8d8a48e8fbb7a873fdbb2df66ea4ff83775421bfe21ee120140949ab048200668c47d9ae3880012f6e217052690628cf679ddfbd82c9fc9358d574676 + languageName: node + linkType: hard + "react-copy-to-clipboard@npm:^5.1.0": version: 5.1.0 resolution: "react-copy-to-clipboard@npm:5.1.0" @@ -11307,6 +12353,19 @@ __metadata: languageName: node linkType: hard +"react-qr-reader-es6@npm:^2.2.1-2": + version: 2.2.1-2 + resolution: "react-qr-reader-es6@npm:2.2.1-2" + dependencies: + jsqr-es6: ^1.4.0-1 + prop-types: ^15.7.2 + peerDependencies: + react: ">=16" + react-dom: ">=16" + checksum: 263483679736204532ede1ab0a7aff21311fd92113ccbd97fb29c5cf3eef0c40b8e2b69a9ba946df8f8a0aa936a0309fe59ddc6849710a213ba8dd24f4d28658 + languageName: node + linkType: hard + "react-remove-scroll-bar@npm:^2.3.3": version: 2.3.3 resolution: "react-remove-scroll-bar@npm:2.3.3" @@ -11607,6 +12666,13 @@ __metadata: languageName: node linkType: hard +"resolve-alpn@npm:^1.0.0": + version: 1.2.1 + resolution: "resolve-alpn@npm:1.2.1" + checksum: f558071fcb2c60b04054c99aebd572a2af97ef64128d59bef7ab73bd50d896a222a056de40ffc545b633d99b304c259ea9d0c06830d5c867c34f0bfa60b8eae0 + languageName: node + linkType: hard + "resolve-from@npm:^3.0.0": version: 3.0.0 resolution: "resolve-from@npm:3.0.0" @@ -11738,6 +12804,15 @@ __metadata: languageName: node linkType: hard +"responselike@npm:^2.0.0": + version: 2.0.1 + resolution: "responselike@npm:2.0.1" + dependencies: + lowercase-keys: ^2.0.0 + checksum: b122535466e9c97b55e69c7f18e2be0ce3823c5d47ee8de0d9c0b114aa55741c6db8bfbfce3766a94d1272e61bfb1ebf0a15e9310ac5629fbb7446a861b4fd3a + languageName: node + linkType: hard + "restore-cursor@npm:^3.1.0": version: 3.1.0 resolution: "restore-cursor@npm:3.1.0" @@ -11874,20 +12949,20 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.0, safe-buffer@npm:~5.2.0": - version: 5.2.1 - resolution: "safe-buffer@npm:5.2.1" - checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 - languageName: node - linkType: hard - -"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": +"safe-buffer@npm:5.1.2, safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": version: 5.1.2 resolution: "safe-buffer@npm:5.1.2" checksum: f2f1f7943ca44a594893a852894055cf619c1fbcb611237fc39e461ae751187e7baf4dc391a72125e0ac4fb2d8c5c0b3c71529622e6a58f46b960211e704903c languageName: node linkType: hard +"safe-buffer@npm:5.2.1, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.0, safe-buffer@npm:~5.2.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 + languageName: node + linkType: hard + "safe-json-utils@npm:^1.1.1": version: 1.1.1 resolution: "safe-json-utils@npm:1.1.1" @@ -12006,6 +13081,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:^5.6.0": + version: 5.7.2 + resolution: "semver@npm:5.7.2" + bin: + semver: bin/semver + checksum: fb4ab5e0dd1c22ce0c937ea390b4a822147a9c53dbd2a9a0132f12fe382902beef4fbf12cf51bb955248d8d15874ce8cd89532569756384f994309825f10b686 + languageName: node + linkType: hard + "semver@npm:^6.0.0, semver@npm:^6.3.0": version: 6.3.0 resolution: "semver@npm:6.3.0" @@ -12037,6 +13121,27 @@ __metadata: languageName: node linkType: hard +"send@npm:0.18.0": + version: 0.18.0 + resolution: "send@npm:0.18.0" + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: ~1.0.2 + escape-html: ~1.0.3 + etag: ~1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: ~1.2.1 + statuses: 2.0.1 + checksum: 74fc07ebb58566b87b078ec63e5a3e41ecd987e4272ba67b7467e86c6ad51bc6b0b0154133b6d8b08a2ddda360464f71382f7ef864700f34844a76c8027817a8 + languageName: node + linkType: hard + "serialize-javascript@npm:6.0.0": version: 6.0.0 resolution: "serialize-javascript@npm:6.0.0" @@ -12046,6 +13151,18 @@ __metadata: languageName: node linkType: hard +"serve-static@npm:1.15.0": + version: 1.15.0 + resolution: "serve-static@npm:1.15.0" + dependencies: + encodeurl: ~1.0.2 + escape-html: ~1.0.3 + parseurl: ~1.3.3 + send: 0.18.0 + checksum: af57fc13be40d90a12562e98c0b7855cf6e8bd4c107fe9a45c212bf023058d54a1871b1c89511c3958f70626fff47faeb795f5d83f8cf88514dbaeb2b724464d + languageName: node + linkType: hard + "set-blocking@npm:^2.0.0": version: 2.0.0 resolution: "set-blocking@npm:2.0.0" @@ -12136,6 +13253,13 @@ __metadata: languageName: node linkType: hard +"sift@npm:16.0.1": + version: 16.0.1 + resolution: "sift@npm:16.0.1" + checksum: 5fe18a517a20c35e0c05238797cc605094a6cb602b08c4661268c415b71a10f1a55ee4cc8728552e390e7cb4683a33bcbd68d7971eb44645cc6211e2f00dd233 + languageName: node + linkType: hard + "signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.7": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" @@ -12217,6 +13341,16 @@ __metadata: languageName: node linkType: hard +"socks@npm:^2.7.1": + version: 2.7.1 + resolution: "socks@npm:2.7.1" + dependencies: + ip: ^2.0.0 + smart-buffer: ^4.2.0 + checksum: 259d9e3e8e1c9809a7f5c32238c3d4d2a36b39b83851d0f573bfde5f21c4b1288417ce1af06af1452569cd1eb0841169afd4998f0e04ba04656f6b7f0e46d748 + languageName: node + linkType: hard + "solc@npm:0.7.3": version: 0.7.3 resolution: "solc@npm:0.7.3" @@ -12317,6 +13451,15 @@ __metadata: languageName: node linkType: hard +"sparse-bitfield@npm:^3.0.3": + version: 3.0.3 + resolution: "sparse-bitfield@npm:3.0.3" + dependencies: + memory-pager: ^1.0.2 + checksum: 174da88dbbcc783d5dbd26921931cc83830280b8055fb05333786ebe6fc015b9601b24972b3d55920dd2d9f5fb120576fbfa2469b08e5222c9cadf3f05210aab + languageName: node + linkType: hard + "split-ca@npm:^1.0.0, split-ca@npm:^1.0.1": version: 1.0.1 resolution: "split-ca@npm:1.0.1" @@ -13067,6 +14210,13 @@ __metadata: languageName: node linkType: hard +"to-utf8@npm:0.0.1": + version: 0.0.1 + resolution: "to-utf8@npm:0.0.1" + checksum: a47f526ef32a50137871181d2b4b043579445fb6edea0d435881a972c23fbc6e50b8d227a99d161494d47262345d73a24cfcaad46d7c7a021a11d24d1ad61238 + languageName: node + linkType: hard + "toformat@npm:^2.0.0": version: 2.0.0 resolution: "toformat@npm:2.0.0" @@ -13098,6 +14248,15 @@ __metadata: languageName: node linkType: hard +"tr46@npm:^3.0.0": + version: 3.0.0 + resolution: "tr46@npm:3.0.0" + dependencies: + punycode: ^2.1.1 + checksum: 44c3cc6767fb800490e6e9fd64fd49041aa4e49e1f6a012b34a75de739cc9ed3a6405296072c1df8b6389ae139c5e7c6496f659cfe13a04a4bff3a1422981270 + languageName: node + linkType: hard + "tr46@npm:~0.0.3": version: 0.0.3 resolution: "tr46@npm:0.0.3" @@ -13324,6 +14483,16 @@ __metadata: languageName: node linkType: hard +"type-is@npm:~1.6.18": + version: 1.6.18 + resolution: "type-is@npm:1.6.18" + dependencies: + media-typer: 0.3.0 + mime-types: ~2.1.24 + checksum: 2c8e47675d55f8b4e404bcf529abdf5036c537a04c2b20177bcf78c9e3c1da69da3942b1346e6edb09e823228c0ee656ef0e033765ec39a70d496ef601a0c657 + languageName: node + linkType: hard + "typechain@npm:^8.1.0": version: 8.1.0 resolution: "typechain@npm:8.1.0" @@ -13362,6 +14531,13 @@ __metadata: languageName: node linkType: hard +"types@npm:^0.1.1": + version: 0.1.1 + resolution: "types@npm:0.1.1" + checksum: 259d052f6a23e8ac2f8b11e83fb6d97d4314d5ec510f68e1d9ed9b9c8c93b6fb1a43467b5b44d450ae1014d1d445021da2562035cd377d2f2e627574dc77737f + languageName: node + linkType: hard + "typescript@npm:4.3.4": version: 4.3.4 resolution: "typescript@npm:4.3.4" @@ -13494,7 +14670,7 @@ __metadata: languageName: node linkType: hard -"unpipe@npm:1.0.0": +"unpipe@npm:1.0.0, unpipe@npm:~1.0.0": version: 1.0.0 resolution: "unpipe@npm:1.0.0" checksum: 4fa18d8d8d977c55cb09715385c203197105e10a6d220087ec819f50cb68870f02942244f1017565484237f1f8c5d3cd413631b1ae104d3096f24fdfde1b4aa2 @@ -13631,6 +14807,13 @@ __metadata: languageName: node linkType: hard +"utils-merge@npm:1.0.1": + version: 1.0.1 + resolution: "utils-merge@npm:1.0.1" + checksum: c81095493225ecfc28add49c106ca4f09cdf56bc66731aa8dabc2edbbccb1e1bfe2de6a115e5c6a380d3ea166d1636410b62ef216bb07b3feb1cfde1d95d5080 + languageName: node + linkType: hard + "uuid@npm:2.0.1": version: 2.0.1 resolution: "uuid@npm:2.0.1" @@ -13678,6 +14861,32 @@ __metadata: languageName: node linkType: hard +"valtio@npm:^1.12.0": + version: 1.12.0 + resolution: "valtio@npm:1.12.0" + dependencies: + derive-valtio: 0.1.0 + proxy-compare: 2.5.1 + use-sync-external-store: 1.2.0 + peerDependencies: + "@types/react": ">=16.8" + react: ">=16.8" + peerDependenciesMeta: + "@types/react": + optional: true + react: + optional: true + checksum: a6a49b0aa887e2f03a30fb3fcf8a220af130226caec8e10667153e2bbc12437c1d16e0f43bd6916192d76f328c1af4870cbd2b17e903d314d493d2416669d65b + languageName: node + linkType: hard + +"vary@npm:^1, vary@npm:~1.1.2": + version: 1.1.2 + resolution: "vary@npm:1.1.2" + checksum: ae0123222c6df65b437669d63dfa8c36cee20a504101b2fcd97b8bf76f91259c17f9f2b4d70a1e3c6bbcee7f51b28392833adb6b2770b23b01abec84e369660b + languageName: node + linkType: hard + "vercel@npm:^28.15.1": version: 28.15.1 resolution: "vercel@npm:28.15.1" @@ -13773,6 +14982,16 @@ __metadata: languageName: node linkType: hard +"watchpack@npm:2.4.0": + version: 2.4.0 + resolution: "watchpack@npm:2.4.0" + dependencies: + glob-to-regexp: ^0.4.1 + graceful-fs: ^4.1.2 + checksum: 23d4bc58634dbe13b86093e01c6a68d8096028b664ab7139d58f0c37d962d549a940e98f2f201cecdabd6f9c340338dc73ef8bf094a2249ef582f35183d1a131 + languageName: node + linkType: hard + "web-vitals@npm:0.2.4": version: 0.2.4 resolution: "web-vitals@npm:0.2.4" @@ -13802,6 +15021,23 @@ __metadata: languageName: node linkType: hard +"webidl-conversions@npm:^7.0.0": + version: 7.0.0 + resolution: "webidl-conversions@npm:7.0.0" + checksum: f05588567a2a76428515333eff87200fae6c83c3948a7482ebb109562971e77ef6dc49749afa58abb993391227c5697b3ecca52018793e0cb4620a48f10bd21b + languageName: node + linkType: hard + +"whatwg-url@npm:^11.0.0": + version: 11.0.0 + resolution: "whatwg-url@npm:11.0.0" + dependencies: + tr46: ^3.0.0 + webidl-conversions: ^7.0.0 + checksum: ed4826aaa57e66bb3488a4b25c9cd476c46ba96052747388b5801f137dd740b73fde91ad207d96baf9f17fbcc80fc1a477ad65181b5eb5fa718d27c69501d7af + languageName: node + linkType: hard + "whatwg-url@npm:^5.0.0": version: 5.0.0 resolution: "whatwg-url@npm:5.0.0" @@ -13987,6 +15223,15 @@ __metadata: languageName: node linkType: hard +"ws@npm:^5.1": + version: 5.2.3 + resolution: "ws@npm:5.2.3" + dependencies: + async-limiter: ~1.0.0 + checksum: bdb2223a40c2c68cf91b25a6c9b8c67d5275378ec6187f343314d3df7530e55b77cb9fe79fb1c6a9758389ac5aefc569d24236924b5c65c5dbbaff409ef739fc + languageName: node + linkType: hard + "ws@npm:^7.4.5, ws@npm:^7.4.6, ws@npm:^7.5.1": version: 7.5.9 resolution: "ws@npm:7.5.9"