UNPKG

nestjs-eureka

Version:

A NestJS module that integrate eureka-js-client

60 lines 2.92 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 DiscoveryInterceptor_1; Object.defineProperty(exports, "__esModule", { value: true }); exports.DiscoveryInterceptor = void 0; const axios_1 = require("@nestjs/axios"); const common_1 = require("@nestjs/common"); const discovery_service_1 = require("./discovery.service"); let DiscoveryInterceptor = DiscoveryInterceptor_1 = class DiscoveryInterceptor { constructor(httpService, discoveryService) { this.httpService = httpService; this.discoveryService = discoveryService; this.logger = new common_1.Logger(DiscoveryInterceptor_1.name); } onApplicationBootstrap() { this.logger.debug('Injecting interceptor'); this.interceptorNumber = this.httpService.axiosRef.interceptors.request.use(this.mapHostnameInterceptor.bind(this)); } onApplicationShutdown() { this.logger.debug('Eject interceptor'); this.httpService.axiosRef.interceptors.request.eject(this.interceptorNumber); } mapHostnameInterceptor(config) { const url = new URL(this.buildFullPath(config.baseURL, config.url)); this.logger.debug(`Resolving URL : ${url}`); const target = this.discoveryService.resolveHostname(url.hostname); if (target) { url.hostname = target.host; url.port = target.port.toString(); } config.url = url.toJSON(); return config; } buildFullPath(baseURL, requestedURL) { if (baseURL && !this.isAbsoluteURL(requestedURL)) { return this.combineURLs(baseURL, requestedURL); } return requestedURL; } combineURLs(baseURL, relativeURL) { return relativeURL ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '') : baseURL; } isAbsoluteURL(url) { return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url); } }; DiscoveryInterceptor = DiscoveryInterceptor_1 = __decorate([ (0, common_1.Injectable)(), __metadata("design:paramtypes", [axios_1.HttpService, discovery_service_1.DiscoveryService]) ], DiscoveryInterceptor); exports.DiscoveryInterceptor = DiscoveryInterceptor; //# sourceMappingURL=discovery.interceptor.js.map