Files
knightcrawler/src/node/consumer/src/lib/services/tracker_service.ts
2024-03-09 17:46:33 +00:00

43 lines
1.7 KiB
TypeScript

import {ICacheService} from "@interfaces/cache_service";
import {ILoggingService} from "@interfaces/logging_service";
import {ITrackerService} from "@interfaces/tracker_service";
import {configurationService} from '@services/configuration_service';
import {IocTypes} from "@setup/ioc_types";
import axios, {AxiosResponse} from 'axios';
import {inject, injectable} from "inversify";
@injectable()
export class TrackerService implements ITrackerService {
@inject(IocTypes.ICacheService) cacheService: ICacheService;
@inject(IocTypes.ILoggingService) logger: ILoggingService;
async getTrackers(): Promise<string[]> {
return this.cacheService.cacheTrackers(this.downloadTrackers);
}
private downloadTrackers = async (): Promise<string[]> => {
const headers = {};
if (configurationService.trackerConfig.GITHUB_PAT) {
headers['Authorization'] = `Bearer ${configurationService.trackerConfig.GITHUB_PAT}`;
}
const response: AxiosResponse<string> = await axios.get(configurationService.trackerConfig.TRACKERS_URL, { headers });
const trackersListText: string = response.data;
// Trackers are separated by a newline character
let urlTrackers = trackersListText.split("\n");
// remove blank lines
urlTrackers = urlTrackers.filter(line => line.trim() !== '');
if (!configurationService.trackerConfig.UDP_ENABLED) {
// remove any udp trackers
urlTrackers = urlTrackers.filter(line => !line.startsWith('udp://'));
}
this.logger.info(`Trackers updated at ${Date.now()}: ${urlTrackers.length} trackers`);
return urlTrackers;
};
}