@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.
@@ -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, __classPrivateFieldGet, __classPrivateFieldSet };
31
+ export { __awaiter };
@@ -1,24 +1,12 @@
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>;
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":"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;IAYjB,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"}
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"}
@@ -1,106 +1,105 @@
1
- import { __classPrivateFieldSet, __awaiter, __classPrivateFieldGet } from '../_virtual/_tslib.js';
2
- import { Connector, ConnectorNotFoundError } from 'wagmi';
1
+ import { __awaiter } from '../_virtual/_tslib.js';
2
+ import { createConnector, ChainNotConfiguredError, ConnectorNotFoundError } from 'wagmi';
3
3
  import { checkError } from './helpers.js';
4
4
 
5
- var _LedgerHIDConnector_chain, _LedgerHIDConnector_provider, _LedgerHIDConnector_rpc;
6
- class LedgerHIDConnector extends Connector {
7
- constructor({
8
- defaultChain,
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
- rpc,
11
- options
12
- }) {
13
- super({
14
- chains,
15
- options
16
- });
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 = () => {
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
- this.emit('disconnect');
28
- };
29
- this.onAccountsChanged = () => {
94
+ emitter.emit('disconnect');
95
+ },
96
+ onAccountsChanged() {
30
97
  // NOOP
31
- };
32
- this.onChainChanged = () => {
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
- return Promise.reject('The chain must be set');
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 { LedgerHIDConnector };
105
+ export { idLedgerHid, ledgerHIDConnector, name };
@@ -1,3 +1,3 @@
1
- export { LedgerHIDConnector } from './connector';
1
+ export { idLedgerHid, ledgerHIDConnector } from './connector';
2
2
  export { LS_KEY_DERIVATION_PATH } from './signer';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -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;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,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"}
@@ -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
- method,
68
- params
69
- }) {
70
- return __awaiter(this, void 0, void 0, function* () {
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':
@@ -92,8 +92,8 @@ class LedgerHQSigner extends Signer {
92
92
  });
93
93
  });
94
94
  }
95
- signTransaction(transaction, loadConfig = {}, resolutionConfig = {}) {
96
- return __awaiter(this, void 0, void 0, function* () {
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 { AbstractConnector } from '@web3-react/abstract-connector';
2
- import type { ConnectorUpdate } from '@web3-react/types';
3
- import type { IFrameEthereumProvider } from '@ledgerhq/iframe-provider';
4
- type IFrameEthereumProviderOptions = ConstructorParameters<typeof IFrameEthereumProvider>[0] & {
5
- supportedChainIds?: number[];
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 class LedgerHQFrameConnector extends AbstractConnector {
8
- private config;
9
- provider?: IFrameEthereumProvider;
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":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAKxE,KAAK,6BAA6B,GAAG,qBAAqB,CACxD,OAAO,sBAAsB,CAC9B,CAAC,CAAC,CAAC,GAAG;IAAE,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAIxC,qBAAa,sBAAuB,SAAQ,iBAAiB;IAC3D,OAAO,CAAC,MAAM,CAAgC;IAEvC,QAAQ,CAAC,EAAE,sBAAsB,CAAC;gBAE7B,MAAM,CAAC,EAAE,6BAA6B;IAalD,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,WAAW;IAKZ,WAAW,IAAI,OAAO;IAIhB,mBAAmB,IAAI,OAAO,CAAC,sBAAsB,CAAC;IAUtD,QAAQ,IAAI,OAAO,CAAC,eAAe,CAAC;IAiBpC,WAAW,IAAI,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC;IAI1D,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;IAKtC,UAAU,IAAI,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC;IAS1C,UAAU,IAAI,IAAI;CAQ1B"}
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"}
@@ -1,98 +1,180 @@
1
1
  import { __awaiter } from '../_virtual/_tslib.js';
2
- import invariant from 'tiny-invariant';
3
- import { AbstractConnector } from '@web3-react/abstract-connector';
4
- import { isLedgerDappBrowserProvider } from './helpers.js';
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 MAINNET_CHAIN_ID = 1;
7
- class LedgerHQFrameConnector extends AbstractConnector {
8
- constructor(config) {
9
- var _a;
10
- super({
11
- supportedChainIds: (_a = config === null || config === void 0 ? void 0 : config.supportedChainIds) !== null && _a !== void 0 ? _a : [MAINNET_CHAIN_ID]
12
- });
13
- this.config = config !== null && config !== void 0 ? config : {};
14
- this.handleNetworkChanged = this.handleNetworkChanged.bind(this);
15
- this.handleChainChanged = this.handleChainChanged.bind(this);
16
- this.handleAccountsChanged = this.handleAccountsChanged.bind(this);
17
- this.handleClose = this.handleClose.bind(this);
18
- }
19
- handleNetworkChanged(networkId) {
20
- this.emitUpdate({
21
- provider: this.provider,
22
- chainId: networkId
23
- });
24
- }
25
- handleChainChanged(chainId) {
26
- this.emitUpdate({
27
- chainId
28
- });
29
- }
30
- handleAccountsChanged(accounts) {
31
- this.emitUpdate({
32
- account: accounts.length === 0 ? null : accounts[0]
33
- });
34
- }
35
- handleClose() {
36
- this.emitDeactivate();
37
- }
38
- // eslint-disable-next-line class-methods-use-this
39
- isLedgerApp() {
40
- return isLedgerDappBrowserProvider();
41
- }
42
- getProviderInstance() {
43
- return __awaiter(this, void 0, void 0, function* () {
44
- if (this.provider) return this.provider;
45
- // eslint-disable-next-line no-shadow
46
- const {
47
- IFrameEthereumProvider
48
- } = yield import('@ledgerhq/iframe-provider');
49
- return new IFrameEthereumProvider(this.config);
50
- });
51
- }
52
- activate() {
53
- return __awaiter(this, void 0, void 0, function* () {
54
- if (!this.provider) {
55
- this.provider = yield this.getProviderInstance();
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
- this.provider.on('networkChanged', this.handleNetworkChanged);
58
- this.provider.on('chainChanged', this.handleChainChanged);
59
- this.provider.on('accountsChanged', this.handleAccountsChanged);
60
- this.provider.on('close', this.handleClose);
61
- const accounts = yield this.provider.enable();
62
- const account = accounts[0];
63
- return {
64
- provider: this.provider,
65
- account
66
- };
67
- });
68
- }
69
- // eslint-disable-next-line @typescript-eslint/require-await
70
- getProvider() {
71
- return __awaiter(this, void 0, void 0, function* () {
72
- return this.provider;
73
- });
74
- }
75
- getChainId() {
76
- return __awaiter(this, void 0, void 0, function* () {
77
- invariant(this.provider, 'Provider is not defined');
78
- return this.provider.send('eth_chainId');
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 { LedgerHQFrameConnector };
180
+ export { idLedgerLive, ledgerLiveConnector, name };
@@ -1,3 +1,3 @@
1
1
  export declare const isIframe: () => boolean;
2
- export declare const isLedgerDappBrowserProvider: () => boolean;
2
+ export declare const isLedgerLive: () => boolean;
3
3
  //# sourceMappingURL=helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/iframe/helpers.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,QAAO,OAM3B,CAAC;AAEF,eAAO,MAAM,2BAA2B,QAG3B,OAcT,CAAC"}
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"}
@@ -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
- return window.self !== window.top;
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, isLedgerDappBrowserProvider };
13
+ export { isIframe, isLedgerLive };
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- export { LedgerHQFrameConnector } from './iframe/connector.js';
2
- export { isIframe, isLedgerDappBrowserProvider } from './iframe/helpers.js';
3
- export { LedgerHIDConnector } from './hid/connector.js';
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": "2.0.1",
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
- "wagmi": "^0.12.19",
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.5.0",
41
- "@ethersproject/bignumber": "^5.5.0",
42
- "@ethersproject/bytes": "^5.5.0",
43
- "@ethersproject/properties": "^5.5.0",
44
- "@ethersproject/providers": "^5.5.2",
45
- "@ethersproject/strings": "^5.5.0",
46
- "@ethersproject/transactions": "^5.5.0",
47
- "@ethersproject/hash": "^5.5.0",
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
- "wagmi": "^0.12.19"
59
+ "viem": "2.13.3",
60
+ "wagmi": "2.10.4",
61
+ "@tanstack/react-query": "^5.29.0"
58
62
  }
59
63
  }