@ledgerhq/hw-transport-node-hid-singleton 6.27.4 → 6.28.0-next.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/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +14 -0
- package/README.md +1 -1
- package/lib/TransportNodeHid.d.ts +0 -1
- package/lib/TransportNodeHid.d.ts.map +1 -1
- package/lib/TransportNodeHid.js +0 -2
- package/lib/TransportNodeHid.js.map +1 -1
- package/lib/listenDevices.d.ts +1 -1
- package/lib/listenDevices.d.ts.map +1 -1
- package/lib/listenDevices.js +27 -32
- package/lib/listenDevices.js.map +1 -1
- package/lib-es/TransportNodeHid.d.ts +0 -1
- package/lib-es/TransportNodeHid.d.ts.map +1 -1
- package/lib-es/TransportNodeHid.js +0 -2
- package/lib-es/TransportNodeHid.js.map +1 -1
- package/lib-es/listenDevices.d.ts +1 -1
- package/lib-es/listenDevices.d.ts.map +1 -1
- package/lib-es/listenDevices.js +27 -29
- package/lib-es/listenDevices.js.map +1 -1
- package/package.json +8 -8
- package/src/TransportNodeHid.ts +0 -2
- package/src/listenDevices.ts +39 -32
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
@ledgerhq/hw-transport-node-hid-singleton:build: cache hit, replaying output
|
|
1
|
+
@ledgerhq/hw-transport-node-hid-singleton:build: cache hit, replaying output 59c100a4da0a4c30
|
|
2
2
|
@ledgerhq/hw-transport-node-hid-singleton:build:
|
|
3
3
|
@ledgerhq/hw-transport-node-hid-singleton:build: > @ledgerhq/hw-transport-node-hid-singleton@6.27.4 build /home/runner/work/ledger-live/ledger-live/libs/ledgerjs/packages/hw-transport-node-hid-singleton
|
|
4
4
|
@ledgerhq/hw-transport-node-hid-singleton:build: > tsc && tsc -m ES6 --outDir lib-es
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# @ledgerhq/hw-transport-node-hid-singleton
|
|
2
2
|
|
|
3
|
+
## 6.28.0-next.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#903](https://github.com/LedgerHQ/ledger-live/pull/903) [`41d82e7bb`](https://github.com/LedgerHQ/ledger-live/commit/41d82e7bb3a30fb4a82c45ece43d13242342f91c) Thanks [@juan-cortes](https://github.com/juan-cortes)! - Replaced 'usb-detection' with 'node-usb' in singleton transport
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies [[`ae5e33e15`](https://github.com/LedgerHQ/ledger-live/commit/ae5e33e15e8a107d0ba8a3688a63eda2c0d43ce7)]:
|
|
12
|
+
- @ledgerhq/errors@6.10.2-next.0
|
|
13
|
+
- @ledgerhq/devices@7.0.1-next.0
|
|
14
|
+
- @ledgerhq/hw-transport@6.27.4-next.0
|
|
15
|
+
- @ledgerhq/hw-transport-node-hid-noevents@6.27.4-next.0
|
|
16
|
+
|
|
3
17
|
## 6.27.4
|
|
4
18
|
|
|
5
19
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
Allows to communicate with Ledger Hardware Wallets.
|
|
9
9
|
|
|
10
|
-
**\[Node]**/Electron **(HID)** – uses `node-hid` and `usb
|
|
10
|
+
**\[Node]**/Electron **(HID)** – uses `node-hid` and `node-usb`. Keep transport opened and re-use it as a singleton, one device at a time on a computer but more robust implementation.
|
|
11
11
|
|
|
12
12
|
***
|
|
13
13
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import TransportNodeHidNoEvents from "@ledgerhq/hw-transport-node-hid-noevents";
|
|
3
3
|
import type { Observer, DescriptorEvent, Subscription } from "@ledgerhq/hw-transport";
|
|
4
|
-
export * as usbDetect from "usb-detection";
|
|
5
4
|
/**
|
|
6
5
|
* node-hid Transport implementation
|
|
7
6
|
* @example
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransportNodeHid.d.ts","sourceRoot":"","sources":["../src/TransportNodeHid.ts"],"names":[],"mappings":";AACA,OAAO,wBAEN,MAAM,0CAA0C,CAAC;AAClD,OAAO,KAAK,EACV,QAAQ,EACR,eAAe,EACf,YAAY,EACb,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"TransportNodeHid.d.ts","sourceRoot":"","sources":["../src/TransportNodeHid.ts"],"names":[],"mappings":";AACA,OAAO,wBAEN,MAAM,0CAA0C,CAAC;AAClD,OAAO,KAAK,EACV,QAAQ,EACR,eAAe,EACf,YAAY,EACb,MAAM,wBAAwB,CAAC;AAwBhC;;;;;;GAMG;AAEH,MAAM,CAAC,OAAO,OAAO,yBAA0B,SAAQ,wBAAwB;IAC7E,qBAAqB,UAAS;IAC9B;;OAEG;IACH,MAAM,CAAC,WAAW,yBAAwC;IAE1D;;OAEG;IACH,MAAM,CAAC,IAAI,qBAAiC;IAE5C;OACG;IACH,MAAM,CAAC,MAAM,aAAc,SAAS,gBAAgB,GAAG,CAAC,CAAC,KAAG,YAAY,CAqDtE;IAEF;;OAEG;WACU,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAW5C;;OAEG;WACU,UAAU;IASvB;;OAEG;IACH,MAAM,CAAC,IAAI,IAAI,OAAO,CAAC,yBAAyB,CAAC;IAqCjD,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAI5C;;;;OAIG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAO7C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAMvB"}
|
package/lib/TransportNodeHid.js
CHANGED
|
@@ -88,14 +88,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
88
88
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
89
89
|
};
|
|
90
90
|
exports.__esModule = true;
|
|
91
|
-
exports.usbDetect = void 0;
|
|
92
91
|
var node_hid_1 = __importDefault(require("node-hid"));
|
|
93
92
|
var hw_transport_node_hid_noevents_1 = __importStar(require("@ledgerhq/hw-transport-node-hid-noevents"));
|
|
94
93
|
var logs_1 = require("@ledgerhq/logs");
|
|
95
94
|
var devices_1 = require("@ledgerhq/devices");
|
|
96
95
|
var errors_1 = require("@ledgerhq/errors");
|
|
97
96
|
var listenDevices_1 = require("./listenDevices");
|
|
98
|
-
exports.usbDetect = __importStar(require("usb-detection"));
|
|
99
97
|
var transportInstance;
|
|
100
98
|
var DISCONNECT_TIMEOUT = 5000;
|
|
101
99
|
var disconnectTimeout;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransportNodeHid.js","sourceRoot":"","sources":["../src/TransportNodeHid.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TransportNodeHid.js","sourceRoot":"","sources":["../src/TransportNodeHid.ts"],"names":[],"mappings":"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"}
|
package/lib/listenDevices.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listenDevices.d.ts","sourceRoot":"","sources":["../src/listenDevices.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"listenDevices.d.ts","sourceRoot":"","sources":["../src/listenDevices.ts"],"names":[],"mappings":"AAIA,oBAAY,MAAM,GAAG;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAUF,eAAO,MAAM,cAAc,MAAO,MAAM,SAEvC,CAAC;AAqBF,eAAO,MAAM,aAAa,iBACV,MAAM,KAAK,IAAI,mBACZ,MAAM,KAAK,IAAI,eAqCjC,CAAC"}
|
package/lib/listenDevices.js
CHANGED
|
@@ -1,73 +1,68 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
exports.__esModule = true;
|
|
6
3
|
exports.listenDevices = exports.setUsbDebounce = void 0;
|
|
7
|
-
var
|
|
4
|
+
var usb_1 = require("usb");
|
|
8
5
|
var devices_1 = require("@ledgerhq/devices");
|
|
9
6
|
var logs_1 = require("@ledgerhq/logs");
|
|
10
7
|
var deviceToLog = function (_a) {
|
|
11
|
-
var
|
|
12
|
-
return "productId=".concat(
|
|
8
|
+
var idProduct = _a.deviceDescriptor.idProduct, busNumber = _a.busNumber, deviceAddress = _a.deviceAddress;
|
|
9
|
+
return "productId=".concat(idProduct, " busNumber=").concat(busNumber, " deviceAddress=").concat(deviceAddress);
|
|
13
10
|
};
|
|
14
11
|
var usbDebounce = 1000;
|
|
15
12
|
var setUsbDebounce = function (n) {
|
|
16
13
|
usbDebounce = n;
|
|
17
14
|
};
|
|
18
15
|
exports.setUsbDebounce = setUsbDebounce;
|
|
19
|
-
var
|
|
20
|
-
var
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
16
|
+
var mapRawDevice = function (_a) {
|
|
17
|
+
var locationId = _a.busNumber, deviceAddress = _a.deviceAddress, _b = _a.deviceDescriptor, vendorId = _b.idVendor, productId = _b.idProduct, serialNumber = _b.iSerialNumber;
|
|
18
|
+
return ({
|
|
19
|
+
locationId: locationId,
|
|
20
|
+
vendorId: vendorId,
|
|
21
|
+
productId: productId,
|
|
22
|
+
deviceName: "",
|
|
23
|
+
manufacturer: "",
|
|
24
|
+
serialNumber: serialNumber,
|
|
25
|
+
deviceAddress: deviceAddress
|
|
26
|
+
});
|
|
26
27
|
};
|
|
27
|
-
//
|
|
28
|
-
process.on("exit", function () {
|
|
29
|
-
if (monitoring) {
|
|
30
|
-
// redeem the monitoring so the process can be terminated.
|
|
31
|
-
usb_detection_1["default"].stopMonitoring();
|
|
32
|
-
}
|
|
33
|
-
});
|
|
28
|
+
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
|
34
29
|
var listenDevices = function (onAdd, onRemove) {
|
|
35
|
-
var unmonitor = monitor();
|
|
36
|
-
var addEvent = "add:" + devices_1.ledgerUSBVendorId;
|
|
37
|
-
var removeEvent = "remove:" + devices_1.ledgerUSBVendorId;
|
|
38
30
|
var timeout;
|
|
39
31
|
var add = function (device) {
|
|
32
|
+
if (device.deviceDescriptor.idVendor !== devices_1.ledgerUSBVendorId)
|
|
33
|
+
return;
|
|
40
34
|
(0, logs_1.log)("usb-detection", "add: " + deviceToLog(device));
|
|
41
35
|
if (!timeout) {
|
|
42
36
|
// a time is needed for the device to actually be connectable over HID..
|
|
43
37
|
// we also take this time to not emit the device yet and potentially cancel it if a remove happens.
|
|
44
38
|
timeout = setTimeout(function () {
|
|
45
|
-
onAdd(device);
|
|
39
|
+
onAdd(mapRawDevice(device));
|
|
46
40
|
timeout = null;
|
|
47
41
|
}, usbDebounce);
|
|
48
42
|
}
|
|
49
43
|
};
|
|
50
44
|
var remove = function (device) {
|
|
45
|
+
if (device.deviceDescriptor.idVendor !== devices_1.ledgerUSBVendorId)
|
|
46
|
+
return;
|
|
51
47
|
(0, logs_1.log)("usb-detection", "remove: " + deviceToLog(device));
|
|
52
48
|
if (timeout) {
|
|
53
49
|
clearTimeout(timeout);
|
|
54
50
|
timeout = null;
|
|
55
51
|
}
|
|
56
52
|
else {
|
|
57
|
-
onRemove(device);
|
|
53
|
+
onRemove(mapRawDevice(device));
|
|
58
54
|
}
|
|
59
55
|
};
|
|
60
|
-
|
|
61
|
-
|
|
56
|
+
usb_1.usb.on("attach", add);
|
|
57
|
+
usb_1.usb.on("detach", remove);
|
|
62
58
|
return function () {
|
|
63
59
|
if (timeout)
|
|
64
60
|
clearTimeout(timeout);
|
|
65
|
-
|
|
66
|
-
usb_detection_1["default"].off(addEvent, add);
|
|
67
|
-
// @ts-expect-error not all EventEmitter methods are covered in its definition file
|
|
68
|
-
usb_detection_1["default"].off(removeEvent, remove);
|
|
69
|
-
unmonitor();
|
|
61
|
+
usb_1.usb.unrefHotplugEvents();
|
|
70
62
|
};
|
|
71
63
|
};
|
|
72
64
|
exports.listenDevices = listenDevices;
|
|
65
|
+
process.on("exit", function () {
|
|
66
|
+
usb_1.usb.unrefHotplugEvents();
|
|
67
|
+
});
|
|
73
68
|
//# sourceMappingURL=listenDevices.js.map
|
package/lib/listenDevices.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listenDevices.js","sourceRoot":"","sources":["../src/listenDevices.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"listenDevices.js","sourceRoot":"","sources":["../src/listenDevices.ts"],"names":[],"mappings":";;;AAAA,2BAA0B;AAC1B,6CAAsD;AACtD,uCAAqC;AAYrC,IAAM,WAAW,GAAG,UAAC,EAIpB;QAHqB,SAAS,gCAAA,EAC7B,SAAS,eAAA,EACT,aAAa,mBAAA;IAEb,OAAA,oBAAa,SAAS,wBAAc,SAAS,4BAAkB,aAAa,CAAE;AAA9E,CAA8E,CAAC;AAEjF,IAAI,WAAW,GAAG,IAAI,CAAC;AAChB,IAAM,cAAc,GAAG,UAAC,CAAS;IACtC,WAAW,GAAG,CAAC,CAAC;AAClB,CAAC,CAAC;AAFW,QAAA,cAAc,kBAEzB;AAEF,IAAM,YAAY,GAAG,UAAC,EAQT;QAPA,UAAU,eAAA,EACrB,aAAa,mBAAA,EACb,wBAIC,EAHW,QAAQ,cAAA,EACP,SAAS,eAAA,EACL,YAAY,mBAAA;IAEL,OAAA,CAAC;QACzB,UAAU,YAAA;QACV,QAAQ,UAAA;QACR,SAAS,WAAA;QACT,UAAU,EAAE,EAAE;QACd,YAAY,EAAE,EAAE;QAChB,YAAY,cAAA;QACZ,aAAa,eAAA;KACd,CAAC;AARwB,CAQxB,CAAC;AAEH,6EAA6E;AACtE,IAAM,aAAa,GAAG,UAC3B,KAA6B,EAC7B,QAAgC;IAEhC,IAAI,OAAO,CAAC;IAEZ,IAAM,GAAG,GAAG,UAAC,MAAM;QACjB,IAAI,MAAM,CAAC,gBAAgB,CAAC,QAAQ,KAAK,2BAAiB;YAAE,OAAO;QACnE,IAAA,UAAG,EAAC,eAAe,EAAE,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;QAEpD,IAAI,CAAC,OAAO,EAAE;YACZ,wEAAwE;YACxE,mGAAmG;YACnG,OAAO,GAAG,UAAU,CAAC;gBACnB,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC5B,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC,EAAE,WAAW,CAAC,CAAC;SACjB;IACH,CAAC,CAAC;IAEF,IAAM,MAAM,GAAG,UAAC,MAAM;QACpB,IAAI,MAAM,CAAC,gBAAgB,CAAC,QAAQ,KAAK,2BAAiB;YAAE,OAAO;QACnE,IAAA,UAAG,EAAC,eAAe,EAAE,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;QAEvD,IAAI,OAAO,EAAE;YACX,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,OAAO,GAAG,IAAI,CAAC;SAChB;aAAM;YACL,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;SAChC;IACH,CAAC,CAAC;IAEF,SAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACtB,SAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAEzB,OAAO;QACL,IAAI,OAAO;YAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QACnC,SAAG,CAAC,kBAAkB,EAAE,CAAC;IAC3B,CAAC,CAAC;AACJ,CAAC,CAAC;AAvCW,QAAA,aAAa,iBAuCxB;AAEF,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE;IACjB,SAAG,CAAC,kBAAkB,EAAE,CAAC;AAC3B,CAAC,CAAC,CAAC"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import TransportNodeHidNoEvents from "@ledgerhq/hw-transport-node-hid-noevents";
|
|
3
3
|
import type { Observer, DescriptorEvent, Subscription } from "@ledgerhq/hw-transport";
|
|
4
|
-
export * as usbDetect from "usb-detection";
|
|
5
4
|
/**
|
|
6
5
|
* node-hid Transport implementation
|
|
7
6
|
* @example
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransportNodeHid.d.ts","sourceRoot":"","sources":["../src/TransportNodeHid.ts"],"names":[],"mappings":";AACA,OAAO,wBAEN,MAAM,0CAA0C,CAAC;AAClD,OAAO,KAAK,EACV,QAAQ,EACR,eAAe,EACf,YAAY,EACb,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"TransportNodeHid.d.ts","sourceRoot":"","sources":["../src/TransportNodeHid.ts"],"names":[],"mappings":";AACA,OAAO,wBAEN,MAAM,0CAA0C,CAAC;AAClD,OAAO,KAAK,EACV,QAAQ,EACR,eAAe,EACf,YAAY,EACb,MAAM,wBAAwB,CAAC;AAwBhC;;;;;;GAMG;AAEH,MAAM,CAAC,OAAO,OAAO,yBAA0B,SAAQ,wBAAwB;IAC7E,qBAAqB,UAAS;IAC9B;;OAEG;IACH,MAAM,CAAC,WAAW,yBAAwC;IAE1D;;OAEG;IACH,MAAM,CAAC,IAAI,qBAAiC;IAE5C;OACG;IACH,MAAM,CAAC,MAAM,aAAc,SAAS,gBAAgB,GAAG,CAAC,CAAC,KAAG,YAAY,CAqDtE;IAEF;;OAEG;WACU,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAW5C;;OAEG;WACU,UAAU;IASvB;;OAEG;IACH,MAAM,CAAC,IAAI,IAAI,OAAO,CAAC,yBAAyB,CAAC;IAqCjD,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAI5C;;;;OAIG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAO7C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAMvB"}
|
|
@@ -66,8 +66,6 @@ import { log } from "@ledgerhq/logs";
|
|
|
66
66
|
import { identifyUSBProductId } from "@ledgerhq/devices";
|
|
67
67
|
import { CantOpenDevice } from "@ledgerhq/errors";
|
|
68
68
|
import { listenDevices } from "./listenDevices";
|
|
69
|
-
import * as usbDetect_1 from "usb-detection";
|
|
70
|
-
export { usbDetect_1 as usbDetect };
|
|
71
69
|
var transportInstance;
|
|
72
70
|
var DISCONNECT_TIMEOUT = 5000;
|
|
73
71
|
var disconnectTimeout;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransportNodeHid.js","sourceRoot":"","sources":["../src/TransportNodeHid.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,wBAAwB,EAAE,EAC/B,UAAU,GACX,MAAM,0CAA0C,CAAC;AAMlD,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"TransportNodeHid.js","sourceRoot":"","sources":["../src/TransportNodeHid.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listenDevices.d.ts","sourceRoot":"","sources":["../src/listenDevices.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"listenDevices.d.ts","sourceRoot":"","sources":["../src/listenDevices.ts"],"names":[],"mappings":"AAIA,oBAAY,MAAM,GAAG;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAUF,eAAO,MAAM,cAAc,MAAO,MAAM,SAEvC,CAAC;AAqBF,eAAO,MAAM,aAAa,iBACV,MAAM,KAAK,IAAI,mBACZ,MAAM,KAAK,IAAI,eAqCjC,CAAC"}
|
package/lib-es/listenDevices.js
CHANGED
|
@@ -1,65 +1,63 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { usb } from "usb";
|
|
2
2
|
import { ledgerUSBVendorId } from "@ledgerhq/devices";
|
|
3
3
|
import { log } from "@ledgerhq/logs";
|
|
4
4
|
var deviceToLog = function (_a) {
|
|
5
|
-
var
|
|
6
|
-
return "productId=".concat(
|
|
5
|
+
var idProduct = _a.deviceDescriptor.idProduct, busNumber = _a.busNumber, deviceAddress = _a.deviceAddress;
|
|
6
|
+
return "productId=".concat(idProduct, " busNumber=").concat(busNumber, " deviceAddress=").concat(deviceAddress);
|
|
7
7
|
};
|
|
8
8
|
var usbDebounce = 1000;
|
|
9
9
|
export var setUsbDebounce = function (n) {
|
|
10
10
|
usbDebounce = n;
|
|
11
11
|
};
|
|
12
|
-
var
|
|
13
|
-
var
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
12
|
+
var mapRawDevice = function (_a) {
|
|
13
|
+
var locationId = _a.busNumber, deviceAddress = _a.deviceAddress, _b = _a.deviceDescriptor, vendorId = _b.idVendor, productId = _b.idProduct, serialNumber = _b.iSerialNumber;
|
|
14
|
+
return ({
|
|
15
|
+
locationId: locationId,
|
|
16
|
+
vendorId: vendorId,
|
|
17
|
+
productId: productId,
|
|
18
|
+
deviceName: "",
|
|
19
|
+
manufacturer: "",
|
|
20
|
+
serialNumber: serialNumber,
|
|
21
|
+
deviceAddress: deviceAddress
|
|
22
|
+
});
|
|
19
23
|
};
|
|
20
|
-
//
|
|
21
|
-
process.on("exit", function () {
|
|
22
|
-
if (monitoring) {
|
|
23
|
-
// redeem the monitoring so the process can be terminated.
|
|
24
|
-
usbDetect.stopMonitoring();
|
|
25
|
-
}
|
|
26
|
-
});
|
|
24
|
+
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
|
27
25
|
export var listenDevices = function (onAdd, onRemove) {
|
|
28
|
-
var unmonitor = monitor();
|
|
29
|
-
var addEvent = "add:" + ledgerUSBVendorId;
|
|
30
|
-
var removeEvent = "remove:" + ledgerUSBVendorId;
|
|
31
26
|
var timeout;
|
|
32
27
|
var add = function (device) {
|
|
28
|
+
if (device.deviceDescriptor.idVendor !== ledgerUSBVendorId)
|
|
29
|
+
return;
|
|
33
30
|
log("usb-detection", "add: " + deviceToLog(device));
|
|
34
31
|
if (!timeout) {
|
|
35
32
|
// a time is needed for the device to actually be connectable over HID..
|
|
36
33
|
// we also take this time to not emit the device yet and potentially cancel it if a remove happens.
|
|
37
34
|
timeout = setTimeout(function () {
|
|
38
|
-
onAdd(device);
|
|
35
|
+
onAdd(mapRawDevice(device));
|
|
39
36
|
timeout = null;
|
|
40
37
|
}, usbDebounce);
|
|
41
38
|
}
|
|
42
39
|
};
|
|
43
40
|
var remove = function (device) {
|
|
41
|
+
if (device.deviceDescriptor.idVendor !== ledgerUSBVendorId)
|
|
42
|
+
return;
|
|
44
43
|
log("usb-detection", "remove: " + deviceToLog(device));
|
|
45
44
|
if (timeout) {
|
|
46
45
|
clearTimeout(timeout);
|
|
47
46
|
timeout = null;
|
|
48
47
|
}
|
|
49
48
|
else {
|
|
50
|
-
onRemove(device);
|
|
49
|
+
onRemove(mapRawDevice(device));
|
|
51
50
|
}
|
|
52
51
|
};
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
usb.on("attach", add);
|
|
53
|
+
usb.on("detach", remove);
|
|
55
54
|
return function () {
|
|
56
55
|
if (timeout)
|
|
57
56
|
clearTimeout(timeout);
|
|
58
|
-
|
|
59
|
-
usbDetect.off(addEvent, add);
|
|
60
|
-
// @ts-expect-error not all EventEmitter methods are covered in its definition file
|
|
61
|
-
usbDetect.off(removeEvent, remove);
|
|
62
|
-
unmonitor();
|
|
57
|
+
usb.unrefHotplugEvents();
|
|
63
58
|
};
|
|
64
59
|
};
|
|
60
|
+
process.on("exit", function () {
|
|
61
|
+
usb.unrefHotplugEvents();
|
|
62
|
+
});
|
|
65
63
|
//# sourceMappingURL=listenDevices.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listenDevices.js","sourceRoot":"","sources":["../src/listenDevices.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"listenDevices.js","sourceRoot":"","sources":["../src/listenDevices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAYrC,IAAM,WAAW,GAAG,UAAC,EAIpB;QAHqB,SAAS,gCAAA,EAC7B,SAAS,eAAA,EACT,aAAa,mBAAA;IAEb,OAAA,oBAAa,SAAS,wBAAc,SAAS,4BAAkB,aAAa,CAAE;AAA9E,CAA8E,CAAC;AAEjF,IAAI,WAAW,GAAG,IAAI,CAAC;AACvB,MAAM,CAAC,IAAM,cAAc,GAAG,UAAC,CAAS;IACtC,WAAW,GAAG,CAAC,CAAC;AAClB,CAAC,CAAC;AAEF,IAAM,YAAY,GAAG,UAAC,EAQT;QAPA,UAAU,eAAA,EACrB,aAAa,mBAAA,EACb,wBAIC,EAHW,QAAQ,cAAA,EACP,SAAS,eAAA,EACL,YAAY,mBAAA;IAEL,OAAA,CAAC;QACzB,UAAU,YAAA;QACV,QAAQ,UAAA;QACR,SAAS,WAAA;QACT,UAAU,EAAE,EAAE;QACd,YAAY,EAAE,EAAE;QAChB,YAAY,cAAA;QACZ,aAAa,eAAA;KACd,CAAC;AARwB,CAQxB,CAAC;AAEH,6EAA6E;AAC7E,MAAM,CAAC,IAAM,aAAa,GAAG,UAC3B,KAA6B,EAC7B,QAAgC;IAEhC,IAAI,OAAO,CAAC;IAEZ,IAAM,GAAG,GAAG,UAAC,MAAM;QACjB,IAAI,MAAM,CAAC,gBAAgB,CAAC,QAAQ,KAAK,iBAAiB;YAAE,OAAO;QACnE,GAAG,CAAC,eAAe,EAAE,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;QAEpD,IAAI,CAAC,OAAO,EAAE;YACZ,wEAAwE;YACxE,mGAAmG;YACnG,OAAO,GAAG,UAAU,CAAC;gBACnB,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC5B,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC,EAAE,WAAW,CAAC,CAAC;SACjB;IACH,CAAC,CAAC;IAEF,IAAM,MAAM,GAAG,UAAC,MAAM;QACpB,IAAI,MAAM,CAAC,gBAAgB,CAAC,QAAQ,KAAK,iBAAiB;YAAE,OAAO;QACnE,GAAG,CAAC,eAAe,EAAE,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;QAEvD,IAAI,OAAO,EAAE;YACX,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,OAAO,GAAG,IAAI,CAAC;SAChB;aAAM;YACL,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;SAChC;IACH,CAAC,CAAC;IAEF,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACtB,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAEzB,OAAO;QACL,IAAI,OAAO;YAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QACnC,GAAG,CAAC,kBAAkB,EAAE,CAAC;IAC3B,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE;IACjB,GAAG,CAAC,kBAAkB,EAAE,CAAC;AAC3B,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ledgerhq/hw-transport-node-hid-singleton",
|
|
3
|
-
"version": "6.
|
|
4
|
-
"description": "Ledger Hardware Wallet Node implementation of the communication layer, using node-hid and usb
|
|
3
|
+
"version": "6.28.0-next.0",
|
|
4
|
+
"description": "Ledger Hardware Wallet Node implementation of the communication layer, using node-hid and node-usb",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Ledger",
|
|
7
7
|
"LedgerWallet",
|
|
@@ -27,14 +27,14 @@
|
|
|
27
27
|
"types": "lib/TransportNodeHid.d.ts",
|
|
28
28
|
"license": "Apache-2.0",
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@ledgerhq/devices": "^7.0.0",
|
|
31
|
-
"@ledgerhq/errors": "^6.10.
|
|
32
|
-
"@ledgerhq/hw-transport": "^6.27.
|
|
33
|
-
"@ledgerhq/hw-transport-node-hid-noevents": "^6.27.
|
|
34
|
-
"@ledgerhq/logs": "^6.10.
|
|
30
|
+
"@ledgerhq/devices": "^7.0.1-next.0",
|
|
31
|
+
"@ledgerhq/errors": "^6.10.2-next.0",
|
|
32
|
+
"@ledgerhq/hw-transport": "^6.27.4-next.0",
|
|
33
|
+
"@ledgerhq/hw-transport-node-hid-noevents": "^6.27.4-next.0",
|
|
34
|
+
"@ledgerhq/logs": "^6.10.0",
|
|
35
35
|
"lodash": "^4.17.21",
|
|
36
36
|
"node-hid": "2.1.1",
|
|
37
|
-
"usb
|
|
37
|
+
"usb": "2.5.1"
|
|
38
38
|
},
|
|
39
39
|
"gitHead": "dd0dea64b58e5a9125c8a422dcffd29e5ef6abec",
|
|
40
40
|
"scripts": {
|
package/src/TransportNodeHid.ts
CHANGED
|
@@ -12,8 +12,6 @@ import { identifyUSBProductId } from "@ledgerhq/devices";
|
|
|
12
12
|
import { CantOpenDevice } from "@ledgerhq/errors";
|
|
13
13
|
import { listenDevices } from "./listenDevices";
|
|
14
14
|
|
|
15
|
-
export * as usbDetect from "usb-detection";
|
|
16
|
-
|
|
17
15
|
let transportInstance;
|
|
18
16
|
|
|
19
17
|
const DISCONNECT_TIMEOUT = 5000;
|
package/src/listenDevices.ts
CHANGED
|
@@ -1,82 +1,89 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { usb } from "usb";
|
|
2
2
|
import { ledgerUSBVendorId } from "@ledgerhq/devices";
|
|
3
3
|
import { log } from "@ledgerhq/logs";
|
|
4
|
+
|
|
4
5
|
export type Device = {
|
|
5
6
|
locationId: number;
|
|
6
7
|
vendorId: number;
|
|
7
8
|
productId: number;
|
|
8
9
|
deviceName: string;
|
|
9
10
|
manufacturer: string;
|
|
10
|
-
serialNumber:
|
|
11
|
+
serialNumber: number;
|
|
11
12
|
deviceAddress: number;
|
|
12
13
|
};
|
|
13
14
|
|
|
14
|
-
const deviceToLog = ({
|
|
15
|
-
|
|
15
|
+
const deviceToLog = ({
|
|
16
|
+
deviceDescriptor: { idProduct },
|
|
17
|
+
busNumber,
|
|
18
|
+
deviceAddress,
|
|
19
|
+
}) =>
|
|
20
|
+
`productId=${idProduct} busNumber=${busNumber} deviceAddress=${deviceAddress}`;
|
|
16
21
|
|
|
17
22
|
let usbDebounce = 1000;
|
|
18
23
|
export const setUsbDebounce = (n: number) => {
|
|
19
24
|
usbDebounce = n;
|
|
20
25
|
};
|
|
21
|
-
let monitoring = false;
|
|
22
|
-
|
|
23
|
-
const monitor = () => {
|
|
24
|
-
if (!monitoring) {
|
|
25
|
-
monitoring = true;
|
|
26
|
-
usbDetect.startMonitoring();
|
|
27
|
-
}
|
|
28
26
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
27
|
+
const mapRawDevice = ({
|
|
28
|
+
busNumber: locationId,
|
|
29
|
+
deviceAddress,
|
|
30
|
+
deviceDescriptor: {
|
|
31
|
+
idVendor: vendorId,
|
|
32
|
+
idProduct: productId,
|
|
33
|
+
iSerialNumber: serialNumber,
|
|
34
|
+
},
|
|
35
|
+
}: usb.Device): Device => ({
|
|
36
|
+
locationId, // Nb we dont use this but the mapping might be incorrect.
|
|
37
|
+
vendorId,
|
|
38
|
+
productId,
|
|
39
|
+
deviceName: "",
|
|
40
|
+
manufacturer: "",
|
|
41
|
+
serialNumber,
|
|
42
|
+
deviceAddress,
|
|
38
43
|
});
|
|
44
|
+
|
|
45
|
+
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
|
39
46
|
export const listenDevices = (
|
|
40
47
|
onAdd: (arg0: Device) => void,
|
|
41
48
|
onRemove: (arg0: Device) => void
|
|
42
49
|
) => {
|
|
43
|
-
const unmonitor = monitor();
|
|
44
|
-
const addEvent = "add:" + ledgerUSBVendorId;
|
|
45
|
-
const removeEvent = "remove:" + ledgerUSBVendorId;
|
|
46
50
|
let timeout;
|
|
47
51
|
|
|
48
52
|
const add = (device) => {
|
|
53
|
+
if (device.deviceDescriptor.idVendor !== ledgerUSBVendorId) return;
|
|
49
54
|
log("usb-detection", "add: " + deviceToLog(device));
|
|
50
55
|
|
|
51
56
|
if (!timeout) {
|
|
52
57
|
// a time is needed for the device to actually be connectable over HID..
|
|
53
58
|
// we also take this time to not emit the device yet and potentially cancel it if a remove happens.
|
|
54
59
|
timeout = setTimeout(() => {
|
|
55
|
-
onAdd(device);
|
|
60
|
+
onAdd(mapRawDevice(device));
|
|
56
61
|
timeout = null;
|
|
57
62
|
}, usbDebounce);
|
|
58
63
|
}
|
|
59
64
|
};
|
|
60
65
|
|
|
61
66
|
const remove = (device) => {
|
|
67
|
+
if (device.deviceDescriptor.idVendor !== ledgerUSBVendorId) return;
|
|
62
68
|
log("usb-detection", "remove: " + deviceToLog(device));
|
|
63
69
|
|
|
64
70
|
if (timeout) {
|
|
65
71
|
clearTimeout(timeout);
|
|
66
72
|
timeout = null;
|
|
67
73
|
} else {
|
|
68
|
-
onRemove(device);
|
|
74
|
+
onRemove(mapRawDevice(device));
|
|
69
75
|
}
|
|
70
76
|
};
|
|
71
77
|
|
|
72
|
-
|
|
73
|
-
|
|
78
|
+
usb.on("attach", add);
|
|
79
|
+
usb.on("detach", remove);
|
|
80
|
+
|
|
74
81
|
return () => {
|
|
75
82
|
if (timeout) clearTimeout(timeout);
|
|
76
|
-
|
|
77
|
-
usbDetect.off(addEvent, add);
|
|
78
|
-
// @ts-expect-error not all EventEmitter methods are covered in its definition file
|
|
79
|
-
usbDetect.off(removeEvent, remove);
|
|
80
|
-
unmonitor();
|
|
83
|
+
usb.unrefHotplugEvents();
|
|
81
84
|
};
|
|
82
85
|
};
|
|
86
|
+
|
|
87
|
+
process.on("exit", () => {
|
|
88
|
+
usb.unrefHotplugEvents();
|
|
89
|
+
});
|