BSO Resolver
BSO Resolver перетворює доменні імена .bso у відповідні відкриті ключі, зчитуючи записи Bitsocial TXT, що зберігаються в ENS. Він надає спільний клієнт viem, постійне кешування та працює як у середовищах Node.js, так і в браузері.
- GitHub: bitsocialnet/bso-resolver
- Ліцензія: лише GPL-2.0
монтаж
npm install @bitsocial/bso-resolver
Створення резольвера
Створіть екземпляр резолвера, передавши об’єкт конфігурації конструктору:
const resolver = new BsoResolver({ key, provider, dataPath });
| Параметр | Необхідно | Опис |
|---|---|---|
key | Так | Ідентифікатор екземпляра резолвера. |
provider | Так | Транспортна конфігурація (див. нижче). |
dataPath | Ні | Каталог для файлу кешу SQLite (лише Node.js). |
Параметри постачальника
Параметр provider приймає три формати:
"viem"-- Використовує громадський транспорт за умовчанням, наданий viem.- HTTP(S) URL -- підключення через кінцеву точку JSON-RPC (наприклад,
https://mainnet.infura.io/v3/YOUR_KEY). - URL-адреса WebSocket -- підключення через кінцеву точку RPC WebSocket (наприклад,
wss://mainnet.infura.io/ws/v3/YOUR_KEY).
методи
resolve({ name, abortSignal? })
Шукає назву .bso і повертає відповідний відкритий ключ. Додатковий AbortSignal можна передати для скасування тривалих запитів.
canResolve({ name })
Повертає логічне значення, яке вказує, чи здатний розпізнавач обробити вказане ім’я. Використовуйте це, щоб перевірити підтримку перед спробою повного вирішення.
destroy()
Розриває резолвер, закриваючи підключення до бази даних і звільняючи ресурси. Викличте це, коли резольвер більше не потрібен.
Кешування
Вирішені імена автоматично кешуються, щоб зменшити надлишкові пошуки в мережі. Сервер кешування вибирається на основі середовища виконання:
| Навколишнє середовище | Сервер | Примітки |
|---|---|---|
| Node.js | SQLite | Зберігається в dataPath. Використовує режим WAL для одночасного доступу. |
| Браузер | IndexedDB | Використовує власні транзакції IndexedDB. |
| Запасний | У пам’яті Map | Використовується, коли ні SQLite, ні IndexedDB недоступні. |
Усі записи кешу мають одногодинний TTL і автоматично видаляються після закінчення терміну дії.
Інтеграція з pkc-js
Резолвер можна підключити безпосередньо до pkc-js за допомогою параметра nameResolvers, увімкнувши прозоре визначення імен .bso під час пошуку ключів:
const pkc = new Pkc({
nameResolvers: [resolver],
// ...other options
});
Паралелізм
Резолвер розроблений таким чином, щоб бути безпечним при одночасному використанні:
- Єдиний спільний клієнт viem дозволяє уникнути зайвих з’єднань.
- SQLite працює в режимі WAL (Write-Ahead Logging), що дозволяє одночасне читання без блокування.
- Кешування веб-переглядача покладається на власні транзакції IndexedDB для ізоляції.
Точки входу на платформу
Пакет постачає окремі точки входу для Node.js і збірок браузера. Збірники, які підтримують поле exports у package.json, автоматично виберуть правильний.