@zpg6-test-pkgs/better-auth
Version:
The most comprehensive authentication library for TypeScript.
1,651 lines (1,631 loc) • 106 kB
TypeScript
import { L as LiteralString, a as Prettify } from './better-auth.DTtXpZYr.js';
import * as z from 'zod/v4';
import * as jose from 'jose';
interface OAuth2Tokens {
tokenType?: string;
accessToken?: string;
refreshToken?: string;
accessTokenExpiresAt?: Date;
refreshTokenExpiresAt?: Date;
scopes?: string[];
idToken?: string;
}
type OAuth2UserInfo = {
id: string | number;
name?: string;
email?: string | null;
image?: string;
emailVerified: boolean;
};
interface OAuthProvider<T extends Record<string, any> = Record<string, any>, O extends Record<string, any> = ProviderOptions> {
id: LiteralString;
createAuthorizationURL: (data: {
state: string;
codeVerifier: string;
scopes?: string[];
redirectURI: string;
display?: string;
loginHint?: string;
}) => Promise<URL> | URL;
name: string;
validateAuthorizationCode: (data: {
code: string;
redirectURI: string;
codeVerifier?: string;
deviceId?: string;
}) => Promise<OAuth2Tokens>;
getUserInfo: (token: OAuth2Tokens & {
/**
* The user object from the provider
* This is only available for some providers like Apple
*/
user?: {
name?: {
firstName?: string;
lastName?: string;
};
email?: string;
};
}) => Promise<{
user: OAuth2UserInfo;
data: T;
} | null>;
/**
* Custom function to refresh a token
*/
refreshAccessToken?: (refreshToken: string) => Promise<OAuth2Tokens>;
revokeToken?: (token: string) => Promise<void>;
/**
* Verify the id token
* @param token - The id token
* @param nonce - The nonce
* @returns True if the id token is valid, false otherwise
*/
verifyIdToken?: (token: string, nonce?: string) => Promise<boolean>;
/**
* Disable implicit sign up for new users. When set to true for the provider,
* sign-in need to be called with with requestSignUp as true to create new users.
*/
disableImplicitSignUp?: boolean;
/**
* Disable sign up for new users.
*/
disableSignUp?: boolean;
/**
* Options for the provider
*/
options?: O;
}
type ProviderOptions<Profile extends Record<string, any> = any> = {
/**
* The client ID of your application
*/
clientId: string;
/**
* The client secret of your application
*/
clientSecret?: string;
/**
* The scopes you want to request from the provider
*/
scope?: string[];
/**
* Remove default scopes of the provider
*/
disableDefaultScope?: boolean;
/**
* The redirect URL for your application. This is where the provider will
* redirect the user after the sign in process. Make sure this URL is
* whitelisted in the provider's dashboard.
*/
redirectURI?: string;
/**
* The client key of your application
* Tiktok Social Provider uses this field instead of clientId
*/
clientKey?: string;
/**
* Disable provider from allowing users to sign in
* with this provider with an id token sent from the
* client.
*/
disableIdTokenSignIn?: boolean;
/**
* verifyIdToken function to verify the id token
*/
verifyIdToken?: (token: string, nonce?: string) => Promise<boolean>;
/**
* Custom function to get user info from the provider
*/
getUserInfo?: (token: OAuth2Tokens) => Promise<{
user: {
id: string;
name?: string;
email?: string | null;
image?: string;
emailVerified: boolean;
[key: string]: any;
};
data: any;
}>;
/**
* Custom function to refresh a token
*/
refreshAccessToken?: (refreshToken: string) => Promise<OAuth2Tokens>;
/**
* Custom function to map the provider profile to a
* user.
*/
mapProfileToUser?: (profile: Profile) => {
id?: string;
name?: string;
email?: string | null;
image?: string;
emailVerified?: boolean;
[key: string]: any;
} | Promise<{
id?: string;
name?: string;
email?: string | null;
image?: string;
emailVerified?: boolean;
[key: string]: any;
}>;
/**
* Disable implicit sign up for new users. When set to true for the provider,
* sign-in need to be called with with requestSignUp as true to create new users.
*/
disableImplicitSignUp?: boolean;
/**
* Disable sign up for new users.
*/
disableSignUp?: boolean;
/**
* The prompt to use for the authorization code request
*/
prompt?: "select_account" | "consent" | "login" | "none" | "select_account consent";
/**
* The response mode to use for the authorization code request
*/
responseMode?: "query" | "form_post";
/**
* If enabled, the user info will be overridden with the provider user info
* This is useful if you want to use the provider user info to update the user info
*
* @default false
*/
overrideUserInfoOnSignIn?: boolean;
};
interface PayPalProfile {
user_id: string;
name: string;
given_name: string;
family_name: string;
middle_name?: string;
picture?: string;
email: string;
email_verified: boolean;
gender?: string;
birthdate?: string;
zoneinfo?: string;
locale?: string;
phone_number?: string;
address?: {
street_address?: string;
locality?: string;
region?: string;
postal_code?: string;
country?: string;
};
verified_account?: boolean;
account_type?: string;
age_range?: string;
payer_id?: string;
}
interface PayPalTokenResponse {
scope?: string;
access_token: string;
refresh_token?: string;
token_type: "Bearer";
id_token?: string;
expires_in: number;
nonce?: string;
}
interface PayPalOptions extends ProviderOptions<PayPalProfile> {
/**
* PayPal environment - 'sandbox' for testing, 'live' for production
* @default 'sandbox'
*/
environment?: "sandbox" | "live";
/**
* Whether to request shipping address information
* @default false
*/
requestShippingAddress?: boolean;
}
declare const paypal: (options: PayPalOptions) => {
id: "paypal";
name: string;
createAuthorizationURL({ state, codeVerifier, redirectURI }: {
state: string;
codeVerifier: string;
scopes?: string[];
redirectURI: string;
display?: string;
loginHint?: string;
}): Promise<URL>;
validateAuthorizationCode: ({ code, redirectURI }: {
code: string;
redirectURI: string;
codeVerifier?: string;
deviceId?: string;
}) => Promise<{
accessToken: string;
refreshToken: string | undefined;
accessTokenExpiresAt: Date | undefined;
idToken: string | undefined;
}>;
refreshAccessToken: ((refreshToken: string) => Promise<OAuth2Tokens>) | ((refreshToken: string) => Promise<{
accessToken: any;
refreshToken: any;
accessTokenExpiresAt: Date | undefined;
}>);
verifyIdToken(token: string, nonce: string | undefined): Promise<boolean>;
getUserInfo(token: OAuth2Tokens & {
user?: {
name?: {
firstName?: string;
lastName?: string;
};
email?: string;
};
}): Promise<{
user: {
id: string;
name?: string;
email?: string | null;
image?: string;
emailVerified: boolean;
[key: string]: any;
};
data: any;
} | {
user: {
id: string;
name: string;
email: string;
image: string | undefined;
emailVerified: boolean;
} | {
id: string;
name: string;
email: string | null;
image: string;
emailVerified: boolean;
} | {
id: string;
name: string;
email: string | null;
image: string;
emailVerified: boolean;
};
data: PayPalProfile;
} | null>;
options: PayPalOptions;
};
interface LineIdTokenPayload {
iss: string;
sub: string;
aud: string;
exp: number;
iat: number;
name?: string;
picture?: string;
email?: string;
amr?: string[];
nonce?: string;
}
interface LineUserInfo {
sub: string;
name?: string;
picture?: string;
email?: string;
}
interface LineOptions extends ProviderOptions<LineUserInfo | LineIdTokenPayload> {
}
/**
* LINE Login v2.1
* - Authorization endpoint: https://access.line.me/oauth2/v2.1/authorize
* - Token endpoint: https://api.line.me/oauth2/v2.1/token
* - UserInfo endpoint: https://api.line.me/oauth2/v2.1/userinfo
* - Verify ID token: https://api.line.me/oauth2/v2.1/verify
*
* Docs: https://developers.line.biz/en/reference/line-login/#issue-access-token
*/
declare const line: (options: LineOptions) => {
id: "line";
name: string;
createAuthorizationURL({ state, scopes, codeVerifier, redirectURI, loginHint, }: {
state: string;
codeVerifier: string;
scopes?: string[];
redirectURI: string;
display?: string;
loginHint?: string;
}): Promise<URL>;
validateAuthorizationCode: ({ code, codeVerifier, redirectURI }: {
code: string;
redirectURI: string;
codeVerifier?: string;
deviceId?: string;
}) => Promise<OAuth2Tokens>;
refreshAccessToken: (refreshToken: string) => Promise<OAuth2Tokens>;
verifyIdToken(token: string, nonce: string | undefined): Promise<boolean>;
getUserInfo(token: OAuth2Tokens & {
user?: {
name?: {
firstName?: string;
lastName?: string;
};
email?: string;
};
}): Promise<{
user: {
id: string;
name?: string;
email?: string | null;
image?: string;
emailVerified: boolean;
[key: string]: any;
};
data: any;
} | {
user: {
id: any;
name: any;
email: any;
image: any;
emailVerified: false;
} | {
id: any;
name: any;
email: any;
image: any;
emailVerified: boolean;
} | {
id: any;
name: any;
email: any;
image: any;
emailVerified: boolean;
};
data: any;
} | null>;
options: LineOptions;
};
interface NotionProfile {
object: "user";
id: string;
type: "person" | "bot";
name?: string;
avatar_url?: string;
person?: {
email?: string;
};
}
interface NotionOptions extends ProviderOptions<NotionProfile> {
}
declare const notion: (options: NotionOptions) => {
id: "notion";
name: string;
createAuthorizationURL({ state, scopes, loginHint, redirectURI }: {
state: string;
codeVerifier: string;
scopes?: string[];
redirectURI: string;
display?: string;
loginHint?: string;
}): Promise<URL>;
validateAuthorizationCode: ({ code, redirectURI }: {
code: string;
redirectURI: string;
codeVerifier?: string;
deviceId?: string;
}) => Promise<OAuth2Tokens>;
refreshAccessToken: (refreshToken: string) => Promise<OAuth2Tokens>;
getUserInfo(token: OAuth2Tokens & {
user?: {
name?: {
firstName?: string;
lastName?: string;
};
email?: string;
};
}): Promise<{
user: {
id: string;
name?: string;
email?: string | null;
image?: string;
emailVerified: boolean;
[key: string]: any;
};
data: any;
} | null>;
options: NotionOptions;
};
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;
/** 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;
/** 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;
}[];
/** 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;
/** The manager for the user (Example: "thill@example.com") */
manager?: string;
/** The user's country for the company phone number (Example: "US")
* @deprecated true */
phone_country?: string;
/** The phone number's ISO country code (Example: "+1") */
phone_numbers?: PhoneNumber[];
/** The user's plan type (Example: "1") */
plan_united_type?: string;
/** The user's pronouns (Example: "3123") */
pronouns?: string;
/** The user's display pronouns setting (Example: 1) */
pronouns_option?: PronounOption;
/** Personal meeting room URL, if the user has one (Example: "example.com") */
vanity_url?: string;
}
interface ZoomOptions extends ProviderOptions<ZoomProfile> {
pkce?: boolean;
}
declare const zoom: (userOptions: ZoomOptions) => {
id: "zoom";
name: string;
createAuthorizationURL: ({ state, redirectURI, codeVerifier }: {
state: string;
codeVerifier: string;
scopes?: string[];
redirectURI: string;
display?: string;
loginHint?: string;
}) => Promise<URL>;
validateAuthorizationCode: ({ code, redirectURI, codeVerifier }: {
code: string;
redirectURI: string;
codeVerifier?: string;
deviceId?: string;
}) => Promise<OAuth2Tokens>;
getUserInfo(token: OAuth2Tokens & {
user?: {
name?: {
firstName?: string;
lastName?: string;
};
email?: string;
};
}): Promise<{
user: {
id: string;
name?: string;
email?: string | null;
image?: string;
emailVerified: boolean;
[key: string]: any;
};
data: any;
} | null>;
};
interface VkProfile {
user: {
user_id: string;
first_name: string;
last_name: string;
email?: string;
phone?: number;
avatar?: string;
sex?: number;
verified?: boolean;
birthday: string;
};
}
declare const enum LANG {
RUS = 0,
UKR = 1,
ENG = 3,
SPA = 4,
GERMAN = 6,
POL = 15,
FRA = 16,
TURKEY = 82
}
interface VkOption extends ProviderOptions {
lang_id?: LANG;
scheme?: "light" | "dark";
}
declare const vk: (options: VkOption) => {
id: "vk";
name: string;
createAuthorizationURL({ state, scopes, codeVerifier, redirectURI }: {
state: string;
codeVerifier: string;
scopes?: string[];
redirectURI: string;
display?: string;
loginHint?: string;
}): Promise<URL>;
validateAuthorizationCode: ({ code, codeVerifier, redirectURI, deviceId, }: {
code: string;
redirectURI: string;
codeVerifier?: string;
deviceId?: string;
}) => Promise<OAuth2Tokens>;
refreshAccessToken: (refreshToken: string) => Promise<OAuth2Tokens>;
getUserInfo(data: OAuth2Tokens & {
user?: {
name?: {
firstName?: string;
lastName?: string;
};
email?: string;
};
}): Promise<{
user: {
id: string;
name?: string;
email?: string | null;
image?: string;
emailVerified: boolean;
[key: string]: any;
};
data: any;
} | null>;
options: VkOption;
};
interface RobloxProfile extends Record<string, any> {
/** the user's id */
sub: string;
/** the user's username */
preferred_username: string;
/** the user's display name, will return the same value as the preferred_username if not set */
nickname: string;
/** the user's display name, again, will return the same value as the preferred_username if not set */
name: string;
/** the account creation date as a unix timestamp in seconds */
created_at: number;
/** the user's profile URL */
profile: string;
/** the user's avatar URL */
picture: string;
}
interface RobloxOptions extends ProviderOptions<RobloxProfile> {
prompt?: "none" | "consent" | "login" | "select_account" | "select_account consent";
}
declare const roblox: (options: RobloxOptions) => {
id: "roblox";
name: string;
createAuthorizationURL({ state, scopes, redirectURI }: {
state: string;
codeVerifier: string;
scopes?: string[];
redirectURI: string;
display?: string;
loginHint?: string;
}): URL;
validateAuthorizationCode: ({ code, redirectURI }: {
code: string;
redirectURI: string;
codeVerifier?: string;
deviceId?: string;
}) => Promise<OAuth2Tokens>;
refreshAccessToken: (refreshToken: string) => Promise<OAuth2Tokens>;
getUserInfo(token: OAuth2Tokens & {
user?: {
name?: {
firstName?: string;
lastName?: string;
};
email?: string;
};
}): Promise<{
user: {
id: string;
name?: string;
email?: string | null;
image?: string;
emailVerified: boolean;
[key: string]: any;
};
data: any;
} | null>;
options: RobloxOptions;
};
interface RedditProfile {
id: string;
name: string;
icon_img: string | null;
has_verified_email: boolean;
oauth_client_id: string;
verified: boolean;
}
interface RedditOptions extends ProviderOptions<RedditProfile> {
duration?: string;
}
declare const reddit: (options: RedditOptions) => {
id: "reddit";
name: string;
createAuthorizationURL({ state, scopes, redirectURI }: {
state: string;
codeVerifier: string;
scopes?: string[];
redirectURI: string;
display?: string;
loginHint?: string;
}): Promise<URL>;
validateAuthorizationCode: ({ code, redirectURI }: {
code: string;
redirectURI: string;
codeVerifier?: string;
deviceId?: string;
}) => Promise<OAuth2Tokens>;
refreshAccessToken: (refreshToken: string) => Promise<OAuth2Tokens>;
getUserInfo(token: OAuth2Tokens & {
user?: {
name?: {
firstName?: string;
lastName?: string;
};
email?: string;
};
}): Promise<{
user: {
id: string;
name?: string;
email?: string | null;
image?: string;
emailVerified: boolean;
[key: string]: any;
};
data: any;
} | null>;
options: RedditOptions;
};
/**
* [More info](https://developers.tiktok.com/doc/tiktok-api-v2-get-user-info/)
*/
interface TiktokProfile extends Record<string, any> {
data: {
user: {
/**
* The unique identification of the user in the current application.Open id
* for the client.
*
* To return this field, add `fields=open_id` in the user profile request's query parameter.
*/
open_id: string;
/**
* The unique identification of the user across different apps for the same developer.
* For example, if a partner has X number of clients,
* it will get X number of open_id for the same TikTok user,
* but one persistent union_id for the particular user.
*
* To return this field, add `fields=union_id` in the user profile request's query parameter.
*/
union_id?: string;
/**
* User's profile image.
*
* To return this field, add `fields=avatar_url` in the user profile request's query parameter.
*/
avatar_url?: string;
/**
* User`s profile image in 100x100 size.
*
* To return this field, add `fields=avatar_url_100` in the user profile request's query parameter.
*/
avatar_url_100?: string;
/**
* User's profile image with higher resolution
*
* To return this field, add `fields=avatar_url_100` in the user profile request's query parameter.
*/
avatar_large_url: string;
/**
* User's profile name
*
* To return this field, add `fields=display_name` in the user profile request's query parameter.
*/
display_name: string;
/**
* User's username.
*
* To return this field, add `fields=username` in the user profile request's query parameter.
*/
username: string;
/** @note Email is currently unsupported by TikTok */
email?: string;
/**
* User's bio description if there is a valid one.
*
* To return this field, add `fields=bio_description` in the user profile request's query parameter.
*/
bio_description?: string;
/**
* The link to user's TikTok profile page.
*
* To return this field, add `fields=profile_deep_link` in the user profile request's query parameter.
*/
profile_deep_link?: string;
/**
* Whether TikTok has provided a verified badge to the account after confirming
* that it belongs to the user it represents.
*
* To return this field, add `fields=is_verified` in the user profile request's query parameter.
*/
is_verified?: boolean;
/**
* User's followers count.
*
* To return this field, add `fields=follower_count` in the user profile request's query parameter.
*/
follower_count?: number;
/**
* The number of accounts that the user is following.
*
* To return this field, add `fields=following_count` in the user profile request's query parameter.
*/
following_count?: number;
/**
* The total number of likes received by the user across all of their videos.
*
* To return this field, add `fields=likes_count` in the user profile request's query parameter.
*/
likes_count?: number;
/**
* The total number of publicly posted videos by the user.
*
* To return this field, add `fields=video_count` in the user profile request's query parameter.
*/
video_count?: number;
};
};
error?: {
/**
* The error category in string.
*/
code?: string;
/**
* The error message in string.
*/
message?: string;
/**
* The error message in string.
*/
log_id?: string;
};
}
interface TiktokOptions extends Omit<ProviderOptions, "clientId" | "clientSecret" | "clientKey"> {
clientId: never;
clientSecret: string;
clientKey: string;
}
declare const tiktok: (options: TiktokOptions) => {
id: "tiktok";
name: string;
createAuthorizationURL({ state, scopes, redirectURI }: {
state: string;
codeVerifier: string;
scopes?: string[];
redirectURI: string;
display?: string;
loginHint?: string;
}): URL;
validateAuthorizationCode: ({ code, redirectURI }: {
code: string;
redirectURI: string;
codeVerifier?: string;
deviceId?: string;
}) => Promise<OAuth2Tokens>;
refreshAccessToken: (refreshToken: string) => Promise<OAuth2Tokens>;
getUserInfo(token: OAuth2Tokens & {
user?: {
name?: {
firstName?: string;
lastName?: string;
};
email?: string;
};
}): Promise<{
user: {
id: string;
name?: string;
email?: string | null;
image?: string;
emailVerified: boolean;
[key: string]: any;
};
data: any;
} | null>;
options: TiktokOptions;
};
interface GitlabProfile extends Record<string, any> {
id: number;
username: string;
email: string;
name: string;
state: string;
avatar_url: string;
web_url: string;
created_at: string;
bio: string;
location?: string;
public_email: string;
skype: string;
linkedin: string;
twitter: string;
website_url: string;
organization: string;
job_title: string;
pronouns: string;
bot: boolean;
work_information?: string;
followers: number;
following: number;
local_time: string;
last_sign_in_at: string;
confirmed_at: string;
theme_id: number;
last_activity_on: string;
color_scheme_id: number;
projects_limit: number;
current_sign_in_at: string;
identities: Array<{
provider: string;
extern_uid: string;
}>;
can_create_group: boolean;
can_create_project: boolean;
two_factor_enabled: boolean;
external: boolean;
private_profile: boolean;
commit_email: string;
shared_runners_minutes_limit: number;
extra_shared_runners_minutes_limit: number;
}
interface GitlabOptions extends ProviderOptions<GitlabProfile> {
issuer?: string;
}
declare const gitlab: (options: GitlabOptions) => {
id: "gitlab";
name: string;
createAuthorizationURL: ({ state, scopes, codeVerifier, loginHint, redirectURI, }: {
state: string;
codeVerifier: string;
scopes?: string[];
redirectURI: string;
display?: string;
loginHint?: string;
}) => Promise<URL>;
validateAuthorizationCode: ({ code, redirectURI, codeVerifier }: {
code: string;
redirectURI: string;
codeVerifier?: string;
deviceId?: string;
}) => Promise<OAuth2Tokens>;
refreshAccessToken: (refreshToken: string) => Promise<OAuth2Tokens>;
getUserInfo(token: OAuth2Tokens & {
user?: {
name?: {
firstName?: string;
lastName?: string;
};
email?: string;
};
}): Promise<{
user: {
id: string;
name?: string;
email?: string | null;
image?: string;
emailVerified: boolean;
[key: string]: any;
};
data: any;
} | {
user: {
id: number;
name: string;
email: string;
image: string;
emailVerified: true;
} | {
id: string | number;
name: string;
email: string | null;
image: string;
emailVerified: boolean;
} | {
id: string | number;
name: string;
email: string | null;
image: string;
emailVerified: boolean;
};
data: GitlabProfile;
} | null>;
options: GitlabOptions;
};
interface LinkedInProfile {
sub: string;
name: string;
given_name: string;
family_name: string;
picture: string;
locale: {
country: string;
language: string;
};
email: string;
email_verified: boolean;
}
interface LinkedInOptions extends ProviderOptions<LinkedInProfile> {
}
declare const linkedin: (options: LinkedInOptions) => {
id: "linkedin";
name: string;
createAuthorizationURL: ({ state, scopes, redirectURI, loginHint, }: {
state: string;
codeVerifier: string;
scopes?: string[];
redirectURI: string;
display?: string;
loginHint?: string;
}) => Promise<URL>;
validateAuthorizationCode: ({ code, redirectURI }: {
code: string;
redirectURI: string;
codeVerifier?: string;
deviceId?: string;
}) => Promise<OAuth2Tokens>;
refreshAccessToken: (refreshToken: string) => Promise<OAuth2Tokens>;
getUserInfo(token: OAuth2Tokens & {
user?: {
name?: {
firstName?: string;
lastName?: string;
};
email?: string;
};
}): Promise<{
user: {
id: string;
name?: string;
email?: string | null;
image?: string;
emailVerified: boolean;
[key: string]: any;
};
data: any;
} | null>;
options: LinkedInOptions;
};
interface LinearUser {
id: string;
name: string;
email: string;
avatarUrl?: string;
active: boolean;
createdAt: string;
updatedAt: string;
}
interface LinearProfile {
data: {
viewer: LinearUser;
};
}
interface LinearOptions extends ProviderOptions<LinearUser> {
}
declare const linear: (options: LinearOptions) => {
id: "linear";
name: string;
createAuthorizationURL({ state, scopes, loginHint, redirectURI }: {
state: string;
codeVerifier: string;
scopes?: string[];
redirectURI: string;
display?: string;
loginHint?: string;
}): Promise<URL>;
validateAuthorizationCode: ({ code, redirectURI }: {
code: string;
redirectURI: string;
codeVerifier?: string;
deviceId?: string;
}) => Promise<OAuth2Tokens>;
refreshAccessToken: (refreshToken: string) => Promise<OAuth2Tokens>;
getUserInfo(token: OAuth2Tokens & {
user?: {
name?: {
firstName?: string;
lastName?: string;
};
email?: string;
};
}): Promise<{
user: {
id: string;
name?: string;
email?: string | null;
image?: string;
emailVerified: boolean;
[key: string]: any;
};
data: any;
} | null>;
options: LinearOptions;
};
interface KickProfile {
/**
* The user id of the user
*/
user_id: string;
/**
* The name of the user
*/
name: string;
/**
* The email of the user
*/
email: string;
/**
* The picture of the user
*/
profile_picture: string;
}
interface KickOptions extends ProviderOptions<KickProfile> {
}
declare const kick: (options: KickOptions) => {
id: "kick";
name: string;
createAuthorizationURL({ state, scopes, redirectURI, codeVerifier }: {
state: string;
codeVerifier: string;
scopes?: string[];
redirectURI: string;
display?: string;
loginHint?: string;
}): Promise<URL>;
validateAuthorizationCode({ code, redirectURI, codeVerifier }: {
code: string;
redirectURI: string;
codeVerifier?: string;
deviceId?: string;
}): Promise<OAuth2Tokens>;
getUserInfo(token: OAuth2Tokens & {
user?: {
name?: {
firstName?: string;
lastName?: string;
};
email?: string;
};
}): Promise<{
user: {
id: string;
name?: string;
email?: string | null;
image?: string;
emailVerified: boolean;
[key: string]: any;
};
data: any;
} | null>;
options: KickOptions;
};
interface DropboxProfile {
account_id: string;
name: {
given_name: string;
surname: string;
familiar_name: string;
display_name: string;
abbreviated_name: string;
};
email: string;
email_verified: boolean;
profile_photo_url: string;
}
interface DropboxOptions extends ProviderOptions<DropboxProfile> {
accessType?: "offline" | "online" | "legacy";
}
declare const dropbox: (options: DropboxOptions) => {
id: "dropbox";
name: string;
createAuthorizationURL: ({ state, scopes, codeVerifier, redirectURI, }: {
state: string;
codeVerifier: string;
scopes?: string[];
redirectURI: string;
display?: string;
loginHint?: string;
}) => Promise<URL>;
validateAuthorizationCode: ({ code, codeVerifier, redirectURI }: {
code: string;
redirectURI: string;
codeVerifier?: string;
deviceId?: string;
}) => Promise<OAuth2Tokens>;
refreshAccessToken: (refreshToken: string) => Promise<OAuth2Tokens>;
getUserInfo(token: OAuth2Tokens & {
user?: {
name?: {
firstName?: string;
lastName?: string;
};
email?: string;
};
}): Promise<{
user: {
id: string;
name?: string;
email?: string | null;
image?: string;
emailVerified: boolean;
[key: string]: any;
};
data: any;
} | null>;
options: DropboxOptions;
};
interface TwitterProfile {
data: {
/**
* Unique identifier of this user. This is returned as a string in order to avoid complications with languages and tools
* that cannot handle large integers.
*/
id: string;
/** The friendly name of this user, as shown on their profile. */
name: string;
/** The email address of this user. */
email?: string;
/** The Twitter handle (screen name) of this user. */
username: string;
/**
* The location specified in the user's profile, if the user provided one.
* As this is a freeform value, it may not indicate a valid location, but it may be fuzzily evaluated when performing searches with location queries.
*
* To return this field, add `user.fields=location` in the authorization request's query parameter.
*/
location?: string;
/**
* This object and its children fields contain details about text that has a special meaning in the user's description.
*
*To return this field, add `user.fields=entities` in the authorization request's query parameter.
*/
entities?: {
/** Contains details about the user's profile website. */
url: {
/** Contains details about the user's profile website. */
urls: Array<{
/** The start position (zero-based) of the recognized user's profile website. All start indices are inclusive. */
start: number;
/** The end position (zero-based) of the recognized user's profile website. This end index is exclusive. */
end: number;
/** The URL in the format entered by the user. */
url: string;
/** The fully resolved URL. */
expanded_url: string;
/** The URL as displayed in the user's profile. */
display_url: string;
}>;
};
/** Contains details about URLs, Hashtags, Cashtags, or mentions located within a user's description. */
description: {
hashtags: Array<{
start: number;
end: number;
tag: string;
}>;
};
};
/**
* Indicate if this user is a verified Twitter user.
*
* To return this field, add `user.fields=verified` in the authorization request's query parameter.
*/
verified?: boolean;
/**
* The text of this user's profile description (also known as bio), if the user provided one.
*
* To return this field, add `user.fields=description` in the authorization request's query parameter.
*/
description?: string;
/**
* The URL specified in the user's profile, if present.
*
* To return this field, add `user.fields=url` in the authorization request's query parameter.
*/
url?: string;
/** The URL to the profile image for this user, as shown on the user's profile. */
profile_image_url?: string;
protected?: boolean;
/**
* Unique identifier of this user's pinned Tweet.
*
* You can obtain the expanded object in `includes.tweets` by adding `expansions=pinned_tweet_id` in the authorization request's query parameter.
*/
pinned_tweet_id?: string;
created_at?: string;
};
includes?: {
tweets?: Array<{
id: string;
text: string;
}>;
};
[claims: string]: unknown;
}
interface TwitterOption extends ProviderOptions<TwitterProfile> {
}
declare const twitter: (options: TwitterOption) => {
id: "twitter";
name: string;
createAuthorizationURL(data: {
state: string;
codeVerifier: string;
scopes?: string[];
redirectURI: string;
display?: string;
loginHint?: string;
}): Promise<URL>;
validateAuthorizationCode: ({ code, codeVerifier, redirectURI }: {
code: string;
redirectURI: string;
codeVerifier?: string;
deviceId?: string;
}) => Promise<OAuth2Tokens>;
refreshAccessToken: (refreshToken: string) => Promise<OAuth2Tokens>;
getUserInfo(token: OAuth2Tokens & {
user?: {
name?: {
firstName?: string;
lastName?: string;
};
email?: string;
};
}): Promise<{
user: {
id: string;
name?: string;
email?: string | null;
image?: string;
emailVerified: boolean;
[key: string]: any;
};
data: any;
} | null>;
options: TwitterOption;
};
/**
* @see https://dev.twitch.tv/docs/authentication/getting-tokens-oidc/#requesting-claims
*/
interface TwitchProfile {
/**
* The sub of the user
*/
sub: string;
/**
* The preferred username of the user
*/
preferred_username: string;
/**
* The email of the user
*/
email: string;
/**
* Indicate if this user has a verified email.
*/
email_verified: boolean;
/**
* The picture of the user
*/
picture: string;
}
interface TwitchOptions extends ProviderOptions<TwitchProfile> {
claims?: string[];
}
declare const twitch: (options: TwitchOptions) => {
id: "twitch";
name: string;
createAuthorizationURL({ state, scopes, redirectURI }: {
state: string;
codeVerifier: string;
scopes?: string[];
redirectURI: string;
display?: string;
loginHint?: string;
}): Promise<URL>;
validateAuthorizationCode: ({ code, redirectURI }: {
code: string;
redirectURI: string;
codeVerifier?: string;
deviceId?: string;
}) => Promise<OAuth2Tokens>;
refreshAccessToken: (refreshToken: string) => Promise<OAuth2Tokens>;
getUserInfo(token: OAuth2Tokens & {
user?: {
name?: {
firstName?: string;
lastName?: string;
};
email?: string;
};
}): Promise<{
user: {
id: string;
name?: string;
email?: string | null;
image?: string;
emailVerified: boolean;
[key: string]: any;
};
data: any;
} | null>;
options: TwitchOptions;
};
interface SpotifyProfile {
id: string;
display_name: string;
email: string;
images: {
url: string;
}[];
}
interface SpotifyOptions extends ProviderOptions<SpotifyProfile> {
}
declare const spotify: (options: SpotifyOptions) => {
id: "spotify";
name: string;
createAuthorizationURL({ state, scopes, codeVerifier, redirectURI }: {
state: string;
codeVerifier: string;
scopes?: string[];
redirectURI: string;
display?: string;
loginHint?: string;
}): Promise<URL>;
validateAuthorizationCode: ({ code, codeVerifier, redirectURI }: {
code: string;
redirectURI: string;
codeVerifier?: string;
deviceId?: string;
}) => Promise<OAuth2Tokens>;
refreshAccessToken: (refreshToken: string) => Promise<OAuth2Tokens>;
getUserInfo(token: OAuth2Tokens & {
user?: {
name?: {
firstName?: string;
lastName?: string;
};
email?: string;
};
}): Promise<{
user: {
id: string;
name?: string;
email?: string | null;
image?: string;
emailVerified: boolean;
[key: string]: any;
};
data: any;
} | null>;
options: SpotifyOptions;
};
interface SlackProfile extends Record<string, any> {
ok: boolean;
sub: string;
"https://slack.com/user_id": string;
"https://slack.com/team_id": string;
email: string;
email_verified: boolean;
date_email_verified: number;
name: string;
picture: string;
given_name: string;
family_name: string;
locale: string;
"https://slack.com/team_name": string;
"https://slack.com/team_domain": string;
"https://slack.com/user_image_24": string;
"https://slack.com/user_image_32": string;
"https://slack.com/user_image_48": string;
"https://slack.com/user_image_72": string;
"https://slack.com/user_image_192": string;
"https://slack.com/user_image_512": string;
"https://slack.com/team_image_34": string;
"https://slack.com/team_image_44": string;
"https://slack.com/team_image_68": string;
"https://slack.com/team_image_88": string;
"https://slack.com/team_image_102": string;
"https://slack.com/team_image_132": string;
"https://slack.com/team_image_230": string;
"https://slack.com/team_image_default": boolean;
}
interface SlackOptions extends ProviderOptions<SlackProfile> {
}
declare const slack: (options: SlackOptions) => {
id: "slack";
name: string;
createAuthorizationURL({ state, scopes, redirectURI }: {
state: string;
codeVerifier: string;
scopes?: string[];
redirectURI: string;
display?: string;
loginHint?: string;
}): URL;
validateAuthorizationCode: ({ code, redirectURI }: {
code: string;
redirectURI: string;
codeVerifier?: string;
deviceId?: string;
}) => Promise<OAuth2Tokens>;
refreshAccessToken: (refreshToken: string) => Promise<OAuth2Tokens>;
getUserInfo(token: OAuth2Tokens & {
user?: {
name?: {
firstName?: string;
lastName?: string;
};
email?: string;
};
}): Promise<{
user: {
id: string;
name?: string;
email?: string | null;
image?: string;
emailVerified: boolean;
[key: string]: any;
};
data: any;
} | null>;
options: SlackOptions;
};
interface HuggingFaceProfile {
sub: string;
name: string;
preferred_username: string;
profile: string;
picture: string;
website?: string;
email?: string;
email_verified?: boolean;
isPro: boolean;
canPay?: boolean;
orgs?: {
sub: string;
name: string;
picture: string;
preferred_username: string;
isEnterprise: boolean | "plus";
canPay?: boolean;
roleInOrg?: "admin" | "write" | "contributor" | "read";
pendingSSO?: boolean;
missingMFA?: boolean;
resourceGroups?: {
sub: string;
name: string;
role: "admin" | "write" | "contributor" | "read";
}[];
};
}
interface HuggingFaceOptions extends ProviderOptions<HuggingFaceProfile> {
}
declare const huggingface: (options: HuggingFaceOptions) => {
id: "huggingface";
name: string;
createAuthorizationURL({ state, scopes, codeVerifier, redirectURI }: {
state: string;
codeVerifier: string;
scopes?: string[];
redirectURI: string;
display?: string;
loginHint?: string;
}): Promise<URL>;
validateAuthorizationCode: ({ code, codeVerifier, redirectURI }: {
code: string;
redirectURI: string;
codeVerifier?: string;
deviceId?: string;
}) => Promise<OAuth2Tokens>;
refreshAccessToken: (refreshToken: string) => Promise<OAuth2Tokens>;
getUserInfo(token: OAuth2Tokens & {
user?: {
name?: {
firstName?: string;
lastName?: string;
};
email?: string;
};
}): Promise<{
user: {
id: string;
name?: string;
email?: string | null;
image?: string;
emailVerified: boolean;