@zebec-network/tron-transfer-sdk 1.0.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +290 -75
- package/dist/client.d.ts +6 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +1 -1
- package/dist/client.js.map +1 -1
- package/dist/config.d.ts +25 -8
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +40 -46
- package/dist/config.js.map +1 -1
- package/dist/env.d.ts +8 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +50 -0
- package/dist/env.js.map +1 -0
- package/dist/index.d.ts +9 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/node.d.ts +25 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +33 -0
- package/dist/node.js.map +1 -0
- package/dist/services.d.ts +55 -14
- package/dist/services.d.ts.map +1 -1
- package/dist/services.js +272 -112
- package/dist/services.js.map +1 -1
- package/dist/signer.d.ts +25 -0
- package/dist/signer.d.ts.map +1 -0
- package/dist/signer.js +26 -0
- package/dist/signer.js.map +1 -0
- package/dist/types.d.ts +12 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/utils.d.ts +5 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +12 -0
- package/dist/utils.js.map +1 -1
- package/package.json +12 -1
package/dist/config.d.ts
CHANGED
|
@@ -1,16 +1,33 @@
|
|
|
1
|
-
import 'dotenv/config';
|
|
2
1
|
export type TronNetwork = 'mainnet' | 'testnet';
|
|
3
|
-
|
|
2
|
+
/** Settings passed to TronTransferService. Everything except `network` has a default. */
|
|
3
|
+
export interface TronTransferServiceConfig {
|
|
4
|
+
network: TronNetwork;
|
|
5
|
+
/** Full-node URL. Defaults to TronGrid: api.trongrid.io on mainnet, nile.trongrid.io on testnet. */
|
|
6
|
+
fullHost?: string | undefined;
|
|
7
|
+
/** TronGrid API key, sent as the TRON-PRO-API-KEY header. Required for mainnet on api.trongrid.io. */
|
|
8
|
+
apiKey?: string | undefined;
|
|
9
|
+
/** Default token for transferToken(). Defaults to USDT when `fullHost` is a known TronGrid host. */
|
|
10
|
+
usdtContract?: string | undefined;
|
|
11
|
+
/** Max TRX (in SUN) one token transfer may burn for energy. Default: 100_000_000 (100 TRX). */
|
|
12
|
+
feeLimitSun?: number | undefined;
|
|
13
|
+
/** How many times to retry a request the node answers with HTTP 429, with backoff. Default: 3. */
|
|
14
|
+
rateLimitRetries?: number | undefined;
|
|
15
|
+
}
|
|
16
|
+
/** A validated TronTransferServiceConfig with defaults applied. */
|
|
17
|
+
export interface ServiceConfig {
|
|
4
18
|
network: TronNetwork;
|
|
5
19
|
fullHost: string;
|
|
6
20
|
apiKey: string | undefined;
|
|
7
|
-
privateKey: string;
|
|
8
21
|
usdtContract: string | undefined;
|
|
9
22
|
feeLimitSun: number;
|
|
23
|
+
rateLimitRetries: number;
|
|
24
|
+
}
|
|
25
|
+
/** A ServiceConfig plus the sender's private key, as read from .env by loadConfig(). */
|
|
26
|
+
export interface NetworkConfig extends ServiceConfig {
|
|
27
|
+
privateKey: string;
|
|
10
28
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
export declare function loadConfig(network?: TronNetwork): NetworkConfig;
|
|
29
|
+
export declare const DEFAULT_FEE_LIMIT_SUN = 100000000;
|
|
30
|
+
export declare const DEFAULT_RATE_LIMIT_RETRIES = 3;
|
|
31
|
+
/** Validates a service config and fills in the defaults for its network. */
|
|
32
|
+
export declare function resolveServiceConfig(config: TronTransferServiceConfig): ServiceConfig;
|
|
16
33
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;AAEhD,yFAAyF;AACzF,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,WAAW,CAAC;IACrB,oGAAoG;IACpG,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,sGAAsG;IACtG,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,oGAAoG;IACpG,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,+FAA+F;IAC/F,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,kGAAkG;IAClG,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACvC;AAED,mEAAmE;AACnE,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,wFAAwF;AACxF,MAAM,WAAW,aAAc,SAAQ,aAAa;IAClD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,qBAAqB,YAAc,CAAC;AACjD,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAsB5C,4EAA4E;AAC5E,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,yBAAyB,GAAG,aAAa,CAgCrF"}
|
package/dist/config.js
CHANGED
|
@@ -1,55 +1,49 @@
|
|
|
1
|
-
import '
|
|
2
|
-
const DEFAULT_FEE_LIMIT_SUN = 100_000_000; // 100 TRX
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
import { TronWeb } from 'tronweb';
|
|
2
|
+
export const DEFAULT_FEE_LIMIT_SUN = 100_000_000; // 100 TRX
|
|
3
|
+
export const DEFAULT_RATE_LIMIT_RETRIES = 3;
|
|
4
|
+
const DEFAULT_FULL_HOST = {
|
|
5
|
+
mainnet: 'https://api.trongrid.io',
|
|
6
|
+
testnet: 'https://nile.trongrid.io',
|
|
7
|
+
};
|
|
8
|
+
// USDT is deployed at a different address on each network, so the default follows the host.
|
|
9
|
+
const USDT_BY_HOST = {
|
|
10
|
+
'api.trongrid.io': 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t',
|
|
11
|
+
'nile.trongrid.io': 'TXYZopYRdj2D9XRtbG411XZZ3kM5VkAeBf',
|
|
12
|
+
'api.shasta.trongrid.io': 'TG3XXyExBkPp9nzdajDZsozEu4BkaSJozs',
|
|
13
|
+
};
|
|
14
|
+
function parseHost(fullHost) {
|
|
15
|
+
try {
|
|
16
|
+
return new URL(fullHost);
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
throw new Error(`fullHost must be a URL such as https://nile.trongrid.io, got "${fullHost}".`);
|
|
11
20
|
}
|
|
12
|
-
return value;
|
|
13
21
|
}
|
|
14
|
-
|
|
15
|
-
|
|
22
|
+
/** Validates a service config and fills in the defaults for its network. */
|
|
23
|
+
export function resolveServiceConfig(config) {
|
|
24
|
+
const { network } = config;
|
|
16
25
|
if (network !== 'mainnet' && network !== 'testnet') {
|
|
17
|
-
throw new Error(`
|
|
26
|
+
throw new Error(`network must be "mainnet" or "testnet", got "${network}".`);
|
|
18
27
|
}
|
|
19
|
-
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
if (
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
if (!Number.isSafeInteger(feeLimit) || feeLimit <= 0) {
|
|
26
|
-
throw new Error(`TRON_FEE_LIMIT_SUN must be a positive integer (in SUN), got "${value}".`);
|
|
28
|
+
const fullHost = config.fullHost?.trim() || DEFAULT_FULL_HOST[network];
|
|
29
|
+
const { hostname } = parseHost(fullHost);
|
|
30
|
+
const apiKey = config.apiKey?.trim() || undefined;
|
|
31
|
+
if (network === 'mainnet' && !apiKey && /(^|\.)trongrid\.io$/i.test(hostname)) {
|
|
32
|
+
// Keyless TronGrid requests are limited per IP (about 1 request/s); a token transfer makes several in a row.
|
|
33
|
+
throw new Error(`A TronGrid API key is required for ${fullHost} on mainnet (apiKey, or TRON_MAINNET_API_KEY in .env). Get one at https://www.trongrid.io.`);
|
|
27
34
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
const prefix = `TRON_${network.toUpperCase()}`;
|
|
36
|
-
const privateKey = requireEnv(`${prefix}_PRIVATE_KEY`).replace(/^0x/i, '');
|
|
37
|
-
if (!/^[0-9a-fA-F]{64}$/.test(privateKey)) {
|
|
38
|
-
throw new Error(`${prefix}_PRIVATE_KEY must be a 64-character hex string.`);
|
|
35
|
+
const usdtContract = config.usdtContract?.trim() || USDT_BY_HOST[hostname.toLowerCase()];
|
|
36
|
+
if (usdtContract && !TronWeb.isAddress(usdtContract)) {
|
|
37
|
+
throw new Error(`usdtContract must be a TRON address, got "${usdtContract}".`);
|
|
38
|
+
}
|
|
39
|
+
const feeLimitSun = config.feeLimitSun ?? DEFAULT_FEE_LIMIT_SUN;
|
|
40
|
+
if (!Number.isSafeInteger(feeLimitSun) || feeLimitSun <= 0) {
|
|
41
|
+
throw new Error(`feeLimitSun must be a positive integer (in SUN), got ${feeLimitSun}.`);
|
|
39
42
|
}
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
// Keyless TronGrid mainnet requests get HTTP 429 after a few calls, often mid-transfer.
|
|
44
|
-
throw new Error(`${prefix}_API_KEY is required for ${fullHost}. Get one at https://www.trongrid.io.`);
|
|
43
|
+
const rateLimitRetries = config.rateLimitRetries ?? DEFAULT_RATE_LIMIT_RETRIES;
|
|
44
|
+
if (!Number.isSafeInteger(rateLimitRetries) || rateLimitRetries < 0) {
|
|
45
|
+
throw new Error(`rateLimitRetries must be a non-negative integer, got ${rateLimitRetries}.`);
|
|
45
46
|
}
|
|
46
|
-
return {
|
|
47
|
-
network,
|
|
48
|
-
fullHost,
|
|
49
|
-
apiKey,
|
|
50
|
-
privateKey,
|
|
51
|
-
usdtContract: readEnv(`${prefix}_USDT_CONTRACT`),
|
|
52
|
-
feeLimitSun: parseFeeLimit(readEnv('TRON_FEE_LIMIT_SUN')),
|
|
53
|
-
};
|
|
47
|
+
return { network, fullHost, apiKey, usdtContract, feeLimitSun, rateLimitRetries };
|
|
54
48
|
}
|
|
55
49
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAkClC,MAAM,CAAC,MAAM,qBAAqB,GAAG,WAAW,CAAC,CAAC,UAAU;AAC5D,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC;AAE5C,MAAM,iBAAiB,GAAgC;IACrD,OAAO,EAAE,yBAAyB;IAClC,OAAO,EAAE,0BAA0B;CACpC,CAAC;AAEF,4FAA4F;AAC5F,MAAM,YAAY,GAA2B;IAC3C,iBAAiB,EAAE,oCAAoC;IACvD,kBAAkB,EAAE,oCAAoC;IACxD,wBAAwB,EAAE,oCAAoC;CAC/D,CAAC;AAEF,SAAS,SAAS,CAAC,QAAgB;IACjC,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,iEAAiE,QAAQ,IAAI,CAAC,CAAC;IACjG,CAAC;AACH,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,oBAAoB,CAAC,MAAiC;IACpE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAC3B,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,gDAAgD,OAAO,IAAI,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACvE,MAAM,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;IAClD,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,MAAM,IAAI,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9E,6GAA6G;QAC7G,MAAM,IAAI,KAAK,CACb,sCAAsC,QAAQ,4FAA4F,CAC3I,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,YAAY,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IACzF,IAAI,YAAY,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CAAC,6CAA6C,YAAY,IAAI,CAAC,CAAC;IACjF,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,qBAAqB,CAAC;IAChE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,wDAAwD,WAAW,GAAG,CAAC,CAAC;IAC1F,CAAC;IAED,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,0BAA0B,CAAC;IAC/E,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,gBAAgB,CAAC,IAAI,gBAAgB,GAAG,CAAC,EAAE,CAAC;QACpE,MAAM,IAAI,KAAK,CAAC,wDAAwD,gBAAgB,GAAG,CAAC,CAAC;IAC/F,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC;AACpF,CAAC"}
|
package/dist/env.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import 'dotenv/config';
|
|
2
|
+
import type { NetworkConfig, TronNetwork } from './config.js';
|
|
3
|
+
/**
|
|
4
|
+
* Reads the configuration for a network from environment variables.
|
|
5
|
+
* Defaults to the network named by TRON_NETWORK.
|
|
6
|
+
*/
|
|
7
|
+
export declare function loadConfig(network?: TronNetwork): NetworkConfig;
|
|
8
|
+
//# sourceMappingURL=env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AACA,OAAO,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAgC9D;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,GAAE,WAAmD,GAAG,aAAa,CAgBtG"}
|
package/dist/env.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// Node-only: dotenv reads the filesystem when imported, so nothing in the browser entry imports this file.
|
|
2
|
+
import 'dotenv/config';
|
|
3
|
+
import { resolveServiceConfig } from './config.js';
|
|
4
|
+
function readEnv(name) {
|
|
5
|
+
const value = process.env[name]?.trim();
|
|
6
|
+
return value ? value : undefined;
|
|
7
|
+
}
|
|
8
|
+
function requireEnv(name) {
|
|
9
|
+
const value = readEnv(name);
|
|
10
|
+
if (!value) {
|
|
11
|
+
throw new Error(`Missing required environment variable ${name}. See .env.example.`);
|
|
12
|
+
}
|
|
13
|
+
return value;
|
|
14
|
+
}
|
|
15
|
+
function parseNetwork(value) {
|
|
16
|
+
const network = (value ?? 'testnet').toLowerCase();
|
|
17
|
+
if (network !== 'mainnet' && network !== 'testnet') {
|
|
18
|
+
throw new Error(`TRON_NETWORK must be "mainnet" or "testnet", got "${value}".`);
|
|
19
|
+
}
|
|
20
|
+
return network;
|
|
21
|
+
}
|
|
22
|
+
function parseFeeLimit(value) {
|
|
23
|
+
if (value === undefined)
|
|
24
|
+
return undefined;
|
|
25
|
+
const feeLimit = Number(value);
|
|
26
|
+
if (!Number.isSafeInteger(feeLimit) || feeLimit <= 0) {
|
|
27
|
+
throw new Error(`TRON_FEE_LIMIT_SUN must be a positive integer (in SUN), got "${value}".`);
|
|
28
|
+
}
|
|
29
|
+
return feeLimit;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Reads the configuration for a network from environment variables.
|
|
33
|
+
* Defaults to the network named by TRON_NETWORK.
|
|
34
|
+
*/
|
|
35
|
+
export function loadConfig(network = parseNetwork(readEnv('TRON_NETWORK'))) {
|
|
36
|
+
const prefix = `TRON_${network.toUpperCase()}`;
|
|
37
|
+
const privateKey = requireEnv(`${prefix}_PRIVATE_KEY`).replace(/^0x/i, '');
|
|
38
|
+
if (!/^[0-9a-fA-F]{64}$/.test(privateKey)) {
|
|
39
|
+
throw new Error(`${prefix}_PRIVATE_KEY must be a 64-character hex string.`);
|
|
40
|
+
}
|
|
41
|
+
const config = resolveServiceConfig({
|
|
42
|
+
network,
|
|
43
|
+
fullHost: requireEnv(`${prefix}_FULL_HOST`),
|
|
44
|
+
apiKey: readEnv(`${prefix}_API_KEY`),
|
|
45
|
+
usdtContract: readEnv(`${prefix}_USDT_CONTRACT`),
|
|
46
|
+
feeLimitSun: parseFeeLimit(readEnv('TRON_FEE_LIMIT_SUN')),
|
|
47
|
+
});
|
|
48
|
+
return { ...config, privateKey };
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=env.js.map
|
package/dist/env.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA,2GAA2G;AAC3G,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAGnD,SAAS,OAAO,CAAC,IAAY;IAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;IACxC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACnC,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,yCAAyC,IAAI,qBAAqB,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,YAAY,CAAC,KAAyB;IAC7C,MAAM,OAAO,GAAG,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;IACnD,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,qDAAqD,KAAK,IAAI,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,aAAa,CAAC,KAAyB;IAC9C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CAAC,gEAAgE,KAAK,IAAI,CAAC,CAAC;IAC7F,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,UAAuB,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACrF,MAAM,MAAM,GAAG,QAAQ,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;IAC/C,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,MAAM,cAAc,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAE3E,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,iDAAiD,CAAC,CAAC;IAC9E,CAAC;IAED,MAAM,MAAM,GAAG,oBAAoB,CAAC;QAClC,OAAO;QACP,QAAQ,EAAE,UAAU,CAAC,GAAG,MAAM,YAAY,CAAC;QAC3C,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,UAAU,CAAC;QACpC,YAAY,EAAE,OAAO,CAAC,GAAG,MAAM,gBAAgB,CAAC;QAChD,WAAW,EAAE,aAAa,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;KAC1D,CAAC,CAAC;IACH,OAAO,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,CAAC;AACnC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
3
|
-
export
|
|
1
|
+
export { TronTransferService, TronTransferError } from './services.js';
|
|
2
|
+
export type { TronTransferErrorCode } from './services.js';
|
|
3
|
+
export { PrivateKeySigner } from './signer.js';
|
|
4
|
+
export type { TronSigner } from './signer.js';
|
|
5
|
+
export { resolveServiceConfig, DEFAULT_FEE_LIMIT_SUN, DEFAULT_RATE_LIMIT_RETRIES } from './config.js';
|
|
6
|
+
export type { NetworkConfig, ServiceConfig, TronNetwork, TronTransferServiceConfig } from './config.js';
|
|
4
7
|
export { createTronWeb } from './client.js';
|
|
5
|
-
export {
|
|
6
|
-
export
|
|
8
|
+
export type { TronWebOptions } from './client.js';
|
|
9
|
+
export { fromBaseUnits, toBaseUnits } from './utils.js';
|
|
10
|
+
export type { Amount, EnvTransferOptions, TokenBalanceParams, TransferOptions, TransferResult, TransferTokenParams, TransferTrxParams, } from './types.js';
|
|
7
11
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvE,YAAY,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACtG,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACxG,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACxD,YAAY,EACV,MAAM,EACN,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
export {
|
|
1
|
+
// Browser-safe entry: no dotenv, no filesystem or process.env access. The .env helpers live in ./node.
|
|
2
|
+
export { TronTransferService, TronTransferError } from './services.js';
|
|
3
|
+
export { PrivateKeySigner } from './signer.js';
|
|
4
|
+
export { resolveServiceConfig, DEFAULT_FEE_LIMIT_SUN, DEFAULT_RATE_LIMIT_RETRIES } from './config.js';
|
|
3
5
|
export { createTronWeb } from './client.js';
|
|
4
|
-
export { toBaseUnits } from './utils.js';
|
|
6
|
+
export { fromBaseUnits, toBaseUnits } from './utils.js';
|
|
5
7
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,uGAAuG;AACvG,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEtG,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/node.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { TronNetwork } from './config.js';
|
|
2
|
+
import { loadConfig } from './env.js';
|
|
3
|
+
import { TronTransferService } from './services.js';
|
|
4
|
+
import type { EnvTransferOptions, TransferResult, TransferTokenParams, TransferTrxParams } from './types.js';
|
|
5
|
+
export * from './index.js';
|
|
6
|
+
export { loadConfig };
|
|
7
|
+
/** A TronTransferService that signs with TRON_<NET>_PRIVATE_KEY from .env. */
|
|
8
|
+
export declare function createTransferServiceFromEnv(network?: TronNetwork): TronTransferService;
|
|
9
|
+
/**
|
|
10
|
+
* Sends native TRX from the account configured in .env.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* await transferTrx({ to: 'TXYZ...', amount: '10' }); // 10 TRX
|
|
14
|
+
*/
|
|
15
|
+
export declare function transferTrx(params: TransferTrxParams & EnvTransferOptions): Promise<TransferResult>;
|
|
16
|
+
/**
|
|
17
|
+
* Sends a TRC-20 token (USDT by default) from the account configured in .env.
|
|
18
|
+
* The sender needs TRX to pay for energy; up to `feeLimitSun` may be burned.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* await transferToken({ to: 'TXYZ...', amount: '5' }); // 5 USDT
|
|
22
|
+
* await transferToken({ to: 'TXYZ...', amount: '1.25', tokenAddress: 'T...' }); // any TRC-20
|
|
23
|
+
*/
|
|
24
|
+
export declare function transferToken(params: TransferTokenParams & EnvTransferOptions): Promise<TransferResult>;
|
|
25
|
+
//# sourceMappingURL=node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE7G,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,CAAC;AAEtB,8EAA8E;AAC9E,wBAAgB,4BAA4B,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,mBAAmB,CAGvF;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,kBAAkB,GAAG,OAAO,CAAC,cAAc,CAAC,CAGzG;AAED;;;;;;;GAOG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,kBAAkB,GAAG,OAAO,CAAC,cAAc,CAAC,CAG7G"}
|
package/dist/node.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { loadConfig } from './env.js';
|
|
2
|
+
import { TronTransferService } from './services.js';
|
|
3
|
+
import { PrivateKeySigner } from './signer.js';
|
|
4
|
+
export * from './index.js';
|
|
5
|
+
export { loadConfig };
|
|
6
|
+
/** A TronTransferService that signs with TRON_<NET>_PRIVATE_KEY from .env. */
|
|
7
|
+
export function createTransferServiceFromEnv(network) {
|
|
8
|
+
const config = loadConfig(network);
|
|
9
|
+
return new TronTransferService(new PrivateKeySigner(config.privateKey), config);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Sends native TRX from the account configured in .env.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* await transferTrx({ to: 'TXYZ...', amount: '10' }); // 10 TRX
|
|
16
|
+
*/
|
|
17
|
+
export async function transferTrx(params) {
|
|
18
|
+
const { network, ...transfer } = params;
|
|
19
|
+
return createTransferServiceFromEnv(network).transferTrx(transfer);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Sends a TRC-20 token (USDT by default) from the account configured in .env.
|
|
23
|
+
* The sender needs TRX to pay for energy; up to `feeLimitSun` may be burned.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* await transferToken({ to: 'TXYZ...', amount: '5' }); // 5 USDT
|
|
27
|
+
* await transferToken({ to: 'TXYZ...', amount: '1.25', tokenAddress: 'T...' }); // any TRC-20
|
|
28
|
+
*/
|
|
29
|
+
export async function transferToken(params) {
|
|
30
|
+
const { network, ...transfer } = params;
|
|
31
|
+
return createTransferServiceFromEnv(network).transferToken(transfer);
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=node.js.map
|
package/dist/node.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG/C,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,CAAC;AAEtB,8EAA8E;AAC9E,MAAM,UAAU,4BAA4B,CAAC,OAAqB;IAChE,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACnC,OAAO,IAAI,mBAAmB,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC;AAClF,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAA8C;IAC9E,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,MAAM,CAAC;IACxC,OAAO,4BAA4B,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AACrE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAgD;IAClF,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,MAAM,CAAC;IACxC,OAAO,4BAA4B,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AACvE,CAAC"}
|
package/dist/services.d.ts
CHANGED
|
@@ -1,23 +1,64 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
1
|
+
import { TronWeb } from 'tronweb';
|
|
2
|
+
import type { ServiceConfig, TronTransferServiceConfig } from './config.js';
|
|
3
|
+
import type { TronSigner } from './signer.js';
|
|
4
|
+
import type { TokenBalanceParams, TransferResult, TransferTokenParams, TransferTrxParams } from './types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Machine-readable reason for some failures, for UIs to branch on:
|
|
7
|
+
* - `RATE_LIMITED`: the node answered HTTP 429 even after retries.
|
|
8
|
+
* - `ACCESS_DENIED`: the node answered HTTP 403 (IP blocked, daily quota used up, or a bad apiKey).
|
|
9
|
+
* - `NOT_SIGNED`: the signer threw, e.g. the user rejected the request in their wallet.
|
|
10
|
+
*/
|
|
11
|
+
export type TronTransferErrorCode = 'RATE_LIMITED' | 'ACCESS_DENIED' | 'NOT_SIGNED';
|
|
12
|
+
/** Thrown for any failed transfer. `txid` is set when the transaction may have reached the network. */
|
|
3
13
|
export declare class TronTransferError extends Error {
|
|
4
14
|
readonly txid: string | undefined;
|
|
5
|
-
|
|
15
|
+
readonly code: TronTransferErrorCode | undefined;
|
|
16
|
+
constructor(message: string, txid?: string, options?: {
|
|
17
|
+
cause?: unknown;
|
|
18
|
+
code?: TronTransferErrorCode;
|
|
19
|
+
});
|
|
6
20
|
}
|
|
7
21
|
/**
|
|
8
|
-
* Sends
|
|
22
|
+
* Sends TRX and TRC-20 tokens, with every transaction signed by `signer`.
|
|
9
23
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
|
|
13
|
-
export declare function transferTrx(params: TransferTrxParams): Promise<TransferResult>;
|
|
14
|
-
/**
|
|
15
|
-
* Sends a TRC-20 token (USDT by default) from the account configured in .env.
|
|
16
|
-
* The sender needs TRX to pay for energy; up to `feeLimitSun` may be burned.
|
|
24
|
+
* In a browser, pass the connected wallet adapter (or `useWallet()`) as the signer: the SDK builds
|
|
25
|
+
* and checks the transaction, the wallet asks the user to approve it, and the SDK broadcasts it and
|
|
26
|
+
* waits for confirmation. The TronWeb client here never holds a private key.
|
|
17
27
|
*
|
|
18
28
|
* @example
|
|
19
|
-
*
|
|
20
|
-
* await transferToken({ to: 'TXYZ...', amount: '
|
|
29
|
+
* const service = new TronTransferService(adapter, { network: 'mainnet', apiKey: TRONGRID_KEY });
|
|
30
|
+
* await service.transferToken({ to: 'TXYZ...', amount: '5' }); // 5 USDT
|
|
21
31
|
*/
|
|
22
|
-
export declare
|
|
32
|
+
export declare class TronTransferService {
|
|
33
|
+
#private;
|
|
34
|
+
readonly signer: TronSigner;
|
|
35
|
+
readonly config: ServiceConfig;
|
|
36
|
+
readonly tronWeb: TronWeb;
|
|
37
|
+
constructor(signer: TronSigner, config: TronTransferServiceConfig);
|
|
38
|
+
/**
|
|
39
|
+
* Sends native TRX from the signer's account.
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* await service.transferTrx({ to: 'TXYZ...', amount: '10' }); // 10 TRX
|
|
43
|
+
*/
|
|
44
|
+
transferTrx(params: TransferTrxParams): Promise<TransferResult>;
|
|
45
|
+
/**
|
|
46
|
+
* Sends a TRC-20 token (USDT by default) from the signer's account.
|
|
47
|
+
* The sender needs TRX to pay for energy; up to `feeLimitSun` may be burned.
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* await service.transferToken({ to: 'TXYZ...', amount: '5' }); // 5 USDT
|
|
51
|
+
* await service.transferToken({ to: 'TXYZ...', amount: '1.25', tokenAddress: 'T...' }); // any TRC-20
|
|
52
|
+
*/
|
|
53
|
+
transferToken(params: TransferTokenParams): Promise<TransferResult>;
|
|
54
|
+
/**
|
|
55
|
+
* TRX balance in whole TRX (e.g. "12.5"), from the full node's latest state.
|
|
56
|
+
* Defaults to the signer's address.
|
|
57
|
+
*/
|
|
58
|
+
getTrxBalance(address?: string): Promise<string>;
|
|
59
|
+
/**
|
|
60
|
+
* TRC-20 balance in whole tokens (e.g. "5.25"). Defaults to USDT and the signer's address.
|
|
61
|
+
*/
|
|
62
|
+
getTokenBalance(params?: TokenBalanceParams): Promise<string>;
|
|
63
|
+
}
|
|
23
64
|
//# sourceMappingURL=services.d.ts.map
|
package/dist/services.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../src/services.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../src/services.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAIlC,OAAO,KAAK,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EACV,kBAAkB,EAElB,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AASpB;;;;;GAKG;AACH,MAAM,MAAM,qBAAqB,GAAG,cAAc,GAAG,eAAe,GAAG,YAAY,CAAC;AAEpF,uGAAuG;AACvG,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,qBAAqB,GAAG,SAAS,CAAC;gBAErC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,qBAAqB,CAAA;KAAO;CAM5G;AAwCD;;;;;;;;;;GAUG;AACH,qBAAa,mBAAmB;;IAO5B,QAAQ,CAAC,MAAM,EAAE,UAAU;IAN7B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;gBAKf,MAAM,EAAE,UAAU,EAC3B,MAAM,EAAE,yBAAyB;IAMnC;;;;;OAKG;IACG,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,CAAC;IAwBrE;;;;;;;OAOG;IACG,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,CAAC;IAuCzE;;;OAGG;IACG,aAAa,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOtD;;OAEG;IACG,eAAe,CAAC,MAAM,GAAE,kBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC;CA8NxE"}
|