@reef-knot/ledger-connector 3.0.0 → 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 +12 -33
- package/dist/iframe/connector.d.ts.map +1 -1
- package/dist/iframe/connector.js +165 -153
- package/dist/index.js +2 -2
- package/package.json +6 -3
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,35 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { IFrameEthereumProvider } from '@ledgerhq/iframe-provider';
|
|
3
|
-
|
|
4
|
-
export declare
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
});
|
|
13
|
-
connect({ chainId }: {
|
|
14
|
-
chainId?: number;
|
|
15
|
-
}): Promise<{
|
|
16
|
-
account: `0x${string}`;
|
|
17
|
-
chain: {
|
|
18
|
-
id: number;
|
|
19
|
-
unsupported: boolean;
|
|
20
|
-
};
|
|
21
|
-
provider: IFrameEthereumProvider;
|
|
22
|
-
}>;
|
|
23
|
-
disconnect(): Promise<void>;
|
|
24
|
-
getAccount(): Promise<`0x${string}`>;
|
|
25
|
-
getChainId(): Promise<number>;
|
|
26
|
-
getProvider(): Promise<IFrameEthereumProvider>;
|
|
27
|
-
getSigner(): Promise<import("@ethersproject/providers").JsonRpcSigner>;
|
|
28
|
-
isAuthorized(): Promise<boolean>;
|
|
29
|
-
switchChain(chainId: number): Promise<Chain>;
|
|
30
|
-
protected onAccountsChanged(accounts: Address[]): void;
|
|
31
|
-
protected onChainChanged(chainId: number | string): void;
|
|
32
|
-
protected onDisconnect(): void;
|
|
33
|
-
protected isUserRejectedRequestError(error: unknown): boolean;
|
|
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;
|
|
8
|
+
};
|
|
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;
|
|
34
12
|
}
|
|
13
|
+
export {};
|
|
35
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,168 +1,180 @@
|
|
|
1
|
-
import { __awaiter
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { IFrameEthereumProvider } from '@ledgerhq/iframe-provider';
|
|
1
|
+
import { __awaiter } from '../_virtual/_tslib.js';
|
|
2
|
+
import { createConnector, SwitchChainNotSupportedError } from 'wagmi';
|
|
3
|
+
import { UserRejectedRequestError, ResourceUnavailableRpcError } from 'viem';
|
|
5
4
|
import { getAddress } from '@ethersproject/address';
|
|
6
5
|
import { hexValue } from '@ethersproject/bytes';
|
|
7
6
|
import { Web3Provider } from '@ethersproject/providers';
|
|
8
7
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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(({
|
|
13
17
|
chains,
|
|
14
|
-
|
|
15
|
-
}) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
31
|
-
try {
|
|
32
|
-
const provider = yield this.getProvider();
|
|
33
|
-
provider.on('accountsChanged', this.onAccountsChanged);
|
|
34
|
-
provider.on('chainChanged', this.onChainChanged);
|
|
35
|
-
this.emit('message', {
|
|
36
|
-
type: 'connecting'
|
|
37
|
-
});
|
|
38
|
-
const account = yield this.getAccount();
|
|
39
|
-
let currentChainId = yield this.getChainId();
|
|
40
|
-
let unsupported = this.isChainUnsupported(currentChainId);
|
|
41
|
-
if (chainId && currentChainId !== chainId) {
|
|
42
|
-
const chain = yield this.switchChain(chainId);
|
|
43
|
-
currentChainId = chain.id;
|
|
44
|
-
unsupported = this.isChainUnsupported(currentChainId);
|
|
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);
|
|
45
34
|
}
|
|
46
|
-
return
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
getSigner() {
|
|
89
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
90
|
-
const [provider, account] = yield Promise.all([this.getProvider(), this.getAccount()]);
|
|
91
|
-
return new Web3Provider(provider).getSigner(account);
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
isAuthorized() {
|
|
95
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
96
|
-
try {
|
|
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;
|
|
97
77
|
const provider = yield this.getProvider();
|
|
98
|
-
const
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
try {
|
|
112
|
-
yield provider.send('wallet_switchEthereumChain', [{
|
|
113
|
-
chainId: id
|
|
114
|
-
}]);
|
|
115
|
-
return (_a = this.chains.find(x => x.id === chainId)) !== null && _a !== void 0 ? _a : {
|
|
116
|
-
id: chainId,
|
|
117
|
-
name: `Chain ${id}`,
|
|
118
|
-
network: `${id}`,
|
|
119
|
-
nativeCurrency: {
|
|
120
|
-
decimals: 18,
|
|
121
|
-
name: 'Ether',
|
|
122
|
-
symbol: 'ETH'
|
|
123
|
-
},
|
|
124
|
-
rpcUrls: {
|
|
125
|
-
default: {
|
|
126
|
-
http: ['']
|
|
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'
|
|
127
91
|
},
|
|
128
|
-
|
|
129
|
-
|
|
92
|
+
rpcUrls: {
|
|
93
|
+
default: {
|
|
94
|
+
http: ['']
|
|
95
|
+
},
|
|
96
|
+
public: {
|
|
97
|
+
http: ['']
|
|
98
|
+
}
|
|
130
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);
|
|
131
105
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
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
|
+
});
|
|
137
154
|
}
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
this.emit('disconnect');
|
|
143
|
-
} else {
|
|
144
|
-
this.emit('change', {
|
|
145
|
-
account: getAddress(accounts[0])
|
|
155
|
+
},
|
|
156
|
+
ChainChanged(chainId) {
|
|
157
|
+
emitter.emit('change', {
|
|
158
|
+
chainId: Number(chainId)
|
|
146
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
|
|
147
176
|
}
|
|
148
|
-
}
|
|
149
|
-
onChainChanged(chainId) {
|
|
150
|
-
const id = normalizeChainId(chainId);
|
|
151
|
-
const unsupported = this.isChainUnsupported(id);
|
|
152
|
-
this.emit('change', {
|
|
153
|
-
chain: {
|
|
154
|
-
id,
|
|
155
|
-
unsupported
|
|
156
|
-
}
|
|
157
|
-
});
|
|
158
|
-
}
|
|
159
|
-
onDisconnect() {
|
|
160
|
-
this.emit('disconnect');
|
|
161
|
-
}
|
|
162
|
-
isUserRejectedRequestError(error) {
|
|
163
|
-
return error.code === 4001;
|
|
164
|
-
}
|
|
177
|
+
}));
|
|
165
178
|
}
|
|
166
|
-
_LedgerLiveConnector_provider = new WeakMap();
|
|
167
179
|
|
|
168
|
-
export {
|
|
180
|
+
export { idLedgerLive, ledgerLiveConnector, name };
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { idLedgerLive, ledgerLiveConnector, name } from './iframe/connector.js';
|
|
2
2
|
export { isIframe, isLedgerLive } from './iframe/helpers.js';
|
|
3
|
-
export {
|
|
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,7 +33,8 @@
|
|
|
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": {
|
|
@@ -55,6 +56,8 @@
|
|
|
55
56
|
"tiny-invariant": "^1.2.0"
|
|
56
57
|
},
|
|
57
58
|
"peerDependencies": {
|
|
58
|
-
"
|
|
59
|
+
"viem": "2.13.3",
|
|
60
|
+
"wagmi": "2.10.4",
|
|
61
|
+
"@tanstack/react-query": "^5.29.0"
|
|
59
62
|
}
|
|
60
63
|
}
|