@dynamic-labs/starknet 1.1.0-alpha.12 → 1.1.0-alpha.13

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,22 @@
1
1
 
2
+ ## [1.1.0-alpha.13](https://github.com/dynamic-labs/DynamicAuth/compare/v1.1.0-alpha.12...v1.1.0-alpha.13) (2024-01-23)
3
+
4
+
5
+ ### Features
6
+
7
+ * add createWalletClientFromWallet helper function ([#4416](https://github.com/dynamic-labs/DynamicAuth/issues/4416)) ([b384898](https://github.com/dynamic-labs/DynamicAuth/commit/b384898061bb3f9b38b2ed670b6650cfc1d4b429))
8
+ * add hardware wallets to wallet book ([#4445](https://github.com/dynamic-labs/DynamicAuth/issues/4445)) ([66c0f5b](https://github.com/dynamic-labs/DynamicAuth/commit/66c0f5b29a6a700099bb95a6f7622f6178e0bccf))
9
+ * add support for Argent Web and Mobile ([#4328](https://github.com/dynamic-labs/DynamicAuth/issues/4328)) ([bce20b8](https://github.com/dynamic-labs/DynamicAuth/commit/bce20b8f35a8630f2621f53a541a1acb06a38fc0))
10
+ * enable ledger for glow, solflare and backpack ([#4392](https://github.com/dynamic-labs/DynamicAuth/issues/4392)) ([fa7b992](https://github.com/dynamic-labs/DynamicAuth/commit/fa7b992f87ebc43560f87b43ac56f2cd9909b306))
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * breaking changes script ([#4440](https://github.com/dynamic-labs/DynamicAuth/issues/4440)) ([446173d](https://github.com/dynamic-labs/DynamicAuth/commit/446173d074d652d81856c6412e304b46b1565320))
16
+ * broken help icon in create passkey view ([#4428](https://github.com/dynamic-labs/DynamicAuth/issues/4428)) ([e0ffc02](https://github.com/dynamic-labs/DynamicAuth/commit/e0ffc02ffea34b7ac3198ff6e1baf7f9907acddd))
17
+ * infinite loop when connecting with trust wallet ([#4448](https://github.com/dynamic-labs/DynamicAuth/issues/4448)) ([4e20edf](https://github.com/dynamic-labs/DynamicAuth/commit/4e20edf9abaabf20e5e9f9167b44d7f691e844f1))
18
+ * render wagmi elements based on react version ([#4453](https://github.com/dynamic-labs/DynamicAuth/issues/4453)) ([43c624c](https://github.com/dynamic-labs/DynamicAuth/commit/43c624ca996b0c51de1454910f19fdf908149938))
19
+
2
20
  ## [1.1.0-alpha.12](https://github.com/dynamic-labs/DynamicAuth/compare/v1.1.0-alpha.11...v1.1.0-alpha.12) (2024-01-18)
3
21
 
4
22
 
@@ -25,6 +25,11 @@ function __awaiter(thisArg, _arguments, P, generator) {
25
25
  function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
26
26
  step((generator = generator.apply(thisArg, _arguments || [])).next());
27
27
  });
28
- }
28
+ }
29
+
30
+ typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
31
+ var e = new Error(message);
32
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
33
+ };
29
34
 
30
35
  exports.__awaiter = __awaiter;
@@ -21,6 +21,11 @@ function __awaiter(thisArg, _arguments, P, generator) {
21
21
  function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
22
22
  step((generator = generator.apply(thisArg, _arguments || [])).next());
23
23
  });
24
- }
24
+ }
25
+
26
+ typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
27
+ var e = new Error(message);
28
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
29
+ };
25
30
 
26
31
  export { __awaiter };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dynamic-labs/starknet",
3
- "version": "1.1.0-alpha.12",
3
+ "version": "1.1.0-alpha.13",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/dynamic-labs/DynamicAuth.git",
@@ -29,12 +29,13 @@
29
29
  "starknet": "^5.25.0",
30
30
  "get-starknet-core": "^3.2.0",
31
31
  "text-encoding": "0.7.0",
32
- "@dynamic-labs/sdk-api": "0.0.349",
33
- "@dynamic-labs/rpc-providers": "1.1.0-alpha.12",
34
- "@dynamic-labs/types": "1.1.0-alpha.12",
35
- "@dynamic-labs/utils": "1.1.0-alpha.12",
36
- "@dynamic-labs/wallet-book": "1.1.0-alpha.12",
37
- "@dynamic-labs/wallet-connector-core": "1.1.0-alpha.12"
32
+ "starknetkit": "1.1.3",
33
+ "@dynamic-labs/sdk-api": "0.0.352",
34
+ "@dynamic-labs/rpc-providers": "1.1.0-alpha.13",
35
+ "@dynamic-labs/types": "1.1.0-alpha.13",
36
+ "@dynamic-labs/utils": "1.1.0-alpha.13",
37
+ "@dynamic-labs/wallet-book": "1.1.0-alpha.13",
38
+ "@dynamic-labs/wallet-connector-core": "1.1.0-alpha.13"
38
39
  },
39
40
  "peerDependencies": {}
40
41
  }
package/src/index.cjs CHANGED
@@ -4,8 +4,15 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var argentx = require('./wallets/argentx.cjs');
6
6
  var braavos = require('./wallets/braavos.cjs');
7
+ var argentxMobile = require('./wallets/argentxMobile.cjs');
8
+ var argentxWeb = require('./wallets/argentxWeb.cjs');
7
9
 
8
10
  /* eslint-disable @typescript-eslint/no-unused-vars */
9
- const StarknetWalletConnectors = (props) => [argentx.ArgentX, braavos.Braavos];
11
+ const StarknetWalletConnectors = (props) => [
12
+ argentx.ArgentX,
13
+ braavos.Braavos,
14
+ argentxMobile.ArgentXMobile,
15
+ argentxWeb.ArgentXWeb,
16
+ ];
10
17
 
11
18
  exports.StarknetWalletConnectors = StarknetWalletConnectors;
package/src/index.d.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  import { ArgentX } from './wallets/argentx';
2
- export declare const StarknetWalletConnectors: (props: unknown) => (typeof ArgentX)[];
2
+ export declare const StarknetWalletConnectors: (props: any) => (typeof ArgentX)[];
3
3
  export type { StarknetWalletConnectorType } from './starknetWalletConnector';
4
4
  export type { ArgentXWalletConnectorType } from './wallets/argentx';
5
5
  export type { BraavosWalletConnectorType } from './wallets/braavos';
6
+ export type { ArgentXMobileWalletConnectorType } from './wallets/argentxMobile';
7
+ export type { ArgentXWebWalletConnectorType } from './wallets/argentxWeb';
package/src/index.js CHANGED
@@ -1,7 +1,14 @@
1
1
  import { ArgentX } from './wallets/argentx.js';
2
2
  import { Braavos } from './wallets/braavos.js';
3
+ import { ArgentXMobile } from './wallets/argentxMobile.js';
4
+ import { ArgentXWeb } from './wallets/argentxWeb.js';
3
5
 
4
6
  /* eslint-disable @typescript-eslint/no-unused-vars */
5
- const StarknetWalletConnectors = (props) => [ArgentX, Braavos];
7
+ const StarknetWalletConnectors = (props) => [
8
+ ArgentX,
9
+ Braavos,
10
+ ArgentXMobile,
11
+ ArgentXWeb,
12
+ ];
6
13
 
7
14
  export { StarknetWalletConnectors };
@@ -14,11 +14,11 @@ var convertors = require('./utils/convertors.cjs');
14
14
 
15
15
  const ACCOUNT_CHANGED_EVENT_LISTENER = 'accountsChanged';
16
16
  const NETWORK_CHANGED_EVENT_LISTENER = 'networkChanged';
17
- const STARKNET_VERSION = 'v5';
18
17
  class StarknetWalletConnector extends walletConnectorCore.WalletConnectorBase {
19
18
  constructor(name, windowKey, opts) {
20
19
  var _a;
21
20
  super(opts);
21
+ this.STARKNET_VERSION = 'v5';
22
22
  this.connectedChain = 'STARK';
23
23
  this.supportedChains = ['STARK'];
24
24
  this.switchNetworkOnlyFromWallet = true;
@@ -65,7 +65,7 @@ class StarknetWalletConnector extends walletConnectorCore.WalletConnectorBase {
65
65
  });
66
66
  }
67
67
  /**
68
- * returns stakrnet wallet network id
68
+ * returns starknet wallet network id
69
69
  */
70
70
  getNetwork() {
71
71
  var _a;
@@ -75,7 +75,7 @@ class StarknetWalletConnector extends walletConnectorCore.WalletConnectorBase {
75
75
  return Promise.resolve(undefined);
76
76
  }
77
77
  if (!wallet.isConnected) {
78
- yield wallet.enable({ starknetVersion: STARKNET_VERSION });
78
+ yield wallet.enable({ starknetVersion: this.STARKNET_VERSION });
79
79
  }
80
80
  return Promise.resolve((_a = wallet.provider) === null || _a === void 0 ? void 0 : _a.getChainId());
81
81
  });
@@ -85,7 +85,7 @@ class StarknetWalletConnector extends walletConnectorCore.WalletConnectorBase {
85
85
  const wallet = this.getWallet();
86
86
  try {
87
87
  if (wallet && !wallet.isConnected) {
88
- yield wallet.enable({ starknetVersion: STARKNET_VERSION });
88
+ yield wallet.enable({ starknetVersion: this.STARKNET_VERSION });
89
89
  }
90
90
  }
91
91
  catch (err) {
@@ -96,11 +96,6 @@ class StarknetWalletConnector extends walletConnectorCore.WalletConnectorBase {
96
96
  fetchPublicAddress() {
97
97
  return _tslib.__awaiter(this, void 0, void 0, function* () {
98
98
  const wallet = this.getWallet();
99
- /**
100
- * Fetches public address. Uses `isPreauthorized` as a temporary solution to ensure
101
- * the wallets store's data is read. Without it, an empty string may be returned due
102
- * to a possible reliance on its side-effects for data refreshing.
103
- */
104
99
  yield (wallet === null || wallet === void 0 ? void 0 : wallet.isPreauthorized());
105
100
  yield this.connect();
106
101
  return Promise.resolve(wallet === null || wallet === void 0 ? void 0 : wallet.selectedAddress);
@@ -120,8 +115,9 @@ class StarknetWalletConnector extends walletConnectorCore.WalletConnectorBase {
120
115
  }
121
116
  signMessage(messageToSign) {
122
117
  return _tslib.__awaiter(this, void 0, void 0, function* () {
123
- const wallet = this.getWallet();
118
+ // FetchPublicAddress also handles the connection to the wallet this is why we call it before getWallet.
124
119
  const walletAddress = yield this.fetchPublicAddress();
120
+ const wallet = this.getWallet();
125
121
  if (!walletAddress || !wallet) {
126
122
  walletConnectorCore.logger.error('Could not fetch wallet address for signing message');
127
123
  return undefined;
@@ -149,6 +145,7 @@ class StarknetWalletConnector extends walletConnectorCore.WalletConnectorBase {
149
145
  return (Number(starknet.cairo.uint256(balance.low).low) / 1e18).toFixed(6);
150
146
  }
151
147
  catch (error) {
148
+ walletConnectorCore.logger.error(error);
152
149
  throw new utils.DynamicError('Something went wrong');
153
150
  }
154
151
  });
@@ -250,6 +247,21 @@ class StarknetWalletConnector extends walletConnectorCore.WalletConnectorBase {
250
247
  return undefined;
251
248
  }
252
249
  }
250
+ mapChainIdToNetworkName(chainId) {
251
+ if (chainId === starknet.constants.StarknetChainId.SN_MAIN) {
252
+ return starknet.constants.NetworkName.SN_MAIN;
253
+ }
254
+ else if (chainId === starknet.constants.StarknetChainId.SN_GOERLI) {
255
+ return starknet.constants.NetworkName.SN_GOERLI;
256
+ }
257
+ else if (chainId === starknet.constants.StarknetChainId.SN_SEPOLIA) {
258
+ return starknet.constants.NetworkName.SN_SEPOLIA;
259
+ }
260
+ else {
261
+ walletConnectorCore.logger.error('Unknown chainId', chainId);
262
+ return undefined;
263
+ }
264
+ }
253
265
  }
254
266
 
255
267
  exports.ACCOUNT_CHANGED_EVENT_LISTENER = ACCOUNT_CHANGED_EVENT_LISTENER;
@@ -15,11 +15,11 @@ type NetworkChangeEventHandler = (network: {
15
15
  export declare const ACCOUNT_CHANGED_EVENT_LISTENER = "accountsChanged";
16
16
  export declare const NETWORK_CHANGED_EVENT_LISTENER = "networkChanged";
17
17
  declare abstract class StarknetWalletConnector extends WalletConnectorBase {
18
+ STARKNET_VERSION: 'v5' | 'v4';
18
19
  name: string;
19
20
  windowKey: StarknetWalletKey;
20
21
  connectedChain: Chain;
21
22
  supportedChains: Chain[];
22
- wallet: StarknetWindowObject | undefined;
23
23
  handleAccountChange: AccountChangeEventHandler | undefined;
24
24
  handleNetworkChange: NetworkChangeEventHandler | undefined;
25
25
  switchNetworkOnlyFromWallet: boolean;
@@ -32,7 +32,7 @@ declare abstract class StarknetWalletConnector extends WalletConnectorBase {
32
32
  createProviderFromConfig(networks: GenericNetwork[]): StarknetRpcProvider[];
33
33
  getPublicClient(): Promise<RpcProvider | undefined>;
34
34
  /**
35
- * returns stakrnet wallet network id
35
+ * returns starknet wallet network id
36
36
  */
37
37
  getNetwork(): Promise<any>;
38
38
  connect(): Promise<void>;
@@ -48,6 +48,7 @@ declare abstract class StarknetWalletConnector extends WalletConnectorBase {
48
48
  setupEventListeners(): void;
49
49
  teardownEventListeners(): Promise<void>;
50
50
  mapNetworkNameToChainId(networkName: string): constants.StarknetChainId | undefined;
51
+ mapChainIdToNetworkName(chainId: string): constants.NetworkName | undefined;
51
52
  }
52
53
  export type StarknetWalletConnectorType = StarknetWalletConnector;
53
54
  export default StarknetWalletConnector;
@@ -10,11 +10,11 @@ import { formatTypedDataMessage } from './utils/convertors.js';
10
10
 
11
11
  const ACCOUNT_CHANGED_EVENT_LISTENER = 'accountsChanged';
12
12
  const NETWORK_CHANGED_EVENT_LISTENER = 'networkChanged';
13
- const STARKNET_VERSION = 'v5';
14
13
  class StarknetWalletConnector extends WalletConnectorBase {
15
14
  constructor(name, windowKey, opts) {
16
15
  var _a;
17
16
  super(opts);
17
+ this.STARKNET_VERSION = 'v5';
18
18
  this.connectedChain = 'STARK';
19
19
  this.supportedChains = ['STARK'];
20
20
  this.switchNetworkOnlyFromWallet = true;
@@ -61,7 +61,7 @@ class StarknetWalletConnector extends WalletConnectorBase {
61
61
  });
62
62
  }
63
63
  /**
64
- * returns stakrnet wallet network id
64
+ * returns starknet wallet network id
65
65
  */
66
66
  getNetwork() {
67
67
  var _a;
@@ -71,7 +71,7 @@ class StarknetWalletConnector extends WalletConnectorBase {
71
71
  return Promise.resolve(undefined);
72
72
  }
73
73
  if (!wallet.isConnected) {
74
- yield wallet.enable({ starknetVersion: STARKNET_VERSION });
74
+ yield wallet.enable({ starknetVersion: this.STARKNET_VERSION });
75
75
  }
76
76
  return Promise.resolve((_a = wallet.provider) === null || _a === void 0 ? void 0 : _a.getChainId());
77
77
  });
@@ -81,7 +81,7 @@ class StarknetWalletConnector extends WalletConnectorBase {
81
81
  const wallet = this.getWallet();
82
82
  try {
83
83
  if (wallet && !wallet.isConnected) {
84
- yield wallet.enable({ starknetVersion: STARKNET_VERSION });
84
+ yield wallet.enable({ starknetVersion: this.STARKNET_VERSION });
85
85
  }
86
86
  }
87
87
  catch (err) {
@@ -92,11 +92,6 @@ class StarknetWalletConnector extends WalletConnectorBase {
92
92
  fetchPublicAddress() {
93
93
  return __awaiter(this, void 0, void 0, function* () {
94
94
  const wallet = this.getWallet();
95
- /**
96
- * Fetches public address. Uses `isPreauthorized` as a temporary solution to ensure
97
- * the wallets store's data is read. Without it, an empty string may be returned due
98
- * to a possible reliance on its side-effects for data refreshing.
99
- */
100
95
  yield (wallet === null || wallet === void 0 ? void 0 : wallet.isPreauthorized());
101
96
  yield this.connect();
102
97
  return Promise.resolve(wallet === null || wallet === void 0 ? void 0 : wallet.selectedAddress);
@@ -116,8 +111,9 @@ class StarknetWalletConnector extends WalletConnectorBase {
116
111
  }
117
112
  signMessage(messageToSign) {
118
113
  return __awaiter(this, void 0, void 0, function* () {
119
- const wallet = this.getWallet();
114
+ // FetchPublicAddress also handles the connection to the wallet this is why we call it before getWallet.
120
115
  const walletAddress = yield this.fetchPublicAddress();
116
+ const wallet = this.getWallet();
121
117
  if (!walletAddress || !wallet) {
122
118
  logger.error('Could not fetch wallet address for signing message');
123
119
  return undefined;
@@ -145,6 +141,7 @@ class StarknetWalletConnector extends WalletConnectorBase {
145
141
  return (Number(cairo.uint256(balance.low).low) / 1e18).toFixed(6);
146
142
  }
147
143
  catch (error) {
144
+ logger.error(error);
148
145
  throw new DynamicError('Something went wrong');
149
146
  }
150
147
  });
@@ -246,6 +243,21 @@ class StarknetWalletConnector extends WalletConnectorBase {
246
243
  return undefined;
247
244
  }
248
245
  }
246
+ mapChainIdToNetworkName(chainId) {
247
+ if (chainId === constants.StarknetChainId.SN_MAIN) {
248
+ return constants.NetworkName.SN_MAIN;
249
+ }
250
+ else if (chainId === constants.StarknetChainId.SN_GOERLI) {
251
+ return constants.NetworkName.SN_GOERLI;
252
+ }
253
+ else if (chainId === constants.StarknetChainId.SN_SEPOLIA) {
254
+ return constants.NetworkName.SN_SEPOLIA;
255
+ }
256
+ else {
257
+ logger.error('Unknown chainId', chainId);
258
+ return undefined;
259
+ }
260
+ }
249
261
  }
250
262
 
251
263
  export { ACCOUNT_CHANGED_EVENT_LISTENER, NETWORK_CHANGED_EVENT_LISTENER, StarknetWalletConnector as default };
package/src/types.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { StarknetWindowObject } from 'get-starknet-core';
2
- export type StarknetWalletKey = 'braavos' | 'argentX';
2
+ export type StarknetWalletKey = 'braavos' | 'argentX' | 'argentXMobile' | 'argentWebWallet';
3
3
  export type StarknetWindowKey = `starknet_${StarknetWalletKey}` | 'starknet';
4
4
  type StarknetWindow = {
5
5
  [key in StarknetWindowKey]: StarknetWindowObject;
@@ -30,13 +30,23 @@ const defaultTypedData = {
30
30
  },
31
31
  };
32
32
  const formatTypedDataMessage = (inputMessage, chainId = starknet.constants.NetworkName.SN_MAIN) => {
33
- const { nonce, domain } = JSON.parse(inputMessage);
33
+ let nonce, domain;
34
+ try {
35
+ const { nonce: parsedNonce, domain: parsedDomain } = JSON.parse(inputMessage);
36
+ nonce = parsedNonce;
37
+ domain = parsedDomain;
38
+ }
39
+ catch (e) {
40
+ nonce = inputMessage;
41
+ domain = 'domain';
42
+ }
43
+ // Starknet strings could be at most 31 chars long
34
44
  const message = {
35
45
  message: nonce.substring(0, 31),
36
46
  };
37
47
  return Object.assign(Object.assign({}, defaultTypedData), { domain: {
38
48
  chainId,
39
- name: domain,
49
+ name: domain.substring(0, 31),
40
50
  version: '0.0.1',
41
51
  }, message });
42
52
  };
@@ -26,13 +26,23 @@ const defaultTypedData = {
26
26
  },
27
27
  };
28
28
  const formatTypedDataMessage = (inputMessage, chainId = constants.NetworkName.SN_MAIN) => {
29
- const { nonce, domain } = JSON.parse(inputMessage);
29
+ let nonce, domain;
30
+ try {
31
+ const { nonce: parsedNonce, domain: parsedDomain } = JSON.parse(inputMessage);
32
+ nonce = parsedNonce;
33
+ domain = parsedDomain;
34
+ }
35
+ catch (e) {
36
+ nonce = inputMessage;
37
+ domain = 'domain';
38
+ }
39
+ // Starknet strings could be at most 31 chars long
30
40
  const message = {
31
41
  message: nonce.substring(0, 31),
32
42
  };
33
43
  return Object.assign(Object.assign({}, defaultTypedData), { domain: {
34
44
  chainId,
35
- name: domain,
45
+ name: domain.substring(0, 31),
36
46
  version: '0.0.1',
37
47
  }, message });
38
48
  };
@@ -0,0 +1,48 @@
1
+ 'use strict';
2
+
3
+ var _tslib = require('../../_virtual/_tslib.cjs');
4
+ var starknetkit = require('starknetkit');
5
+ var starknetWalletConnector = require('../starknetWalletConnector.cjs');
6
+
7
+ class ArgentXBase extends starknetWalletConnector["default"] {
8
+ constructor() {
9
+ super(...arguments);
10
+ this.canConnectViaCustodialService = true;
11
+ }
12
+ isInstalledOnBrowser() {
13
+ return false;
14
+ }
15
+ fetchPublicAddress() {
16
+ var _a;
17
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
18
+ yield this.connect();
19
+ return Promise.resolve((_a = this.getWallet()) === null || _a === void 0 ? void 0 : _a.selectedAddress);
20
+ });
21
+ }
22
+ endSession() {
23
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
24
+ yield starknetkit.disconnect();
25
+ this.wallet = undefined;
26
+ });
27
+ }
28
+ getWallet() {
29
+ return this.wallet;
30
+ }
31
+ getSelectedNodeUrl() {
32
+ var _a, _b;
33
+ if (!this.starknetNetworks || this.starknetNetworks.length !== 1) {
34
+ return undefined;
35
+ }
36
+ return (_b = (_a = this.starknetNetworks) === null || _a === void 0 ? void 0 : _a[0].privateCustomerRpcUrls) === null || _b === void 0 ? void 0 : _b[0];
37
+ }
38
+ getSelectedNetworkName() {
39
+ var _a;
40
+ if (!this.starknetNetworks || this.starknetNetworks.length !== 1) {
41
+ return undefined;
42
+ }
43
+ const chainId = (_a = this.starknetNetworks) === null || _a === void 0 ? void 0 : _a[0].chainId;
44
+ return this.mapChainIdToNetworkName(chainId);
45
+ }
46
+ }
47
+
48
+ module.exports = ArgentXBase;
@@ -0,0 +1,16 @@
1
+ import { StarknetWindowObject } from 'get-starknet-core';
2
+ import { constants } from 'starknet';
3
+ import { WalletConnector } from '@dynamic-labs/wallet-connector-core';
4
+ import StarknetProvider from '../starknetWalletConnector';
5
+ declare abstract class ArgentXBase extends StarknetProvider implements WalletConnector {
6
+ canConnectViaCustodialService: boolean;
7
+ wallet: StarknetWindowObject | undefined;
8
+ abstract connect(): Promise<void>;
9
+ isInstalledOnBrowser(): boolean;
10
+ fetchPublicAddress(): Promise<string | undefined>;
11
+ endSession(): Promise<void>;
12
+ getWallet(): StarknetWindowObject | undefined;
13
+ getSelectedNodeUrl(): string | undefined;
14
+ getSelectedNetworkName(): constants.NetworkName | undefined;
15
+ }
16
+ export default ArgentXBase;
@@ -0,0 +1,46 @@
1
+ import { __awaiter } from '../../_virtual/_tslib.js';
2
+ import { disconnect } from 'starknetkit';
3
+ import StarknetWalletConnector from '../starknetWalletConnector.js';
4
+
5
+ class ArgentXBase extends StarknetWalletConnector {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.canConnectViaCustodialService = true;
9
+ }
10
+ isInstalledOnBrowser() {
11
+ return false;
12
+ }
13
+ fetchPublicAddress() {
14
+ var _a;
15
+ return __awaiter(this, void 0, void 0, function* () {
16
+ yield this.connect();
17
+ return Promise.resolve((_a = this.getWallet()) === null || _a === void 0 ? void 0 : _a.selectedAddress);
18
+ });
19
+ }
20
+ endSession() {
21
+ return __awaiter(this, void 0, void 0, function* () {
22
+ yield disconnect();
23
+ this.wallet = undefined;
24
+ });
25
+ }
26
+ getWallet() {
27
+ return this.wallet;
28
+ }
29
+ getSelectedNodeUrl() {
30
+ var _a, _b;
31
+ if (!this.starknetNetworks || this.starknetNetworks.length !== 1) {
32
+ return undefined;
33
+ }
34
+ return (_b = (_a = this.starknetNetworks) === null || _a === void 0 ? void 0 : _a[0].privateCustomerRpcUrls) === null || _b === void 0 ? void 0 : _b[0];
35
+ }
36
+ getSelectedNetworkName() {
37
+ var _a;
38
+ if (!this.starknetNetworks || this.starknetNetworks.length !== 1) {
39
+ return undefined;
40
+ }
41
+ const chainId = (_a = this.starknetNetworks) === null || _a === void 0 ? void 0 : _a[0].chainId;
42
+ return this.mapChainIdToNetworkName(chainId);
43
+ }
44
+ }
45
+
46
+ export { ArgentXBase as default };
@@ -0,0 +1,92 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _tslib = require('../../_virtual/_tslib.cjs');
6
+ var starknetkit = require('starknetkit');
7
+ var argentMobile = require('starknetkit/argentMobile');
8
+ var starknet = require('starknet');
9
+ var walletConnectorCore = require('@dynamic-labs/wallet-connector-core');
10
+ var argentxBase = require('./argentxBase.cjs');
11
+
12
+ class ArgentXMobile extends argentxBase {
13
+ constructor(opts) {
14
+ super('Argent X - Mobile', 'argentXMobile', opts);
15
+ this.projectId = opts.projectId;
16
+ this.appName = opts.appName;
17
+ this.appLogoUrls = opts.appLogoUrl
18
+ ? [opts.appLogoUrl]
19
+ : undefined;
20
+ }
21
+ connect() {
22
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
23
+ try {
24
+ const nodeUrl = this.getSelectedNodeUrl();
25
+ const wallet = yield this.getWallet();
26
+ let connection;
27
+ if (this.hasValidSession()) {
28
+ if (wallet && wallet.isConnected) {
29
+ return Promise.resolve();
30
+ }
31
+ else {
32
+ connection = yield starknetkit.connect({
33
+ modalMode: 'neverAsk',
34
+ provider: new starknet.RpcProvider({ nodeUrl }),
35
+ });
36
+ }
37
+ // No valid session
38
+ }
39
+ else {
40
+ connection = yield starknetkit.connect({
41
+ connectors: [
42
+ new argentMobile.ArgentMobileConnector({
43
+ chainId: this.getSelectedNetworkName() || starknet.constants.NetworkName.SN_MAIN,
44
+ dappName: this.appName,
45
+ icons: this.appLogoUrls,
46
+ projectId: this.projectId,
47
+ provider: new starknet.RpcProvider({
48
+ nodeUrl,
49
+ }),
50
+ url: window.location.hostname,
51
+ }),
52
+ ],
53
+ });
54
+ }
55
+ if (connection && connection.wallet && connection.wallet.isConnected) {
56
+ this.wallet = connection.wallet;
57
+ }
58
+ else {
59
+ throw new Error('Failed to connect to Starknet');
60
+ }
61
+ }
62
+ catch (err) {
63
+ walletConnectorCore.logger.error('Error establishing connection to Argent Mobile', err);
64
+ return;
65
+ }
66
+ });
67
+ }
68
+ getConnectedAccounts() {
69
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
70
+ if (!this.hasValidSession()) {
71
+ return [];
72
+ }
73
+ const address = yield this.fetchPublicAddress();
74
+ if (!address)
75
+ return [];
76
+ return [address];
77
+ });
78
+ }
79
+ hasValidSession() {
80
+ var _a, _b;
81
+ const sessionItem = localStorage.getItem('wc@2:client:0.3//session');
82
+ if (sessionItem) {
83
+ const sessionItemJson = JSON.parse(sessionItem);
84
+ if ((_b = (_a = sessionItemJson[0].peer) === null || _a === void 0 ? void 0 : _a.metadata) === null || _b === void 0 ? void 0 : _b.name.includes('Argent')) {
85
+ return true;
86
+ }
87
+ }
88
+ return false;
89
+ }
90
+ }
91
+
92
+ exports.ArgentXMobile = ArgentXMobile;
@@ -0,0 +1,11 @@
1
+ import ArgentXBase from './argentxBase';
2
+ export declare class ArgentXMobile extends ArgentXBase {
3
+ projectId: string | undefined;
4
+ appName: string | undefined;
5
+ appLogoUrls: string[] | undefined;
6
+ constructor(opts: any);
7
+ connect(): Promise<void>;
8
+ getConnectedAccounts(): Promise<string[]>;
9
+ hasValidSession(): boolean;
10
+ }
11
+ export type ArgentXMobileWalletConnectorType = ArgentXMobile;
@@ -0,0 +1,88 @@
1
+ import { __awaiter } from '../../_virtual/_tslib.js';
2
+ import { connect } from 'starknetkit';
3
+ import { ArgentMobileConnector } from 'starknetkit/argentMobile';
4
+ import { RpcProvider, constants } from 'starknet';
5
+ import { logger } from '@dynamic-labs/wallet-connector-core';
6
+ import ArgentXBase from './argentxBase.js';
7
+
8
+ class ArgentXMobile extends ArgentXBase {
9
+ constructor(opts) {
10
+ super('Argent X - Mobile', 'argentXMobile', opts);
11
+ this.projectId = opts.projectId;
12
+ this.appName = opts.appName;
13
+ this.appLogoUrls = opts.appLogoUrl
14
+ ? [opts.appLogoUrl]
15
+ : undefined;
16
+ }
17
+ connect() {
18
+ return __awaiter(this, void 0, void 0, function* () {
19
+ try {
20
+ const nodeUrl = this.getSelectedNodeUrl();
21
+ const wallet = yield this.getWallet();
22
+ let connection;
23
+ if (this.hasValidSession()) {
24
+ if (wallet && wallet.isConnected) {
25
+ return Promise.resolve();
26
+ }
27
+ else {
28
+ connection = yield connect({
29
+ modalMode: 'neverAsk',
30
+ provider: new RpcProvider({ nodeUrl }),
31
+ });
32
+ }
33
+ // No valid session
34
+ }
35
+ else {
36
+ connection = yield connect({
37
+ connectors: [
38
+ new ArgentMobileConnector({
39
+ chainId: this.getSelectedNetworkName() || constants.NetworkName.SN_MAIN,
40
+ dappName: this.appName,
41
+ icons: this.appLogoUrls,
42
+ projectId: this.projectId,
43
+ provider: new RpcProvider({
44
+ nodeUrl,
45
+ }),
46
+ url: window.location.hostname,
47
+ }),
48
+ ],
49
+ });
50
+ }
51
+ if (connection && connection.wallet && connection.wallet.isConnected) {
52
+ this.wallet = connection.wallet;
53
+ }
54
+ else {
55
+ throw new Error('Failed to connect to Starknet');
56
+ }
57
+ }
58
+ catch (err) {
59
+ logger.error('Error establishing connection to Argent Mobile', err);
60
+ return;
61
+ }
62
+ });
63
+ }
64
+ getConnectedAccounts() {
65
+ return __awaiter(this, void 0, void 0, function* () {
66
+ if (!this.hasValidSession()) {
67
+ return [];
68
+ }
69
+ const address = yield this.fetchPublicAddress();
70
+ if (!address)
71
+ return [];
72
+ return [address];
73
+ });
74
+ }
75
+ hasValidSession() {
76
+ var _a, _b;
77
+ const sessionItem = localStorage.getItem('wc@2:client:0.3//session');
78
+ if (sessionItem) {
79
+ const sessionItemJson = JSON.parse(sessionItem);
80
+ if ((_b = (_a = sessionItemJson[0].peer) === null || _a === void 0 ? void 0 : _a.metadata) === null || _b === void 0 ? void 0 : _b.name.includes('Argent')) {
81
+ return true;
82
+ }
83
+ }
84
+ return false;
85
+ }
86
+ }
87
+
88
+ export { ArgentXMobile };
@@ -0,0 +1,55 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _tslib = require('../../_virtual/_tslib.cjs');
6
+ var starknetkit = require('starknetkit');
7
+ var webwallet = require('starknetkit/webwallet');
8
+ var starknet = require('starknet');
9
+ var walletConnectorCore = require('@dynamic-labs/wallet-connector-core');
10
+ var argentxBase = require('./argentxBase.cjs');
11
+
12
+ class ArgentXWeb extends argentxBase {
13
+ constructor(opts) {
14
+ super('Argent X - Web', 'argentWebWallet', opts);
15
+ }
16
+ connect() {
17
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
18
+ try {
19
+ const nodeUrl = this.getSelectedNodeUrl();
20
+ const wallet = yield this.getWallet();
21
+ if (wallet && wallet.isConnected) {
22
+ return;
23
+ }
24
+ else {
25
+ const connection = yield starknetkit.connect({
26
+ connectors: [
27
+ new webwallet.WebWalletConnector({
28
+ provider: new starknet.RpcProvider({
29
+ nodeUrl,
30
+ }),
31
+ url: 'https://web.argent.xyz',
32
+ }),
33
+ ],
34
+ });
35
+ if (connection && connection.wallet && connection.wallet.isConnected) {
36
+ this.wallet = connection.wallet;
37
+ }
38
+ }
39
+ }
40
+ catch (err) {
41
+ walletConnectorCore.logger.error('Error establishing connection to Argent Web Wallet', err);
42
+ }
43
+ });
44
+ }
45
+ getConnectedAccounts() {
46
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
47
+ const address = yield this.fetchPublicAddress();
48
+ if (!address)
49
+ return [];
50
+ return [address];
51
+ });
52
+ }
53
+ }
54
+
55
+ exports.ArgentXWeb = ArgentXWeb;
@@ -0,0 +1,7 @@
1
+ import ArgentXBase from './argentxBase';
2
+ export declare class ArgentXWeb extends ArgentXBase {
3
+ constructor(opts: any);
4
+ connect(): Promise<void>;
5
+ getConnectedAccounts(): Promise<string[]>;
6
+ }
7
+ export type ArgentXWebWalletConnectorType = ArgentXWeb;
@@ -0,0 +1,51 @@
1
+ import { __awaiter } from '../../_virtual/_tslib.js';
2
+ import { connect } from 'starknetkit';
3
+ import { WebWalletConnector } from 'starknetkit/webwallet';
4
+ import { RpcProvider } from 'starknet';
5
+ import { logger } from '@dynamic-labs/wallet-connector-core';
6
+ import ArgentXBase from './argentxBase.js';
7
+
8
+ class ArgentXWeb extends ArgentXBase {
9
+ constructor(opts) {
10
+ super('Argent X - Web', 'argentWebWallet', opts);
11
+ }
12
+ connect() {
13
+ return __awaiter(this, void 0, void 0, function* () {
14
+ try {
15
+ const nodeUrl = this.getSelectedNodeUrl();
16
+ const wallet = yield this.getWallet();
17
+ if (wallet && wallet.isConnected) {
18
+ return;
19
+ }
20
+ else {
21
+ const connection = yield connect({
22
+ connectors: [
23
+ new WebWalletConnector({
24
+ provider: new RpcProvider({
25
+ nodeUrl,
26
+ }),
27
+ url: 'https://web.argent.xyz',
28
+ }),
29
+ ],
30
+ });
31
+ if (connection && connection.wallet && connection.wallet.isConnected) {
32
+ this.wallet = connection.wallet;
33
+ }
34
+ }
35
+ }
36
+ catch (err) {
37
+ logger.error('Error establishing connection to Argent Web Wallet', err);
38
+ }
39
+ });
40
+ }
41
+ getConnectedAccounts() {
42
+ return __awaiter(this, void 0, void 0, function* () {
43
+ const address = yield this.fetchPublicAddress();
44
+ if (!address)
45
+ return [];
46
+ return [address];
47
+ });
48
+ }
49
+ }
50
+
51
+ export { ArgentXWeb };