@ledgerhq/device-transport-kit-web-ble 0.0.0-legacy-speculos-datasource-20250821095840 → 0.0.0-multisig-20250822145545

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/lib/esm/api/data/WebBleConfig.js +1 -1
  2. package/lib/esm/api/data/WebBleConfig.js.map +3 -3
  3. package/lib/esm/api/transport/BleDeviceConnection.js +2 -0
  4. package/lib/esm/api/transport/BleDeviceConnection.js.map +7 -0
  5. package/lib/esm/api/transport/BleDeviceConnection.test.js +2 -0
  6. package/lib/esm/api/transport/BleDeviceConnection.test.js.map +7 -0
  7. package/lib/esm/api/transport/WebBleTransport.js +1 -1
  8. package/lib/esm/api/transport/WebBleTransport.js.map +3 -3
  9. package/lib/esm/api/transport/WebBleTransport.test.js +1 -1
  10. package/lib/esm/api/transport/WebBleTransport.test.js.map +3 -3
  11. package/lib/types/api/data/WebBleConfig.d.ts +1 -3
  12. package/lib/types/api/data/WebBleConfig.d.ts.map +1 -1
  13. package/lib/types/api/transport/BleDeviceConnection.d.ts +98 -0
  14. package/lib/types/api/transport/BleDeviceConnection.d.ts.map +1 -0
  15. package/lib/types/api/transport/BleDeviceConnection.test.d.ts +2 -0
  16. package/lib/types/api/transport/BleDeviceConnection.test.d.ts.map +1 -0
  17. package/lib/types/api/transport/WebBleTransport.d.ts +76 -21
  18. package/lib/types/api/transport/WebBleTransport.d.ts.map +1 -1
  19. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  20. package/package.json +7 -7
  21. package/lib/esm/api/transport/WebBleApduSender.js +0 -2
  22. package/lib/esm/api/transport/WebBleApduSender.js.map +0 -7
  23. package/lib/esm/api/transport/WebBleApduSender.test.js +0 -2
  24. package/lib/esm/api/transport/WebBleApduSender.test.js.map +0 -7
  25. package/lib/types/api/transport/WebBleApduSender.d.ts +0 -34
  26. package/lib/types/api/transport/WebBleApduSender.d.ts.map +0 -1
  27. package/lib/types/api/transport/WebBleApduSender.test.d.ts +0 -2
  28. package/lib/types/api/transport/WebBleApduSender.test.d.ts.map +0 -1
@@ -0,0 +1,98 @@
1
+ import { type ApduReceiverServiceFactory, type ApduResponse, type ApduSenderServiceFactory, type DeviceConnection, type DmkError, type LoggerPublisherService } from "@ledgerhq/device-management-kit";
2
+ import { type Either } from "purify-ts";
3
+ type BleDeviceConnectionConstructorArgs = {
4
+ writeCharacteristic: BluetoothRemoteGATTCharacteristic;
5
+ notifyCharacteristic: BluetoothRemoteGATTCharacteristic;
6
+ apduSenderFactory: ApduSenderServiceFactory;
7
+ apduReceiverFactory: ApduReceiverServiceFactory;
8
+ };
9
+ export type DataViewEvent = Event & {
10
+ target: {
11
+ value: DataView;
12
+ };
13
+ };
14
+ export declare class BleDeviceConnection implements DeviceConnection {
15
+ private _writeCharacteristic;
16
+ private _notifyCharacteristic;
17
+ private readonly _logger;
18
+ private _apduSender;
19
+ private readonly _apduSenderFactory;
20
+ private readonly _apduReceiver;
21
+ private _isDeviceReady;
22
+ private _sendApduPromiseResolver;
23
+ private _settleReconnectionPromiseResolvers;
24
+ constructor({ writeCharacteristic, notifyCharacteristic, apduSenderFactory, apduReceiverFactory, }: BleDeviceConnectionConstructorArgs, loggerServiceFactory: (tag: string) => LoggerPublisherService);
25
+ /**
26
+ * NotifyCharacteristic setter
27
+ * Register a listener on characteristic value change
28
+ * @param notifyCharacteristic
29
+ * @private
30
+ */
31
+ private set notifyCharacteristic(value);
32
+ /**
33
+ * WriteCharacteristic setter
34
+ * @param writeCharacteristic
35
+ * @private
36
+ */
37
+ private set writeCharacteristic(value);
38
+ /**
39
+ * Event handler to setup the mtu size in response of 0x0800000000 APDU
40
+ * @param value
41
+ * @private
42
+ */
43
+ private onReceiveSetupApduResponse;
44
+ /**
45
+ * Main event handler for BLE notify characteristic
46
+ * Call _onReceiveSetupApduResponse if device mtu is not set
47
+ * Call receiveApdu otherwise
48
+ * @param event
49
+ */
50
+ private onNotifyCharacteristicValueChanged;
51
+ /**
52
+ * Setup BleDeviceConnection
53
+ *
54
+ * The device is considered as ready once the mtu had been set
55
+ * APDU 0x0800000000 is used to get this mtu size
56
+ */
57
+ setup(): Promise<void>;
58
+ /**
59
+ * Receive APDU response
60
+ * Resolve sendApdu promise once the framer receives all the frames of the response
61
+ * @param data
62
+ */
63
+ receiveApdu(data: ArrayBuffer): void;
64
+ /**
65
+ * Send apdu if the mtu had been set
66
+ *
67
+ * Get all frames for a given APDU
68
+ * Save a promise that would be completed once the response had been received
69
+ * @param apdu
70
+ * @param triggersDisconnection
71
+ */
72
+ sendApdu(apdu: Uint8Array, triggersDisconnection?: boolean): Promise<Either<DmkError, ApduResponse>>;
73
+ /**
74
+ * Typeguard to check if an event contains target value of type DataView
75
+ *
76
+ * @param event
77
+ * @private
78
+ */
79
+ private isDataViewEvent;
80
+ /**
81
+ * Setup a promise that would be resolved once the device is reconnected
82
+ *
83
+ * @private
84
+ */
85
+ private setupWaitForReconnection;
86
+ /**
87
+ * Reconnect to the device by resetting new ble characteristics
88
+ * @param writeCharacteristic
89
+ * @param notifyCharacteristic
90
+ */
91
+ reconnect(writeCharacteristic: BluetoothRemoteGATTCharacteristic, notifyCharacteristic: BluetoothRemoteGATTCharacteristic): Promise<void>;
92
+ /**
93
+ * Disconnect from the device
94
+ */
95
+ disconnect(): void;
96
+ }
97
+ export {};
98
+ //# sourceMappingURL=BleDeviceConnection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BleDeviceConnection.d.ts","sourceRoot":"","sources":["../../../../src/api/transport/BleDeviceConnection.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,0BAA0B,EAC/B,KAAK,YAAY,EAEjB,KAAK,wBAAwB,EAE7B,KAAK,gBAAgB,EAErB,KAAK,QAAQ,EACb,KAAK,sBAAsB,EAE5B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,MAAM,EAA+B,MAAM,WAAW,CAAC;AAErE,KAAK,kCAAkC,GAAG;IACxC,mBAAmB,EAAE,iCAAiC,CAAC;IACvD,oBAAoB,EAAE,iCAAiC,CAAC;IACxD,iBAAiB,EAAE,wBAAwB,CAAC;IAC5C,mBAAmB,EAAE,0BAA0B,CAAC;CACjD,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG;IAClC,MAAM,EAAE;QACN,KAAK,EAAE,QAAQ,CAAC;KACjB,CAAC;CACH,CAAC;AAEF,qBAAa,mBAAoB,YAAW,gBAAgB;IAC1D,OAAO,CAAC,oBAAoB,CAAoC;IAChE,OAAO,CAAC,qBAAqB,CAAoC;IACjE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,WAAW,CAA2B;IAC9C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA2B;IAC9D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB;IACpD,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,wBAAwB,CAE7B;IACH,OAAO,CAAC,mCAAmC,CAGxC;gBAGD,EACE,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,GACpB,EAAE,kCAAkC,EACrC,oBAAoB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,sBAAsB;IAe/D;;;;;OAKG;IACH,OAAO,KAAK,oBAAoB,QAM/B;IAED;;;;OAIG;IACH,OAAO,KAAK,mBAAmB,QAI9B;IAED;;;;OAIG;IACH,OAAO,CAAC,0BAA0B;IAclC;;;;;OAKG;IACH,OAAO,CAAC,kCAAkC,CAgBxC;IAEF;;;;;OAKG;IACU,KAAK;IAOlB;;;;OAIG;IACH,WAAW,CAAC,IAAI,EAAE,WAAW;IAqB7B;;;;;;;OAOG;IACG,QAAQ,CACZ,IAAI,EAAE,UAAU,EAChB,qBAAqB,CAAC,EAAE,OAAO,GAC9B,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAiD1C;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAQvB;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IAShC;;;;OAIG;IACU,SAAS,CACpB,mBAAmB,EAAE,iCAAiC,EACtD,oBAAoB,EAAE,iCAAiC;IAQzD;;OAEG;IACI,UAAU;CAQlB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=BleDeviceConnection.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BleDeviceConnection.test.d.ts","sourceRoot":"","sources":["../../../../src/api/transport/BleDeviceConnection.test.ts"],"names":[],"mappings":""}
@@ -1,36 +1,91 @@
1
- import { type ApduReceiverServiceFactory, type ApduSenderServiceFactory, type ConnectError, type DeviceModelDataSource, type LoggerPublisherService, type Transport, TransportConnectedDevice, type TransportDiscoveredDevice, type TransportFactory, type TransportIdentifier, UnknownDeviceError } from "@ledgerhq/device-management-kit";
1
+ import { type ApduReceiverServiceFactory, type ApduSenderServiceFactory, type ConnectError, type DeviceId, type DeviceModelDataSource, type DisconnectHandler, type DmkError, type LoggerPublisherService, type Transport, TransportConnectedDevice, type TransportDiscoveredDevice, type TransportFactory, type TransportIdentifier } from "@ledgerhq/device-management-kit";
2
2
  import { type Either } from "purify-ts";
3
3
  import { type Observable } from "rxjs";
4
4
  export declare const webBleIdentifier: TransportIdentifier;
5
5
  export declare class WebBleTransport implements Transport {
6
- private loggerFactory;
6
+ private readonly _deviceModelDataSource;
7
+ private readonly _loggerServiceFactory;
8
+ private readonly _apduSenderFactory;
9
+ private readonly _apduReceiverFactory;
10
+ private readonly _connectedDevices;
11
+ private readonly _internalDevicesById;
12
+ private _deviceConnectionById;
13
+ private _disconnectionHandlersById;
7
14
  private _logger;
8
- private _deviceModelDataSource;
9
- private _apduSenderFactory;
10
- private _apduReceiverFactory;
11
- private _deviceRegistry;
12
- private _connectionMachines;
13
- private _discoveredDevicesSubject;
14
- private _reconnectionPromises;
15
- private _reconnectionTimers;
16
- constructor(deviceModelDataSource: DeviceModelDataSource, loggerFactory: (tag: string) => LoggerPublisherService, apduSenderFactory: ApduSenderServiceFactory, apduReceiverFactory: ApduReceiverServiceFactory);
15
+ private readonly connectionType;
16
+ private readonly identifier;
17
+ constructor(_deviceModelDataSource: DeviceModelDataSource, _loggerServiceFactory: (tag: string) => LoggerPublisherService, _apduSenderFactory: ApduSenderServiceFactory, _apduReceiverFactory: ApduReceiverServiceFactory);
18
+ /**
19
+ * Get the Bluetooth API if supported or error
20
+ * @returns `Either<BleTransportNotSupportedError, Bluetooth>`
21
+ */
22
+ private getBluetoothApi;
17
23
  isSupported(): boolean;
18
24
  getIdentifier(): TransportIdentifier;
19
- startDiscovering(): Observable<TransportDiscoveredDevice>;
20
25
  listenToAvailableDevices(): Observable<TransportDiscoveredDevice[]>;
26
+ /**
27
+ * Get Bluetooth GATT Primary service that is used to get writeCharacteristic and notifyCharacteristic
28
+ * @param bleDevice
29
+ * @private
30
+ */
31
+ private getBleGattService;
32
+ /**
33
+ * BleDeviceInfos to map primary service uuid to device model & characteristics uuid
34
+ * @param bleGattService
35
+ * @private
36
+ */
37
+ private getBleDeviceInfos;
38
+ /**
39
+ * Prompt device selection in navigator
40
+ *
41
+ * @private
42
+ */
43
+ private promptDeviceAccess;
44
+ /**
45
+ * Generate a discovered device from BluetoothDevice, BleGATT primary service and BLE device infos
46
+ * @param bleDeviceInfos
47
+ * @private
48
+ */
49
+ private getDiscoveredDeviceFrom;
50
+ /**
51
+ * Generate an InternalDevice from a unique id, a BluetoothDevice, BleGATT primary service and BLE device infos
52
+ * @param discoveredDevice
53
+ * @param bleDevice
54
+ * @param bleDeviceInfos
55
+ * @param bleGattService
56
+ * @private
57
+ */
58
+ private setInternalDeviceFrom;
59
+ /**
60
+ * Main method to get a device from a button click handler
61
+ * The GATT connection is done here in order to populate TransportDiscoveredDevice with deviceModel
62
+ */
63
+ startDiscovering(): Observable<TransportDiscoveredDevice>;
21
64
  stopDiscovering(): void;
22
- connect(params: {
23
- deviceId: string;
24
- onDisconnect: (deviceId: string) => void;
25
- onReconnect?: (deviceId: string) => Promise<void> | void;
65
+ /**
66
+ * Connect to a BLE device and update the internal state of the associated device
67
+ * Handle ondisconnect event on the device in order to try a reconnection
68
+ */
69
+ connect({ deviceId, onDisconnect, }: {
70
+ deviceId: DeviceId;
71
+ onDisconnect: DisconnectHandler;
26
72
  }): Promise<Either<ConnectError, TransportConnectedDevice>>;
27
- private handleDisconnect;
28
- private _cleanupDevice;
29
- private _cleanupConnection;
30
- private _rebindCharacteristics;
73
+ /**
74
+ * Get the device disconnected handler
75
+ * @param internalDevice WebBleInternalDevice
76
+ * @param deviceConnection BleDeviceConnection
77
+ * @returns async () => void
78
+ * @private
79
+ */
80
+ private _getDeviceDisconnectedHandler;
81
+ /**
82
+ * Disconnect from a BLE device and delete its handlers
83
+ *
84
+ * @param params { connectedDevice: TransportConnectedDevice }
85
+ */
31
86
  disconnect(params: {
32
87
  connectedDevice: TransportConnectedDevice;
33
- }): Promise<Either<UnknownDeviceError, never> | Either<never, undefined>>;
88
+ }): Promise<Either<DmkError, void>>;
34
89
  }
35
90
  export declare const webBleTransportFactory: TransportFactory;
36
91
  //# sourceMappingURL=WebBleTransport.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"WebBleTransport.d.ts","sourceRoot":"","sources":["../../../../src/api/transport/WebBleTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,EAC7B,KAAK,YAAY,EAGjB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAE3B,KAAK,SAAS,EACd,wBAAwB,EAExB,KAAK,yBAAyB,EAC9B,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,kBAAkB,EACnB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,KAAK,MAAM,EAAe,MAAM,WAAW,CAAC;AACrD,OAAO,EAAe,KAAK,UAAU,EAAuB,MAAM,MAAM,CAAC;AAezE,eAAO,MAAM,gBAAgB,EAAE,mBAA+B,CAAC;AAE/D,qBAAa,eAAgB,YAAW,SAAS;IAyC7C,OAAO,CAAC,aAAa;IAxCvB,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,sBAAsB,CAAwB;IACtD,OAAO,CAAC,kBAAkB,CAA2B;IACrD,OAAO,CAAC,oBAAoB,CAA6B;IAEzD,OAAO,CAAC,eAAe,CAenB;IAEJ,OAAO,CAAC,mBAAmB,CAGvB;IACJ,OAAO,CAAC,yBAAyB,CAE7B;IACJ,OAAO,CAAC,qBAAqB,CAGzB;IACJ,OAAO,CAAC,mBAAmB,CAGvB;gBAGF,qBAAqB,EAAE,qBAAqB,EACpC,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,sBAAsB,EAC9D,iBAAiB,EAAE,wBAAwB,EAC3C,mBAAmB,EAAE,0BAA0B;IAQjD,WAAW,IAAI,OAAO;IAItB,aAAa,IAAI,mBAAmB;IAIpC,gBAAgB,IAAI,UAAU,CAAC,yBAAyB,CAAC;IA8CzD,wBAAwB,IAAI,UAAU,CAAC,yBAAyB,EAAE,CAAC;IAQnE,eAAe,IAAI,IAAI;IAIjB,OAAO,CAAC,MAAM,EAAE;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;QACzC,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;KAC1D,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,wBAAwB,CAAC,CAAC;IAqH3D,OAAO,CAAC,gBAAgB;IA+HxB,OAAO,CAAC,cAAc;IAgDtB,OAAO,CAAC,kBAAkB;YAyBZ,sBAAsB;IAkCvB,UAAU,CAAC,MAAM,EAAE;QAC9B,eAAe,EAAE,wBAAwB,CAAC;KAC3C;CAqBF;AAED,eAAO,MAAM,sBAAsB,EAAE,gBAWlC,CAAC"}
1
+ {"version":3,"file":"WebBleTransport.d.ts","sourceRoot":"","sources":["../../../../src/api/transport/WebBleTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,EAE7B,KAAK,YAAY,EAGjB,KAAK,QAAQ,EACb,KAAK,qBAAqB,EAE1B,KAAK,iBAAiB,EACtB,KAAK,QAAQ,EACb,KAAK,sBAAsB,EAG3B,KAAK,SAAS,EACd,wBAAwB,EACxB,KAAK,yBAAyB,EAC9B,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EAEzB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,MAAM,EAAmC,MAAM,WAAW,CAAC;AACzE,OAAO,EAAQ,KAAK,UAAU,EAAoB,MAAM,MAAM,CAAC;AAuB/D,eAAO,MAAM,gBAAgB,EAAE,mBAA+B,CAAC;AAE/D,qBAAa,eAAgB,YAAW,SAAS;IAU7C,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IAGtC,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IAdvC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAyB;IAC3D,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAsC;IAC3E,OAAO,CAAC,qBAAqB,CAAqC;IAClE,OAAO,CAAC,0BAA0B,CAA4B;IAC9D,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;IACxD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAyC;gBAGjD,sBAAsB,EAAE,qBAAqB,EAC7C,qBAAqB,EAAE,CACtC,GAAG,EAAE,MAAM,KACR,sBAAsB,EACV,kBAAkB,EAAE,wBAAwB,EAC5C,oBAAoB,EAAE,0BAA0B;IASnE;;;OAGG;IACH,OAAO,CAAC,eAAe;IAQvB,WAAW,IAAI,OAAO;IAStB,aAAa,IAAI,mBAAmB;IAIpC,wBAAwB,IAAI,UAAU,CAAC,yBAAyB,EAAE,CAAC;IAInE;;;;OAIG;YACW,iBAAiB;IAmB/B;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAoBzB;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAwB1B;;;;OAIG;IACH,OAAO,CAAC,uBAAuB;IAU/B;;;;;;;OAOG;IACH,OAAO,CAAC,qBAAqB;IAoB7B;;;OAGG;IACH,gBAAgB,IAAI,UAAU,CAAC,yBAAyB,CAAC;IAoDzD,eAAe,IAAI,IAAI;IAIvB;;;OAGG;IACG,OAAO,CAAC,EACZ,QAAQ,EACR,YAAY,GACb,EAAE;QACD,QAAQ,EAAE,QAAQ,CAAC;QACnB,YAAY,EAAE,iBAAiB,CAAC;KACjC,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,wBAAwB,CAAC,CAAC;IA+E3D;;;;;;OAMG;IACH,OAAO,CAAC,6BAA6B;IA0CrC;;;;OAIG;IACG,UAAU,CAAC,MAAM,EAAE;QACvB,eAAe,EAAE,wBAAwB,CAAC;KAC3C,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;CAgDpC;AAED,eAAO,MAAM,sBAAsB,EAAE,gBAWlC,CAAC"}