930b64f4b2ef00ce10ff8cf0dd95bf3b3e9671fe1d21124c7248f975db571669e6fb6d3eb89ded72f6d3b5dc2a30c46768008a5a84c8477ec74e91b10c7bf1-exec 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. // Type definitions for Web Bluetooth
  2. // Project: https://webbluetoothcg.github.io/web-bluetooth/
  3. // Definitions by: Uri Shaked <https://github.com/urish>
  4. // Xavier Lozinguez <https://github.com/xlozinguez>
  5. // Rob Moran <https://github.com/thegecko>
  6. // David Bjerremose <https://github.com/DaBs>
  7. // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
  8. type BluetoothServiceUUID = number | string;
  9. type BluetoothCharacteristicUUID = number | string;
  10. type BluetoothDescriptorUUID = number | string;
  11. type BluetoothManufacturerData = Map<number, DataView>;
  12. type BluetoothServiceData = Map<BluetoothServiceUUID, DataView>;
  13. interface BluetoothDataFilter {
  14. readonly dataPrefix?: BufferSource | undefined;
  15. readonly mask?: BufferSource | undefined;
  16. }
  17. interface BluetoothManufacturerDataFilter extends BluetoothDataFilter {
  18. companyIdentifier: number;
  19. }
  20. interface BluetoothServiceDataFilter extends BluetoothDataFilter {
  21. service: BluetoothServiceUUID;
  22. }
  23. interface BluetoothLEScanFilter {
  24. readonly name?: string | undefined;
  25. readonly namePrefix?: string | undefined;
  26. readonly services?: BluetoothServiceUUID[] | undefined;
  27. readonly manufacturerData?: BluetoothManufacturerDataFilter[] | undefined;
  28. readonly serviceData?: BluetoothServiceDataFilter[] | undefined;
  29. }
  30. interface BluetoothLEScanOptions {
  31. readonly filters?: BluetoothLEScanFilter[] | undefined;
  32. readonly keepRepeatedDevices?: boolean | undefined;
  33. readonly acceptAllAdvertisements?: boolean | undefined;
  34. }
  35. interface BluetoothLEScan extends BluetoothLEScanOptions {
  36. active: boolean;
  37. stop: () => void;
  38. }
  39. type RequestDeviceOptions = {
  40. filters: BluetoothLEScanFilter[];
  41. optionalServices?: BluetoothServiceUUID[] | undefined;
  42. optionalManufacturerData?: number[] | undefined;
  43. } | {
  44. acceptAllDevices: boolean;
  45. optionalServices?: BluetoothServiceUUID[] | undefined;
  46. optionalManufacturerData?: number[] | undefined;
  47. };
  48. interface BluetoothAdvertisingEvent extends Event {
  49. readonly device: BluetoothDevice;
  50. readonly uuids: BluetoothServiceUUID[];
  51. readonly manufacturerData: BluetoothManufacturerData;
  52. readonly serviceData: BluetoothServiceData;
  53. readonly name?: string | undefined;
  54. readonly appearance?: number | undefined;
  55. readonly rssi?: number | undefined;
  56. readonly txPower?: number | undefined;
  57. }
  58. interface BluetoothRemoteGATTDescriptor {
  59. readonly characteristic: BluetoothRemoteGATTCharacteristic;
  60. readonly uuid: string;
  61. readonly value?: DataView | undefined;
  62. readValue(): Promise<DataView>;
  63. writeValue(value: BufferSource): Promise<void>;
  64. }
  65. interface BluetoothCharacteristicProperties {
  66. readonly broadcast: boolean;
  67. readonly read: boolean;
  68. readonly writeWithoutResponse: boolean;
  69. readonly write: boolean;
  70. readonly notify: boolean;
  71. readonly indicate: boolean;
  72. readonly authenticatedSignedWrites: boolean;
  73. readonly reliableWrite: boolean;
  74. readonly writableAuxiliaries: boolean;
  75. }
  76. interface CharacteristicEventHandlers {
  77. oncharacteristicvaluechanged: (this: this, ev: Event) => any;
  78. }
  79. interface BluetoothRemoteGATTCharacteristic extends EventTarget, CharacteristicEventHandlers {
  80. readonly service: BluetoothRemoteGATTService;
  81. readonly uuid: string;
  82. readonly properties: BluetoothCharacteristicProperties;
  83. readonly value?: DataView | undefined;
  84. getDescriptor(descriptor: BluetoothDescriptorUUID): Promise<BluetoothRemoteGATTDescriptor>;
  85. getDescriptors(descriptor?: BluetoothDescriptorUUID): Promise<BluetoothRemoteGATTDescriptor[]>;
  86. readValue(): Promise<DataView>;
  87. writeValue(value: BufferSource): Promise<void>;
  88. writeValueWithResponse(value: BufferSource): Promise<void>;
  89. writeValueWithoutResponse(value: BufferSource): Promise<void>;
  90. startNotifications(): Promise<BluetoothRemoteGATTCharacteristic>;
  91. stopNotifications(): Promise<BluetoothRemoteGATTCharacteristic>;
  92. addEventListener(type: "characteristicvaluechanged", listener: (this: this, ev: Event) => any, useCapture?: boolean): void;
  93. addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
  94. }
  95. interface ServiceEventHandlers {
  96. onserviceadded: (this: this, ev: Event) => any;
  97. onservicechanged: (this: this, ev: Event) => any;
  98. onserviceremoved: (this: this, ev: Event) => any;
  99. }
  100. interface BluetoothRemoteGATTService extends EventTarget, CharacteristicEventHandlers, ServiceEventHandlers {
  101. readonly device: BluetoothDevice;
  102. readonly uuid: string;
  103. readonly isPrimary: boolean;
  104. getCharacteristic(characteristic: BluetoothCharacteristicUUID): Promise<BluetoothRemoteGATTCharacteristic>;
  105. getCharacteristics(characteristic?: BluetoothCharacteristicUUID): Promise<BluetoothRemoteGATTCharacteristic[]>;
  106. getIncludedService(service: BluetoothServiceUUID): Promise<BluetoothRemoteGATTService>;
  107. getIncludedServices(service?: BluetoothServiceUUID): Promise<BluetoothRemoteGATTService[]>;
  108. addEventListener(type: "serviceadded", listener: (this: this, ev: Event) => any, useCapture?: boolean): void;
  109. addEventListener(type: "servicechanged", listener: (this: this, ev: Event) => any, useCapture?: boolean): void;
  110. addEventListener(type: "serviceremoved", listener: (this: this, ev: Event) => any, useCapture?: boolean): void;
  111. addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
  112. }
  113. interface BluetoothRemoteGATTServer {
  114. readonly device: BluetoothDevice;
  115. readonly connected: boolean;
  116. connect(): Promise<BluetoothRemoteGATTServer>;
  117. disconnect(): void;
  118. getPrimaryService(service: BluetoothServiceUUID): Promise<BluetoothRemoteGATTService>;
  119. getPrimaryServices(service?: BluetoothServiceUUID): Promise<BluetoothRemoteGATTService[]>;
  120. }
  121. interface BluetoothDeviceEventHandlers {
  122. onadvertisementreceived: (this: this, ev: BluetoothAdvertisingEvent) => any;
  123. ongattserverdisconnected: (this: this, ev: Event) => any;
  124. }
  125. interface WatchAdvertisementsOptions {
  126. signal?: AbortSignal;
  127. }
  128. interface BluetoothDevice extends EventTarget, BluetoothDeviceEventHandlers, CharacteristicEventHandlers, ServiceEventHandlers {
  129. readonly id: string;
  130. readonly name?: string | undefined;
  131. readonly gatt?: BluetoothRemoteGATTServer | undefined;
  132. forget(): Promise<void>;
  133. watchAdvertisements(options?: WatchAdvertisementsOptions): Promise<void>;
  134. readonly watchingAdvertisements: boolean;
  135. addEventListener(type: "gattserverdisconnected", listener: (this: this, ev: Event) => any, useCapture?: boolean): void;
  136. addEventListener(type: "advertisementreceived", listener: (this: this, ev: BluetoothAdvertisingEvent) => any, useCapture?: boolean): void;
  137. addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
  138. }
  139. interface Bluetooth extends EventTarget, BluetoothDeviceEventHandlers, CharacteristicEventHandlers, ServiceEventHandlers {
  140. getDevices(): Promise<BluetoothDevice[]>;
  141. getAvailability(): Promise<boolean>;
  142. onavailabilitychanged: (this: this, ev: Event) => any;
  143. readonly referringDevice?: BluetoothDevice | undefined;
  144. requestDevice(options?: RequestDeviceOptions): Promise<BluetoothDevice>;
  145. requestLEScan(options?: BluetoothLEScanOptions): Promise<BluetoothLEScan>;
  146. addEventListener(type: "availabilitychanged", listener: (this: this, ev: Event) => any, useCapture?: boolean): void;
  147. addEventListener(type: "advertisementreceived", listener: (this: this, ev: BluetoothAdvertisingEvent) => any, useCapture?: boolean): void;
  148. addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
  149. }
  150. interface Navigator {
  151. bluetooth: Bluetooth;
  152. }