@dynamic-labs/tron 4.33.0 → 4.35.0

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 (49) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/_virtual/_tslib.cjs +36 -0
  3. package/_virtual/_tslib.js +32 -0
  4. package/package.cjs +1 -1
  5. package/package.js +1 -1
  6. package/package.json +14 -4
  7. package/src/connectors/BitgetTronConnector/BitgetTronConnector.cjs +20 -0
  8. package/src/connectors/BitgetTronConnector/BitgetTronConnector.d.ts +7 -0
  9. package/src/connectors/BitgetTronConnector/BitgetTronConnector.js +16 -0
  10. package/src/connectors/BitgetTronConnector/index.d.ts +1 -0
  11. package/src/connectors/BybitTronConnector/BybitTronConnector.cjs +20 -0
  12. package/src/connectors/BybitTronConnector/BybitTronConnector.d.ts +7 -0
  13. package/src/connectors/BybitTronConnector/BybitTronConnector.js +16 -0
  14. package/src/connectors/BybitTronConnector/index.d.ts +1 -0
  15. package/src/connectors/OKXTronConnector/OKXTronConnector.cjs +20 -0
  16. package/src/connectors/OKXTronConnector/OKXTronConnector.d.ts +7 -0
  17. package/src/connectors/OKXTronConnector/OKXTronConnector.js +16 -0
  18. package/src/connectors/OKXTronConnector/index.d.ts +1 -0
  19. package/src/connectors/TronWalletConnector/TronWalletConnector.cjs +255 -0
  20. package/src/connectors/TronWalletConnector/TronWalletConnector.d.ts +42 -0
  21. package/src/connectors/TronWalletConnector/TronWalletConnector.js +251 -0
  22. package/src/connectors/TronWalletConnector/index.d.ts +1 -0
  23. package/src/connectors/TrustTronConnector/TrustTronConnector.cjs +20 -0
  24. package/src/connectors/TrustTronConnector/TrustTronConnector.d.ts +7 -0
  25. package/src/connectors/TrustTronConnector/TrustTronConnector.js +16 -0
  26. package/src/connectors/TrustTronConnector/index.d.ts +1 -0
  27. package/src/index.cjs +18 -0
  28. package/src/index.d.ts +6 -1
  29. package/src/index.js +14 -0
  30. package/src/types.d.ts +78 -39
  31. package/src/utils/TronUiTransaction/TronUiTransaction.cjs +113 -0
  32. package/src/utils/TronUiTransaction/TronUiTransaction.d.ts +39 -0
  33. package/src/utils/TronUiTransaction/TronUiTransaction.js +108 -0
  34. package/src/utils/TronUiTransaction/index.d.ts +1 -0
  35. package/src/utils/getDefaultTronNetworks.cjs +60 -0
  36. package/src/utils/getDefaultTronNetworks.d.ts +9 -0
  37. package/src/utils/getDefaultTronNetworks.js +53 -0
  38. package/src/utils/index.d.ts +3 -0
  39. package/src/utils/provider.cjs +59 -0
  40. package/src/utils/provider.d.ts +24 -0
  41. package/src/utils/provider.js +53 -0
  42. package/src/wallet/TronWallet.cjs +106 -0
  43. package/src/wallet/TronWallet.d.ts +22 -0
  44. package/src/wallet/TronWallet.js +102 -0
  45. package/src/wallet/index.d.ts +2 -0
  46. package/src/wallet/isTronWallet/index.d.ts +1 -0
  47. package/src/wallet/isTronWallet/isTronWallet.cjs +8 -0
  48. package/src/wallet/isTronWallet/isTronWallet.d.ts +3 -0
  49. package/src/wallet/isTronWallet/isTronWallet.js +4 -0
@@ -0,0 +1,251 @@
1
+ 'use client'
2
+ import { __awaiter } from '../../../_virtual/_tslib.js';
3
+ import { WalletConnectorBase, logger } from '@dynamic-labs/wallet-connector-core';
4
+ import { DynamicError } from '@dynamic-labs/utils';
5
+ import { TronWallet } from '../../wallet/TronWallet.js';
6
+ import { assertProvider, getCurrentAddress, isProviderReady } from '../../utils/provider.js';
7
+ import { getDefaultTronNetworks } from '../../utils/getDefaultTronNetworks.js';
8
+ import { TronUiTransaction } from '../../utils/TronUiTransaction/TronUiTransaction.js';
9
+
10
+ class TronWalletConnector extends WalletConnectorBase {
11
+ constructor(opts) {
12
+ super(opts);
13
+ this.ChainWallet = TronWallet;
14
+ this.name = 'Tron';
15
+ this.overrideKey = 'injectedtron';
16
+ this.connectedChain = 'TRON';
17
+ this.supportedChains = ['TRON'];
18
+ this.switchNetworkOnlyFromWallet = true;
19
+ this.tronNetworks = opts.tronNetworks || getDefaultTronNetworks();
20
+ this.setupNetworkChangeListener();
21
+ }
22
+ setupNetworkChangeListener() {
23
+ const provider = this.getProvider();
24
+ if (!provider)
25
+ return;
26
+ if (provider.onNetworkChange &&
27
+ typeof provider.onNetworkChange === 'function') {
28
+ provider.onNetworkChange((network) => {
29
+ logger.debug(`[${this.name}] Network change via provider:`, network);
30
+ this.emit('chainChange', {
31
+ chain: network.chainId || network.name || 'unknown',
32
+ });
33
+ });
34
+ }
35
+ }
36
+ connect() {
37
+ return __awaiter(this, void 0, void 0, function* () {
38
+ const provider = assertProvider(this.getProvider(), 'Tron');
39
+ try {
40
+ if (provider.request) {
41
+ yield provider.request({ method: 'tron_requestAccounts' });
42
+ }
43
+ else if (provider.connect) {
44
+ yield provider.connect();
45
+ }
46
+ logger.debug(`[${this.name}] Connected successfully`);
47
+ }
48
+ catch (error) {
49
+ logger.error(`[${this.name}] Connection failed:`, error);
50
+ throw new DynamicError('Failed to connect to Tron wallet');
51
+ }
52
+ });
53
+ }
54
+ getAddress() {
55
+ return __awaiter(this, void 0, void 0, function* () {
56
+ const provider = this.getProvider();
57
+ if (!provider)
58
+ return undefined;
59
+ const address = getCurrentAddress(provider);
60
+ if (address)
61
+ return address;
62
+ if (!isProviderReady(provider)) {
63
+ yield this.connect();
64
+ return getCurrentAddress(provider);
65
+ }
66
+ return undefined;
67
+ });
68
+ }
69
+ getNetwork() {
70
+ return __awaiter(this, void 0, void 0, function* () {
71
+ var _a, _b;
72
+ const provider = this.getProvider();
73
+ if (!provider)
74
+ return undefined;
75
+ if (provider.chainId)
76
+ return String(provider.chainId);
77
+ if (provider.getNetwork) {
78
+ try {
79
+ const networkInfo = yield provider.getNetwork();
80
+ return (networkInfo === null || networkInfo === void 0 ? void 0 : networkInfo.chainId) ? String(networkInfo.chainId) : undefined;
81
+ }
82
+ catch (_c) {
83
+ return undefined;
84
+ }
85
+ }
86
+ if ((_b = (_a = provider.tronWeb) === null || _a === void 0 ? void 0 : _a.fullNode) === null || _b === void 0 ? void 0 : _b.host) {
87
+ const { host } = provider.tronWeb.fullNode;
88
+ const match = this.findNetworkByRpcUrl(host) || this.findNetworkByHostPattern(host);
89
+ return (match === null || match === void 0 ? void 0 : match.chainId) ? String(match.chainId) : undefined;
90
+ }
91
+ return undefined;
92
+ });
93
+ }
94
+ findNetworkByRpcUrl(host) {
95
+ return this.tronNetworks.find((network) => network.rpcUrls.some((rpcUrl) => {
96
+ try {
97
+ const rpcHostname = new URL(rpcUrl).hostname;
98
+ const providerHostname = new URL(host).hostname;
99
+ return (providerHostname.includes(rpcHostname) ||
100
+ rpcHostname.includes(providerHostname));
101
+ }
102
+ catch (_a) {
103
+ return host.includes(rpcUrl) || rpcUrl.includes(host);
104
+ }
105
+ }));
106
+ }
107
+ findNetworkByHostPattern(host) {
108
+ const hostLower = host.toLowerCase();
109
+ return this.tronNetworks.find((network) => {
110
+ const networkNameLower = network.name.toLowerCase();
111
+ if (hostLower.includes('nile') && networkNameLower.includes('nile'))
112
+ return true;
113
+ if (hostLower.includes('shasta') && networkNameLower.includes('shasta'))
114
+ return true;
115
+ if (hostLower.includes('mainnet') && networkNameLower.includes('mainnet'))
116
+ return true;
117
+ if (hostLower.includes('trongrid') &&
118
+ !hostLower.includes('nile') &&
119
+ !hostLower.includes('shasta') &&
120
+ networkNameLower.includes('mainnet'))
121
+ return true;
122
+ return false;
123
+ });
124
+ }
125
+ getConnectedAccounts() {
126
+ return __awaiter(this, void 0, void 0, function* () {
127
+ const address = yield this.getAddress();
128
+ return address ? [address] : [];
129
+ });
130
+ }
131
+ isTestnet() {
132
+ return __awaiter(this, void 0, void 0, function* () {
133
+ var _a;
134
+ const networkId = yield this.getNetwork();
135
+ const tronNetwork = this.tronNetworks.find((n) => n.chainId === networkId);
136
+ return (_a = tronNetwork === null || tronNetwork === void 0 ? void 0 : tronNetwork.isTestnet) !== null && _a !== void 0 ? _a : false;
137
+ });
138
+ }
139
+ /**
140
+ * 🔑 Enforce signMessageV2 only
141
+ */
142
+ signMessage(messageToSign) {
143
+ return __awaiter(this, void 0, void 0, function* () {
144
+ var _a, _b;
145
+ const provider = assertProvider(this.getProvider(), 'Tron');
146
+ if (!isProviderReady(provider)) {
147
+ yield this.connect();
148
+ }
149
+ if ((_b = (_a = provider.tronWeb) === null || _a === void 0 ? void 0 : _a.trx) === null || _b === void 0 ? void 0 : _b.signMessageV2) {
150
+ const sig = yield provider.tronWeb.trx.signMessageV2(messageToSign);
151
+ if (typeof sig !== 'string') {
152
+ throw new DynamicError('Invalid signature format from wallet');
153
+ }
154
+ return sig;
155
+ }
156
+ throw new DynamicError('Wallet does not support signMessageV2, which is required');
157
+ });
158
+ }
159
+ getBalance(address) {
160
+ return __awaiter(this, void 0, void 0, function* () {
161
+ var _a, _b;
162
+ const provider = this.getProvider();
163
+ if (!((_b = (_a = provider === null || provider === void 0 ? void 0 : provider.tronWeb) === null || _a === void 0 ? void 0 : _a.trx) === null || _b === void 0 ? void 0 : _b.getBalance))
164
+ return '0';
165
+ try {
166
+ const balance = yield provider.tronWeb.trx.getBalance(address);
167
+ return (balance / 1000000).toFixed(6); // SUN → TRX
168
+ }
169
+ catch (error) {
170
+ logger.error(`[${this.name}] Failed to get balance:`, error);
171
+ return '0';
172
+ }
173
+ });
174
+ }
175
+ isInstalledOnBrowser() {
176
+ const provider = this.getProvider();
177
+ return Boolean(provider);
178
+ }
179
+ getEnabledNetworks() {
180
+ return this.tronNetworks;
181
+ }
182
+ switchNetwork() {
183
+ return __awaiter(this, void 0, void 0, function* () {
184
+ throw new DynamicError('Network switching must be done manually in the Tron wallet UI');
185
+ });
186
+ }
187
+ getBlockExplorerUrlsForCurrentNetwork() {
188
+ return __awaiter(this, void 0, void 0, function* () {
189
+ var _a, _b;
190
+ const currentNetwork = yield this.getNetwork();
191
+ return ((_b = (_a = this.tronNetworks.find((n) => n.chainId.toString() === (currentNetwork === null || currentNetwork === void 0 ? void 0 : currentNetwork.toString()))) === null || _a === void 0 ? void 0 : _a.blockExplorerUrls) !== null && _b !== void 0 ? _b : []);
192
+ });
193
+ }
194
+ endSession() {
195
+ return __awaiter(this, void 0, void 0, function* () {
196
+ const provider = this.getProvider();
197
+ if (provider === null || provider === void 0 ? void 0 : provider.disconnect) {
198
+ try {
199
+ yield provider.disconnect();
200
+ }
201
+ catch (error) {
202
+ logger.debug(`[${this.name}] Error during disconnect:`, error);
203
+ }
204
+ }
205
+ });
206
+ }
207
+ /** Function used to create transactions in the SDK interface */
208
+ createUiTransaction(from) {
209
+ return __awaiter(this, void 0, void 0, function* () {
210
+ yield this.validateActiveWallet(from);
211
+ const provider = assertProvider(this.getProvider(), 'Tron');
212
+ if (!provider.tronWeb) {
213
+ throw new DynamicError('TronWeb not available');
214
+ }
215
+ return new TronUiTransaction({
216
+ from,
217
+ onSubmit: (transaction) => __awaiter(this, void 0, void 0, function* () {
218
+ var _a;
219
+ if (!transaction.to) {
220
+ throw new DynamicError('Destination address is required');
221
+ }
222
+ // Create a minimal wallet instance for sending
223
+ const wallet = new TronWallet({
224
+ address: from,
225
+ chain: 'TRON',
226
+ connector: this,
227
+ id: 'temp-id',
228
+ isAuthenticated: false,
229
+ key: 'temp-key',
230
+ });
231
+ if (transaction.nonNativeAddress && transaction.nonNativeValue) {
232
+ // Handle TRC20 token transfers - simplified for now
233
+ throw new DynamicError('TRC20 token transfers not yet implemented');
234
+ }
235
+ else if (transaction.value) {
236
+ // Handle native TRX transfers
237
+ const trxAmount = Number(transaction.value) / 1000000; // Convert SUN to TRX
238
+ const result = yield wallet.sendTrx(transaction.to, trxAmount, {
239
+ from,
240
+ });
241
+ return result.txid || ((_a = result.transaction) === null || _a === void 0 ? void 0 : _a.txID);
242
+ }
243
+ throw new DynamicError('Invalid transaction parameters');
244
+ }),
245
+ provider,
246
+ });
247
+ });
248
+ }
249
+ }
250
+
251
+ export { TronWalletConnector };
@@ -0,0 +1 @@
1
+ export { TronWalletConnector } from './TronWalletConnector';
@@ -0,0 +1,20 @@
1
+ 'use client'
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ var TronWalletConnector = require('../TronWalletConnector/TronWalletConnector.cjs');
7
+
8
+ class TrustTronConnector extends TronWalletConnector.TronWalletConnector {
9
+ constructor() {
10
+ super(...arguments);
11
+ this.name = 'Trust Wallet';
12
+ this.overrideKey = 'trusttron';
13
+ }
14
+ getProvider() {
15
+ var _a;
16
+ return (_a = window.trustwallet) === null || _a === void 0 ? void 0 : _a.tronLink;
17
+ }
18
+ }
19
+
20
+ exports.TrustTronConnector = TrustTronConnector;
@@ -0,0 +1,7 @@
1
+ import type { ITronProvider } from '../../types';
2
+ import { TronWalletConnector } from '../TronWalletConnector';
3
+ export declare class TrustTronConnector extends TronWalletConnector {
4
+ name: string;
5
+ overrideKey: string;
6
+ getProvider(): ITronProvider | undefined;
7
+ }
@@ -0,0 +1,16 @@
1
+ 'use client'
2
+ import { TronWalletConnector } from '../TronWalletConnector/TronWalletConnector.js';
3
+
4
+ class TrustTronConnector extends TronWalletConnector {
5
+ constructor() {
6
+ super(...arguments);
7
+ this.name = 'Trust Wallet';
8
+ this.overrideKey = 'trusttron';
9
+ }
10
+ getProvider() {
11
+ var _a;
12
+ return (_a = window.trustwallet) === null || _a === void 0 ? void 0 : _a.tronLink;
13
+ }
14
+ }
15
+
16
+ export { TrustTronConnector };
@@ -0,0 +1 @@
1
+ export { TrustTronConnector } from './TrustTronConnector';
package/src/index.cjs CHANGED
@@ -1,7 +1,25 @@
1
1
  'use client'
2
2
  'use strict';
3
3
 
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
4
6
  var assertPackageVersion = require('@dynamic-labs/assert-package-version');
5
7
  var _package = require('../package.cjs');
8
+ var BitgetTronConnector = require('./connectors/BitgetTronConnector/BitgetTronConnector.cjs');
9
+ var BybitTronConnector = require('./connectors/BybitTronConnector/BybitTronConnector.cjs');
10
+ var OKXTronConnector = require('./connectors/OKXTronConnector/OKXTronConnector.cjs');
11
+ var TrustTronConnector = require('./connectors/TrustTronConnector/TrustTronConnector.cjs');
12
+ var isTronWallet = require('./wallet/isTronWallet/isTronWallet.cjs');
13
+ var TronWallet = require('./wallet/TronWallet.cjs');
6
14
 
7
15
  assertPackageVersion.assertPackageVersion('@dynamic-labs/tron', _package.version);
16
+ const TronWalletConnectors = () => [
17
+ BitgetTronConnector.BitgetTronConnector,
18
+ BybitTronConnector.BybitTronConnector,
19
+ OKXTronConnector.OKXTronConnector,
20
+ TrustTronConnector.TrustTronConnector,
21
+ ];
22
+
23
+ exports.isTronWallet = isTronWallet.isTronWallet;
24
+ exports.TronWallet = TronWallet.TronWallet;
25
+ exports.TronWalletConnectors = TronWalletConnectors;
package/src/index.d.ts CHANGED
@@ -1 +1,6 @@
1
- export { type ITronProvider } from './types';
1
+ import { BitgetTronConnector } from './connectors/BitgetTronConnector';
2
+ export { type ITronProvider, type TronConnectionResult } from './types';
3
+ export { type TronWalletConnector } from './connectors/TronWalletConnector';
4
+ export { isTronWallet } from './wallet/isTronWallet';
5
+ export { TronWallet } from './wallet/TronWallet';
6
+ export declare const TronWalletConnectors: () => (typeof BitgetTronConnector)[];
package/src/index.js CHANGED
@@ -1,5 +1,19 @@
1
1
  'use client'
2
2
  import { assertPackageVersion } from '@dynamic-labs/assert-package-version';
3
3
  import { version } from '../package.js';
4
+ import { BitgetTronConnector } from './connectors/BitgetTronConnector/BitgetTronConnector.js';
5
+ import { BybitTronConnector } from './connectors/BybitTronConnector/BybitTronConnector.js';
6
+ import { OKXTronConnector } from './connectors/OKXTronConnector/OKXTronConnector.js';
7
+ import { TrustTronConnector } from './connectors/TrustTronConnector/TrustTronConnector.js';
8
+ export { isTronWallet } from './wallet/isTronWallet/isTronWallet.js';
9
+ export { TronWallet } from './wallet/TronWallet.js';
4
10
 
5
11
  assertPackageVersion('@dynamic-labs/tron', version);
12
+ const TronWalletConnectors = () => [
13
+ BitgetTronConnector,
14
+ BybitTronConnector,
15
+ OKXTronConnector,
16
+ TrustTronConnector,
17
+ ];
18
+
19
+ export { TronWalletConnectors };
package/src/types.d.ts CHANGED
@@ -1,11 +1,39 @@
1
1
  import type { TronWeb, Types } from 'tronweb';
2
2
  /**
3
- * Tron wallet provider interface
4
- * Defines the contract that Tron wallet providers must implement
3
+ * Global window interface extension for Tron wallet providers
4
+ */
5
+ declare global {
6
+ interface Window {
7
+ tronLink?: ITronProvider;
8
+ tronWeb?: TronWeb;
9
+ bitkeep?: {
10
+ tron?: ITronProvider;
11
+ };
12
+ bybitWallet?: {
13
+ tronLink?: ITronProvider;
14
+ tronWeb?: TronWeb;
15
+ };
16
+ okxwallet?: {
17
+ tronLink?: ITronProvider;
18
+ tronWeb?: TronWeb;
19
+ };
20
+ trustwallet?: {
21
+ tronLink?: ITronProvider;
22
+ tronWeb?: TronWeb;
23
+ };
24
+ }
25
+ }
26
+ /**
27
+ * Interface that all Tron wallet providers must implement.
28
+ *
29
+ * This interface is designed to be flexible and work with different
30
+ * Tron wallet implementations like TronLink, TokenPocket, etc.
5
31
  */
6
32
  export interface ITronProvider {
7
33
  /** Whether the wallet is currently connected */
8
- isConnected: boolean;
34
+ isConnected?: boolean;
35
+ /** Whether the wallet is ready */
36
+ ready?: boolean;
9
37
  /** The current network chain ID */
10
38
  chainId?: string;
11
39
  /** The current network name */
@@ -14,60 +42,52 @@ export interface ITronProvider {
14
42
  address?: string;
15
43
  /** TronWeb instance */
16
44
  tronWeb?: TronWeb;
45
+ /** TronLink specific flag */
46
+ isTronLink?: boolean;
17
47
  /**
18
- * Connect to the wallet
48
+ * Request connection to the wallet
19
49
  * @returns Promise that resolves to connection result
20
50
  */
21
- connect(): Promise<{
22
- address: string;
23
- chainId?: string;
24
- network?: string;
25
- }>;
51
+ request?(params: {
52
+ method: string;
53
+ params?: unknown;
54
+ }): Promise<unknown>;
26
55
  /**
27
- * Disconnect from the wallet
28
- * @returns Promise that resolves when disconnected
29
- */
30
- disconnect(): Promise<void>;
31
- /**
32
- * Get the current account address
33
- * @returns Promise that resolves to the address
56
+ * Connect to the wallet (TronLink style)
57
+ * @returns Promise that resolves to connection result
34
58
  */
35
- getAddress(): Promise<string>;
59
+ connect?(): Promise<TronConnectionResult>;
36
60
  /**
37
- * Get the current network information
38
- * @returns Promise that resolves to network info
61
+ * Disconnect from the wallet
62
+ * @returns Promise that resolves when disconnected
39
63
  */
40
- getNetwork(): Promise<{
41
- chainId: string;
42
- name: string;
43
- }>;
64
+ disconnect?(): Promise<void>;
44
65
  /**
45
66
  * Sign a message
46
67
  * @param message - Message to sign
47
- * @param useTronHeader - Whether to use Tron message header
48
68
  * @returns Promise that resolves to the signature
49
69
  */
50
- signMessage(message: string | Uint8Array, useTronHeader?: boolean): Promise<string>;
70
+ signMessage?(message: string): Promise<string>;
51
71
  /**
52
72
  * Sign a transaction
53
73
  * @param transaction - Transaction to sign
54
- * @param privateKey - Optional private key (if not using wallet's key)
55
74
  * @returns Promise that resolves to the signed transaction
56
75
  */
57
- signTransaction(transaction: Types.Transaction, privateKey?: string): Promise<Types.SignedTransaction>;
76
+ signTransaction?(transaction: Types.Transaction): Promise<Types.SignedTransaction>;
58
77
  /**
59
78
  * Send a transaction
60
79
  * @param transaction - Transaction to send
61
80
  * @returns Promise that resolves to transaction result
62
81
  */
63
- sendTransaction(transaction: Types.SignedTransaction): Promise<Types.BroadcastReturn<Types.SignedTransaction>>;
82
+ sendTransaction?(transaction: Types.SignedTransaction): Promise<Types.BroadcastReturn<Types.SignedTransaction>>;
64
83
  /**
65
84
  * Send TRX to an address
66
85
  * @param to - Recipient address
67
86
  * @param amount - Amount in TRX
87
+ * @param options - Optional parameters
68
88
  * @returns Promise that resolves to transaction result
69
89
  */
70
- sendTrx(to: string, amount: number, options?: {
90
+ sendTrx?(to: string, amount: number, options?: {
71
91
  from?: string;
72
92
  }): Promise<Types.BroadcastReturn<Types.SignedTransaction>>;
73
93
  /**
@@ -75,36 +95,45 @@ export interface ITronProvider {
75
95
  * @param to - Recipient address
76
96
  * @param amount - Amount of tokens
77
97
  * @param tokenId - Token ID
98
+ * @param options - Optional parameters
78
99
  * @returns Promise that resolves to transaction result
79
100
  */
80
- sendToken(to: string, amount: number, tokenId: string | number, options?: {
101
+ sendToken?(to: string, amount: number, tokenId: string | number, options?: {
81
102
  from?: string;
82
103
  }): Promise<Types.BroadcastReturn<Types.SignedTransaction>>;
83
104
  /**
84
105
  * Get account balance
85
106
  * @param address - Optional address (defaults to current account)
86
- * @returns Promise that resolves to balance
107
+ * @returns Promise that resolves to balance in SUN
87
108
  */
88
- getBalance(address?: string): Promise<number>;
109
+ getBalance?(address?: string): Promise<number>;
89
110
  /**
90
111
  * Get token balance
91
112
  * @param tokenId - Token ID
92
113
  * @param address - Optional address (defaults to current account)
93
114
  * @returns Promise that resolves to token balance
94
115
  */
95
- getTokenBalance(tokenId: string, address?: string): Promise<number>;
116
+ getTokenBalance?(tokenId: string, address?: string): Promise<number>;
117
+ /**
118
+ * Get current network information
119
+ * @returns Promise that resolves to network info
120
+ */
121
+ getNetwork?(): Promise<{
122
+ chainId: string;
123
+ name: string;
124
+ }>;
96
125
  /**
97
126
  * Switch network
98
127
  * @param networkId - Network ID to switch to
99
128
  * @returns Promise that resolves when network is switched
100
129
  */
101
- switchNetwork(networkId: string): Promise<void>;
130
+ switchNetwork?(networkId: string): Promise<void>;
102
131
  /**
103
132
  * Add network
104
133
  * @param network - Network configuration to add
105
134
  * @returns Promise that resolves when network is added
106
135
  */
107
- addNetwork(network: {
136
+ addNetwork?(network: {
108
137
  networkId: string;
109
138
  name: string;
110
139
  rpcUrl: string;
@@ -114,12 +143,12 @@ export interface ITronProvider {
114
143
  * Listen for account changes
115
144
  * @param callback - Callback function for account changes
116
145
  */
117
- onAccountChange(callback: (address: string) => void): void;
146
+ onAccountChange?(callback: (address: string) => void): void;
118
147
  /**
119
148
  * Listen for network changes
120
149
  * @param callback - Callback function for network changes
121
150
  */
122
- onNetworkChange(callback: (network: {
151
+ onNetworkChange?(callback: (network: {
123
152
  chainId: string;
124
153
  name: string;
125
154
  }) => void): void;
@@ -127,13 +156,23 @@ export interface ITronProvider {
127
156
  * Remove account change listener
128
157
  * @param callback - Callback function to remove
129
158
  */
130
- removeAccountChangeListener(callback: (address: string) => void): void;
159
+ removeAccountChangeListener?(callback: (address: string) => void): void;
131
160
  /**
132
161
  * Remove network change listener
133
162
  * @param callback - Callback function to remove
134
163
  */
135
- removeNetworkChangeListener(callback: (network: {
164
+ removeNetworkChangeListener?(callback: (network: {
136
165
  chainId: string;
137
166
  name: string;
138
167
  }) => void): void;
168
+ /** Additional properties that providers may implement */
169
+ [key: string]: unknown;
139
170
  }
171
+ /**
172
+ * Result from wallet connection
173
+ */
174
+ export type TronConnectionResult = {
175
+ address: string;
176
+ chainId?: string;
177
+ network?: string;
178
+ } | string | boolean;