@shapeshiftoss/hdwallet-ledger-webusb 1.50.9 → 1.51.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/dist/adapter.d.ts +3 -2
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +12 -37
- package/dist/adapter.js.map +1 -1
- package/dist/transport.d.ts +4 -6
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +80 -64
- package/dist/transport.js.map +1 -1
- package/package.json +8 -6
package/dist/adapter.d.ts
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
/// <reference types="w3c-web-usb" />
|
|
2
|
+
import TransportWebUSB from "@ledgerhq/hw-transport-webusb";
|
|
2
3
|
import * as core from "@shapeshiftoss/hdwallet-core";
|
|
3
4
|
import * as ledger from "@shapeshiftoss/hdwallet-ledger";
|
|
5
|
+
export declare const VENDOR_ID = 11415;
|
|
4
6
|
export declare class WebUSBLedgerAdapter {
|
|
5
7
|
keyring: core.Keyring;
|
|
6
|
-
currentEventTimestamp: number;
|
|
7
8
|
constructor(keyring: core.Keyring);
|
|
8
9
|
static useKeyring(keyring: core.Keyring): WebUSBLedgerAdapter;
|
|
9
10
|
private handleConnectWebUSBLedger;
|
|
10
11
|
private handleDisconnectWebUSBLedger;
|
|
11
12
|
get(device: USBDevice): ledger.LedgerHDWallet;
|
|
12
|
-
initialize(
|
|
13
|
+
initialize(ledgerTransport?: TransportWebUSB): Promise<number>;
|
|
13
14
|
pairDevice(): Promise<ledger.LedgerHDWallet>;
|
|
14
15
|
}
|
|
15
16
|
//# sourceMappingURL=adapter.d.ts.map
|
package/dist/adapter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,IAAI,MAAM,8BAA8B,CAAC;AACrD,OAAO,KAAK,MAAM,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":";AAAA,OAAO,eAAe,MAAM,+BAA+B,CAAC;AAC5D,OAAO,KAAK,IAAI,MAAM,8BAA8B,CAAC;AACrD,OAAO,KAAK,MAAM,MAAM,gCAAgC,CAAC;AAIzD,eAAO,MAAM,SAAS,QAAQ,CAAC;AAE/B,qBAAa,mBAAmB;IAC9B,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;gBAEV,OAAO,EAAE,IAAI,CAAC,OAAO;WASnB,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO;YAIhC,yBAAyB;YAgBzB,4BAA4B;IASnC,GAAG,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC,cAAc;IAKvC,UAAU,CAAC,eAAe,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IAY9D,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC;CAS1D"}
|
package/dist/adapter.js
CHANGED
|
@@ -32,15 +32,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
32
32
|
});
|
|
33
33
|
};
|
|
34
34
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
-
exports.WebUSBLedgerAdapter = void 0;
|
|
35
|
+
exports.WebUSBLedgerAdapter = exports.VENDOR_ID = void 0;
|
|
36
36
|
const core = __importStar(require("@shapeshiftoss/hdwallet-core"));
|
|
37
37
|
const ledger = __importStar(require("@shapeshiftoss/hdwallet-ledger"));
|
|
38
38
|
const transport_1 = require("./transport");
|
|
39
|
-
|
|
40
|
-
const APP_NAVIGATION_DELAY = 3000;
|
|
39
|
+
exports.VENDOR_ID = 11415;
|
|
41
40
|
class WebUSBLedgerAdapter {
|
|
42
41
|
constructor(keyring) {
|
|
43
|
-
this.currentEventTimestamp = 0;
|
|
44
42
|
this.keyring = keyring;
|
|
45
43
|
if (window && window.navigator.usb) {
|
|
46
44
|
window.navigator.usb.addEventListener("connect", this.handleConnectWebUSBLedger.bind(this));
|
|
@@ -53,11 +51,9 @@ class WebUSBLedgerAdapter {
|
|
|
53
51
|
handleConnectWebUSBLedger(e) {
|
|
54
52
|
var _a, _b, _c, _d;
|
|
55
53
|
return __awaiter(this, void 0, void 0, function* () {
|
|
56
|
-
if (e.device.vendorId !== VENDOR_ID)
|
|
54
|
+
if (e.device.vendorId !== exports.VENDOR_ID)
|
|
57
55
|
return;
|
|
58
|
-
this.currentEventTimestamp = Date.now();
|
|
59
56
|
try {
|
|
60
|
-
yield this.initialize(e.device);
|
|
61
57
|
this.keyring.emit([(_a = e.device.manufacturerName) !== null && _a !== void 0 ? _a : "", (_b = e.device.productName) !== null && _b !== void 0 ? _b : "", core.Events.CONNECT], e.device.serialNumber);
|
|
62
58
|
}
|
|
63
59
|
catch (error) {
|
|
@@ -66,51 +62,30 @@ class WebUSBLedgerAdapter {
|
|
|
66
62
|
});
|
|
67
63
|
}
|
|
68
64
|
handleDisconnectWebUSBLedger(e) {
|
|
65
|
+
var _a, _b;
|
|
69
66
|
return __awaiter(this, void 0, void 0, function* () {
|
|
70
|
-
if (e.device.vendorId !== VENDOR_ID)
|
|
67
|
+
if (e.device.vendorId !== exports.VENDOR_ID)
|
|
71
68
|
return;
|
|
72
|
-
|
|
73
|
-
this.currentEventTimestamp = ts;
|
|
74
|
-
// timeout gives time to detect if it is an app navigation based disconnect/connect event
|
|
75
|
-
// discard disconnect event if it is not the most recent event received
|
|
76
|
-
setTimeout(() => __awaiter(this, void 0, void 0, function* () {
|
|
77
|
-
var _a, _b;
|
|
78
|
-
if (ts !== this.currentEventTimestamp)
|
|
79
|
-
return;
|
|
80
|
-
try {
|
|
81
|
-
if (e.device.serialNumber)
|
|
82
|
-
yield this.keyring.remove(e.device.serialNumber);
|
|
83
|
-
}
|
|
84
|
-
catch (error) {
|
|
85
|
-
console.error(error);
|
|
86
|
-
}
|
|
87
|
-
finally {
|
|
88
|
-
this.keyring.emit([(_a = e.device.manufacturerName) !== null && _a !== void 0 ? _a : "", (_b = e.device.productName) !== null && _b !== void 0 ? _b : "", core.Events.DISCONNECT], e.device.serialNumber);
|
|
89
|
-
}
|
|
90
|
-
}), APP_NAVIGATION_DELAY);
|
|
69
|
+
this.keyring.emit([(_a = e.device.manufacturerName) !== null && _a !== void 0 ? _a : "", (_b = e.device.productName) !== null && _b !== void 0 ? _b : "", core.Events.DISCONNECT], e.device.serialNumber);
|
|
91
70
|
});
|
|
92
71
|
}
|
|
93
72
|
get(device) {
|
|
94
73
|
return core.mustBeDefined(this.keyring.get(device.serialNumber));
|
|
95
74
|
}
|
|
96
75
|
// without unique device identifiers, we should only ever have one ledger device on the keyring at a time
|
|
97
|
-
initialize(
|
|
76
|
+
initialize(ledgerTransport) {
|
|
98
77
|
return __awaiter(this, void 0, void 0, function* () {
|
|
99
|
-
const
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
const ledgerTransport = yield (0, transport_1.openTransport)(device);
|
|
103
|
-
const wallet = ledger.create(new transport_1.LedgerWebUsbTransport(device, ledgerTransport, this.keyring));
|
|
104
|
-
this.keyring.add(wallet, device.serialNumber);
|
|
105
|
-
}
|
|
78
|
+
const transport = ledgerTransport !== null && ledgerTransport !== void 0 ? ledgerTransport : (yield (0, transport_1.getLedgerTransport)());
|
|
79
|
+
const wallet = ledger.create(new transport_1.LedgerWebUsbTransport(transport.device, transport, this.keyring));
|
|
80
|
+
this.keyring.add(wallet, transport.device.serialNumber);
|
|
106
81
|
return Object.keys(this.keyring.wallets).length;
|
|
107
82
|
});
|
|
108
83
|
}
|
|
109
84
|
pairDevice() {
|
|
110
85
|
return __awaiter(this, void 0, void 0, function* () {
|
|
111
|
-
const ledgerTransport = yield (0, transport_1.
|
|
86
|
+
const ledgerTransport = yield (0, transport_1.getLedgerTransport)();
|
|
112
87
|
const device = ledgerTransport.device;
|
|
113
|
-
yield this.initialize(
|
|
88
|
+
yield this.initialize(ledgerTransport);
|
|
114
89
|
return core.mustBeDefined(this.keyring.get(device.serialNumber));
|
|
115
90
|
});
|
|
116
91
|
}
|
package/dist/adapter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
|
package/dist/transport.d.ts
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
/// <reference types="w3c-web-usb" />
|
|
2
|
-
import Transport from "@ledgerhq/hw-transport";
|
|
3
2
|
import TransportWebUSB from "@ledgerhq/hw-transport-webusb";
|
|
4
3
|
import * as core from "@shapeshiftoss/hdwallet-core";
|
|
5
4
|
import * as ledger from "@shapeshiftoss/hdwallet-ledger";
|
|
6
5
|
import { LedgerResponse, LedgerTransportCoinType, LedgerTransportMethod, LedgerTransportMethodName } from "hdwallet-ledger/src/transport";
|
|
7
|
-
export declare function getFirstLedgerDevice(): Promise<USBDevice
|
|
8
|
-
export declare
|
|
9
|
-
export declare function
|
|
10
|
-
export declare function translateCoinAndMethod<T extends LedgerTransportCoinType, U extends LedgerTransportMethodName<T>>(transport: Transport, coin: T, method: U): LedgerTransportMethod<T, U>;
|
|
6
|
+
export declare function getFirstLedgerDevice(): Promise<USBDevice>;
|
|
7
|
+
export declare const getLedgerTransport: () => Promise<TransportWebUSB>;
|
|
8
|
+
export declare function translateCoinAndMethod<T extends LedgerTransportCoinType, U extends LedgerTransportMethodName<T>>(transport: TransportWebUSB, coin: T, method: U): Promise<LedgerTransportMethod<T, U>>;
|
|
11
9
|
export declare class LedgerWebUsbTransport extends ledger.LedgerTransport {
|
|
12
10
|
device: USBDevice;
|
|
13
|
-
constructor(device: USBDevice, transport:
|
|
11
|
+
constructor(device: USBDevice, transport: TransportWebUSB, keyring: core.Keyring);
|
|
14
12
|
getDeviceID(): Promise<string>;
|
|
15
13
|
call<T extends LedgerTransportCoinType, U extends LedgerTransportMethodName<T>>(coin: T, method: U, ...args: Parameters<LedgerTransportMethod<T, U>>): Promise<LedgerResponse<T, U>>;
|
|
16
14
|
}
|
package/dist/transport.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":";AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":";AAEA,OAAO,eAAe,MAAM,+BAA+B,CAAC;AAI5D,OAAO,KAAK,IAAI,MAAM,8BAA8B,CAAC;AACrD,OAAO,KAAK,MAAM,MAAM,gCAAgC,CAAC;AACzD,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,qBAAqB,EACrB,yBAAyB,EAC1B,MAAM,+BAA+B,CAAC;AASvC,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,SAAS,CAAC,CAoB/D;AAED,eAAO,MAAM,kBAAkB,QAAa,QAAQ,eAAe,CA6BlE,CAAC;AAEF,wBAAsB,sBAAsB,CAAC,CAAC,SAAS,uBAAuB,EAAE,CAAC,SAAS,yBAAyB,CAAC,CAAC,CAAC,EACpH,SAAS,EAAE,eAAe,EAC1B,IAAI,EAAE,CAAC,EACP,MAAM,EAAE,CAAC,GACR,OAAO,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAwCtC;AAED,qBAAa,qBAAsB,SAAQ,MAAM,CAAC,eAAe;IAC/D,MAAM,EAAE,SAAS,CAAC;gBAEN,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO;IAKnE,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAI9B,IAAI,CAAC,CAAC,SAAS,uBAAuB,EAAE,CAAC,SAAS,yBAAyB,CAAC,CAAC,CAAC,EACzF,IAAI,EAAE,CAAC,EACP,MAAM,EAAE,CAAC,EACT,GAAG,IAAI,EAAE,UAAU,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAC/C,OAAO,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CA8CjC"}
|
package/dist/transport.js
CHANGED
|
@@ -35,7 +35,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
35
35
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
36
|
};
|
|
37
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
-
exports.LedgerWebUsbTransport = exports.translateCoinAndMethod = exports.
|
|
38
|
+
exports.LedgerWebUsbTransport = exports.translateCoinAndMethod = exports.getLedgerTransport = exports.getFirstLedgerDevice = void 0;
|
|
39
39
|
const hw_app_btc_1 = __importDefault(require("@ledgerhq/hw-app-btc"));
|
|
40
40
|
const hw_app_eth_1 = __importDefault(require("@ledgerhq/hw-app-eth"));
|
|
41
41
|
const hw_transport_webusb_1 = __importDefault(require("@ledgerhq/hw-transport-webusb"));
|
|
@@ -44,22 +44,23 @@ const getDeviceInfo_1 = __importDefault(require("@ledgerhq/live-common/lib/hw/ge
|
|
|
44
44
|
const openApp_1 = __importDefault(require("@ledgerhq/live-common/lib/hw/openApp"));
|
|
45
45
|
const core = __importStar(require("@shapeshiftoss/hdwallet-core"));
|
|
46
46
|
const ledger = __importStar(require("@shapeshiftoss/hdwallet-ledger"));
|
|
47
|
+
const dist_1 = __importDefault(require("p-queue/dist"));
|
|
48
|
+
const adapter_1 = require("./adapter");
|
|
47
49
|
const RECORD_CONFORMANCE_MOCKS = false;
|
|
50
|
+
const callsQueue = new dist_1.default({ concurrency: 1, interval: 1000 });
|
|
48
51
|
function getFirstLedgerDevice() {
|
|
49
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
50
|
-
if (!(window && window.navigator.usb))
|
|
51
|
-
throw new core.WebUSBNotAvailable();
|
|
52
|
-
const existingDevices = yield hw_transport_webusb_1.default.list();
|
|
53
|
-
return existingDevices.length > 0 ? existingDevices[0] : null;
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
exports.getFirstLedgerDevice = getFirstLedgerDevice;
|
|
57
|
-
function openTransport(device) {
|
|
58
52
|
return __awaiter(this, void 0, void 0, function* () {
|
|
59
53
|
if (!(window && window.navigator.usb))
|
|
60
54
|
throw new core.WebUSBNotAvailable();
|
|
61
55
|
try {
|
|
62
|
-
|
|
56
|
+
const existingDevices = yield hw_transport_webusb_1.default.list();
|
|
57
|
+
const maybeExistingDevice = existingDevices === null || existingDevices === void 0 ? void 0 : existingDevices[0];
|
|
58
|
+
if (maybeExistingDevice)
|
|
59
|
+
return maybeExistingDevice;
|
|
60
|
+
const requestedDevice = yield window.navigator.usb.requestDevice({
|
|
61
|
+
filters: [{ vendorId: adapter_1.VENDOR_ID }],
|
|
62
|
+
});
|
|
63
|
+
return requestedDevice;
|
|
63
64
|
}
|
|
64
65
|
catch (err) {
|
|
65
66
|
if (core.isIndexable(err) && err.name === "TransportInterfaceNotAvailable") {
|
|
@@ -69,62 +70,75 @@ function openTransport(device) {
|
|
|
69
70
|
}
|
|
70
71
|
});
|
|
71
72
|
}
|
|
72
|
-
exports.
|
|
73
|
-
function
|
|
73
|
+
exports.getFirstLedgerDevice = getFirstLedgerDevice;
|
|
74
|
+
const getLedgerTransport = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
75
|
+
const device = yield getFirstLedgerDevice();
|
|
76
|
+
if (!device)
|
|
77
|
+
throw new Error("No device found");
|
|
78
|
+
yield device.open();
|
|
79
|
+
if (device.configuration === null)
|
|
80
|
+
yield device.selectConfiguration(1);
|
|
81
|
+
try {
|
|
82
|
+
yield device.reset();
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
console.warn(err);
|
|
86
|
+
}
|
|
87
|
+
const usbInterface = device.configurations[0].interfaces.find(({ alternates }) => alternates.some(({ interfaceClass }) => interfaceClass === 255));
|
|
88
|
+
if (!usbInterface)
|
|
89
|
+
throw new Error("No Ledger device found");
|
|
90
|
+
try {
|
|
91
|
+
yield device.claimInterface(usbInterface.interfaceNumber);
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
yield device.close();
|
|
95
|
+
console.error(error);
|
|
96
|
+
throw new Error(error.message);
|
|
97
|
+
}
|
|
98
|
+
return new hw_transport_webusb_1.default(device, usbInterface.interfaceNumber);
|
|
99
|
+
});
|
|
100
|
+
exports.getLedgerTransport = getLedgerTransport;
|
|
101
|
+
function translateCoinAndMethod(transport, coin, method) {
|
|
74
102
|
return __awaiter(this, void 0, void 0, function* () {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
catch (err) {
|
|
81
|
-
if (core.isIndexable(err) && err.name === "TransportInterfaceNotAvailable") {
|
|
82
|
-
throw new core.ConflictingApp("Ledger");
|
|
103
|
+
switch (coin) {
|
|
104
|
+
case "Btc": {
|
|
105
|
+
const btc = new hw_app_btc_1.default({ transport });
|
|
106
|
+
const methodInstance = btc[method].bind(btc);
|
|
107
|
+
return methodInstance;
|
|
83
108
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
}
|
|
111
|
-
case "getDeviceInfo": {
|
|
112
|
-
const out = getDeviceInfo_1.default.bind(undefined, transport);
|
|
113
|
-
return out;
|
|
114
|
-
}
|
|
115
|
-
case "openApp": {
|
|
116
|
-
const out = openApp_1.default.bind(undefined, transport);
|
|
117
|
-
return out;
|
|
118
|
-
}
|
|
119
|
-
default: {
|
|
120
|
-
throw new TypeError("method");
|
|
109
|
+
case "Eth": {
|
|
110
|
+
const eth = new hw_app_eth_1.default(transport);
|
|
111
|
+
const methodInstance = eth[method].bind(eth);
|
|
112
|
+
return methodInstance;
|
|
113
|
+
}
|
|
114
|
+
case null: {
|
|
115
|
+
switch (method) {
|
|
116
|
+
case "decorateAppAPIMethods": {
|
|
117
|
+
const out = transport.decorateAppAPIMethods.bind(transport);
|
|
118
|
+
return out;
|
|
119
|
+
}
|
|
120
|
+
case "getAppAndVersion": {
|
|
121
|
+
const out = getAppAndVersion_1.default.bind(undefined, transport);
|
|
122
|
+
return out;
|
|
123
|
+
}
|
|
124
|
+
case "getDeviceInfo": {
|
|
125
|
+
const out = getDeviceInfo_1.default.bind(undefined, transport);
|
|
126
|
+
return out;
|
|
127
|
+
}
|
|
128
|
+
case "openApp": {
|
|
129
|
+
const out = openApp_1.default.bind(undefined, transport);
|
|
130
|
+
return out;
|
|
131
|
+
}
|
|
132
|
+
default: {
|
|
133
|
+
throw new TypeError("method");
|
|
134
|
+
}
|
|
121
135
|
}
|
|
122
136
|
}
|
|
137
|
+
default: {
|
|
138
|
+
throw new TypeError("coin");
|
|
139
|
+
}
|
|
123
140
|
}
|
|
124
|
-
|
|
125
|
-
throw new TypeError("coin");
|
|
126
|
-
}
|
|
127
|
-
}
|
|
141
|
+
});
|
|
128
142
|
}
|
|
129
143
|
exports.translateCoinAndMethod = translateCoinAndMethod;
|
|
130
144
|
class LedgerWebUsbTransport extends ledger.LedgerTransport {
|
|
@@ -145,10 +159,12 @@ class LedgerWebUsbTransport extends ledger.LedgerTransport {
|
|
|
145
159
|
message: {},
|
|
146
160
|
}));
|
|
147
161
|
try {
|
|
148
|
-
const
|
|
162
|
+
const transport = yield (0, exports.getLedgerTransport)();
|
|
163
|
+
const methodInstance = yield translateCoinAndMethod(transport, coin, method);
|
|
149
164
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
150
165
|
// @ts-ignore ts is drunk, stop pls
|
|
151
|
-
const response = yield methodInstance(...args);
|
|
166
|
+
const response = yield callsQueue.add(() => methodInstance(...args));
|
|
167
|
+
yield transport.close();
|
|
152
168
|
const result = {
|
|
153
169
|
success: true,
|
|
154
170
|
payload: response,
|
package/dist/transport.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sEAAuC;AACvC,sEAAuC;
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shapeshiftoss/hdwallet-ledger-webusb",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.51.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -14,18 +14,20 @@
|
|
|
14
14
|
"prepublishOnly": "yarn clean && yarn build"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@ledgerhq/hw-app-btc": "^
|
|
17
|
+
"@ledgerhq/hw-app-btc": "^10.0.8",
|
|
18
18
|
"@ledgerhq/hw-app-eth": "^6.9.0",
|
|
19
19
|
"@ledgerhq/hw-transport": "^6.7.0",
|
|
20
20
|
"@ledgerhq/hw-transport-webusb": "^6.7.0",
|
|
21
21
|
"@ledgerhq/live-common": "^21.8.2",
|
|
22
|
-
"@
|
|
23
|
-
"@shapeshiftoss/hdwallet-
|
|
24
|
-
"@
|
|
22
|
+
"@ledgerhq/logs": "^6.10.1",
|
|
23
|
+
"@shapeshiftoss/hdwallet-core": "1.51.0",
|
|
24
|
+
"@shapeshiftoss/hdwallet-ledger": "1.51.0",
|
|
25
|
+
"@types/w3c-web-usb": "^1.0.4",
|
|
26
|
+
"p-queue": "^7.4.1"
|
|
25
27
|
},
|
|
26
28
|
"devDependencies": {
|
|
27
29
|
"@types/ledgerhq__hw-transport": "^4.21.3",
|
|
28
30
|
"@types/w3c-web-usb": "^1.0.6"
|
|
29
31
|
},
|
|
30
|
-
"gitHead": "
|
|
32
|
+
"gitHead": "b2d570703da26dd673beeecd1101f2edbf446787"
|
|
31
33
|
}
|