Skip to content

TypeScript SDK

The official TypeScript SDK wraps the Tegro Finance DEX so you can read market data, quote swaps and liquidity, and build ready-to-sign transactions — in a few lines, with full types.

Terminal window
npm install @tegroton/tegro-finance

Node.js ≥ 18 (uses global fetch). Works in the browser too. TON Connect is an optional peer dependency, needed only where you actually sign.

  • API mode — a thin, typed HTTP client over https://api.tegro.finance. Read pools/assets, quote, and let the backend prepare transactions.
  • On-chain mode — build swap & liquidity transactions entirely client-side with TegroFinanceRouter, with no dependency on our backend. Message bodies are verified byte-for-byte against the production contracts.

Both are non-custodial: the user’s wallet signs every state change via TON Connect. The SDK never holds, sees, or transmits a private key.

import { TegroFinanceClient, toUnits, fromUnits, TON_NATIVE_ADDRESS } from "@tegroton/tegro-finance";
const client = new TegroFinanceClient();
const assets = await client.getAssets();
const tgr = Object.values(assets).find((a) => a.symbol === "TGR")!;
const quote = await client.simulateSwap({
offerAddress: TON_NATIVE_ADDRESS,
askAddress: tgr.contract_address,
units: toUnits("1", 9), // 1 TON
slippageTolerance: 0.01, // 1%
});
console.log(`1 TON → ~${fromUnits(quote.ask_units, tgr.decimals)} TGR`);
import {
TegroFinanceClient, toUnits, applySlippage, toTonConnectMessages, TON_NATIVE_ADDRESS,
} from "@tegroton/tegro-finance";
import { useTonConnectUI, useTonAddress } from "@tonconnect/ui-react";
const client = new TegroFinanceClient();
const [tonConnectUI] = useTonConnectUI();
const userAddress = useTonAddress();
const offerUnits = toUnits("1", 9);
const quote = await client.simulateSwap({
offerAddress: TON_NATIVE_ADDRESS, askAddress: tgrAddress, units: offerUnits, slippageTolerance: 0.01,
});
const tx = await client.buildSwap({
userWalletAddress: userAddress,
offerJettonAddress: TON_NATIVE_ADDRESS,
offerAmount: offerUnits,
askJettonAddress: tgrAddress,
minAskAmount: applySlippage(quote.ask_units, 0.01),
});
await tonConnectUI.sendTransaction(toTonConnectMessages(tx));
import { TegroFinanceRouter, tonApiResolver, cachingResolver } from "@tegroton/tegro-finance";
const router = new TegroFinanceRouter({
routerAddress: "", // read from /api/v1/pools
proxyTonAddress: "", // the router's pTON wallet master
resolver: cachingResolver(tonApiResolver()),
});
const tx = await router.getSwapTxParams({ /* same params as buildSwap */ });
await tonConnectUI.sendTransaction(tx); // already TON Connect-shaped

getProvideLiquidityTxParams, getCreatePoolTxParams, getRemoveLiquidityTxParams and getUnlockPoolTxParams work the same way.

  • toUnits / fromUnits — BigInt-exact conversion between human amounts and smallest units.
  • applySlippage(expected, tolerance) — floor the minimum you’ll accept.
  • toTonConnectMessages(tx) — adapt an API-built transaction to sendTransaction().