{"_id":"@canopyhub/canopy-sdk","_rev":"13-dd5b78668760fd1e22c0510d0f156192","name":"@canopyhub/canopy-sdk","dist-tags":{"next":"2.0.0","latest":"2.4.0"},"versions":{"0.0.1":{"name":"@canopyhub/canopy-sdk","version":"0.0.1","keywords":["movement","defi","vault","canopy","typescript","sdk"],"author":{"name":"Canopy Protocol"},"license":"MIT","_id":"@canopyhub/canopy-sdk@0.0.1","maintainers":[{"name":"vastreck","email":"vatreck@gmail.com"}],"homepage":"https://github.com/Canopyxyz/canopy-sdk#readme","bugs":{"url":"https://github.com/Canopyxyz/canopy-sdk/issues"},"dist":{"shasum":"d5fa49237d6157cbdae007d2d492ec24b4da4866","tarball":"https://registry.npmjs.org/@canopyhub/canopy-sdk/-/canopy-sdk-0.0.1.tgz","fileCount":8,"integrity":"sha512-C27GoxGAJgv3G0tQCfPOLrvCddffWnZgQ2nIpBadohTQvXSG2h9EhWxX0qLvaazDg6o2xbkHvN6RJk8LG7YMTw==","signatures":[{"sig":"MEUCIAqGfIj4d1VXEM0c0aJHgK6P7aSQ+0qxbKWEYPe2UuKGAiEAmtRLqQxspVX7p4sBDmmqndyW3DNb8RN6QIBZjn+cfpo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":831095},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"7f3608699ab484c34141466861f5ba8eb5424f5d","scripts":{"dev":"tsup --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsup","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"vastreck","email":"vatreck@gmail.com"},"repository":{"url":"git+https://github.com/Canopyxyz/canopy-sdk.git","type":"git","directory":"canopy-sdk"},"_npmVersion":"9.6.7","description":"TypeScript SDK for Canopy Protocol","directories":{},"_nodeVersion":"18.17.1","dependencies":{"@aptos-labs/ts-sdk":"^4.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"packageManager":"yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e","devDependencies":{"jest":"^30.1.3","tsup":"^8.5.0","eslint":"^9.35.0","ts-jest":"^29.4.1","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^24.4.0","@aptos-labs/react":"^0.1.4","@typescript-eslint/parser":"^8.43.0","@typescript-eslint/eslint-plugin":"^8.43.0"},"_npmOperationalInternal":{"tmp":"tmp/canopy-sdk_0.0.1_1758045805553_0.5576088267595329","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@canopyhub/canopy-sdk","version":"0.0.2","keywords":["movement","defi","vault","canopy","typescript","sdk"],"author":{"name":"Canopy Protocol"},"license":"MIT","_id":"@canopyhub/canopy-sdk@0.0.2","maintainers":[{"name":"vastreck","email":"vatreck@gmail.com"}],"homepage":"https://github.com/Canopyxyz/canopy-sdk#readme","bugs":{"url":"https://github.com/Canopyxyz/canopy-sdk/issues"},"dist":{"shasum":"0db672a8fe091d0fd77aa5873ba77cc8916d2bf3","tarball":"https://registry.npmjs.org/@canopyhub/canopy-sdk/-/canopy-sdk-0.0.2.tgz","fileCount":8,"integrity":"sha512-mN6YO0TDtd7lmnqZGvtIuXbVUepnKBgNmlS6G5GnICU40/dUkDGyAkr8fqZtE5slSH82O7hSZ8qPiDO6N4H1Og==","signatures":[{"sig":"MEQCIHhjDCf6N5OsD6MQFA3Q6WOplF1ebM69AP4vnGeWYS1OAiBJj/+9O1ct44lF2bGMs+bI5bFrfJsZKHanTjhSEt9/Pw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":831130},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"c9b9538e75f78666e5a5d7ed3723b49b5a5d5bf5","scripts":{"dev":"tsup --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsup","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"vastreck","email":"vatreck@gmail.com"},"repository":{"url":"git+https://github.com/Canopyxyz/canopy-sdk.git","type":"git","directory":"canopy-sdk"},"_npmVersion":"9.6.7","description":"TypeScript SDK for Canopy Protocol","directories":{},"_nodeVersion":"18.17.1","dependencies":{"@aptos-labs/ts-sdk":"^4.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"packageManager":"yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e","devDependencies":{"jest":"^30.1.3","tsup":"^8.5.0","eslint":"^9.35.0","ts-jest":"^29.4.1","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^24.4.0","@aptos-labs/react":"^0.1.4","@typescript-eslint/parser":"^8.43.0","@typescript-eslint/eslint-plugin":"^8.43.0"},"_npmOperationalInternal":{"tmp":"tmp/canopy-sdk_0.0.2_1758046325330_0.7966841887285019","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@canopyhub/canopy-sdk","version":"0.0.3","keywords":["movement","defi","vault","canopy","typescript","sdk"],"author":{"name":"Canopy Protocol"},"license":"MIT","_id":"@canopyhub/canopy-sdk@0.0.3","maintainers":[{"name":"vastreck","email":"vatreck@gmail.com"}],"homepage":"https://github.com/Canopyxyz/canopy-sdk#readme","bugs":{"url":"https://github.com/Canopyxyz/canopy-sdk/issues"},"dist":{"shasum":"cc6be2d83988997cae63951ce69c3e308578a2cf","tarball":"https://registry.npmjs.org/@canopyhub/canopy-sdk/-/canopy-sdk-0.0.3.tgz","fileCount":8,"integrity":"sha512-S+vPReITP8560+6HnCcuF7nrfkCzGp7rokkW7Hye+Fl5KR4Js775iCyxDY7II4fh9j2VjbLOccz46S+B2vTxZw==","signatures":[{"sig":"MEUCIGDT4Tbqx3lJtnpvAvPWW5vPvNK2nmUb6hQW6zAkL44xAiEAvvGA+mUkXqb8i/x6moIrqX92fW9gwyy6+6jK8aQpRl0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":841409},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"f4e480a19e9fd0b679842b2b146ac87982d85457","scripts":{"dev":"tsup --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsup","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"vastreck","email":"vatreck@gmail.com"},"repository":{"url":"git+https://github.com/Canopyxyz/canopy-sdk.git","type":"git","directory":"canopy-sdk"},"_npmVersion":"9.6.7","description":"TypeScript SDK for Canopy Protocol","directories":{},"_nodeVersion":"18.17.1","dependencies":{"@aptos-labs/ts-sdk":"^4.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"packageManager":"yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e","devDependencies":{"jest":"^30.1.3","tsup":"^8.5.0","eslint":"^9.35.0","ts-jest":"^29.4.1","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^24.4.0","@aptos-labs/react":"^0.1.4","@typescript-eslint/parser":"^8.43.0","@typescript-eslint/eslint-plugin":"^8.43.0"},"_npmOperationalInternal":{"tmp":"tmp/canopy-sdk_0.0.3_1758208437112_0.7466128979581863","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@canopyhub/canopy-sdk","version":"1.0.0","keywords":["movement","defi","vault","canopy","typescript","sdk"],"author":{"name":"Canopy Protocol"},"license":"MIT","_id":"@canopyhub/canopy-sdk@1.0.0","maintainers":[{"name":"arjanjohan","email":"arjanvanhoogdalem@gmail.com"},{"name":"vastreck","email":"vatreck@gmail.com"}],"homepage":"https://github.com/Canopyxyz/canopy-sdk#readme","bugs":{"url":"https://github.com/Canopyxyz/canopy-sdk/issues"},"dist":{"shasum":"ccf0f0fadaf07e06f23128ccb1c81e382c7a2934","tarball":"https://registry.npmjs.org/@canopyhub/canopy-sdk/-/canopy-sdk-1.0.0.tgz","fileCount":36,"integrity":"sha512-qoa0NWedMPWYJVh/kOZoDM3jFOF3g5pCtv4+1qAhnV0fZUQxsXHf5amsdqI4CciXSVuJzaHRdCca5ak6f4E/jA==","signatures":[{"sig":"MEUCIQDDk6nth0PuNAH3JMk9NsDV/tNxmN4IjdX0lTe4H7z3ZwIgII3CF60a8M52EKpPmCxANhBSXts+iP+VsSs8BdYETTM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9103342},"main":"./dist/index.js","_from":"file:canopyhub-canopy-sdk-1.0.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.mjs","require":"./dist/core.js"},"./bindings":{"types":"./dist/bindings.d.ts","import":"./dist/bindings.mjs","require":"./dist/bindings.js"},"./deployments":{"types":"./dist/deployments.d.ts","import":"./dist/deployments.mjs","require":"./dist/deployments.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint \"packages/**/*.ts\"","test":"jest","build":"pnpm --filter @canopyhub/canopy-sdk-core run build && pnpm --filter @canopyhub/canopy-sdk-deployments run build && pnpm --filter @canopyhub/canopy-sdk-bindings run build && tsup","abi:check":"node scripts/abi/fetch-abis.mjs --check","abi:fetch":"node scripts/abi/fetch-abis.mjs","typecheck":"tsc --noEmit","check:exports":"node scripts/ci/check-exports.mjs","check:imports":"node scripts/ci/check-imports.mjs","abi:check-local":"node scripts/abi/check-local-abis.mjs","validate:deployments":"node -e \"import('./dist/deployments.mjs').then(({listDeployments})=>{listDeployments(); console.log('deployments ok')})\""},"_npmUser":{"name":"arjanjohan","email":"arjanvanhoogdalem@gmail.com"},"_resolved":"/tmp/a97a66a5ac1ae161b6e0749ea162c2db/canopyhub-canopy-sdk-1.0.0.tgz","_integrity":"sha512-qoa0NWedMPWYJVh/kOZoDM3jFOF3g5pCtv4+1qAhnV0fZUQxsXHf5amsdqI4CciXSVuJzaHRdCca5ak6f4E/jA==","repository":{"url":"git+https://github.com/Canopyxyz/canopy-sdk.git","type":"git","directory":"canopy-sdk"},"_npmVersion":"10.9.0","description":"TypeScript SDK for Canopy Protocol","directories":{},"_nodeVersion":"22.12.0","dependencies":{"@moveindustries/ts-sdk":"^5.1.7"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"typesVersions":{"*":{"core":["dist/core.d.ts"],"bindings":["dist/bindings.d.ts"],"deployments":["dist/deployments.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.1.3","tsup":"^8.5.0","eslint":"^9.35.0","ts-jest":"^29.4.1","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^24.4.0","@typescript-eslint/parser":"^8.43.0","@typescript-eslint/eslint-plugin":"^8.43.0"},"_npmOperationalInternal":{"tmp":"tmp/canopy-sdk_1.0.0_1778701281523_0.2166318348448173","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@canopyhub/canopy-sdk","version":"1.1.0","keywords":["movement","defi","vault","canopy","typescript","sdk"],"author":{"name":"Canopy Protocol"},"license":"MIT","_id":"@canopyhub/canopy-sdk@1.1.0","maintainers":[{"name":"arjanjohan","email":"arjanvanhoogdalem@gmail.com"},{"name":"vastreck","email":"vatreck@gmail.com"}],"homepage":"https://github.com/Canopyxyz/canopy-sdk#readme","bugs":{"url":"https://github.com/Canopyxyz/canopy-sdk/issues"},"dist":{"shasum":"a798513ffe1fc7e14e30587cde0763278121c01b","tarball":"https://registry.npmjs.org/@canopyhub/canopy-sdk/-/canopy-sdk-1.1.0.tgz","fileCount":34,"integrity":"sha512-qnwdHiZzrPSLV14jHHo3mU0NnhpWcL6ZAvv5Zc7L14EGLyJcjr3kTj7maount1gjS7TnyV4YJi2LlyLxgS+6mw==","signatures":[{"sig":"MEUCIQCywI3QNQbOuUlHiTXyhqp8BdRVclxvOIqzfBTX7ulaugIgbXdq7czqqeHymkrguvyGh16I5mWNqvBtU5lbEEB88Ec=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15108175},"main":"./dist/index.js","_from":"file:canopyhub-canopy-sdk-1.1.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.mjs","require":"./dist/core.js"},"./bindings":{"types":"./dist/bindings.d.ts","import":"./dist/bindings.mjs","require":"./dist/bindings.js"},"./deployments":{"types":"./dist/deployments.d.ts","import":"./dist/deployments.mjs","require":"./dist/deployments.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint \"packages/**/*.ts\"","test":"node --experimental-vm-modules ./node_modules/jest/bin/jest.js","build":"pnpm --filter @canopyhub/canopy-sdk-core run build && pnpm --filter @canopyhub/canopy-sdk-deployments run build && pnpm --filter @canopyhub/canopy-sdk-bindings run build && tsup","abi:check":"node scripts/abi/fetch-abis.mjs --check","abi:fetch":"node scripts/abi/fetch-abis.mjs","typecheck":"tsc --noEmit","check:exports":"node scripts/ci/check-exports.mjs","check:imports":"node scripts/ci/check-imports.mjs","hooks:install":"git config core.hooksPath .githooks","abi:check-local":"node scripts/abi/check-local-abis.mjs","validate:deployments":"node -e \"import('./dist/deployments.mjs').then(({listDeployments})=>{listDeployments(); console.log('deployments ok')})\"","check:no-surf-public-api":"node scripts/ci/check-no-surf-public-api.mjs"},"_npmUser":{"name":"arjanjohan","email":"arjanvanhoogdalem@gmail.com"},"_resolved":"/tmp/cf19f1f46335b66c04cfd14e27bac3ca/canopyhub-canopy-sdk-1.1.0.tgz","_integrity":"sha512-qnwdHiZzrPSLV14jHHo3mU0NnhpWcL6ZAvv5Zc7L14EGLyJcjr3kTj7maount1gjS7TnyV4YJi2LlyLxgS+6mw==","repository":{"url":"git+https://github.com/Canopyxyz/canopy-sdk.git","type":"git","directory":"canopy-sdk"},"_npmVersion":"10.9.0","description":"TypeScript SDK for Canopy Protocol","directories":{},"_nodeVersion":"22.12.0","dependencies":{"@thalalabs/surf":"^2.0.3","@aptos-labs/ts-sdk":"^7.0.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"typesVersions":{"*":{"core":["dist/core.d.ts"],"bindings":["dist/bindings.d.ts"],"deployments":["dist/deployments.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.1.3","tsup":"^8.5.0","eslint":"^9.35.0","ts-jest":"^29.4.1","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^24.4.0","@jest/globals":"^30.1.3","@typescript-eslint/parser":"^8.43.0","@typescript-eslint/eslint-plugin":"^8.43.0"},"_npmOperationalInternal":{"tmp":"tmp/canopy-sdk_1.1.0_1779174405730_0.5543948910239338","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@canopyhub/canopy-sdk","version":"2.0.0","keywords":["movement","defi","vault","canopy","typescript","sdk"],"author":{"name":"Canopy Protocol"},"license":"MIT","_id":"@canopyhub/canopy-sdk@2.0.0","maintainers":[{"name":"arjanjohan","email":"arjanvanhoogdalem@gmail.com"},{"name":"diegomove","email":"diego.wilson@moveindustries.xyz"},{"name":"mosolo","email":"mo@sololab.xyz"},{"name":"vastreck","email":"vatreck@gmail.com"}],"homepage":"https://github.com/Canopyxyz/canopy-sdk#readme","bugs":{"url":"https://github.com/Canopyxyz/canopy-sdk/issues"},"dist":{"shasum":"845a738cdaa9aad98bd77e9b2b0d93b9b9929ea1","tarball":"https://registry.npmjs.org/@canopyhub/canopy-sdk/-/canopy-sdk-2.0.0.tgz","fileCount":34,"integrity":"sha512-G85i6vcrJKBsaWX9tqmHazs7EeLA+kNjgFPoK92VfPJCS+IodgV9IvkAE6drLFRD5K/HGmp8zXXGS4ay+AILXw==","signatures":[{"sig":"MEUCIQDOQ+0I/m7Mbs0VxHzzPMVLDXJkryf6cfWVuN5uVwlZvAIgL56tDK8uMLPlwJEFSY2vcog1m/lwwyHbzWZePcEBDwc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15121373},"main":"./dist/index.js","_from":"file:canopyhub-canopy-sdk-2.0.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.mjs","require":"./dist/core.js"},"./bindings":{"types":"./dist/bindings.d.ts","import":"./dist/bindings.mjs","require":"./dist/bindings.js"},"./deployments":{"types":"./dist/deployments.d.ts","import":"./dist/deployments.mjs","require":"./dist/deployments.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint \"packages/**/*.ts\"","test":"node --experimental-vm-modules ./node_modules/jest/bin/jest.js","build":"pnpm --filter @canopyhub/canopy-sdk-core run build && pnpm --filter @canopyhub/canopy-sdk-deployments run build && pnpm --filter @canopyhub/canopy-sdk-bindings run build && tsup","abi:check":"node scripts/abi/fetch-abis.mjs --check","abi:fetch":"node scripts/abi/fetch-abis.mjs","typecheck":"tsc --noEmit","check:bundle":"node scripts/ci/check-browser-bundle.mjs","release:next":"node scripts/release.mjs next","check:exports":"node scripts/ci/check-exports.mjs","check:imports":"node scripts/ci/check-imports.mjs","hooks:install":"git config core.hooksPath .githooks","check:payloads":"node scripts/ci/check-live-payloads.mjs","release:latest":"node scripts/release.mjs latest","abi:check-local":"node scripts/abi/check-local-abis.mjs","validate:deployments":"node -e \"import('./dist/deployments.mjs').then(({listDeployments})=>{listDeployments(); console.log('deployments ok')})\""},"_npmUser":{"name":"arjanjohan","email":"arjanvanhoogdalem@gmail.com"},"_resolved":"/tmp/091347d4ded56f39f9b5e03190c1eb85/canopyhub-canopy-sdk-2.0.0.tgz","_integrity":"sha512-G85i6vcrJKBsaWX9tqmHazs7EeLA+kNjgFPoK92VfPJCS+IodgV9IvkAE6drLFRD5K/HGmp8zXXGS4ay+AILXw==","repository":{"url":"git+https://github.com/Canopyxyz/canopy-sdk.git","type":"git","directory":"canopy-sdk"},"_npmVersion":"10.9.0","description":"TypeScript SDK for Canopy Protocol","directories":{},"_nodeVersion":"22.12.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"typesVersions":{"*":{"core":["dist/core.d.ts"],"bindings":["dist/bindings.d.ts"],"deployments":["dist/deployments.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^30.1.3","tsup":"^8.5.0","eslint":"^9.35.0","ts-jest":"^29.4.1","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^24.4.0","@jest/globals":"^30.1.3","@aptos-labs/ts-sdk":"^7.0.1","@typescript-eslint/parser":"^8.43.0","@typescript-eslint/eslint-plugin":"^8.43.0"},"peerDependencies":{"@aptos-labs/ts-sdk":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/canopy-sdk_2.0.0_1786252983331_0.7498114991824198","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@canopyhub/canopy-sdk","version":"2.1.0","keywords":["movement","defi","vault","canopy","typescript","sdk"],"author":{"name":"Canopy Protocol"},"license":"MIT","_id":"@canopyhub/canopy-sdk@2.1.0","maintainers":[{"name":"arjanjohan","email":"arjanvanhoogdalem@gmail.com"},{"name":"diegomove","email":"diego.wilson@moveindustries.xyz"},{"name":"mosolo","email":"mo@sololab.xyz"},{"name":"vastreck","email":"vatreck@gmail.com"}],"homepage":"https://github.com/Canopyxyz/canopy-sdk#readme","bugs":{"url":"https://github.com/Canopyxyz/canopy-sdk/issues"},"dist":{"shasum":"d93d9475a2feebae520e34ab0e01e1b730e0637a","tarball":"https://registry.npmjs.org/@canopyhub/canopy-sdk/-/canopy-sdk-2.1.0.tgz","fileCount":34,"integrity":"sha512-LY6SEhF38g+gGiAb+IQda/cvcdThkLNcOPvIbBM2OlJj9DD2yx2XvNi73hR6bJD+R9LLqUO5n/xUnPGQG7/W/w==","signatures":[{"sig":"MEQCIGaKtB28lI91Ej3o4e1LwDyW1cWqDFtg/zitOKmLQsQLAiB+SwMVyciJ7cfPbjxPTM2DE6+IY3I4F5rQNmC9TFgIzg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17924644},"main":"./dist/index.js","_from":"file:canopyhub-canopy-sdk-2.1.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.mjs","require":"./dist/core.js"},"./bindings":{"types":"./dist/bindings.d.ts","import":"./dist/bindings.mjs","require":"./dist/bindings.js"},"./deployments":{"types":"./dist/deployments.d.ts","import":"./dist/deployments.mjs","require":"./dist/deployments.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint \"packages/**/*.ts\"","test":"node --experimental-vm-modules ./node_modules/jest/bin/jest.js","build":"pnpm --filter @canopyhub/canopy-sdk-core run build && pnpm --filter @canopyhub/canopy-sdk-deployments run build && pnpm --filter @canopyhub/canopy-sdk-bindings run build && tsup","abi:check":"node scripts/abi/fetch-abis.mjs --check","abi:fetch":"node scripts/abi/fetch-abis.mjs","typecheck":"tsc --noEmit","check:bundle":"node scripts/ci/check-browser-bundle.mjs","release:next":"node scripts/release.mjs next","check:exports":"node scripts/ci/check-exports.mjs","check:imports":"node scripts/ci/check-imports.mjs","hooks:install":"git config core.hooksPath .githooks","check:payloads":"node scripts/ci/check-live-payloads.mjs","release:latest":"node scripts/release.mjs latest","abi:check-local":"node scripts/abi/check-local-abis.mjs","validate:deployments":"node -e \"import('./dist/deployments.mjs').then(({listDeployments})=>{listDeployments(); console.log('deployments ok')})\""},"_npmUser":{"name":"arjanjohan","email":"arjanvanhoogdalem@gmail.com"},"_resolved":"/tmp/59978fad70761905cc04aad79d2a3b67/canopyhub-canopy-sdk-2.1.0.tgz","_integrity":"sha512-LY6SEhF38g+gGiAb+IQda/cvcdThkLNcOPvIbBM2OlJj9DD2yx2XvNi73hR6bJD+R9LLqUO5n/xUnPGQG7/W/w==","repository":{"url":"git+https://github.com/Canopyxyz/canopy-sdk.git","type":"git","directory":"canopy-sdk"},"_npmVersion":"10.9.0","description":"TypeScript SDK for Canopy Protocol","directories":{},"_nodeVersion":"22.12.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"typesVersions":{"*":{"core":["dist/core.d.ts"],"bindings":["dist/bindings.d.ts"],"deployments":["dist/deployments.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.1.3","tsup":"^8.5.0","eslint":"^9.35.0","ts-jest":"^29.4.1","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^24.4.0","@jest/globals":"^30.1.3","@aptos-labs/ts-sdk":"^7.0.1","@typescript-eslint/parser":"^8.43.0","@typescript-eslint/eslint-plugin":"^8.43.0"},"peerDependencies":{"@aptos-labs/ts-sdk":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/canopy-sdk_2.1.0_1786996445293_0.39431326522246324","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"@canopyhub/canopy-sdk","version":"2.1.1","keywords":["movement","defi","vault","canopy","typescript","sdk"],"author":{"name":"Canopy Protocol"},"license":"MIT","_id":"@canopyhub/canopy-sdk@2.1.1","maintainers":[{"name":"arjanjohan","email":"arjanvanhoogdalem@gmail.com"},{"name":"diegomove","email":"diego.wilson@moveindustries.xyz"},{"name":"mosolo","email":"mo@sololab.xyz"},{"name":"vastreck","email":"vatreck@gmail.com"}],"homepage":"https://github.com/Canopyxyz/canopy-sdk#readme","bugs":{"url":"https://github.com/Canopyxyz/canopy-sdk/issues"},"dist":{"shasum":"ff7a8cdfb7ebf28cfd49df0039e691742e8b352a","tarball":"https://registry.npmjs.org/@canopyhub/canopy-sdk/-/canopy-sdk-2.1.1.tgz","fileCount":34,"integrity":"sha512-rCXlHvZCXSQ7AeEsYqEecN2E7UbmE0czB7SXBwbuln/xvquZO/XslxBXzFKjuEEde75gs5yOgba/asN4vsx+Ug==","signatures":[{"sig":"MEUCIQDTfyU7uos0tF3BwQW6k8HQPsLii/UUWDjKoq3bB1LTzQIgWt8pvzxobuYadPEyA4Tm+WoR8cFvJrODZ6kIMPronKc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17925132},"main":"./dist/index.js","_from":"file:canopyhub-canopy-sdk-2.1.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./core":{"import":{"types":"./dist/core.d.mts","default":"./dist/core.mjs"},"require":{"types":"./dist/core.d.ts","default":"./dist/core.js"}},"./bindings":{"import":{"types":"./dist/bindings.d.mts","default":"./dist/bindings.mjs"},"require":{"types":"./dist/bindings.d.ts","default":"./dist/bindings.js"}},"./deployments":{"import":{"types":"./dist/deployments.d.mts","default":"./dist/deployments.mjs"},"require":{"types":"./dist/deployments.d.ts","default":"./dist/deployments.js"}}},"scripts":{"dev":"tsup --watch","lint":"eslint \"packages/**/*.ts\"","test":"node --experimental-vm-modules ./node_modules/jest/bin/jest.js","build":"pnpm --filter @canopyhub/canopy-sdk-core run build && pnpm --filter @canopyhub/canopy-sdk-deployments run build && pnpm --filter @canopyhub/canopy-sdk-bindings run build && tsup","abi:check":"node scripts/abi/fetch-abis.mjs --check","abi:fetch":"node scripts/abi/fetch-abis.mjs","typecheck":"tsc --noEmit","check:bundle":"node scripts/ci/check-browser-bundle.mjs","release:next":"node scripts/release.mjs next","check:exports":"node scripts/ci/check-exports.mjs","check:imports":"node scripts/ci/check-imports.mjs","hooks:install":"git config core.hooksPath .githooks","check:payloads":"node scripts/ci/check-live-payloads.mjs","release:latest":"node scripts/release.mjs latest","abi:check-local":"node scripts/abi/check-local-abis.mjs","validate:deployments":"node -e \"import('./dist/deployments.mjs').then(({listDeployments})=>{listDeployments(); console.log('deployments ok')})\"","check:consumer-compat":"node scripts/ci/check-consumer-compat.mjs"},"_npmUser":{"name":"arjanjohan","email":"arjanvanhoogdalem@gmail.com"},"_resolved":"/tmp/bca097f50242f9d4bd4221d17cec7329/canopyhub-canopy-sdk-2.1.1.tgz","_integrity":"sha512-rCXlHvZCXSQ7AeEsYqEecN2E7UbmE0czB7SXBwbuln/xvquZO/XslxBXzFKjuEEde75gs5yOgba/asN4vsx+Ug==","repository":{"url":"git+https://github.com/Canopyxyz/canopy-sdk.git","type":"git","directory":"canopy-sdk"},"_npmVersion":"10.9.0","description":"TypeScript SDK for Canopy Protocol","directories":{},"_nodeVersion":"22.12.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"typesVersions":{"*":{"core":["dist/core.d.ts"],"bindings":["dist/bindings.d.ts"],"deployments":["dist/deployments.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.1.3","tsup":"^8.5.0","eslint":"^9.35.0","ts-jest":"^29.4.1","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^24.4.0","@jest/globals":"^30.1.3","@aptos-labs/ts-sdk":"^7.0.1","@typescript-eslint/parser":"^8.43.0","@typescript-eslint/eslint-plugin":"^8.43.0"},"peerDependencies":{"@aptos-labs/ts-sdk":"^6.3.1 || ^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/canopy-sdk_2.1.1_1787760970942_0.3717643039350613","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"@canopyhub/canopy-sdk","version":"2.3.0","keywords":["movement","defi","vault","canopy","typescript","sdk"],"author":{"name":"Canopy Protocol"},"license":"MIT","_id":"@canopyhub/canopy-sdk@2.3.0","maintainers":[{"name":"arjanjohan","email":"arjanvanhoogdalem@gmail.com"},{"name":"diegomove","email":"diego.wilson@moveindustries.xyz"},{"name":"mosolo","email":"mo@sololab.xyz"},{"name":"vastreck","email":"vatreck@gmail.com"}],"homepage":"https://github.com/Canopyxyz/canopy-sdk#readme","bugs":{"url":"https://github.com/Canopyxyz/canopy-sdk/issues"},"dist":{"shasum":"5892b077a42ce96c5f98d0bf3ff906dae9403336","tarball":"https://registry.npmjs.org/@canopyhub/canopy-sdk/-/canopy-sdk-2.3.0.tgz","fileCount":34,"integrity":"sha512-W72m2pBqm9x+Kjwv03f1HwPRx3kCGqnNasqbwJo+2GY212dbARF4QHm3HbNlIhpHzO/bMXULewXFMm3d501u2A==","signatures":[{"sig":"MEUCIF4HZxnWH+REyaaXK6x6MTFilfuPh5ytR6isHut27IO4AiEA6tHR5hunRJPCs2m54OT8u4kLHNI2H4SuHRlAAxp1VAg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18106990},"main":"./dist/index.js","_from":"file:canopyhub-canopy-sdk-2.3.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./core":{"import":{"types":"./dist/core.d.mts","default":"./dist/core.mjs"},"require":{"types":"./dist/core.d.ts","default":"./dist/core.js"}},"./bindings":{"import":{"types":"./dist/bindings.d.mts","default":"./dist/bindings.mjs"},"require":{"types":"./dist/bindings.d.ts","default":"./dist/bindings.js"}},"./deployments":{"import":{"types":"./dist/deployments.d.mts","default":"./dist/deployments.mjs"},"require":{"types":"./dist/deployments.d.ts","default":"./dist/deployments.js"}}},"scripts":{"dev":"tsup --watch","lint":"eslint \"packages/**/*.ts\"","test":"node --experimental-vm-modules ./node_modules/jest/bin/jest.js","build":"pnpm --filter @canopyhub/canopy-sdk-core run build && pnpm --filter @canopyhub/canopy-sdk-deployments run build && pnpm --filter @canopyhub/canopy-sdk-bindings run build && tsup","abi:check":"node scripts/abi/fetch-abis.mjs --check","abi:fetch":"node scripts/abi/fetch-abis.mjs","typecheck":"tsc --noEmit","check:bundle":"node scripts/ci/check-browser-bundle.mjs","release:next":"node scripts/release.mjs next","check:exports":"node scripts/ci/check-exports.mjs","check:imports":"node scripts/ci/check-imports.mjs","hooks:install":"git config core.hooksPath .githooks","check:payloads":"node scripts/ci/check-live-payloads.mjs","release:latest":"node scripts/release.mjs latest","abi:check-local":"node scripts/abi/check-local-abis.mjs","validate:deployments":"node -e \"import('./dist/deployments.mjs').then(({listDeployments})=>{listDeployments(); console.log('deployments ok')})\"","check:consumer-compat":"node scripts/ci/check-consumer-compat.mjs"},"_npmUser":{"name":"arjanjohan","email":"arjanvanhoogdalem@gmail.com"},"_resolved":"/tmp/d7dce1e60f035d1c2e10e08f32d3fdb6/canopyhub-canopy-sdk-2.3.0.tgz","_integrity":"sha512-W72m2pBqm9x+Kjwv03f1HwPRx3kCGqnNasqbwJo+2GY212dbARF4QHm3HbNlIhpHzO/bMXULewXFMm3d501u2A==","repository":{"url":"git+https://github.com/Canopyxyz/canopy-sdk.git","type":"git","directory":"canopy-sdk"},"_npmVersion":"10.9.0","description":"TypeScript SDK for Canopy Protocol","directories":{},"_nodeVersion":"22.12.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"typesVersions":{"*":{"core":["dist/core.d.ts"],"bindings":["dist/bindings.d.ts"],"deployments":["dist/deployments.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.1.3","tsup":"^8.5.0","eslint":"^9.35.0","ts-jest":"^29.4.1","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^24.4.0","@jest/globals":"^30.1.3","@aptos-labs/ts-sdk":"^7.0.1","@typescript-eslint/parser":"^8.43.0","@typescript-eslint/eslint-plugin":"^8.43.0"},"peerDependencies":{"@aptos-labs/ts-sdk":"^6.3.1 || ^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/canopy-sdk_2.3.0_1789058357666_0.24501299058481618","host":"s3://npm-registry-packages-npm-production"}},"2.4.0":{"name":"@canopyhub/canopy-sdk","version":"2.4.0","description":"TypeScript SDK for Canopy Protocol","keywords":["movement","defi","vault","canopy","typescript","sdk"],"main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","typesVersions":{"*":{"core":["dist/core.d.ts"],"deployments":["dist/deployments.d.ts"],"bindings":["dist/bindings.d.ts"]}},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./core":{"import":{"types":"./dist/core.d.mts","default":"./dist/core.mjs"},"require":{"types":"./dist/core.d.ts","default":"./dist/core.js"}},"./deployments":{"import":{"types":"./dist/deployments.d.mts","default":"./dist/deployments.mjs"},"require":{"types":"./dist/deployments.d.ts","default":"./dist/deployments.js"}},"./bindings":{"import":{"types":"./dist/bindings.d.mts","default":"./dist/bindings.mjs"},"require":{"types":"./dist/bindings.d.ts","default":"./dist/bindings.js"}}},"homepage":"https://github.com/Canopyxyz/canopy-sdk#readme","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"peerDependencies":{"@aptos-labs/ts-sdk":"^6.3.1 || ^7.0.0"},"devDependencies":{"@aptos-labs/ts-sdk":"^7.0.1","@jest/globals":"^30.1.3","@types/jest":"^30.0.0","@types/node":"^24.4.0","@typescript-eslint/eslint-plugin":"^8.43.0","@typescript-eslint/parser":"^8.43.0","eslint":"^9.35.0","jest":"^30.1.3","ts-jest":"^29.4.1","tsup":"^8.5.0","typescript":"^5.9.2"},"bugs":{"url":"https://github.com/Canopyxyz/canopy-sdk/issues"},"repository":{"type":"git","url":"git+https://github.com/Canopyxyz/canopy-sdk.git","directory":"canopy-sdk"},"author":{"name":"Canopy Protocol"},"license":"MIT","scripts":{"build":"pnpm --filter @canopyhub/canopy-sdk-core run build && pnpm --filter @canopyhub/canopy-sdk-deployments run build && pnpm --filter @canopyhub/canopy-sdk-bindings run build && tsup","dev":"tsup --watch","test":"node --experimental-vm-modules ./node_modules/jest/bin/jest.js","lint":"eslint \"packages/**/*.ts\"","typecheck":"tsc --noEmit","abi:fetch":"node scripts/abi/fetch-abis.mjs","abi:check":"node scripts/abi/fetch-abis.mjs --check","abi:check-local":"node scripts/abi/check-local-abis.mjs","hooks:install":"git config core.hooksPath .githooks","check:exports":"node scripts/ci/check-exports.mjs","check:consumer-compat":"node scripts/ci/check-consumer-compat.mjs","check:imports":"node scripts/ci/check-imports.mjs","check:payloads":"node scripts/ci/check-live-payloads.mjs","check:bundle":"node scripts/ci/check-browser-bundle.mjs","validate:deployments":"node -e \"import('./dist/deployments.mjs').then(({listDeployments})=>{listDeployments(); console.log('deployments ok')})\"","release:next":"node scripts/release.mjs next","release:latest":"node scripts/release.mjs latest"},"_id":"@canopyhub/canopy-sdk@2.4.0","_integrity":"sha512-Yxg29mHQMHyGS0GMZY2TyB5T7lGqv7ShxhtZ5XHA2fEAHs0gg1bJqOfRThFtd8xhazElFPArkkaxLc4eELxoQQ==","_resolved":"/tmp/421fd9556967afc6a7058313e0b286a2/canopyhub-canopy-sdk-2.4.0.tgz","_from":"file:canopyhub-canopy-sdk-2.4.0.tgz","_nodeVersion":"22.12.0","_npmVersion":"10.9.0","dist":{"integrity":"sha512-Yxg29mHQMHyGS0GMZY2TyB5T7lGqv7ShxhtZ5XHA2fEAHs0gg1bJqOfRThFtd8xhazElFPArkkaxLc4eELxoQQ==","shasum":"2c0022a3426bfe011668ef2bb16a033d3bd63673","tarball":"https://registry.npmjs.org/@canopyhub/canopy-sdk/-/canopy-sdk-2.4.0.tgz","fileCount":34,"unpackedSize":18156573,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCxTRHLudGXYWy2T5Mfq/KQs0kdhStHFP+UulFvf8cSOgIhAOi2CXFODMvKxOD763V4b+MbNKAHrwsokW7ZZ26iS03H"}]},"_npmUser":{"name":"arjanjohan","email":"arjanvanhoogdalem@gmail.com"},"directories":{},"maintainers":[{"name":"arjanjohan","email":"arjanvanhoogdalem@gmail.com"},{"name":"diegomove","email":"diego.wilson@moveindustries.xyz"},{"name":"mosolo","email":"mo@sololab.xyz"},{"name":"vastreck","email":"vatreck@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/canopy-sdk_2.4.0_1789126337252_0.9761348903065126"},"_hasShrinkwrap":false}},"time":{"created":"2025-09-16T18:03:25.477Z","modified":"2026-09-11T11:32:17.661Z","0.0.1":"2025-09-16T18:03:25.765Z","0.0.2":"2025-09-16T18:12:05.566Z","0.0.3":"2025-09-18T15:13:57.323Z","1.0.0":"2026-05-13T19:41:21.757Z","1.1.0":"2026-05-19T07:06:45.950Z","2.0.0":"2026-08-09T05:23:03.530Z","2.1.0":"2026-08-17T19:54:05.509Z","2.1.1":"2026-08-26T16:16:11.121Z","2.3.0":"2026-09-10T16:39:17.852Z","2.4.0":"2026-09-11T11:32:17.463Z"},"bugs":{"url":"https://github.com/Canopyxyz/canopy-sdk/issues"},"author":{"name":"Canopy Protocol"},"license":"MIT","homepage":"https://github.com/Canopyxyz/canopy-sdk#readme","keywords":["movement","defi","vault","canopy","typescript","sdk"],"repository":{"type":"git","url":"git+https://github.com/Canopyxyz/canopy-sdk.git","directory":"canopy-sdk"},"description":"TypeScript SDK for Canopy Protocol","maintainers":[{"name":"arjanjohan","email":"arjanvanhoogdalem@gmail.com"},{"name":"diegomove","email":"diego.wilson@moveindustries.xyz"},{"name":"mosolo","email":"mo@sololab.xyz"},{"name":"vastreck","email":"vatreck@gmail.com"}],"readme":"# Canopy SDK\n\nTypeScript SDK for Canopy Protocol on Movement and Aptos.\n\nIt includes:\n\n- Canopy vault reads and transaction builders\n- curator vault deposits, redemptions, and previews\n- rewards staking / claim helpers\n- Meridian ALM vault support\n- deployment + ABI registries\n- contract lookup helpers\n- Movement helper-module-backed batch reads\n\n## Packages\n\nThe repo publishes four packages:\n\n- `@canopyhub/canopy-sdk`\n- `@canopyhub/canopy-sdk-core`\n- `@canopyhub/canopy-sdk-deployments`\n- `@canopyhub/canopy-sdk-bindings`\n\nMost applications should install only the root SDK, alongside `@aptos-labs/ts-sdk`:\n\n```bash\npnpm add @canopyhub/canopy-sdk @aptos-labs/ts-sdk\n```\n\n`@aptos-labs/ts-sdk` is a **peer dependency** (`^7.0.0`), not a bundled one. The SDK never\nimports it at runtime — every reference is `import type` — and its public API takes an\n`Aptos` client that you construct. Declaring it as a peer keeps a single copy in your tree,\nso the `Aptos` type in your code is the same nominal type the SDK's signatures refer to.\nBundling it produced two copies whose types did not match at the API boundary, forcing\nconsumers to cast.\n\n## Quick Start\n\n```ts\nimport { Aptos, AptosConfig, Network } from \"@aptos-labs/ts-sdk\";\nimport { createCanopySdk } from \"@canopyhub/canopy-sdk\";\n\nconst client = new Aptos(\n  new AptosConfig({\n    network: Network.MAINNET\n  })\n);\n\nconst sdk = createCanopySdk(client, {\n  chain: \"movement-mainnet\",\n  offchain: {\n    sentioApiKey: process.env.SENTIO_API_KEY, // optional, enables dynamic rewards pool discovery\n  },\n});\n```\n\n`CanopySdk` only exposes protocol clients that exist on the selected chain:\n\n- `sdk.canopy`\n- `sdk.curator`\n- `sdk.rewards`\n- `sdk.alm.meridian`\n\n## Chain Support\n\n| Chain | Canopy | Curator | Rewards | Meridian ALM |\n| --- | --- | --- | --- | --- |\n| `movement-mainnet` | yes | no | yes | yes |\n| `movement-testnet` | no | yes | no | no |\n| `aptos-testnet` | yes | no | yes | no |\n| `aptos-mainnet` | no | no | no | yes |\n\n## What The SDK Exposes\n\n### Canopy vaults\n\n```ts\nconst { vaults } = await sdk.canopy!.listVaults({ limit: 20, offset: 0 });\n\nconst vault = await sdk.canopy!.getVault(vaultAddress);\n\nconst position = await sdk.canopy!.getUserVaultPosition(userAddress, vaultAddress);\n\nconst depositPayload = await sdk.canopy!.buildDepositPayload({\n  vaultAddress,\n  amount: 1_000_000n,\n  minSharesOut: 0n,\n});\n\nconst withdrawPayload = await sdk.canopy!.buildWithdrawPayload({\n  vaultAddress,\n  shares: 1_000_000n,\n  maxLossBps: 50n,\n  minAmountOut: 0n,\n});\n```\n\nOther Canopy methods:\n\n- `unstakeAndWithdraw(...)`\n- `getStrategyDetails(...)`\n- `getVaultAllocation(...)`\n\n### Canopy batch helpers\n\nThese are currently backed by the Movement helper module and are available on `movement-mainnet`.\n\n```ts\nconst balances = await sdk.canopy!.getBatchFungibleAssetBalances(\n  [metadataA, metadataB],\n  userAddress\n);\n\nconst shareBalances = await sdk.canopy!.getBatchVaultSharesBalances(\n  [vaultA, vaultB],\n  userAddress\n);\n\nconst baseMetadata = await sdk.canopy!.getBatchVaultBaseMetadataAndBalances(\n  [vaultA, vaultB],\n  userAddress\n);\n\nconst sharesMetadata = await sdk.canopy!.getBatchVaultSharesMetadataAndBalances(\n  [vaultA, vaultB],\n  userAddress\n);\n\nconst fullMetadata = await sdk.canopy!.getBatchVaultAllMetadataAndBalances(\n  [vaultA, vaultB],\n  userAddress\n);\n```\n\n### Curator vaults\n\nThis is the curated-vault system with a redemption queue, partner attribution,\nand preview-based validation. The SDK covers the depositor surface only —\ncurator/owner/guardian governance is not exposed.\n\n```ts\nconst vaults = await sdk.curator!.listVaults({ limit: 20, offset: 0 });\n\nconst vault = await sdk.curator!.getVault(vaultAddress);\n\nconst position = await sdk.curator!.getUserVaultPosition({ userAddress, vaultAddress });\n\nconst depositPayload = sdk.curator!.buildDepositPayload({\n  vaultAddress,\n  amount: 5_000_000n,\n  minSharesOut: 4_900_000n,\n});\n\nconst partnerPayload = sdk.curator!.buildDepositWithPartnerPayload({\n  vaultAddress,\n  amount: 5_000_000n,\n  partnerId: 7n,\n});\n```\n\nPayload builders are synchronous and return `InputEntryFunctionData`:\n\n- `buildDepositPayload(...)` / `buildDepositWithPartnerPayload(...)`\n- `buildInstantRedeemPayload(...)`\n- `buildRequestRedemptionPayload(...)`\n- `buildClaimRedemptionPayload(...)` / `buildCancelRedemptionPayload(...)`\n- `buildClaimbackEscrowedSharesPayload(...)`\n\nReads:\n\n- `listVaults({ offset, limit })`, `getVaultCount()`\n- `getVault(vaultAddress)`, `getVaultConfig(...)`, `getVaultAccounting(...)`, `getLiquidityBreakdown(...)`\n- `getUserVaultPosition({ userAddress, vaultAddress })`, `getShareBalance({ userAddress, vaultAddress })`\n- `getRedemptionRequest(requestAddress)`, `getUserRedemptionRequests({ vaultAddress, ownerAddress })`, `getOpenRequestCount({ vaultAddress, ownerAddress })`\n- `getRequestForceProcessAt({ vaultAddress, requestAddress })`, `getActiveLockDuration(vaultAddress)`, `getEffectiveNav24hSharePriceDeviationBps(vaultAddress)`\n- `isPartnerRegistered(partnerId)`, `getPartnerPayoutAddress(partnerId)`\n\n#### Sentio projections\n\nEvent-driven Sentio consumers can import the canonical bigint projection helpers from `@canopyhub/canopy-sdk/core` or `@canopyhub/canopy-sdk-core`:\n\n- `projectVaultAt(...)` for accounting, share price, cap headroom, locked profit, and NAV freshness.\n- `activeVelocityEpochBoundsAt(...)` for bounded bucket queries.\n- `projectAggregateVelocityAt(...)` and `projectWalletVelocityAt(...)` for current velocity use.\n- `remainingFundedShares(...)` for partial-claim queue share projection.\n\nMap GraphQL numeric scalars to `bigint` and supply the projection timestamp. GraphQL introspection describes the stored rows after processor upload; these helpers own the financial arithmetic.\n\n#### Previews are the validation API\n\nRather than simulating and reading an abort, ask the vault directly. Each preview\nreturns its own gate field plus stable machine-readable reasons:\n\n```ts\nconst preview = await sdk.curator!.previewDeposit({\n  vaultAddress,\n  depositor: userAddress,\n  amount: 5_000_000n,\n});\n\nif (!preview.canDeposit) {\n  // e.g. [\"DepositBelowMinimum\", \"IdleBreachActive\"]\n  console.log(preview.blockingReasons.map((reason) => reason.reasonId));\n}\n```\n\n`previewInstantRedeem(...)` gates on `canRedeem` and `previewQueuedRedemption(...)`\non `canSubmit` — the three names differ because they answer different questions.\n`reasonId` is a `string`, not a union, because the on-chain reason enum is\nappend-only.\n\nThree reads return values that no composite DTO in this SDK carries:\n\n- `getRequestForceProcessAt({ vaultAddress, requestAddress })` — the *effective*\n  force-processing deadline, which can be earlier than the request's stored snapshot.\n- `getActiveLockDuration(vaultAddress)` — the duration the running locked-profit\n  schedule is using. Equals `config.lockDuration` when no profit is locked, but keeps\n  its own snapshot while a schedule is active, so the two diverge after a config change.\n- `getEffectiveNav24hSharePriceDeviationBps(vaultAddress)` — the enforced NAV deviation\n  bound, i.e. `config.nav24hSharePriceDeviationBps` clamped to the current system\n  bounds. The config field is what was requested; this is what the guard applies. (The\n  same value also appears on-chain as `nav_24h_share_price_band.threshold_bps`, which\n  this SDK does not bind.)\n\n#### Queued redemptions\n\n`buildRequestRedemptionPayload` does not return the request address, so read it from\nthe transaction:\n\n```ts\nimport { findRedemptionRequest } from \"@canopyhub/canopy-sdk\";\n\nconst submitted = await sdk.signSubmitAndWaitForTransaction({\n  signer: account,\n  payload: sdk.curator!.buildRequestRedemptionPayload({\n    vaultAddress,\n    shares: 1_000_000n,\n    // Persisted on the request, not just checked at submission: if the final payout\n    // comes out below this, funding is skipped, the request stays `Pending` and no\n    // liquidity is consumed. Omit it and you accept any payout.\n    minAssetsOut: 995_000n,\n  }),\n});\n\nconst requested = findRedemptionRequest(submitted, { userAddress, vaultAddress });\nconst request = await sdk.curator!.getRedemptionRequest(requested!.requestAddress);\n```\n\n`requested.minAssetsOut` is the same optional floor carried by the request event;\n`request.minAssetsOut` reads its persisted value from queue state. Both are `bigint`\nwhen present and `null` when absent; malformed wire options throw rather than defaulting.\n\nPass `packageAddress` too when parsing a transaction that may include events from\nanother `::vault::RedemptionRequestedEvent`.\n\nIf a funding or force-processing transaction leaves a request pending because its\nminimum was missed, `findRedemptionFundingMinimumNotMetEvent(...)` returns the\ncalculated payout, required minimum, request, vault, actor, and attempt time.\n\nA queued redemption is not self-service: the request must be funded and\n`request.claimableAt` must pass before `buildClaimRedemptionPayload` will succeed.\nFunding happens either when an allocator funds the request or through permissionless\nforce-processing once its deadline is reached — so do not read `fundedAmount > 0` as\nevidence that an allocator acted.\n\nFor that deadline, read `getRequestForceProcessAt({ vaultAddress, requestAddress })`.\n`request.storedForceProcessAt` is only the snapshot taken at submission; the contract\nenforces `min(claimableAt + live SLA, snapshot)`, so a later SLA tightening moves the\nreal deadline earlier. The getter is authoritative for the deadline alone — status,\nexpiry, available liquidity and `minAssetsOut` all still apply.\n\n`getUserRedemptionRequests` returns live requests **and** ones awaiting claim-back\n(`Cancelled` / `Denied` / `Expired` with escrow outstanding). The latter are\ninspect-and-claimback only — filter on `status` before passing an address to claim or\ncancel. Ordering is not stable, so never treat position as identity.\n\n### Rewards\n\nTransaction builders:\n\n- `buildStakeCoinPayload(...)`\n- `buildStakeAndSubscribeCoinPayload(...)`\n- `buildStakeAssetPayload(...)`\n- `buildStakeAndSubscribeAssetPayload(...)`\n- `buildWithdrawCoinPayload(...)`\n- `buildWithdrawAssetPayload(...)`\n- `buildClaimRewardsPayload(...)`\n- `buildSubscribePayload(...)`\n- `buildUnsubscribePayload(...)`\n- `buildUnsubscribeAndWithdrawCoinPayload(...)`\n- `buildUnsubscribeAndWithdrawAssetPayload(...)`\n- `buildCreateStakingPoolPayload(...)`\n- `buildStakeTokenPayload(...)`\n- `buildStakeVaultSharesPayload(...)`\n\nCore rewards reads:\n\n```ts\nconst earned = await sdk.rewards!.getEarned({\n  userAddress,\n  poolAddress,\n  rewardTokenAddress,\n});\n\nconst poolInfo = await sdk.rewards!.getPoolInfo(poolAddress);\n\nconst rewardData = await sdk.rewards!.getRewardData(poolAddress, rewardTokenAddress);\n\nconst stakingPosition = await sdk.rewards!.getUserStakingPosition({\n  userAddress,\n  stakingAsset,\n});\n```\n\n`rewardRate`, `rewardPerTokenStored`, and `rewardPerToken` are returned as raw fixed-point values scaled by `1e12`.\nDivide by `10^12` in application code when you want a human decimal representation.\n\n### Rewards helper-module reads\n\nThese helper-backed reads are currently available on `movement-mainnet`.\n\n```ts\nconst snapshot = await sdk.rewards!.getRewardsSnapshot({\n  offset: 0,\n  limit: 20,\n  userAddress,\n});\n\nconst overview = await sdk.rewards!.getRegistryOverview({\n  offset: 0,\n  limit: 20,\n  includePools: true,\n});\n\nconst userOverview = await sdk.rewards!.getUserRewardsOverview({\n  userAddress,\n  offset: 0,\n  limit: 20,\n  includePools: true,\n});\n```\n\nAdditional helper reads:\n\n- `getRegisteredPoolCount()`\n- `getPoolDetails(poolAddress)`\n- `getRewardTokenDetails(poolAddress)`\n- `getUserPoolPositions({ userAddress, offset, limit })`\n- `getUserPoolPositionsByToken({ userAddress, stakingAsset, offset, limit })`\n- `getUserPoolPositionsByTokens({ userAddress, stakingAssets, offset, limit })`\n- `isPoolRegistered(poolAddress)`\n- `getUnsubscribedPools(...)`\n- `getUserStakedBalance(...)`\n- `getUserSubscribedPools(...)`\n- `isUserSubscribed(...)`\n\n### Meridian ALM\n\nAvailable on `movement-mainnet` and `aptos-mainnet`.\n\n```ts\nconst vaultAddresses = await sdk.alm.meridian!.listVaults({ limit: 20, offset: 0 });\n\nconst count = await sdk.alm.meridian!.getVaultCount();\n\nconst summary = await sdk.alm.meridian!.getVaultSummary(vaultAddress);\n\nconst position = await sdk.alm.meridian!.getUserVaultPosition(vaultAddress, userAddress);\n\nconst preview = await sdk.alm.meridian!.previewWithdraw(vaultAddress, 1_000_000n);\n\nconst depositPayload = sdk.alm.meridian!.buildDepositPayload({\n  vaultAddress,\n  amount: 1_000_000n,\n  minSharesOut: 0n,\n});\n```\n\nMovement batch-view-backed Meridian reads:\n\n- `getBatchVaultInfo(vaultAddresses)`\n- `getBatchUserVaultBalances(vaultAddresses, userAddress)`\n- `getBatchVaultPositions(vaultAddresses)`\n\n## Transactions\n\nAll `build*Payload` methods return `InputEntryFunctionData` compatible with `@aptos-labs/ts-sdk`.\n\n```ts\nconst payload = await sdk.canopy!.buildDepositPayload({\n  vaultAddress,\n  amount: 1_000_000n,\n  minSharesOut: 0n,\n});\n\nawait client.transaction.build.simple({\n  sender: account.accountAddress,\n  data: payload,\n});\n\nawait sdk.simulateTransaction({\n  sender: account.accountAddress,\n  payload,\n});\n```\n\nIf you are using a wallet adapter, pass the same payload object into your wallet’s sign-and-submit flow.\nIf a Move abort is hit, whether simulating a transaction or reading a view, it throws a `CanopyError` with `code: \"MOVE_ABORT\"` and structured `details.moveAbort` metadata for UI handling. All three abort string shapes fullnodes emit are recognized, because simulation and `/v1/view` do not report aborts the same way even on the same chain:\n\n- **View** — `VMError { major_status: ABORTED, sub_status: Some(N), ... }`. Carries the code and a full function id, but no name or description.\n- **Simulation on Movement** — `ENAME(0xHEX): description`, where `abortName` and `abortMessage` come from the chain itself, and the location stops at the module.\n- **Aptos** — a bare `abort code N`, where the name is looked up from those the SDK knows.\n\n`details.moveAbort.rawMessage` always carries the original text, and `abortName` is absent rather than guessed when the chain does not send one.\n\nA Movement simulation abort names only the module it happened in, which is often an inner module the caller never invoked — a router entry function aborting inside a vault. In that case `details.moveAbort` reports `module` without a `functionName`; the function you actually called is on the enclosing `details.function`.\n\n## Offchain Helpers\n\nThe SDK exposes one optional data client under `sdk.data`:\n\n- `sdk.data.rewardsDiscovery`\n\nThis is useful for rewards pool discovery. It is only constructed on chains with rewards support, or when you explicitly pass `offchain.sentioEndpoint`.\n\nRewards pool resolution for `buildStakeVaultSharesPayload(...)` uses:\n\n1. explicit `poolAddresses`\n2. Sentio lookup, if configured for the chain\n\nYou can inspect the active discovery source with:\n\n```ts\nconst status = sdk.data.rewardsDiscovery?.getStatus();\n```\n\n## Contract And ABI Lookup\n\n```ts\nimport {\n  getContract,\n  requireContract,\n  getCanopyStrategyContract,\n  inferCanopyStrategyProtocol,\n} from \"@canopyhub/canopy-sdk\";\nimport { getDeployment, getContractAddress } from \"@canopyhub/canopy-sdk/deployments\";\nimport { getAbi, requireAbi } from \"@canopyhub/canopy-sdk/bindings\";\n\nconst deployment = getDeployment(\"movement-mainnet\");\nconst vaultAddress = getContractAddress(\"movement-mainnet\", \"canopy.vault\");\nconst rewardsAbi = requireAbi(\"movement-mainnet\", \"rewards.module\");\nconst meridianRegistry = requireContract(\"movement-mainnet\", \"meridian.registry\");\nconst maybeCanopy = getContract(\"movement-testnet\", \"canopy.router\");\n\nconst protocol = inferCanopyStrategyProtocol(\"movement-mainnet\", strategyAddress);\nconst strategy = protocol\n  ? getCanopyStrategyContract(\"movement-mainnet\", protocol)\n  : null;\n```\n\nLookup semantics:\n\n- `get*` returns `undefined` or `null` when a supported chain lacks that deployment\n- `require*` throws for missing deployments or ABIs\n- unsupported chain names throw explicit errors\n\n## Subpath Imports\n\nThe root package also exports three subpaths:\n\n```ts\nimport { normalizeMoveAddress } from \"@canopyhub/canopy-sdk/core\";\nimport { getDeployment } from \"@canopyhub/canopy-sdk/deployments\";\nimport { requireAbi } from \"@canopyhub/canopy-sdk/bindings\";\n```\n\nIf you need the leaf packages directly:\n\n```ts\nimport { normalizeMoveAddress } from \"@canopyhub/canopy-sdk-core\";\nimport { getDeployment } from \"@canopyhub/canopy-sdk-deployments\";\nimport { requireAbi } from \"@canopyhub/canopy-sdk-bindings\";\n```\n\n## Repo Layout\n\n```text\ncanopy-sdk/\n├── packages/\n│   ├── core/\n│   ├── deployments/\n│   ├── bindings/\n│   └── sdk/\n├── scripts/\n├── tests/\n└── examples/\n```\n\nPackage roles:\n\n- `packages/core`\n  shared Move/address/view/payload/error utilities\n- `packages/deployments`\n  chain registry, feature flags, contract addresses\n- `packages/bindings`\n  checked-in ABI registry by chain\n- `packages/sdk`\n  user-facing protocol clients\n\n## Development\n\n```bash\npnpm install\npnpm run hooks:install\npnpm run typecheck\npnpm test\npnpm run check:exports\npnpm run check:imports\npnpm run abi:check-local\npnpm build\npnpm run check:payloads\n```\n\n`pnpm run hooks:install` configures the repo-local `.githooks/pre-commit` hook, which runs `abi:check-local` when staged changes touch deployment addresses, generated ABI files, chain bindings, or the ABI manifest.\n\n### Live payload and view checks\n\n`pnpm run check:payloads` builds every `build*Payload` against live fullnodes and asserts\n`transaction.build.simple` succeeds, then reads every view the clients use. It must run\n**after** `pnpm build`, because it exercises `dist/`.\n\nThis exists because the unit tests assert payload *shape* and never build a transaction,\nwhich is how a release shipped where every entry payload was rejected with\n`Type mismatch for argument 0, type '&signer'`.\n\n`pnpm run check:bundle` inspects an already-built `examples/react/dist` and fails if a\nNode-only dependency path is bundled — a previous dependency pulled in Node's `Buffer`\nand made the SDK unusable in browsers. It does not build anything itself:\n\n```bash\npnpm build\npnpm --filter @canopy-sdk-example/sdk-react run build\npnpm run check:bundle\n```\n\nBoth run in CI. They need network access, as `abi:check` already does.\n\nFor the example app:\n\n```bash\ncd examples/react\npnpm install\npnpm dev\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}