npm-пакет @vilna-io/storage-client подключает веб-приложения к браузерному расширению Vilna Storage для операций с кошельком: запросы сетей, валидация адресов и подписание транзакций.
- Пакет:
@vilna-io/storage-client - Лицензия: MIT
- Среда: Только браузер (требуется
window)
npm install @vilna-io/storage-clientimport { connect } from "@vilna-io/storage-client";
const client = await connect();
const networks = await client.getSupportedNetworks();
// ['eip155:1', 'eip155:56', 'tron:728126428', ...]Функция connect() создает клиент, обнаруживает расширение и возвращает готовый к использованию экземпляр. Если расширение не установлено, выбрасывается VilnaStorageNotFoundError.
| Метод | Возвращает | Описание |
|---|---|---|
connect() | Promise<VilnaStorageClient> | Создать и подключить клиент за один шаг |
client.getSupportedNetworks() | Promise<string[]> | Список поддерживаемых идентификаторов сетей в формате CAIP-2 |
client.isAvailableAddress(params) | Promise<boolean> | Проверить, существует ли адрес в кошельке |
client.sendTransaction(params) | Promise<{ transactionId: string }> | Открыть всплывающее окно расширения для подписания |
client.isConnected() | boolean | Проверить статус подключения |
client.on(event, handler) | this | Подписаться на события расширения |
client.removeListener(event, handler) | this | Отписаться от событий |
client.disconnect() | void | Отключиться и освободить ресурсы |
const isAvailable = await client.isAvailableAddress({
address: "0x742d35Cc6634C0532925a3b844Bc9e7595f7B123",
derivationPath: "m/44'/60'/0'/0/0",
});
if (isAvailable) {
// Адрес существует в подключенном кошельке
}Метод sendTransaction открывает всплывающее окно расширения, в котором пользователь просматривает и подтверждает транзакцию.
const result = await client.sendTransaction({
chainId: "eip155:1",
address: "0x742d35Cc6634C0532925a3b844Bc9e7595f7B123",
derivationPath: "m/44'/60'/0'/0/0",
transaction: {
to: "0xRecipientAddress",
value: "1000000000000000000", // 1 ETH в Wei
tokenType: "native",
},
});
console.log("Transaction ID:", result.transactionId);const result = await client.sendTransaction({
chainId: "eip155:1",
address: "0x742d35Cc6634C0532925a3b844Bc9e7595f7B123",
derivationPath: "m/44'/60'/0'/0/0",
transaction: {
tokenType: "usdt",
tokenAddress: "0xdAC17F958D2ee523a2206206994597C13D831ec7",
tokenAmount: "1000000", // 1 USDT (6 десятичных знаков)
to: "0xRecipientAddress",
},
});const result = await client.sendTransaction({
chainId: "tron:728126428",
address: "TLyqzVGLV1srkB7dToTAEqgDSfPtXRJZYH",
derivationPath: "m/44'/195'/0'/0/0",
transaction: {
to_address: "TRecipientAddress",
amount: 1000000, // 1 TRX в Sun
tokenType: "native",
},
});client.on("accountsChanged", (accounts) => {
console.log("Accounts changed:", accounts);
});
client.on("chainChanged", (chainId) => {
console.log("Chain changed:", chainId);
});| Сеть | Chain ID |
|---|---|
| Ethereum Mainnet | eip155:1 |
| Ethereum Sepolia | eip155:11155111 |
| BNB Smart Chain | eip155:56 |
| BNB Testnet | eip155:97 |
| TRON Mainnet | tron:728126428 |
| TRON Shasta | tron:2494104990 |
Вызовите client.getSupportedNetworks() во время выполнения для получения актуального списка.
Пакет экспортирует несколько пространств имен с утилитами для типичных задач валидации:
import { validationUtils, envUtils } from "@vilna-io/storage-client";
// Валидация идентификатора сети CAIP-2
validationUtils.isValidChainId("eip155:1"); // true
// Валидация форматов адресов
validationUtils.isValidEthereumAddress("0x742d35Cc6634C0532925a3b844Bc9e7595f7B123"); // true
validationUtils.isValidTronAddress("TLyqzVGLV1srkB7dToTAEqgDSfPtXRJZYH"); // true
// Валидация пути деривации BIP-32
validationUtils.isValidDerivationPath("m/44'/60'/0'/0/0"); // true
// Проверка запуска в браузере
envUtils.isBrowser(); // true/false
// Проверка установки расширения
envUtils.isVilnaStorageAvailable(); // true/false
// Ожидание загрузки расширения (с таймаутом)
await envUtils.waitForVilnaStorage(5000);Пакет определяет три класса ошибок:
| Ошибка | Код | Когда возникает |
|---|---|---|
VilnaStorageNotFoundError | EXTENSION_NOT_FOUND | Расширение не установлено |
VilnaStorageConnectionError | CONNECTION_ERROR | Расширение обнаружено, но подключение не удалось |
VilnaStorageError | различные | Базовый класс для всех ошибок storage |
import {
connect,
VilnaStorageNotFoundError,
VilnaStorageConnectionError,
} from "@vilna-io/storage-client";
try {
const client = await connect();
} catch (err) {
if (err instanceof VilnaStorageNotFoundError) {
// Предложить пользователю установить расширение
} else if (err instanceof VilnaStorageConnectionError) {
// Расширение найдено, но не отвечает
}
}- Интеграция виджета — обзор браузерного расширения и процесс интеграции
- Platform API — полная документация API