1 | "use strict";
|
2 | var __read = (this && this.__read) || function (o, n) {
|
3 | var m = typeof Symbol === "function" && o[Symbol.iterator];
|
4 | if (!m) return o;
|
5 | var i = m.call(o), r, ar = [], e;
|
6 | try {
|
7 | while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
8 | }
|
9 | catch (error) { e = { error: error }; }
|
10 | finally {
|
11 | try {
|
12 | if (r && !r.done && (m = i["return"])) m.call(i);
|
13 | }
|
14 | finally { if (e) throw e.error; }
|
15 | }
|
16 | return ar;
|
17 | };
|
18 | var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
19 | if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
20 | if (ar || !(i in from)) {
|
21 | if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
22 | ar[i] = from[i];
|
23 | }
|
24 | }
|
25 | return to.concat(ar || Array.prototype.slice.call(from));
|
26 | };
|
27 | var __importDefault = (this && this.__importDefault) || function (mod) {
|
28 | return (mod && mod.__esModule) ? mod : { "default": mod };
|
29 | };
|
30 | exports.__esModule = true;
|
31 | var events_1 = __importDefault(require("events"));
|
32 | var hw_transport_node_hid_noevents_1 = require("@ledgerhq/hw-transport-node-hid-noevents");
|
33 | var logs_1 = require("@ledgerhq/logs");
|
34 | var usb_1 = __importDefault(require("usb"));
|
35 | var debounce_1 = __importDefault(require("lodash/debounce"));
|
36 | exports["default"] = (function (delay, listenDevicesPollingSkip) {
|
37 | var events = new events_1["default"]();
|
38 | events.setMaxListeners(0);
|
39 | var listDevices = (0, hw_transport_node_hid_noevents_1.getDevices)();
|
40 | var flatDevice = function (d) { return d.path; };
|
41 | var getFlatDevices = function () { return __spreadArray([], __read(new Set((0, hw_transport_node_hid_noevents_1.getDevices)().map(function (d) { return flatDevice(d); }))), false); };
|
42 | var getDeviceByPaths = function (paths) {
|
43 | return listDevices.find(function (d) { return paths.includes(flatDevice(d)); });
|
44 | };
|
45 | var lastDevices = getFlatDevices();
|
46 | var poll = function () {
|
47 | if (!listenDevicesPollingSkip()) {
|
48 | (0, logs_1.log)("hid-listen", "Polling for added or removed devices");
|
49 | var changeFound = false;
|
50 | var currentDevices_1 = getFlatDevices();
|
51 | var newDevices = currentDevices_1.filter(function (d) { return !lastDevices.includes(d); });
|
52 | if (newDevices.length > 0) {
|
53 | (0, logs_1.log)("hid-listen", "New device found:", newDevices);
|
54 | listDevices = (0, hw_transport_node_hid_noevents_1.getDevices)();
|
55 | events.emit("add", getDeviceByPaths(newDevices));
|
56 | changeFound = true;
|
57 | }
|
58 | else {
|
59 | (0, logs_1.log)("hid-listen", "No new device found");
|
60 | }
|
61 | var removeDevices_1 = lastDevices.filter(function (d) { return !currentDevices_1.includes(d); });
|
62 | if (removeDevices_1.length > 0) {
|
63 | (0, logs_1.log)("hid-listen", "Removed device found:", removeDevices_1);
|
64 | events.emit("remove", getDeviceByPaths(removeDevices_1));
|
65 | listDevices = listDevices.filter(function (d) { return !removeDevices_1.includes(flatDevice(d)); });
|
66 | changeFound = true;
|
67 | }
|
68 | else {
|
69 | (0, logs_1.log)("hid-listen", "No removed device found");
|
70 | }
|
71 | if (changeFound) {
|
72 | lastDevices = currentDevices_1;
|
73 | }
|
74 | }
|
75 | else {
|
76 | (0, logs_1.log)("hid-listen", "Polling skipped, re-debouncing");
|
77 | debouncedPoll();
|
78 | }
|
79 | };
|
80 | var debouncedPoll = (0, debounce_1["default"])(poll, delay);
|
81 | var attachDetected = function (device) {
|
82 | (0, logs_1.log)("hid-listen", "Device add detected:", device);
|
83 | debouncedPoll();
|
84 | };
|
85 | usb_1["default"].on("attach", attachDetected);
|
86 | (0, logs_1.log)("hid-listen", "attach listener added");
|
87 | var detachDetected = function (device) {
|
88 | (0, logs_1.log)("hid-listen", "Device removal detected:", device);
|
89 | debouncedPoll();
|
90 | };
|
91 | usb_1["default"].on("detach", detachDetected);
|
92 | (0, logs_1.log)("hid-listen", "detach listener added");
|
93 | return {
|
94 | stop: function () {
|
95 | (0, logs_1.log)("hid-listen", "Stop received, removing listeners and cancelling pending debounced polls");
|
96 | debouncedPoll.cancel();
|
97 | usb_1["default"].removeListener("attach", attachDetected);
|
98 | usb_1["default"].removeListener("detach", detachDetected);
|
99 | },
|
100 | events: events
|
101 | };
|
102 | });
|
103 |
|
\ | No newline at end of file |