@parsrun/auth 0.2.6 → 0.2.10
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/dist/adapters/hono.d.ts +3 -3
- package/dist/adapters/hono.js +1 -1
- package/dist/adapters/index.d.ts +3 -3
- package/dist/adapters/index.js +1 -1
- package/dist/{base-BI-SilX-.d.ts → base-DbUdEGJ4.d.ts} +3 -4
- package/dist/{chunk-RHNVRCF3.js → chunk-NWUMFIFT.js} +2 -3
- package/dist/chunk-NWUMFIFT.js.map +1 -0
- package/dist/{index-DC7A0IbX.d.ts → index-Bcldwbx0.d.ts} +1 -1
- package/dist/{index-kATaLVps.d.ts → index-ZRaviVhS.d.ts} +718 -3
- package/dist/index.d.ts +9 -696
- package/dist/index.js +2890 -2684
- package/dist/index.js.map +1 -1
- package/dist/providers/index.d.ts +2 -2
- package/dist/providers/otp/index.d.ts +2 -2
- package/package.json +3 -3
- package/dist/chunk-RHNVRCF3.js.map +0 -1
package/dist/adapters/hono.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import 'hono/types';
|
|
2
2
|
import 'hono';
|
|
3
|
-
export {
|
|
3
|
+
export { aw as AuthVariables, ax as HonoAdapterConfig, ah as createAuthMiddleware, aj as createAuthRoutes, ak as createHonoAuth, ai as createOptionalAuthMiddleware, as as requireAdmin, au as requireAll, av as requireAny, ap as requireAnyPermission, at as requireOwnerOrPermission, ao as requirePermission, an as requireRole, aq as requireTenant, ar as requireTenantAccess } from '../index-ZRaviVhS.js';
|
|
4
4
|
import '../authorization-By1Xp8Za.js';
|
|
5
5
|
import '../jwt-manager-CH8H0kmm.js';
|
|
6
6
|
import 'jose';
|
|
7
7
|
import '../types-DSjafxJ4.js';
|
|
8
|
-
import '../base-
|
|
9
|
-
import '../index-
|
|
8
|
+
import '../base-DbUdEGJ4.js';
|
|
9
|
+
import '../index-Bcldwbx0.js';
|
package/dist/adapters/hono.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { createAuthMiddleware, createAuthRoutes, createHonoAuth, createOptionalAuthMiddleware, requireAdmin, requireAll, requireAny, requireAnyPermission, requireOwnerOrPermission, requirePermission, requireRole, requireTenant, requireTenantAccess } from '../chunk-
|
|
1
|
+
export { createAuthMiddleware, createAuthRoutes, createHonoAuth, createOptionalAuthMiddleware, requireAdmin, requireAll, requireAny, requireAnyPermission, requireOwnerOrPermission, requirePermission, requireRole, requireTenant, requireTenantAccess } from '../chunk-NWUMFIFT.js';
|
|
2
2
|
import '../chunk-NK4TJV2W.js';
|
|
3
3
|
import '../chunk-MOG4Y6I7.js';
|
|
4
4
|
import '../chunk-42MGHABB.js';
|
package/dist/adapters/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { ay as AuthContext, aA as AuthResponse, aw as AuthVariables, az as CookieOptions, ax as HonoAdapterConfig, aE as RefreshBody, aB as RequestOtpBody, aD as SignInBody, aC as VerifyOtpBody, al as createAuthCookies, ah as createAuthMiddleware, aj as createAuthRoutes, ak as createHonoAuth, am as createLogoutCookies, ai as createOptionalAuthMiddleware, as as requireAdmin, au as requireAll, av as requireAny, ap as requireAnyPermission, at as requireOwnerOrPermission, ao as requirePermission, an as requireRole, aq as requireTenant, ar as requireTenantAccess } from '../index-ZRaviVhS.js';
|
|
2
2
|
import '../jwt-manager-CH8H0kmm.js';
|
|
3
3
|
import 'jose';
|
|
4
4
|
import 'hono/types';
|
|
5
5
|
import 'hono';
|
|
6
6
|
import '../types-DSjafxJ4.js';
|
|
7
|
-
import '../base-
|
|
8
|
-
import '../index-
|
|
7
|
+
import '../base-DbUdEGJ4.js';
|
|
8
|
+
import '../index-Bcldwbx0.js';
|
|
9
9
|
import '../authorization-By1Xp8Za.js';
|
package/dist/adapters/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import '../chunk-7GOBAL4G.js';
|
|
2
|
-
export { createAuthCookies, createAuthMiddleware, createAuthRoutes, createHonoAuth, createLogoutCookies, createOptionalAuthMiddleware, requireAdmin, requireAll, requireAny, requireAnyPermission, requireOwnerOrPermission, requirePermission, requireRole, requireTenant, requireTenantAccess } from '../chunk-
|
|
2
|
+
export { createAuthCookies, createAuthMiddleware, createAuthRoutes, createHonoAuth, createLogoutCookies, createOptionalAuthMiddleware, requireAdmin, requireAll, requireAny, requireAnyPermission, requireOwnerOrPermission, requirePermission, requireRole, requireTenant, requireTenantAccess } from '../chunk-NWUMFIFT.js';
|
|
3
3
|
import '../chunk-NK4TJV2W.js';
|
|
4
4
|
import '../chunk-MOG4Y6I7.js';
|
|
5
5
|
import '../chunk-42MGHABB.js';
|
|
@@ -263,6 +263,7 @@ interface AuthAdapter {
|
|
|
263
263
|
findAuthMethod(provider: string, providerId: string): Promise<AdapterAuthMethod | null>;
|
|
264
264
|
findAuthMethodsByUserId(userId: string): Promise<AdapterAuthMethod[]>;
|
|
265
265
|
createAuthMethod(data: CreateAuthMethodInput): Promise<AdapterAuthMethod>;
|
|
266
|
+
updateAuthMethod(id: string, data: Partial<AdapterAuthMethod>): Promise<AdapterAuthMethod>;
|
|
266
267
|
deleteAuthMethod(id: string): Promise<void>;
|
|
267
268
|
findTenantById?(id: string): Promise<AdapterTenant | null>;
|
|
268
269
|
findTenantBySlug?(slug: string): Promise<AdapterTenant | null>;
|
|
@@ -282,8 +283,6 @@ interface AdapterUser {
|
|
|
282
283
|
id: string;
|
|
283
284
|
email?: string | null;
|
|
284
285
|
phone?: string | null;
|
|
285
|
-
emailVerified?: boolean;
|
|
286
|
-
phoneVerified?: boolean;
|
|
287
286
|
name?: string | null;
|
|
288
287
|
avatar?: string | null;
|
|
289
288
|
twoFactorEnabled?: boolean;
|
|
@@ -344,8 +343,8 @@ interface CreateUserInput {
|
|
|
344
343
|
phone?: string;
|
|
345
344
|
name?: string;
|
|
346
345
|
avatar?: string;
|
|
347
|
-
|
|
348
|
-
|
|
346
|
+
/** Whether the auth method should be marked as verified (default: false) */
|
|
347
|
+
verified?: boolean;
|
|
349
348
|
}
|
|
350
349
|
interface CreateSessionInput {
|
|
351
350
|
userId: string;
|
|
@@ -360,7 +360,6 @@ function createAuthRoutes(app, config) {
|
|
|
360
360
|
email: user.email,
|
|
361
361
|
name: user.name,
|
|
362
362
|
avatar: user.avatar,
|
|
363
|
-
emailVerified: user.emailVerified,
|
|
364
363
|
twoFactorEnabled: user.twoFactorEnabled
|
|
365
364
|
});
|
|
366
365
|
});
|
|
@@ -834,5 +833,5 @@ function requireAny(...middlewares) {
|
|
|
834
833
|
}
|
|
835
834
|
|
|
836
835
|
export { createAuthCookies, createAuthMiddleware, createAuthRoutes, createHonoAuth, createLogoutCookies, createOptionalAuthMiddleware, requireAdmin, requireAll, requireAny, requireAnyPermission, requireOwnerOrPermission, requirePermission, requireRole, requireTenant, requireTenantAccess };
|
|
837
|
-
//# sourceMappingURL=chunk-
|
|
838
|
-
//# sourceMappingURL=chunk-
|
|
836
|
+
//# sourceMappingURL=chunk-NWUMFIFT.js.map
|
|
837
|
+
//# sourceMappingURL=chunk-NWUMFIFT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/adapters/types.ts","../src/adapters/hono.ts"],"names":["c"],"mappings":"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","file":"chunk-NWUMFIFT.js","sourcesContent":["/**\n * Adapter Types\n * Common interfaces for framework adapters\n */\n\nimport type { JwtPayload, TokenPair } from '../session/index.js';\n\n/**\n * Auth context attached to requests\n */\nexport interface AuthContext {\n /** Authenticated user ID */\n userId: string;\n /** Session ID */\n sessionId?: string;\n /** Tenant ID (for multi-tenant) */\n tenantId?: string;\n /** User roles */\n roles?: string[];\n /** User permissions */\n permissions?: string[];\n /** Full JWT payload */\n payload: JwtPayload;\n}\n\n/**\n * Cookie options\n */\nexport interface CookieOptions {\n /** Cookie name */\n name: string;\n /** Cookie value */\n value: string;\n /** Max age in seconds */\n maxAge?: number;\n /** Expiration date */\n expires?: Date;\n /** Path */\n path?: string;\n /** Domain */\n domain?: string;\n /** Secure flag */\n secure?: boolean;\n /** HttpOnly flag */\n httpOnly?: boolean;\n /** SameSite attribute */\n sameSite?: 'strict' | 'lax' | 'none';\n}\n\n/**\n * Auth response with cookies\n */\nexport interface AuthResponse {\n success: boolean;\n tokens?: TokenPair;\n cookies?: CookieOptions[];\n error?: string;\n errorCode?: string;\n user?: {\n id: string;\n email?: string;\n name?: string;\n };\n}\n\n/**\n * Request OTP input\n */\nexport interface RequestOtpBody {\n identifier: string;\n type: 'email' | 'sms';\n}\n\n/**\n * Verify OTP input\n */\nexport interface VerifyOtpBody {\n identifier: string;\n code: string;\n type?: 'email' | 'sms';\n}\n\n/**\n * Sign in input\n */\nexport interface SignInBody {\n provider: string;\n identifier: string;\n credential?: string;\n data?: Record<string, unknown>;\n}\n\n/**\n * Refresh token input\n */\nexport interface RefreshBody {\n refreshToken?: string;\n}\n\n/**\n * Create auth cookies from token pair\n */\nexport function createAuthCookies(\n tokens: TokenPair,\n config: {\n prefix?: string;\n path?: string;\n domain?: string;\n secure?: boolean;\n sameSite?: 'strict' | 'lax' | 'none';\n httpOnly?: boolean;\n }\n): CookieOptions[] {\n const prefix = config.prefix ?? 'pars';\n\n return [\n {\n name: `${prefix}.access_token`,\n value: tokens.accessToken,\n expires: tokens.accessExpiresAt,\n path: config.path ?? '/',\n domain: config.domain,\n secure: config.secure ?? true,\n sameSite: config.sameSite ?? 'lax',\n httpOnly: false, // Access token may be needed by JS\n },\n {\n name: `${prefix}.refresh_token`,\n value: tokens.refreshToken,\n expires: tokens.refreshExpiresAt,\n path: config.path ?? '/',\n domain: config.domain,\n secure: config.secure ?? true,\n sameSite: config.sameSite ?? 'lax',\n httpOnly: config.httpOnly ?? true, // Refresh token should be HttpOnly\n },\n ];\n}\n\n/**\n * Create logout cookies (clear auth cookies)\n */\nexport function createLogoutCookies(\n config: {\n prefix?: string;\n path?: string;\n domain?: string;\n }\n): CookieOptions[] {\n const prefix = config.prefix ?? 'pars';\n const past = new Date(0);\n\n return [\n {\n name: `${prefix}.access_token`,\n value: '',\n expires: past,\n path: config.path ?? '/',\n domain: config.domain,\n },\n {\n name: `${prefix}.refresh_token`,\n value: '',\n expires: past,\n path: config.path ?? '/',\n domain: config.domain,\n },\n ];\n}\n","/**\n * Hono Framework Adapter\n * Middleware and routes for Hono applications\n */\n\nimport type { Context, MiddlewareHandler, Hono } from 'hono';\nimport type { ParsAuthEngine } from '../core/auth-engine.js';\nimport { extractBearerToken } from '../session/index.js';\nimport {\n createAuthCookies,\n createLogoutCookies,\n type AuthContext,\n type CookieOptions,\n} from './types.js';\nimport {\n type AuthorizationContext,\n createAuthorizationGuard,\n type PermissionPattern,\n} from '../security/authorization.js';\n\n/**\n * Hono auth context variables\n */\nexport interface AuthVariables {\n auth: AuthContext;\n}\n\n/**\n * Hono adapter configuration\n */\nexport interface HonoAdapterConfig {\n /** Auth engine instance */\n auth: ParsAuthEngine;\n /** Cookie configuration */\n cookies?: {\n prefix?: string;\n path?: string;\n domain?: string;\n secure?: boolean;\n sameSite?: 'strict' | 'lax' | 'none';\n httpOnly?: boolean;\n };\n /** Custom error handler */\n onError?: (error: Error, c: Context) => Response | Promise<Response>;\n /** Custom unauthorized handler */\n onUnauthorized?: (c: Context, message?: string) => Response | Promise<Response>;\n}\n\n/**\n * Set cookie on response\n */\nfunction setCookie(c: Context, cookie: CookieOptions): void {\n let cookieString = `${cookie.name}=${cookie.value}`;\n\n if (cookie.expires) {\n cookieString += `; Expires=${cookie.expires.toUTCString()}`;\n }\n if (cookie.maxAge !== undefined) {\n cookieString += `; Max-Age=${cookie.maxAge}`;\n }\n if (cookie.path) {\n cookieString += `; Path=${cookie.path}`;\n }\n if (cookie.domain) {\n cookieString += `; Domain=${cookie.domain}`;\n }\n if (cookie.secure) {\n cookieString += '; Secure';\n }\n if (cookie.httpOnly) {\n cookieString += '; HttpOnly';\n }\n if (cookie.sameSite) {\n cookieString += `; SameSite=${cookie.sameSite.charAt(0).toUpperCase() + cookie.sameSite.slice(1)}`;\n }\n\n c.header('Set-Cookie', cookieString, { append: true });\n}\n\n/**\n * Get cookie from request\n */\nfunction getCookie(c: Context, name: string): string | undefined {\n const cookieHeader = c.req.header('Cookie');\n if (!cookieHeader) return undefined;\n\n const cookies = cookieHeader.split(';').map((c) => c.trim());\n for (const cookie of cookies) {\n const [cookieName, ...valueParts] = cookie.split('=');\n if (cookieName === name) {\n return valueParts.join('=');\n }\n }\n return undefined;\n}\n\n/**\n * Create Hono auth middleware\n * Validates JWT and attaches auth context to request\n */\nexport function createAuthMiddleware(\n config: HonoAdapterConfig\n): MiddlewareHandler<{ Variables: AuthVariables }> {\n const { auth, onUnauthorized } = config;\n\n return async (c, next) => {\n // Get token from Authorization header or cookie\n const authHeader = c.req.header('Authorization');\n let token = extractBearerToken(authHeader);\n\n if (!token) {\n const cookiePrefix = config.cookies?.prefix ?? 'pars';\n token = getCookie(c, `${cookiePrefix}.access_token`) ?? null;\n }\n\n if (!token) {\n if (onUnauthorized) {\n return onUnauthorized(c, 'No token provided');\n }\n return c.json({ error: 'Unauthorized', message: 'No token provided' }, 401);\n }\n\n // Verify token\n const result = await auth.verifyAccessToken(token);\n\n if (!result.valid || !result.payload) {\n if (onUnauthorized) {\n return onUnauthorized(c, result.error);\n }\n return c.json({ error: 'Unauthorized', message: result.error }, 401);\n }\n\n // Attach auth context\n const authContext: AuthContext = {\n userId: result.payload.sub,\n payload: result.payload,\n ...(result.payload.sid && { sessionId: result.payload.sid }),\n ...(result.payload.tid && { tenantId: result.payload.tid }),\n ...(result.payload.roles && { roles: result.payload.roles }),\n ...(result.payload.permissions && { permissions: result.payload.permissions }),\n };\n\n c.set('auth', authContext);\n\n await next();\n };\n}\n\n/**\n * Create optional auth middleware\n * Attaches auth context if token is valid, but doesn't block if not\n */\nexport function createOptionalAuthMiddleware(\n config: HonoAdapterConfig\n): MiddlewareHandler<{ Variables: Partial<AuthVariables> }> {\n const { auth } = config;\n\n return async (c, next) => {\n // Get token from Authorization header or cookie\n const authHeader = c.req.header('Authorization');\n let token = extractBearerToken(authHeader);\n\n if (!token) {\n const cookiePrefix = config.cookies?.prefix ?? 'pars';\n token = getCookie(c, `${cookiePrefix}.access_token`) ?? null;\n }\n\n if (token) {\n const result = await auth.verifyAccessToken(token);\n\n if (result.valid && result.payload) {\n const authContext: AuthContext = {\n userId: result.payload.sub,\n payload: result.payload,\n ...(result.payload.sid && { sessionId: result.payload.sid }),\n ...(result.payload.tid && { tenantId: result.payload.tid }),\n ...(result.payload.roles && { roles: result.payload.roles }),\n ...(result.payload.permissions && { permissions: result.payload.permissions }),\n };\n\n c.set('auth', authContext);\n }\n }\n\n await next();\n };\n}\n\n/**\n * Create auth routes\n * Provides standard auth endpoints: /otp/request, /otp/verify, /sign-in, /sign-out, /refresh\n */\nexport function createAuthRoutes<E extends { Variables: Partial<AuthVariables> }>(\n app: Hono<E>,\n config: HonoAdapterConfig\n): Hono<E> {\n const { auth, cookies: cookieConfig } = config;\n\n /**\n * Request OTP\n * POST /otp/request\n */\n app.post('/otp/request', async (c) => {\n try {\n const body = await c.req.json<{ identifier: string; type: 'email' | 'sms' }>();\n\n if (!body.identifier || !body.type) {\n return c.json({ error: 'Bad Request', message: 'identifier and type are required' }, 400);\n }\n\n const result = await auth.requestOTP({\n identifier: body.identifier,\n type: body.type,\n });\n\n if (!result.success) {\n return c.json({\n success: false,\n error: result.error,\n remainingRequests: result.remainingRequests,\n }, 429);\n }\n\n return c.json({\n success: true,\n expiresAt: result.expiresAt,\n remainingRequests: result.remainingRequests,\n });\n } catch (error) {\n if (config.onError) {\n return config.onError(error as Error, c);\n }\n return c.json({ error: 'Internal Server Error' }, 500);\n }\n });\n\n /**\n * Verify OTP and sign in\n * POST /otp/verify\n */\n app.post('/otp/verify', async (c) => {\n try {\n const body = await c.req.json<{\n identifier: string;\n code: string;\n type?: 'email' | 'sms';\n }>();\n\n if (!body.identifier || !body.code) {\n return c.json({ error: 'Bad Request', message: 'identifier and code are required' }, 400);\n }\n\n const ipAddress = c.req.header('x-forwarded-for') ?? c.req.header('x-real-ip');\n const userAgent = c.req.header('user-agent');\n\n const result = await auth.signIn({\n provider: 'otp',\n identifier: body.identifier,\n credential: body.code,\n data: { type: body.type ?? 'email' },\n metadata: {\n ...(ipAddress && { ipAddress }),\n ...(userAgent && { userAgent }),\n },\n });\n\n if (!result.success) {\n return c.json({\n success: false,\n error: result.error,\n errorCode: result.errorCode,\n }, 401);\n }\n\n // Set cookies\n if (result.tokens && cookieConfig) {\n const cookies = createAuthCookies(result.tokens, cookieConfig);\n for (const cookie of cookies) {\n setCookie(c, cookie);\n }\n }\n\n return c.json({\n success: true,\n user: result.user ? {\n id: result.user.id,\n email: result.user.email,\n name: result.user.name,\n } : undefined,\n tokens: result.tokens,\n });\n } catch (error) {\n if (config.onError) {\n return config.onError(error as Error, c);\n }\n return c.json({ error: 'Internal Server Error' }, 500);\n }\n });\n\n /**\n * Sign in (generic)\n * POST /sign-in\n */\n app.post('/sign-in', async (c) => {\n try {\n const body = await c.req.json<{\n provider: string;\n identifier: string;\n credential?: string;\n data?: Record<string, unknown>;\n }>();\n\n if (!body.provider || !body.identifier) {\n return c.json({\n error: 'Bad Request',\n message: 'provider and identifier are required',\n }, 400);\n }\n\n const ipAddress = c.req.header('x-forwarded-for') ?? c.req.header('x-real-ip');\n const userAgent = c.req.header('user-agent');\n\n const result = await auth.signIn({\n provider: body.provider,\n identifier: body.identifier,\n ...(body.credential && { credential: body.credential }),\n ...(body.data && { data: body.data }),\n metadata: {\n ...(ipAddress && { ipAddress }),\n ...(userAgent && { userAgent }),\n },\n });\n\n if (!result.success) {\n return c.json({\n success: false,\n error: result.error,\n errorCode: result.errorCode,\n requiresTwoFactor: result.requiresTwoFactor,\n }, 401);\n }\n\n // Set cookies\n if (result.tokens && cookieConfig) {\n const cookies = createAuthCookies(result.tokens, cookieConfig);\n for (const cookie of cookies) {\n setCookie(c, cookie);\n }\n }\n\n return c.json({\n success: true,\n user: result.user ? {\n id: result.user.id,\n email: result.user.email,\n name: result.user.name,\n } : undefined,\n tokens: result.tokens,\n requiresTwoFactor: result.requiresTwoFactor,\n });\n } catch (error) {\n if (config.onError) {\n return config.onError(error as Error, c);\n }\n return c.json({ error: 'Internal Server Error' }, 500);\n }\n });\n\n /**\n * Sign out\n * POST /sign-out\n */\n app.post('/sign-out', async (c) => {\n try {\n // Get auth context\n const authContext = c.get('auth') as AuthContext | undefined;\n\n if (authContext?.sessionId) {\n await auth.signOut(authContext.sessionId);\n }\n\n // Clear cookies\n if (cookieConfig) {\n const cookies = createLogoutCookies(cookieConfig);\n for (const cookie of cookies) {\n setCookie(c, cookie);\n }\n }\n\n return c.json({ success: true });\n } catch (error) {\n if (config.onError) {\n return config.onError(error as Error, c);\n }\n return c.json({ error: 'Internal Server Error' }, 500);\n }\n });\n\n /**\n * Refresh tokens\n * POST /refresh\n */\n app.post('/refresh', async (c) => {\n try {\n // Get refresh token from body or cookie\n let refreshToken: string | undefined;\n\n try {\n const body = await c.req.json<{ refreshToken?: string }>();\n refreshToken = body.refreshToken;\n } catch {\n // Body might not be JSON\n }\n\n if (!refreshToken) {\n const cookiePrefix = cookieConfig?.prefix ?? 'pars';\n refreshToken = getCookie(c, `${cookiePrefix}.refresh_token`);\n }\n\n if (!refreshToken) {\n return c.json({\n success: false,\n error: 'No refresh token provided',\n }, 401);\n }\n\n const result = await auth.refreshTokens(refreshToken);\n\n if (!result.success) {\n // Clear cookies on refresh failure\n if (cookieConfig) {\n const cookies = createLogoutCookies(cookieConfig);\n for (const cookie of cookies) {\n setCookie(c, cookie);\n }\n }\n\n return c.json({\n success: false,\n error: result.error,\n }, 401);\n }\n\n // Set new cookies\n if (result.tokens && cookieConfig) {\n const cookies = createAuthCookies(result.tokens, cookieConfig);\n for (const cookie of cookies) {\n setCookie(c, cookie);\n }\n }\n\n return c.json({\n success: true,\n tokens: result.tokens,\n });\n } catch (error) {\n if (config.onError) {\n return config.onError(error as Error, c);\n }\n return c.json({ error: 'Internal Server Error' }, 500);\n }\n });\n\n /**\n * Get current user\n * GET /me\n */\n app.get('/me', async (c) => {\n const authContext = c.get('auth') as AuthContext | undefined;\n\n if (!authContext) {\n return c.json({ error: 'Unauthorized' }, 401);\n }\n\n // Get user from adapter\n const user = await auth.getAdapter().findUserById(authContext.userId);\n\n if (!user) {\n return c.json({ error: 'User not found' }, 404);\n }\n\n return c.json({\n id: user.id,\n email: user.email,\n name: user.name,\n avatar: user.avatar,\n twoFactorEnabled: user.twoFactorEnabled,\n });\n });\n\n /**\n * Get sessions\n * GET /sessions\n */\n app.get('/sessions', async (c) => {\n const authContext = c.get('auth') as AuthContext | undefined;\n\n if (!authContext) {\n return c.json({ error: 'Unauthorized' }, 401);\n }\n\n const sessions = await auth.getSessions(authContext.userId, authContext.sessionId);\n\n return c.json({ sessions });\n });\n\n /**\n * Revoke session\n * DELETE /sessions/:id\n */\n app.delete('/sessions/:id', async (c) => {\n const authContext = c.get('auth') as AuthContext | undefined;\n\n if (!authContext) {\n return c.json({ error: 'Unauthorized' }, 401);\n }\n\n const sessionId = c.req.param('id');\n\n // Verify the session belongs to the user\n const sessions = await auth.getSessions(authContext.userId);\n const session = sessions.find((s) => s.id === sessionId);\n\n if (!session) {\n return c.json({ error: 'Session not found' }, 404);\n }\n\n await auth.revokeSession(sessionId);\n\n return c.json({ success: true });\n });\n\n /**\n * Revoke all sessions\n * DELETE /sessions\n */\n app.delete('/sessions', async (c) => {\n const authContext = c.get('auth') as AuthContext | undefined;\n\n if (!authContext) {\n return c.json({ error: 'Unauthorized' }, 401);\n }\n\n await auth.revokeAllSessions(authContext.userId);\n\n // Clear cookies\n if (cookieConfig) {\n const cookies = createLogoutCookies(cookieConfig);\n for (const cookie of cookies) {\n setCookie(c, cookie);\n }\n }\n\n return c.json({ success: true });\n });\n\n /**\n * Get available providers\n * GET /providers\n */\n app.get('/providers', async (c) => {\n const providers = auth.getProviders();\n return c.json({ providers });\n });\n\n // ============================================\n // MULTI-TENANT ROUTES\n // ============================================\n\n /**\n * Get user's tenants\n * GET /tenants\n */\n app.get('/tenants', async (c) => {\n const authContext = c.get('auth') as AuthContext | undefined;\n\n if (!authContext) {\n return c.json({ error: 'Unauthorized' }, 401);\n }\n\n try {\n const tenants = await auth.getUserTenants(authContext.userId);\n return c.json({\n tenants: tenants.map((t) => ({\n id: t.tenant.id,\n name: t.tenant.name,\n slug: t.tenant.slug,\n role: t.membership.role,\n status: t.tenant.status,\n })),\n currentTenantId: authContext.tenantId,\n });\n } catch (error) {\n if (config.onError) {\n return config.onError(error as Error, c);\n }\n return c.json({ error: 'Internal Server Error' }, 500);\n }\n });\n\n /**\n * Switch tenant\n * POST /tenants/switch\n */\n app.post('/tenants/switch', async (c) => {\n const authContext = c.get('auth') as AuthContext | undefined;\n\n if (!authContext?.sessionId) {\n return c.json({ error: 'Unauthorized' }, 401);\n }\n\n try {\n const body = await c.req.json<{ tenantId: string }>();\n\n if (!body.tenantId) {\n return c.json({ error: 'Bad Request', message: 'tenantId is required' }, 400);\n }\n\n const result = await auth.switchTenant(authContext.sessionId, body.tenantId);\n\n if (!result.success) {\n return c.json({ success: false, error: result.error }, 403);\n }\n\n // Set new cookies with updated tokens\n if (result.tokens && cookieConfig) {\n const cookies = createAuthCookies(result.tokens, cookieConfig);\n for (const cookie of cookies) {\n setCookie(c, cookie);\n }\n }\n\n return c.json({\n success: true,\n tokens: result.tokens,\n });\n } catch (error) {\n if (config.onError) {\n return config.onError(error as Error, c);\n }\n return c.json({ error: 'Internal Server Error' }, 500);\n }\n });\n\n /**\n * Get current tenant membership\n * GET /tenants/current\n */\n app.get('/tenants/current', async (c) => {\n const authContext = c.get('auth') as AuthContext | undefined;\n\n if (!authContext) {\n return c.json({ error: 'Unauthorized' }, 401);\n }\n\n if (!authContext.tenantId) {\n return c.json({ tenant: null, membership: null });\n }\n\n try {\n const membership = await auth.getTenantMembership(\n authContext.userId,\n authContext.tenantId\n );\n\n if (!membership) {\n return c.json({ tenant: null, membership: null });\n }\n\n const tenant = await auth.getAdapter().findTenantById?.(authContext.tenantId);\n\n return c.json({\n tenant: tenant ? {\n id: tenant.id,\n name: tenant.name,\n slug: tenant.slug,\n status: tenant.status,\n } : null,\n membership: {\n role: membership.role,\n permissions: membership.permissions,\n status: membership.status,\n },\n });\n } catch (error) {\n if (config.onError) {\n return config.onError(error as Error, c);\n }\n return c.json({ error: 'Internal Server Error' }, 500);\n }\n });\n\n /**\n * Invite user to tenant\n * POST /tenants/:tenantId/invite\n */\n app.post('/tenants/:tenantId/invite', async (c) => {\n const authContext = c.get('auth') as AuthContext | undefined;\n\n if (!authContext) {\n return c.json({ error: 'Unauthorized' }, 401);\n }\n\n try {\n const tenantId = c.req.param('tenantId');\n const body = await c.req.json<{\n email: string;\n role: string;\n permissions?: string[];\n message?: string;\n }>();\n\n if (!body.email || !body.role) {\n return c.json({ error: 'Bad Request', message: 'email and role are required' }, 400);\n }\n\n // Check if user is admin of tenant\n const isAdmin = await auth.hasRoleInTenant(authContext.userId, tenantId, 'admin') ||\n await auth.hasRoleInTenant(authContext.userId, tenantId, 'owner');\n\n if (!isAdmin) {\n return c.json({ error: 'Forbidden', message: 'Admin access required' }, 403);\n }\n\n const result = await auth.inviteToTenant({\n email: body.email,\n tenantId,\n role: body.role,\n permissions: body.permissions,\n invitedBy: authContext.userId,\n message: body.message,\n });\n\n if (!result.success) {\n return c.json({ success: false, error: result.error }, 400);\n }\n\n return c.json({\n success: true,\n invitationUrl: result.invitationUrl,\n expiresAt: result.invitation?.expiresAt,\n });\n } catch (error) {\n if (config.onError) {\n return config.onError(error as Error, c);\n }\n return c.json({ error: 'Internal Server Error' }, 500);\n }\n });\n\n /**\n * Check invitation status\n * GET /invitation\n */\n app.get('/invitation', async (c) => {\n try {\n const token = c.req.query('token');\n\n if (!token) {\n return c.json({ error: 'Bad Request', message: 'token is required' }, 400);\n }\n\n const result = await auth.checkInvitation(token);\n\n return c.json(result);\n } catch (error) {\n if (config.onError) {\n return config.onError(error as Error, c);\n }\n return c.json({ error: 'Internal Server Error' }, 500);\n }\n });\n\n /**\n * Accept invitation\n * POST /invitation/accept\n */\n app.post('/invitation/accept', async (c) => {\n const authContext = c.get('auth') as AuthContext | undefined;\n\n if (!authContext) {\n return c.json({ error: 'Unauthorized' }, 401);\n }\n\n try {\n const body = await c.req.json<{ token: string }>();\n\n if (!body.token) {\n return c.json({ error: 'Bad Request', message: 'token is required' }, 400);\n }\n\n const result = await auth.acceptInvitation(body.token, authContext.userId);\n\n if (!result.success) {\n return c.json({ success: false, error: result.error }, 400);\n }\n\n return c.json({\n success: true,\n tenant: result.tenant ? {\n id: result.tenant.id,\n name: result.tenant.name,\n slug: result.tenant.slug,\n } : undefined,\n membership: result.membership ? {\n role: result.membership.role,\n status: result.membership.status,\n } : undefined,\n });\n } catch (error) {\n if (config.onError) {\n return config.onError(error as Error, c);\n }\n return c.json({ error: 'Internal Server Error' }, 500);\n }\n });\n\n /**\n * Remove member from tenant\n * DELETE /tenants/:tenantId/members/:userId\n */\n app.delete('/tenants/:tenantId/members/:userId', async (c) => {\n const authContext = c.get('auth') as AuthContext | undefined;\n\n if (!authContext) {\n return c.json({ error: 'Unauthorized' }, 401);\n }\n\n try {\n const tenantId = c.req.param('tenantId');\n const userId = c.req.param('userId');\n\n // Check if user is admin of tenant (or removing themselves)\n const isAdmin = await auth.hasRoleInTenant(authContext.userId, tenantId, 'admin') ||\n await auth.hasRoleInTenant(authContext.userId, tenantId, 'owner');\n const isSelf = authContext.userId === userId;\n\n if (!isAdmin && !isSelf) {\n return c.json({ error: 'Forbidden', message: 'Admin access required' }, 403);\n }\n\n await auth.removeTenantMember(userId, tenantId);\n\n return c.json({ success: true });\n } catch (error) {\n if (config.onError) {\n return config.onError(error as Error, c);\n }\n return c.json({ error: 'Internal Server Error' }, 500);\n }\n });\n\n /**\n * Update member role\n * PATCH /tenants/:tenantId/members/:userId\n */\n app.patch('/tenants/:tenantId/members/:userId', async (c) => {\n const authContext = c.get('auth') as AuthContext | undefined;\n\n if (!authContext) {\n return c.json({ error: 'Unauthorized' }, 401);\n }\n\n try {\n const tenantId = c.req.param('tenantId');\n const userId = c.req.param('userId');\n const body = await c.req.json<{\n role?: string;\n permissions?: string[];\n status?: 'active' | 'inactive';\n }>();\n\n // Check if user is admin/owner of tenant\n const isAdmin = await auth.hasRoleInTenant(authContext.userId, tenantId, 'admin') ||\n await auth.hasRoleInTenant(authContext.userId, tenantId, 'owner');\n\n if (!isAdmin) {\n return c.json({ error: 'Forbidden', message: 'Admin access required' }, 403);\n }\n\n const membership = await auth.updateTenantMember(userId, tenantId, body);\n\n return c.json({\n success: true,\n membership: {\n role: membership.role,\n permissions: membership.permissions,\n status: membership.status,\n },\n });\n } catch (error) {\n if (config.onError) {\n return config.onError(error as Error, c);\n }\n return c.json({ error: 'Internal Server Error' }, 500);\n }\n });\n\n return app;\n}\n\n/**\n * Create complete Hono auth integration\n */\nexport function createHonoAuth(config: HonoAdapterConfig) {\n return {\n /** Auth middleware (requires authentication) */\n middleware: createAuthMiddleware(config),\n /** Optional auth middleware (attaches auth if present) */\n optionalMiddleware: createOptionalAuthMiddleware(config),\n /** Create auth routes on an app */\n createRoutes: <E extends { Variables: Partial<AuthVariables> }>(app: Hono<E>) =>\n createAuthRoutes(app, config),\n };\n}\n\n// ============================================\n// AUTHORIZATION MIDDLEWARE HELPERS\n// ============================================\n\n/**\n * Helper to convert AuthContext to AuthorizationContext\n */\nfunction toAuthorizationContext(auth: AuthContext): AuthorizationContext {\n return {\n userId: auth.userId,\n tenantId: auth.tenantId,\n roles: auth.roles,\n permissions: auth.permissions,\n };\n}\n\n/**\n * Require specific role(s)\n * Use after createAuthMiddleware\n *\n * @example\n * ```ts\n * app.get('/admin', authMiddleware, requireRole('admin'), handler);\n * app.get('/managers', authMiddleware, requireRole('admin', 'manager'), handler);\n * ```\n */\nexport function requireRole(\n ...allowedRoles: string[]\n): MiddlewareHandler<{ Variables: AuthVariables }> {\n return async (c, next) => {\n const auth = c.get('auth');\n\n if (!auth) {\n return c.json({ error: 'Unauthorized', message: 'Authentication required' }, 401);\n }\n\n const guard = createAuthorizationGuard(toAuthorizationContext(auth));\n\n if (!guard.hasAnyRole(allowedRoles)) {\n return c.json(\n {\n error: 'Forbidden',\n message: 'Insufficient role',\n required: allowedRoles,\n current: auth.roles ?? [],\n },\n 403\n );\n }\n\n await next();\n };\n}\n\n/**\n * Require specific permission(s)\n * Supports wildcards: 'users:*', '*:read', '*'\n *\n * @example\n * ```ts\n * app.get('/users', authMiddleware, requirePermission('users:read'), handler);\n * app.delete('/users/:id', authMiddleware, requirePermission('users:delete'), handler);\n * ```\n */\nexport function requirePermission(\n ...permissions: PermissionPattern[]\n): MiddlewareHandler<{ Variables: AuthVariables }> {\n return async (c, next) => {\n const auth = c.get('auth');\n\n if (!auth) {\n return c.json({ error: 'Unauthorized', message: 'Authentication required' }, 401);\n }\n\n const guard = createAuthorizationGuard(toAuthorizationContext(auth));\n\n // Check if user has ALL required permissions\n if (!guard.hasAllPermissions(permissions)) {\n return c.json(\n {\n error: 'Forbidden',\n message: 'Missing required permissions',\n required: permissions,\n current: auth.permissions ?? [],\n },\n 403\n );\n }\n\n await next();\n };\n}\n\n/**\n * Require any of the specified permissions\n * User only needs one of the permissions\n *\n * @example\n * ```ts\n * app.get('/content', authMiddleware, requireAnyPermission('content:read', 'content:admin'), handler);\n * ```\n */\nexport function requireAnyPermission(\n ...permissions: PermissionPattern[]\n): MiddlewareHandler<{ Variables: AuthVariables }> {\n return async (c, next) => {\n const auth = c.get('auth');\n\n if (!auth) {\n return c.json({ error: 'Unauthorized', message: 'Authentication required' }, 401);\n }\n\n const guard = createAuthorizationGuard(toAuthorizationContext(auth));\n\n if (!guard.hasAnyPermission(permissions)) {\n return c.json(\n {\n error: 'Forbidden',\n message: 'Missing required permissions',\n required: permissions,\n current: auth.permissions ?? [],\n },\n 403\n );\n }\n\n await next();\n };\n}\n\n/**\n * Require tenant context\n * Ensures user has an active tenant selected\n *\n * @example\n * ```ts\n * app.use('/api/tenant/*', authMiddleware, requireTenant());\n * ```\n */\nexport function requireTenant(): MiddlewareHandler<{ Variables: AuthVariables }> {\n return async (c, next) => {\n const auth = c.get('auth');\n\n if (!auth) {\n return c.json({ error: 'Unauthorized', message: 'Authentication required' }, 401);\n }\n\n if (!auth.tenantId) {\n return c.json(\n { error: 'Forbidden', message: 'Tenant context required' },\n 403\n );\n }\n\n await next();\n };\n}\n\n/**\n * Require access to specific tenant\n * Validates that user can access the tenant specified in the request\n *\n * @example\n * ```ts\n * // Check tenant from URL param\n * app.get('/tenants/:tenantId/*', authMiddleware, requireTenantAccess(c => c.req.param('tenantId')), handler);\n *\n * // Check tenant from header\n * app.use('/api/*', authMiddleware, requireTenantAccess(c => c.req.header('x-tenant-id')), handler);\n * ```\n */\nexport function requireTenantAccess(\n getTenantId: (c: Context) => string | undefined,\n options?: {\n /** Roles that can access any tenant (e.g., ['super_admin']) */\n bypassRoles?: string[];\n }\n): MiddlewareHandler<{ Variables: AuthVariables }> {\n return async (c, next) => {\n const auth = c.get('auth');\n\n if (!auth) {\n return c.json({ error: 'Unauthorized', message: 'Authentication required' }, 401);\n }\n\n const requestedTenantId = getTenantId(c);\n\n // If no tenant requested, allow (tenant might be optional)\n if (!requestedTenantId) {\n await next();\n return;\n }\n\n const guard = createAuthorizationGuard(toAuthorizationContext(auth));\n\n // Check bypass roles (e.g., super_admin)\n if (options?.bypassRoles && guard.hasAnyRole(options.bypassRoles)) {\n await next();\n return;\n }\n\n // Check if user has access to the requested tenant\n if (auth.tenantId !== requestedTenantId) {\n return c.json(\n {\n error: 'Forbidden',\n message: 'Access denied to this tenant',\n requestedTenant: requestedTenantId,\n },\n 403\n );\n }\n\n await next();\n };\n}\n\n/**\n * Require admin access\n * Checks for 'admin' or 'owner' role, or '*' permission\n *\n * @example\n * ```ts\n * app.use('/admin/*', authMiddleware, requireAdmin(), handler);\n * ```\n */\nexport function requireAdmin(): MiddlewareHandler<{ Variables: AuthVariables }> {\n return async (c, next) => {\n const auth = c.get('auth');\n\n if (!auth) {\n return c.json({ error: 'Unauthorized', message: 'Authentication required' }, 401);\n }\n\n const guard = createAuthorizationGuard(toAuthorizationContext(auth));\n\n const isAdmin =\n guard.hasRole('admin') ||\n guard.hasRole('owner') ||\n guard.hasRole('superadmin') ||\n guard.hasRole('super_admin') ||\n guard.hasPermission('*');\n\n if (!isAdmin) {\n return c.json({ error: 'Forbidden', message: 'Admin access required' }, 403);\n }\n\n await next();\n };\n}\n\n/**\n * Require resource ownership or permission\n * Allows access if user owns the resource OR has the specified permission\n *\n * @example\n * ```ts\n * app.put('/posts/:id', authMiddleware, requireOwnerOrPermission(\n * async (c) => (await getPost(c.req.param('id'))).authorId,\n * 'posts:edit'\n * ), handler);\n * ```\n */\nexport function requireOwnerOrPermission(\n getOwnerId: (c: Context) => string | Promise<string>,\n permission: PermissionPattern\n): MiddlewareHandler<{ Variables: AuthVariables }> {\n return async (c, next) => {\n const auth = c.get('auth');\n\n if (!auth) {\n return c.json({ error: 'Unauthorized', message: 'Authentication required' }, 401);\n }\n\n const guard = createAuthorizationGuard(toAuthorizationContext(auth));\n\n // Check permission first (faster than potentially async ownership check)\n if (guard.hasPermission(permission)) {\n await next();\n return;\n }\n\n // Check ownership\n const ownerId = await getOwnerId(c);\n if (auth.userId === ownerId) {\n await next();\n return;\n }\n\n return c.json(\n {\n error: 'Forbidden',\n message: 'Resource owner or permission required',\n requiredPermission: permission,\n },\n 403\n );\n };\n}\n\n/**\n * Combine multiple authorization requirements\n * All requirements must pass\n *\n * @example\n * ```ts\n * app.delete('/projects/:id',\n * authMiddleware,\n * requireAll(\n * requireTenant(),\n * requireRole('admin', 'manager'),\n * requirePermission('projects:delete')\n * ),\n * handler\n * );\n * ```\n */\nexport function requireAll(\n ...middlewares: MiddlewareHandler<{ Variables: AuthVariables }>[]\n): MiddlewareHandler<{ Variables: AuthVariables }> {\n return async (c, next) => {\n for (const middleware of middlewares) {\n let passed = false;\n await middleware(c, async () => {\n passed = true;\n });\n if (!passed) {\n // Middleware already sent error response\n return;\n }\n }\n await next();\n };\n}\n\n/**\n * Combine multiple authorization requirements\n * At least one requirement must pass\n *\n * @example\n * ```ts\n * app.get('/content/:id',\n * authMiddleware,\n * requireAny(\n * requireRole('admin'),\n * requirePermission('content:read'),\n * requireOwnerOrPermission(getContentOwnerId, 'content:view-own')\n * ),\n * handler\n * );\n * ```\n */\nexport function requireAny(\n ...middlewares: MiddlewareHandler<{ Variables: AuthVariables }>[]\n): MiddlewareHandler<{ Variables: AuthVariables }> {\n return async (c, next) => {\n for (const middleware of middlewares) {\n let passed = false;\n await middleware(c, async () => {\n passed = true;\n });\n if (passed) {\n await next();\n return;\n }\n }\n // None passed\n return c.json(\n { error: 'Forbidden', message: 'None of the authorization requirements were met' },\n 403\n );\n };\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { K as KVStorage } from './types-DSjafxJ4.js';
|
|
2
|
-
import { A as AuthProvider, g as OtpConfig, V as VerifyInput, d as VerifyResult, b as AuthInput, c as AuthResult, a as ProviderInfo } from './base-
|
|
2
|
+
import { A as AuthProvider, g as OtpConfig, V as VerifyInput, d as VerifyResult, b as AuthInput, c as AuthResult, a as ProviderInfo } from './base-DbUdEGJ4.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* OTP Manager
|