@dynamic-labs/starknet 0.19.2 → 0.19.4

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,35 @@
1
1
 
2
+ ### [0.19.4](https://github.com/dynamic-labs/DynamicAuth/compare/v0.19.3...v0.19.4) (2023-11-29)
3
+
4
+
5
+ ### Features
6
+
7
+ * passkey management and recovery ([#4018](https://github.com/dynamic-labs/DynamicAuth/issues/4018)) ([6fae19f](https://github.com/dynamic-labs/DynamicAuth/commit/6fae19f26d9bbbff5dd5863ac012cfb67e3fe535))
8
+
9
+
10
+ ### Bug Fixes
11
+
12
+ * add hydration safeguard for embedded widget ([#3953](https://github.com/dynamic-labs/DynamicAuth/issues/3953)) ([#3955](https://github.com/dynamic-labs/DynamicAuth/issues/3955)) ([848a684](https://github.com/dynamic-labs/DynamicAuth/commit/848a684a08fd38e23f86898b287f3badaa0a3b49))
13
+ * ensure all chain rpc providers are always assigned correctly ([#3985](https://github.com/dynamic-labs/DynamicAuth/issues/3985)) ([f36aebe](https://github.com/dynamic-labs/DynamicAuth/commit/f36aebeb8ddffa7fb65f6865005f44d5eacf3982))
14
+ * initialize selected chain with first evm network if no value in ls ([#4008](https://github.com/dynamic-labs/DynamicAuth/issues/4008)) ([b7d99be](https://github.com/dynamic-labs/DynamicAuth/commit/b7d99be80d990c264838f2619b45750b1a0037bc))
15
+ * nextjs issues to show transaction modals ([#3964](https://github.com/dynamic-labs/DynamicAuth/issues/3964)) ([#3978](https://github.com/dynamic-labs/DynamicAuth/issues/3978)) ([0ef4c3a](https://github.com/dynamic-labs/DynamicAuth/commit/0ef4c3adbc0883e127023c3c475637dfb648160d))
16
+ * onEmbeddedWalletCreated not being called ([#3977](https://github.com/dynamic-labs/DynamicAuth/issues/3977)) ([24de7c0](https://github.com/dynamic-labs/DynamicAuth/commit/24de7c0443d957302a52055e59196592f87e70e1)), closes [#3975](https://github.com/dynamic-labs/DynamicAuth/issues/3975)
17
+ * return linked wallets even when there's no primary wallet ([#3965](https://github.com/dynamic-labs/DynamicAuth/issues/3965)) ([#3976](https://github.com/dynamic-labs/DynamicAuth/issues/3976)) ([7052f99](https://github.com/dynamic-labs/DynamicAuth/commit/7052f990638295ddfc3cbe35853736dfc6250268))
18
+ * transaction modal not throwing viem compatible exception ([#3971](https://github.com/dynamic-labs/DynamicAuth/issues/3971)) ([#3979](https://github.com/dynamic-labs/DynamicAuth/issues/3979)) ([8bc551f](https://github.com/dynamic-labs/DynamicAuth/commit/8bc551f432e140e1cf16eb2b3305a8de761d4305))
19
+
20
+ ### [0.19.3](https://github.com/dynamic-labs/DynamicAuth/compare/v0.19.2...v0.19.3) (2023-11-22)
21
+
22
+
23
+ ### Features
24
+
25
+ * multiple starknet improvements [Support for default/custom RPC Providers + Dynamic Domains in signature] ([#3938](https://github.com/dynamic-labs/DynamicAuth/issues/3938)) ([d299622](https://github.com/dynamic-labs/DynamicAuth/commit/d299622197cb28483c6c6d6d051c917d6cbbe5df)), closes [#3881](https://github.com/dynamic-labs/DynamicAuth/issues/3881) [#3927](https://github.com/dynamic-labs/DynamicAuth/issues/3927)
26
+
27
+
28
+ ### Bug Fixes
29
+
30
+ * allow user's metadata field to be updated in updateUser hook ([#3930](https://github.com/dynamic-labs/DynamicAuth/issues/3930)) ([7d00014](https://github.com/dynamic-labs/DynamicAuth/commit/7d000140f87453bd158798b973917fa8309c8e5e))
31
+ * better handling of wallet disconnect state edge case ([#3940](https://github.com/dynamic-labs/DynamicAuth/issues/3940)) ([#3942](https://github.com/dynamic-labs/DynamicAuth/issues/3942)) ([e9f944c](https://github.com/dynamic-labs/DynamicAuth/commit/e9f944c2c68de446e83c1dbd62aaaedd07443326))
32
+
2
33
  ### [0.19.2](https://github.com/dynamic-labs/DynamicAuth/compare/v0.19.1...v0.19.2) (2023-11-17)
3
34
 
4
35
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dynamic-labs/starknet",
3
- "version": "0.19.2",
3
+ "version": "0.19.4",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/dynamic-labs/DynamicAuth.git",
@@ -29,10 +29,12 @@
29
29
  "starknet": "^5.19.5",
30
30
  "get-starknet-core": "^3.2.0",
31
31
  "text-encoding": "0.7.0",
32
- "@dynamic-labs/sdk-api": "0.0.307",
33
- "@dynamic-labs/utils": "0.19.2",
34
- "@dynamic-labs/wallet-book": "0.19.2",
35
- "@dynamic-labs/wallet-connector-core": "0.19.2"
32
+ "@dynamic-labs/sdk-api": "0.0.311",
33
+ "@dynamic-labs/rpc-providers": "0.19.4",
34
+ "@dynamic-labs/types": "0.19.4",
35
+ "@dynamic-labs/utils": "0.19.4",
36
+ "@dynamic-labs/wallet-book": "0.19.4",
37
+ "@dynamic-labs/wallet-connector-core": "0.19.4"
36
38
  },
37
39
  "peerDependencies": {}
38
40
  }
package/src/constants.cjs CHANGED
@@ -3,12 +3,5 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
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
- };
12
6
 
13
- exports.DEFAULT_STARKNET_TYPED_DATA_DOMAIN = DEFAULT_STARKNET_TYPED_DATA_DOMAIN;
14
7
  exports.ETH_STARKNET_ADDRESS = ETH_STARKNET_ADDRESS;
@@ -1,3 +1 @@
1
- import { TypedData } from 'starknet';
2
1
  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,3 @@
1
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
- };
8
2
 
9
- export { DEFAULT_STARKNET_TYPED_DATA_DOMAIN, ETH_STARKNET_ADDRESS };
3
+ export { ETH_STARKNET_ADDRESS };
@@ -7,6 +7,7 @@ var getStarknetCore = require('get-starknet-core');
7
7
  var starknet = require('starknet');
8
8
  var walletConnectorCore = require('@dynamic-labs/wallet-connector-core');
9
9
  var utils = require('@dynamic-labs/utils');
10
+ var rpcProviders = require('@dynamic-labs/rpc-providers');
10
11
  var constants = require('./constants.cjs');
11
12
  var ethereumContractAbi = require('./ethereumContractAbi.cjs');
12
13
  var convertors = require('./utils/convertors.cjs');
@@ -16,6 +17,7 @@ const NETWORK_CHANGED_EVENT_LISTENER = 'networkChanged';
16
17
  const STARKNET_VERSION = 'v5';
17
18
  class StarknetWalletConnector extends walletConnectorCore.WalletConnectorBase {
18
19
  constructor(name, windowKey, opts) {
20
+ var _a;
19
21
  super(opts);
20
22
  this.connectedChain = 'STARK';
21
23
  this.supportedChains = ['STARK'];
@@ -23,14 +25,44 @@ class StarknetWalletConnector extends walletConnectorCore.WalletConnectorBase {
23
25
  this.name = name;
24
26
  this.windowKey = windowKey;
25
27
  this.starknetNetworks = opts.starknetNetworks;
28
+ this.chainRpcProviders = opts.chainRpcProviders;
29
+ (_a = this.chainRpcProviders) === null || _a === void 0 ? void 0 : _a.registerChainProviders(rpcProviders.ProviderChain.STARKNET, (config) => {
30
+ const rpcProviders = {};
31
+ if (config === null || config === void 0 ? void 0 : config.starknet) {
32
+ const networks = config.starknet;
33
+ rpcProviders.starknet = this.createProviderFromConfig(networks);
34
+ }
35
+ return rpcProviders.starknet;
36
+ });
37
+ }
38
+ createProviderFromConfig(networks) {
39
+ return networks.map((network) => {
40
+ var _a;
41
+ const rpcUrl = ((_a = network.privateCustomerRpcUrls) === null || _a === void 0 ? void 0 : _a[0]) || network.rpcUrls[0];
42
+ const provider = new starknet.RpcProvider({ nodeUrl: rpcUrl });
43
+ return {
44
+ chainId: network.chainId.toString(),
45
+ chainName: network.name,
46
+ provider,
47
+ };
48
+ });
26
49
  }
27
50
  getPublicClient() {
28
- var _a, _b;
29
- const nodeUrl = (_b = (_a = this.starknetNetworks) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.rpcUrls[0];
30
- if (!nodeUrl) {
31
- throw new utils.DynamicError('RPC URL has not been found.');
32
- }
33
- return Promise.resolve(new starknet.RpcProvider({ nodeUrl }));
51
+ var _a;
52
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
53
+ if (this.starknetNetworks === undefined ||
54
+ this.starknetNetworks.length === 0)
55
+ return;
56
+ const configurations = {
57
+ cosmos: [],
58
+ evm: undefined,
59
+ solana: undefined,
60
+ starknet: this.starknetNetworks,
61
+ };
62
+ const chainId = yield this.getNetwork();
63
+ const starknetRpcProvider = (_a = this.chainRpcProviders) === null || _a === void 0 ? void 0 : _a.getStarknetRpcProviderByChainId(configurations, chainId);
64
+ return starknetRpcProvider === null || starknetRpcProvider === void 0 ? void 0 : starknetRpcProvider.provider;
65
+ });
34
66
  }
35
67
  /**
36
68
  * returns stakrnet wallet network id
@@ -3,6 +3,8 @@ import { ProviderInterface, constants, AccountInterface, RpcProvider } from 'sta
3
3
  import { Chain, WalletConnectorBase } from '@dynamic-labs/wallet-connector-core';
4
4
  import { NetworkConfiguration } from '@dynamic-labs/sdk-api';
5
5
  import { WalletBookSchema } from '@dynamic-labs/wallet-book';
6
+ import { ChainRpcProviders, StarknetRpcProvider } from '@dynamic-labs/rpc-providers';
7
+ import { GenericNetwork } from '@dynamic-labs/types';
6
8
  import { StarknetWalletKey } from './types';
7
9
  type AccountChangeEventHandler = (address: {
8
10
  toString(): string;
@@ -23,10 +25,12 @@ declare abstract class StarknetWalletConnector extends WalletConnectorBase {
23
25
  switchNetworkOnlyFromWallet: boolean;
24
26
  starknetNetworks: NetworkConfiguration[];
25
27
  constructor(name: string, windowKey: StarknetWalletKey, opts: {
28
+ chainRpcProviders: typeof ChainRpcProviders;
26
29
  starknetNetworks: NetworkConfiguration[];
27
30
  walletBook: WalletBookSchema;
28
31
  });
29
- getPublicClient(): Promise<RpcProvider>;
32
+ createProviderFromConfig(networks: GenericNetwork[]): StarknetRpcProvider[];
33
+ getPublicClient(): Promise<RpcProvider | undefined>;
30
34
  /**
31
35
  * returns stakrnet wallet network id
32
36
  */
@@ -3,6 +3,7 @@ import { getStarknet } from 'get-starknet-core';
3
3
  import { RpcProvider, Contract, cairo, constants } from 'starknet';
4
4
  import { WalletConnectorBase, logger } from '@dynamic-labs/wallet-connector-core';
5
5
  import { DynamicError } from '@dynamic-labs/utils';
6
+ import { ProviderChain } from '@dynamic-labs/rpc-providers';
6
7
  import { ETH_STARKNET_ADDRESS } from './constants.js';
7
8
  import ETH_CONTRACT_ABI from './ethereumContractAbi.js';
8
9
  import { formatTypedDataMessage } from './utils/convertors.js';
@@ -12,6 +13,7 @@ const NETWORK_CHANGED_EVENT_LISTENER = 'networkChanged';
12
13
  const STARKNET_VERSION = 'v5';
13
14
  class StarknetWalletConnector extends WalletConnectorBase {
14
15
  constructor(name, windowKey, opts) {
16
+ var _a;
15
17
  super(opts);
16
18
  this.connectedChain = 'STARK';
17
19
  this.supportedChains = ['STARK'];
@@ -19,14 +21,44 @@ class StarknetWalletConnector extends WalletConnectorBase {
19
21
  this.name = name;
20
22
  this.windowKey = windowKey;
21
23
  this.starknetNetworks = opts.starknetNetworks;
24
+ this.chainRpcProviders = opts.chainRpcProviders;
25
+ (_a = this.chainRpcProviders) === null || _a === void 0 ? void 0 : _a.registerChainProviders(ProviderChain.STARKNET, (config) => {
26
+ const rpcProviders = {};
27
+ if (config === null || config === void 0 ? void 0 : config.starknet) {
28
+ const networks = config.starknet;
29
+ rpcProviders.starknet = this.createProviderFromConfig(networks);
30
+ }
31
+ return rpcProviders.starknet;
32
+ });
33
+ }
34
+ createProviderFromConfig(networks) {
35
+ return networks.map((network) => {
36
+ var _a;
37
+ const rpcUrl = ((_a = network.privateCustomerRpcUrls) === null || _a === void 0 ? void 0 : _a[0]) || network.rpcUrls[0];
38
+ const provider = new RpcProvider({ nodeUrl: rpcUrl });
39
+ return {
40
+ chainId: network.chainId.toString(),
41
+ chainName: network.name,
42
+ provider,
43
+ };
44
+ });
22
45
  }
23
46
  getPublicClient() {
24
- var _a, _b;
25
- const nodeUrl = (_b = (_a = this.starknetNetworks) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.rpcUrls[0];
26
- if (!nodeUrl) {
27
- throw new DynamicError('RPC URL has not been found.');
28
- }
29
- return Promise.resolve(new RpcProvider({ nodeUrl }));
47
+ var _a;
48
+ return __awaiter(this, void 0, void 0, function* () {
49
+ if (this.starknetNetworks === undefined ||
50
+ this.starknetNetworks.length === 0)
51
+ return;
52
+ const configurations = {
53
+ cosmos: [],
54
+ evm: undefined,
55
+ solana: undefined,
56
+ starknet: this.starknetNetworks,
57
+ };
58
+ const chainId = yield this.getNetwork();
59
+ const starknetRpcProvider = (_a = this.chainRpcProviders) === null || _a === void 0 ? void 0 : _a.getStarknetRpcProviderByChainId(configurations, chainId);
60
+ return starknetRpcProvider === null || starknetRpcProvider === void 0 ? void 0 : starknetRpcProvider.provider;
61
+ });
30
62
  }
31
63
  /**
32
64
  * returns stakrnet wallet network id
@@ -3,9 +3,10 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var starknet = require('starknet');
6
- var constants = require('../constants.cjs');
7
6
 
8
- const defaultTypedData = Object.assign(Object.assign({}, constants.DEFAULT_STARKNET_TYPED_DATA_DOMAIN), { primaryType: 'Message', types: {
7
+ const defaultTypedData = {
8
+ primaryType: 'Message',
9
+ types: {
9
10
  Message: [
10
11
  {
11
12
  name: 'message',
@@ -26,12 +27,18 @@ const defaultTypedData = Object.assign(Object.assign({}, constants.DEFAULT_STARK
26
27
  type: 'felt',
27
28
  },
28
29
  ],
29
- } });
30
+ },
31
+ };
30
32
  const formatTypedDataMessage = (inputMessage, chainId = starknet.constants.NetworkName.SN_MAIN) => {
33
+ const { nonce, domain } = JSON.parse(inputMessage);
31
34
  const message = {
32
- message: inputMessage.substring(0, 31),
35
+ message: nonce.substring(0, 31),
33
36
  };
34
- return Object.assign(Object.assign({}, defaultTypedData), { domain: Object.assign(Object.assign({}, defaultTypedData.domain), { chainId }), message });
37
+ return Object.assign(Object.assign({}, defaultTypedData), { domain: {
38
+ chainId,
39
+ name: domain,
40
+ version: '0.0.1',
41
+ }, message });
35
42
  };
36
43
 
37
44
  exports.formatTypedDataMessage = formatTypedDataMessage;
@@ -1,7 +1,8 @@
1
1
  import { constants } from 'starknet';
2
- import { DEFAULT_STARKNET_TYPED_DATA_DOMAIN } from '../constants.js';
3
2
 
4
- const defaultTypedData = Object.assign(Object.assign({}, DEFAULT_STARKNET_TYPED_DATA_DOMAIN), { primaryType: 'Message', types: {
3
+ const defaultTypedData = {
4
+ primaryType: 'Message',
5
+ types: {
5
6
  Message: [
6
7
  {
7
8
  name: 'message',
@@ -22,12 +23,18 @@ const defaultTypedData = Object.assign(Object.assign({}, DEFAULT_STARKNET_TYPED_
22
23
  type: 'felt',
23
24
  },
24
25
  ],
25
- } });
26
+ },
27
+ };
26
28
  const formatTypedDataMessage = (inputMessage, chainId = constants.NetworkName.SN_MAIN) => {
29
+ const { nonce, domain } = JSON.parse(inputMessage);
27
30
  const message = {
28
- message: inputMessage.substring(0, 31),
31
+ message: nonce.substring(0, 31),
29
32
  };
30
- return Object.assign(Object.assign({}, defaultTypedData), { domain: Object.assign(Object.assign({}, defaultTypedData.domain), { chainId }), message });
33
+ return Object.assign(Object.assign({}, defaultTypedData), { domain: {
34
+ chainId,
35
+ name: domain,
36
+ version: '0.0.1',
37
+ }, message });
31
38
  };
32
39
 
33
40
  export { formatTypedDataMessage };