@t402/tron 1.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.
Files changed (35) hide show
  1. package/dist/cjs/exact/client/index.d.ts +90 -0
  2. package/dist/cjs/exact/client/index.js +172 -0
  3. package/dist/cjs/exact/client/index.js.map +1 -0
  4. package/dist/cjs/exact/facilitator/index.d.ts +114 -0
  5. package/dist/cjs/exact/facilitator/index.js +344 -0
  6. package/dist/cjs/exact/facilitator/index.js.map +1 -0
  7. package/dist/cjs/exact/server/index.d.ts +123 -0
  8. package/dist/cjs/exact/server/index.js +350 -0
  9. package/dist/cjs/exact/server/index.js.map +1 -0
  10. package/dist/cjs/index.d.ts +237 -0
  11. package/dist/cjs/index.js +863 -0
  12. package/dist/cjs/index.js.map +1 -0
  13. package/dist/cjs/signer-BB-HLs-P.d.ts +261 -0
  14. package/dist/esm/chunk-A2E6FJU3.mjs +98 -0
  15. package/dist/esm/chunk-A2E6FJU3.mjs.map +1 -0
  16. package/dist/esm/chunk-CH6GR2VO.mjs +267 -0
  17. package/dist/esm/chunk-CH6GR2VO.mjs.map +1 -0
  18. package/dist/esm/chunk-L773HPM3.mjs +202 -0
  19. package/dist/esm/chunk-L773HPM3.mjs.map +1 -0
  20. package/dist/esm/chunk-RHOZZ6XV.mjs +285 -0
  21. package/dist/esm/chunk-RHOZZ6XV.mjs.map +1 -0
  22. package/dist/esm/exact/client/index.d.mts +90 -0
  23. package/dist/esm/exact/client/index.mjs +10 -0
  24. package/dist/esm/exact/client/index.mjs.map +1 -0
  25. package/dist/esm/exact/facilitator/index.d.mts +114 -0
  26. package/dist/esm/exact/facilitator/index.mjs +10 -0
  27. package/dist/esm/exact/facilitator/index.mjs.map +1 -0
  28. package/dist/esm/exact/server/index.d.mts +123 -0
  29. package/dist/esm/exact/server/index.mjs +10 -0
  30. package/dist/esm/exact/server/index.mjs.map +1 -0
  31. package/dist/esm/index.d.mts +237 -0
  32. package/dist/esm/index.mjs +113 -0
  33. package/dist/esm/index.mjs.map +1 -0
  34. package/dist/esm/signer-BB-HLs-P.d.mts +261 -0
  35. package/package.json +97 -0
@@ -0,0 +1,285 @@
1
+ import {
2
+ DEFAULT_USDT_DECIMALS,
3
+ SCHEME_EXACT,
4
+ TRON_MAINNET_CAIP2,
5
+ TRON_NILE_CAIP2,
6
+ TRON_SHASTA_CAIP2,
7
+ USDT_ADDRESSES,
8
+ __esm,
9
+ __export,
10
+ __toCommonJS,
11
+ convertToSmallestUnits,
12
+ init_constants,
13
+ normalizeNetwork
14
+ } from "./chunk-L773HPM3.mjs";
15
+
16
+ // src/tokens.ts
17
+ var tokens_exports = {};
18
+ __export(tokens_exports, {
19
+ TRC20_REGISTRY: () => TRC20_REGISTRY,
20
+ getDefaultToken: () => getDefaultToken,
21
+ getNetworkTokens: () => getNetworkTokens,
22
+ getNetworksForToken: () => getNetworksForToken,
23
+ getSupportedNetworks: () => getSupportedNetworks,
24
+ getTRC20Config: () => getTRC20Config,
25
+ getTokenByAddress: () => getTokenByAddress,
26
+ getUsdtNetworks: () => getUsdtNetworks,
27
+ isNetworkSupported: () => isNetworkSupported
28
+ });
29
+ function getTRC20Config(network, symbol) {
30
+ const registry = TRC20_REGISTRY[network];
31
+ if (!registry) return void 0;
32
+ return registry.tokens[symbol];
33
+ }
34
+ function getNetworkTokens(network) {
35
+ const registry = TRC20_REGISTRY[network];
36
+ if (!registry) return [];
37
+ return Object.values(registry.tokens);
38
+ }
39
+ function getDefaultToken(network) {
40
+ const registry = TRC20_REGISTRY[network];
41
+ return registry?.defaultToken;
42
+ }
43
+ function getTokenByAddress(network, contractAddress) {
44
+ const registry = TRC20_REGISTRY[network];
45
+ if (!registry) return void 0;
46
+ const upperAddress = contractAddress.toUpperCase();
47
+ return Object.values(registry.tokens).find(
48
+ (token) => token.contractAddress.toUpperCase() === upperAddress
49
+ );
50
+ }
51
+ function getNetworksForToken(symbol) {
52
+ return Object.entries(TRC20_REGISTRY).filter(([_, registry]) => symbol in registry.tokens).map(([network]) => network);
53
+ }
54
+ function getUsdtNetworks() {
55
+ return getNetworksForToken("USDT");
56
+ }
57
+ function isNetworkSupported(network) {
58
+ return network in TRC20_REGISTRY;
59
+ }
60
+ function getSupportedNetworks() {
61
+ return Object.keys(TRC20_REGISTRY);
62
+ }
63
+ var USDT_MAINNET, USDT_NILE, USDT_SHASTA, TRC20_REGISTRY;
64
+ var init_tokens = __esm({
65
+ "src/tokens.ts"() {
66
+ "use strict";
67
+ init_constants();
68
+ USDT_MAINNET = {
69
+ contractAddress: USDT_ADDRESSES[TRON_MAINNET_CAIP2],
70
+ symbol: "USDT",
71
+ name: "Tether USD",
72
+ decimals: DEFAULT_USDT_DECIMALS
73
+ };
74
+ USDT_NILE = {
75
+ contractAddress: USDT_ADDRESSES[TRON_NILE_CAIP2],
76
+ symbol: "USDT",
77
+ name: "Tether USD",
78
+ decimals: DEFAULT_USDT_DECIMALS
79
+ };
80
+ USDT_SHASTA = {
81
+ contractAddress: USDT_ADDRESSES[TRON_SHASTA_CAIP2],
82
+ symbol: "USDT",
83
+ name: "Tether USD",
84
+ decimals: DEFAULT_USDT_DECIMALS
85
+ };
86
+ TRC20_REGISTRY = {
87
+ [TRON_MAINNET_CAIP2]: {
88
+ network: TRON_MAINNET_CAIP2,
89
+ defaultToken: USDT_MAINNET,
90
+ tokens: {
91
+ USDT: USDT_MAINNET
92
+ }
93
+ },
94
+ [TRON_NILE_CAIP2]: {
95
+ network: TRON_NILE_CAIP2,
96
+ defaultToken: USDT_NILE,
97
+ tokens: {
98
+ USDT: USDT_NILE
99
+ }
100
+ },
101
+ [TRON_SHASTA_CAIP2]: {
102
+ network: TRON_SHASTA_CAIP2,
103
+ defaultToken: USDT_SHASTA,
104
+ tokens: {
105
+ USDT: USDT_SHASTA
106
+ }
107
+ }
108
+ };
109
+ }
110
+ });
111
+
112
+ // src/exact/server/scheme.ts
113
+ init_constants();
114
+ init_tokens();
115
+ var ExactTronScheme = class {
116
+ constructor(config) {
117
+ this.scheme = SCHEME_EXACT;
118
+ this.moneyParsers = [];
119
+ this.config = config ?? {};
120
+ }
121
+ /**
122
+ * Register a custom money parser
123
+ *
124
+ * Parsers are tried in registration order. Return null to pass to next parser.
125
+ *
126
+ * @param parser - Money parser function
127
+ * @returns This scheme for chaining
128
+ */
129
+ registerMoneyParser(parser) {
130
+ this.moneyParsers.push(parser);
131
+ return this;
132
+ }
133
+ /**
134
+ * Parse a price into an asset amount
135
+ *
136
+ * @param price - Price to parse (string, number, or AssetAmount)
137
+ * @param network - Target network
138
+ * @returns Parsed asset amount
139
+ */
140
+ async parsePrice(price, network) {
141
+ const normalizedNetwork = normalizeNetwork(String(network));
142
+ if (!isNetworkSupported(normalizedNetwork)) {
143
+ throw new Error(`Unsupported network: ${network}`);
144
+ }
145
+ if (typeof price === "object" && price !== null && "amount" in price) {
146
+ const assetAmount = price;
147
+ return {
148
+ amount: assetAmount.amount,
149
+ asset: assetAmount.asset || this.getDefaultAsset(normalizedNetwork),
150
+ extra: assetAmount.extra
151
+ };
152
+ }
153
+ const decimalAmount = this.parseMoneyToDecimal(price);
154
+ for (const parser of this.moneyParsers) {
155
+ try {
156
+ const result = await parser(decimalAmount, network);
157
+ if (result !== null) {
158
+ return result;
159
+ }
160
+ } catch {
161
+ continue;
162
+ }
163
+ }
164
+ return this.defaultMoneyConversion(decimalAmount, normalizedNetwork);
165
+ }
166
+ /**
167
+ * Enhance payment requirements with scheme-specific data
168
+ *
169
+ * @param requirements - Base payment requirements
170
+ * @param supportedKind - Supported payment kind
171
+ * @param extensionKeys - Extension keys to include
172
+ * @returns Enhanced payment requirements
173
+ */
174
+ async enhancePaymentRequirements(requirements, supportedKind, extensionKeys) {
175
+ void extensionKeys;
176
+ const network = normalizeNetwork(String(requirements.network));
177
+ let tokenConfig = requirements.asset ? getTRC20Config(network, requirements.asset) || this.getTokenByAddress(network, requirements.asset) : getDefaultToken(network);
178
+ if (!tokenConfig) {
179
+ tokenConfig = getDefaultToken(network);
180
+ }
181
+ const extra = { ...requirements.extra };
182
+ if (tokenConfig) {
183
+ extra.symbol = tokenConfig.symbol;
184
+ extra.name = tokenConfig.name;
185
+ extra.decimals = tokenConfig.decimals;
186
+ }
187
+ if (supportedKind.extra) {
188
+ for (const key of extensionKeys) {
189
+ if (key in supportedKind.extra) {
190
+ extra[key] = supportedKind.extra[key];
191
+ }
192
+ }
193
+ }
194
+ return {
195
+ ...requirements,
196
+ asset: tokenConfig?.contractAddress || requirements.asset,
197
+ extra
198
+ };
199
+ }
200
+ /**
201
+ * Parse money (string/number) to decimal number
202
+ */
203
+ parseMoneyToDecimal(price) {
204
+ if (typeof price === "number") {
205
+ return price;
206
+ }
207
+ if (typeof price === "string") {
208
+ let cleanPrice = price.trim();
209
+ cleanPrice = cleanPrice.replace(/^\$/, "").trim();
210
+ const parts = cleanPrice.split(/\s+/);
211
+ const numericPart = parts[0];
212
+ const parsed = parseFloat(numericPart);
213
+ if (isNaN(parsed)) {
214
+ throw new Error(`Failed to parse price: ${price}`);
215
+ }
216
+ return parsed;
217
+ }
218
+ throw new Error(`Invalid price type: ${typeof price}`);
219
+ }
220
+ /**
221
+ * Default money to asset conversion (USDT)
222
+ */
223
+ defaultMoneyConversion(decimalAmount, network) {
224
+ const tokenConfig = getDefaultToken(network);
225
+ if (!tokenConfig) {
226
+ throw new Error(`No default token for network: ${network}`);
227
+ }
228
+ const amount = convertToSmallestUnits(decimalAmount.toFixed(6), tokenConfig.decimals);
229
+ return {
230
+ amount,
231
+ asset: tokenConfig.contractAddress,
232
+ extra: {
233
+ symbol: tokenConfig.symbol,
234
+ name: tokenConfig.name,
235
+ decimals: tokenConfig.decimals
236
+ }
237
+ };
238
+ }
239
+ /**
240
+ * Get default asset address for network
241
+ */
242
+ getDefaultAsset(network) {
243
+ const tokenConfig = getDefaultToken(network);
244
+ if (!tokenConfig) {
245
+ throw new Error(`No default token for network: ${network}`);
246
+ }
247
+ return tokenConfig.contractAddress;
248
+ }
249
+ /**
250
+ * Get token config by contract address
251
+ */
252
+ getTokenByAddress(network, address) {
253
+ const { getTokenByAddress: getTokenByAddress2 } = (init_tokens(), __toCommonJS(tokens_exports));
254
+ return getTokenByAddress2(network, address);
255
+ }
256
+ };
257
+
258
+ // src/exact/server/register.ts
259
+ function registerExactTronScheme(server, config = {}) {
260
+ const scheme = new ExactTronScheme(config.schemeConfig);
261
+ if (config.networks && config.networks.length > 0) {
262
+ config.networks.forEach((network) => {
263
+ server.register(network, scheme);
264
+ });
265
+ } else {
266
+ server.register("tron:*", scheme);
267
+ }
268
+ return server;
269
+ }
270
+
271
+ export {
272
+ TRC20_REGISTRY,
273
+ getTRC20Config,
274
+ getNetworkTokens,
275
+ getDefaultToken,
276
+ getTokenByAddress,
277
+ getNetworksForToken,
278
+ getUsdtNetworks,
279
+ isNetworkSupported,
280
+ getSupportedNetworks,
281
+ init_tokens,
282
+ ExactTronScheme,
283
+ registerExactTronScheme
284
+ };
285
+ //# sourceMappingURL=chunk-RHOZZ6XV.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/tokens.ts","../../src/exact/server/scheme.ts","../../src/exact/server/register.ts"],"sourcesContent":["/**\n * TRC20 Token Configuration\n *\n * Registry of supported TRC20 tokens for each TRON network.\n */\n\nimport type { TRC20Config, NetworkTRC20Registry } from \"./types.js\";\nimport {\n TRON_MAINNET_CAIP2,\n TRON_NILE_CAIP2,\n TRON_SHASTA_CAIP2,\n USDT_ADDRESSES,\n DEFAULT_USDT_DECIMALS,\n} from \"./constants.js\";\n\n// =============================================================================\n// USDT Token Configurations\n// =============================================================================\n\n/** USDT on TRON Mainnet */\nconst USDT_MAINNET: TRC20Config = {\n contractAddress: USDT_ADDRESSES[TRON_MAINNET_CAIP2],\n symbol: \"USDT\",\n name: \"Tether USD\",\n decimals: DEFAULT_USDT_DECIMALS,\n};\n\n/** USDT on TRON Nile Testnet */\nconst USDT_NILE: TRC20Config = {\n contractAddress: USDT_ADDRESSES[TRON_NILE_CAIP2],\n symbol: \"USDT\",\n name: \"Tether USD\",\n decimals: DEFAULT_USDT_DECIMALS,\n};\n\n/** USDT on TRON Shasta Testnet */\nconst USDT_SHASTA: TRC20Config = {\n contractAddress: USDT_ADDRESSES[TRON_SHASTA_CAIP2],\n symbol: \"USDT\",\n name: \"Tether USD\",\n decimals: DEFAULT_USDT_DECIMALS,\n};\n\n// =============================================================================\n// Token Registry\n// =============================================================================\n\n/**\n * Registry of TRC20 tokens by network\n */\nexport const TRC20_REGISTRY: Record<string, NetworkTRC20Registry> = {\n [TRON_MAINNET_CAIP2]: {\n network: TRON_MAINNET_CAIP2,\n defaultToken: USDT_MAINNET,\n tokens: {\n USDT: USDT_MAINNET,\n },\n },\n [TRON_NILE_CAIP2]: {\n network: TRON_NILE_CAIP2,\n defaultToken: USDT_NILE,\n tokens: {\n USDT: USDT_NILE,\n },\n },\n [TRON_SHASTA_CAIP2]: {\n network: TRON_SHASTA_CAIP2,\n defaultToken: USDT_SHASTA,\n tokens: {\n USDT: USDT_SHASTA,\n },\n },\n};\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\n/**\n * Get TRC20 configuration for a specific token on a network\n *\n * @param network - CAIP-2 network identifier\n * @param symbol - Token symbol (e.g., \"USDT\")\n * @returns Token configuration or undefined if not found\n */\nexport function getTRC20Config(network: string, symbol: string): TRC20Config | undefined {\n const registry = TRC20_REGISTRY[network];\n if (!registry) return undefined;\n return registry.tokens[symbol];\n}\n\n/**\n * Get all TRC20 tokens for a network\n *\n * @param network - CAIP-2 network identifier\n * @returns Array of token configurations\n */\nexport function getNetworkTokens(network: string): TRC20Config[] {\n const registry = TRC20_REGISTRY[network];\n if (!registry) return [];\n return Object.values(registry.tokens);\n}\n\n/**\n * Get the default TRC20 token for a network\n *\n * @param network - CAIP-2 network identifier\n * @returns Default token configuration or undefined\n */\nexport function getDefaultToken(network: string): TRC20Config | undefined {\n const registry = TRC20_REGISTRY[network];\n return registry?.defaultToken;\n}\n\n/**\n * Get token by contract address\n *\n * @param network - CAIP-2 network identifier\n * @param contractAddress - TRC20 contract address\n * @returns Token configuration or undefined\n */\nexport function getTokenByAddress(network: string, contractAddress: string): TRC20Config | undefined {\n const registry = TRC20_REGISTRY[network];\n if (!registry) return undefined;\n\n const upperAddress = contractAddress.toUpperCase();\n return Object.values(registry.tokens).find(\n token => token.contractAddress.toUpperCase() === upperAddress,\n );\n}\n\n/**\n * Get all networks that support a specific token\n *\n * @param symbol - Token symbol (e.g., \"USDT\")\n * @returns Array of network identifiers\n */\nexport function getNetworksForToken(symbol: string): string[] {\n return Object.entries(TRC20_REGISTRY)\n .filter(([_, registry]) => symbol in registry.tokens)\n .map(([network]) => network);\n}\n\n/**\n * Get all networks that support USDT\n *\n * @returns Array of network identifiers\n */\nexport function getUsdtNetworks(): string[] {\n return getNetworksForToken(\"USDT\");\n}\n\n/**\n * Check if a network is supported\n *\n * @param network - CAIP-2 network identifier\n * @returns true if network is supported\n */\nexport function isNetworkSupported(network: string): boolean {\n return network in TRC20_REGISTRY;\n}\n\n/**\n * Get all supported networks\n *\n * @returns Array of network identifiers\n */\nexport function getSupportedNetworks(): string[] {\n return Object.keys(TRC20_REGISTRY);\n}\n","/**\n * TRON Exact Payment Scheme - Server Implementation\n *\n * Parses prices and enhances payment requirements for TRC20 payments.\n */\n\nimport type {\n AssetAmount,\n Network,\n PaymentRequirements,\n Price,\n SchemeNetworkServer,\n MoneyParser,\n} from \"@t402/core/types\";\nimport { SCHEME_EXACT, DEFAULT_USDT_DECIMALS } from \"../../constants.js\";\nimport { normalizeNetwork, convertToSmallestUnits } from \"../../utils.js\";\nimport { getDefaultToken, getTRC20Config, isNetworkSupported } from \"../../tokens.js\";\n\n/**\n * Configuration for ExactTronScheme (server)\n */\nexport type ExactTronSchemeConfig = {\n /** Preferred token symbol (default: highest priority) */\n preferredToken?: string;\n};\n\n/**\n * Server-side implementation of the TRON exact payment scheme\n *\n * This scheme parses prices and prepares payment requirements\n * for TRC20 token transfers.\n */\nexport class ExactTronScheme implements SchemeNetworkServer {\n readonly scheme = SCHEME_EXACT;\n private readonly config: ExactTronSchemeConfig;\n private readonly moneyParsers: MoneyParser[] = []\n\n constructor(config?: ExactTronSchemeConfig) {\n this.config = config ?? {};\n }\n\n /**\n * Register a custom money parser\n *\n * Parsers are tried in registration order. Return null to pass to next parser.\n *\n * @param parser - Money parser function\n * @returns This scheme for chaining\n */\n registerMoneyParser(parser: MoneyParser): ExactTronScheme {\n this.moneyParsers.push(parser);\n return this;\n }\n\n /**\n * Parse a price into an asset amount\n *\n * @param price - Price to parse (string, number, or AssetAmount)\n * @param network - Target network\n * @returns Parsed asset amount\n */\n async parsePrice(price: Price, network: Network): Promise<AssetAmount> {\n const normalizedNetwork = normalizeNetwork(String(network));\n\n // Validate network support\n if (!isNetworkSupported(normalizedNetwork)) {\n throw new Error(`Unsupported network: ${network}`);\n }\n\n // If already an AssetAmount, return it\n if (typeof price === \"object\" && price !== null && \"amount\" in price) {\n const assetAmount = price as AssetAmount;\n return {\n amount: assetAmount.amount,\n asset: assetAmount.asset || this.getDefaultAsset(normalizedNetwork),\n extra: assetAmount.extra,\n };\n }\n\n // Parse money to decimal\n const decimalAmount = this.parseMoneyToDecimal(price);\n\n // Try custom parsers first\n for (const parser of this.moneyParsers) {\n try {\n const result = await parser(decimalAmount, network);\n if (result !== null) {\n return result;\n }\n } catch {\n // Parser failed, try next one\n continue;\n }\n }\n\n // Use default conversion (USDT with 6 decimals)\n return this.defaultMoneyConversion(decimalAmount, normalizedNetwork);\n }\n\n /**\n * Enhance payment requirements with scheme-specific data\n *\n * @param requirements - Base payment requirements\n * @param supportedKind - Supported payment kind\n * @param extensionKeys - Extension keys to include\n * @returns Enhanced payment requirements\n */\n async enhancePaymentRequirements(\n requirements: PaymentRequirements,\n supportedKind: {\n t402Version: number;\n scheme: string;\n network: Network;\n extra?: Record<string, unknown>;\n },\n extensionKeys: string[],\n ): Promise<PaymentRequirements> {\n void extensionKeys;\n const network = normalizeNetwork(String(requirements.network));\n\n // Get token config\n let tokenConfig = requirements.asset\n ? getTRC20Config(network, requirements.asset) || this.getTokenByAddress(network, requirements.asset)\n : getDefaultToken(network);\n\n if (!tokenConfig) {\n tokenConfig = getDefaultToken(network);\n }\n\n // Initialize extra if needed\n const extra: Record<string, unknown> = { ...requirements.extra };\n\n // Add token metadata\n if (tokenConfig) {\n extra.symbol = tokenConfig.symbol;\n extra.name = tokenConfig.name;\n extra.decimals = tokenConfig.decimals;\n }\n\n // Copy extension data\n if (supportedKind.extra) {\n for (const key of extensionKeys) {\n if (key in supportedKind.extra) {\n extra[key] = supportedKind.extra[key];\n }\n }\n }\n\n return {\n ...requirements,\n asset: tokenConfig?.contractAddress || requirements.asset,\n extra,\n };\n }\n\n /**\n * Parse money (string/number) to decimal number\n */\n private parseMoneyToDecimal(price: Price): number {\n if (typeof price === \"number\") {\n return price;\n }\n\n if (typeof price === \"string\") {\n // Remove currency symbols and whitespace\n let cleanPrice = price.trim();\n cleanPrice = cleanPrice.replace(/^\\$/, \"\").trim();\n\n // Parse the numeric part\n const parts = cleanPrice.split(/\\s+/);\n const numericPart = parts[0];\n const parsed = parseFloat(numericPart);\n\n if (isNaN(parsed)) {\n throw new Error(`Failed to parse price: ${price}`);\n }\n\n return parsed;\n }\n\n throw new Error(`Invalid price type: ${typeof price}`);\n }\n\n /**\n * Default money to asset conversion (USDT)\n */\n private defaultMoneyConversion(decimalAmount: number, network: string): AssetAmount {\n const tokenConfig = getDefaultToken(network);\n if (!tokenConfig) {\n throw new Error(`No default token for network: ${network}`);\n }\n\n const amount = convertToSmallestUnits(decimalAmount.toFixed(6), tokenConfig.decimals);\n\n return {\n amount,\n asset: tokenConfig.contractAddress,\n extra: {\n symbol: tokenConfig.symbol,\n name: tokenConfig.name,\n decimals: tokenConfig.decimals,\n },\n };\n }\n\n /**\n * Get default asset address for network\n */\n private getDefaultAsset(network: string): string {\n const tokenConfig = getDefaultToken(network);\n if (!tokenConfig) {\n throw new Error(`No default token for network: ${network}`);\n }\n return tokenConfig.contractAddress;\n }\n\n /**\n * Get token config by contract address\n */\n private getTokenByAddress(network: string, address: string): { contractAddress: string; symbol: string; name: string; decimals: number } | undefined {\n // Import dynamically to avoid circular deps\n const { getTokenByAddress } = require(\"../../tokens.js\");\n return getTokenByAddress(network, address);\n }\n}\n","/**\n * TRON Server Scheme Registration\n *\n * Helper function to register TRON exact scheme with a t402 resource server.\n */\n\nimport { t402ResourceServer } from \"@t402/core/server\";\nimport { Network } from \"@t402/core/types\";\nimport { ExactTronScheme, ExactTronSchemeConfig } from \"./scheme.js\";\n\n/**\n * Configuration options for registering TRON schemes to a t402ResourceServer\n */\nexport interface TronResourceServerConfig {\n /**\n * Optional specific networks to register\n * If not provided, registers wildcard support (tron:*)\n */\n networks?: Network[];\n\n /**\n * Optional scheme configuration (preferred token, etc.)\n */\n schemeConfig?: ExactTronSchemeConfig;\n}\n\n/**\n * Registers TRON exact payment schemes to a t402ResourceServer instance.\n *\n * This function registers:\n * - V2: tron:* wildcard scheme with ExactTronScheme (or specific networks if provided)\n *\n * @param server - The t402ResourceServer instance to register schemes to\n * @param config - Configuration for TRON resource server registration\n * @returns The server instance for chaining\n *\n * @example\n * ```typescript\n * import { registerExactTronScheme } from \"@t402/tron/exact/server\";\n * import { t402ResourceServer } from \"@t402/core/server\";\n *\n * const server = new t402ResourceServer(facilitatorClient);\n * registerExactTronScheme(server, {});\n *\n * // Or with specific token preference\n * registerExactTronScheme(server, {\n * schemeConfig: { preferredToken: \"USDT\" }\n * });\n * ```\n */\nexport function registerExactTronScheme(\n server: t402ResourceServer,\n config: TronResourceServerConfig = {},\n): t402ResourceServer {\n const scheme = new ExactTronScheme(config.schemeConfig);\n\n // Register V2 scheme\n if (config.networks && config.networks.length > 0) {\n // Register specific networks\n config.networks.forEach(network => {\n server.register(network, scheme);\n });\n } else {\n // Register wildcard for all TRON networks\n server.register(\"tron:*\", scheme);\n }\n\n return server;\n}\n"],"mappings":"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","names":["getTokenByAddress"]}
@@ -0,0 +1,90 @@
1
+ import { SchemeNetworkClient, PaymentRequirements, PaymentPayload, Network } from '@t402/core/types';
2
+ import { C as ClientTronSigner } from '../../signer-BB-HLs-P.mjs';
3
+ import { t402Client, PaymentPolicy } from '@t402/core/client';
4
+
5
+ /**
6
+ * TRON Exact Payment Scheme - Client Implementation
7
+ *
8
+ * Creates payment payloads for TRC20 token transfers.
9
+ */
10
+
11
+ /**
12
+ * Configuration for ExactTronScheme
13
+ */
14
+ type ExactTronSchemeConfig = {
15
+ /** Fee limit for transactions in SUN (default: 100 TRX) */
16
+ feeLimit?: number;
17
+ };
18
+ /**
19
+ * Client-side implementation of the TRON exact payment scheme
20
+ *
21
+ * This scheme creates pre-signed TRC20 transfer transactions
22
+ * that can be verified and broadcast by the facilitator.
23
+ */
24
+ declare class ExactTronScheme implements SchemeNetworkClient {
25
+ readonly scheme = "exact";
26
+ private readonly signer;
27
+ private readonly config;
28
+ constructor(signer: ClientTronSigner, config?: ExactTronSchemeConfig);
29
+ /**
30
+ * Creates a payment payload for a TRC20 transfer
31
+ *
32
+ * @param t402Version - Protocol version (must be 2)
33
+ * @param requirements - Payment requirements from server
34
+ * @returns Payment payload with signed transaction
35
+ */
36
+ createPaymentPayload(t402Version: number, requirements: PaymentRequirements): Promise<Pick<PaymentPayload, "t402Version" | "payload">>;
37
+ }
38
+
39
+ /**
40
+ * TRON Client Scheme Registration
41
+ *
42
+ * Helper function to register TRON exact scheme with a t402 client.
43
+ */
44
+
45
+ /**
46
+ * Configuration options for registering TRON schemes to a t402Client
47
+ */
48
+ interface TronClientConfig {
49
+ /**
50
+ * The TRON signer to use for creating payment payloads
51
+ */
52
+ signer: ClientTronSigner;
53
+ /**
54
+ * Optional policies to apply to the client
55
+ */
56
+ policies?: PaymentPolicy[];
57
+ /**
58
+ * Optional specific networks to register
59
+ * If not provided, registers wildcard support (tron:*)
60
+ */
61
+ networks?: Network[];
62
+ /**
63
+ * Optional scheme configuration (fee limits, etc.)
64
+ */
65
+ schemeConfig?: ExactTronSchemeConfig;
66
+ }
67
+ /**
68
+ * Registers TRON exact payment schemes to a t402Client instance.
69
+ *
70
+ * This function registers:
71
+ * - V2: tron:* wildcard scheme with ExactTronScheme (or specific networks if provided)
72
+ *
73
+ * @param client - The t402Client instance to register schemes to
74
+ * @param config - Configuration for TRON client registration
75
+ * @returns The client instance for chaining
76
+ *
77
+ * @example
78
+ * ```typescript
79
+ * import { registerExactTronScheme } from "@t402/tron/exact/client";
80
+ * import { t402Client } from "@t402/core/client";
81
+ *
82
+ * const client = new t402Client();
83
+ * registerExactTronScheme(client, {
84
+ * signer: tronSigner,
85
+ * });
86
+ * ```
87
+ */
88
+ declare function registerExactTronScheme(client: t402Client, config: TronClientConfig): t402Client;
89
+
90
+ export { ExactTronScheme, type ExactTronSchemeConfig, type TronClientConfig, registerExactTronScheme };
@@ -0,0 +1,10 @@
1
+ import {
2
+ ExactTronScheme,
3
+ registerExactTronScheme
4
+ } from "../../chunk-A2E6FJU3.mjs";
5
+ import "../../chunk-L773HPM3.mjs";
6
+ export {
7
+ ExactTronScheme,
8
+ registerExactTronScheme
9
+ };
10
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,114 @@
1
+ import { SchemeNetworkFacilitator, PaymentPayload, PaymentRequirements, VerifyResponse, SettleResponse, Network } from '@t402/core/types';
2
+ import { F as FacilitatorTronSigner } from '../../signer-BB-HLs-P.mjs';
3
+ import { t402Facilitator } from '@t402/core/facilitator';
4
+
5
+ /**
6
+ * TRON Exact Payment Scheme - Facilitator Implementation
7
+ *
8
+ * Verifies and settles TRC20 token transfer payments.
9
+ */
10
+
11
+ /**
12
+ * Configuration for ExactTronScheme (facilitator)
13
+ */
14
+ type ExactTronSchemeConfig = {
15
+ /** Whether this facilitator can sponsor gas */
16
+ canSponsorGas?: boolean;
17
+ };
18
+ /**
19
+ * Facilitator-side implementation of the TRON exact payment scheme
20
+ *
21
+ * This scheme verifies and settles pre-signed TRC20 transfer transactions.
22
+ */
23
+ declare class ExactTronScheme implements SchemeNetworkFacilitator {
24
+ readonly scheme = "exact";
25
+ readonly caipFamily = "tron:*";
26
+ private readonly signer;
27
+ private readonly config;
28
+ constructor(signer: FacilitatorTronSigner, config?: ExactTronSchemeConfig);
29
+ /**
30
+ * Get extra data to include in payment requirements
31
+ */
32
+ getExtra(network: string): Record<string, unknown> | undefined;
33
+ /**
34
+ * Get facilitator addresses that can receive payments
35
+ */
36
+ getSigners(network: string): string[];
37
+ /**
38
+ * Verify a payment payload
39
+ *
40
+ * Performs comprehensive validation:
41
+ * 1. Scheme matching
42
+ * 2. Network matching
43
+ * 3. Payload structure validation
44
+ * 4. Transaction signature verification
45
+ * 5. Authorization expiry check
46
+ * 6. Balance verification
47
+ * 7. Amount sufficiency
48
+ * 8. Recipient matching
49
+ * 9. Contract address matching
50
+ * 10. Account activation check
51
+ */
52
+ verify(payload: PaymentPayload, requirements: PaymentRequirements): Promise<VerifyResponse>;
53
+ /**
54
+ * Settle a verified payment
55
+ *
56
+ * Broadcasts the transaction and waits for confirmation.
57
+ */
58
+ settle(payload: PaymentPayload, requirements: PaymentRequirements): Promise<SettleResponse>;
59
+ }
60
+
61
+ /**
62
+ * TRON Facilitator Scheme Registration
63
+ *
64
+ * Helper function to register TRON exact scheme with a t402 facilitator.
65
+ */
66
+
67
+ /**
68
+ * Configuration options for registering TRON schemes to a t402Facilitator
69
+ */
70
+ interface TronFacilitatorConfig {
71
+ /**
72
+ * The signer to use for verification and settlement
73
+ */
74
+ signer: FacilitatorTronSigner;
75
+ /**
76
+ * Optional specific networks to register
77
+ * If not provided, registers wildcard support (tron:*)
78
+ */
79
+ networks?: Network[];
80
+ /**
81
+ * Optional scheme configuration
82
+ */
83
+ schemeConfig?: ExactTronSchemeConfig;
84
+ }
85
+ /**
86
+ * Registers TRON exact payment schemes to a t402Facilitator instance.
87
+ *
88
+ * This function registers:
89
+ * - V2: tron:* wildcard scheme with ExactTronScheme (or specific networks if provided)
90
+ *
91
+ * @param facilitator - The t402Facilitator instance to register schemes to
92
+ * @param config - Configuration for TRON facilitator registration
93
+ * @returns The facilitator instance for chaining
94
+ *
95
+ * @example
96
+ * ```typescript
97
+ * import { registerExactTronScheme } from "@t402/tron/exact/facilitator";
98
+ * import { t402Facilitator } from "@t402/core/facilitator";
99
+ *
100
+ * const signer = new MyTronSigner(privateKey);
101
+ * const facilitator = new t402Facilitator();
102
+ * registerExactTronScheme(facilitator, { signer });
103
+ *
104
+ * // Or with specific networks
105
+ * registerExactTronScheme(facilitator, {
106
+ * signer,
107
+ * networks: ["tron:mainnet"],
108
+ * schemeConfig: { canSponsorGas: true }
109
+ * });
110
+ * ```
111
+ */
112
+ declare function registerExactTronScheme(facilitator: t402Facilitator, config: TronFacilitatorConfig): t402Facilitator;
113
+
114
+ export { ExactTronScheme, type ExactTronSchemeConfig, type TronFacilitatorConfig, registerExactTronScheme };
@@ -0,0 +1,10 @@
1
+ import {
2
+ ExactTronScheme,
3
+ registerExactTronScheme
4
+ } from "../../chunk-CH6GR2VO.mjs";
5
+ import "../../chunk-L773HPM3.mjs";
6
+ export {
7
+ ExactTronScheme,
8
+ registerExactTronScheme
9
+ };
10
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,123 @@
1
+ import { SchemeNetworkServer, MoneyParser, Price, Network, AssetAmount, PaymentRequirements } from '@t402/core/types';
2
+ import { t402ResourceServer } from '@t402/core/server';
3
+
4
+ /**
5
+ * TRON Exact Payment Scheme - Server Implementation
6
+ *
7
+ * Parses prices and enhances payment requirements for TRC20 payments.
8
+ */
9
+
10
+ /**
11
+ * Configuration for ExactTronScheme (server)
12
+ */
13
+ type ExactTronSchemeConfig = {
14
+ /** Preferred token symbol (default: highest priority) */
15
+ preferredToken?: string;
16
+ };
17
+ /**
18
+ * Server-side implementation of the TRON exact payment scheme
19
+ *
20
+ * This scheme parses prices and prepares payment requirements
21
+ * for TRC20 token transfers.
22
+ */
23
+ declare class ExactTronScheme implements SchemeNetworkServer {
24
+ readonly scheme = "exact";
25
+ private readonly config;
26
+ private readonly moneyParsers;
27
+ constructor(config?: ExactTronSchemeConfig);
28
+ /**
29
+ * Register a custom money parser
30
+ *
31
+ * Parsers are tried in registration order. Return null to pass to next parser.
32
+ *
33
+ * @param parser - Money parser function
34
+ * @returns This scheme for chaining
35
+ */
36
+ registerMoneyParser(parser: MoneyParser): ExactTronScheme;
37
+ /**
38
+ * Parse a price into an asset amount
39
+ *
40
+ * @param price - Price to parse (string, number, or AssetAmount)
41
+ * @param network - Target network
42
+ * @returns Parsed asset amount
43
+ */
44
+ parsePrice(price: Price, network: Network): Promise<AssetAmount>;
45
+ /**
46
+ * Enhance payment requirements with scheme-specific data
47
+ *
48
+ * @param requirements - Base payment requirements
49
+ * @param supportedKind - Supported payment kind
50
+ * @param extensionKeys - Extension keys to include
51
+ * @returns Enhanced payment requirements
52
+ */
53
+ enhancePaymentRequirements(requirements: PaymentRequirements, supportedKind: {
54
+ t402Version: number;
55
+ scheme: string;
56
+ network: Network;
57
+ extra?: Record<string, unknown>;
58
+ }, extensionKeys: string[]): Promise<PaymentRequirements>;
59
+ /**
60
+ * Parse money (string/number) to decimal number
61
+ */
62
+ private parseMoneyToDecimal;
63
+ /**
64
+ * Default money to asset conversion (USDT)
65
+ */
66
+ private defaultMoneyConversion;
67
+ /**
68
+ * Get default asset address for network
69
+ */
70
+ private getDefaultAsset;
71
+ /**
72
+ * Get token config by contract address
73
+ */
74
+ private getTokenByAddress;
75
+ }
76
+
77
+ /**
78
+ * TRON Server Scheme Registration
79
+ *
80
+ * Helper function to register TRON exact scheme with a t402 resource server.
81
+ */
82
+
83
+ /**
84
+ * Configuration options for registering TRON schemes to a t402ResourceServer
85
+ */
86
+ interface TronResourceServerConfig {
87
+ /**
88
+ * Optional specific networks to register
89
+ * If not provided, registers wildcard support (tron:*)
90
+ */
91
+ networks?: Network[];
92
+ /**
93
+ * Optional scheme configuration (preferred token, etc.)
94
+ */
95
+ schemeConfig?: ExactTronSchemeConfig;
96
+ }
97
+ /**
98
+ * Registers TRON exact payment schemes to a t402ResourceServer instance.
99
+ *
100
+ * This function registers:
101
+ * - V2: tron:* wildcard scheme with ExactTronScheme (or specific networks if provided)
102
+ *
103
+ * @param server - The t402ResourceServer instance to register schemes to
104
+ * @param config - Configuration for TRON resource server registration
105
+ * @returns The server instance for chaining
106
+ *
107
+ * @example
108
+ * ```typescript
109
+ * import { registerExactTronScheme } from "@t402/tron/exact/server";
110
+ * import { t402ResourceServer } from "@t402/core/server";
111
+ *
112
+ * const server = new t402ResourceServer(facilitatorClient);
113
+ * registerExactTronScheme(server, {});
114
+ *
115
+ * // Or with specific token preference
116
+ * registerExactTronScheme(server, {
117
+ * schemeConfig: { preferredToken: "USDT" }
118
+ * });
119
+ * ```
120
+ */
121
+ declare function registerExactTronScheme(server: t402ResourceServer, config?: TronResourceServerConfig): t402ResourceServer;
122
+
123
+ export { ExactTronScheme, type ExactTronSchemeConfig, type TronResourceServerConfig, registerExactTronScheme };