@ledgerhq/hw-transport-node-speculos 6.29.4 → 6.29.5-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 +8 -0
- package/lib/SpeculosTransport.d.ts +1 -0
- package/lib/SpeculosTransport.d.ts.map +1 -1
- package/lib/SpeculosTransport.js +68 -78
- package/lib/SpeculosTransport.js.map +1 -1
- package/lib-es/SpeculosTransport.d.ts +1 -0
- package/lib-es/SpeculosTransport.d.ts.map +1 -1
- package/lib-es/SpeculosTransport.js +69 -80
- package/lib-es/SpeculosTransport.js.map +1 -1
- package/package.json +6 -5
package/.turbo/turbo-build.log
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# @ledgerhq/hw-transport-node-speculos
|
|
2
2
|
|
|
3
|
+
## 6.29.5-next.0
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [[`107f35a`](https://github.com/LedgerHQ/ledger-live/commit/107f35a0650412716b088a3503b86435e6d9cf47), [`9081c26`](https://github.com/LedgerHQ/ledger-live/commit/9081c2648490f977469a33762a3c67bb2c2a0be5)]:
|
|
8
|
+
- @ledgerhq/errors@6.21.0-next.0
|
|
9
|
+
- @ledgerhq/hw-transport@6.31.5-next.0
|
|
10
|
+
|
|
3
11
|
## 6.29.4
|
|
4
12
|
|
|
5
13
|
### Patch Changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SpeculosTransport.d.ts","sourceRoot":"","sources":["../src/SpeculosTransport.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SpeculosTransport.d.ts","sourceRoot":"","sources":["../src/SpeculosTransport.ts"],"names":[],"mappings":";;;AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,SAAS,MAAM,wBAAwB,CAAC;AAQ/C;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AACF;;;;;;;GAOG;AAEH,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,SAAS;IACtD,MAAM,CAAC,WAAW,QAAO,QAAQ,OAAO,CAAC,CAA0B;IAEnE,MAAM,CAAC,IAAI,QAAO,GAAG,CAAwB;IAC7C,MAAM,CAAC,MAAM,cAAe,GAAG;;MAE5B;IAEH;;OAEG;IACH,MAAM,CAAC,IAAI,SAAU,qBAAqB,KAAG,QAAQ,iBAAiB,CAAC,CAgBlE;IACL,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC;IACvB,IAAI,EAAE,qBAAqB,CAAC;IAC5B,cAAc,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAY;IACjD,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAY;IACnD,gBAAgB,EAAE,GAAG,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAChD,gBAAgB,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAiB;gBAEnD,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,qBAAqB;IA2C/D;;;;;OAKG;IACH,MAAM,YAAa,MAAM,KAAG,QAAQ,IAAI,CAAC,CAepC;IAEC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAa1C,cAAc;IAER,KAAK;CAKZ"}
|
package/lib/SpeculosTransport.js
CHANGED
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
4
|
};
|
|
@@ -26,33 +17,39 @@ const logs_1 = require("@ledgerhq/logs");
|
|
|
26
17
|
* const res = await transport.send(0xE0, 0x01, 0, 0);
|
|
27
18
|
*/
|
|
28
19
|
class SpeculosTransport extends hw_transport_1.default {
|
|
20
|
+
static isSupported = () => Promise.resolve(true);
|
|
21
|
+
// this transport is not discoverable
|
|
22
|
+
static list = () => Promise.resolve([]);
|
|
23
|
+
static listen = (_observer) => ({
|
|
24
|
+
unsubscribe: () => { },
|
|
25
|
+
});
|
|
26
|
+
/**
|
|
27
|
+
*
|
|
28
|
+
*/
|
|
29
|
+
static open = (opts) => new Promise((resolve, reject) => {
|
|
30
|
+
const socket = new net_1.default.Socket();
|
|
31
|
+
socket.on("error", e => {
|
|
32
|
+
socket.destroy();
|
|
33
|
+
reject(e);
|
|
34
|
+
});
|
|
35
|
+
socket.on("end", () => {
|
|
36
|
+
reject(new errors_1.DisconnectedDevice("tcp closed"));
|
|
37
|
+
});
|
|
38
|
+
socket.connect(opts.apduPort, opts.host || "127.0.0.1", () => {
|
|
39
|
+
// we delay a bit the transport creation to make sure the tcp does not hang up
|
|
40
|
+
setTimeout(() => {
|
|
41
|
+
resolve(new SpeculosTransport(socket, opts));
|
|
42
|
+
}, 100);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
apduSocket;
|
|
46
|
+
opts;
|
|
47
|
+
rejectExchange = _e => { };
|
|
48
|
+
resolveExchange = _b => { };
|
|
49
|
+
automationSocket;
|
|
50
|
+
automationEvents = new rxjs_1.Subject();
|
|
29
51
|
constructor(apduSocket, opts) {
|
|
30
52
|
super();
|
|
31
|
-
this.rejectExchange = _e => { };
|
|
32
|
-
this.resolveExchange = _b => { };
|
|
33
|
-
this.automationEvents = new rxjs_1.Subject();
|
|
34
|
-
/**
|
|
35
|
-
* Send a speculos button command
|
|
36
|
-
* typically "Ll" would press and release the left button
|
|
37
|
-
* typically "Rr" would press and release the right button
|
|
38
|
-
* @param {*} command
|
|
39
|
-
*/
|
|
40
|
-
this.button = (command) => new Promise((resolve, reject) => {
|
|
41
|
-
(0, logs_1.log)("speculos-button", command);
|
|
42
|
-
const { buttonPort, host } = this.opts;
|
|
43
|
-
if (!buttonPort)
|
|
44
|
-
throw new Error("buttonPort is missing");
|
|
45
|
-
const socket = new net_1.default.Socket();
|
|
46
|
-
socket.on("error", e => {
|
|
47
|
-
socket.destroy();
|
|
48
|
-
reject(e);
|
|
49
|
-
});
|
|
50
|
-
socket.connect(buttonPort, host || "127.0.0.1", () => {
|
|
51
|
-
socket.write(Buffer.from(command, "ascii"));
|
|
52
|
-
socket.destroy();
|
|
53
|
-
resolve();
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
53
|
this.opts = opts;
|
|
57
54
|
this.apduSocket = apduSocket;
|
|
58
55
|
apduSocket.on("error", e => {
|
|
@@ -93,55 +90,48 @@ class SpeculosTransport extends hw_transport_1.default {
|
|
|
93
90
|
socket.connect(automationPort, opts.host || "127.0.0.1");
|
|
94
91
|
}
|
|
95
92
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
93
|
+
/**
|
|
94
|
+
* Send a speculos button command
|
|
95
|
+
* typically "Ll" would press and release the left button
|
|
96
|
+
* typically "Rr" would press and release the right button
|
|
97
|
+
* @param {*} command
|
|
98
|
+
*/
|
|
99
|
+
button = (command) => new Promise((resolve, reject) => {
|
|
100
|
+
(0, logs_1.log)("speculos-button", command);
|
|
101
|
+
const { buttonPort, host } = this.opts;
|
|
102
|
+
if (!buttonPort)
|
|
103
|
+
throw new Error("buttonPort is missing");
|
|
104
|
+
const socket = new net_1.default.Socket();
|
|
105
|
+
socket.on("error", e => {
|
|
106
|
+
socket.destroy();
|
|
107
|
+
reject(e);
|
|
108
108
|
});
|
|
109
|
+
socket.connect(buttonPort, host || "127.0.0.1", () => {
|
|
110
|
+
socket.write(Buffer.from(command, "ascii"));
|
|
111
|
+
socket.destroy();
|
|
112
|
+
resolve();
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
async exchange(apdu) {
|
|
116
|
+
const hex = apdu.toString("hex");
|
|
117
|
+
(0, logs_1.log)("apdu", "=> " + hex);
|
|
118
|
+
const encoded = encodeAPDU(apdu);
|
|
119
|
+
const res = await new Promise((resolve, reject) => {
|
|
120
|
+
this.rejectExchange = reject;
|
|
121
|
+
this.resolveExchange = resolve;
|
|
122
|
+
this.apduSocket.write(encoded);
|
|
123
|
+
});
|
|
124
|
+
(0, logs_1.log)("apdu", "<= " + res.toString("hex"));
|
|
125
|
+
return res;
|
|
109
126
|
}
|
|
110
127
|
setScrambleKey() { }
|
|
111
|
-
close() {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
return Promise.resolve();
|
|
117
|
-
});
|
|
128
|
+
async close() {
|
|
129
|
+
if (this.automationSocket)
|
|
130
|
+
this.automationSocket.destroy();
|
|
131
|
+
this.apduSocket.destroy();
|
|
132
|
+
return Promise.resolve();
|
|
118
133
|
}
|
|
119
134
|
}
|
|
120
|
-
SpeculosTransport.isSupported = () => Promise.resolve(true);
|
|
121
|
-
// this transport is not discoverable
|
|
122
|
-
SpeculosTransport.list = () => Promise.resolve([]);
|
|
123
|
-
SpeculosTransport.listen = (_observer) => ({
|
|
124
|
-
unsubscribe: () => { },
|
|
125
|
-
});
|
|
126
|
-
/**
|
|
127
|
-
*
|
|
128
|
-
*/
|
|
129
|
-
SpeculosTransport.open = (opts) => new Promise((resolve, reject) => {
|
|
130
|
-
const socket = new net_1.default.Socket();
|
|
131
|
-
socket.on("error", e => {
|
|
132
|
-
socket.destroy();
|
|
133
|
-
reject(e);
|
|
134
|
-
});
|
|
135
|
-
socket.on("end", () => {
|
|
136
|
-
reject(new errors_1.DisconnectedDevice("tcp closed"));
|
|
137
|
-
});
|
|
138
|
-
socket.connect(opts.apduPort, opts.host || "127.0.0.1", () => {
|
|
139
|
-
// we delay a bit the transport creation to make sure the tcp does not hang up
|
|
140
|
-
setTimeout(() => {
|
|
141
|
-
resolve(new SpeculosTransport(socket, opts));
|
|
142
|
-
}, 100);
|
|
143
|
-
});
|
|
144
|
-
});
|
|
145
135
|
exports.default = SpeculosTransport;
|
|
146
136
|
function encodeAPDU(apdu) {
|
|
147
137
|
const size = Buffer.allocUnsafe(4);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SpeculosTransport.js","sourceRoot":"","sources":["../src/SpeculosTransport.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SpeculosTransport.js","sourceRoot":"","sources":["../src/SpeculosTransport.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SpeculosTransport.d.ts","sourceRoot":"","sources":["../src/SpeculosTransport.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SpeculosTransport.d.ts","sourceRoot":"","sources":["../src/SpeculosTransport.ts"],"names":[],"mappings":";;;AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,SAAS,MAAM,wBAAwB,CAAC;AAQ/C;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AACF;;;;;;;GAOG;AAEH,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,SAAS;IACtD,MAAM,CAAC,WAAW,QAAO,QAAQ,OAAO,CAAC,CAA0B;IAEnE,MAAM,CAAC,IAAI,QAAO,GAAG,CAAwB;IAC7C,MAAM,CAAC,MAAM,cAAe,GAAG;;MAE5B;IAEH;;OAEG;IACH,MAAM,CAAC,IAAI,SAAU,qBAAqB,KAAG,QAAQ,iBAAiB,CAAC,CAgBlE;IACL,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC;IACvB,IAAI,EAAE,qBAAqB,CAAC;IAC5B,cAAc,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAY;IACjD,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAY;IACnD,gBAAgB,EAAE,GAAG,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAChD,gBAAgB,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAiB;gBAEnD,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,qBAAqB;IA2C/D;;;;;OAKG;IACH,MAAM,YAAa,MAAM,KAAG,QAAQ,IAAI,CAAC,CAepC;IAEC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAa1C,cAAc;IAER,KAAK;CAKZ"}
|
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
1
|
import { Subject } from "rxjs";
|
|
11
2
|
import net from "net";
|
|
12
3
|
import Transport from "@ledgerhq/hw-transport";
|
|
@@ -20,34 +11,40 @@ import { log } from "@ledgerhq/logs";
|
|
|
20
11
|
* const transport = await SpeculosTransport.open({ apduPort });
|
|
21
12
|
* const res = await transport.send(0xE0, 0x01, 0, 0);
|
|
22
13
|
*/
|
|
23
|
-
class SpeculosTransport extends Transport {
|
|
14
|
+
export default class SpeculosTransport extends Transport {
|
|
15
|
+
static isSupported = () => Promise.resolve(true);
|
|
16
|
+
// this transport is not discoverable
|
|
17
|
+
static list = () => Promise.resolve([]);
|
|
18
|
+
static listen = (_observer) => ({
|
|
19
|
+
unsubscribe: () => { },
|
|
20
|
+
});
|
|
21
|
+
/**
|
|
22
|
+
*
|
|
23
|
+
*/
|
|
24
|
+
static open = (opts) => new Promise((resolve, reject) => {
|
|
25
|
+
const socket = new net.Socket();
|
|
26
|
+
socket.on("error", e => {
|
|
27
|
+
socket.destroy();
|
|
28
|
+
reject(e);
|
|
29
|
+
});
|
|
30
|
+
socket.on("end", () => {
|
|
31
|
+
reject(new DisconnectedDevice("tcp closed"));
|
|
32
|
+
});
|
|
33
|
+
socket.connect(opts.apduPort, opts.host || "127.0.0.1", () => {
|
|
34
|
+
// we delay a bit the transport creation to make sure the tcp does not hang up
|
|
35
|
+
setTimeout(() => {
|
|
36
|
+
resolve(new SpeculosTransport(socket, opts));
|
|
37
|
+
}, 100);
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
apduSocket;
|
|
41
|
+
opts;
|
|
42
|
+
rejectExchange = _e => { };
|
|
43
|
+
resolveExchange = _b => { };
|
|
44
|
+
automationSocket;
|
|
45
|
+
automationEvents = new Subject();
|
|
24
46
|
constructor(apduSocket, opts) {
|
|
25
47
|
super();
|
|
26
|
-
this.rejectExchange = _e => { };
|
|
27
|
-
this.resolveExchange = _b => { };
|
|
28
|
-
this.automationEvents = new Subject();
|
|
29
|
-
/**
|
|
30
|
-
* Send a speculos button command
|
|
31
|
-
* typically "Ll" would press and release the left button
|
|
32
|
-
* typically "Rr" would press and release the right button
|
|
33
|
-
* @param {*} command
|
|
34
|
-
*/
|
|
35
|
-
this.button = (command) => new Promise((resolve, reject) => {
|
|
36
|
-
log("speculos-button", command);
|
|
37
|
-
const { buttonPort, host } = this.opts;
|
|
38
|
-
if (!buttonPort)
|
|
39
|
-
throw new Error("buttonPort is missing");
|
|
40
|
-
const socket = new net.Socket();
|
|
41
|
-
socket.on("error", e => {
|
|
42
|
-
socket.destroy();
|
|
43
|
-
reject(e);
|
|
44
|
-
});
|
|
45
|
-
socket.connect(buttonPort, host || "127.0.0.1", () => {
|
|
46
|
-
socket.write(Buffer.from(command, "ascii"));
|
|
47
|
-
socket.destroy();
|
|
48
|
-
resolve();
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
48
|
this.opts = opts;
|
|
52
49
|
this.apduSocket = apduSocket;
|
|
53
50
|
apduSocket.on("error", e => {
|
|
@@ -88,56 +85,48 @@ class SpeculosTransport extends Transport {
|
|
|
88
85
|
socket.connect(automationPort, opts.host || "127.0.0.1");
|
|
89
86
|
}
|
|
90
87
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
88
|
+
/**
|
|
89
|
+
* Send a speculos button command
|
|
90
|
+
* typically "Ll" would press and release the left button
|
|
91
|
+
* typically "Rr" would press and release the right button
|
|
92
|
+
* @param {*} command
|
|
93
|
+
*/
|
|
94
|
+
button = (command) => new Promise((resolve, reject) => {
|
|
95
|
+
log("speculos-button", command);
|
|
96
|
+
const { buttonPort, host } = this.opts;
|
|
97
|
+
if (!buttonPort)
|
|
98
|
+
throw new Error("buttonPort is missing");
|
|
99
|
+
const socket = new net.Socket();
|
|
100
|
+
socket.on("error", e => {
|
|
101
|
+
socket.destroy();
|
|
102
|
+
reject(e);
|
|
103
|
+
});
|
|
104
|
+
socket.connect(buttonPort, host || "127.0.0.1", () => {
|
|
105
|
+
socket.write(Buffer.from(command, "ascii"));
|
|
106
|
+
socket.destroy();
|
|
107
|
+
resolve();
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
async exchange(apdu) {
|
|
111
|
+
const hex = apdu.toString("hex");
|
|
112
|
+
log("apdu", "=> " + hex);
|
|
113
|
+
const encoded = encodeAPDU(apdu);
|
|
114
|
+
const res = await new Promise((resolve, reject) => {
|
|
115
|
+
this.rejectExchange = reject;
|
|
116
|
+
this.resolveExchange = resolve;
|
|
117
|
+
this.apduSocket.write(encoded);
|
|
103
118
|
});
|
|
119
|
+
log("apdu", "<= " + res.toString("hex"));
|
|
120
|
+
return res;
|
|
104
121
|
}
|
|
105
122
|
setScrambleKey() { }
|
|
106
|
-
close() {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
return Promise.resolve();
|
|
112
|
-
});
|
|
123
|
+
async close() {
|
|
124
|
+
if (this.automationSocket)
|
|
125
|
+
this.automationSocket.destroy();
|
|
126
|
+
this.apduSocket.destroy();
|
|
127
|
+
return Promise.resolve();
|
|
113
128
|
}
|
|
114
129
|
}
|
|
115
|
-
SpeculosTransport.isSupported = () => Promise.resolve(true);
|
|
116
|
-
// this transport is not discoverable
|
|
117
|
-
SpeculosTransport.list = () => Promise.resolve([]);
|
|
118
|
-
SpeculosTransport.listen = (_observer) => ({
|
|
119
|
-
unsubscribe: () => { },
|
|
120
|
-
});
|
|
121
|
-
/**
|
|
122
|
-
*
|
|
123
|
-
*/
|
|
124
|
-
SpeculosTransport.open = (opts) => new Promise((resolve, reject) => {
|
|
125
|
-
const socket = new net.Socket();
|
|
126
|
-
socket.on("error", e => {
|
|
127
|
-
socket.destroy();
|
|
128
|
-
reject(e);
|
|
129
|
-
});
|
|
130
|
-
socket.on("end", () => {
|
|
131
|
-
reject(new DisconnectedDevice("tcp closed"));
|
|
132
|
-
});
|
|
133
|
-
socket.connect(opts.apduPort, opts.host || "127.0.0.1", () => {
|
|
134
|
-
// we delay a bit the transport creation to make sure the tcp does not hang up
|
|
135
|
-
setTimeout(() => {
|
|
136
|
-
resolve(new SpeculosTransport(socket, opts));
|
|
137
|
-
}, 100);
|
|
138
|
-
});
|
|
139
|
-
});
|
|
140
|
-
export default SpeculosTransport;
|
|
141
130
|
function encodeAPDU(apdu) {
|
|
142
131
|
const size = Buffer.allocUnsafe(4);
|
|
143
132
|
size.writeUIntBE(apdu.length, 0, 4);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SpeculosTransport.js","sourceRoot":"","sources":["../src/SpeculosTransport.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SpeculosTransport.js","sourceRoot":"","sources":["../src/SpeculosTransport.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ledgerhq/hw-transport-node-speculos",
|
|
3
|
-
"version": "6.29.
|
|
3
|
+
"version": "6.29.5-next.0",
|
|
4
4
|
"description": "Ledger Hardware Wallet communication layer with speculos Nano simulator",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Ledger",
|
|
@@ -29,14 +29,14 @@
|
|
|
29
29
|
"license": "Apache-2.0",
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"rxjs": "^7.8.1",
|
|
32
|
-
"@ledgerhq/errors": "^6.
|
|
33
|
-
"@ledgerhq/hw-transport": "^6.31.
|
|
32
|
+
"@ledgerhq/errors": "^6.21.0-next.0",
|
|
33
|
+
"@ledgerhq/hw-transport": "^6.31.5-next.0",
|
|
34
34
|
"@ledgerhq/logs": "^6.12.0"
|
|
35
35
|
},
|
|
36
36
|
"gitHead": "dd0dea64b58e5a9125c8a422dcffd29e5ef6abec",
|
|
37
37
|
"devDependencies": {
|
|
38
38
|
"@types/jest": "^29.5.10",
|
|
39
|
-
"@types/node": "^
|
|
39
|
+
"@types/node": "^22.10.10",
|
|
40
40
|
"documentation": "14.0.2",
|
|
41
41
|
"jest": "^29.7.0",
|
|
42
42
|
"rimraf": "^4.4.1",
|
|
@@ -46,9 +46,10 @@
|
|
|
46
46
|
},
|
|
47
47
|
"scripts": {
|
|
48
48
|
"clean": "rimraf lib lib-es",
|
|
49
|
-
"build": "tsc && tsc -m
|
|
49
|
+
"build": "tsc && tsc -m esnext --moduleResolution bundler --outDir lib-es",
|
|
50
50
|
"prewatch": "pnpm build",
|
|
51
51
|
"watch": "tsc --watch",
|
|
52
|
+
"watch:es": "tsc --watch -m esnext --moduleResolution bundler --outDir lib-es",
|
|
52
53
|
"doc": "documentation readme src/** --section=API --pe ts --re ts --re d.ts",
|
|
53
54
|
"lint": "eslint ./src --no-error-on-unmatched-pattern --ext .ts,.tsx --cache",
|
|
54
55
|
"lint:fix": "pnpm lint --fix",
|