UNPKG

nestjs-minio-backend

Version:
82 lines 3.81 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var FileUrlTransformInterceptor_1; Object.defineProperty(exports, "__esModule", { value: true }); exports.FileUrlTransformInterceptor = void 0; const common_1 = require("@nestjs/common"); const operators_1 = require("rxjs/operators"); const minio_service_1 = require("../minio.service"); const net_1 = require("net"); const http_1 = require("http"); let FileUrlTransformInterceptor = FileUrlTransformInterceptor_1 = class FileUrlTransformInterceptor { constructor(minioService) { this.minioService = minioService; this.logger = new common_1.Logger(FileUrlTransformInterceptor_1.name); } intercept(context, next) { return next.handle().pipe((0, operators_1.map)(async (data) => { if (!data) return data; if (Array.isArray(data)) { return Promise.all(data.map((item) => this.transformUrls(item))); } return this.transformUrls(data); })); } async transformUrls(data, visited = new WeakSet()) { if (!data) return data; if (data instanceof net_1.Socket || data instanceof http_1.IncomingMessage || data instanceof http_1.ServerResponse || data.constructor?.name === 'HTTPParser') { return data; } if (typeof data === 'object' && data !== null) { if (visited.has(data)) { return data; } visited.add(data); } const obj = data.toJSON ? data.toJSON() : data; if (typeof obj !== 'object' || obj === null) { return obj; } for (const [key, value] of Object.entries(obj)) { if (typeof value === 'string' && value.startsWith('minio://')) { const minioPath = this.minioService.parseMinioUrl(value); if (minioPath) { try { obj[key] = await this.minioService.getPresignedUrl(minioPath.bucketName, minioPath.objectName); } catch (error) { this.logger.error(`Error generating presigned URL for ${key}:`, error); } } } else if (value && typeof value === 'object' && !Array.isArray(value)) { obj[key] = await this.transformUrls(value, visited); } else if (Array.isArray(value)) { obj[key] = await Promise.all(value.map((item) => typeof item === 'object' && item !== null ? this.transformUrls(item, visited) : item)); } } return obj; } }; exports.FileUrlTransformInterceptor = FileUrlTransformInterceptor; exports.FileUrlTransformInterceptor = FileUrlTransformInterceptor = FileUrlTransformInterceptor_1 = __decorate([ (0, common_1.Injectable)(), __metadata("design:paramtypes", [minio_service_1.MinioService]) ], FileUrlTransformInterceptor); //# sourceMappingURL=file-url-transform.interceptor.js.map