@t402/tron 1.0.0 → 2.0.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/dist/cjs/index.js CHANGED
@@ -3,9 +3,7 @@ var __defProp = Object.defineProperty;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __esm = (fn, res) => function __init() {
7
- return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
8
- };
6
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
9
7
  var __export = (target, all) => {
10
8
  for (var name in all)
11
9
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -19,142 +17,7 @@ var __copyProps = (to, from, except, desc) => {
19
17
  return to;
20
18
  };
21
19
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
22
-
23
- // src/constants.ts
24
- var TRON_MAINNET_CAIP2, TRON_NILE_CAIP2, TRON_SHASTA_CAIP2, TRON_NETWORKS, TRON_MAINNET_ENDPOINT, TRON_NILE_ENDPOINT, TRON_SHASTA_ENDPOINT, NETWORK_ENDPOINTS, TRC20_TRANSFER_SELECTOR, TRC20_APPROVE_SELECTOR, TRC20_BALANCE_OF_SELECTOR, DEFAULT_FEE_LIMIT, MIN_FEE_LIMIT, MAX_FEE_LIMIT, SUN_PER_TRX, SCHEME_EXACT, DEFAULT_VALIDITY_DURATION, MIN_VALIDITY_BUFFER, TRON_ADDRESS_PREFIX, TRON_ADDRESS_LENGTH, TRON_ADDRESS_HEX_PREFIX, USDT_ADDRESSES, DEFAULT_USDT_DECIMALS, DEFAULT_TRX_DECIMALS;
25
- var init_constants = __esm({
26
- "src/constants.ts"() {
27
- "use strict";
28
- TRON_MAINNET_CAIP2 = "tron:mainnet";
29
- TRON_NILE_CAIP2 = "tron:nile";
30
- TRON_SHASTA_CAIP2 = "tron:shasta";
31
- TRON_NETWORKS = [TRON_MAINNET_CAIP2, TRON_NILE_CAIP2, TRON_SHASTA_CAIP2];
32
- TRON_MAINNET_ENDPOINT = "https://api.trongrid.io";
33
- TRON_NILE_ENDPOINT = "https://api.nileex.io";
34
- TRON_SHASTA_ENDPOINT = "https://api.shasta.trongrid.io";
35
- NETWORK_ENDPOINTS = {
36
- [TRON_MAINNET_CAIP2]: TRON_MAINNET_ENDPOINT,
37
- [TRON_NILE_CAIP2]: TRON_NILE_ENDPOINT,
38
- [TRON_SHASTA_CAIP2]: TRON_SHASTA_ENDPOINT
39
- };
40
- TRC20_TRANSFER_SELECTOR = "a9059cbb";
41
- TRC20_APPROVE_SELECTOR = "095ea7b3";
42
- TRC20_BALANCE_OF_SELECTOR = "70a08231";
43
- DEFAULT_FEE_LIMIT = 1e8;
44
- MIN_FEE_LIMIT = 1e7;
45
- MAX_FEE_LIMIT = 1e9;
46
- SUN_PER_TRX = 1e6;
47
- SCHEME_EXACT = "exact";
48
- DEFAULT_VALIDITY_DURATION = 3600;
49
- MIN_VALIDITY_BUFFER = 30;
50
- TRON_ADDRESS_PREFIX = "T";
51
- TRON_ADDRESS_LENGTH = 34;
52
- TRON_ADDRESS_HEX_PREFIX = 65;
53
- USDT_ADDRESSES = {
54
- [TRON_MAINNET_CAIP2]: "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
55
- [TRON_NILE_CAIP2]: "TXYZopYRdj2D9XRtbG411XZZ3kM5VkAeBf",
56
- [TRON_SHASTA_CAIP2]: "TG3XXyExBkPp9nzdajDZsozEu4BkaSJozs"
57
- };
58
- DEFAULT_USDT_DECIMALS = 6;
59
- DEFAULT_TRX_DECIMALS = 6;
60
- }
61
- });
62
-
63
- // src/tokens.ts
64
- var tokens_exports = {};
65
- __export(tokens_exports, {
66
- TRC20_REGISTRY: () => TRC20_REGISTRY,
67
- getDefaultToken: () => getDefaultToken,
68
- getNetworkTokens: () => getNetworkTokens,
69
- getNetworksForToken: () => getNetworksForToken,
70
- getSupportedNetworks: () => getSupportedNetworks,
71
- getTRC20Config: () => getTRC20Config,
72
- getTokenByAddress: () => getTokenByAddress,
73
- getUsdtNetworks: () => getUsdtNetworks,
74
- isNetworkSupported: () => isNetworkSupported
75
- });
76
- function getTRC20Config(network, symbol) {
77
- const registry = TRC20_REGISTRY[network];
78
- if (!registry) return void 0;
79
- return registry.tokens[symbol];
80
- }
81
- function getNetworkTokens(network) {
82
- const registry = TRC20_REGISTRY[network];
83
- if (!registry) return [];
84
- return Object.values(registry.tokens);
85
- }
86
- function getDefaultToken(network) {
87
- const registry = TRC20_REGISTRY[network];
88
- return registry?.defaultToken;
89
- }
90
- function getTokenByAddress(network, contractAddress) {
91
- const registry = TRC20_REGISTRY[network];
92
- if (!registry) return void 0;
93
- const upperAddress = contractAddress.toUpperCase();
94
- return Object.values(registry.tokens).find(
95
- (token) => token.contractAddress.toUpperCase() === upperAddress
96
- );
97
- }
98
- function getNetworksForToken(symbol) {
99
- return Object.entries(TRC20_REGISTRY).filter(([_, registry]) => symbol in registry.tokens).map(([network]) => network);
100
- }
101
- function getUsdtNetworks() {
102
- return getNetworksForToken("USDT");
103
- }
104
- function isNetworkSupported(network) {
105
- return network in TRC20_REGISTRY;
106
- }
107
- function getSupportedNetworks() {
108
- return Object.keys(TRC20_REGISTRY);
109
- }
110
- var USDT_MAINNET, USDT_NILE, USDT_SHASTA, TRC20_REGISTRY;
111
- var init_tokens = __esm({
112
- "src/tokens.ts"() {
113
- "use strict";
114
- init_constants();
115
- USDT_MAINNET = {
116
- contractAddress: USDT_ADDRESSES[TRON_MAINNET_CAIP2],
117
- symbol: "USDT",
118
- name: "Tether USD",
119
- decimals: DEFAULT_USDT_DECIMALS
120
- };
121
- USDT_NILE = {
122
- contractAddress: USDT_ADDRESSES[TRON_NILE_CAIP2],
123
- symbol: "USDT",
124
- name: "Tether USD",
125
- decimals: DEFAULT_USDT_DECIMALS
126
- };
127
- USDT_SHASTA = {
128
- contractAddress: USDT_ADDRESSES[TRON_SHASTA_CAIP2],
129
- symbol: "USDT",
130
- name: "Tether USD",
131
- decimals: DEFAULT_USDT_DECIMALS
132
- };
133
- TRC20_REGISTRY = {
134
- [TRON_MAINNET_CAIP2]: {
135
- network: TRON_MAINNET_CAIP2,
136
- defaultToken: USDT_MAINNET,
137
- tokens: {
138
- USDT: USDT_MAINNET
139
- }
140
- },
141
- [TRON_NILE_CAIP2]: {
142
- network: TRON_NILE_CAIP2,
143
- defaultToken: USDT_NILE,
144
- tokens: {
145
- USDT: USDT_NILE
146
- }
147
- },
148
- [TRON_SHASTA_CAIP2]: {
149
- network: TRON_SHASTA_CAIP2,
150
- defaultToken: USDT_SHASTA,
151
- tokens: {
152
- USDT: USDT_SHASTA
153
- }
154
- }
155
- };
156
- }
157
- });
20
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
158
21
 
159
22
  // src/index.ts
160
23
  var src_exports = {};
@@ -209,11 +72,119 @@ __export(src_exports, {
209
72
  validateTronAddress: () => validateTronAddress
210
73
  });
211
74
  module.exports = __toCommonJS(src_exports);
212
- init_constants();
213
- init_tokens();
75
+
76
+ // src/constants.ts
77
+ var TRON_MAINNET_CAIP2 = "tron:mainnet";
78
+ var TRON_NILE_CAIP2 = "tron:nile";
79
+ var TRON_SHASTA_CAIP2 = "tron:shasta";
80
+ var TRON_NETWORKS = [TRON_MAINNET_CAIP2, TRON_NILE_CAIP2, TRON_SHASTA_CAIP2];
81
+ var TRON_MAINNET_ENDPOINT = "https://api.trongrid.io";
82
+ var TRON_NILE_ENDPOINT = "https://api.nileex.io";
83
+ var TRON_SHASTA_ENDPOINT = "https://api.shasta.trongrid.io";
84
+ var NETWORK_ENDPOINTS = {
85
+ [TRON_MAINNET_CAIP2]: TRON_MAINNET_ENDPOINT,
86
+ [TRON_NILE_CAIP2]: TRON_NILE_ENDPOINT,
87
+ [TRON_SHASTA_CAIP2]: TRON_SHASTA_ENDPOINT
88
+ };
89
+ var TRC20_TRANSFER_SELECTOR = "a9059cbb";
90
+ var TRC20_APPROVE_SELECTOR = "095ea7b3";
91
+ var TRC20_BALANCE_OF_SELECTOR = "70a08231";
92
+ var DEFAULT_FEE_LIMIT = 1e8;
93
+ var MIN_FEE_LIMIT = 1e7;
94
+ var MAX_FEE_LIMIT = 1e9;
95
+ var SUN_PER_TRX = 1e6;
96
+ var SCHEME_EXACT = "exact";
97
+ var DEFAULT_VALIDITY_DURATION = 3600;
98
+ var MIN_VALIDITY_BUFFER = 30;
99
+ var TRON_ADDRESS_PREFIX = "T";
100
+ var TRON_ADDRESS_LENGTH = 34;
101
+ var TRON_ADDRESS_HEX_PREFIX = 65;
102
+ var USDT_ADDRESSES = {
103
+ [TRON_MAINNET_CAIP2]: "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
104
+ [TRON_NILE_CAIP2]: "TXYZopYRdj2D9XRtbG411XZZ3kM5VkAeBf",
105
+ [TRON_SHASTA_CAIP2]: "TG3XXyExBkPp9nzdajDZsozEu4BkaSJozs"
106
+ };
107
+ var DEFAULT_USDT_DECIMALS = 6;
108
+ var DEFAULT_TRX_DECIMALS = 6;
109
+
110
+ // src/tokens.ts
111
+ var USDT_MAINNET = {
112
+ contractAddress: USDT_ADDRESSES[TRON_MAINNET_CAIP2],
113
+ symbol: "USDT",
114
+ name: "Tether USD",
115
+ decimals: DEFAULT_USDT_DECIMALS
116
+ };
117
+ var USDT_NILE = {
118
+ contractAddress: USDT_ADDRESSES[TRON_NILE_CAIP2],
119
+ symbol: "USDT",
120
+ name: "Tether USD",
121
+ decimals: DEFAULT_USDT_DECIMALS
122
+ };
123
+ var USDT_SHASTA = {
124
+ contractAddress: USDT_ADDRESSES[TRON_SHASTA_CAIP2],
125
+ symbol: "USDT",
126
+ name: "Tether USD",
127
+ decimals: DEFAULT_USDT_DECIMALS
128
+ };
129
+ var TRC20_REGISTRY = {
130
+ [TRON_MAINNET_CAIP2]: {
131
+ network: TRON_MAINNET_CAIP2,
132
+ defaultToken: USDT_MAINNET,
133
+ tokens: {
134
+ USDT: USDT_MAINNET
135
+ }
136
+ },
137
+ [TRON_NILE_CAIP2]: {
138
+ network: TRON_NILE_CAIP2,
139
+ defaultToken: USDT_NILE,
140
+ tokens: {
141
+ USDT: USDT_NILE
142
+ }
143
+ },
144
+ [TRON_SHASTA_CAIP2]: {
145
+ network: TRON_SHASTA_CAIP2,
146
+ defaultToken: USDT_SHASTA,
147
+ tokens: {
148
+ USDT: USDT_SHASTA
149
+ }
150
+ }
151
+ };
152
+ function getTRC20Config(network, symbol) {
153
+ const registry = TRC20_REGISTRY[network];
154
+ if (!registry) return void 0;
155
+ return registry.tokens[symbol];
156
+ }
157
+ function getNetworkTokens(network) {
158
+ const registry = TRC20_REGISTRY[network];
159
+ if (!registry) return [];
160
+ return Object.values(registry.tokens);
161
+ }
162
+ function getDefaultToken(network) {
163
+ const registry = TRC20_REGISTRY[network];
164
+ return registry?.defaultToken;
165
+ }
166
+ function getTokenByAddress(network, contractAddress) {
167
+ const registry = TRC20_REGISTRY[network];
168
+ if (!registry) return void 0;
169
+ const upperAddress = contractAddress.toUpperCase();
170
+ return Object.values(registry.tokens).find(
171
+ (token) => token.contractAddress.toUpperCase() === upperAddress
172
+ );
173
+ }
174
+ function getNetworksForToken(symbol) {
175
+ return Object.entries(TRC20_REGISTRY).filter(([_, registry]) => symbol in registry.tokens).map(([network]) => network);
176
+ }
177
+ function getUsdtNetworks() {
178
+ return getNetworksForToken("USDT");
179
+ }
180
+ function isNetworkSupported(network) {
181
+ return network in TRC20_REGISTRY;
182
+ }
183
+ function getSupportedNetworks() {
184
+ return Object.keys(TRC20_REGISTRY);
185
+ }
214
186
 
215
187
  // src/utils.ts
216
- init_constants();
217
188
  function normalizeNetwork(network) {
218
189
  if (TRON_NETWORKS.includes(network)) {
219
190
  return network;
@@ -314,10 +285,11 @@ function estimateTransactionFee(isActivated = true) {
314
285
  }
315
286
 
316
287
  // src/exact/client/scheme.ts
317
- init_constants();
318
288
  var ExactTronScheme = class {
319
289
  constructor(signer, config) {
320
- this.scheme = SCHEME_EXACT;
290
+ __publicField(this, "scheme", SCHEME_EXACT);
291
+ __publicField(this, "signer");
292
+ __publicField(this, "config");
321
293
  this.signer = signer;
322
294
  this.config = config ?? {};
323
295
  }
@@ -399,13 +371,12 @@ function registerExactTronScheme(client, config) {
399
371
  }
400
372
 
401
373
  // src/exact/server/scheme.ts
402
- init_constants();
403
- init_tokens();
404
374
  var ExactTronScheme2 = class {
405
375
  constructor(config) {
406
- this.scheme = SCHEME_EXACT;
407
- this.moneyParsers = [];
408
- this.config = config ?? {};
376
+ __publicField(this, "scheme", SCHEME_EXACT);
377
+ __publicField(this, "_config");
378
+ __publicField(this, "moneyParsers", []);
379
+ this._config = config ?? {};
409
380
  }
410
381
  /**
411
382
  * Register a custom money parser
@@ -463,7 +434,7 @@ var ExactTronScheme2 = class {
463
434
  async enhancePaymentRequirements(requirements, supportedKind, extensionKeys) {
464
435
  void extensionKeys;
465
436
  const network = normalizeNetwork(String(requirements.network));
466
- let tokenConfig = requirements.asset ? getTRC20Config(network, requirements.asset) || this.getTokenByAddress(network, requirements.asset) : getDefaultToken(network);
437
+ let tokenConfig = requirements.asset ? getTRC20Config(network, requirements.asset) || getTokenByAddress(network, requirements.asset) : getDefaultToken(network);
467
438
  if (!tokenConfig) {
468
439
  tokenConfig = getDefaultToken(network);
469
440
  }
@@ -507,10 +478,14 @@ var ExactTronScheme2 = class {
507
478
  throw new Error(`Invalid price type: ${typeof price}`);
508
479
  }
509
480
  /**
510
- * Default money to asset conversion (USDT)
481
+ * Default money to asset conversion
482
+ * Uses preferredToken from config if set, otherwise falls back to network default
511
483
  */
512
484
  defaultMoneyConversion(decimalAmount, network) {
513
- const tokenConfig = getDefaultToken(network);
485
+ let tokenConfig = this._config.preferredToken ? getTRC20Config(network, this._config.preferredToken) : void 0;
486
+ if (!tokenConfig) {
487
+ tokenConfig = getDefaultToken(network);
488
+ }
514
489
  if (!tokenConfig) {
515
490
  throw new Error(`No default token for network: ${network}`);
516
491
  }
@@ -535,13 +510,6 @@ var ExactTronScheme2 = class {
535
510
  }
536
511
  return tokenConfig.contractAddress;
537
512
  }
538
- /**
539
- * Get token config by contract address
540
- */
541
- getTokenByAddress(network, address) {
542
- const { getTokenByAddress: getTokenByAddress2 } = (init_tokens(), __toCommonJS(tokens_exports));
543
- return getTokenByAddress2(network, address);
544
- }
545
513
  };
546
514
 
547
515
  // src/exact/server/register.ts
@@ -558,11 +526,12 @@ function registerExactTronScheme2(server, config = {}) {
558
526
  }
559
527
 
560
528
  // src/exact/facilitator/scheme.ts
561
- init_constants();
562
529
  var ExactTronScheme3 = class {
563
530
  constructor(signer, config) {
564
- this.scheme = SCHEME_EXACT;
565
- this.caipFamily = "tron:*";
531
+ __publicField(this, "scheme", SCHEME_EXACT);
532
+ __publicField(this, "caipFamily", "tron:*");
533
+ __publicField(this, "signer");
534
+ __publicField(this, "config");
566
535
  this.signer = signer;
567
536
  this.config = config ?? {};
568
537
  }
@@ -605,6 +574,13 @@ var ExactTronScheme3 = class {
605
574
  */
606
575
  async verify(payload, requirements) {
607
576
  const tronPayload = payload.payload;
577
+ if (!tronPayload?.authorization?.from || !tronPayload?.signedTransaction) {
578
+ return {
579
+ isValid: false,
580
+ invalidReason: "invalid_payload_structure",
581
+ payer: ""
582
+ };
583
+ }
608
584
  const authorization = tronPayload.authorization;
609
585
  if (payload.accepted.scheme !== SCHEME_EXACT || requirements.scheme !== SCHEME_EXACT) {
610
586
  return {
@@ -631,13 +607,6 @@ var ExactTronScheme3 = class {
631
607
  payer: authorization.from
632
608
  };
633
609
  }
634
- if (!tronPayload || !tronPayload.signedTransaction || !authorization) {
635
- return {
636
- isValid: false,
637
- invalidReason: "invalid_payload_structure",
638
- payer: authorization?.from || ""
639
- };
640
- }
641
610
  if (!validateTronAddress(authorization.from)) {
642
611
  return {
643
612
  isValid: false,
@@ -747,6 +716,15 @@ var ExactTronScheme3 = class {
747
716
  */
748
717
  async settle(payload, requirements) {
749
718
  const tronPayload = payload.payload;
719
+ if (!tronPayload?.authorization?.from || !tronPayload?.signedTransaction) {
720
+ return {
721
+ success: false,
722
+ network: payload.accepted.network,
723
+ transaction: "",
724
+ errorReason: "invalid_payload_structure",
725
+ payer: ""
726
+ };
727
+ }
750
728
  const verifyResult = await this.verify(payload, requirements);
751
729
  if (!verifyResult.isValid) {
752
730
  return {