{"_id":"@arkonix.xyz/arkonix-vault-sdk","_rev":"10-9fb3651f01745ac3d3d8d2573206c1be","name":"@arkonix.xyz/arkonix-vault-sdk","dist-tags":{"latest":"2.3.0"},"versions":{"1.0.0":{"name":"@arkonix.xyz/arkonix-vault-sdk","version":"1.0.0","keywords":["arkonix","vault","erc7540","defi","ethereum","arbitrum","react","react-native","sdk"],"author":{"name":"Arkonix"},"license":"MIT","_id":"@arkonix.xyz/arkonix-vault-sdk@1.0.0","maintainers":[{"name":"arkonix-xyz","email":"sarthak@arkonix.xyz"}],"homepage":"https://github.com/Arkonix-finance/arkonix-vault-sdk#readme","bugs":{"url":"https://github.com/Arkonix-finance/arkonix-vault-sdk/issues"},"dist":{"shasum":"180e3ffb64d03494c4fd9b60be1f136075c133d7","tarball":"https://registry.npmjs.org/@arkonix.xyz/arkonix-vault-sdk/-/arkonix-vault-sdk-1.0.0.tgz","fileCount":6,"integrity":"sha512-uPfUBWw3jnN64pxx/J51hO5meywGylMOn2b7MNSSuQ1bjS8f3jkt3lLJSMICEvXdQOx881QQ6mTory9FoxJ+qA==","signatures":[{"sig":"MEQCIHoCNSqBLMh82GoYARctSD9/3Acbw5hSuQD0lRDOPOiHAiADuEMmubSX9O/NoSyHP3L/zzFfhpD270DEpQQ9f//sIw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":166656},"main":"dist/index.cjs","type":"module","_from":"file:arkonix.xyz-arkonix-vault-sdk-1.0.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","lint":"eslint src/**/*.ts","test":"vitest run","build":"tsup src/index.ts --format cjs,esm --dts --clean","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"arkonix-xyz","email":"sarthak@arkonix.xyz"},"_resolved":"/tmp/adf39282af08cea55b69b9daeb930061/arkonix.xyz-arkonix-vault-sdk-1.0.0.tgz","_integrity":"sha512-uPfUBWw3jnN64pxx/J51hO5meywGylMOn2b7MNSSuQ1bjS8f3jkt3lLJSMICEvXdQOx881QQ6mTory9FoxJ+qA==","repository":{"url":"git+https://github.com/Arkonix-finance/arkonix-vault-sdk.git","type":"git"},"_npmVersion":"10.8.2","description":"Universal React/React Native SDK for ERC-7540 vault deposit & redeem operations","directories":{},"_nodeVersion":"20.20.0","dependencies":{"viem":"^2.43.3","@tanstack/react-query":"^5.90.12"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","eslint":"^9.0.0","vitest":"^2.0.0","happy-dom":"^15.0.0","typescript":"^5.0.0","@types/react":"^19.0.0","@vitest/coverage-v8":"^2.0.0","@testing-library/react":"^16.0.0"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.70.0 || *"},"peerDependenciesMeta":{"react-native":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/arkonix-vault-sdk_1.0.0_1771414879374_0.559656414611956","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@arkonix.xyz/arkonix-vault-sdk","version":"1.1.0","keywords":["arkonix","vault","erc7540","defi","ethereum","arbitrum","react","react-native","sdk"],"author":{"name":"Arkonix"},"license":"MIT","_id":"@arkonix.xyz/arkonix-vault-sdk@1.1.0","maintainers":[{"name":"arkonix-xyz","email":"sarthak@arkonix.xyz"}],"homepage":"https://github.com/Arkonix-finance/arkonix-vault-sdk#readme","bugs":{"url":"https://github.com/Arkonix-finance/arkonix-vault-sdk/issues"},"dist":{"shasum":"dcb0e07395d90595071f2c3c76813d7e79840edb","tarball":"https://registry.npmjs.org/@arkonix.xyz/arkonix-vault-sdk/-/arkonix-vault-sdk-1.1.0.tgz","fileCount":6,"integrity":"sha512-8VivA62SPObvAdHBjwOpM8TRtvPe5fMaTRaAkYnQVsPi2KV60gfeDycnmTTDIsVmAQ1AliFY2SzoC1nhM4tjmA==","signatures":[{"sig":"MEUCIFOXuF1g1exPD1WtP8jUHDMtRzAQv98UFh7U38+qPC17AiEA2uarGlUKrdQQ0ktJ4yT9D1cO0NIizzmunwlSn0i1rl0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arkonix.xyz%2farkonix-vault-sdk@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":115595},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"eec6727997a993dbcdd82b027a30bd0962c85c52","scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","lint":"eslint src/**/*.ts","test":"vitest run","build":"tsup src/index.ts --format cjs,esm --dts --clean","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build && pnpm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b057557f-2a4b-4c6a-9d9d-088140230787"}},"repository":{"url":"git+https://github.com/Arkonix-finance/arkonix-vault-sdk.git","type":"git"},"_npmVersion":"11.10.0","description":"Universal React/React Native SDK for ERC-7540 vault deposit & redeem operations","directories":{},"_nodeVersion":"22.22.0","dependencies":{"viem":"^2.43.3","@tanstack/react-query":"^5.90.12"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","eslint":"^9.0.0","vitest":"^2.0.0","happy-dom":"^15.0.0","typescript":"^5.0.0","@types/react":"^19.0.0","@vitest/coverage-v8":"^2.0.0","@testing-library/react":"^16.0.0"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.70.0 || *"},"peerDependenciesMeta":{"react-native":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/arkonix-vault-sdk_1.1.0_1771420225311_0.3755976565646133","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@arkonix.xyz/arkonix-vault-sdk","version":"1.1.1","keywords":["arkonix","vault","erc7540","defi","ethereum","arbitrum","react","react-native","sdk"],"author":{"name":"Arkonix"},"license":"BUSL-1.1","_id":"@arkonix.xyz/arkonix-vault-sdk@1.1.1","maintainers":[{"name":"arkonix-xyz","email":"sarthak@arkonix.xyz"}],"homepage":"https://github.com/Arkonix-finance/arkonix-vault-sdk#readme","bugs":{"url":"https://github.com/Arkonix-finance/arkonix-vault-sdk/issues"},"dist":{"shasum":"954420be54e69e35951449ab766bcac306d89b29","tarball":"https://registry.npmjs.org/@arkonix.xyz/arkonix-vault-sdk/-/arkonix-vault-sdk-1.1.1.tgz","fileCount":7,"integrity":"sha512-HkeNiMCMjyVRuJp2WzPK9ehxCoq2agj4jE+Xr+P+rYXgQdQj5xTrFys/mLD/dP+fmPSPgnSC3V0DOgsx7CZxgg==","signatures":[{"sig":"MEQCIFJHTkMNPZsHoYMgDh4eUPg3nF7nX8m3oFeOZIENtmwkAiBPn8e/ABrhiF/fS9GfW7FLbxU0vHFhTLt8EoLYDNLN5Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arkonix.xyz%2farkonix-vault-sdk@1.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":119655},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"8b338e88928916f90b7d98a7c666911ce34700f5","scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","lint":"eslint src/**/*.ts","test":"vitest run","build":"tsup src/index.ts --format cjs,esm --dts --clean","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build && pnpm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b057557f-2a4b-4c6a-9d9d-088140230787"}},"repository":{"url":"git+https://github.com/Arkonix-finance/arkonix-vault-sdk.git","type":"git"},"_npmVersion":"11.10.0","description":"Universal React/React Native SDK for ERC-7540 vault deposit & redeem operations","directories":{},"_nodeVersion":"22.22.0","dependencies":{"viem":"^2.43.3","@tanstack/react-query":"^5.90.12"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","eslint":"^9.0.0","vitest":"^2.0.0","happy-dom":"^15.0.0","typescript":"^5.0.0","@types/react":"^19.0.0","@vitest/coverage-v8":"^2.0.0","@testing-library/react":"^16.0.0"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.70.0 || *"},"peerDependenciesMeta":{"react-native":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/arkonix-vault-sdk_1.1.1_1771420641871_0.4057169053393186","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@arkonix.xyz/arkonix-vault-sdk","version":"1.1.2","keywords":["arkonix","vault","erc7540","defi","ethereum","arbitrum","react","react-native","sdk"],"author":{"name":"Arkonix"},"license":"BUSL-1.1","_id":"@arkonix.xyz/arkonix-vault-sdk@1.1.2","maintainers":[{"name":"arkonix-xyz","email":"sarthak@arkonix.xyz"}],"homepage":"https://github.com/Arkonix-finance/arkonix-vault-sdk#readme","bugs":{"url":"https://github.com/Arkonix-finance/arkonix-vault-sdk/issues"},"dist":{"shasum":"dccac057df02cbd81ea5c8e27ec3463a78661e55","tarball":"https://registry.npmjs.org/@arkonix.xyz/arkonix-vault-sdk/-/arkonix-vault-sdk-1.1.2.tgz","fileCount":7,"integrity":"sha512-jHIsfejS9NOZQvz3pnqr0cCoG4rztT0ducGAKrtwQDkf5uIzFLUI1POiPP1qAJesCD1Gx1AeU0cYAriibz78qQ==","signatures":[{"sig":"MEUCIARR55YYVMF4fccZGQi+6/6fi50DDW4mAdtGTxtIYFcsAiEAy9en0KrjPs/1JtOslo76I0SX6daBxdpGA/tICrFByj0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arkonix.xyz%2farkonix-vault-sdk@1.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":125068},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"a88da258335f0a8dc4511297372c16cba77c3180","scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","lint":"eslint src/**/*.ts","test":"vitest run","build":"tsup src/index.ts --format cjs,esm --dts --clean","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build && pnpm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b057557f-2a4b-4c6a-9d9d-088140230787"}},"repository":{"url":"git+https://github.com/Arkonix-finance/arkonix-vault-sdk.git","type":"git"},"_npmVersion":"11.11.0","description":"Universal React/React Native SDK for ERC-7540 vault deposit & redeem operations","directories":{},"_nodeVersion":"22.22.0","dependencies":{"viem":"^2.43.3","@tanstack/react-query":"^5.90.12"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","eslint":"^9.0.0","vitest":"^2.0.0","happy-dom":"^15.0.0","typescript":"^5.0.0","@types/react":"^19.0.0","@vitest/coverage-v8":"^2.0.0","@testing-library/react":"^16.0.0"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.70.0 || *"},"peerDependenciesMeta":{"react-native":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/arkonix-vault-sdk_1.1.2_1772563666117_0.025889644953758895","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@arkonix.xyz/arkonix-vault-sdk","version":"1.1.3","keywords":["arkonix","vault","erc7540","defi","ethereum","arbitrum","react","react-native","sdk"],"author":{"name":"Arkonix"},"license":"BUSL-1.1","_id":"@arkonix.xyz/arkonix-vault-sdk@1.1.3","maintainers":[{"name":"arkonix-xyz","email":"sarthak@arkonix.xyz"}],"homepage":"https://github.com/Arkonix-finance/arkonix-vault-sdk#readme","bugs":{"url":"https://github.com/Arkonix-finance/arkonix-vault-sdk/issues"},"dist":{"shasum":"be773a1643313bf347b8308c7b36085d7f65646f","tarball":"https://registry.npmjs.org/@arkonix.xyz/arkonix-vault-sdk/-/arkonix-vault-sdk-1.1.3.tgz","fileCount":7,"integrity":"sha512-g9p1fKDQrsRYvH9nOJdamrkpjYVWVstcB22Rfglw3/V9dQVCk5w4n3YEGau19wWnmAq98Dsw5xhiWW5IvEEaMg==","signatures":[{"sig":"MEUCIHbVoM+fRhAkUtINN3H08o7MVOu/5WTmwxspE4IVrnDsAiEAyYu7W2bVgdHsBTlPZhgEAhJQuFt9XXXWeNJUYihKay4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arkonix.xyz%2farkonix-vault-sdk@1.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":124446},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"0b023b88d3525f845e1bb2988e6859dd3bf980fd","scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","lint":"eslint src/**/*.ts","test":"vitest run","build":"tsup src/index.ts --format cjs,esm --dts --clean","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build && pnpm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b057557f-2a4b-4c6a-9d9d-088140230787"}},"repository":{"url":"git+https://github.com/Arkonix-finance/arkonix-vault-sdk.git","type":"git"},"_npmVersion":"11.11.0","description":"Universal React/React Native SDK for ERC-7540 vault deposit & redeem operations","directories":{},"_nodeVersion":"22.22.0","dependencies":{"viem":"^2.43.3","@tanstack/react-query":"^5.90.12"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","eslint":"^9.0.0","vitest":"^2.0.0","happy-dom":"^15.0.0","typescript":"^5.0.0","@types/react":"^19.0.0","@vitest/coverage-v8":"^2.0.0","@testing-library/react":"^16.0.0"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.70.0 || *"},"peerDependenciesMeta":{"react-native":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/arkonix-vault-sdk_1.1.3_1772580395009_0.2155135899598164","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@arkonix.xyz/arkonix-vault-sdk","version":"2.0.0","keywords":["arkonix","vault","erc7540","defi","ethereum","arbitrum","react","react-native","sdk"],"author":{"name":"Arkonix"},"license":"BUSL-1.1","_id":"@arkonix.xyz/arkonix-vault-sdk@2.0.0","maintainers":[{"name":"arkonix-xyz","email":"sarthak@arkonix.xyz"}],"homepage":"https://github.com/Arkonix-finance/arkonix-vault-sdk#readme","bugs":{"url":"https://github.com/Arkonix-finance/arkonix-vault-sdk/issues"},"dist":{"shasum":"b542270eab764890bf0275372020a2f4b0f39235","tarball":"https://registry.npmjs.org/@arkonix.xyz/arkonix-vault-sdk/-/arkonix-vault-sdk-2.0.0.tgz","fileCount":7,"integrity":"sha512-SiorhtaboYii5pGvFGyiUagTiCAKbNQSZ/qUeUhu8B7j/El5Ex/ozlzonUFbxBAwxd3ShyQPZMm4lrXbBcwzkw==","signatures":[{"sig":"MEUCIQCBmgZhcms6h0Zi0oyebxVu9WZh3qak1aYUWFCVPZ4xAAIgHnxQj+OIWKmICDAADf4NDHOH01qkrX0QPmdlDpqZygI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arkonix.xyz%2farkonix-vault-sdk@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":110194},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"53f83cb93e2afd7e57fd2e322a4d4ad021706c36","scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","lint":"eslint src/**/*.ts","test":"vitest run","build":"tsup src/index.ts --format cjs,esm --dts --clean","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build && pnpm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b057557f-2a4b-4c6a-9d9d-088140230787"}},"repository":{"url":"git+https://github.com/Arkonix-finance/arkonix-vault-sdk.git","type":"git"},"_npmVersion":"11.11.0","description":"Universal React/React Native SDK for ERC-7540 vault deposit & redeem operations","directories":{},"_nodeVersion":"22.22.0","dependencies":{"viem":"^2.43.3","@tanstack/react-query":"^5.90.12"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","eslint":"^9.0.0","vitest":"^2.0.0","happy-dom":"^15.0.0","typescript":"^5.0.0","@types/react":"^19.0.0","@vitest/coverage-v8":"^2.0.0","@testing-library/react":"^16.0.0"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.70.0 || *"},"peerDependenciesMeta":{"react-native":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/arkonix-vault-sdk_2.0.0_1773230102888_0.30987200124172576","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@arkonix.xyz/arkonix-vault-sdk","version":"2.1.0","keywords":["arkonix","vault","erc7540","defi","ethereum","arbitrum","react","react-native","sdk"],"author":{"name":"Arkonix"},"license":"BUSL-1.1","_id":"@arkonix.xyz/arkonix-vault-sdk@2.1.0","maintainers":[{"name":"ryan_arkonix","email":"ryan@arkonix.xyz"},{"name":"arkonix-xyz","email":"dev@arkonix.xyz"}],"homepage":"https://github.com/Arkonix-finance/arkonix-vault-sdk#readme","bugs":{"url":"https://github.com/Arkonix-finance/arkonix-vault-sdk/issues"},"dist":{"shasum":"61cb879545a0e69a6c578555b5fe59d94b29814f","tarball":"https://registry.npmjs.org/@arkonix.xyz/arkonix-vault-sdk/-/arkonix-vault-sdk-2.1.0.tgz","fileCount":7,"integrity":"sha512-sKTrHiDAwLYOJDCFs5dqp0zFF4RucQM1NjQRFyl4U0LJjuQ48Wxg4QqLYacTDuiExjrLaWY0hdW/It/s+qaXcg==","signatures":[{"sig":"MEUCIQCyDW1bNzpjLR3wMObblbK0sve+PW05/xA+L0PO4CurwAIgTqoNQlH/5AwkKdC4AfLicI7TcK8UuVl9a/8DKoeFEgs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arkonix.xyz%2farkonix-vault-sdk@2.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":139626},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"4836a7a84b60853675ddf10b376ddac26bc72e35","scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","lint":"eslint src/**/*.ts","test":"vitest run","build":"tsup src/index.ts --format cjs,esm --dts --clean","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build && pnpm test","test:integration":"vitest run --reporter=verbose **/*.integration.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b057557f-2a4b-4c6a-9d9d-088140230787"}},"repository":{"url":"git+https://github.com/Arkonix-finance/arkonix-vault-sdk.git","type":"git"},"_npmVersion":"11.12.1","description":"Universal React/React Native SDK for ERC-7540 vault deposit & redeem operations","directories":{},"_nodeVersion":"22.22.2","dependencies":{"viem":"^2.43.3","@tanstack/react-query":"^5.90.12"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.0.0","devDependencies":{"tsup":"^8.0.0","eslint":"^9.0.0","vitest":"^2.0.0","happy-dom":"^15.0.0","typescript":"^5.0.0","@types/react":"^19.0.0","@vitest/coverage-v8":"^2.0.0","@testing-library/react":"^16.0.0"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.70.0 || *"},"peerDependenciesMeta":{"react-native":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/arkonix-vault-sdk_2.1.0_1775499871092_0.8691991606020952","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"@arkonix.xyz/arkonix-vault-sdk","version":"2.2.0","keywords":["arkonix","vault","erc7540","defi","ethereum","arbitrum","react","react-native","sdk"],"author":{"name":"Arkonix"},"license":"BUSL-1.1","_id":"@arkonix.xyz/arkonix-vault-sdk@2.2.0","maintainers":[{"name":"ryan_arkonix","email":"ryan@arkonix.xyz"},{"name":"arkonix-xyz","email":"dev@arkonix.xyz"}],"homepage":"https://github.com/Arkonix-finance/arkonix-vault-sdk#readme","bugs":{"url":"https://github.com/Arkonix-finance/arkonix-vault-sdk/issues"},"dist":{"shasum":"50e47d00c62a5a56330aebc520f05559565afbef","tarball":"https://registry.npmjs.org/@arkonix.xyz/arkonix-vault-sdk/-/arkonix-vault-sdk-2.2.0.tgz","fileCount":7,"integrity":"sha512-LLBlIXhrg0n8ABzahJjo590zYC01j4lkH7B+9mLMCLDUcfuicd19dx0+LKzxzm40EnDP06PG/QHG+ORm8sEljw==","signatures":[{"sig":"MEYCIQDuolxoZpmsKskCY/fKDZ13PQulJIvq05+skacyS7m2CwIhAI5zK4UW3D04N70MEZpItcgGmQJ/JHH96mzBk+DVAWVa","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arkonix.xyz%2farkonix-vault-sdk@2.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":202727},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"gitHead":"2ff61f39eead9776fd7b6cfcf087ea818a1aa84e","scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","lint":"eslint .","test":"vitest run","build":"tsup src/index.ts --format cjs,esm --dts --clean","lint:fix":"eslint . --fix","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build && pnpm test","test:integration":"vitest run --reporter=verbose **/*.integration.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b057557f-2a4b-4c6a-9d9d-088140230787"}},"repository":{"url":"git+https://github.com/Arkonix-finance/arkonix-vault-sdk.git","type":"git"},"_npmVersion":"11.17.0","description":"Universal React/React Native SDK for ERC-7540 vault deposit & redeem operations","directories":{},"sideEffects":false,"_nodeVersion":"22.23.0","dependencies":{"viem":"^2.43.3","@tanstack/react-query":"^5.90.12"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.0.0","devDependencies":{"tsup":"^8.0.0","eslint":"^9.0.0","vitest":"^2.0.0","happy-dom":"^15.0.0","typescript":"^5.0.0","@types/react":"^19.0.0","typescript-eslint":"^8","@vitest/coverage-v8":"^2.0.0","@testing-library/react":"^16.0.0"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.70.0 || *"},"peerDependenciesMeta":{"react-native":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/arkonix-vault-sdk_2.2.0_1782314934573_0.7726302804354885","host":"s3://npm-registry-packages-npm-production"}},"2.2.1":{"name":"@arkonix.xyz/arkonix-vault-sdk","version":"2.2.1","keywords":["arkonix","vault","erc7540","defi","ethereum","arbitrum","react","react-native","sdk"],"author":{"name":"Arkonix"},"license":"BUSL-1.1","_id":"@arkonix.xyz/arkonix-vault-sdk@2.2.1","maintainers":[{"name":"ryan_arkonix","email":"ryan@arkonix.xyz"},{"name":"arkonix-xyz","email":"dev@arkonix.xyz"}],"homepage":"https://github.com/Arkonix-finance/arkonix-vault-sdk#readme","bugs":{"url":"https://github.com/Arkonix-finance/arkonix-vault-sdk/issues"},"dist":{"shasum":"1af5a3adf8702cbbc19ebf29fc913d3597e3f8f3","tarball":"https://registry.npmjs.org/@arkonix.xyz/arkonix-vault-sdk/-/arkonix-vault-sdk-2.2.1.tgz","fileCount":7,"integrity":"sha512-OwSyN0YSvhRjVZGkKEUCQ2YBTq6az1XlHfaJlet+sa267i0o2Ib25RSuKwQ8gxdQ2yGBgg90J1PPcbaEYwelZw==","signatures":[{"sig":"MEQCIG2jQJA7q3pHhmfedxplD5e8SBmB77o1vMstOPl0CGbyAiBja3rNSuMd99OlHhW+NMP4U3/Fiijom5jIknYs4Udu+g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arkonix.xyz%2farkonix-vault-sdk@2.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":207033},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"gitHead":"43fe7d231971004869ae4f1c5000f79b08b8ea8f","scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","lint":"eslint .","test":"vitest run","build":"tsup src/index.ts --format cjs,esm --dts --clean","lint:fix":"eslint . --fix","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build && pnpm test","test:integration":"vitest run --reporter=verbose **/*.integration.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b057557f-2a4b-4c6a-9d9d-088140230787"}},"repository":{"url":"git+https://github.com/Arkonix-finance/arkonix-vault-sdk.git","type":"git"},"_npmVersion":"11.17.0","description":"Universal React/React Native SDK for ERC-7540 vault deposit & redeem operations","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","dependencies":{"viem":"^2.43.3","@tanstack/react-query":"^5.90.12"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.0.0","devDependencies":{"tsup":"^8.0.0","eslint":"^9.0.0","vitest":"^2.0.0","happy-dom":"^15.0.0","typescript":"^5.0.0","@types/react":"^19.0.0","typescript-eslint":"^8","@vitest/coverage-v8":"^2.0.0","@testing-library/react":"^16.0.0"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.70.0 || *"},"peerDependenciesMeta":{"react-native":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/arkonix-vault-sdk_2.2.1_1782343613864_0.6328902449366145","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"@arkonix.xyz/arkonix-vault-sdk","version":"2.3.0","type":"module","description":"Universal React/React Native SDK for ERC-7540 vault deposit & redeem operations","main":"dist/index.cjs","module":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"sideEffects":false,"scripts":{"build":"tsup src/index.ts --format cjs,esm --dts --clean","dev":"tsup src/index.ts --format cjs,esm --dts --watch","test":"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage","test:integration":"vitest run --reporter=verbose **/*.integration.test.ts","lint":"eslint .","lint:fix":"eslint . --fix","type-check":"tsc --noEmit","prepublishOnly":"pnpm build && pnpm test"},"dependencies":{"@tanstack/react-query":"^5.90.12","viem":"^2.43.3"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.70.0 || *"},"peerDependenciesMeta":{"react-native":{"optional":true}},"devDependencies":{"@testing-library/react":"^16.0.0","@types/react":"^19.0.0","@vitest/coverage-v8":"^2.0.0","eslint":"^9.0.0","happy-dom":"^15.0.0","tsup":"^8.0.0","typescript":"^5.0.0","typescript-eslint":"^8","vitest":"^2.0.0"},"keywords":["arkonix","vault","erc7540","defi","ethereum","arbitrum","react","react-native","sdk"],"author":{"name":"Arkonix"},"license":"BUSL-1.1","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/Arkonix-finance/arkonix-vault-sdk.git"},"packageManager":"pnpm@9.0.0","gitHead":"4f2424c6500ba291d6d4d84f371c8bbca4fd9150","_id":"@arkonix.xyz/arkonix-vault-sdk@2.3.0","bugs":{"url":"https://github.com/Arkonix-finance/arkonix-vault-sdk/issues"},"homepage":"https://github.com/Arkonix-finance/arkonix-vault-sdk#readme","_nodeVersion":"22.23.1","_npmVersion":"12.0.1","dist":{"integrity":"sha512-x0AB5Z1oYxys42caGm8fjFDwvYnxgx4hMd8gZ7/PYpPdWq96UtOCcnyP4qIA3XMw2077IggqbennVSAP30iGpg==","shasum":"4f5bfa5689b440c62d1aeee511ede340594caff9","tarball":"https://registry.npmjs.org/@arkonix.xyz/arkonix-vault-sdk/-/arkonix-vault-sdk-2.3.0.tgz","fileCount":7,"unpackedSize":239573,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arkonix.xyz%2farkonix-vault-sdk@2.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCXjNjDOvlOG5CFc8UAfnD8SrL1fawbfmkmsHz4g6XGowIhAI3JonfV9Gy+AXinOxSZDdCqneO0enBzvTEMiSQh7Ok7"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b057557f-2a4b-4c6a-9d9d-088140230787"}},"directories":{},"maintainers":[{"name":"ryan_arkonix","email":"ryan@arkonix.xyz"},{"name":"arkonix-xyz","email":"dev@arkonix.xyz"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/arkonix-vault-sdk_2.3.0_1784124730814_0.0803384375812628"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-18T11:41:19.242Z","modified":"2026-07-15T14:12:11.316Z","1.0.0":"2026-02-18T11:41:19.525Z","1.1.0":"2026-02-18T13:10:25.483Z","1.1.1":"2026-02-18T13:17:22.018Z","1.1.2":"2026-03-03T18:47:46.270Z","1.1.3":"2026-03-03T23:26:35.154Z","2.0.0":"2026-03-11T11:55:03.016Z","2.1.0":"2026-04-06T18:24:31.230Z","2.2.0":"2026-06-24T15:28:54.719Z","2.2.1":"2026-06-24T23:26:54.003Z","2.3.0":"2026-07-15T14:12:10.945Z"},"bugs":{"url":"https://github.com/Arkonix-finance/arkonix-vault-sdk/issues"},"author":{"name":"Arkonix"},"license":"BUSL-1.1","homepage":"https://github.com/Arkonix-finance/arkonix-vault-sdk#readme","keywords":["arkonix","vault","erc7540","defi","ethereum","arbitrum","react","react-native","sdk"],"repository":{"type":"git","url":"git+https://github.com/Arkonix-finance/arkonix-vault-sdk.git"},"description":"Universal React/React Native SDK for ERC-7540 vault deposit & redeem operations","maintainers":[{"name":"ryan_arkonix","email":"ryan@arkonix.xyz"},{"name":"arkonix-xyz","email":"dev@arkonix.xyz"}],"readme":"# @arkonix.xyz/arkonix-vault-sdk\n\nUniversal React/React Native SDK for ERC-7540 vault deposit and redeem operations.\n\n## Installation\n\n```bash\nnpm install @arkonix.xyz/arkonix-vault-sdk viem @tanstack/react-query\n# or\npnpm add @arkonix.xyz/arkonix-vault-sdk viem @tanstack/react-query\n```\n\n`viem` and `@tanstack/react-query` are required dependencies (installed via the command above). **Peer dependencies:** `react >= 18.0.0`. `react-native` (`>=0.70.0`) is an optional peer dependency — only needed for React Native apps.\n\n## Setup\n\nThe SDK supports two usage patterns: **React hooks** (with a scoped provider) or **standalone** (no wrapper needed).\n\n### Option A: React Hooks (Recommended)\n\nWrap only the vault section of your app — **not the entire app**:\n\n```tsx\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport { VaultProvider } from \"@arkonix.xyz/arkonix-vault-sdk\";\n\nconst queryClient = new QueryClient();\n\nfunction App() {\n  return (\n    <YourExistingApp>\n      {/* Only wrap vault components, not your whole app */}\n      <QueryClientProvider client={queryClient}>\n        <VaultProvider\n          config={{\n            chainId: 42161, // Arbitrum\n            rpcUrl: \"https://arb1.arbitrum.io/rpc\",\n          }}\n        >\n          <VaultWidget />\n        </VaultProvider>\n      </QueryClientProvider>\n    </YourExistingApp>\n  );\n}\n```\n\n> **Note:** If your app already uses `@tanstack/react-query`, reuse your existing `QueryClientProvider` — no need for a second one.\n\n#### React Native Integration\n\nPass a custom `walletAdapter` that bridges to your existing wallet library:\n\n```tsx\nimport { VaultProvider, type WalletAdapter } from \"@arkonix.xyz/arkonix-vault-sdk\";\n\nfunction MyVaultProvider({ children }: { children: React.ReactNode }) {\n  // Bridge to your existing wallet (WalletConnect, Privy, etc.)\n  const walletAdapter: WalletAdapter = useMemo(() => ({\n    platform: \"native\" as const,\n    isConnected: () => !!myWallet.address,\n    getAddress: async () => myWallet.address ?? null,\n    connect: async () => { /* your wallet connect logic */ },\n    disconnect: async () => { /* your wallet disconnect logic */ },\n    sendTransaction: async (tx) => {\n      return await myWallet.sendTransaction({\n        to: tx.to,\n        data: tx.data,\n        value: tx.value,\n      });\n    },\n  }), [myWallet]);\n\n  return (\n    <VaultProvider\n      config={{ chainId: 42161, rpcUrl: \"https://arb1.arbitrum.io/rpc\" }}\n      walletAdapter={walletAdapter}\n    >\n      {children}\n    </VaultProvider>\n  );\n}\n```\n\n#### wagmi / RainbowKit Integration\n\nIf you already use wagmi, pass a custom `walletAdapter` to reuse your existing wallet connection:\n\n```tsx\nimport { useWalletClient, useAccount } from \"wagmi\";\nimport { VaultProvider, type WalletAdapter } from \"@arkonix.xyz/arkonix-vault-sdk\";\n\nfunction WagmiVaultProvider({ children }: { children: React.ReactNode }) {\n  const { data: walletClient } = useWalletClient();\n  const { address } = useAccount();\n\n  const walletAdapter: WalletAdapter = useMemo(() => ({\n    platform: \"web\" as const,\n    isConnected: () => !!address,\n    getAddress: async () => address ?? null,\n    connect: async () => { throw new Error(\"Use RainbowKit connect button\"); },\n    disconnect: async () => {},\n    sendTransaction: async (tx) => {\n      if (!walletClient) throw new Error(\"Wallet not connected\");\n      return walletClient.sendTransaction({\n        to: tx.to,\n        data: tx.data,\n        value: tx.value,\n      });\n    },\n  }), [walletClient, address]);\n\n  return (\n    <VaultProvider\n      config={{ chainId: 42161, rpcUrl: \"https://arb1.arbitrum.io/rpc\" }}\n      walletAdapter={walletAdapter}\n    >\n      {children}\n    </VaultProvider>\n  );\n}\n```\n\n### Option B: Standalone (No Wrapper)\n\nUse `VaultReader`, `VaultActions`, and `VaultTxBuilder` directly with your own viem client — no provider needed:\n\n```typescript\nimport { createPublicClient, http } from \"viem\";\nimport { arbitrum } from \"viem/chains\";\nimport { VaultReader, VaultActions } from \"@arkonix.xyz/arkonix-vault-sdk\";\n\nconst client = createPublicClient({ chain: arbitrum, transport: http(rpcUrl) });\nconst vaultAddress = \"0x...\";\n\n// Your wallet's sendTransaction — bridge to WalletConnect, Privy, ethers, etc.\nconst sendTransaction = async (tx) => {\n  return await myWallet.sendTransaction({ to: tx.to, data: tx.data, value: tx.value });\n};\n\n// Read vault metadata (asset, share token, decimals, type, TVL)\nconst meta = await VaultReader.getMetadata(client, vaultAddress);\n\n// Read user position\nconst state = await VaultReader.getUserState(\n  client, vaultAddress, userAddress, meta.vaultType, meta.assetDecimals\n);\n\n// Deposit (handles allowance check + approve + deposit in one call)\nconst { depositHash } = await VaultActions.deposit(\n  client, sendTransaction, vaultAddress,\n  \"100\",             // amount in human-readable form\n  userAddress,\n  meta.asset,        // deposit asset address\n  meta.assetDecimals,\n  meta.vaultType,    // SYNC or ASYNC\n);\n\n// Request redeem\nconst { txHash } = await VaultActions.requestRedeem(\n  client, sendTransaction, vaultAddress,\n  \"10\",              // shares in human-readable form\n  userAddress,\n  meta.shareDecimals,\n);\n\n// After epoch executes, claim the redeem\nif (state.hasClaimableRedeem) {\n  await VaultActions.claimRedeem(\n    client, sendTransaction, vaultAddress, state.claimableRedeemShares, userAddress\n  );\n}\n```\n\n## Usage\n\n### 1. Read Vault Metadata\n\nStart with just a vault address. `useVaultMetadata` reads everything else on-chain:\n\n```tsx\nimport { useVaultMetadata } from \"@arkonix.xyz/arkonix-vault-sdk\";\n\nfunction VaultInfo({ vaultAddress }: { vaultAddress: `0x${string}` }) {\n  const { data: meta, isLoading } = useVaultMetadata(vaultAddress);\n\n  if (isLoading || !meta) return <div>Loading...</div>;\n\n  return (\n    <div>\n      <p>Asset: {meta.assetSymbol} ({meta.asset})</p>\n      <p>Share Token: {meta.shareSymbol} ({meta.share})</p>\n      <p>Type: {meta.vaultType}</p> {/* \"SYNC\" or \"ASYNC\" */}\n      <p>TVL: {formatUnits(meta.totalAssets, meta.assetDecimals)}</p>\n    </div>\n  );\n}\n```\n\n### 2. Read User Position\n\nOnce you have the metadata, read the user's on-chain state:\n\n```tsx\nimport { useVaultMetadata, useVaultUserState } from \"@arkonix.xyz/arkonix-vault-sdk\";\n\nfunction UserPosition({ vaultAddress }: { vaultAddress: `0x${string}` }) {\n  const { data: meta } = useVaultMetadata(vaultAddress);\n\n  const state = useVaultUserState(\n    vaultAddress,\n    meta?.share,          // share token address (from metadata)\n    meta?.assetDecimals,  // deposit asset decimals (from metadata)\n    meta?.vaultType,      // \"SYNC\" or \"ASYNC\" (from metadata)\n  );\n\n  if (state.isLoading) return <div>Loading...</div>;\n\n  return (\n    <div>\n      <p>Position Value: ${state.positionValueFormatted}</p>\n      {state.hasPendingRedeem && (\n        <p>Pending Redeem: {state.pendingRedeemAssetsFormatted} {meta?.assetSymbol}</p>\n      )}\n      {state.hasClaimableRedeem && (\n        <p>Claimable: {state.claimableRedeemAssetsFormatted} {meta?.assetSymbol}</p>\n      )}\n    </div>\n  );\n}\n```\n\n### 3. Deposit\n\n```tsx\nimport { useDeposit, useVaultMetadata } from \"@arkonix.xyz/arkonix-vault-sdk\";\n\nfunction DepositForm({ vaultAddress }: { vaultAddress: `0x${string}` }) {\n  const { data: meta } = useVaultMetadata(vaultAddress);\n  const [amount, setAmount] = useState(\"\");\n\n  const { deposit, txState, error, reset } = useDeposit(\n    vaultAddress,\n    meta?.asset,          // deposit asset address\n    meta?.assetDecimals,  // decimals\n    meta?.vaultType,      // SYNC: vault.deposit(), ASYNC: vault.requestDeposit()\n  );\n\n  return (\n    <div>\n      <input value={amount} onChange={(e) => setAmount(e.target.value)} placeholder=\"100\" />\n      <button onClick={() => deposit(amount)} disabled={txState !== \"idle\"}>\n        {txState === \"approving\" ? \"Approving...\" :\n         txState === \"pending\" ? \"Depositing...\" :\n         txState === \"confirming\" ? \"Confirming...\" :\n         txState === \"success\" ? \"Done!\" : \"Deposit\"}\n      </button>\n      {error && <p style={{ color: \"red\" }}>{error}</p>}\n    </div>\n  );\n}\n```\n\n### 4. Request Redeem\n\nRedemptions are async (ERC-7540): request -> wait for epoch -> claim.\n\n```tsx\nimport { useRequestRedeem, useClaimRedeem, useVaultUserState } from \"@arkonix.xyz/arkonix-vault-sdk\";\n\nfunction RedeemFlow({ vaultAddress, meta }) {\n  const state = useVaultUserState(vaultAddress, meta.share, meta.assetDecimals, meta.vaultType);\n  const { requestRedeem, txState: reqState } = useRequestRedeem(vaultAddress);\n  const { claimRedeem, txState: claimState } = useClaimRedeem(vaultAddress);\n\n  return (\n    <div>\n      {/* Step 1: Request redeem (user has shares) */}\n      {state.shareBalance > 0n && (\n        <button onClick={() => requestRedeem(\"10\", meta.shareDecimals)}>\n          Request Redeem 10 Shares\n        </button>\n      )}\n\n      {/* Step 2: Wait for epoch execution (shown when pending) */}\n      {state.hasPendingRedeem && (\n        <p>Pending redeem: ~{state.pendingRedeemAssetsFormatted} {meta.assetSymbol}</p>\n      )}\n\n      {/* Step 3: Claim (shown when claimable after epoch) */}\n      {state.hasClaimableRedeem && (\n        <button onClick={() => claimRedeem(state.claimableRedeemShares)}>\n          Claim {state.claimableRedeemAssetsFormatted} {meta.assetSymbol}\n        </button>\n      )}\n    </div>\n  );\n}\n```\n\n### 5. Cancel Redeem\n\nA single `useCancelRedeem(vaultAddress)` hook returns both `cancelRedeem()` and\n`claimCancelRedeem()`. (For async deposits, `useCancelDeposit` mirrors this.)\n\n```tsx\nimport { useCancelRedeem, useVaultUserState } from \"@arkonix.xyz/arkonix-vault-sdk\";\n\nfunction CancelRedeem({ vaultAddress, meta }) {\n  const state = useVaultUserState(vaultAddress, meta.share, meta.assetDecimals, meta.vaultType);\n  const { cancelRedeem, claimCancelRedeem } = useCancelRedeem(vaultAddress);\n\n  return (\n    <div>\n      {/* Cancel a pending redeem request */}\n      {state.hasPendingRedeem && (\n        <button onClick={cancelRedeem}>Cancel Redeem</button>\n      )}\n\n      {/* Claim shares back after the cancellation is processed by the epoch */}\n      {state.hasClaimableCancelRedeem && (\n        <button onClick={claimCancelRedeem}>Claim Cancelled Shares</button>\n      )}\n    </div>\n  );\n}\n```\n\n### 6. NAV, Returns & Share Price\n\nNAV (TVL), returns, and share price are **not on-chain** — they come from the Arkonix\nbackend's public API. Configure a base URL once, then read everything from the vault\naddress alone. This is the address-only entry point for a partner UI.\n\n```tsx\n<VaultProvider\n  config={{\n    chainId: 42161,\n    rpcUrl: \"https://arb1.arbitrum.io/rpc\",\n    arkonixAPI: { baseUrl: \"https://api.arkonix.xyz\" },\n  }}\n>\n  <VaultDashboard vaultAddress=\"0x...\" />\n</VaultProvider>;\n```\n\n```tsx\nimport {\n  useVaultFinancials,\n  useReturnHistory,\n} from \"@arkonix.xyz/arkonix-vault-sdk\";\n\nfunction VaultDashboard({ vaultAddress }: { vaultAddress: `0x${string}` }) {\n  const { data: fin, isLoading } = useVaultFinancials(vaultAddress);\n\n  // History endpoints are keyed by share-class id, which the snapshot returns.\n  const { data: history } = useReturnHistory(fin?.shareClassId, { days: 90 });\n\n  if (isLoading || !fin) return <div>Loading…</div>;\n\n  return (\n    <div>\n      <p>NAV (TVL): ${fin.tvlUsd.toLocaleString()}</p>\n      <p>Share price: {fin.sharePrice ?? \"—\"}</p>\n      {/* return* is nullable — null means \"not enough history\", which is NOT 0% */}\n      <p>Return (7d): {fin.return7d != null ? `${fin.return7d}%` : \"—\"}</p>\n      <p>Return (30d): {fin.return30d != null ? `${fin.return30d}%` : \"—\"}</p>\n      <p>Return (all-time, annualized): {fin.returnAllTime != null ? `${fin.returnAllTime}%` : \"—\"}</p>\n      {history && <SparklineChart points={history.points} />}\n    </div>\n  );\n}\n```\n\n> **Return semantics:** all `return*` fields are percentages (`12.5` = 12.5%) and\n> **nullable** — `null` means there isn't enough valid price history for that window\n> (common on young vaults). Never treat `null` as `0`.\n> - `return7d` / `return30d` / `return90d` are **cumulative** % over the window (a\n>   −7% month reads `-7`, not annualized). They can't explode.\n> - `returnAllTime` is the **only annualized** field anywhere in the API — annualized\n>   since inception for vaults with ≥30 days of history, otherwise cumulative.\n>   Bounded ~[−99, +1000].\n> - Headline `return*` are daily-cached; the `points` series is live (~15-min), so\n>   the chart's last point will NOT equal `returnAllTime`. To chart the all-time\n>   **cumulative** curve, use the per-point `cumulativeReturnSinceInceptionPct`\n>   (absolute since launch), not the window-relative `cumulativeReturnPct`.\n> - Both per-point fields are **cumulative** — there is **no per-point annualized\n>   series**. Don't try to chart annualized APY over time from `points`; the single\n>   annualized figure is `returnAllTime`.\n\nYou can also use the client standalone (no React):\n\n```typescript\nimport { ArkonixAPIClient } from \"@arkonix.xyz/arkonix-vault-sdk\";\n\nconst api = new ArkonixAPIClient({ baseUrl: \"https://api.arkonix.xyz\" });\nconst fin = await api.getVaultFinancials(\"0x...\");\nconst history = await api.getReturnHistory(fin.shareClassId, { days: 30 });\n\n// A user's transaction activity (deposits/redeems/claims + pending requests)\nconst activity = await api.getVaultTransactions(\"0x...\", { userAddress: \"0xUser\" });\n\n// Asset distribution with backend-computed weights, and the fee breakdown.\n// Both are keyed by share-class id, which the financials snapshot returns.\nconst distribution = await api.getAssetDistribution(fin.shareClassId);\nconst fees = await api.getShareClassFees(fin.shareClassId);\n```\n\n### 7. User Activity (transaction history)\n\nA user's past deposits, redeems, and claims (plus not-yet-settled requests) come from\nthe same Arkonix API — keyed by vault address + user address. `useVaultTransactions`\nstays **disabled until you pass a `userAddress`**, so it's safe to mount before a wallet\nis connected.\n\n```tsx\nimport { useAccount } from \"wagmi\";\nimport { useVaultTransactions } from \"@arkonix.xyz/arkonix-vault-sdk\";\n\n// A settled DEPOSIT/WITHDRAWAL, or an unsettled *_REQUEST still awaiting the epoch.\n// A claim settles as WITHDRAWAL.\nconst LABELS: Record<string, string> = {\n  DEPOSIT: \"Deposit\",\n  WITHDRAWAL: \"Withdrawal\",\n  DEPOSIT_REQUEST: \"Deposit requested\",\n  REDEEM_REQUEST: \"Redeem requested\",\n};\n\nfunction UserActivity({ vaultAddress }: { vaultAddress: `0x${string}` }) {\n  const { address } = useAccount();\n  const { data, isLoading } = useVaultTransactions(vaultAddress, {\n    userAddress: address,      // query is disabled until this is set\n    transactionType: \"ALL\",    // or one of DEPOSIT / WITHDRAWAL / *_REQUEST\n    limit: 50,\n  });\n\n  if (!address) return <p>Connect a wallet to see your activity.</p>;\n  if (isLoading || !data) return <p>Loading…</p>;\n  if (data.transactions.length === 0) return <p>No activity yet.</p>;\n\n  return (\n    <ul>\n      {data.transactions.map((tx, i) => (\n        <li key={tx.txHash ?? i}>\n          {LABELS[tx.type]} — {tx.amount} (@ {tx.sharePrice}/share)\n          {/* txHash/blockNumber/timestamp are null for a pending request row */}\n          {tx.timestamp && ` · ${new Date(tx.timestamp).toLocaleString()}`}\n        </li>\n      ))}\n    </ul>\n  );\n}\n```\n\n### 8. Asset Distribution & Fees\n\nThe vault's per-asset breakdown (with **backend-computed weights**) and its fee rates\nare keyed by `shareClassId` — which you already have from `useVaultFinancials`. This is\nthe two-step flow: read financials for the id, then read distribution/fees with it.\n\n```tsx\nimport {\n  useVaultFinancials,\n  useVaultAssetDistribution,\n  useShareClassFees,\n} from \"@arkonix.xyz/arkonix-vault-sdk\";\n\nfunction VaultComposition({ vaultAddress }: { vaultAddress: `0x${string}` }) {\n  // Step 1: financials → shareClassId (works from the vault address alone).\n  const { data: fin } = useVaultFinancials(vaultAddress);\n\n  // Step 2: distribution + fees, both keyed by that shareClassId.\n  const { data: dist } = useVaultAssetDistribution(fin?.shareClassId);\n  const { data: fees } = useShareClassFees(fin?.shareClassId);\n\n  if (!dist) return <p>Loading…</p>;\n\n  return (\n    <div>\n      {/* pctOfTvl is computed by the backend — don't re-derive it from valueUsd. */}\n      {dist.assets.map((a) => (\n        <p key={a.symbol}>\n          {a.symbol}: {a.pctOfTvl.toFixed(1)}% (${a.valueUsd.toLocaleString()})\n        </p>\n      ))}\n      {dist.partial && <p>⚠️ Some holdings couldn't be priced: {dist.partialReasons.join(\", \")}</p>}\n\n      {/* Returns from useVaultFinancials are ALREADY net of these fees — show them\n          only as a breakdown label. config is null when no fee manager is set. */}\n      {fees?.config && (\n        <p>\n          Net of {fees.config.managementFeePct}% mgmt + {fees.config.performanceFeePct}% perf\n        </p>\n      )}\n    </div>\n  );\n}\n```\n\n> **Note on holdings:** `useVaultAssetDistribution` is the Arkonix-native source and is\n> the recommended way to get a vault's asset breakdown. The older Centrifuge-keyed\n> `useVaultHoldings(poolId, tokenId)` / `usePoolHoldings` / `useCentrifugeHoldings` hooks\n> are **deprecated** (they return raw amounts with no weights) and slated for removal in\n> v3 — see [MIGRATION.md](./MIGRATION.md).\n\n## ERC-7540 Flow\n\nUnderstanding the request/claim pattern:\n\n```\nDEPOSIT (SYNC vault):\n  User calls deposit(assets) -> shares minted immediately\n\nDEPOSIT (ASYNC vault):\n  User calls requestDeposit(assets) -> assets locked, pending\n  Epoch executes (off-chain) -> assets become claimable\n  User calls deposit(claimableAssets) -> shares minted\n\nREDEEM (both vault types):\n  User calls requestRedeem(shares) -> shares locked, pending\n  Epoch executes (off-chain) -> shares become claimable\n  User calls redeem(claimableShares) -> assets returned\n\nCANCEL REDEEM:\n  User calls cancelRedeemRequest() -> cancellation pending\n  Epoch executes -> cancellation processed\n  User calls claimCancelRedeemRequest() -> shares returned\n```\n\n- `requestId` is always `0` (single request per user per vault)\n- Epoch execution is handled by the vault operator (Arkonix)\n- Poll `useVaultUserState` (auto-refreshes every 10s) to detect state transitions\n\n## Hooks Reference\n\n| Hook | Purpose |\n|------|---------|\n| `useVaultMetadata(vaultAddress)` | Read asset, share token, decimals, vault type from on-chain |\n| `useVaultUserState(vault, share, decimals, type)` | Read user's position, pending/claimable states |\n| `useDeposit(vault, asset, decimals, type)` | Approve + deposit (SYNC_DEPOSIT) or requestDeposit (ASYNC) |\n| `useClaimDeposit(vault)` | Claim shares after an async deposit is processed |\n| `useRequestRedeem(vault)` | Request async redeem |\n| `useClaimRedeem(vault)` | Claim completed redeem |\n| `useCancelRedeem(vault)` | `cancelRedeem()` + `claimCancelRedeem()` |\n| `useCancelDeposit(vault, type)` | `cancelDeposit()` + `claimCancelDeposit()` (ASYNC only; pass `type` to fail early on others) |\n| `useVaultFinancials(vault)` | **NAV/TVL, share price, all returns** from the Arkonix API |\n| `useReturnHistory(shareClassId, { days })` | Return headlines + per-point return series |\n| `useTvlHistory(shareClassId, { days })` | TVL (NAV) time series |\n| `useSharePriceHistory(vault)` | On-chain share-price event history |\n| `useVaultTransactions(vault, { userAddress })` | A user's deposit/redeem/claim activity + pending requests (disabled until `userAddress` is set) |\n| `useVaultAssetDistribution(shareClassId)` | Per-asset holdings with **backend-computed weights** (`pctOfTvl`) |\n| `useShareClassFees(shareClassId)` | Management + performance fee rates (returns are already net of these) |\n| `useUserAddress()` | Get connected wallet address |\n| `useVaultContext()` | Access config, walletAdapter, publicClient |\n\n## Standalone API Reference\n\n### VaultActions (orchestrated flows)\n\n| Method | Purpose |\n|--------|---------|\n| `VaultActions.deposit(client, sendTx, vault, amount, user, asset, decimals, type)` | Full deposit: allowance check + approve + deposit |\n| `VaultActions.claimDeposit(client, sendTx, vault, assets, user)` | Claim shares after an async deposit is processed |\n| `VaultActions.requestRedeem(client, sendTx, vault, shares, user, decimals)` | Request async redeem |\n| `VaultActions.claimRedeem(client, sendTx, vault, shares, user)` | Claim completed redeem |\n| `VaultActions.cancelRedeem(client, sendTx, vault, user)` | Cancel pending redeem |\n| `VaultActions.claimCancelRedeem(client, sendTx, vault, user)` | Claim shares after cancelling a redeem |\n| `VaultActions.cancelDeposit(client, sendTx, vault, user)` | Cancel pending deposit (ASYNC only) |\n| `VaultActions.claimCancelDeposit(client, sendTx, vault, user)` | Claim assets after cancelling a deposit (ASYNC only) |\n\n### VaultReader (read-only)\n\n| Method | Purpose |\n|--------|---------|\n| `VaultReader.getMetadata(client, vault)` | Read vault metadata (asset, share, decimals, type, TVL) |\n| `VaultReader.getUserState(client, vault, user, type, decimals)` | Read user position + pending/claimable states |\n| `VaultReader.getAllowance(client, token, owner, spender)` | Read ERC20 allowance |\n| `VaultReader.getBalance(client, token, account)` | Read ERC20 balance |\n| `VaultReader.getMaxDeposit(client, vault, receiver)` | Max depositable amount |\n| `VaultReader.getMaxRedeem(client, vault, owner)` | Max redeemable shares |\n| `VaultReader.convertToAssets(client, vault, shares)` | Convert shares to asset value |\n| `VaultReader.convertToShares(client, vault, assets)` | Convert assets to share value |\n\n### VaultTxBuilder (low-level calldata)\n\n| Method | Purpose |\n|--------|---------|\n| `VaultTxBuilder.buildDepositTx(vault, assets, receiver, type)` | Build deposit calldata |\n| `VaultTxBuilder.buildApproveTx(token, spender, amount)` | Build ERC20 approve calldata |\n| `VaultTxBuilder.buildRequestRedeemTx(vault, shares, controller, owner)` | Build redeem request calldata |\n| `VaultTxBuilder.buildClaimRedeemTx(vault, shares, receiver, controller)` | Build claim redeem calldata |\n| `VaultTxBuilder.buildClaimDepositTx(vault, assets, receiver)` | Build claim deposit calldata (ERC-4626 deposit) |\n| `VaultTxBuilder.buildCancelRedeemTx(vault, controller)` | Build cancel redeem calldata |\n| `VaultTxBuilder.buildClaimCancelRedeemTx(vault, receiver, controller)` | Build claim cancel redeem calldata |\n| `VaultTxBuilder.buildCancelDepositTx(vault, controller)` | Build cancel deposit calldata |\n| `VaultTxBuilder.buildClaimCancelDepositTx(vault, receiver, controller)` | Build claim cancel deposit calldata |\n\n## Types\n\n```typescript\ninterface VaultMetadata {\n  asset: Address;           // Deposit asset address (e.g. USDC)\n  share: Address;           // Share token address\n  assetDecimals: number;    // e.g. 6 for USDC\n  shareDecimals: number;    // e.g. 18\n  assetSymbol: string;      // e.g. \"USDC\"\n  shareSymbol: string;\n  poolId: bigint;\n  vaultKind: number;        // on-chain: 0 → ASYNC, otherwise SYNC_DEPOSIT_ASYNC_REDEEM\n  vaultType: VaultType;\n  totalAssets: bigint;\n}\n\ninterface VaultUserState {\n  isLoading: boolean;\n\n  // Position\n  shareBalance: bigint;\n  positionValueFormatted: string;\n\n  // Deposit flow (ASYNC vaults only)\n  hasPendingDeposit: boolean;\n  pendingDepositAssets: bigint;\n  pendingDepositFormatted: string;\n  hasClaimableDeposit: boolean;\n  claimableDepositAssets: bigint;\n  claimableDepositFormatted: string;\n\n  // Redeem flow (both vault types)\n  hasPendingRedeem: boolean;\n  pendingRedeemShares: bigint;\n  pendingRedeemAssetsFormatted: string;\n  hasClaimableRedeem: boolean;\n  claimableRedeemShares: bigint;\n  claimableRedeemAssetsFormatted: string;\n\n  // Cancel redeem\n  hasPendingCancelRedeem: boolean;\n  claimableCancelRedeemShares: bigint;\n  hasClaimableCancelRedeem: boolean;\n\n  // Cancel deposit (ASYNC vaults only)\n  hasPendingCancelDeposit: boolean;\n  claimableCancelDepositAssets: bigint;\n  claimableCancelDepositFormatted: string;\n  hasClaimableCancelDeposit: boolean;\n}\n\ntype TxState = 'idle' | 'approving' | 'pending' | 'confirming' | 'success' | 'error';\n\n// 'ASYNC': requestDeposit + requestRedeem are both async.\n// 'SYNC_DEPOSIT_ASYNC_REDEEM': deposit is synchronous (ERC-4626), redeem is async.\ntype VaultType = 'ASYNC' | 'SYNC_DEPOSIT_ASYNC_REDEEM';\n```\n\n### Transactions, Asset Distribution & Fees\n\n```typescript\n// A user's activity is either a settled DEPOSIT/WITHDRAWAL, or an unsettled\n// *_REQUEST still awaiting the epoch (a claim settles as WITHDRAWAL).\ntype VaultTransactionType =\n  | 'DEPOSIT'\n  | 'WITHDRAWAL'\n  | 'DEPOSIT_REQUEST'\n  | 'REDEEM_REQUEST';\n\ninterface VaultTransaction {\n  type: VaultTransactionType;\n  userAddress: string;\n  amount: number;           // asset amount, human-readable; 0 where not applicable\n  shares: number;           // share amount, human-readable; 0 where not applicable\n  sharePrice: number;       // NAV per share at the time of the transaction\n  txHash: string | null;    // null for a request row still awaiting its tx\n  blockNumber: number | null;\n  timestamp: string | null; // ISO-8601\n}\n\ninterface VaultTransactions {\n  vaultAddress: string;\n  totalTransactions: number; // may exceed transactions.length when paginated\n  transactions: VaultTransaction[];\n}\n\ninterface VaultTransactionsQueryParams {\n  userAddress?: string;                          // restrict to one user (controller)\n  transactionType?: VaultTransactionType | 'ALL'; // default 'ALL'\n  limit?: number;\n  offset?: number;\n}\n\ninterface VaultHoldingAsset {\n  symbol: string;\n  amountHuman: number; // already decimal-adjusted\n  valueUsd: number;\n  pctOfTvl: number;    // backend-computed; don't re-derive from valueUsd / totalValueUsd\n}\n\ninterface VaultAssetDistribution {\n  shareClassId: string;\n  symbol: string | null;\n  name: string | null;\n  totalValueUsd: number;\n  assets: VaultHoldingAsset[];\n  partial: boolean;         // true when some holdings could not be priced/included\n  partialReasons: string[];\n}\n\ninterface ShareClassFeeConfig {\n  managementFeeBps: number;   // 100 bps = 1%\n  performanceFeeBps: number;\n  managementFeePct: string;   // e.g. \"1.00\"\n  performanceFeePct: string;  // e.g. \"10.00\"\n}\n\ninterface ShareClassFees {\n  shareClassId: string;\n  symbol: string | null;\n  feeRecipient: string | null;\n  isInitialized: boolean;      // false when the fee manager isn't initialized yet\n  config: ShareClassFeeConfig | null; // null = uninitialized, not \"no fees\"\n}\n```\n\n> `useVaultFinancials` returns are already **net of** the fees in `ShareClassFees` —\n> use the fee types only to display the breakdown, not to re-derive returns.\n\n## Centrifuge API Integration\n\nThe SDK includes full integration with the Centrifuge GraphQL API for querying vault holdings and portfolio data.\n\n### Configuration\n\nAdd Centrifuge API configuration to your VaultProvider:\n\n```tsx\n<VaultProvider\n  config={{\n    chainId: 42161,\n    rpcUrl: \"https://arb1.arbitrum.io/rpc\",\n    // Optional: Configure Centrifuge API\n    centrifugeAPI: {\n      apiUrl: \"https://api.centrifuge.io\", // Default\n      timeout: 30000, // Optional timeout in ms\n    }\n  }}\n>\n  <YourApp />\n</VaultProvider>\n```\n\n### Query Holdings\n\nGet vault holdings filtered by pool ID and token ID:\n\n```tsx\nimport { useVaultHoldings, usePoolHoldings } from \"@arkonix.xyz/arkonix-vault-sdk\";\n\nfunction VaultHoldings() {\n  // Get holdings for a specific vault (pool + token)\n  const { data: vaultHoldings, isLoading } = useVaultHoldings(\n    \"pool-123\", \n    \"token-456\"\n  );\n\n  // Get all holdings for a pool\n  const { data: poolHoldings } = usePoolHoldings(\"pool-123\");\n\n  // Advanced query with filters\n  const { data: customHoldings } = useCentrifugeHoldings({\n    poolId: \"pool-123\",\n    tokenId: \"token-456\",\n    limit: 100,\n    orderBy: \"assetAmount\",\n    orderDirection: \"desc\",\n  });\n\n  return (\n    <div>\n      {vaultHoldings?.map(holding => (\n        <div key={holding.id}>\n          <p>Asset: {holding.asset?.symbol}</p>\n          <p>Amount: {holding.assetAmount}</p>\n          <p>Price: {holding.assetPrice}</p>\n        </div>\n      ))}\n    </div>\n  );\n}\n```\n\n### Query Vaults\n\nFind vaults across the Centrifuge ecosystem:\n\n```tsx\nimport { useActiveVaults, usePoolVaults } from \"@arkonix.xyz/arkonix-vault-sdk\";\n\nfunction VaultList() {\n  // Get all active vaults\n  const { data: activeVaults } = useActiveVaults();\n\n  // Get vaults for a specific pool\n  const { data: poolVaults } = usePoolVaults(\"pool-123\");\n\n  // Custom vault query\n  const { data: customVaults } = useCentrifugeVaults({\n    poolId: \"pool-123\",\n    tokenId: \"token-456\",\n    isActive: true,\n    assetAddress: \"0x...\", // Filter by deposit asset\n  });\n\n  return (\n    <div>\n      {activeVaults?.map(vault => (\n        <div key={vault.id}>\n          <p>Vault: {vault.id}</p>\n          <p>Pool: {vault.poolId}</p>\n          <p>Token: {vault.tokenId}</p>\n          <p>Network: {vault.blockchain?.network}</p>\n        </div>\n      ))}\n    </div>\n  );\n}\n```\n\n### Standalone API Client\n\nUse the CentrifugeAPIClient directly without React:\n\n```typescript\nimport { CentrifugeAPIClient } from \"@arkonix.xyz/arkonix-vault-sdk\";\n\nconst client = new CentrifugeAPIClient({\n  apiUrl: \"https://api.centrifuge.io\",\n  timeout: 30000,\n});\n\n// Query holdings\nconst holdings = await client.getHoldings({\n  poolId: \"pool-123\",\n  tokenId: \"token-456\",\n  limit: 100,\n});\n\n// Get vault holdings\nconst vaultHoldings = await client.getVaultHoldings(\"pool-123\", \"token-456\");\n\n// Get pool holdings\nconst poolHoldings = await client.getPoolHoldings(\"pool-123\");\n\n// Query vaults\nconst vaults = await client.getVaults({\n  isActive: true,\n  limit: 50,\n});\n```\n\n### Testing the API Integration\n\nTest the Centrifuge API directly:\n\n```bash\n# Install tsx if needed\nnpm install -g tsx\n\n# Create a test file: test-api.ts\ncat > test-api.ts << 'EOF'\nimport { CentrifugeAPIClient } from \"@arkonix.xyz/arkonix-vault-sdk\";\n\nasync function test() {\n  const client = new CentrifugeAPIClient();\n  \n  // Test fetching holdings\n  const holdings = await client.getHoldings({ limit: 5 });\n  console.log(\"Holdings:\", holdings);\n  \n  // Test fetching vaults\n  const vaults = await client.getVaults({ isActive: true, limit: 5 });\n  console.log(\"Vaults:\", vaults);\n  \n  // If we have a vault, test vault-specific queries\n  if (vaults.length > 0) {\n    const vault = vaults[0];\n    const vaultHoldings = await client.getVaultHoldings(\n      vault.poolId, \n      vault.tokenId\n    );\n    console.log(\"Vault holdings:\", vaultHoldings);\n  }\n}\n\ntest().catch(console.error);\nEOF\n\n# Run the test\ntsx test-api.ts\n```\n\n### Available Query Parameters\n\n**Holdings Query:**\n- `poolId` - Filter by pool ID\n- `tokenId` - Filter by token ID (share class)\n- `centrifugeId` - Filter by Centrifuge chain ID\n- `assetId` - Filter by asset ID\n- `assetAddress` - Filter by asset contract address\n- `limit` - Max results (default 100, max 1000)\n- `orderBy` - Sort field\n- `orderDirection` - 'asc' or 'desc'\n\n**Vaults Query:**\n- `poolId` - Filter by pool ID\n- `tokenId` - Filter by token ID\n- `centrifugeId` - Filter by Centrifuge chain ID\n- `id` - Filter by vault contract address\n- `isActive` - Filter by active status\n- `assetAddress` - Filter by deposit asset\n- `limit` - Max results (default 100, max 1000)\n- `orderBy` - Sort field\n- `orderDirection` - 'asc' or 'desc'\n\n## Development\n\n```bash\npnpm install\npnpm build        # Build CJS + ESM + types\npnpm test         # Run tests\npnpm type-check   # TypeScript check\npnpm dev          # Watch mode\n```\n\n## License\n\nLicensed under the [Business Source License 1.1](./LICENSE) (BUSL-1.1).\n\n- **Non-production use** (evaluation, testing, development): Free\n- **Production use**: Requires a commercial license — contact [info@arkonix.xyz](mailto:info@arkonix.xyz)\n- **Change Date**: 2030-02-18 — converts to Apache 2.0 after this date\n","readmeFilename":"README.md"}