UNPKG

@levante-framework/firekit

Version:

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

231 lines (230 loc) 6.03 kB
import { FirebaseApp } from 'firebase/app'; import { Auth, User } from 'firebase/auth'; import { DocumentData, Firestore, Timestamp } from 'firebase/firestore'; import { Functions } from 'firebase/functions'; import { FirebaseStorage } from 'firebase/storage'; import { FirebasePerformance } from 'firebase/performance'; import { FirebaseConfig } from './firestore/util'; export interface RoarConfig { app: FirebaseConfig; admin: FirebaseConfig; } export interface FirebaseProject { firebaseApp: FirebaseApp; db: Firestore; auth: Auth; functions: Functions; storage: FirebaseStorage; perf?: FirebasePerformance; user?: User; claimsLastUpdated?: Date; } declare type Grade = number | 'K' | 'PK' | 'TK'; export declare enum UserType { admin = "admin", super_admin = "super_admin", student = "student", caregiver = "caregiver", teacher = "teacher", guest = "guest" } export interface ExtraMetadata extends DocumentData { [x: string]: unknown; } export interface StudentData extends ExtraMetadata { ell_status?: string; frl_status?: string; iep_status?: string; dob: Date; gender?: string; grade: Grade; } export interface AdministratorData extends DocumentData { administrationsCreated: string[]; permissions: string[]; } export interface ExternalUserData extends DocumentData { [x: string]: unknown; } export interface AssignmentDateMap { [x: string]: Date; } export interface RoarOrgDateMap { [x: string]: { from: Date; to?: Date; }; } export interface Orgs { current: string[]; all: string[]; dates: RoarOrgDateMap; } export interface Name { first: string; middle?: string; last: string; } export interface UserDataInAdminDb extends DocumentData { id?: string; userType: UserType; name?: Name; assessmentPid?: string; assessmentUid?: string; assessmentsCompleted?: string[]; assessmentsAssigned?: string[]; assignmentsAssigned?: AssignmentDateMap; assignmentsStarted?: AssignmentDateMap; assignmentsCompleted?: AssignmentDateMap; classes: Orgs; schools: Orgs; districts: Orgs; groups: Orgs; families: Orgs; archived: boolean; testData?: boolean; demoData?: boolean; studentData?: StudentData; educatorData?: ExtraMetadata; caregiverData?: ExtraMetadata; adminData?: AdministratorData; externalData?: { [x: string]: ExternalUserData; }; } export interface UserRecord { email?: string; phoneNumber?: string; emailVerified?: string; password?: string; displayName?: string; photoURL?: string; disabled?: boolean; } export interface Legal { consent: []; assent: []; amount: string; expectedTime: string; } declare enum Operator { LESS_THAN = "LESS_THAN", GREATER_THAN = "GREATER_THAN", LESS_THAN_OR_EQUAL = "LESS_THAN_OR_EQUAL", GREATER_THAN_OR_EQUAL = "GREATER_THAN_OR_EQUAL", EQUAL = "EQUAL", NOT_EQUAL = "NOT_EQUAL" } interface FieldCondition { field: string; op: Operator; value: boolean | number | string | Date; } interface CompositeCondition { op: 'AND' | 'OR'; conditions: Condition[]; } declare type SelectAllCondition = true; export declare type Condition = FieldCondition | CompositeCondition | SelectAllCondition; export interface Assessment extends DocumentData { taskId: string; params: { [x: string]: unknown; }; variantId: string; variantName: string; conditions?: { optional?: Condition; assigned?: Condition; }; } export interface OrgLists extends DocumentData { districts: string[]; schools: string[]; classes: string[]; groups: string[]; families: string[]; } export declare type OrgListKey = 'districts' | 'schools' | 'classes' | 'groups' | 'families'; export interface Administration extends OrgLists { id?: string; name: string; publicName?: string; createdBy: string; dateCreated: Date | Timestamp; dateOpened: Date | Timestamp; dateClosed: Date | Timestamp; sequential: boolean; assessments: Assessment[]; tags?: string[]; readOrgs?: OrgLists; legal?: Legal; } export interface AssignedAssessment extends DocumentData { taskId: string; runId?: string; allRunIds?: string[]; completedOn?: Date; startedOn?: Date; rewardShown: boolean; [x: string]: unknown; optional?: boolean; params: { [x: string]: unknown; }; } export interface Assignment extends DocumentData { assignmentId?: string; completed: boolean; started: boolean; dateAssigned: Date; dateOpened: Date; dateClosed: Date; assigningOrgs: OrgLists; readOrgs: OrgLists; assessments: AssignedAssessment[]; } export interface District extends DocumentData { name: string; schools: string[]; [x: string]: unknown; } export interface School extends DocumentData { name: string; districtId: string; classes: string[]; [x: string]: unknown; } export interface Class extends DocumentData { name: string; schoolId: string; districtId: string; grade: Grade; [x: string]: unknown; } export interface Family extends DocumentData { name: string; [x: string]: unknown; } export interface Group extends DocumentData { name: string; [x: string]: unknown; } export declare type RoarOrg = District | School | Class | Family | Group; export declare type OrgType = 'district' | 'school' | 'class' | 'family' | 'group'; export declare type OrgCollectionName = 'districts' | 'schools' | 'classes' | 'families' | 'groups'; export interface StartTaskResult { success: boolean; taskInfo: { variantName: string; variantParams: { [x: string]: unknown; }; variantId: string; }; assigningOrgs: OrgLists; readOrgs: OrgLists; userData: UserDataInAdminDb; assessmentPid: string; } export {};