@reef-knot/ledger-connector 1.1.0 → 2.0.0

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