diff --git a/Backend/Workspace/Routes/CreateRoom.js b/Backend/Workspace/Routes/CreateRoom.js new file mode 100644 index 00000000..064e4654 --- /dev/null +++ b/Backend/Workspace/Routes/CreateRoom.js @@ -0,0 +1,116 @@ +import express from 'express'; +import jwt from 'jsonwebtoken'; +import cookieParser from 'cookie-parser'; +import dotenv from 'dotenv'; +import path from 'path'; +import multer from 'multer'; +import fs from 'fs'; +import { fileURLToPath } from 'url'; +import { randomUUID } from "crypto"; + +// 注意1: Node.jsのESMでは、独自ファイルのimportに拡張子(.js)が必須です +import VCM from '../Tools/VCM.js'; +import DBPerf from '../Tools/DBPerf.js'; +import { decrypt } from '../Tools/AESControl.js'; +import { CreateMosaicTx } from '../Tools/CreateMosaicTx.js'; + +// 注意2: ESMでは __dirname がデフォルトで存在しないため、自作する必要があります +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +const router = express.Router(); + +// cookieを使う +router.use(cookieParser()); +dotenv.config({ path: path.join(__dirname, "..", ".env")}); +const upload = multer({ storage: multer.memoryStorage() }); + +// ===アイコン保存処理=== +function saveIcon(file, folder) { + const fileName = createFileName(file.originalname); + const dir = path.join(__dirname, "..", "icons", folder); + + // フォルダが存在しない場合は作成 + fs.mkdirSync(dir, { recursive: true }); + + // ファイルを保存 + const fullPath = path.join(dir, fileName); + fs.writeFileSync(fullPath, file.buffer); + + console.log(`Icon saved to ${fullPath}`); + + // DBに入れる用の「相対パス」 + return `/icons/${folder}/${fileName}`; +} + +// ===被らないファイル名を作成=== +function createFileName(originalName) { + //拡張子取り出し(extname: .pngなど) + const ext = path.extname(originalName); + const Refilename = `${randomUUID()}${ext}`; + console.log(`Generated unique filename: ${Refilename}`); + //タイムスタンプを付与して被らないようにする + return Refilename; +} + +// ===ルーム作成API=== +router.post("/", VCM('LOGIN_TOKEN', process.env.LOGIN_SECRET), upload.fields([{ name: "RoomIcon", maxCount: 1 },{ name: "MosaicIcon", maxCount: 1 }]), async (req, res) => { + try { + const userID = req.auth.userId; + const { RoomName, MosaicName, Password } = req.body; + console.log("Received CreateRoom request:", { userID, RoomName, MosaicName, Password }); + if (!userID || !RoomName || !MosaicName || !Password) { + console.log("Missing required fields in CreateRoom request"); + return res.status(400).json({ message: "UserID, RoomName, MosaicName, and Password are required" }); + } + + + if (!RoomName || !MosaicName || !req.files?.RoomIcon || !req.files?.MosaicIcon) { + return res.status(400).json({ message: "Bad Request" }); + } + + const OwnerInfor = await DBPerf( + "Get Encrypted Private Key","SELECT PrivateKey FROM Identify WHERE userID = ?",[userID] + ); + const encryptedPrivateKeyObj = JSON.parse(OwnerInfor[0].PrivateKey); + const privateKey = decrypt(Password + process.env.PEPPER, encryptedPrivateKeyObj); + + const { mosaicId, mosaicDefinitionTx, keyPair, facade } = CreateMosaicTx({ + networkType: 'testnet', + senderPrivateKey: privateKey, + transferable: false, + deadlineHours: 24 + }); + + const RoomIconPath = await saveIcon(req.files.RoomIcon[0], "rooms"); + console.log("RoomIcon saved at:", RoomIconPath); + const MosaicIconPath = await saveIcon(req.files.MosaicIcon[0], "tokens"); + console.log("MosaicIcon saved at:", MosaicIconPath); + + await DBPerf( + "INSERT Mosaic", + "INSERT INTO Mosaic (MosaicID, MosaicName) VALUES (?, ?)", + [mosaicId, MosaicName ] + ); + + await DBPerf( + "INSERT RoomDetails", + "INSERT INTO RoomDetails(RoomName, RoomIconPath, MosaicName) VALUES (?, ?, ?)", + [RoomName, RoomIconPath, MosaicName] + ); + + await DBPerf( + "INSERT Rooms", + "INSERT INTO Rooms(UserID, RoomName) VALUES (?, ?)",[userID, RoomName] + ); + + res.status(201).json({ message: "Room created successfully" }); + } catch (err) { + console.error("CreateRoom-API Error:", err); + res.status(500).json({ message: "Internal Server Error" }); + } + } +); + +// モジュールのエクスポート +export default router; \ No newline at end of file diff --git a/Backend/Workspace/Routes/Register.js b/Backend/Workspace/Routes/Register.js index 77c0f1d2..109e9e75 100644 --- a/Backend/Workspace/Routes/Register.js +++ b/Backend/Workspace/Routes/Register.js @@ -157,8 +157,11 @@ router.post( // ユーザーのパスワードから復号可能にする設計 const encryptedPrivateKey = - encrypt(passwordWithPepper, privateKeyString); - + JSON.stringify( + encrypt(passwordWithPepper, privateKeyString) + ); + console.log("暗号化された秘密鍵オブジェクト:", privateKeyString); + console.log("暗号化された秘密鍵:", encryptedPrivateKey); // ===================================================== // 4. パスワードをArgon2でハッシュ化 diff --git a/Backend/Workspace/Tools/CreateMosaicTx.js b/Backend/Workspace/Tools/CreateMosaicTx.js new file mode 100644 index 00000000..2bab14b6 --- /dev/null +++ b/Backend/Workspace/Tools/CreateMosaicTx.js @@ -0,0 +1,100 @@ +/*========== Manual ========== +# Input(obj) +networkType: mainnet or testnet +senderPrivateKey: 送り元の秘密鍵 +transferable: 発行者以外が送信できるかどうか(true or false) +deadlineHours: 有効期限[h] + +# Output +mosaicId: 発行したMosaicIDの16進数表現 +mosaicDefinitionTx: 実際のトランザクション +keyPair: 署名時に必要な秘密鍵/公開鍵 +facade: mainnet or testnetの指定をしているがそれが一貫性を保てるように引き継ぐ +========== Manual ==========*/ + +// CreateMosaicTx.js +import { PrivateKey } from 'symbol-sdk'; +import { SymbolFacade } from 'symbol-sdk/symbol'; +import { generateMosaicId } from 'symbol-sdk/symbol'; + +export function CreateMosaicTx({ + networkType = 'testnet', + senderPrivateKey, + transferable = true, + deadlineHours = 2 +}) { + // Startup Log + const logOwner = "CreateMosaicTx"; + console.log(`\n${logOwner}-Function is running!\n`); + console.log(`[${logOwner}] Input => networkType: ${networkType}, transferable: ${transferable}, deadlineHours: ${deadlineHours}`); + + if (!senderPrivateKey) { + throw new Error("senderPrivateKey is undefined"); + } + + console.log("senderPrivateKey:", senderPrivateKey); + console.log("type:", typeof senderPrivateKey); + console.log("length:", senderPrivateKey?.length); + + // Facade 初期化 + const facade = new SymbolFacade(networkType); + + // 秘密鍵 → KeyPair + const normalizedPrivateKey = senderPrivateKey.trim(); + const privateKeyObject = new PrivateKey(normalizedPrivateKey); + const keyPair = facade.createAccount(privateKeyObject); + + // Deadline 作成 + const deadline = facade.network + .fromDatetime(new Date()) + .addHours(Number(deadlineHours)) + .timestamp; + + console.log(`[${logOwner}] Intermediate => KeyPair created, Deadline calculated`); + + // 0〜2^32-1 のランダムnonce生成 + const nonce = Math.floor(Math.random() * 0xffffffff); + + console.log(`[${logOwner}] Intermediate => Nonce generated: ${nonce}`); + + // Mosaic定義トランザクション作成 + const mosaicDefinitionTx = facade.transactionFactory.create({ + type: 'mosaic_definition_transaction_v1', + signerPublicKey: keyPair.publicKey, + duration: 0, + nonce: nonce, + flags: { + supplyMutable: true, + transferable: transferable, + restrictable: false, + revocable: false, + }, + divisibility: 0, + deadline: deadline + }); + + console.log(`[${logOwner}] Intermediate => MosaicDefinitionTx created with type: ${mosaicDefinitionTx.type}`); + + + const ownerAddress = facade.network.publicKeyToAddress(keyPair.publicKey); + // MosaicID計算 + const mosaicIdBigInt = generateMosaicId(ownerAddress, nonce); + const mosaicIdHex = mosaicIdBigInt.toString(16).toUpperCase().padStart(16, '0'); + + console.log(`[${logOwner}] Output => + Type: ${mosaicDefinitionTx.type} + SupplyMutable: ${mosaicDefinitionTx.flags.supplyMutable} + Transferable: ${mosaicDefinitionTx.flags.transferable} + MosaicID: ${mosaicIdHex} + `); + + console.log(`[${logOwner}] Shutdown!`); + + return { + mosaicId: mosaicIdHex, + mosaicDefinitionTx, + keyPair, + facade + }; +} + diff --git a/Backend/node_modules/.bin/baseline-browser-mapping b/Backend/node_modules/.bin/baseline-browser-mapping index d2961883..1977474b 120000 --- a/Backend/node_modules/.bin/baseline-browser-mapping +++ b/Backend/node_modules/.bin/baseline-browser-mapping @@ -1 +1,16 @@ -../baseline-browser-mapping/dist/cli.js \ No newline at end of file +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) + if command -v cygpath > /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../baseline-browser-mapping/dist/cli.js" "$@" +else + exec node "$basedir/../baseline-browser-mapping/dist/cli.js" "$@" +fi diff --git a/Backend/node_modules/.bin/browserslist b/Backend/node_modules/.bin/browserslist index 3cd991b2..60e71ad8 120000 --- a/Backend/node_modules/.bin/browserslist +++ b/Backend/node_modules/.bin/browserslist @@ -1 +1,16 @@ -../browserslist/cli.js \ No newline at end of file +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) + if command -v cygpath > /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../browserslist/cli.js" "$@" +else + exec node "$basedir/../browserslist/cli.js" "$@" +fi diff --git a/Backend/node_modules/.bin/esparse b/Backend/node_modules/.bin/esparse index 7423b18b..601762ce 120000 --- a/Backend/node_modules/.bin/esparse +++ b/Backend/node_modules/.bin/esparse @@ -1 +1,16 @@ -../esprima/bin/esparse.js \ No newline at end of file +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) + if command -v cygpath > /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../esprima/bin/esparse.js" "$@" +else + exec node "$basedir/../esprima/bin/esparse.js" "$@" +fi diff --git a/Backend/node_modules/.bin/esvalidate b/Backend/node_modules/.bin/esvalidate index 16069eff..e2fee1f1 120000 --- a/Backend/node_modules/.bin/esvalidate +++ b/Backend/node_modules/.bin/esvalidate @@ -1 +1,16 @@ -../esprima/bin/esvalidate.js \ No newline at end of file +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) + if command -v cygpath > /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../esprima/bin/esvalidate.js" "$@" +else + exec node "$basedir/../esprima/bin/esvalidate.js" "$@" +fi diff --git a/Backend/node_modules/.bin/glob b/Backend/node_modules/.bin/glob index 85c9c1db..6fbc4bb8 120000 --- a/Backend/node_modules/.bin/glob +++ b/Backend/node_modules/.bin/glob @@ -1 +1,16 @@ -../glob/dist/esm/bin.mjs \ No newline at end of file +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) + if command -v cygpath > /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../glob/dist/esm/bin.mjs" "$@" +else + exec node "$basedir/../glob/dist/esm/bin.mjs" "$@" +fi diff --git a/Backend/node_modules/.bin/import-local-fixture b/Backend/node_modules/.bin/import-local-fixture index ff4b1048..3a654413 120000 --- a/Backend/node_modules/.bin/import-local-fixture +++ b/Backend/node_modules/.bin/import-local-fixture @@ -1 +1,16 @@ -../import-local/fixtures/cli.js \ No newline at end of file +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) + if command -v cygpath > /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../import-local/fixtures/cli.js" "$@" +else + exec node "$basedir/../import-local/fixtures/cli.js" "$@" +fi diff --git a/Backend/node_modules/.bin/jest b/Backend/node_modules/.bin/jest index 61c18615..61b6f565 120000 --- a/Backend/node_modules/.bin/jest +++ b/Backend/node_modules/.bin/jest @@ -1 +1,16 @@ -../jest/bin/jest.js \ No newline at end of file +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) + if command -v cygpath > /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../jest/bin/jest.js" "$@" +else + exec node "$basedir/../jest/bin/jest.js" "$@" +fi diff --git a/Backend/node_modules/.bin/js-yaml b/Backend/node_modules/.bin/js-yaml index 9dbd010d..82416ef1 120000 --- a/Backend/node_modules/.bin/js-yaml +++ b/Backend/node_modules/.bin/js-yaml @@ -1 +1,16 @@ -../js-yaml/bin/js-yaml.js \ No newline at end of file +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) + if command -v cygpath > /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../js-yaml/bin/js-yaml.js" "$@" +else + exec node "$basedir/../js-yaml/bin/js-yaml.js" "$@" +fi diff --git a/Backend/node_modules/.bin/jsesc b/Backend/node_modules/.bin/jsesc index 7237604c..879c4133 120000 --- a/Backend/node_modules/.bin/jsesc +++ b/Backend/node_modules/.bin/jsesc @@ -1 +1,16 @@ -../jsesc/bin/jsesc \ No newline at end of file +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) + if command -v cygpath > /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../jsesc/bin/jsesc" "$@" +else + exec node "$basedir/../jsesc/bin/jsesc" "$@" +fi diff --git a/Backend/node_modules/.bin/json5 b/Backend/node_modules/.bin/json5 index 217f3798..abf72a4e 120000 --- a/Backend/node_modules/.bin/json5 +++ b/Backend/node_modules/.bin/json5 @@ -1 +1,16 @@ -../json5/lib/cli.js \ No newline at end of file +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) + if command -v cygpath > /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../json5/lib/cli.js" "$@" +else + exec node "$basedir/../json5/lib/cli.js" "$@" +fi diff --git a/Backend/node_modules/.bin/mime b/Backend/node_modules/.bin/mime index fbb7ee0e..7751de3c 120000 --- a/Backend/node_modules/.bin/mime +++ b/Backend/node_modules/.bin/mime @@ -1 +1,16 @@ -../mime/cli.js \ No newline at end of file +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) + if command -v cygpath > /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../mime/cli.js" "$@" +else + exec node "$basedir/../mime/cli.js" "$@" +fi diff --git a/Backend/node_modules/.bin/napi-postinstall b/Backend/node_modules/.bin/napi-postinstall index 8407c964..985cc4c7 120000 --- a/Backend/node_modules/.bin/napi-postinstall +++ b/Backend/node_modules/.bin/napi-postinstall @@ -1 +1,16 @@ -../napi-postinstall/lib/cli.js \ No newline at end of file +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) + if command -v cygpath > /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../napi-postinstall/lib/cli.js" "$@" +else + exec node "$basedir/../napi-postinstall/lib/cli.js" "$@" +fi diff --git a/Backend/node_modules/.bin/node-which b/Backend/node_modules/.bin/node-which index 6f8415ec..b49b03f7 120000 --- a/Backend/node_modules/.bin/node-which +++ b/Backend/node_modules/.bin/node-which @@ -1 +1,16 @@ -../which/bin/node-which \ No newline at end of file +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) + if command -v cygpath > /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../which/bin/node-which" "$@" +else + exec node "$basedir/../which/bin/node-which" "$@" +fi diff --git a/Backend/node_modules/.bin/parser b/Backend/node_modules/.bin/parser index ce7bf97e..7696ad41 120000 --- a/Backend/node_modules/.bin/parser +++ b/Backend/node_modules/.bin/parser @@ -1 +1,16 @@ -../@babel/parser/bin/babel-parser.js \ No newline at end of file +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) + if command -v cygpath > /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../@babel/parser/bin/babel-parser.js" "$@" +else + exec node "$basedir/../@babel/parser/bin/babel-parser.js" "$@" +fi diff --git a/Backend/node_modules/.bin/semver b/Backend/node_modules/.bin/semver index 5aaadf42..97c53279 120000 --- a/Backend/node_modules/.bin/semver +++ b/Backend/node_modules/.bin/semver @@ -1 +1,16 @@ -../semver/bin/semver.js \ No newline at end of file +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) + if command -v cygpath > /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../semver/bin/semver.js" "$@" +else + exec node "$basedir/../semver/bin/semver.js" "$@" +fi diff --git a/Backend/node_modules/.bin/update-browserslist-db b/Backend/node_modules/.bin/update-browserslist-db index b11e16f3..cced63c4 120000 --- a/Backend/node_modules/.bin/update-browserslist-db +++ b/Backend/node_modules/.bin/update-browserslist-db @@ -1 +1,16 @@ -../update-browserslist-db/cli.js \ No newline at end of file +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) + if command -v cygpath > /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../update-browserslist-db/cli.js" "$@" +else + exec node "$basedir/../update-browserslist-db/cli.js" "$@" +fi diff --git a/Backend/node_modules/.package-lock.json b/Backend/node_modules/.package-lock.json index 59acf01c..9d5dd60e 100644 --- a/Backend/node_modules/.package-lock.json +++ b/Backend/node_modules/.package-lock.json @@ -35,6 +35,7 @@ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", @@ -1138,10 +1139,10 @@ "dev": true, "license": "ISC" }, - "node_modules/@unrs/resolver-binding-linux-x64-gnu": { + "node_modules/@unrs/resolver-binding-win32-x64-msvc": { "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", - "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", + "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", "cpu": [ "x64" ], @@ -1149,21 +1150,7 @@ "license": "MIT", "optional": true, "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-x64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", - "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" + "win32" ] }, "node_modules/accepts": { @@ -1238,6 +1225,12 @@ "node": ">= 8" } }, + "node_modules/append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==", + "license": "MIT" + }, "node_modules/argon2": { "version": "0.44.0", "resolved": "https://registry.npmjs.org/argon2/-/argon2-0.44.0.tgz", @@ -1556,6 +1549,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -1604,9 +1598,19 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true, "license": "MIT" }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -1899,6 +1903,35 @@ "dev": true, "license": "MIT" }, + "node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "engines": [ + "node >= 6.0" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/content-disposition": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", @@ -4178,6 +4211,15 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/minipass": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", @@ -4188,12 +4230,85 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, + "node_modules/multer": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/multer/-/multer-2.0.2.tgz", + "integrity": "sha512-u7f2xaZ/UG8oLXHvtF/oWTRvT44p9ecwBBqTwgJVq0+4BW1g8OW01TyMEGWBHbyMOYVHXslaut7qEQ1meATXgw==", + "license": "MIT", + "dependencies": { + "append-field": "^1.0.0", + "busboy": "^1.6.0", + "concat-stream": "^2.0.0", + "mkdirp": "^0.5.6", + "object-assign": "^4.1.1", + "type-is": "^1.6.18", + "xtend": "^4.0.2" + }, + "engines": { + "node": ">= 10.16.0" + } + }, + "node_modules/multer/node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/multer/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/multer/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/multer/node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/mysql2": { "version": "3.17.2", "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.17.2.tgz", @@ -4315,6 +4430,15 @@ "node": ">=8" } }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-inspect": { "version": "1.13.4", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", @@ -5058,6 +5182,14 @@ "node": ">= 0.8" } }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -5503,6 +5635,12 @@ "node": ">= 0.4" } }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "license": "MIT" + }, "node_modules/undici-types": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", @@ -5784,6 +5922,15 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", diff --git a/Backend/node_modules/@unrs/resolver-binding-linux-x64-gnu/README.md b/Backend/node_modules/@unrs/resolver-binding-linux-x64-gnu/README.md deleted file mode 100644 index 4051db30..00000000 --- a/Backend/node_modules/@unrs/resolver-binding-linux-x64-gnu/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# `@unrs/resolver-binding-linux-x64-gnu` - -This is the **x86_64-unknown-linux-gnu** binary for `@unrs/resolver-binding` diff --git a/Backend/node_modules/@unrs/resolver-binding-linux-x64-gnu/package.json b/Backend/node_modules/@unrs/resolver-binding-linux-x64-gnu/package.json deleted file mode 100644 index 61b8720d..00000000 --- a/Backend/node_modules/@unrs/resolver-binding-linux-x64-gnu/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "@unrs/resolver-binding-linux-x64-gnu", - "version": "1.11.1", - "cpu": [ - "x64" - ], - "main": "resolver.linux-x64-gnu.node", - "files": [ - "resolver.linux-x64-gnu.node" - ], - "description": "UnRS Resolver Node API with PNP support", - "author": "JounQin (https://www.1stG.me)", - "homepage": "https://github.com/unrs/unrs-resolver#readme", - "license": "MIT", - "publishConfig": { - "registry": "https://registry.npmjs.org", - "access": "public" - }, - "repository": "git+https://github.com/unrs/unrs-resolver.git", - "os": [ - "linux" - ], - "libc": [ - "glibc" - ] -} \ No newline at end of file diff --git a/Backend/node_modules/@unrs/resolver-binding-linux-x64-gnu/resolver.linux-x64-gnu.node b/Backend/node_modules/@unrs/resolver-binding-linux-x64-gnu/resolver.linux-x64-gnu.node deleted file mode 100644 index 0fff14d9..00000000 Binary files a/Backend/node_modules/@unrs/resolver-binding-linux-x64-gnu/resolver.linux-x64-gnu.node and /dev/null differ diff --git a/Backend/node_modules/@unrs/resolver-binding-linux-x64-musl/README.md b/Backend/node_modules/@unrs/resolver-binding-linux-x64-musl/README.md deleted file mode 100644 index 1f1576ad..00000000 --- a/Backend/node_modules/@unrs/resolver-binding-linux-x64-musl/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# `@unrs/resolver-binding-linux-x64-musl` - -This is the **x86_64-unknown-linux-musl** binary for `@unrs/resolver-binding` diff --git a/Backend/node_modules/@unrs/resolver-binding-linux-x64-musl/package.json b/Backend/node_modules/@unrs/resolver-binding-linux-x64-musl/package.json deleted file mode 100644 index c2e97bdb..00000000 --- a/Backend/node_modules/@unrs/resolver-binding-linux-x64-musl/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "@unrs/resolver-binding-linux-x64-musl", - "version": "1.11.1", - "cpu": [ - "x64" - ], - "main": "resolver.linux-x64-musl.node", - "files": [ - "resolver.linux-x64-musl.node" - ], - "description": "UnRS Resolver Node API with PNP support", - "author": "JounQin (https://www.1stG.me)", - "homepage": "https://github.com/unrs/unrs-resolver#readme", - "license": "MIT", - "publishConfig": { - "registry": "https://registry.npmjs.org", - "access": "public" - }, - "repository": "git+https://github.com/unrs/unrs-resolver.git", - "os": [ - "linux" - ], - "libc": [ - "musl" - ] -} \ No newline at end of file diff --git a/Backend/node_modules/@unrs/resolver-binding-linux-x64-musl/resolver.linux-x64-musl.node b/Backend/node_modules/@unrs/resolver-binding-linux-x64-musl/resolver.linux-x64-musl.node deleted file mode 100644 index d881840b..00000000 Binary files a/Backend/node_modules/@unrs/resolver-binding-linux-x64-musl/resolver.linux-x64-musl.node and /dev/null differ diff --git a/Backend/node_modules/istanbul-lib-instrument/node_modules/.bin/semver b/Backend/node_modules/istanbul-lib-instrument/node_modules/.bin/semver index 5aaadf42..97c53279 120000 --- a/Backend/node_modules/istanbul-lib-instrument/node_modules/.bin/semver +++ b/Backend/node_modules/istanbul-lib-instrument/node_modules/.bin/semver @@ -1 +1,16 @@ -../semver/bin/semver.js \ No newline at end of file +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) + if command -v cygpath > /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../semver/bin/semver.js" "$@" +else + exec node "$basedir/../semver/bin/semver.js" "$@" +fi diff --git a/Backend/node_modules/jest-snapshot/node_modules/.bin/semver b/Backend/node_modules/jest-snapshot/node_modules/.bin/semver index 5aaadf42..97c53279 120000 --- a/Backend/node_modules/jest-snapshot/node_modules/.bin/semver +++ b/Backend/node_modules/jest-snapshot/node_modules/.bin/semver @@ -1 +1,16 @@ -../semver/bin/semver.js \ No newline at end of file +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) + if command -v cygpath > /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../semver/bin/semver.js" "$@" +else + exec node "$basedir/../semver/bin/semver.js" "$@" +fi diff --git a/Backend/node_modules/make-dir/node_modules/.bin/semver b/Backend/node_modules/make-dir/node_modules/.bin/semver index 5aaadf42..97c53279 120000 --- a/Backend/node_modules/make-dir/node_modules/.bin/semver +++ b/Backend/node_modules/make-dir/node_modules/.bin/semver @@ -1 +1,16 @@ -../semver/bin/semver.js \ No newline at end of file +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) + if command -v cygpath > /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../semver/bin/semver.js" "$@" +else + exec node "$basedir/../semver/bin/semver.js" "$@" +fi diff --git a/Backend/package-lock.json b/Backend/package-lock.json index 63f91dc7..d3e71e65 100644 --- a/Backend/package-lock.json +++ b/Backend/package-lock.json @@ -15,6 +15,7 @@ "dotenv": "^17.3.1", "express": "^5.2.1", "jsonwebtoken": "^9.0.3", + "multer": "^2.0.2", "mysql2": "^3.17.2", "symbol-sdk": "^3.3.0" }, @@ -54,6 +55,7 @@ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", @@ -1556,6 +1558,12 @@ "node": ">= 8" } }, + "node_modules/append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==", + "license": "MIT" + }, "node_modules/argon2": { "version": "0.44.0", "resolved": "https://registry.npmjs.org/argon2/-/argon2-0.44.0.tgz", @@ -1874,6 +1882,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -1922,9 +1931,19 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true, "license": "MIT" }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -2217,6 +2236,35 @@ "dev": true, "license": "MIT" }, + "node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "engines": [ + "node >= 6.0" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/content-disposition": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", @@ -4511,6 +4559,15 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/minipass": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", @@ -4521,12 +4578,85 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, + "node_modules/multer": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/multer/-/multer-2.0.2.tgz", + "integrity": "sha512-u7f2xaZ/UG8oLXHvtF/oWTRvT44p9ecwBBqTwgJVq0+4BW1g8OW01TyMEGWBHbyMOYVHXslaut7qEQ1meATXgw==", + "license": "MIT", + "dependencies": { + "append-field": "^1.0.0", + "busboy": "^1.6.0", + "concat-stream": "^2.0.0", + "mkdirp": "^0.5.6", + "object-assign": "^4.1.1", + "type-is": "^1.6.18", + "xtend": "^4.0.2" + }, + "engines": { + "node": ">= 10.16.0" + } + }, + "node_modules/multer/node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/multer/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/multer/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/multer/node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/mysql2": { "version": "3.17.2", "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.17.2.tgz", @@ -4648,6 +4778,15 @@ "node": ">=8" } }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-inspect": { "version": "1.13.4", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", @@ -5391,6 +5530,14 @@ "node": ">= 0.8" } }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -5844,6 +5991,12 @@ "node": ">= 0.4" } }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "license": "MIT" + }, "node_modules/undici-types": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", @@ -6125,6 +6278,15 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", diff --git a/Backend/package.json b/Backend/package.json index 3221bf04..8933f9e6 100644 --- a/Backend/package.json +++ b/Backend/package.json @@ -17,6 +17,7 @@ "dotenv": "^17.3.1", "express": "^5.2.1", "jsonwebtoken": "^9.0.3", + "multer": "^2.0.2", "mysql2": "^3.17.2", "symbol-sdk": "^3.3.0" },