@trezor/connect 9.0.6 → 9.0.8
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/CHANGELOG.md +22 -2
- package/README.md +1 -1
- package/lib/api/authorizeCoinjoin.d.ts +7 -0
- package/lib/api/{authorizeCoinJoin.js → authorizeCoinjoin.js} +3 -3
- package/lib/api/bitcoin/createPendingTx.d.ts +35 -0
- package/lib/api/bitcoin/createPendingTx.js +60 -0
- package/lib/api/bitcoin/index.d.ts +1 -0
- package/lib/api/bitcoin/index.js +1 -0
- package/lib/api/blockchainGetAccountBalanceHistory.d.ts +1 -1
- package/lib/api/blockchainGetCurrentFiatRates.d.ts +2 -1
- package/lib/api/blockchainGetCurrentFiatRates.js +6 -1
- package/lib/api/blockchainGetFiatRatesForTimestamps.d.ts +3 -1
- package/lib/api/blockchainGetFiatRatesForTimestamps.js +9 -1
- package/lib/api/blockchainGetTransactions.d.ts +1 -1
- package/lib/api/cardano/cardanoAuxiliaryData.js +43 -23
- package/lib/api/cardanoSignTransaction.d.ts +2 -1
- package/lib/api/cardanoSignTransaction.js +21 -11
- package/lib/api/composeTransaction.js +2 -2
- package/lib/api/ethereum/ethereumDefinitions.d.ts +7 -0
- package/lib/api/ethereum/ethereumDefinitions.js +43 -0
- package/lib/api/ethereum/ethereumSignTx.d.ts +3 -2
- package/lib/api/ethereum/ethereumSignTx.js +4 -2
- package/lib/api/ethereumGetAddress.d.ts +2 -1
- package/lib/api/ethereumGetAddress.js +19 -2
- package/lib/api/ethereumSignMessage.js +13 -0
- package/lib/api/ethereumSignTransaction.js +10 -3
- package/lib/api/ethereumSignTypedData.js +13 -0
- package/lib/api/firmware/getBinary.d.ts +3 -12
- package/lib/api/firmware/getBinary.js +5 -9
- package/lib/api/firmwareUpdate.d.ts +3 -2
- package/lib/api/firmwareUpdate.js +4 -5
- package/lib/api/getAccountInfo.d.ts +8 -8
- package/lib/api/getAccountInfo.js +1 -1
- package/lib/api/index.d.ts +1 -1
- package/lib/api/index.js +3 -3
- package/lib/api/setBusy.js +1 -4
- package/lib/api/setProxy.js +1 -1
- package/lib/api/signTransaction.d.ts +2 -1
- package/lib/api/signTransaction.js +12 -2
- package/lib/api/unlockPath.js +1 -4
- package/lib/backend/Blockchain.d.ts +3 -0
- package/lib/core/AbstractMethod.d.ts +1 -0
- package/lib/core/AbstractMethod.js +9 -0
- package/lib/core/index.d.ts +1 -1
- package/lib/core/index.js +24 -11
- package/lib/core/method.d.ts +1 -1
- package/lib/data/DataManager.d.ts +92 -15
- package/lib/data/DataManager.js +3 -53
- package/lib/data/config.js +9 -3
- package/lib/data/connectSettings.d.ts +0 -1
- package/lib/data/connectSettings.js +14 -58
- package/lib/data/firmwareInfo.js +48 -46
- package/lib/data/transportInfo.d.ts +1 -0
- package/lib/data/transportInfo.js +14 -1
- package/lib/data/udevInfo.d.ts +1 -0
- package/lib/data/udevInfo.js +14 -1
- package/lib/data/version.d.ts +1 -1
- package/lib/data/version.js +1 -1
- package/lib/device/DescriptorStream.js +1 -1
- package/lib/device/Device.js +1 -2
- package/lib/device/DeviceCommands.d.ts +1 -1
- package/lib/device/DeviceCommands.js +6 -7
- package/lib/device/DeviceList.d.ts +1 -2
- package/lib/device/DeviceList.js +27 -19
- package/lib/events/iframe.d.ts +2 -1
- package/lib/events/popup.d.ts +2 -1
- package/lib/events/transport.d.ts +2 -1
- package/lib/factory.js +1 -1
- package/lib/index.js +5 -4
- package/lib/types/api/{authorizeCoinJoin.d.ts → authorizeCoinjoin.d.ts} +3 -3
- package/lib/types/api/{authorizeCoinJoin.js → authorizeCoinjoin.js} +1 -1
- package/lib/types/api/bitcoin/index.d.ts +4 -0
- package/lib/types/api/cardano/index.d.ts +10 -9
- package/lib/types/api/firmwareUpdate.d.ts +2 -1
- package/lib/types/api/index.d.ts +2 -2
- package/lib/types/firmware.d.ts +2 -3
- package/lib/types/index.d.ts +1 -1
- package/lib/types/params.d.ts +1 -0
- package/lib/types/settings.d.ts +12 -1
- package/lib/utils/firmwareUtils.d.ts +0 -1
- package/lib/utils/firmwareUtils.js +1 -9
- package/lib/utils/pathUtils.d.ts +1 -0
- package/lib/utils/pathUtils.js +3 -1
- package/lib/utils/promiseUtils.d.ts +5 -1
- package/lib/utils/promiseUtils.js +7 -3
- package/lib/utils/urlUtils.d.ts +2 -1
- package/lib/utils/urlUtils.js +18 -3
- package/lib/utils/versionUtils.d.ts +3 -1
- package/lib/utils/versionUtils.js +5 -2
- package/package.json +16 -16
- package/lib/api/authorizeCoinJoin.d.ts +0 -7
- package/lib/device/AbortController.d.ts +0 -21
- package/lib/device/AbortController.js +0 -40
- package/lib/utils/browserUtils.d.ts +0 -21
- package/lib/utils/browserUtils.js +0 -100
- package/lib/utils/windowsUtils.d.ts +0 -2
- package/lib/utils/windowsUtils.js +0 -6
|
@@ -1,29 +1,106 @@
|
|
|
1
|
-
import { config } from './config';
|
|
2
1
|
import type { ConnectSettings } from '../types';
|
|
3
2
|
type AssetCollection = {
|
|
4
3
|
[key: string]: JSON;
|
|
5
4
|
};
|
|
6
5
|
export declare class DataManager {
|
|
7
6
|
static assets: AssetCollection;
|
|
8
|
-
static settings
|
|
7
|
+
private static settings;
|
|
9
8
|
private static messages;
|
|
10
9
|
static load(settings: ConnectSettings, withAssets?: boolean): Promise<void>;
|
|
11
10
|
static getProtobufMessages(): JSON;
|
|
12
|
-
static isWhitelisted(origin: string): {
|
|
13
|
-
origin: string;
|
|
14
|
-
priority: number;
|
|
15
|
-
} | undefined;
|
|
16
|
-
static isManagementAllowed(): {
|
|
17
|
-
origin: string;
|
|
18
|
-
} | undefined;
|
|
19
|
-
static getPriority(whitelist?: typeof config['whitelist'][0]): number;
|
|
20
|
-
static getHostLabel(origin: string): {
|
|
21
|
-
origin: string;
|
|
22
|
-
label: string;
|
|
23
|
-
icon: string;
|
|
24
|
-
} | undefined;
|
|
25
11
|
static getSettings(key?: undefined): ConnectSettings;
|
|
26
12
|
static getSettings<T extends keyof ConnectSettings>(key: T): ConnectSettings[T];
|
|
13
|
+
static getConfig(): {
|
|
14
|
+
webusb: {
|
|
15
|
+
vendorId: number;
|
|
16
|
+
productId: number;
|
|
17
|
+
}[];
|
|
18
|
+
whitelist: {
|
|
19
|
+
origin: string;
|
|
20
|
+
priority: number;
|
|
21
|
+
}[];
|
|
22
|
+
management: {
|
|
23
|
+
origin: string;
|
|
24
|
+
}[];
|
|
25
|
+
knownHosts: {
|
|
26
|
+
origin: string;
|
|
27
|
+
label: string;
|
|
28
|
+
icon: string;
|
|
29
|
+
}[];
|
|
30
|
+
onionDomains: {
|
|
31
|
+
'trezor.io': string;
|
|
32
|
+
};
|
|
33
|
+
assets: {
|
|
34
|
+
name: string;
|
|
35
|
+
url: string;
|
|
36
|
+
}[];
|
|
37
|
+
messages: string;
|
|
38
|
+
supportedBrowsers: {
|
|
39
|
+
chrome: {
|
|
40
|
+
version: number;
|
|
41
|
+
download: string;
|
|
42
|
+
update: string;
|
|
43
|
+
};
|
|
44
|
+
chromium: {
|
|
45
|
+
version: number;
|
|
46
|
+
download: string;
|
|
47
|
+
update: string;
|
|
48
|
+
};
|
|
49
|
+
electron: {
|
|
50
|
+
version: number;
|
|
51
|
+
download: string;
|
|
52
|
+
update: string;
|
|
53
|
+
};
|
|
54
|
+
firefox: {
|
|
55
|
+
version: number;
|
|
56
|
+
download: string;
|
|
57
|
+
update: string;
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
supportedFirmware: ({
|
|
61
|
+
coin: string[];
|
|
62
|
+
methods: string[];
|
|
63
|
+
min: string[];
|
|
64
|
+
max: undefined;
|
|
65
|
+
comment: string[];
|
|
66
|
+
capabilities?: undefined;
|
|
67
|
+
} | {
|
|
68
|
+
coin: string[];
|
|
69
|
+
min: string[];
|
|
70
|
+
comment: string[];
|
|
71
|
+
methods?: undefined;
|
|
72
|
+
max?: undefined;
|
|
73
|
+
capabilities?: undefined;
|
|
74
|
+
} | {
|
|
75
|
+
methods: string[];
|
|
76
|
+
min: string[];
|
|
77
|
+
comment: string[];
|
|
78
|
+
coin?: undefined;
|
|
79
|
+
max?: undefined;
|
|
80
|
+
capabilities?: undefined;
|
|
81
|
+
} | {
|
|
82
|
+
capabilities: string[];
|
|
83
|
+
min: string[];
|
|
84
|
+
comment: string[];
|
|
85
|
+
coin?: undefined;
|
|
86
|
+
methods?: undefined;
|
|
87
|
+
max?: undefined;
|
|
88
|
+
} | {
|
|
89
|
+
coin: string[];
|
|
90
|
+
methods: string[];
|
|
91
|
+
min: string[];
|
|
92
|
+
comment: string[];
|
|
93
|
+
max?: undefined;
|
|
94
|
+
capabilities?: undefined;
|
|
95
|
+
} | {
|
|
96
|
+
capabilities: string[];
|
|
97
|
+
methods: string[];
|
|
98
|
+
min: string[];
|
|
99
|
+
coin?: undefined;
|
|
100
|
+
max?: undefined;
|
|
101
|
+
comment?: undefined;
|
|
102
|
+
})[];
|
|
103
|
+
};
|
|
27
104
|
}
|
|
28
105
|
export {};
|
|
29
106
|
//# sourceMappingURL=DataManager.d.ts.map
|
package/lib/data/DataManager.js
CHANGED
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DataManager = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const parse_uri_1 = tslib_1.__importDefault(require("parse-uri"));
|
|
6
4
|
const assets_1 = require("../utils/assets");
|
|
7
|
-
const connectSettings_1 = require("./connectSettings");
|
|
8
5
|
const coinInfo_1 = require("./coinInfo");
|
|
9
6
|
const firmwareInfo_1 = require("./firmwareInfo");
|
|
10
7
|
const transportInfo_1 = require("./transportInfo");
|
|
@@ -13,26 +10,6 @@ class DataManager {
|
|
|
13
10
|
static async load(settings, withAssets = true) {
|
|
14
11
|
const ts = settings.env === 'web' ? `?r=${settings.timestamp}` : '';
|
|
15
12
|
this.settings = settings;
|
|
16
|
-
const isLocalhost = typeof window !== 'undefined' && window.location
|
|
17
|
-
? window.location.hostname === 'localhost'
|
|
18
|
-
: true;
|
|
19
|
-
const whitelist = DataManager.isWhitelisted(this.settings.origin || '');
|
|
20
|
-
this.settings.trustedHost = (isLocalhost || !!whitelist) && !this.settings.popup;
|
|
21
|
-
if (!this.settings.trustedHost) {
|
|
22
|
-
this.settings.popup = true;
|
|
23
|
-
}
|
|
24
|
-
if (!this.settings.trustedHost && !whitelist) {
|
|
25
|
-
this.settings.debug = false;
|
|
26
|
-
}
|
|
27
|
-
this.settings.priority = DataManager.getPriority(whitelist);
|
|
28
|
-
const knownHost = DataManager.getHostLabel(this.settings.extension || this.settings.origin || '');
|
|
29
|
-
if (knownHost) {
|
|
30
|
-
this.settings.hostLabel = knownHost.label;
|
|
31
|
-
this.settings.hostIcon = knownHost.icon;
|
|
32
|
-
}
|
|
33
|
-
if (this.settings.popup && this.settings.webusb && this.settings.env !== 'webextension') {
|
|
34
|
-
this.settings.webusb = false;
|
|
35
|
-
}
|
|
36
13
|
if (!withAssets)
|
|
37
14
|
return;
|
|
38
15
|
const assetPromises = config_1.config.assets.map(async (asset) => {
|
|
@@ -49,36 +26,6 @@ class DataManager {
|
|
|
49
26
|
static getProtobufMessages() {
|
|
50
27
|
return this.messages;
|
|
51
28
|
}
|
|
52
|
-
static isWhitelisted(origin) {
|
|
53
|
-
const uri = (0, parse_uri_1.default)(origin);
|
|
54
|
-
if (uri && typeof uri.host === 'string') {
|
|
55
|
-
const parts = uri.host.split('.');
|
|
56
|
-
if (parts.length > 2) {
|
|
57
|
-
uri.host = parts.slice(parts.length - 2, parts.length).join('.');
|
|
58
|
-
}
|
|
59
|
-
return config_1.config.whitelist.find(item => item.origin === origin || item.origin === uri.host);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
static isManagementAllowed() {
|
|
63
|
-
var _a;
|
|
64
|
-
const uri = (0, parse_uri_1.default)((_a = this.settings.origin) !== null && _a !== void 0 ? _a : '');
|
|
65
|
-
if (uri && typeof uri.host === 'string') {
|
|
66
|
-
const parts = uri.host.split('.');
|
|
67
|
-
if (parts.length > 2) {
|
|
68
|
-
uri.host = parts.slice(parts.length - 2, parts.length).join('.');
|
|
69
|
-
}
|
|
70
|
-
return config_1.config.management.find(item => item.origin === this.settings.origin || item.origin === uri.host);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
static getPriority(whitelist) {
|
|
74
|
-
if (whitelist) {
|
|
75
|
-
return whitelist.priority;
|
|
76
|
-
}
|
|
77
|
-
return connectSettings_1.DEFAULT_PRIORITY;
|
|
78
|
-
}
|
|
79
|
-
static getHostLabel(origin) {
|
|
80
|
-
return config_1.config.knownHosts.find(host => host.origin === origin);
|
|
81
|
-
}
|
|
82
29
|
static getSettings(key) {
|
|
83
30
|
if (!this.settings)
|
|
84
31
|
return null;
|
|
@@ -87,6 +34,9 @@ class DataManager {
|
|
|
87
34
|
}
|
|
88
35
|
return this.settings;
|
|
89
36
|
}
|
|
37
|
+
static getConfig() {
|
|
38
|
+
return config_1.config;
|
|
39
|
+
}
|
|
90
40
|
}
|
|
91
41
|
exports.DataManager = DataManager;
|
|
92
42
|
DataManager.assets = {};
|
package/lib/data/config.js
CHANGED
|
@@ -101,7 +101,7 @@ exports.config = {
|
|
|
101
101
|
],
|
|
102
102
|
},
|
|
103
103
|
{
|
|
104
|
-
coin: ['eth', '
|
|
104
|
+
coin: ['eth', 'tgor'],
|
|
105
105
|
min: ['1.8.0', '2.1.0'],
|
|
106
106
|
comment: ['There were protobuf backwards incompatible changes.'],
|
|
107
107
|
},
|
|
@@ -182,8 +182,14 @@ exports.config = {
|
|
|
182
182
|
},
|
|
183
183
|
{
|
|
184
184
|
capabilities: ['coinjoin'],
|
|
185
|
-
methods: [
|
|
186
|
-
|
|
185
|
+
methods: [
|
|
186
|
+
'authorizeCoinjoin',
|
|
187
|
+
'getOwnershipId',
|
|
188
|
+
'getOwnershipProof',
|
|
189
|
+
'setBusy',
|
|
190
|
+
'unlockPath',
|
|
191
|
+
],
|
|
192
|
+
min: ['1.12.1', '2.5.3'],
|
|
187
193
|
},
|
|
188
194
|
],
|
|
189
195
|
};
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { ConnectSettings } from '../types';
|
|
2
2
|
export declare const DEFAULT_PRIORITY = 2;
|
|
3
|
-
export declare const getEnv: () => "web" | "webextension" | "electron" | "react-native";
|
|
4
3
|
export declare const corsValidator: (url?: string) => string | undefined;
|
|
5
4
|
export declare const parseConnectSettings: (input?: Partial<ConnectSettings>) => ConnectSettings;
|
|
6
5
|
//# sourceMappingURL=connectSettings.d.ts.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.parseConnectSettings = exports.corsValidator = exports.
|
|
3
|
+
exports.parseConnectSettings = exports.corsValidator = exports.DEFAULT_PRIORITY = void 0;
|
|
4
4
|
const version_1 = require("./version");
|
|
5
5
|
exports.DEFAULT_PRIORITY = 2;
|
|
6
6
|
const initialSettings = {
|
|
@@ -8,16 +8,15 @@ const initialSettings = {
|
|
|
8
8
|
version: version_1.VERSION,
|
|
9
9
|
debug: false,
|
|
10
10
|
priority: exports.DEFAULT_PRIORITY,
|
|
11
|
-
trustedHost:
|
|
11
|
+
trustedHost: true,
|
|
12
12
|
connectSrc: version_1.DEFAULT_DOMAIN,
|
|
13
13
|
iframeSrc: `${version_1.DEFAULT_DOMAIN}iframe.html`,
|
|
14
|
-
popup:
|
|
14
|
+
popup: false,
|
|
15
15
|
popupSrc: `${version_1.DEFAULT_DOMAIN}popup.html`,
|
|
16
16
|
webusbSrc: `${version_1.DEFAULT_DOMAIN}webusb.html`,
|
|
17
|
-
|
|
17
|
+
transports: undefined,
|
|
18
18
|
pendingTransportEvent: true,
|
|
19
|
-
|
|
20
|
-
env: 'web',
|
|
19
|
+
env: 'node',
|
|
21
20
|
lazyLoad: false,
|
|
22
21
|
timestamp: new Date().getTime(),
|
|
23
22
|
interactionTimeout: 600,
|
|
@@ -34,25 +33,6 @@ const parseManifest = (manifest) => {
|
|
|
34
33
|
appUrl: manifest.appUrl,
|
|
35
34
|
};
|
|
36
35
|
};
|
|
37
|
-
const getEnv = () => {
|
|
38
|
-
if (typeof chrome !== 'undefined' &&
|
|
39
|
-
chrome.runtime &&
|
|
40
|
-
typeof chrome.runtime.onConnect !== 'undefined') {
|
|
41
|
-
return 'webextension';
|
|
42
|
-
}
|
|
43
|
-
if (typeof navigator !== 'undefined') {
|
|
44
|
-
if (typeof navigator.product === 'string' &&
|
|
45
|
-
navigator.product.toLowerCase() === 'reactnative') {
|
|
46
|
-
return 'react-native';
|
|
47
|
-
}
|
|
48
|
-
const userAgent = navigator.userAgent.toLowerCase();
|
|
49
|
-
if (userAgent.indexOf(' electron/') > -1) {
|
|
50
|
-
return 'electron';
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
return 'web';
|
|
54
|
-
};
|
|
55
|
-
exports.getEnv = getEnv;
|
|
56
36
|
const corsValidator = (url) => {
|
|
57
37
|
if (typeof url !== 'string')
|
|
58
38
|
return;
|
|
@@ -67,10 +47,9 @@ const corsValidator = (url) => {
|
|
|
67
47
|
};
|
|
68
48
|
exports.corsValidator = corsValidator;
|
|
69
49
|
const parseConnectSettings = (input = {}) => {
|
|
50
|
+
var _a;
|
|
70
51
|
const settings = { ...initialSettings };
|
|
71
|
-
if (
|
|
72
|
-
if (Array.isArray(input)) {
|
|
73
|
-
}
|
|
52
|
+
if ('debug' in input) {
|
|
74
53
|
if (typeof input.debug === 'boolean') {
|
|
75
54
|
settings.debug = input.debug;
|
|
76
55
|
}
|
|
@@ -78,30 +57,11 @@ const parseConnectSettings = (input = {}) => {
|
|
|
78
57
|
settings.debug = input.debug === 'true';
|
|
79
58
|
}
|
|
80
59
|
}
|
|
81
|
-
if (typeof input.connectSrc === 'string') {
|
|
82
|
-
settings.connectSrc = input.connectSrc;
|
|
83
|
-
}
|
|
84
|
-
let globalSrc;
|
|
85
|
-
if (typeof window !== 'undefined') {
|
|
86
|
-
globalSrc = window.__TREZOR_CONNECT_SRC;
|
|
60
|
+
if (typeof input.connectSrc === 'string' && ((_a = input.connectSrc) === null || _a === void 0 ? void 0 : _a.startsWith('http'))) {
|
|
61
|
+
settings.connectSrc = (0, exports.corsValidator)(input.connectSrc);
|
|
87
62
|
}
|
|
88
|
-
else if (
|
|
89
|
-
|
|
90
|
-
}
|
|
91
|
-
if (typeof globalSrc === 'string') {
|
|
92
|
-
settings.connectSrc = (0, exports.corsValidator)(globalSrc);
|
|
93
|
-
settings.debug = true;
|
|
94
|
-
}
|
|
95
|
-
if (typeof window !== 'undefined' &&
|
|
96
|
-
window.location &&
|
|
97
|
-
typeof window.location.search === 'string') {
|
|
98
|
-
const vars = window.location.search.split('&');
|
|
99
|
-
const customUrl = vars.find(v => v.indexOf('trezor-connect-src') >= 0);
|
|
100
|
-
if (customUrl) {
|
|
101
|
-
const [, connectSrc] = customUrl.split('=');
|
|
102
|
-
settings.connectSrc = (0, exports.corsValidator)(decodeURIComponent(connectSrc));
|
|
103
|
-
settings.debug = true;
|
|
104
|
-
}
|
|
63
|
+
else if (settings.trustedHost) {
|
|
64
|
+
settings.connectSrc = input.connectSrc;
|
|
105
65
|
}
|
|
106
66
|
const src = settings.connectSrc || version_1.DEFAULT_DOMAIN;
|
|
107
67
|
settings.iframeSrc = `${src}iframe.html`;
|
|
@@ -113,6 +73,9 @@ const parseConnectSettings = (input = {}) => {
|
|
|
113
73
|
if (typeof input.webusb === 'boolean') {
|
|
114
74
|
settings.webusb = input.webusb;
|
|
115
75
|
}
|
|
76
|
+
if (Array.isArray(input.transports)) {
|
|
77
|
+
settings.transports = input.transports;
|
|
78
|
+
}
|
|
116
79
|
if (typeof input.popup === 'boolean') {
|
|
117
80
|
settings.popup = input.popup;
|
|
118
81
|
}
|
|
@@ -122,19 +85,12 @@ const parseConnectSettings = (input = {}) => {
|
|
|
122
85
|
if (typeof input.pendingTransportEvent === 'boolean') {
|
|
123
86
|
settings.pendingTransportEvent = input.pendingTransportEvent;
|
|
124
87
|
}
|
|
125
|
-
if (typeof window !== 'undefined' && window.location && window.location.protocol === 'file:') {
|
|
126
|
-
settings.origin = `file://${window.location.pathname}`;
|
|
127
|
-
settings.webusb = false;
|
|
128
|
-
}
|
|
129
88
|
if (typeof input.extension === 'string') {
|
|
130
89
|
settings.extension = input.extension;
|
|
131
90
|
}
|
|
132
91
|
if (typeof input.env === 'string') {
|
|
133
92
|
settings.env = input.env;
|
|
134
93
|
}
|
|
135
|
-
else {
|
|
136
|
-
settings.env = (0, exports.getEnv)();
|
|
137
|
-
}
|
|
138
94
|
if (typeof input.timestamp === 'number') {
|
|
139
95
|
settings.timestamp = input.timestamp;
|
|
140
96
|
}
|
package/lib/data/firmwareInfo.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.getReleases = exports.getRelease = exports.getFirmwareStatus = exports.getInfo = exports.parseFirmware = void 0;
|
|
4
4
|
const utils_1 = require("@trezor/utils");
|
|
5
5
|
const firmwareUtils_1 = require("../utils/firmwareUtils");
|
|
6
|
+
const versionUtils_1 = require("../utils/versionUtils");
|
|
6
7
|
const releases = {};
|
|
7
8
|
releases[1] = [];
|
|
8
9
|
releases[2] = [];
|
|
@@ -51,67 +52,68 @@ const isRequired = (changelog) => {
|
|
|
51
52
|
return changelog.some(item => item.required);
|
|
52
53
|
};
|
|
53
54
|
const isEqual = (release, latest) => utils_1.versionUtils.isEqual(release.version, latest.version);
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
|
|
55
|
+
const getT1BootloaderVersion = (releases, features) => {
|
|
56
|
+
const { bootloader_mode, major_version, minor_version, patch_version } = features;
|
|
57
|
+
const versionArray = [major_version, minor_version, patch_version];
|
|
58
|
+
if (bootloader_mode) {
|
|
59
|
+
return versionArray;
|
|
57
60
|
}
|
|
58
|
-
|
|
59
|
-
|
|
61
|
+
const release = releases.find(({ version }) => utils_1.versionUtils.isEqual(version, versionArray));
|
|
62
|
+
return (release === null || release === void 0 ? void 0 : release.bootloader_version) || [1, 0, 0];
|
|
63
|
+
};
|
|
64
|
+
const getIntermediaryVersion = (releases, features, offerLatest) => {
|
|
65
|
+
if (features.major_version !== 1 || offerLatest) {
|
|
66
|
+
return;
|
|
60
67
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
score = (0, firmwareUtils_1.getScore)(features.device_id);
|
|
68
|
+
const bootloaderVersion = getT1BootloaderVersion(releases, features);
|
|
69
|
+
if (utils_1.versionUtils.isNewerOrEqual(bootloaderVersion, [1, 12, 0])) {
|
|
70
|
+
return 3;
|
|
65
71
|
}
|
|
72
|
+
if (utils_1.versionUtils.isNewerOrEqual(bootloaderVersion, [1, 8, 0])) {
|
|
73
|
+
return 2;
|
|
74
|
+
}
|
|
75
|
+
return 1;
|
|
76
|
+
};
|
|
77
|
+
const getSafeReleases = ({ features, releases }) => {
|
|
66
78
|
const { bootloader_mode, major_version, minor_version, patch_version, fw_major, fw_minor, fw_patch, } = features;
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
return true;
|
|
71
|
-
return item.rollout >= score;
|
|
72
|
-
});
|
|
79
|
+
const firmwareVersion = [major_version, minor_version, patch_version];
|
|
80
|
+
if (!(0, versionUtils_1.isVersionArray)(firmwareVersion)) {
|
|
81
|
+
return [];
|
|
73
82
|
}
|
|
74
|
-
const latest = parsedReleases[0];
|
|
75
83
|
if (major_version === 2 && bootloader_mode) {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
fw_minor,
|
|
80
|
-
fw_patch,
|
|
81
|
-
]);
|
|
84
|
+
const fwVersion = [fw_major, fw_minor, fw_patch];
|
|
85
|
+
if ((0, versionUtils_1.isVersionArray)(fwVersion)) {
|
|
86
|
+
return (0, firmwareUtils_1.filterSafeListByFirmware)(releases, fwVersion);
|
|
82
87
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
]);
|
|
88
|
+
return (0, firmwareUtils_1.filterSafeListByBootloader)(releases, firmwareVersion);
|
|
89
|
+
}
|
|
90
|
+
if (major_version === 1 && bootloader_mode) {
|
|
91
|
+
return (0, firmwareUtils_1.filterSafeListByBootloader)(releases, firmwareVersion);
|
|
88
92
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
]);
|
|
93
|
+
return (0, firmwareUtils_1.filterSafeListByFirmware)(releases, firmwareVersion);
|
|
94
|
+
};
|
|
95
|
+
const getInfo = ({ features, releases }) => {
|
|
96
|
+
if (!(0, firmwareUtils_1.isStrictFeatures)(features)) {
|
|
97
|
+
throw new Error('Features of unexpected shape provided.');
|
|
95
98
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
major_version,
|
|
99
|
-
minor_version,
|
|
100
|
-
patch_version,
|
|
101
|
-
]);
|
|
99
|
+
if (!(0, firmwareUtils_1.isValidReleases)(releases)) {
|
|
100
|
+
throw new Error(`Release object in unexpected shape.`);
|
|
102
101
|
}
|
|
103
|
-
|
|
102
|
+
const latest = releases[0];
|
|
103
|
+
const releasesSafe = getSafeReleases({ features, releases });
|
|
104
|
+
if (!releasesSafe.length) {
|
|
104
105
|
return null;
|
|
105
106
|
}
|
|
106
|
-
const
|
|
107
|
-
const changelog = getChangelog(
|
|
107
|
+
const releasesParsed = features.major_version === 1 ? releases : releasesSafe;
|
|
108
|
+
const changelog = getChangelog(releasesParsed, features);
|
|
109
|
+
const release = releasesParsed[0];
|
|
110
|
+
const intermediaryVersion = getIntermediaryVersion(releases, features, isEqual(releasesSafe[0], latest));
|
|
108
111
|
return {
|
|
109
112
|
changelog,
|
|
110
|
-
release
|
|
111
|
-
isLatest,
|
|
112
|
-
latest,
|
|
113
|
+
release,
|
|
113
114
|
isRequired: isRequired(changelog),
|
|
114
|
-
isNewer: isNewer(
|
|
115
|
+
isNewer: isNewer(latest, features),
|
|
116
|
+
intermediaryVersion,
|
|
115
117
|
};
|
|
116
118
|
};
|
|
117
119
|
exports.getInfo = getInfo;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { BridgeInfo } from '../events/transport';
|
|
2
2
|
export declare const parseBridgeJSON: (json: any) => BridgeInfo;
|
|
3
3
|
export declare const getBridgeInfo: () => BridgeInfo;
|
|
4
|
+
export declare const suggestBridgeInstaller: (platform?: string) => BridgeInfo;
|
|
4
5
|
//# sourceMappingURL=transportInfo.d.ts.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getBridgeInfo = exports.parseBridgeJSON = void 0;
|
|
3
|
+
exports.suggestBridgeInstaller = exports.getBridgeInfo = exports.parseBridgeJSON = void 0;
|
|
4
4
|
const info = {
|
|
5
5
|
version: [],
|
|
6
6
|
directory: '',
|
|
@@ -26,4 +26,17 @@ const parseBridgeJSON = (json) => {
|
|
|
26
26
|
exports.parseBridgeJSON = parseBridgeJSON;
|
|
27
27
|
const getBridgeInfo = () => info;
|
|
28
28
|
exports.getBridgeInfo = getBridgeInfo;
|
|
29
|
+
const suggestBridgeInstaller = (platform) => {
|
|
30
|
+
const info = (0, exports.getBridgeInfo)();
|
|
31
|
+
if (!info.packages.find(p => p.preferred)) {
|
|
32
|
+
if (platform) {
|
|
33
|
+
info.packages = info.packages.map(p => ({
|
|
34
|
+
...p,
|
|
35
|
+
preferred: p.platform.indexOf(platform) >= 0,
|
|
36
|
+
}));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return info;
|
|
40
|
+
};
|
|
41
|
+
exports.suggestBridgeInstaller = suggestBridgeInstaller;
|
|
29
42
|
//# sourceMappingURL=transportInfo.js.map
|
package/lib/data/udevInfo.d.ts
CHANGED
package/lib/data/udevInfo.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getUdevInfo = void 0;
|
|
3
|
+
exports.suggestUdevInstaller = exports.getUdevInfo = void 0;
|
|
4
4
|
const info = {
|
|
5
5
|
directory: '',
|
|
6
6
|
packages: [
|
|
@@ -18,4 +18,17 @@ const info = {
|
|
|
18
18
|
};
|
|
19
19
|
const getUdevInfo = () => info;
|
|
20
20
|
exports.getUdevInfo = getUdevInfo;
|
|
21
|
+
const suggestUdevInstaller = (platform) => {
|
|
22
|
+
const info = (0, exports.getUdevInfo)();
|
|
23
|
+
if (!info.packages.find(p => p.preferred)) {
|
|
24
|
+
if (platform) {
|
|
25
|
+
info.packages = info.packages.map(p => ({
|
|
26
|
+
...p,
|
|
27
|
+
preferred: p.platform.indexOf(platform) >= 0,
|
|
28
|
+
}));
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return info;
|
|
32
|
+
};
|
|
33
|
+
exports.suggestUdevInstaller = suggestUdevInstaller;
|
|
21
34
|
//# sourceMappingURL=udevInfo.js.map
|
package/lib/data/version.d.ts
CHANGED
package/lib/data/version.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DEFAULT_DOMAIN = exports.VERSION = void 0;
|
|
4
|
-
exports.VERSION = '9.0.
|
|
4
|
+
exports.VERSION = '9.0.8';
|
|
5
5
|
const versionN = exports.VERSION.split('.').map(s => parseInt(s, 10));
|
|
6
6
|
exports.DEFAULT_DOMAIN = `https://connect.trezor.io/${versionN[0]}/`;
|
|
7
7
|
//# sourceMappingURL=version.js.map
|
|
@@ -88,7 +88,7 @@ class DescriptorStream extends events_1.default {
|
|
|
88
88
|
const time = new Date().getTime() - this.listenTimestamp;
|
|
89
89
|
logger.debug('Listen error', 'timestamp', time, typeof error);
|
|
90
90
|
if (time > 1100) {
|
|
91
|
-
await (0, promiseUtils_1.resolveAfter)(1000, null);
|
|
91
|
+
await (0, promiseUtils_1.resolveAfter)(1000, null).promise;
|
|
92
92
|
if (this.listening)
|
|
93
93
|
this.listen();
|
|
94
94
|
}
|
package/lib/device/Device.js
CHANGED
|
@@ -123,8 +123,7 @@ class Device extends events_1.default {
|
|
|
123
123
|
await this.deferredActions[events_2.DEVICE.ACQUIRE].promise;
|
|
124
124
|
}
|
|
125
125
|
if (this.runPromise) {
|
|
126
|
-
this.
|
|
127
|
-
this.runPromise = null;
|
|
126
|
+
await this.interruptionFromUser(error);
|
|
128
127
|
}
|
|
129
128
|
if (!this.keepSession && this.deferredActions[events_2.DEVICE.RELEASE]) {
|
|
130
129
|
await this.deferredActions[events_2.DEVICE.RELEASE].promise;
|
|
@@ -40,7 +40,7 @@ export declare class DeviceCommands {
|
|
|
40
40
|
serializedPath: string;
|
|
41
41
|
address: string;
|
|
42
42
|
}>;
|
|
43
|
-
ethereumGetAddress({ address_n, show_display }: Messages.EthereumGetAddress): Promise<{
|
|
43
|
+
ethereumGetAddress({ address_n, show_display, encoded_network, }: Messages.EthereumGetAddress): Promise<{
|
|
44
44
|
path: number[];
|
|
45
45
|
serializedPath: string;
|
|
46
46
|
address: string;
|
|
@@ -184,10 +184,11 @@ class DeviceCommands {
|
|
|
184
184
|
address: response.message.address,
|
|
185
185
|
};
|
|
186
186
|
}
|
|
187
|
-
async ethereumGetAddress({ address_n, show_display }) {
|
|
187
|
+
async ethereumGetAddress({ address_n, show_display, encoded_network, }) {
|
|
188
188
|
const response = await this.typedCall('EthereumGetAddress', 'EthereumAddress', {
|
|
189
189
|
address_n,
|
|
190
190
|
show_display,
|
|
191
|
+
encoded_network,
|
|
191
192
|
});
|
|
192
193
|
return {
|
|
193
194
|
path: address_n,
|
|
@@ -474,15 +475,13 @@ class DeviceCommands {
|
|
|
474
475
|
if (this.disposed) {
|
|
475
476
|
return;
|
|
476
477
|
}
|
|
477
|
-
const {
|
|
478
|
-
if (
|
|
479
|
-
activeName === 'BridgeTransport' &&
|
|
480
|
-
(0, versionUtils_1.versionCompare)(version, '2.0.28') < 1) {
|
|
478
|
+
const { name, version } = this.transport;
|
|
479
|
+
if (name === 'BridgeTransport' && (0, versionUtils_1.versionCompare)(version, '2.0.28') < 1) {
|
|
481
480
|
await this.device.legacyForceRelease();
|
|
482
481
|
}
|
|
483
482
|
else {
|
|
484
|
-
await this.transport.post(this.sessionId, 'Cancel', {}, false);
|
|
485
|
-
await this.transport.read(this.sessionId, false);
|
|
483
|
+
await this.transport.post(this.sessionId, 'Cancel', {}, false).catch(() => { });
|
|
484
|
+
await this.transport.read(this.sessionId, false).catch(() => { });
|
|
486
485
|
}
|
|
487
486
|
}
|
|
488
487
|
}
|
|
@@ -5,7 +5,6 @@ import { TRANSPORT, DEVICE, TransportInfo } from '../events';
|
|
|
5
5
|
import { DescriptorStream } from './DescriptorStream';
|
|
6
6
|
import { Device } from './Device';
|
|
7
7
|
import type { Device as DeviceTyped } from '../types';
|
|
8
|
-
import type { Controller } from './AbortController';
|
|
9
8
|
type LowLevelPlugin = {
|
|
10
9
|
name: 'WebUsbPlugin' | 'ReactNativePlugin';
|
|
11
10
|
unreadableHidDeviceChange: {
|
|
@@ -44,7 +43,7 @@ export declare class DeviceList extends EventEmitter {
|
|
|
44
43
|
penalizedDevices: {
|
|
45
44
|
[deviceID: string]: number;
|
|
46
45
|
};
|
|
47
|
-
fetchController?:
|
|
46
|
+
fetchController?: AbortController | null;
|
|
48
47
|
constructor();
|
|
49
48
|
init(): Promise<void>;
|
|
50
49
|
resolveTransportEvent(): void;
|