back to esbuild- imports changed

This commit is contained in:
iPromKnight
2024-02-07 20:59:37 +00:00
committed by iPromKnight
parent 9aba1c13b1
commit 028bb122e1
50 changed files with 1935 additions and 281 deletions

View File

@@ -1,15 +0,0 @@
{
"jsc": {
"parser": {
"syntax": "typescript",
"tsx": false,
"decorators": true,
"dynamicImport": true
},
"target": "es2020",
"baseUrl": "."
},
"module": {
"type": "commonjs"
}
}

View File

@@ -0,0 +1,54 @@
import {build} from "esbuild";
import {readFileSync, rmSync} from "fs";
const {devDependencies} = JSON.parse(readFileSync("./package.json", "utf8"));
const start = Date.now();
try {
const outdir = "dist";
rmSync(outdir, {recursive: true, force: true});
build({
bundle: true,
entryPoints: [
"./src/main.ts",
],
external: [...(devDependencies && Object.keys(devDependencies))],
keepNames: true,
minify: true,
outbase: "./src",
outdir,
outExtension: {
".js": ".cjs",
},
platform: "node",
plugins: [
{
name: "populate-import-meta",
setup: ({onLoad}) => {
onLoad({filter: new RegExp(`${import.meta.dirname}/src/.*.(js|ts)$`)}, args => {
const contents = readFileSync(args.path, "utf8");
const transformedContents = contents
.replace(/import\.meta/g, `{dirname:__dirname,filename:__filename}`)
.replace(/import\.meta\.filename/g, "__filename")
.replace(/import\.meta\.dirname/g, "__dirname");
return {contents: transformedContents, loader: "default"};
});
},
}
],
}).then(() => {
// biome-ignore lint/style/useTemplate: <explanation>
// eslint-disable-next-line no-undef
console.log("⚡ " + "\x1b[32m" + `Done in ${Date.now() - start}ms`);
});
} catch (e) {
// eslint-disable-next-line no-undef
console.log(e);
// eslint-disable-next-line no-undef
process.exit(1);
}

File diff suppressed because it is too large Load Diff

View File

@@ -3,14 +3,12 @@
"version": "0.0.1",
"type": "module",
"scripts": {
"build": "swc src -d dist",
"watch-compile": "swc src -w --out-dir dist",
"watch-dev": "nodemon --watch \"dist/**/*\" -e js ./dist/main.js",
"dev": "concurrently \"npm run watch-compile\" \"npm run watch-dev\"",
"start": "node dist/main.js",
"clean": "rm -rf dist",
"lint": "eslint --ext .ts src",
"lint:fix": "eslint --ext .ts src --fix"
"build": "node esbuild.js",
"dev": "tsx watch --ignore node_modules src/main.ts | pino-pretty",
"start": "node dist/main.cjs",
"lint": "npx eslint ./src --ext .ts,.js",
"lint-fix": "npm run lint -- --fix"
},
"license": "MIT",
"dependencies": {
@@ -35,21 +33,24 @@
"webtorrent": "^2.1.35"
},
"devDependencies": {
"@swc/cli": "^0.3.9",
"@swc/core": "^1.4.0",
"node-gyp": "^10.0.1",
"nodemon": "^3.0.3",
"@types/amqplib": "^0.10.4",
"@types/magnet-uri": "^5.1.5",
"@types/node": "^20.11.16",
"@types/validator": "^13.11.8",
"@types/webtorrent": "^0.109.7",
"@typescript-eslint/eslint-plugin": "^6.21.0",
"@typescript-eslint/parser": "^6.21.0",
"@types/webtorrent": "^0.109.7",
"concurrently": "^8.2.2",
"esbuild": "^0.20.0",
"eslint": "^8.56.0",
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-import-helpers": "^1.3.1",
"pino-pretty": "^10.3.1",
"tsx": "^4.7.0",
"ts-node": "^10.9.2",
"tsconfig-paths": "^4.2.0",
"typescript": "^5.3.3"
}
}

View File

@@ -1,4 +1,4 @@
import {CacheMethod} from "../services/cache_service";
import {CacheMethod} from "@services/cache_service";
/* eslint-disable @typescript-eslint/no-explicit-any */
export interface ICacheService {

View File

@@ -1,4 +1,4 @@
import {ICommonVideoMetadata} from "./common_video_metadata";
import {ICommonVideoMetadata} from "@interfaces/common_video_metadata";
export interface ICinemetaJsonResponse {
meta?: ICinemetaMetaData;

View File

@@ -1,4 +1,4 @@
import {IKitsuLink, IKitsuTrailer} from "./kitsu_metadata";
import {IKitsuLink, IKitsuTrailer} from "@interfaces/kitsu_metadata";
export interface IKitsuCatalogJsonResponse {
metas: IKitsuCatalogMetaData[];

View File

@@ -1,4 +1,4 @@
import {ICommonVideoMetadata} from "./common_video_metadata";
import {ICommonVideoMetadata} from "@interfaces/common_video_metadata";
export interface IKitsuJsonResponse {
cacheMaxAge?: number;

View File

@@ -1,4 +1,4 @@
import {ICommonVideoMetadata} from "./common_video_metadata";
import {ICommonVideoMetadata} from "@interfaces/common_video_metadata";
export interface IMetadataResponse {
kitsuId?: number;

View File

@@ -1,5 +1,5 @@
import {IMetaDataQuery} from "./metadata_query";
import {IMetadataResponse} from "./metadata_response";
import {IMetaDataQuery} from "@interfaces/metadata_query";
import {IMetadataResponse} from "@interfaces/metadata_response";
export interface IMetadataService {
getKitsuId(info: IMetaDataQuery): Promise<number | Error>;

View File

@@ -1,4 +1,4 @@
import {IFileAttributes} from "../repository/interfaces/file_attributes";
import {IFileAttributes} from "@repository/interfaces/file_attributes";
export interface IParseTorrentTitleResult {
title?: string;

View File

@@ -1,6 +1,6 @@
import {TorrentType} from "../enums/torrent_types";
import {IParseTorrentTitleResult} from "./parse_torrent_title_result";
import {ITorrentFileCollection} from "./torrent_file_collection";
import {TorrentType} from "@enums/torrent_types";
import {IParseTorrentTitleResult} from "@interfaces/parse_torrent_title_result";
import {ITorrentFileCollection} from "@interfaces/torrent_file_collection";
export interface IParsedTorrent extends IParseTorrentTitleResult {
size?: number;

View File

@@ -1,4 +1,4 @@
import {ICommonVideoMetadata} from "./common_video_metadata";
import {ICommonVideoMetadata} from "@interfaces/common_video_metadata";
export interface ISeasonEpisodeMap {
[season: number]: {

View File

@@ -1,5 +1,5 @@
import {IParsedTorrent} from "./parsed_torrent";
import {ITorrentFileCollection} from "./torrent_file_collection";
import {IParsedTorrent} from "@interfaces/parsed_torrent";
import {ITorrentFileCollection} from "@interfaces/torrent_file_collection";
export interface ITorrentDownloadService {
getTorrentFiles(torrent: IParsedTorrent, timeout: number): Promise<ITorrentFileCollection>;

View File

@@ -1,7 +1,7 @@
import {ITorrentAttributes} from "../repository/interfaces/torrent_attributes";
import {SkipTorrent} from "../repository/models/skipTorrent";
import {Torrent} from "../repository/models/torrent";
import {IParsedTorrent} from "./parsed_torrent";
import {IParsedTorrent} from "@interfaces/parsed_torrent";
import {ITorrentAttributes} from "@repository/interfaces/torrent_attributes";
import {SkipTorrent} from "@repository/models/skipTorrent";
import {Torrent} from "@repository/models/torrent";
export interface ITorrentEntriesService {
createTorrentEntry(torrent: IParsedTorrent, overwrite: boolean): Promise<void>;

View File

@@ -1,6 +1,6 @@
import {IContentAttributes} from "../repository/interfaces/content_attributes";
import {IFileAttributes} from "../repository/interfaces/file_attributes";
import {ISubtitleAttributes} from "../repository/interfaces/subtitle_attributes";
import {IContentAttributes} from "@repository/interfaces/content_attributes";
import {IFileAttributes} from "@repository/interfaces/file_attributes";
import {ISubtitleAttributes} from "@repository/interfaces/subtitle_attributes";
export interface ITorrentFileCollection {
contents?: IContentAttributes[];

View File

@@ -1,5 +1,5 @@
import {IParsedTorrent} from "./parsed_torrent";
import {ITorrentFileCollection} from "./torrent_file_collection";
import {IParsedTorrent} from "@interfaces/parsed_torrent";
import {ITorrentFileCollection} from "@interfaces/torrent_file_collection";
export interface ITorrentFileService {
parseTorrentFiles(torrent: IParsedTorrent): Promise<ITorrentFileCollection>;

View File

@@ -1,4 +1,4 @@
import {IIngestedTorrentAttributes} from "../repository/interfaces/ingested_torrent_attributes";
import {IIngestedTorrentAttributes} from "@repository/interfaces/ingested_torrent_attributes";
export interface ITorrentProcessingService {
processTorrentRecord(torrent: IIngestedTorrentAttributes): Promise<void>;

View File

@@ -1,4 +1,4 @@
import {ITorrentFileCollection} from "./torrent_file_collection";
import {ITorrentFileCollection} from "@interfaces/torrent_file_collection";
export interface ITorrentSubtitleService {
assignSubtitles(fileCollection: ITorrentFileCollection): ITorrentFileCollection;

View File

@@ -1,12 +1,12 @@
import client, {Channel, Connection, ConsumeMessage, Options} from 'amqplib'
import {IIngestedRabbitMessage, IIngestedRabbitTorrent} from "@interfaces/ingested_rabbit_message";
import {ILoggingService} from "@interfaces/logging_service";
import {IProcessTorrentsJob} from "@interfaces/process_torrents_job";
import {ITorrentProcessingService} from "@interfaces/torrent_processing_service";
import {IocTypes} from "@models/ioc_types";
import {IIngestedTorrentAttributes} from "@repository/interfaces/ingested_torrent_attributes";
import {configurationService} from '@services/configuration_service';
import client, {Channel, Connection, ConsumeMessage, Options} from 'amqplib'
import {inject, injectable} from "inversify";
import {IIngestedRabbitMessage, IIngestedRabbitTorrent} from "../interfaces/ingested_rabbit_message";
import {ILoggingService} from "../interfaces/logging_service";
import {IProcessTorrentsJob} from "../interfaces/process_torrents_job";
import {ITorrentProcessingService} from "../interfaces/torrent_processing_service";
import {IocTypes} from "../models/ioc_types";
import {IIngestedTorrentAttributes} from "../repository/interfaces/ingested_torrent_attributes";
import {configurationService} from '../services/configuration_service';
@injectable()
export class ProcessTorrentsJob implements IProcessTorrentsJob {

View File

@@ -1,9 +1,9 @@
import {ICompositionalRoot} from "@interfaces/composition_root";
import {IProcessTorrentsJob} from "@interfaces/process_torrents_job";
import {ITrackerService} from "@interfaces/tracker_service";
import {IocTypes} from "@models/ioc_types";
import {IDatabaseRepository} from "@repository/interfaces/database_repository";
import {inject, injectable} from "inversify";
import {ICompositionalRoot} from "../interfaces/composition_root";
import {IProcessTorrentsJob} from "../interfaces/process_torrents_job";
import {ITrackerService} from "../interfaces/tracker_service";
import {IDatabaseRepository} from "../repository/interfaces/database_repository";
import {IocTypes} from "./ioc_types";
@injectable()
export class CompositionalRoot implements ICompositionalRoot {

View File

@@ -1,4 +1,4 @@
import {BooleanHelpers} from "../../helpers/boolean_helpers";
import {BooleanHelpers} from "@helpers/boolean_helpers";
export const cacheConfig = {
MONGODB_HOST: process.env.MONGODB_HOST || 'mongodb',

View File

@@ -1,4 +1,4 @@
import {BooleanHelpers} from "../../helpers/boolean_helpers";
import {BooleanHelpers} from "@helpers/boolean_helpers";
export const databaseConfig = {
POSTGRES_HOST: process.env.POSTGRES_HOST || 'postgres',

View File

@@ -1,4 +1,4 @@
import {BooleanHelpers} from "../../helpers/boolean_helpers";
import {BooleanHelpers} from "@helpers/boolean_helpers";
export const jobConfig = {
JOB_CONCURRENCY: parseInt(process.env.JOB_CONCURRENCY || "1", 10),

View File

@@ -1,4 +1,4 @@
import {BooleanHelpers} from "../../helpers/boolean_helpers";
import {BooleanHelpers} from "@helpers/boolean_helpers";
export const trackerConfig = {
TRACKERS_URL: process.env.TRACKERS_URL || 'https://ngosang.github.io/trackerslist/trackers_all.txt',

View File

@@ -1,29 +1,29 @@
import {ICacheService} from "@interfaces/cache_service";
import {ICompositionalRoot} from "@interfaces/composition_root";
import {ILoggingService} from "@interfaces/logging_service";
import {IMetadataService} from "@interfaces/metadata_service";
import {IProcessTorrentsJob} from "@interfaces/process_torrents_job";
import {ITorrentDownloadService} from "@interfaces/torrent_download_service";
import {ITorrentEntriesService} from "@interfaces/torrent_entries_service";
import {ITorrentFileService} from "@interfaces/torrent_file_service";
import {ITorrentProcessingService} from "@interfaces/torrent_processing_service";
import {ITorrentSubtitleService} from "@interfaces/torrent_subtitle_service";
import {ITrackerService} from "@interfaces/tracker_service";
import {ProcessTorrentsJob} from "@jobs/process_torrents_job";
import {CompositionalRoot} from "@models/composition_root";
import {IocTypes} from "@models/ioc_types";
import {DatabaseRepository} from "@repository/database_repository";
import {IDatabaseRepository} from "@repository/interfaces/database_repository";
import {CacheService} from "@services/cache_service";
import {LoggingService} from "@services/logging_service";
import {MetadataService} from "@services/metadata_service";
import {TorrentDownloadService} from "@services/torrent_download_service";
import {TorrentEntriesService} from "@services/torrent_entries_service";
import {TorrentFileService} from "@services/torrent_file_service";
import {TorrentProcessingService} from "@services/torrent_processing_service";
import {TorrentSubtitleService} from "@services/torrent_subtitle_service";
import {TrackerService} from "@services/tracker_service";
import {Container} from "inversify";
import {ICacheService} from "../interfaces/cache_service";
import {ICompositionalRoot} from "../interfaces/composition_root";
import {ILoggingService} from "../interfaces/logging_service";
import {IMetadataService} from "../interfaces/metadata_service";
import {IProcessTorrentsJob} from "../interfaces/process_torrents_job";
import {ITorrentDownloadService} from "../interfaces/torrent_download_service";
import {ITorrentEntriesService} from "../interfaces/torrent_entries_service";
import {ITorrentFileService} from "../interfaces/torrent_file_service";
import {ITorrentProcessingService} from "../interfaces/torrent_processing_service";
import {ITorrentSubtitleService} from "../interfaces/torrent_subtitle_service";
import {ITrackerService} from "../interfaces/tracker_service";
import {ProcessTorrentsJob} from "../jobs/process_torrents_job";
import {DatabaseRepository} from "../repository/database_repository";
import {IDatabaseRepository} from "../repository/interfaces/database_repository";
import {CacheService} from "../services/cache_service";
import {LoggingService} from "../services/logging_service";
import {MetadataService} from "../services/metadata_service";
import {TorrentDownloadService} from "../services/torrent_download_service";
import {TorrentEntriesService} from "../services/torrent_entries_service";
import {TorrentFileService} from "../services/torrent_file_service";
import {TorrentProcessingService} from "../services/torrent_processing_service";
import {TorrentSubtitleService} from "../services/torrent_subtitle_service";
import {TrackerService} from "../services/tracker_service";
import {CompositionalRoot} from "./composition_root";
import {IocTypes} from "./ioc_types";
const serviceContainer = new Container();

View File

@@ -1,24 +1,24 @@
import {PromiseHelpers} from '@helpers/promises_helpers';
import {ILoggingService} from "@interfaces/logging_service";
import {IocTypes} from "@models/ioc_types";
import {IContentCreationAttributes} from "@repository/interfaces/content_attributes";
import {IDatabaseRepository} from "@repository/interfaces/database_repository";
import {IFileAttributes, IFileCreationAttributes} from "@repository/interfaces/file_attributes";
import {ISubtitleAttributes, ISubtitleCreationAttributes} from "@repository/interfaces/subtitle_attributes";
import {ITorrentAttributes, ITorrentCreationAttributes} from "@repository/interfaces/torrent_attributes";
import {Content} from "@repository/models/content";
import {File} from "@repository/models/file";
import {IngestedPage} from "@repository/models/ingestedPage";
import {IngestedTorrent} from "@repository/models/ingestedTorrent";
import {Provider} from "@repository/models/provider";
import {SkipTorrent} from "@repository/models/skipTorrent";
import {Subtitle} from "@repository/models/subtitle";
import {Torrent} from "@repository/models/torrent";
import {configurationService} from '@services/configuration_service';
import {inject, injectable} from "inversify";
import moment from 'moment';
import {literal, Op, WhereOptions} from "sequelize";
import {Model, Sequelize} from 'sequelize-typescript';
import {PromiseHelpers} from '../helpers/promises_helpers';
import {ILoggingService} from "../interfaces/logging_service";
import {IocTypes} from "../models/ioc_types";
import {configurationService} from '../services/configuration_service';
import {IContentCreationAttributes} from "./interfaces/content_attributes";
import {IDatabaseRepository} from "./interfaces/database_repository";
import {IFileAttributes, IFileCreationAttributes} from "./interfaces/file_attributes";
import {ISubtitleAttributes, ISubtitleCreationAttributes} from "./interfaces/subtitle_attributes";
import {ITorrentAttributes, ITorrentCreationAttributes} from "./interfaces/torrent_attributes";
import {Content} from "./models/content";
import {File} from "./models/file";
import {IngestedPage} from "./models/ingestedPage";
import {IngestedTorrent} from "./models/ingestedTorrent";
import {Provider} from "./models/provider";
import {SkipTorrent} from "./models/skipTorrent";
import {Subtitle} from "./models/subtitle";
import {Torrent} from "./models/torrent";
@injectable()
export class DatabaseRepository implements IDatabaseRepository {

View File

@@ -1,15 +1,15 @@
import {IContentCreationAttributes} from "@repository/interfaces/content_attributes";
import {IFileAttributes, IFileCreationAttributes} from "@repository/interfaces/file_attributes";
import {ISubtitleAttributes, ISubtitleCreationAttributes} from "@repository/interfaces/subtitle_attributes";
import {ITorrentAttributes, ITorrentCreationAttributes} from "@repository/interfaces/torrent_attributes";
import {Content} from "@repository/models/content";
import {File} from "@repository/models/file";
import {Provider} from "@repository/models/provider";
import {SkipTorrent} from "@repository/models/skipTorrent";
import {Subtitle} from "@repository/models/subtitle";
import {Torrent} from "@repository/models/torrent";
import {WhereOptions} from "sequelize";
import {Model} from "sequelize-typescript";
import {Content} from "../models/content";
import {File} from "../models/file";
import {Provider} from "../models/provider";
import {SkipTorrent} from "../models/skipTorrent";
import {Subtitle} from "../models/subtitle";
import {Torrent} from "../models/torrent";
import {IContentCreationAttributes} from "./content_attributes";
import {IFileAttributes, IFileCreationAttributes} from "./file_attributes";
import {ISubtitleAttributes, ISubtitleCreationAttributes} from "./subtitle_attributes";
import {ITorrentAttributes, ITorrentCreationAttributes} from "./torrent_attributes";
export interface IDatabaseRepository {
connect(): Promise<void>;

View File

@@ -1,6 +1,6 @@
import {IParseTorrentTitleResult} from "@interfaces/parse_torrent_title_result";
import {ISubtitleAttributes} from "@repository/interfaces/subtitle_attributes";
import {Optional} from "sequelize";
import {IParseTorrentTitleResult} from "../../interfaces/parse_torrent_title_result";
import {ISubtitleAttributes} from "./subtitle_attributes";
export interface IFileAttributes extends IParseTorrentTitleResult {
id?: number;

View File

@@ -1,7 +1,7 @@
import {IContentAttributes} from "@repository/interfaces/content_attributes";
import {IFileAttributes} from "@repository/interfaces/file_attributes";
import {ISubtitleAttributes} from "@repository/interfaces/subtitle_attributes";
import {Optional} from "sequelize";
import {IContentAttributes} from "./content_attributes";
import {IFileAttributes} from "./file_attributes";
import {ISubtitleAttributes} from "./subtitle_attributes";
export interface ITorrentAttributes {
infoHash: string;

View File

@@ -1,6 +1,6 @@
import {IContentAttributes, IContentCreationAttributes} from "@repository/interfaces/content_attributes";
import {Torrent} from "@repository/models/torrent";
import {BelongsTo, Column, DataType, ForeignKey, Model, Table} from 'sequelize-typescript';
import {IContentAttributes, IContentCreationAttributes} from "../interfaces/content_attributes";
import {Torrent} from "./torrent";
@Table({modelName: 'content', timestamps: false})
export class Content extends Model<IContentAttributes, IContentCreationAttributes> {

View File

@@ -1,7 +1,7 @@
import {IFileAttributes, IFileCreationAttributes} from "@repository/interfaces/file_attributes";
import {Subtitle} from "@repository/models/subtitle";
import {Torrent} from "@repository/models/torrent";
import {BelongsTo, Column, DataType, ForeignKey, HasMany, Model, Table} from 'sequelize-typescript';
import {IFileAttributes, IFileCreationAttributes} from "../interfaces/file_attributes";
import {Subtitle} from "./subtitle";
import {Torrent} from "./torrent";
const indexes = [
{

View File

@@ -1,5 +1,5 @@
import {IIngestedPageAttributes, IIngestedPageCreationAttributes} from "@repository/interfaces/ingested_page_attributes";
import {Column, DataType, Model, Table} from 'sequelize-typescript';
import {IIngestedPageAttributes, IIngestedPageCreationAttributes} from "../interfaces/ingested_page_attributes";
const indexes = [
{

View File

@@ -1,5 +1,5 @@
import {IIngestedTorrentAttributes, IIngestedTorrentCreationAttributes} from "@repository/interfaces/ingested_torrent_attributes";
import {Column, DataType, Model, Table} from 'sequelize-typescript';
import {IIngestedTorrentAttributes, IIngestedTorrentCreationAttributes} from "../interfaces/ingested_torrent_attributes";
const indexes = [
{

View File

@@ -1,5 +1,5 @@
import {IProviderAttributes, IProviderCreationAttributes} from "@repository/interfaces/provider_attributes";
import {Column, DataType, Model, Table} from 'sequelize-typescript';
import {IProviderAttributes, IProviderCreationAttributes} from "../interfaces/provider_attributes";
@Table({modelName: 'provider', timestamps: false})
export class Provider extends Model<IProviderAttributes, IProviderCreationAttributes> {

View File

@@ -1,5 +1,5 @@
import {ISkipTorrentAttributes, ISkipTorrentCreationAttributes} from "@repository/interfaces/skip_torrent_attributes";
import {Column, DataType, Model, Table} from 'sequelize-typescript';
import {ISkipTorrentAttributes, ISkipTorrentCreationAttributes} from "../interfaces/skip_torrent_attributes";
@Table({modelName: 'skip_torrent', timestamps: false})

View File

@@ -1,6 +1,6 @@
import {ISubtitleAttributes, ISubtitleCreationAttributes} from "@repository/interfaces/subtitle_attributes";
import {File} from "@repository/models/file";
import {BelongsTo, Column, DataType, ForeignKey, Model, Table} from 'sequelize-typescript';
import {ISubtitleAttributes, ISubtitleCreationAttributes} from "../interfaces/subtitle_attributes";
import {File} from "./file";
const indexes = [
{

View File

@@ -1,8 +1,8 @@
import {ITorrentAttributes, ITorrentCreationAttributes} from "@repository/interfaces/torrent_attributes";
import {Content} from "@repository/models/content";
import {File} from "@repository/models/file";
import {Subtitle} from "@repository/models/subtitle";
import {Column, DataType, HasMany, Model, Table} from 'sequelize-typescript';
import {ITorrentAttributes, ITorrentCreationAttributes} from "../interfaces/torrent_attributes";
import {Content} from "./content";
import {File} from "./file";
import {Subtitle} from "./subtitle";
@Table({modelName: 'torrent', timestamps: true})

View File

@@ -1,12 +1,12 @@
import {CacheType} from "@enums/cache_types";
import {ICacheOptions} from "@interfaces/cache_options";
import {ICacheService} from "@interfaces/cache_service";
import {ILoggingService} from "@interfaces/logging_service";
import {IocTypes} from "@models/ioc_types";
import {configurationService} from '@services/configuration_service';
import {mongoDbStore} from '@tirke/node-cache-manager-mongodb'
import {Cache, createCache, MemoryCache, memoryStore} from 'cache-manager';
import {inject, injectable} from "inversify";
import {CacheType} from "../enums/cache_types";
import {ICacheOptions} from "../interfaces/cache_options";
import {ICacheService} from "../interfaces/cache_service";
import {ILoggingService} from "../interfaces/logging_service";
import {IocTypes} from "../models/ioc_types";
import {configurationService} from './configuration_service';
const GLOBAL_KEY_PREFIX = 'knightcrawler-consumer';
const IMDB_ID_PREFIX = `${GLOBAL_KEY_PREFIX}|imdb_id`;

View File

@@ -1,10 +1,10 @@
import {cacheConfig} from "../models/configuration/cache_config";
import {databaseConfig} from "../models/configuration/database_config";
import {jobConfig} from "../models/configuration/job_config";
import {metadataConfig} from "../models/configuration/metadata_config";
import {rabbitConfig} from "../models/configuration/rabbit_config";
import {torrentConfig} from "../models/configuration/torrent_config";
import {trackerConfig} from "../models/configuration/tracker_config";
import {cacheConfig} from "@models/configuration/cache_config";
import {databaseConfig} from "@models/configuration/database_config";
import {jobConfig} from "@models/configuration/job_config";
import {metadataConfig} from "@models/configuration/metadata_config";
import {rabbitConfig} from "@models/configuration/rabbit_config";
import {torrentConfig} from "@models/configuration/torrent_config";
import {trackerConfig} from "@models/configuration/tracker_config";
export const configurationService = {
rabbitConfig: rabbitConfig,

View File

@@ -1,6 +1,6 @@
import {ILoggingService} from "@interfaces/logging_service";
import {injectable} from "inversify";
import {Logger, pino} from "pino";
import {ILoggingService} from "../interfaces/logging_service";
/* eslint-disable @typescript-eslint/no-explicit-any */
@injectable()

View File

@@ -1,20 +1,17 @@
import {TorrentType} from '@enums/torrent_types';
import {ICacheService} from "@interfaces/cache_service";
import {ICinemetaJsonResponse} from "@interfaces/cinemeta_metadata";
import {ICommonVideoMetadata} from "@interfaces/common_video_metadata";
import {IKitsuCatalogJsonResponse} from "@interfaces/kitsu_catalog_metadata";
import {IKitsuJsonResponse} from "@interfaces/kitsu_metadata";
import {IMetaDataQuery} from "@interfaces/metadata_query";
import {IMetadataResponse} from "@interfaces/metadata_response";
import {IMetadataService} from "@interfaces/metadata_service";
import {IocTypes} from "@models/ioc_types";
import axios, {AxiosResponse} from 'axios';
import {ResultTypes, search} from 'google-sr';
import {inject, injectable} from "inversify";
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-expect-error
import nameToImdb from 'name-to-imdb';
import {TorrentType} from '../enums/torrent_types';
import {ICacheService} from "../interfaces/cache_service";
import {ICinemetaJsonResponse} from "../interfaces/cinemeta_metadata";
import {ICommonVideoMetadata} from "../interfaces/common_video_metadata";
import {IKitsuCatalogJsonResponse} from "../interfaces/kitsu_catalog_metadata";
import {IKitsuJsonResponse} from "../interfaces/kitsu_metadata";
import {IMetaDataQuery} from "../interfaces/metadata_query";
import {IMetadataResponse} from "../interfaces/metadata_response";
import {IMetadataService} from "../interfaces/metadata_service";
import {IocTypes} from "../models/ioc_types";
const CINEMETA_URL = 'https://v3-cinemeta.strem.io';
const KITSU_URL = 'https://anime-kitsu.strem.fun';

View File

@@ -1,17 +1,17 @@
import {ExtensionHelpers} from '@helpers/extension_helpers';
import {ILoggingService} from "@interfaces/logging_service";
import {IParsedTorrent} from "@interfaces/parsed_torrent";
import {ITorrentDownloadService} from "@interfaces/torrent_download_service";
import {ITorrentFileCollection} from "@interfaces/torrent_file_collection";
import {IocTypes} from "@models/ioc_types";
import {IContentAttributes} from "@repository/interfaces/content_attributes";
import {IFileAttributes} from "@repository/interfaces/file_attributes";
import {ISubtitleAttributes} from "@repository/interfaces/subtitle_attributes";
import {configurationService} from '@services/configuration_service';
import {inject, injectable} from "inversify";
import {encode} from 'magnet-uri';
import {parse} from "parse-torrent-title";
import WebTorrent from "webtorrent";
import {ExtensionHelpers} from '../helpers/extension_helpers';
import {ILoggingService} from "../interfaces/logging_service";
import {IParsedTorrent} from "../interfaces/parsed_torrent";
import {ITorrentDownloadService} from "../interfaces/torrent_download_service";
import {ITorrentFileCollection} from "../interfaces/torrent_file_collection";
import {IocTypes} from "../models/ioc_types";
import {IContentAttributes} from "../repository/interfaces/content_attributes";
import {IFileAttributes} from "../repository/interfaces/file_attributes";
import {ISubtitleAttributes} from "../repository/interfaces/subtitle_attributes";
import {configurationService} from './configuration_service';
interface ITorrentFile {
name: string;

View File

@@ -1,24 +1,24 @@
import {TorrentType} from '@enums/torrent_types';
import {PromiseHelpers} from '@helpers/promises_helpers';
import {ILoggingService} from "@interfaces/logging_service";
import {IMetaDataQuery} from "@interfaces/metadata_query";
import {IMetadataService} from "@interfaces/metadata_service";
import {IParsedTorrent} from "@interfaces/parsed_torrent";
import {ITorrentEntriesService} from "@interfaces/torrent_entries_service";
import {ITorrentFileCollection} from "@interfaces/torrent_file_collection";
import {ITorrentFileService} from "@interfaces/torrent_file_service";
import {ITorrentSubtitleService} from "@interfaces/torrent_subtitle_service";
import {IocTypes} from "@models/ioc_types";
import {IDatabaseRepository} from "@repository/interfaces/database_repository";
import {IFileCreationAttributes} from "@repository/interfaces/file_attributes";
import {ISubtitleAttributes} from "@repository/interfaces/subtitle_attributes";
import {ITorrentAttributes, ITorrentCreationAttributes} from "@repository/interfaces/torrent_attributes";
import {File} from "@repository/models/file";
import {SkipTorrent} from "@repository/models/skipTorrent";
import {Subtitle} from "@repository/models/subtitle";
import {Torrent} from "@repository/models/torrent";
import {inject, injectable} from "inversify";
import {parse} from 'parse-torrent-title';
import {TorrentType} from '../enums/torrent_types';
import {PromiseHelpers} from '../helpers/promises_helpers';
import {ILoggingService} from "../interfaces/logging_service";
import {IMetaDataQuery} from "../interfaces/metadata_query";
import {IMetadataService} from "../interfaces/metadata_service";
import {IParsedTorrent} from "../interfaces/parsed_torrent";
import {ITorrentEntriesService} from "../interfaces/torrent_entries_service";
import {ITorrentFileCollection} from "../interfaces/torrent_file_collection";
import {ITorrentFileService} from "../interfaces/torrent_file_service";
import {ITorrentSubtitleService} from "../interfaces/torrent_subtitle_service";
import {IocTypes} from "../models/ioc_types";
import {IDatabaseRepository} from "../repository/interfaces/database_repository";
import {IFileCreationAttributes} from "../repository/interfaces/file_attributes";
import {ISubtitleAttributes} from "../repository/interfaces/subtitle_attributes";
import {ITorrentAttributes, ITorrentCreationAttributes} from "../repository/interfaces/torrent_attributes";
import {File} from "../repository/models/file";
import {SkipTorrent} from "../repository/models/skipTorrent";
import {Subtitle} from "../repository/models/subtitle";
import {Torrent} from "../repository/models/torrent";
@injectable()
export class TorrentEntriesService implements ITorrentEntriesService {

View File

@@ -1,24 +1,24 @@
import {TorrentType} from '@enums/torrent_types';
import {ExtensionHelpers} from '@helpers/extension_helpers';
import {PromiseHelpers} from '@helpers/promises_helpers';
import {ICommonVideoMetadata} from "@interfaces/common_video_metadata";
import {ILoggingService} from "@interfaces/logging_service";
import {IMetaDataQuery} from "@interfaces/metadata_query";
import {IMetadataResponse} from "@interfaces/metadata_response";
import {IMetadataService} from "@interfaces/metadata_service";
import {IParsedTorrent} from "@interfaces/parsed_torrent";
import {ISeasonEpisodeMap} from "@interfaces/season_episode_map";
import {ITorrentDownloadService} from "@interfaces/torrent_download_service";
import {ITorrentFileCollection} from "@interfaces/torrent_file_collection";
import {ITorrentFileService} from "@interfaces/torrent_file_service";
import {IocTypes} from "@models/ioc_types";
import {IContentAttributes} from "@repository/interfaces/content_attributes";
import {IFileAttributes} from "@repository/interfaces/file_attributes";
import {configurationService} from '@services/configuration_service';
import Bottleneck from 'bottleneck';
import {inject, injectable} from "inversify";
import moment from 'moment';
import {parse} from 'parse-torrent-title';
import {TorrentType} from '../enums/torrent_types';
import {ExtensionHelpers} from '../helpers/extension_helpers';
import {PromiseHelpers} from '../helpers/promises_helpers';
import {ICommonVideoMetadata} from "../interfaces/common_video_metadata";
import {ILoggingService} from "../interfaces/logging_service";
import {IMetaDataQuery} from "../interfaces/metadata_query";
import {IMetadataResponse} from "../interfaces/metadata_response";
import {IMetadataService} from "../interfaces/metadata_service";
import {IParsedTorrent} from "../interfaces/parsed_torrent";
import {ISeasonEpisodeMap} from "../interfaces/season_episode_map";
import {ITorrentDownloadService} from "../interfaces/torrent_download_service";
import {ITorrentFileCollection} from "../interfaces/torrent_file_collection";
import {ITorrentFileService} from "../interfaces/torrent_file_service";
import {IocTypes} from "../models/ioc_types";
import {IContentAttributes} from "../repository/interfaces/content_attributes";
import {IFileAttributes} from "../repository/interfaces/file_attributes";
import {configurationService} from './configuration_service';
const MIN_SIZE: number = 5 * 1024 * 1024; // 5 MB
const MULTIPLE_FILES_SIZE = 4 * 1024 * 1024 * 1024; // 4 GB

View File

@@ -1,12 +1,12 @@
import {TorrentType} from "@enums/torrent_types";
import {ILoggingService} from "@interfaces/logging_service";
import {IParsedTorrent} from "@interfaces/parsed_torrent";
import {ITorrentEntriesService} from "@interfaces/torrent_entries_service";
import {ITorrentProcessingService} from "@interfaces/torrent_processing_service";
import {ITrackerService} from "@interfaces/tracker_service";
import {IocTypes} from "@models/ioc_types";
import {IIngestedTorrentAttributes} from "@repository/interfaces/ingested_torrent_attributes";
import {inject, injectable} from "inversify";
import {TorrentType} from "../enums/torrent_types";
import {ILoggingService} from "../interfaces/logging_service";
import {IParsedTorrent} from "../interfaces/parsed_torrent";
import {ITorrentEntriesService} from "../interfaces/torrent_entries_service";
import {ITorrentProcessingService} from "../interfaces/torrent_processing_service";
import {ITrackerService} from "../interfaces/tracker_service";
import {IocTypes} from "../models/ioc_types";
import {IIngestedTorrentAttributes} from "../repository/interfaces/ingested_torrent_attributes";
@injectable()
export class TorrentProcessingService implements ITorrentProcessingService {

View File

@@ -1,9 +1,9 @@
import {ITorrentFileCollection} from "@interfaces/torrent_file_collection";
import {ITorrentSubtitleService} from "@interfaces/torrent_subtitle_service";
import {IFileAttributes} from "@repository/interfaces/file_attributes";
import {ISubtitleAttributes} from "@repository/interfaces/subtitle_attributes";
import {injectable} from "inversify";
import {parse} from 'parse-torrent-title';
import {ITorrentFileCollection} from "../interfaces/torrent_file_collection";
import {ITorrentSubtitleService} from "../interfaces/torrent_subtitle_service";
import {IFileAttributes} from "../repository/interfaces/file_attributes";
import {ISubtitleAttributes} from "../repository/interfaces/subtitle_attributes";
@injectable()
export class TorrentSubtitleService implements ITorrentSubtitleService {

View File

@@ -1,10 +1,10 @@
import {ICacheService} from "@interfaces/cache_service";
import {ILoggingService} from "@interfaces/logging_service";
import {ITrackerService} from "@interfaces/tracker_service";
import {IocTypes} from "@models/ioc_types";
import {configurationService} from '@services/configuration_service';
import axios, {AxiosResponse} from 'axios';
import {inject, injectable} from "inversify";
import {ICacheService} from "../interfaces/cache_service";
import {ILoggingService} from "../interfaces/logging_service";
import {ITrackerService} from "../interfaces/tracker_service";
import {IocTypes} from "../models/ioc_types";
import {configurationService} from './configuration_service';
@injectable()
export class TrackerService implements ITrackerService {

View File

@@ -1,7 +1,7 @@
import "reflect-metadata"; // required
import {ICompositionalRoot} from "./lib/interfaces/composition_root";
import {serviceContainer} from "./lib/models/inversify_config";
import {IocTypes} from "./lib/models/ioc_types";
import {ICompositionalRoot} from "@interfaces/composition_root";
import {serviceContainer} from "@models/inversify_config";
import {IocTypes} from "@models/ioc_types";
(async (): Promise<void> => {
const compositionalRoot = serviceContainer.get<ICompositionalRoot>(IocTypes.ICompositionalRoot);

View File

@@ -1,29 +1,36 @@
{
"compileOnSave": false,
"compilerOptions": {
"target": "es2020",
"module": "es2020",
"allowJs": true,
"removeComments": true,
"resolveJsonModule": true,
"typeRoots": [
"./node_modules/@types"
],
"sourceMap": true,
"outDir": "dist",
"strict": true,
"lib": [
"es2020"
],
"baseUrl": ".",
"forceConsistentCasingInFileNames": true,
"esModuleInterop": true,
"target": "ESNext",
"lib": ["ESNext"],
"typeRoots": ["node_modules/@types"],
"allowSyntheticDefaultImports": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"moduleResolution": "Node",
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"moduleResolution": "node",
"module": "ESNext",
"pretty": true,
"sourceMap": true,
"declaration": true,
"outDir": "dist",
"allowJs": false,
"noEmit": false,
"esModuleInterop": true,
"resolveJsonModule": true,
"importHelpers": true,
"baseUrl": "src",
"paths": {
"@/*": ["*"],
"@enums/*": ["lib/enums/*"],
"@repository/*": ["lib/repository/*"],
"@interfaces/*": ["lib/interfaces/*"],
"@models/*": ["lib/models/*"],
"@services/*": ["lib/services/*"],
"@helpers/*": ["lib/helpers/*"],
"@jobs/*": ["lib/jobs/*"]
}
},
"include": [
"src/**/*"
],
"exclude": ["node_modules"],
"include": ["src/**/*.ts"],
"exclude": ["node_modules"]
}