diff --git a/src/organization/organization.service.ts b/src/organization/organization.service.ts index fab5625..979253a 100644 --- a/src/organization/organization.service.ts +++ b/src/organization/organization.service.ts @@ -16,12 +16,15 @@ export async function createOrg(input: CreateOrgInput, tenantId: string) { ...input, }); - dbEvents.emit("change", { - type: "insert", - collection: "orgs", - document: org, - requiredClaims: ["org:read"], - } as ChangeEvent); + dbEvents.emit( + "change", + { + type: "insert", + collection: "orgs", + document: org, + } as ChangeEvent, + ["org:read"] + ); return org; } @@ -79,12 +82,15 @@ export async function updateOrg( ); if (updateOrgResult) { - dbEvents.emit("change", { - type: "update", - collection: "orgs", - document: updateOrgResult, - requiredClaims: ["org:read"], - } as ChangeEvent); + dbEvents.emit( + "change", + { + type: "update", + collection: "orgs", + document: updateOrgResult, + } as ChangeEvent, + ["org:read"] + ); } return updateOrgResult; @@ -96,14 +102,17 @@ export async function deleteOrg(orgId: string, tenantId: string) { }); if (res.deletedCount > 0) { - dbEvents.emit("change", { - type: "delete", - collection: "orgs", - document: { - pid: orgId, - }, - requiredClaims: ["org:read"], - } as ChangeEvent); + dbEvents.emit( + "change", + { + type: "delete", + collection: "orgs", + document: { + pid: orgId, + }, + } as ChangeEvent, + ["org:read"] + ); } return res; diff --git a/src/permit/permit.service.ts b/src/permit/permit.service.ts index a5225f6..0b25fa4 100644 --- a/src/permit/permit.service.ts +++ b/src/permit/permit.service.ts @@ -18,12 +18,15 @@ export async function createPermit(input: CreatePermitInput, tenantId: string) { ...input, }); - dbEvents.emit("change", { - type: "insert", - collection: "permits", - document: permit, - requiredClaims: ["permit:read"], - } as ChangeEvent); + dbEvents.emit( + "change", + { + type: "insert", + collection: "permits", + document: permit, + } as ChangeEvent, + ["permit:read"] + ); return permit; } @@ -181,12 +184,15 @@ export async function updatePermit( .populate({ path: "createdBy", select: "pid name avatar" }); if (updatePermitResult) { - dbEvents.emit("change", { - type: "update", - collection: "permits", - document: updatePermitResult, - requiredClaims: ["permit:read"], - } as ChangeEvent); + dbEvents.emit( + "change", + { + type: "update", + collection: "permits", + document: updatePermitResult, + } as ChangeEvent, + ["permit:read"] + ); } return updatePermitResult; @@ -197,14 +203,17 @@ export async function deletePermit(permitId: string, tenantId: string) { $and: [{ tenantId: tenantId }, { pid: permitId }], }); - dbEvents.emit("change", { - type: "delete", - collection: "permits", - document: { - pid: permitId, - }, - requiredClaims: ["permit:read"], - } as ChangeEvent); + dbEvents.emit( + "change", + { + type: "delete", + collection: "permits", + document: { + pid: permitId, + }, + } as ChangeEvent, + ["permit:read"] + ); return res; } diff --git a/src/realtime.ts b/src/realtime.ts index 8628595..cf7b4b5 100644 --- a/src/realtime.ts +++ b/src/realtime.ts @@ -5,7 +5,6 @@ export type ChangeEvent = { type: "insert" | "update" | "delete"; collection: "permits" | "orgs"; document?: Object; - requiredClaims: Claim[]; }; export const dbEvents = new EventEmitter(); diff --git a/src/realtime/realtime.route.ts b/src/realtime/realtime.route.ts index 58d46ce..211e2c1 100644 --- a/src/realtime/realtime.route.ts +++ b/src/realtime/realtime.route.ts @@ -1,6 +1,7 @@ import { FastifyInstance, FastifyReply, FastifyRequest } from "fastify"; import { ChangeEvent, dbEvents } from "../realtime"; import { hasValidClaims } from "../auth"; +import { Claim } from "../utils/claims"; export async function realTimeRoutes(fastify: FastifyInstance) { fastify.get("/events", async (req: FastifyRequest, res: FastifyReply) => { @@ -13,9 +14,8 @@ export async function realTimeRoutes(fastify: FastifyInstance) { res.raw.setHeader("Connection", "keep-alive"); res.raw.flushHeaders(); - dbEvents.on("change", (event: ChangeEvent) => { - if (hasValidClaims(req.user, event.requiredClaims)) { - delete event.requiredClaims; + dbEvents.on("change", (event: ChangeEvent, requiredClaims: Claim[]) => { + if (hasValidClaims(req.user, requiredClaims)) { res.raw.write(JSON.stringify(event)); } });