Socket
Socket
Sign inDemoInstall

@ledgerhq/hw-transport-node-hid-singleton

Package Overview
Dependencies
Maintainers
20
Versions
283
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@ledgerhq/hw-transport-node-hid-singleton - npm Package Compare versions

Comparing version 6.28.9 to 6.28.12

69

CHANGELOG.md
# @ledgerhq/hw-transport-node-hid-singleton
## 6.28.12
### Patch Changes
- Updated dependencies [[`77f990e207`](https://github.com/LedgerHQ/ledger-live/commit/77f990e2075c7c9a4be69b364e3754b449c7a546)]:
- @ledgerhq/errors@6.12.6
- @ledgerhq/devices@8.0.3
- @ledgerhq/hw-transport@6.28.4
- @ledgerhq/hw-transport-node-hid-noevents@6.27.15
## 6.28.12-next.0
### Patch Changes
- Updated dependencies [[`77f990e207`](https://github.com/LedgerHQ/ledger-live/commit/77f990e2075c7c9a4be69b364e3754b449c7a546)]:
- @ledgerhq/errors@6.12.6-next.0
- @ledgerhq/devices@8.0.3-next.0
- @ledgerhq/hw-transport@6.28.4-next.0
- @ledgerhq/hw-transport-node-hid-noevents@6.27.15-next.0
## 6.28.11
### Patch Changes
- Updated dependencies [[`87d2349fd8`](https://github.com/LedgerHQ/ledger-live/commit/87d2349fd835e5deb39d1ee8dfcf3539f4195472)]:
- @ledgerhq/errors@6.12.5
- @ledgerhq/devices@8.0.2
- @ledgerhq/hw-transport@6.28.3
- @ledgerhq/hw-transport-node-hid-noevents@6.27.14
## 6.28.11-next.0
### Patch Changes
- Updated dependencies [[`87d2349fd8`](https://github.com/LedgerHQ/ledger-live/commit/87d2349fd835e5deb39d1ee8dfcf3539f4195472)]:
- @ledgerhq/errors@6.12.5-next.0
- @ledgerhq/devices@8.0.2-next.0
- @ledgerhq/hw-transport@6.28.3-next.0
- @ledgerhq/hw-transport-node-hid-noevents@6.27.14-next.0
## 6.28.10
### Patch Changes
- Updated dependencies [[`1d0b2d19eb`](https://github.com/LedgerHQ/ledger-live/commit/1d0b2d19ebc5acd058930b842c6d37f8daf2a5a3), [`ef945b05c0`](https://github.com/LedgerHQ/ledger-live/commit/ef945b05c01a791281687abb28e639e1bcc4e472), [`5fa68510b4`](https://github.com/LedgerHQ/ledger-live/commit/5fa68510b49334cfd80c30793dfe68900f1b9b3b)]:
- @ledgerhq/errors@6.12.4
- @ledgerhq/devices@8.0.1
- @ledgerhq/hw-transport@6.28.2
- @ledgerhq/hw-transport-node-hid-noevents@6.27.13
## 6.28.10-next.0
### Patch Changes
- Updated dependencies [[`1d0b2d19eb`](https://github.com/LedgerHQ/ledger-live/commit/1d0b2d19ebc5acd058930b842c6d37f8daf2a5a3), [`ef945b05c0`](https://github.com/LedgerHQ/ledger-live/commit/ef945b05c01a791281687abb28e639e1bcc4e472), [`5fa68510b4`](https://github.com/LedgerHQ/ledger-live/commit/5fa68510b49334cfd80c30793dfe68900f1b9b3b)]:
- @ledgerhq/errors@6.12.4-next.0
- @ledgerhq/devices@8.0.1-next.0
- @ledgerhq/hw-transport@6.28.2-next.0
- @ledgerhq/hw-transport-node-hid-noevents@6.27.13-next.0
## 6.28.9

@@ -12,2 +72,11 @@

## 6.28.9-next.0
### Patch Changes
- Updated dependencies [[`62af25493e`](https://github.com/LedgerHQ/ledger-live/commit/62af25493e2becf897d517af42542db208b971c7)]:
- @ledgerhq/devices@8.0.0-next.0
- @ledgerhq/hw-transport@6.28.1-next.0
- @ledgerhq/hw-transport-node-hid-noevents@6.27.12-next.0
## 6.28.8

@@ -14,0 +83,0 @@

2

lib-es/listenDevices.d.ts

@@ -1,2 +0,2 @@

export declare type Device = {
export type Device = {
locationId: number;

@@ -3,0 +3,0 @@ vendorId: number;

import { usb } from "usb";
import { ledgerUSBVendorId } from "@ledgerhq/devices";
import { log } from "@ledgerhq/logs";
var deviceToLog = function (_a) {
var idProduct = _a.deviceDescriptor.idProduct, busNumber = _a.busNumber, deviceAddress = _a.deviceAddress;
return "productId=".concat(idProduct, " busNumber=").concat(busNumber, " deviceAddress=").concat(deviceAddress);
};
var usbDebounce = 1000;
export var setUsbDebounce = function (n) {
const deviceToLog = ({ deviceDescriptor: { idProduct }, busNumber, deviceAddress, }) => `productId=${idProduct} busNumber=${busNumber} deviceAddress=${deviceAddress}`;
let usbDebounce = 1000;
export const setUsbDebounce = (n) => {
usbDebounce = n;
};
var mapRawDevice = function (_a) {
var locationId = _a.busNumber, deviceAddress = _a.deviceAddress, _b = _a.deviceDescriptor, vendorId = _b.idVendor, productId = _b.idProduct, serialNumber = _b.iSerialNumber;
return ({
locationId: locationId,
vendorId: vendorId,
productId: productId,
deviceName: "",
manufacturer: "",
serialNumber: serialNumber,
deviceAddress: deviceAddress
});
};
const mapRawDevice = ({ busNumber: locationId, deviceAddress, deviceDescriptor: { idVendor: vendorId, idProduct: productId, iSerialNumber: serialNumber, }, }) => ({
locationId,
vendorId,
productId,
deviceName: "",
manufacturer: "",
serialNumber,
deviceAddress,
});
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
export var listenDevices = function (onAdd, onRemove) {
var timeout;
var add = function (device) {
export const listenDevices = (onAdd, onRemove) => {
let timeout;
const add = (device) => {
if (device.deviceDescriptor.idVendor !== ledgerUSBVendorId)

@@ -34,3 +28,3 @@ return;

// we also take this time to not emit the device yet and potentially cancel it if a remove happens.
timeout = setTimeout(function () {
timeout = setTimeout(() => {
onAdd(mapRawDevice(device));

@@ -41,3 +35,3 @@ timeout = null;

};
var remove = function (device) {
const remove = (device) => {
if (device.deviceDescriptor.idVendor !== ledgerUSBVendorId)

@@ -56,3 +50,3 @@ return;

usb.on("detach", remove);
return function () {
return () => {
if (timeout)

@@ -63,5 +57,5 @@ clearTimeout(timeout);

};
process.on("exit", function () {
process.on("exit", () => {
usb.unrefHotplugEvents();
});
//# sourceMappingURL=listenDevices.js.map
/// <reference types="node" />
import TransportNodeHidNoEvents from "@ledgerhq/hw-transport-node-hid-noevents";
import type { Observer, DescriptorEvent, Subscription } from "@ledgerhq/hw-transport";
export declare type ListenDescriptorEvent = DescriptorEvent<any>;
export type ListenDescriptorEvent = DescriptorEvent<any>;
/**

@@ -6,0 +6,0 @@ * node-hid Transport implementation

@@ -1,16 +0,1 @@

var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {

@@ -25,40 +10,2 @@ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }

};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __values = (this && this.__values) || function(o) {
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
if (m) return m.call(o);
if (o && typeof o.length === "number") return {
next: function () {
if (o && i >= o.length) o = void 0;
return { value: o && o[i++], done: !o };
}
};
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
};
import HID from "node-hid";

@@ -70,6 +17,6 @@ import TransportNodeHidNoEvents, { getDevices, } from "@ledgerhq/hw-transport-node-hid-noevents";

import { listenDevices } from "./listenDevices";
var transportInstance;
var DISCONNECT_TIMEOUT = 5000;
var disconnectTimeout;
var clearDisconnectTimeout = function () {
let transportInstance;
const DISCONNECT_TIMEOUT = 5000;
let disconnectTimeout;
const clearDisconnectTimeout = () => {
if (disconnectTimeout) {

@@ -79,5 +26,5 @@ clearTimeout(disconnectTimeout);

};
var setDisconnectTimeout = function () {
const setDisconnectTimeout = () => {
clearDisconnectTimeout();
disconnectTimeout = setTimeout(function () { return TransportNodeHidSingleton.autoDisconnect(); }, DISCONNECT_TIMEOUT);
disconnectTimeout = setTimeout(() => TransportNodeHidSingleton.autoDisconnect(), DISCONNECT_TIMEOUT);
};

@@ -91,8 +38,6 @@ /**

*/
var TransportNodeHidSingleton = /** @class */ (function (_super) {
__extends(TransportNodeHidSingleton, _super);
function TransportNodeHidSingleton() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.preventAutoDisconnect = false;
return _this;
export default class TransportNodeHidSingleton extends TransportNodeHidNoEvents {
constructor() {
super(...arguments);
this.preventAutoDisconnect = false;
}

@@ -102,40 +47,34 @@ /**

*/
TransportNodeHidSingleton.autoDisconnect = function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
if (transportInstance && !transportInstance.preventAutoDisconnect) {
log("hid-verbose", "triggering auto disconnect");
TransportNodeHidSingleton.disconnect();
}
else if (transportInstance) {
// If we have disabled the auto-disconnect, try again in DISCONNECT_TIMEOUT
clearDisconnectTimeout();
setDisconnectTimeout();
}
return [2 /*return*/];
});
static autoDisconnect() {
return __awaiter(this, void 0, void 0, function* () {
if (transportInstance && !transportInstance.preventAutoDisconnect) {
log("hid-verbose", "triggering auto disconnect");
TransportNodeHidSingleton.disconnect();
}
else if (transportInstance) {
// If we have disabled the auto-disconnect, try again in DISCONNECT_TIMEOUT
clearDisconnectTimeout();
setDisconnectTimeout();
}
});
};
}
/**
* globally disconnect the transport singleton
*/
TransportNodeHidSingleton.disconnect = function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
if (transportInstance) {
transportInstance.device.close();
transportInstance.emit("disconnect");
transportInstance = null;
}
clearDisconnectTimeout();
return [2 /*return*/];
});
static disconnect() {
return __awaiter(this, void 0, void 0, function* () {
if (transportInstance) {
transportInstance.device.close();
transportInstance.emit("disconnect");
transportInstance = null;
}
clearDisconnectTimeout();
});
};
}
/**
* if path="" is not provided, the library will take the first device
*/
TransportNodeHidSingleton.open = function () {
static open() {
clearDisconnectTimeout();
return Promise.resolve().then(function () {
return Promise.resolve().then(() => {
if (transportInstance) {

@@ -145,3 +84,3 @@ log("hid-verbose", "reusing opened transport instance");

}
var device = getDevices()[0];
const device = getDevices()[0];
if (!device)

@@ -151,3 +90,3 @@ throw new CantOpenDevice("no device found");

transportInstance = new TransportNodeHidSingleton(new HID.HID(device.path));
var unlisten = listenDevices(function () { }, function () {
const unlisten = listenDevices(() => { }, () => {
// assume any ledger disconnection concerns current transport

@@ -158,3 +97,3 @@ if (transportInstance) {

});
var onDisconnect = function () {
const onDisconnect = () => {
if (!transportInstance)

@@ -170,6 +109,6 @@ return;

});
};
TransportNodeHidSingleton.prototype.setAllowAutoDisconnect = function (allow) {
}
setAllowAutoDisconnect(allow) {
this.preventAutoDisconnect = !allow;
};
}
/**

@@ -180,19 +119,14 @@ * Exchange with the device using APDU protocol.

*/
TransportNodeHidSingleton.prototype.exchange = function (apdu) {
return __awaiter(this, void 0, void 0, function () {
var result;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
clearDisconnectTimeout();
return [4 /*yield*/, _super.prototype.exchange.call(this, apdu)];
case 1:
result = _a.sent();
setDisconnectTimeout();
return [2 /*return*/, result];
}
});
exchange(apdu) {
const _super = Object.create(null, {
exchange: { get: () => super.exchange }
});
};
TransportNodeHidSingleton.prototype.close = function () {
return __awaiter(this, void 0, void 0, function* () {
clearDisconnectTimeout();
const result = yield _super.exchange.call(this, apdu);
setDisconnectTimeout();
return result;
});
}
close() {
// intentionally, a close will not effectively close the hid connection but

@@ -202,76 +136,63 @@ // will allow an auto-disconnection after some inactivity

return Promise.resolve();
};
/**
*
*/
TransportNodeHidSingleton.isSupported = TransportNodeHidNoEvents.isSupported;
/**
*
*/
TransportNodeHidSingleton.list = TransportNodeHidNoEvents.list;
/**
*/
TransportNodeHidSingleton.listen = function (observer) {
var unsubscribed;
Promise.resolve(getDevices()).then(function (devices) {
var e_1, _a;
try {
// this needs to run asynchronously so the subscription is defined during this phase
for (var devices_1 = __values(devices), devices_1_1 = devices_1.next(); !devices_1_1.done; devices_1_1 = devices_1.next()) {
var device = devices_1_1.value;
if (!unsubscribed) {
var deviceModel = identifyUSBProductId(device.productId);
observer.next({
type: "add",
descriptor: "",
device: {
name: device.deviceName
},
deviceModel: deviceModel
});
}
}
}
}
/**
*
*/
TransportNodeHidSingleton.isSupported = TransportNodeHidNoEvents.isSupported;
/**
*
*/
TransportNodeHidSingleton.list = TransportNodeHidNoEvents.list;
/**
*/
TransportNodeHidSingleton.listen = (observer) => {
let unsubscribed;
Promise.resolve(getDevices()).then((devices) => {
// this needs to run asynchronously so the subscription is defined during this phase
for (const device of devices) {
if (!unsubscribed) {
const deviceModel = identifyUSBProductId(device.productId);
observer.next({
type: "add",
descriptor: "",
device: {
name: device.deviceName,
},
deviceModel,
});
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (devices_1_1 && !devices_1_1.done && (_a = devices_1["return"])) _a.call(devices_1);
}
finally { if (e_1) throw e_1.error; }
}
}
});
const onAdd = (device) => {
const deviceModel = identifyUSBProductId(device.productId);
observer.next({
type: "add",
descriptor: "",
deviceModel,
device: {
name: device.deviceName,
},
});
var onAdd = function (device) {
var deviceModel = identifyUSBProductId(device.productId);
observer.next({
type: "add",
descriptor: "",
deviceModel: deviceModel,
device: {
name: device.deviceName
}
});
};
var onRemove = function (device) {
var deviceModel = identifyUSBProductId(device.productId);
observer.next({
type: "remove",
descriptor: "",
deviceModel: deviceModel,
device: {
name: device.deviceName
}
});
};
var stop = listenDevices(onAdd, onRemove);
function unsubscribe() {
stop();
unsubscribed = true;
}
return {
unsubscribe: unsubscribe
};
};
return TransportNodeHidSingleton;
}(TransportNodeHidNoEvents));
export default TransportNodeHidSingleton;
const onRemove = (device) => {
const deviceModel = identifyUSBProductId(device.productId);
observer.next({
type: "remove",
descriptor: "",
deviceModel,
device: {
name: device.deviceName,
},
});
};
const stop = listenDevices(onAdd, onRemove);
function unsubscribe() {
stop();
unsubscribed = true;
}
return {
unsubscribe,
};
};
//# sourceMappingURL=TransportNodeHid.js.map

@@ -1,2 +0,2 @@

export declare type Device = {
export type Device = {
locationId: number;

@@ -3,0 +3,0 @@ vendorId: number;

"use strict";
exports.__esModule = true;
Object.defineProperty(exports, "__esModule", { value: true });
exports.listenDevices = exports.setUsbDebounce = void 0;
var usb_1 = require("usb");
var devices_1 = require("@ledgerhq/devices");
var logs_1 = require("@ledgerhq/logs");
var deviceToLog = function (_a) {
var idProduct = _a.deviceDescriptor.idProduct, busNumber = _a.busNumber, deviceAddress = _a.deviceAddress;
return "productId=".concat(idProduct, " busNumber=").concat(busNumber, " deviceAddress=").concat(deviceAddress);
};
var usbDebounce = 1000;
var setUsbDebounce = function (n) {
const usb_1 = require("usb");
const devices_1 = require("@ledgerhq/devices");
const logs_1 = require("@ledgerhq/logs");
const deviceToLog = ({ deviceDescriptor: { idProduct }, busNumber, deviceAddress, }) => `productId=${idProduct} busNumber=${busNumber} deviceAddress=${deviceAddress}`;
let usbDebounce = 1000;
const setUsbDebounce = (n) => {
usbDebounce = n;
};
exports.setUsbDebounce = setUsbDebounce;
var mapRawDevice = function (_a) {
var locationId = _a.busNumber, deviceAddress = _a.deviceAddress, _b = _a.deviceDescriptor, vendorId = _b.idVendor, productId = _b.idProduct, serialNumber = _b.iSerialNumber;
return ({
locationId: locationId,
vendorId: vendorId,
productId: productId,
deviceName: "",
manufacturer: "",
serialNumber: serialNumber,
deviceAddress: deviceAddress
});
};
const mapRawDevice = ({ busNumber: locationId, deviceAddress, deviceDescriptor: { idVendor: vendorId, idProduct: productId, iSerialNumber: serialNumber, }, }) => ({
locationId,
vendorId,
productId,
deviceName: "",
manufacturer: "",
serialNumber,
deviceAddress,
});
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
var listenDevices = function (onAdd, onRemove) {
var timeout;
var add = function (device) {
const listenDevices = (onAdd, onRemove) => {
let timeout;
const add = (device) => {
if (device.deviceDescriptor.idVendor !== devices_1.ledgerUSBVendorId)

@@ -38,3 +32,3 @@ return;

// we also take this time to not emit the device yet and potentially cancel it if a remove happens.
timeout = setTimeout(function () {
timeout = setTimeout(() => {
onAdd(mapRawDevice(device));

@@ -45,3 +39,3 @@ timeout = null;

};
var remove = function (device) {
const remove = (device) => {
if (device.deviceDescriptor.idVendor !== devices_1.ledgerUSBVendorId)

@@ -60,3 +54,3 @@ return;

usb_1.usb.on("detach", remove);
return function () {
return () => {
if (timeout)

@@ -68,5 +62,5 @@ clearTimeout(timeout);

exports.listenDevices = listenDevices;
process.on("exit", function () {
process.on("exit", () => {
usb_1.usb.unrefHotplugEvents();
});
//# sourceMappingURL=listenDevices.js.map
/// <reference types="node" />
import TransportNodeHidNoEvents from "@ledgerhq/hw-transport-node-hid-noevents";
import type { Observer, DescriptorEvent, Subscription } from "@ledgerhq/hw-transport";
export declare type ListenDescriptorEvent = DescriptorEvent<any>;
export type ListenDescriptorEvent = DescriptorEvent<any>;
/**

@@ -6,0 +6,0 @@ * node-hid Transport implementation

"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {

@@ -49,54 +34,16 @@ if (k2 === undefined) k2 = k;

};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __values = (this && this.__values) || function(o) {
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
if (m) return m.call(o);
if (o && typeof o.length === "number") return {
next: function () {
if (o && i >= o.length) o = void 0;
return { value: o && o[i++], done: !o };
}
};
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
exports.__esModule = true;
var node_hid_1 = __importDefault(require("node-hid"));
var hw_transport_node_hid_noevents_1 = __importStar(require("@ledgerhq/hw-transport-node-hid-noevents"));
var logs_1 = require("@ledgerhq/logs");
var devices_1 = require("@ledgerhq/devices");
var errors_1 = require("@ledgerhq/errors");
var listenDevices_1 = require("./listenDevices");
var transportInstance;
var DISCONNECT_TIMEOUT = 5000;
var disconnectTimeout;
var clearDisconnectTimeout = function () {
Object.defineProperty(exports, "__esModule", { value: true });
const node_hid_1 = __importDefault(require("node-hid"));
const hw_transport_node_hid_noevents_1 = __importStar(require("@ledgerhq/hw-transport-node-hid-noevents"));
const logs_1 = require("@ledgerhq/logs");
const devices_1 = require("@ledgerhq/devices");
const errors_1 = require("@ledgerhq/errors");
const listenDevices_1 = require("./listenDevices");
let transportInstance;
const DISCONNECT_TIMEOUT = 5000;
let disconnectTimeout;
const clearDisconnectTimeout = () => {
if (disconnectTimeout) {

@@ -106,5 +53,5 @@ clearTimeout(disconnectTimeout);

};
var setDisconnectTimeout = function () {
const setDisconnectTimeout = () => {
clearDisconnectTimeout();
disconnectTimeout = setTimeout(function () { return TransportNodeHidSingleton.autoDisconnect(); }, DISCONNECT_TIMEOUT);
disconnectTimeout = setTimeout(() => TransportNodeHidSingleton.autoDisconnect(), DISCONNECT_TIMEOUT);
};

@@ -118,8 +65,6 @@ /**

*/
var TransportNodeHidSingleton = /** @class */ (function (_super) {
__extends(TransportNodeHidSingleton, _super);
function TransportNodeHidSingleton() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.preventAutoDisconnect = false;
return _this;
class TransportNodeHidSingleton extends hw_transport_node_hid_noevents_1.default {
constructor() {
super(...arguments);
this.preventAutoDisconnect = false;
}

@@ -129,40 +74,34 @@ /**

*/
TransportNodeHidSingleton.autoDisconnect = function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
if (transportInstance && !transportInstance.preventAutoDisconnect) {
(0, logs_1.log)("hid-verbose", "triggering auto disconnect");
TransportNodeHidSingleton.disconnect();
}
else if (transportInstance) {
// If we have disabled the auto-disconnect, try again in DISCONNECT_TIMEOUT
clearDisconnectTimeout();
setDisconnectTimeout();
}
return [2 /*return*/];
});
static autoDisconnect() {
return __awaiter(this, void 0, void 0, function* () {
if (transportInstance && !transportInstance.preventAutoDisconnect) {
(0, logs_1.log)("hid-verbose", "triggering auto disconnect");
TransportNodeHidSingleton.disconnect();
}
else if (transportInstance) {
// If we have disabled the auto-disconnect, try again in DISCONNECT_TIMEOUT
clearDisconnectTimeout();
setDisconnectTimeout();
}
});
};
}
/**
* globally disconnect the transport singleton
*/
TransportNodeHidSingleton.disconnect = function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
if (transportInstance) {
transportInstance.device.close();
transportInstance.emit("disconnect");
transportInstance = null;
}
clearDisconnectTimeout();
return [2 /*return*/];
});
static disconnect() {
return __awaiter(this, void 0, void 0, function* () {
if (transportInstance) {
transportInstance.device.close();
transportInstance.emit("disconnect");
transportInstance = null;
}
clearDisconnectTimeout();
});
};
}
/**
* if path="" is not provided, the library will take the first device
*/
TransportNodeHidSingleton.open = function () {
static open() {
clearDisconnectTimeout();
return Promise.resolve().then(function () {
return Promise.resolve().then(() => {
if (transportInstance) {

@@ -172,8 +111,8 @@ (0, logs_1.log)("hid-verbose", "reusing opened transport instance");

}
var device = (0, hw_transport_node_hid_noevents_1.getDevices)()[0];
const device = (0, hw_transport_node_hid_noevents_1.getDevices)()[0];
if (!device)
throw new errors_1.CantOpenDevice("no device found");
(0, logs_1.log)("hid-verbose", "new HID transport");
transportInstance = new TransportNodeHidSingleton(new node_hid_1["default"].HID(device.path));
var unlisten = (0, listenDevices_1.listenDevices)(function () { }, function () {
transportInstance = new TransportNodeHidSingleton(new node_hid_1.default.HID(device.path));
const unlisten = (0, listenDevices_1.listenDevices)(() => { }, () => {
// assume any ledger disconnection concerns current transport

@@ -184,3 +123,3 @@ if (transportInstance) {

});
var onDisconnect = function () {
const onDisconnect = () => {
if (!transportInstance)

@@ -196,6 +135,6 @@ return;

});
};
TransportNodeHidSingleton.prototype.setAllowAutoDisconnect = function (allow) {
}
setAllowAutoDisconnect(allow) {
this.preventAutoDisconnect = !allow;
};
}
/**

@@ -206,19 +145,14 @@ * Exchange with the device using APDU protocol.

*/
TransportNodeHidSingleton.prototype.exchange = function (apdu) {
return __awaiter(this, void 0, void 0, function () {
var result;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
clearDisconnectTimeout();
return [4 /*yield*/, _super.prototype.exchange.call(this, apdu)];
case 1:
result = _a.sent();
setDisconnectTimeout();
return [2 /*return*/, result];
}
});
exchange(apdu) {
const _super = Object.create(null, {
exchange: { get: () => super.exchange }
});
};
TransportNodeHidSingleton.prototype.close = function () {
return __awaiter(this, void 0, void 0, function* () {
clearDisconnectTimeout();
const result = yield _super.exchange.call(this, apdu);
setDisconnectTimeout();
return result;
});
}
close() {
// intentionally, a close will not effectively close the hid connection but

@@ -228,76 +162,64 @@ // will allow an auto-disconnection after some inactivity

return Promise.resolve();
};
/**
*
*/
TransportNodeHidSingleton.isSupported = hw_transport_node_hid_noevents_1["default"].isSupported;
/**
*
*/
TransportNodeHidSingleton.list = hw_transport_node_hid_noevents_1["default"].list;
/**
*/
TransportNodeHidSingleton.listen = function (observer) {
var unsubscribed;
Promise.resolve((0, hw_transport_node_hid_noevents_1.getDevices)()).then(function (devices) {
var e_1, _a;
try {
// this needs to run asynchronously so the subscription is defined during this phase
for (var devices_2 = __values(devices), devices_2_1 = devices_2.next(); !devices_2_1.done; devices_2_1 = devices_2.next()) {
var device = devices_2_1.value;
if (!unsubscribed) {
var deviceModel = (0, devices_1.identifyUSBProductId)(device.productId);
observer.next({
type: "add",
descriptor: "",
device: {
name: device.deviceName
},
deviceModel: deviceModel
});
}
}
}
}
exports.default = TransportNodeHidSingleton;
/**
*
*/
TransportNodeHidSingleton.isSupported = hw_transport_node_hid_noevents_1.default.isSupported;
/**
*
*/
TransportNodeHidSingleton.list = hw_transport_node_hid_noevents_1.default.list;
/**
*/
TransportNodeHidSingleton.listen = (observer) => {
let unsubscribed;
Promise.resolve((0, hw_transport_node_hid_noevents_1.getDevices)()).then((devices) => {
// this needs to run asynchronously so the subscription is defined during this phase
for (const device of devices) {
if (!unsubscribed) {
const deviceModel = (0, devices_1.identifyUSBProductId)(device.productId);
observer.next({
type: "add",
descriptor: "",
device: {
name: device.deviceName,
},
deviceModel,
});
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (devices_2_1 && !devices_2_1.done && (_a = devices_2["return"])) _a.call(devices_2);
}
finally { if (e_1) throw e_1.error; }
}
}
});
const onAdd = (device) => {
const deviceModel = (0, devices_1.identifyUSBProductId)(device.productId);
observer.next({
type: "add",
descriptor: "",
deviceModel,
device: {
name: device.deviceName,
},
});
var onAdd = function (device) {
var deviceModel = (0, devices_1.identifyUSBProductId)(device.productId);
observer.next({
type: "add",
descriptor: "",
deviceModel: deviceModel,
device: {
name: device.deviceName
}
});
};
var onRemove = function (device) {
var deviceModel = (0, devices_1.identifyUSBProductId)(device.productId);
observer.next({
type: "remove",
descriptor: "",
deviceModel: deviceModel,
device: {
name: device.deviceName
}
});
};
var stop = (0, listenDevices_1.listenDevices)(onAdd, onRemove);
function unsubscribe() {
stop();
unsubscribed = true;
}
return {
unsubscribe: unsubscribe
};
};
return TransportNodeHidSingleton;
}(hw_transport_node_hid_noevents_1["default"]));
exports["default"] = TransportNodeHidSingleton;
const onRemove = (device) => {
const deviceModel = (0, devices_1.identifyUSBProductId)(device.productId);
observer.next({
type: "remove",
descriptor: "",
deviceModel,
device: {
name: device.deviceName,
},
});
};
const stop = (0, listenDevices_1.listenDevices)(onAdd, onRemove);
function unsubscribe() {
stop();
unsubscribed = true;
}
return {
unsubscribe,
};
};
//# sourceMappingURL=TransportNodeHid.js.map
{
"name": "@ledgerhq/hw-transport-node-hid-singleton",
"version": "6.28.9",
"version": "6.28.12",
"description": "Ledger Hardware Wallet Node implementation of the communication layer, using node-hid and node-usb",

@@ -33,9 +33,19 @@ "keywords": [

"usb": "2.5.1",
"@ledgerhq/devices": "^8.0.0",
"@ledgerhq/errors": "^6.12.3",
"@ledgerhq/hw-transport": "^6.28.1",
"@ledgerhq/hw-transport-node-hid-noevents": "^6.27.12",
"@ledgerhq/devices": "^8.0.3",
"@ledgerhq/errors": "^6.12.6",
"@ledgerhq/hw-transport": "^6.28.4",
"@ledgerhq/hw-transport-node-hid-noevents": "^6.27.15",
"@ledgerhq/logs": "^6.10.1"
},
"gitHead": "dd0dea64b58e5a9125c8a422dcffd29e5ef6abec",
"devDependencies": {
"@types/jest": "^29.5.0",
"@types/node": "^18.15.3",
"documentation": "13.2.4",
"jest": "^28.1.1",
"rimraf": "^4.4.1",
"source-map-support": "^0.5.21",
"ts-jest": "^28.0.5",
"ts-node": "^10.4.0"
},
"scripts": {

@@ -42,0 +52,0 @@ "clean": "rimraf lib lib-es",

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc