55 lines
1 KiB
TypeScript
55 lines
1 KiB
TypeScript
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 extends Identifiable> = T["id"];
|
|
|
|
export interface Token extends Created {
|
|
bytes?: Uint8Array;
|
|
digest: Uint8Array;
|
|
userId: IdentifierFor<User>;
|
|
data: Record<string, unknown> | null;
|
|
}
|
|
|
|
/** 32 bytes base64-encoded */
|
|
export type TokenDigest = string;
|
|
|
|
export interface ContextState {
|
|
user?: PublicUser;
|
|
something?: string;
|
|
}
|