46 lines
3.0 KiB
Markdown
46 lines
3.0 KiB
Markdown
# SHiNE Browser Plugin Wallet
|
||
|
||
Chrome-compatible Manifest V3 plugin for SHiNE wallet-session login.
|
||
|
||
## Что уже умеет
|
||
|
||
- создать `wallet-session` через `StartTrustedDeviceLogin`;
|
||
- показать код подключения;
|
||
- дождаться подтверждения на доверенном устройстве;
|
||
- принять `session-only` payload без передачи `deviceKey/rootKey/blockchainKey`;
|
||
- сохранить `sessionPriv/sessionKey/sessionId` в локальном хранилище plugin;
|
||
- восстанавливать session через `SessionChallenge -> SessionLogin`;
|
||
- держать wallet-state в `background service worker`, а side panel использовать как UI.
|
||
- принимать не адрес сервера, а логин серверного аккаунта SHiNE и находить точный `https://...` / `wss://...` адрес через его PDA.
|
||
- внедрять legacy `window.solana` / `window.phantom.solana` provider для сайтов.
|
||
- регистрировать кошелёк как `Wallet Standard` wallet для dapp, которые ищут стандартные кошельки.
|
||
|
||
## Как загрузить локально
|
||
|
||
1. Открой `chrome://extensions/`
|
||
2. Включи `Developer mode`
|
||
3. Нажми `Load unpacked`
|
||
4. Выбери папку `SHiNE-browser-plugin-wallet/`
|
||
5. Нажми на иконку расширения в toolbar: откроется side panel SHiNE Wallet
|
||
|
||
## Ограничения текущего этапа
|
||
|
||
- plugin пока не держит постоянный фоновый WS-канал без активного действия пользователя, но хранит wallet-state в `background`;
|
||
- на этом этапе реализован только `session-only login`;
|
||
- запросы на подпись будут следующим этапом.
|
||
- pairing-пароль, если он используется, должен генерироваться в формате `sha256$<hex>` от строки `shine-pairing|loginLower|password`.
|
||
- сторона side panel в Chromium выбирается самим браузером/пользователем; extension не закрепляет панель принудительно слева.
|
||
- для совместимости с некоторыми dapp расширение одновременно держит и legacy provider, и Wallet Standard регистрацию.
|
||
|
||
## Сборка crypto bundle
|
||
|
||
Для обычной загрузки plugin это не нужно: bundled crypto-файл уже лежит в репозитории.
|
||
|
||
Если понадобится пересобрать локальный crypto bundle:
|
||
|
||
```bash
|
||
npm install
|
||
npx esbuild js/lib/vendor/noble-ed25519-entry.js --bundle --format=esm --platform=browser --outfile=js/lib/vendor/noble-ed25519-bundle.js
|
||
npx esbuild js/lib/vendor/solana-publickey-entry.js --bundle --format=esm --platform=browser --outfile=js/lib/vendor/solana-publickey-bundle.js
|
||
```
|