@sourceloop/ctrl-plane-tenant-management-service
Version:
Tenant Management microservice for SaaS control plane
30 lines (28 loc) • 855 B
text/typescript
import {
Getter,
injectable,
BindingScope,
extensions,
extensionPoint,
} from '@loopback/core';
import {HttpErrors} from '@loopback/rest';
import {IWebhookHandler, WebhookPayload} from '../types';
import {WebhookDTO} from '../models';
import {WebhookHandlerEP} from '../keys';
({scope: BindingScope.TRANSIENT})
(WebhookHandlerEP.key)
export class WebhookHelperService<T extends WebhookPayload['data']> {
constructor(
()
private readonly getHandlers: Getter<IWebhookHandler[]>,
) {}
async process(dto: WebhookDTO<T>): Promise<void> {
const handlers = await this.getHandlers();
const handler = handlers.find(h => h.type === dto.type);
if (handler) {
await handler.handle(dto);
} else {
throw new HttpErrors.UnprocessableEntity('Invalid type of webhook');
}
}
}