{"_id":"@byreal-io/byreal-clmm-sdk","_rev":"4-cd852e6fa709fbb5fb4dd90030b071e0","name":"@byreal-io/byreal-clmm-sdk","dist-tags":{"latest":"0.2.2"},"versions":{"0.2.0":{"name":"@byreal-io/byreal-clmm-sdk","version":"0.2.0","keywords":["solana","clmm","concentrated-liquidity","defi","dex","amm","sdk"],"author":{"url":"https://github.com/byreal-git","name":"Byreal Team"},"license":"MIT","_id":"@byreal-io/byreal-clmm-sdk@0.2.0","maintainers":[{"name":"wangyulue","email":"wangyulue@gmail.com"},{"name":"byreal-admin","email":"app@byreal.io"}],"homepage":"https://github.com/byreal-git/byreal-clmm-sdk","bugs":{"url":"https://github.com/byreal-git/byreal-clmm-sdk/issues"},"dist":{"shasum":"7946c85ccd8581532367a1ee7654c6a2c8194eaa","tarball":"https://registry.npmjs.org/@byreal-io/byreal-clmm-sdk/-/byreal-clmm-sdk-0.2.0.tgz","fileCount":181,"integrity":"sha512-d/ZmHnbv6e+etJPcZuyZjSde4h8x/ByHZg8sHN4r6NhSXD01HqPiiKBRQ++TyZWwA1IYsLKvWUE+r8WcqcKRQg==","signatures":[{"sig":"MEUCIQCvpb5hGJK6OF0MtG6xDsS4rYVlID8ETeafjt/yWfLfZgIgePI5TX3mALw8Hg9LnM9sO3iqTzwL7P4hPZ3hlNB25ME=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1688168},"main":"./dist/esm/index.js","type":"module","types":"./dist/esm/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js","default":"./dist/esm/index.js"},"./package.json":"./package.json"},"gitHead":"3211825ff0b0c39c7b4770f0642108da1159cfc0","scripts":{"test":"vitest","build":"npm run clean && tsc","clean":"rm -rf dist","postversion":"git push && git push --tags","prepublishOnly":"npm run build"},"_npmUser":{"name":"wangyulue","email":"wangyulue@gmail.com"},"repository":{"url":"git+https://github.com/byreal-git/byreal-clmm-sdk.git","type":"git"},"_npmVersion":"11.4.2","description":"Byreal CLMM SDK for Solana","directories":{},"_nodeVersion":"24.3.0","dependencies":{"bs58":"^6.0.0","bn.js":"^5.2.1","lodash-es":"^4.17.21","decimal.js":"^10.5.0","@noble/hashes":"^1.8.0","@solana/web3.js":"^1.98.4","@coral-xyz/anchor":"^0.31.1","@solana/spl-token":"^0.4.14","@solana/buffer-layout":"^4.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"dotenv":"^16.5.0","vitest":"^3.0.9","typescript":"~5.7.2"},"_npmOperationalInternal":{"tmp":"tmp/byreal-clmm-sdk_0.2.0_1773652162128_0.6820992698772523","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@byreal-io/byreal-clmm-sdk","version":"0.2.1","keywords":["solana","clmm","concentrated-liquidity","defi","dex","amm","sdk"],"author":{"url":"https://github.com/byreal-git","name":"Byreal Team"},"license":"MIT","_id":"@byreal-io/byreal-clmm-sdk@0.2.1","maintainers":[{"name":"wangyulue","email":"wangyulue@gmail.com"},{"name":"byreal-admin","email":"app@byreal.io"}],"homepage":"https://github.com/byreal-git/byreal-clmm-sdk","bugs":{"url":"https://github.com/byreal-git/byreal-clmm-sdk/issues"},"dist":{"shasum":"860fcfa297e676ffdc196028e376d2c5c6a4c10d","tarball":"https://registry.npmjs.org/@byreal-io/byreal-clmm-sdk/-/byreal-clmm-sdk-0.2.1.tgz","fileCount":181,"integrity":"sha512-Y5d0mksX3ohuT+5Fwr7yCFYEkH2yKk5stEu12RJBg54mNy9MKapuO7sKg1HTZKiSleO2swO4/+pA7vuV9J2qIg==","signatures":[{"sig":"MEUCIF0Pya0oNkobD+EVftACx22JtjNRIUVhoHZGI4RZyxqJAiEAwEHf5S4ZbVsfQxXd5WWXs3mC5dpcx1qicBKgdpxOIOA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1688156},"main":"./dist/esm/index.js","type":"module","types":"./dist/esm/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js","default":"./dist/esm/index.js"},"./package.json":"./package.json"},"gitHead":"dff22adedbe1b193eed5013a68d735aceb00efe1","scripts":{"test":"vitest","build":"npm run clean && tsc","clean":"rm -rf dist","postversion":"git push && git push --tags","prepublishOnly":"npm run build"},"_npmUser":{"name":"wangyulue","email":"wangyulue@gmail.com"},"repository":{"url":"git+https://github.com/byreal-git/byreal-clmm-sdk.git","type":"git"},"_npmVersion":"11.4.2","description":"Byreal CLMM SDK for Solana","directories":{},"_nodeVersion":"24.3.0","dependencies":{"bs58":"6.0.0","bn.js":"5.2.2","lodash-es":"4.17.21","decimal.js":"10.5.0","@noble/hashes":"1.8.0","@solana/web3.js":"1.98.4","@coral-xyz/anchor":"0.31.1","@solana/spl-token":"0.4.14","@solana/buffer-layout":"4.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"dotenv":"16.5.0","vitest":"3.2.3","typescript":"5.7.3"},"_npmOperationalInternal":{"tmp":"tmp/byreal-clmm-sdk_0.2.1_1773652713858_0.3973240778703002","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@byreal-io/byreal-clmm-sdk","version":"0.2.2","keywords":["solana","clmm","concentrated-liquidity","defi","dex","amm","sdk"],"author":{"url":"https://github.com/byreal-git","name":"Byreal Team"},"license":"MIT","_id":"@byreal-io/byreal-clmm-sdk@0.2.2","maintainers":[{"name":"wangyulue","email":"wangyulue@gmail.com"},{"name":"byreal-admin","email":"app@byreal.io"}],"homepage":"https://github.com/byreal-git/byreal-clmm-sdk","bugs":{"url":"https://github.com/byreal-git/byreal-clmm-sdk/issues"},"dist":{"shasum":"37ca2793f1b26a1ed121623a775c1c0f76d57018","tarball":"https://registry.npmjs.org/@byreal-io/byreal-clmm-sdk/-/byreal-clmm-sdk-0.2.2.tgz","fileCount":181,"integrity":"sha512-YPsYuVKMfPxXR2fBwZELqcj8iV+mrb2cCi6R2UgoE+6+QbrFbsdlsrMi6RhDabmXXH7Q5nIByBgdtTtfTR2bLw==","signatures":[{"sig":"MEQCIHR7qb58KIbWKVb824j993UNsEH6Wjo9tV1lbmTWGW4sAiAW7brYz2mSml+l05+82oxf/VmnCt9Phn8vbDp79wynow==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1688739},"main":"./dist/esm/index.js","type":"module","types":"./dist/esm/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js","default":"./dist/esm/index.js"},"./package.json":"./package.json"},"gitHead":"64c6de8ce59b30b4d299399ae1b3c987e36a71ec","scripts":{"test":"vitest","build":"npm run clean && tsc","clean":"rm -rf dist","postversion":"git push && git push --tags","prepublishOnly":"npm run build"},"_npmUser":{"name":"wangyulue","email":"wangyulue@gmail.com"},"repository":{"url":"git+https://github.com/byreal-git/byreal-clmm-sdk.git","type":"git"},"_npmVersion":"11.4.2","description":"Byreal CLMM SDK for Solana","directories":{},"_nodeVersion":"24.3.0","dependencies":{"bs58":"6.0.0","bn.js":"5.2.3","lodash-es":"4.17.23","decimal.js":"10.5.0","@noble/hashes":"1.8.0","@solana/web3.js":"1.98.4","@solana/spl-memo":"0.2.5","@coral-xyz/anchor":"0.31.1","@solana/spl-token":"0.4.14","@solana/buffer-layout":"4.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"dotenv":"16.5.0","vitest":"4.1.0","typescript":"5.7.3"},"_npmOperationalInternal":{"tmp":"tmp/byreal-clmm-sdk_0.2.2_1773656979634_0.8435128980951323","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-03-16T09:09:22.039Z","modified":"2026-03-17T02:37:46.587Z","0.2.0":"2026-03-16T09:09:22.307Z","0.2.1":"2026-03-16T09:18:34.085Z","0.2.2":"2026-03-16T10:29:39.846Z"},"bugs":{"url":"https://github.com/byreal-git/byreal-clmm-sdk/issues"},"author":{"url":"https://github.com/byreal-git","name":"Byreal Team"},"license":"MIT","homepage":"https://github.com/byreal-git/byreal-clmm-sdk","keywords":["solana","clmm","concentrated-liquidity","defi","dex","amm","sdk"],"repository":{"url":"git+https://github.com/byreal-git/byreal-clmm-sdk.git","type":"git"},"description":"Byreal CLMM SDK for Solana","maintainers":[{"email":"joe.he1@bybit.com","name":"joe1.hw"},{"email":"wangyulue@gmail.com","name":"wangyulue"},{"email":"app@byreal.io","name":"byreal-admin"}],"readme":"# Byreal CLMM SDK\n\nSolana concentrated liquidity market maker SDK for Byreal protocol.\n\n## Installation\n\n```bash\nnpm install @byreal-io/byreal-clmm-sdk\n```\n\n## Quick Start\n\n### Initialize SDK\n\n```typescript\nimport { Connection, Keypair, PublicKey } from '@solana/web3.js';\nimport { Chain, BYREAL_CLMM_PROGRAM_ID } from '@byreal-io/byreal-clmm-sdk';\n\n// Setup connection\nconst connection = new Connection('https://api.mainnet-beta.solana.com');\nconst wallet = Keypair.fromSecretKey(/* your secret key */);\n\n// Initialize Chain instance\nconst chain = new Chain({\n  connection,\n  programId: BYREAL_CLMM_PROGRAM_ID,\n});\n\n// Signer callback for transactions\nconst signerCallback = async (tx) => {\n  tx.sign([wallet]);\n  return tx;\n};\n```\n\n## Core Features\n\n### 1. Get Position Info\n\nQuery user positions and view liquidity details.\n\n```typescript\nimport { PublicKey } from '@solana/web3.js';\n\n// Get all positions for a user\nconst userAddress = new PublicKey('your-wallet-address');\nconst positionList = await chain.getRawPositionInfoListByUserAddress(userAddress);\n\n// Get detailed info for specific position\nconst nftMints = positionList.map((position) => position.nftMint);\n\nfor (const nftMint of nftMints) {\n  const positionInfo = await chain.getPositionInfoByNftMint(nftMint);\n\n  if (!positionInfo) continue;\n\n  const { uiPriceLower, uiPriceUpper, tokenA, tokenB } = positionInfo;\n\n  console.log(`NFT: ${nftMint.toBase58()}`);\n  console.log(`Price Range: ${uiPriceLower} - ${uiPriceUpper}`);\n  console.log(`TokenA Amount: ${tokenA.uiAmount}`);\n  console.log(`TokenA Fees: ${tokenA.uiFeeAmount}`);\n  console.log(`TokenB Amount: ${tokenB.uiAmount}`);\n  console.log(`TokenB Fees: ${tokenB.uiFeeAmount}`);\n}\n```\n\n### 2. Create Position\n\nCreate a new liquidity position within a specific price range.\n\n```typescript\nimport BN from 'bn.js';\nimport { Decimal } from 'decimal.js';\nimport { TickMath } from '@byreal-io/byreal-clmm-sdk';\n\n// Step 1: Get pool info\nconst poolId = new PublicKey('your-pool-address');\nconst poolInfo = await chain.getRawPoolInfoByPoolId(poolId);\n\n// Step 2: Define price range and align to ticks\nconst userStartPrice = '0.998';\nconst userEndPrice = '1.002';\n\nconst priceInTickLower = TickMath.getTickAlignedPriceDetails(\n  new Decimal(userStartPrice),\n  poolInfo.tickSpacing,\n  poolInfo.mintDecimalsA,\n  poolInfo.mintDecimalsB,\n);\n\nconst priceInTickUpper = TickMath.getTickAlignedPriceDetails(\n  new Decimal(userEndPrice),\n  poolInfo.tickSpacing,\n  poolInfo.mintDecimalsA,\n  poolInfo.mintDecimalsB,\n);\n\n// Step 3: Calculate required amounts\nconst base = 'MintA'; // Which token to use as base\nconst baseAmount = new BN(2 * 10 ** poolInfo.mintDecimalsA);\n\n// Calculate the amount of TokenB needed\nconst amountB = chain.getAmountBFromAmountA({\n  priceLower: priceInTickLower.price,\n  priceUpper: priceInTickUpper.price,\n  amountA: baseAmount,\n  poolInfo,\n});\n\n// Add 2% slippage\nconst amountBWithSlippage = new BN(amountB).mul(new BN(10000 * (1 + 0.02))).div(new BN(10000));\n\n// Step 4: Create position\nconst txid = await chain.createPosition({\n  userAddress,\n  poolInfo,\n  tickLower: priceInTickLower.tick,\n  tickUpper: priceInTickUpper.tick,\n  base,\n  baseAmount,\n  otherAmountMax: amountBWithSlippage,\n  signerCallback,\n});\n\nconsole.log('Position created:', txid);\n```\n\n### 3. Remove Liquidity\n\nRemove all liquidity and close the position.\n\n```typescript\nimport { PublicKey } from '@solana/web3.js';\n\nconst nftMint = new PublicKey('your-position-nft-mint');\n\nconst txid = await chain.decreaseFullLiquidity({\n  userAddress,\n  nftMint,\n  signerCallback,\n});\n\nconsole.log('Liquidity removed:', txid);\n```\n\n### 4. Collect Fees\n\nCollect accumulated fees from a position.\n\n```typescript\nimport { PublicKey } from '@solana/web3.js';\n\nconst nftMint = new PublicKey('your-position-nft-mint');\n\nconst txid = await chain.collectFees({\n  userAddress,\n  nftMint,\n  signerCallback,\n});\n\nconsole.log('Fees collected:', txid);\n```\n\n### 5. Swap Tokens\n\nSwap tokens using the concentrated liquidity pool.\n\n#### Exact Input Swap\n\nSpecify input amount, get estimated output.\n\n```typescript\nimport BN from 'bn.js';\n\n// Get pool info\nconst poolInfo = await chain.getRawPoolInfoByPoolId(poolId);\n\n// Define input amount\nconst amountIn = new BN(1 * 10 ** poolInfo.mintDecimalsA);\n\n// Step 1: Get quote\nconst quoteReturn = await chain.qouteSwap({\n  poolInfo,\n  slippage: 0.01, // 1% slippage\n  inputTokenMint: poolInfo.mintA, // Swap from TokenA\n  amountIn,\n});\n\nconsole.log('Expected output:', quoteReturn.expectedAmountOut.toString());\nconsole.log('Min output:', quoteReturn.minAmountOut.toString());\nconsole.log('Execution price:', quoteReturn.executionPrice.toString());\nconsole.log('Fee:', quoteReturn.feeAmount.toString());\n\n// Step 2: Execute swap\nconst txid = await chain.swap({\n  poolInfo,\n  quoteReturn,\n  userAddress,\n  signerCallback,\n});\n\nconsole.log('Swap executed:', txid);\n```\n\n#### Exact Output Swap\n\nSpecify desired output amount, get required input.\n\n```typescript\nimport BN from 'bn.js';\n\nconst poolInfo = await chain.getRawPoolInfoByPoolId(poolId);\nconst amountOut = new BN(1 * 10 ** poolInfo.mintDecimalsB);\n\n// Get quote for exact output\nconst quoteReturn = await chain.quoteSwapExactOut({\n  poolInfo,\n  slippage: 0.01,\n  outputTokenMint: poolInfo.mintB, // Want to receive TokenB\n  amountOut,\n});\n\nconsole.log('Expected input:', quoteReturn.expectedAmountIn.toString());\nconsole.log('Max input:', quoteReturn.maxAmountIn.toString());\n\n// Execute swap\nconst txid = await chain.swapExactOut({\n  poolInfo,\n  quoteReturn,\n  userAddress,\n  signerCallback,\n});\n\nconsole.log('Swap executed:', txid);\n```\n\n## Utility Functions\n\n### Price and Tick Conversions\n\n```typescript\nimport { TickMath, SqrtPriceMath } from '@byreal-io/byreal-clmm-sdk';\nimport { Decimal } from 'decimal.js';\n\n// Align price to valid tick\nconst priceDetails = TickMath.getTickAlignedPriceDetails(new Decimal('1.0025'), tickSpacing, decimalsA, decimalsB);\n// Returns: { tick, price, sqrtPriceX64 }\n\n// Tick to price\nconst price = TickMath.getPriceFromTick(tick, decimalsA, decimalsB);\n\n// Price to tick\nconst tick = SqrtPriceMath.getTickFromPrice(price, decimalsA, decimalsB);\n\n// Get position PDA from NFT mint\nimport { getPdaPersonalPositionAddress } from '@byreal-io/byreal-clmm-sdk';\n\nconst { publicKey: positionPda } = getPdaPersonalPositionAddress(programId, nftMint);\n```\n\n## Type Definitions\n\n### SignerCallback\n\nTransaction signing callback for wallet integration.\n\n```typescript\nimport { Transaction } from '@solana/web3.js';\n\ntype SignerCallback = (tx: Transaction) => Promise<Transaction>;\n```\n\n### Common Types\n\n```typescript\n// Position info with UI-friendly values\ninterface PositionInfo {\n  nftMint: PublicKey;\n  poolId: PublicKey;\n  uiPriceLower: string; // Human-readable lower price\n  uiPriceUpper: string; // Human-readable upper price\n  tokenA: {\n    address: PublicKey;\n    uiAmount: string; // Current liquidity amount\n    uiFeeAmount: string; // Accumulated fees\n    decimals: number;\n  };\n  tokenB: {\n    address: PublicKey;\n    uiAmount: string;\n    uiFeeAmount: string;\n    decimals: number;\n  };\n}\n\n// Swap quote result\ninterface SwapQuoteReturn {\n  allTrade: boolean; // Whether full amount can be traded\n  expectedAmountOut: BN; // Expected output amount\n  minAmountOut: BN; // Min output with slippage\n  amountIn: BN; // Input amount\n  feeAmount: BN; // Swap fee\n  executionPrice: Decimal; // Actual execution price\n  remainingAccounts: PublicKey[]; // Required tick array accounts\n}\n```\n\n## Examples\n\nMore examples are available in the [examples](./examples) directory:\n\n- Position management: `07_create_position_*.ts`, `15_add_liquidity.ts`\n- Liquidity removal: `08_decrease_liquidity.ts`, `13_decrease_full_liquidity.ts`\n- Fee collection: `14_collect_fees.ts`, `17_collect_all_fees.ts`\n- Swapping: `21_swap_a_to_b.ts`, `22_swap_b_to_a.ts`\n- APR calculations: `18_calculate_apr*.ts`\n\n## Development\n\n```bash\n# Install dependencies\nnpm install\n\n# Build\nnpm run build\n\n# Run tests\nnpm test\n\n# Run playground examples\nbun run src/playgrounds/03_get_raw_pool_info.ts\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}