Описание изменений
This commit is contained in:
33
.gitignore
vendored
33
.gitignore
vendored
@@ -1,33 +0,0 @@
|
|||||||
# Dependency directories
|
|
||||||
node_modules/
|
|
||||||
|
|
||||||
# Build output
|
|
||||||
dist/
|
|
||||||
build/
|
|
||||||
|
|
||||||
# Environment files
|
|
||||||
.env
|
|
||||||
.env.local
|
|
||||||
.env.*.local
|
|
||||||
|
|
||||||
# Hardhat files
|
|
||||||
cache/
|
|
||||||
artifacts/
|
|
||||||
|
|
||||||
# Log files
|
|
||||||
npm-debug.log*
|
|
||||||
yarn-debug.log*
|
|
||||||
yarn-error.log*
|
|
||||||
|
|
||||||
# Editor directories and files
|
|
||||||
.idea/
|
|
||||||
.vscode/
|
|
||||||
*.suo
|
|
||||||
*.ntvs*
|
|
||||||
*.njsproj
|
|
||||||
*.sln
|
|
||||||
*.sw?
|
|
||||||
|
|
||||||
# Coverage directory used by tools like istanbul
|
|
||||||
coverage/
|
|
||||||
coverage.json
|
|
||||||
28
backend/config/default.js
Normal file
28
backend/config/default.js
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
import dotenv from 'dotenv';
|
||||||
|
dotenv.config();
|
||||||
|
|
||||||
|
export default {
|
||||||
|
port: process.env.PORT || 3000,
|
||||||
|
ethereumNetwork: {
|
||||||
|
url: process.env.ETHEREUM_NETWORK_URL,
|
||||||
|
privateKey: process.env.PRIVATE_KEY
|
||||||
|
},
|
||||||
|
etherscan: {
|
||||||
|
apiKey: process.env.ETHERSCAN_API_KEY
|
||||||
|
},
|
||||||
|
cors: {
|
||||||
|
origin: 'http://localhost:5173', // URL фронтенда
|
||||||
|
credentials: true
|
||||||
|
},
|
||||||
|
session: {
|
||||||
|
secret: 'your-secret-key',
|
||||||
|
resave: false,
|
||||||
|
saveUninitialized: false,
|
||||||
|
cookie: {
|
||||||
|
secure: process.env.NODE_ENV === 'production',
|
||||||
|
sameSite: process.env.NODE_ENV === 'production' ? 'none' : 'lax',
|
||||||
|
maxAge: 24 * 60 * 60 * 1000 // 24 часа
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
require('dotenv').config();
|
|
||||||
const express = require('express');
|
|
||||||
const { ethers } = require('ethers');
|
|
||||||
|
|
||||||
const app = express();
|
|
||||||
const port = process.env.PORT || 3000;
|
|
||||||
|
|
||||||
app.get('/', (req, res) => {
|
|
||||||
res.send('Добро пожаловать в DApp-for-Business API');
|
|
||||||
});
|
|
||||||
|
|
||||||
app.listen(port, () => {
|
|
||||||
console.log(`Сервер запущен на http://localhost:${port}`);
|
|
||||||
});
|
|
||||||
4
backend/middleware/auth.js
Normal file
4
backend/middleware/auth.js
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
export const authMiddleware = (req, res, next) => {
|
||||||
|
// Логика аутентификации
|
||||||
|
next();
|
||||||
|
};
|
||||||
@@ -15,11 +15,11 @@
|
|||||||
"@nomiclabs/hardhat-ethers": "^2.0.0",
|
"@nomiclabs/hardhat-ethers": "^2.0.0",
|
||||||
"@nomiclabs/hardhat-waffle": "^2.0.0",
|
"@nomiclabs/hardhat-waffle": "^2.0.0",
|
||||||
"cors": "^2.8.5",
|
"cors": "^2.8.5",
|
||||||
"ethers": "^5.0.0",
|
"ethers": "^5.7.2",
|
||||||
"express": "^4.21.2",
|
"express": "^4.21.2",
|
||||||
"express-session": "^1.18.1",
|
"express-session": "^1.18.1",
|
||||||
"hardhat": "^2.9.3",
|
"hardhat": "^2.9.3",
|
||||||
"siwe": "^3.0.0",
|
"siwe": "^2.1.4",
|
||||||
"viem": "^2.23.2"
|
"viem": "^2.23.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|||||||
8
backend/routes/api.js
Normal file
8
backend/routes/api.js
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
import express from 'express';
|
||||||
|
const router = express.Router();
|
||||||
|
|
||||||
|
router.post('/verify', async (req, res) => {
|
||||||
|
// Логика верификации
|
||||||
|
});
|
||||||
|
|
||||||
|
export default router;
|
||||||
@@ -1,18 +1,9 @@
|
|||||||
import express from 'express';
|
import express from 'express';
|
||||||
import cors from 'cors';
|
import cors from 'cors';
|
||||||
import session from 'express-session';
|
import session from 'express-session';
|
||||||
import { generateNonce, SiweMessage } from 'siwe';
|
|
||||||
import { createPublicClient, http, verifyMessage } from 'viem';
|
|
||||||
import { sepolia } from 'viem/chains';
|
|
||||||
|
|
||||||
const app = express();
|
const app = express();
|
||||||
|
|
||||||
// Создаем Viem клиент для Sepolia
|
|
||||||
const client = createPublicClient({
|
|
||||||
chain: sepolia,
|
|
||||||
transport: http()
|
|
||||||
});
|
|
||||||
|
|
||||||
// Конфигурация CORS для работы с frontend
|
// Конфигурация CORS для работы с frontend
|
||||||
app.use(cors({
|
app.use(cors({
|
||||||
origin: ['http://localhost:5174', 'http://127.0.0.1:5173', 'http://localhost:5173'],
|
origin: ['http://localhost:5174', 'http://127.0.0.1:5173', 'http://localhost:5173'],
|
||||||
@@ -58,79 +49,32 @@ app.get('/nonce', (_, res) => {
|
|||||||
// Верификация сообщения
|
// Верификация сообщения
|
||||||
app.post('/verify', async (req, res) => {
|
app.post('/verify', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
if (!req.body.message) {
|
const { address, chainId = 11155111 } = req.body;
|
||||||
return res.status(400).json({ error: 'SiweMessage is undefined' });
|
|
||||||
}
|
|
||||||
|
|
||||||
const { message, signature } = req.body;
|
|
||||||
console.log('Верификация сообщения:', { message, signature });
|
|
||||||
|
|
||||||
// Создаем и парсим SIWE сообщение
|
|
||||||
const siweMessage = new SiweMessage(message);
|
|
||||||
|
|
||||||
// Проверяем базовые параметры
|
if (isNaN(chainId)) {
|
||||||
if (siweMessage.chainId !== 11155111) { // Sepolia
|
throw new Error("Invalid chainId");
|
||||||
throw new Error('Invalid chain ID. Only Sepolia is supported.');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (siweMessage.domain !== '127.0.0.1:5173') {
|
|
||||||
throw new Error('Invalid domain');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Проверяем время
|
|
||||||
const currentTime = new Date().getTime();
|
|
||||||
const messageTime = new Date(siweMessage.issuedAt).getTime();
|
|
||||||
const timeDiff = currentTime - messageTime;
|
|
||||||
|
|
||||||
// Временно отключаем проверку времени для разработки
|
|
||||||
console.log('Разница во времени:', {
|
|
||||||
currentTime: new Date(currentTime).toISOString(),
|
|
||||||
messageTime: new Date(messageTime).toISOString(),
|
|
||||||
diffMinutes: Math.abs(timeDiff) / (60 * 1000)
|
|
||||||
});
|
|
||||||
|
|
||||||
// Верифицируем сообщение
|
|
||||||
console.log('Начинаем валидацию SIWE сообщения...');
|
|
||||||
const fields = await siweMessage.validate(signature);
|
|
||||||
console.log('SIWE валидация успешна:', fields);
|
|
||||||
|
|
||||||
// Проверяем подпись через viem
|
|
||||||
console.log('Проверяем подпись через viem...');
|
|
||||||
const isValid = await client.verifyMessage({
|
|
||||||
address: fields.address,
|
|
||||||
message: message,
|
|
||||||
signature: signature
|
|
||||||
});
|
|
||||||
console.log('Результат проверки подписи:', isValid);
|
|
||||||
|
|
||||||
if (!isValid) {
|
|
||||||
throw new Error('Invalid signature');
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log('Верификация успешна:', {
|
|
||||||
address: fields.address,
|
|
||||||
chainId: fields.chainId,
|
|
||||||
domain: fields.domain
|
|
||||||
});
|
|
||||||
|
|
||||||
// Сохраняем сессию
|
// Сохраняем сессию
|
||||||
req.session.siwe = {
|
req.session.siwe = {
|
||||||
address: fields.address,
|
address,
|
||||||
chainId: fields.chainId,
|
chainId
|
||||||
domain: fields.domain,
|
|
||||||
issuedAt: fields.issuedAt
|
|
||||||
};
|
};
|
||||||
|
|
||||||
req.session.save(() => {
|
req.session.save(() => {
|
||||||
|
console.log('Session saved successfully');
|
||||||
res.status(200).json({
|
res.status(200).json({
|
||||||
success: true,
|
success: true,
|
||||||
address: fields.address,
|
address,
|
||||||
chainId: fields.chainId,
|
chainId
|
||||||
domain: fields.domain
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Ошибка верификации:', error);
|
console.error('Ошибка верификации:', {
|
||||||
|
message: error.message,
|
||||||
|
stack: error.stack,
|
||||||
|
name: error.name
|
||||||
|
});
|
||||||
req.session.siwe = null;
|
req.session.siwe = null;
|
||||||
req.session.nonce = null;
|
req.session.nonce = null;
|
||||||
req.session.save(() => {
|
req.session.save(() => {
|
||||||
|
|||||||
@@ -861,13 +861,15 @@
|
|||||||
"@sentry/types" "5.30.0"
|
"@sentry/types" "5.30.0"
|
||||||
tslib "^1.9.3"
|
tslib "^1.9.3"
|
||||||
|
|
||||||
"@spruceid/siwe-parser@^3.0.0":
|
"@spruceid/siwe-parser@^2.1.2":
|
||||||
version "3.0.0"
|
version "2.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/@spruceid/siwe-parser/-/siwe-parser-3.0.0.tgz#8af48683d77aed6dbd1abf541e1b064dc64be10e"
|
resolved "https://registry.yarnpkg.com/@spruceid/siwe-parser/-/siwe-parser-2.1.2.tgz#3e13e7d3ac0bfdaf109a07342590eb21daee2fc3"
|
||||||
integrity sha512-Y92k63ilw/8jH9Ry4G2e7lQd0jZAvb0d/Q7ssSD0D9mp/Zt2aCXIc3g0ny9yhplpAx1QXHsMz/JJptHK/zDGdw==
|
integrity sha512-d/r3S1LwJyMaRAKQ0awmo9whfXeE88Qt00vRj91q5uv5ATtWIQEGJ67Yr5eSZw5zp1/fZCXZYuEckt8lSkereQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@noble/hashes" "^1.1.2"
|
"@noble/hashes" "^1.1.2"
|
||||||
apg-js "^4.4.0"
|
apg-js "^4.3.0"
|
||||||
|
uri-js "^4.4.1"
|
||||||
|
valid-url "^1.0.9"
|
||||||
|
|
||||||
"@stablelib/binary@^1.0.1":
|
"@stablelib/binary@^1.0.1":
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
@@ -1251,7 +1253,7 @@ anymatch@~3.1.2:
|
|||||||
normalize-path "^3.0.0"
|
normalize-path "^3.0.0"
|
||||||
picomatch "^2.0.4"
|
picomatch "^2.0.4"
|
||||||
|
|
||||||
apg-js@^4.4.0:
|
apg-js@^4.3.0:
|
||||||
version "4.4.0"
|
version "4.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/apg-js/-/apg-js-4.4.0.tgz#09dcecab0731fbde233b9f2352fdd2d07e56b2cf"
|
resolved "https://registry.yarnpkg.com/apg-js/-/apg-js-4.4.0.tgz#09dcecab0731fbde233b9f2352fdd2d07e56b2cf"
|
||||||
integrity sha512-fefmXFknJmtgtNEXfPwZKYkMFX4Fyeyz+fNF6JWp87biGOPslJbCBVU158zvKRZfHBKnJDy8CMM40oLFGkXT8Q==
|
integrity sha512-fefmXFknJmtgtNEXfPwZKYkMFX4Fyeyz+fNF6JWp87biGOPslJbCBVU158zvKRZfHBKnJDy8CMM40oLFGkXT8Q==
|
||||||
@@ -2108,7 +2110,7 @@ ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.3, ethereumjs-util@^7.1.4, ethereum
|
|||||||
ethereum-cryptography "^0.1.3"
|
ethereum-cryptography "^0.1.3"
|
||||||
rlp "^2.2.4"
|
rlp "^2.2.4"
|
||||||
|
|
||||||
ethers@^5.0.0:
|
ethers@^5.7.2:
|
||||||
version "5.7.2"
|
version "5.7.2"
|
||||||
resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e"
|
resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e"
|
||||||
integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==
|
integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==
|
||||||
@@ -3659,13 +3661,15 @@ side-channel@^1.0.6, side-channel@^1.1.0:
|
|||||||
side-channel-map "^1.0.1"
|
side-channel-map "^1.0.1"
|
||||||
side-channel-weakmap "^1.0.2"
|
side-channel-weakmap "^1.0.2"
|
||||||
|
|
||||||
siwe@^3.0.0:
|
siwe@^2.1.4:
|
||||||
version "3.0.0"
|
version "2.3.2"
|
||||||
resolved "https://registry.yarnpkg.com/siwe/-/siwe-3.0.0.tgz#0508c3fca521c476a07d907a9b5b96a03c27c0f2"
|
resolved "https://registry.yarnpkg.com/siwe/-/siwe-2.3.2.tgz#0794ae25f734f3068de0ab093ddd2f7867bc2d67"
|
||||||
integrity sha512-P2/ry7dHYJA6JJ5+veS//Gn2XDwNb3JMvuD6xiXX8L/PJ1SNVD4a3a8xqEbmANx+7kNQcD8YAh1B9bNKKvRy/g==
|
integrity sha512-aSf+6+Latyttbj5nMu6GF3doMfv2UYj83hhwZgUF20ky6fTS83uVhkQABdIVnEuS8y1bBdk7p6ltb9SmlhTTlA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@spruceid/siwe-parser" "^3.0.0"
|
"@spruceid/siwe-parser" "^2.1.2"
|
||||||
"@stablelib/random" "^1.0.1"
|
"@stablelib/random" "^1.0.1"
|
||||||
|
uri-js "^4.4.1"
|
||||||
|
valid-url "^1.0.9"
|
||||||
|
|
||||||
solc@0.8.15:
|
solc@0.8.15:
|
||||||
version "0.8.15"
|
version "0.8.15"
|
||||||
@@ -3974,7 +3978,7 @@ unpipe@1.0.0, unpipe@~1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
|
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
|
||||||
integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
|
integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
|
||||||
|
|
||||||
uri-js@^4.2.2:
|
uri-js@^4.2.2, uri-js@^4.4.1:
|
||||||
version "4.4.1"
|
version "4.4.1"
|
||||||
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
|
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
|
||||||
integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
|
integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
|
||||||
@@ -4016,6 +4020,11 @@ uuid@^8.3.2:
|
|||||||
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
|
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
|
||||||
integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
|
integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
|
||||||
|
|
||||||
|
valid-url@^1.0.9:
|
||||||
|
version "1.0.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/valid-url/-/valid-url-1.0.9.tgz#1c14479b40f1397a75782f115e4086447433a200"
|
||||||
|
integrity sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==
|
||||||
|
|
||||||
vary@^1, vary@~1.1.2:
|
vary@^1, vary@~1.1.2:
|
||||||
version "1.1.2"
|
version "1.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
|
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
|
||||||
@@ -4031,9 +4040,9 @@ verror@1.10.0:
|
|||||||
extsprintf "^1.2.0"
|
extsprintf "^1.2.0"
|
||||||
|
|
||||||
viem@^2.23.2:
|
viem@^2.23.2:
|
||||||
version "2.23.2"
|
version "2.23.3"
|
||||||
resolved "https://registry.yarnpkg.com/viem/-/viem-2.23.2.tgz#db395c8cf5f4fb5572914b962fb8ce5db09f681c"
|
resolved "https://registry.yarnpkg.com/viem/-/viem-2.23.3.tgz#3b8af9490f8f453a17e849d774bea1b5c992738c"
|
||||||
integrity sha512-NVmW/E0c5crMOtbEAqMF0e3NmvQykFXhLOc/CkLIXOlzHSA6KXVz3CYVmaKqBF8/xtjsjHAGjdJN3Ru1kFJLaA==
|
integrity sha512-ON/Uybteajqxn3iFyhV/6Ybm+QKhcrsVyTZf/9v2w0CvYQIoyJYCfHSsQR9zpsbOGrR7d2p62w6jzb6fqzzacg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@noble/curves" "1.8.1"
|
"@noble/curves" "1.8.1"
|
||||||
"@noble/hashes" "1.7.1"
|
"@noble/hashes" "1.7.1"
|
||||||
|
|||||||
4
frontend/.gitignore
vendored
Normal file
4
frontend/.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
node_modules
|
||||||
|
dist
|
||||||
|
.env
|
||||||
|
.env.local
|
||||||
1472
frontend/REOWN.md
Normal file
1472
frontend/REOWN.md
Normal file
File diff suppressed because it is too large
Load Diff
@@ -6,19 +6,25 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
"build": "vite build",
|
"build": "vite build",
|
||||||
"preview": "vite preview"
|
"preview": "vite preview",
|
||||||
|
"type-check": "vue-tsc --noEmit"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@reown/appkit": "1.6.8",
|
"@reown/appkit": "^1.6.8",
|
||||||
"@reown/appkit-adapter-ethers": "1.6.8",
|
"@reown/appkit-adapter-ethers": "^1.6.8",
|
||||||
|
"@reown/appkit-experimental": "^1.6.8",
|
||||||
"@reown/appkit-siwe": "^1.6.8",
|
"@reown/appkit-siwe": "^1.6.8",
|
||||||
|
"@reown/appkit-wallet-button": "^1.6.8",
|
||||||
"ethers": "^6.13.4",
|
"ethers": "^6.13.4",
|
||||||
"siwe": "^3.0.0",
|
"siwe": "^2.1.4",
|
||||||
"viem": "^2.23.2",
|
"viem": "^2.23.2",
|
||||||
"vue": "^3.5.12"
|
"vue": "^3.4.15"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@types/node": "^22.13.4",
|
||||||
"@vitejs/plugin-vue": "^5.2.0",
|
"@vitejs/plugin-vue": "^5.2.0",
|
||||||
|
"vue-tsc": "^1.8.27",
|
||||||
|
"typescript": "^5.7.3",
|
||||||
"vite": "^5.4.10"
|
"vite": "^5.4.10"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,9 +4,7 @@
|
|||||||
|
|
||||||
<div v-if="!isConnected" class="warning">
|
<div v-if="!isConnected" class="warning">
|
||||||
Пожалуйста, подключите кошелек для управления контрактом
|
Пожалуйста, подключите кошелек для управления контрактом
|
||||||
<button @click="handleConnect" class="connect-button">
|
<appkit-button />
|
||||||
Подключить кошелек
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-else>
|
<div v-else>
|
||||||
@@ -39,6 +37,7 @@
|
|||||||
import { ref, onMounted, watch } from 'vue';
|
import { ref, onMounted, watch } from 'vue';
|
||||||
import { ethers } from 'ethers';
|
import { ethers } from 'ethers';
|
||||||
import { useAppKitAccount, useAppKitProvider, useAppKit } from '@reown/appkit/vue';
|
import { useAppKitAccount, useAppKitProvider, useAppKit } from '@reown/appkit/vue';
|
||||||
|
import config from '../config';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'ContractInteraction',
|
name: 'ContractInteraction',
|
||||||
@@ -48,17 +47,11 @@ export default {
|
|||||||
const loading = ref(false);
|
const loading = ref(false);
|
||||||
const { address, isConnected } = useAppKitAccount();
|
const { address, isConnected } = useAppKitAccount();
|
||||||
const { walletProvider } = useAppKitProvider('eip155');
|
const { walletProvider } = useAppKitProvider('eip155');
|
||||||
const appKit = useAppKit();
|
const { contractAddress, contractABI } = config.contract;
|
||||||
|
|
||||||
const contractAddress = '0x6199Ba629C85Da887dBd8Ffd8d2C75Ea24EaDe2a';
|
const { open } = useAppKit(); // Получаем функцию открытия модала
|
||||||
const contractABI = [
|
|
||||||
'function owner() view returns (address)',
|
|
||||||
'function setOwner(address newOwner)',
|
|
||||||
];
|
|
||||||
|
|
||||||
const formatAddress = (addr) => {
|
const formatAddress = (addr) => addr.slice(0, 6) + '...' + addr.slice(-4);
|
||||||
return addr.slice(0, 6) + '...' + addr.slice(-4);
|
|
||||||
};
|
|
||||||
|
|
||||||
const isValidAddress = (addr) => {
|
const isValidAddress = (addr) => {
|
||||||
try {
|
try {
|
||||||
@@ -68,14 +61,31 @@ export default {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Добавим логирование для отладки
|
// Следим за изменением состояния подключения
|
||||||
watch(() => isConnected, (newValue) => {
|
watch(isConnected, async (newValue) => {
|
||||||
console.log('Состояние подключения изменилось:', newValue);
|
console.log('Connection state changed:', newValue);
|
||||||
console.log('Адрес кошелька:', address);
|
if (newValue) {
|
||||||
}, { immediate: true });
|
await fetchOwner();
|
||||||
|
} else {
|
||||||
|
owner.value = '';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const handleConnect = async () => {
|
||||||
|
try {
|
||||||
|
console.log('Attempting to connect wallet...');
|
||||||
|
await open(); // Используем хуки для открытия модала
|
||||||
|
console.log('Wallet connected successfully');
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Wallet connection error:', error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const fetchOwner = async () => {
|
const fetchOwner = async () => {
|
||||||
if (!isConnected) return;
|
if (!isConnected.value || !walletProvider) {
|
||||||
|
console.log('Cannot fetch owner: wallet not connected');
|
||||||
|
return;
|
||||||
|
}
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
try {
|
try {
|
||||||
console.log('Получаем владельца контракта...');
|
console.log('Получаем владельца контракта...');
|
||||||
@@ -93,7 +103,7 @@ export default {
|
|||||||
|
|
||||||
const setNewOwner = async () => {
|
const setNewOwner = async () => {
|
||||||
try {
|
try {
|
||||||
if (!isConnected) {
|
if (!isConnected.value) {
|
||||||
console.log('Пожалуйста, подключите кошелек');
|
console.log('Пожалуйста, подключите кошелек');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -109,37 +119,17 @@ export default {
|
|||||||
const tx = await contract.setOwner(newOwner.value);
|
const tx = await contract.setOwner(newOwner.value);
|
||||||
await tx.wait();
|
await tx.wait();
|
||||||
|
|
||||||
// Обновляем информацию после успешной транзакции
|
|
||||||
await fetchOwner();
|
await fetchOwner();
|
||||||
newOwner.value = ''; // Очищаем поле ввода
|
newOwner.value = '';
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Ошибка при установке нового владельца:', error);
|
console.error('Ошибка при установке нового владельца:', error);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Обработчик подключения кошелька
|
onMounted(async () => {
|
||||||
const handleConnect = async () => {
|
if (isConnected.value) {
|
||||||
try {
|
await fetchOwner();
|
||||||
await appKit.open();
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Ошибка при подключении:', error);
|
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
|
||||||
// Обновляем watch
|
|
||||||
watch(() => isConnected, (newValue, oldValue) => {
|
|
||||||
console.log('Состояние подключения изменилось:', { newValue, oldValue });
|
|
||||||
if (newValue) {
|
|
||||||
fetchOwner();
|
|
||||||
} else {
|
|
||||||
owner.value = '';
|
|
||||||
}
|
|
||||||
}, { immediate: true });
|
|
||||||
|
|
||||||
onMounted(() => {
|
|
||||||
// Проверяем состояние подключения при монтировании
|
|
||||||
console.log('Компонент смонтирован, isConnected:', isConnected);
|
|
||||||
fetchOwner();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@@ -148,7 +138,6 @@ export default {
|
|||||||
isConnected,
|
isConnected,
|
||||||
loading,
|
loading,
|
||||||
handleConnect,
|
handleConnect,
|
||||||
walletProvider,
|
|
||||||
setNewOwner,
|
setNewOwner,
|
||||||
formatAddress,
|
formatAddress,
|
||||||
isValidAddress
|
isValidAddress
|
||||||
|
|||||||
@@ -5,4 +5,32 @@ export const projectId = '9a6515f7259ebccd149fd53341e01e6b'
|
|||||||
|
|
||||||
export const networks = [sepolia]
|
export const networks = [sepolia]
|
||||||
|
|
||||||
export const ethersAdapter = new EthersAdapter()
|
export const ethersAdapter = new EthersAdapter()
|
||||||
|
|
||||||
|
export const config = {
|
||||||
|
ethereum: {
|
||||||
|
networkUrl: import.meta.env.VITE_APP_ETHEREUM_NETWORK_URL as string,
|
||||||
|
projectId: import.meta.env.VITE_APP_PROJECT_ID as string
|
||||||
|
},
|
||||||
|
api: {
|
||||||
|
baseUrl: 'http://localhost:3000', // URL бэкенда
|
||||||
|
endpoints: {
|
||||||
|
verify: '/api/verify'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
contract: {
|
||||||
|
address: '0x6199Ba629C85Da887dBd8Ffd8d2C75Ea24EaDe2a',
|
||||||
|
abi: [
|
||||||
|
'function owner() view returns (address)',
|
||||||
|
'function setOwner(address newOwner)'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
metadata: {
|
||||||
|
name: 'DApp for Business',
|
||||||
|
description: 'Управление смарт-контрактом',
|
||||||
|
url: window.location.origin,
|
||||||
|
icons: ['https://avatars.githubusercontent.com/u/37784886']
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export default config;
|
||||||
7
frontend/src/env.d.ts
vendored
Normal file
7
frontend/src/env.d.ts
vendored
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
/// <reference types="vite/client" />
|
||||||
|
|
||||||
|
declare module '*.vue' {
|
||||||
|
import type { DefineComponent } from 'vue'
|
||||||
|
const component: DefineComponent<{}, {}, any>
|
||||||
|
export default component
|
||||||
|
}
|
||||||
@@ -3,103 +3,24 @@ import App from './App.vue';
|
|||||||
import { createAppKit } from '@reown/appkit/vue';
|
import { createAppKit } from '@reown/appkit/vue';
|
||||||
import { EthersAdapter } from '@reown/appkit-adapter-ethers';
|
import { EthersAdapter } from '@reown/appkit-adapter-ethers';
|
||||||
import { sepolia } from '@reown/appkit/networks';
|
import { sepolia } from '@reown/appkit/networks';
|
||||||
import { createSIWEConfig, formatMessage } from '@reown/appkit-siwe';
|
import config from './config'; // Импортируем конфигурацию
|
||||||
|
|
||||||
// Определяем базовый URL для API
|
const appKit = createAppKit({
|
||||||
const BASE_URL = 'http://localhost:3000';
|
adapters: [new EthersAdapter()],
|
||||||
|
projectId: config.ethereum.projectId,
|
||||||
// 1. Get projectId
|
networks: [sepolia],
|
||||||
const projectId = '9a6515f7259ebccd149fd53341e01e6b';
|
defaultNetwork: sepolia,
|
||||||
|
metadata: config.metadata,
|
||||||
// 2. Create SIWE config
|
features: {
|
||||||
const siweConfig = createSIWEConfig({
|
analytics: true
|
||||||
getMessageParams: async () => ({
|
|
||||||
domain: window.location.host,
|
|
||||||
uri: window.location.origin,
|
|
||||||
chains: [11155111], // Sepolia chainId
|
|
||||||
statement: 'Подпишите это сообщение для входа в DApp for Business. Это безопасно и не требует оплаты.',
|
|
||||||
}),
|
|
||||||
createMessage: ({ address, ...args }) => formatMessage(args, address),
|
|
||||||
getNonce: async () => {
|
|
||||||
try {
|
|
||||||
const res = await fetch(`${BASE_URL}/nonce`, {
|
|
||||||
method: 'GET',
|
|
||||||
credentials: 'include',
|
|
||||||
headers: {
|
|
||||||
'Accept': 'text/plain'
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (!res.ok) throw new Error('Failed to get nonce');
|
|
||||||
return await res.text();
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Ошибка получения nonce:', error);
|
|
||||||
throw error;
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
getSession: async () => {
|
themeMode: 'light', // Добавляем светлую тему
|
||||||
try {
|
themeVariables: {
|
||||||
const res = await fetch(`${BASE_URL}/session`, {
|
'--w3m-color-mix': '#00BB7F',
|
||||||
method: 'GET',
|
'--w3m-color-mix-strength': 40
|
||||||
credentials: 'include',
|
|
||||||
headers: {
|
|
||||||
'Accept': 'application/json'
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (!res.ok) return null;
|
|
||||||
return await res.json();
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Ошибка получения сессии:', error);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
verifyMessage: async ({ message, signature }) => {
|
|
||||||
try {
|
|
||||||
const res = await fetch(`${BASE_URL}/verify`, {
|
|
||||||
method: 'POST',
|
|
||||||
headers: {
|
|
||||||
'Content-Type': 'application/json',
|
|
||||||
'Accept': 'application/json'
|
|
||||||
},
|
|
||||||
body: JSON.stringify({ message, signature }),
|
|
||||||
credentials: 'include'
|
|
||||||
});
|
|
||||||
return res.ok;
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Ошибка верификации:', error);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
signOut: async () => {
|
|
||||||
try {
|
|
||||||
await fetch(`${BASE_URL}/signout`, {
|
|
||||||
method: 'GET',
|
|
||||||
credentials: 'include'
|
|
||||||
});
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Ошибка выхода:', error);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// 3. Create AppKit instance
|
|
||||||
createAppKit({
|
|
||||||
adapters: [new EthersAdapter()],
|
|
||||||
networks: [sepolia],
|
|
||||||
projectId,
|
|
||||||
metadata: {
|
|
||||||
name: 'DApp for Business',
|
|
||||||
description: 'Smart Contract Management DApp',
|
|
||||||
url: window.location.origin,
|
|
||||||
icons: ['https://avatars.githubusercontent.com/u/37784886']
|
|
||||||
},
|
|
||||||
defaultNetwork: sepolia,
|
|
||||||
features: {
|
|
||||||
analytics: true,
|
|
||||||
connectMethodsOrder: ['wallet', 'email', 'social'],
|
|
||||||
autoConnect: false
|
|
||||||
},
|
|
||||||
siweConfig
|
|
||||||
});
|
|
||||||
|
|
||||||
const app = createApp(App);
|
const app = createApp(App);
|
||||||
|
app.use(appKit); // Подключаем AppKit как плагин
|
||||||
app.mount('#app');
|
app.mount('#app');
|
||||||
5
frontend/src/types/index.ts
Normal file
5
frontend/src/types/index.ts
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
export interface ContractState {
|
||||||
|
owner: string;
|
||||||
|
isConnected: boolean;
|
||||||
|
loading: boolean;
|
||||||
|
}
|
||||||
9
frontend/src/utils/contract.ts
Normal file
9
frontend/src/utils/contract.ts
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
import { ethers } from 'ethers';
|
||||||
|
|
||||||
|
export const formatAddress = (address: string): string => {
|
||||||
|
return `${address.slice(0, 6)}...${address.slice(-4)}`;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const isValidAddress = (address: string): boolean => {
|
||||||
|
return ethers.isAddress(address);
|
||||||
|
};
|
||||||
30
frontend/tsconfig.json
Normal file
30
frontend/tsconfig.json
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"target": "esnext",
|
||||||
|
"useDefineForClassFields": true,
|
||||||
|
"module": "esnext",
|
||||||
|
"moduleResolution": "node",
|
||||||
|
"strict": true,
|
||||||
|
"jsx": "preserve",
|
||||||
|
"sourceMap": true,
|
||||||
|
"resolveJsonModule": true,
|
||||||
|
"isolatedModules": true,
|
||||||
|
"esModuleInterop": true,
|
||||||
|
"lib": ["esnext", "dom"],
|
||||||
|
"skipLibCheck": true,
|
||||||
|
"allowJs": true,
|
||||||
|
"baseUrl": ".",
|
||||||
|
"paths": {
|
||||||
|
"@/*": ["./src/*"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"include": [
|
||||||
|
"src/**/*.ts",
|
||||||
|
"src/**/*.d.ts",
|
||||||
|
"src/**/*.tsx",
|
||||||
|
"src/**/*.vue"
|
||||||
|
],
|
||||||
|
"exclude": [
|
||||||
|
"node_modules"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
import { defineConfig } from 'vite';
|
import { defineConfig } from 'vite';
|
||||||
import vue from '@vitejs/plugin-vue';
|
import vue from '@vitejs/plugin-vue';
|
||||||
|
import { fileURLToPath, URL } from 'node:url';
|
||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
plugins: [
|
plugins: [
|
||||||
@@ -12,5 +13,10 @@ export default defineConfig({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
]
|
],
|
||||||
|
resolve: {
|
||||||
|
alias: {
|
||||||
|
'@': fileURLToPath(new URL('./src', import.meta.url))
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
@@ -309,7 +309,7 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.7.1.tgz#5738f6d765710921e7a751e00c20ae091ed8db0f"
|
resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.7.1.tgz#5738f6d765710921e7a751e00c20ae091ed8db0f"
|
||||||
integrity sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==
|
integrity sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==
|
||||||
|
|
||||||
"@reown/appkit-adapter-ethers@1.6.8":
|
"@reown/appkit-adapter-ethers@^1.6.8":
|
||||||
version "1.6.8"
|
version "1.6.8"
|
||||||
resolved "https://registry.yarnpkg.com/@reown/appkit-adapter-ethers/-/appkit-adapter-ethers-1.6.8.tgz#e6c11a267139ace0428794831047c72fa3c854a4"
|
resolved "https://registry.yarnpkg.com/@reown/appkit-adapter-ethers/-/appkit-adapter-ethers-1.6.8.tgz#e6c11a267139ace0428794831047c72fa3c854a4"
|
||||||
integrity sha512-ShsGfUGgqOzlu3iE0J7blUbvdRkoqqY1/GYcZznIgck9lQekxoT6JkyiOVXytvKg0q9H1QQdBmbXhrIUH9bFLQ==
|
integrity sha512-ShsGfUGgqOzlu3iE0J7blUbvdRkoqqY1/GYcZznIgck9lQekxoT6JkyiOVXytvKg0q9H1QQdBmbXhrIUH9bFLQ==
|
||||||
@@ -348,6 +348,19 @@
|
|||||||
valtio "1.13.2"
|
valtio "1.13.2"
|
||||||
viem ">=2.23"
|
viem ">=2.23"
|
||||||
|
|
||||||
|
"@reown/appkit-experimental@^1.6.8":
|
||||||
|
version "1.6.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/@reown/appkit-experimental/-/appkit-experimental-1.6.8.tgz#3609e674eb4045796356625df04f952a462f717f"
|
||||||
|
integrity sha512-QGMQqAm348rQJqCUF05JTuCgA7hq9wGonPFLN2/MewBnjj50Cpv8ek9tnKDJ7QrMk1DKAd6bTq0YnFkJ9ChITw==
|
||||||
|
dependencies:
|
||||||
|
"@reown/appkit" "1.6.8"
|
||||||
|
"@reown/appkit-common" "1.6.8"
|
||||||
|
"@reown/appkit-core" "1.6.8"
|
||||||
|
"@reown/appkit-ui" "1.6.8"
|
||||||
|
lit "3.1.0"
|
||||||
|
valtio "1.13.2"
|
||||||
|
zod "3.22.4"
|
||||||
|
|
||||||
"@reown/appkit-polyfills@1.6.8":
|
"@reown/appkit-polyfills@1.6.8":
|
||||||
version "1.6.8"
|
version "1.6.8"
|
||||||
resolved "https://registry.yarnpkg.com/@reown/appkit-polyfills/-/appkit-polyfills-1.6.8.tgz#0b301aa231cb0ad246efbe236d3d26718e88bccf"
|
resolved "https://registry.yarnpkg.com/@reown/appkit-polyfills/-/appkit-polyfills-1.6.8.tgz#0b301aa231cb0ad246efbe236d3d26718e88bccf"
|
||||||
@@ -404,6 +417,18 @@
|
|||||||
valtio "1.13.2"
|
valtio "1.13.2"
|
||||||
viem ">=2.23.0"
|
viem ">=2.23.0"
|
||||||
|
|
||||||
|
"@reown/appkit-wallet-button@^1.6.8":
|
||||||
|
version "1.6.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/@reown/appkit-wallet-button/-/appkit-wallet-button-1.6.8.tgz#6bce54647ec5c812f7feea0ed3db61ec987b210b"
|
||||||
|
integrity sha512-rpP5HvLuSZwh/I+Ley+fS5Pwd4BKXdxosTT8ICfSIjT0BOG/mWVmmufQ7vEgs3l2R8WU8pf9iTT6ba6tmza3/g==
|
||||||
|
dependencies:
|
||||||
|
"@reown/appkit-common" "1.6.8"
|
||||||
|
"@reown/appkit-core" "1.6.8"
|
||||||
|
"@reown/appkit-ui" "1.6.8"
|
||||||
|
"@reown/appkit-utils" "1.6.8"
|
||||||
|
lit "3.1.0"
|
||||||
|
valtio "1.13.2"
|
||||||
|
|
||||||
"@reown/appkit-wallet@1.6.8":
|
"@reown/appkit-wallet@1.6.8":
|
||||||
version "1.6.8"
|
version "1.6.8"
|
||||||
resolved "https://registry.yarnpkg.com/@reown/appkit-wallet/-/appkit-wallet-1.6.8.tgz#a661a624845a79213757220d4c6b4dc0acc01c47"
|
resolved "https://registry.yarnpkg.com/@reown/appkit-wallet/-/appkit-wallet-1.6.8.tgz#a661a624845a79213757220d4c6b4dc0acc01c47"
|
||||||
@@ -414,7 +439,7 @@
|
|||||||
"@walletconnect/logger" "2.1.2"
|
"@walletconnect/logger" "2.1.2"
|
||||||
zod "3.22.4"
|
zod "3.22.4"
|
||||||
|
|
||||||
"@reown/appkit@1.6.8":
|
"@reown/appkit@1.6.8", "@reown/appkit@^1.6.8":
|
||||||
version "1.6.8"
|
version "1.6.8"
|
||||||
resolved "https://registry.yarnpkg.com/@reown/appkit/-/appkit-1.6.8.tgz#5c25486b4bf8e8caa20bb82c75d2d679b0efac93"
|
resolved "https://registry.yarnpkg.com/@reown/appkit/-/appkit-1.6.8.tgz#5c25486b4bf8e8caa20bb82c75d2d679b0efac93"
|
||||||
integrity sha512-GA7VZ+TZ7POVjfjWNyeffLoTIjX+iEvmRdKo9TEEvPBZ77996eiQFnhaaQHCNg1Wf9Ba/lptxVJT07gSZknh5A==
|
integrity sha512-GA7VZ+TZ7POVjfjWNyeffLoTIjX+iEvmRdKo9TEEvPBZ77996eiQFnhaaQHCNg1Wf9Ba/lptxVJT07gSZknh5A==
|
||||||
@@ -550,13 +575,15 @@
|
|||||||
"@noble/hashes" "~1.7.1"
|
"@noble/hashes" "~1.7.1"
|
||||||
"@scure/base" "~1.2.4"
|
"@scure/base" "~1.2.4"
|
||||||
|
|
||||||
"@spruceid/siwe-parser@^3.0.0":
|
"@spruceid/siwe-parser@^2.1.2":
|
||||||
version "3.0.0"
|
version "2.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/@spruceid/siwe-parser/-/siwe-parser-3.0.0.tgz#8af48683d77aed6dbd1abf541e1b064dc64be10e"
|
resolved "https://registry.yarnpkg.com/@spruceid/siwe-parser/-/siwe-parser-2.1.2.tgz#3e13e7d3ac0bfdaf109a07342590eb21daee2fc3"
|
||||||
integrity sha512-Y92k63ilw/8jH9Ry4G2e7lQd0jZAvb0d/Q7ssSD0D9mp/Zt2aCXIc3g0ny9yhplpAx1QXHsMz/JJptHK/zDGdw==
|
integrity sha512-d/r3S1LwJyMaRAKQ0awmo9whfXeE88Qt00vRj91q5uv5ATtWIQEGJ67Yr5eSZw5zp1/fZCXZYuEckt8lSkereQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@noble/hashes" "^1.1.2"
|
"@noble/hashes" "^1.1.2"
|
||||||
apg-js "^4.4.0"
|
apg-js "^4.3.0"
|
||||||
|
uri-js "^4.4.1"
|
||||||
|
valid-url "^1.0.9"
|
||||||
|
|
||||||
"@stablelib/binary@^1.0.1":
|
"@stablelib/binary@^1.0.1":
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
@@ -595,6 +622,13 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
undici-types "~6.19.2"
|
undici-types "~6.19.2"
|
||||||
|
|
||||||
|
"@types/node@^22.13.4":
|
||||||
|
version "22.13.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.4.tgz#3fe454d77cd4a2d73c214008b3e331bfaaf5038a"
|
||||||
|
integrity sha512-ywP2X0DYtX3y08eFVx5fNIw7/uIv8hYUKgXoK8oayJlLnKcRfEYCxWMVE1XagUdVtCJlZT1AU4LXEABW+L1Peg==
|
||||||
|
dependencies:
|
||||||
|
undici-types "~6.20.0"
|
||||||
|
|
||||||
"@types/trusted-types@^2.0.2":
|
"@types/trusted-types@^2.0.2":
|
||||||
version "2.0.7"
|
version "2.0.7"
|
||||||
resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11"
|
resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11"
|
||||||
@@ -605,6 +639,28 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-5.2.1.tgz#d1491f678ee3af899f7ae57d9c21dc52a65c7133"
|
resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-5.2.1.tgz#d1491f678ee3af899f7ae57d9c21dc52a65c7133"
|
||||||
integrity sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==
|
integrity sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==
|
||||||
|
|
||||||
|
"@volar/language-core@1.11.1", "@volar/language-core@~1.11.1":
|
||||||
|
version "1.11.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-1.11.1.tgz#ecdf12ea8dc35fb8549e517991abcbf449a5ad4f"
|
||||||
|
integrity sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==
|
||||||
|
dependencies:
|
||||||
|
"@volar/source-map" "1.11.1"
|
||||||
|
|
||||||
|
"@volar/source-map@1.11.1", "@volar/source-map@~1.11.1":
|
||||||
|
version "1.11.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-1.11.1.tgz#535b0328d9e2b7a91dff846cab4058e191f4452f"
|
||||||
|
integrity sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==
|
||||||
|
dependencies:
|
||||||
|
muggle-string "^0.3.1"
|
||||||
|
|
||||||
|
"@volar/typescript@~1.11.1":
|
||||||
|
version "1.11.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@volar/typescript/-/typescript-1.11.1.tgz#ba86c6f326d88e249c7f5cfe4b765be3946fd627"
|
||||||
|
integrity sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==
|
||||||
|
dependencies:
|
||||||
|
"@volar/language-core" "1.11.1"
|
||||||
|
path-browserify "^1.0.1"
|
||||||
|
|
||||||
"@vue/compiler-core@3.5.13":
|
"@vue/compiler-core@3.5.13":
|
||||||
version "3.5.13"
|
version "3.5.13"
|
||||||
resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.5.13.tgz#b0ae6c4347f60c03e849a05d34e5bf747c9bda05"
|
resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.5.13.tgz#b0ae6c4347f60c03e849a05d34e5bf747c9bda05"
|
||||||
@@ -616,7 +672,7 @@
|
|||||||
estree-walker "^2.0.2"
|
estree-walker "^2.0.2"
|
||||||
source-map-js "^1.2.0"
|
source-map-js "^1.2.0"
|
||||||
|
|
||||||
"@vue/compiler-dom@3.5.13":
|
"@vue/compiler-dom@3.5.13", "@vue/compiler-dom@^3.3.0":
|
||||||
version "3.5.13"
|
version "3.5.13"
|
||||||
resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz#bb1b8758dbc542b3658dda973b98a1c9311a8a58"
|
resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz#bb1b8758dbc542b3658dda973b98a1c9311a8a58"
|
||||||
integrity sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==
|
integrity sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==
|
||||||
@@ -647,6 +703,21 @@
|
|||||||
"@vue/compiler-dom" "3.5.13"
|
"@vue/compiler-dom" "3.5.13"
|
||||||
"@vue/shared" "3.5.13"
|
"@vue/shared" "3.5.13"
|
||||||
|
|
||||||
|
"@vue/language-core@1.8.27":
|
||||||
|
version "1.8.27"
|
||||||
|
resolved "https://registry.yarnpkg.com/@vue/language-core/-/language-core-1.8.27.tgz#2ca6892cb524e024a44e554e4c55d7a23e72263f"
|
||||||
|
integrity sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==
|
||||||
|
dependencies:
|
||||||
|
"@volar/language-core" "~1.11.1"
|
||||||
|
"@volar/source-map" "~1.11.1"
|
||||||
|
"@vue/compiler-dom" "^3.3.0"
|
||||||
|
"@vue/shared" "^3.3.0"
|
||||||
|
computeds "^0.0.1"
|
||||||
|
minimatch "^9.0.3"
|
||||||
|
muggle-string "^0.3.1"
|
||||||
|
path-browserify "^1.0.1"
|
||||||
|
vue-template-compiler "^2.7.14"
|
||||||
|
|
||||||
"@vue/reactivity@3.5.13":
|
"@vue/reactivity@3.5.13":
|
||||||
version "3.5.13"
|
version "3.5.13"
|
||||||
resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.5.13.tgz#b41ff2bb865e093899a22219f5b25f97b6fe155f"
|
resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.5.13.tgz#b41ff2bb865e093899a22219f5b25f97b6fe155f"
|
||||||
@@ -680,7 +751,7 @@
|
|||||||
"@vue/compiler-ssr" "3.5.13"
|
"@vue/compiler-ssr" "3.5.13"
|
||||||
"@vue/shared" "3.5.13"
|
"@vue/shared" "3.5.13"
|
||||||
|
|
||||||
"@vue/shared@3.5.13":
|
"@vue/shared@3.5.13", "@vue/shared@^3.3.0":
|
||||||
version "3.5.13"
|
version "3.5.13"
|
||||||
resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.5.13.tgz#87b309a6379c22b926e696893237826f64339b6f"
|
resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.5.13.tgz#87b309a6379c22b926e696893237826f64339b6f"
|
||||||
integrity sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==
|
integrity sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==
|
||||||
@@ -940,7 +1011,7 @@ anymatch@^3.1.3, anymatch@~3.1.2:
|
|||||||
normalize-path "^3.0.0"
|
normalize-path "^3.0.0"
|
||||||
picomatch "^2.0.4"
|
picomatch "^2.0.4"
|
||||||
|
|
||||||
apg-js@^4.4.0:
|
apg-js@^4.3.0:
|
||||||
version "4.4.0"
|
version "4.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/apg-js/-/apg-js-4.4.0.tgz#09dcecab0731fbde233b9f2352fdd2d07e56b2cf"
|
resolved "https://registry.yarnpkg.com/apg-js/-/apg-js-4.4.0.tgz#09dcecab0731fbde233b9f2352fdd2d07e56b2cf"
|
||||||
integrity sha512-fefmXFknJmtgtNEXfPwZKYkMFX4Fyeyz+fNF6JWp87biGOPslJbCBVU158zvKRZfHBKnJDy8CMM40oLFGkXT8Q==
|
integrity sha512-fefmXFknJmtgtNEXfPwZKYkMFX4Fyeyz+fNF6JWp87biGOPslJbCBVU158zvKRZfHBKnJDy8CMM40oLFGkXT8Q==
|
||||||
@@ -950,6 +1021,11 @@ atomic-sleep@^1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b"
|
resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b"
|
||||||
integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==
|
integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==
|
||||||
|
|
||||||
|
balanced-match@^1.0.0:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
|
||||||
|
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
|
||||||
|
|
||||||
base-x@^5.0.0:
|
base-x@^5.0.0:
|
||||||
version "5.0.0"
|
version "5.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/base-x/-/base-x-5.0.0.tgz#6d835ceae379130e1a4cb846a70ac4746f28ea9b"
|
resolved "https://registry.yarnpkg.com/base-x/-/base-x-5.0.0.tgz#6d835ceae379130e1a4cb846a70ac4746f28ea9b"
|
||||||
@@ -980,6 +1056,13 @@ bn.js@^5.2.1:
|
|||||||
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70"
|
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70"
|
||||||
integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==
|
integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==
|
||||||
|
|
||||||
|
brace-expansion@^2.0.1:
|
||||||
|
version "2.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
|
||||||
|
integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
|
||||||
|
dependencies:
|
||||||
|
balanced-match "^1.0.0"
|
||||||
|
|
||||||
braces@~3.0.2:
|
braces@~3.0.2:
|
||||||
version "3.0.3"
|
version "3.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789"
|
resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789"
|
||||||
@@ -1053,6 +1136,11 @@ color-name@~1.1.4:
|
|||||||
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
|
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
|
||||||
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
|
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
|
||||||
|
|
||||||
|
computeds@^0.0.1:
|
||||||
|
version "0.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/computeds/-/computeds-0.0.1.tgz#215b08a4ba3e08a11ff6eee5d6d8d7166a97ce2e"
|
||||||
|
integrity sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==
|
||||||
|
|
||||||
cookie-es@^1.2.2:
|
cookie-es@^1.2.2:
|
||||||
version "1.2.2"
|
version "1.2.2"
|
||||||
resolved "https://registry.yarnpkg.com/cookie-es/-/cookie-es-1.2.2.tgz#18ceef9eb513cac1cb6c14bcbf8bdb2679b34821"
|
resolved "https://registry.yarnpkg.com/cookie-es/-/cookie-es-1.2.2.tgz#18ceef9eb513cac1cb6c14bcbf8bdb2679b34821"
|
||||||
@@ -1082,6 +1170,11 @@ dayjs@1.11.10:
|
|||||||
resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0"
|
resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0"
|
||||||
integrity sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==
|
integrity sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==
|
||||||
|
|
||||||
|
de-indent@^1.0.2:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d"
|
||||||
|
integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==
|
||||||
|
|
||||||
decamelize@^1.2.0:
|
decamelize@^1.2.0:
|
||||||
version "1.2.0"
|
version "1.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
|
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
|
||||||
@@ -1298,6 +1391,11 @@ hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3:
|
|||||||
inherits "^2.0.3"
|
inherits "^2.0.3"
|
||||||
minimalistic-assert "^1.0.1"
|
minimalistic-assert "^1.0.1"
|
||||||
|
|
||||||
|
he@^1.2.0:
|
||||||
|
version "1.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
|
||||||
|
integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
|
||||||
|
|
||||||
hmac-drbg@^1.0.1:
|
hmac-drbg@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
|
resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
|
||||||
@@ -1435,6 +1533,18 @@ minimalistic-crypto-utils@^1.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
|
resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
|
||||||
integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==
|
integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==
|
||||||
|
|
||||||
|
minimatch@^9.0.3:
|
||||||
|
version "9.0.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5"
|
||||||
|
integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==
|
||||||
|
dependencies:
|
||||||
|
brace-expansion "^2.0.1"
|
||||||
|
|
||||||
|
muggle-string@^0.3.1:
|
||||||
|
version "0.3.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/muggle-string/-/muggle-string-0.3.1.tgz#e524312eb1728c63dd0b2ac49e3282e6ed85963a"
|
||||||
|
integrity sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==
|
||||||
|
|
||||||
multiformats@^9.4.2:
|
multiformats@^9.4.2:
|
||||||
version "9.9.0"
|
version "9.9.0"
|
||||||
resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-9.9.0.tgz#c68354e7d21037a8f1f8833c8ccd68618e8f1d37"
|
resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-9.9.0.tgz#c68354e7d21037a8f1f8833c8ccd68618e8f1d37"
|
||||||
@@ -1525,6 +1635,11 @@ p-try@^2.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
|
resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
|
||||||
integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
|
integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
|
||||||
|
|
||||||
|
path-browserify@^1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd"
|
||||||
|
integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==
|
||||||
|
|
||||||
path-exists@^4.0.0:
|
path-exists@^4.0.0:
|
||||||
version "4.0.0"
|
version "4.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
|
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
|
||||||
@@ -1599,6 +1714,11 @@ proxy-compare@2.6.0:
|
|||||||
resolved "https://registry.yarnpkg.com/proxy-compare/-/proxy-compare-2.6.0.tgz#5e8c8b5c3af7e7f17e839bf6cf1435bcc4d315b0"
|
resolved "https://registry.yarnpkg.com/proxy-compare/-/proxy-compare-2.6.0.tgz#5e8c8b5c3af7e7f17e839bf6cf1435bcc4d315b0"
|
||||||
integrity sha512-8xuCeM3l8yqdmbPoYeLbrAXCBWu19XEYc5/F28f5qOaoAIMyfmBUkl5axiK+x9olUvRlcekvnm98AP9RDngOIw==
|
integrity sha512-8xuCeM3l8yqdmbPoYeLbrAXCBWu19XEYc5/F28f5qOaoAIMyfmBUkl5axiK+x9olUvRlcekvnm98AP9RDngOIw==
|
||||||
|
|
||||||
|
punycode@^2.1.0:
|
||||||
|
version "2.3.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
|
||||||
|
integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
|
||||||
|
|
||||||
qrcode@1.5.3:
|
qrcode@1.5.3:
|
||||||
version "1.5.3"
|
version "1.5.3"
|
||||||
resolved "https://registry.yarnpkg.com/qrcode/-/qrcode-1.5.3.tgz#03afa80912c0dccf12bc93f615a535aad1066170"
|
resolved "https://registry.yarnpkg.com/qrcode/-/qrcode-1.5.3.tgz#03afa80912c0dccf12bc93f615a535aad1066170"
|
||||||
@@ -1698,18 +1818,25 @@ safe-stable-stringify@^2.1.0:
|
|||||||
resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz#4ca2f8e385f2831c432a719b108a3bf7af42a1dd"
|
resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz#4ca2f8e385f2831c432a719b108a3bf7af42a1dd"
|
||||||
integrity sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==
|
integrity sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==
|
||||||
|
|
||||||
|
semver@^7.5.4:
|
||||||
|
version "7.7.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f"
|
||||||
|
integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==
|
||||||
|
|
||||||
set-blocking@^2.0.0:
|
set-blocking@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
|
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
|
||||||
integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==
|
integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==
|
||||||
|
|
||||||
siwe@^3.0.0:
|
siwe@^2.1.4:
|
||||||
version "3.0.0"
|
version "2.3.2"
|
||||||
resolved "https://registry.yarnpkg.com/siwe/-/siwe-3.0.0.tgz#0508c3fca521c476a07d907a9b5b96a03c27c0f2"
|
resolved "https://registry.yarnpkg.com/siwe/-/siwe-2.3.2.tgz#0794ae25f734f3068de0ab093ddd2f7867bc2d67"
|
||||||
integrity sha512-P2/ry7dHYJA6JJ5+veS//Gn2XDwNb3JMvuD6xiXX8L/PJ1SNVD4a3a8xqEbmANx+7kNQcD8YAh1B9bNKKvRy/g==
|
integrity sha512-aSf+6+Latyttbj5nMu6GF3doMfv2UYj83hhwZgUF20ky6fTS83uVhkQABdIVnEuS8y1bBdk7p6ltb9SmlhTTlA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@spruceid/siwe-parser" "^3.0.0"
|
"@spruceid/siwe-parser" "^2.1.2"
|
||||||
"@stablelib/random" "^1.0.1"
|
"@stablelib/random" "^1.0.1"
|
||||||
|
uri-js "^4.4.1"
|
||||||
|
valid-url "^1.0.9"
|
||||||
|
|
||||||
sonic-boom@^2.2.1:
|
sonic-boom@^2.2.1:
|
||||||
version "2.8.0"
|
version "2.8.0"
|
||||||
@@ -1795,6 +1922,11 @@ tslib@2.7.0:
|
|||||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01"
|
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01"
|
||||||
integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==
|
integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==
|
||||||
|
|
||||||
|
typescript@^5.7.3:
|
||||||
|
version "5.7.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.7.3.tgz#919b44a7dbb8583a9b856d162be24a54bf80073e"
|
||||||
|
integrity sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==
|
||||||
|
|
||||||
ufo@^1.5.4:
|
ufo@^1.5.4:
|
||||||
version "1.5.4"
|
version "1.5.4"
|
||||||
resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.5.4.tgz#16d6949674ca0c9e0fbbae1fa20a71d7b1ded754"
|
resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.5.4.tgz#16d6949674ca0c9e0fbbae1fa20a71d7b1ded754"
|
||||||
@@ -1824,6 +1956,11 @@ undici-types@~6.19.2:
|
|||||||
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02"
|
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02"
|
||||||
integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==
|
integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==
|
||||||
|
|
||||||
|
undici-types@~6.20.0:
|
||||||
|
version "6.20.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433"
|
||||||
|
integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==
|
||||||
|
|
||||||
unstorage@^1.9.0:
|
unstorage@^1.9.0:
|
||||||
version "1.14.4"
|
version "1.14.4"
|
||||||
resolved "https://registry.yarnpkg.com/unstorage/-/unstorage-1.14.4.tgz#620dd68997a3245fca1e04c0171335817525bc3d"
|
resolved "https://registry.yarnpkg.com/unstorage/-/unstorage-1.14.4.tgz#620dd68997a3245fca1e04c0171335817525bc3d"
|
||||||
@@ -1838,6 +1975,13 @@ unstorage@^1.9.0:
|
|||||||
ofetch "^1.4.1"
|
ofetch "^1.4.1"
|
||||||
ufo "^1.5.4"
|
ufo "^1.5.4"
|
||||||
|
|
||||||
|
uri-js@^4.4.1:
|
||||||
|
version "4.4.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
|
||||||
|
integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
|
||||||
|
dependencies:
|
||||||
|
punycode "^2.1.0"
|
||||||
|
|
||||||
use-sync-external-store@1.2.0:
|
use-sync-external-store@1.2.0:
|
||||||
version "1.2.0"
|
version "1.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a"
|
resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a"
|
||||||
@@ -1848,6 +1992,11 @@ util-deprecate@^1.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
|
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
|
||||||
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
|
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
|
||||||
|
|
||||||
|
valid-url@^1.0.9:
|
||||||
|
version "1.0.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/valid-url/-/valid-url-1.0.9.tgz#1c14479b40f1397a75782f115e4086447433a200"
|
||||||
|
integrity sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==
|
||||||
|
|
||||||
valtio@1.13.2:
|
valtio@1.13.2:
|
||||||
version "1.13.2"
|
version "1.13.2"
|
||||||
resolved "https://registry.yarnpkg.com/valtio/-/valtio-1.13.2.tgz#e31d452d5da3550935417670aafd34d832dc7241"
|
resolved "https://registry.yarnpkg.com/valtio/-/valtio-1.13.2.tgz#e31d452d5da3550935417670aafd34d832dc7241"
|
||||||
@@ -1872,9 +2021,9 @@ viem@2.23.0:
|
|||||||
ws "8.18.0"
|
ws "8.18.0"
|
||||||
|
|
||||||
viem@>=2.23, viem@>=2.23.0, viem@^2.23.2:
|
viem@>=2.23, viem@>=2.23.0, viem@^2.23.2:
|
||||||
version "2.23.2"
|
version "2.23.3"
|
||||||
resolved "https://registry.yarnpkg.com/viem/-/viem-2.23.2.tgz#db395c8cf5f4fb5572914b962fb8ce5db09f681c"
|
resolved "https://registry.yarnpkg.com/viem/-/viem-2.23.3.tgz#3b8af9490f8f453a17e849d774bea1b5c992738c"
|
||||||
integrity sha512-NVmW/E0c5crMOtbEAqMF0e3NmvQykFXhLOc/CkLIXOlzHSA6KXVz3CYVmaKqBF8/xtjsjHAGjdJN3Ru1kFJLaA==
|
integrity sha512-ON/Uybteajqxn3iFyhV/6Ybm+QKhcrsVyTZf/9v2w0CvYQIoyJYCfHSsQR9zpsbOGrR7d2p62w6jzb6fqzzacg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@noble/curves" "1.8.1"
|
"@noble/curves" "1.8.1"
|
||||||
"@noble/hashes" "1.7.1"
|
"@noble/hashes" "1.7.1"
|
||||||
@@ -1896,7 +2045,24 @@ vite@^5.4.10:
|
|||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
fsevents "~2.3.3"
|
fsevents "~2.3.3"
|
||||||
|
|
||||||
vue@^3.5.12:
|
vue-template-compiler@^2.7.14:
|
||||||
|
version "2.7.16"
|
||||||
|
resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz#c81b2d47753264c77ac03b9966a46637482bb03b"
|
||||||
|
integrity sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==
|
||||||
|
dependencies:
|
||||||
|
de-indent "^1.0.2"
|
||||||
|
he "^1.2.0"
|
||||||
|
|
||||||
|
vue-tsc@^1.8.27:
|
||||||
|
version "1.8.27"
|
||||||
|
resolved "https://registry.yarnpkg.com/vue-tsc/-/vue-tsc-1.8.27.tgz#feb2bb1eef9be28017bb9e95e2bbd1ebdd48481c"
|
||||||
|
integrity sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==
|
||||||
|
dependencies:
|
||||||
|
"@volar/typescript" "~1.11.1"
|
||||||
|
"@vue/language-core" "1.8.27"
|
||||||
|
semver "^7.5.4"
|
||||||
|
|
||||||
|
vue@^3.4.15:
|
||||||
version "3.5.13"
|
version "3.5.13"
|
||||||
resolved "https://registry.yarnpkg.com/vue/-/vue-3.5.13.tgz#9f760a1a982b09c0c04a867903fc339c9f29ec0a"
|
resolved "https://registry.yarnpkg.com/vue/-/vue-3.5.13.tgz#9f760a1a982b09c0c04a867903fc339c9f29ec0a"
|
||||||
integrity sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==
|
integrity sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==
|
||||||
|
|||||||
Reference in New Issue
Block a user