import { OAuth2Tokens, ProviderOptions } from "../oauth2/oauth-provider.mjs";
import "../oauth2/index.mjs";

//#region src/social-providers/zoom.d.ts
type LoginType = 0 /** Facebook OAuth */ | 1 /** Google OAuth */ | 24 /** Apple OAuth */ | 27 /** Microsoft OAuth */ | 97 /** Mobile device */ | 98 /** RingCentral OAuth */ | 99 /** API user */ | 100 /** Zoom Work email */ | 101;
/** Single Sign-On (SSO) */
type AccountStatus = "pending" | "active" | "inactive";
type PronounOption = 1 /** Ask the user every time */ | 2 /** Always display */ | 3;
/** Do not display */
interface PhoneNumber {
  /** The country code of the phone number (Example: "+1") */
  code: string;
  /** The country of the phone number (Example: "US") */
  country: string;
  /** The label for the phone number (Example: "Mobile") */
  label: string;
  /** The phone number itself (Example: "800000000") */
  number: string;
  /** Whether the phone number has been verified (Example: true) */
  verified: boolean;
}
/**
 * See the full documentation below:
 * https://developers.zoom.us/docs/api/users/#tag/users/GET/users/{userId}
 */
interface ZoomProfile extends Record<string, any> {
  /** The user's account ID (Example: "q6gBJVO5TzexKYTb_I2rpg") */
  account_id: string;
  /** The user's account number (Example: 10009239) */
  account_number: number;
  /** The user's cluster (Example: "us04") */
  cluster: string;
  /** The user's CMS ID. Only enabled for Kaltura integration (Example: "KDcuGIm1QgePTO8WbOqwIQ") */
  cms_user_id: string;
  /** The user's cost center (Example: "cost center") */
  cost_center: string;
  /** User create time (Example: "2018-10-31T04:32:37Z") */
  created_at: string;
  /** Department (Example: "Developers") */
  dept: string;
  /** User's display name (Example: "Jill Chill") */
  display_name: string;
  /** User's email address (Example: "jchill@example.com") */
  email: string;
  /** User's first name (Example: "Jill") */
  first_name: string;
  /** IDs of the web groups that the user belongs to (Example: ["RSMaSp8sTEGK0_oamiA2_w"]) */
  group_ids: string[];
  /** User ID (Example: "zJKyaiAyTNC-MWjiWC18KQ") */
  id: string;
  /** IM IDs of the groups that the user belongs to (Example: ["t-_-d56CSWG-7BF15LLrOw"]) */
  im_group_ids: string[];
  /** The user's JID (Example: "jchill@example.com") */
  jid: string;
  /** The user's job title (Example: "API Developer") */
  job_title: string;
  /** Default language for the Zoom Web Portal (Example: "en-US") */
  language: string;
  /** User last login client version (Example: "5.9.6.4993(mac)") */
  last_client_version: string;
  /** User last login time (Example: "2021-05-05T20:40:30Z") */
  last_login_time: string;
  /** User's last name (Example: "Chill") */
  last_name: string;
  /** The time zone of the user (Example: "Asia/Shanghai") */
  timezone: string;
  /** User's location (Example: "Paris") */
  location: string;
  /** The user's login method (Example: 101) */
  login_types: LoginType[];
  /** User's personal meeting URL (Example: "example.com") */
  personal_meeting_url: string;
  /** This field has been deprecated and will not be supported in the future.
   * Use the phone_numbers field instead of this field.
   * The user's phone number (Example: "+1 800000000") */
  phone_number?: string | undefined;
  /** The URL for user's profile picture (Example: "example.com") */
  pic_url: string;
  /** Personal Meeting ID (PMI) (Example: 3542471135) */
  pmi: number;
  /** Unique identifier of the user's assigned role (Example: "0") */
  role_id: string;
  /** User's role name (Example: "Admin") */
  role_name: string;
  /** Status of user's account (Example: "pending") */
  status: AccountStatus;
  /** Use the personal meeting ID (PMI) for instant meetings (Example: false) */
  use_pmi: boolean;
  /** The time and date when the user was created (Example: "2018-10-31T04:32:37Z") */
  user_created_at: string;
  /** Displays whether user is verified or not (Example: 1) */
  verified: number;
  /** The user's Zoom Workplace plan option (Example: 64) */
  zoom_one_type: number;
  /** The user's company (Example: "Jill") */
  company?: string | undefined;
  /** Custom attributes that have been assigned to the user (Example: [{ "key": "cbf_cywdkexrtqc73f97gd4w6g", "name": "A1", "value": "1" }]) */
  custom_attributes?: {
    key: string;
    name: string;
    value: string;
  }[] | undefined;
  /** The employee's unique ID. This field only returns when SAML single sign-on (SSO) is enabled. The `login_type` value is `101` (SSO) (Example: "HqDyI037Qjili1kNsSIrIg") */
  employee_unique_id?: string | undefined;
  /** The manager for the user (Example: "thill@example.com") */
  manager?: string | undefined;
  /** The user's country for the company phone number (Example: "US")
   * @deprecated true */
  phone_country?: string | undefined;
  /** The phone number's ISO country code (Example: "+1") */
  phone_numbers?: PhoneNumber[] | undefined;
  /** The user's plan type (Example: "1") */
  plan_united_type?: string | undefined;
  /** The user's pronouns (Example: "3123") */
  pronouns?: string | undefined;
  /** The user's display pronouns setting (Example: 1) */
  pronouns_option?: PronounOption | undefined;
  /** Personal meeting room URL, if the user has one (Example: "example.com") */
  vanity_url?: string | undefined;
}
interface ZoomOptions extends ProviderOptions<ZoomProfile> {
  clientId: string;
  pkce?: boolean | undefined;
}
declare const zoom: (userOptions: ZoomOptions) => {
  id: "zoom";
  name: string;
  createAuthorizationURL: ({
    state,
    redirectURI,
    codeVerifier
  }: {
    state: string;
    codeVerifier: string;
    scopes?: string[] | undefined;
    redirectURI: string;
    display?: string | undefined;
    loginHint?: string | undefined;
  }) => Promise<URL>;
  validateAuthorizationCode: ({
    code,
    redirectURI,
    codeVerifier
  }: {
    code: string;
    redirectURI: string;
    codeVerifier?: string | undefined;
    deviceId?: string | undefined;
  }) => Promise<OAuth2Tokens>;
  refreshAccessToken: (refreshToken: string) => Promise<OAuth2Tokens>;
  getUserInfo(token: OAuth2Tokens & {
    user?: {
      name?: {
        firstName?: string;
        lastName?: string;
      };
      email?: string;
    } | undefined;
  }): Promise<{
    user: {
      id: string;
      name?: string;
      email?: string | null;
      image?: string;
      emailVerified: boolean;
      [key: string]: any;
    };
    data: any;
  } | null>;
};
//#endregion
export { AccountStatus, LoginType, PhoneNumber, PronounOption, ZoomOptions, ZoomProfile, zoom };
//# sourceMappingURL=zoom.d.mts.map