/**
 * 匿名キーシステム - Supabase風の公開キー管理
 */
import { UserPayload } from './types';
/**
 * キーの種類
 */
export declare enum KeyType {
    ANON = "anon",
    SERVICE_ROLE = "service_role"
}
/**
 * キー設定
 */
interface KeyConfig {
    key: string;
    type: KeyType;
    permissions: string[];
    description: string;
    createdAt: Date;
    expiresAt?: Date;
    isActive: boolean;
}
/**
 * 匿名キー管理クラス
 */
export declare class AnonKeyManager {
    private static instance;
    private keys;
    private keyPrefix;
    private constructor();
    /**
     * シングルトンインスタンスを取得
     */
    static getInstance(): AnonKeyManager;
    /**
     * デフォルトキーを初期化
     */
    private initializeDefaultKeys;
    /**
     * キーを生成
     */
    private generateKey;
    /**
     * キーを検証
     */
    validateKey(key: string): KeyConfig | null;
    /**
     * キーからユーザーペイロードを作成
     */
    createUserFromKey(key: string, userId?: string): UserPayload | null;
    /**
     * キーベースの認証を実行
     */
    authenticateWithKey(key: string, userId?: string): {
        success: boolean;
        user?: UserPayload;
        token?: string;
        error?: string;
    };
    /**
     * 権限をチェック
     */
    checkPermission(key: string, permission: string): boolean;
    /**
     * 新しいキーを生成
     */
    createKey(type: KeyType, permissions: string[], description: string, expiresAt?: Date): string;
    /**
     * キーを無効化
     */
    revokeKey(key: string): boolean;
    /**
     * キー一覧を取得
     */
    listKeys(): KeyConfig[];
    /**
     * 匿名キーを取得
     */
    getAnonKey(): string | null;
    /**
     * サービスロールキーを取得
     */
    getServiceRoleKey(): string | null;
    /**
     * 期限切れキーをクリーンアップ
     */
    cleanupExpiredKeys(): void;
}
/**
 * Express.js ミドルウェア: 匿名キー認証
 */
export declare function anonKeyAuthMiddleware(options?: {
    requireAuth?: boolean;
    requiredPermissions?: string[];
}): (req: any, res: any, next: any) => any;
/**
 * 匿名キーシステムのヘルパー関数
 */
export declare const anonKeySystem: {
    /**
     * マネージャーインスタンスを取得
     */
    manager: () => AnonKeyManager;
    /**
     * 匿名キーで認証
     */
    authenticateAnon: (userId?: string) => {
        success: boolean;
        user?: UserPayload;
        token?: string;
        error?: string;
    };
    /**
     * サービスロールキーで認証
     */
    authenticateService: (userId?: string) => {
        success: boolean;
        user?: UserPayload;
        token?: string;
        error?: string;
    };
    /**
     * 権限チェック
     */
    checkPermission: (key: string, permission: string) => boolean;
    /**
     * 新しいキーを作成
     */
    createKey: (type: KeyType, permissions: string[], description: string, expiresAt?: Date) => string;
    /**
     * キーを無効化
     */
    revokeKey: (key: string) => boolean;
    /**
     * 公開キーを取得
     */
    getPublicKeys: () => {
        anonKey: string | null;
    };
};
export {};
//# sourceMappingURL=anon-key-system.d.ts.map