@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.
package/dist/node.cjs ADDED
@@ -0,0 +1,371 @@
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/node.ts
21
+ var node_exports = {};
22
+ __export(node_exports, {
23
+ createPrivateKeyWalletAdapter: () => createPrivateKeyWalletAdapter,
24
+ createTronWebClient: () => createTronWebClient,
25
+ normalizeTxResult: () => normalizeTxResult,
26
+ walletSupportsTypedData: () => walletSupportsTypedData
27
+ });
28
+ module.exports = __toCommonJS(node_exports);
29
+
30
+ // src/provider/tronweb.ts
31
+ var import_sun_sdk_core2 = require("@sun-protocol/sun-sdk-core");
32
+
33
+ // src/tx/normalize-result.ts
34
+ var import_sun_sdk_core = require("@sun-protocol/sun-sdk-core");
35
+ function readTxid(value) {
36
+ if (typeof value === "string" && value.length > 0) {
37
+ return value;
38
+ }
39
+ if (!value || typeof value !== "object") {
40
+ return null;
41
+ }
42
+ const record = value;
43
+ const direct = record.txid ?? record.txID ?? record.transactionId ?? record.txHash;
44
+ if (typeof direct === "string" && direct.length > 0) {
45
+ return direct;
46
+ }
47
+ const transaction = record.transaction;
48
+ if (transaction && typeof transaction === "object") {
49
+ return readTxid(transaction);
50
+ }
51
+ return null;
52
+ }
53
+ function hasBroadcastFailure(value) {
54
+ if (!value || typeof value !== "object") {
55
+ return false;
56
+ }
57
+ const record = value;
58
+ return record.result === false || typeof record.code === "string" || typeof record.Error === "string";
59
+ }
60
+ function normalizeTxResult(raw) {
61
+ if (hasBroadcastFailure(raw)) {
62
+ throw new import_sun_sdk_core.SDKError("SDK_RUNTIME_ERROR", "Transaction broadcast failed", { raw });
63
+ }
64
+ const txid = readTxid(raw);
65
+ if (!txid) {
66
+ throw new import_sun_sdk_core.SDKError("SDK_RUNTIME_ERROR", "Unable to find txid in transaction result", { raw });
67
+ }
68
+ return { txid, raw };
69
+ }
70
+
71
+ // src/provider/tronweb.ts
72
+ var DEFAULT_INCLUDED_RECEIPT_TIMEOUT_MS = 45e3;
73
+ var DEFAULT_SOLIDIFIED_RECEIPT_TIMEOUT_MS = 12e4;
74
+ var DEFAULT_RECEIPT_POLL_INTERVAL_MS = 3e3;
75
+ function methodName(functionSelector) {
76
+ return functionSelector.slice(0, functionSelector.indexOf("("));
77
+ }
78
+ function contractMethod(contract, functionSelector) {
79
+ if (typeof contract !== "object" || contract === null) {
80
+ return void 0;
81
+ }
82
+ const record = contract;
83
+ const methods = typeof record.methods === "object" && record.methods !== null ? record.methods : void 0;
84
+ const method = methods?.[functionSelector] ?? record[functionSelector] ?? record[methodName(functionSelector)];
85
+ return typeof method === "function" ? method : void 0;
86
+ }
87
+ function parameterValues(parameters) {
88
+ return parameters?.map((parameter) => parameter.value) ?? [];
89
+ }
90
+ function cloneAbiV2Value(value) {
91
+ if (Array.isArray(value)) {
92
+ return value.map(cloneAbiV2Value);
93
+ }
94
+ if (isPlainObject(value)) {
95
+ return Object.fromEntries(Object.entries(value).map(([key, nestedValue]) => [key, cloneAbiV2Value(nestedValue)]));
96
+ }
97
+ return value;
98
+ }
99
+ function isPlainObject(value) {
100
+ if (typeof value !== "object" || value === null) {
101
+ return false;
102
+ }
103
+ const prototype = Object.getPrototypeOf(value);
104
+ return prototype === Object.prototype || prototype === null;
105
+ }
106
+ function abiV2Options(call) {
107
+ if (!isAbiV2Function(call.abiFunction) || !call.abiFunction.inputs?.some((input) => input.components !== void 0)) {
108
+ return void 0;
109
+ }
110
+ return {
111
+ funcABIV2: call.abiFunction,
112
+ parametersV2: parameterValues(call.parameters).map(cloneAbiV2Value)
113
+ };
114
+ }
115
+ function isAbiV2Function(value) {
116
+ return typeof value === "object" && value !== null && (!("inputs" in value) || Array.isArray(value.inputs));
117
+ }
118
+ function isContractAbiFunction(value) {
119
+ return isAbiV2Function(value) && value.type === "function" && typeof value.name === "string";
120
+ }
121
+ function tronWebCallValue(value) {
122
+ if (value < 0n || value > BigInt(Number.MAX_SAFE_INTEGER)) {
123
+ throw new import_sun_sdk_core2.SDKError("SDK_INVALID_ARGUMENT", "callValue exceeds TronWeb safe integer range", {
124
+ callValue: value.toString(),
125
+ maxSafeInteger: Number.MAX_SAFE_INTEGER
126
+ });
127
+ }
128
+ return Number(value);
129
+ }
130
+ function contractCallOptions(call) {
131
+ return {
132
+ ...call.feeLimit !== void 0 ? { feeLimit: call.feeLimit } : {},
133
+ ...call.callValue !== void 0 ? { callValue: tronWebCallValue(call.callValue) } : {},
134
+ ...call.tokenId !== void 0 ? { tokenId: call.tokenId } : {},
135
+ ...call.tokenValue !== void 0 ? { tokenValue: call.tokenValue } : {},
136
+ ...call.permissionId !== void 0 ? { permissionId: call.permissionId } : {},
137
+ ...call.rawParameter !== void 0 ? { rawParameter: call.rawParameter } : {}
138
+ };
139
+ }
140
+ function unwrapBuiltTransaction(raw) {
141
+ if (raw && typeof raw === "object" && "transaction" in raw) {
142
+ return raw.transaction;
143
+ }
144
+ return raw;
145
+ }
146
+ async function callContractMethod(method, call) {
147
+ const result = method(...parameterValues(call.parameters));
148
+ if (result && typeof result === "object" && "call" in result && typeof result.call === "function") {
149
+ return result.call({ from: call.from ?? import_sun_sdk_core2.TRON_ZERO_ADDRESS });
150
+ }
151
+ return result;
152
+ }
153
+ async function readWithContractAbi(tronWeb, call) {
154
+ let contract;
155
+ try {
156
+ contract = await tronWeb.contract().at(call.target);
157
+ } catch {
158
+ return { found: false };
159
+ }
160
+ const method = contractMethod(contract, call.functionSelector);
161
+ if (!method) {
162
+ return { found: false };
163
+ }
164
+ return { found: true, value: await callContractMethod(method, call) };
165
+ }
166
+ async function readWithProvidedAbi(tronWeb, call) {
167
+ if (!isContractAbiFunction(call.abiFunction)) {
168
+ throw new import_sun_sdk_core2.SDKError("SDK_INVALID_ARGUMENT", `Invalid ABI function for ${call.functionSelector}`, { call });
169
+ }
170
+ const contract = await tronWeb.contract([call.abiFunction], call.target);
171
+ const method = contractMethod(contract, call.functionSelector);
172
+ if (!method) {
173
+ throw new import_sun_sdk_core2.SDKError("SDK_RUNTIME_ERROR", `TronWeb ABI method not found: ${call.functionSelector}`, { call });
174
+ }
175
+ return callContractMethod(method, call);
176
+ }
177
+ function constantResults(result, call) {
178
+ const values = result?.constant_result;
179
+ if (!Array.isArray(values) || !values.every((value) => typeof value === "string")) {
180
+ throw new import_sun_sdk_core2.SDKError("SDK_CONTRACT_ERROR", `Invalid raw constant result for ${call.functionSelector}`, { call, result });
181
+ }
182
+ return values;
183
+ }
184
+ function constantResultHex(result, call) {
185
+ const raw = result?.constant_result?.[0];
186
+ if (typeof raw !== "string" || !/^(0x)?[0-9a-fA-F]*$/.test(raw)) {
187
+ throw new import_sun_sdk_core2.SDKError("SDK_CONTRACT_ERROR", `Invalid constant read result for ${call.functionSelector}`, { call, result });
188
+ }
189
+ return raw.startsWith("0x") ? raw.slice(2) : raw;
190
+ }
191
+ function decodeConstantResult(tronWeb, result, call) {
192
+ const outputs = call.outputs ?? [];
193
+ const hex = constantResultHex(result, call);
194
+ const types = outputs.map((output) => {
195
+ 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)) {
196
+ throw new import_sun_sdk_core2.SDKError("SDK_RUNTIME_ERROR", `Unsupported constant read output type: ${output.type}`, { output });
197
+ }
198
+ return output.type;
199
+ });
200
+ try {
201
+ const decoded = tronWeb.utils.abi.decodeParams([], types, `0x${hex}`);
202
+ const values = outputs.map((output, index) => {
203
+ const value = decoded[index];
204
+ if (/^u?int/.test(output.type)) return String(value);
205
+ if (output.type === "address") return `0x${String(value).slice(2)}`;
206
+ return value;
207
+ });
208
+ return values.length === 1 ? values[0] : values;
209
+ } catch (cause) {
210
+ throw new import_sun_sdk_core2.SDKError("SDK_CONTRACT_ERROR", `Invalid constant read result for ${call.functionSelector}`, {
211
+ call,
212
+ result,
213
+ cause
214
+ });
215
+ }
216
+ }
217
+ async function readWithConstantSelector(tronWeb, call) {
218
+ const result = await readRawConstant(tronWeb, call);
219
+ return decodeConstantResult(tronWeb, result, call);
220
+ }
221
+ async function readRawConstant(tronWeb, call) {
222
+ const abiV2 = abiV2Options(call);
223
+ const result = await tronWeb.transactionBuilder.triggerConstantContract(
224
+ call.target,
225
+ call.functionSelector,
226
+ {
227
+ ...call.rawParameter !== void 0 ? { rawParameter: call.rawParameter } : {},
228
+ ...abiV2
229
+ },
230
+ abiV2 ? [] : call.parameters ?? [],
231
+ call.from ?? import_sun_sdk_core2.TRON_ZERO_ADDRESS
232
+ );
233
+ return result;
234
+ }
235
+ function transactionReceiptResult(value) {
236
+ if (typeof value !== "object" || value === null) return void 0;
237
+ const record = value;
238
+ const receipt = typeof record.receipt === "object" && record.receipt !== null ? record.receipt : void 0;
239
+ if (typeof receipt?.result === "string") return receipt.result;
240
+ return typeof record.result === "string" ? record.result : void 0;
241
+ }
242
+ function receiptOption(value, fallback, name, allowZero) {
243
+ const resolved = value ?? fallback;
244
+ if (!Number.isFinite(resolved) || !Number.isInteger(resolved) || resolved < (allowZero ? 0 : 1)) {
245
+ throw new import_sun_sdk_core2.SDKError("SDK_INVALID_ARGUMENT", `${name} must be ${allowZero ? "a non-negative" : "a positive"} integer`, {
246
+ [name]: value
247
+ });
248
+ }
249
+ return resolved;
250
+ }
251
+ function receiptFinality(value) {
252
+ if (value === void 0) return "solidified";
253
+ if (value === "included" || value === "solidified") return value;
254
+ throw new import_sun_sdk_core2.SDKError("SDK_INVALID_ARGUMENT", "Unsupported transaction receipt finality", {
255
+ finality: value
256
+ });
257
+ }
258
+ function delay(ms) {
259
+ return new Promise((resolve) => setTimeout(resolve, ms));
260
+ }
261
+ function createTronWebClient(input) {
262
+ return {
263
+ kind: "tronweb",
264
+ network: input.network,
265
+ async getNativeBalance(owner) {
266
+ return String(await input.tronWeb.trx.getBalance(owner));
267
+ },
268
+ async readContract(call) {
269
+ if (call.abiFunction !== void 0) {
270
+ return readWithProvidedAbi(input.tronWeb, call);
271
+ }
272
+ if (call.rawResult) {
273
+ return readRawConstant(input.tronWeb, call);
274
+ }
275
+ if (call.outputs?.length) {
276
+ return readWithConstantSelector(input.tronWeb, call);
277
+ }
278
+ const chainAbiResult = await readWithContractAbi(input.tronWeb, call);
279
+ if (chainAbiResult.found) {
280
+ return chainAbiResult.value;
281
+ }
282
+ return constantResults(await readRawConstant(input.tronWeb, call), call);
283
+ },
284
+ async buildTransaction(call, options = {}) {
285
+ const abiV2 = abiV2Options(call);
286
+ const raw = await input.tronWeb.transactionBuilder.triggerSmartContract(
287
+ call.target,
288
+ call.functionSelector,
289
+ { ...contractCallOptions(call), ...abiV2 },
290
+ abiV2 ? [] : call.parameters ?? [],
291
+ options.ownerAddress
292
+ );
293
+ return unwrapBuiltTransaction(raw);
294
+ },
295
+ async broadcastTransaction(tx) {
296
+ return normalizeTxResult(await input.tronWeb.trx.sendRawTransaction(tx));
297
+ },
298
+ async waitForTransactionReceipt(txid, options = {}) {
299
+ const finality = receiptFinality(options.finality);
300
+ const defaultTimeoutMs = finality === "included" ? DEFAULT_INCLUDED_RECEIPT_TIMEOUT_MS : DEFAULT_SOLIDIFIED_RECEIPT_TIMEOUT_MS;
301
+ const timeoutMs = receiptOption(options.timeoutMs, defaultTimeoutMs, "timeoutMs", true);
302
+ const pollIntervalMs = receiptOption(
303
+ options.pollIntervalMs,
304
+ DEFAULT_RECEIPT_POLL_INTERVAL_MS,
305
+ "pollIntervalMs",
306
+ false
307
+ );
308
+ const deadline = Date.now() + timeoutMs;
309
+ let lastError;
310
+ while (true) {
311
+ try {
312
+ const raw = finality === "included" ? await input.tronWeb.trx.getUnconfirmedTransactionInfo(txid) : await input.tronWeb.trx.getTransactionInfo(txid);
313
+ const result = transactionReceiptResult(raw);
314
+ if (result !== void 0) {
315
+ return { txid, result, success: result === "SUCCESS", raw };
316
+ }
317
+ lastError = void 0;
318
+ } catch (error) {
319
+ lastError = error;
320
+ }
321
+ const remainingMs = deadline - Date.now();
322
+ if (remainingMs <= 0) {
323
+ throw new import_sun_sdk_core2.SDKError("SDK_RUNTIME_ERROR", "Timed out waiting for transaction receipt", {
324
+ txid,
325
+ finality,
326
+ timeoutMs,
327
+ ...lastError !== void 0 ? { cause: lastError } : {}
328
+ });
329
+ }
330
+ await delay(Math.min(pollIntervalMs, remainingMs));
331
+ }
332
+ }
333
+ };
334
+ }
335
+
336
+ // src/wallets/private-key.ts
337
+ var import_sun_sdk_core3 = require("@sun-protocol/sun-sdk-core");
338
+ function createPrivateKeyWalletAdapter(input) {
339
+ return {
340
+ kind: "privateKey",
341
+ capabilities: {
342
+ signTransaction: true,
343
+ signAndSendTransaction: false,
344
+ signTypedData: false,
345
+ userInteractive: false
346
+ },
347
+ async getAddress() {
348
+ const address = input.tronWeb.address.fromPrivateKey(input.privateKey);
349
+ if (!address) {
350
+ throw new import_sun_sdk_core3.SDKError("SDK_INVALID_ARGUMENT", "Unable to derive TRON address from private key");
351
+ }
352
+ return (0, import_sun_sdk_core3.assertTronAddress)(address, "private key address");
353
+ },
354
+ async signTransaction(tx) {
355
+ return input.tronWeb.trx.sign(tx, input.privateKey);
356
+ }
357
+ };
358
+ }
359
+
360
+ // src/wallets/capabilities.ts
361
+ function walletSupportsTypedData(capabilities) {
362
+ return capabilities.signTypedData === true;
363
+ }
364
+ // Annotate the CommonJS export names for ESM import in node:
365
+ 0 && (module.exports = {
366
+ createPrivateKeyWalletAdapter,
367
+ createTronWebClient,
368
+ normalizeTxResult,
369
+ walletSupportsTypedData
370
+ });
371
+ //# sourceMappingURL=node.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/node.ts","../src/provider/tronweb.ts","../src/tx/normalize-result.ts","../src/wallets/private-key.ts","../src/wallets/capabilities.ts"],"sourcesContent":["export {\n createTronWebClient,\n type TronWebClientInput,\n} from './provider/tronweb.js'\nexport { normalizeTxResult } from './tx/normalize-result.js'\nexport { createPrivateKeyWalletAdapter, type PrivateKeyWalletInput } from './wallets/private-key.js'\nexport { walletSupportsTypedData } from './wallets/capabilities.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","import { SDKError, assertTronAddress } from '@sun-protocol/sun-sdk-core'\nimport type { TronWeb } from 'tronweb'\nimport type { SignedTronTransaction, WalletAdapter } from '../types.js'\n\nexport interface PrivateKeyWalletInput {\n readonly privateKey: string\n readonly tronWeb: TronWeb\n}\n\nexport function createPrivateKeyWalletAdapter(input: PrivateKeyWalletInput): WalletAdapter {\n return {\n kind: 'privateKey',\n capabilities: {\n signTransaction: true,\n signAndSendTransaction: false,\n signTypedData: false,\n userInteractive: false,\n },\n async getAddress() {\n const address = input.tronWeb.address.fromPrivateKey(input.privateKey)\n if (!address) {\n throw new SDKError('SDK_INVALID_ARGUMENT', 'Unable to derive TRON address from private key')\n }\n return assertTronAddress(address, 'private key address')\n },\n async signTransaction(tx) {\n return input.tronWeb.trx.sign(tx as Parameters<TronWeb['trx']['sign']>[0], input.privateKey) as Promise<SignedTronTransaction>\n },\n }\n}\n","import type { WalletCapabilities } from '../types.js'\n\nexport function walletSupportsTypedData(capabilities: Pick<WalletCapabilities, 'signTypedData'>): boolean {\n return capabilities.signTypedData === true\n}\n"],"mappings":"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","names":["import_sun_sdk_core","import_sun_sdk_core"]}
@@ -0,0 +1,14 @@
1
+ export { TronWebClientInput, createTronWebClient } from './tronweb.cjs';
2
+ export { n as normalizeTxResult, w as walletSupportsTypedData } from './capabilities-CpGxiDmg.cjs';
3
+ import { TronWeb } from 'tronweb';
4
+ import { b as WalletAdapter } from './types-CZnHFnQK.cjs';
5
+ import '@sun-protocol/sun-sdk-core';
6
+ import '@sun-protocol/sun-sdk-chains';
7
+
8
+ interface PrivateKeyWalletInput {
9
+ readonly privateKey: string;
10
+ readonly tronWeb: TronWeb;
11
+ }
12
+ declare function createPrivateKeyWalletAdapter(input: PrivateKeyWalletInput): WalletAdapter;
13
+
14
+ export { type PrivateKeyWalletInput, createPrivateKeyWalletAdapter };
package/dist/node.d.ts ADDED
@@ -0,0 +1,14 @@
1
+ export { TronWebClientInput, createTronWebClient } from './tronweb.js';
2
+ export { n as normalizeTxResult, w as walletSupportsTypedData } from './capabilities-0q9k2fGU.js';
3
+ import { TronWeb } from 'tronweb';
4
+ import { b as WalletAdapter } from './types-CZnHFnQK.js';
5
+ import '@sun-protocol/sun-sdk-core';
6
+ import '@sun-protocol/sun-sdk-chains';
7
+
8
+ interface PrivateKeyWalletInput {
9
+ readonly privateKey: string;
10
+ readonly tronWeb: TronWeb;
11
+ }
12
+ declare function createPrivateKeyWalletAdapter(input: PrivateKeyWalletInput): WalletAdapter;
13
+
14
+ export { type PrivateKeyWalletInput, createPrivateKeyWalletAdapter };
package/dist/node.js ADDED
@@ -0,0 +1,40 @@
1
+ import {
2
+ walletSupportsTypedData
3
+ } from "./chunk-NVRQ3Z7L.js";
4
+ import {
5
+ createTronWebClient
6
+ } from "./chunk-AJSGBCSK.js";
7
+ import {
8
+ normalizeTxResult
9
+ } from "./chunk-VYEUIAUC.js";
10
+
11
+ // src/wallets/private-key.ts
12
+ import { SDKError, assertTronAddress } from "@sun-protocol/sun-sdk-core";
13
+ function createPrivateKeyWalletAdapter(input) {
14
+ return {
15
+ kind: "privateKey",
16
+ capabilities: {
17
+ signTransaction: true,
18
+ signAndSendTransaction: false,
19
+ signTypedData: false,
20
+ userInteractive: false
21
+ },
22
+ async getAddress() {
23
+ const address = input.tronWeb.address.fromPrivateKey(input.privateKey);
24
+ if (!address) {
25
+ throw new SDKError("SDK_INVALID_ARGUMENT", "Unable to derive TRON address from private key");
26
+ }
27
+ return assertTronAddress(address, "private key address");
28
+ },
29
+ async signTransaction(tx) {
30
+ return input.tronWeb.trx.sign(tx, input.privateKey);
31
+ }
32
+ };
33
+ }
34
+ export {
35
+ createPrivateKeyWalletAdapter,
36
+ createTronWebClient,
37
+ normalizeTxResult,
38
+ walletSupportsTypedData
39
+ };
40
+ //# sourceMappingURL=node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/wallets/private-key.ts"],"sourcesContent":["import { SDKError, assertTronAddress } from '@sun-protocol/sun-sdk-core'\nimport type { TronWeb } from 'tronweb'\nimport type { SignedTronTransaction, WalletAdapter } from '../types.js'\n\nexport interface PrivateKeyWalletInput {\n readonly privateKey: string\n readonly tronWeb: TronWeb\n}\n\nexport function createPrivateKeyWalletAdapter(input: PrivateKeyWalletInput): WalletAdapter {\n return {\n kind: 'privateKey',\n capabilities: {\n signTransaction: true,\n signAndSendTransaction: false,\n signTypedData: false,\n userInteractive: false,\n },\n async getAddress() {\n const address = input.tronWeb.address.fromPrivateKey(input.privateKey)\n if (!address) {\n throw new SDKError('SDK_INVALID_ARGUMENT', 'Unable to derive TRON address from private key')\n }\n return assertTronAddress(address, 'private key address')\n },\n async signTransaction(tx) {\n return input.tronWeb.trx.sign(tx as Parameters<TronWeb['trx']['sign']>[0], input.privateKey) as Promise<SignedTronTransaction>\n },\n }\n}\n"],"mappings":";;;;;;;;;;;AAAA,SAAS,UAAU,yBAAyB;AASrC,SAAS,8BAA8B,OAA6C;AACzF,SAAO;AAAA,IACL,MAAM;AAAA,IACN,cAAc;AAAA,MACZ,iBAAiB;AAAA,MACjB,wBAAwB;AAAA,MACxB,eAAe;AAAA,MACf,iBAAiB;AAAA,IACnB;AAAA,IACA,MAAM,aAAa;AACjB,YAAM,UAAU,MAAM,QAAQ,QAAQ,eAAe,MAAM,UAAU;AACrE,UAAI,CAAC,SAAS;AACZ,cAAM,IAAI,SAAS,wBAAwB,gDAAgD;AAAA,MAC7F;AACA,aAAO,kBAAkB,SAAS,qBAAqB;AAAA,IACzD;AAAA,IACA,MAAM,gBAAgB,IAAI;AACxB,aAAO,MAAM,QAAQ,IAAI,KAAK,IAA6C,MAAM,UAAU;AAAA,IAC7F;AAAA,EACF;AACF;","names":[]}