import { CallHandler, ExecutionContext, Injectable, NestInterceptor, StreamableFile, } from "@nestjs/common"; import { Readable } from "stream"; import { Observable } from "rxjs"; import { map } from "rxjs/operators"; export interface StandardResponse { success: true; data: T; timestamp: string; } @Injectable() export class ResponseTransformInterceptor implements NestInterceptor< T, StandardResponse | T > { intercept( _context: ExecutionContext, next: CallHandler, ): Observable | T> { return next.handle().pipe( map((data) => { if ( data instanceof StreamableFile || data instanceof Buffer || data instanceof Readable ) { return data; } return { success: true, data, timestamp: new Date().toISOString(), }; }), ); } }