import { UserData } from './UserSettings';
import { Semaphore } from './Utils';
export declare type User = {
kind: 'user';
username: string;
nickname: string;
userId: string;
picture: string;
email?: string;
emailVerified?: boolean;
givenName?: string;
familyName?: string;
userMetadata: {
onboarded: boolean;
legacy?: boolean;
};
currentConnection: ConnectionType;
sessionSecret: string;
};
export declare type LegacyUser = {
kind: 'legacyUser';
username: string;
userMetadata: {
legacy: boolean;
needsPasswordMigration: boolean;
};
};
export declare type UserOrLegacyUser = User | LegacyUser;
export declare type ConnectionType = 'Username-Password-Authentication' | 'facebook' | 'google-oauth2' | 'github';
export declare type RegistrationData = {
username: string;
password: string;
email?: string;
givenName?: string;
familyName?: string;
};
export declare type LoginType = 'user-pass' | 'facebook' | 'google' | 'github';
export declare const ANONYMOUS_USERNAME = "anonymous";
export declare class UserManagerInstance {
_currentUser: User | null;
_getSessionLock: Semaphore;
_interactiveAuthenticationCallbackAsync?: () => Promise<User>;
static getGlobalInstance(): UserManagerInstance;
initialize(): void;
/**
* Logs in a user for a given login type.
*
* Valid login types are:
* - "user-pass": Username and password authentication
*
* If the login type is "user-pass", we directly make the request to www
* to login a user.
*/
loginAsync(loginType: LoginType, loginArgs?: {
username: string;
password: string;
}): Promise<User>;
registerAsync(userData: RegistrationData, user?: UserOrLegacyUser | null): Promise<User>;
/**
* Ensure user is logged in and has a valid token.
*
* If there are any issues with the login, this method throws.
*/
ensureLoggedInAsync(): Promise<User>;
setInteractiveAuthenticationCallback(callback: () => Promise<User>): void;
_readUserData(): Promise<UserData | null>;
/**
* Get the current user based on the available token.
* If there is no current token, returns null.
*/
getCurrentUserAsync(): Promise<User | null>;
getCurrentUsernameAsync(): Promise<string | null>;
getSessionAsync(): Promise<{
sessionSecret: string;
} | null>;
/**
* Create or update a user.
*/
createOrUpdateUserAsync(userData: object): Promise<User | null>;
/**
* Logout
*/
logoutAsync(): Promise<void>;
/**
* Forgot Password
*/
forgotPasswordAsync(usernameOrEmail: string): Promise<void>;
/**
* Get profile given token data. Errors if token is not valid or if no
* user profile is returned.
*
* This method is called by all public authentication methods of `UserManager`
* except `logoutAsync`. Therefore, we use this method as a way to:
* - update the UserSettings store with the current token and user id
* - update UserManager._currentUser
* - Fire login analytics events
*
* Also updates UserManager._currentUser.
*
* @private
*/
_getProfileAsync({ currentConnection, sessionSecret, }: {
currentConnection?: ConnectionType;
sessionSecret: string;
}): Promise<User>;
}
declare const _default: UserManagerInstance;
export default _default;