@shapeshiftoss/hdwallet-ledger-webusb 1.50.8 → 1.50.10
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 +17 -38
- package/dist/adapter.js.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/transport.d.ts +4 -6
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +89 -65
- package/dist/transport.js.map +1 -1
- package/package.json +8 -7
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
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -28,15 +32,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
28
32
|
});
|
|
29
33
|
};
|
|
30
34
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
|
-
exports.WebUSBLedgerAdapter = void 0;
|
|
35
|
+
exports.WebUSBLedgerAdapter = exports.VENDOR_ID = void 0;
|
|
32
36
|
const core = __importStar(require("@shapeshiftoss/hdwallet-core"));
|
|
33
37
|
const ledger = __importStar(require("@shapeshiftoss/hdwallet-ledger"));
|
|
34
38
|
const transport_1 = require("./transport");
|
|
35
|
-
|
|
36
|
-
const APP_NAVIGATION_DELAY = 3000;
|
|
39
|
+
exports.VENDOR_ID = 11415;
|
|
37
40
|
class WebUSBLedgerAdapter {
|
|
38
41
|
constructor(keyring) {
|
|
39
|
-
this.currentEventTimestamp = 0;
|
|
40
42
|
this.keyring = keyring;
|
|
41
43
|
if (window && window.navigator.usb) {
|
|
42
44
|
window.navigator.usb.addEventListener("connect", this.handleConnectWebUSBLedger.bind(this));
|
|
@@ -49,11 +51,9 @@ class WebUSBLedgerAdapter {
|
|
|
49
51
|
handleConnectWebUSBLedger(e) {
|
|
50
52
|
var _a, _b, _c, _d;
|
|
51
53
|
return __awaiter(this, void 0, void 0, function* () {
|
|
52
|
-
if (e.device.vendorId !== VENDOR_ID)
|
|
54
|
+
if (e.device.vendorId !== exports.VENDOR_ID)
|
|
53
55
|
return;
|
|
54
|
-
this.currentEventTimestamp = Date.now();
|
|
55
56
|
try {
|
|
56
|
-
yield this.initialize(e.device);
|
|
57
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);
|
|
58
58
|
}
|
|
59
59
|
catch (error) {
|
|
@@ -62,51 +62,30 @@ class WebUSBLedgerAdapter {
|
|
|
62
62
|
});
|
|
63
63
|
}
|
|
64
64
|
handleDisconnectWebUSBLedger(e) {
|
|
65
|
+
var _a, _b;
|
|
65
66
|
return __awaiter(this, void 0, void 0, function* () {
|
|
66
|
-
if (e.device.vendorId !== VENDOR_ID)
|
|
67
|
+
if (e.device.vendorId !== exports.VENDOR_ID)
|
|
67
68
|
return;
|
|
68
|
-
|
|
69
|
-
this.currentEventTimestamp = ts;
|
|
70
|
-
// timeout gives time to detect if it is an app navigation based disconnect/connect event
|
|
71
|
-
// discard disconnect event if it is not the most recent event received
|
|
72
|
-
setTimeout(() => __awaiter(this, void 0, void 0, function* () {
|
|
73
|
-
var _a, _b;
|
|
74
|
-
if (ts !== this.currentEventTimestamp)
|
|
75
|
-
return;
|
|
76
|
-
try {
|
|
77
|
-
if (e.device.serialNumber)
|
|
78
|
-
yield this.keyring.remove(e.device.serialNumber);
|
|
79
|
-
}
|
|
80
|
-
catch (error) {
|
|
81
|
-
console.error(error);
|
|
82
|
-
}
|
|
83
|
-
finally {
|
|
84
|
-
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);
|
|
85
|
-
}
|
|
86
|
-
}), 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);
|
|
87
70
|
});
|
|
88
71
|
}
|
|
89
72
|
get(device) {
|
|
90
73
|
return core.mustBeDefined(this.keyring.get(device.serialNumber));
|
|
91
74
|
}
|
|
92
75
|
// without unique device identifiers, we should only ever have one ledger device on the keyring at a time
|
|
93
|
-
initialize(
|
|
76
|
+
initialize(ledgerTransport) {
|
|
94
77
|
return __awaiter(this, void 0, void 0, function* () {
|
|
95
|
-
const
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
const ledgerTransport = yield transport_1.openTransport(device);
|
|
99
|
-
const wallet = ledger.create(new transport_1.LedgerWebUsbTransport(device, ledgerTransport, this.keyring));
|
|
100
|
-
this.keyring.add(wallet, device.serialNumber);
|
|
101
|
-
}
|
|
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);
|
|
102
81
|
return Object.keys(this.keyring.wallets).length;
|
|
103
82
|
});
|
|
104
83
|
}
|
|
105
84
|
pairDevice() {
|
|
106
85
|
return __awaiter(this, void 0, void 0, function* () {
|
|
107
|
-
const ledgerTransport = yield transport_1.
|
|
86
|
+
const ledgerTransport = yield (0, transport_1.getLedgerTransport)();
|
|
108
87
|
const device = ledgerTransport.device;
|
|
109
|
-
yield this.initialize(
|
|
88
|
+
yield this.initialize(ledgerTransport);
|
|
110
89
|
return core.mustBeDefined(this.keyring.get(device.serialNumber));
|
|
111
90
|
});
|
|
112
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/index.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAA0B;AAC1B,8CAA4B"}
|
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
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -31,7 +35,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
31
35
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
32
36
|
};
|
|
33
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
34
|
-
exports.LedgerWebUsbTransport = exports.translateCoinAndMethod = exports.
|
|
38
|
+
exports.LedgerWebUsbTransport = exports.translateCoinAndMethod = exports.getLedgerTransport = exports.getFirstLedgerDevice = void 0;
|
|
35
39
|
const hw_app_btc_1 = __importDefault(require("@ledgerhq/hw-app-btc"));
|
|
36
40
|
const hw_app_eth_1 = __importDefault(require("@ledgerhq/hw-app-eth"));
|
|
37
41
|
const hw_transport_webusb_1 = __importDefault(require("@ledgerhq/hw-transport-webusb"));
|
|
@@ -40,22 +44,23 @@ const getDeviceInfo_1 = __importDefault(require("@ledgerhq/live-common/lib/hw/ge
|
|
|
40
44
|
const openApp_1 = __importDefault(require("@ledgerhq/live-common/lib/hw/openApp"));
|
|
41
45
|
const core = __importStar(require("@shapeshiftoss/hdwallet-core"));
|
|
42
46
|
const ledger = __importStar(require("@shapeshiftoss/hdwallet-ledger"));
|
|
47
|
+
const dist_1 = __importDefault(require("p-queue/dist"));
|
|
48
|
+
const adapter_1 = require("./adapter");
|
|
43
49
|
const RECORD_CONFORMANCE_MOCKS = false;
|
|
50
|
+
const callsQueue = new dist_1.default({ concurrency: 1, interval: 1000 });
|
|
44
51
|
function getFirstLedgerDevice() {
|
|
45
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
46
|
-
if (!(window && window.navigator.usb))
|
|
47
|
-
throw new core.WebUSBNotAvailable();
|
|
48
|
-
const existingDevices = yield hw_transport_webusb_1.default.list();
|
|
49
|
-
return existingDevices.length > 0 ? existingDevices[0] : null;
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
exports.getFirstLedgerDevice = getFirstLedgerDevice;
|
|
53
|
-
function openTransport(device) {
|
|
54
52
|
return __awaiter(this, void 0, void 0, function* () {
|
|
55
53
|
if (!(window && window.navigator.usb))
|
|
56
54
|
throw new core.WebUSBNotAvailable();
|
|
57
55
|
try {
|
|
58
|
-
|
|
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;
|
|
59
64
|
}
|
|
60
65
|
catch (err) {
|
|
61
66
|
if (core.isIndexable(err) && err.name === "TransportInterfaceNotAvailable") {
|
|
@@ -65,62 +70,75 @@ function openTransport(device) {
|
|
|
65
70
|
}
|
|
66
71
|
});
|
|
67
72
|
}
|
|
68
|
-
exports.
|
|
69
|
-
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) {
|
|
70
102
|
return __awaiter(this, void 0, void 0, function* () {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
catch (err) {
|
|
77
|
-
if (core.isIndexable(err) && err.name === "TransportInterfaceNotAvailable") {
|
|
78
|
-
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;
|
|
79
108
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
}
|
|
107
|
-
case "getDeviceInfo": {
|
|
108
|
-
const out = getDeviceInfo_1.default.bind(undefined, transport);
|
|
109
|
-
return out;
|
|
110
|
-
}
|
|
111
|
-
case "openApp": {
|
|
112
|
-
const out = openApp_1.default.bind(undefined, transport);
|
|
113
|
-
return out;
|
|
114
|
-
}
|
|
115
|
-
default: {
|
|
116
|
-
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
|
+
}
|
|
117
135
|
}
|
|
118
136
|
}
|
|
137
|
+
default: {
|
|
138
|
+
throw new TypeError("coin");
|
|
139
|
+
}
|
|
119
140
|
}
|
|
120
|
-
|
|
121
|
-
throw new TypeError("coin");
|
|
122
|
-
}
|
|
123
|
-
}
|
|
141
|
+
});
|
|
124
142
|
}
|
|
125
143
|
exports.translateCoinAndMethod = translateCoinAndMethod;
|
|
126
144
|
class LedgerWebUsbTransport extends ledger.LedgerTransport {
|
|
@@ -141,8 +159,12 @@ class LedgerWebUsbTransport extends ledger.LedgerTransport {
|
|
|
141
159
|
message: {},
|
|
142
160
|
}));
|
|
143
161
|
try {
|
|
144
|
-
const
|
|
145
|
-
const
|
|
162
|
+
const transport = yield (0, exports.getLedgerTransport)();
|
|
163
|
+
const methodInstance = yield translateCoinAndMethod(transport, coin, method);
|
|
164
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
165
|
+
// @ts-ignore ts is drunk, stop pls
|
|
166
|
+
const response = yield callsQueue.add(() => methodInstance(...args));
|
|
167
|
+
yield transport.close();
|
|
146
168
|
const result = {
|
|
147
169
|
success: true,
|
|
148
170
|
payload: response,
|
|
@@ -153,6 +175,8 @@ class LedgerWebUsbTransport extends ledger.LedgerTransport {
|
|
|
153
175
|
// May need a slight amount of cleanup on escaping `'`s.
|
|
154
176
|
console.info(`this.memoize('${coin}', '${method}',\n JSON.parse('${JSON.stringify(args)}'),\n JSON.parse('${JSON.stringify(result)}'))`);
|
|
155
177
|
}
|
|
178
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
179
|
+
// @ts-ignore ts is drunk, stop pls
|
|
156
180
|
return result;
|
|
157
181
|
}
|
|
158
182
|
catch (e) {
|
package/dist/transport.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"
|
|
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.50.
|
|
3
|
+
"version": "1.50.10",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -10,23 +10,24 @@
|
|
|
10
10
|
"types": "dist/index.d.ts",
|
|
11
11
|
"scripts": {
|
|
12
12
|
"build": "tsc --build",
|
|
13
|
-
"clean": "rm -rf dist tsconfig.tsbuildinfo",
|
|
13
|
+
"clean": "rm -rf dist node_modules tsconfig.tsbuildinfo",
|
|
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-
|
|
22
|
+
"@ledgerhq/logs": "^6.10.1",
|
|
23
|
+
"@shapeshiftoss/hdwallet-core": "1.50.10",
|
|
24
|
+
"@shapeshiftoss/hdwallet-ledger": "1.50.10",
|
|
24
25
|
"@types/w3c-web-usb": "^1.0.4",
|
|
25
|
-
"
|
|
26
|
+
"p-queue": "^7.4.1"
|
|
26
27
|
},
|
|
27
28
|
"devDependencies": {
|
|
28
29
|
"@types/ledgerhq__hw-transport": "^4.21.3",
|
|
29
30
|
"@types/w3c-web-usb": "^1.0.6"
|
|
30
31
|
},
|
|
31
|
-
"gitHead": "
|
|
32
|
+
"gitHead": "e82f3956c9e13e7609ff0134fae611dec7b5815b"
|
|
32
33
|
}
|