ultimatedarktower 3.0.0 → 4.0.1
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/CHANGELOG.md +48 -0
- package/README.md +28 -15
- package/dist/esm/index.mjs +1043 -45
- package/dist/src/UltimateDarkTower.d.ts +42 -0
- package/dist/src/UltimateDarkTower.js +102 -2
- package/dist/src/UltimateDarkTower.js.map +1 -1
- package/dist/src/adapters/NodeBluetoothAdapter.js +9 -5
- package/dist/src/adapters/NodeBluetoothAdapter.js.map +1 -1
- package/dist/src/adapters/WebBluetoothAdapter.js +11 -8
- package/dist/src/adapters/WebBluetoothAdapter.js.map +1 -1
- package/dist/src/index.d.ts +8 -0
- package/dist/src/index.js +34 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/sinks/IndexedDBSink.d.ts +26 -0
- package/dist/src/sinks/IndexedDBSink.js +165 -0
- package/dist/src/sinks/IndexedDBSink.js.map +1 -0
- package/dist/src/udtBleConnection.d.ts +24 -1
- package/dist/src/udtBleConnection.js +68 -2
- package/dist/src/udtBleConnection.js.map +1 -1
- package/dist/src/udtBluetoothAdapter.d.ts +6 -6
- package/dist/src/udtBluetoothAdapter.js.map +1 -1
- package/dist/src/udtCommandQueue.d.ts +4 -1
- package/dist/src/udtCommandQueue.js +26 -2
- package/dist/src/udtCommandQueue.js.map +1 -1
- package/dist/src/udtConstants.d.ts +2 -0
- package/dist/src/udtConstants.js +2 -0
- package/dist/src/udtConstants.js.map +1 -1
- package/dist/src/udtDiagnostics.d.ts +122 -0
- package/dist/src/udtDiagnostics.js +228 -0
- package/dist/src/udtDiagnostics.js.map +1 -0
- package/dist/src/udtGameBoard.d.ts +38 -0
- package/dist/src/udtGameBoard.js +86 -0
- package/dist/src/udtGameBoard.js.map +1 -0
- package/dist/src/udtLogger.d.ts +15 -0
- package/dist/src/udtLogger.js +17 -0
- package/dist/src/udtLogger.js.map +1 -1
- package/dist/src/udtSeedParser.d.ts +124 -0
- package/dist/src/udtSeedParser.js +369 -0
- package/dist/src/udtSeedParser.js.map +1 -0
- package/dist/src/udtSystemRandom.d.ts +58 -0
- package/dist/src/udtSystemRandom.js +154 -0
- package/dist/src/udtSystemRandom.js.map +1 -0
- package/dist/src/udtTowerCommands.d.ts +2 -0
- package/dist/src/udtTowerCommands.js +15 -29
- package/dist/src/udtTowerCommands.js.map +1 -1
- package/package.json +5 -1
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser-only durable sink. Persists incidents to IndexedDB so they survive
|
|
3
|
+
* page refresh and tab close.
|
|
4
|
+
*
|
|
5
|
+
* Quota policy: keeps at most `maxIncidents` (default 50). Oldest by
|
|
6
|
+
* triggeredAt are evicted. Reads are async via list() / get().
|
|
7
|
+
*
|
|
8
|
+
* Falls back to a no-op if IndexedDB is unavailable (server-side rendering,
|
|
9
|
+
* old browsers, file:// protocol with restrictive policies, etc.).
|
|
10
|
+
*/
|
|
11
|
+
import type { DiagnosticsSink, IncidentReport } from '../udtDiagnostics';
|
|
12
|
+
export declare class IndexedDBSink implements DiagnosticsSink {
|
|
13
|
+
private maxIncidents;
|
|
14
|
+
private dbPromise;
|
|
15
|
+
private available;
|
|
16
|
+
constructor(maxIncidents?: number);
|
|
17
|
+
private getDb;
|
|
18
|
+
onIncident(report: IncidentReport): Promise<void>;
|
|
19
|
+
list(): Promise<IncidentReport[]>;
|
|
20
|
+
get(incidentId: string): Promise<IncidentReport | undefined>;
|
|
21
|
+
delete(incidentId: string): Promise<void>;
|
|
22
|
+
clear(): Promise<void>;
|
|
23
|
+
/** Insert an externally-supplied report (e.g. from a JSON import). */
|
|
24
|
+
put(report: IncidentReport): Promise<void>;
|
|
25
|
+
private evictOld;
|
|
26
|
+
}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Browser-only durable sink. Persists incidents to IndexedDB so they survive
|
|
4
|
+
* page refresh and tab close.
|
|
5
|
+
*
|
|
6
|
+
* Quota policy: keeps at most `maxIncidents` (default 50). Oldest by
|
|
7
|
+
* triggeredAt are evicted. Reads are async via list() / get().
|
|
8
|
+
*
|
|
9
|
+
* Falls back to a no-op if IndexedDB is unavailable (server-side rendering,
|
|
10
|
+
* old browsers, file:// protocol with restrictive policies, etc.).
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.IndexedDBSink = void 0;
|
|
14
|
+
const DB_NAME = 'udt-diagnostics';
|
|
15
|
+
const DB_VERSION = 1;
|
|
16
|
+
const STORE_NAME = 'incidents';
|
|
17
|
+
function indexedDBAvailable() {
|
|
18
|
+
try {
|
|
19
|
+
return typeof indexedDB !== 'undefined';
|
|
20
|
+
}
|
|
21
|
+
catch (_a) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function openDb() {
|
|
26
|
+
return new Promise((resolve, reject) => {
|
|
27
|
+
const req = indexedDB.open(DB_NAME, DB_VERSION);
|
|
28
|
+
req.onupgradeneeded = () => {
|
|
29
|
+
const db = req.result;
|
|
30
|
+
if (!db.objectStoreNames.contains(STORE_NAME)) {
|
|
31
|
+
const store = db.createObjectStore(STORE_NAME, { keyPath: 'incidentId' });
|
|
32
|
+
store.createIndex('triggeredAt', 'triggeredAt', { unique: false });
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
req.onsuccess = () => resolve(req.result);
|
|
36
|
+
req.onerror = () => reject(req.error);
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
class IndexedDBSink {
|
|
40
|
+
constructor(maxIncidents = 50) {
|
|
41
|
+
this.dbPromise = null;
|
|
42
|
+
this.maxIncidents = maxIncidents;
|
|
43
|
+
this.available = indexedDBAvailable();
|
|
44
|
+
}
|
|
45
|
+
async getDb() {
|
|
46
|
+
if (!this.available)
|
|
47
|
+
return null;
|
|
48
|
+
if (!this.dbPromise) {
|
|
49
|
+
this.dbPromise = openDb().catch(err => {
|
|
50
|
+
this.available = false;
|
|
51
|
+
this.dbPromise = null;
|
|
52
|
+
throw err;
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
try {
|
|
56
|
+
return await this.dbPromise;
|
|
57
|
+
}
|
|
58
|
+
catch (_a) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
async onIncident(report) {
|
|
63
|
+
const db = await this.getDb();
|
|
64
|
+
if (!db)
|
|
65
|
+
return;
|
|
66
|
+
await new Promise((resolve, reject) => {
|
|
67
|
+
const tx = db.transaction(STORE_NAME, 'readwrite');
|
|
68
|
+
const store = tx.objectStore(STORE_NAME);
|
|
69
|
+
store.put(report);
|
|
70
|
+
tx.oncomplete = () => resolve();
|
|
71
|
+
tx.onerror = () => reject(tx.error);
|
|
72
|
+
tx.onabort = () => reject(tx.error);
|
|
73
|
+
}).catch(e => console.error('IndexedDBSink put failed:', e));
|
|
74
|
+
await this.evictOld();
|
|
75
|
+
}
|
|
76
|
+
async list() {
|
|
77
|
+
const db = await this.getDb();
|
|
78
|
+
if (!db)
|
|
79
|
+
return [];
|
|
80
|
+
return new Promise((resolve, reject) => {
|
|
81
|
+
const tx = db.transaction(STORE_NAME, 'readonly');
|
|
82
|
+
const store = tx.objectStore(STORE_NAME);
|
|
83
|
+
const req = store.getAll();
|
|
84
|
+
req.onsuccess = () => {
|
|
85
|
+
const all = req.result.slice();
|
|
86
|
+
all.sort((a, b) => b.triggeredAt - a.triggeredAt);
|
|
87
|
+
resolve(all);
|
|
88
|
+
};
|
|
89
|
+
req.onerror = () => reject(req.error);
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
async get(incidentId) {
|
|
93
|
+
const db = await this.getDb();
|
|
94
|
+
if (!db)
|
|
95
|
+
return undefined;
|
|
96
|
+
return new Promise((resolve, reject) => {
|
|
97
|
+
const tx = db.transaction(STORE_NAME, 'readonly');
|
|
98
|
+
const store = tx.objectStore(STORE_NAME);
|
|
99
|
+
const req = store.get(incidentId);
|
|
100
|
+
req.onsuccess = () => resolve(req.result);
|
|
101
|
+
req.onerror = () => reject(req.error);
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
async delete(incidentId) {
|
|
105
|
+
const db = await this.getDb();
|
|
106
|
+
if (!db)
|
|
107
|
+
return;
|
|
108
|
+
await new Promise((resolve, reject) => {
|
|
109
|
+
const tx = db.transaction(STORE_NAME, 'readwrite');
|
|
110
|
+
tx.objectStore(STORE_NAME).delete(incidentId);
|
|
111
|
+
tx.oncomplete = () => resolve();
|
|
112
|
+
tx.onerror = () => reject(tx.error);
|
|
113
|
+
}).catch(e => console.error('IndexedDBSink delete failed:', e));
|
|
114
|
+
}
|
|
115
|
+
async clear() {
|
|
116
|
+
const db = await this.getDb();
|
|
117
|
+
if (!db)
|
|
118
|
+
return;
|
|
119
|
+
await new Promise((resolve, reject) => {
|
|
120
|
+
const tx = db.transaction(STORE_NAME, 'readwrite');
|
|
121
|
+
tx.objectStore(STORE_NAME).clear();
|
|
122
|
+
tx.oncomplete = () => resolve();
|
|
123
|
+
tx.onerror = () => reject(tx.error);
|
|
124
|
+
}).catch(e => console.error('IndexedDBSink clear failed:', e));
|
|
125
|
+
}
|
|
126
|
+
/** Insert an externally-supplied report (e.g. from a JSON import). */
|
|
127
|
+
async put(report) {
|
|
128
|
+
return this.onIncident(report);
|
|
129
|
+
}
|
|
130
|
+
async evictOld() {
|
|
131
|
+
const db = await this.getDb();
|
|
132
|
+
if (!db)
|
|
133
|
+
return;
|
|
134
|
+
await new Promise((resolve) => {
|
|
135
|
+
const tx = db.transaction(STORE_NAME, 'readwrite');
|
|
136
|
+
const store = tx.objectStore(STORE_NAME);
|
|
137
|
+
const countReq = store.count();
|
|
138
|
+
countReq.onsuccess = () => {
|
|
139
|
+
const total = countReq.result;
|
|
140
|
+
if (total <= this.maxIncidents) {
|
|
141
|
+
resolve();
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
const toRemove = total - this.maxIncidents;
|
|
145
|
+
const idx = store.index('triggeredAt');
|
|
146
|
+
const cursorReq = idx.openCursor();
|
|
147
|
+
let removed = 0;
|
|
148
|
+
cursorReq.onsuccess = () => {
|
|
149
|
+
const cursor = cursorReq.result;
|
|
150
|
+
if (!cursor || removed >= toRemove) {
|
|
151
|
+
resolve();
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
cursor.delete();
|
|
155
|
+
removed++;
|
|
156
|
+
cursor.continue();
|
|
157
|
+
};
|
|
158
|
+
cursorReq.onerror = () => resolve();
|
|
159
|
+
};
|
|
160
|
+
countReq.onerror = () => resolve();
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
exports.IndexedDBSink = IndexedDBSink;
|
|
165
|
+
//# sourceMappingURL=IndexedDBSink.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IndexedDBSink.js","sourceRoot":"","sources":["../../../src/sinks/IndexedDBSink.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Logger } from './udtLogger';
|
|
2
2
|
import { type IBluetoothAdapter } from './udtBluetoothAdapter';
|
|
3
|
+
import type { UdtDiagnosticsRecorder, DisconnectCause, IncidentReport } from './udtDiagnostics';
|
|
3
4
|
export interface TowerEventCallbacks {
|
|
4
5
|
onTowerConnect: () => void;
|
|
5
6
|
onTowerDisconnect: () => void;
|
|
@@ -36,6 +37,8 @@ export declare class UdtBleConnection {
|
|
|
36
37
|
private logger;
|
|
37
38
|
private callbacks;
|
|
38
39
|
private responseProcessor;
|
|
40
|
+
private recorder;
|
|
41
|
+
private snapshotProviders;
|
|
39
42
|
private bluetoothAdapter;
|
|
40
43
|
isConnected: boolean;
|
|
41
44
|
isDisposed: boolean;
|
|
@@ -71,7 +74,27 @@ export declare class UdtBleConnection {
|
|
|
71
74
|
CALIBRATION_FINISHED: boolean;
|
|
72
75
|
LOG_ALL: boolean;
|
|
73
76
|
};
|
|
74
|
-
constructor(logger: Logger, callbacks: TowerEventCallbacks, adapter?: IBluetoothAdapter);
|
|
77
|
+
constructor(logger: Logger, callbacks: TowerEventCallbacks, adapter?: IBluetoothAdapter, recorder?: UdtDiagnosticsRecorder);
|
|
78
|
+
setDiagnosticsSnapshotProviders(providers: {
|
|
79
|
+
commandQueue: () => {
|
|
80
|
+
queueLength: number;
|
|
81
|
+
isProcessing: boolean;
|
|
82
|
+
currentCommand: {
|
|
83
|
+
id: string;
|
|
84
|
+
description?: string;
|
|
85
|
+
timestamp: number;
|
|
86
|
+
} | null;
|
|
87
|
+
};
|
|
88
|
+
towerState: () => unknown;
|
|
89
|
+
brokenSeals: () => string[];
|
|
90
|
+
}): void;
|
|
91
|
+
/**
|
|
92
|
+
* Record a disconnect incident with the recorder. Public so higher layers
|
|
93
|
+
* (e.g. UltimateDarkTower's beforeunload handler) can synthesize causes
|
|
94
|
+
* like 'page_unload' that aren't tied to a specific BLE detection path.
|
|
95
|
+
*/
|
|
96
|
+
recordIncidentPublic(cause: DisconnectCause): IncidentReport | null;
|
|
97
|
+
private recordIncident;
|
|
75
98
|
connect(): Promise<void>;
|
|
76
99
|
disconnect(): Promise<void>;
|
|
77
100
|
/**
|
|
@@ -7,7 +7,12 @@ const udtHelpers_1 = require("./udtHelpers");
|
|
|
7
7
|
const udtTowerState_1 = require("./udtTowerState");
|
|
8
8
|
const udtBluetoothAdapterFactory_1 = require("./udtBluetoothAdapterFactory");
|
|
9
9
|
class UdtBleConnection {
|
|
10
|
-
constructor(logger, callbacks, adapter) {
|
|
10
|
+
constructor(logger, callbacks, adapter, recorder) {
|
|
11
|
+
this.recorder = null;
|
|
12
|
+
// Snapshot providers wired by UltimateDarkTower so the recorder can capture
|
|
13
|
+
// higher-level state (command queue, tower state, broken seals) at the
|
|
14
|
+
// moment a disconnect cause fires.
|
|
15
|
+
this.snapshotProviders = null;
|
|
11
16
|
// Connection state
|
|
12
17
|
this.isConnected = false;
|
|
13
18
|
this.isDisposed = false;
|
|
@@ -51,6 +56,7 @@ class UdtBleConnection {
|
|
|
51
56
|
this.logger = logger;
|
|
52
57
|
this.callbacks = callbacks;
|
|
53
58
|
this.responseProcessor = new udtTowerResponse_1.TowerResponseProcessor();
|
|
59
|
+
this.recorder = recorder !== null && recorder !== void 0 ? recorder : null;
|
|
54
60
|
// Use provided adapter or auto-detect platform
|
|
55
61
|
this.bluetoothAdapter = adapter || udtBluetoothAdapterFactory_1.BluetoothAdapterFactory.create(udtBluetoothAdapterFactory_1.BluetoothPlatform.AUTO);
|
|
56
62
|
// Set up adapter event callbacks
|
|
@@ -64,7 +70,37 @@ class UdtBleConnection {
|
|
|
64
70
|
this.bleAvailabilityChange(available);
|
|
65
71
|
});
|
|
66
72
|
}
|
|
73
|
+
setDiagnosticsSnapshotProviders(providers) {
|
|
74
|
+
this.snapshotProviders = providers;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Record a disconnect incident with the recorder. Public so higher layers
|
|
78
|
+
* (e.g. UltimateDarkTower's beforeunload handler) can synthesize causes
|
|
79
|
+
* like 'page_unload' that aren't tied to a specific BLE detection path.
|
|
80
|
+
*/
|
|
81
|
+
recordIncidentPublic(cause) {
|
|
82
|
+
return this.recordIncident(cause);
|
|
83
|
+
}
|
|
84
|
+
recordIncident(cause) {
|
|
85
|
+
var _a, _b, _c, _d, _e, _f;
|
|
86
|
+
if (!this.recorder || !this.recorder.enabled)
|
|
87
|
+
return null;
|
|
88
|
+
const queueSnapshot = (_b = (_a = this.snapshotProviders) === null || _a === void 0 ? void 0 : _a.commandQueue()) !== null && _b !== void 0 ? _b : {
|
|
89
|
+
queueLength: 0, isProcessing: false, currentCommand: null
|
|
90
|
+
};
|
|
91
|
+
const towerState = ((_d = (_c = this.snapshotProviders) === null || _c === void 0 ? void 0 : _c.towerState()) !== null && _d !== void 0 ? _d : null);
|
|
92
|
+
const brokenSeals = (_f = (_e = this.snapshotProviders) === null || _e === void 0 ? void 0 : _e.brokenSeals()) !== null && _f !== void 0 ? _f : [];
|
|
93
|
+
return this.recorder.recordIncident({
|
|
94
|
+
cause,
|
|
95
|
+
connectionStatus: this.getConnectionStatus(),
|
|
96
|
+
deviceInformation: this.getDeviceInformation(),
|
|
97
|
+
commandQueue: queueSnapshot,
|
|
98
|
+
towerState,
|
|
99
|
+
brokenSeals,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
67
102
|
async connect() {
|
|
103
|
+
var _a;
|
|
68
104
|
if (this.isDisposed) {
|
|
69
105
|
throw new Error('UdtBleConnection instance has been disposed and cannot reconnect');
|
|
70
106
|
}
|
|
@@ -75,6 +111,7 @@ class UdtBleConnection {
|
|
|
75
111
|
this.isConnected = true;
|
|
76
112
|
this.lastSuccessfulCommand = Date.now();
|
|
77
113
|
this.lastBatteryHeartbeat = Date.now();
|
|
114
|
+
(_a = this.recorder) === null || _a === void 0 ? void 0 : _a.beginSession();
|
|
78
115
|
// Read device information after successful connection
|
|
79
116
|
await this.readDeviceInformation();
|
|
80
117
|
if (this.enableConnectionMonitoring) {
|
|
@@ -85,11 +122,14 @@ class UdtBleConnection {
|
|
|
85
122
|
catch (error) {
|
|
86
123
|
this.logger.error(`Tower Connection Error: ${error}`, '[UDT][BLE]');
|
|
87
124
|
this.isConnected = false;
|
|
88
|
-
|
|
125
|
+
throw error;
|
|
89
126
|
}
|
|
90
127
|
}
|
|
91
128
|
async disconnect() {
|
|
92
129
|
this.stopConnectionMonitoring();
|
|
130
|
+
if (this.isConnected) {
|
|
131
|
+
this.recordIncident('user_initiated');
|
|
132
|
+
}
|
|
93
133
|
if (this.bluetoothAdapter.isConnected()) {
|
|
94
134
|
await this.bluetoothAdapter.disconnect();
|
|
95
135
|
this.logger.info("Tower disconnected", '[UDT]');
|
|
@@ -101,6 +141,8 @@ class UdtBleConnection {
|
|
|
101
141
|
* Used by UdtTowerCommands instead of direct characteristic access.
|
|
102
142
|
*/
|
|
103
143
|
async writeCommand(command) {
|
|
144
|
+
var _a;
|
|
145
|
+
(_a = this.recorder) === null || _a === void 0 ? void 0 : _a.recordCommandPayload('cmd_sent', command, { len: command.length });
|
|
104
146
|
return await this.bluetoothAdapter.writeCharacteristic(command);
|
|
105
147
|
}
|
|
106
148
|
/**
|
|
@@ -108,9 +150,13 @@ class UdtBleConnection {
|
|
|
108
150
|
* Called by the adapter's onCharacteristicValueChanged callback.
|
|
109
151
|
*/
|
|
110
152
|
onRxData(receivedData) {
|
|
153
|
+
var _a, _b;
|
|
111
154
|
this.lastSuccessfulCommand = Date.now();
|
|
112
155
|
const { cmdKey } = this.responseProcessor.getTowerCommand(receivedData[0]);
|
|
113
156
|
const isBattery = this.responseProcessor.isBatteryResponse(cmdKey);
|
|
157
|
+
if (((_a = this.recorder) === null || _a === void 0 ? void 0 : _a.enabled) && !isBattery) {
|
|
158
|
+
this.recorder.recordCommandPayload('cmd_response', receivedData, { cmdKey, len: receivedData.length });
|
|
159
|
+
}
|
|
114
160
|
const shouldLogCommand = this.logTowerResponses &&
|
|
115
161
|
this.responseProcessor.shouldLogResponse(cmdKey, this.logTowerResponseConfig) &&
|
|
116
162
|
!isBattery;
|
|
@@ -127,6 +173,7 @@ class UdtBleConnection {
|
|
|
127
173
|
this.lastBatteryHeartbeat = Date.now();
|
|
128
174
|
const millivolts = (0, udtHelpers_1.getMilliVoltsFromTowerResponse)(receivedData);
|
|
129
175
|
const batteryPercentage = (0, udtHelpers_1.milliVoltsToPercentage)(millivolts);
|
|
176
|
+
(_b = this.recorder) === null || _b === void 0 ? void 0 : _b.recordBattery(millivolts, (0, udtHelpers_1.milliVoltsToPercentageNumber)(millivolts));
|
|
130
177
|
const didBatteryLevelChange = this.lastBatteryPercentage !== "" && this.lastBatteryPercentage !== batteryPercentage;
|
|
131
178
|
const batteryLogFrequencyPassed = ((Date.now() - this.lastBatteryLog) >= this.batteryLogFrequency);
|
|
132
179
|
const shouldLog = this.batteryLogEnabled && (this.batteryLogOnChangeOnly ?
|
|
@@ -149,20 +196,24 @@ class UdtBleConnection {
|
|
|
149
196
|
}
|
|
150
197
|
}
|
|
151
198
|
handleTowerStateResponse(receivedData) {
|
|
199
|
+
var _a, _b, _c;
|
|
152
200
|
const dataSkullDropCount = receivedData[udtConstants_1.SKULL_DROP_COUNT_POS];
|
|
153
201
|
const state = (0, udtTowerState_1.rtdt_unpack_state)(receivedData);
|
|
154
202
|
this.logger.debug(`Tower State: ${JSON.stringify(state)} `, '[UDT][BLE]');
|
|
203
|
+
(_a = this.recorder) === null || _a === void 0 ? void 0 : _a.recordEvent('tower_state_response');
|
|
155
204
|
if (this.performingCalibration) {
|
|
156
205
|
this.performingCalibration = false;
|
|
157
206
|
this.performingLongCommand = false;
|
|
158
207
|
this.lastBatteryHeartbeat = Date.now();
|
|
159
208
|
this.callbacks.onCalibrationComplete();
|
|
160
209
|
this.logger.info('Tower calibration complete', '[UDT]');
|
|
210
|
+
(_b = this.recorder) === null || _b === void 0 ? void 0 : _b.recordEvent('calibration_complete');
|
|
161
211
|
}
|
|
162
212
|
if (dataSkullDropCount !== this.towerSkullDropCount) {
|
|
163
213
|
if (dataSkullDropCount) {
|
|
164
214
|
this.callbacks.onSkullDrop(dataSkullDropCount);
|
|
165
215
|
this.logger.info(`Skull drop detected: app:${this.towerSkullDropCount < 0 ? 'empty' : this.towerSkullDropCount} tower:${dataSkullDropCount}`, '[UDT]');
|
|
216
|
+
(_c = this.recorder) === null || _c === void 0 ? void 0 : _c.recordEvent('skull_drop', { count: dataSkullDropCount });
|
|
166
217
|
}
|
|
167
218
|
else {
|
|
168
219
|
this.logger.info(`Skull count reset to ${dataSkullDropCount}`, '[UDT]');
|
|
@@ -190,11 +241,15 @@ class UdtBleConnection {
|
|
|
190
241
|
this.logger.info('Bluetooth availability changed', '[UDT][BLE]');
|
|
191
242
|
if (!available && this.isConnected) {
|
|
192
243
|
this.logger.warn('Bluetooth became unavailable - handling disconnection', '[UDT][BLE]');
|
|
244
|
+
this.recordIncident('bt_unavailable');
|
|
193
245
|
this.handleDisconnection();
|
|
194
246
|
}
|
|
195
247
|
}
|
|
196
248
|
onTowerDeviceDisconnected() {
|
|
197
249
|
this.logger.warn('Tower device disconnected unexpectedly', '[UDT][BLE]');
|
|
250
|
+
if (this.isConnected) {
|
|
251
|
+
this.recordIncident('adapter_event');
|
|
252
|
+
}
|
|
198
253
|
this.handleDisconnection();
|
|
199
254
|
}
|
|
200
255
|
handleDisconnection() {
|
|
@@ -223,11 +278,13 @@ class UdtBleConnection {
|
|
|
223
278
|
}
|
|
224
279
|
}
|
|
225
280
|
checkConnectionHealth() {
|
|
281
|
+
var _a;
|
|
226
282
|
if (!this.isConnected) {
|
|
227
283
|
return;
|
|
228
284
|
}
|
|
229
285
|
if (!this.bluetoothAdapter.isGattConnected()) {
|
|
230
286
|
this.logger.warn('GATT connection lost detected during health check', '[UDT][BLE]');
|
|
287
|
+
this.recordIncident('gatt_health_check');
|
|
231
288
|
this.handleDisconnection();
|
|
232
289
|
return;
|
|
233
290
|
}
|
|
@@ -247,6 +304,13 @@ class UdtBleConnection {
|
|
|
247
304
|
// Check if GATT is still connected via the adapter
|
|
248
305
|
if (this.bluetoothAdapter.isGattConnected()) {
|
|
249
306
|
this.logger.info('GATT connection still available - heartbeat timeout may be temporary', '[UDT][BLE]');
|
|
307
|
+
// Near-miss: the heartbeat went late but the GATT is still up. This is a
|
|
308
|
+
// strong signal worth recording for diagnostics — repeated near-misses
|
|
309
|
+
// before a real drop are the smoking gun.
|
|
310
|
+
(_a = this.recorder) === null || _a === void 0 ? void 0 : _a.recordEvent('heartbeat_late', {
|
|
311
|
+
sinceMs: timeSinceLastBatteryHeartbeat,
|
|
312
|
+
threshold: timeoutThreshold,
|
|
313
|
+
});
|
|
250
314
|
// Reset the last battery heartbeat to current time to give it another chance
|
|
251
315
|
this.lastBatteryHeartbeat = Date.now();
|
|
252
316
|
this.logger.info('Reset battery heartbeat timer - will monitor for another timeout period', '[UDT][BLE]');
|
|
@@ -254,6 +318,7 @@ class UdtBleConnection {
|
|
|
254
318
|
}
|
|
255
319
|
}
|
|
256
320
|
this.logger.warn('Tower possibly disconnected due to battery depletion or power loss', '[UDT][BLE]');
|
|
321
|
+
this.recordIncident('heartbeat_timeout');
|
|
257
322
|
this.handleDisconnection();
|
|
258
323
|
return;
|
|
259
324
|
}
|
|
@@ -261,6 +326,7 @@ class UdtBleConnection {
|
|
|
261
326
|
const timeSinceLastResponse = Date.now() - this.lastSuccessfulCommand;
|
|
262
327
|
if (timeSinceLastResponse > this.connectionTimeoutThreshold) {
|
|
263
328
|
this.logger.warn('General connection timeout detected - no responses received', '[UDT][BLE]');
|
|
329
|
+
this.recordIncident('response_timeout');
|
|
264
330
|
this.handleDisconnection();
|
|
265
331
|
}
|
|
266
332
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"udtBleConnection.js","sourceRoot":"","sources":["../../src/udtBleConnection.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"udtBleConnection.js","sourceRoot":"","sources":["../../src/udtBleConnection.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,31 +32,31 @@ export interface BluetoothAdapterConfig {
|
|
|
32
32
|
* Base class for all Bluetooth-related errors
|
|
33
33
|
*/
|
|
34
34
|
export declare class BluetoothError extends Error {
|
|
35
|
-
readonly originalError?:
|
|
36
|
-
constructor(message: string, originalError?:
|
|
35
|
+
readonly originalError?: unknown | undefined;
|
|
36
|
+
constructor(message: string, originalError?: unknown | undefined);
|
|
37
37
|
}
|
|
38
38
|
/**
|
|
39
39
|
* Error thrown when Bluetooth connection fails or is lost
|
|
40
40
|
*/
|
|
41
41
|
export declare class BluetoothConnectionError extends BluetoothError {
|
|
42
|
-
constructor(message: string, originalError?:
|
|
42
|
+
constructor(message: string, originalError?: unknown);
|
|
43
43
|
}
|
|
44
44
|
/**
|
|
45
45
|
* Error thrown when the requested Bluetooth device cannot be found
|
|
46
46
|
*/
|
|
47
47
|
export declare class BluetoothDeviceNotFoundError extends BluetoothError {
|
|
48
|
-
constructor(message: string, originalError?:
|
|
48
|
+
constructor(message: string, originalError?: unknown);
|
|
49
49
|
}
|
|
50
50
|
/**
|
|
51
51
|
* Error thrown when user cancels the device selection dialog
|
|
52
52
|
* (Primarily used in Web Bluetooth environments)
|
|
53
53
|
*/
|
|
54
54
|
export declare class BluetoothUserCancelledError extends BluetoothError {
|
|
55
|
-
constructor(message: string, originalError?:
|
|
55
|
+
constructor(message: string, originalError?: unknown);
|
|
56
56
|
}
|
|
57
57
|
/**
|
|
58
58
|
* Error thrown when a Bluetooth operation times out
|
|
59
59
|
*/
|
|
60
60
|
export declare class BluetoothTimeoutError extends BluetoothError {
|
|
61
|
-
constructor(message: string, originalError?:
|
|
61
|
+
constructor(message: string, originalError?: unknown);
|
|
62
62
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"udtBluetoothAdapter.js","sourceRoot":"","sources":["../../src/udtBluetoothAdapter.ts"],"names":[],"mappings":";;;AAyCA;;;GAGG;AACH,MAAa,cAAe,SAAQ,KAAK;IACvC,YAAY,OAAe,EAAkB,
|
|
1
|
+
{"version":3,"file":"udtBluetoothAdapter.js","sourceRoot":"","sources":["../../src/udtBluetoothAdapter.ts"],"names":[],"mappings":";;;AAyCA;;;GAGG;AACH,MAAa,cAAe,SAAQ,KAAK;IACvC,YAAY,OAAe,EAAkB,aAAuB;QAClE,KAAK,CAAC,OAAO,CAAC,CAAC;QAD4B,kBAAa,GAAb,aAAa,CAAU;QAElE,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AALD,wCAKC;AAED;;GAEG;AACH,MAAa,wBAAyB,SAAQ,cAAc;IAC1D,YAAY,OAAe,EAAE,aAAuB;QAClD,KAAK,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IACzC,CAAC;CACF;AALD,4DAKC;AAED;;GAEG;AACH,MAAa,4BAA6B,SAAQ,cAAc;IAC9D,YAAY,OAAe,EAAE,aAAuB;QAClD,KAAK,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;IAC7C,CAAC;CACF;AALD,oEAKC;AAED;;;GAGG;AACH,MAAa,2BAA4B,SAAQ,cAAc;IAC7D,YAAY,OAAe,EAAE,aAAuB;QAClD,KAAK,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,6BAA6B,CAAC;IAC5C,CAAC;CACF;AALD,kEAKC;AAED;;GAEG;AACH,MAAa,qBAAsB,SAAQ,cAAc;IACvD,YAAY,OAAe,EAAE,aAAuB;QAClD,KAAK,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AALD,sDAKC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Logger } from './udtLogger';
|
|
2
|
+
import type { UdtDiagnosticsRecorder } from './udtDiagnostics';
|
|
2
3
|
/**
|
|
3
4
|
* Internal command queue for managing sequential tower command processing
|
|
4
5
|
* @private
|
|
@@ -11,7 +12,9 @@ export declare class CommandQueue {
|
|
|
11
12
|
private timeoutHandle;
|
|
12
13
|
private isProcessing;
|
|
13
14
|
private readonly timeoutMs;
|
|
14
|
-
|
|
15
|
+
private recorder;
|
|
16
|
+
constructor(logger: Logger, sendCommandFn: (command: Uint8Array) => Promise<void>, recorder?: UdtDiagnosticsRecorder);
|
|
17
|
+
setRecorder(recorder: UdtDiagnosticsRecorder | null): void;
|
|
15
18
|
/**
|
|
16
19
|
* Enqueue a command for processing
|
|
17
20
|
*/
|
|
@@ -6,7 +6,7 @@ exports.CommandQueue = void 0;
|
|
|
6
6
|
* @private
|
|
7
7
|
*/
|
|
8
8
|
class CommandQueue {
|
|
9
|
-
constructor(logger, sendCommandFn) {
|
|
9
|
+
constructor(logger, sendCommandFn, recorder) {
|
|
10
10
|
this.logger = logger;
|
|
11
11
|
this.sendCommandFn = sendCommandFn;
|
|
12
12
|
this.queue = [];
|
|
@@ -14,12 +14,18 @@ class CommandQueue {
|
|
|
14
14
|
this.timeoutHandle = null;
|
|
15
15
|
this.isProcessing = false;
|
|
16
16
|
this.timeoutMs = 30000; // 30 seconds
|
|
17
|
+
this.recorder = null;
|
|
18
|
+
this.recorder = recorder !== null && recorder !== void 0 ? recorder : null;
|
|
19
|
+
}
|
|
20
|
+
setRecorder(recorder) {
|
|
21
|
+
this.recorder = recorder;
|
|
17
22
|
}
|
|
18
23
|
/**
|
|
19
24
|
* Enqueue a command for processing
|
|
20
25
|
*/
|
|
21
26
|
async enqueue(command, description) {
|
|
22
27
|
return new Promise((resolve, reject) => {
|
|
28
|
+
var _a;
|
|
23
29
|
const queuedCommand = {
|
|
24
30
|
id: `cmd_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,
|
|
25
31
|
command,
|
|
@@ -30,6 +36,11 @@ class CommandQueue {
|
|
|
30
36
|
};
|
|
31
37
|
this.queue.push(queuedCommand);
|
|
32
38
|
this.logger.debug(`Command queued: ${description || 'unnamed'} (queue size: ${this.queue.length})`, '[UDT]');
|
|
39
|
+
(_a = this.recorder) === null || _a === void 0 ? void 0 : _a.recordEvent('cmd_enqueued', {
|
|
40
|
+
id: queuedCommand.id,
|
|
41
|
+
description,
|
|
42
|
+
queueDepth: this.queue.length,
|
|
43
|
+
});
|
|
33
44
|
// Start processing if not already running
|
|
34
45
|
if (!this.isProcessing) {
|
|
35
46
|
this.processNext();
|
|
@@ -40,6 +51,7 @@ class CommandQueue {
|
|
|
40
51
|
* Process the next command in the queue
|
|
41
52
|
*/
|
|
42
53
|
async processNext() {
|
|
54
|
+
var _a, _b;
|
|
43
55
|
if (this.isProcessing || this.queue.length === 0) {
|
|
44
56
|
return;
|
|
45
57
|
}
|
|
@@ -60,6 +72,11 @@ class CommandQueue {
|
|
|
60
72
|
catch (error) {
|
|
61
73
|
// Command failed to send, reject and move to next
|
|
62
74
|
this.clearTimeout();
|
|
75
|
+
(_a = this.recorder) === null || _a === void 0 ? void 0 : _a.recordEvent('cmd_failed', {
|
|
76
|
+
id,
|
|
77
|
+
description,
|
|
78
|
+
error: (_b = error === null || error === void 0 ? void 0 : error.message) !== null && _b !== void 0 ? _b : String(error),
|
|
79
|
+
});
|
|
63
80
|
this.currentCommand = null;
|
|
64
81
|
this.isProcessing = false;
|
|
65
82
|
reject(error);
|
|
@@ -86,9 +103,16 @@ class CommandQueue {
|
|
|
86
103
|
* Handle command timeout
|
|
87
104
|
*/
|
|
88
105
|
onTimeout() {
|
|
106
|
+
var _a;
|
|
89
107
|
if (this.currentCommand) {
|
|
90
|
-
const { description, id } = this.currentCommand;
|
|
108
|
+
const { description, id, timestamp } = this.currentCommand;
|
|
91
109
|
this.logger.warn(`Command timeout after ${this.timeoutMs}ms: ${description || id}`, '[UDT]');
|
|
110
|
+
(_a = this.recorder) === null || _a === void 0 ? void 0 : _a.recordEvent('cmd_timeout', {
|
|
111
|
+
id,
|
|
112
|
+
description,
|
|
113
|
+
ageMs: Date.now() - timestamp,
|
|
114
|
+
queueDepth: this.queue.length,
|
|
115
|
+
});
|
|
92
116
|
const reject = this.currentCommand.reject;
|
|
93
117
|
this.currentCommand = null;
|
|
94
118
|
this.isProcessing = false;
|