@reef-knot/ledger-connector 1.1.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/_tslib.js +14 -1
- package/dist/hid/connector.d.ts +21 -20
- package/dist/hid/connector.d.ts.map +1 -1
- package/dist/hid/connector.js +80 -50
- package/dist/hid/helpers.js +1 -8
- package/dist/hid/index.d.ts +1 -1
- package/dist/hid/index.d.ts.map +1 -1
- package/dist/hid/provider.d.ts +1 -0
- package/dist/hid/provider.d.ts.map +1 -1
- package/dist/hid/provider.js +5 -6
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/package.json +9 -5
package/dist/_virtual/_tslib.js
CHANGED
|
@@ -23,9 +23,22 @@ function __awaiter(thisArg, _arguments, P, generator) {
|
|
|
23
23
|
});
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
+
function __classPrivateFieldGet(receiver, state, kind, f) {
|
|
27
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
28
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
29
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function __classPrivateFieldSet(receiver, state, value, kind, f) {
|
|
33
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
34
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
35
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
36
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
37
|
+
}
|
|
38
|
+
|
|
26
39
|
typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
|
|
27
40
|
var e = new Error(message);
|
|
28
41
|
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
29
42
|
};
|
|
30
43
|
|
|
31
|
-
export { __awaiter };
|
|
44
|
+
export { __awaiter, __classPrivateFieldGet, __classPrivateFieldSet };
|
package/dist/hid/connector.d.ts
CHANGED
|
@@ -1,23 +1,24 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
activate(): Promise<ConnectorUpdate>;
|
|
17
|
-
getProvider(): Promise<LedgerHQProvider | undefined>;
|
|
1
|
+
import { Address, Chain, Connector, ConnectorData } from 'wagmi';
|
|
2
|
+
export declare class LedgerHIDConnector<Options = any> extends Connector {
|
|
3
|
+
#private;
|
|
4
|
+
readonly id = "ledgerHID";
|
|
5
|
+
readonly name = "Ledger";
|
|
6
|
+
ready: boolean;
|
|
7
|
+
constructor({ defaultChain, chains, rpc, options, }: {
|
|
8
|
+
defaultChain: Chain;
|
|
9
|
+
chains?: Chain[];
|
|
10
|
+
rpc: Record<number, string>;
|
|
11
|
+
options?: Options;
|
|
12
|
+
});
|
|
13
|
+
connect(): Promise<Required<ConnectorData>>;
|
|
14
|
+
disconnect(): Promise<void>;
|
|
15
|
+
getAccount(): Promise<Address>;
|
|
18
16
|
getChainId(): Promise<number>;
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
getProvider(): Promise<import("./provider").LedgerHQProvider>;
|
|
18
|
+
getSigner(): Promise<any>;
|
|
19
|
+
isAuthorized(): Promise<boolean>;
|
|
20
|
+
protected onDisconnect: () => void;
|
|
21
|
+
protected onAccountsChanged: () => void;
|
|
22
|
+
protected onChainChanged: () => void;
|
|
21
23
|
}
|
|
22
|
-
export default LedgerHQConnector;
|
|
23
24
|
//# sourceMappingURL=connector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connector.d.ts","sourceRoot":"","sources":["../../src/hid/connector.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"connector.d.ts","sourceRoot":"","sources":["../../src/hid/connector.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,KAAK,EACL,SAAS,EACT,aAAa,EAEd,MAAM,OAAO,CAAC;AAGf,qBAAa,kBAAkB,CAAC,OAAO,GAAG,GAAG,CAAE,SAAQ,SAAS;;IAC9D,QAAQ,CAAC,EAAE,eAAe;IAC1B,QAAQ,CAAC,IAAI,YAAY;IAEzB,KAAK,UAAS;gBAIF,EACV,YAAY,EACZ,MAAM,EACN,GAAG,EACH,OAAO,GACR,EAAE;QACD,YAAY,EAAE,KAAK,CAAC;QACpB,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;QACjB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB;IAMK,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IAsBjD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAI9B,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAOvB,WAAW;IAWjB,SAAS;IAKH,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAWtC,SAAS,CAAC,YAAY,QAAO,IAAI,CAK/B;IAEF,SAAS,CAAC,iBAAiB,QAAO,IAAI,CAEpC;IAEF,SAAS,CAAC,cAAc,QAAO,IAAI,CAEjC;CACH"}
|
package/dist/hid/connector.js
CHANGED
|
@@ -1,75 +1,105 @@
|
|
|
1
|
-
import { __awaiter } from '../_virtual/_tslib.js';
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import { isHIDSupported, checkError } from './helpers.js';
|
|
1
|
+
import { __classPrivateFieldSet, __awaiter, __classPrivateFieldGet } from '../_virtual/_tslib.js';
|
|
2
|
+
import { Connector, ConnectorNotFoundError } from 'wagmi';
|
|
3
|
+
import { checkError } from './helpers.js';
|
|
5
4
|
|
|
6
|
-
|
|
5
|
+
var _LedgerHIDConnector_chain, _LedgerHIDConnector_provider, _LedgerHIDConnector_rpc;
|
|
6
|
+
class LedgerHIDConnector extends Connector {
|
|
7
7
|
constructor({
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
defaultChain,
|
|
9
|
+
chains,
|
|
10
|
+
rpc,
|
|
11
|
+
options
|
|
10
12
|
}) {
|
|
11
13
|
super({
|
|
12
|
-
|
|
14
|
+
chains,
|
|
15
|
+
options
|
|
13
16
|
});
|
|
14
|
-
this.
|
|
15
|
-
this.
|
|
16
|
-
this
|
|
17
|
+
this.id = 'ledgerHID';
|
|
18
|
+
this.name = 'Ledger';
|
|
19
|
+
_LedgerHIDConnector_chain.set(this, void 0);
|
|
20
|
+
this.ready = false;
|
|
21
|
+
_LedgerHIDConnector_provider.set(this, void 0);
|
|
22
|
+
_LedgerHIDConnector_rpc.set(this, void 0);
|
|
23
|
+
this.onDisconnect = () => {
|
|
24
|
+
// Is called when HID API emits 'disconnect' event for some reason.
|
|
25
|
+
// For example, the device was manually unplugged.
|
|
26
|
+
// It is common to emit 'disconnect' from connector in this case.
|
|
27
|
+
this.emit('disconnect');
|
|
28
|
+
};
|
|
29
|
+
this.onAccountsChanged = () => {
|
|
30
|
+
// NOOP
|
|
31
|
+
};
|
|
32
|
+
this.onChainChanged = () => {
|
|
33
|
+
// NOOP
|
|
34
|
+
};
|
|
35
|
+
__classPrivateFieldSet(this, _LedgerHIDConnector_chain, defaultChain, "f");
|
|
36
|
+
__classPrivateFieldSet(this, _LedgerHIDConnector_rpc, rpc === null || rpc === void 0 ? void 0 : rpc[defaultChain.id], "f");
|
|
17
37
|
}
|
|
18
|
-
|
|
19
|
-
this.emitDeactivate();
|
|
20
|
-
}
|
|
21
|
-
// eslint-disable-next-line class-methods-use-this
|
|
22
|
-
isSupported() {
|
|
23
|
-
return isHIDSupported();
|
|
24
|
-
}
|
|
25
|
-
getProviderInstance() {
|
|
26
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
27
|
-
// eslint-disable-next-line no-shadow
|
|
28
|
-
const {
|
|
29
|
-
LedgerHQProvider
|
|
30
|
-
} = yield import('./provider.js');
|
|
31
|
-
return new LedgerHQProvider(this.url, this.chainId);
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
activate() {
|
|
38
|
+
connect() {
|
|
35
39
|
return __awaiter(this, void 0, void 0, function* () {
|
|
36
40
|
try {
|
|
37
|
-
this
|
|
38
|
-
|
|
39
|
-
this
|
|
40
|
-
const
|
|
41
|
+
__classPrivateFieldSet(this, _LedgerHIDConnector_provider, yield this.getProvider(), "f");
|
|
42
|
+
__classPrivateFieldGet(this, _LedgerHIDConnector_provider, "f").on('disconnect', this.onDisconnect);
|
|
43
|
+
const account = yield __classPrivateFieldGet(this, _LedgerHIDConnector_provider, "f").enable();
|
|
44
|
+
const chainId = yield this.getChainId();
|
|
45
|
+
const chainUnsupported = this.isChainUnsupported(chainId);
|
|
46
|
+
this.ready = !!__classPrivateFieldGet(this, _LedgerHIDConnector_provider, "f");
|
|
41
47
|
return {
|
|
42
|
-
|
|
43
|
-
|
|
48
|
+
account,
|
|
49
|
+
provider: __classPrivateFieldGet(this, _LedgerHIDConnector_provider, "f"),
|
|
50
|
+
chain: {
|
|
51
|
+
id: chainId,
|
|
52
|
+
unsupported: chainUnsupported
|
|
53
|
+
}
|
|
44
54
|
};
|
|
45
55
|
} catch (error) {
|
|
46
56
|
return checkError(error);
|
|
47
57
|
}
|
|
48
58
|
});
|
|
49
59
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
60
|
+
disconnect() {
|
|
61
|
+
// Handles programmatic disconnect.
|
|
62
|
+
// We don't need to do anything specific for HID Ledger connection in this case.
|
|
63
|
+
__classPrivateFieldGet(this, _LedgerHIDConnector_provider, "f").removeListener('disconnect', this.onDisconnect);
|
|
64
|
+
return Promise.resolve();
|
|
65
|
+
}
|
|
66
|
+
getAccount() {
|
|
67
|
+
return __classPrivateFieldGet(this, _LedgerHIDConnector_provider, "f").getAddress();
|
|
55
68
|
}
|
|
56
|
-
// eslint-disable-next-line @typescript-eslint/require-await
|
|
57
69
|
getChainId() {
|
|
70
|
+
if (__classPrivateFieldGet(this, _LedgerHIDConnector_chain, "f")) {
|
|
71
|
+
return Promise.resolve(__classPrivateFieldGet(this, _LedgerHIDConnector_chain, "f").id);
|
|
72
|
+
}
|
|
73
|
+
return Promise.reject('The chain must be set');
|
|
74
|
+
}
|
|
75
|
+
getProvider() {
|
|
58
76
|
return __awaiter(this, void 0, void 0, function* () {
|
|
59
|
-
|
|
77
|
+
const {
|
|
78
|
+
LedgerHQProvider
|
|
79
|
+
} = yield import('./provider.js');
|
|
80
|
+
const chainId = yield this.getChainId();
|
|
81
|
+
return new LedgerHQProvider({
|
|
82
|
+
url: __classPrivateFieldGet(this, _LedgerHIDConnector_rpc, "f")
|
|
83
|
+
}, chainId);
|
|
60
84
|
});
|
|
61
85
|
}
|
|
62
|
-
|
|
86
|
+
getSigner() {
|
|
87
|
+
const signer = __classPrivateFieldGet(this, _LedgerHIDConnector_provider, "f").signer;
|
|
88
|
+
return Promise.resolve(signer);
|
|
89
|
+
}
|
|
90
|
+
isAuthorized() {
|
|
63
91
|
return __awaiter(this, void 0, void 0, function* () {
|
|
64
|
-
|
|
65
|
-
|
|
92
|
+
try {
|
|
93
|
+
const provider = yield this.getProvider();
|
|
94
|
+
if (!provider) throw new ConnectorNotFoundError();
|
|
95
|
+
const account = yield this.getAccount();
|
|
96
|
+
return !!account;
|
|
97
|
+
} catch (_a) {
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
66
100
|
});
|
|
67
101
|
}
|
|
68
|
-
deactivate() {
|
|
69
|
-
invariant(this.provider, 'Provider is not defined');
|
|
70
|
-
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
71
|
-
this.provider.removeListener('disconnect', this.handleDisconnect);
|
|
72
|
-
}
|
|
73
102
|
}
|
|
103
|
+
_LedgerHIDConnector_chain = new WeakMap(), _LedgerHIDConnector_provider = new WeakMap(), _LedgerHIDConnector_rpc = new WeakMap();
|
|
74
104
|
|
|
75
|
-
export {
|
|
105
|
+
export { LedgerHIDConnector };
|
package/dist/hid/helpers.js
CHANGED
|
@@ -2,13 +2,6 @@ import { __awaiter } from '../_virtual/_tslib.js';
|
|
|
2
2
|
import { BigNumber } from '@ethersproject/bignumber';
|
|
3
3
|
import { resolveProperties } from '@ethersproject/properties';
|
|
4
4
|
|
|
5
|
-
const isHIDSupported = () => {
|
|
6
|
-
try {
|
|
7
|
-
return 'hid' in window.navigator;
|
|
8
|
-
} catch (error) {
|
|
9
|
-
return false;
|
|
10
|
-
}
|
|
11
|
-
};
|
|
12
5
|
const hasEIP1559 = tx => {
|
|
13
6
|
return tx.type === 2 || tx.maxFeePerGas != null || tx.maxPriorityFeePerGas != null;
|
|
14
7
|
};
|
|
@@ -67,4 +60,4 @@ const checkError = error => {
|
|
|
67
60
|
throw error;
|
|
68
61
|
};
|
|
69
62
|
|
|
70
|
-
export { checkError, convertToUnsigned, hasEIP1559,
|
|
63
|
+
export { checkError, convertToUnsigned, hasEIP1559, toNumber };
|
package/dist/hid/index.d.ts
CHANGED
package/dist/hid/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hid/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hid/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC"}
|
package/dist/hid/provider.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ export declare class LedgerHQProvider extends JsonRpcBatchProvider {
|
|
|
6
6
|
signer?: LedgerHQSigner;
|
|
7
7
|
device?: HIDDevice;
|
|
8
8
|
transport?: typeof TransportHID;
|
|
9
|
+
constructor(...args: any[]);
|
|
9
10
|
getSigner(): LedgerHQSigner;
|
|
10
11
|
listAccounts(): Promise<Array<string>>;
|
|
11
12
|
detectNetwork(): Promise<Network>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/hid/provider.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,KAAK,YAAY,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/hid/provider.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,KAAK,YAAY,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAI1C,qBAAa,gBAAiB,SAAQ,oBAAoB;IACjD,MAAM,CAAC,EAAE,cAAc,CAAC;IAExB,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB,SAAS,CAAC,EAAE,OAAO,YAAY,CAAC;gBAE3B,GAAG,IAAI,EAAE,GAAG,EAAE;IAK1B,SAAS,IAAI,cAAc;IAI3B,YAAY,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAItC,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC;IAI3B,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC;IAarC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IA4BzB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAK7B,OAAO,CAAC,EACZ,MAAM,EACN,MAAM,GACP,EAAE;QACD,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;KACxB,GAAG,OAAO,CAAC,OAAO,CAAC;CA0BrB"}
|
package/dist/hid/provider.js
CHANGED
|
@@ -5,18 +5,18 @@ import { LedgerHQSigner } from './signer.js';
|
|
|
5
5
|
import { checkError, convertToUnsigned } from './helpers.js';
|
|
6
6
|
|
|
7
7
|
class LedgerHQProvider extends JsonRpcBatchProvider {
|
|
8
|
+
constructor(...args) {
|
|
9
|
+
super(...args);
|
|
10
|
+
this.signer = this.getSigner();
|
|
11
|
+
}
|
|
8
12
|
getSigner() {
|
|
9
13
|
return new LedgerHQSigner(this);
|
|
10
14
|
}
|
|
11
|
-
// eslint-disable-next-line class-methods-use-this
|
|
12
15
|
listAccounts() {
|
|
13
16
|
throw new Error('method is not implemented');
|
|
14
17
|
}
|
|
15
|
-
// eslint-disable-next-line @typescript-eslint/require-await
|
|
16
18
|
detectNetwork() {
|
|
17
|
-
return
|
|
18
|
-
return this._network;
|
|
19
|
-
});
|
|
19
|
+
return Promise.resolve(this._network);
|
|
20
20
|
}
|
|
21
21
|
getTransport() {
|
|
22
22
|
var _a;
|
|
@@ -34,7 +34,6 @@ class LedgerHQProvider extends JsonRpcBatchProvider {
|
|
|
34
34
|
enable() {
|
|
35
35
|
return __awaiter(this, void 0, void 0, function* () {
|
|
36
36
|
try {
|
|
37
|
-
// eslint-disable-next-line no-shadow
|
|
38
37
|
const {
|
|
39
38
|
default: TransportHID
|
|
40
39
|
} = yield import('@ledgerhq/hw-transport-webhid');
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { LedgerHQConnector } from './hid/connector.js';
|
|
2
|
-
export { LS_KEY_DERIVATION_PATH } from './hid/signer.js';
|
|
3
1
|
export { LedgerHQFrameConnector } from './iframe/connector.js';
|
|
4
2
|
export { isIframe, isLedgerDappBrowserProvider } from './iframe/helpers.js';
|
|
3
|
+
export { LedgerHIDConnector } from './hid/connector.js';
|
|
4
|
+
export { LS_KEY_DERIVATION_PATH } from './hid/signer.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reef-knot/ledger-connector",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"exports": {
|
|
@@ -33,6 +33,7 @@
|
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@types/w3c-web-hid": "^1.0.2",
|
|
36
|
+
"wagmi": "^0.12.19",
|
|
36
37
|
"eslint-config-custom": "*"
|
|
37
38
|
},
|
|
38
39
|
"dependencies": {
|
|
@@ -44,12 +45,15 @@
|
|
|
44
45
|
"@ethersproject/strings": "^5.5.0",
|
|
45
46
|
"@ethersproject/transactions": "^5.5.0",
|
|
46
47
|
"@ethersproject/hash": "^5.5.0",
|
|
47
|
-
"@ledgerhq/hw-app-eth": "^6.
|
|
48
|
-
"@ledgerhq/hw-transport": "^6.
|
|
49
|
-
"@ledgerhq/hw-transport-webhid": "^6.
|
|
50
|
-
"@ledgerhq/iframe-provider": "0",
|
|
48
|
+
"@ledgerhq/hw-app-eth": "^6.35.0",
|
|
49
|
+
"@ledgerhq/hw-transport": "^6.30.0",
|
|
50
|
+
"@ledgerhq/hw-transport-webhid": "^6.28.0",
|
|
51
|
+
"@ledgerhq/iframe-provider": "^0.4.3",
|
|
51
52
|
"@web3-react/abstract-connector": "^6.0.7",
|
|
52
53
|
"@web3-react/types": "^6.0.7",
|
|
53
54
|
"tiny-invariant": "^1.2.0"
|
|
55
|
+
},
|
|
56
|
+
"peerDependencies": {
|
|
57
|
+
"wagmi": "^0.12.19"
|
|
54
58
|
}
|
|
55
59
|
}
|