@dynamic-labs/starknet 0.18.0 → 0.18.100-viem.1
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 +0 -24
- package/package.json +3 -3
- package/src/constants.cjs +6 -6
- package/src/constants.d.ts +3 -3
- package/src/constants.js +6 -6
- package/src/index.cjs +1 -1
- package/src/index.d.ts +5 -5
- package/src/index.js +1 -1
- package/src/starknetWalletConnector.cjs +197 -197
- package/src/starknetWalletConnector.d.ts +44 -44
- package/src/starknetWalletConnector.js +197 -197
- package/src/types.d.ts +11 -11
- package/src/utils/convertors.cjs +27 -27
- package/src/utils/convertors.d.ts +2 -2
- package/src/utils/convertors.js +27 -27
- package/src/wallets/argentx.cjs +12 -12
- package/src/wallets/argentx.d.ts +7 -7
- package/src/wallets/argentx.js +12 -12
- package/src/wallets/braavos.cjs +24 -24
- package/src/wallets/braavos.d.ts +7 -7
- package/src/wallets/braavos.js +24 -24
package/CHANGELOG.md
CHANGED
|
@@ -1,28 +1,4 @@
|
|
|
1
1
|
|
|
2
|
-
## [0.18.0](https://github.com/dynamic-labs/DynamicAuth/compare/v0.18.0-beta.32...v0.18.0) (2023-08-13)
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
### Features
|
|
6
|
-
|
|
7
|
-
* add in OKX wallet integration ([#2871](https://github.com/dynamic-labs/DynamicAuth/issues/2871)) ([#2927](https://github.com/dynamic-labs/DynamicAuth/issues/2927)) ([f6d06bc](https://github.com/dynamic-labs/DynamicAuth/commit/f6d06bc75ee0e53c9d972f5fab1f4de11818bd82))
|
|
8
|
-
* update wallet locked view ([#2923](https://github.com/dynamic-labs/DynamicAuth/issues/2923)) ([3cc03ee](https://github.com/dynamic-labs/DynamicAuth/commit/3cc03ee5913434d99386fc89d4d26d5d3fb3ca19))
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
### Bug Fixes
|
|
12
|
-
|
|
13
|
-
* account already exist message not displaying automatically ([#2896](https://github.com/dynamic-labs/DynamicAuth/issues/2896)) ([#2906](https://github.com/dynamic-labs/DynamicAuth/issues/2906)) ([5e7478a](https://github.com/dynamic-labs/DynamicAuth/commit/5e7478acd864451a7cf7e8e62845cca7ef5439c6))
|
|
14
|
-
* don't let user update email if it's tied to an embedded wallet ([#2903](https://github.com/dynamic-labs/DynamicAuth/issues/2903)) ([33c52b5](https://github.com/dynamic-labs/DynamicAuth/commit/33c52b50a880a34b4161a700b8b1805c9b01527d)), closes [#2883](https://github.com/dynamic-labs/DynamicAuth/issues/2883)
|
|
15
|
-
* **GVTY-195:** issues with mergeUserAccountsView ([#2945](https://github.com/dynamic-labs/DynamicAuth/issues/2945)) ([2c6265e](https://github.com/dynamic-labs/DynamicAuth/commit/2c6265e3e709edb9ff1af6e6c139b85418e46d76))
|
|
16
|
-
* **Magic:** improve gas estimate for transactions ([#2947](https://github.com/dynamic-labs/DynamicAuth/issues/2947)) ([ad35a72](https://github.com/dynamic-labs/DynamicAuth/commit/ad35a722df6abd54b98ea491661ff4ec3e602621))
|
|
17
|
-
* missing enable isVerificationInProgress ([#2926](https://github.com/dynamic-labs/DynamicAuth/issues/2926)) ([98f54fd](https://github.com/dynamic-labs/DynamicAuth/commit/98f54fd1345713dfaf0ef837502dfaca3709d633))
|
|
18
|
-
* **networks:** merge custom network after API networks ([#2949](https://github.com/dynamic-labs/DynamicAuth/issues/2949)) ([ab22303](https://github.com/dynamic-labs/DynamicAuth/commit/ab22303294123c2a914a65f0d2c15481740647bb))
|
|
19
|
-
* onBeforeConnectSuccessConfirmation is being called multiple time ([#2965](https://github.com/dynamic-labs/DynamicAuth/issues/2965)) ([a276968](https://github.com/dynamic-labs/DynamicAuth/commit/a2769689bc82350dfb8123e1fe8a4e92a60b262c))
|
|
20
|
-
* **QNTM-249:** broken email update when user is authenticated ([#2932](https://github.com/dynamic-labs/DynamicAuth/issues/2932)) ([db33ba1](https://github.com/dynamic-labs/DynamicAuth/commit/db33ba14c317469958ce314a3822b706e20b07d0))
|
|
21
|
-
* reformat social sign-in text ([#2956](https://github.com/dynamic-labs/DynamicAuth/issues/2956)) ([#2961](https://github.com/dynamic-labs/DynamicAuth/issues/2961)) ([f8d2222](https://github.com/dynamic-labs/DynamicAuth/commit/f8d2222d102f5335f95ec917cbb63bf9b55eff0b))
|
|
22
|
-
* **transaction:** improve gas estimate in transaction confirmation ([#2938](https://github.com/dynamic-labs/DynamicAuth/issues/2938)) ([02d0f46](https://github.com/dynamic-labs/DynamicAuth/commit/02d0f46127e94e83b4decbaaf6a45dbae135c89d))
|
|
23
|
-
* useSyncPrimaryWallet overrides views with "wallet-locked-view" ([#2921](https://github.com/dynamic-labs/DynamicAuth/issues/2921)) ([aa8c369](https://github.com/dynamic-labs/DynamicAuth/commit/aa8c369d2a713eb57ecc99b16a6b62d465789370))
|
|
24
|
-
* **wallet-list:** update key to distinguish wallet and wallet group ([#2922](https://github.com/dynamic-labs/DynamicAuth/issues/2922)) ([f40c07c](https://github.com/dynamic-labs/DynamicAuth/commit/f40c07c65915775e99a1dbb8d07bb23824a92915)), closes [#2909](https://github.com/dynamic-labs/DynamicAuth/issues/2909)
|
|
25
|
-
|
|
26
2
|
## [0.18.0-beta.32](https://github.com/dynamic-labs/DynamicAuth/compare/v0.18.0-beta.31...v0.18.0-beta.32) (2023-08-09)
|
|
27
3
|
|
|
28
4
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dynamic-labs/starknet",
|
|
3
|
-
"version": "0.18.
|
|
3
|
+
"version": "0.18.100-viem.1",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "https://github.com/dynamic-labs/DynamicAuth.git",
|
|
@@ -30,8 +30,8 @@
|
|
|
30
30
|
"get-starknet-core": "3.0.1",
|
|
31
31
|
"text-encoding": "0.7.0",
|
|
32
32
|
"@dynamic-labs/sdk-api": "0.0.256",
|
|
33
|
-
"@dynamic-labs/utils": "0.18.
|
|
34
|
-
"@dynamic-labs/wallet-connector-core": "0.18.
|
|
33
|
+
"@dynamic-labs/utils": "0.18.100-viem.1",
|
|
34
|
+
"@dynamic-labs/wallet-connector-core": "0.18.100-viem.1"
|
|
35
35
|
},
|
|
36
36
|
"peerDependencies": {}
|
|
37
37
|
}
|
package/src/constants.cjs
CHANGED
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
const ETH_STARKNET_ADDRESS = '0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7';
|
|
6
|
-
const DEFAULT_STARKNET_TYPED_DATA_DOMAIN = {
|
|
7
|
-
domain: {
|
|
8
|
-
name: 'Dynamic Sample dApp',
|
|
9
|
-
version: '0.0.1',
|
|
10
|
-
},
|
|
5
|
+
const ETH_STARKNET_ADDRESS = '0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7';
|
|
6
|
+
const DEFAULT_STARKNET_TYPED_DATA_DOMAIN = {
|
|
7
|
+
domain: {
|
|
8
|
+
name: 'Dynamic Sample dApp',
|
|
9
|
+
version: '0.0.1',
|
|
10
|
+
},
|
|
11
11
|
};
|
|
12
12
|
|
|
13
13
|
exports.DEFAULT_STARKNET_TYPED_DATA_DOMAIN = DEFAULT_STARKNET_TYPED_DATA_DOMAIN;
|
package/src/constants.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { TypedData } from 'starknet';
|
|
2
|
-
export declare const ETH_STARKNET_ADDRESS = "0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7";
|
|
3
|
-
export declare const DEFAULT_STARKNET_TYPED_DATA_DOMAIN: Partial<TypedData>;
|
|
1
|
+
import { TypedData } from 'starknet';
|
|
2
|
+
export declare const ETH_STARKNET_ADDRESS = "0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7";
|
|
3
|
+
export declare const DEFAULT_STARKNET_TYPED_DATA_DOMAIN: Partial<TypedData>;
|
package/src/constants.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
const ETH_STARKNET_ADDRESS = '0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7';
|
|
2
|
-
const DEFAULT_STARKNET_TYPED_DATA_DOMAIN = {
|
|
3
|
-
domain: {
|
|
4
|
-
name: 'Dynamic Sample dApp',
|
|
5
|
-
version: '0.0.1',
|
|
6
|
-
},
|
|
1
|
+
const ETH_STARKNET_ADDRESS = '0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7';
|
|
2
|
+
const DEFAULT_STARKNET_TYPED_DATA_DOMAIN = {
|
|
3
|
+
domain: {
|
|
4
|
+
name: 'Dynamic Sample dApp',
|
|
5
|
+
version: '0.0.1',
|
|
6
|
+
},
|
|
7
7
|
};
|
|
8
8
|
|
|
9
9
|
export { DEFAULT_STARKNET_TYPED_DATA_DOMAIN, ETH_STARKNET_ADDRESS };
|
package/src/index.cjs
CHANGED
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
var argentx = require('./wallets/argentx.cjs');
|
|
6
6
|
var braavos = require('./wallets/braavos.cjs');
|
|
7
7
|
|
|
8
|
-
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
8
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
9
9
|
const StarknetWalletConnectors = (props) => [argentx.ArgentX, braavos.Braavos];
|
|
10
10
|
|
|
11
11
|
exports.StarknetWalletConnectors = StarknetWalletConnectors;
|
package/src/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ArgentX } from './wallets/argentx';
|
|
2
|
-
export declare const StarknetWalletConnectors: (props: unknown) => (typeof ArgentX)[];
|
|
3
|
-
export type { StarknetWalletConnectorType } from './starknetWalletConnector';
|
|
4
|
-
export type { ArgentXWalletConnectorType } from './wallets/argentx';
|
|
5
|
-
export type { BraavosWalletConnectorType } from './wallets/braavos';
|
|
1
|
+
import { ArgentX } from './wallets/argentx';
|
|
2
|
+
export declare const StarknetWalletConnectors: (props: unknown) => (typeof ArgentX)[];
|
|
3
|
+
export type { StarknetWalletConnectorType } from './starknetWalletConnector';
|
|
4
|
+
export type { ArgentXWalletConnectorType } from './wallets/argentx';
|
|
5
|
+
export type { BraavosWalletConnectorType } from './wallets/braavos';
|
package/src/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ArgentX } from './wallets/argentx.js';
|
|
2
2
|
import { Braavos } from './wallets/braavos.js';
|
|
3
3
|
|
|
4
|
-
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
4
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
5
5
|
const StarknetWalletConnectors = (props) => [ArgentX, Braavos];
|
|
6
6
|
|
|
7
7
|
export { StarknetWalletConnectors };
|
|
@@ -9,203 +9,203 @@ var constants = require('./constants.cjs');
|
|
|
9
9
|
var ethereumContractAbi = require('./ethereumContractAbi.cjs');
|
|
10
10
|
var convertors = require('./utils/convertors.cjs');
|
|
11
11
|
|
|
12
|
-
const ACCOUNT_CHANGED_EVENT_LISTENER = 'accountsChanged';
|
|
13
|
-
const NETWORK_CHANGED_EVENT_LISTENER = 'networkChanged';
|
|
14
|
-
class StarknetWalletConnector extends walletConnectorCore.WalletConnectorBase {
|
|
15
|
-
constructor(name, windowKey, starknetNetworks) {
|
|
16
|
-
super();
|
|
17
|
-
this.connectedChain = 'STARK';
|
|
18
|
-
this.supportedChains = ['STARK'];
|
|
19
|
-
this.switchNetworkOnlyFromWallet = true;
|
|
20
|
-
this.name = name;
|
|
21
|
-
this.windowKey = windowKey;
|
|
22
|
-
this.starknetNetworks = starknetNetworks;
|
|
23
|
-
}
|
|
24
|
-
getRpcProvider() {
|
|
25
|
-
var _a, _b;
|
|
26
|
-
const nodeUrl = (_b = (_a = this.starknetNetworks) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.rpcUrls[0];
|
|
27
|
-
if (!nodeUrl) {
|
|
28
|
-
throw new utils.DynamicError('RPC URL has not been found.');
|
|
29
|
-
}
|
|
30
|
-
return Promise.resolve(new starknet.RpcProvider({ nodeUrl }));
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* returns stakrnet wallet network id
|
|
34
|
-
*/
|
|
35
|
-
getNetwork() {
|
|
36
|
-
var _a;
|
|
37
|
-
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
38
|
-
const wallet = yield this.getWallet();
|
|
39
|
-
if (!wallet) {
|
|
40
|
-
return Promise.resolve(undefined);
|
|
41
|
-
}
|
|
42
|
-
if (!wallet.isConnected) {
|
|
43
|
-
yield wallet.enable();
|
|
44
|
-
}
|
|
45
|
-
return Promise.resolve((_a = wallet.provider) === null || _a === void 0 ? void 0 : _a.chainId);
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
connect() {
|
|
49
|
-
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
50
|
-
const wallet = yield this.getWallet();
|
|
51
|
-
try {
|
|
52
|
-
if (wallet && !wallet.isConnected) {
|
|
53
|
-
yield wallet.enable();
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
catch (err) {
|
|
57
|
-
walletConnectorCore.logger.error(err);
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
fetchPublicAddress() {
|
|
62
|
-
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
63
|
-
const wallet = yield this.getWallet();
|
|
64
|
-
/**
|
|
65
|
-
* Fetches public address. Uses `isPreauthorized` as a temporary solution to ensure
|
|
66
|
-
* the wallets store's data is read. Without it, an empty string may be returned due
|
|
67
|
-
* to a possible reliance on its side-effects for data refreshing.
|
|
68
|
-
*/
|
|
69
|
-
yield (wallet === null || wallet === void 0 ? void 0 : wallet.isPreauthorized());
|
|
70
|
-
yield this.connect();
|
|
71
|
-
return Promise.resolve(wallet === null || wallet === void 0 ? void 0 : wallet.selectedAddress);
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
getSigner() {
|
|
75
|
-
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
76
|
-
const wallet = yield this.getWallet();
|
|
77
|
-
return wallet === null || wallet === void 0 ? void 0 : wallet.account;
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
getWallet() {
|
|
81
|
-
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
82
|
-
if (!this.wallet) {
|
|
83
|
-
const providers = yield getStarknetCore.getStarknet().getAvailableWallets();
|
|
84
|
-
this.wallet = providers.find((provider) => provider.name === this.name);
|
|
85
|
-
}
|
|
86
|
-
return this.wallet;
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
getWeb3Provider() {
|
|
90
|
-
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
91
|
-
const wallet = yield this.getWallet();
|
|
92
|
-
return wallet === null || wallet === void 0 ? void 0 : wallet.provider;
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
signMessage(messageToSign) {
|
|
96
|
-
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
97
|
-
const wallet = yield this.getWallet();
|
|
98
|
-
const walletAddress = yield this.fetchPublicAddress();
|
|
99
|
-
if (!walletAddress || !wallet) {
|
|
100
|
-
walletConnectorCore.logger.error('Could not fetch wallet address for signing message');
|
|
101
|
-
return undefined;
|
|
102
|
-
}
|
|
103
|
-
const { provider: { chainId }, } = wallet;
|
|
104
|
-
const encodedMessage = convertors.formatTypedDataMessage(messageToSign, chainId);
|
|
105
|
-
const signature = yield wallet.account.signMessage(encodedMessage);
|
|
106
|
-
return signature === null || signature === void 0 ? void 0 : signature.join(',');
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
getBalance() {
|
|
110
|
-
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
111
|
-
const walletAddress = yield this.fetchPublicAddress();
|
|
112
|
-
const provider = yield this.getWeb3Provider();
|
|
113
|
-
if (!walletAddress || !provider) {
|
|
114
|
-
walletConnectorCore.logger.error('Could not fetch wallet address for getting balance');
|
|
115
|
-
return undefined;
|
|
116
|
-
}
|
|
117
|
-
const contract = new starknet.Contract(ethereumContractAbi, constants.ETH_STARKNET_ADDRESS, provider);
|
|
118
|
-
try {
|
|
119
|
-
const { balance } = yield contract.balanceOf(walletAddress);
|
|
120
|
-
const gweiBalance = parseInt(starknet.uint256.uint256ToBN(balance).toString(10));
|
|
121
|
-
/**
|
|
122
|
-
* Dividing by 1e18 as the returned balance is a Gwei number.
|
|
123
|
-
* Read more here: https://www.investopedia.com/terms/g/gwei-ethereum.asp#toc-what-is-gwei
|
|
124
|
-
*/
|
|
125
|
-
return (gweiBalance / 1e18).toFixed(6);
|
|
126
|
-
}
|
|
127
|
-
catch (error) {
|
|
128
|
-
throw new utils.DynamicError('Something went wrong');
|
|
129
|
-
}
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
endSession() {
|
|
133
|
-
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
134
|
-
getStarknetCore.getStarknet().disconnect({ clearLastWallet: true });
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
getStarknetWindowObject() {
|
|
138
|
-
const starknetWindowInstance = window[`starknet_${this.windowKey}`] || window['starknet'];
|
|
139
|
-
if ((starknetWindowInstance === null || starknetWindowInstance === void 0 ? void 0 : starknetWindowInstance.name) === this.name) {
|
|
140
|
-
return starknetWindowInstance;
|
|
141
|
-
}
|
|
142
|
-
else {
|
|
143
|
-
return undefined;
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
isInstalledOnBrowser() {
|
|
147
|
-
var _a;
|
|
148
|
-
const starknetWindowInstance = (_a = window[`starknet_${this.windowKey}`]) !== null && _a !== void 0 ? _a : window['starknet'];
|
|
149
|
-
return (starknetWindowInstance === null || starknetWindowInstance === void 0 ? void 0 : starknetWindowInstance.name) === this.name;
|
|
150
|
-
}
|
|
151
|
-
getConnectedAccounts() {
|
|
152
|
-
var _a;
|
|
153
|
-
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
154
|
-
const wallet = yield this.getWallet();
|
|
155
|
-
return ((_a = wallet === null || wallet === void 0 ? void 0 : wallet.account) === null || _a === void 0 ? void 0 : _a.address) ? [wallet.account.address] : [];
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
setupEventListeners(listeners) {
|
|
159
|
-
const wallet = this.getStarknetWindowObject();
|
|
160
|
-
if (!wallet) {
|
|
161
|
-
return walletConnectorCore.logger.error('Wallet has not been found');
|
|
162
|
-
}
|
|
163
|
-
this.handleAccountChange = (address) => _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
164
|
-
var _a, _b;
|
|
165
|
-
if (!address) {
|
|
166
|
-
yield ((_a = listeners.onDisconnect) === null || _a === void 0 ? void 0 : _a.call(listeners));
|
|
167
|
-
return;
|
|
168
|
-
}
|
|
169
|
-
if (address.toString()) {
|
|
170
|
-
yield ((_b = listeners.onAccountChange) === null || _b === void 0 ? void 0 : _b.call(listeners, [address.toString()]));
|
|
171
|
-
}
|
|
172
|
-
});
|
|
173
|
-
this.handleNetworkChange = (network) => _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
174
|
-
var _c, _d;
|
|
175
|
-
if (!network) {
|
|
176
|
-
yield ((_c = listeners.onDisconnect) === null || _c === void 0 ? void 0 : _c.call(listeners));
|
|
177
|
-
return;
|
|
178
|
-
}
|
|
179
|
-
const chainId = this.mapChainUrlToChainId(network.toString());
|
|
180
|
-
if (chainId) {
|
|
181
|
-
yield ((_d = listeners.onChainChange) === null || _d === void 0 ? void 0 : _d.call(listeners, chainId));
|
|
182
|
-
}
|
|
183
|
-
});
|
|
184
|
-
wallet === null || wallet === void 0 ? void 0 : wallet.on(ACCOUNT_CHANGED_EVENT_LISTENER, this.handleAccountChange);
|
|
185
|
-
wallet === null || wallet === void 0 ? void 0 : wallet.on(NETWORK_CHANGED_EVENT_LISTENER, this.handleNetworkChange);
|
|
186
|
-
}
|
|
187
|
-
teardownEventListeners() {
|
|
188
|
-
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
189
|
-
const wallet = yield this.getWallet();
|
|
190
|
-
if (this.handleAccountChange) {
|
|
191
|
-
wallet === null || wallet === void 0 ? void 0 : wallet.off(ACCOUNT_CHANGED_EVENT_LISTENER, this.handleAccountChange);
|
|
192
|
-
this.handleAccountChange = undefined;
|
|
193
|
-
}
|
|
194
|
-
if (this.handleNetworkChange) {
|
|
195
|
-
wallet === null || wallet === void 0 ? void 0 : wallet.off(NETWORK_CHANGED_EVENT_LISTENER, this.handleNetworkChange);
|
|
196
|
-
this.handleNetworkChange = undefined;
|
|
197
|
-
}
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
mapChainUrlToChainId(baseUrl) {
|
|
201
|
-
if (baseUrl.includes('mainnet')) {
|
|
202
|
-
return starknet.constants.StarknetChainId.SN_MAIN;
|
|
203
|
-
}
|
|
204
|
-
else if (baseUrl.includes('goerli')) {
|
|
205
|
-
return starknet.constants.StarknetChainId.SN_GOERLI;
|
|
206
|
-
}
|
|
207
|
-
return undefined;
|
|
208
|
-
}
|
|
12
|
+
const ACCOUNT_CHANGED_EVENT_LISTENER = 'accountsChanged';
|
|
13
|
+
const NETWORK_CHANGED_EVENT_LISTENER = 'networkChanged';
|
|
14
|
+
class StarknetWalletConnector extends walletConnectorCore.WalletConnectorBase {
|
|
15
|
+
constructor(name, windowKey, starknetNetworks) {
|
|
16
|
+
super();
|
|
17
|
+
this.connectedChain = 'STARK';
|
|
18
|
+
this.supportedChains = ['STARK'];
|
|
19
|
+
this.switchNetworkOnlyFromWallet = true;
|
|
20
|
+
this.name = name;
|
|
21
|
+
this.windowKey = windowKey;
|
|
22
|
+
this.starknetNetworks = starknetNetworks;
|
|
23
|
+
}
|
|
24
|
+
getRpcProvider() {
|
|
25
|
+
var _a, _b;
|
|
26
|
+
const nodeUrl = (_b = (_a = this.starknetNetworks) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.rpcUrls[0];
|
|
27
|
+
if (!nodeUrl) {
|
|
28
|
+
throw new utils.DynamicError('RPC URL has not been found.');
|
|
29
|
+
}
|
|
30
|
+
return Promise.resolve(new starknet.RpcProvider({ nodeUrl }));
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* returns stakrnet wallet network id
|
|
34
|
+
*/
|
|
35
|
+
getNetwork() {
|
|
36
|
+
var _a;
|
|
37
|
+
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
38
|
+
const wallet = yield this.getWallet();
|
|
39
|
+
if (!wallet) {
|
|
40
|
+
return Promise.resolve(undefined);
|
|
41
|
+
}
|
|
42
|
+
if (!wallet.isConnected) {
|
|
43
|
+
yield wallet.enable();
|
|
44
|
+
}
|
|
45
|
+
return Promise.resolve((_a = wallet.provider) === null || _a === void 0 ? void 0 : _a.chainId);
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
connect() {
|
|
49
|
+
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
50
|
+
const wallet = yield this.getWallet();
|
|
51
|
+
try {
|
|
52
|
+
if (wallet && !wallet.isConnected) {
|
|
53
|
+
yield wallet.enable();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
walletConnectorCore.logger.error(err);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
fetchPublicAddress() {
|
|
62
|
+
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
63
|
+
const wallet = yield this.getWallet();
|
|
64
|
+
/**
|
|
65
|
+
* Fetches public address. Uses `isPreauthorized` as a temporary solution to ensure
|
|
66
|
+
* the wallets store's data is read. Without it, an empty string may be returned due
|
|
67
|
+
* to a possible reliance on its side-effects for data refreshing.
|
|
68
|
+
*/
|
|
69
|
+
yield (wallet === null || wallet === void 0 ? void 0 : wallet.isPreauthorized());
|
|
70
|
+
yield this.connect();
|
|
71
|
+
return Promise.resolve(wallet === null || wallet === void 0 ? void 0 : wallet.selectedAddress);
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
getSigner() {
|
|
75
|
+
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
76
|
+
const wallet = yield this.getWallet();
|
|
77
|
+
return wallet === null || wallet === void 0 ? void 0 : wallet.account;
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
getWallet() {
|
|
81
|
+
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
82
|
+
if (!this.wallet) {
|
|
83
|
+
const providers = yield getStarknetCore.getStarknet().getAvailableWallets();
|
|
84
|
+
this.wallet = providers.find((provider) => provider.name === this.name);
|
|
85
|
+
}
|
|
86
|
+
return this.wallet;
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
getWeb3Provider() {
|
|
90
|
+
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
91
|
+
const wallet = yield this.getWallet();
|
|
92
|
+
return wallet === null || wallet === void 0 ? void 0 : wallet.provider;
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
signMessage(messageToSign) {
|
|
96
|
+
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
97
|
+
const wallet = yield this.getWallet();
|
|
98
|
+
const walletAddress = yield this.fetchPublicAddress();
|
|
99
|
+
if (!walletAddress || !wallet) {
|
|
100
|
+
walletConnectorCore.logger.error('Could not fetch wallet address for signing message');
|
|
101
|
+
return undefined;
|
|
102
|
+
}
|
|
103
|
+
const { provider: { chainId }, } = wallet;
|
|
104
|
+
const encodedMessage = convertors.formatTypedDataMessage(messageToSign, chainId);
|
|
105
|
+
const signature = yield wallet.account.signMessage(encodedMessage);
|
|
106
|
+
return signature === null || signature === void 0 ? void 0 : signature.join(',');
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
getBalance() {
|
|
110
|
+
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
111
|
+
const walletAddress = yield this.fetchPublicAddress();
|
|
112
|
+
const provider = yield this.getWeb3Provider();
|
|
113
|
+
if (!walletAddress || !provider) {
|
|
114
|
+
walletConnectorCore.logger.error('Could not fetch wallet address for getting balance');
|
|
115
|
+
return undefined;
|
|
116
|
+
}
|
|
117
|
+
const contract = new starknet.Contract(ethereumContractAbi, constants.ETH_STARKNET_ADDRESS, provider);
|
|
118
|
+
try {
|
|
119
|
+
const { balance } = yield contract.balanceOf(walletAddress);
|
|
120
|
+
const gweiBalance = parseInt(starknet.uint256.uint256ToBN(balance).toString(10));
|
|
121
|
+
/**
|
|
122
|
+
* Dividing by 1e18 as the returned balance is a Gwei number.
|
|
123
|
+
* Read more here: https://www.investopedia.com/terms/g/gwei-ethereum.asp#toc-what-is-gwei
|
|
124
|
+
*/
|
|
125
|
+
return (gweiBalance / 1e18).toFixed(6);
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
throw new utils.DynamicError('Something went wrong');
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
endSession() {
|
|
133
|
+
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
134
|
+
getStarknetCore.getStarknet().disconnect({ clearLastWallet: true });
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
getStarknetWindowObject() {
|
|
138
|
+
const starknetWindowInstance = window[`starknet_${this.windowKey}`] || window['starknet'];
|
|
139
|
+
if ((starknetWindowInstance === null || starknetWindowInstance === void 0 ? void 0 : starknetWindowInstance.name) === this.name) {
|
|
140
|
+
return starknetWindowInstance;
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
return undefined;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
isInstalledOnBrowser() {
|
|
147
|
+
var _a;
|
|
148
|
+
const starknetWindowInstance = (_a = window[`starknet_${this.windowKey}`]) !== null && _a !== void 0 ? _a : window['starknet'];
|
|
149
|
+
return (starknetWindowInstance === null || starknetWindowInstance === void 0 ? void 0 : starknetWindowInstance.name) === this.name;
|
|
150
|
+
}
|
|
151
|
+
getConnectedAccounts() {
|
|
152
|
+
var _a;
|
|
153
|
+
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
154
|
+
const wallet = yield this.getWallet();
|
|
155
|
+
return ((_a = wallet === null || wallet === void 0 ? void 0 : wallet.account) === null || _a === void 0 ? void 0 : _a.address) ? [wallet.account.address] : [];
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
setupEventListeners(listeners) {
|
|
159
|
+
const wallet = this.getStarknetWindowObject();
|
|
160
|
+
if (!wallet) {
|
|
161
|
+
return walletConnectorCore.logger.error('Wallet has not been found');
|
|
162
|
+
}
|
|
163
|
+
this.handleAccountChange = (address) => _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
164
|
+
var _a, _b;
|
|
165
|
+
if (!address) {
|
|
166
|
+
yield ((_a = listeners.onDisconnect) === null || _a === void 0 ? void 0 : _a.call(listeners));
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
if (address.toString()) {
|
|
170
|
+
yield ((_b = listeners.onAccountChange) === null || _b === void 0 ? void 0 : _b.call(listeners, [address.toString()]));
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
this.handleNetworkChange = (network) => _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
174
|
+
var _c, _d;
|
|
175
|
+
if (!network) {
|
|
176
|
+
yield ((_c = listeners.onDisconnect) === null || _c === void 0 ? void 0 : _c.call(listeners));
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
const chainId = this.mapChainUrlToChainId(network.toString());
|
|
180
|
+
if (chainId) {
|
|
181
|
+
yield ((_d = listeners.onChainChange) === null || _d === void 0 ? void 0 : _d.call(listeners, chainId));
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
wallet === null || wallet === void 0 ? void 0 : wallet.on(ACCOUNT_CHANGED_EVENT_LISTENER, this.handleAccountChange);
|
|
185
|
+
wallet === null || wallet === void 0 ? void 0 : wallet.on(NETWORK_CHANGED_EVENT_LISTENER, this.handleNetworkChange);
|
|
186
|
+
}
|
|
187
|
+
teardownEventListeners() {
|
|
188
|
+
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
189
|
+
const wallet = yield this.getWallet();
|
|
190
|
+
if (this.handleAccountChange) {
|
|
191
|
+
wallet === null || wallet === void 0 ? void 0 : wallet.off(ACCOUNT_CHANGED_EVENT_LISTENER, this.handleAccountChange);
|
|
192
|
+
this.handleAccountChange = undefined;
|
|
193
|
+
}
|
|
194
|
+
if (this.handleNetworkChange) {
|
|
195
|
+
wallet === null || wallet === void 0 ? void 0 : wallet.off(NETWORK_CHANGED_EVENT_LISTENER, this.handleNetworkChange);
|
|
196
|
+
this.handleNetworkChange = undefined;
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
mapChainUrlToChainId(baseUrl) {
|
|
201
|
+
if (baseUrl.includes('mainnet')) {
|
|
202
|
+
return starknet.constants.StarknetChainId.SN_MAIN;
|
|
203
|
+
}
|
|
204
|
+
else if (baseUrl.includes('goerli')) {
|
|
205
|
+
return starknet.constants.StarknetChainId.SN_GOERLI;
|
|
206
|
+
}
|
|
207
|
+
return undefined;
|
|
208
|
+
}
|
|
209
209
|
}
|
|
210
210
|
|
|
211
211
|
module.exports = StarknetWalletConnector;
|
|
@@ -1,44 +1,44 @@
|
|
|
1
|
-
import { StarknetWindowObject } from 'get-starknet-core';
|
|
2
|
-
import { ProviderInterface, constants, AccountInterface, RpcProvider } from 'starknet';
|
|
3
|
-
import { Chain, WalletConnectorBase, WalletEventListeners } from '@dynamic-labs/wallet-connector-core';
|
|
4
|
-
import { NetworkConfiguration } from '@dynamic-labs/sdk-api';
|
|
5
|
-
import { StarknetWalletKey } from './types';
|
|
6
|
-
type AccountChangeEventHandler = (address: {
|
|
7
|
-
toString(): string;
|
|
8
|
-
}) => Promise<void>;
|
|
9
|
-
type NetworkChangeEventHandler = (network: {
|
|
10
|
-
toString(): string;
|
|
11
|
-
}) => Promise<void>;
|
|
12
|
-
declare abstract class StarknetWalletConnector extends WalletConnectorBase {
|
|
13
|
-
name: string;
|
|
14
|
-
windowKey: StarknetWalletKey;
|
|
15
|
-
connectedChain: Chain;
|
|
16
|
-
supportedChains: Chain[];
|
|
17
|
-
wallet: StarknetWindowObject | undefined;
|
|
18
|
-
handleAccountChange: AccountChangeEventHandler | undefined;
|
|
19
|
-
handleNetworkChange: NetworkChangeEventHandler | undefined;
|
|
20
|
-
switchNetworkOnlyFromWallet: boolean;
|
|
21
|
-
starknetNetworks: NetworkConfiguration[];
|
|
22
|
-
constructor(name: string, windowKey: StarknetWalletKey, starknetNetworks: NetworkConfiguration[]);
|
|
23
|
-
getRpcProvider(): Promise<RpcProvider>;
|
|
24
|
-
/**
|
|
25
|
-
* returns stakrnet wallet network id
|
|
26
|
-
*/
|
|
27
|
-
getNetwork(): Promise<any>;
|
|
28
|
-
connect(): Promise<void>;
|
|
29
|
-
fetchPublicAddress(): Promise<string | undefined>;
|
|
30
|
-
getSigner(): Promise<AccountInterface | undefined>;
|
|
31
|
-
getWallet(): Promise<StarknetWindowObject | undefined>;
|
|
32
|
-
getWeb3Provider(): Promise<ProviderInterface | undefined>;
|
|
33
|
-
signMessage(messageToSign: string): Promise<string | undefined>;
|
|
34
|
-
getBalance(): Promise<string | undefined>;
|
|
35
|
-
endSession(): Promise<void>;
|
|
36
|
-
getStarknetWindowObject(): StarknetWindowObject | undefined;
|
|
37
|
-
isInstalledOnBrowser(): boolean;
|
|
38
|
-
getConnectedAccounts(): Promise<string[]>;
|
|
39
|
-
setupEventListeners(listeners: WalletEventListeners): void;
|
|
40
|
-
teardownEventListeners(): Promise<void>;
|
|
41
|
-
mapChainUrlToChainId(baseUrl: string): constants.StarknetChainId | undefined;
|
|
42
|
-
}
|
|
43
|
-
export type StarknetWalletConnectorType = StarknetWalletConnector;
|
|
44
|
-
export default StarknetWalletConnector;
|
|
1
|
+
import { StarknetWindowObject } from 'get-starknet-core';
|
|
2
|
+
import { ProviderInterface, constants, AccountInterface, RpcProvider } from 'starknet';
|
|
3
|
+
import { Chain, WalletConnectorBase, WalletEventListeners } from '@dynamic-labs/wallet-connector-core';
|
|
4
|
+
import { NetworkConfiguration } from '@dynamic-labs/sdk-api';
|
|
5
|
+
import { StarknetWalletKey } from './types';
|
|
6
|
+
type AccountChangeEventHandler = (address: {
|
|
7
|
+
toString(): string;
|
|
8
|
+
}) => Promise<void>;
|
|
9
|
+
type NetworkChangeEventHandler = (network: {
|
|
10
|
+
toString(): string;
|
|
11
|
+
}) => Promise<void>;
|
|
12
|
+
declare abstract class StarknetWalletConnector extends WalletConnectorBase {
|
|
13
|
+
name: string;
|
|
14
|
+
windowKey: StarknetWalletKey;
|
|
15
|
+
connectedChain: Chain;
|
|
16
|
+
supportedChains: Chain[];
|
|
17
|
+
wallet: StarknetWindowObject | undefined;
|
|
18
|
+
handleAccountChange: AccountChangeEventHandler | undefined;
|
|
19
|
+
handleNetworkChange: NetworkChangeEventHandler | undefined;
|
|
20
|
+
switchNetworkOnlyFromWallet: boolean;
|
|
21
|
+
starknetNetworks: NetworkConfiguration[];
|
|
22
|
+
constructor(name: string, windowKey: StarknetWalletKey, starknetNetworks: NetworkConfiguration[]);
|
|
23
|
+
getRpcProvider(): Promise<RpcProvider>;
|
|
24
|
+
/**
|
|
25
|
+
* returns stakrnet wallet network id
|
|
26
|
+
*/
|
|
27
|
+
getNetwork(): Promise<any>;
|
|
28
|
+
connect(): Promise<void>;
|
|
29
|
+
fetchPublicAddress(): Promise<string | undefined>;
|
|
30
|
+
getSigner(): Promise<AccountInterface | undefined>;
|
|
31
|
+
getWallet(): Promise<StarknetWindowObject | undefined>;
|
|
32
|
+
getWeb3Provider(): Promise<ProviderInterface | undefined>;
|
|
33
|
+
signMessage(messageToSign: string): Promise<string | undefined>;
|
|
34
|
+
getBalance(): Promise<string | undefined>;
|
|
35
|
+
endSession(): Promise<void>;
|
|
36
|
+
getStarknetWindowObject(): StarknetWindowObject | undefined;
|
|
37
|
+
isInstalledOnBrowser(): boolean;
|
|
38
|
+
getConnectedAccounts(): Promise<string[]>;
|
|
39
|
+
setupEventListeners(listeners: WalletEventListeners): void;
|
|
40
|
+
teardownEventListeners(): Promise<void>;
|
|
41
|
+
mapChainUrlToChainId(baseUrl: string): constants.StarknetChainId | undefined;
|
|
42
|
+
}
|
|
43
|
+
export type StarknetWalletConnectorType = StarknetWalletConnector;
|
|
44
|
+
export default StarknetWalletConnector;
|