@dynamic-labs/starknet 3.0.0-alpha.52 → 3.0.0-alpha.53

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/CHANGELOG.md CHANGED
@@ -1,4 +1,43 @@
1
1
 
2
+ ## [3.0.0-alpha.53](https://github.com/dynamic-labs/DynamicAuth/compare/v3.0.0-alpha.52...v3.0.0-alpha.53) (2024-08-29)
3
+
4
+
5
+ ### ⚠ BREAKING CHANGES
6
+
7
+ * simplify solana wallet signer types (#6748)
8
+ * deprecate getEoaConnector (#6571)
9
+ * limit methods and props returned by wallet.connector (#6540)
10
+ * move generic solana code to solana-core package (#6701)
11
+ * revamp ether v6 interface (#6548)
12
+ * add ethereum wallet specific methods and intercept to sync when needed (#6662)
13
+ * add solana wallet specific methods and intercept to sync when needed (#6608)
14
+ * don't force primary wallet to be connected (#6128)
15
+
16
+ ### Features
17
+
18
+ * add bitcoin wallet specific methods and intercept to sync when needed ([#6663](https://github.com/dynamic-labs/DynamicAuth/issues/6663)) ([ed699b1](https://github.com/dynamic-labs/DynamicAuth/commit/ed699b1f8c264755779ec4840d105f89ade5500e))
19
+ * add ethereum wallet specific methods and intercept to sync when needed ([#6662](https://github.com/dynamic-labs/DynamicAuth/issues/6662)) ([372360e](https://github.com/dynamic-labs/DynamicAuth/commit/372360ed7ca395f88811fc62c94b2b494eb59971))
20
+ * add solana wallet specific methods and intercept to sync when needed ([#6608](https://github.com/dynamic-labs/DynamicAuth/issues/6608)) ([565f610](https://github.com/dynamic-labs/DynamicAuth/commit/565f6100340296c267e9706fd263e9bd3f7d3732))
21
+ * add useSmartWallets hook to manage aa wallets ([#6564](https://github.com/dynamic-labs/DynamicAuth/issues/6564)) ([a243d36](https://github.com/dynamic-labs/DynamicAuth/commit/a243d361ce7c368d0f1afda55f9c1fabefd75ba8))
22
+ * don't force primary wallet to be connected ([#6128](https://github.com/dynamic-labs/DynamicAuth/issues/6128)) ([018a6f6](https://github.com/dynamic-labs/DynamicAuth/commit/018a6f66f8725914ab97ea3e2e1c80626266e503))
23
+ * new prop to enable prompt for linking when account change is detected ([#6713](https://github.com/dynamic-labs/DynamicAuth/issues/6713)) ([b5a6321](https://github.com/dynamic-labs/DynamicAuth/commit/b5a63212ae33fae24401f141d5ca2356b446dcff))
24
+
25
+
26
+ ### Bug Fixes
27
+
28
+ * always sync wagmi client with primary wallet ([#6577](https://github.com/dynamic-labs/DynamicAuth/issues/6577)) ([be22fde](https://github.com/dynamic-labs/DynamicAuth/commit/be22fdea3bb61db79b06ba56cb32da6cd8141b66))
29
+ * cosmos wallet intercepts ([#6720](https://github.com/dynamic-labs/DynamicAuth/issues/6720)) ([cfc9df4](https://github.com/dynamic-labs/DynamicAuth/commit/cfc9df48a8032f7348fec14f77b9e378d2e26a22))
30
+ * magiceden wallet events not working correctly on page refresh ([#6735](https://github.com/dynamic-labs/DynamicAuth/issues/6735)) ([6ed5964](https://github.com/dynamic-labs/DynamicAuth/commit/6ed5964134a2cafd392c19f18eb71e6ca2ce238d))
31
+ * use proxy to intercept solana signer methods ([#6743](https://github.com/dynamic-labs/DynamicAuth/issues/6743)) ([ecbe5ea](https://github.com/dynamic-labs/DynamicAuth/commit/ecbe5ea772592d2c693d8222d85b7642acd151a8))
32
+ * wallet.chain references ([525c1ca](https://github.com/dynamic-labs/DynamicAuth/commit/525c1ca9a8fe6402c06eabe6aebc30e310411d9b))
33
+
34
+
35
+ * deprecate getEoaConnector ([#6571](https://github.com/dynamic-labs/DynamicAuth/issues/6571)) ([0226ee5](https://github.com/dynamic-labs/DynamicAuth/commit/0226ee5a13f2418607076ee6f2ec0a579b06dd5d))
36
+ * limit methods and props returned by wallet.connector ([#6540](https://github.com/dynamic-labs/DynamicAuth/issues/6540)) ([9c86e35](https://github.com/dynamic-labs/DynamicAuth/commit/9c86e35c72cd40313bfd19254dd6171ee8f62213))
37
+ * move generic solana code to solana-core package ([#6701](https://github.com/dynamic-labs/DynamicAuth/issues/6701)) ([30815f5](https://github.com/dynamic-labs/DynamicAuth/commit/30815f5d46feeefb2413c1b7d30b43d5370ee032))
38
+ * revamp ether v6 interface ([#6548](https://github.com/dynamic-labs/DynamicAuth/issues/6548)) ([f3b2fb8](https://github.com/dynamic-labs/DynamicAuth/commit/f3b2fb8da7de21f9c58e67fa7f5580166195092a))
39
+ * simplify solana wallet signer types ([#6748](https://github.com/dynamic-labs/DynamicAuth/issues/6748)) ([01d1a42](https://github.com/dynamic-labs/DynamicAuth/commit/01d1a42bc916ab329580b741ba60d706bf6c5491))
40
+
2
41
  ## [3.0.0-alpha.52](https://github.com/dynamic-labs/DynamicAuth/compare/v3.0.0-alpha.51...v3.0.0-alpha.52) (2024-08-28)
3
42
 
4
43
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dynamic-labs/starknet",
3
- "version": "3.0.0-alpha.52",
3
+ "version": "3.0.0-alpha.53",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/dynamic-labs/dynamic-auth.git",
@@ -32,11 +32,11 @@
32
32
  "starknetkit": "1.1.3",
33
33
  "@dynamic-labs/sdk-api-core": "0.0.519",
34
34
  "@module-federation/runtime": "0.1.18",
35
- "@dynamic-labs/logger": "3.0.0-alpha.52",
36
- "@dynamic-labs/starknet-core": "3.0.0-alpha.52",
37
- "@dynamic-labs/utils": "3.0.0-alpha.52",
38
- "@dynamic-labs/wallet-book": "3.0.0-alpha.52",
39
- "@dynamic-labs/wallet-connector-core": "3.0.0-alpha.52"
35
+ "@dynamic-labs/logger": "3.0.0-alpha.53",
36
+ "@dynamic-labs/starknet-core": "3.0.0-alpha.53",
37
+ "@dynamic-labs/utils": "3.0.0-alpha.53",
38
+ "@dynamic-labs/wallet-book": "3.0.0-alpha.53",
39
+ "@dynamic-labs/wallet-connector-core": "3.0.0-alpha.53"
40
40
  },
41
41
  "peerDependencies": {}
42
42
  }
package/src/index.cjs CHANGED
@@ -11,6 +11,8 @@ var bitget = require('./wallets/bitget.cjs');
11
11
  var okx = require('./wallets/okx.cjs');
12
12
  var metamask = require('./wallets/metamask.cjs');
13
13
  require('@dynamic-labs/starknet-core');
14
+ var StarknetWallet = require('./wallet/StarknetWallet.cjs');
15
+ var isStarknetWallet = require('./wallet/isStarknetWallet/isStarknetWallet.cjs');
14
16
 
15
17
  /* eslint-disable @typescript-eslint/no-unused-vars */
16
18
  const StarknetWalletConnectors = (props) => [
@@ -23,4 +25,6 @@ const StarknetWalletConnectors = (props) => [
23
25
  metamask.MetaMask,
24
26
  ];
25
27
 
28
+ exports.StarknetWallet = StarknetWallet.StarknetWallet;
29
+ exports.isStarknetWallet = isStarknetWallet.isStarknetWallet;
26
30
  exports.StarknetWalletConnectors = StarknetWalletConnectors;
package/src/index.d.ts CHANGED
@@ -6,3 +6,4 @@ export type { ArgentXWalletConnectorType } from './wallets/argentx';
6
6
  export type { BraavosWalletConnectorType } from './wallets/braavos';
7
7
  export type { ArgentXMobileWalletConnectorType } from './wallets/argentxMobile';
8
8
  export type { ArgentXWebWalletConnectorType } from './wallets/argentxWeb';
9
+ export { StarknetWallet, isStarknetWallet } from './wallet';
package/src/index.js CHANGED
@@ -7,6 +7,8 @@ import { Bitget } from './wallets/bitget.js';
7
7
  import { Okx } from './wallets/okx.js';
8
8
  import { MetaMask } from './wallets/metamask.js';
9
9
  import '@dynamic-labs/starknet-core';
10
+ export { StarknetWallet } from './wallet/StarknetWallet.js';
11
+ export { isStarknetWallet } from './wallet/isStarknetWallet/isStarknetWallet.js';
10
12
 
11
13
  /* eslint-disable @typescript-eslint/no-unused-vars */
12
14
  const StarknetWalletConnectors = (props) => [
@@ -11,6 +11,7 @@ var utils = require('@dynamic-labs/utils');
11
11
  var constants = require('./constants.cjs');
12
12
  var ethereumContractAbi = require('./ethereumContractAbi.cjs');
13
13
  var convertors = require('./utils/convertors.cjs');
14
+ var StarknetWallet = require('./wallet/StarknetWallet.cjs');
14
15
 
15
16
  const ACCOUNT_CHANGED_EVENT_LISTENER = 'accountsChanged';
16
17
  const NETWORK_CHANGED_EVENT_LISTENER = 'networkChanged';
@@ -19,6 +20,7 @@ class StarknetWalletConnector extends walletConnectorCore.WalletConnectorBase {
19
20
  var _a;
20
21
  super(opts);
21
22
  this.STARKNET_VERSION = 'v5';
23
+ this.ChainWallet = StarknetWallet.StarknetWallet;
22
24
  this.connectedChain = 'STARK';
23
25
  this.supportedChains = ['STARK'];
24
26
  this.switchNetworkOnlyFromWallet = true;
@@ -108,13 +110,13 @@ class StarknetWalletConnector extends walletConnectorCore.WalletConnectorBase {
108
110
  return Promise.resolve(wallet === null || wallet === void 0 ? void 0 : wallet.selectedAddress);
109
111
  });
110
112
  }
111
- getSigner() {
113
+ getWalletAccount() {
112
114
  return _tslib.__awaiter(this, void 0, void 0, function* () {
113
115
  const wallet = this.getWallet();
114
116
  return wallet === null || wallet === void 0 ? void 0 : wallet.account;
115
117
  });
116
118
  }
117
- getWalletClient() {
119
+ getProvider() {
118
120
  return _tslib.__awaiter(this, void 0, void 0, function* () {
119
121
  const wallet = yield this.getWallet();
120
122
  return wallet === null || wallet === void 0 ? void 0 : wallet.provider;
@@ -136,7 +138,7 @@ class StarknetWalletConnector extends walletConnectorCore.WalletConnectorBase {
136
138
  }
137
139
  getBalance(address) {
138
140
  return _tslib.__awaiter(this, void 0, void 0, function* () {
139
- const provider = yield this.getWalletClient();
141
+ const provider = yield this.getProvider();
140
142
  if (!provider) {
141
143
  walletConnectorCore.logger.error('Could not find provider for getting balance');
142
144
  return undefined;
@@ -5,6 +5,7 @@ import { NetworkConfiguration } from '@dynamic-labs/sdk-api-core';
5
5
  import { WalletBookSchema } from '@dynamic-labs/wallet-book';
6
6
  import { IChainRpcProviders } from '@dynamic-labs/starknet-core';
7
7
  import { StarknetWalletKey } from './types';
8
+ import { StarknetWallet } from './wallet';
8
9
  type AccountChangeEventHandler = (address: {
9
10
  toString(): string;
10
11
  }) => Promise<void>;
@@ -13,10 +14,11 @@ type NetworkChangeEventHandler = (network: {
13
14
  }) => Promise<void>;
14
15
  export declare const ACCOUNT_CHANGED_EVENT_LISTENER = "accountsChanged";
15
16
  export declare const NETWORK_CHANGED_EVENT_LISTENER = "networkChanged";
16
- declare abstract class StarknetWalletConnector extends WalletConnectorBase {
17
+ declare abstract class StarknetWalletConnector extends WalletConnectorBase<typeof StarknetWallet> {
17
18
  STARKNET_VERSION: 'v5' | 'v4';
18
19
  name: string;
19
20
  windowKey: StarknetWalletKey;
21
+ ChainWallet: typeof StarknetWallet;
20
22
  connectedChain: Chain;
21
23
  supportedChains: Chain[];
22
24
  handleAccountChange: AccountChangeEventHandler | undefined;
@@ -106,8 +108,8 @@ declare abstract class StarknetWalletConnector extends WalletConnectorBase {
106
108
  getNetwork(): Promise<any>;
107
109
  connect(): Promise<void>;
108
110
  getAddress(): Promise<string | undefined>;
109
- getSigner(): Promise<AccountInterface | undefined>;
110
- getWalletClient(): Promise<ProviderInterface | undefined>;
111
+ getWalletAccount(): Promise<AccountInterface | undefined>;
112
+ getProvider(): Promise<ProviderInterface | undefined>;
111
113
  signMessage(messageToSign: string): Promise<string | undefined>;
112
114
  getBalance(address: string): Promise<string | undefined>;
113
115
  endSession(): Promise<void>;
@@ -7,6 +7,7 @@ import { isMobile, template, DynamicError, retryableFn } from '@dynamic-labs/uti
7
7
  import { ETH_STARKNET_ADDRESS } from './constants.js';
8
8
  import ETH_CONTRACT_ABI from './ethereumContractAbi.js';
9
9
  import { formatTypedDataMessage } from './utils/convertors.js';
10
+ import { StarknetWallet } from './wallet/StarknetWallet.js';
10
11
 
11
12
  const ACCOUNT_CHANGED_EVENT_LISTENER = 'accountsChanged';
12
13
  const NETWORK_CHANGED_EVENT_LISTENER = 'networkChanged';
@@ -15,6 +16,7 @@ class StarknetWalletConnector extends WalletConnectorBase {
15
16
  var _a;
16
17
  super(opts);
17
18
  this.STARKNET_VERSION = 'v5';
19
+ this.ChainWallet = StarknetWallet;
18
20
  this.connectedChain = 'STARK';
19
21
  this.supportedChains = ['STARK'];
20
22
  this.switchNetworkOnlyFromWallet = true;
@@ -104,13 +106,13 @@ class StarknetWalletConnector extends WalletConnectorBase {
104
106
  return Promise.resolve(wallet === null || wallet === void 0 ? void 0 : wallet.selectedAddress);
105
107
  });
106
108
  }
107
- getSigner() {
109
+ getWalletAccount() {
108
110
  return __awaiter(this, void 0, void 0, function* () {
109
111
  const wallet = this.getWallet();
110
112
  return wallet === null || wallet === void 0 ? void 0 : wallet.account;
111
113
  });
112
114
  }
113
- getWalletClient() {
115
+ getProvider() {
114
116
  return __awaiter(this, void 0, void 0, function* () {
115
117
  const wallet = yield this.getWallet();
116
118
  return wallet === null || wallet === void 0 ? void 0 : wallet.provider;
@@ -132,7 +134,7 @@ class StarknetWalletConnector extends WalletConnectorBase {
132
134
  }
133
135
  getBalance(address) {
134
136
  return __awaiter(this, void 0, void 0, function* () {
135
- const provider = yield this.getWalletClient();
137
+ const provider = yield this.getProvider();
136
138
  if (!provider) {
137
139
  logger.error('Could not find provider for getting balance');
138
140
  return undefined;
@@ -0,0 +1,43 @@
1
+ 'use client'
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ var _tslib = require('../../_virtual/_tslib.cjs');
7
+ var walletConnectorCore = require('@dynamic-labs/wallet-connector-core');
8
+ var utils = require('@dynamic-labs/utils');
9
+
10
+ class StarknetWallet extends walletConnectorCore.Wallet {
11
+ getWalletAccount() {
12
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
13
+ const account = yield this._connector.getWalletAccount();
14
+ if (!account) {
15
+ throw new Error('unable to retrieve Starknet wallet account');
16
+ }
17
+ utils.wrapMethodWithCallback(account, 'signMessage', (originalSignMessage, typedData) => _tslib.__awaiter(this, void 0, void 0, function* () {
18
+ yield this.sync();
19
+ return originalSignMessage(typedData);
20
+ }));
21
+ return account;
22
+ });
23
+ }
24
+ getProvider() {
25
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
26
+ const provider = yield this._connector.getProvider();
27
+ if (!provider) {
28
+ throw new Error('unable to retrieve Starknet provider');
29
+ }
30
+ utils.wrapMethodWithCallback(provider, 'callContract', (originalCallContract, call, blockIdentifier) => _tslib.__awaiter(this, void 0, void 0, function* () {
31
+ yield this.sync();
32
+ return originalCallContract(call, blockIdentifier);
33
+ }));
34
+ utils.wrapMethodWithCallback(provider, 'deployAccountContract', (originalDeployAccountContract, payload, details) => _tslib.__awaiter(this, void 0, void 0, function* () {
35
+ yield this.sync();
36
+ return originalDeployAccountContract(payload, details);
37
+ }));
38
+ return provider;
39
+ });
40
+ }
41
+ }
42
+
43
+ exports.StarknetWallet = StarknetWallet;
@@ -0,0 +1,7 @@
1
+ import { AccountInterface, ProviderInterface } from 'starknet';
2
+ import { Wallet } from '@dynamic-labs/wallet-connector-core';
3
+ import StarknetWalletConnector from '../starknetWalletConnector';
4
+ export declare class StarknetWallet extends Wallet<StarknetWalletConnector> {
5
+ getWalletAccount(): Promise<AccountInterface>;
6
+ getProvider(): Promise<ProviderInterface>;
7
+ }
@@ -0,0 +1,39 @@
1
+ 'use client'
2
+ import { __awaiter } from '../../_virtual/_tslib.js';
3
+ import { Wallet } from '@dynamic-labs/wallet-connector-core';
4
+ import { wrapMethodWithCallback } from '@dynamic-labs/utils';
5
+
6
+ class StarknetWallet extends Wallet {
7
+ getWalletAccount() {
8
+ return __awaiter(this, void 0, void 0, function* () {
9
+ const account = yield this._connector.getWalletAccount();
10
+ if (!account) {
11
+ throw new Error('unable to retrieve Starknet wallet account');
12
+ }
13
+ wrapMethodWithCallback(account, 'signMessage', (originalSignMessage, typedData) => __awaiter(this, void 0, void 0, function* () {
14
+ yield this.sync();
15
+ return originalSignMessage(typedData);
16
+ }));
17
+ return account;
18
+ });
19
+ }
20
+ getProvider() {
21
+ return __awaiter(this, void 0, void 0, function* () {
22
+ const provider = yield this._connector.getProvider();
23
+ if (!provider) {
24
+ throw new Error('unable to retrieve Starknet provider');
25
+ }
26
+ wrapMethodWithCallback(provider, 'callContract', (originalCallContract, call, blockIdentifier) => __awaiter(this, void 0, void 0, function* () {
27
+ yield this.sync();
28
+ return originalCallContract(call, blockIdentifier);
29
+ }));
30
+ wrapMethodWithCallback(provider, 'deployAccountContract', (originalDeployAccountContract, payload, details) => __awaiter(this, void 0, void 0, function* () {
31
+ yield this.sync();
32
+ return originalDeployAccountContract(payload, details);
33
+ }));
34
+ return provider;
35
+ });
36
+ }
37
+ }
38
+
39
+ export { StarknetWallet };
@@ -0,0 +1,2 @@
1
+ export * from './StarknetWallet';
2
+ export * from './isStarknetWallet';
@@ -0,0 +1 @@
1
+ export * from './isStarknetWallet';
@@ -0,0 +1,8 @@
1
+ 'use client'
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ const isStarknetWallet = (wallet) => wallet.chain === 'STARK';
7
+
8
+ exports.isStarknetWallet = isStarknetWallet;
@@ -0,0 +1,3 @@
1
+ import { Wallet } from '@dynamic-labs/wallet-connector-core';
2
+ import { StarknetWallet } from '../StarknetWallet';
3
+ export declare const isStarknetWallet: (wallet: Wallet) => wallet is StarknetWallet;
@@ -0,0 +1,4 @@
1
+ 'use client'
2
+ const isStarknetWallet = (wallet) => wallet.chain === 'STARK';
3
+
4
+ export { isStarknetWallet };
@@ -1,6 +1,6 @@
1
- import { WalletConnector } from '@dynamic-labs/wallet-connector-core';
1
+ import { WalletConnectorBase } from '@dynamic-labs/wallet-connector-core';
2
2
  import StarknetProvider from '../starknetWalletConnector';
3
- export declare class ArgentX extends StarknetProvider implements WalletConnector {
3
+ export declare class ArgentX extends StarknetProvider implements WalletConnectorBase {
4
4
  overrideKey: string;
5
5
  constructor(opts: any);
6
6
  getConnectedAccounts(): Promise<string[]>;
@@ -1,8 +1,8 @@
1
1
  import { StarknetWindowObject } from 'get-starknet-core';
2
2
  import { constants } from 'starknet';
3
- import { WalletConnector } from '@dynamic-labs/wallet-connector-core';
3
+ import { WalletConnectorBase } from '@dynamic-labs/wallet-connector-core';
4
4
  import StarknetProvider from '../starknetWalletConnector';
5
- declare abstract class ArgentXBase extends StarknetProvider implements WalletConnector {
5
+ declare abstract class ArgentXBase extends StarknetProvider implements WalletConnectorBase {
6
6
  canConnectViaCustodialService: boolean;
7
7
  wallet: StarknetWindowObject | undefined;
8
8
  abstract connect(): Promise<void>;
@@ -1,6 +1,6 @@
1
- import type { WalletConnector } from '@dynamic-labs/wallet-connector-core';
1
+ import type { WalletConnectorBase } from '@dynamic-labs/wallet-connector-core';
2
2
  import StarknetProvider from '../starknetWalletConnector';
3
- export declare class Bitget extends StarknetProvider implements WalletConnector {
3
+ export declare class Bitget extends StarknetProvider implements WalletConnectorBase {
4
4
  overrideKey: string;
5
5
  constructor(opts: any);
6
6
  isProviderConnected(): boolean;
@@ -1,6 +1,6 @@
1
- import type { WalletConnector } from '@dynamic-labs/wallet-connector-core';
1
+ import type { WalletConnectorBase } from '@dynamic-labs/wallet-connector-core';
2
2
  import StarknetProvider from '../starknetWalletConnector';
3
- export declare class Braavos extends StarknetProvider implements WalletConnector {
3
+ export declare class Braavos extends StarknetProvider implements WalletConnectorBase {
4
4
  overrideKey: string;
5
5
  constructor(opts: any);
6
6
  getAddress(): Promise<string | undefined>;
@@ -1,6 +1,6 @@
1
- import { type WalletConnector } from '@dynamic-labs/wallet-connector-core';
1
+ import { WalletConnectorBase } from '@dynamic-labs/wallet-connector-core';
2
2
  import StarknetProvider from '../starknetWalletConnector';
3
- export declare class MetaMask extends StarknetProvider implements WalletConnector {
3
+ export declare class MetaMask extends StarknetProvider implements WalletConnectorBase {
4
4
  overrideKey: string;
5
5
  private currentChainId;
6
6
  private intervalId;
@@ -1,6 +1,6 @@
1
- import type { WalletConnector } from '@dynamic-labs/wallet-connector-core';
1
+ import type { WalletConnectorBase } from '@dynamic-labs/wallet-connector-core';
2
2
  import StarknetProvider from '../starknetWalletConnector';
3
- export declare class Okx extends StarknetProvider implements WalletConnector {
3
+ export declare class Okx extends StarknetProvider implements WalletConnectorBase {
4
4
  overrideKey: string;
5
5
  constructor(opts: any);
6
6
  }