@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 +21 -0
- package/package.json +6 -5
- package/src/constants.d.ts +1 -1
- package/src/starknetWalletConnector.cjs +18 -15
- package/src/starknetWalletConnector.d.ts +6 -5
- package/src/starknetWalletConnector.js +17 -14
- package/src/types.d.ts +2 -2
- package/src/utils/convertors.cjs +2 -1
- package/src/utils/convertors.d.ts +2 -2
- package/src/utils/convertors.js +2 -1
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.
|
|
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": "
|
|
30
|
-
"get-starknet": "
|
|
31
|
-
"
|
|
32
|
-
"@dynamic-labs/
|
|
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
|
}
|
package/src/constants.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { TypedData } from 'starknet
|
|
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
|
|
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
|
|
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(
|
|
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.
|
|
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 {
|
|
74
|
-
const
|
|
75
|
-
const
|
|
76
|
-
|
|
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
|
|
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 {
|
|
2
|
-
import {
|
|
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:
|
|
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<
|
|
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():
|
|
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 {
|
|
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(
|
|
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
|
|
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 {
|
|
72
|
-
const
|
|
73
|
-
const
|
|
74
|
-
|
|
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 {
|
|
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]:
|
|
5
|
+
[key in StarknetWindowKey]: StarknetWindowObject;
|
|
6
6
|
};
|
|
7
7
|
declare global {
|
|
8
8
|
interface Window extends StarknetWindow {
|
package/src/utils/convertors.cjs
CHANGED
|
@@ -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 =
|
|
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
|
|
2
|
-
export declare const formatTypedDataMessage: (inputMessage: string, chainId?:
|
|
1
|
+
import { TypedData, constants } from 'starknet';
|
|
2
|
+
export declare const formatTypedDataMessage: (inputMessage: string, chainId?: constants.NetworkName) => TypedData;
|
package/src/utils/convertors.js
CHANGED
|
@@ -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 =
|
|
26
|
+
const formatTypedDataMessage = (inputMessage, chainId = constants.NetworkName.SN_MAIN) => {
|
|
26
27
|
const message = {
|
|
27
28
|
message: inputMessage.substring(0, 31),
|
|
28
29
|
};
|