summaryrefslogtreecommitdiff
path: root/packages/backend/src/misc/webhook-cache.ts
blob: 4bd2333661038d05a1ca22ecba239ab3b2c8f51d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import { Webhooks } from '@/models/index.js';
import { Webhook } from '@/models/entities/webhook.js';
import { subsdcriber } from '../db/redis.js';

let webhooksFetched = false;
let webhooks: Webhook[] = [];

export async function getActiveWebhooks() {
	if (!webhooksFetched) {
		webhooks = await Webhooks.findBy({
			active: true,
		});
		webhooksFetched = true;
	}

	return webhooks;
}

subsdcriber.on('message', async (_, data) => {
	const obj = JSON.parse(data);

	if (obj.channel === 'internal') {
		const { type, body } = obj.message;
		switch (type) {
			case 'webhookCreated':
				if (body.active) {
					webhooks.push(body);
				}
				break;
			case 'webhookUpdated':
				if (body.active) {
					const i = webhooks.findIndex(a => a.id === body.id);
					if (i > -1) {
						webhooks[i] = body;
					} else {
						webhooks.push(body);
					}
				} else {
					webhooks = webhooks.filter(a => a.id !== body.id);
				}
				break;
			case 'webhookDeleted':
				webhooks = webhooks.filter(a => a.id !== body.id);
				break;
			default:
				break;
		}
	}
});