UNPKG

@levante-framework/firekit

Version:

A library to facilitate Firebase authentication and Firestore interaction for LEVANTE apps

76 lines (75 loc) 3.21 kB
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>; }