@gftdcojp/ksqldb-orm
Version:
ksqldb-orm - Server-Side TypeScript ORM for ksqlDB with enterprise security extensions
185 lines • 5.31 kB
TypeScript
/**
* 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