export interface Identifiable { id: string; } export interface Created { createdAt: Date; } export interface Updated { updatedAt: Date; } export type Timestamped = Created & Updated; export interface Team extends Identifiable, Timestamped { displayName: string; } export interface User extends Identifiable, Timestamped { username: string; passwordDigest: string; displayName?: string; } export type PublicUser = Pick< User, | "displayName" | "username" | keyof Identifiable >; export interface Note extends Identifiable, Timestamped { content: string; userId: User["id"] | null; userUsername?: User["username"]; userDisplayName?: User["displayName"]; } type IdentifierFor = T["id"]; export interface Token extends Created { bytes?: Uint8Array; digest: Uint8Array; userId: IdentifierFor; data: Record | null; } /** 32 bytes base64-encoded */ export type TokenDigest = string; export interface ContextState { user?: PublicUser; something?: string; }