{"_id":"@spfn/auth","_rev":"147-d1b4cdff87f1374a3e97ce8f3dc4c1d0","name":"@spfn/auth","dist-tags":{"alpha":"0.1.0-alpha.88","latest":"0.3.0-beta.26","beta":"0.3.0-beta.26"},"versions":{"0.1.0-alpha.0":{"name":"@spfn/auth","version":"0.1.0-alpha.0","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.1.0-alpha.0","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"dist":{"shasum":"0504da16ba5d28e8ebb83d752e0f087408bbee26","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.1.0-alpha.0.tgz","fileCount":2,"integrity":"sha512-iReIrUlGRDAkmGe28/qpwO4i+eCl4XthtaZLvU6x6XPJfSmIfrJPVsgP1AtYUWnPXvtRTIq6Nr8Z4HBfjUvrhA==","signatures":[{"sig":"MEQCIAFqL4CTkmjXS2mJtX6ViGMl6uxd93iCSqGrGboRmt3EAiAX5d46Uyc6bKSZ8iN+4rwZIVpKU9ye2ay/KsLW9w+Mhw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39474},"main":"./dist/index.js","spfn":{"prefix":"/_auth","routes":{"dir":"./dist/server/routes","basePath":"/auth"},"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"}},"gitHead":"30ac56efe75125b4d383c0e3c0f1ec9b7be23b2e","scripts":{"dev":"tsup --watch","test":"vitest","build":"npm run db:generate && tsup","clean":"rm -rf dist migrations","watch":"tsup --watch","codegen":"spfn codegen run","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","docker:test:up":"docker compose -f docker-compose.test.yml up -d","prepublishOnly":"pnpm run clean && pnpm run build && pnpm test run","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_npmVersion":"11.4.2","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"22.11.0","dependencies":{"bcrypt":"^6.0.0","postgres":"^3.4.0","@spfn/core":"^0.1.0-alpha.82","drizzle-orm":"^0.44.7","jsonwebtoken":"^9.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","glob":"^11.0.3","hono":"^4.9.0","jose":"^6.1.0","spfn":"workspace:*","tsup":"^8.3.5","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/bcrypt":"^5.0.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"_npmOperationalInternal":{"tmp":"tmp/auth_0.1.0-alpha.0_1762342181069_0.3952714714410761","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.1":{"name":"@spfn/auth","version":"0.1.0-alpha.1","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.1.0-alpha.1","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"5ee6db2405481c66cf6f45ad9c34801661dc3c35","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.1.0-alpha.1.tgz","fileCount":67,"integrity":"sha512-TZLDxWzjLhXAdQ4qA5rb3pmzOa5UMINNim5JUSYuEnOze9pH+ivXXbMi3nzJCc4rI4dFF8f7pKoMk4wudPiFkQ==","signatures":[{"sig":"MEYCIQD14+rGHce2cK/alkqc3A6U/HLMBGOnyt6JrXwQalJwvgIhANB6B9OlWWsLwHYuiN4vvCEp5zwDYq9c587wb1y/J7/3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.1.0-alpha.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":5993133},"main":"./dist/index.js","spfn":{"prefix":"/_auth","routes":{"dir":"./dist/server/routes","basePath":"/auth"},"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.1.0-alpha.1.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest","build":"npm run db:generate && tsup","clean":"rm -rf dist migrations","watch":"tsup --watch","codegen":"spfn codegen run","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:08607c56-42f8-4c8f-a512-2e3965149e59"}},"_resolved":"/tmp/2a0915970ab7f0a7fd0294be9bd8bd19/spfn-auth-0.1.0-alpha.1.tgz","_integrity":"sha512-TZLDxWzjLhXAdQ4qA5rb3pmzOa5UMINNim5JUSYuEnOze9pH+ivXXbMi3nzJCc4rI4dFF8f7pKoMk4wudPiFkQ==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.6.2","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.19.5","dependencies":{"bcrypt":"^6.0.0","postgres":"^3.4.0","@spfn/core":"0.1.0-alpha.85","drizzle-orm":"^0.44.7","jsonwebtoken":"^9.0.2"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.19.2","glob":"^11.0.3","hono":"^4.9.0","jose":"^6.1.0","spfn":"0.1.0-alpha.84","tsup":"^8.3.5","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/bcrypt":"^5.0.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"_npmOperationalInternal":{"tmp":"tmp/auth_0.1.0-alpha.1_1762489675052_0.43563255173241644","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.86":{"name":"@spfn/auth","version":"0.1.0-alpha.86","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.1.0-alpha.86","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"0fd30f67f45ea29d989596f6c8e7acb7512d794a","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.1.0-alpha.86.tgz","fileCount":144,"integrity":"sha512-5MXc6qxfq1rcABAH3l5Z7Pvx+1wOgWhNyYtWQ5/CQ5dvnoOMmL1PATySO4fzL+9cyeo+n4Z+/5MQ/hv0M0BTpQ==","signatures":[{"sig":"MEUCIQChrvX7Bh9f1YOGSGg+a5Jm+q1/5fDhB32ZabItmvN4uAIgN5q9F1iNv2e7waNOIqgUy1cx7E1fDYchQQ5ZoCcDt/I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.1.0-alpha.86","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":14586165},"main":"./dist/index.js","spfn":{"prefix":"/_auth","routes":{"dir":"./dist/server/routes","basePath":"/auth"},"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.1.0-alpha.86.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./lib":{"types":"./dist/lib.d.ts","import":"./dist/lib.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./adapters":{"types":"./dist/adapters.d.ts","import":"./dist/adapters.js"},"./nextjs/api":{"types":"./dist/adapters/nextjs/api.d.ts","import":"./dist/adapters/nextjs/api.js"},"./nextjs/server":{"types":"./dist/adapters/nextjs/server.d.ts","import":"./dist/adapters/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest","build":"npm run db:generate && tsup","clean":"rm -rf dist migrations","watch":"tsup --watch","codegen":"spfn codegen run","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:08607c56-42f8-4c8f-a512-2e3965149e59"}},"_resolved":"/tmp/6cf074e0816e2057097b05a34f83b02e/spfn-auth-0.1.0-alpha.86.tgz","_integrity":"sha512-5MXc6qxfq1rcABAH3l5Z7Pvx+1wOgWhNyYtWQ5/CQ5dvnoOMmL1PATySO4fzL+9cyeo+n4Z+/5MQ/hv0M0BTpQ==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.6.2","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.19.5","dependencies":{"bcrypt":"^6.0.0","postgres":"^3.4.0","@spfn/core":"0.1.0-alpha.86","drizzle-orm":"^0.44.7","jsonwebtoken":"^9.0.2"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.19.2","glob":"^11.0.3","hono":"^4.9.0","jose":"^6.1.0","next":"^15.0.0","spfn":"0.1.0-alpha.86","tsup":"^8.3.5","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcrypt":"^5.0.2","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":">=13.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.1.0-alpha.86_1762695401060_0.8029703405229727","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.87":{"name":"@spfn/auth","version":"0.1.0-alpha.87","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.1.0-alpha.87","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"8108f94323e640a06bea08184b08dc5582ab9147","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.1.0-alpha.87.tgz","fileCount":144,"integrity":"sha512-wALuFZWJ4WS4ncmre94uCxdXsqm7lF6uULYOp4UFpxDnELghqOCMNJgTpISdzACo+9TqC0A4x4MDVdSdYA/lFQ==","signatures":[{"sig":"MEYCIQDyKLWkNxDptgBWKyZ7s+0NsrVUKCbhhgJjnH9HEYF3pAIhAIrN2EWWUriZFj/JUULJisRLsAE1MEtF2vUwY9Ldy9M8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.1.0-alpha.87","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":14587529},"main":"./dist/index.js","spfn":{"prefix":"/_auth","routes":{"dir":"./dist/server/routes","basePath":"/auth"},"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.1.0-alpha.87.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./lib":{"types":"./dist/lib.d.ts","import":"./dist/lib.js","require":"./dist/lib.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./adapters":{"types":"./dist/adapters.d.ts","import":"./dist/adapters.js","require":"./dist/adapters.js"},"./nextjs/api":{"types":"./dist/adapters/nextjs/api.d.ts","import":"./dist/adapters/nextjs/api.js","require":"./dist/adapters/nextjs/api.js"},"./nextjs/server":{"types":"./dist/adapters/nextjs/server.d.ts","import":"./dist/adapters/nextjs/server.js","require":"./dist/adapters/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest","build":"npm run db:generate && tsup","clean":"rm -rf dist migrations","watch":"tsup --watch","codegen":"spfn codegen run","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:08607c56-42f8-4c8f-a512-2e3965149e59"}},"_resolved":"/tmp/d9cf8106652a7f281a159d15ff4aac74/spfn-auth-0.1.0-alpha.87.tgz","_integrity":"sha512-wALuFZWJ4WS4ncmre94uCxdXsqm7lF6uULYOp4UFpxDnELghqOCMNJgTpISdzACo+9TqC0A4x4MDVdSdYA/lFQ==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.6.2","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.19.5","dependencies":{"jose":"^6.1.0","bcrypt":"^6.0.0","postgres":"^3.4.0","@spfn/core":"0.1.0-alpha.86","drizzle-orm":"^0.44.7","jsonwebtoken":"^9.0.2"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.19.2","glob":"^11.0.3","hono":"^4.9.0","next":"^15.0.0","spfn":"0.1.0-alpha.86","tsup":"^8.3.5","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcrypt":"^5.0.2","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":">=13.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.1.0-alpha.87_1762700106239_0.09573998576698317","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.88":{"name":"@spfn/auth","version":"0.1.0-alpha.88","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.1.0-alpha.88","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"2e67de3f8572ebe673a8e42331099b1d833b4c70","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.1.0-alpha.88.tgz","fileCount":144,"integrity":"sha512-K1yAjn5p5LDLoyBSwtb65mWKAgSFNgtz6M9Wn2IaSLEYNRvLAn5kpIx0e51reJRMHX+gzOVN3Ts4ym5PAf/+oA==","signatures":[{"sig":"MEUCICPJhJjWpZ/FUVHpRoOxrjABufgj1cct9gd9r65+exhKAiEA0k0rIrlAfrd7YEky1KUpZozLj7RyzA//nm5DU1Ms+Bk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.1.0-alpha.88","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":14587533},"main":"./dist/index.js","spfn":{"prefix":"/_auth","routes":{"dir":"./dist/server/routes","basePath":"/auth"},"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.1.0-alpha.88.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./lib":{"types":"./dist/lib.d.ts","import":"./dist/lib.js","require":"./dist/lib.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./adapters":{"types":"./dist/adapters.d.ts","import":"./dist/adapters.js","require":"./dist/adapters.js"},"./nextjs/api":{"types":"./dist/adapters/nextjs/api.d.ts","import":"./dist/adapters/nextjs/api.js","require":"./dist/adapters/nextjs/api.js"},"./nextjs/server":{"types":"./dist/adapters/nextjs/server.d.ts","import":"./dist/adapters/nextjs/server.js","require":"./dist/adapters/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest","build":"npm run db:generate && tsup","clean":"rm -rf dist migrations","watch":"tsup --watch","codegen":"spfn codegen run","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:08607c56-42f8-4c8f-a512-2e3965149e59"}},"_resolved":"/tmp/33116cab1a7610d2da8f48b5eab6e242/spfn-auth-0.1.0-alpha.88.tgz","_integrity":"sha512-K1yAjn5p5LDLoyBSwtb65mWKAgSFNgtz6M9Wn2IaSLEYNRvLAn5kpIx0e51reJRMHX+gzOVN3Ts4ym5PAf/+oA==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.6.2","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.19.5","dependencies":{"jose":"^6.1.0","bcrypt":"^6.0.0","postgres":"^3.4.0","@spfn/core":"0.1.0-alpha.88","drizzle-orm":"^0.44.7","jsonwebtoken":"^9.0.2"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","glob":"^11.0.3","hono":"^4.9.0","next":"^16.0.1","spfn":"0.1.0-alpha.88","tsup":"^8.5.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcrypt":"^5.0.2","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^16.0.1"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.1.0-alpha.88_1762701490982_0.7431925529359054","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.1":{"name":"@spfn/auth","version":"0.2.0-beta.1","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.1","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"9ec1b6a8bd2b3255dc05cee2d3765b4b1b02864a","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.1.tgz","fileCount":28,"integrity":"sha512-ipTJCtxOH1KSWTLNI2ny2ViQwIZHtuz4hFIJGby3uNag7xPwE0fyGCiQRy/pi6NEPI2ASalPOa37XAmdhD54VQ==","signatures":[{"sig":"MEQCIFe3+kisdd0VjT1EdqIfjKzH4TuCdPxxCFEbcG3INHV4AiAPTwuboEpi3YV6qY6FfaYP62akw9up7MP9xNQ7DFWTzQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1846595},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.1.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && npm run db:generate && tsup","clean":"rm -rf dist migrations","watch":"tsup --watch","codegen":"spfn codegen run","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/7e54ce46b8986a2aff33f5c0de1f1903/spfn-auth-0.2.0-beta.1.tgz","_integrity":"sha512-ipTJCtxOH1KSWTLNI2ny2ViQwIZHtuz4hFIJGby3uNag7xPwE0fyGCiQRy/pi6NEPI2ASalPOa37XAmdhD54VQ==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.6.4","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.19.6","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.1","drizzle-orm":"^0.44.7","jsonwebtoken":"^9.0.2"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"16.0.7","spfn":"0.2.0-beta.1","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0","@aws-sdk/client-sns":"^3.0.0"},"peerDependenciesMeta":{"next":{"optional":true},"@aws-sdk/client-sns":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.1_1765167924956_0.9105626732779073","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.2":{"name":"@spfn/auth","version":"0.2.0-beta.2","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.2","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"d60e7bd85c606ec6c61ca56c3e6bb288c2b57a11","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.2.tgz","fileCount":28,"integrity":"sha512-jdfRS76GcilduwttsF4b7ibpbUxu62R1T5fBHUfsjz2LR/iTlEkJetbTGd/nmBvft8+5vUvjtY0BiaZs5kPy9A==","signatures":[{"sig":"MEYCIQCfM5mQ9ZFDionyCQgKlQWh2hESod/IZCOokWki/cTwKQIhAPTMxJLBPFYYlKeu0+WxgyeLSnjRx/jia+Rh+4W0PMB0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1846593},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.2.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && npm run db:generate && tsup","clean":"rm -rf dist migrations","watch":"tsup --watch","codegen":"spfn codegen run","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/8ccb4a68dfda580476fa3f8668b8cac7/spfn-auth-0.2.0-beta.2.tgz","_integrity":"sha512-jdfRS76GcilduwttsF4b7ibpbUxu62R1T5fBHUfsjz2LR/iTlEkJetbTGd/nmBvft8+5vUvjtY0BiaZs5kPy9A==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.6.4","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.19.6","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.1","drizzle-orm":"^0.44.7","jsonwebtoken":"^9.0.2"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"16.0.7","spfn":"0.2.0-beta.1","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0","@aws-sdk/client-sns":"^3.0.0"},"peerDependenciesMeta":{"next":{"optional":true},"@aws-sdk/client-sns":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.2_1765247052230_0.5844109794530279","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.3":{"name":"@spfn/auth","version":"0.2.0-beta.3","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.3","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"c6064d449489dd362b56d17baafce308c70aeb0b","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.3.tgz","fileCount":28,"integrity":"sha512-6gw1JhifuRjOPB0XRskO/+CWycetMsBJwUpLrW8Gc136/iGNVjeDZ/CrD5j0gyBQFbQrq+8dacyi0loMj7zVng==","signatures":[{"sig":"MEQCIGL/3FWCcSyTissmXtn1z4GVcgbmkL5SqhzVQ52US+RVAiBYjgkBnEgnH4CoG7TJO1EQ4PYlgag3t1HB9U+Skl91Ew==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1848759},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.3.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/ef3469ac0aef82f8048d5bd32308512c/spfn-auth-0.2.0-beta.3.tgz","_integrity":"sha512-6gw1JhifuRjOPB0XRskO/+CWycetMsBJwUpLrW8Gc136/iGNVjeDZ/CrD5j0gyBQFbQrq+8dacyi0loMj7zVng==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.6.4","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.19.6","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.1","drizzle-orm":"^0.44.7","jsonwebtoken":"^9.0.2"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"16.0.7","spfn":"0.2.0-beta.1","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0","@aws-sdk/client-sns":"^3.0.0"},"peerDependenciesMeta":{"next":{"optional":true},"@aws-sdk/client-sns":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.3_1765247482139_0.10269212257280214","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.4":{"name":"@spfn/auth","version":"0.2.0-beta.4","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.4","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"c084dbfc0e2931d64e36ba1539123a8428809e48","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.4.tgz","fileCount":28,"integrity":"sha512-nmkNRp4/w5lLAqloE0AvOIkF9Xk18jGfT2tJw44ymlZW9IAb7UWCLoE+L7P7R0tkpzDCSuweUYb03/IwQoy9ow==","signatures":[{"sig":"MEUCIHcXJg9goIZvV8kLjOGCVtV+FQd4pumDGDJNxn73Ob1rAiEAoB9C4TvQ8dIs4P8/EGb+Tx7CkFvJpOG7KV+v7WnSfic=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1875985},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.4.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/5f394a24ab9253d7b83ccf4acbf738f1/spfn-auth-0.2.0-beta.4.tgz","_integrity":"sha512-nmkNRp4/w5lLAqloE0AvOIkF9Xk18jGfT2tJw44ymlZW9IAb7UWCLoE+L7P7R0tkpzDCSuweUYb03/IwQoy9ow==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.7.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.19.6","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.4","drizzle-orm":"^0.44.7","jsonwebtoken":"^9.0.2"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.2","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0","@aws-sdk/client-sns":"^3.0.0"},"peerDependenciesMeta":{"next":{"optional":true},"@aws-sdk/client-sns":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.4_1765873647841_0.17012501534755686","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.5":{"name":"@spfn/auth","version":"0.2.0-beta.5","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.5","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"3fdef3cb46f1f1874a172208678005d55494965a","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.5.tgz","fileCount":28,"integrity":"sha512-2LvQMrkKGiAVYJ24f1p/HEA8pU23r9Q4aqkGSksxpi1j/tV1UZUf0AOAYdmxjobacqKvcZyvJnJQyH/bdQcN/g==","signatures":[{"sig":"MEUCIQCQroOIxmScAUjAVV8xvlWxHXgPQNQdSIGBSBnWT3Z40gIgc1mJmvRTnf2YJMQ+psB+k33ZwZoQ/ULuj1Aykp6HeEI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1875985},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.5.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/5bb20b59d4ef3b02dc1d68659735781a/spfn-auth-0.2.0-beta.5.tgz","_integrity":"sha512-2LvQMrkKGiAVYJ24f1p/HEA8pU23r9Q4aqkGSksxpi1j/tV1UZUf0AOAYdmxjobacqKvcZyvJnJQyH/bdQcN/g==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.7.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.19.6","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.4","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.3","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0","@aws-sdk/client-sns":"^3.0.0"},"peerDependenciesMeta":{"next":{"optional":true},"@aws-sdk/client-sns":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.5_1765876237493_0.3007137810973646","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.6":{"name":"@spfn/auth","version":"0.2.0-beta.6","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.6","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"40d91f6213d2344e0cb3a4e62f8d5df071f2c084","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.6.tgz","fileCount":28,"integrity":"sha512-E/6W6T9nx349meMh/M33xfVEBcp2IzqcTshXPMF14xFo3lqvn1HvgRh0PDYZCsedXWKJMzZDg2WYJON0m08hWg==","signatures":[{"sig":"MEUCIQDu27dYYqQAiRtMHYsyT+mXLvkTJ5iek7wOEPsY6OHqnwIgcFGyupbrexr2RXpPeGXywUM7KAX/R3KZlHeFb7YPhbM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1875985},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.6.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/b8f213794ec21216e4e47d42050b3000/spfn-auth-0.2.0-beta.6.tgz","_integrity":"sha512-E/6W6T9nx349meMh/M33xfVEBcp2IzqcTshXPMF14xFo3lqvn1HvgRh0PDYZCsedXWKJMzZDg2WYJON0m08hWg==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.7.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.19.6","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.5","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.4","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0","@aws-sdk/client-sns":"^3.0.0"},"peerDependenciesMeta":{"next":{"optional":true},"@aws-sdk/client-sns":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.6_1765878832197_0.3216148132898782","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.8":{"name":"@spfn/auth","version":"0.2.0-beta.8","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.8","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"13d1ee11e31bf403db26c4ee4da26b151f513c94","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.8.tgz","fileCount":28,"integrity":"sha512-k5x1A+7Fm+G3SFoAg7XeOy9h5IbmC/5NuYUckgZpKImPaptCL7rE2gc6gWiVbjWT9X96Ecx/mO15N5POxm2fxg==","signatures":[{"sig":"MEYCIQC7w4QFyso7sNKf3iGPaaWR0JFRDrv3QVWeT4aPA+nAXgIhAJpsRhi9DuTTi72LPW64LGnGqXBNH10nWtjblwEJwLjW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1875564},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.8.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/a08026ca89f1f5e206b73c65d10e05b8/spfn-auth-0.2.0-beta.8.tgz","_integrity":"sha512-k5x1A+7Fm+G3SFoAg7XeOy9h5IbmC/5NuYUckgZpKImPaptCL7rE2gc6gWiVbjWT9X96Ecx/mO15N5POxm2fxg==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.7.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.19.6","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.5","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.5","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0","@aws-sdk/client-ses":"^3.0.0","@aws-sdk/client-sns":"^3.0.0"},"peerDependenciesMeta":{"next":{"optional":true},"@aws-sdk/client-ses":{"optional":true},"@aws-sdk/client-sns":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.8_1766119167294_0.17270269536845007","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.9":{"name":"@spfn/auth","version":"0.2.0-beta.9","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.9","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"093c7fa1e1ddf661642a24f87fbd3f13189c02a8","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.9.tgz","fileCount":28,"integrity":"sha512-dR9LCdSb1OBDQKAG+rxylV642hgOEKFv2hh9rmn/Sx/CiIwkN8Bg5dlgJdDiVl21bkXtKM53FJapfUW5bL+l/w==","signatures":[{"sig":"MEQCIGcRAve1l29UuUFMCqZEcWtz7uUw5fap0YWFL8TQVPGIAiAOYgeSWhiNrRR+h6F/JCCoO3xjZQP438VpTuU3AQtBRA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1877269},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.9.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/fd863f09895cac94f078fde508849f05/spfn-auth-0.2.0-beta.9.tgz","_integrity":"sha512-dR9LCdSb1OBDQKAG+rxylV642hgOEKFv2hh9rmn/Sx/CiIwkN8Bg5dlgJdDiVl21bkXtKM53FJapfUW5bL+l/w==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.7.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.19.6","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.5","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.5","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0","@aws-sdk/client-ses":"^3.0.0","@aws-sdk/client-sns":"^3.0.0"},"peerDependenciesMeta":{"next":{"optional":true},"@aws-sdk/client-ses":{"optional":true},"@aws-sdk/client-sns":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.9_1766120100201_0.03026105064589646","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.10":{"name":"@spfn/auth","version":"0.2.0-beta.10","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.10","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"abf567fd2ebd5b6f4e33db36ca83ef3e85b66f7c","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.10.tgz","fileCount":28,"integrity":"sha512-WSvU1IiVm8utWm2+OedRxqOkP0NiUM+RKdP3RAJRL21Sp6LsZFJFPA/Q8xlHZ71GvDJOd8FMZ4W/5zIq8UmTbQ==","signatures":[{"sig":"MEQCIFfl6+GYOvslNBIgLACk6g8St1fv9uhS50PlvDHdEe3QAiATLhqugRhn3D6GvZfYheFb9XrRp/YeS5IcDMIEdl9PNg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1876934},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.10.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/cba905df80fa97845158c9c19ce2290c/spfn-auth-0.2.0-beta.10.tgz","_integrity":"sha512-WSvU1IiVm8utWm2+OedRxqOkP0NiUM+RKdP3RAJRL21Sp6LsZFJFPA/Q8xlHZ71GvDJOd8FMZ4W/5zIq8UmTbQ==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.7.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.19.6","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.5","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.5","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0","@aws-sdk/client-ses":"^3.0.0","@aws-sdk/client-sns":"^3.0.0"},"peerDependenciesMeta":{"next":{"optional":true},"@aws-sdk/client-ses":{"optional":true},"@aws-sdk/client-sns":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.10_1766120497145_0.16536378222039327","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.11":{"name":"@spfn/auth","version":"0.2.0-beta.11","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.11","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"ff2de774deeb0db72db27fd75fc8cc01eeea878f","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.11.tgz","fileCount":28,"integrity":"sha512-4B5W0mFWJqO+WG+XxbolQTc1uCJt60kiEf0MMW2QxvnszlxF1wGQkvBYtThm7dBBpbUd6Y8h3NNHnHYC0FU8iw==","signatures":[{"sig":"MEUCIB7AoBE63eADj73COzGi0SVW3sY3T6UW7TPPZr5/PX7EAiEAk8X1m59WYBJI0uyWAeNqI2sZjvVyTgZ00C6pP6Ml2lg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1824988},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.11.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/9f02af4f0b08cbb3d5601a809c181804/spfn-auth-0.2.0-beta.11.tgz","_integrity":"sha512-4B5W0mFWJqO+WG+XxbolQTc1uCJt60kiEf0MMW2QxvnszlxF1wGQkvBYtThm7dBBpbUd6Y8h3NNHnHYC0FU8iw==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.8.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.0","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.11","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.7","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.11_1769347087565_0.7144532554928251","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.12":{"name":"@spfn/auth","version":"0.2.0-beta.12","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.12","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"5512b215b803553b42c15bc1e296af928d40ec9f","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.12.tgz","fileCount":30,"integrity":"sha512-GuTiNopK0Xr6OcoZDHlwu2Zvbxnsfcs9d3woPJc69Oj5/IFV+YQqoIMr08VNnavY/H+pFzeQBiY8LNKOC38isg==","signatures":[{"sig":"MEUCIQDIYu/JU7uURTBDFa889rB4mC4nOVEwdczv1FmllT1OjAIgChj8Y93Hf7WG5xarePJWSTWhXhdjSzlvpOCCsjNT05s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.12","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1965499},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.12.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/62a8270811e66544767ec6bd394f0568/spfn-auth-0.2.0-beta.12.tgz","_integrity":"sha512-GuTiNopK0Xr6OcoZDHlwu2Zvbxnsfcs9d3woPJc69Oj5/IFV+YQqoIMr08VNnavY/H+pFzeQBiY8LNKOC38isg==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.8.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.0","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.12","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.7","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.12_1769483010631_0.5327407541954738","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.13":{"name":"@spfn/auth","version":"0.2.0-beta.13","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.13","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"cd803c684023e3e56df241f2a8cc1122719f8421","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.13.tgz","fileCount":30,"integrity":"sha512-ByvaH3KYDE+YQ91+QNfgLS5F/5Z2iq83uoq8oK9KLg+93SXixpBJlp651uWSl3+3R/AerH737D3r/iMy29s30g==","signatures":[{"sig":"MEUCIEo4GzFr4oH8qFZlDG7TLaIhSUewlON5L2DIlQenkQAgAiEAkGIVn1n4EutipQyDRnQFVQYXxT4DLq+11Uqhylxypgw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.13","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1973217},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.13.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/96d88c8a382662df7e1759da90385b0c/spfn-auth-0.2.0-beta.13.tgz","_integrity":"sha512-ByvaH3KYDE+YQ91+QNfgLS5F/5Z2iq83uoq8oK9KLg+93SXixpBJlp651uWSl3+3R/AerH737D3r/iMy29s30g==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.8.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.0","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.12","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.7","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.13_1769522756104_0.696908376433818","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.14":{"name":"@spfn/auth","version":"0.2.0-beta.14","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.14","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"62cc50aca297dc7290d7e1004e8855cb81730c8a","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.14.tgz","fileCount":31,"integrity":"sha512-Gh0wNORatqOT/zsgTjvRmmCZYdsWsrfoeJWaA5ZsTv/AmhzT8JkttmhK76qeSAWLQOy/IDD+VVjj6Ie1YtcB4Q==","signatures":[{"sig":"MEYCIQCX34oCVqa3WbbL3p9kNf8xk+H6Xb6Af7BElBSOoZGfVwIhAK2KwfHRGXs3Ncy9UTBQepXHK9gZiBzNXY9fDyESjcUo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.14","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1974032},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.14.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/ce74c6df138b77590c9c6bef6681e7d2/spfn-auth-0.2.0-beta.14.tgz","_integrity":"sha512-Gh0wNORatqOT/zsgTjvRmmCZYdsWsrfoeJWaA5ZsTv/AmhzT8JkttmhK76qeSAWLQOy/IDD+VVjj6Ie1YtcB4Q==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.8.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.0","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.12","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.7","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.14_1769524378140_0.011326521063965256","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.15":{"name":"@spfn/auth","version":"0.2.0-beta.15","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.15","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"d484d5461f629ffb04538ab0260e9f941c66c4f0","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.15.tgz","fileCount":31,"integrity":"sha512-ioylNNYth23vgMpZErrH7Ptvhx8QvU/ZKyfyd6dk8KH/z+OyFOoJWMKYcIP3+2mLFr4tm6t3PpYM6toowAtpmg==","signatures":[{"sig":"MEUCIG+1xIMyiQiH7u0X4l9k+QaVFO3I7Atv4tKt/TuxcYuDAiEAqWqI8Z228pUk4tFMCk9ndh0XaSsrZeI8MHduodgrYFc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.15","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1981845},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.15.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/70f178cb575fd2f6b17dd08ef2df97dd/spfn-auth-0.2.0-beta.15.tgz","_integrity":"sha512-ioylNNYth23vgMpZErrH7Ptvhx8QvU/ZKyfyd6dk8KH/z+OyFOoJWMKYcIP3+2mLFr4tm6t3PpYM6toowAtpmg==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.8.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.0","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.12","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.7","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.15_1769694195676_0.34023660741049966","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.16":{"name":"@spfn/auth","version":"0.2.0-beta.16","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.16","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"4a13760f22fcc5af0eca32a09438f570812076e0","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.16.tgz","fileCount":31,"integrity":"sha512-XxqtbpdotaxHzgvwSh/lMb7y6RM8QsCjjNzHAHtrnJYftzbqTRShqLpT9j1hC0qQwvkKChp6YX2FxhVqBzLufQ==","signatures":[{"sig":"MEUCIQDKRy8R+/mMxjtNkj6sJigPSvuBfbuqWt3CyS3rOy8vhAIgc+Gzpj5uhxG591yAOZE0HQl8TOm0QuOQheUdrruWwQs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.16","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1986904},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.16.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/96cb9d89bf5977d8170dc0d176abdfce/spfn-auth-0.2.0-beta.16.tgz","_integrity":"sha512-XxqtbpdotaxHzgvwSh/lMb7y6RM8QsCjjNzHAHtrnJYftzbqTRShqLpT9j1hC0qQwvkKChp6YX2FxhVqBzLufQ==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.8.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.0","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.12","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.7","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.16_1769697613866_0.240691055558931","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.17":{"name":"@spfn/auth","version":"0.2.0-beta.17","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.17","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"8754ff9dc611563bc724adf841ffc141eed16e8f","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.17.tgz","fileCount":31,"integrity":"sha512-IkOlSNs0nDk3PIpcguYjDKFhCXT9lP1YpUiotVNYrqN2quIp6QdKm+BH7oGDpNA6saQ7x3sPid9uRffCsEyPtw==","signatures":[{"sig":"MEUCIQCz4AuKI2Oxlc2tKpoYyzuhZWo7xSuTptrcBlk0xcGpMwIgZNN3Hh+0tq05Krktc9tEGqe944wdIu9o0+d8hKmQ+yg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.17","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1987175},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.17.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/03f475c69752354985ec5ad0ee6f1998/spfn-auth-0.2.0-beta.17.tgz","_integrity":"sha512-IkOlSNs0nDk3PIpcguYjDKFhCXT9lP1YpUiotVNYrqN2quIp6QdKm+BH7oGDpNA6saQ7x3sPid9uRffCsEyPtw==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.8.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.0","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.12","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.7","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.17_1769699574059_0.9567840023756684","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.18":{"name":"@spfn/auth","version":"0.2.0-beta.18","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.18","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"2deca20338db0af52fabccc56f778a7e1ce26ed0","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.18.tgz","fileCount":31,"integrity":"sha512-ShOKCPVh128GU32F0j58yoNsHDbOpjbGqoOM2RaMSkPsi9UOHpPPAK/fjD4e30RGgJKEGSZDdBVLLjhMnjLARA==","signatures":[{"sig":"MEUCIQCSQtnUnG1RvKQRfBkUwyglcl8lKxsTfN2tRUGD9iGiJAIgeNwKLPNjD43lAxp1RH/U9mAuL5FomcUdAxyDwcv5FTA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.18","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1988592},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.18.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/cdfab82fa5a8bb8d6324ee27b23fa682/spfn-auth-0.2.0-beta.18.tgz","_integrity":"sha512-ShOKCPVh128GU32F0j58yoNsHDbOpjbGqoOM2RaMSkPsi9UOHpPPAK/fjD4e30RGgJKEGSZDdBVLLjhMnjLARA==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.10.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.0","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.14","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.13","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.18_1771239669254_0.2379780758678942","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.19":{"name":"@spfn/auth","version":"0.2.0-beta.19","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.19","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"9a400ecfdfc1aaafa1802a9e2bfe7251e4bd9f89","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.19.tgz","fileCount":31,"integrity":"sha512-xEPMHQvVmBXl9h/uDSFRBEMaG0gatu5gIyaMGjdcIbqY6EdH9nUU+cYC+BlNtRvpb96xKtPv/l5Cy+f7sAx1iw==","signatures":[{"sig":"MEQCIF769uwMyS6qFVdXW52MGmTPo68PznNhKDZqTomTqSfOAiB/S6F0ZmTP+6VVSF6KAuJ9DoiuXb3NMWQIdk+IR2U++A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.19","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2005474},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.19.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/ab387027fcbe0426037d27da3e3f31e5/spfn-auth-0.2.0-beta.19.tgz","_integrity":"sha512-xEPMHQvVmBXl9h/uDSFRBEMaG0gatu5gIyaMGjdcIbqY6EdH9nUU+cYC+BlNtRvpb96xKtPv/l5Cy+f7sAx1iw==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.10.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.0","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.14","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.13","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.19_1771298755707_0.3661228833365573","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.20":{"name":"@spfn/auth","version":"0.2.0-beta.20","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.20","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"19332a9232f30aa7744631c1e880705a1b3637d7","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.20.tgz","fileCount":31,"integrity":"sha512-Nk/6RNkuVVf8cJ8Cp3wduTpO3OHehiaWoMaVwIRq7G1UAjvWix+K6PkUAz/r7hjbOqHsxPAH/Waoj0ntOBLY9w==","signatures":[{"sig":"MEQCIBuQIIRW35vxTQajf2dAAaxo8+7/azFDcwwS7uKE5r4iAiBNFa96doNBSkHvKYJhD9hj5Sr0PmRX5eDrHII7ka6nog==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.20","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2006813},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.20.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/23536d40be3c843d8782e20ff5c63fc5/spfn-auth-0.2.0-beta.20.tgz","_integrity":"sha512-Nk/6RNkuVVf8cJ8Cp3wduTpO3OHehiaWoMaVwIRq7G1UAjvWix+K6PkUAz/r7hjbOqHsxPAH/Waoj0ntOBLY9w==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.10.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.0","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.16","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.2"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.13","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.20_1771320181606_0.4284578279532316","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.21":{"name":"@spfn/auth","version":"0.2.0-beta.21","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.21","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"933e7e034631bb6f42123e9b6552132142f1a491","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.21.tgz","fileCount":31,"integrity":"sha512-IGhvDunl9mZT5snTf8ZpY7cxUhgpLLx9o0b5hUz2qVLZioJek7leWGk7mZKS5QYIxQhPNrRiMH245mfK1tb8QQ==","signatures":[{"sig":"MEQCIA4dRwuds6oqp9vEpyGugtWkbkG8OsQ1HsnrW4DjAIqGAiAlFzs/MF4ZU5k3VIBp4PjQHYzSAT4knxttySfrcYDfzA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.21","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1996871},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.21.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/17201b43e3275e82204dd7962cb7aba9/spfn-auth-0.2.0-beta.21.tgz","_integrity":"sha512-IGhvDunl9mZT5snTf8ZpY7cxUhgpLLx9o0b5hUz2qVLZioJek7leWGk7mZKS5QYIxQhPNrRiMH245mfK1tb8QQ==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.10.1","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.0","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.18","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.3"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.15","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.21_1771567381482_0.45376054283527845","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.22":{"name":"@spfn/auth","version":"0.2.0-beta.22","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.22","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"cd014c1aac9349a6728e9417bb0d9914a63a771a","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.22.tgz","fileCount":31,"integrity":"sha512-cXLQgItYwAp4TH0eaB2J7aU/x2fgUtbGqLnd73xozfiBbZsC8kW/kniRcaCWqhLVB9DbrXSd56C9JFQhPkp0CQ==","signatures":[{"sig":"MEQCIA22WstzRtBn9d6m6/d3LQDpACEzayhWSYYYbUZrEqNeAiB96VJnYJl982o5x348aug+lhxoZHxCN/Spr0IcXN7E4g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.22","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1998739},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.22.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/133e38318693ec71411bac863955108e/spfn-auth-0.2.0-beta.22.tgz","_integrity":"sha512-cXLQgItYwAp4TH0eaB2J7aU/x2fgUtbGqLnd73xozfiBbZsC8kW/kniRcaCWqhLVB9DbrXSd56C9JFQhPkp0CQ==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.10.1","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.0","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.20","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.8"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.19","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.22_1771736774288_0.2488160830622097","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.23":{"name":"@spfn/auth","version":"0.2.0-beta.23","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.23","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"1b716624bbbd2939ffcb7642457cb95a16701e6b","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.23.tgz","fileCount":31,"integrity":"sha512-Yt+LrHtbUQjwu5ylacqQRmGlS/vTB+IUv+itOutRBT11XvGoFfu9DQeMN5xw2qbT+2AOnMtIEkuREIOsRIF1TA==","signatures":[{"sig":"MEUCICJMzKH6YdmL6qPJk3ZIsR2gBQvVXrV/T75hanUREjkOAiEAlIL+Uk908TRbtfTuU6R8hU3+aFViJPMNRfJtB/yYKac=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.23","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1998739},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.23.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/0ee9e2238e187b7d2f11de0a719b9251/spfn-auth-0.2.0-beta.23.tgz","_integrity":"sha512-Yt+LrHtbUQjwu5ylacqQRmGlS/vTB+IUv+itOutRBT11XvGoFfu9DQeMN5xw2qbT+2AOnMtIEkuREIOsRIF1TA==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.10.1","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.0","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.21","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.9"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.20","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.23_1771745354612_0.9543340187008384","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.24":{"name":"@spfn/auth","version":"0.2.0-beta.24","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.24","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"cf29e745b7b1397f869caf9787f13c9fd500e2a4","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.24.tgz","fileCount":31,"integrity":"sha512-psMWv3hGTXTcEZHXViCNby42hL+f+hcOpJJpHHrpgdJAj09xmjTG9tOVbYOPHLu85d6DHdElotB+Fq84+LAk5g==","signatures":[{"sig":"MEQCIH17WUstyf+TIuEzYnyhYEh5hOe9kIFXxWdbJO1kYbe/AiAZMhCWkNYzC8PW1QcB2BJSyfSR5WymJabRCJawBiviEw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.24","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1998740},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.24.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/d2e7fcedd5a7c2eb6f852c41a44df22c/spfn-auth-0.2.0-beta.24.tgz","_integrity":"sha512-psMWv3hGTXTcEZHXViCNby42hL+f+hcOpJJpHHrpgdJAj09xmjTG9tOVbYOPHLu85d6DHdElotB+Fq84+LAk5g==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.10.1","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.0","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.22","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.10"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.21","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.24_1771752928294_0.06769272376182123","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.25":{"name":"@spfn/auth","version":"0.2.0-beta.25","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.25","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"4c5081273371d55648c414a43f3231fc2acdef15","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.25.tgz","fileCount":31,"integrity":"sha512-OizMGB3oUKIBrRztu+TMTywdAA2lGy1cCByYJ3W5OKYtLdoe7sTcVaDF7dvJUxkeJ4FWM1pu1hil/DUwcAIyqQ==","signatures":[{"sig":"MEUCIBJrK5rIOQUExQ7ZppSj+QPZkXCfuuVmtPKhLDbQ7oBaAiEA4/h2Qmr5fjEW06cQNyjWVls/hM+bACdJigOed4pXoPo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.25","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2002794},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.25.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/45ee9d864e194dc1defa0ef4a66f061b/spfn-auth-0.2.0-beta.25.tgz","_integrity":"sha512-OizMGB3oUKIBrRztu+TMTywdAA2lGy1cCByYJ3W5OKYtLdoe7sTcVaDF7dvJUxkeJ4FWM1pu1hil/DUwcAIyqQ==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.10.1","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.0","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.22","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.10"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.21","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.25_1771754379440_0.0016073957395768002","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.26":{"name":"@spfn/auth","version":"0.2.0-beta.26","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.26","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"0f1cf20654753495e7cd7d6f293c3778925dcf6b","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.26.tgz","fileCount":31,"integrity":"sha512-6PFeFfDXh48jDoZIub9M/ihhWmD6CSbWQ3JmrynCmcOZmJ83W4QBbhAqsVGYD8DFFO8gUViiY103fMg+5OF9yQ==","signatures":[{"sig":"MEYCIQDmA4EUAXtiBWd7lgGh6plbb6JkJjCB0kcwO46uqdFdtAIhAITtXaYoIW04Lur8rAwa7X6mmVHLNxAyo2dh33Xqcyzk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.26","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2010609},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.26.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/37643bdf6b7e21c9c2efc5297930e35d/spfn-auth-0.2.0-beta.26.tgz","_integrity":"sha512-6PFeFfDXh48jDoZIub9M/ihhWmD6CSbWQ3JmrynCmcOZmJ83W4QBbhAqsVGYD8DFFO8gUViiY103fMg+5OF9yQ==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.10.1","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.0","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.23","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.22","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.26_1771833624424_0.7458862613181036","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.27":{"name":"@spfn/auth","version":"0.2.0-beta.27","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.27","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"16d2ec649c7eb946912269d9d6c536b3750c0529","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.27.tgz","fileCount":31,"integrity":"sha512-FwsKT5ZmosnD5nSnKyb4kpye+VGg0g1hHgiKGhQYRorGHWkivc7NCkNBLt7eKVul2nledOuMl5f63VwjnB6lLw==","signatures":[{"sig":"MEUCIHm2VE8M49QWhirpStuf9ZsJEjKi/3ncKo1ppiHoez7yAiEAxaUagj4OnecUs9F/oyn0zPPJkmUrwfNRscf1kLUX4Z0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.27","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2013179},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.27.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/e47f20b25ea9bb655b9d7a2e59a37689/spfn-auth-0.2.0-beta.27.tgz","_integrity":"sha512-FwsKT5ZmosnD5nSnKyb4kpye+VGg0g1hHgiKGhQYRorGHWkivc7NCkNBLt7eKVul2nledOuMl5f63VwjnB6lLw==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.10.1","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.0","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.23","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.22","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.27_1771947074527_0.5873565523568254","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.28":{"name":"@spfn/auth","version":"0.2.0-beta.28","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.28","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"719959d241ecc385fea17d0a776206868c2d9076","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.28.tgz","fileCount":31,"integrity":"sha512-MiLDpcrURXyc2JjXNLUA95lq+AmQ0LGhw/DQLqlKIQLPld4Naha7NO1baejzH0SdleIQ8Y5DcHJ0dMj58iG44g==","signatures":[{"sig":"MEUCIFETlkYpmo61UZEwv2TdmcrTpNn5bywNZGIbNp2i9Gp/AiEAn+ieagSlPdJ3YV/mO6Wtxj9eChkZr6ItWae2Nj2+J1Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.28","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2026052},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.28.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/8ed21013558655bf6f19fd243edb5dfc/spfn-auth-0.2.0-beta.28.tgz","_integrity":"sha512-MiLDpcrURXyc2JjXNLUA95lq+AmQ0LGhw/DQLqlKIQLPld4Naha7NO1baejzH0SdleIQ8Y5DcHJ0dMj58iG44g==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.10.1","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.0","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.23","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.22","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.28_1772023847192_0.6986233778266027","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.29":{"name":"@spfn/auth","version":"0.2.0-beta.29","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.29","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"c3fcbefaeacafffa9506d78c3e8758b84220745e","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.29.tgz","fileCount":31,"integrity":"sha512-oPtri4CSt/53r0tmaoy7bcdxsV2gepO+P1MV3ACxESvI4A9erKTJdNdf4JyJDHcRkJ7zWAGelvr6x+t/r/o4+w==","signatures":[{"sig":"MEYCIQCjPcAMdTpWI6GPk3E3ZPQ7QaGq/wYJDiYi98t7gaIj8gIhAJbXwqmpSDSJMGzcZpQz+6NhsPTFN3viRFO9K4NDlodA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.29","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2026164},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.29.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/970296be92a1eadcd36fc05759c0b68f/spfn-auth-0.2.0-beta.29.tgz","_integrity":"sha512-oPtri4CSt/53r0tmaoy7bcdxsV2gepO+P1MV3ACxESvI4A9erKTJdNdf4JyJDHcRkJ7zWAGelvr6x+t/r/o4+w==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.10.1","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.0","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.23","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.22","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.29_1772024205572_0.7438561620780739","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.30":{"name":"@spfn/auth","version":"0.2.0-beta.30","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.30","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"4e0087c2e8b728a0136f4c3b7ac5518ef96ce12e","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.30.tgz","fileCount":33,"integrity":"sha512-7I6bbBW8VtK49Ho9miyaBsriaqFLP3qF8S6cSTVD/RoIBZRCDPozhnNUz3YcoXj6luUFv4GQWU/HzFdn8djptA==","signatures":[{"sig":"MEUCIFXvxdWKT34+yXq30wO7UZcJfK4Zn7iwCddwkrSQ3NyXAiEA2K6NmRxQnY/hPSkVljkoZizFNZd2aeYcqp7ddGbxVQ0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.30","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2070214},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.30.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/ba095fb8121dad44fdb527cd5f83f491/spfn-auth-0.2.0-beta.30.tgz","_integrity":"sha512-7I6bbBW8VtK49Ho9miyaBsriaqFLP3qF8S6cSTVD/RoIBZRCDPozhnNUz3YcoXj6luUFv4GQWU/HzFdn8djptA==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.10.1","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.0","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.23","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.22","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.30_1772024658100_0.38581923054548195","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.31":{"name":"@spfn/auth","version":"0.2.0-beta.31","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.31","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"364db5a8e4f698c0561b197862182cfa2615747d","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.31.tgz","fileCount":33,"integrity":"sha512-Bkd2kZlFnhOc8TxTb2frdEFbTpfv63HQ+00WouOtQ85FHUBpGqPgWA9Gb1if2kCtSVUwa1CWotjHDGU3tIlicw==","signatures":[{"sig":"MEYCIQDeq5PFzhQYmbYTM2yRQ+QOh8UwKWmGFELynigzGM7e9AIhAIqmg4fWQuj6R6IyrBfJecIjzDxf2gCfc+DN8tvFAkwb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.31","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2072427},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.31.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/470f8ce0f315dd2136d83f25677d42f1/spfn-auth-0.2.0-beta.31.tgz","_integrity":"sha512-Bkd2kZlFnhOc8TxTb2frdEFbTpfv63HQ+00WouOtQ85FHUBpGqPgWA9Gb1if2kCtSVUwa1CWotjHDGU3tIlicw==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.10.1","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.0","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.23","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.22","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.31_1772024913322_0.45979415395402956","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.32":{"name":"@spfn/auth","version":"0.2.0-beta.32","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.32","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"3a80813c098edba88848ecbf749f4fc20917a253","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.32.tgz","fileCount":33,"integrity":"sha512-6+gGOsBdhjdN+H0/cWYJwuHfGqmL3vDUEe4jPvthuPx8FNjajpDKAv/JxWUTLIXO+S8lxr82q2QYXWdWHJij4Q==","signatures":[{"sig":"MEUCIQCkfJjr4QLzE1+ILA/f3w4a1geCdGp38DqWk0ytszr8rgIgXZu9Gizz9Cyq1ipZ63XIHv/uESumrm9P2hN1Rd6AZ9E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.32","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2079175},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.32.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/2a7ec10a8ab16d888d3d1bd434636eb4/spfn-auth-0.2.0-beta.32.tgz","_integrity":"sha512-6+gGOsBdhjdN+H0/cWYJwuHfGqmL3vDUEe4jPvthuPx8FNjajpDKAv/JxWUTLIXO+S8lxr82q2QYXWdWHJij4Q==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.10.1","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.0","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.23","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.22","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.32_1772027008688_0.17657832719840272","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.33":{"name":"@spfn/auth","version":"0.2.0-beta.33","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.33","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"eedb7eda1543cb84c29b526c40ed64b5d8a45aca","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.33.tgz","fileCount":33,"integrity":"sha512-3f1VYXu5LV6ydcQiJxm5mjQ4IgbLNvqHQNwKQJncz0caCWd9GkF6NInoJKhdijXR+5w6Io64T0Vtm4fczbBjwg==","signatures":[{"sig":"MEQCIDBp6RwqSHqgUW3aqwWi3lnyOblJJPJrd4QkzRNhKyXdAiBgJN/PRFCP5NfdAKHuW7IFvV0ZwikO0tM6hlXcP1EkpA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.33","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2083493},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.33.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/8eddf5880c38ceec827359f0f5b7625f/spfn-auth-0.2.0-beta.33.tgz","_integrity":"sha512-3f1VYXu5LV6ydcQiJxm5mjQ4IgbLNvqHQNwKQJncz0caCWd9GkF6NInoJKhdijXR+5w6Io64T0Vtm4fczbBjwg==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.10.1","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.0","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.23","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.22","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.33_1772027370207_0.9836971443651783","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.34":{"name":"@spfn/auth","version":"0.2.0-beta.34","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.34","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"a56c29ceff8eb47e09020843a4dc992750071a63","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.34.tgz","fileCount":33,"integrity":"sha512-zYlzWteWn3yBaPnQbwZcguLnYIa4t/73KTHWz/puHXzwg9kPwk+FwCLfWgopQHNy07z5oDDiVqQ+tf25ZwsLKg==","signatures":[{"sig":"MEYCIQDtEFYjKbHpR5yy1RRXhgTZUJTglSS/34MvRPH5aekkOQIhAJwsgF8U3Fq+GEZ3hZRPj8xxFKDqqVcc4ubOmEAe5nZR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.34","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2089426},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.34.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/3d3719c1f652f70fb4a1f61c377a1ca2/spfn-auth-0.2.0-beta.34.tgz","_integrity":"sha512-zYlzWteWn3yBaPnQbwZcguLnYIa4t/73KTHWz/puHXzwg9kPwk+FwCLfWgopQHNy07z5oDDiVqQ+tf25ZwsLKg==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.11.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.0","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.26","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.26","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.34_1772515989938_0.5470212853276899","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.35":{"name":"@spfn/auth","version":"0.2.0-beta.35","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.35","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"bbd45cea19fe67895981107c6ae9b49916ee5803","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.35.tgz","fileCount":33,"integrity":"sha512-OuIpr/OMsRb9E0OOQ3m3JUU8P18UNdN56huOPxmSRdbJ27JMUr+BvEbVlKkh89W4mMtosBS1NiJqqjwGphga2w==","signatures":[{"sig":"MEQCICWfo3Etkz6VOhQz2mc41rSeVF0qTQY56nVcBmMsUTcYAiBARCZZlXZiV/XgYVnzhShrHuAtDM4ifMiv9kS5rUro+g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.35","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2089496},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.35.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/d6b0f1227b42e1c2b03dc21e383b71c8/spfn-auth-0.2.0-beta.35.tgz","_integrity":"sha512-OuIpr/OMsRb9E0OOQ3m3JUU8P18UNdN56huOPxmSRdbJ27JMUr+BvEbVlKkh89W4mMtosBS1NiJqqjwGphga2w==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.11.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.0","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.27","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.26","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.35_1772527464719_0.4796488743684659","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.36":{"name":"@spfn/auth","version":"0.2.0-beta.36","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.36","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"1e0a2bc188c12ae3f41c16a0a860fec160ff277c","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.36.tgz","fileCount":33,"integrity":"sha512-L4HpdLa5mfWuvhbs91tB7+linRFng6yXwawVVvrBR6HBSRhLQzzpzDZdjvZTHcQlsCn6ywhmANP2ZV2SrvOqmQ==","signatures":[{"sig":"MEUCIQDfrUIUK32DE1o+qlh8EMal8z4wIsR+DeGZU21WugG9CgIgWoeFPWnkoBt0ss/RxkXjkRsAdSpITV1rAByERQjkxR0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.36","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2089573},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.36.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/c81327c05a5fe5c24ad940668151a70c/spfn-auth-0.2.0-beta.36.tgz","_integrity":"sha512-L4HpdLa5mfWuvhbs91tB7+linRFng6yXwawVVvrBR6HBSRhLQzzpzDZdjvZTHcQlsCn6ywhmANP2ZV2SrvOqmQ==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.11.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.0","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.27","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.26","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.36_1772631538503_0.037930148994193225","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.37":{"name":"@spfn/auth","version":"0.2.0-beta.37","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.37","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"1c1b7b4104033a22ddeb7fca364fc113ba02a08c","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.37.tgz","fileCount":33,"integrity":"sha512-pa11FJ/wBq2bvbeO4iVPCivhfeA/CUxBb+Znn6chxlV/AKcvK4ol+2DPdQ4ogda5B8UG8SgMAvprRbbTK0HtUQ==","signatures":[{"sig":"MEYCIQDtRTtj4TVQ7aDQqSFINCW5c8B+oa5h7l/N/m6z9PQsugIhALz2NLD4Jf0eMzPugGVPwgjVK4HzzPSDIBALEqwP75wb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.37","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2089573},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.37.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/cc0bf3c7371959afae688fa7ece25383/spfn-auth-0.2.0-beta.37.tgz","_integrity":"sha512-pa11FJ/wBq2bvbeO4iVPCivhfeA/CUxBb+Znn6chxlV/AKcvK4ol+2DPdQ4ogda5B8UG8SgMAvprRbbTK0HtUQ==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.11.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.0","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.29","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.12"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.27","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.37_1772811537418_0.23652804302065","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.38":{"name":"@spfn/auth","version":"0.2.0-beta.38","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.38","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"90cdff282876ba0211ab21c1aacc1e16a3a5335d","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.38.tgz","fileCount":33,"integrity":"sha512-9pWpT4r1stkyZYNT95vXq7XVan0EPEwk8sXyQyPOf5StlEhEM4UaVA3e7utEmRUB99EcCPANO8y5uFNz2tfl2A==","signatures":[{"sig":"MEUCIQDkQZiu10IxV5SmGlBROnU9xCIjwg4VL/Qo3HF1F44HpgIgPjYSygympWrmEIJxe4VQRF8v1q1Vy4uyIwKU4fYw9bo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.38","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2089573},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.38.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/8d3966e76327b736ec736c71e5ee5ef0/spfn-auth-0.2.0-beta.38.tgz","_integrity":"sha512-9pWpT4r1stkyZYNT95vXq7XVan0EPEwk8sXyQyPOf5StlEhEM4UaVA3e7utEmRUB99EcCPANO8y5uFNz2tfl2A==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.11.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.0","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.30","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.13"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.28","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.38_1772812404646_0.8268225172864185","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.39":{"name":"@spfn/auth","version":"0.2.0-beta.39","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.39","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"52110d420e34fcf77660a9720cf0386d0b7b055e","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.39.tgz","fileCount":33,"integrity":"sha512-PNmn/8ZSQNPutAB4TT7TE7AcEI/IDzuxpsVPHhPA7Tqc8uNKq/AgGSdIK05zgoXCIIOnCeQ4YlfPXzl6wxG0lA==","signatures":[{"sig":"MEUCIGNdyFR+ITnILaajb7KF2V7Xg2LYCeoPLcrbwtzqdJUjAiEAz3BZbxf+xL02lz2jYZ6nDsupq/zWS93FzxEWluuIMmY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.39","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2089573},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.39.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/6b35a156cc667bb129db738abea6a02a/spfn-auth-0.2.0-beta.39.tgz","_integrity":"sha512-PNmn/8ZSQNPutAB4TT7TE7AcEI/IDzuxpsVPHhPA7Tqc8uNKq/AgGSdIK05zgoXCIIOnCeQ4YlfPXzl6wxG0lA==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.11.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.0","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.31","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.14"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.29","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.39_1772855931334_0.5335909986385128","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.40":{"name":"@spfn/auth","version":"0.2.0-beta.40","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.40","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"df19f636c69f2a2b40d833a5413b002af6c2bb7a","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.40.tgz","fileCount":33,"integrity":"sha512-tBHFffGVhpic64oiBLogGLgsq74fnbt4K8F7w/JFyBoevsPSPf5FDAbR5kuijsI9el6lVS5EGtxh+83wKofrNw==","signatures":[{"sig":"MEQCICkRvHQWE52/4SrgXs6EEgK36x1oPlqOsy8ls+bK5DHyAiAcypPQzWmzft/a+mejUb96xaapgDQpX9reqhoFcguOoQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.40","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2092882},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.40.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/639ad030383c5f3c988f33b17071bdb7/spfn-auth-0.2.0-beta.40.tgz","_integrity":"sha512-tBHFffGVhpic64oiBLogGLgsq74fnbt4K8F7w/JFyBoevsPSPf5FDAbR5kuijsI9el6lVS5EGtxh+83wKofrNw==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.11.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.0","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.31","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.14"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.29","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.40_1772896865133_0.12493731327046453","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.41":{"name":"@spfn/auth","version":"0.2.0-beta.41","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.41","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"81185ece4f8e9f73d3e9a08d8431e9fb16b5089e","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.41.tgz","fileCount":33,"integrity":"sha512-JPPRPN5VrJBhcluTSREjAiL+hbbqaXGfDZ8vfqCpVEuJj/YI4hYjz1HYq5bBKWD7dfM1vFCOrPUTmYVqo4kioQ==","signatures":[{"sig":"MEUCIQCADqFlidqDjLqpbpw8K0VyoLp477DJlDm0KJ4Qs4s+WAIgBJ15WrKVSEIgE6HedyjXwm0EVp+rGhx6XiYTl6aPwUM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.41","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2094076},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.41.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/60c28044f1fa8c8da2656024c472eaab/spfn-auth-0.2.0-beta.41.tgz","_integrity":"sha512-JPPRPN5VrJBhcluTSREjAiL+hbbqaXGfDZ8vfqCpVEuJj/YI4hYjz1HYq5bBKWD7dfM1vFCOrPUTmYVqo4kioQ==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.11.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.0","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.31","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.14"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.29","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.41_1772973145809_0.4856139661045986","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.42":{"name":"@spfn/auth","version":"0.2.0-beta.42","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.42","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"8455a21e140faa328f664b199d8bd6cef46fefdb","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.42.tgz","fileCount":33,"integrity":"sha512-rGAGszZ1hMd+Ynm1eq4Vz/VCi0XOtP9C4eGxxIyGOAV2XobzfJQTpoUeluPXsdYo01toWCwuE9MW5d8Zfmjhow==","signatures":[{"sig":"MEYCIQCpdd14NdwerT0X7nkDzs606CuM3G1G77tJGI5G/gbXWwIhAOSYFmuiu/mWUwZgm+jxSr7aRCExO8++70Qh+kXekhIu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.42","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2103764},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.42.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/9dcab5fb25e43fa0ddbc05beb982046e/spfn-auth-0.2.0-beta.42.tgz","_integrity":"sha512-rGAGszZ1hMd+Ynm1eq4Vz/VCi0XOtP9C4eGxxIyGOAV2XobzfJQTpoUeluPXsdYo01toWCwuE9MW5d8Zfmjhow==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.11.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.0","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.31","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.14"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.29","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.42_1772976636124_0.4691750812337425","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.43":{"name":"@spfn/auth","version":"0.2.0-beta.43","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.43","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"8dd6153ec76b3d5ac91895af750e4dd6823cfa3a","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.43.tgz","fileCount":35,"integrity":"sha512-5mEL7dKcFplUVAoEtJ9eryNtkIztjqm5q/jNfFMyQcTEjw/+f/dHHg0atk32Lq/HnfBNzuOlBWmyFob4Qwd4Eg==","signatures":[{"sig":"MEQCIDuIDirYKFMIGcVzJZ0U2sAKxBkJzhsYz9eamWtJbaTUAiAZWx9daX/+/euNwWQhfeVJE9yrqRuYB+Ylf32pyZO7CA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.43","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2148185},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.43.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/c868270d72421c584ca38aeb634b75ed/spfn-auth-0.2.0-beta.43.tgz","_integrity":"sha512-5mEL7dKcFplUVAoEtJ9eryNtkIztjqm5q/jNfFMyQcTEjw/+f/dHHg0atk32Lq/HnfBNzuOlBWmyFob4Qwd4Eg==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.11.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.0","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.31","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.15"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.30","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.43_1772981886358_0.6110718422235157","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.44":{"name":"@spfn/auth","version":"0.2.0-beta.44","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.44","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"1eea6f67acd5896e9acfbe2985c6bdcdc374899a","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.44.tgz","fileCount":37,"integrity":"sha512-aztgd8BS9vkK5lU9UsamlDMrhMHAs7bwCaIL68rFVY3aSEI0xprQ3s/+FIUPhl49bQElT+ipOs8D7Bg+KkFkFA==","signatures":[{"sig":"MEYCIQDqz0N76Osu6/OMLAocHp1FLQfQS2y05yx+58ai4J0LpQIhAKJGDru+Sz6+SyhLBiwiilrDsa39tAq+mZGvYR/QPP1i","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.44","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2197217},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.44.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/b341b599b3f332313ce57f15e1470ea9/spfn-auth-0.2.0-beta.44.tgz","_integrity":"sha512-aztgd8BS9vkK5lU9UsamlDMrhMHAs7bwCaIL68rFVY3aSEI0xprQ3s/+FIUPhl49bQElT+ipOs8D7Bg+KkFkFA==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.11.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.0","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.31","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.15"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.31","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.44_1772983148876_0.3763425771614879","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.45":{"name":"@spfn/auth","version":"0.2.0-beta.45","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.45","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"1eb1093021b90aa7ca247f21e05a367f0046c6fd","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.45.tgz","fileCount":39,"integrity":"sha512-6y6lEm6+qRbURe2Mcbwz0lK3uuI3/DEfXHNctmtwVO+a9QyDgkwoY3c6bssYF9BB7a1WehSNriNyykF+TSl5oA==","signatures":[{"sig":"MEYCIQClcKMYxDkgqKKYM4pvhLsIr2tpXVEAwULuNE+vyJJFowIhAPFgTz098pG0yUoQ/qumvtAlZHhevdTq7rFCEoVKPr7r","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.45","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2256677},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.45.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/8344157c21435baeae77a2c62a2b1d56/spfn-auth-0.2.0-beta.45.tgz","_integrity":"sha512-6y6lEm6+qRbURe2Mcbwz0lK3uuI3/DEfXHNctmtwVO+a9QyDgkwoY3c6bssYF9BB7a1WehSNriNyykF+TSl5oA==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.11.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.0","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.31","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.15"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.31","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.45_1773000943649_0.4469900348689646","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.46":{"name":"@spfn/auth","version":"0.2.0-beta.46","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.46","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"26039364747cb1f1405a40f765aa7c257aa4f14a","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.46.tgz","fileCount":39,"integrity":"sha512-/D4kfjaSMUtfeK5wBp0t7oWg+T8pVLb/VQaZfi5aicvguq9aQET3OT6SNFjwlmp1ekKcUwaPZwAMYVCuYSqJsw==","signatures":[{"sig":"MEUCIEw3xpcui3yyxvzvPfi7Rn3N2T+Mrv/u9hi+J3qog0KsAiEAjlGy8XSvVfl0SvnqzEnIN/HaYuLB9L5VdC6V26RHGMg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.46","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2256677},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Import auth: import { authMiddleware } from '@spfn/auth/server'\n    2. View tables: pnpm spfn db studio\n    3. API at: http://localhost:8790/_auth"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.46.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/220a1180e4a96f88bfd6450d501a9849/spfn-auth-0.2.0-beta.46.tgz","_integrity":"sha512-/D4kfjaSMUtfeK5wBp0t7oWg+T8pVLb/VQaZfi5aicvguq9aQET3OT6SNFjwlmp1ekKcUwaPZwAMYVCuYSqJsw==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.11.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.0","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.32","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.16"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.33","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.46_1773220874113_0.9699449094459824","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.47":{"name":"@spfn/auth","version":"0.2.0-beta.47","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.47","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"db95bf2897b4673593ecf9a2b9d3b20c6709d4e8","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.47.tgz","fileCount":39,"integrity":"sha512-QH0JlgP1TQld784ZggL0hSvS4TP01Z00bonycvEXMkBgIiLqG7z/rMd1p+ODKqXdb+j6cfZO39ViYLy5jf7I9A==","signatures":[{"sig":"MEYCIQDIg0wrJ98gsHfNVMUkc/ymVzSh9sOc6EQBx6wiZcZpLQIhAMX5Q+4PSZ5hSW7SObSwAFle7eXqDO4McYhCVTdBZWAH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.47","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2273478},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.47.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/95e3eea957fbb4d50b1f638849d4db99/spfn-auth-0.2.0-beta.47.tgz","_integrity":"sha512-QH0JlgP1TQld784ZggL0hSvS4TP01Z00bonycvEXMkBgIiLqG7z/rMd1p+ODKqXdb+j6cfZO39ViYLy5jf7I9A==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.11.1","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.0","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.33","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.16"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.33","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.47_1773318646262_0.672835199327779","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.48":{"name":"@spfn/auth","version":"0.2.0-beta.48","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.48","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"377918888e8cd44d6299cf271ae82ca0358f5d76","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.48.tgz","fileCount":39,"integrity":"sha512-FQDgn36MuXAtb+N2TaQHEmks8uIGVlHJHcsT8KQCIAiLtqvFCylrV9wH2gp0yqwwjet/5rNb4qppyXsPPUN+VQ==","signatures":[{"sig":"MEQCIAG8J8RuhmaXVB+Jl1XMbbEYZZxAXHdizTsurgSMLHCvAiB/XiNGmMbMMJ/EruRQ9+hFUif2SHN/DB8LO+o+XbNyKA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.48","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2275727},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.48.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/905c6e6c96e4c653be775bc87371ca85/spfn-auth-0.2.0-beta.48.tgz","_integrity":"sha512-FQDgn36MuXAtb+N2TaQHEmks8uIGVlHJHcsT8KQCIAiLtqvFCylrV9wH2gp0yqwwjet/5rNb4qppyXsPPUN+VQ==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.11.1","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.1","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.34","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.16"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.33","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.48_1773323770285_0.3347708960214879","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.49":{"name":"@spfn/auth","version":"0.2.0-beta.49","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.49","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"d41127626e8544bdb7a0107d6248305b69979ac2","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.49.tgz","fileCount":39,"integrity":"sha512-q3hJBNl3i/LA4VvwSc8VJgasdCjYrOpA0dBgWJkHbwPTUbCsbEy7jd2UMXKrt3uYTOCzpuOrpUbEkqo1bHcoWw==","signatures":[{"sig":"MEQCIEvIL5Y1Sy/3LYPsJ+L3KMxy4xvT+KcIO+c738BC2j3XAiBFNaTRDzYFLPt2GfMm9kVu2+eG844XwVVi7BObdC+Gpg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.49","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2278222},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.49.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/48311c8176f437a56860ec74efaaed8f/spfn-auth-0.2.0-beta.49.tgz","_integrity":"sha512-q3hJBNl3i/LA4VvwSc8VJgasdCjYrOpA0dBgWJkHbwPTUbCsbEy7jd2UMXKrt3uYTOCzpuOrpUbEkqo1bHcoWw==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.11.1","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.1","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.35","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.16"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.33","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.49_1773393441594_0.8376748480466865","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@spfn/auth","version":"0.2.1","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.1","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"376cea850bfbbec604de8704c57ed4e5391c7f82","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.1.tgz","fileCount":39,"integrity":"sha512-NXdTPgwZSd3kvX05K4rwySytaPQt2pjQbtT6WKJRFIrnx3AN+KvlFSdftZKyy7iW0V3RtpcLbDhe16ohwwFQ7w==","signatures":[{"sig":"MEUCIQDewHSlUIKdgyrSovQkqpZyloZyEIwlb3Rn4up8I+q41wIgIYg+8Twt3XrqJcn0XyFzwQuLnHHsyM9bwzqAKm/2cXc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2280039},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","_from":"file:spfn-auth-0.2.1.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/b8b2f415c5ae3090d4614296e0a9481b/spfn-auth-0.2.1.tgz","_integrity":"sha512-NXdTPgwZSd3kvX05K4rwySytaPQt2pjQbtT6WKJRFIrnx3AN+KvlFSdftZKyy7iW0V3RtpcLbDhe16ohwwFQ7w==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.11.1","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.1","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.35","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.16"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.33","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.1_1773396592377_0.16328928162865242","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.50":{"name":"@spfn/auth","version":"0.2.0-beta.50","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.50","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"d859db53534b9b99d0627090913483cf38cbdbf7","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.50.tgz","fileCount":39,"integrity":"sha512-HkeR3LIq/QiF3MaPlSs6xbdCoQL8FWGOdEdnFNO01HNNKHqLEyAOsWrxqCrJgYwhbYuTfjpIKi+o4gOEayKAnA==","signatures":[{"sig":"MEUCIQDoKjRbCEJ5GUurbS6NVS80wb0dkogGdQlFCs9enkxP+wIgEt0+KkJCQMp783MvcZU5Dinj3lyBHPMXAdhgkwh5LD0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.50","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2280047},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.50.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/3c10c2e9bf4b2a9bf7e51f34187f450b/spfn-auth-0.2.0-beta.50.tgz","_integrity":"sha512-HkeR3LIq/QiF3MaPlSs6xbdCoQL8FWGOdEdnFNO01HNNKHqLEyAOsWrxqCrJgYwhbYuTfjpIKi+o4gOEayKAnA==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.11.1","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.0","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.35","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.16"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.33","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.50_1773396675748_0.38702655310879","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.51":{"name":"@spfn/auth","version":"0.2.0-beta.51","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.51","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"0ffb8131ed31e0c50733dc1d524485738e9914fc","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.51.tgz","fileCount":39,"integrity":"sha512-tX0/d2c6q9vqFa4eGQc18UhQdSmkuE/OJ1hJkck+oKmlCLFg+VC1/uQdnIGKNFjDkJ07OJsGTS+vx51j9vAfXQ==","signatures":[{"sig":"MEUCIDdQ0/clsryjsaXnv8C3ixC00SMTvTUePt0AOHx7MmtoAiEA8BBgghs+PD8gSnACIb1n6p9fjO09KelUWgv6fcxw4b0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.51","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2281082},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.51.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/1560d9b9f2bdeec63b928bfdd2fa28c8/spfn-auth-0.2.0-beta.51.tgz","_integrity":"sha512-tX0/d2c6q9vqFa4eGQc18UhQdSmkuE/OJ1hJkck+oKmlCLFg+VC1/uQdnIGKNFjDkJ07OJsGTS+vx51j9vAfXQ==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.11.1","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.0","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.35","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.16"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.33","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.51_1773399825945_0.6870775052717459","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.52":{"name":"@spfn/auth","version":"0.2.0-beta.52","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.52","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"b1a77efc1e344393a68e623032096ff99b98ca0b","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.52.tgz","fileCount":39,"integrity":"sha512-IHCS2IFLmDDCONw5Okg9xmYACHqZ1slUVlrhlZ+t+PqLld0StrdGD57L8LXzFyB7CFIeHzSe2fZkG2jVZhwLpg==","signatures":[{"sig":"MEUCIBy0l/cZ9U1YsbGEIoHQU0AXKZdr+08/Vj1b7mMYAZWSAiEAqn5VUHrfPZl8l4GfwdQtCdF3BY3P3bz/Wy2Fv6HlN7Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.52","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2281422},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.52.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/1e1908cc770e1c323b69d230ee45a6cd/spfn-auth-0.2.0-beta.52.tgz","_integrity":"sha512-IHCS2IFLmDDCONw5Okg9xmYACHqZ1slUVlrhlZ+t+PqLld0StrdGD57L8LXzFyB7CFIeHzSe2fZkG2jVZhwLpg==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.11.1","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.1","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.36","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.16"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.34","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.52_1773748720332_0.05607985051546849","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.53":{"name":"@spfn/auth","version":"0.2.0-beta.53","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.53","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"f6d0b081b8edf5c6ba1ff6b95f4b1bfd815fff37","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.53.tgz","fileCount":39,"integrity":"sha512-JB6cZuPvH/7UmWWZjLxa6y8OMK6o7Q/Hpr83iqtr9HVwpiKgVnGKPdeZuDpjASvAM3E/Ep9Yr/xSa+YSAj42Tg==","signatures":[{"sig":"MEYCIQDGqpIoSj/aARWqOmpM0zRF14RZ8InsW02DuooM2VrW5gIhALzzJocJjaoVcUG3OOgtQwozOm0KHSEBUKbCspr31tgU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.53","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2281812},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.53.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/d3394987b4be0108c9caa3d174ef6c57/spfn-auth-0.2.0-beta.53.tgz","_integrity":"sha512-JB6cZuPvH/7UmWWZjLxa6y8OMK6o7Q/Hpr83iqtr9HVwpiKgVnGKPdeZuDpjASvAM3E/Ep9Yr/xSa+YSAj42Tg==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.11.1","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.1","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.36","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.16"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.34","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.53_1773759628102_0.8452774821735634","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.54":{"name":"@spfn/auth","version":"0.2.0-beta.54","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.54","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"d9cd71a4b42a8bcc0f60370c03404d6836207ee6","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.54.tgz","fileCount":39,"integrity":"sha512-APUvDyQsgzHYJfdX8wPEGlfZ3LXgjDeLVcXbbzdB/PuS3S9hFc2mFpsKFZZddnZpjkknR8OKfjkkK+gHfQ1qUw==","signatures":[{"sig":"MEQCIDaCIJMNUKj219FBpTRv+1c3RGGlDBM+Lp3dHPXzwaiUAiAzgMoF+CulbauFio23epkvD8rpZ18W7OIBlD2MWASLqg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.54","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2282314},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.54.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/c710093687f02f99783292eaddc43f1a/spfn-auth-0.2.0-beta.54.tgz","_integrity":"sha512-APUvDyQsgzHYJfdX8wPEGlfZ3LXgjDeLVcXbbzdB/PuS3S9hFc2mFpsKFZZddnZpjkknR8OKfjkkK+gHfQ1qUw==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.11.1","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.1","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.36","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.16"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.34","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.54_1773760505041_0.9653991085115343","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.55":{"name":"@spfn/auth","version":"0.2.0-beta.55","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.55","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"6898bc8d807ce5862469d27bf830ec3cb9d6123c","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.55.tgz","fileCount":39,"integrity":"sha512-57slIO0AdTI3eCYGrd3LlFm/c05SqLl3Ar5t8pSiPw1vzBlCoBWlGrNrekdek8i0tQ96UjrzDWZRz7U2XyW7GA==","signatures":[{"sig":"MEQCIFqBB0wl5su6hTpDaCpm54jCs+SLFV9lnkfqmUkz8u7FAiA1F2lPkZXL1RPcemJtyT4pRi34BnJhYbm688W6IgTALQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.55","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2284217},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.55.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/b4f29edc3e4f3fd6850505f40a4f7e25/spfn-auth-0.2.0-beta.55.tgz","_integrity":"sha512-57slIO0AdTI3eCYGrd3LlFm/c05SqLl3Ar5t8pSiPw1vzBlCoBWlGrNrekdek8i0tQ96UjrzDWZRz7U2XyW7GA==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.12.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.1","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.36","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.16"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.34","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.55_1773987444267_0.10906124797264183","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.56":{"name":"@spfn/auth","version":"0.2.0-beta.56","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.56","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"28409160f3d6638db7ced04a356418a380962a4b","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.56.tgz","fileCount":39,"integrity":"sha512-7FwhIarhzYufIBbpM+zTOKpWMz/Xwwd08qdAYbp4CN5KemiNLYt8VVnuGm2wb9Xm0DBTwCl8TzDFSg5tbV1Syg==","signatures":[{"sig":"MEYCIQDLINVJPR6sTjcKq2zVXkqSD9dDnbiQdYpws/35gg0vqgIhAJqp/ZW+6YeRdYJ+KQ2YBY9fnM/DXozCdsp9UbXtHPUo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.56","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2286241},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.56.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/1c1984431b96a0f1c8dfcf7e64611fe6/spfn-auth-0.2.0-beta.56.tgz","_integrity":"sha512-7FwhIarhzYufIBbpM+zTOKpWMz/Xwwd08qdAYbp4CN5KemiNLYt8VVnuGm2wb9Xm0DBTwCl8TzDFSg5tbV1Syg==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.12.1","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.1","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.37","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.17"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.34","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.56_1774592458325_0.012005612294374135","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.57":{"name":"@spfn/auth","version":"0.2.0-beta.57","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.57","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"a726be49f46161871361d8bc62fbf8da2215855c","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.57.tgz","fileCount":39,"integrity":"sha512-B5elROUkmHQVcozFYh0oUzHaPFMjXeOC/CD5pTPwDJhT9jRb9CDleP0tmuH5Mk5NTns62njTyxseFdD0TiOLRA==","signatures":[{"sig":"MEQCIDx9IQDybC+neekwnWlbZQIWDQ5i71Fw6TeKHqKg+QNEAiAjXC4cOlDmspk7UbnuW4DlXm1edst+e5XYYCmxwsCr2g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.57","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2288086},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.57.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/75563c8e02f70672f2eae9cc54be52c4/spfn-auth-0.2.0-beta.57.tgz","_integrity":"sha512-B5elROUkmHQVcozFYh0oUzHaPFMjXeOC/CD5pTPwDJhT9jRb9CDleP0tmuH5Mk5NTns62njTyxseFdD0TiOLRA==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.12.1","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.1","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.39","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.17"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.10.6","next":"^16.0.0","spfn":"0.2.0-beta.40","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.57_1774875439688_0.1932783508245517","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.59":{"name":"@spfn/auth","version":"0.2.0-beta.59","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.59","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"32f0aa007c2e61aa936c55914b63cb81d90f8247","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.59.tgz","fileCount":39,"integrity":"sha512-SYEDqlpBwvb4q2pB77Yow9GH7KwsGwGMxylQmaVDPyQ8tVwd2E04dtfXnlgtcLIqfPztWI7ojpOoErqMJgthSQ==","signatures":[{"sig":"MEUCIQDOov75CiKvNDlFJl5qFkZtgCxhAqO5oA8N9oWdfuttGgIgSsejmn6DXBOeK7T4+5MbqfJS47bvl15ubEuNrA5X4go=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.59","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2288086},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.59.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/0f12f1142b8207f583a5d30e75c6db0d/spfn-auth-0.2.0-beta.59.tgz","_integrity":"sha512-SYEDqlpBwvb4q2pB77Yow9GH7KwsGwGMxylQmaVDPyQ8tVwd2E04dtfXnlgtcLIqfPztWI7ojpOoErqMJgthSQ==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.12.1","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.2","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.42","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.17"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.4","next":"^16.2.2","spfn":"0.2.0-beta.45","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.59_1775103570010_0.36882787453915733","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.60":{"name":"@spfn/auth","version":"0.2.0-beta.60","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.60","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"d2e6c733cdc6a9b833d2f9d952628500c0c96b78","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.60.tgz","fileCount":41,"integrity":"sha512-Ky51Sv84S0PCHAk4csm62HcrMztn2GFrtW4/hJe+IY97D8dZnkUoCCuALBCKOLGwmBCHcOvxVaX5/cV/E0pjXQ==","signatures":[{"sig":"MEQCIAHyBEEO00T0S6FQD1j/iSlAye1hhq1d+IJ/GrVFvVWxAiB4O1Aonyb2VOOaxanpmYrCIyZDP0GZHO+fs7YMudZWFg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.60","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2339692},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.60.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/19936293bb2f50d8b51a7953e7e4b5ba/spfn-auth-0.2.0-beta.60.tgz","_integrity":"sha512-Ky51Sv84S0PCHAk4csm62HcrMztn2GFrtW4/hJe+IY97D8dZnkUoCCuALBCKOLGwmBCHcOvxVaX5/cV/E0pjXQ==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.12.1","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.2","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.45","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.18"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.4","next":"^16.2.2","spfn":"0.2.0-beta.46","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.60_1776735434969_0.7105740667986846","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.61":{"name":"@spfn/auth","version":"0.2.0-beta.61","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.61","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"2ea55ac79f369b9153eae2624b3936175acb0e2d","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.61.tgz","fileCount":41,"integrity":"sha512-9oCNyJmD2J6XAwdMs+7+9rVEDCRuICqP0MNezTig/IKRDOJgp5ecF3h1R0Ht2s7GfoSDwWn9bXJWLyU3ikbV3Q==","signatures":[{"sig":"MEYCIQD5cqqy0TaHN8zm00JkKIJYD3ose5xCeLbrbGrBbE18kAIhAK4h/hTg3Vw+t9XZoFXTFnI0OLOVWEqZCiHeoUJP39pn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.61","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2340343},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.61.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/b8b2746b5e5b1efb3613fc841fdc62a6/spfn-auth-0.2.0-beta.61.tgz","_integrity":"sha512-9oCNyJmD2J6XAwdMs+7+9rVEDCRuICqP0MNezTig/IKRDOJgp5ecF3h1R0Ht2s7GfoSDwWn9bXJWLyU3ikbV3Q==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.13.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.2","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.47","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.18"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.4","next":"^16.2.2","spfn":"0.2.0-beta.46","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.61_1777354505866_0.329687434138092","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.62":{"name":"@spfn/auth","version":"0.2.0-beta.62","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.62","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"1afdff8880612d84434654e8b46a458e3846806a","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.62.tgz","fileCount":41,"integrity":"sha512-Arsf7WTwuOLWf38nCw9rIy8jmeZAoa3UqWTwCAUSkrxPs3kyaocq3lt5P72ceVpUv/SIjqpFdycsAnUq9V5xFA==","signatures":[{"sig":"MEYCIQC4KHKxvPaQVDJeXbbUUPRchv08CwZB5kwsee/hne0YDwIhAJuxybT5QmzN5Iq7+T4I0XfmNF85t61lbA0YWWNINXMO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.62","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2355311},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.62.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/c5ebdc06306c2a96726f300c7f39033d/spfn-auth-0.2.0-beta.62.tgz","_integrity":"sha512-Arsf7WTwuOLWf38nCw9rIy8jmeZAoa3UqWTwCAUSkrxPs3kyaocq3lt5P72ceVpUv/SIjqpFdycsAnUq9V5xFA==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.15.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.2","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.48","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.18"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.4","next":"^16.2.2","spfn":"0.2.0-beta.47","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.62_1779438856603_0.17170253720560402","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.64":{"name":"@spfn/auth","version":"0.2.0-beta.64","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.64","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"862b81e0ae865c7c32fd970a04a1b9b363c80fae","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.64.tgz","fileCount":41,"integrity":"sha512-QeTVcKQ/YINiE7TlaSMI+6YmAQACnsu7HIWewwnXPy2n4MU77COuJtMBQgHeWo9n89iDFkq8rNwqPSSW4N8KOw==","signatures":[{"sig":"MEYCIQCqVkO5Ul3cFWiM6TwZF9JzOnFNuF44AOt/ddsMPg4kowIhAMVIHbzsNPhVadpLGy2CDeVYU/yWNMMSmQt2l6CXcSpE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.64","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2370408},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.64.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/229754e4b7163d85cf3c6852e26893b6/spfn-auth-0.2.0-beta.64.tgz","_integrity":"sha512-QeTVcKQ/YINiE7TlaSMI+6YmAQACnsu7HIWewwnXPy2n4MU77COuJtMBQgHeWo9n89iDFkq8rNwqPSSW4N8KOw==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.15.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.2","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.48","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.18"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.4","next":"^16.2.2","spfn":"0.2.0-beta.47","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.64_1779628033256_0.07355480933441072","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.65":{"name":"@spfn/auth","version":"0.2.0-beta.65","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.65","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"c149a5d0061daaffa84875b7e3869e8ac5249c2c","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.65.tgz","fileCount":41,"integrity":"sha512-KdqE96DsAqD4e9adBSntZNtb0Z4HM2hv2L2hxABhlhHHqiyRRXyeC1LzxEeOJJ/oodJtL/PQLuFBD3enQ7iibg==","signatures":[{"sig":"MEQCIAnaILNYR5TjUhC7VrQQlkI91fwr+WPeHFIvWNWpYDOFAiAgaTgp2LIWwNSy0/iTed0fRowg+6fCtMTDpupnZ2A/7w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.65","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2382071},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.65.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/2d3029757a01e4db9bc81fc3c185a7a6/spfn-auth-0.2.0-beta.65.tgz","_integrity":"sha512-KdqE96DsAqD4e9adBSntZNtb0Z4HM2hv2L2hxABhlhHHqiyRRXyeC1LzxEeOJJ/oodJtL/PQLuFBD3enQ7iibg==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.15.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"20.20.2","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","@spfn/core":"0.2.0-beta.48","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2","@spfn/notification":"0.1.0-beta.18"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.4","next":"^16.2.2","spfn":"0.2.0-beta.47","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.65_1779725152433_0.06726318032766887","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.66":{"name":"@spfn/auth","version":"0.2.0-beta.66","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"license":"MIT","_id":"@spfn/auth@0.2.0-beta.66","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"8b33e5d12da46a85ddeef6e3f87819a101933b9b","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.66.tgz","fileCount":41,"integrity":"sha512-PNvFQniWRO+aDv74g8q4LJT+5WXdB1BtH9/C8iX3Boo639B9/TIBz2whHkFcqwhfn/omWFBl9wFEqmHHdsDoBQ==","signatures":[{"sig":"MEYCIQCiPPmAuSr6ZYUlSu9Yv9hxRWq6oYFYcDLR6qE57kn4vwIhALYDv0DV5qJUUHWHSGn+nshYmgopiyvxdWROOdFYRkxc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.66","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2334036},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.66.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/57936a6951b2665c8600f3bd56bede15/spfn-auth-0.2.0-beta.66.tgz","_integrity":"sha512-PNvFQniWRO+aDv74g8q4LJT+5WXdB1BtH9/C8iX3Boo639B9/TIBz2whHkFcqwhfn/omWFBl9wFEqmHHdsDoBQ==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.16.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"22.22.3","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.4","next":"^16.2.2","spfn":"0.2.0-beta.48","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"0.2.0-beta.49","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@spfn/notification":"0.1.0-beta.19","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0","@spfn/core":">=0.2.0-beta.49","@spfn/notification":">=0.1.0-beta.18"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.66_1781107630742_0.8279783874475839","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.67":{"name":"@spfn/auth","version":"0.2.0-beta.67","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.2.0-beta.67","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"e3ccaf2db62c09b0335662fee622a548361d81db","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.67.tgz","fileCount":41,"integrity":"sha512-IzPipnJCveR+n0bgGLoENYkkdGRQRy3eFea80JUt0uy81j8gYUCuTvNAkd0Trjf3mH9K/BV3hVUS4J+leUKBQw==","signatures":[{"sig":"MEUCIQDF40LscKwTq/RhoSEgO4ERv0lUS7p5vN4CpvYL9loOiQIgXIALrOmsAZ6AHlTyZ9WSgKjGUGjPzEVtxU6JGV3Qh7s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.67","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2381162},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.67.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/ac185659803ef34c944322fc4032c2ef/spfn-auth-0.2.0-beta.67.tgz","_integrity":"sha512-IzPipnJCveR+n0bgGLoENYkkdGRQRy3eFea80JUt0uy81j8gYUCuTvNAkd0Trjf3mH9K/BV3hVUS4J+leUKBQw==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.17.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"22.22.3","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.4","next":"^16.2.2","spfn":"0.2.0-beta.49","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"0.2.0-beta.50","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@spfn/notification":"0.1.0-beta.20","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0","@spfn/core":">=0.2.0-beta.49","@spfn/notification":">=0.1.0-beta.18"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.67_1781600598459_0.025655492489768728","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.68":{"name":"@spfn/auth","version":"0.2.0-beta.68","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.2.0-beta.68","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"092086e52e4f0030d7d0e3cd1d910eda1bdaf1d2","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.68.tgz","fileCount":41,"integrity":"sha512-Sb4lI7ZFZT1Rint3D6POZCWzhlal/4Sr41YXYEI9kI6doigpKPJkNu0rDNSuU99Pv3YmNykf21IndXqgy0Wv6A==","signatures":[{"sig":"MEYCIQC6cGrGiEKlxsfGHhZQ7cb6ZHr4dyxh8L7jieq3t3YWmQIhALjnP2w6+FltCiGk3hbS8jwN7zp7rf5pwb+Qu7xdGMcx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.68","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2381618},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.68.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/1ca3fedf0ee436d7273dee129db02412/spfn-auth-0.2.0-beta.68.tgz","_integrity":"sha512-Sb4lI7ZFZT1Rint3D6POZCWzhlal/4Sr41YXYEI9kI6doigpKPJkNu0rDNSuU99Pv3YmNykf21IndXqgy0Wv6A==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.17.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"22.22.3","dependencies":{"jose":"^6.1.0","bcryptjs":"^2.4.3","postgres":"^3.4.0","drizzle-orm":"^0.45.0","jsonwebtoken":"^9.0.2"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.4","next":"^16.2.2","spfn":"0.2.0-beta.49","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"0.2.0-beta.50","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/bcryptjs":"^2.4.6","@types/react-dom":"^19.2.2","@spfn/notification":"0.1.0-beta.20","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0","@spfn/core":">=0.2.0-beta.49","@spfn/notification":">=0.1.0-beta.18"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.68_1781603918814_0.38193679264455205","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.69":{"name":"@spfn/auth","version":"0.2.0-beta.69","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.2.0-beta.69","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"588ff1fc2c7b6a62d40979d7f03b20c1dd351efa","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.69.tgz","fileCount":41,"integrity":"sha512-7WIDvLzwDwuN9loEivuRbjvWPZZz5vLhZPCe23VdEwwpgfDmTn80Bi03dAV7RKlSfp5vx4E66KEiW4VXJNaxJA==","signatures":[{"sig":"MEUCIQCPTb8Fh9k5jg0kLwoIXHa31RZAl6gVVhBsSS81b2a5oQIgXCUUj0b4xi0EG/HewSQ4BJjKMttXtYzgLb5KcBf/t1s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.69","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2395110},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.69.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/17061eb1974b9a670a51e3a7ed7e758a/spfn-auth-0.2.0-beta.69.tgz","_integrity":"sha512-7WIDvLzwDwuN9loEivuRbjvWPZZz5vLhZPCe23VdEwwpgfDmTn80Bi03dAV7RKlSfp5vx4E66KEiW4VXJNaxJA==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.17.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"22.23.0","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","drizzle-orm":"^0.45.2","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.25","next":"^16.2.2","spfn":"0.2.0-beta.50","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"0.2.0-beta.54","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"0.1.0-beta.21","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0","@spfn/core":">=0.2.0-beta.54","@spfn/notification":">=0.1.0-beta.21"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.69_1782548697759_0.4490733314436346","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.70":{"name":"@spfn/auth","version":"0.2.0-beta.70","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.2.0-beta.70","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"211797b25745cc039b3f0d2bdab78d272129f7b3","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.70.tgz","fileCount":41,"integrity":"sha512-gNF4w+G9OyoA97GuGlj/RLmML7W/FcMn6795HfdzRHOgRZpSsMsAg1geduAlNk7L5JvouL5YhK9BtCrgkqVznA==","signatures":[{"sig":"MEUCIQC5MuyS1Umhod1q8xcHxfHhh1FoutM3vmCk756UhcHExwIgAu/SH282vRCbopAb0MaP+PlyIer/FBrrat6aa8X9888=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.70","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2395110},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.70.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/feb2b6a259a1ae3bf5f2bdefdae66d9b/spfn-auth-0.2.0-beta.70.tgz","_integrity":"sha512-gNF4w+G9OyoA97GuGlj/RLmML7W/FcMn6795HfdzRHOgRZpSsMsAg1geduAlNk7L5JvouL5YhK9BtCrgkqVznA==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.17.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"22.23.0","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","drizzle-orm":"^0.45.2","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.25","next":"^16.2.2","spfn":"0.2.0-beta.51","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"0.2.0-beta.55","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"0.1.0-beta.22","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0","@spfn/core":">=0.2.0-beta.54","@spfn/notification":">=0.1.0-beta.21"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.70_1782549746740_0.7002229575901104","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.71":{"name":"@spfn/auth","version":"0.2.0-beta.71","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.2.0-beta.71","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"c9f43c194347a10488d3b7bd5579222fc2bf5b07","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.71.tgz","fileCount":41,"integrity":"sha512-Gdpb2bU4eOU4lxvbA9pnCie+KRAB5QLhDCGJGyXJsZcr5opm27e2VU6JiKELR+v5HiffctvimZxok1EjoF6H6g==","signatures":[{"sig":"MEUCIQCauDpen4UFLlamF6b7lrz3m2G+Y1cKFv0ES2J23x9osQIgX0YBqqlbyqSJcJgRw4Fs6piFqJqXS9SnNLn8xqFyHWc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.71","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2400329},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.71.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/ee66c22a6590a5a92f6ea58ee5aa630f/spfn-auth-0.2.0-beta.71.tgz","_integrity":"sha512-Gdpb2bU4eOU4lxvbA9pnCie+KRAB5QLhDCGJGyXJsZcr5opm27e2VU6JiKELR+v5HiffctvimZxok1EjoF6H6g==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.17.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"22.23.0","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","drizzle-orm":"^0.45.2","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.25","next":"^16.2.2","spfn":"0.2.0-beta.52","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"0.2.0-beta.56","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"0.1.0-beta.23","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0","@spfn/core":">=0.2.0-beta.54","@spfn/notification":">=0.1.0-beta.21"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.71_1782567705085_0.5341467856628754","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.72":{"name":"@spfn/auth","version":"0.2.0-beta.72","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.2.0-beta.72","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"b9f13a83e7aa078e54ff4b49767f4fb1567feed0","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.72.tgz","fileCount":41,"integrity":"sha512-ues5EQwaQCqHkg/L7/a/pw2FUsON0nDH/ad12P4ROO/Z3Zz7dt5VdvoK82X49oyIWAqxExB/bGDePt0WzTFJ2Q==","signatures":[{"sig":"MEQCH2UX/HY3oD+n9NBe1KbCF6MhTk8YGFk0tcj1bmu/TVMCIQDu6PpFDo9Vb0U9UW5mr/Y7zsp6DMbdJZdUpvHXaU3DTg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.72","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2434445},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.72.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/92cd546c102a4e8067a6eeb6d3da60e7/spfn-auth-0.2.0-beta.72.tgz","_integrity":"sha512-ues5EQwaQCqHkg/L7/a/pw2FUsON0nDH/ad12P4ROO/Z3Zz7dt5VdvoK82X49oyIWAqxExB/bGDePt0WzTFJ2Q==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.17.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"22.23.0","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","drizzle-orm":"^0.45.2","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.25","next":"^16.2.2","spfn":"0.2.0-beta.52","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"0.2.0-beta.56","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"0.1.0-beta.23","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0","@spfn/core":">=0.2.0-beta.54","@spfn/notification":">=0.1.0-beta.21"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.72_1782569069944_0.1899488508233229","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.74":{"name":"@spfn/auth","version":"0.2.0-beta.74","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.2.0-beta.74","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"3bd188009c315184a40c77114b5b2cd93cc30326","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.74.tgz","fileCount":43,"integrity":"sha512-W3NGr6D8E840FCcQ4HjDvuS1LRHJm+bVhz2jLH0vOj2piqt0kEWumT6BOCfcY2OVa9z5kHTr3+i8RsvDmdRC7A==","signatures":[{"sig":"MEYCIQC2vfwUBdxBxiZREtB25KLzu0TFgwZUWZGeNgEylgDQLAIhAIn8ITG9mhQ45Ccz8LAM2E9X6xOogWv3Vdy2pDaX/mod","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.74","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2491737},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","_from":"file:spfn-auth-0.2.0-beta.74.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/f734312f18deec0de0fca277305b4b42/spfn-auth-0.2.0-beta.74.tgz","_integrity":"sha512-W3NGr6D8E840FCcQ4HjDvuS1LRHJm+bVhz2jLH0vOj2piqt0kEWumT6BOCfcY2OVa9z5kHTr3+i8RsvDmdRC7A==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"11.18.0","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"22.23.0","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","drizzle-orm":"^0.45.2","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.25","next":"^16.2.2","spfn":"0.2.0-beta.54","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"0.2.0-beta.59","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"0.1.0-beta.26","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0","@spfn/core":">=0.2.0-beta.54","@spfn/notification":">=0.1.0-beta.21"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.74_1782991376820_0.48553701867639654","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.80":{"name":"@spfn/auth","version":"0.2.0-beta.80","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.2.0-beta.80","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"bdadf9a223aae880d1f53aaed1739377ebc22bb7","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.80.tgz","fileCount":47,"integrity":"sha512-6YqhEfEpmVrgMTlZE0q+w0aeoIw1t3tDgHk22IBs9UcBGIk+/u/m1wiEFgteI2ESQml4mMaED0TGw2/rwQoMsQ==","signatures":[{"sig":"MEYCIQDpvp4fOjUIBPnmiKtPyuKBmXD8vLeMzoL8wrP0ZsltaQIhAOvueEMBwhbsikPRtKh6Q0fBkqmprzuQE2XpAdFNAbDz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.80","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2885499},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"gitHead":"185f265bbc1a04dcdaded39e18c2dc13b76e9292","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","prepublishOnly":"pnpm run clean && pnpm run build","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"12.0.1","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"22.23.1","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","drizzle-orm":"^0.45.2","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.25","next":"^16.2.2","spfn":"workspace:*","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"workspace:*","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0","@spfn/core":">=0.2.0-beta.54","@spfn/notification":">=0.1.0-beta.21"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.80_1784703058326_0.007219560580067119","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.81":{"name":"@spfn/auth","version":"0.2.0-beta.81","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.2.0-beta.81","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"8fc0b3e1f54f8899a440f6c056c85d2d1995c939","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.81.tgz","fileCount":47,"integrity":"sha512-2nFu+3MBCvkxQmbR2YijuzZj9WF9g3J7FEa19SkuY+tZQoIC1KzPsuVu7JjanqmObJi1jVfzCO8jvlEUWjOIqA==","signatures":[{"sig":"MEUCICfvHBq45KQF9J3edVQuFoJqNFYU/d8zZUA99K/eLsdpAiEAhFNb4FzIDAOwbnpzJ+/p6GZJFhk3CaRAZoP9ltsNt9c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.81","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2909663},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"gitHead":"2852e5bcc23455fdaa3018d2760d4e50443107ba","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","prepublishOnly":"pnpm run clean && pnpm run build","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"12.0.1","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"22.23.1","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","drizzle-orm":"^0.45.2","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.25","next":"^16.2.2","spfn":"workspace:*","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.6","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"workspace:*","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0","@spfn/core":">=0.2.0-beta.54","@spfn/notification":">=0.1.0-beta.21"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.81_1784731204511_0.531422940472037","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.82":{"name":"@spfn/auth","version":"0.2.0-beta.82","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.2.0-beta.82","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"3c55fd60894d8b282cf36911cbd85362907c3595","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.82.tgz","fileCount":47,"integrity":"sha512-94+NVoaUAXVLO45zuU1wEc11dzFPhMsxyxy0xA2UujhCpRHd+QzqI11gWxW/sJR3u6hpYF1Xv6d0zJ3hgOS65g==","signatures":[{"sig":"MEUCIAKvL+9FRjdzJyLCrzFuUGjsKen0WyjD78lsJJgUMZ7sAiEAnPFWrWF8/XF+J+hoxDH15CUSlvQ0bfPtbAZIMOxjUnA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.82","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2913207},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"gitHead":"4a09250c7a88158aacb0bd5559cf36347a06e2a9","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","prepublishOnly":"pnpm run clean && pnpm run build","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"12.0.1","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"22.23.1","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.25","next":"^16.2.2","spfn":"workspace:*","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"workspace:*","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0","@spfn/core":">=0.2.0-beta.54","drizzle-orm":">=1.0.0-rc.4 <2","@spfn/notification":">=0.1.0-beta.21"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.82_1784827619040_0.18703571306843791","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.83":{"name":"@spfn/auth","version":"0.2.0-beta.83","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.2.0-beta.83","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"21b03db76a73e674a5a5ba816df637c230a1aeb6","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.83.tgz","fileCount":47,"integrity":"sha512-RBcnTVMZ34JZMeHIUzn7O2Tg3XmRQNhbV45jt4hJuv2qmoIsznItWX69ZX7xtF07f18kvMLnODeJIUyWPl79KA==","signatures":[{"sig":"MEQCIDZTFpo/LWN0I0rYCx3mv16zS5+GnlZ+dnPMw0BX6QOIAiBylupCdSYBhMsjEgLhV+Lv8iyVKMLWo+2SjagBxLea7w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.83","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2949118},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"gitHead":"14a669528109c6970d782ae9b1ef8532db267f83","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","prepublishOnly":"pnpm run clean && pnpm run build","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"12.0.2","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"22.23.1","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.25","next":"^16.2.2","spfn":"workspace:*","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"workspace:*","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0","@spfn/core":">=0.2.0-beta.54","drizzle-orm":">=1.0.0-rc.4 <2","@spfn/notification":">=0.1.0-beta.21"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.83_1785592470837_0.49632587139872775","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.84":{"name":"@spfn/auth","version":"0.2.0-beta.84","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.2.0-beta.84","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"3ed86c904769c09f007229666b8821641ad31943","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.84.tgz","fileCount":47,"integrity":"sha512-ukE24zA7hneqePGkxNJ7+WFYutGCNuddpA/gXt1Ge3XHuMcxrceRK1HnA6AErC2yhXfzGyqtODwsAs0SgmC1Pg==","signatures":[{"sig":"MEYCIQC3jmbM9NjItfKr5JKt5k7hkbEGuO6zZjnQo7MqN3qbSwIhAL7Tbn8x4SL1GizobEfEJYHroyzpthe19wkPTjnYBxmS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.84","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2952711},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"gitHead":"b2e33cf8ab21785d8eacddb4b70dc1bea5a46a10","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","prepublishOnly":"pnpm run clean && pnpm run build","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"12.0.2","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"22.23.1","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.25","next":"^16.2.2","spfn":"workspace:*","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"workspace:*","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0","@spfn/core":">=0.2.0-beta.54","drizzle-orm":">=1.0.0-rc.4 <2","@spfn/notification":">=0.1.0-beta.21"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.84_1785602071195_0.9797979686895038","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.85":{"name":"@spfn/auth","version":"0.2.0-beta.85","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.2.0-beta.85","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"136550ab724cb09b2236d6e5b0483d7426c84a1c","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.85.tgz","fileCount":50,"integrity":"sha512-pFXBMo9ZeXfhNUrcptGevBER7UCy71PXli9EbwtxX43FQq+QJ/nx9DuZTiCrqvRBb27fVdU1JmtbgZQoOhLm/w==","signatures":[{"sig":"MEYCIQCB8uhFKUaUxhASbgkr5OIHx+5g6OcBFud9wfy6fiategIhAPXGNS55l7W3tdNPfRvmRCR0XBM+Mt9Br+v7Hs35F6JD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.85","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3101604},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./client-proof":{"types":"./dist/client-proof.d.ts","import":"./dist/client-proof.js","require":"./dist/client-proof.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"gitHead":"9be0020bd3950c2aff36276b07ff39e8c45f3329","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","prepublishOnly":"pnpm run clean && pnpm run build","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"12.0.2","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"22.23.1","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.25","next":"^16.2.2","spfn":"workspace:*","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"workspace:*","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0","@spfn/core":">=0.2.0-beta.54","drizzle-orm":">=1.0.0-rc.4 <2","@spfn/notification":">=0.1.0-beta.21"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.85_1785654462270_0.7852983887845635","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.86":{"name":"@spfn/auth","version":"0.2.0-beta.86","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.2.0-beta.86","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"2b8dd8fa1e1f00e02992a539cbfc6b5a91757484","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.86.tgz","fileCount":50,"integrity":"sha512-3f5FGYJTQU2U7m/aOQWb34GEFiuPfgMs5bsGkJpFuGrjPa60C2T6uIWi6V3BoA8kgSy0luY3FU3DYorZGPvs4g==","signatures":[{"sig":"MEUCIAWUAk/pUOlWLnWXIFTzUO0005oBxORm7eIDDOa/TBorAiEAgMjRVC3QnhSuub2/nhzroxVHTb68saCpPqGD0lyEMe4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.86","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3107828},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./client-proof":{"types":"./dist/client-proof.d.ts","import":"./dist/client-proof.js","require":"./dist/client-proof.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"gitHead":"f845d50da011f3ba137e89deb71380025f4ce301","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","prepublishOnly":"pnpm run clean && pnpm run build","publish:latest":"npm publish --access public","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/","export:mobile-contract":"tsx scripts/export-mobile-contract.ts"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"12.0.2","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"22.23.1","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.25","next":"^16.2.2","spfn":"workspace:*","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"workspace:*","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0","@spfn/core":">=0.2.0-beta.54","drizzle-orm":">=1.0.0-rc.4 <2","@spfn/notification":">=0.1.0-beta.21"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.86_1785670628415_0.039440307149670284","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.87":{"name":"@spfn/auth","version":"0.2.0-beta.87","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.2.0-beta.87","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"c70197de430110818ec28c8480ab48ccac59b862","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.87.tgz","fileCount":50,"integrity":"sha512-RfpnFEU4EZQWsNecZ6Apx92mUnNPEX1rjFQV4k1nqaCXDrm75j/bdVSwkIV3gM/GxyglDdU5X/+6s2dNdLXM5Q==","signatures":[{"sig":"MEUCIQChEuu2Jjj0uVi/22jSmNyBeIBt0kEx2M8e2z6mwDfXVQIge9M/IoH2MBwlnZFk3ofTgx1Qy/4rytFgD90CUGuI+Qg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.87","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3240066},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./client-proof":{"types":"./dist/client-proof.d.ts","import":"./dist/client-proof.js","require":"./dist/client-proof.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"gitHead":"9dc6397a2e809b6c3d28b745cb8ed3d80d923f16","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","docker:test:up":"docker compose -f docker-compose.test.yml up -d","prepublishOnly":"pnpm run clean && pnpm run build","publish:latest":"node ../../scripts/publish-package.mjs latest","docker:test:down":"docker compose -f docker-compose.test.yml down","docker:test:logs":"docker compose -f docker-compose.test.yml logs -f","test:integration":"vitest run src/__tests__/integration/","export:mobile-contract":"tsx scripts/export-mobile-contract.ts"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"12.0.2","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"22.23.1","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.25","next":"^16.2.2","spfn":"workspace:*","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"workspace:*","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^15.0.0 || ^16.0.0","@spfn/core":">=0.2.0-beta.54","drizzle-orm":">=1.0.0-rc.4 <2","@spfn/notification":">=0.1.0-beta.21"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.87_1785771751913_0.8659953700124956","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.88":{"name":"@spfn/auth","version":"0.2.0-beta.88","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.2.0-beta.88","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"37e7095185afe2ff5c1e922a193903c14a0c858d","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.88.tgz","fileCount":53,"integrity":"sha512-79TlrWpPbnuuBeOYDKyde693HrT98xLNWKkB3IynPrLAgJ5WFYWERATKrxmn7E+MbV2G2oEYMFqWLEsf9aqieA==","signatures":[{"sig":"MEYCIQCdg859I6FQPAyIsUjfVIUjpWsstqeWHgWZTXNNCKaukwIhAMQFGQgeApFsXzWjeWIlxkMVXjRXwtRVHpbYi6pEffUy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.88","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3665888},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./client-proof":{"types":"./dist/client-proof.d.ts","import":"./dist/client-proof.js","require":"./dist/client-proof.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"gitHead":"ca8000ded77e7d22536a5bbbec21fbe10e32206c","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","prepublishOnly":"pnpm run clean && pnpm run build","publish:latest":"node ../../scripts/publish-package.mjs latest","test:integration":"vitest run src/__tests__/integration/","export:mobile-contract":"tsx scripts/export-mobile-contract.ts"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"12.0.2","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"22.23.1","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.25","next":"^16.2.11","spfn":"workspace:*","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"workspace:*","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^16.2.11","@spfn/core":">=0.2.0-beta.54","drizzle-orm":">=1.0.0-rc.4 <2","@spfn/notification":">=0.1.0-beta.21"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.88_1785913618205_0.033854277804651334","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.89":{"name":"@spfn/auth","version":"0.2.0-beta.89","keywords":["spfn","auth","authentication","authorization","rbac","access-control"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.2.0-beta.89","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"b12cdf40a5e5600d795e00a7b484655abadcda30","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.89.tgz","fileCount":53,"integrity":"sha512-mveOIfAUtq4kx2Xlkvig7aRyZC/HbEPFO/+RNMdT8vZ4IoDznitVQKVotspQOqz9AuP9f4UKeKCWVaBWEDw8zA==","signatures":[{"sig":"MEYCIQDn3gg5oQcyk6e6XEA9ErflwcGYP/moQggG4/8aV9XJzgIhANddk/UJ7qB2kee0eQmh8hbLO6VUlFJOsgvTEtvPvA0B","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.89","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3748489},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./client-proof":{"types":"./dist/client-proof.d.ts","import":"./dist/client-proof.js","require":"./dist/client-proof.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"gitHead":"871c8087221ff92a15465c5ffbb0f2a54a7f3952","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","prepublishOnly":"pnpm run clean && pnpm run build","publish:latest":"node ../../scripts/publish-package.mjs latest","test:integration":"vitest run src/__tests__/integration/","export:mobile-contract":"tsx scripts/export-mobile-contract.ts"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"12.0.2","description":"Authentication, authorization, and RBAC module for SPFN","directories":{},"_nodeVersion":"22.23.1","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.25","next":"^16.2.11","spfn":"workspace:*","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"workspace:*","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^16.2.11","@spfn/core":">=0.2.0-beta.54","drizzle-orm":">=1.0.0-rc.4 <2","@spfn/notification":">=0.1.0-beta.21"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.89_1785925253290_0.1843311226897124","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.90":{"name":"@spfn/auth","version":"0.2.0-beta.90","keywords":["spfn","auth","authentication","authorization","rbac","access-control","nextjs","typescript","oauth","social-login","session","ai-coding-agent"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.2.0-beta.90","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"cae5fa6c1ed04b28317a5c433222cd4219d806dc","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.90.tgz","fileCount":53,"integrity":"sha512-C2hSN5R9vOO8DqMcZfJ4vDwpbBNRGXsk0F5GN/pE/chQ/sk1qlKErS5ISYJgdPNPhZAa78/5NgEFuQpfNt2znQ==","signatures":[{"sig":"MEUCIA0J/L3roZIrFZ6MG2CTes+jZvaLgAqXFQ8XKaSV+DJXAiEA/ttokbNDrH9wdTuYeJTIejsgkoLwQPnkMAbUU0LU9+U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.90","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3748676},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./client-proof":{"types":"./dist/client-proof.d.ts","import":"./dist/client-proof.js","require":"./dist/client-proof.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"gitHead":"526c8d70e82c62f031af6bf18d742ef1eac4abee","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","prepublishOnly":"pnpm run clean && pnpm run build","publish:latest":"node ../../scripts/publish-package.mjs latest","test:integration":"vitest run src/__tests__/integration/","export:mobile-contract":"tsx scripts/export-mobile-contract.ts"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"12.0.2","description":"Authentication for a Next.js full-stack app: sessions, social login, OAuth, RBAC and admin roles, without assembling an auth stack yourself","directories":{},"_nodeVersion":"22.23.1","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.25","next":"^16.2.11","spfn":"workspace:*","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"workspace:*","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^16.2.11","@spfn/core":">=0.2.0-beta.54","drizzle-orm":">=1.0.0-rc.4 <2","@spfn/notification":">=0.1.0-beta.21"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.90_1785926897224_0.8001421152559292","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.91":{"name":"@spfn/auth","version":"0.2.0-beta.91","keywords":["spfn","auth","authentication","authorization","rbac","access-control","nextjs","typescript","oauth","social-login","session","ai-coding-agent"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.2.0-beta.91","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"c4d5d57e10848099c03c062aa3d45a4765b53a59","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.2.0-beta.91.tgz","fileCount":56,"integrity":"sha512-MhvwqmJ+K2XdP2toXWRqIDfuTcjDfmWzD/O9AvjOmsLfPxr4RXRDa9NytnL3MqY+i4lHDQl1hiGdagFmzsbSbg==","signatures":[{"sig":"MEUCIAtOO5sBlfyQhljTLbPWWAQhjTTHxD07dd6ya5ph+ZdUAiEAieAbhJbhL0CyVDzdP/BYLJO02Wf5nwxdPa0ZaqyuuSc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.2.0-beta.91","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3934682},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./client-proof":{"types":"./dist/client-proof.d.ts","import":"./dist/client-proof.js","require":"./dist/client-proof.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"gitHead":"22a1abea780b5846b8c459d83345aa04a07e6119","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","prepublishOnly":"pnpm run clean && pnpm run build","publish:latest":"node ../../scripts/publish-package.mjs latest","test:integration":"vitest run src/__tests__/integration/","export:mobile-contract":"tsx scripts/export-mobile-contract.ts"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"12.0.2","description":"Authentication for a Next.js full-stack app: sessions, social login, OAuth, RBAC and admin roles, without assembling an auth stack yourself","directories":{},"_nodeVersion":"22.23.1","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.34","next":"^16.2.11","spfn":"workspace:*","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"workspace:*","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^16.2.11","@spfn/core":">=0.2.0-beta.54","drizzle-orm":">=1.0.0-rc.4 <2","@spfn/notification":">=0.1.0-beta.21"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.2.0-beta.91_1786000900745_0.6762609843232457","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-beta.1":{"name":"@spfn/auth","version":"0.3.0-beta.1","keywords":["spfn","auth","authentication","authorization","rbac","access-control","nextjs","typescript","oauth","social-login","session","ai-coding-agent"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.3.0-beta.1","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"39695e31ca52c3a505f4ae824e14610dda34acc9","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.3.0-beta.1.tgz","fileCount":56,"integrity":"sha512-OSE2veTILO1Y9MUYw3i14oL5f8GInHNPYzt91xj6GP34jBrrW8hOfr5MdhU7CJcBTLxTM6w0KDL93xo38vo/Kw==","signatures":[{"sig":"MEUCIQCe2Ds0rNwIQ1veqo0BSJ/0vJHzwBSEudxGFVBp7ZS4xwIgOgW4MaMDfG75Ukvqr6t+u+o3p9mYPwImRrZNRAomjto=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.3.0-beta.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3928605},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./client-proof":{"types":"./dist/client-proof.d.ts","import":"./dist/client-proof.js","require":"./dist/client-proof.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"gitHead":"88b84be28687dbbd7b2917cb76384f7f6a9e154c","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","prepublishOnly":"pnpm run clean && pnpm run build","publish:latest":"node ../../scripts/publish-package.mjs latest","test:integration":"vitest run src/__tests__/integration/","export:mobile-contract":"tsx scripts/export-mobile-contract.ts"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"12.0.2","description":"Authentication for a Next.js full-stack app: sessions, social login, OAuth, RBAC and admin roles, without assembling an auth stack yourself","directories":{},"_nodeVersion":"22.23.2","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.34","next":"^16.2.11","spfn":"workspace:*","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"workspace:*","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^16.2.11","@spfn/core":">=0.3.0-beta.1 <0.4.0","drizzle-orm":">=1.0.0-rc.4 <2","@spfn/notification":">=0.2.0-beta.1 <0.3.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.3.0-beta.1_1786013385633_0.31166013772523526","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-beta.2":{"name":"@spfn/auth","version":"0.3.0-beta.2","keywords":["spfn","auth","authentication","authorization","rbac","access-control","nextjs","typescript","oauth","social-login","session","ai-coding-agent"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.3.0-beta.2","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"e053c3ef8cd8019dbf02f9bfdce6ffde0566eaf2","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.3.0-beta.2.tgz","fileCount":61,"integrity":"sha512-HD5+1tvOFhR63OQ95MXNeekjWi5vwOJZsnkAOlFx28BpyIA3EI9MEkPTNUbo2NIjQToP4Gwnq7KBwkmHRJclbQ==","signatures":[{"sig":"MEUCIQCjPlDc/AEbZQFb1c5X7huMEAm6uVHXbG5cUsFncTHuvAIgO4+9uJdyDMITgsV3q2kfJ4hOYpfEc7n64LgCrFnArTE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.3.0-beta.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4066054},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./crypto":{"types":"./dist/crypto.d.ts","import":"./dist/crypto.js","require":"./dist/crypto.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./client-proof":{"types":"./dist/client-proof.d.ts","import":"./dist/client-proof.js","require":"./dist/client-proof.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"gitHead":"87facbc9ae4a26805f37d53d071b965e0ea9e594","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","prepublishOnly":"pnpm run clean && pnpm run build","publish:latest":"node ../../scripts/publish-package.mjs latest","test:integration":"vitest run src/__tests__/integration/","export:mobile-contract":"tsx scripts/export-mobile-contract.ts"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"12.0.2","description":"Authentication for a Next.js full-stack app: sessions, social login, OAuth, RBAC and admin roles, without assembling an auth stack yourself","directories":{},"_nodeVersion":"22.23.1","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.34","next":"^16.2.11","spfn":"workspace:*","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"workspace:*","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^16.2.11","@spfn/core":">=0.3.0-beta.1 <0.4.0","drizzle-orm":">=1.0.0-rc.4 <2","@spfn/notification":">=0.2.0-beta.1 <0.3.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.3.0-beta.2_1786198878153_0.8878493222095103","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-beta.3":{"name":"@spfn/auth","version":"0.3.0-beta.3","keywords":["spfn","auth","authentication","authorization","rbac","access-control","nextjs","typescript","oauth","social-login","session","ai-coding-agent"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.3.0-beta.3","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"4a776955d8ceb1bf88ecb1e90c4db2216aad6162","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.3.0-beta.3.tgz","fileCount":61,"integrity":"sha512-qSOnFz/LFJ9kXbF1wJY+llLcc9eswASMccz59p0pyFZ+WP0fEW8GlRpIi8ro0k43htXgnwGQkavegERK4pt5Sw==","signatures":[{"sig":"MEQCIEd5Wn+yRGwSyQnIY+VBrJTi2ZW60OpglXaw0dPBzItqAiA3pPY8TgMIcbwmhMKBuBWaCt6w4TcCjcf733Ibnc1sVQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.3.0-beta.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4067259},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./crypto":{"types":"./dist/crypto.d.ts","import":"./dist/crypto.js","require":"./dist/crypto.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./client-proof":{"types":"./dist/client-proof.d.ts","import":"./dist/client-proof.js","require":"./dist/client-proof.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"gitHead":"4cf87a5928f3627ee60a63b008a7562fe2d627f3","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","prepublishOnly":"pnpm run clean && pnpm run build","publish:latest":"node ../../scripts/publish-package.mjs latest","test:integration":"vitest run src/__tests__/integration/","export:mobile-contract":"tsx scripts/export-mobile-contract.ts"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"12.0.2","description":"Authentication for a Next.js full-stack app: sessions, social login, OAuth, RBAC and admin roles, without assembling an auth stack yourself","directories":{},"_nodeVersion":"22.23.1","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.34","next":"^16.2.11","spfn":"workspace:*","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"workspace:*","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^16.2.11","@spfn/core":">=0.3.0-beta.1 <0.4.0","drizzle-orm":">=1.0.0-rc.4 <2","@spfn/notification":">=0.2.0-beta.1 <0.3.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.3.0-beta.3_1786283794146_0.7448620314335155","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-beta.4":{"name":"@spfn/auth","version":"0.3.0-beta.4","keywords":["spfn","auth","authentication","authorization","rbac","access-control","nextjs","typescript","oauth","social-login","session","ai-coding-agent"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.3.0-beta.4","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"bfe57bb0a02cd39aedd5ec909bb3e28f6c0b09fd","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.3.0-beta.4.tgz","fileCount":61,"integrity":"sha512-gELVILMbEbJcQCrnOgMSpSNp5tAEBxJzHQ5kFPAG0FJrtnRyqB/mZ4MFqWfsjrq0G0dTHO8DiUnDfLQpUIOOFA==","signatures":[{"sig":"MEUCIQD/jdQ7nUxpQZs89VSI6MimlK6+d9Msv9SUWDpuM0nkggIgc826zG4fa+gksEsbTHhfe/1n10fvl2r2k/8POvnFoaI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.3.0-beta.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4098029},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./crypto":{"types":"./dist/crypto.d.ts","import":"./dist/crypto.js","require":"./dist/crypto.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./client-proof":{"types":"./dist/client-proof.d.ts","import":"./dist/client-proof.js","require":"./dist/client-proof.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"gitHead":"10bf529f781303ec33bcf1b52c3613ed8007ecc0","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","prepublishOnly":"pnpm run clean && pnpm run build","publish:latest":"node ../../scripts/publish-package.mjs latest","test:integration":"vitest run src/__tests__/integration/","export:mobile-contract":"tsx scripts/export-mobile-contract.ts"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"12.0.2","description":"Authentication for a Next.js full-stack app: sessions, social login, OAuth, RBAC and admin roles, without assembling an auth stack yourself","directories":{},"_nodeVersion":"22.23.1","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.34","next":"^16.2.11","spfn":"workspace:*","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"workspace:*","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^16.2.11","@spfn/core":">=0.3.0-beta.4 <0.4.0","drizzle-orm":">=1.0.0-rc.4 <2","@spfn/notification":">=0.2.0-beta.1 <0.3.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.3.0-beta.4_1786347481241_0.6475163749427266","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-beta.5":{"name":"@spfn/auth","version":"0.3.0-beta.5","keywords":["spfn","auth","authentication","authorization","rbac","access-control","nextjs","typescript","oauth","social-login","session","ai-coding-agent"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.3.0-beta.5","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"9ccdf06a13f6010e97b6432f7c586f2d5eb8ee4d","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.3.0-beta.5.tgz","fileCount":61,"integrity":"sha512-emmz0ZvFoDOvGuuUuOWhRK0NF9lyfQdAFGyEYYWeitgbMvs2Qtmk6j05KkJYyXoPA2LRXna+r7/re4y3oI9IOg==","signatures":[{"sig":"MEUCIQD1ku0zKeg8zkXKX4w3ZUgTa0RIDMAFJ3YPzYzZ0PPrrwIgGSMnfUw/uOZpS9ZrF5ZppHGL4yekvhhYXHfdsPzbeD8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.3.0-beta.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4134715},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./crypto":{"types":"./dist/crypto.d.ts","import":"./dist/crypto.js","require":"./dist/crypto.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./client-proof":{"types":"./dist/client-proof.d.ts","import":"./dist/client-proof.js","require":"./dist/client-proof.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"gitHead":"710366f1ef94e7fc3719ba67bda0770f8f0bae3d","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","prepublishOnly":"pnpm run clean && pnpm run build","publish:latest":"node ../../scripts/publish-package.mjs latest","test:integration":"vitest run src/__tests__/integration/","export:mobile-contract":"tsx scripts/export-mobile-contract.ts"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"12.0.2","description":"Authentication for a Next.js full-stack app: sessions, social login, OAuth, RBAC and admin roles, without assembling an auth stack yourself","directories":{},"_nodeVersion":"22.23.1","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.34","next":"^16.2.11","spfn":"workspace:*","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"workspace:*","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^16.2.11","@spfn/core":">=0.3.0-beta.4 <0.4.0","drizzle-orm":">=1.0.0-rc.4 <2","@spfn/notification":">=0.2.0-beta.1 <0.3.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.3.0-beta.5_1786420290712_0.7262174888809021","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-beta.6":{"name":"@spfn/auth","version":"0.3.0-beta.6","keywords":["spfn","auth","authentication","authorization","rbac","access-control","nextjs","typescript","oauth","social-login","session","ai-coding-agent"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.3.0-beta.6","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"4a1be8dd7ad00caa4df4364b29a55e097fda8138","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.3.0-beta.6.tgz","fileCount":63,"integrity":"sha512-LZgE5RIzg3/+dJiPCWlg/wZuusJ1aPwWXiFzyqNxEHbCTW0UctiI1P7Lz1G1P5s/z7tAI3sfil8NnR1lDs6QYg==","signatures":[{"sig":"MEUCIGYLGKQDUaqnty3et3JczJoBi3icqvlMSqrqRZ5D2aofAiEAgs36Qww4TrMhb1EKDAYRhcZL+b+Hqp8vZ4UlLZMEZos=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.3.0-beta.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4316351},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./crypto":{"types":"./dist/crypto.d.ts","import":"./dist/crypto.js","require":"./dist/crypto.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./client-proof":{"types":"./dist/client-proof.d.ts","import":"./dist/client-proof.js","require":"./dist/client-proof.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"gitHead":"12be74402051f5eb7ee603a0bf68aca05b7f12bd","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","prepublishOnly":"pnpm run clean && pnpm run build","publish:latest":"node ../../scripts/publish-package.mjs latest","test:integration":"vitest run src/__tests__/integration/","export:mobile-contract":"tsx scripts/export-mobile-contract.ts"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"12.0.2","description":"Authentication for a Next.js full-stack app: sessions, social login, OAuth, RBAC and admin roles, without assembling an auth stack yourself","directories":{},"_nodeVersion":"22.23.1","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.34","next":"^16.2.11","spfn":"workspace:*","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"workspace:*","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^16.2.11","@spfn/core":">=0.3.0-beta.4 <0.4.0","drizzle-orm":">=1.0.0-rc.4 <2","@spfn/notification":">=0.2.0-beta.3 <0.3.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.3.0-beta.6_1786681629009_0.29406461152056584","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-beta.7":{"name":"@spfn/auth","version":"0.3.0-beta.7","keywords":["spfn","auth","authentication","authorization","rbac","access-control","nextjs","typescript","oauth","social-login","session","ai-coding-agent"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.3.0-beta.7","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"35cb4e697387bbdead035f60e812fc2c7b828697","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.3.0-beta.7.tgz","fileCount":63,"integrity":"sha512-xpKhFVb97vGA6efYiHtj26gZBpluggcmAstHRyKmG5jdd9RCHDED61Uap2Y97PNnXcG9CtQ4R7hp4ddfRd2I5w==","signatures":[{"sig":"MEUCIEvmXkxiwPbsQZVQva6t19A9XKJOBCdDCaRjDsCqowuEAiEA8/OyMDJbIwSJiemCJPzpqTmXqsT8gtRfTWG51UNIX2I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.3.0-beta.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4327812},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./crypto":{"types":"./dist/crypto.d.ts","import":"./dist/crypto.js","require":"./dist/crypto.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./client-proof":{"types":"./dist/client-proof.d.ts","import":"./dist/client-proof.js","require":"./dist/client-proof.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"gitHead":"c3aebca5e0dae8d64b01d9f42a6c08996427b844","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","prepublishOnly":"pnpm run clean && pnpm run build","publish:latest":"node ../../scripts/publish-package.mjs latest","test:integration":"vitest run src/__tests__/integration/","export:mobile-contract":"tsx scripts/export-mobile-contract.ts"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"12.0.2","description":"Authentication for a Next.js full-stack app: sessions, social login, OAuth, RBAC and admin roles, without assembling an auth stack yourself","directories":{},"_nodeVersion":"22.23.2","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.34","next":"^16.2.11","spfn":"workspace:*","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"workspace:*","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^16.2.11","@spfn/core":">=0.3.0-beta.4 <0.4.0","drizzle-orm":">=1.0.0-rc.4 <2","@spfn/notification":">=0.2.0-beta.3 <0.3.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.3.0-beta.7_1788248473447_0.2213117931854598","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-beta.8":{"name":"@spfn/auth","version":"0.3.0-beta.8","keywords":["spfn","auth","authentication","authorization","rbac","access-control","nextjs","typescript","oauth","social-login","session","ai-coding-agent"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.3.0-beta.8","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"4dfba7bffdd9a7c478cc49b6c738031a1eeba84f","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.3.0-beta.8.tgz","fileCount":65,"integrity":"sha512-htc21hbRNIEdf5Co8YluYd5Ul3dQ5DAzpzAus2HO0xEGclkqC9v2CuAFEvaOkZsvpe1qHC/NpxZHvcZ4hVz8FQ==","signatures":[{"sig":"MEUCIQDHWLKL1W3rbr/BD/PisPmYGsIz2KQVFlGKV/2vVkq3IAIgTghACwNWgJDxXV9T9JArbk4ArlIVPa4JVblMTrDhPuM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.3.0-beta.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4730243},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./crypto":{"types":"./dist/crypto.d.ts","import":"./dist/crypto.js","require":"./dist/crypto.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./client-proof":{"types":"./dist/client-proof.d.ts","import":"./dist/client-proof.js","require":"./dist/client-proof.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"gitHead":"f1c7e5e307b704dad03b8c8d536fe222426ef54d","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","prepublishOnly":"pnpm run clean && pnpm run build","publish:latest":"node ../../scripts/publish-package.mjs latest","test:integration":"vitest run src/__tests__/integration/","export:mobile-contract":"tsx scripts/export-mobile-contract.ts"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"12.0.2","description":"Authentication for a Next.js full-stack app: sessions, social login, OAuth, RBAC and admin roles, without assembling an auth stack yourself","directories":{},"_nodeVersion":"22.23.2","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.34","next":"^16.2.11","spfn":"workspace:*","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"workspace:*","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^16.2.11","@spfn/core":">=0.3.0-beta.6 <0.4.0","drizzle-orm":">=1.0.0-rc.4 <2","@spfn/notification":">=0.2.0-beta.3 <0.3.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.3.0-beta.8_1788315478849_0.09203483414056968","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-beta.9":{"name":"@spfn/auth","version":"0.3.0-beta.9","keywords":["spfn","auth","authentication","authorization","rbac","access-control","nextjs","typescript","oauth","social-login","session","ai-coding-agent"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.3.0-beta.9","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"50e2a39029e70e3bccfdb93d73d4ff39230b2f91","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.3.0-beta.9.tgz","fileCount":65,"integrity":"sha512-nyWY6TF4aa3Fuhjd/MWYXaJ1PNCXqNp9vQVJd8u6bXvlboOKDOfEkVzysPF6EbItpEDj6qJQn2a5pLA8NoqJvw==","signatures":[{"sig":"MEUCIQCwCBdsCAeF3kgz2hmZEY/waDusg78cbljU0AcL9CrrXQIgCV1vwf/EgHstYF2XKubd+odABcardxGFGdp8lxPOrNk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.3.0-beta.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4766219},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./crypto":{"types":"./dist/crypto.d.ts","import":"./dist/crypto.js","require":"./dist/crypto.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./client-proof":{"types":"./dist/client-proof.d.ts","import":"./dist/client-proof.js","require":"./dist/client-proof.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"gitHead":"617d06bc0aa6e3fec8e709c467812cf66281e904","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","prepublishOnly":"pnpm run clean && pnpm run build","publish:latest":"node ../../scripts/publish-package.mjs latest","test:integration":"vitest run src/__tests__/integration/","export:mobile-contract":"tsx scripts/export-mobile-contract.ts"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"12.0.2","description":"Authentication for a Next.js full-stack app: sessions, social login, OAuth, RBAC and admin roles, without assembling an auth stack yourself","directories":{},"_nodeVersion":"22.23.2","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.34","next":"^16.2.11","spfn":"workspace:*","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"workspace:*","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^16.2.11","@spfn/core":">=0.3.0-beta.6 <0.4.0","drizzle-orm":">=1.0.0-rc.4 <2","@spfn/notification":">=0.2.0-beta.3 <0.3.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.3.0-beta.9_1788506895621_0.06631365616894591","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-beta.10":{"name":"@spfn/auth","version":"0.3.0-beta.10","keywords":["spfn","auth","authentication","authorization","rbac","access-control","nextjs","typescript","oauth","social-login","session","ai-coding-agent"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.3.0-beta.10","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"d5b39c8e3820e673973607466e541ac921897a45","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.3.0-beta.10.tgz","fileCount":65,"integrity":"sha512-uKlgHsp942tt8gz5TvMXlGARJ2mlZYqulaRupX7o4IUCVhaVO0oxfUn0hzWsi1BAlQSqCM3Y01C+PHC58HIteA==","signatures":[{"sig":"MEQCIBVr9khIEkvb3uzrJSrv4lR185M+qq5vNpd3HGyX3A/lAiAK/v+3xXUZ/iumGHMs+LNznSqUhawhANhFcELO6+ZTSA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.3.0-beta.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4768619},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./crypto":{"types":"./dist/crypto.d.ts","import":"./dist/crypto.js","require":"./dist/crypto.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./client-proof":{"types":"./dist/client-proof.d.ts","import":"./dist/client-proof.js","require":"./dist/client-proof.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"gitHead":"48fbd9dfcc9025f3170f9ec57f7a170e7f821399","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","prepublishOnly":"pnpm run clean && pnpm run build","publish:latest":"node ../../scripts/publish-package.mjs latest","test:integration":"vitest run src/__tests__/integration/","export:mobile-contract":"tsx scripts/export-mobile-contract.ts"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"12.0.2","description":"Authentication for a Next.js full-stack app: sessions, social login, OAuth, RBAC and admin roles, without assembling an auth stack yourself","directories":{},"_nodeVersion":"22.23.2","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.34","next":"^16.2.11","spfn":"workspace:*","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"workspace:*","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^16.2.11","@spfn/core":">=0.3.0-beta.6 <0.4.0","drizzle-orm":">=1.0.0-rc.4 <2","@spfn/notification":">=0.2.0-beta.3 <0.3.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.3.0-beta.10_1788682634644_0.602423059537242","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-beta.11":{"name":"@spfn/auth","version":"0.3.0-beta.11","keywords":["spfn","auth","authentication","authorization","rbac","access-control","nextjs","typescript","oauth","social-login","session","ai-coding-agent"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.3.0-beta.11","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"94d49f544099c139066e351a0f91793c66125c3a","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.3.0-beta.11.tgz","fileCount":65,"integrity":"sha512-nNXqsSD8r/rbily0Qns1Y8xPIPqF325Jitbwr1bYF+kLnPstZoCKDPqhMPpfpoiRPTF5oRvZCSZlMVJX0bCh3A==","signatures":[{"sig":"MEYCIQDdawMqAaHASodjnB3hT6JEdkujUUbxkduZMsz6MXOZWAIhAMdhY864lcSJxHZQZYLAks0ahx792avD7+DC3Yr/jp1B","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.3.0-beta.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4787112},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./crypto":{"types":"./dist/crypto.d.ts","import":"./dist/crypto.js","require":"./dist/crypto.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./client-proof":{"types":"./dist/client-proof.d.ts","import":"./dist/client-proof.js","require":"./dist/client-proof.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"gitHead":"444b680b8086c24ae670af9052189a4c15bfc448","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","prepublishOnly":"pnpm run clean && pnpm run build","publish:latest":"node ../../scripts/publish-package.mjs latest","test:integration":"vitest run src/__tests__/integration/","export:mobile-contract":"tsx scripts/export-mobile-contract.ts"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"12.0.2","description":"Authentication for a Next.js full-stack app: sessions, social login, OAuth, RBAC and admin roles, without assembling an auth stack yourself","directories":{},"_nodeVersion":"22.23.2","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.34","next":"^16.2.11","spfn":"workspace:*","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"workspace:*","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^16.2.11","@spfn/core":">=0.3.0-beta.6 <0.4.0","drizzle-orm":">=1.0.0-rc.4 <2","@spfn/notification":">=0.2.0-beta.3 <0.3.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.3.0-beta.11_1788688313377_0.008288744890245336","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-beta.12":{"name":"@spfn/auth","version":"0.3.0-beta.12","keywords":["spfn","auth","authentication","authorization","rbac","access-control","nextjs","typescript","oauth","social-login","session","ai-coding-agent"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.3.0-beta.12","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"28d4a4af6807917004b0997280a648b26a22aca9","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.3.0-beta.12.tgz","fileCount":67,"integrity":"sha512-EVlQ08eJHs5y0Zpwd4+SZuu/210Q39FhUL6pDJVvzA+qE8kIdAEvg4TYxLO4ifG3Oe7VyUAttwxeCyh4U5SvSg==","signatures":[{"sig":"MEQCIGx3ir65bt6mVpbiiMjennDa7xl0PLIi81cLp3JAsVpcAiBW9uBnb9QELBGOLkIi6ewARjxQrdtX/KsikYg8bpTyiA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.3.0-beta.12","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":5149048},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./crypto":{"types":"./dist/crypto.d.ts","import":"./dist/crypto.js","require":"./dist/crypto.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./client-proof":{"types":"./dist/client-proof.d.ts","import":"./dist/client-proof.js","require":"./dist/client-proof.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"gitHead":"36d3170ec14280979b5605d62bd44e5d71d31460","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","prepublishOnly":"pnpm run clean && pnpm run build","publish:latest":"node ../../scripts/publish-package.mjs latest","test:integration":"vitest run src/__tests__/integration/","export:mobile-contract":"tsx scripts/export-mobile-contract.ts"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"12.0.2","description":"Authentication for a Next.js full-stack app: sessions, social login, OAuth, RBAC and admin roles, without assembling an auth stack yourself","directories":{},"_nodeVersion":"22.23.2","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7","@simplewebauthn/server":"^14.0.1","@simplewebauthn/browser":"^14.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.34","next":"^16.2.11","spfn":"workspace:*","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"workspace:*","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^16.2.11","@spfn/core":">=0.3.0-beta.6 <0.4.0","drizzle-orm":">=1.0.0-rc.4 <2","@spfn/notification":">=0.2.0-beta.3 <0.3.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.3.0-beta.12_1788745700886_0.9422035390984669","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-beta.13":{"name":"@spfn/auth","version":"0.3.0-beta.13","keywords":["spfn","auth","authentication","authorization","rbac","access-control","nextjs","typescript","oauth","social-login","session","ai-coding-agent"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.3.0-beta.13","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"62885c00c73be624db869302b274589a1492faf0","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.3.0-beta.13.tgz","fileCount":69,"integrity":"sha512-86+HEInMuL/AP0GjFkUe1PUXzUOz1/KxkehBb2NcWeUyiVR7toEhQMVlwWjCRaEmq3F8v1AcDKXU8IwIpyeXnA==","signatures":[{"sig":"MEUCIH7rsn5ryg8kONNex4ZL/x2D8RaepHSmTMs2BphmyholAiEA6DZMnpsbn2RsHEbUoCYdXl/bqYX5mADauveycqbgcls=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.3.0-beta.13","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":5368666},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./crypto":{"types":"./dist/crypto.d.ts","import":"./dist/crypto.js","require":"./dist/crypto.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./client-proof":{"types":"./dist/client-proof.d.ts","import":"./dist/client-proof.js","require":"./dist/client-proof.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"gitHead":"6f2bc78bfe593095d69615d7aaad7675d73e18a1","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","prepublishOnly":"pnpm run clean && pnpm run build","publish:latest":"node ../../scripts/publish-package.mjs latest","test:integration":"vitest run src/__tests__/integration/","export:mobile-contract":"tsx scripts/export-mobile-contract.ts"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"12.0.2","description":"Authentication for a Next.js full-stack app: sessions, social login, OAuth, RBAC and admin roles, without assembling an auth stack yourself","directories":{},"_nodeVersion":"22.23.2","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7","@simplewebauthn/server":"^14.0.1","@simplewebauthn/browser":"^14.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.34","next":"^16.2.11","spfn":"workspace:*","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"workspace:*","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^16.2.11","@spfn/core":">=0.3.0-beta.6 <0.4.0","drizzle-orm":">=1.0.0-rc.4 <2","@spfn/notification":">=0.2.0-beta.5 <0.3.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.3.0-beta.13_1788750956025_0.6639521040163994","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-beta.14":{"name":"@spfn/auth","version":"0.3.0-beta.14","keywords":["spfn","auth","authentication","authorization","rbac","access-control","nextjs","typescript","oauth","social-login","session","ai-coding-agent"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.3.0-beta.14","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"3f62d31d31b5ea7bca168b70c34d38383d7584c5","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.3.0-beta.14.tgz","fileCount":71,"integrity":"sha512-bNR4UV4Sf3MIN3LQE0gWg26u3H0rg9r4/gQZRa4LgNZts5tQFHCOwKF0V4qz1SmBCa8RLJkS+ndzMGti+yeXMw==","signatures":[{"sig":"MEQCICj3sLITvyFtjpxGGB9wQBoUBebbHAqGGjfx2luJiEM+AiAhkibmx55iOYIBMVEBFVY9cmNmC+lfOqHzF8z+XLOo0g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.3.0-beta.14","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":5519041},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./crypto":{"types":"./dist/crypto.d.ts","import":"./dist/crypto.js","require":"./dist/crypto.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./client-proof":{"types":"./dist/client-proof.d.ts","import":"./dist/client-proof.js","require":"./dist/client-proof.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"gitHead":"787dd9536e1dcfd213d71b3e40613d46abc7ad47","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","prepublishOnly":"pnpm run clean && pnpm run build","publish:latest":"node ../../scripts/publish-package.mjs latest","test:integration":"vitest run src/__tests__/integration/","export:mobile-contract":"tsx scripts/export-mobile-contract.ts"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"12.0.2","description":"Authentication for a Next.js full-stack app: sessions, social login, OAuth, RBAC and admin roles, without assembling an auth stack yourself","directories":{},"_nodeVersion":"22.23.2","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7","@simplewebauthn/server":"^14.0.1","@simplewebauthn/browser":"^14.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.34","next":"^16.2.11","spfn":"workspace:*","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"workspace:*","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^16.2.11","@spfn/core":">=0.3.0-beta.6 <0.4.0","drizzle-orm":">=1.0.0-rc.4 <2","@spfn/notification":">=0.2.0-beta.5 <0.3.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.3.0-beta.14_1788759932191_0.9429521966463408","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-beta.15":{"name":"@spfn/auth","version":"0.3.0-beta.15","keywords":["spfn","auth","authentication","authorization","rbac","access-control","nextjs","typescript","oauth","social-login","session","ai-coding-agent"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.3.0-beta.15","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"70001255a21e708b15fe25ca1055aa8716c24ff7","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.3.0-beta.15.tgz","fileCount":71,"integrity":"sha512-2Ps0b1EoxM3Gmrh5W5Cjn2QKsUV96ov/otOQklCsrkT7Yd7zQQRqfNWeOClcK6+tHcLijAsaRGAa0WBwbchTkw==","signatures":[{"sig":"MEUCIHu8Bu/p83JbsfRaNXQXB0xE5vtPeKxyvPRvVj8uNNRUAiEAlWgm0Dl1KEnBBtX9pNjc0VjYX4hMwjLFTdvkyTzRmVE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.3.0-beta.15","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":5518671},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./crypto":{"types":"./dist/crypto.d.ts","import":"./dist/crypto.js","require":"./dist/crypto.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./client-proof":{"types":"./dist/client-proof.d.ts","import":"./dist/client-proof.js","require":"./dist/client-proof.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"gitHead":"fbe0610ff9f4205430410b673d53f67a9164f41f","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","prepublishOnly":"pnpm run clean && pnpm run build","publish:latest":"node ../../scripts/publish-package.mjs latest","test:integration":"vitest run src/__tests__/integration/","export:mobile-contract":"tsx scripts/export-mobile-contract.ts"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"12.0.2","description":"Authentication for a Next.js full-stack app: sessions, social login, OAuth, RBAC and admin roles, without assembling an auth stack yourself","directories":{},"_nodeVersion":"22.23.2","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7","@simplewebauthn/server":"^14.0.1","@simplewebauthn/browser":"^14.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.6","hono":"^4.12.34","next":"^16.2.11","spfn":"workspace:*","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"workspace:*","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^16.2.11","@spfn/core":">=0.3.0-beta.8 <0.4.0","drizzle-orm":">=1.0.0-rc.4 <2","@spfn/notification":">=0.2.0-beta.5 <0.3.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.3.0-beta.15_1788762707699_0.3812699403826625","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-beta.16":{"name":"@spfn/auth","version":"0.3.0-beta.16","keywords":["spfn","auth","authentication","authorization","rbac","access-control","nextjs","typescript","oauth","social-login","session","ai-coding-agent"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.3.0-beta.16","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"6396d8fd155a4c8faca84911dd1edbdff32cd5ea","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.3.0-beta.16.tgz","fileCount":71,"integrity":"sha512-uaXy/cWeQeMwrsunImVrMsoTCiaA6IWi+0LixK8m7eKzLQ1VnZoHpIWgmdXQeV7oLgJ5Nz7tAuM/9M40N2GNNQ==","signatures":[{"sig":"MEUCIEyqGAJQoNsHwVdZF6JNLAQ7tjtExmOsdXiE4K+Vutw1AiEA6eV+gJOBEMuqPRAZlWkU7HONIQu23+PwMcpX5u+ZCuY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIDuRrfPvHFvxmtjro/gEeki5+YBrsWE/K7ylRCE1silBAiAH7xe70IwHVnieJ62d4e5higuwq530WiVawFqlhi1A1A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.3.0-beta.16","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":5518939},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./crypto":{"types":"./dist/crypto.d.ts","import":"./dist/crypto.js","require":"./dist/crypto.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./client-proof":{"types":"./dist/client-proof.d.ts","import":"./dist/client-proof.js","require":"./dist/client-proof.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"gitHead":"53eeff9cbd8461bfc69b7c1279d536d6e077eb79","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","prepublishOnly":"pnpm run clean && pnpm run build","publish:latest":"node ../../scripts/publish-package.mjs latest","test:integration":"vitest run src/__tests__/integration/","export:mobile-contract":"tsx scripts/export-mobile-contract.ts"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"12.0.2","description":"Authentication for a Next.js full-stack app: sessions, social login, OAuth, RBAC and admin roles, without assembling an auth stack yourself","directories":{},"_nodeVersion":"22.23.2","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7","@simplewebauthn/server":"^14.0.1","@simplewebauthn/browser":"^14.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","hono":"^4.13.5","next":"^16.3.3","spfn":"workspace:*","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"workspace:*","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^16.3.3","@spfn/core":">=0.3.0-beta.8 <0.4.0","drizzle-orm":">=1.0.0-rc.4 <2","@spfn/notification":">=0.2.0-beta.5 <0.3.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.3.0-beta.16_1789405177388_0.39637168623612773","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-beta.17":{"name":"@spfn/auth","version":"0.3.0-beta.17","keywords":["spfn","auth","authentication","authorization","rbac","access-control","nextjs","typescript","oauth","social-login","session","ai-coding-agent"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.3.0-beta.17","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"0dc5de276e8b7c0ba477ae502451ecd2542c6773","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.3.0-beta.17.tgz","fileCount":71,"integrity":"sha512-xUlMQnJSzEWqmRT8UVO0g7GIsHmdPPWPJWaJ2H1zb8lHlnk+/QarvjIfF5zOwo3nu+4NuYBVnnD4v8ZcdyeuOQ==","signatures":[{"sig":"MEUCIHLIlcWevnLdv+bXAWpJzfX+tiGaXwAZCdo+d4UflBntAiEAu6cAARN2wka3NiymKoz6X1BFNpEWL0OUYmpLFlMJTTw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIDEUda6I8rLsbGapAog1oC5rqyw4UpIldMb8osg8eFJtAiBc/f8QolUzh6Oo053AseCD566eF0A/6pkFBzf1TXC4vw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.3.0-beta.17","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":5540515},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./crypto":{"types":"./dist/crypto.d.ts","import":"./dist/crypto.js","require":"./dist/crypto.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./client-proof":{"types":"./dist/client-proof.d.ts","import":"./dist/client-proof.js","require":"./dist/client-proof.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"gitHead":"7cda2fe81f0af9dbde4898000e34e3e1fad97677","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","prepublishOnly":"pnpm run clean && pnpm run build","publish:latest":"node ../../scripts/publish-package.mjs latest","test:integration":"vitest run src/__tests__/integration/","export:mobile-contract":"tsx scripts/export-mobile-contract.ts"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"12.0.2","description":"Authentication for a Next.js full-stack app: sessions, social login, OAuth, RBAC and admin roles, without assembling an auth stack yourself","directories":{},"_nodeVersion":"22.23.2","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7","@simplewebauthn/server":"^14.0.1","@simplewebauthn/browser":"^14.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","hono":"^4.13.5","next":"^16.3.3","spfn":"workspace:*","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"workspace:*","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^16.3.3","@spfn/core":">=0.3.0-beta.8 <0.4.0","drizzle-orm":">=1.0.0-rc.4 <2","@spfn/notification":">=0.2.0-beta.5 <0.3.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.3.0-beta.17_1789449982609_0.19339603565651498","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-beta.18":{"name":"@spfn/auth","version":"0.3.0-beta.18","keywords":["spfn","auth","authentication","authorization","rbac","access-control","nextjs","typescript","oauth","social-login","session","ai-coding-agent"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.3.0-beta.18","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"2872524cf98b485bd9385502115cc03fbf899cd0","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.3.0-beta.18.tgz","fileCount":71,"integrity":"sha512-8D/rqUKicpHNFsbjDADFjQ3wZ9ffgI+6FzNhDnfthmZERM3iAc9TcxQdvAk5K0BQWb7v/s9HNKj8hIzbe6FTSg==","signatures":[{"sig":"MEUCIQCMcTw39le8wNdrD72d8U04/9tVxMQ8BQC4aTX8ognITAIgHTQ6dKS7QeoJ+Zg/sEBzT7J2ri2gqN6DhQcVHwE/fe0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHrG11nHDevEMczdOKqmVNQyoQGTj/jj84pyin6kf/rfAiAA2lwih0cllVM6nWX3xGnJEqzAdgblheQnViYOTsOI/g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.3.0-beta.18","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":5546441},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./crypto":{"types":"./dist/crypto.d.ts","import":"./dist/crypto.js","require":"./dist/crypto.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./client-proof":{"types":"./dist/client-proof.d.ts","import":"./dist/client-proof.js","require":"./dist/client-proof.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"gitHead":"c42df9d30e9fe7198ed823d7258f4685344ee5aa","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","prepublishOnly":"pnpm run clean && pnpm run build","publish:latest":"node ../../scripts/publish-package.mjs latest","test:integration":"vitest run src/__tests__/integration/","export:mobile-contract":"tsx scripts/export-mobile-contract.ts"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"12.0.2","description":"Authentication for a Next.js full-stack app: sessions, social login, OAuth, RBAC and admin roles, without assembling an auth stack yourself","directories":{},"_nodeVersion":"22.23.2","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7","@simplewebauthn/server":"^14.0.1","@simplewebauthn/browser":"^14.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","hono":"^4.13.5","next":"^16.3.3","spfn":"workspace:*","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"workspace:*","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^16.3.3","@spfn/core":">=0.3.0-beta.8 <0.4.0","drizzle-orm":">=1.0.0-rc.4 <2","@spfn/notification":">=0.2.0-beta.5 <0.3.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.3.0-beta.18_1789716671017_0.2143159365569507","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-beta.19":{"name":"@spfn/auth","version":"0.3.0-beta.19","keywords":["spfn","auth","authentication","authorization","rbac","access-control","nextjs","typescript","oauth","social-login","session","ai-coding-agent"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.3.0-beta.19","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"fb14222d96d391881bd9c8a870e673f469aee3bd","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.3.0-beta.19.tgz","fileCount":73,"integrity":"sha512-XlwEAtlwkuaPR4qZ45ULaEG/T176xTQAsFSDe3XL9MMguGRf5VAs54F9PTyRnyc5lhFy31Z4MVNHDjIFYeldkA==","signatures":[{"sig":"MEQCIAKbilqoc/Om88cRupRdTYS9BZxv97qlaa8Uqgh+d5VaAiBBeFarXEIciIBGHmfEeKEWryUi4hcTzNxSK0OPcF5zmA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHHqkg7Ic1sFzWJ8MIrMr9lZn//4L6K6ekb4ctmXBeX0AiAiOK0rX/u/cynqLlHkyIAr11Qbv0qKY0t5ut9UhDmBUA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.3.0-beta.19","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6003726},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./crypto":{"types":"./dist/crypto.d.ts","import":"./dist/crypto.js","require":"./dist/crypto.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./client-proof":{"types":"./dist/client-proof.d.ts","import":"./dist/client-proof.js","require":"./dist/client-proof.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"gitHead":"55d9d9ea73d6b26a611a31914e828f9f516af02a","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","prepublishOnly":"pnpm run clean && pnpm run build","publish:latest":"node ../../scripts/publish-package.mjs latest","test:integration":"vitest run src/__tests__/integration/","export:mobile-contract":"tsx scripts/export-mobile-contract.ts"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"12.0.2","description":"Authentication for a Next.js full-stack app: sessions, social login, OAuth, RBAC and admin roles, without assembling an auth stack yourself","directories":{},"_nodeVersion":"22.23.2","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7","@simplewebauthn/server":"^14.0.1","@simplewebauthn/browser":"^14.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","hono":"^4.13.5","next":"^16.3.3","spfn":"workspace:*","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"workspace:*","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^16.3.3","@spfn/core":">=0.3.0-beta.8 <0.4.0","drizzle-orm":">=1.0.0-rc.4 <2","@spfn/notification":">=0.2.0-beta.5 <0.3.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.3.0-beta.19_1789737981802_0.9711196943787728","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-beta.20":{"name":"@spfn/auth","version":"0.3.0-beta.20","keywords":["spfn","auth","authentication","authorization","rbac","access-control","nextjs","typescript","oauth","social-login","session","ai-coding-agent"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.3.0-beta.20","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"023d3eab03152c94ff76f965c449315943ac6ace","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.3.0-beta.20.tgz","fileCount":73,"integrity":"sha512-q93sSVKuK2vteMUP6ufCprmL2Cq8nlk4i0uPl8o89yG5oMSW56ZWx2gKTqnCJ3jizqImK5Qdz0NDo5N3+UMvpg==","signatures":[{"sig":"MEUCIAEfhrrM79Wdm7I5n6q6T3pD/Zna/XfgVzRWZ42ykLUiAiEA5jn65iQdkZ5fNkC5PijbI+lqW2CLT2eenYS7s+8kQLU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGxNqyqOp4LjqcbDOoDZQj5G+3tlB1DX+QqltA7B3exQAiBh5X5wtZRFkpSkFG5OwjvDQgCZsjBj+zi8qFkg5ivuXA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.3.0-beta.20","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6046515},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./crypto":{"types":"./dist/crypto.d.ts","import":"./dist/crypto.js","require":"./dist/crypto.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./client-proof":{"types":"./dist/client-proof.d.ts","import":"./dist/client-proof.js","require":"./dist/client-proof.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"gitHead":"94407e89cc4594cebaf2d74d81dbd1f743fb077c","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","prepublishOnly":"pnpm run clean && pnpm run build","publish:latest":"node ../../scripts/publish-package.mjs latest","test:integration":"vitest run src/__tests__/integration/","export:mobile-contract":"tsx scripts/export-mobile-contract.ts"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"12.0.2","description":"Authentication for a Next.js full-stack app: sessions, social login, OAuth, RBAC and admin roles, without assembling an auth stack yourself","directories":{},"_nodeVersion":"22.23.2","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7","@simplewebauthn/server":"^14.0.1","@simplewebauthn/browser":"^14.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","hono":"^4.13.5","next":"^16.3.3","spfn":"workspace:*","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/mcp":"workspace:*","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"workspace:*","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^16.3.3","@spfn/core":">=0.3.0-beta.8 <0.4.0","drizzle-orm":">=1.0.0-rc.4 <2","@spfn/notification":">=0.2.0-beta.5 <0.3.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.3.0-beta.20_1789741189976_0.8626576732061118","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-beta.21":{"name":"@spfn/auth","version":"0.3.0-beta.21","keywords":["spfn","auth","authentication","authorization","rbac","access-control","nextjs","typescript","oauth","social-login","session","ai-coding-agent"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.3.0-beta.21","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"b3426cb47293c82b8be0220c2ca07a8f4e2d2d1f","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.3.0-beta.21.tgz","fileCount":77,"integrity":"sha512-LKBvNeToxXm9kyOJG+pDPc8q/L2i0ohhmjGEiAMWxgz3YEeJh0spfRfRuA9TZlu3fcvphfT6HVMlJ3uYZQwePQ==","signatures":[{"sig":"MEQCIFB1yaUMeuyNSFMghMGGFcJR3FD+S6dv0OdmwURfih5FAiAyKIejXLZ3s2o3xH8A/Dtj3cPRCY/CBao+NJcpiSthtQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIBaefjUbTlMZNIMDS4GOLNphqPCd0kjViFTAJcGfJez5AiEA1WswdZMuJeouCMTttaq1PxYnNW9o/CZ2q5hd4DWiBtk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.3.0-beta.21","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6426512},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./crypto":{"types":"./dist/crypto.d.ts","import":"./dist/crypto.js","require":"./dist/crypto.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./client-proof":{"types":"./dist/client-proof.d.ts","import":"./dist/client-proof.js","require":"./dist/client-proof.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"gitHead":"9cd8fb964971c7f46b147bda47598036f65073d2","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","prepublishOnly":"pnpm run clean && pnpm run build","publish:latest":"node ../../scripts/publish-package.mjs latest","test:integration":"vitest run src/__tests__/integration/","export:mobile-contract":"tsx scripts/export-mobile-contract.ts"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"12.0.2","description":"Authentication for a Next.js full-stack app: sessions, social login, OAuth, RBAC and admin roles, without assembling an auth stack yourself","directories":{},"_nodeVersion":"22.23.2","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7","@simplewebauthn/server":"^14.0.1","@simplewebauthn/browser":"^14.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","hono":"^4.13.5","next":"^16.3.3","spfn":"workspace:*","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/mcp":"workspace:*","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"workspace:*","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^16.3.3","@spfn/core":">=0.3.0-beta.8 <0.4.0","drizzle-orm":">=1.0.0-rc.4 <2","@spfn/notification":">=0.2.0-beta.5 <0.3.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.3.0-beta.21_1789747142424_0.4145339266008199","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-beta.22":{"name":"@spfn/auth","version":"0.3.0-beta.22","keywords":["spfn","auth","authentication","authorization","rbac","access-control","nextjs","typescript","oauth","social-login","session","ai-coding-agent"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.3.0-beta.22","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"9988cafc74c1fb373e6228d1a648c1825991efec","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.3.0-beta.22.tgz","fileCount":77,"integrity":"sha512-WQxgo5q3I9tpyfx5QTcc1cgqhahMg/uRCerVWt/lVxXA646UY7M0FpC8Oc17JTY7aXtTRxm5y1TyO3zfzJadBA==","signatures":[{"sig":"MEYCIQCGpQ8Ob1Qg998eppt6W1Vi4EfaRkSR7GntSwf34cOUowIhAPTSSLwMDpNHmK7iJzuC+deAdjRSOTb9SfHeCwBxxmvA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIA/skCbFc0ASHahT+XfL02sxxsP1KIFWwH4T9cz97dnuAiEAgZENWhncSi/eCX+uTjCrai0K918etcNRUtuJGwpENW4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.3.0-beta.22","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6459862},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./crypto":{"types":"./dist/crypto.d.ts","import":"./dist/crypto.js","require":"./dist/crypto.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./client-proof":{"types":"./dist/client-proof.d.ts","import":"./dist/client-proof.js","require":"./dist/client-proof.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"gitHead":"7646b8551bf77c466ef91aa22a63eac9bf57e3f8","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","prepublishOnly":"pnpm run clean && pnpm run build","publish:latest":"node ../../scripts/publish-package.mjs latest","test:integration":"vitest run src/__tests__/integration/","export:mobile-contract":"tsx scripts/export-mobile-contract.ts"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"12.0.2","description":"Authentication for a Next.js full-stack app: sessions, social login, OAuth, RBAC and admin roles, without assembling an auth stack yourself","directories":{},"_nodeVersion":"22.23.2","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7","@simplewebauthn/server":"^14.0.1","@simplewebauthn/browser":"^14.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","hono":"^4.13.5","next":"^16.3.3","spfn":"workspace:*","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/mcp":"workspace:*","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"workspace:*","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^16.3.3","@spfn/core":">=0.3.0-beta.8 <0.4.0","drizzle-orm":">=1.0.0-rc.4 <2","@spfn/notification":">=0.2.0-beta.5 <0.3.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.3.0-beta.22_1789750236897_0.7496068435827263","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-beta.23":{"name":"@spfn/auth","version":"0.3.0-beta.23","keywords":["spfn","auth","authentication","authorization","rbac","access-control","nextjs","typescript","oauth","social-login","session","ai-coding-agent"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.3.0-beta.23","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"75852d1f352a254ff8967f048b7c56e3df4017fc","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.3.0-beta.23.tgz","fileCount":79,"integrity":"sha512-R6ZuuJ/Oi+oikWy/Zv1cOWSEm5FCvxXRgOTpgEDlTNZ6md7Im0V+Q7twdngzsYBWU22V+BwcfRQqvj/j3Ps6wA==","signatures":[{"sig":"MEQCIAG7+Vx3w0ri7/xV89oXgN6gxWeUyNs9l4S05ijpsW3dAiAEfTnEavGxpFpqQVt+4vhF7xSHK8k808ZfksrOnhMpEA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIF1kOYtZbEhkjx7Vug1JAqpTZHmKKkIPdhKkZllnGoiyAiEAuq0if/VmY2wq9mRJJ7fRzSVQ1jmLSg0+VauLiA9M/nU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.3.0-beta.23","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6829169},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./crypto":{"types":"./dist/crypto.d.ts","import":"./dist/crypto.js","require":"./dist/crypto.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./client-proof":{"types":"./dist/client-proof.d.ts","import":"./dist/client-proof.js","require":"./dist/client-proof.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"gitHead":"2969cb8ac245f2ce20d1c24edc35de4aec830741","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","prepublishOnly":"pnpm run clean && pnpm run build","publish:latest":"node ../../scripts/publish-package.mjs latest","test:integration":"vitest run src/__tests__/integration/","export:mobile-contract":"tsx scripts/export-mobile-contract.ts"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"12.0.2","description":"Authentication for a Next.js full-stack app: sessions, social login, OAuth, RBAC and admin roles, without assembling an auth stack yourself","directories":{},"_nodeVersion":"22.23.2","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7","@simplewebauthn/server":"^14.0.1","@simplewebauthn/browser":"^14.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","hono":"^4.13.5","next":"^16.3.3","spfn":"workspace:*","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/mcp":"workspace:*","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"workspace:*","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^16.3.3","@spfn/core":">=0.3.0-beta.8 <0.4.0","drizzle-orm":">=1.0.0-rc.4 <2","@spfn/notification":">=0.2.0-beta.5 <0.3.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.3.0-beta.23_1789756910823_0.5788208012308453","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-beta.24":{"name":"@spfn/auth","version":"0.3.0-beta.24","keywords":["spfn","auth","authentication","authorization","rbac","access-control","nextjs","typescript","oauth","social-login","session","ai-coding-agent"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.3.0-beta.24","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"63553e357f6707835bce694fef69a28c917d87c7","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.3.0-beta.24.tgz","fileCount":83,"integrity":"sha512-ljwJt9SI3BXBJHByBEE6qvkSTZLTRpQd8HD7Zzc4wJUaDFSxZPBLjR7rSiAUGJvmfodVK67zX2CBD8RTWYEY/Q==","signatures":[{"sig":"MEUCIESROroOfxQOLItLZdVXALT1NVfoIFbTlIjNB1znfsP7AiEAxVOZgP88tR84hHTKdTA844ovgfbBqmnKDpFVqsAKV0w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIEZwirrr4/Ee+J13WppPXMy5Nzh9d2piAIesPWloONQLAiAYp1SHa+Yz3pNnbgTMQCWSKZRtHFV1Piha6sNOFMfE6w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.3.0-beta.24","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":7405901},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./crypto":{"types":"./dist/crypto.d.ts","import":"./dist/crypto.js","require":"./dist/crypto.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./client-proof":{"types":"./dist/client-proof.d.ts","import":"./dist/client-proof.js","require":"./dist/client-proof.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"gitHead":"b93422476778201b8f076bf95cea0f01faab771b","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","prepublishOnly":"pnpm run clean && pnpm run build","publish:latest":"node ../../scripts/publish-package.mjs latest","test:integration":"vitest run src/__tests__/integration/","export:mobile-contract":"tsx scripts/export-mobile-contract.ts"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"12.0.2","description":"Authentication for a Next.js full-stack app: sessions, social login, OAuth, RBAC and admin roles, without assembling an auth stack yourself","directories":{},"_nodeVersion":"22.23.2","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7","@simplewebauthn/server":"^14.0.1","@simplewebauthn/browser":"^14.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","hono":"^4.13.5","next":"^16.3.3","spfn":"workspace:*","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/mcp":"workspace:*","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"workspace:*","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^16.3.3","@spfn/core":">=0.3.0-beta.8 <0.4.0","drizzle-orm":">=1.0.0-rc.4 <2","@spfn/notification":">=0.2.0-beta.5 <0.3.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.3.0-beta.24_1789783891295_0.15981767646649714","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-beta.25":{"name":"@spfn/auth","version":"0.3.0-beta.25","keywords":["spfn","auth","authentication","authorization","rbac","access-control","nextjs","typescript","oauth","social-login","session","ai-coding-agent"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/auth@0.3.0-beta.25","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"4652d940054076e1a0570e5102a8e7efb7b2605c","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.3.0-beta.25.tgz","fileCount":85,"integrity":"sha512-UEgvS921SrYewRvozKAln7vRGo9RMZLwqxkpntfPv8eNwl9OXA45avhPsgV9naudDLFuWWr6TB8yYcOiq5XgUA==","signatures":[{"sig":"MEUCIQCcJP9aiAs30HP4a2AK6u7WnxHB8q/If2UWFKDmbVuejQIgbwztiEIlWIpzmg/KlxeVObNeOMmIYllWvzH68e589XM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIG3Ok46owHT9Ha3gl895BJm97Aq7C/noZXmqUlzRBA7aAiEAs8RYwmXLpaktyphVZKZKYfOQEmUyeiVEM8kbVe3LPwo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.3.0-beta.25","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":7778969},"main":"./dist/index.js","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./crypto":{"types":"./dist/crypto.d.ts","import":"./dist/crypto.js","require":"./dist/crypto.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./client-proof":{"types":"./dist/client-proof.d.ts","import":"./dist/client-proof.js","require":"./dist/client-proof.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"gitHead":"35e3f9a9db2ca9cacef68e63d4c8194cf57a0afe","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","prepublishOnly":"pnpm run clean && pnpm run build","publish:latest":"node ../../scripts/publish-package.mjs latest","test:integration":"vitest run src/__tests__/integration/","export:mobile-contract":"tsx scripts/export-mobile-contract.ts"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"12.0.2","description":"Authentication for a Next.js full-stack app: sessions, social login, OAuth, RBAC and admin roles, without assembling an auth stack yourself","directories":{},"_nodeVersion":"22.23.2","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7","@simplewebauthn/server":"^14.0.1","@simplewebauthn/browser":"^14.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","hono":"^4.13.5","next":"^16.3.3","spfn":"workspace:*","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/mcp":"workspace:*","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"workspace:*","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^16.3.3","@spfn/core":">=0.3.0-beta.8 <0.4.0","drizzle-orm":">=1.0.0-rc.4 <2","@spfn/notification":">=0.2.0-beta.5 <0.3.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/auth_0.3.0-beta.25_1789800965333_0.05833321067930197","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-beta.26":{"_id":"@spfn/auth@0.3.0-beta.26","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"d387c3d2c9045144b46746641d91077544e74fc5","tarball":"https://registry.npmjs.org/@spfn/auth/-/auth-0.3.0-beta.26.tgz","fileCount":85,"integrity":"sha512-1p1ZfCciSmEBa/52XkisD1hK4dxxdf2AjCJKY3LC5EyTk5dGEEPj7e9NHyEnfDRZ/MZwLDlHdoyDj6njw0xA/Q==","signatures":[{"sig":"MEUCIAXpgKg20cxCrg7iEq2JPMg1j3dn0w16Ivjc60+2+nHqAiEArr+YrCIHGH/1pkS7Q0abCmf85KOUGiHq032c2usJMuQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIB+1O64ICSHqh9OG/cmSR3bUW5KpHVeUSipEYaOUvJLTAiBtCyd2mAD31KJcemwOwao+8Je0gzUAzmlJKVU4ZzFevw=="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fauth@0.3.0-beta.26","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":7781093},"main":"./dist/index.js","name":"@spfn/auth","spfn":{"schemas":["./dist/server/entities/*.js"],"migrations":{"dir":"./migrations"},"setupMessage":"  📚 Next steps:\n    1. Add lifecycle: .lifecycle(createAuthLifecycle()) in server.config.ts\n    2. Register router: .packages([authRouter]).use([authenticate]) in router.ts\n    3. Add interceptor: import '@spfn/auth/nextjs/api' in RPC proxy route\n    4. Set env vars: SPFN_AUTH_SESSION_SECRET (.env.local), SPFN_AUTH_VERIFICATION_TOKEN_SECRET (.env.server)\n    5. Run migrations: pnpm spfn db migrate\n    6. Full guide: https://spfn.dev/docs/guides/authentication"},"type":"module","types":"./dist/index.d.ts","author":{"name":"Ray Im","email":"rayim@fxy.global"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js","require":"./dist/config.js"},"./crypto":{"types":"./dist/crypto.d.ts","import":"./dist/crypto.js","require":"./dist/crypto.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js","require":"./dist/errors.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"},"./nextjs/api":{"types":"./dist/nextjs/api.d.ts","import":"./dist/nextjs/api.js","require":"./dist/nextjs/api.js"},"./client-proof":{"types":"./dist/client-proof.d.ts","import":"./dist/client-proof.js","require":"./dist/client-proof.js"},"./nextjs/client":{"types":"./dist/nextjs/client.d.ts","import":"./dist/nextjs/client.js","require":"./dist/nextjs/client.js"},"./nextjs/server":{"types":"./dist/nextjs/server.d.ts","import":"./dist/nextjs/server.js","require":"./dist/nextjs/server.js"}},"gitHead":"94883ef049c187ca362501827a275fa3e91a953c","license":"MIT","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup && tsup --config tsup.client.config.ts","clean":"rm -rf dist","watch":"tsup --watch","codegen":"spfn codegen run","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:unit":"vitest run src/__tests__/unit/","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","test:routes":"vitest src/server/routes","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","test:coverage":"vitest run --coverage","check:circular":"madge --circular --extensions ts src/","prepublishOnly":"pnpm run clean && pnpm run build","publish:latest":"node ../../scripts/publish-package.mjs latest","test:integration":"vitest run src/__tests__/integration/","export:mobile-contract":"tsx scripts/export-mobile-contract.ts"},"version":"0.3.0-beta.26","_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/auth#readme","keywords":["spfn","auth","authentication","authorization","rbac","access-control","nextjs","typescript","oauth","social-login","session","ai-coding-agent"],"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/auth"},"_npmVersion":"12.0.2","description":"Authentication for a Next.js full-stack app: sessions, social login, OAuth, RBAC and admin roles, without assembling an auth stack yourself","directories":{},"maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"_nodeVersion":"22.23.2","dependencies":{"jose":"^6.1.0","postgres":"^3.4.0","jsonwebtoken":"^9.0.2","@node-rs/bcrypt":"^1.10.7","@simplewebauthn/server":"^14.0.1","@simplewebauthn/browser":"^14.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","hono":"^4.13.5","next":"^16.3.3","spfn":"workspace:*","tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/mcp":"workspace:*","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","@spfn/notification":"workspace:*","@types/jsonwebtoken":"^9.0.6","@vitest/coverage-v8":"^4.0.6"},"peerDependencies":{"next":"^16.3.3","@spfn/core":">=0.3.0-beta.8 <0.4.0","drizzle-orm":">=1.0.0-rc.4 <2","@spfn/notification":">=0.2.0-beta.5 <0.3.0"},"peerDependenciesMeta":{"next":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/auth_0.3.0-beta.26_1789825490820_0.6983234536985397"}}},"time":{"created":"2025-11-05T11:29:40.945Z","modified":"2026-09-19T13:44:51.323Z","0.1.0-alpha.0":"2025-11-05T11:29:41.230Z","0.1.0-alpha.1":"2025-11-07T04:27:55.336Z","0.1.0-alpha.86":"2025-11-09T13:36:41.269Z","0.1.0-alpha.87":"2025-11-09T14:55:06.480Z","0.1.0-alpha.88":"2025-11-09T15:18:11.230Z","0.2.0-beta.1":"2025-12-08T04:25:25.147Z","0.2.0-beta.2":"2025-12-09T02:24:12.442Z","0.2.0-beta.3":"2025-12-09T02:31:22.326Z","0.2.0-beta.4":"2025-12-16T08:27:28.019Z","0.2.0-beta.5":"2025-12-16T09:10:37.650Z","0.2.0-beta.6":"2025-12-16T09:53:52.392Z","0.2.0-beta.8":"2025-12-19T04:39:27.510Z","0.2.0-beta.9":"2025-12-19T04:55:00.364Z","0.2.0-beta.10":"2025-12-19T05:01:37.421Z","0.2.0-beta.11":"2026-01-25T13:18:07.778Z","0.2.0-beta.12":"2026-01-27T03:03:30.841Z","0.2.0-beta.13":"2026-01-27T14:05:56.313Z","0.2.0-beta.14":"2026-01-27T14:32:58.364Z","0.2.0-beta.15":"2026-01-29T13:43:15.850Z","0.2.0-beta.16":"2026-01-29T14:40:14.080Z","0.2.0":"2026-01-29T15:09:40.546Z","0.2.0-beta.17":"2026-01-29T15:12:54.282Z","0.2.0-beta.18":"2026-02-16T11:01:09.431Z","0.2.0-beta.19":"2026-02-17T03:25:55.857Z","0.2.0-beta.20":"2026-02-17T09:23:01.812Z","0.2.0-beta.21":"2026-02-20T06:03:01.692Z","0.2.0-beta.22":"2026-02-22T05:06:14.441Z","0.2.0-beta.23":"2026-02-22T07:29:14.765Z","0.2.0-beta.24":"2026-02-22T09:35:28.594Z","0.2.0-beta.25":"2026-02-22T09:59:39.637Z","0.2.0-beta.26":"2026-02-23T08:00:24.596Z","0.2.0-beta.27":"2026-02-24T15:31:14.736Z","0.2.0-beta.28":"2026-02-25T12:50:47.406Z","0.2.0-beta.29":"2026-02-25T12:56:45.796Z","0.2.0-beta.30":"2026-02-25T13:04:18.333Z","0.2.0-beta.31":"2026-02-25T13:08:33.516Z","0.2.0-beta.32":"2026-02-25T13:43:28.974Z","0.2.0-beta.33":"2026-02-25T13:49:30.434Z","0.2.0-beta.34":"2026-03-03T05:33:10.164Z","0.2.0-beta.35":"2026-03-03T08:44:24.907Z","0.2.0-beta.36":"2026-03-04T13:38:58.687Z","0.2.0-beta.37":"2026-03-06T15:38:57.587Z","0.2.0-beta.38":"2026-03-06T15:53:24.826Z","0.2.0-beta.39":"2026-03-07T03:58:51.527Z","0.2.0-beta.40":"2026-03-07T15:21:05.317Z","0.2.0-beta.41":"2026-03-08T12:32:26.014Z","0.2.0-beta.42":"2026-03-08T13:30:36.492Z","0.2.0-beta.43":"2026-03-08T14:58:06.567Z","0.2.0-beta.44":"2026-03-08T15:19:09.073Z","0.2.0-beta.45":"2026-03-08T20:15:43.851Z","0.2.0-beta.46":"2026-03-11T09:21:14.361Z","0.2.0-beta.47":"2026-03-12T12:30:46.484Z","0.2.0-beta.48":"2026-03-12T13:56:10.433Z","0.2.0-beta.49":"2026-03-13T09:17:21.821Z","0.2.1":"2026-03-13T10:09:52.588Z","0.2.0-beta.50":"2026-03-13T10:11:15.963Z","0.2.0-beta.51":"2026-03-13T11:03:46.206Z","0.2.0-beta.52":"2026-03-17T11:58:40.477Z","0.2.0-beta.53":"2026-03-17T15:00:28.336Z","0.2.0-beta.54":"2026-03-17T15:15:05.238Z","0.2.0-beta.55":"2026-03-20T06:17:24.459Z","0.2.0-beta.56":"2026-03-27T06:20:58.581Z","0.2.0-beta.57":"2026-03-30T12:57:19.860Z","0.2.0-beta.59":"2026-04-02T04:19:30.245Z","0.2.0-beta.60":"2026-04-21T01:37:15.162Z","0.2.0-beta.61":"2026-04-28T05:35:06.061Z","0.2.0-beta.62":"2026-05-22T08:34:16.777Z","0.2.0-beta.64":"2026-05-24T13:07:13.438Z","0.2.0-beta.65":"2026-05-25T16:05:52.603Z","0.2.0-beta.66":"2026-06-10T16:07:10.900Z","0.2.0-beta.67":"2026-06-16T09:03:18.623Z","0.2.0-beta.68":"2026-06-16T09:58:38.999Z","0.2.0-beta.69":"2026-06-27T08:24:57.929Z","0.2.0-beta.70":"2026-06-27T08:42:26.958Z","0.2.0-beta.71":"2026-06-27T13:41:45.229Z","0.2.0-beta.72":"2026-06-27T14:04:30.141Z","0.2.0-beta.74":"2026-07-02T11:22:57.047Z","0.2.0-beta.80":"2026-07-22T06:50:58.475Z","0.2.0-beta.81":"2026-07-22T14:40:04.665Z","0.2.0-beta.82":"2026-07-23T17:26:59.225Z","0.2.0-beta.83":"2026-08-01T13:54:30.988Z","0.2.0-beta.84":"2026-08-01T16:34:31.385Z","0.2.0-beta.85":"2026-08-02T07:07:42.454Z","0.2.0-beta.86":"2026-08-02T11:37:08.557Z","0.2.0-beta.87":"2026-08-03T15:42:32.115Z","0.2.0-beta.88":"2026-08-05T07:06:58.378Z","0.2.0-beta.89":"2026-08-05T10:20:53.470Z","0.2.0-beta.90":"2026-08-05T10:48:17.404Z","0.2.0-beta.91":"2026-08-06T07:21:40.950Z","0.3.0-beta.1":"2026-08-06T10:49:45.804Z","0.3.0-beta.2":"2026-08-08T14:21:18.301Z","0.3.0-beta.3":"2026-08-09T13:56:34.345Z","0.3.0-beta.4":"2026-08-10T07:38:01.425Z","0.3.0-beta.5":"2026-08-11T03:51:30.915Z","0.3.0-beta.6":"2026-08-14T04:27:09.290Z","0.3.0-beta.7":"2026-09-01T07:41:13.712Z","0.3.0-beta.8":"2026-09-02T02:17:59.039Z","0.3.0-beta.9":"2026-09-04T07:28:15.850Z","0.3.0-beta.10":"2026-09-06T08:17:14.814Z","0.3.0-beta.11":"2026-09-06T09:51:53.550Z","0.3.0-beta.12":"2026-09-07T01:48:21.013Z","0.3.0-beta.13":"2026-09-07T03:15:56.255Z","0.3.0-beta.14":"2026-09-07T05:45:32.360Z","0.3.0-beta.15":"2026-09-07T06:31:47.881Z","0.3.0-beta.16":"2026-09-14T16:59:37.576Z","0.3.0-beta.17":"2026-09-15T05:26:22.707Z","0.3.0-beta.18":"2026-09-18T07:31:11.181Z","0.3.0-beta.19":"2026-09-18T13:26:21.994Z","0.3.0-beta.20":"2026-09-18T14:19:50.165Z","0.3.0-beta.21":"2026-09-18T15:59:02.550Z","0.3.0-beta.22":"2026-09-18T16:50:37.071Z","0.3.0-beta.23":"2026-09-18T18:41:50.970Z","0.3.0-beta.24":"2026-09-19T02:11:31.526Z","0.3.0-beta.25":"2026-09-19T06:56:05.440Z","0.3.0-beta.26":"2026-09-19T13:44:50.936Z"},"bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","homepage":"https://github.com/fxylabs/spfn/tree/main/packages/auth#readme","keywords":["spfn","auth","authentication","authorization","rbac","access-control","nextjs","typescript","oauth","social-login","session","ai-coding-agent"],"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/auth"},"description":"Authentication for a Next.js full-stack app: sessions, social login, OAuth, RBAC and admin roles, without assembling an auth stack yourself","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"readme":"# @spfn/auth\n\n> **Two applications' worth of auth, in one package**\n\nNothing ships until people can sign in. `@spfn/auth` clears that gate twice over — once\nfor the people who use your product, and once for the people who operate it.\n\n- **For your users** — registration, password and OTP login, social sign-in, sessions,\n  registered devices, and account deletion with a recovery window.\n- **For your operators** — admin accounts seeded from the environment, roles and\n  permissions enforced on every route, invitations, and role administration your\n  superadmins can change at runtime.\n\nThe second half is what usually becomes a second application: an admin dashboard with its\nown auth, its own screens, and its own maintenance, growing for as long as the product\ndoes. Attach [`@spfn/mcp`](../mcp/README.md) instead and those operations become tools an\nAI agent runs, gated by the same roles — see\n[Can I operate the app without building an admin dashboard?](#can-i-operate-the-app-without-building-an-admin-dashboard).\n\nUnderneath: asymmetric client-signed JWTs (ES256/RS256), OTP verification, OAuth 2.0\nthrough a pluggable provider registry (Google, GitHub, Kakao and Naver built in), session\ncookies for Next.js, and runtime RBAC. Routes mount under `/_auth/*` and are reached\nthrough a typed `authApi` client. Requires `@spfn/core`; Next.js is an optional peer\n(`^16.3.3`).\n\n## Install\n\n```bash\npnpm add @spfn/auth drizzle-orm@1.0.0-rc.4\n```\n\n`@simplewebauthn/server` and `@simplewebauthn/browser` come along as dependencies —\n[passkeys](#passkeys-webauthn) need them, and standards conformance is the whole risk there.\nThe browser half is bundled into the `./client` entry rather than marked external, so nothing\nin your app has to know about it.\n\n## Import paths\n\nEntry points (from `package.json` `exports`). Picking the wrong one breaks the build —\n`/server`, `/client-proof` and `/nextjs/*` pull in Node code and must never reach the browser bundle.\n\n```typescript\nimport { authApi, authRouteMap }      from '@spfn/auth';          // isomorphic: client + route map + types/constants\nimport { authRouter, authenticate }   from '@spfn/auth/server';   // SERVER ONLY: router, services, repos, middleware, helpers\nimport { /* hooks/components */ }      from '@spfn/auth/client';   // browser only (currently empty — WIP)\nimport { env, envSchema }             from '@spfn/auth/config';    // validated env proxy + schema\nimport { InvalidCredentialsError }    from '@spfn/auth/errors';    // error classes + authErrorRegistry\nimport '@spfn/auth/nextjs/api';                                    // SERVER: auto-registers RPC interceptors (side-effect)\nimport { RequireAuth, getSession }    from '@spfn/auth/nextjs/server'; // SERVER: RSC guards, session helpers, OAuth handler\nimport { OAuthCallback }              from '@spfn/auth/nextjs/client';  // 'use client' OAuth callback component\nimport { createClientProofDevHandler } from '@spfn/auth/client-proof';  // SERVER: mobile clientProofV1 profile (see below)\n```\n\n> Database entities (`users`, `userPublicKeys`, …) and all services/repositories are exported\n> from `@spfn/auth/server`, **not** from the root `@spfn/auth`.\n\n## How do I add auth to an SPFN app?\n\nFour edits in the consuming app. All four are required for the flow to work end to end.\n\n### 1. Lifecycle — `server.config.ts`\n\n`createAuthLifecycle()` validates env before DB connect, then seeds admin accounts and\ninitializes RBAC after the DB is ready. Pass custom roles/permissions here (see RBAC below).\n\n```typescript\nimport { defineServerConfig } from '@spfn/core/server';\nimport { createAuthLifecycle } from '@spfn/auth/server';\nimport { appRouter } from './router';\n\nexport default defineServerConfig()\n    .port(8790)\n    .routes(appRouter)\n    .lifecycle(createAuthLifecycle())\n    .build();\n```\n\n### 2. Router + global middleware — `router.ts`\n\n`authRouter` (the package's `mainAuthRouter`) is merged via `.packages()`; `authenticate` is\napplied globally via `.use()`. Public routes opt out per-route with `.skip(['auth'])`.\n\n```typescript\nimport { defineRouter } from '@spfn/core/route';\nimport { authRouter, authenticate } from '@spfn/auth/server';\nimport { getStatus } from './routes/status';\n\nexport const appRouter = defineRouter({\n    getStatus,\n    // ...your routes\n})\n    .packages([authRouter])   // mounts /_auth/* and exposes routes on authApi\n    .use([authenticate]);     // global auth middleware\n\nexport type AppRouter = typeof appRouter;\n```\n\n### 3. Next.js interceptor — RPC proxy route\n\nThe interceptor handles session cookies, JWT signing, and key management automatically.\nImport it for its side-effect (it self-registers); it must run before the proxy is created.\n\n```typescript\n// app/api/rpc/[routeName]/route.ts\nimport '@spfn/auth/nextjs/api';        // side-effect: registers auth interceptors\nimport { createRpcProxy } from '@spfn/core/nextjs/server';\nimport { authRouteMap } from '@spfn/auth';\nimport { routeMap } from '@/generated/route-map';\n\nexport const { GET, POST } = createRpcProxy({ routeMap: { ...routeMap, ...authRouteMap } });\n```\n\n### 4. Run migrations\n\n```bash\npnpm spfn db generate   # only if entities changed\npnpm spfn db migrate\n```\n\nThe API client needs no auth-specific config. `authApi` is also available standalone:\n\n```typescript\nimport { authApi } from '@spfn/auth';\nconst session = await authApi.getAuthSession.call({});   // → GET /_auth/session\n```\n\n## Which environment variables do I need?\n\nSet across **two files** by audience. Server-only secrets go in `.env.server`; values the\nNext.js runtime needs (session cookie crypto) go in `.env.local`. Names only below — supply\nreal secret values out of band, never commit them.\n\n| Var | File | Required | Notes |\n|-----|------|----------|-------|\n| `DATABASE_URL` | both | yes | Postgres connection |\n| `SPFN_AUTH_VERIFICATION_TOKEN_SECRET` | `.env.server` | yes | OTP / verification token signing |\n| `SPFN_AUTH_SESSION_SECRET` | `.env.local` | yes | ≥32 chars, AES-256 session cookie encryption (validated: entropy/unique-char checks) |\n| `SPFN_AUTH_TOKEN_ENCRYPTION_KEYS` | `.env.server` | web OAuth, **MFA** | At-rest keyring: comma-separated `<keyId>:<base64-32-byte-key>` entries; first key is active. Required by any app offering a [second factor](#second-factor-mfa), social login or not |\n| `SPFN_API_URL` | `.env.local` | — | default `http://localhost:8790` |\n| `SPFN_AUTH_SESSION_TTL` | both | — | default `7d` (e.g. `7d`, `12h`, `45m`) |\n| `SPFN_AUTH_JWT_SECRET` / `SPFN_AUTH_JWT_EXPIRES_IN` | `.env.server` | — | legacy server-signed JWT mode only |\n| `SPFN_AUTH_BCRYPT_SALT_ROUNDS` | `.env.server` | — | default `12` (native bcrypt, off the event loop) |\n| `SPFN_AUTH_COOKIE_SECURE` | both | — | override Secure flag (defaults to `NODE_ENV==='production'`) |\n| `SPFN_AUTH_CSRF` | `.env.local` | — | `off` \\| `warn` \\| `enforce`; unset behaves as `warn` — see [CSRF protection](#csrf-protection) |\n| `SPFN_AUTH_ADMIN_*` | `.env.server` | — | admin seeding (see below) |\n| `SPFN_AUTH_GOOGLE_CLIENT_ID` / `_CLIENT_SECRET` | `.env.server` | — | enables Google OAuth when both set |\n| `SPFN_AUTH_GOOGLE_SCOPES` | `.env.server` | — | comma-separated; default `email,profile` |\n| `SPFN_AUTH_GOOGLE_REDIRECT_URI` | `.env.server` | — | default `{NEXT_PUBLIC_SPFN_APP_URL\\|\\|SPFN_APP_URL}/_auth/oauth/google/callback`; an override must stay on the web app origin at that path and is **checked at boot** — see [OAuth callback origin](#oauth-callback-origin-web-app-host--rewrite) |\n| `SPFN_AUTH_KAKAO_CLIENT_ID` / `_CLIENT_SECRET` | `.env.server` | — | REST API key enables Kakao Login; secret is included when configured |\n| `SPFN_AUTH_KAKAO_ADMIN_KEY` | `.env.server` | — | app admin key; required to verify the Kakao User Unlinked webhook |\n| `SPFN_AUTH_KAKAO_SCOPES` / `_REDIRECT_URI` | `.env.server` | — | default scope `account_email`; callback `/_auth/oauth/kakao/callback` on the web app origin, **checked at boot** — see [OAuth callback origin](#oauth-callback-origin-web-app-host--rewrite) |\n| `SPFN_AUTH_NAVER_CLIENT_ID` / `_CLIENT_SECRET` | `.env.server` | — | both values enable Naver Login |\n| `SPFN_AUTH_NAVER_REDIRECT_URI` | `.env.server` | — | default `{NEXT_PUBLIC_SPFN_APP_URL\\|\\|SPFN_APP_URL}/_auth/oauth/naver/callback`; an override must stay on the web app origin at that path and is **checked at boot** — see [OAuth callback origin](#oauth-callback-origin-web-app-host--rewrite) |\n| `SPFN_AUTH_GITHUB_CLIENT_ID` / `_CLIENT_SECRET` | `.env.server` | — | both values enable GitHub OAuth |\n| `SPFN_AUTH_GITHUB_SCOPES` / `_REDIRECT_URI` | `.env.server` | — | default scopes `read:user,user:email`; callback `/_auth/oauth/github/callback` on the web app origin, **checked at boot** — see [OAuth callback origin](#oauth-callback-origin-web-app-host--rewrite) |\n| `SPFN_AUTH_OAUTH_CALLBACK_ORIGIN_CHECK` | `.env.server` | — | `off` disables the boot check of the four `_REDIRECT_URI` overrides; any other value (unset included) runs it — see [OAuth callback origin](#oauth-callback-origin-web-app-host--rewrite) |\n| `SPFN_AUTH_GOOGLE_NATIVE_CLIENT_IDS` | `.env.server` | — | comma-separated client IDs accepted as native id_token audience (iOS/Android/web); enables Google native sign-in |\n| `SPFN_AUTH_APPLE_CLIENT_IDS` | `.env.server` | — | comma-separated Apple client IDs (bundle ID / Services ID); enables Apple native sign-in |\n| `SPFN_AUTH_KAKAO_NATIVE_CLIENT_IDS` | `.env.server` | — | comma-separated Kakao app keys accepted as native id_token audience (native app key); `SPFN_AUTH_KAKAO_CLIENT_ID` is also accepted, so either one enables Kakao native sign-in |\n| `SPFN_AUTH_NAVER_NATIVE_CLIENT_IDS` | `.env.server` | — | comma-separated Naver client IDs accepted as native id_token audience. `SPFN_AUTH_NAVER_CLIENT_ID` is also accepted, so this is only needed for a separate app application |\n| `SPFN_AUTH_OAUTH_SUCCESS_URL` | `.env.server` | — | default `/auth/callback` |\n| `SPFN_AUTH_OAUTH_ERROR_URL` | `.env.server` | — | default `/auth/error?error={error}` |\n| `SPFN_AUTH_RESERVED_USERNAMES` / `_USERNAME_MIN_LENGTH` / `_USERNAME_MAX_LENGTH` | `.env.server` | — | username rules |\n| `SPFN_AUTH_SIGNUP_LINK_TTL_MINUTES` / `_SETUP_TTL_MINUTES` | `.env.server` | — | defaults `30` / `15` — see [Verified-email signup](#verified-email-signup) |\n| `SPFN_AUTH_SIGNUP_CONFIRM_PATH` | `.env.server` | — | default `/signup/confirm`; the page in your app the emailed link opens |\n| `SPFN_AUTH_PASSWORD_RESET_LINK_TTL_MINUTES` / `_SETUP_TTL_MINUTES` | `.env.server` | — | defaults `30` / `15` — see [Password reset](#password-reset-verified-email) |\n| `SPFN_AUTH_PASSWORD_RESET_CONFIRM_PATH` | `.env.server` | — | default `/password/reset`; the page in your app the emailed link opens |\n| `SPFN_AUTH_REVOKE_ALL_LINK_TTL_MINUTES` | `.env.server` | — | default `30` — see [The sign-out-everywhere link](#the-sign-out-everywhere-link) |\n| `SPFN_AUTH_REVOKE_ALL_CONFIRM_PATH` | `.env.server` | — | default `/account/revoke-all`; the page in your app the link opens |\n| `SPFN_AUTH_LINK_MAIL_DELIVERY` | `.env.server` | — | `auto` (default) \\| `inline` \\| `queued`; who sends signup-link, reset and account-exists mail — see [Link mail delivery](#link-mail-delivery) |\n| `SPFN_AUTH_PASSKEY_RP_ID` / `_RP_NAME` / `_ORIGINS` | `.env.server` | — | relying party for passkeys; defaults derive from `{NEXT_PUBLIC_SPFN_APP_URL\\|\\|SPFN_APP_URL}` and are **checked at boot** — see [Passkeys](#passkeys-webauthn) |\n| `SPFN_AUTH_PASSKEY_USER_VERIFICATION` | `.env.server` | — | `preferred` (default) or `required`; `discouraged` refuses boot |\n| `SPFN_AUTH_PASSKEY_CHALLENGE_TTL_SECONDS` / `_RECENT_AUTH_MINUTES` | `.env.server` | — | defaults `300` / `10` — see [Passkeys](#passkeys-webauthn) |\n| `SPFN_AUTH_MFA_ISSUER` | `.env.server` | — | name the authenticator app files the account under; defaults to the passkey relying-party name, then the app URL host — see [Second factor](#second-factor-mfa) |\n| `SPFN_AUTH_MFA_STEP_UP_MINUTES` | `.env.server` | — | default `10`; how recently an enrolled account's device must have proved its second factor for a sensitive change — see [Second factor](#second-factor-mfa) |\n| `SPFN_AUTH_MFA_CHALLENGE_TTL_MINUTES` | `.env.server` | — | default `10`; how long a new-device step-up challenge stays spendable — see [Step-up on a new device](#step-up-on-a-new-device) |\n| `SPFN_AUTH_MFA_CONFIRM_PATH` | `.env.server` | — | default `/auth/mfa`; app page the OAuth callback handler sends a browser to when a social sign-in needs a second factor |\n| `SPFN_AUTH_BOUND_KEY_TTL_HOURS` | `.env.server` | — | default `24`; how long a passkey-bound session key lives — see [Session binding](#session-binding) |\n| `SPFN_AUTH_BOUND_KEY_RENEW_GRACE_HOURS` | `.env.server` | — | default `168`; how long past expiry a bound key may still be renewed. Past it, sign in again |\n| `SPFN_AUTH_CONCURRENT_USE_WINDOW_MS` | `.env.server` | — | default `300000`; how close two sightings from two addresses must be to raise `concurrentUseAtMillis` |\n| `SPFN_AUTH_SESSION_RENEW_PATH` | `.env.local` | — | default `/auth/renew`; the page `RequireAuth` sends a bound session whose key ran out |\n| `NEXT_PUBLIC_SPFN_API_URL` / `NEXT_PUBLIC_SPFN_APP_URL` | `.env.local` | — | browser-facing URLs for OAuth redirects |\n\nRead validated values via `import { env } from '@spfn/auth/config'` (a proxy validated at\nstartup). `envSchema` carries descriptions/defaults.\n\n### Admin seeding\n\n`createAuthLifecycle()` creates admin accounts on startup from env, in priority order. Seeded\naccounts are auto email-verified, `status: 'active'`, `passwordChangeRequired: true`.\n\n- **JSON (recommended):** `SPFN_AUTH_ADMIN_ACCOUNTS` — array of `{email, password, role?, phone?, passwordChangeRequired?}`. `role` defaults to `user` (`user` | `admin` | `superadmin`).\n- **CSV:** `SPFN_AUTH_ADMIN_EMAILS` + `SPFN_AUTH_ADMIN_PASSWORDS` + `SPFN_AUTH_ADMIN_ROLES`.\n- **Single (legacy):** `SPFN_AUTH_ADMIN_EMAIL` + `SPFN_AUTH_ADMIN_PASSWORD` → always `superadmin`.\n\n## Routes\n\nAll routes mount at `/_auth/*` and are reached through `authApi.<name>.call({ body })`. Public\nroutes use `.skip(['auth'])`; the rest require `Authorization: Bearer <client-signed-jwt>`.\n\n| `authApi` method | HTTP | Auth | Purpose |\n|------------------|------|------|---------|\n| `sendVerificationCode` | POST `/_auth/codes` | public | send 6-digit OTP |\n| `verifyCode` | POST `/_auth/codes/verify` | public | verify OTP → verification token |\n| `register` | POST `/_auth/register` | public | create user + register public key |\n| `requestSignupLink` | POST `/_auth/signup/email` | public | email a one-time signup confirmation link — see [Verified-email signup](#verified-email-signup) |\n| `confirmSignupLink` | POST `/_auth/signup/email/confirm` | public | exchange the link for a password-setup session |\n| `completeSignup` | POST `/_auth/signup/password` | setup session | set the password, which creates the account and signs in |\n| `requestPasswordReset` | POST `/_auth/password/reset` | public | email a one-time password reset link — see [Password reset](#password-reset-verified-email) |\n| `confirmPasswordReset` | POST `/_auth/password/reset/confirm` | public | exchange the link for a password-setup session |\n| `completePasswordReset` | POST `/_auth/password/reset/complete` | setup session | set the new password, sign every other device out, sign this one in |\n| `login` | POST `/_auth/login` | public | password login + new session key |\n| `startDeviceAuth` | POST `/_auth/device/start` | public | begin a device-code login — see [Device-code login](#device-code-login) |\n| `pollDeviceAuth` | POST `/_auth/device/poll` | public | ask whether the request was answered; the approved answer *is* the login |\n| `getDeviceAuthInfo` | POST `/_auth/device/info` | yes | what device is asking, so the approval screen can show it |\n| `approveDeviceAuth` | POST `/_auth/device/approve` | yes | let the waiting device in |\n| `denyDeviceAuth` | POST `/_auth/device/deny` | yes | refuse it |\n| `passkeyRegisterOptions` | POST `/_auth/passkeys/register/options` | yes | begin enrolling a passkey — see [Passkeys](#passkeys-webauthn) |\n| `passkeyRegisterVerify` | POST `/_auth/passkeys/register/verify` | yes | verify the attestation and keep the credential |\n| `passkeyLoginOptions` | POST `/_auth/passkeys/login/options` | public | begin a passkey sign-in; takes no identifier |\n| `passkeyLoginVerify` | POST `/_auth/passkeys/login/verify` | public | verify the assertion; answers exactly as `login` |\n| `listPasskeys` | POST `/_auth/passkeys/list` | yes | the caller's enrolled passkeys |\n| `renamePasskey` | POST `/_auth/passkeys/rename` | yes | rename one |\n| `revokePasskey` | POST `/_auth/passkeys/revoke` | yes | retire one (refused if it is the last way in) |\n| `mfaTotpEnroll` | POST `/_auth/mfa/totp/enroll` | yes | mint a TOTP secret — see [Second factor](#second-factor-mfa) |\n| `mfaTotpConfirm` | POST `/_auth/mfa/totp/confirm` | yes | spend the first code; answers the ten recovery codes |\n| `mfaDisable` | POST `/_auth/mfa/disable` | yes + step-up | remove the second factor (204 either way) |\n| `mfaMarkPasskey` | POST `/_auth/mfa/passkey/mark` | yes + step-up | mark or unmark a passkey as the second factor |\n| `mfaRegenerateRecoveryCodes` | POST `/_auth/mfa/recovery/regenerate` | yes + step-up | ten fresh codes; every earlier one stops verifying |\n| `mfaStatus` | GET `/_auth/mfa/status` | yes | `{ enrolled, methods, recoveryCodesRemaining }`; no secret |\n| `mfaStepUp` | POST `/_auth/mfa/step-up` | yes | re-prove the second factor on this device |\n| `mfaStepUpOptions` | POST `/_auth/mfa/step-up/options` | yes | options for a step-up by passkey |\n| `mfaVerify` | POST `/_auth/mfa/verify` | public | finish a sign-in that answered `202 { mfaRequired: true }` — see [Step-up on a new device](#step-up-on-a-new-device) |\n| `mfaVerifyOptions` | POST `/_auth/mfa/verify/options` | public | options for finishing that sign-in with a passkey |\n| `logout` | POST `/_auth/logout` | yes | revoke current key |\n| `rotateKey` | POST `/_auth/keys/rotate` | yes | rotate public key before 90-day expiry |\n| `listKeys` | POST `/_auth/keys/list` | yes | the caller's registered devices — see [Registered devices](#registered-devices-key-management) |\n| `revokeKey` | POST `/_auth/keys/revoke` | yes | sign one device out |\n| `revokeAllKeys` | POST `/_auth/keys/revoke-all` | yes | sign every device out (spares the caller by default) |\n| `setSessionBinding` | POST `/_auth/session/binding` | yes | turn session binding on or off — see [Session binding](#session-binding) |\n| `getSessionBinding` | GET `/_auth/session/binding` | yes | whether it is on, and when this session's key expires |\n| `sessionBindingDisableOptions` | POST `/_auth/session/binding/disable/options` | yes | the challenge that proves it is you before turning it off |\n| `sessionRenewOptions` | POST `/_auth/session/renew/options` | public | begin renewing a bound session key |\n| `sessionRenewVerify` | POST `/_auth/session/renew/verify` | public | verify the assertion; answers exactly as `login` |\n| `changePassword` | PUT `/_auth/password` | yes | change password |\n| `getAuthSession` | GET `/_auth/session` | yes | current session/user |\n| `issueOneTimeToken` | POST | yes | short-lived token (e.g. SSE handshake) |\n| `checkUsername` / `updateUsername` / `updateLocale` | — | mixed | username availability/update, locale |\n| `getUserProfile` / `updateUserProfile` | — | yes | profile read/update |\n| `createInvitation` / `acceptInvitation` / `listInvitations` / `cancelInvitation` / `resendInvitation` / `deleteInvitation` / `getInvitation` | — | mixed | invitation flow |\n| `requestAccountDeletion` | POST `/_auth/deletion/request` | yes | request account deletion (re-auth gated) — see [Account Deletion & Recovery](#account-deletion--recovery) |\n| `cancelAccountDeletion` | POST `/_auth/deletion/cancel` | public | cancel a pending deletion (credential-based recovery) |\n| `listRoles` / `createAdminRole` / `updateAdminRole` / `deleteAdminRole` / `updateUserRole` | — | superadmin | admin RBAC management |\n| OAuth routes | — | — | see OAuth section |\n| `registerOAuth2Client` / `getOAuth2Authorize` / `createOAuth2AuthorizationCode` / `oauth2Token` / `oauth2Revoke` / `listOAuth2Grants` / `revokeOAuth2Grant` | `/_auth/oauth2/*` | mixed | OAuth 2.1 authorization server for MCP clients — see [Authorization server for MCP clients](#authorization-server-for-mcp-clients). 404 unless configured |\n\nThere is deliberately **no account-existence endpoint**. `POST /_auth/exists` was removed\nbecause it answered \"does this account exist\" directly, which is user enumeration; the\nlogin path is timing-equalized for the same reason. Do not reintroduce one without\nrevisiting that decision.\n\nAuth uses **asymmetric, client-signed JWTs**: the client generates an ES256/RS256 keypair,\nsends the public key on register/login, signs request JWTs locally, and the server verifies\nwith the stored public key (`keyId` carried in the JWT). The server never holds a private key.\nKeys expire after 90 days — rotate with `rotateKey`, which starts the ninety days again. A key\nbound to a passkey is the one exception: it lives for hours and a rotation carries its expiry over\nrather than resetting it, because only `session/renew` may move that window — see\n[Session binding](#session-binding).\n\n### Migration — narrow a sign-in on `mfaRequired` before reading `userId`\n\n**Breaking in `@spfn/auth` 0.3.0-beta.25 / mobile contract 0.13.0.** A sign-in no\nlonger always answers with a session. An account that enrolled a second factor and\nsigns in from a device the account has never seen gets `202` and a challenge\ninstead, and the key it registered stays inactive until that challenge is spent —\nsee [Second factor](#second-factor-mfa).\n\nSo `LoginResult` carries one new required field, `mfaRequired`, and every field it\ncarried before is now optional. It is still **one** type rather than a union:\n`authApi.login` infers its result from that declaration, and a union would make\nevery `result.userId` in your app a compile error with no way to narrow it that\nwas available in 0.12.x. Narrow on the discriminant:\n\n```typescript\nconst result = await authApi.login.call({ body: { email, password } });\n\nif (result.mfaRequired)\n{\n    // No session yet. result.challenge is { secret, expiresAtMillis }.\n    router.push('/auth/mfa');\n\n    return;\n}\n\nconsole.log(result.userId); // string, from here on\n```\n\nThe same reshape applies to `authApi.oauthNative` (`OauthNativeResult`), to\n`completePasswordReset`, and to the approved branch of `pollDeviceAuth` — which\ncarries `mfaRequired: false` and can never carry anything else, since a\ndevice-code approval is itself a second factor.\n\nNothing changes for an account with no second factor: every one of those calls\nanswers `200` with `mfaRequired: false` and exactly the fields it always did.\nIn the Next.js proxy nothing changes for your code at all — the interceptors\nhandle the 202 and the pending cookie themselves.\n\n### Verified-email signup\n\nA second way in, alongside the six-digit code. The address is proven before a password\nexists, so nothing is stored for someone who never confirms.\n\n```\nrequest  → a one-time link is emailed\nconfirm  → the link becomes a short-lived, HttpOnly password-setup session\npassword → the account is created, the device registered, the user signed in\n```\n\nThe six-digit-code path (`sendVerificationCode` → `verifyCode` → `register`) is unchanged.\nOffer whichever suits your product, or both.\n\n**1 — request the link.** The response is identical whether or not the address already has\nan account, so it cannot be used to probe for accounts. When one exists, the owner gets a\n\"you already have an account\" notice instead of a usable link.\n\n```typescript\nawait authApi.requestSignupLink.call({\n    body: { email: 'user@example.com', returnPath: '/welcome' },   // returnPath optional\n});\n// → { success: true, expiresAt }\n```\n\nCalling it again is how a resend works: it invalidates the previous link and any setup\nsession opened from it. `returnPath` must be a path inside your app — absolute URLs,\n`//host`, and `..` are refused, so the link cannot become an open redirect.\n\nThe mail leaves through the `auth.link-mail` job when pg-boss is initialised — register\n`authJobRouter` — so neither branch of this endpoint waits on a mail provider; see\n[Link mail delivery](#link-mail-delivery).\n\n**2 — the page the link opens.** The email points at a page in *your* app\n(`SPFN_AUTH_SIGNUP_CONFIRM_PATH`, default `/signup/confirm`), not at an API route. That page\nreads the token from the query string and posts it:\n\n```typescript\n'use client';\n\nconst token = useSearchParams().get('token');\n\nconst { email, returnPath } = await authApi.confirmSignupLink.call({ body: { token } });\n\n// Drop the token from the URL so it does not linger in history or a Referer header.\nwindow.history.replaceState({}, '', window.location.pathname);\n```\n\nThe setup session comes back as an HttpOnly cookie — the proxy interceptor moves it there\nand strips it from the response body, so page script never holds it. Serve this page with\n`Referrer-Policy: no-referrer`.\n\n**3 — set the password.** This is the step that creates the account. The setup cookie\nauthorizes it; the device keypair is injected by the interceptor exactly as it is for\n`register`.\n\n```typescript\nawait authApi.completeSignup.call({ body: { password } });\n// → { userId, publicId, email }  + session cookie, same as register\n```\n\nCreating the user, registering the device key, and marking the setup session used all commit\ntogether. A password that fails the strength policy leaves the session usable, so the user\nretypes rather than requesting a fresh email.\n\n**Settings.**\n\n| Variable | Default | Meaning |\n|----------|---------|---------|\n| `SPFN_AUTH_SIGNUP_LINK_TTL_MINUTES` | `30` | how long the emailed link works |\n| `SPFN_AUTH_SIGNUP_SETUP_TTL_MINUTES` | `15` | how long the password-setup session works |\n| `SPFN_AUTH_SIGNUP_CONFIRM_PATH` | `/signup/confirm` | the page in your app the link opens |\n\nThe link URL is built on `NEXT_PUBLIC_SPFN_APP_URL || SPFN_APP_URL`, the same resolution the\nOAuth callbacks use. Delivery uses the `signup-link` template in `@spfn/notification` —\noverride it there to change the copy.\n\n**What is stored.** Only SHA-256 hashes of the link token and the setup secret, in\n`spfn_auth.signup_link_tokens`. Neither credential is recoverable from the database, and\nboth are one-time: a link opens one setup session, and a setup session sets one password.\n\n### Password reset (verified email)\n\nThe way back into an account whose password is gone, using the address the account already\nproved. Same three steps as the signup above, and the same posture on the two credentials.\n\n```\nrequest  → a one-time link is emailed\nconfirm  → the link becomes a short-lived, HttpOnly password-setup session\ncomplete → the new password is written, every other device is signed out, this one is signed in\n```\n\n**Who can reset.** An `active` account whose `emailVerifiedAt` is set **or** that already has\na password. The second half is what makes the rule work on accounts created before the\ncolumn was stamped: both register paths proved the address at signup. An OAuth-only account\nwhose provider reported the address unverified has neither and is excluded — for it, a reset\nwould be a way in built on an address nobody proved.\n\n**1 — request the link.** The response is identical for every input — same status, same two\nfields, same `expiresAt` arithmetic — and mail goes only to an account that can be reset, so\nneither the answer nor the mailbox reveals whether an address has an account here.\n\n```typescript\nawait authApi.requestPasswordReset.call({\n    body: { email: 'user@example.com', returnPath: '/account' },   // returnPath optional\n});\n// → { success: true, expiresAt }\n```\n\nCalling it again is how a resend works: it invalidates the previous link and any setup\nsession opened from it. `returnPath` must be a path inside your app — absolute URLs,\n`//host`, and `..` are refused, so the link cannot become an open redirect.\n\nThe mail leaves through the `auth.link-mail` job when pg-boss is initialised — register\n`authJobRouter` — so an address with an account and one without cost the same; see\n[Link mail delivery](#link-mail-delivery).\n\n**2 — the page the link opens.** The email points at a page in *your* app\n(`SPFN_AUTH_PASSWORD_RESET_CONFIRM_PATH`, default `/password/reset`), not at an API route.\nThat page reads the token from the query string and posts it:\n\n```typescript\n'use client';\n\nconst token = useSearchParams().get('token');\n\nconst { email, returnPath } = await authApi.confirmPasswordReset.call({ body: { token } });\n\n// Drop the token from the URL so it does not linger in history or a Referer header.\nwindow.history.replaceState({}, '', window.location.pathname);\n```\n\nThe setup session comes back as an HttpOnly cookie — the proxy interceptor moves it there\nand strips it from the response body, so page script never holds it. It is a cookie of its\nown, not the signup one, so neither secret is ever accepted by the other flow. Serve this\npage with `Referrer-Policy: no-referrer`.\n\n**3 — set the new password.** The setup cookie authorizes it; the device keypair is injected\nby the interceptor exactly as it is for `login`.\n\n```typescript\nawait authApi.completePasswordReset.call({ body: { password } });\n// → { userId, publicId, email }  + session cookie, same as login\n```\n\n**Every other device is signed out.** Completing a reset denies every pending device\nauthorization and revokes every active key, exactly as `changePassword` does — whoever was\nsigned in on the old password, including the person the reset was needed for, has to sign in\nagain. The browser that performed the reset is signed in on a fresh key registered after the\nrevocation, so it does not have to retype the new password. `emailVerifiedAt` is stamped if\nit was not already, `passwordChangeRequired` is cleared, and `auth.password.reset` is emitted\nafter commit.\n\nThe new hash, the revocations, the new device key and the completion mark commit together. A\npassword that fails the strength policy leaves the session usable, so the user retypes rather\nthan requesting a fresh email.\n\n**Settings.**\n\n| Variable | Default | Meaning |\n|----------|---------|---------|\n| `SPFN_AUTH_PASSWORD_RESET_LINK_TTL_MINUTES` | `30` | how long the emailed link works |\n| `SPFN_AUTH_PASSWORD_RESET_SETUP_TTL_MINUTES` | `15` | how long the password-setup session works |\n| `SPFN_AUTH_PASSWORD_RESET_CONFIRM_PATH` | `/password/reset` | the page in your app the link opens |\n\nThe link URL is built on `NEXT_PUBLIC_SPFN_APP_URL || SPFN_APP_URL`, the same resolution the\nsignup link uses. Delivery uses the `password-reset` template in `@spfn/notification` —\noverride it there to change the copy.\n\n**What is stored.** Only SHA-256 hashes of the link token and the setup secret, in\n`spfn_auth.password_reset_tokens`. Neither credential is recoverable from the database, and\nboth are one-time: a link opens one setup session, and a setup session sets one password.\nA separate table from `signup_link_tokens`, so a signup secret can never address a reset row.\n\n### Device-code login\n\nA way in for a device that has a screen but no comfortable keyboard — a TV, a console, a CLI\non a headless box. The new device shows a short code; the account owner types that code on a\ndevice that is already signed in.\n\n```typescript\n// On the new device — it has no key on file, so this call is public.\nconst { deviceCode, userCode, expiresAtMillis, intervalMillis } =\n    await authApi.startDeviceAuth.call({ body: {\n        publicKey, keyId, fingerprint, algorithm: 'ES256',\n        deviceName: 'Living room TV', platform: 'desktop',\n    } });\n\n// Show `userCode` (XXXX-XXXX) on this device's screen, then poll every intervalMillis.\nconst answer = await authApi.pollDeviceAuth.call({ body: { deviceCode } });\n// → { status: 'pending', intervalMillis }\n// → { status: 'approved', userId, publicId, email?, phone?, passwordChangeRequired }\n```\n\n```typescript\n// On the signed-in device — the user typed the code they read off the other screen.\nconst asking = await authApi.getDeviceAuthInfo.call({ body: { userCode } });\n// → { deviceName?, platform?, fingerprintPrefix, requestedAtMillis, expiresAtMillis }\n\nawait authApi.approveDeviceAuth.call({ body: { userCode } });   // or denyDeviceAuth\n```\n\n**There is no token handed over, because there is no token.** Every request in this system is\nsigned by the calling device's own key, so \"logging a device in\" means getting its public key\ninto `user_public_keys` under the right account — which is exactly what the winning poll does.\nThat is why the approved answer is the same shape `login` returns: from the client's side the\ntwo ways in are indistinguishable.\n\n- **Only ever show the code on the new device's screen.** The whole attack on this flow is\n  someone sending a victim a code and asking them to approve it — a support call, a chat\n  message, a \"verify your account\" email. A code that arrived any way other than off the\n  device in front of you is an attack. This is why `info` and `approve` answer with the\n  requesting device's name, platform and fingerprint prefix, and why an approval screen that\n  shows only the code is doing it wrong: it is asking the user to confirm a number they were\n  just told.\n- **The device code is stored only as a SHA-256 hash**, like the ops-token and signup-link\n  secrets. It is returned once. A dump of `spfn_auth.device_authorizations` does not let its\n  reader finish anyone's login.\n- **The user code is stored in the clear, and that is fine** — it authorizes nothing without\n  an approver who is already signed in. It is drawn from an alphabet with no `0`/`O` or\n  `1`/`I`/`L`, since it is read off one screen and typed on another.\n- **A decision is made once.** Approve and deny move the record from `pending` and nowhere\n  else, so a second approval, a deny after an approve, or two approvals racing each other all\n  get `DeviceAuthAlreadyHandledError` (409) — a refusal is never undone.\n- **The approval is one-shot.** The poll that registers the key spends the record in the same\n  statement that reads it, so of two polls arriving together exactly one registers the key and\n  the other is answered as if the code were unknown.\n- **A spent code and a code that never existed answer identically** (`DeviceAuthNotFoundError`,\n  404). Saying \"that one was real, but it is used up\" is the difference between guessing at\n  random and knowing a guess landed. Every route that accepts a code is rate limited for the\n  same reason: `start` and `poll` per IP, `info` / `approve` / `deny` per IP *and* per calling\n  account.\n- **Expiry outranks state.** A code that sat past its TTL is expired whatever it says, so an\n  approval nobody collected in time registers nothing. The TTL travels in the statement that\n  moves the record, not only in the read before it, so a code cannot be spent by a poll that\n  read it a moment before it died.\n- **A global revocation reaches the codes too.** `revoke-all`, a password change and a\n  deletion request each refuse the account's live device authorizations, so an approval nobody\n  collected cannot register a fresh key seconds after the user signed everything out — which\n  would hand one back to exactly the device they were cutting off. Revoking a single key,\n  logging out and rotating a key do not: those name one device, and the waiting one is not it.\n- **The poll re-checks the account.** It is a login, so it refuses a suspended or\n  pending-deletion account with the same errors `/_auth/login` does. Approval and collection\n  are separate moments, and what the account is when the key is registered is what counts.\n- **`start` bounds what it stores.** It is the one route that takes key material from a caller\n  who cannot authenticate, so `publicKey`, `keyId` and `fingerprint` carry length limits —\n  generous next to a real key (an RSA-2048 SPKI is 392 base64 characters against a 2048 limit)\n  and small next to the megabyte that would otherwise sit in a table no job clears.\n- **Clock skew cannot affect this.** Every timestamp in the decision is the server's. The\n  `expiresAtMillis` in the start response is for the waiting device's countdown display, and\n  nothing the client believes about the time reaches the server's judgement.\n\nTwo knobs, both announced to the waiting device in the start response and therefore resolved\nat lifecycle time rather than read per call:\n\n```typescript\ncreateAuthLifecycle({\n    deviceAuth: {\n        ttlMs: 10 * 60 * 1000,   // how long a code lives. default 10 minutes\n        intervalMs: 5000,        // poll interval the server asks for. default 5s\n    },\n})\n```\n\nNo job sweeps the table. Rows are judged by `expiresAt` whenever they are read or moved, so a\nstale row authorizes nothing; it only keeps its user code out of circulation, and 31⁸ codes do\nnot run out.\n\n### Registered devices (key management)\n\nA [passkey](#passkeys-webauthn) is **not** one of these keys: it is a credential that proves\nidentity at sign-in, after which an ordinary device key is registered exactly as a password\nlogin registers one.\n\nKeys are per-device, so a login never revokes the previous key and they accumulate on purpose.\n`listKeys` / `revokeKey` / `revokeAllKeys` are what let the account owner see what accumulated and\ncut off anything they no longer recognise.\n\nA key still waiting on a [second factor](#step-up-on-a-new-device) is in neither list. It\ncannot sign for anything, so it is not a device; and nobody signed it out, so it is not a\nrevoked one either. A global revocation deletes it outright rather than revoking it.\n\n```typescript\nconst { keys } = await authApi.listKeys.call({ body: {} });\n// → [{ keyId, deviceName?, platform?, algorithm, fingerprintPrefix, createdAtMillis,\n//      lastUsedAtMillis?, expiresAtMillis?, isExpired, isActive, revokedAtMillis?,\n//      registeredIp?, registeredUserAgent?, binding?, concurrentUseAtMillis? }]\n\nawait authApi.listKeys.call({ body: { includeRevoked: true } });   // also what was cut off\n```\n\nEvery moment is epoch milliseconds, not an ISO string — one representation across the whole\nsurface, so a generated Swift or Kotlin client reads an integer instead of choosing a date\nformatter. This changed in mobile contract 0.5.0; an app still reading `createdAt` moves to\n`createdAtMillis`.\n\n`algorithm` is the `KeyAlgorithm` enum from contract 0.6.0 rather than a bare string — the routes\nhave always constrained it to those values, and the contract had been understating the server. The\ndeclared values are the ones the server accepts and sends **now**: one can be added, and one can be\nwithdrawn for a weakness found later, so a generated client should be built to meet a value it does\nnot recognise rather than assume the set is closed.\n\n```typescript\nawait authApi.revokeKey.call({ body: { keyId } });            // → { keyId, selfRevoked }\nawait authApi.revokeAllKeys.call({ body: {} });               // other devices only\nawait authApi.revokeAllKeys.call({ body: { includeCurrent: true } });   // everything\n```\n\n> **All three key-management operations are POST with their arguments in the body, deliberately.** The mobile auth\n> profile (clientProofV1) signs the request body, and `canonical-json` fixes exactly how those\n> bytes are written. A `GET` has no body to sign, and a value in the path has no such rule —\n> client and server could disagree on the signed string over percent-encoding, a trailing\n> slash, or a proxy rewrite alone, and the request would be refused with nothing in the logs\n> naming the cause. Proof-bearing auth operations are shaped this way; the unproven,\n> bodyless `core.time` synchronization prerequisite is the explicit exception.\n\n- **A key must be the type its algorithm names.** A P-256 SPKI declared `RS256`, an RSA key\n  declared `ES256`, and a curve other than P-256 declared `ES256` are each refused 400 with\n  `KeyAlgorithmMismatchError` on register, login, rotate and device start — the algorithm is\n  stored beside the key and read back at proof verification, so a mismatch accepted at\n  enrollment would surface only once the device already believed it was enrolled.\n- **The public key never leaves the server**, and the fingerprint is truncated to 8 characters.\n  The list exists to recognise a device and point at it; the full fingerprint is what a native\n  sign-in sends as its nonce, not a label.\n- **`isExpired` is computed, not stored.** Nothing flips `isActive` when the TTL runs out —\n  `authenticate` refuses the key at request time. A list that showed such a key as simply active\n  would report something the server does not act on.\n- **Revoking your own key is allowed.** It is this device's sign-out, which `logout` already does.\n  `selfRevoked` in the response tells the two cases apart.\n- **`revokeAllKeys` spares the calling device unless you ask otherwise**, so the common case is\n  \"sign out my other devices\". `includeCurrent: true` is the full sign-out — until now reachable\n  only as a side effect of changing a password, which nobody does for that reason.\n- **It also refuses device-code approvals still in flight**, in both modes, because an approved\n  code is a key that has not been handed out yet: the next poll would register a fresh active one\n  and undo the sign-out. `revokedCount` still counts keys only — a code nobody collected was\n  never a session. See [Device-code login](#device-code-login).\n- **A key id you do not own answers 404** (`KeyNotFoundError`). Every lookup is scoped by user, so\n  the answer is only ever \"not yours\" and reveals nothing about other accounts.\n- **Revocation takes effect immediately.** `authenticate` reads the key from the database on every\n  request with no cache in front of it.\n- **`includeRevoked: true` shows what was already cut off**, with `revokedAt`. The default is only\n  keys that can still sign.\n\nEvery path that registers a key (`register`, `login`, `rotateKey`, native OAuth) accepts optional\n`deviceName` (≤64 chars) and `platform` (`ios` / `android` / `web` / `desktop`). Both are display\nonly — nothing is authorized by them — and both are absent on keys registered before they existed.\nRotation carries the replaced key's label over unless the client sends a new one.\n\n- **`registeredIp` and `registeredUserAgent` are where the device came from**, captured once from\n  the request that registered the key and never updated — a device that later signs requests from\n  another network still shows the address it appeared from, which is what makes an entry the owner\n  does not recognise recognisable. Both are absent when the request resolved neither and on keys\n  registered before the columns existed; the literal string `unknown` is never stored. They are\n  unauthenticated display material, spoofable on any request that does not come through a verified\n  proxy, so render them and decide nothing by them. Mobile contract 0.11.0.\n- **`binding` says the key is tied to a passkey**, and is absent on every key that is not — which\n  is every key on an account that did not turn [session binding](#session-binding) on. A bound key\n  expires in hours and only a passkey assertion renews it.\n- **`concurrentUseAtMillis` is when this key was last seen from two addresses at once**, inside\n  `SPFN_AUTH_CONCURRENT_USE_WINDOW_MS`. Absent when that has never been observed, which is the\n  ordinary state. A signal to show, never a refusal — addresses change legitimately — and the\n  addresses themselves are never returned. Meaningful only where proxy-guard is configured. Mobile\n  contract 0.12.0.\n\nAll three are in the mobile contract (0.4.1) as `auth.keys.list` / `auth.keys.revoke` /\n`auth.keys.revokeAll`, so a generated mobile client reaches them the same way it reaches key\nrotation.\n\nA `keyId` is **single-use for its lifetime**: it is unique across all users and is never reissued\nonce revoked. A client that logs out, rotates, or is revoked must generate a **fresh keypair and\n`keyId`** for its next sign-in — resending the old one is refused with\n`KeyIdAlreadyRegisteredError` (409), on every path that registers a key. Re-registering a key that\nis still active is the one\nexception: it stays a no-op success, so repeated logins from the same device keep working, and an\nexpired-but-active key has its expiry extended by the sign-in that proved the identity again.\n\n### The sign-out-everywhere link\n\nThe key operations above all need a session, which is exactly what an owner who no longer trusts\nthe device in front of them does not want to use. `createRevokeAllLink` mints a one-time link your\napp mails to the address the account has already proved; opening it signs every device out with no\nsession at all.\n\n```typescript\nimport { createRevokeAllLink } from '@spfn/auth/server';\n\nconst { url, expiresAt } = await createRevokeAllLink(userId);          // default TTL 30 minutes\nconst short = await createRevokeAllLink(userId, { ttlMinutes: 10 });\n```\n\n**The link opens a page in your app** (`SPFN_AUTH_REVOKE_ALL_CONFIRM_PATH`, default\n`/account/revoke-all`), not an API route — the same shape the signup and reset links use. That page\nships with the package: mount it in one route file and you are done.\n\n```typescript\n// app/account/revoke-all/route.ts\nimport { createRevokeAllPageHandlers } from '@spfn/auth/nextjs/server';\n\nexport const { GET, POST } = createRevokeAllPageHandlers();\n```\n\n`GET` reads the token out of the query string, calls `confirmRevokeAllLink` and draws the expiry,\nthe device count and one button; `POST` calls `consumeRevokeAllLink` and reports the count it\nsigned out. Every answer carries `Cache-Control: no-store` and\n`Content-Security-Policy: frame-ancestors 'none'`, the token appears in a hidden field and the API\nbody and nowhere else, and every 404 is the same screen with no reason on it. Pass\n`render: (view: RevokeAllPageView) => string` to own the body at all three stages\n(`confirm` / `done` / `invalid`) while the handler keeps the status, the headers and the fields.\n\n- **There is no session on this page, so the CSRF token is not derived from one.** `GET` mints 32\n  random bytes, sets them in a cookie scoped to the page's own path (`HttpOnly`, `Secure` in\n  production, `SameSite=Strict`, 15 minutes) and mirrors them into the form; `POST` compares the\n  two before calling the API and expires the cookie afterwards. A custom `render` must echo\n  `view.fields` and `view.csrfToken` back as hidden inputs, or the form it draws cannot be\n  submitted.\n\n**An app that wants its own page** can call the two endpoints directly instead — they are public,\nand this is what the handlers above do:\n\n```typescript\n'use client';\n\nconst token = useSearchParams().get('token');\n\n// Describing the link changes nothing at all, so a mail scanner that prefetches\n// the page has not signed anybody out.\nconst { expiresAt, activeKeyCount } = await authApi.confirmRevokeAllLink.call({ body: { token } });\n\n// The button.\nconst { revokedCount } = await authApi.consumeRevokeAllLink.call({ body: { token } });\n```\n\n- **Every refusal is the same 404** (`RevokeAllLinkError`), with the same body: unknown, expired,\n  already spent, superseded by a newer link, issued against a key generation that has since moved,\n  or belonging to an account that is not active. Telling those apart would tell whoever holds a\n  random value that it named something real. 404 rather than the 401 the [password reset\n  link](#password-reset-verified-email) answers with, because there is no credential here to have\n  been wrong: the mailbox is the proof, and what arrives either names an outstanding link or names\n  nothing.\n- **The token travels in the request body, never in a path segment.** The request logger records\n  the path of every request, and so does whatever proxy sits in front of it.\n- **Your obligation, which this package cannot enforce:** the returned `url` carries the plaintext\n  token, because this flow sends no mail of its own. Do not log it, do not persist it, do not put\n  it in a job payload — hand it to the mail template and let it go. The package's other two links\n  are minted inside the worker that sends them precisely so no caller ever holds one; this one\n  cannot be.\n- **It is one-time and generation-bound.** Consuming it is a single statement, so two clicks\n  produce one sign-out and one 404. It also dies the moment anything else ends the account's key\n  generation — a completed password reset, a password change, a deletion request, or the\n  `revokeAllKeys` route in either mode.\n- **It does not change the password.** Send it alongside a password reset link: this one ends the\n  sessions, that one ends the credential that started them.\n- **Issuing again supersedes.** A second link retires the first, so asking twice does not leave a\n  spare capability in the mailbox.\n- **`ttlMinutes` must be a positive whole number.** Zero or negative is a `ValidationError` and\n  writes no row; an unknown `userId` is refused explicitly rather than surfacing as a foreign-key\n  500.\n- **Rate limited 10/minute per address** across both endpoints, on one counter — valid and invalid\n  tokens are not counted separately, which would be a way to tell them apart.\n- **Expired and spent rows are swept** by `auth.revoke-all-token-purge` (daily 06:00), part of\n  `authJobRouter`: a week after expiry, a day after being spent or superseded.\n\n**Settings.**\n\n| Variable | Default | Meaning |\n|----------|---------|---------|\n| `SPFN_AUTH_REVOKE_ALL_LINK_TTL_MINUTES` | `30` | how long the link works |\n| `SPFN_AUTH_REVOKE_ALL_CONFIRM_PATH` | `/account/revoke-all` | the page in your app the link opens |\n\nThe link URL is built on `NEXT_PUBLIC_SPFN_APP_URL || SPFN_APP_URL`, the same resolution the other\ntwo links use. Only the SHA-256 of the token is stored, in `spfn_auth.key_revoke_all_tokens`.\n\nNeither route is in the mobile contract: both are answered for a browser on a page in your app,\nwith no session and no client proof, and a generated mobile client has a session by definition.\n\n### Passkeys (WebAuthn)\n\nA passkey is an **optional additional credential** on an account, alongside a password and a\nlinked social account rather than in place of either. Enroll one from a session that already\nexists; sign in with it afterwards without typing an identifier at all.\n\n```\nenroll   → register/options (session)  → the browser mints a credential → register/verify\nsign in  → login/options    (public)   → the browser picks a credential → login/verify\nmanage   → list / rename / revoke\n```\n\n**A passkey is not a device key.** The assertion proves *who* is asking; the device key the\nNext.js proxy registers right after it is what every later request is signed with, exactly as\nafter a password login. Nothing in clientProofV1, in the JWT path, or in\n[Registered devices](#registered-devices-key-management) changes because a session started\nthis way — a passkey sign-in produces the same `LoginResult` and the same key row as `login`.\n\n#### Setup\n\n```bash\n# .env.server — nothing is required; these are the overrides\nSPFN_AUTH_PASSKEY_RP_ID=example.com\nSPFN_AUTH_PASSKEY_ORIGINS=https://app.example.com,https://admin.example.com\n```\n\nWith neither set, the relying party is derived from `{NEXT_PUBLIC_SPFN_APP_URL || SPFN_APP_URL}`:\nits host becomes the rpId and its origin becomes the single allowed origin. That is the whole\nconfiguration for a one-origin app.\n\n| Var | File | Notes |\n|-----|------|-------|\n| `SPFN_AUTH_PASSKEY_RP_ID` | `.env.server` | domain credentials are bound to — no protocol, no port. Default: the app URL's host. **Changing it orphans every passkey already enrolled** |\n| `SPFN_AUTH_PASSKEY_RP_NAME` | `.env.server` | name the authenticator's own prompt shows. Default: the rpId |\n| `SPFN_AUTH_PASSKEY_ORIGINS` | `.env.server` | comma-separated full origins allowed to run a ceremony. Default: the app URL's origin |\n| `SPFN_AUTH_PASSKEY_USER_VERIFICATION` | `.env.server` | `preferred` (default) or `required`. `discouraged` refuses boot |\n| `SPFN_AUTH_PASSKEY_CHALLENGE_TTL_SECONDS` | `.env.server` | default `300` — one ceremony at the authenticator, not an abandoned tab |\n| `SPFN_AUTH_PASSKEY_RECENT_AUTH_MINUTES` | `.env.server` | default `10` — see [the recent-authentication gate](#the-recent-authentication-gate) |\n\nTwo rules on those origins, **checked at boot** and refused with `PasskeyConfigError`:\n\n- each origin must be `https`, and `localhost` is the one host a browser treats as a secure\n  context over plain `http` — so `http://localhost:3000` is legal and `http://app.example.com`\n  is not;\n- each origin's host must be the rpId or a subdomain of it, because the browser will refuse\n  the ceremony otherwise.\n\nThe check runs at `initializeAuth`, deliberately: every one of these values makes *every*\npasskey operation fail, the drift is between environments, and the deploy that introduces it\nis where it has to surface — not the first sign-in after it.\n\n**Boot is only refused for a configuration you wrote.** If no `SPFN_AUTH_PASSKEY_*` variable\nis set, the derived relying party can still be unusable — `SPFN_APP_URL=http://192.168.1.5:3000`\nso a phone on the same network can reach your laptop, say, which is neither https nor\nlocalhost. Refusing to start over a feature nobody asked for would take that app down to fix\nsomething it does not use, so it is logged once instead and only a ceremony fails. Set any\npasskey variable and the same configuration refuses to start. This is the posture\n[the OAuth callback origin check](#oauth-callback-origin-web-app-host--rewrite) already takes.\n\n#### Enrolling, from a Next.js client component\n\n```tsx\n'use client';\nimport { authApi } from '@spfn/auth';\nimport { enrollPasskey, isPasskeySupported } from '@spfn/auth/client';\n\nasync function addPasskey()\n{\n    const result = await enrollPasskey(authApi, { label: 'MacBook Touch ID' });\n\n    if (!result.ok)\n    {\n        // 'unsupported' | 'cancelled' | 'error' — 'cancelled' is not an error to show\n        return result.reason === 'cancelled' ? undefined : showError(result.reason);\n    }\n\n    showAdded(result.passkeyId, result.label);\n}\n```\n\n`isPasskeySupported()` is what decides whether to render the button at all.\n\n#### Signing in, with conditional UI\n\nThe passkey appears in the browser's ordinary autofill dropdown. That needs an input whose\n`autocomplete` ends in `webauthn`, and a `signInWithPasskey` call started **when the form\nrenders**, not on a click:\n\n```tsx\n'use client';\nimport { useEffect } from 'react';\nimport { authApi } from '@spfn/auth';\nimport { isConditionalMediationAvailable, signInWithPasskey } from '@spfn/auth/client';\n\nexport function SignInForm()\n{\n    useEffect(() =>\n    {\n        void (async () =>\n        {\n            if (!await isConditionalMediationAvailable()) return;\n\n            const result = await signInWithPasskey(authApi, { conditional: true });\n            if (result.ok) router.replace('/');\n        })();\n    }, []);\n\n    return (\n        <form>\n            <input name=\"email\" autoComplete=\"username webauthn\" />\n            <input name=\"password\" type=\"password\" autoComplete=\"current-password\" />\n        </form>\n    );\n}\n```\n\nWhere conditional mediation is missing, render a visible \"Sign in with a passkey\" button that\ncalls `signInWithPasskey(authApi)` instead.\n\nBoth helpers answer with a discriminated union and **never throw a cancellation**: a person\nwho dismisses the system sheet raises `NotAllowedError`, and so does a person whose\nauthenticator had nothing to offer — neither is an application error, and code that has to\ntell them apart by re-reading `error.name` gets it wrong once and shows a red banner to\nsomeone who simply changed their mind.\n\n| result | meaning |\n|--------|---------|\n| `{ ok: true, ... }` | signed in / enrolled; the rest of the object is the server's answer |\n| `{ ok: false, reason: 'unsupported' }` | this browser has no WebAuthn; nothing was sent to the server |\n| `{ ok: false, reason: 'cancelled' }` | the person dismissed the enrollment prompt |\n| `{ ok: false, reason: 'no-credential' }` | sign-in: the authenticator offered nothing, or the person dismissed it |\n| `{ ok: false, reason: 'error', error }` | anything else, with the original error attached |\n\n#### The recent-authentication gate\n\nAdding a credential is adding a way in, and removing one can lock an account. Both are refused\nunless the caller has recently proved themselves, in one of two ways:\n\n- **the device key this request is signed with was registered within\n  `SPFN_AUTH_PASSKEY_RECENT_AUTH_MINUTES`** — that is when this device last presented a\n  credential, and it needs no new state; or\n- **the body carries `currentPassword`** and it verifies.\n\nOtherwise: **403 with `code: 'RECENT_AUTH_REQUIRED'`**. Branch on that code to prompt for the\npassword and retry — it is a stable field, not a message to match on.\n\nAn account with no password stored **cannot** satisfy the gate with a password, however\nplausible the value; it has to sign in again. The comparison still runs, against a dummy hash,\nso \"no password on file\" costs exactly what \"wrong password\" costs — otherwise response time\nbecomes an oracle for which accounts are OAuth-only.\n\n#### Managing passkeys\n\n```typescript\nconst { passkeys } = await authApi.listPasskeys.call({ body: {} });\n// → [{ passkeyId, label, deviceType, backedUp, transports, createdAt, lastUsedAt }]\n\nawait authApi.renamePasskey.call({ body: { passkeyId, label: 'Old iPhone' } });\nawait authApi.revokePasskey.call({ body: { passkeyId } });\n```\n\n- **Neither `credentialId` nor the public key is ever returned.** They are what an\n  authenticator is addressed by; the list exists to let someone recognise a credential and\n  point at it, which the label, the device type and the last-used moment do.\n- **`deviceType` is `singleDevice` or `multiDevice`**, and `backedUp` says whether a\n  multi-device credential actually has been. \"This one only exists on that phone\" is what the\n  owner needs before revoking the other entry.\n- **Revocation is soft, and the credential id stays reserved for good.** A credential someone\n  cut off can never be enrolled again — not on another account, and not on the same one\n  (`PasskeyAlreadyRegisteredError`, 409). Re-enrolling means a fresh credential.\n- **A passkey id you do not own answers 404.** Every lookup is owner-scoped, so the answer is\n  only ever \"not yours\".\n- **Renaming has no recent-authentication gate**: a label is display only and nothing is\n  authorized by it.\n\n#### Recovery — read this before shipping a passkey-only sign-up\n\nThe ways back into an account are: a live passkey, a password, a linked social account, or a\nverified email address — the last one because [Password reset](#password-reset-verified-email)\ncan always give such an account a password back. Nothing else; support cannot restore an\naccount that has none of the four.\n\nThat is why **revoking the last live passkey is refused (409, `code:\n'LAST_RECOVERY_CREDENTIAL'`) when the account has no password, no linked social account and no\nverified email.** A phone-only account is the case that reaches it. The refusal is not\npaternalism; it is the absence of an undo. Branch on that code to offer \"set a password\nfirst\", \"link an account first\", or \"confirm your email address first\".\n\nThe same fact should shape your sign-up: an account created without a password, without an\nemail and given one passkey has exactly one way in, and losing the device loses the account.\nAsk for a password, an address, or a social link before, or shortly after, the passkey.\n\n#### How the ceremonies are kept honest\n\n- **Discoverable credentials only** (`residentKey: 'required'`). `login/options` takes an empty\n  body — `additionalProperties: false`, so an `email` field is a 400 rather than something\n  quietly ignored — and always answers with an empty `allowCredentials`. There is no input\n  that could make its answer differ by whether an account exists.\n- **A revoked credential and one that was never here answer identically** on `login/verify`.\n  Anything else would say whether this account once had it.\n- **Challenges are one-time database rows**, spent by a single conditional `UPDATE`. Two\n  verifies arriving with the same challenge produce one winner and one refusal, across\n  instances. A challenge is bound to its ceremony (`registration` / `authentication`) and, for\n  enrollment, to the account that minted it.\n- **A refusal leaves the challenge live.** Spending happens inside the transaction that writes\n  what it authorizes, so a failure rolls it back and the ceremony is retryable; only a success\n  is unrepeatable.\n- **A signature counter that goes backwards refuses the sign-in and leaves the row alone.** It\n  is the signal a cloned authenticator would produce — but a synced passkey reports 0 forever\n  and a restored device can hit it, so auto-revoking would lock people out on a false\n  positive. The refusal is logged at `warn` with the passkey id; a human decides what it meant.\n- **Attestation is `none`.** Verifying an attestation statement would tell us which\n  authenticator model was used and nothing about who is holding it.\n\n#### Errors\n\n| error | status | `code` | when |\n|-------|--------|--------|------|\n| `PasskeyChallengeError` | 401 | — | the challenge is unknown, expired, already spent, of the other ceremony, or of another account |\n| `PasskeyVerificationError` | 401 | — | origin, rpId, signature or counter — and, on sign-in, an unknown or revoked credential |\n| `PasskeyNotFoundError` | 404 | — | a passkey the caller does not own, or one already revoked |\n| `PasskeyAlreadyRegisteredError` | 409 | — | that credential is on file for some account, revoked ones included |\n| `RecentAuthenticationRequiredError` | 403 | `RECENT_AUTH_REQUIRED` | the session proved itself too long ago and carried no password |\n| `LastRecoveryCredentialError` | 409 | `LAST_RECOVERY_CREDENTIAL` | revoking it would leave no way back in |\n| `PasskeyConfigError` | boot | — | an origin off the rpId or not https, or an unsupported user-verification value |\n\n#### Events\n\n`passkeyEnrolledEvent` (`auth.passkey.enrolled`: `userId`, `passkeyId`, `label?`) and\n`passkeyRevokedEvent` (`auth.passkey.revoked`: `userId`, `passkeyId`, `reason`) fire after\ncommit. `authLoginEvent.provider` gains `'passkey'`. Subscribe to the first to tell the owner\na new way into their account appeared — which is what it is.\n\n#### The case table\n\nThe behaviour above is asserted row by row in\n`src/__tests__/integration/passkeys.test.ts`; each `it` is named for its row.\n\n| row | situation | outcome |\n|-----|-----------|---------|\n| E1 | fresh session, no passkeys | 200, empty `excludeCredentials` |\n| E2 | session key 11 min old, no password | 403 `RECENT_AUTH_REQUIRED` |\n| E3 / E4 | 11 min old, correct / wrong password | 200 / 403 — byte-identical to E2 |\n| E5 | no password on the account, 11 min old | 403; a password can never speak for it |\n| E6 | valid attestation | 200; row written, challenge spent, event emitted |\n| E7 / E8 | challenge replayed / expired | 401; one row, no row |\n| E9 / E10 | another account's / the other ceremony's challenge | 401 |\n| E11 | credential already on some account | 409 |\n| E12 / E13 | wrong origin / wrong rpId | 401 |\n| E14 | two live passkeys | both listed in `excludeCredentials` |\n| E15 | label empty or over 64 chars | 400; challenge stays live |\n| E16 | two concurrent verifies, one challenge | one 200, one 401, one row |\n| L1 / L2 | empty options body / an `email` in it | 200 with empty `allowCredentials` / 400 |\n| L3 | valid assertion | 200, same answer as `login`; counter and device key move |\n| L4 / L5 | revoked / unknown credential | 401, byte-identical |\n| L6 / L7 / L8 | challenge spent / expired / wrong kind | 401; no device key |\n| L9 / L17 | bad signature / wrong origin | 401; counter unmoved |\n| L10 | counter went backwards | 401; row untouched, warn logged, not revoked |\n| L11 | synced passkey reporting 0 both times | 200 |\n| L12 / L13 | disabled / pending deletion | 403, the same errors password login gives |\n| L14 | device-key fields missing (proxy bypassed) | 400; challenge stays live |\n| L15 | an old session key named in the body | it is revoked as the new one is registered |\n| L16 | two concurrent verifies, one assertion | one 200, one 401, one device key |\n| M1 | 2 live + 1 revoked | 2 entries, no credential id, no public key |\n| M2 / M9 | someone else's / an already revoked passkey | 404 |\n| M3 / M4 | rename / revoke on a recent session | 200; revoke emits its event |\n| M5 | revoke on an 11-minute-old session | 403 `RECENT_AUTH_REQUIRED` |\n| M6 / M7 / M8 | last passkey, no password: alone / with a social account / with a second passkey | 409 / 200 / 200 |\n| M10 | re-enrolling a revoked credential | 409 |\n| K1 / K4 | two concurrent revokes: 2 passkeys and nothing else / 1 passkey and a password | 200 + 409 / 200 + 404 |\n| K2 / K3 | last passkey, no password: with a verified email / phone-only | 200 / 409 |\n\nConfiguration rows C1–C6 are in `src/__tests__/unit/passkey-config.test.ts`.\n\n### Second factor (MFA)\n\nOptional, and optional in the strong sense: an account that never enrols sees exactly the\nbehaviour it saw before this existed, on every route. Nothing here blocks anybody — the\npackage asks for a second factor only from people who asked it to.\n\nTwo forms. A **TOTP** au","readmeFilename":"README.md"}