@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.
- package/CHANGELOG.md +19 -0
- package/_virtual/_tslib.cjs +36 -0
- package/_virtual/_tslib.js +32 -0
- package/package.cjs +1 -1
- package/package.js +1 -1
- package/package.json +14 -4
- package/src/connectors/BitgetTronConnector/BitgetTronConnector.cjs +20 -0
- package/src/connectors/BitgetTronConnector/BitgetTronConnector.d.ts +7 -0
- package/src/connectors/BitgetTronConnector/BitgetTronConnector.js +16 -0
- package/src/connectors/BitgetTronConnector/index.d.ts +1 -0
- package/src/connectors/BybitTronConnector/BybitTronConnector.cjs +20 -0
- package/src/connectors/BybitTronConnector/BybitTronConnector.d.ts +7 -0
- package/src/connectors/BybitTronConnector/BybitTronConnector.js +16 -0
- package/src/connectors/BybitTronConnector/index.d.ts +1 -0
- package/src/connectors/OKXTronConnector/OKXTronConnector.cjs +20 -0
- package/src/connectors/OKXTronConnector/OKXTronConnector.d.ts +7 -0
- package/src/connectors/OKXTronConnector/OKXTronConnector.js +16 -0
- package/src/connectors/OKXTronConnector/index.d.ts +1 -0
- package/src/connectors/TronWalletConnector/TronWalletConnector.cjs +255 -0
- package/src/connectors/TronWalletConnector/TronWalletConnector.d.ts +42 -0
- package/src/connectors/TronWalletConnector/TronWalletConnector.js +251 -0
- package/src/connectors/TronWalletConnector/index.d.ts +1 -0
- package/src/connectors/TrustTronConnector/TrustTronConnector.cjs +20 -0
- package/src/connectors/TrustTronConnector/TrustTronConnector.d.ts +7 -0
- package/src/connectors/TrustTronConnector/TrustTronConnector.js +16 -0
- package/src/connectors/TrustTronConnector/index.d.ts +1 -0
- package/src/index.cjs +18 -0
- package/src/index.d.ts +6 -1
- package/src/index.js +14 -0
- package/src/types.d.ts +78 -39
- package/src/utils/TronUiTransaction/TronUiTransaction.cjs +113 -0
- package/src/utils/TronUiTransaction/TronUiTransaction.d.ts +39 -0
- package/src/utils/TronUiTransaction/TronUiTransaction.js +108 -0
- package/src/utils/TronUiTransaction/index.d.ts +1 -0
- package/src/utils/getDefaultTronNetworks.cjs +60 -0
- package/src/utils/getDefaultTronNetworks.d.ts +9 -0
- package/src/utils/getDefaultTronNetworks.js +53 -0
- package/src/utils/index.d.ts +3 -0
- package/src/utils/provider.cjs +59 -0
- package/src/utils/provider.d.ts +24 -0
- package/src/utils/provider.js +53 -0
- package/src/wallet/TronWallet.cjs +106 -0
- package/src/wallet/TronWallet.d.ts +22 -0
- package/src/wallet/TronWallet.js +102 -0
- package/src/wallet/index.d.ts +2 -0
- package/src/wallet/isTronWallet/index.d.ts +1 -0
- package/src/wallet/isTronWallet/isTronWallet.cjs +8 -0
- package/src/wallet/isTronWallet/isTronWallet.d.ts +3 -0
- 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
|
-
|
|
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
|
|
4
|
-
|
|
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
|
|
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
|
-
*
|
|
48
|
+
* Request connection to the wallet
|
|
19
49
|
* @returns Promise that resolves to connection result
|
|
20
50
|
*/
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}>;
|
|
51
|
+
request?(params: {
|
|
52
|
+
method: string;
|
|
53
|
+
params?: unknown;
|
|
54
|
+
}): Promise<unknown>;
|
|
26
55
|
/**
|
|
27
|
-
*
|
|
28
|
-
* @returns Promise that resolves
|
|
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
|
-
|
|
59
|
+
connect?(): Promise<TronConnectionResult>;
|
|
36
60
|
/**
|
|
37
|
-
*
|
|
38
|
-
* @returns Promise that resolves
|
|
61
|
+
* Disconnect from the wallet
|
|
62
|
+
* @returns Promise that resolves when disconnected
|
|
39
63
|
*/
|
|
40
|
-
|
|
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
|
|
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
|
|
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;
|