backend: Integrate GlobalPreferencesService to manage webhook preferences in OpenViduWebhookService
This commit is contained in:
parent
fef7e50555
commit
669c5b29a4
@ -2,12 +2,22 @@ import crypto from 'crypto';
|
|||||||
import { inject, injectable } from '../config/dependency-injector.config.js';
|
import { inject, injectable } from '../config/dependency-injector.config.js';
|
||||||
import { Room } from 'livekit-server-sdk';
|
import { Room } from 'livekit-server-sdk';
|
||||||
import { LoggerService } from './logger.service.js';
|
import { LoggerService } from './logger.service.js';
|
||||||
import { MEET_API_KEY, MEET_WEBHOOK_ENABLED, MEET_WEBHOOK_URL } from '../environment.js';
|
import { MEET_API_KEY } from '../environment.js';
|
||||||
import { MeetWebhookEvent, MeetWebhookEventType, MeetRecordingInfo, MeetWebhookPayload } from '@typings-ce';
|
import {
|
||||||
|
MeetWebhookEvent,
|
||||||
|
MeetWebhookEventType,
|
||||||
|
MeetRecordingInfo,
|
||||||
|
MeetWebhookPayload,
|
||||||
|
WebhookPreferences
|
||||||
|
} from '@typings-ce';
|
||||||
|
import { GlobalPreferencesService } from './preferences/global-preferences.service.js';
|
||||||
|
|
||||||
@injectable()
|
@injectable()
|
||||||
export class OpenViduWebhookService {
|
export class OpenViduWebhookService {
|
||||||
constructor(@inject(LoggerService) protected logger: LoggerService) {}
|
constructor(
|
||||||
|
@inject(LoggerService) protected logger: LoggerService,
|
||||||
|
@inject(GlobalPreferencesService) protected globalPrefService: GlobalPreferencesService
|
||||||
|
) {}
|
||||||
|
|
||||||
// TODO: Implement Room webhooks
|
// TODO: Implement Room webhooks
|
||||||
async sendRoomFinishedWebhook(room: Room) {
|
async sendRoomFinishedWebhook(room: Room) {
|
||||||
@ -43,7 +53,9 @@ export class OpenViduWebhookService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private async sendWebhookEvent(event: MeetWebhookEventType, payload: MeetWebhookPayload) {
|
private async sendWebhookEvent(event: MeetWebhookEventType, payload: MeetWebhookPayload) {
|
||||||
if (!this.isWebhookEnabled()) return;
|
const webhookPreferences = await this.getWebhookPreferences();
|
||||||
|
|
||||||
|
if (!webhookPreferences.enabled) return;
|
||||||
|
|
||||||
const creationDate = Date.now();
|
const creationDate = Date.now();
|
||||||
const data: MeetWebhookEvent = {
|
const data: MeetWebhookEvent = {
|
||||||
@ -57,7 +69,7 @@ export class OpenViduWebhookService {
|
|||||||
this.logger.info(`Sending webhook event ${data.event}`);
|
this.logger.info(`Sending webhook event ${data.event}`);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await this.fetchWithRetry(MEET_WEBHOOK_URL, {
|
await this.fetchWithRetry(webhookPreferences.url, {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
headers: {
|
headers: {
|
||||||
'Content-Type': 'application/json',
|
'Content-Type': 'application/json',
|
||||||
@ -98,8 +110,13 @@ export class OpenViduWebhookService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private isWebhookEnabled(): boolean {
|
private async getWebhookPreferences(): Promise<WebhookPreferences> {
|
||||||
// TODO: Retrieve this from the database
|
try {
|
||||||
return !!MEET_WEBHOOK_URL && MEET_WEBHOOK_ENABLED === 'true';
|
const { webhooksPreferences } = await this.globalPrefService.getGlobalPreferences();
|
||||||
|
return webhooksPreferences;
|
||||||
|
} catch (error) {
|
||||||
|
this.logger.error('Error getting webhook preferences:', error);
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user