import { CallHandler, ExecutionContext, Injectable, NestInterceptor, } from '@nestjs/common'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; export interface ResponseFormat { success: boolean; data: T; meta?: any; } @Injectable() export class ResponseInterceptor implements NestInterceptor { intercept(context: ExecutionContext, next: CallHandler): Observable { return next.handle().pipe( map((data) => { // If data is already formatted or is a file buffer/stream, pass through if (data && typeof data === 'object' && ('success' in data || 'data' in data)) { return data; } return { success: true, data, }; }), ); } }