{"_id":"@elmntl/jlpd-sdk","_rev":"24-85a25835485c2eff65025822213f07e4","name":"@elmntl/jlpd-sdk","dist-tags":{"latest":"2.0.0"},"versions":{"0.1.0":{"name":"@elmntl/jlpd-sdk","version":"0.1.0","author":{"name":"Elemental"},"license":"MIT","_id":"@elmntl/jlpd-sdk@0.1.0","maintainers":[{"name":"capagris","email":"capagris@elemental.fund"}],"dist":{"shasum":"6545a51ebd410bb21ff598540dd6abc7ab4f4e26","tarball":"https://registry.npmjs.org/@elmntl/jlpd-sdk/-/jlpd-sdk-0.1.0.tgz","fileCount":6,"integrity":"sha512-Rx3/30+bAqGSIyhsgAb2Vn2Z3ReFKRpybUE08OV7KPpqqjtV0JdH2ac2t5bn7LoTO/mg66N4goju5iYrRobIcw==","signatures":[{"sig":"MEUCIQCoyp2k6zTx9/55WhL7A+dBv/m/x2ARnX26gfHa8kItYQIgbj0M53pdP0h9IHlyCK9vpOIe55voDAHNBMW3jeFWTFU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":189898},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"6696d4b6d7e0d570b26a56633ae45b881863e949","scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","lint":"eslint src/","build":"tsup src/index.ts --format cjs,esm --dts","clean":"rm -rf dist"},"_npmUser":{"name":"capagris","email":"capagris@elemental.fund"},"_npmVersion":"10.9.2","description":"SDK for JLP.D (JLP Deconstructed) by Elemental","directories":{},"_nodeVersion":"22.17.1","dependencies":{"@solana/web3.js":"^1.95.8","@coral-xyz/anchor":"^0.30.1","@solana/spl-token":"^0.4.9"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","typescript":"^5.3.3","@types/node":"^20.11.0"},"peerDependencies":{"@solana/web3.js":"^1.95.0"},"_npmOperationalInternal":{"tmp":"tmp/jlpd-sdk_0.1.0_1769413820968_0.8010626711849391","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"@elmntl/jlpd-sdk","version":"1.0.8","author":{"name":"Elemental"},"license":"MIT","_id":"@elmntl/jlpd-sdk@1.0.8","maintainers":[{"name":"capagris","email":"capagris@elemental.fund"}],"dist":{"shasum":"93a214036f4a9d9d08860be8a599bf9c29ffcddd","tarball":"https://registry.npmjs.org/@elmntl/jlpd-sdk/-/jlpd-sdk-1.0.8.tgz","fileCount":6,"integrity":"sha512-UCWUbco37pSxejfjv4f5vR6EtoJ10PG5/O8wE6mT41XjZ1dhhOc56jKxuOVeUyW1y4CODV34zLtSuzCNZ025Gw==","signatures":[{"sig":"MEYCIQCwXiaWXSnzauDxL3yOJlCMyYax/TUVyuXSBdWk0m7HHQIhAMIE2vxHwZQP5+fZwt8E0VYYSvxxNCLCmxYfys20q3ya","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":189888},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"0f9df64faf0710ce76770a58cbee7af90bbeff89","scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","lint":"eslint src/","build":"tsup src/index.ts --format cjs,esm --dts","clean":"rm -rf dist"},"_npmUser":{"name":"capagris","email":"capagris@elemental.fund"},"_npmVersion":"10.9.2","description":"SDK for JLP.D (JLP Deconstructed) by Elemental","directories":{},"_nodeVersion":"22.17.1","dependencies":{"@solana/web3.js":"^1.95.8","@coral-xyz/anchor":"^0.30.1","@solana/spl-token":"^0.4.9"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","typescript":"^5.3.3","@types/node":"^20.11.0"},"peerDependencies":{"@solana/web3.js":"^1.95.0"},"_npmOperationalInternal":{"tmp":"tmp/jlpd-sdk_1.0.8_1769422808401_0.8523481340040961","host":"s3://npm-registry-packages-npm-production"},"deprecated":"superseded — use >=2.0.0"},"1.0.9":{"name":"@elmntl/jlpd-sdk","version":"1.0.9","author":{"name":"Elemental"},"license":"MIT","_id":"@elmntl/jlpd-sdk@1.0.9","maintainers":[{"name":"capagris","email":"capagris@elemental.fund"}],"dist":{"shasum":"41f9d0fc0b683ea63afac84bbce2c79cdbc9b569","tarball":"https://registry.npmjs.org/@elmntl/jlpd-sdk/-/jlpd-sdk-1.0.9.tgz","fileCount":6,"integrity":"sha512-oTvt1sAK58XZnkjh8BT1iRQ+umrMebkD9/cDnKroGh6otSLEOl+eEcxXnZc3bzgzHj7fe0RmqXm20yaPjrGA9w==","signatures":[{"sig":"MEUCIQDjYJPquq0LrjRAGPNpKxyy1LukwnZgJaCU7qaHyM1K1QIgEczmRBsckZjPmWIM42uwr0fXd27LKWAZo3HbDmRqLHo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":199230},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"38ecfc6fd9e9da106d311d1d31991e472b4477c3","scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","lint":"eslint src/","build":"tsup src/index.ts --format cjs,esm --dts","clean":"rm -rf dist"},"_npmUser":{"name":"capagris","email":"capagris@elemental.fund"},"_npmVersion":"10.9.2","description":"SDK for JLP.D (JLP Deconstructed) by Elemental","directories":{},"_nodeVersion":"22.17.1","dependencies":{"@solana/web3.js":"^1.95.8","@coral-xyz/anchor":"^0.30.1","@solana/spl-token":"^0.4.9"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","typescript":"^5.3.3","@types/node":"^20.11.0"},"peerDependencies":{"@solana/web3.js":"^1.95.0"},"_npmOperationalInternal":{"tmp":"tmp/jlpd-sdk_1.0.9_1769478772027_0.07900900019958113","host":"s3://npm-registry-packages-npm-production"},"deprecated":"superseded — use >=2.0.0"},"1.0.10":{"name":"@elmntl/jlpd-sdk","version":"1.0.10","author":{"name":"Elemental"},"license":"MIT","_id":"@elmntl/jlpd-sdk@1.0.10","maintainers":[{"name":"capagris","email":"capagris@elemental.fund"}],"dist":{"shasum":"0761bdeaa54a5d289237de4db2b08e64a89a1458","tarball":"https://registry.npmjs.org/@elmntl/jlpd-sdk/-/jlpd-sdk-1.0.10.tgz","fileCount":6,"integrity":"sha512-WdNrOeT+jvxk0vnAEThooXQJDzwZ7ufoFC5X8jke/EgucthOKxOUQ3HNkV6ELF0NbIhalfqSnKCAaTw6ZaPFpQ==","signatures":[{"sig":"MEUCIQCQVVZcxDElepd4cxmvyMy06fEyoolOCkCUnhqFoGvPUQIgCw6ABhOtRXTHl0Ont7llf18tbWjXyn7CKnoAtLIxMuI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":199129},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"1aed1a9b324179229799701fd2ba3c58c2337d98","scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","lint":"eslint src/","build":"tsup src/index.ts --format cjs,esm --dts","clean":"rm -rf dist"},"_npmUser":{"name":"capagris","email":"capagris@elemental.fund"},"_npmVersion":"10.9.2","description":"SDK for JLP.D (JLP Deconstructed) by Elemental","directories":{},"_nodeVersion":"22.17.1","dependencies":{"@solana/web3.js":"^1.95.8","@coral-xyz/anchor":"^0.30.1","@solana/spl-token":"^0.4.9"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","typescript":"^5.3.3","@types/node":"^20.11.0"},"peerDependencies":{"@solana/web3.js":"^1.95.0"},"_npmOperationalInternal":{"tmp":"tmp/jlpd-sdk_1.0.10_1769864335277_0.4729480113519018","host":"s3://npm-registry-packages-npm-production"},"deprecated":"superseded — use >=2.0.0"},"0.1.2":{"name":"@elmntl/jlpd-sdk","version":"0.1.2","author":{"name":"Elemental"},"license":"MIT","_id":"@elmntl/jlpd-sdk@0.1.2","maintainers":[{"name":"noritake","email":"w7017232@gmail.com"},{"name":"capagris","email":"capagris@elemental.fund"}],"dist":{"shasum":"6720f7f920767029c2e0bc9b3a42ccea827cafea","tarball":"https://registry.npmjs.org/@elmntl/jlpd-sdk/-/jlpd-sdk-0.1.2.tgz","fileCount":6,"integrity":"sha512-dySoCwtDFK02BkCcWfCt+gyofPreo3H6oXEGkoW0bCuqmAny+v/+qKYzTpIsioqYiSebL1ks7/rrvjS3OC7Zaw==","signatures":[{"sig":"MEYCIQCOu3dpPV+YmAaS6Ke2VroPOD5MPhyHlgW+Wh3HG1+02AIhANqYKAWarxlYEoaw2z4xmqtOmRmDJ8f+gi8263edjbXD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":512082},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"60a5b3cf2f34de8e436584775110b8714afa9f7e","scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","lint":"eslint src/","build":"tsup src/index.ts --format cjs,esm --dts","clean":"rm -rf dist"},"_npmUser":{"name":"noritake","email":"w7017232@gmail.com"},"_npmVersion":"10.9.2","description":"SDK for JLP.D (JLP Deconstructed) by Elemental","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@solana/web3.js":"^1.95.8","@coral-xyz/anchor":"0.32.1","@solana/spl-token":"^0.4.9"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","typescript":"^5.3.3","@types/node":"^20.11.0"},"peerDependencies":{"@solana/web3.js":"^1.95.0"},"_npmOperationalInternal":{"tmp":"tmp/jlpd-sdk_0.1.2_1769868873755_0.9033523591535717","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@elmntl/jlpd-sdk","version":"0.1.3","author":{"name":"Elemental"},"license":"MIT","_id":"@elmntl/jlpd-sdk@0.1.3","maintainers":[{"name":"noritake","email":"w7017232@gmail.com"},{"name":"capagris","email":"capagris@elemental.fund"}],"dist":{"shasum":"f736fb59465072b4d90d700c4a044c084e425f85","tarball":"https://registry.npmjs.org/@elmntl/jlpd-sdk/-/jlpd-sdk-0.1.3.tgz","fileCount":6,"integrity":"sha512-6U83yymABbN48wVI6mnDAMI9xuW2zuJNnptRnunGuRR4X5sUTJ+CG9Ys13f1RY/y5sX2O923NLwtGioandvPTA==","signatures":[{"sig":"MEQCIFKWALpI59rRHq6OApeq4YzB+1a3XHcKTZM9z7ANpbDIAiA6kpNNT5rpLLxGSLZ2ajzxv67H8WElKMN5+VNWXnge3Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":512058},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"71a1ec297f24792936dc770f75c3645d51365f30","scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","lint":"eslint src/","build":"tsup src/index.ts --format cjs,esm --dts","clean":"rm -rf dist"},"_npmUser":{"name":"noritake","email":"w7017232@gmail.com"},"_npmVersion":"10.9.2","description":"SDK for JLP.D (JLP Deconstructed) by Elemental","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@solana/web3.js":"^1.95.8","@coral-xyz/anchor":"0.32.1","@solana/spl-token":"^0.4.9"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","typescript":"^5.3.3","@types/node":"^20.11.0"},"peerDependencies":{"@solana/web3.js":"^1.95.0"},"_npmOperationalInternal":{"tmp":"tmp/jlpd-sdk_0.1.3_1769932957873_0.38796490253604654","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@elmntl/jlpd-sdk","version":"0.1.4","author":{"name":"Elemental"},"license":"MIT","_id":"@elmntl/jlpd-sdk@0.1.4","maintainers":[{"name":"noritake","email":"w7017232@gmail.com"},{"name":"capagris","email":"capagris@elemental.fund"}],"dist":{"shasum":"b294f76a4aa8852150332b05582f1f4c36c710bc","tarball":"https://registry.npmjs.org/@elmntl/jlpd-sdk/-/jlpd-sdk-0.1.4.tgz","fileCount":6,"integrity":"sha512-rkfRC9Q/Zh9IVTgn9aSp547wx8GnzPUb9XaEHEyVDk+iyTAAMmar4/AQEYYGA/vRTLHKjC7I2EDvJ69QDpIRhQ==","signatures":[{"sig":"MEYCIQC8cYEL1rwPCZpflA5dEv7Ql75HRxQ6zjh+drcI3ny2BgIhAIMGK0tk08BSMXVjBbcGViG5s0K/5eqSOckPeN4aaQoh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":512958},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"a1340eb2ba2e51e327bee302289486392e6eadda","scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","lint":"eslint src/","build":"tsup src/index.ts --format cjs,esm --dts","clean":"rm -rf dist"},"_npmUser":{"name":"noritake","email":"w7017232@gmail.com"},"_npmVersion":"10.9.2","description":"SDK for JLP.D (JLP Deconstructed) by Elemental","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@solana/web3.js":"^1.95.8","@coral-xyz/anchor":"0.32.1","@solana/spl-token":"^0.4.9"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","typescript":"^5.3.3","@types/node":"^20.11.0"},"peerDependencies":{"@solana/web3.js":"^1.95.0"},"_npmOperationalInternal":{"tmp":"tmp/jlpd-sdk_0.1.4_1770203917042_0.005764601286961213","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@elmntl/jlpd-sdk","version":"0.1.5","author":{"name":"Elemental"},"license":"MIT","_id":"@elmntl/jlpd-sdk@0.1.5","maintainers":[{"name":"noritake","email":"w7017232@gmail.com"},{"name":"capagris","email":"capagris@elemental.fund"}],"dist":{"shasum":"fdc2f67c702c5fc71fc254dd0dbdeb3c6064bfe3","tarball":"https://registry.npmjs.org/@elmntl/jlpd-sdk/-/jlpd-sdk-0.1.5.tgz","fileCount":6,"integrity":"sha512-lpYomgznPzCo+b7kD95jYisYJhnEbjFMRdL/ENFRh9Tn1Mh34Y5lY3Qc7G0Q6vReClll3UhioDPT+BOGnfn1Dg==","signatures":[{"sig":"MEUCIQDDBndi5MXhamqf1TOwPt7SDfsJl6WR2iVWq6GQiPJyWQIgUHFn9iufiNICoVG3ppcw7rqQyFOQS2CHkH+CYnJFq+Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":512958},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"144f5f9446fd93988054c23c8c18afb610abb7f4","scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","lint":"eslint src/","build":"tsup src/index.ts --format cjs,esm --dts","clean":"rm -rf dist"},"_npmUser":{"name":"noritake","email":"w7017232@gmail.com"},"_npmVersion":"10.9.2","description":"SDK for JLP.D (JLP Deconstructed) by Elemental","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@solana/web3.js":"^1.95.8","@coral-xyz/anchor":"0.32.1","@solana/spl-token":"^0.4.9"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","typescript":"^5.3.3","@types/node":"^20.11.0"},"peerDependencies":{"@solana/web3.js":"^1.95.0"},"_npmOperationalInternal":{"tmp":"tmp/jlpd-sdk_0.1.5_1770213281799_0.4685170083615189","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@elmntl/jlpd-sdk","version":"0.1.6","author":{"name":"Elemental"},"license":"MIT","_id":"@elmntl/jlpd-sdk@0.1.6","maintainers":[{"name":"noritake","email":"w7017232@gmail.com"},{"name":"capagris","email":"capagris@elemental.fund"}],"dist":{"shasum":"8439cc75f167f078cd54a6021777676e87cada8d","tarball":"https://registry.npmjs.org/@elmntl/jlpd-sdk/-/jlpd-sdk-0.1.6.tgz","fileCount":6,"integrity":"sha512-HCURMqRjMwFJuJzvd6vj19Me7/1sl9WLwMqwEaS8qacYM3SM9fOKYhu4jJAMx55S5rFzmJBKkVmppomVooTgZQ==","signatures":[{"sig":"MEUCIEsQVZJerYClkY804N2C5FSYdAdpNq0oCDArFP2xWYYeAiEA/JPWQFpp7KGt3GGTIW2zcYEOKiO6Rj1DnBeRkNw3AJM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":513686},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"20e229b302604dc42e950a67c7b63068f16ebec8","scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","lint":"eslint src/","build":"tsup src/index.ts --format cjs,esm --dts","clean":"rm -rf dist"},"_npmUser":{"name":"noritake","email":"w7017232@gmail.com"},"_npmVersion":"10.9.2","description":"SDK for JLP.D (JLP Deconstructed) by Elemental","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@solana/web3.js":"^1.95.8","@coral-xyz/anchor":"0.32.1","@solana/spl-token":"^0.4.9"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","typescript":"^5.3.3","@types/node":"^20.11.0"},"peerDependencies":{"@solana/web3.js":"^1.95.0"},"_npmOperationalInternal":{"tmp":"tmp/jlpd-sdk_0.1.6_1771135842575_0.386515466280809","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@elmntl/jlpd-sdk","version":"0.1.7","author":{"name":"Elemental"},"license":"MIT","_id":"@elmntl/jlpd-sdk@0.1.7","maintainers":[{"name":"noritake","email":"w7017232@gmail.com"},{"name":"capagris","email":"capagris@elemental.fund"}],"dist":{"shasum":"c284d96d07cb8b96140f49912a64d5260d9eb8a6","tarball":"https://registry.npmjs.org/@elmntl/jlpd-sdk/-/jlpd-sdk-0.1.7.tgz","fileCount":6,"integrity":"sha512-9W91r2Pan94kvVDf9a0LoB+3i+nl8pZG7Q5JHPs1t/jEpqRUU8RHEM1oQD35hLoQRapnUAKH0Y6iG7Rot+wXaw==","signatures":[{"sig":"MEUCIDKzg2dFatzTZeaS2vZ2t7SXArGLawxaYwiWnwfx0iQGAiEAgs314kw1GN4DNU4nUx3Wz5qcCZqzOApcyKhqgw7uNvI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":513686},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"4a912b47883aa5da49af46686a7dd803dba83849","scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","lint":"eslint src/","build":"tsup src/index.ts --format cjs,esm --dts","clean":"rm -rf dist"},"_npmUser":{"name":"noritake","email":"w7017232@gmail.com"},"_npmVersion":"10.9.2","description":"SDK for JLP.D (JLP Deconstructed) by Elemental","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@solana/web3.js":"^1.95.8","@coral-xyz/anchor":"0.32.1","@solana/spl-token":"^0.4.9"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","typescript":"^5.3.3","@types/node":"^20.11.0"},"peerDependencies":{"@solana/web3.js":"^1.95.0"},"_npmOperationalInternal":{"tmp":"tmp/jlpd-sdk_0.1.7_1771587941560_0.6578699294049393","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@elmntl/jlpd-sdk","version":"0.1.8","author":{"name":"Elemental"},"license":"MIT","_id":"@elmntl/jlpd-sdk@0.1.8","maintainers":[{"name":"noritake","email":"w7017232@gmail.com"},{"name":"capagris","email":"capagris@elemental.fund"}],"dist":{"shasum":"f777d301ad69f46681d3124f90ad9f18da691f7f","tarball":"https://registry.npmjs.org/@elmntl/jlpd-sdk/-/jlpd-sdk-0.1.8.tgz","fileCount":6,"integrity":"sha512-Pub9Fmf/TkOrAZiVp1fV/t7eTxxN/rzIKBzjraKkRqu5UnJ5+90bAsq519LgjX16Sv8ZLnvZVSqEyipfufAlgw==","signatures":[{"sig":"MEYCIQDowfPN/QyPnwPqdWE0yQJkrk9dWVdNU6+SbkOeJBEhogIhAK3nD3RAvPI/oAnS3DNPV2EYc4JSlqyFhjzQsHi9sG4Z","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":504988},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"317aee81bd016933319d945867d942cbe838e311","scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","lint":"eslint src/","build":"tsup src/index.ts --format cjs,esm --dts","clean":"rm -rf dist"},"_npmUser":{"name":"noritake","email":"w7017232@gmail.com"},"_npmVersion":"10.9.2","description":"SDK for JLP.D (JLP Deconstructed) by Elemental","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@solana/web3.js":"^1.95.8","@coral-xyz/anchor":"0.32.1","@solana/spl-token":"^0.4.9"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","typescript":"^5.3.3","@types/node":"^20.11.0"},"peerDependencies":{"@solana/web3.js":"^1.95.0"},"_npmOperationalInternal":{"tmp":"tmp/jlpd-sdk_0.1.8_1771638677583_0.6685245071200794","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@elmntl/jlpd-sdk","version":"0.1.9","author":{"name":"Elemental"},"license":"MIT","_id":"@elmntl/jlpd-sdk@0.1.9","maintainers":[{"name":"noritake","email":"w7017232@gmail.com"},{"name":"capagris","email":"capagris@elemental.fund"}],"dist":{"shasum":"005652c30a8bbe8ee37e55c52883943294f459eb","tarball":"https://registry.npmjs.org/@elmntl/jlpd-sdk/-/jlpd-sdk-0.1.9.tgz","fileCount":6,"integrity":"sha512-F7LoxEChTE+w3I4CB12tcj63KgRl7CgJdpPXnDz9vmkWQZ2co2kNyBlGWu+nGmLaYflY7i8X3xTQVXfCgRjrmQ==","signatures":[{"sig":"MEQCIAHbWdfBAH54Upe9JzqW6GYVfPN1qGKAtmRxTMvinEzFAiBVRHpt/m6IIF3SV9yEVC16b4ZcQniSOd0PSrq5MD5SYA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":505488},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"a438840537aed9ee3defdf91d88749eb70b2486b","scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","lint":"eslint src/","build":"tsup src/index.ts --format cjs,esm --dts","clean":"rm -rf dist"},"_npmUser":{"name":"noritake","email":"w7017232@gmail.com"},"_npmVersion":"10.9.2","description":"SDK for JLP.D (JLP Deconstructed) by Elemental","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@solana/web3.js":"^1.95.8","@coral-xyz/anchor":"0.32.1","@solana/spl-token":"^0.4.9"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","typescript":"^5.3.3","@types/node":"^20.11.0"},"peerDependencies":{"@solana/web3.js":"^1.95.0"},"_npmOperationalInternal":{"tmp":"tmp/jlpd-sdk_0.1.9_1771654644171_0.2505823580339759","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"@elmntl/jlpd-sdk","version":"0.1.11","author":{"name":"Elemental"},"license":"MIT","_id":"@elmntl/jlpd-sdk@0.1.11","maintainers":[{"name":"noritake","email":"w7017232@gmail.com"},{"name":"capagris","email":"capagris@elemental.fund"}],"dist":{"shasum":"489c37dc8ccb52064c48fefa3bd26d15457c3869","tarball":"https://registry.npmjs.org/@elmntl/jlpd-sdk/-/jlpd-sdk-0.1.11.tgz","fileCount":6,"integrity":"sha512-ptldtd8IdakY+F7s1Qh1LN6b45SDSNx7RAKaHJUEzmIM+W4f2Fi6z6dp7pKi5MaclSpGtBzwxNDSQk4cyOUCuw==","signatures":[{"sig":"MEQCICBvREvvQG1+Dk7rlGVbm4HPh8qQEuqSeVJlWz+Vx0q4AiAH0KJit3QAw0AGJWo38ZPOpxAROhuIDCQfkQhLghw0WQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":488828},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"a4620c0d5d30086bb14c6dde1380d0d3a801fb9e","scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","lint":"eslint src/","build":"tsup src/index.ts --format cjs,esm --dts","clean":"rm -rf dist"},"_npmUser":{"name":"noritake","email":"w7017232@gmail.com"},"_npmVersion":"10.9.2","description":"SDK for JLP.D (JLP Deconstructed) by Elemental","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@solana/web3.js":"^1.95.8","@coral-xyz/anchor":"0.32.1","@solana/spl-token":"^0.4.9"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","typescript":"^5.3.3","@types/node":"^20.11.0"},"peerDependencies":{"@solana/web3.js":"^1.95.0"},"_npmOperationalInternal":{"tmp":"tmp/jlpd-sdk_0.1.11_1772018152253_0.462855182615872","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@elmntl/jlpd-sdk","version":"0.2.0","author":{"name":"Elemental"},"license":"MIT","_id":"@elmntl/jlpd-sdk@0.2.0","maintainers":[{"name":"noritake","email":"w7017232@gmail.com"},{"name":"capagris","email":"capagris@elemental.fund"}],"dist":{"shasum":"d2416bfe44ffbf10e8662d1c3c922ef26817e663","tarball":"https://registry.npmjs.org/@elmntl/jlpd-sdk/-/jlpd-sdk-0.2.0.tgz","fileCount":6,"integrity":"sha512-5jIKS3ooRDhmFElVsepxcAThjKWrIAB1e3pe2egPEp2eWWf8meeSbN3IWabLEf38YAeBBsydiaeiGfbzotad1A==","signatures":[{"sig":"MEUCIHHyZ9qobkg9vK59fvs41TClN/hVyIrXlhZQ9+BV5LjJAiEAmD06xXdFENeTIVlccSCCGF2uAixT5e2n5YWbKgqDf94=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":571851},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"9e0c523a3bbd47a531a4d28c0593b7a22945f065","scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","lint":"eslint src/","build":"tsup src/index.ts --format cjs,esm --dts","clean":"rm -rf dist"},"_npmUser":{"name":"noritake","email":"w7017232@gmail.com"},"_npmVersion":"10.9.2","description":"SDK for JLP.D (JLP Deconstructed) by Elemental","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@solana/web3.js":"^1.95.8","@coral-xyz/anchor":"0.32.1","@solana/spl-token":"^0.4.9"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","typescript":"^5.3.3","@types/node":"^20.11.0"},"peerDependencies":{"@solana/web3.js":"^1.95.0"},"_npmOperationalInternal":{"tmp":"tmp/jlpd-sdk_0.2.0_1772421247124_0.4650873866528462","host":"s3://npm-registry-packages-npm-production"}},"0.13.4":{"name":"@elmntl/jlpd-sdk","version":"0.13.4","keywords":["solana","defi","vault","yield","jlp","jupiter","kamino","pinocchio","anchor","sdk"],"license":"Apache-2.0","_id":"@elmntl/jlpd-sdk@0.13.4","maintainers":[{"name":"noritake","email":"w7017232@gmail.com"},{"name":"capagris","email":"capagris@elemental.fund"}],"dist":{"shasum":"1a807ce8e94187e3c3ee4ef5d030e8329dc56365","tarball":"https://registry.npmjs.org/@elmntl/jlpd-sdk/-/jlpd-sdk-0.13.4.tgz","fileCount":113,"integrity":"sha512-qSaqEBVCDl3Z4XwkvOXLA5/Uit5faAIVDDZR2waIg70Q+Ul0AAvfpJZREPQpHHyoz/FUxvHuuwL5ASjKBCVGTA==","signatures":[{"sig":"MEYCIQCa+Fnb8TNyIIoFE00wXUUtvFAW6Dbk0IiCtCAG3SylJgIhANOT7gfZh0jJVjqsL68v5uJvkYM5YS2FOelnxbmZQiIO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":729307},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":"./dist/index.js","./common":"./dist/common/index.js","./p-stv-core":"./dist/p-stv-core/index.js","./jlpd-strategy":"./dist/jlpd-strategy/index.js","./elemental-lend":"./dist/elemental-lend/index.js"},"gitHead":"3426e1b782fa1e9654c0d543920b2a20c4611eca","scripts":{"test":"TS_NODE_TRANSPILE_ONLY=true mocha --require ts-node/register --extensions ts \"src/**/__tests__/**/*.test.ts\"","build":"tsc","clean":"rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"noritake","email":"w7017232@gmail.com"},"_npmVersion":"10.9.2","description":"SDK for JLP.D (JLP Deconstructed) by Elemental — p-stv-core, jlpd-strategy, and elemental-lend clients","directories":{},"_nodeVersion":"22.14.0","dependencies":{"bn.js":"^5.2.1"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"common":["dist/common/index.d.ts"],"p-stv-core":["dist/p-stv-core/index.d.ts"],"jlpd-strategy":["dist/jlpd-strategy/index.d.ts"],"elemental-lend":["dist/elemental-lend/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.5.0","mocha":"^10.8.2","ts-node":"^10.9.2","typescript":"^5.3.3","@types/chai":"^4.3.20","@types/bn.js":"^5.2.0","@types/mocha":"^10.0.10","@solana/web3.js":"^1.95.0","@solana/spl-token":"^0.4.0"},"peerDependencies":{"@solana/web3.js":"^1.95.0","@solana/spl-token":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/jlpd-sdk_0.13.4_1784254457027_0.66404884841725","host":"s3://npm-registry-packages-npm-production"}},"0.13.5":{"name":"@elmntl/jlpd-sdk","version":"0.13.5","keywords":["solana","defi","vault","yield","jlp","jupiter","kamino","pinocchio","anchor","sdk"],"license":"Apache-2.0","_id":"@elmntl/jlpd-sdk@0.13.5","maintainers":[{"name":"noritake","email":"w7017232@gmail.com"},{"name":"capagris","email":"capagris@elemental.fund"}],"dist":{"shasum":"f369b79c401e4529d51503e283a129a1756cae6c","tarball":"https://registry.npmjs.org/@elmntl/jlpd-sdk/-/jlpd-sdk-0.13.5.tgz","fileCount":113,"integrity":"sha512-wpiS9unKXGnZG/b7QwkmsLPS+VxtZ7wrBQzh5QAPP2uc0nj1oXFXPMm8votzT5J4ziWMZm2hpY2Fyei/++Y7Kw==","signatures":[{"sig":"MEQCIG5d7DijSCL1gcnyMw98FuZPTj3W3KB0YqKOPmCkVT0KAiBMdCFxG0ucCIhGpfhcpJBbe/wOF0h9IZ+LVXs4PmUtdg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":728786},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":"./dist/index.js","./common":"./dist/common/index.js","./p-stv-core":"./dist/p-stv-core/index.js","./jlpd-strategy":"./dist/jlpd-strategy/index.js","./elemental-lend":"./dist/elemental-lend/index.js"},"gitHead":"3426e1b782fa1e9654c0d543920b2a20c4611eca","scripts":{"test":"TS_NODE_TRANSPILE_ONLY=true mocha --require ts-node/register --extensions ts \"src/**/__tests__/**/*.test.ts\"","build":"tsc","clean":"rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"noritake","email":"w7017232@gmail.com"},"_npmVersion":"10.9.2","description":"SDK for JLP.D (JLP Deconstructed) by Elemental — p-stv-core, jlpd-strategy, and elemental-lend clients","directories":{},"_nodeVersion":"22.14.0","dependencies":{"bn.js":"^5.2.1"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"common":["dist/common/index.d.ts"],"p-stv-core":["dist/p-stv-core/index.d.ts"],"jlpd-strategy":["dist/jlpd-strategy/index.d.ts"],"elemental-lend":["dist/elemental-lend/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.5.0","mocha":"^10.8.2","ts-node":"^10.9.2","typescript":"^5.3.3","@types/chai":"^4.3.20","@types/bn.js":"^5.2.0","@types/mocha":"^10.0.10","@solana/web3.js":"^1.95.0","@solana/spl-token":"^0.4.0"},"peerDependencies":{"@solana/web3.js":"^1.95.0","@solana/spl-token":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/jlpd-sdk_0.13.5_1784295518106_0.4951268219987679","host":"s3://npm-registry-packages-npm-production"}},"0.13.6":{"name":"@elmntl/jlpd-sdk","version":"0.13.6","keywords":["solana","defi","vault","yield","jlp","jupiter","kamino","pinocchio","anchor","sdk"],"license":"Apache-2.0","_id":"@elmntl/jlpd-sdk@0.13.6","maintainers":[{"name":"noritake","email":"w7017232@gmail.com"},{"name":"capagris","email":"capagris@elemental.fund"}],"dist":{"shasum":"79f323b3d81d739d1f921b4e015c3c5299187291","tarball":"https://registry.npmjs.org/@elmntl/jlpd-sdk/-/jlpd-sdk-0.13.6.tgz","fileCount":113,"integrity":"sha512-uDPWWzy3Teq7+XES1O5fdycUGCDUm5axEOeW0AxDAW8zd58M7WTHINczbcRAao+eQHqwZOSAqwGmO2RmnzKVGA==","signatures":[{"sig":"MEUCIAxeLR1WuaTPpJG3LQuHkKhjIYXpCurvks/bLZPNodYRAiEAioYQDXcXnU8KdEfuXbeOF1VtTsw1hp7uCUeH04abm0Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":747099},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":"./dist/index.js","./common":"./dist/common/index.js","./p-stv-core":"./dist/p-stv-core/index.js","./jlpd-strategy":"./dist/jlpd-strategy/index.js","./elemental-lend":"./dist/elemental-lend/index.js"},"gitHead":"6e932663571ced662f64450b13632fee5a0fcb2d","scripts":{"test":"TS_NODE_TRANSPILE_ONLY=true mocha --require ts-node/register --extensions ts \"src/**/__tests__/**/*.test.ts\"","build":"tsc","clean":"rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"noritake","email":"w7017232@gmail.com"},"_npmVersion":"10.9.2","description":"SDK for JLP.D (JLP Deconstructed) by Elemental — p-stv-core, jlpd-strategy, and elemental-lend clients","directories":{},"_nodeVersion":"22.14.0","dependencies":{"bn.js":"^5.2.1"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"common":["dist/common/index.d.ts"],"p-stv-core":["dist/p-stv-core/index.d.ts"],"jlpd-strategy":["dist/jlpd-strategy/index.d.ts"],"elemental-lend":["dist/elemental-lend/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.5.0","mocha":"^10.8.2","ts-node":"^10.9.2","typescript":"^5.3.3","@types/chai":"^4.3.20","@types/bn.js":"^5.2.0","@types/mocha":"^10.0.10","@solana/web3.js":"^1.95.0","@solana/spl-token":"^0.4.0"},"peerDependencies":{"@solana/web3.js":"^1.95.0","@solana/spl-token":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/jlpd-sdk_0.13.6_1784528051853_0.6349546107694701","host":"s3://npm-registry-packages-npm-production"}},"0.13.7":{"name":"@elmntl/jlpd-sdk","version":"0.13.7","keywords":["solana","defi","vault","yield","jlp","jupiter","kamino","pinocchio","anchor","sdk"],"license":"Apache-2.0","_id":"@elmntl/jlpd-sdk@0.13.7","maintainers":[{"name":"noritake","email":"w7017232@gmail.com"},{"name":"capagris","email":"capagris@elemental.fund"}],"dist":{"shasum":"5e362222cdadf4c5245d83e9c760542e99fb9104","tarball":"https://registry.npmjs.org/@elmntl/jlpd-sdk/-/jlpd-sdk-0.13.7.tgz","fileCount":113,"integrity":"sha512-DirlftPEdCDmqenagwrCsal0KSnAg3wE7h1P6ER20INZVNVcq2FWeCyQqGQwvqlpTqlBO8srCsrRzDj+LcC+hw==","signatures":[{"sig":"MEUCIQDwrbm0dxdBmAvtN+uxt+L3IS8fsct57R4FJY1yQdkIZwIgQjKcpMNih0tc0mxP9MFCprLgwqMoQoAF2ayefp/NMjA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":753071},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":"./dist/index.js","./common":"./dist/common/index.js","./p-stv-core":"./dist/p-stv-core/index.js","./jlpd-strategy":"./dist/jlpd-strategy/index.js","./elemental-lend":"./dist/elemental-lend/index.js"},"gitHead":"308a42953d56bd135f9d75119eae254f7734f19e","scripts":{"test":"TS_NODE_TRANSPILE_ONLY=true mocha --require ts-node/register --extensions ts \"src/**/__tests__/**/*.test.ts\"","build":"tsc","clean":"rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"noritake","email":"w7017232@gmail.com"},"_npmVersion":"10.9.2","description":"SDK for JLP.D (JLP Deconstructed) by Elemental — p-stv-core, jlpd-strategy, and elemental-lend clients","directories":{},"_nodeVersion":"22.14.0","dependencies":{"bn.js":"^5.2.1"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"common":["dist/common/index.d.ts"],"p-stv-core":["dist/p-stv-core/index.d.ts"],"jlpd-strategy":["dist/jlpd-strategy/index.d.ts"],"elemental-lend":["dist/elemental-lend/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.5.0","mocha":"^10.8.2","ts-node":"^10.9.2","typescript":"^5.3.3","@types/chai":"^4.3.20","@types/bn.js":"^5.2.0","@types/mocha":"^10.0.10","@solana/web3.js":"^1.95.0","@solana/spl-token":"^0.4.0"},"peerDependencies":{"@solana/web3.js":"^1.95.0","@solana/spl-token":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/jlpd-sdk_0.13.7_1784594192213_0.7318818157099276","host":"s3://npm-registry-packages-npm-production"}},"0.13.8":{"name":"@elmntl/jlpd-sdk","version":"0.13.8","keywords":["solana","defi","vault","yield","jlp","jupiter","kamino","pinocchio","anchor","sdk"],"license":"Apache-2.0","_id":"@elmntl/jlpd-sdk@0.13.8","maintainers":[{"name":"noritake","email":"w7017232@gmail.com"},{"name":"capagris","email":"capagris@elemental.fund"}],"dist":{"shasum":"a43ea3b08282e172636eda9a7f7d338d958e7539","tarball":"https://registry.npmjs.org/@elmntl/jlpd-sdk/-/jlpd-sdk-0.13.8.tgz","fileCount":113,"integrity":"sha512-cAeFcN65hfu+52NgH8LU8veas2LJeeKchanwPmKhzB7V9K619rZoI7iYVl2hCdb+efPEU9dR+t2ShEenakQD9A==","signatures":[{"sig":"MEUCIQCP8jyIn8urBU0TbWXnpX+kH7ctMpc4naBTKirI7k9A+AIgJNugtY8u8DEVWKptXYDO0yFQux60ni3WdPV4Evi+R9s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":762994},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":"./dist/index.js","./common":"./dist/common/index.js","./p-stv-core":"./dist/p-stv-core/index.js","./jlpd-strategy":"./dist/jlpd-strategy/index.js","./elemental-lend":"./dist/elemental-lend/index.js"},"gitHead":"0309e4ce7c1b8e9df123d63868e69eb5c04911d0","scripts":{"test":"TS_NODE_TRANSPILE_ONLY=true mocha --require ts-node/register --extensions ts \"src/**/__tests__/**/*.test.ts\"","build":"tsc","clean":"rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"noritake","email":"w7017232@gmail.com"},"_npmVersion":"10.9.2","description":"SDK for JLP.D (JLP Deconstructed) by Elemental — p-stv-core, jlpd-strategy, and elemental-lend clients","directories":{},"_nodeVersion":"22.14.0","dependencies":{"bn.js":"^5.2.1"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"common":["dist/common/index.d.ts"],"p-stv-core":["dist/p-stv-core/index.d.ts"],"jlpd-strategy":["dist/jlpd-strategy/index.d.ts"],"elemental-lend":["dist/elemental-lend/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.5.0","mocha":"^10.8.2","ts-node":"^10.9.2","typescript":"^5.3.3","@types/chai":"^4.3.20","@types/bn.js":"^5.2.0","@types/mocha":"^10.0.10","@solana/web3.js":"^1.95.0","@solana/spl-token":"^0.4.0"},"peerDependencies":{"@solana/web3.js":"^1.95.0","@solana/spl-token":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/jlpd-sdk_0.13.8_1784712243866_0.4851343281780942","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"@elmntl/jlpd-sdk","version":"0.14.0","keywords":["solana","defi","vault","yield","jlp","jupiter","kamino","pinocchio","anchor","sdk"],"license":"Apache-2.0","_id":"@elmntl/jlpd-sdk@0.14.0","maintainers":[{"name":"noritake","email":"w7017232@gmail.com"},{"name":"capagris","email":"capagris@elemental.fund"}],"dist":{"shasum":"e1d024ca89d2463ae8c2e68788a13010febf0299","tarball":"https://registry.npmjs.org/@elmntl/jlpd-sdk/-/jlpd-sdk-0.14.0.tgz","fileCount":113,"integrity":"sha512-BzsqG1SZOzsZqWMsO3CDVDpXG9nnKRXva93AT3o6V46rROSi0PP0VPghxJvcWGmy5CkOjz7HO2vtvla5ZLuEtQ==","signatures":[{"sig":"MEUCIQD0YUnSaRf4T6MWa/7kANOjEvXn7mjZjY4qFO+8Pk/qoAIganpdt57diwBRGq5uNp8k8PM7pdcK8MGoc+FdCsMytq0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":761399},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":"./dist/index.js","./common":"./dist/common/index.js","./p-stv-core":"./dist/p-stv-core/index.js","./jlpd-strategy":"./dist/jlpd-strategy/index.js","./elemental-lend":"./dist/elemental-lend/index.js"},"gitHead":"415d59cefda7325bfebe0a7bbf3fc4d3b65b80f0","scripts":{"test":"TS_NODE_TRANSPILE_ONLY=true mocha --require ts-node/register --extensions ts \"src/**/__tests__/**/*.test.ts\"","build":"tsc","clean":"rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"noritake","email":"w7017232@gmail.com"},"_npmVersion":"10.9.2","description":"SDK for JLP.D (JLP Deconstructed) by Elemental — p-stv-core, jlpd-strategy, and elemental-lend clients","directories":{},"_nodeVersion":"22.14.0","dependencies":{"bn.js":"^5.2.1"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"common":["dist/common/index.d.ts"],"p-stv-core":["dist/p-stv-core/index.d.ts"],"jlpd-strategy":["dist/jlpd-strategy/index.d.ts"],"elemental-lend":["dist/elemental-lend/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.5.0","mocha":"^10.8.2","ts-node":"^10.9.2","typescript":"^5.3.3","@types/chai":"^4.3.20","@types/bn.js":"^5.2.0","@types/mocha":"^10.0.10","@solana/web3.js":"^1.95.0","@solana/spl-token":"^0.4.0"},"peerDependencies":{"@solana/web3.js":"^1.95.0","@solana/spl-token":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/jlpd-sdk_0.14.0_1785137092389_0.29062598783566296","host":"s3://npm-registry-packages-npm-production"}},"0.14.1":{"name":"@elmntl/jlpd-sdk","version":"0.14.1","keywords":["solana","defi","vault","yield","jlp","jupiter","kamino","pinocchio","anchor","sdk"],"license":"Apache-2.0","_id":"@elmntl/jlpd-sdk@0.14.1","maintainers":[{"name":"noritake","email":"w7017232@gmail.com"},{"name":"capagris","email":"capagris@elemental.fund"}],"dist":{"shasum":"eea5c0f5b1047f000f5fc4710db1a9c76e414692","tarball":"https://registry.npmjs.org/@elmntl/jlpd-sdk/-/jlpd-sdk-0.14.1.tgz","fileCount":113,"integrity":"sha512-8t0A1iATkzerUwNjNDOsvj+D5Jncer2XmZmTDEEnOGTGOgxH+n7t1kr+Z2MuNEg1VAMYUfbhmDxNoOnMA65/pg==","signatures":[{"sig":"MEUCIQCsXunkDzfVpSR26fxlFqExJM4QaNwchQ54213uRcR2rQIgBDINf97KuFwhvKmLy9AZleScLhCRQADh03xgyA7uETw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":760611},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":"./dist/index.js","./common":"./dist/common/index.js","./p-stv-core":"./dist/p-stv-core/index.js","./jlpd-strategy":"./dist/jlpd-strategy/index.js","./elemental-lend":"./dist/elemental-lend/index.js"},"gitHead":"8119d874006e20fc3995232892f22ac002ad5998","scripts":{"test":"TS_NODE_TRANSPILE_ONLY=true mocha --require ts-node/register --extensions ts \"src/**/__tests__/**/*.test.ts\"","build":"tsc","clean":"rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"noritake","email":"w7017232@gmail.com"},"_npmVersion":"10.9.2","description":"SDK for JLP.D (JLP Deconstructed) by Elemental — p-stv-core, jlpd-strategy, and elemental-lend clients","directories":{},"_nodeVersion":"22.14.0","dependencies":{"bn.js":"^5.2.1"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"common":["dist/common/index.d.ts"],"p-stv-core":["dist/p-stv-core/index.d.ts"],"jlpd-strategy":["dist/jlpd-strategy/index.d.ts"],"elemental-lend":["dist/elemental-lend/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.5.0","mocha":"^10.8.2","ts-node":"^10.9.2","typescript":"^5.3.3","@types/chai":"^4.3.20","@types/bn.js":"^5.2.0","@types/mocha":"^10.0.10","@solana/web3.js":"^1.95.0","@solana/spl-token":"^0.4.0"},"peerDependencies":{"@solana/web3.js":"^1.95.0","@solana/spl-token":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/jlpd-sdk_0.14.1_1785137824764_0.4691939354648027","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@elmntl/jlpd-sdk","version":"2.0.0","keywords":["solana","defi","vault","yield","jlp","jupiter","kamino","pinocchio","anchor","sdk"],"license":"Apache-2.0","_id":"@elmntl/jlpd-sdk@2.0.0","maintainers":[{"name":"noritake","email":"w7017232@gmail.com"},{"name":"capagris","email":"capagris@elemental.fund"}],"dist":{"shasum":"c4817ba3f906573cdcaaa89bb763a1009b42ef5a","tarball":"https://registry.npmjs.org/@elmntl/jlpd-sdk/-/jlpd-sdk-2.0.0.tgz","fileCount":139,"integrity":"sha512-EKy9ReMIIaUvcm7dkEvIyYrpb/u/uZ+vvidt8LWhAJLq+iT9lVVQKJJu0vbar7oQypXJjNtt1vys3oDewvAe7A==","signatures":[{"sig":"MEUCICeq1zVqB9RBx17XUVBBe+GCR2YFtcGxtkkv+yzLCCvFAiEAhUfvQN/n7WvEwOdcAvnWhQXIsqWLUV387zIOaHh6Uoo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1124550},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":"./dist/index.js","./common":"./dist/common/index.js","./p-stv-core":"./dist/p-stv-core/index.js","./jlpd-strategy":"./dist/jlpd-strategy/index.js","./onyc-strategy":"./dist/onyc-strategy/index.js","./elemental-lend":"./dist/elemental-lend/index.js","./p-stv-core/admin":"./dist/p-stv-core/admin.js"},"gitHead":"f522a2d7ebfc418c00586f7853daaf18e34c651b","scripts":{"test":"TS_NODE_TRANSPILE_ONLY=true mocha --require ts-node/register --extensions ts \"src/**/__tests__/**/*.test.ts\"","build":"tsc","clean":"rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"noritake","email":"w7017232@gmail.com"},"_npmVersion":"12.0.2","description":"SDK for JLP.D (JLP Deconstructed) by Elemental — p-stv-core, jlpd-strategy, and elemental-lend clients","directories":{},"_nodeVersion":"22.23.2","dependencies":{"bn.js":"^5.2.1"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"common":["dist/common/index.d.ts"],"p-stv-core":["dist/p-stv-core/index.d.ts"],"jlpd-strategy":["dist/jlpd-strategy/index.d.ts"],"onyc-strategy":["dist/onyc-strategy/index.d.ts"],"elemental-lend":["dist/elemental-lend/index.d.ts"],"p-stv-core/admin":["dist/p-stv-core/admin.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.5.0","mocha":"^10.8.2","ts-node":"^10.9.2","typescript":"^5.3.3","@types/chai":"^4.3.20","@types/bn.js":"^5.2.0","@types/mocha":"^10.0.10","@solana/web3.js":"^1.95.0","@solana/spl-token":"^0.4.0"},"peerDependencies":{"@solana/web3.js":"^1.95.0","@solana/spl-token":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/jlpd-sdk_2.0.0_1786686942720_0.6973818978635737","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-01-26T07:50:20.909Z","modified":"2026-08-14T07:10:16.738Z","0.1.0":"2026-01-26T07:50:21.125Z","1.0.8":"2026-01-26T10:20:08.551Z","1.0.9":"2026-01-27T01:52:52.177Z","1.0.10":"2026-01-31T12:58:55.426Z","0.1.2":"2026-01-31T14:14:33.991Z","0.1.3":"2026-02-01T08:02:38.012Z","0.1.4":"2026-02-04T11:18:37.191Z","0.1.5":"2026-02-04T13:54:41.987Z","0.1.6":"2026-02-15T06:10:42.744Z","0.1.7":"2026-02-20T11:45:41.749Z","0.1.8":"2026-02-21T01:51:17.738Z","0.1.9":"2026-02-21T06:17:24.329Z","0.1.11":"2026-02-25T11:15:52.408Z","0.2.0":"2026-03-02T03:14:07.307Z","0.13.4":"2026-07-17T02:14:17.215Z","0.13.5":"2026-07-17T13:38:38.282Z","0.13.6":"2026-07-20T06:14:12.025Z","0.13.7":"2026-07-21T00:36:32.455Z","0.13.8":"2026-07-22T09:24:04.025Z","0.14.0":"2026-07-27T07:24:52.652Z","0.14.1":"2026-07-27T07:37:04.930Z","2.0.0":"2026-08-14T05:55:42.849Z"},"license":"Apache-2.0","keywords":["solana","defi","vault","yield","jlp","jupiter","kamino","pinocchio","anchor","sdk"],"description":"SDK for JLP.D (JLP Deconstructed) by Elemental — p-stv-core, jlpd-strategy, and elemental-lend clients","maintainers":[{"name":"capagris","email":"capagris@elemental.fund"},{"name":"noritake","email":"w7017232@gmail.com"}],"readme":"# @elmntl/jlpd-sdk\n\nTypeScript SDK for the **Elemental Vaults** on-chain stack. Wraps three Solana programs through one consistent surface so frontends, indexers, and back-end services don't need to hand-roll discriminators, PDA derivation, or account layouts.\n\n## LP surface vs admin/operator surface\n\n**An LP-facing frontend only ever needs the root export of `pStvCore`** (and,\nread-only, `elementalLend`/`jlpdStrategy` for dashboards). Genesis/operator/\nkeeper-only builders are namespaced OUT of the root under `.admin` so they\nnever show up in LP-facing autocomplete or bundles — this is a deliberate\nsurface fence, not an oversight (round-6 hardening; breaking re-org, see\nCHANGELOG).\n\n| Surface | What's there | Who calls it |\n| --- | --- | --- |\n| `pStvCore.*` (root) | `createDepositIx`, `createRequestWithdrawIx`, `createClaimWithdrawIx`, `createInstantWithdrawIx`, `createProcessDelayedDepositIx` (round-7 LOW-5 — permissionless, completes an LP's own delayed deposit); `buildDepositContext`, `buildClaimWithdrawContext`; `checkDepositReadiness`/`checkClaimReadiness`/`checkRequestWithdrawReadiness`; `fetchVaultDashboard`; PDA/account/event/error/price/LUT/send-tx helpers | LP frontends, wallets |\n| `pStvCore.admin.*` | `createInitOrUpdateStvIx`, `createSeedStvIx`, `createAcceptVaultAdminIx`, `createCloseStvIx`, `createAddManagerIx`/`createRemoveManagerIx`, `createDepositToStrategyIx`/`createWithdrawFromStrategyIx`, `createOverrideClaimWithdrawIx`, `createProcessEpochIx`, `createTripCircuitBreakerIx`, freeze/unfreeze WR + evX builders, migrate admin builders (`createMigrateLendIx`/`createMigrateRequestIx`/`createMigrateExecuteIx`/`createMigrateCancelIx`), `buildProcessEpochContext`/`buildDepositToStrategyContext` | Vault admin (cold/warm), managers, keepers — genesis, epoch cranking, sweep cranking, freeze/override circuit breakers. Never an LP flow. |\n| `elementalLend.admin.*` | Strategy init/close/reset, manager-role management, manager-signed kVault/Jupiter Lend sweep/unsweep builders, `buildProtocolActionIxs` (round-7 MED-3 — manager-signed protocol deposit/withdraw, derives a `ManagerRole` PDA) | Manager/keeper, invoked by p-stv-core's own admin flows — never an LP |\n| `jlpdStrategy.admin.*` | Strategy-state init/close, config init, manager-role management | Admin/keeper genesis only |\n\n`elemental-lend-v2` is experimental and undeployed — **not exported from the\nSDK root at all** (no `elementalLendV2` namespace; the module stays on disk,\nunpublished).\n\n```\n@elmntl/jlpd-sdk\n├── /common          shared types, buffer helpers, connection type, discriminators\n├── /p-stv-core      vault management — deposits, withdraws, epochs, fees      (level N)\n├── /elemental-lend  idle-base lending sweep into Kamino + Jupiter Lend Earn   (level N − 1)\n├── /jlpd-strategy   JLP-Deconstructed yield strategy + lend-adapter wiring    (level N + 1 / N + 2)\n└── /onyc-strategy   onyc/USDC strategy (STV 16) — error-code messages today\n```\n\n## At a glance\n\n| Module                       | Wraps program                                  | What it gives you                                                                                                                                                            |\n| ---------------------------- | ----------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `@elmntl/jlpd-sdk/p-stv-core`     | `PSTVH77GiPqA3msXmpjAyUXdh3MytK37GCPbPzWu3Rc` | STV / GlobalConfig / WithdrawRequest / ManagerRole accounts; all 14 instruction builders, 5 LP-facing at root (`createDepositIx`, `createRequestWithdrawIx`, `createClaimWithdrawIx`, `createInstantWithdrawIx`, `createProcessDelayedDepositIx`) + 9 admin/operator under `.admin` (`createProcessEpochIx`, `createMigrateLendIx`, …) — see \"LP surface vs admin/operator surface\" above; event decoders (18 event types); the `sendSmartTx` smart sender (auto CU sim, priority fee, LUT merge); wSOL wrap/unwrap helpers; USD price fetcher; `fetchVaultDashboard` (live NAV/pps/evX-position reader); `resolveVaultError` (on-chain `VaultError` → LP-facing message) |\n| `@elmntl/jlpd-sdk/elemental-lend` | `EHaGVh7p6xSxZsq4CcEEZhnV5adDvWg1gS1Rc5rLiBpC` | StrategyState / StvPosition / ManagerRole accounts; CPI + protocol instruction builders; Kamino kVault and Jupiter Lend Earn account-resolution helpers; auto-route / auto-unroute account builders for sweep flows |\n| `@elmntl/jlpd-sdk/jlpd-strategy`  | `GXqt4ZH2UUBsLWwMNJiZMXza3q7xEGChfW8XjVRjLxr5` | JlpdConfig / per-asset StrategyState / StvPosition; CPI + rebalance instruction builders (`createSwapJlpIx`, `createSettleYieldIx`, `createDepositToAdapterIx`, …); Jupiter swap quote / instruction fetchers; on-chain JLP price + custody readers |\n| `@elmntl/jlpd-sdk/onyc-strategy`  | `8PGHppQRB8GSN7Mh1Mptv7J1WZ1JqZCghG7AawrNoJZ` | `resolveOnycStrategyError` — the onyc/USDC strategy's OWN `OnycStrategyError` space mapped to LP-facing messages (separate error space from p-stv-core's `VaultError` — see that function's doc). Narrower today than the other modules: no PDA/account/instruction helpers yet, error messages only |\n| `@elmntl/jlpd-sdk/common`         | (no program)                                    | Buffer reads with bounds checks, ATA derivation, the canonical `SolanaConnection` structural type, the `StrategyStateHeader` / `StvPosition` interfaces shared across every strategy program, and the generic `resolveProgramError`/`extractCustomProgramErrorCode` custom-error parser every program's error map is built on |\n\n## Module layout\n\nEvery program-specific module follows the **same file shape**, so you only have to learn the pattern once:\n\n```\n<module>/\n├── constants.ts           program ID, seeds, instruction discriminators, sizes, flags\n├── pda.ts                 findXxxPda() helpers — pure synchronous PDA derivation\n├── types.ts               account interfaces + event types\n├── accounts.ts            deserializeXxx() + fetchXxx() readers + GPA queries\n├── instructions.ts        createXxxIx() instruction builders\n├── events.ts              event decoders (p-stv-core: 1-byte disc; Anchor: 8-byte)\n└── (module-specific files)\n\nModule-specific files:\n  p-stv-core:       remaining-accounts.ts, send-tx.ts, sol-wrap.ts, prices.ts,\n                     readiness.ts, withdraw-requests.ts, errors.ts, dashboard.ts\n  elemental-lend:   kamino-vault.ts, jupiter-lend.ts, protocol-actions.ts\n  jlpd-strategy:    swap-jlp.ts, settle-yield.ts, jlp-data.ts,\n                    jlp-borrow.ts, jupusd-earn.ts, adapter.ts\n```\n\n`onyc-strategy` is an exception to the standard shape above: it wraps a\nstrategy program p-stv-core CPIs into, not a program this SDK issues its own\ninstructions against, so it currently only has `errors.ts`. Its own numeric\n`Custom(n)` error space is entirely separate from p-stv-core's — see\n`resolveOnycStrategyError`'s doc for how the two relate.\n\nNaming conventions hold across modules:\n\n| Pattern         | Returns                   | Side effects |\n| --------------- | ------------------------- | ------------ |\n| `findXxxPda`    | `[PublicKey, number]`     | none         |\n| `deserializeXxx`| typed account             | none         |\n| `fetchXxx`      | typed account             | one RPC call |\n| `createXxxIx`   | `TransactionInstruction`  | none         |\n| `buildXxx*`     | helper objects            | none         |\n\n`build*` is reserved for helpers that produce ephemeral data (remaining accounts, batched instruction lists). Anything that returns a wire-ready instruction is named `createXxxIx`.\n\n## Naming exceptions worth knowing\n\nEach program has its own `ManagerRole` PDA scoped to a different anchor account. To prevent same-named imports from shadowing each other, the helpers carry a per-program prefix:\n\n| Program         | Function                  | PDA seeds                                |\n| --------------- | ------------------------- | ---------------------------------------- |\n| p-stv-core      | `findStvManagerRolePda`   | `[\"manager\", stv, manager]`              |\n| elemental-lend  | `findLendManagerRolePda`  | `[\"manager\", strategy_state, manager]`   |\n| jlpd-strategy   | `findJlpdManagerRolePda`  | `[\"manager\", config, manager]`           |\n\n## Cross-cutting design\n\n### `SolanaConnection` (structural type)\n\nEvery helper that needs RPC accepts `SolanaConnection`, defined in `common/connection.ts` as a `Pick<Connection, ...>` of just the methods we use. This means callers can pass any version of `@solana/web3.js` without nominal type mismatches across SDK / consumer versions. Narrower call sites use a further `Pick` (e.g. `ProtocolActionConnection` in `elemental-lend/protocol-actions.ts` is `Pick<SolanaConnection, \"getAccountInfo\" | \"getMultipleAccountsInfo\">`).\n\n### Numeric convention (BN vs number)\n\nDocumented at the top of `p-stv-core/types.ts`:\n\n- **u64 fields** are deserialized as `BN` (bn.js)\n- **u32 / u16 / u8 fields** are deserialized as plain JavaScript `number`\n\nMixing the two does not auto-convert and silently truncates — when adding new fields to any account interface, follow the rule.\n\n**Ix builder u64 args accept `BN | number | bigint`.** `createDepositIx` /\n`createRequestWithdrawIx` / `createWithdrawFromStrategyIx` /\n`createInstantWithdrawIx` / `createSeedStvIx` / `InitOrUpdateStvArgs.vaultId`\n/ `findStvPda` / `findEvMintPda` (and every other u64-typed builder arg in\n`p-stv-core/instructions.ts` and `pda.ts`) accept a native `bigint` in\naddition to `BN`/`number` — `fetchVaultDashboard` returns `bigint`\nthroughout (see that section below), so a displayed value flows straight\ninto a deposit/withdraw amount with no `new BN(x.toString())` bridge. All\nthree input types serialize byte-identically for the same logical value\n(`common/toBN`, the single normalization point every u64 write funnels\nthrough); `common/__tests__/buffer.test.ts` and\n`p-stv-core/__tests__/bigint-args.test.ts` hex-compare BN vs number vs\nbigint encodings to lock this down.\n\n### Discriminators\n\n- **p-stv-core (Pinocchio)** uses 1-byte instruction discriminators (0x00–0x0C, 13 instructions). Account discriminators are still 8 bytes for Anchor compatibility.\n- **elemental-lend** and **jlpd-strategy** are Anchor 0.32.1 programs and use 8-byte instruction discriminators throughout.\n- Account discriminators that are truly shared across programs (`ManagerRole`, `StrategyState`, `StvPosition`) live once in `common/constants.ts` and are re-exported by each module.\n\nEach constant is documented inline with the source — for example `IX_ADD_MANAGER` in elemental-lend has a `// sha256(\"global:add_manager\")[..8]` comment so an auditor can re-derive it.\n\n### Buffer reads\n\n`common/buffer.ts` provides bounds-checked readers (`readPubkey`, `readU64`, `readU32`, `readU16`, `readU8`) and the corresponding writers / optional-encoders. Each read helper validates `offset + width <= data.length` and throws a descriptive `RangeError` rather than silently reading garbage when the offset is wrong.\n\n### Send-tx layer\n\n`p-stv-core/send-tx.ts` exposes `sendSmartTx(connection, instructions, payer, signTransaction, options?)`:\n\n1. Pre-checks the legacy serialized size to decide if a versioned tx is needed (no double-sign).\n2. Fetches blockhash + every default LUT (lend / stv / jlpd) + Helius priority-fee in parallel.\n3. Simulates with an inflated CU limit, takes the actual `unitsConsumed`, applies a 5% buffer, and prepends the right `ComputeBudgetProgram` instructions.\n4. Falls back from legacy → versioned automatically when CU instructions push the size over `MAX_LEGACY_SIZE`.\n5. Confirms via `lastValidBlockHeight`.\n\nThe `signTransaction` callback is generic over `Transaction | VersionedTransaction` so wallets pass the same callback the SDK uses on either path. The optional `rpcUrl` field in `SmartTxOptions` is the only way the SDK reaches a Helius endpoint — it never reads private fields off the connection object.\n\n### Address Lookup Tables\n\n`p-stv-core/send-tx.ts` exports `DEFAULT_LUT_ADDRESSES`:\n\n```ts\n{\n  lend: PublicKey,   // Elemental Lend infrastructure\n  stv:  PublicKey,   // p-STV Core vaults / evMints / vault ATAs\n  jlpd: PublicKey,   // JLPD Strategy state / positions / oracles\n}\n```\n\n`sendSmartTx` always fetches all three. Consumers building transactions outside `sendSmartTx` should import these and merge them into their own LUT list. Server-side jobs (`jlpd-server/src/jobs/ltv-rebalance.ts`) use this same export — the SDK is the single source of truth.\n\n## Installation\n\n```bash\nnpm install @elmntl/jlpd-sdk\n# or\nyarn add @elmntl/jlpd-sdk\n# or\npnpm add @elmntl/jlpd-sdk\n```\n\n> **`@elmntl/jlpd-sdk` is the only current package.** `@elemental-stv-core/sdk`\n> and `@elemental-vaults/sdk` are earlier names for this same package —\n> `@elemental-stv-core/sdk` is deprecated on the npm registry (frozen at\n> `0.13.4`, missing the `0.14.0` breaking claim-redirect removal) and neither\n> alias receives new releases. If you see either name in an older script or\n> doc in this monorepo, treat it as historical and install `@elmntl/jlpd-sdk`\n> instead — `npm install @elemental-stv-core/sdk` from a clean environment\n> gets you a stale, unmaintained copy with a real ABI difference (see\n> `CHANGELOG.md`'s `0.14.0` entry).\n\nPeer dependencies must be installed in the consumer:\n\n```bash\nnpm install @solana/web3.js@^1.95.0 @solana/spl-token@^0.4.0\n```\n\n## Quick examples\n\n### Deposit base into a vault from a frontend\n\n**Every deposit into a strategy-linked STV must carry a strategy NAV tail.**\nCore CPIs the strategy's `update_aum` to price pre-deposit NAV, so\n`remainingAccounts` needs `[strategyState(w), stvPosition(ro), strategyProgram(ro)]`\n(plus a lend tail first, if the vault has `lendProgram` active) — and\n`protocolAumCount`/`autoRouteCount` must be wired from the SAME `buildDepositContext`\ncall that built `remainingAccounts`. All three are optional params on\n`createDepositIx` that silently default to empty/zero — dropping any one of\nthem **compiles fine and builds an instruction that reverts on-chain**\n(`IncompleteStrategyAccounts`) with no TypeScript error to warn you. The\nexample below is copy-paste correct for vault 16 (\"onyc\", base USDC,\nstrategy-linked, no lend) — spread the FULL `ctx` object into `createDepositIx`,\nnever just one field off it.\n\n```ts\nimport BN from \"bn.js\";\nimport { TOKEN_PROGRAM_ID } from \"@solana/spl-token\";\nimport {\n  findConfigPda,\n  findStvPda,\n  findEvMintPda,\n  fetchStv,\n  buildDepositContext,\n  createDepositIx,\n  checkDepositReadiness,\n  sendSmartTx,\n} from \"@elmntl/jlpd-sdk/p-stv-core\";\nimport { findAta, createIdempotentAtaIx } from \"@elmntl/jlpd-sdk/common\";\n\n// Inputs assumed from the caller's context:\n//   connection: Connection — RPC connection\n//   user: PublicKey        — the connected wallet's public key\n//   signTransaction        — the connected wallet's sign callback\n\nconst VAULT_ID = 16; // onyc / USDC\n\nconst [config] = findConfigPda();\nconst [stv] = findStvPda(VAULT_ID);\nconst [evMint] = findEvMintPda(VAULT_ID);\n\n// 1. Fetch the STV. Needed both to build the VaultInfo below (baseMint,\n//    lendProgram, strategy) and to derive the ATAs that follow (baseMint,\n//    feeReceiver).\nconst stvState = await fetchStv(connection, VAULT_ID);\n\n// 2. Preflight the strategy-freshness gate BEFORE building a transaction — a\n//    stale strategy reverts StaleStrategyData. This mirrors that on-chain\n//    gate exactly, so the UI can show \"vault pricing is refreshing, try again\n//    shortly\" instead of letting the user pay gas for a guaranteed revert.\n//\n//    EXHAUSTIVE switch, not a single `=== \"stale\"` check (round-7 MED-1) —\n//    `DepositReadiness` has 4 members; blocking on only one and falling\n//    through on everything else means a NON-\"ok\", NON-\"stale\" status (e.g.\n//    `unknownFreshnessCapability`, which p-stv-core's own capability\n//    registry can legitimately return for a strategy program this SDK\n//    doesn't ship canonical support for) silently proceeds into a\n//    deterministic on-chain revert instead of being surfaced to the LP.\nconst readiness = await checkDepositReadiness(connection, stvState);\nswitch (readiness.status) {\n  case \"ok\":\n    break; // proceed to build + send below\n  case \"stale\":\n    throw new Error(readiness.hint); // or: disable the deposit button and render readiness.hint\n  case \"unsupportedAllocator\":\n    throw new Error(\"this helper does not preflight allocator vaults — see checkDepositReadiness's own doc\");\n  case \"unknownFreshnessCapability\":\n    // Every strategy this SDK ships canonical support for (onyc, JLPD) is\n    // ALWAYS registered — see common/strategy-refresh.ts's own doc — so\n    // reaching this branch for vault 16 specifically would itself be a bug\n    // report, not a routine \"try again\" state. Still handled explicitly:\n    // never silently treat an unrecognized status as safe to proceed past.\n    throw new Error(\n      `no freshness capability registered for strategy ${readiness.strategyProgramId.toBase58()}`,\n    );\n}\n\n// 3. Build the full remaining-accounts tail (lend, if active — onyc/vault 16\n//    has none — plus the strategy pair + strategy program).\nconst ctx = await buildDepositContext(connection, {\n  address: stv,\n  baseMint: stvState.baseMint,\n  lendProgram: stvState.lendProgram,\n  strategy: stvState.strategy,\n  tokenProgram: TOKEN_PROGRAM_ID,\n});\n\nconst vaultAta = findAta(stvState.baseMint, stv, TOKEN_PROGRAM_ID);\nconst userBaseAta = findAta(stvState.baseMint, user, TOKEN_PROGRAM_ID);\nconst userEvAta = findAta(evMint, user, TOKEN_PROGRAM_ID);\nconst feeReceiverEvAta = findAta(evMint, stvState.feeReceiver, TOKEN_PROGRAM_ID);\n\nconst amount = new BN(1_000_000_000); // 1,000 USDC (6 decimals)\nconst minShares = new BN(0); // set a real slippage floor in production\n\nconst ix = createDepositIx({\n  user, config, stv, vaultAta, userBaseAta, userEvAta, evMint, feeReceiverEvAta,\n  baseMint: stvState.baseMint, tokenProgram: TOKEN_PROGRAM_ID,\n  amount, minShares,\n  // The three fields a broken example once dropped — always spread the FULL ctx:\n  remainingAccounts: ctx.remainingAccounts,\n  protocolAumCount: ctx.protocolAumCount,\n  autoRouteCount: ctx.autoRouteCount,\n});\n\nconst sig = await sendSmartTx(\n  connection,\n  [\n    ...ctx.preInstructions,\n    createIdempotentAtaIx(user, evMint, user, TOKEN_PROGRAM_ID), // no-op if userEvAta already exists\n    ix,\n  ],\n  user,\n  signTransaction,\n);\n```\n\nA parity test (`src/p-stv-core/__tests__/readme-deposit-example.test.ts`) builds\nthis exact instruction and asserts it is account-for-account and byte-identical\nto the mainnet-proven `p-stv-core/scripts/deposit-onyc-stv.ts`'s hand-built\nequivalent — so a regression here fails `npm test`, not a real user's transaction.\n\n#### Staleness: preflight-and-block, or self-heal (opt-in)\n\nThe example above uses **Pattern A** — preflight and block: check\n`checkDepositReadiness` and disable the deposit button on `\"stale\"`, adding\nno extra RPC call on the happy path. There is a second, opt-in pattern for a\nUI that would rather absorb the refresh itself than show a \"try again\nshortly\" message:\n\n**Pattern B — self-heal.** Pass `{ selfHealStaleness: true }` as\n`buildDepositContext`'s 4th argument and it looks up the linked strategy's\n**freshness CAPABILITY** (round-6 — no age-sampling, no on-chain read of the\nstrategy's `last_updated` at all): a `needsExternalRefresh` strategy (e.g.\nonyc) gets a registered refresh instruction bundled into\n`ctx.preInstructions` **unconditionally, every call** — not \"only when a\nsampled timestamp looks stale\" — because an extra refresh is idempotent and\n~cheap on-chain, and unlike any age-sampling scheme it stays correct at the\nactual transaction-submission boundary, not just at the moment this function\nran. A `selfRefreshing` strategy is a no-op. This is the SAME capability\nmodel `buildProcessEpochContext(\"lockPps\")` already uses for the crank path\n(see below) — `registerStrategyRefreshRequirement`/`getStrategyFreshnessCapability`\n(`@elmntl/jlpd-sdk/common`) is the shared registry both go through.\n\n```ts\nimport \"@elmntl/jlpd-sdk/onyc-strategy\"; // registers onyc's refresh_aum builder AND its needsExternalRefresh capability — required for self-heal to find it\n\nconst ctx = await buildDepositContext(connection, vault, payer, { selfHealStaleness: true });\n// ctx.preInstructions is [] for a selfRefreshing strategy (or no strategy at\n// all), or [refreshAumIx] for a needsExternalRefresh one like onyc — either\n// way, spread it in.\nconst ix = createDepositIx({ /* ... */ remainingAccounts: ctx.remainingAccounts, protocolAumCount: ctx.protocolAumCount, autoRouteCount: ctx.autoRouteCount });\nconst sig = await sendSmartTx(connection, [...ctx.preInstructions, ix], user, signTransaction);\n```\n\n`selfHealStaleness` is **off by default** — omitting the 4th argument (or\npassing `{}` / `{ selfHealStaleness: false }`) is byte-for-byte the same\n`buildDepositContext` behavior this SDK has always had; existing callers are\nunaffected unless they explicitly opt in. Like `buildProcessEpochContext`,\nthis throws `StrategyRefreshRequiredError` — fails closed — if the strategy\nneeds an external refresh and no refresh builder is registered for it, and\nthrows a plain `Error` if the strategy's capability was never registered at\nall (UNKNOWN — round-6: there is no default in either direction; see\n`common/strategy-refresh.ts`'s own doc for why an earlier \"unregistered =\nself-refreshing\" default silently misclassified canonical JLPD). Covered by\n`src/p-stv-core/__tests__/deposit-self-heal.test.ts`, including a dedicated\nback-compat suite proving the option's absence changes nothing.\n\n#### Which instructions need the strategy tail?\n\n`remainingAccounts` + `protocolAumCount`/`autoRouteCount` are not always\nrequired — only the instructions that compute a LIVE strategy NAV need them.\nVerified per-handler against `p-stv-core/programs/p-stv-core/src` (a\n\"user vs. manager\" grouping does NOT track this — check per instruction):\n\n| Instruction | Needs the strategy tail? | Staleness threshold |\n| --- | --- | --- |\n| `deposit` | **Yes**, when `stv.strategy != PublicKey.default` and the STV is not an allocator | `stv.strategyStalenessThreshold \\|\\| DEFAULT_STRATEGY_STALENESS_THRESHOLD` (24 h default) |\n| `instant_withdraw` | **Yes** (same rule) | same 24 h-default field |\n| `process_delayed_deposit` | **Yes** (same rule) | same 24 h-default field |\n| `deposit_to_strategy` / `withdraw_from_strategy` (manager-only) | **Yes**, but via named `strategyState`/`stvPosition` args, not `remainingAccounts` | same 24 h-default field |\n| `process_epoch` — **first call** (`stv.epochPps == 0`) | **Yes** | `PROCESS_EPOCH_STRATEGY_STALENESS_THRESHOLD` — **30 seconds**, not 24 h; `buildProcessEpochContext(connection, vault, \"lockPps\")` checks this itself and auto-bundles the refresh (see below) rather than leaving the caller to remember it |\n| `process_epoch` — **continuation call** (`stv.epochPps != 0`) | No — price is already locked; `remainingAccounts` is the list of `WithdrawRequest` PDAs to settle instead | n/a |\n| `request_withdraw` | No — no NAV computation at all | n/a |\n| `claim_withdraw` | No STRATEGY tail — pays out at the already-locked `wr.pps`, never CPIs the strategy. **But NOT bare-instruction-safe on a lend-active vault** (round-5 MED-1): core unconditionally parses claim_withdraw's 4 fixed LEND accounts before checking idle liquidity at all (`claim.rs:348`) — ALWAYS build through `buildClaimWithdrawContext`, never a bare `createClaimWithdrawIx`, regardless of `checkClaimReadiness`'s status. See \"Check withdrawal-request status\" below. | n/a |\n\n`protocolAumCount`/`autoRouteCount`/`autoUnrouteCount` are non-zero only when\nthe vault has an active `lendProgram` (`stv.lendProgram != PublicKey.default`)\n— onyc/vault 16 has none, so all are always `0` for it. `buildDepositContext` /\n`buildClaimWithdrawContext` / `buildDepositToStrategyContext` /\n`buildProcessEpochContext` compute the correct non-zero values for vaults\nthat DO have lend active — including, as of round-5, auto-unroute for a\nKamino-registered protocol, not just a static Jupiter-pool lookup (MED-2; see\n`buildClaimWithdrawContext`'s own doc comment in `remaining-accounts.ts`).\nAlways take the counts from the same context object you took\n`remainingAccounts` from.\n\n`DEFAULT_STRATEGY_STALENESS_THRESHOLD` and `PROCESS_EPOCH_STRATEGY_STALENESS_THRESHOLD`\nare exported from `@elmntl/jlpd-sdk/p-stv-core` — read the real values from\nthere rather than hardcoding them a third time.\n\n#### `process_epoch`'s first call: the strategy refresh is bundled for you\n\nThe mainnet-proven crank (`process-epoch-onyc.ts`) always sends onyc's own\n`refresh_aum` immediately before `process_epoch`'s first call in the SAME\ntransaction — onyc's `update_aum` CPI (the one `process_epoch` itself\ntriggers) does **not** stamp `last_updated` fresh for an already-solvent\nstrategy, so without the standalone `refresh_aum`, the 30-second staleness\ncheck reverts `StaleStrategyData` on essentially every call.\n\n`buildProcessEpochContext(connection, vault, \"lockPps\")` reproduces this for\nyou: it checks the linked strategy's registered freshness CAPABILITY\n(round-6 — not a sampled `last_updated` timestamp) and, for a\n`needsExternalRefresh` strategy (onyc, JLPD), looks up a\n`StrategyRefreshBuilder` registered for `vault.strategy` and populates\n`ctx.preInstructions` with the refresh instruction UNCONDITIONALLY — every\ncall, not only \"when a sample looks stale\" — since an extra refresh is\nidempotent and ~free on-chain, and this is the only way to stay correct at\nthe actual submission boundary rather than at the moment this function\nhappens to sample state. A `selfRefreshing` strategy is a no-op (no extra\ninstruction, no extra RPC read). If no builder is registered for a\n`needsExternalRefresh` strategy program, it throws\n`StrategyRefreshRequiredError` — fails closed — rather than silently\nhanding back a context that's guaranteed to revert on submission.\n\nThis is admin/keeper-only (epoch cranking) — `buildProcessEpochContext` and\n`createProcessEpochIx` live under the `.admin` fence (round-6 MED-1), not the\nLP root:\n\n```ts\nimport { buildProcessEpochContext, createProcessEpochIx } from \"@elmntl/jlpd-sdk/p-stv-core/admin\";\n// Registers onyc's refresh_aum builder as a side effect — required for the\n// auto-bundling above to find it for an onyc-linked vault.\nimport \"@elmntl/jlpd-sdk/onyc-strategy\";\n\nconst ctx = await buildProcessEpochContext(connection, vault, \"lockPps\");\nconst ix = createProcessEpochIx({\n  payer, config, stv, evMint, feeReceiverEvAta, escrowEvAta, vaultAta, tokenProgram,\n  advanceEpoch: false,\n  remainingAccounts: ctx.remainingAccounts,\n  protocolAumCount: ctx.protocolAumCount,\n});\n\n// For a `needsExternalRefresh` strategy (onyc, jlpd) ctx.preInstructions ALWAYS\n// contains the bundled refreshAumIx — the refresh is unconditional, never\n// freshness-sampled. Spread it in verbatim; do not reimplement conditional logic.\nconst sig = await sendSmartTx(connection, [...ctx.preInstructions, ix], payer, signTransaction);\n```\n\nA parity test (`src/p-stv-core/__tests__/process-epoch-context.test.ts`) builds\nthis exact two-instruction bundle and asserts it is account-for-account and\nbyte-identical to `process-epoch-onyc.ts`'s own hand-built\n`[refreshAumIx, processEpochIx]` pair.\n\nFor a strategy program other than onyc, call\n`registerStrategyRefreshBuilder(programId, builder)`\n(`@elmntl/jlpd-sdk/common`) yourself before calling `buildProcessEpochContext`\n— see `onyc-strategy/refresh-aum.ts` for the shape a builder implements.\n\n### Preflight a request-withdraw\n\n`request_withdraw` has no strategy tail and no on-chain NAV computation — its\nown guard chain is a set of vault/protocol flags, the current epoch state,\nand the caller's own evX balance. `checkRequestWithdrawReadiness` mirrors\nthat chain, in the SAME order `request_withdraw.rs` checks it, completing\nthe preflight trilogy alongside `checkDepositReadiness`/`checkClaimReadiness`:\n\n```ts\nimport {\n  checkRequestWithdrawReadiness,\n  findWithdrawRequestPda,\n  createRequestWithdrawIx,\n  fetchGlobalConfig,\n} from \"@elmntl/jlpd-sdk/p-stv-core\";\nimport { findAta } from \"@elmntl/jlpd-sdk/common\";\nimport BN from \"bn.js\";\n\nconst shares = new BN(500_000); // evX to queue for withdrawal\n\nconst globalConfig = await fetchGlobalConfig(connection); // optional — omit to let the function fetch it itself\nconst readiness = await checkRequestWithdrawReadiness(connection, stvState, { user, shares, globalConfig });\n\nswitch (readiness.status) {\n  case \"ok\":\n    break; // proceed to build + send below\n  case \"insufficientEvBalance\":\n    console.log(`have ${readiness.available.toString()} evX, need ${readiness.requested.toString()}`);\n    return;\n  case \"seedFloorViolation\":\n    console.log(`would drop supply to ${readiness.supplyAfterBurn.toString()}, below the seed floor of ${readiness.floor.toString()}`);\n    return;\n  case \"epochAlreadyProcessed\":\n    console.log(\"the crank is mid-cycle — try again after it advances to the next epoch\");\n    return;\n  default:\n    // protocolPaused / vaultPaused / withdrawalsDisabled / vaultNotSeeded /\n    // wrongWithdrawMode / noSharesRequested, plus the existingRequest*\n    // family (round-7 MED-4 — a same-epoch top-up onto an already-open\n    // WithdrawRequest that's frozen / migrate-kind / has invalid\n    // flags-or-destination-fields / fails PDA self-verification / epoch- or\n    // user-mismatched / already priced; see readiness.ts's own doc on\n    // RequestWithdrawReadiness for the full list) — disable the button;\n    // each needs a different admin action or client-side fix, not a retry.\n    console.log(readiness.status);\n    return;\n}\n\nconst [config] = findConfigPda();\nconst [withdrawRequest, wrBump] = findWithdrawRequestPda(stv, user, stvState.currentEpochId);\nconst userEvAta = findAta(evMint, user, TOKEN_PROGRAM_ID);\nconst escrowEvAta = findAta(evMint, stv, TOKEN_PROGRAM_ID);\n\nconst ix = createRequestWithdrawIx({\n  user, config, stv, withdrawRequest, userEvAta, escrowEvAta, evMint,\n  tokenProgram: TOKEN_PROGRAM_ID, shares, wrBump,\n});\nconst sig = await sendSmartTx(connection, [ix], user, signTransaction);\n```\n\nCovered by `src/p-stv-core/__tests__/request-withdraw-readiness.test.ts` — one\ncase per guard, in handler order, plus the bigint/BN/number acceptance of\nthe `shares` param.\n\n### Check withdrawal-request status and enumerate a user's requests\n\n**`\"claimable\"` and `\"claimableLendActive\"` mean ELIGIBLE TO ATTEMPT with a\nsuccessfully built claim context — NEITHER status, by itself, guarantees\n`claim_withdraw` will succeed (round-5 MED-1).** `checkClaimReadiness` is a\nunified, fail-closed preflight that mirrors `execute_claim`/`claim_withdraw.rs`'s\nown check order exactly: protocol-wide pause, then `wr.pps == 0`, then\nmigrate-kind, then frozen, then STV-paused, then the claim timelock, then the\nwithdraw rate limit, then vault liquidity. A request can look superficially\n\"ready\" (priced, timelock passed) and still be guaranteed to revert for any of\nthe earlier reasons — those are now first-class statuses (`protocolPaused`,\n`migrateRequest`, `frozen`, `vaultPaused`, `rateLimited`), not folded into a\nnarrower `\"claimable\"` the way an earlier version of this helper did.\n\n**On ANY lend-active vault, `\"claimable\"` is not enough on its own — you MUST\nbuild through `buildClaimWithdrawContext`, never a bare `createClaimWithdrawIx`.**\nCore unconditionally parses this instruction's 4 fixed lend accounts BEFORE it\never checks idle liquidity (`claim.rs:348`) — so even a plain `\"claimable\"`\nstatus reverts on a lend-active vault if you build a bare instruction without\nthem. `buildClaimWithdrawContext` derives those accounts (plus the mandatory\nprotocol-AUM segment and, if needed, an auto-unroute route) for you — see\n\"Claim base from an unlocked WithdrawRequest\" below and step 5 of the full\nwalkthrough. This SDK cannot predict the protocol's own available liquidity,\nso neither status is a guarantee the on-chain unsweep will find enough —\nonly that the TRANSACTION ITSELF is well-formed and eligible to attempt.\n\n**`\"claimableLendActive\"` is NOT a block, despite the name overlap with\n`\"vaultUnderfunded\"`'s shape.** Both fire when idle `vault_ata` balance alone\nis short of the owed amount, but for a lend-active STV (`stv.lendProgram !=\nPublicKey.default`), `execute_claim` refreshes lend AUM and unsweeps the exact\ndeficit from the lend protocol BEFORE checking liquidity\n(`utils/claim.rs:338`) — only if the lend protocol itself can't cover the\ndeficit does the claim actually revert. This SDK does not read\nprotocol-specific available-liquidity state (Kamino reserve liquidity,\nJupiter Lend pool liquidity, …) to predict that outcome, so it reports this\ndistinct, non-blocking status instead of guessing wrong in either direction.\n**Attempt on `\"claimable\"` OR `\"claimableLendActive\"` (always via\n`buildClaimWithdrawContext`); treat every other status as non-sendable.**\n(Vault 16 / onyc has no lend program, so it can only ever report `\"claimable\"`\nor the genuine `\"vaultUnderfunded\"` block — this distinction matters for a\nlend-active vault.)\n\n```ts\nimport {\n  fetchUserWithdrawRequests,\n  checkClaimReadiness,\n  buildClaimWithdrawContext,\n  fetchGlobalConfig,\n} from \"@elmntl/jlpd-sdk/p-stv-core\";\n\n// Fetch GlobalConfig once and pass it to both calls below — optional (each\n// function fetches it itself when omitted), but saves an RPC round trip when\n// checking readiness for more than one request in the same render.\nconst globalConfig = await fetchGlobalConfig(connection);\n\n// All open (still-claimable-or-pending) requests for this user on this STV,\n// each with a derived display status — pending / migrateRequest / frozen /\n// vaultPaused / protocolPaused / priced / rateLimited / claimable /\n// claimableLendActive / awaiting-liquidity — plus gross/net/fee payout\n// figures. Returns [] once a request has been claimed — the WithdrawRequest\n// account is closed on claim, so there is nothing left to decode a \"claimed\"\n// status from; treat \"present before, absent now\" as claimed/closed in the UI.\nconst requests = await fetchUserWithdrawRequests(connection, { stv, user, globalConfig });\n\n// Or, for a single already-known request:\nconst wr = await fetchWithdrawRequest(connection, stv, user, epochId);\nconst readiness = await checkClaimReadiness(connection, stvState, wr, globalConfig);\nswitch (readiness.status) {\n  case \"claimable\":\n  case \"claimableLendActive\":\n    // Both are ELIGIBLE TO ATTEMPT — always build through\n    // buildClaimWithdrawContext (never a bare createClaimWithdrawIx), so a\n    // lend-active vault's mandatory lend accounts are present. See step 5\n    // of the full walkthrough below for the complete build+send.\n    break;\n  case \"vaultUnderfunded\":\n    console.log(`vault needs ${readiness.owed.sub(readiness.available).toString()} more base before this claim can pay out`);\n    break;\n  case \"rateLimited\":\n    console.log(`daily withdraw cap reached: ${readiness.dailyWithdrawnBase.toString()} / ${readiness.dailyLimit.toString()} — try again after the window resets`);\n    break;\n  case \"notYetClaimable\":\n    console.log(`claimable after ${new Date(readiness.availableAfter * 1000).toISOString()}`);\n    break;\n  case \"migrateRequest\":\n  case \"frozen\":\n  case \"vaultPaused\":\n  case \"protocolPaused\":\n  case \"epochNotCranked\":\n    // disable the claim button; each of these needs a different admin/manager action, not a retry from the user\n    break;\n}\n```\n\n### Render an LP dashboard (NAV, pps, and a user's position)\n\n`fetchVaultDashboard` mirrors the EXACT NAV/pps formula p-stv-core's own\non-chain code uses (`utils/nav.rs::compute_nav`/`compute_pps`) for a\nsingle-strategy, no-lend, non-allocator STV — onyc/vault 16 is exactly this\nshape. It returns both raw `bigint`s (for further math) and pre-formatted\ndecimal strings (for display) — see `formatRawAmount`'s doc for why this\nmodule uses `bigint` instead of `BN`/`Number` (no float precision loss on\nlarge values). It throws for a lend-active or allocator vault rather than\nsilently under-reporting NAV — read the thrown message for what's missing.\n\n```ts\nimport { fetchVaultDashboard } from \"@elmntl/jlpd-sdk/p-stv-core\";\n\nconst dashboard = await fetchVaultDashboard(connection, { stv, user });\n\nconsole.log(`NAV: ${dashboard.navFormatted}`);\nconsole.log(`Price per share: ${dashboard.ppsFormatted}`);\nconsole.log(`Total evX supply: ${dashboard.evSupplyFormatted}`);\n\nif (dashboard.user) {\n  console.log(`Your balance: ${dashboard.user.evBalanceFormatted} evX`);\n  console.log(`Your value: ${dashboard.user.valueBaseFormatted}`);\n  console.log(`Your share: ${(dashboard.user.shareOfVaultBps / 100).toFixed(2)}%`);\n}\n```\n\n**Staleness note:** for a strategy-linked vault, this NAV is only as fresh as\nthe strategy's `last_updated` — `dashboard.strategyLastUpdated` is included at\nno extra RPC cost (the account is already being read for `pps`), but this\nhelper does not gate on it. Pair it with `checkDepositReadiness` before\nenabling a deposit button; see that function's own doc/example above.\n\nA parity test (`src/p-stv-core/__tests__/readme-dashboard-example.test.ts`)\nruns this exact snippet against a fixture connection and asserts every\ndisplayed line matches the documented values — including a cross-check\nagainst p-stv-core's own Rust NAV unit-test fixtures\n(`instructions/user/deposit.rs`'s `test_nav_with_single_strategy` and\nfriends), not just this SDK's own arithmetic.\n\n### End-to-end LP journey: connect → view → deposit → request-withdraw → (operator crank) → claim\n\nEvery piece above, chained into one walkthrough for vault 16. This is the\nfull LP lifecycle — the pieces are individually parity-tested (see each\nsection above); this section just shows them in sequence. Two steps\n(marked below) happen OFF the LP's device: an operator has to crank\n`process_epoch` before a queued request becomes claimable — that's the\nsame operational dependency `checkClaimReadiness`'s `\"epochNotCranked\"`\nstatus surfaces, not something the LP's own wallet can do.\n\n```ts\nimport BN from \"bn.js\";\nimport { TOKEN_PROGRAM_ID } from \"@solana/spl-token\";\nimport {\n  findConfigPda, findStvPda, findEvMintPda, findWithdrawRequestPda,\n  fetchStv, fetchVaultDashboard, fetchUserWithdrawRequests,\n  buildDepositContext, createDepositIx, checkDepositReadiness,\n  createRequestWithdrawIx, checkRequestWithdrawReadiness,\n  buildClaimWithdrawContext, createClaimWithdrawIx, checkClaimReadiness,\n  sendSmartTx,\n} from \"@elmntl/jlpd-sdk/p-stv-core\";\nimport { findAta, createIdempotentAtaIx, resolveProgramAwareError } from \"@elmntl/jlpd-sdk/common\";\nimport \"@elmntl/jlpd-sdk/onyc-strategy\"; // registers onyc's error map + refresh_aum builder\n\nconst VAULT_ID = 16; // onyc / USDC\nconst [config] = findConfigPda();\nconst [stv] = findStvPda(VAULT_ID);\nconst [evMint] = findEvMintPda(VAULT_ID);\n\n// ---- 1. VIEW: connect wallet, render the LP's current position ----\nconst dashboard = await fetchVaultDashboard(connection, { stv, user });\nconsole.log(`NAV ${dashboard.navFormatted}, your evX ${dashboard.user?.evBalanceFormatted ?? \"0\"}`);\n\n// ---- 2. DEPOSIT ----\nconst stvState = await fetchStv(connection, VAULT_ID);\nconst depositReadiness = await checkDepositReadiness(connection, stvState);\n// Exhaustive, not a single `=== \"stale\"` check — see \"Deposit base into a\n// vault from a frontend\" above for why every non-\"ok\" status needs handling.\nswitch (depositReadiness.status) {\n  case \"ok\":\n    break;\n  case \"stale\":\n    throw new Error(depositReadiness.hint); // or use selfHealStaleness: true — see \"Deposit base into a vault\" above\n  case \"unsupportedAllocator\":\n    throw new Error(\"this helper does not preflight allocator vaults\");\n  case \"unknownFreshnessCapability\":\n    throw new Error(`no freshness capability registered for strategy ${depositReadiness.strategyProgramId.toBase58()}`);\n}\nconst depositCtx = await buildDepositContext(connection, {\n  address: stv, baseMint: stvState.baseMint, lendProgram: stvState.lendProgram,\n  strategy: stvState.strategy, tokenProgram: TOKEN_PROGRAM_ID,\n});\ntry {\n  const depositIx = createDepositIx({\n    user, config, stv, evMint, tokenProgram: TOKEN_PROGRAM_ID,\n    baseMint: stvState.baseMint,\n    vaultAta: findAta(stvState.baseMint, stv, TOKEN_PROGRAM_ID),\n    userBaseAta: findAta(stvState.baseMint, user, TOKEN_PROGRAM_ID),\n    userEvAta: findAta(evMint, user, TOKEN_PROGRAM_ID),\n    feeReceiverEvAta: findAta(evMint, stvState.feeReceiver, TOKEN_PROGRAM_ID),\n    amount: new BN(1_000_000_000), // 1,000 USDC\n    minShares: new BN(0), // set a real slippage floor in production\n    remainingAccounts: depositCtx.remainingAccounts,\n    protocolAumCount: depositCtx.protocolAumCount,\n    autoRouteCount: depositCtx.autoRouteCount,\n  });\n  await sendSmartTx(\n    connection,\n    [...depositCtx.preInstructions, createIdempotentAtaIx(user, evMint, user, TOKEN_PROGRAM_ID), depositIx],\n    user, signTransaction,\n  );\n} catch (err) {\n  const { entry } = resolveProgramAwareError(err);\n  showToast(entry.message);\n}\n\n// ---- 3. REQUEST WITHDRAW (some time later, when the LP wants out) ----\n// RE-FETCH stvState here — do not reuse step 2's copy. Core derives the\n// WithdrawRequest PDA (and enforces every stv.* gate in\n// checkRequestWithdrawReadiness) against the CURRENT epoch/flags at\n// submission time; a cached stvState from step 2 can point at a stale\n// stvState.currentEpochId if any time (even just a slow user, let alone a\n// crank in between) has passed since it was fetched — a stale-epoch PDA\n// derivation silently targets the WRONG WithdrawRequest account.\nconst requestStvState = await fetchStv(connection, VAULT_ID);\nconst shares = new BN(500_000);\nconst requestReadiness = await checkRequestWithdrawReadiness(connection, requestStvState, { user, shares });\nif (requestReadiness.status === \"ok\") {\n  const [withdrawRequest, wrBump] = findWithdrawRequestPda(stv, user, requestStvState.currentEpochId);\n  const requestIx = createRequestWithdrawIx({\n    user, config, stv, withdrawRequest, evMint, tokenProgram: TOKEN_PROGRAM_ID, shares, wrBump,\n    userEvAta: findAta(evMint, user, TOKEN_PROGRAM_ID),\n    escrowEvAta: findAta(evMint, stv, TOKEN_PROGRAM_ID),\n  });\n  await sendSmartTx(connection, [requestIx], user, signTransaction);\n}\n\n// ---- 4. OPERATOR CRANK (OFF the LP's device — a keeper calls process_epoch;\n//         see \"process_epoch's first call\" above) — the LP just polls status: ----\n// The crank ADVANCES stv.currentEpochId and re-prices requests — this is\n// exactly why step 5 below re-fetches stvState yet again rather than reusing\n// requestStvState from step 3.\nconst myRequests = await fetchUserWithdrawRequests(connection, { stv, user });\nfor (const item of myRequests) {\n  console.log(`epoch ${item.wr.epochId}: ${item.status}`); // \"pending\" until the crank prices it\n}\n\n// ---- 5. CLAIM (once an operator has cranked and the timelock has passed) ----\n// RE-FETCH stvState here too, for the same reason as step 3 — the crank in\n// step 4 may have changed stv.currentEpochId / lendProgram / pause flags\n// since either earlier fetch. ALWAYS build through buildClaimWithdrawContext\n// — never a bare createClaimWithdrawIx — even for a status of plain\n// \"claimable\". Core unconditionally parses 4 fixed lend accounts before it\n// ever checks idle liquidity (claim.rs:348), so a lend-active vault's claim\n// fails outright without them; \"claimable\"/\"claimableLendActive\" mean\n// ELIGIBLE TO ATTEMPT with a successfully built context, never \"guaranteed\n// to succeed with a bare instruction\" (round-5 MED-1). Vault 16/onyc has no\n// lend program, so this context is always empty for it — but the SAME code\n// path here is what makes this snippet correct on a lend-active vault too,\n// which is the point.\nconst claimStvState = await fetchStv(connection, VAULT_ID);\nfor (const item of myRequests) {\n  const readiness = await checkClaimReadiness(connection, claimStvState, item.wr);\n  if (readiness.status !== \"claimable\" && readiness.status !== \"claimableLendActive\") continue;\n  // 3rd arg `user` (payer) is required for the Kamino stale-vault refresh\n  // (round-6 MED-4) — WITHOUT it, a funded stale Kamino position's refresh\n  // is silently omitted and the claim reverts StaleProtocolData for a\n  // lend-active vault. Vault 16/onyc has no lend program, so this is a\n  // no-op for it, but the SAME call here is what makes this snippet correct\n  // on a lend-active vault too — never omit it, same discipline as the\n  // deposit context's own payer argument below.\n  const claimCtx = await buildClaimWithdrawContext(connection, {\n    address: stv, baseMint: claimStvState.baseMint, lendProgram: claimStvState.lendProgram,\n    strategy: claimStvState.strategy, tokenProgram: TOKEN_PROGRAM_ID,\n  }, user);\n  const claimIx = createClaimWithdrawIx({\n    user, config, stv, tokenProgram: TOKEN_PROGRAM_ID,\n    withdrawRequest: item.address, // fetchUserWithdrawRequests already gives you the WR's own PDA\n    vaultAta: findAta(claimStvState.baseMint, stv, TOKEN_PROGRAM_ID),\n    userBaseAta: findAta(claimStvState.baseMint, user, TOKEN_PROGRAM_ID),\n    feeReceiverBaseAta: findAta(claimStvState.baseMint, claimStvState.feeReceiver, TOKEN_PROGRAM_ID),\n    baseMint: claimStvState.baseMint,\n    remainingAccounts: claimCtx.remainingAccounts,\n    protocolAumCount: claimCtx.protocolAumCount,\n    autoUnrouteCount: claimCtx.autoUnrouteCount,\n  });\n  await sendSmartTx(connection, [...claimCtx.preInstructions, claimIx], user, signTransaction);\n}\n```\n\n(`item.address`/`item.wr`/`item.status` above are `fetchUserWithdrawRequests`'s\nper-request `UserWithdrawRequest` fields — see \"Check withdrawal-request\nstatus\" above for the full shape. This snippet omits per-call error handling\nafter step 2 for brevity; wrap every `sendSmartTx` call in the same\n`try {} catch { resolveProgramAwareError(err) }` pattern shown there. Steps 3\nand 5 each re-fetch `stvState` rather than reusing an earlier copy — see the\ncomments inline; this exact bug class (a cached, stale-epoch `stvState`\nproducing a wrong WithdrawRequest PDA) is why `src/p-stv-core/__tests__/readme-e2e-parity.test.ts`\ntranscribes and byte-verifies this full sequence, not just its individual\nsteps.)\n\n### Turn a caught transaction error into a human-readable message\n\n**`resolveProgramAwareError` is the recommended entry point.** A bare\n`Custom(n)` code is ambiguous without knowing which program raised it:\np-stv-core CPIs into strategy programs as an UNMAPPED tail call (a strategy's\nrevert propagates unchanged, in ITS OWN numbering), and p-stv-core's\n`VaultError` (0..=76) collides with onyc's `OnycStrategyError` (0..=29) on\nevery code from 0-29 with unrelated meanings (`Custom(0)` = `MathOverflow`\nvs `NotStvSigner`; `Custom(2)` = `Unauthorized` vs `StvStrategyMismatch`).\n`resolveProgramAwareError` reads the transaction's log trail to determine\nwhich program actually threw — the FIRST `Program <pid> failed: custom\nprogram error: 0x<hex>` line, with the program id AND the code ALWAYS read\nfrom that SAME line (never a program id from one line paired with a code\nfound elsewhere — a `failed:` line with no code of its own establishes\nnothing and is skipped; verified against real production log parsing, see\n`common/program-error.ts`'s module doc) — and resolves against THAT\nprogram's registered map automatically, so a frontend calling this one\nfunction cannot reach for the wrong map.\n\n```ts\nimport { resolveProgramAwareError } from \"@elmntl/jlpd-sdk/common\";\nimport \"@elmntl/jlpd-sdk/onyc-strategy\"; // side-effect import — registers onyc's map (see note below)\n\ntry {\n  const sig = await sendSmartTx(connection, [ix], user, signTransaction);\n} catch (err) {\n  const { status, entry, programLabel } = resolveProgramAwareError(err);\n  showToast(entry.message); // safe to render directly to the LP\n  console.error(`[${status}${programLabel ? ` via ${programLabel}` : \"\"}] ${entry.hint}`); // for your own logs\n}\n```\n\n**Registration is a side effect of importing a program's module.** Importing\nanything from `@elmntl/jlpd-sdk/p-stv-core` (which you already do for\n`fetchVaultDashboard`/deposit builders/etc.) registers `VAULT_ERROR_MAP`\nautomatically — no extra step. Onyc's map is registered the same way by\nimporting `@elmntl/jlpd-sdk/onyc-strategy`; if your app never otherwise\nimports anything from it, add the bare side-effect import shown above so\n`resolveProgramAwareError` can also recognize a revert that originated\ninside onyc's CPI (e.g. `deposit`/`instant_withdraw`/`process_epoch`, all of\nwhich CPI onyc's `update_aum`). `getRegisteredProgramErrorMaps()` lets you\nconfirm what's currently registered; `registerProgramErrorMap(programId,\nlabel, map)` registers any additional program (jlpd-strategy,\nelemental-lend, or a third-party strategy) the same way.\n\n**`status` tells you how confident the result is** — always check it before\ntreating `entry` as definitive:\n\n| `status` | Meaning |\n| --- | --- |\n| `\"resolved\"` | The origin program was identified from the logs and IS registered — `entry`/`programId`/`programLabel` are all populated. |\n| `\"unregisteredProgram\"` | The origin program WAS identified, but no map is registered for it — `entry.hint` names the program id so you can register it. |\n| `\"ambiguous\"` | A code was found but no genuine runtime `Program <pid> failed: custom program error: 0x<hex>` line was present to identify the origin (no logs at all, or logs that stop short of one — e.g. a truncated window showing only `invoke` frames). `candidates` lists every registered map's interpretation; the resolver never guesses from an unresolved invoke frame alone (an `X invoke` with no matching `X failed`/`X success` is NOT proof `X` is the one that failed — the omitted suffix could equally contain `X success` followed by a DIFFERENT program's failure). Fetch the transaction's full logs (`connection.getTransaction`) and re-resolve for a definitive answer. |\n| `\"unparsed\"` | No `Custom(n)` code could be found at all — likely not a program-level revert (blockhash expiry, insufficient SOL for fees, a wallet/RPC error). |\n\n**Narrower alternatives** — use these directly ONLY when you already know\nfor certain which single program raised the revert (e.g. `request_withdraw`,\nwhich never CPIs a strategy at all): `resolveVaultError` (p-stv-core only,\nfrom `@elmntl/jlpd-sdk/p-stv-core`) and `resolveOnycStrategyError` (onyc\nonly, from `@elmntl/jlpd-sdk/onyc-strategy`) skip program identification\nentirely and resolve directly against one map. Both error maps carry a\ndrift-guard test (`src/p-stv-core/__tests__/errors.test.ts`,\n`src/onyc-strategy/__tests__/errors.test.ts`) that re-parses each program's\n`error.rs` at test time and fails if the map and the Rust source disagree on\neven one code or name.\n\nParity tests (`src/common/__tests__/readme-error-handling-example.test.ts`,\n`src/common/__tests__/program-aware-error.test.ts`) run this exact catch\nblock — and the collision case it exists to solve — against fixture errors\nand assert the rendered message is both correct AND free of raw program\njargon (`Custom(`, `0x..`, Rust type/enum names) an LP wouldn't understand.\n\n### Read a JLPD strategy state from a server job\n\n```ts\nimport { fetchJlpStrategyState } from \"@elmntl/jlpd-sdk/jlpd-strategy\";\n\nconst state = await fetchJlpStrategyState(connection, baseMint);\nconsole.log(`PPS: ${state.pps.toString()}`);\nconsole.log(`base_loaned: ${state.baseLoaned.toString()}`);\n```\n\n### Build a manager-only `swap_jlp` rebalance from base → JLP\n\n```ts\nimport { buildSwapJlpTransaction } from \"@elmntl/jlpd-sdk/jlpd-strategy\";\n\nconst result = await buildSwapJlpTransaction({\n  connection,\n  manager,\n  baseMint,\n  vaultId,\n  direction: \"BaseToJlp\",\n  amount: 1_000_000n,\n  slippageBps: 30,\n});\n\nconst sig = await sendSmartTx(\n  connection,\n  [...result.preInstructions, ...result.instructions],\n  manager,\n  signTransaction,\n  { additionalLuts: result.addressLookupTables },\n);\n```\n\n## Quality bar\n\nThis SDK is the artifact submitted for external audit. The following invariants are enforced:\n\n- **`tsc` strict mode** with `noUnusedLocals` and `noUnusedParameters`. Zero suppressions in source.\n- **No `any`** in source code. All wallet / connection seams use proper structural types.\n- **No `@deprecated` exports.** Deprecated aliases were removed during the audit cleanup; if you find one, it's a bug.\n- **Buffer reads are bounds-checked.** Every helper in `common/buffer.ts` throws on out-of-range offsets.\n- **Discriminators are documented inline** with their derivation (`// sha256(\"global:deposit\")[..8]`).\n- **Each module follows the same file shape** so the audit pattern is the same per program.\n\n## Project structure\n\n```\nsdk/\n├── README.md                       (this file)\n├── package.json\n├── tsconfig.json                   strict + noUnusedLocals + noUnusedParameters\n├── src/\n│   ├── index.ts                    namespace re-exports\n│   ├── common/\n│   │   ├── index.ts\n│   │   ├── constants.ts            shared discriminators, PPS_DECIMALS, BPS, staleness\n│   │   ├── connection.ts           SolanaConnection structural type\n│   │   ├── buffer.ts               bounds-checked readers / writers\n│   │   ├── ata.ts                  findAta()\n│   │   ├── strategy-interface.ts   StrategyStateHeader + StvPosition + decoders + generic strategy PDA finders\n│   │   └── program-error.ts        ProgramErrorEntry + extractCustomProgramErrorCode + resolveProgramError (generic, no program-specific data)\n│   ├── p-stv-core/                 vault management — Pinocchio program (13 instructions, 0x00–0x0C)\n│   │   ├── constants.ts, pda.ts, types.ts, accounts.ts, instructions.ts, events.ts\n│   │   ├── remaining-accounts.ts   context builders for deposit/claim/epoch/strategy ops\n│   │   ├── readiness.ts            checkDepositReadiness / checkClaimReadiness preflight helpers\n│   │   ├── withdraw-requests.ts    fetchUserWithdrawRequests + per-request status derivation\n│   │   ├── errors.ts               VAULT_ERROR_MAP + resolveVaultError — VaultError -> LP message (drift-guard tested vs error.rs)\n│   │   ├── dashboard.ts            fetchVaultDashboard — live NAV/pps/evX-position reader for an LP dashboard\n│   │   ├── send-tx.ts              smart tx: simulate CU → priority fee → LUT → sign → confirm\n│   │   ├── sol-wrap.ts             native SOL wrap/unwrap for SOL-denominated vaults\n│   │   └── prices.ts               Jupiter Quote API USD price fetcher\n│   ├── elemental-lend/             idle-base lending — Anchor 0.32.1 program\n│   │   ├── constants.ts, pda.ts, types.ts, accounts.ts, instructions.ts\n│   │   ├── kamino-vault.ts         Kamino kVault account derivation + CPI + staleness check\n│   │   ├── jupiter-lend.ts         Jupiter Lend pool configs + auto-route account builders\n│   │   └── protocol-actions.ts     high-level protocol action tx builders\n│   ├── jlpd-strategy/              JLP yield strategy — Anchor 0.32.1 program\n│   │   ├── constants.ts, pda.ts, types.ts, accounts.ts, instructions.ts\n│   │   ├── swap-jlp.ts             Jupiter swap tx builders (BaseToJlp / JlpToBase)\n│   │   ├── settle-yield.ts         settle_yield instruction builder\n│   │   ├── jlp-data.ts             JLP pool data reader (custody weights, AUM, prices)\n│   │   ├── jlp-borrow.ts           Jupiter Lend Borrow constants + position reading\n│   │   ├── jupusd-earn.ts           Jupiter Lend Earn position + APR helpers\n│   │   └── adapter.ts              JLPD Lend Adapter instruction builders\n│   └── onyc-strategy/              onyc/USDC strategy (STV 16) — errors only today, see \"Module layout\" above\n│       └── errors.ts               ONYC_STRATEGY_ERROR_MAP + resolveOnycStrategyError (drift-guard tested vs onyc's error.rs)\n├── dist/                           tsc output (published to npm; also committed for internal `file:` link consumers)\n└── scripts/\n    └── create-luts.ts              admin tool: create / extend address lookup tables\n```\n","readmeFilename":"README.md"}