import { Keys, Extends, PropSelector, SpecialType, Settings, InfoMap, Info,Digit, } from "@onebro/oba-common"; import { Model, ModelSignature, ModelBaseTypeSig, Stages, StageGuard, StageGuardAB, IsObjectId, } from "@onebro/oba-mongoose"; import { UserStatuses, UserRoles, LocationObj } from "./00-common"; export type AuthActions = { A1:"registered"; A2:"loggedIn"; A3:"loggedOut"; A4:"verified"; A5:"reset"; }; export const AuthActions:AuthActions = { A1:"registered", A2:"loggedIn", A3:"loggedOut", A4:"verified", A5:"reset", }; export type AuthIdProps = SpecialType,"role"> & { email:string; username:string; role:string; scopes:string[]; next:string; meta:InfoMap>; }; export type AuthPin = `${Digit}${Digit}${Digit}${Digit}`; export type AuthCredsVirtuals = {device:string;}; export type AuthCredsProps = AuthCredsVirtuals & { pin:AuthPin; reset:string|null; verification:string|null; attempts:number|null; devices:string[]; device:string; }; export type UserAppSettings = Partial<{ canActivate:boolean; canShare:boolean; acceptInvites:boolean; sendInvites:boolean; createSnippets:boolean; maxSessions:number; }>; export type UserAcctPermissions = { p1:"cookies"; p2:"location"; p3:"gallery"; p4:"camera"; p5:"video"; p6:"files"; }; export const UserAcctPermissions:UserAcctPermissions = { p1:"cookies", p2:"location", p3:"gallery", p4:"camera", p5:"video", p6:"files", }; export type UserAcctVirtuals = { age:number|null; fullname:string; memberSince:Date; }; export type UserAcctProps = AuthIdProps & AuthCredsProps & UserAcctVirtuals & { _type_:"user-acct"; name:{first:string;last:string;}; phn:string; dob:string; hometown:string; settings:Settings & Info<"data">; permissions:InfoMap>; next:string; }; export type UserAcctConfigKeys = |"email"|"role"|"devices"|"settings"; export type UserAcctConfigOptKeys = |"username"|"scopes"|"name"|"phn"|"hometown"|"permissions"|"dob"|"pin"|"verification"|"reset"|"meta"; export type UserAcctInstanceKeys = UserAcctConfigKeys|UserAcctConfigOptKeys|"fullname"|"age"|"memberSince"|"attempts"|"device"|"next"; export type UserAcctJsonKeys = UserAcctInstanceKeys|"_type_"; export type UserAcctPreviewKeys = |"meta"|"email"|"username"|"role"|"fullname"|"age"|"memberSince"|"phn"|"hometown"; export type UserAcctSelfRefs = {}; export type UserAcctMethods = {jsonAuth:(auth?:boolean) => UserAcct["json"];}; export type UserAcctPropKeys = Keys>; export type UserAcctPropSelector< t extends Stages, k extends UserAcctPropKeys = undefined, j extends UserAcctPropKeys = undefined> = PropSelector,k,j>; export type UserAcctSignature = ModelSignature< UserAcctPropSelector<"C",UserAcctConfigKeys,UserAcctConfigOptKeys>, UserAcctPropSelector<"I",UserAcctInstanceKeys> & UserAcctMethods, UserAcctPropSelector<"J",UserAcctJsonKeys>, UserAcctPropSelector<"J",UserAcctPreviewKeys>, UserStatuses, UserAcctSelfRefs>; export type UserAcct = Model; export type UserAcctAsProp = ModelBaseTypeSig< Extends<[IsArr],[true|1],IsObjectId[],IsObjectId>, Extends<[IsArr],[true|1],UserAcct["instance"][],UserAcct["instance"]>, Extends<[IsArr],[true|1], Extends<[IsUser],[true|1],UserAcct["json"][],UserAcct["preview"][]>, Extends<[IsUser],[true|1],UserAcct["json"],UserAcct["preview"]>>>;