@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/README.md +29 -0
- package/dist/browser.cjs +98 -0
- package/dist/browser.cjs.map +1 -0
- package/dist/browser.d.cts +16 -0
- package/dist/browser.d.ts +16 -0
- package/dist/browser.js +33 -0
- package/dist/browser.js.map +1 -0
- package/dist/capabilities-0q9k2fGU.d.ts +7 -0
- package/dist/capabilities-CpGxiDmg.d.cts +7 -0
- package/dist/chunk-AJSGBCSK.js +277 -0
- package/dist/chunk-AJSGBCSK.js.map +1 -0
- package/dist/chunk-NVRQ3Z7L.js +9 -0
- package/dist/chunk-NVRQ3Z7L.js.map +1 -0
- package/dist/chunk-VYEUIAUC.js +42 -0
- package/dist/chunk-VYEUIAUC.js.map +1 -0
- package/dist/index.cjs +458 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +31 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.js +397 -0
- package/dist/index.js.map +1 -0
- package/dist/mock.cjs +79 -0
- package/dist/mock.cjs.map +1 -0
- package/dist/mock.d.cts +15 -0
- package/dist/mock.d.ts +15 -0
- package/dist/mock.js +53 -0
- package/dist/mock.js.map +1 -0
- package/dist/node.cjs +371 -0
- package/dist/node.cjs.map +1 -0
- package/dist/node.d.cts +14 -0
- package/dist/node.d.ts +14 -0
- package/dist/node.js +40 -0
- package/dist/node.js.map +1 -0
- package/dist/tronweb.cjs +336 -0
- package/dist/tronweb.cjs.map +1 -0
- package/dist/tronweb.d.cts +12 -0
- package/dist/tronweb.d.ts +12 -0
- package/dist/tronweb.js +8 -0
- package/dist/tronweb.js.map +1 -0
- package/dist/types-CZnHFnQK.d.cts +212 -0
- package/dist/types-CZnHFnQK.d.ts +212 -0
- package/package.json +93 -0
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,458 @@
|
|
|
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/index.ts
|
|
21
|
+
var index_exports = {};
|
|
22
|
+
__export(index_exports, {
|
|
23
|
+
aggregateMulticall: () => aggregateMulticall,
|
|
24
|
+
createRuntime: () => createRuntime,
|
|
25
|
+
normalizeTxResult: () => normalizeTxResult,
|
|
26
|
+
readBalances: () => readBalances,
|
|
27
|
+
walletSupportsTypedData: () => walletSupportsTypedData
|
|
28
|
+
});
|
|
29
|
+
module.exports = __toCommonJS(index_exports);
|
|
30
|
+
|
|
31
|
+
// src/runtime.ts
|
|
32
|
+
var import_sun_sdk_chains = require("@sun-protocol/sun-sdk-chains");
|
|
33
|
+
var import_sun_sdk_core4 = require("@sun-protocol/sun-sdk-core");
|
|
34
|
+
|
|
35
|
+
// src/multicall/aggregate.ts
|
|
36
|
+
var import_sun_sdk_core = require("@sun-protocol/sun-sdk-core");
|
|
37
|
+
var TRY_AGGREGATE_ABI = {
|
|
38
|
+
type: "function",
|
|
39
|
+
name: "tryAggregate",
|
|
40
|
+
stateMutability: "view",
|
|
41
|
+
inputs: [
|
|
42
|
+
{ name: "requireSuccess", type: "bool" },
|
|
43
|
+
{
|
|
44
|
+
name: "calls",
|
|
45
|
+
type: "tuple[]",
|
|
46
|
+
components: [
|
|
47
|
+
{ name: "target", type: "address" },
|
|
48
|
+
{ name: "callData", type: "bytes" }
|
|
49
|
+
]
|
|
50
|
+
}
|
|
51
|
+
],
|
|
52
|
+
outputs: [
|
|
53
|
+
{
|
|
54
|
+
name: "returnData",
|
|
55
|
+
type: "tuple[]",
|
|
56
|
+
components: [
|
|
57
|
+
{ name: "success", type: "bool" },
|
|
58
|
+
{ name: "returnData", type: "bytes" }
|
|
59
|
+
]
|
|
60
|
+
}
|
|
61
|
+
]
|
|
62
|
+
};
|
|
63
|
+
var CALL_COMPONENTS = [
|
|
64
|
+
{ name: "target", type: "address" },
|
|
65
|
+
{ name: "callData", type: "bytes" }
|
|
66
|
+
];
|
|
67
|
+
function hexData(value, label) {
|
|
68
|
+
if (!/^0x(?:[0-9a-fA-F]{2})*$/.test(value)) {
|
|
69
|
+
throw new import_sun_sdk_core.SDKError("SDK_INVALID_ARGUMENT", `${label} must be 0x-prefixed, byte-aligned hex data`, {
|
|
70
|
+
[label]: value
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
return value;
|
|
74
|
+
}
|
|
75
|
+
function aggregateRows(value) {
|
|
76
|
+
if (Array.isArray(value)) {
|
|
77
|
+
if (value.every(isAggregateRow)) return value;
|
|
78
|
+
if (value.length === 1 && Array.isArray(value[0]) && value[0].every(isAggregateRow)) return value[0];
|
|
79
|
+
}
|
|
80
|
+
if (typeof value === "object" && value !== null) {
|
|
81
|
+
const record = value;
|
|
82
|
+
const nested = record.returnData ?? record[0];
|
|
83
|
+
if (nested !== value) return aggregateRows(nested);
|
|
84
|
+
}
|
|
85
|
+
throw new import_sun_sdk_core.SDKError("SDK_CONTRACT_ERROR", "Invalid tryAggregate result", { result: value });
|
|
86
|
+
}
|
|
87
|
+
function isAggregateRow(value) {
|
|
88
|
+
if (Array.isArray(value)) {
|
|
89
|
+
return value.length >= 2 && isBooleanValue(value[0]) && typeof value[1] === "string";
|
|
90
|
+
}
|
|
91
|
+
if (typeof value !== "object" || value === null) return false;
|
|
92
|
+
const record = value;
|
|
93
|
+
return isBooleanValue(record.success ?? record[0]) && typeof (record.returnData ?? record[1]) === "string";
|
|
94
|
+
}
|
|
95
|
+
function isBooleanValue(value) {
|
|
96
|
+
return value === true || value === false || value === 1 || value === 0 || value === "true" || value === "false";
|
|
97
|
+
}
|
|
98
|
+
function booleanValue(value) {
|
|
99
|
+
return value === true || value === 1 || value === "true";
|
|
100
|
+
}
|
|
101
|
+
function normalizeRow(value, index) {
|
|
102
|
+
const success = Array.isArray(value) ? value[0] : value.success ?? value[0];
|
|
103
|
+
const returnData = Array.isArray(value) ? value[1] : value.returnData ?? value[1];
|
|
104
|
+
if (!isBooleanValue(success) || typeof returnData !== "string") {
|
|
105
|
+
throw new import_sun_sdk_core.SDKError("SDK_CONTRACT_ERROR", `Invalid tryAggregate result at index ${index}`, { index, value });
|
|
106
|
+
}
|
|
107
|
+
return {
|
|
108
|
+
success: booleanValue(success),
|
|
109
|
+
returnData: hexData(returnData.startsWith("0x") ? returnData : `0x${returnData}`, "returnData")
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
async function aggregateMulticall(tronClient, multicallAddress, input) {
|
|
113
|
+
if (input.calls.length === 0) return [];
|
|
114
|
+
const calls = input.calls.map((call, index) => [
|
|
115
|
+
(0, import_sun_sdk_core.assertTronAddress)(call.target, `calls[${index}].target`),
|
|
116
|
+
hexData(call.callData, `calls[${index}].callData`)
|
|
117
|
+
]);
|
|
118
|
+
const parameters2 = [
|
|
119
|
+
{ type: "bool", value: input.requireSuccess },
|
|
120
|
+
{
|
|
121
|
+
type: "tuple[]",
|
|
122
|
+
value: calls,
|
|
123
|
+
components: CALL_COMPONENTS
|
|
124
|
+
}
|
|
125
|
+
];
|
|
126
|
+
const result = await tronClient.readContract({
|
|
127
|
+
target: (0, import_sun_sdk_core.assertTronAddress)(multicallAddress, "multicall address"),
|
|
128
|
+
functionSelector: "tryAggregate(bool,(address,bytes)[])",
|
|
129
|
+
parameters: parameters2,
|
|
130
|
+
abiFunction: TRY_AGGREGATE_ABI,
|
|
131
|
+
outputs: TRY_AGGREGATE_ABI.outputs ?? []
|
|
132
|
+
});
|
|
133
|
+
const rows = aggregateRows(result);
|
|
134
|
+
if (rows.length !== calls.length) {
|
|
135
|
+
throw new import_sun_sdk_core.SDKError("SDK_CONTRACT_ERROR", "tryAggregate result length does not match calls", {
|
|
136
|
+
expected: calls.length,
|
|
137
|
+
actual: rows.length
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
return rows.map(normalizeRow);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// src/multicall/fallback.ts
|
|
144
|
+
async function fallbackMulticall(provider, calls) {
|
|
145
|
+
return Promise.all(
|
|
146
|
+
calls.map(async (call) => {
|
|
147
|
+
try {
|
|
148
|
+
return { success: true, value: await provider.readContract(call) };
|
|
149
|
+
} catch (error) {
|
|
150
|
+
return { success: false, error };
|
|
151
|
+
}
|
|
152
|
+
})
|
|
153
|
+
);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// src/contracts/abi.ts
|
|
157
|
+
var import_sun_sdk_core2 = require("@sun-protocol/sun-sdk-core");
|
|
158
|
+
function abiFunction(input) {
|
|
159
|
+
const functions = input.abi.filter(isAbiFunction);
|
|
160
|
+
const matchingFunctions = input.functionName.includes("(") ? functions.filter((candidate) => selector(candidate) === input.functionName) : functions.filter((candidate) => candidate.name === input.functionName);
|
|
161
|
+
const item = matchingFunctions[0];
|
|
162
|
+
if (!item) {
|
|
163
|
+
throw new import_sun_sdk_core2.SDKError("SDK_INVALID_ARGUMENT", `ABI function not found: ${input.functionName}`, { functionName: input.functionName });
|
|
164
|
+
}
|
|
165
|
+
if (matchingFunctions.length > 1) {
|
|
166
|
+
throw new import_sun_sdk_core2.SDKError(
|
|
167
|
+
"SDK_INVALID_ARGUMENT",
|
|
168
|
+
`ABI function name is ambiguous: ${input.functionName}; use a canonical signature such as ${selector(item)}`,
|
|
169
|
+
{ functionName: input.functionName, signatures: matchingFunctions.map(selector) }
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
return item;
|
|
173
|
+
}
|
|
174
|
+
function isAbiFunction(item) {
|
|
175
|
+
return item.type === "function" && typeof item.name === "string" && (item.inputs === void 0 || Array.isArray(item.inputs)) && (item.outputs === void 0 || Array.isArray(item.outputs));
|
|
176
|
+
}
|
|
177
|
+
function parameters(item, args) {
|
|
178
|
+
const inputs = item.inputs ?? [];
|
|
179
|
+
if (inputs.length !== args.length) {
|
|
180
|
+
throw new import_sun_sdk_core2.SDKError("SDK_INVALID_ARGUMENT", `ABI argument count does not match ${item.name}`, {
|
|
181
|
+
functionName: item.name,
|
|
182
|
+
expected: inputs.length,
|
|
183
|
+
actual: args.length
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
return inputs.map((input, index) => ({
|
|
187
|
+
type: input.type,
|
|
188
|
+
value: args[index],
|
|
189
|
+
...input.components !== void 0 ? { components: input.components } : {}
|
|
190
|
+
}));
|
|
191
|
+
}
|
|
192
|
+
function selector(item) {
|
|
193
|
+
return `${item.name}(${(item.inputs ?? []).map(canonicalType).join(",")})`;
|
|
194
|
+
}
|
|
195
|
+
function canonicalType(input) {
|
|
196
|
+
if (!/^tuple(?:\[\d*\])*$/.test(input.type) || input.components === void 0) {
|
|
197
|
+
return input.type;
|
|
198
|
+
}
|
|
199
|
+
return `(${input.components.map(canonicalType).join(",")})${input.type.slice("tuple".length)}`;
|
|
200
|
+
}
|
|
201
|
+
function selectorRead(input) {
|
|
202
|
+
const functionSelector = input.functionSelector.trim();
|
|
203
|
+
if (!functionSelector) {
|
|
204
|
+
throw new import_sun_sdk_core2.SDKError("SDK_INVALID_ARGUMENT", "Contract functionSelector cannot be empty");
|
|
205
|
+
}
|
|
206
|
+
return {
|
|
207
|
+
target: (0, import_sun_sdk_core2.assertTronAddress)(input.address, "contract address"),
|
|
208
|
+
functionSelector,
|
|
209
|
+
...input.parameters !== void 0 ? { parameters: input.parameters } : {},
|
|
210
|
+
...input.rawParameter !== void 0 ? { rawParameter: input.rawParameter } : {},
|
|
211
|
+
...input.outputs !== void 0 ? { outputs: input.outputs } : { rawResult: true },
|
|
212
|
+
...input.from !== void 0 ? { from: (0, import_sun_sdk_core2.assertTronAddress)(input.from, "contract read from") } : {}
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
function contractReadFromInput(input) {
|
|
216
|
+
if (input.abi === void 0) return selectorRead(input);
|
|
217
|
+
const item = abiFunction(input);
|
|
218
|
+
return {
|
|
219
|
+
target: (0, import_sun_sdk_core2.assertTronAddress)(input.address, "contract address"),
|
|
220
|
+
functionSelector: selector(item),
|
|
221
|
+
parameters: parameters(item, input.args ?? []),
|
|
222
|
+
abiFunction: item,
|
|
223
|
+
outputs: (item.outputs ?? []).map((output) => ({
|
|
224
|
+
type: output.type,
|
|
225
|
+
...output.name !== void 0 ? { name: output.name } : {}
|
|
226
|
+
})),
|
|
227
|
+
...input.from !== void 0 ? { from: (0, import_sun_sdk_core2.assertTronAddress)(input.from, "contract read from") } : {}
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
function contractCallFromInput(input) {
|
|
231
|
+
const method = input.abi !== void 0 ? (() => {
|
|
232
|
+
const item = abiFunction(input);
|
|
233
|
+
return {
|
|
234
|
+
functionSelector: selector(item),
|
|
235
|
+
parameters: parameters(item, input.args ?? []),
|
|
236
|
+
abiFunction: item
|
|
237
|
+
};
|
|
238
|
+
})() : {
|
|
239
|
+
functionSelector: input.functionSelector.trim(),
|
|
240
|
+
...input.parameters !== void 0 ? { parameters: input.parameters } : {},
|
|
241
|
+
...input.rawParameter !== void 0 ? { rawParameter: input.rawParameter } : {}
|
|
242
|
+
};
|
|
243
|
+
if (!method.functionSelector) {
|
|
244
|
+
throw new import_sun_sdk_core2.SDKError("SDK_INVALID_ARGUMENT", "Contract functionSelector cannot be empty");
|
|
245
|
+
}
|
|
246
|
+
return {
|
|
247
|
+
target: (0, import_sun_sdk_core2.assertTronAddress)(input.address, "contract address"),
|
|
248
|
+
...method,
|
|
249
|
+
...input.callValue !== void 0 ? { callValue: input.callValue } : {},
|
|
250
|
+
...input.feeLimit !== void 0 ? { feeLimit: input.feeLimit } : {},
|
|
251
|
+
...input.tokenId !== void 0 ? { tokenId: input.tokenId } : {},
|
|
252
|
+
...input.tokenValue !== void 0 ? { tokenValue: input.tokenValue } : {},
|
|
253
|
+
...input.permissionId !== void 0 ? { permissionId: input.permissionId } : {}
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
// src/tx/normalize-result.ts
|
|
258
|
+
var import_sun_sdk_core3 = require("@sun-protocol/sun-sdk-core");
|
|
259
|
+
function readTxid(value) {
|
|
260
|
+
if (typeof value === "string" && value.length > 0) {
|
|
261
|
+
return value;
|
|
262
|
+
}
|
|
263
|
+
if (!value || typeof value !== "object") {
|
|
264
|
+
return null;
|
|
265
|
+
}
|
|
266
|
+
const record = value;
|
|
267
|
+
const direct = record.txid ?? record.txID ?? record.transactionId ?? record.txHash;
|
|
268
|
+
if (typeof direct === "string" && direct.length > 0) {
|
|
269
|
+
return direct;
|
|
270
|
+
}
|
|
271
|
+
const transaction = record.transaction;
|
|
272
|
+
if (transaction && typeof transaction === "object") {
|
|
273
|
+
return readTxid(transaction);
|
|
274
|
+
}
|
|
275
|
+
return null;
|
|
276
|
+
}
|
|
277
|
+
function hasBroadcastFailure(value) {
|
|
278
|
+
if (!value || typeof value !== "object") {
|
|
279
|
+
return false;
|
|
280
|
+
}
|
|
281
|
+
const record = value;
|
|
282
|
+
return record.result === false || typeof record.code === "string" || typeof record.Error === "string";
|
|
283
|
+
}
|
|
284
|
+
function normalizeTxResult(raw) {
|
|
285
|
+
if (hasBroadcastFailure(raw)) {
|
|
286
|
+
throw new import_sun_sdk_core3.SDKError("SDK_RUNTIME_ERROR", "Transaction broadcast failed", { raw });
|
|
287
|
+
}
|
|
288
|
+
const txid = readTxid(raw);
|
|
289
|
+
if (!txid) {
|
|
290
|
+
throw new import_sun_sdk_core3.SDKError("SDK_RUNTIME_ERROR", "Unable to find txid in transaction result", { raw });
|
|
291
|
+
}
|
|
292
|
+
return { txid, raw };
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
// src/runtime.ts
|
|
296
|
+
function createRuntime(input) {
|
|
297
|
+
if (input.tronClient.network !== input.network) {
|
|
298
|
+
throw new import_sun_sdk_core4.SDKError("SDK_INVALID_ARGUMENT", "Runtime tronClient network mismatch", {
|
|
299
|
+
runtimeNetwork: input.network,
|
|
300
|
+
tronClientNetwork: input.tronClient.network
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
if (input.wallet && input.getWallet) {
|
|
304
|
+
throw new import_sun_sdk_core4.SDKError("SDK_INVALID_ARGUMENT", "Use either wallet or getWallet when creating Runtime");
|
|
305
|
+
}
|
|
306
|
+
const chain = (0, import_sun_sdk_chains.getChainConfig)(input.network);
|
|
307
|
+
async function resolveWallet() {
|
|
308
|
+
return input.wallet ?? await input.getWallet?.();
|
|
309
|
+
}
|
|
310
|
+
async function requireWallet(operation, walletOverride) {
|
|
311
|
+
const wallet = walletOverride ?? await resolveWallet();
|
|
312
|
+
if (!wallet) {
|
|
313
|
+
throw new import_sun_sdk_core4.SDKError("SDK_WALLET_CAPABILITY_ERROR", `Runtime requires a wallet for ${operation}`);
|
|
314
|
+
}
|
|
315
|
+
return wallet;
|
|
316
|
+
}
|
|
317
|
+
async function walletAddress(wallet) {
|
|
318
|
+
return (0, import_sun_sdk_core4.assertTronAddress)(await wallet.getAddress(), "wallet address");
|
|
319
|
+
}
|
|
320
|
+
async function submitContractCall(call, submission, walletOverride) {
|
|
321
|
+
const wallet = await requireWallet("transaction signing", walletOverride);
|
|
322
|
+
const ownerAddress = await walletAddress(wallet);
|
|
323
|
+
const tx = await input.tronClient.buildTransaction(call, { ownerAddress });
|
|
324
|
+
let result;
|
|
325
|
+
if (wallet.sendStrategy === "sign-and-send" && wallet.signAndSendTransaction && wallet.capabilities.signAndSendTransaction) {
|
|
326
|
+
result = normalizeTxResult(await wallet.signAndSendTransaction(tx));
|
|
327
|
+
} else {
|
|
328
|
+
if (!wallet.signTransaction || !wallet.capabilities.signTransaction) {
|
|
329
|
+
throw new import_sun_sdk_core4.SDKError("SDK_WALLET_CAPABILITY_ERROR", "Wallet does not support transaction signing");
|
|
330
|
+
}
|
|
331
|
+
const signed = await wallet.signTransaction(tx);
|
|
332
|
+
result = await input.tronClient.broadcastTransaction(signed);
|
|
333
|
+
}
|
|
334
|
+
notifySubmitted({
|
|
335
|
+
txid: result.txid,
|
|
336
|
+
network: input.network,
|
|
337
|
+
ownerAddress,
|
|
338
|
+
walletKind: wallet.kind,
|
|
339
|
+
source: submission.source,
|
|
340
|
+
...submission.actionId === void 0 ? {} : { actionId: submission.actionId },
|
|
341
|
+
...submission.intent === void 0 ? {} : { intent: submission.intent }
|
|
342
|
+
});
|
|
343
|
+
return result;
|
|
344
|
+
}
|
|
345
|
+
function notifySubmitted(event) {
|
|
346
|
+
if (!input.onSubmitted) return;
|
|
347
|
+
try {
|
|
348
|
+
void Promise.resolve(input.onSubmitted(event)).catch(() => void 0);
|
|
349
|
+
} catch {
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
const contract = {
|
|
353
|
+
read(contractInput) {
|
|
354
|
+
return input.tronClient.readContract(contractReadFromInput(contractInput));
|
|
355
|
+
},
|
|
356
|
+
async write(contractInput, options) {
|
|
357
|
+
return submitContractCall(
|
|
358
|
+
contractCallFromInput(contractInput),
|
|
359
|
+
{
|
|
360
|
+
source: "contract-write",
|
|
361
|
+
...options?.intent === void 0 ? {} : { intent: options.intent }
|
|
362
|
+
},
|
|
363
|
+
options?.wallet
|
|
364
|
+
);
|
|
365
|
+
}
|
|
366
|
+
};
|
|
367
|
+
return {
|
|
368
|
+
network: input.network,
|
|
369
|
+
chain,
|
|
370
|
+
tronClient: input.tronClient,
|
|
371
|
+
contract,
|
|
372
|
+
...input.wallet ? { wallet: input.wallet } : {},
|
|
373
|
+
getWallet: resolveWallet,
|
|
374
|
+
requireWallet(operation) {
|
|
375
|
+
return requireWallet(operation);
|
|
376
|
+
},
|
|
377
|
+
async getAddress() {
|
|
378
|
+
const wallet = await resolveWallet();
|
|
379
|
+
if (!wallet) return void 0;
|
|
380
|
+
return walletAddress(wallet);
|
|
381
|
+
},
|
|
382
|
+
readContract(call) {
|
|
383
|
+
return input.tronClient.readContract(call);
|
|
384
|
+
},
|
|
385
|
+
async buildTransaction(action, options) {
|
|
386
|
+
const ownerAddress = options?.ownerAddress ?? await walletAddress(
|
|
387
|
+
await requireWallet("transaction building", options?.wallet)
|
|
388
|
+
);
|
|
389
|
+
return input.tronClient.buildTransaction(action, { ownerAddress });
|
|
390
|
+
},
|
|
391
|
+
async sendAction(action, options) {
|
|
392
|
+
return submitContractCall(
|
|
393
|
+
action,
|
|
394
|
+
{
|
|
395
|
+
source: "runtime-action",
|
|
396
|
+
actionId: action.id,
|
|
397
|
+
...action.intent === void 0 ? {} : { intent: action.intent }
|
|
398
|
+
},
|
|
399
|
+
options?.wallet
|
|
400
|
+
);
|
|
401
|
+
},
|
|
402
|
+
...input.tronClient.waitForTransactionReceipt ? {
|
|
403
|
+
waitForTransactionReceipt: (txid, options) => input.tronClient.waitForTransactionReceipt(txid, options)
|
|
404
|
+
} : {},
|
|
405
|
+
async signTypedData(payload, options) {
|
|
406
|
+
const wallet = await requireWallet("typed data signing", options?.wallet);
|
|
407
|
+
if (!wallet.signTypedData || !wallet.capabilities.signTypedData) {
|
|
408
|
+
throw new import_sun_sdk_core4.SDKError("SDK_WALLET_CAPABILITY_ERROR", "Wallet does not support typed data signing");
|
|
409
|
+
}
|
|
410
|
+
return wallet.signTypedData(payload);
|
|
411
|
+
},
|
|
412
|
+
async multicall(calls) {
|
|
413
|
+
return fallbackMulticall(input.tronClient, calls);
|
|
414
|
+
},
|
|
415
|
+
async aggregateMulticall(aggregateInput) {
|
|
416
|
+
return aggregateMulticall(input.tronClient, chain.contracts.multicall, aggregateInput);
|
|
417
|
+
}
|
|
418
|
+
};
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
// src/balances.ts
|
|
422
|
+
var import_sun_sdk_chains2 = require("@sun-protocol/sun-sdk-chains");
|
|
423
|
+
var import_sun_sdk_core5 = require("@sun-protocol/sun-sdk-core");
|
|
424
|
+
function isNativeToken(client, token) {
|
|
425
|
+
return token === "TRX" || token === (0, import_sun_sdk_chains2.getChainConfig)(client.network).contracts.trx;
|
|
426
|
+
}
|
|
427
|
+
async function readBalances(client, input) {
|
|
428
|
+
const owner = (0, import_sun_sdk_core5.assertTronAddress)(input.owner, "balance owner");
|
|
429
|
+
return Promise.all(input.tokens.map(async (token) => {
|
|
430
|
+
if (isNativeToken(client, token)) {
|
|
431
|
+
if (!client.getNativeBalance) {
|
|
432
|
+
throw new import_sun_sdk_core5.SDKError("SDK_RUNTIME_ERROR", "Tron client does not support native balance reads");
|
|
433
|
+
}
|
|
434
|
+
return { token, balance: await client.getNativeBalance(owner), decimals: 6 };
|
|
435
|
+
}
|
|
436
|
+
const balance = await client.readContract({
|
|
437
|
+
target: (0, import_sun_sdk_core5.assertTronAddress)(token, "token address"),
|
|
438
|
+
functionSelector: "balanceOf(address)",
|
|
439
|
+
parameters: [{ type: "address", value: owner }],
|
|
440
|
+
outputs: [{ type: "uint256" }]
|
|
441
|
+
});
|
|
442
|
+
return { token, balance: String(balance) };
|
|
443
|
+
}));
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
// src/wallets/capabilities.ts
|
|
447
|
+
function walletSupportsTypedData(capabilities) {
|
|
448
|
+
return capabilities.signTypedData === true;
|
|
449
|
+
}
|
|
450
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
451
|
+
0 && (module.exports = {
|
|
452
|
+
aggregateMulticall,
|
|
453
|
+
createRuntime,
|
|
454
|
+
normalizeTxResult,
|
|
455
|
+
readBalances,
|
|
456
|
+
walletSupportsTypedData
|
|
457
|
+
});
|
|
458
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/runtime.ts","../src/multicall/aggregate.ts","../src/multicall/fallback.ts","../src/contracts/abi.ts","../src/tx/normalize-result.ts","../src/balances.ts","../src/wallets/capabilities.ts"],"sourcesContent":["export type {\n BalanceResult,\n} from './balances.js'\nexport type {\n AbiFunction,\n AbiItem,\n AbiParameter,\n AggregateMulticallCall,\n AggregateMulticallInput,\n AggregateMulticallResult,\n BuildTransactionOptions,\n ContractCall,\n ContractClient,\n ContractOutputParameter,\n ContractRead,\n ContractReadInput,\n ContractWriteExecutionOptions,\n ContractWriteInput,\n GetWallet,\n MulticallResult,\n Runtime,\n RuntimeBuildTransactionOptions,\n RuntimeWalletExecutionOptions,\n SubmittedCallback,\n SubmittedEvent,\n SignedTronTransaction,\n TransactionReceipt,\n TronClient,\n TxResult,\n TypedDataPayload,\n UnsignedTronTransaction,\n WaitForTransactionReceiptOptions,\n WalletAdapter,\n WalletCapabilities,\n WalletSendStrategy,\n} from './types.js'\nexport {\n createRuntime,\n type RuntimeInput,\n} from './runtime.js'\nexport * from './balances.js'\nexport * from './multicall/aggregate.js'\nexport * from './tx/normalize-result.js'\nexport * from './wallets/capabilities.js'\n","import { getChainConfig } from '@sun-protocol/sun-sdk-chains'\nimport {\n SDKError,\n assertTronAddress,\n type ContractCallAction,\n type Network,\n type TronAddress,\n} from '@sun-protocol/sun-sdk-core'\nimport { aggregateMulticall } from './multicall/aggregate.js'\nimport { fallbackMulticall } from './multicall/fallback.js'\nimport { contractCallFromInput, contractReadFromInput } from './contracts/abi.js'\nimport { normalizeTxResult } from './tx/normalize-result.js'\nimport type {\n ContractCall,\n ContractClient,\n ContractRead,\n ContractReadInput,\n ContractWriteExecutionOptions,\n ContractWriteInput,\n GetWallet,\n MulticallResult,\n Runtime,\n SubmittedCallback,\n SubmittedEvent,\n TronClient,\n TxResult,\n TypedDataPayload,\n WalletAdapter,\n} from './types.js'\n\nexport interface RuntimeInput {\n readonly network: Network\n readonly tronClient: TronClient\n readonly wallet?: WalletAdapter\n /** Resolves the current browser wallet at operation time without coupling Runtime to a UI lifecycle. */\n readonly getWallet?: GetWallet\n /** Best-effort hook for every successful Runtime transaction submission. */\n readonly onSubmitted?: SubmittedCallback\n}\n\nexport function createRuntime(input: RuntimeInput): Runtime {\n if (input.tronClient.network !== input.network) {\n throw new SDKError('SDK_INVALID_ARGUMENT', 'Runtime tronClient network mismatch', {\n runtimeNetwork: input.network,\n tronClientNetwork: input.tronClient.network,\n })\n }\n if (input.wallet && input.getWallet) {\n throw new SDKError('SDK_INVALID_ARGUMENT', 'Use either wallet or getWallet when creating Runtime')\n }\n\n const chain = getChainConfig(input.network)\n\n async function resolveWallet(): Promise<WalletAdapter | undefined> {\n return input.wallet ?? await input.getWallet?.()\n }\n\n async function requireWallet(\n operation: string,\n walletOverride?: WalletAdapter,\n ): Promise<WalletAdapter> {\n const wallet = walletOverride ?? await resolveWallet()\n if (!wallet) {\n throw new SDKError('SDK_WALLET_CAPABILITY_ERROR', `Runtime requires a wallet for ${operation}`)\n }\n return wallet\n }\n\n async function walletAddress(wallet: WalletAdapter): Promise<TronAddress> {\n return assertTronAddress(await wallet.getAddress(), 'wallet address')\n }\n\n async function submitContractCall(\n call: ContractCall,\n submission: Pick<SubmittedEvent, 'source'> & Partial<Pick<SubmittedEvent, 'actionId' | 'intent'>>,\n walletOverride?: WalletAdapter,\n ): Promise<TxResult> {\n const wallet = await requireWallet('transaction signing', walletOverride)\n const ownerAddress = await walletAddress(wallet)\n const tx = await input.tronClient.buildTransaction(call, { ownerAddress })\n let result: TxResult\n\n if (\n wallet.sendStrategy === 'sign-and-send' &&\n wallet.signAndSendTransaction &&\n wallet.capabilities.signAndSendTransaction\n ) {\n result = normalizeTxResult(await wallet.signAndSendTransaction(tx))\n } else {\n if (!wallet.signTransaction || !wallet.capabilities.signTransaction) {\n throw new SDKError('SDK_WALLET_CAPABILITY_ERROR', 'Wallet does not support transaction signing')\n }\n\n const signed = await wallet.signTransaction(tx)\n result = await input.tronClient.broadcastTransaction(signed)\n }\n\n notifySubmitted({\n txid: result.txid,\n network: input.network,\n ownerAddress,\n walletKind: wallet.kind,\n source: submission.source,\n ...(submission.actionId === undefined ? {} : { actionId: submission.actionId }),\n ...(submission.intent === undefined ? {} : { intent: submission.intent }),\n })\n return result\n }\n\n function notifySubmitted(event: SubmittedEvent): void {\n if (!input.onSubmitted) return\n try {\n void Promise.resolve(input.onSubmitted(event)).catch(() => undefined)\n } catch {\n // Observability is deliberately best-effort: the transaction is already submitted.\n }\n }\n\n const contract: ContractClient = {\n read<T = unknown>(contractInput: ContractReadInput): Promise<T> {\n return input.tronClient.readContract<T>(contractReadFromInput(contractInput))\n },\n async write(\n contractInput: ContractWriteInput,\n options?: ContractWriteExecutionOptions,\n ): Promise<TxResult> {\n return submitContractCall(\n contractCallFromInput(contractInput),\n {\n source: 'contract-write',\n ...(options?.intent === undefined ? {} : { intent: options.intent }),\n },\n options?.wallet,\n )\n },\n }\n\n return {\n network: input.network,\n chain,\n tronClient: input.tronClient,\n contract,\n ...(input.wallet ? { wallet: input.wallet } : {}),\n getWallet: resolveWallet,\n requireWallet(operation) {\n return requireWallet(operation)\n },\n async getAddress() {\n const wallet = await resolveWallet()\n if (!wallet) return undefined\n return walletAddress(wallet)\n },\n readContract(call) {\n return input.tronClient.readContract(call)\n },\n async buildTransaction(action, options) {\n const ownerAddress = options?.ownerAddress ?? await walletAddress(\n await requireWallet('transaction building', options?.wallet),\n )\n return input.tronClient.buildTransaction(action, { ownerAddress })\n },\n async sendAction(action: ContractCallAction, options) {\n return submitContractCall(\n action,\n {\n source: 'runtime-action',\n actionId: action.id,\n ...(action.intent === undefined ? {} : { intent: action.intent }),\n },\n options?.wallet,\n )\n },\n ...(input.tronClient.waitForTransactionReceipt\n ? {\n waitForTransactionReceipt: (txid, options) =>\n input.tronClient.waitForTransactionReceipt!(txid, options),\n }\n : {}),\n async signTypedData(payload: TypedDataPayload, options) {\n const wallet = await requireWallet('typed data signing', options?.wallet)\n if (!wallet.signTypedData || !wallet.capabilities.signTypedData) {\n throw new SDKError('SDK_WALLET_CAPABILITY_ERROR', 'Wallet does not support typed data signing')\n }\n return wallet.signTypedData(payload)\n },\n async multicall<T = unknown>(calls: readonly ContractRead[]): Promise<readonly MulticallResult<T>[]> {\n return fallbackMulticall<T>(input.tronClient, calls)\n },\n async aggregateMulticall(aggregateInput) {\n return aggregateMulticall(input.tronClient, chain.contracts.multicall, aggregateInput)\n },\n }\n}\n","import { SDKError, assertTronAddress, type ContractParameter } from '@sun-protocol/sun-sdk-core'\nimport type {\n AbiFunction,\n AggregateMulticallInput,\n AggregateMulticallResult,\n TronClient,\n} from '../types.js'\n\nconst TRY_AGGREGATE_ABI: AbiFunction = {\n type: 'function',\n name: 'tryAggregate',\n stateMutability: 'view',\n inputs: [\n { name: 'requireSuccess', type: 'bool' },\n {\n name: 'calls',\n type: 'tuple[]',\n components: [\n { name: 'target', type: 'address' },\n { name: 'callData', type: 'bytes' },\n ],\n },\n ],\n outputs: [\n {\n name: 'returnData',\n type: 'tuple[]',\n components: [\n { name: 'success', type: 'bool' },\n { name: 'returnData', type: 'bytes' },\n ],\n },\n ],\n}\n\nconst CALL_COMPONENTS = [\n { name: 'target', type: 'address' },\n { name: 'callData', type: 'bytes' },\n] as const\n\nfunction hexData(value: string, label: string): string {\n if (!/^0x(?:[0-9a-fA-F]{2})*$/.test(value)) {\n throw new SDKError('SDK_INVALID_ARGUMENT', `${label} must be 0x-prefixed, byte-aligned hex data`, {\n [label]: value,\n })\n }\n return value\n}\n\nfunction aggregateRows(value: unknown): readonly unknown[] {\n if (Array.isArray(value)) {\n if (value.every(isAggregateRow)) return value\n if (value.length === 1 && Array.isArray(value[0]) && value[0].every(isAggregateRow)) return value[0]\n }\n\n if (typeof value === 'object' && value !== null) {\n const record = value as Record<string, unknown>\n const nested = record.returnData ?? record[0]\n if (nested !== value) return aggregateRows(nested)\n }\n\n throw new SDKError('SDK_CONTRACT_ERROR', 'Invalid tryAggregate result', { result: value })\n}\n\nfunction isAggregateRow(value: unknown): boolean {\n if (Array.isArray(value)) {\n return value.length >= 2 && isBooleanValue(value[0]) && typeof value[1] === 'string'\n }\n if (typeof value !== 'object' || value === null) return false\n const record = value as Record<string, unknown>\n return isBooleanValue(record.success ?? record[0]) && typeof (record.returnData ?? record[1]) === 'string'\n}\n\nfunction isBooleanValue(value: unknown): boolean {\n return value === true || value === false || value === 1 || value === 0 || value === 'true' || value === 'false'\n}\n\nfunction booleanValue(value: unknown): boolean {\n return value === true || value === 1 || value === 'true'\n}\n\nfunction normalizeRow(value: unknown, index: number): AggregateMulticallResult {\n const success = Array.isArray(value)\n ? value[0]\n : (value as Record<string, unknown>).success ?? (value as Record<string, unknown>)[0]\n const returnData = Array.isArray(value)\n ? value[1]\n : (value as Record<string, unknown>).returnData ?? (value as Record<string, unknown>)[1]\n\n if (!isBooleanValue(success) || typeof returnData !== 'string') {\n throw new SDKError('SDK_CONTRACT_ERROR', `Invalid tryAggregate result at index ${index}`, { index, value })\n }\n\n return {\n success: booleanValue(success),\n returnData: hexData(returnData.startsWith('0x') ? returnData : `0x${returnData}`, 'returnData'),\n }\n}\n\nexport async function aggregateMulticall(\n tronClient: TronClient,\n multicallAddress: string,\n input: AggregateMulticallInput,\n): Promise<readonly AggregateMulticallResult[]> {\n if (input.calls.length === 0) return []\n\n const calls = input.calls.map((call, index) => [\n assertTronAddress(call.target, `calls[${index}].target`),\n hexData(call.callData, `calls[${index}].callData`),\n ])\n const parameters: readonly ContractParameter[] = [\n { type: 'bool', value: input.requireSuccess },\n {\n type: 'tuple[]',\n value: calls,\n components: CALL_COMPONENTS,\n },\n ]\n const result = await tronClient.readContract({\n target: assertTronAddress(multicallAddress, 'multicall address'),\n functionSelector: 'tryAggregate(bool,(address,bytes)[])',\n parameters,\n abiFunction: TRY_AGGREGATE_ABI,\n outputs: TRY_AGGREGATE_ABI.outputs ?? [],\n })\n\n const rows = aggregateRows(result)\n if (rows.length !== calls.length) {\n throw new SDKError('SDK_CONTRACT_ERROR', 'tryAggregate result length does not match calls', {\n expected: calls.length,\n actual: rows.length,\n })\n }\n return rows.map(normalizeRow)\n}\n","import type { ContractRead, MulticallResult, TronClient } from '../types.js'\n\nexport async function fallbackMulticall<T = unknown>(\n provider: TronClient,\n calls: readonly ContractRead[],\n): Promise<readonly MulticallResult<T>[]> {\n return Promise.all(\n calls.map(async (call) => {\n try {\n return { success: true, value: await provider.readContract<T>(call) }\n } catch (error) {\n return { success: false, error }\n }\n }),\n )\n}\n","import {\n SDKError,\n assertTronAddress,\n type ContractParameter,\n} from '@sun-protocol/sun-sdk-core'\nimport type {\n AbiFunction,\n AbiItem,\n AbiParameter,\n ContractCall,\n ContractRead,\n ContractReadInput,\n ContractWriteInput,\n} from '../types.js'\n\ninterface AbiFunctionInput {\n readonly abi: readonly AbiItem[]\n readonly functionName: string\n}\n\nfunction abiFunction(input: AbiFunctionInput): AbiFunction {\n const functions = input.abi.filter(isAbiFunction)\n const matchingFunctions = input.functionName.includes('(')\n ? functions.filter((candidate) => selector(candidate) === input.functionName)\n : functions.filter((candidate) => candidate.name === input.functionName)\n const item = matchingFunctions[0]\n if (!item) {\n throw new SDKError('SDK_INVALID_ARGUMENT', `ABI function not found: ${input.functionName}`, { functionName: input.functionName })\n }\n if (matchingFunctions.length > 1) {\n throw new SDKError(\n 'SDK_INVALID_ARGUMENT',\n `ABI function name is ambiguous: ${input.functionName}; use a canonical signature such as ${selector(item)}`,\n { functionName: input.functionName, signatures: matchingFunctions.map(selector) },\n )\n }\n return item\n}\n\nfunction isAbiFunction(item: AbiItem): item is AbiFunction {\n return item.type === 'function'\n && typeof item.name === 'string'\n && (item.inputs === undefined || Array.isArray(item.inputs))\n && (item.outputs === undefined || Array.isArray(item.outputs))\n}\n\nfunction parameters(item: AbiFunction, args: readonly unknown[]): readonly ContractParameter[] {\n const inputs = item.inputs ?? []\n if (inputs.length !== args.length) {\n throw new SDKError('SDK_INVALID_ARGUMENT', `ABI argument count does not match ${item.name}`, {\n functionName: item.name,\n expected: inputs.length,\n actual: args.length,\n })\n }\n return inputs.map((input, index) => ({\n type: input.type,\n value: args[index],\n ...(input.components !== undefined ? { components: input.components } : {}),\n }))\n}\n\nfunction selector(item: AbiFunction): string {\n return `${item.name}(${(item.inputs ?? []).map(canonicalType).join(',')})`\n}\n\nfunction canonicalType(input: AbiParameter): string {\n if (!/^tuple(?:\\[\\d*\\])*$/.test(input.type) || input.components === undefined) {\n return input.type\n }\n\n return `(${input.components.map(canonicalType).join(',')})${input.type.slice('tuple'.length)}`\n}\n\nfunction selectorRead(input: Extract<ContractReadInput, { readonly functionSelector: string }>): ContractRead {\n const functionSelector = input.functionSelector.trim()\n if (!functionSelector) {\n throw new SDKError('SDK_INVALID_ARGUMENT', 'Contract functionSelector cannot be empty')\n }\n return {\n target: assertTronAddress(input.address, 'contract address'),\n functionSelector,\n ...(input.parameters !== undefined ? { parameters: input.parameters } : {}),\n ...(input.rawParameter !== undefined ? { rawParameter: input.rawParameter } : {}),\n ...(input.outputs !== undefined ? { outputs: input.outputs } : { rawResult: true }),\n ...(input.from !== undefined ? { from: assertTronAddress(input.from, 'contract read from') } : {}),\n }\n}\n\nexport function contractReadFromInput(input: ContractReadInput): ContractRead {\n if (input.abi === undefined) return selectorRead(input)\n\n const item = abiFunction(input)\n return {\n target: assertTronAddress(input.address, 'contract address'),\n functionSelector: selector(item),\n parameters: parameters(item, input.args ?? []),\n abiFunction: item,\n outputs: (item.outputs ?? []).map((output) => ({\n type: output.type,\n ...(output.name !== undefined ? { name: output.name } : {}),\n })),\n ...(input.from !== undefined ? { from: assertTronAddress(input.from, 'contract read from') } : {}),\n }\n}\n\nexport function contractCallFromInput(input: ContractWriteInput): ContractCall {\n const method = input.abi !== undefined\n ? (() => {\n const item = abiFunction(input)\n return {\n functionSelector: selector(item),\n parameters: parameters(item, input.args ?? []),\n abiFunction: item,\n }\n })()\n : {\n functionSelector: input.functionSelector.trim(),\n ...(input.parameters !== undefined ? { parameters: input.parameters } : {}),\n ...(input.rawParameter !== undefined ? { rawParameter: input.rawParameter } : {}),\n }\n\n if (!method.functionSelector) {\n throw new SDKError('SDK_INVALID_ARGUMENT', 'Contract functionSelector cannot be empty')\n }\n\n return {\n target: assertTronAddress(input.address, 'contract address'),\n ...method,\n ...(input.callValue !== undefined ? { callValue: input.callValue } : {}),\n ...(input.feeLimit !== undefined ? { feeLimit: input.feeLimit } : {}),\n ...(input.tokenId !== undefined ? { tokenId: input.tokenId } : {}),\n ...(input.tokenValue !== undefined ? { tokenValue: input.tokenValue } : {}),\n ...(input.permissionId !== undefined ? { permissionId: input.permissionId } : {}),\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 { getChainConfig } from '@sun-protocol/sun-sdk-chains'\nimport { SDKError, assertTronAddress, type TronAddress } from '@sun-protocol/sun-sdk-core'\nimport type { TronClient } from './types.js'\n\nexport interface ReadBalancesInput {\n readonly owner: TronAddress | string\n readonly tokens: readonly (TronAddress | string)[]\n}\n\nexport interface BalanceResult {\n readonly token: TronAddress | string\n readonly balance: string\n readonly decimals?: number\n}\n\nfunction isNativeToken(client: TronClient, token: TronAddress | string): boolean {\n return token === 'TRX' || token === getChainConfig(client.network).contracts.trx\n}\n\nexport async function readBalances(client: TronClient, input: ReadBalancesInput): Promise<readonly BalanceResult[]> {\n const owner = assertTronAddress(input.owner, 'balance owner')\n return Promise.all(input.tokens.map(async (token) => {\n if (isNativeToken(client, token)) {\n if (!client.getNativeBalance) {\n throw new SDKError('SDK_RUNTIME_ERROR', 'Tron client does not support native balance reads')\n }\n return { token, balance: await client.getNativeBalance(owner), decimals: 6 }\n }\n\n const balance = await client.readContract<string>({\n target: assertTronAddress(token, 'token address'),\n functionSelector: 'balanceOf(address)',\n parameters: [{ type: 'address', value: owner }],\n outputs: [{ type: 'uint256' }],\n })\n return { token, balance: String(balance) }\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","parameters","import_sun_sdk_core","import_sun_sdk_core","import_sun_sdk_chains","import_sun_sdk_core"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { TronAddress, Network } from '@sun-protocol/sun-sdk-core';
|
|
2
|
+
import { d as TronClient, b as WalletAdapter, G as GetWallet, e as SubmittedCallback, R as Runtime, A as AggregateMulticallInput, f as AggregateMulticallResult } from './types-CZnHFnQK.cjs';
|
|
3
|
+
export { g as AbiFunction, h as AbiItem, i as AbiParameter, j as AggregateMulticallCall, B as BuildTransactionOptions, C as ContractCall, k as ContractClient, l as ContractOutputParameter, m as ContractRead, n as ContractReadInput, o as ContractWriteExecutionOptions, p as ContractWriteInput, M as MulticallResult, q as RuntimeBuildTransactionOptions, r as RuntimeWalletExecutionOptions, S as SignedTronTransaction, s as SubmittedEvent, t as TransactionReceipt, T as TxResult, a as TypedDataPayload, U as UnsignedTronTransaction, u as WaitForTransactionReceiptOptions, c as WalletCapabilities, W as WalletSendStrategy } from './types-CZnHFnQK.cjs';
|
|
4
|
+
export { n as normalizeTxResult, w as walletSupportsTypedData } from './capabilities-CpGxiDmg.cjs';
|
|
5
|
+
import '@sun-protocol/sun-sdk-chains';
|
|
6
|
+
|
|
7
|
+
interface ReadBalancesInput {
|
|
8
|
+
readonly owner: TronAddress | string;
|
|
9
|
+
readonly tokens: readonly (TronAddress | string)[];
|
|
10
|
+
}
|
|
11
|
+
interface BalanceResult {
|
|
12
|
+
readonly token: TronAddress | string;
|
|
13
|
+
readonly balance: string;
|
|
14
|
+
readonly decimals?: number;
|
|
15
|
+
}
|
|
16
|
+
declare function readBalances(client: TronClient, input: ReadBalancesInput): Promise<readonly BalanceResult[]>;
|
|
17
|
+
|
|
18
|
+
interface RuntimeInput {
|
|
19
|
+
readonly network: Network;
|
|
20
|
+
readonly tronClient: TronClient;
|
|
21
|
+
readonly wallet?: WalletAdapter;
|
|
22
|
+
/** Resolves the current browser wallet at operation time without coupling Runtime to a UI lifecycle. */
|
|
23
|
+
readonly getWallet?: GetWallet;
|
|
24
|
+
/** Best-effort hook for every successful Runtime transaction submission. */
|
|
25
|
+
readonly onSubmitted?: SubmittedCallback;
|
|
26
|
+
}
|
|
27
|
+
declare function createRuntime(input: RuntimeInput): Runtime;
|
|
28
|
+
|
|
29
|
+
declare function aggregateMulticall(tronClient: TronClient, multicallAddress: string, input: AggregateMulticallInput): Promise<readonly AggregateMulticallResult[]>;
|
|
30
|
+
|
|
31
|
+
export { AggregateMulticallInput, AggregateMulticallResult, type BalanceResult, GetWallet, type ReadBalancesInput, Runtime, type RuntimeInput, SubmittedCallback, TronClient, WalletAdapter, aggregateMulticall, createRuntime, readBalances };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { TronAddress, Network } from '@sun-protocol/sun-sdk-core';
|
|
2
|
+
import { d as TronClient, b as WalletAdapter, G as GetWallet, e as SubmittedCallback, R as Runtime, A as AggregateMulticallInput, f as AggregateMulticallResult } from './types-CZnHFnQK.js';
|
|
3
|
+
export { g as AbiFunction, h as AbiItem, i as AbiParameter, j as AggregateMulticallCall, B as BuildTransactionOptions, C as ContractCall, k as ContractClient, l as ContractOutputParameter, m as ContractRead, n as ContractReadInput, o as ContractWriteExecutionOptions, p as ContractWriteInput, M as MulticallResult, q as RuntimeBuildTransactionOptions, r as RuntimeWalletExecutionOptions, S as SignedTronTransaction, s as SubmittedEvent, t as TransactionReceipt, T as TxResult, a as TypedDataPayload, U as UnsignedTronTransaction, u as WaitForTransactionReceiptOptions, c as WalletCapabilities, W as WalletSendStrategy } from './types-CZnHFnQK.js';
|
|
4
|
+
export { n as normalizeTxResult, w as walletSupportsTypedData } from './capabilities-0q9k2fGU.js';
|
|
5
|
+
import '@sun-protocol/sun-sdk-chains';
|
|
6
|
+
|
|
7
|
+
interface ReadBalancesInput {
|
|
8
|
+
readonly owner: TronAddress | string;
|
|
9
|
+
readonly tokens: readonly (TronAddress | string)[];
|
|
10
|
+
}
|
|
11
|
+
interface BalanceResult {
|
|
12
|
+
readonly token: TronAddress | string;
|
|
13
|
+
readonly balance: string;
|
|
14
|
+
readonly decimals?: number;
|
|
15
|
+
}
|
|
16
|
+
declare function readBalances(client: TronClient, input: ReadBalancesInput): Promise<readonly BalanceResult[]>;
|
|
17
|
+
|
|
18
|
+
interface RuntimeInput {
|
|
19
|
+
readonly network: Network;
|
|
20
|
+
readonly tronClient: TronClient;
|
|
21
|
+
readonly wallet?: WalletAdapter;
|
|
22
|
+
/** Resolves the current browser wallet at operation time without coupling Runtime to a UI lifecycle. */
|
|
23
|
+
readonly getWallet?: GetWallet;
|
|
24
|
+
/** Best-effort hook for every successful Runtime transaction submission. */
|
|
25
|
+
readonly onSubmitted?: SubmittedCallback;
|
|
26
|
+
}
|
|
27
|
+
declare function createRuntime(input: RuntimeInput): Runtime;
|
|
28
|
+
|
|
29
|
+
declare function aggregateMulticall(tronClient: TronClient, multicallAddress: string, input: AggregateMulticallInput): Promise<readonly AggregateMulticallResult[]>;
|
|
30
|
+
|
|
31
|
+
export { AggregateMulticallInput, AggregateMulticallResult, type BalanceResult, GetWallet, type ReadBalancesInput, Runtime, type RuntimeInput, SubmittedCallback, TronClient, WalletAdapter, aggregateMulticall, createRuntime, readBalances };
|