@reef-knot/ledger-connector 2.0.1 → 4.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 +1 -14
- package/dist/hid/connector.d.ts +10 -22
- package/dist/hid/connector.d.ts.map +1 -1
- package/dist/hid/connector.js +94 -95
- package/dist/hid/index.d.ts +1 -1
- package/dist/hid/index.d.ts.map +1 -1
- package/dist/hid/provider.js +6 -6
- package/dist/hid/signer.js +2 -2
- package/dist/iframe/connector.d.ts +10 -20
- package/dist/iframe/connector.d.ts.map +1 -1
- package/dist/iframe/connector.js +175 -93
- package/dist/iframe/helpers.d.ts +1 -1
- package/dist/iframe/helpers.d.ts.map +1 -1
- package/dist/iframe/helpers.js +7 -18
- package/dist/index.js +3 -3
- package/package.json +15 -11
package/dist/_virtual/_tslib.js
CHANGED
|
@@ -23,22 +23,9 @@ 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
|
-
|
|
39
26
|
typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
|
|
40
27
|
var e = new Error(message);
|
|
41
28
|
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
42
29
|
};
|
|
43
30
|
|
|
44
|
-
export { __awaiter
|
|
31
|
+
export { __awaiter };
|
package/dist/hid/connector.d.ts
CHANGED
|
@@ -1,24 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
options?: Options;
|
|
12
|
-
});
|
|
13
|
-
connect(): Promise<Required<ConnectorData>>;
|
|
14
|
-
disconnect(): Promise<void>;
|
|
15
|
-
getAccount(): Promise<Address>;
|
|
16
|
-
getChainId(): Promise<number>;
|
|
17
|
-
getProvider(): Promise<any>;
|
|
18
|
-
getSigner(): Promise<any>;
|
|
19
|
-
isAuthorized(): Promise<boolean>;
|
|
20
|
-
protected onDisconnect: () => void;
|
|
21
|
-
protected onAccountsChanged: () => void;
|
|
22
|
-
protected onChainChanged: () => void;
|
|
1
|
+
import { Chain } from 'wagmi/chains';
|
|
2
|
+
import type { LedgerHQProvider } from './provider';
|
|
3
|
+
export declare const idLedgerHid = "ledgerHID";
|
|
4
|
+
export declare const name = "Ledger";
|
|
5
|
+
export declare function ledgerHIDConnector({ rpc, defaultChain, }: {
|
|
6
|
+
rpc: Record<number, string>;
|
|
7
|
+
defaultChain: Chain;
|
|
8
|
+
}): import("wagmi").CreateConnectorFn<LedgerHQProvider, Record<string, unknown>, Record<string, unknown>>;
|
|
9
|
+
export declare namespace ledgerHIDConnector {
|
|
10
|
+
var type: "ledgerHID";
|
|
23
11
|
}
|
|
24
12
|
//# 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":"AAKA,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAErC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,eAAO,MAAM,WAAW,cAAc,CAAC;AACvC,eAAO,MAAM,IAAI,WAAW,CAAC;AAG7B,wBAAgB,kBAAkB,CAAC,EACjC,GAAG,EACH,YAAY,GACb,EAAE;IACD,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,YAAY,EAAE,KAAK,CAAC;CACrB,yGAoFA;yBA1Fe,kBAAkB"}
|
package/dist/hid/connector.js
CHANGED
|
@@ -1,106 +1,105 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { __awaiter } from '../_virtual/_tslib.js';
|
|
2
|
+
import { createConnector, ChainNotConfiguredError, ConnectorNotFoundError } from 'wagmi';
|
|
3
3
|
import { checkError } from './helpers.js';
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
const idLedgerHid = 'ledgerHID';
|
|
6
|
+
const name = 'Ledger';
|
|
7
|
+
ledgerHIDConnector.type = 'ledgerHID';
|
|
8
|
+
function ledgerHIDConnector({
|
|
9
|
+
rpc,
|
|
10
|
+
defaultChain
|
|
11
|
+
}) {
|
|
12
|
+
const providers = {};
|
|
13
|
+
return createConnector(({
|
|
9
14
|
chains,
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
15
|
+
emitter
|
|
16
|
+
}) => ({
|
|
17
|
+
id: idLedgerHid,
|
|
18
|
+
name,
|
|
19
|
+
type: ledgerHIDConnector.type,
|
|
20
|
+
getProvider() {
|
|
21
|
+
return __awaiter(this, arguments, void 0, function* ({
|
|
22
|
+
chainId
|
|
23
|
+
} = {}) {
|
|
24
|
+
var _a;
|
|
25
|
+
const chain = (_a = chains.find(x => x.id === chainId)) !== null && _a !== void 0 ? _a : defaultChain;
|
|
26
|
+
if (!providers[chain.id]) {
|
|
27
|
+
const {
|
|
28
|
+
LedgerHQProvider
|
|
29
|
+
} = yield import('./provider.js');
|
|
30
|
+
providers[chain.id] = new LedgerHQProvider({
|
|
31
|
+
url: rpc === null || rpc === void 0 ? void 0 : rpc[chain.id]
|
|
32
|
+
}, chain.id);
|
|
33
|
+
}
|
|
34
|
+
return providers[chain.id];
|
|
35
|
+
});
|
|
36
|
+
},
|
|
37
|
+
connect() {
|
|
38
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
39
|
+
try {
|
|
40
|
+
const provider = yield this.getProvider();
|
|
41
|
+
provider.on('disconnect', this.onDisconnect);
|
|
42
|
+
const account = yield provider.enable();
|
|
43
|
+
const chainId = yield this.getChainId();
|
|
44
|
+
return {
|
|
45
|
+
accounts: [account],
|
|
46
|
+
chainId
|
|
47
|
+
};
|
|
48
|
+
} catch (error) {
|
|
49
|
+
return checkError(error);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
},
|
|
53
|
+
disconnect() {
|
|
54
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
55
|
+
// Handles programmatic disconnect.
|
|
56
|
+
// We don't need to do anything specific for HID Ledger connection in this case.
|
|
57
|
+
const provider = yield this.getProvider();
|
|
58
|
+
provider.removeListener('disconnect', this.onDisconnect);
|
|
59
|
+
});
|
|
60
|
+
},
|
|
61
|
+
getAccounts() {
|
|
62
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
63
|
+
const provider = yield this.getProvider();
|
|
64
|
+
const address = yield provider.getAddress();
|
|
65
|
+
return [address];
|
|
66
|
+
});
|
|
67
|
+
},
|
|
68
|
+
getChainId() {
|
|
69
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
70
|
+
const provider = yield this.getProvider();
|
|
71
|
+
const {
|
|
72
|
+
chainId
|
|
73
|
+
} = yield provider.getNetwork();
|
|
74
|
+
if (chainId) return chainId;
|
|
75
|
+
throw new ChainNotConfiguredError();
|
|
76
|
+
});
|
|
77
|
+
},
|
|
78
|
+
isAuthorized() {
|
|
79
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
80
|
+
try {
|
|
81
|
+
const provider = yield this.getProvider();
|
|
82
|
+
if (!provider) throw new ConnectorNotFoundError();
|
|
83
|
+
const [account] = yield this.getAccounts();
|
|
84
|
+
return !!account;
|
|
85
|
+
} catch (_a) {
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
},
|
|
90
|
+
onDisconnect() {
|
|
24
91
|
// Is called when HID API emits 'disconnect' event for some reason.
|
|
25
92
|
// For example, the device was manually unplugged.
|
|
26
93
|
// It is common to emit 'disconnect' from connector in this case.
|
|
27
|
-
|
|
28
|
-
}
|
|
29
|
-
|
|
94
|
+
emitter.emit('disconnect');
|
|
95
|
+
},
|
|
96
|
+
onAccountsChanged() {
|
|
30
97
|
// NOOP
|
|
31
|
-
}
|
|
32
|
-
|
|
98
|
+
},
|
|
99
|
+
onChainChanged() {
|
|
33
100
|
// 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");
|
|
37
|
-
}
|
|
38
|
-
connect() {
|
|
39
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
40
|
-
try {
|
|
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");
|
|
47
|
-
return {
|
|
48
|
-
account,
|
|
49
|
-
provider: __classPrivateFieldGet(this, _LedgerHIDConnector_provider, "f"),
|
|
50
|
-
chain: {
|
|
51
|
-
id: chainId,
|
|
52
|
-
unsupported: chainUnsupported
|
|
53
|
-
}
|
|
54
|
-
};
|
|
55
|
-
} catch (error) {
|
|
56
|
-
return checkError(error);
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
}
|
|
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();
|
|
68
|
-
}
|
|
69
|
-
getChainId() {
|
|
70
|
-
if (__classPrivateFieldGet(this, _LedgerHIDConnector_chain, "f")) {
|
|
71
|
-
return Promise.resolve(__classPrivateFieldGet(this, _LedgerHIDConnector_chain, "f").id);
|
|
72
101
|
}
|
|
73
|
-
|
|
74
|
-
}
|
|
75
|
-
getProvider() {
|
|
76
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
77
|
-
if (__classPrivateFieldGet(this, _LedgerHIDConnector_provider, "f")) return __classPrivateFieldGet(this, _LedgerHIDConnector_provider, "f");
|
|
78
|
-
const {
|
|
79
|
-
LedgerHQProvider
|
|
80
|
-
} = yield import('./provider.js');
|
|
81
|
-
const chainId = yield this.getChainId();
|
|
82
|
-
return new LedgerHQProvider({
|
|
83
|
-
url: __classPrivateFieldGet(this, _LedgerHIDConnector_rpc, "f")
|
|
84
|
-
}, chainId);
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
getSigner() {
|
|
88
|
-
const signer = __classPrivateFieldGet(this, _LedgerHIDConnector_provider, "f").signer;
|
|
89
|
-
return Promise.resolve(signer);
|
|
90
|
-
}
|
|
91
|
-
isAuthorized() {
|
|
92
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
93
|
-
try {
|
|
94
|
-
const provider = yield this.getProvider();
|
|
95
|
-
if (!provider) throw new ConnectorNotFoundError();
|
|
96
|
-
const account = yield this.getAccount();
|
|
97
|
-
return !!account;
|
|
98
|
-
} catch (_a) {
|
|
99
|
-
return false;
|
|
100
|
-
}
|
|
101
|
-
});
|
|
102
|
-
}
|
|
102
|
+
}));
|
|
103
103
|
}
|
|
104
|
-
_LedgerHIDConnector_chain = new WeakMap(), _LedgerHIDConnector_provider = new WeakMap(), _LedgerHIDConnector_rpc = new WeakMap();
|
|
105
104
|
|
|
106
|
-
export {
|
|
105
|
+
export { idLedgerHid, ledgerHIDConnector, name };
|
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,kBAAkB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hid/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC"}
|
package/dist/hid/provider.js
CHANGED
|
@@ -19,8 +19,8 @@ class LedgerHQProvider extends JsonRpcBatchProvider {
|
|
|
19
19
|
return Promise.resolve(this._network);
|
|
20
20
|
}
|
|
21
21
|
getTransport() {
|
|
22
|
-
var _a;
|
|
23
22
|
return __awaiter(this, void 0, void 0, function* () {
|
|
23
|
+
var _a;
|
|
24
24
|
invariant(this.transport, 'Transport is not defined');
|
|
25
25
|
try {
|
|
26
26
|
const transportInstance = yield (_a = this.transport) === null || _a === void 0 ? void 0 : _a.create();
|
|
@@ -63,11 +63,11 @@ class LedgerHQProvider extends JsonRpcBatchProvider {
|
|
|
63
63
|
return yield this.signer.getAddress();
|
|
64
64
|
});
|
|
65
65
|
}
|
|
66
|
-
request({
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
66
|
+
request(_a) {
|
|
67
|
+
return __awaiter(this, arguments, void 0, function* ({
|
|
68
|
+
method,
|
|
69
|
+
params
|
|
70
|
+
}) {
|
|
71
71
|
invariant(this.signer, 'Signer is not defined');
|
|
72
72
|
switch (method) {
|
|
73
73
|
case 'eth_sendTransaction':
|
package/dist/hid/signer.js
CHANGED
|
@@ -92,8 +92,8 @@ class LedgerHQSigner extends Signer {
|
|
|
92
92
|
});
|
|
93
93
|
});
|
|
94
94
|
}
|
|
95
|
-
signTransaction(
|
|
96
|
-
return __awaiter(this,
|
|
95
|
+
signTransaction(transaction_1) {
|
|
96
|
+
return __awaiter(this, arguments, void 0, function* (transaction, loadConfig = {}, resolutionConfig = {}) {
|
|
97
97
|
const unsignedTx = yield convertToUnsigned(transaction);
|
|
98
98
|
const populatedTx = yield this.populateUnsigned(unsignedTx);
|
|
99
99
|
const serializedTx = serialize(populatedTx).substring(2);
|
|
@@ -1,24 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { Chain } from 'wagmi/chains';
|
|
2
|
+
import type { IFrameEthereumProvider, IFrameEthereumProviderOptions } from '@ledgerhq/iframe-provider';
|
|
3
|
+
export declare const idLedgerLive = "ledgerLive";
|
|
4
|
+
export declare const name = "Ledger Live";
|
|
5
|
+
type LedgerLiveConnectorArgs = {
|
|
6
|
+
options?: IFrameEthereumProviderOptions;
|
|
7
|
+
defaultChain: Chain;
|
|
6
8
|
};
|
|
7
|
-
export declare
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
constructor(config?: IFrameEthereumProviderOptions);
|
|
11
|
-
private handleNetworkChanged;
|
|
12
|
-
private handleChainChanged;
|
|
13
|
-
private handleAccountsChanged;
|
|
14
|
-
private handleClose;
|
|
15
|
-
isLedgerApp(): boolean;
|
|
16
|
-
getProviderInstance(): Promise<IFrameEthereumProvider>;
|
|
17
|
-
activate(): Promise<ConnectorUpdate>;
|
|
18
|
-
getProvider(): Promise<IFrameEthereumProvider | undefined>;
|
|
19
|
-
getChainId(): Promise<number | string>;
|
|
20
|
-
getAccount(): Promise<null | string>;
|
|
21
|
-
deactivate(): void;
|
|
9
|
+
export declare function ledgerLiveConnector({ options, defaultChain, }: LedgerLiveConnectorArgs): import("wagmi").CreateConnectorFn<IFrameEthereumProvider, Record<string, unknown>, Record<string, unknown>>;
|
|
10
|
+
export declare namespace ledgerLiveConnector {
|
|
11
|
+
var type: string;
|
|
22
12
|
}
|
|
23
13
|
export {};
|
|
24
14
|
//# sourceMappingURL=connector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connector.d.ts","sourceRoot":"","sources":["../../src/iframe/connector.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"connector.d.ts","sourceRoot":"","sources":["../../src/iframe/connector.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAIrC,OAAO,KAAK,EACV,sBAAsB,EACtB,6BAA6B,EAC9B,MAAM,2BAA2B,CAAC;AAEnC,eAAO,MAAM,YAAY,eAAe,CAAC;AACzC,eAAO,MAAM,IAAI,gBAAgB,CAAC;AAElC,KAAK,uBAAuB,GAAG;IAC7B,OAAO,CAAC,EAAE,6BAA6B,CAAC;IACxC,YAAY,EAAE,KAAK,CAAC;CACrB,CAAC;AAGF,wBAAgB,mBAAmB,CAAC,EAClC,OAAO,EACP,YAAY,GACb,EAAE,uBAAuB,+GAkJzB;yBArJe,mBAAmB"}
|
package/dist/iframe/connector.js
CHANGED
|
@@ -1,98 +1,180 @@
|
|
|
1
1
|
import { __awaiter } from '../_virtual/_tslib.js';
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import { createConnector, SwitchChainNotSupportedError } from 'wagmi';
|
|
3
|
+
import { UserRejectedRequestError, ResourceUnavailableRpcError } from 'viem';
|
|
4
|
+
import { getAddress } from '@ethersproject/address';
|
|
5
|
+
import { hexValue } from '@ethersproject/bytes';
|
|
6
|
+
import { Web3Provider } from '@ethersproject/providers';
|
|
5
7
|
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
8
|
+
const idLedgerLive = 'ledgerLive';
|
|
9
|
+
const name = 'Ledger Live';
|
|
10
|
+
ledgerLiveConnector.type = 'ledgerLive';
|
|
11
|
+
function ledgerLiveConnector({
|
|
12
|
+
options,
|
|
13
|
+
defaultChain
|
|
14
|
+
}) {
|
|
15
|
+
const providers = {};
|
|
16
|
+
return createConnector(({
|
|
17
|
+
chains,
|
|
18
|
+
emitter
|
|
19
|
+
}) => ({
|
|
20
|
+
id: idLedgerLive,
|
|
21
|
+
name,
|
|
22
|
+
type: ledgerLiveConnector.type,
|
|
23
|
+
getProvider() {
|
|
24
|
+
return __awaiter(this, arguments, void 0, function* ({
|
|
25
|
+
chainId
|
|
26
|
+
} = {}) {
|
|
27
|
+
var _a;
|
|
28
|
+
const chain = (_a = chains.find(x => x.id === chainId)) !== null && _a !== void 0 ? _a : defaultChain;
|
|
29
|
+
if (!providers[chain.id]) {
|
|
30
|
+
const {
|
|
31
|
+
IFrameEthereumProvider
|
|
32
|
+
} = yield import('@ledgerhq/iframe-provider');
|
|
33
|
+
providers[chain.id] = new IFrameEthereumProvider(options);
|
|
34
|
+
}
|
|
35
|
+
return providers[chain.id];
|
|
36
|
+
});
|
|
37
|
+
},
|
|
38
|
+
connect() {
|
|
39
|
+
return __awaiter(this, arguments, void 0, function* ({
|
|
40
|
+
chainId
|
|
41
|
+
} = {}) {
|
|
42
|
+
try {
|
|
43
|
+
const provider = yield this.getProvider();
|
|
44
|
+
provider.on('accountsChanged', this.onAccountsChanged);
|
|
45
|
+
provider.on('chainChanged', this.onChainChanged);
|
|
46
|
+
emitter.emit('message', {
|
|
47
|
+
type: 'connecting'
|
|
48
|
+
});
|
|
49
|
+
const accounts = yield this.getAccounts();
|
|
50
|
+
let currentChainId = yield this.getChainId();
|
|
51
|
+
if (chainId && currentChainId !== chainId && this.switchChain) {
|
|
52
|
+
const chain = yield this.switchChain({
|
|
53
|
+
chainId
|
|
54
|
+
});
|
|
55
|
+
currentChainId = chain.id;
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
accounts,
|
|
59
|
+
chainId: currentChainId
|
|
60
|
+
};
|
|
61
|
+
} catch (error) {
|
|
62
|
+
if (error instanceof Error) {
|
|
63
|
+
if (error.code === 4001) {
|
|
64
|
+
throw new UserRejectedRequestError(error);
|
|
65
|
+
}
|
|
66
|
+
throw new ResourceUnavailableRpcError(error);
|
|
67
|
+
}
|
|
68
|
+
throw error;
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
},
|
|
72
|
+
switchChain(_a) {
|
|
73
|
+
return __awaiter(this, arguments, void 0, function* ({
|
|
74
|
+
chainId
|
|
75
|
+
}) {
|
|
76
|
+
var _b;
|
|
77
|
+
const provider = yield this.getProvider();
|
|
78
|
+
const id = hexValue(chainId);
|
|
79
|
+
try {
|
|
80
|
+
yield provider.send('wallet_switchEthereumChain', [{
|
|
81
|
+
chainId: id
|
|
82
|
+
}]);
|
|
83
|
+
return (_b = chains.find(x => x.id === chainId)) !== null && _b !== void 0 ? _b : {
|
|
84
|
+
id: chainId,
|
|
85
|
+
name: `Chain ${id}`,
|
|
86
|
+
network: `${id}`,
|
|
87
|
+
nativeCurrency: {
|
|
88
|
+
decimals: 18,
|
|
89
|
+
name: 'Ether',
|
|
90
|
+
symbol: 'ETH'
|
|
91
|
+
},
|
|
92
|
+
rpcUrls: {
|
|
93
|
+
default: {
|
|
94
|
+
http: ['']
|
|
95
|
+
},
|
|
96
|
+
public: {
|
|
97
|
+
http: ['']
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
} catch (error) {
|
|
102
|
+
const message = typeof error === 'string' ? error : error === null || error === void 0 ? void 0 : error.message;
|
|
103
|
+
if (/user rejected request/i.test(message)) {
|
|
104
|
+
throw new UserRejectedRequestError(error);
|
|
105
|
+
}
|
|
106
|
+
throw new SwitchChainNotSupportedError({
|
|
107
|
+
connector: {
|
|
108
|
+
name
|
|
109
|
+
} // only name is needed to generate an error message
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
},
|
|
114
|
+
getAccounts() {
|
|
115
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
116
|
+
const provider = yield this.getProvider();
|
|
117
|
+
const accounts = yield provider.send('eth_requestAccounts');
|
|
118
|
+
// return checksum address
|
|
119
|
+
return accounts.map(getAddress);
|
|
120
|
+
});
|
|
121
|
+
},
|
|
122
|
+
getChainId() {
|
|
123
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
124
|
+
const provider = yield this.getProvider();
|
|
125
|
+
const chainId = yield provider.send('eth_chainId');
|
|
126
|
+
return Number(chainId);
|
|
127
|
+
});
|
|
128
|
+
},
|
|
129
|
+
getSigner() {
|
|
130
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
131
|
+
const [provider, accounts] = yield Promise.all([this.getProvider(), this.getAccounts()]);
|
|
132
|
+
return new Web3Provider(provider).getSigner(accounts[0]);
|
|
133
|
+
});
|
|
134
|
+
},
|
|
135
|
+
isAuthorized() {
|
|
136
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
137
|
+
try {
|
|
138
|
+
const provider = yield this.getProvider();
|
|
139
|
+
const accounts = yield provider.send('eth_accounts');
|
|
140
|
+
const account = accounts[0];
|
|
141
|
+
return !!account;
|
|
142
|
+
} catch (_a) {
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
},
|
|
147
|
+
AccountsChanged(accounts) {
|
|
148
|
+
if (accounts.length === 0 || !accounts[0]) {
|
|
149
|
+
emitter.emit('disconnect');
|
|
150
|
+
} else {
|
|
151
|
+
emitter.emit('change', {
|
|
152
|
+
accounts
|
|
153
|
+
});
|
|
56
154
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
}
|
|
81
|
-
getAccount() {
|
|
82
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
83
|
-
invariant(this.provider, 'Provider is not defined');
|
|
84
|
-
const accounts = yield this.provider.send('eth_accounts');
|
|
85
|
-
const account = accounts[0];
|
|
86
|
-
return account;
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
deactivate() {
|
|
90
|
-
invariant(this.provider, 'Provider is not defined');
|
|
91
|
-
this.provider.removeListener('networkChanged', this.handleNetworkChanged);
|
|
92
|
-
this.provider.removeListener('chainChanged', this.handleChainChanged);
|
|
93
|
-
this.provider.removeListener('accountsChanged', this.handleAccountsChanged);
|
|
94
|
-
this.provider.removeListener('close', this.handleClose);
|
|
95
|
-
}
|
|
155
|
+
},
|
|
156
|
+
ChainChanged(chainId) {
|
|
157
|
+
emitter.emit('change', {
|
|
158
|
+
chainId: Number(chainId)
|
|
159
|
+
});
|
|
160
|
+
},
|
|
161
|
+
disconnect() {
|
|
162
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
163
|
+
const provider = yield this.getProvider();
|
|
164
|
+
provider.removeListener('accountsChanged', this.onAccountsChanged);
|
|
165
|
+
provider.removeListener('chainChanged', this.onChainChanged);
|
|
166
|
+
});
|
|
167
|
+
},
|
|
168
|
+
onDisconnect() {
|
|
169
|
+
emitter.emit('disconnect');
|
|
170
|
+
},
|
|
171
|
+
onAccountsChanged() {
|
|
172
|
+
// NOOP
|
|
173
|
+
},
|
|
174
|
+
onChainChanged() {
|
|
175
|
+
// NOOP
|
|
176
|
+
}
|
|
177
|
+
}));
|
|
96
178
|
}
|
|
97
179
|
|
|
98
|
-
export {
|
|
180
|
+
export { idLedgerLive, ledgerLiveConnector, name };
|
package/dist/iframe/helpers.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/iframe/helpers.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/iframe/helpers.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,eACgD,CAAC;AAEtE,eAAO,MAAM,YAAY,eAWxB,CAAC"}
|
package/dist/iframe/helpers.js
CHANGED
|
@@ -1,24 +1,13 @@
|
|
|
1
|
-
const isIframe = () =>
|
|
1
|
+
const isIframe = () => globalThis.window && globalThis.window.parent !== globalThis.window;
|
|
2
|
+
const isLedgerLive = () => {
|
|
3
|
+
if (typeof window === 'undefined') return false;
|
|
2
4
|
try {
|
|
3
|
-
|
|
5
|
+
const params = new URLSearchParams(window.self.location.search);
|
|
6
|
+
const isEmbed = !!params.get('embed');
|
|
7
|
+
return isIframe() && isEmbed;
|
|
4
8
|
} catch (error) {
|
|
5
9
|
return false;
|
|
6
10
|
}
|
|
7
11
|
};
|
|
8
|
-
const isLedgerDappBrowserProvider = (() => {
|
|
9
|
-
let state = null;
|
|
10
|
-
return () => {
|
|
11
|
-
if (typeof state === 'boolean') return state;
|
|
12
|
-
if (typeof window === 'undefined') return false;
|
|
13
|
-
try {
|
|
14
|
-
const params = new URLSearchParams(window.self.location.search);
|
|
15
|
-
const isEmbed = !!params.get('embed');
|
|
16
|
-
state = isIframe() && isEmbed;
|
|
17
|
-
} catch (error) {
|
|
18
|
-
state = false;
|
|
19
|
-
}
|
|
20
|
-
return state;
|
|
21
|
-
};
|
|
22
|
-
})();
|
|
23
12
|
|
|
24
|
-
export { isIframe,
|
|
13
|
+
export { isIframe, isLedgerLive };
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export { isIframe,
|
|
3
|
-
export {
|
|
1
|
+
export { idLedgerLive, ledgerLiveConnector, name } from './iframe/connector.js';
|
|
2
|
+
export { isIframe, isLedgerLive } from './iframe/helpers.js';
|
|
3
|
+
export { idLedgerHid, ledgerHIDConnector } from './hid/connector.js';
|
|
4
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": "4.0.0",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"exports": {
|
|
@@ -33,18 +33,20 @@
|
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@types/w3c-web-hid": "^1.0.2",
|
|
36
|
-
"
|
|
36
|
+
"viem": "2.13.3",
|
|
37
|
+
"wagmi": "2.10.4",
|
|
37
38
|
"eslint-config-custom": "*"
|
|
38
39
|
},
|
|
39
40
|
"dependencies": {
|
|
40
|
-
"@ethersproject/abstract-signer": "^5.
|
|
41
|
-
"@ethersproject/bignumber": "^5.
|
|
42
|
-
"@ethersproject/bytes": "^5.
|
|
43
|
-
"@ethersproject/properties": "^5.
|
|
44
|
-
"@ethersproject/providers": "^5.
|
|
45
|
-
"@ethersproject/strings": "^5.
|
|
46
|
-
"@ethersproject/transactions": "^5.
|
|
47
|
-
"@ethersproject/hash": "^5.
|
|
41
|
+
"@ethersproject/abstract-signer": "^5.7.0",
|
|
42
|
+
"@ethersproject/bignumber": "^5.7.0",
|
|
43
|
+
"@ethersproject/bytes": "^5.7.0",
|
|
44
|
+
"@ethersproject/properties": "^5.7.0",
|
|
45
|
+
"@ethersproject/providers": "^5.7.2",
|
|
46
|
+
"@ethersproject/strings": "^5.7.0",
|
|
47
|
+
"@ethersproject/transactions": "^5.7.0",
|
|
48
|
+
"@ethersproject/hash": "^5.7.0",
|
|
49
|
+
"@ethersproject/address": "^5.7.0",
|
|
48
50
|
"@ledgerhq/hw-app-eth": "^6.35.2",
|
|
49
51
|
"@ledgerhq/hw-transport": "^6.30.1",
|
|
50
52
|
"@ledgerhq/hw-transport-webhid": "^6.28.1",
|
|
@@ -54,6 +56,8 @@
|
|
|
54
56
|
"tiny-invariant": "^1.2.0"
|
|
55
57
|
},
|
|
56
58
|
"peerDependencies": {
|
|
57
|
-
"
|
|
59
|
+
"viem": "2.13.3",
|
|
60
|
+
"wagmi": "2.10.4",
|
|
61
|
+
"@tanstack/react-query": "^5.29.0"
|
|
58
62
|
}
|
|
59
63
|
}
|