Описание изменений

This commit is contained in:
2025-02-19 12:36:38 +03:00
parent b56e6b5e46
commit 7cb967138d
20 changed files with 1886 additions and 297 deletions

4
frontend/.gitignore vendored Normal file
View File

@@ -0,0 +1,4 @@
node_modules
dist
.env
.env.local

1472
frontend/REOWN.md Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -6,19 +6,25 @@
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
"preview": "vite preview",
"type-check": "vue-tsc --noEmit"
},
"dependencies": {
"@reown/appkit": "1.6.8",
"@reown/appkit-adapter-ethers": "1.6.8",
"@reown/appkit": "^1.6.8",
"@reown/appkit-adapter-ethers": "^1.6.8",
"@reown/appkit-experimental": "^1.6.8",
"@reown/appkit-siwe": "^1.6.8",
"@reown/appkit-wallet-button": "^1.6.8",
"ethers": "^6.13.4",
"siwe": "^3.0.0",
"siwe": "^2.1.4",
"viem": "^2.23.2",
"vue": "^3.5.12"
"vue": "^3.4.15"
},
"devDependencies": {
"@types/node": "^22.13.4",
"@vitejs/plugin-vue": "^5.2.0",
"vue-tsc": "^1.8.27",
"typescript": "^5.7.3",
"vite": "^5.4.10"
}
}

View File

@@ -4,9 +4,7 @@
<div v-if="!isConnected" class="warning">
Пожалуйста, подключите кошелек для управления контрактом
<button @click="handleConnect" class="connect-button">
Подключить кошелек
</button>
<appkit-button />
</div>
<div v-else>
@@ -39,6 +37,7 @@
import { ref, onMounted, watch } from 'vue';
import { ethers } from 'ethers';
import { useAppKitAccount, useAppKitProvider, useAppKit } from '@reown/appkit/vue';
import config from '../config';
export default {
name: 'ContractInteraction',
@@ -48,17 +47,11 @@ export default {
const loading = ref(false);
const { address, isConnected } = useAppKitAccount();
const { walletProvider } = useAppKitProvider('eip155');
const appKit = useAppKit();
const { contractAddress, contractABI } = config.contract;
const contractAddress = '0x6199Ba629C85Da887dBd8Ffd8d2C75Ea24EaDe2a';
const contractABI = [
'function owner() view returns (address)',
'function setOwner(address newOwner)',
];
const { open } = useAppKit(); // Получаем функцию открытия модала
const formatAddress = (addr) => {
return addr.slice(0, 6) + '...' + addr.slice(-4);
};
const formatAddress = (addr) => addr.slice(0, 6) + '...' + addr.slice(-4);
const isValidAddress = (addr) => {
try {
@@ -68,14 +61,31 @@ export default {
}
};
// Добавим логирование для отладки
watch(() => isConnected, (newValue) => {
console.log('Состояние подключения изменилось:', newValue);
console.log('Адрес кошелька:', address);
}, { immediate: true });
// Следим за изменением состояния подключения
watch(isConnected, async (newValue) => {
console.log('Connection state changed:', newValue);
if (newValue) {
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 () => {
if (!isConnected) return;
if (!isConnected.value || !walletProvider) {
console.log('Cannot fetch owner: wallet not connected');
return;
}
loading.value = true;
try {
console.log('Получаем владельца контракта...');
@@ -93,7 +103,7 @@ export default {
const setNewOwner = async () => {
try {
if (!isConnected) {
if (!isConnected.value) {
console.log('Пожалуйста, подключите кошелек');
return;
}
@@ -109,37 +119,17 @@ export default {
const tx = await contract.setOwner(newOwner.value);
await tx.wait();
// Обновляем информацию после успешной транзакции
await fetchOwner();
newOwner.value = ''; // Очищаем поле ввода
newOwner.value = '';
} catch (error) {
console.error('Ошибка при установке нового владельца:', error);
}
};
// Обработчик подключения кошелька
const handleConnect = async () => {
try {
await appKit.open();
} catch (error) {
console.error('Ошибка при подключении:', error);
onMounted(async () => {
if (isConnected.value) {
await fetchOwner();
}
};
// Обновляем watch
watch(() => isConnected, (newValue, oldValue) => {
console.log('Состояние подключения изменилось:', { newValue, oldValue });
if (newValue) {
fetchOwner();
} else {
owner.value = '';
}
}, { immediate: true });
onMounted(() => {
// Проверяем состояние подключения при монтировании
console.log('Компонент смонтирован, isConnected:', isConnected);
fetchOwner();
});
return {
@@ -148,7 +138,6 @@ export default {
isConnected,
loading,
handleConnect,
walletProvider,
setNewOwner,
formatAddress,
isValidAddress

View File

@@ -5,4 +5,32 @@ export const projectId = '9a6515f7259ebccd149fd53341e01e6b'
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
View File

@@ -0,0 +1,7 @@
/// <reference types="vite/client" />
declare module '*.vue' {
import type { DefineComponent } from 'vue'
const component: DefineComponent<{}, {}, any>
export default component
}

View File

@@ -3,103 +3,24 @@ import App from './App.vue';
import { createAppKit } from '@reown/appkit/vue';
import { EthersAdapter } from '@reown/appkit-adapter-ethers';
import { sepolia } from '@reown/appkit/networks';
import { createSIWEConfig, formatMessage } from '@reown/appkit-siwe';
import config from './config'; // Импортируем конфигурацию
// Определяем базовый URL для API
const BASE_URL = 'http://localhost:3000';
// 1. Get projectId
const projectId = '9a6515f7259ebccd149fd53341e01e6b';
// 2. Create SIWE config
const siweConfig = createSIWEConfig({
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;
}
const appKit = createAppKit({
adapters: [new EthersAdapter()],
projectId: config.ethereum.projectId,
networks: [sepolia],
defaultNetwork: sepolia,
metadata: config.metadata,
features: {
analytics: true
},
getSession: async () => {
try {
const res = await fetch(`${BASE_URL}/session`, {
method: 'GET',
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);
}
themeMode: 'light', // Добавляем светлую тему
themeVariables: {
'--w3m-color-mix': '#00BB7F',
'--w3m-color-mix-strength': 40
}
});
// 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);
app.use(appKit); // Подключаем AppKit как плагин
app.mount('#app');

View File

@@ -0,0 +1,5 @@
export interface ContractState {
owner: string;
isConnected: boolean;
loading: boolean;
}

View 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
View 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"
]
}

View File

@@ -1,5 +1,6 @@
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import { fileURLToPath, URL } from 'node:url';
export default defineConfig({
plugins: [
@@ -12,5 +13,10 @@ export default defineConfig({
}
}
})
]
],
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url))
}
}
});

View File

@@ -309,7 +309,7 @@
resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.7.1.tgz#5738f6d765710921e7a751e00c20ae091ed8db0f"
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"
resolved "https://registry.yarnpkg.com/@reown/appkit-adapter-ethers/-/appkit-adapter-ethers-1.6.8.tgz#e6c11a267139ace0428794831047c72fa3c854a4"
integrity sha512-ShsGfUGgqOzlu3iE0J7blUbvdRkoqqY1/GYcZznIgck9lQekxoT6JkyiOVXytvKg0q9H1QQdBmbXhrIUH9bFLQ==
@@ -348,6 +348,19 @@
valtio "1.13.2"
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":
version "1.6.8"
resolved "https://registry.yarnpkg.com/@reown/appkit-polyfills/-/appkit-polyfills-1.6.8.tgz#0b301aa231cb0ad246efbe236d3d26718e88bccf"
@@ -404,6 +417,18 @@
valtio "1.13.2"
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":
version "1.6.8"
resolved "https://registry.yarnpkg.com/@reown/appkit-wallet/-/appkit-wallet-1.6.8.tgz#a661a624845a79213757220d4c6b4dc0acc01c47"
@@ -414,7 +439,7 @@
"@walletconnect/logger" "2.1.2"
zod "3.22.4"
"@reown/appkit@1.6.8":
"@reown/appkit@1.6.8", "@reown/appkit@^1.6.8":
version "1.6.8"
resolved "https://registry.yarnpkg.com/@reown/appkit/-/appkit-1.6.8.tgz#5c25486b4bf8e8caa20bb82c75d2d679b0efac93"
integrity sha512-GA7VZ+TZ7POVjfjWNyeffLoTIjX+iEvmRdKo9TEEvPBZ77996eiQFnhaaQHCNg1Wf9Ba/lptxVJT07gSZknh5A==
@@ -550,13 +575,15 @@
"@noble/hashes" "~1.7.1"
"@scure/base" "~1.2.4"
"@spruceid/siwe-parser@^3.0.0":
version "3.0.0"
resolved "https://registry.yarnpkg.com/@spruceid/siwe-parser/-/siwe-parser-3.0.0.tgz#8af48683d77aed6dbd1abf541e1b064dc64be10e"
integrity sha512-Y92k63ilw/8jH9Ry4G2e7lQd0jZAvb0d/Q7ssSD0D9mp/Zt2aCXIc3g0ny9yhplpAx1QXHsMz/JJptHK/zDGdw==
"@spruceid/siwe-parser@^2.1.2":
version "2.1.2"
resolved "https://registry.yarnpkg.com/@spruceid/siwe-parser/-/siwe-parser-2.1.2.tgz#3e13e7d3ac0bfdaf109a07342590eb21daee2fc3"
integrity sha512-d/r3S1LwJyMaRAKQ0awmo9whfXeE88Qt00vRj91q5uv5ATtWIQEGJ67Yr5eSZw5zp1/fZCXZYuEckt8lSkereQ==
dependencies:
"@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":
version "1.0.1"
@@ -595,6 +622,13 @@
dependencies:
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":
version "2.0.7"
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"
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":
version "3.5.13"
resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.5.13.tgz#b0ae6c4347f60c03e849a05d34e5bf747c9bda05"
@@ -616,7 +672,7 @@
estree-walker "^2.0.2"
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"
resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz#bb1b8758dbc542b3658dda973b98a1c9311a8a58"
integrity sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==
@@ -647,6 +703,21 @@
"@vue/compiler-dom" "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":
version "3.5.13"
resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.5.13.tgz#b41ff2bb865e093899a22219f5b25f97b6fe155f"
@@ -680,7 +751,7 @@
"@vue/compiler-ssr" "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"
resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.5.13.tgz#87b309a6379c22b926e696893237826f64339b6f"
integrity sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==
@@ -940,7 +1011,7 @@ anymatch@^3.1.3, anymatch@~3.1.2:
normalize-path "^3.0.0"
picomatch "^2.0.4"
apg-js@^4.4.0:
apg-js@^4.3.0:
version "4.4.0"
resolved "https://registry.yarnpkg.com/apg-js/-/apg-js-4.4.0.tgz#09dcecab0731fbde233b9f2352fdd2d07e56b2cf"
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"
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:
version "5.0.0"
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"
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:
version "3.0.3"
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"
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:
version "1.2.2"
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"
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:
version "1.2.0"
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"
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:
version "1.0.1"
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"
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:
version "9.9.0"
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"
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:
version "4.0.0"
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"
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:
version "1.5.3"
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"
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:
version "2.0.0"
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==
siwe@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/siwe/-/siwe-3.0.0.tgz#0508c3fca521c476a07d907a9b5b96a03c27c0f2"
integrity sha512-P2/ry7dHYJA6JJ5+veS//Gn2XDwNb3JMvuD6xiXX8L/PJ1SNVD4a3a8xqEbmANx+7kNQcD8YAh1B9bNKKvRy/g==
siwe@^2.1.4:
version "2.3.2"
resolved "https://registry.yarnpkg.com/siwe/-/siwe-2.3.2.tgz#0794ae25f734f3068de0ab093ddd2f7867bc2d67"
integrity sha512-aSf+6+Latyttbj5nMu6GF3doMfv2UYj83hhwZgUF20ky6fTS83uVhkQABdIVnEuS8y1bBdk7p6ltb9SmlhTTlA==
dependencies:
"@spruceid/siwe-parser" "^3.0.0"
"@spruceid/siwe-parser" "^2.1.2"
"@stablelib/random" "^1.0.1"
uri-js "^4.4.1"
valid-url "^1.0.9"
sonic-boom@^2.2.1:
version "2.8.0"
@@ -1795,6 +1922,11 @@ tslib@2.7.0:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01"
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:
version "1.5.4"
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"
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:
version "1.14.4"
resolved "https://registry.yarnpkg.com/unstorage/-/unstorage-1.14.4.tgz#620dd68997a3245fca1e04c0171335817525bc3d"
@@ -1838,6 +1975,13 @@ unstorage@^1.9.0:
ofetch "^1.4.1"
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:
version "1.2.0"
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"
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:
version "1.13.2"
resolved "https://registry.yarnpkg.com/valtio/-/valtio-1.13.2.tgz#e31d452d5da3550935417670aafd34d832dc7241"
@@ -1872,9 +2021,9 @@ viem@2.23.0:
ws "8.18.0"
viem@>=2.23, viem@>=2.23.0, viem@^2.23.2:
version "2.23.2"
resolved "https://registry.yarnpkg.com/viem/-/viem-2.23.2.tgz#db395c8cf5f4fb5572914b962fb8ce5db09f681c"
integrity sha512-NVmW/E0c5crMOtbEAqMF0e3NmvQykFXhLOc/CkLIXOlzHSA6KXVz3CYVmaKqBF8/xtjsjHAGjdJN3Ru1kFJLaA==
version "2.23.3"
resolved "https://registry.yarnpkg.com/viem/-/viem-2.23.3.tgz#3b8af9490f8f453a17e849d774bea1b5c992738c"
integrity sha512-ON/Uybteajqxn3iFyhV/6Ybm+QKhcrsVyTZf/9v2w0CvYQIoyJYCfHSsQR9zpsbOGrR7d2p62w6jzb6fqzzacg==
dependencies:
"@noble/curves" "1.8.1"
"@noble/hashes" "1.7.1"
@@ -1896,7 +2045,24 @@ vite@^5.4.10:
optionalDependencies:
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"
resolved "https://registry.yarnpkg.com/vue/-/vue-3.5.13.tgz#9f760a1a982b09c0c04a867903fc339c9f29ec0a"
integrity sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==