@replyke/core
Version:
Replyke: Build interactive apps with social features like comments, votes, feeds, user lists, notifications, and more.
149 lines (148 loc) • 4.03 kB
TypeScript
import { PaginatedResponse, PaginationMetadata } from "../PaginatedResponse";
import { File } from "./File";
export type ReadingPermission = "anyone" | "members";
export type PostingPermission = "anyone" | "members" | "admins";
export type SpaceMemberRole = "admin" | "moderator" | "member";
export type SpaceMemberStatus = "pending" | "active" | "banned" | "rejected";
export interface SpaceMemberPermissions {
isAdmin: boolean;
isModerator: boolean;
isMember: boolean;
status: "pending" | "active" | "banned" | null;
canPost: boolean;
canModerate: boolean;
canRead: boolean;
}
export type PaginationMeta = PaginationMetadata;
export interface SpacePreview {
id: string;
shortId: string;
name: string;
slug: string | null;
avatarFileId: string | null;
readingPermission?: ReadingPermission;
parentSpaceId?: string | null;
depth?: number;
avatarFile?: File;
}
export interface Space {
id: string;
projectId: string;
shortId: string;
slug: string | null;
name: string;
description: string | null;
avatarFileId: string | null;
bannerFileId: string | null;
userId: string;
readingPermission: ReadingPermission;
postingPermission: PostingPermission;
requireJoinApproval: boolean;
parentSpaceId: string | null;
depth: number;
metadata: Record<string, any>;
createdAt: Date;
updatedAt: Date;
deletedAt: Date | null;
membersCount: number;
childSpacesCount: number;
isMember?: boolean;
avatarFile?: File;
bannerFile?: File;
}
export interface SpaceDetailed extends Space {
memberPermissions: SpaceMemberPermissions | null;
parentSpace: SpacePreview | null;
childSpaces: SpacePreview[];
}
export interface UserSpaceItem {
space: Space;
membership: {
membershipId: string;
role: SpaceMemberRole;
status: SpaceMemberStatus;
joinedAt: Date;
};
}
export type UserSpacesResponse = PaginatedResponse<UserSpaceItem>;
export interface JoinSpaceResponse {
message: string;
membership: {
id: string;
spaceId: string;
userId: string;
role: "member";
status: "pending" | "active";
joinedAt: Date;
};
}
export interface LeaveSpaceResponse {
message: string;
}
export interface UpdateMemberRoleResponse {
message: string;
membership: {
id: string;
role: SpaceMemberRole;
status: string;
joinedAt: Date;
userId: string;
};
}
export interface ApproveMemberResponse {
message: string;
membership: {
id: string;
status: "active";
joinedAt: Date;
};
}
export interface DeclineMemberResponse {
message: string;
membership: {
id: string;
status: "rejected";
};
}
export interface CheckMyMembershipResponse {
isMember: boolean;
role: "admin" | "moderator" | "member" | null;
status: "pending" | "active" | "banned" | "rejected" | null;
joinedAt: Date | null;
permissions: {
canPost: boolean;
canModerate: boolean;
canRead: boolean;
isAdmin: boolean;
isModerator: boolean;
};
}
export interface DeleteSpaceResponse {
message: string;
deletedSpace: {
id: string;
name: string;
};
counts: {
entities: number;
members: number;
childSpaces: number;
};
}
export interface DigestConfig {
digestEnabled: boolean;
digestWebhookUrl: string | null;
digestWebhookSecret: string | null;
digestScheduleHour: number | null;
digestTimezone: string | null;
}
export interface UpdateDigestConfigProps {
digestEnabled?: boolean;
digestWebhookUrl?: string | null;
digestWebhookSecret?: string | null;
digestScheduleHour?: number | null;
digestTimezone?: string | null;
}
export type SpaceInclude = "files";
export type SpaceIncludeArray = SpaceInclude[];
export type SpaceIncludeParam = SpaceInclude | SpaceIncludeArray;