import {Provider, inject} from '@loopback/core'; import {Request, Response} from '@loopback/rest'; import * as helmet from 'helmet'; import {HelmetSecurityBindings} from '../keys'; export interface HelmetAction { (request: Request, response: Response): Promise; } export class HelmetActionProvider implements Provider { constructor( @inject(HelmetSecurityBindings.CONFIG, { optional: true, }) private readonly config?: helmet.HelmetOptions, ) {} value(): HelmetAction { return (req, resp) => this.action(req, resp); } async action(request: Request, response: Response): Promise { const promise = new Promise((resolve, reject) => { helmet.default(this.config)(request, response, (err: unknown) => { if (err) { reject(err); } resolve(); }); }); await promise; } }