{"_id":"@amadeni/convex-lib","_rev":"9-4488921d4e7fc9c0cac8039e359726d1","name":"@amadeni/convex-lib","dist-tags":{"latest":"0.1.8"},"versions":{"0.1.0":{"name":"@amadeni/convex-lib","version":"0.1.0","keywords":["convex","zod","typescript","library"],"author":{"name":"Amadeni","email":"nicolai.hallberg@amadeni.ai"},"license":"MIT","_id":"@amadeni/convex-lib@0.1.0","maintainers":[{"name":"amadeni_ai","email":"admin@amadeni.ai"}],"homepage":"https://github.com/amadeni/convex-lib#readme","bugs":{"url":"https://github.com/amadeni/convex-lib/issues"},"dist":{"shasum":"0c89e08ce940ea079ceafa116376d6dfae0b4ece","tarball":"https://registry.npmjs.org/@amadeni/convex-lib/-/convex-lib-0.1.0.tgz","fileCount":23,"integrity":"sha512-UesjCT69RyERl49PerG6Vd06eIhn7bMJhzP7phQWjexmzaW84JZr0Zjh9u4t6uRzA2fm8TYbh+T8VmIEtOJZbA==","signatures":[{"sig":"MEYCIQDgfvd+O2bSUrj2aPvfTFoT6lYG8LGH8vtuX8z8Fv+hegIhAMeFJ5wrUEvzlnrG5RsommdbwD/s0q37K2Pj1K7+MJis","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17287},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"820bea8a2d7d77140b821a23c307411737206c2c","scripts":{"ci":"pnpm run prettier:check && pnpm run lint && pnpm run ts && pnpm run check-spelling && pnpm run test","ts":"tsc --noEmit --incremental false","lint":"eslint src/","test":"vitest run","build":"tsc","prepare":"tsc","release":"pnpm version patch && git push && git push --tags","re-release":"git tag -d v$(node -p \"require('./package.json').version\") && git push origin :refs/tags/v$(node -p \"require('./package.json').version\") && git tag v$(node -p \"require('./package.json').version\") && git push --tags","release:major":"pnpm version major && git push && git push --tags","release:minor":"pnpm version minor && git push && git push --tags","check-spelling":"cspell '**/*.*' --no-progress","prepublishOnly":"pnpm run build","prettier:check":"prettier --check .","prettier:write":"prettier --write ."},"_npmUser":{"name":"amadeni_ai","email":"admin@amadeni.ai"},"repository":{"url":"git+https://github.com/amadeni/convex-lib.git","type":"git"},"_npmVersion":"10.9.2","description":"Reusable Convex library primitives, errors, and Zod helpers","directories":{},"_nodeVersion":"22.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.7.0+sha512.6b865ad4b62a1d9842b61d674a393903b871d9244954f652b8842c2b553c72176b278f64c463e52d40fff8aba385c235c8c9ecf5cc7de4fd78b8bb6d49633ab6","devDependencies":{"zod":"^3.25.76","convex":"^1.32.0","cspell":"^9.7.0","eslint":"^10.0.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.0.0","@types/node":"^25.3.3","convex-helpers":"^0.1.100","typescript-eslint":"^8.56.1"},"peerDependencies":{"zod":">=3.0.0","convex":">=1.0.0","convex-helpers":">=0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/convex-lib_0.1.0_1773398826440_0.636168711349774","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Not maintained here anymore"},"0.1.1":{"name":"@amadeni/convex-lib","version":"0.1.1","keywords":["convex","zod","typescript","library"],"author":{"name":"Amadeni","email":"nicolai.hallberg@amadeni.ai"},"license":"MIT","_id":"@amadeni/convex-lib@0.1.1","maintainers":[{"name":"amadeni_ai","email":"admin@amadeni.ai"}],"homepage":"https://github.com/amadeni/convex-lib#readme","bugs":{"url":"https://github.com/amadeni/convex-lib/issues"},"dist":{"shasum":"ec07a52722922b6a93996dd2bcc8b72d660f1e17","tarball":"https://registry.npmjs.org/@amadeni/convex-lib/-/convex-lib-0.1.1.tgz","fileCount":23,"integrity":"sha512-s771Ph8fmGThmmQLzdQMG4g68hBnb3Mnku6yyfM4SxFqKg93t+6EnuzqhngMt8106ZutsXe0RLJ1a+iRg/H0yg==","signatures":[{"sig":"MEUCIAs39tytKD2GpoWXTKu1zANs1PO7Cfcnd/kMy0xFxrfQAiEAv/tbmiLQ88PPH2wU4fmBX2J+jWZwTxdarbgTyYsrQBA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@amadeni%2fconvex-lib@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":17287},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"1995aef36eca5313375305bbaf2af9b9c8411415","scripts":{"ci":"pnpm run prettier:check && pnpm run lint && pnpm run ts && pnpm run check-spelling && pnpm run test","ts":"tsc --noEmit --incremental false","lint":"eslint src/","test":"vitest run","build":"tsc","prepare":"tsc","release":"pnpm version patch && git push && git push --tags","re-release":"git tag -d v$(node -p \"require('./package.json').version\") && git push origin :refs/tags/v$(node -p \"require('./package.json').version\") && git tag v$(node -p \"require('./package.json').version\") && git push --tags","release:major":"pnpm version major && git push && git push --tags","release:minor":"pnpm version minor && git push && git push --tags","check-spelling":"cspell '**/*.*' --no-progress","prepublishOnly":"pnpm run build","prettier:check":"prettier --check .","prettier:write":"prettier --write ."},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cdb7dd47-b2a0-4357-8080-66ab40dd3537"}},"repository":{"url":"git+https://github.com/amadeni/convex-lib.git","type":"git"},"_npmVersion":"11.11.1","description":"Reusable Convex library primitives, errors, and Zod helpers","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.7.0+sha512.6b865ad4b62a1d9842b61d674a393903b871d9244954f652b8842c2b553c72176b278f64c463e52d40fff8aba385c235c8c9ecf5cc7de4fd78b8bb6d49633ab6","devDependencies":{"zod":"^3.25.76","convex":"^1.32.0","cspell":"^9.7.0","eslint":"^10.0.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.0.0","@types/node":"^25.3.3","convex-helpers":"^0.1.100","typescript-eslint":"^8.56.1"},"peerDependencies":{"zod":">=3.0.0","convex":">=1.0.0","convex-helpers":">=0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/convex-lib_0.1.1_1773398984125_0.7631164459578461","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Not maintained here anymore"},"0.1.3":{"name":"@amadeni/convex-lib","version":"0.1.3","keywords":["convex","zod","typescript","library"],"author":{"name":"Amadeni","email":"nicolai.hallberg@amadeni.ai"},"license":"MIT","_id":"@amadeni/convex-lib@0.1.3","maintainers":[{"name":"amadeni_ai","email":"admin@amadeni.ai"}],"homepage":"https://github.com/amadeni/convex-lib#readme","bugs":{"url":"https://github.com/amadeni/convex-lib/issues"},"dist":{"shasum":"e3f5b9523070f79060d0277150798842b70e57a9","tarball":"https://registry.npmjs.org/@amadeni/convex-lib/-/convex-lib-0.1.3.tgz","fileCount":31,"integrity":"sha512-M8aaxpcLc6bAkWKqYSuZi21xkSjWRxknfCdDXn+vUnPMedcZUBCMma9NHrw+M7AXA2ZPHlLKJVMmzs2cQWytHA==","signatures":[{"sig":"MEUCIF0z1YnqjRhZb4+sA2T1uWiqmlTzYatn7aYSkedMPWM1AiEAqxmeZfqcIv/mYrqt8A4gU8pEv6+FTqh9sJngJQe5Mw4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@amadeni%2fconvex-lib@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":34182},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"e1e1182edfbc6718e828f2029c4d37d506d693c2","scripts":{"ci":"pnpm run prettier:check && pnpm run lint && pnpm run ts && pnpm run check-spelling && pnpm run test","ts":"tsc --noEmit --incremental false","lint":"eslint src/","test":"vitest run","build":"tsc","prepare":"tsc","release":"pnpm version patch && git push && git push --tags","re-release":"git tag -d v$(node -p \"require('./package.json').version\") && git push origin :refs/tags/v$(node -p \"require('./package.json').version\") && git tag v$(node -p \"require('./package.json').version\") && git push --tags","release:major":"pnpm version major && git push && git push --tags","release:minor":"pnpm version minor && git push && git push --tags","check-spelling":"cspell '**/*.*' --no-progress","prepublishOnly":"pnpm run build","prettier:check":"prettier --check .","prettier:write":"prettier --write ."},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cdb7dd47-b2a0-4357-8080-66ab40dd3537"}},"repository":{"url":"git+https://github.com/amadeni/convex-lib.git","type":"git"},"_npmVersion":"11.11.1","description":"Reusable Convex library primitives, errors, and Zod helpers","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.7.0+sha512.6b865ad4b62a1d9842b61d674a393903b871d9244954f652b8842c2b553c72176b278f64c463e52d40fff8aba385c235c8c9ecf5cc7de4fd78b8bb6d49633ab6","devDependencies":{"zod":"^3.25.76","convex":"^1.32.0","cspell":"^9.7.0","eslint":"^10.0.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.0.0","@types/node":"^25.3.3","convex-helpers":"^0.1.100","typescript-eslint":"^8.56.1"},"peerDependencies":{"zod":">=3.0.0","convex":">=1.0.0","convex-helpers":">=0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/convex-lib_0.1.3_1773403873348_0.0922400099855547","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Not maintained here anymore"},"0.1.4":{"name":"@amadeni/convex-lib","version":"0.1.4","keywords":["convex","zod","typescript","library"],"author":{"name":"Amadeni","email":"nicolai.hallberg@amadeni.ai"},"license":"MIT","_id":"@amadeni/convex-lib@0.1.4","maintainers":[{"name":"amadeni_ai","email":"admin@amadeni.ai"}],"homepage":"https://github.com/amadeni/convex-lib#readme","bugs":{"url":"https://github.com/amadeni/convex-lib/issues"},"dist":{"shasum":"e2bd7f09b4577e81b4e1669f66d005095e61084f","tarball":"https://registry.npmjs.org/@amadeni/convex-lib/-/convex-lib-0.1.4.tgz","fileCount":35,"integrity":"sha512-0zwWG8RzdNuKBzEJe4fEXlOk54rLyN+q+RWSFeLdDgosrdcIrJjY/1qZ9tDk2UMn+OEt7To2EW2b/nFQx1omZw==","signatures":[{"sig":"MEQCIDW8mMAlSvt14hZGigJAkKfVAFGt7WRatwHL8UBaNg3XAiAhLa/2TESCTZvkAGYcvdK8+HBfdX+CenWPplFQ5XDssg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@amadeni%2fconvex-lib@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":44306},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"65a5214c1df7eed319c3c05be0b7635bda65a354","scripts":{"ci":"pnpm run prettier:check && pnpm run lint && pnpm run ts && pnpm run check-spelling && pnpm run test","ts":"tsc --noEmit --incremental false","lint":"eslint src/","test":"vitest run","build":"tsc","prepare":"tsc","release":"pnpm version patch && git push && git push --tags","re-release":"git tag -d v$(node -p \"require('./package.json').version\") && git push origin :refs/tags/v$(node -p \"require('./package.json').version\") && git tag v$(node -p \"require('./package.json').version\") && git push --tags","release:major":"pnpm version major && git push && git push --tags","release:minor":"pnpm version minor && git push && git push --tags","check-spelling":"cspell '**/*.*' --no-progress","prepublishOnly":"pnpm run build","prettier:check":"prettier --check .","prettier:write":"prettier --write ."},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cdb7dd47-b2a0-4357-8080-66ab40dd3537"}},"repository":{"url":"git+https://github.com/amadeni/convex-lib.git","type":"git"},"_npmVersion":"11.11.1","description":"Reusable Convex library primitives, errors, and Zod helpers","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.7.0+sha512.6b865ad4b62a1d9842b61d674a393903b871d9244954f652b8842c2b553c72176b278f64c463e52d40fff8aba385c235c8c9ecf5cc7de4fd78b8bb6d49633ab6","devDependencies":{"zod":"^3.25.76","convex":"^1.32.0","cspell":"^9.7.0","eslint":"^10.0.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.0.0","@types/node":"^25.3.3","convex-helpers":"^0.1.100","typescript-eslint":"^8.56.1"},"peerDependencies":{"zod":">=3.0.0","convex":">=1.0.0","convex-helpers":">=0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/convex-lib_0.1.4_1773426090880_0.01953050244828103","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Not maintained here anymore"},"0.1.5":{"name":"@amadeni/convex-lib","version":"0.1.5","keywords":["convex","zod","typescript","library"],"author":{"name":"Amadeni","email":"nicolai.hallberg@amadeni.ai"},"license":"MIT","_id":"@amadeni/convex-lib@0.1.5","maintainers":[{"name":"amadeni_ai","email":"admin@amadeni.ai"}],"homepage":"https://github.com/amadeni/convex-lib#readme","bugs":{"url":"https://github.com/amadeni/convex-lib/issues"},"dist":{"shasum":"f123910118e27b0749ad3b26cc8a4b6507df7f43","tarball":"https://registry.npmjs.org/@amadeni/convex-lib/-/convex-lib-0.1.5.tgz","fileCount":35,"integrity":"sha512-meN77e5SNnftF+GMPDtOyqlEsUz0fNbHABmltn1j0oxquqFvr1W/5EgRL0WLD8Z+1Nj6nViw1ZXTMWGA542p/Q==","signatures":[{"sig":"MEYCIQDNazavGOiPbBiLynt/A4HVqlSzNzThnrvjmUEHPfSwsgIhAJ2JXpXPw2neWzjojdFRmMFWrie5tOM17dKSMYIU2okK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@amadeni%2fconvex-lib@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":51022},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"d6211a7323c4a56364f2f4318ff831bf5e539bb6","scripts":{"ci":"pnpm run prettier:check && pnpm run lint && pnpm run ts && pnpm run check-spelling && pnpm run test","ts":"tsc --noEmit --incremental false","lint":"eslint src/","test":"vitest run","build":"tsc","prepare":"tsc","release":"pnpm version patch && git push && git push --tags","re-release":"git tag -d v$(node -p \"require('./package.json').version\") && git push origin :refs/tags/v$(node -p \"require('./package.json').version\") && git tag v$(node -p \"require('./package.json').version\") && git push --tags","release:major":"pnpm version major && git push && git push --tags","release:minor":"pnpm version minor && git push && git push --tags","check-spelling":"cspell '**/*.*' --no-progress","prepublishOnly":"pnpm run build","prettier:check":"prettier --check .","prettier:write":"prettier --write ."},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cdb7dd47-b2a0-4357-8080-66ab40dd3537"}},"repository":{"url":"git+https://github.com/amadeni/convex-lib.git","type":"git"},"_npmVersion":"11.11.1","description":"Convex auth primitives and type validation toolbox","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.7.0+sha512.6b865ad4b62a1d9842b61d674a393903b871d9244954f652b8842c2b553c72176b278f64c463e52d40fff8aba385c235c8c9ecf5cc7de4fd78b8bb6d49633ab6","devDependencies":{"zod":"^3.25.76","convex":"^1.32.0","cspell":"^9.7.0","eslint":"^10.0.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.0.0","@types/node":"^25.3.3","convex-helpers":"^0.1.100","typescript-eslint":"^8.56.1"},"peerDependencies":{"zod":">=3.0.0","convex":">=1.0.0","convex-helpers":">=0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/convex-lib_0.1.5_1773590724251_0.1714307267486952","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Not maintained here anymore"},"0.1.6":{"name":"@amadeni/convex-lib","version":"0.1.6","keywords":["convex","zod","typescript","library"],"author":{"name":"Amadeni","email":"nicolai.hallberg@amadeni.ai"},"license":"MIT","_id":"@amadeni/convex-lib@0.1.6","maintainers":[{"name":"amadeni_ai","email":"admin@amadeni.ai"}],"homepage":"https://github.com/amadeni/convex-lib#readme","bugs":{"url":"https://github.com/amadeni/convex-lib/issues"},"dist":{"shasum":"5eff06d119e03dc6b89f6e53964f77f1c35bbc5a","tarball":"https://registry.npmjs.org/@amadeni/convex-lib/-/convex-lib-0.1.6.tgz","fileCount":39,"integrity":"sha512-04lPTS8QzULa1A8jUVwm1PgO/PTVn8DsPgY3EbBXqfWs+TeTBBwAhmMLwsyx5Y4+JGV0GZhaiQz23KT8NxPmCw==","signatures":[{"sig":"MEYCIQCMIduvt1/NyE6XdQCv30/BLyGnwRdkPWwZTEVpUrmumgIhAIIprJfIAk+e8cmX8lguMBf6ZRDOd09sX/VPagyG6zHl","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@amadeni%2fconvex-lib@0.1.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":77823},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"db69634a056fb542d06d2abb105bdf0b8cfa65bb","scripts":{"ci":"pnpm run prettier:check && pnpm run lint && pnpm run ts && pnpm run check-spelling && pnpm run test","ts":"tsc --noEmit --incremental false && tsc -p tsconfig.type-tests.json --noEmit","lint":"eslint src/","test":"vitest run","build":"tsc","prepare":"tsc","release":"pnpm version patch && git push && git push --tags","re-release":"git tag -d v$(node -p \"require('./package.json').version\") && git push origin :refs/tags/v$(node -p \"require('./package.json').version\") && git tag v$(node -p \"require('./package.json').version\") && git push --tags","release:major":"pnpm version major && git push && git push --tags","release:minor":"pnpm version minor && git push && git push --tags","check-spelling":"cspell '**/*.*' --no-progress","prepublishOnly":"pnpm run build","prettier:check":"prettier --check .","prettier:write":"prettier --write ."},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cdb7dd47-b2a0-4357-8080-66ab40dd3537"}},"repository":{"url":"git+https://github.com/amadeni/convex-lib.git","type":"git"},"_npmVersion":"11.11.1","description":"Convex auth primitives and type validation toolbox","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.7.0+sha512.6b865ad4b62a1d9842b61d674a393903b871d9244954f652b8842c2b553c72176b278f64c463e52d40fff8aba385c235c8c9ecf5cc7de4fd78b8bb6d49633ab6","devDependencies":{"zod":"^3.25.76","convex":"^1.32.0","cspell":"^9.7.0","eslint":"^10.0.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.0.0","@types/node":"^25.3.3","convex-helpers":"^0.1.100","typescript-eslint":"^8.56.1"},"peerDependencies":{"zod":">=3.0.0","convex":">=1.0.0","convex-helpers":">=0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/convex-lib_0.1.6_1773594307536_0.6222547973329786","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Not maintained here anymore"},"0.1.7":{"name":"@amadeni/convex-lib","version":"0.1.7","keywords":["convex","zod","typescript","library"],"author":{"name":"Amadeni","email":"nicolai.hallberg@amadeni.ai"},"license":"MIT","_id":"@amadeni/convex-lib@0.1.7","maintainers":[{"name":"amadeni_ai","email":"admin@amadeni.ai"}],"homepage":"https://github.com/amadeni/convex-lib#readme","bugs":{"url":"https://github.com/amadeni/convex-lib/issues"},"dist":{"shasum":"e2f7e0b752f60cb41dc1751392b04367ab623434","tarball":"https://registry.npmjs.org/@amadeni/convex-lib/-/convex-lib-0.1.7.tgz","fileCount":47,"integrity":"sha512-isCnNMrG+78lr9bTgLnf9yPfLPdjnPvhkAJ3OuCC+1b8o2XObsqZvw5hiTnLHqVgNvinZQXzApvNwhhu7ViEOg==","signatures":[{"sig":"MEUCIQDD0R3oyYeyd9HB9zaoi4KTcvRosdNilrzaM0OTMjWa0QIgaiQDEfca2AGYfRTun23fiJr4TOeEXRwC6uT9qBot9TE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@amadeni%2fconvex-lib@0.1.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":114507},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"1e6a814b2e96c7bb88dc52caf06e52d7b6ad464d","scripts":{"ci":"pnpm run prettier:check && pnpm run lint && pnpm run ts && pnpm run check-spelling && pnpm run test","ts":"tsc --noEmit --incremental false && tsc -p tsconfig.type-tests.json --noEmit","lint":"eslint src/","test":"vitest run","build":"tsc","prepare":"tsc","release":"pnpm version patch && git push && git push --tags","re-release":"git tag -d v$(node -p \"require('./package.json').version\") && git push origin :refs/tags/v$(node -p \"require('./package.json').version\") && git tag v$(node -p \"require('./package.json').version\") && git push --tags","release:major":"pnpm version major && git push && git push --tags","release:minor":"pnpm version minor && git push && git push --tags","check-spelling":"cspell '**/*.*' --no-progress","prepublishOnly":"pnpm run build","prettier:check":"prettier --check .","prettier:write":"prettier --write ."},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cdb7dd47-b2a0-4357-8080-66ab40dd3537"}},"repository":{"url":"git+https://github.com/amadeni/convex-lib.git","type":"git"},"_npmVersion":"11.11.1","description":"Convex auth primitives and type validation toolbox","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.7.0+sha512.6b865ad4b62a1d9842b61d674a393903b871d9244954f652b8842c2b553c72176b278f64c463e52d40fff8aba385c235c8c9ecf5cc7de4fd78b8bb6d49633ab6","devDependencies":{"zod":"^3.25.76","convex":"^1.32.0","cspell":"^9.7.0","eslint":"^10.0.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.0.0","@types/node":"^25.3.3","convex-helpers":"^0.1.100","typescript-eslint":"^8.56.1"},"peerDependencies":{"zod":">=3.0.0","convex":">=1.0.0","convex-helpers":">=0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/convex-lib_0.1.7_1773596180490_0.9289771352228913","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Not maintained here anymore"},"0.1.8":{"name":"@amadeni/convex-lib","version":"0.1.8","keywords":["convex","zod","typescript","library"],"author":{"name":"Amadeni","email":"nicolai.hallberg@amadeni.ai"},"license":"MIT","_id":"@amadeni/convex-lib@0.1.8","maintainers":[{"name":"amadeni_ai","email":"admin@amadeni.ai"}],"homepage":"https://github.com/amadeni/convex-lib#readme","bugs":{"url":"https://github.com/amadeni/convex-lib/issues"},"dist":{"shasum":"70acec935adefdee852bc93be91f8897f327ef2f","tarball":"https://registry.npmjs.org/@amadeni/convex-lib/-/convex-lib-0.1.8.tgz","fileCount":51,"integrity":"sha512-Xb5a4RKJwnq9BaBanqEpPfIFcu2zsPfGdm+M3pZvocyiD4mAfBn+akcxUEYYG1eRV06dMCvWPZKDQz0qpr037Q==","signatures":[{"sig":"MEYCIQDQ++7+KqacoJy5vfyBMegpzJvZkIwI8CKFawKe5IiT8AIhAK8qFZofE4o4qPm3rNJ+wtP29Cu1FS+V3C5dgVykbyMl","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@amadeni%2fconvex-lib@0.1.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":122316},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"a06f1c9b7bac77f86e254883a0c09f2cb1802a76","scripts":{"ci":"pnpm run prettier:check && pnpm run lint && pnpm run ts && pnpm run check-spelling && pnpm run test","ts":"tsc --noEmit --incremental false && tsc -p tsconfig.type-tests.json --noEmit","lint":"eslint src/","test":"vitest run","build":"tsc","prepare":"tsc","release":"pnpm version patch && git push && git push --tags","re-release":"git tag -d v$(node -p \"require('./package.json').version\") && git push origin :refs/tags/v$(node -p \"require('./package.json').version\") && git tag v$(node -p \"require('./package.json').version\") && git push --tags","release:major":"pnpm version major && git push && git push --tags","release:minor":"pnpm version minor && git push && git push --tags","check-spelling":"cspell '**/*.*' --no-progress","prepublishOnly":"pnpm run build","prettier:check":"prettier --check .","prettier:write":"prettier --write ."},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cdb7dd47-b2a0-4357-8080-66ab40dd3537"}},"repository":{"url":"git+https://github.com/amadeni/convex-lib.git","type":"git"},"_npmVersion":"11.11.1","description":"Convex auth primitives and type validation toolbox","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.7.0+sha512.6b865ad4b62a1d9842b61d674a393903b871d9244954f652b8842c2b553c72176b278f64c463e52d40fff8aba385c235c8c9ecf5cc7de4fd78b8bb6d49633ab6","devDependencies":{"zod":"^3.25.76","convex":"^1.32.0","cspell":"^9.7.0","eslint":"^10.0.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.0.0","@types/node":"^25.3.3","convex-helpers":"^0.1.100","typescript-eslint":"^8.56.1"},"peerDependencies":{"zod":">=3.0.0","convex":">=1.0.0","convex-helpers":">=0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/convex-lib_0.1.8_1773597868105_0.0124775206792056","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Not maintained here anymore"}},"time":{"created":"2026-03-13T10:47:06.350Z","modified":"2026-09-18T12:21:42.949Z","0.1.0":"2026-03-13T10:47:06.597Z","0.1.1":"2026-03-13T10:49:44.273Z","0.1.3":"2026-03-13T12:11:13.495Z","0.1.4":"2026-03-13T18:21:31.049Z","0.1.5":"2026-03-15T16:05:24.385Z","0.1.6":"2026-03-15T17:05:07.675Z","0.1.7":"2026-03-15T17:36:20.637Z","0.1.8":"2026-03-15T18:04:28.267Z"},"bugs":{"url":"https://github.com/amadeni/convex-lib/issues"},"author":{"name":"Amadeni","email":"nicolai.hallberg@amadeni.ai"},"license":"MIT","homepage":"https://github.com/amadeni/convex-lib#readme","keywords":["convex","zod","typescript","library"],"repository":{"url":"git+https://github.com/amadeni/convex-lib.git","type":"git"},"description":"Convex auth primitives and type validation toolbox","maintainers":[{"name":"amadeni_ai","email":"admin@amadeni.ai"}],"readme":"# @amadeni/convex-lib\n\nTyped auth, admin, capability, and authorization primitives for Convex apps.\n\nThe library is designed for real Convex projects using:\n\n- generated `convex/_generated/*` builders and context types\n- `convex-helpers`\n- Convex Auth\n- strict TypeScript\n- capability-based access control\n- action/query/mutation wrappers\n\n## Install\n\n```bash\npnpm add @amadeni/convex-lib convex convex-helpers zod\n```\n\n## Recommended Setup\n\nFor most apps, keep one central [`convex/lib.ts`](./convex/lib.ts) setup file and export all wrappers from a single composer:\n\n```ts\nimport {\n  createActionResolvers,\n  createCapabilityChecker,\n  createConvexLib,\n  createError,\n  createPermissionCheckerFromCapabilities,\n  typedRef,\n} from '@amadeni/convex-lib';\nimport { action, mutation, query } from './_generated/server';\n\n// Keep generated function refs outside `convex/` to avoid API cycles.\nimport {\n  getCapabilityOverrideRef,\n  getPermissionEntryRef,\n  getUserBySubjectRef,\n} from '../lib/convex-refs';\n\nconst capabilityRegistry = {\n  'posts.manage': {\n    label: 'Manage posts',\n    category: 'content',\n    defaultRoles: ['admin', 'editor'] as const,\n    grants: [{ resource: 'posts', actions: ['read', 'update'] as const }],\n  },\n  'posts.delete': {\n    label: 'Delete posts',\n    category: 'content',\n    defaultRoles: ['admin'] as const,\n    grants: {\n      posts: {\n        delete: true as const,\n      },\n    },\n  },\n};\n\nconst resolveUser = async ctx => {\n  const identity = await ctx.auth.getUserIdentity();\n  if (!identity) {\n    throw createError.unauthenticated();\n  }\n\n  const user = await ctx.db\n    .query('users')\n    .withIndex('by_subject', q => q.eq('subject', identity.subject))\n    .unique();\n\n  if (!user) {\n    throw createError.notFound('users', identity.subject);\n  }\n\n  return user;\n};\n\nconst capabilityChecker = createCapabilityChecker({\n  registry: capabilityRegistry,\n  getOverride: async (ctx, key) => {\n    return await ctx.db\n      .query('capabilityOverrides')\n      .withIndex('by_key', q => q.eq('key', key))\n      .first();\n  },\n});\n\nconst permissionChecker = createPermissionCheckerFromCapabilities({\n  registry: capabilityRegistry,\n  getOverride: async (ctx, key) => {\n    return await ctx.db\n      .query('capabilityOverrides')\n      .withIndex('by_key', q => q.eq('key', key))\n      .first();\n  },\n  getDocument: async (ctx, _table, id) => await ctx.db.get(id),\n  defaultAllow: false,\n});\n\nconst actionRuntime = createActionResolvers({\n  registry: capabilityRegistry,\n  resolveUser: async ctx => {\n    const identity = await ctx.auth.getUserIdentity();\n    if (!identity) {\n      throw createError.unauthenticated();\n    }\n\n    const user = await ctx.runQuery(typedRef(getUserBySubjectRef), {\n      subject: identity.subject,\n    });\n    if (!user) {\n      throw createError.notFound('users', identity.subject);\n    }\n\n    return user;\n  },\n  getCapabilityOverrideRef,\n  getCapabilityOverrideArgs: (_ctx, key) => ({ key }),\n  getPermissionRef: getPermissionEntryRef,\n  getPermissionArgs: (_ctx, role, resource) => ({ role, resource }),\n});\n\nexport const {\n  authQuery,\n  authMutation,\n  authAction,\n  adminQuery,\n  adminMutation,\n  adminAction,\n  capabilityQuery,\n  capabilityMutation,\n  capabilityAction,\n  authorizedQuery,\n  authorizedMutation,\n  authorizedAction,\n} = createConvexLib({\n  query,\n  mutation,\n  action,\n  isAdmin: user => user.role === 'admin',\n  runtime: {\n    query: {\n      resolveUser,\n      capabilityChecker,\n      permissionChecker,\n    },\n    mutation: {\n      resolveUser,\n      capabilityChecker,\n      permissionChecker,\n    },\n    action: actionRuntime,\n  },\n});\n```\n\nThis keeps the app-specific Convex types from `_generated/server` intact, so wrapped handlers still behave like your real `QueryCtx`, `MutationCtx`, and `ActionCtx`.\nDirect destructuring from `createConvexLib(...)` is supported in strict TypeScript projects, so you should not need an intermediate typed constant just to export the primitives.\n\n## Composer\n\n`createConvexLib(...)` is the recommended top-level API for apps that want one central setup and one flat export surface.\n\nIt returns:\n\n- `authQuery`, `authMutation`, `authAction`\n- `adminQuery`, `adminMutation`, `adminAction`\n- `capabilityQuery`, `capabilityMutation`, `capabilityAction`\n- `authorizedQuery`, `authorizedMutation`, `authorizedAction`\n\nIf you prefer lower-level composition, `createPrimitives(...)` and `createAuthorized(...)` are still exported separately.\n\n## Runtime Config\n\nThe preferred config shape is runtime-aware:\n\n```ts\nruntime: {\n  query: { resolveUser, capabilityChecker, permissionChecker },\n  mutation: { resolveUser, capabilityChecker, permissionChecker },\n  action: { resolveUser, capabilityChecker, permissionChecker },\n}\n```\n\nThis is clearer than parallel flat options and maps directly to how Convex runtimes differ in practice.\n\nFlat legacy options like `resolveUserAction`, `capabilityCheckerAction`, and `permissionCheckerAction` are still supported as compatibility aliases.\n\n## Action Bridging\n\nActions often cannot use `ctx.db` directly the same way as queries and mutations. Use `createActionResolvers(...)` to build a `runtime.action` entry from `runQuery(...)` refs:\n\n```ts\nconst actionRuntime = createActionResolvers({\n  registry: capabilityRegistry,\n  resolveUser: async ctx => {\n    const identity = await ctx.auth.getUserIdentity();\n    if (!identity) {\n      throw createError.unauthenticated();\n    }\n\n    return await ctx.runQuery(typedRef(getUserBySubjectRef), {\n      subject: identity.subject,\n    });\n  },\n  getCapabilityOverrideRef,\n  getCapabilityOverrideArgs: (_ctx, key) => ({ key }),\n  getPermissionRef,\n  getPermissionArgs: (_ctx, role, resource) => ({ role, resource }),\n});\n```\n\nIt returns:\n\n- `resolveUser`\n- `capabilityChecker` when `registry` and `getCapabilityOverrideRef` are provided\n- `permissionChecker` when `getPermissionRef` is provided\n\nUse direct `resolveUser` when your action user lookup depends on async auth state. Use `getUserRef` plus `getUserArgs` when your app already has a reusable internal query for that lookup. Both paths can be passed directly to `runtime.action`.\n\n## Capabilities To CRUD\n\nIf your app derives CRUD authorization from capability grants plus capability overrides, `createPermissionCheckerFromCapabilities(...)` is the preferred path. Use `createPermissionChecker(...)` only when your app already stores explicit CRUD permission entries and does not derive them from capabilities.\n\nAdd `grants` to capability definitions:\n\n```ts\nconst capabilityRegistry = {\n  'posts.manage': {\n    label: 'Manage posts',\n    category: 'content',\n    defaultRoles: ['editor'] as const,\n    grants: {\n      posts: {\n        read: true as const,\n        update: true as const,\n      },\n    },\n  },\n};\n```\n\nArray-style grants are supported too:\n\n```ts\nconst capabilityRegistry = {\n  'posts.manage': {\n    label: 'Manage posts',\n    category: 'content',\n    defaultRoles: ['editor'] as const,\n    grants: [{ resource: 'posts', actions: ['read', 'update'] as const }],\n  },\n};\n```\n\nThen create the permission checker:\n\n```ts\nconst permissionChecker = createPermissionCheckerFromCapabilities({\n  registry: capabilityRegistry,\n  getOverride: async (ctx, key) => {\n    return await ctx.db\n      .query('capabilityOverrides')\n      .withIndex('by_key', q => q.eq('key', key))\n      .first();\n  },\n  getDocument: async (ctx, _table, id) => await ctx.db.get(id),\n  defaultAllow: false,\n});\n```\n\nThis removes the common local adapter that translates capability grants into CRUD permissions.\n\n## Generated API Cycle Guidance\n\nAvoid importing `convex/_generated/api` inside `convex/lib.ts` when that file is itself part of your Convex API surface. That can create circular type dependencies during code generation.\n\nRecommended pattern:\n\n1. Keep generated builders like `query`, `mutation`, and `action` inside `convex/lib.ts`.\n2. Keep function refs used by action bridges in a file outside `convex/`, for example `src/lib/convex-refs.ts`.\n3. Wrap exported refs with `typedRef(...)` in that external file when you want an explicit type barrier without writing verbose `FunctionReference<...>` annotations.\n4. Import those refs into `convex/lib.ts`.\n\nExample:\n\n```ts\nimport { typedRef } from '@amadeni/convex-lib';\nimport { internal } from '../convex/_generated/api';\n\nexport const getUserBySubjectRef = typedRef(\n  internal.users.internal.getBySubject,\n);\nexport const getCapabilityOverrideRef = typedRef(\n  internal.capabilities.internal.getOverride,\n);\n```\n\nThat keeps the setup typed without feeding `convex/_generated/api` back into the same module graph being generated.\n\n## Handler Context\n\nWrapped handlers preserve the app’s real Convex context and add auth fields on top:\n\n- `ctx.user`\n- `ctx.userId`\n- `ctx.role`\n\nThe original Convex surface remains available and typed:\n\n- `ctx.db.query('table')`\n- `ctx.runQuery(...)`\n- `ctx.runMutation(...)`\n- `ctx.storage`\n- `ctx.scheduler`\n\nThat means helper functions expecting real `QueryCtx`, `MutationCtx`, or `ActionCtx` still accept the wrapped `ctx`.\n\n## Authorized Helpers\n\n`authorizedQuery(...)` adds:\n\n- `ctx.ownedQuery(tableName)`\n- `ctx.ownedDoc(tableName, documentId)`\n\n`authorizedMutation(...)` adds:\n\n- `ctx.ownedDoc(tableName, documentId)`\n- `ctx.ownedMutation.patch(tableName, documentId, patch)`\n- `ctx.ownedMutation.delete(tableName, documentId)`\n\nThese remain typed against your app’s data model when you pass generated builders from `_generated/server`.\n\n## Error Helpers\n\n`createError` includes:\n\n- `unauthenticated()`\n- `unauthorized(message?)`\n- `forbidden(message?)`\n- `inactiveUser(message?)`\n- `notFound(entity, id?)`\n- `conflict(message?)`\n- `badRequest(message?)`\n- `internal(message?)`\n\n## Zod Helpers\n\n```ts\nimport { addSystemFields, zid } from '@amadeni/convex-lib';\nimport { z } from 'zod';\n\nconst userSchema = z.object(\n  addSystemFields('users', {\n    email: z.string().email(),\n    role: z.string().optional(),\n  }),\n);\n\nconst userId = zid('users');\n```\n\n`addSystemFields(...)` returns a Zod object shape, so wrap it with `z.object(...)`.\n","readmeFilename":"README.md"}