{"_id":"@0xfnzero/pancakeswap-sdk","name":"@0xfnzero/pancakeswap-sdk","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@0xfnzero/pancakeswap-sdk","version":"1.0.0","description":"TypeScript SDK for PancakeSwap V2 on BSC - Trading, Liquidity Management, and Event Monitoring","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","build:watch":"tsc --watch","clean":"rm -rf dist","prepublishOnly":"npm run clean && npm run build","example":"ts-node examples/pancakeswapExample.ts"},"keywords":["bsc","binance-smart-chain","pancakeswap","dex","defi","amm","uniswap-v2","trading","liquidity","web3","ethereum","sdk","typescript","swap","router","factory"],"author":{"name":"fnzero","email":"contact@fnzero.dev"},"license":"MIT","homepage":"https://github.com/0xfnzero/pancakeswap-sdk#readme","bugs":{"url":"https://github.com/0xfnzero/pancakeswap-sdk/issues"},"repository":{"type":"git","url":"git+https://github.com/0xfnzero/pancakeswap-sdk.git"},"publishConfig":{"access":"public"},"dependencies":{"ethers":"^6.13.0"},"devDependencies":{"@types/node":"^20.14.0","ts-node":"^10.9.2","typescript":"^5.5.0"},"engines":{"node":">=18.0.0"},"gitHead":"613e7e1e0b13154ef884b9b6da0b1d838dfeecb1","_id":"@0xfnzero/pancakeswap-sdk@1.0.0","_nodeVersion":"22.20.0","_npmVersion":"11.6.1","dist":{"integrity":"sha512-ttmkhgCzW6ee2/O5T+NLYGbsdlj+Q4ezSCIfxb76ICNY2PZGIUWOo+tQzTuJBW59GvJFbnJm1W+Nq+WCJtLIAA==","shasum":"c5650130f26e756e5b33fe89c7b66de86d2e5685","tarball":"https://registry.npmjs.org/@0xfnzero/pancakeswap-sdk/-/pancakeswap-sdk-1.0.0.tgz","fileCount":16,"unpackedSize":77539,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD1OlKhulR56pKjTpqmmb4OjVWFRyLIUHSywJak/5ppAwIhAKS2EMye3JaBxPR9l/DDHeQfcSOgQ6Rx7BwFjdmt84x3"}]},"_npmUser":{"name":"byteblock6","email":"byteblock6@gmail.com"},"directories":{},"maintainers":[{"name":"byteblock6","email":"byteblock6@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pancakeswap-sdk_1.0.0_1760259452040_0.8046521574596552"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-12T08:57:31.962Z","1.0.0":"2025-10-12T08:57:32.233Z","modified":"2025-10-12T08:57:32.524Z"},"maintainers":[{"name":"byteblock6","email":"byteblock6@gmail.com"}],"description":"TypeScript SDK for PancakeSwap V2 on BSC - Trading, Liquidity Management, and Event Monitoring","homepage":"https://github.com/0xfnzero/pancakeswap-sdk#readme","keywords":["bsc","binance-smart-chain","pancakeswap","dex","defi","amm","uniswap-v2","trading","liquidity","web3","ethereum","sdk","typescript","swap","router","factory"],"repository":{"type":"git","url":"git+https://github.com/0xfnzero/pancakeswap-sdk.git"},"author":{"name":"fnzero","email":"contact@fnzero.dev"},"bugs":{"url":"https://github.com/0xfnzero/pancakeswap-sdk/issues"},"license":"MIT","readme":"<div align=\"center\">\n    <h1>🥞 PancakeSwap V2 SDK</h1>\n    <h3><em>A comprehensive TypeScript SDK for seamless PancakeSwap V2 trading on BSC</em></h3>\n</div>\n\n<p align=\"center\">\n    <strong>Integrate PancakeSwap V2 trading, liquidity management, and event monitoring into your applications with powerful tools and unified interfaces.</strong>\n</p>\n\n<p align=\"center\">\n    <a href=\"https://www.npmjs.com/package/pancakeswap-sdk\">\n        <img src=\"https://img.shields.io/npm/v/pancakeswap-sdk.svg\" alt=\"npm version\">\n    </a>\n    <a href=\"https://www.npmjs.com/package/pancakeswap-sdk\">\n        <img src=\"https://img.shields.io/npm/dm/pancakeswap-sdk.svg\" alt=\"npm downloads\">\n    </a>\n    <a href=\"https://github.com/0xfnzero/pancakeswap-sdk/blob/main/LICENSE\">\n        <img src=\"https://img.shields.io/badge/license-MIT-blue.svg\" alt=\"License\">\n    </a>\n    <a href=\"https://github.com/0xfnzero/pancakeswap-sdk\">\n        <img src=\"https://img.shields.io/github/stars/0xfnzero/pancakeswap-sdk?style=social\" alt=\"GitHub stars\">\n    </a>\n    <a href=\"https://github.com/0xfnzero/pancakeswap-sdk/network\">\n        <img src=\"https://img.shields.io/github/forks/0xfnzero/pancakeswap-sdk?style=social\" alt=\"GitHub forks\">\n    </a>\n</p>\n\n<p align=\"center\">\n    <img src=\"https://img.shields.io/badge/TypeScript-007ACC?style=for-the-badge&logo=typescript&logoColor=white\" alt=\"TypeScript\">\n    <img src=\"https://img.shields.io/badge/BSC-F0B90B?style=for-the-badge&logo=binance&logoColor=white\" alt=\"Binance Smart Chain\">\n    <img src=\"https://img.shields.io/badge/PancakeSwap-633001?style=for-the-badge&logo=pancakeswap&logoColor=white\" alt=\"PancakeSwap\">\n    <img src=\"https://img.shields.io/badge/DEX-4B8BBE?style=for-the-badge&logo=bitcoin&logoColor=white\" alt=\"DEX Trading\">\n</p>\n\n<p align=\"center\">\n    <a href=\"https://github.com/0xfnzero/pancakeswap-sdk/blob/main/README_CN.md\">中文</a> |\n    <a href=\"https://github.com/0xfnzero/pancakeswap-sdk/blob/main/README.md\">English</a> |\n    <a href=\"https://fnzero.dev/\">Website</a> |\n    <a href=\"https://t.me/fnzero_group\">Telegram</a> |\n    <a href=\"https://discord.gg/vuazbGkqQE\">Discord</a>\n</p>\n\n---\n\nComplete TypeScript SDK for interacting with PancakeSwap V2 on Binance Smart Chain (BSC). Trade tokens, manage liquidity, and monitor on-chain events with ease.\n\n## Features\n\n- 🔄 **Token Swaps** - All swap variants (token-to-token, ETH/BNB swaps)\n- 💧 **Liquidity Management** - Add and remove liquidity\n- 📊 **Pair Monitoring** - Real-time event subscriptions\n- 🏭 **Factory Operations** - Query pairs and monitor creation\n- 🔍 **Query Functions** - Get prices, reserves, and token info\n- ⛽ **Gas Management** - Flexible gas price configuration\n- 📡 **Event Subscriptions** - Listen to on-chain events in real-time\n- 📜 **Historical Events** - Query past events with block range filters\n\n## Installation\n\n```bash\nnpm install @0xfnzero/pancakeswap-sdk\n# or\nyarn add @0xfnzero/pancakeswap-sdk\n```\n\n## Quick Start\n\n```typescript\nimport { PancakeRouter } from '@0xfnzero/pancakeswap-sdk';\n\nconst router = new PancakeRouter({\n  rpcUrl: 'https://bsc-dataseed.binance.org/',\n  privateKey: 'YOUR_PRIVATE_KEY',\n});\n\n// Swap BNB for tokens\nawait router.swapExactETHForTokens(\n  {\n    amountOutMin: '0', // Set slippage tolerance\n    path: [PancakeRouter.WBNB, TOKEN_ADDRESS],\n    to: router.getWalletAddress(),\n  },\n  '0.1' // 0.1 BNB\n);\n```\n\n## Usage Examples\n\n### 1. Token Swaps\n\n#### Swap Exact Tokens for Tokens\n\n```typescript\nimport { PancakeRouter } from '@0xfnzero/pancakeswap-sdk';\n\nconst router = new PancakeRouter({\n  rpcUrl: 'https://bsc-dataseed.binance.org/',\n  privateKey: 'YOUR_PRIVATE_KEY',\n});\n\n// First approve the router to spend your tokens\nawait router.approveToken(TOKEN_A_ADDRESS);\n\n// Swap 100 TOKEN_A for TOKEN_B\nconst result = await router.swapExactTokensForTokens({\n  amountIn: '100',\n  amountOutMin: '95', // 5% slippage tolerance\n  path: [TOKEN_A_ADDRESS, TOKEN_B_ADDRESS],\n  to: router.getWalletAddress(),\n  deadline: Math.floor(Date.now() / 1000) + 60 * 20, // 20 minutes\n});\n\nconsole.log(`Transaction hash: ${result.txHash}`);\n```\n\n#### Swap BNB for Tokens\n\n```typescript\n// Swap 0.1 BNB for tokens\nawait router.swapExactETHForTokens(\n  {\n    amountOutMin: '0',\n    path: [PancakeRouter.WBNB, TOKEN_ADDRESS],\n    to: router.getWalletAddress(),\n  },\n  '0.1' // 0.1 BNB\n);\n```\n\n#### Swap Tokens for BNB\n\n```typescript\n// Approve first\nawait router.approveToken(TOKEN_ADDRESS);\n\n// Swap tokens for BNB\nawait router.swapExactTokensForETH({\n  amountIn: '100',\n  amountOutMin: '0.05', // Minimum BNB to receive\n  path: [TOKEN_ADDRESS, PancakeRouter.WBNB],\n  to: router.getWalletAddress(),\n});\n```\n\n### 2. Liquidity Management\n\n#### Add Liquidity\n\n```typescript\n// Approve both tokens first\nawait router.approveToken(TOKEN_A_ADDRESS);\nawait router.approveToken(TOKEN_B_ADDRESS);\n\n// Add liquidity\nawait router.addLiquidity({\n  tokenA: TOKEN_A_ADDRESS,\n  tokenB: TOKEN_B_ADDRESS,\n  amountADesired: '100',\n  amountBDesired: '100',\n  amountAMin: '95', // 5% slippage\n  amountBMin: '95',\n  to: router.getWalletAddress(),\n});\n```\n\n#### Add Liquidity with BNB\n\n```typescript\nawait router.approveToken(TOKEN_ADDRESS);\n\nawait router.addLiquidityETH(\n  {\n    token: TOKEN_ADDRESS,\n    amountTokenDesired: '100',\n    amountTokenMin: '95',\n    amountETHMin: '0.095',\n    to: router.getWalletAddress(),\n  },\n  '0.1' // 0.1 BNB\n);\n```\n\n#### Remove Liquidity\n\n```typescript\nimport { PancakeFactory } from '@0xfnzero/pancakeswap-sdk';\n\n// Get pair address\nconst factory = new PancakeFactory({ rpcUrl: 'YOUR_RPC_URL' });\nconst pairAddress = await factory.getPair(TOKEN_A_ADDRESS, TOKEN_B_ADDRESS);\n\n// Approve LP tokens\nawait router.approveToken(pairAddress, '10'); // Approve 10 LP tokens\n\n// Remove liquidity\nawait router.removeLiquidity({\n  tokenA: TOKEN_A_ADDRESS,\n  tokenB: TOKEN_B_ADDRESS,\n  liquidity: '10',\n  amountAMin: '0',\n  amountBMin: '0',\n  to: router.getWalletAddress(),\n});\n```\n\n### 3. Query Functions\n\n#### Get Expected Output Amount\n\n```typescript\n// Get expected output for 1 TOKEN_A\nconst amounts = await router.getAmountsOut('1', [TOKEN_A_ADDRESS, TOKEN_B_ADDRESS]);\nconsole.log(`Expected output: ${amounts[1]} wei`);\n```\n\n#### Get Required Input Amount\n\n```typescript\n// Get required input to receive 100 TOKEN_B\nconst amounts = await router.getAmountsIn('100', [TOKEN_A_ADDRESS, TOKEN_B_ADDRESS]);\nconsole.log(`Required input: ${amounts[0]} wei`);\n```\n\n#### Check Balances\n\n```typescript\n// Get BNB balance\nconst bnbBalance = await router.getBNBBalance();\nconsole.log(`BNB Balance: ${bnbBalance}`);\n\n// Get token balance\nconst tokenBalance = await router.getTokenBalance(TOKEN_ADDRESS);\nconsole.log(`Token Balance: ${tokenBalance}`);\n```\n\n### 4. Factory Operations\n\n```typescript\nimport { PancakeFactory } from '@0xfnzero/pancakeswap-sdk';\n\nconst factory = new PancakeFactory({\n  rpcUrl: 'https://bsc-dataseed.binance.org/',\n});\n\n// Get pair address\nconst pairAddress = await factory.getPair(TOKEN_A_ADDRESS, TOKEN_B_ADDRESS);\nconsole.log(`Pair address: ${pairAddress}`);\n\n// Check if pair exists\nconst exists = await factory.pairExists(TOKEN_A_ADDRESS, TOKEN_B_ADDRESS);\nconsole.log(`Pair exists: ${exists}`);\n\n// Get all pairs count\nconst pairsCount = await factory.allPairsLength();\nconsole.log(`Total pairs: ${pairsCount}`);\n\n// Find all pairs for a token\nconst pairs = await factory.findPairsWithToken(TOKEN_ADDRESS);\nconsole.log(`Found ${pairs.length} pairs`);\n```\n\n### 5. Pair Operations\n\n```typescript\nimport { PancakePair } from '@0xfnzero/pancakeswap-sdk';\n\nconst pair = new PancakePair({\n  rpcUrl: 'https://bsc-dataseed.binance.org/',\n  pairAddress: 'PAIR_ADDRESS',\n});\n\n// Get comprehensive pair info\nconst pairInfo = await pair.getPairInfo();\nconsole.log(`Pair: ${pairInfo.token0.symbol}/${pairInfo.token1.symbol}`);\nconsole.log(`Price: ${pairInfo.price0}`);\nconsole.log(`Reserves: ${pairInfo.reserves.reserve0} / ${pairInfo.reserves.reserve1}`);\n\n// Get reserves\nconst reserves = await pair.getReserves();\nconsole.log(`Reserve0: ${reserves.reserve0}`);\nconsole.log(`Reserve1: ${reserves.reserve1}`);\n\n// Get token addresses\nconst token0 = await pair.token0();\nconst token1 = await pair.token1();\n\n// Get current price\nconst price = await pair.getPrice();\nconsole.log(`Token0 price in Token1: ${price.price0}`);\nconsole.log(`Token1 price in Token0: ${price.price1}`);\n```\n\n### 6. Event Subscriptions\n\n#### Subscribe to Pair Creation Events\n\n```typescript\nconst factory = new PancakeFactory({ rpcUrl: 'YOUR_RPC_URL' });\n\n// Listen for all pair creations\nconst listenerId = factory.onPairCreated((event) => {\n  console.log('New pair created!');\n  console.log(`Token0: ${event.token0}`);\n  console.log(`Token1: ${event.token1}`);\n  console.log(`Pair address: ${event.pair}`);\n});\n\n// Unsubscribe later\nfactory.off(listenerId);\n```\n\n#### Subscribe to Swap Events\n\n```typescript\nconst pair = new PancakePair({ rpcUrl: 'YOUR_RPC_URL', pairAddress: 'PAIR_ADDRESS' });\n\n// Listen for swaps\nconst swapListenerId = pair.onSwap((event) => {\n  console.log('Swap detected!');\n  console.log(`Amount0In: ${event.amount0In}`);\n  console.log(`Amount1Out: ${event.amount1Out}`);\n  console.log(`To: ${event.to}`);\n});\n\n// Unsubscribe\npair.off(swapListenerId);\n```\n\n#### Subscribe to Liquidity Events\n\n```typescript\n// Listen for liquidity additions\nconst mintListenerId = pair.onMint((event) => {\n  console.log('Liquidity added!');\n  console.log(`Amount0: ${event.amount0}`);\n  console.log(`Amount1: ${event.amount1}`);\n});\n\n// Listen for liquidity removals\nconst burnListenerId = pair.onBurn((event) => {\n  console.log('Liquidity removed!');\n  console.log(`Amount0: ${event.amount0}`);\n  console.log(`Amount1: ${event.amount1}`);\n});\n\n// Listen for reserve syncs\nconst syncListenerId = pair.onSync((event) => {\n  console.log('Reserves synced!');\n  console.log(`Reserve0: ${event.reserve0}`);\n  console.log(`Reserve1: ${event.reserve1}`);\n});\n```\n\n### 7. Query Historical Events\n\n```typescript\n// Get historical swap events\nconst swaps = await pair.getSwapEvents(0, 'latest');\nconsole.log(`Found ${swaps.length} swaps`);\n\n// Get historical pair creations\nconst creations = await factory.getPairCreatedEvents(undefined, undefined, 0, 'latest');\nconsole.log(`Found ${creations.length} pair creations`);\n\n// Get mints for specific block range\nconst mints = await pair.getMintEvents(30000000, 30100000);\nconsole.log(`Found ${mints.length} liquidity additions`);\n```\n\n### 8. Gas Management\n\n```typescript\n// Custom gas settings\nawait router.swapExactETHForTokens(\n  {\n    amountOutMin: '0',\n    path: [PancakeRouter.WBNB, TOKEN_ADDRESS],\n    to: router.getWalletAddress(),\n    gas: {\n      gasLimit: 300000,\n      gasPrice: '5', // 5 gwei\n    },\n  },\n  '0.1'\n);\n\n// EIP-1559 style gas (BSC supports this now)\nawait router.swapExactTokensForTokens({\n  amountIn: '100',\n  amountOutMin: '95',\n  path: [TOKEN_A_ADDRESS, TOKEN_B_ADDRESS],\n  to: router.getWalletAddress(),\n  gas: {\n    maxFeePerGas: '10',\n    maxPriorityFeePerGas: '2',\n  },\n});\n```\n\n## Contract Addresses (BSC Mainnet)\n\n```typescript\n// Router\nPancakeRouter.DEFAULT_ROUTER = '0x10ED43C718714eb63d5aA57B78B54704E256024E';\n\n// Factory\nPancakeFactory.DEFAULT_FACTORY = '0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73';\n\n// WBNB\nPancakeRouter.WBNB = '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c';\n```\n\n## Common Token Addresses (BSC)\n\n```typescript\nconst BUSD = '0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56';\nconst USDT = '0x55d398326f99059fF775485246999027B3197955';\nconst CAKE = '0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82';\nconst ETH = '0x2170Ed0880ac9A755fd29B2688956BD959F933F8';\nconst BTCB = '0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c';\n```\n\n## API Reference\n\n### PancakeRouter\n\n- `swapExactTokensForTokens(params)` - Swap exact input tokens\n- `swapTokensForExactTokens(params)` - Swap for exact output tokens\n- `swapExactETHForTokens(params, ethAmount)` - Swap BNB for tokens\n- `swapETHForExactTokens(params, maxETH)` - Swap BNB for exact tokens\n- `swapExactTokensForETH(params)` - Swap tokens for BNB\n- `swapTokensForExactETH(params)` - Swap for exact BNB\n- `addLiquidity(params)` - Add liquidity for token pair\n- `addLiquidityETH(params, ethAmount)` - Add liquidity with BNB\n- `removeLiquidity(params)` - Remove liquidity\n- `removeLiquidityETH(params)` - Remove liquidity with BNB\n- `approveToken(tokenAddress, amount?)` - Approve token spending\n- `getAmountsOut(amountIn, path)` - Get expected output amounts\n- `getAmountsIn(amountOut, path)` - Get required input amounts\n\n### PancakeFactory\n\n- `getPair(tokenA, tokenB)` - Get pair address\n- `pairExists(tokenA, tokenB)` - Check if pair exists\n- `allPairsLength()` - Get total pairs count\n- `allPairs(index)` - Get pair by index\n- `getAllPairs()` - Get all pair addresses\n- `findPairsWithToken(tokenAddress)` - Find pairs containing token\n- `onPairCreated(listener)` - Subscribe to pair creation events\n- `getPairCreatedEvents(token0?, token1?, fromBlock?, toBlock?)` - Query historical events\n\n### PancakePair\n\n- `getReserves()` - Get current reserves\n- `token0()` - Get token0 address\n- `token1()` - Get token1 address\n- `getPrice()` - Get current token prices\n- `getPairInfo()` - Get comprehensive pair information\n- `getTokensInfo()` - Get detailed token information\n- `totalSupply()` - Get LP token supply\n- `balanceOf(address)` - Get LP token balance\n- `onMint(listener)` - Subscribe to liquidity additions\n- `onBurn(listener)` - Subscribe to liquidity removals\n- `onSwap(listener)` - Subscribe to swap events\n- `onSync(listener)` - Subscribe to reserve updates\n- `getSwapEvents(fromBlock?, toBlock?)` - Query historical swaps\n- `getMintEvents(fromBlock?, toBlock?)` - Query historical mints\n- `getBurnEvents(fromBlock?, toBlock?)` - Query historical burns\n\n## TypeScript Support\n\nThis SDK is written in TypeScript and includes full type definitions.\n\n```typescript\nimport {\n  PancakeRouter,\n  PancakeFactory,\n  PancakePair,\n  SwapExactTokensParams,\n  AddLiquidityParams,\n  TransactionResult,\n} from '@0xfnzero/pancakeswap-sdk';\n```\n\n## Error Handling\n\n```typescript\ntry {\n  const result = await router.swapExactETHForTokens(\n    {\n      amountOutMin: '0',\n      path: [PancakeRouter.WBNB, TOKEN_ADDRESS],\n      to: router.getWalletAddress(),\n    },\n    '0.1'\n  );\n  console.log(`Success: ${result.txHash}`);\n} catch (error) {\n  console.error('Swap failed:', error.message);\n  // Handle error appropriately\n}\n```\n\n## Requirements\n\n- Node.js >= 18.0.0\n- ethers.js ^6.13.0\n\n## License\n\nMIT\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n## Security\n\nThis SDK handles private keys. Always keep your private keys secure and never commit them to version control.\n\n## Disclaimer\n\nThis SDK is provided as-is. Use at your own risk. Always test on testnet before using with real funds.\n\n---\n\n<div align=\"center\">\n    <p>Made with ❤️ by <a href=\"https://fnzero.dev\">fnzero</a></p>\n    <p>\n        <a href=\"https://github.com/0xfnzero/pancakeswap-sdk\">GitHub</a> •\n        <a href=\"https://t.me/fnzero_group\">Telegram</a> •\n        <a href=\"https://discord.gg/vuazbGkqQE\">Discord</a> •\n        <a href=\"https://twitter.com/0xfnzero\">Twitter</a>\n    </p>\n</div>\n","readmeFilename":"README.md","_rev":"1-f4002aa05a2875a6aafae36ee27753d2"}