feat(notifications): include federated chat messages and invitations

This commit is contained in:
2026-10-15 17:50:38 +02:00
parent 697f538b6e
commit 7b61857fb8
11 changed files with 413 additions and 16 deletions

View File

@@ -5,6 +5,7 @@ import { CollaborationService } from "./service"
import { FederationService } from "./federation"
import { encrypt, decrypt } from "../../utils/crypt"
import { collaborationConfig } from "./config"
import { CollaborationNotifications } from "./notifications"
export function collaborationRuntime(server: FastifyInstance) {
const { apiUrl, publicUrl, enabled, disabledReason } = collaborationConfig({
@@ -16,12 +17,17 @@ export function collaborationRuntime(server: FastifyInstance) {
sendMail,
})
const federation = new FederationService(service, { apiUrl, enabled, disabledReason, seal: encrypt, unseal: decrypt })
const notifications = new CollaborationNotifications(server, service, federation)
service.options.notifications = notifications
service.options.changed = (roomId, db) => federation.changed(roomId, db)
service.options.invited = (ctx, roomId, target, invitationId, db) => federation.invite(ctx, roomId, target, invitationId, db)
let timer: ReturnType<typeof setInterval>
server.addHook("onReady", async () => {
if (federation.options.enabled) await federation.keys()
timer = setInterval(() => federation.tick().catch(error => server.log.error({ err: error }, "Collaboration worker failed")), 5000)
timer = setInterval(() => {
void federation.tick().catch(error => server.log.error({ err: error }, "Collaboration worker failed"))
void notifications.tick().catch(error => server.log.error({ err: error }, "Collaboration notification worker failed"))
}, 5000)
timer.unref()
})
server.addHook("onClose", async () => { clearInterval(timer) })