{"_id":"@airdraft/cloud-auth","_rev":"8-757f11cfbb6ef3951059c1d06adb21bc","name":"@airdraft/cloud-auth","dist-tags":{"latest":"0.1.7"},"versions":{"0.1.0":{"name":"@airdraft/cloud-auth","version":"0.1.0","license":"MIT","_id":"@airdraft/cloud-auth@0.1.0","maintainers":[{"name":"miracleio","email":"miracleficient@gmail.com"}],"dist":{"shasum":"3cc78035b9902ff1ca06177ec4f3d37332badfec","tarball":"https://registry.npmjs.org/@airdraft/cloud-auth/-/cloud-auth-0.1.0.tgz","fileCount":14,"integrity":"sha512-bARpNZ1H6fAGnzdEEQhYQ+i8nymymJI6BxdV1+gg9mQ2hfaKto74B/xXRM/39yrePDilMGXHOn5dbZs8jtKgvw==","signatures":[{"sig":"MEUCIQDRd2dEPK9zqBaTe0EjJWNH52Wb2i6WpKCbw/HFWXvL7QIgHYtKa9IZRw8u8ZG4P5CzFos1BLAgvzsZAyazYi042pg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13510},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./better-auth":{"types":"./dist/BetterAuthAdapter.d.ts","import":"./dist/BetterAuthAdapter.js"}},"gitHead":"d6c85dfed37f11c42151c93b49a80ede90699616","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","clean":"rm -rf dist","release":"standard-version","typecheck":"tsc --noEmit","test:watch":"vitest","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","prepublishOnly":"npm run build"},"_npmUser":{"name":"miracleio","email":"miracleficient@gmail.com"},"_npmVersion":"11.9.0","description":"Airdraft Cloud auth adapter interface — pluggable session verification for the cloud dashboard","directories":{},"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.5.0","typescript":"^5.4.0","@types/node":"^20.0.0","better-auth":"^1.0.0","standard-version":"^9.5.0"},"peerDependencies":{"better-auth":">=1.0.0"},"peerDependenciesMeta":{"better-auth":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/cloud-auth_0.1.0_1779387930995_0.5524031696770353","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@airdraft/cloud-auth","version":"0.1.1","license":"MIT","_id":"@airdraft/cloud-auth@0.1.1","maintainers":[{"name":"miracleio","email":"miracleficient@gmail.com"}],"dist":{"shasum":"7ae6f24a7e7a47794344987586c0d4412be1b39b","tarball":"https://registry.npmjs.org/@airdraft/cloud-auth/-/cloud-auth-0.1.1.tgz","fileCount":14,"integrity":"sha512-Hbmg2hCAiygji/YD/6LRTWPT14PolxwNJXFL9OwlCFPGpBniq0olyzJY0UCGb3oXQeG4MMedmj9dFS4mB6RnGg==","signatures":[{"sig":"MEYCIQDjldLqaDGoJ9Qf4fNX19TC8fZcchvIZ728HMAhGrEwMAIhAJ6UO6uhbhzdISgxpYgV/wqEaOILMVPbI4v4/yoVRWrC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17130},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./better-auth":{"types":"./dist/BetterAuthAdapter.d.ts","import":"./dist/BetterAuthAdapter.js"}},"gitHead":"277e16b37c997996b49d90ec64fa3f5c023f4d0a","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","clean":"rm -rf dist","release":"standard-version","typecheck":"tsc --noEmit","test:watch":"vitest","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","prepublishOnly":"npm run build"},"_npmUser":{"name":"miracleio","email":"miracleficient@gmail.com"},"_npmVersion":"11.9.0","description":"Airdraft Cloud auth adapter interface — pluggable session verification for the cloud dashboard","directories":{},"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.5.0","typescript":"^5.4.0","@types/node":"^20.0.0","better-auth":"^1.0.0","standard-version":"^9.5.0"},"peerDependencies":{"better-auth":">=1.0.0"},"peerDependenciesMeta":{"better-auth":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/cloud-auth_0.1.1_1779521526894_0.4292737851158932","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@airdraft/cloud-auth","version":"0.1.2","license":"MIT","_id":"@airdraft/cloud-auth@0.1.2","maintainers":[{"name":"miracleio","email":"miracleficient@gmail.com"}],"dist":{"shasum":"f5ec138db847f018ad2699c381ad268739a9e977","tarball":"https://registry.npmjs.org/@airdraft/cloud-auth/-/cloud-auth-0.1.2.tgz","fileCount":14,"integrity":"sha512-jYu6aj8g8yyaDMQxrMoChttIuzQvmaE837PsUNuCFKTFcvSckZjIai1WtjVNsLjz+hTxm/LgYn/ZeUpTk34pdA==","signatures":[{"sig":"MEQCIFMP2gBrkoUqMIXvbbGegtyUPDsZlu+DTnn7ALlFI/bJAiB+fH/u5ttDNtQ2ikyA03KTQleir3gFgLBJzDKjNf8hVA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18474},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./better-auth":{"types":"./dist/BetterAuthAdapter.d.ts","import":"./dist/BetterAuthAdapter.js"}},"gitHead":"8d692f6e9c48b0c7886d404b7bbc9f1b0a79ca7b","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","clean":"rm -rf dist","release":"standard-version","typecheck":"tsc --noEmit","test:watch":"vitest","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","prepublishOnly":"npm run build"},"_npmUser":{"name":"miracleio","email":"miracleficient@gmail.com"},"_npmVersion":"11.9.0","description":"Airdraft Cloud auth adapter interface — pluggable session verification for the cloud dashboard","directories":{},"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.5.0","typescript":"^5.4.0","@types/node":"^20.0.0","better-auth":"^1.0.0","standard-version":"^9.5.0"},"peerDependencies":{"better-auth":">=1.0.0"},"peerDependenciesMeta":{"better-auth":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/cloud-auth_0.1.2_1779557377047_0.7161429743402694","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@airdraft/cloud-auth","version":"0.1.3","license":"MIT","_id":"@airdraft/cloud-auth@0.1.3","maintainers":[{"name":"miracleio","email":"miracleficient@gmail.com"}],"dist":{"shasum":"ab40f0c2da40cd3782204deba2d271495c60ea49","tarball":"https://registry.npmjs.org/@airdraft/cloud-auth/-/cloud-auth-0.1.3.tgz","fileCount":14,"integrity":"sha512-ELC64WXyj4TVYNN3lhh+98u9+iifGE5o1+afDjcgBY8YHyAt6xbfz37onrcl7ozMvQiP7T/XVIV8r2eQnOBVnQ==","signatures":[{"sig":"MEQCIDAW3zcy9D35rMUoCHltA7jgkafjrVyXNN1igx6v/T3QAiAhlI8DGQMB2LnbklZGOxc4ZsbWaPDiimlR9KMlyw3Rag==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19279},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./better-auth":{"types":"./dist/BetterAuthAdapter.d.ts","import":"./dist/BetterAuthAdapter.js"}},"gitHead":"88185ba7e7a5ed54561a09a53f6d13367587bbfb","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","clean":"rm -rf dist","release":"standard-version","typecheck":"tsc --noEmit","test:watch":"vitest","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","prepublishOnly":"npm run build"},"_npmUser":{"name":"miracleio","email":"miracleficient@gmail.com"},"_npmVersion":"11.9.0","description":"Airdraft Cloud auth adapter interface — pluggable session verification for the cloud dashboard","directories":{},"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.5.0","typescript":"^5.4.0","@types/node":"^20.0.0","better-auth":"^1.0.0","standard-version":"^9.5.0"},"peerDependencies":{"better-auth":">=1.0.0"},"peerDependenciesMeta":{"better-auth":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/cloud-auth_0.1.3_1779564379295_0.646506563238854","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@airdraft/cloud-auth","version":"0.1.4","license":"MIT","_id":"@airdraft/cloud-auth@0.1.4","maintainers":[{"name":"miracleio","email":"miracleficient@gmail.com"}],"dist":{"shasum":"756e827c291891eebd8542eff167931dc40b8762","tarball":"https://registry.npmjs.org/@airdraft/cloud-auth/-/cloud-auth-0.1.4.tgz","fileCount":14,"integrity":"sha512-NEzIelA6Jm46UeFCordGIccEeP+mezEev/9awCt1h4hvR63i4ANO7oYsIW0PmwEN7YNxL90pwfY3IyAHhzjLNw==","signatures":[{"sig":"MEUCIEi2gQ/tHX0NA0hJPVk1uc+NRz5Y07SRyewh8S12cb+EAiEAu6ukIbQnfKjwQCiu+wT5HNRkYCRBlNRwnp6jQRW3mU0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19961},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./better-auth":{"types":"./dist/BetterAuthAdapter.d.ts","import":"./dist/BetterAuthAdapter.js"}},"gitHead":"829aab190f831c8d252be75e35c26b42715babe2","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","clean":"rm -rf dist","release":"standard-version","typecheck":"tsc --noEmit","test:watch":"vitest","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","prepublishOnly":"npm run build"},"_npmUser":{"name":"miracleio","email":"miracleficient@gmail.com"},"_npmVersion":"11.9.0","description":"Airdraft Cloud auth adapter interface — pluggable session verification for the cloud dashboard","directories":{},"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.5.0","typescript":"^5.4.0","@types/node":"^20.0.0","better-auth":"^1.0.0","standard-version":"^9.5.0"},"peerDependencies":{"better-auth":">=1.0.0"},"peerDependenciesMeta":{"better-auth":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/cloud-auth_0.1.4_1779570850339_0.9501567612954567","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@airdraft/cloud-auth","version":"0.1.5","license":"MIT","_id":"@airdraft/cloud-auth@0.1.5","maintainers":[{"name":"miracleio","email":"miracleficient@gmail.com"}],"dist":{"shasum":"c94a08f84738f4240e01e56eac9a62eeef934abe","tarball":"https://registry.npmjs.org/@airdraft/cloud-auth/-/cloud-auth-0.1.5.tgz","fileCount":14,"integrity":"sha512-w4JB33sZXKVf5tJIzAh+iWtmSSbon6dR4p0DwmeXDpK2q37Jb6b5Jjw6crRB40LwyWrrjmL8uw+HUeO9503YPQ==","signatures":[{"sig":"MEUCICgDd7iTcIAipvqWseR1ujhKiM/k0vVczOjEWVkWmrtSAiEAu/bjHdOZOK3bMtXnkLrdGYH4qYhxg4fmxlDQCVE7+pw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25834},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./better-auth":{"types":"./dist/BetterAuthAdapter.d.ts","import":"./dist/BetterAuthAdapter.js"}},"gitHead":"8c9d4744b92db08fa725d40bc50f9ef0f1392e59","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","clean":"rm -rf dist","release":"standard-version","typecheck":"tsc --noEmit","test:watch":"vitest","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","prepublishOnly":"npm run build"},"_npmUser":{"name":"miracleio","email":"miracleficient@gmail.com"},"_npmVersion":"11.9.0","description":"Airdraft Cloud auth adapter interface — pluggable session verification for the cloud dashboard","directories":{},"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.5.0","typescript":"^5.4.0","@types/node":"^20.0.0","better-auth":"^1.0.0","standard-version":"^9.5.0"},"peerDependencies":{"better-auth":">=1.0.0"},"peerDependenciesMeta":{"better-auth":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/cloud-auth_0.1.5_1780221053176_0.2549606931051467","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@airdraft/cloud-auth","version":"0.1.6","license":"MIT","_id":"@airdraft/cloud-auth@0.1.6","maintainers":[{"name":"miracleio","email":"miracleficient@gmail.com"}],"dist":{"shasum":"62278e072cd18e4ee172834d007a8d6fead7f076","tarball":"https://registry.npmjs.org/@airdraft/cloud-auth/-/cloud-auth-0.1.6.tgz","fileCount":15,"integrity":"sha512-+zimVIg2F4ZMB2Ji+7tHgbsuKaDI7yVjYStBBN36bcCN82cTjgm5JbXKQhvP+P16h1AbCkwfkQDgixfZEb98+Q==","signatures":[{"sig":"MEUCICh58NIdrSTmd7oWR5NouiWj9dHlkMSPEJwEOHhVGBOIAiEA+IwrvNHSAYPk/iJct/6i/cCIFPg3XFBcFBkC7yBpTiA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33480},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./better-auth":{"types":"./dist/BetterAuthAdapter.d.ts","import":"./dist/BetterAuthAdapter.js"}},"gitHead":"783247fb1ef10d1101f9237fdb2d80522ff4f938","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","clean":"rm -rf dist","release":"standard-version","typecheck":"tsc --noEmit","test:watch":"vitest","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","prepublishOnly":"npm run build"},"_npmUser":{"name":"miracleio","email":"miracleficient@gmail.com"},"_npmVersion":"11.9.0","description":"Airdraft Cloud auth adapter interface — pluggable session verification for the cloud dashboard","directories":{},"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.5.0","typescript":"^5.4.0","@types/node":"^20.0.0","better-auth":"^1.0.0","standard-version":"^9.5.0"},"peerDependencies":{"better-auth":">=1.0.0"},"peerDependenciesMeta":{"better-auth":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/cloud-auth_0.1.6_1782364722138_0.2730401401641691","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@airdraft/cloud-auth","version":"0.1.7","description":"Airdraft Cloud auth adapter interface — pluggable session verification for the cloud dashboard","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"},"./better-auth":{"import":"./dist/BetterAuthAdapter.js","types":"./dist/BetterAuthAdapter.d.ts"}},"scripts":{"build":"tsc","dev":"tsc --watch","clean":"rm -rf dist","test":"vitest run","test:watch":"vitest","typecheck":"tsc --noEmit","prepublishOnly":"npm run build","release":"standard-version","release:patch":"standard-version --release-as patch","release:minor":"standard-version --release-as minor","release:major":"standard-version --release-as major"},"publishConfig":{"access":"public"},"license":"MIT","peerDependencies":{"better-auth":">=1.0.0"},"peerDependenciesMeta":{"better-auth":{"optional":true}},"devDependencies":{"@types/node":"^20.0.0","better-auth":"^1.0.0","standard-version":"^9.5.0","typescript":"^5.4.0","vitest":"^1.5.0"},"engines":{"node":">=18.0.0"},"gitHead":"9fdb3e0fbca1e58bb84aca8dd92155d0057ca4b1","_id":"@airdraft/cloud-auth@0.1.7","_nodeVersion":"24.14.0","_npmVersion":"11.9.0","dist":{"integrity":"sha512-fyiDgvImR1dUOm2UI4yO2aZCgp0+SCQObYzCCwtiBw8WTB+UFjO74wVx0YJ9yMh6Wd3MGeLUaD+PbrbKAw6/Uw==","shasum":"fadd3d93db63d89410fd5eb87ca8b82814f17131","tarball":"https://registry.npmjs.org/@airdraft/cloud-auth/-/cloud-auth-0.1.7.tgz","fileCount":15,"unpackedSize":34310,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDFez8WtoQ/4Id8GOsQXGZg8IROorTg3bgX5CxvM4kc0gIhAKffTWI3+540PRVqyDACMQCyaRz5+tGzeM9ZuZJ1aFR4"}]},"_npmUser":{"name":"miracleio","email":"miracleficient@gmail.com"},"directories":{},"maintainers":[{"name":"miracleio","email":"miracleficient@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cloud-auth_0.1.7_1782407221618_0.4094465063189854"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-21T18:25:30.847Z","modified":"2026-06-25T17:07:01.884Z","0.1.0":"2026-05-21T18:25:31.142Z","0.1.1":"2026-05-23T07:32:07.026Z","0.1.2":"2026-05-23T17:29:37.219Z","0.1.3":"2026-05-23T19:26:19.413Z","0.1.4":"2026-05-23T21:14:10.483Z","0.1.5":"2026-05-31T09:50:53.315Z","0.1.6":"2026-06-25T05:18:42.290Z","0.1.7":"2026-06-25T17:07:01.762Z"},"license":"MIT","description":"Airdraft Cloud auth adapter interface — pluggable session verification for the cloud dashboard","maintainers":[{"name":"miracleio","email":"miracleficient@gmail.com"}],"readme":"# `@airdraft/cloud-auth`\n\nPluggable authentication adapter interface for the Airdraft Cloud dashboard. Decouples the cloud handlers from any specific auth library — swap between Better Auth, Clerk, a custom JWT solution, or a mock in tests without changing any business logic.\n\n---\n\n## Installation\n\n```bash\nnpm install @airdraft/cloud-auth\n# or\npnpm add @airdraft/cloud-auth\n```\n\n---\n\n## The `CloudAuthAdapter` interface\n\nEvery `@airdraft/cloud` handler accepts a `CloudAuthAdapter`. Implement this interface to plug in your own auth backend:\n\n```ts\nimport type { CloudAuthAdapter } from '@airdraft/cloud-auth'\n\nconst authAdapter: CloudAuthAdapter = {\n  /**\n   * Verify the inbound request and return the caller's identity, or null if unauthenticated.\n   * Typically reads a session cookie or Authorization header.\n   */\n  async verifySession(req: Request): Promise<CloudIdentity | null> { /* ... */ },\n\n  /**\n   * Catch-all HTTP handler for auth routes (login, logout, OAuth callbacks, etc.).\n   * Mounted at /api/auth/[...all].\n   */\n  async handler(req: Request): Promise<Response> { /* ... */ },\n\n  /**\n   * Programmatically create a user account (used during invite acceptance for new users).\n   */\n  async createUser(input: CreateUserInput): Promise<{ userId: string }> { /* ... */ },\n\n  /**\n   * Delete a user account and all associated sessions.\n   */\n  async deleteUser(userId: string): Promise<void> { /* ... */ },\n}\n```\n\n### `CloudIdentity`\n\n```ts\ninterface CloudIdentity {\n  userId: string\n  email: string\n  name?: string\n  avatarUrl?: string\n}\n```\n\n### `CreateUserInput`\n\n```ts\ninterface CreateUserInput {\n  email: string\n  name?: string\n  password?: string        // only required for email/password auth\n  emailVerified?: boolean  // true = skip verification email (e.g. for invited users)\n}\n```\n\n---\n\n## Default implementation — Better Auth\n\n`@airdraft/cloud-auth` ships a pre-built adapter for [Better Auth](https://www.better-auth.com/):\n\n```ts\nimport { betterAuth } from 'better-auth'\nimport { admin } from 'better-auth/plugins'\nimport { mongodbAdapter } from 'better-auth/adapters/mongodb'\nimport { createBetterAuthAdapter } from '@airdraft/cloud-auth/better-auth'\n\nexport const auth = betterAuth({\n  database: mongodbAdapter(db),\n  emailAndPassword: { enabled: true },\n  plugins: [admin()],  // required for createUser / deleteUser\n  secret: process.env.BETTER_AUTH_SECRET!,\n})\n\nexport const authAdapter = createBetterAuthAdapter(auth)\n```\n\nThe `admin` plugin must be enabled for `createUser` and `deleteUser` to work. If you don't need programmatic user creation (e.g. invite flow creates users via the auth UI), those methods can be no-ops.\n\n### Mounting the handler\n\n```ts\n// app/api/auth/[...all]/route.ts\nimport { authAdapter } from '@/lib/auth'\n\nexport async function GET(req: Request)  { return authAdapter.handler(req) }\nexport async function POST(req: Request) { return authAdapter.handler(req) }\n```\n\n---\n\n## Custom adapter example (Clerk)\n\n```ts\nimport { clerkClient, getAuth } from '@clerk/nextjs/server'\nimport type { CloudAuthAdapter } from '@airdraft/cloud-auth'\n\nexport const authAdapter: CloudAuthAdapter = {\n  async verifySession(req) {\n    const { userId } = getAuth(req as any)\n    if (!userId) return null\n    const user = await clerkClient.users.getUser(userId)\n    return { userId, email: user.emailAddresses[0]?.emailAddress ?? '', name: user.fullName ?? undefined }\n  },\n  async handler(req) {\n    // Clerk handles auth via its own middleware — return 404 here\n    return new Response(null, { status: 404 })\n  },\n  async createUser(input) {\n    const user = await clerkClient.users.createUser({ emailAddress: [input.email], firstName: input.name })\n    return { userId: user.id }\n  },\n  async deleteUser(userId) {\n    await clerkClient.users.deleteUser(userId)\n  },\n}\n```\n\n---\n\n## Test mock\n\n```ts\nimport type { CloudAuthAdapter } from '@airdraft/cloud-auth'\n\nexport function createMockAuthAdapter(identity: { userId: string; email: string } | null): CloudAuthAdapter {\n  return {\n    async verifySession() { return identity },\n    async handler()       { return new Response(null, { status: 404 }) },\n    async createUser(i)   { return { userId: 'mock-' + i.email } },\n    async deleteUser()    { },\n  }\n}\n```\n\n---\n\n## Exports\n\n```ts\nimport type { CloudAuthAdapter, CloudIdentity, CreateUserInput } from '@airdraft/cloud-auth'\nimport { createBetterAuthAdapter } from '@airdraft/cloud-auth/better-auth'\n```\n","readmeFilename":"README.md"}