@dynamic-labs/starknet 0.18.0-RC.8 → 0.18.0-RC.9

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,25 @@
1
1
 
2
+ ## [0.18.0-RC.9](https://github.com/dynamic-labs/DynamicAuth/compare/v0.18.0-RC.8...v0.18.0-RC.9) (2023-07-04)
3
+
4
+
5
+ ### Features
6
+
7
+ * add Network Not Supported prompt to connect-only & show prompt before sign in connect-sign mode ([#2474](https://github.com/dynamic-labs/DynamicAuth/issues/2474)) ([8d5bfa9](https://github.com/dynamic-labs/DynamicAuth/commit/8d5bfa97ca4da50e06ce258a38a63e7407a795f6))
8
+ * **DYN-2602:** add ability to unlink connected wallet ([#2494](https://github.com/dynamic-labs/DynamicAuth/issues/2494)) ([389861b](https://github.com/dynamic-labs/DynamicAuth/commit/389861bc0281baec379b1593e529cef3467f3326))
9
+ * **DYN-2604:** add chainId property to walletsByChain object ([#2405](https://github.com/dynamic-labs/DynamicAuth/issues/2405)) ([d9b42f7](https://github.com/dynamic-labs/DynamicAuth/commit/d9b42f7b1d53dac1ed0228ecb5e56a44c6abd8d2))
10
+ * **DynamicAuthLayout:** show connected wallet progress ([#2567](https://github.com/dynamic-labs/DynamicAuth/issues/2567)) ([a20ff6f](https://github.com/dynamic-labs/DynamicAuth/commit/a20ff6f32b360ccc699d2a271c7a96751ae87d29))
11
+ * **DynamicBridgeFlow:** add bridge flow ([#2543](https://github.com/dynamic-labs/DynamicAuth/issues/2543)) ([79c4c87](https://github.com/dynamic-labs/DynamicAuth/commit/79c4c870d47a0c853c292a8d913bd9be9e209a15))
12
+
13
+
14
+ ### Bug Fixes
15
+
16
+ * don't force required chain to eth in case is not enabled ([#2537](https://github.com/dynamic-labs/DynamicAuth/issues/2537)) ([b01d6c9](https://github.com/dynamic-labs/DynamicAuth/commit/b01d6c9e91e9971e82739c5a2c900de4768f977c))
17
+ * log out if there's any session sync issue ([#2545](https://github.com/dynamic-labs/DynamicAuth/issues/2545)) ([29972fa](https://github.com/dynamic-labs/DynamicAuth/commit/29972fad1067f5550a61f6e2cd9adcaf811fd268))
18
+ * persist chain to WalletConnect session when changed in wallet ([#2556](https://github.com/dynamic-labs/DynamicAuth/issues/2556)) ([fc9ec35](https://github.com/dynamic-labs/DynamicAuth/commit/fc9ec3501de1e3235adee4df95b296dc22cce23e))
19
+ * WC2 sign-message on non-selected chain ([#2544](https://github.com/dynamic-labs/DynamicAuth/issues/2544)) ([48a4384](https://github.com/dynamic-labs/DynamicAuth/commit/48a4384f77c29775e0c28ed335956cfbd6f89ca3))
20
+ * **wcv2:** add eth_signTypedData_v4 to optional methods ([#2527](https://github.com/dynamic-labs/DynamicAuth/issues/2527)) ([b99474b](https://github.com/dynamic-labs/DynamicAuth/commit/b99474b81b083134762be0fe9554a6f049b3edda))
21
+ * **wcv2:** allow getWeb3Provider to wait to provider init ([#2523](https://github.com/dynamic-labs/DynamicAuth/issues/2523)) ([d9c7fee](https://github.com/dynamic-labs/DynamicAuth/commit/d9c7fee10d2a6c766043515e19829fd7e3d5b2ef))
22
+
2
23
  ## [0.18.0-RC.8](https://github.com/dynamic-labs/DynamicAuth/compare/v0.18.0-RC.7...v0.18.0-RC.8) (2023-06-29)
3
24
 
4
25
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dynamic-labs/starknet",
3
- "version": "0.18.0-RC.8",
3
+ "version": "0.18.0-RC.9",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/dynamic-labs/DynamicAuth.git",
@@ -26,10 +26,11 @@
26
26
  "./package.json": "./package.json"
27
27
  },
28
28
  "dependencies": {
29
- "starknet": "3.19.0",
30
- "get-starknet": "1.5.0",
31
- "@dynamic-labs/utils": "0.18.0-RC.8",
32
- "@dynamic-labs/wallet-connector-core": "0.18.0-RC.8"
29
+ "starknet": "5.14.1",
30
+ "get-starknet-core": "3.0.1",
31
+ "text-encoding": "0.7.0",
32
+ "@dynamic-labs/utils": "0.18.0-RC.9",
33
+ "@dynamic-labs/wallet-connector-core": "0.18.0-RC.9"
33
34
  },
34
35
  "peerDependencies": {}
35
36
  }
@@ -1,3 +1,3 @@
1
- import { TypedData } from 'starknet/dist/utils/typedData';
1
+ import { TypedData } from 'starknet';
2
2
  export declare const ETH_STARKNET_ADDRESS = "0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7";
3
3
  export declare const DEFAULT_STARKNET_TYPED_DATA_DOMAIN: Partial<TypedData>;
@@ -1,14 +1,12 @@
1
1
  'use strict';
2
2
 
3
3
  var _tslib = require('../_virtual/_tslib.cjs');
4
- var getStarknet = require('get-starknet');
4
+ var getStarknetCore = require('get-starknet-core');
5
5
  var starknet = require('starknet');
6
- var constants = require('starknet/constants');
7
- var uint256 = require('starknet/dist/utils/uint256');
8
6
  var walletConnectorCore = require('@dynamic-labs/wallet-connector-core');
9
7
  var utils = require('@dynamic-labs/utils');
10
8
  var convertors = require('./utils/convertors.cjs');
11
- var constants$1 = require('./constants.cjs');
9
+ var constants = require('./constants.cjs');
12
10
  var ethereumContractAbi = require('./ethereumContractAbi.cjs');
13
11
 
14
12
  const ACCOUNT_CHANGED_EVENT_LISTENER = 'accountsChanged';
@@ -18,6 +16,7 @@ class StarknetWalletConnector extends walletConnectorCore.WalletConnectorBase {
18
16
  super();
19
17
  this.connectedChain = 'STARK';
20
18
  this.supportedChains = ['STARK'];
19
+ this.switchNetworkOnlyFromWallet = true;
21
20
  this.name = name;
22
21
  this.windowKey = windowKey;
23
22
  }
@@ -26,7 +25,7 @@ class StarknetWalletConnector extends walletConnectorCore.WalletConnectorBase {
26
25
  const wallet = yield this.getWallet();
27
26
  try {
28
27
  if (wallet && !wallet.isConnected) {
29
- yield wallet.enable({ showModal: false });
28
+ yield wallet.enable();
30
29
  }
31
30
  }
32
31
  catch (err) {
@@ -50,7 +49,7 @@ class StarknetWalletConnector extends walletConnectorCore.WalletConnectorBase {
50
49
  getWallet() {
51
50
  return _tslib.__awaiter(this, void 0, void 0, function* () {
52
51
  if (!this.wallet) {
53
- const providers = yield getStarknet.getInstalledWallets();
52
+ const providers = yield getStarknetCore.getStarknet().getAvailableWallets();
54
53
  this.wallet = providers.find((provider) => provider.name === this.name);
55
54
  }
56
55
  return this.wallet;
@@ -70,10 +69,16 @@ class StarknetWalletConnector extends walletConnectorCore.WalletConnectorBase {
70
69
  walletConnectorCore.logger.error('Could not fetch wallet address for signing message');
71
70
  return undefined;
72
71
  }
73
- const { account } = wallet;
74
- const chainId = account.chainId === constants.StarknetChainId.TESTNET ? 'SN_GOERLI' : 'SN_MAIN';
75
- const encodedMessage = convertors.formatTypedDataMessage(messageToSign, chainId);
76
- const signature = yield (account === null || account === void 0 ? void 0 : account.signMessage(encodedMessage));
72
+ const { provider: { chainId }, } = wallet;
73
+ const starknetChains = Object.entries(starknet.constants.StarknetChainId);
74
+ const starknetChain = starknetChains.find(([, starknetChainId]) => starknetChainId === chainId);
75
+ if (!starknetChain) {
76
+ walletConnectorCore.logger.error('Could not find chain name');
77
+ return;
78
+ }
79
+ const [starknetChainName] = starknetChain;
80
+ const encodedMessage = convertors.formatTypedDataMessage(messageToSign, starknetChainName);
81
+ const signature = yield wallet.account.signMessage(encodedMessage);
77
82
  return signature === null || signature === void 0 ? void 0 : signature.join(',');
78
83
  });
79
84
  }
@@ -85,10 +90,10 @@ class StarknetWalletConnector extends walletConnectorCore.WalletConnectorBase {
85
90
  walletConnectorCore.logger.error('Could not fetch wallet address for getting balance');
86
91
  return undefined;
87
92
  }
88
- const contract = new starknet.Contract(ethereumContractAbi, constants$1.ETH_STARKNET_ADDRESS, provider);
93
+ const contract = new starknet.Contract(ethereumContractAbi, constants.ETH_STARKNET_ADDRESS, provider);
89
94
  try {
90
95
  const { balance } = yield contract.balanceOf(walletAddress);
91
- const gweiBalance = parseInt(uint256.uint256ToBN(balance).toString(10));
96
+ const gweiBalance = parseInt(starknet.uint256.uint256ToBN(balance).toString(10));
92
97
  /**
93
98
  * Dividing by 1e18 as the returned balance is a Gwei number.
94
99
  * Read more here: https://www.investopedia.com/terms/g/gwei-ethereum.asp#toc-what-is-gwei
@@ -102,9 +107,7 @@ class StarknetWalletConnector extends walletConnectorCore.WalletConnectorBase {
102
107
  }
103
108
  endSession() {
104
109
  return _tslib.__awaiter(this, void 0, void 0, function* () {
105
- getStarknet.disconnect({
106
- clearLastWallet: true,
107
- });
110
+ getStarknetCore.getStarknet().disconnect({ clearLastWallet: true });
108
111
  });
109
112
  }
110
113
  getStarknetWindowObject() {
@@ -1,5 +1,5 @@
1
- import { IStarknetWindowObject } from 'get-starknet';
2
- import { AccountInterface, ProviderInterface } from 'starknet';
1
+ import { StarknetWindowObject } from 'get-starknet-core';
2
+ import { ProviderInterface, AccountInterface } from 'starknet';
3
3
  import { Chain, WalletConnectorBase, WalletEventListeners } from '@dynamic-labs/wallet-connector-core';
4
4
  import { StarknetWalletKey } from './types';
5
5
  type AccountChangeEventHandler = (address: {
@@ -13,19 +13,20 @@ declare abstract class StarknetWalletConnector extends WalletConnectorBase {
13
13
  windowKey: StarknetWalletKey;
14
14
  connectedChain: Chain;
15
15
  supportedChains: Chain[];
16
- wallet: IStarknetWindowObject | undefined;
16
+ wallet: StarknetWindowObject | undefined;
17
17
  handleAccountChange: AccountChangeEventHandler | undefined;
18
18
  handleNetworkChange: NetworkChangeEventHandler | undefined;
19
+ switchNetworkOnlyFromWallet: boolean;
19
20
  constructor(name: string, windowKey: StarknetWalletKey);
20
21
  connect(): Promise<void>;
21
22
  fetchPublicAddress(): Promise<string | undefined>;
22
23
  getSigner(): Promise<AccountInterface | undefined>;
23
- getWallet(): Promise<IStarknetWindowObject | undefined>;
24
+ getWallet(): Promise<StarknetWindowObject | undefined>;
24
25
  getWeb3Provider(): Promise<ProviderInterface | undefined>;
25
26
  signMessage(messageToSign: string): Promise<string | undefined>;
26
27
  getBalance(): Promise<string | undefined>;
27
28
  endSession(): Promise<void>;
28
- getStarknetWindowObject(): IStarknetWindowObject | undefined;
29
+ getStarknetWindowObject(): StarknetWindowObject | undefined;
29
30
  isInstalledOnBrowser(): boolean;
30
31
  getConnectedAccounts(): Promise<string[]>;
31
32
  setupEventListeners(listeners: WalletEventListeners): void;
@@ -1,8 +1,6 @@
1
1
  import { __awaiter } from '../_virtual/_tslib.js';
2
- import { getInstalledWallets, disconnect } from 'get-starknet';
3
- import { Contract } from 'starknet';
4
- import { StarknetChainId } from 'starknet/constants.js';
5
- import { uint256ToBN } from 'starknet/dist/utils/uint256.js';
2
+ import { getStarknet } from 'get-starknet-core';
3
+ import { constants, Contract, uint256 } from 'starknet';
6
4
  import { WalletConnectorBase, logger } from '@dynamic-labs/wallet-connector-core';
7
5
  import { DynamicError } from '@dynamic-labs/utils';
8
6
  import { formatTypedDataMessage } from './utils/convertors.js';
@@ -16,6 +14,7 @@ class StarknetWalletConnector extends WalletConnectorBase {
16
14
  super();
17
15
  this.connectedChain = 'STARK';
18
16
  this.supportedChains = ['STARK'];
17
+ this.switchNetworkOnlyFromWallet = true;
19
18
  this.name = name;
20
19
  this.windowKey = windowKey;
21
20
  }
@@ -24,7 +23,7 @@ class StarknetWalletConnector extends WalletConnectorBase {
24
23
  const wallet = yield this.getWallet();
25
24
  try {
26
25
  if (wallet && !wallet.isConnected) {
27
- yield wallet.enable({ showModal: false });
26
+ yield wallet.enable();
28
27
  }
29
28
  }
30
29
  catch (err) {
@@ -48,7 +47,7 @@ class StarknetWalletConnector extends WalletConnectorBase {
48
47
  getWallet() {
49
48
  return __awaiter(this, void 0, void 0, function* () {
50
49
  if (!this.wallet) {
51
- const providers = yield getInstalledWallets();
50
+ const providers = yield getStarknet().getAvailableWallets();
52
51
  this.wallet = providers.find((provider) => provider.name === this.name);
53
52
  }
54
53
  return this.wallet;
@@ -68,10 +67,16 @@ class StarknetWalletConnector extends WalletConnectorBase {
68
67
  logger.error('Could not fetch wallet address for signing message');
69
68
  return undefined;
70
69
  }
71
- const { account } = wallet;
72
- const chainId = account.chainId === StarknetChainId.TESTNET ? 'SN_GOERLI' : 'SN_MAIN';
73
- const encodedMessage = formatTypedDataMessage(messageToSign, chainId);
74
- const signature = yield (account === null || account === void 0 ? void 0 : account.signMessage(encodedMessage));
70
+ const { provider: { chainId }, } = wallet;
71
+ const starknetChains = Object.entries(constants.StarknetChainId);
72
+ const starknetChain = starknetChains.find(([, starknetChainId]) => starknetChainId === chainId);
73
+ if (!starknetChain) {
74
+ logger.error('Could not find chain name');
75
+ return;
76
+ }
77
+ const [starknetChainName] = starknetChain;
78
+ const encodedMessage = formatTypedDataMessage(messageToSign, starknetChainName);
79
+ const signature = yield wallet.account.signMessage(encodedMessage);
75
80
  return signature === null || signature === void 0 ? void 0 : signature.join(',');
76
81
  });
77
82
  }
@@ -86,7 +91,7 @@ class StarknetWalletConnector extends WalletConnectorBase {
86
91
  const contract = new Contract(ETH_CONTRACT_ABI, ETH_STARKNET_ADDRESS, provider);
87
92
  try {
88
93
  const { balance } = yield contract.balanceOf(walletAddress);
89
- const gweiBalance = parseInt(uint256ToBN(balance).toString(10));
94
+ const gweiBalance = parseInt(uint256.uint256ToBN(balance).toString(10));
90
95
  /**
91
96
  * Dividing by 1e18 as the returned balance is a Gwei number.
92
97
  * Read more here: https://www.investopedia.com/terms/g/gwei-ethereum.asp#toc-what-is-gwei
@@ -100,9 +105,7 @@ class StarknetWalletConnector extends WalletConnectorBase {
100
105
  }
101
106
  endSession() {
102
107
  return __awaiter(this, void 0, void 0, function* () {
103
- disconnect({
104
- clearLastWallet: true,
105
- });
108
+ getStarknet().disconnect({ clearLastWallet: true });
106
109
  });
107
110
  }
108
111
  getStarknetWindowObject() {
package/src/types.d.ts CHANGED
@@ -1,8 +1,8 @@
1
- import type { IStarknetWindowObject } from 'get-starknet';
1
+ import type { StarknetWindowObject } from 'get-starknet-core';
2
2
  export type StarknetWalletKey = 'braavos' | 'argentX';
3
3
  export type StarknetWindowKey = `starknet_${StarknetWalletKey}` | 'starknet';
4
4
  type StarknetWindow = {
5
- [key in StarknetWindowKey]: IStarknetWindowObject;
5
+ [key in StarknetWindowKey]: StarknetWindowObject;
6
6
  };
7
7
  declare global {
8
8
  interface Window extends StarknetWindow {
@@ -2,6 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
+ var starknet = require('starknet');
5
6
  var constants = require('../constants.cjs');
6
7
 
7
8
  const defaultTypedData = Object.assign(Object.assign({}, constants.DEFAULT_STARKNET_TYPED_DATA_DOMAIN), { primaryType: 'Message', types: {
@@ -26,7 +27,7 @@ const defaultTypedData = Object.assign(Object.assign({}, constants.DEFAULT_STARK
26
27
  },
27
28
  ],
28
29
  } });
29
- const formatTypedDataMessage = (inputMessage, chainId = 'SN_MAIN') => {
30
+ const formatTypedDataMessage = (inputMessage, chainId = starknet.constants.NetworkName.SN_MAIN) => {
30
31
  const message = {
31
32
  message: inputMessage.substring(0, 31),
32
33
  };
@@ -1,2 +1,2 @@
1
- import { TypedData } from 'starknet/dist/utils/typedData';
2
- export declare const formatTypedDataMessage: (inputMessage: string, chainId?: 'SN_MAIN' | 'SN_GOERLI') => TypedData;
1
+ import { TypedData, constants } from 'starknet';
2
+ export declare const formatTypedDataMessage: (inputMessage: string, chainId?: constants.NetworkName) => TypedData;
@@ -1,3 +1,4 @@
1
+ import { constants } from 'starknet';
1
2
  import { DEFAULT_STARKNET_TYPED_DATA_DOMAIN } from '../constants.js';
2
3
 
3
4
  const defaultTypedData = Object.assign(Object.assign({}, DEFAULT_STARKNET_TYPED_DATA_DOMAIN), { primaryType: 'Message', types: {
@@ -22,7 +23,7 @@ const defaultTypedData = Object.assign(Object.assign({}, DEFAULT_STARKNET_TYPED_
22
23
  },
23
24
  ],
24
25
  } });
25
- const formatTypedDataMessage = (inputMessage, chainId = 'SN_MAIN') => {
26
+ const formatTypedDataMessage = (inputMessage, chainId = constants.NetworkName.SN_MAIN) => {
26
27
  const message = {
27
28
  message: inputMessage.substring(0, 31),
28
29
  };