{"_id":"@apex_labs/sdk","_rev":"14-435a30d502d3cd691261e435a4981b48","name":"@apex_labs/sdk","dist-tags":{"latest":"0.7.4"},"versions":{"0.1.0":{"name":"@apex_labs/sdk","version":"0.1.0","license":"MIT","_id":"@apex_labs/sdk@0.1.0","maintainers":[{"name":"trantorapex","email":"trantor2140@gmail.com"}],"dist":{"shasum":"a4c6f9d69804baf5b7317be0347d2288d35e2ba8","tarball":"https://registry.npmjs.org/@apex_labs/sdk/-/sdk-0.1.0.tgz","fileCount":9,"integrity":"sha512-v+7VVorpz2dL1ZvVKQL/xHplhGFSy54u4VHEv3BiLvwAnkLuNjSkdMWfDNNBwL7nlkKLlf3gqU/o0kbpDycfpw==","signatures":[{"sig":"MEUCIQCm6peV6pNLXBPYbcFZkOrNLnva+aeP4jxSs+Hbt0pPDAIgG3PxtDe3allhXTZletBaayK7IoiK1JR5CbLYL4ezQCE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1849756},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"6bdb6a0fd80fc60f372e66e9e8d445a23e9c45fc","scripts":{"test":"vitest run","build":"tsup","sync:abis":"node ./scripts/sync-abis.mjs","typecheck":"tsc --noEmit"},"_npmUser":{"name":"trantorapex","email":"trantor2140@gmail.com"},"_npmVersion":"9.2.0","description":"Apex SDK with a pinned internal Pancake v3 SDK fork plus Apex CL, Classic, and periphery helpers.","directories":{},"_nodeVersion":"18.19.1","dependencies":{"viem":"2.37.13","big.js":"^5.2.2","toformat":"^2.0.0","tiny-warning":"^1.0.3","tiny-invariant":"^1.3.3","@pancakeswap/sdk":"5.9.0","decimal.js-light":"^2.5.0","@pancakeswap/chains":"0.8.0","@pancakeswap/swap-sdk-core":"1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vitest":"^3.2.4","typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.1.0_1782600679278_0.9633352080756103","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Stale deployment registry; upgrade to 0.7.4 or newer."},"0.1.1":{"name":"@apex_labs/sdk","version":"0.1.1","license":"MIT","_id":"@apex_labs/sdk@0.1.1","maintainers":[{"name":"trantorapex","email":"trantor2140@gmail.com"}],"dist":{"shasum":"1910599a6bdcfa85dfc7f4c35cc52555abc1bc4f","tarball":"https://registry.npmjs.org/@apex_labs/sdk/-/sdk-0.1.1.tgz","fileCount":9,"integrity":"sha512-QvYpORM2t5hcWm1ZbbenJ7IQXho/XOp7rEA9Enjk34aCB8ks8gswWuEbR8y6fN5wMHZH4BaSHZnXQoLQanOruA==","signatures":[{"sig":"MEQCIDTmUrB8hywtjIcrr9V2hgtte11RVxQ3hZNxaFQNPIWwAiBD0wcuDiE1x7jYhA7okUvkcN23sxzetz81+xNJ8uHuFg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1858418},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"5e00ef25087c0d04ce0dab1659be0f9971073bf0","scripts":{"test":"vitest run","build":"tsup","sync:abis":"node ./scripts/sync-abis.mjs","typecheck":"tsc --noEmit"},"_npmUser":{"name":"trantorapex","email":"trantor2140@gmail.com"},"_npmVersion":"11.16.0","description":"Apex SDK with a pinned internal Pancake v3 SDK fork plus Apex CL, Classic, and periphery helpers.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"viem":"2.37.13","big.js":"^5.2.2","toformat":"^2.0.0","tiny-warning":"^1.0.3","tiny-invariant":"^1.3.3","@pancakeswap/sdk":"5.9.0","decimal.js-light":"^2.5.0","@pancakeswap/chains":"0.8.0","@pancakeswap/swap-sdk-core":"1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vitest":"^3.2.4","typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.1.1_1782602973268_0.31974128686910785","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Stale deployment registry; upgrade to 0.7.4 or newer."},"0.1.2":{"name":"@apex_labs/sdk","version":"0.1.2","license":"MIT","_id":"@apex_labs/sdk@0.1.2","maintainers":[{"name":"trantorapex","email":"trantor2140@gmail.com"}],"dist":{"shasum":"d7d5f6fee646b499083eb4fc0a8050a183a4f92c","tarball":"https://registry.npmjs.org/@apex_labs/sdk/-/sdk-0.1.2.tgz","fileCount":9,"integrity":"sha512-oL3FqyLr+7F0h3h7YxxjL7tLZ36NfPi0F34G2Y7kIrThD0MKKc/bXFSoHnn5sl320iOZkBuuZJ8Y5jTSa1R00Q==","signatures":[{"sig":"MEQCHwYQOatWoZWSBpUGuN3cU5dOUqQsvUwHhGPitNDeLhYCIQC7VrdszsbzmCuOx/4LochhqzppPHxdXGwKndoJKdGv7g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1858990},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"9e317b334e772b734e44af7dea502fd5669b8a12","scripts":{"test":"vitest run","build":"tsup","sync:abis":"node ./scripts/sync-abis.mjs","typecheck":"tsc --noEmit"},"_npmUser":{"name":"trantorapex","email":"trantor2140@gmail.com"},"_npmVersion":"11.16.0","description":"Apex SDK with a pinned internal Pancake v3 SDK fork plus Apex CL, Classic, and periphery helpers.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"viem":"2.37.13","big.js":"^5.2.2","toformat":"^2.0.0","tiny-warning":"^1.0.3","tiny-invariant":"^1.3.3","@pancakeswap/sdk":"5.9.0","decimal.js-light":"^2.5.0","@pancakeswap/chains":"0.8.0","@pancakeswap/swap-sdk-core":"1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vitest":"^3.2.4","typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.1.2_1782603693267_0.7838779124499957","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Stale deployment registry; upgrade to 0.7.4 or newer."},"0.2.0":{"name":"@apex_labs/sdk","version":"0.2.0","license":"MIT","_id":"@apex_labs/sdk@0.2.0","maintainers":[{"name":"trantorapex","email":"trantor2140@gmail.com"}],"dist":{"shasum":"e8054764cfac5fabf70aca2f417b3576e50e973a","tarball":"https://registry.npmjs.org/@apex_labs/sdk/-/sdk-0.2.0.tgz","fileCount":7,"integrity":"sha512-9QdcYY83wuKZxZq3F/VE2ZzFxyItcV22CyzugXEGPABuwPNWdM2nqgTsvhv16WrQ0zzg73VYFQly43XgNklKuw==","signatures":[{"sig":"MEUCIQCacAqqPAggcHx9dp/n4kYP+0UGuNXfdvzXzdUIZKPMCQIgClwK4ERl/zt4RPXLJSghkYgPY06+ZpWdYvAHsh+TiKY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1292221},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"94b021011c83f01100c14ee20f5518c4d52490b5","scripts":{"test":"vitest run","build":"tsup","sync:abis":"node ./scripts/sync-abis.mjs","typecheck":"tsc --noEmit"},"_npmUser":{"name":"trantorapex","email":"trantor2140@gmail.com"},"_npmVersion":"11.16.0","description":"TypeScript SDK for Apex CL pools, Classic pools, routing, farms, ApexVault, and contract ABIs.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"viem":"2.37.13","big.js":"^5.2.2","toformat":"^2.0.0","tiny-warning":"^1.0.3","tiny-invariant":"^1.3.3","@pancakeswap/sdk":"5.9.0","decimal.js-light":"^2.5.0","@pancakeswap/chains":"0.8.0","@pancakeswap/swap-sdk-core":"1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vitest":"^3.2.4","typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.2.0_1782604441565_0.43154321918337213","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Stale deployment registry; upgrade to 0.7.4 or newer."},"0.3.0":{"name":"@apex_labs/sdk","version":"0.3.0","license":"MIT","_id":"@apex_labs/sdk@0.3.0","maintainers":[{"name":"trantorapex","email":"trantor2140@gmail.com"}],"dist":{"shasum":"0c9b7372b33e7594841279efdf25c33ec24c026f","tarball":"https://registry.npmjs.org/@apex_labs/sdk/-/sdk-0.3.0.tgz","fileCount":8,"integrity":"sha512-MlPFblz/YX1f0lp1YOSbz/K9PY0dByftTa3AI/2DbtFhY7Dm0EWUk+q7RbTtFVS2bcFm3ihfgmuEI+2/WPt2WA==","signatures":[{"sig":"MEUCIQDXDWnYBbqUEs9mvkSPTelJbtFsHUQysPb1RkcGQ/uZngIgBukJMNvuuJmLgbOIGWYcCUdzOlSr1sGH6XUwzyqdqrU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1297999},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"0d85015cce06cdcb1a8d122e5504b6ab83ffec33","scripts":{"test":"vitest run","build":"tsup","sync:abis":"node ./scripts/sync-abis.mjs","typecheck":"tsc --noEmit"},"_npmUser":{"name":"trantorapex","email":"trantor2140@gmail.com"},"_npmVersion":"9.2.0","description":"TypeScript SDK for Apex CL pools, Classic pools, routing, farms, ApexVault, and contract ABIs.","directories":{},"_nodeVersion":"18.19.1","dependencies":{"viem":"2.37.13","big.js":"^5.2.2","toformat":"^2.0.0","tiny-warning":"^1.0.3","tiny-invariant":"^1.3.3","@pancakeswap/sdk":"5.9.0","decimal.js-light":"^2.5.0","@pancakeswap/chains":"0.8.0","@pancakeswap/swap-sdk-core":"1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vitest":"^3.2.4","typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.3.0_1782838285344_0.9999352060066209","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Stale deployment registry; upgrade to 0.7.4 or newer."},"0.4.0":{"name":"@apex_labs/sdk","version":"0.4.0","license":"MIT","_id":"@apex_labs/sdk@0.4.0","maintainers":[{"name":"trantorapex","email":"trantor2140@gmail.com"}],"dist":{"shasum":"b40dfcd45b7d4af35034eac18b02ae239ec77961","tarball":"https://registry.npmjs.org/@apex_labs/sdk/-/sdk-0.4.0.tgz","fileCount":8,"integrity":"sha512-y5sY9WHXe/L0fdBW/CU7jsiksyRHLSErw0/Ef9Fq3MSeepyScFN3dE0hpKGvCALKjn8Kig39UvEgSIliFrgnNA==","signatures":[{"sig":"MEUCIDdp0opOux14RW7fxyU020YvXyKXG/nwNlHQOdXget8yAiEAtkWHlD/3O0scJkObGUUNf41mr5GvKnaxwlE84R1q+lk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1304721},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"88ee7aba91975e86ddf0032a57e042e24791b202","scripts":{"test":"vitest run","build":"tsup","sync:abis":"node ./scripts/sync-abis.mjs","typecheck":"tsc --noEmit"},"_npmUser":{"name":"trantorapex","email":"trantor2140@gmail.com"},"_npmVersion":"9.2.0","description":"TypeScript SDK for Apex CL pools, Classic pools, routing, farms, ApexVault, and contract ABIs.","directories":{},"_nodeVersion":"18.19.1","dependencies":{"viem":"2.37.13","big.js":"^5.2.2","toformat":"^2.0.0","tiny-warning":"^1.0.3","tiny-invariant":"^1.3.3","@pancakeswap/sdk":"5.9.0","decimal.js-light":"^2.5.0","@pancakeswap/chains":"0.8.0","@pancakeswap/swap-sdk-core":"1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vitest":"^3.2.4","typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.4.0_1782841184194_0.01594756920375051","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Stale deployment registry; upgrade to 0.7.4 or newer."},"0.5.0":{"name":"@apex_labs/sdk","version":"0.5.0","license":"MIT","_id":"@apex_labs/sdk@0.5.0","maintainers":[{"name":"trantorapex","email":"trantor2140@gmail.com"}],"dist":{"shasum":"71b53259955279fdd41d1faf372b4818e0fbe8e6","tarball":"https://registry.npmjs.org/@apex_labs/sdk/-/sdk-0.5.0.tgz","fileCount":8,"integrity":"sha512-JOt0WmgkPoVR6Vm2TY+4kaKAJ8GsTJC/3lxlRv03e3GBerAmImnwEMVeG4PkmvEoLLziriNgXxGH3i4jpOsZYQ==","signatures":[{"sig":"MEQCIBJC7RwXMGbS1DA0DbOyi1NRUX7bbdkz2lWPQKwrF5/cAiBOJG32acDhvYCD65mjghlGgXOv5Wr/UUhS66VorfplRw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1304365},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"696000a7d722334ea960e568e3601752bccda7c9","scripts":{"test":"vitest run","build":"tsup","sync:abis":"node ./scripts/sync-abis.mjs","typecheck":"tsc --noEmit"},"_npmUser":{"name":"trantorapex","email":"trantor2140@gmail.com"},"_npmVersion":"9.2.0","description":"TypeScript SDK for Apex CL pools, Classic pools, routing, farms, ApexVault, and contract ABIs.","directories":{},"_nodeVersion":"18.19.1","dependencies":{"viem":"2.37.13","big.js":"^5.2.2","toformat":"^2.0.0","tiny-warning":"^1.0.3","tiny-invariant":"^1.3.3","@pancakeswap/sdk":"5.9.0","decimal.js-light":"^2.5.0","@pancakeswap/chains":"0.8.0","@pancakeswap/swap-sdk-core":"1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vitest":"^3.2.4","typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.5.0_1782841892331_0.14308173607013663","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Stale deployment registry; upgrade to 0.7.4 or newer."},"0.6.0":{"name":"@apex_labs/sdk","version":"0.6.0","license":"MIT","_id":"@apex_labs/sdk@0.6.0","maintainers":[{"name":"trantorapex","email":"trantor2140@gmail.com"}],"dist":{"shasum":"14063b13c1713c281dc34d84195d041883d75d98","tarball":"https://registry.npmjs.org/@apex_labs/sdk/-/sdk-0.6.0.tgz","fileCount":8,"integrity":"sha512-84QxyH6O5DOtM258gx7pBzv8Nv0huNoTkzkCMReFOXWIadKY/yGtlNEdbiGbg13W9uVn2JQH3FBJWSDnWRZ0HQ==","signatures":[{"sig":"MEUCIAZFdZTkQAJZC0arNL5ZkKIvwBpd8n0h9dCIneSEr8aSAiEA+LW0f5RyDpyXeQz2I6cOA8d/4iqfcB82w2BrYsJXW1U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1302563},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"935ffc18c687ddf45b9629904056bb2f0c0656be","scripts":{"test":"vitest run","build":"tsup","sync:abis":"node ./scripts/sync-abis.mjs","typecheck":"tsc --noEmit"},"_npmUser":{"name":"trantorapex","email":"trantor2140@gmail.com"},"_npmVersion":"9.2.0","description":"TypeScript SDK for Apex CL pools, Classic pools, routing, farms, ApexVault, and contract ABIs.","directories":{},"_nodeVersion":"18.19.1","dependencies":{"viem":"2.37.13","big.js":"^5.2.2","toformat":"^2.0.0","tiny-warning":"^1.0.3","tiny-invariant":"^1.3.3","@pancakeswap/sdk":"5.9.0","decimal.js-light":"^2.5.0","@pancakeswap/chains":"0.8.0","@pancakeswap/swap-sdk-core":"1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vitest":"^3.2.4","typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.6.0_1782842315489_0.7022870316941412","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Stale deployment registry; upgrade to 0.7.4 or newer."},"0.7.0":{"name":"@apex_labs/sdk","version":"0.7.0","license":"MIT","_id":"@apex_labs/sdk@0.7.0","maintainers":[{"name":"trantorapex","email":"trantor2140@gmail.com"}],"dist":{"shasum":"291d74c987fed2cfc156d965b75a8190a99d6621","tarball":"https://registry.npmjs.org/@apex_labs/sdk/-/sdk-0.7.0.tgz","fileCount":8,"integrity":"sha512-zO/l10bIieKQBOrLX0rcYMfOi0JflthenwQu4o8yz690/nQg0TjRsIeyxEGjbUmoDQL682Ali+2SoAWJpVx0Nw==","signatures":[{"sig":"MEUCICjHEPSza6WolxWjPvlqxnVUeZauyFF+1uMQY9/q33vXAiEAiJsS5/HAd5T7sUL7okJxKb0YNxUgSbFUhZvXTvy9VGk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1345920},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"2f5e89ecf41795c70c966cb061d55d946f79a9e8","scripts":{"test":"vitest run","build":"tsup","sync:abis":"node ./scripts/sync-abis.mjs","typecheck":"tsc --noEmit"},"_npmUser":{"name":"trantorapex","email":"trantor2140@gmail.com"},"_npmVersion":"9.2.0","description":"TypeScript SDK for Apex CL pools, Classic pools, routing, farms, ApexVault, and contract ABIs.","directories":{},"_nodeVersion":"18.19.1","dependencies":{"viem":"2.37.13","big.js":"^5.2.2","toformat":"^2.0.0","tiny-warning":"^1.0.3","tiny-invariant":"^1.3.3","@pancakeswap/sdk":"5.9.0","decimal.js-light":"^2.5.0","@pancakeswap/chains":"0.8.0","@pancakeswap/swap-sdk-core":"1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vitest":"^3.2.4","typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.7.0_1782911854557_0.16265697430167214","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Stale deployment registry; upgrade to 0.7.4 or newer."},"0.7.1":{"name":"@apex_labs/sdk","version":"0.7.1","license":"MIT","_id":"@apex_labs/sdk@0.7.1","maintainers":[{"name":"trantorapex","email":"trantor2140@gmail.com"}],"dist":{"shasum":"38000cfbe28ab831be2ad7f1a4e314cc3121a1e8","tarball":"https://registry.npmjs.org/@apex_labs/sdk/-/sdk-0.7.1.tgz","fileCount":8,"integrity":"sha512-b7hCPIrCkypyElvF7VOMyCrOV/mvGA/jpan7fBujFqj11tKilNZRCbPTwWOfo+kKs12GWs6kB5JHeDmQ+86ysg==","signatures":[{"sig":"MEUCIQCl9iId80vLdE2w3u41o54JGry5uE+ljMsv/UUxLhhXUAIgSc7ZTnSDZznDaYwLpz0CaffErl4GMm2Pv9PRCGdatrM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1354769},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"702fcf638a9540cd76c671e9065d81ccae5bf4a6","scripts":{"test":"vitest run","build":"tsup","sync:abis":"node ./scripts/sync-abis.mjs","typecheck":"tsc --noEmit"},"_npmUser":{"name":"trantorapex","email":"trantor2140@gmail.com"},"_npmVersion":"9.2.0","description":"TypeScript SDK for Apex CL pools, Classic pools, routing, farms, ApexVault, and contract ABIs.","directories":{},"_nodeVersion":"18.19.1","dependencies":{"viem":"2.37.13","big.js":"^5.2.2","toformat":"^2.0.0","tiny-warning":"^1.0.3","tiny-invariant":"^1.3.3","@pancakeswap/sdk":"5.9.0","decimal.js-light":"^2.5.0","@pancakeswap/chains":"0.8.0","@pancakeswap/swap-sdk-core":"1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vitest":"^3.2.4","typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.7.1_1782936507937_0.3404746030967647","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Stale deployment registry; upgrade to 0.7.4 or newer."},"0.7.2":{"name":"@apex_labs/sdk","version":"0.7.2","license":"MIT","_id":"@apex_labs/sdk@0.7.2","maintainers":[{"name":"trantorapex","email":"trantor2140@gmail.com"}],"dist":{"shasum":"9f29feb795c396f9b1d3eaf01acdd466ce1463f6","tarball":"https://registry.npmjs.org/@apex_labs/sdk/-/sdk-0.7.2.tgz","fileCount":8,"integrity":"sha512-p2JsHd5Wa7MHHo5EOCewE//XJhWsWs+fu3E4UNNxaTlBXNXjKoIIuzgUY705zQ+G4x6C6B0knio/D9hHvCPimQ==","signatures":[{"sig":"MEQCICDua9+dQ5msjbw3zhVxjga4Y5fRvcJi2ouOWORbbC2+AiB83ESAP2FyI8mgzpk4s7jR5IFx3ya9L7oZjmLqN5FJ2g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1368957},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"04d14e32625925a559b538955ddb892e8658b5f7","scripts":{"test":"vitest run","build":"tsup","sync:abis":"node ./scripts/sync-abis.mjs","typecheck":"tsc --noEmit"},"_npmUser":{"name":"trantorapex","email":"trantor2140@gmail.com"},"_npmVersion":"9.2.0","description":"TypeScript SDK for Apex CL pools, Classic pools, routing, farms, ApexVault, and contract ABIs.","directories":{},"_nodeVersion":"18.19.1","dependencies":{"viem":"2.37.13","big.js":"^5.2.2","toformat":"^2.0.0","tiny-warning":"^1.0.3","tiny-invariant":"^1.3.3","@pancakeswap/sdk":"5.9.0","decimal.js-light":"^2.5.0","@pancakeswap/chains":"0.8.0","@pancakeswap/swap-sdk-core":"1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vitest":"^3.2.4","typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.7.2_1782943760748_0.9376812155614362","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Stale deployment registry; upgrade to 0.7.4 or newer."},"0.7.3":{"name":"@apex_labs/sdk","version":"0.7.3","license":"MIT","_id":"@apex_labs/sdk@0.7.3","maintainers":[{"name":"trantorapex","email":"trantor2140@gmail.com"}],"dist":{"shasum":"21de95956b0042c5472ab0bb9d3c843fb04c6698","tarball":"https://registry.npmjs.org/@apex_labs/sdk/-/sdk-0.7.3.tgz","fileCount":8,"integrity":"sha512-a2co6zRt6qwgSUxdmPc2pyQV81vwz2uzAlcS1nRX8aLXwMLsltqO83RjXqy/ylDejCjjMb08LINqk1nkpD4sOw==","signatures":[{"sig":"MEUCICGb1+JwuEYA58sTtJu9U3wLKZ169zIRX/dRZvXs7RrCAiEAsz3BILraWQAvq17G2aTfkt58Adtp1sdSld8wgbrqujA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1387037},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"bffc2545501f7aff24a6fba892f62cd29b054774","scripts":{"test":"vitest run","build":"tsup","sync:abis":"node ./scripts/sync-abis.mjs","typecheck":"tsc --noEmit"},"_npmUser":{"name":"trantorapex","email":"trantor2140@gmail.com"},"_npmVersion":"9.2.0","description":"TypeScript SDK for Apex CL pools, Classic pools, routing, farms, ApexVault, and contract ABIs.","directories":{},"_nodeVersion":"18.19.1","dependencies":{"viem":"2.37.13","big.js":"^5.2.2","toformat":"^2.0.0","tiny-warning":"^1.0.3","tiny-invariant":"^1.3.3","@pancakeswap/sdk":"5.9.0","decimal.js-light":"^2.5.0","@pancakeswap/chains":"0.8.0","@pancakeswap/swap-sdk-core":"1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vitest":"^3.2.4","typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.7.3_1782944369232_0.38262829699584966","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Stale deployment registry; upgrade to 0.7.4 or newer."},"0.7.4":{"name":"@apex_labs/sdk","version":"0.7.4","license":"MIT","_id":"@apex_labs/sdk@0.7.4","maintainers":[{"name":"trantorapex","email":"trantor2140@gmail.com"}],"homepage":"https://giga-dex.github.io/apex-sdk/","bugs":{"url":"https://github.com/giga-dex/apex-sdk/issues"},"dist":{"shasum":"c49bd7b7d94939f91d61cb89da2629946013fc5f","tarball":"https://registry.npmjs.org/@apex_labs/sdk/-/sdk-0.7.4.tgz","fileCount":10,"integrity":"sha512-DvJpi3WTTMaB4xzc+lP0hK50srAG4/AKYlo5XJTi0KCZJlAL18ZFySN2yT4xYABdFlehKMax8N1HzzpqKpwAlg==","signatures":[{"sig":"MEQCIDRcrZKrsTPnWCOozNthKlk8BHb8uOYsbArVziC4+dC4AiBO/XmziVoQoEP0SsOFuVsMgF+r26y57I9r48hH5/ODpg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3595499},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsup","verify":"npm run verify:abis && npm run typecheck && npm test && npm run build && npm run test:package && npm run package:check && npm run docs:build","prepack":"npm run verify:abis && npm run typecheck && npm test && npm run build && npm run test:package","docs:dev":"vitepress docs --host 127.0.0.1","changeset":"changeset","sync:abis":"node ./scripts/sync-abis.mjs","typecheck":"tsc --noEmit","docs:build":"vitepress build docs","verify:abis":"node ./scripts/sync-abis.mjs --verify-provenance","docs:preview":"vitepress preview docs --host 127.0.0.1","test:package":"node ./test/package-import.mjs && node ./test/package-require.cjs","package:check":"publint","version-packages":"changeset version"},"_npmUser":{"name":"trantorapex","email":"trantor2140@gmail.com"},"repository":{"url":"git+https://github.com/giga-dex/apex-sdk.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript SDK for Apex CL pools, Classic pools, routing, farms, ApexVault, and contract ABIs on Robinhood Chain.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"viem":"2.37.13","big.js":"^5.2.2","toformat":"^2.0.0","tiny-warning":"^1.0.3","tiny-invariant":"^1.3.3","@pancakeswap/sdk":"5.9.0","decimal.js-light":"^2.5.0","@pancakeswap/chains":"0.8.0","@pancakeswap/swap-sdk-core":"1.6.0"},"_hasShrinkwrap":false,"packageManager":"npm@11.16.0","devDependencies":{"tsup":"^8.5.0","vitest":"^3.2.4","publint":"^0.3.12","vitepress":"^1.6.4","typescript":"^5.9.2","@types/node":"^24.10.0","@changesets/cli":"^2.29.7"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.7.4_1784053694239_0.42173681886726766","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-06-27T22:51:19.050Z","modified":"2026-07-14T18:28:26.292Z","0.1.0":"2026-06-27T22:51:19.441Z","0.1.1":"2026-06-27T23:29:33.407Z","0.1.2":"2026-06-27T23:41:33.419Z","0.2.0":"2026-06-27T23:54:01.714Z","0.3.0":"2026-06-30T16:51:25.720Z","0.4.0":"2026-06-30T17:39:44.409Z","0.5.0":"2026-06-30T17:51:32.556Z","0.6.0":"2026-06-30T17:58:35.634Z","0.7.0":"2026-07-01T13:17:34.731Z","0.7.1":"2026-07-01T20:08:28.093Z","0.7.2":"2026-07-01T22:09:20.937Z","0.7.3":"2026-07-01T22:19:29.399Z","0.7.4":"2026-07-14T18:28:14.412Z"},"bugs":{"url":"https://github.com/giga-dex/apex-sdk/issues"},"license":"MIT","homepage":"https://giga-dex.github.io/apex-sdk/","repository":{"url":"git+https://github.com/giga-dex/apex-sdk.git","type":"git"},"description":"TypeScript SDK for Apex CL pools, Classic pools, routing, farms, ApexVault, and contract ABIs on Robinhood Chain.","maintainers":[{"name":"trantorapex","email":"trantor2140@gmail.com"}],"readme":"# Apex SDK\n\nProduction TypeScript SDK for Apex CL and Classic pools on Robinhood Chain. It provides canonical chain definitions, explicit deployment-state handling, Apex fee tiers, deterministic pool address helpers, Classic AMM quoting, mixed CL/Classic path encoding, transaction builders, and provenance-tracked contract ABIs.\n\nSupported execution environments are Node.js 22 or newer and modern bundlers. Both ESM and CommonJS package entry points are verified in CI.\n\n## Setup\n\n```bash\nnpm ci\nnpm run verify\n```\n\nInstall the published package:\n\n```bash\nnpm install @apex_labs/sdk\n```\n\n## Chains and deployments\n\nThe SDK exports chain definitions for Robinhood Chain mainnet (`4663`), Robinhood Chain testnet (`46630`), and local Anvil (`31337`):\n\n```ts\nimport {\n  ROBINHOOD_TESTNET_CHAIN_ID,\n  getApexDeployment,\n  robinhoodTestnet,\n} from \"@apex_labs/sdk\";\n\nconst state = getApexDeployment(ROBINHOOD_TESTNET_CHAIN_ID);\n\nif (!state || state.status === \"unavailable\") {\n  // Render a deliberate unavailable state. Never substitute stale addresses.\n  console.info(state?.message ?? \"unsupported chain\");\n} else {\n  const apex = state.config;\n  console.info(robinhoodTestnet.name, apex.clFactory);\n}\n```\n\nNo Apex contract deployment is bundled for Robinhood Chain yet. Address-bearing entries will only be added from a verified deployment manifest. For an ephemeral local deployment, load the generated manifest into an `ApexDeploymentConfig` instead of committing local addresses:\n\n```ts\nimport type { ApexDeploymentConfig } from \"@apex_labs/sdk\";\n\nexport const apex: ApexDeploymentConfig = {\n  chainId: 31337,\n  clFactory: \"0x...\",\n  clPoolDeployer: \"0x...\",\n  clSwapRouter: \"0x...\",\n  clQuoter: \"0x...\",\n  clNonfungiblePositionManager: \"0x...\",\n  clMasterChef: \"0x...\",\n  smartRouter: \"0x...\",\n  mixedQuoter: \"0x...\",\n  classicFactory: \"0x...\",\n  classicPairInitCodeHash: \"0x...\",\n  classicRouter: \"0x...\",\n  classicChef: \"0x...\",\n  weth: \"0x...\",\n};\n```\n\n## Core exports\n\n```ts\nimport {\n  CLFeeAmount,\n  APEX_CL_POOL_INIT_CODE_HASH,\n  APEX_CLASSIC_PAIR_INIT_CODE_HASH,\n  apexDeployments,\n  robinhoodMainnet,\n  robinhoodTestnet,\n  getApexDeployment,\n  requireApexDeployment,\n  ClassicChef,\n  ClassicRouter,\n  CLMasterChef,\n  SmartRouter,\n  ApexVault,\n  getUserStakedApexVaultNFTs,\n  getCLTickSpacing,\n  createCLPool,\n  computeCLPoolAddress,\n  getCLPoolStatus,\n  getClassicPoolStatus,\n  computeClassicPoolAddress,\n  quoteClassicExactInput,\n  encodeMixedRouteToPath,\n  encodeMixedRouteToQuoteParams,\n  decodeMixedRoutePath,\n  parseProtocolFeePacked,\n  clPoolAbi,\n  clFactoryAbi,\n  clMasterChefAbi,\n  nonfungiblePositionManagerAbi,\n  swapRouterAbi,\n  smartRouterAbi,\n  mixedQuoterAbi,\n  quoterV2Abi,\n  classicFactoryAbi,\n  classicPoolAbi,\n  classicRouterAbi,\n  Pool,\n  Route,\n  Trade,\n  SwapRouter,\n  NonfungiblePositionManager,\n  SwapQuoter,\n  TickMath,\n  nearestUsableTick,\n  encodeSqrtRatioX96,\n} from \"@apex_labs/sdk\";\n```\n\n### CL pool address\n\n```ts\nconst pool = computeCLPoolAddress({\n  config: apex,\n  tokenA,\n  tokenB,\n  fee: CLFeeAmount.FEE_0_30,\n});\n```\n\n### CL pool status\n\nUse `getCLPoolStatus` before deciding whether the UI should show fee unsupported, create pool, initialize pool, or add liquidity. Pass wrapped-native addresses for native pairs; for example, use WETH instead of an ETH placeholder.\n\n```ts\nconst result = await getCLPoolStatus({\n  client: publicClient,\n  config: apex,\n  tokenA: apex.weth,\n  tokenB: usdt0.address,\n  fee: CLFeeAmount.FEE_0_30,\n});\n\nif (result.status === \"UNSUPPORTED_FEE\") showUnsupportedFee();\nif (result.status === \"NOT_CREATED\") showCreatePool();\nif (result.status === \"NOT_INITIALIZED\") showInitializePool(result.pool);\nif (result.status === \"READY\") showAddLiquidity(result.pool);\n```\n\n### CL pool object\n\n```ts\nconst pool = createCLPool({\n  tokenA,\n  tokenB,\n  fee: CLFeeAmount.FEE_0_30,\n  sqrtRatioX96,\n  liquidity,\n  tickCurrent,\n  ticks,\n});\n```\n\n`createCLPool` returns an Apex CL `Pool` model with Apex fee tiers installed. Position, trade, route, quoter, swap-router, and NFT-position-manager logic should use the classes exported by `@apex_labs/sdk`.\n\n### Periphery ABIs\n\nUse the exact ABIs exported from compiled Apex contracts:\n\n```ts\nimport {\n  nonfungiblePositionManagerAbi,\n  swapRouterAbi,\n  quoterAbi,\n  quoterV2Abi,\n  smartRouterAbi,\n  mixedQuoterAbi,\n  tickLensAbi,\n  interfaceMulticallAbi,\n  clFactoryAbi,\n  clMasterChefAbi,\n  clPoolAbi,\n  classicFactoryAbi,\n  classicPoolAbi,\n  classicRouterAbi,\n} from \"@apex_labs/sdk\";\n```\n\n### Classic pair address\n\n```ts\nconst stablePair = computeClassicPoolAddress({\n  config: apex,\n  tokenA: tokenA.address,\n  tokenB: tokenB.address,\n  stable: true,\n});\n```\n\n### Classic quote\n\n```ts\nconst amountOut = quoteClassicExactInput({\n  amountIn,\n  tokenIn: tokenA.address,\n  token0,\n  token1,\n  reserve0,\n  reserve1,\n  token0Decimals: 18,\n  token1Decimals: 18,\n  stable: false,\n  fee,\n});\n```\n\n### Classic pool status\n\nUse `getClassicPoolStatus` before deciding whether the UI should show create, first-liquidity, or normal add-liquidity states. Pass wrapped-native addresses for native pairs; for example, use WETH instead of an ETH placeholder.\n\n```ts\nconst result = await getClassicPoolStatus({\n  client: publicClient,\n  config: apex,\n  tokenA: apex.weth,\n  tokenB: usdt0.address,\n  stable: false,\n});\n\nif (result.status === \"NOT_CREATED\") showCreateOrAddFirstLiquidity();\nif (result.status === \"NEEDS_LIQUIDITY\") showAddFirstLiquidity(result.pool);\nif (result.status === \"READY\") showAddLiquidity(result.pool);\n```\n\n### Wallet position discovery\n\nUse these helpers to list wallet-held liquidity positions. They do not include\nClassic LP staked in `ClassicChef` or CL NFTs staked in `CLMasterChef`.\n\n```ts\nconst positions = await getUserWalletLiquidityPositions({\n  client: publicClient,\n  config: apex,\n  account,\n});\n\npositions.classic; // wallet-held Classic pair LP positions\npositions.cl; // wallet-held CL NFT positions\n```\n\nIf the UI wants separate reads, call:\n\n```ts\nawait getUserClassicWalletLiquidityPositions({\n  client: publicClient,\n  config: apex,\n  account,\n});\n\nawait getUserCLWalletLiquidityPositions({\n  client: publicClient,\n  config: apex,\n  account,\n});\n```\n\n### Classic liquidity\n\nUse `ClassicRouter` for all Classic add/remove liquidity UX. Do not raw-transfer tokens to Classic pairs from the frontend. `addLiquidity` and `addLiquidityETH` create the pair if it does not exist, pull both assets atomically, and mint LP in one transaction.\n\n```ts\nconst add = ClassicRouter.addLiquidityCallParameters({\n  tokenA: apex.weth,\n  tokenB: usdt0.address,\n  stable: false,\n  amountADesired,\n  amountBDesired,\n  amountAMin,\n  amountBMin,\n  to: account,\n  deadline,\n});\n\nawait walletClient.sendTransaction({\n  to: apex.classicRouter,\n  data: add.calldata,\n  value: BigInt(add.value),\n});\n```\n\nFor native ETH deposits, use the ETH helper. The router wraps only the used ETH amount and refunds excess ETH.\n\n```ts\nconst addETH = ClassicRouter.addLiquidityETHCallParameters({\n  token: usdt0.address,\n  stable: false,\n  amountTokenDesired,\n  amountETHDesired,\n  amountTokenMin,\n  amountETHMin,\n  to: account,\n  deadline,\n});\n```\n\nDeployments whose `ClassicRouter` is wired to `ClassicChef` also support atomic\nadd-and-stake helpers. These mint LP to the router and immediately call\n`ClassicChef.depositFor(pid, liquidity, account)`, so the user receives a farm\nposition instead of wallet LP. The pair must already be registered in\n`ClassicChef`; otherwise the transaction reverts.\n\nThese selectors require the next `ClassicRouter` deployment that exposes\n`classicChef()`. Do not call them against an older router address.\n\n```ts\nconst addAndStake = ClassicRouter.addLiquidityAndStakeCallParameters({\n  tokenA: apex.weth,\n  tokenB: usdt0.address,\n  stable: false,\n  amountADesired,\n  amountBDesired,\n  amountAMin,\n  amountBMin,\n  to: account,\n  deadline,\n});\n\nconst addETHAndStake = ClassicRouter.addLiquidityETHAndStakeCallParameters({\n  token: usdt0.address,\n  stable: false,\n  amountTokenDesired,\n  amountETHDesired,\n  amountTokenMin,\n  amountETHMin,\n  to: account,\n  deadline,\n});\n```\n\nRemove paths are also router-only:\n\n```ts\nconst remove = ClassicRouter.removeLiquidityCallParameters({\n  tokenA: apex.weth,\n  tokenB: usdt0.address,\n  stable: false,\n  liquidity,\n  amountAMin,\n  amountBMin,\n  to: account,\n  deadline,\n});\n\nconst removeETH = ClassicRouter.removeLiquidityETHCallParameters({\n  token: usdt0.address,\n  stable: false,\n  liquidity,\n  amountTokenMin,\n  amountETHMin,\n  to: account,\n  deadline,\n});\n```\n\nFor LP already staked in `ClassicChef`, use the Chef helpers. The transaction\ntarget is `apex.classicChef`, not `apex.classicRouter`: the Chef must see the\nuser as `msg.sender`, withdraw the staked LP to the router, then the router\nburns it during the trusted callback. These selectors require the next\nClassicChef/ClassicRouter deployment that exposes `withdrawToAndCall` and\n`onClassicChefWithdraw`.\n\n```ts\nconst unstakeAndRemove = ClassicChef.withdrawAndRemoveLiquidityCallParameters({\n  pid,\n  classicRouter: apex.classicRouter,\n  tokenA: apex.weth,\n  tokenB: usdt0.address,\n  stable: false,\n  liquidity,\n  amountAMin,\n  amountBMin,\n  to: account,\n  deadline,\n});\n\nawait walletClient.sendTransaction({\n  to: apex.classicChef,\n  data: unstakeAndRemove.calldata,\n  value: BigInt(unstakeAndRemove.value),\n});\n\nconst unstakeAndRemoveETH = ClassicChef.withdrawAndRemoveLiquidityETHCallParameters({\n  pid,\n  classicRouter: apex.classicRouter,\n  token: usdt0.address,\n  stable: false,\n  liquidity,\n  amountTokenMin,\n  amountETHMin,\n  to: account,\n  deadline,\n});\n```\n\n### Classic farm UX\n\nUse `ClassicChef` for Classic LP staking. Pools are pid-based; read `ClassicChef.pidOf(pair)` from the exported ABI or an indexed farm list, then encode normal stake/claim/exit calls:\n\n```ts\nconst stakeClassic = ClassicChef.depositCallParameters({\n  pid,\n  amount,\n});\n\nconst stakeClassicFor = ClassicChef.depositForCallParameters({\n  pid,\n  amount,\n  account,\n});\n\nconst claimClassic = ClassicChef.harvestCallParameters({\n  pid,\n});\n\nconst exitClassic = ClassicChef.withdrawCallParameters({\n  pid,\n  amount,\n});\n\nconst exitClassicTo = ClassicChef.withdrawToCallParameters({\n  pid,\n  amount,\n  to: recipient,\n});\n```\n\n### Mixed CL/Classic path\n\n```ts\nconst path = encodeMixedRouteToPath([\n  {\n    kind: \"CL\",\n    tokenIn: tokenA.address,\n    tokenOut: tokenB.address,\n    fee: CLFeeAmount.FEE_0_30,\n  },\n  { kind: \"CLASSIC_STABLE\", tokenIn: tokenB.address, tokenOut: tokenC.address },\n]);\n```\n\nQuote that path through `MixedQuoter.quoteExactInput(path, amountIn)`, then execute it with\n`SmartRouter`. The high-level helpers encode the swap, then wrap it in `SmartRouter.multicall(deadlineOrPreviousBlockhash, data)`.\n\n```ts\nconst swap = SmartRouter.mixedExactInputCallParameters(\n  { hops, recipient: account, amountIn, amountOutMinimum },\n  { deadlineOrPreviousBlockhash: deadline },\n);\n```\n\nFor `MixedQuoter.quoteExactInput`, encode the route path and Classic-hop flags:\n\n```ts\nconst { path, flags } = encodeMixedRouteToQuoteParams(hops);\nconst quote = await publicClient.readContract({\n  address: apex.mixedQuoter,\n  abi: mixedQuoterAbi,\n  functionName: \"quoteExactInput\",\n  args: [path, flags, amountIn],\n});\n```\n\nFor routes split by protocol:\n\n```ts\n// Classic volatile section\nSmartRouter.classicExactInputCallParameters(\n  { amountIn, amountOutMin, path, recipient },\n  { deadlineOrPreviousBlockhash: deadline },\n);\n\n// Classic stable section\nSmartRouter.stableExactInputCallParameters(\n  { amountIn, amountOutMin, path, flags, recipient },\n  { deadlineOrPreviousBlockhash: deadline },\n);\n\n// CL section\nSmartRouter.exactInputCallParameters(\n  { path, recipient, amountIn, amountOutMinimum },\n  { deadlineOrPreviousBlockhash: deadline },\n);\n```\n\nUse the raw `encode*` helpers only when deliberately assembling a custom multicall. User-facing swaps should use `*CallParameters`, or `SmartRouter.swapCallParameters(rawCalls, options)` for custom batches. These require a deadline or previous blockhash.\n\nWhen `value` is nonzero, `SmartRouter` call-parameter helpers append `refundETH()` automatically. Token sweeps and WETH unwraps require explicit cleanup entries because the SDK cannot infer the intended token, recipient, or minimum amount for every route.\n\nThe mixed periphery is exact-input only. Use the CL-only `SwapRouter`/`QuoterV2` for CL exact-output routes.\n\n### CL farm UX\n\nUse `CLMasterChef` for staked CL positions. It encodes the supported paths without requiring applications to assemble Chef calls directly.\n\n```ts\nconst { calldata, value } = CLMasterChef.mintAndStakeCallParameters(\n  {\n    token0: tokenA.address,\n    token1: tokenB.address,\n    fee: CLFeeAmount.FEE_0_30,\n    tickLower,\n    tickUpper,\n    amount0Desired,\n    amount1Desired,\n    amount0Min,\n    amount1Min,\n    account,\n    deadline,\n  },\n  {\n    stakingReceiver: apex.clMasterChef,\n    nonfungiblePositionManager: apex.clNonfungiblePositionManager,\n  },\n);\n```\n\n`mintAndStakeCallParameters` takes `account` and encodes it as the staked NFT owner. It rejects the Chef and NFP manager as owners so callers cannot strand positions in protocol contracts.\n\nWhen minting with native ETH, pass `value` in the options object. The SDK appends `refundETH()` in the same NFP multicall only when value is nonzero.\n\nFor fee collection on staked NFTs, prefer `collectCallParameters` or `decreaseAndCollectCallParameters`:\n\n```ts\nconst collect = CLMasterChef.collectCallParameters({\n  tokenId,\n  recipient: account,\n});\n\nconst exitPart = CLMasterChef.decreaseAndCollectCallParameters(\n  { tokenId, liquidity, amount0Min, amount1Min, deadline },\n  { tokenId, recipient: account },\n);\n```\n\nThese helpers call `CLMasterChef.multicall(...)` and use `collectTo` with the inner collect recipient set to `address(0)`, so Chef receives the tokens first and immediately sweeps/unwraps them to the final recipient.\n\nFor a full exit, use `closeAndBurnCallParameters`:\n\n```ts\nconst close = CLMasterChef.closeAndBurnCallParameters(\n  { tokenId, liquidity, amount0Min, amount1Min, deadline },\n  { tokenId, recipient: account },\n);\n```\n\nThis encodes `harvest -> decreaseLiquidity -> collectTo -> burn`. The harvest happens before liquidity is removed, so it is safe even when rewards are zero and keeps `burn` compatible with strict empty-position semantics.\n\n### ApexVault UX\n\nUse `ApexVault` for user-facing VeApexToken actions. Users choose reward-token percentages and a compound percentage. Compound is not user-claimable APEX; the user config selects the compound bucket, and the protocol operator later calls the controller and ApexVault compound functions.\n\n```ts\nconst approveVault = ApexVault.encodeVeApexTokenApprove({\n  tokenId,\n  spender: apexVault,\n});\n\nconst stake = ApexVault.stakeCallParameters(tokenId, {\n  rewardConfigs: [\n    { rewardToken: weth, bps: 5_000 },\n    { rewardToken: usdc, bps: 2_000 },\n  ],\n  compoundBps: 3_000,\n});\n```\n\nThe helper rejects configs that do not sum to exactly `10_000` bps, repeat a reward token, use zero bps for a reward token, or use the zero address as a reward token.\n\nTo list a user's current staked veNFTs, call the SDK helper:\n\n```ts\nconst tokenIds = await getUserStakedApexVaultNFTs({\n  client: publicClient,\n  vault: apex.apexVault,\n  owner: account,\n});\n```\n\nPass `activeOnly: true` if the UI should hide vault positions that are still custodied but no longer active for rewards, such as positions flushed after becoming ineligible.\n\nThis is a current-state read and does not parse logs. Because ApexVault currently exposes `positionOwner(tokenId)` but not a direct `tokensOfOwner(owner)` view, the helper scans `VeApexToken.tokenOfOwnerByIndex(vault, index)` across the vault's custodied veNFTs and filters each token ID with ApexVault.\n\nFor an existing staked veNFT:\n\n```ts\nconst updateConfig = ApexVault.setUserConfigCallParameters(tokenId, {\n  rewardConfigs: [{ rewardToken: weth, bps: 7_000 }],\n  compoundBps: 3_000,\n});\n\nconst claim = ApexVault.claimCallParameters({\n  tokenId,\n  rewardTokens: [weth, usdc],\n});\n\nconst extend = ApexVault.extendLockCallParameters({\n  tokenId,\n  lockDuration: 26n * 7n * 86_400n,\n});\n\nconst increase = ApexVault.increaseAmountCallParameters({\n  tokenId,\n  amount,\n});\n```\n\nApexVault is custodial while a veNFT is staked. For staked veNFTs, route amount increases through `ApexVault.increaseAmountCallParameters(...)`, not raw `VeApexToken.depositFor(...)`, so ApexVault reward weights are refreshed. A direct VeApexToken transfer outside ApexVault is a normal NFT transfer and will not create vault position accounting; treat ApexVault stake and unstake as the canonical earning path.\n\n### ABI refresh\n\nAfter Solidity changes, build the canonical contracts repository and pass its explicit Forge artifact directory and Git commit to the SDK. The sync command never traverses to a parent repository or guesses an artifact source:\n\n```bash\nforge build\nnpm run sync:abis -- \\\n  --artifacts-dir /absolute/path/to/apex-contracts/out \\\n  --source-commit \"$(git -C /absolute/path/to/apex-contracts rev-parse HEAD)\" \\\n  --repository giga-dex/apex-contracts\nnpm run verify\n```\n\nUse the same command with `--check` in an artifact-integration job to detect ABI drift without writing. `src/abi/provenance.json` records the exact ABI hashes and contract source used for each SDK release.\n\n## Notes\n\n- Apex periphery exports include `NonfungiblePositionManager`, `SwapRouter`, `SmartRouter`, `Quoter`, `QuoterV2`, `MixedQuoter`, `TickLens`, and `InterfaceMulticall`.\n- `MixedQuoter` supports `quoteExactInput(bytes,uint256)` and `quoteExactInput(bytes,uint256[],uint256)` for Classic+CL route discovery.\n- Apex CL pool addresses use the Apex `CLPoolDeployer`, not the factory, matching the contract salt `keccak256(abi.encode(token0, token1, fee))`.\n- Apex Classic pair addresses use the Classic factory salt `keccak256(abi.encodePacked(token0, token1, stable))`.\n- `APEX_CL_POOL_INIT_CODE_HASH` and `APEX_CLASSIC_PAIR_INIT_CODE_HASH` are exported and used by default; override them only if the compiled contract bytecode changes.\n- Apex Classic fees are denominated by `1_000_000`.\n- Apex CL protocol fees are denominated by `10_000`, so `10_000` means 100%.\n- Classic protocol fees are first realized by `collectClassicProtocolFees(pair)`, which burns FeeCenter-held fee LP into raw pair tokens. `pushAndSplitFees(tokens)` only splits raw token balances that are already in FeeCenter.\n","readmeFilename":"README.md"}