@meshconnect/uwc-injected-connector 0.14.0 → 0.14.2-snapshot.907df55

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.
@@ -1,4 +1,5 @@
1
1
  import type { Network, ExtensionInjectedProvider, IntegratedBrowserInjectedProvider, Connector, ConnectorResult, SwitchNetworkResult, Namespace, DetectedEIP6963WalletInfo, DetectedSolanaWalletInfo, DetectedTronWalletInfo, DetectedTonWalletInfo, TransactionRequest, TransactionResult, NetworkRpcMap, EVMCapabilities, SignatureType, EIP712TypedData, WalletMetadata, TonConnectConfig } from '@meshconnect/uwc-types';
2
+ import { type TronConnectorConfig } from '@meshconnect/uwc-tron-connector';
2
3
  export declare class InjectedConnector implements Connector {
3
4
  private readonly storageService;
4
5
  private ethereumService;
@@ -10,7 +11,18 @@ export declare class InjectedConnector implements Connector {
10
11
  private transactionService;
11
12
  private networkRpcMap;
12
13
  private tonConnectManifestUrl;
13
- constructor(networkRpcMap?: NetworkRpcMap, expectedWallets?: WalletMetadata[], tonConnectConfig?: TonConnectConfig);
14
+ /**
15
+ * Mesh-owned Tron connector. When set (via `tronConnectorConfig`), the Tron
16
+ * namespace is routed through `@meshconnect/uwc-tron-connector` instead of the
17
+ * legacy `window.tronWeb` path; the `tronService` is not consulted for Tron.
18
+ */
19
+ private tronConnector;
20
+ /**
21
+ * Configured networks, used to resolve the Tron network for cross-namespace
22
+ * Tron auto-connect (see `enrichWithTron`).
23
+ */
24
+ private networks;
25
+ constructor(networkRpcMap?: NetworkRpcMap, expectedWallets?: WalletMetadata[], tonConnectConfig?: TonConnectConfig, tronConnectorConfig?: TronConnectorConfig, networks?: Network[]);
14
26
  /**
15
27
  * Get available wallets for a specific namespace
16
28
  */
@@ -19,6 +31,17 @@ export declare class InjectedConnector implements Connector {
19
31
  * Connect to a wallet
20
32
  */
21
33
  connect(network: Network, provider: ExtensionInjectedProvider | IntegratedBrowserInjectedProvider): Promise<ConnectorResult>;
34
+ /** Establish a fresh connection for the target namespace. */
35
+ private connectToNamespace;
36
+ /**
37
+ * Cross-namespace Tron gather: when the Tron connector is configured and the
38
+ * wallet exposes a detected Tron provider, connect Tron and merge its address
39
+ * into `availableAddresses` — the Tron equivalent of the ETH/Solana/TON
40
+ * gathers in `ConnectionManager`. Best-effort: a missing Tron network, an
41
+ * undetected wallet, or a declined prompt leaves the rest of the connection
42
+ * intact (same as the other gathers, which swallow their failures).
43
+ */
44
+ private enrichWithTron;
22
45
  /**
23
46
  * Switch to a different network
24
47
  */
@@ -1 +1 @@
1
- {"version":3,"file":"injected-connector.d.ts","sourceRoot":"","sources":["../src/injected-connector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EAEP,yBAAyB,EACzB,iCAAiC,EACjC,SAAS,EACT,eAAe,EACf,mBAAmB,EACnB,SAAS,EACT,yBAAyB,EACzB,wBAAwB,EACxB,sBAAsB,EACtB,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EAEjB,aAAa,EACb,eAAe,EACf,aAAa,EACb,eAAe,EACf,cAAc,EACd,gBAAgB,EACjB,MAAM,wBAAwB,CAAA;AAkB/B,qBAAa,iBAAkB,YAAW,SAAS;IACjD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,iBAAiB,CAAmB;IAC5C,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,kBAAkB,CAAoB;IAC9C,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,qBAAqB,CAAqC;gBAGhE,aAAa,GAAE,aAAkB,EACjC,eAAe,GAAE,cAAc,EAAO,EACtC,gBAAgB,CAAC,EAAE,gBAAgB;IA8BrC;;OAEG;IACG,mBAAmB,CACvB,SAAS,EAAE,SAAS,EACpB,eAAe,GAAE,cAAc,EAAO,GACrC,OAAO,CACN,yBAAyB,EAAE,GAC3B,wBAAwB,EAAE,GAC1B,sBAAsB,EAAE,GACxB,qBAAqB,EAAE,CAC1B;IAwDD;;OAEG;IACG,OAAO,CACX,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,yBAAyB,GAAG,iCAAiC,GACtE,OAAO,CAAC,eAAe,CAAC;IAyC3B;;OAEG;IACG,aAAa,CACjB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,yBAAyB,GAAG,iCAAiC,GACtE,OAAO,CAAC,mBAAmB,CAAC;IAI/B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC;;OAEG;IACG,WAAW,CACf,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,yBAAyB,GAAG,iCAAiC,GACtE,OAAO,CAAC,aAAa,CAAC;IAiFzB;;;;;OAKG;IACG,aAAa,CACjB,SAAS,EAAE,eAAe,EAC1B,SAAS,CAAC,EAAE,yBAAyB,GAAG,iCAAiC,GACxE,OAAO,CAAC,MAAM,CAAC;IA8BlB;;OAEG;IACG,eAAe,CACnB,OAAO,EAAE,kBAAkB,EAC3B,QAAQ,EAAE,yBAAyB,GAAG,iCAAiC,GACtE,OAAO,CAAC,iBAAiB,CAAC;IA+D7B;;;;OAIG;IACG,qBAAqB,CACzB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,OAAO,EAAE,GAClB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAS3C;;;;;;OAMG;IACG,0BAA0B,CAC9B,YAAY,EAAE,UAAU,GACvB,OAAO,CAAC,UAAU,CAAC;CAgGvB"}
1
+ {"version":3,"file":"injected-connector.d.ts","sourceRoot":"","sources":["../src/injected-connector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EAEP,yBAAyB,EACzB,iCAAiC,EACjC,SAAS,EACT,eAAe,EAEf,mBAAmB,EACnB,SAAS,EACT,yBAAyB,EACzB,wBAAwB,EACxB,sBAAsB,EACtB,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EAEjB,aAAa,EACb,eAAe,EACf,aAAa,EACb,eAAe,EACf,cAAc,EACd,gBAAgB,EACjB,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,iCAAiC,CAAA;AAiBxC,qBAAa,iBAAkB,YAAW,SAAS;IACjD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,iBAAiB,CAAmB;IAC5C,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,kBAAkB,CAAoB;IAC9C,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,qBAAqB,CAAqC;IAClE;;;;OAIG;IACH,OAAO,CAAC,aAAa,CAAsB;IAC3C;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAW;gBAGzB,aAAa,GAAE,aAAkB,EACjC,eAAe,GAAE,cAAc,EAAO,EACtC,gBAAgB,CAAC,EAAE,gBAAgB,EACnC,mBAAmB,CAAC,EAAE,mBAAmB,EACzC,QAAQ,GAAE,OAAO,EAAO;IAkC1B;;OAEG;IACG,mBAAmB,CACvB,SAAS,EAAE,SAAS,EACpB,eAAe,GAAE,cAAc,EAAO,GACrC,OAAO,CACN,yBAAyB,EAAE,GAC3B,wBAAwB,EAAE,GAC1B,sBAAsB,EAAE,GACxB,qBAAqB,EAAE,CAC1B;IA8DD;;OAEG;IACG,OAAO,CACX,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,yBAAyB,GAAG,iCAAiC,GACtE,OAAO,CAAC,eAAe,CAAC;IAqC3B,6DAA6D;YAC/C,kBAAkB;IAmChC;;;;;;;OAOG;YACW,cAAc;IAiC5B;;OAEG;IACG,aAAa,CACjB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,yBAAyB,GAAG,iCAAiC,GACtE,OAAO,CAAC,mBAAmB,CAAC;IAW/B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAYjC;;OAEG;IACG,WAAW,CACf,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,yBAAyB,GAAG,iCAAiC,GACtE,OAAO,CAAC,aAAa,CAAC;IAsFzB;;;;;OAKG;IACG,aAAa,CACjB,SAAS,EAAE,eAAe,EAC1B,SAAS,CAAC,EAAE,yBAAyB,GAAG,iCAAiC,GACxE,OAAO,CAAC,MAAM,CAAC;IA8BlB;;OAEG;IACG,eAAe,CACnB,OAAO,EAAE,kBAAkB,EAC3B,QAAQ,EAAE,yBAAyB,GAAG,iCAAiC,GACtE,OAAO,CAAC,iBAAiB,CAAC;IAkE7B;;;;OAIG;IACG,qBAAqB,CACzB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,OAAO,EAAE,GAClB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAS3C;;;;;;OAMG;IACG,0BAA0B,CAC9B,YAAY,EAAE,UAAU,GACvB,OAAO,CAAC,UAAU,CAAC;CAgGvB"}
@@ -1,4 +1,5 @@
1
1
  import { assertSameMessage } from '@meshconnect/uwc-types';
2
+ import { TronConnector } from '@meshconnect/uwc-tron-connector';
2
3
  import { Transaction, VersionedTransaction } from '@solana/web3.js';
3
4
  import { BridgeChild } from '@meshconnect/uwc-bridge-child';
4
5
  import { EthereumWalletService } from './services/ethereum/ethereum-wallet-service';
@@ -22,9 +23,24 @@ export class InjectedConnector {
22
23
  transactionService;
23
24
  networkRpcMap;
24
25
  tonConnectManifestUrl;
25
- constructor(networkRpcMap = {}, expectedWallets = [], tonConnectConfig) {
26
+ /**
27
+ * Mesh-owned Tron connector. When set (via `tronConnectorConfig`), the Tron
28
+ * namespace is routed through `@meshconnect/uwc-tron-connector` instead of the
29
+ * legacy `window.tronWeb` path; the `tronService` is not consulted for Tron.
30
+ */
31
+ tronConnector;
32
+ /**
33
+ * Configured networks, used to resolve the Tron network for cross-namespace
34
+ * Tron auto-connect (see `enrichWithTron`).
35
+ */
36
+ networks;
37
+ constructor(networkRpcMap = {}, expectedWallets = [], tonConnectConfig, tronConnectorConfig, networks = []) {
26
38
  this.networkRpcMap = networkRpcMap;
39
+ this.networks = networks;
27
40
  this.tonConnectManifestUrl = tonConnectConfig?.manifestUrl;
41
+ this.tronConnector = tronConnectorConfig
42
+ ? new TronConnector(tronConnectorConfig)
43
+ : null;
28
44
  this.storageService = new StorageService();
29
45
  this.ethereumService = new EthereumWalletService();
30
46
  this.solanaService = new SolanaWalletService(this.storageService);
@@ -68,6 +84,9 @@ export class InjectedConnector {
68
84
  }));
69
85
  }
70
86
  case 'tron': {
87
+ if (this.tronConnector) {
88
+ return (await this.tronConnector.getAvailableWallets('tron', expectedWallets));
89
+ }
71
90
  await this.tronService.initializeDiscovery(expectedWallets);
72
91
  return this.tronService.getDetectedWallets().map(wallet => ({
73
92
  uuid: wallet.uuid,
@@ -94,22 +113,45 @@ export class InjectedConnector {
94
113
  const targetNamespace = network.namespace;
95
114
  // Check if we're already connected
96
115
  const { address: existingAddress, availableAddresses } = await this.connectionManager.checkExistingConnections(targetNamespace, provider);
97
- // If already connected, just return the existing connection
116
+ let result;
98
117
  if (existingAddress) {
118
+ // Already connected — return the existing connection.
99
119
  this.connectionManager.setCurrentNetworkId(network.id);
100
- return {
120
+ result = {
101
121
  networkId: network.id,
102
122
  address: existingAddress,
103
123
  availableAddresses
104
124
  };
105
125
  }
106
- // Not connected, need to establish new connection
126
+ else {
127
+ // Not connected, need to establish a new connection.
128
+ result = await this.connectToNamespace(targetNamespace, network, provider);
129
+ }
130
+ // Cross-namespace Tron auto-connect. When the Tron connector owns the Tron
131
+ // namespace, the legacy connection-manager gather is dormant, so a
132
+ // multi-namespace wallet (Trust, OKX, …) connected on EVM/Solana would
133
+ // otherwise never expose its Tron address. Mirror the ETH/Solana/TON
134
+ // gathers and connect Tron too (skipped when Tron is the connect target —
135
+ // that path connects Tron directly above).
136
+ if (targetNamespace !== 'tron') {
137
+ await this.enrichWithTron(provider, result.availableAddresses);
138
+ }
139
+ return result;
140
+ }
141
+ /** Establish a fresh connection for the target namespace. */
142
+ async connectToNamespace(targetNamespace, network, provider) {
107
143
  switch (targetNamespace) {
108
144
  case 'eip155':
109
145
  return await this.connectionManager.connectEthereum(network, provider);
110
146
  case 'solana':
111
147
  return await this.connectionManager.connectSolana(network, provider);
112
148
  case 'tron':
149
+ if (this.tronConnector) {
150
+ const walletUuid = provider.namespaceMetaData?.tron?.detectedWallet?.uuid;
151
+ const result = await this.tronConnector.connect(network, walletUuid ? { uuid: walletUuid } : undefined);
152
+ this.connectionManager.setCurrentNetworkId(network.id);
153
+ return result;
154
+ }
113
155
  return await this.connectionManager.connectTron(network, provider);
114
156
  case 'tvm':
115
157
  return await this.connectionManager.connectTon(network, provider);
@@ -117,16 +159,67 @@ export class InjectedConnector {
117
159
  throw new Error(`Namespace '${network.namespace}' is not implemented yet. Only 'eip155', 'solana', 'tron', and 'tvm' are currently supported.`);
118
160
  }
119
161
  }
162
+ /**
163
+ * Cross-namespace Tron gather: when the Tron connector is configured and the
164
+ * wallet exposes a detected Tron provider, connect Tron and merge its address
165
+ * into `availableAddresses` — the Tron equivalent of the ETH/Solana/TON
166
+ * gathers in `ConnectionManager`. Best-effort: a missing Tron network, an
167
+ * undetected wallet, or a declined prompt leaves the rest of the connection
168
+ * intact (same as the other gathers, which swallow their failures).
169
+ */
170
+ async enrichWithTron(provider, availableAddresses) {
171
+ if (!this.tronConnector)
172
+ return;
173
+ const walletUuid = provider.namespaceMetaData?.tron?.detectedWallet?.uuid;
174
+ if (!walletUuid)
175
+ return;
176
+ // Already gathered (e.g. a re-entrant connect) — don't reprompt.
177
+ if (availableAddresses.some(a => a.networkId.startsWith('tron:')))
178
+ return;
179
+ const tronNetwork = this.networks.find(n => n.namespace === 'tron' && provider.supportedNetworkIds.includes(n.id));
180
+ if (!tronNetwork)
181
+ return;
182
+ try {
183
+ const result = await this.tronConnector.connect(tronNetwork, {
184
+ uuid: walletUuid
185
+ });
186
+ for (const addr of result.availableAddresses) {
187
+ const dup = availableAddresses.some(a => a.networkId === addr.networkId && a.address === addr.address);
188
+ if (!dup)
189
+ availableAddresses.push(addr);
190
+ }
191
+ }
192
+ catch {
193
+ // Tron unavailable or the user declined the prompt — continue without it,
194
+ // same as the Solana/Tron/TON gathers in ConnectionManager.
195
+ }
196
+ }
120
197
  /**
121
198
  * Switch to a different network
122
199
  */
123
200
  async switchNetwork(network, provider) {
201
+ if (this.tronConnector && network.namespace === 'tron') {
202
+ const result = await this.tronConnector.switchNetwork(network);
203
+ // Keep ConnectionManager's current network id in sync so subsequent
204
+ // signMessage/sendTransaction namespace routing isn't left stale.
205
+ this.connectionManager.setCurrentNetworkId(network.id);
206
+ return result;
207
+ }
124
208
  return await this.connectionManager.switchNetwork(network, provider);
125
209
  }
126
210
  /**
127
211
  * Disconnect from all wallets (only clears local state)
128
212
  */
129
213
  async disconnect() {
214
+ if (this.tronConnector) {
215
+ // Best-effort: don't fail the overall disconnect if the connector throws.
216
+ try {
217
+ await this.tronConnector.disconnect();
218
+ }
219
+ catch {
220
+ // ignore
221
+ }
222
+ }
130
223
  await this.connectionManager.disconnect();
131
224
  }
132
225
  /**
@@ -176,6 +269,11 @@ export class InjectedConnector {
176
269
  };
177
270
  }
178
271
  else if (namespace === 'tron') {
272
+ if (this.tronConnector) {
273
+ // TronConnector.signMessage already returns a SignatureType
274
+ // ({ type: 'standard', signature }) — return it as-is, no re-wrap.
275
+ return await this.tronConnector.signMessage(message);
276
+ }
179
277
  const tronProvider = this.tronService.getConnectedProvider();
180
278
  if (!tronProvider) {
181
279
  throw new Error('No connected Tron provider');
@@ -249,6 +347,9 @@ export class InjectedConnector {
249
347
  return await this.transactionService.sendTransaction(request, namespace, solanaAdapter, currentNetworkId);
250
348
  }
251
349
  else if (namespace === 'tron') {
350
+ if (this.tronConnector) {
351
+ return await this.tronConnector.sendTransaction(request);
352
+ }
252
353
  const tronProvider = this.tronService.getConnectedProvider();
253
354
  if (!tronProvider) {
254
355
  throw new Error('No connected Tron provider');
@@ -1 +1 @@
1
- {"version":3,"file":"injected-connector.js","sourceRoot":"","sources":["../src/injected-connector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"injected-connector.js","sourceRoot":"","sources":["../src/injected-connector.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tron-transaction-builder.d.ts","sourceRoot":"","sources":["../../../src/services/tron/tron-transaction-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,KAAK,EACV,yBAAyB,EACzB,wBAAwB,EACzB,MAAM,wBAAwB,CAAA;AAG/B;;;GAGG;AACH,qBAAa,sBAAsB;IACjC;;OAEG;IACG,mBAAmB,CACvB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,yBAAyB,GAEjC,OAAO,CAAC,GAAG,CAAC;IAaf;;OAEG;IACG,kBAAkB,CACtB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,wBAAwB,GAEhC,OAAO,CAAC,GAAG,CAAC;CA0BhB"}
1
+ {"version":3,"file":"tron-transaction-builder.d.ts","sourceRoot":"","sources":["../../../src/services/tron/tron-transaction-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,KAAK,EACV,yBAAyB,EACzB,wBAAwB,EACzB,MAAM,wBAAwB,CAAA;AAG/B;;;GAGG;AACH,qBAAa,sBAAsB;IACjC;;OAEG;IACG,mBAAmB,CACvB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,yBAAyB,GAEjC,OAAO,CAAC,GAAG,CAAC;IA2Bf;;OAEG;IACG,kBAAkB,CACtB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,wBAAwB,GAEhC,OAAO,CAAC,GAAG,CAAC;CAyChB"}
@@ -11,7 +11,18 @@ export class TronTransactionBuilder {
11
11
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
12
  ) {
13
13
  try {
14
- const transaction = await tronWeb.transactionBuilder.sendTrx(request.to, request.amount, request.from);
14
+ // sendTrx takes a JS number, so the SUN amount must be a non-negative
15
+ // safe integer. The public type allows bigint; guard before narrowing so
16
+ // an out-of-range value fails loudly instead of silently losing precision
17
+ // (mirrors the new connector's assertValidAmount).
18
+ const { amount } = request;
19
+ const valid = typeof amount === 'bigint'
20
+ ? amount >= 0n && amount <= BigInt(Number.MAX_SAFE_INTEGER)
21
+ : Number.isSafeInteger(amount) && amount >= 0;
22
+ if (!valid) {
23
+ throw new Error(`TronTransactionBuilder: native amount must be a non-negative integer within the safe range, got ${amount}`);
24
+ }
25
+ const transaction = await tronWeb.transactionBuilder.sendTrx(request.to, Number(amount), request.from);
15
26
  return transaction;
16
27
  }
17
28
  catch (error) {
@@ -25,10 +36,22 @@ export class TronTransactionBuilder {
25
36
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
26
37
  ) {
27
38
  try {
39
+ // The uint256 amount must be a non-negative integer; a fractional or
40
+ // precision-lost number would stringify to a wrong/invalid value. (A
41
+ // bigint is exact at any magnitude, so only the sign is checked here.)
42
+ const { amount } = request;
43
+ const valid = typeof amount === 'bigint'
44
+ ? amount >= 0n
45
+ : Number.isSafeInteger(amount) && amount >= 0;
46
+ if (!valid) {
47
+ throw new Error(`TronTransactionBuilder: TRC20 amount must be a non-negative integer, got ${amount}`);
48
+ }
28
49
  const functionSelector = 'transfer(address,uint256)';
29
50
  const parameter = [
30
51
  { type: 'address', value: request.to },
31
- { type: 'uint256', value: request.amount }
52
+ // Pass uint256 as a string so a large bigint amount keeps full
53
+ // precision through tronWeb's ABI encoding.
54
+ { type: 'uint256', value: amount.toString() }
32
55
  ];
33
56
  const { transaction, result } = await tronWeb.transactionBuilder.triggerSmartContract(request.contractAddress, functionSelector, {}, parameter, request.from);
34
57
  if (!result?.result) {
@@ -1 +1 @@
1
- {"version":3,"file":"tron-transaction-builder.js","sourceRoot":"","sources":["../../../src/services/tron/tron-transaction-builder.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAEpD;;;GAGG;AACH,MAAM,OAAO,sBAAsB;IACjC;;OAEG;IACH,KAAK,CAAC,mBAAmB,CACvB,OAAgB,EAChB,OAAkC;IAClC,8DAA8D;;QAE9D,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAC1D,OAAO,CAAC,EAAE,EACV,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,IAAI,CACb,CAAA;YACD,OAAO,WAAW,CAAA;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,UAAU,CAAC,KAAK,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CACtB,OAAgB,EAChB,OAAiC;IACjC,8DAA8D;;QAE9D,IAAI,CAAC;YACH,MAAM,gBAAgB,GAAG,2BAA2B,CAAA;YACpD,MAAM,SAAS,GAAG;gBAChB,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,EAAE;gBACtC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE;aAC3C,CAAA;YAED,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAC3B,MAAM,OAAO,CAAC,kBAAkB,CAAC,oBAAoB,CACnD,OAAO,CAAC,eAAe,EACvB,gBAAgB,EAChB,EAAE,EACF,SAAS,EACT,OAAO,CAAC,IAAI,CACb,CAAA;YAEH,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAA;YAC/D,CAAC;YAED,OAAO,WAAW,CAAA;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,UAAU,CAAC,KAAK,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"tron-transaction-builder.js","sourceRoot":"","sources":["../../../src/services/tron/tron-transaction-builder.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAEpD;;;GAGG;AACH,MAAM,OAAO,sBAAsB;IACjC;;OAEG;IACH,KAAK,CAAC,mBAAmB,CACvB,OAAgB,EAChB,OAAkC;IAClC,8DAA8D;;QAE9D,IAAI,CAAC;YACH,sEAAsE;YACtE,yEAAyE;YACzE,0EAA0E;YAC1E,mDAAmD;YACnD,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;YAC1B,MAAM,KAAK,GACT,OAAO,MAAM,KAAK,QAAQ;gBACxB,CAAC,CAAC,MAAM,IAAI,EAAE,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC;gBAC3D,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,CAAA;YACjD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CACb,mGAAmG,MAAM,EAAE,CAC5G,CAAA;YACH,CAAC;YACD,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAC1D,OAAO,CAAC,EAAE,EACV,MAAM,CAAC,MAAM,CAAC,EACd,OAAO,CAAC,IAAI,CACb,CAAA;YACD,OAAO,WAAW,CAAA;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,UAAU,CAAC,KAAK,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CACtB,OAAgB,EAChB,OAAiC;IACjC,8DAA8D;;QAE9D,IAAI,CAAC;YACH,qEAAqE;YACrE,qEAAqE;YACrE,uEAAuE;YACvE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;YAC1B,MAAM,KAAK,GACT,OAAO,MAAM,KAAK,QAAQ;gBACxB,CAAC,CAAC,MAAM,IAAI,EAAE;gBACd,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,CAAA;YACjD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CACb,4EAA4E,MAAM,EAAE,CACrF,CAAA;YACH,CAAC;YACD,MAAM,gBAAgB,GAAG,2BAA2B,CAAA;YACpD,MAAM,SAAS,GAAG;gBAChB,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,EAAE;gBACtC,+DAA+D;gBAC/D,4CAA4C;gBAC5C,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE;aAC9C,CAAA;YAED,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAC3B,MAAM,OAAO,CAAC,kBAAkB,CAAC,oBAAoB,CACnD,OAAO,CAAC,eAAe,EACvB,gBAAgB,EAChB,EAAE,EACF,SAAS,EACT,OAAO,CAAC,IAAI,CACb,CAAA;YAEH,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAA;YAC/D,CAAC;YAED,OAAO,WAAW,CAAA;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,UAAU,CAAC,KAAK,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"ton-discovery.d.ts","sourceRoot":"","sources":["../src/ton-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAE5D,UAAU,gBAAgB;IACxB,UAAU,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IACjD,OAAO,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IACtE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IAC1C,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,KAAK,MAAM,IAAI,CAAA;IACzD,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CACjC;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,gBAAgB,CAAA;CAC3B;AA+ED,wBAAsB,aAAa,CACjC,eAAe,GAAE,cAAc,EAAO,GACrC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAwB9B"}
1
+ {"version":3,"file":"ton-discovery.d.ts","sourceRoot":"","sources":["../src/ton-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAE5D,UAAU,gBAAgB;IACxB,UAAU,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IACjD,OAAO,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IACtE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IAC1C,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,KAAK,MAAM,IAAI,CAAA;IACzD,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CACjC;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,gBAAgB,CAAA;CAC3B;AA+ED,wBAAsB,aAAa,CACjC,eAAe,GAAE,cAAc,EAAO,GACrC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CA0B9B"}
@@ -75,15 +75,17 @@ export async function getTonWallets(expectedWallets = []) {
75
75
  const jsBridgeKeys = expectedWallets
76
76
  .map(w => w.extensionInjectedProvider?.namespaceMetaData?.tvm?.jsBridgeKey)
77
77
  .filter((key) => !!key);
78
- // Bridge mode (in iframe): poll for bridge-proxied wallets
78
+ // Bridge mode: prefer this frame's own provider (window[jsBridgeKey]) so connect
79
+ // attributes to the iframe origin; fall back to the parent list only
80
+ // when none is present.
79
81
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
80
82
  // @ts-ignore - window.UWCBridgeChildInitialized is set by the bridge
81
83
  if (window.UWCBridgeChildInitialized === true) {
82
- const wallets = await pollForBridgeTonWallets();
83
- if (wallets.length > 0) {
84
- return wallets;
84
+ const local = discoverTonProviders(jsBridgeKeys);
85
+ if (local.length > 0) {
86
+ return local;
85
87
  }
86
- return [];
88
+ return pollForBridgeTonWallets();
87
89
  }
88
90
  // Native discovery: direct window[key].tonconnect access
89
91
  return discoverTonProviders(jsBridgeKeys);
@@ -1 +1 @@
1
- {"version":3,"file":"ton-discovery.js","sourceRoot":"","sources":["../src/ton-discovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ton-discovery.js","sourceRoot":"","sources":["../src/ton-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAoBH,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IACrD,MAAM,MAAM,GAAG,KAAgC,CAAA;IAC/C,OAAO,CACL,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,UAAU;QACvC,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,UAAU;QACpC,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,UAAU,CACvC,CAAA;AACH,CAAC;AAED,SAAS,gBAAgB,CACvB,GAAW;IAEX,MAAM,IAAI,GAAI,MAA6C,CAAC,GAAG,CAAC,CAAA;IAChE,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAA;IAElD,MAAM,MAAM,GAAI,IAAgC,CAAC,YAAY,CAAC,CAAA;IAC9D,IAAI,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,IAAI,GAAG,EAAE,CAAA;IAC5D,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,oBAAoB,CAAC,YAAsB;IAClD,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,EAAE,CAAA;IAE5C,MAAM,OAAO,GAAwB,EAAE,CAAA;IACvC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAE9B,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAQ;QAC3B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAA;QACtC,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACb,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,OAAO,GAAG,EAAE,CAAC,WAAW,EAAE;gBAChC,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,IAAI,EAAE,EAAE;gBACR,WAAW,EAAE,GAAG;gBAChB,QAAQ,EAAE,QAAQ,CAAC,MAAM;aAC1B,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,KAAK,UAAU,uBAAuB;IACpC,MAAM,YAAY,GAAG,GAAG,CAAA;IACxB,MAAM,WAAW,GAAG,IAAI,CAAA;IACxB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAE5B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,MAAM,IAAI,GAAG,GAAG,EAAE;YAChB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,WAAW,EAAE,CAAC;gBACzC,OAAO,CAAC,EAAE,CAAC,CAAA;gBACX,OAAM;YACR,CAAC;YAED,6DAA6D;YAC7D,sDAAsD;YACtD,IAAI,MAAM,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC1D,6DAA6D;gBAC7D,aAAa;gBACb,MAAM,aAAa,GAAG,MAAM,CAAC,UAAiC,CAAA;gBAC9D,OAAO,CAAC,aAAa,CAAC,CAAA;gBACtB,OAAM;YACR,CAAC;YAED,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;QAChC,CAAC,CAAA;QAED,IAAI,EAAE,CAAA;IACR,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,kBAAoC,EAAE;IAEtC,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,eAAe;aACjC,GAAG,CACF,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,yBAAyB,EAAE,iBAAiB,EAAE,GAAG,EAAE,WAAW,CACtE;aACA,MAAM,CAAC,CAAC,GAAG,EAAiB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QAExC,iFAAiF;QACjF,qEAAqE;QACrE,wBAAwB;QACxB,6DAA6D;QAC7D,qEAAqE;QACrE,IAAI,MAAM,CAAC,yBAAyB,KAAK,IAAI,EAAE,CAAC;YAC9C,MAAM,KAAK,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAA;YAChD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,OAAO,KAAK,CAAA;YACd,CAAC;YACD,OAAO,uBAAuB,EAAE,CAAA;QAClC,CAAC;QAED,yDAAyD;QACzD,OAAO,oBAAoB,CAAC,YAAY,CAAC,CAAA;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@meshconnect/uwc-injected-connector",
3
- "version": "0.14.0",
3
+ "version": "0.14.2-snapshot.907df55",
4
4
  "description": "Injected connector for Universal Wallet Connector",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -27,10 +27,11 @@
27
27
  "buffer": "^6.0.3",
28
28
  "uuid": "^13.0.0",
29
29
  "viem": "^2.44.4",
30
- "@meshconnect/uwc-bridge-child": "0.2.1",
31
- "@meshconnect/uwc-constants": "0.6.4",
32
- "@meshconnect/uwc-ton-connector": "0.6.3",
33
- "@meshconnect/uwc-types": "0.15.0"
30
+ "@meshconnect/uwc-bridge-child": "0.2.2-snapshot.907df55",
31
+ "@meshconnect/uwc-ton-connector": "0.6.4-snapshot.907df55",
32
+ "@meshconnect/uwc-constants": "0.6.5-snapshot.907df55",
33
+ "@meshconnect/uwc-tron-connector": "0.1.0-snapshot.907df55",
34
+ "@meshconnect/uwc-types": "0.15.1-snapshot.907df55"
34
35
  },
35
36
  "devDependencies": {
36
37
  "typescript": "^5.9.3"
@@ -15,6 +15,9 @@ vi.mock('./services/tron/tron-wallet-service')
15
15
  vi.mock('./services/connection-manager')
16
16
  vi.mock('./services/signature-service')
17
17
  vi.mock('./services/transaction-service')
18
+ vi.mock('@meshconnect/uwc-tron-connector', () => ({
19
+ TronConnector: vi.fn()
20
+ }))
18
21
 
19
22
  describe('InjectedConnector', () => {
20
23
  let connector: InjectedConnector
@@ -235,6 +238,97 @@ describe('InjectedConnector', () => {
235
238
  expect(result.address).toBe('0xnewaddress')
236
239
  })
237
240
 
241
+ describe('cross-namespace Tron gather (tronConnectorConfig set)', () => {
242
+ const tronNetwork = {
243
+ id: 'tron:0x2b6653dc',
244
+ internalId: 2,
245
+ name: 'Tron',
246
+ namespace: 'tron',
247
+ networkType: 'tron',
248
+ nativeCurrency: { name: 'Tron', symbol: 'TRX', decimals: 6 }
249
+ } as Network
250
+
251
+ // A multi-namespace wallet (e.g. Trust): EVM target + a detected Tron provider.
252
+ const multiNsProvider = {
253
+ supportedNetworkIds: ['eip155:1', 'tron:0x2b6653dc'],
254
+ namespaceMetaData: {
255
+ eip155: { detectedWallet: { uuid: 'eth-uuid' } },
256
+ tron: { detectedWallet: { uuid: 'trust' } }
257
+ }
258
+ } as unknown as ExtensionInjectedProvider
259
+
260
+ // Build an InjectedConnector wired with the Tron connector + networks, and
261
+ // return the stubbed TronConnector instance so the test can assert on it.
262
+ const buildWithTron = async (tronConnect: ReturnType<typeof vi.fn>) => {
263
+ const { TronConnector } =
264
+ await import('@meshconnect/uwc-tron-connector')
265
+ // Must be constructable (`new TronConnector(...)`), so use a function,
266
+ // not an arrow.
267
+ vi.mocked(TronConnector).mockImplementation(function () {
268
+ return { connect: tronConnect } as never
269
+ } as never)
270
+ const c = new InjectedConnector(
271
+ {},
272
+ [],
273
+ undefined,
274
+ { enabledWallets: ['trust'] } as never,
275
+ [mockNetwork, tronNetwork]
276
+ )
277
+ const { ConnectionManager } =
278
+ await import('./services/connection-manager')
279
+ const connManager = vi
280
+ .mocked(ConnectionManager)
281
+ .mock.results.at(-1)!.value
282
+ connManager.checkExistingConnections.mockResolvedValue({
283
+ address: null,
284
+ availableAddresses: []
285
+ })
286
+ connManager.connectEthereum.mockResolvedValue({
287
+ networkId: 'eip155:1',
288
+ address: '0xeth',
289
+ availableAddresses: [{ address: '0xeth', networkId: 'eip155:1' }]
290
+ })
291
+ return c
292
+ }
293
+
294
+ it('auto-connects Tron alongside an EVM target and merges the address', async () => {
295
+ const tronConnect = vi.fn().mockResolvedValue({
296
+ networkId: 'tron:0x2b6653dc',
297
+ address: 'TTronAddr',
298
+ availableAddresses: [
299
+ { address: 'TTronAddr', networkId: 'tron:0x2b6653dc' }
300
+ ]
301
+ })
302
+ const c = await buildWithTron(tronConnect)
303
+
304
+ const result = await c.connect(mockNetwork, multiNsProvider)
305
+
306
+ // Routed through the Tron connector with the detected wallet id.
307
+ expect(tronConnect).toHaveBeenCalledWith(tronNetwork, { uuid: 'trust' })
308
+ // EVM address preserved AND the Tron address merged in.
309
+ expect(result.address).toBe('0xeth')
310
+ expect(result.availableAddresses).toContainEqual({
311
+ address: 'TTronAddr',
312
+ networkId: 'tron:0x2b6653dc'
313
+ })
314
+ })
315
+
316
+ it('swallows a declined/failed Tron connect and keeps the EVM connection', async () => {
317
+ const tronConnect = vi
318
+ .fn()
319
+ .mockRejectedValue(new Error('user declined'))
320
+ const c = await buildWithTron(tronConnect)
321
+
322
+ const result = await c.connect(mockNetwork, multiNsProvider)
323
+
324
+ expect(tronConnect).toHaveBeenCalled()
325
+ expect(result.address).toBe('0xeth')
326
+ expect(
327
+ result.availableAddresses.some(a => a.networkId.startsWith('tron:'))
328
+ ).toBe(false)
329
+ })
330
+ })
331
+
238
332
  it('should connect to Solana wallet for solana namespace', async () => {
239
333
  const { ConnectionManager } =
240
334
  await import('./services/connection-manager')
@@ -5,6 +5,7 @@ import type {
5
5
  IntegratedBrowserInjectedProvider,
6
6
  Connector,
7
7
  ConnectorResult,
8
+ AvailableAddress,
8
9
  SwitchNetworkResult,
9
10
  Namespace,
10
11
  DetectedEIP6963WalletInfo,
@@ -22,6 +23,10 @@ import type {
22
23
  TonConnectConfig
23
24
  } from '@meshconnect/uwc-types'
24
25
  import { assertSameMessage } from '@meshconnect/uwc-types'
26
+ import {
27
+ TronConnector,
28
+ type TronConnectorConfig
29
+ } from '@meshconnect/uwc-tron-connector'
25
30
  import { Transaction, VersionedTransaction } from '@solana/web3.js'
26
31
  import type { StandardWalletAdapter } from '@solana/wallet-standard-wallet-adapter-base'
27
32
  import { BridgeChild } from '@meshconnect/uwc-bridge-child'
@@ -49,14 +54,31 @@ export class InjectedConnector implements Connector {
49
54
  private transactionService: TransactionService
50
55
  private networkRpcMap: NetworkRpcMap
51
56
  private tonConnectManifestUrl: string | (() => string) | undefined
57
+ /**
58
+ * Mesh-owned Tron connector. When set (via `tronConnectorConfig`), the Tron
59
+ * namespace is routed through `@meshconnect/uwc-tron-connector` instead of the
60
+ * legacy `window.tronWeb` path; the `tronService` is not consulted for Tron.
61
+ */
62
+ private tronConnector: TronConnector | null
63
+ /**
64
+ * Configured networks, used to resolve the Tron network for cross-namespace
65
+ * Tron auto-connect (see `enrichWithTron`).
66
+ */
67
+ private networks: Network[]
52
68
 
53
69
  constructor(
54
70
  networkRpcMap: NetworkRpcMap = {},
55
71
  expectedWallets: WalletMetadata[] = [],
56
- tonConnectConfig?: TonConnectConfig
72
+ tonConnectConfig?: TonConnectConfig,
73
+ tronConnectorConfig?: TronConnectorConfig,
74
+ networks: Network[] = []
57
75
  ) {
58
76
  this.networkRpcMap = networkRpcMap
77
+ this.networks = networks
59
78
  this.tonConnectManifestUrl = tonConnectConfig?.manifestUrl
79
+ this.tronConnector = tronConnectorConfig
80
+ ? new TronConnector(tronConnectorConfig)
81
+ : null
60
82
 
61
83
  this.storageService = new StorageService()
62
84
  this.ethereumService = new EthereumWalletService()
@@ -126,6 +148,12 @@ export class InjectedConnector implements Connector {
126
148
  }
127
149
 
128
150
  case 'tron': {
151
+ if (this.tronConnector) {
152
+ return (await this.tronConnector.getAvailableWallets(
153
+ 'tron',
154
+ expectedWallets
155
+ )) as DetectedTronWalletInfo[]
156
+ }
129
157
  await this.tronService.initializeDiscovery(expectedWallets)
130
158
 
131
159
  return this.tronService.getDetectedWallets().map(wallet => ({
@@ -166,17 +194,39 @@ export class InjectedConnector implements Connector {
166
194
  provider
167
195
  )
168
196
 
169
- // If already connected, just return the existing connection
197
+ let result: ConnectorResult
170
198
  if (existingAddress) {
199
+ // Already connected — return the existing connection.
171
200
  this.connectionManager.setCurrentNetworkId(network.id)
172
- return {
201
+ result = {
173
202
  networkId: network.id,
174
203
  address: existingAddress,
175
204
  availableAddresses
176
205
  }
206
+ } else {
207
+ // Not connected, need to establish a new connection.
208
+ result = await this.connectToNamespace(targetNamespace, network, provider)
177
209
  }
178
210
 
179
- // Not connected, need to establish new connection
211
+ // Cross-namespace Tron auto-connect. When the Tron connector owns the Tron
212
+ // namespace, the legacy connection-manager gather is dormant, so a
213
+ // multi-namespace wallet (Trust, OKX, …) connected on EVM/Solana would
214
+ // otherwise never expose its Tron address. Mirror the ETH/Solana/TON
215
+ // gathers and connect Tron too (skipped when Tron is the connect target —
216
+ // that path connects Tron directly above).
217
+ if (targetNamespace !== 'tron') {
218
+ await this.enrichWithTron(provider, result.availableAddresses)
219
+ }
220
+
221
+ return result
222
+ }
223
+
224
+ /** Establish a fresh connection for the target namespace. */
225
+ private async connectToNamespace(
226
+ targetNamespace: Namespace,
227
+ network: Network,
228
+ provider: ExtensionInjectedProvider | IntegratedBrowserInjectedProvider
229
+ ): Promise<ConnectorResult> {
180
230
  switch (targetNamespace) {
181
231
  case 'eip155':
182
232
  return await this.connectionManager.connectEthereum(network, provider)
@@ -185,6 +235,16 @@ export class InjectedConnector implements Connector {
185
235
  return await this.connectionManager.connectSolana(network, provider)
186
236
 
187
237
  case 'tron':
238
+ if (this.tronConnector) {
239
+ const walletUuid =
240
+ provider.namespaceMetaData?.tron?.detectedWallet?.uuid
241
+ const result = await this.tronConnector.connect(
242
+ network,
243
+ walletUuid ? { uuid: walletUuid } : undefined
244
+ )
245
+ this.connectionManager.setCurrentNetworkId(network.id)
246
+ return result
247
+ }
188
248
  return await this.connectionManager.connectTron(network, provider)
189
249
 
190
250
  case 'tvm':
@@ -197,6 +257,47 @@ export class InjectedConnector implements Connector {
197
257
  }
198
258
  }
199
259
 
260
+ /**
261
+ * Cross-namespace Tron gather: when the Tron connector is configured and the
262
+ * wallet exposes a detected Tron provider, connect Tron and merge its address
263
+ * into `availableAddresses` — the Tron equivalent of the ETH/Solana/TON
264
+ * gathers in `ConnectionManager`. Best-effort: a missing Tron network, an
265
+ * undetected wallet, or a declined prompt leaves the rest of the connection
266
+ * intact (same as the other gathers, which swallow their failures).
267
+ */
268
+ private async enrichWithTron(
269
+ provider: ExtensionInjectedProvider | IntegratedBrowserInjectedProvider,
270
+ availableAddresses: AvailableAddress[]
271
+ ): Promise<void> {
272
+ if (!this.tronConnector) return
273
+
274
+ const walletUuid = provider.namespaceMetaData?.tron?.detectedWallet?.uuid
275
+ if (!walletUuid) return
276
+
277
+ // Already gathered (e.g. a re-entrant connect) — don't reprompt.
278
+ if (availableAddresses.some(a => a.networkId.startsWith('tron:'))) return
279
+
280
+ const tronNetwork = this.networks.find(
281
+ n => n.namespace === 'tron' && provider.supportedNetworkIds.includes(n.id)
282
+ )
283
+ if (!tronNetwork) return
284
+
285
+ try {
286
+ const result = await this.tronConnector.connect(tronNetwork, {
287
+ uuid: walletUuid
288
+ })
289
+ for (const addr of result.availableAddresses) {
290
+ const dup = availableAddresses.some(
291
+ a => a.networkId === addr.networkId && a.address === addr.address
292
+ )
293
+ if (!dup) availableAddresses.push(addr)
294
+ }
295
+ } catch {
296
+ // Tron unavailable or the user declined the prompt — continue without it,
297
+ // same as the Solana/Tron/TON gathers in ConnectionManager.
298
+ }
299
+ }
300
+
200
301
  /**
201
302
  * Switch to a different network
202
303
  */
@@ -204,6 +305,13 @@ export class InjectedConnector implements Connector {
204
305
  network: Network,
205
306
  provider: ExtensionInjectedProvider | IntegratedBrowserInjectedProvider
206
307
  ): Promise<SwitchNetworkResult> {
308
+ if (this.tronConnector && network.namespace === 'tron') {
309
+ const result = await this.tronConnector.switchNetwork(network)
310
+ // Keep ConnectionManager's current network id in sync so subsequent
311
+ // signMessage/sendTransaction namespace routing isn't left stale.
312
+ this.connectionManager.setCurrentNetworkId(network.id)
313
+ return result
314
+ }
207
315
  return await this.connectionManager.switchNetwork(network, provider)
208
316
  }
209
317
 
@@ -211,6 +319,14 @@ export class InjectedConnector implements Connector {
211
319
  * Disconnect from all wallets (only clears local state)
212
320
  */
213
321
  async disconnect(): Promise<void> {
322
+ if (this.tronConnector) {
323
+ // Best-effort: don't fail the overall disconnect if the connector throws.
324
+ try {
325
+ await this.tronConnector.disconnect()
326
+ } catch {
327
+ // ignore
328
+ }
329
+ }
214
330
  await this.connectionManager.disconnect()
215
331
  }
216
332
 
@@ -281,6 +397,11 @@ export class InjectedConnector implements Connector {
281
397
  signature: signature
282
398
  }
283
399
  } else if (namespace === 'tron') {
400
+ if (this.tronConnector) {
401
+ // TronConnector.signMessage already returns a SignatureType
402
+ // ({ type: 'standard', signature }) — return it as-is, no re-wrap.
403
+ return await this.tronConnector.signMessage(message)
404
+ }
284
405
  const tronProvider = this.tronService.getConnectedProvider()
285
406
  if (!tronProvider) {
286
407
  throw new Error('No connected Tron provider')
@@ -390,6 +511,9 @@ export class InjectedConnector implements Connector {
390
511
  currentNetworkId as NetworkId
391
512
  )
392
513
  } else if (namespace === 'tron') {
514
+ if (this.tronConnector) {
515
+ return await this.tronConnector.sendTransaction(request)
516
+ }
393
517
  const tronProvider = this.tronService.getConnectedProvider()
394
518
  if (!tronProvider) {
395
519
  throw new Error('No connected Tron provider')
@@ -67,6 +67,19 @@ describe('TronTransactionBuilder', () => {
67
67
  expect(result).toEqual(mockTransaction)
68
68
  })
69
69
 
70
+ it('rejects a bigint amount beyond the safe-integer range (no silent precision loss)', async () => {
71
+ const request: TronNativeTransferRequest = {
72
+ from: 'TFromAddress123',
73
+ to: 'TToAddress456',
74
+ amount: BigInt(Number.MAX_SAFE_INTEGER) + 2n
75
+ }
76
+
77
+ await expect(
78
+ builder.buildNativeTransfer(mockTronWeb, request)
79
+ ).rejects.toThrow()
80
+ expect(mockTronWeb.transactionBuilder.sendTrx).not.toHaveBeenCalled()
81
+ })
82
+
70
83
  it('should throw on transactionBuilder error', async () => {
71
84
  vi.mocked(mockTronWeb.transactionBuilder.sendTrx).mockRejectedValue(
72
85
  new Error('Insufficient balance')
@@ -111,13 +124,30 @@ describe('TronTransactionBuilder', () => {
111
124
  {},
112
125
  [
113
126
  { type: 'address', value: 'TToAddress456' },
114
- { type: 'uint256', value: 1000000 }
127
+ // uint256 is passed as a string to preserve precision for large amounts
128
+ { type: 'uint256', value: '1000000' }
115
129
  ],
116
130
  'TFromAddress123'
117
131
  )
118
132
  expect(result).toEqual(mockTransaction)
119
133
  })
120
134
 
135
+ it('rejects a fractional TRC20 amount before building (no wrong uint256)', async () => {
136
+ const request: TronTRC20TransferRequest = {
137
+ from: 'TFromAddress123',
138
+ to: 'TToAddress456',
139
+ amount: 1.5,
140
+ contractAddress: 'TContractAddress789'
141
+ }
142
+
143
+ await expect(
144
+ builder.buildTRC20Transfer(mockTronWeb, request)
145
+ ).rejects.toThrow()
146
+ expect(
147
+ mockTronWeb.transactionBuilder.triggerSmartContract
148
+ ).not.toHaveBeenCalled()
149
+ })
150
+
121
151
  it('should throw when triggerSmartContract result is false', async () => {
122
152
  vi.mocked(
123
153
  mockTronWeb.transactionBuilder.triggerSmartContract
@@ -19,9 +19,23 @@ export class TronTransactionBuilder {
19
19
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
20
  ): Promise<any> {
21
21
  try {
22
+ // sendTrx takes a JS number, so the SUN amount must be a non-negative
23
+ // safe integer. The public type allows bigint; guard before narrowing so
24
+ // an out-of-range value fails loudly instead of silently losing precision
25
+ // (mirrors the new connector's assertValidAmount).
26
+ const { amount } = request
27
+ const valid =
28
+ typeof amount === 'bigint'
29
+ ? amount >= 0n && amount <= BigInt(Number.MAX_SAFE_INTEGER)
30
+ : Number.isSafeInteger(amount) && amount >= 0
31
+ if (!valid) {
32
+ throw new Error(
33
+ `TronTransactionBuilder: native amount must be a non-negative integer within the safe range, got ${amount}`
34
+ )
35
+ }
22
36
  const transaction = await tronWeb.transactionBuilder.sendTrx(
23
37
  request.to,
24
- request.amount,
38
+ Number(amount),
25
39
  request.from
26
40
  )
27
41
  return transaction
@@ -39,10 +53,25 @@ export class TronTransactionBuilder {
39
53
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
40
54
  ): Promise<any> {
41
55
  try {
56
+ // The uint256 amount must be a non-negative integer; a fractional or
57
+ // precision-lost number would stringify to a wrong/invalid value. (A
58
+ // bigint is exact at any magnitude, so only the sign is checked here.)
59
+ const { amount } = request
60
+ const valid =
61
+ typeof amount === 'bigint'
62
+ ? amount >= 0n
63
+ : Number.isSafeInteger(amount) && amount >= 0
64
+ if (!valid) {
65
+ throw new Error(
66
+ `TronTransactionBuilder: TRC20 amount must be a non-negative integer, got ${amount}`
67
+ )
68
+ }
42
69
  const functionSelector = 'transfer(address,uint256)'
43
70
  const parameter = [
44
71
  { type: 'address', value: request.to },
45
- { type: 'uint256', value: request.amount }
72
+ // Pass uint256 as a string so a large bigint amount keeps full
73
+ // precision through tronWeb's ABI encoding.
74
+ { type: 'uint256', value: amount.toString() }
46
75
  ]
47
76
 
48
77
  const { transaction, result } =
@@ -180,7 +180,8 @@ describe('TronTransactionService', () => {
180
180
  {},
181
181
  [
182
182
  { type: 'address', value: 'TToAddr' },
183
- { type: 'uint256', value: 100000 }
183
+ // uint256 is passed as a string to preserve precision for large amounts
184
+ { type: 'uint256', value: '100000' }
184
185
  ],
185
186
  'TFromAddr'
186
187
  )
@@ -153,9 +153,10 @@ describe('getTonWallets / bridge polling', () => {
153
153
  vi.restoreAllMocks()
154
154
  })
155
155
 
156
- it('prefers bridge wallets when UWCBridgeChildInitialized is true', async () => {
156
+ it('prefers the in-frame (local) provider over the bridge when both are present', async () => {
157
157
  mockWindow.UWCBridgeChildInitialized = true
158
158
 
159
+ // Parent-proxied wallet reported by the bridge...
159
160
  const bridgeWallet = {
160
161
  uuid: 'ton-tonkeeper',
161
162
  name: 'Tonkeeper',
@@ -165,13 +166,18 @@ describe('getTonWallets / bridge polling', () => {
165
166
  }
166
167
  mockWindow.tonWallets = [bridgeWallet]
167
168
 
168
- // Native wallet also present should be ignored in bridge mode
169
- mockWindow.tonkeeper = { tonconnect: makeBridge('Tonkeeper') }
169
+ // ...and the extension's real provider injected into THIS frame. The local
170
+ // one must win so the connection attributes to the iframe origin.
171
+ const localBridge = makeBridge('Tonkeeper')
172
+ mockWindow.tonkeeper = { tonconnect: localBridge }
170
173
 
171
174
  const { getTonWallets } = await import('./ton-discovery')
172
175
  const wallets = await getTonWallets([makeWalletMeta('tonkeeper')])
173
176
 
174
- expect(wallets).toEqual([bridgeWallet])
177
+ expect(wallets).toHaveLength(1)
178
+ expect(wallets[0].jsBridgeKey).toBe('tonkeeper')
179
+ expect(wallets[0].provider).toBe(localBridge)
180
+ expect(wallets[0].provider).not.toBe(bridgeWallet.provider)
175
181
  })
176
182
 
177
183
  it('returns empty array when bridge polling times out', async () => {
@@ -184,16 +190,50 @@ describe('getTonWallets / bridge polling', () => {
184
190
  expect(wallets).toEqual([])
185
191
  }, 3000)
186
192
 
187
- it('does not fall back to native discovery in bridge mode', async () => {
193
+ it('uses the in-frame (local) provider in bridge mode without waiting for the parent', async () => {
188
194
  mockWindow.UWCBridgeChildInitialized = true
189
- // Native wallet is available, but bridge returns nothing
190
- mockWindow.tonkeeper = { tonconnect: makeBridge('Tonkeeper') }
191
- // No bridge wallets
195
+ // In-frame provider present; parent never reports any wallets.
196
+ const localBridge = makeBridge('Tonkeeper')
197
+ mockWindow.tonkeeper = { tonconnect: localBridge }
192
198
 
193
199
  const { getTonWallets } = await import('./ton-discovery')
194
200
  const wallets = await getTonWallets([makeWalletMeta('tonkeeper')])
195
201
 
196
- expect(wallets).toEqual([])
202
+ expect(wallets).toHaveLength(1)
203
+ expect(wallets[0].jsBridgeKey).toBe('tonkeeper')
204
+ expect(wallets[0].provider).toBe(localBridge)
205
+ })
206
+
207
+ it('prefers the in-frame OKX provider in bridge mode (detection is generic, not Tonkeeper-only)', async () => {
208
+ mockWindow.UWCBridgeChildInitialized = true
209
+ const localBridge = makeBridge('OKX Wallet')
210
+ mockWindow.okxTonWallet = { tonconnect: localBridge }
211
+
212
+ const { getTonWallets } = await import('./ton-discovery')
213
+ const wallets = await getTonWallets([makeWalletMeta('okxTonWallet')])
214
+
215
+ expect(wallets).toHaveLength(1)
216
+ expect(wallets[0].jsBridgeKey).toBe('okxTonWallet')
217
+ expect(wallets[0].provider).toBe(localBridge)
218
+ })
219
+
220
+ it('falls back to the parent-proxied list when nothing is present at window[jsBridgeKey] yet', async () => {
221
+ mockWindow.UWCBridgeChildInitialized = true
222
+ // Nothing at window.tonkeeper yet (before BridgeChild shims, or an old
223
+ // bridge-parent without TON support).
224
+ const bridgeWallet = {
225
+ uuid: 'ton-tonkeeper',
226
+ name: 'Tonkeeper',
227
+ icon: '',
228
+ jsBridgeKey: 'tonkeeper',
229
+ provider: makeBridge('Tonkeeper')
230
+ }
231
+ mockWindow.tonWallets = [bridgeWallet]
232
+
233
+ const { getTonWallets } = await import('./ton-discovery')
234
+ const wallets = await getTonWallets([makeWalletMeta('tonkeeper')])
235
+
236
+ expect(wallets).toEqual([bridgeWallet])
197
237
  }, 3000)
198
238
 
199
239
  it('picks up bridge wallets that appear after a delay', async () => {
@@ -112,15 +112,17 @@ export async function getTonWallets(
112
112
  )
113
113
  .filter((key): key is string => !!key)
114
114
 
115
- // Bridge mode (in iframe): poll for bridge-proxied wallets
115
+ // Bridge mode: prefer this frame's own provider (window[jsBridgeKey]) so connect
116
+ // attributes to the iframe origin; fall back to the parent list only
117
+ // when none is present.
116
118
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
117
119
  // @ts-ignore - window.UWCBridgeChildInitialized is set by the bridge
118
120
  if (window.UWCBridgeChildInitialized === true) {
119
- const wallets = await pollForBridgeTonWallets()
120
- if (wallets.length > 0) {
121
- return wallets
121
+ const local = discoverTonProviders(jsBridgeKeys)
122
+ if (local.length > 0) {
123
+ return local
122
124
  }
123
- return []
125
+ return pollForBridgeTonWallets()
124
126
  }
125
127
 
126
128
  // Native discovery: direct window[key].tonconnect access