@ledgerhq/hw-transport-http 6.30.4-next.1 → 6.30.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 +2 -2
- package/CHANGELOG.md +18 -0
- package/lib/HttpTransport.d.ts +1 -0
- package/lib/HttpTransport.d.ts.map +1 -1
- package/lib/HttpTransport.js +39 -53
- package/lib/HttpTransport.js.map +1 -1
- package/lib/WebSocketTransport.d.ts +1 -0
- package/lib/WebSocketTransport.d.ts.map +1 -1
- package/lib/WebSocketTransport.js +80 -98
- package/lib/WebSocketTransport.js.map +1 -1
- package/lib/withStaticURLs.js +48 -57
- package/lib/withStaticURLs.js.map +1 -1
- package/lib-es/HttpTransport.d.ts +1 -0
- package/lib-es/HttpTransport.d.ts.map +1 -1
- package/lib-es/HttpTransport.js +40 -55
- package/lib-es/HttpTransport.js.map +1 -1
- package/lib-es/WebSocketTransport.d.ts +1 -0
- package/lib-es/WebSocketTransport.d.ts.map +1 -1
- package/lib-es/WebSocketTransport.js +81 -100
- package/lib-es/WebSocketTransport.js.map +1 -1
- package/lib-es/withStaticURLs.js +48 -57
- package/lib-es/withStaticURLs.js.map +1 -1
- package/package.json +6 -5
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
|
|
2
|
-
> @ledgerhq/hw-transport-http@6.30.4
|
|
3
|
-
> tsc && tsc -m
|
|
2
|
+
> @ledgerhq/hw-transport-http@6.30.4 build /home/runner/work/ledger-live/ledger-live/libs/ledgerjs/packages/hw-transport-http
|
|
3
|
+
> tsc && tsc -m esnext --moduleResolution bundler --outDir lib-es
|
|
4
4
|
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# @ledgerhq/hw-transport-http
|
|
2
2
|
|
|
3
|
+
## 6.30.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
|
+
|
|
11
|
+
## 6.30.4
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- [#7883](https://github.com/LedgerHQ/ledger-live/pull/7883) [`f805d14`](https://github.com/LedgerHQ/ledger-live/commit/f805d1470f927824233f94eaba065b00d7af18cf) Thanks [@lambertkevin](https://github.com/lambertkevin)! - Update Axios to 1.7.7 following CVE: https://github.com/advisories/GHSA-8hc4-vh64-cxmj
|
|
16
|
+
|
|
17
|
+
- Updated dependencies [[`0a71c43`](https://github.com/LedgerHQ/ledger-live/commit/0a71c4344b7bb2c6640f3e5dda152ae815573330)]:
|
|
18
|
+
- @ledgerhq/errors@6.19.1
|
|
19
|
+
- @ledgerhq/hw-transport@6.31.4
|
|
20
|
+
|
|
3
21
|
## 6.30.4-next.1
|
|
4
22
|
|
|
5
23
|
### Patch Changes
|
package/lib/HttpTransport.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HttpTransport.d.ts","sourceRoot":"","sources":["../src/HttpTransport.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"HttpTransport.d.ts","sourceRoot":"","sources":["../src/HttpTransport.ts"],"names":[],"mappings":";;AAAA,OAAO,SAAS,MAAM,wBAAwB,CAAC;AAI/C;;GAEG;AAEH,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,SAAS;IAClD,MAAM,CAAC,WAAW,QAAO,QAAQ,OAAO,CAAC,CAAiD;IAE1F,MAAM,CAAC,IAAI,QAAO,GAAG,CAAwB;IAC7C,MAAM,CAAC,MAAM,cAAe,GAAG;;MAE5B;IACH,MAAM,CAAC,KAAK,QAAe,MAAM,qCAY/B;WAEW,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAKpE,GAAG,EAAE,MAAM,CAAC;gBAEA,GAAG,EAAE,MAAM;IAKjB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA4B7C,cAAc;IAEd,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAGvB"}
|
package/lib/HttpTransport.js
CHANGED
|
@@ -1,17 +1,7 @@
|
|
|
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
|
};
|
|
14
|
-
var _a;
|
|
15
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
6
|
const hw_transport_1 = __importDefault(require("@ledgerhq/hw-transport"));
|
|
17
7
|
const errors_1 = require("@ledgerhq/errors");
|
|
@@ -21,61 +11,57 @@ const logs_1 = require("@ledgerhq/logs");
|
|
|
21
11
|
* HTTP transport implementation
|
|
22
12
|
*/
|
|
23
13
|
class HttpTransport extends hw_transport_1.default {
|
|
24
|
-
static
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
14
|
+
static isSupported = () => Promise.resolve(typeof fetch === "function");
|
|
15
|
+
// this transport is not discoverable
|
|
16
|
+
static list = () => Promise.resolve([]);
|
|
17
|
+
static listen = (_observer) => ({
|
|
18
|
+
unsubscribe: () => { },
|
|
19
|
+
});
|
|
20
|
+
static check = async (url, timeout = 5000) => {
|
|
21
|
+
const response = await (0, axios_1.default)({
|
|
22
|
+
url,
|
|
23
|
+
timeout,
|
|
28
24
|
});
|
|
25
|
+
if (response.status !== 200) {
|
|
26
|
+
throw new errors_1.TransportError("failed to access HttpTransport(" + url + "): status " + response.status, "HttpTransportNotAccessible");
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
static async open(url, timeout) {
|
|
30
|
+
await HttpTransport.check(url, timeout);
|
|
31
|
+
return new HttpTransport(url);
|
|
29
32
|
}
|
|
33
|
+
url;
|
|
30
34
|
constructor(url) {
|
|
31
35
|
super();
|
|
32
36
|
this.url = url;
|
|
33
37
|
}
|
|
34
|
-
exchange(apdu) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
}),
|
|
48
|
-
});
|
|
49
|
-
if (response.status !== 200) {
|
|
50
|
-
throw new errors_1.TransportError("failed to communicate to server. code=" + response.status, "HttpTransportStatus" + response.status);
|
|
51
|
-
}
|
|
52
|
-
const body = yield response.data;
|
|
53
|
-
if (body.error)
|
|
54
|
-
throw body.error;
|
|
55
|
-
(0, logs_1.log)("apdu", "<= " + body.data);
|
|
56
|
-
return Buffer.from(body.data, "hex");
|
|
38
|
+
async exchange(apdu) {
|
|
39
|
+
const apduHex = apdu.toString("hex");
|
|
40
|
+
(0, logs_1.log)("apdu", "=> " + apduHex);
|
|
41
|
+
const response = await (0, axios_1.default)({
|
|
42
|
+
method: "POST",
|
|
43
|
+
url: this.url,
|
|
44
|
+
headers: {
|
|
45
|
+
Accept: "application/json",
|
|
46
|
+
"Content-Type": "application/json",
|
|
47
|
+
},
|
|
48
|
+
data: JSON.stringify({
|
|
49
|
+
apduHex,
|
|
50
|
+
}),
|
|
57
51
|
});
|
|
52
|
+
if (response.status !== 200) {
|
|
53
|
+
throw new errors_1.TransportError("failed to communicate to server. code=" + response.status, "HttpTransportStatus" + response.status);
|
|
54
|
+
}
|
|
55
|
+
const body = await response.data;
|
|
56
|
+
if (body.error)
|
|
57
|
+
throw body.error;
|
|
58
|
+
(0, logs_1.log)("apdu", "<= " + body.data);
|
|
59
|
+
return Buffer.from(body.data, "hex");
|
|
58
60
|
}
|
|
59
61
|
setScrambleKey() { }
|
|
60
62
|
close() {
|
|
61
63
|
return Promise.resolve();
|
|
62
64
|
}
|
|
63
65
|
}
|
|
64
|
-
_a = HttpTransport;
|
|
65
|
-
HttpTransport.isSupported = () => Promise.resolve(typeof fetch === "function");
|
|
66
|
-
// this transport is not discoverable
|
|
67
|
-
HttpTransport.list = () => Promise.resolve([]);
|
|
68
|
-
HttpTransport.listen = (_observer) => ({
|
|
69
|
-
unsubscribe: () => { },
|
|
70
|
-
});
|
|
71
|
-
HttpTransport.check = (url_1, ...args_1) => __awaiter(void 0, [url_1, ...args_1], void 0, function* (url, timeout = 5000) {
|
|
72
|
-
const response = yield (0, axios_1.default)({
|
|
73
|
-
url,
|
|
74
|
-
timeout,
|
|
75
|
-
});
|
|
76
|
-
if (response.status !== 200) {
|
|
77
|
-
throw new errors_1.TransportError("failed to access HttpTransport(" + url + "): status " + response.status, "HttpTransportNotAccessible");
|
|
78
|
-
}
|
|
79
|
-
});
|
|
80
66
|
exports.default = HttpTransport;
|
|
81
67
|
//# sourceMappingURL=HttpTransport.js.map
|
package/lib/HttpTransport.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HttpTransport.js","sourceRoot":"","sources":["../src/HttpTransport.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"HttpTransport.js","sourceRoot":"","sources":["../src/HttpTransport.ts"],"names":[],"mappings":";;;;;AAAA,0EAA+C;AAC/C,6CAAkD;AAClD,kDAA0B;AAC1B,yCAAqC;AACrC;;GAEG;AAEH,MAAqB,aAAc,SAAQ,sBAAS;IAClD,MAAM,CAAC,WAAW,GAAG,GAAqB,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC;IAC1F,qCAAqC;IACrC,MAAM,CAAC,IAAI,GAAG,GAAQ,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7C,MAAM,CAAC,MAAM,GAAG,CAAC,SAAc,EAAE,EAAE,CAAC,CAAC;QACnC,WAAW,EAAE,GAAG,EAAE,GAAE,CAAC;KACtB,CAAC,CAAC;IACH,MAAM,CAAC,KAAK,GAAG,KAAK,EAAE,GAAW,EAAE,OAAO,GAAG,IAAI,EAAE,EAAE;QACnD,MAAM,QAAQ,GAAG,MAAM,IAAA,eAAK,EAAC;YAC3B,GAAG;YACH,OAAO;SACR,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,MAAM,IAAI,uBAAc,CACtB,iCAAiC,GAAG,GAAG,GAAG,YAAY,GAAG,QAAQ,CAAC,MAAM,EACxE,4BAA4B,CAC7B,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAW,EAAE,OAAgB;QAC7C,MAAM,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACxC,OAAO,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,GAAG,CAAS;IAEZ,YAAY,GAAW;QACrB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAY;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACrC,IAAA,UAAG,EAAC,MAAM,EAAE,KAAK,GAAG,OAAO,CAAC,CAAC;QAC7B,MAAM,QAAQ,GAAG,MAAM,IAAA,eAAK,EAAC;YAC3B,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,OAAO,EAAE;gBACP,MAAM,EAAE,kBAAkB;gBAC1B,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,OAAO;aACR,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,MAAM,IAAI,uBAAc,CACtB,wCAAwC,GAAG,QAAQ,CAAC,MAAM,EAC1D,qBAAqB,GAAG,QAAQ,CAAC,MAAM,CACxC,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAQ,MAAM,QAAQ,CAAC,IAAI,CAAC;QACtC,IAAI,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,CAAC,KAAK,CAAC;QACjC,IAAA,UAAG,EAAC,MAAM,EAAE,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,cAAc,KAAI,CAAC;IAEnB,KAAK;QACH,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;;AAjEH,gCAkEC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebSocketTransport.d.ts","sourceRoot":"","sources":["../src/WebSocketTransport.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"WebSocketTransport.d.ts","sourceRoot":"","sources":["../src/WebSocketTransport.ts"],"names":[],"mappings":";;AAAA,OAAO,SAAS,MAAM,wBAAwB,CAAC;AAI/C,OAAO,CAAC,MAAM,CAAC;IAEb,UAAU,MAAM,CAAC;QACf,UAAU,MAAM;YACd,SAAS,CAAC,EAAE,SAAS,CAAC;SACvB;KACF;CACF;AAGD;;GAEG;AAEH,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,SAAS;IACvD,MAAM,CAAC,WAAW,QAAO,QAAQ,OAAO,CAAC,CAAqD;IAE9F,MAAM,CAAC,IAAI,QAAO,GAAG,CAAwB;IAC7C,MAAM,CAAC,MAAM,cAAe,GAAG;;MAE5B;IACH,MAAM,CAAC,KAAK,QAAe,MAAM,wCAiC5B;WAEQ,IAAI,CAAC,GAAG,EAAE,MAAM;IAiD7B,IAAI,EAAE,GAAG,CAAC;gBAEE,IAAI,EAAE,GAAG;IAUf,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAc7C,cAAc;IAER,KAAK;CAQZ"}
|
|
@@ -1,17 +1,7 @@
|
|
|
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
|
};
|
|
14
|
-
var _a;
|
|
15
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
6
|
const hw_transport_1 = __importDefault(require("@ledgerhq/hw-transport"));
|
|
17
7
|
const errors_1 = require("@ledgerhq/errors");
|
|
@@ -21,93 +11,13 @@ const WebSocket = global.WebSocket || require("ws");
|
|
|
21
11
|
* WebSocket transport implementation
|
|
22
12
|
*/
|
|
23
13
|
class WebSocketTransport extends hw_transport_1.default {
|
|
24
|
-
static
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
rejectExchange: (_e) => { },
|
|
32
|
-
onDisconnect: () => { },
|
|
33
|
-
close: () => socket.close(),
|
|
34
|
-
send: msg => socket.send(msg),
|
|
35
|
-
};
|
|
36
|
-
socket.onopen = () => {
|
|
37
|
-
socket.send("open");
|
|
38
|
-
};
|
|
39
|
-
socket.onerror = e => {
|
|
40
|
-
exchangeMethods.onDisconnect();
|
|
41
|
-
reject(e);
|
|
42
|
-
};
|
|
43
|
-
socket.onclose = () => {
|
|
44
|
-
exchangeMethods.onDisconnect();
|
|
45
|
-
reject(new errors_1.TransportError("OpenFailed", "OpenFailed"));
|
|
46
|
-
};
|
|
47
|
-
socket.onmessage = e => {
|
|
48
|
-
if (typeof e.data !== "string")
|
|
49
|
-
return;
|
|
50
|
-
const data = JSON.parse(e.data);
|
|
51
|
-
switch (data.type) {
|
|
52
|
-
case "opened":
|
|
53
|
-
return resolve(exchangeMethods);
|
|
54
|
-
case "error":
|
|
55
|
-
reject(new Error(data.error));
|
|
56
|
-
return exchangeMethods.rejectExchange(new errors_1.TransportError(data.error, "WSError"));
|
|
57
|
-
case "response":
|
|
58
|
-
return exchangeMethods.resolveExchange(Buffer.from(data.data, "hex"));
|
|
59
|
-
}
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
catch (e) {
|
|
63
|
-
reject(e);
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
return new _a(exchangeMethods);
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
constructor(hook) {
|
|
70
|
-
super();
|
|
71
|
-
this.hook = hook;
|
|
72
|
-
hook.onDisconnect = () => {
|
|
73
|
-
this.emit("disconnect");
|
|
74
|
-
this.hook.rejectExchange(new errors_1.TransportError("WebSocket disconnected", "WSDisconnect"));
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
exchange(apdu) {
|
|
78
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
79
|
-
const hex = apdu.toString("hex");
|
|
80
|
-
(0, logs_1.log)("apdu", "=> " + hex);
|
|
81
|
-
const res = yield new Promise((resolve, reject) => {
|
|
82
|
-
this.hook.rejectExchange = (e) => reject(e);
|
|
83
|
-
this.hook.resolveExchange = (b) => resolve(b);
|
|
84
|
-
this.hook.send(hex);
|
|
85
|
-
});
|
|
86
|
-
(0, logs_1.log)("apdu", "<= " + res.toString("hex"));
|
|
87
|
-
return res;
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
setScrambleKey() { }
|
|
91
|
-
close() {
|
|
92
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
93
|
-
this.hook.close();
|
|
94
|
-
return new Promise(success => {
|
|
95
|
-
setTimeout(() => {
|
|
96
|
-
success(undefined);
|
|
97
|
-
}, 200);
|
|
98
|
-
});
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
_a = WebSocketTransport;
|
|
103
|
-
WebSocketTransport.isSupported = () => Promise.resolve(typeof WebSocket === "function");
|
|
104
|
-
// this transport is not discoverable
|
|
105
|
-
WebSocketTransport.list = () => Promise.resolve([]);
|
|
106
|
-
WebSocketTransport.listen = (_observer) => ({
|
|
107
|
-
unsubscribe: () => { },
|
|
108
|
-
});
|
|
109
|
-
WebSocketTransport.check = (url_1, ...args_1) => __awaiter(void 0, [url_1, ...args_1], void 0, function* (url, timeout = 5000) {
|
|
110
|
-
return new Promise((resolve, reject) => {
|
|
14
|
+
static isSupported = () => Promise.resolve(typeof WebSocket === "function");
|
|
15
|
+
// this transport is not discoverable
|
|
16
|
+
static list = () => Promise.resolve([]);
|
|
17
|
+
static listen = (_observer) => ({
|
|
18
|
+
unsubscribe: () => { },
|
|
19
|
+
});
|
|
20
|
+
static check = async (url, timeout = 5000) => new Promise((resolve, reject) => {
|
|
111
21
|
const socket = new WebSocket(url);
|
|
112
22
|
let success = false;
|
|
113
23
|
setTimeout(() => {
|
|
@@ -128,6 +38,78 @@ WebSocketTransport.check = (url_1, ...args_1) => __awaiter(void 0, [url_1, ...ar
|
|
|
128
38
|
reject(new errors_1.TransportError("failed to access WebSocketTransport(" + url + "): error", "WebSocketTransportNotAccessible"));
|
|
129
39
|
};
|
|
130
40
|
});
|
|
131
|
-
|
|
41
|
+
static async open(url) {
|
|
42
|
+
const exchangeMethods = await new Promise((resolve, reject) => {
|
|
43
|
+
try {
|
|
44
|
+
const socket = new WebSocket(url);
|
|
45
|
+
const exchangeMethods = {
|
|
46
|
+
resolveExchange: (_b) => { },
|
|
47
|
+
rejectExchange: (_e) => { },
|
|
48
|
+
onDisconnect: () => { },
|
|
49
|
+
close: () => socket.close(),
|
|
50
|
+
send: msg => socket.send(msg),
|
|
51
|
+
};
|
|
52
|
+
socket.onopen = () => {
|
|
53
|
+
socket.send("open");
|
|
54
|
+
};
|
|
55
|
+
socket.onerror = e => {
|
|
56
|
+
exchangeMethods.onDisconnect();
|
|
57
|
+
reject(e);
|
|
58
|
+
};
|
|
59
|
+
socket.onclose = () => {
|
|
60
|
+
exchangeMethods.onDisconnect();
|
|
61
|
+
reject(new errors_1.TransportError("OpenFailed", "OpenFailed"));
|
|
62
|
+
};
|
|
63
|
+
socket.onmessage = e => {
|
|
64
|
+
if (typeof e.data !== "string")
|
|
65
|
+
return;
|
|
66
|
+
const data = JSON.parse(e.data);
|
|
67
|
+
switch (data.type) {
|
|
68
|
+
case "opened":
|
|
69
|
+
return resolve(exchangeMethods);
|
|
70
|
+
case "error":
|
|
71
|
+
reject(new Error(data.error));
|
|
72
|
+
return exchangeMethods.rejectExchange(new errors_1.TransportError(data.error, "WSError"));
|
|
73
|
+
case "response":
|
|
74
|
+
return exchangeMethods.resolveExchange(Buffer.from(data.data, "hex"));
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
catch (e) {
|
|
79
|
+
reject(e);
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
return new WebSocketTransport(exchangeMethods);
|
|
83
|
+
}
|
|
84
|
+
hook;
|
|
85
|
+
constructor(hook) {
|
|
86
|
+
super();
|
|
87
|
+
this.hook = hook;
|
|
88
|
+
hook.onDisconnect = () => {
|
|
89
|
+
this.emit("disconnect");
|
|
90
|
+
this.hook.rejectExchange(new errors_1.TransportError("WebSocket disconnected", "WSDisconnect"));
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
async exchange(apdu) {
|
|
94
|
+
const hex = apdu.toString("hex");
|
|
95
|
+
(0, logs_1.log)("apdu", "=> " + hex);
|
|
96
|
+
const res = await new Promise((resolve, reject) => {
|
|
97
|
+
this.hook.rejectExchange = (e) => reject(e);
|
|
98
|
+
this.hook.resolveExchange = (b) => resolve(b);
|
|
99
|
+
this.hook.send(hex);
|
|
100
|
+
});
|
|
101
|
+
(0, logs_1.log)("apdu", "<= " + res.toString("hex"));
|
|
102
|
+
return res;
|
|
103
|
+
}
|
|
104
|
+
setScrambleKey() { }
|
|
105
|
+
async close() {
|
|
106
|
+
this.hook.close();
|
|
107
|
+
return new Promise(success => {
|
|
108
|
+
setTimeout(() => {
|
|
109
|
+
success(undefined);
|
|
110
|
+
}, 200);
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
}
|
|
132
114
|
exports.default = WebSocketTransport;
|
|
133
115
|
//# sourceMappingURL=WebSocketTransport.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebSocketTransport.js","sourceRoot":"","sources":["../src/WebSocketTransport.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"WebSocketTransport.js","sourceRoot":"","sources":["../src/WebSocketTransport.ts"],"names":[],"mappings":"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"}
|
package/lib/withStaticURLs.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
|
};
|
|
@@ -16,64 +7,64 @@ const HttpTransport_1 = __importDefault(require("./HttpTransport"));
|
|
|
16
7
|
const WebSocketTransport_1 = __importDefault(require("./WebSocketTransport"));
|
|
17
8
|
const hw_transport_1 = __importDefault(require("@ledgerhq/hw-transport"));
|
|
18
9
|
const getTransport = url => (!url.startsWith("ws") ? HttpTransport_1.default : WebSocketTransport_1.default);
|
|
19
|
-
const inferURLs = (urls) =>
|
|
20
|
-
const r =
|
|
10
|
+
const inferURLs = async (urls) => {
|
|
11
|
+
const r = await (typeof urls === "function" ? urls() : urls);
|
|
21
12
|
return typeof r === "string" ? [r] : r;
|
|
22
|
-
}
|
|
13
|
+
};
|
|
23
14
|
exports.default = (urls) => {
|
|
24
15
|
class StaticTransport extends hw_transport_1.default {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
function checkLoop() {
|
|
37
|
-
if (unsubscribed)
|
|
38
|
-
return;
|
|
39
|
-
inferURLs(urls)
|
|
40
|
-
.then(urls => Promise.all(urls.map((url) => __awaiter(this, void 0, void 0, function* () {
|
|
16
|
+
static isSupported = HttpTransport_1.default.isSupported;
|
|
17
|
+
static list = () => inferURLs(urls)
|
|
18
|
+
.then(urls => Promise.all(urls.map(url => getTransport(url)
|
|
19
|
+
.check(url)
|
|
20
|
+
.then(() => [url])
|
|
21
|
+
.catch(() => []))))
|
|
22
|
+
.then(arrs => arrs.reduce((acc, a) => acc.concat(a), []));
|
|
23
|
+
static listen = (observer) => {
|
|
24
|
+
let unsubscribed = false;
|
|
25
|
+
const seen = {};
|
|
26
|
+
function checkLoop() {
|
|
41
27
|
if (unsubscribed)
|
|
42
28
|
return;
|
|
43
|
-
|
|
44
|
-
|
|
29
|
+
inferURLs(urls)
|
|
30
|
+
.then(urls => Promise.all(urls.map(async (url) => {
|
|
45
31
|
if (unsubscribed)
|
|
46
32
|
return;
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
33
|
+
try {
|
|
34
|
+
await getTransport(url).check(url);
|
|
35
|
+
if (unsubscribed)
|
|
36
|
+
return;
|
|
37
|
+
if (!seen[url]) {
|
|
38
|
+
seen[url] = 1;
|
|
39
|
+
observer.next({
|
|
40
|
+
type: "add",
|
|
41
|
+
descriptor: url,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
53
44
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}
|
|
45
|
+
catch (e) {
|
|
46
|
+
// nothing
|
|
47
|
+
if (seen[url]) {
|
|
48
|
+
delete seen[url];
|
|
49
|
+
observer.next({
|
|
50
|
+
type: "remove",
|
|
51
|
+
descriptor: url,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
63
54
|
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
}
|
|
55
|
+
})))
|
|
56
|
+
.then(() => new Promise(success => setTimeout(success, 5000)))
|
|
57
|
+
.then(checkLoop);
|
|
58
|
+
}
|
|
59
|
+
checkLoop();
|
|
60
|
+
return {
|
|
61
|
+
unsubscribe: () => {
|
|
62
|
+
unsubscribed = true;
|
|
63
|
+
},
|
|
64
|
+
};
|
|
74
65
|
};
|
|
75
|
-
|
|
76
|
-
|
|
66
|
+
static open = url => getTransport(url).open(url);
|
|
67
|
+
}
|
|
77
68
|
return StaticTransport;
|
|
78
69
|
};
|
|
79
70
|
//# sourceMappingURL=withStaticURLs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withStaticURLs.js","sourceRoot":"","sources":["../src/withStaticURLs.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"withStaticURLs.js","sourceRoot":"","sources":["../src/withStaticURLs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HttpTransport.d.ts","sourceRoot":"","sources":["../src/HttpTransport.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"HttpTransport.d.ts","sourceRoot":"","sources":["../src/HttpTransport.ts"],"names":[],"mappings":";;AAAA,OAAO,SAAS,MAAM,wBAAwB,CAAC;AAI/C;;GAEG;AAEH,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,SAAS;IAClD,MAAM,CAAC,WAAW,QAAO,QAAQ,OAAO,CAAC,CAAiD;IAE1F,MAAM,CAAC,IAAI,QAAO,GAAG,CAAwB;IAC7C,MAAM,CAAC,MAAM,cAAe,GAAG;;MAE5B;IACH,MAAM,CAAC,KAAK,QAAe,MAAM,qCAY/B;WAEW,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAKpE,GAAG,EAAE,MAAM,CAAC;gBAEA,GAAG,EAAE,MAAM;IAKjB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA4B7C,cAAc;IAEd,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAGvB"}
|
package/lib-es/HttpTransport.js
CHANGED
|
@@ -1,13 +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
|
-
var _a;
|
|
11
1
|
import Transport from "@ledgerhq/hw-transport";
|
|
12
2
|
import { TransportError } from "@ledgerhq/errors";
|
|
13
3
|
import axios from "axios";
|
|
@@ -15,62 +5,57 @@ import { log } from "@ledgerhq/logs";
|
|
|
15
5
|
/**
|
|
16
6
|
* HTTP transport implementation
|
|
17
7
|
*/
|
|
18
|
-
class HttpTransport extends Transport {
|
|
19
|
-
static
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
8
|
+
export default class HttpTransport extends Transport {
|
|
9
|
+
static isSupported = () => Promise.resolve(typeof fetch === "function");
|
|
10
|
+
// this transport is not discoverable
|
|
11
|
+
static list = () => Promise.resolve([]);
|
|
12
|
+
static listen = (_observer) => ({
|
|
13
|
+
unsubscribe: () => { },
|
|
14
|
+
});
|
|
15
|
+
static check = async (url, timeout = 5000) => {
|
|
16
|
+
const response = await axios({
|
|
17
|
+
url,
|
|
18
|
+
timeout,
|
|
23
19
|
});
|
|
20
|
+
if (response.status !== 200) {
|
|
21
|
+
throw new TransportError("failed to access HttpTransport(" + url + "): status " + response.status, "HttpTransportNotAccessible");
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
static async open(url, timeout) {
|
|
25
|
+
await HttpTransport.check(url, timeout);
|
|
26
|
+
return new HttpTransport(url);
|
|
24
27
|
}
|
|
28
|
+
url;
|
|
25
29
|
constructor(url) {
|
|
26
30
|
super();
|
|
27
31
|
this.url = url;
|
|
28
32
|
}
|
|
29
|
-
exchange(apdu) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
}),
|
|
43
|
-
});
|
|
44
|
-
if (response.status !== 200) {
|
|
45
|
-
throw new TransportError("failed to communicate to server. code=" + response.status, "HttpTransportStatus" + response.status);
|
|
46
|
-
}
|
|
47
|
-
const body = yield response.data;
|
|
48
|
-
if (body.error)
|
|
49
|
-
throw body.error;
|
|
50
|
-
log("apdu", "<= " + body.data);
|
|
51
|
-
return Buffer.from(body.data, "hex");
|
|
33
|
+
async exchange(apdu) {
|
|
34
|
+
const apduHex = apdu.toString("hex");
|
|
35
|
+
log("apdu", "=> " + apduHex);
|
|
36
|
+
const response = await axios({
|
|
37
|
+
method: "POST",
|
|
38
|
+
url: this.url,
|
|
39
|
+
headers: {
|
|
40
|
+
Accept: "application/json",
|
|
41
|
+
"Content-Type": "application/json",
|
|
42
|
+
},
|
|
43
|
+
data: JSON.stringify({
|
|
44
|
+
apduHex,
|
|
45
|
+
}),
|
|
52
46
|
});
|
|
47
|
+
if (response.status !== 200) {
|
|
48
|
+
throw new TransportError("failed to communicate to server. code=" + response.status, "HttpTransportStatus" + response.status);
|
|
49
|
+
}
|
|
50
|
+
const body = await response.data;
|
|
51
|
+
if (body.error)
|
|
52
|
+
throw body.error;
|
|
53
|
+
log("apdu", "<= " + body.data);
|
|
54
|
+
return Buffer.from(body.data, "hex");
|
|
53
55
|
}
|
|
54
56
|
setScrambleKey() { }
|
|
55
57
|
close() {
|
|
56
58
|
return Promise.resolve();
|
|
57
59
|
}
|
|
58
60
|
}
|
|
59
|
-
_a = HttpTransport;
|
|
60
|
-
HttpTransport.isSupported = () => Promise.resolve(typeof fetch === "function");
|
|
61
|
-
// this transport is not discoverable
|
|
62
|
-
HttpTransport.list = () => Promise.resolve([]);
|
|
63
|
-
HttpTransport.listen = (_observer) => ({
|
|
64
|
-
unsubscribe: () => { },
|
|
65
|
-
});
|
|
66
|
-
HttpTransport.check = (url_1, ...args_1) => __awaiter(void 0, [url_1, ...args_1], void 0, function* (url, timeout = 5000) {
|
|
67
|
-
const response = yield axios({
|
|
68
|
-
url,
|
|
69
|
-
timeout,
|
|
70
|
-
});
|
|
71
|
-
if (response.status !== 200) {
|
|
72
|
-
throw new TransportError("failed to access HttpTransport(" + url + "): status " + response.status, "HttpTransportNotAccessible");
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
-
export default HttpTransport;
|
|
76
61
|
//# sourceMappingURL=HttpTransport.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HttpTransport.js","sourceRoot":"","sources":["../src/HttpTransport.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"HttpTransport.js","sourceRoot":"","sources":["../src/HttpTransport.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC;;GAEG;AAEH,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,SAAS;IAClD,MAAM,CAAC,WAAW,GAAG,GAAqB,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC;IAC1F,qCAAqC;IACrC,MAAM,CAAC,IAAI,GAAG,GAAQ,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7C,MAAM,CAAC,MAAM,GAAG,CAAC,SAAc,EAAE,EAAE,CAAC,CAAC;QACnC,WAAW,EAAE,GAAG,EAAE,GAAE,CAAC;KACtB,CAAC,CAAC;IACH,MAAM,CAAC,KAAK,GAAG,KAAK,EAAE,GAAW,EAAE,OAAO,GAAG,IAAI,EAAE,EAAE;QACnD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC;YAC3B,GAAG;YACH,OAAO;SACR,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,MAAM,IAAI,cAAc,CACtB,iCAAiC,GAAG,GAAG,GAAG,YAAY,GAAG,QAAQ,CAAC,MAAM,EACxE,4BAA4B,CAC7B,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAW,EAAE,OAAgB;QAC7C,MAAM,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACxC,OAAO,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,GAAG,CAAS;IAEZ,YAAY,GAAW;QACrB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAY;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACrC,GAAG,CAAC,MAAM,EAAE,KAAK,GAAG,OAAO,CAAC,CAAC;QAC7B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC;YAC3B,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,OAAO,EAAE;gBACP,MAAM,EAAE,kBAAkB;gBAC1B,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,OAAO;aACR,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,MAAM,IAAI,cAAc,CACtB,wCAAwC,GAAG,QAAQ,CAAC,MAAM,EAC1D,qBAAqB,GAAG,QAAQ,CAAC,MAAM,CACxC,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAQ,MAAM,QAAQ,CAAC,IAAI,CAAC;QACtC,IAAI,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,CAAC,KAAK,CAAC;QACjC,GAAG,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,cAAc,KAAI,CAAC;IAEnB,KAAK;QACH,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebSocketTransport.d.ts","sourceRoot":"","sources":["../src/WebSocketTransport.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"WebSocketTransport.d.ts","sourceRoot":"","sources":["../src/WebSocketTransport.ts"],"names":[],"mappings":";;AAAA,OAAO,SAAS,MAAM,wBAAwB,CAAC;AAI/C,OAAO,CAAC,MAAM,CAAC;IAEb,UAAU,MAAM,CAAC;QACf,UAAU,MAAM;YACd,SAAS,CAAC,EAAE,SAAS,CAAC;SACvB;KACF;CACF;AAGD;;GAEG;AAEH,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,SAAS;IACvD,MAAM,CAAC,WAAW,QAAO,QAAQ,OAAO,CAAC,CAAqD;IAE9F,MAAM,CAAC,IAAI,QAAO,GAAG,CAAwB;IAC7C,MAAM,CAAC,MAAM,cAAe,GAAG;;MAE5B;IACH,MAAM,CAAC,KAAK,QAAe,MAAM,wCAiC5B;WAEQ,IAAI,CAAC,GAAG,EAAE,MAAM;IAiD7B,IAAI,EAAE,GAAG,CAAC;gBAEE,IAAI,EAAE,GAAG;IAUf,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAc7C,cAAc;IAER,KAAK;CAQZ"}
|
|
@@ -1,13 +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
|
-
var _a;
|
|
11
1
|
import Transport from "@ledgerhq/hw-transport";
|
|
12
2
|
import { TransportError } from "@ledgerhq/errors";
|
|
13
3
|
import { log } from "@ledgerhq/logs";
|
|
@@ -15,94 +5,14 @@ const WebSocket = global.WebSocket || require("ws");
|
|
|
15
5
|
/**
|
|
16
6
|
* WebSocket transport implementation
|
|
17
7
|
*/
|
|
18
|
-
class WebSocketTransport extends Transport {
|
|
19
|
-
static
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
rejectExchange: (_e) => { },
|
|
27
|
-
onDisconnect: () => { },
|
|
28
|
-
close: () => socket.close(),
|
|
29
|
-
send: msg => socket.send(msg),
|
|
30
|
-
};
|
|
31
|
-
socket.onopen = () => {
|
|
32
|
-
socket.send("open");
|
|
33
|
-
};
|
|
34
|
-
socket.onerror = e => {
|
|
35
|
-
exchangeMethods.onDisconnect();
|
|
36
|
-
reject(e);
|
|
37
|
-
};
|
|
38
|
-
socket.onclose = () => {
|
|
39
|
-
exchangeMethods.onDisconnect();
|
|
40
|
-
reject(new TransportError("OpenFailed", "OpenFailed"));
|
|
41
|
-
};
|
|
42
|
-
socket.onmessage = e => {
|
|
43
|
-
if (typeof e.data !== "string")
|
|
44
|
-
return;
|
|
45
|
-
const data = JSON.parse(e.data);
|
|
46
|
-
switch (data.type) {
|
|
47
|
-
case "opened":
|
|
48
|
-
return resolve(exchangeMethods);
|
|
49
|
-
case "error":
|
|
50
|
-
reject(new Error(data.error));
|
|
51
|
-
return exchangeMethods.rejectExchange(new TransportError(data.error, "WSError"));
|
|
52
|
-
case "response":
|
|
53
|
-
return exchangeMethods.resolveExchange(Buffer.from(data.data, "hex"));
|
|
54
|
-
}
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
catch (e) {
|
|
58
|
-
reject(e);
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
return new _a(exchangeMethods);
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
constructor(hook) {
|
|
65
|
-
super();
|
|
66
|
-
this.hook = hook;
|
|
67
|
-
hook.onDisconnect = () => {
|
|
68
|
-
this.emit("disconnect");
|
|
69
|
-
this.hook.rejectExchange(new TransportError("WebSocket disconnected", "WSDisconnect"));
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
exchange(apdu) {
|
|
73
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
74
|
-
const hex = apdu.toString("hex");
|
|
75
|
-
log("apdu", "=> " + hex);
|
|
76
|
-
const res = yield new Promise((resolve, reject) => {
|
|
77
|
-
this.hook.rejectExchange = (e) => reject(e);
|
|
78
|
-
this.hook.resolveExchange = (b) => resolve(b);
|
|
79
|
-
this.hook.send(hex);
|
|
80
|
-
});
|
|
81
|
-
log("apdu", "<= " + res.toString("hex"));
|
|
82
|
-
return res;
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
setScrambleKey() { }
|
|
86
|
-
close() {
|
|
87
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
88
|
-
this.hook.close();
|
|
89
|
-
return new Promise(success => {
|
|
90
|
-
setTimeout(() => {
|
|
91
|
-
success(undefined);
|
|
92
|
-
}, 200);
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
_a = WebSocketTransport;
|
|
98
|
-
WebSocketTransport.isSupported = () => Promise.resolve(typeof WebSocket === "function");
|
|
99
|
-
// this transport is not discoverable
|
|
100
|
-
WebSocketTransport.list = () => Promise.resolve([]);
|
|
101
|
-
WebSocketTransport.listen = (_observer) => ({
|
|
102
|
-
unsubscribe: () => { },
|
|
103
|
-
});
|
|
104
|
-
WebSocketTransport.check = (url_1, ...args_1) => __awaiter(void 0, [url_1, ...args_1], void 0, function* (url, timeout = 5000) {
|
|
105
|
-
return new Promise((resolve, reject) => {
|
|
8
|
+
export default class WebSocketTransport extends Transport {
|
|
9
|
+
static isSupported = () => Promise.resolve(typeof WebSocket === "function");
|
|
10
|
+
// this transport is not discoverable
|
|
11
|
+
static list = () => Promise.resolve([]);
|
|
12
|
+
static listen = (_observer) => ({
|
|
13
|
+
unsubscribe: () => { },
|
|
14
|
+
});
|
|
15
|
+
static check = async (url, timeout = 5000) => new Promise((resolve, reject) => {
|
|
106
16
|
const socket = new WebSocket(url);
|
|
107
17
|
let success = false;
|
|
108
18
|
setTimeout(() => {
|
|
@@ -123,6 +33,77 @@ WebSocketTransport.check = (url_1, ...args_1) => __awaiter(void 0, [url_1, ...ar
|
|
|
123
33
|
reject(new TransportError("failed to access WebSocketTransport(" + url + "): error", "WebSocketTransportNotAccessible"));
|
|
124
34
|
};
|
|
125
35
|
});
|
|
126
|
-
|
|
127
|
-
|
|
36
|
+
static async open(url) {
|
|
37
|
+
const exchangeMethods = await new Promise((resolve, reject) => {
|
|
38
|
+
try {
|
|
39
|
+
const socket = new WebSocket(url);
|
|
40
|
+
const exchangeMethods = {
|
|
41
|
+
resolveExchange: (_b) => { },
|
|
42
|
+
rejectExchange: (_e) => { },
|
|
43
|
+
onDisconnect: () => { },
|
|
44
|
+
close: () => socket.close(),
|
|
45
|
+
send: msg => socket.send(msg),
|
|
46
|
+
};
|
|
47
|
+
socket.onopen = () => {
|
|
48
|
+
socket.send("open");
|
|
49
|
+
};
|
|
50
|
+
socket.onerror = e => {
|
|
51
|
+
exchangeMethods.onDisconnect();
|
|
52
|
+
reject(e);
|
|
53
|
+
};
|
|
54
|
+
socket.onclose = () => {
|
|
55
|
+
exchangeMethods.onDisconnect();
|
|
56
|
+
reject(new TransportError("OpenFailed", "OpenFailed"));
|
|
57
|
+
};
|
|
58
|
+
socket.onmessage = e => {
|
|
59
|
+
if (typeof e.data !== "string")
|
|
60
|
+
return;
|
|
61
|
+
const data = JSON.parse(e.data);
|
|
62
|
+
switch (data.type) {
|
|
63
|
+
case "opened":
|
|
64
|
+
return resolve(exchangeMethods);
|
|
65
|
+
case "error":
|
|
66
|
+
reject(new Error(data.error));
|
|
67
|
+
return exchangeMethods.rejectExchange(new TransportError(data.error, "WSError"));
|
|
68
|
+
case "response":
|
|
69
|
+
return exchangeMethods.resolveExchange(Buffer.from(data.data, "hex"));
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
catch (e) {
|
|
74
|
+
reject(e);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
return new WebSocketTransport(exchangeMethods);
|
|
78
|
+
}
|
|
79
|
+
hook;
|
|
80
|
+
constructor(hook) {
|
|
81
|
+
super();
|
|
82
|
+
this.hook = hook;
|
|
83
|
+
hook.onDisconnect = () => {
|
|
84
|
+
this.emit("disconnect");
|
|
85
|
+
this.hook.rejectExchange(new TransportError("WebSocket disconnected", "WSDisconnect"));
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
async exchange(apdu) {
|
|
89
|
+
const hex = apdu.toString("hex");
|
|
90
|
+
log("apdu", "=> " + hex);
|
|
91
|
+
const res = await new Promise((resolve, reject) => {
|
|
92
|
+
this.hook.rejectExchange = (e) => reject(e);
|
|
93
|
+
this.hook.resolveExchange = (b) => resolve(b);
|
|
94
|
+
this.hook.send(hex);
|
|
95
|
+
});
|
|
96
|
+
log("apdu", "<= " + res.toString("hex"));
|
|
97
|
+
return res;
|
|
98
|
+
}
|
|
99
|
+
setScrambleKey() { }
|
|
100
|
+
async close() {
|
|
101
|
+
this.hook.close();
|
|
102
|
+
return new Promise(success => {
|
|
103
|
+
setTimeout(() => {
|
|
104
|
+
success(undefined);
|
|
105
|
+
}, 200);
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
}
|
|
128
109
|
//# sourceMappingURL=WebSocketTransport.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebSocketTransport.js","sourceRoot":"","sources":["../src/WebSocketTransport.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"WebSocketTransport.js","sourceRoot":"","sources":["../src/WebSocketTransport.ts"],"names":[],"mappings":"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"}
|
package/lib-es/withStaticURLs.js
CHANGED
|
@@ -1,74 +1,65 @@
|
|
|
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 HttpTransport from "./HttpTransport";
|
|
11
2
|
import WebSocketTransport from "./WebSocketTransport";
|
|
12
3
|
import Transport from "@ledgerhq/hw-transport";
|
|
13
4
|
const getTransport = url => (!url.startsWith("ws") ? HttpTransport : WebSocketTransport);
|
|
14
|
-
const inferURLs = (urls) =>
|
|
15
|
-
const r =
|
|
5
|
+
const inferURLs = async (urls) => {
|
|
6
|
+
const r = await (typeof urls === "function" ? urls() : urls);
|
|
16
7
|
return typeof r === "string" ? [r] : r;
|
|
17
|
-
}
|
|
8
|
+
};
|
|
18
9
|
export default (urls) => {
|
|
19
10
|
class StaticTransport extends Transport {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
function checkLoop() {
|
|
32
|
-
if (unsubscribed)
|
|
33
|
-
return;
|
|
34
|
-
inferURLs(urls)
|
|
35
|
-
.then(urls => Promise.all(urls.map((url) => __awaiter(this, void 0, void 0, function* () {
|
|
11
|
+
static isSupported = HttpTransport.isSupported;
|
|
12
|
+
static list = () => inferURLs(urls)
|
|
13
|
+
.then(urls => Promise.all(urls.map(url => getTransport(url)
|
|
14
|
+
.check(url)
|
|
15
|
+
.then(() => [url])
|
|
16
|
+
.catch(() => []))))
|
|
17
|
+
.then(arrs => arrs.reduce((acc, a) => acc.concat(a), []));
|
|
18
|
+
static listen = (observer) => {
|
|
19
|
+
let unsubscribed = false;
|
|
20
|
+
const seen = {};
|
|
21
|
+
function checkLoop() {
|
|
36
22
|
if (unsubscribed)
|
|
37
23
|
return;
|
|
38
|
-
|
|
39
|
-
|
|
24
|
+
inferURLs(urls)
|
|
25
|
+
.then(urls => Promise.all(urls.map(async (url) => {
|
|
40
26
|
if (unsubscribed)
|
|
41
27
|
return;
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
28
|
+
try {
|
|
29
|
+
await getTransport(url).check(url);
|
|
30
|
+
if (unsubscribed)
|
|
31
|
+
return;
|
|
32
|
+
if (!seen[url]) {
|
|
33
|
+
seen[url] = 1;
|
|
34
|
+
observer.next({
|
|
35
|
+
type: "add",
|
|
36
|
+
descriptor: url,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
48
39
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
}
|
|
40
|
+
catch (e) {
|
|
41
|
+
// nothing
|
|
42
|
+
if (seen[url]) {
|
|
43
|
+
delete seen[url];
|
|
44
|
+
observer.next({
|
|
45
|
+
type: "remove",
|
|
46
|
+
descriptor: url,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
58
49
|
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
}
|
|
50
|
+
})))
|
|
51
|
+
.then(() => new Promise(success => setTimeout(success, 5000)))
|
|
52
|
+
.then(checkLoop);
|
|
53
|
+
}
|
|
54
|
+
checkLoop();
|
|
55
|
+
return {
|
|
56
|
+
unsubscribe: () => {
|
|
57
|
+
unsubscribed = true;
|
|
58
|
+
},
|
|
59
|
+
};
|
|
69
60
|
};
|
|
70
|
-
|
|
71
|
-
|
|
61
|
+
static open = url => getTransport(url).open(url);
|
|
62
|
+
}
|
|
72
63
|
return StaticTransport;
|
|
73
64
|
};
|
|
74
65
|
//# sourceMappingURL=withStaticURLs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withStaticURLs.js","sourceRoot":"","sources":["../src/withStaticURLs.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"withStaticURLs.js","sourceRoot":"","sources":["../src/withStaticURLs.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ledgerhq/hw-transport-http",
|
|
3
|
-
"version": "6.30.
|
|
3
|
+
"version": "6.30.5-next.0",
|
|
4
4
|
"description": "Ledger Hardware Wallet communication layer over http",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Ledger",
|
|
@@ -29,14 +29,14 @@
|
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"axios": "1.7.7",
|
|
31
31
|
"ws": "^7.5.2",
|
|
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
|
"lint": "eslint ./src --no-error-on-unmatched-pattern --ext .ts,.tsx --cache",
|
|
53
54
|
"lint:fix": "pnpm lint --fix",
|
|
54
55
|
"test": "jest",
|