import { OAuth2Strategy } from 'remix-auth-oauth2';
export declare const baseProfileFields: readonly ["id", "email", "name", "first_name", "middle_name", "last_name", "picture"];
export declare const FacebookStrategyName = "facebook";
export declare const FacebookStrategyDefaultScopes: FacebookScope[];
export declare const FacebookStrategyScopeSeperator = ",";
export type FacebookProfileFields = [
    ...typeof baseProfileFields,
    ...AdditionalFacebookProfileField[]
];
export declare class FacebookStrategy<User> extends OAuth2Strategy<User> {
    name: string;
    private readonly scope;
    private readonly userInfoURL;
    private readonly profileFields;
    constructor({ clientId, clientSecret, redirectURI, scopes, extraProfileFields, }: FacebookStrategyOptions, verify: OAuth2Strategy<User>['verify']);
    private getScope;
    protected authorizationParams(): URLSearchParams;
    protected userProfile(accessToken: string): Promise<FacebookProfile>;
}
/**
 * @see https://developers.facebook.com/docs/permissions/reference
 */
export type FacebookScope = 'ads_management' | 'ads_read' | 'attribution_read' | 'catalog_management' | 'business_management' | 'email' | 'gaming_user_locale' | 'groups_access_member_info' | 'instagram_basic' | 'instagram_content_publish' | 'instagram_manage_comments' | 'instagram_manage_insights' | 'instagram_manage_messages' | 'leads_retrieval' | 'manage_pages' | 'page_events' | 'pages_manage_ads' | 'pages_manage_cta' | 'pages_manage_engagement' | 'pages_manage_instant_articles' | 'pages_manage_metadata' | 'pages_manage_posts' | 'pages_messaging' | 'pages_read_engagement' | 'pages_read_user_content' | 'pages_show_list' | 'pages_user_gender' | 'pages_user_locale' | 'pages_user_timezone' | 'publish_pages' | 'public_profile' | 'publish_to_groups' | 'publish_video' | 'read_insights' | 'research_apis' | 'user_age_range' | 'user_birthday' | 'user_friends' | 'user_gender' | 'user_hometown' | 'user_likes' | 'user_link' | 'user_location' | 'user_messenger_contact' | 'user_photos' | 'user_posts' | 'user_videos';
export type AdditionalFacebookProfileField = 'about' | 'birthday' | 'id' | 'age_range' | 'education' | 'email' | 'favorite_athletes' | 'favorite_teams' | 'first_name' | 'gender' | 'hometown' | 'inspirational_people' | 'install_type' | 'installed' | 'is_guest_user' | 'languages' | 'last_name' | 'link' | 'location' | 'meeting_for' | 'middle_name' | 'name' | 'name_format' | 'payment_pricepoints' | 'political' | 'picture' | 'profile_pic' | 'quotes' | 'relationship_status' | 'shared_login_upgrade_required_by' | 'short_name' | 'significant_other' | 'sports' | 'supports_donate_button_in_live_video' | 'token_for_business' | 'video_upload_limits' | 'website';
export type FacebookStrategyOptions = {
    clientId: string;
    clientSecret: string;
    redirectURI: string;
    /**
     * @default ["public_profile", "email"]
     *
     * See all the possible scopes:
     * @see https://developers.facebook.com/docs/permissions/reference
     */
    scopes?: FacebookScope[] | string;
    /**
     * Additional fields that will show up in the profile._json object
     *
     * The following fields are included as part of the Oauth2 basic profile
     * ['id', 'email', 'name', 'first_name', 'middle_name', 'last_name']
     *
     * Note: some fields require additional scopes
     */
    extraProfileFields?: Array<AdditionalFacebookProfileField>;
};
export type FacebookProfile = {
    id: string;
    displayName: string;
    name: {
        familyName: string;
        givenName: string;
    };
    emails: [{
        value: string;
    }];
    photos: [{
        value: string;
    }];
    _json: {
        id: string;
        name: string;
        first_name: string;
        last_name: string;
        picture: FacebookPicture;
        email: string;
    };
};
export type FacebookExtraParams = {
    expires_in: number;
    token_type: 'bearer';
} & Record<string, string | number>;
export interface FacebookPictureData {
    url: string;
    width: number;
    height: number;
    is_silhouette: boolean;
}
export interface FacebookPicture {
    data: FacebookPictureData;
}
