{"_id":"@braedonsaunders/appkit-auth","_rev":"3-1f2990dc3f020dec9b24b4e075be512c","name":"@braedonsaunders/appkit-auth","dist-tags":{"latest":"0.1.5"},"versions":{"0.1.3":{"name":"@braedonsaunders/appkit-auth","version":"0.1.3","keywords":["appkit","application-framework","typescript"],"author":{"name":"Braedon Saunders"},"license":"AGPL-3.0-or-later","_id":"@braedonsaunders/appkit-auth@0.1.3","maintainers":[{"name":"braedonsaunders","email":"bsaunders@rassaun.com"}],"homepage":"https://github.com/braedonsaunders/appkit/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/braedonsaunders/appkit/issues"},"dist":{"shasum":"cd6fa97922f36b432c2f386331ac50bbb16fb12d","tarball":"https://registry.npmjs.org/@braedonsaunders/appkit-auth/-/appkit-auth-0.1.3.tgz","fileCount":39,"integrity":"sha512-ds3cAD1z7xKvtBSe8BNzYWqK1D7AkTgRZEVyDsRcNhScYO3y7rzjkSc/cEga4OnqnjGao1ZvdlLYGRV8mR4t3A==","signatures":[{"sig":"MEUCIEv6Qp69EX6CoqmgLgG+Wh/82/kClezeWxeQrCUC/dFvAiEAiyF6NqkIHOL2RTRyEa7CdUze8q4LnH71KpeMdzIJOic=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@braedonsaunders%2fappkit-auth@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":185689},"main":"./index.js","type":"module","_from":"file:braedonsaunders-appkit-auth-0.1.3.tgz","types":"./index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./next":{"types":"./next.d.ts","import":"./next.js","default":"./next.js"},"./react":{"types":"./react.d.ts","import":"./react.js","default":"./react.js"},"./client":{"types":"./client.d.ts","import":"./client.js","default":"./client.js"},"./memory":{"types":"./memory.d.ts","import":"./memory.js","default":"./memory.js"},"./server":{"types":"./server.d.ts","import":"./server.js","default":"./server.js"},"./drizzle":{"types":"./drizzle.d.ts","import":"./drizzle.js","default":"./drizzle.js"},"./invites":{"types":"./invites.d.ts","import":"./invites.js","default":"./invites.js"},"./package.json":"./package.json"},"scripts":{"start":"node server.js"},"_npmUser":{"name":"braedonsaunders","email":"bsaunders@rassaun.com"},"_resolved":"/tmp/f1ae7400040a181e5f496185f0d6343e/braedonsaunders-appkit-auth-0.1.3.tgz","_integrity":"sha512-ds3cAD1z7xKvtBSe8BNzYWqK1D7AkTgRZEVyDsRcNhScYO3y7rzjkSc/cEga4OnqnjGao1ZvdlLYGRV8mR4t3A==","repository":{"url":"git+https://github.com/braedonsaunders/appkit.git","type":"git","directory":"packages/auth"},"_npmVersion":"10.9.8","description":"Production authentication: durable sessions, passwords, magic links, invitation grants, reset flows, React UI, and Postgres adapters.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"pg":"^8.22.0","zod":"^4.4.3","better-auth":"^1.6.23","drizzle-orm":"^0.45.2","@braedonsaunders/appkit-db":"^0.2.0","@braedonsaunders/appkit-ui":"^0.2.0"},"_hasShrinkwrap":false,"peerDependencies":{"react":">=18.2 <20"},"_npmOperationalInternal":{"tmp":"tmp/appkit-auth_0.1.3_1787007443181_0.9632695913121017","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@braedonsaunders/appkit-auth","version":"0.1.4","keywords":["appkit","application-framework","typescript"],"author":{"name":"Braedon Saunders"},"license":"AGPL-3.0-or-later","_id":"@braedonsaunders/appkit-auth@0.1.4","maintainers":[{"name":"braedonsaunders","email":"bsaunders@rassaun.com"}],"homepage":"https://github.com/braedonsaunders/appkit/tree/main/packages/auth#readme","bugs":{"url":"https://github.com/braedonsaunders/appkit/issues"},"dist":{"shasum":"a61cee44b167923ea31c0760dc853ae4551193fe","tarball":"https://registry.npmjs.org/@braedonsaunders/appkit-auth/-/appkit-auth-0.1.4.tgz","fileCount":39,"integrity":"sha512-Yq1u7MTt5sPJDNJ6MTV7hGTG924jvFO0HiZmkFPAsO4BuOHpCVAUx3SW+llRIDrrbq1FdJuCVQbSWDDW5sykNA==","signatures":[{"sig":"MEUCIQDdhLgXgFmZhgRFYrwsPLr27iJTNSLCBKNqqBTozyO4GQIgCkQyUBkutSr+7teNuAfE7HeFHoPKFHfc9dIQ8BguTIw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@braedonsaunders%2fappkit-auth@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":185404},"main":"./index.js","type":"module","_from":"file:braedonsaunders-appkit-auth-0.1.4.tgz","types":"./index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./next":{"types":"./next.d.ts","import":"./next.js","default":"./next.js"},"./react":{"types":"./react.d.ts","import":"./react.js","default":"./react.js"},"./client":{"types":"./client.d.ts","import":"./client.js","default":"./client.js"},"./memory":{"types":"./memory.d.ts","import":"./memory.js","default":"./memory.js"},"./server":{"types":"./server.d.ts","import":"./server.js","default":"./server.js"},"./drizzle":{"types":"./drizzle.d.ts","import":"./drizzle.js","default":"./drizzle.js"},"./invites":{"types":"./invites.d.ts","import":"./invites.js","default":"./invites.js"},"./package.json":"./package.json"},"scripts":{"start":"node server.js"},"_npmUser":{"name":"braedonsaunders","email":"bsaunders@rassaun.com"},"_resolved":"/tmp/54e0e71413c7c26b6db962ef94385c79/braedonsaunders-appkit-auth-0.1.4.tgz","_integrity":"sha512-Yq1u7MTt5sPJDNJ6MTV7hGTG924jvFO0HiZmkFPAsO4BuOHpCVAUx3SW+llRIDrrbq1FdJuCVQbSWDDW5sykNA==","repository":{"url":"git+https://github.com/braedonsaunders/appkit.git","type":"git","directory":"packages/auth"},"_npmVersion":"10.9.8","description":"Production authentication: durable sessions, passwords, magic links, invitation grants, reset flows, React UI, and Postgres adapters.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"pg":"^8.22.0","zod":"^4.4.3","better-auth":"^1.6.23","drizzle-orm":"^0.45.2","@braedonsaunders/appkit-db":"^0.2.0","@braedonsaunders/appkit-ui":"^0.2.1"},"_hasShrinkwrap":false,"peerDependencies":{"react":">=18.2 <20"},"_npmOperationalInternal":{"tmp":"tmp/appkit-auth_0.1.4_1787341646791_0.037021975472883106","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"_id":"@braedonsaunders/appkit-auth@0.1.5","bugs":{"url":"https://github.com/braedonsaunders/appkit/issues"},"dist":{"shasum":"97c9e10df05ba23b7cc9de542e8956c4aa9e91f5","tarball":"https://registry.npmjs.org/@braedonsaunders/appkit-auth/-/appkit-auth-0.1.5.tgz","fileCount":39,"integrity":"sha512-po/Bbe/EeFQaGCvvRwU41pFZvOy/kM+JANSfriupBn2bH0lW4t5V0FR22dl+5zc9Y53p52Fj4DlByvmDaQdrbA==","signatures":[{"sig":"MEUCIHQFIz/QtNqPC2vraTJ5hh/CiS1i6ZbEg/HRhZX7wBymAiEA9b+h8iqtU8hqF2DnfjVNKMhHHw4KJ5EpxOqvME6DulE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDlVcsXAGg1osCvX35f2aeKr6ufTpI/0Fvhd32WWCkjrAiANM/2zw/KCU9TUsVQNaF53ggi1l/8A+l6IfpvUFajCmQ=="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@braedonsaunders%2fappkit-auth@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":185404},"main":"./index.js","name":"@braedonsaunders/appkit-auth","type":"module","_from":"file:braedonsaunders-appkit-auth-0.1.5.tgz","types":"./index.d.ts","author":{"name":"Braedon Saunders"},"engines":{"node":">=22"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./next":{"types":"./next.d.ts","import":"./next.js","default":"./next.js"},"./react":{"types":"./react.d.ts","import":"./react.js","default":"./react.js"},"./client":{"types":"./client.d.ts","import":"./client.js","default":"./client.js"},"./memory":{"types":"./memory.d.ts","import":"./memory.js","default":"./memory.js"},"./server":{"types":"./server.d.ts","import":"./server.js","default":"./server.js"},"./drizzle":{"types":"./drizzle.d.ts","import":"./drizzle.js","default":"./drizzle.js"},"./invites":{"types":"./invites.d.ts","import":"./invites.js","default":"./invites.js"},"./package.json":"./package.json"},"license":"AGPL-3.0-or-later","scripts":{"start":"node server.js"},"version":"0.1.5","_npmUser":{"name":"braedonsaunders","email":"bsaunders@rassaun.com"},"homepage":"https://github.com/braedonsaunders/appkit/tree/main/packages/auth#readme","keywords":["appkit","application-framework","typescript"],"_resolved":"/tmp/03c872ab1cda9657bb6bede36b0a5851/braedonsaunders-appkit-auth-0.1.5.tgz","_integrity":"sha512-po/Bbe/EeFQaGCvvRwU41pFZvOy/kM+JANSfriupBn2bH0lW4t5V0FR22dl+5zc9Y53p52Fj4DlByvmDaQdrbA==","repository":{"url":"git+https://github.com/braedonsaunders/appkit.git","type":"git","directory":"packages/auth"},"_npmVersion":"10.9.8","description":"Production authentication: durable sessions, passwords, magic links, invitation grants, reset flows, React UI, and Postgres adapters.","directories":{},"maintainers":[{"name":"braedonsaunders","email":"bsaunders@rassaun.com"}],"_nodeVersion":"22.23.2","dependencies":{"pg":"^8.22.0","zod":"^4.4.3","better-auth":"^1.6.23","drizzle-orm":"^0.45.2","@braedonsaunders/appkit-db":"^0.2.0","@braedonsaunders/appkit-ui":"^0.3.0"},"_hasShrinkwrap":false,"peerDependencies":{"react":">=18.2 <20"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/appkit-auth_0.1.5_1789182681799_0.2739071240750206"}}},"time":{"created":"2026-08-17T22:57:22.993Z","modified":"2026-09-12T03:11:22.228Z","0.1.3":"2026-08-17T22:57:23.333Z","0.1.4":"2026-08-21T19:47:26.954Z","0.1.5":"2026-09-12T03:11:21.887Z"},"bugs":{"url":"https://github.com/braedonsaunders/appkit/issues"},"author":{"name":"Braedon Saunders"},"license":"AGPL-3.0-or-later","homepage":"https://github.com/braedonsaunders/appkit/tree/main/packages/auth#readme","keywords":["appkit","application-framework","typescript"],"repository":{"url":"git+https://github.com/braedonsaunders/appkit.git","type":"git","directory":"packages/auth"},"description":"Production authentication: durable sessions, passwords, magic links, invitation grants, reset flows, React UI, and Postgres adapters.","maintainers":[{"name":"braedonsaunders","email":"bsaunders@rassaun.com"}],"readme":"# @braedonsaunders/appkit-auth\n\nProduction authentication generalized around explicit application inputs.\n\n## What ships\n\n- persisted Better Auth sessions, password accounts, OAuth accounts, and single-use verification records;\n- password sign-in, reset requests, reset completion, session refresh/revocation, and encrypted OAuth tokens;\n- hashed one-time magic links with framework-neutral email delivery;\n- membership-targeted invitation grants that cannot activate a different user, tenant, membership, or resend generation;\n- atomic Postgres invitation acceptance and audit through `@braedonsaunders/appkit-auth/drizzle`;\n- deterministic memory invitation storage for tests and database-free applications;\n- React sign-in, forgot-password, reset-password, and auth-screen compositions;\n- Better Auth React client and Next.js route bindings as optional entry points.\n\n## Server\n\n```ts\nimport { createAppkitAuth, createLazyAuth } from '@braedonsaunders/appkit-auth/server'\n\nexport const getAuth = createLazyAuth(() => createAppkitAuth({\n  database: pool,\n  baseURL: process.env.APP_URL!,\n  secret: process.env.BETTER_AUTH_SECRET!,\n  appName: 'My app',\n  sendEmail: (message) => emailQueue.enqueue(message),\n}))\n```\n\nMount `toNextJsHandler(getAuth())` from `@braedonsaunders/appkit-auth/next` in a Next.js catch-all route. Other frameworks can mount `getAuth().handler` directly.\n\n## Invitations\n\nCreate one `InviteService` with an explicit signing secret and a memory or Drizzle store. Mint a new grant after atomically advancing `membership.invitedAt`, pass its callback path to `signInMagicLink`, and provide the same service to `createAppkitAuth`. Membership activation then occurs only after Better Auth successfully consumes the matching one-time magic link.\n\nApplications own branding, transactional email transport, route authorization, tenant selection cookies, and optional post-acceptance domain effects. The package owns the security state machine and complete UI/runtime boundary.\n","readmeFilename":"README.md"}