From 795fcd3694ebf1beee22a94f3c5f36dad4b91324 Mon Sep 17 00:00:00 2001 From: Jesse Wierzbinski Date: Tue, 21 Nov 2023 20:13:09 -1000 Subject: [PATCH] Lay out groundwork for plugins --- bun.lockb | Bin 334656 -> 335032 bytes package.json | 1 + plugins/test.plugin.ts | 11 +++ plugins/types.ts | 155 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 167 insertions(+) create mode 100644 plugins/test.plugin.ts create mode 100644 plugins/types.ts diff --git a/bun.lockb b/bun.lockb index a499d768115a4b89165a9088df34bf0b90a27e8d..c278d52e06abd3dd2157f87001773d5200739142 100755 GIT binary patch delta 58580 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 XMygZREIW5?#?xV4ex?IcwF~|Y8&4yq delta 58119 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 { + server.on(HookTypes.OnPostCreate, (req, newPost, author) => { + console.log("New post created!"); + console.log(`Post details: ${newPost.content} (${newPost.id})`); + console.log(`Made by ${author.username} (${author.id})`); + }); +}; + +export default registerPlugin; diff --git a/plugins/types.ts b/plugins/types.ts new file mode 100644 index 00000000..285cb18d --- /dev/null +++ b/plugins/types.ts @@ -0,0 +1,155 @@ +import EventEmitter from "eventemitter3"; +import { StatusWithRelations } from "~database/entities/Status"; +import { UserWithRelations } from "~database/entities/User"; +import { LysandObjectType } from "~types/lysand/Object"; + +export enum HookTypes { + /** + * Called before the server starts listening + */ + PreServe = "preServe", + /** + * Called after the server stops listening + */ + PostServe = "postServe", + /** + * Called on every HTTP request (before anything else is done) + */ + OnRequestReceive = "onRequestReceive", + /** + * Called on every HTTP request (after it is processed) + */ + OnRequestProcessed = "onRequestProcessed", + /** + * Called on every object received (before it is parsed and added to the database) + */ + OnObjectReceive = "onObjectReceive", + /** + * Called on every object processed (after it is parsed and added to the database) + */ + OnObjectProcessed = "onObjectProcessed", + /** + * Called when signature verification fails on an object + */ + OnCryptoFail = "onCryptoFail", + /** + * Called when signature verification succeeds on an object + */ + OnCryptoSuccess = "onCryptoSuccess", + /** + * Called when a user is banned by another user + */ + OnBan = "onBan", + /** + * Called when a user is suspended by another user + */ + OnSuspend = "onSuspend", + /** + * Called when a user is blocked by another user + */ + OnUserBlock = "onUserBlock", + /** + * Called when a user is muted by another user + */ + OnUserMute = "onUserMute", + /** + * Called when a user is followed by another user + */ + OnUserFollow = "onUserFollow", + /** + * Called when a user registers (before completing email verification) + */ + OnRegister = "onRegister", + /** + * Called when a user finishes registering (after completing email verification) + */ + OnRegisterFinish = "onRegisterFinish", + /** + * Called when a user deletes their account + */ + OnDeleteAccount = "onDeleteAccount", + /** + * Called when a post is created + */ + OnPostCreate = "onPostCreate", + /** + * Called when a post is deleted + */ + OnPostDelete = "onPostDelete", + /** + * Called when a post is updated + */ + OnPostUpdate = "onPostUpdate", +} + +export interface ServerStats { + postCount: number; +} + +interface ServerEvents { + [HookTypes.PreServe]: () => void; + [HookTypes.PostServe]: (stats: ServerStats) => void; + [HookTypes.OnRequestReceive]: (req: Request) => void; + [HookTypes.OnRequestProcessed]: (req: Request) => void; + [HookTypes.OnObjectReceive]: (obj: LysandObjectType) => void; + [HookTypes.OnObjectProcessed]: (obj: LysandObjectType) => void; + [HookTypes.OnCryptoFail]: ( + req: Request, + obj: LysandObjectType, + author: UserWithRelations, + publicKey: string + ) => void; + [HookTypes.OnCryptoSuccess]: ( + req: Request, + obj: LysandObjectType, + author: UserWithRelations, + publicKey: string + ) => void; + [HookTypes.OnBan]: ( + req: Request, + bannedUser: UserWithRelations, + banner: UserWithRelations + ) => void; + [HookTypes.OnSuspend]: ( + req: Request, + suspendedUser: UserWithRelations, + suspender: UserWithRelations + ) => void; + [HookTypes.OnUserBlock]: ( + req: Request, + blockedUser: UserWithRelations, + blocker: UserWithRelations + ) => void; + [HookTypes.OnUserMute]: ( + req: Request, + mutedUser: UserWithRelations, + muter: UserWithRelations + ) => void; + [HookTypes.OnUserFollow]: ( + req: Request, + followedUser: UserWithRelations, + follower: UserWithRelations + ) => void; + [HookTypes.OnRegister]: (req: Request, newUser: UserWithRelations) => void; + [HookTypes.OnDeleteAccount]: ( + req: Request, + deletedUser: UserWithRelations + ) => void; + [HookTypes.OnPostCreate]: ( + req: Request, + newPost: StatusWithRelations, + author: UserWithRelations + ) => void; + [HookTypes.OnPostDelete]: ( + req: Request, + deletedPost: StatusWithRelations, + deleter: UserWithRelations + ) => void; + [HookTypes.OnPostUpdate]: ( + req: Request, + updatedPost: StatusWithRelations, + updater: UserWithRelations + ) => void; +} + +export class Server extends EventEmitter {}