@dynamic-labs/stellar 4.59.2 → 4.60.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/package.cjs +1 -1
  3. package/package.js +1 -1
  4. package/package.json +10 -8
  5. package/src/connectors/FreighterWalletConnector/FreighterProvider.cjs +84 -0
  6. package/src/connectors/FreighterWalletConnector/FreighterProvider.d.ts +6 -0
  7. package/src/connectors/FreighterWalletConnector/FreighterProvider.js +80 -0
  8. package/src/connectors/FreighterWalletConnector/FreighterWalletConnector.cjs +45 -0
  9. package/src/connectors/FreighterWalletConnector/FreighterWalletConnector.d.ts +16 -0
  10. package/src/connectors/FreighterWalletConnector/FreighterWalletConnector.js +41 -0
  11. package/src/connectors/FreighterWalletConnector/index.d.ts +2 -0
  12. package/src/connectors/LobstrWalletConnector/LobstrWalletConnector.cjs +95 -0
  13. package/src/connectors/LobstrWalletConnector/LobstrWalletConnector.d.ts +22 -0
  14. package/src/connectors/LobstrWalletConnector/LobstrWalletConnector.js +91 -0
  15. package/src/connectors/LobstrWalletConnector/index.d.ts +1 -0
  16. package/src/connectors/OneKeyWalletConnector/OneKeyProvider.cjs +124 -0
  17. package/src/connectors/OneKeyWalletConnector/OneKeyProvider.d.ts +6 -0
  18. package/src/connectors/OneKeyWalletConnector/OneKeyProvider.js +120 -0
  19. package/src/connectors/OneKeyWalletConnector/OneKeyWalletConnector.cjs +43 -0
  20. package/src/connectors/OneKeyWalletConnector/OneKeyWalletConnector.d.ts +14 -0
  21. package/src/connectors/OneKeyWalletConnector/OneKeyWalletConnector.js +39 -0
  22. package/src/connectors/StellarWalletConnector/StellarWalletConnector.cjs +80 -4
  23. package/src/connectors/StellarWalletConnector/StellarWalletConnector.d.ts +10 -0
  24. package/src/connectors/StellarWalletConnector/StellarWalletConnector.js +81 -5
  25. package/src/index.cjs +1 -0
  26. package/src/index.js +1 -0
  27. package/src/injected/fetchInjectedWalletConnectors.cjs +7 -1
  28. package/src/injected/fetchInjectedWalletConnectors.d.ts +1 -1
  29. package/src/injected/fetchInjectedWalletConnectors.js +7 -1
  30. package/src/types/IStellarProvider.d.ts +73 -0
  31. package/src/types.d.ts +7 -12
  32. package/src/utils/buildPaymentTransaction.cjs +37 -0
  33. package/src/utils/buildPaymentTransaction.d.ts +21 -0
  34. package/src/utils/buildPaymentTransaction.js +33 -0
  35. package/src/utils/checkTrustline.cjs +33 -0
  36. package/src/utils/checkTrustline.d.ts +9 -0
  37. package/src/utils/checkTrustline.js +29 -0
  38. package/src/utils/createPaymentAsset.cjs +23 -0
  39. package/src/utils/createPaymentAsset.d.ts +13 -0
  40. package/src/utils/createPaymentAsset.js +19 -0
  41. package/src/utils/createTransactionMemo.d.ts +13 -0
  42. package/src/utils/getAccountBalance.cjs +33 -0
  43. package/src/utils/getAccountBalance.d.ts +11 -0
  44. package/src/utils/getAccountBalance.js +29 -0
  45. package/src/utils/getNetworkPassphrase.d.ts +7 -0
  46. package/src/utils/index.d.ts +7 -0
  47. package/src/utils/normalizeNetworkName.d.ts +14 -0
  48. package/src/wallet/StellarWallet.cjs +65 -10
  49. package/src/wallet/StellarWallet.d.ts +14 -8
  50. package/src/wallet/StellarWallet.js +65 -10
  51. package/src/types/FreighterProvider.d.ts +0 -82
@@ -0,0 +1,124 @@
1
+ 'use client'
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ var _tslib = require('../../../_virtual/_tslib.cjs');
7
+
8
+ /**
9
+ * Gets the OneKey Stellar provider from the window object
10
+ */
11
+ const getOneKeyStellarProvider = () => {
12
+ if (typeof window === 'undefined') {
13
+ return undefined;
14
+ }
15
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
+ const onekey = window.$onekey;
17
+ if (!(onekey === null || onekey === void 0 ? void 0 : onekey.stellar)) {
18
+ return undefined;
19
+ }
20
+ return onekey.stellar;
21
+ };
22
+ /**
23
+ * OneKey Wallet provider adapter that implements IStellarProvider
24
+ * using the OneKey Stellar API.
25
+ */
26
+ const createOneKeyProvider = () => {
27
+ const oneKeyProvider = getOneKeyStellarProvider();
28
+ if (!oneKeyProvider) {
29
+ throw new Error('OneKey Stellar provider not found');
30
+ }
31
+ const eventListeners = new Map();
32
+ const wrappedCallbacks = new Map();
33
+ return {
34
+ close: () => {
35
+ // Remove all event listeners using the wrapped callbacks
36
+ eventListeners.forEach((callbacks, event) => {
37
+ const oneKeyEventMap = {
38
+ accountChanged: 'accountChanged',
39
+ networkChanged: 'networkChanged',
40
+ };
41
+ const oneKeyEvent = oneKeyEventMap[event] || event;
42
+ callbacks.forEach((callback) => {
43
+ const wrappedCallback = wrappedCallbacks.get(callback);
44
+ if (wrappedCallback) {
45
+ oneKeyProvider.removeListener(oneKeyEvent, wrappedCallback);
46
+ wrappedCallbacks.delete(callback);
47
+ }
48
+ });
49
+ });
50
+ eventListeners.clear();
51
+ },
52
+ connect: () => _tslib.__awaiter(void 0, void 0, void 0, function* () {
53
+ var _a;
54
+ const response = yield oneKeyProvider.getAddress();
55
+ return (_a = response === null || response === void 0 ? void 0 : response.address) !== null && _a !== void 0 ? _a : '';
56
+ }),
57
+ disconnect: () => _tslib.__awaiter(void 0, void 0, void 0, function* () {
58
+ oneKeyProvider.disconnect();
59
+ }),
60
+ getNetwork: () => _tslib.__awaiter(void 0, void 0, void 0, function* () {
61
+ const network = yield oneKeyProvider.getNetwork();
62
+ // Normalize network name to match expected format
63
+ const networkUpper = network.toUpperCase();
64
+ if (networkUpper.includes('TESTNET')) {
65
+ return 'TESTNET';
66
+ }
67
+ if (networkUpper.includes('FUTURENET')) {
68
+ return 'FUTURENET';
69
+ }
70
+ return 'PUBLIC';
71
+ }),
72
+ isUnlocked: () => _tslib.__awaiter(void 0, void 0, void 0, function* () {
73
+ try {
74
+ // Try to get address to check if wallet is unlocked
75
+ yield oneKeyProvider.getAddress();
76
+ return true;
77
+ }
78
+ catch (_b) {
79
+ return false;
80
+ }
81
+ }),
82
+ on: (event, callback) => {
83
+ var _a;
84
+ if (!eventListeners.has(event)) {
85
+ eventListeners.set(event, new Set());
86
+ }
87
+ (_a = eventListeners.get(event)) === null || _a === void 0 ? void 0 : _a.add(callback);
88
+ // Map Stellar events to OneKey events
89
+ const oneKeyEventMap = {
90
+ accountChanged: 'accountChanged',
91
+ networkChanged: 'networkChanged',
92
+ };
93
+ const oneKeyEvent = oneKeyEventMap[event] || event;
94
+ const wrappedCallback = (...args) => {
95
+ // OneKey might pass different data structures, extract what we need
96
+ if (event === 'accountChanged') {
97
+ callback(args[0]);
98
+ }
99
+ else if (event === 'networkChanged') {
100
+ callback(args[0]);
101
+ }
102
+ else {
103
+ callback(args[0]);
104
+ }
105
+ };
106
+ wrappedCallbacks.set(callback, wrappedCallback);
107
+ oneKeyProvider.on(oneKeyEvent, wrappedCallback);
108
+ },
109
+ sign: (transactionXdr, options) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
110
+ const signedXdr = yield oneKeyProvider.signTransaction(transactionXdr, {
111
+ network: options === null || options === void 0 ? void 0 : options.network,
112
+ networkPassphrase: options === null || options === void 0 ? void 0 : options.networkPassphrase,
113
+ });
114
+ return signedXdr !== null && signedXdr !== void 0 ? signedXdr : '';
115
+ }),
116
+ signMessage: (message) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
117
+ var _c;
118
+ const signature = yield oneKeyProvider.signMessage(message);
119
+ return String((_c = signature === null || signature === void 0 ? void 0 : signature.signedMessage) !== null && _c !== void 0 ? _c : '');
120
+ }),
121
+ };
122
+ };
123
+
124
+ exports.createOneKeyProvider = createOneKeyProvider;
@@ -0,0 +1,6 @@
1
+ import type { IStellarProvider } from '../../types';
2
+ /**
3
+ * OneKey Wallet provider adapter that implements IStellarProvider
4
+ * using the OneKey Stellar API.
5
+ */
6
+ export declare const createOneKeyProvider: () => IStellarProvider;
@@ -0,0 +1,120 @@
1
+ 'use client'
2
+ import { __awaiter } from '../../../_virtual/_tslib.js';
3
+
4
+ /**
5
+ * Gets the OneKey Stellar provider from the window object
6
+ */
7
+ const getOneKeyStellarProvider = () => {
8
+ if (typeof window === 'undefined') {
9
+ return undefined;
10
+ }
11
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
+ const onekey = window.$onekey;
13
+ if (!(onekey === null || onekey === void 0 ? void 0 : onekey.stellar)) {
14
+ return undefined;
15
+ }
16
+ return onekey.stellar;
17
+ };
18
+ /**
19
+ * OneKey Wallet provider adapter that implements IStellarProvider
20
+ * using the OneKey Stellar API.
21
+ */
22
+ const createOneKeyProvider = () => {
23
+ const oneKeyProvider = getOneKeyStellarProvider();
24
+ if (!oneKeyProvider) {
25
+ throw new Error('OneKey Stellar provider not found');
26
+ }
27
+ const eventListeners = new Map();
28
+ const wrappedCallbacks = new Map();
29
+ return {
30
+ close: () => {
31
+ // Remove all event listeners using the wrapped callbacks
32
+ eventListeners.forEach((callbacks, event) => {
33
+ const oneKeyEventMap = {
34
+ accountChanged: 'accountChanged',
35
+ networkChanged: 'networkChanged',
36
+ };
37
+ const oneKeyEvent = oneKeyEventMap[event] || event;
38
+ callbacks.forEach((callback) => {
39
+ const wrappedCallback = wrappedCallbacks.get(callback);
40
+ if (wrappedCallback) {
41
+ oneKeyProvider.removeListener(oneKeyEvent, wrappedCallback);
42
+ wrappedCallbacks.delete(callback);
43
+ }
44
+ });
45
+ });
46
+ eventListeners.clear();
47
+ },
48
+ connect: () => __awaiter(void 0, void 0, void 0, function* () {
49
+ var _a;
50
+ const response = yield oneKeyProvider.getAddress();
51
+ return (_a = response === null || response === void 0 ? void 0 : response.address) !== null && _a !== void 0 ? _a : '';
52
+ }),
53
+ disconnect: () => __awaiter(void 0, void 0, void 0, function* () {
54
+ oneKeyProvider.disconnect();
55
+ }),
56
+ getNetwork: () => __awaiter(void 0, void 0, void 0, function* () {
57
+ const network = yield oneKeyProvider.getNetwork();
58
+ // Normalize network name to match expected format
59
+ const networkUpper = network.toUpperCase();
60
+ if (networkUpper.includes('TESTNET')) {
61
+ return 'TESTNET';
62
+ }
63
+ if (networkUpper.includes('FUTURENET')) {
64
+ return 'FUTURENET';
65
+ }
66
+ return 'PUBLIC';
67
+ }),
68
+ isUnlocked: () => __awaiter(void 0, void 0, void 0, function* () {
69
+ try {
70
+ // Try to get address to check if wallet is unlocked
71
+ yield oneKeyProvider.getAddress();
72
+ return true;
73
+ }
74
+ catch (_b) {
75
+ return false;
76
+ }
77
+ }),
78
+ on: (event, callback) => {
79
+ var _a;
80
+ if (!eventListeners.has(event)) {
81
+ eventListeners.set(event, new Set());
82
+ }
83
+ (_a = eventListeners.get(event)) === null || _a === void 0 ? void 0 : _a.add(callback);
84
+ // Map Stellar events to OneKey events
85
+ const oneKeyEventMap = {
86
+ accountChanged: 'accountChanged',
87
+ networkChanged: 'networkChanged',
88
+ };
89
+ const oneKeyEvent = oneKeyEventMap[event] || event;
90
+ const wrappedCallback = (...args) => {
91
+ // OneKey might pass different data structures, extract what we need
92
+ if (event === 'accountChanged') {
93
+ callback(args[0]);
94
+ }
95
+ else if (event === 'networkChanged') {
96
+ callback(args[0]);
97
+ }
98
+ else {
99
+ callback(args[0]);
100
+ }
101
+ };
102
+ wrappedCallbacks.set(callback, wrappedCallback);
103
+ oneKeyProvider.on(oneKeyEvent, wrappedCallback);
104
+ },
105
+ sign: (transactionXdr, options) => __awaiter(void 0, void 0, void 0, function* () {
106
+ const signedXdr = yield oneKeyProvider.signTransaction(transactionXdr, {
107
+ network: options === null || options === void 0 ? void 0 : options.network,
108
+ networkPassphrase: options === null || options === void 0 ? void 0 : options.networkPassphrase,
109
+ });
110
+ return signedXdr !== null && signedXdr !== void 0 ? signedXdr : '';
111
+ }),
112
+ signMessage: (message) => __awaiter(void 0, void 0, void 0, function* () {
113
+ var _c;
114
+ const signature = yield oneKeyProvider.signMessage(message);
115
+ return String((_c = signature === null || signature === void 0 ? void 0 : signature.signedMessage) !== null && _c !== void 0 ? _c : '');
116
+ }),
117
+ };
118
+ };
119
+
120
+ export { createOneKeyProvider };
@@ -0,0 +1,43 @@
1
+ 'use client'
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ var StellarWalletConnector = require('../StellarWalletConnector/StellarWalletConnector.cjs');
7
+ var OneKeyProvider = require('./OneKeyProvider.cjs');
8
+
9
+ /**
10
+ * OneKey Wallet connector for Stellar blockchain.
11
+ * Implements Stellar wallet functionality using the OneKey browser extension.
12
+ */
13
+ class OneKeyWalletConnector extends StellarWalletConnector.StellarWalletConnector {
14
+ constructor(opts) {
15
+ super('OneKey', opts);
16
+ this.name = 'OneKey';
17
+ this.overrideKey = 'onekeystellar';
18
+ }
19
+ getProvider() {
20
+ if (!this.isInstalledOnBrowser()) {
21
+ return undefined;
22
+ }
23
+ if (!this.provider) {
24
+ try {
25
+ this.provider = OneKeyProvider.createOneKeyProvider();
26
+ }
27
+ catch (error) {
28
+ // Provider not available
29
+ return undefined;
30
+ }
31
+ }
32
+ return this.provider;
33
+ }
34
+ isInstalledOnBrowser() {
35
+ var _a;
36
+ if (typeof window === 'undefined') {
37
+ return false;
38
+ }
39
+ return ((_a = window.$onekey) === null || _a === void 0 ? void 0 : _a.stellar) !== undefined;
40
+ }
41
+ }
42
+
43
+ exports.OneKeyWalletConnector = OneKeyWalletConnector;
@@ -0,0 +1,14 @@
1
+ import type { IStellarProvider, StellarWalletConnectorProps } from '../../types';
2
+ import { StellarWalletConnector } from '../StellarWalletConnector';
3
+ /**
4
+ * OneKey Wallet connector for Stellar blockchain.
5
+ * Implements Stellar wallet functionality using the OneKey browser extension.
6
+ */
7
+ export declare class OneKeyWalletConnector extends StellarWalletConnector {
8
+ name: string;
9
+ overrideKey: string;
10
+ private provider;
11
+ constructor(opts: StellarWalletConnectorProps);
12
+ getProvider(): IStellarProvider | undefined;
13
+ isInstalledOnBrowser(): boolean;
14
+ }
@@ -0,0 +1,39 @@
1
+ 'use client'
2
+ import { StellarWalletConnector } from '../StellarWalletConnector/StellarWalletConnector.js';
3
+ import { createOneKeyProvider } from './OneKeyProvider.js';
4
+
5
+ /**
6
+ * OneKey Wallet connector for Stellar blockchain.
7
+ * Implements Stellar wallet functionality using the OneKey browser extension.
8
+ */
9
+ class OneKeyWalletConnector extends StellarWalletConnector {
10
+ constructor(opts) {
11
+ super('OneKey', opts);
12
+ this.name = 'OneKey';
13
+ this.overrideKey = 'onekeystellar';
14
+ }
15
+ getProvider() {
16
+ if (!this.isInstalledOnBrowser()) {
17
+ return undefined;
18
+ }
19
+ if (!this.provider) {
20
+ try {
21
+ this.provider = createOneKeyProvider();
22
+ }
23
+ catch (error) {
24
+ // Provider not available
25
+ return undefined;
26
+ }
27
+ }
28
+ return this.provider;
29
+ }
30
+ isInstalledOnBrowser() {
31
+ var _a;
32
+ if (typeof window === 'undefined') {
33
+ return false;
34
+ }
35
+ return ((_a = window.$onekey) === null || _a === void 0 ? void 0 : _a.stellar) !== undefined;
36
+ }
37
+ }
38
+
39
+ export { OneKeyWalletConnector };
@@ -12,6 +12,8 @@ var StellarWallet = require('../../wallet/StellarWallet.cjs');
12
12
  var getNetworkFromAddress = require('../../utils/getNetworkFromAddress.cjs');
13
13
  var StellarLocalStorageCache = require('../../StellarLocalStorageCache.cjs');
14
14
 
15
+ const HORIZON_MAINNET_URL = 'https://horizon.stellar.org';
16
+ const HORIZON_TESTNET_URL = 'https://horizon-testnet.stellar.org';
15
17
  /**
16
18
  * Abstract base class for all Stellar wallet connectors.
17
19
  *
@@ -118,6 +120,12 @@ class StellarWalletConnector extends walletConnectorCore.WalletConnectorBase {
118
120
  return;
119
121
  }
120
122
  this.connectedPublicKey = publicKey;
123
+ if (publicKey) {
124
+ yield this.cache.setConnectedAccount(publicKey, {
125
+ active: true,
126
+ additionalAddresses: [],
127
+ });
128
+ }
121
129
  this.logger.debug('[connect] Connected successfully');
122
130
  }
123
131
  catch (error) {
@@ -171,7 +179,12 @@ class StellarWalletConnector extends walletConnectorCore.WalletConnectorBase {
171
179
  if (!provider) {
172
180
  throw new utils.DynamicError('No Stellar provider found');
173
181
  }
174
- return provider.sign(transactionXdr);
182
+ const network = yield this.getNetwork();
183
+ const networkPassphrase = yield this.getNetworkPassphrase();
184
+ return provider.sign(transactionXdr, {
185
+ network,
186
+ networkPassphrase,
187
+ });
175
188
  });
176
189
  }
177
190
  /**
@@ -189,7 +202,62 @@ class StellarWalletConnector extends walletConnectorCore.WalletConnectorBase {
189
202
  getHorizonServer() {
190
203
  return _tslib.__awaiter(this, void 0, void 0, function* () {
191
204
  var _a, _b;
192
- return new stellarSdk.Horizon.Server((_b = (_a = this.selectedNetwork) === null || _a === void 0 ? void 0 : _a.rpcUrls[0]) !== null && _b !== void 0 ? _b : '');
205
+ const url = ((_b = (_a = this.stellarNetworks[0]) === null || _a === void 0 ? void 0 : _a.name) === null || _b === void 0 ? void 0 : _b.toLowerCase().includes('testnet'))
206
+ ? HORIZON_TESTNET_URL
207
+ : HORIZON_MAINNET_URL;
208
+ return new stellarSdk.Horizon.Server(url);
209
+ });
210
+ }
211
+ /**
212
+ * Gets the network passphrase for the current network.
213
+ * @returns The network passphrase string
214
+ */
215
+ getNetworkPassphrase() {
216
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
217
+ var _a, _b, _c, _d, _e, _f;
218
+ // First, try to get network from provider
219
+ const provider = this.getProvider();
220
+ if (provider) {
221
+ try {
222
+ const providerNetwork = yield provider.getNetwork();
223
+ if (!providerNetwork) {
224
+ throw new Error('Provider returned null or undefined network');
225
+ }
226
+ const networkUpper = providerNetwork.toUpperCase();
227
+ if (networkUpper === 'TESTNET' || networkUpper.includes('TESTNET')) {
228
+ return stellarSdk.Networks.TESTNET;
229
+ }
230
+ if (networkUpper === 'FUTURENET' ||
231
+ networkUpper.includes('FUTURENET')) {
232
+ return stellarSdk.Networks.FUTURENET;
233
+ }
234
+ if (networkUpper === 'PUBLIC' || networkUpper.includes('PUBLIC')) {
235
+ return stellarSdk.Networks.PUBLIC;
236
+ }
237
+ }
238
+ catch (error) {
239
+ // Provider getNetwork failed, fall through to other checks
240
+ this.logger.debug('[getNetworkPassphrase] Provider getNetwork failed:', error);
241
+ }
242
+ }
243
+ // Fall back to checking selectedNetwork name
244
+ const networkName = (_c = (_b = (_a = this.selectedNetwork) === null || _a === void 0 ? void 0 : _a.name) === null || _b === void 0 ? void 0 : _b.toLowerCase()) !== null && _c !== void 0 ? _c : '';
245
+ if (networkName.includes('testnet')) {
246
+ return stellarSdk.Networks.TESTNET;
247
+ }
248
+ if (networkName.includes('futurenet')) {
249
+ return stellarSdk.Networks.FUTURENET;
250
+ }
251
+ // Check Horizon server URL as last resort
252
+ const horizonUrl = (_f = (_e = (_d = this.selectedNetwork) === null || _d === void 0 ? void 0 : _d.rpcUrls) === null || _e === void 0 ? void 0 : _e[0]) !== null && _f !== void 0 ? _f : '';
253
+ if (horizonUrl.includes('testnet')) {
254
+ return stellarSdk.Networks.TESTNET;
255
+ }
256
+ if (horizonUrl.includes('futurenet')) {
257
+ return stellarSdk.Networks.FUTURENET;
258
+ }
259
+ // Default to mainnet/public
260
+ return stellarSdk.Networks.PUBLIC;
193
261
  });
194
262
  }
195
263
  isTestnet() {
@@ -300,10 +368,9 @@ class StellarWalletConnector extends walletConnectorCore.WalletConnectorBase {
300
368
  */
301
369
  getConnectedAccountsFromCache() {
302
370
  return _tslib.__awaiter(this, void 0, void 0, function* () {
303
- var _a;
304
371
  const currentAccount = yield this.cache.getActiveAccount();
305
372
  const allAccounts = yield this.cache.getConnectedAccounts();
306
- const allConnectedAddresses = (_a = Object.keys(allAccounts || {})) !== null && _a !== void 0 ? _a : [];
373
+ const allConnectedAddresses = Object.keys(allAccounts || {});
307
374
  if (!(currentAccount === null || currentAccount === void 0 ? void 0 : currentAccount.address)) {
308
375
  return allConnectedAddresses;
309
376
  }
@@ -313,6 +380,15 @@ class StellarWalletConnector extends walletConnectorCore.WalletConnectorBase {
313
380
  ];
314
381
  });
315
382
  }
383
+ /**
384
+ * Gets connected accounts.
385
+ * Returns accounts from cache to avoid prompting the user.
386
+ */
387
+ getConnectedAccounts() {
388
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
389
+ return this.getConnectedAccountsFromCache();
390
+ });
391
+ }
316
392
  /**
317
393
  * Gets additional addresses for a main address.
318
394
  */
@@ -61,6 +61,11 @@ export declare abstract class StellarWalletConnector extends WalletConnectorBase
61
61
  */
62
62
  signMessage(messageToSign: string): Promise<string | undefined>;
63
63
  getHorizonServer(): Promise<Horizon.Server>;
64
+ /**
65
+ * Gets the network passphrase for the current network.
66
+ * @returns The network passphrase string
67
+ */
68
+ getNetworkPassphrase(): Promise<string>;
64
69
  isTestnet(): Promise<boolean>;
65
70
  /**
66
71
  * Gets the connected public key.
@@ -87,6 +92,11 @@ export declare abstract class StellarWalletConnector extends WalletConnectorBase
87
92
  * Gets connected accounts from cache.
88
93
  */
89
94
  getConnectedAccountsFromCache(): Promise<string[]>;
95
+ /**
96
+ * Gets connected accounts.
97
+ * Returns accounts from cache to avoid prompting the user.
98
+ */
99
+ getConnectedAccounts(): Promise<string[]>;
90
100
  /**
91
101
  * Gets additional addresses for a main address.
92
102
  */
@@ -1,6 +1,6 @@
1
1
  'use client'
2
2
  import { __awaiter } from '../../../_virtual/_tslib.js';
3
- import { Horizon } from '@stellar/stellar-sdk';
3
+ import { Horizon, Networks } from '@stellar/stellar-sdk';
4
4
  import { Logger } from '@dynamic-labs/logger';
5
5
  import { DynamicError } from '@dynamic-labs/utils';
6
6
  import { WalletConnectorBase } from '@dynamic-labs/wallet-connector-core';
@@ -8,6 +8,8 @@ import { StellarWallet } from '../../wallet/StellarWallet.js';
8
8
  import { getNetworkFromAddress } from '../../utils/getNetworkFromAddress.js';
9
9
  import { StellarLocalStorageCache } from '../../StellarLocalStorageCache.js';
10
10
 
11
+ const HORIZON_MAINNET_URL = 'https://horizon.stellar.org';
12
+ const HORIZON_TESTNET_URL = 'https://horizon-testnet.stellar.org';
11
13
  /**
12
14
  * Abstract base class for all Stellar wallet connectors.
13
15
  *
@@ -114,6 +116,12 @@ class StellarWalletConnector extends WalletConnectorBase {
114
116
  return;
115
117
  }
116
118
  this.connectedPublicKey = publicKey;
119
+ if (publicKey) {
120
+ yield this.cache.setConnectedAccount(publicKey, {
121
+ active: true,
122
+ additionalAddresses: [],
123
+ });
124
+ }
117
125
  this.logger.debug('[connect] Connected successfully');
118
126
  }
119
127
  catch (error) {
@@ -167,7 +175,12 @@ class StellarWalletConnector extends WalletConnectorBase {
167
175
  if (!provider) {
168
176
  throw new DynamicError('No Stellar provider found');
169
177
  }
170
- return provider.sign(transactionXdr);
178
+ const network = yield this.getNetwork();
179
+ const networkPassphrase = yield this.getNetworkPassphrase();
180
+ return provider.sign(transactionXdr, {
181
+ network,
182
+ networkPassphrase,
183
+ });
171
184
  });
172
185
  }
173
186
  /**
@@ -185,7 +198,62 @@ class StellarWalletConnector extends WalletConnectorBase {
185
198
  getHorizonServer() {
186
199
  return __awaiter(this, void 0, void 0, function* () {
187
200
  var _a, _b;
188
- return new Horizon.Server((_b = (_a = this.selectedNetwork) === null || _a === void 0 ? void 0 : _a.rpcUrls[0]) !== null && _b !== void 0 ? _b : '');
201
+ const url = ((_b = (_a = this.stellarNetworks[0]) === null || _a === void 0 ? void 0 : _a.name) === null || _b === void 0 ? void 0 : _b.toLowerCase().includes('testnet'))
202
+ ? HORIZON_TESTNET_URL
203
+ : HORIZON_MAINNET_URL;
204
+ return new Horizon.Server(url);
205
+ });
206
+ }
207
+ /**
208
+ * Gets the network passphrase for the current network.
209
+ * @returns The network passphrase string
210
+ */
211
+ getNetworkPassphrase() {
212
+ return __awaiter(this, void 0, void 0, function* () {
213
+ var _a, _b, _c, _d, _e, _f;
214
+ // First, try to get network from provider
215
+ const provider = this.getProvider();
216
+ if (provider) {
217
+ try {
218
+ const providerNetwork = yield provider.getNetwork();
219
+ if (!providerNetwork) {
220
+ throw new Error('Provider returned null or undefined network');
221
+ }
222
+ const networkUpper = providerNetwork.toUpperCase();
223
+ if (networkUpper === 'TESTNET' || networkUpper.includes('TESTNET')) {
224
+ return Networks.TESTNET;
225
+ }
226
+ if (networkUpper === 'FUTURENET' ||
227
+ networkUpper.includes('FUTURENET')) {
228
+ return Networks.FUTURENET;
229
+ }
230
+ if (networkUpper === 'PUBLIC' || networkUpper.includes('PUBLIC')) {
231
+ return Networks.PUBLIC;
232
+ }
233
+ }
234
+ catch (error) {
235
+ // Provider getNetwork failed, fall through to other checks
236
+ this.logger.debug('[getNetworkPassphrase] Provider getNetwork failed:', error);
237
+ }
238
+ }
239
+ // Fall back to checking selectedNetwork name
240
+ const networkName = (_c = (_b = (_a = this.selectedNetwork) === null || _a === void 0 ? void 0 : _a.name) === null || _b === void 0 ? void 0 : _b.toLowerCase()) !== null && _c !== void 0 ? _c : '';
241
+ if (networkName.includes('testnet')) {
242
+ return Networks.TESTNET;
243
+ }
244
+ if (networkName.includes('futurenet')) {
245
+ return Networks.FUTURENET;
246
+ }
247
+ // Check Horizon server URL as last resort
248
+ const horizonUrl = (_f = (_e = (_d = this.selectedNetwork) === null || _d === void 0 ? void 0 : _d.rpcUrls) === null || _e === void 0 ? void 0 : _e[0]) !== null && _f !== void 0 ? _f : '';
249
+ if (horizonUrl.includes('testnet')) {
250
+ return Networks.TESTNET;
251
+ }
252
+ if (horizonUrl.includes('futurenet')) {
253
+ return Networks.FUTURENET;
254
+ }
255
+ // Default to mainnet/public
256
+ return Networks.PUBLIC;
189
257
  });
190
258
  }
191
259
  isTestnet() {
@@ -296,10 +364,9 @@ class StellarWalletConnector extends WalletConnectorBase {
296
364
  */
297
365
  getConnectedAccountsFromCache() {
298
366
  return __awaiter(this, void 0, void 0, function* () {
299
- var _a;
300
367
  const currentAccount = yield this.cache.getActiveAccount();
301
368
  const allAccounts = yield this.cache.getConnectedAccounts();
302
- const allConnectedAddresses = (_a = Object.keys(allAccounts || {})) !== null && _a !== void 0 ? _a : [];
369
+ const allConnectedAddresses = Object.keys(allAccounts || {});
303
370
  if (!(currentAccount === null || currentAccount === void 0 ? void 0 : currentAccount.address)) {
304
371
  return allConnectedAddresses;
305
372
  }
@@ -309,6 +376,15 @@ class StellarWalletConnector extends WalletConnectorBase {
309
376
  ];
310
377
  });
311
378
  }
379
+ /**
380
+ * Gets connected accounts.
381
+ * Returns accounts from cache to avoid prompting the user.
382
+ */
383
+ getConnectedAccounts() {
384
+ return __awaiter(this, void 0, void 0, function* () {
385
+ return this.getConnectedAccountsFromCache();
386
+ });
387
+ }
312
388
  /**
313
389
  * Gets additional addresses for a main address.
314
390
  */
package/src/index.cjs CHANGED
@@ -10,6 +10,7 @@ var StellarWallet = require('./wallet/StellarWallet.cjs');
10
10
  var isStellarWallet = require('./wallet/isStellarWallet/isStellarWallet.cjs');
11
11
  var StellarWalletConnector = require('./connectors/StellarWalletConnector/StellarWalletConnector.cjs');
12
12
  var StellarLocalStorageCache = require('./StellarLocalStorageCache.cjs');
13
+ require('@stellar/stellar-sdk');
13
14
  var getNetworkFromAddress = require('./utils/getNetworkFromAddress.cjs');
14
15
 
15
16
  assertPackageVersion.assertPackageVersion('@dynamic-labs/stellar', _package.version);
package/src/index.js CHANGED
@@ -6,6 +6,7 @@ export { StellarWallet } from './wallet/StellarWallet.js';
6
6
  export { isStellarWallet } from './wallet/isStellarWallet/isStellarWallet.js';
7
7
  export { StellarWalletConnector } from './connectors/StellarWalletConnector/StellarWalletConnector.js';
8
8
  export { StellarLocalStorageCache } from './StellarLocalStorageCache.js';
9
+ import '@stellar/stellar-sdk';
9
10
  export { getNetworkFromAddress } from './utils/getNetworkFromAddress.js';
10
11
 
11
12
  assertPackageVersion('@dynamic-labs/stellar', version);
@@ -6,9 +6,15 @@ Object.defineProperty(exports, '__esModule', { value: true });
6
6
  var _tslib = require('../../_virtual/_tslib.cjs');
7
7
  var walletConnectorCore = require('@dynamic-labs/wallet-connector-core');
8
8
  var logger$1 = require('@dynamic-labs/logger');
9
+ var FreighterWalletConnector = require('../connectors/FreighterWalletConnector/FreighterWalletConnector.cjs');
10
+ var LobstrWalletConnector = require('../connectors/LobstrWalletConnector/LobstrWalletConnector.cjs');
11
+ var OneKeyWalletConnector = require('../connectors/OneKeyWalletConnector/OneKeyWalletConnector.cjs');
9
12
 
10
13
  const logger = new logger$1.Logger('fetchInjectedWalletConnectors');
11
- const stellarWalletConnectors = [];
14
+ const initialStellarWalletConnectors = [LobstrWalletConnector.LobstrWalletConnector, FreighterWalletConnector.FreighterWalletConnector, OneKeyWalletConnector.OneKeyWalletConnector];
15
+ const stellarWalletConnectors = [
16
+ ...initialStellarWalletConnectors,
17
+ ];
12
18
  const checkAndEmitWalletConnector = (walletConnector) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
13
19
  var _a;
14
20
  try {