UNPKG

@gftdcojp/ksqldb-orm

Version:

ksqldb-orm - Server-Side TypeScript ORM for ksqlDB with enterprise security extensions

185 lines 5.31 kB
/** * JWT認証システム - Supabase風のJWT認証実装 */ /** * リフレッシュトークンデータ */ interface RefreshTokenData { userId: string; expiresAt: number; createdAt?: number; lastUsedAt?: number; } /** * リフレッシュトークンストレージインターフェース */ export interface RefreshTokenStorage { /** * リフレッシュトークンを保存 * @param tokenId トークンID * @param data トークンデータ */ store(tokenId: string, data: RefreshTokenData): Promise<void>; /** * リフレッシュトークンを取得 * @param tokenId トークンID */ get(tokenId: string): Promise<RefreshTokenData | null>; /** * リフレッシュトークンを削除 * @param tokenId トークンID */ delete(tokenId: string): Promise<void>; /** * 期限切れトークンをクリーンアップ */ cleanup(): Promise<number>; /** * ユーザーの全トークンを削除 * @param userId ユーザーID */ deleteAllForUser(userId: string): Promise<void>; } /** * ユーザーペイロード */ export interface UserPayload { sub: string; email?: string; role: 'anon' | 'authenticated' | 'service_role'; tenant_id?: string; metadata?: Record<string, any>; app_metadata?: Record<string, any>; user_metadata?: Record<string, any>; } /** * JWT認証結果 */ export interface AuthResult { accessToken: string; refreshToken: string; user: UserPayload; expiresAt: number; expiresIn: number; } /** * JWT認証管理クラス */ export declare class JwtAuthManager { private static instance; private config; private refreshTokenStorage; private constructor(); /** * シングルトンインスタンスを取得 */ static getInstance(): JwtAuthManager; /** * リフレッシュトークンストレージを設定 * @param storage カスタムストレージ実装 */ setRefreshTokenStorage(storage: RefreshTokenStorage): void; /** * Redisストレージを設定 * @param redis Redisクライアント * @param keyPrefix キーのプレフィックス */ setRedisStorage(redis: any, keyPrefix?: string): void; /** * PostgreSQLストレージを設定 * @param db PostgreSQLクライアント * @param tableName テーブル名 */ setPostgreSQLStorage(db: any, tableName?: string): void; /** * アクセストークンを生成 */ generateAccessToken(user: UserPayload): string; /** * リフレッシュトークンを生成 */ generateRefreshToken(userId: string): Promise<string>; /** * 認証トークンのペアを生成 */ generateAuthTokens(user: UserPayload): Promise<AuthResult>; /** * アクセストークンを検証 */ verifyAccessToken(token: string): UserPayload | null; /** * リフレッシュトークンを検証 */ verifyRefreshToken(refreshToken: string): Promise<string | null>; /** * リフレッシュトークンを使用してアクセストークンを更新 */ refreshAccessToken(refreshToken: string, currentUser: UserPayload): Promise<AuthResult | null>; /** * 匿名ユーザーのトークンを生成 */ generateAnonymousToken(tenantId?: string): Promise<AuthResult>; /** * サービスロールトークンを生成 */ generateServiceRoleToken(tenantId?: string): Promise<AuthResult>; /** * トークンを無効化 */ revokeToken(refreshToken: string): Promise<void>; /** * ユーザーの全トークンを無効化 */ revokeAllTokensForUser(userId: string): Promise<void>; /** * 期限切れのリフレッシュトークンをクリーンアップ */ cleanupExpiredTokens(): Promise<void>; /** * 有効期限の文字列をミリ秒に変換 */ private parseExpiration; } /** * Express.js ミドルウェア: JWT認証 */ export declare function jwtAuthMiddleware(options?: { requireAuth?: boolean; allowAnonymous?: boolean; requiredRole?: 'anon' | 'authenticated' | 'service_role'; }): (req: any, res: any, next: any) => any; /** * JWT認証のヘルパー関数 */ export declare const jwtAuth: { /** * 認証マネージャーのインスタンスを取得 */ manager: () => JwtAuthManager; /** * ユーザーを認証してトークンを発行 */ authenticate: (user: UserPayload) => Promise<AuthResult>; /** * 匿名認証トークンを発行 */ authenticateAnonymous: (tenantId?: string) => Promise<AuthResult>; /** * サービスロール認証トークンを発行 */ authenticateServiceRole: (tenantId?: string) => Promise<AuthResult>; /** * トークンを検証 */ verify: (token: string) => UserPayload | null; /** * トークンをリフレッシュ */ refresh: (refreshToken: string, currentUser: UserPayload) => Promise<AuthResult | null>; /** * トークンを無効化 */ revoke: (refreshToken: string) => void; }; export {}; //# sourceMappingURL=jwt-auth.d.ts.map