@dynamic-labs/starknet 4.0.0-alpha.3 → 4.0.0-alpha.30

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.
Files changed (65) hide show
  1. package/CHANGELOG.md +254 -0
  2. package/package.cjs +8 -0
  3. package/package.js +4 -0
  4. package/package.json +14 -19
  5. package/src/StarknetWalletConnector.cjs +232 -0
  6. package/src/StarknetWalletConnector.d.ts +58 -0
  7. package/src/StarknetWalletConnector.js +228 -0
  8. package/src/index.cjs +14 -13
  9. package/src/index.d.ts +15 -7
  10. package/src/index.js +13 -13
  11. package/src/types.d.ts +26 -11
  12. package/src/utils/convertors.cjs +1 -1
  13. package/src/utils/convertors.d.ts +1 -1
  14. package/src/utils/convertors.js +1 -1
  15. package/src/utils/starknetSnap.d.ts +2 -2
  16. package/src/wallet/StarknetWallet.cjs +0 -3
  17. package/src/wallet/StarknetWallet.d.ts +4 -4
  18. package/src/wallet/StarknetWallet.js +0 -3
  19. package/src/wallets/argent/argentMobile/argentMobile.cjs +73 -0
  20. package/src/wallets/argent/argentMobile/argentMobile.d.ts +16 -0
  21. package/src/wallets/argent/argentMobile/argentMobile.js +69 -0
  22. package/src/wallets/argent/base.cjs +50 -0
  23. package/src/wallets/argent/base.d.ts +5 -0
  24. package/src/wallets/argent/base.js +46 -0
  25. package/src/wallets/argent/injected/argentx.cjs +33 -0
  26. package/src/wallets/argent/injected/argentx.d.ts +8 -0
  27. package/src/wallets/argent/injected/argentx.js +29 -0
  28. package/src/wallets/argent/webwallet/webwallet.cjs +37 -0
  29. package/src/wallets/argent/webwallet/webwallet.d.ts +10 -0
  30. package/src/wallets/argent/webwallet/webwallet.js +33 -0
  31. package/src/wallets/injected/fetchStarknetInjectedWalletConnectors.cjs +34 -0
  32. package/src/wallets/injected/fetchStarknetInjectedWalletConnectors.d.ts +5 -0
  33. package/src/wallets/injected/fetchStarknetInjectedWalletConnectors.js +30 -0
  34. package/src/wallets/injected/injected.cjs +141 -0
  35. package/src/wallets/injected/injected.d.ts +10 -0
  36. package/src/wallets/injected/injected.js +137 -0
  37. package/src/wallets/{metamask.d.ts → injected/metamask.d.ts} +2 -4
  38. package/src/starknetWalletConnector.cjs +0 -320
  39. package/src/starknetWalletConnector.d.ts +0 -127
  40. package/src/starknetWalletConnector.js +0 -314
  41. package/src/utils/starknetSnap.cjs +0 -92
  42. package/src/utils/starknetSnap.js +0 -88
  43. package/src/wallets/argentx.cjs +0 -24
  44. package/src/wallets/argentx.d.ts +0 -8
  45. package/src/wallets/argentx.js +0 -20
  46. package/src/wallets/argentxBase.cjs +0 -50
  47. package/src/wallets/argentxBase.d.ts +0 -16
  48. package/src/wallets/argentxBase.js +0 -48
  49. package/src/wallets/argentxMobile.cjs +0 -100
  50. package/src/wallets/argentxMobile.d.ts +0 -13
  51. package/src/wallets/argentxMobile.js +0 -96
  52. package/src/wallets/argentxWeb.cjs +0 -57
  53. package/src/wallets/argentxWeb.d.ts +0 -8
  54. package/src/wallets/argentxWeb.js +0 -53
  55. package/src/wallets/bitget.cjs +0 -22
  56. package/src/wallets/bitget.d.ts +0 -7
  57. package/src/wallets/bitget.js +0 -18
  58. package/src/wallets/braavos.cjs +0 -37
  59. package/src/wallets/braavos.d.ts +0 -8
  60. package/src/wallets/braavos.js +0 -33
  61. package/src/wallets/metamask.cjs +0 -121
  62. package/src/wallets/metamask.js +0 -117
  63. package/src/wallets/okx.cjs +0 -15
  64. package/src/wallets/okx.d.ts +0 -6
  65. package/src/wallets/okx.js +0 -11
@@ -0,0 +1,228 @@
1
+ 'use client'
2
+ import { __awaiter } from '../_virtual/_tslib.js';
3
+ import { constants, num, Contract, cairo, WalletAccount, RpcProvider } from 'starknet';
4
+ import { WalletConnectorBase } from '@dynamic-labs/wallet-connector-core';
5
+ import { DynamicError } from '@dynamic-labs/utils';
6
+ import { Logger } from '@dynamic-labs/logger';
7
+ import { ETH_STARKNET_ADDRESS } from './constants.js';
8
+ import ETH_CONTRACT_ABI from './ethereumContractAbi.js';
9
+ import { formatTypedDataMessage } from './utils/convertors.js';
10
+ import { StarknetWallet } from './wallet/StarknetWallet.js';
11
+
12
+ class StarknetWalletConnector extends WalletConnectorBase {
13
+ constructor(name, id, opts) {
14
+ var _a;
15
+ super(opts);
16
+ this.ChainWallet = StarknetWallet;
17
+ this.connectedChain = 'STARK';
18
+ this.supportedChains = ['STARK'];
19
+ this.switchNetworkOnlyFromWallet = true;
20
+ /** required for metamask snap integration as MM snaps don't have event listeners */
21
+ this.canSetEventListeners = true;
22
+ this.name = name;
23
+ this.id = id;
24
+ this.starknetNetworks = opts.starknetNetworks;
25
+ this.chainRpcProviders = opts.chainRpcProviders;
26
+ (_a = this.chainRpcProviders) === null || _a === void 0 ? void 0 : _a.registerStarknetProviders();
27
+ this.walletBookWallet = opts.walletBookWallet;
28
+ this.logger = new Logger(this.name);
29
+ }
30
+ connect() {
31
+ return __awaiter(this, void 0, void 0, function* () {
32
+ yield this.getAddress();
33
+ });
34
+ }
35
+ getAddress() {
36
+ return __awaiter(this, void 0, void 0, function* () {
37
+ var _a;
38
+ if ((_a = this.walletData) === null || _a === void 0 ? void 0 : _a.account) {
39
+ return this.walletData.account;
40
+ }
41
+ this.logger.debug('[getAddress] Prompting new connection');
42
+ const { wallet, data } = yield this.prompt({
43
+ silently: false,
44
+ });
45
+ this.logger.debug(`[getAddress] Connection returned account: ${data === null || data === void 0 ? void 0 : data.account}, wallet: ${wallet}`);
46
+ if (!wallet || !data) {
47
+ return undefined;
48
+ }
49
+ this.wallet = wallet;
50
+ this.walletData = data;
51
+ this.setupEventListeners();
52
+ return this.walletData.account;
53
+ });
54
+ }
55
+ /**
56
+ * returns starknet wallet network id
57
+ */
58
+ getNetwork() {
59
+ return __awaiter(this, void 0, void 0, function* () {
60
+ var _a;
61
+ if (!((_a = this.walletData) === null || _a === void 0 ? void 0 : _a.chainId)) {
62
+ return undefined;
63
+ }
64
+ return num.toHex(this.walletData.chainId);
65
+ });
66
+ }
67
+ getBalance(address) {
68
+ return __awaiter(this, void 0, void 0, function* () {
69
+ const wallet = yield this.getWalletAccount();
70
+ if (!wallet) {
71
+ this.logger.error('Could not find provider for getting balance');
72
+ return undefined;
73
+ }
74
+ const contract = new Contract(ETH_CONTRACT_ABI, ETH_STARKNET_ADDRESS, wallet);
75
+ try {
76
+ const { balance } = yield contract.balanceOf(address);
77
+ /**
78
+ * Dividing by 1e18 as the returned balance is a Gwei number.
79
+ * Read more here: https://www.investopedia.com/terms/g/gwei-ethereum.asp#toc-what-is-gwei
80
+ */
81
+ return (Number(cairo.uint256(balance.low).low) / 1e18).toFixed(6);
82
+ }
83
+ catch (error) {
84
+ this.logger.error(error);
85
+ throw new DynamicError('Something went wrong');
86
+ }
87
+ });
88
+ }
89
+ signMessage(messageToSign) {
90
+ return __awaiter(this, void 0, void 0, function* () {
91
+ const [walletAddress, chainId] = yield Promise.all([
92
+ this.getAddress(),
93
+ this.getNetwork(),
94
+ ]);
95
+ const assertions = [
96
+ [walletAddress, 'No address for wallet'],
97
+ [chainId, 'No chainId for wallet'],
98
+ [this.wallet, 'No wallet provider'],
99
+ ];
100
+ for (const [value, message] of assertions) {
101
+ if (!value) {
102
+ this.logger.error(`[signMessage] ${message}. Make sure \`connect\` was called first`);
103
+ return undefined;
104
+ }
105
+ }
106
+ const encodedMessage = formatTypedDataMessage(messageToSign, chainId);
107
+ // justification: performing assertion above
108
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
109
+ const signature = yield this.wallet.request({
110
+ params: encodedMessage,
111
+ type: 'wallet_signTypedData',
112
+ });
113
+ return signature === null || signature === void 0 ? void 0 : signature.join(',');
114
+ });
115
+ }
116
+ getWalletAccount() {
117
+ return __awaiter(this, void 0, void 0, function* () {
118
+ if (!this.wallet) {
119
+ return undefined;
120
+ }
121
+ return new WalletAccount(yield this.getProvider(), this.wallet);
122
+ });
123
+ }
124
+ getProvider() {
125
+ return __awaiter(this, void 0, void 0, function* () {
126
+ const rpcUrl = yield this.resolveRpcUrl();
127
+ this.logger.debug(`[getProvider] using rpcUrl: ${rpcUrl}`);
128
+ return new RpcProvider({ nodeUrl: rpcUrl });
129
+ });
130
+ }
131
+ isInstalledOnBrowser() {
132
+ return Boolean(window[`starknet_${this.id}`]);
133
+ }
134
+ endSession() {
135
+ return __awaiter(this, void 0, void 0, function* () {
136
+ this.teardownEventListeners();
137
+ this.wallet = undefined;
138
+ this.walletData = undefined;
139
+ });
140
+ }
141
+ setupEventListeners() {
142
+ if (!this.canSetEventListeners)
143
+ return;
144
+ if (!this.wallet) {
145
+ this.logger.debug('[setupEventListeners] Not connected, returning early');
146
+ return;
147
+ }
148
+ this.handleAccountChange = (accounts) => __awaiter(this, void 0, void 0, function* () {
149
+ var _a;
150
+ this.logger.debug(`[accountsChanged] Received argument: ${accounts === null || accounts === void 0 ? void 0 : accounts.toString()}`);
151
+ if (!accounts || accounts[0] === null) {
152
+ this.emit('disconnect');
153
+ return;
154
+ }
155
+ const [address] = accounts;
156
+ if (address) {
157
+ this.walletData = {
158
+ account: address,
159
+ chainId: (_a = this.walletData) === null || _a === void 0 ? void 0 : _a.chainId,
160
+ };
161
+ this.emit('accountChange', { accounts: [address.toString()] });
162
+ }
163
+ });
164
+ this.handleNetworkChange = (chainId) => __awaiter(this, void 0, void 0, function* () {
165
+ var _b;
166
+ this.logger.debug(`[networkChanged] Received argument: ${chainId === null || chainId === void 0 ? void 0 : chainId.toString()}`);
167
+ if (!chainId) {
168
+ this.emit('disconnect');
169
+ return;
170
+ }
171
+ this.walletData = {
172
+ account: (_b = this.walletData) === null || _b === void 0 ? void 0 : _b.account,
173
+ chainId: BigInt(chainId),
174
+ };
175
+ this.emit('chainChange', { chain: chainId });
176
+ });
177
+ this.logger.debug('[setupEventListeners] Setting up accountsChanged and networkChanged');
178
+ this.wallet.on('accountsChanged', this.handleAccountChange);
179
+ this.wallet.on('networkChanged', this.handleNetworkChange);
180
+ }
181
+ teardownEventListeners() {
182
+ return __awaiter(this, void 0, void 0, function* () {
183
+ var _a, _b;
184
+ if (!this.canSetEventListeners)
185
+ return;
186
+ if (this.handleAccountChange) {
187
+ (_a = this.wallet) === null || _a === void 0 ? void 0 : _a.off('accountsChanged', this.handleAccountChange);
188
+ this.handleAccountChange = undefined;
189
+ }
190
+ if (this.handleNetworkChange) {
191
+ (_b = this.wallet) === null || _b === void 0 ? void 0 : _b.off('networkChanged', this.handleNetworkChange);
192
+ this.handleNetworkChange = undefined;
193
+ }
194
+ });
195
+ }
196
+ resolveRpcUrl() {
197
+ return __awaiter(this, void 0, void 0, function* () {
198
+ var _a;
199
+ const chainId = yield this.getNetwork();
200
+ if (!chainId) {
201
+ this.logger.warn('[resolveRpcUrl] `getNetwork` returned undefined');
202
+ return undefined;
203
+ }
204
+ const networkConfig = this.starknetNetworks.find((config) => config.chainId === chainId);
205
+ if (!networkConfig) {
206
+ this.logger.warn(`[resolveRpcUrl] Network configuration for chainId \`${chainId}\` is not found in starknetNetworks`);
207
+ return undefined;
208
+ }
209
+ return (((_a = networkConfig.privateCustomerRpcUrls) === null || _a === void 0 ? void 0 : _a[0]) || networkConfig.rpcUrls[0]);
210
+ });
211
+ }
212
+ mapChainIdToNetworkName(chainIdOrNetworkName) {
213
+ if (chainIdOrNetworkName === constants.StarknetChainId.SN_MAIN ||
214
+ chainIdOrNetworkName === constants.NetworkName.SN_MAIN) {
215
+ return constants.NetworkName.SN_MAIN;
216
+ }
217
+ else if (chainIdOrNetworkName === constants.StarknetChainId.SN_SEPOLIA ||
218
+ chainIdOrNetworkName === constants.NetworkName.SN_SEPOLIA) {
219
+ return constants.NetworkName.SN_SEPOLIA;
220
+ }
221
+ else {
222
+ this.logger.error('Unknown chainId', chainIdOrNetworkName);
223
+ return undefined;
224
+ }
225
+ }
226
+ }
227
+
228
+ export { StarknetWalletConnector };
package/src/index.cjs CHANGED
@@ -3,28 +3,29 @@
3
3
 
4
4
  Object.defineProperty(exports, '__esModule', { value: true });
5
5
 
6
- var argentx = require('./wallets/argentx.cjs');
7
- var braavos = require('./wallets/braavos.cjs');
8
- var argentxMobile = require('./wallets/argentxMobile.cjs');
9
- var argentxWeb = require('./wallets/argentxWeb.cjs');
10
- var bitget = require('./wallets/bitget.cjs');
11
- var okx = require('./wallets/okx.cjs');
12
- var metamask = require('./wallets/metamask.cjs');
6
+ var assertPackageVersion = require('@dynamic-labs/assert-package-version');
7
+ var _package = require('../package.cjs');
8
+ var argentx = require('./wallets/argent/injected/argentx.cjs');
9
+ var argentMobile = require('./wallets/argent/argentMobile/argentMobile.cjs');
10
+ var webwallet = require('./wallets/argent/webwallet/webwallet.cjs');
11
+ var fetchStarknetInjectedWalletConnectors = require('./wallets/injected/fetchStarknetInjectedWalletConnectors.cjs');
13
12
  require('@dynamic-labs/starknet-core');
14
13
  var StarknetWallet = require('./wallet/StarknetWallet.cjs');
15
14
  var isStarknetWallet = require('./wallet/isStarknetWallet/isStarknetWallet.cjs');
15
+ var StarknetWalletConnector = require('./StarknetWalletConnector.cjs');
16
16
 
17
17
  /* eslint-disable @typescript-eslint/no-unused-vars */
18
+ assertPackageVersion.assertPackageVersion('@dynamic-labs/starknet', _package.version);
18
19
  const StarknetWalletConnectors = (props) => [
20
+ ...fetchStarknetInjectedWalletConnectors.fetchStarknetInjectedWalletConnectors(props),
19
21
  argentx.ArgentX,
20
- braavos.Braavos,
21
- argentxMobile.ArgentXMobile,
22
- argentxWeb.ArgentXWeb,
23
- okx.Okx,
24
- bitget.Bitget,
25
- metamask.MetaMask,
22
+ argentMobile.ArgentMobile,
23
+ webwallet.WebWallet,
24
+ // TODO(starknet-v6): Add these back once they support v6
25
+ // MetaMask,
26
26
  ];
27
27
 
28
28
  exports.StarknetWallet = StarknetWallet.StarknetWallet;
29
29
  exports.isStarknetWallet = isStarknetWallet.isStarknetWallet;
30
+ exports.StarknetWalletConnector = StarknetWalletConnector.StarknetWalletConnector;
30
31
  exports.StarknetWalletConnectors = StarknetWalletConnectors;
package/src/index.d.ts CHANGED
@@ -1,9 +1,17 @@
1
- import { ArgentX } from './wallets/argentx';
1
+ import { WebWallet } from './wallets/argent/webwallet/webwallet';
2
+ import type { ArgentMobileWalletConnectorType } from './wallets/argent/argentMobile/argentMobile';
3
+ import type { WebWalletConnectorType } from './wallets/argent/webwallet/webwallet';
2
4
  import '@dynamic-labs/starknet-core';
3
- export declare const StarknetWalletConnectors: (props: any) => (typeof ArgentX)[];
4
- export type { StarknetWalletConnectorType } from './starknetWalletConnector';
5
- export type { ArgentXWalletConnectorType } from './wallets/argentx';
6
- export type { BraavosWalletConnectorType } from './wallets/braavos';
7
- export type { ArgentXMobileWalletConnectorType } from './wallets/argentxMobile';
8
- export type { ArgentXWebWalletConnectorType } from './wallets/argentxWeb';
5
+ export declare const StarknetWalletConnectors: (props: any) => (import("dist/packages/wallet-connector-core/src").WalletConnectorConstructor | typeof WebWallet)[];
6
+ export type { StarknetWalletConnectorType } from './StarknetWalletConnector';
7
+ export type { ArgentXWalletConnectorType } from './wallets/argent/injected/argentx';
8
+ export type {
9
+ /** Deprecated. Use ArgentMobileWalletConnectorType */
10
+ ArgentMobileWalletConnectorType as ArgentXMobileWalletConnectorType, };
11
+ export type { ArgentMobileWalletConnectorType };
12
+ export type {
13
+ /** Deprecated. Use WebWalletConnectorType */
14
+ WebWalletConnectorType as ArgentXWebWalletConnectorType, };
15
+ export type { WebWalletConnectorType };
9
16
  export { StarknetWallet, isStarknetWallet } from './wallet';
17
+ export { StarknetWalletConnector } from './StarknetWalletConnector';
package/src/index.js CHANGED
@@ -1,24 +1,24 @@
1
1
  'use client'
2
- import { ArgentX } from './wallets/argentx.js';
3
- import { Braavos } from './wallets/braavos.js';
4
- import { ArgentXMobile } from './wallets/argentxMobile.js';
5
- import { ArgentXWeb } from './wallets/argentxWeb.js';
6
- import { Bitget } from './wallets/bitget.js';
7
- import { Okx } from './wallets/okx.js';
8
- import { MetaMask } from './wallets/metamask.js';
2
+ import { assertPackageVersion } from '@dynamic-labs/assert-package-version';
3
+ import { version } from '../package.js';
4
+ import { ArgentX } from './wallets/argent/injected/argentx.js';
5
+ import { ArgentMobile } from './wallets/argent/argentMobile/argentMobile.js';
6
+ import { WebWallet } from './wallets/argent/webwallet/webwallet.js';
7
+ import { fetchStarknetInjectedWalletConnectors } from './wallets/injected/fetchStarknetInjectedWalletConnectors.js';
9
8
  import '@dynamic-labs/starknet-core';
10
9
  export { StarknetWallet } from './wallet/StarknetWallet.js';
11
10
  export { isStarknetWallet } from './wallet/isStarknetWallet/isStarknetWallet.js';
11
+ export { StarknetWalletConnector } from './StarknetWalletConnector.js';
12
12
 
13
13
  /* eslint-disable @typescript-eslint/no-unused-vars */
14
+ assertPackageVersion('@dynamic-labs/starknet', version);
14
15
  const StarknetWalletConnectors = (props) => [
16
+ ...fetchStarknetInjectedWalletConnectors(props),
15
17
  ArgentX,
16
- Braavos,
17
- ArgentXMobile,
18
- ArgentXWeb,
19
- Okx,
20
- Bitget,
21
- MetaMask,
18
+ ArgentMobile,
19
+ WebWallet,
20
+ // TODO(starknet-v6): Add these back once they support v6
21
+ // MetaMask,
22
22
  ];
23
23
 
24
24
  export { StarknetWalletConnectors };
package/src/types.d.ts CHANGED
@@ -1,11 +1,26 @@
1
- import type { StarknetWindowObject } from 'get-starknet-core';
2
- export type StarknetWalletKey = 'braavos' | 'argentX' | 'argentXMobile' | 'argentWebWallet' | 'okxwallet' | 'bitkeep' | 'metamask_snap';
3
- export type StarknetWindowKey = `starknet_${StarknetWalletKey}` | 'starknet';
4
- type StarknetWindow = {
5
- [key in StarknetWindowKey]: StarknetWindowObject;
6
- };
7
- declare global {
8
- interface Window extends StarknetWindow {
9
- }
10
- }
11
- export {};
1
+ import { StarknetWindowObject } from '@starknet-io/types-js';
2
+ import { IChainRpcProviders } from '@dynamic-labs/rpc-providers';
3
+ import { NetworkConfiguration } from '@dynamic-labs/sdk-api-core';
4
+ import { WalletBookSchema, WalletSchema } from '@dynamic-labs/wallet-book';
5
+ import { WalletMetadata } from '@dynamic-labs/wallet-connector-core';
6
+ /** Models the currently active Starknet wallet data */
7
+ export type WalletData = {
8
+ account: string | undefined;
9
+ chainId: bigint | undefined;
10
+ };
11
+ /** Options to pass to the prompt call which triggers a connection to a wallet */
12
+ export type PromptOptions = {
13
+ /** Whether or not a wallet popup is desired */
14
+ silently: boolean;
15
+ };
16
+ export type PromptResult = {
17
+ wallet: StarknetWindowObject | undefined;
18
+ data: WalletData | undefined;
19
+ };
20
+ export type StarknetWalletConnectorProps = {
21
+ chainRpcProviders: IChainRpcProviders;
22
+ starknetNetworks: NetworkConfiguration[];
23
+ walletBook: WalletBookSchema;
24
+ walletBookWallet: WalletSchema;
25
+ metadata?: WalletMetadata;
26
+ };
@@ -30,7 +30,7 @@ const defaultTypedData = {
30
30
  ],
31
31
  },
32
32
  };
33
- const formatTypedDataMessage = (inputMessage, chainId = starknet.constants.NetworkName.SN_MAIN) => {
33
+ const formatTypedDataMessage = (inputMessage, chainId = starknet.constants.StarknetChainId.SN_MAIN) => {
34
34
  let nonce, domain;
35
35
  try {
36
36
  const { nonce: parsedNonce, domain: parsedDomain } = JSON.parse(inputMessage);
@@ -1,2 +1,2 @@
1
1
  import { TypedData, constants } from 'starknet';
2
- export declare const formatTypedDataMessage: (inputMessage: string, chainId?: constants.NetworkName) => TypedData;
2
+ export declare const formatTypedDataMessage: (inputMessage: string, chainId?: constants.StarknetChainId) => TypedData;
@@ -26,7 +26,7 @@ const defaultTypedData = {
26
26
  ],
27
27
  },
28
28
  };
29
- const formatTypedDataMessage = (inputMessage, chainId = constants.NetworkName.SN_MAIN) => {
29
+ const formatTypedDataMessage = (inputMessage, chainId = constants.StarknetChainId.SN_MAIN) => {
30
30
  let nonce, domain;
31
31
  try {
32
32
  const { nonce: parsedNonce, domain: parsedDomain } = JSON.parse(inputMessage);
@@ -1,8 +1,8 @@
1
- import { StarknetWindowObject } from 'get-starknet-core';
1
+ import { StarknetWindowObject } from '@starknet-io/types-js';
2
2
  import { IEthereum } from '@dynamic-labs/utils';
3
3
  /**
4
4
  *
5
5
  * @param {IEthereum} provider the metamask window provider object
6
6
  * @returns {StarknetWindowObject} the metamask provider wrapper formed into starknet window object
7
7
  */
8
- export declare const createMetaMaskProviderWrapper: (provider: IEthereum) => StarknetWindowObject;
8
+ export declare const createMetaMaskProviderWrapper: (provider: IEthereum) => Promise<StarknetWindowObject | undefined>;
@@ -24,9 +24,6 @@ class StarknetWallet extends walletConnectorCore.Wallet {
24
24
  getProvider() {
25
25
  return _tslib.__awaiter(this, void 0, void 0, function* () {
26
26
  const provider = yield this._connector.getProvider();
27
- if (!provider) {
28
- throw new Error('unable to retrieve Starknet provider');
29
- }
30
27
  utils.wrapMethodWithCallback(provider, 'callContract', (originalCallContract, call, blockIdentifier) => _tslib.__awaiter(this, void 0, void 0, function* () {
31
28
  yield this.sync();
32
29
  return originalCallContract(call, blockIdentifier);
@@ -1,7 +1,7 @@
1
- import { AccountInterface, ProviderInterface } from 'starknet';
1
+ import { RpcProvider, WalletAccount } from 'starknet';
2
2
  import { Wallet } from '@dynamic-labs/wallet-connector-core';
3
- import StarknetWalletConnector from '../starknetWalletConnector';
3
+ import { StarknetWalletConnector } from '../StarknetWalletConnector';
4
4
  export declare class StarknetWallet extends Wallet<StarknetWalletConnector> {
5
- getWalletAccount(): Promise<AccountInterface>;
6
- getProvider(): Promise<ProviderInterface>;
5
+ getWalletAccount(): Promise<WalletAccount>;
6
+ getProvider(): Promise<RpcProvider>;
7
7
  }
@@ -20,9 +20,6 @@ class StarknetWallet extends Wallet {
20
20
  getProvider() {
21
21
  return __awaiter(this, void 0, void 0, function* () {
22
22
  const provider = yield this._connector.getProvider();
23
- if (!provider) {
24
- throw new Error('unable to retrieve Starknet provider');
25
- }
26
23
  wrapMethodWithCallback(provider, 'callContract', (originalCallContract, call, blockIdentifier) => __awaiter(this, void 0, void 0, function* () {
27
24
  yield this.sync();
28
25
  return originalCallContract(call, blockIdentifier);
@@ -0,0 +1,73 @@
1
+ 'use client'
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ var _tslib = require('../../../../_virtual/_tslib.cjs');
7
+ var starknetkit = require('starknetkit');
8
+ var argentMobile = require('starknetkit/argentMobile');
9
+ var starknet = require('starknet');
10
+ var base = require('../base.cjs');
11
+
12
+ class ArgentMobile extends base.ArgentBase {
13
+ constructor(opts) {
14
+ super('Argent X - Mobile', 'argentXMobile', opts);
15
+ this.canConnectViaCustodialService = true;
16
+ this.overrideKey = 'argentxmobile';
17
+ this.projectId = opts.projectId;
18
+ this.appName = opts.appName;
19
+ this.appLogoUrls = opts.appLogoUrl
20
+ ? [opts.appLogoUrl]
21
+ : undefined;
22
+ }
23
+ isInstalledOnBrowser() {
24
+ return false;
25
+ }
26
+ filter() {
27
+ if (super.filter()) {
28
+ return !argentMobile.isInArgentMobileAppBrowser();
29
+ }
30
+ return false;
31
+ }
32
+ prompt(options) {
33
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
34
+ const { connectorData, wallet } = yield starknetkit.connect({
35
+ connectors: [
36
+ new argentMobile.ArgentMobileBaseConnector({
37
+ chainId: this.getNetworkName() || starknet.constants.NetworkName.SN_MAIN,
38
+ dappName: this.appName,
39
+ icons: this.appLogoUrls,
40
+ projectId: this.projectId,
41
+ rpcUrl: this.getNodeUrl(),
42
+ url: window.location.hostname,
43
+ }),
44
+ ],
45
+ modalMode: options.silently ? 'neverAsk' : 'canAsk',
46
+ });
47
+ return {
48
+ data: {
49
+ account: connectorData === null || connectorData === void 0 ? void 0 : connectorData.account,
50
+ chainId: connectorData === null || connectorData === void 0 ? void 0 : connectorData.chainId,
51
+ },
52
+ wallet: wallet !== null && wallet !== void 0 ? wallet : undefined,
53
+ };
54
+ });
55
+ }
56
+ getNetworkName() {
57
+ const [network] = this.starknetNetworks;
58
+ if (!network) {
59
+ return undefined;
60
+ }
61
+ return this.mapChainIdToNetworkName(network.chainId);
62
+ }
63
+ getNodeUrl() {
64
+ var _a;
65
+ const [network] = this.starknetNetworks;
66
+ if (!network) {
67
+ return undefined;
68
+ }
69
+ return ((_a = network.privateCustomerRpcUrls) === null || _a === void 0 ? void 0 : _a[0]) || network.rpcUrls[0];
70
+ }
71
+ }
72
+
73
+ exports.ArgentMobile = ArgentMobile;
@@ -0,0 +1,16 @@
1
+ import { PromptOptions, PromptResult } from '../../../types';
2
+ import { ArgentBase } from '../base';
3
+ export declare class ArgentMobile extends ArgentBase {
4
+ private projectId;
5
+ private appName;
6
+ private appLogoUrls;
7
+ canConnectViaCustodialService: boolean;
8
+ overrideKey: string;
9
+ constructor(opts: any);
10
+ isInstalledOnBrowser(): boolean;
11
+ filter(): boolean;
12
+ prompt(options: PromptOptions): Promise<PromptResult>;
13
+ private getNetworkName;
14
+ private getNodeUrl;
15
+ }
16
+ export type ArgentMobileWalletConnectorType = ArgentMobile;
@@ -0,0 +1,69 @@
1
+ 'use client'
2
+ import { __awaiter } from '../../../../_virtual/_tslib.js';
3
+ import { connect } from 'starknetkit';
4
+ import { isInArgentMobileAppBrowser, ArgentMobileBaseConnector } from 'starknetkit/argentMobile';
5
+ import { constants } from 'starknet';
6
+ import { ArgentBase } from '../base.js';
7
+
8
+ class ArgentMobile extends ArgentBase {
9
+ constructor(opts) {
10
+ super('Argent X - Mobile', 'argentXMobile', opts);
11
+ this.canConnectViaCustodialService = true;
12
+ this.overrideKey = 'argentxmobile';
13
+ this.projectId = opts.projectId;
14
+ this.appName = opts.appName;
15
+ this.appLogoUrls = opts.appLogoUrl
16
+ ? [opts.appLogoUrl]
17
+ : undefined;
18
+ }
19
+ isInstalledOnBrowser() {
20
+ return false;
21
+ }
22
+ filter() {
23
+ if (super.filter()) {
24
+ return !isInArgentMobileAppBrowser();
25
+ }
26
+ return false;
27
+ }
28
+ prompt(options) {
29
+ return __awaiter(this, void 0, void 0, function* () {
30
+ const { connectorData, wallet } = yield connect({
31
+ connectors: [
32
+ new ArgentMobileBaseConnector({
33
+ chainId: this.getNetworkName() || constants.NetworkName.SN_MAIN,
34
+ dappName: this.appName,
35
+ icons: this.appLogoUrls,
36
+ projectId: this.projectId,
37
+ rpcUrl: this.getNodeUrl(),
38
+ url: window.location.hostname,
39
+ }),
40
+ ],
41
+ modalMode: options.silently ? 'neverAsk' : 'canAsk',
42
+ });
43
+ return {
44
+ data: {
45
+ account: connectorData === null || connectorData === void 0 ? void 0 : connectorData.account,
46
+ chainId: connectorData === null || connectorData === void 0 ? void 0 : connectorData.chainId,
47
+ },
48
+ wallet: wallet !== null && wallet !== void 0 ? wallet : undefined,
49
+ };
50
+ });
51
+ }
52
+ getNetworkName() {
53
+ const [network] = this.starknetNetworks;
54
+ if (!network) {
55
+ return undefined;
56
+ }
57
+ return this.mapChainIdToNetworkName(network.chainId);
58
+ }
59
+ getNodeUrl() {
60
+ var _a;
61
+ const [network] = this.starknetNetworks;
62
+ if (!network) {
63
+ return undefined;
64
+ }
65
+ return ((_a = network.privateCustomerRpcUrls) === null || _a === void 0 ? void 0 : _a[0]) || network.rpcUrls[0];
66
+ }
67
+ }
68
+
69
+ export { ArgentMobile };
@@ -0,0 +1,50 @@
1
+ 'use client'
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ var _tslib = require('../../../_virtual/_tslib.cjs');
7
+ var starknetkit = require('starknetkit');
8
+ var StarknetWalletConnector = require('../../StarknetWalletConnector.cjs');
9
+
10
+ class ArgentBase extends StarknetWalletConnector.StarknetWalletConnector {
11
+ getConnectedAccounts() {
12
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
13
+ var _a;
14
+ if ((_a = this.walletData) === null || _a === void 0 ? void 0 : _a.account) {
15
+ return [this.walletData.account];
16
+ }
17
+ let data;
18
+ let wallet;
19
+ this.logger.debug('[getConnectedAccounts] No existing account, attempting to silently connect');
20
+ try {
21
+ ({ data, wallet } = yield this.prompt({
22
+ silently: true,
23
+ }));
24
+ }
25
+ catch (error) {
26
+ this.logger.debug(`[getConnectedAccounts] Silent connect errored out: ${error}`);
27
+ return [];
28
+ }
29
+ this.logger.debug(`[getConnectedAccounts] Connect returned account: ${data === null || data === void 0 ? void 0 : data.account}`);
30
+ if (!(data === null || data === void 0 ? void 0 : data.account) || !wallet) {
31
+ return [];
32
+ }
33
+ this.walletData = data;
34
+ this.wallet = wallet;
35
+ this.setupEventListeners();
36
+ return [data.account];
37
+ });
38
+ }
39
+ endSession() {
40
+ const _super = Object.create(null, {
41
+ endSession: { get: () => super.endSession }
42
+ });
43
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
44
+ yield _super.endSession.call(this);
45
+ yield starknetkit.disconnect();
46
+ });
47
+ }
48
+ }
49
+
50
+ exports.ArgentBase = ArgentBase;