@levante-framework/firekit
Version:
A library to facilitate Firebase authentication and Firestore interaction for LEVANTE apps
76 lines (75 loc) • 3.21 kB
TypeScript
import { DocumentData, DocumentReference, Firestore } from 'firebase/firestore';
import { UserType } from '../../interfaces';
export interface UserInfo {
roarUid?: string;
assessmentUid: string;
assessmentPid?: string;
userType?: UserType;
userMetadata?: {
[key: string]: unknown;
};
testData?: boolean;
demoData?: boolean;
offlineEnabled?: boolean;
offlineTasks?: string[];
offlineAdministrations?: string[];
}
export interface UserInput extends UserInfo {
db: Firestore;
}
export interface UserUpdateInput {
/** These are keys that all users can update */
tasks?: string[];
variants?: string[];
/** And these are keys that only guest users will be able to create/update */
assessmentPid?: string;
[key: string]: unknown;
}
/** Class representing a ROAR user */
export declare class RoarAppUser {
db: Firestore;
roarUid?: string;
assessmentUid: string;
assessmentPid?: string;
userData?: DocumentData;
userType: UserType;
onFirestore?: boolean;
userRef: DocumentReference;
userMetadata: {
[key: string]: unknown;
};
testData: boolean;
demoData: boolean;
offlineEnabled: boolean;
offlineTasks: string[];
offlineAdministrations: string[];
/** Create a ROAR user
* @param {object} input
* @param {Firestore} input.db - The assessment Firestore instance to which this user's data will be written
* @param {string} input.roarUid - The ROAR ID of the user
* @param {string} input.assessmentUid - The assessment firebase UID of the user
* @param {string} input.assessmentPid - The assessment PID of the user
* @param {string} input.userType - The user type. Must be either 'admin', 'educator', 'student', 'caregiver', 'guest', or 'researcher.'
* @param {object} input.userMetadata - An object containing additional user metadata
* @param {string} input.testData = Boolean flag indicating test data
* @param {string} input.demoData = Boolean flag indicating demo data
* @param {string} input.offlineEnabled = Boolean flag indicating whether user has enrolled in Offline ROAR
* @param {string[]} input.offlineTasks = Array of task IDs that user will need access to offline
* @param {string[]} input.offlineAdministrations = Array of administration IDs that user will need access to offline
*/
constructor({ db, roarUid, assessmentUid, assessmentPid, userType, userMetadata, testData, demoData, offlineEnabled, offlineTasks, offlineAdministrations, }: UserInput);
init(): Promise<void>;
private _setUserData;
checkUserExists(): Promise<void>;
/**
* Update the user's data (both locally and in Firestore)
* @param {object} input
* @param {string[]} input.tasks - The tasks to be added to the user doc
* @param {string[]} input.variants - The variants to be added to the user doc
* @param {string} input.assessmentPid - The assessment PID of the user
* @param {*} input.userMetadata - Any additional user metadata
* @method
* @async
*/
updateUser({ tasks, variants, assessmentPid, ...userMetadata }: UserUpdateInput): Promise<void>;
}