{"_id":"@morpho-org/viem-dlc","_rev":"18-b56ab930cc1eb95a63146a5c18f1c0a6","name":"@morpho-org/viem-dlc","dist-tags":{"latest":"0.0.19"},"versions":{"0.0.2":{"name":"@morpho-org/viem-dlc","version":"0.0.2","keywords":["viem","cache","eth_getLogs"],"author":{"name":"Morpho Association","email":"contact@morpho.org"},"license":"MIT","_id":"@morpho-org/viem-dlc@0.0.2","maintainers":[{"name":"gabin53","email":"gabin@morpho.xyz"},{"name":"julien-devatom","email":"julien.thomas84@gmail.com"},{"name":"mathisgd","email":"mathis@morpho.xyz"},{"name":"merlin-egalite","email":"merlin@morpho.xyz"},{"name":"rubilmax","email":"rmilon@gmail.com"},{"name":"hshively.morpho","email":"hayden@morpho.xyz"}],"contributors":[{"name":"Hayden Shively","email":"hayden@morpho.xyz"}],"homepage":"https://github.com/morpho-org/viem-dlc","bugs":{"url":"https://github.com/morpho-org/viem-dlc/issues"},"dist":{"shasum":"b60b777e6a3e5328347090078c1cca876c6d3782","tarball":"https://registry.npmjs.org/@morpho-org/viem-dlc/-/viem-dlc-0.0.2.tgz","fileCount":147,"integrity":"sha512-BjC0YKWvk0r6jJLvb36HSBnobzTwYskn5xZlEkowJS+MKe0WPwbEO/LjYTjkE+dHq3ErUnEs5i/gy0AtusOi3g==","signatures":[{"sig":"MEQCIDm3BeJECQgA5rt5zrX9PJqO/u3X1/fWAVkUQGIw2fGaAiBZHg58P+tIEIIhdYtSg+1VUaQ0SqWzRKau5IZsAB2LVA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":195003},"type":"module","_from":"file:package.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.js","default":"./dist/utils/index.js"},"./stores":{"types":"./dist/stores/index.d.ts","import":"./dist/stores/index.js","default":"./dist/stores/index.js"},"./actions":{"types":"./dist/actions/index.d.ts","import":"./dist/actions/index.js","default":"./dist/actions/index.js"},"./transports":{"types":"./dist/transports/index.d.ts","import":"./dist/transports/index.js","default":"./dist/transports/index.js"},"./stores/upstash":{"types":"./dist/stores/upstash.d.ts","import":"./dist/stores/upstash.js","default":"./dist/stores/upstash.js"},"./stores/compressed":{"types":"./dist/stores/compressed.d.ts","import":"./dist/stores/compressed.js","default":"./dist/stores/compressed.js"}},"scripts":{"lint":"pnpm exec biome lint --write","build":"tsc","format":"pnpm exec biome format --write","test:unit":"vitest run","typecheck":"tsc --project tsconfig.json --noEmit --incremental"},"_npmUser":{"name":"hshively.morpho","email":"hayden@morpho.xyz"},"_resolved":"/home/runner/work/viem-dlc/viem-dlc/package.tgz","_integrity":"sha512-BjC0YKWvk0r6jJLvb36HSBnobzTwYskn5xZlEkowJS+MKe0WPwbEO/LjYTjkE+dHq3ErUnEs5i/gy0AtusOi3g==","repository":{"url":"git+https://github.com/morpho-org/viem-dlc.git","type":"git"},"_npmVersion":"11.9.0","description":"A collection of flexible viem extensions with a focus on intelligent caching.","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"devDependencies":{"viem":"2.45.1","vitest":"4.0.18","typescript":"5.9.3","@types/node":"25.2.0","@biomejs/biome":"2.3.13","@upstash/redis":"1.36.1","@tsconfig/node24":"24.0.4","@tsconfig/node-ts":"23.6.2"},"peerDependencies":{"viem":"^2.0.0","@upstash/redis":"^1.0.0"},"peerDependenciesMeta":{"@upstash/redis":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/viem-dlc_0.0.2_1773327422850_0.7218639702872458","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@morpho-org/viem-dlc","version":"0.0.3","keywords":["viem","cache","eth_getLogs"],"author":{"name":"Morpho Association","email":"contact@morpho.org"},"license":"MIT","_id":"@morpho-org/viem-dlc@0.0.3","maintainers":[{"name":"gabin53","email":"gabin@morpho.xyz"},{"name":"julien-devatom","email":"julien.thomas84@gmail.com"},{"name":"mathisgd","email":"mathis@morpho.xyz"},{"name":"merlin-egalite","email":"merlin@morpho.xyz"},{"name":"rubilmax","email":"rmilon@gmail.com"},{"name":"hshively.morpho","email":"hayden@morpho.xyz"}],"contributors":[{"name":"Hayden Shively","email":"hayden@morpho.xyz"}],"homepage":"https://github.com/morpho-org/viem-dlc","bugs":{"url":"https://github.com/morpho-org/viem-dlc/issues"},"dist":{"shasum":"530baf27369ed750b8466005b786b8e8a66426e3","tarball":"https://registry.npmjs.org/@morpho-org/viem-dlc/-/viem-dlc-0.0.3.tgz","fileCount":227,"integrity":"sha512-DnveYZXrWmhsmY9Uh5XU5oy+ntLhUxx7NXsD1PNKyzZ9JF2ifC01NDD/0Yk1YHcWAQYUiJaKvkug++VuRLaIFw==","signatures":[{"sig":"MEQCIBwFDDBDp6oPTzZQ6EXPTdmMF0KEdXfnA8YP5MDrTMkFAiASvw7pGt2fyifCC20eeYDv30lIsxsOyKtz5f3YgngZ6w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@morpho-org%2fviem-dlc@0.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":382839},"type":"module","_from":"file:package.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.js","default":"./dist/utils/index.js"},"./stores":{"types":"./dist/stores/index.d.ts","import":"./dist/stores/index.js","default":"./dist/stores/index.js"},"./actions":{"types":"./dist/actions/index.d.ts","import":"./dist/actions/index.js","default":"./dist/actions/index.js"},"./transports":{"types":"./dist/transports/index.d.ts","import":"./dist/transports/index.js","default":"./dist/transports/index.js"},"./stores/upstash":{"types":"./dist/stores/upstash.d.ts","import":"./dist/stores/upstash.js","default":"./dist/stores/upstash.js"},"./transports/cache":{"types":"./dist/transports/cache/index.d.ts","import":"./dist/transports/cache/index.js","default":"./dist/transports/cache/index.js"}},"scripts":{"lint":"pnpm exec biome lint --write","test":"vitest run","build":"tsc","format":"pnpm exec biome format --write","pretest":"pnpm build","typecheck":"tsc --project tsconfig.json --noEmit --incremental"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:13bbd941-7f28-40a7-adc5-78cf47c2e9c3"}},"_resolved":"/home/runner/work/viem-dlc/viem-dlc/package.tgz","_integrity":"sha512-DnveYZXrWmhsmY9Uh5XU5oy+ntLhUxx7NXsD1PNKyzZ9JF2ifC01NDD/0Yk1YHcWAQYUiJaKvkug++VuRLaIFw==","repository":{"url":"git+https://github.com/morpho-org/viem-dlc.git","type":"git"},"_npmVersion":"11.9.0","description":"A collection of flexible viem extensions with a focus on intelligent caching.","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","dependencies":{"valibot":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.21.0","viem":"2.45.1","vitest":"4.0.18","typescript":"5.9.3","@types/node":"25.2.0","@biomejs/biome":"2.3.13","@upstash/redis":"1.36.1","@tsconfig/node24":"24.0.4","@tsconfig/node-ts":"23.6.2"},"peerDependencies":{"viem":"^2.0.0","@upstash/redis":"^1.0.0"},"peerDependenciesMeta":{"@upstash/redis":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/viem-dlc_0.0.3_1774978583649_0.6791969539592697","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@morpho-org/viem-dlc","version":"0.0.4","keywords":["viem","cache","eth_getLogs"],"author":{"name":"Morpho Association","email":"contact@morpho.org"},"license":"MIT","_id":"@morpho-org/viem-dlc@0.0.4","maintainers":[{"name":"gabin53","email":"gabin@morpho.xyz"},{"name":"julien-devatom","email":"julien.thomas84@gmail.com"},{"name":"mathisgd","email":"mathis@morpho.xyz"},{"name":"merlin-egalite","email":"merlin@morpho.xyz"},{"name":"rubilmax","email":"rmilon@gmail.com"},{"name":"hshively.morpho","email":"hayden@morpho.xyz"}],"contributors":[{"name":"Hayden Shively","email":"hayden@morpho.xyz"}],"homepage":"https://github.com/morpho-org/viem-dlc","bugs":{"url":"https://github.com/morpho-org/viem-dlc/issues"},"dist":{"shasum":"711dbc8f53229ed3f1a4bd95be685fb37c8c5be6","tarball":"https://registry.npmjs.org/@morpho-org/viem-dlc/-/viem-dlc-0.0.4.tgz","fileCount":227,"integrity":"sha512-tbz39t+XCYL1/PmVZDnvj9nX0YboHuIYszek4gVnoMHAioqh0+64q0HmprOCskRyhCAeIdkVBRCXnq9fCA6uQQ==","signatures":[{"sig":"MEQCIFERL+Yu54hnoIXcYsDwM0a3fumXvGRUDh9zXMujt8ReAiBRrytbANRT5xAE13KC/GbVHNUmcHeJ/j3z1j2pojTJig==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@morpho-org%2fviem-dlc@0.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":383530},"type":"module","_from":"file:package.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.js","default":"./dist/utils/index.js"},"./stores":{"types":"./dist/stores/index.d.ts","import":"./dist/stores/index.js","default":"./dist/stores/index.js"},"./actions":{"types":"./dist/actions/index.d.ts","import":"./dist/actions/index.js","default":"./dist/actions/index.js"},"./transports":{"types":"./dist/transports/index.d.ts","import":"./dist/transports/index.js","default":"./dist/transports/index.js"},"./stores/upstash":{"types":"./dist/stores/upstash.d.ts","import":"./dist/stores/upstash.js","default":"./dist/stores/upstash.js"},"./transports/cache":{"types":"./dist/transports/cache/index.d.ts","import":"./dist/transports/cache/index.js","default":"./dist/transports/cache/index.js"}},"scripts":{"loc":"tokei src","lint":"pnpm exec biome lint --write","test":"vitest run","build":"tsc","format":"pnpm exec biome format --write","pretest":"pnpm build","typecheck":"tsc --project tsconfig.json --noEmit --incremental"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:13bbd941-7f28-40a7-adc5-78cf47c2e9c3"}},"_resolved":"/home/runner/work/viem-dlc/viem-dlc/package.tgz","_integrity":"sha512-tbz39t+XCYL1/PmVZDnvj9nX0YboHuIYszek4gVnoMHAioqh0+64q0HmprOCskRyhCAeIdkVBRCXnq9fCA6uQQ==","repository":{"url":"git+https://github.com/morpho-org/viem-dlc.git","type":"git"},"_npmVersion":"11.9.0","description":"A collection of flexible viem extensions with a focus on intelligent caching.","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","dependencies":{"valibot":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.21.0","viem":"2.45.1","vitest":"4.0.18","typescript":"5.9.3","@types/node":"25.2.0","@biomejs/biome":"2.3.13","@upstash/redis":"1.36.1","@tsconfig/node24":"24.0.4","@tsconfig/node-ts":"23.6.2"},"peerDependencies":{"viem":"^2.0.0","@upstash/redis":"^1.0.0"},"peerDependenciesMeta":{"@upstash/redis":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/viem-dlc_0.0.4_1774987957297_0.022039039475463262","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@morpho-org/viem-dlc","version":"0.0.5","keywords":["viem","cache","eth_getLogs"],"author":{"name":"Morpho Association","email":"contact@morpho.org"},"license":"MIT","_id":"@morpho-org/viem-dlc@0.0.5","maintainers":[{"name":"hshively.morpho","email":"hayden@morpho.xyz"}],"contributors":[{"name":"Hayden Shively","email":"hayden@morpho.xyz"}],"homepage":"https://github.com/morpho-org/viem-dlc","bugs":{"url":"https://github.com/morpho-org/viem-dlc/issues"},"dist":{"shasum":"f19587b15583d0465103847c5221428c9679c0c6","tarball":"https://registry.npmjs.org/@morpho-org/viem-dlc/-/viem-dlc-0.0.5.tgz","fileCount":235,"integrity":"sha512-8rsf+9SBOvqeJ6RfiGrjabs+lyDmg+Coe09tlGjx3crzva9Qf2FFPh6gOnWmEDW1b23c0B37Tl1bHTWrbbCGGg==","signatures":[{"sig":"MEUCIQCDTb5Vqj16CiZHqMp7CZa2PUsSevarW+hK0zh/AHscZgIgN6XIZBvNapq9Rml3oWZhcjKcQGnOxKgAq3PA0PLerck=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@morpho-org%2fviem-dlc@0.0.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":378005},"type":"module","_from":"file:package.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.js","default":"./dist/utils/index.js"},"./stores":{"types":"./dist/stores/index.d.ts","import":"./dist/stores/index.js","default":"./dist/stores/index.js"},"./actions":{"types":"./dist/actions/index.d.ts","import":"./dist/actions/index.js","default":"./dist/actions/index.js"},"./transports":{"types":"./dist/transports/index.d.ts","import":"./dist/transports/index.js","default":"./dist/transports/index.js"},"./stores/upstash":{"types":"./dist/stores/upstash.d.ts","import":"./dist/stores/upstash.js","default":"./dist/stores/upstash.js"},"./transports/cache":{"types":"./dist/transports/cache/index.d.ts","import":"./dist/transports/cache/index.js","default":"./dist/transports/cache/index.js"}},"scripts":{"loc":"tokei src","lint":"pnpm exec biome lint --write","test":"vitest run","build":"tsc","format":"pnpm exec biome format --write","pretest":"pnpm build","typecheck":"tsc --project tsconfig.json --noEmit --incremental"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:13bbd941-7f28-40a7-adc5-78cf47c2e9c3"}},"_resolved":"/home/runner/work/viem-dlc/viem-dlc/package.tgz","_integrity":"sha512-8rsf+9SBOvqeJ6RfiGrjabs+lyDmg+Coe09tlGjx3crzva9Qf2FFPh6gOnWmEDW1b23c0B37Tl1bHTWrbbCGGg==","repository":{"url":"git+https://github.com/morpho-org/viem-dlc.git","type":"git"},"_npmVersion":"11.11.0","description":"A collection of flexible viem extensions with a focus on intelligent caching.","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","dependencies":{"valibot":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.21.0","viem":"2.45.1","vitest":"4.0.18","typescript":"5.9.3","@types/node":"25.2.0","@biomejs/biome":"2.3.13","@upstash/redis":"1.36.1","@tsconfig/node24":"24.0.4","@tsconfig/node-ts":"23.6.2"},"peerDependencies":{"viem":"^2.0.0","@upstash/redis":"^1.0.0"},"peerDependenciesMeta":{"@upstash/redis":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/viem-dlc_0.0.5_1775597095301_0.3032291622664689","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"@morpho-org/viem-dlc","version":"0.0.6","keywords":["viem","cache","eth_getLogs"],"author":{"name":"Morpho Association","email":"contact@morpho.org"},"license":"MIT","_id":"@morpho-org/viem-dlc@0.0.6","maintainers":[{"name":"hshively.morpho","email":"hayden@morpho.xyz"}],"contributors":[{"name":"Hayden Shively","email":"hayden@morpho.xyz"}],"homepage":"https://github.com/morpho-org/viem-dlc","bugs":{"url":"https://github.com/morpho-org/viem-dlc/issues"},"dist":{"shasum":"4fa53e0de5636377ae68b2cf62bd159fa4af4c1a","tarball":"https://registry.npmjs.org/@morpho-org/viem-dlc/-/viem-dlc-0.0.6.tgz","fileCount":247,"integrity":"sha512-Yjvws8wfVs7T1r6w46PV9TP888msCi+sJDWKHpxGmmqHdx9M932HWst+B+uTzjdsdOHofw+8m8z+IlHrWNIcoA==","signatures":[{"sig":"MEQCIBszCVXWEHBoHbeOX1Uos1e9+UgHV+w6B2W4xRaa692JAiB5PwuPp2rqFH1vekB78nysrdncSJmYAT5XhYT1EE0JCA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@morpho-org%2fviem-dlc@0.0.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":422753},"type":"module","_from":"file:package.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.js","default":"./dist/utils/index.js"},"./stores":{"types":"./dist/stores/index.d.ts","import":"./dist/stores/index.js","default":"./dist/stores/index.js"},"./actions":{"types":"./dist/actions/index.d.ts","import":"./dist/actions/index.js","default":"./dist/actions/index.js"},"./transports":{"types":"./dist/transports/index.d.ts","import":"./dist/transports/index.js","default":"./dist/transports/index.js"},"./stores/vercel":{"types":"./dist/stores/vercel.d.ts","import":"./dist/stores/vercel.js","default":"./dist/stores/vercel.js"},"./stores/upstash":{"types":"./dist/stores/upstash.d.ts","import":"./dist/stores/upstash.js","default":"./dist/stores/upstash.js"},"./transports/cache":{"types":"./dist/transports/cache/index.d.ts","import":"./dist/transports/cache/index.js","default":"./dist/transports/cache/index.js"}},"scripts":{"loc":"tokei src","lint":"pnpm exec biome lint --write","test":"vitest run","build":"tsc","format":"pnpm exec biome format --write","pretest":"pnpm build","typecheck":"tsc --project tsconfig.json --noEmit --incremental"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:13bbd941-7f28-40a7-adc5-78cf47c2e9c3"}},"_resolved":"/home/runner/work/viem-dlc/viem-dlc/package.tgz","_integrity":"sha512-Yjvws8wfVs7T1r6w46PV9TP888msCi+sJDWKHpxGmmqHdx9M932HWst+B+uTzjdsdOHofw+8m8z+IlHrWNIcoA==","repository":{"url":"git+https://github.com/morpho-org/viem-dlc.git","type":"git"},"_npmVersion":"11.11.0","description":"A collection of flexible viem extensions with a focus on intelligent caching.","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","dependencies":{"valibot":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.21.0","viem":"2.45.1","vitest":"4.0.18","typescript":"5.9.3","@types/node":"25.2.0","@vercel/blob":"^2.3.3","@biomejs/biome":"2.3.13","@upstash/redis":"1.36.1","@tsconfig/node24":"24.0.4","@tsconfig/node-ts":"23.6.2"},"peerDependencies":{"viem":"^2.0.0","@vercel/blob":"^2.3.0","@upstash/redis":"^1.0.0"},"peerDependenciesMeta":{"@vercel/blob":{"optional":true},"@upstash/redis":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/viem-dlc_0.0.6_1776120757400_0.9054743076361007","host":"s3://npm-registry-packages-npm-production"}},"0.0.7":{"name":"@morpho-org/viem-dlc","version":"0.0.7","keywords":["viem","cache","eth_getLogs"],"author":{"name":"Morpho Association","email":"contact@morpho.org"},"license":"MIT","_id":"@morpho-org/viem-dlc@0.0.7","maintainers":[{"name":"hshively.morpho","email":"hayden@morpho.xyz"}],"contributors":[{"name":"Hayden Shively","email":"hayden@morpho.xyz"}],"homepage":"https://github.com/morpho-org/viem-dlc","bugs":{"url":"https://github.com/morpho-org/viem-dlc/issues"},"dist":{"shasum":"c323380e129a80abcab8d053a170c7d95018204e","tarball":"https://registry.npmjs.org/@morpho-org/viem-dlc/-/viem-dlc-0.0.7.tgz","fileCount":251,"integrity":"sha512-AcH2GfMrhUsJY7q6AYSuMe7QIBUH01kb6eLXQqaRJFfuZLxBi4RcIzH4uqjXoyFq0R7qXh5x3q03HJgX05ZtFQ==","signatures":[{"sig":"MEQCID7zqFuDzXCgcOF9QKXDm9WTlmhJZMZj0mGvfzmiahBoAiAyYvf7Qh0OHjRvUwEIcsnuzFlmAaxLonawdA46WeUuKg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@morpho-org%2fviem-dlc@0.0.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":437490},"type":"module","_from":"file:package.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.js","default":"./dist/utils/index.js"},"./stores":{"types":"./dist/stores/index.d.ts","import":"./dist/stores/index.js","default":"./dist/stores/index.js"},"./actions":{"types":"./dist/actions/index.d.ts","import":"./dist/actions/index.js","default":"./dist/actions/index.js"},"./transports":{"types":"./dist/transports/index.d.ts","import":"./dist/transports/index.js","default":"./dist/transports/index.js"},"./stores/vercel":{"types":"./dist/stores/vercel.d.ts","import":"./dist/stores/vercel.js","default":"./dist/stores/vercel.js"},"./stores/upstash":{"types":"./dist/stores/upstash.d.ts","import":"./dist/stores/upstash.js","default":"./dist/stores/upstash.js"},"./transports/cache":{"types":"./dist/transports/cache/index.d.ts","import":"./dist/transports/cache/index.js","default":"./dist/transports/cache/index.js"}},"scripts":{"loc":"tokei src","lint":"pnpm exec biome lint --write","test":"vitest run","build":"tsc","format":"pnpm exec biome format --write","pretest":"pnpm build","typecheck":"tsc --project tsconfig.json --noEmit --incremental"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:13bbd941-7f28-40a7-adc5-78cf47c2e9c3"}},"_resolved":"/home/runner/work/viem-dlc/viem-dlc/package.tgz","_integrity":"sha512-AcH2GfMrhUsJY7q6AYSuMe7QIBUH01kb6eLXQqaRJFfuZLxBi4RcIzH4uqjXoyFq0R7qXh5x3q03HJgX05ZtFQ==","repository":{"url":"git+https://github.com/morpho-org/viem-dlc.git","type":"git"},"_npmVersion":"11.11.0","description":"A collection of flexible viem extensions with a focus on intelligent caching.","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","dependencies":{"valibot":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.21.0","viem":"2.45.1","vitest":"4.0.18","typescript":"5.9.3","@types/node":"25.2.0","@vercel/blob":"^2.3.3","@biomejs/biome":"2.3.13","@upstash/redis":"1.36.1","@tsconfig/node24":"24.0.4","@tsconfig/node-ts":"23.6.2"},"peerDependencies":{"viem":"^2.0.0","@vercel/blob":"^2.3.0","@upstash/redis":"^1.0.0"},"peerDependenciesMeta":{"@vercel/blob":{"optional":true},"@upstash/redis":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/viem-dlc_0.0.7_1776364365299_0.906140397846861","host":"s3://npm-registry-packages-npm-production"}},"0.0.8":{"name":"@morpho-org/viem-dlc","version":"0.0.8","keywords":["viem","cache","eth_getLogs"],"author":{"name":"Morpho Association","email":"contact@morpho.org"},"license":"MIT","_id":"@morpho-org/viem-dlc@0.0.8","maintainers":[{"name":"hshively.morpho","email":"hayden@morpho.xyz"}],"contributors":[{"name":"Hayden Shively","email":"hayden@morpho.xyz"}],"homepage":"https://github.com/morpho-org/viem-dlc","bugs":{"url":"https://github.com/morpho-org/viem-dlc/issues"},"dist":{"shasum":"d2c84acb86e43847a285925d8e563a41f849d538","tarball":"https://registry.npmjs.org/@morpho-org/viem-dlc/-/viem-dlc-0.0.8.tgz","fileCount":259,"integrity":"sha512-QnwMwZiJnqzcjYneab5UEdu1lvIlLtfaTVuckPqxecLWILMjWu+jPhb3fvs988M/Kt7taQtHXm3wxA2TF7Iehw==","signatures":[{"sig":"MEYCIQCxSiYF6PdcgqKcKLzfpNh/yYnJfIphnCQt5B/Laf58IAIhAKWgUjY2pXVPTnT5HH32jryz2FdzwfzJdqjQEk4wVPsa","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@morpho-org%2fviem-dlc@0.0.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":479387},"type":"module","_from":"file:package.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.js","default":"./dist/utils/index.js"},"./stores":{"types":"./dist/stores/index.d.ts","import":"./dist/stores/index.js","default":"./dist/stores/index.js"},"./actions":{"types":"./dist/actions/index.d.ts","import":"./dist/actions/index.js","default":"./dist/actions/index.js"},"./transports":{"types":"./dist/transports/index.d.ts","import":"./dist/transports/index.js","default":"./dist/transports/index.js"},"./stores/vercel":{"types":"./dist/stores/vercel.d.ts","import":"./dist/stores/vercel.js","default":"./dist/stores/vercel.js"},"./stores/upstash":{"types":"./dist/stores/upstash.d.ts","import":"./dist/stores/upstash.js","default":"./dist/stores/upstash.js"},"./transports/cache":{"types":"./dist/transports/cache/index.d.ts","import":"./dist/transports/cache/index.js","default":"./dist/transports/cache/index.js"}},"scripts":{"loc":"tokei src","lint":"pnpm exec biome lint --write","test":"vitest run","build":"tsc","format":"pnpm exec biome format --write","pretest":"pnpm build","typecheck":"tsc --project tsconfig.json --noEmit --incremental","build:RevertEnvelope":"solc --optimize --optimize-runs=1 --strict-assembly --bin src/utils/deployless/RevertEnvelope.yul | awk '/Binary representation:/{getline;n=length($0)/2;sub(/62bbbbbb/,sprintf(\"62%06x\",n));print \"0x\"$0}'","build:ReturnEnvelopeCompressed":"solc --optimize --optimize-runs=1 --strict-assembly --bin src/utils/deployless/ReturnEnvelopeCompressed.yul | awk '/Binary representation:/{getline;n=length($0)/2;sub(/62bbbbbb/,sprintf(\"62%06x\",n));print \"0x\"$0}'","build:RevertEnvelopeCompressed":"solc --optimize --optimize-runs=1 --strict-assembly --bin src/utils/deployless/RevertEnvelopeCompressed.yul | awk '/Binary representation:/{getline;n=length($0)/2;sub(/62bbbbbb/,sprintf(\"62%06x\",n));print \"0x\"$0}'"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:13bbd941-7f28-40a7-adc5-78cf47c2e9c3"}},"_resolved":"/home/runner/work/viem-dlc/viem-dlc/package.tgz","_integrity":"sha512-QnwMwZiJnqzcjYneab5UEdu1lvIlLtfaTVuckPqxecLWILMjWu+jPhb3fvs988M/Kt7taQtHXm3wxA2TF7Iehw==","repository":{"url":"git+https://github.com/morpho-org/viem-dlc.git","type":"git"},"_npmVersion":"11.11.0","description":"A collection of flexible viem extensions with a focus on intelligent caching.","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","dependencies":{"valibot":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.21.0","viem":"2.45.1","vitest":"4.0.18","typescript":"5.9.3","@types/node":"25.2.0","@vercel/blob":"^2.3.3","@biomejs/biome":"2.3.13","@upstash/redis":"1.36.1","@tsconfig/node24":"24.0.4","@tsconfig/node-ts":"23.6.2"},"peerDependencies":{"viem":"^2.0.0","@vercel/blob":"^2.3.0","@upstash/redis":"^1.0.0"},"peerDependenciesMeta":{"@vercel/blob":{"optional":true},"@upstash/redis":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/viem-dlc_0.0.8_1777504896152_0.2548609778005668","host":"s3://npm-registry-packages-npm-production"}},"0.0.9":{"name":"@morpho-org/viem-dlc","version":"0.0.9","keywords":["viem","cache","eth_getLogs"],"author":{"name":"Morpho Association","email":"contact@morpho.org"},"license":"MIT","_id":"@morpho-org/viem-dlc@0.0.9","maintainers":[{"name":"hshively.morpho","email":"hayden@morpho.xyz"}],"contributors":[{"name":"Hayden Shively","email":"hayden@morpho.xyz"}],"homepage":"https://github.com/morpho-org/viem-dlc","bugs":{"url":"https://github.com/morpho-org/viem-dlc/issues"},"dist":{"shasum":"f62c145aaf0bdea224bfe1293f994142dac3da4a","tarball":"https://registry.npmjs.org/@morpho-org/viem-dlc/-/viem-dlc-0.0.9.tgz","fileCount":259,"integrity":"sha512-/xRXfi2frqTYcaorNBOVj78ujZ11+7a/TYBrvwpwe4r9glowexnPdVeCk+bhPDDyvEogponVGz3dWKxa5RzVCw==","signatures":[{"sig":"MEYCIQCCC9FxrzSSehxw+pJTZXDuvlFWRLKor+7kp7UEuP5xFAIhAPALzX1NAWwqi9xUMdnX/LMtzDAkcCXbShle5CTIst3/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@morpho-org%2fviem-dlc@0.0.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":481927},"type":"module","_from":"file:package.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.js","default":"./dist/utils/index.js"},"./stores":{"types":"./dist/stores/index.d.ts","import":"./dist/stores/index.js","default":"./dist/stores/index.js"},"./actions":{"types":"./dist/actions/index.d.ts","import":"./dist/actions/index.js","default":"./dist/actions/index.js"},"./transports":{"types":"./dist/transports/index.d.ts","import":"./dist/transports/index.js","default":"./dist/transports/index.js"},"./stores/vercel":{"types":"./dist/stores/vercel.d.ts","import":"./dist/stores/vercel.js","default":"./dist/stores/vercel.js"},"./stores/upstash":{"types":"./dist/stores/upstash.d.ts","import":"./dist/stores/upstash.js","default":"./dist/stores/upstash.js"},"./transports/cache":{"types":"./dist/transports/cache/index.d.ts","import":"./dist/transports/cache/index.js","default":"./dist/transports/cache/index.js"}},"scripts":{"loc":"tokei src","lint":"pnpm exec biome lint --write","test":"vitest run","build":"tsc","format":"pnpm exec biome format --write","pretest":"pnpm build","typecheck":"tsc --project tsconfig.json --noEmit --incremental","build:RevertEnvelope":"solc --optimize --optimize-runs=1 --strict-assembly --bin src/utils/deployless/RevertEnvelope.yul | awk '/Binary representation:/{getline;n=length($0)/2;sub(/62bbbbbb/,sprintf(\"62%06x\",n));print \"0x\"$0}'","build:ReturnEnvelopeCompressed":"solc --optimize --optimize-runs=1 --strict-assembly --bin src/utils/deployless/ReturnEnvelopeCompressed.yul | awk '/Binary representation:/{getline;n=length($0)/2;sub(/62bbbbbb/,sprintf(\"62%06x\",n));print \"0x\"$0}'","build:RevertEnvelopeCompressed":"solc --optimize --optimize-runs=1 --strict-assembly --bin src/utils/deployless/RevertEnvelopeCompressed.yul | awk '/Binary representation:/{getline;n=length($0)/2;sub(/62bbbbbb/,sprintf(\"62%06x\",n));print \"0x\"$0}'"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:13bbd941-7f28-40a7-adc5-78cf47c2e9c3"}},"_resolved":"/home/runner/work/viem-dlc/viem-dlc/package.tgz","_integrity":"sha512-/xRXfi2frqTYcaorNBOVj78ujZ11+7a/TYBrvwpwe4r9glowexnPdVeCk+bhPDDyvEogponVGz3dWKxa5RzVCw==","repository":{"url":"git+https://github.com/morpho-org/viem-dlc.git","type":"git"},"_npmVersion":"11.11.0","description":"A collection of flexible viem extensions with a focus on intelligent caching.","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","dependencies":{"valibot":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.21.0","viem":"2.45.1","vitest":"4.0.18","typescript":"5.9.3","@types/node":"25.2.0","@vercel/blob":"^2.3.3","@biomejs/biome":"2.3.13","@upstash/redis":"1.36.1","@tsconfig/node24":"24.0.4","@tsconfig/node-ts":"23.6.2"},"peerDependencies":{"viem":"^2.0.0","@vercel/blob":"^2.3.0","@upstash/redis":"^1.0.0"},"peerDependenciesMeta":{"@vercel/blob":{"optional":true},"@upstash/redis":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/viem-dlc_0.0.9_1777644546793_0.775999469272123","host":"s3://npm-registry-packages-npm-production"}},"0.0.10":{"name":"@morpho-org/viem-dlc","version":"0.0.10","keywords":["viem","cache","eth_getLogs"],"author":{"name":"Morpho Association","email":"contact@morpho.org"},"license":"MIT","_id":"@morpho-org/viem-dlc@0.0.10","maintainers":[{"name":"hshively.morpho","email":"hayden@morpho.xyz"}],"contributors":[{"name":"Hayden Shively","email":"hayden@morpho.xyz"}],"homepage":"https://github.com/morpho-org/viem-dlc","bugs":{"url":"https://github.com/morpho-org/viem-dlc/issues"},"dist":{"shasum":"d0003a0ac73c0e635b28d6519eb7be22b97486f8","tarball":"https://registry.npmjs.org/@morpho-org/viem-dlc/-/viem-dlc-0.0.10.tgz","fileCount":259,"integrity":"sha512-IK8CgYFcyPkNrfeRPqC4Lp47TlVuWI3vsDK4JvgKCOfj1QSWtfzoBvslM4Vi/K5c7CXKw3AaFstd6X13n5pY3Q==","signatures":[{"sig":"MEUCIQCtKpCjn70Npy9GiE/fbftzd15ffd3T7uOZEpJ0TUvxtQIgP3MWRqMpYatHLchSWhZzJ9yKVuNJl6JYHTpTRZxRKTg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@morpho-org%2fviem-dlc@0.0.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":486046},"type":"module","_from":"file:package.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.js","default":"./dist/utils/index.js"},"./stores":{"types":"./dist/stores/index.d.ts","import":"./dist/stores/index.js","default":"./dist/stores/index.js"},"./actions":{"types":"./dist/actions/index.d.ts","import":"./dist/actions/index.js","default":"./dist/actions/index.js"},"./transports":{"types":"./dist/transports/index.d.ts","import":"./dist/transports/index.js","default":"./dist/transports/index.js"},"./stores/vercel":{"types":"./dist/stores/vercel.d.ts","import":"./dist/stores/vercel.js","default":"./dist/stores/vercel.js"},"./stores/upstash":{"types":"./dist/stores/upstash.d.ts","import":"./dist/stores/upstash.js","default":"./dist/stores/upstash.js"},"./transports/cache":{"types":"./dist/transports/cache/index.d.ts","import":"./dist/transports/cache/index.js","default":"./dist/transports/cache/index.js"}},"scripts":{"loc":"tokei src","lint":"pnpm exec biome lint --write","test":"vitest run","build":"tsc","format":"pnpm exec biome format --write","pretest":"pnpm build","typecheck":"tsc --project tsconfig.json --noEmit --incremental","build:RevertEnvelope":"solc --optimize --optimize-runs=1 --strict-assembly --bin src/utils/deployless/RevertEnvelope.yul | awk '/Binary representation:/{getline;n=length($0)/2;sub(/62bbbbbb/,sprintf(\"62%06x\",n));print \"0x\"$0}'","build:ReturnEnvelopeCompressed":"solc --optimize --optimize-runs=1 --strict-assembly --bin src/utils/deployless/ReturnEnvelopeCompressed.yul | awk '/Binary representation:/{getline;n=length($0)/2;sub(/62bbbbbb/,sprintf(\"62%06x\",n));print \"0x\"$0}'","build:RevertEnvelopeCompressed":"solc --optimize --optimize-runs=1 --strict-assembly --bin src/utils/deployless/RevertEnvelopeCompressed.yul | awk '/Binary representation:/{getline;n=length($0)/2;sub(/62bbbbbb/,sprintf(\"62%06x\",n));print \"0x\"$0}'"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:13bbd941-7f28-40a7-adc5-78cf47c2e9c3"}},"_resolved":"/home/runner/work/viem-dlc/viem-dlc/package.tgz","_integrity":"sha512-IK8CgYFcyPkNrfeRPqC4Lp47TlVuWI3vsDK4JvgKCOfj1QSWtfzoBvslM4Vi/K5c7CXKw3AaFstd6X13n5pY3Q==","repository":{"url":"git+https://github.com/morpho-org/viem-dlc.git","type":"git"},"_npmVersion":"11.11.0","description":"A collection of flexible viem extensions with a focus on intelligent caching.","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","dependencies":{"valibot":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.21.0","viem":"2.45.1","vitest":"4.0.18","typescript":"5.9.3","@types/node":"25.2.0","@vercel/blob":"^2.3.3","@biomejs/biome":"2.3.13","@upstash/redis":"1.36.1","@tsconfig/node24":"24.0.4","@tsconfig/node-ts":"23.6.2"},"peerDependencies":{"viem":"^2.0.0","@vercel/blob":"^2.3.0","@upstash/redis":"^1.0.0"},"peerDependenciesMeta":{"@vercel/blob":{"optional":true},"@upstash/redis":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/viem-dlc_0.0.10_1778211805884_0.21212639165128566","host":"s3://npm-registry-packages-npm-production"}},"0.0.11":{"name":"@morpho-org/viem-dlc","version":"0.0.11","keywords":["viem","cache","eth_getLogs"],"author":{"name":"Morpho Association","email":"contact@morpho.org"},"license":"MIT","_id":"@morpho-org/viem-dlc@0.0.11","maintainers":[{"name":"hshively.morpho","email":"hayden@morpho.xyz"}],"contributors":[{"name":"Hayden Shively","email":"hayden@morpho.xyz"}],"homepage":"https://github.com/morpho-org/viem-dlc","bugs":{"url":"https://github.com/morpho-org/viem-dlc/issues"},"dist":{"shasum":"be3992f02530b85f89f60b5351ee76ebebd20035","tarball":"https://registry.npmjs.org/@morpho-org/viem-dlc/-/viem-dlc-0.0.11.tgz","fileCount":263,"integrity":"sha512-aIam52kaN/Lt2eQuZpcDWPqKKyv/ltH7Di/HoNjdzlWN4ccuk4Keuw63RuP1pXtGAowmxNGblyPnHwja8QohsA==","signatures":[{"sig":"MEYCIQCRKe0wEWlIMbfWEzcGuf9gDQYg3wA8mnAqZSz6qvgezgIhAKl5l2BlHHtGbpOHAPF8nPsHurYGddgwp/fGzonG7Olc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@morpho-org%2fviem-dlc@0.0.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":504637},"type":"module","_from":"file:package.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.js","default":"./dist/utils/index.js"},"./stores":{"types":"./dist/stores/index.d.ts","import":"./dist/stores/index.js","default":"./dist/stores/index.js"},"./actions":{"types":"./dist/actions/index.d.ts","import":"./dist/actions/index.js","default":"./dist/actions/index.js"},"./transports":{"types":"./dist/transports/index.d.ts","import":"./dist/transports/index.js","default":"./dist/transports/index.js"},"./stores/vercel":{"types":"./dist/stores/vercel.d.ts","import":"./dist/stores/vercel.js","default":"./dist/stores/vercel.js"},"./stores/upstash":{"types":"./dist/stores/upstash.d.ts","import":"./dist/stores/upstash.js","default":"./dist/stores/upstash.js"},"./transports/cache":{"types":"./dist/transports/cache/index.d.ts","import":"./dist/transports/cache/index.js","default":"./dist/transports/cache/index.js"}},"scripts":{"loc":"tokei src","lint":"pnpm exec biome lint --write","test":"vitest run","build":"tsc","format":"pnpm exec biome format --write","pretest":"pnpm build","typecheck":"tsc --project tsconfig.json --noEmit --incremental","build:RevertEnvelope":"solc --optimize --optimize-runs=1 --strict-assembly --bin src/utils/deployless/RevertEnvelope.yul | awk '/Binary representation:/{getline;n=length($0)/2;sub(/62bbbbbb/,sprintf(\"62%06x\",n));print \"0x\"$0}'","build:ReturnEnvelopeCompressed":"solc --optimize --optimize-runs=1 --strict-assembly --bin src/utils/deployless/ReturnEnvelopeCompressed.yul | awk '/Binary representation:/{getline;n=length($0)/2;sub(/62bbbbbb/,sprintf(\"62%06x\",n));print \"0x\"$0}'","build:RevertEnvelopeCompressed":"solc --optimize --optimize-runs=1 --strict-assembly --bin src/utils/deployless/RevertEnvelopeCompressed.yul | awk '/Binary representation:/{getline;n=length($0)/2;sub(/62bbbbbb/,sprintf(\"62%06x\",n));print \"0x\"$0}'"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:13bbd941-7f28-40a7-adc5-78cf47c2e9c3"}},"_resolved":"/home/runner/work/viem-dlc/viem-dlc/package.tgz","_integrity":"sha512-aIam52kaN/Lt2eQuZpcDWPqKKyv/ltH7Di/HoNjdzlWN4ccuk4Keuw63RuP1pXtGAowmxNGblyPnHwja8QohsA==","repository":{"url":"git+https://github.com/morpho-org/viem-dlc.git","type":"git"},"_npmVersion":"11.11.0","description":"A collection of flexible viem extensions with a focus on intelligent caching.","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","dependencies":{"valibot":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.21.0","viem":"2.45.1","vitest":"4.0.18","typescript":"5.9.3","@types/node":"25.2.0","@vercel/blob":"^2.3.3","@biomejs/biome":"2.3.13","@upstash/redis":"1.36.1","@tsconfig/node24":"24.0.4","@tsconfig/node-ts":"23.6.2"},"peerDependencies":{"viem":"^2.0.0","@vercel/blob":"^2.3.0","@upstash/redis":"^1.0.0"},"peerDependenciesMeta":{"@vercel/blob":{"optional":true},"@upstash/redis":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/viem-dlc_0.0.11_1778264324045_0.49506312547333464","host":"s3://npm-registry-packages-npm-production"}},"0.0.12":{"name":"@morpho-org/viem-dlc","version":"0.0.12","keywords":["viem","cache","eth_getLogs"],"author":"Morpho Association <contact@morpho.org>","license":"MIT","_id":"@morpho-org/viem-dlc@0.0.12","maintainers":[{"name":"hshively.morpho","email":"hayden@morpho.xyz"}],"contributors":["Hayden Shively <hayden@morpho.xyz>"],"homepage":"https://github.com/morpho-org/viem-dlc","dist":{"shasum":"7112c616dcfcacd06d48f7f14eceee7bf9ec0931","tarball":"https://registry.npmjs.org/@morpho-org/viem-dlc/-/viem-dlc-0.0.12.tgz","fileCount":267,"integrity":"sha512-2iueNNQAiUaoo0ZVIA1AZvNNbNvuwtfs5YngkI+WExxsgSEnwyt7qYWvmC6hdAx8BMUINf97vGkk3xnJQ3GVtw==","signatures":[{"sig":"MEQCIGUpExFEf+Se/PotEXainoA11Pm78QwLiQkT6b2McR0PAiApAXVxO1UadFajeGVbwcoRnjPInPaodDSZyEcuVg0aJQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@morpho-org%2fviem-dlc@0.0.12","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":518479},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.js","default":"./dist/utils/index.js"},"./stores":{"types":"./dist/stores/index.d.ts","import":"./dist/stores/index.js","default":"./dist/stores/index.js"},"./actions":{"types":"./dist/actions/index.d.ts","import":"./dist/actions/index.js","default":"./dist/actions/index.js"},"./transports":{"types":"./dist/transports/index.d.ts","import":"./dist/transports/index.js","default":"./dist/transports/index.js"},"./stores/vercel":{"types":"./dist/stores/vercel.d.ts","import":"./dist/stores/vercel.js","default":"./dist/stores/vercel.js"},"./stores/upstash":{"types":"./dist/stores/upstash.d.ts","import":"./dist/stores/upstash.js","default":"./dist/stores/upstash.js"},"./transports/cache":{"types":"./dist/transports/cache/index.d.ts","import":"./dist/transports/cache/index.js","default":"./dist/transports/cache/index.js"}},"scripts":{"loc":"tokei src","lint":"pnpm exec biome lint --write","test":"vitest run","build":"tsc","format":"pnpm exec biome format --write","pretest":"pnpm build","typecheck":"tsc --project tsconfig.json --noEmit --incremental","build:RevertEnvelope":"solc --optimize --optimize-runs=1 --strict-assembly --bin src/utils/deployless/RevertEnvelope.yul | awk '/Binary representation:/{getline;n=length($0)/2;sub(/62bbbbbb/,sprintf(\"62%06x\",n));print \"0x\"$0}'","build:ReturnEnvelopeCompressed":"solc --optimize --optimize-runs=1 --strict-assembly --bin src/utils/deployless/ReturnEnvelopeCompressed.yul | awk '/Binary representation:/{getline;n=length($0)/2;sub(/62bbbbbb/,sprintf(\"62%06x\",n));print \"0x\"$0}'","build:RevertEnvelopeCompressed":"solc --optimize --optimize-runs=1 --strict-assembly --bin src/utils/deployless/RevertEnvelopeCompressed.yul | awk '/Binary representation:/{getline;n=length($0)/2;sub(/62bbbbbb/,sprintf(\"62%06x\",n));print \"0x\"$0}'"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:13bbd941-7f28-40a7-adc5-78cf47c2e9c3"}},"repository":{"url":"https://github.com/morpho-org/viem-dlc.git","type":"git"},"description":"A collection of flexible viem extensions with a focus on intelligent caching.","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"valibot":"^1.4.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.1","viem":"2.55.10","vitest":"4.1.10","typescript":"7.0.2","@types/node":"25.2.0","@vercel/blob":"^2.6.1","@biomejs/biome":"2.5.6","@upstash/redis":"1.38.1"},"peerDependencies":{"viem":"^2.0.0","@vercel/blob":"^2.3.0","@upstash/redis":"^1.0.0"},"peerDependenciesMeta":{"@vercel/blob":{"optional":true},"@upstash/redis":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/viem-dlc_0.0.12_1786647472258_0.5556517384978943","host":"s3://npm-registry-packages-npm-production"}},"0.0.14":{"name":"@morpho-org/viem-dlc","version":"0.0.14","keywords":["viem","cache","eth_getLogs"],"author":"Morpho Association <contact@morpho.org>","license":"MIT","_id":"@morpho-org/viem-dlc@0.0.14","maintainers":[{"name":"hshively.morpho","email":"hayden@morpho.xyz"}],"contributors":["Hayden Shively <hayden@morpho.xyz>"],"homepage":"https://github.com/morpho-org/viem-dlc","dist":{"shasum":"008e36c353da73114da508b6162f69d2cab1e568","tarball":"https://registry.npmjs.org/@morpho-org/viem-dlc/-/viem-dlc-0.0.14.tgz","fileCount":275,"integrity":"sha512-D3GmZvK/7xxkLOul68kAJKpYI0ww1C1Uk9DQMvNJPZjiWBsAym3GeEI/oc9aOEfPTQSb48B/dRN+cC4hq/31Hw==","signatures":[{"sig":"MEUCIEcQd/xqX0JuhAfJBivu56chdObIUfJmiU7/EzBVUb4QAiEA7f9InRuWmAhDJBfWs/vZ+tn8Xkdm/ndZRpo2UiMpPIE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@morpho-org%2fviem-dlc@0.0.14","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":558838},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.js","default":"./dist/utils/index.js"},"./stores":{"types":"./dist/stores/index.d.ts","import":"./dist/stores/index.js","default":"./dist/stores/index.js"},"./actions":{"types":"./dist/actions/index.d.ts","import":"./dist/actions/index.js","default":"./dist/actions/index.js"},"./transports":{"types":"./dist/transports/index.d.ts","import":"./dist/transports/index.js","default":"./dist/transports/index.js"},"./stores/vercel":{"types":"./dist/stores/vercel.d.ts","import":"./dist/stores/vercel.js","default":"./dist/stores/vercel.js"},"./stores/upstash":{"types":"./dist/stores/upstash.d.ts","import":"./dist/stores/upstash.js","default":"./dist/stores/upstash.js"},"./transports/cache":{"types":"./dist/transports/cache/index.d.ts","import":"./dist/transports/cache/index.js","default":"./dist/transports/cache/index.js"}},"scripts":{"loc":"tokei src","lint":"pnpm exec biome lint --write","test":"vitest run","build":"tsc","format":"pnpm exec biome format --write","pretest":"pnpm build","typecheck":"tsc --project tsconfig.json --noEmit --incremental","build:RevertEnvelope":"solc --optimize --optimize-runs=1 --strict-assembly --bin src/utils/deployless/RevertEnvelope.yul | awk '/Binary representation:/{getline;n=length($0)/2;sub(/62bbbbbb/,sprintf(\"62%06x\",n));print \"0x\"$0}'","build:RevertEnvelopeCompressed":"solc --optimize --optimize-runs=1 --strict-assembly --bin src/utils/deployless/RevertEnvelopeCompressed.yul | awk '/Binary representation:/{getline;n=length($0)/2;sub(/62bbbbbb/,sprintf(\"62%06x\",n));print \"0x\"$0}'"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:13bbd941-7f28-40a7-adc5-78cf47c2e9c3"}},"repository":{"url":"https://github.com/morpho-org/viem-dlc.git","type":"git"},"description":"A collection of flexible viem extensions with a focus on intelligent caching.","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"valibot":"^1.4.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.1","viem":"2.55.10","vitest":"4.1.10","typescript":"7.0.2","@types/node":"25.2.0","@vercel/blob":"^2.6.1","@biomejs/biome":"2.5.6","@upstash/redis":"1.38.1"},"peerDependencies":{"viem":"^2.0.0","@vercel/blob":"^2.3.0","@upstash/redis":"^1.0.0"},"peerDependenciesMeta":{"@vercel/blob":{"optional":true},"@upstash/redis":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/viem-dlc_0.0.14_1787632787621_0.9669504082143738","host":"s3://npm-registry-packages-npm-production"}},"0.0.15":{"name":"@morpho-org/viem-dlc","version":"0.0.15","keywords":["viem","cache","eth_getLogs"],"author":"Morpho Association <contact@morpho.org>","license":"MIT","_id":"@morpho-org/viem-dlc@0.0.15","maintainers":[{"name":"hshively.morpho","email":"hayden@morpho.xyz"}],"contributors":["Hayden Shively <hayden@morpho.xyz>"],"homepage":"https://github.com/morpho-org/viem-dlc","dist":{"shasum":"0899d474e8e554f7ba577f786d9b7d79535b47e7","tarball":"https://registry.npmjs.org/@morpho-org/viem-dlc/-/viem-dlc-0.0.15.tgz","fileCount":279,"integrity":"sha512-RiEfYzF0YjjTi7MExzQMi6CPi7ZMdvtvRSY/f6mbuMDkIxOnlJmQMXqR6lK9ETBVnutrYTVVKHy6W4X2Z0WEww==","signatures":[{"sig":"MEUCIQCNxZNP1VLpukhGomq7sVVh42+1LXAIHTBEKLWj/0cVAAIgekvCIrYBLuSZsjEUklZSo4v5IMe/DTgVSCYStm/0esU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@morpho-org%2fviem-dlc@0.0.15","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":615279},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.js","default":"./dist/utils/index.js"},"./stores":{"types":"./dist/stores/index.d.ts","import":"./dist/stores/index.js","default":"./dist/stores/index.js"},"./actions":{"types":"./dist/actions/index.d.ts","import":"./dist/actions/index.js","default":"./dist/actions/index.js"},"./transports":{"types":"./dist/transports/index.d.ts","import":"./dist/transports/index.js","default":"./dist/transports/index.js"},"./stores/vercel":{"types":"./dist/stores/vercel.d.ts","import":"./dist/stores/vercel.js","default":"./dist/stores/vercel.js"},"./stores/upstash":{"types":"./dist/stores/upstash.d.ts","import":"./dist/stores/upstash.js","default":"./dist/stores/upstash.js"},"./transports/cache":{"types":"./dist/transports/cache/index.d.ts","import":"./dist/transports/cache/index.js","default":"./dist/transports/cache/index.js"}},"scripts":{"loc":"tokei src","lint":"pnpm exec biome lint --write","test":"vitest run","build":"tsc","format":"pnpm exec biome format --write","pretest":"pnpm build","typecheck":"tsc --project tsconfig.json --noEmit --incremental","build:RevertEnvelope":"solc --optimize --optimize-runs=1 --strict-assembly --bin src/utils/deployless/RevertEnvelope.yul | awk '/Binary representation:/{getline;n=length($0)/2;sub(/62bbbbbb/,sprintf(\"62%06x\",n));print \"0x\"$0}'","build:RevertEnvelopeCompressed":"solc --optimize --optimize-runs=1 --strict-assembly --bin src/utils/deployless/RevertEnvelopeCompressed.yul | awk '/Binary representation:/{getline;n=length($0)/2;sub(/62bbbbbb/,sprintf(\"62%06x\",n));print \"0x\"$0}'"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:13bbd941-7f28-40a7-adc5-78cf47c2e9c3"}},"repository":{"url":"https://github.com/morpho-org/viem-dlc.git","type":"git"},"description":"A collection of flexible viem extensions with a focus on intelligent caching.","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"valibot":"^1.4.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.1","viem":"2.55.10","vitest":"4.1.10","loglayer":"^9.0.0","typescript":"7.0.2","@types/node":"25.2.0","@vercel/blob":"^2.6.1","@biomejs/biome":"2.5.6","@upstash/redis":"1.38.1"},"peerDependencies":{"viem":"^2.0.0","@vercel/blob":"^2.3.0","@upstash/redis":"^1.0.0"},"peerDependenciesMeta":{"@vercel/blob":{"optional":true},"@upstash/redis":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/viem-dlc_0.0.15_1787635475610_0.8591777029277985","host":"s3://npm-registry-packages-npm-production"}},"0.0.16":{"name":"@morpho-org/viem-dlc","version":"0.0.16","keywords":["viem","cache","eth_getLogs"],"author":"Morpho Association <contact@morpho.org>","license":"MIT","_id":"@morpho-org/viem-dlc@0.0.16","maintainers":[{"name":"hshively.morpho","email":"hayden@morpho.xyz"}],"contributors":["Hayden Shively <hayden@morpho.xyz>"],"homepage":"https://github.com/morpho-org/viem-dlc","dist":{"shasum":"8bb0cc6c1b3cd9c054304e26b670469a4555af25","tarball":"https://registry.npmjs.org/@morpho-org/viem-dlc/-/viem-dlc-0.0.16.tgz","fileCount":271,"integrity":"sha512-25QybGmJImp0pG2wWa9WN4cyMGG5URxD0CWpC+sHuml6L45iZmEnsQHBNNmTOUF7iSsTvE6pbfdHU24RcATutA==","signatures":[{"sig":"MEUCID27nWRZ+jRNf8TBB+ZKs/G2vCTnEjj/+M43IBrzBbvsAiEAlqiU+nud3mB6Osu+euECIZqK/kd8sGwXAXeRYpw29sY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@morpho-org%2fviem-dlc@0.0.16","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":601586},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.js","default":"./dist/utils/index.js"},"./stores":{"types":"./dist/stores/index.d.ts","import":"./dist/stores/index.js","default":"./dist/stores/index.js"},"./actions":{"types":"./dist/actions/index.d.ts","import":"./dist/actions/index.js","default":"./dist/actions/index.js"},"./transports":{"types":"./dist/transports/index.d.ts","import":"./dist/transports/index.js","default":"./dist/transports/index.js"},"./stores/vercel":{"types":"./dist/stores/vercel.d.ts","import":"./dist/stores/vercel.js","default":"./dist/stores/vercel.js"},"./stores/upstash":{"types":"./dist/stores/upstash.d.ts","import":"./dist/stores/upstash.js","default":"./dist/stores/upstash.js"},"./transports/cache":{"types":"./dist/transports/cache/index.d.ts","import":"./dist/transports/cache/index.js","default":"./dist/transports/cache/index.js"}},"scripts":{"loc":"tokei src","lint":"pnpm exec biome lint --write","test":"vitest run","build":"tsc","format":"pnpm exec biome format --write","pretest":"pnpm build","typecheck":"tsc --project tsconfig.json --noEmit --incremental","build:RevertEnvelope":"solc --optimize --optimize-runs=1 --strict-assembly --bin src/utils/deployless/RevertEnvelope.yul | awk '/Binary representation:/{getline;n=length($0)/2;sub(/62bbbbbb/,sprintf(\"62%06x\",n));print \"0x\"$0}'","build:RevertEnvelopeCompressed":"solc --optimize --optimize-runs=1 --strict-assembly --bin src/utils/deployless/RevertEnvelopeCompressed.yul | awk '/Binary representation:/{getline;n=length($0)/2;sub(/62bbbbbb/,sprintf(\"62%06x\",n));print \"0x\"$0}'"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:13bbd941-7f28-40a7-adc5-78cf47c2e9c3"}},"repository":{"url":"https://github.com/morpho-org/viem-dlc.git","type":"git"},"description":"A collection of flexible viem extensions with a focus on intelligent caching.","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"valibot":"^1.4.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.1","viem":"2.55.10","vitest":"4.1.10","loglayer":"^9.0.0","typescript":"7.0.2","@types/node":"25.2.0","@vercel/blob":"^2.6.1","@biomejs/biome":"2.5.6","@upstash/redis":"1.38.1"},"peerDependencies":{"viem":"^2.0.0","@vercel/blob":"^2.3.0","@upstash/redis":"^1.0.0"},"peerDependenciesMeta":{"@vercel/blob":{"optional":true},"@upstash/redis":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/viem-dlc_0.0.16_1787677997421_0.47007332268081914","host":"s3://npm-registry-packages-npm-production"}},"0.0.17":{"name":"@morpho-org/viem-dlc","version":"0.0.17","keywords":["viem","cache","eth_getLogs"],"author":"Morpho Association <contact@morpho.org>","license":"MIT","_id":"@morpho-org/viem-dlc@0.0.17","maintainers":[{"name":"hshively.morpho","email":"hayden@morpho.xyz"}],"contributors":["Hayden Shively <hayden@morpho.xyz>"],"homepage":"https://github.com/morpho-org/viem-dlc","dist":{"shasum":"ce92c362a45c106bcdbddf6636c724f2b86f34b2","tarball":"https://registry.npmjs.org/@morpho-org/viem-dlc/-/viem-dlc-0.0.17.tgz","fileCount":283,"integrity":"sha512-JwxI6p9k3tuzVYFWIJbGOgM+1YNLzVXe5ydnaESWPbymLgSKWPCZNi4Zq5prS/uyhLtQ8/3b2SeK7sxPIivHUw==","signatures":[{"sig":"MEQCIEaQkZ3uMjT2XwkJwDEe2usZfFwhEnaUsi/cmftcQIZsAiAKXOh3xmLS9LcyPRMEbnJ7g1jtuKhi3UMeX7f0ITaX5Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQC0ggX5hESOt4rOwFbiVQKxsiKnEruzF2pyjKB2pIAEgQIhAL6GIhmWShUnBw6XzSPYbmzPcAM2VNJ0klUqbm3HxICd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@morpho-org%2fviem-dlc@0.0.17","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":690718},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.js","default":"./dist/utils/index.js"},"./stores":{"types":"./dist/stores/index.d.ts","import":"./dist/stores/index.js","default":"./dist/stores/index.js"},"./actions":{"types":"./dist/actions/index.d.ts","import":"./dist/actions/index.js","default":"./dist/actions/index.js"},"./transports":{"types":"./dist/transports/index.d.ts","import":"./dist/transports/index.js","default":"./dist/transports/index.js"},"./stores/vercel":{"types":"./dist/stores/vercel.d.ts","import":"./dist/stores/vercel.js","default":"./dist/stores/vercel.js"},"./stores/upstash":{"types":"./dist/stores/upstash.d.ts","import":"./dist/stores/upstash.js","default":"./dist/stores/upstash.js"},"./transports/cache":{"types":"./dist/transports/cache/index.d.ts","import":"./dist/transports/cache/index.js","default":"./dist/transports/cache/index.js"}},"scripts":{"loc":"tokei src","lint":"pnpm exec biome lint --write","test":"vitest run","build":"tsc","format":"pnpm exec biome format --write","pretest":"pnpm build","typecheck":"tsc --project tsconfig.json --noEmit --incremental","test:forge":"forge test --root test/forge","build:Envelope":"solc --optimize --optimize-runs=1 --strict-assembly --bin src/utils/deployless/Envelope.yul | awk '/Binary representation:/{getline;n=length($0)/2;sub(/62bbbbbb/,sprintf(\"62%06x\",n));print \"0x\"$0}'"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:13bbd941-7f28-40a7-adc5-78cf47c2e9c3"}},"repository":{"url":"https://github.com/morpho-org/viem-dlc.git","type":"git"},"description":"A collection of flexible viem extensions with a focus on intelligent caching.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"valibot":"^1.4.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.1","viem":"2.55.10","vitest":"4.1.10","loglayer":"^9.0.0","typescript":"7.0.2","@types/node":"25.2.0","@vercel/blob":"^2.6.1","@biomejs/biome":"2.5.6","@upstash/redis":"1.38.1"},"peerDependencies":{"viem":"^2.0.0","@vercel/blob":"^2.3.0","@upstash/redis":"^1.0.0"},"peerDependenciesMeta":{"@vercel/blob":{"optional":true},"@upstash/redis":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/viem-dlc_0.0.17_1789438867182_0.612051559659583","host":"s3://npm-registry-packages-npm-production"}},"0.0.18":{"name":"@morpho-org/viem-dlc","version":"0.0.18","keywords":["viem","cache","eth_getLogs","deployless","lens"],"author":"Morpho Association <contact@morpho.org>","license":"MIT","_id":"@morpho-org/viem-dlc@0.0.18","maintainers":[{"name":"hshively.morpho","email":"hayden@morpho.xyz"}],"contributors":["Hayden Shively <hayden@morpho.xyz>"],"homepage":"https://github.com/morpho-org/viem-dlc","dist":{"shasum":"169167dc2e1f0159e64d418e5d6753b6c1c1b566","tarball":"https://registry.npmjs.org/@morpho-org/viem-dlc/-/viem-dlc-0.0.18.tgz","fileCount":287,"integrity":"sha512-TwlAtp7bGButJTMtcbyOeF4WR6oDLJ70myMbBV8iY45+s0oSGXbcXkL0Op8Y5Sd5NeUIojisnMWtdnU7B+qoKw==","signatures":[{"sig":"MEQCIDGYdiG7E5QNWCrK2S/wP3qveIcBhKwfewSuVSRHjOLBAiB2OP2C/gz3UrPZrFyHtvDVEMqyDySfTwxKHbXk+OR2nw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIE3y9Vz4TNpHQVFof/bvxJL6i7D1vQIORrggZxChs/5lAiEA1XSWxCnlv2jqVLgJPAE1Kdk0ezYBwMdCFI1mUickBD4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@morpho-org%2fviem-dlc@0.0.18","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":701054},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.js","default":"./dist/utils/index.js"},"./chains":{"types":"./dist/chains/index.d.ts","import":"./dist/chains/index.js","default":"./dist/chains/index.js"},"./stores":{"types":"./dist/stores/index.d.ts","import":"./dist/stores/index.js","default":"./dist/stores/index.js"},"./actions":{"types":"./dist/actions/index.d.ts","import":"./dist/actions/index.js","default":"./dist/actions/index.js"},"./transports":{"types":"./dist/transports/index.d.ts","import":"./dist/transports/index.js","default":"./dist/transports/index.js"},"./stores/vercel":{"types":"./dist/stores/vercel.d.ts","import":"./dist/stores/vercel.js","default":"./dist/stores/vercel.js"},"./stores/upstash":{"types":"./dist/stores/upstash.d.ts","import":"./dist/stores/upstash.js","default":"./dist/stores/upstash.js"},"./transports/cache":{"types":"./dist/transports/cache/index.d.ts","import":"./dist/transports/cache/index.js","default":"./dist/transports/cache/index.js"},"./utils/deployless":{"types":"./dist/utils/deployless/index.d.ts","import":"./dist/utils/deployless/index.js","default":"./dist/utils/deployless/index.js"}},"scripts":{"loc":"tokei src","lint":"pnpm exec biome lint --write","test":"vitest run","build":"tsc","format":"pnpm exec biome format --write","pretest":"pnpm build","typecheck":"tsc --project tsconfig.json --noEmit --incremental","test:forge":"forge test --root test/forge","build:Envelope":"solc --optimize --optimize-runs=1 --strict-assembly --bin src/utils/deployless/Envelope.yul | awk '/Binary representation:/{getline;n=length($0)/2;sub(/62bbbbbb/,sprintf(\"62%06x\",n));print \"0x\"$0}'"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:13bbd941-7f28-40a7-adc5-78cf47c2e9c3"}},"repository":{"url":"https://github.com/morpho-org/viem-dlc.git","type":"git"},"description":"A collection of flexible viem extensions with a focus on intelligent caching.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"valibot":"^1.4.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.1","viem":"2.55.10","vitest":"4.1.10","loglayer":"^9.0.0","typescript":"7.0.2","@types/node":"25.2.0","@vercel/blob":"^2.6.1","@biomejs/biome":"2.5.6","@upstash/redis":"1.38.1"},"peerDependencies":{"viem":"^2.43.0","@vercel/blob":"^2.3.0","@upstash/redis":"^1.0.0"},"peerDependenciesMeta":{"@vercel/blob":{"optional":true},"@upstash/redis":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/viem-dlc_0.0.18_1789536942417_0.802041881718689","host":"s3://npm-registry-packages-npm-production"}},"0.0.19":{"_id":"@morpho-org/viem-dlc@0.0.19","dist":{"shasum":"52269e23ad02e3ea605d76da4381c24d975ab95d","tarball":"https://registry.npmjs.org/@morpho-org/viem-dlc/-/viem-dlc-0.0.19.tgz","fileCount":287,"integrity":"sha512-iZRNfLJwYIydcdR8iJ6u8YC04rbA3B1Ya3VoOp/cDg1b/3gbyMUJfrJUAhM2gdz8OHvGHYSWJ8b/uZBOhyxguQ==","signatures":[{"sig":"MEUCIFcuJ0bAolv/FVpHoamRAUAaQraboPElcgEYLSZ1A2XvAiEA1Kqp5FfRYF5gEdUrWpslaMFGi4n/gClLz/rG2RL3aEA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIHKrQYboYTmI+wdYYQAyK9Z6MnAsqHZPMaXyv0mvn4HVAiBfktUSb8zclYh5B1MFvIlkkTGMw02A7KXOZReO/JxOXw=="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@morpho-org%2fviem-dlc@0.0.19","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":705530},"name":"@morpho-org/viem-dlc","type":"module","author":"Morpho Association <contact@morpho.org>","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.js","default":"./dist/utils/index.js"},"./chains":{"types":"./dist/chains/index.d.ts","import":"./dist/chains/index.js","default":"./dist/chains/index.js"},"./stores":{"types":"./dist/stores/index.d.ts","import":"./dist/stores/index.js","default":"./dist/stores/index.js"},"./actions":{"types":"./dist/actions/index.d.ts","import":"./dist/actions/index.js","default":"./dist/actions/index.js"},"./transports":{"types":"./dist/transports/index.d.ts","import":"./dist/transports/index.js","default":"./dist/transports/index.js"},"./stores/vercel":{"types":"./dist/stores/vercel.d.ts","import":"./dist/stores/vercel.js","default":"./dist/stores/vercel.js"},"./stores/upstash":{"types":"./dist/stores/upstash.d.ts","import":"./dist/stores/upstash.js","default":"./dist/stores/upstash.js"},"./transports/cache":{"types":"./dist/transports/cache/index.d.ts","import":"./dist/transports/cache/index.js","default":"./dist/transports/cache/index.js"},"./utils/deployless":{"types":"./dist/utils/deployless/index.d.ts","import":"./dist/utils/deployless/index.js","default":"./dist/utils/deployless/index.js"}},"license":"MIT","scripts":{"loc":"tokei src","lint":"pnpm exec biome lint --write","test":"vitest run","bench":"vitest bench --run","build":"tsc","format":"pnpm exec biome format --write","pretest":"pnpm build","typecheck":"tsc --project tsconfig.json --noEmit --incremental","test:forge":"forge test --root test/forge","bench:memory":"BENCH=1 vitest run test/bench/get-logs.memory.test.ts","build:Envelope":"solc --optimize --optimize-runs=1 --strict-assembly --bin src/utils/deployless/Envelope.yul | awk '/Binary representation:/{getline;n=length($0)/2;sub(/62bbbbbb/,sprintf(\"62%06x\",n));print \"0x\"$0}'"},"version":"0.0.19","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:13bbd941-7f28-40a7-adc5-78cf47c2e9c3"}},"homepage":"https://github.com/morpho-org/viem-dlc","keywords":["viem","cache","eth_getLogs","deployless","lens"],"repository":{"url":"https://github.com/morpho-org/viem-dlc.git","type":"git"},"description":"A collection of flexible viem extensions with a focus on intelligent caching.","directories":{},"maintainers":[{"name":"hshively.morpho","email":"hayden@morpho.xyz"}],"sideEffects":false,"_nodeVersion":"24.20.0","contributors":["Hayden Shively <hayden@morpho.xyz>"],"dependencies":{"valibot":"^1.4.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.1","viem":"2.55.10","vite":"^7.3.6","vitest":"4.1.10","vite-node":"^6.0.0","typescript":"7.0.2","@types/node":"25.2.0","@vercel/blob":"^2.6.1","@biomejs/biome":"2.5.6","@upstash/redis":"1.38.1"},"peerDependencies":{"viem":"^2.43.0","@vercel/blob":"^2.3.0","@upstash/redis":"^1.0.0"},"peerDependenciesMeta":{"@vercel/blob":{"optional":true},"@upstash/redis":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/viem-dlc_0.0.19_1789704174108_0.48290463143883633"}}},"time":{"created":"2026-03-12T14:57:02.778Z","modified":"2026-09-18T04:02:54.558Z","0.0.2":"2026-03-12T14:57:02.995Z","0.0.3":"2026-03-31T17:36:23.790Z","0.0.4":"2026-03-31T20:12:37.437Z","0.0.5":"2026-04-07T21:24:55.455Z","0.0.6":"2026-04-13T22:52:37.630Z","0.0.7":"2026-04-16T18:32:45.450Z","0.0.8":"2026-04-29T23:21:36.290Z","0.0.9":"2026-05-01T14:09:07.096Z","0.0.10":"2026-05-08T03:43:26.066Z","0.0.11":"2026-05-08T18:18:44.267Z","0.0.12":"2026-08-13T18:57:52.426Z","0.0.14":"2026-08-25T04:39:47.762Z","0.0.15":"2026-08-25T05:24:35.761Z","0.0.16":"2026-08-25T17:13:17.580Z","0.0.17":"2026-09-15T02:21:07.335Z","0.0.18":"2026-09-16T05:35:42.501Z","0.0.19":"2026-09-18T04:02:54.226Z"},"author":"Morpho Association <contact@morpho.org>","license":"MIT","homepage":"https://github.com/morpho-org/viem-dlc","keywords":["viem","cache","eth_getLogs","deployless","lens"],"repository":{"url":"https://github.com/morpho-org/viem-dlc.git","type":"git"},"description":"A collection of flexible viem extensions with a focus on intelligent caching.","contributors":["Hayden Shively <hayden@morpho.xyz>"],"maintainers":[{"name":"hshively.morpho","email":"hayden@morpho.xyz"}],"readme":"# @morpho-org/viem-dlc\n\nA collection of flexible [viem](https://viem.sh) extensions with a focus on intelligent caching.\nProvides composable transport wrappers for optimized `eth_getLogs` and deployless `eth_call`\nhandling with caching, rate limiting, automatic request splitting, and oversized-log filtering.\n\n## Installation\n\n```bash\npnpm add @morpho-org/viem-dlc\n```\n\nAlso available on the [GitHub Package Registry](https://npm.pkg.github.com).\n\n## Tutorials\n\nFour interactive tutorials — `eth_getLogs`, `eth_call`, transport composition, and observability —\nlive in [`playground/`](./playground/README.md). Each is prose interleaved with runnable, editable\nsteps that call this package against a live endpoint, so every figure they quote is one you can\nreproduce.\n\n## Choosing a half\n\nThe library has two independent halves, and they answer different questions. Neither is a general\nanswer to \"how do I read chain data\"; each has a scale past which something else is the right tool.\n\n| What you need | Use | Holds up to | What replaces it past that |\n| --- | --- | --- | --- |\n| History and discovery — events over a block range | the `cache` transport | roughly 10 MB of zstd-compressed logs per query in serverless memory (about eight months of Morpho Vault V2 history), or roughly 100 MB on a developer machine (every Morpho Blue borrow event ever emitted) | an indexer surfacing raw events |\n| The freshest current state — the same question about many subjects, right now | a batched lens read: `readLens`, or `deployless` with `policy` | tens of thousands of elements before a provider's gas budget binds | an indexer accumulating derived state |\n\nThe rule of thumb: **index for history and discovery, read a lens for the freshest current state.**\nMost systems want both — discover the subject list from logs, then read its live state through a\nlens.\n\n### When a lens fits\n\nA lens fits when you ask the same question about many subjects and each answer stands alone. That\nindependence is a hard requirement rather than a preference — see the\n[semantic requirement](#eth_call-policy) on `policy`. It fits best when you want the current block\nrather than history, and when the answer is derived from several storage reads rather than sitting\nin one field.\n\n**Against a `multicall`, almost always.** Whatever the provider's gas cap and rate limits, a lens\nsends less calldata, decodes faster, and splits under pressure instead of failing. A low gas cap\nmeans more calls to answer the same list; it does not mean `multicall` would have done better,\nbecause a `multicall` aggregates into one call under one gas budget. One item that burns unbounded\ngas fails the whole batch, and every retry fails the same way — so anyone who can get an address\ninto your input list can trigger that deliberately. This library bisects the offender out instead,\nwhich costs a few extra round trips rather than the query.\n\n**Against an indexer that accumulates derived state, usually — until the budget binds.** Such an\nindexer has to be deployed, backfilled, and kept correct across reorgs, and what it serves is always\nat least one block stale. A lens reads live chain state with nothing to stand up, and freshness is\nguaranteed by construction. The provider's gas cap and rate limit are what eventually bite; past\nthat point there is a real trade, and the usual split is derived state from an indexer plus a lens\nfor the fast-moving inputs.\n\n### When caching logs fits\n\nCaching does an indexer's job up to a point. For history and discovery the two are interchangeable\nuntil the query outgrows its host, at the sizes in the table above. Past that, indexing is required\nrather than preferred.\n\nIt is also the fastest way to start, because there is nothing to deploy and nothing to backfill.\nThat is what makes it the right choice for experimentation and for standing something up quickly,\nand it is worth knowing which of those two properties you are relying on: a cache that has quietly\nbecome the thing you index with will hit its ceiling as a surprise.\n\n## Observability (optional)\n\nThis library can emit structured events through a logger you provide. The expected\nshape is a structural subset of [`loglayer`](https://www.npmjs.com/package/loglayer)\n— a `LogLayer` instance satisfies it directly — but `loglayer` is **not** a declared\npeer dependency, so it isn't installed transitively and isn't required to typecheck.\nPass any value matching the exported `Logger` interface (`child`, `withContext`,\n`withMetadata`, `withError`, `info`, `warn`, `error`, `metadataOnly`).\n\n```bash\npnpm add loglayer    # only if you want to use it as the logger\n```\n\nIf you don't call `withLogging`, the library emits nothing and the dep is irrelevant.\n\n```ts\nimport { withLogging } from '@morpho-org/viem-dlc'\n\nawait withLogging(() => client.request({ method: 'eth_getLogs', params: [filter] }), {\n  logger,           // anything satisfying the `Logger` interface, such as a LogLayer instance\n  service: 'indexer', // extra opts become context fields on every event\n})\n```\n\nEach outermost `client.request` made inside a `withLogging` scope emits a single\n`\"concluded\"` wide event. Transports contribute flat, queryable fields under their\nkey — `viem-dlc-failover.succeeded_index`, `viem-dlc-logs-divider.logs_fetched` —\nand layers crossed many times per call, such as the divider once per chunk,\naccumulate totals there, such as `viem-dlc-logs-sieve.logs_dropped`. If a call crosses\nseveral *instances* of the same transport — say, one cache per failover branch — later\ninstances are suffixed `.1`, `.2`, ... in first-touch order, which is stable for a\ngiven composition. Every layer also stamps a per-instance `crossings` count, so the\nevent records which transports the call traversed and how many times each. Call-level\nfields are `call_id`, `chain_id` (when the client has a chain), `duration_ms`, and `status`\n(`\"ok\"` or `\"error\"`). Failed calls\nemit at `error` level with the error attached via `withError`, so hosts that forward\n`withError` entries to an error reporter such as Sentry capture them automatically.\n\n## Transports\n\n### `deployless`\n\nSplits a deployless `eth_call` into as many calls as it takes. It intercepts only calls carrying\nthe `policy(...)` sentinel in `stateOverride`: it re-packs the marked input array into one or more\ndeployless-factory calls under a wire byte budget — the chain's initcode limit, and the transport's\n`batchSize` where stated — and aggregates the pages that come back. It forwards everything else\nunchanged.\nNo gas figure is load-bearing: the envelope calls the lens's per-item function once per element\nin its own frame and reports how far it got, so a chunk adapts to whatever gas the node grants —\nsee [Paginated lenses](#paginated-lenses). An optional `gasLimit` lets the opening wave\nanticipate the grant, and rides as each chunk's `gas` on chains that need it (see\n[Chains](#chains)). A chunk's elements ride inside the envelope's initcode by default, so the\nchain's initcode limit bounds it; with `batch.envelope: 'override'` the envelope is placed by state\noverride instead and only the frame's gas and the provider's request size bound a chunk. Most\ncallers reach it through [`readLens`](#readlens) rather than building the call by hand.\n\n```ts\nimport { createPublicClient, defineChain, encodeFunctionData, http, parseAbiItem } from 'viem'\nimport { mainnet } from 'viem/chains'\nimport { call } from 'viem/actions'\nimport { deployless } from '@morpho-org/viem-dlc/transports'\nimport { arrayifiedAbi, policy } from '@morpho-org/viem-dlc/actions'\nimport { chainConfig, ethereumFacts } from '@morpho-org/viem-dlc/chains'\n\n// The lens implements `positionOf((bytes32,address)) view returns ((uint256,uint128,uint128))`;\n// the array-shaped fragment the wire carries is derived from it.\nconst positionsAbi = arrayifiedAbi(\n  parseAbiItem('function positionOf((bytes32 id, address user) input) view returns ((uint256,uint128,uint128))')\n)\n\n// The chunk rides as initcode, which the chain's limit bounds — see [Chains](#chains).\nconst chain = defineChain({ ...mainnet, ...chainConfig }).extend({ viemDlc: ethereumFacts })\n\nconst client = createPublicClient({ chain, transport: deployless(http(rpcUrl)) })\n\nconst result = await call(client, {\n  factory,\n  factoryData,\n  to,\n  data: encodeFunctionData({ abi: [positionsAbi], functionName: 'positionOf', args: [inputs] }),\n  stateOverride: [policy({ abi: positionsAbi, batch: { compress: true } })],\n})\n```\n\nIf `policy.cache` is present, `deployless(...)` ignores it and stays in split-only mode.\nUse `cache(...)` when you want the same marked calls to populate and read from a backing store.\n\nBoth transports take two optional figures about the provider they were pointed at.\n\n`gasLimit` is its `eth_call` gas cap: `deployless(http(rpcUrl), { gasLimit: 50_000_000 })`, or\n`gasLimit` beside `binSize` in the `cache` config. Together with the policy's `batch.gas` it sizes\nthe opening wave. Every later chunk is sized from what the pages report, so a value that is too low\ncosts a round trip, never a result.\n\nSome chains run an `eth_call` that leaves `gas` unspecified in a fixed default below the cap — Monad\ngrants 8.1M, and promotes only on out-of-gas, which a paging envelope never is. On those chains the\ntransports also send `gasLimit` as every chunk's `gas`, and a value above the provider's cap makes\nthe node reject the request. State the cap the provider documents. Whether a chain behaves this way\nis a fact the chain carries; [Chains](#chains) records it.\n\n`batchSize` is the largest request the provider accepts, in bytes of a chunk's `eth_call` `data`.\nState what the provider documents, often a few megabytes.\n\nBehind `failover`, each branch states its own.\n\nWith observability enabled, batching reports `elements_requested` / `elements_fetched`,\n`nominal_batches` and `batch_bytes` (sizes of the initial packing against the wire budget;\nhalved and continued chunks are not resampled), and `splits_*` for chunks halved after an\nerror: `splits_size` (413 / initcode-size errors) and `splits_timeout`. The envelope's prologue\ngrows with the chunk only by the copy of its bytes, which the packer prices, so a frame that dies\nwithout reporting is a constructor too heavy for the node's cap, surfaced as an error rather than\nhalved. Pagination is normal rather than a failure and gets its own\nfields: `pages_continued` (responses that stopped early; the elements they did not reach are pooled\nand re-packed together), `flushes` (the requests those pooled elements were re-packed into, split\ninto `flushes_full`, `flushes_drain` and `flushes_eager` by what released them — see\n`batch.continuations`), `continuation_depth_max` (the longest chain of pages behind pages),\n`page_adjudicated` (elements per page, as a stat — a lens yielding ~1 per page is\npathological), `pages_all_skipped` (pages whose every element reverted — a per-item selector the\nlens does not implement is one cause), `attempts_unresolved` (elements a frame's gas could not\nresolve, whether the per-item frame died or the envelope refused to start it), `pages_escalated`\n(singleton retries those cost), and, matching the response's\n`skipped` array: `elements_missing` in total, of which `elements_declined_oversize` could not fit\na chunk alone under the byte budget and `elements_unresolved` were gas-terminal even alone —\nthe subset another provider with a higher cap might still serve.\n\nEvery page also reports what its attempts cost, and the request pools it: `frame_gas` (the gas a\nframe had for attempts, on the smallest frame seen), `fixed_gas` (what a frame spent before its\nfirst attempt — prologue, lens deploy and reserve — less the copy of the chunk's own bytes, so the\nfigure does not depend on how large the observed pages were), `item_gas_avg` / `item_gas_stddev` /\n`item_gas_max` per attempt, and `gas_limit_observed`, the `eth_call` gas cap the provider actually\ngranted, read back from the frame, the prologue and the calldata's intrinsic gas. Every chunk after\nthe opening wave is packed from these; they are also the numbers the opening wave takes as\nconfiguration: `fixed_gas`, `item_gas_avg` and `item_gas_stddev` go to the policy's\n`batch.gas`, and `gas_limit_observed` to each transport's `gasLimit` (stamped as `gas_limit` when it\napplied). Take them over a representative window; a `gas_limit` above `gas_limit_observed` is a\ncap the provider has since lowered. Costs depend on which items share a frame: grouping related\nelements warms storage they share and lowers `item_gas_avg`, shuffling makes the rate uniform\nacross chunks; results align to `args` in either order. A full cache hit or an empty input makes\nno upstream call and carries none of these fields.\n\nDelivery has its own fields: `chunks_override` and `chunks_initcode` (requests sent in each\ndelivery), `override_fallbacks` (ranges re-fetched as initcode, split into\n`override_fallbacks_unsupported`, `override_fallbacks_unproven` and `override_fallbacks_exhausted`\nby what the failed chunk proved). A provider that never honours overrides shows one unsupported\nfallback per request; turn the option off for it.\n\n### `cache`\n\nCaches `eth_getLogs` and `eth_call` through one transport. It composes five layers: oversized-log\nfiltering (`logsSieve`), log enrichment (`logsEnricher`), rate limiting (`rateLimiter`), request\nsplitting (`logsDivider`), and caching. It needs a `chain` on the client, so that it can namespace\ncache keys by chain ID.\n\n```ts\nimport { createPublicClient, http } from 'viem'\nimport { mainnet } from 'viem/chains'\nimport { cache, createSimpleInvalidation } from '@morpho-org/viem-dlc/transports/cache'\nimport { LruStore } from '@morpho-org/viem-dlc/stores'\n\nconst transport = cache(http(rpcUrl), [\n  {\n    binSize: 10_000,\n    store: new LruStore({ maxBytes: 100_000_000 }),\n    invalidationStrategy: createSimpleInvalidation(),\n  },\n  {\n    maxBlockRange: 100_000,\n  },\n  {\n    retryCount: 3,\n    retryDelay: 1_000,\n    blockTimestamp: false,\n  },\n  {\n    maxBytes: 8_192,\n  },\n  {\n    maxRequestsPerSecond: 10,\n    maxBurstRequests: 5,\n    maxConcurrentRequests: 5,\n  },\n])\n\nconst client = createPublicClient({ chain: mainnet, transport })\n```\n\n`binSize` sets the granularity of a cache entry. The transport aligns requests to bin boundaries\nso that overlapping windows hit the same entries, and it sets the `logsDivider` config's `alignTo`\nfrom `binSize` for you. Smaller bins invalidate more precisely and cost more entries; larger bins\ndo the opposite.\n\nThe package ships two invalidation strategies:\n\n- `createSimpleInvalidation(minAgeMs?, maxAgeDays?, numHotBlocks?, avgInvalidationsPerRequest?)` — entries near the chain tip are always refetched; older entries are probabilistically invalidated based on age.\n- `createExponentialInvalidation(alphaAge?, maxAgeDays?, alphaBlocks?, scaleBlocks?)` — exponential model with separate time and block-age factors.\n\n### `failover`\n\nDispatches a request across several RPC providers, each with its own limits. Each branch is a\nfully-built per-provider stack carrying its own `maxBlockRange` and, optionally, its own `gasLimit`.\nDeployless lenses adapt to each node's grant on their own, and the cap sizes the opening wave.\n\n`failover` builds each branch once, at composition time, so stateful inner transports — coalescing\nmutexes, rate-limiter token buckets — persist across requests instead of being rebuilt per call.\nviem's stock `fallback` rebuilds the active branch on every request, which disables those features.\n\n```ts\nimport { createPublicClient, http } from 'viem'\nimport { mainnet } from 'viem/chains'\nimport { failover } from '@morpho-org/viem-dlc/transports'\nimport { cache, createSimpleInvalidation } from '@morpho-org/viem-dlc/transports/cache'\nimport { LruStore } from '@morpho-org/viem-dlc/stores'\n\nconst store = new LruStore({ maxBytes: 100_000_000 })\nconst sharedConfig = { binSize: 10_000, store, invalidationStrategy: createSimpleInvalidation() }\n\nconst transport = failover([\n  cache(http(rpcUrlA), [sharedConfig, { maxBlockRange: 100_000 }]),\n  cache(http(rpcUrlB), [sharedConfig, { maxBlockRange: 10_000 }]),\n])\n\nconst client = createPublicClient({ chain: mainnet, transport })\n```\n\nEach branch's `logsDivider` chunks requests at its own `maxBlockRange`, so neither provider\nis sized for the lowest common denominator. The shared `Store` means partial fetches from\nbranch A persist in cache and are visible to branch B on fallover, making recovery cheap.\n\n`failover` only sees errors that escape per-branch halving (`logsDivider` range-halving and\n`deployless` halving run inside each branch first). By default, contract reverts and\nuser-rejection errors propagate immediately instead of triggering fallover — pass a custom\n`shouldThrow` to override:\n\n```ts\nimport { defaultShouldThrow, failover } from '@morpho-org/viem-dlc/transports'\n\nfailover([branchA, branchB], {\n  shouldThrow: (err) =>\n    defaultShouldThrow(err) ||\n    [401, 402, 403].includes((err as { status?: number })?.status ?? 0),\n})\n```\n\n### `logsDivider`\n\nSplits a large `eth_getLogs` request into smaller chunks, retrying failures and aligning\nboundaries on request. It composes `rateLimiter` for rate and concurrency limits, `logsEnricher`\nfor enrichment, and `logsSieve` for oversized-log filtering.\n\n```ts\nimport { createPublicClient, http } from 'viem'\nimport { logsDivider } from '@morpho-org/viem-dlc/transports'\n\nconst transport = logsDivider(http(rpcUrl), [\n  {\n    maxBlockRange: 100_000,\n    alignTo: 10_000,\n  },\n  {\n    retryCount: 3,\n    retryDelay: 1_000,\n    blockTimestamp: false,\n  },\n  {\n    maxBytes: 8_192,\n  },\n  {\n    maxRequestsPerSecond: 10,\n    maxConcurrentRequests: 5,\n  },\n])\n\nconst client = createPublicClient({ transport })\n\nconst logs = await client.request({\n  method: 'eth_getLogs',\n  params: [\n    filter,\n    undefined,\n    {\n      onLogsResponse: ({ logs, fromBlock, toBlock }) => {\n        /* progressive updates */\n      },\n    },\n  ],\n})\n```\n\n### `logsEnricher`\n\nEnriches `eth_getLogs` responses with data that standard RPCs omit. Today it populates\n`blockTimestamp` by fetching block headers. It drops logs whose block was reorged away, without\nreporting them.\n\n```ts\nimport { createPublicClient, http } from 'viem'\nimport { logsEnricher } from '@morpho-org/viem-dlc/transports'\n\nconst transport = logsEnricher(http(rpcUrl), [{\n  retryCount: 3,\n  retryDelay: 1_000,\n  blockTimestamp: true,\n}])\n\nconst client = createPublicClient({ transport })\n```\n\n### `logsSieve`\n\nFilters `eth_getLogs` responses by estimated UTF-8 payload size. It drops any `RpcLog` whose\nserialized size exceeds `maxBytes`, without reporting it. `logsDivider(...)` and `cache(...)` already\ncompose this transport by default; use `logsSieve(...)` directly when filtering is all you need.\n\n```ts\nimport { createPublicClient, http } from 'viem'\nimport { logsSieve } from '@morpho-org/viem-dlc/transports'\n\nconst transport = logsSieve(http(rpcUrl), [{ maxBytes: 8_192 }])\n\nconst client = createPublicClient({ transport })\n```\n\n### `rateLimiter`\n\nLimits request rate with a token bucket, bounds concurrency, and schedules by priority. With\nobservability enabled it reports `queue_wait_ms` (admission wait, summarized over\nevery crossing in the call), which separates time spent queued behind your own limits\nfrom time spent waiting on the upstream RPC:\n\n```ts\nimport { createPublicClient, http } from 'viem'\nimport { rateLimiter } from '@morpho-org/viem-dlc/transports'\n\nconst transport = rateLimiter(http(rpcUrl), [\n  {\n    maxRequestsPerSecond: 10,\n    maxBurstRequests: 5,\n    maxConcurrentRequests: 3,\n  },\n])\n\nconst client = createPublicClient({ transport })\n\nawait client.request({\n  method: 'eth_getLogs',\n  params: [\n    filter,\n    {\n      __rateLimiter: true,\n      priority: 0,\n    },\n  ],\n})\n```\n\n## Chains\n\nTwo things this package needs are facts of the chain rather than of the caller, so the chain the\nclient is built with carries them, on viem's `extendSchema`:\n\n- **`ethCall.gasWhenUnspecified`** — the frame a request that leaves `gas` unspecified runs in:\n  the provider's whole cap (`providerCap`, geth), or a fixed default below it (`fixedDefault`;\n  Monad grants 8.1M and promotes only on out-of-gas, which a paging envelope never is). The\n  transports send `gasLimit` as each chunk's `gas` on a `fixedDefault` chain and nothing elsewhere,\n  so `gas_limit_observed` reads the true cap wherever a node would reveal it.\n- **`ethCall.gasAboveCap`** — what the node does with a `gas` above the provider's cap: `clamped`\n  (geth) or `rejected` (Monad, `gas limit too high`).\n- **`maxInitcodeSize`** — the largest initcode the chain's nodes accept. An initcode-delivered\n  chunk's bytes *are* the initcode, so this bounds one; EIP-3860's 49 152 nearly everywhere, 262 144\n  on Monad.\n\nNothing is assumed. `ethereumFacts` and `monadFacts` are the two this package has probed; attach one\nof them, or state your own for a chain neither describes, and nothing needs upstreaming here:\n\n```ts\nimport { defineChain } from 'viem'\nimport { monad } from 'viem/chains'\nimport { chainConfig, monadFacts } from '@morpho-org/viem-dlc/chains'\n\nconst chain = defineChain({ ...monad, ...chainConfig }).extend({ viemDlc: monadFacts })\n\nconst client = createPublicClient({ chain, transport: deployless(http(rpcUrl)) })\n```\n\nA fact that is missing when it is needed throws, naming the chain: stating a `gasLimit` needs the\n`eth_call` behaviour and fails when the client is built, and packing a chunk as initcode needs the\ninitcode limit and fails on the first read. An override-delivered read with no `gasLimit` needs\nneither, so it works on a chain carrying nothing — which means a provider that stops honouring state\noverrides can surface the error later than the code that caused it.\n\nThis needs viem 2.43 or newer, where `extendSchema` arrives.\n\n## Stores\n\nKey-value stores. Each implements the `Store` interface:\n\n```ts\ninterface Store {\n  get(key: string): MaybePromise<Buffer[] | null>\n  set(key: string, value: Buffer[]): MaybePromise<void>\n  delete(key: string): MaybePromise<void>\n  flush(): MaybePromise<void>\n}\n```\n\n| Store | Import | Description |\n| --- | --- | --- |\n| `LruStore` | `@morpho-org/viem-dlc/stores` | LRU cache with configurable byte-size limit |\n| `TtlStore` | `@morpho-org/viem-dlc/stores` | Wraps any store with an absolute per-entry TTL — bounds how long a warm tier may diverge from a fresher source behind it |\n| `MemoryStore` | `@morpho-org/viem-dlc/stores` | Simple in-memory Map (prefer `LruStore`) |\n| `HierarchicalStore` | `@morpho-org/viem-dlc/stores` | Layered stores — reads fall through, writes fan out |\n| `ThrottledStore` | `@morpho-org/viem-dlc/stores` | Rate-limits writes, coalescing bursts per key under a max staleness timeout |\n| `CompressedStore` | `@morpho-org/viem-dlc/stores` | Transparent zstd compression (Node/Bun only) |\n| `NodeFsStore` | `@morpho-org/viem-dlc/stores` | One file per key on the local filesystem, atomic writes (Node/Bun only) |\n| `UpstashStore` | `@morpho-org/viem-dlc/stores/upstash` | Upstash Redis with automatic value sharding and atomic writes |\n| `VercelStore` | `@morpho-org/viem-dlc/stores/vercel` | Vercel Blob; `createOptimizedVercelStore` returns the same pre-composed stack as Upstash's |\n\n### Composing stores\n\nStores nest, because anything that wraps a store is itself a store. `createOptimizedUpstashStore`,\nexported from `@morpho-org/viem-dlc/stores/upstash`, returns a pre-composed stack:\n\n```\nLruStore (fast, in-process)\n  └─ ThrottledStore (coalesces writes)\n       └─ UpstashStore (durable, remote)\n```\n\n```ts\nimport { createOptimizedUpstashStore } from '@morpho-org/viem-dlc/stores/upstash'\n\nconst store = createOptimizedUpstashStore({\n  maxRequestBytes: 1_000_000,\n  maxWritesPerSecond: 300,\n})\n```\n\n`TtlStore` wraps any store to cap how long its entries stay warm. Fronting a shared remote with a\nTTL-bounded in-memory tier keeps reads fast while ensuring a cross-instance write is masked for at\nmost `ttlMs` — after which the read falls through to the authoritative remote (a plain `LruStore`\nfront would pin the stale copy for the whole process lifetime):\n\n```ts\nimport { HierarchicalStore, LruStore, TtlStore } from '@morpho-org/viem-dlc/stores'\n\nconst store = new HierarchicalStore(\n  [new TtlStore(new LruStore({ maxBytes: 100_000_000 }), { ttlMs: 60_000 }), remote],\n  { populateOnMiss: true },\n)\n```\n\n## Actions\n\n### `getLogs2`\n\nReplaces viem's `getLogs`, adding cache-layer `search` pre-filtering and streaming `reduce`. It\nneeds a client whose transport uses the `cache()` wrapper — that is, one whose `rpcSchema` is\n`CacheSchema`.\n\n`search` is a regex matched against raw NDJSON before parsing — use hex-encoded values\n(address fragments, topic prefixes) to skip expensive `JSON.parse` calls on irrelevant batches.\n`reduce` folds over decoded logs in order, keeping memory proportional to the accumulator\nrather than the full result set.\n\n```ts\nimport { parseAbiItem } from 'viem'\nimport { getLogs2 } from '@morpho-org/viem-dlc/actions'\n\nconst logs = await getLogs2(client, {\n  address: '0x...',\n  event: parseAbiItem('event Transfer(address indexed, address indexed, uint256)'),\n  fromBlock: 18_000_000n,\n  toBlock: 19_000_000n,\n  search: 'deadbeef',\n  reduce: (acc, log) => {\n    acc.push(log) // log.args is already decoded\n    return acc\n  },\n})\n```\n\n### `readLens`\n\nReads a [paginated lens](#paginated-lenses): the lens's per-item function, called once per element\nof `args` through the `deployless` or `cache` transport. Takes the same deployless-factory\ndescriptor as viem's `readContract` (`abi`, `address`, `factory`, `factoryData`) plus the `policy`\noptions; returns `{ results, skipped }`, with `results` typed from the per-item function's return\ntype and `skipped` the indices into `args` that were not served.\n\n```ts\nimport { readLens } from '@morpho-org/viem-dlc/actions'\n\nconst { results, skipped } = await readLens(client, {\n  ...healthLens.with(MORPHO),          // abi, address, factory, factoryData\n  functionName: 'healthOf',            // f(T) returns (U), one parameter, one value\n  args: inputs,                        // T[]\n  batch: { compress: true },\n  cache: { blobKey: 'blue-health', ttl: 60_000 },\n})\n```\n\nA partial result is a **successful response**: `skipped` merges elements the lens declined\n(its per-item call reverted), elements declined client-side for size, and elements\nthat ran out of gas even when retried alone. Check it if you need every element.\n\n### `eth_call` `policy`\n\nThe lower-level marker `readLens` attaches for you: a `stateOverride` entry that tells the\n`deployless` or `cache` transport to treat a deployless `eth_call` as a paginated lens read. The\ncall is encoded against the array-shaped fragment `f(T[]) returns (U[] results, uint256[] skipped)`,\nwhich never exists on-chain; `arrayifiedAbi` derives it from the per-item function. Use it when you\nwant plain `readContract`/`call` instead of `readLens`. Element bytes round-trip through the cache\nuntouched, so tuples, nested arrays, and other complex element types are supported.\n\n```ts\npolicy(opts: {\n  abi: AbiFunction              // arrayifiedAbi(itemFragment)\n  batch?: {\n    compress?: boolean\n    gas?: { fixed: number; item: { avg: number; stddev?: number } }\n    continuations?: 'fill' | 'eager'\n    envelope?: 'initcode' | 'override'\n  }\n  cache?: {\n    blobKey: string\n    ttl: number\n    delta?: number\n  }\n})\n```\n\n- **`opts.abi`** — the array-shaped fragment from `arrayifiedAbi`. Build it from the per-item\n  fragment in the contract's real ABI: the transport derives the per-item selector from it, and a\n  selector the lens does not implement fails as a page that skips every element.\n- **`opts.batch`** — optional batching config. What bounds a chunk's bytes is not here: the chain\n  states its initcode limit and the transport states the provider's `batchSize`.\n- **`opts.batch.compress`** — FastLZ-compress calldata on the wire, so more elements fit per\n  chunk at the cost of encoding time and decompression gas. The envelope decompresses element by\n  element as it attempts them, so a highly compressible chunk pages like any other and costs\n  nothing before its first element.\n- **`opts.batch.gas`** — the lens's cost, in the units the wide event reports it: `fixed` from\n  `fixed_gas`, what a frame spends before its first attempt less the copy of the chunk's own bytes,\n  `item.avg` and `item.stddev` from `item_gas_avg` and `item_gas_stddev`. Together with the\n  transport's `gasLimit` it sizes the\n  opening wave: a chunk is as many elements as fit the cap after the calldata's intrinsic gas and\n  `fixed`, with the same headroom for the spread that continuations keep. Every later chunk is\n  sized from what the pages report, so this only matters until the first attempt has been costed:\n  understating the cost costs one continuation, overstating it costs extra parallel requests. A property of the\n  lens, so one value serves every provider and chain.\n- **`opts.batch.continuations`** — when the elements a page did not reach are re-sent. `fill`\n  (the default) pools them across pages: a full page's worth goes at once, the remainder once no\n  earlier chunk that could still add to it is in flight, so small tails from many pages travel\n  together. `eager` sends every tail as soon as its page lands: more requests, no waiting.\n  Anything else reads as `fill`.\n- **`opts.batch.envelope`** — how a chunk reaches the node. `initcode` (the default) creates the\n  envelope with the elements trailing it, bounded by the chain's initcode cap. `override` calls the\n  envelope at a fixed address placed by `eth_call`'s state-override parameter, so the frame's gas is\n  the only bound; a provider that does not honour overrides is detected on the opening wave and the\n  range re-fetched as initcode, at the cost of one wasted wave per request, which\n  `override_fallbacks_unsupported` reports. It pays only when bytes bind, which the wide event says: `(gas_limit_observed − fixed_gas) /\n  item_gas_avg` well above `elements_requested / nominal_batches`.\n- **`opts.cache`** — optional cache config, honored by `cache(...)` only. If omitted,\n  or when used with `deployless(...)`, `batch` is still honored without caching.\n- **`opts.cache.blobKey`** — identifies the backing store blob. Requests with the same\n  `blobKey` share storage; different `blobKey`s are isolated into different blobs.\n- **`opts.cache.ttl`** — maximum age in milliseconds before a cached entry is\n  considered stale.\n- **Semantic requirement** — the per-item function must be elementwise: each served value, and\n  each decline, depends only on its own element plus shared chain state, never on other elements,\n  their multiplicity, their order, or the gas the frame happened to have.\n- **`opts.cache.delta`** — XFetch early-refresh scale in milliseconds. On each\n  freshness check the handler samples `u ~ Uniform(0, 1]` and treats the entry as\n  stale once `age - delta * ln(u) >= ttl`, so entries may refresh up to several\n  `delta` before `ttl` but never later. Desynchronizes refreshes across many keys\n  populated together, avoiding stampedes. Based on Vattani et al., \"Optimal\n  Probabilistic Cache Stampede Prevention\" (2015), assuming constant recompute\n  cost. Defaults to 0 (disabled).\n\nThe cache derives keys from `(targetTo, factory, factoryData, selector, inputElement)`,\nso repeat elements collapse into a single blob entry and novel elements are appended to\nthe blob on the next fetch. The handler rejects every tx envelope field besides `data`,\nincluding `from`, `gas` and `value`.\n\n#### Paginated lenses\n\nA lens is one `view` function over one element. That is the whole contract:\n\n```solidity\ncontract BlueHealthLens {\n  IMorpho immutable morpho;\n  constructor(IMorpho _morpho) { morpho = _morpho; }\n\n  function healthOf(Input calldata x) external view returns (Health memory) {\n    Market memory m = morpho.market(x.id);\n    require(m.lastUpdate != 0);          // permanent condition → skipped\n    return _health(x.id, m, x.borrower);\n  }\n}\n```\n\nThe envelope — the bytecode this package puts in front of every deployless call — reads the element\narray, calls the per-item function **once per element in its own frame** with all remaining gas,\nand deposits each result straight into the response. Per element, exactly one of three things\nhappens. The call **returns**: the result is kept. It **reverts** (any reason, any data): the\nindex goes to `skipped` — so keep per-item reverts to conditions that are permanent, since a\nbroken dependency is skipped the same way, and the revert reason is not surfaced. It **runs out\nof gas**: EIP-150 guarantees the envelope keeps 1/64 of what it forwarded, which is enough to\nreport that in-band and stop; the transport retries the element once on its own, where it holds\nthe largest frame a node can grant, and only if it dies there too does it land in the caller's\n`skipped`. Before each attempt the envelope also checks that the frame can pay for the memory the\nattempt would touch and still report an outcome, priced from the fee schedule; below that, it\nstops (or, for element 0, reports it unresolved without attempting).\nSo a frame never dies mid-page, and the prologue grows with the chunk only by the copy of its\nbytes, which the packer prices; a constructor too heavy for a node's cap is reported as an error\nrather than halved.\n\nNo element type needs a number from the author: static sizes come from the ABI, dynamic inputs\ncarry their length on the wire, and dynamic results carry theirs in returndata. The envelope\nrefuses an ill-formed result (`MalformedResult`, surfaced as a protocol error rather than halved).\n\n**Shared work goes in the constructor.** Item frames share no memory, but the counterfactual\ndeploy runs the constructor inside the same `eth_call`: immutables hold value types, and storage\nwritten in the constructor is readable from every per-item call. EIP-2929 warmth is per\ntransaction, so the first element to touch a market's storage warms it for all later elements in\nthe chunk. The constructor runs once per chunk in the prologue, so keep it bounded: one that\nexhausts the node's cap fails the request outright.\n\nWhat the envelope cannot enforce, and the lens must still honor: **skips are deterministic** (a\nrevert means invalid input or a permanently failing element, never something more gas would pass)\nand **values are batching-invariant** (neither a served value nor a decline may depend on\nposition, batch composition, or `gasleft()`).\n\n**What the caller sees.** `readLens` returns `{ results, skipped }` typed from the per-item\nfunction. Through plain viem, the chunked calls aggregate into one page over the whole input, in\nthe shape `arrayifiedAbi` declares, so `readContract` and `decodeFunctionResult` work too:\n\n```ts\nconst pageAbi = arrayifiedAbi(getAbiItem({ abi: healthLens.abi, name: 'healthOf' }))\n\nconst [results, skipped] = await readContract(client, {\n  ...healthLens.with(MORPHO),\n  abi: [pageAbi],                       // after the spread: the real ABI has no array function\n  functionName: 'healthOf',\n  args: [inputs],\n  stateOverride: [policy({ abi: pageAbi })],\n})\n```\n\n`skipped` is rebased onto the caller's input, and expands across deduplicated inputs, so its\nindices always address the array you passed. Elements that ran out of gas even alone depend on\nthe node's `eth_call` gas cap, so a provider with a higher cap might serve them;\n`elements_unresolved` counts them in the wide event.\n\n### `getDeploymentBlockNumber`\n\nFinds the block a contract was deployed at, by binary search over `getCode`.\n\n```ts\nimport { createPublicClient, http } from 'viem'\nimport { mainnet } from 'viem/chains'\nimport { getDeploymentBlockNumber } from '@morpho-org/viem-dlc/actions'\n\nconst client = createPublicClient({ chain: mainnet, transport: http() })\n\nconst block = await getDeploymentBlockNumber(client, {\n  address: '0x...',\n})\n```\n\n## Utilities\n\nExported from `@morpho-org/viem-dlc/utils`:\n\n- `divideBlockRange` / `mergeBlockRanges` / `halveBlockRange` — block range manipulation\n- `resolveBlockNumber` / `extractRangeFromFilter` / `isInBlockRange` — block number helpers\n- `classifyBlockRangeError` — classify RPC errors as range-related, timeout-like, or neither\n- `createCoalescingMutex` — per-resource leader/follower batching\n- `createTokenBucket` / `createRateLimit` — rate limiting primitives\n- `cyrb64Hash` — fast string hashing\n- `stringify` / `parse` / `estimateUtf8Bytes` — JSON serialization with bigint support\n- `pick` / `omit` — object helpers\n- `measureUtf8Bytes` / `shardString` — string utilities\n\nThe envelope's codecs are exported separately, from `@morpho-org/viem-dlc/utils/deployless`, for\nbuilding fixtures and mocks: everything needed to read a chunk off a request the transports sent and\nto answer it the way a node running the envelope would.\n\n- `unwrapDeploylessFactoryCall` / `encodeEnvelopeArgs` / `envelopeConfig` / `deliveryParams` — the\n  outbound request, both deliveries\n- `decodeEnvelopeRevert`, `FACTORY_BYTECODE_REVERT`, `ENVELOPE_ADDRESS`, `OK_SENTINEL` and the other\n  sentinels — what the envelope reverts with, and what identifies it\n- `arrayifiedAbi` / `resolveArrayFunction` / `abiToArray` / `arrayToAbi` — the caller's array\n- `arrayToWire` / `wireToArray` / `streamToPage` / `pageToStream` / `pageToAbi` — the envelope's wire\n  and the page it reverts\n\nThe packer, the cost model and the FastLZ codec stay internal: their shapes follow the\nimplementation rather than the wire.\n","readmeFilename":""}