@dg-kit/transport-webbluetooth 1.2.1 → 1.3.0
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.
- package/dist/client.d.ts +23 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +86 -0
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/client.d.ts
CHANGED
|
@@ -1,10 +1,28 @@
|
|
|
1
1
|
import type { DeviceClient } from '@dg-kit/core';
|
|
2
2
|
import type { DeviceCommand, DeviceCommandResult, DeviceState } from '@dg-kit/core';
|
|
3
3
|
import { type NavigatorBluetoothLike, type RequestDeviceOptionsLike, type WebBluetoothProtocolAdapter } from '@dg-kit/protocol';
|
|
4
|
+
export type ReconnectState = 'reconnecting' | 'reconnected' | 'failed';
|
|
4
5
|
export interface WebBluetoothDeviceClientOptions {
|
|
5
6
|
protocol: WebBluetoothProtocolAdapter;
|
|
6
7
|
navigatorRef?: NavigatorBluetoothLike;
|
|
7
8
|
requestDeviceOptions?: RequestDeviceOptionsLike;
|
|
9
|
+
/**
|
|
10
|
+
* When true, a passive `gattserverdisconnected` event triggers a silent
|
|
11
|
+
* reconnect attempt using the cached `BluetoothDevice` reference (which
|
|
12
|
+
* survives without re-prompting the user). The user-initiated
|
|
13
|
+
* `disconnect()` path always cancels any in-flight reconnect.
|
|
14
|
+
*/
|
|
15
|
+
autoReconnect?: boolean;
|
|
16
|
+
/** Maximum reconnect attempts before giving up. Defaults to 3. */
|
|
17
|
+
reconnectAttempts?: number;
|
|
18
|
+
/**
|
|
19
|
+
* Delay (ms) before each reconnect attempt. Index N is used for the
|
|
20
|
+
* (N+1)-th attempt. If fewer entries than attempts, the last entry is
|
|
21
|
+
* reused. Defaults to [500, 1500, 4000].
|
|
22
|
+
*/
|
|
23
|
+
reconnectBackoffMs?: number[];
|
|
24
|
+
/** Notified when entering/leaving the reconnecting state. */
|
|
25
|
+
onReconnectStateChange?: (state: ReconnectState) => void;
|
|
8
26
|
}
|
|
9
27
|
export declare class WebBluetoothDeviceClient implements DeviceClient {
|
|
10
28
|
private readonly options;
|
|
@@ -12,6 +30,8 @@ export declare class WebBluetoothDeviceClient implements DeviceClient {
|
|
|
12
30
|
private readonly nav;
|
|
13
31
|
private device;
|
|
14
32
|
private disconnecting;
|
|
33
|
+
private reconnectTimer;
|
|
34
|
+
private reconnecting;
|
|
15
35
|
constructor(options: WebBluetoothDeviceClientOptions);
|
|
16
36
|
connect(): Promise<void>;
|
|
17
37
|
disconnect(): Promise<void>;
|
|
@@ -20,6 +40,9 @@ export declare class WebBluetoothDeviceClient implements DeviceClient {
|
|
|
20
40
|
emergencyStop(): Promise<void>;
|
|
21
41
|
onStateChanged(listener: (state: DeviceState) => void): () => void;
|
|
22
42
|
private readonly onDisconnected;
|
|
43
|
+
private scheduleReconnect;
|
|
44
|
+
private tryReconnect;
|
|
45
|
+
private cancelReconnect;
|
|
23
46
|
private emit;
|
|
24
47
|
}
|
|
25
48
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACpF,OAAO,EAGL,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,2BAA2B,EACjC,MAAM,kBAAkB,CAAC;AAG1B,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,EAAE,2BAA2B,CAAC;IACtC,YAAY,CAAC,EAAE,sBAAsB,CAAC;IACtC,oBAAoB,CAAC,EAAE,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACpF,OAAO,EAGL,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,2BAA2B,EACjC,MAAM,kBAAkB,CAAC;AAG1B,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG,aAAa,GAAG,QAAQ,CAAC;AAKvE,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,EAAE,2BAA2B,CAAC;IACtC,YAAY,CAAC,EAAE,sBAAsB,CAAC;IACtC,oBAAoB,CAAC,EAAE,wBAAwB,CAAC;IAChD;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kEAAkE;IAClE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,6DAA6D;IAC7D,sBAAsB,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;CAC1D;AAED,qBAAa,wBAAyB,YAAW,YAAY;IAQ/C,OAAO,CAAC,QAAQ,CAAC,OAAO;IAPpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA2C;IACrE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAqC;IACzD,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,YAAY,CAAS;gBAEA,OAAO,EAAE,+BAA+B;IAY/D,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAkDxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB3B,QAAQ,IAAI,OAAO,CAAC,WAAW,CAAC;IAIhC,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAI7D,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAIpC,cAAc,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,MAAM,IAAI;IAOlE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAsB7B;IAEF,OAAO,CAAC,iBAAiB;YAuBX,YAAY;IAuC1B,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,IAAI;CAKb"}
|
package/dist/client.js
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import { COYOTE_REQUEST_DEVICE_OPTIONS, } from '@dg-kit/protocol';
|
|
2
2
|
import { getWebBluetoothAvailability } from './availability.js';
|
|
3
|
+
const DEFAULT_RECONNECT_ATTEMPTS = 3;
|
|
4
|
+
const DEFAULT_RECONNECT_BACKOFF_MS = [500, 1500, 4000];
|
|
3
5
|
export class WebBluetoothDeviceClient {
|
|
4
6
|
options;
|
|
5
7
|
listeners = new Set();
|
|
6
8
|
nav;
|
|
7
9
|
device = null;
|
|
8
10
|
disconnecting = false;
|
|
11
|
+
reconnectTimer = null;
|
|
12
|
+
reconnecting = false;
|
|
9
13
|
constructor(options) {
|
|
10
14
|
this.options = options;
|
|
11
15
|
this.nav =
|
|
@@ -18,6 +22,7 @@ export class WebBluetoothDeviceClient {
|
|
|
18
22
|
});
|
|
19
23
|
}
|
|
20
24
|
async connect() {
|
|
25
|
+
this.cancelReconnect();
|
|
21
26
|
const availability = getWebBluetoothAvailability(this.nav);
|
|
22
27
|
if (!availability.supported) {
|
|
23
28
|
throw new Error(availability.reason);
|
|
@@ -57,6 +62,7 @@ export class WebBluetoothDeviceClient {
|
|
|
57
62
|
}
|
|
58
63
|
async disconnect() {
|
|
59
64
|
this.disconnecting = true;
|
|
65
|
+
this.cancelReconnect();
|
|
60
66
|
try {
|
|
61
67
|
await this.options.protocol.emergencyStop();
|
|
62
68
|
const device = this.device;
|
|
@@ -66,6 +72,10 @@ export class WebBluetoothDeviceClient {
|
|
|
66
72
|
await this.options.protocol.onDisconnected();
|
|
67
73
|
}
|
|
68
74
|
finally {
|
|
75
|
+
// A `gattserverdisconnected` event that landed mid-disconnect may have
|
|
76
|
+
// scheduled a reconnect while we were awaiting; clear it again so the
|
|
77
|
+
// timer can't fire after we've returned.
|
|
78
|
+
this.cancelReconnect();
|
|
69
79
|
if (this.device) {
|
|
70
80
|
this.device.removeEventListener('gattserverdisconnected', this.onDisconnected);
|
|
71
81
|
}
|
|
@@ -91,12 +101,88 @@ export class WebBluetoothDeviceClient {
|
|
|
91
101
|
onDisconnected = async () => {
|
|
92
102
|
if (this.disconnecting)
|
|
93
103
|
return;
|
|
104
|
+
if (this.reconnecting)
|
|
105
|
+
return;
|
|
106
|
+
// Tell the protocol we're disconnected so UI / queue stop accepting
|
|
107
|
+
// writes; if the reconnect succeeds the protocol's onConnected will
|
|
108
|
+
// flip it back. Holding the device reference is what lets the
|
|
109
|
+
// reconnect skip the chooser prompt — drop it only after we give up.
|
|
94
110
|
await this.options.protocol.onDisconnected();
|
|
111
|
+
// A user-initiated disconnect may have run while we awaited.
|
|
112
|
+
if (this.disconnecting)
|
|
113
|
+
return;
|
|
114
|
+
if (this.options.autoReconnect && this.device) {
|
|
115
|
+
this.scheduleReconnect(1);
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
95
118
|
if (this.device) {
|
|
96
119
|
this.device.removeEventListener('gattserverdisconnected', this.onDisconnected);
|
|
97
120
|
}
|
|
98
121
|
this.device = null;
|
|
99
122
|
};
|
|
123
|
+
scheduleReconnect(attempt) {
|
|
124
|
+
const maxAttempts = this.options.reconnectAttempts ?? DEFAULT_RECONNECT_ATTEMPTS;
|
|
125
|
+
if (attempt > maxAttempts) {
|
|
126
|
+
this.options.onReconnectStateChange?.('failed');
|
|
127
|
+
if (this.device) {
|
|
128
|
+
this.device.removeEventListener('gattserverdisconnected', this.onDisconnected);
|
|
129
|
+
}
|
|
130
|
+
this.device = null;
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
this.reconnecting = true;
|
|
134
|
+
this.options.onReconnectStateChange?.('reconnecting');
|
|
135
|
+
const backoff = this.options.reconnectBackoffMs ?? DEFAULT_RECONNECT_BACKOFF_MS;
|
|
136
|
+
// Reuse the last entry when attempts outrun the backoff schedule.
|
|
137
|
+
const delay = backoff[Math.min(attempt - 1, backoff.length - 1)] ?? 0;
|
|
138
|
+
this.reconnectTimer = setTimeout(() => {
|
|
139
|
+
void this.tryReconnect(attempt);
|
|
140
|
+
}, delay);
|
|
141
|
+
}
|
|
142
|
+
async tryReconnect(attempt) {
|
|
143
|
+
this.reconnectTimer = null;
|
|
144
|
+
if (this.disconnecting) {
|
|
145
|
+
this.reconnecting = false;
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
const device = this.device;
|
|
149
|
+
const gatt = device?.gatt;
|
|
150
|
+
if (!device || !gatt) {
|
|
151
|
+
this.reconnecting = false;
|
|
152
|
+
this.options.onReconnectStateChange?.('failed');
|
|
153
|
+
this.device = null;
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
try {
|
|
157
|
+
// gatt.connect() is idempotent per the Web Bluetooth spec — calling it
|
|
158
|
+
// when already connected returns the existing server. So we always go
|
|
159
|
+
// through it instead of branching on `gatt.connected`.
|
|
160
|
+
const server = await gatt.connect();
|
|
161
|
+
// User may have hit disconnect while we waited for the GATT server.
|
|
162
|
+
if (this.disconnecting || this.device !== device) {
|
|
163
|
+
this.reconnecting = false;
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
await this.options.protocol.onConnected({ device, server });
|
|
167
|
+
this.reconnecting = false;
|
|
168
|
+
this.options.onReconnectStateChange?.('reconnected');
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
if (this.disconnecting) {
|
|
172
|
+
this.reconnecting = false;
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
this.reconnecting = false;
|
|
176
|
+
this.scheduleReconnect(attempt + 1);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
cancelReconnect() {
|
|
180
|
+
if (this.reconnectTimer !== null) {
|
|
181
|
+
clearTimeout(this.reconnectTimer);
|
|
182
|
+
this.reconnectTimer = null;
|
|
183
|
+
}
|
|
184
|
+
this.reconnecting = false;
|
|
185
|
+
}
|
|
100
186
|
emit(state) {
|
|
101
187
|
for (const listener of this.listeners) {
|
|
102
188
|
listener(state);
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,6BAA6B,GAK9B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { getWebBluetoothAvailability } from './availability.js';
|
|
2
|
-
export { WebBluetoothDeviceClient, type WebBluetoothDeviceClientOptions } from './client.js';
|
|
2
|
+
export { WebBluetoothDeviceClient, type WebBluetoothDeviceClientOptions, type ReconnectState, } from './client.js';
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EACL,wBAAwB,EACxB,KAAK,+BAA+B,EACpC,KAAK,cAAc,GACpB,MAAM,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EACL,wBAAwB,GAGzB,MAAM,aAAa,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dg-kit/transport-webbluetooth",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "Web Bluetooth DeviceClient for DG-Lab Coyote (browser-only)",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "0xNullAI",
|
|
@@ -27,8 +27,8 @@
|
|
|
27
27
|
"access": "public"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@dg-kit/core": "1.
|
|
31
|
-
"@dg-kit/protocol": "1.
|
|
30
|
+
"@dg-kit/core": "1.3.0",
|
|
31
|
+
"@dg-kit/protocol": "1.3.0"
|
|
32
32
|
},
|
|
33
33
|
"scripts": {
|
|
34
34
|
"build": "tsc -p tsconfig.json",
|