types.ts (2234B)
1 import type { ResolveErrorMsg } from "@radroots/utils"; 2 import type { BleErrorMessage } from "./error.js"; 3 4 export type BleMessageData = string | ArrayBuffer | ArrayBufferView; 5 6 export type BleMessageInput = BleMessageData; 7 8 export type BleMessageEncoding = "utf-8"; 9 10 export type BleMessage = { 11 bytes: Uint8Array; 12 timestamp_ms: number; 13 }; 14 15 export type BleAvailability = { 16 supported: boolean; 17 secure_context: boolean; 18 window_available: boolean; 19 navigator_available: boolean; 20 bluetooth_available: boolean; 21 }; 22 23 export type BleAvailabilityState = BleAvailability & { 24 adapter_available: boolean | "unknown"; 25 }; 26 27 export type BlePermissionState = PermissionState | "unknown"; 28 29 export type BleServiceProfile = { 30 service_uuid: string; 31 client_write_uuid: string; 32 client_notify_uuid: string; 33 }; 34 35 export const BLE_MESSAGE_PROFILE: BleServiceProfile = { 36 service_uuid: "7e0b0001-7f62-49e1-9b3f-8e7a2f30a1d1", 37 client_write_uuid: "7e0b0002-7f62-49e1-9b3f-8e7a2f30a1d1", 38 client_notify_uuid: "7e0b0003-7f62-49e1-9b3f-8e7a2f30a1d1" 39 }; 40 41 export type BleDeviceInfo = { 42 id: string; 43 name?: string; 44 connected: boolean; 45 }; 46 47 export type BleMessageHandler = (message: BleMessage) => void; 48 export type BleDisconnectHandler = (reason: BleErrorMessage) => void; 49 50 export type BleConnectOptions = { 51 signal?: AbortSignal; 52 timeout_ms?: number; 53 profile?: BleServiceProfile; 54 name_prefix?: string; 55 accept_all_devices?: boolean; 56 }; 57 58 export type BleWriteOptions = { 59 signal?: AbortSignal; 60 timeout_ms?: number; 61 without_response?: boolean; 62 }; 63 64 export interface IBleSession { 65 get_active(): boolean; 66 get_device_info(): BleDeviceInfo; 67 send_message(message: BleMessageInput, opts?: BleWriteOptions): Promise<ResolveErrorMsg<void, BleErrorMessage>>; 68 disconnect(): Promise<void>; 69 set_on_message(handler?: BleMessageHandler): void; 70 set_on_disconnect(handler?: BleDisconnectHandler): void; 71 } 72 73 export interface IBle { 74 availability(): BleAvailability; 75 availability_state(): Promise<BleAvailabilityState>; 76 permission_state(): Promise<BlePermissionState>; 77 connect(opts?: BleConnectOptions): Promise<ResolveErrorMsg<IBleSession, BleErrorMessage>>; 78 }