discourse-js
Version:
A client-side javascript wrapper for the discourse API.
135 lines (134 loc) • 3.5 kB
TypeScript
import { Post } from './Posts';
import { UserBase, UserSummary } from './Users';
export interface Tag {
id: number;
name: string;
topicCount: number;
staff: boolean;
}
export interface TopicBase {
id: number;
title: string;
fancyTitle: string;
slug: string;
postsCount: number;
replyCount: number;
highestPostNumber: number;
imageUrl: string | null;
createdAt: string;
lastPostedAt: string;
bumped?: boolean;
bumpedAt?: string;
unseen?: boolean;
pinned: boolean;
unpinned: boolean | null;
excerpt?: string;
visible: boolean;
closed: boolean;
archived: boolean;
bookmarked: boolean;
liked?: boolean;
tags?: Tag[];
views?: number;
likeCount: number;
hasSummary?: boolean;
archetype: 'regular' | 'private_message' | 'banner';
lastPosterUsername?: string;
categoryId: number | null;
pinnedGlobally?: boolean;
featuredLink?: string;
}
export interface TopicSummary extends TopicBase {
excerpt: string;
bumped: boolean;
bumpedAt: string;
unseen: boolean;
liked: boolean;
posters: Array<{
extras: string | null;
description: string;
userId: number;
primaryGroupId: number | null;
}>;
participants?: Array<{
extras: string | null;
description: string | null;
userId: number;
primaryGroupId: number | null;
}>;
}
export interface Topic extends TopicBase {
postStream: {
posts: Post[];
stream: number[];
};
timelineLookup: Array<number[]>;
suggestedTopics?: TopicSummary[];
wordCount: number;
deletedAt: string | null;
userId: number;
pinnedAt: string | null;
pinnedUntil: string | null;
draft: string | null;
draftKey: string;
draftSequence: number;
posted: boolean;
currentPostNumber: number;
lastReadPostNumber: number;
lastReadPostId: number;
deletedBy: null;
hasDeleted: boolean;
actionsSummary: Array<{
id: number;
count: number;
hidden: boolean;
canAct: boolean;
}>;
chunkSize: number;
topicTimer: string;
privateTopicTimer: string;
messageBusLastId: number;
participantCount: number;
showReadIndicator: boolean;
details: {
notificationLevel: number;
notificationsReasonId: number | null;
canMovePosts: boolean;
canEdit: boolean;
canDelete: boolean;
canRemoveAllowedUsers: boolean;
canCreatePost: boolean;
canReplyAsNewTopic: boolean;
canFlagTopic: boolean;
canConvertTopic: boolean;
canReviewTopic: boolean;
canRemoveSelfId: number;
participants: UserSummary[];
createdBy: UserBase;
lastPoster: UserBase;
};
}
export interface TopicPosts {
id: number;
postStream: {
posts: Post[];
};
}
export interface TopicList {
canCreateTopic: boolean;
moreTopicsUrl?: string | null;
draft: string | null;
draftKey: string;
draftSequence: number;
perPage: number;
topics: TopicSummary[];
}
export interface TopicByUserName {
users: UserBase[];
primaryGroups: [];
topicList: TopicList;
}
export interface TopicByTag extends TopicByUserName {
}
export interface TopicByCategoryAndTag extends TopicByUserName {
}