@reef-knot/ledger-connector 2.0.0 → 3.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.
@@ -14,7 +14,7 @@ export declare class LedgerHIDConnector<Options = any> extends Connector {
14
14
  disconnect(): Promise<void>;
15
15
  getAccount(): Promise<Address>;
16
16
  getChainId(): Promise<number>;
17
- getProvider(): Promise<import("./provider").LedgerHQProvider>;
17
+ getProvider(): Promise<any>;
18
18
  getSigner(): Promise<any>;
19
19
  isAuthorized(): Promise<boolean>;
20
20
  protected onDisconnect: () => void;
@@ -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;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"}
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"}
@@ -74,6 +74,7 @@ class LedgerHIDConnector extends Connector {
74
74
  }
75
75
  getProvider() {
76
76
  return __awaiter(this, void 0, void 0, function* () {
77
+ if (__classPrivateFieldGet(this, _LedgerHIDConnector_provider, "f")) return __classPrivateFieldGet(this, _LedgerHIDConnector_provider, "f");
77
78
  const {
78
79
  LedgerHQProvider
79
80
  } = yield import('./provider.js');
@@ -1,16 +1,16 @@
1
1
  /// <reference types="w3c-web-hid" />
2
2
  import { JsonRpcBatchProvider, Network } from '@ethersproject/providers';
3
- import type TransportHID from '@ledgerhq/hw-transport-webhid';
3
+ import type TransportWebHID from '@ledgerhq/hw-transport-webhid';
4
4
  import { LedgerHQSigner } from './signer';
5
5
  export declare class LedgerHQProvider extends JsonRpcBatchProvider {
6
6
  signer?: LedgerHQSigner;
7
7
  device?: HIDDevice;
8
- transport?: typeof TransportHID;
8
+ transport?: typeof TransportWebHID;
9
9
  constructor(...args: any[]);
10
10
  getSigner(): LedgerHQSigner;
11
11
  listAccounts(): Promise<Array<string>>;
12
12
  detectNetwork(): Promise<Network>;
13
- getTransport(): Promise<TransportHID>;
13
+ getTransport(): Promise<TransportWebHID>;
14
14
  enable(): Promise<string>;
15
15
  getAddress(): Promise<string>;
16
16
  request({ method, params, }: {
@@ -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;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"}
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,eAAe,MAAM,+BAA+B,CAAC;AACjE,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,eAAe,CAAC;gBAE9B,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,eAAe,CAAC;IAcxC,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"}
@@ -23,9 +23,9 @@ class LedgerHQProvider extends JsonRpcBatchProvider {
23
23
  return __awaiter(this, void 0, void 0, function* () {
24
24
  invariant(this.transport, 'Transport is not defined');
25
25
  try {
26
- const transport = yield (_a = this.transport) === null || _a === void 0 ? void 0 : _a.create();
27
- this.device = transport.device;
28
- return transport;
26
+ const transportInstance = yield (_a = this.transport) === null || _a === void 0 ? void 0 : _a.create();
27
+ this.device = transportInstance.device;
28
+ return transportInstance;
29
29
  } catch (error) {
30
30
  return checkError(error);
31
31
  }
@@ -35,9 +35,9 @@ class LedgerHQProvider extends JsonRpcBatchProvider {
35
35
  return __awaiter(this, void 0, void 0, function* () {
36
36
  try {
37
37
  const {
38
- default: TransportHID
38
+ default: TransportWebHID
39
39
  } = yield import('@ledgerhq/hw-transport-webhid');
40
- this.transport = TransportHID;
40
+ this.transport = TransportWebHID;
41
41
  const {
42
42
  hid
43
43
  } = window.navigator;
@@ -1,11 +1,11 @@
1
- import Eth from '@ledgerhq/hw-app-eth';
1
+ import type Eth from '@ledgerhq/hw-app-eth';
2
2
  import { LoadConfig, ResolutionConfig } from '@ledgerhq/hw-app-eth/lib/services/types';
3
3
  import { EIP712Message } from '@ledgerhq/types-live';
4
4
  import { JsonRpcSigner, TransactionRequest } from '@ethersproject/providers';
5
5
  import { Signer, TypedDataDomain, TypedDataField, TypedDataSigner } from '@ethersproject/abstract-signer';
6
6
  import { UnsignedTransaction } from '@ethersproject/transactions';
7
7
  import { Bytes } from '@ethersproject/bytes';
8
- import { LedgerHQProvider } from './provider';
8
+ import type { LedgerHQProvider } from './provider';
9
9
  import { UnsignedTransactionStrict } from './types';
10
10
  export declare const LS_KEY_DERIVATION_PATH = "reef-knot_ledger-derivation-path";
11
11
  export declare class LedgerHQSigner extends Signer implements TypedDataSigner {
@@ -1 +1 @@
1
- {"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../../src/hid/signer.ts"],"names":[],"mappings":"AAAA,OAAO,GAAsB,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EACL,UAAU,EACV,gBAAgB,EACjB,MAAM,yCAAyC,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAsB,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE7E,OAAO,EACL,MAAM,EACN,eAAe,EACf,cAAc,EACd,eAAe,EAChB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAa,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAE7E,OAAO,EAAE,KAAK,EAA0B,MAAM,sBAAsB,CAAC;AAGrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC;AAEpD,eAAO,MAAM,sBAAsB,qCAAqC,CAAC;AAGzE,qBAAa,cAAe,SAAQ,MAAO,YAAW,eAAe;IACnE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IAEpC,MAAM,SAAK;IAEX,QAAQ,SAAM;gBAEF,QAAQ,EAAE,gBAAgB,EAAE,IAAI,SAAK;IAW3C,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAgBpD,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAS7B,WAAW,CAAC,OAAO,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBrD,gBAAgB,CACpB,WAAW,EAAE,yBAAyB,GACrC,OAAO,CAAC,mBAAmB,CAAC;IAczB,eAAe,CACnB,WAAW,EAAE,kBAAkB,EAC/B,UAAU,GAAE,UAAe,EAC3B,gBAAgB,GAAE,gBAAqB,GACtC,OAAO,CAAC,MAAM,CAAC;IAsBlB,OAAO,CAAC,QAAQ,EAAE,gBAAgB,GAAG,aAAa;IAKlD,gBAAgB,IAAI,aAAa;IAKjC,wBAAwB,IAAI,OAAO,CAAC,MAAM,CAAC;IAKrC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAK1B,kBAAkB,CAAC,QAAQ,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK7D,cAAc,CAClB,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,EAC7C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACzB,OAAO,CAAC,MAAM,CAAC;IA8BZ,mBAAmB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;CAOhE"}
1
+ {"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../../src/hid/signer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EACL,UAAU,EACV,gBAAgB,EACjB,MAAM,yCAAyC,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAsB,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE7E,OAAO,EACL,MAAM,EACN,eAAe,EACf,cAAc,EACd,eAAe,EAChB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAa,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAE7E,OAAO,EAAE,KAAK,EAA0B,MAAM,sBAAsB,CAAC;AAGrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC;AAEpD,eAAO,MAAM,sBAAsB,qCAAqC,CAAC;AAGzE,qBAAa,cAAe,SAAQ,MAAO,YAAW,eAAe;IACnE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IAEpC,MAAM,SAAK;IAEX,QAAQ,SAAM;gBAEF,QAAQ,EAAE,gBAAgB,EAAE,IAAI,SAAK;IAW3C,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAiBpD,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAS7B,WAAW,CAAC,OAAO,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBrD,gBAAgB,CACpB,WAAW,EAAE,yBAAyB,GACrC,OAAO,CAAC,mBAAmB,CAAC;IAczB,eAAe,CACnB,WAAW,EAAE,kBAAkB,EAC/B,UAAU,GAAE,UAAe,EAC3B,gBAAgB,GAAE,gBAAqB,GACtC,OAAO,CAAC,MAAM,CAAC;IAuBlB,OAAO,CAAC,QAAQ,EAAE,gBAAgB,GAAG,aAAa;IAKlD,gBAAgB,IAAI,aAAa;IAKjC,wBAAwB,IAAI,OAAO,CAAC,MAAM,CAAC;IAKrC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAK1B,kBAAkB,CAAC,QAAQ,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK7D,cAAc,CAClB,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,EAC7C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACzB,OAAO,CAAC,MAAM,CAAC;IA8BZ,mBAAmB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;CAOhE"}
@@ -1,5 +1,4 @@
1
1
  import { __awaiter } from '../_virtual/_tslib.js';
2
- import Eth, { ledgerService } from '@ledgerhq/hw-app-eth';
3
2
  import { BigNumber } from '@ethersproject/bignumber';
4
3
  import { Signer } from '@ethersproject/abstract-signer';
5
4
  import { serialize } from '@ethersproject/transactions';
@@ -26,6 +25,9 @@ class LedgerHQSigner extends Signer {
26
25
  return __awaiter(this, void 0, void 0, function* () {
27
26
  const transport = yield this.provider.getTransport();
28
27
  try {
28
+ const {
29
+ default: Eth
30
+ } = yield import('@ledgerhq/hw-app-eth');
29
31
  const eth = new Eth(transport);
30
32
  yield eth.getAppConfiguration();
31
33
  // eslint-disable-next-line @typescript-eslint/await-thenable
@@ -95,6 +97,9 @@ class LedgerHQSigner extends Signer {
95
97
  const unsignedTx = yield convertToUnsigned(transaction);
96
98
  const populatedTx = yield this.populateUnsigned(unsignedTx);
97
99
  const serializedTx = serialize(populatedTx).substring(2);
100
+ const {
101
+ ledgerService
102
+ } = yield import('@ledgerhq/hw-app-eth');
98
103
  const resolution = yield ledgerService.resolveTransaction(serializedTx, loadConfig, resolutionConfig);
99
104
  const sig = yield this.withEthApp(eth => eth.signTransaction(this.path, serializedTx, resolution));
100
105
  return serialize(populatedTx, {
@@ -1,24 +1,35 @@
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[];
6
- };
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;
1
+ import { Address, Chain, Connector } from 'wagmi';
2
+ import { IFrameEthereumProvider } from '@ledgerhq/iframe-provider';
3
+ import type { IFrameEthereumProviderOptions } from '@ledgerhq/iframe-provider';
4
+ export declare class LedgerLiveConnector extends Connector<IFrameEthereumProvider, IFrameEthereumProviderOptions> {
5
+ #private;
6
+ readonly id = "ledgerLive";
7
+ readonly name = "Ledger Live";
8
+ readonly ready: boolean;
9
+ constructor({ chains, options, }: {
10
+ chains?: Chain[];
11
+ options?: IFrameEthereumProviderOptions;
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;
22
34
  }
23
- export {};
24
35
  //# 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":"AAAA,OAAO,EACL,OAAO,EACP,KAAK,EACL,SAAS,EAMV,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAO/E,qBAAa,mBAAoB,SAAQ,SAAS,CAChD,sBAAsB,EACtB,6BAA6B,CAC9B;;IACC,QAAQ,CAAC,EAAE,gBAAgB;IAC3B,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAS;gBAGpB,EACV,MAAM,EACN,OAAY,GACb,EAAE;QACD,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;QACjB,OAAO,CAAC,EAAE,6BAA6B,CAAC;KACzC;IAMK,OAAO,CAAC,EAAE,OAAO,EAAE,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;;;;;;;;IA4BzC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,UAAU;IAOV,UAAU;IAKhB,WAAW;IAOL,SAAS;IAUT,YAAY;IAWZ,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IA2BlD,SAAS,CAAC,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE;IAQ/C,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAMjD,SAAS,CAAC,YAAY;IAItB,SAAS,CAAC,0BAA0B,CAAC,KAAK,EAAE,OAAO;CAGpD"}
@@ -1,98 +1,168 @@
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';
1
+ import { __awaiter, __classPrivateFieldGet, __classPrivateFieldSet } from '../_virtual/_tslib.js';
2
+ import { Connector, UserRejectedRequestError, ResourceUnavailableError, SwitchChainError } from 'wagmi';
3
+ import { normalizeChainId } from '@wagmi/core';
4
+ import { IFrameEthereumProvider } from '@ledgerhq/iframe-provider';
5
+ import { getAddress } from '@ethersproject/address';
6
+ import { hexValue } from '@ethersproject/bytes';
7
+ import { Web3Provider } from '@ethersproject/providers';
5
8
 
6
- const MAINNET_CHAIN_ID = 1;
7
- class LedgerHQFrameConnector extends AbstractConnector {
8
- constructor(config) {
9
- var _a;
9
+ var _LedgerLiveConnector_provider;
10
+ /* eslint-disable @typescript-eslint/unbound-method */
11
+ class LedgerLiveConnector extends Connector {
12
+ constructor({
13
+ chains,
14
+ options = {}
15
+ }) {
10
16
  super({
11
- supportedChainIds: (_a = config === null || config === void 0 ? void 0 : config.supportedChainIds) !== null && _a !== void 0 ? _a : [MAINNET_CHAIN_ID]
17
+ chains,
18
+ options
12
19
  });
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);
20
+ this.id = 'ledgerLive';
21
+ this.name = 'Ledger Live';
22
+ this.ready = false;
23
+ _LedgerLiveConnector_provider.set(this, void 0);
24
+ this.onAccountsChanged = this.onAccountsChanged.bind(this);
25
+ this.onChainChanged = this.onChainChanged.bind(this);
18
26
  }
19
- handleNetworkChanged(networkId) {
20
- this.emitUpdate({
21
- provider: this.provider,
22
- chainId: networkId
27
+ connect({
28
+ chainId
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);
45
+ }
46
+ return {
47
+ account,
48
+ chain: {
49
+ id: currentChainId,
50
+ unsupported
51
+ },
52
+ provider
53
+ };
54
+ } catch (error) {
55
+ if (this.isUserRejectedRequestError(error)) throw new UserRejectedRequestError(error);
56
+ if (error.code === -32002) throw new ResourceUnavailableError(error);
57
+ throw error;
58
+ }
23
59
  });
24
60
  }
25
- handleChainChanged(chainId) {
26
- this.emitUpdate({
27
- chainId
61
+ disconnect() {
62
+ return __awaiter(this, void 0, void 0, function* () {
63
+ const provider = yield this.getProvider();
64
+ provider.removeListener('accountsChanged', this.onAccountsChanged);
65
+ provider.removeListener('chainChanged', this.onChainChanged);
28
66
  });
29
67
  }
30
- handleAccountsChanged(accounts) {
31
- this.emitUpdate({
32
- account: accounts.length === 0 ? null : accounts[0]
68
+ getAccount() {
69
+ return __awaiter(this, void 0, void 0, function* () {
70
+ const provider = yield this.getProvider();
71
+ const accounts = yield provider.send('eth_requestAccounts');
72
+ // return checksum address
73
+ return getAddress(accounts[0]);
33
74
  });
34
75
  }
35
- handleClose() {
36
- this.emitDeactivate();
76
+ getChainId() {
77
+ return __awaiter(this, void 0, void 0, function* () {
78
+ const provider = yield this.getProvider();
79
+ return provider.send('eth_chainId').then(normalizeChainId);
80
+ });
37
81
  }
38
- // eslint-disable-next-line class-methods-use-this
39
- isLedgerApp() {
40
- return isLedgerDappBrowserProvider();
82
+ getProvider() {
83
+ if (!__classPrivateFieldGet(this, _LedgerLiveConnector_provider, "f")) {
84
+ __classPrivateFieldSet(this, _LedgerLiveConnector_provider, new IFrameEthereumProvider(this.options), "f");
85
+ }
86
+ return Promise.resolve(__classPrivateFieldGet(this, _LedgerLiveConnector_provider, "f"));
41
87
  }
42
- getProviderInstance() {
88
+ getSigner() {
43
89
  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);
90
+ const [provider, account] = yield Promise.all([this.getProvider(), this.getAccount()]);
91
+ return new Web3Provider(provider).getSigner(account);
50
92
  });
51
93
  }
52
- activate() {
94
+ isAuthorized() {
53
95
  return __awaiter(this, void 0, void 0, function* () {
54
- if (!this.provider) {
55
- this.provider = yield this.getProviderInstance();
96
+ try {
97
+ const provider = yield this.getProvider();
98
+ const accounts = yield provider.send('eth_accounts');
99
+ const account = accounts[0];
100
+ return !!account;
101
+ } catch (_a) {
102
+ return false;
56
103
  }
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
104
  });
68
105
  }
69
- // eslint-disable-next-line @typescript-eslint/require-await
70
- getProvider() {
106
+ switchChain(chainId) {
107
+ var _a;
71
108
  return __awaiter(this, void 0, void 0, function* () {
72
- return this.provider;
109
+ const provider = yield this.getProvider();
110
+ const id = hexValue(chainId);
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: ['']
127
+ },
128
+ public: {
129
+ http: ['']
130
+ }
131
+ }
132
+ };
133
+ } catch (error) {
134
+ const message = typeof error === 'string' ? error : error === null || error === void 0 ? void 0 : error.message;
135
+ if (/user rejected request/i.test(message)) throw new UserRejectedRequestError(error);
136
+ throw new SwitchChainError(error);
137
+ }
73
138
  });
74
139
  }
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
- });
140
+ onAccountsChanged(accounts) {
141
+ if (accounts.length === 0 || !accounts[0]) {
142
+ this.emit('disconnect');
143
+ } else {
144
+ this.emit('change', {
145
+ account: getAddress(accounts[0])
146
+ });
147
+ }
80
148
  }
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;
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
+ }
87
157
  });
88
158
  }
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);
159
+ onDisconnect() {
160
+ this.emit('disconnect');
161
+ }
162
+ isUserRejectedRequestError(error) {
163
+ return error.code === 4001;
95
164
  }
96
165
  }
166
+ _LedgerLiveConnector_provider = new WeakMap();
97
167
 
98
- export { LedgerHQFrameConnector };
168
+ export { LedgerLiveConnector };
@@ -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';
1
+ export { LedgerLiveConnector } from './iframe/connector.js';
2
+ export { isIframe, isLedgerLive } from './iframe/helpers.js';
3
3
  export { 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.0",
3
+ "version": "3.0.0",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "exports": {
@@ -37,17 +37,18 @@
37
37
  "eslint-config-custom": "*"
38
38
  },
39
39
  "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",
48
- "@ledgerhq/hw-app-eth": "^6.35.0",
49
- "@ledgerhq/hw-transport": "^6.30.0",
50
- "@ledgerhq/hw-transport-webhid": "^6.28.0",
40
+ "@ethersproject/abstract-signer": "^5.7.0",
41
+ "@ethersproject/bignumber": "^5.7.0",
42
+ "@ethersproject/bytes": "^5.7.0",
43
+ "@ethersproject/properties": "^5.7.0",
44
+ "@ethersproject/providers": "^5.7.2",
45
+ "@ethersproject/strings": "^5.7.0",
46
+ "@ethersproject/transactions": "^5.7.0",
47
+ "@ethersproject/hash": "^5.7.0",
48
+ "@ethersproject/address": "^5.7.0",
49
+ "@ledgerhq/hw-app-eth": "^6.35.2",
50
+ "@ledgerhq/hw-transport": "^6.30.1",
51
+ "@ledgerhq/hw-transport-webhid": "^6.28.1",
51
52
  "@ledgerhq/iframe-provider": "^0.4.3",
52
53
  "@web3-react/abstract-connector": "^6.0.7",
53
54
  "@web3-react/types": "^6.0.7",