Sur cette page
Migrer vers common-connect-sdk
Migrez de Bridge vers WebUSB et changez le point d’entrée SDK pour @onekeyfe/hd-common-connect-sdk.
Exigences
- Navigateurs Chromium (Chrome/Edge sur ordinateur)
- Node.js 18+ (LTS recommandé)
Ce qui a changé (en bref)
- Point d’entrée SDK :
@onekeyfe/hd-web-sdk→@onekeyfe/hd-common-connect-sdk - Options d’initialisation : utilisez
env: 'webusb'; plus deconnectSrc(sans iframe) - Parcours d’autorisation : appelez
navigator.usb.requestDevice()(doit être déclenché par une action utilisateur) avec le filtre officielONEKEY_WEBUSB_FILTER - Système d’événements : utilisez les événements
@onekeyfe/hd-coreUI_EVENT / DEVICEpour l’interaction utilisateur (PIN/phrase secrète, etc.) - Suppression de la logique propre à Bridge : retirez
checkBridgeStatus()et toutes les vérifications/demandes Bridge - API métier essentiellement inchangées : par exemple,
searchDevices / getDeviceState / btcGetAddress
Installation
npm i @onekeyfe/hd-common-connect-sdk @onekeyfe/hd-core @onekeyfe/hd-sharedInitialiser (hd-common-connect-sdk + WebUSB)
import HardwareSDK from '@onekeyfe/hd-common-connect-sdk';
const initialized = await HardwareSDK.init({
env: 'webusb',
debug: false,
fetchConfig: true,
});
if (!initialized) throw new Error('SDK initialization failed');- Contrairement à
hd-web-sdk, vous n’avez pas besoin deconnectSrcici (aucune dépendance à une iframe). - Il est recommandé d’activer
fetchConfig: truepour récupérer les configurations de capacités et d’indications de l’appareil.
Connecter les événements d’interface et d’appareil (PIN / phrase secrète / branchement-débranchement)
Utilisez le Gestionnaire d’interface de l’API Core et enregistrez-le avant les appels protégés. Préservez la corrélation des requêtes, répondez uniquement aux demandes de saisie et annulez l’opération sélectionnée lorsque l’utilisateur annule. Les demandes de PIN et de bouton uniquement sur l’appareil ne nécessitent pas de uiResponse.
Abonnez-vous à DEVICE.CONNECT et DEVICE.DISCONNECT pour actualiser l’état de connexion. Ne journalisez pas les données complètes des appareils ou événements d’interface.
Autorisation (sélecteur WebUSB + filtre officiel)
import { ONEKEY_WEBUSB_FILTER } from '@onekeyfe/hd-shared';
// Important: must be triggered by a user gesture (e.g., button click) or the browser will block it
await navigator.usb.requestDevice({ filters: ONEKEY_WEBUSB_FILTER });Énumérer les appareils et premier appel
// 1) Enumerate
const list = await HardwareSDK.searchDevices();
if (!list.success) throw new Error(list.payload.error);
// Select explicitly in the application when more than one device is available.
if (list.payload.length !== 1) throw new Error('Select exactly one device before continuing');
const { connectId } = list.payload[0] ?? {};
if (!connectId) throw new Error("No device connection");
// 2) Confirm deviceId
const state = await HardwareSDK.getDeviceState(connectId);
if (!state.success) throw new Error(state.payload.error);
const resolvedDeviceId = state.payload.identity.deviceId;
if (!resolvedDeviceId) throw new Error("Device has no wallet identity");
// 3) Example: get a BTC address
const r = await HardwareSDK.btcGetAddress(connectId, resolvedDeviceId, {
path: "m/44'/0'/0'/0/0",
coin: 'btc',
showOnOneKey: true,
useEmptyPassphrase: true,
});
if (r.success) {
console.log('BTC address:', r.payload.address);
} else {
console.error('Error:', r.payload.error, r.payload.code);
}Nettoyage et liste de vérification
- Changement de dépendance : supprimer
@onekeyfe/hd-web-sdk, utiliser@onekeyfe/hd-common-connect-sdkà la place - Changements d’initialisation :
- Avant :
env: 'web'+connectSrc: 'https://jssdk.onekey.so/.../' - Après :
env: 'webusb'(sansconnectSrc)
- Avant :
- Supprimer la logique propre à Bridge : par exemple,
checkBridgeStatus(), demandes d’installation/de redémarrage de Bridge - Connectez
UI_EVENT / DEVICE: assurez la gestion des événements PIN/phrase secrète et de branchement/débranchement d’appareil - Une nouvelle autorisation USB nécessite
requestDevice()à partir d’une action utilisateur. Les appareils déjà autorisés peuvent être énumérés sans rouvrir le sélecteur. - Conseil de compatibilité : si
navigator.usbest absent, demandez aux utilisateurs de passer à un navigateur compatible WebUSB
FAQ
- Pas de demande d’autorisation sur HTTP ? → Utilisez HTTPS
- Les demandes d’interface semblent bloquées ? → Abonnez-vous à
UI_EVENTdès le début et répondez viauiResponse - Vous utilisez encore
connectSrcouHdWebSdk.HardwareWebSdk? → Migrez vershd-common-connect-sdk; l’iframe n’est plus nécessaire - Vous avez appelé
requestDevicesans action utilisateur ? → Chrome le bloque ; l’appel doit être déclenché par un clic ou une action similaire
Pour aller plus loin
- Présentation approfondie de WebUSB et exemple complet : Guide de connexion WebUSB
- Événements et interactions : Événement de configuration
- Références et paramètres de l’API : Références de l’API du Hardware SDK, Paramètres communs, Codes d’erreur
Dernière mise à jour le