diff --git a/api/stream/project.ts b/api/stream/project.ts new file mode 100644 index 0000000..2f748aa --- /dev/null +++ b/api/stream/project.ts @@ -0,0 +1,20 @@ +import type { StringLc, UnixTime } from "../../base.ts"; +import type { ProjectUpdatesStreamEvent } from "../../stream-event.ts"; +import type { Page } from "../pages/project/title.ts"; + +/** The response type of /api/stream/:projectname */ +export interface Stream { + /** The project name */ + projectName: string; + /** The latest updates in the project */ + end: UnixTime; + /** The page updates in the stream */ + pages: Page[]; + /** The latest events in the project */ + events: ProjectUpdatesStreamEvent[]; +} + +export interface StreamPage extends Pick { + /** Icons in the page */ + iconsLc: StringLc[]; +} diff --git a/rest.ts b/rest.ts index cbff2c9..58a2cc4 100644 --- a/rest.ts +++ b/rest.ts @@ -6,6 +6,7 @@ export * from "./base.ts"; export * from "./change.ts"; export * from "./error.ts"; +export * from "./stream-event.ts"; export * from "./api/commits/project/pageId.ts"; export * from "./api/embed-text/twitter.ts"; @@ -24,4 +25,5 @@ export * from "./api/project-backup/project/backupId.ts"; export * from "./api/project-backup/project/list.ts"; export * from "./api/projects/project.ts"; export * from "./api/projects.ts"; +export * from "./api/stream/project.ts"; export * from "./api/users/me.ts"; diff --git a/stream-event.ts b/stream-event.ts new file mode 100644 index 0000000..0d3e51e --- /dev/null +++ b/stream-event.ts @@ -0,0 +1,47 @@ +import type { PageId, ProjectId, StringLc, UnixTime, UserId } from "./base.ts"; + +export type ProjectUpdatesStreamEvent = + | PageDeleteEvent + | MemberJoinEvent + | MemberAddEvent + | AdminAddEvent + | AdminDeleteEvent + | OwnerSetEvent + | InvitationResetEvent; + +export interface ProjectEvent { + id: string; + pageId: PageId; + userId: UserId; + projectId: ProjectId; + created: UnixTime; + updated: UnixTime; +} + +export interface PageDeleteEvent extends ProjectEvent { + type: "page.delete"; + data: { + titleLc: StringLc; + }; +} +export interface MemberJoinEvent extends ProjectEvent { + type: "member.join"; +} +export interface MemberAddEvent extends ProjectEvent { + type: "member.add"; +} +export interface InvitationResetEvent extends ProjectEvent { + type: "invitation.reset"; +} +export interface AdminAddEvent extends ProjectEvent { + type: "admin.add"; + targetUserId: UserId; +} +export interface AdminDeleteEvent extends ProjectEvent { + type: "admin.delete"; + targetUserId: UserId; +} +export interface OwnerSetEvent extends ProjectEvent { + type: "owner.set"; + targetUserId: UserId; +} diff --git a/websocket.ts b/websocket.ts index 3353cf1..dd90e2b 100644 --- a/websocket.ts +++ b/websocket.ts @@ -1,2 +1,3 @@ export * from "./websocket/change.ts"; export * from "./websocket/event.ts"; +export * from "./stream-event.ts"; diff --git a/websocket/event.ts b/websocket/event.ts index c5539e8..5ce5922 100644 --- a/websocket/event.ts +++ b/websocket/event.ts @@ -14,6 +14,7 @@ import type { InsertChange, } from "../change.ts"; import type { User } from "../api/pages/project/title.ts"; +import type { ProjectUpdatesStreamEvent } from "../stream-event.ts"; export interface EmitEventMap { "socket.io-request": ( @@ -118,52 +119,6 @@ export interface ProjectUpdatesStreamCommit { freeze: true; } -export type ProjectUpdatesStreamEvent = - | PageDeleteEvent - | MemberJoinEvent - | MemberAddEvent - | AdminAddEvent - | AdminDeleteEvent - | OwnerSetEvent - | InvitationResetEvent; - -export interface ProjectEvent { - id: string; - pageId: string; - userId: string; - projectId: string; - created: number; - updated: number; -} - -export interface PageDeleteEvent extends ProjectEvent { - type: "page.delete"; - data: { - titleLc: string; - }; -} -export interface MemberJoinEvent extends ProjectEvent { - type: "member.join"; -} -export interface MemberAddEvent extends ProjectEvent { - type: "member.add"; -} -export interface InvitationResetEvent extends ProjectEvent { - type: "invitation.reset"; -} -export interface AdminAddEvent extends ProjectEvent { - type: "admin.add"; - targetUserId: UserId; -} -export interface AdminDeleteEvent extends ProjectEvent { - type: "admin.delete"; - targetUserId: UserId; -} -export interface OwnerSetEvent extends ProjectEvent { - type: "owner.set"; - targetUserId: UserId; -} - export interface CommitNotification extends PageCommit { id: string; }