@delmaredigital/payload-better-auth 0.3.7 → 0.3.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -1
- package/dist/adapter/collections.d.ts.map +1 -1
- package/dist/adapter/collections.js +126 -88
- package/dist/adapter/collections.js.map +1 -1
- package/dist/adapter/index.js +197 -150
- package/dist/adapter/index.js.map +1 -1
- package/dist/components/BeforeLogin.d.ts +1 -1
- package/dist/components/BeforeLogin.d.ts.map +1 -1
- package/dist/components/BeforeLogin.js +15 -7
- package/dist/components/BeforeLogin.js.map +1 -1
- package/dist/components/LoginView.d.ts +2 -2
- package/dist/components/LoginView.d.ts.map +1 -1
- package/dist/components/LoginView.js +660 -218
- package/dist/components/LoginView.js.map +1 -1
- package/dist/components/LoginViewWrapper.d.ts +1 -1
- package/dist/components/LoginViewWrapper.d.ts.map +1 -1
- package/dist/components/LoginViewWrapper.js +14 -4
- package/dist/components/LoginViewWrapper.js.map +1 -1
- package/dist/components/LogoutButton.d.ts +1 -1
- package/dist/components/LogoutButton.d.ts.map +1 -1
- package/dist/components/LogoutButton.js +19 -11
- package/dist/components/LogoutButton.js.map +1 -1
- package/dist/components/PasskeyRegisterButton.d.ts +2 -2
- package/dist/components/PasskeyRegisterButton.d.ts.map +1 -1
- package/dist/components/PasskeyRegisterButton.js +20 -16
- package/dist/components/PasskeyRegisterButton.js.map +1 -1
- package/dist/components/PasskeySignInButton.d.ts +2 -2
- package/dist/components/PasskeySignInButton.d.ts.map +1 -1
- package/dist/components/PasskeySignInButton.js +14 -12
- package/dist/components/PasskeySignInButton.js.map +1 -1
- package/dist/components/auth/ForgotPasswordView.d.ts +1 -1
- package/dist/components/auth/ForgotPasswordView.d.ts.map +1 -1
- package/dist/components/auth/ForgotPasswordView.js +133 -43
- package/dist/components/auth/ForgotPasswordView.js.map +1 -1
- package/dist/components/auth/ResetPasswordView.d.ts +1 -1
- package/dist/components/auth/ResetPasswordView.d.ts.map +1 -1
- package/dist/components/auth/ResetPasswordView.js +154 -50
- package/dist/components/auth/ResetPasswordView.js.map +1 -1
- package/dist/components/auth/index.js +2 -2
- package/dist/components/auth/index.js.map +1 -1
- package/dist/components/management/ApiKeysManagementClient.d.ts +2 -2
- package/dist/components/management/ApiKeysManagementClient.d.ts.map +1 -1
- package/dist/components/management/ApiKeysManagementClient.js +539 -222
- package/dist/components/management/ApiKeysManagementClient.js.map +1 -1
- package/dist/components/management/PasskeysManagementClient.d.ts +2 -2
- package/dist/components/management/PasskeysManagementClient.d.ts.map +1 -1
- package/dist/components/management/PasskeysManagementClient.js +215 -92
- package/dist/components/management/PasskeysManagementClient.js.map +1 -1
- package/dist/components/management/SecurityNavLinks.d.ts +1 -1
- package/dist/components/management/SecurityNavLinks.d.ts.map +1 -1
- package/dist/components/management/SecurityNavLinks.js +51 -24
- package/dist/components/management/SecurityNavLinks.js.map +1 -1
- package/dist/components/management/TwoFactorManagementClient.d.ts +2 -2
- package/dist/components/management/TwoFactorManagementClient.d.ts.map +1 -1
- package/dist/components/management/TwoFactorManagementClient.js +270 -111
- package/dist/components/management/TwoFactorManagementClient.js.map +1 -1
- package/dist/components/management/index.js +2 -2
- package/dist/components/management/index.js.map +1 -1
- package/dist/components/management/views/ApiKeysView.d.ts +1 -1
- package/dist/components/management/views/ApiKeysView.d.ts.map +1 -1
- package/dist/components/management/views/ApiKeysView.js +19 -4
- package/dist/components/management/views/ApiKeysView.js.map +1 -1
- package/dist/components/management/views/PasskeysView.d.ts +1 -1
- package/dist/components/management/views/PasskeysView.d.ts.map +1 -1
- package/dist/components/management/views/PasskeysView.js +16 -4
- package/dist/components/management/views/PasskeysView.js.map +1 -1
- package/dist/components/management/views/TwoFactorView.d.ts +1 -1
- package/dist/components/management/views/TwoFactorView.d.ts.map +1 -1
- package/dist/components/management/views/TwoFactorView.js +16 -4
- package/dist/components/management/views/TwoFactorView.js.map +1 -1
- package/dist/components/management/views/index.js +2 -2
- package/dist/components/management/views/index.js.map +1 -1
- package/dist/components/twoFactor/TwoFactorSetupView.d.ts +1 -1
- package/dist/components/twoFactor/TwoFactorSetupView.d.ts.map +1 -1
- package/dist/components/twoFactor/TwoFactorSetupView.js +240 -87
- package/dist/components/twoFactor/TwoFactorSetupView.js.map +1 -1
- package/dist/components/twoFactor/TwoFactorVerifyView.d.ts +1 -1
- package/dist/components/twoFactor/TwoFactorVerifyView.d.ts.map +1 -1
- package/dist/components/twoFactor/TwoFactorVerifyView.js +108 -45
- package/dist/components/twoFactor/TwoFactorVerifyView.js.map +1 -1
- package/dist/components/twoFactor/index.js +2 -2
- package/dist/components/twoFactor/index.js.map +1 -1
- package/dist/exports/client.js +9 -10
- package/dist/exports/client.js.map +1 -1
- package/dist/exports/components.js +2 -2
- package/dist/exports/components.js.map +1 -1
- package/dist/exports/management.js +3 -3
- package/dist/exports/management.js.map +1 -1
- package/dist/exports/rsc.js +2 -2
- package/dist/exports/rsc.js.map +1 -1
- package/dist/generated-types.js +4 -2
- package/dist/generated-types.js.map +1 -1
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/dist/plugin/index.js +198 -162
- package/dist/plugin/index.js.map +1 -1
- package/dist/scripts/generate-types.js +66 -50
- package/dist/scripts/generate-types.js.map +1 -1
- package/dist/types/apiKey.js +7 -2
- package/dist/types/apiKey.js.map +1 -1
- package/dist/types/betterAuth.js +23 -2
- package/dist/types/betterAuth.js.map +1 -1
- package/dist/utils/access.js +78 -81
- package/dist/utils/access.js.map +1 -1
- package/dist/utils/apiKeyAccess.js +65 -72
- package/dist/utils/apiKeyAccess.js.map +1 -1
- package/dist/utils/betterAuthDefaults.js +8 -8
- package/dist/utils/betterAuthDefaults.js.map +1 -1
- package/dist/utils/detectAuthConfig.js +8 -11
- package/dist/utils/detectAuthConfig.js.map +1 -1
- package/dist/utils/detectEnabledPlugins.js +6 -7
- package/dist/utils/detectEnabledPlugins.js.map +1 -1
- package/dist/utils/firstUserAdmin.js +18 -20
- package/dist/utils/firstUserAdmin.js.map +1 -1
- package/dist/utils/generateScopes.js +40 -41
- package/dist/utils/generateScopes.js.map +1 -1
- package/dist/utils/session.js +8 -9
- package/dist/utils/session.js.map +1 -1
- package/package.json +27 -13
package/dist/plugin/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugin/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/plugin/index.ts"],"sourcesContent":["/**\n * Payload Plugins for Better Auth\n *\n * @packageDocumentation\n */\n\nimport type {\n Plugin,\n AuthStrategy,\n Payload,\n BasePayload,\n Endpoint,\n PayloadHandler,\n Config,\n} from 'payload'\nimport type { betterAuth, BetterAuthOptions } from 'better-auth'\nimport { detectAuthConfig } from '../utils/detectAuthConfig.js'\nimport {\n detectEnabledPlugins,\n type EnabledPluginsResult,\n} from '../utils/detectEnabledPlugins.js'\nimport type { ApiKeyScopesConfig } from '../types/apiKey.js'\nimport {\n buildAvailableScopes,\n scopesToPermissions,\n} from '../utils/generateScopes.js'\n\nexport type Auth = ReturnType<typeof betterAuth>\n// PayloadWithAuth from types\nimport type { PayloadWithAuth } from '../types/betterAuth.js'\nexport type { PayloadWithAuth } from '../types/betterAuth.js'\n\nexport type CreateAuthFunction = (payload: BasePayload) => Auth\n\nexport type BetterAuthPluginAdminOptions = {\n /** Disable auto-injection of logout button */\n disableLogoutButton?: boolean\n /** Disable auto-injection of BeforeLogin redirect */\n disableBeforeLogin?: boolean\n /** Disable auto-injection of login view */\n disableLoginView?: boolean\n /** Login page customization */\n login?: {\n /** Custom title for login page */\n title?: string\n /** Path to redirect after successful login. Default: '/admin' */\n afterLoginPath?: string\n /**\n * Required role(s) for admin access.\n * - string: Single role required (default: 'admin')\n * - string[]: Multiple roles (behavior depends on requireAllRoles)\n * - null: Disable role checking\n */\n requiredRole?: string | string[] | null\n /**\n * When requiredRole is an array, require ALL roles (true) or ANY role (false).\n * Default: false (any matching role grants access)\n */\n requireAllRoles?: boolean\n /**\n * Enable passkey (WebAuthn) sign-in option.\n * - true: Always show passkey button\n * - false: Never show passkey button\n * - 'auto': Auto-detect if passkey plugin is available (default for LoginView)\n * Default: false (for backwards compatibility)\n */\n enablePasskey?: boolean | 'auto'\n /**\n * Enable user registration (sign up) option.\n * - true: Always show \"Create account\" link\n * - false: Never show registration option\n * - 'auto': Auto-detect if sign-up endpoint is available\n * Default: 'auto' - LoginView automatically detects if Better Auth has signup enabled\n */\n enableSignUp?: boolean | 'auto'\n /**\n * Default role to assign to new users during registration.\n * Only used when enableSignUp is enabled.\n * Default: 'user'\n */\n defaultSignUpRole?: string\n /**\n * Enable forgot password option.\n * - true: Always show \"Forgot password?\" link\n * - false: Never show forgot password option\n * - 'auto': Auto-detect if password reset endpoint is available\n * Default: 'auto' - LoginView automatically detects if Better Auth has password reset enabled\n */\n enableForgotPassword?: boolean | 'auto'\n /**\n * Custom URL for password reset page. If provided, users will be redirected here\n * instead of showing the inline password reset form.\n */\n resetPasswordUrl?: string\n }\n /** Path to custom logout button component (import map format) */\n logoutButtonComponent?: string\n /** Path to custom BeforeLogin component (import map format) */\n beforeLoginComponent?: string\n /** Path to custom login view component (import map format) */\n loginViewComponent?: string\n\n /**\n * Enable management UI for security features (2FA, API keys).\n * Management views are auto-injected based on which Better Auth plugins are enabled.\n * @default true\n */\n enableManagementUI?: boolean\n /**\n * Better Auth options - used to detect which plugins are enabled.\n * Required for management UI to auto-detect enabled features.\n */\n betterAuthOptions?: Partial<BetterAuthOptions>\n /** Custom paths for management views */\n managementPaths?: {\n /** Two-factor management view path. Default: '/security/two-factor' */\n twoFactor?: string\n /** API keys management view path. Default: '/security/api-keys' */\n apiKeys?: string\n /** Passkeys management view path. Default: '/security/passkeys' */\n passkeys?: string\n }\n /**\n * API key scopes configuration.\n * Controls which permission scopes are available when creating API keys.\n * When not provided, scopes are auto-generated from Payload collections.\n */\n apiKey?: ApiKeyScopesConfig\n}\n\nexport type BetterAuthPluginOptions = {\n /**\n * Function that creates the Better Auth instance.\n * Called during Payload's onInit lifecycle.\n */\n createAuth: CreateAuthFunction\n\n /**\n * Base path for auth API endpoints (registered via Payload endpoints).\n * @default '/auth'\n */\n authBasePath?: string\n\n /**\n * Auto-register auth API endpoints via Payload's endpoint system.\n * Set to false if you need custom route-level handling (rare).\n * Note: All Better Auth customization (hooks, plugins, callbacks)\n * is done in createAuth - the route handler is just a passthrough.\n * @default true\n */\n autoRegisterEndpoints?: boolean\n\n /**\n * Auto-inject admin components when disableLocalStrategy is detected.\n * @default true\n */\n autoInjectAdminComponents?: boolean\n\n /**\n * Admin UI customization options.\n */\n admin?: BetterAuthPluginAdminOptions\n}\n\n// Track auth instance for HMR\nlet authInstance: Auth | null = null\n\n// Store API key scopes config for access by management views\nlet apiKeyScopesConfig: ApiKeyScopesConfig | undefined = undefined\n\n/**\n * Get the configured API key scopes config.\n * Used by the ApiKeysView to build available scopes.\n */\nexport function getApiKeyScopesConfig(): ApiKeyScopesConfig | undefined {\n return apiKeyScopesConfig\n}\n\n// Type for auth api methods we need\ntype AuthApi = {\n getSession: (options: { headers: Headers }) => Promise<{\n user?: { id: string } | null\n session?: Record<string, unknown> | null\n } | null>\n createApiKey?: (options: {\n body: {\n name?: string\n expiresIn?: number\n userId: string\n prefix?: string\n metadata?: Record<string, unknown>\n permissions?: Record<string, string[]>\n }\n }) => Promise<{\n key: string\n id: string\n name: string | null\n userId: string\n expiresAt: Date | null\n createdAt: Date\n metadata: Record<string, unknown> | null\n }>\n}\n\n/**\n * Handle API key creation with scopes server-side.\n * Converts scopes to permissions and calls Better Auth's server API.\n */\nasync function handleApiKeyCreateWithScopes(\n authApi: AuthApi,\n payload: Payload,\n headers: Headers,\n body: Record<string, unknown>\n): Promise<Response> {\n try {\n // Get the current session to find the user\n const session = await authApi.getSession({ headers })\n if (!session?.user?.id) {\n return new Response(\n JSON.stringify({ error: 'Unauthorized' }),\n { status: 401, headers: { 'Content-Type': 'application/json' } }\n )\n }\n\n // Extract scopes from the request body\n const scopes = (body.scopes as string[] | undefined) ?? []\n\n // Build permissions from scopes if any are provided\n let permissions: Record<string, string[]> | undefined\n if (scopes.length > 0) {\n const scopesConfig = getApiKeyScopesConfig()\n const availableScopes = buildAvailableScopes(\n payload.config.collections,\n scopesConfig\n )\n permissions = scopesToPermissions(scopes, availableScopes)\n }\n\n // Build the API key creation options\n const createOptions = {\n body: {\n name: body.name as string | undefined,\n userId: session.user.id,\n expiresIn: body.expiresIn as number | undefined,\n prefix: body.prefix as string | undefined,\n permissions: permissions && Object.keys(permissions).length > 0 ? permissions : undefined,\n metadata: scopes.length > 0\n ? { ...(body.metadata as Record<string, unknown> | undefined), scopes }\n : (body.metadata as Record<string, unknown> | undefined),\n },\n }\n\n // Call Better Auth's server-side API\n if (typeof authApi.createApiKey !== 'function') {\n return new Response(\n JSON.stringify({ error: 'API key plugin not enabled' }),\n { status: 400, headers: { 'Content-Type': 'application/json' } }\n )\n }\n\n try {\n const result = await authApi.createApiKey(createOptions)\n return new Response(JSON.stringify(result), {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n })\n } catch (createError) {\n // Check if error is due to metadata being disabled\n const errorMessage = createError instanceof Error ? createError.message : String(createError)\n const isMetadataDisabled = errorMessage.toLowerCase().includes('metadata') &&\n errorMessage.toLowerCase().includes('disabled')\n\n if (isMetadataDisabled && createOptions.body.metadata) {\n // Retry without metadata - key will still work, just won't show scopes in UI\n console.warn('[better-auth] Metadata disabled, creating API key without scope metadata. Enable metadata with apiKeyWithDefaults() for better UX.')\n const optionsWithoutMetadata = {\n body: {\n ...createOptions.body,\n metadata: undefined,\n },\n }\n const result = await authApi.createApiKey(optionsWithoutMetadata)\n return new Response(JSON.stringify(result), {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n })\n }\n\n // Re-throw other errors\n throw createError\n }\n } catch (error) {\n console.error('[better-auth] API key creation error:', error)\n const message = error instanceof Error ? error.message : 'Failed to create API key'\n return new Response(\n JSON.stringify({ error: message }),\n { status: 500, headers: { 'Content-Type': 'application/json' } }\n )\n }\n}\n\n/**\n * Creates the auth endpoint handler that proxies requests to Better Auth.\n */\nfunction createAuthEndpointHandler(): PayloadHandler {\n return async (req) => {\n const payloadWithAuth = req.payload as PayloadWithAuth\n const auth = payloadWithAuth.betterAuth\n\n if (!auth) {\n return new Response(\n JSON.stringify({ error: 'Better Auth not initialized' }),\n { status: 500, headers: { 'Content-Type': 'application/json' } }\n )\n }\n\n try {\n // Construct the full URL for Better Auth\n // PayloadRequest provides these properties\n const protocol = req.headers.get('x-forwarded-proto') || 'http'\n const host = req.headers.get('host') || 'localhost'\n const pathname = (req as unknown as { pathname?: string }).pathname || ''\n const search =\n (req as unknown as { search?: string }).search ||\n (req as unknown as { url?: string }).url?.split('?')[1] ||\n ''\n\n const url = new URL(pathname, `${protocol}://${host}`)\n if (search) {\n url.search = search.startsWith('?') ? search : `?${search}`\n }\n\n // Get request body for non-GET methods\n let body: string | undefined\n let parsedBody: Record<string, unknown> | undefined\n if (req.method && !['GET', 'HEAD'].includes(req.method)) {\n try {\n // Try to get body from request\n if (typeof (req as unknown as { text?: () => Promise<string> }).text === 'function') {\n body = await (req as unknown as { text: () => Promise<string> }).text()\n if (body) {\n try {\n parsedBody = JSON.parse(body)\n } catch {\n // Not JSON, that's okay\n }\n }\n } else if ((req as unknown as { data?: unknown }).data) {\n parsedBody = (req as unknown as { data: Record<string, unknown> }).data\n body = JSON.stringify(parsedBody)\n }\n } catch {\n // Body might already be consumed, try data property\n if ((req as unknown as { data?: unknown }).data) {\n parsedBody = (req as unknown as { data: Record<string, unknown> }).data\n body = JSON.stringify(parsedBody)\n }\n }\n }\n\n // Intercept API key creation requests with scopes\n // Better Auth's API key create endpoint is POST /api-key/create\n const isApiKeyCreate =\n req.method === 'POST' &&\n pathname.endsWith('/api-key/create') &&\n parsedBody?.scopes &&\n Array.isArray(parsedBody.scopes)\n\n if (isApiKeyCreate && parsedBody) {\n return handleApiKeyCreateWithScopes(\n auth.api as unknown as AuthApi,\n req.payload,\n req.headers,\n parsedBody\n )\n }\n\n // Create a new Request for Better Auth\n const request = new Request(url.toString(), {\n method: req.method || 'GET',\n headers: req.headers,\n body,\n })\n\n const response = await auth.handler(request)\n\n return response\n } catch (error) {\n console.error('[better-auth] Endpoint handler error:', error)\n return new Response(\n JSON.stringify({ error: 'Internal server error' }),\n { status: 500, headers: { 'Content-Type': 'application/json' } }\n )\n }\n }\n}\n\n/**\n * Generates Payload endpoints for Better Auth.\n */\nfunction generateAuthEndpoints(basePath: string): Endpoint[] {\n const handler = createAuthEndpointHandler()\n const methods = ['get', 'post', 'patch', 'put', 'delete'] as const\n\n return methods.map((method) => ({\n path: `${basePath}/:path*`,\n method,\n handler,\n }))\n}\n\n/**\n * Injects admin components into the Payload config when disableLocalStrategy is detected.\n */\nfunction injectAdminComponents(\n config: Config,\n options: BetterAuthPluginOptions\n): Config {\n const authDetection = detectAuthConfig(config)\n\n // Skip if not using disableLocalStrategy or auto-injection is disabled\n if (\n !authDetection.hasDisableLocalStrategy ||\n options.autoInjectAdminComponents === false\n ) {\n return config\n }\n\n const adminOptions = options.admin ?? {}\n const existingComponents = config.admin?.components ?? {}\n\n // Build logout button config\n const logoutButton = adminOptions.disableLogoutButton\n ? (existingComponents.logout as { Button?: string })?.Button\n : adminOptions.logoutButtonComponent ??\n '@delmaredigital/payload-better-auth/components#LogoutButton'\n\n // Build beforeLogin config\n const existingBeforeLogin = existingComponents.beforeLogin ?? []\n const beforeLogin = adminOptions.disableBeforeLogin\n ? existingBeforeLogin\n : [\n ...(Array.isArray(existingBeforeLogin)\n ? existingBeforeLogin\n : [existingBeforeLogin]),\n adminOptions.beforeLoginComponent ??\n '@delmaredigital/payload-better-auth/components#BeforeLogin',\n ]\n\n // Build login view config\n const existingViews =\n (existingComponents.views as Record<string, unknown> | undefined) ?? {}\n const newLoginView = adminOptions.disableLoginView\n ? undefined\n : {\n Component:\n adminOptions.loginViewComponent ??\n '@delmaredigital/payload-better-auth/rsc#LoginViewWrapper',\n path: '/login' as const,\n }\n\n const views = {\n ...existingViews,\n ...(newLoginView ? { login: newLoginView } : {}),\n }\n\n // Store login config in config.custom for the RSC wrapper to read\n const loginConfig = adminOptions.login ?? {}\n\n // Note: enabledPlugins will be added by injectManagementComponents\n return {\n ...config,\n custom: {\n ...config.custom,\n betterAuth: {\n ...(config.custom?.betterAuth as Record<string, unknown> | undefined),\n login: loginConfig,\n },\n },\n admin: {\n ...config.admin,\n components: {\n ...existingComponents,\n logout: logoutButton\n ? {\n ...(typeof existingComponents.logout === 'object'\n ? existingComponents.logout\n : {}),\n Button: logoutButton,\n }\n : existingComponents.logout,\n beforeLogin,\n views,\n },\n },\n } as Config\n}\n\n/**\n * Injects management UI components into the Payload config based on enabled plugins.\n */\nfunction injectManagementComponents(\n config: Config,\n options: BetterAuthPluginOptions\n): Config {\n const adminOptions = options.admin ?? {}\n\n // Skip if management UI is disabled\n if (adminOptions.enableManagementUI === false) {\n return config\n }\n\n // Detect which plugins are enabled\n const enabledPlugins = detectEnabledPlugins(adminOptions.betterAuthOptions)\n\n // Get custom paths or use defaults\n const paths = {\n twoFactor: adminOptions.managementPaths?.twoFactor ?? '/security/two-factor',\n apiKeys: adminOptions.managementPaths?.apiKeys ?? '/security/api-keys',\n passkeys: adminOptions.managementPaths?.passkeys ?? '/security/passkeys',\n }\n\n const existingComponents = config.admin?.components ?? {}\n const existingViews =\n (existingComponents.views as Record<string, unknown> | undefined) ?? {}\n const existingAfterNavLinks = existingComponents.afterNavLinks ?? []\n\n // Build management views based on enabled plugins\n // Note: Sessions and passkeys use Payload's default collection views\n const managementViews: Record<string, { Component: string; path: string }> = {}\n\n // Two-factor (if enabled)\n if (enabledPlugins.hasTwoFactor) {\n managementViews.securityTwoFactor = {\n Component: '@delmaredigital/payload-better-auth/rsc#TwoFactorView',\n path: paths.twoFactor,\n }\n }\n\n // API keys (if enabled)\n if (enabledPlugins.hasApiKey) {\n managementViews.securityApiKeys = {\n Component: '@delmaredigital/payload-better-auth/rsc#ApiKeysView',\n path: paths.apiKeys,\n }\n }\n\n // Passkeys (if enabled)\n if (enabledPlugins.hasPasskey) {\n managementViews.securityPasskeys = {\n Component: '@delmaredigital/payload-better-auth/rsc#PasskeysView',\n path: paths.passkeys,\n }\n }\n\n // Only add nav links if at least one plugin is enabled\n const hasAnyPlugin = enabledPlugins.hasTwoFactor || enabledPlugins.hasApiKey || enabledPlugins.hasPasskey\n\n // Add SecurityNavLinks to afterNavLinks with clientProps for enabled plugins\n const afterNavLinks = hasAnyPlugin\n ? [\n ...(Array.isArray(existingAfterNavLinks)\n ? existingAfterNavLinks\n : [existingAfterNavLinks]),\n {\n path: '@delmaredigital/payload-better-auth/components/management#SecurityNavLinks',\n clientProps: {\n showTwoFactor: enabledPlugins.hasTwoFactor,\n showApiKeys: enabledPlugins.hasApiKey,\n showPasskeys: enabledPlugins.hasPasskey,\n },\n },\n ]\n : existingAfterNavLinks\n\n return {\n ...config,\n admin: {\n ...config.admin,\n components: {\n ...existingComponents,\n views: {\n ...existingViews,\n ...managementViews,\n },\n afterNavLinks,\n },\n },\n } as Config\n}\n\n/**\n * Payload plugin that initializes Better Auth.\n *\n * Better Auth is created in onInit (after Payload is ready) to avoid\n * circular dependency issues. The auth instance is then attached to\n * payload.betterAuth for access throughout the app.\n *\n * Features:\n * - Auto-registers auth API endpoints (configurable)\n * - Auto-injects admin components when disableLocalStrategy is detected\n * - Auto-injects management UI for security features based on enabled plugins\n * - Handles HMR gracefully\n *\n * @example\n * ```ts\n * import { createBetterAuthPlugin } from '@delmaredigital/payload-better-auth/plugin'\n *\n * export default buildConfig({\n * plugins: [\n * createBetterAuthPlugin({\n * createAuth: (payload) => betterAuth({\n * database: payloadAdapter({ payloadClient: payload, ... }),\n * // ... other options\n * }),\n * }),\n * ],\n * })\n * ```\n */\nexport function createBetterAuthPlugin(\n options: BetterAuthPluginOptions\n): Plugin {\n const {\n createAuth,\n authBasePath = '/auth',\n autoRegisterEndpoints = true,\n autoInjectAdminComponents = true,\n } = options\n\n // Store API key scopes config for access by management views\n apiKeyScopesConfig = options.admin?.apiKey\n\n return (incomingConfig) => {\n // Inject admin components if enabled\n let config =\n autoInjectAdminComponents\n ? injectAdminComponents(incomingConfig, options)\n : incomingConfig\n\n // Inject management UI components\n config = injectManagementComponents(config, options)\n\n // Generate auth endpoints if enabled\n const authEndpoints = autoRegisterEndpoints\n ? generateAuthEndpoints(authBasePath)\n : []\n\n // Merge endpoints\n const existingEndpoints = config.endpoints ?? []\n\n // Get existing onInit\n const existingOnInit = config.onInit\n\n return {\n ...config,\n endpoints: [...existingEndpoints, ...authEndpoints],\n onInit: async (payload) => {\n if (existingOnInit) {\n await existingOnInit(payload)\n }\n\n // Check if already attached (HMR scenario)\n if ('betterAuth' in payload) {\n return\n }\n\n // Reuse or create auth instance\n if (!authInstance) {\n try {\n authInstance = createAuth(payload)\n } catch (error) {\n console.error('[better-auth] Failed to create auth:', error)\n throw error\n }\n }\n\n // Attach to payload for global access\n Object.defineProperty(payload, 'betterAuth', {\n value: authInstance,\n writable: false,\n enumerable: false,\n configurable: false,\n })\n },\n }\n }\n}\n\nexport type BetterAuthStrategyOptions = {\n /**\n * The collection slug for users\n * @default 'users'\n */\n usersCollection?: string\n /**\n * The collection slug for organization members (used for organization role lookup)\n * @default 'members'\n */\n membersCollection?: string\n}\n\n/**\n * Payload auth strategy that uses Better Auth for authentication.\n *\n * Use this in your Users collection to authenticate via Better Auth sessions.\n *\n * Session fields (like `activeOrganizationId` from the organization plugin) are\n * automatically merged onto `req.user`, making them available in access control functions.\n *\n * If an active organization is set, the user's role in that organization is also\n * fetched and available as `req.user.organizationRole`.\n *\n * @example\n * ```ts\n * import { betterAuthStrategy } from '@delmaredigital/payload-better-auth/plugin'\n *\n * export const Users: CollectionConfig = {\n * slug: 'users',\n * auth: {\n * disableLocalStrategy: true,\n * strategies: [betterAuthStrategy()],\n * },\n * // ...\n * }\n * ```\n *\n * @example Access control with organization data\n * ```ts\n * // In your access control:\n * export const orgReadAccess: Access = ({ req }) => {\n * if (!req.user?.activeOrganizationId) return false\n * return {\n * organization: { equals: req.user.activeOrganizationId }\n * }\n * }\n * ```\n */\nexport function betterAuthStrategy(\n options: BetterAuthStrategyOptions = {}\n): AuthStrategy {\n const { usersCollection = 'users', membersCollection = 'members' } = options\n\n return {\n name: 'better-auth',\n authenticate: async ({\n payload,\n headers,\n }: {\n payload: Payload\n headers: Headers\n }) => {\n try {\n const payloadWithAuth = payload as PayloadWithAuth\n const auth = payloadWithAuth.betterAuth\n\n if (!auth) {\n console.error('Better Auth not initialized on payload instance')\n return { user: null }\n }\n\n const sessionData = await auth.api.getSession({ headers })\n\n if (!sessionData?.user?.id) {\n return { user: null }\n }\n\n const users = await payload.find({\n collection: usersCollection,\n where: { id: { equals: sessionData.user.id } },\n limit: 1,\n depth: 0,\n })\n\n if (users.docs.length === 0) {\n return { user: null }\n }\n\n // Extract session fields to merge onto user (e.g., activeOrganizationId from org plugin)\n // Exclude fields that might conflict with user fields\n const {\n id: _sessionId,\n userId: _userId,\n expiresAt: _expiresAt,\n token: _token,\n ...sessionFields\n } = (sessionData.session as Record<string, unknown>) || {}\n\n // If there's an active organization, fetch the user's role in that org\n let organizationRole: string | undefined\n if (sessionFields.activeOrganizationId) {\n try {\n const memberships = await payload.find({\n collection: membersCollection,\n where: {\n and: [\n { user: { equals: sessionData.user.id } },\n { organization: { equals: sessionFields.activeOrganizationId } },\n ],\n },\n limit: 1,\n depth: 0,\n })\n if (memberships.docs.length > 0) {\n organizationRole = (memberships.docs[0] as { role?: string }).role\n }\n } catch {\n // Members collection might not exist (org plugin not used), silently ignore\n }\n }\n\n return {\n user: {\n ...users.docs[0],\n ...sessionFields, // Merge session fields (activeOrganizationId, etc.)\n ...(organizationRole && { organizationRole }), // Add org role if found\n collection: usersCollection,\n _strategy: 'better-auth',\n },\n }\n } catch (error) {\n console.error('Better Auth strategy error:', error)\n return { user: null }\n }\n },\n }\n}\n\n/**\n * Reset the auth instance (useful for testing)\n */\nexport function resetAuthInstance(): void {\n authInstance = null\n}\n"],"names":["detectAuthConfig","detectEnabledPlugins","buildAvailableScopes","scopesToPermissions","authInstance","apiKeyScopesConfig","undefined","getApiKeyScopesConfig","handleApiKeyCreateWithScopes","authApi","payload","headers","body","session","getSession","user","id","Response","JSON","stringify","error","status","scopes","permissions","length","scopesConfig","availableScopes","config","collections","createOptions","name","userId","expiresIn","prefix","Object","keys","metadata","createApiKey","result","createError","errorMessage","Error","message","String","isMetadataDisabled","toLowerCase","includes","console","warn","optionsWithoutMetadata","createAuthEndpointHandler","req","payloadWithAuth","auth","betterAuth","protocol","get","host","pathname","search","url","split","URL","startsWith","parsedBody","method","text","parse","data","isApiKeyCreate","endsWith","Array","isArray","api","request","Request","toString","response","handler","generateAuthEndpoints","basePath","methods","map","path","injectAdminComponents","options","authDetection","hasDisableLocalStrategy","autoInjectAdminComponents","adminOptions","admin","existingComponents","components","logoutButton","disableLogoutButton","logout","Button","logoutButtonComponent","existingBeforeLogin","beforeLogin","disableBeforeLogin","beforeLoginComponent","existingViews","views","newLoginView","disableLoginView","Component","loginViewComponent","login","loginConfig","custom","injectManagementComponents","enableManagementUI","enabledPlugins","betterAuthOptions","paths","twoFactor","managementPaths","apiKeys","passkeys","existingAfterNavLinks","afterNavLinks","managementViews","hasTwoFactor","securityTwoFactor","hasApiKey","securityApiKeys","hasPasskey","securityPasskeys","hasAnyPlugin","clientProps","showTwoFactor","showApiKeys","showPasskeys","createBetterAuthPlugin","createAuth","authBasePath","autoRegisterEndpoints","apiKey","incomingConfig","authEndpoints","existingEndpoints","endpoints","existingOnInit","onInit","defineProperty","value","writable","enumerable","configurable","betterAuthStrategy","usersCollection","membersCollection","authenticate","sessionData","users","find","collection","where","equals","limit","depth","docs","_sessionId","_userId","expiresAt","_expiresAt","token","_token","sessionFields","organizationRole","activeOrganizationId","memberships","and","organization","role","_strategy","resetAuthInstance"],"mappings":"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"}
|
|
@@ -5,10 +5,9 @@
|
|
|
5
5
|
* and diffing plugin additions against the base schema.
|
|
6
6
|
*
|
|
7
7
|
* Run with: pnpm generate:types
|
|
8
|
-
*/
|
|
9
|
-
import { passkey } from '@better-auth/passkey';
|
|
8
|
+
*/ import { passkey } from '@better-auth/passkey';
|
|
10
9
|
import { getSchema } from 'better-auth/db';
|
|
11
|
-
import { admin, anonymous, apiKey, bearer, emailOTP, genericOAuth, jwt, magicLink, multiSession, oidcProvider, oneTap, oneTimeToken, openAPI, organization, phoneNumber, twoFactor, username
|
|
10
|
+
import { admin, anonymous, apiKey, bearer, emailOTP, genericOAuth, jwt, magicLink, multiSession, oidcProvider, oneTap, oneTimeToken, openAPI, organization, phoneNumber, twoFactor, username } from 'better-auth/plugins';
|
|
12
11
|
import fs from 'node:fs/promises';
|
|
13
12
|
import path from 'node:path';
|
|
14
13
|
import { fileURLToPath } from 'node:url';
|
|
@@ -20,45 +19,63 @@ const plugins = [
|
|
|
20
19
|
apiKey(),
|
|
21
20
|
passkey(),
|
|
22
21
|
bearer(),
|
|
23
|
-
emailOTP({
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
emailOTP({
|
|
23
|
+
sendVerificationOTP: async ()=>{}
|
|
24
|
+
}),
|
|
25
|
+
magicLink({
|
|
26
|
+
sendMagicLink: async ()=>{}
|
|
27
|
+
}),
|
|
28
|
+
phoneNumber({
|
|
29
|
+
sendOTP: async ()=>{}
|
|
30
|
+
}),
|
|
26
31
|
oneTap(),
|
|
27
32
|
anonymous(),
|
|
28
33
|
multiSession(),
|
|
29
34
|
oneTimeToken(),
|
|
30
|
-
oidcProvider({
|
|
35
|
+
oidcProvider({
|
|
36
|
+
loginPage: ''
|
|
37
|
+
}),
|
|
31
38
|
genericOAuth({
|
|
32
39
|
config: [
|
|
33
40
|
{
|
|
34
41
|
providerId: 'generic',
|
|
35
42
|
clientId: 'generic',
|
|
36
|
-
clientSecret: 'generic'
|
|
37
|
-
}
|
|
38
|
-
]
|
|
43
|
+
clientSecret: 'generic'
|
|
44
|
+
}
|
|
45
|
+
]
|
|
39
46
|
}),
|
|
40
47
|
openAPI(),
|
|
41
48
|
organization({
|
|
42
|
-
teams: {
|
|
49
|
+
teams: {
|
|
50
|
+
enabled: true
|
|
51
|
+
}
|
|
43
52
|
}),
|
|
44
53
|
jwt(),
|
|
45
|
-
twoFactor()
|
|
54
|
+
twoFactor()
|
|
46
55
|
];
|
|
47
56
|
const betterAuthConfig = {
|
|
48
|
-
emailAndPassword: {
|
|
57
|
+
emailAndPassword: {
|
|
58
|
+
enabled: true
|
|
59
|
+
},
|
|
49
60
|
user: {
|
|
50
61
|
additionalFields: {
|
|
51
|
-
role: {
|
|
52
|
-
|
|
62
|
+
role: {
|
|
63
|
+
type: 'string',
|
|
64
|
+
defaultValue: 'user',
|
|
65
|
+
input: false
|
|
66
|
+
}
|
|
67
|
+
}
|
|
53
68
|
},
|
|
54
|
-
plugins
|
|
69
|
+
plugins
|
|
55
70
|
};
|
|
56
|
-
const baseSchema = getSchema({
|
|
71
|
+
const baseSchema = getSchema({
|
|
72
|
+
...betterAuthConfig,
|
|
73
|
+
plugins: []
|
|
74
|
+
});
|
|
57
75
|
/**
|
|
58
76
|
* Map Better Auth field types to TypeScript types
|
|
59
|
-
*/
|
|
60
|
-
|
|
61
|
-
switch (t) {
|
|
77
|
+
*/ function mapType(t) {
|
|
78
|
+
switch(t){
|
|
62
79
|
case 'boolean':
|
|
63
80
|
return 'boolean';
|
|
64
81
|
case 'date':
|
|
@@ -77,29 +94,22 @@ function mapType(t) {
|
|
|
77
94
|
}
|
|
78
95
|
/**
|
|
79
96
|
* Convert string to PascalCase
|
|
80
|
-
*/
|
|
81
|
-
|
|
82
|
-
return s
|
|
83
|
-
.split(/[-_]/g)
|
|
84
|
-
.map((p) => p.charAt(0).toUpperCase() + p.slice(1))
|
|
85
|
-
.join('');
|
|
97
|
+
*/ function pascal(s) {
|
|
98
|
+
return s.split(/[-_]/g).map((p)=>p.charAt(0).toUpperCase() + p.slice(1)).join('');
|
|
86
99
|
}
|
|
87
100
|
/**
|
|
88
101
|
* Find fields added by a plugin compared to base schema
|
|
89
|
-
*/
|
|
90
|
-
function diff(base, target) {
|
|
102
|
+
*/ function diff(base, target) {
|
|
91
103
|
const d = {};
|
|
92
|
-
for (const [m, { fields }] of Object.entries(target))
|
|
93
|
-
const added = Object.entries(fields).filter(([k])
|
|
94
|
-
if (added.length)
|
|
95
|
-
d[m] = Object.fromEntries(added);
|
|
104
|
+
for (const [m, { fields }] of Object.entries(target)){
|
|
105
|
+
const added = Object.entries(fields).filter(([k])=>!(k in (base[m]?.fields ?? {})));
|
|
106
|
+
if (added.length) d[m] = Object.fromEntries(added);
|
|
96
107
|
}
|
|
97
108
|
return d;
|
|
98
109
|
}
|
|
99
110
|
/**
|
|
100
111
|
* Generate TypeScript type definitions
|
|
101
|
-
*/
|
|
102
|
-
function generate() {
|
|
112
|
+
*/ function generate() {
|
|
103
113
|
let out = `/**
|
|
104
114
|
* Auto-generated Better Auth types.
|
|
105
115
|
* DO NOT EDIT - Run \`pnpm generate:types\` to regenerate.
|
|
@@ -112,13 +122,17 @@ function generate() {
|
|
|
112
122
|
const pluginAdds = {};
|
|
113
123
|
const seen = new Set();
|
|
114
124
|
// Diff each plugin's schema against base to find additions
|
|
115
|
-
for (const pl of plugins)
|
|
125
|
+
for (const pl of plugins){
|
|
116
126
|
const id = pl.id;
|
|
117
|
-
if (!id || seen.has(id))
|
|
118
|
-
continue;
|
|
127
|
+
if (!id || seen.has(id)) continue;
|
|
119
128
|
seen.add(id);
|
|
120
|
-
const adds = diff(baseSchema, getSchema({
|
|
121
|
-
|
|
129
|
+
const adds = diff(baseSchema, getSchema({
|
|
130
|
+
...betterAuthConfig,
|
|
131
|
+
plugins: [
|
|
132
|
+
pl
|
|
133
|
+
]
|
|
134
|
+
}));
|
|
135
|
+
for (const [m, f] of Object.entries(adds)){
|
|
122
136
|
pluginAdds[m] ??= {};
|
|
123
137
|
pluginAdds[m][id] = f;
|
|
124
138
|
}
|
|
@@ -126,10 +140,10 @@ function generate() {
|
|
|
126
140
|
// Collect all models from base and plugins
|
|
127
141
|
const models = new Set([
|
|
128
142
|
...Object.keys(baseSchema),
|
|
129
|
-
...Object.keys(pluginAdds)
|
|
143
|
+
...Object.keys(pluginAdds)
|
|
130
144
|
]);
|
|
131
145
|
// Generate types for each model
|
|
132
|
-
for (const model of models)
|
|
146
|
+
for (const model of models){
|
|
133
147
|
const P = pascal(model);
|
|
134
148
|
const base = baseSchema[model]?.fields ?? {};
|
|
135
149
|
const pluginsForModel = pluginAdds[model] ?? {};
|
|
@@ -137,7 +151,7 @@ function generate() {
|
|
|
137
151
|
// Base fields type
|
|
138
152
|
if (Object.keys(base).length) {
|
|
139
153
|
out += `export type Base${P}Fields = {\n`;
|
|
140
|
-
for (const [k, f] of Object.entries(base))
|
|
154
|
+
for (const [k, f] of Object.entries(base)){
|
|
141
155
|
const fieldName = f.fieldName ?? k;
|
|
142
156
|
const optional = f.required ? '' : '?';
|
|
143
157
|
out += ` ${fieldName}${optional}: ${mapType(f.type)}\n`;
|
|
@@ -148,9 +162,9 @@ function generate() {
|
|
|
148
162
|
const needPluginMap = pluginIds.length > 1 || Object.keys(base).length;
|
|
149
163
|
if (needPluginMap && pluginIds.length) {
|
|
150
164
|
out += `export type ${P}PluginFields = {\n`;
|
|
151
|
-
for (const [pid, flds] of Object.entries(pluginsForModel))
|
|
165
|
+
for (const [pid, flds] of Object.entries(pluginsForModel)){
|
|
152
166
|
out += ` ${JSON.stringify(pid)}: {\n`;
|
|
153
|
-
for (const [k, f] of Object.entries(flds))
|
|
167
|
+
for (const [k, f] of Object.entries(flds)){
|
|
154
168
|
const fieldName = f.fieldName ?? k;
|
|
155
169
|
const optional = f.required ? '' : '?';
|
|
156
170
|
out += ` ${fieldName}${optional}: ${mapType(f.type)}\n`;
|
|
@@ -163,7 +177,7 @@ function generate() {
|
|
|
163
177
|
if (!Object.keys(base).length && pluginIds.length === 1) {
|
|
164
178
|
const only = pluginIds[0];
|
|
165
179
|
out += `export type ${P}Fields = {\n`;
|
|
166
|
-
for (const [k, f] of Object.entries(pluginsForModel[only]))
|
|
180
|
+
for (const [k, f] of Object.entries(pluginsForModel[only])){
|
|
167
181
|
const fieldName = f.fieldName ?? k;
|
|
168
182
|
const optional = f.required ? '' : '?';
|
|
169
183
|
out += ` ${fieldName}${optional}: ${mapType(f.type)}\n`;
|
|
@@ -174,16 +188,17 @@ function generate() {
|
|
|
174
188
|
}
|
|
175
189
|
// Combined type as intersection
|
|
176
190
|
const parts = [];
|
|
177
|
-
if (Object.keys(base).length)
|
|
178
|
-
parts.push(`Base${P}Fields`);
|
|
191
|
+
if (Object.keys(base).length) parts.push(`Base${P}Fields`);
|
|
179
192
|
if (pluginIds.length) {
|
|
180
193
|
const mapName = needPluginMap ? `${P}PluginFields` : undefined;
|
|
181
|
-
parts.push(...pluginIds.map((id)
|
|
194
|
+
parts.push(...pluginIds.map((id)=>mapName ? `${mapName}[${JSON.stringify(id)}]` : 'never'));
|
|
182
195
|
}
|
|
183
196
|
out += `export type ${P} = ${parts.join(' & ')}\n\n`;
|
|
184
197
|
}
|
|
185
198
|
// Plugin ID union type
|
|
186
|
-
const pluginIdUnion = [
|
|
199
|
+
const pluginIdUnion = [
|
|
200
|
+
...seen
|
|
201
|
+
].map((id)=>JSON.stringify(id)).join(' | ');
|
|
187
202
|
out += `/**
|
|
188
203
|
* Union of all supported plugin identifiers.
|
|
189
204
|
*/
|
|
@@ -193,7 +208,7 @@ export type PluginId = ${pluginIdUnion}\n\n`;
|
|
|
193
208
|
* Complete schema mapping of all models to their types.
|
|
194
209
|
*/
|
|
195
210
|
export type BetterAuthFullSchema = {\n`;
|
|
196
|
-
for (const model of models)
|
|
211
|
+
for (const model of models){
|
|
197
212
|
const P = pascal(model);
|
|
198
213
|
out += ` ${JSON.stringify(model)}: ${P}\n`;
|
|
199
214
|
}
|
|
@@ -211,4 +226,5 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
|
211
226
|
const outputFile = path.resolve(__dirname, '../generated-types.ts');
|
|
212
227
|
await fs.writeFile(outputFile, generated, 'utf8');
|
|
213
228
|
console.log(`Generated types written to ${outputFile}`);
|
|
229
|
+
|
|
214
230
|
//# sourceMappingURL=generate-types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-types.js","sourceRoot":"","sources":["../../src/scripts/generate-types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAE9C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EACL,KAAK,EACL,SAAS,EACT,MAAM,EACN,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,GAAG,EACH,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,MAAM,EACN,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,WAAW,EACX,SAAS,EACT,QAAQ,GACT,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACjC,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAIxC,wCAAwC;AACxC,gDAAgD;AAChD,MAAM,OAAO,GAAG;IACd,QAAQ,EAAE;IACV,KAAK,EAAE;IACP,MAAM,EAAE;IACR,OAAO,EAAE;IACT,MAAM,EAAE;IACR,QAAQ,CAAC,EAAE,mBAAmB,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC,EAAE,CAAC;IACjD,SAAS,CAAC,EAAE,aAAa,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC,EAAE,CAAC;IAC5C,WAAW,CAAC,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC,EAAE,CAAC;IACxC,MAAM,EAAE;IACR,SAAS,EAAE;IACX,YAAY,EAAE;IACd,YAAY,EAAE;IACd,YAAY,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IAC/B,YAAY,CAAC;QACX,MAAM,EAAE;YACN;gBACE,UAAU,EAAE,SAAS;gBACrB,QAAQ,EAAE,SAAS;gBACnB,YAAY,EAAE,SAAS;aACxB;SACF;KACF,CAAC;IACF,OAAO,EAAE;IACT,YAAY,CAAC;QACX,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;KACzB,CAAC;IACF,GAAG,EAAE;IACL,SAAS,EAAE;CACZ,CAAA;AAED,MAAM,gBAAgB,GAAG;IACvB,gBAAgB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;IACnC,IAAI,EAAE;QACJ,gBAAgB,EAAE;YAChB,IAAI,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE;SACtE;KACF;IACD,OAAO;CACR,CAAA;AAED,MAAM,UAAU,GAAG,SAAS,CAAC,EAAE,GAAG,gBAAgB,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAA;AAElE;;GAEG;AACH,SAAS,OAAO,CAAC,CAAS;IACxB,QAAQ,CAAC,EAAE,CAAC;QACV,KAAK,SAAS;YACZ,OAAO,SAAS,CAAA;QAClB,KAAK,MAAM;YACT,OAAO,MAAM,CAAA;QACf,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAA;QACjB,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAA;QACjB,KAAK,UAAU;YACb,OAAO,UAAU,CAAA;QACnB,KAAK,UAAU;YACb,OAAO,UAAU,CAAA;QACnB;YACE,OAAO,SAAS,CAAA;IACpB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,MAAM,CAAC,CAAS;IACvB,OAAO,CAAC;SACL,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAClD,IAAI,CAAC,EAAE,CAAC,CAAA;AACb,CAAC;AAED;;GAEG;AACH,SAAS,IAAI,CACX,IAAY,EACZ,MAAc;IAEd,MAAM,CAAC,GAAqD,EAAE,CAAA;IAC9D,KAAK,MAAM,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACrD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CACzC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,CACzC,CAAA;QACD,IAAI,KAAK,CAAC,MAAM;YAAE,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;IACpD,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC;AAED;;GAEG;AACH,SAAS,QAAQ;IACf,IAAI,GAAG,GAAG;;;;;;;;CAQX,CAAA;IAEC,MAAM,UAAU,GAGZ,EAAE,CAAA;IACN,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAE9B,2DAA2D;IAC3D,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;QACzB,MAAM,EAAE,GAAI,EAAsB,CAAC,EAAE,CAAA;QACrC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,SAAQ;QACjC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACZ,MAAM,IAAI,GAAG,IAAI,CACf,UAAU,EACV,SAAS,CAAC,EAAE,GAAG,gBAAgB,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAClD,CAAA;QACD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,CAAA;YACpB,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;QACvB,CAAC;IACH,CAAC;IAED,2CAA2C;IAC3C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAS;QAC7B,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;QAC1B,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;KAC3B,CAAC,CAAA;IAEF,gCAAgC;IAChC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;QACvB,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,EAAE,CAAA;QAC5C,MAAM,eAAe,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;QAC/C,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;QAE9C,mBAAmB;QACnB,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YAC7B,GAAG,IAAI,mBAAmB,CAAC,cAAc,CAAA;YACzC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1C,MAAM,SAAS,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAA;gBAClC,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA;gBACtC,GAAG,IAAI,KAAK,SAAS,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,IAAc,CAAC,IAAI,CAAA;YACpE,CAAC;YACD,GAAG,IAAI,OAAO,CAAA;QAChB,CAAC;QAED,wBAAwB;QACxB,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAA;QACtE,IAAI,aAAa,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;YACtC,GAAG,IAAI,eAAe,CAAC,oBAAoB,CAAA;YAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;gBAC1D,GAAG,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAA;gBACtC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC1C,MAAM,SAAS,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAA;oBAClC,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA;oBACtC,GAAG,IAAI,OAAO,SAAS,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,IAAc,CAAC,IAAI,CAAA;gBACtE,CAAC;gBACD,GAAG,IAAI,OAAO,CAAA;YAChB,CAAC;YACD,GAAG,IAAI,OAAO,CAAA;QAChB,CAAC;QAED,mCAAmC;QACnC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAA;YACzB,GAAG,IAAI,eAAe,CAAC,cAAc,CAAA;YACrC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gBAC3D,MAAM,SAAS,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAA;gBAClC,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA;gBACtC,GAAG,IAAI,KAAK,SAAS,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,IAAc,CAAC,IAAI,CAAA;YACpE,CAAC;YACD,GAAG,IAAI,OAAO,CAAA;YACd,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,YAAY,CAAA;YAC1C,SAAQ;QACV,CAAC;QAED,gCAAgC;QAChC,MAAM,KAAK,GAAa,EAAE,CAAA;QAC1B,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QAC1D,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;YACrB,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAA;YAC9D,KAAK,CAAC,IAAI,CACR,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CACtB,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CACxD,CACF,CAAA;QACH,CAAC;QACD,GAAG,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAA;IACtD,CAAC;IAED,uBAAuB;IACvB,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC3E,GAAG,IAAI;;;yBAGgB,aAAa,MAAM,CAAA;IAE1C,sBAAsB;IACtB,GAAG,IAAI;;;uCAG8B,CAAA;IACrC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;QACvB,GAAG,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAA;IAC7C,CAAC;IACD,GAAG,IAAI,OAAO,CAAA;IAEd,kBAAkB;IAClB,GAAG,IAAI;;;oDAG2C,CAAA;IAElD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,2BAA2B;AAC3B,MAAM,SAAS,GAAG,QAAQ,EAAE,CAAA;AAE5B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAA;AAEnE,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;AACjD,OAAO,CAAC,GAAG,CAAC,8BAA8B,UAAU,EAAE,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"sources":["../../src/scripts/generate-types.ts"],"sourcesContent":["/**\n * Type generation script for Better Auth schema.\n *\n * Generates TypeScript types by introspecting Better Auth's schema\n * and diffing plugin additions against the base schema.\n *\n * Run with: pnpm generate:types\n */\n\nimport { passkey } from '@better-auth/passkey'\nimport type { DBFieldAttribute } from 'better-auth/db'\nimport { getSchema } from 'better-auth/db'\nimport {\n admin,\n anonymous,\n apiKey,\n bearer,\n emailOTP,\n genericOAuth,\n jwt,\n magicLink,\n multiSession,\n oidcProvider,\n oneTap,\n oneTimeToken,\n openAPI,\n organization,\n phoneNumber,\n twoFactor,\n username,\n} from 'better-auth/plugins'\nimport fs from 'node:fs/promises'\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\ntype Schema = Record<string, { fields: Record<string, DBFieldAttribute> }>\n\n// Plugins to include in type generation\n// Add new plugins here as they become supported\nconst plugins = [\n username(),\n admin(),\n apiKey(),\n passkey(),\n bearer(),\n emailOTP({ sendVerificationOTP: async () => {} }),\n magicLink({ sendMagicLink: async () => {} }),\n phoneNumber({ sendOTP: async () => {} }),\n oneTap(),\n anonymous(),\n multiSession(),\n oneTimeToken(),\n oidcProvider({ loginPage: '' }),\n genericOAuth({\n config: [\n {\n providerId: 'generic',\n clientId: 'generic',\n clientSecret: 'generic',\n },\n ],\n }),\n openAPI(),\n organization({\n teams: { enabled: true },\n }),\n jwt(),\n twoFactor(),\n]\n\nconst betterAuthConfig = {\n emailAndPassword: { enabled: true },\n user: {\n additionalFields: {\n role: { type: 'string' as const, defaultValue: 'user', input: false },\n },\n },\n plugins,\n}\n\nconst baseSchema = getSchema({ ...betterAuthConfig, plugins: [] })\n\n/**\n * Map Better Auth field types to TypeScript types\n */\nfunction mapType(t: string): string {\n switch (t) {\n case 'boolean':\n return 'boolean'\n case 'date':\n return 'Date'\n case 'number':\n return 'number'\n case 'string':\n return 'string'\n case 'number[]':\n return 'number[]'\n case 'string[]':\n return 'string[]'\n default:\n return 'unknown'\n }\n}\n\n/**\n * Convert string to PascalCase\n */\nfunction pascal(s: string): string {\n return s\n .split(/[-_]/g)\n .map((p) => p.charAt(0).toUpperCase() + p.slice(1))\n .join('')\n}\n\n/**\n * Find fields added by a plugin compared to base schema\n */\nfunction diff(\n base: Schema,\n target: Schema\n): Record<string, Record<string, DBFieldAttribute>> {\n const d: Record<string, Record<string, DBFieldAttribute>> = {}\n for (const [m, { fields }] of Object.entries(target)) {\n const added = Object.entries(fields).filter(\n ([k]) => !(k in (base[m]?.fields ?? {}))\n )\n if (added.length) d[m] = Object.fromEntries(added)\n }\n return d\n}\n\n/**\n * Generate TypeScript type definitions\n */\nfunction generate(): string {\n let out = `/**\n * Auto-generated Better Auth types.\n * DO NOT EDIT - Run \\`pnpm generate:types\\` to regenerate.\n *\n * Generated from Better Auth schema introspection.\n * Contains types for all supported plugins and their field additions.\n */\n\n`\n\n const pluginAdds: Record<\n string,\n Record<string, Record<string, DBFieldAttribute>>\n > = {}\n const seen = new Set<string>()\n\n // Diff each plugin's schema against base to find additions\n for (const pl of plugins) {\n const id = (pl as { id?: string }).id\n if (!id || seen.has(id)) continue\n seen.add(id)\n const adds = diff(\n baseSchema,\n getSchema({ ...betterAuthConfig, plugins: [pl] })\n )\n for (const [m, f] of Object.entries(adds)) {\n pluginAdds[m] ??= {}\n pluginAdds[m][id] = f\n }\n }\n\n // Collect all models from base and plugins\n const models = new Set<string>([\n ...Object.keys(baseSchema),\n ...Object.keys(pluginAdds),\n ])\n\n // Generate types for each model\n for (const model of models) {\n const P = pascal(model)\n const base = baseSchema[model]?.fields ?? {}\n const pluginsForModel = pluginAdds[model] ?? {}\n const pluginIds = Object.keys(pluginsForModel)\n\n // Base fields type\n if (Object.keys(base).length) {\n out += `export type Base${P}Fields = {\\n`\n for (const [k, f] of Object.entries(base)) {\n const fieldName = f.fieldName ?? k\n const optional = f.required ? '' : '?'\n out += ` ${fieldName}${optional}: ${mapType(f.type as string)}\\n`\n }\n out += '}\\n\\n'\n }\n\n // Plugin fields mapping\n const needPluginMap = pluginIds.length > 1 || Object.keys(base).length\n if (needPluginMap && pluginIds.length) {\n out += `export type ${P}PluginFields = {\\n`\n for (const [pid, flds] of Object.entries(pluginsForModel)) {\n out += ` ${JSON.stringify(pid)}: {\\n`\n for (const [k, f] of Object.entries(flds)) {\n const fieldName = f.fieldName ?? k\n const optional = f.required ? '' : '?'\n out += ` ${fieldName}${optional}: ${mapType(f.type as string)}\\n`\n }\n out += ' }\\n'\n }\n out += '}\\n\\n'\n }\n\n // Handle single-plugin-only models\n if (!Object.keys(base).length && pluginIds.length === 1) {\n const only = pluginIds[0]\n out += `export type ${P}Fields = {\\n`\n for (const [k, f] of Object.entries(pluginsForModel[only])) {\n const fieldName = f.fieldName ?? k\n const optional = f.required ? '' : '?'\n out += ` ${fieldName}${optional}: ${mapType(f.type as string)}\\n`\n }\n out += '}\\n\\n'\n out += `export type ${P} = ${P}Fields\\n\\n`\n continue\n }\n\n // Combined type as intersection\n const parts: string[] = []\n if (Object.keys(base).length) parts.push(`Base${P}Fields`)\n if (pluginIds.length) {\n const mapName = needPluginMap ? `${P}PluginFields` : undefined\n parts.push(\n ...pluginIds.map((id) =>\n mapName ? `${mapName}[${JSON.stringify(id)}]` : 'never'\n )\n )\n }\n out += `export type ${P} = ${parts.join(' & ')}\\n\\n`\n }\n\n // Plugin ID union type\n const pluginIdUnion = [...seen].map((id) => JSON.stringify(id)).join(' | ')\n out += `/**\n * Union of all supported plugin identifiers.\n */\nexport type PluginId = ${pluginIdUnion}\\n\\n`\n\n // Full schema mapping\n out += `/**\n * Complete schema mapping of all models to their types.\n */\nexport type BetterAuthFullSchema = {\\n`\n for (const model of models) {\n const P = pascal(model)\n out += ` ${JSON.stringify(model)}: ${P}\\n`\n }\n out += '}\\n\\n'\n\n // Model key union\n out += `/**\n * Union of all model names in the schema.\n */\nexport type ModelKey = keyof BetterAuthFullSchema\\n`\n\n return out\n}\n\n// Generate and write types\nconst generated = generate()\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url))\nconst outputFile = path.resolve(__dirname, '../generated-types.ts')\n\nawait fs.writeFile(outputFile, generated, 'utf8')\nconsole.log(`Generated types written to ${outputFile}`)\n"],"names":["passkey","getSchema","admin","anonymous","apiKey","bearer","emailOTP","genericOAuth","jwt","magicLink","multiSession","oidcProvider","oneTap","oneTimeToken","openAPI","organization","phoneNumber","twoFactor","username","fs","path","fileURLToPath","plugins","sendVerificationOTP","sendMagicLink","sendOTP","loginPage","config","providerId","clientId","clientSecret","teams","enabled","betterAuthConfig","emailAndPassword","user","additionalFields","role","type","defaultValue","input","baseSchema","mapType","t","pascal","s","split","map","p","charAt","toUpperCase","slice","join","diff","base","target","d","m","fields","Object","entries","added","filter","k","length","fromEntries","generate","out","pluginAdds","seen","Set","pl","id","has","add","adds","f","models","keys","model","P","pluginsForModel","pluginIds","fieldName","optional","required","needPluginMap","pid","flds","JSON","stringify","only","parts","push","mapName","undefined","pluginIdUnion","generated","__dirname","dirname","url","outputFile","resolve","writeFile","console","log"],"mappings":"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"}
|
package/dist/types/apiKey.js
CHANGED
|
@@ -2,6 +2,11 @@
|
|
|
2
2
|
* API Key Scope Types
|
|
3
3
|
*
|
|
4
4
|
* Provides typed configuration for API key permission scopes.
|
|
5
|
-
*/
|
|
6
|
-
|
|
5
|
+
*/ /**
|
|
6
|
+
* A single permission scope definition.
|
|
7
|
+
* Scopes are human-readable permission groups (like GitHub OAuth scopes).
|
|
8
|
+
*/ /**
|
|
9
|
+
* Scope data passed to the API keys management client component.
|
|
10
|
+
*/ export { };
|
|
11
|
+
|
|
7
12
|
//# sourceMappingURL=apiKey.js.map
|
package/dist/types/apiKey.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/types/apiKey.ts"],"sourcesContent":["/**\n * API Key Scope Types\n *\n * Provides typed configuration for API key permission scopes.\n */\n\n/**\n * A single permission scope definition.\n * Scopes are human-readable permission groups (like GitHub OAuth scopes).\n */\nexport type ScopeDefinition = {\n /** Human-readable label for the scope (e.g., \"Read Content\") */\n label: string\n /** Description of what this scope allows (e.g., \"View posts, pages, and comments\") */\n description: string\n /**\n * Permission mapping: { resourceType: ['action1', 'action2'] }\n * Maps to Better Auth's permission format.\n * Use '*' for resource to match all resources.\n * Use '*' in actions array to grant all actions on a resource.\n */\n permissions: Record<string, string[]>\n /** If true, only admin users can create keys with this scope */\n adminOnly?: boolean\n}\n\n/**\n * Configuration options for API key scopes.\n * Can be used in plugin options to customize available scopes.\n */\nexport type ApiKeyScopesConfig = {\n /**\n * Custom scope definitions.\n * Key is the scope ID (e.g., 'content:read'), value is the scope definition.\n */\n scopes?: Record<string, ScopeDefinition>\n /**\n * Include auto-generated collection scopes.\n * When true (default), generates {collection}:read, {collection}:write, {collection}:delete\n * for each Payload collection.\n * @default true when no custom scopes provided, false when custom scopes provided\n */\n includeCollectionScopes?: boolean\n /**\n * Collections to exclude from auto-generated scopes.\n * Useful for hiding sensitive collections like 'sessions' or 'verifications'.\n * @default ['sessions', 'verifications', 'accounts', 'twoFactors']\n */\n excludeCollections?: string[]\n /**\n * Default scopes assigned to new API keys when user doesn't select any.\n * If not provided, keys without scopes will have no permissions.\n */\n defaultScopes?: string[]\n}\n\n/**\n * Scope data passed to the API keys management client component.\n */\nexport type AvailableScope = ScopeDefinition & {\n /** The scope ID (e.g., 'content:read') */\n id: string\n}\n"],"names":[],"mappings":"AAAA;;;;CAIC,GAED;;;CAGC,GA+CD;;CAEC,GACD,WAGC"}
|
package/dist/types/betterAuth.js
CHANGED
|
@@ -3,6 +3,27 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Provides improved type inference for the Better Auth instance,
|
|
5
5
|
* including session/user types, API methods, and error codes.
|
|
6
|
-
*/
|
|
7
|
-
|
|
6
|
+
*/ /**
|
|
7
|
+
* Payload endpoint type with Better Auth context.
|
|
8
|
+
*
|
|
9
|
+
* Use this for custom endpoints that need access to Better Auth.
|
|
10
|
+
*
|
|
11
|
+
* @template O - Better Auth options type for inference
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* const myEndpoint: EndpointWithBetterAuth<typeof myOptions> = {
|
|
16
|
+
* path: '/custom-auth',
|
|
17
|
+
* method: 'post',
|
|
18
|
+
* handler: async (req) => {
|
|
19
|
+
* // req.payload.betterAuth is fully typed
|
|
20
|
+
* const session = await req.payload.betterAuth.api.getSession({
|
|
21
|
+
* headers: req.headers,
|
|
22
|
+
* })
|
|
23
|
+
* return Response.json({ session })
|
|
24
|
+
* },
|
|
25
|
+
* }
|
|
26
|
+
* ```
|
|
27
|
+
*/ export { };
|
|
28
|
+
|
|
8
29
|
//# sourceMappingURL=betterAuth.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/types/betterAuth.ts"],"sourcesContent":["/**\n * Enhanced TypeScript types for Better Auth integration.\n *\n * Provides improved type inference for the Better Auth instance,\n * including session/user types, API methods, and error codes.\n */\n\nimport type { AuthContext } from 'better-auth'\nimport { router } from 'better-auth/api'\nimport type {\n BetterAuthOptions,\n BetterAuthPlugin,\n InferAPI,\n InferPluginTypes,\n InferSession,\n InferUser,\n} from 'better-auth/types'\nimport type { BasePayload, Endpoint, PayloadRequest } from 'payload'\n\n/**\n * Base error codes from Better Auth core.\n */\ntype BaseErrorCodes = {\n FAILED_TO_GET_USER_INFO: string\n USER_ALREADY_EXISTS: string\n INVALID_PASSWORD: string\n FAILED_TO_CREATE_USER: string\n FAILED_TO_CREATE_SESSION: string\n FAILED_TO_UPDATE_USER: string\n FAILED_TO_GET_SESSION: string\n INVALID_EMAIL_OR_PASSWORD: string\n SOCIAL_ACCOUNT_ALREADY_LINKED: string\n PROVIDER_NOT_FOUND: string\n INVALID_TOKEN: string\n ID_TOKEN_NOT_SUPPORTED: string\n FAILED_TO_GET_USER_INFO_OPENID: string\n UNEXPECTED_PROVIDER_RESPONSE: string\n TOKEN_REFRESH_FAILED: string\n FAILED_TO_UNLINK: string\n ACCOUNT_NOT_FOUND: string\n SESSION_EXPIRED: string\n INTERNAL_SERVER_ERROR: string\n VALIDATION_ERROR: string\n}\n\n/**\n * Union to intersection utility type.\n */\ntype UnionToIntersection<U> = (U extends unknown ? (k: U) => void : never) extends (\n k: infer I\n) => void\n ? I\n : never\n\n/**\n * Deeply prettify a type for better IDE display.\n * Flattens intersections and preserves functions/arrays/dates.\n */\ntype PrettifyDeep<T> = {\n [K in keyof T]: T[K] extends (...args: unknown[]) => unknown\n ? T[K]\n : T[K] extends object\n ? T[K] extends Array<unknown>\n ? T[K]\n : T[K] extends Date\n ? T[K]\n : PrettifyDeep<T[K]>\n : T[K]\n} & {}\n\n/**\n * Infer error codes from enabled plugins.\n */\ntype InferPluginErrorCodes<O extends BetterAuthOptions> =\n O['plugins'] extends Array<infer P>\n ? UnionToIntersection<\n P extends BetterAuthPlugin\n ? P['$ERROR_CODES'] extends Record<string, unknown>\n ? P['$ERROR_CODES']\n : never\n : never\n > extends infer R\n ? [R] extends [never]\n ? object\n : R\n : object\n : object\n\n/**\n * Role array type with configurable roles.\n */\nexport type RoleArray<O extends readonly string[] = readonly ['user']> =\n | O[number][]\n | null\n\n/**\n * Override role field in a type with configured roles.\n */\ntype OverrideRole<T, O extends readonly string[]> = T extends object\n ? Omit<T, 'role'> & { role: RoleArray<O> }\n : T\n\n/**\n * The return type of a Better Auth instance.\n *\n * This provides full type inference for:\n * - API endpoints and their return types\n * - Session/user types based on enabled plugins\n * - Error codes from all enabled plugins\n * - Auth context for advanced use cases\n *\n * @template O - Better Auth options type for inference\n *\n * @example\n * ```ts\n * // Access inferred types\n * type MySession = typeof payload.betterAuth.$Infer.Session\n *\n * // Type-safe API calls\n * const result = await payload.betterAuth.api.getSession({ headers })\n * ```\n */\nexport type BetterAuthReturn<O extends BetterAuthOptions = BetterAuthOptions> = {\n /** The request handler for auth endpoints */\n handler: (request: Request) => Promise<Response>\n /** Type-safe API methods */\n api: InferAPI<ReturnType<typeof router<O>>>['endpoints']\n /** The resolved options */\n options: O\n /** All error codes from enabled plugins */\n $ERROR_CODES: InferPluginErrorCodes<O> & BaseErrorCodes\n /** Auth context (async) for advanced use cases */\n $context: Promise<AuthContext>\n /** Inferred types for Session and User */\n $Infer: InferPluginTypes<O> extends { Session: unknown }\n ? InferPluginTypes<O>\n : {\n Session: {\n session: PrettifyDeep<InferSession<O>>\n user: PrettifyDeep<InferUser<O>>\n }\n } & InferPluginTypes<O>\n}\n\n/**\n * Payload instance with Better Auth attached.\n *\n * After initialization, the Payload instance is extended with\n * the `betterAuth` property containing the auth instance.\n *\n * @template O - Better Auth options type for inference\n *\n * @example\n * ```ts\n * // In a server action or API route\n * const payload = await getPayload({ config })\n * const payloadWithAuth = payload as PayloadWithAuth\n *\n * const session = await payloadWithAuth.betterAuth.api.getSession({ headers })\n * ```\n */\nexport type PayloadWithAuth<O extends BetterAuthOptions = BetterAuthOptions> =\n BasePayload & {\n betterAuth: BetterAuthReturn<O>\n }\n\n/**\n * Extended Payload request with Better Auth instance.\n *\n * Use this type in hooks and endpoints to get type-safe\n * access to the Better Auth instance.\n *\n * @template O - Better Auth options type for inference\n *\n * @example\n * ```ts\n * const myHook: CollectionBeforeChangeHook = async ({ req }) => {\n * const typedReq = req as PayloadRequestWithBetterAuth<typeof myBetterAuthOptions>\n * const session = await typedReq.payload.betterAuth.api.getSession({\n * headers: req.headers,\n * })\n * // ...\n * }\n * ```\n */\nexport interface PayloadRequestWithBetterAuth<\n O extends BetterAuthOptions = BetterAuthOptions,\n> extends PayloadRequest {\n payload: PayloadWithAuth<O>\n}\n\n/**\n * Type utility for collection hooks with Better Auth context.\n *\n * Transforms a standard Payload hook type to include Better Auth\n * on the request's payload instance.\n *\n * @template O - Better Auth options type for inference\n * @template T - The original hook function type\n *\n * @example\n * ```ts\n * import type { CollectionBeforeChangeHook } from 'payload'\n *\n * const beforeChange: CollectionHookWithBetterAuth<\n * typeof myOptions,\n * CollectionBeforeChangeHook\n * > = async ({ req, data }) => {\n * // req.payload.betterAuth is fully typed\n * const session = await req.payload.betterAuth.api.getSession({\n * headers: req.headers,\n * })\n * return data\n * }\n * ```\n */\nexport type CollectionHookWithBetterAuth<\n O extends BetterAuthOptions,\n T extends (args: Record<string, unknown>) => unknown,\n> = T extends (args: infer A) => infer R\n ? (\n args: Omit<A, 'req'> & { req: PayloadRequestWithBetterAuth<O> }\n ) => R\n : never\n\n/**\n * Payload endpoint type with Better Auth context.\n *\n * Use this for custom endpoints that need access to Better Auth.\n *\n * @template O - Better Auth options type for inference\n *\n * @example\n * ```ts\n * const myEndpoint: EndpointWithBetterAuth<typeof myOptions> = {\n * path: '/custom-auth',\n * method: 'post',\n * handler: async (req) => {\n * // req.payload.betterAuth is fully typed\n * const session = await req.payload.betterAuth.api.getSession({\n * headers: req.headers,\n * })\n * return Response.json({ session })\n * },\n * }\n * ```\n */\nexport type EndpointWithBetterAuth<O extends BetterAuthOptions> = Omit<\n Endpoint,\n 'handler'\n> & {\n handler: (req: PayloadRequestWithBetterAuth<O>) => Promise<Response> | Response\n}\n"],"names":[],"mappings":"AAAA;;;;;CAKC,GA4ND;;;;;;;;;;;;;;;;;;;;;CAqBC,GACD,WAKC"}
|