/**
 * JWT認証システム - Supabase風のJWT認証実装
 */
/**
 * ユーザーペイロード
 */
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 refreshTokenStore;
    private constructor();
    /**
     * シングルトンインスタンスを取得
     */
    static getInstance(): JwtAuthManager;
    /**
     * アクセストークンを生成
     */
    generateAccessToken(user: UserPayload): string;
    /**
     * リフレッシュトークンを生成
     */
    generateRefreshToken(userId: string): string;
    /**
     * 認証トークンのペアを生成
     */
    generateAuthTokens(user: UserPayload): AuthResult;
    /**
     * アクセストークンを検証
     */
    verifyAccessToken(token: string): UserPayload | null;
    /**
     * リフレッシュトークンを検証
     */
    verifyRefreshToken(refreshToken: string): string | null;
    /**
     * リフレッシュトークンを使用してアクセストークンを更新
     */
    refreshAccessToken(refreshToken: string, currentUser: UserPayload): AuthResult | null;
    /**
     * 匿名ユーザーのトークンを生成
     */
    generateAnonymousToken(tenantId?: string): AuthResult;
    /**
     * サービスロールトークンを生成
     */
    generateServiceRoleToken(tenantId?: string): AuthResult;
    /**
     * トークンを無効化
     */
    revokeToken(refreshToken: string): void;
    /**
     * 期限切れのリフレッシュトークンをクリーンアップ
     */
    cleanupExpiredTokens(): 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) => AuthResult;
    /**
     * 匿名認証トークンを発行
     */
    authenticateAnonymous: (tenantId?: string) => AuthResult;
    /**
     * サービスロール認証トークンを発行
     */
    authenticateServiceRole: (tenantId?: string) => AuthResult;
    /**
     * トークンを検証
     */
    verify: (token: string) => UserPayload;
    /**
     * トークンをリフレッシュ
     */
    refresh: (refreshToken: string, currentUser: UserPayload) => AuthResult;
    /**
     * トークンを無効化
     */
    revoke: (refreshToken: string) => void;
};
//# sourceMappingURL=jwt-auth.d.ts.map