{"_id":"@atcute/xrpc-server","_rev":"18-9ee4c671d16919a9cb8ca6ee9fcbf31f","name":"@atcute/xrpc-server","dist-tags":{"latest":"2.0.3"},"versions":{"0.1.0":{"name":"@atcute/xrpc-server","version":"0.1.0","license":"MIT","_id":"@atcute/xrpc-server@0.1.0","maintainers":[{"name":"externdefs","email":"hi@mary.my.id"}],"homepage":"https://github.com/mary-ext/atcute#readme","bugs":{"url":"https://github.com/mary-ext/atcute/issues"},"dist":{"shasum":"da1ffa0a5c142acf57f094f85ed3448fdb6ab179","tarball":"https://registry.npmjs.org/@atcute/xrpc-server/-/xrpc-server-0.1.0.tgz","fileCount":67,"integrity":"sha512-BDHOTFK6zCnhWtQY2mPq3xvCLpBaRrgGKrFuS7IWKpWEhvLuvrN4w0lZBAqEM6QSSOwoZ8yy7cYoN3eF2h1qMw==","signatures":[{"sig":"MEQCICFOIkYvAUBb/kiZ/3aCy8p8XASvKPuH7TmcG0M1B/Z9AiBKBhtmCMMdmq58M+AW3VaD1wZRqmsIcp3KguL7WHb6OA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92517},"type":"module","_from":"file:atcute-xrpc-server-0.1.0.tgz","exports":{".":"./dist/main/index.js","./auth":"./dist/auth/index.js","./middlewares/cors":"./dist/middlewares/cors.js"},"scripts":{"test":"vitest --coverage","build":"tsc --project tsconfig.build.json","prepublish":"rm -rf dist; pnpm run build"},"_npmUser":{"name":"externdefs","email":"hi@mary.my.id"},"_resolved":"/tmp/91d959b829831cc2132ea045dc471aaa/atcute-xrpc-server-0.1.0.tgz","_integrity":"sha512-BDHOTFK6zCnhWtQY2mPq3xvCLpBaRrgGKrFuS7IWKpWEhvLuvrN4w0lZBAqEM6QSSOwoZ8yy7cYoN3eF2h1qMw==","repository":{"url":"git+https://github.com/mary-ext/atcute.git","directory":"packages/servers/xrpc-server"},"_npmVersion":"10.9.2","description":"xrpc server","directories":{},"_nodeVersion":"22.16.0","dependencies":{"nanoid":"^5.1.5","@atcute/crypto":"^2.2.3","@badrap/valita":"^0.4.4","@atcute/identity":"^1.0.2","@atcute/lexicons":"^1.0.4","@atcute/multibase":"^1.1.4","@atcute/uint8array":"^1.0.3","@atcute/identity-resolver":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.0.4","@atcute/atproto":"^3.0.3","@atcute/bluesky":"^3.0.4","@atcute/xrpc-server":"file:","@vitest/coverage-v8":"^3.0.4"},"_npmOperationalInternal":{"tmp":"tmp/xrpc-server_0.1.0_1748507401311_0.756135104028343","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@atcute/xrpc-server","version":"0.1.1","license":"MIT","_id":"@atcute/xrpc-server@0.1.1","maintainers":[{"name":"externdefs","email":"hi@mary.my.id"}],"homepage":"https://github.com/mary-ext/atcute#readme","bugs":{"url":"https://github.com/mary-ext/atcute/issues"},"dist":{"shasum":"db447bbc8897d28792cfaf9ba159ab0fd59f3650","tarball":"https://registry.npmjs.org/@atcute/xrpc-server/-/xrpc-server-0.1.1.tgz","fileCount":67,"integrity":"sha512-pkr1yGtcCoApqELLjTIU7DO6SnVly5bAPbVswLHEM2xQfk6X4F/dKFDdPEsXwbRrSSr6leKgPwQPVcUpPQnQ4A==","signatures":[{"sig":"MEYCIQCGH67LX7h+3tJ93NaqRnFNUhV2+cAxg4hLduITll0bMAIhANTwp/rQyvQVkfM/nymM2IDDOcAna70Yc07NE+SJtQCv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92689},"type":"module","_from":"file:atcute-xrpc-server-0.1.1.tgz","exports":{".":"./dist/main/index.js","./auth":"./dist/auth/index.js","./middlewares/cors":"./dist/middlewares/cors.js"},"scripts":{"test":"vitest --coverage","build":"tsc --project tsconfig.build.json","prepublish":"rm -rf dist; pnpm run build"},"_npmUser":{"name":"externdefs","email":"hi@mary.my.id"},"_resolved":"/tmp/e33e4c319d56a5878efa7b24849fc30d/atcute-xrpc-server-0.1.1.tgz","_integrity":"sha512-pkr1yGtcCoApqELLjTIU7DO6SnVly5bAPbVswLHEM2xQfk6X4F/dKFDdPEsXwbRrSSr6leKgPwQPVcUpPQnQ4A==","repository":{"url":"git+https://github.com/mary-ext/atcute.git","directory":"packages/servers/xrpc-server"},"_npmVersion":"10.9.2","description":"xrpc server","directories":{},"_nodeVersion":"22.16.0","dependencies":{"nanoid":"^5.1.5","@atcute/crypto":"^2.2.3","@badrap/valita":"^0.4.4","@atcute/identity":"^1.0.2","@atcute/lexicons":"^1.0.4","@atcute/multibase":"^1.1.4","@atcute/uint8array":"^1.0.3","@atcute/identity-resolver":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.0.4","@atcute/atproto":"^3.0.3","@atcute/bluesky":"^3.0.4","@atcute/xrpc-server":"file:","@vitest/coverage-v8":"^3.0.4"},"_npmOperationalInternal":{"tmp":"tmp/xrpc-server_0.1.1_1748508609568_0.393050830008967","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@atcute/xrpc-server","version":"0.1.2","license":"0BSD","_id":"@atcute/xrpc-server@0.1.2","maintainers":[{"name":"externdefs","email":"hi@mary.my.id"}],"homepage":"https://github.com/mary-ext/atcute#readme","bugs":{"url":"https://github.com/mary-ext/atcute/issues"},"dist":{"shasum":"0f3dadab83abce6a346b97a392fe2ac01608ca1a","tarball":"https://registry.npmjs.org/@atcute/xrpc-server/-/xrpc-server-0.1.2.tgz","fileCount":83,"integrity":"sha512-smBmWGEM6nBTq2ozONXBCJtvFzTEnJgH6cALGfq26k38k/OmX6mpMvr5/Z0Iuc6+rNG2j3YY/kOSl+z3c8JOVg==","signatures":[{"sig":"MEUCIQC7+nsnfMaH6dr/ZlxVzYvNUfI2IfYjBBq3HhaToDzecgIgTf49auz30hfmyxXS10tYhegW2H4bUrfxVuZy5X5fogM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":101187},"type":"module","_from":"file:atcute-xrpc-server-0.1.2.tgz","exports":{".":"./dist/main/index.js","./auth":"./dist/auth/index.js","./middlewares/cors":"./dist/middlewares/cors.js"},"scripts":{"test":"vitest --coverage","build":"tsc --project tsconfig.build.json","prepublish":"rm -rf dist; pnpm run build"},"_npmUser":{"name":"externdefs","email":"hi@mary.my.id"},"_resolved":"/tmp/822076d879bbf20a6866b1f95d7c179f/atcute-xrpc-server-0.1.2.tgz","_integrity":"sha512-smBmWGEM6nBTq2ozONXBCJtvFzTEnJgH6cALGfq26k38k/OmX6mpMvr5/Z0Iuc6+rNG2j3YY/kOSl+z3c8JOVg==","repository":{"url":"git+https://github.com/mary-ext/atcute.git","directory":"packages/servers/xrpc-server"},"_npmVersion":"10.9.2","description":"a small web framework for handling XRPC operations","directories":{},"_nodeVersion":"22.17.1","dependencies":{"nanoid":"^5.1.5","@atcute/crypto":"^2.2.5","@badrap/valita":"^0.4.6","@atcute/identity":"^1.1.1","@atcute/lexicons":"^1.2.2","@atcute/multibase":"^1.1.6","@atcute/uint8array":"^1.0.5","@atcute/identity-resolver":"^1.1.4"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@atcute/atproto":"^3.1.6","@atcute/bluesky":"^3.2.5","@atcute/xrpc-server":"file:","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/xrpc-server_0.1.2_1760012881538_0.26453260440335247","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@atcute/xrpc-server","version":"0.1.3","license":"0BSD","_id":"@atcute/xrpc-server@0.1.3","maintainers":[{"name":"externdefs","email":"hi@mary.my.id"}],"homepage":"https://github.com/mary-ext/atcute#readme","bugs":{"url":"https://github.com/mary-ext/atcute/issues"},"dist":{"shasum":"ca833885cbcffd2462565549463da7e5dc8d1d4d","tarball":"https://registry.npmjs.org/@atcute/xrpc-server/-/xrpc-server-0.1.3.tgz","fileCount":103,"integrity":"sha512-AMig6MuAL5VfXRZVsQqQXKCXnZgpjTc6UM6RggvyE1qVT8y9tZPFXdP5tt/p6Jf+h4cAw+XMu2uyrGpUmnTSyQ==","signatures":[{"sig":"MEUCIQCBEj2WcRhqaeDG/Yc1kSM2ALew6426tFTnKL6IsXKytAIgDNzyLxiKqHBb8Fr0GAPQHTcuKg4X/Xi+6312a1RaZbA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":143107},"type":"module","_from":"file:atcute-xrpc-server-0.1.3.tgz","exports":{".":"./dist/main/index.js","./auth":"./dist/auth/index.js","./middlewares/cors":"./dist/middlewares/cors.js"},"scripts":{"test":"vitest --coverage","build":"tsc --project tsconfig.build.json","prepublish":"rm -rf dist; pnpm run build"},"_npmUser":{"name":"externdefs","email":"hi@mary.my.id"},"_resolved":"/tmp/fd5333f72e3137d68c0c87206d1d6dbe/atcute-xrpc-server-0.1.3.tgz","_integrity":"sha512-AMig6MuAL5VfXRZVsQqQXKCXnZgpjTc6UM6RggvyE1qVT8y9tZPFXdP5tt/p6Jf+h4cAw+XMu2uyrGpUmnTSyQ==","repository":{"url":"git+https://github.com/mary-ext/atcute.git","directory":"packages/servers/xrpc-server"},"_npmVersion":"10.9.3","description":"a small web framework for handling XRPC operations","directories":{},"_nodeVersion":"22.20.0","dependencies":{"nanoid":"^5.1.5","@atcute/cbor":"^2.2.7","@atcute/crypto":"^2.2.5","@badrap/valita":"^0.4.6","@atcute/identity":"^1.1.1","@atcute/lexicons":"^1.2.2","@atcute/multibase":"^1.1.6","@atcute/uint8array":"^1.0.5","@atcute/identity-resolver":"^1.1.4"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@types/node":"^24.9.1","@atcute/atproto":"^3.1.8","@atcute/bluesky":"^3.2.8","@atcute/xrpc-server":"file:","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/xrpc-server_0.1.3_1761365026666_0.7758958777768707","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@atcute/xrpc-server","version":"0.1.4","license":"0BSD","_id":"@atcute/xrpc-server@0.1.4","maintainers":[{"name":"externdefs","email":"hi@mary.my.id"}],"homepage":"https://github.com/mary-ext/atcute#readme","bugs":{"url":"https://github.com/mary-ext/atcute/issues"},"dist":{"shasum":"a0ff45c9e4455da6bf8a96788edcadf62cf3c20d","tarball":"https://registry.npmjs.org/@atcute/xrpc-server/-/xrpc-server-0.1.4.tgz","fileCount":113,"integrity":"sha512-0woOqeaDn5wS9rgkdN4e1WmHRTSg9L2yq3w7eCrul8DH8p8bk/V8JgMsriMurKVpEpb/6cAr5M4QZ70BrfhzHg==","signatures":[{"sig":"MEQCIFs5OOsTFzAlT25NHVMUEegEQydPllJUeMUENzuW+dAJAiAWcXQjjiCbWb97liOZFfCCqOP4eppACaBfyktDbrSGDQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":157064},"type":"module","_from":"file:atcute-xrpc-server-0.1.4.tgz","exports":{".":"./dist/main/index.js","./auth":"./dist/auth/index.js","./middlewares/cors":"./dist/middlewares/cors.js"},"scripts":{"test":"vitest --coverage","build":"tsgo --project tsconfig.build.json","prepublish":"rm -rf dist; pnpm run build"},"_npmUser":{"name":"externdefs","email":"hi@mary.my.id"},"_resolved":"/tmp/0ce74c94f64a08046f69919c921bd01a/atcute-xrpc-server-0.1.4.tgz","_integrity":"sha512-0woOqeaDn5wS9rgkdN4e1WmHRTSg9L2yq3w7eCrul8DH8p8bk/V8JgMsriMurKVpEpb/6cAr5M4QZ70BrfhzHg==","repository":{"url":"git+https://github.com/mary-ext/atcute.git","directory":"packages/servers/xrpc-server"},"_npmVersion":"10.9.4","description":"a small web framework for handling XRPC operations","directories":{},"_nodeVersion":"22.21.1","dependencies":{"nanoid":"^5.1.6","@atcute/cbor":"^2.2.8","@atcute/crypto":"^2.3.0","@badrap/valita":"^0.4.6","@atcute/identity":"^1.1.3","@atcute/lexicons":"^1.2.5","@atcute/multibase":"^1.1.6","@atcute/uint8array":"^1.0.6","@atcute/identity-resolver":"^1.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.16","@types/node":"^22.19.3","@atcute/atproto":"^3.1.9","@atcute/bluesky":"^3.2.14","@atcute/xrpc-server":"file:","@vitest/coverage-v8":"^4.0.16"},"_npmOperationalInternal":{"tmp":"tmp/xrpc-server_0.1.4_1766469120585_0.9767327080171582","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@atcute/xrpc-server","version":"0.1.5","license":"0BSD","_id":"@atcute/xrpc-server@0.1.5","maintainers":[{"name":"externdefs","email":"hi@mary.my.id"}],"homepage":"https://github.com/mary-ext/atcute#readme","bugs":{"url":"https://github.com/mary-ext/atcute/issues"},"dist":{"shasum":"90468c2f7161886109787afb5deff1bbe0b809ba","tarball":"https://registry.npmjs.org/@atcute/xrpc-server/-/xrpc-server-0.1.5.tgz","fileCount":113,"integrity":"sha512-2miHuADRPGaCtjHkr/Vu3RAJBda8Fsze3GfY3U4GUgz3Mk8yDO1Ww5JEmsRjlit1mY78Of+B4NQ1YtXJnAzHTQ==","signatures":[{"sig":"MEYCIQCZCRuwYICin8JsMFdSY12dX9YUPZSCUUMyEMhgxrSckgIhALc+y/qFvZ02k19uQtS//Lr0weuL57m7ovkMTghfsOoe","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":159194},"type":"module","_from":"file:atcute-xrpc-server-0.1.5.tgz","exports":{".":"./dist/main/index.js","./auth":"./dist/auth/index.js","./middlewares/cors":"./dist/middlewares/cors.js"},"scripts":{"test":"vitest --coverage","build":"tsgo --project tsconfig.build.json","prepublish":"rm -rf dist; pnpm run build"},"_npmUser":{"name":"externdefs","email":"hi@mary.my.id"},"_resolved":"/tmp/bc395f1ab983c136718c3c68799da21c/atcute-xrpc-server-0.1.5.tgz","_integrity":"sha512-2miHuADRPGaCtjHkr/Vu3RAJBda8Fsze3GfY3U4GUgz3Mk8yDO1Ww5JEmsRjlit1mY78Of+B4NQ1YtXJnAzHTQ==","repository":{"url":"git+https://github.com/mary-ext/atcute.git","directory":"packages/servers/xrpc-server"},"_npmVersion":"10.9.4","description":"a small web framework for handling XRPC operations","directories":{},"_nodeVersion":"22.21.1","dependencies":{"nanoid":"^5.1.6","@atcute/cbor":"^2.2.8","@atcute/crypto":"^2.3.0","@badrap/valita":"^0.4.6","@atcute/identity":"^1.1.3","@atcute/lexicons":"^1.2.5","@atcute/multibase":"^1.1.6","@atcute/uint8array":"^1.0.6","@atcute/identity-resolver":"^1.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.16","@types/node":"^22.19.3","@atcute/atproto":"^3.1.9","@atcute/bluesky":"^3.2.14","@atcute/xrpc-server":"file:","@vitest/coverage-v8":"^4.0.16"},"_npmOperationalInternal":{"tmp":"tmp/xrpc-server_0.1.5_1766475901397_0.46458924455776107","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@atcute/xrpc-server","version":"0.1.6","license":"0BSD","_id":"@atcute/xrpc-server@0.1.6","maintainers":[{"name":"externdefs","email":"hi@mary.my.id"}],"homepage":"https://github.com/mary-ext/atcute#readme","bugs":{"url":"https://github.com/mary-ext/atcute/issues"},"dist":{"shasum":"74b7c46bbfe7ceb9bb8770019665050d63b9a312","tarball":"https://registry.npmjs.org/@atcute/xrpc-server/-/xrpc-server-0.1.6.tgz","fileCount":113,"integrity":"sha512-oUSDxQxVHtAv401CQCTaQ4o1m64D24wfGjA/8LhTMGL0bJiHN4TcjN+FqrRumc7t0EzpQL4aHbBwqoAeGkkcAA==","signatures":[{"sig":"MEYCIQCzjiQdtKHvAn433vstqwh+exunnC04qAr8IAvrN5OA8AIhAJ47TtrXJboPn39mhdE9mVieGazIbt0Dna0KH7sgXGNG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":160431},"type":"module","_from":"file:atcute-xrpc-server-0.1.6.tgz","exports":{".":"./dist/main/index.js","./auth":"./dist/auth/index.js","./middlewares/cors":"./dist/middlewares/cors.js"},"scripts":{"test":"vitest --coverage","build":"tsgo --project tsconfig.build.json","prepublish":"rm -rf dist; pnpm run build"},"_npmUser":{"name":"externdefs","email":"hi@mary.my.id"},"_resolved":"/tmp/523d5ce582faca6127dbb8f1ce435753/atcute-xrpc-server-0.1.6.tgz","_integrity":"sha512-oUSDxQxVHtAv401CQCTaQ4o1m64D24wfGjA/8LhTMGL0bJiHN4TcjN+FqrRumc7t0EzpQL4aHbBwqoAeGkkcAA==","repository":{"url":"git+https://github.com/mary-ext/atcute.git","directory":"packages/servers/xrpc-server"},"_npmVersion":"10.9.4","description":"a small web framework for handling XRPC operations","directories":{},"_nodeVersion":"22.21.1","dependencies":{"nanoid":"^5.1.6","@atcute/cbor":"^2.2.8","@atcute/crypto":"^2.3.0","@badrap/valita":"^0.4.6","@atcute/identity":"^1.1.3","@atcute/lexicons":"^1.2.6","@atcute/multibase":"^1.1.6","@atcute/uint8array":"^1.0.6","@atcute/identity-resolver":"^1.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.16","@types/node":"^22.19.3","@atcute/atproto":"^3.1.9","@atcute/bluesky":"^3.2.14","@atcute/xrpc-server":"file:","@vitest/coverage-v8":"^4.0.16"},"_npmOperationalInternal":{"tmp":"tmp/xrpc-server_0.1.6_1766816471284_0.5070399929643965","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@atcute/xrpc-server","version":"0.1.7","license":"0BSD","_id":"@atcute/xrpc-server@0.1.7","maintainers":[{"name":"externdefs","email":"hi@mary.my.id"}],"homepage":"https://github.com/mary-ext/atcute#readme","bugs":{"url":"https://github.com/mary-ext/atcute/issues"},"dist":{"shasum":"81a981ad9f43aaa0db9aa20bb5e22969fd27a3a7","tarball":"https://registry.npmjs.org/@atcute/xrpc-server/-/xrpc-server-0.1.7.tgz","fileCount":113,"integrity":"sha512-RKOWjWkhtOU4YsHqY++hycsuar2//7OCwl15J0bTEmI9k1DCa9LkgDekrCfLduCg+lBPFmVXL4gbDX0HMl/F1Q==","signatures":[{"sig":"MEQCIBO3VkuDd9SzwZd12H0tGraWnD6+WgN/SfBSIPV/kOZLAiBU2lk+RxYEFlyU3LPzB8lGZVNuUSrnzIG5vcnwKD8YvA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":161381},"type":"module","_from":"file:atcute-xrpc-server-0.1.7.tgz","exports":{".":"./dist/main/index.js","./auth":"./dist/auth/index.js","./middlewares/cors":"./dist/middlewares/cors.js"},"scripts":{"test":"vitest --coverage","build":"tsgo --project tsconfig.build.json","prepublish":"rm -rf dist; pnpm run build"},"_npmUser":{"name":"externdefs","email":"hi@mary.my.id"},"_resolved":"/tmp/83cea681d83d60908b8d1bf1609bddf3/atcute-xrpc-server-0.1.7.tgz","_integrity":"sha512-RKOWjWkhtOU4YsHqY++hycsuar2//7OCwl15J0bTEmI9k1DCa9LkgDekrCfLduCg+lBPFmVXL4gbDX0HMl/F1Q==","repository":{"url":"git+https://github.com/mary-ext/atcute.git","directory":"packages/servers/xrpc-server"},"_npmVersion":"10.9.4","description":"a small web framework for handling XRPC operations","directories":{},"_nodeVersion":"22.21.1","dependencies":{"nanoid":"^5.1.6","@atcute/cbor":"^2.2.8","@atcute/crypto":"^2.3.0","@badrap/valita":"^0.4.6","@atcute/identity":"^1.1.3","@atcute/lexicons":"^1.2.6","@atcute/multibase":"^1.1.6","@atcute/uint8array":"^1.0.6","@atcute/identity-resolver":"^1.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.16","@types/node":"^22.19.3","@atcute/atproto":"^3.1.10","@atcute/bluesky":"^3.2.14","@atcute/xrpc-server":"file:","@vitest/coverage-v8":"^4.0.16"},"_npmOperationalInternal":{"tmp":"tmp/xrpc-server_0.1.7_1767537618168_0.513897357676786","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@atcute/xrpc-server","version":"0.1.8","license":"0BSD","_id":"@atcute/xrpc-server@0.1.8","maintainers":[{"name":"externdefs","email":"hi@mary.my.id"}],"homepage":"https://github.com/mary-ext/atcute#readme","bugs":{"url":"https://github.com/mary-ext/atcute/issues"},"dist":{"shasum":"eb26550ebc5c5159700690ccc0db1ed58bb5734e","tarball":"https://registry.npmjs.org/@atcute/xrpc-server/-/xrpc-server-0.1.8.tgz","fileCount":113,"integrity":"sha512-GFdPtaXQXfsqejx88CaJ6zU0Yexrh3n94/rotGk1xwNJLa1iQ5kuWQqzttcybXoYEOp5Z2CGGw7bx9WuCLarlw==","signatures":[{"sig":"MEYCIQDfYE9BMrUgE8X/CJ3+Rep7R/U/zcmTNOFxf/psH/I1hAIhALnWyn5urssa02Mi+UjjHRmoTUFVSyOtqrb8IS+gdc+j","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":162152},"type":"module","_from":"file:atcute-xrpc-server-0.1.8.tgz","exports":{".":"./dist/main/index.js","./auth":"./dist/auth/index.js","./middlewares/cors":"./dist/middlewares/cors.js"},"scripts":{"test":"vitest --coverage","build":"tsgo --project tsconfig.build.json","prepublish":"rm -rf dist; pnpm run build"},"_npmUser":{"name":"externdefs","email":"hi@mary.my.id"},"_resolved":"/tmp/676f04640b860cd90f8125a7125b8b0f/atcute-xrpc-server-0.1.8.tgz","_integrity":"sha512-GFdPtaXQXfsqejx88CaJ6zU0Yexrh3n94/rotGk1xwNJLa1iQ5kuWQqzttcybXoYEOp5Z2CGGw7bx9WuCLarlw==","repository":{"url":"git+https://github.com/mary-ext/atcute.git","directory":"packages/servers/xrpc-server"},"_npmVersion":"10.9.4","description":"a small web framework for handling XRPC operations","directories":{},"_nodeVersion":"22.21.1","dependencies":{"nanoid":"^5.1.6","@atcute/cbor":"^2.2.8","@atcute/crypto":"^2.3.0","@badrap/valita":"^0.4.6","@atcute/identity":"^1.1.3","@atcute/lexicons":"^1.2.6","@atcute/multibase":"^1.1.6","@atcute/uint8array":"^1.0.6","@atcute/identity-resolver":"^1.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.16","@types/node":"^22.19.3","@atcute/atproto":"^3.1.10","@atcute/bluesky":"^3.2.14","@atcute/xrpc-server":"file:","@vitest/coverage-v8":"^4.0.16"},"_npmOperationalInternal":{"tmp":"tmp/xrpc-server_0.1.8_1767748573537_0.16418491107008704","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@atcute/xrpc-server","version":"0.1.9","license":"0BSD","_id":"@atcute/xrpc-server@0.1.9","maintainers":[{"name":"externdefs","email":"hi@mary.my.id"}],"homepage":"https://github.com/mary-ext/atcute#readme","bugs":{"url":"https://github.com/mary-ext/atcute/issues"},"dist":{"shasum":"7d59d6e255610b0f6571ed5a5c890bcd3ee0fc9d","tarball":"https://registry.npmjs.org/@atcute/xrpc-server/-/xrpc-server-0.1.9.tgz","fileCount":113,"integrity":"sha512-sIgHeLIezIiaDT3eCwHpUfMOHoU2MP3izwmItqvXalMBGrR3qF35m2+3YDXOAxLqyTI1RSuQOk3SD3zLZx53gA==","signatures":[{"sig":"MEYCIQDxSNtE9MrVUZL/S92lHysvl9MWdCtbDTdcsz2St+gdrwIhAI0s/8QZgvmmlPPz1U7qFpjmqjxo1CMO7NeBm1Adba3v","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":162687},"type":"module","_from":"file:atcute-xrpc-server-0.1.9.tgz","exports":{".":"./dist/main/index.js","./auth":"./dist/auth/index.js","./middlewares/cors":"./dist/middlewares/cors.js"},"scripts":{"test":"vitest --coverage","build":"tsgo --project tsconfig.build.json","prepublish":"rm -rf dist; pnpm run build"},"_npmUser":{"name":"externdefs","email":"hi@mary.my.id"},"_resolved":"/tmp/790fe491a1cf0ae5b3abede21ae793dd/atcute-xrpc-server-0.1.9.tgz","_integrity":"sha512-sIgHeLIezIiaDT3eCwHpUfMOHoU2MP3izwmItqvXalMBGrR3qF35m2+3YDXOAxLqyTI1RSuQOk3SD3zLZx53gA==","repository":{"url":"git+https://github.com/mary-ext/atcute.git","directory":"packages/servers/xrpc-server"},"_npmVersion":"10.9.4","description":"a small web framework for handling XRPC operations","directories":{},"_nodeVersion":"22.22.0","dependencies":{"nanoid":"^5.1.6","@atcute/cbor":"^2.3.0","@atcute/crypto":"^2.3.0","@badrap/valita":"^0.4.6","@atcute/identity":"^1.1.3","@atcute/lexicons":"^1.2.7","@atcute/multibase":"^1.1.7","@atcute/uint8array":"^1.1.0","@atcute/identity-resolver":"^1.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.16","@types/node":"^22.19.3","@atcute/atproto":"^3.1.10","@atcute/bluesky":"^3.2.16","@atcute/xrpc-server":"file:","@vitest/coverage-v8":"^4.0.16"},"_npmOperationalInternal":{"tmp":"tmp/xrpc-server_0.1.9_1769744720778_0.09048512899216576","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"@atcute/xrpc-server","version":"0.1.10","license":"0BSD","_id":"@atcute/xrpc-server@0.1.10","maintainers":[{"name":"externdefs","email":"hi@mary.my.id"}],"homepage":"https://github.com/mary-ext/atcute#readme","bugs":{"url":"https://github.com/mary-ext/atcute/issues"},"dist":{"shasum":"4416d80890b84393fa24c1cd1553895381cfee07","tarball":"https://registry.npmjs.org/@atcute/xrpc-server/-/xrpc-server-0.1.10.tgz","fileCount":113,"integrity":"sha512-j4I+ajiYn9Oxv8h5jU7Bzv1G9x7GNcsn7xpnFT7gXh4RUq19kyoKnKDToaQ+eHyCUo+lhqJOBDbggCdiC1SuGQ==","signatures":[{"sig":"MEUCIQCEG+ZvsCiQgIqaxMx9DCaSsHWAM8L1jhHyzDm9mdPmFgIgGDeIxMK2+2/FN8J9DJ1vCXT09hl1qhQSmAzJao7Juzc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":163141},"type":"module","_from":"file:atcute-xrpc-server-0.1.10.tgz","exports":{".":"./dist/main/index.js","./auth":"./dist/auth/index.js","./middlewares/cors":"./dist/middlewares/cors.js"},"scripts":{"test":"vitest --coverage","build":"tsgo --project tsconfig.build.json","prepublish":"rm -rf dist; pnpm run build"},"_npmUser":{"name":"externdefs","email":"hi@mary.my.id"},"_resolved":"/tmp/1a5134f331d60cdd4e63d47e07a0a476/atcute-xrpc-server-0.1.10.tgz","_integrity":"sha512-j4I+ajiYn9Oxv8h5jU7Bzv1G9x7GNcsn7xpnFT7gXh4RUq19kyoKnKDToaQ+eHyCUo+lhqJOBDbggCdiC1SuGQ==","repository":{"url":"git+https://github.com/mary-ext/atcute.git","directory":"packages/servers/xrpc-server"},"_npmVersion":"10.9.4","description":"a small web framework for handling XRPC operations","directories":{},"_nodeVersion":"22.22.0","dependencies":{"nanoid":"^5.1.6","@atcute/cbor":"^2.3.2","@atcute/crypto":"^2.3.0","@badrap/valita":"^0.4.6","@atcute/identity":"^1.1.3","@atcute/lexicons":"^1.2.9","@atcute/multibase":"^1.1.8","@atcute/uint8array":"^1.1.1","@atcute/identity-resolver":"^1.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.18","@types/node":"^25.2.3","@atcute/atproto":"^3.1.10","@atcute/bluesky":"^3.2.18","@atcute/xrpc-server":"file:","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/xrpc-server_0.1.10_1771235892101_0.823475112033778","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"@atcute/xrpc-server","version":"0.1.11","license":"0BSD","_id":"@atcute/xrpc-server@0.1.11","maintainers":[{"name":"externdefs","email":"hi@mary.my.id"}],"homepage":"https://github.com/mary-ext/atcute#readme","bugs":{"url":"https://github.com/mary-ext/atcute/issues"},"dist":{"shasum":"aaca0bfe1c032a66576972f8ee6faa8e53598ab9","tarball":"https://registry.npmjs.org/@atcute/xrpc-server/-/xrpc-server-0.1.11.tgz","fileCount":113,"integrity":"sha512-KapH0UDvNovtQ0anbLKAh24Of5vNqLXEkK08DXQF5o59xG7fYaGeaDXS7VBSUzyd7eu3KXcTgXhzx7Ez8W2N1w==","signatures":[{"sig":"MEQCIBq7tCOhDymuBd6FRQUErIWnqxiYjBjXneo4UBOXqhHTAiBjCXm47PGh3fFXpcw+6YxkY2qjuOh+/80bhUpNrinq+w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":165777},"type":"module","_from":"file:atcute-xrpc-server-0.1.11.tgz","exports":{".":"./dist/main/index.js","./auth":"./dist/auth/index.js","./middlewares/cors":"./dist/middlewares/cors.js"},"scripts":{"test":"vitest --coverage","build":"tsgo --project tsconfig.build.json","prepublish":"rm -rf dist; pnpm run build"},"_npmUser":{"name":"externdefs","email":"hi@mary.my.id"},"_resolved":"/tmp/8f95fa5c15e623493b7fef90f0216013/atcute-xrpc-server-0.1.11.tgz","_integrity":"sha512-KapH0UDvNovtQ0anbLKAh24Of5vNqLXEkK08DXQF5o59xG7fYaGeaDXS7VBSUzyd7eu3KXcTgXhzx7Ez8W2N1w==","repository":{"url":"git+https://github.com/mary-ext/atcute.git","directory":"packages/servers/xrpc-server"},"_npmVersion":"10.9.4","description":"a small web framework for handling XRPC operations","directories":{},"_nodeVersion":"22.22.0","dependencies":{"nanoid":"^5.1.6","@atcute/cbor":"^2.3.2","@atcute/crypto":"^2.3.0","@badrap/valita":"^0.4.6","@atcute/identity":"^1.1.3","@atcute/lexicons":"^1.2.9","@atcute/multibase":"^1.1.8","@atcute/uint8array":"^1.1.1","@atcute/identity-resolver":"^1.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.18","@types/node":"^25.3.0","@atcute/atproto":"^3.1.10","@atcute/bluesky":"^3.2.19","@atcute/xrpc-server":"file:","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/xrpc-server_0.1.11_1771906236670_0.7880470341070711","host":"s3://npm-registry-packages-npm-production"}},"0.1.12":{"name":"@atcute/xrpc-server","version":"0.1.12","license":"0BSD","_id":"@atcute/xrpc-server@0.1.12","maintainers":[{"name":"externdefs","email":"hi@mary.my.id"}],"homepage":"https://github.com/mary-ext/atcute#readme","bugs":{"url":"https://github.com/mary-ext/atcute/issues"},"dist":{"shasum":"483335b306ecfd1d8c339a2f65e5d8991a731fdc","tarball":"https://registry.npmjs.org/@atcute/xrpc-server/-/xrpc-server-0.1.12.tgz","fileCount":108,"integrity":"sha512-70KIerQlljp5+s6t0u6YNN9klEboQUZa2hhoi/hmXIO1cIKEORettTMctnyjfcCJaSfAuj42dxPu51GTZBlm8w==","signatures":[{"sig":"MEUCIQDk2/+zvugdLsWjk8DJUGJbt220fTiPpX71rta/fnLOWAIgUp96J/BYfkUVlmSoSAHPXNIwipc1AoJCiB723pcTVOU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":155635},"type":"module","_from":"file:atcute-xrpc-server-0.1.12.tgz","exports":{".":"./dist/main/index.js","./auth":"./dist/auth/index.js","./middlewares/cors":"./dist/middlewares/cors.js"},"scripts":{"test":"vitest --coverage","build":"tsgo --project tsconfig.build.json","prepublish":"rm -rf dist; pnpm run build"},"_npmUser":{"name":"externdefs","email":"hi@mary.my.id"},"_resolved":"/tmp/e703d68c369861f3b6cf739d7475caf3/atcute-xrpc-server-0.1.12.tgz","_integrity":"sha512-70KIerQlljp5+s6t0u6YNN9klEboQUZa2hhoi/hmXIO1cIKEORettTMctnyjfcCJaSfAuj42dxPu51GTZBlm8w==","repository":{"url":"git+https://github.com/mary-ext/atcute.git","directory":"packages/servers/xrpc-server"},"_npmVersion":"11.11.0","description":"a small web framework for handling XRPC operations","directories":{},"_nodeVersion":"24.14.1","dependencies":{"nanoid":"^5.1.7","@atcute/cbor":"^2.3.2","@atcute/crypto":"^2.4.1","@badrap/valita":"^0.4.6","@atcute/identity":"^1.1.4","@atcute/lexicons":"^1.2.9","@atcute/multibase":"^1.2.0","@atcute/uint8array":"^1.1.1","@atcute/identity-resolver":"^1.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.2","@types/node":"^25.5.2","@atcute/atproto":"^3.1.10","@atcute/bluesky":"^3.3.0","@atcute/xrpc-server":"file:","@vitest/coverage-v8":"^4.1.2","@mary-ext/simple-event-emitter":"^1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/xrpc-server_0.1.12_1775307775826_0.2573341296489664","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@atcute/xrpc-server","version":"1.0.0","license":"0BSD","_id":"@atcute/xrpc-server@1.0.0","maintainers":[{"name":"externdefs","email":"hi@mary.my.id"}],"dist":{"shasum":"7c773179a386206785d0dc012413d6825f5d40dc","tarball":"https://registry.npmjs.org/@atcute/xrpc-server/-/xrpc-server-1.0.0.tgz","fileCount":108,"integrity":"sha512-VzmOwtOXrupNTSGd1WIm4NpDR513W0zUU2TcJLwJQdAL4cpnWak+TKwHaMBoDCk1a/6VbVQ9xZBv3C6PaDcx/A==","signatures":[{"sig":"MEQCIHbhNqcbqm4olDbk0jJsfG+nGPxqSAAQyi9jHgzURPIhAiB7Q50efV+PBpFuNqm2HhtCmV2dsjKZ+tyKOQx29hND3w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":192984},"type":"module","exports":{".":"./dist/main/index.js","./auth":"./dist/auth/index.js","./middlewares/cors":"./dist/middlewares/cors.js"},"scripts":{"test":"vitest --coverage","build":"tsgo","prepublish":"rm -rf dist; pnpm run build"},"_npmUser":{"name":"externdefs","email":"hi@mary.my.id"},"repository":{"url":"https://github.com/mary-ext/atcute","directory":"packages/servers/xrpc-server"},"description":"a small web framework for handling XRPC operations","directories":{},"_nodeVersion":"26.0.0","dependencies":{"nanoid":"^5.1.11","@atcute/cbor":"^2.3.3","@atcute/crypto":"^2.4.1","@badrap/valita":"^0.4.6","@atcute/identity":"^1.1.5","@atcute/lexicons":"^1.3.1","@atcute/multibase":"^1.2.0","@atcute/uint8array":"^1.1.1","@atcute/identity-resolver":"^1.2.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.5","@types/node":"^25.6.0","@atcute/atproto":"^3.1.12","@atcute/bluesky":"^3.3.4","@atcute/xrpc-server":"file:","@vitest/coverage-v8":"^4.1.5","@mary-ext/simple-event-emitter":"^1.0.1"},"peerDependencies":{"@atcute/lexicons":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/xrpc-server_1.0.0_1778205619927_0.04115741715133692","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@atcute/xrpc-server","version":"2.0.0","license":"0BSD","_id":"@atcute/xrpc-server@2.0.0","maintainers":[{"name":"externdefs","email":"hi@mary.my.id"}],"dist":{"shasum":"1c9cb843a232948228664e0a8bc32874b625405d","tarball":"https://registry.npmjs.org/@atcute/xrpc-server/-/xrpc-server-2.0.0.tgz","fileCount":108,"integrity":"sha512-HYfuxEqZ5XZIh0pGBlrRrnnqblIaP30OQf7/8lcwbzpZUEZy25BUmt6XrAqqs+bGQOpY+DagZyspFRn5F2joRA==","signatures":[{"sig":"MEUCICyyRyz0MLuWliEPbTWM0h69pBvgkpRwvUG3nfFMcX7/AiEA6Z8ZPdDHFNu1rM+M/yELkE21UBf393pIzShD7mxibXI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":191042},"type":"module","exports":{".":"./dist/main/index.js","./auth":"./dist/auth/index.js","./middlewares/cors":"./dist/middlewares/cors.js"},"scripts":{"test":"vitest --coverage","build":"tsgo","prepublish":"rm -rf dist; pnpm run build"},"_npmUser":{"name":"externdefs","email":"hi@mary.my.id"},"repository":{"url":"https://github.com/mary-ext/atcute","directory":"packages/servers/xrpc-server"},"description":"a small web framework for handling XRPC operations","directories":{},"_nodeVersion":"26.0.0","dependencies":{"nanoid":"^5.1.11","valibot":"^1.4.0","@atcute/cbor":"^2.3.3","@atcute/crypto":"^2.4.1","@atcute/identity":"^2.0.0","@atcute/lexicons":"^2.0.0","@atcute/multibase":"^1.2.0","@atcute/uint8array":"^1.1.1","@atcute/identity-resolver":"^2.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.5","@types/node":"^25.6.0","@atcute/atproto":"^4.0.0","@atcute/bluesky":"^4.0.0","@atcute/xrpc-server":"file:","@vitest/coverage-v8":"^4.1.5","@mary-ext/simple-event-emitter":"^1.0.1"},"peerDependencies":{"@atcute/lexicons":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/xrpc-server_2.0.0_1778312815366_0.4448172590024211","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@atcute/xrpc-server","version":"2.0.1","license":"0BSD","_id":"@atcute/xrpc-server@2.0.1","maintainers":[{"name":"externdefs","email":"hi@mary.my.id"}],"dist":{"shasum":"38a6bb1da2160cde2634084ac6db31824f2f4a12","tarball":"https://registry.npmjs.org/@atcute/xrpc-server/-/xrpc-server-2.0.1.tgz","fileCount":45,"integrity":"sha512-7J7FCWsfv8WzL4r60wsesmilFshSp5376ysVK2WArqatwtuTDojm2pJCLOtBSdYRMj3vNMIkmb9G4adSj6GCrg==","signatures":[{"sig":"MEUCIQCK8w85wKNfKjF2evELvf48t1Og9j1ShBXX9eYBGEQtDgIgY3qKaY8E+IKIQUYKRyAhXDi9+uwSuzI0AkqY7ibl/eI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77630},"type":"module","exports":{".":"./dist/main/index.js","./auth":"./dist/auth/index.js","./middlewares/cors":"./dist/middlewares/cors.js"},"scripts":{"test":"vitest --coverage","build":"tsgo","prepublish":"rm -rf dist; pnpm run build"},"_npmUser":{"name":"externdefs","email":"hi@mary.my.id"},"repository":{"url":"https://github.com/mary-ext/atcute","directory":"packages/servers/xrpc-server"},"description":"a small web framework for handling XRPC operations","directories":{},"_nodeVersion":"26.0.0","dependencies":{"nanoid":"^5.1.16","valibot":"^1.4.1","@atcute/cbor":"^2.3.5","@atcute/crypto":"^2.4.2","@atcute/identity":"^2.0.1","@atcute/lexicons":"^2.0.2","@atcute/multibase":"^1.2.4","@atcute/uint8array":"^1.1.3","@atcute/identity-resolver":"^2.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.9","@types/node":"^25.9.4","@atcute/atproto":"^4.0.3","@atcute/bluesky":"^4.0.12","@atcute/xrpc-server":"file:","@vitest/coverage-v8":"^4.1.9","@mary-ext/simple-event-emitter":"^1.0.2"},"peerDependencies":{"@atcute/lexicons":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/xrpc-server_2.0.1_1782777138608_0.4478263849136799","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"@atcute/xrpc-server","version":"2.0.2","license":"0BSD","_id":"@atcute/xrpc-server@2.0.2","maintainers":[{"name":"externdefs","email":"hi@mary.my.id"}],"dist":{"shasum":"3b9b3958ae486c2c0d8d238cbf73a6cc2a2fe9f1","tarball":"https://registry.npmjs.org/@atcute/xrpc-server/-/xrpc-server-2.0.2.tgz","fileCount":45,"integrity":"sha512-tjOAqJfrBOwit6ccKg5s/eosvzoHmRszafS008/VP0yYdZkiBcSgYpy9S32e4aVoKeVurudBZjGD937bMcLg1Q==","signatures":[{"sig":"MEUCIQDhmmMR+soFm8xRFK/Heg6UQwwhT8KxGijoH/i/VsXywgIgPr9mO7gDHJrWNc3QA47Gons0Nvgz2FK1jp/x0jfeosM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":78094},"type":"module","exports":{".":"./dist/main/index.js","./auth":"./dist/auth/index.js","./middlewares/cors":"./dist/middlewares/cors.js"},"scripts":{"test":"vitest --coverage","build":"tsc","prepublish":"rm -rf dist; pnpm run build"},"_npmUser":{"name":"externdefs","email":"hi@mary.my.id"},"repository":{"url":"https://github.com/mary-ext/atcute","directory":"packages/servers/xrpc-server"},"description":"a small web framework for handling XRPC operations","directories":{},"_nodeVersion":"26.0.0","dependencies":{"nanoid":"^6.0.0","valibot":"^1.4.2","@atcute/cbor":"^2.3.6","@atcute/crypto":"^2.4.4","@atcute/identity":"^2.0.2","@atcute/lexicons":"^2.0.3","@atcute/multibase":"^1.2.5","@atcute/uint8array":"^1.1.5","@atcute/identity-resolver":"^2.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.10","@types/node":"^26.1.1","@atcute/atproto":"^4.0.3","@atcute/bluesky":"^4.0.14","@atcute/xrpc-server":"file:","@vitest/coverage-v8":"^4.1.10","@mary-ext/simple-event-emitter":"^1.0.2"},"peerDependencies":{"@atcute/lexicons":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/xrpc-server_2.0.2_1784160623165_0.9001483434333539","host":"s3://npm-registry-packages-npm-production"}},"2.0.3":{"_id":"@atcute/xrpc-server@2.0.3","dist":{"shasum":"61c0a9fe58acd6e0e76e0a43afdfbe13c4ccd06c","tarball":"https://registry.npmjs.org/@atcute/xrpc-server/-/xrpc-server-2.0.3.tgz","fileCount":45,"integrity":"sha512-SjdTsPy+7fP91QZrcNJQuBxJNKMEjACXkWX9PpWuHbcp8cerbrjgPEPaGu9iagiXpPA1su6Iq/xR0cOUTTguSA==","signatures":[{"sig":"MEQCIAyWkkmpqNognfbKlLlR3e6XaX3ZYyUa/cx/yzQDy5v5AiBDNo41tghP6zZvMaFbzshUhMELaY1A9neRBRySlprn+w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIE2p6LyjCqlz55HsmKrmM4ICWHywtqkE7EvZxOwS3Z93AiBPw8vpeQgSCNSMS8QLqrRDbZERdFM+tgYope85hBeFwA=="}],"unpackedSize":78233},"name":"@atcute/xrpc-server","type":"module","exports":{".":"./dist/main/index.js","./auth":"./dist/auth/index.js","./middlewares/cors":"./dist/middlewares/cors.js"},"license":"0BSD","scripts":{"test":"vitest --coverage","build":"tsc","prepublish":"rm -rf dist; pnpm run build"},"version":"2.0.3","_npmUser":{"name":"externdefs","email":"hi@mary.my.id"},"repository":{"url":"https://tangled.org/did:plc:pljn5qch4tgadongtc7i6qij","directory":"packages/servers/xrpc-server"},"description":"a small web framework for handling XRPC operations","directories":{},"maintainers":[{"name":"externdefs","email":"hi@mary.my.id"}],"dependencies":{"nanoid":"^6.0.1","valibot":"^1.4.2","@atcute/cbor":"^2.3.7","@atcute/crypto":"^2.4.4","@atcute/identity":"^2.0.2","@atcute/lexicons":"^2.1.0","@atcute/multibase":"^1.2.5","@atcute/uint8array":"^1.1.5","@atcute/identity-resolver":"^2.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.11","@types/node":"^26.4.0","@atcute/atproto":"^4.0.4","@atcute/bluesky":"^4.0.20","@atcute/xrpc-server":"file:","@vitest/coverage-v8":"^4.1.11","@mary-ext/simple-event-emitter":"^1.0.2"},"peerDependencies":{"@atcute/lexicons":"^2.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/xrpc-server_2.0.3_1789048151524_0.6989654830358296"}}},"time":{"created":"2025-05-29T08:30:01.234Z","modified":"2026-09-10T13:49:11.843Z","0.1.0":"2025-05-29T08:30:01.561Z","0.1.1":"2025-05-29T08:50:09.767Z","0.1.2":"2025-10-09T12:28:01.729Z","0.1.3":"2025-10-25T04:03:46.899Z","0.1.4":"2025-12-23T05:52:00.738Z","0.1.5":"2025-12-23T07:45:01.547Z","0.1.6":"2025-12-27T06:21:11.420Z","0.1.7":"2026-01-04T14:40:18.327Z","0.1.8":"2026-01-07T01:16:13.699Z","0.1.9":"2026-01-30T03:45:20.923Z","0.1.10":"2026-02-16T09:58:12.255Z","0.1.11":"2026-02-24T04:10:36.847Z","0.1.12":"2026-04-04T13:02:55.978Z","1.0.0":"2026-05-08T02:00:20.177Z","2.0.0":"2026-05-09T07:46:55.515Z","2.0.1":"2026-06-29T23:52:18.743Z","2.0.2":"2026-07-16T00:10:23.298Z","2.0.3":"2026-09-10T13:49:11.614Z"},"license":"0BSD","repository":{"url":"https://tangled.org/did:plc:pljn5qch4tgadongtc7i6qij","directory":"packages/servers/xrpc-server"},"description":"a small web framework for handling XRPC operations","maintainers":[{"name":"externdefs","email":"hi@mary.my.id"}],"readme":"# @atcute/xrpc-server\n\nweb framework for XRPC servers.\n\n```sh\nnpm install @atcute/xrpc-server\n```\n\n## prerequisites\n\nthis framework relies on schemas generated by `@atcute/lex-cli`, you'd need to follow its\n[quick start guide](../../lexicons/lex-cli) on how to set it up.\n\nfor these examples, we'll use a simple query operation that greets a name:\n\n```json\n// file: lexicons/com/example/greet.json\n{\n\t\"lexicon\": 1,\n\t\"id\": \"com.example.greet\",\n\t\"defs\": {\n\t\t\"main\": {\n\t\t\t\"type\": \"query\",\n\t\t\t\"parameters\": {\n\t\t\t\t\"type\": \"params\",\n\t\t\t\t\"required\": [\"name\"],\n\t\t\t\t\"properties\": {\n\t\t\t\t\t\"name\": { \"type\": \"string\" }\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"output\": {\n\t\t\t\t\"encoding\": \"application/json\",\n\t\t\t\t\"schema\": {\n\t\t\t\t\t\"type\": \"object\",\n\t\t\t\t\t\"required\": [\"message\"],\n\t\t\t\t\t\"properties\": {\n\t\t\t\t\t\t\"message\": { \"type\": \"string\" }\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n```\n\n## usage\n\n### handling requests\n\nuse `addQuery()` for queries (GET) and `addProcedure()` for procedures (POST). handlers receive\ntyped `params` and `input`, and return responses using the `json()` helper:\n\n```ts\nimport { XRPCRouter, json } from '@atcute/xrpc-server';\nimport { cors } from '@atcute/xrpc-server/middlewares/cors';\n\nimport { ComExampleGreet, ComExampleCreatePost } from './lexicons/index.js';\n\nconst router = new XRPCRouter({ middlewares: [cors()] });\n\nrouter.addQuery(ComExampleGreet, {\n\tasync handler({ params }) {\n\t\treturn json({ message: `hello ${params.name}!` });\n\t},\n});\n\nrouter.addProcedure(ComExampleCreatePost, {\n\tasync handler({ input }) {\n\t\tconst post = await db.createPost(input);\n\t\treturn json(post);\n\t},\n});\n\nexport default router;\n```\n\n### serving the router\n\non Deno, Bun or Cloudflare Workers, you can export the router directly and expect it to work out of\nthe box.\n\nfor Node.js, you'll need a fetch-to-Node adapter like\n[`@remix-run/node-fetch-server`][node-fetch-server] since the router works with standard Web\nRequest/Response:\n\n[node-fetch-server]: https://github.com/remix-run/remix/tree/main/packages/node-fetch-server\n\n```ts\nimport * as http from 'node:http';\nimport { createRequestListener } from '@remix-run/node-fetch-server';\nimport { XRPCRouter } from '@atcute/xrpc-server';\n\nconst router = new XRPCRouter();\n\n// ... add handlers ...\n\nconst server = http.createServer(createRequestListener(router.fetch));\nserver.listen(3000, () => {\n\tconsole.log('listening on port 3000');\n});\n```\n\n### standalone handlers\n\nif you only need a single XRPC operation, you can skip creating a router and export a handler\ndirectly:\n\n```ts\nimport { createXrpcHandler, json } from '@atcute/xrpc-server';\nimport { AppBskyFeedGetFeedSkeleton } from '@atcute/bluesky';\n\nexport default createXrpcHandler({\n\tlxm: AppBskyFeedGetFeedSkeleton,\n\tasync handler({ params }) {\n\t\treturn json({ feed: [] });\n\t},\n});\n```\n\nrequests should be routed to `/xrpc/<nsid>`.\n\n### error handling\n\nthrow `XRPCError` in handlers to return error responses:\n\n```ts\nimport { XRPCError } from '@atcute/xrpc-server';\n\nrouter.addQuery(ComExampleGetPost, {\n\tasync handler({ params, request }) {\n\t\tconst session = await getSession(request);\n\t\tif (!session) {\n\t\t\tthrow new XRPCError({ status: 401, error: 'AuthenticationRequired' });\n\t\t}\n\n\t\tconst post = await db.getPost(params.uri);\n\t\tif (!post) {\n\t\t\tthrow new XRPCError({ status: 400, error: 'InvalidRequest', message: `post not found` });\n\t\t}\n\n\t\treturn json(post);\n\t},\n});\n```\n\nconvenience subclasses are also available: `InvalidRequestError`, `AuthRequiredError`,\n`ForbiddenError`, `RateLimitExceededError`, `InternalServerError`, `UpstreamFailureError`,\n`NotEnoughResourcesError`, `UpstreamTimeoutError`.\n\n`AuthRequiredError` accepts a `wwwAuthenticate` option that auto-formats an RFC 7235\n`WWW-Authenticate` header on the response (and appends `access-control-expose-headers` so browsers\ncan read it from CORS responses):\n\n```ts\nimport { AuthRequiredError } from '@atcute/xrpc-server';\n\nthrow new AuthRequiredError({\n\tmessage: 'invalid token',\n\twwwAuthenticate: { scheme: 'Bearer', params: { error: 'BadJwtSignature' } },\n});\n```\n\n### observing errors\n\nfor logs or metrics, use the `onError` / `onSocketError` router options. these are fire-and-forget\nhooks invoked alongside response generation, and they are NOT called for client-induced errors\n(aborted requests, `XRPCError`, `XRPCSubscriptionError`) — only for bugs worth reporting:\n\n```ts\nconst router = new XRPCRouter({\n\tonError({ error, request }) {\n\t\treportToSentry(error, { url: request.url });\n\t},\n\tonSocketError({ error, request }) {\n\t\treportToSentry(error, { url: request.url, subscription: true });\n\t},\n});\n```\n\n### health check\n\nthe router can optionally answer `/xrpc/_health` if you pass `handleHealthCheck`. this endpoint is\nnon-standard — consumers decide the response shape and status.\n\n```ts\nconst router = new XRPCRouter({\n\tasync handleHealthCheck() {\n\t\tconst healthy = await pingDatabase();\n\t\treturn Response.json({ status: healthy ? 'ok' : 'degraded' }, { status: healthy ? 200 : 503 });\n\t},\n});\n```\n\n### subscriptions\n\nsubscriptions provide real-time streaming over WebSocket. they require a runtime-specific adapter:\n\n| runtime            | adapter package                                                |\n| ------------------ | -------------------------------------------------------------- |\n| Bun                | [`@atcute/xrpc-server-bun`](../xrpc-server-bun/)               |\n| Node.js            | [`@atcute/xrpc-server-node`](../xrpc-server-node/)             |\n| Deno               | [`@atcute/xrpc-server-deno`](../xrpc-server-deno/)             |\n| Cloudflare Workers | [`@atcute/xrpc-server-cloudflare`](../xrpc-server-cloudflare/) |\n\nhere's an example using Bun:\n\n```ts\nimport { XRPCRouter } from '@atcute/xrpc-server';\nimport { createBunWebSocket } from '@atcute/xrpc-server-bun';\n\nimport { ComExampleSubscribe } from './lexicons/index.js';\n\nconst ws = createBunWebSocket();\n\nconst router = new XRPCRouter({ websocket: ws.adapter });\n\nrouter.addSubscription(ComExampleSubscribe, {\n\tasync *handler({ params, signal }) {\n\t\t// yield messages until the client disconnects\n\t\twhile (!signal.aborted) {\n\t\t\tconst events = await getNewEvents(params.cursor);\n\n\t\t\tfor (const event of events) {\n\t\t\t\tyield event;\n\t\t\t}\n\n\t\t\tawait sleep(1000);\n\t\t}\n\t},\n});\n\nexport default ws.wrap(router);\n```\n\nthe handler is an async generator that yields messages. each yielded value is encoded as a CBOR\nframe and sent to the client. the `signal` is aborted when the client disconnects.\n\nfor subscription errors, use `XRPCSubscriptionError`:\n\n```ts\nimport { XRPCSubscriptionError } from '@atcute/xrpc-server';\n\nrouter.addSubscription(ComExampleSubscribe, {\n\tasync *handler({ params }) {\n\t\tif (params.cursor && isCursorTooOld(params.cursor)) {\n\t\t\tthrow new XRPCSubscriptionError({\n\t\t\t\terror: 'FutureCursor',\n\t\t\t\tmessage: `cursor is too old`,\n\t\t\t});\n\t\t}\n\n\t\t// ...\n\t},\n});\n```\n\nbackpressure is handled per adapter: each adapter's `create*WebSocket()` factory accepts\n`highWaterMark` / `lowWaterMark` options (default 250 KB / 50 KB) that throttle the send loop when\nthe outgoing buffer grows. the Cloudflare Workers adapter does not apply backpressure — the runtime\ndoes not expose the outgoing WebSocket buffer.\n\n### service authentication\n\nthe `@atcute/xrpc-server/auth` subpackage provides utilities for service-to-service authentication\nusing JWTs.\n\nverifying incoming JWTs:\n\n```ts\nimport { ServiceJwtVerifier } from '@atcute/xrpc-server/auth';\nimport {\n\tCompositeDidDocumentResolver,\n\tPlcDidDocumentResolver,\n\tWebDidDocumentResolver,\n} from '@atcute/identity-resolver';\n\nconst jwtVerifier = new ServiceJwtVerifier({\n\t// list of audience values this service accepts. during the transition to proposal 0014\n\t// (atproto service auth audience), configure both the bare DID and the DID-with-service-ref\n\t// form so that tokens from older issuers keep working alongside new ones.\n\tacceptAudiences: ['did:web:my-service.example.com', 'did:web:my-service.example.com#atproto_pds'],\n\tresolver: new CompositeDidDocumentResolver({\n\t\tmethods: {\n\t\t\tplc: new PlcDidDocumentResolver(),\n\t\t\tweb: new WebDidDocumentResolver(),\n\t\t},\n\t}),\n});\n\nrouter.addQuery(ComExampleProtectedEndpoint, {\n\tasync handler({ request }) {\n\t\tconst auth = await jwtVerifier.verifyRequest(request, { lxm: 'com.example.protectedEndpoint' });\n\t\treturn json({ caller: auth.issuer });\n\t},\n});\n```\n\n`verifyRequest` parses the `Authorization: Bearer` header, verifies the token, and throws an\n`AuthRequiredError` with a populated `WWW-Authenticate: Bearer error=\"…\"` challenge on every failure\npath. it forwards `request.signal` into DID resolution so aborted requests don't keep network calls\nalive.\n\nadditional options tune verification:\n\n```ts\nconst jwtVerifier = new ServiceJwtVerifier({\n\tacceptAudiences: [...],\n\tresolver: ...,\n\tmaxAge: 300,       // max token lifetime window in seconds (default 300)\n\tclockLeeway: 5,    // leeway applied to nbf/exp comparisons (default 5)\n\treplayStore: {     // optional replay protection; requires jti in tokens\n\t\tasync check({ iss, jti }, ttlSeconds) {\n\t\t\tconst key = `${iss}:${jti}`;\n\t\t\tconst isNew = await redis.setnx(key, '1');\n\t\t\tif (isNew === 1) await redis.expire(key, ttlSeconds);\n\t\t\treturn isNew === 1;\n\t\t},\n\t},\n});\n```\n\ncreating outgoing JWTs:\n\n```ts\nimport { createServiceJwt } from '@atcute/xrpc-server/auth';\n\nconst jwt = await createServiceJwt({\n\tkeypair: myServiceKeypair,\n\tissuer: 'did:web:my-service.example.com',\n\taudience: 'did:plc:targetservice',\n\tlxm: 'com.example.someEndpoint',\n});\n\n// use jwt in Authorization header when calling other services\n```\n\n### internal calls\n\nyou can make typed calls to your own endpoints using `@atcute/client`:\n\n```ts\nimport { Client, ok } from '@atcute/client';\n\nconst client = new Client({\n\thandler(pathname, init) {\n\t\treturn router.fetch(new Request(new URL(pathname, 'http://localhost'), init));\n\t},\n});\n\nconst data = await ok(\n\tclient.get('com.example.greet', {\n\t\tparams: { name: 'world' },\n\t}),\n);\n\nconsole.log(data.message); // fully typed!\n```\n","readmeFilename":""}