@sun-protocol/sun-sdk-runtime 0.1.0-beta.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.
@@ -0,0 +1,336 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/tronweb.ts
21
+ var tronweb_exports = {};
22
+ __export(tronweb_exports, {
23
+ createTronWebClient: () => createTronWebClient
24
+ });
25
+ module.exports = __toCommonJS(tronweb_exports);
26
+
27
+ // src/provider/tronweb.ts
28
+ var import_sun_sdk_core2 = require("@sun-protocol/sun-sdk-core");
29
+
30
+ // src/tx/normalize-result.ts
31
+ var import_sun_sdk_core = require("@sun-protocol/sun-sdk-core");
32
+ function readTxid(value) {
33
+ if (typeof value === "string" && value.length > 0) {
34
+ return value;
35
+ }
36
+ if (!value || typeof value !== "object") {
37
+ return null;
38
+ }
39
+ const record = value;
40
+ const direct = record.txid ?? record.txID ?? record.transactionId ?? record.txHash;
41
+ if (typeof direct === "string" && direct.length > 0) {
42
+ return direct;
43
+ }
44
+ const transaction = record.transaction;
45
+ if (transaction && typeof transaction === "object") {
46
+ return readTxid(transaction);
47
+ }
48
+ return null;
49
+ }
50
+ function hasBroadcastFailure(value) {
51
+ if (!value || typeof value !== "object") {
52
+ return false;
53
+ }
54
+ const record = value;
55
+ return record.result === false || typeof record.code === "string" || typeof record.Error === "string";
56
+ }
57
+ function normalizeTxResult(raw) {
58
+ if (hasBroadcastFailure(raw)) {
59
+ throw new import_sun_sdk_core.SDKError("SDK_RUNTIME_ERROR", "Transaction broadcast failed", { raw });
60
+ }
61
+ const txid = readTxid(raw);
62
+ if (!txid) {
63
+ throw new import_sun_sdk_core.SDKError("SDK_RUNTIME_ERROR", "Unable to find txid in transaction result", { raw });
64
+ }
65
+ return { txid, raw };
66
+ }
67
+
68
+ // src/provider/tronweb.ts
69
+ var DEFAULT_INCLUDED_RECEIPT_TIMEOUT_MS = 45e3;
70
+ var DEFAULT_SOLIDIFIED_RECEIPT_TIMEOUT_MS = 12e4;
71
+ var DEFAULT_RECEIPT_POLL_INTERVAL_MS = 3e3;
72
+ function methodName(functionSelector) {
73
+ return functionSelector.slice(0, functionSelector.indexOf("("));
74
+ }
75
+ function contractMethod(contract, functionSelector) {
76
+ if (typeof contract !== "object" || contract === null) {
77
+ return void 0;
78
+ }
79
+ const record = contract;
80
+ const methods = typeof record.methods === "object" && record.methods !== null ? record.methods : void 0;
81
+ const method = methods?.[functionSelector] ?? record[functionSelector] ?? record[methodName(functionSelector)];
82
+ return typeof method === "function" ? method : void 0;
83
+ }
84
+ function parameterValues(parameters) {
85
+ return parameters?.map((parameter) => parameter.value) ?? [];
86
+ }
87
+ function cloneAbiV2Value(value) {
88
+ if (Array.isArray(value)) {
89
+ return value.map(cloneAbiV2Value);
90
+ }
91
+ if (isPlainObject(value)) {
92
+ return Object.fromEntries(Object.entries(value).map(([key, nestedValue]) => [key, cloneAbiV2Value(nestedValue)]));
93
+ }
94
+ return value;
95
+ }
96
+ function isPlainObject(value) {
97
+ if (typeof value !== "object" || value === null) {
98
+ return false;
99
+ }
100
+ const prototype = Object.getPrototypeOf(value);
101
+ return prototype === Object.prototype || prototype === null;
102
+ }
103
+ function abiV2Options(call) {
104
+ if (!isAbiV2Function(call.abiFunction) || !call.abiFunction.inputs?.some((input) => input.components !== void 0)) {
105
+ return void 0;
106
+ }
107
+ return {
108
+ funcABIV2: call.abiFunction,
109
+ parametersV2: parameterValues(call.parameters).map(cloneAbiV2Value)
110
+ };
111
+ }
112
+ function isAbiV2Function(value) {
113
+ return typeof value === "object" && value !== null && (!("inputs" in value) || Array.isArray(value.inputs));
114
+ }
115
+ function isContractAbiFunction(value) {
116
+ return isAbiV2Function(value) && value.type === "function" && typeof value.name === "string";
117
+ }
118
+ function tronWebCallValue(value) {
119
+ if (value < 0n || value > BigInt(Number.MAX_SAFE_INTEGER)) {
120
+ throw new import_sun_sdk_core2.SDKError("SDK_INVALID_ARGUMENT", "callValue exceeds TronWeb safe integer range", {
121
+ callValue: value.toString(),
122
+ maxSafeInteger: Number.MAX_SAFE_INTEGER
123
+ });
124
+ }
125
+ return Number(value);
126
+ }
127
+ function contractCallOptions(call) {
128
+ return {
129
+ ...call.feeLimit !== void 0 ? { feeLimit: call.feeLimit } : {},
130
+ ...call.callValue !== void 0 ? { callValue: tronWebCallValue(call.callValue) } : {},
131
+ ...call.tokenId !== void 0 ? { tokenId: call.tokenId } : {},
132
+ ...call.tokenValue !== void 0 ? { tokenValue: call.tokenValue } : {},
133
+ ...call.permissionId !== void 0 ? { permissionId: call.permissionId } : {},
134
+ ...call.rawParameter !== void 0 ? { rawParameter: call.rawParameter } : {}
135
+ };
136
+ }
137
+ function unwrapBuiltTransaction(raw) {
138
+ if (raw && typeof raw === "object" && "transaction" in raw) {
139
+ return raw.transaction;
140
+ }
141
+ return raw;
142
+ }
143
+ async function callContractMethod(method, call) {
144
+ const result = method(...parameterValues(call.parameters));
145
+ if (result && typeof result === "object" && "call" in result && typeof result.call === "function") {
146
+ return result.call({ from: call.from ?? import_sun_sdk_core2.TRON_ZERO_ADDRESS });
147
+ }
148
+ return result;
149
+ }
150
+ async function readWithContractAbi(tronWeb, call) {
151
+ let contract;
152
+ try {
153
+ contract = await tronWeb.contract().at(call.target);
154
+ } catch {
155
+ return { found: false };
156
+ }
157
+ const method = contractMethod(contract, call.functionSelector);
158
+ if (!method) {
159
+ return { found: false };
160
+ }
161
+ return { found: true, value: await callContractMethod(method, call) };
162
+ }
163
+ async function readWithProvidedAbi(tronWeb, call) {
164
+ if (!isContractAbiFunction(call.abiFunction)) {
165
+ throw new import_sun_sdk_core2.SDKError("SDK_INVALID_ARGUMENT", `Invalid ABI function for ${call.functionSelector}`, { call });
166
+ }
167
+ const contract = await tronWeb.contract([call.abiFunction], call.target);
168
+ const method = contractMethod(contract, call.functionSelector);
169
+ if (!method) {
170
+ throw new import_sun_sdk_core2.SDKError("SDK_RUNTIME_ERROR", `TronWeb ABI method not found: ${call.functionSelector}`, { call });
171
+ }
172
+ return callContractMethod(method, call);
173
+ }
174
+ function constantResults(result, call) {
175
+ const values = result?.constant_result;
176
+ if (!Array.isArray(values) || !values.every((value) => typeof value === "string")) {
177
+ throw new import_sun_sdk_core2.SDKError("SDK_CONTRACT_ERROR", `Invalid raw constant result for ${call.functionSelector}`, { call, result });
178
+ }
179
+ return values;
180
+ }
181
+ function constantResultHex(result, call) {
182
+ const raw = result?.constant_result?.[0];
183
+ if (typeof raw !== "string" || !/^(0x)?[0-9a-fA-F]*$/.test(raw)) {
184
+ throw new import_sun_sdk_core2.SDKError("SDK_CONTRACT_ERROR", `Invalid constant read result for ${call.functionSelector}`, { call, result });
185
+ }
186
+ return raw.startsWith("0x") ? raw.slice(2) : raw;
187
+ }
188
+ function decodeConstantResult(tronWeb, result, call) {
189
+ const outputs = call.outputs ?? [];
190
+ const hex = constantResultHex(result, call);
191
+ const types = outputs.map((output) => {
192
+ if (!/^(?:u?int(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?|bool|address|bytes32)$/.test(output.type)) {
193
+ throw new import_sun_sdk_core2.SDKError("SDK_RUNTIME_ERROR", `Unsupported constant read output type: ${output.type}`, { output });
194
+ }
195
+ return output.type;
196
+ });
197
+ try {
198
+ const decoded = tronWeb.utils.abi.decodeParams([], types, `0x${hex}`);
199
+ const values = outputs.map((output, index) => {
200
+ const value = decoded[index];
201
+ if (/^u?int/.test(output.type)) return String(value);
202
+ if (output.type === "address") return `0x${String(value).slice(2)}`;
203
+ return value;
204
+ });
205
+ return values.length === 1 ? values[0] : values;
206
+ } catch (cause) {
207
+ throw new import_sun_sdk_core2.SDKError("SDK_CONTRACT_ERROR", `Invalid constant read result for ${call.functionSelector}`, {
208
+ call,
209
+ result,
210
+ cause
211
+ });
212
+ }
213
+ }
214
+ async function readWithConstantSelector(tronWeb, call) {
215
+ const result = await readRawConstant(tronWeb, call);
216
+ return decodeConstantResult(tronWeb, result, call);
217
+ }
218
+ async function readRawConstant(tronWeb, call) {
219
+ const abiV2 = abiV2Options(call);
220
+ const result = await tronWeb.transactionBuilder.triggerConstantContract(
221
+ call.target,
222
+ call.functionSelector,
223
+ {
224
+ ...call.rawParameter !== void 0 ? { rawParameter: call.rawParameter } : {},
225
+ ...abiV2
226
+ },
227
+ abiV2 ? [] : call.parameters ?? [],
228
+ call.from ?? import_sun_sdk_core2.TRON_ZERO_ADDRESS
229
+ );
230
+ return result;
231
+ }
232
+ function transactionReceiptResult(value) {
233
+ if (typeof value !== "object" || value === null) return void 0;
234
+ const record = value;
235
+ const receipt = typeof record.receipt === "object" && record.receipt !== null ? record.receipt : void 0;
236
+ if (typeof receipt?.result === "string") return receipt.result;
237
+ return typeof record.result === "string" ? record.result : void 0;
238
+ }
239
+ function receiptOption(value, fallback, name, allowZero) {
240
+ const resolved = value ?? fallback;
241
+ if (!Number.isFinite(resolved) || !Number.isInteger(resolved) || resolved < (allowZero ? 0 : 1)) {
242
+ throw new import_sun_sdk_core2.SDKError("SDK_INVALID_ARGUMENT", `${name} must be ${allowZero ? "a non-negative" : "a positive"} integer`, {
243
+ [name]: value
244
+ });
245
+ }
246
+ return resolved;
247
+ }
248
+ function receiptFinality(value) {
249
+ if (value === void 0) return "solidified";
250
+ if (value === "included" || value === "solidified") return value;
251
+ throw new import_sun_sdk_core2.SDKError("SDK_INVALID_ARGUMENT", "Unsupported transaction receipt finality", {
252
+ finality: value
253
+ });
254
+ }
255
+ function delay(ms) {
256
+ return new Promise((resolve) => setTimeout(resolve, ms));
257
+ }
258
+ function createTronWebClient(input) {
259
+ return {
260
+ kind: "tronweb",
261
+ network: input.network,
262
+ async getNativeBalance(owner) {
263
+ return String(await input.tronWeb.trx.getBalance(owner));
264
+ },
265
+ async readContract(call) {
266
+ if (call.abiFunction !== void 0) {
267
+ return readWithProvidedAbi(input.tronWeb, call);
268
+ }
269
+ if (call.rawResult) {
270
+ return readRawConstant(input.tronWeb, call);
271
+ }
272
+ if (call.outputs?.length) {
273
+ return readWithConstantSelector(input.tronWeb, call);
274
+ }
275
+ const chainAbiResult = await readWithContractAbi(input.tronWeb, call);
276
+ if (chainAbiResult.found) {
277
+ return chainAbiResult.value;
278
+ }
279
+ return constantResults(await readRawConstant(input.tronWeb, call), call);
280
+ },
281
+ async buildTransaction(call, options = {}) {
282
+ const abiV2 = abiV2Options(call);
283
+ const raw = await input.tronWeb.transactionBuilder.triggerSmartContract(
284
+ call.target,
285
+ call.functionSelector,
286
+ { ...contractCallOptions(call), ...abiV2 },
287
+ abiV2 ? [] : call.parameters ?? [],
288
+ options.ownerAddress
289
+ );
290
+ return unwrapBuiltTransaction(raw);
291
+ },
292
+ async broadcastTransaction(tx) {
293
+ return normalizeTxResult(await input.tronWeb.trx.sendRawTransaction(tx));
294
+ },
295
+ async waitForTransactionReceipt(txid, options = {}) {
296
+ const finality = receiptFinality(options.finality);
297
+ const defaultTimeoutMs = finality === "included" ? DEFAULT_INCLUDED_RECEIPT_TIMEOUT_MS : DEFAULT_SOLIDIFIED_RECEIPT_TIMEOUT_MS;
298
+ const timeoutMs = receiptOption(options.timeoutMs, defaultTimeoutMs, "timeoutMs", true);
299
+ const pollIntervalMs = receiptOption(
300
+ options.pollIntervalMs,
301
+ DEFAULT_RECEIPT_POLL_INTERVAL_MS,
302
+ "pollIntervalMs",
303
+ false
304
+ );
305
+ const deadline = Date.now() + timeoutMs;
306
+ let lastError;
307
+ while (true) {
308
+ try {
309
+ const raw = finality === "included" ? await input.tronWeb.trx.getUnconfirmedTransactionInfo(txid) : await input.tronWeb.trx.getTransactionInfo(txid);
310
+ const result = transactionReceiptResult(raw);
311
+ if (result !== void 0) {
312
+ return { txid, result, success: result === "SUCCESS", raw };
313
+ }
314
+ lastError = void 0;
315
+ } catch (error) {
316
+ lastError = error;
317
+ }
318
+ const remainingMs = deadline - Date.now();
319
+ if (remainingMs <= 0) {
320
+ throw new import_sun_sdk_core2.SDKError("SDK_RUNTIME_ERROR", "Timed out waiting for transaction receipt", {
321
+ txid,
322
+ finality,
323
+ timeoutMs,
324
+ ...lastError !== void 0 ? { cause: lastError } : {}
325
+ });
326
+ }
327
+ await delay(Math.min(pollIntervalMs, remainingMs));
328
+ }
329
+ }
330
+ };
331
+ }
332
+ // Annotate the CommonJS export names for ESM import in node:
333
+ 0 && (module.exports = {
334
+ createTronWebClient
335
+ });
336
+ //# sourceMappingURL=tronweb.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tronweb.ts","../src/provider/tronweb.ts","../src/tx/normalize-result.ts"],"sourcesContent":["export type { TronClient } from './types.js'\nexport {\n createTronWebClient,\n type TronWebClientInput,\n} from './provider/tronweb.js'\n","import {\n SDKError,\n TRON_ZERO_ADDRESS,\n type ContractParameter,\n type Network,\n type TransactionReceiptFinality,\n} from '@sun-protocol/sun-sdk-core'\nimport type { TronWeb } from 'tronweb'\nimport { normalizeTxResult } from '../tx/normalize-result.js'\nimport type {\n BuildTransactionOptions,\n ContractCall,\n ContractRead,\n SignedTronTransaction,\n TransactionReceipt,\n TronClient,\n UnsignedTronTransaction,\n WaitForTransactionReceiptOptions,\n} from '../types.js'\n\nconst DEFAULT_INCLUDED_RECEIPT_TIMEOUT_MS = 45_000\nconst DEFAULT_SOLIDIFIED_RECEIPT_TIMEOUT_MS = 120_000\nconst DEFAULT_RECEIPT_POLL_INTERVAL_MS = 3_000\n\ntype TriggerSmartContractParameters = Parameters<TronWeb['transactionBuilder']['triggerSmartContract']>\ntype TriggerSmartContractOptions = NonNullable<TriggerSmartContractParameters[2]>\ntype TriggerSmartContractArgs = NonNullable<TriggerSmartContractParameters[3]>\ntype TriggerConstantContractParameters = Parameters<TronWeb['transactionBuilder']['triggerConstantContract']>\ntype TriggerConstantContractArgs = NonNullable<TriggerConstantContractParameters[3]>\n\ninterface AbiV2Function {\n readonly type?: string\n readonly name?: string\n readonly inputs?: readonly AbiV2Input[]\n}\n\ninterface AbiV2Input {\n readonly components?: readonly unknown[]\n}\n\ntype AbiV2Options = {\n readonly funcABIV2: AbiV2Function\n readonly parametersV2: readonly unknown[]\n}\n\nexport interface TronWebClientInput {\n readonly network: Network\n readonly tronWeb: TronWeb\n}\n\nfunction methodName(functionSelector: string): string {\n return functionSelector.slice(0, functionSelector.indexOf('('))\n}\n\ntype ContractMethod = (...args: unknown[]) => unknown\n\nfunction contractMethod(contract: unknown, functionSelector: string): ContractMethod | undefined {\n if (typeof contract !== 'object' || contract === null) {\n return undefined\n }\n const record = contract as Record<string, unknown>\n const methods = typeof record.methods === 'object' && record.methods !== null\n ? record.methods as Record<string, unknown>\n : undefined\n const method = methods?.[functionSelector]\n ?? record[functionSelector]\n ?? record[methodName(functionSelector)]\n return typeof method === 'function' ? method as ContractMethod : undefined\n}\n\nfunction parameterValues(parameters: readonly ContractParameter[] | undefined): readonly unknown[] {\n return parameters?.map((parameter) => parameter.value) ?? []\n}\n\nfunction cloneAbiV2Value(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(cloneAbiV2Value)\n }\n if (isPlainObject(value)) {\n return Object.fromEntries(Object.entries(value).map(([key, nestedValue]) => [key, cloneAbiV2Value(nestedValue)]))\n }\n return value\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (typeof value !== 'object' || value === null) {\n return false\n }\n const prototype = Object.getPrototypeOf(value)\n return prototype === Object.prototype || prototype === null\n}\n\nfunction abiV2Options(call: ContractRead): AbiV2Options | undefined {\n if (!isAbiV2Function(call.abiFunction) || !call.abiFunction.inputs?.some((input) => input.components !== undefined)) {\n return undefined\n }\n return {\n funcABIV2: call.abiFunction,\n parametersV2: parameterValues(call.parameters).map(cloneAbiV2Value),\n }\n}\n\nfunction isAbiV2Function(value: unknown): value is AbiV2Function {\n return typeof value === 'object' && value !== null\n && (!('inputs' in value) || Array.isArray((value as AbiV2Function).inputs))\n}\n\nfunction isContractAbiFunction(value: unknown): value is AbiV2Function {\n return isAbiV2Function(value)\n && value.type === 'function'\n && typeof value.name === 'string'\n}\n\nfunction tronWebCallValue(value: bigint): number {\n if (value < 0n || value > BigInt(Number.MAX_SAFE_INTEGER)) {\n throw new SDKError('SDK_INVALID_ARGUMENT', 'callValue exceeds TronWeb safe integer range', {\n callValue: value.toString(),\n maxSafeInteger: Number.MAX_SAFE_INTEGER,\n })\n }\n return Number(value)\n}\n\nfunction contractCallOptions(call: ContractCall): TriggerSmartContractOptions {\n return {\n ...(call.feeLimit !== undefined ? { feeLimit: call.feeLimit } : {}),\n ...(call.callValue !== undefined ? { callValue: tronWebCallValue(call.callValue) } : {}),\n ...(call.tokenId !== undefined ? { tokenId: call.tokenId } : {}),\n ...(call.tokenValue !== undefined ? { tokenValue: call.tokenValue } : {}),\n ...(call.permissionId !== undefined ? { permissionId: call.permissionId } : {}),\n ...(call.rawParameter !== undefined ? { rawParameter: call.rawParameter } : {}),\n }\n}\n\nfunction unwrapBuiltTransaction(raw: unknown): UnsignedTronTransaction {\n if (raw && typeof raw === 'object' && 'transaction' in raw) {\n return (raw as { transaction: UnsignedTronTransaction }).transaction\n }\n return raw as UnsignedTronTransaction\n}\n\nasync function callContractMethod<T>(method: ContractMethod, call: ContractRead): Promise<T> {\n const result = method(...parameterValues(call.parameters))\n if (result && typeof result === 'object' && 'call' in result && typeof result.call === 'function') {\n return result.call({ from: call.from ?? TRON_ZERO_ADDRESS }) as Promise<T>\n }\n return result as T\n}\n\nasync function readWithContractAbi<T>(tronWeb: TronWeb, call: ContractRead): Promise<{ found: true; value: T } | { found: false }> {\n let contract: unknown\n try {\n contract = await tronWeb.contract().at(call.target)\n } catch {\n return { found: false }\n }\n const method = contractMethod(contract, call.functionSelector)\n if (!method) {\n return { found: false }\n }\n return { found: true, value: await callContractMethod<T>(method, call) }\n}\n\nasync function readWithProvidedAbi<T>(tronWeb: TronWeb, call: ContractRead): Promise<T> {\n if (!isContractAbiFunction(call.abiFunction)) {\n throw new SDKError('SDK_INVALID_ARGUMENT', `Invalid ABI function for ${call.functionSelector}`, { call })\n }\n const contract = await tronWeb.contract([call.abiFunction] as never, call.target)\n const method = contractMethod(contract, call.functionSelector)\n if (!method) {\n throw new SDKError('SDK_RUNTIME_ERROR', `TronWeb ABI method not found: ${call.functionSelector}`, { call })\n }\n return callContractMethod<T>(method, call)\n}\n\nfunction constantResults(result: unknown, call: ContractRead): readonly string[] {\n const values = (result as { readonly constant_result?: readonly unknown[] } | null)?.constant_result\n if (!Array.isArray(values) || !values.every((value) => typeof value === 'string')) {\n throw new SDKError('SDK_CONTRACT_ERROR', `Invalid raw constant result for ${call.functionSelector}`, { call, result })\n }\n return values as readonly string[]\n}\n\nfunction constantResultHex(result: unknown, call: ContractRead): string {\n const raw = (result as { readonly constant_result?: readonly unknown[] } | null)?.constant_result?.[0]\n if (typeof raw !== 'string' || !/^(0x)?[0-9a-fA-F]*$/.test(raw)) {\n throw new SDKError('SDK_CONTRACT_ERROR', `Invalid constant read result for ${call.functionSelector}`, { call, result })\n }\n return raw.startsWith('0x') ? raw.slice(2) : raw\n}\n\nfunction decodeConstantResult(tronWeb: TronWeb, result: unknown, call: ContractRead): unknown {\n const outputs = call.outputs ?? []\n const hex = constantResultHex(result, call)\n const types = outputs.map((output) => {\n // Keep the selector API's existing supported types; TronWeb owns ABI decoding.\n if (!/^(?:u?int(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?|bool|address|bytes32)$/.test(output.type)) {\n throw new SDKError('SDK_RUNTIME_ERROR', `Unsupported constant read output type: ${output.type}`, { output })\n }\n return output.type\n })\n\n try {\n const decoded = tronWeb.utils.abi.decodeParams([], types, `0x${hex}`) as unknown[]\n const values = outputs.map((output, index) => {\n const value = decoded[index]\n // Preserve SDK decimal strings and 20-byte hex addresses.\n if (/^u?int/.test(output.type)) return String(value)\n if (output.type === 'address') return `0x${String(value).slice(2)}`\n return value\n })\n return values.length === 1 ? values[0] : values\n } catch (cause) {\n throw new SDKError('SDK_CONTRACT_ERROR', `Invalid constant read result for ${call.functionSelector}`, {\n call, result, cause,\n })\n }\n}\n\nasync function readWithConstantSelector<T>(tronWeb: TronWeb, call: ContractRead): Promise<T> {\n const result = await readRawConstant(tronWeb, call)\n return decodeConstantResult(tronWeb, result, call) as T\n}\n\nasync function readRawConstant(tronWeb: TronWeb, call: ContractRead): Promise<unknown> {\n const abiV2 = abiV2Options(call)\n const result = await tronWeb.transactionBuilder.triggerConstantContract(\n call.target,\n call.functionSelector,\n {\n ...(call.rawParameter !== undefined ? { rawParameter: call.rawParameter } : {}),\n ...abiV2,\n } as TriggerConstantContractParameters[2],\n (abiV2 ? [] : call.parameters ?? []) as TriggerConstantContractArgs,\n call.from ?? TRON_ZERO_ADDRESS,\n )\n return result\n}\n\nfunction transactionReceiptResult(value: unknown): string | undefined {\n if (typeof value !== 'object' || value === null) return undefined\n const record = value as Record<string, unknown>\n const receipt = typeof record.receipt === 'object' && record.receipt !== null\n ? record.receipt as Record<string, unknown>\n : undefined\n if (typeof receipt?.result === 'string') return receipt.result\n return typeof record.result === 'string' ? record.result : undefined\n}\n\nfunction receiptOption(value: number | undefined, fallback: number, name: string, allowZero: boolean): number {\n const resolved = value ?? fallback\n if (!Number.isFinite(resolved) || !Number.isInteger(resolved) || resolved < (allowZero ? 0 : 1)) {\n throw new SDKError('SDK_INVALID_ARGUMENT', `${name} must be ${allowZero ? 'a non-negative' : 'a positive'} integer`, {\n [name]: value,\n })\n }\n return resolved\n}\n\nfunction receiptFinality(value: unknown): TransactionReceiptFinality {\n if (value === undefined) return 'solidified'\n if (value === 'included' || value === 'solidified') return value\n throw new SDKError('SDK_INVALID_ARGUMENT', 'Unsupported transaction receipt finality', {\n finality: value,\n })\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nexport function createTronWebClient(input: TronWebClientInput): TronClient {\n return {\n kind: 'tronweb',\n network: input.network,\n async getNativeBalance(owner) {\n return String(await input.tronWeb.trx.getBalance(owner))\n },\n async readContract<T = unknown>(call: ContractRead): Promise<T> {\n if (call.abiFunction !== undefined) {\n return readWithProvidedAbi<T>(input.tronWeb, call)\n }\n if (call.rawResult) {\n return readRawConstant(input.tronWeb, call) as Promise<T>\n }\n if (call.outputs?.length) {\n return readWithConstantSelector<T>(input.tronWeb, call)\n }\n const chainAbiResult = await readWithContractAbi<T>(input.tronWeb, call)\n if (chainAbiResult.found) {\n return chainAbiResult.value\n }\n return constantResults(await readRawConstant(input.tronWeb, call), call) as T\n },\n async buildTransaction(call: ContractCall, options: BuildTransactionOptions = {}): Promise<UnsignedTronTransaction> {\n const abiV2 = abiV2Options(call)\n const raw = await input.tronWeb.transactionBuilder.triggerSmartContract(\n call.target,\n call.functionSelector,\n { ...contractCallOptions(call), ...abiV2 } as TriggerSmartContractOptions,\n (abiV2 ? [] : call.parameters ?? []) as TriggerSmartContractArgs,\n options.ownerAddress,\n )\n return unwrapBuiltTransaction(raw)\n },\n async broadcastTransaction(tx: SignedTronTransaction) {\n return normalizeTxResult(await input.tronWeb.trx.sendRawTransaction(tx as Parameters<TronWeb['trx']['sendRawTransaction']>[0]))\n },\n async waitForTransactionReceipt(\n txid: string,\n options: WaitForTransactionReceiptOptions = {},\n ): Promise<TransactionReceipt> {\n const finality = receiptFinality(options.finality)\n const defaultTimeoutMs = finality === 'included'\n ? DEFAULT_INCLUDED_RECEIPT_TIMEOUT_MS\n : DEFAULT_SOLIDIFIED_RECEIPT_TIMEOUT_MS\n const timeoutMs = receiptOption(options.timeoutMs, defaultTimeoutMs, 'timeoutMs', true)\n const pollIntervalMs = receiptOption(\n options.pollIntervalMs,\n DEFAULT_RECEIPT_POLL_INTERVAL_MS,\n 'pollIntervalMs',\n false,\n )\n const deadline = Date.now() + timeoutMs\n let lastError: unknown\n\n while (true) {\n try {\n // FullNode exposes the latest included/executed receipt. SolidityNode\n // exposes only solidified (irreversible) receipts and therefore lags.\n const raw = finality === 'included'\n ? await input.tronWeb.trx.getUnconfirmedTransactionInfo(txid)\n : await input.tronWeb.trx.getTransactionInfo(txid)\n const result = transactionReceiptResult(raw)\n if (result !== undefined) {\n return { txid, result, success: result === 'SUCCESS', raw }\n }\n lastError = undefined\n } catch (error) {\n lastError = error\n }\n\n const remainingMs = deadline - Date.now()\n if (remainingMs <= 0) {\n throw new SDKError('SDK_RUNTIME_ERROR', 'Timed out waiting for transaction receipt', {\n txid,\n finality,\n timeoutMs,\n ...(lastError !== undefined ? { cause: lastError } : {}),\n })\n }\n await delay(Math.min(pollIntervalMs, remainingMs))\n }\n },\n }\n}\n","import { SDKError } from '@sun-protocol/sun-sdk-core'\nimport type { TxResult } from '../types.js'\n\nfunction readTxid(value: unknown): string | null {\n if (typeof value === 'string' && value.length > 0) {\n return value\n }\n\n if (!value || typeof value !== 'object') {\n return null\n }\n\n const record = value as Record<string, unknown>\n const direct = record.txid ?? record.txID ?? record.transactionId ?? record.txHash\n if (typeof direct === 'string' && direct.length > 0) {\n return direct\n }\n\n const transaction = record.transaction\n if (transaction && typeof transaction === 'object') {\n return readTxid(transaction)\n }\n\n return null\n}\n\nfunction hasBroadcastFailure(value: unknown): boolean {\n if (!value || typeof value !== 'object') {\n return false\n }\n\n const record = value as Record<string, unknown>\n return record.result === false || typeof record.code === 'string' || typeof record.Error === 'string'\n}\n\nexport function normalizeTxResult(raw: unknown): TxResult {\n if (hasBroadcastFailure(raw)) {\n throw new SDKError('SDK_RUNTIME_ERROR', 'Transaction broadcast failed', { raw })\n }\n\n const txid = readTxid(raw)\n if (!txid) {\n throw new SDKError('SDK_RUNTIME_ERROR', 'Unable to find txid in transaction result', { raw })\n }\n return { txid, raw }\n}\n"],"mappings":"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","names":["import_sun_sdk_core"]}
@@ -0,0 +1,12 @@
1
+ import { d as TronClient } from './types-CZnHFnQK.cjs';
2
+ import { Network } from '@sun-protocol/sun-sdk-core';
3
+ import { TronWeb } from 'tronweb';
4
+ import '@sun-protocol/sun-sdk-chains';
5
+
6
+ interface TronWebClientInput {
7
+ readonly network: Network;
8
+ readonly tronWeb: TronWeb;
9
+ }
10
+ declare function createTronWebClient(input: TronWebClientInput): TronClient;
11
+
12
+ export { TronClient, type TronWebClientInput, createTronWebClient };
@@ -0,0 +1,12 @@
1
+ import { d as TronClient } from './types-CZnHFnQK.js';
2
+ import { Network } from '@sun-protocol/sun-sdk-core';
3
+ import { TronWeb } from 'tronweb';
4
+ import '@sun-protocol/sun-sdk-chains';
5
+
6
+ interface TronWebClientInput {
7
+ readonly network: Network;
8
+ readonly tronWeb: TronWeb;
9
+ }
10
+ declare function createTronWebClient(input: TronWebClientInput): TronClient;
11
+
12
+ export { TronClient, type TronWebClientInput, createTronWebClient };
@@ -0,0 +1,8 @@
1
+ import {
2
+ createTronWebClient
3
+ } from "./chunk-AJSGBCSK.js";
4
+ import "./chunk-VYEUIAUC.js";
5
+ export {
6
+ createTronWebClient
7
+ };
8
+ //# sourceMappingURL=tronweb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,212 @@
1
+ import { ChainConfig } from '@sun-protocol/sun-sdk-chains';
2
+ import { TronAddress, ContractParameter, ContractCallAction, TransactionIntent, Network, TransactionReceiptFinality } from '@sun-protocol/sun-sdk-core';
3
+
4
+ interface AbiParameter {
5
+ readonly name?: string;
6
+ readonly type: string;
7
+ readonly components?: readonly AbiParameter[];
8
+ readonly [key: string]: unknown;
9
+ }
10
+ interface AbiItem {
11
+ readonly type: string;
12
+ readonly name?: string;
13
+ readonly inputs?: readonly AbiParameter[];
14
+ readonly outputs?: readonly AbiParameter[];
15
+ readonly [key: string]: unknown;
16
+ }
17
+ interface AbiFunction extends AbiItem {
18
+ readonly type: 'function';
19
+ readonly name: string;
20
+ }
21
+ interface UnsignedTronTransaction {
22
+ readonly raw_data?: unknown;
23
+ readonly raw_data_hex?: string;
24
+ readonly txID?: string;
25
+ }
26
+ interface SignedTronTransaction extends UnsignedTronTransaction {
27
+ readonly signature?: readonly string[];
28
+ }
29
+ interface TxResult {
30
+ readonly txid: string;
31
+ readonly raw: unknown;
32
+ }
33
+ interface TransactionReceipt {
34
+ readonly txid: string;
35
+ readonly result: string;
36
+ readonly success: boolean;
37
+ readonly raw: unknown;
38
+ }
39
+ interface WaitForTransactionReceiptOptions {
40
+ /**
41
+ * `included` queries the FullNode latest head and returns after the transaction
42
+ * has been included and executed, but before it is irreversible.
43
+ *
44
+ * `solidified` queries the SolidityNode and returns only after the transaction
45
+ * is part of the irreversible solidified state. It is safer but slower.
46
+ *
47
+ * Defaults to `solidified` for direct callers. Protocol execution always
48
+ * passes the action's explicit `waitForReceipt` policy.
49
+ */
50
+ readonly finality?: TransactionReceiptFinality;
51
+ readonly timeoutMs?: number;
52
+ readonly pollIntervalMs?: number;
53
+ }
54
+ interface TypedDataPayload {
55
+ readonly primaryType: string;
56
+ readonly domain: unknown;
57
+ readonly types: unknown;
58
+ readonly message: unknown;
59
+ }
60
+ interface WalletCapabilities {
61
+ readonly signTransaction: boolean;
62
+ readonly signAndSendTransaction: boolean;
63
+ readonly signTypedData: boolean;
64
+ readonly userInteractive: boolean;
65
+ }
66
+ type WalletSendStrategy = 'sign-then-broadcast' | 'sign-and-send';
67
+ interface WalletAdapter {
68
+ readonly kind: 'privateKey' | 'injected' | 'tronWalletAdapter' | 'custom' | 'mock';
69
+ readonly capabilities: WalletCapabilities;
70
+ readonly sendStrategy?: WalletSendStrategy;
71
+ getAddress(): Promise<TronAddress | string>;
72
+ signTransaction?(tx: UnsignedTronTransaction): Promise<SignedTronTransaction>;
73
+ signAndSendTransaction?(tx: UnsignedTronTransaction): Promise<TxResult | unknown>;
74
+ signTypedData?(payload: TypedDataPayload): Promise<string>;
75
+ signMessage?(message: string): Promise<string>;
76
+ }
77
+ type GetWallet = () => WalletAdapter | undefined | Promise<WalletAdapter | undefined>;
78
+ interface ContractRead {
79
+ readonly target: TronAddress;
80
+ readonly functionSelector: string;
81
+ readonly parameters?: readonly ContractParameter[];
82
+ readonly abiFunction?: unknown;
83
+ readonly outputs?: readonly ContractOutputParameter[];
84
+ readonly from?: TronAddress;
85
+ readonly rawParameter?: string;
86
+ /** Return the raw triggerConstantContract response without ABI lookup or decoding. */
87
+ readonly rawResult?: boolean;
88
+ }
89
+ interface ContractOutputParameter {
90
+ readonly type: string;
91
+ readonly name?: string;
92
+ }
93
+ interface ContractCall extends ContractRead {
94
+ readonly callValue?: ContractCallAction['callValue'];
95
+ readonly feeLimit?: ContractCallAction['feeLimit'];
96
+ readonly tokenId?: string;
97
+ readonly tokenValue?: number;
98
+ readonly permissionId?: number;
99
+ }
100
+ interface ContractAddressInput {
101
+ readonly address: TronAddress | string;
102
+ }
103
+ interface ContractAbiInput extends ContractAddressInput {
104
+ readonly abi: readonly AbiItem[];
105
+ readonly functionName: string;
106
+ readonly args?: readonly unknown[];
107
+ readonly functionSelector?: never;
108
+ readonly parameters?: never;
109
+ readonly rawParameter?: never;
110
+ }
111
+ type SelectorParameters = {
112
+ readonly parameters?: readonly ContractParameter[];
113
+ readonly rawParameter?: never;
114
+ } | {
115
+ readonly parameters?: never;
116
+ readonly rawParameter: string;
117
+ };
118
+ type ContractSelectorInput = ContractAddressInput & SelectorParameters & {
119
+ readonly functionSelector: string;
120
+ readonly abi?: never;
121
+ readonly functionName?: never;
122
+ readonly args?: never;
123
+ };
124
+ type ContractReadInput = (ContractAbiInput & {
125
+ readonly from?: TronAddress | string;
126
+ readonly outputs?: never;
127
+ }) | (ContractSelectorInput & {
128
+ readonly from?: TronAddress | string;
129
+ /** Decode supported static outputs. Omit to receive the raw provider response. */
130
+ readonly outputs?: readonly ContractOutputParameter[];
131
+ });
132
+ interface ContractWriteFields {
133
+ readonly callValue?: bigint;
134
+ readonly feeLimit?: number;
135
+ readonly tokenId?: string;
136
+ readonly tokenValue?: number;
137
+ readonly permissionId?: number;
138
+ }
139
+ type ContractWriteInput = (ContractAbiInput & ContractWriteFields) | (ContractSelectorInput & ContractWriteFields);
140
+ interface SubmittedEvent {
141
+ readonly txid: string;
142
+ readonly network: Network;
143
+ readonly ownerAddress: TronAddress;
144
+ readonly walletKind: WalletAdapter['kind'];
145
+ readonly source: 'contract-write' | 'runtime-action';
146
+ readonly actionId?: string;
147
+ readonly intent?: TransactionIntent;
148
+ }
149
+ type SubmittedCallback = (event: SubmittedEvent) => void;
150
+ interface RuntimeWalletExecutionOptions {
151
+ readonly wallet?: WalletAdapter;
152
+ }
153
+ interface ContractWriteExecutionOptions extends RuntimeWalletExecutionOptions {
154
+ /** Required for semantic submission handling when bypassing a transaction plan. */
155
+ readonly intent?: TransactionIntent;
156
+ }
157
+ interface RuntimeBuildTransactionOptions extends RuntimeWalletExecutionOptions {
158
+ readonly ownerAddress?: TronAddress;
159
+ }
160
+ interface ContractClient {
161
+ read<T = unknown>(input: ContractReadInput): Promise<T>;
162
+ write(input: ContractWriteInput, options?: ContractWriteExecutionOptions): Promise<TxResult>;
163
+ }
164
+ interface BuildTransactionOptions {
165
+ readonly ownerAddress?: TronAddress;
166
+ }
167
+ interface MulticallResult<T = unknown> {
168
+ readonly success: boolean;
169
+ readonly value?: T;
170
+ readonly error?: unknown;
171
+ }
172
+ interface AggregateMulticallCall {
173
+ readonly target: TronAddress;
174
+ readonly callData: string;
175
+ }
176
+ interface AggregateMulticallInput {
177
+ readonly requireSuccess: boolean;
178
+ readonly calls: readonly AggregateMulticallCall[];
179
+ }
180
+ interface AggregateMulticallResult {
181
+ readonly success: boolean;
182
+ readonly returnData: string;
183
+ }
184
+ interface TronClient {
185
+ readonly kind: 'tronweb' | 'custom' | 'mock';
186
+ readonly network: Network;
187
+ getNativeBalance?(owner: TronAddress | string): Promise<string>;
188
+ readContract<T = unknown>(call: ContractRead): Promise<T>;
189
+ buildTransaction(call: ContractCall, options?: BuildTransactionOptions): Promise<UnsignedTronTransaction>;
190
+ broadcastTransaction(tx: SignedTronTransaction): Promise<TxResult>;
191
+ waitForTransactionReceipt?(txid: string, options?: WaitForTransactionReceiptOptions): Promise<TransactionReceipt>;
192
+ }
193
+ interface Runtime {
194
+ readonly network: Network;
195
+ readonly chain: ChainConfig;
196
+ readonly tronClient: TronClient;
197
+ readonly contract: ContractClient;
198
+ /** The fixed wallet supplied at construction time. Dynamic wallets are resolved by getWallet(). */
199
+ readonly wallet?: WalletAdapter;
200
+ getWallet(): Promise<WalletAdapter | undefined>;
201
+ requireWallet(operation: string): Promise<WalletAdapter>;
202
+ getAddress(): Promise<TronAddress | undefined>;
203
+ readContract<T = unknown>(call: ContractRead): Promise<T>;
204
+ buildTransaction(action: ContractCallAction, options?: RuntimeBuildTransactionOptions): Promise<UnsignedTronTransaction>;
205
+ sendAction(action: ContractCallAction, options?: RuntimeWalletExecutionOptions): Promise<TxResult>;
206
+ waitForTransactionReceipt?(txid: string, options?: WaitForTransactionReceiptOptions): Promise<TransactionReceipt>;
207
+ signTypedData(payload: TypedDataPayload, options?: RuntimeWalletExecutionOptions): Promise<string>;
208
+ multicall<T = unknown>(calls: readonly ContractRead[]): Promise<readonly MulticallResult<T>[]>;
209
+ aggregateMulticall(input: AggregateMulticallInput): Promise<readonly AggregateMulticallResult[]>;
210
+ }
211
+
212
+ export type { AggregateMulticallInput as A, BuildTransactionOptions as B, ContractCall as C, GetWallet as G, MulticallResult as M, Runtime as R, SignedTronTransaction as S, TxResult as T, UnsignedTronTransaction as U, WalletSendStrategy as W, TypedDataPayload as a, WalletAdapter as b, WalletCapabilities as c, TronClient as d, SubmittedCallback as e, AggregateMulticallResult as f, AbiFunction as g, AbiItem as h, AbiParameter as i, AggregateMulticallCall as j, ContractClient as k, ContractOutputParameter as l, ContractRead as m, ContractReadInput as n, ContractWriteExecutionOptions as o, ContractWriteInput as p, RuntimeBuildTransactionOptions as q, RuntimeWalletExecutionOptions as r, SubmittedEvent as s, TransactionReceipt as t, WaitForTransactionReceiptOptions as u };