UNPKG

4.6 kBJavaScriptView Raw
1"use strict";
2var __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};
18var __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};
27var __importDefault = (this && this.__importDefault) || function (mod) {
28 return (mod && mod.__esModule) ? mod : { "default": mod };
29};
30exports.__esModule = true;
31var events_1 = __importDefault(require("events"));
32var hw_transport_node_hid_noevents_1 = require("@ledgerhq/hw-transport-node-hid-noevents");
33var logs_1 = require("@ledgerhq/logs");
34var usb_1 = __importDefault(require("usb"));
35var debounce_1 = __importDefault(require("lodash/debounce"));
36exports["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//# sourceMappingURL=listenDevices.js.map
\No newline at end of file