feat(frontend): écran Appareils et parcours d'appairage nommé (#77 F1/F2)
Expose la gestion des appareils appairés introduite en B1-B4, sur une surface unique partagée par le web et le desktop. - Écran Appareils : liste, renommage, révocation unitaire ou globale, activité formatée, panneau de code éphémère. - Le parcours d'appairage demande un nom d'appareil, pour qu'une révocation porte sur quelque chose d'identifiable par l'utilisateur. - Gateways DeviceGateway en trois adapters (Tauri, HTTP, Mock), le port restant le seul contrat connu de la feature. Les erreurs sont mappées localement et le message du serveur n'est jamais affiché tel quel : un échec d'appairage ne doit pas devenir un oracle pour qui teste des codes. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
42
frontend/src/adapters/device.ts
Normal file
42
frontend/src/adapters/device.ts
Normal file
@ -0,0 +1,42 @@
|
||||
/**
|
||||
* Tauri-backed device gateway (ticket #77, lot F2).
|
||||
*
|
||||
* The desktop app hosts the embedded server, so these commands reach the same
|
||||
* device use cases through the composition root — **never** over HTTP to its own
|
||||
* server (carnet #77, cadrage Architecture).
|
||||
*
|
||||
* Command names and envelopes are those B3 landed (`commands.rs`).
|
||||
*/
|
||||
|
||||
import { invoke } from "@tauri-apps/api/core";
|
||||
|
||||
import type { PairedDevice, PairingCode } from "@/domain";
|
||||
import type { DeviceGateway } from "@/ports";
|
||||
|
||||
/** Backend `DeviceListDto` — the list is wrapped, not returned bare. */
|
||||
interface DeviceListDto {
|
||||
devices: PairedDevice[];
|
||||
}
|
||||
|
||||
export class TauriDeviceGateway implements DeviceGateway {
|
||||
async listDevices(): Promise<PairedDevice[]> {
|
||||
const dto = await invoke<DeviceListDto>("list_devices");
|
||||
return dto.devices;
|
||||
}
|
||||
|
||||
createPairingCode(): Promise<PairingCode> {
|
||||
return invoke<PairingCode>("create_pairing_code");
|
||||
}
|
||||
|
||||
renameDevice(deviceId: string, name: string): Promise<void> {
|
||||
return invoke<void>("rename_device", { request: { deviceId, name } });
|
||||
}
|
||||
|
||||
revokeDevice(deviceId: string): Promise<void> {
|
||||
return invoke<void>("revoke_device", { request: { deviceId } });
|
||||
}
|
||||
|
||||
revokeAllDevices(): Promise<void> {
|
||||
return invoke<void>("revoke_all_devices");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user