/**
 * Auth0統合 - Auth0 JWTトークンとAuthorization Extension APIとの連携
 */
import { UserPayload } from './types';
/**
 * 🏢 Organization API Type Definitions
 */
export interface Organization {
    id: string;
    name: string;
    display_name?: string;
    branding?: {
        logo_url?: string;
        colors?: {
            primary?: string;
            page_background?: string;
        };
    };
    metadata?: Record<string, any>;
    enabled_connections?: Array<{
        connection_id: string;
        assign_membership_on_login?: boolean;
        show_as_button?: boolean;
    }>;
}
export interface OrganizationMember {
    user_id: string;
    name?: string;
    email?: string;
    picture?: string;
    roles?: Array<{
        id: string;
        name: string;
    }>;
}
export interface OrganizationInvitation {
    id: string;
    inviter: {
        name: string;
    };
    invitee: {
        email: string;
    };
    invitation_url: string;
    organization_id: string;
    client_id: string;
    connection_id?: string;
    expires_at: string;
    created_at: string;
    roles?: string[];
    app_metadata?: Record<string, any>;
    user_metadata?: Record<string, any>;
}
export interface OrganizationRole {
    id: string;
    name: string;
    description?: string;
}
/**
 * Auth0設定
 */
interface Auth0Config {
    domain: string;
    audience: string;
    clientId?: string;
    jwksUri?: string;
    authorizationExtension?: {
        url: string;
        clientId: string;
        clientSecret: string;
        audience: string;
        region: 'us-west' | 'europe' | 'australia';
    };
}
/**
 * Auth0ユーザークレーム
 */
interface Auth0Claims {
    sub: string;
    email?: string;
    email_verified?: boolean;
    name?: string;
    picture?: string;
    nickname?: string;
    'https://your-app.com/roles'?: string[];
    'https://your-app.com/permissions'?: string[];
    'https://your-app.com/tenant_id'?: string;
    [key: string]: any;
}
/**
 * 🔐 NEW: Authorization Extension API レスポンス型
 */
interface AuthExtensionGroup {
    _id: string;
    name: string;
    description: string;
    members?: string[];
    mappings?: Array<{
        _id: string;
        groupName: string;
        connectionName: string;
    }>;
    nested?: string[];
    roles?: string[];
}
interface AuthExtensionRole {
    _id: string;
    name: string;
    description: string;
    applicationId: string;
    permissions?: string[];
}
interface AuthExtensionPolicy {
    groups: string[];
    roles: string[];
    permissions: string[];
}
/**
 * Auth0統合マネージャー
 */
export declare class Auth0Integration {
    private static instance;
    private config;
    private jwksClient;
    private extensionAccessToken;
    private extensionTokenExpiry;
    private constructor();
    /**
     * 🔐 NEW: Extension URLを構築
     */
    private buildExtensionUrl;
    /**
     * シングルトンインスタンスを取得
     */
    static getInstance(customConfig?: Partial<Auth0Config>): Auth0Integration;
    /**
     * 設定を更新
     */
    private updateConfig;
    /**
     * 🔐 NEW: Machine-to-Machine認証でExtension Access Tokenを取得
     */
    private getExtensionAccessToken;
    /**
     * 🔐 NEW: Extension APIリクエストヘルパー
     */
    private extensionApiRequest;
    /**
     * Auth0 JWTトークンを検証
     */
    verifyAuth0Token(token: string): Promise<Auth0Claims | null>;
    /**
     * Auth0クレームをGFTD ORMユーザーペイロードに変換
     */
    mapAuth0ToUserPayload(auth0Claims: Auth0Claims): UserPayload;
    /**
     * Auth0トークンからGFTD ORMユーザーを認証
     */
    authenticateWithAuth0(token: string): Promise<{
        success: boolean;
        user?: UserPayload;
        error?: string;
    }>;
    /**
     * Auth0権限をチェック
     */
    checkAuth0Permission(user: UserPayload, permission: string): boolean;
    /**
     * Auth0ロールをチェック
     */
    checkAuth0Role(user: UserPayload, role: string): boolean;
    /**
     * Auth0のManagement APIを使ってユーザー情報を取得
     */
    getAuth0UserInfo(managementToken: string, userId: string): Promise<any>;
    /**
     * Auth0のManagement APIを使ってユーザーロールを更新
     */
    updateAuth0UserRoles(managementToken: string, userId: string, roles: string[]): Promise<void>;
    /**
     * �� NEW: Extension API - 全グループを取得
     */
    getGroups(): Promise<{
        groups: AuthExtensionGroup[];
        total: number;
    }>;
    /**
     * 🔐 NEW: Extension API - 特定のグループを取得
     */
    getGroup(groupId: string, expand?: boolean): Promise<AuthExtensionGroup>;
    /**
     * 🔐 NEW: Extension API - グループを作成
     */
    createGroup(name: string, description?: string): Promise<AuthExtensionGroup>;
    /**
     * 🔐 NEW: Extension API - グループを更新
     */
    updateGroup(groupId: string, updates: Partial<AuthExtensionGroup>): Promise<AuthExtensionGroup>;
    /**
     * 🔐 NEW: Extension API - グループを削除
     */
    deleteGroup(groupId: string): Promise<void>;
    /**
     * 🔐 NEW: Extension API - 全ロールを取得
     */
    getRoles(): Promise<AuthExtensionRole[]>;
    /**
     * 🔐 NEW: Extension API - 特定のロールを取得
     */
    getRole(roleId: string): Promise<AuthExtensionRole>;
    /**
     * 🔐 NEW: Extension API - ロールを作成
     */
    createRole(name: string, description?: string, applicationId?: string): Promise<AuthExtensionRole>;
    /**
     * 🔐 NEW: Extension API - ロールを更新
     */
    updateRole(roleId: string, updates: Partial<AuthExtensionRole>): Promise<AuthExtensionRole>;
    /**
     * 🔐 NEW: Extension API - ロールを削除
     */
    deleteRole(roleId: string): Promise<void>;
    /**
     * 🔐 NEW: Extension API - ユーザーのロールを取得
     */
    getUserRoles(userId: string): Promise<AuthExtensionRole[]>;
    /**
     * 🔐 NEW: Extension API - ユーザーにロールを追加
     */
    addUserToRoles(userId: string, roleIds: string[]): Promise<void>;
    /**
     * 🔐 NEW: Extension API - ユーザーからロールを削除
     */
    removeUserFromRoles(userId: string, roleIds: string[]): Promise<void>;
    /**
     * 🔐 NEW: Extension API - ユーザーのロールを計算（グループ含む）
     */
    calculateUserRoles(userId: string): Promise<AuthExtensionRole[]>;
    /**
     * 🔐 NEW: Extension API - 認可ポリシーを実行
     */
    executeAuthorizationPolicy(userId: string, clientId: string, connectionName: string, groups?: string[]): Promise<AuthExtensionPolicy>;
    /**
     * 🔐 NEW: Extension API - ユーザーのグループを取得
     */
    getUserGroups(userId: string): Promise<AuthExtensionGroup[]>;
    /**
     * 🔐 NEW: Extension API - ユーザーをグループに追加
     */
    addUserToGroups(userId: string, groupIds: string[]): Promise<void>;
    /**
     * 🔐 NEW: Extension API - ユーザーをグループから削除
     */
    removeUserFromGroups(userId: string, groupIds: string[]): Promise<void>;
    /**
     * Auth0 Universal Login URLを生成
     */
    buildLoginUrl(options: {
        redirectUri: string;
        responseType?: 'code' | 'token';
        scope?: string;
        state?: string;
        nonce?: string;
        connection?: string;
        prompt?: 'login' | 'consent' | 'select_account';
    }): string;
    /**
     * Auth0 Universal Signup URLを生成
     */
    buildSignupUrl(options: {
        redirectUri: string;
        responseType?: 'code' | 'token';
        scope?: string;
        state?: string;
        nonce?: string;
        connection?: string;
    }): string;
    /**
     * Auth0 Logout URLを生成
     */
    buildLogoutUrl(options: {
        returnTo: string;
        clientId?: string;
    }): string;
    /**
     * Auth0 Password Reset URLを生成
     */
    buildPasswordResetUrl(options: {
        email: string;
        connection?: string;
    }): string;
    /**
     * Authorization Codeを使ってTokenを取得
     */
    exchangeCodeForToken(options: {
        code: string;
        redirectUri: string;
        codeVerifier?: string;
        clientSecret?: string;
    }): Promise<{
        access_token: string;
        id_token: string;
        token_type: string;
        expires_in: number;
        scope: string;
        refresh_token?: string;
    }>;
    /**
     * Refresh Tokenを使って新しいAccess Tokenを取得
     */
    refreshAccessToken(refreshToken: string): Promise<{
        access_token: string;
        id_token: string;
        token_type: string;
        expires_in: number;
        scope: string;
    }>;
    /**
     * Management APIアクセストークンを取得
     */
    getManagementApiToken(): Promise<string>;
    /**
     * Management APIを使ってユーザーを作成
     */
    createUser(options: {
        email: string;
        password: string;
        name?: string;
        connection?: string;
        email_verified?: boolean;
        user_metadata?: any;
        app_metadata?: any;
    }): Promise<any>;
    /**
     * Management APIを使ってユーザーを更新
     */
    updateUser(userId: string, updates: {
        email?: string;
        name?: string;
        password?: string;
        user_metadata?: any;
        app_metadata?: any;
        email_verified?: boolean;
    }): Promise<any>;
    /**
     * Management APIを使ってユーザーを削除
     */
    deleteUser(userId: string): Promise<void>;
    /**
     * パスワードリセットメールを送信
     */
    sendPasswordResetEmail(email: string, connection?: string): Promise<void>;
    /**
     * Email verification を送信
     */
    sendEmailVerification(userId: string): Promise<void>;
    /**
     * ユーザーのプロファイルを取得
     */
    getUserProfile(userId: string): Promise<any>;
    /**
     * ユーザーリストを取得
     */
    getUsers(options?: {
        page?: number;
        per_page?: number;
        search?: string;
        sort?: string;
        connection?: string;
    }): Promise<any[]>;
    /**
     * PKCEチャレンジを生成
     */
    generatePKCEChallenge(): {
        codeVerifier: string;
        codeChallenge: string;
    };
    /**
     * ランダム文字列を生成
     */
    private generateRandomString;
    /**
     * SHA256ハッシュを計算
     */
    private sha256;
    /**
     * Base64URLエンコード
     */
    private base64URLEncode;
    /**
     * 🏢 Organizations一覧を取得
     */
    getOrganizations(options?: {
        page?: number;
        per_page?: number;
        include_totals?: boolean;
        from?: string;
        take?: number;
    }): Promise<{
        organizations: Organization[];
        total?: number;
    }>;
    /**
     * 🏢 特定のOrganizationを取得
     */
    getOrganization(organizationId: string): Promise<Organization>;
    /**
     * 🏢 Organizationを作成
     */
    createOrganization(organization: {
        name: string;
        display_name?: string;
        branding?: {
            logo_url?: string;
            colors?: {
                primary?: string;
                page_background?: string;
            };
        };
        metadata?: Record<string, any>;
    }): Promise<Organization>;
    /**
     * 🏢 Organizationを更新
     */
    updateOrganization(organizationId: string, updates: {
        name?: string;
        display_name?: string;
        branding?: {
            logo_url?: string;
            colors?: {
                primary?: string;
                page_background?: string;
            };
        };
        metadata?: Record<string, any>;
    }): Promise<Organization>;
    /**
     * 🏢 Organizationを削除
     */
    deleteOrganization(organizationId: string): Promise<void>;
    /**
     * 🏢 Organization Membersを取得
     */
    getOrganizationMembers(organizationId: string, options?: {
        page?: number;
        per_page?: number;
        include_totals?: boolean;
        from?: string;
        take?: number;
    }): Promise<{
        members: OrganizationMember[];
        total?: number;
    }>;
    /**
     * 🏢 OrganizationにMemberを追加
     */
    addOrganizationMembers(organizationId: string, userIds: string[]): Promise<void>;
    /**
     * 🏢 OrganizationからMemberを削除
     */
    removeOrganizationMembers(organizationId: string, userIds: string[]): Promise<void>;
    /**
     * 🏢 Organization Invitationを作成（メンバー招待）
     */
    createOrganizationInvitation(organizationId: string, invitation: {
        inviter: {
            name: string;
        };
        invitee: {
            email: string;
        };
        client_id: string;
        connection_id?: string;
        app_metadata?: Record<string, any>;
        user_metadata?: Record<string, any>;
        roles?: string[];
        send_invitation_email?: boolean;
        ttl_sec?: number;
    }): Promise<OrganizationInvitation>;
    /**
     * 🏢 Organization Invitationsを取得
     */
    getOrganizationInvitations(organizationId: string, options?: {
        page?: number;
        per_page?: number;
        include_totals?: boolean;
        sort?: string;
        from?: string;
        take?: number;
    }): Promise<{
        invitations: OrganizationInvitation[];
        total?: number;
    }>;
    /**
     * 🏢 Organization Invitationを取得
     */
    getOrganizationInvitation(organizationId: string, invitationId: string): Promise<OrganizationInvitation>;
    /**
     * 🏢 Organization Invitationを削除
     */
    deleteOrganizationInvitation(organizationId: string, invitationId: string): Promise<void>;
    /**
     * 🏢 Organization-scoped Access Tokenを取得
     */
    getOrganizationAccessToken(options: {
        organizationId: string;
        audience?: string;
        scope?: string;
        grant_type?: 'client_credentials';
    }): Promise<{
        access_token: string;
        token_type: string;
        expires_in: number;
        scope?: string;
    }>;
    /**
     * 🏢 Organization Rolesを取得
     */
    getOrganizationRoles(organizationId: string): Promise<OrganizationRole[]>;
    /**
     * 🏢 Organization Member Rolesを取得
     */
    getOrganizationMemberRoles(organizationId: string, userId: string): Promise<OrganizationRole[]>;
    /**
     * 🏢 Organization Memberにロールを追加
     */
    addOrganizationMemberRoles(organizationId: string, userId: string, roleIds: string[]): Promise<void>;
    /**
     * 🏢 Organization Memberからロールを削除
     */
    removeOrganizationMemberRoles(organizationId: string, userId: string, roleIds: string[]): Promise<void>;
}
/**
 * Express.js ミドルウェア: Auth0認証
 */
export declare function auth0AuthMiddleware(options?: {
    requireAuth?: boolean;
    requiredPermissions?: string[];
    requiredRoles?: string[];
}): (req: any, res: any, next: any) => Promise<any>;
/**
 * Auth0統合のヘルパー関数
 */
export declare const auth0: {
    /**
     * 統合マネージャーのインスタンスを取得
     */
    manager: () => Auth0Integration;
    /**
     * Auth0トークンで認証
     */
    authenticate: (token: string, customConfig?: Partial<Auth0Config>) => Promise<{
        success: boolean;
        user?: UserPayload;
        error?: string;
    }>;
    /**
     * 権限チェック
     */
    checkPermission: (user: UserPayload, permission: string) => boolean;
    /**
     * ロールチェック
     */
    checkRole: (user: UserPayload, role: string) => boolean;
    /**
     * トークン検証
     */
    verifyToken: (token: string) => Promise<Auth0Claims | null>;
    /**
     * ユーザー情報取得
     */
    getUserInfo: (managementToken: string, userId: string) => Promise<any>;
};
export {};
//# sourceMappingURL=auth0-integration.d.ts.map